From 0940ba85b3e9a7ccd4466b03e3f12edcd2fc2106 Mon Sep 17 00:00:00 2001 From: pixhawk Date: Fri, 1 Oct 2010 08:38:23 +0200 Subject: [PATCH] Removed GLUT --- lib/glut-3.7.6/CHANGES | 988 -- lib/glut-3.7.6/FAQ.glut | 915 -- lib/glut-3.7.6/Glut.cf | 197 - lib/glut-3.7.6/IAFA-PACKAGE | 9 - lib/glut-3.7.6/Imakefile | 7 - lib/glut-3.7.6/NOTICE | 15 - lib/glut-3.7.6/Portability.txt | 135 - lib/glut-3.7.6/README | 186 - lib/glut-3.7.6/README-win32.txt | 613 - lib/glut-3.7.6/README.ada | 42 - lib/glut-3.7.6/README.fortran | 190 - lib/glut-3.7.6/README.glut2 | 84 - lib/glut-3.7.6/README.glut3 | 114 - lib/glut-3.7.6/README.ibm-shlib | 79 - lib/glut-3.7.6/README.inventor | 57 - lib/glut-3.7.6/README.irix6 | 68 - lib/glut-3.7.6/README.irix64bit | 6 - lib/glut-3.7.6/README.linux | 29 - lib/glut-3.7.6/README.man | 80 - lib/glut-3.7.6/README.mesa | 33 - lib/glut-3.7.6/README.mui | 91 - lib/glut-3.7.6/README.xinput | 265 - lib/glut-3.7.6/adainclude/GL/glut.adb | 118 - lib/glut-3.7.6/adainclude/GL/glut.ads | 920 -- lib/glut-3.7.6/glut-3.7.6.pro | 167 - lib/glut-3.7.6/glut.dsw | 29 - lib/glut-3.7.6/glutdefs | 50 - lib/glut-3.7.6/include/GL/fgl.h | 1707 -- lib/glut-3.7.6/include/GL/fglu.h | 210 - lib/glut-3.7.6/include/GL/fglut.h | 321 - lib/glut-3.7.6/include/GL/glsmap.h | 137 - lib/glut-3.7.6/include/GL/glut.h | 716 - lib/glut-3.7.6/include/GL/glutf90.h | 81 - lib/glut-3.7.6/include/GL/tube.h | 205 - lib/glut-3.7.6/include/mui/browser.h | 47 - lib/glut-3.7.6/include/mui/displaylist.h | 61 - lib/glut-3.7.6/include/mui/gizmo.h | 241 - lib/glut-3.7.6/include/mui/hslider.h | 39 - lib/glut-3.7.6/include/mui/mui.h | 156 - lib/glut-3.7.6/include/mui/textlist.h | 38 - lib/glut-3.7.6/include/mui/uicolor.h | 63 - lib/glut-3.7.6/include/mui/vslider.h | 39 - lib/glut-3.7.6/lib/Imakefile | 13 - lib/glut-3.7.6/lib/_all.dsp | 63 - lib/glut-3.7.6/lib/dll.dsw | 41 - lib/glut-3.7.6/lib/fglut.n32/ObjectType.mk | 2 - lib/glut-3.7.6/lib/fglut.n64/ObjectType.mk | 2 - lib/glut-3.7.6/lib/fglut/ObjectType.mk | 2 - lib/glut-3.7.6/lib/fglut/fglut.c | 287 - lib/glut-3.7.6/lib/fglut/fglut_8x13.c | 11 - lib/glut-3.7.6/lib/fglut/fglut_9x15.c | 11 - lib/glut-3.7.6/lib/fglut/fglut_hel10.c | 11 - lib/glut-3.7.6/lib/fglut/fglut_hel12.c | 11 - lib/glut-3.7.6/lib/fglut/fglut_hel18.c | 11 - lib/glut-3.7.6/lib/fglut/fglut_mroman.c | 11 - lib/glut-3.7.6/lib/fglut/fglut_roman.c | 11 - lib/glut-3.7.6/lib/fglut/fglut_tr10.c | 11 - lib/glut-3.7.6/lib/fglut/fglut_tr24.c | 11 - lib/glut-3.7.6/lib/gle.n32/ObjectType.mk | 2 - lib/glut-3.7.6/lib/gle.n64/ObjectType.mk | 3 - lib/glut-3.7.6/lib/gle/Imakefile | 30 - lib/glut-3.7.6/lib/gle/ObjectType.mk | 2 - lib/glut-3.7.6/lib/gle/copy.h | 18 - lib/glut-3.7.6/lib/gle/ex_angle.c | 519 - lib/glut-3.7.6/lib/gle/ex_cut_round.c | 1314 -- lib/glut-3.7.6/lib/gle/ex_raw.c | 948 -- lib/glut-3.7.6/lib/gle/extrude.c | 787 - lib/glut-3.7.6/lib/gle/extrude.h | 94 - lib/glut-3.7.6/lib/gle/gle.dsp | 173 - lib/glut-3.7.6/lib/gle/gle_dll.dsp | 180 - lib/glut-3.7.6/lib/gle/gutil.h | 91 - lib/glut-3.7.6/lib/gle/intersect.c | 67 - lib/glut-3.7.6/lib/gle/intersect.h | 391 - lib/glut-3.7.6/lib/gle/port.h | 296 - lib/glut-3.7.6/lib/gle/qmesh.c | 196 - lib/glut-3.7.6/lib/gle/rot.h | 98 - lib/glut-3.7.6/lib/gle/rot_prince.c | 303 - lib/glut-3.7.6/lib/gle/rotate.c | 134 - lib/glut-3.7.6/lib/gle/round_cap.c | 211 - lib/glut-3.7.6/lib/gle/segment.c | 423 - lib/glut-3.7.6/lib/gle/segment.h | 95 - lib/glut-3.7.6/lib/gle/texgen.c | 404 - lib/glut-3.7.6/lib/gle/tube_gc.h | 73 - lib/glut-3.7.6/lib/gle/urotate.c | 217 - lib/glut-3.7.6/lib/gle/view.c | 308 - lib/glut-3.7.6/lib/gle/vvector.h | 1339 -- lib/glut-3.7.6/lib/glsmap.n32/ObjectType.mk | 2 - lib/glut-3.7.6/lib/glsmap.n64/ObjectType.mk | 3 - lib/glut-3.7.6/lib/glsmap/Imakefile | 32 - lib/glut-3.7.6/lib/glsmap/ObjectType.mk | 2 - lib/glut-3.7.6/lib/glsmap/glsmap.dsp | 172 - lib/glut-3.7.6/lib/glsmap/glsmapint.h | 102 - lib/glut-3.7.6/lib/glsmap/smap_buildsmap.c | 227 - lib/glut-3.7.6/lib/glsmap/smap_context.c | 20 - lib/glut-3.7.6/lib/glsmap/smap_create.c | 98 - lib/glut-3.7.6/lib/glsmap/smap_destroy.c | 34 - lib/glut-3.7.6/lib/glsmap/smap_drawmesh.c | 50 - lib/glut-3.7.6/lib/glsmap/smap_flag.c | 20 - lib/glut-3.7.6/lib/glsmap/smap_get.c | 32 - lib/glut-3.7.6/lib/glsmap/smap_getfunc.c | 20 - lib/glut-3.7.6/lib/glsmap/smap_gettexdim.c | 21 - lib/glut-3.7.6/lib/glsmap/smap_gettexobj.c | 31 - lib/glut-3.7.6/lib/glsmap/smap_getvec.c | 33 - lib/glut-3.7.6/lib/glsmap/smap_makemesh.c | 253 - lib/glut-3.7.6/lib/glsmap/smap_nearfar.c | 26 - lib/glut-3.7.6/lib/glsmap/smap_origin.c | 34 - lib/glut-3.7.6/lib/glsmap/smap_render.c | 26 - lib/glut-3.7.6/lib/glsmap/smap_rvec2st.c | 79 - lib/glut-3.7.6/lib/glsmap/smap_set.c | 32 - lib/glut-3.7.6/lib/glsmap/smap_setfunc.c | 20 - lib/glut-3.7.6/lib/glsmap/smap_setvec.c | 33 - lib/glut-3.7.6/lib/glsmap/smap_texdim.c | 21 - lib/glut-3.7.6/lib/glsmap/smap_texobj.c | 31 - lib/glut-3.7.6/lib/glut.n32/ObjectType.mk | 2 - lib/glut-3.7.6/lib/glut.n64/ObjectType.mk | 3 - lib/glut-3.7.6/lib/glut/Imakefile | 174 - lib/glut-3.7.6/lib/glut/MonoRoman.stroke | 503 - lib/glut-3.7.6/lib/glut/ObjectType.mk | 2 - lib/glut-3.7.6/lib/glut/Roman.stroke | 604 - lib/glut-3.7.6/lib/glut/capturexfont.c | 352 - lib/glut-3.7.6/lib/glut/glut.def | 126 - lib/glut-3.7.6/lib/glut/glut.ico | Bin 3638 -> 0 bytes lib/glut-3.7.6/lib/glut/glut.rc | 1 - lib/glut-3.7.6/lib/glut/glut32.dsp | 351 - lib/glut-3.7.6/lib/glut/glut_8x13.c | 2073 --- lib/glut-3.7.6/lib/glut/glut_9x15.c | 2075 --- lib/glut-3.7.6/lib/glut/glut_bitmap.c | 57 - lib/glut-3.7.6/lib/glut/glut_bwidth.c | 58 - lib/glut-3.7.6/lib/glut/glut_cindex.c | 252 - lib/glut-3.7.6/lib/glut/glut_cmap.c | 395 - lib/glut-3.7.6/lib/glut/glut_cursor.c | 201 - lib/glut-3.7.6/lib/glut/glut_dials.c | 26 - lib/glut-3.7.6/lib/glut/glut_dstr.c | 1637 -- lib/glut-3.7.6/lib/glut/glut_event.c | 1386 -- lib/glut-3.7.6/lib/glut/glut_ext.c | 53 - lib/glut-3.7.6/lib/glut/glut_fcb.c | 164 - lib/glut-3.7.6/lib/glut/glut_fullscrn.c | 52 - lib/glut-3.7.6/lib/glut/glut_gamemode.c | 674 - lib/glut-3.7.6/lib/glut/glut_get.c | 216 - lib/glut-3.7.6/lib/glut/glut_glxext.c | 48 - lib/glut-3.7.6/lib/glut/glut_hel10.c | 1778 --- lib/glut-3.7.6/lib/glut/glut_hel12.c | 1788 --- lib/glut-3.7.6/lib/glut/glut_hel18.c | 1897 --- lib/glut-3.7.6/lib/glut/glut_init.c | 370 - lib/glut-3.7.6/lib/glut/glut_input.c | 645 - lib/glut-3.7.6/lib/glut/glut_joy.c | 80 - lib/glut-3.7.6/lib/glut/glut_key.c | 29 - lib/glut-3.7.6/lib/glut/glut_keyctrl.c | 29 - lib/glut-3.7.6/lib/glut/glut_keyup.c | 29 - lib/glut-3.7.6/lib/glut/glut_menu.c | 1010 -- lib/glut-3.7.6/lib/glut/glut_menu2.c | 185 - lib/glut-3.7.6/lib/glut/glut_mesa.c | 57 - lib/glut-3.7.6/lib/glut/glut_modifier.c | 31 - lib/glut-3.7.6/lib/glut/glut_mroman.c | 2451 --- lib/glut-3.7.6/lib/glut/glut_overlay.c | 607 - lib/glut-3.7.6/lib/glut/glut_roman.c | 2451 --- lib/glut-3.7.6/lib/glut/glut_shapes.c | 596 - lib/glut-3.7.6/lib/glut/glut_space.c | 35 - lib/glut-3.7.6/lib/glut/glut_stroke.c | 42 - lib/glut-3.7.6/lib/glut/glut_swap.c | 47 - lib/glut-3.7.6/lib/glut/glut_swidth.c | 58 - lib/glut-3.7.6/lib/glut/glut_tablet.c | 33 - lib/glut-3.7.6/lib/glut/glut_teapot.c | 210 - lib/glut-3.7.6/lib/glut/glut_tr10.c | 1777 --- lib/glut-3.7.6/lib/glut/glut_tr24.c | 2060 --- lib/glut-3.7.6/lib/glut/glut_util.c | 86 - lib/glut-3.7.6/lib/glut/glut_vidresize.c | 230 - lib/glut-3.7.6/lib/glut/glut_warp.c | 23 - lib/glut-3.7.6/lib/glut/glut_win.c | 1014 -- lib/glut-3.7.6/lib/glut/glut_winmisc.c | 122 - lib/glut-3.7.6/lib/glut/glutbitmap.h | 32 - lib/glut-3.7.6/lib/glut/glutint.h | 779 - lib/glut-3.7.6/lib/glut/glutstroke.h | 42 - lib/glut-3.7.6/lib/glut/glutwin32.h | 48 - lib/glut-3.7.6/lib/glut/layerutil.c | 201 - lib/glut-3.7.6/lib/glut/layerutil.h | 55 - lib/glut-3.7.6/lib/glut/mesa.patch2 | 38 - lib/glut-3.7.6/lib/glut/stroke.h | 134 - lib/glut-3.7.6/lib/glut/strokegen.y | 649 - lib/glut-3.7.6/lib/glut/strokelex.l | 131 - lib/glut-3.7.6/lib/glut/win32_glx.c | 254 - lib/glut-3.7.6/lib/glut/win32_glx.h | 58 - lib/glut-3.7.6/lib/glut/win32_menu.c | 531 - lib/glut-3.7.6/lib/glut/win32_util.c | 134 - lib/glut-3.7.6/lib/glut/win32_winproc.c | 763 - lib/glut-3.7.6/lib/glut/win32_x11.c | 403 - lib/glut-3.7.6/lib/glut/win32_x11.h | 319 - lib/glut-3.7.6/lib/lib.dsw | 89 - lib/glut-3.7.6/lib/mui.n32/ObjectType.mk | 2 - lib/glut-3.7.6/lib/mui.n64/ObjectType.mk | 3 - lib/glut-3.7.6/lib/mui/Imakefile | 26 - lib/glut-3.7.6/lib/mui/ObjectType.mk | 2 - lib/glut-3.7.6/lib/mui/browseparse.c | 98 - lib/glut-3.7.6/lib/mui/browser.c | 419 - lib/glut-3.7.6/lib/mui/button.c | 508 - lib/glut-3.7.6/lib/mui/dirent32.h | 96 - lib/glut-3.7.6/lib/mui/displaylist.c | 154 - lib/glut-3.7.6/lib/mui/gizmo.c | 447 - lib/glut-3.7.6/lib/mui/glutmui.c | 184 - lib/glut-3.7.6/lib/mui/hslider.c | 488 - lib/glut-3.7.6/lib/mui/miscui.c | 129 - lib/glut-3.7.6/lib/mui/mui.c | 638 - lib/glut-3.7.6/lib/mui/mui.dsp | 137 - lib/glut-3.7.6/lib/mui/pulldown.c | 469 - lib/glut-3.7.6/lib/mui/textlist.c | 438 - lib/glut-3.7.6/lib/mui/uicolor.c | 139 - lib/glut-3.7.6/lib/mui/vslider.c | 490 - lib/glut-3.7.6/man/Imakefile | 7 - lib/glut-3.7.6/man/gle/Imakefile | 39 - lib/glut-3.7.6/man/gle/gle.man | 66 - lib/glut-3.7.6/man/gle/gleExtrusion.man | 57 - lib/glut-3.7.6/man/gle/gleHelicoid.man | 48 - lib/glut-3.7.6/man/gle/gleLathe.man | 62 - lib/glut-3.7.6/man/gle/glePolyCone.man | 42 - lib/glut-3.7.6/man/gle/glePolyCylinder.man | 42 - lib/glut-3.7.6/man/gle/gleScrew.man | 43 - lib/glut-3.7.6/man/gle/gleSetJoinStyle.man | 88 - lib/glut-3.7.6/man/gle/gleSpiral.man | 110 - lib/glut-3.7.6/man/gle/gleSuperExtrusion.man | 64 - lib/glut-3.7.6/man/gle/gleTextureMode.man | 160 - lib/glut-3.7.6/man/gle/gleToroid.man | 48 - lib/glut-3.7.6/man/gle/gleTwistExtrusion.man | 66 - lib/glut-3.7.6/man/glut/Imakefile | 132 - lib/glut-3.7.6/man/glut/glut.man | 247 - lib/glut-3.7.6/man/glut/glutAddMenuEntry.man | 26 - lib/glut-3.7.6/man/glut/glutAddSubMenu.man | 27 - lib/glut-3.7.6/man/glut/glutAttachMenu.man | 29 - .../man/glut/glutBitmapCharacter.man | 102 - lib/glut-3.7.6/man/glut/glutBitmapWidth.man | 34 - lib/glut-3.7.6/man/glut/glutButtonBoxFunc.man | 37 - .../man/glut/glutChangeToMenuEntry.man | 32 - .../man/glut/glutChangeToSubMenu.man | 32 - lib/glut-3.7.6/man/glut/glutCopyColormap.man | 47 - lib/glut-3.7.6/man/glut/glutCreateMenu.man | 61 - .../man/glut/glutCreateSubWindow.man | 47 - lib/glut-3.7.6/man/glut/glutCreateWindow.man | 43 - lib/glut-3.7.6/man/glut/glutDestroyMenu.man | 22 - lib/glut-3.7.6/man/glut/glutDestroyWindow.man | 25 - lib/glut-3.7.6/man/glut/glutDeviceGet.man | 85 - lib/glut-3.7.6/man/glut/glutDialsFunc.man | 37 - lib/glut-3.7.6/man/glut/glutDisplayFunc.man | 59 - lib/glut-3.7.6/man/glut/glutEnterGameMode.man | 72 - lib/glut-3.7.6/man/glut/glutEntryFunc.man | 31 - .../man/glut/glutEstablishOverlay.man | 97 - .../man/glut/glutExtensionSupported.man | 49 - .../man/glut/glutForceJoystickFunc.man | 40 - lib/glut-3.7.6/man/glut/glutFullScreen.man | 38 - lib/glut-3.7.6/man/glut/glutGameModeGet.man | 52 - .../man/glut/glutGameModeString.man | 20 - lib/glut-3.7.6/man/glut/glutGet.man | 161 - lib/glut-3.7.6/man/glut/glutGetColor.man | 33 - lib/glut-3.7.6/man/glut/glutGetModifiers.man | 35 - lib/glut-3.7.6/man/glut/glutIdleFunc.man | 73 - .../man/glut/glutIgnoreKeyRepeat.man | 30 - lib/glut-3.7.6/man/glut/glutInit.man | 81 - .../man/glut/glutInitDisplayMode.man | 93 - .../man/glut/glutInitDisplayString.man | 250 - .../man/glut/glutInitWindowPosition.man | 74 - lib/glut-3.7.6/man/glut/glutJoystickFunc.man | 67 - lib/glut-3.7.6/man/glut/glutKeyboardFunc.man | 38 - .../man/glut/glutKeyboardUpFunc.man | 47 - lib/glut-3.7.6/man/glut/glutLayerGet.man | 51 - lib/glut-3.7.6/man/glut/glutMainLoop.man | 20 - .../man/glut/glutMenuStatusFunc.man | 50 - lib/glut-3.7.6/man/glut/glutMotionFunc.man | 34 - lib/glut-3.7.6/man/glut/glutMouseFunc.man | 45 - .../man/glut/glutOverlayDisplayFunc.man | 49 - lib/glut-3.7.6/man/glut/glutPopWindow.man | 24 - .../man/glut/glutPositionWindow.man | 39 - .../man/glut/glutPostOverlayRedisplay.man | 88 - lib/glut-3.7.6/man/glut/glutPostRedisplay.man | 37 - .../man/glut/glutRemoveMenuItem.man | 23 - lib/glut-3.7.6/man/glut/glutRemoveOverlay.man | 26 - lib/glut-3.7.6/man/glut/glutReportErrors.man | 29 - lib/glut-3.7.6/man/glut/glutReshapeFunc.man | 41 - lib/glut-3.7.6/man/glut/glutReshapeWindow.man | 40 - lib/glut-3.7.6/man/glut/glutSetColor.man | 35 - lib/glut-3.7.6/man/glut/glutSetCursor.man | 99 - lib/glut-3.7.6/man/glut/glutSetKeyRepeat.man | 30 - lib/glut-3.7.6/man/glut/glutSetMenu.man | 23 - lib/glut-3.7.6/man/glut/glutSetWindow.man | 26 - .../man/glut/glutSetWindowTitle.man | 30 - lib/glut-3.7.6/man/glut/glutShowOverlay.man | 26 - lib/glut-3.7.6/man/glut/glutShowWindow.man | 28 - lib/glut-3.7.6/man/glut/glutSolidCone.man | 34 - lib/glut-3.7.6/man/glut/glutSolidCube.man | 25 - .../man/glut/glutSolidDodecahedron.man | 23 - .../man/glut/glutSolidIcosahedron.man | 23 - .../man/glut/glutSolidOctahedron.man | 23 - lib/glut-3.7.6/man/glut/glutSolidSphere.man | 31 - lib/glut-3.7.6/man/glut/glutSolidTeapot.man | 42 - .../man/glut/glutSolidTetrahedron.man | 23 - lib/glut-3.7.6/man/glut/glutSolidTorus.man | 36 - .../man/glut/glutSpaceballButtonFunc.man | 36 - .../man/glut/glutSpaceballMotionFunc.man | 34 - .../man/glut/glutSpaceballRotateFunc.man | 35 - lib/glut-3.7.6/man/glut/glutSpecialFunc.man | 102 - lib/glut-3.7.6/man/glut/glutSpecialUpFunc.man | 105 - .../man/glut/glutStrokeCharacter.man | 66 - lib/glut-3.7.6/man/glut/glutStrokeWidth.man | 35 - lib/glut-3.7.6/man/glut/glutSwapBuffers.man | 30 - .../man/glut/glutTabletButtonFunc.man | 39 - .../man/glut/glutTabletMotionFunc.man | 34 - lib/glut-3.7.6/man/glut/glutTimerFunc.man | 37 - lib/glut-3.7.6/man/glut/glutUseLayer.man | 28 - .../man/glut/glutVisibilityFunc.man | 39 - lib/glut-3.7.6/man/glut/glutWarpPointer.man | 39 - lib/glut-3.7.6/mkmkfiles.imake | 65 - lib/glut-3.7.6/mkmkfiles.sgi | 12 - lib/glut-3.7.6/progs/Imakefile | 14 - lib/glut-3.7.6/progs/ada/README | 10 - lib/glut-3.7.6/progs/ada/ada_sphere.adb | 40 - lib/glut-3.7.6/progs/ada/ada_sphere_procs.adb | 60 - lib/glut-3.7.6/progs/ada/ada_sphere_procs.ads | 10 - lib/glut-3.7.6/progs/ada/bezmesh.adb | 71 - lib/glut-3.7.6/progs/ada/bezmesh_procs.adb | 116 - lib/glut-3.7.6/progs/ada/bezmesh_procs.ads | 46 - lib/glut-3.7.6/progs/ada/cone.adb | 68 - lib/glut-3.7.6/progs/ada/cone_procs.adb | 120 - lib/glut-3.7.6/progs/ada/cone_procs.ads | 44 - lib/glut-3.7.6/progs/ada/dof.adb | 68 - lib/glut-3.7.6/progs/ada/dof_procs.adb | 200 - lib/glut-3.7.6/progs/ada/dof_procs.ads | 62 - lib/glut-3.7.6/progs/ada/fog.adb | 67 - lib/glut-3.7.6/progs/ada/fog_procs.adb | 162 - lib/glut-3.7.6/progs/ada/fog_procs.ads | 48 - lib/glut-3.7.6/progs/ada/jitter.ads | 182 - lib/glut-3.7.6/progs/ada/pickdepth.adb | 69 - lib/glut-3.7.6/progs/ada/pickdepth_procs.adb | 166 - lib/glut-3.7.6/progs/ada/pickdepth_procs.ads | 45 - lib/glut-3.7.6/progs/ada/scenebamb.adb | 68 - lib/glut-3.7.6/progs/ada/scenebamb_procs.adb | 109 - lib/glut-3.7.6/progs/ada/scenebamb_procs.ads | 42 - lib/glut-3.7.6/progs/ada/teapots.adb | 70 - lib/glut-3.7.6/progs/ada/teapots_procs.adb | 178 - lib/glut-3.7.6/progs/ada/teapots_procs.ads | 50 - lib/glut-3.7.6/progs/ada/texgen.adb | 68 - lib/glut-3.7.6/progs/ada/texgen_procs.adb | 121 - lib/glut-3.7.6/progs/ada/texgen_procs.ads | 42 - lib/glut-3.7.6/progs/ada/texturesurf.adb | 68 - .../progs/ada/texturesurf_procs.adb | 139 - .../progs/ada/texturesurf_procs.ads | 44 - lib/glut-3.7.6/progs/advanced.dsw | 659 - lib/glut-3.7.6/progs/advanced/Imakefile | 83 - lib/glut-3.7.6/progs/advanced/README | 53 - lib/glut-3.7.6/progs/advanced/Times-Italic.bw | Bin 29864 -> 0 bytes lib/glut-3.7.6/progs/advanced/_all.dsp | 63 - lib/glut-3.7.6/progs/advanced/accumaa.c | 277 - lib/glut-3.7.6/progs/advanced/accumaa.dsp | 88 - lib/glut-3.7.6/progs/advanced/addfog.c | 296 - lib/glut-3.7.6/progs/advanced/addfog.h | 8 - lib/glut-3.7.6/progs/advanced/af_depthcue.c | 163 - lib/glut-3.7.6/progs/advanced/af_depthcue.dsp | 96 - lib/glut-3.7.6/progs/advanced/af_teapots.c | 222 - lib/glut-3.7.6/progs/advanced/af_teapots.dsp | 92 - lib/glut-3.7.6/progs/advanced/boundary.c | 349 - lib/glut-3.7.6/progs/advanced/boundary.dsp | 88 - lib/glut-3.7.6/progs/advanced/comp.c | 182 - lib/glut-3.7.6/progs/advanced/comp.dsp | 96 - lib/glut-3.7.6/progs/advanced/convolve.c | 397 - lib/glut-3.7.6/progs/advanced/convolve.dsp | 88 - lib/glut-3.7.6/progs/advanced/csg.c | 343 - lib/glut-3.7.6/progs/advanced/csg.dsp | 88 - lib/glut-3.7.6/progs/advanced/decal.c | 123 - lib/glut-3.7.6/progs/advanced/decal.dsp | 88 - lib/glut-3.7.6/progs/advanced/dissolve.c | 441 - lib/glut-3.7.6/progs/advanced/dissolve.dsp | 88 - lib/glut-3.7.6/progs/advanced/envmap.c | 1195 -- lib/glut-3.7.6/progs/advanced/envmap.dsp | 96 - lib/glut-3.7.6/progs/advanced/envphong.c | 671 - lib/glut-3.7.6/progs/advanced/envphong.dsp | 88 - lib/glut-3.7.6/progs/advanced/field.c | 258 - lib/glut-3.7.6/progs/advanced/field.dsp | 88 - lib/glut-3.7.6/progs/advanced/genmipmap.c | 192 - lib/glut-3.7.6/progs/advanced/genmipmap.dsp | 96 - lib/glut-3.7.6/progs/advanced/haloed.c | 274 - lib/glut-3.7.6/progs/advanced/haloed.dsp | 88 - lib/glut-3.7.6/progs/advanced/hello2rts.c | 636 - lib/glut-3.7.6/progs/advanced/hello2rts.dsp | 100 - lib/glut-3.7.6/progs/advanced/hiddenline.c | 335 - lib/glut-3.7.6/progs/advanced/hiddenline.dsp | 88 - lib/glut-3.7.6/progs/advanced/imgproc.c | 288 - lib/glut-3.7.6/progs/advanced/imgproc.dsp | 96 - lib/glut-3.7.6/progs/advanced/izoom.c | 671 - lib/glut-3.7.6/progs/advanced/izoom.h | 49 - lib/glut-3.7.6/progs/advanced/logopoints.h | 33 - lib/glut-3.7.6/progs/advanced/mipmap_lines.c | 301 - .../progs/advanced/mipmap_lines.dsp | 104 - lib/glut-3.7.6/progs/advanced/motionblur.c | 241 - lib/glut-3.7.6/progs/advanced/motionblur.dsp | 88 - lib/glut-3.7.6/progs/advanced/multilight.c | 536 - lib/glut-3.7.6/progs/advanced/multilight.dsp | 88 - lib/glut-3.7.6/progs/advanced/nvidia_logo.c | 239 - lib/glut-3.7.6/progs/advanced/occlude.c | 488 - lib/glut-3.7.6/progs/advanced/occlude.dsp | 88 - lib/glut-3.7.6/progs/advanced/pointburst.c | 567 - lib/glut-3.7.6/progs/advanced/pointburst.dsp | 88 - lib/glut-3.7.6/progs/advanced/projshadow.c | 377 - lib/glut-3.7.6/progs/advanced/projshadow.dsp | 88 - lib/glut-3.7.6/progs/advanced/projtex.c | 916 -- lib/glut-3.7.6/progs/advanced/projtex.dsp | 96 - lib/glut-3.7.6/progs/advanced/rasonly.c | 326 - lib/glut-3.7.6/progs/advanced/rasonly.dsp | 88 - .../progs/advanced/redblue_stereo.c | 289 - .../progs/advanced/redblue_stereo.dsp | 88 - lib/glut-3.7.6/progs/advanced/rts.c | 2168 --- lib/glut-3.7.6/progs/advanced/rtshadow.h | 182 - lib/glut-3.7.6/progs/advanced/sgiflag.c | 488 - lib/glut-3.7.6/progs/advanced/sgiflag.dsp | 88 - lib/glut-3.7.6/progs/advanced/sgiflag.h | 67 - lib/glut-3.7.6/progs/advanced/shadowfun.c | 1163 -- lib/glut-3.7.6/progs/advanced/shadowfun.dsp | 88 - lib/glut-3.7.6/progs/advanced/shadowmap.c | 447 - lib/glut-3.7.6/progs/advanced/shadowmap.dsp | 88 - lib/glut-3.7.6/progs/advanced/shadowvol.c | 373 - lib/glut-3.7.6/progs/advanced/shadowvol.dsp | 88 - lib/glut-3.7.6/progs/advanced/silhouette.c | 248 - lib/glut-3.7.6/progs/advanced/silhouette.dsp | 88 - lib/glut-3.7.6/progs/advanced/softshadow.c | 405 - lib/glut-3.7.6/progs/advanced/softshadow.dsp | 88 - lib/glut-3.7.6/progs/advanced/sphere.c | 187 - lib/glut-3.7.6/progs/advanced/tess.c | 206 - lib/glut-3.7.6/progs/advanced/tess.dsp | 92 - lib/glut-3.7.6/progs/advanced/textext.c | 186 - lib/glut-3.7.6/progs/advanced/textext.dsp | 104 - lib/glut-3.7.6/progs/advanced/textile.c | 427 - lib/glut-3.7.6/progs/advanced/textile.dsp | 96 - lib/glut-3.7.6/progs/advanced/textmap.c | 328 - lib/glut-3.7.6/progs/advanced/textmap.h | 30 - lib/glut-3.7.6/progs/advanced/textrim.c | 285 - lib/glut-3.7.6/progs/advanced/textrim.dsp | 96 - lib/glut-3.7.6/progs/advanced/texture.c | 245 - lib/glut-3.7.6/progs/advanced/texture.h | 7 - lib/glut-3.7.6/progs/advanced/texwinalign.c | 354 - lib/glut-3.7.6/progs/advanced/texwinalign.dsp | 88 - lib/glut-3.7.6/progs/advanced/tvertex.c | 281 - lib/glut-3.7.6/progs/advanced/tvertex.dsp | 88 - lib/glut-3.7.6/progs/advanced/videoresize.c | 617 - lib/glut-3.7.6/progs/advanced/videoresize.dsp | 92 - lib/glut-3.7.6/progs/advanced/vox.c | 892 -- lib/glut-3.7.6/progs/advanced/vox.dsp | 88 - lib/glut-3.7.6/progs/advanced/warp.c | 284 - lib/glut-3.7.6/progs/advanced/warp.dsp | 96 - lib/glut-3.7.6/progs/advanced/zcomposite.c | 437 - lib/glut-3.7.6/progs/advanced/zcomposite.dsp | 88 - lib/glut-3.7.6/progs/advanced97.dsw | 779 - lib/glut-3.7.6/progs/advanced97/Imakefile | 77 - lib/glut-3.7.6/progs/advanced97/_all.dsp | 63 - lib/glut-3.7.6/progs/advanced97/accconvolve.c | 223 - .../progs/advanced97/accconvolve.dsp | 96 - lib/glut-3.7.6/progs/advanced97/accumaa.c | 272 - lib/glut-3.7.6/progs/advanced97/accumaa.dsp | 88 - lib/glut-3.7.6/progs/advanced97/alphablend.c | 176 - .../progs/advanced97/alphablend.dsp | 88 - .../progs/advanced97/alphablendnosort.c | 171 - .../progs/advanced97/alphablendnosort.dsp | 88 - lib/glut-3.7.6/progs/advanced97/billboard.c | 339 - lib/glut-3.7.6/progs/advanced97/billboard.dsp | 96 - lib/glut-3.7.6/progs/advanced97/bubble.c | 450 - lib/glut-3.7.6/progs/advanced97/bubble.dsp | 96 - lib/glut-3.7.6/progs/advanced97/bump.c | 879 - lib/glut-3.7.6/progs/advanced97/bump.dsp | 96 - lib/glut-3.7.6/progs/advanced97/chromakey.c | 262 - lib/glut-3.7.6/progs/advanced97/chromakey.dsp | 96 - .../progs/advanced97/chromakey_fancy.c | 325 - .../progs/advanced97/chromakey_fancy.dsp | 96 - lib/glut-3.7.6/progs/advanced97/cloud.c | 243 - lib/glut-3.7.6/progs/advanced97/cloud.dsp | 96 - lib/glut-3.7.6/progs/advanced97/cloudl.c | 285 - lib/glut-3.7.6/progs/advanced97/cloudl.dsp | 96 - lib/glut-3.7.6/progs/advanced97/complexity.c | 234 - .../progs/advanced97/complexity.dsp | 88 - lib/glut-3.7.6/progs/advanced97/csg.c | 1408 -- lib/glut-3.7.6/progs/advanced97/csg.dsp | 88 - lib/glut-3.7.6/progs/advanced97/d.c | 129 - lib/glut-3.7.6/progs/advanced97/decal.c | 611 - lib/glut-3.7.6/progs/advanced97/decal.dsp | 88 - lib/glut-3.7.6/progs/advanced97/dissolve.c | 443 - lib/glut-3.7.6/progs/advanced97/dissolve.dsp | 88 - lib/glut-3.7.6/progs/advanced97/explode.c | 388 - lib/glut-3.7.6/progs/advanced97/explode.dsp | 96 - lib/glut-3.7.6/progs/advanced97/fire.c | 480 - lib/glut-3.7.6/progs/advanced97/fire.dsp | 108 - .../progs/advanced97/genspheremap.c | 291 - .../progs/advanced97/genspheremap.dsp | 96 - lib/glut-3.7.6/progs/advanced97/highlight.c | 704 - lib/glut-3.7.6/progs/advanced97/highlight.dsp | 96 - lib/glut-3.7.6/progs/advanced97/interp.c | 261 - lib/glut-3.7.6/progs/advanced97/interp.dsp | 96 - lib/glut-3.7.6/progs/advanced97/lightmap.c | 1052 -- lib/glut-3.7.6/progs/advanced97/lightmap.dsp | 96 - lib/glut-3.7.6/progs/advanced97/lightp.c | 315 - lib/glut-3.7.6/progs/advanced97/lightp.dsp | 96 - lib/glut-3.7.6/progs/advanced97/line.c | 224 - lib/glut-3.7.6/progs/advanced97/line.dsp | 88 - .../progs/advanced97/multiaccumaa.c | 436 - .../progs/advanced97/multiaccumaa.dsp | 88 - .../progs/advanced97/multialphablend.c | 202 - .../progs/advanced97/multialphablend.dsp | 88 - .../progs/advanced97/multialphablendnosort.c | 190 - .../advanced97/multialphablendnosort.dsp | 88 - lib/glut-3.7.6/progs/advanced97/multimirror.c | 367 - .../progs/advanced97/multimirror.dsp | 88 - .../progs/advanced97/multiscreendoor.c | 195 - .../progs/advanced97/multiscreendoor.dsp | 88 - .../progs/advanced97/multispheremap.c | 737 - .../progs/advanced97/multispheremap.dsp | 96 - lib/glut-3.7.6/progs/advanced97/noise.c | 263 - lib/glut-3.7.6/progs/advanced97/noise.dsp | 88 - lib/glut-3.7.6/progs/advanced97/nthsurfdemo.c | 590 - .../progs/advanced97/nthsurfdemo.dsp | 88 - lib/glut-3.7.6/progs/advanced97/paint.c | 266 - lib/glut-3.7.6/progs/advanced97/paint.dsp | 96 - lib/glut-3.7.6/progs/advanced97/projtex.c | 837 - lib/glut-3.7.6/progs/advanced97/projtex.dsp | 96 - lib/glut-3.7.6/progs/advanced97/sbias.c | 192 - lib/glut-3.7.6/progs/advanced97/sbias.dsp | 96 - lib/glut-3.7.6/progs/advanced97/screendoor.c | 194 - .../progs/advanced97/screendoor.dsp | 88 - lib/glut-3.7.6/progs/advanced97/sm.c | 112 - lib/glut-3.7.6/progs/advanced97/sm.h | 5 - lib/glut-3.7.6/progs/advanced97/smoke.c | 397 - lib/glut-3.7.6/progs/advanced97/smoke.dsp | 96 - lib/glut-3.7.6/progs/advanced97/softshadow2.c | 632 - .../progs/advanced97/softshadow2.dsp | 88 - lib/glut-3.7.6/progs/advanced97/spectral.c | 518 - lib/glut-3.7.6/progs/advanced97/spectral.dsp | 88 - lib/glut-3.7.6/progs/advanced97/sphere.c | 185 - lib/glut-3.7.6/progs/advanced97/tess.c | 185 - lib/glut-3.7.6/progs/advanced97/tess.dsp | 92 - lib/glut-3.7.6/progs/advanced97/texgen.c | 292 - lib/glut-3.7.6/progs/advanced97/texgen.dsp | 88 - lib/glut-3.7.6/progs/advanced97/texmovie.c | 192 - lib/glut-3.7.6/progs/advanced97/texmovie.dsp | 92 - lib/glut-3.7.6/progs/advanced97/texpage.c | 503 - lib/glut-3.7.6/progs/advanced97/texpage.dsp | 92 - lib/glut-3.7.6/progs/advanced97/textile.c | 365 - lib/glut-3.7.6/progs/advanced97/textile.dsp | 92 - lib/glut-3.7.6/progs/advanced97/texture.c | 256 - lib/glut-3.7.6/progs/advanced97/texture.dsp | 88 - lib/glut-3.7.6/progs/advanced97/texture.h | 16 - lib/glut-3.7.6/progs/advanced97/underwater.c | 220 - .../progs/advanced97/underwater.dsp | 96 - .../progs/advanced97/usespheremap.c | 252 - .../progs/advanced97/usespheremap.dsp | 96 - lib/glut-3.7.6/progs/advanced97/vapor.c | 376 - lib/glut-3.7.6/progs/advanced97/vapor.dsp | 96 - lib/glut-3.7.6/progs/advanced97/volume.c | 666 - lib/glut-3.7.6/progs/advanced97/volume.dsp | 89 - lib/glut-3.7.6/progs/advanced97/warp.c | 323 - lib/glut-3.7.6/progs/advanced97/warp.dsp | 96 - lib/glut-3.7.6/progs/advanced97/water.c | 322 - lib/glut-3.7.6/progs/advanced97/water.dsp | 96 - lib/glut-3.7.6/progs/advanced97/zcomposite.c | 430 - .../progs/advanced97/zcomposite.dsp | 88 - lib/glut-3.7.6/progs/aux2glut.sed | 55 - lib/glut-3.7.6/progs/bucciarelli.dsw | 149 - lib/glut-3.7.6/progs/bucciarelli/Imakefile | 22 - lib/glut-3.7.6/progs/bucciarelli/README | 155 - lib/glut-3.7.6/progs/bucciarelli/_all.dsp | 63 - lib/glut-3.7.6/progs/bucciarelli/bw.rgb | Bin 54196 -> 0 bytes lib/glut-3.7.6/progs/bucciarelli/dteapot.c | 196 - lib/glut-3.7.6/progs/bucciarelli/fire.c | 697 - lib/glut-3.7.6/progs/bucciarelli/fire.dsp | 96 - .../progs/bucciarelli/glbpaltex.dsp | 88 - lib/glut-3.7.6/progs/bucciarelli/glbpaltx.c | 160 - lib/glut-3.7.6/progs/bucciarelli/gltest.c | 535 - lib/glut-3.7.6/progs/bucciarelli/gltest.dsp | 88 - lib/glut-3.7.6/progs/bucciarelli/image.c | 232 - lib/glut-3.7.6/progs/bucciarelli/image.h | 16 - lib/glut-3.7.6/progs/bucciarelli/mnt.bin | 1 - lib/glut-3.7.6/progs/bucciarelli/paltex.c | 175 - lib/glut-3.7.6/progs/bucciarelli/paltex.dsp | 88 - lib/glut-3.7.6/progs/bucciarelli/ray.c | 862 - lib/glut-3.7.6/progs/bucciarelli/ray.dsp | 88 - lib/glut-3.7.6/progs/bucciarelli/s128.rgb | Bin 54258 -> 0 bytes lib/glut-3.7.6/progs/bucciarelli/shadow.c | 117 - lib/glut-3.7.6/progs/bucciarelli/sources.c | 85 - lib/glut-3.7.6/progs/bucciarelli/teapot.c | 594 - lib/glut-3.7.6/progs/bucciarelli/teapot.dsp | 104 - lib/glut-3.7.6/progs/bucciarelli/terrain.c | 596 - lib/glut-3.7.6/progs/bucciarelli/terrain.dsp | 88 - lib/glut-3.7.6/progs/bucciarelli/tile.rgb | Bin 53807 -> 0 bytes lib/glut-3.7.6/progs/bucciarelli/tree2.rgb | Bin 24816 -> 0 bytes lib/glut-3.7.6/progs/bucciarelli/tunnel.c | 534 - lib/glut-3.7.6/progs/bucciarelli/tunnel.dsp | 100 - lib/glut-3.7.6/progs/contrib.dsw | 209 - lib/glut-3.7.6/progs/contrib/Imakefile | 26 - lib/glut-3.7.6/progs/contrib/_all.dsp | 63 - lib/glut-3.7.6/progs/contrib/agv_example.c | 215 - lib/glut-3.7.6/progs/contrib/agv_viewer.dsp | 96 - lib/glut-3.7.6/progs/contrib/agviewer.c | 497 - lib/glut-3.7.6/progs/contrib/agviewer.h | 104 - lib/glut-3.7.6/progs/contrib/engine.c | 75 - lib/glut-3.7.6/progs/contrib/fractals.c | 713 - lib/glut-3.7.6/progs/contrib/fractals.dsp | 96 - lib/glut-3.7.6/progs/contrib/fracviewer.c | 498 - lib/glut-3.7.6/progs/contrib/fracviewer.h | 104 - lib/glut-3.7.6/progs/contrib/gears.c | 569 - lib/glut-3.7.6/progs/contrib/gears.dsp | 88 - lib/glut-3.7.6/progs/contrib/hanoi.c | 469 - lib/glut-3.7.6/progs/contrib/hanoi.dsp | 88 - lib/glut-3.7.6/progs/contrib/hanoi2.c | 444 - lib/glut-3.7.6/progs/contrib/hanoi2.dsp | 94 - lib/glut-3.7.6/progs/contrib/lineblend.c | 257 - lib/glut-3.7.6/progs/contrib/lineblend.dsp | 88 - lib/glut-3.7.6/progs/contrib/moth.c | 1372 -- lib/glut-3.7.6/progs/contrib/moth.dsp | 88 - lib/glut-3.7.6/progs/contrib/noof.c | 475 - lib/glut-3.7.6/progs/contrib/noof.dsp | 88 - lib/glut-3.7.6/progs/contrib/rings.c | 279 - lib/glut-3.7.6/progs/contrib/rings.dsp | 88 - lib/glut-3.7.6/progs/contrib/steam.c | 621 - lib/glut-3.7.6/progs/contrib/steam.dsp | 88 - lib/glut-3.7.6/progs/contrib/text3d.c | 509 - lib/glut-3.7.6/progs/contrib/text3d.dsp | 88 - lib/glut-3.7.6/progs/contrib/worms.c | 519 - lib/glut-3.7.6/progs/contrib/worms.dsp | 88 - lib/glut-3.7.6/progs/data/00.rgb | Bin 13275 -> 0 bytes lib/glut-3.7.6/progs/data/01.rgb | Bin 13552 -> 0 bytes lib/glut-3.7.6/progs/data/02.rgb | Bin 13284 -> 0 bytes lib/glut-3.7.6/progs/data/03.rgb | Bin 14103 -> 0 bytes lib/glut-3.7.6/progs/data/04.rgb | Bin 14205 -> 0 bytes lib/glut-3.7.6/progs/data/05.rgb | Bin 7160 -> 0 bytes lib/glut-3.7.6/progs/data/brick.rgb | Bin 66048 -> 0 bytes lib/glut-3.7.6/progs/data/brush.rgb | Bin 10097 -> 0 bytes lib/glut-3.7.6/progs/data/clouds.bw | Bin 17352 -> 0 bytes lib/glut-3.7.6/progs/data/explosion.rgba | Bin 15925 -> 0 bytes lib/glut-3.7.6/progs/data/f15.data | 13182 --------------- lib/glut-3.7.6/progs/data/fendi.rgb | Bin 169124 -> 0 bytes lib/glut-3.7.6/progs/data/flame/f00 | Bin 16896 -> 0 bytes lib/glut-3.7.6/progs/data/flame/f01 | Bin 16896 -> 0 bytes lib/glut-3.7.6/progs/data/flame/f02 | Bin 16896 -> 0 bytes lib/glut-3.7.6/progs/data/flame/f03 | Bin 16896 -> 0 bytes lib/glut-3.7.6/progs/data/flame/f04 | Bin 16896 -> 0 bytes lib/glut-3.7.6/progs/data/flame/f05 | Bin 16896 -> 0 bytes lib/glut-3.7.6/progs/data/flame/f06 | Bin 16896 -> 0 bytes lib/glut-3.7.6/progs/data/flame/f07 | Bin 16896 -> 0 bytes lib/glut-3.7.6/progs/data/flame/f08 | Bin 16896 -> 0 bytes lib/glut-3.7.6/progs/data/flame/f09 | Bin 16896 -> 0 bytes lib/glut-3.7.6/progs/data/flame/f10 | Bin 16896 -> 0 bytes lib/glut-3.7.6/progs/data/flame/f11 | Bin 16896 -> 0 bytes lib/glut-3.7.6/progs/data/flame/f12 | Bin 16896 -> 0 bytes lib/glut-3.7.6/progs/data/flame/f13 | Bin 16896 -> 0 bytes lib/glut-3.7.6/progs/data/flame/f14 | Bin 16896 -> 0 bytes lib/glut-3.7.6/progs/data/flame/f15 | Bin 16896 -> 0 bytes lib/glut-3.7.6/progs/data/flame/f16 | Bin 16896 -> 0 bytes lib/glut-3.7.6/progs/data/flame/f17 | Bin 16896 -> 0 bytes lib/glut-3.7.6/progs/data/flame/f18 | Bin 16896 -> 0 bytes lib/glut-3.7.6/progs/data/flame/f19 | Bin 16896 -> 0 bytes lib/glut-3.7.6/progs/data/flame/f20 | Bin 16896 -> 0 bytes lib/glut-3.7.6/progs/data/flame/f21 | Bin 16896 -> 0 bytes lib/glut-3.7.6/progs/data/flame/f22 | Bin 16896 -> 0 bytes lib/glut-3.7.6/progs/data/flame/f23 | Bin 16896 -> 0 bytes lib/glut-3.7.6/progs/data/flame/f24 | Bin 16896 -> 0 bytes lib/glut-3.7.6/progs/data/flame/f25 | Bin 16896 -> 0 bytes lib/glut-3.7.6/progs/data/flame/f26 | Bin 16896 -> 0 bytes lib/glut-3.7.6/progs/data/flame/f27 | Bin 16896 -> 0 bytes lib/glut-3.7.6/progs/data/flame/f28 | Bin 16896 -> 0 bytes lib/glut-3.7.6/progs/data/flame/f29 | Bin 16896 -> 0 bytes lib/glut-3.7.6/progs/data/flame/f30 | Bin 16896 -> 0 bytes lib/glut-3.7.6/progs/data/flame/f31 | Bin 16896 -> 0 bytes lib/glut-3.7.6/progs/data/light.bw | Bin 11979 -> 0 bytes lib/glut-3.7.6/progs/data/mandrill.rgb | Bin 53783 -> 0 bytes lib/glut-3.7.6/progs/data/sea.rgb | Bin 14705 -> 0 bytes lib/glut-3.7.6/progs/data/sgi.bw | Bin 12800 -> 0 bytes lib/glut-3.7.6/progs/data/smoke.bw | Bin 25430 -> 0 bytes lib/glut-3.7.6/progs/data/spheremap.rgb | Bin 12045 -> 0 bytes lib/glut-3.7.6/progs/data/swamp.rgb | Bin 27039 -> 0 bytes lib/glut-3.7.6/progs/data/water.bw | Bin 4608 -> 0 bytes lib/glut-3.7.6/progs/data/wood.rgb | Bin 12800 -> 0 bytes lib/glut-3.7.6/progs/demos.dsw | 341 - lib/glut-3.7.6/progs/demos/Imakefile | 13 - lib/glut-3.7.6/progs/demos/_all.dsp | 63 - lib/glut-3.7.6/progs/demos/atlantis/Imakefile | 14 - .../progs/demos/atlantis/atlantis.c | 262 - .../progs/demos/atlantis/atlantis.dsp | 108 - .../progs/demos/atlantis/atlantis.h | 65 - lib/glut-3.7.6/progs/demos/atlantis/dolphin.c | 1934 --- lib/glut-3.7.6/progs/demos/atlantis/shark.c | 1308 -- lib/glut-3.7.6/progs/demos/atlantis/swim.c | 188 - lib/glut-3.7.6/progs/demos/atlantis/whale.c | 1798 --- lib/glut-3.7.6/progs/demos/bluepony/Imakefile | 16 - .../progs/demos/bluepony/bluepony.c | 507 - .../progs/demos/bluepony/bluepony.dsp | 96 - lib/glut-3.7.6/progs/demos/bluepony/logo.bw | Bin 16401 -> 0 bytes lib/glut-3.7.6/progs/demos/bluepony/readtex.c | 307 - lib/glut-3.7.6/progs/demos/bluepony/readtex.h | 10 - lib/glut-3.7.6/progs/demos/bounce/Imakefile | 24 - lib/glut-3.7.6/progs/demos/bounce/bounce.c | 943 -- lib/glut-3.7.6/progs/demos/bounce/bounce.dsp | 112 - lib/glut-3.7.6/progs/demos/bounce/glui.c | 509 - lib/glut-3.7.6/progs/demos/bounce/glui.h | 18 - lib/glut-3.7.6/progs/demos/bounce/tb.c | 147 - lib/glut-3.7.6/progs/demos/bounce/tb.h | 86 - lib/glut-3.7.6/progs/demos/bounce/trackball.c | 346 - lib/glut-3.7.6/progs/demos/bounce/trackball.h | 81 - lib/glut-3.7.6/progs/demos/chess/Imakefile | 16 - lib/glut-3.7.6/progs/demos/chess/animate.c | 131 - lib/glut-3.7.6/progs/demos/chess/chess.c | 995 -- lib/glut-3.7.6/progs/demos/chess/chess.dsp | 108 - lib/glut-3.7.6/progs/demos/chess/chess.h | 36 - lib/glut-3.7.6/progs/demos/chess/chess.inp | 62 - lib/glut-3.7.6/progs/demos/chess/main.c | 200 - lib/glut-3.7.6/progs/demos/chess/pathplan.c | 85 - lib/glut-3.7.6/progs/demos/chess/texture.c | 203 - lib/glut-3.7.6/progs/demos/geoface/Imakefile | 15 - lib/glut-3.7.6/progs/demos/geoface/README | 32 - lib/glut-3.7.6/progs/demos/geoface/display.c | 313 - .../progs/demos/geoface/faceline.dat | 257 - lib/glut-3.7.6/progs/demos/geoface/fileio.c | 289 - .../progs/demos/geoface/geoface.dsp | 112 - lib/glut-3.7.6/progs/demos/geoface/head.h | 101 - lib/glut-3.7.6/progs/demos/geoface/index.dat | 239 - lib/glut-3.7.6/progs/demos/geoface/main.c | 572 - .../progs/demos/geoface/make_face.c | 529 - lib/glut-3.7.6/progs/demos/geoface/memory.h | 29 - lib/glut-3.7.6/progs/demos/geoface/muscle.c | 213 - lib/glut-3.7.6/progs/demos/geoface/muscle.dat | 91 - lib/glut-3.7.6/progs/demos/glflare/Flare1.bw | Bin 12222 -> 0 bytes lib/glut-3.7.6/progs/demos/glflare/Flare2.bw | Bin 6648 -> 0 bytes lib/glut-3.7.6/progs/demos/glflare/Flare3.bw | Bin 12856 -> 0 bytes lib/glut-3.7.6/progs/demos/glflare/Flare4.bw | Bin 5683 -> 0 bytes lib/glut-3.7.6/progs/demos/glflare/Flare5.bw | Bin 11099 -> 0 bytes lib/glut-3.7.6/progs/demos/glflare/Flare6.bw | Bin 10540 -> 0 bytes lib/glut-3.7.6/progs/demos/glflare/Imakefile | 16 - lib/glut-3.7.6/progs/demos/glflare/OpenGL.bw | Bin 5813 -> 0 bytes lib/glut-3.7.6/progs/demos/glflare/Shine0.bw | Bin 5756 -> 0 bytes lib/glut-3.7.6/progs/demos/glflare/Shine1.bw | Bin 6254 -> 0 bytes lib/glut-3.7.6/progs/demos/glflare/Shine2.bw | Bin 5880 -> 0 bytes lib/glut-3.7.6/progs/demos/glflare/Shine3.bw | Bin 6258 -> 0 bytes lib/glut-3.7.6/progs/demos/glflare/Shine4.bw | Bin 5884 -> 0 bytes lib/glut-3.7.6/progs/demos/glflare/Shine5.bw | Bin 6021 -> 0 bytes lib/glut-3.7.6/progs/demos/glflare/Shine6.bw | Bin 5806 -> 0 bytes lib/glut-3.7.6/progs/demos/glflare/Shine7.bw | Bin 6152 -> 0 bytes lib/glut-3.7.6/progs/demos/glflare/Shine8.bw | Bin 5930 -> 0 bytes lib/glut-3.7.6/progs/demos/glflare/Shine9.bw | Bin 5913 -> 0 bytes lib/glut-3.7.6/progs/demos/glflare/glflare.c | 331 - .../progs/demos/glflare/glflare.dsp | 100 - lib/glut-3.7.6/progs/demos/glflare/loadlum.c | 182 - lib/glut-3.7.6/progs/demos/glflare/loadlum.h | 11 - lib/glut-3.7.6/progs/demos/glflare/vec3d.c | 73 - lib/glut-3.7.6/progs/demos/gliq/Imakefile | 29 - lib/glut-3.7.6/progs/demos/gliq/board.c | 343 - lib/glut-3.7.6/progs/demos/gliq/boards.txt | 40 - lib/glut-3.7.6/progs/demos/gliq/game.c | 172 - lib/glut-3.7.6/progs/demos/gliq/gliq.c | 409 - lib/glut-3.7.6/progs/demos/gliq/gliq.dsp | 116 - lib/glut-3.7.6/progs/demos/gliq/gliq.h | 75 - lib/glut-3.7.6/progs/demos/gliq/pick.c | 171 - lib/glut-3.7.6/progs/demos/gliq/score.c | 277 - lib/glut-3.7.6/progs/demos/gliq/tb.c | 123 - lib/glut-3.7.6/progs/demos/gliq/tb.h | 95 - lib/glut-3.7.6/progs/demos/gliq/trackball.c | 169 - lib/glut-3.7.6/progs/demos/gliq/trackball.h | 95 - lib/glut-3.7.6/progs/demos/glutmech/Imakefile | 15 - .../progs/demos/glutmech/glutmech.c | 1764 -- .../progs/demos/glutmech/glutmech.dsp | 88 - lib/glut-3.7.6/progs/demos/ideas/Imakefile | 20 - lib/glut-3.7.6/progs/demos/ideas/a.c | 194 - lib/glut-3.7.6/progs/demos/ideas/b.c | 146 - lib/glut-3.7.6/progs/demos/ideas/d.c | 154 - .../progs/demos/ideas/draw_holder.c | 1358 -- lib/glut-3.7.6/progs/demos/ideas/draw_lamp.c | 826 - lib/glut-3.7.6/progs/demos/ideas/draw_logo.c | 524 - .../progs/demos/ideas/draw_logo_line.c | 378 - .../progs/demos/ideas/draw_logo_shadow.c | 488 - lib/glut-3.7.6/progs/demos/ideas/e.c | 151 - lib/glut-3.7.6/progs/demos/ideas/f.c | 175 - lib/glut-3.7.6/progs/demos/ideas/h.c | 187 - lib/glut-3.7.6/progs/demos/ideas/i.c | 132 - lib/glut-3.7.6/progs/demos/ideas/ideas.c | 1056 -- lib/glut-3.7.6/progs/demos/ideas/ideas.dsp | 172 - lib/glut-3.7.6/progs/demos/ideas/m.c | 228 - lib/glut-3.7.6/progs/demos/ideas/n.c | 161 - lib/glut-3.7.6/progs/demos/ideas/o.c | 151 - lib/glut-3.7.6/progs/demos/ideas/objects.h | 61 - lib/glut-3.7.6/progs/demos/ideas/p.c | 184 - lib/glut-3.7.6/progs/demos/ideas/r.c | 139 - lib/glut-3.7.6/progs/demos/ideas/s.c | 142 - lib/glut-3.7.6/progs/demos/ideas/t.c | 165 - lib/glut-3.7.6/progs/demos/ideas/w.c | 245 - lib/glut-3.7.6/progs/demos/lorenz/Imakefile | 15 - lib/glut-3.7.6/progs/demos/lorenz/lorenz.c | 644 - lib/glut-3.7.6/progs/demos/lorenz/lorenz.dsp | 88 - lib/glut-3.7.6/progs/demos/newave/Imakefile | 16 - lib/glut-3.7.6/progs/demos/newave/newave.c | 890 -- lib/glut-3.7.6/progs/demos/newave/newave.dsp | 96 - .../progs/demos/newave/spheremap.rgb | Bin 143414 -> 0 bytes lib/glut-3.7.6/progs/demos/newave/texmap.rgb | Bin 810169 -> 0 bytes lib/glut-3.7.6/progs/demos/newave/texture.c | 283 - lib/glut-3.7.6/progs/demos/newave/texture.h | 11 - .../progs/demos/opengl_logo/Imakefile | 16 - .../progs/demos/opengl_logo/def_logo.c | 622 - .../progs/demos/opengl_logo/opengl_logo.c | 133 - .../progs/demos/opengl_logo/opengl_logo.dsp | 92 - lib/glut-3.7.6/progs/demos/particle/Imakefile | 15 - .../progs/demos/particle/particle.c | 728 - .../progs/demos/particle/particle.dsp | 88 - .../progs/demos/rollercoaster/Imakefile | 16 - .../progs/demos/rollercoaster/defrc.c | 305 - .../progs/demos/rollercoaster/matrix.c | 113 - .../progs/demos/rollercoaster/matrix.h | 18 - lib/glut-3.7.6/progs/demos/rollercoaster/rc.c | 703 - .../progs/demos/rollercoaster/rc.def | 217 - .../demos/rollercoaster/rollercoaster.dsp | 100 - lib/glut-3.7.6/progs/demos/skyfly/Imakefile | 14 - lib/glut-3.7.6/progs/demos/skyfly/clouds.bw | Bin 16625 -> 0 bytes lib/glut-3.7.6/progs/demos/skyfly/database.c | 522 - lib/glut-3.7.6/progs/demos/skyfly/fly.c | 282 - lib/glut-3.7.6/progs/demos/skyfly/gm_main.c | 341 - lib/glut-3.7.6/progs/demos/skyfly/image.c | 33 - lib/glut-3.7.6/progs/demos/skyfly/perfdraw.c | 331 - lib/glut-3.7.6/progs/demos/skyfly/random.c | 376 - lib/glut-3.7.6/progs/demos/skyfly/skyfly.c | 777 - lib/glut-3.7.6/progs/demos/skyfly/skyfly.dsp | 116 - lib/glut-3.7.6/progs/demos/skyfly/skyfly.h | 206 - lib/glut-3.7.6/progs/demos/skyfly/terrain.bw | 42 - lib/glut-3.7.6/progs/demos/smooth/Imakefile | 23 - .../progs/demos/smooth/data/dolphins.mtl | 25 - .../progs/demos/smooth/data/dolphins.obj | 2562 --- lib/glut-3.7.6/progs/demos/smooth/dirent32.h | 96 - lib/glut-3.7.6/progs/demos/smooth/glm.c | 1837 --- lib/glut-3.7.6/progs/demos/smooth/glm.h | 247 - lib/glut-3.7.6/progs/demos/smooth/gltb.c | 173 - lib/glut-3.7.6/progs/demos/smooth/gltb.h | 95 - lib/glut-3.7.6/progs/demos/smooth/gltx.c | 240 - lib/glut-3.7.6/progs/demos/smooth/gltx.h | 35 - lib/glut-3.7.6/progs/demos/smooth/smooth.c | 574 - lib/glut-3.7.6/progs/demos/smooth/smooth.dsp | 126 - lib/glut-3.7.6/progs/demos/smooth/trackball.c | 169 - lib/glut-3.7.6/progs/demos/smooth/trackball.h | 95 - lib/glut-3.7.6/progs/demos/sunlight/Imakefile | 15 - lib/glut-3.7.6/progs/demos/sunlight/globe.raw | Bin 196612 -> 0 bytes .../progs/demos/sunlight/sunlight.c | 531 - .../progs/demos/sunlight/sunlight.dsp | 88 - lib/glut-3.7.6/progs/demos/sysview/README | 27 - lib/glut-3.7.6/progs/demos/sysview/sysview.c | 442 - .../progs/demos/sysview/sysview.dsp | 89 - .../progs/demos/underwater/Imakefile | 16 - .../progs/demos/underwater/caust00.bw | Bin 5337 -> 0 bytes .../progs/demos/underwater/caust01.bw | Bin 5368 -> 0 bytes .../progs/demos/underwater/caust02.bw | Bin 5362 -> 0 bytes .../progs/demos/underwater/caust03.bw | Bin 5358 -> 0 bytes .../progs/demos/underwater/caust04.bw | Bin 5357 -> 0 bytes .../progs/demos/underwater/caust05.bw | Bin 5365 -> 0 bytes .../progs/demos/underwater/caust06.bw | Bin 5355 -> 0 bytes .../progs/demos/underwater/caust07.bw | Bin 5357 -> 0 bytes .../progs/demos/underwater/caust08.bw | Bin 5362 -> 0 bytes .../progs/demos/underwater/caust09.bw | Bin 5364 -> 0 bytes .../progs/demos/underwater/caust10.bw | Bin 5367 -> 0 bytes .../progs/demos/underwater/caust11.bw | Bin 5365 -> 0 bytes .../progs/demos/underwater/caust12.bw | Bin 5364 -> 0 bytes .../progs/demos/underwater/caust13.bw | Bin 5372 -> 0 bytes .../progs/demos/underwater/caust14.bw | Bin 5370 -> 0 bytes .../progs/demos/underwater/caust15.bw | Bin 5372 -> 0 bytes .../progs/demos/underwater/caust16.bw | Bin 5370 -> 0 bytes .../progs/demos/underwater/caust17.bw | Bin 5373 -> 0 bytes .../progs/demos/underwater/caust18.bw | Bin 5356 -> 0 bytes .../progs/demos/underwater/caust19.bw | Bin 5361 -> 0 bytes .../progs/demos/underwater/caust20.bw | Bin 5366 -> 0 bytes .../progs/demos/underwater/caust21.bw | Bin 5368 -> 0 bytes .../progs/demos/underwater/caust22.bw | Bin 5365 -> 0 bytes .../progs/demos/underwater/caust23.bw | Bin 5360 -> 0 bytes .../progs/demos/underwater/caust24.bw | Bin 5355 -> 0 bytes .../progs/demos/underwater/caust25.bw | Bin 5353 -> 0 bytes .../progs/demos/underwater/caust26.bw | Bin 5358 -> 0 bytes .../progs/demos/underwater/caust27.bw | Bin 5357 -> 0 bytes .../progs/demos/underwater/caust28.bw | Bin 5354 -> 0 bytes .../progs/demos/underwater/caust29.bw | Bin 5352 -> 0 bytes .../progs/demos/underwater/caust30.bw | Bin 5341 -> 0 bytes .../progs/demos/underwater/caust31.bw | Bin 5353 -> 0 bytes lib/glut-3.7.6/progs/demos/underwater/dino.c | 129 - lib/glut-3.7.6/progs/demos/underwater/dino.h | 9 - .../progs/demos/underwater/floor.rgb | Bin 54270 -> 0 bytes .../progs/demos/underwater/texload.c | 253 - .../progs/demos/underwater/texload.h | 12 - .../progs/demos/underwater/underwater.c | 633 - .../progs/demos/underwater/underwater.dsp | 104 - lib/glut-3.7.6/progs/demos/walker/Imakefile | 15 - .../progs/demos/walker/Impossible.cset | 17 - lib/glut-3.7.6/progs/demos/walker/MrFlex.cset | 17 - lib/glut-3.7.6/progs/demos/walker/Ouch.cset | 17 - lib/glut-3.7.6/progs/demos/walker/README | 119 - lib/glut-3.7.6/progs/demos/walker/bound.cset | 17 - lib/glut-3.7.6/progs/demos/walker/dunk.cset | 17 - lib/glut-3.7.6/progs/demos/walker/kick.cset | 17 - lib/glut-3.7.6/progs/demos/walker/models.c | 691 - .../progs/demos/walker/moonwalk.cset | 17 - .../progs/demos/walker/reverse_dunk.cset | 17 - .../progs/demos/walker/running.cset | 17 - .../progs/demos/walker/walk_backwards.cset | 17 - lib/glut-3.7.6/progs/demos/walker/walker.c | 1112 -- lib/glut-3.7.6/progs/demos/walker/walker.dsp | 108 - lib/glut-3.7.6/progs/demos/walker/walker.h | 13 - .../progs/demos/walker/walking.cset | 17 - .../progs/demos/walker/walkviewer.c | 493 - .../progs/demos/walker/walkviewer.h | 104 - .../progs/demos/walker/win32_dirent.h | 51 - lib/glut-3.7.6/progs/demos/yacme/Editor.c | 1372 -- lib/glut-3.7.6/progs/demos/yacme/Imakefile | 17 - lib/glut-3.7.6/progs/demos/yacme/RGBA.h | 268 - lib/glut-3.7.6/progs/demos/yacme/invertmat.c | 212 - lib/glut-3.7.6/progs/demos/yacme/mallocbis.h | 13 - lib/glut-3.7.6/progs/demos/yacme/yacme.dsp | 100 - lib/glut-3.7.6/progs/examples.dsw | 839 - lib/glut-3.7.6/progs/examples/Imakefile | 105 - lib/glut-3.7.6/progs/examples/_all.dsp | 63 - lib/glut-3.7.6/progs/examples/abgr.c | 217 - lib/glut-3.7.6/progs/examples/abgr.dsp | 88 - lib/glut-3.7.6/progs/examples/bitfont.c | 130 - lib/glut-3.7.6/progs/examples/bitfont.dsp | 88 - lib/glut-3.7.6/progs/examples/blender.c | 161 - lib/glut-3.7.6/progs/examples/blender.dsp | 88 - lib/glut-3.7.6/progs/examples/circlefit.c | 277 - lib/glut-3.7.6/progs/examples/circlefit.dsp | 88 - lib/glut-3.7.6/progs/examples/cube.c | 93 - lib/glut-3.7.6/progs/examples/cube.dsp | 88 - lib/glut-3.7.6/progs/examples/dials.c | 145 - lib/glut-3.7.6/progs/examples/dials.dsp | 88 - lib/glut-3.7.6/progs/examples/dials2.c | 140 - lib/glut-3.7.6/progs/examples/dials2.dsp | 88 - lib/glut-3.7.6/progs/examples/dinoball.c | 332 - lib/glut-3.7.6/progs/examples/dinoball.dsp | 88 - lib/glut-3.7.6/progs/examples/dinodraw.c | 420 - lib/glut-3.7.6/progs/examples/dinodraw.dsp | 96 - lib/glut-3.7.6/progs/examples/dinoshade.c | 891 -- lib/glut-3.7.6/progs/examples/dinoshade.dsp | 88 - lib/glut-3.7.6/progs/examples/dinospin.c | 352 - lib/glut-3.7.6/progs/examples/dinospin.dsp | 96 - lib/glut-3.7.6/progs/examples/editgrid.c | 314 - lib/glut-3.7.6/progs/examples/editgrid.dsp | 88 - lib/glut-3.7.6/progs/examples/evaltest.c | 507 - lib/glut-3.7.6/progs/examples/evaltest.dsp | 88 - lib/glut-3.7.6/progs/examples/fogtst.c | 261 - lib/glut-3.7.6/progs/examples/fogtst.dsp | 88 - lib/glut-3.7.6/progs/examples/fontdemo.c | 102 - lib/glut-3.7.6/progs/examples/fontdemo.dsp | 88 - lib/glut-3.7.6/progs/examples/glpuzzle.c | 1439 -- lib/glut-3.7.6/progs/examples/glpuzzle.dsp | 96 - lib/glut-3.7.6/progs/examples/glutdino.c | 244 - lib/glut-3.7.6/progs/examples/glutdino.dsp | 88 - lib/glut-3.7.6/progs/examples/glutplane.c | 270 - lib/glut-3.7.6/progs/examples/glutplane.dsp | 88 - .../progs/examples/gouraudtriangle.ps | 109 - lib/glut-3.7.6/progs/examples/halomagic.c | 1094 -- lib/glut-3.7.6/progs/examples/halomagic.dsp | 88 - lib/glut-3.7.6/progs/examples/highlight.c | 405 - lib/glut-3.7.6/progs/examples/highlight.dsp | 88 - lib/glut-3.7.6/progs/examples/lightlab.c | 284 - lib/glut-3.7.6/progs/examples/lightlab.dsp | 88 - lib/glut-3.7.6/progs/examples/logo.c | 89 - lib/glut-3.7.6/progs/examples/luminance16.c | 154 - lib/glut-3.7.6/progs/examples/luminance16.dsp | 88 - lib/glut-3.7.6/progs/examples/mjkimage.c | 13244 ---------------- lib/glut-3.7.6/progs/examples/mjksift.c | 261 - lib/glut-3.7.6/progs/examples/mjksift.dsp | 92 - lib/glut-3.7.6/progs/examples/mjkwarp.c | 329 - lib/glut-3.7.6/progs/examples/mjkwarp.dsp | 92 - lib/glut-3.7.6/progs/examples/molehill.c | 153 - lib/glut-3.7.6/progs/examples/molehill.dsp | 88 - lib/glut-3.7.6/progs/examples/movelight.c | 289 - lib/glut-3.7.6/progs/examples/movelight.dsp | 88 - lib/glut-3.7.6/progs/examples/oclip.c | 207 - lib/glut-3.7.6/progs/examples/oclip.dsp | 88 - lib/glut-3.7.6/progs/examples/ohidden.c | 263 - lib/glut-3.7.6/progs/examples/ohidden.dsp | 88 - lib/glut-3.7.6/progs/examples/olight.c | 241 - lib/glut-3.7.6/progs/examples/olight.dsp | 88 - lib/glut-3.7.6/progs/examples/olympic.c | 412 - lib/glut-3.7.6/progs/examples/olympic.dsp | 88 - lib/glut-3.7.6/progs/examples/origami.c | 403 - lib/glut-3.7.6/progs/examples/origami.dsp | 88 - lib/glut-3.7.6/progs/examples/oversphere.c | 210 - lib/glut-3.7.6/progs/examples/oversphere.dsp | 88 - lib/glut-3.7.6/progs/examples/reflectdino.c | 405 - lib/glut-3.7.6/progs/examples/reflectdino.dsp | 88 - lib/glut-3.7.6/progs/examples/rendereps.c | 709 - lib/glut-3.7.6/progs/examples/rendereps.dsp | 88 - lib/glut-3.7.6/progs/examples/resolution.c | 264 - lib/glut-3.7.6/progs/examples/resolution.dsp | 88 - lib/glut-3.7.6/progs/examples/sb2db.c | 297 - lib/glut-3.7.6/progs/examples/sb2db.dsp | 88 - lib/glut-3.7.6/progs/examples/scene.c | 175 - lib/glut-3.7.6/progs/examples/scene.dsp | 88 - lib/glut-3.7.6/progs/examples/screendoor.c | 371 - lib/glut-3.7.6/progs/examples/screendoor.dsp | 88 - lib/glut-3.7.6/progs/examples/scube.c | 703 - lib/glut-3.7.6/progs/examples/scube.dsp | 88 - lib/glut-3.7.6/progs/examples/simple.c | 62 - lib/glut-3.7.6/progs/examples/simple.dsp | 88 - lib/glut-3.7.6/progs/examples/sphere.c | 302 - lib/glut-3.7.6/progs/examples/sphere.dsp | 88 - lib/glut-3.7.6/progs/examples/sphere2.c | 62 - lib/glut-3.7.6/progs/examples/sphere2.dsp | 88 - lib/glut-3.7.6/progs/examples/splatlogo.c | 226 - lib/glut-3.7.6/progs/examples/splatlogo.dsp | 92 - lib/glut-3.7.6/progs/examples/spots.c | 350 - lib/glut-3.7.6/progs/examples/spots.dsp | 88 - lib/glut-3.7.6/progs/examples/stars.c | 387 - lib/glut-3.7.6/progs/examples/stars.dsp | 88 - lib/glut-3.7.6/progs/examples/stenciltst.c | 147 - lib/glut-3.7.6/progs/examples/stenciltst.dsp | 88 - lib/glut-3.7.6/progs/examples/stereo.c | 33 - lib/glut-3.7.6/progs/examples/stereo.dsp | 88 - lib/glut-3.7.6/progs/examples/stroke.c | 100 - lib/glut-3.7.6/progs/examples/stroke.dsp | 88 - lib/glut-3.7.6/progs/examples/subwin.c | 88 - lib/glut-3.7.6/progs/examples/subwin.dsp | 88 - lib/glut-3.7.6/progs/examples/surfgrid.c | 588 - lib/glut-3.7.6/progs/examples/surfgrid.dsp | 88 - lib/glut-3.7.6/progs/examples/texenv.c | 753 - lib/glut-3.7.6/progs/examples/texenv.dsp | 88 - lib/glut-3.7.6/progs/examples/trackball.c | 346 - lib/glut-3.7.6/progs/examples/trackball.h | 81 - lib/glut-3.7.6/progs/examples/trippy.c | 471 - lib/glut-3.7.6/progs/examples/trippy.dsp | 88 - lib/glut-3.7.6/progs/examples/triselect.c | 421 - lib/glut-3.7.6/progs/examples/triselect.dsp | 88 - lib/glut-3.7.6/progs/examples/zoomdino.c | 464 - lib/glut-3.7.6/progs/examples/zoomdino.dsp | 88 - lib/glut-3.7.6/progs/fortran/example.f | 114 - lib/glut-3.7.6/progs/fortran/fbitfont.f | 70 - lib/glut-3.7.6/progs/fortran/fscene.f | 126 - lib/glut-3.7.6/progs/fortran/sphere.f | 54 - lib/glut-3.7.6/progs/gameglut.dsw | 29 - lib/glut-3.7.6/progs/gameglut/Imakefile | 14 - lib/glut-3.7.6/progs/gameglut/asteroids.c | 441 - lib/glut-3.7.6/progs/gameglut/asteroids.dsp | 88 - lib/glut-3.7.6/progs/gameglut/asteroids.dsw | 29 - lib/glut-3.7.6/progs/glc/Imakefile | 14 - lib/glut-3.7.6/progs/glc/README | 15 - lib/glut-3.7.6/progs/glc/glcdemo.c | 111 - lib/glut-3.7.6/progs/gle.dsw | 365 - lib/glut-3.7.6/progs/gle/Imakefile | 62 - lib/glut-3.7.6/progs/gle/README | 9 - lib/glut-3.7.6/progs/gle/_all.dsp | 63 - lib/glut-3.7.6/progs/gle/beam.c | 118 - lib/glut-3.7.6/progs/gle/beam.dsp | 89 - lib/glut-3.7.6/progs/gle/candlestick.c | 424 - lib/glut-3.7.6/progs/gle/candlestick.dsp | 89 - lib/glut-3.7.6/progs/gle/cone.c | 103 - lib/glut-3.7.6/progs/gle/cone.dsp | 93 - lib/glut-3.7.6/progs/gle/cylinder.c | 92 - lib/glut-3.7.6/progs/gle/cylinder.dsp | 93 - lib/glut-3.7.6/progs/gle/helix.c | 48 - lib/glut-3.7.6/progs/gle/helix.dsp | 93 - lib/glut-3.7.6/progs/gle/helix2.c | 51 - lib/glut-3.7.6/progs/gle/helix2.dsp | 93 - lib/glut-3.7.6/progs/gle/helix3.c | 50 - lib/glut-3.7.6/progs/gle/helix3.dsp | 93 - lib/glut-3.7.6/progs/gle/helix4.c | 66 - lib/glut-3.7.6/progs/gle/helix4.dsp | 93 - lib/glut-3.7.6/progs/gle/helixtex.c | 48 - lib/glut-3.7.6/progs/gle/helixtex.dsp | 101 - lib/glut-3.7.6/progs/gle/horn.c | 137 - lib/glut-3.7.6/progs/gle/horn.dsp | 93 - lib/glut-3.7.6/progs/gle/joinoffset.c | 145 - lib/glut-3.7.6/progs/gle/joinoffset.dsp | 93 - lib/glut-3.7.6/progs/gle/mainjoin.c | 135 - lib/glut-3.7.6/progs/gle/mainsimple.c | 82 - lib/glut-3.7.6/progs/gle/maintex.c | 257 - lib/glut-3.7.6/progs/gle/martini.c | 250 - lib/glut-3.7.6/progs/gle/martini.dsp | 97 - lib/glut-3.7.6/progs/gle/screw.c | 124 - lib/glut-3.7.6/progs/gle/screw.dsp | 97 - lib/glut-3.7.6/progs/gle/taper.c | 218 - lib/glut-3.7.6/progs/gle/taper.dsp | 93 - lib/glut-3.7.6/progs/gle/texas.c | 228 - lib/glut-3.7.6/progs/gle/texas.dsp | 93 - lib/glut-3.7.6/progs/gle/texture.c | 150 - lib/glut-3.7.6/progs/gle/texture.h | 26 - lib/glut-3.7.6/progs/gle/trackball.c | 346 - lib/glut-3.7.6/progs/gle/trackball.h | 81 - lib/glut-3.7.6/progs/gle/transport.c | 379 - lib/glut-3.7.6/progs/gle/transport.dsp | 89 - lib/glut-3.7.6/progs/gle/twistoid.c | 211 - lib/glut-3.7.6/progs/gle/twistoid.dsp | 93 - lib/glut-3.7.6/progs/gle/twoid.c | 329 - lib/glut-3.7.6/progs/gle/twoid.dsp | 89 - lib/glut-3.7.6/progs/inventor/Imakefile | 22 - lib/glut-3.7.6/progs/inventor/duck.iv | Bin 22712 -> 0 bytes lib/glut-3.7.6/progs/inventor/globe.c++ | 240 - lib/glut-3.7.6/progs/inventor/globe.rgb | Bin 109862 -> 0 bytes lib/glut-3.7.6/progs/inventor/glutduck.c++ | 290 - lib/glut-3.7.6/progs/mesademos.dsw | 194 - lib/glut-3.7.6/progs/mesademos/Imakefile | 26 - lib/glut-3.7.6/progs/mesademos/README | 21 - lib/glut-3.7.6/progs/mesademos/_all.dsp | 63 - lib/glut-3.7.6/progs/mesademos/bounce.c | 204 - lib/glut-3.7.6/progs/mesademos/bounce.dsp | 88 - lib/glut-3.7.6/progs/mesademos/brick.rgb | Bin 51607 -> 0 bytes lib/glut-3.7.6/progs/mesademos/gamma.c | 166 - lib/glut-3.7.6/progs/mesademos/gamma.dsp | 88 - lib/glut-3.7.6/progs/mesademos/gears.c | 330 - lib/glut-3.7.6/progs/mesademos/gears.dsp | 88 - lib/glut-3.7.6/progs/mesademos/image.c | 220 - lib/glut-3.7.6/progs/mesademos/image.h | 20 - lib/glut-3.7.6/progs/mesademos/isosurf.c | 316 - lib/glut-3.7.6/progs/mesademos/isosurf.dat | 7179 --------- lib/glut-3.7.6/progs/mesademos/isosurf.dsp | 88 - lib/glut-3.7.6/progs/mesademos/offset.c | 299 - lib/glut-3.7.6/progs/mesademos/offset.dsp | 88 - lib/glut-3.7.6/progs/mesademos/reflect.c | 379 - lib/glut-3.7.6/progs/mesademos/reflect.dsp | 96 - lib/glut-3.7.6/progs/mesademos/spin.c | 160 - lib/glut-3.7.6/progs/mesademos/spin.dsp | 88 - lib/glut-3.7.6/progs/mesademos/tess_demo.c | 376 - lib/glut-3.7.6/progs/mesademos/tess_demo.dsp | 88 - lib/glut-3.7.6/progs/mesademos/texobj.c | 292 - lib/glut-3.7.6/progs/mesademos/texobj.dsp | 88 - lib/glut-3.7.6/progs/mesademos/tr.c | 236 - lib/glut-3.7.6/progs/mesademos/tr.h | 95 - lib/glut-3.7.6/progs/mesademos/trdemo.c | 167 - lib/glut-3.7.6/progs/mesademos/trdemo.dsp | 96 - lib/glut-3.7.6/progs/mesademos/winpos.c | 215 - lib/glut-3.7.6/progs/mesademos/winpos.dsp | 88 - lib/glut-3.7.6/progs/mui.dsw | 59 - lib/glut-3.7.6/progs/mui/Imakefile | 10 - lib/glut-3.7.6/progs/mui/_all.dsp | 63 - lib/glut-3.7.6/progs/mui/calc/Imakefile | 16 - lib/glut-3.7.6/progs/mui/calc/calc.c | 753 - lib/glut-3.7.6/progs/mui/calc/calc.dsp | 88 - lib/glut-3.7.6/progs/mui/calc/calc.h | 86 - lib/glut-3.7.6/progs/perf_harness.dsw | 29 - lib/glut-3.7.6/progs/perf_harness/Imakefile | 14 - lib/glut-3.7.6/progs/perf_harness/README | 40 - .../progs/perf_harness/gl_harness.c | 154 - .../progs/perf_harness/perf_torus.dsp | 92 - lib/glut-3.7.6/progs/perf_harness/torus.c | 61 - lib/glut-3.7.6/progs/redbook.dsw | 974 -- lib/glut-3.7.6/progs/redbook/Imakefile | 92 - lib/glut-3.7.6/progs/redbook/_all.dsp | 63 - lib/glut-3.7.6/progs/redbook/aaindex.c | 153 - lib/glut-3.7.6/progs/redbook/aaindex.dsp | 88 - lib/glut-3.7.6/progs/redbook/aapoly.c | 172 - lib/glut-3.7.6/progs/redbook/aapoly.dsp | 88 - lib/glut-3.7.6/progs/redbook/aargb.c | 149 - lib/glut-3.7.6/progs/redbook/aargb.dsp | 88 - lib/glut-3.7.6/progs/redbook/accanti.c | 168 - lib/glut-3.7.6/progs/redbook/accanti.dsp | 88 - lib/glut-3.7.6/progs/redbook/accpersp.c | 240 - lib/glut-3.7.6/progs/redbook/accpersp.dsp | 88 - lib/glut-3.7.6/progs/redbook/alpha.c | 143 - lib/glut-3.7.6/progs/redbook/alpha.dsp | 88 - lib/glut-3.7.6/progs/redbook/alpha3D.c | 175 - lib/glut-3.7.6/progs/redbook/alpha3D.dsp | 88 - lib/glut-3.7.6/progs/redbook/anti.c | 111 - lib/glut-3.7.6/progs/redbook/anti.dsp | 88 - lib/glut-3.7.6/progs/redbook/aux2glut.sed | 55 - lib/glut-3.7.6/progs/redbook/bezcurve.c | 114 - lib/glut-3.7.6/progs/redbook/bezcurve.dsp | 88 - lib/glut-3.7.6/progs/redbook/bezmesh.c | 148 - lib/glut-3.7.6/progs/redbook/bezmesh.dsp | 88 - lib/glut-3.7.6/progs/redbook/checker.c | 125 - lib/glut-3.7.6/progs/redbook/checker.dsp | 88 - lib/glut-3.7.6/progs/redbook/clip.c | 108 - lib/glut-3.7.6/progs/redbook/clip.dsp | 88 - lib/glut-3.7.6/progs/redbook/colormat.c | 153 - lib/glut-3.7.6/progs/redbook/colormat.dsp | 88 - lib/glut-3.7.6/progs/redbook/cube.c | 97 - lib/glut-3.7.6/progs/redbook/cube.dsp | 88 - lib/glut-3.7.6/progs/redbook/depthcue.c | 102 - lib/glut-3.7.6/progs/redbook/depthcue.dsp | 88 - lib/glut-3.7.6/progs/redbook/dof.c | 238 - lib/glut-3.7.6/progs/redbook/dof.dsp | 88 - lib/glut-3.7.6/progs/redbook/double.c | 119 - lib/glut-3.7.6/progs/redbook/double.dsp | 88 - lib/glut-3.7.6/progs/redbook/drawf.c | 103 - lib/glut-3.7.6/progs/redbook/drawf.dsp | 88 - lib/glut-3.7.6/progs/redbook/feedback.c | 171 - lib/glut-3.7.6/progs/redbook/feedback.dsp | 88 - lib/glut-3.7.6/progs/redbook/fog.c | 186 - lib/glut-3.7.6/progs/redbook/fog.dsp | 88 - lib/glut-3.7.6/progs/redbook/fogindex.c | 138 - lib/glut-3.7.6/progs/redbook/fogindex.dsp | 88 - lib/glut-3.7.6/progs/redbook/font.c | 167 - lib/glut-3.7.6/progs/redbook/font.dsp | 88 - lib/glut-3.7.6/progs/redbook/hello.c | 95 - lib/glut-3.7.6/progs/redbook/hello.dsp | 88 - lib/glut-3.7.6/progs/redbook/image.c | 159 - lib/glut-3.7.6/progs/redbook/image.dsp | 88 - lib/glut-3.7.6/progs/redbook/jitter.h | 222 - lib/glut-3.7.6/progs/redbook/light.c | 113 - lib/glut-3.7.6/progs/redbook/light.dsp | 88 - lib/glut-3.7.6/progs/redbook/lines.c | 138 - lib/glut-3.7.6/progs/redbook/lines.dsp | 88 - lib/glut-3.7.6/progs/redbook/list.c | 125 - lib/glut-3.7.6/progs/redbook/list.dsp | 88 - lib/glut-3.7.6/progs/redbook/material.c | 293 - lib/glut-3.7.6/progs/redbook/material.dsp | 88 - lib/glut-3.7.6/progs/redbook/mipmap.c | 165 - lib/glut-3.7.6/progs/redbook/mipmap.dsp | 88 - lib/glut-3.7.6/progs/redbook/model.c | 126 - lib/glut-3.7.6/progs/redbook/model.dsp | 88 - lib/glut-3.7.6/progs/redbook/movelight.c | 148 - lib/glut-3.7.6/progs/redbook/movelight.dsp | 88 - lib/glut-3.7.6/progs/redbook/nurbs.c | 176 - lib/glut-3.7.6/progs/redbook/nurbs.dsp | 88 - lib/glut-3.7.6/progs/redbook/pickdepth.c | 204 - lib/glut-3.7.6/progs/redbook/pickdepth.dsp | 88 - lib/glut-3.7.6/progs/redbook/picksquare.c | 197 - lib/glut-3.7.6/progs/redbook/picksquare.dsp | 88 - lib/glut-3.7.6/progs/redbook/plane.c | 157 - lib/glut-3.7.6/progs/redbook/plane.dsp | 88 - lib/glut-3.7.6/progs/redbook/planet.c | 123 - lib/glut-3.7.6/progs/redbook/planet.dsp | 88 - lib/glut-3.7.6/progs/redbook/polyoff.c | 237 - lib/glut-3.7.6/progs/redbook/polyoff.dsp | 88 - lib/glut-3.7.6/progs/redbook/polys.c | 124 - lib/glut-3.7.6/progs/redbook/polys.dsp | 88 - lib/glut-3.7.6/progs/redbook/quadric.c | 189 - lib/glut-3.7.6/progs/redbook/quadric.dsp | 88 - lib/glut-3.7.6/progs/redbook/robot.c | 132 - lib/glut-3.7.6/progs/redbook/robot.dsp | 88 - lib/glut-3.7.6/progs/redbook/sccolorlight.c | 127 - lib/glut-3.7.6/progs/redbook/sccolorlight.dsp | 88 - lib/glut-3.7.6/progs/redbook/scene.c | 127 - lib/glut-3.7.6/progs/redbook/scene.dsp | 88 - lib/glut-3.7.6/progs/redbook/scenebamb.c | 126 - lib/glut-3.7.6/progs/redbook/scenebamb.dsp | 88 - lib/glut-3.7.6/progs/redbook/sceneflat.c | 126 - lib/glut-3.7.6/progs/redbook/sceneflat.dsp | 88 - lib/glut-3.7.6/progs/redbook/select.c | 222 - lib/glut-3.7.6/progs/redbook/select.dsp | 88 - lib/glut-3.7.6/progs/redbook/smooth.c | 106 - lib/glut-3.7.6/progs/redbook/smooth.dsp | 88 - lib/glut-3.7.6/progs/redbook/stencil.c | 177 - lib/glut-3.7.6/progs/redbook/stencil.dsp | 88 - lib/glut-3.7.6/progs/redbook/stroke.c | 181 - lib/glut-3.7.6/progs/redbook/stroke.dsp | 88 - lib/glut-3.7.6/progs/redbook/surface.c | 217 - lib/glut-3.7.6/progs/redbook/surface.dsp | 88 - lib/glut-3.7.6/progs/redbook/teaambient.c | 148 - lib/glut-3.7.6/progs/redbook/teaambient.dsp | 88 - lib/glut-3.7.6/progs/redbook/teapots.c | 206 - lib/glut-3.7.6/progs/redbook/teapots.dsp | 88 - lib/glut-3.7.6/progs/redbook/tess.c | 241 - lib/glut-3.7.6/progs/redbook/tess.dsp | 88 - lib/glut-3.7.6/progs/redbook/tesswind.c | 290 - lib/glut-3.7.6/progs/redbook/tesswind.dsp | 88 - lib/glut-3.7.6/progs/redbook/texbind.c | 172 - lib/glut-3.7.6/progs/redbook/texbind.dsp | 88 - lib/glut-3.7.6/progs/redbook/texgen.c | 207 - lib/glut-3.7.6/progs/redbook/texgen.dsp | 88 - lib/glut-3.7.6/progs/redbook/texprox.c | 120 - lib/glut-3.7.6/progs/redbook/texprox.dsp | 88 - lib/glut-3.7.6/progs/redbook/texsub.c | 187 - lib/glut-3.7.6/progs/redbook/texsub.dsp | 88 - lib/glut-3.7.6/progs/redbook/texturesurf.c | 141 - lib/glut-3.7.6/progs/redbook/texturesurf.dsp | 88 - lib/glut-3.7.6/progs/redbook/torus.c | 152 - lib/glut-3.7.6/progs/redbook/torus.dsp | 88 - lib/glut-3.7.6/progs/redbook/trim.c | 181 - lib/glut-3.7.6/progs/redbook/trim.dsp | 88 - lib/glut-3.7.6/progs/redbook/unproject.c | 126 - lib/glut-3.7.6/progs/redbook/unproject.dsp | 88 - lib/glut-3.7.6/progs/redbook/varray.c | 195 - lib/glut-3.7.6/progs/redbook/varray.dsp | 88 - lib/glut-3.7.6/progs/redbook/wrap.c | 180 - lib/glut-3.7.6/progs/redbook/wrap.dsp | 88 - lib/glut-3.7.6/progs/sgi-stereo/README | 35 - .../progs/sgi-stereo/fullscreen_stereo.c | 69 - .../progs/sgi-stereo/fullscreen_stereo.h | 22 - .../progs/sgi-stereo/stereo-plane.c | 209 - lib/glut-3.7.6/progs/spheremap.dsw | 137 - lib/glut-3.7.6/progs/spheremap/Imakefile | 10 - lib/glut-3.7.6/progs/spheremap/README | 15 - lib/glut-3.7.6/progs/spheremap/_all.dsp | 63 - .../progs/spheremap/glsmap/Imakefile | 15 - .../progs/spheremap/glsmap/fakeraytrace.c | 722 - .../progs/spheremap/glsmap/fakeraytrace.dsp | 88 - .../progs/spheremap/glsmap/rtsmap.c | 480 - .../progs/spheremap/glsmap/rtsmap.dsp | 88 - .../progs/spheremap/hacks/Imakefile | 16 - .../progs/spheremap/hacks/cview2smap.c | 336 - .../progs/spheremap/hacks/cview2smap.dsp | 96 - .../progs/spheremap/hacks/drawmesh.c | 55 - .../progs/spheremap/hacks/makemesh.c | 292 - .../progs/spheremap/hacks/sixviews.c | 291 - .../progs/spheremap/hacks/sixviews.dsp | 88 - .../progs/spheremap/hacks/smapmesh.c | 515 - .../progs/spheremap/hacks/smapmesh.dsp | 88 - .../progs/spheremap/hacks/smapmesh.h | 38 - .../progs/spheremap/hacks/st2rvec.c | 85 - .../progs/spheremap/hacks/st2rvec.dsp | 88 - lib/glut-3.7.6/progs/texfont.dsw | 86 - lib/glut-3.7.6/progs/texfont/Imakefile | 17 - lib/glut-3.7.6/progs/texfont/README | 35 - lib/glut-3.7.6/progs/texfont/TexFont.h | 93 - lib/glut-3.7.6/progs/texfont/_all.dsp | 63 - lib/glut-3.7.6/progs/texfont/abgr.dsp | 88 - lib/glut-3.7.6/progs/texfont/curlfont.txf | Bin 8980 -> 0 bytes lib/glut-3.7.6/progs/texfont/default.txf | Bin 9196 -> 0 bytes lib/glut-3.7.6/progs/texfont/djb.txf | Bin 9292 -> 0 bytes lib/glut-3.7.6/progs/texfont/gentexfont.c | 560 - lib/glut-3.7.6/progs/texfont/gentexfont.dsp | 88 - lib/glut-3.7.6/progs/texfont/haeberli.txf | Bin 8980 -> 0 bytes lib/glut-3.7.6/progs/texfont/rockfont.txf | Bin 8416 -> 0 bytes lib/glut-3.7.6/progs/texfont/showtxf.c | 156 - lib/glut-3.7.6/progs/texfont/showtxf.dsp | 92 - lib/glut-3.7.6/progs/texfont/simpletxf.c | 183 - lib/glut-3.7.6/progs/texfont/simpletxf.dsp | 92 - lib/glut-3.7.6/progs/texfont/sorority.txf | Bin 9316 -> 0 bytes lib/glut-3.7.6/progs/texfont/texfont.c | 645 - lib/glut-3.7.6/progs/texfont/txfdemo.c | 436 - lib/glut-3.7.6/progs/texfont/txfdemo.dsp | 92 - lib/glut-3.7.6/progs/tiff/Imakefile | 26 - lib/glut-3.7.6/progs/tiff/README | 49 - lib/glut-3.7.6/progs/tiff/depthdof.c | 561 - lib/glut-3.7.6/progs/tiff/face.tif | Bin 21032 -> 0 bytes lib/glut-3.7.6/progs/tiff/scalebias.c | 482 - lib/glut-3.7.6/progs/tiff/showtiff.c | 369 - lib/glut-3.7.6/progs/tiff/spiral.tif | Bin 49356 -> 0 bytes lib/glut-3.7.6/progs/tiff/textiff.c | 206 - lib/glut-3.7.6/progs/tiff/tiffsift.c | 307 - lib/glut-3.7.6/progs/tiff/writetiff.c | 330 - lib/glut-3.7.6/test/Imakefile | 12 - lib/glut-3.7.6/test/glut/Imakefile | 98 - lib/glut-3.7.6/test/glut/_all.dsp | 63 - lib/glut-3.7.6/test/glut/atexit_test.c | 41 - lib/glut-3.7.6/test/glut/bigtest.c | 2597 --- lib/glut-3.7.6/test/glut/bigtest.dsp | 90 - lib/glut-3.7.6/test/glut/cursor_test.c | 193 - lib/glut-3.7.6/test/glut/cursor_test.dsp | 90 - lib/glut-3.7.6/test/glut/joy_test.c | 72 - lib/glut-3.7.6/test/glut/joy_test.dsp | 90 - lib/glut-3.7.6/test/glut/keyup_test.c | 104 - lib/glut-3.7.6/test/glut/keyup_test.dsp | 90 - lib/glut-3.7.6/test/glut/menu_test.c | 165 - lib/glut-3.7.6/test/glut/menu_test.dsp | 90 - lib/glut-3.7.6/test/glut/over_test.c | 388 - lib/glut-3.7.6/test/glut/over_test.dsp | 90 - lib/glut-3.7.6/test/glut/shape_test.c | 194 - lib/glut-3.7.6/test/glut/shape_test.dsp | 90 - lib/glut-3.7.6/test/glut/test1.c | 91 - lib/glut-3.7.6/test/glut/test1.dsp | 90 - lib/glut-3.7.6/test/glut/test10.c | 127 - lib/glut-3.7.6/test/glut/test10.dsp | 90 - lib/glut-3.7.6/test/glut/test11.c | 28 - lib/glut-3.7.6/test/glut/test11.dsp | 90 - lib/glut-3.7.6/test/glut/test12.c | 177 - lib/glut-3.7.6/test/glut/test12.dsp | 90 - lib/glut-3.7.6/test/glut/test13.c | 129 - lib/glut-3.7.6/test/glut/test13.dsp | 90 - lib/glut-3.7.6/test/glut/test14.c | 151 - lib/glut-3.7.6/test/glut/test14.dsp | 90 - lib/glut-3.7.6/test/glut/test15.c | 83 - lib/glut-3.7.6/test/glut/test15.dsp | 90 - lib/glut-3.7.6/test/glut/test16.c | 136 - lib/glut-3.7.6/test/glut/test16.dsp | 90 - lib/glut-3.7.6/test/glut/test17.c | 289 - lib/glut-3.7.6/test/glut/test17.dsp | 90 - lib/glut-3.7.6/test/glut/test18.c | 210 - lib/glut-3.7.6/test/glut/test18.dsp | 90 - lib/glut-3.7.6/test/glut/test19.c | 67 - lib/glut-3.7.6/test/glut/test19.dsp | 90 - lib/glut-3.7.6/test/glut/test2.c | 177 - lib/glut-3.7.6/test/glut/test2.dsp | 90 - lib/glut-3.7.6/test/glut/test20.c | 139 - lib/glut-3.7.6/test/glut/test20.dsp | 90 - lib/glut-3.7.6/test/glut/test21.c | 189 - lib/glut-3.7.6/test/glut/test21.dsp | 90 - lib/glut-3.7.6/test/glut/test22.c | 209 - lib/glut-3.7.6/test/glut/test22.dsp | 90 - lib/glut-3.7.6/test/glut/test23.c | 138 - lib/glut-3.7.6/test/glut/test23.dsp | 90 - lib/glut-3.7.6/test/glut/test24.c | 146 - lib/glut-3.7.6/test/glut/test24.dsp | 90 - lib/glut-3.7.6/test/glut/test25.c | 162 - lib/glut-3.7.6/test/glut/test25.dsp | 90 - lib/glut-3.7.6/test/glut/test26.c | 145 - lib/glut-3.7.6/test/glut/test26.dsp | 90 - lib/glut-3.7.6/test/glut/test27.c | 105 - lib/glut-3.7.6/test/glut/test27.dsp | 90 - lib/glut-3.7.6/test/glut/test28.c | 56 - lib/glut-3.7.6/test/glut/test28.dsp | 90 - lib/glut-3.7.6/test/glut/test29.c | 162 - lib/glut-3.7.6/test/glut/test3.c | 92 - lib/glut-3.7.6/test/glut/test3.dsp | 90 - lib/glut-3.7.6/test/glut/test4.c | 60 - lib/glut-3.7.6/test/glut/test4.dsp | 90 - lib/glut-3.7.6/test/glut/test5.c | 133 - lib/glut-3.7.6/test/glut/test5.dsp | 90 - lib/glut-3.7.6/test/glut/test6.c | 539 - lib/glut-3.7.6/test/glut/test6.dsp | 90 - lib/glut-3.7.6/test/glut/test7.c | 199 - lib/glut-3.7.6/test/glut/test7.dsp | 90 - lib/glut-3.7.6/test/glut/test8.c | 164 - lib/glut-3.7.6/test/glut/test8.dsp | 90 - lib/glut-3.7.6/test/glut/test9.c | 145 - lib/glut-3.7.6/test/glut/test9.dsp | 90 - lib/glut-3.7.6/test/glut/tests.dsp | 86 - lib/glut-3.7.6/test/glut/timer_test.c | 68 - lib/glut-3.7.6/test/glut/timer_test.dsp | 90 - lib/glut-3.7.6/test/mui/Imakefile | 17 - lib/glut-3.7.6/test/mui/mui_test.c | 161 - lib/glut-3.7.6/test/mui/mui_test.dsp | 90 - lib/glut-3.7.6/test/mui/multi_test.c | 85 - lib/glut-3.7.6/test/mui/multi_test.dsp | 90 - lib/glut-3.7.6/test/test.dsw | 839 - 1401 files changed, 296798 deletions(-) delete mode 100644 lib/glut-3.7.6/CHANGES delete mode 100644 lib/glut-3.7.6/FAQ.glut delete mode 100644 lib/glut-3.7.6/Glut.cf delete mode 100644 lib/glut-3.7.6/IAFA-PACKAGE delete mode 100644 lib/glut-3.7.6/Imakefile delete mode 100644 lib/glut-3.7.6/NOTICE delete mode 100644 lib/glut-3.7.6/Portability.txt delete mode 100644 lib/glut-3.7.6/README delete mode 100644 lib/glut-3.7.6/README-win32.txt delete mode 100644 lib/glut-3.7.6/README.ada delete mode 100644 lib/glut-3.7.6/README.fortran delete mode 100644 lib/glut-3.7.6/README.glut2 delete mode 100644 lib/glut-3.7.6/README.glut3 delete mode 100644 lib/glut-3.7.6/README.ibm-shlib delete mode 100644 lib/glut-3.7.6/README.inventor delete mode 100644 lib/glut-3.7.6/README.irix6 delete mode 100644 lib/glut-3.7.6/README.irix64bit delete mode 100644 lib/glut-3.7.6/README.linux delete mode 100644 lib/glut-3.7.6/README.man delete mode 100644 lib/glut-3.7.6/README.mesa delete mode 100644 lib/glut-3.7.6/README.mui delete mode 100644 lib/glut-3.7.6/README.xinput delete mode 100644 lib/glut-3.7.6/adainclude/GL/glut.adb delete mode 100644 lib/glut-3.7.6/adainclude/GL/glut.ads delete mode 100644 lib/glut-3.7.6/glut-3.7.6.pro delete mode 100644 lib/glut-3.7.6/glut.dsw delete mode 100644 lib/glut-3.7.6/glutdefs delete mode 100644 lib/glut-3.7.6/include/GL/fgl.h delete mode 100644 lib/glut-3.7.6/include/GL/fglu.h delete mode 100644 lib/glut-3.7.6/include/GL/fglut.h delete mode 100644 lib/glut-3.7.6/include/GL/glsmap.h delete mode 100644 lib/glut-3.7.6/include/GL/glut.h delete mode 100644 lib/glut-3.7.6/include/GL/glutf90.h delete mode 100644 lib/glut-3.7.6/include/GL/tube.h delete mode 100644 lib/glut-3.7.6/include/mui/browser.h delete mode 100644 lib/glut-3.7.6/include/mui/displaylist.h delete mode 100644 lib/glut-3.7.6/include/mui/gizmo.h delete mode 100644 lib/glut-3.7.6/include/mui/hslider.h delete mode 100644 lib/glut-3.7.6/include/mui/mui.h delete mode 100644 lib/glut-3.7.6/include/mui/textlist.h delete mode 100644 lib/glut-3.7.6/include/mui/uicolor.h delete mode 100644 lib/glut-3.7.6/include/mui/vslider.h delete mode 100644 lib/glut-3.7.6/lib/Imakefile delete mode 100644 lib/glut-3.7.6/lib/_all.dsp delete mode 100644 lib/glut-3.7.6/lib/dll.dsw delete mode 100644 lib/glut-3.7.6/lib/fglut.n32/ObjectType.mk delete mode 100644 lib/glut-3.7.6/lib/fglut.n64/ObjectType.mk delete mode 100644 lib/glut-3.7.6/lib/fglut/ObjectType.mk delete mode 100644 lib/glut-3.7.6/lib/fglut/fglut.c delete mode 100644 lib/glut-3.7.6/lib/fglut/fglut_8x13.c delete mode 100644 lib/glut-3.7.6/lib/fglut/fglut_9x15.c delete mode 100644 lib/glut-3.7.6/lib/fglut/fglut_hel10.c delete mode 100644 lib/glut-3.7.6/lib/fglut/fglut_hel12.c delete mode 100644 lib/glut-3.7.6/lib/fglut/fglut_hel18.c delete mode 100644 lib/glut-3.7.6/lib/fglut/fglut_mroman.c delete mode 100644 lib/glut-3.7.6/lib/fglut/fglut_roman.c delete mode 100644 lib/glut-3.7.6/lib/fglut/fglut_tr10.c delete mode 100644 lib/glut-3.7.6/lib/fglut/fglut_tr24.c delete mode 100644 lib/glut-3.7.6/lib/gle.n32/ObjectType.mk delete mode 100644 lib/glut-3.7.6/lib/gle.n64/ObjectType.mk delete mode 100644 lib/glut-3.7.6/lib/gle/Imakefile delete mode 100644 lib/glut-3.7.6/lib/gle/ObjectType.mk delete mode 100644 lib/glut-3.7.6/lib/gle/copy.h delete mode 100644 lib/glut-3.7.6/lib/gle/ex_angle.c delete mode 100644 lib/glut-3.7.6/lib/gle/ex_cut_round.c delete mode 100644 lib/glut-3.7.6/lib/gle/ex_raw.c delete mode 100644 lib/glut-3.7.6/lib/gle/extrude.c delete mode 100644 lib/glut-3.7.6/lib/gle/extrude.h delete mode 100644 lib/glut-3.7.6/lib/gle/gle.dsp delete mode 100644 lib/glut-3.7.6/lib/gle/gle_dll.dsp delete mode 100644 lib/glut-3.7.6/lib/gle/gutil.h delete mode 100644 lib/glut-3.7.6/lib/gle/intersect.c delete mode 100644 lib/glut-3.7.6/lib/gle/intersect.h delete mode 100644 lib/glut-3.7.6/lib/gle/port.h delete mode 100644 lib/glut-3.7.6/lib/gle/qmesh.c delete mode 100644 lib/glut-3.7.6/lib/gle/rot.h delete mode 100644 lib/glut-3.7.6/lib/gle/rot_prince.c delete mode 100644 lib/glut-3.7.6/lib/gle/rotate.c delete mode 100644 lib/glut-3.7.6/lib/gle/round_cap.c delete mode 100644 lib/glut-3.7.6/lib/gle/segment.c delete mode 100644 lib/glut-3.7.6/lib/gle/segment.h delete mode 100644 lib/glut-3.7.6/lib/gle/texgen.c delete mode 100644 lib/glut-3.7.6/lib/gle/tube_gc.h delete mode 100644 lib/glut-3.7.6/lib/gle/urotate.c delete mode 100644 lib/glut-3.7.6/lib/gle/view.c delete mode 100644 lib/glut-3.7.6/lib/gle/vvector.h delete mode 100644 lib/glut-3.7.6/lib/glsmap.n32/ObjectType.mk delete mode 100644 lib/glut-3.7.6/lib/glsmap.n64/ObjectType.mk delete mode 100644 lib/glut-3.7.6/lib/glsmap/Imakefile delete mode 100644 lib/glut-3.7.6/lib/glsmap/ObjectType.mk delete mode 100644 lib/glut-3.7.6/lib/glsmap/glsmap.dsp delete mode 100644 lib/glut-3.7.6/lib/glsmap/glsmapint.h delete mode 100644 lib/glut-3.7.6/lib/glsmap/smap_buildsmap.c delete mode 100644 lib/glut-3.7.6/lib/glsmap/smap_context.c delete mode 100644 lib/glut-3.7.6/lib/glsmap/smap_create.c delete mode 100644 lib/glut-3.7.6/lib/glsmap/smap_destroy.c delete mode 100644 lib/glut-3.7.6/lib/glsmap/smap_drawmesh.c delete mode 100644 lib/glut-3.7.6/lib/glsmap/smap_flag.c delete mode 100644 lib/glut-3.7.6/lib/glsmap/smap_get.c delete mode 100644 lib/glut-3.7.6/lib/glsmap/smap_getfunc.c delete mode 100644 lib/glut-3.7.6/lib/glsmap/smap_gettexdim.c delete mode 100644 lib/glut-3.7.6/lib/glsmap/smap_gettexobj.c delete mode 100644 lib/glut-3.7.6/lib/glsmap/smap_getvec.c delete mode 100644 lib/glut-3.7.6/lib/glsmap/smap_makemesh.c delete mode 100644 lib/glut-3.7.6/lib/glsmap/smap_nearfar.c delete mode 100644 lib/glut-3.7.6/lib/glsmap/smap_origin.c delete mode 100644 lib/glut-3.7.6/lib/glsmap/smap_render.c delete mode 100644 lib/glut-3.7.6/lib/glsmap/smap_rvec2st.c delete mode 100644 lib/glut-3.7.6/lib/glsmap/smap_set.c delete mode 100644 lib/glut-3.7.6/lib/glsmap/smap_setfunc.c delete mode 100644 lib/glut-3.7.6/lib/glsmap/smap_setvec.c delete mode 100644 lib/glut-3.7.6/lib/glsmap/smap_texdim.c delete mode 100644 lib/glut-3.7.6/lib/glsmap/smap_texobj.c delete mode 100644 lib/glut-3.7.6/lib/glut.n32/ObjectType.mk delete mode 100644 lib/glut-3.7.6/lib/glut.n64/ObjectType.mk delete mode 100644 lib/glut-3.7.6/lib/glut/Imakefile delete mode 100644 lib/glut-3.7.6/lib/glut/MonoRoman.stroke delete mode 100644 lib/glut-3.7.6/lib/glut/ObjectType.mk delete mode 100644 lib/glut-3.7.6/lib/glut/Roman.stroke delete mode 100644 lib/glut-3.7.6/lib/glut/capturexfont.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut.def delete mode 100644 lib/glut-3.7.6/lib/glut/glut.ico delete mode 100644 lib/glut-3.7.6/lib/glut/glut.rc delete mode 100644 lib/glut-3.7.6/lib/glut/glut32.dsp delete mode 100644 lib/glut-3.7.6/lib/glut/glut_8x13.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_9x15.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_bitmap.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_bwidth.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_cindex.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_cmap.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_cursor.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_dials.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_dstr.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_event.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_ext.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_fcb.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_fullscrn.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_gamemode.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_get.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_glxext.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_hel10.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_hel12.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_hel18.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_init.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_input.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_joy.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_key.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_keyctrl.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_keyup.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_menu.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_menu2.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_mesa.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_modifier.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_mroman.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_overlay.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_roman.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_shapes.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_space.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_stroke.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_swap.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_swidth.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_tablet.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_teapot.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_tr10.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_tr24.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_util.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_vidresize.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_warp.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_win.c delete mode 100644 lib/glut-3.7.6/lib/glut/glut_winmisc.c delete mode 100644 lib/glut-3.7.6/lib/glut/glutbitmap.h delete mode 100644 lib/glut-3.7.6/lib/glut/glutint.h delete mode 100644 lib/glut-3.7.6/lib/glut/glutstroke.h delete mode 100644 lib/glut-3.7.6/lib/glut/glutwin32.h delete mode 100644 lib/glut-3.7.6/lib/glut/layerutil.c delete mode 100644 lib/glut-3.7.6/lib/glut/layerutil.h delete mode 100644 lib/glut-3.7.6/lib/glut/mesa.patch2 delete mode 100644 lib/glut-3.7.6/lib/glut/stroke.h delete mode 100644 lib/glut-3.7.6/lib/glut/strokegen.y delete mode 100644 lib/glut-3.7.6/lib/glut/strokelex.l delete mode 100644 lib/glut-3.7.6/lib/glut/win32_glx.c delete mode 100644 lib/glut-3.7.6/lib/glut/win32_glx.h delete mode 100644 lib/glut-3.7.6/lib/glut/win32_menu.c delete mode 100644 lib/glut-3.7.6/lib/glut/win32_util.c delete mode 100644 lib/glut-3.7.6/lib/glut/win32_winproc.c delete mode 100644 lib/glut-3.7.6/lib/glut/win32_x11.c delete mode 100644 lib/glut-3.7.6/lib/glut/win32_x11.h delete mode 100644 lib/glut-3.7.6/lib/lib.dsw delete mode 100644 lib/glut-3.7.6/lib/mui.n32/ObjectType.mk delete mode 100644 lib/glut-3.7.6/lib/mui.n64/ObjectType.mk delete mode 100644 lib/glut-3.7.6/lib/mui/Imakefile delete mode 100644 lib/glut-3.7.6/lib/mui/ObjectType.mk delete mode 100644 lib/glut-3.7.6/lib/mui/browseparse.c delete mode 100644 lib/glut-3.7.6/lib/mui/browser.c delete mode 100644 lib/glut-3.7.6/lib/mui/button.c delete mode 100644 lib/glut-3.7.6/lib/mui/dirent32.h delete mode 100644 lib/glut-3.7.6/lib/mui/displaylist.c delete mode 100644 lib/glut-3.7.6/lib/mui/gizmo.c delete mode 100644 lib/glut-3.7.6/lib/mui/glutmui.c delete mode 100644 lib/glut-3.7.6/lib/mui/hslider.c delete mode 100644 lib/glut-3.7.6/lib/mui/miscui.c delete mode 100644 lib/glut-3.7.6/lib/mui/mui.c delete mode 100644 lib/glut-3.7.6/lib/mui/mui.dsp delete mode 100644 lib/glut-3.7.6/lib/mui/pulldown.c delete mode 100644 lib/glut-3.7.6/lib/mui/textlist.c delete mode 100644 lib/glut-3.7.6/lib/mui/uicolor.c delete mode 100644 lib/glut-3.7.6/lib/mui/vslider.c delete mode 100644 lib/glut-3.7.6/man/Imakefile delete mode 100644 lib/glut-3.7.6/man/gle/Imakefile delete mode 100644 lib/glut-3.7.6/man/gle/gle.man delete mode 100644 lib/glut-3.7.6/man/gle/gleExtrusion.man delete mode 100644 lib/glut-3.7.6/man/gle/gleHelicoid.man delete mode 100644 lib/glut-3.7.6/man/gle/gleLathe.man delete mode 100644 lib/glut-3.7.6/man/gle/glePolyCone.man delete mode 100644 lib/glut-3.7.6/man/gle/glePolyCylinder.man delete mode 100644 lib/glut-3.7.6/man/gle/gleScrew.man delete mode 100644 lib/glut-3.7.6/man/gle/gleSetJoinStyle.man delete mode 100644 lib/glut-3.7.6/man/gle/gleSpiral.man delete mode 100644 lib/glut-3.7.6/man/gle/gleSuperExtrusion.man delete mode 100644 lib/glut-3.7.6/man/gle/gleTextureMode.man delete mode 100644 lib/glut-3.7.6/man/gle/gleToroid.man delete mode 100644 lib/glut-3.7.6/man/gle/gleTwistExtrusion.man delete mode 100644 lib/glut-3.7.6/man/glut/Imakefile delete mode 100644 lib/glut-3.7.6/man/glut/glut.man delete mode 100644 lib/glut-3.7.6/man/glut/glutAddMenuEntry.man delete mode 100644 lib/glut-3.7.6/man/glut/glutAddSubMenu.man delete mode 100644 lib/glut-3.7.6/man/glut/glutAttachMenu.man delete mode 100644 lib/glut-3.7.6/man/glut/glutBitmapCharacter.man delete mode 100644 lib/glut-3.7.6/man/glut/glutBitmapWidth.man delete mode 100644 lib/glut-3.7.6/man/glut/glutButtonBoxFunc.man delete mode 100644 lib/glut-3.7.6/man/glut/glutChangeToMenuEntry.man delete mode 100644 lib/glut-3.7.6/man/glut/glutChangeToSubMenu.man delete mode 100644 lib/glut-3.7.6/man/glut/glutCopyColormap.man delete mode 100644 lib/glut-3.7.6/man/glut/glutCreateMenu.man delete mode 100644 lib/glut-3.7.6/man/glut/glutCreateSubWindow.man delete mode 100644 lib/glut-3.7.6/man/glut/glutCreateWindow.man delete mode 100644 lib/glut-3.7.6/man/glut/glutDestroyMenu.man delete mode 100644 lib/glut-3.7.6/man/glut/glutDestroyWindow.man delete mode 100644 lib/glut-3.7.6/man/glut/glutDeviceGet.man delete mode 100644 lib/glut-3.7.6/man/glut/glutDialsFunc.man delete mode 100644 lib/glut-3.7.6/man/glut/glutDisplayFunc.man delete mode 100644 lib/glut-3.7.6/man/glut/glutEnterGameMode.man delete mode 100644 lib/glut-3.7.6/man/glut/glutEntryFunc.man delete mode 100644 lib/glut-3.7.6/man/glut/glutEstablishOverlay.man delete mode 100644 lib/glut-3.7.6/man/glut/glutExtensionSupported.man delete mode 100644 lib/glut-3.7.6/man/glut/glutForceJoystickFunc.man delete mode 100644 lib/glut-3.7.6/man/glut/glutFullScreen.man delete mode 100644 lib/glut-3.7.6/man/glut/glutGameModeGet.man delete mode 100644 lib/glut-3.7.6/man/glut/glutGameModeString.man delete mode 100644 lib/glut-3.7.6/man/glut/glutGet.man delete mode 100644 lib/glut-3.7.6/man/glut/glutGetColor.man delete mode 100644 lib/glut-3.7.6/man/glut/glutGetModifiers.man delete mode 100644 lib/glut-3.7.6/man/glut/glutIdleFunc.man delete mode 100644 lib/glut-3.7.6/man/glut/glutIgnoreKeyRepeat.man delete mode 100644 lib/glut-3.7.6/man/glut/glutInit.man delete mode 100644 lib/glut-3.7.6/man/glut/glutInitDisplayMode.man delete mode 100644 lib/glut-3.7.6/man/glut/glutInitDisplayString.man delete mode 100644 lib/glut-3.7.6/man/glut/glutInitWindowPosition.man delete mode 100644 lib/glut-3.7.6/man/glut/glutJoystickFunc.man delete mode 100644 lib/glut-3.7.6/man/glut/glutKeyboardFunc.man delete mode 100644 lib/glut-3.7.6/man/glut/glutKeyboardUpFunc.man delete mode 100644 lib/glut-3.7.6/man/glut/glutLayerGet.man delete mode 100644 lib/glut-3.7.6/man/glut/glutMainLoop.man delete mode 100644 lib/glut-3.7.6/man/glut/glutMenuStatusFunc.man delete mode 100644 lib/glut-3.7.6/man/glut/glutMotionFunc.man delete mode 100644 lib/glut-3.7.6/man/glut/glutMouseFunc.man delete mode 100644 lib/glut-3.7.6/man/glut/glutOverlayDisplayFunc.man delete mode 100644 lib/glut-3.7.6/man/glut/glutPopWindow.man delete mode 100644 lib/glut-3.7.6/man/glut/glutPositionWindow.man delete mode 100644 lib/glut-3.7.6/man/glut/glutPostOverlayRedisplay.man delete mode 100644 lib/glut-3.7.6/man/glut/glutPostRedisplay.man delete mode 100644 lib/glut-3.7.6/man/glut/glutRemoveMenuItem.man delete mode 100644 lib/glut-3.7.6/man/glut/glutRemoveOverlay.man delete mode 100644 lib/glut-3.7.6/man/glut/glutReportErrors.man delete mode 100644 lib/glut-3.7.6/man/glut/glutReshapeFunc.man delete mode 100644 lib/glut-3.7.6/man/glut/glutReshapeWindow.man delete mode 100644 lib/glut-3.7.6/man/glut/glutSetColor.man delete mode 100644 lib/glut-3.7.6/man/glut/glutSetCursor.man delete mode 100644 lib/glut-3.7.6/man/glut/glutSetKeyRepeat.man delete mode 100644 lib/glut-3.7.6/man/glut/glutSetMenu.man delete mode 100644 lib/glut-3.7.6/man/glut/glutSetWindow.man delete mode 100644 lib/glut-3.7.6/man/glut/glutSetWindowTitle.man delete mode 100644 lib/glut-3.7.6/man/glut/glutShowOverlay.man delete mode 100644 lib/glut-3.7.6/man/glut/glutShowWindow.man delete mode 100644 lib/glut-3.7.6/man/glut/glutSolidCone.man delete mode 100644 lib/glut-3.7.6/man/glut/glutSolidCube.man delete mode 100644 lib/glut-3.7.6/man/glut/glutSolidDodecahedron.man delete mode 100644 lib/glut-3.7.6/man/glut/glutSolidIcosahedron.man delete mode 100644 lib/glut-3.7.6/man/glut/glutSolidOctahedron.man delete mode 100644 lib/glut-3.7.6/man/glut/glutSolidSphere.man delete mode 100644 lib/glut-3.7.6/man/glut/glutSolidTeapot.man delete mode 100644 lib/glut-3.7.6/man/glut/glutSolidTetrahedron.man delete mode 100644 lib/glut-3.7.6/man/glut/glutSolidTorus.man delete mode 100644 lib/glut-3.7.6/man/glut/glutSpaceballButtonFunc.man delete mode 100644 lib/glut-3.7.6/man/glut/glutSpaceballMotionFunc.man delete mode 100644 lib/glut-3.7.6/man/glut/glutSpaceballRotateFunc.man delete mode 100644 lib/glut-3.7.6/man/glut/glutSpecialFunc.man delete mode 100644 lib/glut-3.7.6/man/glut/glutSpecialUpFunc.man delete mode 100644 lib/glut-3.7.6/man/glut/glutStrokeCharacter.man delete mode 100644 lib/glut-3.7.6/man/glut/glutStrokeWidth.man delete mode 100644 lib/glut-3.7.6/man/glut/glutSwapBuffers.man delete mode 100644 lib/glut-3.7.6/man/glut/glutTabletButtonFunc.man delete mode 100644 lib/glut-3.7.6/man/glut/glutTabletMotionFunc.man delete mode 100644 lib/glut-3.7.6/man/glut/glutTimerFunc.man delete mode 100644 lib/glut-3.7.6/man/glut/glutUseLayer.man delete mode 100644 lib/glut-3.7.6/man/glut/glutVisibilityFunc.man delete mode 100644 lib/glut-3.7.6/man/glut/glutWarpPointer.man delete mode 100644 lib/glut-3.7.6/mkmkfiles.imake delete mode 100644 lib/glut-3.7.6/mkmkfiles.sgi delete mode 100644 lib/glut-3.7.6/progs/Imakefile delete mode 100644 lib/glut-3.7.6/progs/ada/README delete mode 100644 lib/glut-3.7.6/progs/ada/ada_sphere.adb delete mode 100644 lib/glut-3.7.6/progs/ada/ada_sphere_procs.adb delete mode 100644 lib/glut-3.7.6/progs/ada/ada_sphere_procs.ads delete mode 100644 lib/glut-3.7.6/progs/ada/bezmesh.adb delete mode 100644 lib/glut-3.7.6/progs/ada/bezmesh_procs.adb delete mode 100644 lib/glut-3.7.6/progs/ada/bezmesh_procs.ads delete mode 100644 lib/glut-3.7.6/progs/ada/cone.adb delete mode 100644 lib/glut-3.7.6/progs/ada/cone_procs.adb delete mode 100644 lib/glut-3.7.6/progs/ada/cone_procs.ads delete mode 100644 lib/glut-3.7.6/progs/ada/dof.adb delete mode 100644 lib/glut-3.7.6/progs/ada/dof_procs.adb delete mode 100644 lib/glut-3.7.6/progs/ada/dof_procs.ads delete mode 100644 lib/glut-3.7.6/progs/ada/fog.adb delete mode 100644 lib/glut-3.7.6/progs/ada/fog_procs.adb delete mode 100644 lib/glut-3.7.6/progs/ada/fog_procs.ads delete mode 100644 lib/glut-3.7.6/progs/ada/jitter.ads delete mode 100644 lib/glut-3.7.6/progs/ada/pickdepth.adb delete mode 100644 lib/glut-3.7.6/progs/ada/pickdepth_procs.adb delete mode 100644 lib/glut-3.7.6/progs/ada/pickdepth_procs.ads delete mode 100644 lib/glut-3.7.6/progs/ada/scenebamb.adb delete mode 100644 lib/glut-3.7.6/progs/ada/scenebamb_procs.adb delete mode 100644 lib/glut-3.7.6/progs/ada/scenebamb_procs.ads delete mode 100644 lib/glut-3.7.6/progs/ada/teapots.adb delete mode 100644 lib/glut-3.7.6/progs/ada/teapots_procs.adb delete mode 100644 lib/glut-3.7.6/progs/ada/teapots_procs.ads delete mode 100644 lib/glut-3.7.6/progs/ada/texgen.adb delete mode 100644 lib/glut-3.7.6/progs/ada/texgen_procs.adb delete mode 100644 lib/glut-3.7.6/progs/ada/texgen_procs.ads delete mode 100644 lib/glut-3.7.6/progs/ada/texturesurf.adb delete mode 100644 lib/glut-3.7.6/progs/ada/texturesurf_procs.adb delete mode 100644 lib/glut-3.7.6/progs/ada/texturesurf_procs.ads delete mode 100644 lib/glut-3.7.6/progs/advanced.dsw delete mode 100644 lib/glut-3.7.6/progs/advanced/Imakefile delete mode 100644 lib/glut-3.7.6/progs/advanced/README delete mode 100644 lib/glut-3.7.6/progs/advanced/Times-Italic.bw delete mode 100644 lib/glut-3.7.6/progs/advanced/_all.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced/accumaa.c delete mode 100644 lib/glut-3.7.6/progs/advanced/accumaa.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced/addfog.c delete mode 100644 lib/glut-3.7.6/progs/advanced/addfog.h delete mode 100644 lib/glut-3.7.6/progs/advanced/af_depthcue.c delete mode 100644 lib/glut-3.7.6/progs/advanced/af_depthcue.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced/af_teapots.c delete mode 100644 lib/glut-3.7.6/progs/advanced/af_teapots.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced/boundary.c delete mode 100644 lib/glut-3.7.6/progs/advanced/boundary.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced/comp.c delete mode 100644 lib/glut-3.7.6/progs/advanced/comp.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced/convolve.c delete mode 100644 lib/glut-3.7.6/progs/advanced/convolve.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced/csg.c delete mode 100644 lib/glut-3.7.6/progs/advanced/csg.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced/decal.c delete mode 100644 lib/glut-3.7.6/progs/advanced/decal.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced/dissolve.c delete mode 100644 lib/glut-3.7.6/progs/advanced/dissolve.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced/envmap.c delete mode 100644 lib/glut-3.7.6/progs/advanced/envmap.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced/envphong.c delete mode 100644 lib/glut-3.7.6/progs/advanced/envphong.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced/field.c delete mode 100644 lib/glut-3.7.6/progs/advanced/field.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced/genmipmap.c delete mode 100644 lib/glut-3.7.6/progs/advanced/genmipmap.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced/haloed.c delete mode 100644 lib/glut-3.7.6/progs/advanced/haloed.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced/hello2rts.c delete mode 100644 lib/glut-3.7.6/progs/advanced/hello2rts.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced/hiddenline.c delete mode 100644 lib/glut-3.7.6/progs/advanced/hiddenline.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced/imgproc.c delete mode 100644 lib/glut-3.7.6/progs/advanced/imgproc.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced/izoom.c delete mode 100644 lib/glut-3.7.6/progs/advanced/izoom.h delete mode 100644 lib/glut-3.7.6/progs/advanced/logopoints.h delete mode 100644 lib/glut-3.7.6/progs/advanced/mipmap_lines.c delete mode 100644 lib/glut-3.7.6/progs/advanced/mipmap_lines.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced/motionblur.c delete mode 100644 lib/glut-3.7.6/progs/advanced/motionblur.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced/multilight.c delete mode 100644 lib/glut-3.7.6/progs/advanced/multilight.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced/nvidia_logo.c delete mode 100644 lib/glut-3.7.6/progs/advanced/occlude.c delete mode 100644 lib/glut-3.7.6/progs/advanced/occlude.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced/pointburst.c delete mode 100644 lib/glut-3.7.6/progs/advanced/pointburst.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced/projshadow.c delete mode 100644 lib/glut-3.7.6/progs/advanced/projshadow.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced/projtex.c delete mode 100644 lib/glut-3.7.6/progs/advanced/projtex.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced/rasonly.c delete mode 100644 lib/glut-3.7.6/progs/advanced/rasonly.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced/redblue_stereo.c delete mode 100644 lib/glut-3.7.6/progs/advanced/redblue_stereo.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced/rts.c delete mode 100644 lib/glut-3.7.6/progs/advanced/rtshadow.h delete mode 100644 lib/glut-3.7.6/progs/advanced/sgiflag.c delete mode 100644 lib/glut-3.7.6/progs/advanced/sgiflag.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced/sgiflag.h delete mode 100644 lib/glut-3.7.6/progs/advanced/shadowfun.c delete mode 100644 lib/glut-3.7.6/progs/advanced/shadowfun.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced/shadowmap.c delete mode 100644 lib/glut-3.7.6/progs/advanced/shadowmap.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced/shadowvol.c delete mode 100644 lib/glut-3.7.6/progs/advanced/shadowvol.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced/silhouette.c delete mode 100644 lib/glut-3.7.6/progs/advanced/silhouette.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced/softshadow.c delete mode 100644 lib/glut-3.7.6/progs/advanced/softshadow.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced/sphere.c delete mode 100644 lib/glut-3.7.6/progs/advanced/tess.c delete mode 100644 lib/glut-3.7.6/progs/advanced/tess.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced/textext.c delete mode 100644 lib/glut-3.7.6/progs/advanced/textext.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced/textile.c delete mode 100644 lib/glut-3.7.6/progs/advanced/textile.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced/textmap.c delete mode 100644 lib/glut-3.7.6/progs/advanced/textmap.h delete mode 100644 lib/glut-3.7.6/progs/advanced/textrim.c delete mode 100644 lib/glut-3.7.6/progs/advanced/textrim.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced/texture.c delete mode 100644 lib/glut-3.7.6/progs/advanced/texture.h delete mode 100644 lib/glut-3.7.6/progs/advanced/texwinalign.c delete mode 100644 lib/glut-3.7.6/progs/advanced/texwinalign.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced/tvertex.c delete mode 100644 lib/glut-3.7.6/progs/advanced/tvertex.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced/videoresize.c delete mode 100644 lib/glut-3.7.6/progs/advanced/videoresize.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced/vox.c delete mode 100644 lib/glut-3.7.6/progs/advanced/vox.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced/warp.c delete mode 100644 lib/glut-3.7.6/progs/advanced/warp.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced/zcomposite.c delete mode 100644 lib/glut-3.7.6/progs/advanced/zcomposite.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97.dsw delete mode 100644 lib/glut-3.7.6/progs/advanced97/Imakefile delete mode 100644 lib/glut-3.7.6/progs/advanced97/_all.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/accconvolve.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/accconvolve.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/accumaa.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/accumaa.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/alphablend.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/alphablend.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/alphablendnosort.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/alphablendnosort.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/billboard.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/billboard.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/bubble.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/bubble.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/bump.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/bump.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/chromakey.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/chromakey.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/chromakey_fancy.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/chromakey_fancy.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/cloud.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/cloud.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/cloudl.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/cloudl.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/complexity.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/complexity.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/csg.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/csg.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/d.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/decal.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/decal.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/dissolve.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/dissolve.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/explode.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/explode.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/fire.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/fire.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/genspheremap.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/genspheremap.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/highlight.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/highlight.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/interp.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/interp.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/lightmap.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/lightmap.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/lightp.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/lightp.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/line.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/line.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/multiaccumaa.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/multiaccumaa.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/multialphablend.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/multialphablend.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/multialphablendnosort.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/multialphablendnosort.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/multimirror.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/multimirror.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/multiscreendoor.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/multiscreendoor.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/multispheremap.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/multispheremap.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/noise.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/noise.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/nthsurfdemo.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/nthsurfdemo.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/paint.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/paint.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/projtex.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/projtex.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/sbias.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/sbias.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/screendoor.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/screendoor.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/sm.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/sm.h delete mode 100644 lib/glut-3.7.6/progs/advanced97/smoke.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/smoke.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/softshadow2.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/softshadow2.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/spectral.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/spectral.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/sphere.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/tess.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/tess.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/texgen.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/texgen.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/texmovie.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/texmovie.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/texpage.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/texpage.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/textile.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/textile.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/texture.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/texture.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/texture.h delete mode 100644 lib/glut-3.7.6/progs/advanced97/underwater.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/underwater.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/usespheremap.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/usespheremap.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/vapor.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/vapor.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/volume.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/volume.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/warp.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/warp.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/water.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/water.dsp delete mode 100644 lib/glut-3.7.6/progs/advanced97/zcomposite.c delete mode 100644 lib/glut-3.7.6/progs/advanced97/zcomposite.dsp delete mode 100644 lib/glut-3.7.6/progs/aux2glut.sed delete mode 100644 lib/glut-3.7.6/progs/bucciarelli.dsw delete mode 100644 lib/glut-3.7.6/progs/bucciarelli/Imakefile delete mode 100644 lib/glut-3.7.6/progs/bucciarelli/README delete mode 100644 lib/glut-3.7.6/progs/bucciarelli/_all.dsp delete mode 100644 lib/glut-3.7.6/progs/bucciarelli/bw.rgb delete mode 100644 lib/glut-3.7.6/progs/bucciarelli/dteapot.c delete mode 100644 lib/glut-3.7.6/progs/bucciarelli/fire.c delete mode 100644 lib/glut-3.7.6/progs/bucciarelli/fire.dsp delete mode 100644 lib/glut-3.7.6/progs/bucciarelli/glbpaltex.dsp delete mode 100644 lib/glut-3.7.6/progs/bucciarelli/glbpaltx.c delete mode 100644 lib/glut-3.7.6/progs/bucciarelli/gltest.c delete mode 100644 lib/glut-3.7.6/progs/bucciarelli/gltest.dsp delete mode 100644 lib/glut-3.7.6/progs/bucciarelli/image.c delete mode 100644 lib/glut-3.7.6/progs/bucciarelli/image.h delete mode 100644 lib/glut-3.7.6/progs/bucciarelli/mnt.bin delete mode 100644 lib/glut-3.7.6/progs/bucciarelli/paltex.c delete mode 100644 lib/glut-3.7.6/progs/bucciarelli/paltex.dsp delete mode 100644 lib/glut-3.7.6/progs/bucciarelli/ray.c delete mode 100644 lib/glut-3.7.6/progs/bucciarelli/ray.dsp delete mode 100644 lib/glut-3.7.6/progs/bucciarelli/s128.rgb delete mode 100644 lib/glut-3.7.6/progs/bucciarelli/shadow.c delete mode 100644 lib/glut-3.7.6/progs/bucciarelli/sources.c delete mode 100644 lib/glut-3.7.6/progs/bucciarelli/teapot.c delete mode 100644 lib/glut-3.7.6/progs/bucciarelli/teapot.dsp delete mode 100644 lib/glut-3.7.6/progs/bucciarelli/terrain.c delete mode 100644 lib/glut-3.7.6/progs/bucciarelli/terrain.dsp delete mode 100644 lib/glut-3.7.6/progs/bucciarelli/tile.rgb delete mode 100644 lib/glut-3.7.6/progs/bucciarelli/tree2.rgb delete mode 100644 lib/glut-3.7.6/progs/bucciarelli/tunnel.c delete mode 100644 lib/glut-3.7.6/progs/bucciarelli/tunnel.dsp delete mode 100644 lib/glut-3.7.6/progs/contrib.dsw delete mode 100644 lib/glut-3.7.6/progs/contrib/Imakefile delete mode 100644 lib/glut-3.7.6/progs/contrib/_all.dsp delete mode 100644 lib/glut-3.7.6/progs/contrib/agv_example.c delete mode 100644 lib/glut-3.7.6/progs/contrib/agv_viewer.dsp delete mode 100644 lib/glut-3.7.6/progs/contrib/agviewer.c delete mode 100644 lib/glut-3.7.6/progs/contrib/agviewer.h delete mode 100644 lib/glut-3.7.6/progs/contrib/engine.c delete mode 100644 lib/glut-3.7.6/progs/contrib/fractals.c delete mode 100644 lib/glut-3.7.6/progs/contrib/fractals.dsp delete mode 100644 lib/glut-3.7.6/progs/contrib/fracviewer.c delete mode 100644 lib/glut-3.7.6/progs/contrib/fracviewer.h delete mode 100644 lib/glut-3.7.6/progs/contrib/gears.c delete mode 100644 lib/glut-3.7.6/progs/contrib/gears.dsp delete mode 100644 lib/glut-3.7.6/progs/contrib/hanoi.c delete mode 100644 lib/glut-3.7.6/progs/contrib/hanoi.dsp delete mode 100644 lib/glut-3.7.6/progs/contrib/hanoi2.c delete mode 100644 lib/glut-3.7.6/progs/contrib/hanoi2.dsp delete mode 100644 lib/glut-3.7.6/progs/contrib/lineblend.c delete mode 100644 lib/glut-3.7.6/progs/contrib/lineblend.dsp delete mode 100644 lib/glut-3.7.6/progs/contrib/moth.c delete mode 100644 lib/glut-3.7.6/progs/contrib/moth.dsp delete mode 100644 lib/glut-3.7.6/progs/contrib/noof.c delete mode 100644 lib/glut-3.7.6/progs/contrib/noof.dsp delete mode 100644 lib/glut-3.7.6/progs/contrib/rings.c delete mode 100644 lib/glut-3.7.6/progs/contrib/rings.dsp delete mode 100644 lib/glut-3.7.6/progs/contrib/steam.c delete mode 100644 lib/glut-3.7.6/progs/contrib/steam.dsp delete mode 100644 lib/glut-3.7.6/progs/contrib/text3d.c delete mode 100644 lib/glut-3.7.6/progs/contrib/text3d.dsp delete mode 100644 lib/glut-3.7.6/progs/contrib/worms.c delete mode 100644 lib/glut-3.7.6/progs/contrib/worms.dsp delete mode 100644 lib/glut-3.7.6/progs/data/00.rgb delete mode 100644 lib/glut-3.7.6/progs/data/01.rgb delete mode 100644 lib/glut-3.7.6/progs/data/02.rgb delete mode 100644 lib/glut-3.7.6/progs/data/03.rgb delete mode 100644 lib/glut-3.7.6/progs/data/04.rgb delete mode 100644 lib/glut-3.7.6/progs/data/05.rgb delete mode 100644 lib/glut-3.7.6/progs/data/brick.rgb delete mode 100644 lib/glut-3.7.6/progs/data/brush.rgb delete mode 100644 lib/glut-3.7.6/progs/data/clouds.bw delete mode 100644 lib/glut-3.7.6/progs/data/explosion.rgba delete mode 100644 lib/glut-3.7.6/progs/data/f15.data delete mode 100644 lib/glut-3.7.6/progs/data/fendi.rgb delete mode 100644 lib/glut-3.7.6/progs/data/flame/f00 delete mode 100644 lib/glut-3.7.6/progs/data/flame/f01 delete mode 100644 lib/glut-3.7.6/progs/data/flame/f02 delete mode 100644 lib/glut-3.7.6/progs/data/flame/f03 delete mode 100644 lib/glut-3.7.6/progs/data/flame/f04 delete mode 100644 lib/glut-3.7.6/progs/data/flame/f05 delete mode 100644 lib/glut-3.7.6/progs/data/flame/f06 delete mode 100644 lib/glut-3.7.6/progs/data/flame/f07 delete mode 100644 lib/glut-3.7.6/progs/data/flame/f08 delete mode 100644 lib/glut-3.7.6/progs/data/flame/f09 delete mode 100644 lib/glut-3.7.6/progs/data/flame/f10 delete mode 100644 lib/glut-3.7.6/progs/data/flame/f11 delete mode 100644 lib/glut-3.7.6/progs/data/flame/f12 delete mode 100644 lib/glut-3.7.6/progs/data/flame/f13 delete mode 100644 lib/glut-3.7.6/progs/data/flame/f14 delete mode 100644 lib/glut-3.7.6/progs/data/flame/f15 delete mode 100644 lib/glut-3.7.6/progs/data/flame/f16 delete mode 100644 lib/glut-3.7.6/progs/data/flame/f17 delete mode 100644 lib/glut-3.7.6/progs/data/flame/f18 delete mode 100644 lib/glut-3.7.6/progs/data/flame/f19 delete mode 100644 lib/glut-3.7.6/progs/data/flame/f20 delete mode 100644 lib/glut-3.7.6/progs/data/flame/f21 delete mode 100644 lib/glut-3.7.6/progs/data/flame/f22 delete mode 100644 lib/glut-3.7.6/progs/data/flame/f23 delete mode 100644 lib/glut-3.7.6/progs/data/flame/f24 delete mode 100644 lib/glut-3.7.6/progs/data/flame/f25 delete mode 100644 lib/glut-3.7.6/progs/data/flame/f26 delete mode 100644 lib/glut-3.7.6/progs/data/flame/f27 delete mode 100644 lib/glut-3.7.6/progs/data/flame/f28 delete mode 100644 lib/glut-3.7.6/progs/data/flame/f29 delete mode 100644 lib/glut-3.7.6/progs/data/flame/f30 delete mode 100644 lib/glut-3.7.6/progs/data/flame/f31 delete mode 100644 lib/glut-3.7.6/progs/data/light.bw delete mode 100644 lib/glut-3.7.6/progs/data/mandrill.rgb delete mode 100644 lib/glut-3.7.6/progs/data/sea.rgb delete mode 100644 lib/glut-3.7.6/progs/data/sgi.bw delete mode 100644 lib/glut-3.7.6/progs/data/smoke.bw delete mode 100644 lib/glut-3.7.6/progs/data/spheremap.rgb delete mode 100644 lib/glut-3.7.6/progs/data/swamp.rgb delete mode 100644 lib/glut-3.7.6/progs/data/water.bw delete mode 100644 lib/glut-3.7.6/progs/data/wood.rgb delete mode 100644 lib/glut-3.7.6/progs/demos.dsw delete mode 100644 lib/glut-3.7.6/progs/demos/Imakefile delete mode 100644 lib/glut-3.7.6/progs/demos/_all.dsp delete mode 100644 lib/glut-3.7.6/progs/demos/atlantis/Imakefile delete mode 100644 lib/glut-3.7.6/progs/demos/atlantis/atlantis.c delete mode 100644 lib/glut-3.7.6/progs/demos/atlantis/atlantis.dsp delete mode 100644 lib/glut-3.7.6/progs/demos/atlantis/atlantis.h delete mode 100644 lib/glut-3.7.6/progs/demos/atlantis/dolphin.c delete mode 100644 lib/glut-3.7.6/progs/demos/atlantis/shark.c delete mode 100644 lib/glut-3.7.6/progs/demos/atlantis/swim.c delete mode 100644 lib/glut-3.7.6/progs/demos/atlantis/whale.c delete mode 100644 lib/glut-3.7.6/progs/demos/bluepony/Imakefile delete mode 100644 lib/glut-3.7.6/progs/demos/bluepony/bluepony.c delete mode 100644 lib/glut-3.7.6/progs/demos/bluepony/bluepony.dsp delete mode 100644 lib/glut-3.7.6/progs/demos/bluepony/logo.bw delete mode 100644 lib/glut-3.7.6/progs/demos/bluepony/readtex.c delete mode 100644 lib/glut-3.7.6/progs/demos/bluepony/readtex.h delete mode 100644 lib/glut-3.7.6/progs/demos/bounce/Imakefile delete mode 100644 lib/glut-3.7.6/progs/demos/bounce/bounce.c delete mode 100644 lib/glut-3.7.6/progs/demos/bounce/bounce.dsp delete mode 100644 lib/glut-3.7.6/progs/demos/bounce/glui.c delete mode 100644 lib/glut-3.7.6/progs/demos/bounce/glui.h delete mode 100644 lib/glut-3.7.6/progs/demos/bounce/tb.c delete mode 100644 lib/glut-3.7.6/progs/demos/bounce/tb.h delete mode 100644 lib/glut-3.7.6/progs/demos/bounce/trackball.c delete mode 100644 lib/glut-3.7.6/progs/demos/bounce/trackball.h delete mode 100644 lib/glut-3.7.6/progs/demos/chess/Imakefile delete mode 100644 lib/glut-3.7.6/progs/demos/chess/animate.c delete mode 100644 lib/glut-3.7.6/progs/demos/chess/chess.c delete mode 100644 lib/glut-3.7.6/progs/demos/chess/chess.dsp delete mode 100644 lib/glut-3.7.6/progs/demos/chess/chess.h delete mode 100644 lib/glut-3.7.6/progs/demos/chess/chess.inp delete mode 100644 lib/glut-3.7.6/progs/demos/chess/main.c delete mode 100644 lib/glut-3.7.6/progs/demos/chess/pathplan.c delete mode 100644 lib/glut-3.7.6/progs/demos/chess/texture.c delete mode 100644 lib/glut-3.7.6/progs/demos/geoface/Imakefile delete mode 100644 lib/glut-3.7.6/progs/demos/geoface/README delete mode 100644 lib/glut-3.7.6/progs/demos/geoface/display.c delete mode 100644 lib/glut-3.7.6/progs/demos/geoface/faceline.dat delete mode 100644 lib/glut-3.7.6/progs/demos/geoface/fileio.c delete mode 100644 lib/glut-3.7.6/progs/demos/geoface/geoface.dsp delete mode 100644 lib/glut-3.7.6/progs/demos/geoface/head.h delete mode 100644 lib/glut-3.7.6/progs/demos/geoface/index.dat delete mode 100644 lib/glut-3.7.6/progs/demos/geoface/main.c delete mode 100644 lib/glut-3.7.6/progs/demos/geoface/make_face.c delete mode 100644 lib/glut-3.7.6/progs/demos/geoface/memory.h delete mode 100644 lib/glut-3.7.6/progs/demos/geoface/muscle.c delete mode 100644 lib/glut-3.7.6/progs/demos/geoface/muscle.dat delete mode 100644 lib/glut-3.7.6/progs/demos/glflare/Flare1.bw delete mode 100644 lib/glut-3.7.6/progs/demos/glflare/Flare2.bw delete mode 100644 lib/glut-3.7.6/progs/demos/glflare/Flare3.bw delete mode 100644 lib/glut-3.7.6/progs/demos/glflare/Flare4.bw delete mode 100644 lib/glut-3.7.6/progs/demos/glflare/Flare5.bw delete mode 100644 lib/glut-3.7.6/progs/demos/glflare/Flare6.bw delete mode 100644 lib/glut-3.7.6/progs/demos/glflare/Imakefile delete mode 100644 lib/glut-3.7.6/progs/demos/glflare/OpenGL.bw delete mode 100644 lib/glut-3.7.6/progs/demos/glflare/Shine0.bw delete mode 100644 lib/glut-3.7.6/progs/demos/glflare/Shine1.bw delete mode 100644 lib/glut-3.7.6/progs/demos/glflare/Shine2.bw delete mode 100644 lib/glut-3.7.6/progs/demos/glflare/Shine3.bw delete mode 100644 lib/glut-3.7.6/progs/demos/glflare/Shine4.bw delete mode 100644 lib/glut-3.7.6/progs/demos/glflare/Shine5.bw delete mode 100644 lib/glut-3.7.6/progs/demos/glflare/Shine6.bw delete mode 100644 lib/glut-3.7.6/progs/demos/glflare/Shine7.bw delete mode 100644 lib/glut-3.7.6/progs/demos/glflare/Shine8.bw delete mode 100644 lib/glut-3.7.6/progs/demos/glflare/Shine9.bw delete mode 100644 lib/glut-3.7.6/progs/demos/glflare/glflare.c delete mode 100644 lib/glut-3.7.6/progs/demos/glflare/glflare.dsp delete mode 100644 lib/glut-3.7.6/progs/demos/glflare/loadlum.c delete mode 100644 lib/glut-3.7.6/progs/demos/glflare/loadlum.h delete mode 100644 lib/glut-3.7.6/progs/demos/glflare/vec3d.c delete mode 100644 lib/glut-3.7.6/progs/demos/gliq/Imakefile delete mode 100644 lib/glut-3.7.6/progs/demos/gliq/board.c delete mode 100644 lib/glut-3.7.6/progs/demos/gliq/boards.txt delete mode 100644 lib/glut-3.7.6/progs/demos/gliq/game.c delete mode 100644 lib/glut-3.7.6/progs/demos/gliq/gliq.c delete mode 100644 lib/glut-3.7.6/progs/demos/gliq/gliq.dsp delete mode 100644 lib/glut-3.7.6/progs/demos/gliq/gliq.h delete mode 100644 lib/glut-3.7.6/progs/demos/gliq/pick.c delete mode 100644 lib/glut-3.7.6/progs/demos/gliq/score.c delete mode 100644 lib/glut-3.7.6/progs/demos/gliq/tb.c delete mode 100644 lib/glut-3.7.6/progs/demos/gliq/tb.h delete mode 100644 lib/glut-3.7.6/progs/demos/gliq/trackball.c delete mode 100644 lib/glut-3.7.6/progs/demos/gliq/trackball.h delete mode 100644 lib/glut-3.7.6/progs/demos/glutmech/Imakefile delete mode 100644 lib/glut-3.7.6/progs/demos/glutmech/glutmech.c delete mode 100644 lib/glut-3.7.6/progs/demos/glutmech/glutmech.dsp delete mode 100644 lib/glut-3.7.6/progs/demos/ideas/Imakefile delete mode 100644 lib/glut-3.7.6/progs/demos/ideas/a.c delete mode 100644 lib/glut-3.7.6/progs/demos/ideas/b.c delete mode 100644 lib/glut-3.7.6/progs/demos/ideas/d.c delete mode 100644 lib/glut-3.7.6/progs/demos/ideas/draw_holder.c delete mode 100644 lib/glut-3.7.6/progs/demos/ideas/draw_lamp.c delete mode 100644 lib/glut-3.7.6/progs/demos/ideas/draw_logo.c delete mode 100644 lib/glut-3.7.6/progs/demos/ideas/draw_logo_line.c delete mode 100644 lib/glut-3.7.6/progs/demos/ideas/draw_logo_shadow.c delete mode 100644 lib/glut-3.7.6/progs/demos/ideas/e.c delete mode 100644 lib/glut-3.7.6/progs/demos/ideas/f.c delete mode 100644 lib/glut-3.7.6/progs/demos/ideas/h.c delete mode 100644 lib/glut-3.7.6/progs/demos/ideas/i.c delete mode 100644 lib/glut-3.7.6/progs/demos/ideas/ideas.c delete mode 100644 lib/glut-3.7.6/progs/demos/ideas/ideas.dsp delete mode 100644 lib/glut-3.7.6/progs/demos/ideas/m.c delete mode 100644 lib/glut-3.7.6/progs/demos/ideas/n.c delete mode 100644 lib/glut-3.7.6/progs/demos/ideas/o.c delete mode 100644 lib/glut-3.7.6/progs/demos/ideas/objects.h delete mode 100644 lib/glut-3.7.6/progs/demos/ideas/p.c delete mode 100644 lib/glut-3.7.6/progs/demos/ideas/r.c delete mode 100644 lib/glut-3.7.6/progs/demos/ideas/s.c delete mode 100644 lib/glut-3.7.6/progs/demos/ideas/t.c delete mode 100644 lib/glut-3.7.6/progs/demos/ideas/w.c delete mode 100644 lib/glut-3.7.6/progs/demos/lorenz/Imakefile delete mode 100644 lib/glut-3.7.6/progs/demos/lorenz/lorenz.c delete mode 100644 lib/glut-3.7.6/progs/demos/lorenz/lorenz.dsp delete mode 100644 lib/glut-3.7.6/progs/demos/newave/Imakefile delete mode 100644 lib/glut-3.7.6/progs/demos/newave/newave.c delete mode 100644 lib/glut-3.7.6/progs/demos/newave/newave.dsp delete mode 100644 lib/glut-3.7.6/progs/demos/newave/spheremap.rgb delete mode 100644 lib/glut-3.7.6/progs/demos/newave/texmap.rgb delete mode 100644 lib/glut-3.7.6/progs/demos/newave/texture.c delete mode 100644 lib/glut-3.7.6/progs/demos/newave/texture.h delete mode 100644 lib/glut-3.7.6/progs/demos/opengl_logo/Imakefile delete mode 100644 lib/glut-3.7.6/progs/demos/opengl_logo/def_logo.c delete mode 100644 lib/glut-3.7.6/progs/demos/opengl_logo/opengl_logo.c delete mode 100644 lib/glut-3.7.6/progs/demos/opengl_logo/opengl_logo.dsp delete mode 100644 lib/glut-3.7.6/progs/demos/particle/Imakefile delete mode 100644 lib/glut-3.7.6/progs/demos/particle/particle.c delete mode 100644 lib/glut-3.7.6/progs/demos/particle/particle.dsp delete mode 100644 lib/glut-3.7.6/progs/demos/rollercoaster/Imakefile delete mode 100644 lib/glut-3.7.6/progs/demos/rollercoaster/defrc.c delete mode 100644 lib/glut-3.7.6/progs/demos/rollercoaster/matrix.c delete mode 100644 lib/glut-3.7.6/progs/demos/rollercoaster/matrix.h delete mode 100644 lib/glut-3.7.6/progs/demos/rollercoaster/rc.c delete mode 100644 lib/glut-3.7.6/progs/demos/rollercoaster/rc.def delete mode 100644 lib/glut-3.7.6/progs/demos/rollercoaster/rollercoaster.dsp delete mode 100644 lib/glut-3.7.6/progs/demos/skyfly/Imakefile delete mode 100644 lib/glut-3.7.6/progs/demos/skyfly/clouds.bw delete mode 100644 lib/glut-3.7.6/progs/demos/skyfly/database.c delete mode 100644 lib/glut-3.7.6/progs/demos/skyfly/fly.c delete mode 100644 lib/glut-3.7.6/progs/demos/skyfly/gm_main.c delete mode 100644 lib/glut-3.7.6/progs/demos/skyfly/image.c delete mode 100644 lib/glut-3.7.6/progs/demos/skyfly/perfdraw.c delete mode 100644 lib/glut-3.7.6/progs/demos/skyfly/random.c delete mode 100644 lib/glut-3.7.6/progs/demos/skyfly/skyfly.c delete mode 100644 lib/glut-3.7.6/progs/demos/skyfly/skyfly.dsp delete mode 100644 lib/glut-3.7.6/progs/demos/skyfly/skyfly.h delete mode 100644 lib/glut-3.7.6/progs/demos/skyfly/terrain.bw delete mode 100644 lib/glut-3.7.6/progs/demos/smooth/Imakefile delete mode 100644 lib/glut-3.7.6/progs/demos/smooth/data/dolphins.mtl delete mode 100644 lib/glut-3.7.6/progs/demos/smooth/data/dolphins.obj delete mode 100644 lib/glut-3.7.6/progs/demos/smooth/dirent32.h delete mode 100644 lib/glut-3.7.6/progs/demos/smooth/glm.c delete mode 100644 lib/glut-3.7.6/progs/demos/smooth/glm.h delete mode 100644 lib/glut-3.7.6/progs/demos/smooth/gltb.c delete mode 100644 lib/glut-3.7.6/progs/demos/smooth/gltb.h delete mode 100644 lib/glut-3.7.6/progs/demos/smooth/gltx.c delete mode 100644 lib/glut-3.7.6/progs/demos/smooth/gltx.h delete mode 100644 lib/glut-3.7.6/progs/demos/smooth/smooth.c delete mode 100644 lib/glut-3.7.6/progs/demos/smooth/smooth.dsp delete mode 100644 lib/glut-3.7.6/progs/demos/smooth/trackball.c delete mode 100644 lib/glut-3.7.6/progs/demos/smooth/trackball.h delete mode 100644 lib/glut-3.7.6/progs/demos/sunlight/Imakefile delete mode 100644 lib/glut-3.7.6/progs/demos/sunlight/globe.raw delete mode 100644 lib/glut-3.7.6/progs/demos/sunlight/sunlight.c delete mode 100644 lib/glut-3.7.6/progs/demos/sunlight/sunlight.dsp delete mode 100644 lib/glut-3.7.6/progs/demos/sysview/README delete mode 100644 lib/glut-3.7.6/progs/demos/sysview/sysview.c delete mode 100644 lib/glut-3.7.6/progs/demos/sysview/sysview.dsp delete mode 100644 lib/glut-3.7.6/progs/demos/underwater/Imakefile delete mode 100644 lib/glut-3.7.6/progs/demos/underwater/caust00.bw delete mode 100644 lib/glut-3.7.6/progs/demos/underwater/caust01.bw delete mode 100644 lib/glut-3.7.6/progs/demos/underwater/caust02.bw delete mode 100644 lib/glut-3.7.6/progs/demos/underwater/caust03.bw delete mode 100644 lib/glut-3.7.6/progs/demos/underwater/caust04.bw delete mode 100644 lib/glut-3.7.6/progs/demos/underwater/caust05.bw delete mode 100644 lib/glut-3.7.6/progs/demos/underwater/caust06.bw delete mode 100644 lib/glut-3.7.6/progs/demos/underwater/caust07.bw delete mode 100644 lib/glut-3.7.6/progs/demos/underwater/caust08.bw delete mode 100644 lib/glut-3.7.6/progs/demos/underwater/caust09.bw delete mode 100644 lib/glut-3.7.6/progs/demos/underwater/caust10.bw delete mode 100644 lib/glut-3.7.6/progs/demos/underwater/caust11.bw delete mode 100644 lib/glut-3.7.6/progs/demos/underwater/caust12.bw delete mode 100644 lib/glut-3.7.6/progs/demos/underwater/caust13.bw delete mode 100644 lib/glut-3.7.6/progs/demos/underwater/caust14.bw delete mode 100644 lib/glut-3.7.6/progs/demos/underwater/caust15.bw delete mode 100644 lib/glut-3.7.6/progs/demos/underwater/caust16.bw delete mode 100644 lib/glut-3.7.6/progs/demos/underwater/caust17.bw delete mode 100644 lib/glut-3.7.6/progs/demos/underwater/caust18.bw delete mode 100644 lib/glut-3.7.6/progs/demos/underwater/caust19.bw delete mode 100644 lib/glut-3.7.6/progs/demos/underwater/caust20.bw delete mode 100644 lib/glut-3.7.6/progs/demos/underwater/caust21.bw delete mode 100644 lib/glut-3.7.6/progs/demos/underwater/caust22.bw delete mode 100644 lib/glut-3.7.6/progs/demos/underwater/caust23.bw delete mode 100644 lib/glut-3.7.6/progs/demos/underwater/caust24.bw delete mode 100644 lib/glut-3.7.6/progs/demos/underwater/caust25.bw delete mode 100644 lib/glut-3.7.6/progs/demos/underwater/caust26.bw delete mode 100644 lib/glut-3.7.6/progs/demos/underwater/caust27.bw delete mode 100644 lib/glut-3.7.6/progs/demos/underwater/caust28.bw delete mode 100644 lib/glut-3.7.6/progs/demos/underwater/caust29.bw delete mode 100644 lib/glut-3.7.6/progs/demos/underwater/caust30.bw delete mode 100644 lib/glut-3.7.6/progs/demos/underwater/caust31.bw delete mode 100644 lib/glut-3.7.6/progs/demos/underwater/dino.c delete mode 100644 lib/glut-3.7.6/progs/demos/underwater/dino.h delete mode 100644 lib/glut-3.7.6/progs/demos/underwater/floor.rgb delete mode 100644 lib/glut-3.7.6/progs/demos/underwater/texload.c delete mode 100644 lib/glut-3.7.6/progs/demos/underwater/texload.h delete mode 100644 lib/glut-3.7.6/progs/demos/underwater/underwater.c delete mode 100644 lib/glut-3.7.6/progs/demos/underwater/underwater.dsp delete mode 100644 lib/glut-3.7.6/progs/demos/walker/Imakefile delete mode 100644 lib/glut-3.7.6/progs/demos/walker/Impossible.cset delete mode 100644 lib/glut-3.7.6/progs/demos/walker/MrFlex.cset delete mode 100644 lib/glut-3.7.6/progs/demos/walker/Ouch.cset delete mode 100644 lib/glut-3.7.6/progs/demos/walker/README delete mode 100644 lib/glut-3.7.6/progs/demos/walker/bound.cset delete mode 100644 lib/glut-3.7.6/progs/demos/walker/dunk.cset delete mode 100644 lib/glut-3.7.6/progs/demos/walker/kick.cset delete mode 100644 lib/glut-3.7.6/progs/demos/walker/models.c delete mode 100644 lib/glut-3.7.6/progs/demos/walker/moonwalk.cset delete mode 100644 lib/glut-3.7.6/progs/demos/walker/reverse_dunk.cset delete mode 100644 lib/glut-3.7.6/progs/demos/walker/running.cset delete mode 100644 lib/glut-3.7.6/progs/demos/walker/walk_backwards.cset delete mode 100644 lib/glut-3.7.6/progs/demos/walker/walker.c delete mode 100644 lib/glut-3.7.6/progs/demos/walker/walker.dsp delete mode 100644 lib/glut-3.7.6/progs/demos/walker/walker.h delete mode 100644 lib/glut-3.7.6/progs/demos/walker/walking.cset delete mode 100644 lib/glut-3.7.6/progs/demos/walker/walkviewer.c delete mode 100644 lib/glut-3.7.6/progs/demos/walker/walkviewer.h delete mode 100644 lib/glut-3.7.6/progs/demos/walker/win32_dirent.h delete mode 100644 lib/glut-3.7.6/progs/demos/yacme/Editor.c delete mode 100644 lib/glut-3.7.6/progs/demos/yacme/Imakefile delete mode 100644 lib/glut-3.7.6/progs/demos/yacme/RGBA.h delete mode 100644 lib/glut-3.7.6/progs/demos/yacme/invertmat.c delete mode 100644 lib/glut-3.7.6/progs/demos/yacme/mallocbis.h delete mode 100644 lib/glut-3.7.6/progs/demos/yacme/yacme.dsp delete mode 100644 lib/glut-3.7.6/progs/examples.dsw delete mode 100644 lib/glut-3.7.6/progs/examples/Imakefile delete mode 100644 lib/glut-3.7.6/progs/examples/_all.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/abgr.c delete mode 100644 lib/glut-3.7.6/progs/examples/abgr.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/bitfont.c delete mode 100644 lib/glut-3.7.6/progs/examples/bitfont.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/blender.c delete mode 100644 lib/glut-3.7.6/progs/examples/blender.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/circlefit.c delete mode 100644 lib/glut-3.7.6/progs/examples/circlefit.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/cube.c delete mode 100644 lib/glut-3.7.6/progs/examples/cube.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/dials.c delete mode 100644 lib/glut-3.7.6/progs/examples/dials.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/dials2.c delete mode 100644 lib/glut-3.7.6/progs/examples/dials2.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/dinoball.c delete mode 100644 lib/glut-3.7.6/progs/examples/dinoball.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/dinodraw.c delete mode 100644 lib/glut-3.7.6/progs/examples/dinodraw.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/dinoshade.c delete mode 100644 lib/glut-3.7.6/progs/examples/dinoshade.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/dinospin.c delete mode 100644 lib/glut-3.7.6/progs/examples/dinospin.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/editgrid.c delete mode 100644 lib/glut-3.7.6/progs/examples/editgrid.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/evaltest.c delete mode 100644 lib/glut-3.7.6/progs/examples/evaltest.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/fogtst.c delete mode 100644 lib/glut-3.7.6/progs/examples/fogtst.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/fontdemo.c delete mode 100644 lib/glut-3.7.6/progs/examples/fontdemo.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/glpuzzle.c delete mode 100644 lib/glut-3.7.6/progs/examples/glpuzzle.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/glutdino.c delete mode 100644 lib/glut-3.7.6/progs/examples/glutdino.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/glutplane.c delete mode 100644 lib/glut-3.7.6/progs/examples/glutplane.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/gouraudtriangle.ps delete mode 100644 lib/glut-3.7.6/progs/examples/halomagic.c delete mode 100644 lib/glut-3.7.6/progs/examples/halomagic.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/highlight.c delete mode 100644 lib/glut-3.7.6/progs/examples/highlight.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/lightlab.c delete mode 100644 lib/glut-3.7.6/progs/examples/lightlab.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/logo.c delete mode 100644 lib/glut-3.7.6/progs/examples/luminance16.c delete mode 100644 lib/glut-3.7.6/progs/examples/luminance16.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/mjkimage.c delete mode 100644 lib/glut-3.7.6/progs/examples/mjksift.c delete mode 100644 lib/glut-3.7.6/progs/examples/mjksift.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/mjkwarp.c delete mode 100644 lib/glut-3.7.6/progs/examples/mjkwarp.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/molehill.c delete mode 100644 lib/glut-3.7.6/progs/examples/molehill.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/movelight.c delete mode 100644 lib/glut-3.7.6/progs/examples/movelight.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/oclip.c delete mode 100644 lib/glut-3.7.6/progs/examples/oclip.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/ohidden.c delete mode 100644 lib/glut-3.7.6/progs/examples/ohidden.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/olight.c delete mode 100644 lib/glut-3.7.6/progs/examples/olight.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/olympic.c delete mode 100644 lib/glut-3.7.6/progs/examples/olympic.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/origami.c delete mode 100644 lib/glut-3.7.6/progs/examples/origami.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/oversphere.c delete mode 100644 lib/glut-3.7.6/progs/examples/oversphere.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/reflectdino.c delete mode 100644 lib/glut-3.7.6/progs/examples/reflectdino.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/rendereps.c delete mode 100644 lib/glut-3.7.6/progs/examples/rendereps.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/resolution.c delete mode 100644 lib/glut-3.7.6/progs/examples/resolution.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/sb2db.c delete mode 100644 lib/glut-3.7.6/progs/examples/sb2db.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/scene.c delete mode 100644 lib/glut-3.7.6/progs/examples/scene.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/screendoor.c delete mode 100644 lib/glut-3.7.6/progs/examples/screendoor.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/scube.c delete mode 100644 lib/glut-3.7.6/progs/examples/scube.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/simple.c delete mode 100644 lib/glut-3.7.6/progs/examples/simple.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/sphere.c delete mode 100644 lib/glut-3.7.6/progs/examples/sphere.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/sphere2.c delete mode 100644 lib/glut-3.7.6/progs/examples/sphere2.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/splatlogo.c delete mode 100644 lib/glut-3.7.6/progs/examples/splatlogo.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/spots.c delete mode 100644 lib/glut-3.7.6/progs/examples/spots.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/stars.c delete mode 100644 lib/glut-3.7.6/progs/examples/stars.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/stenciltst.c delete mode 100644 lib/glut-3.7.6/progs/examples/stenciltst.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/stereo.c delete mode 100644 lib/glut-3.7.6/progs/examples/stereo.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/stroke.c delete mode 100644 lib/glut-3.7.6/progs/examples/stroke.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/subwin.c delete mode 100644 lib/glut-3.7.6/progs/examples/subwin.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/surfgrid.c delete mode 100644 lib/glut-3.7.6/progs/examples/surfgrid.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/texenv.c delete mode 100644 lib/glut-3.7.6/progs/examples/texenv.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/trackball.c delete mode 100644 lib/glut-3.7.6/progs/examples/trackball.h delete mode 100644 lib/glut-3.7.6/progs/examples/trippy.c delete mode 100644 lib/glut-3.7.6/progs/examples/trippy.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/triselect.c delete mode 100644 lib/glut-3.7.6/progs/examples/triselect.dsp delete mode 100644 lib/glut-3.7.6/progs/examples/zoomdino.c delete mode 100644 lib/glut-3.7.6/progs/examples/zoomdino.dsp delete mode 100644 lib/glut-3.7.6/progs/fortran/example.f delete mode 100644 lib/glut-3.7.6/progs/fortran/fbitfont.f delete mode 100644 lib/glut-3.7.6/progs/fortran/fscene.f delete mode 100644 lib/glut-3.7.6/progs/fortran/sphere.f delete mode 100644 lib/glut-3.7.6/progs/gameglut.dsw delete mode 100644 lib/glut-3.7.6/progs/gameglut/Imakefile delete mode 100644 lib/glut-3.7.6/progs/gameglut/asteroids.c delete mode 100644 lib/glut-3.7.6/progs/gameglut/asteroids.dsp delete mode 100644 lib/glut-3.7.6/progs/gameglut/asteroids.dsw delete mode 100644 lib/glut-3.7.6/progs/glc/Imakefile delete mode 100644 lib/glut-3.7.6/progs/glc/README delete mode 100644 lib/glut-3.7.6/progs/glc/glcdemo.c delete mode 100644 lib/glut-3.7.6/progs/gle.dsw delete mode 100644 lib/glut-3.7.6/progs/gle/Imakefile delete mode 100644 lib/glut-3.7.6/progs/gle/README delete mode 100644 lib/glut-3.7.6/progs/gle/_all.dsp delete mode 100644 lib/glut-3.7.6/progs/gle/beam.c delete mode 100644 lib/glut-3.7.6/progs/gle/beam.dsp delete mode 100644 lib/glut-3.7.6/progs/gle/candlestick.c delete mode 100644 lib/glut-3.7.6/progs/gle/candlestick.dsp delete mode 100644 lib/glut-3.7.6/progs/gle/cone.c delete mode 100644 lib/glut-3.7.6/progs/gle/cone.dsp delete mode 100644 lib/glut-3.7.6/progs/gle/cylinder.c delete mode 100644 lib/glut-3.7.6/progs/gle/cylinder.dsp delete mode 100644 lib/glut-3.7.6/progs/gle/helix.c delete mode 100644 lib/glut-3.7.6/progs/gle/helix.dsp delete mode 100644 lib/glut-3.7.6/progs/gle/helix2.c delete mode 100644 lib/glut-3.7.6/progs/gle/helix2.dsp delete mode 100644 lib/glut-3.7.6/progs/gle/helix3.c delete mode 100644 lib/glut-3.7.6/progs/gle/helix3.dsp delete mode 100644 lib/glut-3.7.6/progs/gle/helix4.c delete mode 100644 lib/glut-3.7.6/progs/gle/helix4.dsp delete mode 100644 lib/glut-3.7.6/progs/gle/helixtex.c delete mode 100644 lib/glut-3.7.6/progs/gle/helixtex.dsp delete mode 100644 lib/glut-3.7.6/progs/gle/horn.c delete mode 100644 lib/glut-3.7.6/progs/gle/horn.dsp delete mode 100644 lib/glut-3.7.6/progs/gle/joinoffset.c delete mode 100644 lib/glut-3.7.6/progs/gle/joinoffset.dsp delete mode 100644 lib/glut-3.7.6/progs/gle/mainjoin.c delete mode 100644 lib/glut-3.7.6/progs/gle/mainsimple.c delete mode 100644 lib/glut-3.7.6/progs/gle/maintex.c delete mode 100644 lib/glut-3.7.6/progs/gle/martini.c delete mode 100644 lib/glut-3.7.6/progs/gle/martini.dsp delete mode 100644 lib/glut-3.7.6/progs/gle/screw.c delete mode 100644 lib/glut-3.7.6/progs/gle/screw.dsp delete mode 100644 lib/glut-3.7.6/progs/gle/taper.c delete mode 100644 lib/glut-3.7.6/progs/gle/taper.dsp delete mode 100644 lib/glut-3.7.6/progs/gle/texas.c delete mode 100644 lib/glut-3.7.6/progs/gle/texas.dsp delete mode 100644 lib/glut-3.7.6/progs/gle/texture.c delete mode 100644 lib/glut-3.7.6/progs/gle/texture.h delete mode 100644 lib/glut-3.7.6/progs/gle/trackball.c delete mode 100644 lib/glut-3.7.6/progs/gle/trackball.h delete mode 100644 lib/glut-3.7.6/progs/gle/transport.c delete mode 100644 lib/glut-3.7.6/progs/gle/transport.dsp delete mode 100644 lib/glut-3.7.6/progs/gle/twistoid.c delete mode 100644 lib/glut-3.7.6/progs/gle/twistoid.dsp delete mode 100644 lib/glut-3.7.6/progs/gle/twoid.c delete mode 100644 lib/glut-3.7.6/progs/gle/twoid.dsp delete mode 100644 lib/glut-3.7.6/progs/inventor/Imakefile delete mode 100644 lib/glut-3.7.6/progs/inventor/duck.iv delete mode 100644 lib/glut-3.7.6/progs/inventor/globe.c++ delete mode 100644 lib/glut-3.7.6/progs/inventor/globe.rgb delete mode 100644 lib/glut-3.7.6/progs/inventor/glutduck.c++ delete mode 100644 lib/glut-3.7.6/progs/mesademos.dsw delete mode 100644 lib/glut-3.7.6/progs/mesademos/Imakefile delete mode 100644 lib/glut-3.7.6/progs/mesademos/README delete mode 100644 lib/glut-3.7.6/progs/mesademos/_all.dsp delete mode 100644 lib/glut-3.7.6/progs/mesademos/bounce.c delete mode 100644 lib/glut-3.7.6/progs/mesademos/bounce.dsp delete mode 100644 lib/glut-3.7.6/progs/mesademos/brick.rgb delete mode 100644 lib/glut-3.7.6/progs/mesademos/gamma.c delete mode 100644 lib/glut-3.7.6/progs/mesademos/gamma.dsp delete mode 100644 lib/glut-3.7.6/progs/mesademos/gears.c delete mode 100644 lib/glut-3.7.6/progs/mesademos/gears.dsp delete mode 100644 lib/glut-3.7.6/progs/mesademos/image.c delete mode 100644 lib/glut-3.7.6/progs/mesademos/image.h delete mode 100644 lib/glut-3.7.6/progs/mesademos/isosurf.c delete mode 100644 lib/glut-3.7.6/progs/mesademos/isosurf.dat delete mode 100644 lib/glut-3.7.6/progs/mesademos/isosurf.dsp delete mode 100644 lib/glut-3.7.6/progs/mesademos/offset.c delete mode 100644 lib/glut-3.7.6/progs/mesademos/offset.dsp delete mode 100644 lib/glut-3.7.6/progs/mesademos/reflect.c delete mode 100644 lib/glut-3.7.6/progs/mesademos/reflect.dsp delete mode 100644 lib/glut-3.7.6/progs/mesademos/spin.c delete mode 100644 lib/glut-3.7.6/progs/mesademos/spin.dsp delete mode 100644 lib/glut-3.7.6/progs/mesademos/tess_demo.c delete mode 100644 lib/glut-3.7.6/progs/mesademos/tess_demo.dsp delete mode 100644 lib/glut-3.7.6/progs/mesademos/texobj.c delete mode 100644 lib/glut-3.7.6/progs/mesademos/texobj.dsp delete mode 100644 lib/glut-3.7.6/progs/mesademos/tr.c delete mode 100644 lib/glut-3.7.6/progs/mesademos/tr.h delete mode 100644 lib/glut-3.7.6/progs/mesademos/trdemo.c delete mode 100644 lib/glut-3.7.6/progs/mesademos/trdemo.dsp delete mode 100644 lib/glut-3.7.6/progs/mesademos/winpos.c delete mode 100644 lib/glut-3.7.6/progs/mesademos/winpos.dsp delete mode 100644 lib/glut-3.7.6/progs/mui.dsw delete mode 100644 lib/glut-3.7.6/progs/mui/Imakefile delete mode 100644 lib/glut-3.7.6/progs/mui/_all.dsp delete mode 100644 lib/glut-3.7.6/progs/mui/calc/Imakefile delete mode 100644 lib/glut-3.7.6/progs/mui/calc/calc.c delete mode 100644 lib/glut-3.7.6/progs/mui/calc/calc.dsp delete mode 100644 lib/glut-3.7.6/progs/mui/calc/calc.h delete mode 100644 lib/glut-3.7.6/progs/perf_harness.dsw delete mode 100644 lib/glut-3.7.6/progs/perf_harness/Imakefile delete mode 100644 lib/glut-3.7.6/progs/perf_harness/README delete mode 100644 lib/glut-3.7.6/progs/perf_harness/gl_harness.c delete mode 100644 lib/glut-3.7.6/progs/perf_harness/perf_torus.dsp delete mode 100644 lib/glut-3.7.6/progs/perf_harness/torus.c delete mode 100644 lib/glut-3.7.6/progs/redbook.dsw delete mode 100644 lib/glut-3.7.6/progs/redbook/Imakefile delete mode 100644 lib/glut-3.7.6/progs/redbook/_all.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/aaindex.c delete mode 100644 lib/glut-3.7.6/progs/redbook/aaindex.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/aapoly.c delete mode 100644 lib/glut-3.7.6/progs/redbook/aapoly.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/aargb.c delete mode 100644 lib/glut-3.7.6/progs/redbook/aargb.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/accanti.c delete mode 100644 lib/glut-3.7.6/progs/redbook/accanti.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/accpersp.c delete mode 100644 lib/glut-3.7.6/progs/redbook/accpersp.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/alpha.c delete mode 100644 lib/glut-3.7.6/progs/redbook/alpha.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/alpha3D.c delete mode 100644 lib/glut-3.7.6/progs/redbook/alpha3D.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/anti.c delete mode 100644 lib/glut-3.7.6/progs/redbook/anti.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/aux2glut.sed delete mode 100644 lib/glut-3.7.6/progs/redbook/bezcurve.c delete mode 100644 lib/glut-3.7.6/progs/redbook/bezcurve.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/bezmesh.c delete mode 100644 lib/glut-3.7.6/progs/redbook/bezmesh.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/checker.c delete mode 100644 lib/glut-3.7.6/progs/redbook/checker.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/clip.c delete mode 100644 lib/glut-3.7.6/progs/redbook/clip.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/colormat.c delete mode 100644 lib/glut-3.7.6/progs/redbook/colormat.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/cube.c delete mode 100644 lib/glut-3.7.6/progs/redbook/cube.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/depthcue.c delete mode 100644 lib/glut-3.7.6/progs/redbook/depthcue.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/dof.c delete mode 100644 lib/glut-3.7.6/progs/redbook/dof.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/double.c delete mode 100644 lib/glut-3.7.6/progs/redbook/double.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/drawf.c delete mode 100644 lib/glut-3.7.6/progs/redbook/drawf.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/feedback.c delete mode 100644 lib/glut-3.7.6/progs/redbook/feedback.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/fog.c delete mode 100644 lib/glut-3.7.6/progs/redbook/fog.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/fogindex.c delete mode 100644 lib/glut-3.7.6/progs/redbook/fogindex.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/font.c delete mode 100644 lib/glut-3.7.6/progs/redbook/font.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/hello.c delete mode 100644 lib/glut-3.7.6/progs/redbook/hello.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/image.c delete mode 100644 lib/glut-3.7.6/progs/redbook/image.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/jitter.h delete mode 100644 lib/glut-3.7.6/progs/redbook/light.c delete mode 100644 lib/glut-3.7.6/progs/redbook/light.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/lines.c delete mode 100644 lib/glut-3.7.6/progs/redbook/lines.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/list.c delete mode 100644 lib/glut-3.7.6/progs/redbook/list.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/material.c delete mode 100644 lib/glut-3.7.6/progs/redbook/material.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/mipmap.c delete mode 100644 lib/glut-3.7.6/progs/redbook/mipmap.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/model.c delete mode 100644 lib/glut-3.7.6/progs/redbook/model.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/movelight.c delete mode 100644 lib/glut-3.7.6/progs/redbook/movelight.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/nurbs.c delete mode 100644 lib/glut-3.7.6/progs/redbook/nurbs.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/pickdepth.c delete mode 100644 lib/glut-3.7.6/progs/redbook/pickdepth.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/picksquare.c delete mode 100644 lib/glut-3.7.6/progs/redbook/picksquare.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/plane.c delete mode 100644 lib/glut-3.7.6/progs/redbook/plane.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/planet.c delete mode 100644 lib/glut-3.7.6/progs/redbook/planet.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/polyoff.c delete mode 100644 lib/glut-3.7.6/progs/redbook/polyoff.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/polys.c delete mode 100644 lib/glut-3.7.6/progs/redbook/polys.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/quadric.c delete mode 100644 lib/glut-3.7.6/progs/redbook/quadric.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/robot.c delete mode 100644 lib/glut-3.7.6/progs/redbook/robot.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/sccolorlight.c delete mode 100644 lib/glut-3.7.6/progs/redbook/sccolorlight.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/scene.c delete mode 100644 lib/glut-3.7.6/progs/redbook/scene.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/scenebamb.c delete mode 100644 lib/glut-3.7.6/progs/redbook/scenebamb.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/sceneflat.c delete mode 100644 lib/glut-3.7.6/progs/redbook/sceneflat.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/select.c delete mode 100644 lib/glut-3.7.6/progs/redbook/select.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/smooth.c delete mode 100644 lib/glut-3.7.6/progs/redbook/smooth.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/stencil.c delete mode 100644 lib/glut-3.7.6/progs/redbook/stencil.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/stroke.c delete mode 100644 lib/glut-3.7.6/progs/redbook/stroke.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/surface.c delete mode 100644 lib/glut-3.7.6/progs/redbook/surface.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/teaambient.c delete mode 100644 lib/glut-3.7.6/progs/redbook/teaambient.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/teapots.c delete mode 100644 lib/glut-3.7.6/progs/redbook/teapots.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/tess.c delete mode 100644 lib/glut-3.7.6/progs/redbook/tess.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/tesswind.c delete mode 100644 lib/glut-3.7.6/progs/redbook/tesswind.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/texbind.c delete mode 100644 lib/glut-3.7.6/progs/redbook/texbind.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/texgen.c delete mode 100644 lib/glut-3.7.6/progs/redbook/texgen.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/texprox.c delete mode 100644 lib/glut-3.7.6/progs/redbook/texprox.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/texsub.c delete mode 100644 lib/glut-3.7.6/progs/redbook/texsub.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/texturesurf.c delete mode 100644 lib/glut-3.7.6/progs/redbook/texturesurf.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/torus.c delete mode 100644 lib/glut-3.7.6/progs/redbook/torus.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/trim.c delete mode 100644 lib/glut-3.7.6/progs/redbook/trim.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/unproject.c delete mode 100644 lib/glut-3.7.6/progs/redbook/unproject.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/varray.c delete mode 100644 lib/glut-3.7.6/progs/redbook/varray.dsp delete mode 100644 lib/glut-3.7.6/progs/redbook/wrap.c delete mode 100644 lib/glut-3.7.6/progs/redbook/wrap.dsp delete mode 100644 lib/glut-3.7.6/progs/sgi-stereo/README delete mode 100644 lib/glut-3.7.6/progs/sgi-stereo/fullscreen_stereo.c delete mode 100644 lib/glut-3.7.6/progs/sgi-stereo/fullscreen_stereo.h delete mode 100644 lib/glut-3.7.6/progs/sgi-stereo/stereo-plane.c delete mode 100644 lib/glut-3.7.6/progs/spheremap.dsw delete mode 100644 lib/glut-3.7.6/progs/spheremap/Imakefile delete mode 100644 lib/glut-3.7.6/progs/spheremap/README delete mode 100644 lib/glut-3.7.6/progs/spheremap/_all.dsp delete mode 100644 lib/glut-3.7.6/progs/spheremap/glsmap/Imakefile delete mode 100644 lib/glut-3.7.6/progs/spheremap/glsmap/fakeraytrace.c delete mode 100644 lib/glut-3.7.6/progs/spheremap/glsmap/fakeraytrace.dsp delete mode 100644 lib/glut-3.7.6/progs/spheremap/glsmap/rtsmap.c delete mode 100644 lib/glut-3.7.6/progs/spheremap/glsmap/rtsmap.dsp delete mode 100644 lib/glut-3.7.6/progs/spheremap/hacks/Imakefile delete mode 100644 lib/glut-3.7.6/progs/spheremap/hacks/cview2smap.c delete mode 100644 lib/glut-3.7.6/progs/spheremap/hacks/cview2smap.dsp delete mode 100644 lib/glut-3.7.6/progs/spheremap/hacks/drawmesh.c delete mode 100644 lib/glut-3.7.6/progs/spheremap/hacks/makemesh.c delete mode 100644 lib/glut-3.7.6/progs/spheremap/hacks/sixviews.c delete mode 100644 lib/glut-3.7.6/progs/spheremap/hacks/sixviews.dsp delete mode 100644 lib/glut-3.7.6/progs/spheremap/hacks/smapmesh.c delete mode 100644 lib/glut-3.7.6/progs/spheremap/hacks/smapmesh.dsp delete mode 100644 lib/glut-3.7.6/progs/spheremap/hacks/smapmesh.h delete mode 100644 lib/glut-3.7.6/progs/spheremap/hacks/st2rvec.c delete mode 100644 lib/glut-3.7.6/progs/spheremap/hacks/st2rvec.dsp delete mode 100644 lib/glut-3.7.6/progs/texfont.dsw delete mode 100644 lib/glut-3.7.6/progs/texfont/Imakefile delete mode 100644 lib/glut-3.7.6/progs/texfont/README delete mode 100644 lib/glut-3.7.6/progs/texfont/TexFont.h delete mode 100644 lib/glut-3.7.6/progs/texfont/_all.dsp delete mode 100644 lib/glut-3.7.6/progs/texfont/abgr.dsp delete mode 100644 lib/glut-3.7.6/progs/texfont/curlfont.txf delete mode 100644 lib/glut-3.7.6/progs/texfont/default.txf delete mode 100644 lib/glut-3.7.6/progs/texfont/djb.txf delete mode 100644 lib/glut-3.7.6/progs/texfont/gentexfont.c delete mode 100644 lib/glut-3.7.6/progs/texfont/gentexfont.dsp delete mode 100644 lib/glut-3.7.6/progs/texfont/haeberli.txf delete mode 100644 lib/glut-3.7.6/progs/texfont/rockfont.txf delete mode 100644 lib/glut-3.7.6/progs/texfont/showtxf.c delete mode 100644 lib/glut-3.7.6/progs/texfont/showtxf.dsp delete mode 100644 lib/glut-3.7.6/progs/texfont/simpletxf.c delete mode 100644 lib/glut-3.7.6/progs/texfont/simpletxf.dsp delete mode 100644 lib/glut-3.7.6/progs/texfont/sorority.txf delete mode 100644 lib/glut-3.7.6/progs/texfont/texfont.c delete mode 100644 lib/glut-3.7.6/progs/texfont/txfdemo.c delete mode 100644 lib/glut-3.7.6/progs/texfont/txfdemo.dsp delete mode 100644 lib/glut-3.7.6/progs/tiff/Imakefile delete mode 100644 lib/glut-3.7.6/progs/tiff/README delete mode 100644 lib/glut-3.7.6/progs/tiff/depthdof.c delete mode 100644 lib/glut-3.7.6/progs/tiff/face.tif delete mode 100644 lib/glut-3.7.6/progs/tiff/scalebias.c delete mode 100644 lib/glut-3.7.6/progs/tiff/showtiff.c delete mode 100644 lib/glut-3.7.6/progs/tiff/spiral.tif delete mode 100644 lib/glut-3.7.6/progs/tiff/textiff.c delete mode 100644 lib/glut-3.7.6/progs/tiff/tiffsift.c delete mode 100644 lib/glut-3.7.6/progs/tiff/writetiff.c delete mode 100644 lib/glut-3.7.6/test/Imakefile delete mode 100644 lib/glut-3.7.6/test/glut/Imakefile delete mode 100644 lib/glut-3.7.6/test/glut/_all.dsp delete mode 100644 lib/glut-3.7.6/test/glut/atexit_test.c delete mode 100644 lib/glut-3.7.6/test/glut/bigtest.c delete mode 100644 lib/glut-3.7.6/test/glut/bigtest.dsp delete mode 100644 lib/glut-3.7.6/test/glut/cursor_test.c delete mode 100644 lib/glut-3.7.6/test/glut/cursor_test.dsp delete mode 100644 lib/glut-3.7.6/test/glut/joy_test.c delete mode 100644 lib/glut-3.7.6/test/glut/joy_test.dsp delete mode 100644 lib/glut-3.7.6/test/glut/keyup_test.c delete mode 100644 lib/glut-3.7.6/test/glut/keyup_test.dsp delete mode 100644 lib/glut-3.7.6/test/glut/menu_test.c delete mode 100644 lib/glut-3.7.6/test/glut/menu_test.dsp delete mode 100644 lib/glut-3.7.6/test/glut/over_test.c delete mode 100644 lib/glut-3.7.6/test/glut/over_test.dsp delete mode 100644 lib/glut-3.7.6/test/glut/shape_test.c delete mode 100644 lib/glut-3.7.6/test/glut/shape_test.dsp delete mode 100644 lib/glut-3.7.6/test/glut/test1.c delete mode 100644 lib/glut-3.7.6/test/glut/test1.dsp delete mode 100644 lib/glut-3.7.6/test/glut/test10.c delete mode 100644 lib/glut-3.7.6/test/glut/test10.dsp delete mode 100644 lib/glut-3.7.6/test/glut/test11.c delete mode 100644 lib/glut-3.7.6/test/glut/test11.dsp delete mode 100644 lib/glut-3.7.6/test/glut/test12.c delete mode 100644 lib/glut-3.7.6/test/glut/test12.dsp delete mode 100644 lib/glut-3.7.6/test/glut/test13.c delete mode 100644 lib/glut-3.7.6/test/glut/test13.dsp delete mode 100644 lib/glut-3.7.6/test/glut/test14.c delete mode 100644 lib/glut-3.7.6/test/glut/test14.dsp delete mode 100644 lib/glut-3.7.6/test/glut/test15.c delete mode 100644 lib/glut-3.7.6/test/glut/test15.dsp delete mode 100644 lib/glut-3.7.6/test/glut/test16.c delete mode 100644 lib/glut-3.7.6/test/glut/test16.dsp delete mode 100644 lib/glut-3.7.6/test/glut/test17.c delete mode 100644 lib/glut-3.7.6/test/glut/test17.dsp delete mode 100644 lib/glut-3.7.6/test/glut/test18.c delete mode 100644 lib/glut-3.7.6/test/glut/test18.dsp delete mode 100644 lib/glut-3.7.6/test/glut/test19.c delete mode 100644 lib/glut-3.7.6/test/glut/test19.dsp delete mode 100644 lib/glut-3.7.6/test/glut/test2.c delete mode 100644 lib/glut-3.7.6/test/glut/test2.dsp delete mode 100644 lib/glut-3.7.6/test/glut/test20.c delete mode 100644 lib/glut-3.7.6/test/glut/test20.dsp delete mode 100644 lib/glut-3.7.6/test/glut/test21.c delete mode 100644 lib/glut-3.7.6/test/glut/test21.dsp delete mode 100644 lib/glut-3.7.6/test/glut/test22.c delete mode 100644 lib/glut-3.7.6/test/glut/test22.dsp delete mode 100644 lib/glut-3.7.6/test/glut/test23.c delete mode 100644 lib/glut-3.7.6/test/glut/test23.dsp delete mode 100644 lib/glut-3.7.6/test/glut/test24.c delete mode 100644 lib/glut-3.7.6/test/glut/test24.dsp delete mode 100644 lib/glut-3.7.6/test/glut/test25.c delete mode 100644 lib/glut-3.7.6/test/glut/test25.dsp delete mode 100644 lib/glut-3.7.6/test/glut/test26.c delete mode 100644 lib/glut-3.7.6/test/glut/test26.dsp delete mode 100644 lib/glut-3.7.6/test/glut/test27.c delete mode 100644 lib/glut-3.7.6/test/glut/test27.dsp delete mode 100644 lib/glut-3.7.6/test/glut/test28.c delete mode 100644 lib/glut-3.7.6/test/glut/test28.dsp delete mode 100644 lib/glut-3.7.6/test/glut/test29.c delete mode 100644 lib/glut-3.7.6/test/glut/test3.c delete mode 100644 lib/glut-3.7.6/test/glut/test3.dsp delete mode 100644 lib/glut-3.7.6/test/glut/test4.c delete mode 100644 lib/glut-3.7.6/test/glut/test4.dsp delete mode 100644 lib/glut-3.7.6/test/glut/test5.c delete mode 100644 lib/glut-3.7.6/test/glut/test5.dsp delete mode 100644 lib/glut-3.7.6/test/glut/test6.c delete mode 100644 lib/glut-3.7.6/test/glut/test6.dsp delete mode 100644 lib/glut-3.7.6/test/glut/test7.c delete mode 100644 lib/glut-3.7.6/test/glut/test7.dsp delete mode 100644 lib/glut-3.7.6/test/glut/test8.c delete mode 100644 lib/glut-3.7.6/test/glut/test8.dsp delete mode 100644 lib/glut-3.7.6/test/glut/test9.c delete mode 100644 lib/glut-3.7.6/test/glut/test9.dsp delete mode 100644 lib/glut-3.7.6/test/glut/tests.dsp delete mode 100644 lib/glut-3.7.6/test/glut/timer_test.c delete mode 100644 lib/glut-3.7.6/test/glut/timer_test.dsp delete mode 100644 lib/glut-3.7.6/test/mui/Imakefile delete mode 100644 lib/glut-3.7.6/test/mui/mui_test.c delete mode 100644 lib/glut-3.7.6/test/mui/mui_test.dsp delete mode 100644 lib/glut-3.7.6/test/mui/multi_test.c delete mode 100644 lib/glut-3.7.6/test/mui/multi_test.dsp delete mode 100644 lib/glut-3.7.6/test/test.dsw diff --git a/lib/glut-3.7.6/CHANGES b/lib/glut-3.7.6/CHANGES deleted file mode 100644 index 44111f525..000000000 --- a/lib/glut-3.7.6/CHANGES +++ /dev/null @@ -1,988 +0,0 @@ - -GLUT Change Log -================ - -NOTE: This document is potentially incomplete. - - -GLUT 3.7 -> 3.7.1 ------------------- - - o Added a default icon for glut windows (Win32 only). - - o Added workspace and project files for compiling with - Microsoft Visual Studio (6 or greater). - - o Updated some of the demo programs. - - -GLUT 3.6 -> 3.7 ----------------- - - o Added to the ability to automatically link with - the necessary GLUT and OpenGL libraries. Define GLUT_NO_LIB_PRAGMA - to disable this (you need to disable this when compiling the - library itself). Define GLUT_USE_SGI_OPENGL for auto library - linking with the SGI OpenGL for Windows libraries. Define - GLUT_NO_WARNINGS_DISABLE to avoid warnings that GLUT programs - typically want to suppress. - - o Port of IRIS GL newave "wave physics" demo by Erik Larsen - (cayman@sprintmail.com). Look in progs/demos/newave - - o The glutSolidTeapot and glutWireTeapot do not tesselate as - finely as in previous releases. Expect the teapot to render - much faster as of GLUT 3.7. - - o The lib/*/Imakefile files have been updated to make it easier - to build shared/debug/profiling versions of the various GLUT - libraries. See Question 44 in the "FAQ.glut" files for - more details. - - o Fix progs/advanced/textext example to work on little-endian machines. - - o Fixed a performance bug in progs/advanced/rts.c that eliminates - one full shadow volume rendering pass. If you have the silhouette - shadow volume geometry, you can use GL_INVERT and draw the shadow - volume with a single pass with both front & back faces enabled - instead of two distinct passes for front and back as would be - needed if GL_INCR/GL_DECR were used. Also fixed the near and - far clipping planes for better depth precision with 16-bit - depth bufffers. - - o Improve the efficiency of Win32's wglMakeCurrent calls. It - turns out that Microsoft does not "short circuit" a redundant - wglMakeCurrent (ie, if you make current to the same context - and same DC you are already bound to, it is not a no-up). - Now, GLUT uses wglGetCurrentContext and wglGetCurrentDC to - determine when not to redundantly call wglMakeCurrent. - - This also reduced the calling of GetDC within Win32 GLUT. - - Note that the GLX version still assumes that a redundant - glXMakeCurrent is short circuited. - - o Call glutDestroyWindow (and glutLeaveGameMode) destroys the - window (or game mode window) before returning. Previously, - the X11 implementation didn't do an explicit flush so the - window could still be on the screen after glutDestroyWindow - (or glutLeaveGameMode) returned. The Win32 behavior was - corret in GLUT 3.6. - - o Work around Microsoft's bug where atexit callbacks are not - called if exit is called from within a DLL. I had to add new - routines glutCreateWindowWITHEXIT, glutCreateMenuWITHEXIT, - and glutInitWITHEXIT that pass in the exit routine's function - pointer so GLUT can call this routine and exit with the - atexit callbacks called correctly. - - o Added lib/glsmap library for dynamic real-time sphere mapping. - See the demos in progs/spheremap/glsmap - - Builds for N32, O32, and N64 for IRIX. - - rtsmap has an environment reflected in a sphere, teapot, or - icosahedron (8 passes). Very cool. fakeraytrace goes one - step further and has two reflective objects, then does an - extra recursive pass so that one of the spheres is actually - reflecting the reflection in the other sphere. Wow. - - o Man pages updated. - - Version number in man pages changed to 3.7. - - My email address changed to mjk@nvidia.com - - New man pages: - glutEnterGameMode - glutForceJoystickFunc - glutGameModeGet - glutGameModeString - glutIgnoreKeyRepeat - glutJoystickFunc - glutKeyboardUpFunc - glutSetKeyRepeat - glutSpecialUpFunc - - Updated man pages: - glutDeviceGet - glutGet - glutSolidTeapot - - o Updated the ./linux/* files for GLUT 3.7. - - o The GLUT library should compile with a C++ compiler now. I make - no promises that the entirety of GLUT can compile with a C++ - compiler though. Brian Paul wanted this for Mesa which does - expect to build with a C++ compiler. Christoph M. Hoffmann - brought up this issue. - - o Added proto dynamic sphere mapping programs in - progs/spheremap/hacks to help you understand the steps in - making a dynamic sphere map. - - o Added program demonstrating window space texture coordinate - generation at progs/advanced/texwinalign.c; demonstrates how - texture matrix can be be used to generated texture coordinates - in window space. - - o The -iconic command line option works for Win32 GLUT programs - now. The new test28 actually tests the -iconic command line option. - - o Added the glutGameModeString, glutEnterGameMode, glutLeaveGameMode, - and glutGameModeGet calls for "full screen" game mode display - change switching. Only the Win32 implementation really does - display mode changes. See lib/glut/glut_gamemode.c - - o Several demos added a -fullscreen option to use the new GLUT - game mode functionality. I generally also fixed these to - match the window aspect ratio. Examples: underwater, txfdemo - - o Sort of fixed how WM_ACTIVATE messages get processed in the - Win32 GLUT implementation. - - o Moved the Win32 WinProc function out of win32_util.c into - its own win32_winproc.c file. - - o Building the GLUT library debug for Win32 works now (changes - to the Makefile.win setup). - - o Added a poor man's stereo example by Walter Vannini - (walterv@jps.net, waltervannini@hotmail.com). The idea - is to draw the left eye in red and right eye in blue - and use cheap red/blue filter stereo glasses to see - the stereo separation. See progs/advanced/redblue_stereo.c - - o Improve GLUT static library implementation. Now if you don't - use the GLUT menu API, you don't get this code included in your - binary. Reduces GLUT program text size by 25% for such non-menu - GLUT programs. - - o Add gleGetNumSlices and gleSetNumSlices entry points to control - the tessellation level (previously, always a constant 20). - - o Improved dependencies in SGI Makefiles in lib/*/Makefile.sgi - - o Added progs/gle/martini.c example. Spinning martini glass. - - o Should work on VMS 7.0. Changes suggested by Jouk Jansen - (joukj@crys.chem.uva.nl). Mainly changes to GLUT library itself - to deal with VMS 7.0's POSIX-compliant support for gettimeofday. - - o Added GLUT version of "skyfly" terrain fly over demo. See - progs/demos/skyfly - - o Update of GLUT frequently asked questions. See FAQ.glut - - o Added workaround to real-time shadow demos so they work on old - (pre-IRIX 6.5) Octane and Impact systems. The work around makes - sure the feedback buffer is always at least 2048 entries big to - force use of software feedback. See progs/advanced/rts.c and - progs/advanced/shadowfun.c - - o Add work-around in hello2rts for Riva 128 and 128 ZX to make - hello2rts start by default with the stencil invariant hack - enabled. This makes sure that hello2rts use the software - rasterizer for all rendering so the shadows look right. Other - platforms may need this support. There is a menu option to - flip it on if need be. - - o Added a "win32pfd" (Win32 Pixel Format Descriptor) capability - name for the Win32 version of GLUT's glutInitDisplayString - parser. This lets you select a specific pixel format descriptor, - much as "xvisual" allows one to do with X11. This is intended - to facilitate benchmark construction with GLUT where particular - PFDs can be selected for benchmarking or testing. Also documented - on glutInitDisplayString man page. Win32 GLUT only. - - o Add glutGet(GLUT_WINDOW_FORMAT_ID) to return the window system - dependent window format ID (Visual ID for X11; Pixel Format - Descriptor Number for Win32). This should help people be able - to report bugs and now precisely what format ID they are - testing and/or benchmarking. Note that these values can change - between X servers, hardware, and OpenGL implementations. - - o Fix glutGet(GLUT_WINDOW_COLORMAP_SIZE) bug in X11 GLUT - implementation. The routine now correctly returns the colormap - size of the current layer (previously it returned the size - of the normal layer which was a totally bogus value for an - RGBA normal layer). - - o Fixed SEE ALSO section of glutDeviceGet man page. - - o glutInitDisplayString now knows how to use the SGIX_fbconfig - extension to access 16-bit StaticGray luminance visuals. - These high-resolution luminance (1 component) visuals are - excellent for medical imaging applications that need the - 16 bits per pixel resolution. - - To get a luminance window, do: - - glutInitDisplayString("luminance"); - - Note that few systems actually support 16-bit luminance visuals. - InfiniteReality does. I'm not aware of any other systems that - do. - - o Added missing GLUT entry points to the GLUT Ada binding - and interface files. - - o Added progs/demos/sysview, an IRIX operating system 3D - monitor. Only compiles on SGI machines, though it could - easily be adapted to other operating systems. Courtesy - of Javier Velasco . - - o Win32 GLUT didn't generate keyboard callback for Delete key - (ascii 127) before; now it does. - - o Fix warning in glut_input.c when compiling on Alpha due - to XInput extension API snafu. Pointed out by Tom Holroyd - compiling on a Linux Alpha machine. - - o Fixed bug reported by Rune Hasvold in - win32_glx.c where Win32 GLUT was always requesting a 1 - bit depth buffer at least. Now, GLUT requests zero bits - of DEPTH unless you request a depth buffer. Apparently - this bug was fixed in the Mesa version of GLUT a while - back, but didn't get to my GLUT source until now. - -GLUT 3.5 -> 3.6 ----------------- - - o The GLUT .zip file now has "Makefile" be a copy of "Makefile.win" - instead of "Makefile.sgi". This makes it easier for Win32 GLUT - users to just do an "nmake" to build GLUT. - - o Updated various README files for GLUT 3.6. - - o Update GLUT man page revs to say 3.6. - - o Fixed bug in Win32 accumulation buffer allocation code. Thanks to - Nate and Layne Christensen . - - o Fix bug in Win32 GLUT where pushing/popping a subwindow would - also reposition the window to its parent's origin. Now, push/pop - operations do not disturb the window position. - - o Fix all VC++ Win32 warnings and improve the GLUT.DLL speed - and size by macro'izing Xlib routines and eliminating X11-only - functionality from the Win32 version of the library. - - o Fixed various bugs in Win32 GLUT menu handling. The glutChange* - and glutRemoveMenuItem routines should work pretty well now. - - o Fix Win32 GLUT bug where a reshape did not properly result in - repair-damage, ie. glutLayerGet(GLUT_NORMAL_DAMAGED) didn't work - right in GLUT 3.5. - - o The "walker" demo's win32_dirent.h code got update to read directory - correctly for Windows 95 (does Win32 FindFirstFile on "." operate - differently from Windows NT? It seems like "*" works the way "." - should.) - - o X11 GLUT now detects when you set up an infinite loop due to - recursive submenu nesting. In previous GLUT implementations, - this could lead to an infinite loop with the X server grabbed; - now it leads to a GLUT fatal error. - - o GLUT now exits with a fatal error if glXCreateContext (or - wglCreateContext) fails instead of crashing. - - o Win32 "make test" infrastructure in place. - - o Ideas in Motion demo builds better now. - - o Substantially improve the performance of glutSolidTorus and - glutWireTorus by using quad strips instead of independent quads. - Also, generally made the looping more efficient. Thanks to - Emmanuel Maa BERRIET (eberriet@sky.fr) for pointing out the - inefficiencies. - - o Include Linas Vepstas's GLE library with GLUT (based on GLE 2.2.6). - Includes man pages at man/gle and examples at progs/gle - - The GLE Tubing and Extrusion Library is a graphics application - programming interface (API). The library consists of a number of - "C" language subroutines for drawing tubing and extrusions. - - Several bugs in GLE 2.2.6 are fixed here, particularly to make - GLE work well under Win32. - - o Fixed bugs in MUI so that it can support multiple user interface - windows. Added muiAttachUIList to associate a UI list with a GLUT - window. - - o More MUI enchancements to allow "disabled" greyed-out UI elements - courtesy of Tom Davis. - - o gliq, a pegboard game of IQ by Kiri Wagstaff, is at progs/demos/gliq - - o Add Nate Robin's port of the IRIS GL bounce program to OpenGL; see - progs/demos/bounce (includes a slider GUI element). - - o Add Nate Robin's "smooth" 3D object viewer without automatic nice - normal generation. - - o glflare, an OpenGL version of the D3D flare idea by Stephen Coy of - Microsoft. See progs/demos/glflare - - o Resolve gcc warnings (picky, picky) in lib/glut. This includes - not relying on the libc having strdup (not required by ANSI C or - POSIX). - - o Fix array bound overflow bug in progs/examples/stars.c - - o Handle fopen failure in progs/texfont/gentexfont.c - - o Add many more Ada GLUT examples; see progs/ada - - o Support X11R6's XK_KP_* keysyms for the keypad. Previously, - the Home,Left,Right,etc keys on the numeric keypad (when num lock - is off) got ignored. Now they should work. Thanks to Paul - Henning (phenning@cs.uiowa.edu) for pointing out this problem. - - o It is now possible to catch a Unix signal in a signal handler and - add a glutIdleFunc and know that the GLUT main loop will - immediately drop out of waiting for the event and call the idle - callback. This makes it possible to reliably respond to signals - from within a GLUT program. (Just on Unix systems, not Win32.) - - o Added progs/demos/lorenz, Lorenz Attractor Demo. - - o Added progs/examples/editgrid.c - - o Improved progs/mesademos/texobj.c - - o Fixed progs/redbook/surface.c to request a depth buffer. - - o Added progs/advanced/pointburst.c demonstrating a particle system. - - o Added progs/advanced/sgiflag.c demonstrating dynamic real-time - NURBS trimming. - - o progs/advanced/envmap.c supports OpenGL 1.1 now. - - o Fix GLUT library compilation problem on DEC Unix 4.0 on Alpha - machines reported by Ray S. Babcock (babcock@cs.montana.edu). - See glut_dstr.c - - o Fix single buffered GLUT programs that needed to be calling - glFlush at the end of the frame. Reported by - fossum@austin.ibm.com (Gordon C. Fossum). - - o Fix Fortran build error under IRIX 6.5 (use sed instead of grep). - - o Use "-Wl,-ignore_unresolved" SGI linker option to get around - problems in buggy SGI OpenGL Fortran bindings having extension - routines that are not implemented in the supplied OpenGL. - - o Added Brian Paul's marvelous Blue Pony demo in demos/bluepony - - I had requested a Blue Pony from SIGGRAPH as one of my "special - needs" for our SIGGRAPH '97 "OpenGL and Window System Integration" - course. Brian came through with this virtual Blue Pony. Thanks, - Brian! - - o Fixed a problem in test/glut/bigtest.c where if it ran too - long, it would stop rotation due to numeric problems. - - o Make new glut_swap.c and glut_cmap.c files to help keep - glutSwapWindow and the color index GLUT entrypoints out of - statically linked GLUT programs that do not use these routines. - - o Fix many warnings. - -GLUT 3.4 -> 3.5 ----------------- - - o Henk Kok (kok@wins.uva.nl) contributes another cool demo. See - progs/demos/opengl_logo - - o README.win32 now named README.win - - o Add the MUI (micro-UI) library developed for GLUT experimentally - based on SGI's Showcase user interface library. This code was - developed by Tom Davis (davis@sgi.com). - - o The test directory now has subdirectories. test/glut has - all the previous GLUT API tests. - - o Added menus to progs/advanced/projtex.c - - o Added tiffsift.c showing how to do "sifting" texture distortions - with OpenGL's third texture coordinate. - - o Improve lib/glut/glut_menu.c by having the code check if the - default visual is in the overlay so that it will get chosen - as the pop-up menu visual to minimize colormap flashing. - Suggested by Thomas Roell (thomas@xig.com). - - o Fix bug in glutStrokeLength and glutBitmapLength reported by Tom - Carroll . - - o Added shadowfun.c, boundary.c, hello2rts.c and rts.c as - examples of how to do fancy stenciled shadow volumes. See - the progs/advanced subdirectory. - - o Now man pages get installed with "glut" suffix. Should avoid - situations where GLUT's intro.3 clobber's systems intro.3 - because GLUT should now install intro.3glut - - o Changes to Glut.cf for Digital Unix (Alpha) suggested by - Dr Andrej Panjkov (A.Panjkov@latrobe.edu.au). - - o Added demos/chess and demos/rollercoaster demos written by - Henk Kok (kok@wins.uva.nl). Very nice. - - o Michael Gold's "rasterization only" demo uses OpenGL as just - a rasterization interfaces. See progs/advanced/rasonly.c - - o progs/demos/underwater shows OpenGL-based rendering of underwater - caustics effects. Very cool! - - o Added progs/perf_harness directory with an example of how - to create an application specific GLUT-based OpenGL benchmark. - - o Remove lib/glut/cannotate.c from distribution (no one should care). - - o Portability improvements throughout, particularly to Win32. - -GLUT 3.3 -> 3.4 ----------------- - - o Add glutStrokeLength and glutBitmapLength calls to glut.h - (previously undocumented). Will be documented part of GLUT 4 - API. - - o Added man discussion of glutStrokeLength, glutBitmapLength, - and glutWarpPointer. - - o Used ANSI C "const" keyword in glut API and implementation - as appropriate (this helped make Ada binding generation - easier). - - o README.win32 added; this is from Nate Robins's GLUT 3.3 - Win32 distribution. - - o SGI Makefiles use $(TOP)/glutdefs for shared GLUT-related - macros. - - o Add workaround for Microsoft's OpenGL 1.1 implementation. - MS OpenGL 1.1 does not advance the raster position by the - xoffset and yoffset of glBitmap if the specified bitmap - has a width or height of zero (it is just a no-op); this is - not what OpenGL specifies. I've fixed the GLUT bitmap fonts - to not use null bitmaps #ifdef WIN32 and instead use a 1x1 - bitmap with not bit set. capturexfont.c has been changed to - generate code with the #ifdef WIN32 workaround. - - o Fix bug in -geometry handling for negative window positions. - Now "-geometry 400x500-23-34" does not crash GLUT programs. - - o Makefile support for SGI machines so that you can set your - OBJECT_STYLE environment variable to one of SGI's various ABIs - and ISAs. This can let you compile GLUT fully 64-bit with - R10K instructions or mereley old 32-bit ABI. For example, - to compile N32 with only R4K instructions, do a - "setenv OBJECT_STYLE N32_M3". - - o Put header files in include/GL instead of GL - this would make - it esier to support other libraries within the GLUT distribution - (possibly libtiff) that wouldn't want a header to be in the GL - subdirectory. - - o Add GLUT 4 glutReportErrors entry point. - - o New cool game-oriented rendering demos: dinoreflect.c dinoshade.c - and halomagic.c - - o Support HP's Color Recovery System since Mesa uses it. - - o Add the libtiff examples in progs/tiff: showtiff, writetiff, - and textiff - - o Add the new OpenGL Programming Guide 2nd Edition examples to the - GLUT distribution. - - o added progs/mesademos/trdemo.c - Brian Paul's tiled rendering demo. - - o added progs/demos/geoface - facial animation demo. - - o no long export internal symbols in libglut that should have been static. - See lib/glut/Makefile.sgi's "make symcheck" rule. - - o glutInitDisplayString implemented. See test23. Also works automatically - with Mesa. - - o Added popup menu overlay color cell allocation logic for Sun's - Creator hardware. See test24. - - o Enhanced tests and fixed messages in a few places. - -GLUT 3.2 -> 3.3 ----------------- - - o The SGI Makefiles always build O32 executables. In IRIX 6.4, the - default executable type changes to N32; to avoid Makefile - sommersaults, we just keep use at O32. - - o Get rid of all the __glutFatalError calls in the GLUT test suite. - Naughty to be using a GLUT internal function. - - o Introduced some new entry points that will be part of the official - GLUT 4 API when it is finalized for video resize & window status. - The video resize API is useful for hardware with full screen - video resize (ie, InfiniteReality). The window status callback - extends the information of the previous visibility callback to - tell you when the window is fully vs. partially visible and - when the window is hidden vs. fully obscured. GUIs typically want - to know when a window gets unmapped; programs that rely on a - fully unobscured frame buffer (such as histogram occlusion culling) - need to know when the window is fully visisble. - - o progs/advanced/occlude.c demonstrates a histogram based occlusion - culling technique. It requires support of the histogram extension - and works best on a machine like RealityEngine. - - o glutSolidCube and glutWireCube efficiency improved. - - o Added progs/examples/cube.c - simple demo to draw a 3D cube. - - o Fixed warning message from glutSetWindow. - - o glutFullScreen called on a window before it is mapped now - properly overrides the WM_NORMAL_HINTS to ensure that the window - is positioned at 0,0 (ie, no random or interactive placement - by the window manager). - - o For IRIX 6.3 and IRIX 6.4, eliminate X server routine trips for - interning atoms using SGI's fast atoms optimization. - - o Added a GLUT introduction man page. Either "man glut" or "man intro". - - o Previously, timer callbacks could be starved by continous X - events. Now, timer callbacks and X event processing are handled - at the same priority. test/timer_test.c helps verify the improved - behavior. - - o Add IAFA for submitting GLUT to sunsite.unc.edu for anonymous - ftp; based on Mesa version. - - o SGI Makefiles work with MIPS 7.10 compilers now. - - o Fixed more warnings. - - o advanced: Fixed overlay bug in zcomposite. - - o demos: Fixed OpenGL bug in glutmech. - - o demos: Fixed atlantis to have a more reasonable near/far range for - machines with limited depth buffer resolution (<=16 bits). - - o Improved comments in places. - - o libglut: Fixed message if Motif atom intern'ing failed for fullscreen. - -GLUT 3.1 -> 3.2 ----------------- - - o Complete Unix-style nroff man pages for all the GLUT library - routines. See README.man for details. - - o Implement the MESA_SWAP_HACK. If you set the MESA_SWAP_HACK - enviornment variable and you are using Mesa, GLUT will attempt - to simply do a glXSwapBuffers to repair damage to a double - buffered GLUT window that appears to have been last displayed - using a glutSwapBuffers call. This can *greatly* improve the - redraw performance of GLUT programs running under Mesa when - they are damaged (for example by popup menus that are not in - the overlays). See lib/glut/glut_mesa.c This idea was suggested - by Brian Paul on the Mesa mailing list. - - Note that some poorly behaved (probably buggy, actually) GLUT - programs may no redraw correctly with MESA_SWAP_HACK. The - optimization relies upon your display callback being idempotent - and that the window is not otherwise rendered to by other - callback routines. - - o Port Brian Paul's various Mesa 2.0 demo programs to use - GLUT: bounce, gamma, gears, isosurf, offset, reflect, - spin, tess_demo, texobj, & winpos. The reflect program - is definitely worth checking out. - - o Include GLUT examples presented by Tom McReynolds and - David Blythe at the "Advanced OpenGL Rendering" course at - SIGGRAPH '96. - - o Add progs/examples/simple.c showing how to simply draw - a single triangle with OpenGL. How long would an equivalent - Direct3D immediate program be? Much longer... - - o Screen door transparency example using polygon stippling - based on code from Tim Hall. progs/examples/screendoor.c - - o Fix bug where glutRemoveMenuItem about recalculating - the menu's width in pixel that would sometimes cause an - X protocol error. - - o Make sure that when a popup menu is finished that if the - initiating window has an overlay, the overlay colormap - is installed. An overlay popup menu could otherwise knock - out the window's overlay colormap. - - o Fix an "off by one" error in the window number printed out - in a fatal error message when a redisplay is generated on - a window without a display callback. - - o Make consistent puncutation in some fatal error messages. - - o Some work to make example programs easier to build on - Windows NT and 95 (probably not complete; report bugs - please). - -GLUT 3.0 -> 3.1 ----------------- - - o The various shape rendering routines use single - precision instead of double precision. - - o The box shape rendering routines don't generate - redundant normals. - - o Make glutExtensionSupported more robust. - - o Added test20 for glutExtensionSupported. - - o Fixed Makefile in /usr/share/src/GLUT images. - - o Fixed multisample complication bug in dinospin.c - - o Fixed multiple includes in moth.c - - o Add contribed steam.c and glutmech demos (cool!). - - o Added fontdemo and evaltest in progs/examples. - - o Fix an HP/UX compilation problem with libglut.a - - o Fix GETTIMEOFDAY macro to take two args on a Sun. Why does - Sun claim to be SVR4 when they have a BSD (2 parameter - gettimeoday)? - - o Add an #ifdef to glut_win.c for working around Solaris - 2.4 and 2.5 bug in XmuLookupStandardColormap. - -GLUT 2.3 -> 3.0 ----------------- - - o Major version change so GLUT 3.0 does have API additions! - - o Added yacme (yet another colormap editor) demo by Patrick Bouchaud - (SGI Switzerland). - - o Updated glut.h so that GLUT_XLIB_IMPLEMENTATION=5 for 3.0 - and GLUT_API_VERSION=3 for 3.0. - - o Change all the sample programs to _not_ #include or - . From the spec: "Because a very large window system - software vendor (who will remain nameless) has an apparent - inability to appreciate that OpenGL's API is independent of their - window system API, portable ANSI C GLUT programs should not - directly include or . Instead, ANSI C GLUT - programs should rely on to include the necessary - OpenGL and GLU related header files." Sigh. - - o New Helvetica fonts: 10, 12, and 18 point versions. - GLUT_BITMAP_HELVETICA_10, GLUT_BITMAP_HELVETICA_12, and - GLUT_BITMAP_HELVETICA_18. - - o Implement glutFullScreen. - - o Implement glutSetCursor. - - o Implement glutGetModifiers. - - o Implement glutBitmapWidth and glutStrokeWidth. - - o Reimplement test2 to use glutGet(GLUT_ELAPSED_TIME) instead of - the less than portable gettimeofday. - - o Ripped out all the support for compiling earlier GLUT API - versions. It got very ugly and hard to maintain. - - o Added GLUT_LUMINANCE to GLUT verison 3 API and documented it, but - it is not implemented as part of GLUT 3.0; should be in 3.1. - - o Added OpenVMS support to GLUT library with much help from Andy Vesper. - - o The display mode mask parameter for glutInitDisplayMode and the - milliseconds parameter for glutTimerFunc are now of type unsigned - int (previously unsigned long). - - o glutMenuStatus obsoletes glutMenuState. The callback registered - by glutMenuStatus is triggered just like glutMenuState, except - that an additional two parameters pass the X and Y location of the - mouse when the menu status changes. This is to remedy problems a - GLUT program using glutPassiveMotion might have re-sync'ing with - the mouse position after menu use. - - o In previous releases of GLUT, various user input events were - discarded when menus were in use. Now, these callbacks are - generated. If the effect of the events should be performed after - the menu is released, it is up to the GLUT program to delay the - action. - - o Careful to ignore Enter/LeaveNotify events that come - from the pop-up window pointer grab and ungrab (ie, - Enter/LeaveNotify events not marked NotifyNormal for their mode. - Eliminates "spurious" entry events. - - o Fixed bug with new work (like subwindow creation is a display callback) - not being placed on the work queue and getting lost. - - o Fix memory corruption bug in caching of values returned by - glXChooseVisual; no longer cache. - - o Fixed bug with glutCopyColormap sometimes not accurately - re-establishing the WM_COLORMAP_WINDOWS property. - - o Fixed bug in deliver of enter and left callbacks. Before "virtual" - enter and leave (X protocol teminology) were being reported. The - semantic for the entry callback is it is entering and leaving - a GLUT windows real estate that counts; not passing through - the window hiearchy. - - o Add XFlush to __glutFinishMenu in case menu call back will want to - read from a terminal window. In this case, the X server may still - be grabbed since the XUngrabPointer hasn't been flushed out of - Xlib's buffers to the X server for processing (deadlock!). - - o Don't allow modification of menus while in use. Spec ammended to - say "It is illegal to create or destroy menus or change, add, or - remove menu items while a menu (and any cascaded sub-menus) are in - use (i.e., popped up)." Allowing modifications of menus while in - use was dubious, the semantics would be unclear, and even more - unfortunate, might vary from system to system. - - o Spec warns that you should not call routines that require a current - window or menu when there is not a current window or menu (like - before you create one or if you destroy the current one). - - o Fixed bug where glutSpecialFunc callback would only operate if - a glutKeyboardFunc callback was also registered. - - o Fixed bug in color index visual selection so that largest number - of bits of color resolution is preferred to smallest. - - o Fixed bug where if a double buffer X window was used to emulate - a single buffer window, GLUT should set the OpenGL read mode - to GL_FRONT (it was only changing the draw mode). - - o Fixed an obscure ordering bug with simultaneous glutPushWindow and - glutPopWindow calls on different subwindows of the same window. - - o Now, it is a fatal error to receive an expose event with no - display callback registered (it was stupid to allow mapped windows - that made no attempt to redisplay). The spec has been changed to - say NULL can not be passed to glutDisplayFunc; previously, it - said this would disable the callback. Stupid. What was I thinking? - - o GLUT spec is indexed now and generally improved. - - o Support for IRIX 6.2's N32 and N64 object style to take advantage - of new MIPS processor instruction sets. See lib/glut.n32 and - lib/glut.n64 (IRIX 6.x only). - - o Fortran bindings also available for N32 and N64. See lib/fglut.n32 - and lib/fglut.n64. - - o Tests support the new API version 3 interfaces. - - o Contributed "bigtest" test program. - - o Added splatlogo example demonstrating pixel path functionality. - - o Added zoomdino program demonstrating use overlay rubber-banding. - - o Contributed demo programs: hanoi, hanoi2, gears, moth, text3d, - and noof. - - o Contributed SGI stereo program: stereo-plane - - o Being out of colors in the default colormap without overlay planes - will no longer lead to a fatal error when allocating the color gray - for a pop-up menu. Instead, GLUT finds the closest matching color - automatically. Help from Brian Paul to code this. - - o Eliminated Glut64.mk from all Makefile.sgi's - -GLUT 2.2 -> 2.3 ----------------- - - o Fix obscure problem with how X Input extension button press and - release events get selected; it seems GLUT should also be - selecting for the DeviceButtonPressGrab event class since this - ensures that a release will be delivered to the same window as the - press; that was my intent for how buttons presses and releases - should work. I just didn't know you needed this obscure event - class to be selected. Such a grab is the default for pointer - events. - - o If windows are indirect, make sure that a glFinish is properly - done for all windows that have been made current to recently (ie, - last main loop iteration). This helps ensure windows don't get - ahead of themselves. Previously, GLUT simply did a glFinish to - whatever window GLUT happened to be made current to last at the - end of each main loop iteration. - - o Fix what can be considered a bug where calling glutPostRedisplay - within a display callback would not leave the redisplay set; this - applies other routines that set work state needing to be done. - Essentially, clear the workMask before the work callbacks are done - instead of after. The new test15 tests this. - - o To support other OpenGL higher-level library that might want to - be able to call glXMakeCurrent, GLUT should not try to track - make current state and short circuit glXMakeCurrent calls when - GLUT believes the window/context are already current. glXMakeCurrent - should implement the same "short circuit" case, but can appropriately - track the changed state from multiple libraries. - - o The glutRemoveMenuItem routine was totally busted previous to 2.3. - Now it is fixed and test14 is a regression test for it. - - o Add Greg Humphreys's hanoi program to progs/contrib - - o Examples demonstrating Open Inventor used with GLUT found in - progs/inventor - - o New progs/examples programs: abgr, triselect, texenv, stenciltst, - stars, fogtst - -GLUT 2.1 -> GLUT 2.2 ---------------------- - - o Fixed bug in glutGet(GLUT_WINDOW_X) and glutGet(GLUT_WINDOW_Y). - - o Added Philip Winston's human kinetics demo in progs/demos/walker - (COOL!). - - o Improved test suite. - - o Work around SunOS 4.x's non-ANSI compliant realloc. - - o Better handle delivery of reshape callback. - - o Pre-build stroke font C files to avoid having to rely on lex/yacc - working correctly. Too many Linux systems missing flex/bison or - having verisons that resulted in undefined symbols while building - strokegen. - - o Better portability, mostly avoiding compiler warnings. - - o 64-bit clean (as far as I know!). - - o Compiles right for systems like DEC Alpha that support GLX 1.1 but - do not support GLX_SGIS_multisample extension. - - o At Brian Paul's request for better Mesa support, changed colormap - allocation to work if RGBA window has PsueoColor visual. - - o Fix Drew Bliss reported bug in colormap allocation (resulted in - GLUT programs not correctly sharing colormaps). - - o Interesting bug involving the fact that XFlush may actually - read X protocol into Xlib's internal buffers so if you call - XFlush, then select on the X socket, you might find nothing to - read, but when in fact there is data in the Xlib internal buffers - that should be processed. Using ISDN (I guess it has weird - network properties) showed this bug in a GLUT test13. The fix is - to use XPending after XFlush. - - o Improve X Input documentation references in the GLUT spec. - - o Widen margins so spec kills less trees. - - o Clarify GLUT spec to explain glutGet values returned by - GLUT_WINDOW_X, GLUT_WINDOW_Y, GLUT_WINDOW_WIDTH, and - GLUT_WINDOW_HEIGHT as being returned in pixels. - - o Make sure consistently using reshape (and not resize) within GLUT - spec. - - o GLUT spec should document that glutExtensionSupported, - glutCreateWindow, and glutCreateSubwindow return int. - -GLUT 2.0 -> GLUT 2.1 ---------------------- - - o XCOMM comments in Imakefiles results in unusable Makefiles - for systems that pre-date an X11R5-based imake. - - o The rings.c and worms.c examples use "float" returning - versions of trigonometric functions (ie, cosf, sinf, etc.). While - ANSI C reserves these names for their logical purpose, many - systems do not implement these functions. - - o Calls to __glutWarning in glut_cindex in places lack - variable %d argument. - - o Intended comments in lib/Imakefile cause avoiable - warnings for some C pre-processors. - - o Old (pre-X11R6) versions of Xlib did not have XK_Page_Up - and XK_Page_Down keysym defs in /usr/include/X11/keysymdef.h - These are aliases to XK_Prior and XK_Next. - - o The X11R5 to_wfont derived strokegen program for converting - PEX fonts to C data structures was full of memory access - bugs. On most systems, they were not fatal. That's - what I get for trying to steal PEX code I gues. :-) - - o Various Purify-detected memory access bugs within the - GLUT library have been fixed. - - o Better Imakefile handling of lex usage in lib/glut/Imakefile - - o Better document colormap management routines. - - o Correctly document the prototype for glutCreateSubWindow - - o Add documentation usage hint explaining glutGetWindow - and glutGetMenu can be used to determine what window - or menu a callback is for. - - o Fix bug in glutDetachMenu - - o Fix bug in delivery of visibility callback for subwindows - of an unmapped top-level window. - - o scube.c should use more likely to be optimized - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) instead of - glBlendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA) - - o Supression of various compiler detected warnings through - the GLUT distribution. - - o Use of the "polygon offset" extension if available in origami.c - - o SGI mkmkfiles.sgi script doesn't make Fortran by default now; - see instructions in README.fortran - - o Improvements to the test programs. - - o Avoid X Input extension calls when extension is present but - no devices are available. - -GLUT 1.0 -> GLUT 2.0 ---------------------- - - o API extensions; see README.glut2 - - o Bug fixes. - - o More demos. - - o Update documentation. - -- Mark diff --git a/lib/glut-3.7.6/FAQ.glut b/lib/glut-3.7.6/FAQ.glut deleted file mode 100644 index fab74c9f8..000000000 --- a/lib/glut-3.7.6/FAQ.glut +++ /dev/null @@ -1,915 +0,0 @@ - -An on-line (possibly more up-to-date) version of this GLUT Frequently -Asked Questions list can be found at: - - http://reality.sgi.com/opengl/glut3/glut-faq.html - -Here are few questions I expect to be frequently asked about GLUT 3.5. -First, here are tag-line summaries of the question subject matter. - -Q1: Problems building GLUT. I've tried to use the "mkmkfiles.imake" - script to generate Makefiles so I can build GLUT, but it doesn't - seem to work. What should I try? - -Q2: More GUI features. GLUT needs improved menus, dialog boxes, - scrollbars, text entry fields, etc. to be useful to me. What - should I do? - -Q3: New with GLUT 3.0. What new things are in GLUT 3.0? - -Q4: GLUT for Windows 95 and NT. Is there a version of GLUT for - Windows NT or Windows 95? - -Q5: GLUT for OS/2. Is there a version of GLUT for OS/2? - -Q6: GLUT for Power Macintosh. Is there a version of GLUT for the - Power Macintosh? - -Q7: GLUT 3.0 incompatibilities. I'm hesitant about upgrading to GLUT - 3.0 since I've got things working will with GLUT 2.3. Is the - transition painful? - -Q8: GLUT and Motif. So how do I use GLUT and Motif together? - -Q9: aux convension to GLUT. I have a bunch of simple OpenGL programs - using the aux toolkit descibed in the OpenGL Programming Guide - (the "red" book). Is there an easy way to convert them to GLUT? - -Q10: SGI N32 and 64-bit support. I have IRIX 6.2 (or 6.1) and I'd - like to write GLUT programs run in true 64-bit and/or benefit - from the recent, faster MIPS processors. How do I build GLUT to - support these newer application binary interfaces (ABIs)? - -Q11: FORTRAN and GLUT. I'd like to write FORTRAN programs using GLUT - and OpenGL. How do I use GLUT with FORTRAN? - -Q12: Sophisticated input devices. I'd like to use the sophisticated - input devices that GLUT supports. What should I know about this? - -Q13: GLUT and Open Inventor. Can I use GLUT and Open Inventor? - -Q14: GLUT, Sun, and Overlays. I have Sun workstation, and it is - supposed to support overlays. So why does GLUT not use them? - -Q15: The GLUT stroke font. The stroke font used for GLUT looks - familar. Where did it come from? - -Q16: My book about GLUT. I read in the NOTICE file that you are - writing a book on programming OpenGL for the X Window System. - Where can I get it? - -Q17: GLUT and Microsoft portability. You mention an unnamed bu "very - large window system software vendor" as the reason portable GLUT - programs should not directly include and - directly. What's the vendor and what are the details? - -Q18: GLUT and networking. I want my GLUT program to read and send - information over a socket to some other program. How do I do - this in in GLUT? - -Q19: Asking GLUT questions. Where's the best place to ask questions - about GLUT or OpenGL? Can I just email them to you? - -Q20: Free OpenGL. My workstation doesn't have OpenGL. Where can I get a - free copy to use with GLUT? - -Q21: GLUT overlay example code. I hear GLUT 3.0 has overlay support. - Where is an example? - -Q22: BadMatch errors running GLUT programs. I get BadMatch X protocol - errors when I run GLUT programs. What gives? - -Q23: New in GLUT 3.1. What is new in GLUT 3.1? - -Q24: Shared libraries for Linux. How do I make Linux shared libraries - for GLUT? - -Q25: New in GLUT 3.2. What is new in GLUT 3.2? - -Q26: GLUT API man pages. I've heard GLUT 3.2 has man pages. How do I - use them? - -Q27: Fast window repair for Mesa. What is the MESA_SWAP_HACK in GLUT - 3.2? How does it help Mesa users avoid excessive window redraws? - -Q28: Advanced GLUT example .rgb image file. I try to run the examples in - progs/advanced but they don't work for lack of image files. - Where can I get those files? - -Q29: IRIX 6.3 and 6.4 fast atoms support issues for older IRIX - releases. Why doesn't GLUT programs compiled on IRIX 6.4 or 6.3 - work earlier releases? - -Q30: GLUT for the Power Macintosh. Can I get a version of GLUT for the - Power Macintosh? - -Q31: New in GLUT 3.4. What is new in GLUT 3.4? - -Q32: Cosmo3D beta and GLUT problem. I installed SGI's Cosmo3D beta and - GLUT, and I'm having problems compiling GLUT programs. What gives? - -Q33: New in GLUT 3.5. What is new in GLUT 3.5? - -Q34: Using the precompiled GLUT DLLs with Borland compilers. How do I use - the precompiled Win32 GLUT DLLs with Borland compilers? - -Q35: Using GLUT with C++. Are there any C++ wrappers for GLUT? - -Q36: Avoiding the Console window for Win32 GLUT programs. How do you avoid - the Console window appearing when you compiler a Win32 GLUT - application with Microsoft compilers? - -Q37: New in GLUT 3.6. What is new in GLUT 3.6? - -Q38: O2 build problmes with glXChannelRectSyncSGIX. On my IRIX 6.3 SGI O2 - workstation, why do I get errors about "glXChannelRectSyncSGIX" - being unresolved building certain GLUT examples? - -Q39: Using GLUT with Microsoft OpenGL 1.1 and compiling GLUT with - Borland compilers causes GLUT applications to generates floating - point exceptions. What can be done? - -Q40: Using GLUT with SGI OpenGL for Windows and compiling with - Borland compilers results in linking problems. What can be - done? - -Q41: What is GameGLUT? - -Q42: I use a callback registered with "atexit" to clean up my temporary - files and stuff. Under Windows, my atexit callback is not being - called if you quit by application by clicking the X box or using - the Windows Close border menu. What gives? - -Q43: My Unix GLUT program has a variable named "select". When I run - my program it crashes on startup in code that is not mine. - What gives? - -Q44: I use Imakefiles to build GLUT. How do I make shared/debug/profiling - versions of the various GLUT libraries? - --- - -Q1: I've tried to use the "mkmkfiles.imake" script to generate - Makefiles so I can build GLUT, but it doesn't seem to work. What - should I try? - -A1: While Imakefiles are supposted to be system independent (hence - the "I"), the commands to translate Imakefiles into Makefiles - varies from system to system. The X Consortium provides a command - called "xmkmf", but vendors do not put this command in a - consistent place. The "mkmkfiles.imake" script tries its best to - generate Makefiles, but may get confused by different vendors - configurations that I am not aware of. - - It is also possible the imake configuration files (typically - located at /usr/lib/X11/config) are buggy or from a very old - version of X. - - SGI users can benefit from using the "mkmkfile.sgi" script that - uses SGI's parallel make, though "mkmkfiles.imake" should work - too. - --- - -Q2: GLUT needs improved menus, dialog boxes, scrollbars, text - entry fields, etc. to be useful to me. What should I do? - -A2: GLUT does not pretend to be a full-featured graphical user - interface toolkit. - - You _could_ write these sorts of GUI objects using GLUT and OpenGL - if you needed to. The other alternative is to use Motif or - whatever full featured toolkit you have. - - A little toolkit called micro-UI uses OpenGL for rendering and is - based on GLUT. The toolkit was developed by Tom Davis. See the - README.mui file the accompanies GLUT 3.5 and up. - --- - -Q3: What new things are in GLUT 3.0? - -A3: See README.glut3 or read The OpenGL Utility (GLUT) Programming - Interface document. - --- - -Q4: Is there a version of GLUT for Windows NT or Windows 95? - -A4: As of GLUT 3.5, GLUT now builds for both Win32 and X11 window - systems. Much thanks to Nate Robins. See the README.win file - contained in GLUT 3.5 for details. GLUT 3.6 improved the Win32 - GLUT support considerably. - --- - -Q5: Is there a version of GLUT for OS/2? - -A5: Yes. I believe a version based on GLUT 2.x is distributed on an - OS/2 OpenGL developer's CD-ROM. - - You may have reasonable luck porting the Win32 version of the - GLUT 3.6 distribution to OS/2. If you manage to do this, please - contact me. - --- - -Q6: Is there a version of GLUT for the Power Macintosh? - -A6: Conix Graphics supplies GLUT 3.5 with their Macintosh OpenGL - implementation. See http://www.conix3d.com. - - Was told by Template Graphics that an incomplete version of - GLUT had been developed for their OpenGL product for the Power - Macintosh. I am not sure if it was ever completed or made - available. - - - --- - -Q7: I'm hesitant about upgrading to GLUT 3.0 since I've got things - working will with GLUT 2.3. Is the transition painful? - -A7: I do not believe so. There are two changes worth noting that - _may_ affect programs you have written. - - First, you need a display callback registered before your display - your windows on the screen. It did not make sense for this to not - be true. In all likeihood, this should not affect your GLUT - programs if they written well. - - Second, you can no longer change, create, or destroy menus while - pop-up menus are in use. Before, you could do this, but it meant - a menu might be changed while in use. It was near impossible to - describe what should happen in the case of menus being changed - while in use that was likely to be portable to the way other - window systems handled menus, so I made the practice illegal. - - You can register a menu status callback to know when menus become - used and unused to avoid changing menus while they are in use. - - For more details about what has changed, see the CHANGES file. - --- - -Q8: So how do I use GLUT and Motif together? - -A8: You don't. To make GLUT simple and easy-to-program, GLUT - supplies its own event processing loop. This makes it nearly - impossible to combine GLUT and Motif. If you want Motif, you - probably want a full-featured toolkit, and you ship skip GLUT and - implement your application directly in Motif. - --- - -Q9: I have a bunch of simple OpenGL programs using the aux toolkit - descibed in the OpenGL Programming Guide (the "red" book). Is - there an easy way to convert them to GLUT? - -A9: In the progs/redbook directory, there is a script named - aux2glut.sed It will give you a good start at converting simple - aux calls to their GLUT equivalents. It is a good start, but - you'll still have to hand edit some things. - - Here's a usage example: - - sed -f aux2glut.sed < aux_prog. > glut_prog.c - - Note that the second edition of the OpenGL Programming Guide uses - GLUT and not the aux toolkit. - --- - -Q10: I have IRIX 6.2 (or 6.1) and I'd like to write GLUT programs - run in true 64-bit and/or benefit from the recent, faster MIPS - processors. How do I build GLUT to support these newer - application binary interfaces (ABIs)? - -A10: See README.irix6 - --- - -Q11: I'd like to write FORTRAN programs using GLUT and OpenGL. How - do I use GLUT with FORTRAN? - -A11: GLUT does have a FORTRAN language binding. - - For instructions for building a binding library for Silicon - Graphics workstations, see README.fortran - - If you want to use GLUT and OpenGL or Mesa on with Fortran on - non-SGI systems, I recommend that you check, William Mitchell's - f90gl home page: http://math.nist.gov/f90gl/ - --- - -Q12: I'd like to use the sophisticated input devices that GLUT - supports. What should I know about this? - -A12: GLUT uses the X Input extension to talk to these devices. Because - the X Input extension gives a framework for supporting input - devices, but does not manadate how particular devices are - supported, it is possible that each vendor supports the same input - devices differently. - - GLUT as implemented supports SGI's means of advertising the - tablet, dial & button box, and Spaceball devices. I am not sure - how other vendors support these devices. For the details of SGI's - support for these devices, see README.xinput Since there is no - benefit in each vendor supporting these same devices in a - different an incompatible way, I encourage other vendors to - implement their devices in this same manner. - --- - -Q13: Can I use GLUT and Open Inventor? - -A13: Yes. See the README.inventor file. Also, some source code - examples can be found at progs/inventor - - Because the Open Inventor development enviornment is not supported - on all systems, the Inventor example programs are not built by - default, and the Makefile there only support SGI systems. - --- - -Q14: I have Sun workstation, and it is supposed to support overlays. - So why does GLUT not use them? - -A14: GLUT uses the SERVER_OVERLAY_VISUALS convention that advertises - overlay visuals. Most major workstation vendors support this - convention (DEC, HP, IBM, SGI), but Sun only support the - SERVER_OVERLAY_VISUALS in their latest Creator 3D hardware. - --- - -Q15: The stroke font used for GLUT looks familar. Where did it come - from? - -A15: The data for the "stroke roman" font is lifted from the X11R5 - PEX sample implementation. - --- - -Q16: I read in the NOTICE file that you are writing a book on - programming OpenGL for the X Window System. Where can I get it? - -A16: My book titled "Programming OpenGL for the X Window System" was - released in August of 1996. The book is published by - Addison-Wesley and the ISBN is 0-201-48359-9. If you have seen - the "red" and "blue" OpenGL books, this book looks very similar, - but has a green cover. More information can be found at: - - http://reality.sgi.com/mjk_asd/OpenGLforX.html - http://aw.com/devpress/titles/48359.html - - The book includes a tutorial chapter introducing the entire GLUT - API. Another chapter uses GLUT-based examples to explain various - OpenGL rendering features. An appedix describes the GLUT API - in detail. If you use GLUT, this book will be very helpful. - - A Japanese translation is also available now (ISBN4-7952-9703-7). - --- - -Q17: You mention an unnamed bu "very large window system software - vendor" as the reason portable GLUT programs should not directly - include and directly. What's the vendor and - what are the details? - -A17: Microsoft. It's version of requires to be - included before can be included because of Microsoft - function declaration conventions. Sigh. - --- - -Q18: I want my GLUT program to read and send information over a socket - to some other program. How do I do this in in GLUT? - -A18: You can not do it currently. I am considering such support for - a possible GLUT 4.0. I'd like to have a portable solution. - - What you'd like is a callback that would tell you when a socket is - ready for reading and writing. I'm hoping to find a way to - support this in an operating system independent manner. Does - anyone know of a good portable interface for networked bytestream - connections? - - For now, you've got the source code to GLUT and you could hack it - into GLUT for whatever particular interface your operating system - provides. - --- - -Q19: Where's the best place to ask questions about GLUT or OpenGL? Can - I just email them to you? - -A19: While I may try to return email if I have time, the best place - is the comp.graphics.api.opengl newsgroup. This gives a lot more - people a chance to answer your question and you'll probably get an - answer much faster than sending me email. Plus, I may not know - the answer though someone on the "net" may know it. - --- - -Q20: My workstation doesn't have OpenGL. Where can I get a free copy - to use with GLUT? - -A20: OpenGL is licensed by Silicon Graphics and is not available as - "free" or "public domain" software, but workstation vendors - typically bundle OpenGL software with their workstation. However, - there is a package called Mesa written by Brian Paul at the - University of Wisconsin that implements the OpenGL API. (To be - branded as "OpenGL", an implementation must be licensed _and_ pass - the Architectural Review Board's conformance suite, so Mesa is not - an official "OpenGL" implementation.) Mesa does work with GLUT. - - Mesa 2.5 and beyond include GLUT with the Mesa source code - distribution. - --- - -Q21: I hear GLUT 3.0 has overlay support. Where is an example? - -A21: Look at progs/examples/zoomdino.c for an example of using overlays - for rubber-banding and display of a help message, both in the - overlays. Also, test/over_test.c exercises all of the overlay - routines. - --- - -Q22: I get BadMatch X protocol errors when I run GLUT programs. What gives? - -A22: There is a bug in the Solaris 2.4 and 2.5 implementation of -XmuLookupStandardColormap (fixed in Solaris 2.6). When you compile GLUT -on Solaris 2.4 or 2.5, please apply the following patch and compile -with -DSOLARIS_2_4_BUG to workaround the problem. See the comment in -the patch below. This code is already in GLUT 3.1. - -*** glut_win.c Wed Apr 24 14:06:08 1996 ---- glut_win.c.bad Wed Apr 24 14:03:58 1996 -*************** -*** 398,414 **** - case TrueColor: - case DirectColor: - *colormap = NULL; /* NULL if RGBA */ -- #ifndef SOLARIS_2_4_BUG -- /* Solaris 2.4 has a bug in its XmuLookupStandardColormap -- implementation. Please compile your Solaris 2.4 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 creates a corrupted -- RGB_DEFAULT_MAP property. Note that this workaround -- prevents Colormap sharing between applications, perhaps -- leading unnecessary colormap installations or colormap -- flashing. */ - status = XmuLookupStandardColormap(__glutDisplay, - vi->screen, vi->visualid, vi->depth, XA_RGB_DEFAULT_MAP, - /* replace */ False, /* retain */ True); ---- 398,403 ---- -*************** -*** 423,429 **** - return; - } - } -- #endif - /* If no standard colormap but TrueColor, just make a - private one. */ - /* XXX Should do a better job of internal sharing for ---- 412,417 ---- - --- - -Q23: What is new in GLUT 3.1? - -A23: GLUT 3.1 is largely a maintence release. There are some new programs, a - few minor GLUT library bug fixes, but mostly GLUT 3.1 is to make sure GLUT - builds cleanly on various platforms like SunOS, HP/UX, Solaris, and Linux. - See the CHANGES file included in the distribution for more details. - --- - -Q24: How do I make Linux shared libraries for GLUT? - -A24: Peter F. Martone (pmarton@mailbox.bgsu.edu) has written some - instructions for making a Linux shared library for GLUT. You can grab - the instructions for doing so from - http://pizza.bgsu.edu/cgi-bin/cgiwrap/~pmarton/makeMainIndex - --- - -Q25: What is new in GLUT 3.2? - -A25: Like GLUT 3.1, GLUT 3.2 is a maintence release. Along with bug - fixes to the core GLUT library, many new GLUT example programs - have been added. The portability of the examples has been - improved so that most should build using Windows 95 and NT. - Also, GLUT API man pages are now included. See the CHANGES file - included in the distribution for more details. - --- - -Q26: I've heard GLUT 3.2 has man pages. How do I use them? - -A26: Please see the README.man file for details. The easiest way for - SGI users to get the man pages is to install the "glut_dev.man.glut" - subsystem included with the pre-compiled SGI GLUT images. - --- - -Q27: What is the MESA_SWAP_HACK in GLUT 3.2? How does it help Mesa - users avoid excessive window redraws? - -A27: The GLX specification states that the state of a window's back - color buffer after a glXSwapBuffers is undefined. However, the - freeware Mesa implementation of the OpenGL API always leaves - the back buffer with its previous contents (ie, it simply - "copies" the back buffer contents to the front buffer). - - Because Mesa lacks hardware acceleration and is often slow to - redraw a window, this presents the opportunity to speed - redrawing a window damaged by window system interactions by - simply calling glXSwapBuffers again. - - If you set the MESA_SWAP_HACK enviornment variable, GLUT 3.2 - will try to repair double buffered windows not otherwise - needing a redisplay because of glutPostRedisplay by calling - glXSwapBuffers when Mesa is the OpenGL implementation being - used and the last display callback called glutSwapBuffers. - - In general, this means if you see MESA_SWAP_HACK when using - Mesa, double buffered GLUT programs will redraw very quickly - after being damaged but still operate well if they've been - correctly written to use glutPostRedisplay to trigger - application required redraws. - - I encourage all Mesa users to set the MESA_SWAP_HACK environment - variable. - --- - -Q28: I try to run the examples in progs/advanced but they don't work - for lack of image files. Where can I get those files? - -A28: Yes, the image files these examples use are large and were - seperated out from the main GLUT source code distribution. - Get the glut_data.tar.gz file from where you got your - GLUT distribution. Untar these data files over your glut - distribution so the "data" directory is at the same level - as "progs". Then do a "make links" in the progs/advanced - directory to make symbolic links. - - See the progs/advanced/README file for more details. - --- - -Q29: Why doesn't GLUT programs compiled on IRIX 6.4 or 6.3 work - earlier releases? - -A29: First, SGI never guarantees that an executable built on a later - IRIX release will work on an earlier release. Sometimes it works; - more often than not it does not. GLUT takes advantage of a new X - optimization in IRIX 6.3 called "fast atoms". This optimization - lets X clients determine common atom values without an X server - round-trip. This helps X performance. - - If you compile the GLUT library on an IRIX 6.3 or IRIX 6.4 - machine, the library will support fast atoms. This will mean that - if you run executables linked against the "fast atom enabled" - version of the GLUT library, you'll get a run-time link error - saying something like: - - 17062:glut_example: rld: Fatal Error: attemped access to - unresolvable symbol in projtex: _XSGIFastInternAtom - - Do not be alarmed. If you want, you can recompile the GLUT - library with the -DNO_FAST_ATOMS and get a version of the library - that doesn't have the support so that GLUT executables built with - a library compiled without "fast atoms" can work on earlier IRIX - releases. Note that even if you do compile with -DNO_FAST_ATOMS, - there is still no guarantee that an IRIX executable compiled on a - newer release will actually work on an older release (but at - least you'll have a chance!). - - Note that the precompiled images lack "fast atoms" support so - they will work fine with IRIX releases before IRIX 6.3 and 6.4. - --- - -Q30: Can I get a version of GLUT for the Power Macintosh? - -A30: Conix Graphics has released a port of GLUT - 3.2 I believe. Try checking the Conix Graphics web site - http://www.conix3d.com for current info. - --- - -Q31: What is new in GLUT 3.4? - -A31: GLUT 3.4 is an incremental release. An Ada binding for SGI - machines is included along with an Ada example. Many new sample - programs. Several such as dinoshade.c demonstrate real-time - rendering techniques relevant for games. Examples using Sam - Leffler's libtiff library for loading, drawing and writing TIFF - image files. GLUT version of the facial animation "geoview" - decibed in the Parke and Water's book "Computer Facial - Animation". New API interfaces to be made part of the GLUT 4 API - update (not yet fully finalized though). glutInitDisplayMode for - example. Improved portability and a few bug fixes. - --- - -Q32: I installed SGI's Cosmo3D beta and GLUT, and I'm having problems - compiling GLUT programs. What gives? - -A32: Unfortunately, SGI's Cosmo3D beta images install a DSO for GLUT - (libglut.so) that does not fully implement the GLUT API and lacks - some of the newer GLUT 3.4 entrypoints as well. The problem is - that a DSO takes preferenc over an archive when you compile with - an option like "-lglut". While the Cosmo3D beta installs a - libglut.so, my GLUT distribution and images only build and - install an archive. There are a couple of solutions: - - 1) Explicitly link your GLUT programs with libglut.a (the - archive version of GLUT). For example, put "/usr/lib/libglut.a" - on your compile line instead of "-lglut". - - 2) You can convert the GLUT 3.4 archive into a DSO: - - su - cd /usr/lib - mv libglut.so libglut.so.cosmo - cc -32 -o libglut.so -shared -all libglut.a - cd /usr/lib32 - mv libglut.so libglut.so.cosmo - cc -n32 -o libglut.so -shared -all libglut.a - - The new DSO generated from the GLUT 3.4 DSO should be - compatible with the old Cosmo version. This will mean that - all the GLUT programs you build will need the libglut.so on - the machine they run on. - - 3) Remove the Cosmo3D beta. - --- - -Q33: What is new in GLUT 3.5? - -A33: The most significant change with GLUT 3.5 is unifying the X - Window System and Win32 versions of GLUT into a single source - code distribution. Henk Kok contributed several cool new demos - (rollercoaster, chess, opengl_logo). All the demos build cleanly - under Win32. Lots of bug fixes. Interesting new OpenGL rendering - techniques are demonstrated in a number of new examples: - movelight, dinoshade, halomagic, rendereps, movelight, shadowfun, - torus_test, underwater, texfont, reflectdino. - --- - -Q34: How do I use the precompiled Win32 GLUT DLLs with Borland compilers? - -A34: The "implib" command should let you generate a GLUT.LIB that works - with Borland compilers from the precompiled GLUT.DLL Here is an - example: - - C:\>implib -f C:\GLUT\LIB\GLUT.LIB C:\WINDOWS\SYSTEM\GLUT.DLL - - After this, then link C:\GLUT\LIB\GLUT.LIB to your project - - Likewise, for the Microsoft GLUT32.DLL: - - C:\>implib -f C:\GLUT\LIB\GLUT32.LIB C:\WINDOWS\SYSTEM\GLUT32.DLL - - Suggested by Carter . - - The "-f" option is suggested by Kris Matson . - --- - -Q35: Are there any C++ wrappers for GLUT? - -A35: Yes, George Stetten (stetten@acpub.duke.edu) of Duke University has - made available the GlutMaster C++ wrapper classes. See: - - http://www.duke.edu/~stetten/GlutMaster/GlutMaster.html - http://www.duke.edu/~stetten/GlutMaster/README.txt - --- - -Q36: How do you avoid the Console window appearing when you compiler a - Win32 GLUT application with Microsoft compilers? - -A36: Try using the following Microsoft Visual C compiler flags: - - /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup - - These are linker options... if main or wmain are defined, MSVC - build a CONSOLE app by default; hence the need for - /SUBSYSTEM:WINDOWS. if /SUBSYSTEM:WINDOWS is defined, MSVC - expects WinMain or wWinMain to be defined; hence the need to - /ENTRY:mainCRTStartup (eg the entry point is the usual C main). - - stdout/stderr are [apparently] not "attached"; output via printf - is simply "eaten" unless redirected at the command-line or by a - parent program. - - Information thanks to Jean-David Marrow (jd@riverbed.com). - --- - -Q37: What is new in GLUT 3.6? - -A37: GLUT 3.6 adds/improves the following: - - o Win32 GLUT performance improvements. - - o Win32 GLUT confromance improvements. - - o Linas Vepstas's GLE Tubing & Extrusions Library is - included with GLUT, including nroff man pages and - demo programs. - - o More GLUT-based OpenGL demos and examples (and bug - fixes to existing demos and examples). - - o glutPostWindowRedisplay and glutPostWindowOverlayRedisplay - entry points added for posting redisplays on non-current - windows (for faster multi-window updates). - - o Bug fixes and minor functionality improvements to Tom Davis's - micro-UI GLUT-based user interface toolkit. - - See the "CHANGES" file that accompanies GLUT 3.6 for a fuller - list of changes. - --- - -Q38: On my IRIX 6.3 SGI O2 workstation, why do I get errors about - "glXChannelRectSyncSGIX" being unresolved building certain GLUT - examples? - -A38: The original IRIX 6.3 release for the O2 workstation accidently - advertised support for the dynamic video resize extension supported - on SGI's high-end InfiniteReality graphics system. This confuses - GLUT into providing its dynamic video resize sub-API. - - This problem is fixed by patch 1979 (and its successor patches). - Because patch 1979 (and its successor patches) also help O2's - OpenGL rendering performance, I strongly recommend requesting - the latest O2 OpenGL patch from SGI customer support. - - Once the patch is installed, your build errors will be resolved. - --- - -Q39: Using GLUT with Microsoft OpenGL 1.1 and compiling GLUT with - Borland compilers causes GLUT applications to generates floating - point exceptions. What can be done? - -A39: Under certain conditions (e.g. while rendering solid surfaces - with lighting enabled) MS 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. A function of - Borland run-time library allows to mask exceptions. Modify - glut_init.c by adding the following lines to the function - __glutOpenWin32Connection. - -#ifdef __BORLANDC__ -#include - _control87(MCW_EM,MCW_EM); -#endif - - With this modification, compiling the GLUT library with your - Borland compilers and using GLUT with Microsoft OpenGL should - work fine. - - GLUT 3.7 will have this change already included in the GLUT - library source code distribution. - - This advice comes from Pier Giorgio Esposito (mc2172@mclink.it). - --- - -Q40: Using GLUT with SGI OpenGL for Windows and compiling with - Borland compilers results in linking problems. What can be - done? - -A40: Some care must be taken when linking GLUT.DLL or programs - that use it with Borland compilers. The import library - IMPORT32.LIB already contains the functions exported by - the Microsoft OpenGL libraries, thus SGI OpenGL import - libraries must be listed _before_ import32 in the Borland - tlink command line. - - This advice comes from Pier Giorgio Esposito (mc2172@mclink.it). - --- - -Q41: What is GameGLUT? - -A41: GameGLUT is a set of API extension to GLUT to be released in - GLUT 3.7. These extensions provide keyboard release callbacks, - disabling of keyboard auto repeat, joystick callbacks, and full - screen resolution setting. - --- - -Q42: I use a callback registered with "atexit" to clean up my temporary - files and stuff. Under Windows, my atexit callback is not being - called if you quit by application by clicking the X box or using - the Windows Close border menu. What gives? - -Q42: Windows has multiple C run-time libraries (CRTs). The GLUT.DLL - is linked against the MSVCRT.LIB CRT (for multi-threaded, DLL - programs). The OPENGL.DLL and GLU.DLL libraries are also linked - with MSVCR.LIB. By default, the Visual C++ compiler links with - the LIBC.LIB CRT (for single-threaded, non-DLL programs). - - Static data in one CRT is not shared with other CRTs in the - Win32 environment. In general, mixing CRTs in a single program - is bad. In particular, an atexit callback registered with one - CRT will not be called when the exit routine of another CRT is - called. - - The "/MD" option forces use of the MSVCRT.LIB (the one GLUT.DLL is - linked with). If you use the "/MD" option, then atexit callbacks - should occur just fine even if you application exits through a - GLUT fatal error or the user exits from the Windows close border - or clicks the X button. - - Do not use the "/ML" or "/MT" options when linking GLUT programs - under Win32. The options link with the LIBC.LIB and LIBCMT.LIB - libraries respectively. - - Be aware you can also link with these libraries explicitly (instead - of using the options) by putting LIBC.LIB or LIBCMT.LIB on your - command line. Avoid this practice since it will also cause - problems. - --- - -Q43: My Unix GLUT program has a variable named "select". When I run - my program it crashes on startup in code that is not mine. - What gives? - -Q43: There is a Unix system call called "select" that is used by both - the GLUT library and the Xlib library. If you name a variable - "select", the linker will pre-empt the C library version of select - with your variable. When GLUT or Xlib try to call the "select" - routine, they jump to your data instead and crash your application. - - The crash will be deep in GLUT or Xlib and this will likely be - very confusing. - - Rename your variable to a different name, and the problem will - be fixed. - - Note that other names such as "connect", "socket", "read", and - "write" will cause similiar problems if used as variable names or - routine names in GLUT programs. If in doubt, try doing "man XXX" - where XXX is the suspicious variable name. If you get the manual - page for a C library function, pick another name. - --- - -Q44: I use Imakefiles to build GLUT. How do I make shared/debug/profiling - versions of the various GLUT libraries? - -A44: This is much easier as of GLUT 3.7. Now, just edit the various - GLUT library Imakefiles (that is "lib/*/Imakefile") and set the - lines to say: - -#define DoNormalLib YES -#define DoSharedLib YES -#define DoDebugLib YES -#define DoProfileLib YES - - Change any of these to "NO" if you don't want the respective - type of library built. - - The do: - - cd lib - make clean - make Makefiles - make depend - make clean - make - - That's all there is to it. If you have problems with this procedure, - the most likely cause is that your Imake configuration files do not - have the appropriate rules for your compiler for building - shared/debug/profiling libraries. - - Check your Library.tmp file (often found in - /usr/lib/X11/config/Library.tmpl) if you have problems. - - (The previous README.linux and README.ibm-shlib files are - deprecated in favor of the advise above.) - --- - -- Mark diff --git a/lib/glut-3.7.6/Glut.cf b/lib/glut-3.7.6/Glut.cf deleted file mode 100644 index 34fd17a4f..000000000 --- a/lib/glut-3.7.6/Glut.cf +++ /dev/null @@ -1,197 +0,0 @@ -XCOMM Copyright (c) Mark J. Kilgard, 1994, 1997, 1998. -XCOMM Glut.cf - GLUT distribution Imakefile configuration info - -/* LINUX USERS: Remove the "/* " characters in the #define line - below this comment in order to use Linux shared objects. */ -/* #define UseSharedObjects 1 /**/ - -/* MESA USERS: Remove the "/* " characters in the #define line - below this comment and change the "#define MesaDir" line to - match the top-level directory of your Mesa source tree. */ -/* #define UseMesa 1 /**/ -#define MesaDir /usr/Mesa-3.0 /* UPDATE ME! */ - -#ifdef UseMesa -XCOMM using Mesa (the freeware OpenGL implementation) by Brian Paul -MESA_DIR = MesaDir -MESA_INCLUDE = -I$(MESA_DIR)/include -MESA_LIB = -L$(MESA_DIR)/lib -MESAGL = $(MESA_LIB) -lMesaGL -MESAGLU = $(MESA_LIB) -lMesaGLU -#endif - -#ifndef MathLibrary /* introduced with X11R6 */ -#define MathLibrary -lm -#endif - -#ifndef SaberProgramTarget /* in X11R5 but removed in X11R6 */ -#define SaberProgramTarget(program,srclist,objlist,locallibs,syslibs) -#endif - -#ifdef SunArchitecture - -/* - * Solaris has a non-standard way of placing libraries - * and header files. This should work for Template Graphics Systems' - * OpenGL implementation, assuming your OGLHOME and OPENWINHOME - * environment variables are set correctly. - */ -EXTRA_INCLUDES = -I$(TOP)/include -I$(OGLHOME)/include -I$(OPENWINHOME)/include $(MESA_INCLUDE) -#ifdef UseMesa -OPENGL = $(MESAGL) -GLU = $(MESAGLU) -#else -OPENGL = -L$(OGLHOME)/lib -lGL -L$(OPENWINHOME) -ldga -GLU = -L$(OGLHOME)/lib -lGLU -#endif -/* XXX Is this right, Template?? */ -INVENTOR = -L$(OGLHOME)/lib -lInventor -GLUT_DEPLIBS = $(DEPGLUT) $(DEPXMULIB) $(DEPXILIB) $(DEPXLIB) -GLUT_LIBS = $(GLUT) $(GLU) $(OPENGL) $(XMULIB) $(XILIB) $(XLIB) MathLibrary -MUI_DEPLIBS = $(DEPMUI) $(DEPGLUT) $(DEPXMULIB) $(DEPXILIB) $(DEPXLIB) -MUI_LIBS = $(MUI) $(GLUT) $(GLU) $(OPENGL) $(XMULIB) $(XILIB) $(XLIB) MathLibrary -GLE_DEPLIBS = $(DEPGLE) $(DEPGLUT) $(DEPXMULIB) $(DEPXILIB) $(DEPXLIB) -GLE_LIBS = $(GLE) $(GLUT) $(GLU) $(OPENGL) $(XMULIB) $(XILIB) $(XLIB) MathLibrary -GLSMAP_DEPLIBS = $(DEPGLSMAP) $(DEPGLUT) $(DEPXMULIB) $(DEPXILIB) $(DEPXLIB) -GLSMAP_LIBS = $(GLSMAP) $(GLUT) $(GLU) $(OPENGL) $(XMULIB) $(XILIB) $(XLIB) MathLibrary - -#else /* Everybody but Sun... */ -#ifdef AlphaArchitecture - -/* Alpha suggestions from Andrej Panjkov (mataap@pop.latrobe.edu.au). */ - -/* Andrej writes: There is a bug in one of the imake configuration - files supplied with Digital Unix 3.2c that will cause the build to - fail. In the file /usr/lib/X11/config/osflib.tmpl, the reference to - libXi.a should be changed to libXi.so (which is in the correct - directory /usr/shlib). Root access is needed to fix this bug. I - don't know if the bug persists in later versions of DU. */ - -#if 0 /* Not using now. */ -/* - * Digital puts all Imake symbols for use with OpenGL in OpenGL.tmpl, so use - * the contents of that file instead of the definitions here. - */ -#include -EXTRA_INCLUDES = GLUTInclude $(MESA_INCLUDE) -#else -EXTRA_INCLUDES = -I$(TOP)/include $(MESA_INCLUDE) -#endif - -INVENTOR = -lInventor - -/* Suggested by Andrej Panjkov (mataap@pop.latrobe.edu.au) */ -DEPGLUTLIB = $(TOP)/lib/glut/libglut.a -GLUTLIB = $(TOP)/lib/glut/libglut.a - -GLUT_LIBS = $(GLUTLIB) $(GLULIB) $(GLLIB) $(XMULIB) $(XILIB) $(XLIB) MathLibrary -GLUT_DEPLIBS = $(DEPGLUTLIB) $(DEPGLULIB) $(DEPGLLIB) $(DEPXMULIB) $(DEPXILIB) $(DEPXLIB) -MUI_LIBS = $(MUI) $(GLUTLIB) $(GLULIB) $(GLLIB) $(XMULIB) $(XILIB) $(XLIB) MathLibrary -MUI_DEPLIBS = $(DEPMUI) $(DEPGLUTLIB) $(DEPGLULIB) $(DEPGLLIB) $(DEPXMULIB) $(DEPXILIB) $(DEPXLIB) -GLE_LIBS = $(GLE) $(GLUTLIB) $(GLULIB) $(GLLIB) $(XMULIB) $(XILIB) $(XLIB) MathLibrary -GLE_DEPLIBS = $(DEPGLE) $(DEPGLUTLIB) $(DEPGLULIB) $(DEPGLLIB) $(DEPXMULIB) $(DEPXILIB) $(DEPXLIB) -GLSMAP_LIBS = $(GLSMAP) $(GLUTLIB) $(GLULIB) $(GLLIB) $(XMULIB) $(XILIB) $(XLIB) MathLibrary -GLSMAP_DEPLIBS = $(DEPGLSMAP) $(DEPGLUTLIB) $(DEPGLULIB) $(DEPGLLIB) $(DEPXMULIB) $(DEPXILIB) $(DEPXLIB) - -#else /* Everybody but Sun or DEC Alpha... */ - -/* - * This should work for normal vendors that put their OpenGL and X - * libraries and headers in standard places (or at least where - * imake configuration files know where they are). - */ - -#ifdef HPArchitecture -/* Nate Robbins (E&S) reports that HP does not have its Xmu.h header in - the standard place. */ -XMU_HEADERS = /usr/contrib/X11R5/include/ -EXTRA_INCLUDES = -I$(TOP)/include -I$(XMU_HEADERS) $(MESA_INCLUDE) -#else -EXTRA_INCLUDES = -I$(TOP)/include $(MESA_INCLUDE) -#endif - -GLUT_DEPLIBS = $(DEPGLUT) $(DEPXMULIB) $(DEPXLIB) -GLUT_LIBS = $(GLUT) $(GLU) $(OPENGL) $(XMULIB) $(XLIB) MathLibrary -#ifdef UseMesa -OPENGL = $(MESAGL) -GLU = $(MESAGLU) -#else -OPENGL = -lGL -GLU = -lGLU -#endif -INVENTOR = -lInventor -GLUT_DEPLIBS = $(DEPGLUT) $(DEPXMULIB) $(DEPXILIB) $(DEPXLIB) -GLUT_LIBS = $(GLUT) $(GLU) $(OPENGL) $(XMULIB) $(XILIB) $(XLIB) MathLibrary -MUI_DEPLIBS = $(DEPMUI) $(DEPGLUT) $(DEPXMULIB) $(DEPXILIB) $(DEPXLIB) -MUI_LIBS = $(MUI) $(GLUT) $(GLU) $(OPENGL) $(XMULIB) $(XILIB) $(XLIB) MathLibrary -GLE_DEPLIBS = $(DEPGLE) $(DEPGLUT) $(DEPXMULIB) $(DEPXILIB) $(DEPXLIB) -GLE_LIBS = $(GLE) $(GLUT) $(GLU) $(OPENGL) $(XMULIB) $(XILIB) $(XLIB) MathLibrary -GLSMAP_DEPLIBS = $(DEPGLSMAP) $(DEPGLUT) $(DEPXMULIB) $(DEPXILIB) $(DEPXLIB) -GLSMAP_LIBS = $(GLSMAP) $(GLUT) $(GLU) $(OPENGL) $(XMULIB) $(XILIB) $(XLIB) MathLibrary - -#endif -#endif - -#ifdef UseSharedObjects -# for Linux shared objects - -#ifndef AlphaArchitecture -DEPGLUT = $(TOP)/lib/glut/libglut.so /* from PFM 6/31/96 */ -GLUT = $(TOP)/lib/glut/libglut.so /* from PFM 6/31/96 */ -#endif -DEPMUI = $(TOP)/lib/mui/libmui.so -MUI = $(TOP)/lib/mui/libmui.so -DEPGLE = $(TOP)/lib/gle/libgle.so -GLE = $(TOP)/lib/gle/libgle.so -DEPGLSMAP = $(TOP)/lib/glsmap/libglsmap.so -GLSMAP = $(TOP)/lib/glsmap/libglsmap.so - -#else -# for static objects - -#ifndef AlphaArchitecture -DEPGLUT = $(TOP)/lib/glut/libglut.a -GLUT = $(TOP)/lib/glut/libglut.a -#endif -DEPMUI = $(TOP)/lib/mui/libmui.a -MUI = $(TOP)/lib/mui/libmui.a -DEPGLE = $(TOP)/lib/gle/libgle.a -GLE = $(TOP)/lib/gle/libgle.a -DEPGLSMAP = $(TOP)/lib/glsmap/libglsmap.a -GLSMAP = $(TOP)/lib/glsmap/libglsmap.a - -#endif - -CXXEXTRA_INCLUDES = -I/usr/include/CC $(EXTRA_INCLUDES) $(MESA_INCLUDE) -GLUT_INVENTOR_DEPLIBS = $(GLUT_DEPLIBS) -GLUT_INVENTOR_LIBS = $(INVENTOR) $(GLUT_LIBS) - -#ifdef SGIArchitecture -/* For SGI C++ compiler, need to search extra dirs in make depend */ -#undef CplusplusDependIncludes -#define CplusplusDependIncludes -I$(ROOT)/usr/include/CC -#endif - -#ifndef NullParameter -/* - * NullParameter should be #define'ed to nothing in Imake.rules, but it has - * been reported to me that this is not always the case. If not, let - * Glut.cf #define it to nothing. - */ -#define NullParameter -#endif - -#define GlutTestProgramTarget(name) NormalProgramTarget(name,name.o,$(GLUT_DEPLIBS),$(GLUT_LIBS),NullParameter) -#define MuiTestProgramTarget(name) NormalProgramTarget(name,name.o,$(MUI_DEPLIBS),$(MUI_LIBS),NullParameter) -#define SimpleGlutProgramTarget(name) NormalProgramTarget(name,name.o,$(GLUT_DEPLIBS),$(GLUT_LIBS),NullParameter) -#define NormalGlutProgramTarget(name,objs) NormalProgramTarget(name,objs,$(GLUT_DEPLIBS),$(GLUT_LIBS),NullParameter) -#define SimpleMuiProgramTarget(name) NormalProgramTarget(name,name.o,$(MUI_DEPLIBS),$(MUI_LIBS),NullParameter) -#define NormalMuiProgramTarget(name,objs) NormalProgramTarget(name,objs,$(MUI_DEPLIBS),$(MUI_LIBS),NullParameter) -#define SimpleGleProgramTarget(name) NormalProgramTarget(name,name.o,$(GLE_DEPLIBS),$(GLE_LIBS),NullParameter) -#define NormalGleProgramTarget(name,objs) NormalProgramTarget(name,objs,$(GLE_DEPLIBS),$(GLE_LIBS),NullParameter) -#define SimpleGlsmapProgramTarget(name) NormalProgramTarget(name,name.o,$(GLSMAP_DEPLIBS),$(GLSMAP_LIBS),NullParameter) -#define NormalGlsmapProgramTarget(name,objs) NormalProgramTarget(name,objs,$(GLSMAP_DEPLIBS),$(GLSMAP_LIBS),NullParameter) -#define SimpleGlutInventorProgramTarget(name) NormalCplusplusProgramTarget(name,name.o,$(GLUT_INVENTOR_DEPLIBS),$(GLUT_INVENTOR_LIBS),NullParameter) -#define NormalGlutInventorProgramTarget(name,objs) NormalCplusplusProgramTarget(name,objs,$(GLUT_INVENTOR_DEPLIBS),$(GLUT_INVENTOR_LIBS),NullParameter) - -XCOMM end Glut.cf - GLUT distribution Imakefile configuration info diff --git a/lib/glut-3.7.6/IAFA-PACKAGE b/lib/glut-3.7.6/IAFA-PACKAGE deleted file mode 100644 index d201d716a..000000000 --- a/lib/glut-3.7.6/IAFA-PACKAGE +++ /dev/null @@ -1,9 +0,0 @@ -Title: OpenGL Utility Toolkit (GLUT) -Version: 3.7 -Description: A 3-D graphics library which uses the OpenGL API. -Author: Mark J. Kilgard mjk@nvidia.com -Maintained-by: Mark J. Kilgard mjk@nvidia.com -Maintained-at: http://reality.sgi.com/opengl/glut3/glut3.html -Platforms: Any Unix system with ANSI C and X and OpenGL or Mesa -OR- Windows 95 or NT PC. -Copying-Policy: Freely redistributable, not public domain, see NOTICE -Keywords: Mesa, OpenGL, GLUT, windowing library diff --git a/lib/glut-3.7.6/Imakefile b/lib/glut-3.7.6/Imakefile deleted file mode 100644 index c80a7d909..000000000 --- a/lib/glut-3.7.6/Imakefile +++ /dev/null @@ -1,7 +0,0 @@ -#define IHaveSubdirs -#define PassCDebugFlags - -SUBDIRS = lib test progs - -MakeSubdirs($(SUBDIRS)) -DependSubdirs($(SUBDIRS)) diff --git a/lib/glut-3.7.6/NOTICE b/lib/glut-3.7.6/NOTICE deleted file mode 100644 index 60309d4df..000000000 --- a/lib/glut-3.7.6/NOTICE +++ /dev/null @@ -1,15 +0,0 @@ -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, 1997, 1998 -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. - -I acknowledge the assistance provided by William Mitchell in developing -GLUT's "fbc" interface for use by the f90gl Fortran 90 binding. - -- Mark Kilgard - August 28, 1998 diff --git a/lib/glut-3.7.6/Portability.txt b/lib/glut-3.7.6/Portability.txt deleted file mode 100644 index e0663afcb..000000000 --- a/lib/glut-3.7.6/Portability.txt +++ /dev/null @@ -1,135 +0,0 @@ - -This note collects a bunch of portability issues that I've found in -ensuring that GLUT example source code is truly portable. I encourage -contributors to the GLUT source code distribution to review these -guidelines: - - o Avoid variables, routines, or structure elements named "new" or - "delete" to avoid these C++ keywords. - - o Avoid the "near" and "far" keywords introduced by Intel. Instead - try using "nnear" and "ffar" since these are common names in - graphics programming. - - o Do not assume the defines M_PI. Instead, after including - , say the following: - ------------------------------------------------------------------------ -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif ------------------------------------------------------------------------ - - o If you use the GLU tessellator, when you define or declare - callback functions, use the "CALLBACK" calling convention - identifier. This is required for the callbacks to work correctly - under Win32. After including , say the following: - ------------------------------------------------------------------------ -/* Win32 calling conventions. */ -#ifndef CALLBACK -#define CALLBACK -#endif ------------------------------------------------------------------------ - - Then using a GLU tessellator begin callback as an example say: - ------------------------------------------------------------------------ -static void CALLBACK -begin(GLenum type, void *polyData) -{ - glBegin(type); -} ------------------------------------------------------------------------ - - When registering the callback, say: - - gluTessCallback(tess, GLU_TESS_BEGIN_DATA, (void (CALLBACK*)()) &begin); - - o Avoid the floating point trig and exponential functions such as - "sinf", "cosf", "expf", etc. These functions are reserved by ANSI - C but not mandated. Instead use the double precision mandated - functions "sin", "cos", "exp", etc. Some systems also support - "fcos", "fsin", etc; definitely avoid these. - - o Do not use the EXIT_FAILURE and EXIT_SUCCESS constants defined by - ANSI C. Some old systems do not define these in stdlib.h but are - otherwise ANSI C compliant. Instead use "exit(1);" for failure - and "exit(0);" for success. - - o Use "rand" to generate random number. Do not use "random" or "drand48" - since they are not supported under Win32. - - o Avoid using "gettimeofday" or other system dependent routines to - determine a timestamp. Instead use - - timestamp = glutGet(GLUT_ELAPSED_TIME); - - o If you need to read a directory, check out the "win32_direct.h" - file used in progs/demos/walker/walker.c - - o Try to avoid including since it is not in Win32. - - o If your program runs in single buffered mode, be sure to call - glFlush() at the end of your display callback. Some OpenGL - implementations need a glFlush for pending graphics commands - to fully execute. Note that glutSwapBuffers performs an - implicit glFlush operation. - - o Avoid using strdup because strdup is not an actual ANSI C or - POSIX required routine. Indeed, OpenVMS does not support it. - And standard Linux libc only advertises strdup in string.h - if BSD or SVID routines are requested. Instead, directly include - the routine below: - ------------------------------------------------------------------------ -static char * -stralloc(const char *string) -{ - char *copy; - - copy = malloc(strlen(string) + 1); - if (copy == NULL) - return NULL; - strcpy(copy, string); - return copy; -} ------------------------------------------------------------------------ - - o Do not #include ; some platforms like IBM's AIX do not - have a getopt.h header file. Instead, you can portabily rely on - getopt() to be declared in on Unix machines. Still, - Win32 does not have a builtin getopt. - - o IBM's AIX defines "quad" to be a 64-bit type in . - Avoid using quad as a variable name. - - o HP's HP-UX 10.20 may have a type or otherwise define "time". - Avoid using time as a variable name. XXX GLUT doesn't do this - well currently. - - o GLU 1.2 introduced the types GLUquadric, GLUnurbs, and - GLUtesselator as aliases for the older GLUquadricObj, GLUnurbsObj, - and GLUtesselatorObj type names. Avoid the newer type names; use - the older names with the "Obj" suffix since all versions of GLU - support the Obj-suffixed types. (Note: yes, the GLU API has - GLUtesselatorObj is spelled incorrectly - tessellator should have - two l's.) - - o Do not include to get the standard C malloc/free - routines. Instead, include . FreeBSD and probably - other systems lack a . - - o Linux systems prototype a function called "idle" in . - This can result in an error in GLUT programs that name their - idle callback "idle" and include . Do no use a function - named idle if you include . - - o The SunOS 5.6 version of requires that also - be included because the assert() macro uses stderr. Be sure to - include along with everywhere to avoid - build errors on SunOS 5.6. - -- Mark Kilgard - October 17, 1998 diff --git a/lib/glut-3.7.6/README b/lib/glut-3.7.6/README deleted file mode 100644 index 4dbf9730a..000000000 --- a/lib/glut-3.7.6/README +++ /dev/null @@ -1,186 +0,0 @@ - -This directory and its subdirectories contains the OpenGL Utility -Toolkit (GLUT) distribution. See the NOTICE for legal terms. - -VERSION: - -Release 3.7, Novermber 22, 1998. - -SUPPORTED PLATFORMS: - -This distribution should compile for: - - o Microsoft Windows 95, Windows 98, or Windows NT with Microsoft - OpenGL 1.1 (bundled standard with these systems) or SGI OpenGL - for Windows (aka Cosmo OpenGL). - - o SGI workstation running IRIX 5.2 or higher supporting OpenGL, - including 64-bit and N32 support IRIX 6.1, 6.2, 6.3, 6.4, and - 6.5. - - o DEC Alpha workstation running OSF/1 and OpenVMS with Open3D - layered product. - - o IBM RS/6000 workstations running AIX with OpenGL support. - - o Metro Link's Metro OpenGL for Linux. - - o Sun's OpenGL implementation for its workstations or Template - Graphics Software's OpenGL for Sun workstations. - - o Mesa 3.x (and 2.x) for Unix workstations, including Linux PCs - and SunOS 4.1.x. - - o Most other Unix workstations supporting either OpenGL or Mesa. - -MICROSOFT WINDOWS 95 and NT BUILD INSTRUCTIONS: <-- IMPORTANT! - -Read the "README-win32.txt" accompanying file. - -MESA BUILD INSTRUCTIONS: <-- IMPORTANT! - -Mesa 3.x and higher provide an implementation of GLUT in Mesa's -"MesaDemos" source code distribution. The official GLUT source -code distribution may or may not be more current than the version -of the GLUT library included with the MesaDemos distribution. - -Please note that even though the MesaDemos distribution contains -the source code for the GLUT library, the many GLUT source code -examples and demos in the GLUT source code distribution are not -part of Mesa. - -To ease building the GLUT source code distribution for Mesa, -users, see the note in the Glut.cf file in this directory. If -you uncomment the line saying "#define UseMesa 1" and then -set the "MesaDir" #define to the location of your Mesa source -code distribution, GLUT should build easily with Mesa. - -MAKEFILE GENERATION TO BUILD GLUT: <-- IMPORTANT! - -Use "mkmkfiles.sgi" to put Makefiles using the SGI Makefile conventions -in place. Use "mkmkfiles.imake" to put Makefiles generated from -Imakefiles in place. Run one of these two commands in this directory, -then do a "make". - -FREQUENTLY ASKED QUESTIONS ABOUT GLUT: - -See FAQ.glut - -CONTENTS OVERVIEW BY DIRECTORY: - - GL - GLUT interface header files - - lib - source code for GLUT libraries - - glut - GLUT library implementation - - mui - Tom Davis's GLUT-based micro-UI user interface library - - gle - Linas Vepstas's GLE Tubing & Extrusions library - - fglut - GLUT FORTRAN bindings (IRIX only) - glut.n32 - "N32" version of the GLUT library (IRIX only). - fglut.n32 - "N32" version of the GLUT library (IRIX only). - glut.n64 - 64-bit version of the GLUT library (IRIX only). - fglut.n64 - 64-bit version of the GLUT library (IRIX only). - mui.n32 - "N32" version of micro-UI library (IRIX only). - mui.n64 - 64-bit version of micro-UI library (IRIX only). - gle.n32 - "N32" version of GLE Tubing & Extrusions library (IRIX only). - gle.n64 - 64-bit version of GLE Tubing & Extrusions library (IRIX only). - - test - test programs - - glut - GLUT library tests - - mui - micro-UI library test - - progs - programs using GLUT - - examples - misc. GLUT examples - - redbook - examples from the OpenGL Programming Guide ported to GLUT - - advanced - GLUT examples demonstrating advanced OpenGL rendering - techniques. The programs are largely based on the SIGGRAPH '96 - course taught by David Blythe and Tom McReynolds. - - contrib - contributed GLUT examples - - demos - more involved OpenGL demos using GLUT - - fortran - GLUT FORTRAN examples - - glc - An example of using OpenGL's Character Rendering API - included in IRIX 6.2 and beyond. - - inventor - Two GLUT-based Open Inventor examples. - - mesademos - Ports to GLUT of programs developed by Brian Paul - that are distributed with Mesa. - - texfont - Tools and demos for using texture mapped fonts. - - tiff - Examples of using Sam Leffler's libtiff library for - reading, display, and writing TIFF image files. - - ada - Examples using the GLUT ADA binding. - -DOCUMENTATION: - -See the other README files in this directory. There is a complete -specification for GLUT API version 3 in PostScript available by -anonymous ftp accompanying this distribution. GLUT includes a full set -of nroff man pages for the GLUT API version 3. nroff man pages for -GLE are also included. - -ACCOMPANYING DATA FILES: - -Another separate GLUT data distribution contains a "data" subdirectory -containing large data files used by some of the examples in the -"progs/advanced" subdirectory. See the file "progs/advanced/README" -for more details. - -GLUT MAILING LIST: - -To subscribe to the GLUT mailing list, send an electronic mail message -with the word "subscribe" in the first line of the message to -glut-request@perp.com Messages intended for the GLUT mailing list can -be sent to glut@prep.com - -A SHAMELESS BUT HOPEFULLY HELPFUL PLUG: - -I've written a book titled "Programming OpenGL for the X Window System" -(ISBN: 0-201-48359-9) published by Addison-Wesley. It includes both a -complete tutorial and documentation for GLUT, as well as a full -explanation of using OpenGL with the X Window System's Xlib and -Xt/Motif interfaces. If you use GLUT, I believe you'll find this -book very informative. See: - - http://reality.sgi.com/mjk/OpenGLforX.html - -BUG REPORTING: - -Send bug reports by electronic mail to mjk@nvidia.com (I now work -for NVIDIA Corporation, not Silicon Graphics). - -Questions of a general interest about GLUT will be answered on the -comp.graphics.api.opengl newsgroup. - -ACKNOWLEDGEMENTS: - -Much thanks to OpenGL engineers at DEC, IBM, Microsoft, SGI, Sun, and -TGS. Of particular mention are Brian Paul from the University of -Wisconsin, Nate Robins at the Univeristy of Utah, and Craig Groeschel -of Metro Link Inc. for helping me ensure the portability of this code -to non-SGI graphics platforms. Also thank you to GLUT users who -supplied me with feedback and bug fixes. - -Nate Robin's effort to combine his Win32 GLUT with GLUT 3.5 were most -excellent. Tom Davis contributed the micro-UI library. GLUT 3.5's -testing on PCs was greatly aided by Petri Nordlund, Brian Buchner, -Leath Muller, Stephen Speicher, and I've probably missed others. Henk -Kok is responsible for the several way cool demos in GLUT 3.5. Thanks -for your help! - -- Mark Kilgard - mjk@nvidia.com diff --git a/lib/glut-3.7.6/README-win32.txt b/lib/glut-3.7.6/README-win32.txt deleted file mode 100644 index 67c8d413e..000000000 --- a/lib/glut-3.7.6/README-win32.txt +++ /dev/null @@ -1,613 +0,0 @@ - - - GLUT for Win32 README - --------------------- - - -VERSION/INFO: - - This is GLUT for Win32 version 3.7.6 as of Nov 8th 2001. - See the COPYRIGHT section for distribution and copyright notices. - Send all bug reports and questions for this version of GLUT to - Nate Robins [nate@pobox.com]. - - For more information about GLUT for Win32, see the web page: - www.pobox.com/~nate/glut.html or subscribe to the GLUT for Win32 - mailing list by sending e-mail to majordomo@perp.com with - "subscribe glut" in the body of the message. - - For general information about GLUT, see the GLUT web page: - http://reality.sgi.com/opengl/glut3/glut3.html and be sure to - check the GLUT FAQ first for any questions that you may have: - http://reality.sgi.com/opengl/glut3/glut-faq.html - - -COMPILING/INSTALLATION: - - o Precompiled versions of the DLL and import library can be - found on the GLUT for Win32 web page mentioned above. - - o Microsoft Developer Studio 6 workspace and project files have - been included in the source code distribution. - - To build the glut dll: - First, open Microsoft Developer Studio. - Then, select File -> Open Workspace and find the glut.dsw file - in the file dialog and double-click on it. - Finally, select Build -> Build glut32.dll. - When the build is finished, it will copy: - glut32.dll to %WinDir%\System, - glut32.lib to $(MSDevDir)\..\..\VC98\lib, and - glut.h to $(MSDevDir)\..\..\VC98\include\GL. - - Additional workspace files have been included in the progs, test - and lib directories to build the progs, tests and libs respectively. - - -BORLAND NOTES: - - From what I understand, Borland supplies a utility that - converts Microsoft Visual C++ .libs into Borland compatible - files. Therefore, the best method for Borland users is - probably to get the precompiled versions of the library and - convert the library. To create an import library for Borland - from the DLLs, use the following command (from a command prompt): - IMPLIB glut32.lib glut32.dll - If IMPLIB crashes when called this way, try - IMPLIB glut32.lib glut32.def - using the glut32.def file in this distribution. - - -FORTRAN NOTES: - - Bill Mitchell [william.mitchell@nist.gov] has put considerable - effort into getting GLUT to work with different compilers for - Fortran 90. He indicates that you should copy the f90glut.h - file to your $(MSDevDir)\..\..\VC98\include\GL directory. - Then, just build GLUT as usual. The Fortran 90 interface, f90gl, - can be obtained at http://math.nist.gov/f90gl and contains - installation instructions and usage examples. - - -MISC NOTES: - - o Overlay support is not implemented, nor are there any plans to - implement it in the near future. - - o To customize the windows icon, you can use the resource name - GLUT_ICON. For example, create an icon named "glut.ico", and - create a file called glut.rc that contains the following: - GLUT_ICON ICON glut.ico - then compile the glut.rc file with the following: - rc /r glut - and link the resulting glut.res file into your executable - (just like you would an object file). - Alternatively, you can simply add the glut.rc file to your - project if you are using Microsoft Developer Studio. - - -IMPLEMENTATION DEPENDENT DIFFERENCES: - - There are a few differences between the Win32 version of GLUT - and the X11 version of GLUT. Those are outlined here. Note - that MOST of these differences are allowed by the GLUT - specification. Bugs and unsupported features are outlined in - the UNSUPPORTED/BUGS section. - - o glutInit: - The following command line options have no meaning (and are - ignored) in GLUT for Win32: - -display, -indirect, -direct, -sync. - - o glutInitWindowPosition, glutPositionWindow: - Win32 has two different coordinate systems for windows. - One is in terms of client space and the other is the whole - window space (including the decorations). If you - glutPositionWindow(0, 0), GLUT for Win32 will place the - window CLIENT area at 0, 0. This will cause the window - decorations (title bar and left edge) to be OFF-SCREEN, but - it gives the user the most flexibility in positioning. - HOWEVER, if the user specifies glutInitWindowPosition(0, 0), - the window is placed relative to window space at 0, 0. - This will cause the window to be opened in the upper left - corner with all the decorations showing. This behaviour is - acceptable under the current GLUT specification. - - o glutSetIconTitle, glutSetWindowTitle: - There is no separation between Icon title and Window title - in Win32. Therefore, setting an icon title in Win32 has - no effect. - - o glutSetCursor: - As indicated in the GLUT specification, cursors may be - different on different platforms. This is the case in GLUT - for Win32. For the most part, the cursors will match the - meaning, but not necessarily the shape. Notable exceptions - are the GLUT_CURSOR_INFO & GLUT_CURSOR_SPRAY which use the - crosshair cursor and the GLUT_CURSOR_CYCLE which uses the - 'no' or 'destroy' cursor in Win32. - - o glutVisibilityFunc: - Win32 seems to be unable to determine if a window is fully - obscured. Therefore, the visibility of a GLUT window is - only reflected by its Iconic, Hidden or Shown state. That - is, even if a window is fully obscured, in GLUT for Win32, - it is still "visible". - - o glutEntryFunc: - Window Focus is handled differently in Win32 and X. - Specifically, the "window manager" in Win32 uses a "click to - focus" policy. That is, in order for a window to receive - focus, a mouse button must be clicked in it. Likewise, in - order for a window to loose focus, a mouse button must be - clicked outside the window (or in another window). - Therefore, the Enter and Leave notification provided by GLUT - may behave differently in the Win32 and in X11 versions. - There is a viable workaround for this. A program called - "Tweak UI" is provided by Microsoft which can be used to - change the focus policy in Win32 to "focus follows mouse". - It is available from the Microsoft Web Pages: - http://www.microsoft.com/windows/software/PowerToy.htm - - o glutCopyColormap: - GLUT for Win32 always copies the colormap. There is never - any sharing of colormaps. This is probably okay, since - Win32 merges the logical palette and the physical palette - anyway, so even if there are two windows with totally - different colors in their colormaps, Win32 will find a - (hopefully) good match between them. - - o glutIdleFunc + menus: - The glut idle function will NOT be called when a menu is - active. This causes all animation to stop when a menu is - active (in general, this is probably okay). Timer - functions will still fire, however. If the timer callback - draws into the rendering context, the drawing will not show - up until after the menu has finished, though. - - -UNSUPPORTED/BUGS: - - o glutAttachMenu: - Win32 only likes to work with left and right mouse buttons. - Especially so with popup menus. Therefore, when attaching - the menu to the middle mouse button, the LEFT mouse button - must be used to select from the menu. - - o glutSpaceball*, glutButtonBox*, glutTablet*, glutDials*: - None of the special input devices are supported at this - time. - - o When resizing or moving a GLUT for Win32 window, no updating - is performed. This causes the window to leave "tracks" on - the screen when getting bigger or when previously obscured - parts are being revealed. I put in a bit of a kludgy - workaround for those that absolutely can't have the weird - lines. The reshape callback is called multiple times for - reshapes. Therefore, in the reshape callback, some drawing - can be done. It should probably be limited to a color buffer - clear. - - o The video resizing capabilities of GLUT 3.3+ for X11 is - currently unimplemented (this is probably ok, since it - really isn't part of the spec until 4.0). I doubt that - this will ever be part of GLUT for Win32, since there is no - hardware to support it. A hack could simply change the - resolution of the desktop. - - -CHANGES/FIXES: - - (Nov 8, '01) - x Released 3.7.6 - - (Nov 8, '01) - x Changed fullscreen mode from TOPMOST back to simply TOP, since - (it turns out) many people use windows atop a GLUT window. - - (Nov 8, '01) - x Added code to prevent CPU spiking when no idle function is - registered. Otherwise, if an idle function is registered, spike - CPU so that the idle function gets all the attention it needs and - if this is a problem on the program side, the user can stick a - sleep() in their idle function. I believe that this strikes the - best balance betweeen GLUT being fast, and also being "nice" to - other processes. Thanks to James Wright for reporting this bug. - - (Nov 8, '01) - x Fixed bug in motion callback handler which wasn't setting the - current window, so multiple window apps (e.g., any GLUI app) - wouldn't get the callback correctly. - - (Oct 4, '01) - x Fixed bug in glutEnterGameMode() that caused new windows to not - be in "fullscreen" mode, so they got window decorations. - - (Oct 4, '01) - x Fixed bug in glutEnterGameMode() that caused new windows to not - be in "fullscreen" mode, so they got window decorations. - - (Oct 3, '01) - x Fixed bug in getVisualInfoFromString(): visuals not reloaded on - display mode change. Reload visuals each time they are queried. - This fixes a problem with Win32 because the list of availabe Visuals - (Pixelformats) changes after a change in displaymode. The problem - occurs when switching to gamemode and back. Thanks to Michael - Wimmer for pointing this out & providing the fix. - - (Oct 3, '01) - x Fixed bug in XGetVisualInfo(): pixelformats enumerated incorrectly. - Passing 0 as a pixelformat index to DescribePixelFormat gives - unpredictible results (e.g., this fails on the Voodoo opengl32.dll - and always reports 0 as the last available pixelformat index). - Thanks to Michael Wimmer for pointing this out & providing the fix. - - (Oct 3, '01) - x Fixed bug in glXGetConfig(): pixelformats enumerated incorrectly. The - test was OpenGL support OR draw to window, but should be AND. Thanks - to Michael Wimmer for pointing this out & providing the fix. - - (Sep 28, '01) - x Fixed glutChangeToSubMenu()/glutChangeToMenuEntry() bug where if you - went back and forth between a submenu and a plain entry, the submenu - wouldn't be updated properly. - - (Sep 28, '01) - x glutSetIconTitle() is now a nop. - - (Sep 28, '01) - x glutFullScreen() now sets the window as TOPMOST, therefore, the - window will always be on top (this essentially disables alt-tabbing). - - (Sep 28, '01) - x The key repeat ignore flag is now honored correctly. - - (Sep 28, '01) - x Key presses are now reported more accurately and fully, in - particular, modified up events (i.e., SHIFT-2) are now reported - correctly. - - (Sep 28, '01) - x Subwindows nested arbitrarily deep get their keyboard callbacks - correctly now. - - (Sep 28, '01) - x Major rewrite of the window procedure code to clean it up and make - way for other bug fixes. - - (Sep 23, '01) - x Fixed noof example program to use RAND_MAX instead of assumed - max of 2147483647.0. (Now it looks _much_ better!) - - (Sep 22, '01) - x Fixed sunlight example program. globe.raw data file was corrupt, - added a new one. - - (Sep 22, '01) - x Fixed zcomposite example program to print message if overlay - support is not found (instead of crashing). - - (Jan 22, '01) - x Fixed malloc(0) bug in Win32 version of XGetVisualInfo. Thanks - to Kekoa Proudfoot for bringing this to my attention. - - (Dec 12, '00) - x Added data files for the advanced & advanced97 programs. - - (Dec 12, '00) - x Added Developer Studio 6 project and workspace files for pretty - much everything (the stuff left out was usually unix specific). - - (Dec 7, '00) - x Fixed several compilation problems & corrupt files. Thanks to - Alexander Stohr for bringing these to my attention and providing - detailed fixes. - - (Dec 6, '00) - x Fixed compiler support for lcc. Thanks to Gordon for bringing - this to my attention and debugging fixes. - - (Nov 8, '00) - x Fixed submenu problem (sometimes the menu callback was not - called for valid items). Thanks to Michael Keeley. - - (Oct 16, '00) - x Corrected corrupt duck.iv file. Thanks to Jon Willeke for finding - this problem. - - (Sept 27, '00) - x Fixed bug in processWorkList that could cause a hang. Thanks to - Bill Volz & Daniel Azuma. - - (Sept 26, '00) - x Added mui DLL project file (thanks to DMWeldy@ugsolutions.com). - - (Sept 9, '00) - x Fixed Delete key bug (crash when no keyboard callback was - registered, but a special key callback was). Thanks to - Kent Bowling (kent_bowling@hotmail.com) for finding this bug. - - (May 18, '00) - x Fixed subwindow keyboard callbacks. - - (May 22, '97) - o Menus don't work under Windows 95 - x Fixed! Added a unique identifier to each menu item, and a - search function to grab a menu item given the unique identifier. - - (May 21, '97) - o A few minor bug fixes here and there. - x Thanks to Bruce Silberman and Chris Vale for their help with - this. We now have a DLL! - - (Apr 25, '97) - o DLL version of the library is coming (as soon as I figure out - how to do it -- if you know, let me know). - x Thanks to Bruce Silberman and Chris Vale for their help with - this. We now have a DLL! - - (Apr 24, '97) - x Added returns to KEY_DOWN etc messages so that the F10 key - doesn't toggle the system menu anymore. - - (Apr 7, '97) - o Palette is incorrect for modes other than TrueColor. - x Fixed this by forcing a default palette in modes that aren't - Truecolor in order to 'simulate' it. The applications - program shouldn't have to do this IMHO, but I guess we - can't argue with Microsoft (well, we can, but what good - will it do?). - - (Apr 2, '97) - x Added glut.ide file for Borland users. - - (Apr 2, '97) - x Fixed a bug in the WM_QUERYNEWPALETTE message. Wasn't - checking for a null colormap, then de-ref'd it. Oops. - - (Mar 13, '97) - o glutTimerFunc: - Currently, GLUT for Win32 programs busy waits when there is - an outstanding timer event (i.e., there is no select() - call). I haven't found this to be a problem, but I plan to - fix it just because I can't bear the thought of a busy wait. - x Added a timer event and a wait in the main loop. This fixes - the CPU spike. - - (Mar 11, '97) - x Fixed subwindow visibility. The visibility callback of - subwindows wasn't being called, now it is. - - (Mar 11, '97) - o glutGetHDC, glutGetHWND: - In order to support additional dialog boxes, wgl fonts, and - a host of other Win32 dependent structures, two functions - have been added that operate on the current window in GLUT. - The first (glutGetHDC) returns a handle to the current - windows device context. The second (glutGetHWND) returns - handle to the current window. - x Took these out to preserve GLUT portability. - - (Mar 11, '97) - x Fixed the glutWarpPointer() coordinates. Were relative to - the screen, now relative to window (client area) origin - (which is what they're supposed to be). - - (Mar 11, '97) - o glutCreateMenu, glutIdleFunc: - Menu's are modal in Win32. That is, they don't allow any - messages to be processed while they are up. Therefore, if - an idle function exists, it will not be called while - processing a menu. - x Fixed! I've put in a timer function that fires every - millisecond while a menu is up. The timer function handles - idle and timer events only (which should be the only - functions that are firing when a menu is up anyway). - - (Mar 7 '97) - x Fixed minor bugs tracked down by the example programs. - - (Mar 6, '97) - x Merged 3.3 GLUT for X11 into 3.2 GLUT for Win32. New code - structure allows for EASY merging! - - o In Win32, the parent gets the right to set the cursor of - any of its children. Therefore, a child windows cursor - will 'blink' between its cursor and its parent. - x Fixed this by checking whether the cursor is in a child - window or not. - - (Feb 28 '97) - o On initial bringup apps are getting 2 display callbacks. - x Fixed by the Fev 28 re-write. - - o Some multiple window (not subwindow) functionality is messed up. - See the sphere.exe program. - x Fixed by the Feb 28 re-write. - - o GLUT for Win32 supports color index mode ONLY in a paletted - display mode (i.e., 256 or 16 color mode). - x Fixed this in the re-write. If you can get a color index - visual (pixel format) you can use color index mode. - - (Feb 28 '97) - o Quite a few bugs (and incompatibilities) were being caused - by the structure that I used in the previous port of GLUT. - Therefore I decided that it would be best to "get back to - the roots". I re-implemented most of glut trying to stick - with the structure layed out by Mark. The result is a much - more stable version that passes ALL (!) (except overlay) - the tests provided by Mark. In addition, this new - structure will allow future enhancements by Mark to be - integrated much more quickly into the Win32 version. Also, - I'm now ordering the bugs in reverse, so that the most - recently fixed appear at the top of the list. - - (9/8/96) - o Changed the glutGetModifiers code to produce an error if not - called in the core input callbacks. - - (9/11/96) - o If the alt key is pressed with more than one other modifier key - it acts as if it is stuck -- it stays selected until pressed - and released again. - x Fixed. - - (9/12/96) - o When a submenu is attached to a menu, sometimes a GPF occurs. - Fixed. Needed to set the submenu before referencing it's members. - - o Kenny: Also, one little problem, I attached the menu to the - right-button, but when the left-button is pressed I detach - it to give the right-button new meaning; if I pop-up the menu and I - don't want to select anything, like most users, I click off of the - menu to make it disappear. When I do this, I get a GLUT error and - the program terminates because I am altering the menu attachment - from within the button press while the menu is active. - x Fixed. Needed to finish the menu when the user presses the button, - not just when a button is released. - - o GLUT for Win32 emulates a middle mouse button by checking if - both mouse buttons are down. This causes a lot of problems with - the menu and other multiple mouse button things. - x Fixed. No more middle mouse button emulation. Perhaps it would - be a good idea to emulate the middle mouse button (if not present) - with a key? - - (9/15/96) - o Added code to accept a user defined icon. If no icon is provided, - a default icon is loaded. - - (9/19/96) - o Shane: Command line options seem to be screwed up. (9/13) - x Fixed. The geometry command line was broken, and so was the - gldebug command line. - - o Fixed a bug in the default glut reshape. It was looking for the - parent of the current window and GPF'ing if there wasn't a parent. - Put in a check for a parent, and if none is there, use the - child. - - o Idle function sucks up all processor cycles. (9/8/96) - x I don't know if this is avoidable. If you have a tight rendering - loop, it may be that the processor time is going to be sucked up - no matter what. You can add a sleep() to the end of your render - loop if you would like to yeild to other processes and you don't - care too much about the speed of your rendering loop. If you have - Hardware that supports OpenGL (like a 3Dpro card, or GLint card) - then this should be less of a problem, since it won't be rendering - in software. (9/11/96) - - o If a window is fully obscured by another window, the visibility - callback is NOT called. As far as I can tell, this is a limitation - of the Win32 api, but a workaround is being searched for. (9/8/96) - x Limitation of the Win32 API - - o Fixed the entry functions. They only work if the keyboard focus - changes. Therefore, in most Win32 systems, the mouse must be - pressed outside of the window to get a GLUT_LEFT message and - then pressed inside the window for a GLUT_ENTERED message. - - o Alt modifier key doesn't work with keyboard callback. (9/8/96) - x Probably okay, because the glut spec says that these keys can - be intercepted by the system (which the alt key is...) (9/11/96) - - (11/17/96) - o glutRemoveMenuItem() not working properly. - x Thanks to Gary (grc@maple.civeng.rutgers.edu) for the fix to - this one. - - o Timer functions are messed up. - x Thanks to Joseph Galbraith for the fix to this one. - - (12/9/96) - o One (minor) difference came up between the X version of glut - and the nt one which you should know about. It is not a new - problem, and it concerns co-ords returned to the pointer - callbacks. (glutMotionFunc, glutMouseFunc) - Under X, you get co-ords in the range 0 +/- 2^15, under NT - you get 0..2^16. This is only really a problem when moving - above or to the left of the window. - eg dragging one pixel ABOVE the window will give :- - under x11 : y = -1 - under nt : y = 2^16 -1 - x Put in fix provided by Shane Clauson. - - (12/17/96) - o Idle functions not working properly for multiple windows. - x Fixed this by posting an idle message to every window in the - window list when idle. - - (12/18/96) - o glutSetCursor() was misbehaving (lthomas@cco.caltech.edu). - x Win32 requires that the hCursor member of the window class - be set to NULL when the class is registered or whenever the - mouse is moved, the original cursor is replaced (go - figure!). Now sets the cursor whenever a WM_MOUSEMOVE message - is received, because the WM_SETCURSOR event resets the cursor - even when in the decoration area. - - o Geometry is not being handled quite right. The numbers don't - take into account the window decorations. That is, if I say - make a window 100x100, then the WHOLE window (not just the - client area) is 100x100. Therefore, the client (opengl) area - is smaller than 100x100. (9/8/96) - x Fixed. Added code to subtract the decoration size on glutGet() - and add the decoration size on glutReshapeWindow(). - - o Multiple glutPostRedisplay() calls are NOT being combined. - To get round the "coalesce" problem on glutPostRedisplay, - the easiest solution is to roll-your-own coalesce by - keeping a global "dirty" flag in the app (eg replace all - calls to glutPostRedisplay with image_dirty=TRUE;), and to - handle image_dirty with a single glutPostRedisplay in the - idle callback when required. (erk - but increases - performance for my particular app (a rendering engine on - the end of a pipleine with a stream of graphics updates) by - a couple of orders of magnitude ! ) (9/8/96) - x Added code to coalesce redisplays. Every idle cycle, a - check is made to see which windows need redisplay, if they - need it, a redisplay is posted. The glutPostRedisplay() - call is just a stub that sets a flag. - - -THANKS: - - Special thanks to the following people for extensive testing, - suggestions, fixes and help: - - Alexander Stohr - Shane Clauson - Kenny Hoff - Richard Readings - Paul McQuesten - Philip Winston - JaeWoo Ahn - Joseph Galbraith - Paula Higgins - Sam Fortin - Chris Vale - Bill Mitchell - - and of course, the original author of GLUT: - Mark Kilgard. - - and many others... - - -COPYRIGHT: - -The OpenGL Utility Toolkit distribution for Win32 (Windows NT & -Windows 95) contains source code modified from the original source -code for GLUT version 3.3 which was developed by Mark J. Kilgard. The -original source code for GLUT is Copyright 1997 by Mark J. Kilgard. -GLUT for Win32 is Copyright 1997 by Nate Robins and is not in the -public domain, but it is freely distributable without licensing fees. -It is provided without guarantee or warrantee expressed or implied. -It was ported with the permission of Mark J. Kilgard by Nate Robins. - -THIS SOURCE CODE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER -EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OR MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - -OpenGL (R) is a registered trademark of Silicon Graphics, Inc. diff --git a/lib/glut-3.7.6/README.ada b/lib/glut-3.7.6/README.ada deleted file mode 100644 index 308495c9a..000000000 --- a/lib/glut-3.7.6/README.ada +++ /dev/null @@ -1,42 +0,0 @@ - -GLUT 3.4 was the first release of GLUT to support an Ada language -binding for SGI's Ada run-time and development environment. (With a -bit of work, GLUT could probably be easily be adapted to other Ada -development environments, assuming the environment already has an -OpenGL binding.) - -To use the SGI Ada binding, please make sure that the following GNAT -(SGI's Ada compiler) subsystems are installed on your system: - - Ada Execution-only Environment (eoe) - ------------------------------------- - gnat_eoe.sw.lib - - Ada Development Option (dev) - ----------------------------- - gnat_dev.bindings.GL - gnat_dev.bindings.std - gnat_dev.lib.src - gnat_dev.lib.obj - gnat_dev.sw.gnat - -The GLUT Ada binding was developed and tested with the IRIX 5.3 and 6.2 -gnat_dev and gnat_eoe images (v3.07, built 960827). - -Some fairly simple GLUT examples written in Ada can be found in the -progs/ada subdirectory. GLUT 3.6 expanded the number of Ada example -programs included in the GLUT source code distribution. GLUT's actual -Ada binding is found in the adainclude/GL subdirectory. - -To build the Ada binding and example programs, first build GLUT -normally, then: - - cd adainclude/GL - make glut.o - cd ../../progs/ada - make - -Good luck! - -- Mark Kilgard - November 12, 1997 diff --git a/lib/glut-3.7.6/README.fortran b/lib/glut-3.7.6/README.fortran deleted file mode 100644 index e9f9771bd..000000000 --- a/lib/glut-3.7.6/README.fortran +++ /dev/null @@ -1,190 +0,0 @@ -GLUT Fortran users, - -BUILD INSTRUCTIONS -=================== - -To build the GLUT Fortran API, do the following: - - 1) Make sure you are running IRIX 5.3, 6.1, or 6.2 or higher on - a Silicon Graphics workstation. - - >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - If you are not on an SGI workstation, I suggest you try out - the f90gl, a public domain implementation the official Fortran - 90 bindings for OpenGL. See the web site at: - - http://math.nist.gov/f90gl/ - - f90gl implements a Fortran 90 interface for OpenGL 1.1, GLU 1.2, - GLUT 3.7, and several extensions. f90gl supports both Unix - workstations, Linux PCs, and Windows 95/NT PCs. - - William Mitchell deserves special credit for developing the - f90gl implementation and pushing for a standard OpenGL - Fortran 90 binding. - - Also, note that GLUT 3.7 has a new "friend" interface for use - by f90gl to ensure future interoperability between f90gl - and future GLUT revisions. - <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - - 2) Make sure you have Fortran compilers and OpenGL Fortran - libraries installed (make sure you have the right support - installed for the "object style" you wish to build). - - The following Fortran subsystems are particularly important - to have installed: - - ftn77_dev.sw.util -- utiles for building Fortran to C bindings - gl_dev.sw.fortran -- OpenGL Fortran binding libraries - - 3) Run "mkmkfiles.sgi" in this directory. - - 4) Make sure you have built the "lib/glut" and "lib/fglut" - directories: - - (cd lib/glut; make) - (cd lib/fglut; make) - - 5) Change to one of the GLUT Fortran library directories, - depending on what "object style" you wish to build: - - O32 (old 32-bit ABI) - "cd lib/fglut" - N64 (new 64-bit ABI) - "cd lib/fglut.n64" (IRIX 6.1 & 6.2 only) - N32 (new 32-bit ABI) - "cd lib/fglut.n32" (IRIX 6.2 only) - - (If you are building a given "object style", make sure you - build the accompanying GLUT library implementation. See - README.irix6) - - 6) Execute "make" in the directory. - -NOTES -====== - -All GLUT functionality is available through the GLUT Fortran API. - -A number of example GLUT Fortran examples are built in the directory as -examples of how to write GLUT Fortran programs. - -There are a number of caveats to using the GLUT Fortran API: - - o The GLUT Fortran API is not built by default. - - See the build instructions above. You will need the IRIX Fortran - development option installed. - - o The implementation of the GLUT Fortran API is probably only useful - to IRIX users because the generation of Fortran-to-C wrappers is - inherently dependent on vendor-dependent calling convention - dependencies. - - o The IRIX GLUT Fortran API is implemented as a set of wrappers to - to the GLUT C implementation. As such, there is a very slight - overhead to calling OpenGL routine through the GLUT Fortran - binding (this applies to the OpenGL Fortran wrapper routines as - well). - - o The ARB's official OpenGL Fortran API prefixes every routine and - constant with the letter F. The justification was to avoid name - space collisions with the C names. Nearly all modern Fortran - compilers avoid these name space clashes via other means (underbar - suffixing of Fortran routines is used by most Unix Fortran - compilers). - - The GLUT Fortran API does _not_ use such prefixing conventions - because of the documentation and coding confusion introduced by - such prefixes. Bending over backwards to support anachronistic - compliers does not justify this confusion. - - While the official OpenGL Fortran API, prefixes both routine and - constant names, there is no technical justification for prefixing - constant names. In practice, it creates a reasonable amount of - coding and documentation confusion (the confusion is heightened by - Fortran's default implicit variable initialization so you don't - realize the lack of a constant prefix until run-time) and pushes - names one character towards identifier limits. - - The GLUT distribution supplies its own version of "GL/fgl.h" and - "GL/fglu.h" which does not F-prefix constants. GLUT users are - encouraged to not use the F-prefixed constants. (The GLUT - supplied "GL/fgl.h" also works around problems discussed in the - next bullet.) - - Perhaps the OpenGL ARB will reconsider the F-prefix or (as an - unfortunate compromise) support both F prefixed and non F prefixed - constant names. - - o A OpenGL Fortran API implementation was released with IRIX 5.3 - (it was not previously available in IRIX). While the Fortran - wrappers work, there are a number of difficulties with using the - IRIX 5.3 OpenGL Fortran bindings: - - + Make sure you have the "Fortran 77 OpenGL Graphic Library" - subsystem installed. Its name is: ftn_dev.sw.opengl - - + The OpenGL Fortran man pages incorrectly document a number of - calls taking REAL*4 (real) parameters when they in fact - require REAL*8 (double precision) parameters. An example is - fglviewport. Any OpenGL (or GLU) routine that takes double's - as parameters in the C API, takes REAL*8's in the Fortran - API. Be very careful to use the dble intrinsic whenever - passing non-REAL*8 values to such routines! - - + The OpenGL Fortran man pages also do not add the F-prefixes - to constants discussed in the man pages. Because GLUT - supplies a "GL/fgl.h" without F-prefixes, this should be a - "good thing." - - + The "GL/fgl.h" header file describing the OpenGL Fortran API - contains identifiers over 32 characters long. While the MIPS - Fortran compiler should treat this as a soft warning and - truncate the identifiers to 32 characters, the compiler - generates a fatal error. For this reason, the "GL/fgl.h" in - this distribution has truncated by hand the "GL/fgl.h" - identifiers over 32 characters to 32 characters. - - o IRIX 6.2's OpenGL Fortran binding was quite bungled and is - basically unusable. - - A workaround for this problem is to compile your OpenGL Fortran - programs with the compiler option "-Wl,-ignore_unresolved". This - tells the compiler to ignore unresolved symbols. - - Then, when you run the OpenGL Fortran binaries, tell the run-time - linker (rld) to ignore unresolved symbols like this: - - setenv _RLD_ARGS -ignore_unresolved - - SGI patches 1892 (IRIX 6.3 and 6.4 OpenGL Fortran bindings) and - 2360 (IRIX 6.2 OpenGL Fortran bindings) should fix problems in the - OpenGL Fortran binding library. - - o Because GLUT fonts are compiled into programs and programs - should only have the fonts compiled into them that they use, - GLUT font names like GLUT_BITMAP_TIMES_ROMAN_24 are really - symbols so the linker should only pull in used fonts. - Unfortunately, if a data symbol is declared EXTERNAL, the - IRIX Fortran compiler pulls in the symbol whether the symbol - is used or not. For this reason, "GL/fglut.h" does not - explictly declare EXTERNAL the GLUT font symbols. GLUT - Fortran programmers should explicitly declare EXTERNAL - the GLUT fonts they use. - - o Neither the MicroUI (mui) or Tubing and Extrusion library (gle) - have Fortran bindings. - -INSTALLATION -============= - -If you want to install the resulting archives into the right system -library directories, do the following: - - FOR N32: cp lib/fglut.n32/libfglut.a /usr/lib32 - - FOR N64: cp lib/fglut.n64/libfglut.a /usr/lib64 - -Also, make sure to install the GLUT library implementation versions for -the given object style too. - -- Mark Kilgard diff --git a/lib/glut-3.7.6/README.glut2 b/lib/glut-3.7.6/README.glut2 deleted file mode 100644 index 11d0ce2f2..000000000 --- a/lib/glut-3.7.6/README.glut2 +++ /dev/null @@ -1,84 +0,0 @@ - -CHANGES for GLUT API version 2 -------------------------------- - -GLUT API version 2 should be fully compatible with the GLUT API -version 1. - -Here are the GLUT API version 2 additions in more detail: - - GLUT_MULTISAMPLE - a display mode bit mask for requesting - multi-sampling (hw anti-aliasing) available for Reality Engine - class graphics hardware (IRIX 5.3 has multi-sampling GLX - extension). - - GLUT_STEREO - a display mode bit mask for requesting - a stereo (quad buffering) OpenGL visual. - - glutGet(GLUT_WINDOW_NUM_SAMPLES) - returns number of - samples for multisampling for the window. - - glutGet(GLUT_WINDOW_STEREO) - boolean for it window supports - stereo. - - glutGet(GLUT_ELAPSED_TIME) - an OS-portable way to - get the elapsed time in milliseconds since glutInit - - glutDeviceGet(GLUT_HAS_KEYBOARD) - if keyboard supported. - - glutDeviceGet(GLUT_HAS_MOUSE) - if mouse supported. - - glutDeviceGet(GLUT_HAS_SPACEBALL) - if spaceball supported. - - glutDeviceGet(GLUT_HAS_DIAL_AND_BUTTON_BOX) - if dial and - button box supported. - - glutDeviceGet(GLUT_HAS_TABLET) - if tablet supported. - - glutDeviceGet(GLUT_NUM_MOUSE_BUTTONS) - number of mouse - buttons supported. - - glutDeviceGet(GLUT_NUM_SPACEBALL_BUTTONS) - number of - spaceball buttons supported. - - glutDeviceGet(GLUT_NUM_BUTTON_BOX_BUTTONS) - number of - button box buttons supported. - - glutDeviceGet(GLUT_NUM_DIALS) - number of dials supported. - - glutDeviceGet(GLUT_NUM_TABLET_BUTTONS) - number of table - buttons supported. - - glutSpecialFunc - register callback for keyboard function - and directional keys. - - glutSpaceballMotionFunc - register callback for spaceball - motion. - - glutSpaceballRotateFunc - register callback for spaceball - rotations. - - glutSpaceballButtonFunc - register callback for spaceball - button events. - - glutButtonBoxFunc - register callback for button box button - events. - - glutDialsFunc - register callback for dial motion. - - glutTabletMotionFunc - register callback for tablet motion. - - glutTabletButtonFunc - register callback for tablet button - events. - - glutExtensionSupported - report if a given OpenGL extension - is supported. - -Also there are a handful of minor bug fixes (of course). - -The stereo and multisampling stuff is probably (for now) interesting -mainly to Reality Engine graphics users. The new device support uses -the X Input extension. It works with SGI versions of the devices. I'm -investigating how portable the current code is for other vendor's -advertising of their similar X Input devices. - diff --git a/lib/glut-3.7.6/README.glut3 b/lib/glut-3.7.6/README.glut3 deleted file mode 100644 index c4b17a675..000000000 --- a/lib/glut-3.7.6/README.glut3 +++ /dev/null @@ -1,114 +0,0 @@ - -CHANGES for GLUT API version 3 -------------------------------- - -GLUT API version 3 should be (almost) fully compatible with the -GLUT API version 2. See the GLUT 3 specification for full details. - -Please be aware of two obscure reasons that programs that worked -under GLUT API version 2 may need slight modification for GLUT 3. - - 1) You are now _required_ to have a display callback registered - for any GLUT window displayed to the screen. Otherwise a - fatal error is generated. It would be a bug in your program - otherwise! In conjunction with this, you can no longer - call glutDisplayFunc(NULL) to unregister a display callback. - - 2) It is a fatal error now to modify a GLUT pop-up menu while - menus are in use. There were too many semantic problems with - changing menus that may be currently displayed. To determine - if menus are in use, you can use the "menu use" callback registered - with glutMenuStatusFunc - -Here are the GLUT API version 3 additions in more detail: - - void glutSetCursor(int cursor) - int glutGet(GLUT_WINDOW_CURSOR) - - Provides a way to set (and get) the window's cursor to one - of several enumerated cursor shapes including "none", - "stop-watch", "arrow", "crosshair", "pull left/up/down/etc.", - or "inherit". - - void glutFullScreen(void) - - Attempts to make the window as large as the window system - permits (ie, the screen size). Borders will be automatically - disabled if possible. - - void glutMenuStatus(void (*)(int status, int x, int y)) - - The existing glutMenuState routine's callback did not - provide the X & Y location when the menu state changed - which made it impossible to correctly implement locate - highlight in conjunction with menus. glutMenuStatus - returns the location. - - GLUT_BITMAP_HELVETICA_10 - GLUT_BITMAP_HELVETICA_12 - GLUT_BITMAP_HELVETICA_18 - - New bitmap fonts in a nicer font at nicer sizes. - - int glutStrokeLength(void *, char *string) - int glutBitmapLength(void *, char *string) - - Given a font handle and a string, returns the length in - modelview units or pixels respectively for the string - if rendered with the font. - - int glutCurrentModifiers(void) - - When called from within a keyboard, special keyboard, mouse - button, or mouse callback, returns a bitmask representing - the modifier keys active when the event generating the callback - occured. This will let you implement Alt+ combinations - and such. - - void glutEstablishOverlays(void) - void glutRemoveOverlays(void) - void glutOverlayDisplayFunc(void (*func)(void)) - void glutPostOverlayRedisplay(void) - void glutUseLayer(GLenum layer) - void glutLayerGet(GLenum type) - void glutShowOverlay(void) - void glutHideOverlay(void) - - This API provides a way to "add" an overlay to a GLUT window. - The overlay is like IRIS GL overlay support in that the overlay - completely overlaps the window. You setup the layer with - glutEstablishOverlay. You switch between the normal plane - and overlay using glutUseLayer. You can register an independent - callback for redisplaying the overlay, or use a unified display - callback for both layers. - - I believe this is a very simple overlay facility that will be - readily useful for OpenGL programs wanting access to overlay - planes. - - GLUT_LUMINANCE - - This is a new display mode that is like OpenGL's basic RGBA - color model, but has no Green or Blue components (and Alpha - is optional). The Red component represents single component - (or "luminance") data (between 0.0 and 1.0). The component - is integerized to between 0 and glutGet(GLUT_WINDOW_COLORMAP_SIZE)-1 - and looked up in a per-window color map. GLUT's glutSetColor, - glutGetColor, and glutCopyColormap work on a GLUT_LUMINANCE - window. The initial colormap of GLUT_LUMINANCE windows is - initialized to be a linear gray ramp. - - GLUT_LUMINANCE is very much like a color index window with - an RGBA rendering model. GLUT_LUMINANCE should be useful for - scientific visualization. - - Only some platforms will support GLUT_LUMINANCE. SGI's IMPACT - and InfiniteReality systems should provide GLUT_LUMINANCE - support, however while the GLUT version 3 API provides GLUT_LUMINANCE, - GLUT 3.0 does not implement GLUT_LUMINANCE support. - - Exact specifics of how GLUT_LUMINANCE operates are subject to - change. - -Also there are a handful of minor bug fixes (of course). - diff --git a/lib/glut-3.7.6/README.ibm-shlib b/lib/glut-3.7.6/README.ibm-shlib deleted file mode 100644 index f1c301d8f..000000000 --- a/lib/glut-3.7.6/README.ibm-shlib +++ /dev/null @@ -1,79 +0,0 @@ -The information below is probably no longer accurate. Please see -Question 44 in the "FAQ.glut" file for instructions for building -shared libraries today. - -- Mark Kilgard - November 25, 1998 - --------------- - -IBM users wanting a GLUT shared library, - -I can't verify or maintain this information, but it could be useful to -someone on an IBM wanting to make shared libraries. I pass this -information on in case it is helpful. - -In theory, the better approach would be to use the imake rules for -building shared libraries. - -(I'm not too interestested in maitaining a shared library for GLUT since -the GLUT code is fairly small and portably maintaining shared libraries -for the wide variety of machines GLUT can run on would be a royal pain.) - -- Mark - -From gaitat@innerdoor.austin.ibm.com Thu Jul 20 08:57:58 1995 -Message-Id: <9507201557.AA20345@innerdoor.austin.ibm.com> -To: mjk@sgi.sgi.com -Subject: shared libglut.a -Date: Thu, 20 Jul 95 10:57:49 -0600 -From: Athanasios Gaitatzes - - -For the IBM platform I have made some changes to Glut.cf and lib/glut/Imakefile -in order to get a shared libglut.a so that the executables for the tests -and examples are not very big. -Here are the changes: ---------------------- -diff Glut.cf* -18d15 -< EXTRA_INCLUDES = -DAIXV3 -I$(TOP)/../include -I$(TOP) -21,22d17 -< ARFLAGS = crlo -< RANLIB = true -24d18 -< OPENGL = $(TOP)/../lib/libMesaGL.a -26d19 -< GLU = $(TOP)/../lib/libMesaGLU.a ---------------------- -diff lib/glut/Imakefile* -31,40c31 -< all:: libglut.a -< -< libglut.a: $(OBJS) -< rm -f libglut.a libglut.exp shrglut.o -< echo "#! libglut.a" > libglut.exp -< echo "noentry" >> libglut.exp -< create_exp $(OBJS) >> libglut.exp -< $(CC) -bM:SRE -o shrglut.o $(OBJS) -L../../../lib -lMesaGL -lMesaGLU --lX -mu -lXi -lXext -lX11 -lm -lc -bE:libglut.exp -enoentry -< ar $(ARFLAGS) $@ shrglut.o -< $(RANLIB) $@ ---- -> NormalLibraryTarget(glut,$(OBJS)) - -and you also need a create_exp script somewhere in your path: -#!/bin/csh -/usr/ucb/nm $* | awk '/ [BD] /{print $3}' | sort | uniq - -Athanasios G. Gaitatzes (Saki) -internet: gaitat@vnet.ibm.com | http://www.cs.purdue.edu/homes/mgg/saki.html -internal: gaitat@austin.ibm.com | http://w3.austin.ibm.com/~gaitat -These statements and/or opinions are not necessarily those of IBM - - __ () , - / ) /`-'| _/_ _/_ - /--/ / / __. o / __. / __. _ _ -/ ( o /__-<_(_/|_<_<__(_/|_<__/ |_ -(Please note that I no longer work at Silicon Graphics. Try contacting -Peter Daifuku | The tablet puck buttons. - | | - | <2> <4> | - | | - | <3> | - \ / - +-----+ - - Device manufacturer: Hitachi - -SGI Virtual Pointer: - - Device type: VIRTUAL_POINTER - Device name: virtual_pointer - Classes: 2 - ButtonClass - Number buttons: 5 - ValuatorClass - Device mode: Absolute - Number axes: 2 - Axis 1 - Minimum value: 0 - Maximum value: 1280 - Resolution: 200 - Axis 2 - Minimum value: 0 - Maximum value: 1024 - Resolution: 200 - Physical layout: n/a - Device manufacturer: n/a - Notes: The virtual_pointer allows multiple physical devices to "push" - a single logical pointer. The virtual pointer is an SGI feature. - -SGI Mouse: - - Device type: MOUSE - Device name: mouse - Classes: 2 - ButtonClass - Number buttons: 3 - ValuatorClass - Device mode: Absolute - Number axes: 2 - Axis 1 - Minimum value: 0 - Maximum value: 65000 - Resolution: 200 - Axis 2 - Minimum value: 0 - Maximum value: 65000 - Resolution: 200 - Physical layout: - - +-------------+ - | | - | [1] [2] [3] | <--- Buttons on mouse w/ button numbers. - | | - | | - | | - | | - +-------------+ - - Axis 1 is for mouse motion in X axis (left & right) - Axis 2 is for mouse motion in Y axis (top & bottom) - - Device manufacturer: SGI - - diff --git a/lib/glut-3.7.6/adainclude/GL/glut.adb b/lib/glut-3.7.6/adainclude/GL/glut.adb deleted file mode 100644 index 7ceb3457a..000000000 --- a/lib/glut-3.7.6/adainclude/GL/glut.adb +++ /dev/null @@ -1,118 +0,0 @@ --- Generated from glut.h --- Date: Sun Apr 6 14:32:02 1997 --- --- Command line definitions: --- -D__ANSI_C__ -D_LANGUAGE_C -DGENERATING_ADA_BINDING -D__unix -D__sgi --- -D__mips -D__host_mips -D__EXTENSIONS__ -D__EDG -D__DSO__ -D__STDC__ --- -D_SYSTYPE_SVR4 -D_MODERN_C -D_MIPS_SZPTR=32 -D_MIPS_SZLONG=32 --- -D_MIPS_SZINT=32 -D_MIPS_SIM=_MIPS_SIM_ABI32 --- -D_MIPS_ISA=_MIPS_ISA_MIPS1 -D_MIPS_FPSET=16 -D_MIPSEB --- - -package body Glut is - - function glutCreateWindow (title : String) return Integer is - Result : Integer; - c_title : Interfaces.C.Strings.Chars_Ptr := - Interfaces.C.Strings.New_String (title); - begin - Result := glutCreateWindow (c_title); - Interfaces.C.Strings.Free (c_title); - return Result; - end glutCreateWindow; - - procedure glutInitDisplayString (name : String) is - c_name : Interfaces.C.Strings.Chars_Ptr := - Interfaces.C.Strings.New_String (name); - begin - glutInitDisplayString (c_name); - Interfaces.C.Strings.Free (c_name); - end glutInitDisplayString; - - procedure glutSetWindowTitle (title : String) is - c_title : Interfaces.C.Strings.Chars_Ptr := - Interfaces.C.Strings.New_String (title); - begin - glutSetWindowTitle (c_title); - Interfaces.C.Strings.Free (c_title); - end glutSetWindowTitle; - - procedure glutSetIconTitle (title : String) is - c_title : Interfaces.C.Strings.Chars_Ptr := - Interfaces.C.Strings.New_String (title); - begin - glutSetIconTitle (c_title); - Interfaces.C.Strings.Free (c_title); - end glutSetIconTitle; - - function glutBitmapLength (font : access Interfaces.C.Extensions.Void_Ptr; - str : String) return Integer is - Result : Integer; - c_str : Interfaces.C.Strings.Chars_Ptr := - Interfaces.C.Strings.New_String (str); - begin - Result := glutBitmapLength (font, c_str); - Interfaces.C.Strings.Free (c_str); - return Result; - end glutBitmapLength; - - function glutStrokeLength (font : access Interfaces.C.Extensions.Void_Ptr; - str : String) return Integer is - Result : Integer; - c_str : Interfaces.C.Strings.Chars_Ptr := - Interfaces.C.Strings.New_String (str); - begin - Result := glutStrokeLength (font, c_str); - Interfaces.C.Strings.Free (c_str); - return Result; - end glutStrokeLength; - - procedure glutAddMenuEntry (label : String; value : Integer) is - c_label : Interfaces.C.Strings.Chars_Ptr := - Interfaces.C.Strings.New_String (label); - begin - glutAddMenuEntry (c_label, value); - Interfaces.C.Strings.Free (c_label); - end glutAddMenuEntry; - - procedure glutAddSubMenu (label : String; submenu : Integer) is - c_label : Interfaces.C.Strings.Chars_Ptr := - Interfaces.C.Strings.New_String (label); - begin - glutAddSubMenu (c_label, submenu); - Interfaces.C.Strings.Free (c_label); - end glutAddSubMenu; - - procedure glutChangeToMenuEntry (item : Integer; - label : String; - value : Integer) is - c_label : Interfaces.C.Strings.Chars_Ptr := - Interfaces.C.Strings.New_String (label); - begin - glutChangeToMenuEntry (item, c_label, value); - Interfaces.C.Strings.Free (c_label); - end glutChangeToMenuEntry; - - procedure glutChangeToSubMenu (item : Integer; - label : String; - submenu : Integer) is - c_label : Interfaces.C.Strings.Chars_Ptr := - Interfaces.C.Strings.New_String (label); - begin - glutChangeToSubMenu (item, c_label, submenu); - Interfaces.C.Strings.Free (c_label); - end glutChangeToSubMenu; - - function glutExtensionSupported (name : String) return Integer is - Result : Integer; - c_name : Interfaces.C.Strings.Chars_Ptr := - Interfaces.C.Strings.New_String (name); - begin - Result := glutExtensionSupported (c_name); - Interfaces.C.Strings.Free (c_name); - return Result; - end glutExtensionSupported; - - -end Glut; - diff --git a/lib/glut-3.7.6/adainclude/GL/glut.ads b/lib/glut-3.7.6/adainclude/GL/glut.ads deleted file mode 100644 index ec296c0c2..000000000 --- a/lib/glut-3.7.6/adainclude/GL/glut.ads +++ /dev/null @@ -1,920 +0,0 @@ --- Generated from glut.h --- Date: Sun Apr 6 14:32:02 1997 --- --- Command line definitions: --- -D__ANSI_C__ -D_LANGUAGE_C -DGENERATING_ADA_BINDING -D__unix -D__sgi --- -D__mips -D__host_mips -D__EXTENSIONS__ -D__EDG -D__DSO__ -D__STDC__ --- -D_SYSTYPE_SVR4 -D_MODERN_C -D_MIPS_SZPTR=32 -D_MIPS_SZLONG=32 --- -D_MIPS_SZINT=32 -D_MIPS_SIM=_MIPS_SIM_ABI32 --- -D_MIPS_ISA=_MIPS_ISA_MIPS1 -D_MIPS_FPSET=16 -D_MIPSEB --- - -with Interfaces.C; -with Interfaces.C.Extensions; -with Interfaces.C.Strings; -with GL; -package Glut is - - -- Copyright (c) Mark J. Kilgard, 1994, 1995, 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. * - -- ** - -- 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 : constant := 4; -- VERSION 4 API NOT FINALIZED - --- ** --- 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 : constant := 7; - - -- Display mode bit masks. - - GLUT_RGB : constant := 0; - GLUT_RGBA : constant := 0; - GLUT_INDEX : constant := 1; - GLUT_SINGLE : constant := 0; - GLUT_DOUBLE : constant := 2; - GLUT_ACCUM : constant := 4; - GLUT_ALPHA : constant := 8; - GLUT_DEPTH : constant := 16; - GLUT_STENCIL : constant := 32; - GLUT_MULTISAMPLE : constant := 128; - GLUT_STEREO : constant := 256; - GLUT_LUMINANCE : constant := 512; - - -- Mouse buttons. - - GLUT_LEFT_BUTTON : constant := 0; - GLUT_MIDDLE_BUTTON : constant := 1; - GLUT_RIGHT_BUTTON : constant := 2; - - -- Mouse button callback state. - - GLUT_DOWN : constant := 0; - GLUT_UP : constant := 1; - - -- function keys - - GLUT_KEY_F1 : constant := 1; - GLUT_KEY_F2 : constant := 2; - GLUT_KEY_F3 : constant := 3; - GLUT_KEY_F4 : constant := 4; - GLUT_KEY_F5 : constant := 5; - GLUT_KEY_F6 : constant := 6; - GLUT_KEY_F7 : constant := 7; - GLUT_KEY_F8 : constant := 8; - GLUT_KEY_F9 : constant := 9; - GLUT_KEY_F10 : constant := 10; - GLUT_KEY_F11 : constant := 11; - GLUT_KEY_F12 : constant := 12; - - -- directional keys - - GLUT_KEY_LEFT : constant := 100; - GLUT_KEY_UP : constant := 101; - GLUT_KEY_RIGHT : constant := 102; - GLUT_KEY_DOWN : constant := 103; - GLUT_KEY_PAGE_UP : constant := 104; - GLUT_KEY_PAGE_DOWN : constant := 105; - GLUT_KEY_HOME : constant := 106; - GLUT_KEY_END : constant := 107; - GLUT_KEY_INSERT : constant := 108; - - -- Entry/exit callback state. - - GLUT_LEFT : constant := 0; - GLUT_ENTERED : constant := 1; - - -- Menu usage callback state. - - GLUT_MENU_NOT_IN_USE : constant := 0; - GLUT_MENU_IN_USE : constant := 1; - - -- Visibility callback state. - - GLUT_NOT_VISIBLE : constant := 0; - GLUT_VISIBLE : constant := 1; - - -- Window status callback state. - - GLUT_HIDDEN : constant := 0; - GLUT_FULLY_RETAINED : constant := 1; - GLUT_PARTIALLY_RETAINED : constant := 2; - GLUT_FULLY_COVERED : constant := 3; - - -- Color index component selection values. - - GLUT_RED : constant := 0; - GLUT_GREEN : constant := 1; - GLUT_BLUE : constant := 2; - - -- Layers for use. - - GLUT_NORMAL : constant := 0; - GLUT_OVERLAY : constant := 1; - - -- Stroke font opaque addresses (use constants instead in source code). - - glutStrokeRoman : aliased Interfaces.C.Extensions.Void_Ptr; - pragma Import (C, glutStrokeRoman, "glutStrokeRoman", "glutStrokeRoman"); - - glutStrokeMonoRoman : aliased Interfaces.C.Extensions.Void_Ptr; - pragma Import (C, - glutStrokeMonoRoman, - "glutStrokeMonoRoman", - "glutStrokeMonoRoman"); - - -- Stroke font constants (use these in GLUT program). - -- Bitmap font opaque addresses (use constants instead in source code). - - glutBitmap9By15 : aliased Interfaces.C.Extensions.Void_Ptr; - pragma Import (C, glutBitmap9By15, "glutBitmap9By15", "glutBitmap9By15"); - - glutBitmap8By13 : aliased Interfaces.C.Extensions.Void_Ptr; - pragma Import (C, glutBitmap8By13, "glutBitmap8By13", "glutBitmap8By13"); - - glutBitmapTimesRoman10 : aliased Interfaces.C.Extensions.Void_Ptr; - pragma Import (C, - glutBitmapTimesRoman10, - "glutBitmapTimesRoman10", - "glutBitmapTimesRoman10"); - - glutBitmapTimesRoman24 : aliased Interfaces.C.Extensions.Void_Ptr; - pragma Import (C, - glutBitmapTimesRoman24, - "glutBitmapTimesRoman24", - "glutBitmapTimesRoman24"); - - glutBitmapHelvetica10 : aliased Interfaces.C.Extensions.Void_Ptr; - pragma Import (C, - glutBitmapHelvetica10, - "glutBitmapHelvetica10", - "glutBitmapHelvetica10"); - - glutBitmapHelvetica12 : aliased Interfaces.C.Extensions.Void_Ptr; - pragma Import (C, - glutBitmapHelvetica12, - "glutBitmapHelvetica12", - "glutBitmapHelvetica12"); - - glutBitmapHelvetica18 : aliased Interfaces.C.Extensions.Void_Ptr; - pragma Import (C, - glutBitmapHelvetica18, - "glutBitmapHelvetica18", - "glutBitmapHelvetica18"); - - -- Bitmap font constants (use these in GLUT program). - -- glutGet parameters. - - GLUT_WINDOW_X : constant := 100; - GLUT_WINDOW_Y : constant := 101; - GLUT_WINDOW_WIDTH : constant := 102; - GLUT_WINDOW_HEIGHT : constant := 103; - GLUT_WINDOW_BUFFER_SIZE : constant := 104; - GLUT_WINDOW_STENCIL_SIZE : constant := 105; - GLUT_WINDOW_DEPTH_SIZE : constant := 106; - GLUT_WINDOW_RED_SIZE : constant := 107; - GLUT_WINDOW_GREEN_SIZE : constant := 108; - GLUT_WINDOW_BLUE_SIZE : constant := 109; - GLUT_WINDOW_ALPHA_SIZE : constant := 110; - GLUT_WINDOW_ACCUM_RED_SIZE : constant := 111; - GLUT_WINDOW_ACCUM_GREEN_SIZE : constant := 112; - GLUT_WINDOW_ACCUM_BLUE_SIZE : constant := 113; - GLUT_WINDOW_ACCUM_ALPHA_SIZE : constant := 114; - GLUT_WINDOW_DOUBLEBUFFER : constant := 115; - GLUT_WINDOW_RGBA : constant := 116; - GLUT_WINDOW_PARENT : constant := 117; - GLUT_WINDOW_NUM_CHILDREN : constant := 118; - GLUT_WINDOW_COLORMAP_SIZE : constant := 119; - GLUT_WINDOW_NUM_SAMPLES : constant := 120; - GLUT_WINDOW_STEREO : constant := 121; - GLUT_WINDOW_CURSOR : constant := 122; - GLUT_SCREEN_WIDTH : constant := 200; - GLUT_SCREEN_HEIGHT : constant := 201; - GLUT_SCREEN_WIDTH_MM : constant := 202; - GLUT_SCREEN_HEIGHT_MM : constant := 203; - GLUT_MENU_NUM_ITEMS : constant := 300; - GLUT_DISPLAY_MODE_POSSIBLE : constant := 400; - GLUT_INIT_WINDOW_X : constant := 500; - GLUT_INIT_WINDOW_Y : constant := 501; - GLUT_INIT_WINDOW_WIDTH : constant := 502; - GLUT_INIT_WINDOW_HEIGHT : constant := 503; - GLUT_INIT_DISPLAY_MODE : constant := 504; - GLUT_ELAPSED_TIME : constant := 700; - - -- glutDeviceGet parameters. - - GLUT_HAS_KEYBOARD : constant := 600; - GLUT_HAS_MOUSE : constant := 601; - GLUT_HAS_SPACEBALL : constant := 602; - GLUT_HAS_DIAL_AND_BUTTON_BOX : constant := 603; - GLUT_HAS_TABLET : constant := 604; - GLUT_NUM_MOUSE_BUTTONS : constant := 605; - GLUT_NUM_SPACEBALL_BUTTONS : constant := 606; - GLUT_NUM_BUTTON_BOX_BUTTONS : constant := 607; - GLUT_NUM_DIALS : constant := 608; - GLUT_NUM_TABLET_BUTTONS : constant := 609; - - -- glutLayerGet parameters. - - GLUT_OVERLAY_POSSIBLE : constant := 800; - GLUT_LAYER_IN_USE : constant := 801; - GLUT_HAS_OVERLAY : constant := 802; - GLUT_TRANSPARENT_INDEX : constant := 803; - GLUT_NORMAL_DAMAGED : constant := 804; - GLUT_OVERLAY_DAMAGED : constant := 805; - - -- glutVideoResizeGet parameters. - - GLUT_VIDEO_RESIZE_POSSIBLE : constant := 900; - GLUT_VIDEO_RESIZE_IN_USE : constant := 901; - GLUT_VIDEO_RESIZE_X_DELTA : constant := 902; - GLUT_VIDEO_RESIZE_Y_DELTA : constant := 903; - GLUT_VIDEO_RESIZE_WIDTH_DELTA : constant := 904; - GLUT_VIDEO_RESIZE_HEIGHT_DELTA : constant := 905; - GLUT_VIDEO_RESIZE_X : constant := 906; - GLUT_VIDEO_RESIZE_Y : constant := 907; - GLUT_VIDEO_RESIZE_WIDTH : constant := 908; - GLUT_VIDEO_RESIZE_HEIGHT : constant := 909; - - -- glutUseLayer parameters. - -- glutGetModifiers return mask. - - GLUT_ACTIVE_SHIFT : constant := 1; - GLUT_ACTIVE_CTRL : constant := 2; - GLUT_ACTIVE_ALT : constant := 4; - - -- glutSetCursor parameters. - -- Basic arrows. - - GLUT_CURSOR_RIGHT_ARROW : constant := 0; - GLUT_CURSOR_LEFT_ARROW : constant := 1; - - -- Symbolic cursor shapes. - - GLUT_CURSOR_INFO : constant := 2; - GLUT_CURSOR_DESTROY : constant := 3; - GLUT_CURSOR_HELP : constant := 4; - GLUT_CURSOR_CYCLE : constant := 5; - GLUT_CURSOR_SPRAY : constant := 6; - GLUT_CURSOR_WAIT : constant := 7; - GLUT_CURSOR_TEXT : constant := 8; - GLUT_CURSOR_CROSSHAIR : constant := 9; - - -- Directional cursors. - - GLUT_CURSOR_UP_DOWN : constant := 10; - GLUT_CURSOR_LEFT_RIGHT : constant := 11; - - -- Sizing cursors. - - GLUT_CURSOR_TOP_SIDE : constant := 12; - GLUT_CURSOR_BOTTOM_SIDE : constant := 13; - GLUT_CURSOR_LEFT_SIDE : constant := 14; - GLUT_CURSOR_RIGHT_SIDE : constant := 15; - GLUT_CURSOR_TOP_LEFT_CORNER : constant := 16; - GLUT_CURSOR_TOP_RIGHT_CORNER : constant := 17; - GLUT_CURSOR_BOTTOM_RIGHT_CORNER : constant := 18; - GLUT_CURSOR_BOTTOM_LEFT_CORNER : constant := 19; - - -- Inherit from parent window. - - GLUT_CURSOR_INHERIT : constant := 100; - - -- Blank cursor. - - GLUT_CURSOR_NONE : constant := 101; - - -- Fullscreen crosshair (if available). - - GLUT_CURSOR_FULL_CROSSHAIR : constant := 102; - - -- GLUT initialization sub-API. - - procedure glutInit (argcp : access Integer; - argv : access Interfaces.C.Strings.Chars_Ptr); - pragma Import (C, glutInit, "glutInit", "glutInit"); - - procedure glutInitDisplayMode (mode : Interfaces.C.unsigned); - pragma Import (C, - glutInitDisplayMode, - "glutInitDisplayMode", - "glutInitDisplayMode"); - - procedure glutInitDisplayString (string : Interfaces.C.Strings.Chars_Ptr); - pragma Import (C, - glutInitDisplayString, - "glutInitDisplayString", - "glutInitDisplayString"); - - procedure glutInitWindowPosition (x : Integer; y : Integer); - pragma Import (C, - glutInitWindowPosition, - "glutInitWindowPosition", - "glutInitWindowPosition"); - - procedure glutInitWindowSize (width : Integer; height : Integer); - pragma Import (C, - glutInitWindowSize, - "glutInitWindowSize", - "glutInitWindowSize"); - - procedure glutMainLoop; - pragma Import (C, glutMainLoop, "glutMainLoop", "glutMainLoop"); - - -- GLUT window sub-API. - - function glutCreateWindow - (title : Interfaces.C.Strings.Chars_Ptr) return Integer; - pragma Import (C, glutCreateWindow, "glutCreateWindow", "glutCreateWindow"); - - function glutCreateWindow (title : String) return Integer; - - function glutCreateSubWindow (win : Integer; - x : Integer; - y : Integer; - width : Integer; - height : Integer) return Integer; - pragma Import (C, - glutCreateSubWindow, - "glutCreateSubWindow", - "glutCreateSubWindow"); - - procedure glutDestroyWindow (win : Integer); - pragma Import (C, - glutDestroyWindow, - "glutDestroyWindow", - "glutDestroyWindow"); - - procedure glutPostRedisplay; - pragma Import (C, - glutPostRedisplay, - "glutPostRedisplay", - "glutPostRedisplay"); - - procedure glutPostWindowRedisplay (win : Integer); - pragma Import (C, - glutPostWindowRedisplay, - "glutPostWindowRedisplay", - "glutPostWindowRedisplay"); - - procedure glutSwapBuffers; - pragma Import (C, glutSwapBuffers, "glutSwapBuffers", "glutSwapBuffers"); - - function glutGetWindow return Integer; - pragma Import (C, glutGetWindow, "glutGetWindow", "glutGetWindow"); - - procedure glutSetWindow (win : Integer); - pragma Import (C, glutSetWindow, "glutSetWindow", "glutSetWindow"); - - procedure glutSetWindowTitle (title : Interfaces.C.Strings.Chars_Ptr); - pragma Import (C, - glutSetWindowTitle, - "glutSetWindowTitle", - "glutSetWindowTitle"); - - procedure glutSetWindowTitle (title : String); - - procedure glutSetIconTitle (title : Interfaces.C.Strings.Chars_Ptr); - pragma Import (C, glutSetIconTitle, "glutSetIconTitle", "glutSetIconTitle"); - - procedure glutSetIconTitle (title : String); - - procedure glutPositionWindow (x : Integer; y : Integer); - pragma Import (C, - glutPositionWindow, - "glutPositionWindow", - "glutPositionWindow"); - - procedure glutReshapeWindow (width : Integer; height : Integer); - pragma Import (C, - glutReshapeWindow, - "glutReshapeWindow", - "glutReshapeWindow"); - - procedure glutPopWindow; - pragma Import (C, glutPopWindow, "glutPopWindow", "glutPopWindow"); - - procedure glutPushWindow; - pragma Import (C, glutPushWindow, "glutPushWindow", "glutPushWindow"); - - procedure glutIconifyWindow; - pragma Import (C, - glutIconifyWindow, - "glutIconifyWindow", - "glutIconifyWindow"); - - procedure glutShowWindow; - pragma Import (C, glutShowWindow, "glutShowWindow", "glutShowWindow"); - - procedure glutHideWindow; - pragma Import (C, glutHideWindow, "glutHideWindow", "glutHideWindow"); - - procedure glutFullScreen; - pragma Import (C, glutFullScreen, "glutFullScreen", "glutFullScreen"); - - procedure glutSetCursor (cursor : Integer); - pragma Import (C, glutSetCursor, "glutSetCursor", "glutSetCursor"); - - procedure glutWarpPointer (x : Integer; y : Integer); - pragma Import (C, glutWarpPointer, "glutWarpPointer", "glutWarpPointer"); - - -- GLUT overlay sub-API. - - procedure glutEstablishOverlay; - pragma Import (C, - glutEstablishOverlay, - "glutEstablishOverlay", - "glutEstablishOverlay"); - - procedure glutRemoveOverlay; - pragma Import (C, - glutRemoveOverlay, - "glutRemoveOverlay", - "glutRemoveOverlay"); - - procedure glutUseLayer (layer : GL.GLenum); - pragma Import (C, glutUseLayer, "glutUseLayer", "glutUseLayer"); - - procedure glutPostOverlayRedisplay; - pragma Import (C, - glutPostOverlayRedisplay, - "glutPostOverlayRedisplay", - "glutPostOverlayRedisplay"); - - procedure glutPostWindowOverlayRedisplay (win : Integer); - pragma Import (C, - glutPostWindowOverlayRedisplay, - "glutPostWindowOverlayRedisplay", - "glutPostWindowOverlayRedisplay"); - - procedure glutShowOverlay; - pragma Import (C, glutShowOverlay, "glutShowOverlay", "glutShowOverlay"); - - procedure glutHideOverlay; - pragma Import (C, glutHideOverlay, "glutHideOverlay", "glutHideOverlay"); - - -- GLUT menu sub-API. - - type Glut_proc_1 is access procedure (P1 : Integer); - - function glutCreateMenu (P1 : Glut_proc_1) return Integer; - pragma Import (C, glutCreateMenu, "glutCreateMenu", "glutCreateMenu"); - - procedure glutDestroyMenu (menu : Integer); - pragma Import (C, glutDestroyMenu, "glutDestroyMenu", "glutDestroyMenu"); - - function glutGetMenu return Integer; - pragma Import (C, glutGetMenu, "glutGetMenu", "glutGetMenu"); - - procedure glutSetMenu (menu : Integer); - pragma Import (C, glutSetMenu, "glutSetMenu", "glutSetMenu"); - - procedure glutAddMenuEntry (label : Interfaces.C.Strings.Chars_Ptr; - value : Integer); - pragma Import (C, glutAddMenuEntry, "glutAddMenuEntry", "glutAddMenuEntry"); - - procedure glutAddMenuEntry (label : String; value : Integer); - - procedure glutAddSubMenu (label : Interfaces.C.Strings.Chars_Ptr; - submenu : Integer); - pragma Import (C, glutAddSubMenu, "glutAddSubMenu", "glutAddSubMenu"); - - procedure glutAddSubMenu (label : String; submenu : Integer); - - procedure glutChangeToMenuEntry (item : Integer; - label : Interfaces.C.Strings.Chars_Ptr; - value : Integer); - pragma Import (C, - glutChangeToMenuEntry, - "glutChangeToMenuEntry", - "glutChangeToMenuEntry"); - - procedure glutChangeToMenuEntry (item : Integer; - label : String; - value : Integer); - - procedure glutChangeToSubMenu (item : Integer; - label : Interfaces.C.Strings.Chars_Ptr; - submenu : Integer); - pragma Import (C, - glutChangeToSubMenu, - "glutChangeToSubMenu", - "glutChangeToSubMenu"); - - procedure glutChangeToSubMenu (item : Integer; - label : String; - submenu : Integer); - - procedure glutRemoveMenuItem (item : Integer); - pragma Import (C, - glutRemoveMenuItem, - "glutRemoveMenuItem", - "glutRemoveMenuItem"); - - procedure glutAttachMenu (button : Integer); - pragma Import (C, glutAttachMenu, "glutAttachMenu", "glutAttachMenu"); - - procedure glutDetachMenu (button : Integer); - pragma Import (C, glutDetachMenu, "glutDetachMenu", "glutDetachMenu"); - - -- GLUT callback sub-API. - - type Glut_proc_2 is access procedure; - - procedure glutDisplayFunc (P1 : Glut_proc_2); - pragma Import (C, glutDisplayFunc, "glutDisplayFunc", "glutDisplayFunc"); - - type Glut_proc_3 is access procedure (width : Integer; height : Integer); - - procedure glutReshapeFunc (P1 : Glut_proc_3); - pragma Import (C, glutReshapeFunc, "glutReshapeFunc", "glutReshapeFunc"); - - type Glut_proc_4 is access - procedure (key : Interfaces.C.unsigned_char; x : Integer; y : Integer); - - procedure glutKeyboardFunc (P1 : Glut_proc_4); - pragma Import (C, glutKeyboardFunc, "glutKeyboardFunc", "glutKeyboardFunc"); - - type Glut_proc_5 is access - procedure (button : Integer; state : Integer; x : Integer; y : Integer); - - procedure glutMouseFunc (P1 : Glut_proc_5); - pragma Import (C, glutMouseFunc, "glutMouseFunc", "glutMouseFunc"); - - type Glut_proc_6 is access procedure (x : Integer; y : Integer); - - procedure glutMotionFunc (P1 : Glut_proc_6); - pragma Import (C, glutMotionFunc, "glutMotionFunc", "glutMotionFunc"); - - type Glut_proc_7 is access procedure (x : Integer; y : Integer); - - procedure glutPassiveMotionFunc (P1 : Glut_proc_7); - pragma Import (C, - glutPassiveMotionFunc, - "glutPassiveMotionFunc", - "glutPassiveMotionFunc"); - - type Glut_proc_8 is access procedure (state : Integer); - - procedure glutEntryFunc (P1 : Glut_proc_8); - pragma Import (C, glutEntryFunc, "glutEntryFunc", "glutEntryFunc"); - - type Glut_proc_9 is access procedure (state : Integer); - - procedure glutVisibilityFunc (P1 : Glut_proc_9); - pragma Import (C, - glutVisibilityFunc, - "glutVisibilityFunc", - "glutVisibilityFunc"); - - type Glut_proc_10 is access procedure; - - procedure glutIdleFunc (P1 : Glut_proc_10); - pragma Import (C, glutIdleFunc, "glutIdleFunc", "glutIdleFunc"); - - type Glut_proc_11 is access procedure (value : Integer); - - procedure glutTimerFunc (millis : Interfaces.C.unsigned; - P2 : Glut_proc_11; - value : Integer); - pragma Import (C, glutTimerFunc, "glutTimerFunc", "glutTimerFunc"); - - type Glut_proc_12 is access procedure (state : Integer); - - procedure glutMenuStateFunc (P1 : Glut_proc_12); - pragma Import (C, - glutMenuStateFunc, - "glutMenuStateFunc", - "glutMenuStateFunc"); - - type Glut_proc_13 is access - procedure (key : Integer; x : Integer; y : Integer); - - procedure glutSpecialFunc (P1 : Glut_proc_13); - pragma Import (C, glutSpecialFunc, "glutSpecialFunc", "glutSpecialFunc"); - - type Glut_proc_14 is access - procedure (x : Integer; y : Integer; z : Integer); - - procedure glutSpaceballMotionFunc (P1 : Glut_proc_14); - pragma Import (C, - glutSpaceballMotionFunc, - "glutSpaceballMotionFunc", - "glutSpaceballMotionFunc"); - - type Glut_proc_15 is access - procedure (x : Integer; y : Integer; z : Integer); - - procedure glutSpaceballRotateFunc (P1 : Glut_proc_15); - pragma Import (C, - glutSpaceballRotateFunc, - "glutSpaceballRotateFunc", - "glutSpaceballRotateFunc"); - - type Glut_proc_16 is access procedure (button : Integer; state : Integer); - - procedure glutSpaceballButtonFunc (P1 : Glut_proc_16); - pragma Import (C, - glutSpaceballButtonFunc, - "glutSpaceballButtonFunc", - "glutSpaceballButtonFunc"); - - type Glut_proc_17 is access procedure (button : Integer; state : Integer); - - procedure glutButtonBoxFunc (P1 : Glut_proc_17); - pragma Import (C, - glutButtonBoxFunc, - "glutButtonBoxFunc", - "glutButtonBoxFunc"); - - type Glut_proc_18 is access procedure (dial : Integer; value : Integer); - - procedure glutDialsFunc (P1 : Glut_proc_18); - pragma Import (C, glutDialsFunc, "glutDialsFunc", "glutDialsFunc"); - - type Glut_proc_19 is access procedure (x : Integer; y : Integer); - - procedure glutTabletMotionFunc (P1 : Glut_proc_19); - pragma Import (C, - glutTabletMotionFunc, - "glutTabletMotionFunc", - "glutTabletMotionFunc"); - - type Glut_proc_20 is access - procedure (button : Integer; state : Integer; x : Integer; y : Integer); - - procedure glutTabletButtonFunc (P1 : Glut_proc_20); - pragma Import (C, - glutTabletButtonFunc, - "glutTabletButtonFunc", - "glutTabletButtonFunc"); - - type Glut_proc_21 is access - procedure (status : Integer; x : Integer; y : Integer); - - procedure glutMenuStatusFunc (P1 : Glut_proc_21); - pragma Import (C, - glutMenuStatusFunc, - "glutMenuStatusFunc", - "glutMenuStatusFunc"); - - type Glut_proc_22 is access procedure; - - procedure glutOverlayDisplayFunc (P1 : Glut_proc_22); - pragma Import (C, - glutOverlayDisplayFunc, - "glutOverlayDisplayFunc", - "glutOverlayDisplayFunc"); - - type Glut_proc_23 is access procedure (state : Integer); - - procedure glutWindowStatusFunc (P1 : Glut_proc_23); - pragma Import (C, - glutWindowStatusFunc, - "glutWindowStatusFunc", - "glutWindowStatusFunc"); - - -- GLUT color index sub-API. - - procedure glutSetColor (P1 : Integer; - red : GL.GLfloat; - green : GL.GLfloat; - blue : GL.GLfloat); - pragma Import (C, glutSetColor, "glutSetColor", "glutSetColor"); - - function glutGetColor - (ndx : Integer; component : Integer) return GL.GLfloat; - pragma Import (C, glutGetColor, "glutGetColor", "glutGetColor"); - - procedure glutCopyColormap (win : Integer); - pragma Import (C, glutCopyColormap, "glutCopyColormap", "glutCopyColormap"); - - -- GLUT state retrieval sub-API. - - function glutGet (type_Id : GL.GLenum) return Integer; - pragma Import (C, glutGet, "glutGet", "glutGet"); - - function glutDeviceGet (type_Id : GL.GLenum) return Integer; - pragma Import (C, glutDeviceGet, "glutDeviceGet", "glutDeviceGet"); - - -- GLUT extension support sub-API - - function glutExtensionSupported - (name : Interfaces.C.Strings.Chars_Ptr) return Integer; - pragma Import (C, - glutExtensionSupported, - "glutExtensionSupported", - "glutExtensionSupported"); - - function glutExtensionSupported (name : String) return Integer; - - function glutGetModifiers return Integer; - pragma Import (C, glutGetModifiers, "glutGetModifiers", "glutGetModifiers"); - - function glutLayerGet (type_Id : GL.GLenum) return Integer; - pragma Import (C, glutLayerGet, "glutLayerGet", "glutLayerGet"); - - -- GLUT font sub-API - - procedure glutBitmapCharacter (font : access Interfaces.C.Extensions.Void_Ptr; - character : Integer); - pragma Import (C, - glutBitmapCharacter, - "glutBitmapCharacter", - "glutBitmapCharacter"); - - function glutBitmapWidth - (font : access Interfaces.C.Extensions.Void_Ptr; - character : Integer) return Integer; - pragma Import (C, glutBitmapWidth, "glutBitmapWidth", "glutBitmapWidth"); - - procedure glutStrokeCharacter - (font : access Interfaces.C.Extensions.Void_Ptr; - character : Integer); - pragma Import (C, - glutStrokeCharacter, - "glutStrokeCharacter", - "glutStrokeCharacter"); - - function glutStrokeWidth - (font : access Interfaces.C.Extensions.Void_Ptr; - character : Integer) return Integer; - pragma Import (C, glutStrokeWidth, "glutStrokeWidth", "glutStrokeWidth"); - - function glutStrokeLength - (font : access Interfaces.C.Extensions.Void_Ptr; - string : Interfaces.C.Strings.Chars_Ptr) return Integer; - pragma Import (C, glutStrokeLength, "glutStrokeLength", "glutStrokeLength"); - - function glutBitmapLength - (font : access Interfaces.C.Extensions.Void_Ptr; - string : Interfaces.C.Strings.Chars_Ptr) return Integer; - pragma Import (C, glutBitmapLength, "glutBitmapLength", "glutBitmapLength"); - - -- GLUT pre-built models sub-API - - procedure glutWireSphere (radius : GL.GLdouble; - slices : GL.GLint; - stacks : GL.GLint); - pragma Import (C, glutWireSphere, "glutWireSphere", "glutWireSphere"); - - procedure glutSolidSphere (radius : GL.GLdouble; - slices : GL.GLint; - stacks : GL.GLint); - pragma Import (C, glutSolidSphere, "glutSolidSphere", "glutSolidSphere"); - - procedure glutWireCone (base : GL.GLdouble; - height : GL.GLdouble; - slices : GL.GLint; - stacks : GL.GLint); - pragma Import (C, glutWireCone, "glutWireCone", "glutWireCone"); - - procedure glutSolidCone (base : GL.GLdouble; - height : GL.GLdouble; - slices : GL.GLint; - stacks : GL.GLint); - pragma Import (C, glutSolidCone, "glutSolidCone", "glutSolidCone"); - - procedure glutWireCube (size : GL.GLdouble); - pragma Import (C, glutWireCube, "glutWireCube", "glutWireCube"); - - procedure glutSolidCube (size : GL.GLdouble); - pragma Import (C, glutSolidCube, "glutSolidCube", "glutSolidCube"); - - procedure glutWireTorus (innerRadius : GL.GLdouble; - outerRadius : GL.GLdouble; - sides : GL.GLint; - rings : GL.GLint); - pragma Import (C, glutWireTorus, "glutWireTorus", "glutWireTorus"); - - procedure glutSolidTorus (innerRadius : GL.GLdouble; - outerRadius : GL.GLdouble; - sides : GL.GLint; - rings : GL.GLint); - pragma Import (C, glutSolidTorus, "glutSolidTorus", "glutSolidTorus"); - - procedure glutWireDodecahedron; - pragma Import (C, - glutWireDodecahedron, - "glutWireDodecahedron", - "glutWireDodecahedron"); - - procedure glutSolidDodecahedron; - pragma Import (C, - glutSolidDodecahedron, - "glutSolidDodecahedron", - "glutSolidDodecahedron"); - - procedure glutWireTeapot (size : GL.GLdouble); - pragma Import (C, glutWireTeapot, "glutWireTeapot", "glutWireTeapot"); - - procedure glutSolidTeapot (size : GL.GLdouble); - pragma Import (C, glutSolidTeapot, "glutSolidTeapot", "glutSolidTeapot"); - - procedure glutWireOctahedron; - pragma Import (C, - glutWireOctahedron, - "glutWireOctahedron", - "glutWireOctahedron"); - - procedure glutSolidOctahedron; - pragma Import (C, - glutSolidOctahedron, - "glutSolidOctahedron", - "glutSolidOctahedron"); - - procedure glutWireTetrahedron; - pragma Import (C, - glutWireTetrahedron, - "glutWireTetrahedron", - "glutWireTetrahedron"); - - procedure glutSolidTetrahedron; - pragma Import (C, - glutSolidTetrahedron, - "glutSolidTetrahedron", - "glutSolidTetrahedron"); - - procedure glutWireIcosahedron; - pragma Import (C, - glutWireIcosahedron, - "glutWireIcosahedron", - "glutWireIcosahedron"); - - procedure glutSolidIcosahedron; - pragma Import (C, - glutSolidIcosahedron, - "glutSolidIcosahedron", - "glutSolidIcosahedron"); - - function glutVideoResizeGet (param : GL.GLenum) return Integer; - pragma Import (C, - glutVideoResizeGet, - "glutVideoResizeGet", - "glutVideoResizeGet"); - - procedure glutSetupVideoResizing; - pragma Import (C, - glutSetupVideoResizing, - "glutSetupVideoResizing", - "glutSetupVideoResizing"); - - procedure glutStopVideoResizing; - pragma Import (C, - glutStopVideoResizing, - "glutStopVideoResizing", - "glutStopVideoResizing"); - - procedure glutVideoResize (x : Integer; - y : Integer; - width : Integer; - height : Integer); - pragma Import (C, glutVideoResize, "glutVideoResize", "glutVideoResize"); - - procedure glutVideoPan (x : Integer; - y : Integer; - width : Integer; - height : Integer); - pragma Import (C, glutVideoPan, "glutVideoPan", "glutVideoPan"); - -end Glut; - diff --git a/lib/glut-3.7.6/glut-3.7.6.pro b/lib/glut-3.7.6/glut-3.7.6.pro deleted file mode 100644 index b956c8b90..000000000 --- a/lib/glut-3.7.6/glut-3.7.6.pro +++ /dev/null @@ -1,167 +0,0 @@ -###################################################################### -# Automatically generated by qmake (2.01a) Mi Sep 29 21:06:53 2010 -###################################################################### - -TEMPLATE = lib -TARGET = -DEPENDPATH += . \ - include/GL \ - include/mui \ - lib/fglut \ - lib/gle \ - lib/glsmap \ - lib/glut \ - lib/mui -INCLUDEPATH += . \ - include \ - lib/glut \ - lib/gle \ - lib/glsmap - -# Input -HEADERS += include/GL/fgl.h \ - include/GL/fglu.h \ - include/GL/fglut.h \ - include/GL/glsmap.h \ - include/GL/glut.h \ - include/GL/glutf90.h \ - include/GL/tube.h \ - include/mui/browser.h \ - include/mui/displaylist.h \ - include/mui/gizmo.h \ - include/mui/hslider.h \ - include/mui/mui.h \ - include/mui/textlist.h \ - include/mui/uicolor.h \ - include/mui/vslider.h \ - lib/gle/copy.h \ - lib/gle/extrude.h \ - lib/gle/gutil.h \ - lib/gle/intersect.h \ - lib/gle/port.h \ - lib/gle/rot.h \ - lib/gle/segment.h \ - lib/gle/tube_gc.h \ - lib/gle/vvector.h \ - lib/glsmap/glsmapint.h \ - lib/glut/glutbitmap.h \ - lib/glut/glutint.h \ - lib/glut/glutstroke.h \ - lib/glut/glutwin32.h \ - lib/glut/layerutil.h \ - lib/glut/stroke.h \ - lib/glut/win32_glx.h \ - lib/glut/win32_x11.h \ - lib/mui/dirent32.h -LEXSOURCES += lib/glut/strokelex.l -YACCSOURCES += lib/glut/strokegen.y -SOURCES += lib/fglut/fglut.c \ - lib/fglut/fglut_8x13.c \ - lib/fglut/fglut_9x15.c \ - lib/fglut/fglut_hel10.c \ - lib/fglut/fglut_hel12.c \ - lib/fglut/fglut_hel18.c \ - lib/fglut/fglut_mroman.c \ - lib/fglut/fglut_roman.c \ - lib/fglut/fglut_tr10.c \ - lib/fglut/fglut_tr24.c \ - lib/gle/ex_angle.c \ - lib/gle/ex_cut_round.c \ - lib/gle/ex_raw.c \ - lib/gle/extrude.c \ - lib/gle/intersect.c \ - lib/gle/qmesh.c \ - lib/gle/rot_prince.c \ - lib/gle/rotate.c \ - lib/gle/round_cap.c \ - lib/gle/segment.c \ - lib/gle/texgen.c \ - lib/gle/urotate.c \ - lib/gle/view.c \ - lib/glsmap/smap_buildsmap.c \ - lib/glsmap/smap_context.c \ - lib/glsmap/smap_create.c \ - lib/glsmap/smap_destroy.c \ - lib/glsmap/smap_drawmesh.c \ - lib/glsmap/smap_flag.c \ - lib/glsmap/smap_get.c \ - lib/glsmap/smap_getfunc.c \ - lib/glsmap/smap_gettexdim.c \ - lib/glsmap/smap_gettexobj.c \ - lib/glsmap/smap_getvec.c \ - lib/glsmap/smap_makemesh.c \ - lib/glsmap/smap_nearfar.c \ - lib/glsmap/smap_origin.c \ - lib/glsmap/smap_render.c \ - lib/glsmap/smap_rvec2st.c \ - lib/glsmap/smap_set.c \ - lib/glsmap/smap_setfunc.c \ - lib/glsmap/smap_setvec.c \ - lib/glsmap/smap_texdim.c \ - lib/glsmap/smap_texobj.c \ - lib/glut/capturexfont.c \ - lib/glut/glut_8x13.c \ - lib/glut/glut_9x15.c \ - lib/glut/glut_bitmap.c \ - lib/glut/glut_bwidth.c \ - lib/glut/glut_cindex.c \ - lib/glut/glut_cmap.c \ - lib/glut/glut_cursor.c \ - lib/glut/glut_dials.c \ - lib/glut/glut_dstr.c \ - lib/glut/glut_event.c \ - lib/glut/glut_ext.c \ - lib/glut/glut_fcb.c \ - lib/glut/glut_fullscrn.c \ - lib/glut/glut_gamemode.c \ - lib/glut/glut_get.c \ - lib/glut/glut_glxext.c \ - lib/glut/glut_hel10.c \ - lib/glut/glut_hel12.c \ - lib/glut/glut_hel18.c \ - lib/glut/glut_init.c \ - lib/glut/glut_input.c \ - lib/glut/glut_joy.c \ - lib/glut/glut_key.c \ - lib/glut/glut_keyctrl.c \ - lib/glut/glut_keyup.c \ - lib/glut/glut_menu.c \ - lib/glut/glut_menu2.c \ - lib/glut/glut_mesa.c \ - lib/glut/glut_modifier.c \ - lib/glut/glut_mroman.c \ - lib/glut/glut_overlay.c \ - lib/glut/glut_roman.c \ - lib/glut/glut_shapes.c \ - lib/glut/glut_space.c \ - lib/glut/glut_stroke.c \ - lib/glut/glut_swap.c \ - lib/glut/glut_swidth.c \ - lib/glut/glut_tablet.c \ - lib/glut/glut_teapot.c \ - lib/glut/glut_tr10.c \ - lib/glut/glut_tr24.c \ - lib/glut/glut_util.c \ - lib/glut/glut_vidresize.c \ - lib/glut/glut_warp.c \ - lib/glut/glut_win.c \ - lib/glut/glut_winmisc.c \ - lib/glut/layerutil.c \ - lib/glut/win32_glx.c \ - lib/glut/win32_menu.c \ - lib/glut/win32_util.c \ - lib/glut/win32_winproc.c \ - lib/glut/win32_x11.c \ - lib/mui/browseparse.c \ - lib/mui/browser.c \ - lib/mui/button.c \ - lib/mui/displaylist.c \ - lib/mui/gizmo.c \ - lib/mui/glutmui.c \ - lib/mui/hslider.c \ - lib/mui/miscui.c \ - lib/mui/mui.c \ - lib/mui/pulldown.c \ - lib/mui/textlist.c \ - lib/mui/uicolor.c \ - lib/mui/vslider.c diff --git a/lib/glut-3.7.6/glut.dsw b/lib/glut-3.7.6/glut.dsw deleted file mode 100644 index e796b2891..000000000 --- a/lib/glut-3.7.6/glut.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "glut32"=".\lib\glut\glut32.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/lib/glut-3.7.6/glutdefs b/lib/glut-3.7.6/glutdefs deleted file mode 100644 index 05955b92c..000000000 --- a/lib/glut-3.7.6/glutdefs +++ /dev/null @@ -1,50 +0,0 @@ -# -# glutdefs - common SGI Makefile defines for building GLUT -# -# Copyright (c) Mark J. Kilgard, 1997. -# - -# By default, we build for the "least common denominator" -# object style with is "old" 32-bit style. Set your -# OBJECT_STYLE environment variable to build GLUT's demos -# and examples with some other ABI. For example, to build -# N32 with -mips3 support, use: -# -# setenv OBJECT_STYLE N32_M3 -# -#if !defined(OBJECT_STYLE) -OBJECT_STYLE=32 -#endif - -# Object style logic. Note: the NONE and R32 object style -# are not supported. -# -#if $(OBJECT_STYLE) == "64" -GLUT_LIB_SUFFIX=.n64 -#elif $(OBJECT_STYLE) == "64_M3" -GLUT_LIB_SUFFIX=.n64 -#elif $(OBJECT_STYLE) == "64_M4" -GLUT_LIB_SUFFIX=.n64 -#elif $(OBJECT_STYLE) == "32_ABI" -GLUT_LIB_SUFFIX= -#elif $(OBJECT_STYLE) == "N32" -GLUT_LIB_SUFFIX=.n32 -#elif $(OBJECT_STYLE) == "N32_M3" -GLUT_LIB_SUFFIX=.n32 -#elif $(OBJECT_STYLE) == "N32_M4" -GLUT_LIB_SUFFIX=.n32 -#elif $(OBJECT_STYLE) == "32" -GLUT_LIB_SUFFIX= -#elif $(OBJECT_STYLE) == "32_M2" -GLUT_LIB_SUFFIX= -#else -GLUT_LIB_SUFFIX= -#endif - -# Where to find the GLUT archive for the appropriate object style. -# -GLUT = $(TOP)/lib/glut$(GLUT_LIB_SUFFIX)/libglut.a -FGLUT = $(TOP)/lib/fglut$(GLUT_LIB_SUFFIX)/libfglut.a -MUI = $(TOP)/lib/mui$(GLUT_LIB_SUFFIX)/libmui.a -GLE = $(TOP)/lib/gle$(GLUT_LIB_SUFFIX)/libgle.a -GLSMAP = $(TOP)/lib/glsmap$(GLUT_LIB_SUFFIX)/libglsmap.a diff --git a/lib/glut-3.7.6/include/GL/fgl.h b/lib/glut-3.7.6/include/GL/fgl.h deleted file mode 100644 index 64f981e6e..000000000 --- a/lib/glut-3.7.6/include/GL/fgl.h +++ /dev/null @@ -1,1707 +0,0 @@ - -C GLUT version of "GL/fgl.h" - -C Modifications from SGI IRIX 5.3 version: -C 1) F prefix removed from OpenGL constants. -C 2) Constants over 32 characters truncated to 32 characters. - -C *********************************************************** - -C AttribMask - integer*4 GL_CURRENT_BIT - parameter ( GL_CURRENT_BIT = 1 ) - integer*4 GL_POINT_BIT - parameter ( GL_POINT_BIT = 2 ) - integer*4 GL_LINE_BIT - parameter ( GL_LINE_BIT = 4 ) - integer*4 GL_POLYGON_BIT - parameter ( GL_POLYGON_BIT = 8 ) - integer*4 GL_POLYGON_STIPPLE_BIT - parameter ( GL_POLYGON_STIPPLE_BIT = 16 ) - integer*4 GL_PIXEL_MODE_BIT - parameter ( GL_PIXEL_MODE_BIT = 32 ) - integer*4 GL_LIGHTING_BIT - parameter ( GL_LIGHTING_BIT = 64 ) - integer*4 GL_FOG_BIT - parameter ( GL_FOG_BIT = 128 ) - integer*4 GL_DEPTH_BUFFER_BIT - parameter ( GL_DEPTH_BUFFER_BIT = 256 ) - integer*4 GL_ACCUM_BUFFER_BIT - parameter ( GL_ACCUM_BUFFER_BIT = 512 ) - integer*4 GL_STENCIL_BUFFER_BIT - parameter ( GL_STENCIL_BUFFER_BIT = 1024 ) - integer*4 GL_VIEWPORT_BIT - parameter ( GL_VIEWPORT_BIT = 2048 ) - integer*4 GL_TRANSFORM_BIT - parameter ( GL_TRANSFORM_BIT = 4096 ) - integer*4 GL_ENABLE_BIT - parameter ( GL_ENABLE_BIT = 8192 ) - integer*4 GL_COLOR_BUFFER_BIT - parameter ( GL_COLOR_BUFFER_BIT = 16384 ) - integer*4 GL_HINT_BIT - parameter ( GL_HINT_BIT = 32768 ) - integer*4 GL_EVAL_BIT - parameter ( GL_EVAL_BIT = 65536 ) - integer*4 GL_LIST_BIT - parameter ( GL_LIST_BIT = 131072 ) - integer*4 GL_TEXTURE_BIT - parameter ( GL_TEXTURE_BIT = 262144 ) - integer*4 GL_SCISSOR_BIT - parameter ( GL_SCISSOR_BIT = 524288 ) - integer*4 GL_ALL_ATTRIB_BITS - parameter ( GL_ALL_ATTRIB_BITS = 1048575 ) -C GL_MULTISAMPLE_BIT_EXT - -C ClearBufferMask -C GL_COLOR_BUFFER_BIT -C GL_ACCUM_BUFFER_BIT -C GL_STENCIL_BUFFER_BIT -C GL_DEPTH_BUFFER_BIT - -C Boolean - integer*4 GL_FALSE - parameter ( GL_FALSE = 0 ) - integer*4 GL_TRUE - parameter ( GL_TRUE = 1 ) - -C BeginMode - integer*4 GL_POINTS - parameter ( GL_POINTS = 0 ) - integer*4 GL_LINES - parameter ( GL_LINES = 1 ) - integer*4 GL_LINE_LOOP - parameter ( GL_LINE_LOOP = 2 ) - integer*4 GL_LINE_STRIP - parameter ( GL_LINE_STRIP = 3 ) - integer*4 GL_TRIANGLES - parameter ( GL_TRIANGLES = 4 ) - integer*4 GL_TRIANGLE_STRIP - parameter ( GL_TRIANGLE_STRIP = 5 ) - integer*4 GL_TRIANGLE_FAN - parameter ( GL_TRIANGLE_FAN = 6 ) - integer*4 GL_QUADS - parameter ( GL_QUADS = 7 ) - integer*4 GL_QUAD_STRIP - parameter ( GL_QUAD_STRIP = 8 ) - integer*4 GL_POLYGON - parameter ( GL_POLYGON = 9 ) - -C AccumOp - integer*4 GL_ACCUM - parameter ( GL_ACCUM = 256 ) - integer*4 GL_LOAD - parameter ( GL_LOAD = 257 ) - integer*4 GL_RETURN - parameter ( GL_RETURN = 258 ) - integer*4 GL_MULT - parameter ( GL_MULT = 259 ) - integer*4 GL_ADD - parameter ( GL_ADD = 260 ) - -C AlphaFunction - integer*4 GL_NEVER - parameter ( GL_NEVER = 512 ) - integer*4 GL_LESS - parameter ( GL_LESS = 513 ) - integer*4 GL_EQUAL - parameter ( GL_EQUAL = 514 ) - integer*4 GL_LEQUAL - parameter ( GL_LEQUAL = 515 ) - integer*4 GL_GREATER - parameter ( GL_GREATER = 516 ) - integer*4 GL_NOTEQUAL - parameter ( GL_NOTEQUAL = 517 ) - integer*4 GL_GEQUAL - parameter ( GL_GEQUAL = 518 ) - integer*4 GL_ALWAYS - parameter ( GL_ALWAYS = 519 ) - -C BlendingFactorDest - integer*4 GL_ZERO - parameter ( GL_ZERO = 0 ) - integer*4 GL_ONE - parameter ( GL_ONE = 1 ) - integer*4 GL_SRC_COLOR - parameter ( GL_SRC_COLOR = 768 ) - integer*4 GL_ONE_MINUS_SRC_COLOR - parameter ( GL_ONE_MINUS_SRC_COLOR = 769 ) - integer*4 GL_SRC_ALPHA - parameter ( GL_SRC_ALPHA = 770 ) - integer*4 GL_ONE_MINUS_SRC_ALPHA - parameter ( GL_ONE_MINUS_SRC_ALPHA = 771 ) - integer*4 GL_DST_ALPHA - parameter ( GL_DST_ALPHA = 772 ) - integer*4 GL_ONE_MINUS_DST_ALPHA - parameter ( GL_ONE_MINUS_DST_ALPHA = 773 ) -C GL_CONSTANT_COLOR_EXT -C GL_ONE_MINUS_CONSTANT_COLOR_EXT -C GL_CONSTANT_ALPHA_EXT -C GL_ONE_MINUS_CONSTANT_ALPHA_EXT - -C BlendingFactorSrc -C GL_ZERO -C GL_ONE - integer*4 GL_DST_COLOR - parameter ( GL_DST_COLOR = 774 ) - integer*4 GL_ONE_MINUS_DST_COLOR - parameter ( GL_ONE_MINUS_DST_COLOR = 775 ) - integer*4 GL_SRC_ALPHA_SATURATE - parameter ( GL_SRC_ALPHA_SATURATE = 776 ) -C GL_SRC_ALPHA -C GL_ONE_MINUS_SRC_ALPHA -C GL_DST_ALPHA -C GL_ONE_MINUS_DST_ALPHA -C GL_CONSTANT_COLOR_EXT -C GL_ONE_MINUS_CONSTANT_COLOR_EXT -C GL_CONSTANT_ALPHA_EXT -C GL_ONE_MINUS_CONSTANT_ALPHA_EXT - -C BlendingMode -C GL_LOGIC_OP -C GL_FUNC_ADD_EXT -C GL_MIN_EXT -C GL_MAX_EXT -C GL_FUNC_SUBTRACT_EXT -C GL_FUNC_REVERSE_SUBTRACT_EXT - -C ColorMaterialFace -C GL_FRONT -C GL_BACK -C GL_FRONT_AND_BACK - -C ColorMaterialParameter -C GL_AMBIENT -C GL_DIFFUSE -C GL_SPECULAR -C GL_EMISSION -C GL_AMBIENT_AND_DIFFUSE - -C ConvolutionBorderMode -C GL_REDUCE_EXT - -C ConvolutionParameter -C GL_CONVOLUTION_BORDER_MODE_EXT -C GL_CONVOLUTION_FILTER_SCALE_EXT -C GL_CONVOLUTION_FILTER_BIAS_EXT - -C ConvolutionTarget -C GL_CONVOLUTION_1D_EXT -C GL_CONVOLUTION_2D_EXT - -C CullFaceMode -C GL_FRONT -C GL_BACK -C GL_FRONT_AND_BACK - -C DepthFunction -C GL_NEVER -C GL_LESS -C GL_EQUAL -C GL_LEQUAL -C GL_GREATER -C GL_NOTEQUAL -C GL_GEQUAL -C GL_ALWAYS - -C DrawBufferMode - integer*4 GL_NONE - parameter ( GL_NONE = 0 ) - integer*4 GL_FRONT_LEFT - parameter ( GL_FRONT_LEFT = 1024 ) - integer*4 GL_FRONT_RIGHT - parameter ( GL_FRONT_RIGHT = 1025 ) - integer*4 GL_BACK_LEFT - parameter ( GL_BACK_LEFT = 1026 ) - integer*4 GL_BACK_RIGHT - parameter ( GL_BACK_RIGHT = 1027 ) - integer*4 GL_FRONT - parameter ( GL_FRONT = 1028 ) - integer*4 GL_BACK - parameter ( GL_BACK = 1029 ) - integer*4 GL_LEFT - parameter ( GL_LEFT = 1030 ) - integer*4 GL_RIGHT - parameter ( GL_RIGHT = 1031 ) - integer*4 GL_FRONT_AND_BACK - parameter ( GL_FRONT_AND_BACK = 1032 ) - integer*4 GL_AUX0 - parameter ( GL_AUX0 = 1033 ) - integer*4 GL_AUX1 - parameter ( GL_AUX1 = 1034 ) - integer*4 GL_AUX2 - parameter ( GL_AUX2 = 1035 ) - integer*4 GL_AUX3 - parameter ( GL_AUX3 = 1036 ) - -C Enable -C GL_FOG -C GL_LIGHTING -C GL_TEXTURE_1D -C GL_TEXTURE_2D -C GL_LINE_STIPPLE -C GL_POLYGON_STIPPLE -C GL_CULL_FACE -C GL_ALPHA_TEST -C GL_BLEND -C GL_LOGIC_OP -C GL_DITHER -C GL_STENCIL_TEST -C GL_DEPTH_TEST -C GL_CLIP_PLANE0 -C GL_CLIP_PLANE1 -C GL_CLIP_PLANE2 -C GL_CLIP_PLANE3 -C GL_CLIP_PLANE4 -C GL_CLIP_PLANE5 -C GL_LIGHT0 -C GL_LIGHT1 -C GL_LIGHT2 -C GL_LIGHT3 -C GL_LIGHT4 -C GL_LIGHT5 -C GL_LIGHT6 -C GL_LIGHT7 -C GL_TEXTURE_GEN_S -C GL_TEXTURE_GEN_T -C GL_TEXTURE_GEN_R -C GL_TEXTURE_GEN_Q -C GL_MAP1_VERTEX_3 -C GL_MAP1_VERTEX_4 -C GL_MAP1_COLOR_4 -C GL_MAP1_INDEX -C GL_MAP1_NORMAL -C GL_MAP1_TEXTURE_COORD_1 -C GL_MAP1_TEXTURE_COORD_2 -C GL_MAP1_TEXTURE_COORD_3 -C GL_MAP1_TEXTURE_COORD_4 -C GL_MAP2_VERTEX_3 -C GL_MAP2_VERTEX_4 -C GL_MAP2_COLOR_4 -C GL_MAP2_INDEX -C GL_MAP2_NORMAL -C GL_MAP2_TEXTURE_COORD_1 -C GL_MAP2_TEXTURE_COORD_2 -C GL_MAP2_TEXTURE_COORD_3 -C GL_MAP2_TEXTURE_COORD_4 -C GL_POINT_SMOOTH -C GL_LINE_SMOOTH -C GL_POLYGON_SMOOTH -C GL_SCISSOR_TEST -C GL_COLOR_MATERIAL -C GL_NORMALIZE -C GL_AUTO_NORMAL -C GL_CONVOLUTION_1D_EXT -C GL_CONVOLUTION_2D_EXT -C GL_SEPARABLE_2D_EXT -C GL_HISTOGRAM_EXT -C GL_MINMAX_EXT -C GL_POLYGON_OFFSET_EXT -C GL_TEXTURE_3D_EXT -C GL_MULTISAMPLE_SGIS -C GL_SAMPLE_ALPHA_TO_MASK_SGIS -C GL_SAMPLE_ALPHA_TO_ONE_SGIS -C GL_SAMPLE_MASK_SGIS - -C ErrorCode - integer*4 GL_NO_ERROR - parameter ( GL_NO_ERROR = 0 ) - integer*4 GL_INVALID_ENUM - parameter ( GL_INVALID_ENUM = 1280 ) - integer*4 GL_INVALID_VALUE - parameter ( GL_INVALID_VALUE = 1281 ) - integer*4 GL_INVALID_OPERATION - parameter ( GL_INVALID_OPERATION = 1282 ) - integer*4 GL_STACK_OVERFLOW - parameter ( GL_STACK_OVERFLOW = 1283 ) - integer*4 GL_STACK_UNDERFLOW - parameter ( GL_STACK_UNDERFLOW = 1284 ) - integer*4 GL_OUT_OF_MEMORY - parameter ( GL_OUT_OF_MEMORY = 1285 ) -C GL_TABLE_TOO_LARGE_EXT -C GL_TEXTURE_TOO_LARGE_EXT - -C FeedBackMode - integer*4 GL_2D - parameter ( GL_2D = 1536 ) - integer*4 GL_3D - parameter ( GL_3D = 1537 ) - integer*4 GL_3D_COLOR - parameter ( GL_3D_COLOR = 1538 ) - integer*4 GL_3D_COLOR_TEXTURE - parameter ( GL_3D_COLOR_TEXTURE = 1539 ) - integer*4 GL_4D_COLOR_TEXTURE - parameter ( GL_4D_COLOR_TEXTURE = 1540 ) - -C FeedBackToken - integer*4 GL_PASS_THROUGH_TOKEN - parameter ( GL_PASS_THROUGH_TOKEN = 1792 ) - integer*4 GL_POINT_TOKEN - parameter ( GL_POINT_TOKEN = 1793 ) - integer*4 GL_LINE_TOKEN - parameter ( GL_LINE_TOKEN = 1794 ) - integer*4 GL_POLYGON_TOKEN - parameter ( GL_POLYGON_TOKEN = 1795 ) - integer*4 GL_BITMAP_TOKEN - parameter ( GL_BITMAP_TOKEN = 1796 ) - integer*4 GL_DRAW_PIXEL_TOKEN - parameter ( GL_DRAW_PIXEL_TOKEN = 1797 ) - integer*4 GL_COPY_PIXEL_TOKEN - parameter ( GL_COPY_PIXEL_TOKEN = 1798 ) - integer*4 GL_LINE_RESET_TOKEN - parameter ( GL_LINE_RESET_TOKEN = 1799 ) - -C FogMode -C GL_LINEAR - integer*4 GL_EXP - parameter ( GL_EXP = 2048 ) - integer*4 GL_EXP2 - parameter ( GL_EXP2 = 2049 ) - -C FogParameter -C GL_FOG_COLOR -C GL_FOG_DENSITY -C GL_FOG_END -C GL_FOG_INDEX -C GL_FOG_MODE -C GL_FOG_START - -C FrontFaceDirection - integer*4 GL_CW - parameter ( GL_CW = 2304 ) - integer*4 GL_CCW - parameter ( GL_CCW = 2305 ) - -C GetConvolutionParameter -C GL_CONVOLUTION_BORDER_MODE_EXT -C GL_CONVOLUTION_FILTER_SCALE_EXT -C GL_CONVOLUTION_FILTER_BIAS_EXT -C GL_CONVOLUTION_FORMAT_EXT -C GL_CONVOLUTION_WIDTH_EXT -C GL_CONVOLUTION_HEIGHT_EXT -C GL_MAX_CONVOLUTION_WIDTH_EXT -C GL_MAX_CONVOLUTION_HEIGHT_EXT - -C GetHistogramParameter -C GL_HISTOGRAM_WIDTH_EXT -C GL_HISTOGRAM_FORMAT_EXT -C GL_HISTOGRAM_RED_SIZE_EXT -C GL_HISTOGRAM_GREEN_SIZE_EXT -C GL_HISTOGRAM_BLUE_SIZE_EXT -C GL_HISTOGRAM_ALPHA_SIZE_EXT -C GL_HISTOGRAM_LUMINANCE_SIZE_EXT -C GL_HISTOGRAM_SINK_EXT - -C GetMapTarget - integer*4 GL_COEFF - parameter ( GL_COEFF = 2560 ) - integer*4 GL_ORDER - parameter ( GL_ORDER = 2561 ) - integer*4 GL_DOMAIN - parameter ( GL_DOMAIN = 2562 ) - -C GetMinmaxParameter -C GL_MINMAX_FORMAT_EXT -C GL_MINMAX_SINK_EXT - -C GetPixelMap - integer*4 GL_PIXEL_MAP_I_TO_I - parameter ( GL_PIXEL_MAP_I_TO_I = 3184 ) - integer*4 GL_PIXEL_MAP_S_TO_S - parameter ( GL_PIXEL_MAP_S_TO_S = 3185 ) - integer*4 GL_PIXEL_MAP_I_TO_R - parameter ( GL_PIXEL_MAP_I_TO_R = 3186 ) - integer*4 GL_PIXEL_MAP_I_TO_G - parameter ( GL_PIXEL_MAP_I_TO_G = 3187 ) - integer*4 GL_PIXEL_MAP_I_TO_B - parameter ( GL_PIXEL_MAP_I_TO_B = 3188 ) - integer*4 GL_PIXEL_MAP_I_TO_A - parameter ( GL_PIXEL_MAP_I_TO_A = 3189 ) - integer*4 GL_PIXEL_MAP_R_TO_R - parameter ( GL_PIXEL_MAP_R_TO_R = 3190 ) - integer*4 GL_PIXEL_MAP_G_TO_G - parameter ( GL_PIXEL_MAP_G_TO_G = 3191 ) - integer*4 GL_PIXEL_MAP_B_TO_B - parameter ( GL_PIXEL_MAP_B_TO_B = 3192 ) - integer*4 GL_PIXEL_MAP_A_TO_A - parameter ( GL_PIXEL_MAP_A_TO_A = 3193 ) - -C GetTarget - integer*4 GL_CURRENT_COLOR - parameter ( GL_CURRENT_COLOR = 2816 ) - integer*4 GL_CURRENT_INDEX - parameter ( GL_CURRENT_INDEX = 2817 ) - integer*4 GL_CURRENT_NORMAL - parameter ( GL_CURRENT_NORMAL = 2818 ) - integer*4 GL_CURRENT_TEXTURE_COORDS - parameter ( GL_CURRENT_TEXTURE_COORDS = 2819 ) - integer*4 GL_CURRENT_RASTER_COLOR - parameter ( GL_CURRENT_RASTER_COLOR = 2820 ) - integer*4 GL_CURRENT_RASTER_INDEX - parameter ( GL_CURRENT_RASTER_INDEX = 2821 ) - integer*4 GL_CURRENT_RASTER_TEXTURE_COORDS - parameter ( GL_CURRENT_RASTER_TEXTURE_COORDS = 2822 ) - integer*4 GL_CURRENT_RASTER_POSITION - parameter ( GL_CURRENT_RASTER_POSITION = 2823 ) - integer*4 GL_CURRENT_RASTER_POSITION_VALID - parameter ( GL_CURRENT_RASTER_POSITION_VALID = 2824 ) - integer*4 GL_CURRENT_RASTER_DISTANCE - parameter ( GL_CURRENT_RASTER_DISTANCE = 2825 ) - integer*4 GL_POINT_SMOOTH - parameter ( GL_POINT_SMOOTH = 2832 ) - integer*4 GL_POINT_SIZE - parameter ( GL_POINT_SIZE = 2833 ) - integer*4 GL_POINT_SIZE_RANGE - parameter ( GL_POINT_SIZE_RANGE = 2834 ) - integer*4 GL_POINT_SIZE_GRANULARITY - parameter ( GL_POINT_SIZE_GRANULARITY = 2835 ) - integer*4 GL_LINE_SMOOTH - parameter ( GL_LINE_SMOOTH = 2848 ) - integer*4 GL_LINE_WIDTH - parameter ( GL_LINE_WIDTH = 2849 ) - integer*4 GL_LINE_WIDTH_RANGE - parameter ( GL_LINE_WIDTH_RANGE = 2850 ) - integer*4 GL_LINE_WIDTH_GRANULARITY - parameter ( GL_LINE_WIDTH_GRANULARITY = 2851 ) - integer*4 GL_LINE_STIPPLE - parameter ( GL_LINE_STIPPLE = 2852 ) - integer*4 GL_LINE_STIPPLE_PATTERN - parameter ( GL_LINE_STIPPLE_PATTERN = 2853 ) - integer*4 GL_LINE_STIPPLE_REPEAT - parameter ( GL_LINE_STIPPLE_REPEAT = 2854 ) - integer*4 GL_LIST_MODE - parameter ( GL_LIST_MODE = 2864 ) - integer*4 GL_MAX_LIST_NESTING - parameter ( GL_MAX_LIST_NESTING = 2865 ) - integer*4 GL_LIST_BASE - parameter ( GL_LIST_BASE = 2866 ) - integer*4 GL_LIST_INDEX - parameter ( GL_LIST_INDEX = 2867 ) - integer*4 GL_POLYGON_MODE - parameter ( GL_POLYGON_MODE = 2880 ) - integer*4 GL_POLYGON_SMOOTH - parameter ( GL_POLYGON_SMOOTH = 2881 ) - integer*4 GL_POLYGON_STIPPLE - parameter ( GL_POLYGON_STIPPLE = 2882 ) - integer*4 GL_EDGE_FLAG - parameter ( GL_EDGE_FLAG = 2883 ) - integer*4 GL_CULL_FACE - parameter ( GL_CULL_FACE = 2884 ) - integer*4 GL_CULL_FACE_MODE - parameter ( GL_CULL_FACE_MODE = 2885 ) - integer*4 GL_FRONT_FACE - parameter ( GL_FRONT_FACE = 2886 ) - integer*4 GL_LIGHTING - parameter ( GL_LIGHTING = 2896 ) - integer*4 GL_LIGHT_MODEL_LOCAL_VIEWER - parameter ( GL_LIGHT_MODEL_LOCAL_VIEWER = 2897 ) - integer*4 GL_LIGHT_MODEL_TWO_SIDE - parameter ( GL_LIGHT_MODEL_TWO_SIDE = 2898 ) - integer*4 GL_LIGHT_MODEL_AMBIENT - parameter ( GL_LIGHT_MODEL_AMBIENT = 2899 ) - integer*4 GL_SHADE_MODEL - parameter ( GL_SHADE_MODEL = 2900 ) - integer*4 GL_COLOR_MATERIAL_FACE - parameter ( GL_COLOR_MATERIAL_FACE = 2901 ) - integer*4 GL_COLOR_MATERIAL_PARAMETER - parameter ( GL_COLOR_MATERIAL_PARAMETER = 2902 ) - integer*4 GL_COLOR_MATERIAL - parameter ( GL_COLOR_MATERIAL = 2903 ) - integer*4 GL_FOG - parameter ( GL_FOG = 2912 ) - integer*4 GL_FOG_INDEX - parameter ( GL_FOG_INDEX = 2913 ) - integer*4 GL_FOG_DENSITY - parameter ( GL_FOG_DENSITY = 2914 ) - integer*4 GL_FOG_START - parameter ( GL_FOG_START = 2915 ) - integer*4 GL_FOG_END - parameter ( GL_FOG_END = 2916 ) - integer*4 GL_FOG_MODE - parameter ( GL_FOG_MODE = 2917 ) - integer*4 GL_FOG_COLOR - parameter ( GL_FOG_COLOR = 2918 ) - integer*4 GL_DEPTH_RANGE - parameter ( GL_DEPTH_RANGE = 2928 ) - integer*4 GL_DEPTH_TEST - parameter ( GL_DEPTH_TEST = 2929 ) - integer*4 GL_DEPTH_WRITEMASK - parameter ( GL_DEPTH_WRITEMASK = 2930 ) - integer*4 GL_DEPTH_CLEAR_VALUE - parameter ( GL_DEPTH_CLEAR_VALUE = 2931 ) - integer*4 GL_DEPTH_FUNC - parameter ( GL_DEPTH_FUNC = 2932 ) - integer*4 GL_ACCUM_CLEAR_VALUE - parameter ( GL_ACCUM_CLEAR_VALUE = 2944 ) - integer*4 GL_STENCIL_TEST - parameter ( GL_STENCIL_TEST = 2960 ) - integer*4 GL_STENCIL_CLEAR_VALUE - parameter ( GL_STENCIL_CLEAR_VALUE = 2961 ) - integer*4 GL_STENCIL_FUNC - parameter ( GL_STENCIL_FUNC = 2962 ) - integer*4 GL_STENCIL_VALUE_MASK - parameter ( GL_STENCIL_VALUE_MASK = 2963 ) - integer*4 GL_STENCIL_FAIL - parameter ( GL_STENCIL_FAIL = 2964 ) - integer*4 GL_STENCIL_PASS_DEPTH_FAIL - parameter ( GL_STENCIL_PASS_DEPTH_FAIL = 2965 ) - integer*4 GL_STENCIL_PASS_DEPTH_PASS - parameter ( GL_STENCIL_PASS_DEPTH_PASS = 2966 ) - integer*4 GL_STENCIL_REF - parameter ( GL_STENCIL_REF = 2967 ) - integer*4 GL_STENCIL_WRITEMASK - parameter ( GL_STENCIL_WRITEMASK = 2968 ) - integer*4 GL_MATRIX_MODE - parameter ( GL_MATRIX_MODE = 2976 ) - integer*4 GL_NORMALIZE - parameter ( GL_NORMALIZE = 2977 ) - integer*4 GL_VIEWPORT - parameter ( GL_VIEWPORT = 2978 ) - integer*4 GL_MODELVIEW_STACK_DEPTH - parameter ( GL_MODELVIEW_STACK_DEPTH = 2979 ) - integer*4 GL_PROJECTION_STACK_DEPTH - parameter ( GL_PROJECTION_STACK_DEPTH = 2980 ) - integer*4 GL_TEXTURE_STACK_DEPTH - parameter ( GL_TEXTURE_STACK_DEPTH = 2981 ) - integer*4 GL_MODELVIEW_MATRIX - parameter ( GL_MODELVIEW_MATRIX = 2982 ) - integer*4 GL_PROJECTION_MATRIX - parameter ( GL_PROJECTION_MATRIX = 2983 ) - integer*4 GL_TEXTURE_MATRIX - parameter ( GL_TEXTURE_MATRIX = 2984 ) - integer*4 GL_ATTRIB_STACK_DEPTH - parameter ( GL_ATTRIB_STACK_DEPTH = 2992 ) - integer*4 GL_ALPHA_TEST - parameter ( GL_ALPHA_TEST = 3008 ) - integer*4 GL_ALPHA_TEST_FUNC - parameter ( GL_ALPHA_TEST_FUNC = 3009 ) - integer*4 GL_ALPHA_TEST_REF - parameter ( GL_ALPHA_TEST_REF = 3010 ) - integer*4 GL_DITHER - parameter ( GL_DITHER = 3024 ) - integer*4 GL_BLEND_DST - parameter ( GL_BLEND_DST = 3040 ) - integer*4 GL_BLEND_SRC - parameter ( GL_BLEND_SRC = 3041 ) - integer*4 GL_BLEND - parameter ( GL_BLEND = 3042 ) - integer*4 GL_LOGIC_OP_MODE - parameter ( GL_LOGIC_OP_MODE = 3056 ) - integer*4 GL_LOGIC_OP - parameter ( GL_LOGIC_OP = 3057 ) - integer*4 GL_AUX_BUFFERS - parameter ( GL_AUX_BUFFERS = 3072 ) - integer*4 GL_DRAW_BUFFER - parameter ( GL_DRAW_BUFFER = 3073 ) - integer*4 GL_READ_BUFFER - parameter ( GL_READ_BUFFER = 3074 ) - integer*4 GL_SCISSOR_BOX - parameter ( GL_SCISSOR_BOX = 3088 ) - integer*4 GL_SCISSOR_TEST - parameter ( GL_SCISSOR_TEST = 3089 ) - integer*4 GL_INDEX_CLEAR_VALUE - parameter ( GL_INDEX_CLEAR_VALUE = 3104 ) - integer*4 GL_INDEX_WRITEMASK - parameter ( GL_INDEX_WRITEMASK = 3105 ) - integer*4 GL_COLOR_CLEAR_VALUE - parameter ( GL_COLOR_CLEAR_VALUE = 3106 ) - integer*4 GL_COLOR_WRITEMASK - parameter ( GL_COLOR_WRITEMASK = 3107 ) - integer*4 GL_INDEX_MODE - parameter ( GL_INDEX_MODE = 3120 ) - integer*4 GL_RGBA_MODE - parameter ( GL_RGBA_MODE = 3121 ) - integer*4 GL_DOUBLEBUFFER - parameter ( GL_DOUBLEBUFFER = 3122 ) - integer*4 GL_STEREO - parameter ( GL_STEREO = 3123 ) - integer*4 GL_RENDER_MODE - parameter ( GL_RENDER_MODE = 3136 ) - integer*4 GL_PERSPECTIVE_CORRECTION_HINT - parameter ( GL_PERSPECTIVE_CORRECTION_HINT = 3152 ) - integer*4 GL_POINT_SMOOTH_HINT - parameter ( GL_POINT_SMOOTH_HINT = 3153 ) - integer*4 GL_LINE_SMOOTH_HINT - parameter ( GL_LINE_SMOOTH_HINT = 3154 ) - integer*4 GL_POLYGON_SMOOTH_HINT - parameter ( GL_POLYGON_SMOOTH_HINT = 3155 ) - integer*4 GL_FOG_HINT - parameter ( GL_FOG_HINT = 3156 ) - integer*4 GL_TEXTURE_GEN_S - parameter ( GL_TEXTURE_GEN_S = 3168 ) - integer*4 GL_TEXTURE_GEN_T - parameter ( GL_TEXTURE_GEN_T = 3169 ) - integer*4 GL_TEXTURE_GEN_R - parameter ( GL_TEXTURE_GEN_R = 3170 ) - integer*4 GL_TEXTURE_GEN_Q - parameter ( GL_TEXTURE_GEN_Q = 3171 ) - integer*4 GL_PIXEL_MAP_I_TO_I_SIZE - parameter ( GL_PIXEL_MAP_I_TO_I_SIZE = 3248 ) - integer*4 GL_PIXEL_MAP_S_TO_S_SIZE - parameter ( GL_PIXEL_MAP_S_TO_S_SIZE = 3249 ) - integer*4 GL_PIXEL_MAP_I_TO_R_SIZE - parameter ( GL_PIXEL_MAP_I_TO_R_SIZE = 3250 ) - integer*4 GL_PIXEL_MAP_I_TO_G_SIZE - parameter ( GL_PIXEL_MAP_I_TO_G_SIZE = 3251 ) - integer*4 GL_PIXEL_MAP_I_TO_B_SIZE - parameter ( GL_PIXEL_MAP_I_TO_B_SIZE = 3252 ) - integer*4 GL_PIXEL_MAP_I_TO_A_SIZE - parameter ( GL_PIXEL_MAP_I_TO_A_SIZE = 3253 ) - integer*4 GL_PIXEL_MAP_R_TO_R_SIZE - parameter ( GL_PIXEL_MAP_R_TO_R_SIZE = 3254 ) - integer*4 GL_PIXEL_MAP_G_TO_G_SIZE - parameter ( GL_PIXEL_MAP_G_TO_G_SIZE = 3255 ) - integer*4 GL_PIXEL_MAP_B_TO_B_SIZE - parameter ( GL_PIXEL_MAP_B_TO_B_SIZE = 3256 ) - integer*4 GL_PIXEL_MAP_A_TO_A_SIZE - parameter ( GL_PIXEL_MAP_A_TO_A_SIZE = 3257 ) - integer*4 GL_UNPACK_SWAP_BYTES - parameter ( GL_UNPACK_SWAP_BYTES = 3312 ) - integer*4 GL_UNPACK_LSB_FIRST - parameter ( GL_UNPACK_LSB_FIRST = 3313 ) - integer*4 GL_UNPACK_ROW_LENGTH - parameter ( GL_UNPACK_ROW_LENGTH = 3314 ) - integer*4 GL_UNPACK_SKIP_ROWS - parameter ( GL_UNPACK_SKIP_ROWS = 3315 ) - integer*4 GL_UNPACK_SKIP_PIXELS - parameter ( GL_UNPACK_SKIP_PIXELS = 3316 ) - integer*4 GL_UNPACK_ALIGNMENT - parameter ( GL_UNPACK_ALIGNMENT = 3317 ) - integer*4 GL_PACK_SWAP_BYTES - parameter ( GL_PACK_SWAP_BYTES = 3328 ) - integer*4 GL_PACK_LSB_FIRST - parameter ( GL_PACK_LSB_FIRST = 3329 ) - integer*4 GL_PACK_ROW_LENGTH - parameter ( GL_PACK_ROW_LENGTH = 3330 ) - integer*4 GL_PACK_SKIP_ROWS - parameter ( GL_PACK_SKIP_ROWS = 3331 ) - integer*4 GL_PACK_SKIP_PIXELS - parameter ( GL_PACK_SKIP_PIXELS = 3332 ) - integer*4 GL_PACK_ALIGNMENT - parameter ( GL_PACK_ALIGNMENT = 3333 ) - integer*4 GL_MAP_COLOR - parameter ( GL_MAP_COLOR = 3344 ) - integer*4 GL_MAP_STENCIL - parameter ( GL_MAP_STENCIL = 3345 ) - integer*4 GL_INDEX_SHIFT - parameter ( GL_INDEX_SHIFT = 3346 ) - integer*4 GL_INDEX_OFFSET - parameter ( GL_INDEX_OFFSET = 3347 ) - integer*4 GL_RED_SCALE - parameter ( GL_RED_SCALE = 3348 ) - integer*4 GL_RED_BIAS - parameter ( GL_RED_BIAS = 3349 ) - integer*4 GL_ZOOM_X - parameter ( GL_ZOOM_X = 3350 ) - integer*4 GL_ZOOM_Y - parameter ( GL_ZOOM_Y = 3351 ) - integer*4 GL_GREEN_SCALE - parameter ( GL_GREEN_SCALE = 3352 ) - integer*4 GL_GREEN_BIAS - parameter ( GL_GREEN_BIAS = 3353 ) - integer*4 GL_BLUE_SCALE - parameter ( GL_BLUE_SCALE = 3354 ) - integer*4 GL_BLUE_BIAS - parameter ( GL_BLUE_BIAS = 3355 ) - integer*4 GL_ALPHA_SCALE - parameter ( GL_ALPHA_SCALE = 3356 ) - integer*4 GL_ALPHA_BIAS - parameter ( GL_ALPHA_BIAS = 3357 ) - integer*4 GL_DEPTH_SCALE - parameter ( GL_DEPTH_SCALE = 3358 ) - integer*4 GL_DEPTH_BIAS - parameter ( GL_DEPTH_BIAS = 3359 ) - integer*4 GL_MAX_EVAL_ORDER - parameter ( GL_MAX_EVAL_ORDER = 3376 ) - integer*4 GL_MAX_LIGHTS - parameter ( GL_MAX_LIGHTS = 3377 ) - integer*4 GL_MAX_CLIP_PLANES - parameter ( GL_MAX_CLIP_PLANES = 3378 ) - integer*4 GL_MAX_TEXTURE_SIZE - parameter ( GL_MAX_TEXTURE_SIZE = 3379 ) - integer*4 GL_MAX_PIXEL_MAP_TABLE - parameter ( GL_MAX_PIXEL_MAP_TABLE = 3380 ) - integer*4 GL_MAX_ATTRIB_STACK_DEPTH - parameter ( GL_MAX_ATTRIB_STACK_DEPTH = 3381 ) - integer*4 GL_MAX_MODELVIEW_STACK_DEPTH - parameter ( GL_MAX_MODELVIEW_STACK_DEPTH = 3382 ) - integer*4 GL_MAX_NAME_STACK_DEPTH - parameter ( GL_MAX_NAME_STACK_DEPTH = 3383 ) - integer*4 GL_MAX_PROJECTION_STACK_DEPTH - parameter ( GL_MAX_PROJECTION_STACK_DEPTH = 3384 ) - integer*4 GL_MAX_TEXTURE_STACK_DEPTH - parameter ( GL_MAX_TEXTURE_STACK_DEPTH = 3385 ) - integer*4 GL_MAX_VIEWPORT_DIMS - parameter ( GL_MAX_VIEWPORT_DIMS = 3386 ) - integer*4 GL_SUBPIXEL_BITS - parameter ( GL_SUBPIXEL_BITS = 3408 ) - integer*4 GL_INDEX_BITS - parameter ( GL_INDEX_BITS = 3409 ) - integer*4 GL_RED_BITS - parameter ( GL_RED_BITS = 3410 ) - integer*4 GL_GREEN_BITS - parameter ( GL_GREEN_BITS = 3411 ) - integer*4 GL_BLUE_BITS - parameter ( GL_BLUE_BITS = 3412 ) - integer*4 GL_ALPHA_BITS - parameter ( GL_ALPHA_BITS = 3413 ) - integer*4 GL_DEPTH_BITS - parameter ( GL_DEPTH_BITS = 3414 ) - integer*4 GL_STENCIL_BITS - parameter ( GL_STENCIL_BITS = 3415 ) - integer*4 GL_ACCUM_RED_BITS - parameter ( GL_ACCUM_RED_BITS = 3416 ) - integer*4 GL_ACCUM_GREEN_BITS - parameter ( GL_ACCUM_GREEN_BITS = 3417 ) - integer*4 GL_ACCUM_BLUE_BITS - parameter ( GL_ACCUM_BLUE_BITS = 3418 ) - integer*4 GL_ACCUM_ALPHA_BITS - parameter ( GL_ACCUM_ALPHA_BITS = 3419 ) - integer*4 GL_NAME_STACK_DEPTH - parameter ( GL_NAME_STACK_DEPTH = 3440 ) - integer*4 GL_AUTO_NORMAL - parameter ( GL_AUTO_NORMAL = 3456 ) - integer*4 GL_MAP1_COLOR_4 - parameter ( GL_MAP1_COLOR_4 = 3472 ) - integer*4 GL_MAP1_INDEX - parameter ( GL_MAP1_INDEX = 3473 ) - integer*4 GL_MAP1_NORMAL - parameter ( GL_MAP1_NORMAL = 3474 ) - integer*4 GL_MAP1_TEXTURE_COORD_1 - parameter ( GL_MAP1_TEXTURE_COORD_1 = 3475 ) - integer*4 GL_MAP1_TEXTURE_COORD_2 - parameter ( GL_MAP1_TEXTURE_COORD_2 = 3476 ) - integer*4 GL_MAP1_TEXTURE_COORD_3 - parameter ( GL_MAP1_TEXTURE_COORD_3 = 3477 ) - integer*4 GL_MAP1_TEXTURE_COORD_4 - parameter ( GL_MAP1_TEXTURE_COORD_4 = 3478 ) - integer*4 GL_MAP1_VERTEX_3 - parameter ( GL_MAP1_VERTEX_3 = 3479 ) - integer*4 GL_MAP1_VERTEX_4 - parameter ( GL_MAP1_VERTEX_4 = 3480 ) - integer*4 GL_MAP2_COLOR_4 - parameter ( GL_MAP2_COLOR_4 = 3504 ) - integer*4 GL_MAP2_INDEX - parameter ( GL_MAP2_INDEX = 3505 ) - integer*4 GL_MAP2_NORMAL - parameter ( GL_MAP2_NORMAL = 3506 ) - integer*4 GL_MAP2_TEXTURE_COORD_1 - parameter ( GL_MAP2_TEXTURE_COORD_1 = 3507 ) - integer*4 GL_MAP2_TEXTURE_COORD_2 - parameter ( GL_MAP2_TEXTURE_COORD_2 = 3508 ) - integer*4 GL_MAP2_TEXTURE_COORD_3 - parameter ( GL_MAP2_TEXTURE_COORD_3 = 3509 ) - integer*4 GL_MAP2_TEXTURE_COORD_4 - parameter ( GL_MAP2_TEXTURE_COORD_4 = 3510 ) - integer*4 GL_MAP2_VERTEX_3 - parameter ( GL_MAP2_VERTEX_3 = 3511 ) - integer*4 GL_MAP2_VERTEX_4 - parameter ( GL_MAP2_VERTEX_4 = 3512 ) - integer*4 GL_MAP1_GRID_DOMAIN - parameter ( GL_MAP1_GRID_DOMAIN = 3536 ) - integer*4 GL_MAP1_GRID_SEGMENTS - parameter ( GL_MAP1_GRID_SEGMENTS = 3537 ) - integer*4 GL_MAP2_GRID_DOMAIN - parameter ( GL_MAP2_GRID_DOMAIN = 3538 ) - integer*4 GL_MAP2_GRID_SEGMENTS - parameter ( GL_MAP2_GRID_SEGMENTS = 3539 ) - integer*4 GL_TEXTURE_1D - parameter ( GL_TEXTURE_1D = 3552 ) - integer*4 GL_TEXTURE_2D - parameter ( GL_TEXTURE_2D = 3553 ) -C GL_BLEND_COLOR_EXT -C GL_BLEND_EQUATION_EXT -C GL_CONVOLUTION_1D_EXT -C GL_CONVOLUTION_2D_EXT -C GL_SEPARABLE_2D_EXT -C GL_POST_CONVOLUTION_RED_SCALE_EXT -C GL_POST_CONVOLUTION_GREEN_SCALE_EXT -C GL_POST_CONVOLUTION_BLUE_SCALE_EXT -C GL_POST_CONVOLUTION_ALPHA_SCALE_EXT -C GL_POST_CONVOLUTION_RED_BIAS_EXT -C GL_POST_CONVOLUTION_GREEN_BIAS_EXT -C GL_POST_CONVOLUTION_BLUE_BIAS_EXT -C GL_POST_CONVOLUTION_ALPHA_BIAS_EXT -C GL_HISTOGRAM_EXT -C GL_MINMAX_EXT -C GL_POLYGON_OFFSET_EXT -C GL_POLYGON_OFFSET_FACTOR_EXT -C GL_POLYGON_OFFSET_BIAS_EXT -C GL_PACK_SKIP_IMAGES_EXT -C GL_PACK_IMAGE_HEIGHT_EXT -C GL_UNPACK_SKIP_IMAGES_EXT -C GL_UNPACK_IMAGE_HEIGHT_EXT -C GL_TEXTURE_3D_EXT -C GL_MAX_3D_TEXTURE_SIZE_EXT -C GL_DETAIL_TEXTURE_2D_BINDING_SGIS -C GL_MULTISAMPLE_SGIS -C GL_SAMPLE_ALPHA_TO_MASK_SGIS -C GL_SAMPLE_ALPHA_TO_ONE_SGIS -C GL_SAMPLE_MASK_SGIS -C GL_SAMPLE_BUFFERS_SGIS -C GL_SAMPLES_SGIS -C GL_SAMPLE_MASK_VALUE_SGIS -C GL_SAMPLE_MASK_INVERT_SGIS -C GL_SAMPLE_PATTERN_SGIS - -C GetTextureParameter -C GL_TEXTURE_MAG_FILTER -C GL_TEXTURE_MIN_FILTER -C GL_TEXTURE_WRAP_S -C GL_TEXTURE_WRAP_T - integer*4 GL_TEXTURE_WIDTH - parameter ( GL_TEXTURE_WIDTH = 4096 ) - integer*4 GL_TEXTURE_HEIGHT - parameter ( GL_TEXTURE_HEIGHT = 4097 ) - integer*4 GL_TEXTURE_COMPONENTS - parameter ( GL_TEXTURE_COMPONENTS = 4099 ) - integer*4 GL_TEXTURE_BORDER_COLOR - parameter ( GL_TEXTURE_BORDER_COLOR = 4100 ) - integer*4 GL_TEXTURE_BORDER - parameter ( GL_TEXTURE_BORDER = 4101 ) -C GL_TEXTURE_RED_SIZE_EXT -C GL_TEXTURE_GREEN_SIZE_EXT -C GL_TEXTURE_BLUE_SIZE_EXT -C GL_TEXTURE_ALPHA_SIZE_EXT -C GL_TEXTURE_LUMINANCE_SIZE_EXT -C GL_TEXTURE_INTENSITY_SIZE_EXT -C GL_TEXTURE_DEPTH_EXT -C GL_TEXTURE_WRAP_R_EXT -C GL_DETAIL_TEXTURE_LEVEL_SGIS -C GL_DETAIL_TEXTURE_MODE_SGIS -C GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS -C GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS - -C HintMode - integer*4 GL_DONT_CARE - parameter ( GL_DONT_CARE = 4352 ) - integer*4 GL_FASTEST - parameter ( GL_FASTEST = 4353 ) - integer*4 GL_NICEST - parameter ( GL_NICEST = 4354 ) - -C HintTarget -C GL_PERSPECTIVE_CORRECTION_HINT -C GL_POINT_SMOOTH_HINT -C GL_LINE_SMOOTH_HINT -C GL_POLYGON_SMOOTH_HINT -C GL_FOG_HINT - -C HistogramTarget -C GL_HISTOGRAM_EXT -C GL_PROXY_HISTOGRAM_EXT - -C LightModelParameter -C GL_LIGHT_MODEL_AMBIENT -C GL_LIGHT_MODEL_LOCAL_VIEWER -C GL_LIGHT_MODEL_TWO_SIDE - -C LightParameter - integer*4 GL_AMBIENT - parameter ( GL_AMBIENT = 4608 ) - integer*4 GL_DIFFUSE - parameter ( GL_DIFFUSE = 4609 ) - integer*4 GL_SPECULAR - parameter ( GL_SPECULAR = 4610 ) - integer*4 GL_POSITION - parameter ( GL_POSITION = 4611 ) - integer*4 GL_SPOT_DIRECTION - parameter ( GL_SPOT_DIRECTION = 4612 ) - integer*4 GL_SPOT_EXPONENT - parameter ( GL_SPOT_EXPONENT = 4613 ) - integer*4 GL_SPOT_CUTOFF - parameter ( GL_SPOT_CUTOFF = 4614 ) - integer*4 GL_CONSTANT_ATTENUATION - parameter ( GL_CONSTANT_ATTENUATION = 4615 ) - integer*4 GL_LINEAR_ATTENUATION - parameter ( GL_LINEAR_ATTENUATION = 4616 ) - integer*4 GL_QUADRATIC_ATTENUATION - parameter ( GL_QUADRATIC_ATTENUATION = 4617 ) - -C ListMode - integer*4 GL_COMPILE - parameter ( GL_COMPILE = 4864 ) - integer*4 GL_COMPILE_AND_EXECUTE - parameter ( GL_COMPILE_AND_EXECUTE = 4865 ) - -C ListNameType - integer*4 GL_BYTE - parameter ( GL_BYTE = 5120 ) - integer*4 GL_UNSIGNED_BYTE - parameter ( GL_UNSIGNED_BYTE = 5121 ) - integer*4 GL_SHORT - parameter ( GL_SHORT = 5122 ) - integer*4 GL_UNSIGNED_SHORT - parameter ( GL_UNSIGNED_SHORT = 5123 ) - integer*4 GL_INT - parameter ( GL_INT = 5124 ) - integer*4 GL_UNSIGNED_INT - parameter ( GL_UNSIGNED_INT = 5125 ) - integer*4 GL_FLOAT - parameter ( GL_FLOAT = 5126 ) - integer*4 GL_2_BYTES - parameter ( GL_2_BYTES = 5127 ) - integer*4 GL_3_BYTES - parameter ( GL_3_BYTES = 5128 ) - integer*4 GL_4_BYTES - parameter ( GL_4_BYTES = 5129 ) - -C LogicOp - integer*4 GL_CLEAR - parameter ( GL_CLEAR = 5376 ) - integer*4 GL_AND - parameter ( GL_AND = 5377 ) - integer*4 GL_AND_REVERSE - parameter ( GL_AND_REVERSE = 5378 ) - integer*4 GL_COPY - parameter ( GL_COPY = 5379 ) - integer*4 GL_AND_INVERTED - parameter ( GL_AND_INVERTED = 5380 ) - integer*4 GL_NOOP - parameter ( GL_NOOP = 5381 ) - integer*4 GL_XOR - parameter ( GL_XOR = 5382 ) - integer*4 GL_OR - parameter ( GL_OR = 5383 ) - integer*4 GL_NOR - parameter ( GL_NOR = 5384 ) - integer*4 GL_EQUIV - parameter ( GL_EQUIV = 5385 ) - integer*4 GL_INVERT - parameter ( GL_INVERT = 5386 ) - integer*4 GL_OR_REVERSE - parameter ( GL_OR_REVERSE = 5387 ) - integer*4 GL_COPY_INVERTED - parameter ( GL_COPY_INVERTED = 5388 ) - integer*4 GL_OR_INVERTED - parameter ( GL_OR_INVERTED = 5389 ) - integer*4 GL_NAND - parameter ( GL_NAND = 5390 ) - integer*4 GL_SET - parameter ( GL_SET = 5391 ) - -C MapTarget -C GL_MAP1_COLOR_4 -C GL_MAP1_INDEX -C GL_MAP1_NORMAL -C GL_MAP1_TEXTURE_COORD_1 -C GL_MAP1_TEXTURE_COORD_2 -C GL_MAP1_TEXTURE_COORD_3 -C GL_MAP1_TEXTURE_COORD_4 -C GL_MAP1_VERTEX_3 -C GL_MAP1_VERTEX_4 -C GL_MAP2_COLOR_4 -C GL_MAP2_INDEX -C GL_MAP2_NORMAL -C GL_MAP2_TEXTURE_COORD_1 -C GL_MAP2_TEXTURE_COORD_2 -C GL_MAP2_TEXTURE_COORD_3 -C GL_MAP2_TEXTURE_COORD_4 -C GL_MAP2_VERTEX_3 -C GL_MAP2_VERTEX_4 - -C MaterialFace -C GL_FRONT -C GL_BACK -C GL_FRONT_AND_BACK - -C MaterialParameter - integer*4 GL_EMISSION - parameter ( GL_EMISSION = 5632 ) - integer*4 GL_SHININESS - parameter ( GL_SHININESS = 5633 ) - integer*4 GL_AMBIENT_AND_DIFFUSE - parameter ( GL_AMBIENT_AND_DIFFUSE = 5634 ) - integer*4 GL_COLOR_INDEXES - parameter ( GL_COLOR_INDEXES = 5635 ) -C GL_AMBIENT -C GL_DIFFUSE -C GL_SPECULAR - -C MatrixMode - integer*4 GL_MODELVIEW - parameter ( GL_MODELVIEW = 5888 ) - integer*4 GL_PROJECTION - parameter ( GL_PROJECTION = 5889 ) - integer*4 GL_TEXTURE - parameter ( GL_TEXTURE = 5890 ) - -C MeshMode1 -C GL_POINT -C GL_LINE - -C MeshMode2 -C GL_POINT -C GL_LINE -C GL_FILL - -C MinmaxTarget -C GL_MINMAX_EXT - -C PixelCopyType - integer*4 GL_COLOR - parameter ( GL_COLOR = 6144 ) - integer*4 GL_DEPTH - parameter ( GL_DEPTH = 6145 ) - integer*4 GL_STENCIL - parameter ( GL_STENCIL = 6146 ) - -C PixelFormat - integer*4 GL_COLOR_INDEX - parameter ( GL_COLOR_INDEX = 6400 ) - integer*4 GL_STENCIL_INDEX - parameter ( GL_STENCIL_INDEX = 6401 ) - integer*4 GL_DEPTH_COMPONENT - parameter ( GL_DEPTH_COMPONENT = 6402 ) - integer*4 GL_RED - parameter ( GL_RED = 6403 ) - integer*4 GL_GREEN - parameter ( GL_GREEN = 6404 ) - integer*4 GL_BLUE - parameter ( GL_BLUE = 6405 ) - integer*4 GL_ALPHA - parameter ( GL_ALPHA = 6406 ) - integer*4 GL_RGB - parameter ( GL_RGB = 6407 ) - integer*4 GL_RGBA - parameter ( GL_RGBA = 6408 ) - integer*4 GL_LUMINANCE - parameter ( GL_LUMINANCE = 6409 ) - integer*4 GL_LUMINANCE_ALPHA - parameter ( GL_LUMINANCE_ALPHA = 6410 ) -C GL_ABGR_EXT - -C PixelInternalFormat -C GL_ALPHA4_EXT -C GL_ALPHA8_EXT -C GL_ALPHA12_EXT -C GL_ALPHA16_EXT -C GL_LUMINANCE4_EXT -C GL_LUMINANCE8_EXT -C GL_LUMINANCE12_EXT -C GL_LUMINANCE16_EXT -C GL_LUMINANCE4_ALPHA4_EXT -C GL_LUMINANCE6_ALPHA2_EXT -C GL_LUMINANCE8_ALPHA8_EXT -C GL_LUMINANCE12_ALPHA4_EXT -C GL_LUMINANCE12_ALPHA12_EXT -C GL_LUMINANCE16_ALPHA16_EXT -C GL_INTENSITY_EXT -C GL_INTENSITY4_EXT -C GL_INTENSITY8_EXT -C GL_INTENSITY12_EXT -C GL_INTENSITY16_EXT -C GL_RGB2_EXT -C GL_RGB4_EXT -C GL_RGB5_EXT -C GL_RGB8_EXT -C GL_RGB10_EXT -C GL_RGB12_EXT -C GL_RGB16_EXT -C GL_RGBA2_EXT -C GL_RGBA4_EXT -C GL_RGB5_A1_EXT -C GL_RGBA8_EXT -C GL_RGB10_A2_EXT -C GL_RGBA12_EXT -C GL_RGBA16_EXT - -C PixelMap -C GL_PIXEL_MAP_I_TO_I -C GL_PIXEL_MAP_S_TO_S -C GL_PIXEL_MAP_I_TO_R -C GL_PIXEL_MAP_I_TO_G -C GL_PIXEL_MAP_I_TO_B -C GL_PIXEL_MAP_I_TO_A -C GL_PIXEL_MAP_R_TO_R -C GL_PIXEL_MAP_G_TO_G -C GL_PIXEL_MAP_B_TO_B -C GL_PIXEL_MAP_A_TO_A - -C PixelStore -C GL_UNPACK_SWAP_BYTES -C GL_UNPACK_LSB_FIRST -C GL_UNPACK_ROW_LENGTH -C GL_UNPACK_SKIP_ROWS -C GL_UNPACK_SKIP_PIXELS -C GL_UNPACK_ALIGNMENT -C GL_PACK_SWAP_BYTES -C GL_PACK_LSB_FIRST -C GL_PACK_ROW_LENGTH -C GL_PACK_SKIP_ROWS -C GL_PACK_SKIP_PIXELS -C GL_PACK_ALIGNMENT -C GL_PACK_SKIP_IMAGES_EXT -C GL_PACK_IMAGE_HEIGHT_EXT -C GL_UNPACK_SKIP_IMAGES_EXT -C GL_UNPACK_IMAGE_HEIGHT_EXT - -C PixelTransfer -C GL_MAP_COLOR -C GL_MAP_STENCIL -C GL_INDEX_SHIFT -C GL_INDEX_OFFSET -C GL_RED_SCALE -C GL_RED_BIAS -C GL_GREEN_SCALE -C GL_GREEN_BIAS -C GL_BLUE_SCALE -C GL_BLUE_BIAS -C GL_ALPHA_SCALE -C GL_ALPHA_BIAS -C GL_DEPTH_SCALE -C GL_DEPTH_BIAS -C GL_POST_CONVOLUTION_RED_SCALE_EXT -C GL_POST_CONVOLUTION_GREEN_SCALE_EXT -C GL_POST_CONVOLUTION_BLUE_SCALE_EXT -C GL_POST_CONVOLUTION_ALPHA_SCALE_EXT -C GL_POST_CONVOLUTION_RED_BIAS_EXT -C GL_POST_CONVOLUTION_GREEN_BIAS_EXT -C GL_POST_CONVOLUTION_BLUE_BIAS_EXT -C GL_POST_CONVOLUTION_ALPHA_BIAS_EXT - -C PixelType - integer*4 GL_BITMAP - parameter ( GL_BITMAP = 6656 ) -C GL_BYTE -C GL_UNSIGNED_BYTE -C GL_SHORT -C GL_UNSIGNED_SHORT -C GL_INT -C GL_UNSIGNED_INT -C GL_FLOAT - -C PolygonMode - integer*4 GL_POINT - parameter ( GL_POINT = 6912 ) - integer*4 GL_LINE - parameter ( GL_LINE = 6913 ) - integer*4 GL_FILL - parameter ( GL_FILL = 6914 ) - -C ReadBufferMode -C GL_FRONT_LEFT -C GL_FRONT_RIGHT -C GL_BACK_LEFT -C GL_BACK_RIGHT -C GL_FRONT -C GL_BACK -C GL_LEFT -C GL_RIGHT -C GL_AUX0 -C GL_AUX1 -C GL_AUX2 -C GL_AUX3 - -C RenderingMode - integer*4 GL_RENDER - parameter ( GL_RENDER = 7168 ) - integer*4 GL_FEEDBACK - parameter ( GL_FEEDBACK = 7169 ) - integer*4 GL_SELECT - parameter ( GL_SELECT = 7170 ) - -C SamplePattern -C GL_1PASS_SGIS -C GL_2PASS_0_SGIS -C GL_2PASS_1_SGIS -C GL_4PASS_0_SGIS -C GL_4PASS_1_SGIS -C GL_4PASS_2_SGIS -C GL_4PASS_3_SGIS - -C SeparableTarget -C GL_SEPARABLE_2D_EXT - -C ShadingModel - integer*4 GL_FLAT - parameter ( GL_FLAT = 7424 ) - integer*4 GL_SMOOTH - parameter ( GL_SMOOTH = 7425 ) - -C StencilFunction -C GL_NEVER -C GL_LESS -C GL_EQUAL -C GL_LEQUAL -C GL_GREATER -C GL_NOTEQUAL -C GL_GEQUAL -C GL_ALWAYS - -C StencilOp -C GL_ZERO - integer*4 GL_KEEP - parameter ( GL_KEEP = 7680 ) - integer*4 GL_REPLACE - parameter ( GL_REPLACE = 7681 ) - integer*4 GL_INCR - parameter ( GL_INCR = 7682 ) - integer*4 GL_DECR - parameter ( GL_DECR = 7683 ) -C GL_INVERT - -C StringName - integer*4 GL_VENDOR - parameter ( GL_VENDOR = 7936 ) - integer*4 GL_RENDERER - parameter ( GL_RENDERER = 7937 ) - integer*4 GL_VERSION - parameter ( GL_VERSION = 7938 ) - integer*4 GL_EXTENSIONS - parameter ( GL_EXTENSIONS = 7939 ) - -C TextureCoordName - integer*4 GL_S - parameter ( GL_S = 8192 ) - integer*4 GL_T - parameter ( GL_T = 8193 ) - integer*4 GL_R - parameter ( GL_R = 8194 ) - integer*4 GL_Q - parameter ( GL_Q = 8195 ) - -C TextureEnvMode - integer*4 GL_MODULATE - parameter ( GL_MODULATE = 8448 ) - integer*4 GL_DECAL - parameter ( GL_DECAL = 8449 ) -C GL_BLEND -C GL_REPLACE_EXT - -C TextureEnvParameter - integer*4 GL_TEXTURE_ENV_MODE - parameter ( GL_TEXTURE_ENV_MODE = 8704 ) - integer*4 GL_TEXTURE_ENV_COLOR - parameter ( GL_TEXTURE_ENV_COLOR = 8705 ) - -C TextureEnvTarget - integer*4 GL_TEXTURE_ENV - parameter ( GL_TEXTURE_ENV = 8960 ) - -C TextureGenMode - integer*4 GL_EYE_LINEAR - parameter ( GL_EYE_LINEAR = 9216 ) - integer*4 GL_OBJECT_LINEAR - parameter ( GL_OBJECT_LINEAR = 9217 ) - integer*4 GL_SPHERE_MAP - parameter ( GL_SPHERE_MAP = 9218 ) - -C TextureGenParameter - integer*4 GL_TEXTURE_GEN_MODE - parameter ( GL_TEXTURE_GEN_MODE = 9472 ) - integer*4 GL_OBJECT_PLANE - parameter ( GL_OBJECT_PLANE = 9473 ) - integer*4 GL_EYE_PLANE - parameter ( GL_EYE_PLANE = 9474 ) - -C TextureMagFilter - integer*4 GL_NEAREST - parameter ( GL_NEAREST = 9728 ) - integer*4 GL_LINEAR - parameter ( GL_LINEAR = 9729 ) -C GL_LINEAR_DETAIL_SGIS -C GL_LINEAR_DETAIL_ALPHA_SGIS -C GL_LINEAR_DETAIL_COLOR_SGIS -C GL_LINEAR_SHARPEN_SGIS -C GL_LINEAR_SHARPEN_ALPHA_SGIS -C GL_LINEAR_SHARPEN_COLOR_SGIS - -C TextureMinFilter -C GL_NEAREST -C GL_LINEAR - integer*4 GL_NEAREST_MIPMAP_NEAREST - parameter ( GL_NEAREST_MIPMAP_NEAREST = 9984 ) - integer*4 GL_LINEAR_MIPMAP_NEAREST - parameter ( GL_LINEAR_MIPMAP_NEAREST = 9985 ) - integer*4 GL_NEAREST_MIPMAP_LINEAR - parameter ( GL_NEAREST_MIPMAP_LINEAR = 9986 ) - integer*4 GL_LINEAR_MIPMAP_LINEAR - parameter ( GL_LINEAR_MIPMAP_LINEAR = 9987 ) - -C TextureParameterName - integer*4 GL_TEXTURE_MAG_FILTER - parameter ( GL_TEXTURE_MAG_FILTER = 10240 ) - integer*4 GL_TEXTURE_MIN_FILTER - parameter ( GL_TEXTURE_MIN_FILTER = 10241 ) - integer*4 GL_TEXTURE_WRAP_S - parameter ( GL_TEXTURE_WRAP_S = 10242 ) - integer*4 GL_TEXTURE_WRAP_T - parameter ( GL_TEXTURE_WRAP_T = 10243 ) -C GL_TEXTURE_BORDER_COLOR -C GL_TEXTURE_WRAP_R_EXT -C GL_DETAIL_TEXTURE_LEVEL_SGIS -C GL_DETAIL_TEXTURE_MODE_SGIS - -C TextureTarget -C GL_TEXTURE_1D -C GL_TEXTURE_2D -C GL_PROXY_TEXTURE_1D_EXT -C GL_PROXY_TEXTURE_2D_EXT -C GL_TEXTURE_3D_EXT -C GL_PROXY_TEXTURE_3D_EXT -C GL_DETAIL_TEXTURE_2D_SGIS - -C TextureWrapMode - integer*4 GL_CLAMP - parameter ( GL_CLAMP = 10496 ) - integer*4 GL_REPEAT - parameter ( GL_REPEAT = 10497 ) - -C ClipPlaneName - integer*4 GL_CLIP_PLANE0 - parameter ( GL_CLIP_PLANE0 = 12288 ) - integer*4 GL_CLIP_PLANE1 - parameter ( GL_CLIP_PLANE1 = 12289 ) - integer*4 GL_CLIP_PLANE2 - parameter ( GL_CLIP_PLANE2 = 12290 ) - integer*4 GL_CLIP_PLANE3 - parameter ( GL_CLIP_PLANE3 = 12291 ) - integer*4 GL_CLIP_PLANE4 - parameter ( GL_CLIP_PLANE4 = 12292 ) - integer*4 GL_CLIP_PLANE5 - parameter ( GL_CLIP_PLANE5 = 12293 ) - -C LightName - integer*4 GL_LIGHT0 - parameter ( GL_LIGHT0 = 16384 ) - integer*4 GL_LIGHT1 - parameter ( GL_LIGHT1 = 16385 ) - integer*4 GL_LIGHT2 - parameter ( GL_LIGHT2 = 16386 ) - integer*4 GL_LIGHT3 - parameter ( GL_LIGHT3 = 16387 ) - integer*4 GL_LIGHT4 - parameter ( GL_LIGHT4 = 16388 ) - integer*4 GL_LIGHT5 - parameter ( GL_LIGHT5 = 16389 ) - integer*4 GL_LIGHT6 - parameter ( GL_LIGHT6 = 16390 ) - integer*4 GL_LIGHT7 - parameter ( GL_LIGHT7 = 16391 ) - -C Extensions - integer*4 GL_EXT_abgr - parameter ( GL_EXT_abgr = 1 ) - integer*4 GL_EXT_blend_color - parameter ( GL_EXT_blend_color = 1 ) - integer*4 GL_EXT_blend_logic_op - parameter ( GL_EXT_blend_logic_op = 1 ) - integer*4 GL_EXT_blend_minmax - parameter ( GL_EXT_blend_minmax = 1 ) - integer*4 GL_EXT_blend_subtract - parameter ( GL_EXT_blend_subtract = 1 ) - integer*4 GL_EXT_convolution - parameter ( GL_EXT_convolution = 1 ) - integer*4 GL_EXT_histogram - parameter ( GL_EXT_histogram = 1 ) - integer*4 GL_EXT_polygon_offset - parameter ( GL_EXT_polygon_offset = 1 ) - integer*4 GL_EXT_subtexture - parameter ( GL_EXT_subtexture = 1 ) - integer*4 GL_EXT_texture - parameter ( GL_EXT_texture = 1 ) - integer*4 GL_EXT_texture3D - parameter ( GL_EXT_texture3D = 1 ) - integer*4 GL_SGIS_detail_texture - parameter ( GL_SGIS_detail_texture = 1 ) - integer*4 GL_SGIS_multisample - parameter ( GL_SGIS_multisample = 1 ) - integer*4 GL_SGIS_sharpen_texture - parameter ( GL_SGIS_sharpen_texture = 1 ) - -C EXT_abgr - integer*4 GL_ABGR_EXT - parameter ( GL_ABGR_EXT = 32768 ) - -C EXT_blend_color - integer*4 GL_CONSTANT_COLOR_EXT - parameter ( GL_CONSTANT_COLOR_EXT = 32769 ) - integer*4 GL_ONE_MINUS_CONSTANT_COLOR_EXT - parameter ( GL_ONE_MINUS_CONSTANT_COLOR_EXT = 32770 ) - integer*4 GL_CONSTANT_ALPHA_EXT - parameter ( GL_CONSTANT_ALPHA_EXT = 32771 ) - integer*4 GL_ONE_MINUS_CONSTANT_ALPHA_EXT - parameter ( GL_ONE_MINUS_CONSTANT_ALPHA_EXT = 32772 ) - integer*4 GL_BLEND_COLOR_EXT - parameter ( GL_BLEND_COLOR_EXT = 32773 ) - -C EXT_blend_minmax - integer*4 GL_FUNC_ADD_EXT - parameter ( GL_FUNC_ADD_EXT = 32774 ) - integer*4 GL_MIN_EXT - parameter ( GL_MIN_EXT = 32775 ) - integer*4 GL_MAX_EXT - parameter ( GL_MAX_EXT = 32776 ) - integer*4 GL_BLEND_EQUATION_EXT - parameter ( GL_BLEND_EQUATION_EXT = 32777 ) - -C EXT_blend_subtract - integer*4 GL_FUNC_SUBTRACT_EXT - parameter ( GL_FUNC_SUBTRACT_EXT = 32778 ) - integer*4 GL_FUNC_REVERSE_SUBTRACT_EXT - parameter ( GL_FUNC_REVERSE_SUBTRACT_EXT = 32779 ) - -C EXT_convolution - integer*4 GL_CONVOLUTION_1D_EXT - parameter ( GL_CONVOLUTION_1D_EXT = 32784 ) - integer*4 GL_CONVOLUTION_2D_EXT - parameter ( GL_CONVOLUTION_2D_EXT = 32785 ) - integer*4 GL_SEPARABLE_2D_EXT - parameter ( GL_SEPARABLE_2D_EXT = 32786 ) - integer*4 GL_CONVOLUTION_BORDER_MODE_EXT - parameter ( GL_CONVOLUTION_BORDER_MODE_EXT = 32787 ) - integer*4 GL_CONVOLUTION_FILTER_SCALE_EXT - parameter ( GL_CONVOLUTION_FILTER_SCALE_EXT = 32788 ) - integer*4 GL_CONVOLUTION_FILTER_BIAS_EXT - parameter ( GL_CONVOLUTION_FILTER_BIAS_EXT = 32789 ) - integer*4 GL_REDUCE_EXT - parameter ( GL_REDUCE_EXT = 32790 ) - integer*4 GL_CONVOLUTION_FORMAT_EXT - parameter ( GL_CONVOLUTION_FORMAT_EXT = 32791 ) - integer*4 GL_CONVOLUTION_WIDTH_EXT - parameter ( GL_CONVOLUTION_WIDTH_EXT = 32792 ) - integer*4 GL_CONVOLUTION_HEIGHT_EXT - parameter ( GL_CONVOLUTION_HEIGHT_EXT = 32793 ) - integer*4 GL_MAX_CONVOLUTION_WIDTH_EXT - parameter ( GL_MAX_CONVOLUTION_WIDTH_EXT = 32794 ) - integer*4 GL_MAX_CONVOLUTION_HEIGHT_EXT - parameter ( GL_MAX_CONVOLUTION_HEIGHT_EXT = 32795 ) - integer*4 GL_POST_CONVOLUTION_RED_SCALE_EX - parameter ( GL_POST_CONVOLUTION_RED_SCALE_EX = 32796 ) - integer*4 GL_POST_CONVOLUTION_GREEN_SCALE_ - parameter ( GL_POST_CONVOLUTION_GREEN_SCALE_ = 32797 ) - integer*4 GL_POST_CONVOLUTION_BLUE_SCALE_E - parameter ( GL_POST_CONVOLUTION_BLUE_SCALE_E = 32798 ) - integer*4 GL_POST_CONVOLUTION_ALPHA_SCALE_ - parameter ( GL_POST_CONVOLUTION_ALPHA_SCALE_ = 32799 ) - integer*4 GL_POST_CONVOLUTION_RED_BIAS_EXT - parameter ( GL_POST_CONVOLUTION_RED_BIAS_EXT = 32800 ) - integer*4 GL_POST_CONVOLUTION_GREEN_BIAS_E - parameter ( GL_POST_CONVOLUTION_GREEN_BIAS_E = 32801 ) - integer*4 GL_POST_CONVOLUTION_BLUE_BIAS_EX - parameter ( GL_POST_CONVOLUTION_BLUE_BIAS_EX = 32802 ) - integer*4 GL_POST_CONVOLUTION_ALPHA_BIAS_E - parameter ( GL_POST_CONVOLUTION_ALPHA_BIAS_E = 32803 ) - -C EXT_histogram - integer*4 GL_HISTOGRAM_EXT - parameter ( GL_HISTOGRAM_EXT = 32804 ) - integer*4 GL_PROXY_HISTOGRAM_EXT - parameter ( GL_PROXY_HISTOGRAM_EXT = 32805 ) - integer*4 GL_HISTOGRAM_WIDTH_EXT - parameter ( GL_HISTOGRAM_WIDTH_EXT = 32806 ) - integer*4 GL_HISTOGRAM_FORMAT_EXT - parameter ( GL_HISTOGRAM_FORMAT_EXT = 32807 ) - integer*4 GL_HISTOGRAM_RED_SIZE_EXT - parameter ( GL_HISTOGRAM_RED_SIZE_EXT = 32808 ) - integer*4 GL_HISTOGRAM_GREEN_SIZE_EXT - parameter ( GL_HISTOGRAM_GREEN_SIZE_EXT = 32809 ) - integer*4 GL_HISTOGRAM_BLUE_SIZE_EXT - parameter ( GL_HISTOGRAM_BLUE_SIZE_EXT = 32810 ) - integer*4 GL_HISTOGRAM_ALPHA_SIZE_EXT - parameter ( GL_HISTOGRAM_ALPHA_SIZE_EXT = 32811 ) - integer*4 GL_HISTOGRAM_LUMINANCE_SIZE_EXT - parameter ( GL_HISTOGRAM_LUMINANCE_SIZE_EXT = 32812 ) - integer*4 GL_HISTOGRAM_SINK_EXT - parameter ( GL_HISTOGRAM_SINK_EXT = 32813 ) - integer*4 GL_MINMAX_EXT - parameter ( GL_MINMAX_EXT = 32814 ) - integer*4 GL_MINMAX_FORMAT_EXT - parameter ( GL_MINMAX_FORMAT_EXT = 32815 ) - integer*4 GL_MINMAX_SINK_EXT - parameter ( GL_MINMAX_SINK_EXT = 32816 ) - integer*4 GL_TABLE_TOO_LARGE_EXT - parameter ( GL_TABLE_TOO_LARGE_EXT = 32817 ) - -C EXT_polygon_offset - integer*4 GL_POLYGON_OFFSET_EXT - parameter ( GL_POLYGON_OFFSET_EXT = 32823 ) - integer*4 GL_POLYGON_OFFSET_FACTOR_EXT - parameter ( GL_POLYGON_OFFSET_FACTOR_EXT = 32824 ) - integer*4 GL_POLYGON_OFFSET_BIAS_EXT - parameter ( GL_POLYGON_OFFSET_BIAS_EXT = 32825 ) - -C EXT_texture - integer*4 GL_ALPHA4_EXT - parameter ( GL_ALPHA4_EXT = 32827 ) - integer*4 GL_ALPHA8_EXT - parameter ( GL_ALPHA8_EXT = 32828 ) - integer*4 GL_ALPHA12_EXT - parameter ( GL_ALPHA12_EXT = 32829 ) - integer*4 GL_ALPHA16_EXT - parameter ( GL_ALPHA16_EXT = 32830 ) - integer*4 GL_LUMINANCE4_EXT - parameter ( GL_LUMINANCE4_EXT = 32831 ) - integer*4 GL_LUMINANCE8_EXT - parameter ( GL_LUMINANCE8_EXT = 32832 ) - integer*4 GL_LUMINANCE12_EXT - parameter ( GL_LUMINANCE12_EXT = 32833 ) - integer*4 GL_LUMINANCE16_EXT - parameter ( GL_LUMINANCE16_EXT = 32834 ) - integer*4 GL_LUMINANCE4_ALPHA4_EXT - parameter ( GL_LUMINANCE4_ALPHA4_EXT = 32835 ) - integer*4 GL_LUMINANCE6_ALPHA2_EXT - parameter ( GL_LUMINANCE6_ALPHA2_EXT = 32836 ) - integer*4 GL_LUMINANCE8_ALPHA8_EXT - parameter ( GL_LUMINANCE8_ALPHA8_EXT = 32837 ) - integer*4 GL_LUMINANCE12_ALPHA4_EXT - parameter ( GL_LUMINANCE12_ALPHA4_EXT = 32838 ) - integer*4 GL_LUMINANCE12_ALPHA12_EXT - parameter ( GL_LUMINANCE12_ALPHA12_EXT = 32839 ) - integer*4 GL_LUMINANCE16_ALPHA16_EXT - parameter ( GL_LUMINANCE16_ALPHA16_EXT = 32840 ) - integer*4 GL_INTENSITY_EXT - parameter ( GL_INTENSITY_EXT = 32841 ) - integer*4 GL_INTENSITY4_EXT - parameter ( GL_INTENSITY4_EXT = 32842 ) - integer*4 GL_INTENSITY8_EXT - parameter ( GL_INTENSITY8_EXT = 32843 ) - integer*4 GL_INTENSITY12_EXT - parameter ( GL_INTENSITY12_EXT = 32844 ) - integer*4 GL_INTENSITY16_EXT - parameter ( GL_INTENSITY16_EXT = 32845 ) - integer*4 GL_RGB2_EXT - parameter ( GL_RGB2_EXT = 32846 ) - integer*4 GL_RGB4_EXT - parameter ( GL_RGB4_EXT = 32847 ) - integer*4 GL_RGB5_EXT - parameter ( GL_RGB5_EXT = 32848 ) - integer*4 GL_RGB8_EXT - parameter ( GL_RGB8_EXT = 32849 ) - integer*4 GL_RGB10_EXT - parameter ( GL_RGB10_EXT = 32850 ) - integer*4 GL_RGB12_EXT - parameter ( GL_RGB12_EXT = 32851 ) - integer*4 GL_RGB16_EXT - parameter ( GL_RGB16_EXT = 32852 ) - integer*4 GL_RGBA2_EXT - parameter ( GL_RGBA2_EXT = 32853 ) - integer*4 GL_RGBA4_EXT - parameter ( GL_RGBA4_EXT = 32854 ) - integer*4 GL_RGB5_A1_EXT - parameter ( GL_RGB5_A1_EXT = 32855 ) - integer*4 GL_RGBA8_EXT - parameter ( GL_RGBA8_EXT = 32856 ) - integer*4 GL_RGB10_A2_EXT - parameter ( GL_RGB10_A2_EXT = 32857 ) - integer*4 GL_RGBA12_EXT - parameter ( GL_RGBA12_EXT = 32858 ) - integer*4 GL_RGBA16_EXT - parameter ( GL_RGBA16_EXT = 32859 ) - integer*4 GL_TEXTURE_RED_SIZE_EXT - parameter ( GL_TEXTURE_RED_SIZE_EXT = 32860 ) - integer*4 GL_TEXTURE_GREEN_SIZE_EXT - parameter ( GL_TEXTURE_GREEN_SIZE_EXT = 32861 ) - integer*4 GL_TEXTURE_BLUE_SIZE_EXT - parameter ( GL_TEXTURE_BLUE_SIZE_EXT = 32862 ) - integer*4 GL_TEXTURE_ALPHA_SIZE_EXT - parameter ( GL_TEXTURE_ALPHA_SIZE_EXT = 32863 ) - integer*4 GL_TEXTURE_LUMINANCE_SIZE_EXT - parameter ( GL_TEXTURE_LUMINANCE_SIZE_EXT = 32864 ) - integer*4 GL_TEXTURE_INTENSITY_SIZE_EXT - parameter ( GL_TEXTURE_INTENSITY_SIZE_EXT = 32865 ) - integer*4 GL_REPLACE_EXT - parameter ( GL_REPLACE_EXT = 32866 ) - integer*4 GL_PROXY_TEXTURE_1D_EXT - parameter ( GL_PROXY_TEXTURE_1D_EXT = 32867 ) - integer*4 GL_PROXY_TEXTURE_2D_EXT - parameter ( GL_PROXY_TEXTURE_2D_EXT = 32868 ) - integer*4 GL_TEXTURE_TOO_LARGE_EXT - parameter ( GL_TEXTURE_TOO_LARGE_EXT = 32869 ) - -C EXT_texture3D - integer*4 GL_PACK_SKIP_IMAGES_EXT - parameter ( GL_PACK_SKIP_IMAGES_EXT = 32875 ) - integer*4 GL_PACK_IMAGE_HEIGHT_EXT - parameter ( GL_PACK_IMAGE_HEIGHT_EXT = 32876 ) - integer*4 GL_UNPACK_SKIP_IMAGES_EXT - parameter ( GL_UNPACK_SKIP_IMAGES_EXT = 32877 ) - integer*4 GL_UNPACK_IMAGE_HEIGHT_EXT - parameter ( GL_UNPACK_IMAGE_HEIGHT_EXT = 32878 ) - integer*4 GL_TEXTURE_3D_EXT - parameter ( GL_TEXTURE_3D_EXT = 32879 ) - integer*4 GL_PROXY_TEXTURE_3D_EXT - parameter ( GL_PROXY_TEXTURE_3D_EXT = 32880 ) - integer*4 GL_TEXTURE_DEPTH_EXT - parameter ( GL_TEXTURE_DEPTH_EXT = 32881 ) - integer*4 GL_TEXTURE_WRAP_R_EXT - parameter ( GL_TEXTURE_WRAP_R_EXT = 32882 ) - integer*4 GL_MAX_3D_TEXTURE_SIZE_EXT - parameter ( GL_MAX_3D_TEXTURE_SIZE_EXT = 32883 ) - -C SGIS_detail_texture - integer*4 GL_DETAIL_TEXTURE_2D_SGIS - parameter ( GL_DETAIL_TEXTURE_2D_SGIS = 32917 ) - integer*4 GL_DETAIL_TEXTURE_2D_BINDING_SGI - parameter ( GL_DETAIL_TEXTURE_2D_BINDING_SGI = 32918 ) - integer*4 GL_LINEAR_DETAIL_SGIS - parameter ( GL_LINEAR_DETAIL_SGIS = 32919 ) - integer*4 GL_LINEAR_DETAIL_ALPHA_SGIS - parameter ( GL_LINEAR_DETAIL_ALPHA_SGIS = 32920 ) - integer*4 GL_LINEAR_DETAIL_COLOR_SGIS - parameter ( GL_LINEAR_DETAIL_COLOR_SGIS = 32921 ) - integer*4 GL_DETAIL_TEXTURE_LEVEL_SGIS - parameter ( GL_DETAIL_TEXTURE_LEVEL_SGIS = 32922 ) - integer*4 GL_DETAIL_TEXTURE_MODE_SGIS - parameter ( GL_DETAIL_TEXTURE_MODE_SGIS = 32923 ) - integer*4 GL_DETAIL_TEXTURE_FUNC_POINTS_S - parameter ( GL_DETAIL_TEXTURE_FUNC_POINTS_S = 32924 ) - -C SGIS_multisample - integer*4 GL_MULTISAMPLE_BIT_EXT - parameter ( GL_MULTISAMPLE_BIT_EXT = 536870912 ) - integer*4 GL_MULTISAMPLE_SGIS - parameter ( GL_MULTISAMPLE_SGIS = 32925 ) - integer*4 GL_SAMPLE_ALPHA_TO_MASK_SGIS - parameter ( GL_SAMPLE_ALPHA_TO_MASK_SGIS = 32926 ) - integer*4 GL_SAMPLE_ALPHA_TO_ONE_SGIS - parameter ( GL_SAMPLE_ALPHA_TO_ONE_SGIS = 32927 ) - integer*4 GL_SAMPLE_MASK_SGIS - parameter ( GL_SAMPLE_MASK_SGIS = 32928 ) - integer*4 GL_1PASS_SGIS - parameter ( GL_1PASS_SGIS = 32929 ) - integer*4 GL_2PASS_0_SGIS - parameter ( GL_2PASS_0_SGIS = 32930 ) - integer*4 GL_2PASS_1_SGIS - parameter ( GL_2PASS_1_SGIS = 32931 ) - integer*4 GL_4PASS_0_SGIS - parameter ( GL_4PASS_0_SGIS = 32932 ) - integer*4 GL_4PASS_1_SGIS - parameter ( GL_4PASS_1_SGIS = 32933 ) - integer*4 GL_4PASS_2_SGIS - parameter ( GL_4PASS_2_SGIS = 32934 ) - integer*4 GL_4PASS_3_SGIS - parameter ( GL_4PASS_3_SGIS = 32935 ) - integer*4 GL_SAMPLE_BUFFERS_SGIS - parameter ( GL_SAMPLE_BUFFERS_SGIS = 32936 ) - integer*4 GL_SAMPLES_SGIS - parameter ( GL_SAMPLES_SGIS = 32937 ) - integer*4 GL_SAMPLE_MASK_VALUE_SGIS - parameter ( GL_SAMPLE_MASK_VALUE_SGIS = 32938 ) - integer*4 GL_SAMPLE_MASK_INVERT_SGIS - parameter ( GL_SAMPLE_MASK_INVERT_SGIS = 32939 ) - integer*4 GL_SAMPLE_PATTERN_SGIS - parameter ( GL_SAMPLE_PATTERN_SGIS = 32940 ) - -C SGIS_sharpen_texture - integer*4 GL_LINEAR_SHARPEN_SGIS - parameter ( GL_LINEAR_SHARPEN_SGIS = 32941 ) - integer*4 GL_LINEAR_SHARPEN_ALPHA_SGIS - parameter ( GL_LINEAR_SHARPEN_ALPHA_SGIS = 32942 ) - integer*4 GL_LINEAR_SHARPEN_COLOR_SGIS - parameter ( GL_LINEAR_SHARPEN_COLOR_SGIS = 32943 ) - integer*4 GL_SHARPEN_TEXTURE_FUNC_POINTS_S - parameter ( GL_SHARPEN_TEXTURE_FUNC_POINTS_S = 32944 ) - -C *********************************************************** - - - character*128 fglGetString - integer fglGetError - integer*4 fglRenderMode - logical*1 fglAreTexturesResidentEXT - logical*1 fglIsEnabled - logical*1 fglIsList - logical*1 fglIsTextureEXT - logical*4 fglGenLists - logical*4 fglGenTexturesEXT diff --git a/lib/glut-3.7.6/include/GL/fglu.h b/lib/glut-3.7.6/include/GL/fglu.h deleted file mode 100644 index 0b0497675..000000000 --- a/lib/glut-3.7.6/include/GL/fglu.h +++ /dev/null @@ -1,210 +0,0 @@ - -C GLUT version of "GL/fgl.h" - -C Modifications from SGI IRIX 5.3 version: -C 1) F prefix removed from GLU constants. -C 2) Fix GLU_TRUE and GLU_FALSE. - -C *** Generic constants *** - -C Errors: (return value 0 = no error) - integer*4 GLU_INVALID_ENUM - parameter ( GLU_INVALID_ENUM = 100900 ) - integer*4 GLU_INVALID_VALUE - parameter ( GLU_INVALID_VALUE = 100901 ) - integer*4 GLU_OUT_OF_MEMORY - parameter ( GLU_OUT_OF_MEMORY = 100902 ) - -C For laughs: - integer*4 GLU_TRUE - parameter ( GLU_TRUE = 1 ) - integer*4 GLU_FALSE - parameter ( GLU_FALSE = 0 ) - - -C *** Quadric constants *** - -C Types of normals: - integer*4 GLU_SMOOTH - parameter ( GLU_SMOOTH = 100000 ) - integer*4 GLU_FLAT - parameter ( GLU_FLAT = 100001 ) - integer*4 GLU_NONE - parameter ( GLU_NONE = 100002 ) - -C DrawStyle types: - integer*4 GLU_POINT - parameter ( GLU_POINT = 100010 ) - integer*4 GLU_LINE - parameter ( GLU_LINE = 100011 ) - integer*4 GLU_FILL - parameter ( GLU_FILL = 100012 ) - integer*4 GLU_SILHOUETTE - parameter ( GLU_SILHOUETTE = 100013 ) - -C Orientation types: - integer*4 GLU_OUTSIDE - parameter ( GLU_OUTSIDE = 100020 ) - integer*4 GLU_INSIDE - parameter ( GLU_INSIDE = 100021 ) - -C Callback types: -C GLU_ERROR 100103 - - -C *** Tesselation constants *** - -C Callback types: - integer*4 GLU_BEGIN - parameter ( GLU_BEGIN = 100100 ) - integer*4 GLU_VERTEX - parameter ( GLU_VERTEX = 100101 ) - integer*4 GLU_END - parameter ( GLU_END = 100102 ) - integer*4 GLU_ERROR - parameter ( GLU_ERROR = 100103 ) - integer*4 GLU_EDGE_FLAG - parameter ( GLU_EDGE_FLAG = 100104 ) - -C Contours types: - integer*4 GLU_CW - parameter ( GLU_CW = 100120 ) - integer*4 GLU_CCW - parameter ( GLU_CCW = 100121 ) - integer*4 GLU_INTERIOR - parameter ( GLU_INTERIOR = 100122 ) - integer*4 GLU_EXTERIOR - parameter ( GLU_EXTERIOR = 100123 ) - integer*4 GLU_UNKNOWN - parameter ( GLU_UNKNOWN = 100124 ) - - integer*4 GLU_TESS_ERROR1 - parameter ( GLU_TESS_ERROR1 = 100151 ) - integer*4 GLU_TESS_ERROR2 - parameter ( GLU_TESS_ERROR2 = 100152 ) - integer*4 GLU_TESS_ERROR3 - parameter ( GLU_TESS_ERROR3 = 100153 ) - integer*4 GLU_TESS_ERROR4 - parameter ( GLU_TESS_ERROR4 = 100154 ) - integer*4 GLU_TESS_ERROR5 - parameter ( GLU_TESS_ERROR5 = 100155 ) - integer*4 GLU_TESS_ERROR6 - parameter ( GLU_TESS_ERROR6 = 100156 ) - integer*4 GLU_TESS_ERROR7 - parameter ( GLU_TESS_ERROR7 = 100157 ) - integer*4 GLU_TESS_ERROR8 - parameter ( GLU_TESS_ERROR8 = 100158 ) - - -C *** NURBS constants *** - -C Properties: - integer*4 GLU_AUTO_LOAD_MATRIX - parameter ( GLU_AUTO_LOAD_MATRIX = 100200 ) - integer*4 GLU_CULLING - parameter ( GLU_CULLING = 100201 ) - integer*4 GLU_SAMPLING_TOLERANCE - parameter ( GLU_SAMPLING_TOLERANCE = 100203 ) - integer*4 GLU_DISPLAY_MODE - parameter ( GLU_DISPLAY_MODE = 100204 ) - -C Trimming curve types - integer*4 GLU_MAP1_TRIM_2 - parameter ( GLU_MAP1_TRIM_2 = 100210 ) - integer*4 GLU_MAP1_TRIM_3 - parameter ( GLU_MAP1_TRIM_3 = 100211 ) - -C Display modes: -C GLU_FILL 100012 - integer*4 GLU_OUTLINE_POLYGON - parameter ( GLU_OUTLINE_POLYGON = 100240 ) - integer*4 GLU_OUTLINE_PATCH - parameter ( GLU_OUTLINE_PATCH = 100241 ) - -C Callbacks: -C GLU_ERROR 100103 - -C Errors: - integer*4 GLU_NURBS_ERROR1 - parameter ( GLU_NURBS_ERROR1 = 100251 ) - integer*4 GLU_NURBS_ERROR2 - parameter ( GLU_NURBS_ERROR2 = 100252 ) - integer*4 GLU_NURBS_ERROR3 - parameter ( GLU_NURBS_ERROR3 = 100253 ) - integer*4 GLU_NURBS_ERROR4 - parameter ( GLU_NURBS_ERROR4 = 100254 ) - integer*4 GLU_NURBS_ERROR5 - parameter ( GLU_NURBS_ERROR5 = 100255 ) - integer*4 GLU_NURBS_ERROR6 - parameter ( GLU_NURBS_ERROR6 = 100256 ) - integer*4 GLU_NURBS_ERROR7 - parameter ( GLU_NURBS_ERROR7 = 100257 ) - integer*4 GLU_NURBS_ERROR8 - parameter ( GLU_NURBS_ERROR8 = 100258 ) - integer*4 GLU_NURBS_ERROR9 - parameter ( GLU_NURBS_ERROR9 = 100259 ) - integer*4 GLU_NURBS_ERROR10 - parameter ( GLU_NURBS_ERROR10 = 100260 ) - integer*4 GLU_NURBS_ERROR11 - parameter ( GLU_NURBS_ERROR11 = 100261 ) - integer*4 GLU_NURBS_ERROR12 - parameter ( GLU_NURBS_ERROR12 = 100262 ) - integer*4 GLU_NURBS_ERROR13 - parameter ( GLU_NURBS_ERROR13 = 100263 ) - integer*4 GLU_NURBS_ERROR14 - parameter ( GLU_NURBS_ERROR14 = 100264 ) - integer*4 GLU_NURBS_ERROR15 - parameter ( GLU_NURBS_ERROR15 = 100265 ) - integer*4 GLU_NURBS_ERROR16 - parameter ( GLU_NURBS_ERROR16 = 100266 ) - integer*4 GLU_NURBS_ERROR17 - parameter ( GLU_NURBS_ERROR17 = 100267 ) - integer*4 GLU_NURBS_ERROR18 - parameter ( GLU_NURBS_ERROR18 = 100268 ) - integer*4 GLU_NURBS_ERROR19 - parameter ( GLU_NURBS_ERROR19 = 100269 ) - integer*4 GLU_NURBS_ERROR20 - parameter ( GLU_NURBS_ERROR20 = 100270 ) - integer*4 GLU_NURBS_ERROR21 - parameter ( GLU_NURBS_ERROR21 = 100271 ) - integer*4 GLU_NURBS_ERROR22 - parameter ( GLU_NURBS_ERROR22 = 100272 ) - integer*4 GLU_NURBS_ERROR23 - parameter ( GLU_NURBS_ERROR23 = 100273 ) - integer*4 GLU_NURBS_ERROR24 - parameter ( GLU_NURBS_ERROR24 = 100274 ) - integer*4 GLU_NURBS_ERROR25 - parameter ( GLU_NURBS_ERROR25 = 100275 ) - integer*4 GLU_NURBS_ERROR26 - parameter ( GLU_NURBS_ERROR26 = 100276 ) - integer*4 GLU_NURBS_ERROR27 - parameter ( GLU_NURBS_ERROR27 = 100277 ) - integer*4 GLU_NURBS_ERROR28 - parameter ( GLU_NURBS_ERROR28 = 100278 ) - integer*4 GLU_NURBS_ERROR29 - parameter ( GLU_NURBS_ERROR29 = 100279 ) - integer*4 GLU_NURBS_ERROR30 - parameter ( GLU_NURBS_ERROR30 = 100280 ) - integer*4 GLU_NURBS_ERROR31 - parameter ( GLU_NURBS_ERROR31 = 100281 ) - integer*4 GLU_NURBS_ERROR32 - parameter ( GLU_NURBS_ERROR32 = 100282 ) - integer*4 GLU_NURBS_ERROR33 - parameter ( GLU_NURBS_ERROR33 = 100283 ) - integer*4 GLU_NURBS_ERROR34 - parameter ( GLU_NURBS_ERROR34 = 100284 ) - integer*4 GLU_NURBS_ERROR35 - parameter ( GLU_NURBS_ERROR35 = 100285 ) - integer*4 GLU_NURBS_ERROR36 - parameter ( GLU_NURBS_ERROR36 = 100286 ) - integer*4 GLU_NURBS_ERROR37 - parameter ( GLU_NURBS_ERROR37 = 100287 ) - - - character*128 fgluErrorString - character*128 fgluGetString - integer*4 fgluBuild1DMipmaps - integer*4 fgluBuild2DMipmaps - integer*4 fgluProject - integer*4 fgluScaleImage - integer*4 fgluUnProject diff --git a/lib/glut-3.7.6/include/GL/fglut.h b/lib/glut-3.7.6/include/GL/fglut.h deleted file mode 100644 index e0ad8536d..000000000 --- a/lib/glut-3.7.6/include/GL/fglut.h +++ /dev/null @@ -1,321 +0,0 @@ - -C Copyright (c) Mark J. Kilgard, 1994. - -C This program is freely distributable without licensing fees -C and is provided without guarantee or warrantee expressed or -C implied. This program is -not- in the public domain. - -C GLUT Fortran header file - -C display mode bit masks - integer*4 GLUT_RGB - parameter ( GLUT_RGB = 0 ) - integer*4 GLUT_RGBA - parameter ( GLUT_RGBA = 0 ) - integer*4 GLUT_INDEX - parameter ( GLUT_INDEX = 1 ) - integer*4 GLUT_SINGLE - parameter ( GLUT_SINGLE = 0 ) - integer*4 GLUT_DOUBLE - parameter ( GLUT_DOUBLE = 2 ) - integer*4 GLUT_ACCUM - parameter ( GLUT_ACCUM = 4 ) - integer*4 GLUT_ALPHA - parameter ( GLUT_ALPHA = 8 ) - integer*4 GLUT_DEPTH - parameter ( GLUT_DEPTH = 16 ) - integer*4 GLUT_STENCIL - parameter ( GLUT_STENCIL = 32 ) - integer*4 GLUT_MULTISAMPLE - parameter ( GLUT_MULTISAMPLE = 128 ) - integer*4 GLUT_STEREO - parameter ( GLUT_STEREO = 256 ) - -C mouse buttons - integer*4 GLUT_LEFT_BUTTON - parameter ( GLUT_LEFT_BUTTON = 0 ) - integer*4 GLUT_MIDDLE_BUTTON - parameter ( GLUT_MIDDLE_BUTTON = 1 ) - integer*4 GLUT_RIGHT_BUTTON - parameter ( GLUT_RIGHT_BUTTON = 2 ) - -C mouse button callback state - integer*4 GLUT_DOWN - parameter ( GLUT_DOWN = 0 ) - integer*4 GLUT_UP - parameter ( GLUT_UP = 1 ) - -C special key callback values - integer*4 GLUT_KEY_F1 - parameter ( GLUT_KEY_F1 = 1 ) - integer*4 GLUT_KEY_F2 - parameter ( GLUT_KEY_F2 = 2 ) - integer*4 GLUT_KEY_F3 - parameter ( GLUT_KEY_F3 = 3 ) - integer*4 GLUT_KEY_F4 - parameter ( GLUT_KEY_F4 = 4 ) - integer*4 GLUT_KEY_F5 - parameter ( GLUT_KEY_F5 = 5 ) - integer*4 GLUT_KEY_F6 - parameter ( GLUT_KEY_F6 = 6 ) - integer*4 GLUT_KEY_F7 - parameter ( GLUT_KEY_F7 = 7 ) - integer*4 GLUT_KEY_F8 - parameter ( GLUT_KEY_F8 = 8 ) - integer*4 GLUT_KEY_F9 - parameter ( GLUT_KEY_F9 = 9 ) - integer*4 GLUT_KEY_F10 - parameter ( GLUT_KEY_F10 = 10 ) - integer*4 GLUT_KEY_F11 - parameter ( GLUT_KEY_F11 = 11 ) - integer*4 GLUT_KEY_F12 - parameter ( GLUT_KEY_F12 = 12 ) - integer*4 GLUT_KEY_LEFT - parameter ( GLUT_KEY_LEFT = 100 ) - integer*4 GLUT_KEY_UP - parameter ( GLUT_KEY_UP = 101 ) - integer*4 GLUT_KEY_RIGHT - parameter ( GLUT_KEY_RIGHT = 102 ) - integer*4 GLUT_KEY_DOWN - parameter ( GLUT_KEY_DOWN = 103 ) - integer*4 GLUT_KEY_PAGE_UP - parameter ( GLUT_KEY_PAGE_UP = 104 ) - integer*4 GLUT_KEY_PAGE_DOWN - parameter ( GLUT_KEY_PAGE_DOWN = 105 ) - integer*4 GLUT_KEY_HOME - parameter ( GLUT_KEY_HOME = 106 ) - integer*4 GLUT_KEY_END - parameter ( GLUT_KEY_END = 107 ) - integer*4 GLUT_KEY_INSERT - parameter ( GLUT_KEY_INSERT = 108 ) - -C entry/exit callback state - integer*4 GLUT_LEFT - parameter ( GLUT_LEFT = 0 ) - integer*4 GLUT_ENTERED - parameter ( GLUT_ENTERED = 1 ) - -C menu usage callback state - integer*4 GLUT_MENU_NOT_IN_USE - parameter ( GLUT_MENU_NOT_IN_USE = 0 ) - integer*4 GLUT_MENU_IN_USE - parameter ( GLUT_MENU_IN_USE = 1 ) - -C visibility callback state - integer*4 GLUT_NOT_VISIBLE - parameter ( GLUT_NOT_VISIBLE = 0 ) - integer*4 GLUT_VISIBLE - parameter ( GLUT_VISIBLE = 1 ) - -C color index component selection values - integer*4 GLUT_RED - parameter ( GLUT_RED = 0 ) - integer*4 GLUT_GREEN - parameter ( GLUT_GREEN = 1 ) - integer*4 GLUT_BLUE - parameter ( GLUT_BLUE = 2 ) - -C XXX Unfortunately, SGI's Fortran compiler links with -C EXTERNAL data even if it is not used. This defeats -C the purpose of GLUT naming fonts via opaque symbols. -C This means GLUT Fortran programmers should explicitly -C declared EXTERNAL GLUT fonts in subroutines where -C the fonts are used. - -C stroke font opaque names -C external GLUT_STROKE_ROMAN -C external GLUT_STROKE_MONO_ROMAN - -C bitmap font opaque names -C external GLUT_BITMAP_9_BY_15 -C external GLUT_BITMAP_8_BY_13 -C external GLUT_BITMAP_TIMES_ROMAN_10 -C external GLUT_BITMAP_TIMES_ROMAN_24 -C external GLUT_BITMAP_HELVETICA_10 -C external GLUT_BITMAP_HELVETICA_12 -C external GLUT_BITMAP_HELVETICA_18 - -C glutGet parameters - integer*4 GLUT_WINDOW_X - parameter ( GLUT_WINDOW_X = 100 ) - integer*4 GLUT_WINDOW_Y - parameter ( GLUT_WINDOW_Y = 101 ) - integer*4 GLUT_WINDOW_WIDTH - parameter ( GLUT_WINDOW_WIDTH = 102 ) - integer*4 GLUT_WINDOW_HEIGHT - parameter ( GLUT_WINDOW_HEIGHT = 103 ) - integer*4 GLUT_WINDOW_BUFFER_SIZE - parameter ( GLUT_WINDOW_BUFFER_SIZE = 104 ) - integer*4 GLUT_WINDOW_STENCIL_SIZE - parameter ( GLUT_WINDOW_STENCIL_SIZE = 105 ) - integer*4 GLUT_WINDOW_DEPTH_SIZE - parameter ( GLUT_WINDOW_DEPTH_SIZE = 106 ) - integer*4 GLUT_WINDOW_RED_SIZE - parameter ( GLUT_WINDOW_RED_SIZE = 107 ) - integer*4 GLUT_WINDOW_GREEN_SIZE - parameter ( GLUT_WINDOW_GREEN_SIZE = 108 ) - integer*4 GLUT_WINDOW_BLUE_SIZE - parameter ( GLUT_WINDOW_BLUE_SIZE = 109 ) - integer*4 GLUT_WINDOW_ALPHA_SIZE - parameter ( GLUT_WINDOW_ALPHA_SIZE = 110 ) - integer*4 GLUT_WINDOW_ACCUM_RED_SIZE - parameter ( GLUT_WINDOW_ACCUM_RED_SIZE = 111 ) - integer*4 GLUT_WINDOW_ACCUM_GREEN_SIZE - parameter ( GLUT_WINDOW_ACCUM_GREEN_SIZE = 112 ) - integer*4 GLUT_WINDOW_ACCUM_BLUE_SIZE - parameter ( GLUT_WINDOW_ACCUM_BLUE_SIZE = 113 ) - integer*4 GLUT_WINDOW_ACCUM_ALPHA_SIZE - parameter ( GLUT_WINDOW_ACCUM_ALPHA_SIZE = 114 ) - integer*4 GLUT_WINDOW_DOUBLEBUFFER - parameter ( GLUT_WINDOW_DOUBLEBUFFER = 115 ) - integer*4 GLUT_WINDOW_RGBA - parameter ( GLUT_WINDOW_RGBA = 116 ) - integer*4 GLUT_WINDOW_PARENT - parameter ( GLUT_WINDOW_PARENT = 117 ) - integer*4 GLUT_WINDOW_NUM_CHILDREN - parameter ( GLUT_WINDOW_NUM_CHILDREN = 118 ) - integer*4 GLUT_WINDOW_COLORMAP_SIZE - parameter ( GLUT_WINDOW_COLORMAP_SIZE = 119 ) - integer*4 GLUT_WINDOW_NUM_SAMPLES - parameter ( GLUT_WINDOW_NUM_SAMPLES = 120 ) - integer*4 GLUT_WINDOW_STEREO - parameter ( GLUT_WINDOW_STEREO = 121 ) - integer*4 GLUT_WINDOW_CURSOR - parameter ( GLUT_WINDOW_CURSOR = 122 ) - integer*4 GLUT_SCREEN_WIDTH - parameter ( GLUT_SCREEN_WIDTH = 200 ) - integer*4 GLUT_SCREEN_HEIGHT - parameter ( GLUT_SCREEN_HEIGHT = 201 ) - integer*4 GLUT_SCREEN_WIDTH_MM - parameter ( GLUT_SCREEN_WIDTH_MM = 202 ) - integer*4 GLUT_SCREEN_HEIGHT_MM - parameter ( GLUT_SCREEN_HEIGHT_MM = 203 ) - integer*4 GLUT_MENU_NUM_ITEMS - parameter ( GLUT_MENU_NUM_ITEMS = 300 ) - integer*4 GLUT_DISPLAY_MODE_POSSIBLE - parameter ( GLUT_DISPLAY_MODE_POSSIBLE = 400 ) - integer*4 GLUT_INIT_WINDOW_X - parameter ( GLUT_INIT_WINDOW_X = 500 ) - integer*4 GLUT_INIT_WINDOW_Y - parameter ( GLUT_INIT_WINDOW_Y = 501 ) - integer*4 GLUT_INIT_WINDOW_WIDTH - parameter ( GLUT_INIT_WINDOW_WIDTH = 502 ) - integer*4 GLUT_INIT_WINDOW_HEIGHT - parameter ( GLUT_INIT_WINDOW_HEIGHT = 503 ) - integer*4 GLUT_INIT_DISPLAY_MODE - parameter ( GLUT_INIT_DISPLAY_MODE = 504 ) - integer*4 GLUT_ELAPSED_TIME - parameter ( GLUT_ELAPSED_TIME = 700 ) - -C glutDeviceGet parameters - integer*4 GLUT_HAS_KEYBOARD - parameter ( GLUT_HAS_KEYBOARD = 600 ) - integer*4 GLUT_HAS_MOUSE - parameter ( GLUT_HAS_MOUSE = 601 ) - integer*4 GLUT_HAS_SPACEBALL - parameter ( GLUT_HAS_SPACEBALL = 602 ) - integer*4 GLUT_HAS_DIAL_AND_BUTTON_BOX - parameter ( GLUT_HAS_DIAL_AND_BUTTON_BOX = 603 ) - integer*4 GLUT_HAS_TABLET - parameter ( GLUT_HAS_TABLET = 604 ) - integer*4 GLUT_NUM_MOUSE_BUTTONS - parameter ( GLUT_NUM_MOUSE_BUTTONS = 605 ) - integer*4 GLUT_NUM_SPACEBALL_BUTTONS - parameter ( GLUT_NUM_SPACEBALL_BUTTONS = 606 ) - integer*4 GLUT_NUM_BUTTON_BOX_BUTTONS - parameter ( GLUT_NUM_BUTTON_BOX_BUTTONS = 607 ) - integer*4 GLUT_NUM_DIALS - parameter ( GLUT_NUM_DIALS = 608 ) - integer*4 GLUT_NUM_TABLET_BUTTONS - parameter ( GLUT_NUM_TABLET_BUTTONS = 609 ) - -C glutLayerGet parameters - integer*4 GLUT_OVERLAY_POSSIBLE - parameter ( GLUT_OVERLAY_POSSIBLE = 800 ) - integer*4 GLUT_LAYER_IN_USE - parameter ( GLUT_LAYER_IN_USE = 801 ) - integer*4 GLUT_HAS_OVERLAY - parameter ( GLUT_HAS_OVERLAY = 802 ) - integer*4 GLUT_TRANSPARENT_INDEX - parameter ( GLUT_TRANSPARENT_INDEX = 803 ) - integer*4 GLUT_NORMAL_DAMAGED - parameter ( GLUT_NORMAL_DAMAGED = 804 ) - integer*4 GLUT_OVERLAY_DAMAGED - parameter ( GLUT_OVERLAY_DAMAGED = 805 ) - -C glutUseLayer parameters - integer*4 GLUT_NORMAL - parameter ( GLUT_NORMAL = 0 ) - integer*4 GLUT_OVERLAY - parameter ( GLUT_OVERLAY = 1 ) - -C glutGetModifiers return mask - integer*4 GLUT_ACTIVE_SHIFT - parameter ( GLUT_ACTIVE_SHIFT = 1 ) - integer*4 GLUT_ACTIVE_CTRL - parameter ( GLUT_ACTIVE_CTRL = 2 ) - integer*4 GLUT_ACTIVE_ALT - parameter ( GLUT_ACTIVE_ALT = 4 ) - -C glutSetCursor parameters - integer*4 GLUT_CURSOR_RIGHT_ARROW - parameter ( GLUT_CURSOR_RIGHT_ARROW = 0 ) - integer*4 GLUT_CURSOR_LEFT_ARROW - parameter ( GLUT_CURSOR_LEFT_ARROW = 1 ) - integer*4 GLUT_CURSOR_INFO - parameter ( GLUT_CURSOR_INFO = 2 ) - integer*4 GLUT_CURSOR_DESTROY - parameter ( GLUT_CURSOR_DESTROY = 3 ) - integer*4 GLUT_CURSOR_HELP - parameter ( GLUT_CURSOR_HELP = 4 ) - integer*4 GLUT_CURSOR_CYCLE - parameter ( GLUT_CURSOR_CYCLE = 5 ) - integer*4 GLUT_CURSOR_SPRAY - parameter ( GLUT_CURSOR_SPRAY = 6 ) - integer*4 GLUT_CURSOR_WAIT - parameter ( GLUT_CURSOR_WAIT = 7 ) - integer*4 GLUT_CURSOR_TEXT - parameter ( GLUT_CURSOR_TEXT = 8 ) - integer*4 GLUT_CURSOR_CROSSHAIR - parameter ( GLUT_CURSOR_CROSSHAIR = 9 ) - integer*4 GLUT_CURSOR_UP_DOWN - parameter ( GLUT_CURSOR_UP_DOWN = 10 ) - integer*4 GLUT_CURSOR_LEFT_RIGHT - parameter ( GLUT_CURSOR_LEFT_RIGHT = 11 ) - integer*4 GLUT_CURSOR_TOP_SIDE - parameter ( GLUT_CURSOR_TOP_SIDE = 12 ) - integer*4 GLUT_CURSOR_BOTTOM_SIDE - parameter ( GLUT_CURSOR_BOTTOM_SIDE = 13 ) - integer*4 GLUT_CURSOR_LEFT_SIDE - parameter ( GLUT_CURSOR_LEFT_SIDE = 14 ) - integer*4 GLUT_CURSOR_RIGHT_SIDE - parameter ( GLUT_CURSOR_RIGHT_SIDE = 15 ) - integer*4 GLUT_CURSOR_TOP_LEFT_CORNER - parameter ( GLUT_CURSOR_TOP_LEFT_CORNER = 16 ) - integer*4 GLUT_CURSOR_TOP_RIGHT_CORNER - parameter ( GLUT_CURSOR_TOP_RIGHT_CORNER = 17 ) - integer*4 GLUT_CURSOR_BOTTOM_RIGHT_CORNER - parameter ( GLUT_CURSOR_BOTTOM_RIGHT_CORNER = 18 ) - integer*4 GLUT_CURSOR_BOTTOM_LEFT_CORNER - parameter ( GLUT_CURSOR_BOTTOM_LEFT_CORNER = 19 ) - integer*4 GLUT_CURSOR_INHERIT - parameter ( GLUT_CURSOR_INHERIT = 100 ) - integer*4 GLUT_CURSOR_NONE - parameter ( GLUT_CURSOR_NONE = 101 ) - integer*4 GLUT_CURSOR_FULL_CROSSHAIR - parameter ( GLUT_CURSOR_FULL_CROSSHAIR = 102 ) - -C GLUT functions - integer*4 glutcreatewindow - integer*4 glutcreatesubwindow - integer*4 glutgetwindow - integer*4 glutcreatemenu - integer*4 glutgetmenu - real glutgetcolor - integer*4 glutget - integer*4 glutdeviceget - integer*4 glutextensionsupported - -C GLUT NULL name - external glutnull - diff --git a/lib/glut-3.7.6/include/GL/glsmap.h b/lib/glut-3.7.6/include/GL/glsmap.h deleted file mode 100644 index b97fa9acf..000000000 --- a/lib/glut-3.7.6/include/GL/glsmap.h +++ /dev/null @@ -1,137 +0,0 @@ -#ifndef __glsmap_h__ -#define __glsmap_h__ - -/* 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. */ - -#if defined(_WIN32) - -/* Try hard to avoid including to avoid name space pollution, - but Win32's needs APIENTRY and WINGDIAPI defined properly. */ -# if 0 -# define WIN32_LEAN_AND_MEAN -# include -# else - /* XXX This is from Win32's */ -# ifndef APIENTRY -# if (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED) -# define APIENTRY __stdcall -# else -# define APIENTRY -# endif -# endif -# ifndef CALLBACK - /* XXX This is from Win32's */ -# if (defined(_M_MRX000) || defined(_M_IX86) || defined(_M_ALPHA) || defined(_M_PPC)) && !defined(MIDL_PASS) -# define CALLBACK __stdcall -# else -# define CALLBACK -# endif -# endif - /* XXX This is from Win32's and */ -# ifndef WINGDIAPI -# define WINGDIAPI __declspec(dllimport) -# endif - /* XXX This is from Win32's */ -# ifndef _WCHAR_T_DEFINED -typedef unsigned short wchar_t; -# define _WCHAR_T_DEFINED -# endif -# endif - -#pragma warning (disable:4244) /* Disable bogus conversion warnings. */ -#pragma warning (disable:4305) /* VC++ 5.0 version of above warning. */ - -#endif /* _WIN32 */ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - SMAP_CLEAR_SMAP_TEXTURE = 0x1, - SMAP_GENERATE_VIEW_MIPMAPS = 0x2, - SMAP_GENERATE_SMAP_MIPMAPS = 0x4, - SMAP_GENERATE_MIPMAPS = 0x6 /* both of above */ -} SphereMapFlags; - -/* Cube view enumerants. */ -enum { - SMAP_FRONT = 0, - SMAP_TOP = 1, - SMAP_BOTTOM = 2, - SMAP_LEFT = 3, - SMAP_RIGHT = 4, - SMAP_BACK = 5 -}; - -typedef struct _SphereMap SphereMap; - -extern SphereMap *smapCreateSphereMap(SphereMap *shareSmap); -extern void smapDestroySphereMap(SphereMap *smap); - -extern void smapConfigureSphereMapMesh(SphereMap *smap, int steps, int rings, int edgeExtend); - -extern void smapSetSphereMapTexObj(SphereMap *smap, GLuint texobj); -extern void smapSetViewTexObj(SphereMap *smap, GLuint texobj); -extern void smapSetViewTexObjs(SphereMap *smap, GLuint texobjs[6]); -extern void smapGetSphereMapTexObj(SphereMap *smap, GLuint *texobj); -extern void smapGetViewTexObj(SphereMap *smap, GLuint *texobj); -extern void smapGetViewTexObjs(SphereMap *smap, GLuint texobjs[6]); - -extern void smapSetFlags(SphereMap *smap, SphereMapFlags flags); -extern void smapGetFlags(SphereMap *smap, SphereMapFlags *flags); - -extern void smapSetViewOrigin(SphereMap *smap, GLint x, GLint y); -extern void smapSetSphereMapOrigin(SphereMap *smap, GLint x, GLint y); -extern void smapGetViewOrigin(SphereMap *smap, GLint *x, GLint *y); -extern void smapGetSphereMapOrigin(SphereMap *smap, GLint *x, GLint *y); - -extern void smapSetEye(SphereMap *smap, GLfloat eyex, GLfloat eyey, GLfloat eyez); -extern void smapSetEyeVector(SphereMap *smap, GLfloat *eye); -extern void smapSetUp(SphereMap *smap, GLfloat upx, GLfloat upy, GLfloat upz); -extern void smapSetUpVector(SphereMap *smap, GLfloat *up); -extern void smapSetObject(SphereMap *smap, GLfloat objx, GLfloat objy, GLfloat objz); -extern void smapSetObjectVector(SphereMap *smap, GLfloat *obj); -extern void smapGetEye(SphereMap *smap, GLfloat *eyex, GLfloat *eyey, GLfloat *eyez); -extern void smapGetEyeVector(SphereMap *smap, GLfloat *eye); -extern void smapGetUp(SphereMap *smap, GLfloat *upx, GLfloat *upy, GLfloat *upz); -extern void smapGetUpVector(SphereMap *smap, GLfloat *up); -extern void smapGetObject(SphereMap *smap, GLfloat *objx, GLfloat *objy, GLfloat *objz); -extern void smapGetObjectVector(SphereMap *smap, GLfloat *obj); - -extern void smapSetNearFar(SphereMap *smap, GLfloat viewNear, GLfloat viewFar); -extern void smapGetNearFar(SphereMap *smap, GLfloat *viewNear, GLfloat *viewFar); - -extern void smapSetSphereMapTexDim(SphereMap *smap, GLsizei texdim); -extern void smapSetViewTexDim(SphereMap *smap, GLsizei texdim); -extern void smapGetSphereMapTexDim(SphereMap *smap, GLsizei *texdim); -extern void smapGetViewTexDim(SphereMap *smap, GLsizei *texdim); - -extern void smapSetContextData(SphereMap *smap, void *context); -extern void smapGetContextData(SphereMap *smap, void **context); - -extern void smapSetPositionLightsFunc(SphereMap *smap, void (*positionLights)(int view, void *context)); -extern void smapSetDrawViewFunc(SphereMap *smap, void (*drawView)(int view, void *context)); -extern void smapGetPositionLightsFunc(SphereMap *smap, void (**positionLights)(int view, void *context)); -extern void smapGetDrawViewFunc(SphereMap *smap, void (**drawView)(int view, void *context)); - -extern void smapGenViewTex(SphereMap *smap, int view); -extern void smapGenViewTexs(SphereMap *smap); -extern void smapGenSphereMapFromViewTexs(SphereMap *smap); -extern void smapGenSphereMap(SphereMap *smap); -extern void smapGenSphereMapWithOneViewTex(SphereMap *smap); - -extern int smapRvecToSt(float rvec[3], float st[2]); -extern void smapStToRvec(float *st, float *rvec); - -#ifdef __cplusplus -} - -#endif -#endif /* __glsmap_h__ */ diff --git a/lib/glut-3.7.6/include/GL/glut.h b/lib/glut-3.7.6/include/GL/glut.h deleted file mode 100644 index aa7428f36..000000000 --- a/lib/glut-3.7.6/include/GL/glut.h +++ /dev/null @@ -1,716 +0,0 @@ -#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. */ - -#if defined(_WIN32) - -/* GLUT 3.7 now tries to avoid including - to avoid name space pollution, but Win32's - needs APIENTRY and WINGDIAPI defined properly. */ -# if 0 - /* This would put tons of macros and crap in our clean name space. */ -# define WIN32_LEAN_AND_MEAN -# include -# else - /* XXX This is from Win32's */ -# ifndef APIENTRY -# define GLUT_APIENTRY_DEFINED -# if (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED) || defined(__BORLANDC__) || defined(__LCC__) -# define APIENTRY __stdcall -# else -# define APIENTRY -# endif -# endif - /* XXX This is from Win32's */ -# ifndef CALLBACK -# if (defined(_M_MRX000) || defined(_M_IX86) || defined(_M_ALPHA) || defined(_M_PPC)) && !defined(MIDL_PASS) || defined(__LCC__) -# define CALLBACK __stdcall -# else -# define CALLBACK -# endif -# endif - /* XXX Hack for lcc compiler. It doesn't support __declspec(dllimport), just __stdcall. */ -# if defined( __LCC__ ) -# undef WINGDIAPI -# define WINGDIAPI __stdcall -# else - /* XXX This is from Win32's and */ -# ifndef WINGDIAPI -# define GLUT_WINGDIAPI_DEFINED -# define WINGDIAPI __declspec(dllimport) -# endif -# endif - /* XXX This is from Win32's */ -# ifndef _WCHAR_T_DEFINED -typedef unsigned short wchar_t; -# define _WCHAR_T_DEFINED -# endif -# endif - -/* 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 */ -# if !defined(_MSC_VER) && !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 - -/* GLUT API entry point declarations for Win32. */ -# ifdef GLUT_BUILDING_LIB -# define GLUTAPI __declspec(dllexport) -# else -# ifdef _DLL -# define GLUTAPI __declspec(dllimport) -# else -# define GLUTAPI extern -# endif -# endif - -/* GLUT callback calling convention for Win32. */ -# define GLUTCALLBACK __cdecl - -#endif /* _WIN32 */ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined(_WIN32) -# ifndef GLUT_BUILDING_LIB -extern _CRTIMP void __cdecl exit(int); -# endif -#else -/* non-Win32 case. */ -/* Define APIENTRY and CALLBACK to nothing if we aren't on Win32. */ -# define APIENTRY -# define GLUT_APIENTRY_DEFINED -# define CALLBACK -/* Define GLUTAPI and GLUTCALLBACK as below if we aren't on Win32. */ -# define GLUTAPI extern -# define GLUTCALLBACK -/* Prototype exit for the non-Win32 case (see above). */ -extern void exit(int); -#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!). -**/ -#ifndef GLUT_API_VERSION /* allow this to be overriden */ -#define GLUT_API_VERSION 3 -#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 -**/ -#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 - -#if defined(_WIN32) -/* 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 ((GLenum) 100) -#define GLUT_WINDOW_Y ((GLenum) 101) -#define GLUT_WINDOW_WIDTH ((GLenum) 102) -#define GLUT_WINDOW_HEIGHT ((GLenum) 103) -#define GLUT_WINDOW_BUFFER_SIZE ((GLenum) 104) -#define GLUT_WINDOW_STENCIL_SIZE ((GLenum) 105) -#define GLUT_WINDOW_DEPTH_SIZE ((GLenum) 106) -#define GLUT_WINDOW_RED_SIZE ((GLenum) 107) -#define GLUT_WINDOW_GREEN_SIZE ((GLenum) 108) -#define GLUT_WINDOW_BLUE_SIZE ((GLenum) 109) -#define GLUT_WINDOW_ALPHA_SIZE ((GLenum) 110) -#define GLUT_WINDOW_ACCUM_RED_SIZE ((GLenum) 111) -#define GLUT_WINDOW_ACCUM_GREEN_SIZE ((GLenum) 112) -#define GLUT_WINDOW_ACCUM_BLUE_SIZE ((GLenum) 113) -#define GLUT_WINDOW_ACCUM_ALPHA_SIZE ((GLenum) 114) -#define GLUT_WINDOW_DOUBLEBUFFER ((GLenum) 115) -#define GLUT_WINDOW_RGBA ((GLenum) 116) -#define GLUT_WINDOW_PARENT ((GLenum) 117) -#define GLUT_WINDOW_NUM_CHILDREN ((GLenum) 118) -#define GLUT_WINDOW_COLORMAP_SIZE ((GLenum) 119) -#if (GLUT_API_VERSION >= 2) -#define GLUT_WINDOW_NUM_SAMPLES ((GLenum) 120) -#define GLUT_WINDOW_STEREO ((GLenum) 121) -#endif -#if (GLUT_API_VERSION >= 3) -#define GLUT_WINDOW_CURSOR ((GLenum) 122) -#endif -#define GLUT_SCREEN_WIDTH ((GLenum) 200) -#define GLUT_SCREEN_HEIGHT ((GLenum) 201) -#define GLUT_SCREEN_WIDTH_MM ((GLenum) 202) -#define GLUT_SCREEN_HEIGHT_MM ((GLenum) 203) -#define GLUT_MENU_NUM_ITEMS ((GLenum) 300) -#define GLUT_DISPLAY_MODE_POSSIBLE ((GLenum) 400) -#define GLUT_INIT_WINDOW_X ((GLenum) 500) -#define GLUT_INIT_WINDOW_Y ((GLenum) 501) -#define GLUT_INIT_WINDOW_WIDTH ((GLenum) 502) -#define GLUT_INIT_WINDOW_HEIGHT ((GLenum) 503) -#define GLUT_INIT_DISPLAY_MODE ((GLenum) 504) -#if (GLUT_API_VERSION >= 2) -#define GLUT_ELAPSED_TIME ((GLenum) 700) -#endif -#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13) -#define GLUT_WINDOW_FORMAT_ID ((GLenum) 123) -#endif - -#if (GLUT_API_VERSION >= 2) -/* glutDeviceGet parameters. */ -#define GLUT_HAS_KEYBOARD ((GLenum) 600) -#define GLUT_HAS_MOUSE ((GLenum) 601) -#define GLUT_HAS_SPACEBALL ((GLenum) 602) -#define GLUT_HAS_DIAL_AND_BUTTON_BOX ((GLenum) 603) -#define GLUT_HAS_TABLET ((GLenum) 604) -#define GLUT_NUM_MOUSE_BUTTONS ((GLenum) 605) -#define GLUT_NUM_SPACEBALL_BUTTONS ((GLenum) 606) -#define GLUT_NUM_BUTTON_BOX_BUTTONS ((GLenum) 607) -#define GLUT_NUM_DIALS ((GLenum) 608) -#define GLUT_NUM_TABLET_BUTTONS ((GLenum) 609) -#endif -#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13) -#define GLUT_DEVICE_IGNORE_KEY_REPEAT ((GLenum) 610) -#define GLUT_DEVICE_KEY_REPEAT ((GLenum) 611) -#define GLUT_HAS_JOYSTICK ((GLenum) 612) -#define GLUT_OWNS_JOYSTICK ((GLenum) 613) -#define GLUT_JOYSTICK_BUTTONS ((GLenum) 614) -#define GLUT_JOYSTICK_AXES ((GLenum) 615) -#define GLUT_JOYSTICK_POLL_RATE ((GLenum) 616) -#endif - -#if (GLUT_API_VERSION >= 3) -/* glutLayerGet parameters. */ -#define GLUT_OVERLAY_POSSIBLE ((GLenum) 800) -#define GLUT_LAYER_IN_USE ((GLenum) 801) -#define GLUT_HAS_OVERLAY ((GLenum) 802) -#define GLUT_TRANSPARENT_INDEX ((GLenum) 803) -#define GLUT_NORMAL_DAMAGED ((GLenum) 804) -#define GLUT_OVERLAY_DAMAGED ((GLenum) 805) - -#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9) -/* glutVideoResizeGet parameters. */ -#define GLUT_VIDEO_RESIZE_POSSIBLE ((GLenum) 900) -#define GLUT_VIDEO_RESIZE_IN_USE ((GLenum) 901) -#define GLUT_VIDEO_RESIZE_X_DELTA ((GLenum) 902) -#define GLUT_VIDEO_RESIZE_Y_DELTA ((GLenum) 903) -#define GLUT_VIDEO_RESIZE_WIDTH_DELTA ((GLenum) 904) -#define GLUT_VIDEO_RESIZE_HEIGHT_DELTA ((GLenum) 905) -#define GLUT_VIDEO_RESIZE_X ((GLenum) 906) -#define GLUT_VIDEO_RESIZE_Y ((GLenum) 907) -#define GLUT_VIDEO_RESIZE_WIDTH ((GLenum) 908) -#define GLUT_VIDEO_RESIZE_HEIGHT ((GLenum) 909) -#endif - -/* glutUseLayer parameters. */ -#define GLUT_NORMAL ((GLenum) 0) -#define GLUT_OVERLAY ((GLenum) 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 APIENTRY glutInit(int *argcp, char **argv); -#if defined(_WIN32) && !defined(GLUT_DISABLE_ATEXIT_HACK) -GLUTAPI void APIENTRY __glutInitWithExit(int *argcp, char **argv, void (__cdecl *exitfunc)(int)); -#ifndef GLUT_BUILDING_LIB -static void APIENTRY glutInit_ATEXIT_HACK(int *argcp, char **argv) { __glutInitWithExit(argcp, argv, exit); } -#define glutInit glutInit_ATEXIT_HACK -#endif -#endif -GLUTAPI void APIENTRY glutInitDisplayMode(unsigned int mode); -#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9) -GLUTAPI void APIENTRY glutInitDisplayString(const char *string); -#endif -GLUTAPI void APIENTRY glutInitWindowPosition(int x, int y); -GLUTAPI void APIENTRY glutInitWindowSize(int width, int height); -GLUTAPI void APIENTRY glutMainLoop(void); - -/* GLUT window sub-API. */ -GLUTAPI int APIENTRY glutCreateWindow(const char *title); -#if defined(_WIN32) && !defined(GLUT_DISABLE_ATEXIT_HACK) -GLUTAPI int APIENTRY __glutCreateWindowWithExit(const char *title, void (__cdecl *exitfunc)(int)); -#ifndef GLUT_BUILDING_LIB -static int APIENTRY glutCreateWindow_ATEXIT_HACK(const char *title) { return __glutCreateWindowWithExit(title, exit); } -#define glutCreateWindow glutCreateWindow_ATEXIT_HACK -#endif -#endif -GLUTAPI int APIENTRY glutCreateSubWindow(int win, int x, int y, int width, int height); -GLUTAPI void APIENTRY glutDestroyWindow(int win); -GLUTAPI void APIENTRY glutPostRedisplay(void); -#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 11) -GLUTAPI void APIENTRY glutPostWindowRedisplay(int win); -#endif -GLUTAPI void APIENTRY glutSwapBuffers(void); -GLUTAPI int APIENTRY glutGetWindow(void); -GLUTAPI void APIENTRY glutSetWindow(int win); -GLUTAPI void APIENTRY glutSetWindowTitle(const char *title); -GLUTAPI void APIENTRY glutSetIconTitle(const char *title); -GLUTAPI void APIENTRY glutPositionWindow(int x, int y); -GLUTAPI void APIENTRY glutReshapeWindow(int width, int height); -GLUTAPI void APIENTRY glutPopWindow(void); -GLUTAPI void APIENTRY glutPushWindow(void); -GLUTAPI void APIENTRY glutIconifyWindow(void); -GLUTAPI void APIENTRY glutShowWindow(void); -GLUTAPI void APIENTRY glutHideWindow(void); -#if (GLUT_API_VERSION >= 3) -GLUTAPI void APIENTRY glutFullScreen(void); -GLUTAPI void APIENTRY glutSetCursor(int cursor); -#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9) -GLUTAPI void APIENTRY glutWarpPointer(int x, int y); -#endif - -/* GLUT overlay sub-API. */ -GLUTAPI void APIENTRY glutEstablishOverlay(void); -GLUTAPI void APIENTRY glutRemoveOverlay(void); -GLUTAPI void APIENTRY glutUseLayer(GLenum layer); -GLUTAPI void APIENTRY glutPostOverlayRedisplay(void); -#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 11) -GLUTAPI void APIENTRY glutPostWindowOverlayRedisplay(int win); -#endif -GLUTAPI void APIENTRY glutShowOverlay(void); -GLUTAPI void APIENTRY glutHideOverlay(void); -#endif - -/* GLUT menu sub-API. */ -GLUTAPI int APIENTRY glutCreateMenu(void (GLUTCALLBACK *func)(int)); -#if defined(_WIN32) && !defined(GLUT_DISABLE_ATEXIT_HACK) -GLUTAPI int APIENTRY __glutCreateMenuWithExit(void (GLUTCALLBACK *func)(int), void (__cdecl *exitfunc)(int)); -#ifndef GLUT_BUILDING_LIB -static int APIENTRY glutCreateMenu_ATEXIT_HACK(void (GLUTCALLBACK *func)(int)) { return __glutCreateMenuWithExit(func, exit); } -#define glutCreateMenu glutCreateMenu_ATEXIT_HACK -#endif -#endif -GLUTAPI void APIENTRY glutDestroyMenu(int menu); -GLUTAPI int APIENTRY glutGetMenu(void); -GLUTAPI void APIENTRY glutSetMenu(int menu); -GLUTAPI void APIENTRY glutAddMenuEntry(const char *label, int value); -GLUTAPI void APIENTRY glutAddSubMenu(const char *label, int submenu); -GLUTAPI void APIENTRY glutChangeToMenuEntry(int item, const char *label, int value); -GLUTAPI void APIENTRY glutChangeToSubMenu(int item, const char *label, int submenu); -GLUTAPI void APIENTRY glutRemoveMenuItem(int item); -GLUTAPI void APIENTRY glutAttachMenu(int button); -GLUTAPI void APIENTRY glutDetachMenu(int button); - -/* GLUT window callback sub-API. */ -GLUTAPI void APIENTRY glutDisplayFunc(void (GLUTCALLBACK *func)(void)); -GLUTAPI void APIENTRY glutReshapeFunc(void (GLUTCALLBACK *func)(int width, int height)); -GLUTAPI void APIENTRY glutKeyboardFunc(void (GLUTCALLBACK *func)(unsigned char key, int x, int y)); -GLUTAPI void APIENTRY glutMouseFunc(void (GLUTCALLBACK *func)(int button, int state, int x, int y)); -GLUTAPI void APIENTRY glutMotionFunc(void (GLUTCALLBACK *func)(int x, int y)); -GLUTAPI void APIENTRY glutPassiveMotionFunc(void (GLUTCALLBACK *func)(int x, int y)); -GLUTAPI void APIENTRY glutEntryFunc(void (GLUTCALLBACK *func)(int state)); -GLUTAPI void APIENTRY glutVisibilityFunc(void (GLUTCALLBACK *func)(int state)); -GLUTAPI void APIENTRY glutIdleFunc(void (GLUTCALLBACK *func)(void)); -GLUTAPI void APIENTRY glutTimerFunc(unsigned int millis, void (GLUTCALLBACK *func)(int value), int value); -GLUTAPI void APIENTRY glutMenuStateFunc(void (GLUTCALLBACK *func)(int state)); -#if (GLUT_API_VERSION >= 2) -GLUTAPI void APIENTRY glutSpecialFunc(void (GLUTCALLBACK *func)(int key, int x, int y)); -GLUTAPI void APIENTRY glutSpaceballMotionFunc(void (GLUTCALLBACK *func)(int x, int y, int z)); -GLUTAPI void APIENTRY glutSpaceballRotateFunc(void (GLUTCALLBACK *func)(int x, int y, int z)); -GLUTAPI void APIENTRY glutSpaceballButtonFunc(void (GLUTCALLBACK *func)(int button, int state)); -GLUTAPI void APIENTRY glutButtonBoxFunc(void (GLUTCALLBACK *func)(int button, int state)); -GLUTAPI void APIENTRY glutDialsFunc(void (GLUTCALLBACK *func)(int dial, int value)); -GLUTAPI void APIENTRY glutTabletMotionFunc(void (GLUTCALLBACK *func)(int x, int y)); -GLUTAPI void APIENTRY glutTabletButtonFunc(void (GLUTCALLBACK *func)(int button, int state, int x, int y)); -#if (GLUT_API_VERSION >= 3) -GLUTAPI void APIENTRY glutMenuStatusFunc(void (GLUTCALLBACK *func)(int status, int x, int y)); -GLUTAPI void APIENTRY glutOverlayDisplayFunc(void (GLUTCALLBACK *func)(void)); -#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9) -GLUTAPI void APIENTRY glutWindowStatusFunc(void (GLUTCALLBACK *func)(int state)); -#endif -#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13) -GLUTAPI void APIENTRY glutKeyboardUpFunc(void (GLUTCALLBACK *func)(unsigned char key, int x, int y)); -GLUTAPI void APIENTRY glutSpecialUpFunc(void (GLUTCALLBACK *func)(int key, int x, int y)); -GLUTAPI void APIENTRY 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 APIENTRY glutSetColor(int, GLfloat red, GLfloat green, GLfloat blue); -GLUTAPI GLfloat APIENTRY glutGetColor(int ndx, int component); -GLUTAPI void APIENTRY glutCopyColormap(int win); - -/* GLUT state retrieval sub-API. */ -GLUTAPI int APIENTRY glutGet(GLenum type); -GLUTAPI int APIENTRY glutDeviceGet(GLenum type); -#if (GLUT_API_VERSION >= 2) -/* GLUT extension support sub-API */ -GLUTAPI int APIENTRY glutExtensionSupported(const char *name); -#endif -#if (GLUT_API_VERSION >= 3) -GLUTAPI int APIENTRY glutGetModifiers(void); -GLUTAPI int APIENTRY glutLayerGet(GLenum type); -#endif - -/* GLUT font sub-API */ -GLUTAPI void APIENTRY glutBitmapCharacter(void *font, int character); -GLUTAPI int APIENTRY glutBitmapWidth(void *font, int character); -GLUTAPI void APIENTRY glutStrokeCharacter(void *font, int character); -GLUTAPI int APIENTRY glutStrokeWidth(void *font, int character); -#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9) -GLUTAPI int APIENTRY glutBitmapLength(void *font, const unsigned char *string); -GLUTAPI int APIENTRY glutStrokeLength(void *font, const unsigned char *string); -#endif - -/* GLUT pre-built models sub-API */ -GLUTAPI void APIENTRY glutWireSphere(GLdouble radius, GLint slices, GLint stacks); -GLUTAPI void APIENTRY glutSolidSphere(GLdouble radius, GLint slices, GLint stacks); -GLUTAPI void APIENTRY glutWireCone(GLdouble base, GLdouble height, GLint slices, GLint stacks); -GLUTAPI void APIENTRY glutSolidCone(GLdouble base, GLdouble height, GLint slices, GLint stacks); -GLUTAPI void APIENTRY glutWireCube(GLdouble size); -GLUTAPI void APIENTRY glutSolidCube(GLdouble size); -GLUTAPI void APIENTRY glutWireTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings); -GLUTAPI void APIENTRY glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings); -GLUTAPI void APIENTRY glutWireDodecahedron(void); -GLUTAPI void APIENTRY glutSolidDodecahedron(void); -GLUTAPI void APIENTRY glutWireTeapot(GLdouble size); -GLUTAPI void APIENTRY glutSolidTeapot(GLdouble size); -GLUTAPI void APIENTRY glutWireOctahedron(void); -GLUTAPI void APIENTRY glutSolidOctahedron(void); -GLUTAPI void APIENTRY glutWireTetrahedron(void); -GLUTAPI void APIENTRY glutSolidTetrahedron(void); -GLUTAPI void APIENTRY glutWireIcosahedron(void); -GLUTAPI void APIENTRY glutSolidIcosahedron(void); - -#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9) -/* GLUT video resize sub-API. */ -GLUTAPI int APIENTRY glutVideoResizeGet(GLenum param); -GLUTAPI void APIENTRY glutSetupVideoResizing(void); -GLUTAPI void APIENTRY glutStopVideoResizing(void); -GLUTAPI void APIENTRY glutVideoResize(int x, int y, int width, int height); -GLUTAPI void APIENTRY glutVideoPan(int x, int y, int width, int height); - -/* GLUT debugging sub-API. */ -GLUTAPI void APIENTRY 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 APIENTRY glutIgnoreKeyRepeat(int ignore); -GLUTAPI void APIENTRY glutSetKeyRepeat(int repeatMode); -GLUTAPI void APIENTRY glutForceJoystickFunc(void); - -/* GLUT game mode sub-API. */ -/* glutGameModeGet. */ -#define GLUT_GAME_MODE_ACTIVE ((GLenum) 0) -#define GLUT_GAME_MODE_POSSIBLE ((GLenum) 1) -#define GLUT_GAME_MODE_WIDTH ((GLenum) 2) -#define GLUT_GAME_MODE_HEIGHT ((GLenum) 3) -#define GLUT_GAME_MODE_PIXEL_DEPTH ((GLenum) 4) -#define GLUT_GAME_MODE_REFRESH_RATE ((GLenum) 5) -#define GLUT_GAME_MODE_DISPLAY_CHANGED ((GLenum) 6) - -GLUTAPI void APIENTRY glutGameModeString(const char *string); -GLUTAPI int APIENTRY glutEnterGameMode(void); -GLUTAPI void APIENTRY glutLeaveGameMode(void); -GLUTAPI int APIENTRY glutGameModeGet(GLenum mode); -#endif - -#ifdef __cplusplus -} - -#endif - -#ifdef GLUT_APIENTRY_DEFINED -# undef GLUT_APIENTRY_DEFINED -# undef APIENTRY -#endif - -#ifdef GLUT_WINGDIAPI_DEFINED -# undef GLUT_WINGDIAPI_DEFINED -# undef WINGDIAPI -#endif - -#ifdef GLUT_DEFINED___CDECL -# undef GLUT_DEFINED___CDECL -# undef __cdecl -#endif - -#ifdef GLUT_DEFINED__CRTIMP -# undef GLUT_DEFINED__CRTIMP -# undef _CRTIMP -#endif - -#endif /* __glut_h__ */ diff --git a/lib/glut-3.7.6/include/GL/glutf90.h b/lib/glut-3.7.6/include/GL/glutf90.h deleted file mode 100644 index 7dc1d6772..000000000 --- a/lib/glut-3.7.6/include/GL/glutf90.h +++ /dev/null @@ -1,81 +0,0 @@ -#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 - -/* 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 void* APIENTRY __glutGetFCB(int which); -GLUTAPI void APIENTRY __glutSetFCB(int which, void *func); - -#endif /* __glutf90_h__ */ diff --git a/lib/glut-3.7.6/include/GL/tube.h b/lib/glut-3.7.6/include/GL/tube.h deleted file mode 100644 index 5ea54142b..000000000 --- a/lib/glut-3.7.6/include/GL/tube.h +++ /dev/null @@ -1,205 +0,0 @@ -/* - * tube.h - * - * FUNCTION: - * Tubing and Extrusion header file. - * This file provides protypes and defines for the extrusion - * and tubing primitives. - * - * HISTORY: - * Linas Vepstas 1990, 1991 - */ - -#ifndef __TUBE_H__ -#define __TUBE_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - GLE API revision history: - - GLE_API_VERSION is updated to reflect GLE API changes (interface - changes, semantic changes, deletions, or additions). - - GLE_API_VERSION=228 GLUT 3.7 release of GLE. -**/ -#ifndef GLE_API_VERSION /* allow this to be overriden */ -#define GLE_API_VERSION 228 -#endif - -#ifdef _WIN32 -#define OPENGL_10 -#endif - -/* some types */ -#define gleDouble double -typedef gleDouble gleAffine[2][3]; - -/* ====================================================== */ - -/* defines for tubing join styles */ -#define TUBE_JN_RAW 0x1 -#define TUBE_JN_ANGLE 0x2 -#define TUBE_JN_CUT 0x3 -#define TUBE_JN_ROUND 0x4 -#define TUBE_JN_MASK 0xf /* mask bits */ -#define TUBE_JN_CAP 0x10 - -/* determine how normal vectors are to be handled */ -#define TUBE_NORM_FACET 0x100 -#define TUBE_NORM_EDGE 0x200 -#define TUBE_NORM_PATH_EDGE 0x400 /* for spiral, lathe, helix primitives */ -#define TUBE_NORM_MASK 0xf00 /* mask bits */ - -/* closed or open countours */ -#define TUBE_CONTOUR_CLOSED 0x1000 - -#define GLE_TEXTURE_ENABLE 0x10000 -#define GLE_TEXTURE_STYLE_MASK 0xff -#define GLE_TEXTURE_VERTEX_FLAT 1 -#define GLE_TEXTURE_NORMAL_FLAT 2 -#define GLE_TEXTURE_VERTEX_CYL 3 -#define GLE_TEXTURE_NORMAL_CYL 4 -#define GLE_TEXTURE_VERTEX_SPH 5 -#define GLE_TEXTURE_NORMAL_SPH 6 -#define GLE_TEXTURE_VERTEX_MODEL_FLAT 7 -#define GLE_TEXTURE_NORMAL_MODEL_FLAT 8 -#define GLE_TEXTURE_VERTEX_MODEL_CYL 9 -#define GLE_TEXTURE_NORMAL_MODEL_CYL 10 -#define GLE_TEXTURE_VERTEX_MODEL_SPH 11 -#define GLE_TEXTURE_NORMAL_MODEL_SPH 12 - -#ifdef GL_32 -/* HACK for GL 3.2 -- needed because no way to tell if lighting is on. */ -#define TUBE_LIGHTING_ON 0x80000000 - -#define gleExtrusion extrusion -#define gleSetJoinStyle setjoinstyle -#define gleGetJoinStyle getjoinstyle -#define glePolyCone polycone -#define glePolyCylinder polycylinder -#define gleSuperExtrusion super_extrusion -#define gleTwistExtrusion twist_extrusion -#define gleSpiral spiral -#define gleLathe lathe -#define gleHelicoid helicoid -#define gleToroid toroid -#define gleScrew screw - -#endif /* GL_32 */ - -extern int gleGetJoinStyle (void); -extern void gleSetJoinStyle (int style); /* bitwise OR of flags */ -extern int gleGetNumSlices(void); -extern void gleSetNumSlices(int slices); - -/* draw polyclinder, specified as a polyline */ -extern void glePolyCylinder (int npoints, /* num points in polyline */ - gleDouble point_array[][3], /* polyline vertces */ - float color_array[][3], /* colors at polyline verts */ - gleDouble radius); /* radius of polycylinder */ - -/* draw polycone, specified as a polyline with radii */ -extern void glePolyCone (int npoints, /* numpoints in poly-line */ - gleDouble point_array[][3], /* polyline vertices */ - float color_array[][3], /* colors at polyline verts */ - gleDouble radius_array[]); /* cone radii at polyline verts */ - -/* extrude arbitrary 2D contour along arbitrary 3D path */ -extern void gleExtrusion (int ncp, /* number of contour points */ - gleDouble contour[][2], /* 2D contour */ - gleDouble cont_normal[][2], /* 2D contour normals */ - gleDouble up[3], /* up vector for contour */ - int npoints, /* numpoints in poly-line */ - gleDouble point_array[][3], /* polyline vertices */ - float color_array[][3]); /* colors at polyline verts */ - -/* extrude 2D contour, specifying local rotations (twists) */ -extern void gleTwistExtrusion (int ncp, /* number of contour points */ - gleDouble contour[][2], /* 2D contour */ - gleDouble cont_normal[][2], /* 2D contour normals */ - gleDouble up[3], /* up vector for contour */ - int npoints, /* numpoints in poly-line */ - gleDouble point_array[][3], /* polyline vertices */ - float color_array[][3], /* color at polyline verts */ - gleDouble twist_array[]); /* countour twists (in degrees) */ - -/* extrude 2D contour, specifying local affine tranformations */ -extern void gleSuperExtrusion (int ncp, /* number of contour points */ - gleDouble contour[][2], /* 2D contour */ - gleDouble cont_normal[][2], /* 2D contour normals */ - gleDouble up[3], /* up vector for contour */ - int npoints, /* numpoints in poly-line */ - gleDouble point_array[][3], /* polyline vertices */ - float color_array[][3], /* color at polyline verts */ - gleDouble xform_array[][2][3]); /* 2D contour xforms */ - -/* spiral moves contour along helical path by parallel transport */ -extern void gleSpiral (int ncp, /* number of contour points */ - gleDouble contour[][2], /* 2D contour */ - gleDouble cont_normal[][2], /* 2D contour normals */ - gleDouble up[3], /* up vector for contour */ - gleDouble startRadius, /* spiral starts in x-y plane */ - gleDouble drdTheta, /* change in radius per revolution */ - gleDouble startZ, /* starting z value */ - gleDouble dzdTheta, /* change in Z per revolution */ - gleDouble startXform[2][3], /* starting contour affine xform */ - gleDouble dXformdTheta[2][3], /* tangent change xform per revoln */ - gleDouble startTheta, /* start angle in x-y plane */ - gleDouble sweepTheta); /* degrees to spiral around */ - -/* lathe moves contour along helical path by helically shearing 3D space */ -extern void gleLathe (int ncp, /* number of contour points */ - gleDouble contour[][2], /* 2D contour */ - gleDouble cont_normal[][2], /* 2D contour normals */ - gleDouble up[3], /* up vector for contour */ - gleDouble startRadius, /* spiral starts in x-y plane */ - gleDouble drdTheta, /* change in radius per revolution */ - gleDouble startZ, /* starting z value */ - gleDouble dzdTheta, /* change in Z per revolution */ - gleDouble startXform[2][3], /* starting contour affine xform */ - gleDouble dXformdTheta[2][3], /* tangent change xform per revoln */ - gleDouble startTheta, /* start angle in x-y plane */ - gleDouble sweepTheta); /* degrees to spiral around */ - -/* similar to spiral, except contour is a circle */ -extern void gleHelicoid (gleDouble rToroid, /* circle contour (torus) radius */ - gleDouble startRadius, /* spiral starts in x-y plane */ - gleDouble drdTheta, /* change in radius per revolution */ - gleDouble startZ, /* starting z value */ - gleDouble dzdTheta, /* change in Z per revolution */ - gleDouble startXform[2][3], /* starting contour affine xform */ - gleDouble dXformdTheta[2][3], /* tangent change xform per revoln */ - gleDouble startTheta, /* start angle in x-y plane */ - gleDouble sweepTheta); /* degrees to spiral around */ - -/* similar to lathe, except contour is a circle */ -extern void gleToroid (gleDouble rToroid, /* circle contour (torus) radius */ - gleDouble startRadius, /* spiral starts in x-y plane */ - gleDouble drdTheta, /* change in radius per revolution */ - gleDouble startZ, /* starting z value */ - gleDouble dzdTheta, /* change in Z per revolution */ - gleDouble startXform[2][3], /* starting contour affine xform */ - gleDouble dXformdTheta[2][3], /* tangent change xform per revoln */ - gleDouble startTheta, /* start angle in x-y plane */ - gleDouble sweepTheta); /* degrees to spiral around */ - -/* draws a screw shape */ -extern void gleScrew (int ncp, /* number of contour points */ - gleDouble contour[][2], /* 2D contour */ - gleDouble cont_normal[][2], /* 2D contour normals */ - gleDouble up[3], /* up vector for contour */ - gleDouble startz, /* start of segment */ - gleDouble endz, /* end of segment */ - gleDouble twist); /* number of rotations */ - -extern void gleTextureMode (int mode); - -#ifdef __cplusplus -} - -#endif -#endif /* __TUBE_H__ */ -/* ================== END OF FILE ======================= */ diff --git a/lib/glut-3.7.6/include/mui/browser.h b/lib/glut-3.7.6/include/mui/browser.h deleted file mode 100644 index 3c97b5239..000000000 --- a/lib/glut-3.7.6/include/mui/browser.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -#define BROWSEFILE "/tmp/browserdata" - -extern char currentdirectoryname[]; -extern char currentfilename[]; -extern char browseprompt[]; - -extern int xcenter, ycenter; - -extern void parsebrowsefile(FILE *); -void setcurrentfilename(char *); diff --git a/lib/glut-3.7.6/include/mui/displaylist.h b/lib/glut-3.7.6/include/mui/displaylist.h deleted file mode 100644 index 471430bb0..000000000 --- a/lib/glut-3.7.6/include/mui/displaylist.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -#define P_UISHADOW 343 -#define P_UILINESHADOW 344 - -#define UI_FONT_BOLD 1 -#define UI_FONT_NORMAL 2 -#define UI_FONT_FIXED_PITCH 3 - -void uistartdraw(void); -void uirecti(int x, int y, int z, int w); -void uienddraw(void (*uicolor)()); -void uimove2i(int,int); -void uidraw2i(int,int); -void uirectfi(int x, int y, int z, int w); -void uiclear(void); -void uicmov2i(int x, int y); -void uicharstr(char *s, int font); -void uiendline(void); -void uipushviewport(void); -void uipopviewport(void); -void uiviewport(int x, int y, int width, int height); -void uipmv2i(int, int); -void uipdr2i(int, int); -void uipclos(void); -void uiendline(void); diff --git a/lib/glut-3.7.6/include/mui/gizmo.h b/lib/glut-3.7.6/include/mui/gizmo.h deleted file mode 100644 index b99469d8b..000000000 --- a/lib/glut-3.7.6/include/mui/gizmo.h +++ /dev/null @@ -1,241 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - - /* jot text editor source code. */ - /* Tom Davis */ - /* February 7, 1992 */ - -/* defines for gizmos */ - -#include - -#define BUTSTRLEN 60 -#define LABELSTRLEN 150 - -#define FONTWIDTH 9 /* for fixed font */ -#define BASELINE 9 - -/* BUTTON STUFF */ -#define PUSHBUTTON 3 -#define RADIOBUTTON 6 -#define INDICATOR 9 -#define BED 10 -#define BUTTON 11 - -#define BUTHEIGHT 28 -#define BUTWIDTH 75 -#define RADIOWIDTH 24 -#define RADIOHEIGHT 24 -#define TINYRADIOHEIGHT 16 -#define TINYRADIOWIDTH 16 - -typedef struct butn { - char str[BUTSTRLEN+1]; - int type; - void (*butcolor)(); - struct butn *link; /* for linking radio buttons, e.g. */ - muiObject *object; -} Button; - - -/* TEXT BOX STUFF */ -#define TBSTRLEN 200 -#define TEXTHEIGHT 17 -#define TEXTBOXHEIGHT 28 - -typedef struct { - char str[TBSTRLEN+1]; - char label[LABELSTRLEN+1]; - int tp1, tp2; - int charWidth; - int type; -} TextBox; - -TextBox *newtb(int xmin, int xmax); - -/* LABEL STUFF */ - -#define LBLSTRLEN 200 /* max length of a label string */ - -typedef struct { - char str[LBLSTRLEN+1]; -} Label; - -Label *newlabel(char *s); - -/* SLIDER STUFF */ - -#define SLIDERWIDTH 20 -#define MINSHALF 13 -#define ARROWHEIGHT 20 - -#define SCROLLDOWN -1 -#define SCROLLUP 1 -#define THUMB 2 - -typedef struct { - int scenter; /* the center of the thumb */ - int shalf; /* half of the thumb length */ - int oldpos; /* old scenter */ - int arrowdelta; /* arrow delta */ - int thumb; /* whether the thumb should show */ -} Slider; - -typedef Slider VSlider; -typedef Slider HSlider; - -/* TEXTLIST STUFF */ - -typedef struct { - int listheight; /* in lines of text */ - char **strs; /* text */ - int top; /* index into strs */ - int count; /* total number of strings */ - int selecteditem; /* index into selecteditem or -1 */ - int locateditem; /* index into locateditem or -1 */ -} TextList; - -/* PULLDOWN STUFF */ - -#define PULLDOWN_HEIGHT 25 - -typedef struct { - char title[40]; - int menu; - int xoffset; -} menuentry; - -typedef struct { - int count; - int ishelp; - menuentry menus[30]; - menuentry helpmenu; -} Pulldown; - - -/* Define for the settbtype() and gettypein() flag */ -#define TYPEIN_STRING 0 -#define TYPEIN_INT 1 -#define TYPEIN_FILE 2 -#define TYPEIN_FLOAT 3 - -/* Color Stuff */ - -extern Button *newbed(void); -extern Button *newbut(void); -extern Button *newradiobut(void); -extern Pulldown *newpd(void); -extern void drawbut(muiObject *); -extern void drawvs(muiObject *obj); -extern void drawhs(muiObject *obj); -extern void drawtl(muiObject *obj); -extern void drawradiobutton(muiObject *obj); -extern void drawtinyradio(muiObject *obj); -extern void drawpulldown(muiObject *obj); -extern int getcurrentcolor(void); -extern void setcurrentcolor(int c); -extern void drawedges(int, int, int, int, void (*)(void), void (*)(void)); -extern void loadbut(Button *, char *); -extern void drawbut(muiObject *); -extern int pressbut(muiObject *); -extern void drawlabel(muiObject *); -extern void drawboldlabel(muiObject *); -extern void loadtb(TextBox *, char *); -extern int handletb(muiObject *, int, int); -extern void drawtb(muiObject *); -extern int inbut(Button *, int, int); -extern int intb(muiObject *, int, int); -extern void activatetb(TextBox *); -extern void deactivatetb(TextBox *); -extern char *gettbstr(TextBox *); - -extern VSlider *newvs(muiObject *obj, int ymin, int ymax, int scenter, int shalf); -extern VSlider *newhs(muiObject *obj, int xmin, int xmax, int scenter, int shalf); -extern void drawsetup(void); -extern void drawrestore(void); -extern void backgrounddraw(int xmin, int ymin, int xmax, int ymax); -extern TextList *newtl(muiObject *obj, int listheight); - -extern enum muiReturnValue buttonhandler(muiObject *obj, int event, int value, int x, int y); -extern enum muiReturnValue nullhandler(muiObject *obj, int event, int value, int x, int y); -extern enum muiReturnValue textboxhandler(muiObject *obj, int event, int value, int x, int y); -extern enum muiReturnValue vshandler(muiObject *obj, int event, int value, int x, int y); -extern enum muiReturnValue hshandler(muiObject *obj, int event, int value, int x, int y); -extern enum muiReturnValue tlhandler(muiObject *obj, int event, int value, int x, int y); -extern enum muiReturnValue pdhandler(muiObject *obj, int event, int value, int x, int y); - - -/* mui events */ - -#define MUI_DEVICE_DOWN 1 -#define MUI_DEVICE_UP 2 -#define MUI_DEVICE_PRESS 3 -#define MUI_DEVICE_RELEASE 4 -#define MUI_DEVICE_CLICK 5 -#define MUI_DEVICE_DOUBLE_CLICK 6 -#define MUI_KEYSTROKE 7 - -#define MUI_BUTTONFONT 0 -#define MUI_BUTTONFONT_BOLD 0 - -typedef struct muicons { - struct muicons *next; - muiObject *object; -} muiCons; - -void muiBackgroundClear(void); - -void muiFreeObject(muiObject *obj); -int muiInObject(muiObject *obj, int x, int y); - -int muiGetLocate(muiObject *obj); -void muiSetLocate(muiObject *obj, int state); -int muiGetSelect(muiObject *obj); -void muiSetSelect(muiObject *obj, int state); -muiCons *muiGetListCons(int uilist); -muiObject *muiGetActiveTB(void); -void muiSetUIList(muiObject *obj, int list); -int muiGetUIList(muiObject *obj); - -void muiDrawObject(muiObject *obj); - -void muiError(char *s); - -muiObject *muiHitInList(int uilist, int x, int y); -void muiDrawUIList(int uilist); -void muiHandleEvent(int event, int value, int x, int y); - diff --git a/lib/glut-3.7.6/include/mui/hslider.h b/lib/glut-3.7.6/include/mui/hslider.h deleted file mode 100644 index 9d8104731..000000000 --- a/lib/glut-3.7.6/include/mui/hslider.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (c) 1990, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -void drawparths(VSlider *, int); -void adjusthsthumb(muiObject *, double, double); diff --git a/lib/glut-3.7.6/include/mui/mui.h b/lib/glut-3.7.6/include/mui/mui.h deleted file mode 100644 index 50a3d4ae3..000000000 --- a/lib/glut-3.7.6/include/mui/mui.h +++ /dev/null @@ -1,156 +0,0 @@ -#ifndef __mui_h__ -#define __mui_h__ - -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -#ifdef __cplusplus -extern "C" { -#endif - -enum muiObjType { MUI_BUTTON, MUI_LABEL, MUI_BOLDLABEL, MUI_TEXTBOX, - MUI_VSLIDER, MUI_TEXTLIST, MUI_RADIOBUTTON, - MUI_TINYRADIOBUTTON, MUI_PULLDOWN, MUI_HSLIDER }; - -/* MUI Return Values: */ - -enum muiReturnValue { MUI_NO_ACTION, - MUI_SLIDER_MOVE, - MUI_SLIDER_RETURN, - MUI_SLIDER_SCROLLDOWN, - MUI_SLIDER_SCROLLUP, - MUI_SLIDER_THUMB, - MUI_BUTTON_PRESS, - MUI_TEXTBOX_RETURN, - MUI_TEXTLIST_RETURN, - MUI_TEXTLIST_RETURN_CONFIRM -}; - -typedef struct muiobj { - enum muiObjType type; - int xmin, xmax, ymin, ymax; /* bounding box */ - short active; /* 1 = toggled on, or pressed radio button, or can - be typed in (textbox), etc */ - short enable; /* 1 = can be accessed; drawn with solid text */ - short select; /* 1 = pressed (must be located at the time */ - short locate; /* 1 = located; usually the cursor is over it */ - short visible; /* 1 = drawn. not visible => not enabled */ - enum muiReturnValue (*handler)(struct muiobj *obj, int event, int value, int x, int y); - int id; /* available for users */ - int uilist; - void * object; - void (*callback)(struct muiobj *, enum muiReturnValue); -} muiObject; - -/* General MUI Routines */ - -void muiInit(void); -void muiAttachUIList(int uilist); -void muiNewUIList(int listid); -void muiAddToUIList(int uilist, muiObject *obj); -void muiSetCallback(muiObject *obj, void (*callback)(muiObject *, enum muiReturnValue)); -void muiGetObjectSize(muiObject *obj, int *xmin, int *ymin, int *xmax, int *ymax); -void muiSetID(muiObject *obj, int id); -int muiGetID(muiObject *obj); - -/* for a click that doesn't hit anything: */ - -void muiSetNonMUIcallback(void (*nc)(int, int)); - -int muiGetVisible(muiObject *obj); -void muiSetVisible(muiObject *obj, int state); -int muiGetActive(muiObject *obj); -void muiSetActive(muiObject *obj, int state); -int muiGetEnable(muiObject *obj); -void muiSetEnable(muiObject *obj, int state); -void muiSetActiveUIList(int i); -int muiGetActiveUIList(void); - -/* Button Routines */ - -muiObject *muiNewButton(int xmin, int xmax, int ymin, int ymax); -void muiLoadButton(muiObject *but, char *str); -muiObject *muiNewRadioButton(int xmin, int ymin); -muiObject *muiNewTinyRadioButton(int xmin, int ymin); -void muiLinkButtons(muiObject *obj1, muiObject *obj2); -void muiClearRadio(muiObject *rad); - -/* Label Routines */ - -muiObject *muiNewLabel(int xmin, int ymin, char *label); -muiObject *muiNewBoldLabel(int xmin, int ymin, char *label); -void muiChangeLabel(muiObject *obj, char *s); - -/* Text Box Routines */ - -muiObject *muiNewTextbox(int xmin, int xmax, int ymin); -char *muiGetTBString(muiObject *obj); -void muiClearTBString(muiObject *obj); -void muiSetTBString(muiObject *obj, char *s); - -/* Vertical Slider Routines */ - -muiObject *muiNewVSlider(int xmin, int ymin, int ymax, int scenter, int shalf); -float muiGetVSVal(muiObject *obj); -void muiSetVSValue(muiObject *obj, float val); -void muiSetVSArrowDelta(muiObject *obj, int newd); - -/* Horizontal Slider Routines */ - -muiObject *muiNewHSlider(int xmin, int ymin, int xmax, int scenter, int shalf); -float muiGetHSVal(muiObject *obj); -void muiSetHSValue(muiObject *obj, float val); -void muiSetHSArrowDelta(muiObject *obj, int newd); - -/* Text List Routines */ - -muiObject *muiNewTextList(int xmin, int ymin, int xmax, int listheight); -void muiSetTLTop(muiObject *obj, float p); -int muiGetTLSelectedItem(muiObject *obj); -void muiSetTLStrings(muiObject *obj, char **s); -void muiSetTLTopInt(muiObject *obj, int top); - -/* Pulldown Menu Routines */ - -muiObject *muiNewPulldown(void); -void muiAddPulldownEntry(muiObject *obj, char *title, int menu, int ishelp); - -#ifdef __cplusplus -} - -#endif -#endif /* __mui_h__ */ diff --git a/lib/glut-3.7.6/include/mui/textlist.h b/lib/glut-3.7.6/include/mui/textlist.h deleted file mode 100644 index fabc5ce0a..000000000 --- a/lib/glut-3.7.6/include/mui/textlist.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (c) 1990, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -void drawparttl(TextList *, long); diff --git a/lib/glut-3.7.6/include/mui/uicolor.h b/lib/glut-3.7.6/include/mui/uicolor.h deleted file mode 100644 index 2da232842..000000000 --- a/lib/glut-3.7.6/include/mui/uicolor.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -void uiBlack(void); -void uiVyDkGray(void); -void uiDkGray(void); -void uiMmGray(void); -void uiLtGray(void); -void uiVyLtGray(void); -void uiWhite(void); -void uiDkYellow(void); -void uiMmYellow(void); -void uiLtYellow(void); -void uiYellow(void); - -void uiBlue(void); - -void uiTerraCotta(void); -void uiDkTerraCotta(void); -void uiSlateBlue(void); - -void uiPupBlack(void); -void uiPupGray(void); -void uiPupWhite(void); -void uiPupClear(void); - -int getcurrentcolor(void); -void setcurrentcolor(int); -void uiBackground(void); diff --git a/lib/glut-3.7.6/include/mui/vslider.h b/lib/glut-3.7.6/include/mui/vslider.h deleted file mode 100644 index feb8dfedf..000000000 --- a/lib/glut-3.7.6/include/mui/vslider.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (c) 1990, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -void drawpartvs(VSlider *, int); -void adjustvsthumb(muiObject *, double, double); diff --git a/lib/glut-3.7.6/lib/Imakefile b/lib/glut-3.7.6/lib/Imakefile deleted file mode 100644 index be822433a..000000000 --- a/lib/glut-3.7.6/lib/Imakefile +++ /dev/null @@ -1,13 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1995. */ - -#define IHaveSubdirs -#define PassCDebugFlags - -/* NOTE: The fglut directory is GLUT FORTRAN bindings which are */ -/* specific to IRIX 5.x. See ../README.fortran */ - -SUBDIRS = glut mui gle glsmap - -MakeSubdirs($(SUBDIRS)) -DependSubdirs($(SUBDIRS)) diff --git a/lib/glut-3.7.6/lib/_all.dsp b/lib/glut-3.7.6/lib/_all.dsp deleted file mode 100644 index 2e26c30f3..000000000 --- a/lib/glut-3.7.6/lib/_all.dsp +++ /dev/null @@ -1,63 +0,0 @@ -# Microsoft Developer Studio Project File - Name="_all" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Generic Project" 0x010a - -CFG=_all - 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 "_all.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 "_all.mak" CFG="_all - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "_all - Win32 Release" (based on "Win32 (x86) Generic Project") -!MESSAGE "_all - Win32 Debug" (based on "Win32 (x86) Generic Project") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -MTL=midl.exe - -!IF "$(CFG)" == "_all - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" - -!ELSEIF "$(CFG)" == "_all - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" - -!ENDIF - -# Begin Target - -# Name "_all - Win32 Release" -# Name "_all - Win32 Debug" -# End Target -# End Project diff --git a/lib/glut-3.7.6/lib/dll.dsw b/lib/glut-3.7.6/lib/dll.dsw deleted file mode 100644 index 78bc5329e..000000000 --- a/lib/glut-3.7.6/lib/dll.dsw +++ /dev/null @@ -1,41 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "gle"=".\gle\gle.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "gle_dll"=".\gle\gle_dll.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/lib/glut-3.7.6/lib/fglut.n32/ObjectType.mk b/lib/glut-3.7.6/lib/fglut.n32/ObjectType.mk deleted file mode 100644 index 6116ff97e..000000000 --- a/lib/glut-3.7.6/lib/fglut.n32/ObjectType.mk +++ /dev/null @@ -1,2 +0,0 @@ -LDOPTS = $(LDOPTS_N32) -CSTYLE = $(CSTYLE_N32) diff --git a/lib/glut-3.7.6/lib/fglut.n64/ObjectType.mk b/lib/glut-3.7.6/lib/fglut.n64/ObjectType.mk deleted file mode 100644 index da57d5a87..000000000 --- a/lib/glut-3.7.6/lib/fglut.n64/ObjectType.mk +++ /dev/null @@ -1,2 +0,0 @@ -LDOPTS = $(LDOPTS_64) -CSTYLE = $(CSTYLE_64) diff --git a/lib/glut-3.7.6/lib/fglut/ObjectType.mk b/lib/glut-3.7.6/lib/fglut/ObjectType.mk deleted file mode 100644 index f94dc77f5..000000000 --- a/lib/glut-3.7.6/lib/fglut/ObjectType.mk +++ /dev/null @@ -1,2 +0,0 @@ -LDOPTS = $(LDOPTS_32) -CSTYLE = $(CSTYLE_32) diff --git a/lib/glut-3.7.6/lib/fglut/fglut.c b/lib/glut-3.7.6/lib/fglut/fglut.c deleted file mode 100644 index b7a0b30be..000000000 --- a/lib/glut-3.7.6/lib/fglut/fglut.c +++ /dev/null @@ -1,287 +0,0 @@ - -/* 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. */ - -#ifndef WRAPPERS_ONLY - -#include - -extern int __Argc; -extern char **__Argv; - -static GLUTmenuStateFCB fortranMenuStateFunc; - -void -glutnull_(void) -{ -} - -void -glutinit_(void) -{ - glutInit(&__Argc, __Argv); -} - -static void -fortranMenuStateWrapper(int value) -{ - fortranMenuStateFunc(&value); -} - -static void -fortranReshapeWrapper(int w, int h) -{ - (*__glutCurrentWindow->freshape) (&w, &h); -} - -#if 0 /* XXX No IRIX joystick support for now. */ -static void -fortranJoystickWrapper(unsigned int button, int x, int y, int z) -{ - (*__glutCurrentWindow->fjoystick) (&button, &x, &y, &z); -} -#endif - -static void -fortranKeyboardWrapper(unsigned char ch, int x, int y) -{ - int chi = ch; - - (*__glutCurrentWindow->fkeyboard) (&chi, &x, &y); -} - -static void -fortranKeyboardUpWrapper(unsigned char ch, int x, int y) -{ - int chi = ch; - - (*__glutCurrentWindow->fkeyboardUp) (&chi, &x, &y); -} - -static void -fortranMouseWrapper(int btn, int state, int x, int y) -{ - (*__glutCurrentWindow->fmouse) (&btn, &state, &x, &y); -} - -static void -fortranMotionWrapper(int x, int y) -{ - (*__glutCurrentWindow->fmotion) (&x, &y); -} - -static void -fortranPassiveMotionWrapper(int x, int y) -{ - (*__glutCurrentWindow->fpassive) (&x, &y); -} - -static void -fortranEntryWrapper(int state) -{ - (*__glutCurrentWindow->fentry) (&state); -} - -static void -fortranVisibilityWrapper(int state) -{ - (*__glutCurrentWindow->fvisibility) (&state); -} - -static void -fortranTimerWrapper(int value) -{ - /* Relies on special knowledge that __glutTimerList points to - the GLUTtimer* currently being processed! */ - (*__glutTimerList->ffunc) (&value); -} - -static void -fortranSelectWrapper(int value) -{ - (*__glutItemSelected->menu->fselect) (&value); -} - -static void -fortranSpecialWrapper(int key, int x, int y) -{ - (*__glutCurrentWindow->fspecial) (&key, &x, &y); -} - -static void -fortranSpecialUpWrapper(int key, int x, int y) -{ - (*__glutCurrentWindow->fspecialUp) (&key, &x, &y); -} - -static void -fortranSpaceballMotionWrapper(int x, int y, int z) -{ - (*__glutCurrentWindow->fspaceMotion) (&x, &y, &z); -} - -static void -fortranSpaceballRotateWrapper(int x, int y, int z) -{ - (*__glutCurrentWindow->fspaceRotate) (&x, &y, &z); -} - -static void -fortranSpaceballButtonWrapper(int button, int state) -{ - (*__glutCurrentWindow->fspaceButton) (&button, &state); -} - -static void -fortranTabletMotionWrapper(int x, int y) -{ - (*__glutCurrentWindow->ftabletMotion) (&x, &y); -} - -static void -fortranTabletButtonWrapper(int button, int state, int x, int y) -{ - (*__glutCurrentWindow->ftabletButton) (&button, &state, &x, &y); -} - -static void -fortranDialsWrapper(int dial, int value) -{ - (*__glutCurrentWindow->fdials) (&dial, &value); -} - -static void -fortranButtonBoxWrapper(int button, int state) -{ - (*__glutCurrentWindow->fbuttonBox) (&button, &state); -} - -#endif /* WRAPPERS_ONLY */ - -#define glutfunc(Name,name,mixed,type) \ -void \ -glut##name##func(GLUT##type##FCB mixed) \ -{ \ - if(mixed == (GLUT##type## FCB) glutnull_) { \ - glut##Name ## Func(NULL); \ - } else { \ - glut##Name##Func(fortran##Name##Wrapper); \ - __glutCurrentWindow->f##mixed = mixed; \ - } \ -} - -glutfunc(Reshape, reshape, reshape, reshape) -glutfunc(Keyboard, keyboard, keyboard, keyboard) -glutfunc(KeyboardUp, keyboardup, keyboardUp, keyboard) -glutfunc(Mouse, mouse, mouse, mouse) -glutfunc(Motion, motion, motion, motion) -glutfunc(Entry, entry, entry, entry) -glutfunc(Visibility, visibility, visibility, visibility) -glutfunc(Special, special, special, special) -glutfunc(SpecialUp, specialup, specialUp, special) -glutfunc(Dials, dials, dials, dials) -glutfunc(SpaceballMotion, spaceballmotion, spaceMotion, spaceMotion) -glutfunc(SpaceballRotate, spaceballrotate, spaceRotate, spaceRotate) -glutfunc(SpaceballButton, spaceballbutton, spaceButton, spaceButton) -glutfunc(PassiveMotion, passivemotion, passive, passive) -glutfunc(ButtonBox, buttonbox, buttonBox, buttonBox) -glutfunc(TabletMotion, tabletmotion, tabletMotion, tabletMotion) -glutfunc(TabletButton, tabletbutton, tabletButton, tabletButton) - -/* Special callback cases. */ - -/* The display has no parameters passed so no need for wrapper. */ -void -glutdisplayfunc(GLUTdisplayFCB display) -{ - glutDisplayFunc((GLUTdisplayCB) display); -} - -int -glutcreatemenu(GLUTselectFCB select) -{ - int menu; - - menu = glutCreateMenu(fortranSelectWrapper); - __glutCurrentMenu->fselect = select; - return menu; -} - -void -gluttimerfunc(unsigned long interval, GLUTtimerFCB timer, int value) -{ - glutTimerFunc((unsigned int) interval, fortranTimerWrapper, value); - /* Relies on special __glutNewTimer variable side effect to - establish Fortran timer func! */ - __glutNewTimer->ffunc = timer; -} - -/* ARGSUSED */ -void -glutjoystickfunc(GLUTjoystickFCB joystick, int pollInterval) -{ -#if 0 /* XXX No IRIX joystick support for now. */ - if(joystick == (GLUTjoystickFCB) glutnull_) { - glutJoystickFunc(NULL, pollInterval); - } else { - glutJoystickFunc(fortranJoystickWrapper, pollInterval); - __glutCurrentWindow->fjoystick = joystick; - } -#endif -} - -void -glutidlefunc(GLUTidleFCB idleFunc) -{ - if (idleFunc == (GLUTidleFCB) glutnull_) { - glutIdleFunc(NULL); - } else { - glutIdleFunc(idleFunc); - } -} - -void -glutmenustatefunc(GLUTmenuStateFCB menuStateFunc) -{ - if (menuStateFunc == (GLUTmenuStateFCB) glutnull_) { - glutMenuStateFunc(NULL); - } else { - glutMenuStateFunc(fortranMenuStateWrapper); - fortranMenuStateFunc = menuStateFunc; - } -} - -void -glutbitmapcharacter(int *font, int ch) -{ - /* - * mkf2c gets confused by double pointers and void* pointers. - * So mkf2c does not complain, we consider the font handle to - * be an int*. But we really get an int** since Fortran - * passes by reference. So to "pedantically decode" the - * pointer, cast it first to int**, then dereference it, - * then cast the result to a void*. - */ - void *trueFont = (void *) *((int **) font); - - glutBitmapCharacter(trueFont, ch); -} - -void -glutstrokecharacter(int *font, int ch) -{ - /* - * mkf2c gets confused by double pointers and void* pointers. - * So mkf2c does not complain, we consider the font handle to - * be an int*. But we really get an int** since Fortran - * passes by reference. So to "pedantically decode" the - * pointer, cast it first to int**, then dereference it, - * then cast the result to a void*. - */ - void *trueFont = (void *) *((int **) font); - - glutStrokeCharacter(trueFont, ch); -} diff --git a/lib/glut-3.7.6/lib/fglut/fglut_8x13.c b/lib/glut-3.7.6/lib/fglut/fglut_8x13.c deleted file mode 100644 index 9d6a91be0..000000000 --- a/lib/glut-3.7.6/lib/fglut/fglut_8x13.c +++ /dev/null @@ -1,11 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1994, 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 - -void *glut_bitmap_8_by_13_ = &glutBitmap8By13; - diff --git a/lib/glut-3.7.6/lib/fglut/fglut_9x15.c b/lib/glut-3.7.6/lib/fglut/fglut_9x15.c deleted file mode 100644 index 104372a96..000000000 --- a/lib/glut-3.7.6/lib/fglut/fglut_9x15.c +++ /dev/null @@ -1,11 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1994, 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 - -void *glut_bitmap_9_by_15_ = &glutBitmap9By15; - diff --git a/lib/glut-3.7.6/lib/fglut/fglut_hel10.c b/lib/glut-3.7.6/lib/fglut/fglut_hel10.c deleted file mode 100644 index 21f2c64f6..000000000 --- a/lib/glut-3.7.6/lib/fglut/fglut_hel10.c +++ /dev/null @@ -1,11 +0,0 @@ - -/* 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 - -void *glut_bitmap_helvetica_10_ = &glutBitmapHelvetica10; - diff --git a/lib/glut-3.7.6/lib/fglut/fglut_hel12.c b/lib/glut-3.7.6/lib/fglut/fglut_hel12.c deleted file mode 100644 index aec2600ce..000000000 --- a/lib/glut-3.7.6/lib/fglut/fglut_hel12.c +++ /dev/null @@ -1,11 +0,0 @@ - -/* 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 - -void *glut_bitmap_helvetica_12_ = &glutBitmapHelvetica12; - diff --git a/lib/glut-3.7.6/lib/fglut/fglut_hel18.c b/lib/glut-3.7.6/lib/fglut/fglut_hel18.c deleted file mode 100644 index 414783442..000000000 --- a/lib/glut-3.7.6/lib/fglut/fglut_hel18.c +++ /dev/null @@ -1,11 +0,0 @@ - -/* 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 - -void *glut_bitmap_helvetica_18 = &glutBitmapHelvetica18; - diff --git a/lib/glut-3.7.6/lib/fglut/fglut_mroman.c b/lib/glut-3.7.6/lib/fglut/fglut_mroman.c deleted file mode 100644 index 60dafee77..000000000 --- a/lib/glut-3.7.6/lib/fglut/fglut_mroman.c +++ /dev/null @@ -1,11 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1994, 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 - -void *glut_stroke_mono_roman_ = &glutStrokeMonoRoman; - diff --git a/lib/glut-3.7.6/lib/fglut/fglut_roman.c b/lib/glut-3.7.6/lib/fglut/fglut_roman.c deleted file mode 100644 index 5ea07855c..000000000 --- a/lib/glut-3.7.6/lib/fglut/fglut_roman.c +++ /dev/null @@ -1,11 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1994, 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 - -void *glut_stroke_roman_ = &glutStrokeRoman; - diff --git a/lib/glut-3.7.6/lib/fglut/fglut_tr10.c b/lib/glut-3.7.6/lib/fglut/fglut_tr10.c deleted file mode 100644 index 946b82594..000000000 --- a/lib/glut-3.7.6/lib/fglut/fglut_tr10.c +++ /dev/null @@ -1,11 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1994, 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 - -void *glut_bitmap_times_roman_10_ = &glutBitmapTimesRoman10; - diff --git a/lib/glut-3.7.6/lib/fglut/fglut_tr24.c b/lib/glut-3.7.6/lib/fglut/fglut_tr24.c deleted file mode 100644 index c6d45afc5..000000000 --- a/lib/glut-3.7.6/lib/fglut/fglut_tr24.c +++ /dev/null @@ -1,11 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1994, 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 - -void *glut_bitmap_times_roman_24_ = &glutBitmapTimesRoman24; - diff --git a/lib/glut-3.7.6/lib/gle.n32/ObjectType.mk b/lib/glut-3.7.6/lib/gle.n32/ObjectType.mk deleted file mode 100644 index 6116ff97e..000000000 --- a/lib/glut-3.7.6/lib/gle.n32/ObjectType.mk +++ /dev/null @@ -1,2 +0,0 @@ -LDOPTS = $(LDOPTS_N32) -CSTYLE = $(CSTYLE_N32) diff --git a/lib/glut-3.7.6/lib/gle.n64/ObjectType.mk b/lib/glut-3.7.6/lib/gle.n64/ObjectType.mk deleted file mode 100644 index 55d0f4755..000000000 --- a/lib/glut-3.7.6/lib/gle.n64/ObjectType.mk +++ /dev/null @@ -1,3 +0,0 @@ -LDOPTS = $(LDOPTS_64) -#OPTIMIZER = -O0 -CSTYLE = $(CSTYLE_64) diff --git a/lib/glut-3.7.6/lib/gle/Imakefile b/lib/glut-3.7.6/lib/gle/Imakefile deleted file mode 100644 index e71854647..000000000 --- a/lib/glut-3.7.6/lib/gle/Imakefile +++ /dev/null @@ -1,30 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1994. */ - -#define DoNormalLib YES - -#include - -#include "../../Glut.cf" - -EXTRA_DEFINES = -DOPENGL_10 -DAUTO_TEXTURE -D__GUTIL_DOUBLE - -SRCS = ex_angle.c ex_cut_round.c ex_raw.c extrude.c intersect.c \ - rot_prince.c rotate.c round_cap.c segment.c texgen.c \ - urotate.c view.c - -OBJS = ex_angle.o ex_cut_round.o ex_raw.o extrude.o intersect.o \ - rot_prince.o rotate.o round_cap.o segment.o texgen.o \ - urotate.o view.o - -#ifdef LibraryObjectRule -LibraryObjectRule() -#else -/* XXX Very lame, you must be using pre-R5 config files! This - will probably do essentially what LibraryObjectRule does. */ -NormalLibraryObjectRule() -#endif - -NormalLibraryTarget(gle,$(OBJS)) - -DependTarget() diff --git a/lib/glut-3.7.6/lib/gle/ObjectType.mk b/lib/glut-3.7.6/lib/gle/ObjectType.mk deleted file mode 100644 index f94dc77f5..000000000 --- a/lib/glut-3.7.6/lib/gle/ObjectType.mk +++ /dev/null @@ -1,2 +0,0 @@ -LDOPTS = $(LDOPTS_32) -CSTYLE = $(CSTYLE_32) diff --git a/lib/glut-3.7.6/lib/gle/copy.h b/lib/glut-3.7.6/lib/gle/copy.h deleted file mode 100644 index 1bfff4bad..000000000 --- a/lib/glut-3.7.6/lib/gle/copy.h +++ /dev/null @@ -1,18 +0,0 @@ - -/* - * - * Written By Linas Vepstas November 1991 - */ - - -#define COPY_THREE_WORDS(A,B) { \ - struct three_words { long a, b, c, }; \ - *(struct three_words *) (A) = *(struct three_words *) (B); \ -} - -#define COPY_FOUR_WORDS(A,B) { \ - struct four_words { long a, b, c, d, }; \ - *(struct four_words *) (A) = *(struct four_words *) (B); \ -} - -/* ============================================================= */ diff --git a/lib/glut-3.7.6/lib/gle/ex_angle.c b/lib/glut-3.7.6/lib/gle/ex_angle.c deleted file mode 100644 index 0798c230c..000000000 --- a/lib/glut-3.7.6/lib/gle/ex_angle.c +++ /dev/null @@ -1,519 +0,0 @@ - -/* - * MODULE NAME: ex_angle.c - * - * FUNCTION: - * This module contains code that draws extrusions with angled - * joins ("angle join style"). It also inserts colors and normals - * where necessary, if appropriate. - * - * HISTORY: - * written by Linas Vepstas August/September 1991 - * split into multiple compile units, Linas, October 1991 - * added normal vectors Linas, October 1991 - * "code complete" (that is, I'm done), Linas Vepstas, October 1991 - * work around OpenGL's lack of support for concave polys, June 1994 - */ - -#include -#include -#include /* for the memcpy() subroutine */ -#include -#include "port.h" -#include "gutil.h" -#include "vvector.h" -#include "tube_gc.h" -#include "extrude.h" -#include "intersect.h" -#include "segment.h" - -/* ============================================================ */ -/* - * Algorithmic trivia: - * - * There is a slight bit of trivia which the super-duper exacto coder - * needs to know about the code in this module. It is this: - * - * This module attempts to correctly treat contour normal vectors - * by applying the inverse transpose of the 2D contour affine - * transformation to the 2D contour normals. This is perfectly correct, - * when applied to the "raw" join style. However, if the affine transform - * has a strong rotational component, AND the join style is angle or - * cut, then the normal vectors would continue to rotate as the - * intersect point is extrapolated. - * - * The extrapolation of the inverse-transpose matrix to the intersection - * point is not done. This would appear to be overkill for most - * situations. The viewer might possibly detect an artifact of the - * failure to do this correction IF all three of the following criteria - * were met: - * 1) The affine xform has a strong rotational component, - * 2) The angle between two succesive segments is sharp (greater than 15 or - * 30 degrees). - * 3) The join style is angle or cut. - * - * However, I beleive that it is highly unlikely that the viewer will - * detect any artifacts. The reason I beleive this is that a strong - * rotational component will twist a segment so strongly that the more - * visible artifact will be that a segment is composed of triangle strips. - * As the user attempts to minimize the tesselation artifacts by shortening - * segments, then the rotational component will decrease in proportion, - * and the lighting artifact will fall away. - * - * To summarize, there is a slight inexactness in this code. The author - * of the code beleives that this inexactness results in miniscule - * errors in every situation. - * - * Linas Vepstas March 1993 - */ - -/* ============================================================ */ - -void draw_angle_style_front_cap (int ncp, /* number of contour points */ - gleDouble bi[3], /* biscetor */ - gleDouble point_array[][3]) /* polyline */ -{ - int j; -#ifdef OPENGL_10 - GLUtriangulatorObj *tobj; -#endif /* OPENGL_10 */ - - if (bi[2] < 0.0) { - VEC_SCALE (bi, -1.0, bi); - } - -#ifdef GL_32 - /* old-style gl handles concave polygons no problem, so the code is - * simple. New-style gl is a lot more tricky. */ - /* draw the end cap */ - BGNPOLYGON (); - - N3F (bi); - for (j=0; j 0.0) { - VEC_SCALE (bi, -1.0, bi); - } - -#ifdef GL_32 - /* old-style gl handles concave polygons no problem, so the code is - * simple. New-style gl is a lot more tricky. */ - /* draw the end cap */ - BGNPOLYGON (); - - N3F (bi); - for (j=ncp-1; j>=0; j--) { - V3F (point_array[j], j, BACK_CAP); - } - ENDPOLYGON (); -#endif /* GL_32 */ - -#ifdef OPENGL_10 - N3F (bi); - - tobj = gluNewTess (); - gluTessCallback (tobj, GLU_BEGIN, glBegin); - gluTessCallback (tobj, GLU_VERTEX, glVertex3dv); - gluTessCallback (tobj, GLU_END, glEnd); - gluBeginPolygon (tobj); - - for (j=ncp-1; j>=0; j--) { - gluTessVertex (tobj, point_array[j], point_array[j]); - } - gluEndPolygon (tobj); - gluDeleteTess (tobj); -#endif /* OPENGL_10 */ -} - -/* ============================================================ */ - -void extrusion_angle_join (int ncp, /* number of contour points */ - gleDouble contour[][2], /* 2D contour */ - gleDouble cont_normal[][2], /* 2D normal vecs */ - gleDouble up[3], /* up vector for contour */ - int npoints, /* numpoints in poly-line */ - gleDouble point_array[][3], /* polyline */ - float color_array[][3], /* color of polyline */ - gleDouble xform_array[][2][3]) /* 2D contour xforms */ -{ - int i, j; - int inext, inextnext; - gleDouble m[4][4]; - gleDouble len; - gleDouble len_seg; - gleDouble diff[3]; - gleDouble bi_0[3], bi_1[3]; /* bisecting plane */ - gleDouble bisector_0[3], bisector_1[3]; /* bisecting plane */ - gleDouble end_point_0[3], end_point_1[3]; - gleDouble origin[3], neg_z[3]; - gleDouble yup[3]; /* alternate up vector */ - gleDouble *front_loop, *back_loop; /* contours in 3D */ - char * mem_anchor; - double *norm_loop; - double *front_norm, *back_norm, *tmp; /* contour normals in 3D */ - int first_time; - - /* By definition, the contour passed in has its up vector pointing in - * the y direction */ - if (up == NULL) { - yup[0] = 0.0; - yup[1] = 1.0; - yup[2] = 0.0; - } else { - VEC_COPY(yup, up); - } - - /* ========== "up" vector sanity check ========== */ - (void) up_sanity_check (yup, npoints, point_array); - - /* the origin is at the origin */ - origin [0] = 0.0; - origin [1] = 0.0; - origin [2] = 0.0; - - /* and neg_z is at neg z */ - neg_z[0] = 0.0; - neg_z[1] = 0.0; - neg_z[2] = 1.0; - - /* ignore all segments of zero length */ - i = 1; - inext = i; - FIND_NON_DEGENERATE_POINT (inext, npoints, len, diff, point_array); - len_seg = len; /* store for later use */ - - /* get the bisecting plane */ - bisecting_plane (bi_0, point_array[0], - point_array[1], - point_array[inext]); - /* reflect the up vector in the bisecting plane */ - VEC_REFLECT (yup, yup, bi_0); - - /* malloc the storage we'll need for relaying changed contours to the - * drawing routines. */ - mem_anchor = malloc (2 * 3 * ncp * sizeof(double) - + 2 * 3 * ncp * sizeof(gleDouble)); - front_loop = (gleDouble *) mem_anchor; - back_loop = front_loop + 3 * ncp; - front_norm = (double *) (back_loop + 3 * ncp); - back_norm = front_norm + 3 * ncp; - norm_loop = front_norm; - - /* may as well get the normals set up now */ - if (cont_normal != NULL) { - if (xform_array == NULL) { - for (j=0; j -#include -#include /* for the memcpy() subroutine */ -#include -#include "port.h" -#include "gutil.h" -#include "vvector.h" -#include "tube_gc.h" -#include "extrude.h" -#include "intersect.h" -#include "segment.h" - - -#ifdef NONCONCAVE_CAPS - -/* ============================================================ */ -/* - * This subroutine draws a flat cap, to close off the cut ends - * of the cut-style join. Because OpenGL doe not natively handle - * concave polygons, this will cause some artifacts to appear on the - * screen. - */ - -void draw_cut_style_cap_callback (int iloop, - double cap[][3], - float face_color[3], - gleDouble cut_vector[3], - gleDouble bisect_vector[3], - double norms[][3], - int frontwards) -{ - int i; - - if (face_color != NULL) C3F (face_color); - - if (frontwards) { - - /* if lighting is on, specify the endcap normal */ - if (cut_vector != NULL) { - /* if normal pointing in wrong direction, flip it. */ - if (cut_vector[2] < 0.0) { - VEC_SCALE (cut_vector, -1.0, cut_vector); - } - N3F_D (cut_vector); - } - BGNPOLYGON(); - for (i=0; i 0.0) - { VEC_SCALE (cut_vector, -1.0, cut_vector); } - N3F_D (cut_vector); - } - /* the sense of the loop is reversed for backfacing culling */ - BGNPOLYGON(); - for (i=iloop-1; i>-1; i--) { - V3F_D (cap[i], i, BACK_CAP); - } - ENDPOLYGON(); - } - -} - -#else /* NONCONCAVE_CAPS */ - -/* ============================================================ */ -/* - * This subroutine draws a flat cap, to close off the cut ends - * of the cut-style join. Properly handles concave endcaps. - */ - -/* ARGSUSED4 */ -static void draw_cut_style_cap_callback (int iloop, - double cap[][3], - float face_color[3], - gleDouble cut_vector[3], - gleDouble bisect_vector[3], - double norms[][3], - int frontwards) -{ - int i; -#ifdef OPENGL_10 - GLUtriangulatorObj *tobj; - tobj = gluNewTess (); - gluTessCallback (tobj, GLU_BEGIN, glBegin); - gluTessCallback (tobj, GLU_VERTEX, glVertex3dv); - gluTessCallback (tobj, GLU_END, glEnd); -#endif /* OPENGL_10 */ - - if (face_color != NULL) C3F (face_color); - - if (frontwards) { - - /* if lighting is on, specify the endcap normal */ - if (cut_vector != NULL) { - /* if normal pointing in wrong direction, flip it. */ - if (cut_vector[2] < 0.0) { - VEC_SCALE (cut_vector, -1.0, cut_vector); - } - N3F_D (cut_vector); - } -#ifdef GL_32 - BGNPOLYGON(); - for (i=0; i 0.0) { - VEC_SCALE (cut_vector, -1.0, cut_vector); - } - N3F_D (cut_vector); - } - /* the sense of the loop is reversed for backfacing culling */ -#ifdef GL_32 - BGNPOLYGON(); - for (i=iloop-1; i>-1; i--) { - V3F_D (cap[i], i, BACK_CAP); - } - ENDPOLYGON(); -#endif /* GL_32 */ -#ifdef OPENGL_10 - gluBeginPolygon (tobj); - for (i=iloop-1; i>-1; i--) { - gluTessVertex (tobj, cap[i], cap[i]); - } - gluEndPolygon (tobj); -#endif /* OPENGL_10 */ - } - -#ifdef OPENGL_10 - gluDeleteTess (tobj); -#endif /* OPENGL_10 */ - -} -#endif /* NONCONCAVE_ENDCAPS */ - -/* ============================================================ */ -/* - * This subroutine matchs the cap callback template, but is a no-op - */ - -/* ARGSUSED */ -void null_cap_callback (int iloop, - double cap[][3], - float face_color[3], - gleDouble cut_vector[3], - gleDouble bisect_vector[3], - double norms[][3], - int frontwards) -{} - -/* ============================================================ */ -/* - * This little routine draws the little idd-biddy fillet triangle with - * the right color, normal, etc. - * - * HACK ALERT -- there are two aspects to this routine/interface that - * are "unfinished". - * 1) the third point of the triangle should get a color thats - * interpolated beween the front and back color. The interpolant - * is not currently being computed. The error introduced by not - * doing this should be tiny and/or non-exitant in almost all - * expected uses of this code. - * - * 2) additional normal vectors should be supplied, and these should - * be interpolated to fit. Currently, this is not being done. As - * above, the expected error of not doing this should be tiny and/or - * non-existant in almost all expected uses of this code. - */ -/* ARGSUSED6 */ -static void draw_fillet_triangle_plain - (gleDouble va[3], - gleDouble vb[3], - gleDouble vc[3], - int face, - float front_color[3], - float back_color[3]) -{ - - if (front_color != NULL) C3F (front_color); - BGNTMESH (-5, 0.0); - if (face) { - V3F (va, -1, FILLET); - V3F (vb, -1, FILLET); - } else { - V3F (vb, -1, FILLET); - V3F (va, -1, FILLET); - } - V3F (vc, -1, FILLET); - ENDTMESH (); - -} - -/* ============================================================ */ -/* - * This little routine draws the little idd-biddy fillet triangle with - * the right color, normal, etc. - * - * HACK ALERT -- there are two aspects to this routine/interface that - * are "unfinished". - * 1) the third point of the triangle should get a color thats - * interpolated beween the front and back color. The interpolant - * is not currently being computed. The error introduced by not - * doing this should be tiny and/or non-exitant in almost all - * expected uses of this code. - * - * 2) additional normal vectors should be supplied, and these should - * be interpolated to fit. Currently, this is not being done. As - * above, the expected error of not doing this should be tiny and/or - * non-existant in almost all expected uses of this code. - */ -/* ARGSUSED5 */ -static void draw_fillet_triangle_n_norms - (gleDouble va[3], - gleDouble vb[3], - gleDouble vc[3], - int face, - float front_color[3], - float back_color[3], - double na[3], - double nb[3]) -{ - - if (front_color != NULL) C3F (front_color); - BGNTMESH (-5, 0.0); - if (__TUBE_DRAW_FACET_NORMALS) { - N3F_D (na); - if (face) { - V3F (va, -1, FILLET); - V3F (vb, -1, FILLET); - } else { - V3F (vb, -1, FILLET); - V3F (va, -1, FILLET); - } - V3F (vc, -1, FILLET); - } else { - if (face) { - N3F_D (na); - V3F (va, -1, FILLET); - N3F_D (nb); - V3F (vb, -1, FILLET); - } else { - N3F_D (nb); - V3F (vb, -1, FILLET); - N3F_D (na); - V3F (va, -1, FILLET); - N3F_D (nb); - } - V3F (vc, -1, FILLET); - } - ENDTMESH (); - -} - -/* ============================================================ */ - -static void draw_fillets_and_join_plain - (int ncp, - gleDouble trimmed_loop[][3], - gleDouble untrimmed_loop[][3], - int is_trimmed[], - gleDouble bis_origin[3], - gleDouble bis_vector[3], - float front_color[3], - float back_color[3], - gleDouble cut_vector[3], - int face, - void ((*cap_callback) (int iloop, - double cap[][3], - float face_color[3], - gleDouble cut_vector[3], - gleDouble bisect_vector[3], - double norms[][3], - int frontwards))) -{ - int istop; - int icnt, icnt_prev, iloop; - double *cap_loop; - gleDouble sect[3]; - gleDouble tmp_vec[3]; - int save_style; - int was_trimmed = FALSE; - - cap_loop = (double *) malloc ((ncp+3)*3*sizeof (double)); - - /* if the first point on the contour isn't trimmed, go ahead and - * drop an edge down to the bisecting plane, (thus starting the - * join). (Only need to do this for cut join, its bad if done for - * round join). - * - * But if the first point is trimmed, keep going until one - * is found that is not trimmed, and start join there. */ - - icnt = 0; - iloop = 0; - if (!is_trimmed[0]) { - if (__TUBE_CUT_JOIN) { - VEC_SUM (tmp_vec, trimmed_loop[0], bis_vector); - INNERSECT (sect, - bis_origin, - bis_vector, - trimmed_loop[0], - tmp_vec); - VEC_COPY ( (&cap_loop[3*iloop]), sect); - iloop ++; - } - VEC_COPY ( (&cap_loop[3*iloop]), (trimmed_loop[0])); - iloop++; - icnt_prev = icnt; - icnt ++; - } else { - - /* else, loop until an untrimmed point is found */ - was_trimmed = TRUE; - while (is_trimmed[icnt]) { - icnt_prev = icnt; - icnt ++; - if (icnt >= ncp) { - free (cap_loop); - return; /* oops - everything was trimmed */ - } - } - } - - /* Start walking around the end cap. Every time the end loop is - * trimmed, we know we'll need to draw a fillet triangle. In - * addition, after every pair of visibility changes, we draw a cap. */ - if (__TUBE_CLOSE_CONTOUR) { - istop = ncp; - } else { - istop = ncp-1; - } - - /* save the join style, and disable a closed contour. - * Need to do this so partial contours don't close up. */ - save_style = gleGetJoinStyle (); - gleSetJoinStyle (save_style & ~TUBE_CONTOUR_CLOSED); - - for (; icnt_prev < istop; icnt_prev ++, icnt ++, icnt %= ncp) { - - /* There are four interesting cases for drawing caps and fillets: - * 1) this & previous point were trimmed. Don't do anything, - * advance counter. - * 2) this point trimmed, previous not -- draw fillet, and - * draw cap. - * 3) this point not trimmed, previous one was -- compute - * intersection point, draw fillet with it, and save - * point for cap contour. - * 4) this & previous point not trimmed -- save for endcap. - */ - - /* Case 1 -- noop, just advance pointers */ - if (is_trimmed[icnt_prev] && is_trimmed[icnt]) { - } - - /* Case 2 -- Hah! first point! compute intersect & draw fillet! */ - if (is_trimmed[icnt_prev] && !is_trimmed[icnt]) { - - /* important note: the array "untrimmed" contains valid - * untrimmed data ONLY when is_trim is TRUE. Otherwise, - * only "trim" containes valid data */ - - /* compute intersection */ - INNERSECT (sect, - bis_origin, - bis_vector, - untrimmed_loop[icnt_prev], - trimmed_loop[icnt]); - - /* Draw Fillet */ - draw_fillet_triangle_plain (trimmed_loop[icnt_prev], - trimmed_loop[icnt], - sect, - face, - front_color, - back_color); - - VEC_COPY ( (&cap_loop[3*iloop]), sect); - iloop ++; - VEC_COPY ( (&cap_loop[3*iloop]), (trimmed_loop[icnt])); - iloop++; - } - - /* Case 3 -- add to collection of points */ - if (!is_trimmed[icnt_prev] && !is_trimmed[icnt]) { - VEC_COPY ( (&cap_loop[3*iloop]), (trimmed_loop[icnt])); - iloop++; - } - - /* Case 4 -- Hah! last point! draw fillet & draw cap! */ - if (!is_trimmed[icnt_prev] && is_trimmed[icnt]) { - was_trimmed = TRUE; - - /* important note: the array "untrimmed" contains valid - * untrimmed data ONLY when is_trim is TRUE. Otherwise, - * only "trim" containes valid data */ - - /* compute intersection */ - INNERSECT (sect, - bis_origin, - bis_vector, - trimmed_loop[icnt_prev], - untrimmed_loop[icnt]); - - /* Draw Fillet */ - draw_fillet_triangle_plain (trimmed_loop[icnt_prev], - trimmed_loop[icnt], - sect, - face, - front_color, - back_color); - - VEC_COPY ( (&cap_loop[3*iloop]), sect); - iloop ++; - - /* draw cap */ - if (iloop >= 3) (*cap_callback) (iloop, - (gleDouble (*)[3]) cap_loop, - front_color, - cut_vector, - bis_vector, - NULL, - face); - - /* reset cap counter */ - iloop = 0; - } - } - - /* now, finish up in the same way that we started. If the last - * point of the contour is visible, drop an edge to the bisecting - * plane, thus finishing the join, and then, draw the join! */ - - icnt --; /* decrement to make up for loop exit condititons */ - icnt += ncp; - icnt %= ncp; - if ((!is_trimmed[icnt]) && (iloop >= 2)) { - - VEC_SUM (tmp_vec, trimmed_loop[icnt], bis_vector); - INNERSECT (sect, - bis_origin, - bis_vector, - trimmed_loop[icnt], - tmp_vec); - VEC_COPY ( (&cap_loop[3*iloop]), sect); - iloop ++; - - /* if nothing was ever trimmed, then we want to draw the - * cap the way the user asked for it -- closed or not closed. - * Therefore, reset the closure flag to its original state. - */ - if (!was_trimmed) { - gleSetJoinStyle (save_style); - } - - /* draw cap */ - (*cap_callback) (iloop, - (gleDouble (*)[3]) cap_loop, - front_color, - cut_vector, - bis_vector, - NULL, - face); - } - - /* rest to the saved style */ - gleSetJoinStyle (save_style); - free (cap_loop); -} - -/* ============================================================ */ - -void draw_fillets_and_join_n_norms - (int ncp, - gleDouble trimmed_loop[][3], - gleDouble untrimmed_loop[][3], - int is_trimmed[], - gleDouble bis_origin[3], - gleDouble bis_vector[3], - double normals[][3], - float front_color[3], - float back_color[3], - gleDouble cut_vector[3], - int face, - void ((*cap_callback) (int iloop, - double cap[][3], - float face_color[3], - gleDouble cut_vector[3], - gleDouble bisect_vector[3], - double norms[][3], - int frontwards))) -{ - int istop; - int icnt, icnt_prev, iloop; - double *cap_loop, *norm_loop; - gleDouble sect[3]; - gleDouble tmp_vec[3]; - int save_style; - int was_trimmed = FALSE; - - cap_loop = (double *) malloc ((ncp+3)*3*2*sizeof (double)); - norm_loop = cap_loop + (ncp+3)*3; - - /* if the first point on the contour isn't trimmed, go ahead and - * drop an edge down to the bisecting plane, (thus starting the - * join). (Only need to do this for cut join, its bad if done for - * round join). - * - * But if the first point is trimmed, keep going until one - * is found that is not trimmed, and start join there. */ - - icnt = 0; - iloop = 0; - if (!is_trimmed[0]) { - if (__TUBE_CUT_JOIN) { - VEC_SUM (tmp_vec, trimmed_loop[0], bis_vector); - INNERSECT (sect, - bis_origin, - bis_vector, - trimmed_loop[0], - tmp_vec); - VEC_COPY ( (&cap_loop[3*iloop]), sect); - VEC_COPY ( (&norm_loop[3*iloop]), normals[0]); - iloop ++; - } - VEC_COPY ( (&cap_loop[3*iloop]), (trimmed_loop[0])); - VEC_COPY ( (&norm_loop[3*iloop]), normals[0]); - iloop++; - icnt_prev = icnt; - icnt ++; - } else { - - /* else, loop until an untrimmed point is found */ - was_trimmed = TRUE; - while (is_trimmed[icnt]) { - icnt_prev = icnt; - icnt ++; - if (icnt >= ncp) { - free (cap_loop); - return; /* oops - everything was trimmed */ - } - } - } - - /* Start walking around the end cap. Every time the end loop is - * trimmed, we know we'll need to draw a fillet triangle. In - * addition, after every pair of visibility changes, we draw a cap. */ - if (__TUBE_CLOSE_CONTOUR) { - istop = ncp; - } else { - istop = ncp-1; - } - - /* save the join style, and disable a closed contour. - * Need to do this so partial contours don't close up. */ - save_style = gleGetJoinStyle (); - gleSetJoinStyle (save_style & ~TUBE_CONTOUR_CLOSED); - - for (; icnt_prev < istop; icnt_prev ++, icnt ++, icnt %= ncp) { - - /* There are four interesting cases for drawing caps and fillets: - * 1) this & previous point were trimmed. Don't do anything, - * advance counter. - * 2) this point trimmed, previous not -- draw fillet, and - * draw cap. - * 3) this point not trimmed, previous one was -- compute - * intersection point, draw fillet with it, and save - * point for cap contour. - * 4) this & previous point not trimmed -- save for endcap. - */ - - /* Case 1 -- noop, just advance pointers */ - if (is_trimmed[icnt_prev] && is_trimmed[icnt]) { - } - - /* Case 2 -- Hah! first point! compute intersect & draw fillet! */ - if (is_trimmed[icnt_prev] && !is_trimmed[icnt]) { - - /* important note: the array "untrimmed" contains valid - * untrimmed data ONLY when is_trim is TRUE. Otherwise, - * only "trim" containes valid data */ - - /* compute intersection */ - INNERSECT (sect, - bis_origin, - bis_vector, - untrimmed_loop[icnt_prev], - trimmed_loop[icnt]); - - /* Draw Fillet */ - draw_fillet_triangle_n_norms (trimmed_loop[icnt_prev], - trimmed_loop[icnt], - sect, - face, - front_color, - back_color, - normals[icnt_prev], - normals[icnt]); - VEC_COPY ( (&cap_loop[3*iloop]), sect); - VEC_COPY ( (&norm_loop[3*iloop]), normals[icnt_prev]); - iloop ++; - VEC_COPY ( (&cap_loop[3*iloop]), (trimmed_loop[icnt])); - VEC_COPY ( (&norm_loop[3*iloop]), normals[icnt]); - iloop++; - } - - /* Case 3 -- add to collection of points */ - if (!is_trimmed[icnt_prev] && !is_trimmed[icnt]) { - VEC_COPY ( (&cap_loop[3*iloop]), (trimmed_loop[icnt])); - VEC_COPY ( (&norm_loop[3*iloop]), normals[icnt]); - iloop++; - } - - /* Case 4 -- Hah! last point! draw fillet & draw cap! */ - if (!is_trimmed[icnt_prev] && is_trimmed[icnt]) { - was_trimmed = TRUE; - - /* important note: the array "untrimmed" contains valid - * untrimmed data ONLY when is_trim is TRUE. Otherwise, - * only "trim" containes valid data */ - - /* compute intersection */ - INNERSECT (sect, - bis_origin, - bis_vector, - trimmed_loop[icnt_prev], - untrimmed_loop[icnt]); - - /* Draw Fillet */ - draw_fillet_triangle_n_norms (trimmed_loop[icnt_prev], - trimmed_loop[icnt], - sect, - face, - front_color, - back_color, - normals[icnt_prev], - normals[icnt]); - - VEC_COPY ( (&cap_loop[3*iloop]), sect); - - /* OK, maybe phong normals are wrong, but at least facet - * normals will come out OK. */ - if (__TUBE_DRAW_FACET_NORMALS) { - VEC_COPY ( (&norm_loop[3*iloop]), normals[icnt_prev]); - } else { - VEC_COPY ( (&norm_loop[3*iloop]), normals[icnt]); - } - iloop ++; - - /* draw cap */ - if (iloop >= 3) (*cap_callback) (iloop, - (gleDouble (*)[3]) cap_loop, - front_color, - cut_vector, - bis_vector, - (gleDouble (*)[3]) norm_loop, - face); - - /* reset cap counter */ - iloop = 0; - } - } - - /* now, finish up in the same way that we started. If the last - * point of the contour is visible, drop an edge to the bisecting - * plane, thus finishing the join, and then, draw the join! */ - - icnt --; /* decrement to make up for loop exit condititons */ - icnt += ncp; - icnt %= ncp; - if ((!is_trimmed[icnt]) && (iloop >= 2)) { - - if (__TUBE_CUT_JOIN) { - VEC_SUM (tmp_vec, trimmed_loop[icnt], bis_vector); - INNERSECT (sect, - bis_origin, - bis_vector, - trimmed_loop[icnt], - tmp_vec); - VEC_COPY ( (&cap_loop[3*iloop]), sect); - VEC_COPY ( (&norm_loop[3*iloop]), normals[icnt]); - iloop ++; - } - - /* if nothing was ever trimmed, then we want to draw the - * cap the way the user asked for it -- closed or not closed. - * Therefore, reset the closure flag to its original state. - */ - if (!was_trimmed) { - gleSetJoinStyle (save_style); - } - - /* draw cap */ - (*cap_callback) (iloop, - (gleDouble (*)[3]) cap_loop, - front_color, - cut_vector, - bis_vector, - (gleDouble (*)[3]) norm_loop, - face); - } - - /* rest to the saved style */ - gleSetJoinStyle (save_style); - free (cap_loop); -} - -/* ============================================================ */ -/* This routine draws "cut" style extrusions. - */ - -void extrusion_round_or_cut_join (int ncp, /* number of contour points */ - gleDouble contour[][2], /* 2D contour */ - gleDouble cont_normal[][2],/* 2D normal vecs */ - gleDouble up[3], /* up vector for contour */ - int npoints, /* numpoints in poly-line */ - gleDouble point_array[][3], /* polyline */ - float color_array[][3], /* color of polyline */ - gleDouble xform_array[][2][3]) /* 2D contour xforms */ -{ - int i, j; - int inext, inextnext; - gleDouble m[4][4]; - gleDouble tube_len, seg_len; - gleDouble diff[3]; - gleDouble bi_0[3], bi_1[3]; /* bisecting plane */ - gleDouble bisector_0[3], bisector_1[3]; /* bisecting plane */ - gleDouble cut_0[3], cut_1[3]; /* cutting planes */ - gleDouble lcut_0[3], lcut_1[3]; /* cutting planes */ - int valid_cut_0, valid_cut_1; /* flag -- cut vector is valid */ - gleDouble end_point_0[3], end_point_1[3]; - gleDouble torsion_point_0[3], torsion_point_1[3]; - gleDouble isect_point[3]; - gleDouble origin[3], neg_z[3]; - gleDouble yup[3]; /* alternate up vector */ - gleDouble *front_cap, *back_cap; /* arrays containing the end caps */ - gleDouble *front_loop, *back_loop; /* arrays containing the tube ends */ - double *front_norm, *back_norm; /* arrays containing normal vecs */ - double *norm_loop, *tmp; /* normal vectors, cast into 3d from 2d */ - int *front_is_trimmed, *back_is_trimmed; /* T or F */ - float *front_color, *back_color; /* pointers to segment colors */ - void ((*cap_callback) (int,double [][3],float [3],gleDouble [3], gleDouble [3], double [][3],int)); /* function callback to draw cap */ - void ((*tmp_cap_callback) (int,double [][3],float [3],gleDouble [3], gleDouble [3], double [][3],int)); /* function callback to draw cap */ - - int join_style_is_cut; /* TRUE if join style is cut */ - double dot; /* partial dot product */ - char *mem_anchor; - int first_time = TRUE; - gleDouble *cut_vec; - - /* create a local, block scope copy of of the join style. - * this will alleviate wasted cycles and register write-backs */ - /* choose the right callback, depending on the choosen join style */ - if (__TUBE_CUT_JOIN) { - join_style_is_cut = TRUE; - cap_callback = draw_cut_style_cap_callback; - } else { - join_style_is_cut = FALSE; - cap_callback = draw_round_style_cap_callback; - } - - /* By definition, the contour passed in has its up vector pointing in - * the y direction */ - if (up == NULL) { - yup[0] = 0.0; - yup[1] = 1.0; - yup[2] = 0.0; - } else { - VEC_COPY (yup, up); - } - - /* ========== "up" vector sanity check ========== */ - (void) up_sanity_check (yup, npoints, point_array); - - /* the origin is at the origin */ - origin [0] = 0.0; - origin [1] = 0.0; - origin [2] = 0.0; - - /* and neg_z is at neg z */ - neg_z[0] = 0.0; - neg_z[1] = 0.0; - neg_z[2] = 1.0; - - /* malloc the data areas that we'll need to store the end-caps */ - mem_anchor = malloc (4 * 3*ncp*sizeof(gleDouble) - + 2 * 3*ncp*sizeof(double) - + 2 * 1*ncp*sizeof(int)); - front_norm = (double *) mem_anchor; - back_norm = front_norm + 3*ncp; - front_loop = (gleDouble *) (back_norm + 3*ncp); - back_loop = front_loop + 3*ncp; - front_cap = back_loop + 3*ncp; - back_cap = front_cap + 3*ncp; - front_is_trimmed = (int *) (back_cap + 3*ncp); - back_is_trimmed = front_is_trimmed + ncp; - - /* ======================================= */ - - /* |-|-|-|-|-|-|-|-| SET UP FOR FIRST SEGMENT |-|-|-|-|-|-|-| */ - - /* ignore all segments of zero length */ - i = 1; - inext = i; - FIND_NON_DEGENERATE_POINT (inext, npoints, seg_len, diff, point_array); - tube_len = seg_len; /* store for later use */ - - /* may as well get the normals set up now */ - if (cont_normal != NULL) { - if (xform_array == NULL) { - norm_loop = front_norm; - back_norm = norm_loop; - for (j=0; j 0.0)) { -*/ - VEC_COPY ((&front_cap[3*j]), (&front_loop [3*j])); - VEC_COPY ((&front_loop[3*j]), isect_point); - front_is_trimmed[j] = TRUE; - } else { - front_is_trimmed[j] = FALSE; - } - - /* if intersection is behind the end of the segment, - * truncate to the end of the segment - * Note that coding front_loop [3*j+2] = -tube_len; - * doesn't work when twists are involved, */ - if (front_loop[3*j+2] < -tube_len) { - VEC_COPY( (&front_loop[3*j]), end_point_1); - } - - /* --------------------------------------------------- */ - /* The two end-points define a line. We did one endpoint - * above. Now do the other.Intersect this line - * against the clipping plane defined by the NEXT - * tube segment. */ - - /* if this and the last tube are co-linear, don't cut the angle - * if you do, a divide by zero will result. This and last tube - * are co-linear when the cut vector is of zero length */ - if (valid_cut_1 && join_style_is_cut) { - INNERSECT (isect_point, /* isect point (returned) */ - neg_z, /* point on intersecting plane */ - lcut_1, /* normal vector to plane */ - end_point_1, /* point on line */ - end_point_0); /* another point on the line */ - - if (lcut_1[2] > 0.0) { VEC_SCALE (lcut_1, -1.0, lcut_1); } - dot = lcut_1[0] * end_point_1[0]; - dot += lcut_1[1] * end_point_1[1]; - - - VEC_COPY ((&back_loop[3*j]), isect_point); - } else { - /* actual value of dot not interseting; need - * only be positive so that if test below failes */ - dot = 1.0; - VEC_COPY ((&back_loop[3*j]), end_point_1); - } - - INNERSECT (isect_point, /* intersection point (returned) */ - neg_z, /* point on intersecting plane */ - bisector_1, /* normal vector to plane */ - torsion_point_0, /* point on line */ - end_point_1); /* another point on the line */ - - /* cut out interior of intersecting tube */ - /* ... but save the uncut version for drawing the endcaps */ - /* ... note that cap contains valid data ONLY when is - *_trimmed is TRUE. */ -/* - if ((dot <= 0.0) || (back_loop[3*j+2] < -tube_len)) { -*/ - if ((dot <= 0.0) || (isect_point[2] > back_loop[3*j+2])) { - VEC_COPY ((&back_cap[3*j]), (&back_loop [3*j])); - VEC_COPY ((&back_loop[3*j]), isect_point); - back_is_trimmed[j] = TRUE; - } else { - back_is_trimmed[j] = FALSE; - } - - /* if intersection is behind the end of the segment, - * truncate to the end of the segment - * Note that coding back_loop [3*j+2] = 0.0; - * doesn't work when twists are involved, */ - if (back_loop[3*j+2] > 0.0) { - VEC_COPY( (&back_loop[3*j]), end_point_0); - } - } - - /* --------- END OF TMESH GENERATION -------------- */ - - /* |||||||||||||||||| START SEGMENT DRAW |||||||||||||||||||| */ - /* There are six different cases we can have for presence and/or - * absecnce of colors and normals, and for interpretation of - * normals. The blechy set of nested if statements below - * branch to each of the six cases */ - if (xform_array == NULL) { - if (color_array == NULL) { - if (cont_normal == NULL) { - draw_segment_plain (ncp, (gleVector *) front_loop, (gleVector *) back_loop, inext, seg_len); - } else - if (__TUBE_DRAW_FACET_NORMALS) { - draw_segment_facet_n (ncp, (gleVector *) front_loop, (gleVector *) back_loop, (gleVector *) norm_loop, - inext, seg_len); - } else { - draw_segment_edge_n (ncp, (gleVector *) front_loop, (gleVector *) back_loop, (gleVector *) norm_loop, - inext, seg_len); - } - } else { - if (cont_normal == NULL) { - draw_segment_color (ncp, (gleVector *) front_loop, (gleVector *) back_loop, - color_array[inext-1], - color_array[inext], inext, seg_len); - } else - if (__TUBE_DRAW_FACET_NORMALS) { - draw_segment_c_and_facet_n (ncp, - (gleVector *) front_loop, (gleVector *) back_loop, (gleVector *) norm_loop, - color_array[inext-1], - color_array[inext], inext, seg_len); - } else { - draw_segment_c_and_edge_n (ncp, - (gleVector *) front_loop, (gleVector *) back_loop, (gleVector *) norm_loop, - color_array[inext-1], - color_array[inext], inext, seg_len); - } - } - } else { - if (color_array == NULL) { - if (cont_normal == NULL) { - draw_segment_plain (ncp, (gleVector *) front_loop, (gleVector *) back_loop, inext, seg_len); - } else - if (__TUBE_DRAW_FACET_NORMALS) { - draw_binorm_segment_facet_n (ncp, (gleVector *) front_loop, (gleVector *) back_loop, - (gleVector *) front_norm, (gleVector *) back_norm, - inext, seg_len); - } else { - draw_binorm_segment_edge_n (ncp, (gleVector *) front_loop, (gleVector *) back_loop, - (gleVector *) front_norm, (gleVector *) back_norm, - inext, seg_len); - } - } else { - if (cont_normal == NULL) { - draw_segment_color (ncp, (gleVector *) front_loop, (gleVector *) back_loop, - color_array[inext-1], - color_array[inext], inext, seg_len); - } else - if (__TUBE_DRAW_FACET_NORMALS) { - draw_binorm_segment_c_and_facet_n (ncp, - (gleVector *) front_loop, (gleVector *) back_loop, - (gleVector *) front_norm, (gleVector *) back_norm, - color_array[inext-1], - color_array[inext], inext, seg_len); - } else { - draw_binorm_segment_c_and_edge_n (ncp, - (gleVector *) front_loop, (gleVector *) back_loop, - (gleVector *) front_norm, (gleVector *) back_norm, - color_array[inext-1], - color_array[inext], inext, seg_len); - } - } - } - /* |||||||||||||||||| END SEGMENT DRAW |||||||||||||||||||| */ - - /* v^v^v^v^v^v^v^v^v BEGIN END CAPS v^v^v^v^v^v^v^v^v^v^v^v */ - - /* if end caps are required, draw them. But don't draw any - * but the very first and last caps */ - if (first_time) { - first_time = FALSE; - tmp_cap_callback = cap_callback; - cap_callback = null_cap_callback; - if (__TUBE_DRAW_CAP) { - if (color_array != NULL) C3F (color_array[inext-1]); - draw_angle_style_front_cap (ncp, bisector_0, (gleDouble (*)[3]) front_loop); - } - } - /* v^v^v^v^v^v^v^v^v END END CAPS v^v^v^v^v^v^v^v^v^v^v^v */ - - /* $$$$$$$$$$$$$$$$ BEGIN -1, FILLET & JOIN DRAW $$$$$$$$$$$$$$$$$ */ - /* - * Now, draw the fillet triangles, and the join-caps. - */ - if (color_array != NULL) { - front_color = color_array[inext-1]; - back_color = color_array[inext]; - } else { - front_color = NULL; - back_color = NULL; - } - - if (cont_normal == NULL) { - /* the flag valid-cut is true if the cut vector has a valid - * value (i.e. if a degenerate case has not occured). - */ - if (valid_cut_0) { - cut_vec = lcut_0; - } else { - cut_vec = NULL; - } - draw_fillets_and_join_plain (ncp, - (gleVector *) front_loop, - (gleVector *) front_cap, - front_is_trimmed, - origin, - bisector_0, - front_color, - back_color, - cut_vec, - TRUE, - cap_callback); - - /* v^v^v^v^v^v^v^v^v BEGIN END CAPS v^v^v^v^v^v^v^v^v^v^v^v */ - if (inext == npoints-2) { - if (__TUBE_DRAW_CAP) { - if (color_array != NULL) C3F (color_array[inext]); - draw_angle_style_back_cap (ncp, bisector_1, (gleDouble (*)[3]) back_loop); - cap_callback = null_cap_callback; - } - } else { - /* restore ability to draw cap */ - cap_callback = tmp_cap_callback; - } - /* v^v^v^v^v^v^v^v^v END END CAPS v^v^v^v^v^v^v^v^v^v^v^v */ - - /* the flag valid-cut is true if the cut vector has a valid - * value (i.e. if a degenerate case has not occured). - */ - if (valid_cut_1) { - cut_vec = lcut_1; - } else { - cut_vec = NULL; - } - draw_fillets_and_join_plain (ncp, - (gleVector *) back_loop, - (gleVector *) back_cap, - back_is_trimmed, - neg_z, - bisector_1, - back_color, - front_color, - cut_vec, - FALSE, - cap_callback); - } else { - - /* the flag valid-cut is true if the cut vector has a valid - * value (i.e. if a degenerate case has not occured). - */ - if (valid_cut_0) { - cut_vec = lcut_0; - } else { - cut_vec = NULL; - } - draw_fillets_and_join_n_norms (ncp, - (gleVector *) front_loop, - (gleVector *) front_cap, - front_is_trimmed, - origin, - bisector_0, - (gleVector *) front_norm, - front_color, - back_color, - cut_vec, - TRUE, - cap_callback); - - /* v^v^v^v^v^v^v^v^v BEGIN END CAPS v^v^v^v^v^v^v^v^v^v^v^v */ - if (inext == npoints-2) { - if (__TUBE_DRAW_CAP) { - if (color_array != NULL) C3F (color_array[inext]); - draw_angle_style_back_cap (ncp, bisector_1, (gleDouble (*)[3]) back_loop); - cap_callback = null_cap_callback; - } - } else { - /* restore ability to draw cap */ - cap_callback = tmp_cap_callback; - } - /* v^v^v^v^v^v^v^v^v END END CAPS v^v^v^v^v^v^v^v^v^v^v^v */ - - /* the flag valid-cut is true if the cut vector has a valid - * value (i.e. if a degenerate case has not occured). - */ - if (valid_cut_1) { - cut_vec = lcut_1; - } else { - cut_vec = NULL; - } - draw_fillets_and_join_n_norms (ncp, - (gleVector *) back_loop, - (gleVector *) back_cap, - back_is_trimmed, - neg_z, - bisector_1, - (gleVector *) back_norm, - back_color, - front_color, - cut_vec, - FALSE, - cap_callback); - } - - /* $$$$$$$$$$$$$$$$ END FILLET & JOIN DRAW $$$$$$$$$$$$$$$$$ */ - - /* pop this matrix, do the next set */ - POPMATRIX (); - - /* slosh stuff over to next vertex */ - tmp = front_norm; - front_norm = back_norm; - back_norm = tmp; - - tube_len = seg_len; - i = inext; - inext = inextnext; - VEC_COPY (bi_0, bi_1); - VEC_COPY (cut_0, cut_1); - valid_cut_0 = valid_cut_1; - - /* reflect the up vector in the bisecting plane */ - VEC_REFLECT (yup, yup, bi_0); - } - /* |-|-|-|-|-|-|-|-| END LOOP OVER SEGMENTS |-|-|-|-|-|-|-| */ - - free (mem_anchor); - -} - -/* =================== END OF FILE =============================== */ diff --git a/lib/glut-3.7.6/lib/gle/ex_raw.c b/lib/glut-3.7.6/lib/gle/ex_raw.c deleted file mode 100644 index c54b7a127..000000000 --- a/lib/glut-3.7.6/lib/gle/ex_raw.c +++ /dev/null @@ -1,948 +0,0 @@ -/* - * MODULE NAME: ex_raw.c - * - * FUNCTION: - * This module contains code that draws extrusions with square - * ("raw join style") end styles. It also inserts colors and normals - * where necessary, if appropriate. - * - * HISTORY: - * written by Linas Vepstas August/September 1991 - * split into multiple compile units, Linas, October 1991 - * added normal vectors Linas, October 1991 - * "code complete" (that is, I'm done), Linas Vepstas, October 1991 - * work around OpenGL's lack of support for concave polys, June 1994 - */ - -#include -#include -#include /* for the memcpy() subroutine */ -#include /* to get stderr defined */ -#include - -#include "port.h" -#include "gutil.h" -#include "vvector.h" -#include "tube_gc.h" -#include "extrude.h" -#include "intersect.h" -#include "segment.h" - -/* ============================================================ */ -/* - * The following routine is, in principle, very simple: - * all that it does is normalize the up vector, and makes - * sure that it is perpendicular to the initial polyline segment. - * - * In fact, this routine gets awfully complicated because: - * a) the first few segements of the polyline might be degenerate, - * b) up vecotr may be parallel to first few segments of polyline, - * c) etc. - * - */ - -void up_sanity_check (gleDouble up[3], /* up vector for contour */ - int npoints, /* numpoints in poly-line */ - gleDouble point_array[][3]) /* polyline */ -{ - int i; - double len; - double diff[3]; - - /* now, right off the bat, we should make sure that the up vector - * is in fact perpendicular to the polyline direction */ - VEC_DIFF (diff, point_array[1], point_array[0]); - VEC_LENGTH (len, diff); - if (len == 0.0) { - /* This error message should go through "official" error interface */ -/* - fprintf (stderr, "Extrusion: Warning: initial segment zero length \n"); -*/ - - /* loop till we find something that ain't of zero length */ - for (i=1; i-1; j--) { - point [0] = contour[j][0]; - point [1] = contour[j][1]; - V3F (point, j, BACK_CAP); - } - } - ENDPOLYGON (); -#endif /* GL_32 */ - -#ifdef OPENGL_10 - /* malloc the @#$%^&* array that OpenGL wants ! */ - pts = (double *) malloc (3*ncp*sizeof(double)); - tobj = gluNewTess (); - gluTessCallback (tobj, GLU_BEGIN, glBegin); - gluTessCallback (tobj, GLU_VERTEX, glVertex3dv); - gluTessCallback (tobj, GLU_END, glEnd); - gluBeginPolygon (tobj); - - /* draw the loop counter clockwise for the front cap */ - if (frontwards) { - for (j=1; j-1; j--) { - pts [3*j] = contour[j][0]; - pts [3*j+1] = contour[j][1]; - pts [3*j+2] = zval; - gluTessVertex (tobj, &pts[3*j], &pts[3*j]); - } - } - - gluEndPolygon (tobj); - free (pts); - gluDeleteTess (tobj); -#endif /* OPENGL_10 */ -} - - -/* ============================================================ */ -/* This routine does what it says: It draws a counter-clockwise cap - * from a 3D contour loop list - */ - -void draw_front_contour_cap (int ncp, /* number of contour points */ - gleDouble contour[][3]) /* 3D contour */ -{ - int j; -#ifdef OPENGL_10 - GLUtriangulatorObj *tobj; -#endif /* OPENGL_10 */ - -#ifdef GL_32 - /* old-style gl handles concave polygons no problem, so the code is - * simple. New-style gl is a lot more tricky. */ - /* draw the end cap */ - BGNPOLYGON (); - - for (j=0; j-1; j--) { - V3F (contour[j], j, BACK_CAP); - } - ENDPOLYGON (); -#endif /* GL_32 */ - -#ifdef OPENGL_10 - tobj = gluNewTess (); - gluTessCallback (tobj, GLU_BEGIN, glBegin); - gluTessCallback (tobj, GLU_VERTEX, glVertex3dv); - gluTessCallback (tobj, GLU_END, glEnd); - gluBeginPolygon (tobj); - - /* draw the end cap */ - /* draw the loop clockwise for the back cap */ - /* the sense of the loop is reversed for backfacing culling */ - for (j=ncp-1; j>-1; j--) { - gluTessVertex (tobj, contour[j], contour[j]); - } - gluEndPolygon (tobj); - gluDeleteTess (tobj); -#endif /* OPENGL_10 */ -} - -/* ============================================================ */ -/* This routine draws a segment of raw-join-style tubing. - * Essentially, we assume that the proper transformations have already - * been performed to properly orient the tube segment -- our only task - * left is to render */ -/* PLAIN - NO COLOR, NO NORMAL */ - -void draw_raw_segment_plain (int ncp, /* number of contour points */ - gleDouble contour[][2], /* 2D contour */ - gleDouble len, - int inext) - -{ - int j; - double point[3]; - - /* draw the tube segment */ - BGNTMESH (inext, len); - for (j=0; j -#include -#include /* for the memcpy() subroutine */ -#include -#include "gutil.h" -#include "vvector.h" -#include "tube_gc.h" -#include "extrude.h" -#include "intersect.h" - -/* ============================================================ */ -/* The routine below determines the type of join style that will be - * used for tubing. */ - -void gleSetJoinStyle (int style) -{ - INIT_GC(); - extrusion_join_style = style; -} - -int gleGetJoinStyle (void) -{ - INIT_GC(); - return (extrusion_join_style); -} - -/* ============================================================ */ -/* - * draw a general purpose extrusion - */ - -void gleSuperExtrusion (int ncp, /* number of contour points */ - gleDouble contour[][2], /* 2D contour */ - gleDouble cont_normal[][2], /* 2D contour normals */ - gleDouble up[3], /* up vector for contour */ - int npoints, /* numpoints in poly-line */ - gleDouble point_array[][3], /* polyline */ - float color_array[][3], /* color of polyline */ - gleDouble xform_array[][2][3]) /* 2D contour xforms */ -{ - INIT_GC(); - _gle_gc -> ncp = ncp; - _gle_gc -> contour = contour; - _gle_gc -> cont_normal = cont_normal; - _gle_gc -> up = up; - _gle_gc -> npoints = npoints; - _gle_gc -> point_array = point_array; - _gle_gc -> color_array = color_array; - _gle_gc -> xform_array = xform_array; - - switch (__TUBE_STYLE) { - case TUBE_JN_RAW: - (void) extrusion_raw_join (ncp, contour, cont_normal, up, - npoints, - point_array, color_array, - xform_array); - break; - - case TUBE_JN_ANGLE: - (void) extrusion_angle_join (ncp, contour, cont_normal, up, - npoints, - point_array, color_array, - xform_array); - break; - - case TUBE_JN_CUT: - case TUBE_JN_ROUND: - /* This routine used for both cut and round styles */ - (void) extrusion_round_or_cut_join (ncp, contour, cont_normal, up, - npoints, - point_array, color_array, - xform_array); - break; - - default: - break; - } -} - -/* ============================================================ */ - -void gleExtrusion (int ncp, /* number of contour points */ - gleDouble contour[][2], /* 2D contour */ - gleDouble cont_normal[][2], /* 2D contour normals */ - gleDouble up[3], /* up vector for contour */ - int npoints, /* numpoints in poly-line */ - gleDouble point_array[][3], /* polyline */ - float color_array[][3]) /* color of polyline */ -{ - gleSuperExtrusion (ncp, contour, cont_normal, up, - npoints, - point_array, color_array, - NULL); -} - -/* ============================================================ */ - -/* should really make this an adaptive algorithm ... */ -static int __gleSlices = 20; - -int -gleGetNumSlices(void) -{ - return __gleSlices; -} - -void -gleSetNumSlices(int slices) -{ - __gleSlices = slices; -} - -void gen_polycone (int npoints, - gleDouble point_array[][3], - float color_array[][3], - gleDouble radius, - gleDouble xform_array[][2][3]) -{ - int saved_style; - glePoint *circle = (glePoint*) malloc(sizeof(glePoint)*2*__gleSlices); - glePoint *norm = &circle[__gleSlices]; - double c, s; - int i; - double v21[3]; - double len; - gleDouble up[3]; - - INIT_GC(); - - /* this if statement forces this routine into double-duty for - * both the polycone and the polycylinder routines */ - if (xform_array != NULL) radius = 1.0; - - s = sin (2.0*M_PI/ ((double) __gleSlices)); - c = cos (2.0*M_PI/ ((double) __gleSlices)); - - norm [0][0] = 1.0; - norm [0][1] = 0.0; - circle [0][0] = radius; - circle [0][1] = 0.0; - - /* draw a norm using recursion relations */ - for (i=1; i<__gleSlices; i++) { - norm [i][0] = norm[i-1][0] * c - norm[i-1][1] * s; - norm [i][1] = norm[i-1][0] * s + norm[i-1][1] * c; - circle [i][0] = radius * norm[i][0]; - circle [i][1] = radius * norm[i][1]; - } - - /* avoid degenerate vectors */ - /* first, find a non-zero length segment */ - i=0; - FIND_NON_DEGENERATE_POINT(i,npoints,len,v21,point_array) - if (i == npoints) return; - - /* next, check to see if this segment lies along x-axis */ - if ((v21[0] == 0.0) && (v21[2] == 0.0)) { - up[0] = up[1] = up[2] = 1.0; - } else { - up[0] = up[2] = 0.0; - up[1] = 1.0; - } - - /* save the current join style */ - saved_style = extrusion_join_style; - extrusion_join_style |= TUBE_CONTOUR_CLOSED; - - /* if lighting is not turned on, don't send normals. - * MMODE is a good indicator of whether lighting is active */ - if (!__IS_LIGHTING_ON) { - gleSuperExtrusion (__gleSlices, circle, NULL, up, - npoints, point_array, color_array, - xform_array); - } else { - gleSuperExtrusion (__gleSlices, circle, norm, up, - npoints, point_array, color_array, - xform_array); - } - - /* restore the join style */ - extrusion_join_style = saved_style; - - free(circle); -} - -/* ============================================================ */ - -void glePolyCylinder (int npoints, - gleDouble point_array[][3], - float color_array[][3], - gleDouble radius) -{ - gen_polycone (npoints, point_array, color_array, radius, NULL); -} - -/* ============================================================ */ - -void glePolyCone (int npoints, - gleDouble point_array[][3], - float color_array[][3], - gleDouble radius_array[]) -{ - gleAffine * xforms; - int j; - - /* build 2D affine matrices from radius array */ - xforms = (gleAffine *) malloc (npoints * sizeof(gleAffine)); - for (j=0; jinf) (1+x/N) ** N - * and take N=32. - */ - - /* initialize translation and delta translation */ - deltaTrans[0] = delta * dXformdTheta[0][2]; - deltaTrans[1] = delta * dXformdTheta[1][2]; - trans[0] = startXform[0][2]; - trans[1] = startXform[1][2]; - - /* prepare the tangent matrix */ - delta /= 32.0; - mA[0][0] = 1.0 + delta * dXformdTheta[0][0]; - mA[0][1] = delta * dXformdTheta[0][1]; - mA[1][0] = delta * dXformdTheta[1][0]; - mA[1][1] = 1.0 + delta * dXformdTheta[1][1]; - - /* compute exponential of matrix */ - MATRIX_PRODUCT_2X2 (mB, mA, mA); /* squared */ - MATRIX_PRODUCT_2X2 (mA, mB, mB); /* 4th power */ - MATRIX_PRODUCT_2X2 (mB, mA, mA); /* 8th power */ - MATRIX_PRODUCT_2X2 (mA, mB, mB); /* 16th power */ - MATRIX_PRODUCT_2X2 (mB, mA, mA); /* 32nd power */ - - /* initialize running matrix */ - COPY_MATRIX_2X2 (run, startXform); - - /* remember, the first point is hidden -- load some, any - * xform for the first point */ - xforms[0][0][0] = startXform[0][0]; - xforms[0][0][1] = startXform[0][1]; - xforms[0][0][2] = startXform[0][2]; - xforms[0][1][0] = startXform[1][0]; - xforms[0][1][1] = startXform[1][1]; - xforms[0][1][2] = startXform[1][2]; - - for (i=1; i -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Static Library" 0x0104 - -CFG=gle - 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 "gle.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 "gle.mak" CFG="gle - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "gle - Win32 Release" (based on "Win32 (x86) Static Library") -!MESSAGE "gle - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "gle - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../../include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo - -!ELSEIF "$(CFG)" == "gle - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo - -!ENDIF - -# Begin Target - -# Name "gle - Win32 Release" -# Name "gle - Win32 Debug" -# Begin Source File - -SOURCE=.\copy.h -# End Source File -# Begin Source File - -SOURCE=.\ex_angle.c -# End Source File -# Begin Source File - -SOURCE=.\ex_cut_round.c -# End Source File -# Begin Source File - -SOURCE=.\ex_raw.c -# End Source File -# Begin Source File - -SOURCE=.\extrude.c -# End Source File -# Begin Source File - -SOURCE=.\extrude.h -# End Source File -# Begin Source File - -SOURCE=.\gutil.h -# End Source File -# Begin Source File - -SOURCE=.\intersect.c -# End Source File -# Begin Source File - -SOURCE=.\intersect.h -# End Source File -# Begin Source File - -SOURCE=.\port.h -# End Source File -# Begin Source File - -SOURCE=.\qmesh.c -# PROP Exclude_From_Build 1 -# End Source File -# Begin Source File - -SOURCE=.\rot.h -# End Source File -# Begin Source File - -SOURCE=.\rot_prince.c -# End Source File -# Begin Source File - -SOURCE=.\rotate.c -# End Source File -# Begin Source File - -SOURCE=.\round_cap.c -# End Source File -# Begin Source File - -SOURCE=.\segment.c -# End Source File -# Begin Source File - -SOURCE=.\segment.h -# End Source File -# Begin Source File - -SOURCE=.\texgen.c -# End Source File -# Begin Source File - -SOURCE=.\tube_gc.h -# End Source File -# Begin Source File - -SOURCE=.\urotate.c -# End Source File -# Begin Source File - -SOURCE=.\view.c -# End Source File -# Begin Source File - -SOURCE=.\vvector.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/lib/gle/gle_dll.dsp b/lib/glut-3.7.6/lib/gle/gle_dll.dsp deleted file mode 100644 index 1df5d6a88..000000000 --- a/lib/glut-3.7.6/lib/gle/gle_dll.dsp +++ /dev/null @@ -1,180 +0,0 @@ -# Microsoft Developer Studio Project File - Name="gle_dll" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 - -CFG=gle_dll - 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 "gle_dll.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 "gle_dll.mak" CFG="gle_dll - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "gle_dll - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "gle_dll - 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)" == "gle_dll - 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 "GLE_DLL_EXPORTS" /YX /FD /c -# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GLE_DLL_EXPORTS" /YX /FD /c -# 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 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /dll /machine:I386 /out:"Release/gle.dll" - -!ELSEIF "$(CFG)" == "gle_dll - 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 "GLE_DLL_EXPORTS" /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GLE_DLL_EXPORTS" /YX /FD /GZ /c -# 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 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /dll /debug /machine:I386 /out:"Debug/gle.dll" /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "gle_dll - Win32 Release" -# Name "gle_dll - Win32 Debug" -# Begin Source File - -SOURCE=.\copy.h -# End Source File -# Begin Source File - -SOURCE=.\ex_angle.c -# End Source File -# Begin Source File - -SOURCE=.\ex_cut_round.c -# End Source File -# Begin Source File - -SOURCE=.\ex_raw.c -# End Source File -# Begin Source File - -SOURCE=.\extrude.c -# End Source File -# Begin Source File - -SOURCE=.\extrude.h -# End Source File -# Begin Source File - -SOURCE=.\gutil.h -# End Source File -# Begin Source File - -SOURCE=.\intersect.c -# End Source File -# Begin Source File - -SOURCE=.\intersect.h -# End Source File -# Begin Source File - -SOURCE=.\port.h -# End Source File -# Begin Source File - -SOURCE=.\qmesh.c -# PROP Exclude_From_Build 1 -# End Source File -# Begin Source File - -SOURCE=.\rot.h -# End Source File -# Begin Source File - -SOURCE=.\rot_prince.c -# End Source File -# Begin Source File - -SOURCE=.\rotate.c -# End Source File -# Begin Source File - -SOURCE=.\round_cap.c -# End Source File -# Begin Source File - -SOURCE=.\segment.c -# End Source File -# Begin Source File - -SOURCE=.\segment.h -# End Source File -# Begin Source File - -SOURCE=.\texgen.c -# End Source File -# Begin Source File - -SOURCE=.\tube_gc.h -# End Source File -# Begin Source File - -SOURCE=.\urotate.c -# End Source File -# Begin Source File - -SOURCE=.\view.c -# End Source File -# Begin Source File - -SOURCE=.\vvector.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/lib/gle/gutil.h b/lib/glut-3.7.6/lib/gle/gutil.h deleted file mode 100644 index 23296f694..000000000 --- a/lib/glut-3.7.6/lib/gle/gutil.h +++ /dev/null @@ -1,91 +0,0 @@ - -/* - * gutil.h - * - * FUNCTION: - * Provide utilities that allow rotation to occur - * around any axis. - * - * HISTORY: - * created by Linas Vepstas 1990 - * added single & double precision, June 1991, Linas Vepstas - */ - -#ifndef __GUTIL_H__ -#define __GUTIL_H__ - -#define __GUTIL_DOUBLE - -#ifdef __GUTIL_DOUBLE -#define gutDouble double -#else -#define gutDouble float -#endif - - -#ifdef _NO_PROTO /* NO ANSI C PROTOTYPING */ - -/* Rotation Utilities */ -extern void rot_axis_f (); -extern void rot_about_axis_f (); -extern void rot_omega_f (); -extern void urot_axis_f (); -extern void urot_about_axis_f (); -extern void urot_omega_f (); - -/* double-precision versions */ -extern void rot_axis_d (); -extern void rot_about_axis_d (); -extern void rot_omega_d (); -extern void urot_axis_d (); -extern void urot_about_axis_d (); -extern void urot_omega_d (); - -/* viewpoint functions */ -extern void uview_direction_d (); -extern void uview_direction_f (); -extern void uviewpoint_d (); -extern void uviewpoint_f (); - -#else /* _NO_PROTO */ /* ANSI C PROTOTYPING */ - -/* Rotation Utilities */ -extern void rot_axis_f (float omega, float axis[3]); -extern void rot_about_axis_f (float angle, float axis[3]); -extern void rot_omega_f (float axis[3]); -extern void urot_axis_f (float m[4][4], float omega, float axis[3]); -extern void urot_about_axis_f (float m[4][4], float angle, float axis[3]); -extern void urot_omega_f (float m[4][4], float axis[3]); - -/* double-precision versions */ -extern void rot_axis_d (double omega, double axis[3]); -extern void rot_about_axis_d (double angle, double axis[3]); -extern void rot_omega_d (double axis[3]); -extern void urot_axis_d (double m[4][4], double omega, double axis[3]); -extern void urot_about_axis_d (double m[4][4], double angle, double axis[3]); -extern void urot_omega_d (double m[4][4], double axis[3]); - -/* viewpoint functions */ -extern void uview_direction_d (double m[4][4], /* returned */ - double v21[3], /* input */ - double up[3]); /* input */ - -extern void uview_direction_f (float m[4][4], /* returned */ - float v21[3], /* input */ - float up[3]); /* input */ - -extern void uviewpoint_d (double m[4][4], /* returned */ - double v1[3], /* input */ - double v2[3], /* input */ - double up[3]); /* input */ - -extern void uviewpoint_f (float m[4][4], /* returned */ - float v1[3], /* input */ - float v2[3], /* input */ - float up[3]); /* input */ - -#endif /* _NO_PROTO */ - -#endif /* _GUTIL_H__ */ - -/* ------------------- end of file ---------------------- */ diff --git a/lib/glut-3.7.6/lib/gle/intersect.c b/lib/glut-3.7.6/lib/gle/intersect.c deleted file mode 100644 index e1948ab44..000000000 --- a/lib/glut-3.7.6/lib/gle/intersect.c +++ /dev/null @@ -1,67 +0,0 @@ -/* - * FUNCTION: - * This file contains a number of utilities useful to 3D graphics in - * general, and to the generation of tubing and extrusions in particular - * - * HISTORY: - * Written by Linas Vepstas, August 1991 - */ - -#include "gutil.h" -#include "intersect.h" - -/* ========================================================== */ -/* - * The macro and subroutine INTERSECT are designed to compute the - * intersection of a line (defined by the points v1 and v2) and a plane - * (defined as plane which is normal to the vector n, and contains the - * point p). Both sect the array "sect", which is the point of - * interesection. - * - * The subroutine returns a value indicating if the specified inputs - * represented a degenerate case. Valid is TRUE if the computed - * intersection is valid, else it is FALSE. - */ - - -/* ========================================================== */ - -void intersect (gleDouble sect[3], /* returned */ - gleDouble p[3], /* input */ - gleDouble n[3], /* input */ - gleDouble v1[3], /* input */ - gleDouble v2[3]) /* input */ -{ - INTERSECT (sect, p, n, v1, v2); -} - -/* ========================================================== */ -/* - * The macro and subroutine BISECTING_PLANE compute a normal vecotr that - * describes the bisecting plane between three points (v1, v2 and v3). - * This bisecting plane has the following properties: - * 1) it contains the point v2 - * 2) the angle it makes with v21 == v2 - v1 is equal to the angle it - * makes with v32 == v3 - v2 - * 3) it is perpendicular to the plane defined by v1, v2, v3. - * - * Having input v1, v2, and v3, it returns a vector n. - * Note that n is NOT normalized (is NOT of unit length). - * - * The subroutine returns a value indicating if the specified inputs - * represented a degenerate case. Valid is TRUE if the computed - * intersection is valid, else it is FALSE. - */ - -int bisecting_plane (gleDouble n[3], /* returned */ - gleDouble v1[3], /* input */ - gleDouble v2[3], /* input */ - gleDouble v3[3]) /* input */ -{ - int valid; - - BISECTING_PLANE (valid, n, v1, v2, v3); - return (valid); -} - -/* ========================================================== */ diff --git a/lib/glut-3.7.6/lib/gle/intersect.h b/lib/glut-3.7.6/lib/gle/intersect.h deleted file mode 100644 index 6cc81dab6..000000000 --- a/lib/glut-3.7.6/lib/gle/intersect.h +++ /dev/null @@ -1,391 +0,0 @@ -/* - * FUNCTION: - * This file contains a number of utilities useful to 3D graphics in - * general, and to the generation of tubing and extrusions in particular - * - * HISTORY: - * Written by Linas Vepstas, August 1991 - * Updated to correctly handle degenerate cases, Linas, February 1993 - */ - -#include -#include "port.h" -#include "vvector.h" - -#define BACKWARDS_INTERSECT (2) - -/* ========================================================== */ -/* - * the Degenerate_Tolerance token represents the greatest amount by - * which different scales in a graphics environment can differ before - * they should be considered "degenerate". That is, when one vector is - * a million times longer than another, changces are that the second will - * be less than a pixel long, and therefore was probably meant to be - * degenerate (by the CAD package, etc.) But what should this tolerance - * be? At least 1 in onethousand (since screen sizes are 1K pixels), but - * les than 1 in 4 million (since this is the limit of single-precision - * floating point accuracy). Of course, if double precision were used, - * then the tolerance could be increased. - * - * Potentially, this naive assumption could cause problems if the CAD - * package attempts to zoom in on small details, and turns out, certain - * points should not hvae been degenerate. The problem presented here - * is that the tolerance could run out before single-precision ran - * out, and so the CAD packages would perceive this as a "bug". - * One alternative is to fiddle around & try to tighten the tolerance. - * However, the right alternative is to code the graphics pipeline in - * double-precision (and tighten the tolerance). - * - * By the way, note that Degernate Tolerance is a "dimensionless" - * quantitiy -- it has no units -- it does not measure feet, inches, - * millimeters or pixels. It is used only in the computations of ratios - * and relative lengths. - */ - -/* - * Right now, the tolerance is set to 2 parts in a million, which - * corresponds to a 19-bit distinction of mantissas. Note that - * single-precsion numbers have 24 bit mantissas. - */ - -#define DEGENERATE_TOLERANCE (0.000002) - -/* ========================================================== */ -/* - * The macro and subroutine INTERSECT are designed to compute the - * intersection of a line (defined by the points v1 and v2) and a plane - * (defined as plane which is normal to the vector n, and contains the - * point p). Both return the point sect, which is the point of - * interesection. - * - * This MACRO attemps to be fairly robust by checking for a divide by - * zero. - */ - -/* ========================================================== */ -/* - * HACK ALERT - * The intersection parameter t has the nice property that if t>1, - * then the intersection is "in front of" p1, and if t<0, then the - * intersection is "behind" p2. Unfortunately, as the intersecting plane - * and the line become parallel, t wraps through infinity -- i.e. t can - * become so large that t becomes "greater than infinity" and comes back - * as a negative number (i.e. winding number hopped by one unit). We - * have no way of detecting this situation without adding gazzillions - * of lines of code of topological algebra to detect the winding number; - * and this would be incredibly difficult, and ruin performance. - * - * Thus, we've installed a cheap hack for use by the "cut style" drawing - * routines. If t proves to be a large negative number (more negative - * than -5), then we assume that t was positive and wound through - * infinity. This makes most cuts look good, without introducing bogus - * cuts at infinity. - */ -/* ========================================================== */ - -#define INTERSECT(sect,p,n,v1,v2) \ -{ \ - gleDouble deno, numer, t, omt; \ - \ - deno = (v1[0] - v2[0]) * n[0]; \ - deno += (v1[1] - v2[1]) * n[1]; \ - deno += (v1[2] - v2[2]) * n[2]; \ - \ - if (deno == 0.0) { \ - VEC_COPY (n, v1); \ - /* printf ("Intersect: Warning: line is coplanar with plane \n"); */ \ - } else { \ - \ - numer = (p[0] - v2[0]) * n[0]; \ - numer += (p[1] - v2[1]) * n[1]; \ - numer += (p[2] - v2[2]) * n[2]; \ - \ - t = numer / deno; \ - omt = 1.0 - t; \ - \ - sect[0] = t * v1[0] + omt * v2[0]; \ - sect[1] = t * v1[1] + omt * v2[1]; \ - sect[2] = t * v1[2] + omt * v2[2]; \ - } \ -} - -/* ========================================================== */ -/* - * The macro and subroutine BISECTING_PLANE compute a normal vector that - * describes the bisecting plane between three points (v1, v2 and v3). - * This bisecting plane has the following properties: - * 1) it contains the point v2 - * 2) the angle it makes with v21 == v2 - v1 is equal to the angle it - * makes with v32 == v3 - v2 - * 3) it is perpendicular to the plane defined by v1, v2, v3. - * - * Having input v1, v2, and v3, it returns a unit vector n. - * - * In some cases, the user may specify degenerate points, and still - * expect "reasonable" or "obvious" behaviour. The "expected" - * behaviour for these degenerate cases is: - * - * 1) if v1 == v2 == v3, then return n=0 - * 2) if v1 == v2, then return v32 (normalized). - * 3) if v2 == v3, then return v21 (normalized). - * 4) if v1, v2 and v3 co-linear, then return v21 (normalized). - * - * Mathematically, these special cases "make sense" -- we just have to - * code around potential divide-by-zero's in the code below. - */ - -/* ========================================================== */ - -#define BISECTING_PLANE(valid,n,v1,v2,v3) \ -{ \ - double v21[3], v32[3]; \ - double len21, len32; \ - double dot; \ - \ - VEC_DIFF (v21, v2, v1); \ - VEC_DIFF (v32, v3, v2); \ - \ - VEC_LENGTH (len21, v21); \ - VEC_LENGTH (len32, v32); \ - \ - if (len21 <= DEGENERATE_TOLERANCE * len32) { \ - \ - if (len32 == 0.0) { \ - /* all three points lie ontop of one-another */ \ - VEC_ZERO (n); \ - valid = FALSE; \ - } else { \ - /* return a normalized copy of v32 as bisector */ \ - len32 = 1.0 / len32; \ - VEC_SCALE (n, len32, v32); \ - valid = TRUE; \ - } \ - \ - } else { \ - \ - valid = TRUE; \ - \ - if (len32 <= DEGENERATE_TOLERANCE * len21) { \ - /* return a normalized copy of v21 as bisector */ \ - len21 = 1.0 / len21; \ - VEC_SCALE (n, len21, v21); \ - \ - } else { \ - \ - /* normalize v21 to be of unit length */ \ - len21 = 1.0 / len21; \ - VEC_SCALE (v21, len21, v21); \ - \ - /* normalize v32 to be of unit length */ \ - len32 = 1.0 / len32; \ - VEC_SCALE (v32, len32, v32); \ - \ - VEC_DOT_PRODUCT (dot, v32, v21); \ - \ - /* if dot == 1 or -1, then points are colinear */ \ - if ((dot >= (1.0-DEGENERATE_TOLERANCE)) || \ - (dot <= (-1.0+DEGENERATE_TOLERANCE))) { \ - VEC_COPY (n, v21); \ - } else { \ - \ - /* go do the full computation */ \ - n[0] = dot * (v32[0] + v21[0]) - v32[0] - v21[0]; \ - n[1] = dot * (v32[1] + v21[1]) - v32[1] - v21[1]; \ - n[2] = dot * (v32[2] + v21[2]) - v32[2] - v21[2]; \ - \ - /* if above if-test's passed, \ - * n should NEVER be of zero length */ \ - VEC_NORMALIZE (n); \ - } \ - } \ - } \ -} - -/* ========================================================== */ -/* - * The block of code below is ifdef'd out, and is here for reference - * purposes only. It performs the "mathematically right thing" for - * computing a bisecting plane, but is, unfortunately, subject ot noise - * in the presence of near degenerate points. Since computer graphics, - * due to sloppy coding, laziness, or correctness, is filled with - * degenerate points, we can't really use this version. The code above - * is far more appropriate for graphics. - */ - -#ifdef MATHEMATICALLY_EXACT_GRAPHICALLY_A_KILLER -#define BISECTING_PLANE(n,v1,v2,v3) \ -{ \ - double v21[3], v32[3]; \ - double len21, len32; \ - double dot; \ - \ - VEC_DIFF (v21, v2, v1); \ - VEC_DIFF (v32, v3, v2); \ - \ - VEC_LENGTH (len21, v21); \ - VEC_LENGTH (len32, v32); \ - \ - if (len21 == 0.0) { \ - \ - if (len32 == 0.0) { \ - /* all three points lie ontop of one-another */ \ - VEC_ZERO (n); \ - valid = FALSE; \ - } else { \ - /* return a normalized copy of v32 as bisector */ \ - len32 = 1.0 / len32; \ - VEC_SCALE (n, len32, v32); \ - } \ - \ - } else { \ - \ - /* normalize v21 to be of unit length */ \ - len21 = 1.0 / len21; \ - VEC_SCALE (v21, len21, v21); \ - \ - if (len32 == 0.0) { \ - /* return a normalized copy of v21 as bisector */ \ - VEC_COPY (n, v21); \ - } else { \ - \ - /* normalize v32 to be of unit length */ \ - len32 = 1.0 / len32; \ - VEC_SCALE (v32, len32, v32); \ - \ - VEC_DOT_PRODUCT (dot, v32, v21); \ - \ - /* if dot == 1 or -1, then points are colinear */ \ - if ((dot == 1.0) || (dot == -1.0)) { \ - VEC_COPY (n, v21); \ - } else { \ - \ - /* go do the full computation */ \ - n[0] = dot * (v32[0] + v21[0]) - v32[0] - v21[0]; \ - n[1] = dot * (v32[1] + v21[1]) - v32[1] - v21[1]; \ - n[2] = dot * (v32[2] + v21[2]) - v32[2] - v21[2]; \ - \ - /* if above if-test's passed, \ - * n should NEVER be of zero length */ \ - VEC_NORMALIZE (n); \ - } \ - } \ - } \ -} -#endif - -/* ========================================================== */ -/* - * This macro computes the plane perpendicular to the the plane - * defined by three points, and whose normal vector is givven as the - * difference between the two vectors ... - * - * (See way below for the "math" model if you want to understand this. - * The comments about relative errors above apply here.) - */ - -#define CUTTING_PLANE(valid,n,v1,v2,v3) \ -{ \ - double v21[3], v32[3]; \ - double len21, len32; \ - double lendiff; \ - \ - VEC_DIFF (v21, v2, v1); \ - VEC_DIFF (v32, v3, v2); \ - \ - VEC_LENGTH (len21, v21); \ - VEC_LENGTH (len32, v32); \ - \ - if (len21 <= DEGENERATE_TOLERANCE * len32) { \ - \ - if (len32 == 0.0) { \ - /* all three points lie ontop of one-another */ \ - VEC_ZERO (n); \ - valid = FALSE; \ - } else { \ - /* return a normalized copy of v32 as cut-vector */ \ - len32 = 1.0 / len32; \ - VEC_SCALE (n, len32, v32); \ - valid = TRUE; \ - } \ - \ - } else { \ - \ - valid = TRUE; \ - \ - if (len32 <= DEGENERATE_TOLERANCE * len21) { \ - /* return a normalized copy of v21 as cut vector */ \ - len21 = 1.0 / len21; \ - VEC_SCALE (n, len21, v21); \ - } else { \ - \ - /* normalize v21 to be of unit length */ \ - len21 = 1.0 / len21; \ - VEC_SCALE (v21, len21, v21); \ - \ - /* normalize v32 to be of unit length */ \ - len32 = 1.0 / len32; \ - VEC_SCALE (v32, len32, v32); \ - \ - VEC_DIFF (n, v21, v32); \ - VEC_LENGTH (lendiff, n); \ - \ - /* if the perp vector is very small, then the two \ - * vectors are darn near collinear, and the cut \ - * vector is probably poorly defined. */ \ - if (lendiff < DEGENERATE_TOLERANCE) { \ - VEC_ZERO (n); \ - valid = FALSE; \ - } else { \ - lendiff = 1.0 / lendiff; \ - VEC_SCALE (n, lendiff, n); \ - } \ - } \ - } \ -} - -/* ========================================================== */ - -#ifdef MATHEMATICALLY_EXACT_GRAPHICALLY_A_KILLER -#define CUTTING_PLANE(n,v1,v2,v3) \ -{ \ - double v21[3], v32[3]; \ - \ - VEC_DIFF (v21, v2, v1); \ - VEC_DIFF (v32, v3, v2); \ - \ - VEC_NORMALIZE (v21); \ - VEC_NORMALIZE (v32); \ - \ - VEC_DIFF (n, v21, v32); \ - VEC_NORMALIZE (n); \ -} -#endif - - -/* ============================================================ */ -/* This macro is used in several places to cycle through a series of - * points to find the next non-degenerate point in a series */ - -#define FIND_NON_DEGENERATE_POINT(inext,npoints,len,diff,point_array) \ -{ \ - gleDouble slen; \ - gleDouble summa[3]; \ - \ - do { \ - /* get distance to next point */ \ - VEC_DIFF (diff, point_array[inext+1], point_array[inext]); \ - VEC_LENGTH (len, diff); \ - VEC_SUM (summa, point_array[inext+1], point_array[inext]); \ - VEC_LENGTH (slen, summa); \ - slen *= DEGENERATE_TOLERANCE; \ - inext ++; \ - } while ((len <= slen) && (inext < npoints-1)); \ -} - -/* ========================================================== */ - -extern int bisecting_plane (gleDouble n[3], /* returned */ - gleDouble v1[3], /* input */ - gleDouble v2[3], /* input */ - gleDouble v3[3]); /* input */ - diff --git a/lib/glut-3.7.6/lib/gle/port.h b/lib/glut-3.7.6/lib/gle/port.h deleted file mode 100644 index d9e6c8390..000000000 --- a/lib/glut-3.7.6/lib/gle/port.h +++ /dev/null @@ -1,296 +0,0 @@ - -/* - * port.h - * - * FUNCTION: - * This file contains defines for porting the tubing toolkit from GL to - * OpenGL to some callback scheme. - * - * HISTORY: - * Created by Linas Vepstas -- February 1993 - * Added auto texture coord generation hacks, Linas April 1994 - */ - -#ifndef __GLE_PORT_H__ -#define __GLE_PORT_H__ - - -#ifndef TRUE -#define TRUE 1 -#endif - -#ifndef FALSE -#define FALSE 0 -#endif - -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -/* ====================================================== */ -/* Some compilers can't handle multiply-subscripted array's */ - -#ifdef FUNKY_C -typedef gleDouble gleVector; -#define AVAL(arr,n,i,j) arr(6*n+3*i+j) -#define VVAL(arr,n,i) arr(3*n+i) - -#else /* FUNKY_C */ -typedef double gleVector[3]; -typedef double glePoint[2]; -#define AVAL(arr,n,i,j) arr[n][i][j] -#define VVAL(arr,n,i) arr[n][i]; - -#endif /* FUNKY_C */ - -/* ====================================================== */ -/* These are used to convey info about topography to the - * texture mapping routines */ - -#define FRONT 1 -#define BACK 2 -#define FRONT_CAP 3 -#define BACK_CAP 4 -#define FILLET 5 - -/* ====================================================== */ - -#define __GLE_DOUBLE - -/* ====================================================== */ - -#ifdef __GLE_DOUBLE -#define gleDouble double -#define urot_axis(a,b,c) urot_axis_d(a,b,c) -#define uview_direction(a,b,c) uview_direction_d(a,b,c) -#define uviewpoint(a,b,c,d) uviewpoint_d(a,b,c,d) -#define MULTMATRIX(m) MULTMATRIX_D(m) -#define LOADMATRIX(m) LOADMATRIX_D(m) -#define V3F(x,j,id) V3F_D(x,j,id) -#define N3F(x) N3F_D(x) -#define T2F(x,y) T2F_D(x,y) -#else -#define gleDouble float -#define urot_axis(a,b,c) urot_axis_f(a,b,c) -#define uview_direction(a,b,c) uview_direction_f(a,b,c) -#define uviewpoint(a,b,c,d) uviewpoint_f(a,b,c,d) -#define MULTMATRIX(m) MULTMATRIX_F(m) -#define LOADMATRIX(m) LOADMATRIX_F(m) -#define V3F(x,j,id) V3F_F(x,j,id) -#define N3F(x) N3F_F(x) -#define T2F(x,y) T2F_F(x,y) -#endif - -/* ====================================================== */ - -#if (defined DEBUG_GL_32 || DEBUG_OPENGL_10) -#undef GL_32 -#undef OPENGL_10 - -#define BGNTMESH(i,len) printf ("bgntmesh() \n"); -#define ENDTMESH() printf ("endtmesh() \n"); -#define BGNPOLYGON() printf ("bgnpolygon() \n"); -#define ENDPOLYGON() printf ("endpolygon() \n"); -#define V3F_F(x,j,id) printf ("v3f(x) %f %f %f \n", x[0], x[1], x[2]); -#define V3F_D(x,j,id) printf ("v3d(x) %f %f %f \n", x[0], x[1], x[2]); -#define N3F_F(x) printf ("n3f(x) %f %f %f \n", x[0], x[1], x[2]); -#define N3F_D(x) printf ("n3d(x) %f %f %f \n", x[0], x[1], x[2]); -#define C3F(x) printf ("c3f(x) %f %f %f \n", x[0], x[1], x[2]); - -#define POPMATRIX() printf ("popmatrix () \n"); -#define PUSHMATRIX() printf ("pushmatrix() \n"); -#define MULTMATRIX_F(x) MULTMATRIX_D(x) -#define LOADMATRIX_F(x) LOADMATRIX_D(x) - - -#define LOADMATRIX_D(x) { \ - int i, j; \ - printf ("loadmatrix (x) \n"); \ - for (i=0; i<4; i++) { \ - for (j=0; j<4; j++) { \ - printf ( "%f ", x[i][j]); \ - } \ - printf (" \n"); \ - } \ -} - -#define MULTMATRIX_D(x) { \ - int i, j; \ - printf ("multmatrix (x) \n"); \ - for (i=0; i<4; i++) { \ - for (j=0; j<4; j++) { \ - printf ( "%f ", x[i][j]); \ - } \ - printf (" \n"); \ - } \ -} - -#define __IS_LIGHTING_ON (1) - -#endif - -/* ====================================================== */ - -#ifdef GL_32 - -#include - -#define BGNTMESH(i,len) bgntmesh() -#define ENDTMESH() endtmesh() -#define BGNPOLYGON() bgnpolygon() -#define ENDPOLYGON() endpolygon() -#define V3F_F(x,j,id) v3f(x) -#define V3F_D(x,j,id) v3d(x) -#define N3F_F(x) n3f(x) -#define T2F_F(x,y) -#define T2F_D(x,y) -#define C3F(x) c3f(x) - -#define POPMATRIX() popmatrix () -#define PUSHMATRIX() pushmatrix() -#define MULTMATRIX_F(x) multmatrix (x) -#define LOADMATRIX_F(x) loadmatrix (x) - -#define N3F_D(x) { \ - float nnn[3]; \ - nnn[0] = (float) x[0]; \ - nnn[1] = (float) x[1]; \ - nnn[2] = (float) x[2]; \ - n3f (nnn); \ -} - -#define LOADMATRIX_D(x) { \ - int i, j; \ - float mmm[4][4]; \ - for (i=0; i<4; i++) { \ - for (j=0; j<4; j++) { \ - mmm[i][j] = (float) x[i][j]; \ - } \ - } \ - loadmatrix(mmm); \ -} - -#define MULTMATRIX_D(x) { \ - int i, j; \ - float mmm[4][4]; \ - for (i=0; i<4; i++) { \ - for (j=0; j<4; j++) { \ - mmm[i][j] = (float) x[i][j]; \ - } \ - } \ - multmatrix(mmm); \ -} - -/* #define __IS_LIGHTING_ON (MSINGLE == getmmode()) */ -#define __IS_LIGHTING_ON (extrusion_join_style & TUBE_LIGHTING_ON) - -#endif /* GL_32 */ - -/* ====================================================== */ -#ifdef OPENGL_10 - -#if defined(_WIN32) -#include -#pragma warning (disable:4244) /* disable bogus conversion warnings */ -#endif -#include -#include - -/* -#define N3F_F(x) { \ - float nnn[3]; \ - nnn[0] = - (float) x[0]; \ - nnn[1] = - (float) x[1]; \ - nnn[2] = - (float) x[2]; \ - glNormal3fv (nnn); \ -} -#define N3F_D(x) { \ - float nnn[3]; \ - nnn[0] = - (float) x[0]; \ - nnn[1] = - (float) x[1]; \ - nnn[2] = - (float) x[2]; \ - glNormal3fv (nnn); \ -} -*/ - -#define C3F(x) glColor3fv(x) -#define T2F_F(x,y) glTexCoord2f(x,y) -#define T2F_D(x,y) glTexCoord2d(x,y) - -#define POPMATRIX() glPopMatrix() -#define PUSHMATRIX() glPushMatrix() - -#define MULTMATRIX_F(x) glMultMatrixf ((const GLfloat *)x) -#define LOADMATRIX_F(x) glLoadMatrixf ((const GLfloat *)x) - -#define MULTMATRIX_D(x) glMultMatrixd ((const GLdouble *)x) -#define LOADMATRIX_D(x) glLoadMatrixd ((const GLdouble *)x) - -#define __IS_LIGHTING_ON (glIsEnabled(GL_LIGHTING)) - -/* ====================================================== */ -#ifdef AUTO_TEXTURE - -#define BGNTMESH(i,len) { \ - if(_gle_gc -> bgn_gen_texture) (*(_gle_gc -> bgn_gen_texture))(i,len);\ - glBegin (GL_TRIANGLE_STRIP); \ -} - -#define BGNPOLYGON() { \ - if(_gle_gc -> bgn_gen_texture) (*(_gle_gc -> bgn_gen_texture))();\ - glBegin (GL_POLYGON); \ -} - -#define N3F_F(x) { \ - if(_gle_gc -> n3f_gen_texture) (*(_gle_gc -> n3f_gen_texture))(x); \ - glNormal3fv(x); \ -} - -#define N3F_D(x) { \ - if(_gle_gc -> n3d_gen_texture) (*(_gle_gc -> n3d_gen_texture))(x); \ - glNormal3dv(x); \ -} - -#define V3F_F(x,j,id) { \ - if(_gle_gc -> v3f_gen_texture) (*(_gle_gc -> v3f_gen_texture))(x,j,id);\ - glVertex3fv(x); \ -} - -#define V3F_D(x,j,id) { \ - if(_gle_gc -> v3d_gen_texture) (*(_gle_gc -> v3d_gen_texture))(x,j,id); \ - glVertex3dv(x); \ -} - -#define ENDTMESH() { \ - if(_gle_gc -> end_gen_texture) (*(_gle_gc -> end_gen_texture))(); \ - glEnd (); \ -} - -#define ENDPOLYGON() { \ - if(_gle_gc -> end_gen_texture) (*(_gle_gc -> end_gen_texture))(); \ - glEnd (); \ -} - -/* ====================================================== */ -#else /* AUTO_TEXTURE */ - -#define BGNTMESH(i,len) glBegin (GL_TRIANGLE_STRIP); -#define BGNPOLYGON() glBegin (GL_POLYGON); - -#define N3F_F(x) glNormal3fv(x) -#define N3F_D(x) glNormal3dv(x) -#define V3F_F(x,j,id) glVertex3fv(x); -#define V3F_D(x,j,id) glVertex3dv(x); - -#define ENDTMESH() glEnd () -#define ENDPOLYGON() glEnd() - -#endif /* AUTO_TEXTURE */ - -#endif /* OPENGL_10 */ - -/* ====================================================== */ - - -#endif /* __GLE_PORT_H__ */ -/* ================== END OF FILE ======================= */ diff --git a/lib/glut-3.7.6/lib/gle/qmesh.c b/lib/glut-3.7.6/lib/gle/qmesh.c deleted file mode 100644 index c6ea83fb8..000000000 --- a/lib/glut-3.7.6/lib/gle/qmesh.c +++ /dev/null @@ -1,196 +0,0 @@ - -/* - * This file contains routines to support the SGI compatible quad-mesh - * primitve. - * - * Written By Linas Vepstas November 1991 - */ - -#include - -struct _emu_qmesh_vertex_pair { - float ca[3]; - float na[3]; - float va[4]; - - float cb[3]; - float nb[3]; - float vb[4]; - }; - -#define QMESH 6 -static int bgnmode = 0; - -struct _emu_qmesh { - int num_vert; - struct _emu_qmesh_vertex_pair paira; - struct _emu_qmesh_vertex_pair pairb; - struct _emu_qmesh_vertex_pair *first_pair; - struct _emu_qmesh_vertex_pair *second_pair; - float defer_color[3]; - float defer_normal[3]; -} * _emu_qmesh_GC; - - -#define COPY_THREE_WORDS(A,B) { \ - struct three_words { long a, b, c; }; \ - *(struct three_words *) (A) = *(struct three_words *) (B); \ -} - -#define COPY_FOUR_WORDS(A,B) { \ - struct four_words { long a, b, c, d; }; \ - *(struct four_words *) (A) = *(struct four_words *) (B); \ -} - -/* ================================================================= */ - -void _emu_qmesh_InitGC (struct _emu_qmesh * tmp) -{ - - tmp -> num_vert = 0; - tmp -> first_pair = & (tmp -> paira); - tmp -> second_pair = & (tmp -> pairb); - - tmp -> defer_color[0] = 0.0; - tmp -> defer_color[1] = 0.0; - tmp -> defer_color[2] = 0.0; - - tmp -> defer_normal[0] = 0.0; - tmp -> defer_normal[1] = 0.0; - tmp -> defer_normal[2] = 0.0; - -} - -/* ================================================================= */ - -struct _emu_qmesh * _emu_qmesh_CreateGC (void) -{ - struct _emu_qmesh * tmp; - - tmp = (struct _emu_qmesh *) malloc (sizeof (struct _emu_qmesh)); - _emu_qmesh_InitGC (tmp); - - return (tmp); -} - -/* ================================================================= */ - -void _emu_qmesh_DestroyGC (void) -{ - free (_emu_qmesh_GC); -} - -/* ================================================================= */ - -void _emu_qmesh_bgnqmesh (void) -{ - _emu_qmesh_GC = _emu_qmesh_CreateGC (); - bgnmode = QMESH; -} - -/* ================================================================= */ - -void _emu_qmesh_endqmesh (void) -{ - _emu_qmesh_DestroyGC (); - bgnmode = 0; -} - -/* ================================================================= */ - -void _emu_qmesh_c3f (float c[3]) -{ - if (bgnmode == QMESH) { - COPY_THREE_WORDS (_emu_qmesh_GC -> defer_color, c); - } else { - c3f (c); - } -} - -/* ================================================================= */ - -void _emu_qmesh_n3f (float n[3]) -{ - if (bgnmode == QMESH) { - COPY_THREE_WORDS (_emu_qmesh_GC -> defer_normal, n); - } else { - n3f (n); - } -} - -/* ================================================================= */ - -void _emu_qmesh_v3f (float v[3]) -{ - int nv, even_odd, fs; - struct _emu_qmesh_vertex_pair *tmp; - - if (bgnmode == QMESH) { - nv = _emu_qmesh_GC -> num_vert; - even_odd = nv %2; - fs = (nv %4) / 2; - - if (fs) { - if (even_odd) { - COPY_THREE_WORDS (_emu_qmesh_GC -> pairb.cb, - _emu_qmesh_GC -> defer_color); - COPY_THREE_WORDS (_emu_qmesh_GC -> pairb.nb, - _emu_qmesh_GC -> defer_normal); - COPY_THREE_WORDS (_emu_qmesh_GC -> pairb.vb, v); - _emu_qmesh_GC -> pairb.vb [3] = 1.0; - } else { - COPY_THREE_WORDS (_emu_qmesh_GC -> pairb.ca, - _emu_qmesh_GC -> defer_color); - COPY_THREE_WORDS (_emu_qmesh_GC -> pairb.na, - _emu_qmesh_GC -> defer_normal); - COPY_THREE_WORDS (_emu_qmesh_GC -> pairb.va, v); - _emu_qmesh_GC -> pairb.va [3] = 1.0; - } - } else { - if (even_odd) { - COPY_THREE_WORDS (_emu_qmesh_GC -> paira.cb, - _emu_qmesh_GC -> defer_color); - COPY_THREE_WORDS (_emu_qmesh_GC -> paira.nb, - _emu_qmesh_GC -> defer_normal); - COPY_THREE_WORDS (_emu_qmesh_GC -> paira.vb, v); - _emu_qmesh_GC -> paira.vb [3] = 1.0; - } else { - COPY_THREE_WORDS (_emu_qmesh_GC -> paira.ca, - _emu_qmesh_GC -> defer_color); - COPY_THREE_WORDS (_emu_qmesh_GC -> paira.na, - _emu_qmesh_GC -> defer_normal); - COPY_THREE_WORDS (_emu_qmesh_GC -> paira.va, v); - _emu_qmesh_GC -> paira.va [3] = 1.0; - } - } - - if (even_odd && (nv >= 3)) { - bgnpolygon (); - c3f ( _emu_qmesh_GC -> first_pair -> ca); - n3f ( _emu_qmesh_GC -> first_pair -> na); - v4f ( _emu_qmesh_GC -> first_pair -> va); - c3f ( _emu_qmesh_GC -> first_pair -> cb); - n3f ( _emu_qmesh_GC -> first_pair -> nb); - v4f ( _emu_qmesh_GC -> first_pair -> vb); - c3f ( _emu_qmesh_GC -> second_pair -> cb); - n3f ( _emu_qmesh_GC -> second_pair -> nb); - v4f ( _emu_qmesh_GC -> second_pair -> vb); - c3f ( _emu_qmesh_GC -> second_pair -> ca); - n3f ( _emu_qmesh_GC -> second_pair -> na); - v4f ( _emu_qmesh_GC -> second_pair -> va); - endpolygon (); - - /* swap the data buffers */ - tmp = _emu_qmesh_GC -> first_pair; - _emu_qmesh_GC -> first_pair = _emu_qmesh_GC -> second_pair; - _emu_qmesh_GC -> second_pair = tmp; - } - - _emu_qmesh_GC -> num_vert ++; - - } else { - v3f (v); - } -} - -/* ================================================================= */ diff --git a/lib/glut-3.7.6/lib/gle/rot.h b/lib/glut-3.7.6/lib/gle/rot.h deleted file mode 100644 index f7588c183..000000000 --- a/lib/glut-3.7.6/lib/gle/rot.h +++ /dev/null @@ -1,98 +0,0 @@ - -/* - * rot.h - * - * FUNCTION: - * rotation matrix utilities - * - * HISTORY: - * Linas Vepstas Aug 1990 - */ - -/* ========================================================== */ -/* - * The MACROS below generate and return more traditional rotation - * matrices -- matrices for rotations about principal axes. - */ -/* ========================================================== */ - -#define ROTX_CS(m,cosine,sine) \ -{ \ - /* rotation about the x-axis */ \ - \ - m[0][0] = 1.0; \ - m[0][1] = 0.0; \ - m[0][2] = 0.0; \ - m[0][3] = 0.0; \ - \ - m[1][0] = 0.0; \ - m[1][1] = (cosine); \ - m[1][2] = (sine); \ - m[1][3] = 0.0; \ - \ - m[2][0] = 0.0; \ - m[2][1] = -(sine); \ - m[2][2] = (cosine); \ - m[2][3] = 0.0; \ - \ - m[3][0] = 0.0; \ - m[3][1] = 0.0; \ - m[3][2] = 0.0; \ - m[3][3] = 1.0; \ -} - -/* ========================================================== */ - -#define ROTY_CS(m,cosine,sine) \ -{ \ - /* rotation about the y-axis */ \ - \ - m[0][0] = (cosine); \ - m[0][1] = 0.0; \ - m[0][2] = -(sine); \ - m[0][3] = 0.0; \ - \ - m[1][0] = 0.0; \ - m[1][1] = 1.0; \ - m[1][2] = 0.0; \ - m[1][3] = 0.0; \ - \ - m[2][0] = (sine); \ - m[2][1] = 0.0; \ - m[2][2] = (cosine); \ - m[2][3] = 0.0; \ - \ - m[3][0] = 0.0; \ - m[3][1] = 0.0; \ - m[3][2] = 0.0; \ - m[3][3] = 1.0; \ -} - -/* ========================================================== */ - -#define ROTZ_CS(m,cosine,sine) \ -{ \ - /* rotation about the z-axis */ \ - \ - m[0][0] = (cosine); \ - m[0][1] = (sine); \ - m[0][2] = 0.0; \ - m[0][3] = 0.0; \ - \ - m[1][0] = -(sine); \ - m[1][1] = (cosine); \ - m[1][2] = 0.0; \ - m[1][3] = 0.0; \ - \ - m[2][0] = 0.0; \ - m[2][1] = 0.0; \ - m[2][2] = 1.0; \ - m[2][3] = 0.0; \ - \ - m[3][0] = 0.0; \ - m[3][1] = 0.0; \ - m[3][2] = 0.0; \ - m[3][3] = 1.0; \ -} - -/* ========================================================== */ diff --git a/lib/glut-3.7.6/lib/gle/rot_prince.c b/lib/glut-3.7.6/lib/gle/rot_prince.c deleted file mode 100644 index 69cf042bd..000000000 --- a/lib/glut-3.7.6/lib/gle/rot_prince.c +++ /dev/null @@ -1,303 +0,0 @@ - -#include -#include "rot.h" -#include "port.h" - -/* ========================================================== */ -/* - * The routines below generate and return more traditional rotation - * matrices -- matrices for rotations about principal axes. - */ -/* ========================================================== */ - -#ifdef __GUTIL_DOUBLE -void urotx_sc_d (double m[4][4], /* returned */ - double cosine, /* input */ - double sine) /* input */ -#else -void urotx_sc_f (float m[4][4], /* returned */ - float cosine, /* input */ - float sine) /* input */ -#endif -{ - /* create matrix that represents rotation about the x-axis */ - - ROTX_CS (m, cosine, sine); -} - -/* ========================================================== */ - -#if 0 -#ifdef __GUTIL_DOUBLE -void rotx_cs_d (double cosine, /* input */ - double sine) /* input */ -{ - /* create and load matrix that represents rotation about the x-axis */ - double m[4][4]; - - (void) urotx_cs_d (m, cosine, sine); - MULTMATRIX_D (m); -} - -#else -void rotx_cs_f (float cosine, /* input */ - float sine) /* input */ -{ - /* create and load matrix that represents rotation about the x-axis */ - float m[4][4]; - - (void) urotx_cs_f (m, cosine, sine); - MULTMATRIX_F (m); -} -#endif -#endif - -/* ========================================================== */ - -#ifdef __GUTIL_DOUBLE -void uroty_sc_d (double m[4][4], /* returned */ - double cosine, /* input */ - double sine) /* input */ -#else -void uroty_sc_f (float m[4][4], /* returned */ - float cosine, /* input */ - float sine) /* input */ -#endif -{ - /* create matriy that represents rotation about the y-ayis */ - - ROTX_CS (m, cosine, sine); -} - -/* ========================================================== */ - -#if 0 -#ifdef __GUTIL_DOUBLE -void roty_cs_d (double cosine, /* input */ - double sine) /* input */ -{ - /* create and load matriy that represents rotation about the y-ayis */ - double m[4][4]; - - (void) uroty_cs_d (m, cosine, sine); - MULTMATRIX_D (m); -} - -#else -void roty_cs_f (float cosine, /* input */ - float sine) /* input */ -{ - /* create and load matriy that represents rotation about the y-ayis */ - float m[4][4]; - - (void) uroty_cs_f (m, cosine, sine); - MULTMATRIX_F (m); -} -#endif -#endif - -/* ========================================================== */ - -#ifdef __GUTIL_DOUBLE -void urotz_sc_d (double m[4][4], /* returned */ - double cosine, /* input */ - double sine) /* input */ -#else -void urotz_sc_f (float m[4][4], /* returned */ - float cosine, /* input */ - float sine) /* input */ -#endif -{ - /* create matriz that represents rotation about the z-azis */ - - ROTX_CS (m, cosine, sine); -} - -/* ========================================================== */ - -#if 0 -#ifdef __GUTIL_DOUBLE -void rotz_cs_d (double cosine, /* input */ - double sine) /* input */ -{ - /* create and load matriz that represents rotation about the z-azis */ - double m[4][4]; - - (void) urotz_cs_d (m, cosine, sine); - MULTMATRIX_D (m); -} - -#else -void rotz_cs_f (float cosine, /* input */ - float sine) /* input */ -{ - /* create and load matriz that represents rotation about the z-azis */ - float m[4][4]; - - (void) urotz_cs_f (m, cosine, sine); - MULTMATRIX_F (m); -} -#endif -#endif - -/* ========================================================== */ - -#if 0 -#ifdef __GUTIL_DOUBLE -void urot_cs_d (double m[4][4], /* returned */ - double cosine, /* input */ - double sine, /* input */ - char axis) /* input */ -{ - /* create matrix that represents rotation about a principle axis */ - - switch (axis) { - case 'x': - case 'X': - urotx_cs_d (m, cosine, sine); - break; - case 'y': - case 'Y': - uroty_cs_d (m, cosine, sine); - break; - case 'z': - case 'Z': - urotz_cs_d (m, cosine, sine); - break; - default: - break; - } - -} - -#else -void urot_cs_f (float m[4][4], /* returned */ - float cosine, /* input */ - float sine, /* input */ - char axis) /* input */ -{ - /* create matrix that represents rotation about a principle axis */ - - switch (axis) { - case 'x': - case 'X': - urotx_cs_f (m, cosine, sine); - break; - case 'y': - case 'Y': - uroty_cs_f (m, cosine, sine); - break; - case 'z': - case 'Z': - urotz_cs_f (m, cosine, sine); - break; - default: - break; - } - -} -#endif -#endif - -/* ========================================================== */ - -#if 0 -#ifdef __GUTIL_DOUBLE -void rot_cs_d (double cosine, /* input */ - double sine, /* input */ - char axis) /* input */ -{ - /* create and load matrix that represents rotation about the z-axis */ - double m[4][4]; - - (void) urot_cs_d (m, cosine, sine, axis); - MULTMATRIX_D (m); -} -#else -void rot_cs_f (float cosine, /* input */ - float sine, /* input */ - char axis) /* input */ -{ - /* create and load matrix that represents rotation about the z-axis */ - float m[4][4]; - - (void) urot_cs_f (m, cosine, sine, axis); - MULTMATRIX_F (m); -} -#endif -#endif - -/* ========================================================== */ - -#if 0 -#ifdef __GUTIL_DOUBLE -void urot_prince_d (double m[4][4], /* returned */ - double theta, /* input */ - char axis) /* input */ -{ - /* - * generate rotation matrix for rotation around principal axis; - * note that angle is measured in radians (divide by 180, multiply by - * PI to convert from degrees). - */ - - (void) urot_cs_d (m, - cos (theta), - sin (theta), - axis); -} -#else -void urot_prince_f (float m[4][4], /* returned */ - float theta, /* input */ - char axis) /* input */ -{ - /* - * generate rotation matrix for rotation around principal axis; - * note that angle is measured in radians (divide by 180, multiply by - * PI to convert from degrees). - */ - - (void) urot_cs_f (m, - (float) cos ((double) theta), - (float) sin ((double) theta), - axis); -} -#endif -#endif - -/* ========================================================== */ - -#if 0 -#ifdef __GUTIL_DOUBLE -void rot_prince_d (double theta, /* input */ - char axis) /* input */ -{ - double m[4][4]; - /* - * generate rotation matrix for rotation around principal axis; - * note that angle is measured in radians (divide by 180, multiply by - * PI to convert from degrees). - */ - - (void) urot_prince_d (m, theta, axis); - MULTMATRIX_D (m); -} -#else - -void rot_prince_f (float theta, /* input */ - char axis) /* input */ -{ - float m[4][4]; - /* - * generate rotation matrix for rotation around principal axis; - * note that angle is measured in radians (divide by 180, multiply by - * PI to convert from degrees). - */ - - (void) urot_prince_f (m, theta, axis); - MULTMATRIX_F (m); -} -#endif -#endif - -/* ========================================================== */ diff --git a/lib/glut-3.7.6/lib/gle/rotate.c b/lib/glut-3.7.6/lib/gle/rotate.c deleted file mode 100644 index 028b067ff..000000000 --- a/lib/glut-3.7.6/lib/gle/rotate.c +++ /dev/null @@ -1,134 +0,0 @@ -/* - * MODULE NAME: rotate.c - * - * FUNCTION: - * This module contains three different routines that compute rotation - * matricies and load them into GL. - * Detailed description is provided below. - * - * DEPENDENCIES: - * The routines call GL matrix routines. - * - * HISTORY: - * Developed & written, Linas Vepstas, Septmeber 1991 - * Double precision port, March 1993 - * - * DETAILED DESCRIPTION: - * This module contains three routines: - * -------------------------------------------------------------------- - * - * void urot_about_axis (float m[4][4], --- returned - * float angle, --- input - * float axis[3]) --- input - * Computes a rotation matrix. - * The rotation is around the the direction specified by the argument - * argument axis[3]. User may specify vector which is not of unit - * length. The angle of rotation is specified in degrees, and is in the - * right-handed direction. - * - * void rot_about_axis (float angle, --- input - * float axis[3]) --- input - * Same as above routine, except that the matrix is multiplied into the - * GL matrix stack. - * - * -------------------------------------------------------------------- - * - * void urot_axis (float m[4][4], --- returned - * float omega, --- input - * float axis[3]) --- input - * Same as urot_about_axis(), but angle specified in radians. - * It is assumed that the argument axis[3] is a vector of unit length. - * If it is not of unit length, the returned matrix will not be correct. - * - * void rot_axis (float omega, --- input - * float axis[3]) --- input - * Same as above routine, except that the matrix is multiplied into the - * GL matrix stack. - * - * -------------------------------------------------------------------- - * - * void urot_omega (float m[4][4], --- returned - * float omega[3]) --- input - * same as urot_axis(), but the angle is taken as the length of the - * vector omega[3] - * - * void rot_omega (float omega[3]) --- input - * Same as above routine, except that the matrix is multiplied into the - * GL matrix stack. - * - * -------------------------------------------------------------------- - */ - -#include -#include "port.h" -#include "gutil.h" - -/* ========================================================== */ - -#ifdef __GUTIL_DOUBLE -void rot_axis_d (double omega, /* input */ - double axis[3]) /* input */ -{ - double m[4][4]; - - (void) urot_axis_d (m, omega, axis); - MULTMATRIX_D (m); - -} -#else - -void rot_axis_f (float omega, /* input */ - float axis[3]) /* input */ -{ - float m[4][4]; - - (void) urot_axis_f (m, omega, axis); - MULTMATRIX_F (m); - -} -#endif - -/* ========================================================== */ - -#ifdef __GUTIL_DOUBLE -void rot_about_axis_d (double angle, /* input */ - double axis[3]) /* input */ -{ - double m[4][4]; - - (void) urot_about_axis_d (m, angle, axis); - MULTMATRIX_D (m); -} - -#else -void rot_about_axis_f (float angle, /* input */ - float axis[3]) /* input */ -{ - float m[4][4]; - - (void) urot_about_axis_f (m, angle, axis); - MULTMATRIX_F (m); -} -#endif - -/* ========================================================== */ - -#ifdef __GUTIL_DOUBLE -void rot_omega_d (double axis[3]) /* input */ -{ - double m[4][4]; - - (void) urot_omega_d (m, axis); - MULTMATRIX_D(m); -} -#else -void rot_omega_f (float axis[3]) /* input */ -{ - float m[4][4]; - - (void) urot_omega_f (m, axis); - MULTMATRIX_F(m); -} -#endif - -/* ========================================================== */ diff --git a/lib/glut-3.7.6/lib/gle/round_cap.c b/lib/glut-3.7.6/lib/gle/round_cap.c deleted file mode 100644 index 4decd9158..000000000 --- a/lib/glut-3.7.6/lib/gle/round_cap.c +++ /dev/null @@ -1,211 +0,0 @@ -/* - * MODULE NAME: round_cap.c - * - * FUNCTION: - * This module contains code that draws the round end-cap for round - * join-style tubing. - * - * HISTORY: - * written by Linas Vepstas August/September 1991 - * split into multiple compile units, Linas, October 1991 - * added normal vectors Linas, October 1991 - */ - - -#include -#include -#include -#include /* for the memcpy() subroutine */ -#include -#include "port.h" -#include "gutil.h" -#include "vvector.h" -#include "extrude.h" -#include "tube_gc.h" -#include "intersect.h" -#include "segment.h" - - -/* ============================================================ */ -/* This routine does what it says: It draws the end-caps for the - * "round" join style. - */ - -/* HACK ALERT HACK ALERT HACK ALERT HACK ALERT */ -/* This #define should be replaced by some adaptive thingy. - * the adaptiveness needs to depend on relative angles and diameter of - * extrusion relative to screen size (in pixels). - */ - -#define __ROUND_TESS_PIECES 5 - -void draw_round_style_cap_callback (int ncp, - double cap[][3], - float face_color[3], - gleDouble cut[3], - gleDouble bi[3], - double norms[][3], - int frontwards) -{ - double axis[3]; - double xycut[3]; - double theta; - double *last_contour, *next_contour; - double *last_norm, *next_norm; - double *cap_z; - double *tmp; - char *malloced_area; - int i, j, k; - double m[4][4]; - - if (face_color != NULL) C3F (face_color); - - /* ------------ start setting up rotation matrix ------------- */ - /* if the cut vector is NULL (this should only occur in - * a degenerate case), then we can't draw anything. return. */ - if (cut == NULL) return; - - /* make sure that the cut vector points inwards */ - if (cut[2] > 0.0) { - VEC_SCALE (cut, -1.0, cut); - } - - /* make sure that the bi vector points outwards */ - if (bi[2] < 0.0) { - VEC_SCALE (bi, -1.0, bi); - } - - /* determine the axis we are to rotate about to get bi-contour. - * Note that the axis will always lie in the x-y plane */ - VEC_CROSS_PRODUCT (axis, cut, bi); - - /* reverse the cut vector for the back cap -- - * need to do this to get angle right */ - if (!frontwards) { - VEC_SCALE (cut, -1.0, cut); - } - - /* get angle to rotate by -- arccos of dot product of cut with cut - * projected into the x-y plane */ - xycut [0] = 0.0; - xycut [1] = 0.0; - xycut [2] = 1.0; - VEC_PERP (xycut, cut, xycut); - VEC_NORMALIZE (xycut); - VEC_DOT_PRODUCT (theta, xycut, cut); - - theta = acos (theta); - - /* we'll tesselate round joins into a number of teeny pieces */ - theta /= (double) __ROUND_TESS_PIECES; - - /* get the matrix */ - urot_axis_d (m, theta, axis); - - /* ------------ done setting up rotation matrix ------------- */ - - /* This malloc is a fancy version of: - * last_contour = (double *) malloc (3*ncp*sizeof(double); - * next_contour = (double *) malloc (3*ncp*sizeof(double); - */ - malloced_area = malloc ((4*3+1) *ncp*sizeof (double)); - last_contour = (double *) malloced_area; - next_contour = last_contour + 3*ncp; - cap_z = next_contour + 3*ncp; - last_norm = cap_z + ncp; - next_norm = last_norm + 3*ncp; - - /* make first copy of contour */ - if (frontwards) { - for (j=0; j -#include -#include -#include /* for the memcpy() subroutine */ -#include "GL/tube.h" -#include "port.h" -#include "extrude.h" -#include "tube_gc.h" -#include "segment.h" - - -/* ============================================================ */ - -void draw_segment_plain (int ncp, /* number of contour points */ - gleDouble front_contour[][3], - gleDouble back_contour[][3], - int inext, double len) -{ - int j; - - /* draw the tube segment */ - BGNTMESH (inext, len); - for (j=0; j -#include -#include -#include "port.h" -#include "tube_gc.h" - -/* ======================================================= */ - -gleGC *_gle_gc = 0x0; - -gleGC * gleCreateGC (void) { - gleGC * retval = (gleGC *) malloc (sizeof (gleGC)); - - retval -> bgn_gen_texture = 0x0; - retval -> n3f_gen_texture = 0x0; - retval -> n3d_gen_texture = 0x0; - retval -> v3f_gen_texture = 0x0; - retval -> v3d_gen_texture = 0x0; - retval -> end_gen_texture = 0x0; - - retval -> save_bgn_gen_texture = 0x0; - retval -> save_n3f_gen_texture = 0x0; - retval -> save_n3d_gen_texture = 0x0; - retval -> save_v3f_gen_texture = 0x0; - retval -> save_v3d_gen_texture = 0x0; - retval -> save_end_gen_texture = 0x0; - - retval -> join_style = TUBE_JN_ANGLE | TUBE_JN_CAP | TUBE_NORM_FACET; - retval -> ncp = 0; - retval -> npoints = 0; - - retval -> num_vert = 0; - retval -> segment_number = 0; - retval -> segment_length = 0.0; - retval -> accum_seg_len = 0.0; - retval -> prev_x = 0.0; - retval -> prev_y = 0.0; - - return retval; -} - -/* ======================================================= */ - -#define segment_number (_gle_gc -> segment_number) -#define segment_length (_gle_gc -> segment_length) -#define accum_seg_len (_gle_gc -> accum_seg_len) -#define num_vert (_gle_gc -> num_vert) -#define prev_x (_gle_gc -> prev_x) -#define prev_y (_gle_gc -> prev_y) - -/* ======================================================= */ - -static double save_nx = 0.0; -static double save_ny = 0.0; -static double save_nz = 0.0; - -static void save_normal (double *v) { - save_nx = v[0]; - save_ny = v[1]; - save_nz = v[2]; -} - -/* ======================================================= */ - -static void bgn_sphere_texgen (int inext, double len) { - segment_number = inext - 1; - segment_length = len; - num_vert = 0; -} - -/* ======================================================= */ -/* - * this routine assumes that the vertex passed in has been normalized - * (i.e. is of unit length) - */ -/* ARGSUSED3 */ -static void sphere_texgen (double x, double y, double z, - int jcnt, int which_end) -{ - double theta, phi; - - /* let phi and theta range fro 0 to 1 */ - phi = 0.5 * atan2 (x, y) / M_PI; - phi += 0.5; - - theta = 1.0 - acos (z) / M_PI; - - /* if first vertex, merely record the texture coords */ - if (num_vert == 0) { - prev_x = phi; - prev_y = theta; - num_vert ++; - } else { - - /* if texture coordinates changed radically, wrap them */ - if ((prev_y - theta) > 0.6) { - theta +=1.0; - } else if ((prev_y - theta) < -0.6) { - theta -=1.0; - } /* else no-op */ - prev_y = theta; - - - /* if texture coordinates changed radically, wrap them */ - if ((prev_x - phi) > 0.6) { - phi +=1.0; - } else if ((prev_x - phi) < -0.6) { - phi -=1.0; - } /* else no-op */ - prev_x = phi; - - } - - T2F_D (phi, theta); -} - -/* ======================================================= */ -/* mappers */ - -static void vertex_sphere_texgen_v (double *v, int jcnt, int which_end) { - double x = v[0]; double y = v[1]; double z = v[2]; - double r; - - r = 1.0 / sqrt (x*x + y*y + z*z); - x *= r; - y *= r; - z *= r; - sphere_texgen (x, y, z, jcnt, which_end); -} - -/* ARGSUSED */ -static void normal_sphere_texgen_v (double *v, int jcnt, int which_end) { - sphere_texgen (save_nx, save_ny, save_nz, jcnt, which_end); -} - -static void vertex_sphere_model_v (double *v, int jcnt, int which_end) { - double x = _gle_gc->contour[jcnt][0]; - double y = _gle_gc->contour[jcnt][1]; - double z = v[2]; - double r; - - r = 1.0 / sqrt (x*x + y*y + z*z); - x *= r; - y *= r; - z *= r; - sphere_texgen (x, y, z, jcnt, which_end); -} - -/* ARGSUSED */ -static void normal_sphere_model_v (double *v, int jcnt, int which_end) { - if (!(_gle_gc -> cont_normal)) return; - sphere_texgen (_gle_gc->cont_normal[jcnt][0], - _gle_gc->cont_normal[jcnt][1], 0.0, jcnt, which_end); -} - -/* ======================================================= */ - -static void bgn_z_texgen (int inext, double len) { - - /* accumulate the previous length */ - accum_seg_len += segment_length; - - /* save current values */ - segment_number = inext - 1; - segment_length = len; - - /* reset counter on first segment */ - if (1 >= segment_number) accum_seg_len = 0.0; - - num_vert = 0; -} - -/* ======================================================= */ - -/* ARGSUSED2 */ -static void cylinder_texgen (double x, double y, double z, - int jcnt, int which_end) -{ - double phi; - - /* let phi and theta range fro 0 to 1 */ - phi = 0.5 * atan2 (x, y) / M_PI; - phi += 0.5; - - /* if first vertex, merely record the texture coords */ - if (num_vert == 0) { - prev_x = phi; - num_vert ++; - } else { - /* if texture coordinates changed radically, wrap them */ - if ((prev_x - phi) > 0.6) { - phi +=1.0; - } else if ((prev_x - phi) < -0.6) { - phi -=1.0; - } /* else no-op */ - prev_x = phi; - } - - if (FRONT == which_end) { - T2F_D (phi, accum_seg_len); - } - if (BACK == which_end) { - T2F_D (phi, accum_seg_len + segment_length); - } -} - -/* ======================================================= */ -/* mappers */ - -static void vertex_cylinder_texgen_v (double *v, int jcnt, int which_end) { - double x = v[0]; double y = v[1]; double z = v[2]; - double r; - - r = 1.0 / sqrt (x*x + y*y); - x *= r; - y *= r; - cylinder_texgen (x, y, z, jcnt, which_end); -} - -/* ARGSUSED */ -static void normal_cylinder_texgen_v (double *v, int jcnt, int which_end) { - cylinder_texgen (save_nx, save_ny, save_nz, jcnt, which_end); -} - -static void vertex_cylinder_model_v (double *v, int jcnt, int which_end) { - double x = _gle_gc->contour[jcnt][0]; - double y = _gle_gc->contour[jcnt][1]; - double z = v[2]; - double r; - - r = 1.0 / sqrt (x*x + y*y); - x *= r; - y *= r; - cylinder_texgen (x, y, z, jcnt, which_end); -} - -/* ARGSUSED */ -static void normal_cylinder_model_v (double *v, int jcnt, int which_end) { - if (!(_gle_gc -> cont_normal)) return; - cylinder_texgen (_gle_gc->cont_normal[jcnt][0], - _gle_gc->cont_normal[jcnt][1], 0.0, jcnt, which_end); -} - -/* ======================================================= */ - -/* ARGSUSED1 */ -static void flat_texgen (double x, double y, double z, - int jcnt, int which_end) -{ - if (FRONT == which_end) { - T2F_D (x, accum_seg_len); - } - if (BACK == which_end) { - T2F_D (x, accum_seg_len + segment_length); - } -} - -/* ======================================================= */ - - -static void vertex_flat_texgen_v (double *v, int jcnt, int which_end) { - flat_texgen (v[0], v[1], v[2], jcnt, which_end); -} - -/* ARGSUSED */ -static void normal_flat_texgen_v (double *v, int jcnt, int which_end) { - flat_texgen (save_nx, save_ny, save_nz, jcnt, which_end); -} - -static void vertex_flat_model_v (double *v, int jcnt, int which_end) { - flat_texgen (_gle_gc->contour[jcnt][0], - _gle_gc->contour[jcnt][1], v[2], jcnt, which_end); -} - -/* ARGSUSED */ -static void normal_flat_model_v (double *v, int jcnt, int which_end) { - if (!(_gle_gc -> cont_normal)) return; - flat_texgen (_gle_gc->cont_normal[jcnt][0], - _gle_gc->cont_normal[jcnt][1], 0.0, jcnt, which_end); -} - -/* ======================================================= */ - -void gleTextureMode (int mode) { - - INIT_GC(); - - /* enable textureing by restoring the mode */ - _gle_gc -> bgn_gen_texture = _gle_gc -> save_bgn_gen_texture; - _gle_gc -> n3f_gen_texture = _gle_gc -> save_n3f_gen_texture; - _gle_gc -> n3d_gen_texture = _gle_gc -> save_n3d_gen_texture; - _gle_gc -> v3f_gen_texture = _gle_gc -> save_v3f_gen_texture; - _gle_gc -> v3d_gen_texture = _gle_gc -> save_v3d_gen_texture; - _gle_gc -> end_gen_texture = _gle_gc -> save_end_gen_texture; - - switch (mode&GLE_TEXTURE_STYLE_MASK) { - - case GLE_TEXTURE_VERTEX_FLAT: - _gle_gc -> bgn_gen_texture = bgn_z_texgen; - _gle_gc -> v3d_gen_texture = vertex_flat_texgen_v; - _gle_gc -> n3d_gen_texture = 0x0; - break; - - case GLE_TEXTURE_NORMAL_FLAT: - _gle_gc -> bgn_gen_texture = bgn_z_texgen; - _gle_gc -> v3d_gen_texture = normal_flat_texgen_v; - _gle_gc -> n3d_gen_texture = save_normal; - break; - - case GLE_TEXTURE_VERTEX_MODEL_FLAT: - _gle_gc -> bgn_gen_texture = bgn_z_texgen; - _gle_gc -> v3d_gen_texture = vertex_flat_model_v; - _gle_gc -> n3d_gen_texture = 0x0; - break; - - case GLE_TEXTURE_NORMAL_MODEL_FLAT: - _gle_gc -> bgn_gen_texture = bgn_z_texgen; - _gle_gc -> v3d_gen_texture = normal_flat_model_v; - _gle_gc -> n3d_gen_texture = 0x0; - break; - - case GLE_TEXTURE_VERTEX_CYL: - _gle_gc -> bgn_gen_texture = bgn_z_texgen; - _gle_gc -> v3d_gen_texture = vertex_cylinder_texgen_v; - _gle_gc -> n3d_gen_texture = 0x0; - break; - - case GLE_TEXTURE_NORMAL_CYL: - _gle_gc -> bgn_gen_texture = bgn_z_texgen; - _gle_gc -> v3d_gen_texture = normal_cylinder_texgen_v; - _gle_gc -> n3d_gen_texture = save_normal; - break; - - case GLE_TEXTURE_VERTEX_MODEL_CYL: - _gle_gc -> bgn_gen_texture = bgn_z_texgen; - _gle_gc -> v3d_gen_texture = vertex_cylinder_model_v; - _gle_gc -> n3d_gen_texture = 0x0; - break; - - case GLE_TEXTURE_NORMAL_MODEL_CYL: - _gle_gc -> bgn_gen_texture = bgn_z_texgen; - _gle_gc -> v3d_gen_texture = normal_cylinder_model_v; - _gle_gc -> n3d_gen_texture = 0x0; - break; - - case GLE_TEXTURE_VERTEX_SPH: - _gle_gc -> bgn_gen_texture = bgn_sphere_texgen; - _gle_gc -> v3d_gen_texture = vertex_sphere_texgen_v; - _gle_gc -> n3d_gen_texture = 0x0; - break; - - case GLE_TEXTURE_NORMAL_SPH: - _gle_gc -> bgn_gen_texture = bgn_sphere_texgen; - _gle_gc -> v3d_gen_texture = normal_sphere_texgen_v; - _gle_gc -> n3d_gen_texture = save_normal; - break; - - case GLE_TEXTURE_VERTEX_MODEL_SPH: - _gle_gc -> bgn_gen_texture = bgn_sphere_texgen; - _gle_gc -> v3d_gen_texture = vertex_sphere_model_v; - _gle_gc -> n3d_gen_texture = 0x0; - break; - - case GLE_TEXTURE_NORMAL_MODEL_SPH: - _gle_gc -> bgn_gen_texture = bgn_sphere_texgen; - _gle_gc -> v3d_gen_texture = normal_sphere_model_v; - _gle_gc -> n3d_gen_texture = 0x0; - break; - - default: - break; - } - - /* disable texturing, and save the mode */ - if (!(mode & GLE_TEXTURE_ENABLE)) { - _gle_gc -> save_bgn_gen_texture = _gle_gc -> bgn_gen_texture; - _gle_gc -> save_n3f_gen_texture = _gle_gc -> n3f_gen_texture; - _gle_gc -> save_n3d_gen_texture = _gle_gc -> n3d_gen_texture; - _gle_gc -> save_v3f_gen_texture = _gle_gc -> v3f_gen_texture; - _gle_gc -> save_v3d_gen_texture = _gle_gc -> v3d_gen_texture; - _gle_gc -> save_end_gen_texture = _gle_gc -> end_gen_texture; - - _gle_gc -> bgn_gen_texture = 0x0; - _gle_gc -> n3f_gen_texture = 0x0; - _gle_gc -> n3d_gen_texture = 0x0; - _gle_gc -> v3f_gen_texture = 0x0; - _gle_gc -> v3d_gen_texture = 0x0; - _gle_gc -> end_gen_texture = 0x0; - } -} - -/* ================== END OF FILE ========================= */ diff --git a/lib/glut-3.7.6/lib/gle/tube_gc.h b/lib/glut-3.7.6/lib/gle/tube_gc.h deleted file mode 100644 index a9fe3107f..000000000 --- a/lib/glut-3.7.6/lib/gle/tube_gc.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - * tube_gc.h - * - * FUNCTION: - * This file allows for easy changes to changes in the way the extrusion - * library handles state info (i.e. context). - * - * HISTORY: - * Linas Vepstas --- February 1993 - * Added auto texture coord generation hacks, Linas April 1994 - */ - -typedef float gleColor[3]; -typedef double gleTwoVec[2]; - -typedef struct { - - /* public methods */ - void (*bgn_gen_texture) (int, double); - void (*n3f_gen_texture) (float *); - void (*n3d_gen_texture) (double *); - void (*v3f_gen_texture) (float *, int, int); - void (*v3d_gen_texture) (double *, int, int); - void (*end_gen_texture) (void); - - /* protected members -- "general knowledge" stuff */ - int join_style; - - /* arguments passed into extrusion code */ - int ncp; /* number of contour points */ - gleTwoVec *contour; /* 2D contour */ - gleTwoVec *cont_normal; /* 2D contour normals */ - gleDouble *up; /* up vector */ - int npoints; /* number of points in polyline */ - gleVector *point_array; /* path */ - gleColor *color_array; /* path colors */ - gleAffine *xform_array; /* contour xforms */ - - /* private members, used by texturing code */ - int num_vert; - int segment_number; - double segment_length; - double accum_seg_len; - double prev_x; - double prev_y; - - void (*save_bgn_gen_texture) (int, double); - void (*save_n3f_gen_texture) (float *); - void (*save_n3d_gen_texture) (double *); - void (*save_v3f_gen_texture) (float *, int, int); - void (*save_v3d_gen_texture) (double *, int, int); - void (*save_end_gen_texture) (void); - -} gleGC; - -extern gleGC *_gle_gc; -extern gleGC * gleCreateGC (void); - -#define INIT_GC() {if (!_gle_gc) _gle_gc = gleCreateGC(); } -#define extrusion_join_style (_gle_gc->join_style) - -#define __TUBE_CLOSE_CONTOUR (extrusion_join_style & TUBE_CONTOUR_CLOSED) -#define __TUBE_DRAW_CAP (extrusion_join_style & TUBE_JN_CAP) -#define __TUBE_DRAW_FACET_NORMALS (extrusion_join_style & TUBE_NORM_FACET) -#define __TUBE_DRAW_PATH_EDGE_NORMALS (extrusion_join_style & TUBE_NORM_PATH_EDGE) - -#define __TUBE_STYLE (extrusion_join_style & TUBE_JN_MASK) -#define __TUBE_RAW_JOIN (extrusion_join_style & TUBE_JN_RAW) -#define __TUBE_CUT_JOIN (extrusion_join_style & TUBE_JN_CUT) -#define __TUBE_ANGLE_JOIN (extrusion_join_style & TUBE_JN_ANGLE) -#define __TUBE_ROUND_JOIN (extrusion_join_style & TUBE_JN_ROUND) - -/* ======================= END OF FILE ========================== */ diff --git a/lib/glut-3.7.6/lib/gle/urotate.c b/lib/glut-3.7.6/lib/gle/urotate.c deleted file mode 100644 index 5ce9d9f05..000000000 --- a/lib/glut-3.7.6/lib/gle/urotate.c +++ /dev/null @@ -1,217 +0,0 @@ - -/* - * MODULE: urotate.c - * - * FUNCTION: - * This module contains three different routines that compute rotation - * matricies and return these to user. - * Detailed description is provided below. - * - * HISTORY: - * Developed & written, Linas Vepstas, Septmeber 1991 - * double precision port, March 1993 - * - * DETAILED DESCRIPTION: - * This module contains three routines: - * -------------------------------------------------------------------- - * - * void urot_about_axis (float m[4][4], --- returned - * float angle, --- input - * float axis[3]) --- input - * Computes a rotation matrix. - * The rotation is around the the direction specified by the argument - * argument axis[3]. User may specify vector which is not of unit - * length. The angle of rotation is specified in degrees, and is in the - * right-handed direction. - * - * void rot_about_axis (float angle, --- input - * float axis[3]) --- input - * Same as above routine, except that the matrix is multiplied into the - * GL matrix stack. - * - * -------------------------------------------------------------------- - * - * void urot_axis (float m[4][4], --- returned - * float omega, --- input - * float axis[3]) --- input - * Same as urot_about_axis(), but angle specified in radians. - * It is assumed that the argument axis[3] is a vector of unit length. - * If it is not of unit length, the returned matrix will not be correct. - * - * void rot_axis (float omega, --- input - * float axis[3]) --- input - * Same as above routine, except that the matrix is multiplied into the - * GL matrix stack. - * - * -------------------------------------------------------------------- - * - * void urot_omega (float m[4][4], --- returned - * float omega[3]) --- input - * same as urot_axis(), but the angle is taken as the length of the - * vector omega[3] - * - * void rot_omega (float omega[3]) --- input - * Same as above routine, except that the matrix is multiplied into the - * GL matrix stack. - * - * -------------------------------------------------------------------- - */ - -#include -#include "gutil.h" - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -/* ========================================================== */ - -#ifdef __GUTIL_DOUBLE -void urot_axis_d (double m[4][4], /* returned */ - double omega, /* input */ - double axis[3]) /* input */ -#else -void urot_axis_f (float m[4][4], /* returned */ - float omega, /* input */ - float axis[3]) /* input */ -#endif -{ - double s, c, ssq, csq, cts; - double tmp; - - /* - * The formula coded up below can be derived by using the - * homomorphism between SU(2) and O(3), namely, that the - * 3x3 rotation matrix R is given by - * t.R.v = S(-1) t.v S - * where - * t are the Pauli matrices (similar to Quaternions, easier to use) - * v is an arbitrary 3-vector - * and S is a 2x2 hermitian matrix: - * S = exp ( i omega t.axis / 2 ) - * - * (Also, remember that computer graphics uses the transpose of R). - * - * The Pauli matrices are: - * - * tx = (0 1) ty = (0 -i) tz = (1 0) - * (1 0) (i 0) (0 -1) - * - * Note that no error checking is done -- if the axis vector is not - * of unit length, you'll get strange results. - */ - - tmp = (double) omega / 2.0; - s = sin (tmp); - c = cos (tmp); - - ssq = s*s; - csq = c*c; - - m[0][0] = m[1][1] = m[2][2] = csq - ssq; - - ssq *= 2.0; - - /* on-diagonal entries */ - m[0][0] += ssq * axis[0]*axis[0]; - m[1][1] += ssq * axis[1]*axis[1]; - m[2][2] += ssq * axis[2]*axis[2]; - - /* off-diagonal entries */ - m[0][1] = m[1][0] = axis[0] * axis[1] * ssq; - m[1][2] = m[2][1] = axis[1] * axis[2] * ssq; - m[2][0] = m[0][2] = axis[2] * axis[0] * ssq; - - cts = 2.0 * c * s; - - tmp = cts * axis[2]; - m[0][1] += tmp; - m[1][0] -= tmp; - - tmp = cts * axis[0]; - m[1][2] += tmp; - m[2][1] -= tmp; - - tmp = cts * axis[1]; - m[2][0] += tmp; - m[0][2] -= tmp; - - /* homogeneous entries */ - m[0][3] = m[1][3] = m[2][3] = m[3][2] = m[3][1] = m[3][0] = 0.0; - m[3][3] = 1.0; - - -} - -/* ========================================================== */ - -#ifdef __GUTIL_DOUBLE -void urot_about_axis_d (double m[4][4], /* returned */ - double angle, /* input */ - double axis[3]) /* input */ -#else -void urot_about_axis_f (float m[4][4], /* returned */ - float angle, /* input */ - float axis[3]) /* input */ -#endif -{ - gutDouble len, ax[3]; - - angle *= M_PI/180.0; /* convert to radians */ - - /* renormalize axis vector, if needed */ - len = axis[0]*axis[0] + axis[1]*axis[1] + axis[2]*axis[2]; - - /* we can save some machine instructions by normalizing only - * if needed. The compiler should be able to schedule in the - * if test "for free". */ - if (len != 1.0) { - len = (gutDouble) (1.0 / sqrt ((double) len)); - ax[0] = axis[0] * len; - ax[1] = axis[1] * len; - ax[2] = axis[2] * len; -#ifdef __GUTIL_DOUBLE - urot_axis_d (m, angle, ax); -#else - urot_axis_f (m, angle, ax); -#endif - } else { -#ifdef __GUTIL_DOUBLE - urot_axis_d (m, angle, axis); -#else - urot_axis_f (m, angle, axis); -#endif - } -} - -/* ========================================================== */ - -#ifdef __GUTIL_DOUBLE -void urot_omega_d (double m[4][4], /* returned */ - double axis[3]) /* input */ -#else -void urot_omega_f (float m[4][4], /* returned */ - float axis[3]) /* input */ -#endif -{ - gutDouble len, ax[3]; - - /* normalize axis vector */ - len = axis[0]*axis[0] + axis[1]*axis[1] + axis[2]*axis[2]; - - len = (gutDouble) (1.0 / sqrt ((double) len)); - ax[0] = axis[0] * len; - ax[1] = axis[1] * len; - ax[2] = axis[2] * len; - - /* the amount of rotation is equal to the length, in radians */ -#ifdef __GUTIL_DOUBLE - urot_axis_d (m, len, ax); -#else - urot_axis_f (m, len, ax); -#endif - -} - -/* ======================= END OF FILE ========================== */ diff --git a/lib/glut-3.7.6/lib/gle/view.c b/lib/glut-3.7.6/lib/gle/view.c deleted file mode 100644 index dcc34799f..000000000 --- a/lib/glut-3.7.6/lib/gle/view.c +++ /dev/null @@ -1,308 +0,0 @@ - -/* - * MODULE Name: view.c - * - * FUNCTION: - * This module provides two different routines that compute and return - * viewing matrices. Both routines take a direction and an up vector, - * and return a matrix that transforms the direction to the z-axis, and - * the up-vector to the y-axis. - * - * HISTORY: - * written by Linas Vepstas August 1991 - * Added double precision interface, March 1993, Linas - */ - -#include -#include "rot.h" -#include "gutil.h" -#include "vvector.h" - -/* ============================================================ */ -/* - * The uviewdirection subroutine computes and returns a 4x4 rotation - * matrix that puts the negative z axis along the direction v21 and - * puts the y axis along the up vector. - * - * Note that this code is fairly tolerant of "weird" paramters. - * It normalizes when necessary, it does nothing when vectors are of - * zero length, or are co-linear. This code shouldn't croak, no matter - * what the user sends in as arguments. - */ -#ifdef __GUTIL_DOUBLE -void uview_direction_d (double m[4][4], /* returned */ - double v21[3], /* input */ - double up[3]) /* input */ -#else -void uview_direction_f (float m[4][4], /* returned */ - float v21[3], /* input */ - float up[3]) /* input */ -#endif -{ - double amat[4][4]; - double bmat[4][4]; - double cmat[4][4]; - double v_hat_21[3]; - double v_xy[3]; - double sine, cosine; - double len; - double up_proj[3]; - double tmp[3]; - - /* find the unit vector that points in the v21 direction */ - VEC_COPY (v_hat_21, v21); - VEC_LENGTH (len, v_hat_21); - if (len != 0.0) { - len = 1.0 / len; - VEC_SCALE (v_hat_21, len, v_hat_21); - - /* rotate z in the xz-plane until same latitude */ - sine = sqrt ( 1.0 - v_hat_21[2] * v_hat_21[2]); - ROTY_CS (amat, (-v_hat_21[2]), (-sine)); - - } else { - - /* error condition: zero length vecotr passed in -- do nothing */ - IDENTIFY_MATRIX_4X4 (amat); - } - - - /* project v21 onto the xy plane */ - v_xy[0] = v21[0]; - v_xy[1] = v21[1]; - v_xy[2] = 0.0; - VEC_LENGTH (len, v_xy); - - /* rotate in the x-y plane until v21 lies on z axis --- - * but of course, if its already there, do nothing */ - if (len != 0.0) { - - /* want xy projection to be unit vector, so that sines/cosines pop out */ - len = 1.0 / len; - VEC_SCALE (v_xy, len, v_xy); - - /* rotate the projection of v21 in the xy-plane over to the x axis */ - ROTZ_CS (bmat, v_xy[0], v_xy[1]); - - /* concatenate these together */ - MATRIX_PRODUCT_4X4 (cmat, amat, bmat); - - } else { - - /* no-op -- vector is already in correct position */ - COPY_MATRIX_4X4 (cmat, amat); - } - - /* up vector really should be perpendicular to the x-form direction -- - * Use up a couple of cycles, and make sure it is, - * just in case the user blew it. - */ - VEC_PERP (up_proj, up, v_hat_21); - VEC_LENGTH (len, up_proj); - if (len != 0.0) { - - /* normalize the vector */ - len = 1.0/len; - VEC_SCALE (up_proj, len, up_proj); - - /* compare the up-vector to the y-axis to get the cosine of the angle */ - tmp [0] = cmat [1][0]; - tmp [1] = cmat [1][1]; - tmp [2] = cmat [1][2]; - VEC_DOT_PRODUCT (cosine, tmp, up_proj); - - /* compare the up-vector to the x-axis to get the sine of the angle */ - tmp [0] = cmat [0][0]; - tmp [1] = cmat [0][1]; - tmp [2] = cmat [0][2]; - VEC_DOT_PRODUCT (sine, tmp, up_proj); - - /* rotate to align the up vector with the y-axis */ - ROTZ_CS (amat, cosine, -sine); - - /* This xform, although computed last, acts first */ - MATRIX_PRODUCT_4X4 (m, amat, cmat); - - } else { - - /* error condition: up vector is indeterminate (zero length) - * -- do nothing */ - COPY_MATRIX_4X4 (m, cmat); - } -} - -/* ============================================================ */ -#ifdef __STALE_CODE -/* - * The uview_dire subroutine computes and returns a 4x4 rotation - * matrix that puts the negative z axis along the direction v21 and - * puts the y axis along the up vector. - * - * It computes exactly the same matrix as the code above - * (uview_direction), but with an entirely different (and slower) - * algorithm. - * - * Note that the code below is slightly less robust than that above -- - * it may croak if the supplied vectors are of zero length, or are - * parallel to each other ... - */ -void uview_dire (float m[4][4], /* returned */ - float v21[3], /* input */ - float up[3]) /* input */ -{ - double theta; - float v_hat_21 [3]; - float z_hat [3]; - float v_cross_z [3]; - float u[3]; - float y_hat [3]; - float u_cross_y [3]; - double cosine; - float zmat [4][4]; - float upmat[4][4]; - float dot; - - /* perform rotation to z-axis only if not already - * pointing down z */ - if ((v21[0] != 0.0 ) || (v21[1] != 0.0)) { - - /* find the unit vector that points in the v21 direction */ - VEC_COPY (v_hat_21, v21); - VEC_NORMALIZE (v_hat_21); - - /* cosine theta equals v_hat dot z_hat */ - cosine = - v_hat_21 [2]; - theta = - acos (cosine); - - /* Take cros product with z -- we need this, because we will rotate - * about this axis */ - z_hat[0] = 0.0; - z_hat[1] = 0.0; - z_hat[2] = -1.0; - - VEC_CROSS_PRODUCT (v_cross_z, v_hat_21, z_hat); - VEC_NORMALIZE (v_cross_z); - - /* compute rotation matrix that takes -z axis to the v21 axis */ - urot_axis (zmat, (float) theta, v_cross_z); - - } else { - - IDENTIFY_MATRIX_4X4 (zmat); - if (v21[2] > 0.0) { - /* if its pointing down the positive z-axis, flip it, so that - * we point down negative z-axis. We flip x so that the partiy - * isn't destroyed (looks like a rotation) - */ - zmat[0][0] = -1.0; - zmat[2][2] = -1.0; - } - } - - /* --------------------- */ - /* OK, now compute the part that takes the y-axis to the up vector */ - - VEC_COPY (u, up); - /* the rotation blows up, if the up vector is not perpendicular to - * the v21 vector. Let us make sure that this is so. */ - VEC_PERP (u, u, v_hat_21); - - /* need to run the y axis through above x-form, to see where it went */ - y_hat[0] = zmat [1][0]; - y_hat[1] = zmat [1][1]; - y_hat[2] = zmat [1][2]; - - /* perform rotation to up-axis only if not already - * pointing along y axis */ - VEC_DOT_PRODUCT (dot, y_hat, u); - if ((-1.0 < dot) && (dot < 1.0)) { - - /* make sure that up really is a unit vector */ - VEC_NORMALIZE (u); - /* cosine phi equals y_hat dot up_vec */ - VEC_DOT_PRODUCT (cosine, u, y_hat); - theta = - acos (cosine); - - /* Take cross product with y */ - VEC_CROSS_PRODUCT (u_cross_y, u, y_hat); - VEC_NORMALIZE (u_cross_y); - - /* As a matter of fact, u_cross_y points either in the v21 direction, - * or in the minus v21 direction. In either case, we needed to compute - * it, because the the arccosine function returns values only for - * 0 to 180 degree, not 0 to 360, which is what we need. The - * cross-product helps us make up for this. - */ - /* rotate about the NEW z axis (i.e. v21) by the cosine */ - urot_axis (upmat, (float) theta, u_cross_y); - - } else { - - IDENTIFY_MATRIX_4X4 (upmat); - if (dot == -1.0) { - /* if its pointing along the negative y-axis, flip it, so that - * we point along the positive y-axis. We flip x so that the partiy - * isn't destroyed (looks like a rotation) - */ - upmat[0][0] = -1.0; - upmat[1][1] = -1.0; - } - } - - MATRIX_PRODUCT_4X4 (m, zmat, upmat); - -} -#endif /* __STALE_CODE */ - -/* ============================================================ */ -/* - * The uviewpoint subroutine computes and returns a 4x4 matrix that - * translates the origen to the point v1, puts the negative z axis - * along the direction v21==v2-v1, and puts the y axis along the up - * vector. - */ -#ifdef __GUTIL_DOUBLE -void uviewpoint_d (double m[4][4], /* returned */ - double v1[3], /* input */ - double v2[3], /* input */ - double up[3]) /* input */ -#else -void uviewpoint_f (float m[4][4], /* returned */ - float v1[3], /* input */ - float v2[3], /* input */ - float up[3]) /* input */ -#endif -{ -#ifdef __GUTIL_DOUBLE - double v_hat_21 [3]; - double trans_mat[4][4]; - double rot_mat[4][4]; -#else - float v_hat_21 [3]; - float trans_mat[4][4]; - float rot_mat[4][4]; -#endif - - /* find the vector that points in the v21 direction */ - VEC_DIFF (v_hat_21, v2, v1); - - /* compute rotation matrix that takes -z axis to the v21 axis, - * and y to the up dierction */ -#ifdef __GUTIL_DOUBLE - uview_direction_d (rot_mat, v_hat_21, up); -#else - uview_direction_f (rot_mat, v_hat_21, up); -#endif - - /* build matrix that translates the origin to v1 */ - IDENTIFY_MATRIX_4X4 (trans_mat); - trans_mat[3][0] = v1[0]; - trans_mat[3][1] = v1[1]; - trans_mat[3][2] = v1[2]; - - /* concatenate the matrices together */ - MATRIX_PRODUCT_4X4 (m, rot_mat, trans_mat); - -} - -/* ================== END OF FILE ============================ */ diff --git a/lib/glut-3.7.6/lib/gle/vvector.h b/lib/glut-3.7.6/lib/gle/vvector.h deleted file mode 100644 index 266b36e1a..000000000 --- a/lib/glut-3.7.6/lib/gle/vvector.h +++ /dev/null @@ -1,1339 +0,0 @@ - -/* - * vvector.h - * - * FUNCTION: - * This file contains a number of utilities useful for handling - * 3D vectors - * - * HISTORY: - * Written by Linas Vepstas, August 1991 - * Added 2D code, March 1993 - * Added Outer products, C++ proofed, Linas Vepstas October 1993 - */ - -#ifndef __GUTIL_VECTOR_H__ -#define __GUTIL_VECTOR_H__ - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - - -#include -#include "port.h" - -/* ========================================================== */ -/* Zero out a 2D vector */ - -#define VEC_ZERO_2(a) \ -{ \ - (a)[0] = (a)[1] = 0.0; \ -} - -/* ========================================================== */ -/* Zero out a 3D vector */ - -#define VEC_ZERO(a) \ -{ \ - (a)[0] = (a)[1] = (a)[2] = 0.0; \ -} - -/* ========================================================== */ -/* Zero out a 4D vector */ - -#define VEC_ZERO_4(a) \ -{ \ - (a)[0] = (a)[1] = (a)[2] = (a)[3] = 0.0; \ -} - -/* ========================================================== */ -/* Vector copy */ - -#define VEC_COPY_2(b,a) \ -{ \ - (b)[0] = (a)[0]; \ - (b)[1] = (a)[1]; \ -} - -/* ========================================================== */ -/* Copy 3D vector */ - -#define VEC_COPY(b,a) \ -{ \ - (b)[0] = (a)[0]; \ - (b)[1] = (a)[1]; \ - (b)[2] = (a)[2]; \ -} - -/* ========================================================== */ -/* Copy 4D vector */ - -#define VEC_COPY_4(b,a) \ -{ \ - (b)[0] = (a)[0]; \ - (b)[1] = (a)[1]; \ - (b)[2] = (a)[2]; \ - (b)[3] = (a)[3]; \ -} - -/* ========================================================== */ -/* Vector difference */ - -#define VEC_DIFF_2(v21,v2,v1) \ -{ \ - (v21)[0] = (v2)[0] - (v1)[0]; \ - (v21)[1] = (v2)[1] - (v1)[1]; \ -} - -/* ========================================================== */ -/* Vector difference */ - -#define VEC_DIFF(v21,v2,v1) \ -{ \ - (v21)[0] = (v2)[0] - (v1)[0]; \ - (v21)[1] = (v2)[1] - (v1)[1]; \ - (v21)[2] = (v2)[2] - (v1)[2]; \ -} - -/* ========================================================== */ -/* Vector difference */ - -#define VEC_DIFF_4(v21,v2,v1) \ -{ \ - (v21)[0] = (v2)[0] - (v1)[0]; \ - (v21)[1] = (v2)[1] - (v1)[1]; \ - (v21)[2] = (v2)[2] - (v1)[2]; \ - (v21)[3] = (v2)[3] - (v1)[3]; \ -} - -/* ========================================================== */ -/* Vector sum */ - -#define VEC_SUM_2(v21,v2,v1) \ -{ \ - (v21)[0] = (v2)[0] + (v1)[0]; \ - (v21)[1] = (v2)[1] + (v1)[1]; \ -} - -/* ========================================================== */ -/* Vector sum */ - -#define VEC_SUM(v21,v2,v1) \ -{ \ - (v21)[0] = (v2)[0] + (v1)[0]; \ - (v21)[1] = (v2)[1] + (v1)[1]; \ - (v21)[2] = (v2)[2] + (v1)[2]; \ -} - -/* ========================================================== */ -/* Vector sum */ - -#define VEC_SUM_4(v21,v2,v1) \ -{ \ - (v21)[0] = (v2)[0] + (v1)[0]; \ - (v21)[1] = (v2)[1] + (v1)[1]; \ - (v21)[2] = (v2)[2] + (v1)[2]; \ - (v21)[3] = (v2)[3] + (v1)[3]; \ -} - -/* ========================================================== */ -/* scalar times vector */ - -#define VEC_SCALE_2(c,a,b) \ -{ \ - (c)[0] = (a)*(b)[0]; \ - (c)[1] = (a)*(b)[1]; \ -} - -/* ========================================================== */ -/* scalar times vector */ - -#define VEC_SCALE(c,a,b) \ -{ \ - (c)[0] = (a)*(b)[0]; \ - (c)[1] = (a)*(b)[1]; \ - (c)[2] = (a)*(b)[2]; \ -} - -/* ========================================================== */ -/* scalar times vector */ - -#define VEC_SCALE_4(c,a,b) \ -{ \ - (c)[0] = (a)*(b)[0]; \ - (c)[1] = (a)*(b)[1]; \ - (c)[2] = (a)*(b)[2]; \ - (c)[3] = (a)*(b)[3]; \ -} - -/* ========================================================== */ -/* accumulate scaled vector */ - -#define VEC_ACCUM_2(c,a,b) \ -{ \ - (c)[0] += (a)*(b)[0]; \ - (c)[1] += (a)*(b)[1]; \ -} - -/* ========================================================== */ -/* accumulate scaled vector */ - -#define VEC_ACCUM(c,a,b) \ -{ \ - (c)[0] += (a)*(b)[0]; \ - (c)[1] += (a)*(b)[1]; \ - (c)[2] += (a)*(b)[2]; \ -} - -/* ========================================================== */ -/* accumulate scaled vector */ - -#define VEC_ACCUM_4(c,a,b) \ -{ \ - (c)[0] += (a)*(b)[0]; \ - (c)[1] += (a)*(b)[1]; \ - (c)[2] += (a)*(b)[2]; \ - (c)[3] += (a)*(b)[3]; \ -} - -/* ========================================================== */ -/* Vector dot product */ - -#define VEC_DOT_PRODUCT_2(c,a,b) \ -{ \ - c = (a)[0]*(b)[0] + (a)[1]*(b)[1]; \ -} - -/* ========================================================== */ -/* Vector dot product */ - -#define VEC_DOT_PRODUCT(c,a,b) \ -{ \ - c = (a)[0]*(b)[0] + (a)[1]*(b)[1] + (a)[2]*(b)[2]; \ -} - -/* ========================================================== */ -/* Vector dot product */ - -#define VEC_DOT_PRODUCT_4(c,a,b) \ -{ \ - c = (a)[0]*(b)[0] + (a)[1]*(b)[1] + (a)[2]*(b)[2] + (a)[3]*(b)[3] ; \ -} - -/* ========================================================== */ -/* vector impact parameter (squared) */ - -#define VEC_IMPACT_SQ(bsq,direction,position) \ -{ \ - gleDouble len, llel; \ - VEC_DOT_PRODUCT (len, position, position); \ - VEC_DOT_PRODUCT (llel, direction, position); \ - bsq = len - llel*llel; \ -} - -/* ========================================================== */ -/* vector impact parameter */ - -#define VEC_IMPACT(bsq,direction,position) \ -{ \ - VEC_IMPACT_SQ(bsq,direction,position); \ - bsq = sqrt (bsq); \ -} - -/* ========================================================== */ -/* Vector length */ - -#define VEC_LENGTH_2(len,a) \ -{ \ - len = a[0]*a[0] + a[1]*a[1]; \ - len = sqrt (len); \ -} - -/* ========================================================== */ -/* Vector length */ - -#define VEC_LENGTH(len,a) \ -{ \ - len = (a)[0]*(a)[0] + (a)[1]*(a)[1]; \ - len += (a)[2]*(a)[2]; \ - len = sqrt (len); \ -} - -/* ========================================================== */ -/* Vector length */ - -#define VEC_LENGTH_4(len,a) \ -{ \ - len = (a)[0]*(a)[0] + (a)[1]*(a)[1]; \ - len += (a)[2]*(a)[2]; \ - len += (a)[3] * (a)[3]; \ - len = sqrt (len); \ -} - -/* ========================================================== */ -/* distance between two points */ - -#define VEC_DISTANCE(len,va,vb) \ -{ \ - gleDouble tmp[4]; \ - VEC_DIFF (tmp, vb, va); \ - VEC_LENGTH (len, tmp); \ -} - -/* ========================================================== */ -/* Vector length */ - -#define VEC_CONJUGATE_LENGTH(len,a) \ -{ \ - len = 1.0 - a[0]*a[0] - a[1]*a[1] - a[2]*a[2];\ - len = sqrt (len); \ -} - -/* ========================================================== */ -/* Vector length */ - -#define VEC_NORMALIZE(a) \ -{ \ - double len; \ - VEC_LENGTH (len,a); \ - if (len != 0.0) { \ - len = 1.0 / len; \ - a[0] *= len; \ - a[1] *= len; \ - a[2] *= len; \ - } \ -} - -/* ========================================================== */ -/* Vector length */ - -#define VEC_RENORMALIZE(a,newlen) \ -{ \ - double len; \ - VEC_LENGTH (len,a); \ - if (len != 0.0) { \ - len = newlen / len; \ - a[0] *= len; \ - a[1] *= len; \ - a[2] *= len; \ - } \ -} - -/* ========================================================== */ -/* 3D Vector cross product yeilding vector */ - -#define VEC_CROSS_PRODUCT(c,a,b) \ -{ \ - c[0] = (a)[1] * (b)[2] - (a)[2] * (b)[1]; \ - c[1] = (a)[2] * (b)[0] - (a)[0] * (b)[2]; \ - c[2] = (a)[0] * (b)[1] - (a)[1] * (b)[0]; \ -} - -/* ========================================================== */ -/* Vector perp -- assumes that n is of unit length - * accepts vector v, subtracts out any component parallel to n */ - -#define VEC_PERP(vp,v,n) \ -{ \ - double dot; \ - \ - VEC_DOT_PRODUCT (dot, v, n); \ - vp[0] = (v)[0] - (dot) * (n)[0]; \ - vp[1] = (v)[1] - (dot) * (n)[1]; \ - vp[2] = (v)[2] - (dot) * (n)[2]; \ -} - -/* ========================================================== */ -/* Vector parallel -- assumes that n is of unit length - * accepts vector v, subtracts out any component perpendicular to n */ - -#define VEC_PARALLEL(vp,v,n) \ -{ \ - double dot; \ - \ - VEC_DOT_PRODUCT (dot, v, n); \ - vp[0] = (dot) * (n)[0]; \ - vp[1] = (dot) * (n)[1]; \ - vp[2] = (dot) * (n)[2]; \ -} - -/* ========================================================== */ -/* Vector reflection -- assumes n is of unit length */ -/* Takes vector v, reflects it against reflector n, and returns vr */ - -#define VEC_REFLECT(vr,v,n) \ -{ \ - double dot; \ - \ - VEC_DOT_PRODUCT (dot, v, n); \ - vr[0] = (v)[0] - 2.0 * (dot) * (n)[0]; \ - vr[1] = (v)[1] - 2.0 * (dot) * (n)[1]; \ - vr[2] = (v)[2] - 2.0 * (dot) * (n)[2]; \ -} - -/* ========================================================== */ -/* Vector blending */ -/* Takes two vectors a, b, blends them together */ - -#define VEC_BLEND(vr,sa,a,sb,b) \ -{ \ - \ - vr[0] = (sa) * (a)[0] + (sb) * (b)[0]; \ - vr[1] = (sa) * (a)[1] + (sb) * (b)[1]; \ - vr[2] = (sa) * (a)[2] + (sb) * (b)[2]; \ -} - -/* ========================================================== */ -/* Vector print */ - -#define VEC_PRINT_2(a) \ -{ \ - double len; \ - VEC_LENGTH_2 (len, a); \ - printf (" a is %f %f length of a is %f \n", a[0], a[1], len); \ -} - -/* ========================================================== */ -/* Vector print */ - -#define VEC_PRINT(a) \ -{ \ - double len; \ - VEC_LENGTH (len, (a)); \ - printf (" a is %f %f %f length of a is %f \n", (a)[0], (a)[1], (a)[2], len); \ -} - -/* ========================================================== */ -/* Vector print */ - -#define VEC_PRINT_4(a) \ -{ \ - double len; \ - VEC_LENGTH_4 (len, (a)); \ - printf (" a is %f %f %f %f length of a is %f \n", \ - (a)[0], (a)[1], (a)[2], (a)[3], len); \ -} - -/* ========================================================== */ -/* print matrix */ - -#define MAT_PRINT_4X4(mmm) { \ - int i,j; \ - printf ("matrix mmm is \n"); \ - if (mmm == NULL) { \ - printf (" Null \n"); \ - } else { \ - for (i=0; i<4; i++) { \ - for (j=0; j<4; j++) { \ - printf ("%f ", mmm[i][j]); \ - } \ - printf (" \n"); \ - } \ - } \ -} - -/* ========================================================== */ -/* print matrix */ - -#define MAT_PRINT_3X3(mmm) { \ - int i,j; \ - printf ("matrix mmm is \n"); \ - if (mmm == NULL) { \ - printf (" Null \n"); \ - } else { \ - for (i=0; i<3; i++) { \ - for (j=0; j<3; j++) { \ - printf ("%f ", mmm[i][j]); \ - } \ - printf (" \n"); \ - } \ - } \ -} - -/* ========================================================== */ -/* print matrix */ - -#define MAT_PRINT_2X3(mmm) { \ - int i,j; \ - printf ("matrix mmm is \n"); \ - if (mmm == NULL) { \ - printf (" Null \n"); \ - } else { \ - for (i=0; i<2; i++) { \ - for (j=0; j<3; j++) { \ - printf ("%f ", mmm[i][j]); \ - } \ - printf (" \n"); \ - } \ - } \ -} - -/* ========================================================== */ -/* initialize matrix */ - -#define IDENTIFY_MATRIX_3X3(m) \ -{ \ - m[0][0] = 1.0; \ - m[0][1] = 0.0; \ - m[0][2] = 0.0; \ - \ - m[1][0] = 0.0; \ - m[1][1] = 1.0; \ - m[1][2] = 0.0; \ - \ - m[2][0] = 0.0; \ - m[2][1] = 0.0; \ - m[2][2] = 1.0; \ -} - -/* ========================================================== */ -/* initialize matrix */ - -#define IDENTIFY_MATRIX_4X4(m) \ -{ \ - m[0][0] = 1.0; \ - m[0][1] = 0.0; \ - m[0][2] = 0.0; \ - m[0][3] = 0.0; \ - \ - m[1][0] = 0.0; \ - m[1][1] = 1.0; \ - m[1][2] = 0.0; \ - m[1][3] = 0.0; \ - \ - m[2][0] = 0.0; \ - m[2][1] = 0.0; \ - m[2][2] = 1.0; \ - m[2][3] = 0.0; \ - \ - m[3][0] = 0.0; \ - m[3][1] = 0.0; \ - m[3][2] = 0.0; \ - m[3][3] = 1.0; \ -} - -/* ========================================================== */ -/* matrix copy */ - -#define COPY_MATRIX_2X2(b,a) \ -{ \ - b[0][0] = a[0][0]; \ - b[0][1] = a[0][1]; \ - \ - b[1][0] = a[1][0]; \ - b[1][1] = a[1][1]; \ - \ -} - -/* ========================================================== */ -/* matrix copy */ - -#define COPY_MATRIX_2X3(b,a) \ -{ \ - b[0][0] = a[0][0]; \ - b[0][1] = a[0][1]; \ - b[0][2] = a[0][2]; \ - \ - b[1][0] = a[1][0]; \ - b[1][1] = a[1][1]; \ - b[1][2] = a[1][2]; \ -} - -/* ========================================================== */ -/* matrix copy */ - -#define COPY_MATRIX_3X3(b,a) \ -{ \ - b[0][0] = a[0][0]; \ - b[0][1] = a[0][1]; \ - b[0][2] = a[0][2]; \ - \ - b[1][0] = a[1][0]; \ - b[1][1] = a[1][1]; \ - b[1][2] = a[1][2]; \ - \ - b[2][0] = a[2][0]; \ - b[2][1] = a[2][1]; \ - b[2][2] = a[2][2]; \ -} - -/* ========================================================== */ -/* matrix copy */ - -#define COPY_MATRIX_4X4(b,a) \ -{ \ - b[0][0] = a[0][0]; \ - b[0][1] = a[0][1]; \ - b[0][2] = a[0][2]; \ - b[0][3] = a[0][3]; \ - \ - b[1][0] = a[1][0]; \ - b[1][1] = a[1][1]; \ - b[1][2] = a[1][2]; \ - b[1][3] = a[1][3]; \ - \ - b[2][0] = a[2][0]; \ - b[2][1] = a[2][1]; \ - b[2][2] = a[2][2]; \ - b[2][3] = a[2][3]; \ - \ - b[3][0] = a[3][0]; \ - b[3][1] = a[3][1]; \ - b[3][2] = a[3][2]; \ - b[3][3] = a[3][3]; \ -} - -/* ========================================================== */ -/* matrix transpose */ - -#define TRANSPOSE_MATRIX_2X2(b,a) \ -{ \ - b[0][0] = a[0][0]; \ - b[0][1] = a[1][0]; \ - \ - b[1][0] = a[0][1]; \ - b[1][1] = a[1][1]; \ -} - -/* ========================================================== */ -/* matrix transpose */ - -#define TRANSPOSE_MATRIX_3X3(b,a) \ -{ \ - b[0][0] = a[0][0]; \ - b[0][1] = a[1][0]; \ - b[0][2] = a[2][0]; \ - \ - b[1][0] = a[0][1]; \ - b[1][1] = a[1][1]; \ - b[1][2] = a[2][1]; \ - \ - b[2][0] = a[0][2]; \ - b[2][1] = a[1][2]; \ - b[2][2] = a[2][2]; \ -} - -/* ========================================================== */ -/* matrix transpose */ - -#define TRANSPOSE_MATRIX_4X4(b,a) \ -{ \ - b[0][0] = a[0][0]; \ - b[0][1] = a[1][0]; \ - b[0][2] = a[2][0]; \ - b[0][3] = a[3][0]; \ - \ - b[1][0] = a[0][1]; \ - b[1][1] = a[1][1]; \ - b[1][2] = a[2][1]; \ - b[1][3] = a[3][1]; \ - \ - b[2][0] = a[0][2]; \ - b[2][1] = a[1][2]; \ - b[2][2] = a[2][2]; \ - b[2][3] = a[3][2]; \ - \ - b[3][0] = a[0][3]; \ - b[3][1] = a[1][3]; \ - b[3][2] = a[2][3]; \ - b[3][3] = a[3][3]; \ -} - -/* ========================================================== */ -/* multiply matrix by scalar */ - -#define SCALE_MATRIX_2X2(b,s,a) \ -{ \ - b[0][0] = (s) * a[0][0]; \ - b[0][1] = (s) * a[0][1]; \ - \ - b[1][0] = (s) * a[1][0]; \ - b[1][1] = (s) * a[1][1]; \ -} - -/* ========================================================== */ -/* multiply matrix by scalar */ - -#define SCALE_MATRIX_3X3(b,s,a) \ -{ \ - b[0][0] = (s) * a[0][0]; \ - b[0][1] = (s) * a[0][1]; \ - b[0][2] = (s) * a[0][2]; \ - \ - b[1][0] = (s) * a[1][0]; \ - b[1][1] = (s) * a[1][1]; \ - b[1][2] = (s) * a[1][2]; \ - \ - b[2][0] = (s) * a[2][0]; \ - b[2][1] = (s) * a[2][1]; \ - b[2][2] = (s) * a[2][2]; \ -} - -/* ========================================================== */ -/* multiply matrix by scalar */ - -#define SCALE_MATRIX_4X4(b,s,a) \ -{ \ - b[0][0] = (s) * a[0][0]; \ - b[0][1] = (s) * a[0][1]; \ - b[0][2] = (s) * a[0][2]; \ - b[0][3] = (s) * a[0][3]; \ - \ - b[1][0] = (s) * a[1][0]; \ - b[1][1] = (s) * a[1][1]; \ - b[1][2] = (s) * a[1][2]; \ - b[1][3] = (s) * a[1][3]; \ - \ - b[2][0] = (s) * a[2][0]; \ - b[2][1] = (s) * a[2][1]; \ - b[2][2] = (s) * a[2][2]; \ - b[2][3] = (s) * a[2][3]; \ - \ - b[3][0] = s * a[3][0]; \ - b[3][1] = s * a[3][1]; \ - b[3][2] = s * a[3][2]; \ - b[3][3] = s * a[3][3]; \ -} - -/* ========================================================== */ -/* multiply matrix by scalar */ - -#define ACCUM_SCALE_MATRIX_2X2(b,s,a) \ -{ \ - b[0][0] += (s) * a[0][0]; \ - b[0][1] += (s) * a[0][1]; \ - \ - b[1][0] += (s) * a[1][0]; \ - b[1][1] += (s) * a[1][1]; \ -} - -/* +========================================================== */ -/* multiply matrix by scalar */ - -#define ACCUM_SCALE_MATRIX_3X3(b,s,a) \ -{ \ - b[0][0] += (s) * a[0][0]; \ - b[0][1] += (s) * a[0][1]; \ - b[0][2] += (s) * a[0][2]; \ - \ - b[1][0] += (s) * a[1][0]; \ - b[1][1] += (s) * a[1][1]; \ - b[1][2] += (s) * a[1][2]; \ - \ - b[2][0] += (s) * a[2][0]; \ - b[2][1] += (s) * a[2][1]; \ - b[2][2] += (s) * a[2][2]; \ -} - -/* +========================================================== */ -/* multiply matrix by scalar */ - -#define ACCUM_SCALE_MATRIX_4X4(b,s,a) \ -{ \ - b[0][0] += (s) * a[0][0]; \ - b[0][1] += (s) * a[0][1]; \ - b[0][2] += (s) * a[0][2]; \ - b[0][3] += (s) * a[0][3]; \ - \ - b[1][0] += (s) * a[1][0]; \ - b[1][1] += (s) * a[1][1]; \ - b[1][2] += (s) * a[1][2]; \ - b[1][3] += (s) * a[1][3]; \ - \ - b[2][0] += (s) * a[2][0]; \ - b[2][1] += (s) * a[2][1]; \ - b[2][2] += (s) * a[2][2]; \ - b[2][3] += (s) * a[2][3]; \ - \ - b[3][0] += (s) * a[3][0]; \ - b[3][1] += (s) * a[3][1]; \ - b[3][2] += (s) * a[3][2]; \ - b[3][3] += (s) * a[3][3]; \ -} - -/* +========================================================== */ -/* matrix product */ -/* c[x][y] = a[x][0]*b[0][y]+a[x][1]*b[1][y]+a[x][2]*b[2][y]+a[x][3]*b[3][y];*/ - -#define MATRIX_PRODUCT_2X2(c,a,b) \ -{ \ - c[0][0] = a[0][0]*b[0][0]+a[0][1]*b[1][0]; \ - c[0][1] = a[0][0]*b[0][1]+a[0][1]*b[1][1]; \ - \ - c[1][0] = a[1][0]*b[0][0]+a[1][1]*b[1][0]; \ - c[1][1] = a[1][0]*b[0][1]+a[1][1]*b[1][1]; \ - \ -} - -/* ========================================================== */ -/* matrix product */ -/* c[x][y] = a[x][0]*b[0][y]+a[x][1]*b[1][y]+a[x][2]*b[2][y]+a[x][3]*b[3][y];*/ - -#define MATRIX_PRODUCT_3X3(c,a,b) \ -{ \ - c[0][0] = a[0][0]*b[0][0]+a[0][1]*b[1][0]+a[0][2]*b[2][0]; \ - c[0][1] = a[0][0]*b[0][1]+a[0][1]*b[1][1]+a[0][2]*b[2][1]; \ - c[0][2] = a[0][0]*b[0][2]+a[0][1]*b[1][2]+a[0][2]*b[2][2]; \ - \ - c[1][0] = a[1][0]*b[0][0]+a[1][1]*b[1][0]+a[1][2]*b[2][0]; \ - c[1][1] = a[1][0]*b[0][1]+a[1][1]*b[1][1]+a[1][2]*b[2][1]; \ - c[1][2] = a[1][0]*b[0][2]+a[1][1]*b[1][2]+a[1][2]*b[2][2]; \ - \ - c[2][0] = a[2][0]*b[0][0]+a[2][1]*b[1][0]+a[2][2]*b[2][0]; \ - c[2][1] = a[2][0]*b[0][1]+a[2][1]*b[1][1]+a[2][2]*b[2][1]; \ - c[2][2] = a[2][0]*b[0][2]+a[2][1]*b[1][2]+a[2][2]*b[2][2]; \ -} - -/* ========================================================== */ -/* matrix product */ -/* c[x][y] = a[x][0]*b[0][y]+a[x][1]*b[1][y]+a[x][2]*b[2][y]+a[x][3]*b[3][y];*/ - -#define MATRIX_PRODUCT_4X4(c,a,b) \ -{ \ - c[0][0] = a[0][0]*b[0][0]+a[0][1]*b[1][0]+a[0][2]*b[2][0]+a[0][3]*b[3][0];\ - c[0][1] = a[0][0]*b[0][1]+a[0][1]*b[1][1]+a[0][2]*b[2][1]+a[0][3]*b[3][1];\ - c[0][2] = a[0][0]*b[0][2]+a[0][1]*b[1][2]+a[0][2]*b[2][2]+a[0][3]*b[3][2];\ - c[0][3] = a[0][0]*b[0][3]+a[0][1]*b[1][3]+a[0][2]*b[2][3]+a[0][3]*b[3][3];\ - \ - c[1][0] = a[1][0]*b[0][0]+a[1][1]*b[1][0]+a[1][2]*b[2][0]+a[1][3]*b[3][0];\ - c[1][1] = a[1][0]*b[0][1]+a[1][1]*b[1][1]+a[1][2]*b[2][1]+a[1][3]*b[3][1];\ - c[1][2] = a[1][0]*b[0][2]+a[1][1]*b[1][2]+a[1][2]*b[2][2]+a[1][3]*b[3][2];\ - c[1][3] = a[1][0]*b[0][3]+a[1][1]*b[1][3]+a[1][2]*b[2][3]+a[1][3]*b[3][3];\ - \ - c[2][0] = a[2][0]*b[0][0]+a[2][1]*b[1][0]+a[2][2]*b[2][0]+a[2][3]*b[3][0];\ - c[2][1] = a[2][0]*b[0][1]+a[2][1]*b[1][1]+a[2][2]*b[2][1]+a[2][3]*b[3][1];\ - c[2][2] = a[2][0]*b[0][2]+a[2][1]*b[1][2]+a[2][2]*b[2][2]+a[2][3]*b[3][2];\ - c[2][3] = a[2][0]*b[0][3]+a[2][1]*b[1][3]+a[2][2]*b[2][3]+a[2][3]*b[3][3];\ - \ - c[3][0] = a[3][0]*b[0][0]+a[3][1]*b[1][0]+a[3][2]*b[2][0]+a[3][3]*b[3][0];\ - c[3][1] = a[3][0]*b[0][1]+a[3][1]*b[1][1]+a[3][2]*b[2][1]+a[3][3]*b[3][1];\ - c[3][2] = a[3][0]*b[0][2]+a[3][1]*b[1][2]+a[3][2]*b[2][2]+a[3][3]*b[3][2];\ - c[3][3] = a[3][0]*b[0][3]+a[3][1]*b[1][3]+a[3][2]*b[2][3]+a[3][3]*b[3][3];\ -} - -/* ========================================================== */ -/* matrix times vector */ - -#define MAT_DOT_VEC_2X2(p,m,v) \ -{ \ - p[0] = m[0][0]*v[0] + m[0][1]*v[1]; \ - p[1] = m[1][0]*v[0] + m[1][1]*v[1]; \ -} - -/* ========================================================== */ -/* matrix times vector */ - -#define MAT_DOT_VEC_3X3(p,m,v) \ -{ \ - p[0] = m[0][0]*v[0] + m[0][1]*v[1] + m[0][2]*v[2]; \ - p[1] = m[1][0]*v[0] + m[1][1]*v[1] + m[1][2]*v[2]; \ - p[2] = m[2][0]*v[0] + m[2][1]*v[1] + m[2][2]*v[2]; \ -} - -/* ========================================================== */ -/* matrix times vector */ - -#define MAT_DOT_VEC_4X4(p,m,v) \ -{ \ - p[0] = m[0][0]*v[0] + m[0][1]*v[1] + m[0][2]*v[2] + m[0][3]*v[3]; \ - p[1] = m[1][0]*v[0] + m[1][1]*v[1] + m[1][2]*v[2] + m[1][3]*v[3]; \ - p[2] = m[2][0]*v[0] + m[2][1]*v[1] + m[2][2]*v[2] + m[2][3]*v[3]; \ - p[3] = m[3][0]*v[0] + m[3][1]*v[1] + m[3][2]*v[2] + m[3][3]*v[3]; \ -} - -/* ========================================================== */ -/* vector transpose times matrix */ -/* p[j] = v[0]*m[0][j] + v[1]*m[1][j] + v[2]*m[2][j]; */ - -#define VEC_DOT_MAT_3X3(p,v,m) \ -{ \ - p[0] = v[0]*m[0][0] + v[1]*m[1][0] + v[2]*m[2][0]; \ - p[1] = v[0]*m[0][1] + v[1]*m[1][1] + v[2]*m[2][1]; \ - p[2] = v[0]*m[0][2] + v[1]*m[1][2] + v[2]*m[2][2]; \ -} - -/* ========================================================== */ -/* affine matrix times vector */ -/* The matrix is assumed to be an affine matrix, with last two - * entries representing a translation */ - -#define MAT_DOT_VEC_2X3(p,m,v) \ -{ \ - p[0] = m[0][0]*v[0] + m[0][1]*v[1] + m[0][2]; \ - p[1] = m[1][0]*v[0] + m[1][1]*v[1] + m[1][2]; \ -} - -/* ========================================================== */ -/* inverse transpose of matrix times vector - * - * This macro computes inverse transpose of matrix m, - * and multiplies vector v into it, to yeild vector p - * - * DANGER !!! Do Not use this on normal vectors!!! - * It will leave normals the wrong length !!! - * See macro below for use on normals. - */ - -#define INV_TRANSP_MAT_DOT_VEC_2X2(p,m,v) \ -{ \ - gleDouble det; \ - \ - det = m[0][0]*m[1][1] - m[0][1]*m[1][0]; \ - p[0] = m[1][1]*v[0] - m[1][0]*v[1]; \ - p[1] = - m[0][1]*v[0] + m[0][0]*v[1]; \ - \ - /* if matrix not singular, and not orthonormal, then renormalize */ \ - if ((det!=1.0) && (det != 0.0)) { \ - det = 1.0 / det; \ - p[0] *= det; \ - p[1] *= det; \ - } \ -} - -/* ========================================================== */ -/* transform normal vector by inverse transpose of matrix - * and then renormalize the vector - * - * This macro computes inverse transpose of matrix m, - * and multiplies vector v into it, to yeild vector p - * Vector p is then normalized. - */ - - -#define NORM_XFORM_2X2(p,m,v) \ -{ \ - double len; \ - \ - /* do nothing if off-diagonals are zero and diagonals are \ - * equal */ \ - if ((m[0][1] != 0.0) || (m[1][0] != 0.0) || (m[0][0] != m[1][1])) { \ - p[0] = m[1][1]*v[0] - m[1][0]*v[1]; \ - p[1] = - m[0][1]*v[0] + m[0][0]*v[1]; \ - \ - len = p[0]*p[0] + p[1]*p[1]; \ - len = 1.0 / sqrt (len); \ - p[0] *= len; \ - p[1] *= len; \ - } else { \ - VEC_COPY_2 (p, v); \ - } \ -} - -/* ========================================================== */ -/* outer product of vector times vector transpose - * - * The outer product of vector v and vector transpose t yeilds - * dyadic matrix m. - */ - -#define OUTER_PRODUCT_2X2(m,v,t) \ -{ \ - m[0][0] = v[0] * t[0]; \ - m[0][1] = v[0] * t[1]; \ - \ - m[1][0] = v[1] * t[0]; \ - m[1][1] = v[1] * t[1]; \ -} - -/* ========================================================== */ -/* outer product of vector times vector transpose - * - * The outer product of vector v and vector transpose t yeilds - * dyadic matrix m. - */ - -#define OUTER_PRODUCT_3X3(m,v,t) \ -{ \ - m[0][0] = v[0] * t[0]; \ - m[0][1] = v[0] * t[1]; \ - m[0][2] = v[0] * t[2]; \ - \ - m[1][0] = v[1] * t[0]; \ - m[1][1] = v[1] * t[1]; \ - m[1][2] = v[1] * t[2]; \ - \ - m[2][0] = v[2] * t[0]; \ - m[2][1] = v[2] * t[1]; \ - m[2][2] = v[2] * t[2]; \ -} - -/* ========================================================== */ -/* outer product of vector times vector transpose - * - * The outer product of vector v and vector transpose t yeilds - * dyadic matrix m. - */ - -#define OUTER_PRODUCT_4X4(m,v,t) \ -{ \ - m[0][0] = v[0] * t[0]; \ - m[0][1] = v[0] * t[1]; \ - m[0][2] = v[0] * t[2]; \ - m[0][3] = v[0] * t[3]; \ - \ - m[1][0] = v[1] * t[0]; \ - m[1][1] = v[1] * t[1]; \ - m[1][2] = v[1] * t[2]; \ - m[1][3] = v[1] * t[3]; \ - \ - m[2][0] = v[2] * t[0]; \ - m[2][1] = v[2] * t[1]; \ - m[2][2] = v[2] * t[2]; \ - m[2][3] = v[2] * t[3]; \ - \ - m[3][0] = v[3] * t[0]; \ - m[3][1] = v[3] * t[1]; \ - m[3][2] = v[3] * t[2]; \ - m[3][3] = v[3] * t[3]; \ -} - -/* +========================================================== */ -/* outer product of vector times vector transpose - * - * The outer product of vector v and vector transpose t yeilds - * dyadic matrix m. - */ - -#define ACCUM_OUTER_PRODUCT_2X2(m,v,t) \ -{ \ - m[0][0] += v[0] * t[0]; \ - m[0][1] += v[0] * t[1]; \ - \ - m[1][0] += v[1] * t[0]; \ - m[1][1] += v[1] * t[1]; \ -} - -/* +========================================================== */ -/* outer product of vector times vector transpose - * - * The outer product of vector v and vector transpose t yeilds - * dyadic matrix m. - */ - -#define ACCUM_OUTER_PRODUCT_3X3(m,v,t) \ -{ \ - m[0][0] += v[0] * t[0]; \ - m[0][1] += v[0] * t[1]; \ - m[0][2] += v[0] * t[2]; \ - \ - m[1][0] += v[1] * t[0]; \ - m[1][1] += v[1] * t[1]; \ - m[1][2] += v[1] * t[2]; \ - \ - m[2][0] += v[2] * t[0]; \ - m[2][1] += v[2] * t[1]; \ - m[2][2] += v[2] * t[2]; \ -} - -/* +========================================================== */ -/* outer product of vector times vector transpose - * - * The outer product of vector v and vector transpose t yeilds - * dyadic matrix m. - */ - -#define ACCUM_OUTER_PRODUCT_4X4(m,v,t) \ -{ \ - m[0][0] += v[0] * t[0]; \ - m[0][1] += v[0] * t[1]; \ - m[0][2] += v[0] * t[2]; \ - m[0][3] += v[0] * t[3]; \ - \ - m[1][0] += v[1] * t[0]; \ - m[1][1] += v[1] * t[1]; \ - m[1][2] += v[1] * t[2]; \ - m[1][3] += v[1] * t[3]; \ - \ - m[2][0] += v[2] * t[0]; \ - m[2][1] += v[2] * t[1]; \ - m[2][2] += v[2] * t[2]; \ - m[2][3] += v[2] * t[3]; \ - \ - m[3][0] += v[3] * t[0]; \ - m[3][1] += v[3] * t[1]; \ - m[3][2] += v[3] * t[2]; \ - m[3][3] += v[3] * t[3]; \ -} - -/* +========================================================== */ -/* determinant of matrix - * - * Computes determinant of matrix m, returning d - */ - -#define DETERMINANT_2X2(d,m) \ -{ \ - d = m[0][0] * m[1][1] - m[0][1] * m[1][0]; \ -} - -/* ========================================================== */ -/* determinant of matrix - * - * Computes determinant of matrix m, returning d - */ - -#define DETERMINANT_3X3(d,m) \ -{ \ - d = m[0][0] * (m[1][1]*m[2][2] - m[1][2] * m[2][1]); \ - d -= m[0][1] * (m[1][0]*m[2][2] - m[1][2] * m[2][0]); \ - d += m[0][2] * (m[1][0]*m[2][1] - m[1][1] * m[2][0]); \ -} - -/* ========================================================== */ -/* i,j,th cofactor of a 4x4 matrix - * - */ - -#define COFACTOR_4X4_IJ(fac,m,i,j) \ -{ \ - int ii[4], jj[4], k; \ - \ - /* compute which row, columnt to skip */ \ - for (k=0; k - -#include "../../Glut.cf" - -SRCS = smap_buildsmap.c smap_context.c smap_create.c smap_destroy.c \ - smap_drawmesh.c smap_flag.c smap_get.c smap_getfunc.c smap_gettexdim.c \ - smap_gettexobj.c smap_getvec.c smap_makemesh.c smap_nearfar.c \ - smap_origin.c smap_render.c smap_rvec2st.c smap_set.c smap_setfunc.c \ - smap_setvec.c smap_texdim.c smap_texobj.c - -OBJS = smap_buildsmap.o smap_context.o smap_create.o smap_destroy.o \ - smap_drawmesh.o smap_flag.o smap_get.o smap_getfunc.o smap_gettexdim.o \ - smap_gettexobj.o smap_getvec.o smap_makemesh.o smap_nearfar.o \ - smap_origin.o smap_render.o smap_rvec2st.o smap_set.o smap_setfunc.o \ - smap_setvec.o smap_texdim.o smap_texobj.o - -#ifdef LibraryObjectRule -LibraryObjectRule() -#else -/* XXX Very lame, you must be using pre-R5 config files! This - will probably do essentially what LibraryObjectRule does. */ -NormalLibraryObjectRule() -#endif - -NormalLibraryTarget(glsmap,$(OBJS)) - -DependTarget() diff --git a/lib/glut-3.7.6/lib/glsmap/ObjectType.mk b/lib/glut-3.7.6/lib/glsmap/ObjectType.mk deleted file mode 100644 index f94dc77f5..000000000 --- a/lib/glut-3.7.6/lib/glsmap/ObjectType.mk +++ /dev/null @@ -1,2 +0,0 @@ -LDOPTS = $(LDOPTS_32) -CSTYLE = $(CSTYLE_32) diff --git a/lib/glut-3.7.6/lib/glsmap/glsmap.dsp b/lib/glut-3.7.6/lib/glsmap/glsmap.dsp deleted file mode 100644 index 7b6e9b292..000000000 --- a/lib/glut-3.7.6/lib/glsmap/glsmap.dsp +++ /dev/null @@ -1,172 +0,0 @@ -# Microsoft Developer Studio Project File - Name="glsmap" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Static Library" 0x0104 - -CFG=glsmap - 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 "glsmap.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 "glsmap.mak" CFG="glsmap - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "glsmap - Win32 Release" (based on "Win32 (x86) Static Library") -!MESSAGE "glsmap - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "glsmap - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../../include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo - -!ELSEIF "$(CFG)" == "glsmap - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo - -!ENDIF - -# Begin Target - -# Name "glsmap - Win32 Release" -# Name "glsmap - Win32 Debug" -# Begin Source File - -SOURCE=.\glsmapint.h -# End Source File -# Begin Source File - -SOURCE=.\smap_buildsmap.c -# End Source File -# Begin Source File - -SOURCE=.\smap_context.c -# End Source File -# Begin Source File - -SOURCE=.\smap_create.c -# End Source File -# Begin Source File - -SOURCE=.\smap_destroy.c -# End Source File -# Begin Source File - -SOURCE=.\smap_drawmesh.c -# End Source File -# Begin Source File - -SOURCE=.\smap_flag.c -# End Source File -# Begin Source File - -SOURCE=.\smap_get.c -# End Source File -# Begin Source File - -SOURCE=.\smap_getfunc.c -# End Source File -# Begin Source File - -SOURCE=.\smap_gettexdim.c -# End Source File -# Begin Source File - -SOURCE=.\smap_gettexobj.c -# End Source File -# Begin Source File - -SOURCE=.\smap_getvec.c -# End Source File -# Begin Source File - -SOURCE=.\smap_makemesh.c -# End Source File -# Begin Source File - -SOURCE=.\smap_nearfar.c -# End Source File -# Begin Source File - -SOURCE=.\smap_origin.c -# End Source File -# Begin Source File - -SOURCE=.\smap_render.c -# End Source File -# Begin Source File - -SOURCE=.\smap_rvec2st.c -# End Source File -# Begin Source File - -SOURCE=.\smap_set.c -# End Source File -# Begin Source File - -SOURCE=.\smap_setfunc.c -# End Source File -# Begin Source File - -SOURCE=.\smap_setvec.c -# End Source File -# Begin Source File - -SOURCE=.\smap_texdim.c -# End Source File -# Begin Source File - -SOURCE=.\smap_texobj.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/lib/glsmap/glsmapint.h b/lib/glut-3.7.6/lib/glsmap/glsmapint.h deleted file mode 100644 index f91baea32..000000000 --- a/lib/glut-3.7.6/lib/glsmap/glsmapint.h +++ /dev/null @@ -1,102 +0,0 @@ -#ifndef __glsmapint_h__ -#define __glsmapint_h__ - -/* 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. */ - -#include - -enum { X = 0, Y = 1, Z = 2 }; - -#define INITFACE(mesh) \ - int steps = mesh->steps; \ - int sqsteps = mesh->steps * mesh->steps - -#define FACE(side,y,x) \ - mesh->face[(side)*sqsteps + (y)*steps + (x)] - -#define FACExy(side,i,j) \ - (&FACE(side,i,j).x) - -#define FACEst(side,i,j) \ - (&FACE(side,i,j).s) - -#define INITBACK(mesh) \ - int allrings = mesh->rings + mesh->edgeExtend; \ - int ringedspokes = allrings * mesh->steps - -#define BACK(edge,ring,spoke) \ - mesh->back[(edge)*ringedspokes + (ring)*mesh->steps + (spoke)] - -#define BACKxy(edge,ring,spoke) \ - (&BACK(edge,ring,spoke).x) - -#define BACKst(edge,ring,spoke) \ - (&BACK(edge,ring,spoke).s) - -typedef struct _STXY { - GLfloat s, t; - GLfloat x, y; -} STXY; - -typedef struct _SphereMapMesh { - - int refcnt; - - int steps; - int rings; - int edgeExtend; - - STXY *face; - STXY *back; - -} SphereMapMesh; - -struct _SphereMap { - - /* Shared sphere map mesh vertex data. */ - SphereMapMesh *mesh; - - /* Texture object ids. */ - GLuint smapTexObj; - GLuint viewTexObjs[6]; - GLuint viewTexObj; - - /* Flags */ - SphereMapFlags flags; - - /* Texture dimensions must be a power of two. */ - int viewTexDim; /* view texture dimension */ - int smapTexDim; /* sphere map texture dimension */ - - /* Viewport origins for view and sphere map rendering. */ - int viewOrigin[2]; - int smapOrigin[2]; - - /* Viewing vectors. */ - GLfloat eye[3]; - GLfloat up[3]; - GLfloat obj[3]; - - /* Projection parameters. */ - GLfloat viewNear; - GLfloat viewFar; - - /* Rendering callbacks. */ - void (*positionLights)(int view, void *context); - void (*drawView)(int view, void *context); - - /* Application specified callback data. */ - void *context; - -}; - -/* Library internal routines. */ -extern void __smapDrawSphereMapMeshSide(SphereMapMesh *mesh, int side); -extern void __smapDrawSphereMapMeshBack(SphereMapMesh *mesh); -extern void __smapValidateSphereMapMesh(SphereMapMesh *mesh); - -#endif /* __glsmapint_h__ */ diff --git a/lib/glut-3.7.6/lib/glsmap/smap_buildsmap.c b/lib/glut-3.7.6/lib/glsmap/smap_buildsmap.c deleted file mode 100644 index 53fa0e6cb..000000000 --- a/lib/glut-3.7.6/lib/glsmap/smap_buildsmap.c +++ /dev/null @@ -1,227 +0,0 @@ - -/* 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. */ - -/* smap_buildsmap.c - automatically builds sphere map */ - -#include -#include -#include -#include - -#include "glsmapint.h" - -#if defined(GL_EXT_texture_object) && !defined(GL_VERSION_1_1) -#define glBindTexture(A,B) glBindTextureEXT(A,B) -#endif -#if defined(GL_EXT_copy_texture) && !defined(GL_VERSION_1_1) -#define glCopyTexImage2D(A, B, C, D, E, F, G, H) glCopyTexImage2DEXT(A, B, C, D, E, F, G, H) -#endif - -static void -copyImageToTexture(SphereMap *smap, - GLuint texobj, int origin[2], int texdim) -{ - int isSmapTexObj = (texobj == smap->smapTexObj) ? 1 : 0; - int genMipmapsFlag = - isSmapTexObj ? SMAP_GENERATE_SMAP_MIPMAPS : SMAP_GENERATE_VIEW_MIPMAPS; - static GLubyte pixels[256][256][3]; /* XXX fix me. */ - - glBindTexture(GL_TEXTURE_2D, texobj); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, - GL_LINEAR); - if (smap->flags & genMipmapsFlag) { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, - GL_LINEAR_MIPMAP_LINEAR); - } else { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, - GL_LINEAR); - } - - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); - /* Clamp to avoid artifacts from wrap around in texture. */ - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); - - if (smap->flags & genMipmapsFlag) { - glPixelStorei(GL_PACK_ALIGNMENT, 1); - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - glReadPixels(origin[X], origin[Y], texdim, texdim, - GL_RGB, GL_UNSIGNED_BYTE, pixels); - gluBuild2DMipmaps(GL_TEXTURE_2D, 3, texdim, texdim, - GL_RGB, GL_UNSIGNED_BYTE, pixels); - } else { - glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, - origin[X], origin[Y], texdim, texdim, 0); - } -} - -static struct { - GLfloat angle; - GLfloat x, y, z; -} faceInfo[6] = { - { 0.0, +1.0, 0.0, 0.0 }, /* front */ - { 90.0, -1.0, 0.0, 0.0 }, /* top */ - { 90.0, +1.0, 0.0, 0.0 }, /* bottom */ - { 90.0, 0.0, -1.0, 0.0 }, /* left */ - { 90.0, 0.0, +1.0, 0.0 }, /* right */ - { 180.0, -1.0, 0.0, 0.0 } /* back */ -}; - -static void -configFace(SphereMap *smap, int view) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glRotatef(faceInfo[view].angle, - faceInfo[view].x, faceInfo[view].y, faceInfo[view].z); - gluLookAt(smap->obj[X], smap->obj[Y], smap->obj[Z], /* "eye" at object */ - smap->eye[X], smap->eye[Y], smap->eye[Z], /* looking at eye */ - smap->up[X], smap->up[Y], smap->up[Z]); -} - -static void -initGenViewTex(SphereMap *smap) -{ - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(90.0, 1.0, smap->viewNear, smap->viewFar); - glViewport(smap->viewOrigin[X], smap->viewOrigin[Y], - smap->viewTexDim, smap->viewTexDim); - glScissor(0, 0, smap->viewTexDim, smap->viewTexDim); - glEnable(GL_SCISSOR_TEST); - glEnable(GL_DEPTH_TEST); -} - -static void -genViewTex(SphereMap *smap, int view) -{ - configFace(smap, view); - assert(smap->positionLights); - smap->positionLights(view, smap->context); - assert(smap->drawView); - smap->drawView(view, smap->context); -} - -void -smapGenViewTex(SphereMap *smap, int view) -{ - initGenViewTex(smap); - genViewTex(smap, view); - copyImageToTexture(smap, smap->viewTexObjs[view], - smap->viewOrigin, smap->viewTexDim); -} - -void -smapGenViewTexs(SphereMap *smap) -{ - int view; - - initGenViewTex(smap); - - for (view=0; view<6; view++) { - genViewTex(smap, view); - copyImageToTexture(smap, smap->viewTexObjs[view], - smap->viewOrigin, smap->viewTexDim); - } -} - -void -drawSphereMapMesh(SphereMap *smap) -{ - int side; - - /* Calculate sphere map mesh if needed. */ - __smapValidateSphereMapMesh(smap->mesh); - - /* Five front and side faces. */ - for (side=0; side<5; side++) { - /* Bind to texture for given face of cube map. */ - glBindTexture(GL_TEXTURE_2D, smap->viewTexObjs[side]); - __smapDrawSphereMapMeshSide(smap->mesh, side); - } - - /* Bind to texture for back face of cube map. */ - glBindTexture(GL_TEXTURE_2D, smap->viewTexObjs[side]); - __smapDrawSphereMapMeshBack(smap->mesh); -} - -void -initDrawSphereMapMesh(SphereMap *smap) -{ - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluOrtho2D(0, 1, 0, 1); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glViewport(smap->smapOrigin[X], smap->smapOrigin[Y], - smap->smapTexDim, smap->smapTexDim); - - if (smap->flags & SMAP_CLEAR_SMAP_TEXTURE) { - glClear(GL_COLOR_BUFFER_BIT); - } - - glDisable(GL_DEPTH_TEST); - glEnable(GL_TEXTURE_2D); - glDisable(GL_CULL_FACE); -} - -void -smapGenSphereMapFromViewTexs(SphereMap *smap) -{ - initDrawSphereMapMesh(smap); - drawSphereMapMesh(smap); - - copyImageToTexture(smap, smap->smapTexObj, - smap->smapOrigin, smap->smapTexDim); -} - -void -smapGenSphereMap(SphereMap *smap) -{ - smapGenViewTexs(smap); - smapGenSphereMapFromViewTexs(smap); -} - -void -smapGenSphereMapWithOneViewTex(SphereMap *smap) -{ - int side; - - /* Make sure viewports are not obviously overlapping. */ - assert(smap->viewOrigin[X] != smap->smapOrigin[X]); - assert(smap->viewOrigin[Y] != smap->smapOrigin[Y]); - - /* Calculate sphere map mesh if needed. */ - __smapValidateSphereMapMesh(smap->mesh); - - /* Five front and side faces. */ - for (side=0; side<5; side++) { - initGenViewTex(smap); - genViewTex(smap, side); - copyImageToTexture(smap, smap->viewTexObj, - smap->viewOrigin, smap->viewTexDim); - - /* Preceeding copyImageToTexture does bind to smap->viewTexObj */ - - initDrawSphereMapMesh(smap); - __smapDrawSphereMapMeshSide(smap->mesh, side); - } - - initGenViewTex(smap); - genViewTex(smap, SMAP_BACK); - copyImageToTexture(smap, smap->viewTexObj, - smap->viewOrigin, smap->viewTexDim); - - /* Preceeding copyImageToTexture does bind to smap->viewTexObj */ - - initDrawSphereMapMesh(smap); - __smapDrawSphereMapMeshBack(smap->mesh); - - copyImageToTexture(smap, smap->smapTexObj, - smap->smapOrigin, smap->smapTexDim); -} diff --git a/lib/glut-3.7.6/lib/glsmap/smap_context.c b/lib/glut-3.7.6/lib/glsmap/smap_context.c deleted file mode 100644 index 6557b0bb0..000000000 --- a/lib/glut-3.7.6/lib/glsmap/smap_context.c +++ /dev/null @@ -1,20 +0,0 @@ - -/* 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. */ - -#include "glsmapint.h" - -void -smapSetContextData(SphereMap *smap, void *context) -{ - smap->context = context; -} - -void -smapGetContextData(SphereMap *smap, void **context) -{ - *context = smap->context; -} diff --git a/lib/glut-3.7.6/lib/glsmap/smap_create.c b/lib/glut-3.7.6/lib/glsmap/smap_create.c deleted file mode 100644 index 47eba82cd..000000000 --- a/lib/glut-3.7.6/lib/glsmap/smap_create.c +++ /dev/null @@ -1,98 +0,0 @@ - -/* 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. */ - -#include -#include - -#include "glsmapint.h" - -static SphereMapMesh * -createSphereMapMesh(void) -{ - SphereMapMesh *mesh; - - mesh = (SphereMapMesh*) malloc(sizeof(SphereMapMesh)); - - mesh->steps = 8; - mesh->rings = 3; - mesh->edgeExtend = 1; - - mesh->face = NULL; - mesh->back = NULL; - - mesh->refcnt = 0; - - return mesh; -} - -static void -refSphereMapMesh(SphereMapMesh *mesh) -{ - mesh->refcnt++; -} - -SphereMap * -smapCreateSphereMap(SphereMap *shareSmap) -{ - SphereMap *smap; - int i; - - smap = (SphereMap*) malloc(sizeof(SphereMap)); - - if (shareSmap) { - smap->mesh = shareSmap->mesh; - } else { - smap->mesh = createSphereMapMesh(); - } - refSphereMapMesh(smap->mesh); - - /* Default texture objects. */ - smap->smapTexObj = 1001; - for (i=0; i<6; i++) { - smap->viewTexObjs[i] = i+1002; - } - smap->viewTexObj = 1008; - - /* Default texture dimensions 64x64 */ - smap->viewTexDim = 64; - smap->smapTexDim = 64; - - /* Default origin at lower left. */ - smap->viewOrigin[X] = 0; - smap->viewOrigin[Y] = 0; - smap->smapOrigin[X] = 0; - smap->smapOrigin[Y] = 0; - - /* Flags. */ - smap->flags = (SphereMapFlags) 0; - - /* Default eye vector. */ - smap->eye[X] = 0.0; - smap->eye[Y] = 0.0; - smap->eye[Z] = -10.0; - - /* Default up vector. */ - smap->up[X] = 0.0; - smap->up[Y] = 0.1; - smap->up[Z] = 0.0; - - /* Default object location vector. */ - smap->obj[X] = 0.0; - smap->obj[Y] = 0.0; - smap->obj[Z] = 0.0; - - /* Default near and far clip planes. */ - smap->viewNear = 0.1; - smap->viewFar = 20.0; - - smap->positionLights = NULL; - smap->drawView = NULL; - - smap->context = NULL; - - return smap; -} diff --git a/lib/glut-3.7.6/lib/glsmap/smap_destroy.c b/lib/glut-3.7.6/lib/glsmap/smap_destroy.c deleted file mode 100644 index a90fa7b27..000000000 --- a/lib/glut-3.7.6/lib/glsmap/smap_destroy.c +++ /dev/null @@ -1,34 +0,0 @@ - -/* 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. */ - -#include /* SunOS multithreaded assert() needs . Lame. */ -#include -#include - -#include "glsmapint.h" - -static void -derefSphereMapMesh(SphereMapMesh *mesh) -{ - assert(mesh->refcnt > 0); - mesh->refcnt--; - if (mesh->refcnt == 0) { - if (mesh->face) { - assert(mesh->back == - &(mesh->face[5*mesh->steps*mesh->steps])); - free(mesh->face); - } - free(mesh); - } -} - -void -smapDestroySphereMap(SphereMap *smap) -{ - derefSphereMapMesh(smap->mesh); - free(smap); -} diff --git a/lib/glut-3.7.6/lib/glsmap/smap_drawmesh.c b/lib/glut-3.7.6/lib/glsmap/smap_drawmesh.c deleted file mode 100644 index ed526c377..000000000 --- a/lib/glut-3.7.6/lib/glsmap/smap_drawmesh.c +++ /dev/null @@ -1,50 +0,0 @@ - -/* 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. */ - -#include - -#include "glsmapint.h" - -void -__smapDrawSphereMapMeshSide(SphereMapMesh *mesh, int side) -{ - INITFACE(mesh); - int i, j; - - for (i=0; isteps-1; i++) { - glBegin(GL_QUAD_STRIP); - for (j=0; jsteps; j++) { - glTexCoord2fv (FACEst(side,i,j)); - glVertex2fv (FACExy(side,i,j)); - glTexCoord2fv (FACEst(side,i+1,j)); - glVertex2fv (FACExy(side,i+1,j)); - } - glEnd(); - } -} - -/* Back face specially rendered for its singularity! */ -void -__smapDrawSphereMapMeshBack(SphereMapMesh *mesh) -{ - INITBACK(mesh); - int side, i, j; - - for (side=0; side<4; side++) { - for (j=0; jrings-1+mesh->edgeExtend; j++) { - glBegin(GL_QUAD_STRIP); - for (i=0; isteps; i++) { - glTexCoord2fv (BACKst(side,j,i)); - glVertex2fv (BACKxy(side,j,i)); - glTexCoord2fv (BACKst(side,j+1,i)); - glVertex2fv (BACKxy(side,j+1,i)); - } - glEnd(); - } - } -} - diff --git a/lib/glut-3.7.6/lib/glsmap/smap_flag.c b/lib/glut-3.7.6/lib/glsmap/smap_flag.c deleted file mode 100644 index 11278b351..000000000 --- a/lib/glut-3.7.6/lib/glsmap/smap_flag.c +++ /dev/null @@ -1,20 +0,0 @@ - -/* 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. */ - -#include "glsmapint.h" - -void -smapSetFlags(SphereMap *smap, SphereMapFlags flags) -{ - smap->flags = flags; -} - -void -smapGetFlags(SphereMap *smap, SphereMapFlags *flags) -{ - *flags = smap->flags; -} diff --git a/lib/glut-3.7.6/lib/glsmap/smap_get.c b/lib/glut-3.7.6/lib/glsmap/smap_get.c deleted file mode 100644 index d43155581..000000000 --- a/lib/glut-3.7.6/lib/glsmap/smap_get.c +++ /dev/null @@ -1,32 +0,0 @@ - -/* 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. */ - -#include "glsmapint.h" - -void smapGetEye(SphereMap *smap, - GLfloat *eyex, GLfloat *eyey, GLfloat *eyez) -{ - *eyex = smap->eye[X]; - *eyey = smap->eye[Y]; - *eyez = smap->eye[Z]; -} - -void smapGetUp(SphereMap *smap, - GLfloat *upx, GLfloat *upy, GLfloat *upz) -{ - *upx = smap->up[X]; - *upy = smap->up[Y]; - *upz = smap->up[Z]; -} - -void smapGetObject(SphereMap *smap, - GLfloat *objx, GLfloat *objy, GLfloat *objz) -{ - *objx = smap->obj[X]; - *objy = smap->obj[Y]; - *objz = smap->obj[Z]; -} diff --git a/lib/glut-3.7.6/lib/glsmap/smap_getfunc.c b/lib/glut-3.7.6/lib/glsmap/smap_getfunc.c deleted file mode 100644 index 9732addfd..000000000 --- a/lib/glut-3.7.6/lib/glsmap/smap_getfunc.c +++ /dev/null @@ -1,20 +0,0 @@ - -/* 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. */ - -#include "glsmapint.h" - -void smapGetPositionLightsFunc(SphereMap *smap, - void (**positionLights)(int view, void *context)) -{ - *positionLights = smap->positionLights; -} - -void smapGetDrawViewFunc(SphereMap *smap, - void (**drawView)(int view, void *context)) -{ - *drawView = smap->drawView; -} diff --git a/lib/glut-3.7.6/lib/glsmap/smap_gettexdim.c b/lib/glut-3.7.6/lib/glsmap/smap_gettexdim.c deleted file mode 100644 index ef3d24357..000000000 --- a/lib/glut-3.7.6/lib/glsmap/smap_gettexdim.c +++ /dev/null @@ -1,21 +0,0 @@ - -/* 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. */ - -#include "glsmapint.h" - -void -smapGetSphereMapTexDim(SphereMap *smap, GLsizei *texdim) -{ - *texdim = smap->smapTexDim; -} - -void -smapGetViewTexDim(SphereMap *smap, GLsizei *texdim) -{ - *texdim = smap->viewTexDim; -} - diff --git a/lib/glut-3.7.6/lib/glsmap/smap_gettexobj.c b/lib/glut-3.7.6/lib/glsmap/smap_gettexobj.c deleted file mode 100644 index eba9b64b0..000000000 --- a/lib/glut-3.7.6/lib/glsmap/smap_gettexobj.c +++ /dev/null @@ -1,31 +0,0 @@ - -/* 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. */ - -#include "glsmapint.h" - -void -smapGetSphereMapTexObj(SphereMap *smap, GLuint *texobj) -{ - *texobj = smap->smapTexObj; -} - -void -smapGetViewTexObj(SphereMap *smap, GLuint *texobj) -{ - *texobj = smap->viewTexObj; -} - -void -smapGetViewTexObjs(SphereMap *smap, GLuint texobjs[6]) -{ - int i; - - for (i=0; i<6; i++) { - texobjs[i] = smap->viewTexObjs[i]; - } -} - diff --git a/lib/glut-3.7.6/lib/glsmap/smap_getvec.c b/lib/glut-3.7.6/lib/glsmap/smap_getvec.c deleted file mode 100644 index a56d30982..000000000 --- a/lib/glut-3.7.6/lib/glsmap/smap_getvec.c +++ /dev/null @@ -1,33 +0,0 @@ - -/* 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. */ - -#include "glsmapint.h" - -void -smapGetEyeVector(SphereMap *smap, GLfloat *eye) -{ - eye[X] = smap->eye[X]; - eye[Y] = smap->eye[Y]; - eye[Z] = smap->eye[Z]; -} - -void -smapGetUpVector(SphereMap *smap, GLfloat *up) -{ - up[X] = smap->up[X]; - up[Y] = smap->up[Y]; - up[Z] = smap->up[Z]; -} - -void -smapGetObjectVector(SphereMap *smap, GLfloat *obj) -{ - obj[X] = smap->obj[X]; - obj[Y] = smap->obj[Y]; - obj[Z] = smap->obj[Z]; -} - diff --git a/lib/glut-3.7.6/lib/glsmap/smap_makemesh.c b/lib/glut-3.7.6/lib/glsmap/smap_makemesh.c deleted file mode 100644 index cd5b411d6..000000000 --- a/lib/glut-3.7.6/lib/glsmap/smap_makemesh.c +++ /dev/null @@ -1,253 +0,0 @@ - -/* 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. */ - -#include /* SunOS multithreaded assert() needs . Lame. */ -#include -#include -#include -#include - -#include "glsmapint.h" - -static struct { - int xl; - int yl; - int zl; - int swap; /* swap final (s,t) */ - int flip; /* flip final s or t, ie. [0..1] --> [1..0] */ - float dir; -} faceInfo[5] = { - { 0, 1, 2, 0, 1.0, 1.0 }, /* front */ - { 0, 2, 1, 0, -1.0, 1.0 }, /* top */ - { 0, 2, 1, 0, 1.0, -1.0 }, /* bottom */ - { 1, 2, 0, 1, -1.0, 1.0 }, /* left */ - { 1, 2, 0, 1, 1.0, -1.0 }, /* right */ -}; - -static struct { - int xl; - int yl; - float dir; -} edgeInfo[4] = { - { 0, 1, -1.0 }, - { 0, 1, 1.0 }, - { 1, 0, -1.0 }, - { 1, 0, 1.0 } -}; - -void -__smapValidateSphereMapMesh(SphereMapMesh *mesh) -{ - /* setup some local variables for variable array size indexing */ - INITFACE(mesh); - INITBACK(mesh); - - float st[2]; /* (s,t) coordinate */ - /* range=[0..1,0..1] */ - float v[3]; /* (x,y,z) location on cube map */ - /* range=[-1..1,-1..1,-1..1] */ - float rv[3]; /* reflection vector, ie. cube map location */ - /* normalized onto unit sphere */ - float len; /* distance from v[3] to origin */ - /* for converting to rv[3] */ - int side; /* which of 5 faces (all but back face) */ - int i, j; - int xl, yl, zl; /* renamed X, Y, Z index */ - int swap; - int flip; - int edge; /* which edge of back face */ - float sc, tc; /* singularity (s,t) on back face circle */ - - if (mesh->face) { - assert(mesh->back == &(mesh->face[5*sqsteps])); - return; - } - assert(mesh->back == NULL); - - mesh->face = (STXY*) - malloc((5*sqsteps+4*ringedspokes) * sizeof(STXY)); - mesh->back = &(mesh->face[5*sqsteps]); - - /* for the front and four side faces */ - for (side=0; side<5; side++) { - /* use faceInfo to parameterize face construction */ - xl = faceInfo[side].xl; - yl = faceInfo[side].yl; - zl = faceInfo[side].zl; - swap = faceInfo[side].swap; - flip = faceInfo[side].flip; - /* cube map "Z" coordinate */ - v[zl] = faceInfo[side].dir; - - for (i=0; isteps; i++) { - /* cube map "Y" coordinate */ - v[yl] = 2.0/(mesh->steps-1) * i - 1.0; - for (j=0; jsteps; j++) { - /* cube map "X" coordinate */ - v[xl] = 2.0/(mesh->steps-1) * j - 1.0; - - /* normalize cube map location to construct */ - /* reflection vector */ - len = sqrt(1.0 + v[xl]*v[xl] + v[yl]*v[yl]); - rv[0] = v[0]/len; - rv[1] = v[1]/len; - rv[2] = v[2]/len; - - /* map reflection vector to sphere map (s,t) */ - /* NOTE: face[side][i][j] (x,y) gets updated */ - smapRvecToSt(rv, FACExy(side,i,j)); - - /* update texture coordinate, */ - /* normalize [-1..1,-1..1] to [0..1,0..1] */ - if (!swap) { - FACE(side,i,j).s = (-v[xl] + 1.0)/2.0; - FACE(side,i,j).t = (flip*v[yl] + 1.0)/2.0; - } else { - FACE(side,i,j).s = (flip*-v[yl] + 1.0)/2.0; - FACE(side,i,j).t = (v[xl] + 1.0)/2.0; - } - } - } - } - - - /* The back face must be specially handled. The center - point in the back face of a cube map becomes a - a singularity around the circular edge of a sphere map. */ - - /* Carefully work from each edge of the back face to center - of back face mapped to the outside of the sphere map. */ - - /* cube map "Z" coordinate, always -1 since backface */ - v[2] = -1; - - /* for each edge */ - /* [x=-1, y=-1..1, z=-1] */ - /* [x= 1, y=-1..1, z=-1] */ - /* [x=-1..1, y=-1, z=-1] */ - /* [x=-1..1, y= 1, z=-1] */ - for (edge=0; edge<4; edge++) { - /* cube map "X" coordinate */ - v[edgeInfo[edge].xl] = edgeInfo[edge].dir; - for (j=0; jsteps; j++) { - /* cube map "Y" coordinate */ - v[edgeInfo[edge].yl] = 2.0/(mesh->steps-1) * j - 1.0; - - /* normalize cube map location to construct */ - /* reflection vector */ - len = sqrt(v[0]*v[0] + v[1]*v[1] + v[2]*v[2]); - rv[0] = v[0]/len; - rv[1] = v[1]/len; - rv[2] = v[2]/len; - - /* Map reflection vector to sphere map (s,t). */ - smapRvecToSt(rv, st); - - /* Determine distinance from the center of sphere */ - /* map (0.5,0.5) to (s,t) */ - len = sqrt((st[0]-0.5)*(st[0]-0.5) + (st[1]-0.5)*(st[1]-0.5)); - - /* Calculate (s,t) location extended to the singularity */ - /* at the center of the back face (ie, extend to */ - /* circle edge of the sphere map). */ - sc = (st[0]-0.5)/len * 0.5 + 0.5; - tc = (st[1]-0.5)/len * 0.5 + 0.5; - - /* (s,t) at back face edge. */ - BACK(edge,0,j).s = (-v[0] + 1.0)/2.0; - BACK(edge,0,j).t = (-v[1] + 1.0)/2.0; - BACK(edge,0,j).x = st[0]; - BACK(edge,0,j).y = st[1]; - - /* If just two rings, we just generate a back face edge - vertex and a center vertex (2 rings), but if there - are more rings, we carefully interpolate between the - edge and center vertices. Notice how smapStToRvec is used - to map the interpolated (s,t) into a reflection vector - that must then be extended to the back cube face (it is - not correct to just interpolate the texture - coordinates!). */ - if (mesh->rings > 2) { - float ist[2]; /* interpolated (s,t) */ - float ds, dt; /* delta s and delta t */ - - /* Start interpolating from the edge. */ - ist[0] = st[0]; - ist[1] = st[1]; - - /* Calculate delta s and delta t for interpolation. */ - ds = (sc - ist[0]) / (mesh->rings-1); - dt = (tc - ist[1]) / (mesh->rings-1); - - for (i=1; irings-1; i++) { - /* Incremental interpolation of (s,t). */ - ist[0] = ist[0] + ds; - ist[1] = ist[1] + dt; - - /* Calculate reflection vector from interpolated (s,t). */ - smapStToRvec(ist, rv); - /* Assert that z must be on the back cube face. */ - assert(rv[2] <= -sqrt(1.0/3.0)); - /* Extend reflection vector out of back cube face. */ - /* Note: z is negative value so negate z to avoid */ - /* inverting x and y! */ - rv[0] = rv[0] / -rv[2]; - rv[1] = rv[1] / -rv[2]; - - BACK(edge,i,j).s = (-rv[0] + 1.0)/2.0; - BACK(edge,i,j).t = (-rv[1] + 1.0)/2.0; - BACK(edge,i,j).x = ist[0]; - BACK(edge,i,j).y = ist[1]; - } - } - - /* (s,t) at circle edge of the sphere map is ALWAYS */ - /* at center of back cube map face */ - BACK(edge,mesh->rings-1,j).s = 0.5; - BACK(edge,mesh->rings-1,j).t = 0.5; - /* Location of singularity at the edge of the sphere map. */ - BACK(edge,mesh->rings-1,j).x = sc; - BACK(edge,mesh->rings-1,j).y = tc; - - if (mesh->edgeExtend) { - /* Add an extra ring to avoid seeing the */ - /* tessellation boundary of the sphere map's sphere. */ - BACK(edge,mesh->rings,j).s = 0.5; - BACK(edge,mesh->rings,j).t = 0.5; - /* 0.33 below is a fudge factor. */ - BACK(edge,mesh->rings,j).x = sc + 0.33*(sc - st[0]); - BACK(edge,mesh->rings,j).y = tc + 0.33*(tc - st[1]); - } - } - } - for (edge=0; edge<4; edge++) { - for (j=0; jsteps; j++) { - for (i=1; irings-1; i++) { - } - } - } -} - -void -smapConfigureSphereMapMesh(SphereMap *smap, - int steps, int rings, int edgeExtend) -{ - SphereMapMesh *mesh = smap->mesh; - - if (steps == mesh->steps && - rings == mesh->rings && - edgeExtend == mesh->edgeExtend) { - return; - } - - mesh->steps = steps; - mesh->rings = rings; - mesh->edgeExtend = edgeExtend; - - mesh->face = NULL; - mesh->back = NULL; -} diff --git a/lib/glut-3.7.6/lib/glsmap/smap_nearfar.c b/lib/glut-3.7.6/lib/glsmap/smap_nearfar.c deleted file mode 100644 index 45eb55d83..000000000 --- a/lib/glut-3.7.6/lib/glsmap/smap_nearfar.c +++ /dev/null @@ -1,26 +0,0 @@ - -/* 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. */ - -#include "glsmapint.h" - -void -smapSetNearFar(SphereMap *smap, - GLfloat viewNear, GLfloat viewFar) -{ - /* Curse Intel for "near" and "far" keywords. */ - smap->viewNear = viewNear; - smap->viewFar = viewFar; -} - -void -smapGetNearFar(SphereMap *smap, - GLfloat *viewNear, GLfloat *viewFar) -{ - /* Curse Intel for "near" and "far" keywords. */ - *viewNear = smap->viewNear; - *viewFar = smap->viewFar; -} diff --git a/lib/glut-3.7.6/lib/glsmap/smap_origin.c b/lib/glut-3.7.6/lib/glsmap/smap_origin.c deleted file mode 100644 index 9b6af2146..000000000 --- a/lib/glut-3.7.6/lib/glsmap/smap_origin.c +++ /dev/null @@ -1,34 +0,0 @@ - -/* 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. */ - -#include - -#include "glsmapint.h" - -void smapSetViewOrigin(SphereMap *smap, GLint x, GLint y) -{ - smap->viewOrigin[0] = x; - smap->viewOrigin[1] = y; -} - -void smapSetSphereMapOrigin(SphereMap *smap, GLint x, GLint y) -{ - smap->smapOrigin[0] = x; - smap->smapOrigin[1] = y; -} - -void smapGetViewOrigin(SphereMap *smap, GLint *x, GLint *y) -{ - *x = smap->viewOrigin[0]; - *y = smap->viewOrigin[1]; -} - -void smapGetSphereMapOrigin(SphereMap *smap, GLint *x, GLint *y) -{ - *x = smap->smapOrigin[0]; - *y = smap->smapOrigin[1]; -} diff --git a/lib/glut-3.7.6/lib/glsmap/smap_render.c b/lib/glut-3.7.6/lib/glsmap/smap_render.c deleted file mode 100644 index 504458ae6..000000000 --- a/lib/glut-3.7.6/lib/glsmap/smap_render.c +++ /dev/null @@ -1,26 +0,0 @@ - -/* 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. */ - -#include -#include - -#include "glsmapint.h" - -#if defined(GL_EXT_texture_object) && !defined(GL_VERSION_1_1) -#define glBindTexture(A,B) glBindTextureEXT(A,B) -#endif - -void -smapRenderSphereMappedObj(SphereMap *smap) -{ - glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); - glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); - glEnable(GL_TEXTURE_GEN_S); - glEnable(GL_TEXTURE_GEN_T); - glEnable(GL_TEXTURE_2D); - glBindTexture(GL_TEXTURE_2D, smap->smapTexObj); -} diff --git a/lib/glut-3.7.6/lib/glsmap/smap_rvec2st.c b/lib/glut-3.7.6/lib/glsmap/smap_rvec2st.c deleted file mode 100644 index 23b5d8dc1..000000000 --- a/lib/glut-3.7.6/lib/glsmap/smap_rvec2st.c +++ /dev/null @@ -1,79 +0,0 @@ - -/* 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. */ - -#include - -#include "glsmapint.h" - -/* (x,y,z) reflection vector --> (s,t) sphere map coordinates */ -int -smapRvecToSt(float rvec[3], float st[2]) -{ - double m, recipm; - - /* In Section 2.10.4 ("Generating texture coordinates") - of the OpenGL 1.1 specification, you will find the - GL_SPHERE_MAP equations: - - n' = normal after transformation to eye coordinates - u = unit vector from origin to vertex in eye coordinates - - (rx, ry, rz) = u - 2 * n' * transpose(n') * u - - m = 2 * sqrt(rx^2 + ry^2 + (rz + 1)^2)) - - s = rx/m + 0.5 - t = ry/m + 0.5 - - The equation for calculating (rx, ry, rz) is the - equation for calculating the reflection vector for - a surface and observer. The explanation and - derivation for this equation is found in Roger's - "Procedural Elements for Computer Graphics" 2nd ed. - in Section 5-5 ("Determining the Reflection Vector"). - Note that Roger's convention has the Z axis in - the opposite direction from the OpenGL convention. */ - - m = 2 * sqrt(rvec[0]*rvec[0] + - rvec[1]*rvec[1] + - (rvec[2]+1)*(rvec[2]+1)); - if (m == 0.0) { - /* Some point on the sphere map perimeter. */ - st[0] = 0.0; - st[1] = 0.5; - return 0; - } - - recipm = 1.0/m; - - st[0] = rvec[0]*recipm + 0.5; - st[1] = rvec[1]*recipm + 0.5; - return 1; -} - -/* (s,t) sphere map coordinate --> reflection verctor (x,y,z) */ -void -smapStToRvec(float *st, float *rvec) -{ - double tmp1, tmp2; - - /* Using algebra to invert the sphere mapping equations - shown above in smapRvecToSt, you get: - - rx = 2*sqrt(-4*s^2 + 4*s - 4*t^2 + 4*t - 1)*(2*s-1) - ry = 2*sqrt(-4*s^2 + 4*s - 4*t^2 + 4*t - 1)*(2*t-1) - rz = -8*s^2 + 8*s - 8*t^2 + 8*t - 3 - - The C code below eliminates common subexpressions. */ - - tmp1 = st[0]*(1-st[0]) + st[1]*(1-st[1]); - tmp2 = 2 * sqrt(4*tmp1 - 1); - - rvec[0] = tmp2 * (2*st[0]-1); - rvec[1] = tmp2 * (2*st[1]-1); - rvec[2] = 8 * tmp1 - 3; -} diff --git a/lib/glut-3.7.6/lib/glsmap/smap_set.c b/lib/glut-3.7.6/lib/glsmap/smap_set.c deleted file mode 100644 index 32d4e08a5..000000000 --- a/lib/glut-3.7.6/lib/glsmap/smap_set.c +++ /dev/null @@ -1,32 +0,0 @@ - -/* 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. */ - -#include "glsmapint.h" - -void smapSetEye(SphereMap *smap, - GLfloat eyex, GLfloat eyey, GLfloat eyez) -{ - smap->eye[X] = eyex; - smap->eye[Y] = eyey; - smap->eye[Z] = eyez; -} - -void smapSetUp(SphereMap *smap, - GLfloat upx, GLfloat upy, GLfloat upz) -{ - smap->up[X] = upx; - smap->up[Y] = upy; - smap->up[Z] = upz; -} - -void smapSetObject(SphereMap *smap, - GLfloat objx, GLfloat objy, GLfloat objz) -{ - smap->obj[X] = objx; - smap->obj[Y] = objy; - smap->obj[Z] = objz; -} diff --git a/lib/glut-3.7.6/lib/glsmap/smap_setfunc.c b/lib/glut-3.7.6/lib/glsmap/smap_setfunc.c deleted file mode 100644 index 359c9a6ff..000000000 --- a/lib/glut-3.7.6/lib/glsmap/smap_setfunc.c +++ /dev/null @@ -1,20 +0,0 @@ - -/* 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. */ - -#include "glsmapint.h" - -void smapSetPositionLightsFunc(SphereMap *smap, - void (*positionLights)(int view, void *context)) -{ - smap->positionLights = positionLights; -} - -void smapSetDrawViewFunc(SphereMap *smap, - void (*drawView)(int view, void *context)) -{ - smap->drawView = drawView; -} diff --git a/lib/glut-3.7.6/lib/glsmap/smap_setvec.c b/lib/glut-3.7.6/lib/glsmap/smap_setvec.c deleted file mode 100644 index 353be86dc..000000000 --- a/lib/glut-3.7.6/lib/glsmap/smap_setvec.c +++ /dev/null @@ -1,33 +0,0 @@ - -/* 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. */ - -#include "glsmapint.h" - -void -smapSetEyeVector(SphereMap *smap, GLfloat *eye) -{ - smap->eye[X] = eye[X]; - smap->eye[Y] = eye[Y]; - smap->eye[Z] = eye[Z]; -} - -void -smapSetUpVector(SphereMap *smap, GLfloat *up) -{ - smap->up[X] = up[X]; - smap->up[Y] = up[Y]; - smap->up[Z] = up[Z]; -} - -void -smapSetObjectVector(SphereMap *smap, GLfloat *obj) -{ - smap->obj[X] = obj[X]; - smap->obj[Y] = obj[Y]; - smap->obj[Z] = obj[Z]; -} - diff --git a/lib/glut-3.7.6/lib/glsmap/smap_texdim.c b/lib/glut-3.7.6/lib/glsmap/smap_texdim.c deleted file mode 100644 index ebc4a58a5..000000000 --- a/lib/glut-3.7.6/lib/glsmap/smap_texdim.c +++ /dev/null @@ -1,21 +0,0 @@ - -/* 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. */ - -#include "glsmapint.h" - -void -smapSetSphereMapTexDim(SphereMap *smap, GLsizei texdim) -{ - smap->smapTexDim = texdim; -} - -void -smapSetViewTexDim(SphereMap *smap, GLsizei texdim) -{ - smap->viewTexDim = texdim; -} - diff --git a/lib/glut-3.7.6/lib/glsmap/smap_texobj.c b/lib/glut-3.7.6/lib/glsmap/smap_texobj.c deleted file mode 100644 index b4c478d50..000000000 --- a/lib/glut-3.7.6/lib/glsmap/smap_texobj.c +++ /dev/null @@ -1,31 +0,0 @@ - -/* 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. */ - -#include "glsmapint.h" - -void -smapSetSphereMapTexObj(SphereMap *smap, GLuint texobj) -{ - smap->smapTexObj = texobj; -} - -void -smapSetViewTexObj(SphereMap *smap, GLuint texobj) -{ - smap->viewTexObj = texobj; -} - -void -smapSetViewTexObjs(SphereMap *smap, GLuint texobjs[6]) -{ - int i; - - for (i=0; i<6; i++) { - smap->viewTexObjs[i] = texobjs[i]; - } -} - diff --git a/lib/glut-3.7.6/lib/glut.n32/ObjectType.mk b/lib/glut-3.7.6/lib/glut.n32/ObjectType.mk deleted file mode 100644 index 6116ff97e..000000000 --- a/lib/glut-3.7.6/lib/glut.n32/ObjectType.mk +++ /dev/null @@ -1,2 +0,0 @@ -LDOPTS = $(LDOPTS_N32) -CSTYLE = $(CSTYLE_N32) diff --git a/lib/glut-3.7.6/lib/glut.n64/ObjectType.mk b/lib/glut-3.7.6/lib/glut.n64/ObjectType.mk deleted file mode 100644 index 55d0f4755..000000000 --- a/lib/glut-3.7.6/lib/glut.n64/ObjectType.mk +++ /dev/null @@ -1,3 +0,0 @@ -LDOPTS = $(LDOPTS_64) -#OPTIMIZER = -O0 -CSTYLE = $(CSTYLE_64) diff --git a/lib/glut-3.7.6/lib/glut/Imakefile b/lib/glut-3.7.6/lib/glut/Imakefile deleted file mode 100644 index e87a230bd..000000000 --- a/lib/glut-3.7.6/lib/glut/Imakefile +++ /dev/null @@ -1,174 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1994. */ - -#define DoNormalLib YES - -#include - -#include "../../Glut.cf" - -HDRS = \ - glutint.h \ - glutstroke.h \ - layerutil.h - -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_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 - -OBJS = \ - glut_8x13.o \ - glut_9x15.o \ - glut_bitmap.o \ - glut_bwidth.o \ - glut_cindex.o \ - glut_cmap.o \ - glut_cursor.o \ - glut_dials.o \ - glut_dstr.o \ - glut_event.o \ - glut_ext.o \ - glut_fullscrn.o \ - glut_gamemode.o \ - glut_get.o \ - glut_glxext.o \ - glut_hel10.o \ - glut_hel12.o \ - glut_hel18.o \ - glut_init.o \ - glut_input.o \ - glut_joy.o \ - glut_key.o \ - glut_keyctrl.o \ - glut_keyup.o \ - glut_menu.o \ - glut_menu2.o \ - glut_mesa.o \ - glut_modifier.o \ - glut_mroman.o \ - glut_overlay.o \ - glut_roman.o \ - glut_shapes.o \ - glut_space.o \ - glut_stroke.o \ - glut_swap.o \ - glut_swidth.o \ - glut_tablet.o \ - glut_teapot.o \ - glut_tr10.o \ - glut_tr24.o \ - glut_util.o \ - glut_vidresize.o \ - glut_warp.o \ - glut_win.o \ - glut_winmisc.o \ - layerutil.o - -#ifdef LibraryObjectRule -LibraryObjectRule() -#else -/* XXX Very lame, you must be using pre-R5 config files! This - will probably do essentially what LibraryObjectRule does. */ -NormalLibraryObjectRule() -#endif - -NormalLibraryTarget(glut,$(OBJS)) - -/* I've gotten too many complaints from people (mostly Linux users) - trying to build GLUT that have problems using lex and yacc to - build the stroke fonts for GLUT so I will simply supply the - generated C stroke fonts files. If you would like to build the - fonts, please uncomment the following define of BuildStrokeFontsWithLex - and regenerate the Makefile. */ - -/* #define BuildStrokeFontsWithLex */ - -#ifdef BuildStrokeFontsWithLex - -# for SGI's parallel make -.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 - -/* XXX Attempt to make up for the lack of lex support in pre-R6 imake - config files. */ -#ifndef LexCmd -#define LexCmd lex -LEX = LexCmd -#endif -#ifndef LexLib -#define LexLib -ll -LEXLIB = LexLib -#endif - -strokelex.c : strokelex.l - $(LEX) strokelex.l - $(MV) lex.yy.c strokelex.c - -strokegen : strokegen.o strokelex.o - $(CC) -o $@ $(CFLAGS) strokegen.o strokelex.o $(LEXLIB) - -glut_roman.c : Roman.stroke strokegen - ./strokegen -s glutStrokeRoman < Roman.stroke > $@ - -glut_mroman.c : MonoRoman.stroke strokegen - ./strokegen -s glutStrokeMonoRoman < MonoRoman.stroke > $@ - -GEN_STROKES = glut_roman.c glut_mroman.c - -depend:: glut_roman.c glut_mroman.c - -#endif /* BuildStrokeFontsWithLex */ - -clean:: - $(RM) y.tab.h y.tab.c lex.yy.c gram.h gram.c lex.c - $(RM) strokelex.c strokegen.c $(GEN_STROKES) strokegen capturexfont - -DependTarget() diff --git a/lib/glut-3.7.6/lib/glut/MonoRoman.stroke b/lib/glut-3.7.6/lib/glut/MonoRoman.stroke deleted file mode 100644 index 837104439..000000000 --- a/lib/glut-3.7.6/lib/glut/MonoRoman.stroke +++ /dev/null @@ -1,503 +0,0 @@ -## -# $XConsortium: Roman_M.src,v 5.2 91/07/21 16:42:40 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. - -# Mono-spaced version of Roman Simplex font. - - FONTNAME Roman - TOP 119.0476 - BOTTOM -33.3333 - NUM_CH 128 - PROPERTIES 3 - - (CHARSET_REGISTRY ISO8859) - (CHARSET_ENCODING "1") - (SPACING M) - -INDEX 32 STROKE 0 CENTER 52.3810 RIGHT 104.7619 -INDEX 33 STROKE 2 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (52.3810 100.0000) (52.3810 33.3333) - OPEN 5 (52.3810 9.5238) (47.6191 4.7619) (52.3810 0.0000) - (57.1429 4.7619) (52.3810 9.5238) -INDEX 34 STROKE 2 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (33.3334 100.0000) (33.3334 66.6667) - OPEN 2 (71.4286 100.0000) (71.4286 66.6667) -INDEX 35 STROKE 4 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (54.7619 119.0476) (21.4286 -33.3333) - OPEN 2 (83.3334 119.0476) (50.0000 -33.3333) - OPEN 2 (21.4286 57.1429) (88.0952 57.1429) - OPEN 2 (16.6667 28.5714) (83.3334 28.5714) -INDEX 36 STROKE 3 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (42.8571 119.0476) (42.8571 -19.0476) - OPEN 2 (61.9047 119.0476) (61.9047 -19.0476) - OPEN 20 (85.7143 85.7143) (76.1905 95.2381) (61.9047 100.0000) - (42.8571 100.0000) (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.6190) - (76.1905 42.8571) (80.9524 38.0952) (85.7143 28.5714) (85.7143 14.2857) - (76.1905 4.7619) (61.9047 0.0000) (42.8571 0.0000) (28.5714 4.7619) - (19.0476 14.2857) -INDEX 37 STROKE 3 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (95.2381 100.0000) (9.5238 0.0000) - OPEN 16 (33.3333 100.0000) (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.0000) (33.3333 100.0000) - (42.8571 95.2381) (57.1428 90.4762) (71.4286 90.4762) (85.7143 95.2381) - (95.2381 100.0000) - OPEN 11 (76.1905 33.3333) (66.6667 28.5714) (61.9048 19.0476) - (61.9048 9.5238) (71.4286 0.0000) (80.9524 0.0000) (90.4762 4.7619) - (95.2381 14.2857) (95.2381 23.8095) (85.7143 33.3333) (76.1905 33.3333) -INDEX 38 STROKE 1 CENTER 52.3810 RIGHT 104.7619 - OPEN 34 (100.0000 57.1429) (100.0000 61.9048) (95.2381 66.6667) - (90.4762 66.6667) (85.7143 61.9048) (80.9524 52.3810) (71.4286 28.5714) - (61.9048 14.2857) (52.3809 4.7619) (42.8571 0.0000) (23.8095 0.0000) - (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.6190 61.9048) (52.3809 66.6667) - (57.1429 76.1905) (57.1429 85.7143) (52.3809 95.2381) (42.8571 100.0000) - (33.3333 95.2381) (28.5714 85.7143) (28.5714 76.1905) (33.3333 61.9048) - (42.8571 47.6190) (66.6667 14.2857) (76.1905 4.7619) (85.7143 0.0000) - (95.2381 0.0000) (100.0000 4.7619) (100.0000 9.5238) -INDEX 39 STROKE 1 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (52.3810 100.0000) (52.3810 66.6667) -INDEX 40 STROKE 1 CENTER 52.3810 RIGHT 104.7619 - OPEN 10 (69.0476 119.0476) (59.5238 109.5238) (50.0000 95.2381) - (40.4762 76.1905) (35.7143 52.3810) (35.7143 33.3333) (40.4762 9.5238) - (50.0000 -9.5238) (59.5238 -23.8095) (69.0476 -33.3333) -INDEX 41 STROKE 1 CENTER 52.3810 RIGHT 104.7619 - OPEN 10 (35.7143 119.0476) (45.2381 109.5238) (54.7619 95.2381) - (64.2857 76.1905) (69.0476 52.3810) (69.0476 33.3333) (64.2857 9.5238) - (54.7619 -9.5238) (45.2381 -23.8095) (35.7143 -33.3333) -INDEX 42 STROKE 3 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (52.3810 71.4286) (52.3810 14.2857) - OPEN 2 (28.5715 57.1429) (76.1905 28.5714) - OPEN 2 (76.1905 57.1429) (28.5715 28.5714) -INDEX 43 STROKE 2 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (52.3809 85.7143) (52.3809 0.0000) - OPEN 2 (9.5238 42.8571) (95.2381 42.8571) -INDEX 44 STROKE 1 CENTER 52.3810 RIGHT 104.7619 - OPEN 8 (57.1429 4.7619) (52.3810 0.0000) (47.6191 4.7619) - (52.3810 9.5238) (57.1429 4.7619) (57.1429 -4.7619) (52.3810 -14.2857) - (47.6191 -19.0476) -INDEX 45 STROKE 1 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (9.5238 42.8571) (95.2381 42.8571) -INDEX 46 STROKE 1 CENTER 52.3810 RIGHT 104.7619 - OPEN 5 (52.3810 9.5238) (47.6191 4.7619) (52.3810 0.0000) - (57.1429 4.7619) (52.3810 9.5238) -INDEX 47 STROKE 1 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (19.0476 -14.2857) (85.7143 100.0000) -INDEX 48 STROKE 1 CENTER 52.3810 RIGHT 104.7619 - OPEN 17 (47.6190 100.0000) (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.6190 0.0000) (57.1428 0.0000) (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.0000) (47.6190 100.0000) -INDEX 49 STROKE 1 CENTER 52.3810 RIGHT 104.7619 - OPEN 4 (40.4762 80.9524) (50.0000 85.7143) (64.2857 100.0000) - (64.2857 0.0000) -INDEX 50 STROKE 1 CENTER 52.3810 RIGHT 104.7619 - OPEN 14 (23.8095 76.1905) (23.8095 80.9524) (28.5714 90.4762) - (33.3333 95.2381) (42.8571 100.0000) (61.9047 100.0000) (71.4286 95.2381) - (76.1905 90.4762) (80.9524 80.9524) (80.9524 71.4286) (76.1905 61.9048) - (66.6666 47.6190) (19.0476 0.0000) (85.7143 0.0000) -INDEX 51 STROKE 1 CENTER 52.3810 RIGHT 104.7619 - OPEN 15 (28.5714 100.0000) (80.9524 100.0000) (52.3809 61.9048) - (66.6666 61.9048) (76.1905 57.1429) (80.9524 52.3810) (85.7143 38.0952) - (85.7143 28.5714) (80.9524 14.2857) (71.4286 4.7619) (57.1428 0.0000) - (42.8571 0.0000) (28.5714 4.7619) (23.8095 9.5238) (19.0476 19.0476) -INDEX 52 STROKE 2 CENTER 52.3810 RIGHT 104.7619 - OPEN 3 (64.2857 100.0000) (16.6667 33.3333) (88.0952 33.3333) - OPEN 2 (64.2857 100.0000) (64.2857 0.0000) -INDEX 53 STROKE 1 CENTER 52.3810 RIGHT 104.7619 - OPEN 17 (76.1905 100.0000) (28.5714 100.0000) (23.8095 57.1429) - (28.5714 61.9048) (42.8571 66.6667) (57.1428 66.6667) (71.4286 61.9048) - (80.9524 52.3810) (85.7143 38.0952) (85.7143 28.5714) (80.9524 14.2857) - (71.4286 4.7619) (57.1428 0.0000) (42.8571 0.0000) (28.5714 4.7619) - (23.8095 9.5238) (19.0476 19.0476) -INDEX 54 STROKE 1 CENTER 52.3810 RIGHT 104.7619 - OPEN 23 (78.5714 85.7143) (73.8096 95.2381) (59.5238 100.0000) - (50.0000 100.0000) (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.0000 0.0000) - (54.7619 0.0000) (69.0476 4.7619) (78.5714 14.2857) (83.3334 28.5714) - (83.3334 33.3333) (78.5714 47.6190) (69.0476 57.1429) (54.7619 61.9048) - (50.0000 61.9048) (35.7143 57.1429) (26.1905 47.6190) (21.4286 33.3333) -INDEX 55 STROKE 2 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (85.7143 100.0000) (38.0952 0.0000) - OPEN 2 (19.0476 100.0000) (85.7143 100.0000) -INDEX 56 STROKE 1 CENTER 52.3810 RIGHT 104.7619 - OPEN 29 (42.8571 100.0000) (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.3810) (80.9524 42.8571) (85.7143 33.3333) (85.7143 19.0476) - (80.9524 9.5238) (76.1905 4.7619) (61.9047 0.0000) (42.8571 0.0000) - (28.5714 4.7619) (23.8095 9.5238) (19.0476 19.0476) (19.0476 33.3333) - (23.8095 42.8571) (33.3333 52.3810) (47.6190 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.0000) (42.8571 100.0000) -INDEX 57 STROKE 1 CENTER 52.3810 RIGHT 104.7619 - OPEN 23 (83.3334 66.6667) (78.5714 52.3810) (69.0476 42.8571) - (54.7619 38.0952) (50.0000 38.0952) (35.7143 42.8571) (26.1905 52.3810) - (21.4286 66.6667) (21.4286 71.4286) (26.1905 85.7143) (35.7143 95.2381) - (50.0000 100.0000) (54.7619 100.0000) (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.0000) (45.2381 0.0000) (30.9524 4.7619) (26.1905 14.2857) -INDEX 58 STROKE 2 CENTER 52.3810 RIGHT 104.7619 - OPEN 5 (52.3810 66.6667) (47.6191 61.9048) (52.3810 57.1429) - (57.1429 61.9048) (52.3810 66.6667) - OPEN 5 (52.3810 9.5238) (47.6191 4.7619) (52.3810 0.0000) - (57.1429 4.7619) (52.3810 9.5238) -INDEX 59 STROKE 2 CENTER 52.3810 RIGHT 104.7619 - OPEN 5 (52.3810 66.6667) (47.6191 61.9048) (52.3810 57.1429) - (57.1429 61.9048) (52.3810 66.6667) - OPEN 8 (57.1429 4.7619) (52.3810 0.0000) (47.6191 4.7619) - (52.3810 9.5238) (57.1429 4.7619) (57.1429 -4.7619) (52.3810 -14.2857) - (47.6191 -19.0476) -INDEX 60 STROKE 1 CENTER 52.3810 RIGHT 104.7619 - OPEN 3 (90.4762 85.7143) (14.2857 42.8571) (90.4762 0.0000) -INDEX 61 STROKE 2 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (9.5238 57.1429) (95.2381 57.1429) - OPEN 2 (9.5238 28.5714) (95.2381 28.5714) -INDEX 62 STROKE 1 CENTER 52.3810 RIGHT 104.7619 - OPEN 3 (14.2857 85.7143) (90.4762 42.8571) (14.2857 0.0000) -INDEX 63 STROKE 2 CENTER 52.3810 RIGHT 104.7619 - OPEN 14 (23.8095 76.1905) (23.8095 80.9524) (28.5714 90.4762) - (33.3333 95.2381) (42.8571 100.0000) (61.9047 100.0000) (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.6190) (52.3809 33.3333) - OPEN 5 (52.3809 9.5238) (47.6190 4.7619) (52.3809 0.0000) - (57.1428 4.7619) (52.3809 9.5238) -INDEX 64 STROKE 2 CENTER 52.3810 RIGHT 104.7619 - OPEN 8 (64.2857 52.3810) (54.7619 57.1429) (45.2381 57.1429) - (40.4762 47.6190) (40.4762 42.8571) (45.2381 33.3333) (54.7619 33.3333) - (64.2857 38.0952) - OPEN 19 (64.2857 57.1429) (64.2857 38.0952) (69.0476 33.3333) - (78.5714 33.3333) (83.3334 42.8571) (83.3334 47.6190) (78.5714 61.9048) - (69.0476 71.4286) (54.7619 76.1905) (50.0000 76.1905) (35.7143 71.4286) - (26.1905 61.9048) (21.4286 47.6190) (21.4286 42.8571) (26.1905 28.5714) - (35.7143 19.0476) (50.0000 14.2857) (54.7619 14.2857) (69.0476 19.0476) -INDEX 65 STROKE 3 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (52.3809 100.0000) (14.2857 0.0000) - OPEN 2 (52.3809 100.0000) (90.4762 0.0000) - OPEN 2 (28.5714 33.3333) (76.1905 33.3333) -INDEX 66 STROKE 3 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (19.0476 100.0000) (19.0476 0.0000) - OPEN 9 (19.0476 100.0000) (61.9047 100.0000) (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.3810) - OPEN 10 (19.0476 52.3810) (61.9047 52.3810) (76.1905 47.6190) - (80.9524 42.8571) (85.7143 33.3333) (85.7143 19.0476) (80.9524 9.5238) - (76.1905 4.7619) (61.9047 0.0000) (19.0476 0.0000) -INDEX 67 STROKE 1 CENTER 52.3810 RIGHT 104.7619 - OPEN 18 (88.0952 76.1905) (83.3334 85.7143) (73.8096 95.2381) - (64.2857 100.0000) (45.2381 100.0000) (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.0000) (64.2857 0.0000) - (73.8096 4.7619) (83.3334 14.2857) (88.0952 23.8095) -INDEX 68 STROKE 2 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (19.0476 100.0000) (19.0476 0.0000) - OPEN 12 (19.0476 100.0000) (52.3809 100.0000) (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.0000) - (19.0476 0.0000) -INDEX 69 STROKE 4 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (21.4286 100.0000) (21.4286 0.0000) - OPEN 2 (21.4286 100.0000) (83.3334 100.0000) - OPEN 2 (21.4286 52.3810) (59.5238 52.3810) - OPEN 2 (21.4286 0.0000) (83.3334 0.0000) -INDEX 70 STROKE 3 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (21.4286 100.0000) (21.4286 0.0000) - OPEN 2 (21.4286 100.0000) (83.3334 100.0000) - OPEN 2 (21.4286 52.3810) (59.5238 52.3810) -INDEX 71 STROKE 2 CENTER 52.3810 RIGHT 104.7619 - OPEN 19 (88.0952 76.1905) (83.3334 85.7143) (73.8096 95.2381) - (64.2857 100.0000) (45.2381 100.0000) (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.0000) (64.2857 0.0000) - (73.8096 4.7619) (83.3334 14.2857) (88.0952 23.8095) (88.0952 38.0952) - OPEN 2 (64.2857 38.0952) (88.0952 38.0952) -INDEX 72 STROKE 3 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (19.0476 100.0000) (19.0476 0.0000) - OPEN 2 (85.7143 100.0000) (85.7143 0.0000) - OPEN 2 (19.0476 52.3810) (85.7143 52.3810) -INDEX 73 STROKE 1 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (52.3810 100.0000) (52.3810 0.0000) -INDEX 74 STROKE 1 CENTER 52.3810 RIGHT 104.7619 - OPEN 10 (76.1905 100.0000) (76.1905 23.8095) (71.4286 9.5238) - (66.6667 4.7619) (57.1429 0.0000) (47.6191 0.0000) (38.0953 4.7619) - (33.3334 9.5238) (28.5715 23.8095) (28.5715 33.3333) -INDEX 75 STROKE 3 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (19.0476 100.0000) (19.0476 0.0000) - OPEN 2 (85.7143 100.0000) (19.0476 33.3333) - OPEN 2 (42.8571 57.1429) (85.7143 0.0000) -INDEX 76 STROKE 2 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (23.8095 100.0000) (23.8095 0.0000) - OPEN 2 (23.8095 0.0000) (80.9524 0.0000) -INDEX 77 STROKE 4 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (14.2857 100.0000) (14.2857 0.0000) - OPEN 2 (14.2857 100.0000) (52.3809 0.0000) - OPEN 2 (90.4762 100.0000) (52.3809 0.0000) - OPEN 2 (90.4762 100.0000) (90.4762 0.0000) -INDEX 78 STROKE 3 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (19.0476 100.0000) (19.0476 0.0000) - OPEN 2 (19.0476 100.0000) (85.7143 0.0000) - OPEN 2 (85.7143 100.0000) (85.7143 0.0000) -INDEX 79 STROKE 1 CENTER 52.3810 RIGHT 104.7619 - OPEN 21 (42.8571 100.0000) (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.0000) (61.9047 0.0000) - (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.0000) (42.8571 100.0000) -INDEX 80 STROKE 2 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (19.0476 100.0000) (19.0476 0.0000) - OPEN 10 (19.0476 100.0000) (61.9047 100.0000) (76.1905 95.2381) - (80.9524 90.4762) (85.7143 80.9524) (85.7143 66.6667) (80.9524 57.1429) - (76.1905 52.3810) (61.9047 47.6190) (19.0476 47.6190) -INDEX 81 STROKE 2 CENTER 52.3810 RIGHT 104.7619 - OPEN 21 (42.8571 100.0000) (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.0000) (61.9047 0.0000) - (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.0000) (42.8571 100.0000) - OPEN 2 (57.1428 19.0476) (85.7143 -9.5238) -INDEX 82 STROKE 3 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (19.0476 100.0000) (19.0476 0.0000) - OPEN 10 (19.0476 100.0000) (61.9047 100.0000) (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.3810) (19.0476 52.3810) - OPEN 2 (52.3809 52.3810) (85.7143 0.0000) -INDEX 83 STROKE 1 CENTER 52.3810 RIGHT 104.7619 - OPEN 20 (85.7143 85.7143) (76.1905 95.2381) (61.9047 100.0000) - (42.8571 100.0000) (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.6190) - (76.1905 42.8571) (80.9524 38.0952) (85.7143 28.5714) (85.7143 14.2857) - (76.1905 4.7619) (61.9047 0.0000) (42.8571 0.0000) (28.5714 4.7619) - (19.0476 14.2857) -INDEX 84 STROKE 2 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (52.3809 100.0000) (52.3809 0.0000) - OPEN 2 (19.0476 100.0000) (85.7143 100.0000) -INDEX 85 STROKE 1 CENTER 52.3810 RIGHT 104.7619 - OPEN 10 (19.0476 100.0000) (19.0476 28.5714) (23.8095 14.2857) - (33.3333 4.7619) (47.6190 0.0000) (57.1428 0.0000) (71.4286 4.7619) - (80.9524 14.2857) (85.7143 28.5714) (85.7143 100.0000) -INDEX 86 STROKE 2 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (14.2857 100.0000) (52.3809 0.0000) - OPEN 2 (90.4762 100.0000) (52.3809 0.0000) -INDEX 87 STROKE 4 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (4.7619 100.0000) (28.5714 0.0000) - OPEN 2 (52.3809 100.0000) (28.5714 0.0000) - OPEN 2 (52.3809 100.0000) (76.1905 0.0000) - OPEN 2 (100.0000 100.0000) (76.1905 0.0000) -INDEX 88 STROKE 2 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (19.0476 100.0000) (85.7143 0.0000) - OPEN 2 (85.7143 100.0000) (19.0476 0.0000) -INDEX 89 STROKE 2 CENTER 52.3810 RIGHT 104.7619 - OPEN 3 (14.2857 100.0000) (52.3809 52.3810) (52.3809 0.0000) - OPEN 2 (90.4762 100.0000) (52.3809 52.3810) -INDEX 90 STROKE 3 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (85.7143 100.0000) (19.0476 0.0000) - OPEN 2 (19.0476 100.0000) (85.7143 100.0000) - OPEN 2 (19.0476 0.0000) (85.7143 0.0000) -INDEX 91 STROKE 4 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (35.7143 119.0476) (35.7143 -33.3333) - OPEN 2 (40.4762 119.0476) (40.4762 -33.3333) - OPEN 2 (35.7143 119.0476) (69.0476 119.0476) - OPEN 2 (35.7143 -33.3333) (69.0476 -33.3333) -INDEX 92 STROKE 1 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (19.0476 100.0000) (85.7143 -14.2857) -INDEX 93 STROKE 4 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (64.2857 119.0476) (64.2857 -33.3333) - OPEN 2 (69.0476 119.0476) (69.0476 -33.3333) - OPEN 2 (35.7143 119.0476) (69.0476 119.0476) - OPEN 2 (35.7143 -33.3333) (69.0476 -33.3333) -INDEX 94 STROKE 2 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (52.3809 109.5238) (14.2857 42.8571) - OPEN 2 (52.3809 109.5238) (90.4762 42.8571) -INDEX 95 STROKE 1 CENTER 52.3810 RIGHT 104.7619 - OPEN 5 (0.0000 -33.3333) (104.7619 -33.3333) (104.7619 -28.5714) - (0.0000 -28.5714) (0.0000 -33.3333) -INDEX 96 STROKE 2 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (42.8572 100.0000) (66.6667 71.4286) - OPEN 3 (42.8572 100.0000) (38.0953 95.2381) (66.6667 71.4286) -INDEX 97 STROKE 2 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (80.9524 66.6667) (80.9524 0.0000) - OPEN 14 (80.9524 52.3810) (71.4285 61.9048) (61.9047 66.6667) - (47.6190 66.6667) (38.0952 61.9048) (28.5714 52.3810) (23.8095 38.0952) - (23.8095 28.5714) (28.5714 14.2857) (38.0952 4.7619) (47.6190 0.0000) - (61.9047 0.0000) (71.4285 4.7619) (80.9524 14.2857) -INDEX 98 STROKE 2 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (23.8095 100.0000) (23.8095 0.0000) - OPEN 14 (23.8095 52.3810) (33.3333 61.9048) (42.8571 66.6667) - (57.1428 66.6667) (66.6666 61.9048) (76.1905 52.3810) (80.9524 38.0952) - (80.9524 28.5714) (76.1905 14.2857) (66.6666 4.7619) (57.1428 0.0000) - (42.8571 0.0000) (33.3333 4.7619) (23.8095 14.2857) -INDEX 99 STROKE 1 CENTER 52.3810 RIGHT 104.7619 - OPEN 14 (80.9524 52.3810) (71.4285 61.9048) (61.9047 66.6667) - (47.6190 66.6667) (38.0952 61.9048) (28.5714 52.3810) (23.8095 38.0952) - (23.8095 28.5714) (28.5714 14.2857) (38.0952 4.7619) (47.6190 0.0000) - (61.9047 0.0000) (71.4285 4.7619) (80.9524 14.2857) -INDEX 100 STROKE 2 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (80.9524 100.0000) (80.9524 0.0000) - OPEN 14 (80.9524 52.3810) (71.4285 61.9048) (61.9047 66.6667) - (47.6190 66.6667) (38.0952 61.9048) (28.5714 52.3810) (23.8095 38.0952) - (23.8095 28.5714) (28.5714 14.2857) (38.0952 4.7619) (47.6190 0.0000) - (61.9047 0.0000) (71.4285 4.7619) (80.9524 14.2857) -INDEX 101 STROKE 1 CENTER 52.3810 RIGHT 104.7619 - OPEN 17 (23.8095 38.0952) (80.9524 38.0952) (80.9524 47.6190) - (76.1905 57.1429) (71.4285 61.9048) (61.9047 66.6667) (47.6190 66.6667) - (38.0952 61.9048) (28.5714 52.3810) (23.8095 38.0952) (23.8095 28.5714) - (28.5714 14.2857) (38.0952 4.7619) (47.6190 0.0000) (61.9047 0.0000) - (71.4285 4.7619) (80.9524 14.2857) -INDEX 102 STROKE 2 CENTER 52.3810 RIGHT 104.7619 - OPEN 5 (71.4286 100.0000) (61.9048 100.0000) (52.3810 95.2381) - (47.6191 80.9524) (47.6191 0.0000) - OPEN 2 (33.3334 66.6667) (66.6667 66.6667) -INDEX 103 STROKE 2 CENTER 52.3810 RIGHT 104.7619 - OPEN 7 (80.9524 66.6667) (80.9524 -9.5238) (76.1905 -23.8095) - (71.4285 -28.5714) (61.9047 -33.3333) (47.6190 -33.3333) (38.0952 -28.5714) - OPEN 14 (80.9524 52.3810) (71.4285 61.9048) (61.9047 66.6667) - (47.6190 66.6667) (38.0952 61.9048) (28.5714 52.3810) (23.8095 38.0952) - (23.8095 28.5714) (28.5714 14.2857) (38.0952 4.7619) (47.6190 0.0000) - (61.9047 0.0000) (71.4285 4.7619) (80.9524 14.2857) -INDEX 104 STROKE 2 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (26.1905 100.0000) (26.1905 0.0000) - OPEN 7 (26.1905 47.6190) (40.4762 61.9048) (50.0000 66.6667) - (64.2857 66.6667) (73.8095 61.9048) (78.5715 47.6190) (78.5715 0.0000) -INDEX 105 STROKE 2 CENTER 52.3810 RIGHT 104.7619 - OPEN 5 (47.6191 100.0000) (52.3810 95.2381) (57.1429 100.0000) - (52.3810 104.7619) (47.6191 100.0000) - OPEN 2 (52.3810 66.6667) (52.3810 0.0000) -INDEX 106 STROKE 2 CENTER 52.3810 RIGHT 104.7619 - OPEN 5 (57.1429 100.0000) (61.9048 95.2381) (66.6667 100.0000) - (61.9048 104.7619) (57.1429 100.0000) - OPEN 5 (61.9048 66.6667) (61.9048 -14.2857) (57.1429 -28.5714) - (47.6191 -33.3333) (38.0953 -33.3333) -INDEX 107 STROKE 3 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (26.1905 100.0000) (26.1905 0.0000) - OPEN 2 (73.8095 66.6667) (26.1905 19.0476) - OPEN 2 (45.2381 38.0952) (78.5715 0.0000) -INDEX 108 STROKE 1 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (52.3810 100.0000) (52.3810 0.0000) -INDEX 109 STROKE 3 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (0.0000 66.6667) (0.0000 0.0000) - OPEN 7 (0.0000 47.6190) (14.2857 61.9048) (23.8095 66.6667) - (38.0952 66.6667) (47.6190 61.9048) (52.3810 47.6190) (52.3810 0.0000) - OPEN 7 (52.3810 47.6190) (66.6667 61.9048) (76.1905 66.6667) - (90.4762 66.6667) (100.0000 61.9048) (104.7619 47.6190) (104.7619 0.0000) -INDEX 110 STROKE 2 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (26.1905 66.6667) (26.1905 0.0000) - OPEN 7 (26.1905 47.6190) (40.4762 61.9048) (50.0000 66.6667) - (64.2857 66.6667) (73.8095 61.9048) (78.5715 47.6190) (78.5715 0.0000) -INDEX 111 STROKE 1 CENTER 52.3810 RIGHT 104.7619 - OPEN 17 (45.2381 66.6667) (35.7143 61.9048) (26.1905 52.3810) - (21.4286 38.0952) (21.4286 28.5714) (26.1905 14.2857) (35.7143 4.7619) - (45.2381 0.0000) (59.5238 0.0000) (69.0476 4.7619) (78.5714 14.2857) - (83.3334 28.5714) (83.3334 38.0952) (78.5714 52.3810) (69.0476 61.9048) - (59.5238 66.6667) (45.2381 66.6667) -INDEX 112 STROKE 2 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (23.8095 66.6667) (23.8095 -33.3333) - OPEN 14 (23.8095 52.3810) (33.3333 61.9048) (42.8571 66.6667) - (57.1428 66.6667) (66.6666 61.9048) (76.1905 52.3810) (80.9524 38.0952) - (80.9524 28.5714) (76.1905 14.2857) (66.6666 4.7619) (57.1428 0.0000) - (42.8571 0.0000) (33.3333 4.7619) (23.8095 14.2857) -INDEX 113 STROKE 2 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (80.9524 66.6667) (80.9524 -33.3333) - OPEN 14 (80.9524 52.3810) (71.4285 61.9048) (61.9047 66.6667) - (47.6190 66.6667) (38.0952 61.9048) (28.5714 52.3810) (23.8095 38.0952) - (23.8095 28.5714) (28.5714 14.2857) (38.0952 4.7619) (47.6190 0.0000) - (61.9047 0.0000) (71.4285 4.7619) (80.9524 14.2857) -INDEX 114 STROKE 2 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (33.3334 66.6667) (33.3334 0.0000) - OPEN 5 (33.3334 38.0952) (38.0953 52.3810) (47.6191 61.9048) - (57.1429 66.6667) (71.4286 66.6667) -INDEX 115 STROKE 1 CENTER 52.3810 RIGHT 104.7619 - OPEN 17 (78.5715 52.3810) (73.8095 61.9048) (59.5238 66.6667) - (45.2381 66.6667) (30.9524 61.9048) (26.1905 52.3810) (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.0000) (45.2381 0.0000) - (30.9524 4.7619) (26.1905 14.2857) -INDEX 116 STROKE 2 CENTER 52.3810 RIGHT 104.7619 - OPEN 5 (47.6191 100.0000) (47.6191 19.0476) (52.3810 4.7619) - (61.9048 0.0000) (71.4286 0.0000) - OPEN 2 (33.3334 66.6667) (66.6667 66.6667) -INDEX 117 STROKE 2 CENTER 52.3810 RIGHT 104.7619 - OPEN 7 (26.1905 66.6667) (26.1905 19.0476) (30.9524 4.7619) - (40.4762 0.0000) (54.7619 0.0000) (64.2857 4.7619) (78.5715 19.0476) - OPEN 2 (78.5715 66.6667) (78.5715 0.0000) -INDEX 118 STROKE 2 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (23.8095 66.6667) (52.3809 0.0000) - OPEN 2 (80.9524 66.6667) (52.3809 0.0000) -INDEX 119 STROKE 4 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (14.2857 66.6667) (33.3333 0.0000) - OPEN 2 (52.3809 66.6667) (33.3333 0.0000) - OPEN 2 (52.3809 66.6667) (71.4286 0.0000) - OPEN 2 (90.4762 66.6667) (71.4286 0.0000) -INDEX 120 STROKE 2 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (26.1905 66.6667) (78.5715 0.0000) - OPEN 2 (78.5715 66.6667) (26.1905 0.0000) -INDEX 121 STROKE 2 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (26.1905 66.6667) (54.7619 0.0000) - OPEN 6 (83.3334 66.6667) (54.7619 0.0000) (45.2381 -19.0476) - (35.7143 -28.5714) (26.1905 -33.3333) (21.4286 -33.3333) -INDEX 122 STROKE 3 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (78.5715 66.6667) (26.1905 0.0000) - OPEN 2 (26.1905 66.6667) (78.5715 66.6667) - OPEN 2 (26.1905 0.0000) (78.5715 0.0000) -INDEX 123 STROKE 3 CENTER 52.3810 RIGHT 104.7619 - OPEN 10 (64.2857 119.0476) (54.7619 114.2857) (50.0000 109.5238) - (45.2381 100.0000) (45.2381 90.4762) (50.0000 80.9524) (54.7619 76.1905) - (59.5238 66.6667) (59.5238 57.1429) (50.0000 47.6190) - OPEN 17 (54.7619 114.2857) (50.0000 104.7619) (50.0000 95.2381) - (54.7619 85.7143) (59.5238 80.9524) (64.2857 71.4286) (64.2857 61.9048) - (59.5238 52.3810) (40.4762 42.8571) (59.5238 33.3333) (64.2857 23.8095) - (64.2857 14.2857) (59.5238 4.7619) (54.7619 0.0000) (50.0000 -9.5238) - (50.0000 -19.0476) (54.7619 -28.5714) - OPEN 10 (50.0000 38.0952) (59.5238 28.5714) (59.5238 19.0476) - (54.7619 9.5238) (50.0000 4.7619) (45.2381 -4.7619) (45.2381 -14.2857) - (50.0000 -23.8095) (54.7619 -28.5714) (64.2857 -33.3333) -INDEX 124 STROKE 1 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (52.3810 119.0476) (52.3810 -33.3333) -INDEX 125 STROKE 3 CENTER 52.3810 RIGHT 104.7619 - OPEN 10 (40.4762 119.0476) (50.0000 114.2857) (54.7619 109.5238) - (59.5238 100.0000) (59.5238 90.4762) (54.7619 80.9524) (50.0000 76.1905) - (45.2381 66.6667) (45.2381 57.1429) (54.7619 47.6190) - OPEN 17 (50.0000 114.2857) (54.7619 104.7619) (54.7619 95.2381) - (50.0000 85.7143) (45.2381 80.9524) (40.4762 71.4286) (40.4762 61.9048) - (45.2381 52.3810) (64.2857 42.8571) (45.2381 33.3333) (40.4762 23.8095) - (40.4762 14.2857) (45.2381 4.7619) (50.0000 0.0000) (54.7619 -9.5238) - (54.7619 -19.0476) (50.0000 -28.5714) - OPEN 10 (54.7619 38.0952) (45.2381 28.5714) (45.2381 19.0476) - (50.0000 9.5238) (54.7619 4.7619) (59.5238 -4.7619) (59.5238 -14.2857) - (54.7619 -23.8095) (50.0000 -28.5714) (40.4762 -33.3333) -INDEX 126 STROKE 2 CENTER 52.3810 RIGHT 104.7619 - OPEN 11 (9.5238 28.5714) (9.5238 38.0952) (14.2857 52.3810) - (23.8095 57.1429) (33.3333 57.1429) (42.8571 52.3810) (61.9048 38.0952) - (71.4286 33.3333) (80.9524 33.3333) (90.4762 38.0952) (95.2381 47.6190) - OPEN 11 (9.5238 38.0952) (14.2857 47.6190) (23.8095 52.3810) - (33.3333 52.3810) (42.8571 47.6190) (61.9048 33.3333) (71.4286 28.5714) - (80.9524 28.5714) (90.4762 33.3333) (95.2381 47.6190) (95.2381 57.1429) -INDEX 127 STROKE 2 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (71.4286 100.0000) (33.3333 -33.3333) - OPEN 17 (47.6190 66.6667) (33.3333 61.9048) (23.8095 52.3810) - (19.0476 38.0952) (19.0476 23.8095) (23.8095 14.2857) (33.3333 4.7619) - (47.6190 0.0000) (57.1428 0.0000) (71.4286 4.7619) (80.9524 14.2857) - (85.7143 28.5714) (85.7143 42.8571) (80.9524 52.3810) (71.4286 61.9048) - (57.1428 66.6667) (47.6190 66.6667) diff --git a/lib/glut-3.7.6/lib/glut/ObjectType.mk b/lib/glut-3.7.6/lib/glut/ObjectType.mk deleted file mode 100644 index f94dc77f5..000000000 --- a/lib/glut-3.7.6/lib/glut/ObjectType.mk +++ /dev/null @@ -1,2 +0,0 @@ -LDOPTS = $(LDOPTS_32) -CSTYLE = $(CSTYLE_32) diff --git a/lib/glut-3.7.6/lib/glut/Roman.stroke b/lib/glut-3.7.6/lib/glut/Roman.stroke deleted file mode 100644 index 6defa76ac..000000000 --- a/lib/glut-3.7.6/lib/glut/Roman.stroke +++ /dev/null @@ -1,604 +0,0 @@ -## -# $XConsortium: Roman.src,v 5.2 91/07/21 16:42:23 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. - -# Roman Simplex font. - - FONTNAME Roman - TOP 119.0476 - BOTTOM -33.3333 - NUM_CH 128 - PROPERTIES 3 - - (CHARSET_REGISTRY ISO8859) - (CHARSET_ENCODING "1") - (SPACING P) - -INDEX 32 STROKE 0 CENTER 52.3810 RIGHT 104.7619 -INDEX 33 STROKE 2 CENTER 4.7619 RIGHT 9.5238 - OPEN 2 (4.7619 100.0000) (4.7619 33.3333) - OPEN 5 (4.7619 9.5238) (0.0000 4.7619) (4.7619 0.0000) - (9.5238 4.7619) (4.7619 9.5238) -INDEX 34 STROKE 2 CENTER 19.0476 RIGHT 38.0952 - OPEN 2 (0.0000 100.0000) (0.0000 66.6667) - OPEN 2 (38.0952 100.0000) (38.0952 66.6667) -INDEX 35 STROKE 4 CENTER 33.3333 RIGHT 71.4286 - OPEN 2 (38.0952 119.0476) (4.7619 -33.3333) - OPEN 2 (66.6667 119.0476) (33.3333 -33.3333) - OPEN 2 (4.7619 57.1429) (71.4286 57.1429) - OPEN 2 (0.0000 28.5714) (66.6667 28.5714) -INDEX 36 STROKE 3 CENTER 33.3333 RIGHT 66.6667 - OPEN 2 (23.8095 119.0476) (23.8095 -19.0476) - OPEN 2 (42.8571 119.0476) (42.8571 -19.0476) - OPEN 20 (66.6667 85.7143) (57.1429 95.2381) (42.8571 100.0000) - (23.8095 100.0000) (9.5238 95.2381) (0.0000 85.7143) (0.0000 76.1905) - (4.7619 66.6667) (9.5238 61.9048) (19.0476 57.1429) (47.6190 47.6190) - (57.1429 42.8571) (61.9048 38.0952) (66.6667 28.5714) (66.6667 14.2857) - (57.1429 4.7619) (42.8571 0.0000) (23.8095 0.0000) (9.5238 4.7619) - (0.0000 14.2857) -INDEX 37 STROKE 3 CENTER 42.8571 RIGHT 85.7143 - OPEN 2 (85.7143 100.0000) (0.0000 0.0000) - OPEN 16 (23.8095 100.0000) (33.3333 90.4762) (33.3333 80.9524) - (28.5714 71.4286) (19.0476 66.6667) (9.5238 66.6667) (0.0000 76.1905) - (0.0000 85.7143) (4.7619 95.2381) (14.2857 100.0000) (23.8095 100.0000) - (33.3333 95.2381) (47.6190 90.4762) (61.9048 90.4762) (76.1905 95.2381) - (85.7143 100.0000) - OPEN 11 (66.6667 33.3333) (57.1429 28.5714) (52.3810 19.0476) - (52.3810 9.5238) (61.9048 0.0000) (71.4286 0.0000) (80.9524 4.7619) - (85.7143 14.2857) (85.7143 23.8095) (76.1905 33.3333) (66.6667 33.3333) -INDEX 38 STROKE 1 CENTER 47.6190 RIGHT 95.2381 - OPEN 34 (95.2381 57.1429) (95.2381 61.9048) (90.4762 66.6667) - (85.7143 66.6667) (80.9524 61.9048) (76.1905 52.3810) (66.6667 28.5714) - (57.1429 14.2857) (47.6190 4.7619) (38.0952 0.0000) (19.0476 0.0000) - (9.5238 4.7619) (4.7619 9.5238) (0.0000 19.0476) (0.0000 28.5714) - (4.7619 38.0952) (9.5238 42.8571) (42.8571 61.9048) (47.6190 66.6667) - (52.3810 76.1905) (52.3810 85.7143) (47.6190 95.2381) (38.0952 100.0000) - (28.5714 95.2381) (23.8095 85.7143) (23.8095 76.1905) (28.5714 61.9048) - (38.0952 47.6190) (61.9048 14.2857) (71.4286 4.7619) (80.9524 0.0000) - (90.4762 0.0000) (95.2381 4.7619) (95.2381 9.5238) -INDEX 39 STROKE 1 CENTER 0.0000 RIGHT 0.0000 - OPEN 2 (0.0000 100.0000) (0.0000 66.6667) -INDEX 40 STROKE 1 CENTER 14.2857 RIGHT 33.3333 - OPEN 10 (33.3333 119.0476) (23.8095 109.5238) (14.2857 95.2381) - (4.7619 76.1905) (0.0000 52.3810) (0.0000 33.3333) (4.7619 9.5238) - (14.2857 -9.5238) (23.8095 -23.8095) (33.3333 -33.3333) -INDEX 41 STROKE 1 CENTER 19.0476 RIGHT 33.3333 - OPEN 10 (0.0000 119.0476) (9.5238 109.5238) (19.0476 95.2381) - (28.5714 76.1905) (33.3333 52.3810) (33.3333 33.3333) (28.5714 9.5238) - (19.0476 -9.5238) (9.5238 -23.8095) (0.0000 -33.3333) -INDEX 42 STROKE 3 CENTER 23.8095 RIGHT 47.6190 - OPEN 2 (23.8095 71.4286) (23.8095 14.2857) - OPEN 2 (0.0000 57.1429) (47.6190 28.5714) - OPEN 2 (47.6190 57.1429) (0.0000 28.5714) -INDEX 43 STROKE 2 CENTER 42.8571 RIGHT 85.7143 - OPEN 2 (42.8571 85.7143) (42.8571 0.0000) - OPEN 2 (0.0000 42.8571) (85.7143 42.8571) -INDEX 44 STROKE 1 CENTER 4.7619 RIGHT 9.5238 - OPEN 8 (9.5238 4.7619) (4.7619 0.0000) (0.0000 4.7619) - (4.7619 9.5238) (9.5238 4.7619) (9.5238 -4.7619) (4.7619 -14.2857) - (0.0000 -19.0476) -INDEX 45 STROKE 1 CENTER 42.8571 RIGHT 85.7143 - OPEN 2 (0.0000 42.8571) (85.7143 42.8571) -INDEX 46 STROKE 1 CENTER 4.7619 RIGHT 9.5238 - OPEN 5 (4.7619 9.5238) (0.0000 4.7619) (4.7619 0.0000) - (9.5238 4.7619) (4.7619 9.5238) -INDEX 47 STROKE 1 CENTER 33.3333 RIGHT 66.6667 - OPEN 2 (0.0000 -14.2857) (66.6667 100.0000) -INDEX 48 STROKE 1 CENTER 33.3333 RIGHT 66.6667 - OPEN 17 (28.5714 100.0000) (14.2857 95.2381) (4.7619 80.9524) - (0.0000 57.1429) (0.0000 42.8571) (4.7619 19.0476) (14.2857 4.7619) - (28.5714 0.0000) (38.0952 0.0000) (52.3810 4.7619) (61.9048 19.0476) - (66.6667 42.8571) (66.6667 57.1429) (61.9048 80.9524) (52.3810 95.2381) - (38.0952 100.0000) (28.5714 100.0000) -INDEX 49 STROKE 1 CENTER 19.0476 RIGHT 23.8095 - OPEN 4 (0.0000 80.9524) (9.5238 85.7143) (23.8095 100.0000) - (23.8095 0.0000) -INDEX 50 STROKE 1 CENTER 33.3333 RIGHT 66.6667 - OPEN 14 (4.7619 76.1905) (4.7619 80.9524) (9.5238 90.4762) - (14.2857 95.2381) (23.8095 100.0000) (42.8571 100.0000) (52.3810 95.2381) - (57.1429 90.4762) (61.9048 80.9524) (61.9048 71.4286) (57.1429 61.9048) - (47.6190 47.6190) (0.0000 0.0000) (66.6667 0.0000) -INDEX 51 STROKE 1 CENTER 33.3333 RIGHT 66.6667 - OPEN 15 (9.5238 100.0000) (61.9048 100.0000) (33.3333 61.9048) - (47.6190 61.9048) (57.1429 57.1429) (61.9048 52.3810) (66.6667 38.0952) - (66.6667 28.5714) (61.9048 14.2857) (52.3810 4.7619) (38.0952 0.0000) - (23.8095 0.0000) (9.5238 4.7619) (4.7619 9.5238) (0.0000 19.0476) -INDEX 52 STROKE 2 CENTER 33.3333 RIGHT 71.4286 - OPEN 3 (47.6190 100.0000) (0.0000 33.3333) (71.4286 33.3333) - OPEN 2 (47.6190 100.0000) (47.6190 0.0000) -INDEX 53 STROKE 1 CENTER 33.3333 RIGHT 66.6667 - OPEN 17 (57.1429 100.0000) (9.5238 100.0000) (4.7619 57.1429) - (9.5238 61.9048) (23.8095 66.6667) (38.0952 66.6667) (52.3810 61.9048) - (61.9048 52.3810) (66.6667 38.0952) (66.6667 28.5714) (61.9048 14.2857) - (52.3810 4.7619) (38.0952 0.0000) (23.8095 0.0000) (9.5238 4.7619) - (4.7619 9.5238) (0.0000 19.0476) -INDEX 54 STROKE 1 CENTER 28.5714 RIGHT 61.9048 - OPEN 23 (57.1429 85.7143) (52.3810 95.2381) (38.0952 100.0000) - (28.5714 100.0000) (14.2857 95.2381) (4.7619 80.9524) (0.0000 57.1429) - (0.0000 33.3333) (4.7619 14.2857) (14.2857 4.7619) (28.5714 0.0000) - (33.3333 0.0000) (47.6190 4.7619) (57.1429 14.2857) (61.9048 28.5714) - (61.9048 33.3333) (57.1429 47.6190) (47.6190 57.1429) (33.3333 61.9048) - (28.5714 61.9048) (14.2857 57.1429) (4.7619 47.6190) (0.0000 33.3333) -INDEX 55 STROKE 2 CENTER 33.3333 RIGHT 66.6667 - OPEN 2 (66.6667 100.0000) (19.0476 0.0000) - OPEN 2 (0.0000 100.0000) (66.6667 100.0000) -INDEX 56 STROKE 1 CENTER 33.3333 RIGHT 66.6667 - OPEN 29 (23.8095 100.0000) (9.5238 95.2381) (4.7619 85.7143) - (4.7619 76.1905) (9.5238 66.6667) (19.0476 61.9048) (38.0952 57.1429) - (52.3810 52.3810) (61.9048 42.8571) (66.6667 33.3333) (66.6667 19.0476) - (61.9048 9.5238) (57.1429 4.7619) (42.8571 0.0000) (23.8095 0.0000) - (9.5238 4.7619) (4.7619 9.5238) (0.0000 19.0476) (0.0000 33.3333) - (4.7619 42.8571) (14.2857 52.3810) (28.5714 57.1429) (47.6190 61.9048) - (57.1429 66.6667) (61.9048 76.1905) (61.9048 85.7143) (57.1429 95.2381) - (42.8571 100.0000) (23.8095 100.0000) -INDEX 57 STROKE 1 CENTER 33.3333 RIGHT 61.9048 - OPEN 23 (61.9048 66.6667) (57.1429 52.3810) (47.6190 42.8571) - (33.3333 38.0952) (28.5714 38.0952) (14.2857 42.8571) (4.7619 52.3810) - (0.0000 66.6667) (0.0000 71.4286) (4.7619 85.7143) (14.2857 95.2381) - (28.5714 100.0000) (33.3333 100.0000) (47.6190 95.2381) (57.1429 85.7143) - (61.9048 66.6667) (61.9048 42.8571) (57.1429 19.0476) (47.6190 4.7619) - (33.3333 0.0000) (23.8095 0.0000) (9.5238 4.7619) (4.7619 14.2857) -INDEX 58 STROKE 2 CENTER 4.7619 RIGHT 9.5238 - OPEN 5 (4.7619 66.6667) (0.0000 61.9048) (4.7619 57.1429) - (9.5238 61.9048) (4.7619 66.6667) - OPEN 5 (4.7619 9.5238) (0.0000 4.7619) (4.7619 0.0000) - (9.5238 4.7619) (4.7619 9.5238) -INDEX 59 STROKE 2 CENTER 4.7619 RIGHT 9.5238 - OPEN 5 (4.7619 66.6667) (0.0000 61.9048) (4.7619 57.1429) - (9.5238 61.9048) (4.7619 66.6667) - OPEN 8 (9.5238 4.7619) (4.7619 0.0000) (0.0000 4.7619) - (4.7619 9.5238) (9.5238 4.7619) (9.5238 -4.7619) (4.7619 -14.2857) - (0.0000 -19.0476) -INDEX 60 STROKE 1 CENTER 38.0952 RIGHT 76.1905 - OPEN 3 (76.1905 85.7143) (0.0000 42.8571) (76.1905 0.0000) -INDEX 61 STROKE 2 CENTER 42.8571 RIGHT 85.7143 - OPEN 2 (0.0000 57.1429) (85.7143 57.1429) - OPEN 2 (0.0000 28.5714) (85.7143 28.5714) -INDEX 62 STROKE 1 CENTER 38.0952 RIGHT 76.1905 - OPEN 3 (0.0000 85.7143) (76.1905 42.8571) (0.0000 0.0000) -INDEX 63 STROKE 2 CENTER 28.5714 RIGHT 57.1429 - OPEN 14 (0.0000 76.1905) (0.0000 80.9524) (4.7619 90.4762) - (9.5238 95.2381) (19.0476 100.0000) (38.0952 100.0000) (47.6190 95.2381) - (52.3810 90.4762) (57.1429 80.9524) (57.1429 71.4286) (52.3810 61.9048) - (47.6190 57.1429) (28.5714 47.6190) (28.5714 33.3333) - OPEN 5 (28.5714 9.5238) (23.8095 4.7619) (28.5714 0.0000) - (33.3333 4.7619) (28.5714 9.5238) -INDEX 64 STROKE 2 CENTER 28.5714 RIGHT 61.9048 - OPEN 8 (42.8571 52.3810) (33.3333 57.1429) (23.8095 57.1429) - (19.0476 47.6190) (19.0476 42.8571) (23.8095 33.3333) (33.3333 33.3333) - (42.8571 38.0952) - OPEN 19 (42.8571 57.1429) (42.8571 38.0952) (47.6190 33.3333) - (57.1429 33.3333) (61.9048 42.8571) (61.9048 47.6190) (57.1429 61.9048) - (47.6190 71.4286) (33.3333 76.1905) (28.5714 76.1905) (14.2857 71.4286) - (4.7619 61.9048) (0.0000 47.6190) (0.0000 42.8571) (4.7619 28.5714) - (14.2857 19.0476) (28.5714 14.2857) (33.3333 14.2857) (47.6190 19.0476) -INDEX 65 STROKE 3 CENTER 38.0952 RIGHT 76.1905 - OPEN 2 (38.0952 100.0000) (0.0000 0.0000) - OPEN 2 (38.0952 100.0000) (76.1905 0.0000) - OPEN 2 (14.2857 33.3333) (61.9048 33.3333) -INDEX 66 STROKE 3 CENTER 33.3333 RIGHT 66.6667 - OPEN 2 (0.0000 100.0000) (0.0000 0.0000) - OPEN 9 (0.0000 100.0000) (42.8571 100.0000) (57.1429 95.2381) - (61.9048 90.4762) (66.6667 80.9524) (66.6667 71.4286) (61.9048 61.9048) - (57.1429 57.1429) (42.8571 52.3810) - OPEN 10 (0.0000 52.3810) (42.8571 52.3810) (57.1429 47.6190) - (61.9048 42.8571) (66.6667 33.3333) (66.6667 19.0476) (61.9048 9.5238) - (57.1429 4.7619) (42.8571 0.0000) (0.0000 0.0000) -INDEX 67 STROKE 1 CENTER 33.3333 RIGHT 71.4286 - OPEN 18 (71.4286 76.1905) (66.6667 85.7143) (57.1429 95.2381) - (47.6190 100.0000) (28.5714 100.0000) (19.0476 95.2381) (9.5238 85.7143) - (4.7619 76.1905) (0.0000 61.9048) (0.0000 38.0952) (4.7619 23.8095) - (9.5238 14.2857) (19.0476 4.7619) (28.5714 0.0000) (47.6190 0.0000) - (57.1429 4.7619) (66.6667 14.2857) (71.4286 23.8095) -INDEX 68 STROKE 2 CENTER 33.3333 RIGHT 66.6667 - OPEN 2 (0.0000 100.0000) (0.0000 0.0000) - OPEN 12 (0.0000 100.0000) (33.3333 100.0000) (47.6190 95.2381) - (57.1429 85.7143) (61.9048 76.1905) (66.6667 61.9048) (66.6667 38.0952) - (61.9048 23.8095) (57.1429 14.2857) (47.6190 4.7619) (33.3333 0.0000) - (0.0000 0.0000) -INDEX 69 STROKE 4 CENTER 28.5714 RIGHT 61.9048 - OPEN 2 (0.0000 100.0000) (0.0000 0.0000) - OPEN 2 (0.0000 100.0000) (61.9048 100.0000) - OPEN 2 (0.0000 52.3810) (38.0952 52.3810) - OPEN 2 (0.0000 0.0000) (61.9048 0.0000) -INDEX 70 STROKE 3 CENTER 28.5714 RIGHT 61.9048 - OPEN 2 (0.0000 100.0000) (0.0000 0.0000) - OPEN 2 (0.0000 100.0000) (61.9048 100.0000) - OPEN 2 (0.0000 52.3810) (38.0952 52.3810) -INDEX 71 STROKE 2 CENTER 33.3333 RIGHT 71.4286 - OPEN 19 (71.4286 76.1905) (66.6667 85.7143) (57.1429 95.2381) - (47.6190 100.0000) (28.5714 100.0000) (19.0476 95.2381) (9.5238 85.7143) - (4.7619 76.1905) (0.0000 61.9048) (0.0000 38.0952) (4.7619 23.8095) - (9.5238 14.2857) (19.0476 4.7619) (28.5714 0.0000) (47.6190 0.0000) - (57.1429 4.7619) (66.6667 14.2857) (71.4286 23.8095) (71.4286 38.0952) - OPEN 2 (47.6190 38.0952) (71.4286 38.0952) -INDEX 72 STROKE 3 CENTER 33.3333 RIGHT 66.6667 - OPEN 2 (0.0000 100.0000) (0.0000 0.0000) - OPEN 2 (66.6667 100.0000) (66.6667 0.0000) - OPEN 2 (0.0000 52.3810) (66.6667 52.3810) -INDEX 73 STROKE 1 CENTER 0.0000 RIGHT 0.0000 - OPEN 2 (0.0000 100.0000) (0.0000 0.0000) -INDEX 74 STROKE 1 CENTER 28.5714 RIGHT 47.6190 - OPEN 10 (47.6190 100.0000) (47.6190 23.8095) (42.8571 9.5238) - (38.0952 4.7619) (28.5714 0.0000) (19.0476 0.0000) (9.5238 4.7619) - (4.7619 9.5238) (0.0000 23.8095) (0.0000 33.3333) -INDEX 75 STROKE 3 CENTER 33.3333 RIGHT 66.6667 - OPEN 2 (0.0000 100.0000) (0.0000 0.0000) - OPEN 2 (66.6667 100.0000) (0.0000 33.3333) - OPEN 2 (23.8095 57.1429) (66.6667 0.0000) -INDEX 76 STROKE 2 CENTER 28.5714 RIGHT 57.1429 - OPEN 2 (0.0000 100.0000) (0.0000 0.0000) - OPEN 2 (0.0000 0.0000) (57.1429 0.0000) -INDEX 77 STROKE 4 CENTER 38.0952 RIGHT 76.1905 - OPEN 2 (0.0000 100.0000) (0.0000 0.0000) - OPEN 2 (0.0000 100.0000) (38.0952 0.0000) - OPEN 2 (76.1905 100.0000) (38.0952 0.0000) - OPEN 2 (76.1905 100.0000) (76.1905 0.0000) -INDEX 78 STROKE 3 CENTER 33.3333 RIGHT 66.6667 - OPEN 2 (0.0000 100.0000) (0.0000 0.0000) - OPEN 2 (0.0000 100.0000) (66.6667 0.0000) - OPEN 2 (66.6667 100.0000) (66.6667 0.0000) -INDEX 79 STROKE 1 CENTER 38.0952 RIGHT 76.1905 - OPEN 21 (28.5714 100.0000) (19.0476 95.2381) (9.5238 85.7143) - (4.7619 76.1905) (0.0000 61.9048) (0.0000 38.0952) (4.7619 23.8095) - (9.5238 14.2857) (19.0476 4.7619) (28.5714 0.0000) (47.6190 0.0000) - (57.1429 4.7619) (66.6667 14.2857) (71.4286 23.8095) (76.1905 38.0952) - (76.1905 61.9048) (71.4286 76.1905) (66.6667 85.7143) (57.1429 95.2381) - (47.6190 100.0000) (28.5714 100.0000) -INDEX 80 STROKE 2 CENTER 33.3333 RIGHT 66.6667 - OPEN 2 (0.0000 100.0000) (0.0000 0.0000) - OPEN 10 (0.0000 100.0000) (42.8571 100.0000) (57.1429 95.2381) - (61.9048 90.4762) (66.6667 80.9524) (66.6667 66.6667) (61.9048 57.1429) - (57.1429 52.3810) (42.8571 47.6190) (0.0000 47.6190) -INDEX 81 STROKE 2 CENTER 38.0952 RIGHT 76.1905 - OPEN 21 (28.5714 100.0000) (19.0476 95.2381) (9.5238 85.7143) - (4.7619 76.1905) (0.0000 61.9048) (0.0000 38.0952) (4.7619 23.8095) - (9.5238 14.2857) (19.0476 4.7619) (28.5714 0.0000) (47.6190 0.0000) - (57.1429 4.7619) (66.6667 14.2857) (71.4286 23.8095) (76.1905 38.0952) - (76.1905 61.9048) (71.4286 76.1905) (66.6667 85.7143) (57.1429 95.2381) - (47.6190 100.0000) (28.5714 100.0000) - OPEN 2 (42.8571 19.0476) (71.4286 -9.5238) -INDEX 82 STROKE 3 CENTER 33.3333 RIGHT 66.6667 - OPEN 2 (0.0000 100.0000) (0.0000 0.0000) - OPEN 10 (0.0000 100.0000) (42.8571 100.0000) (57.1429 95.2381) - (61.9048 90.4762) (66.6667 80.9524) (66.6667 71.4286) (61.9048 61.9048) - (57.1429 57.1429) (42.8571 52.3810) (0.0000 52.3810) - OPEN 2 (33.3333 52.3810) (66.6667 0.0000) -INDEX 83 STROKE 1 CENTER 33.3333 RIGHT 66.6667 - OPEN 20 (66.6667 85.7143) (57.1429 95.2381) (42.8571 100.0000) - (23.8095 100.0000) (9.5238 95.2381) (0.0000 85.7143) (0.0000 76.1905) - (4.7619 66.6667) (9.5238 61.9048) (19.0476 57.1429) (47.6190 47.6190) - (57.1429 42.8571) (61.9048 38.0952) (66.6667 28.5714) (66.6667 14.2857) - (57.1429 4.7619) (42.8571 0.0000) (23.8095 0.0000) (9.5238 4.7619) - (0.0000 14.2857) -INDEX 84 STROKE 2 CENTER 33.3333 RIGHT 66.6667 - OPEN 2 (33.3333 100.0000) (33.3333 0.0000) - OPEN 2 (0.0000 100.0000) (66.6667 100.0000) -INDEX 85 STROKE 1 CENTER 33.3333 RIGHT 66.6667 - OPEN 10 (0.0000 100.0000) (0.0000 28.5714) (4.7619 14.2857) - (14.2857 4.7619) (28.5714 0.0000) (38.0952 0.0000) (52.3810 4.7619) - (61.9048 14.2857) (66.6667 28.5714) (66.6667 100.0000) -INDEX 86 STROKE 2 CENTER 38.0952 RIGHT 76.1905 - OPEN 2 (0.0000 100.0000) (38.0952 0.0000) - OPEN 2 (76.1905 100.0000) (38.0952 0.0000) -INDEX 87 STROKE 4 CENTER 47.6190 RIGHT 95.2381 - OPEN 2 (0.0000 100.0000) (23.8095 0.0000) - OPEN 2 (47.6190 100.0000) (23.8095 0.0000) - OPEN 2 (47.6190 100.0000) (71.4286 0.0000) - OPEN 2 (95.2381 100.0000) (71.4286 0.0000) -INDEX 88 STROKE 2 CENTER 33.3333 RIGHT 66.6667 - OPEN 2 (0.0000 100.0000) (66.6667 0.0000) - OPEN 2 (66.6667 100.0000) (0.0000 0.0000) -INDEX 89 STROKE 2 CENTER 38.0952 RIGHT 76.1905 - OPEN 3 (0.0000 100.0000) (38.0952 52.3810) (38.0952 0.0000) - OPEN 2 (76.1905 100.0000) (38.0952 52.3810) -INDEX 90 STROKE 3 CENTER 33.3333 RIGHT 66.6667 - OPEN 2 (66.6667 100.0000) (0.0000 0.0000) - OPEN 2 (0.0000 100.0000) (66.6667 100.0000) - OPEN 2 (0.0000 0.0000) (66.6667 0.0000) -INDEX 91 STROKE 4 CENTER 14.2857 RIGHT 33.3333 - OPEN 2 (0.0000 119.0476) (0.0000 -33.3333) - OPEN 2 (4.7619 119.0476) (4.7619 -33.3333) - OPEN 2 (0.0000 119.0476) (33.3333 119.0476) - OPEN 2 (0.0000 -33.3333) (33.3333 -33.3333) -INDEX 92 STROKE 1 CENTER 33.3333 RIGHT 66.6667 - OPEN 2 (0.0000 100.0000) (66.6667 -14.2857) -INDEX 93 STROKE 4 CENTER 19.0476 RIGHT 33.3333 - OPEN 2 (28.5714 119.0476) (28.5714 -33.3333) - OPEN 2 (33.3333 119.0476) (33.3333 -33.3333) - OPEN 2 (0.0000 119.0476) (33.3333 119.0476) - OPEN 2 (0.0000 -33.3333) (33.3333 -33.3333) -INDEX 94 STROKE 2 CENTER 38.0952 RIGHT 76.1905 - OPEN 2 (38.0952 109.5238) (0.0000 42.8571) - OPEN 2 (38.0952 109.5238) (76.1905 42.8571) -INDEX 95 STROKE 1 CENTER 52.3810 RIGHT 104.7619 - OPEN 5 (0.0000 -33.3333) (104.7619 -33.3333) (104.7619 -28.5714) - (0.0000 -28.5714) (0.0000 -33.3333) -INDEX 96 STROKE 2 CENTER 14.2857 RIGHT 28.5714 - OPEN 2 (4.7619 100.0000) (28.5714 71.4286) - OPEN 3 (4.7619 100.0000) (0.0000 95.2381) (28.5714 71.4286) -INDEX 97 STROKE 2 CENTER 28.5714 RIGHT 57.1429 - OPEN 2 (57.1429 66.6667) (57.1429 0.0000) - OPEN 14 (57.1429 52.3810) (47.6190 61.9048) (38.0952 66.6667) - (23.8095 66.6667) (14.2857 61.9048) (4.7619 52.3810) (0.0000 38.0952) - (0.0000 28.5714) (4.7619 14.2857) (14.2857 4.7619) (23.8095 0.0000) - (38.0952 0.0000) (47.6190 4.7619) (57.1429 14.2857) -INDEX 98 STROKE 2 CENTER 28.5714 RIGHT 57.1429 - OPEN 2 (0.0000 100.0000) (0.0000 0.0000) - OPEN 14 (0.0000 52.3810) (9.5238 61.9048) (19.0476 66.6667) - (33.3333 66.6667) (42.8571 61.9048) (52.3810 52.3810) (57.1429 38.0952) - (57.1429 28.5714) (52.3810 14.2857) (42.8571 4.7619) (33.3333 0.0000) - (19.0476 0.0000) (9.5238 4.7619) (0.0000 14.2857) -INDEX 99 STROKE 1 CENTER 28.5714 RIGHT 57.1429 - OPEN 14 (57.1429 52.3810) (47.6190 61.9048) (38.0952 66.6667) - (23.8095 66.6667) (14.2857 61.9048) (4.7619 52.3810) (0.0000 38.0952) - (0.0000 28.5714) (4.7619 14.2857) (14.2857 4.7619) (23.8095 0.0000) - (38.0952 0.0000) (47.6190 4.7619) (57.1429 14.2857) -INDEX 100 STROKE 2 CENTER 28.5714 RIGHT 57.1429 - OPEN 2 (57.1429 100.0000) (57.1429 0.0000) - OPEN 14 (57.1429 52.3810) (47.6190 61.9048) (38.0952 66.6667) - (23.8095 66.6667) (14.2857 61.9048) (4.7619 52.3810) (0.0000 38.0952) - (0.0000 28.5714) (4.7619 14.2857) (14.2857 4.7619) (23.8095 0.0000) - (38.0952 0.0000) (47.6190 4.7619) (57.1429 14.2857) -INDEX 101 STROKE 1 CENTER 28.5714 RIGHT 57.1429 - OPEN 17 (0.0000 38.0952) (57.1429 38.0952) (57.1429 47.6190) - (52.3810 57.1429) (47.6190 61.9048) (38.0952 66.6667) (23.8095 66.6667) - (14.2857 61.9048) (4.7619 52.3810) (0.0000 38.0952) (0.0000 28.5714) - (4.7619 14.2857) (14.2857 4.7619) (23.8095 0.0000) (38.0952 0.0000) - (47.6190 4.7619) (57.1429 14.2857) -INDEX 102 STROKE 2 CENTER 14.2857 RIGHT 38.0952 - OPEN 5 (38.0952 100.0000) (28.5714 100.0000) (19.0476 95.2381) - (14.2857 80.9524) (14.2857 0.0000) - OPEN 2 (0.0000 66.6667) (33.3333 66.6667) -INDEX 103 STROKE 2 CENTER 28.5714 RIGHT 57.1429 - OPEN 7 (57.1429 66.6667) (57.1429 -9.5238) (52.3810 -23.8095) - (47.6190 -28.5714) (38.0952 -33.3333) (23.8095 -33.3333) (14.2857 -28.5714) - OPEN 14 (57.1429 52.3810) (47.6190 61.9048) (38.0952 66.6667) - (23.8095 66.6667) (14.2857 61.9048) (4.7619 52.3810) (0.0000 38.0952) - (0.0000 28.5714) (4.7619 14.2857) (14.2857 4.7619) (23.8095 0.0000) - (38.0952 0.0000) (47.6190 4.7619) (57.1429 14.2857) -INDEX 104 STROKE 2 CENTER 23.8095 RIGHT 52.3810 - OPEN 2 (0.0000 100.0000) (0.0000 0.0000) - OPEN 7 (0.0000 47.6190) (14.2857 61.9048) (23.8095 66.6667) - (38.0952 66.6667) (47.6190 61.9048) (52.3810 47.6190) (52.3810 0.0000) -INDEX 105 STROKE 2 CENTER 4.7619 RIGHT 9.5238 - OPEN 5 (0.0000 100.0000) (4.7619 95.2381) (9.5238 100.0000) - (4.7619 104.7619) (0.0000 100.0000) - OPEN 2 (4.7619 66.6667) (4.7619 0.0000) -INDEX 106 STROKE 2 CENTER 19.0476 RIGHT 28.5714 - OPEN 5 (19.0476 100.0000) (23.8095 95.2381) (28.5714 100.0000) - (23.8095 104.7619) (19.0476 100.0000) - OPEN 5 (23.8095 66.6667) (23.8095 -14.2857) (19.0476 -28.5714) - (9.5238 -33.3333) (0.0000 -33.3333) -INDEX 107 STROKE 3 CENTER 23.8095 RIGHT 52.3810 - OPEN 2 (0.0000 100.0000) (0.0000 0.0000) - OPEN 2 (47.6190 66.6667) (0.0000 19.0476) - OPEN 2 (19.0476 38.0952) (52.3810 0.0000) -INDEX 108 STROKE 1 CENTER 0.0000 RIGHT 0.0000 - OPEN 2 (0.0000 100.0000) (0.0000 0.0000) -INDEX 109 STROKE 3 CENTER 52.3810 RIGHT 104.7619 - OPEN 2 (0.0000 66.6667) (0.0000 0.0000) - OPEN 7 (0.0000 47.6190) (14.2857 61.9048) (23.8095 66.6667) - (38.0952 66.6667) (47.6190 61.9048) (52.3810 47.6190) (52.3810 0.0000) - OPEN 7 (52.3810 47.6190) (66.6667 61.9048) (76.1905 66.6667) - (90.4762 66.6667) (100.0000 61.9048) (104.7619 47.6190) (104.7619 0.0000) -INDEX 110 STROKE 2 CENTER 23.8095 RIGHT 52.3810 - OPEN 2 (0.0000 66.6667) (0.0000 0.0000) - OPEN 7 (0.0000 47.6190) (14.2857 61.9048) (23.8095 66.6667) - (38.0952 66.6667) (47.6190 61.9048) (52.3810 47.6190) (52.3810 0.0000) -INDEX 111 STROKE 1 CENTER 28.5714 RIGHT 61.9048 - OPEN 17 (23.8095 66.6667) (14.2857 61.9048) (4.7619 52.3810) - (0.0000 38.0952) (0.0000 28.5714) (4.7619 14.2857) (14.2857 4.7619) - (23.8095 0.0000) (38.0952 0.0000) (47.6190 4.7619) (57.1429 14.2857) - (61.9048 28.5714) (61.9048 38.0952) (57.1429 52.3810) (47.6190 61.9048) - (38.0952 66.6667) (23.8095 66.6667) -INDEX 112 STROKE 2 CENTER 28.5714 RIGHT 57.1429 - OPEN 2 (0.0000 66.6667) (0.0000 -33.3333) - OPEN 14 (0.0000 52.3810) (9.5238 61.9048) (19.0476 66.6667) - (33.3333 66.6667) (42.8571 61.9048) (52.3810 52.3810) (57.1429 38.0952) - (57.1429 28.5714) (52.3810 14.2857) (42.8571 4.7619) (33.3333 0.0000) - (19.0476 0.0000) (9.5238 4.7619) (0.0000 14.2857) -INDEX 113 STROKE 2 CENTER 28.5714 RIGHT 57.1429 - OPEN 2 (57.1429 66.6667) (57.1429 -33.3333) - OPEN 14 (57.1429 52.3810) (47.6190 61.9048) (38.0952 66.6667) - (23.8095 66.6667) (14.2857 61.9048) (4.7619 52.3810) (0.0000 38.0952) - (0.0000 28.5714) (4.7619 14.2857) (14.2857 4.7619) (23.8095 0.0000) - (38.0952 0.0000) (47.6190 4.7619) (57.1429 14.2857) -INDEX 114 STROKE 2 CENTER 14.2857 RIGHT 38.0952 - OPEN 2 (0.0000 66.6667) (0.0000 0.0000) - OPEN 5 (0.0000 38.0952) (4.7619 52.3810) (14.2857 61.9048) - (23.8095 66.6667) (38.0952 66.6667) -INDEX 115 STROKE 1 CENTER 23.8095 RIGHT 52.3810 - OPEN 17 (52.3810 52.3810) (47.6190 61.9048) (33.3333 66.6667) - (19.0476 66.6667) (4.7619 61.9048) (0.0000 52.3810) (4.7619 42.8571) - (14.2857 38.0952) (38.0952 33.3333) (47.6190 28.5714) (52.3810 19.0476) - (52.3810 14.2857) (47.6190 4.7619) (33.3333 0.0000) (19.0476 0.0000) - (4.7619 4.7619) (0.0000 14.2857) -INDEX 116 STROKE 2 CENTER 14.2857 RIGHT 38.0952 - OPEN 5 (14.2857 100.0000) (14.2857 19.0476) (19.0476 4.7619) - (28.5714 0.0000) (38.0952 0.0000) - OPEN 2 (0.0000 66.6667) (33.3333 66.6667) -INDEX 117 STROKE 2 CENTER 23.8095 RIGHT 52.3810 - OPEN 7 (0.0000 66.6667) (0.0000 19.0476) (4.7619 4.7619) - (14.2857 0.0000) (28.5714 0.0000) (38.0952 4.7619) (52.3810 19.0476) - OPEN 2 (52.3810 66.6667) (52.3810 0.0000) -INDEX 118 STROKE 2 CENTER 28.5714 RIGHT 57.1429 - OPEN 2 (0.0000 66.6667) (28.5714 0.0000) - OPEN 2 (57.1429 66.6667) (28.5714 0.0000) -INDEX 119 STROKE 4 CENTER 38.0952 RIGHT 76.1905 - OPEN 2 (0.0000 66.6667) (19.0476 0.0000) - OPEN 2 (38.0952 66.6667) (19.0476 0.0000) - OPEN 2 (38.0952 66.6667) (57.1429 0.0000) - OPEN 2 (76.1905 66.6667) (57.1429 0.0000) -INDEX 120 STROKE 2 CENTER 23.8095 RIGHT 52.3810 - OPEN 2 (0.0000 66.6667) (52.3810 0.0000) - OPEN 2 (52.3810 66.6667) (0.0000 0.0000) -INDEX 121 STROKE 2 CENTER 33.3333 RIGHT 61.9048 - OPEN 2 (4.7619 66.6667) (33.3333 0.0000) - OPEN 6 (61.9048 66.6667) (33.3333 0.0000) (23.8095 -19.0476) - (14.2857 -28.5714) (4.7619 -33.3333) (0.0000 -33.3333) -INDEX 122 STROKE 3 CENTER 23.8095 RIGHT 52.3810 - OPEN 2 (52.3810 66.6667) (0.0000 0.0000) - OPEN 2 (0.0000 66.6667) (52.3810 66.6667) - OPEN 2 (0.0000 0.0000) (52.3810 0.0000) -INDEX 123 STROKE 3 CENTER 14.2857 RIGHT 23.8095 - OPEN 10 (23.8095 119.0476) (14.2857 114.2857) (9.5238 109.5238) - (4.7619 100.0000) (4.7619 90.4762) (9.5238 80.9524) (14.2857 76.1905) - (19.0476 66.6667) (19.0476 57.1429) (9.5238 47.6190) - OPEN 17 (14.2857 114.2857) (9.5238 104.7619) (9.5238 95.2381) - (14.2857 85.7143) (19.0476 80.9524) (23.8095 71.4286) (23.8095 61.9048) - (19.0476 52.3810) (0.0000 42.8571) (19.0476 33.3333) (23.8095 23.8095) - (23.8095 14.2857) (19.0476 4.7619) (14.2857 0.0000) (9.5238 -9.5238) - (9.5238 -19.0476) (14.2857 -28.5714) - OPEN 10 (9.5238 38.0952) (19.0476 28.5714) (19.0476 19.0476) - (14.2857 9.5238) (9.5238 4.7619) (4.7619 -4.7619) (4.7619 -14.2857) - (9.5238 -23.8095) (14.2857 -28.5714) (23.8095 -33.3333) -INDEX 124 STROKE 1 CENTER 0.0000 RIGHT 0.0000 - OPEN 2 (0.0000 119.0476) (0.0000 -33.3333) -INDEX 125 STROKE 3 CENTER 9.5238 RIGHT 23.8095 - OPEN 10 (0.0000 119.0476) (9.5238 114.2857) (14.2857 109.5238) - (19.0476 100.0000) (19.0476 90.4762) (14.2857 80.9524) (9.5238 76.1905) - (4.7619 66.6667) (4.7619 57.1429) (14.2857 47.6190) - OPEN 17 (9.5238 114.2857) (14.2857 104.7619) (14.2857 95.2381) - (9.5238 85.7143) (4.7619 80.9524) (0.0000 71.4286) (0.0000 61.9048) - (4.7619 52.3810) (23.8095 42.8571) (4.7619 33.3333) (0.0000 23.8095) - (0.0000 14.2857) (4.7619 4.7619) (9.5238 0.0000) (14.2857 -9.5238) - (14.2857 -19.0476) (9.5238 -28.5714) - OPEN 10 (14.2857 38.0952) (4.7619 28.5714) (4.7619 19.0476) - (9.5238 9.5238) (14.2857 4.7619) (19.0476 -4.7619) (19.0476 -14.2857) - (14.2857 -23.8095) (9.5238 -28.5714) (0.0000 -33.3333) -INDEX 126 STROKE 2 CENTER 42.8571 RIGHT 85.7143 - OPEN 11 (0.0000 28.5714) (0.0000 38.0952) (4.7619 52.3810) - (14.2857 57.1429) (23.8095 57.1429) (33.3333 52.3810) (52.3810 38.0952) - (61.9048 33.3333) (71.4286 33.3333) (80.9524 38.0952) (85.7143 47.6190) - OPEN 11 (0.0000 38.0952) (4.7619 47.6190) (14.2857 52.3810) - (23.8095 52.3810) (33.3333 47.6190) (52.3810 33.3333) (61.9048 28.5714) - (71.4286 28.5714) (80.9524 33.3333) (85.7143 47.6190) (85.7143 57.1429) -INDEX 127 STROKE 2 CENTER 33.3333 RIGHT 66.6667 - OPEN 2 (52.3810 100.0000) (14.2857 -33.3333) - OPEN 17 (28.5714 66.6667) (14.2857 61.9048) (4.7619 52.3810) - (0.0000 38.0952) (0.0000 23.8095) (4.7619 14.2857) (14.2857 4.7619) - (28.5714 0.0000) (38.0952 0.0000) (52.3810 4.7619) (61.9048 14.2857) - (66.6667 28.5714) (66.6667 42.8571) (61.9048 52.3810) (52.3810 61.9048) - (38.0952 66.6667) (28.5714 66.6667) - - - -#/* NCGA GRAFNET:SANS-SERIF NORMAL*/ - -BEARING 32 L_SPACE 0.0 WIDTH 20.0 R_SPACE 0.0 -BEARING 33 L_SPACE 8.62 WIDTH 13.64 R_SPACE 8.48 -BEARING 34 L_SPACE 4.02 WIDTH 32.86 R_SPACE 9.32 -BEARING 35 L_SPACE 3.2 WIDTH 68.94 R_SPACE 4.86 -BEARING 36 L_SPACE 4.82 WIDTH 67.44 R_SPACE 4.72 -BEARING 37 L_SPACE 6.36 WIDTH 112.38 R_SPACE 4.5 -BEARING 38 L_SPACE 5.98 WIDTH 82.02 R_SPACE 0.54 -BEARING 39 L_SPACE 4.44 WIDTH 13.36 R_SPACE 9.18 -BEARING 40 L_SPACE 7.58 WIDTH 24.72 R_SPACE 6.26 -BEARING 41 L_SPACE 5.28 WIDTH 24.34 R_SPACE 8.92 -BEARING 42 L_SPACE 6.96 WIDTH 42.06 R_SPACE 4.86 -BEARING 43 L_SPACE 5.98 WIDTH 96.36 R_SPACE 5.56 -BEARING 44 L_SPACE 8.76 WIDTH 14.2 R_SPACE 7.78 -BEARING 45 L_SPACE 7.38 WIDTH 38.84 R_SPACE 7.66 -BEARING 46 L_SPACE 8.34 WIDTH 13.78 R_SPACE 8.62 -BEARING 47 L_SPACE 7.24 WIDTH 38.44 R_SPACE 8.2 -BEARING 48 L_SPACE 4.98 WIDTH 66.58 R_SPACE 5.42 -BEARING 49 L_SPACE 11.82 WIDTH 34.26 R_SPACE 30.9 -BEARING 50 L_SPACE 5.42 WIDTH 66.0 R_SPACE 5.56 -BEARING 51 L_SPACE 5.0 WIDTH 66.62 R_SPACE 5.38 -BEARING 52 L_SPACE 3.88 WIDTH 68.24 R_SPACE 4.86 -BEARING 53 L_SPACE 4.86 WIDTH 65.96 R_SPACE 6.16 -BEARING 54 L_SPACE 5.58 WIDTH 65.08 R_SPACE 6.32 -BEARING 55 L_SPACE 5.56 WIDTH 66.42 R_SPACE 5.0 -BEARING 56 L_SPACE 5.6 WIDTH 65.98 R_SPACE 5.4 -BEARING 57 L_SPACE 6.6 WIDTH 64.82 R_SPACE 5.56 -BEARING 58 L_SPACE 9.32 WIDTH 14.06 R_SPACE 7.38 -BEARING 59 L_SPACE 8.2 WIDTH 13.96 R_SPACE 8.58 -BEARING 60 L_SPACE 3.06 WIDTH 102.5 R_SPACE 2.36 -BEARING 61 L_SPACE 5.7 WIDTH 96.36 R_SPACE 5.84 -BEARING 62 L_SPACE 2.78 WIDTH 102.5 R_SPACE 2.64 -BEARING 63 L_SPACE 8.42 WIDTH 60.22 R_SPACE 8.34 -BEARING 64 L_SPACE 6.36 WIDTH 126.24 R_SPACE 6.1 -BEARING 65 L_SPACE 2.5 WIDTH 88.16 R_SPACE 1.8 -BEARING 66 L_SPACE 11.42 WIDTH 75.5 R_SPACE 5.54 -BEARING 67 L_SPACE 6.66 WIDTH 87.06 R_SPACE 6.4 -BEARING 68 L_SPACE 11.96 WIDTH 81.48 R_SPACE 6.66 -BEARING 69 L_SPACE 11.42 WIDTH 72.28 R_SPACE 4.86 -BEARING 70 L_SPACE 11.42 WIDTH 67.96 R_SPACE 5.42 -BEARING 71 L_SPACE 7.06 WIDTH 89.56 R_SPACE 11.28 -BEARING 72 L_SPACE 11.42 WIDTH 77.7 R_SPACE 11.0 -BEARING 73 L_SPACE 10.86 WIDTH 13.36 R_SPACE 10.44 -BEARING 74 L_SPACE 2.5 WIDTH 56.96 R_SPACE 9.88 -BEARING 75 L_SPACE 11.28 WIDTH 79.8 R_SPACE 1.38 -BEARING 76 L_SPACE 11.68 WIDTH 62.8 R_SPACE 2.5 -BEARING 77 L_SPACE 10.86 WIDTH 94.56 R_SPACE 10.16 -BEARING 78 L_SPACE 11.14 WIDTH 77.98 R_SPACE 11.0 -BEARING 79 L_SPACE 6.24 WIDTH 95.28 R_SPACE 6.4 -BEARING 80 L_SPACE 12.1 WIDTH 73.44 R_SPACE 6.9 -BEARING 81 L_SPACE 5.3 WIDTH 96.0 R_SPACE 6.6 -BEARING 82 L_SPACE 11.68 WIDTH 80.64 R_SPACE 4.02 -BEARING 83 L_SPACE 8.0 WIDTH 78.28 R_SPACE 6.16 -BEARING 84 L_SPACE 2.36 WIDTH 79.52 R_SPACE 2.92 -BEARING 85 L_SPACE 11.54 WIDTH 77.28 R_SPACE 11.28 -BEARING 86 L_SPACE 2.36 WIDTH 87.04 R_SPACE 3.06 -BEARING 87 L_SPACE 2.22 WIDTH 125.76 R_SPACE 3.06 -BEARING 88 L_SPACE 2.5 WIDTH 86.76 R_SPACE 3.2 -BEARING 89 L_SPACE 1.52 WIDTH 88.98 R_SPACE 1.94 -BEARING 90 L_SPACE 2.5 WIDTH 77.7 R_SPACE 4.58 -BEARING 91 L_SPACE 7.78 WIDTH 25.76 R_SPACE 5.0 -BEARING 92 L_SPACE 5.84 WIDTH 73.24 R_SPACE 5.7 -BEARING 93 L_SPACE 4.44 WIDTH 25.48 R_SPACE 8.62 -BEARING 94 L_SPACE 5.98 WIDTH 55.28 R_SPACE 8.06 -BEARING 95 L_SPACE -1.1 WIDTH 70.04 R_SPACE 0.4 -BEARING 96 L_SPACE 28.26 WIDTH 25.9 R_SPACE 26.74 -BEARING 97 L_SPACE 6.68 WIDTH 67.54 R_SPACE 2.78 -BEARING 98 L_SPACE 8.76 WIDTH 63.66 R_SPACE 4.56 -BEARING 99 L_SPACE 5.52 WIDTH 61.46 R_SPACE 6.26 -BEARING 100 L_SPACE 4.64 WIDTH 63.88 R_SPACE 8.48 -BEARING 101 L_SPACE 5.72 WIDTH 65.62 R_SPACE 5.66 -BEARING 102 L_SPACE 0.68 WIDTH 34.12 R_SPACE -0.12 -BEARING 103 L_SPACE 5.36 WIDTH 63.16 R_SPACE 8.48 -BEARING 104 L_SPACE 9.6 WIDTH 58.34 R_SPACE 9.04 -BEARING 105 L_SPACE 10.02 WIDTH 11.42 R_SPACE 9.32 -BEARING 106 L_SPACE -1.66 WIDTH 23.1 R_SPACE 9.32 -BEARING 107 L_SPACE 9.6 WIDTH 59.18 R_SPACE 0.54 -BEARING 108 L_SPACE 10.02 WIDTH 11.42 R_SPACE 9.32 -BEARING 109 L_SPACE 9.6 WIDTH 96.36 R_SPACE 9.6 -BEARING 110 L_SPACE 9.18 WIDTH 58.48 R_SPACE 9.32 -BEARING 111 L_SPACE 4.98 WIDTH 67.14 R_SPACE 4.86 -BEARING 112 L_SPACE 9.46 WIDTH 63.34 R_SPACE 4.2 -BEARING 113 L_SPACE 4.84 WIDTH 63.38 R_SPACE 8.76 -BEARING 114 L_SPACE 9.46 WIDTH 34.8 R_SPACE 1.94 -BEARING 115 L_SPACE 4.7 WIDTH 59.4 R_SPACE 5.24 -BEARING 116 L_SPACE 0.54 WIDTH 33.42 R_SPACE 0.68 -BEARING 117 L_SPACE 9.46 WIDTH 58.2 R_SPACE 9.32 -BEARING 118 L_SPACE 1.8 WIDTH 65.86 R_SPACE 1.66 -BEARING 119 L_SPACE 2.5 WIDTH 95.82 R_SPACE 1.8 -BEARING 120 L_SPACE 1.66 WIDTH 65.32 R_SPACE 2.36 -BEARING 121 L_SPACE 1.8 WIDTH 65.18 R_SPACE 2.36 -BEARING 122 L_SPACE 4.44 WIDTH 59.88 R_SPACE 5.0 -BEARING 123 L_SPACE 7.38 WIDTH 36.06 R_SPACE 10.44 -BEARING 124 L_SPACE 11.54 WIDTH 6.96 R_SPACE 12.24 -BEARING 125 L_SPACE 9.18 WIDTH 36.2 R_SPACE 8.48 -BEARING 126 L_SPACE 2.92 WIDTH 102.36 R_SPACE 2.64 - diff --git a/lib/glut-3.7.6/lib/glut/capturexfont.c b/lib/glut-3.7.6/lib/glut/capturexfont.c deleted file mode 100644 index 491d62f3c..000000000 --- a/lib/glut-3.7.6/lib/glut/capturexfont.c +++ /dev/null @@ -1,352 +0,0 @@ - -/* 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 */ - -#include -#include -#include -#include -#include -#include -#include - -#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; -} diff --git a/lib/glut-3.7.6/lib/glut/glut.def b/lib/glut-3.7.6/lib/glut/glut.def deleted file mode 100644 index 94da6ab85..000000000 --- a/lib/glut-3.7.6/lib/glut/glut.def +++ /dev/null @@ -1,126 +0,0 @@ -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 -; __glutSetFCB -; __glutGetFCB - diff --git a/lib/glut-3.7.6/lib/glut/glut.ico b/lib/glut-3.7.6/lib/glut/glut.ico deleted file mode 100644 index ffe391db4538225a3a6ddb6508d2854d2f57bbf1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3638 zcmeHIJ#5=n5Iz^F(2b82-NX`E}eBYx1;QKwmr{Tb-!JrQe=x{io;c!TYhley07zv2~dx^_? zaQO_JdXSc)buFo@>q;T869|z%#_FIpSK5 zj9QLNo&zWHWzq#|%Vh9nvh-!L0j`z6mB5wITLM?2jv=@*xH9_6WE*Abm}TO%3V485 zP^*xsSI9Cds8>*{BCjH^lA&v48X982)Sv+xxwZyA)B)G7A?E1e&<5xMG@%PkuuNzI zbiuK8ja~qH5@-s% zH`W!$>3|EhNGs5V~}vO@TgLYSi&}?_$qpy!98_PR`*o^LDG%Y#Hqj*MFr~6jY?R4zx_IwixtN|-ziS-pXy0XuoVfq|VaUFH^W*C4$%X=xmH1aXJX3km zuKxUTr&(`5`o3P@-PqV@wc64XY^`iPQy;0D>X&P!g$iH&R$jTGmRTybz1@&fGGlio zNz3Qk@f+D}{A-?PPxZCfdL}$eT4vD)lEfEc*@a&+b3du^Z=&^Ann=PGL3fe zNxQi(HI02^Z~xQ$?%EwK9$vqfmgT4#D^A>*SJTmi{;aSco`R!6eb{_|B;(g@<9#Mc zdqo91tZwY=HX4oBPfH7%lT{J(m4u9A1eVq&e(9+3?VGLp>+6rV__3Xj%KtsM&=3DP T4u@HHrk&&Re{4B(^Ks!XYgg7= diff --git a/lib/glut-3.7.6/lib/glut/glut.rc b/lib/glut-3.7.6/lib/glut/glut.rc deleted file mode 100644 index 774918e3b..000000000 --- a/lib/glut-3.7.6/lib/glut/glut.rc +++ /dev/null @@ -1 +0,0 @@ -GLUT_ICON ICON DISCARDABLE "glut.ico" diff --git a/lib/glut-3.7.6/lib/glut/glut32.dsp b/lib/glut-3.7.6/lib/glut/glut32.dsp deleted file mode 100644 index 305d0b272..000000000 --- a/lib/glut-3.7.6/lib/glut/glut32.dsp +++ /dev/null @@ -1,351 +0,0 @@ -# Microsoft Developer Studio Project File - Name="glut32" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 - -CFG=glut32 - 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 "glut32.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 "glut32.mak" CFG="glut32 - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "glut32 - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "glut32 - 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)" == "glut32 - 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 "GLUT32_EXPORTS" /YX /FD /c -# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GLUT32_EXPORTS" /U "GLUT_USE_SGI_OPENGL" /YX /FD /c -# 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 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib winmm.lib glu32.lib opengl32.lib /nologo /dll /machine:I386 /nodefaultlib:"glut32.lib" -# Begin Special Build Tool -TargetDir=.\Release -SOURCE="$(InputPath)" -PostBuild_Desc=Copying libraries, headers & dll's... -PostBuild_Cmds=copy $(TARGETDIR)\glut32.dll %WINDIR%\SYSTEM copy $(TARGETDIR)\glut32.lib "$(MSDevDir)\..\..\VC98\lib" copy ..\..\include\GL\glut.h "$(MSDevDir)\..\..\VC98\include\GL" -# End Special Build Tool - -!ELSEIF "$(CFG)" == "glut32 - 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 "GLUT32_EXPORTS" /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GLUT32_EXPORTS" /YX /FD /GZ /c -# 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 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib winmm.lib glu32.lib opengl32.lib /nologo /dll /debug /machine:I386 /nodefaultlib:"glut32.lib" /pdbtype:sept -# Begin Special Build Tool -TargetDir=.\Debug -SOURCE="$(InputPath)" -PostBuild_Desc=Copying libraries, headers & dll's... -PostBuild_Cmds=copy $(TARGETDIR)\glut32.dll %WINDIR%\SYSTEM32 copy $(TARGETDIR)\glut32.lib "$(MSDevDir)\..\..\VC98\lib" copy ..\..\include\GL\glut.h "$(MSDevDir)\..\..\VC98\include\GL" -# End Special Build Tool - -!ENDIF - -# Begin Target - -# Name "glut32 - Win32 Release" -# Name "glut32 - Win32 Debug" -# Begin Source File - -SOURCE=.\glut.def -# End Source File -# Begin Source File - -SOURCE=..\..\include\Gl\glut.h -# End Source File -# Begin Source File - -SOURCE=.\glut.ico -# End Source File -# Begin Source File - -SOURCE=.\glut.rc -# End Source File -# Begin Source File - -SOURCE=.\glut_8x13.c -# End Source File -# Begin Source File - -SOURCE=.\glut_9x15.c -# End Source File -# Begin Source File - -SOURCE=.\glut_bitmap.c -# End Source File -# Begin Source File - -SOURCE=.\glut_bwidth.c -# End Source File -# Begin Source File - -SOURCE=.\glut_cindex.c -# End Source File -# Begin Source File - -SOURCE=.\glut_cmap.c -# End Source File -# Begin Source File - -SOURCE=.\glut_cursor.c -# End Source File -# Begin Source File - -SOURCE=.\glut_dials.c -# End Source File -# Begin Source File - -SOURCE=.\glut_dstr.c -# End Source File -# Begin Source File - -SOURCE=.\glut_event.c -# End Source File -# Begin Source File - -SOURCE=.\glut_ext.c -# End Source File -# Begin Source File - -SOURCE=.\glut_fcb.c -# End Source File -# Begin Source File - -SOURCE=.\glut_fullscrn.c -# End Source File -# Begin Source File - -SOURCE=.\glut_gamemode.c -# End Source File -# Begin Source File - -SOURCE=.\glut_get.c -# End Source File -# Begin Source File - -SOURCE=.\glut_glxext.c -# End Source File -# Begin Source File - -SOURCE=.\glut_hel10.c -# End Source File -# Begin Source File - -SOURCE=.\glut_hel12.c -# End Source File -# Begin Source File - -SOURCE=.\glut_hel18.c -# End Source File -# Begin Source File - -SOURCE=.\glut_init.c -# End Source File -# Begin Source File - -SOURCE=.\glut_input.c -# End Source File -# Begin Source File - -SOURCE=.\glut_joy.c -# End Source File -# Begin Source File - -SOURCE=.\glut_key.c -# End Source File -# Begin Source File - -SOURCE=.\glut_keyctrl.c -# End Source File -# Begin Source File - -SOURCE=.\glut_keyup.c -# End Source File -# Begin Source File - -SOURCE=.\glut_mesa.c -# End Source File -# Begin Source File - -SOURCE=.\glut_modifier.c -# End Source File -# Begin Source File - -SOURCE=.\glut_mroman.c -# End Source File -# Begin Source File - -SOURCE=.\glut_overlay.c -# End Source File -# Begin Source File - -SOURCE=.\glut_roman.c -# End Source File -# Begin Source File - -SOURCE=.\glut_shapes.c -# End Source File -# Begin Source File - -SOURCE=.\glut_space.c -# End Source File -# Begin Source File - -SOURCE=.\glut_stroke.c -# End Source File -# Begin Source File - -SOURCE=.\glut_swap.c -# End Source File -# Begin Source File - -SOURCE=.\glut_swidth.c -# End Source File -# Begin Source File - -SOURCE=.\glut_tablet.c -# End Source File -# Begin Source File - -SOURCE=.\glut_teapot.c -# End Source File -# Begin Source File - -SOURCE=.\glut_tr10.c -# End Source File -# Begin Source File - -SOURCE=.\glut_tr24.c -# End Source File -# Begin Source File - -SOURCE=.\glut_util.c -# End Source File -# Begin Source File - -SOURCE=.\glut_vidresize.c -# End Source File -# Begin Source File - -SOURCE=.\glut_warp.c -# End Source File -# Begin Source File - -SOURCE=.\glut_win.c -# End Source File -# Begin Source File - -SOURCE=.\glut_winmisc.c -# End Source File -# Begin Source File - -SOURCE=.\glutbitmap.h -# End Source File -# Begin Source File - -SOURCE=.\include\Gl\glutf90.h -# End Source File -# Begin Source File - -SOURCE=.\glutint.h -# End Source File -# Begin Source File - -SOURCE=.\glutstroke.h -# End Source File -# Begin Source File - -SOURCE=.\glutwin32.h -# End Source File -# Begin Source File - -SOURCE="..\..\README-win32.txt" -# End Source File -# Begin Source File - -SOURCE=.\stroke.h -# End Source File -# Begin Source File - -SOURCE=.\win32_glx.c -# End Source File -# Begin Source File - -SOURCE=.\win32_glx.h -# End Source File -# Begin Source File - -SOURCE=.\win32_menu.c -# End Source File -# Begin Source File - -SOURCE=.\win32_util.c -# End Source File -# Begin Source File - -SOURCE=.\win32_winproc.c -# End Source File -# Begin Source File - -SOURCE=.\win32_x11.c -# End Source File -# Begin Source File - -SOURCE=.\win32_x11.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/lib/glut/glut_8x13.c b/lib/glut-3.7.6/lib/glut/glut_8x13.c deleted file mode 100644 index c88c66591..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_8x13.c +++ /dev/null @@ -1,2073 +0,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 -}; - diff --git a/lib/glut-3.7.6/lib/glut/glut_9x15.c b/lib/glut-3.7.6/lib/glut/glut_9x15.c deleted file mode 100644 index 04df3dcde..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_9x15.c +++ /dev/null @@ -1,2075 +0,0 @@ - -/* 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 -}; - diff --git a/lib/glut-3.7.6/lib/glut/glut_bitmap.c b/lib/glut-3.7.6/lib/glut/glut_bitmap.c deleted file mode 100644 index 2a74054f6..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_bitmap.c +++ /dev/null @@ -1,57 +0,0 @@ - -/* 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); - } -} diff --git a/lib/glut-3.7.6/lib/glut/glut_bwidth.c b/lib/glut-3.7.6/lib/glut/glut_bwidth.c deleted file mode 100644 index 117cecf0b..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_bwidth.c +++ /dev/null @@ -1,58 +0,0 @@ - -/* 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 */ diff --git a/lib/glut-3.7.6/lib/glut/glut_cindex.c b/lib/glut-3.7.6/lib/glut/glut_cindex.c deleted file mode 100644 index a74d8b6bc..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_cindex.c +++ /dev/null @@ -1,252 +0,0 @@ - -/* 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 -#include "glutint.h" - -#define CLAMP(i) ((i) > 1.0 ? 1.0 : ((i) < 0.0 ? 0.0 : (i))) - -/* CENTRY */ -void APIENTRY -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 APIENTRY -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 APIENTRY -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 */ diff --git a/lib/glut-3.7.6/lib/glut/glut_cmap.c b/lib/glut-3.7.6/lib/glut/glut_cmap.c deleted file mode 100644 index e3bbbf835..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_cmap.c +++ /dev/null @@ -1,395 +0,0 @@ - -/* 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 -#include -#include /* SunOS multithreaded assert() needs . Lame. */ -#include -#if !defined(_WIN32) -#include -#include -#include /* for XA_RGB_DEFAULT_MAP atom */ -#if defined(__vms) -#include /* for XmuLookupStandardColormap */ -#else -#include /* 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 -#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: - case DirectColor: - *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. */ - /* XXX DirectColor probably needs ramps hand initialized! */ - *cmap = XCreateColormap(__glutDisplay, __glutRoot, - vi->visual, AllocNone); - 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); - } -} - diff --git a/lib/glut-3.7.6/lib/glut/glut_cursor.c b/lib/glut-3.7.6/lib/glut/glut_cursor.c deleted file mode 100644 index 7601a6d36..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_cursor.c +++ /dev/null @@ -1,201 +0,0 @@ - -/* 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 /* For XA_CURSOR */ -#include -#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 long *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, (unsigned char **) &value); - if (rc == Success && actualFormat == 32 && n >= 1) { - cursor = 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; - - 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 = LoadCursor(NULL, IDC_CROSS); -#else - if (fullCrosshairCusor == None) { - fullCrosshairCusor = getFullCrosshairCursor(); - } - xcursor = fullCrosshairCusor; -#endif - break; - } - } - XDefineCursor(__glutDisplay, - window->win, xcursor); - XFlush(__glutDisplay); -} - -/* CENTRY */ -void APIENTRY -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 */ diff --git a/lib/glut-3.7.6/lib/glut/glut_dials.c b/lib/glut-3.7.6/lib/glut/glut_dials.c deleted file mode 100644 index b34e8430e..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_dials.c +++ /dev/null @@ -1,26 +0,0 @@ - -/* 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 APIENTRY -glutButtonBoxFunc(GLUTbuttonBoxCB buttonBoxFunc) -{ - __glutCurrentWindow->buttonBox = buttonBoxFunc; - __glutUpdateInputDeviceMaskFunc = __glutUpdateInputDeviceMask; - __glutPutOnWorkList(__glutCurrentWindow, - GLUT_DEVICE_MASK_WORK); -} - -void APIENTRY -glutDialsFunc(GLUTdialsCB dialsFunc) -{ - __glutCurrentWindow->dials = dialsFunc; - __glutUpdateInputDeviceMaskFunc = __glutUpdateInputDeviceMask; - __glutPutOnWorkList(__glutCurrentWindow, - GLUT_DEVICE_MASK_WORK); -} diff --git a/lib/glut-3.7.6/lib/glut/glut_dstr.c b/lib/glut-3.7.6/lib/glut/glut_dstr.c deleted file mode 100644 index 6084e87dd..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_dstr.c +++ /dev/null @@ -1,1637 +0,0 @@ - -/* 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 -#include -#include -#include -#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; - 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 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 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 = glXGetFBConfigFromVisualSGIX(__glutDisplay, vlist[i]); - if (fbc) { - rc = glXGetFBConfigAttribSGIX(__glutDisplay, fbc, - GLX_FBCONFIG_ID_SGIX, &fbconfigID); - if ((rc == 0) && (fbconfigID != None)) { - rc = glXGetFBConfigAttribSGIX(__glutDisplay, fbc, - GLX_DRAWABLE_TYPE_SGIX, &drawType); - if ((rc == 0) && (drawType & GLX_WINDOW_BIT_SGIX)) { - rc = 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 = 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 despite claiming to support - GLX_EXT_visual_rating. */ -#ifndef GLX_VISUAL_CAVEAT_EXT -#define GLX_VISUAL_CAVEAT_EXT 0x20 -#endif - - rc = 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 despite claiming to - support GLX_EXT_visual_info. */ -#ifndef GLX_TRANSPARENT_TYPE_EXT -#define GLX_TRANSPARENT_TYPE_EXT 0x23 -#endif - - rc = 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 = 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, 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; - int rgb, rgba, acc, acca, count, i; - - cstr = strpbrk(word, "=>': - 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; - - /* In WIN32, after changing display settings, the visuals might change. - (e.g. if entering game mode with a different bitdepth!) - Therefore, reload the visuals each time they are queried. */ -#ifdef WIN32 - if (fbmodes) { - free(fbmodes); - fbmodes = NULL; - nfbmodes = 0; - } -#endif - 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 APIENTRY -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; -#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_fbconfig) - GLXFBConfigSGIX fbc; -#else - void *fbc; -#endif - -#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 = gets(buffer); - 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, (void**) &fbc); - } else { - vinfo = getVisualInfoFromString(str, &treatAsSingle, - requiredWindowCriteria, numRequiredWindowCriteria, requiredWindowCriteriaMask, (void**) &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 diff --git a/lib/glut-3.7.6/lib/glut/glut_event.c b/lib/glut-3.7.6/lib/glut/glut_event.c deleted file mode 100644 index ca71b0478..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_event.c +++ /dev/null @@ -1,1386 +0,0 @@ - -/* 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. */ - -#include -#include -#include -#include -#include /* 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 . */ - -#if !defined(_WIN32) -# ifdef __sgi -# include /* prototype for bzero used by FD_ZERO */ -# endif -# if (defined(SVR4) || defined(CRAY) || defined(AIXV3)) && !defined(FD_SETSIZE) -# include /* select system call interface */ -# ifdef luna -# include -# endif -# endif - /* AIX 4.2 fubar-ed , so go to heroic measures to get it */ -# if defined(AIXV4) && !defined(NFDBITS) -# include -# endif -#endif /* !_WIN32 */ - -#include - -#if !defined(_WIN32) -# if defined(__vms) && ( __VMS_VER < 70000000 ) -# include -# else -# ifndef __vms -# include -# endif -# endif -# include -# include -# include -#else -# ifdef __CYGWIN32__ -# include -# else -# include -# endif -# ifdef __hpux - /* XXX Bert Gijsbers 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 -# endif -#endif /* !_WIN32 */ - -#if defined(__vms) && ( __VMS_VER < 70000000 ) -#include -#include -extern int SYS$CLREF(int efn); -extern int SYS$SETIMR(unsigned int efn, struct timeval *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 */ - -#include "glutint.h" - -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 APIENTRY -glutIdleFunc(GLUTidleCB idleFunc) -{ - __glutIdleFunc = idleFunc; -} - -void APIENTRY -glutTimerFunc(unsigned int interval, GLUTtimerCB timerFunc, int value) -{ - GLUTtimer *timer, *other; - GLUTtimer **prevptr; - struct timeval now; - - 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) -{ - struct timeval now; - 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; - timer->func(timer->value); - __glutTimerList = timer->next; - 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 APIENTRY -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 APIENTRY -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; - } - 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 - -static void -processEventsAndTimeouts(void) -{ -#if defined ( _WIN32 ) - MSG msg; - - while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { - TranslateMessage( &msg ); - DispatchMessage( &msg ); - if ( msg.message == WM_QUIT ) { - exit( 0 ); - } - } - if (__glutTimerList) { - handleTimeouts(); - } -#else /* _WIN32 */ - - do { - 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); - if (window) { - GLUTmenu *menu; - int menuNum; - - menuNum = window->menu[event.xbutton.button - 1]; - /* 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; - } - } - if (__glutTimerList) { - handleTimeouts(); - } - } - while (XPending(__glutDisplay)); -#endif /* _WIN32 */ -} - -static void -waitForSomething(void) -{ -#if defined(__vms) && ( __VMS_VER < 70000000 ) - static struct timeval 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 - struct timeval now, timeout, waittime; -#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_ALLEVENTS); -#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); - if (beforeEnd == 0) - beforeEnd = &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) - if ( workMask & GLUT_FULL_SCREEN_WORK ) { - DWORD s; - RECT r; - - GetWindowRect(GetDesktopWindow(), &r); - s = GetWindowLong(window->win, GWL_STYLE); - s &= ~WS_OVERLAPPEDWINDOW; - s |= WS_POPUP; - SetWindowLong(window->win, GWL_STYLE, s); - SetWindowPos(window->win, - HWND_TOP, /* safer - a lot of people use windows atop a fullscreen GLUT window. */ - //HWND_TOPMOST, /* is better, but no windows atop it */ - r.left, r.top, - r.right-r.left, r.bottom-r.top, - SWP_FRAMECHANGED); - - /* This hack causes the window to go back to the right position - when it is taken out of fullscreen mode. */ - { - POINT p; - - p.x = 0; - p.y = 0; - ClientToScreen(window->win, &p); - window->desiredConfMask |= CWX | CWY; - window->desiredX = p.x; - window->desiredY = p.y; - } - } else { - RECT changes; - POINT point; - UINT flags = SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOOWNERZORDER | SWP_NOSENDCHANGING | SWP_NOSIZE | SWP_NOZORDER; - DWORD style; - - GetClientRect(window->win, &changes); - style = GetWindowLong(window->win, GWL_STYLE); - - /* Get rid of fullscreen mode, if it exists */ - if ( style & WS_POPUP ) { - style &= ~WS_POPUP; - style |= WS_OVERLAPPEDWINDOW; - SetWindowLong(window->win, GWL_STYLE, style); - flags |= SWP_FRAMECHANGED; - } - - /* 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, style, FALSE); - } - - /* Do the repositioning, moving, and push/pop. */ - SetWindowPos(window->win, - window->desiredStack == Above ? HWND_TOP : HWND_BOTTOM, - changes.left, changes.top, - changes.right - changes.left, changes.bottom - changes.top, - flags); - - /* Zero out the mask. */ - window->desiredConfMask = 0; - } -#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 { - if (beforeEnd == &window->prevWorkWin) - beforeEnd = 0; - /* Remove current window from work list. */ - return window->prevWorkWin; - } -} - -/* CENTRY */ -void APIENTRY -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 (;;) { - if (__glutWindowWorkList) { - GLUTwindow *remainder, *work; - - work = __glutWindowWorkList; - __glutWindowWorkList = NULL; - if (work) { - remainder = processWindowWorkList(work); - if (remainder) { - *beforeEnd = __glutWindowWorkList; - __glutWindowWorkList = remainder; - } - } - } - if (__glutIdleFunc || __glutWindowWorkList) { - idleWait(); - } else { - if (__glutTimerList) { - waitForSomething(); - } else { - processEventsAndTimeouts(); - } -#if defined(_WIN32) - // If there is no idle function, go to sleep for a millisecond (we - // still need to possibly service timers) or until there is some - // event in our queue. - MsgWaitForMultipleObjects(0, NULL, FALSE, 1, QS_ALLEVENTS); -#endif - } - } -} -/* ENDCENTRY */ diff --git a/lib/glut-3.7.6/lib/glut/glut_ext.c b/lib/glut-3.7.6/lib/glut/glut_ext.c deleted file mode 100644 index b6fe40418..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_ext.c +++ /dev/null @@ -1,53 +0,0 @@ - -/* 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 -#include - -#include "glutint.h" - -/* CENTRY */ -int APIENTRY -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; -} - -/* ENDCENTRY */ diff --git a/lib/glut-3.7.6/lib/glut/glut_fcb.c b/lib/glut-3.7.6/lib/glut/glut_fcb.c deleted file mode 100644 index 73d1d27ae..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_fcb.c +++ /dev/null @@ -1,164 +0,0 @@ - -/* 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, void *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. */ - -void* APIENTRY -__glutGetFCB(int which) -{ -#ifdef SUPPORT_FORTRAN - switch (which) { - case GLUT_FCB_DISPLAY: - return (void *) __glutCurrentWindow->fdisplay; - case GLUT_FCB_RESHAPE: - return (void *) __glutCurrentWindow->freshape; - case GLUT_FCB_MOUSE: - return (void *) __glutCurrentWindow->fmouse; - case GLUT_FCB_MOTION: - return (void *) __glutCurrentWindow->fmotion; - case GLUT_FCB_PASSIVE: - return (void *) __glutCurrentWindow->fpassive; - case GLUT_FCB_ENTRY: - return (void *) __glutCurrentWindow->fentry; - case GLUT_FCB_KEYBOARD: - return (void *) __glutCurrentWindow->fkeyboard; - case GLUT_FCB_KEYBOARD_UP: - return (void *) __glutCurrentWindow->fkeyboardUp; - case GLUT_FCB_WINDOW_STATUS: - return (void *) __glutCurrentWindow->fwindowStatus; - case GLUT_FCB_VISIBILITY: - return (void *) __glutCurrentWindow->fvisibility; - case GLUT_FCB_SPECIAL: - return (void *) __glutCurrentWindow->fspecial; - case GLUT_FCB_SPECIAL_UP: - return (void *) __glutCurrentWindow->fspecialUp; - case GLUT_FCB_BUTTON_BOX: - return (void *) __glutCurrentWindow->fbuttonBox; - case GLUT_FCB_DIALS: - return (void *) __glutCurrentWindow->fdials; - case GLUT_FCB_SPACE_MOTION: - return (void *) __glutCurrentWindow->fspaceMotion; - case GLUT_FCB_SPACE_ROTATE: - return (void *) __glutCurrentWindow->fspaceRotate; - case GLUT_FCB_SPACE_BUTTON: - return (void *) __glutCurrentWindow->fspaceButton; - case GLUT_FCB_TABLET_MOTION: - return (void *) __glutCurrentWindow->ftabletMotion; - case GLUT_FCB_TABLET_BUTTON: - return (void *) __glutCurrentWindow->ftabletButton; - case GLUT_FCB_JOYSTICK: -#ifdef _WIN32 - return (void *) __glutCurrentWindow->fjoystick; -#else - return NULL; -#endif - case GLUT_FCB_OVERLAY_DISPLAY: - return (void *) __glutCurrentWindow->overlay->fdisplay; - case GLUT_FCB_SELECT: - return (void *) __glutCurrentMenu->fselect; - case GLUT_FCB_TIMER: - return (void *) __glutTimerList->ffunc; - default: - return NULL; - } -#else - return NULL; -#endif -} diff --git a/lib/glut-3.7.6/lib/glut/glut_fullscrn.c b/lib/glut-3.7.6/lib/glut/glut_fullscrn.c deleted file mode 100644 index 892a06c61..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_fullscrn.c +++ /dev/null @@ -1,52 +0,0 @@ - -/* 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 /* SunOS multithreaded assert() needs . Lame. */ -#include - -#if !defined(_WIN32) -#include -#include -#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 -#else -#define XSGIFastInternAtom(dpy,string,fast_name,how) XInternAtom(dpy,string,how) -#endif - -#include "glutint.h" - -/* CENTRY */ -void APIENTRY -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 */ diff --git a/lib/glut-3.7.6/lib/glut/glut_gamemode.c b/lib/glut-3.7.6/lib/glut/glut_gamemode.c deleted file mode 100644 index b660df24a..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_gamemode.c +++ /dev/null @@ -1,674 +0,0 @@ - -/* 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. */ - -#include -#include -#include -#include - -#include "glutint.h" - -#ifndef _WIN32 -#include -#include - -/* 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 -#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 APIENTRY -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, 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; - - cstr = strpbrk(word, "=>': - 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 APIENTRY -glutGameModeString(const char *string) -{ - Criterion *criteria; - int ncriteria; - - initGameModeSupport(); - criteria = parseDisplayString(string, &ncriteria); - currentDm = findMatch(dmodes, ndmodes, criteria, ncriteria); - free(criteria); -} - -int APIENTRY -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 APIENTRY -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; - } -} diff --git a/lib/glut-3.7.6/lib/glut/glut_get.c b/lib/glut-3.7.6/lib/glut/glut_get.c deleted file mode 100644 index b01671efb..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_get.c +++ /dev/null @@ -1,216 +0,0 @@ - -/* 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 -#include /* SunOS 4 needs NULL defined for GETTIMEOFDAY macro. */ -#include "glutint.h" - -/* CENTRY */ -int APIENTRY -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: - { - struct timeval elapsed, beginning, now; - - __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 */ diff --git a/lib/glut-3.7.6/lib/glut/glut_glxext.c b/lib/glut-3.7.6/lib/glut/glut_glxext.c deleted file mode 100644 index a481617f5..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_glxext.c +++ /dev/null @@ -1,48 +0,0 @@ - -/* 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 -#include -#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 diff --git a/lib/glut-3.7.6/lib/glut/glut_hel10.c b/lib/glut-3.7.6/lib/glut/glut_hel10.c deleted file mode 100644 index 7d948297a..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_hel10.c +++ /dev/null @@ -1,1778 +0,0 @@ - -/* 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 -}; - diff --git a/lib/glut-3.7.6/lib/glut/glut_hel12.c b/lib/glut-3.7.6/lib/glut/glut_hel12.c deleted file mode 100644 index 1760c5b11..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_hel12.c +++ /dev/null @@ -1,1788 +0,0 @@ - -/* 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 -}; - diff --git a/lib/glut-3.7.6/lib/glut/glut_hel18.c b/lib/glut-3.7.6/lib/glut/glut_hel18.c deleted file mode 100644 index c0af0c703..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_hel18.c +++ /dev/null @@ -1,1897 +0,0 @@ - -/* 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 -}; - diff --git a/lib/glut-3.7.6/lib/glut/glut_init.c b/lib/glut-3.7.6/lib/glut/glut_init.c deleted file mode 100644 index f91b5c1ed..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_init.c +++ /dev/null @@ -1,370 +0,0 @@ - -/* 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 -#include -#include - -#if !defined(_WIN32) -#include -#include -#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 -#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 /* 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; - - if(wc.hIcon == NULL) { - HINSTANCE hDLLInstance = LoadLibrary("glut32.dll"); - if (hDLLInstance == NULL) { - /* Fill in a default icon if one isn't specified as a resource. */ - wc.hIcon = LoadIcon(NULL, IDI_WINLOGO); - } else { - wc.hIcon = LoadIcon(hDLLInstance, "GLUT_ICON"); - } - } - - 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 -__glutInitTime(struct timeval *beginning) -{ - static int beenhere = 0; - static struct timeval genesis; - - 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 APIENTRY -glutInit(int *argcp, char **argv) -{ - char *display = NULL; - char *str, *geometry = NULL; - struct timeval unused; - 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); -} - -#ifdef _WIN32 -void APIENTRY -__glutInitWithExit(int *argcp, char **argv, void (__cdecl *exitfunc)(int)) -{ - __glutExitFunc = exitfunc; - glutInit(argcp, argv); -} -#endif - -/* CENTRY */ -void APIENTRY -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 APIENTRY -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 APIENTRY -glutInitDisplayMode(unsigned int mask) -{ - __glutDisplayMode = mask; -} - -/* ENDCENTRY */ diff --git a/lib/glut-3.7.6/lib/glut/glut_input.c b/lib/glut-3.7.6/lib/glut/glut_input.c deleted file mode 100644 index 5c62dfbf6..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_input.c +++ /dev/null @@ -1,645 +0,0 @@ - -/* 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 -#include -#include -#include - -#if !defined(_WIN32) -#include -#if defined(__vms) -#include -#else -#include -#endif -#include -#else -#include -#include /* Win32 Multimedia API header. */ -#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 */ - -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; - - 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; - } -#if 0 - JOYINFOEX info; - int njoyId = 0; - int nConnected = 0; - MMRESULT result; - - /* Loop through all possible joystick IDs until we get the error - JOYERR_PARMS. Count the number of times we get JOYERR_NOERROR - indicating an installed joystick driver with a joystick currently - attached to the port. */ - while ((result = joyGetPosEx(njoyId++,&info)) != JOYERR_PARMS) { - if (result == JOYERR_NOERROR) { - ++nConnected; /* The count of connected joysticks. */ - } - } -#endif - } -#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, btns, dials; - 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 APIENTRY -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 */ diff --git a/lib/glut-3.7.6/lib/glut/glut_joy.c b/lib/glut-3.7.6/lib/glut/glut_joy.c deleted file mode 100644 index 1d67df059..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_joy.c +++ /dev/null @@ -1,80 +0,0 @@ - -/* 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 -#include -#include /* Win32 Multimedia API header. */ -#endif - -#include "glutint.h" - -/* CENTRY */ -void APIENTRY -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 APIENTRY -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 */ diff --git a/lib/glut-3.7.6/lib/glut/glut_key.c b/lib/glut-3.7.6/lib/glut/glut_key.c deleted file mode 100644 index b608e3825..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_key.c +++ /dev/null @@ -1,29 +0,0 @@ - -/* 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 - -#include "glutint.h" - -/* CENTRY */ -void APIENTRY -glutKeyboardFunc(GLUTkeyboardCB keyboardFunc) -{ - __glutChangeWindowEventMask(KeyPressMask, - keyboardFunc != NULL || __glutCurrentWindow->special != NULL); - __glutCurrentWindow->keyboard = keyboardFunc; -} - -void APIENTRY -glutSpecialFunc(GLUTspecialCB specialFunc) -{ - __glutChangeWindowEventMask(KeyPressMask, - specialFunc != NULL || __glutCurrentWindow->keyboard != NULL); - __glutCurrentWindow->special = specialFunc; -} - -/* ENDCENTRY */ diff --git a/lib/glut-3.7.6/lib/glut/glut_keyctrl.c b/lib/glut-3.7.6/lib/glut/glut_keyctrl.c deleted file mode 100644 index af61b78c7..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_keyctrl.c +++ /dev/null @@ -1,29 +0,0 @@ - -/* 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 APIENTRY -glutIgnoreKeyRepeat(int ignore) -{ - __glutCurrentWindow->ignoreKeyRepeat = ignore; -} - -void APIENTRY -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 */ diff --git a/lib/glut-3.7.6/lib/glut/glut_keyup.c b/lib/glut-3.7.6/lib/glut/glut_keyup.c deleted file mode 100644 index c081a26f9..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_keyup.c +++ /dev/null @@ -1,29 +0,0 @@ - -/* 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 - -#include "glutint.h" - -/* CENTRY */ -void APIENTRY -glutKeyboardUpFunc(GLUTkeyboardCB keyboardUpFunc) -{ - __glutChangeWindowEventMask(KeyReleaseMask, - keyboardUpFunc != NULL || __glutCurrentWindow->specialUp != NULL); - __glutCurrentWindow->keyboardUp = keyboardUpFunc; -} - -void APIENTRY -glutSpecialUpFunc(GLUTspecialCB specialUpFunc) -{ - __glutChangeWindowEventMask(KeyReleaseMask, - specialUpFunc != NULL || __glutCurrentWindow->keyboardUp != NULL); - __glutCurrentWindow->specialUp = specialUpFunc; -} - -/* ENDCENTRY */ diff --git a/lib/glut-3.7.6/lib/glut/glut_menu.c b/lib/glut-3.7.6/lib/glut/glut_menu.c deleted file mode 100644 index 5b5a65959..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_menu.c +++ /dev/null @@ -1,1010 +0,0 @@ - -/* 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. */ - -#include -#include -#include -#include -#include - -#include -#include -#include /* 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; - char *savedDisplayString; - 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; - 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 APIENTRY -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 APIENTRY -glutGetMenu(void) -{ - if (__glutCurrentMenu) { - return __glutCurrentMenu->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 = __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 APIENTRY -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 APIENTRY -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 APIENTRY -glutAttachMenu(int button) -{ - if (__glutMappedMenu) { - __glutMenuModificationError(); - } - installMenuCallbacks(); - if (__glutCurrentWindow->menu[button] < 1) { - __glutCurrentWindow->buttonUses++; - } - __glutChangeWindowEventMask( - ButtonPressMask | ButtonReleaseMask, True); - __glutCurrentWindow->menu[button] = __glutCurrentMenu->id + 1; -} -/* ENDCENTRY */ diff --git a/lib/glut-3.7.6/lib/glut/glut_menu2.c b/lib/glut-3.7.6/lib/glut/glut_menu2.c deleted file mode 100644 index 3046f91f1..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_menu2.c +++ /dev/null @@ -1,185 +0,0 @@ - -/* 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. */ - -#include -#include -#include -#include -#include - -#include - -#include "glutint.h" -#include "layerutil.h" - -/* CENTRY */ -/* DEPRICATED, use glutMenuStatusFunc instead. */ -void APIENTRY -glutMenuStateFunc(GLUTmenuStateCB menuStateFunc) -{ - __glutMenuStatusFunc = (GLUTmenuStatusCB) menuStateFunc; -} - -void APIENTRY -glutMenuStatusFunc(GLUTmenuStatusCB menuStatusFunc) -{ - __glutMenuStatusFunc = menuStatusFunc; -} - -void APIENTRY -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 APIENTRY -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 APIENTRY -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 APIENTRY -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 APIENTRY -glutDetachMenu(int button) -{ - if (__glutMappedMenu) - __glutMenuModificationError(); - if (__glutCurrentWindow->menu[button] > 0) { - __glutCurrentWindow->buttonUses--; - __glutChangeWindowEventMask(ButtonPressMask | ButtonReleaseMask, - __glutCurrentWindow->buttonUses > 0); - __glutCurrentWindow->menu[button] = 0; - } -} - -/* ENDCENTRY */ diff --git a/lib/glut-3.7.6/lib/glut/glut_mesa.c b/lib/glut-3.7.6/lib/glut/glut_mesa.c deleted file mode 100644 index 73682a506..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_mesa.c +++ /dev/null @@ -1,57 +0,0 @@ - -/* 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 -#include -#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; -} diff --git a/lib/glut-3.7.6/lib/glut/glut_modifier.c b/lib/glut-3.7.6/lib/glut/glut_modifier.c deleted file mode 100644 index deb9a0448..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_modifier.c +++ /dev/null @@ -1,31 +0,0 @@ - -/* 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 APIENTRY -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 */ diff --git a/lib/glut-3.7.6/lib/glut/glut_mroman.c b/lib/glut-3.7.6/lib/glut/glut_mroman.c deleted file mode 100644 index de93a9c34..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_mroman.c +++ /dev/null @@ -1,2451 +0,0 @@ - -/* 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 }; - diff --git a/lib/glut-3.7.6/lib/glut/glut_overlay.c b/lib/glut-3.7.6/lib/glut/glut_overlay.c deleted file mode 100644 index 0d4d45707..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_overlay.c +++ /dev/null @@ -1,607 +0,0 @@ - -/* 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 -#include -#include -#include - -#if !defined(_WIN32) -#include -#include -#include /* for XA_RGB_DEFAULT_MAP atom */ -#if defined (__vms) -#include /* for XmuLookupStandardColormap */ -#else -#include /* 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 APIENTRY -glutEstablishOverlay(void) -{ - GLUToverlay *overlay; - GLUTwindow *window; - XSetWindowAttributes wa; -#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_fbconfig) - GLXFBConfigSGIX fbc; -#else - void *fbc; -#endif - - /* 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, (void **) &fbc); - if (!overlay->vis) { - __glutFatalError("lacks overlay support."); - } -#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_fbconfig) - if (fbc) { - window->ctx = 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 APIENTRY -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 APIENTRY -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 APIENTRY -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 APIENTRY -glutPostWindowOverlayRedisplay(int win) -{ - __glutPostRedisplay(__glutWindowList[win - 1], GLUT_OVERLAY_REDISPLAY_WORK); -} - -void APIENTRY -glutOverlayDisplayFunc(GLUTdisplayCB displayFunc) -{ - if (!__glutCurrentWindow->overlay) { - __glutWarning("glutOverlayDisplayFunc: window has no overlay established"); - return; - } - __glutCurrentWindow->overlay->display = displayFunc; -} - -void APIENTRY -glutHideOverlay(void) -{ - if (!__glutCurrentWindow->overlay) { - __glutWarning("glutHideOverlay: window has no overlay established"); - return; - } - XUnmapWindow(__glutDisplay, __glutCurrentWindow->overlay->win); - __glutCurrentWindow->overlay->shownState = 0; -} - -void APIENTRY -glutShowOverlay(void) -{ - if (!__glutCurrentWindow->overlay) { - __glutWarning("glutShowOverlay: window has no overlay established"); - return; - } - XMapWindow(__glutDisplay, __glutCurrentWindow->overlay->win); - __glutCurrentWindow->overlay->shownState = 1; -} - -int APIENTRY -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 */ diff --git a/lib/glut-3.7.6/lib/glut/glut_roman.c b/lib/glut-3.7.6/lib/glut/glut_roman.c deleted file mode 100644 index 8e25de8ac..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_roman.c +++ /dev/null @@ -1,2451 +0,0 @@ - -/* 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 }; - diff --git a/lib/glut-3.7.6/lib/glut/glut_shapes.c b/lib/glut-3.7.6/lib/glut/glut_shapes.c deleted file mode 100644 index 3d9dce1d9..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_shapes.c +++ /dev/null @@ -1,596 +0,0 @@ - -/* 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 -#include "glutint.h" - -/* Some 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 */ diff --git a/lib/glut-3.7.6/lib/glut/glut_space.c b/lib/glut-3.7.6/lib/glut/glut_space.c deleted file mode 100644 index 7d43a271d..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_space.c +++ /dev/null @@ -1,35 +0,0 @@ - -/* 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 APIENTRY -glutSpaceballMotionFunc(GLUTspaceMotionCB spaceMotionFunc) -{ - __glutCurrentWindow->spaceMotion = spaceMotionFunc; - __glutUpdateInputDeviceMaskFunc = __glutUpdateInputDeviceMask; - __glutPutOnWorkList(__glutCurrentWindow, - GLUT_DEVICE_MASK_WORK); -} - -void APIENTRY -glutSpaceballRotateFunc(GLUTspaceRotateCB spaceRotateFunc) -{ - __glutCurrentWindow->spaceRotate = spaceRotateFunc; - __glutUpdateInputDeviceMaskFunc = __glutUpdateInputDeviceMask; - __glutPutOnWorkList(__glutCurrentWindow, - GLUT_DEVICE_MASK_WORK); -} - -void APIENTRY -glutSpaceballButtonFunc(GLUTspaceButtonCB spaceButtonFunc) -{ - __glutCurrentWindow->spaceButton = spaceButtonFunc; - __glutUpdateInputDeviceMaskFunc = __glutUpdateInputDeviceMask; - __glutPutOnWorkList(__glutCurrentWindow, - GLUT_DEVICE_MASK_WORK); -} diff --git a/lib/glut-3.7.6/lib/glut/glut_stroke.c b/lib/glut-3.7.6/lib/glut/glut_stroke.c deleted file mode 100644 index 735f4f899..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_stroke.c +++ /dev/null @@ -1,42 +0,0 @@ - -/* 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); - } -} diff --git a/lib/glut-3.7.6/lib/glut/glut_swap.c b/lib/glut-3.7.6/lib/glut/glut_swap.c deleted file mode 100644 index 9e0ff004f..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_swap.c +++ /dev/null @@ -1,47 +0,0 @@ - -/* 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 "glutint.h" - -/* CENTRY */ -void APIENTRY -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. */ -} -/* ENDCENTRY */ diff --git a/lib/glut-3.7.6/lib/glut/glut_swidth.c b/lib/glut-3.7.6/lib/glut/glut_swidth.c deleted file mode 100644 index db2488b75..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_swidth.c +++ /dev/null @@ -1,58 +0,0 @@ - -/* 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 */ diff --git a/lib/glut-3.7.6/lib/glut/glut_tablet.c b/lib/glut-3.7.6/lib/glut/glut_tablet.c deleted file mode 100644 index ae94e840f..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_tablet.c +++ /dev/null @@ -1,33 +0,0 @@ - -/* 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 - -#include "glutint.h" - -void APIENTRY -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 APIENTRY -glutTabletButtonFunc(GLUTtabletButtonCB tabletButtonFunc) -{ - __glutCurrentWindow->tabletButton = tabletButtonFunc; - __glutUpdateInputDeviceMaskFunc = __glutUpdateInputDeviceMask; - __glutPutOnWorkList(__glutCurrentWindow, - GLUT_DEVICE_MASK_WORK); -} diff --git a/lib/glut-3.7.6/lib/glut/glut_teapot.c b/lib/glut-3.7.6/lib/glut/glut_teapot.c deleted file mode 100644 index f1d2a7e58..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_teapot.c +++ /dev/null @@ -1,210 +0,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 "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(7, scale, GL_FILL); -} - -void APIENTRY -glutWireTeapot(GLdouble scale) -{ - teapot(10, scale, GL_LINE); -} - -/* ENDCENTRY */ diff --git a/lib/glut-3.7.6/lib/glut/glut_tr10.c b/lib/glut-3.7.6/lib/glut/glut_tr10.c deleted file mode 100644 index ec40e6976..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_tr10.c +++ /dev/null @@ -1,1777 +0,0 @@ - -/* 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 -}; - diff --git a/lib/glut-3.7.6/lib/glut/glut_tr24.c b/lib/glut-3.7.6/lib/glut/glut_tr24.c deleted file mode 100644 index 8476636d7..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_tr24.c +++ /dev/null @@ -1,2060 +0,0 @@ - -/* 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 -}; - diff --git a/lib/glut-3.7.6/lib/glut/glut_util.c b/lib/glut-3.7.6/lib/glut/glut_util.c deleted file mode 100644 index ae1a232ce..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_util.c +++ /dev/null @@ -1,86 +0,0 @@ - -/* 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 -#include -#include -#include - -#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); -#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(); -} diff --git a/lib/glut-3.7.6/lib/glut/glut_vidresize.c b/lib/glut-3.7.6/lib/glut/glut_vidresize.c deleted file mode 100644 index e07db8f37..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_vidresize.c +++ /dev/null @@ -1,230 +0,0 @@ - -/* 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 - -#if !defined(_WIN32) -#include -#endif - -#ifdef __sgi -#include -#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 */ diff --git a/lib/glut-3.7.6/lib/glut/glut_warp.c b/lib/glut-3.7.6/lib/glut/glut_warp.c deleted file mode 100644 index a24ef2359..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_warp.c +++ /dev/null @@ -1,23 +0,0 @@ - -/* 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 -#include -#include - -#include "glutint.h" - -/* CENTRY */ -void APIENTRY -glutWarpPointer(int x, int y) -{ - XWarpPointer(__glutDisplay, None, __glutCurrentWindow->win, - 0, 0, 0, 0, x, y); - XFlush(__glutDisplay); -} - -/* ENDCENTRY */ diff --git a/lib/glut-3.7.6/lib/glut/glut_win.c b/lib/glut-3.7.6/lib/glut/glut_win.c deleted file mode 100644 index 74576504e..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_win.c +++ /dev/null @@ -1,1014 +0,0 @@ - -/* 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 -#include -#include -#include -#if !defined(_WIN32) -#include -#include -#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 APIENTRY -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 APIENTRY -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) - if (GLUT_WIND_IS_MULTISAMPLE(mode)) { - if (!__glutIsSupportedByGLX("GLX_SGIS_multisample")) - return NULL; - list[n++] = GLX_SAMPLES_SGIS; - /* 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); -} - -XVisualInfo * -__glutGetVisualInfo(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 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; -} - -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; -#if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_fbconfig) - GLXFBConfigSGIX fbc; -#else - void *fbc; -#endif - -#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, (void**) &fbc); - if (!window->vis) { - __glutFatalError( - "visual with necessary capabilities not found."); - } - __glutSetupColormap(window->vis, &window->colormap, &window->cmap); -#else - window->cmap = 0; -#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 = 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); - } - #ifdef WIN32 - if (gameMode) { - glutFullScreen(); - } - #endif - return window; -} - -/* CENTRY */ -int APIENTRY -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 APIENTRY -__glutCreateWindowWithExit(const char *title, void (__cdecl *exitfunc)(int)) -{ - __glutExitFunc = exitfunc; - return glutCreateWindow(title); -} -#endif - -int APIENTRY -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 APIENTRY -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 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."); - __glutCurrentWindow->display = displayFunc; -} - -void APIENTRY -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 APIENTRY -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 APIENTRY -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 APIENTRY -glutEntryFunc(GLUTentryCB entryFunc) -{ - __glutChangeWindowEventMask(EnterWindowMask | LeaveWindowMask, - entryFunc != NULL || __glutCurrentWindow->passive); - __glutCurrentWindow->entry = entryFunc; - if (!entryFunc) { - __glutCurrentWindow->entryState = -1; - } -} - -void APIENTRY -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 APIENTRY -glutVisibilityFunc(GLUTvisibilityCB visibilityFunc) -{ - __glutCurrentWindow->visibility = visibilityFunc; - if (visibilityFunc) - glutWindowStatusFunc(visibilityHelper); - else - glutWindowStatusFunc(NULL); -} - -void APIENTRY -glutReshapeFunc(GLUTreshapeCB reshapeFunc) -{ - if (reshapeFunc) { - __glutCurrentWindow->reshape = reshapeFunc; - } else { - __glutCurrentWindow->reshape = __glutDefaultReshape; - } -} diff --git a/lib/glut-3.7.6/lib/glut/glut_winmisc.c b/lib/glut-3.7.6/lib/glut/glut_winmisc.c deleted file mode 100644 index 133188579..000000000 --- a/lib/glut-3.7.6/lib/glut/glut_winmisc.c +++ /dev/null @@ -1,122 +0,0 @@ - -/* 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 -#include -#include -#include - -#if !defined(_WIN32) -#include -#include -#include /* for XA_STRING atom */ -#endif - -#include "glutint.h" - -/* CENTRY */ -void APIENTRY -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 APIENTRY -glutSetIconTitle(const char *title) -{ -#if !defined(_WIN32) - 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); -#endif -} - -void APIENTRY -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 APIENTRY -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 APIENTRY -glutPopWindow(void) -{ - IGNORE_IN_GAME_MODE(); - __glutCurrentWindow->desiredStack = Above; - __glutCurrentWindow->desiredConfMask |= CWStackMode; - __glutPutOnWorkList(__glutCurrentWindow, GLUT_CONFIGURE_WORK); -} - -void APIENTRY -glutPushWindow(void) -{ - IGNORE_IN_GAME_MODE(); - __glutCurrentWindow->desiredStack = Below; - __glutCurrentWindow->desiredConfMask |= CWStackMode; - __glutPutOnWorkList(__glutCurrentWindow, GLUT_CONFIGURE_WORK); -} - -void APIENTRY -glutIconifyWindow(void) -{ - IGNORE_IN_GAME_MODE(); - assert(!__glutCurrentWindow->parent); - __glutCurrentWindow->desiredMapState = IconicState; - __glutPutOnWorkList(__glutCurrentWindow, GLUT_MAP_WORK); -} - -void APIENTRY -glutShowWindow(void) -{ - IGNORE_IN_GAME_MODE(); - __glutCurrentWindow->desiredMapState = NormalState; - __glutPutOnWorkList(__glutCurrentWindow, GLUT_MAP_WORK); -} - -void APIENTRY -glutHideWindow(void) -{ - IGNORE_IN_GAME_MODE(); - __glutCurrentWindow->desiredMapState = WithdrawnState; - __glutPutOnWorkList(__glutCurrentWindow, GLUT_MAP_WORK); -} - -/* ENDCENTRY */ diff --git a/lib/glut-3.7.6/lib/glut/glutbitmap.h b/lib/glut-3.7.6/lib/glut/glutbitmap.h deleted file mode 100644 index dc1b61af1..000000000 --- a/lib/glut-3.7.6/lib/glut/glutbitmap.h +++ /dev/null @@ -1,32 +0,0 @@ -#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 - -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__ */ diff --git a/lib/glut-3.7.6/lib/glut/glutint.h b/lib/glut-3.7.6/lib/glut/glutint.h deleted file mode 100644 index 3f9a8cb1d..000000000 --- a/lib/glut-3.7.6/lib/glut/glutint.h +++ /dev/null @@ -1,779 +0,0 @@ -#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 -#endif - -#define SUPPORT_FORTRAN /* With GLUT 3.7, everyone supports Fortran. */ - -#if defined(_WIN32) -#include "glutwin32.h" -#else -#include -#include -#include -#endif - -#define GLUT_BUILDING_LIB /* Building the GLUT library itself. */ - -/* GLUT_BUILDING_LIB is used by to 1) not #pragma link - with the GLUT library, and 2) avoid the Win32 atexit hack. */ - -#include - -#ifndef CDECL -# if defined(_WIN32) && defined(_MSC_VER) -# define CDECL __cdecl -# else -# define CDECL -# endif -#endif - -/* This must be done after is included. MESA is defined - if the 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. */ -WINGDIAPI int WINAPI wglChoosePixelFormat(HDC hdc, CONST PIXELFORMATDESCRIPTOR *ppfd); -WINGDIAPI int WINAPI wglDescribePixelFormat(HDC hdc,int iPixelFormat,UINT nBytes, LPPIXELFORMATDESCRIPTOR ppfd); -WINGDIAPI int WINAPI wglGetPixelFormat(HDC hdc); -WINGDIAPI BOOL WINAPI wglSetPixelFormat(HDC hdc, int iPixelFormat, PIXELFORMATDESCRIPTOR *ppfd); -WINGDIAPI BOOL WINAPI wglSwapBuffers(HDC hdc); -#define ChoosePixelFormat wglChoosePixelFormat -#define DescribePixelFormat wglDescribePixelFormat -#define GetPixelFormat wglGetPixelFormat -#define SetPixelFormat wglSetPixelFormat -#define SwapBuffers wglSwapBuffers -#endif - -/* 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 SUPPORT_FORTRAN -#include -#endif - -#ifdef __vms -#if ( __VMS_VER < 70000000 ) -struct timeval { - __int64 val; -}; -extern int sys$gettim(struct timeval *); -#else -#include -#endif -#else -#include -#if !defined(_WIN32) -#include -#else -#include -#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) */ -#if defined(_WIN32) - HMENU win; /* Win32 menu */ -#else - Window win; /* X window for the menu */ -#endif - 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 { -#if defined(_WIN32) - HMENU win; /* Win32 window for entry */ -#else - Window win; /* InputOnly X window for entry */ -#endif - 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; -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 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(HMENU win); -extern GLUTmenu *__glutGetMenuByNum(int menunum); -extern GLUTmenuItem *__glutGetMenuItem(GLUTmenu * menu, - HMENU 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 *); -#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 CDECL __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 - -#endif /* __glutint_h__ */ diff --git a/lib/glut-3.7.6/lib/glut/glutstroke.h b/lib/glut-3.7.6/lib/glut/glutstroke.h deleted file mode 100644 index fbbc70d6c..000000000 --- a/lib/glut-3.7.6/lib/glut/glutstroke.h +++ /dev/null @@ -1,42 +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__ */ diff --git a/lib/glut-3.7.6/lib/glut/glutwin32.h b/lib/glut-3.7.6/lib/glut/glutwin32.h deleted file mode 100644 index 15ba945e6..000000000 --- a/lib/glut-3.7.6/lib/glut/glutwin32.h +++ /dev/null @@ -1,48 +0,0 @@ -#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 */ -extern int gettimeofday(struct timeval* tp, void* tzp); -extern void *__glutFont(void *font); -extern int __glutGetTransparentPixel(Display *dpy, XVisualInfo *vinfo); -extern void __glutAdjustCoords(Window parent, int *x, int *y, int *width, int *height); - -#endif /* __glutwin32_h__ */ diff --git a/lib/glut-3.7.6/lib/glut/layerutil.c b/lib/glut-3.7.6/lib/glut/layerutil.c deleted file mode 100644 index 70a9ed9db..000000000 --- a/lib/glut-3.7.6/lib/glut/layerutil.c +++ /dev/null @@ -1,201 +0,0 @@ - -/* 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 -#include -#include "layerutil.h" - -/* SGI optimization introduced in IRIX 6.3 to avoid X server - round trips for interning common X atoms. */ -#include -#if defined(_SGI_EXTRA_PREDEFINES) && !defined(NO_FAST_ATOMS) -#include -#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 diff --git a/lib/glut-3.7.6/lib/glut/layerutil.h b/lib/glut-3.7.6/lib/glut/layerutil.h deleted file mode 100644 index b65ebde72..000000000 --- a/lib/glut-3.7.6/lib/glut/layerutil.h +++ /dev/null @@ -1,55 +0,0 @@ -#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 */ - -#if !defined(_WIN32) -#include -#include -#include -#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__ */ diff --git a/lib/glut-3.7.6/lib/glut/mesa.patch2 b/lib/glut-3.7.6/lib/glut/mesa.patch2 deleted file mode 100644 index d323234cc..000000000 --- a/lib/glut-3.7.6/lib/glut/mesa.patch2 +++ /dev/null @@ -1,38 +0,0 @@ -==== //sw/main/apps/OpenGL/glut/lib/glut/win32_x11.c#6 - d:\src\sw\main\apps\OpenGL\glut\lib\glut\win32_x11.c ==== -*************** -*** 6,13 **** - and is provided without guarantee or warrantee expressed or - implied. This program is -not- in the public domain. */ - -! #include -! #include "win32_x11.h" - - /* global variable that must be set for some functions to operate - correctly. */ ---- 6,12 ---- - 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. */ -==== //sw/main/apps/OpenGL/glut/lib/glut/win32_glx.c#8 - d:\src\sw\main\apps\OpenGL\glut\lib\glut\win32_glx.c ==== -*************** -*** 5,12 **** - and is provided without guarantee or warrantee expressed or - implied. This program is -not- in the public domain. */ - -! #include -! #include "win32_glx.h" - - /* global current HDC */ - extern HDC XHDC; ---- 5,11 ---- - and is provided without guarantee or warrantee expressed or - implied. This program is -not- in the public domain. */ - -! #include "glutint.h" - - /* global current HDC */ - extern HDC XHDC; diff --git a/lib/glut-3.7.6/lib/glut/stroke.h b/lib/glut-3.7.6/lib/glut/stroke.h deleted file mode 100644 index bd5e058c5..000000000 --- a/lib/glut-3.7.6/lib/glut/stroke.h +++ /dev/null @@ -1,134 +0,0 @@ -/* $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 */ diff --git a/lib/glut-3.7.6/lib/glut/strokegen.y b/lib/glut-3.7.6/lib/glut/strokegen.y deleted file mode 100644 index dd44d2d3a..000000000 --- a/lib/glut-3.7.6/lib/glut/strokegen.y +++ /dev/null @@ -1,649 +0,0 @@ -%{ -/* $XConsortium: to_wfont.y,v 5.7 94/04/17 20:10:08 rws Exp $ */ - -/***************************************************************** - -Copyright (c) 1989,1990, 1991 X Consortium - -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 -X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of the X Consortium shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from the X Consortium. - -Copyright (c) 1989,1990, 1991 by Sun Microsystems, Inc. - - 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, -and the X Consortium, 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. - -******************************************************************/ - - -#define YYMAXDEPTH 10000 - -#include -#include -#include -#ifndef L_SET -#define L_SET SEEK_SET -#endif -#include "stroke.h" - -#ifdef X_NOT_STDC_ENV -FILE *fopen(); -#endif - -typedef struct { - - float std_left, /* NCGA standard left spacing */ - std_wide, /* character width */ - std_rght; /* Right spacing */ -} Standard; - - -char fname[80]; -char symname[80] = "FONT"; -Dispatch *Table; /* dispatch table */ -Standard *sp_table; /* NCGA font spacings */ -Path *strokes; /* strokes of each character */ -Property *property; /* property list */ - -struct { - int path, point, props; -} count, expect; - -Path_subpath *current_path; - -Font_header head; /* font header */ -int tableindex; /* which character */ -int yyerrno; /* error number */ - -%} - -%union { - int nil; /* void is reserved */ - int ival; - float dval; - char *cval; -} - -%start font - -%token REAL -%token INTEGER -%token STRING - -%token BOTTOM -%token CENTER -%token CLOSE -%token FONTNAME -%token PROPERTIES -%token NUM_CH -%token INDEX -%token L_SPACE -%token MAGIC -%token OPEN -%token RIGHT -%token R_SPACE -%token STROKE -%token TOP -%token VERTICES -%token BEARING -%token WIDTH - -%type fontname -%type properties -%type top bottom center right -%type nstroke nvertice n_pts index num_ch -%type closeflag -%type counter -%type sp_left wide sp_right - -%% - -font : fontheader num_ch fontprops fontbody spacing { fini(); }| - fontheader fontbody { fini(); }; - -fontheader : fontname top bottom - { wf_header($1, $2, $3); }; - -fontname : FONTNAME STRING - { $$ = $2; }; - -top : TOP REAL { $$ = $2;}; - -bottom : BOTTOM REAL { $$ = $2;}; - -num_ch: NUM_CH INTEGER { set_num_ch($2);}; - -fontprops : /* empty */ | properties; - -properties : PROPERTIES INTEGER { init_properties ($2); } property_list - { check_num_props (); } - -property_list : /* empty */ | single_property property_list - -single_property : STRING STRING { add_property($1, $2); }; - -fontbody : /* empty */ - | glyph fontbody; - -glyph : glyph_header strokes - { check_nstroke(); }; - -glyph_header : index { tableindex = $1; } sym_headinfo; - -sym_headinfo : nstroke center right nvertice - { glyph_header($1, $2, $3, $4); }; - -index : INDEX INTEGER { check_num_ch(); $$ = $2; }; - -nstroke : STROKE INTEGER { $$ = $2; expect.path = $2; }; - -nvertice: {$$ = 0;} | VERTICES INTEGER { $$ = $2; } ; - -center : CENTER REAL{ $$ = $2; }; - -right : RIGHT REAL{ $$ = $2; }; - -strokes : /* empty */ | path strokes; - -path : closeflag n_pts { init_path($1, $2); } points - { check_npts(); } - -points : /* empty */ | coord points; - -closeflag : CLOSE { $$ = $1 == CLOSE; } | OPEN { $$ = $1 == CLOSE; } ; - -n_pts : INTEGER { $$ = $1; }; - -coord : REAL REAL { add_point($1, $2); }; - -spacing : /* empty */ - | item spacing; - -item : counter {tableindex = $1;} sp_left wide sp_right - { std_space($3, $4, $5); }; - -counter : BEARING INTEGER {$$ = $2;}; - -sp_left: L_SPACE REAL {$$ = $2;}; - -wide : WIDTH REAL {$$ = $2;}; - -sp_right: R_SPACE REAL {$$ = $2;}; - -%% - -#define BYE(err) yyerrno = (err), yyerror() - -#define ERR_BASE 1000 -#define OPEN_ERROR 1001 -#define WRITE_ERROR 1002 -#define WRONG_NAME 1003 -#define NO_MEMORY 1004 -#define EXCEED_PATH 1005 -#define EXCEED_POINT 1006 -#define PATH_MISMATCH 1007 -#define POINT_MISMATCH 1008 -#define PROP_MISMATCH 1009 -#define EXCEED_PROPS 1010 - -char *prog; - -main(argc, argv) - int argc; - char *argv[]; - -{ - /* Usage : to_wfont [-o outfile] [infile] */ - char *s; - - fname[0] = 0; - tableindex = 0; - head.num_ch = -1; - - prog = *argv; - while (--argc > 0 && *++argv != NULL) { - s = *argv; - if (*s++ == '-') - switch (*s) { - case 's': - if (*++argv != NULL) - { - --argc; - (void) strcpy(symname, *argv); - } - break; - case 'o': - if (*++argv != NULL) - { - --argc; - (void) strcpy(fname, *argv); - } - break; - default: /* ignore other options */ - ; - } - else { - FILE *fp; - - /* standard input redirection */ - fp = fopen(*argv, "r"); - if (fp != NULL) { - if (close(fileno(stdin)) < 0) - { - perror(prog); - return; - } - if (dup(fileno(fp)) < 0) - { - perror(prog); - return; - } - (void) fclose(fp); - } - } - } - return (yyparse()); -} - -/* set number of characters */ -set_num_ch(num_ch) -int num_ch; -{ - yyerrno = 0; - head.num_ch = num_ch; - if (num_ch > 0) { - Table = (Dispatch *) malloc(num_ch * sizeof(Dispatch)); - sp_table = (Standard *) malloc(num_ch * sizeof(Standard)); - strokes = (Path *) malloc(num_ch * sizeof(Path)); - } - - for (tableindex = 0; tableindex < num_ch; tableindex++) { - Table[tableindex].center = 0.0; - Table[tableindex].right = 0.0; - Table[tableindex].offset = 0; - - sp_table[tableindex].std_left = 0.0; - sp_table[tableindex].std_wide = 0.0; - sp_table[tableindex].std_rght = 0.0; - - strokes[tableindex].n_subpaths = 0; - strokes[tableindex].n_vertices = 0; - strokes[tableindex].subpaths = NULL; - } -} - -/* initialize the property info in the header */ -init_properties(num_props) - int num_props; -{ - if (num_props > 0) { - head.properties = (Property *) - malloc (num_props * sizeof (Property)); - head.num_props = expect.props = num_props; - } - else { - head.properties = NULL; - head.num_props = expect.props = 0; - } - count.props = -1; - property = head.properties; /* initialize the list pointer */ -} - -check_num_props() -{ - count.props++; - if (count.props != expect.props) - BYE (PROP_MISMATCH); -} - -/* add individual property info into the buffer */ -add_property(name, value) - char *name, - *value; -{ - /* check if the property exceeds allocated space */ - - if (++count.props >= head.num_props) - BYE(EXCEED_PROPS); - - /* copy the strings into the buffer */ - - (void) strcpy (property->propname, name); - (void) strcpy (property->propvalue, value); - - /* increment the property pointer */ - - property++; -} - -check_num_ch() -{ - - if (head.num_ch == -1) - set_num_ch(128); - -} - -yyerror() -{ -#ifndef __bsdi__ - extern int yylineno; -#endif -# define ERR_SIZE (sizeof(err_string) / sizeof(char *)) - static char *err_string[] = { - "Cannot open file", - "Write fails", - "Illegal font name", - "Memory allocation failure", - "Specified number of strokes exceeded", - "Specified number of points exceeded", - "Number of strokes do not match", - "Number of points do not match", - "Number of properties do not match", - "Specified number of properties exceeded", - 0}; - char *str; - - yyerrno -= ERR_BASE; - if (yyerrno > 0 && yyerrno < ERR_SIZE) - str = err_string[yyerrno-1]; - else - str = "Syntax error"; -#ifdef __bsdi__ - fprintf(stderr, "%s.\n", str); -#else - fprintf(stderr, "line %d: %s.\n", yylineno, str); -#endif - freeall(); - (void) unlink(fname); - exit(1); -} - -/* create wfont header */ -wf_header(name, top, bottom) - char *name; - float top, - bottom; -{ - - if (name == NULL) - BYE(WRONG_NAME); - head.top = (float) top; - head.bottom = (float) bottom; - head.magic = WFONT_MAGIC_PEX; - (void) strcpy(head.name, name); - free(name); -} - -/* create header for each glyph */ -glyph_header(npath, center, right, npts) - int npath, - npts; - float center, - right; -{ - { - register Path *strk = strokes + tableindex; - - if (npath > 0) /* Don't allocate space unless the character - has strokes associated with it. */ - { - strk->subpaths = (Path_subpath *) - malloc(npath * sizeof (Path_subpath)); - - if (strk->subpaths == NULL) - BYE(NO_MEMORY); - - strk->type = PATH_2DF; - strk->n_subpaths = npath; - strk->n_vertices = npts; - } - else { /* Just initialize the entry */ - strk->subpaths = NULL; - strk->type = PATH_2DF; - strk->n_subpaths = 0; - strk->n_vertices = 0; - } - } - { - register Dispatch *tbl = Table + tableindex; - - tbl->offset = 0; - tbl->center = center; - tbl->right = right; - } - count.path = -1; /* initialize path counter, not to - * exceed n_subpath */ -} - -/* create standard spacing info for each glyph */ -std_space(l_bear, wide, r_bear) - - float l_bear, - wide, - r_bear; -{ - register Standard *tbl = sp_table +tableindex; - tbl->std_left = l_bear; - tbl->std_wide = wide; - tbl->std_rght = r_bear; -} - -/* initialize each sub_path */ -init_path(close, n) - int close, - n; -{ - register Path_subpath *path; - - if (++count.path >= strokes[tableindex].n_subpaths) - BYE(EXCEED_PATH); - path = current_path = strokes[tableindex].subpaths + count.path; - path->n_pts = n; - path->closed = close; - if (n > 0) - path->pts.pt2df = (Path_point2df *) - malloc(n * sizeof (Path_point2df)); - if (path->pts.pt2df == NULL) - BYE(NO_MEMORY); - expect.point = path->n_pts; - count.point = -1; /* initialize point counter, not to - * exceed n_pts */ -} - -/* accumulating points for each sub_path */ -add_point(x, y) - float x, - y; -{ - register Path_subpath *path; - register Path_point2df *pt_ptr; - - path = current_path; - if (++count.point >= path->n_pts) - BYE(EXCEED_POINT); - pt_ptr = path->pts.pt2df + count.point; - pt_ptr->x = x; - pt_ptr->y = y; -} - -/* Path_type + n_subpaths + n_vertices */ -#define STROKE_HEAD (sizeof (Path_type) + sizeof (int) + sizeof (int)) - -/* write out file, close everything, free everything */ -fini() -{ - static long zero = 0; - - /* pointers used to walk the arrays */ - register Path_subpath *spath; - register Dispatch *tbl_ptr; - register Path *strptr; - register Property *prop_ptr; - - FILE *fp; - int npath; - register int i, - j, - k; - Standard *sp_ptr; - Path_point2df *pt; - - printf("\n/* GENERATED FILE -- DO NOT MODIFY */\n\n"); - printf("#include \"glutstroke.h\"\n\n"); - -# define BY_BYE(err) fclose(fp), BYE(err) - - /* adjust the characters for spacing, note max char width */ - head.max_width = 0.0; - for (i = 0, tbl_ptr = Table, strptr = strokes, sp_ptr = sp_table; - i < head.num_ch; i++, tbl_ptr++, strptr++, sp_ptr++) { - tbl_ptr->center += sp_ptr->std_left; - tbl_ptr->right += sp_ptr->std_left + sp_ptr->std_rght; - if (tbl_ptr->right > head.max_width) - head.max_width = tbl_ptr->right; - npath = strptr->n_subpaths; - if (npath > 0 || tbl_ptr->center != 0.0 || - tbl_ptr->right != 0.0) { - for (j = 0, spath = strptr->subpaths; - j < npath; j++, spath++) { - for(k=0, pt = spath->pts.pt2df; - kn_pts; k++, pt++) { - pt->x += sp_ptr->std_left; - } - } - } - } - - /* write the stroke table */ - for (i = 0, tbl_ptr = Table, strptr = strokes; - i < head.num_ch; i++, tbl_ptr++, strptr++) { - if (strptr->n_subpaths > 0 && - tbl_ptr->center != 0.0 && - tbl_ptr->right != 0.0) { - if(isprint(i)) { - printf("/* char: %d '%c' */\n\n", i, i); - } else { - printf("/* char: %d */\n\n", i); - } - - for (j = 0, spath = strptr->subpaths; - j < strptr->n_subpaths; j++, spath++) { - int z; - - printf("static const CoordRec char%d_stroke%d[] = {\n", i, j); - for(z = 0; z < spath->n_pts; z++) { - printf(" { %g, %g },\n", - spath->pts.pt2df[z].x, spath->pts.pt2df[z].y); - } - printf("};\n\n"); - } - - printf("static const StrokeRec char%d[] = {\n", i); - for (j = 0, spath = strptr->subpaths; - j < strptr->n_subpaths; j++, spath++) { - printf(" { %d, char%d_stroke%d },\n", - spath->n_pts, i, j); - } - printf("};\n\n"); - } - } - printf("static const StrokeCharRec chars[] = {\n"); - for (i = 0, tbl_ptr = Table, strptr = strokes; - i < head.num_ch; i++, tbl_ptr++, strptr++) { - if (strptr->n_subpaths > 0 && - tbl_ptr->center != 0.0 && - tbl_ptr->right != 0.0) { - printf(" { %d, char%d, %g, %g },\n", - strptr->n_subpaths, i, tbl_ptr->center, tbl_ptr->right); - } else { - printf(" { 0, /* char%d */ 0, %g, %g },\n", - i, tbl_ptr->center, tbl_ptr->right); - } - } - printf("};\n\n"); - - printf("StrokeFontRec %s = { \"%s\", %d, chars, %.6g, %.6g };\n\n", - symname, head.name, head.num_ch, - (double) head.top, (double) head.bottom); - - fflush(stdout); - - freeall(); -# undef BY_BYE -} - -freeall() -{ - register Path *path; - register Path_subpath *spath; - register int i, - j, - n; - - path = strokes; - for (i = 0; i < head.num_ch; i++, path++) { - n = path->n_subpaths; - if (n <= 0) - continue; - spath = path->subpaths; - for (j = 0; j < n; j++, spath++) - if (spath->pts.pt2df != NULL) - free((char *) spath->pts.pt2df); - if (path->subpaths != NULL) - free((char *) path->subpaths); - } - free(Table); - free(sp_table); - free(strokes); - if (head.properties != NULL) - free((char *) head.properties); -} - -check_nstroke() -{ - count.path++; - if (expect.path != count.path) - BYE(PATH_MISMATCH); -} - -check_npts() -{ - count.point++; - if (expect.point != count.point) - BYE(POINT_MISMATCH); -} diff --git a/lib/glut-3.7.6/lib/glut/strokelex.l b/lib/glut-3.7.6/lib/glut/strokelex.l deleted file mode 100644 index 82b598956..000000000 --- a/lib/glut-3.7.6/lib/glut/strokelex.l +++ /dev/null @@ -1,131 +0,0 @@ -%{ -/* $XConsortium: lex.l,v 5.4 91/08/26 10:55:26 gildea 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. - -******************************************************************/ - - -#include -#include -#include -#include "strokegen.h" - -#if defined(ISC) && defined(SYSV) && defined(SYSV386) && __STDC__ -extern double atof(char *); -#endif - -#ifdef FLEX_SCANNER -int yylineno; -#endif - -%} -%% -\'[^']*\' | -\"[^"]*\" return string(yytext, yyleng); -#.* ; -[ ,;\t\n]* /* natural dilimters */ ; - -[a-zA-Z][a-zA-Z0-9_.]* { - int token; - if (token = res_words(yytext)) - return token; - return string(yytext, yyleng); - } - -[+-]?[0-9]+\.?[0-9]*[eE][+-]?[0-9]+ | -[+-]?[0-9]+\.[0-9]* | -\.[0-9]+ { - yylval.dval = atof(yytext); - return REAL; - } -[+-]?[0-9]+#[0-9]+ { - return INTEGER; - } -[+-]?[0-9]+ { - yylval.ival = atoi(yytext); - return INTEGER; - } -[()] ; -%% - -int -res_words(str) -char str[]; -{ - static struct res_strct { - char *word; - int token; - } res_table[] = { - {"BOTTOM", BOTTOM}, - {"CENTER", CENTER}, - {"PROPERTIES", PROPERTIES}, - {"CLOSE", CLOSE}, - {"FONTNAME", FONTNAME}, - {"INDEX", INDEX}, - {"MAGIC", MAGIC}, - {"OPEN", OPEN}, - {"RIGHT", RIGHT}, - {"STROKE", STROKE}, - {"TOP", TOP}, - {"VERTICES", VERTICES}, - {"BEARING", BEARING}, - {"L_SPACE", L_SPACE}, - {"WIDTH", WIDTH}, - {"R_SPACE", R_SPACE}, - {"NUM_CH", NUM_CH}, - {0, 0} - }; - - { - register struct res_strct *reserved; - - reserved = res_table; - - do - if (!strcmp(str, reserved->word)) - break; - while ((++reserved)->word != 0); - return reserved->token; - } -} - -int -string(str, n) -char *str; -int n; -{ - if (*str == '\"' || *str == '\'') - { - str++; - n -= 2; /* one for EOL, one for end quote */ - } - if ((yylval.cval = (char *)malloc(n+1)) != NULL) - { - strncpy(yylval.cval, str, n); - yylval.cval[n] = '\0'; - return STRING; - } - else - return 0; -} diff --git a/lib/glut-3.7.6/lib/glut/win32_glx.c b/lib/glut-3.7.6/lib/glut/win32_glx.c deleted file mode 100644 index 47b84f5ba..000000000 --- a/lib/glut-3.7.6/lib/glut/win32_glx.c +++ /dev/null @@ -1,254 +0,0 @@ - -/* 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 "glutint.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 = wglCreateContext(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 ) && (visual->dwFlags & 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; -} diff --git a/lib/glut-3.7.6/lib/glut/win32_glx.h b/lib/glut-3.7.6/lib/glut/win32_glx.h deleted file mode 100644 index fd3c50355..000000000 --- a/lib/glut-3.7.6/lib/glut/win32_glx.h +++ /dev/null @@ -1,58 +0,0 @@ -#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__ */ diff --git a/lib/glut-3.7.6/lib/glut/win32_menu.c b/lib/glut-3.7.6/lib/glut/win32_menu.c deleted file mode 100644 index f7c7c8215..000000000 --- a/lib/glut-3.7.6/lib/glut/win32_menu.c +++ /dev/null @@ -1,531 +0,0 @@ - -/* 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 -#include -#include -#include -#include - -#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 APIENTRY -glutMenuStateFunc(GLUTmenuStateCB menuStateFunc) -{ - __glutMenuStatusFunc = (GLUTmenuStatusCB) menuStateFunc; -} - -void APIENTRY -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(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, HMENU 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(HMENU 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 APIENTRY -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 = CreatePopupMenu(); - menuList[menuid] = menu; - __glutSetMenu(menu); - return menuid + 1; -} - -int APIENTRY -__glutCreateMenuWithExit(GLUTselectCB selectFunc, void (__cdecl *exitfunc)(int)) -{ - __glutExitFunc = exitfunc; - return glutCreateMenu(selectFunc); -} - -void APIENTRY -glutDestroyMenu(int menunum) -{ - GLUTmenu *menu = __glutGetMenuByNum(menunum); - GLUTmenuItem *item, *next; - - if (__glutMappedMenu) { - menuModificationError(); - } - assert(menu->id == menunum - 1); - DestroyMenu(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 APIENTRY -glutGetMenu(void) -{ - if (__glutCurrentMenu) { - return __glutCurrentMenu->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; - } - __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(menu->win, MF_POPUP, (UINT)item->win, label); - } else { - AppendMenu(menu->win, MF_STRING, item->unique, label); - } -} - -void APIENTRY -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 APIENTRY -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 APIENTRY -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--; - } - - 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++; - - RemoveMenu(__glutCurrentMenu->win, (UINT) i - 1, MF_BYPOSITION); - InsertMenu(__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 APIENTRY -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++; - } - 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; - - RemoveMenu(__glutCurrentMenu->win, (UINT) i - 1, MF_BYPOSITION); - InsertMenu(__glutCurrentMenu->win, (UINT) i - 1, MF_BYPOSITION | MFT_STRING | MF_POPUP, (UINT)item->win, label); - - return; - } - i--; - item = item->next; - } - __glutWarning("Current menu has no %d item.", num); -} - -void APIENTRY -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(__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 APIENTRY -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 APIENTRY -glutDetachMenu(int button) -{ - if (__glutMappedMenu) { - menuModificationError(); - } - if (__glutCurrentWindow->menu[button] > 0) { - __glutCurrentWindow->buttonUses--; - __glutCurrentWindow->menu[button] = 0; - } -} - diff --git a/lib/glut-3.7.6/lib/glut/win32_util.c b/lib/glut-3.7.6/lib/glut/win32_util.c deleted file mode 100644 index 253e79581..000000000 --- a/lib/glut-3.7.6/lib/glut/win32_util.c +++ /dev/null @@ -1,134 +0,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" -#if defined(__CYGWIN32__) -typedef MINMAXINFO* LPMINMAXINFO; -#else -#include -#endif - -/* The following added by Paul Garceau */ -#if defined(__MINGW32__) -#include -#include -struct timeval; -#endif - -extern StrokeFontRec glutStrokeRoman, glutStrokeMonoRoman; -extern BitmapFontRec glutBitmap8By13, glutBitmap9By15, glutBitmapTimesRoman10, glutBitmapTimesRoman24, glutBitmapHelvetica10, glutBitmapHelvetica12, glutBitmapHelvetica18; - -int -gettimeofday(struct timeval* tp, void* tzp) -{ - LARGE_INTEGER t; - - if(QueryPerformanceCounter(&t)) { - /* hardware supports a performance counter */ - LARGE_INTEGER f; - QueryPerformanceFrequency(&f); - tp->tv_sec = t.QuadPart/f.QuadPart; - tp->tv_usec = ((float)t.QuadPart/f.QuadPart*1000*1000) - (tp->tv_sec*1000*1000); - } else { - /* hardware doesn't support a performance counter, - so get the time in a more traditional way. */ - DWORD t; - t = timeGetTime(); - tp->tv_sec = t / 1000; - tp->tv_usec = t % 1000; - } - - /* 0 indicates that the call succeeded. */ - return 0; -} - -/* 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("out of memory."); - /* NOTREACHED */ - - return NULL; /* keep MSVC compiler happy */ -} - -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 */ -} - diff --git a/lib/glut-3.7.6/lib/glut/win32_winproc.c b/lib/glut-3.7.6/lib/glut/win32_winproc.c deleted file mode 100644 index a03e31804..000000000 --- a/lib/glut-3.7.6/lib/glut/win32_winproc.c +++ /dev/null @@ -1,763 +0,0 @@ - -/* Copyright (c) Nate Robins, 1997, 2001. */ -/* 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" -#if defined(__CYGWIN32__) -typedef MINMAXINFO* LPMINMAXINFO; -#else -#include -#endif - -#ifdef _WIN32 -#include -#include -#include -#include /* Win32 Multimedia API header. */ -#endif - -extern unsigned __glutMenuButton; -extern GLUTidleCB __glutIdleFunc; -extern GLUTtimer *__glutTimerList; -extern void handleTimeouts(void); -extern GLUTmenuItem *__glutGetUniqueMenuItem(GLUTmenu * menu, int unique); -static HMENU __glutHMenu; - -static int __glutOnCreate( HWND hwnd, LPCREATESTRUCT createStruct ) -{ - return TRUE; -} - -static void __glutOnClose( HWND hwnd ) -{ - if ( __glutExitFunc ) - { - __glutExitFunc( 0 ); - } - - DestroyWindow( hwnd ); -} - -static void __glutOnDestroy( HWND hwnd ) -{ - GLUTwindow* window = __glutGetWindow( hwnd ); - if ( window ) - { - if ( window->ctx ) - { - wglMakeCurrent( NULL, NULL ); - wglDeleteContext( window->ctx ); - } - } -} - -static void __glutOnPaint( HWND hwnd ) -{ - GLUTwindow* window = __glutGetWindow( hwnd ); - - PAINTSTRUCT ps; - BeginPaint( hwnd, &ps ); - EndPaint( hwnd, &ps ); - - if ( window ) - { - if ( window->win == hwnd ) - { - __glutPostRedisplay(window, GLUT_REPAIR_WORK); - } - } -} - -static void __glutOnSize( HWND hwnd, UINT state, int width, int height ) -{ - GLUTwindow* window = __glutGetWindow( hwnd ); - if ( window ) - { - if ( window->width != width || window->height != height ) - { - 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 ); - } - } -} - -static 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; - } -} - -static void __glutOnActivate( HWND hwnd, UINT state, HWND hWndPrev, BOOL minimized ) -{ - GLUTwindow* window = __glutGetWindow( hwnd ); - if ( window ) - { - int visState = ! minimized; - updateWindowState( window, visState ); - } - - /* Just in case there is a palette, make sure we re-select it if the - window is being activated. */ - if ( state != WA_INACTIVE ) - { - PostMessage( hwnd, WM_PALETTECHANGED, 0, 0 ); - } -} - -static void __glutOnSetFocus( HWND hwnd, HWND hwndOldFocus ) -{ - GLUTwindow* 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 ) - { - /* 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. */ - MMRESULT result = joySetCapture( __glutCurrentWindow->win, JOYSTICKID1, 0, TRUE ); - if ( result == JOYERR_NOERROR ) - { - joySetThreshold( JOYSTICKID1, __glutCurrentWindow->joyPollInterval ); - } - } - } - } -} - -static void __glutOnKillFocus( HWND hwnd, HWND hwndNewFocus ) -{ - GLUTwindow* 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 ) - { - joyReleaseCapture( JOYSTICKID1 ); - } - } - } -} - -static void __glutOnGetMinMaxInfo( HWND hwnd, LPMINMAXINFO mmi ) -{ - GLUTwindow* window = __glutGetWindow( hwnd ); - if ( window ) - { - RECT r; - - /* set it to as small as possible, although it doesn't seem to allow - the decorations to be munged. */ - r.top = 0; - r.left = 0; - r.bottom = 1; - r.right = 1; - - /* get window coordinates from the client coordinates. */ - AdjustWindowRect( &r, GetWindowLong( hwnd, GWL_STYLE ), FALSE ); - mmi->ptMinTrackSize.x = r.right - r.left; - mmi->ptMinTrackSize.y = r.bottom - r.top; - mmi->ptMaxTrackSize.x = __glutScreenWidth; - mmi->ptMaxTrackSize.y = __glutScreenHeight; - } -} - -static GLUTwindow* getWindowUnderCursor( HWND hwndParent, GLUTwindow* windowParent ) -{ - /* It seems that some messages are sent to the parent window only. Since - GLUT wants to send information to the "current" window, descend the - heirarchy until the window with the cursor in it is found. */ - - assert( windowParent ); - - if ( windowParent->children ) - { - HWND hwndChild; - - POINT p; - GetCursorPos( &p ); - ScreenToClient( hwndParent, &p ); - - hwndChild = ChildWindowFromPoint( hwndParent, p ); - if ( hwndChild && hwndChild != hwndParent ) - { - GLUTwindow* windowChild = __glutGetWindow( hwndChild ); - if ( windowChild ) - { - windowParent = getWindowUnderCursor( hwndChild, windowChild ); - } - } - } - - return windowParent; -} - -static unsigned int getModifierMask( void ) -{ - unsigned int mask = 0; - - if ( ( GetKeyState( VK_SHIFT ) & 0xFF00 ) ) - { - mask |= ShiftMask; - } - if ( ( GetKeyState( VK_CONTROL ) & 0xFF00 ) ) - { - mask |= ControlMask; - } - if ( ( GetKeyState( VK_MENU ) & 0xFF00 ) ) - { - mask |= Mod1Mask; - } - - return mask; -} - -static int vkToSpecial( UINT vk ) -{ - switch ( vk ) - { - case VK_F1: return -GLUT_KEY_F1; - case VK_F2: return -GLUT_KEY_F2; - case VK_F3: return -GLUT_KEY_F3; - case VK_F4: return -GLUT_KEY_F4; - case VK_F5: return -GLUT_KEY_F5; - case VK_F6: return -GLUT_KEY_F6; - case VK_F7: return -GLUT_KEY_F7; - case VK_F8: return -GLUT_KEY_F8; - case VK_F9: return -GLUT_KEY_F9; - case VK_F10: return -GLUT_KEY_F10; - case VK_F11: return -GLUT_KEY_F11; - case VK_F12: return -GLUT_KEY_F12; - case VK_LEFT: return -GLUT_KEY_LEFT; - case VK_UP: return -GLUT_KEY_UP; - case VK_RIGHT: return -GLUT_KEY_RIGHT; - case VK_DOWN: return -GLUT_KEY_DOWN; - case VK_PRIOR: return -GLUT_KEY_PAGE_UP; - case VK_NEXT: return -GLUT_KEY_PAGE_DOWN; - case VK_HOME: return -GLUT_KEY_HOME; - case VK_END: return -GLUT_KEY_END; - case VK_INSERT: return -GLUT_KEY_INSERT; - default: return 0; - } -} - -static int getKey( UINT vk ) -{ - BYTE keyState[ 256 ]; - WORD c[ 2 ]; - - GetKeyboardState( keyState ); - - if ( ToAscii( vk, 0, keyState, c, 0 ) == 1 ) - { - return c[ 0 ]; - } - else - { - if ( vk == VK_DELETE ) - { - return 127; /* 127 = DEL in ascii */ - } - else - { - return vkToSpecial( vk ); - } - } -} - -static void __glutOnKey( HWND hwnd, UINT vk, BOOL down, int repeats, UINT flags ) -{ - int key; - POINT point; - - GLUTwindow* window = __glutGetWindow( hwnd ); - if ( window ) - { - window = getWindowUnderCursor( hwnd, window ); - - /* If we are ignoring auto repeated key strokes for the window, - and this keystroke is an autorepeat generated one, bail. */ - if ( down ) - { - BOOL autorepeat = ( ( flags >> 14 ) & 0x1 ) == 1; - - if ( window->ignoreKeyRepeat && autorepeat ) - { - return; - } - } - - GetCursorPos( &point ); - ScreenToClient( window->win, &point ); - - __glutModifierMask = getModifierMask(); - - key = getKey( vk ); - if ( key < 0 ) - { - /* special */ - - if ( down ) - { - if ( window->special ) - { - __glutSetWindow( window ); - window->special( -key, point.x, point.y ); - } - } - else - { - if ( window->specialUp ) - { - __glutSetWindow( window ); - window->specialUp( -key, point.x, point.y ); - } - } - } - else if ( key > 0 ) - { - /* ascii */ - - if ( down ) - { - if ( window->keyboard ) - { - __glutSetWindow( window ); - window->keyboard( ( unsigned char )key, point.x, point.y ); - } - } - else - { - if ( window->keyboardUp ) - { - __glutSetWindow( window ); - window->keyboardUp( ( unsigned char )key, point.x, point.y ); - } - } - } - - __glutModifierMask = ( unsigned int )~0; - } -} - -static void __glutOnButtonDn( HWND hwnd, int x, int y, int button ) -{ - GLUTmenu* menu; - GLUTwindow* window = __glutGetWindow( hwnd ); - - // !!! - look at this more closely sometime - // !!! - look at this more closely sometime - // !!! - look at this more closely sometime - - /* finish the menu if we get a button down message (user must have - cancelled the menu). */ - if ( __glutMappedMenu ) - { - POINT point; - - /* TODO: take this out once the menu on middle mouse stuff works - properly. */ - if (button == GLUT_MIDDLE_BUTTON) - return; - GetCursorPos(&point); - ScreenToClient(hwnd, &point); - __glutItemSelected = NULL; - __glutFinishMenu(hwnd, point.x, point.y); - return; - } - - // !!! - // !!! - // !!! - - /* Set the capture so we can get mouse events outside the window. */ - SetCapture( hwnd ); - - if ( window ) - { - menu = __glutGetMenuByNum( window->menu[ button ] ); - if ( menu ) - { - POINT point; - point.x = x; point.y = y; - 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 ) - { - __glutModifierMask = getModifierMask(); - - __glutSetWindow( window ); - window->mouse( button, GLUT_DOWN, x, y ); - - __glutModifierMask = ( unsigned int )~0; - } - } -} - -static void __glutOnButtonUp( HWND hwnd, int x, int y, int button ) -{ - GLUTwindow* window = __glutGetWindow( hwnd ); - - // !!! - look at this more closely sometime - // !!! - look at this more closely sometime - // !!! - look at this more closely sometime - - /* Bail out if we're processing a menu. */ - if (__glutMappedMenu) { - POINT point; - 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; - - /* 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; - } - - // !!! - // !!! - // !!! - - /* Release the mouse capture. */ - ReleaseCapture(); - - if ( window ) - { - if ( window->mouse ) - { - __glutModifierMask = getModifierMask(); - - __glutSetWindow( window ); - window->mouse( button, GLUT_UP, x, y ); - - __glutModifierMask = ( unsigned int )~0; - } - } -} - -static void __glutOnLButtonDn( HWND hwnd, BOOL doubleClick, int x, int y, UINT flags ) -{ - __glutOnButtonDn( hwnd, x, y, GLUT_LEFT_BUTTON ); -} - -static void __glutOnRButtonDn( HWND hwnd, BOOL doubleClick, int x, int y, UINT flags ) -{ - __glutOnButtonDn( hwnd, x, y, GLUT_RIGHT_BUTTON ); -} - -static void __glutOnMButtonDn( HWND hwnd, BOOL doubleClick, int x, int y, UINT flags ) -{ - __glutOnButtonDn( hwnd, x, y, GLUT_MIDDLE_BUTTON ); -} - -static void __glutOnLButtonUp( HWND hwnd, int x, int y, UINT flags ) -{ - __glutOnButtonUp( hwnd, x, y, GLUT_LEFT_BUTTON ); -} - -static void __glutOnRButtonUp( HWND hwnd, int x, int y, UINT flags ) -{ - __glutOnButtonUp( hwnd, x, y, GLUT_RIGHT_BUTTON ); -} - -static void __glutOnMButtonUp( HWND hwnd, int x, int y, UINT flags ) -{ - __glutOnButtonUp( hwnd, x, y, GLUT_MIDDLE_BUTTON ); -} - -static void __glutOnMouseMove( HWND hwnd, int x, int y, UINT flags ) -{ - GLUTwindow* window = __glutGetWindow( hwnd ); - - if ( __glutMappedMenu ) - { - return; - } - - if ( window ) - { - BOOL down = ( flags & MK_LBUTTON ) || ( flags & MK_RBUTTON ) || ( flags & MK_MBUTTON ); - - if ( window->motion && down ) - { - __glutSetWindow( window ); - window->motion( x, y ); - } - if ( window->passive && ! down ) - { - __glutSetWindow( window ); - window->passive( x, y ); - } - } -} - -static BOOL __glutOnEnterMenuLoop( HWND hwnd ) -{ - /* 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, 'MENU', 1, NULL ); - - return FALSE; -} - -static BOOL __glutOnExitMenuLoop( HWND hwnd ) -{ - /* nuke the above created timer...we don't need it anymore, since - the menu is gone now. */ - KillTimer( hwnd, 'MENU' ); - - return FALSE; -} - -static void __glutOnMenuSelect( HWND hwnd, HMENU hmenu, int item, HMENU hmenuPopup, UINT flags ) -{ - if ( hmenu != 0 ) - { - __glutHMenu = hmenu; - } -} - -static void __glutOnCommand( HWND hwnd, int id, HWND hwndCtl, UINT codeNotify ) -{ - if ( __glutMappedMenu ) - { - POINT point; - - #if 0 - if ( GetSubMenu( __glutHMenu, id ) ) - { - __glutItemSelected = NULL; - } - else - #endif - { - __glutItemSelected = __glutGetUniqueMenuItem( __glutMappedMenu, id ); - } - - GetCursorPos( &point ); - ScreenToClient( hwnd, &point ); - - __glutFinishMenu( hwnd, point.x, point.y ); - } -} - -static void __glutOnTimer( HWND hwnd, UINT id ) -{ - /* 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(); - } -} - -static BOOL __glutOnSetCursor( HWND hwnd, HWND hWndCursor, UINT codeHitTest, UINT msg ) -{ - GLUTwindow* window = __glutGetWindow( hwnd ); - if ( window ) - { - __glutSetCursor( window ); - } - - return FALSE; -} - -static BOOL __glutOnPalette( HWND hwnd ) -{ - GLUTwindow* 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; -} - -static BOOL __glutOnJoystick( HWND hwnd ) -{ - GLUTwindow* 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; -} - -LONG WINAPI __glutWindowProc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam ) -{ - switch ( msg ) - { - case WM_CREATE: return HANDLE_WM_CREATE ( hwnd, wparam, lparam, __glutOnCreate ); - case WM_CLOSE: return HANDLE_WM_CLOSE ( hwnd, wparam, lparam, __glutOnClose ); - case WM_DESTROY: return HANDLE_WM_DESTROY ( hwnd, wparam, lparam, __glutOnDestroy ); - case WM_PAINT: return HANDLE_WM_PAINT ( hwnd, wparam, lparam, __glutOnPaint ); - case WM_SIZE: return HANDLE_WM_SIZE ( hwnd, wparam, lparam, __glutOnSize ); - case WM_ACTIVATE: return HANDLE_WM_ACTIVATE ( hwnd, wparam, lparam, __glutOnActivate ); - case WM_SETFOCUS: return HANDLE_WM_SETFOCUS ( hwnd, wparam, lparam, __glutOnSetFocus ); - case WM_KILLFOCUS: return HANDLE_WM_KILLFOCUS ( hwnd, wparam, lparam, __glutOnKillFocus ); - case WM_GETMINMAXINFO: return HANDLE_WM_GETMINMAXINFO ( hwnd, wparam, lparam, __glutOnGetMinMaxInfo ); - case WM_KEYDOWN: return HANDLE_WM_KEYDOWN ( hwnd, wparam, lparam, __glutOnKey ); - case WM_KEYUP: return HANDLE_WM_KEYUP ( hwnd, wparam, lparam, __glutOnKey ); - case WM_SYSKEYDOWN: return HANDLE_WM_KEYDOWN ( hwnd, wparam, lparam, __glutOnKey ); - case WM_SYSKEYUP: return HANDLE_WM_KEYUP ( hwnd, wparam, lparam, __glutOnKey ); - case WM_LBUTTONDOWN: return HANDLE_WM_LBUTTONDOWN ( hwnd, wparam, lparam, __glutOnLButtonDn ); - case WM_RBUTTONDOWN: return HANDLE_WM_RBUTTONDOWN ( hwnd, wparam, lparam, __glutOnRButtonDn ); - case WM_MBUTTONDOWN: return HANDLE_WM_MBUTTONDOWN ( hwnd, wparam, lparam, __glutOnMButtonDn ); - case WM_LBUTTONUP: return HANDLE_WM_LBUTTONUP ( hwnd, wparam, lparam, __glutOnLButtonUp ); - case WM_RBUTTONUP: return HANDLE_WM_RBUTTONUP ( hwnd, wparam, lparam, __glutOnRButtonUp ); - case WM_MBUTTONUP: return HANDLE_WM_MBUTTONUP ( hwnd, wparam, lparam, __glutOnMButtonUp ); - case WM_MOUSEMOVE: return HANDLE_WM_MOUSEMOVE ( hwnd, wparam, lparam, __glutOnMouseMove ); - case WM_ENTERMENULOOP: return __glutOnEnterMenuLoop( hwnd ); - case WM_EXITMENULOOP: return __glutOnExitMenuLoop( hwnd ); - case WM_COMMAND: return HANDLE_WM_COMMAND ( hwnd, wparam, lparam, __glutOnCommand ); - case WM_TIMER: return HANDLE_WM_TIMER ( hwnd, wparam, lparam, __glutOnTimer ); - - case WM_SETCURSOR: - if ( LOWORD( lparam ) != HTCLIENT ) - { - /* Let the default window proc handle cursors outside the client area */ - break; - } - else - { - return HANDLE_WM_SETCURSOR( hwnd, wparam, lparam, __glutOnSetCursor ); - } - - case WM_PALETTECHANGED: - if ( ( HWND )wparam == hwnd ) - { - /* Don't respond to the message that we sent! */ - break; - } - /* Fall through to WM_QUERYNEWPALETTE */ - - case WM_QUERYNEWPALETTE: - return __glutOnPalette( hwnd ); - - case MM_JOY1MOVE: - case MM_JOY1ZMOVE: - case MM_JOY1BUTTONDOWN: - case MM_JOY1BUTTONUP: - return __glutOnJoystick( hwnd ); - - default: - break; - } - - return DefWindowProc( hwnd, msg, wparam, lparam ); -} diff --git a/lib/glut-3.7.6/lib/glut/win32_x11.c b/lib/glut-3.7.6/lib/glut/win32_x11.c deleted file mode 100644 index decca9c0b..000000000 --- a/lib/glut-3.7.6/lib/glut/win32_x11.c +++ /dev/null @@ -1,403 +0,0 @@ - -/* 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 = NULL; - int i, n; - - n = DescribePixelFormat(XHDC, 1, 0, NULL); - - if (n > 0) { - 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 - * "=x{+-}{+-}", 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); -} diff --git a/lib/glut-3.7.6/lib/glut/win32_x11.h b/lib/glut-3.7.6/lib/glut/win32_x11.h deleted file mode 100644 index 5aed5b89d..000000000 --- a/lib/glut-3.7.6/lib/glut/win32_x11.h +++ /dev/null @@ -1,319 +0,0 @@ -#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. */ - -#include -#include - -/* 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__ */ diff --git a/lib/glut-3.7.6/lib/lib.dsw b/lib/glut-3.7.6/lib/lib.dsw deleted file mode 100644 index 0174a8f88..000000000 --- a/lib/glut-3.7.6/lib/lib.dsw +++ /dev/null @@ -1,89 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "_all"=".\_all.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name gle - End Project Dependency - Begin Project Dependency - Project_Dep_Name glsmap - End Project Dependency - Begin Project Dependency - Project_Dep_Name glut32 - End Project Dependency - Begin Project Dependency - Project_Dep_Name mui - End Project Dependency -}}} - -############################################################################### - -Project: "gle"=".\gle\gle.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "glsmap"=".\glsmap\glsmap.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "glut32"=".\glut\glut32.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "mui"=".\mui\mui.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/lib/glut-3.7.6/lib/mui.n32/ObjectType.mk b/lib/glut-3.7.6/lib/mui.n32/ObjectType.mk deleted file mode 100644 index 6116ff97e..000000000 --- a/lib/glut-3.7.6/lib/mui.n32/ObjectType.mk +++ /dev/null @@ -1,2 +0,0 @@ -LDOPTS = $(LDOPTS_N32) -CSTYLE = $(CSTYLE_N32) diff --git a/lib/glut-3.7.6/lib/mui.n64/ObjectType.mk b/lib/glut-3.7.6/lib/mui.n64/ObjectType.mk deleted file mode 100644 index 55d0f4755..000000000 --- a/lib/glut-3.7.6/lib/mui.n64/ObjectType.mk +++ /dev/null @@ -1,3 +0,0 @@ -LDOPTS = $(LDOPTS_64) -#OPTIMIZER = -O0 -CSTYLE = $(CSTYLE_64) diff --git a/lib/glut-3.7.6/lib/mui/Imakefile b/lib/glut-3.7.6/lib/mui/Imakefile deleted file mode 100644 index 84e069c7d..000000000 --- a/lib/glut-3.7.6/lib/mui/Imakefile +++ /dev/null @@ -1,26 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1994. */ - -#define DoNormalLib YES - -#include - -#include "../../Glut.cf" - -SRCS = button.c displaylist.c gizmo.c glutmui.c \ - hslider.c miscui.c mui.c pulldown.c textlist.c uicolor.c vslider.c - -OBJS = button.o displaylist.o gizmo.o glutmui.o \ - hslider.o miscui.o mui.o pulldown.o textlist.o uicolor.o vslider.o - -#ifdef LibraryObjectRule -LibraryObjectRule() -#else -/* XXX Very lame, you must be using pre-R5 config files! This - will probably do essentially what LibraryObjectRule does. */ -NormalLibraryObjectRule() -#endif - -NormalLibraryTarget(mui,$(OBJS)) - -DependTarget() diff --git a/lib/glut-3.7.6/lib/mui/ObjectType.mk b/lib/glut-3.7.6/lib/mui/ObjectType.mk deleted file mode 100644 index f94dc77f5..000000000 --- a/lib/glut-3.7.6/lib/mui/ObjectType.mk +++ /dev/null @@ -1,2 +0,0 @@ -LDOPTS = $(LDOPTS_32) -CSTYLE = $(CSTYLE_32) diff --git a/lib/glut-3.7.6/lib/mui/browseparse.c b/lib/glut-3.7.6/lib/mui/browseparse.c deleted file mode 100644 index e7280bb1a..000000000 --- a/lib/glut-3.7.6/lib/mui/browseparse.c +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -#include -#include -#include - -char currentdirectoryname[200]; -char currentfilename[200]; -char browseprompt[200]; - -int xcenter = 300, ycenter = 300; - -void nukecr(char *s) -{ - while (*s && *s != '\n') s++; - *s = 0; -} - -void parsebrowsefile(FILE *f) -{ - char buffer[300]; - - while (0 != fgets(buffer, 299, f)) - switch(buffer[0]) { - case 'D': - strcpy(currentdirectoryname, &buffer[2]); - nukecr(currentdirectoryname); - break; - case 'F': - strcpy(currentfilename, &buffer[2]); - nukecr(currentfilename); - break; - case 'P': - strcpy(browseprompt, &buffer[2]); - nukecr(browseprompt); - break; - case 'X': - xcenter = atoi(&buffer[2]); - break; - case 'Y': - ycenter = atoi(&buffer[2]); - break; - } -} - -void setcurrentfilename(char *s) -{ - int len = strlen(s); - char *sptr; - - sptr = &s[len-1]; - while (sptr != s) { - if (*sptr == '/') { - strcpy(currentfilename, sptr+1); - *sptr = 0; - strcpy(currentdirectoryname, s); - return; - } - sptr--; - } - strcpy(currentfilename, s); -} - diff --git a/lib/glut-3.7.6/lib/mui/browser.c b/lib/glut-3.7.6/lib/mui/browser.c deleted file mode 100644 index 7b71d82eb..000000000 --- a/lib/glut-3.7.6/lib/mui/browser.c +++ /dev/null @@ -1,419 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define MAXFILES 400 -char *filelist[MAXFILES]; -char err[80]; -char *dot = "."; -char *dotdot = ".."; -char directory[300], originaldir[300]; -struct stat d, dd; -struct dirent *dir; - -DIR *file; -int off; - -extern int mui_singlebuffered; -int selectedfile = -1; -int cd(char *s); -void pwd(void); -void ls(void); - -extern void settlstrings(muiObject *obj, char **s); -void settltop(muiObject *obj, int top); - -muiObject *tl, *vs, *l4; - -void writeoutputfile(char *dir, char *file) -{ - FILE *f; - f = fopen(BROWSEFILE, "w"); - fprintf(f, "D:%s\n", dir); - if (file) - fprintf(f, "F:%s\n", file); - fclose(f); -} - -void controltltop(muiObject *obj, enum muiReturnValue value) -{ - float sliderval; - - if ((value != MUI_SLIDER_RETURN) && (value != MUI_SLIDER_THUMB)) return; - sliderval = muiGetVSVal(obj); - muiSetTLTop(tl, sliderval); -} - -void handlefileselection(muiObject *obj, enum muiReturnValue value) -{ - char *fname; - int len; - - if (value == MUI_TEXTLIST_RETURN_CONFIRM) { - selectedfile = muiGetTLSelectedItem(obj); - fname = filelist[selectedfile]; - len = strlen(fname); - if (fname[len-1] == '/') { - fname[len-1] = 0; - cd(fname); - return; - } else { - writeoutputfile(directory, fname); - exit(0); - } - } - if (value != MUI_TEXTLIST_RETURN) return; - selectedfile = muiGetTLSelectedItem(obj); - muiSetVSValue(vs, 1.0); -} - -void handleaccept(muiObject *obj, enum muiReturnValue value) -{ - char *fname; - int len; - - if (value != MUI_BUTTON_PRESS) return; - if (selectedfile == -1) return; - fname = filelist[selectedfile]; - len = strlen(fname); - if (fname[len-1] == '/') { - fname[len-1] = 0; - cd(fname); - return; - } else { - writeoutputfile(directory, fname); - exit(0); - } - obj = 0; /* for lint's sake */ -} - -void handleoriginal(muiObject *obj, enum muiReturnValue value) -{ - if (value != MUI_BUTTON_PRESS) return; - cd(originaldir); - obj = 0; /* for lint's sake */ -} - -void handleupdir(muiObject *obj, enum muiReturnValue value) -{ - if (value != MUI_BUTTON_PRESS) return; - cd(".."); - obj = 0; /* for lint's sake */ -} - -void handlecancel(muiObject *obj, enum muiReturnValue value) -{ - if (value != MUI_BUTTON_PRESS) return; - writeoutputfile(directory, 0); - exit(0); - obj = 0; /* for lint's sake */ -} - -void handletextbox(muiObject *obj, enum muiReturnValue value) -{ - char *s, *slash; - - if (value != MUI_TEXTBOX_RETURN) return; - s = muiGetTBString(obj); - if (0 == chdir(s)) { - pwd(); - ls(); - settlstrings(tl, filelist); - selectedfile = 0; - muiChangeLabel(l4, directory); - muiClearTBString(obj); - return; - } - /* hack up the path, if any */ - slash = strrchr(s, '/'); - if (slash == 0) { - slash = s-1; /* to make filename == slash+1 */ - } else { - if (*s == '/') { /* absolute path */ - strncpy(directory, s, slash-s); - directory[slash-s] = 0; - } else { - strcat(directory, "/"); - strncat(directory, s, slash-s); - } - } - /* now filename == slash+1 */ - writeoutputfile(directory, slash+1); - exit(0); -} - -#define THUMBHEIGHT 20 -#define ARROWSPACE 40 - -void maketestui(void) -{ - muiObject *l1, *l2, *l3, *b1, *b2, *b3, *b4, *t; - int xmin, ymin, xmax, ymax; - - muiNewUIList(1); - l1 = muiNewBoldLabel(10, 475, "Directory:"); - muiAddToUIList(1, l1); - l4 = muiNewLabel(80, 475, "./"); - muiAddToUIList(1, l4); - l2 = muiNewBoldLabel(10, 430, "Set directory:"); - muiAddToUIList(1, l2); - b1 = muiNewButton(10, 100, 390, 415); - muiLoadButton(b1, "Up"); - muiAddToUIList(1, b1); - muiSetCallback(b1, handleupdir); - b2 = muiNewButton(10, 100, 355, 380); - muiLoadButton(b2, "Original"); - muiAddToUIList(1, b2); - muiSetCallback(b2, handleoriginal); - tl = muiNewTextList(120, 80, 370, 22); - muiAddToUIList(1, tl); - muiGetObjectSize(tl, &xmin, &ymin, &xmax, &ymax); - vs = muiNewVSlider(xmax, ymin+2, ymax, 0, THUMBHEIGHT); - muiSetVSValue(vs, 1.0); - muiSetVSArrowDelta(vs, 10); - muiAddToUIList(1, vs); - t = muiNewTextbox(120, 390, 40); - muiSetActive(t, 1); - muiAddToUIList(1, t); - muiSetCallback(t, handletextbox); - l3 = muiNewBoldLabel(40, 50, "Open File:"); - muiAddToUIList(1, l3); - b3 = muiNewButton(130, 230, 9, 34); - muiLoadButton(b3, "Accept"); - muiSetCallback(b3, handleaccept); - muiAddToUIList(1, b3); - b4 = muiNewButton(250, 350, 9, 34); - muiLoadButton(b4, "Cancel"); - muiSetCallback(b4, handlecancel); - muiAddToUIList(1, b4); - muiSetCallback(vs, controltltop); - muiSetCallback(tl, handlefileselection); - - cd(directory); - strcpy(originaldir, directory); -} - -void main(int argc, char **argv) -{ - FILE *f; - - f = fopen(BROWSEFILE, "r"); - parsebrowsefile(f); - fclose(f); - strcpy(directory, currentdirectoryname); - maketestui(); - glutInit(&argc, argv); - if (argc > 1) mui_singlebuffered = 1; - glutInitWindowPosition(xcenter-200, ycenter-250); - glutInitWindowSize(400, 500); - if (mui_singlebuffered) - glutInitDisplayMode( GLUT_RGB | GLUT_SINGLE ); - else - glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE ); - glutCreateWindow("browser"); - muiInit(); - glutMainLoop(); -} - -void errormsg(char *s) -{ - fprintf(stderr, "%s\n", s); -} - -void prname(void) -{ - directory[0] = '/'; - if (off == 0) - off = 1; - directory[off] = 0; -} - -int dirlevels(char *s) -{ - int levels; - - for (levels = 0; *s; s++) - if (*s == '/') - levels++; - return(levels); -} - -int cat(void) -{ - register i, j; - char *name = directory + 1; /* I love C */ - - i = -1; - while (dir->d_name[++i] != 0) - if ((off+i+2) > MAXNAMLEN - 1) { - prname(); - return 1; - } - for(j=off+1; j>=0; --j) - name[j+i+1] = name[j]; - off=i+off+1; - name[i] = '/'; - for(--i; i>=0; --i) - name[i] = dir->d_name[i]; - return 0; -} - -/* get the current working directory (the following 3 routines are from pwd.c) */ -void pwd(void) -{ - for(off = 0;;) { - if(stat(dot, &d) < 0) { - fprintf(stderr, "pwd: cannot stat .!\n"); - exit(2); - } - if ((file = opendir(dotdot)) == NULL) { - fprintf(stderr,"pwd: cannot open ..\n"); - exit(2); - } - if(fstat(file->dd_fd, &dd) < 0) { - fprintf(stderr, "pwd: cannot stat ..!\n"); - exit(2); - } - if(chdir(dotdot) < 0) { - fprintf(stderr, "pwd: cannot chdir to ..\n"); - exit(2); - } - if(d.st_dev == dd.st_dev) { - if(d.st_ino == dd.st_ino) { - prname(); - chdir(directory); - return; - } - do - if ((dir = readdir(file)) == NULL) { - fprintf(stderr, "pwd: read error in ..\n"); - exit(2); - } - while (dir->d_ino != d.st_ino); - } - else do { - if((dir = readdir(file)) == NULL) { - fprintf(stderr, "pwd: read error in ..\n"); - exit(2); - } - stat(dir->d_name, &dd); - } while(dd.st_ino != d.st_ino || dd.st_dev != d.st_dev); - (void)closedir(file); - if (cat()) { - chdir(directory); - return; - } - } -} - -void freels(void) -{ - char **p; - - p = filelist; - while (*p != 0) { - free(*p); - *p = 0; - p++; - } -} - -int mystrcmp(char **s1, char **s2) -{ - return strcmp(*s1,*s2); -} - -void ls(void) -{ - DIR *dirp; - int i = 0; - int len; - struct dirent *dir; - struct stat statbuf; - - - if ((dirp = opendir(directory)) == NULL) { - errormsg("bad directory\n"); - return; - } - freels(); - chdir(directory); - while ((dir = readdir(dirp)) != NULL) { - if (dir->d_name[0] == '.') - continue; - /*f = open(dir->d_name, O_RDONLY); - if (!f) - continue; - if (!okfiletype(getfiletype(f))) - continue; - close(f);*/ - stat(dir->d_name,&statbuf); - len = strlen(dir->d_name) + 1 + (statbuf.st_mode & S_IFDIR? 1 : 0); - filelist[i] = (char *)malloc(len); - strcpy(filelist[i], dir->d_name); - if (statbuf.st_mode & S_IFDIR) { - filelist[i][len-2] = '/'; filelist[i][len-1] = 0; - } - i++; - } - filelist[i] = 0; - qsort(&filelist[0], i, sizeof (char *), (int (*)(const void *, const void *))mystrcmp); - closedir(dirp); -} - -int cd(char *s) -{ - if(chdir(s) < 0) { - fprintf(stderr,"cannot open %s\n",s); - return -1; - } - pwd(); - ls(); - settlstrings(tl, filelist); - muiChangeLabel(l4, directory); - selectedfile = 0; - return 0; -} diff --git a/lib/glut-3.7.6/lib/mui/button.c b/lib/glut-3.7.6/lib/mui/button.c deleted file mode 100644 index 40e4e87f1..000000000 --- a/lib/glut-3.7.6/lib/mui/button.c +++ /dev/null @@ -1,508 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -#include -#include -#include -#include - -void muiLinkButtons(muiObject *obj1, muiObject *obj2) -{ - Button *b1, *b2, *tmp; - - if ((obj1->type != MUI_RADIOBUTTON || obj2->type != MUI_RADIOBUTTON) && - (obj1->type != MUI_TINYRADIOBUTTON || obj2->type != MUI_TINYRADIOBUTTON)) { - muiError("muiLinkButtons: attempt to link non radio buttons"); - } - b1 = (Button *)obj1->object; - b2 = (Button *)obj2->object; - if (b1->link == 0 && b2->link == 0) { - b1->link = b2; - b2->link = b1; - return; - } - if (b1->link == 0) { - b1->link = b2->link; - b2->link = b1; - return; - } - if (b2->link == 0) { - b2->link = b1->link; - b1->link = b2; - return; - } - tmp = b1->link; - b1->link = b2->link; - b2->link = tmp; - return; -} - -void muiClearRadio(muiObject *rad) -{ - Button *b1, *b2; - b2 = b1 = (Button *)rad->object; - muiSetActive(b1->object, 0); - if (b1->link == 0) return; - b1 = b1->link; - while (b1 != b2) { - muiSetActive(b1->object, 0); - b1 = b1->link; - } -} - - -static void drawbuttonlabel(muiObject *obj) -{ - int xmin, ymin; - Button *b = (Button *)obj->object; - - if (!b->str) - return; - - switch (obj->type) { -/* - case TINYTOGGLE: - xmin = obj->xmin+16; - ymin = obj->ymin+4; - break; - case GENERICBUTTON: - xmin = obj->xmin+ (obj->xmax - obj->xmin - strwidth(obj->str))/2 + 1; - ymin = obj->ymin+9; - break; - case PUSHBUTTON: - if (getdefaultbut(b)) { - xmin = obj->xmin+ (obj->xmax - 15 - obj->xmin - strwidth(obj->str))/2 + 1; - ymin = obj->ymin+9; - } else { - xmin = obj->xmin+ (obj->xmax - obj->xmin - strwidth(obj->str))/2 + 1; - ymin = obj->ymin+9; - } - break; - case BED: - xmin = obj->xmin+ (obj->xmax - obj->xmin - strwidth(obj->str))/2 + 1; - ymin = obj->ymin+8; - break; - case CHECKBUTTON: - xmin = obj->xmin+27; - ymin = obj->ymin+6; - break; -*/ - case MUI_TINYRADIOBUTTON: - xmin = obj->xmin+19; - ymin = obj->ymin+4; - break; - case MUI_RADIOBUTTON: - xmin = obj->xmin+30; - ymin = obj->ymin+8; - break; -/* - case INDICATOR: - xmin = obj->xmin+20; - ymin = obj->ymin+8; - break; -*/ - default: - xmin = obj->xmin+20; - ymin = obj->ymin+9; - break; - } - { - if (muiGetEnable(obj)) - uiBlack(); - else - uiDkGray(); - uicmov2i(xmin, ymin); - uicharstr(b->str, UI_FONT_NORMAL); - - } -} - -void drawradiobutton(muiObject *obj) -{ - int xmin = obj->xmin, xmax = obj->xmax, ymin = obj->ymin, ymax = obj->ymax; - - if (!muiGetVisible(obj)) { -/* - int sl = 0; - font(BUTTONFONT1); - if (b->str) sl = strwidth(b->str); - backgrounddraw(b->xmin,b->ymin,b->xmin+30+sl,b->ymax); -*/ - return; - } - - if (muiGetEnable(obj)) { - if (obj->locate) { - if (obj->select) { - if (obj->active) { - uiDkGray(); - uipmv2i(xmin,ymin+10); uipdr2i(xmin,ymin+13); - uipdr2i(xmin+10,ymax); - uipdr2i(xmin+13,ymax); uipdr2i(xmax,ymin+13); uipdr2i(xmax,ymin+10); - uipdr2i(xmin+13,ymin); uipdr2i(xmin+10,ymin); uipclos(); - - uiVyLtGray(); - uipmv2i(xmin+1,ymin+11); uipdr2i(xmin+1,ymin+13); - uipdr2i(xmin+10,ymax-1); uipdr2i(xmin+13,ymax-1); - uipdr2i(xmax-1,ymin+13); uipdr2i(xmax-1,ymin+11); - uipdr2i(xmin+13,ymin+2); uipdr2i(xmin+10,ymin+2); - uipclos(); - - uiWhite(); - uimove2i(xmin+1,ymin+12); uidraw2i(xmin+11,ymax-1); - uidraw2i(xmin+12,ymax-1); uidraw2i(xmax-1,ymin+12); - uiendline(); - uimove2i(xmin+1,ymin+13); uidraw2i(xmin+10,ymax-1); - uidraw2i(xmin+13,ymax-1); uidraw2i(xmax-1,ymin+13); - uiendline(); - - } else { - - uiDkGray(); - uimove2i(xmin,ymin+13); uidraw2i(xmin+10,ymax); - uidraw2i(xmin+13,ymax); uidraw2i(xmax,ymin+13); - uiendline(); - uimove2i(xmin,ymin+12); uidraw2i(xmin+10,ymax-1); - uidraw2i(xmin+13,ymax-1); uidraw2i(xmax,ymin+12); - uiendline(); - - uiLtGray(); - uimove2i(xmin+1,ymin+12); uidraw2i(xmin+11,ymax-1); - uidraw2i(xmin+12,ymax-1); uidraw2i(xmax-1,ymin+12); - uiendline(); - - uiWhite(); - uimove2i(xmin+2,ymin+12); uidraw2i(xmin+11,ymax-2); - uidraw2i(xmin+12,ymax-2); uidraw2i(xmax-2,ymin+12); - uiendline(); - uimove2i(xmin+3,ymin+12); uidraw2i(xmin+11,ymax-3); - uidraw2i(xmin+12,ymax-3); uidraw2i(xmax-3,ymin+12); - uiendline(); - - uiVyLtGray(); - uipmv2i(xmin+4,ymin+12); uipdr2i(xmin+11,ymax-4); - uipdr2i(xmin+12,ymax-4); uipdr2i(xmax-4,ymin+12); - uipdr2i(xmin+12,ymin+5); uipdr2i(xmin+11,ymin+5); - uipclos(); - - uiLtGray(); - uimove2i(xmin+3,ymin+11); uidraw2i(xmin+11,ymin+3); - uidraw2i(xmin+12,ymin+3); uidraw2i(xmax-3,ymin+11); - uiendline(); - uimove2i(xmin+4,ymin+11); uidraw2i(xmin+11,ymin+4); - uidraw2i(xmin+12,ymin+4); uidraw2i(xmax-4,ymin+11); - uiendline(); - - uiBlack(); - uimove2i(xmin+2,ymin+11); uidraw2i(xmin+11,ymin+2); - uidraw2i(xmin+12,ymin+2); uidraw2i(xmax-2,ymin+11); - uiendline(); - - uiWhite(); - uimove2i(xmin,ymin+10); uidraw2i(xmin+10,ymin); - uidraw2i(xmin+13,ymin); uidraw2i(xmax,ymin+10); - uiendline(); - uimove2i(xmin,ymin+11); uidraw2i(xmin+10,ymin+1); - uidraw2i(xmin+13,ymin+1);uidraw2i(xmax,ymin+11); - uiendline(); - uimove2i(xmin+1,ymin+11);uidraw2i(xmin+10,ymin+2); - uimove2i(xmin+13,ymin+2);uidraw2i(xmax-1,ymin+11); - uiendline(); - } - - } else { /* not selected */ - - if (obj->active) { - - uiDkGray(); - uimove2i(xmin,ymin+13); uidraw2i(xmin+10,ymax); - uidraw2i(xmin+13,ymax); uidraw2i(xmax,ymin+13); - uiendline(); - uimove2i(xmin,ymin+12); uidraw2i(xmin+10,ymax-1); - uidraw2i(xmin+13,ymax-1); uidraw2i(xmax,ymin+12); - uiendline(); - - uiLtGray(); - uimove2i(xmin+1,ymin+12); uidraw2i(xmin+11,ymax-1); - uidraw2i(xmin+12,ymax-1); uidraw2i(xmax-1,ymin+12); - uiendline(); - - uiWhite(); - uimove2i(xmin+2,ymin+12); uidraw2i(xmin+11,ymax-2); - uidraw2i(xmin+12,ymax-2); uidraw2i(xmax-2,ymin+12); - uiendline(); - uimove2i(xmin+3,ymin+12); uidraw2i(xmin+11,ymax-3); - uidraw2i(xmin+12,ymax-3); uidraw2i(xmax-3,ymin+12); - uiendline(); - - uiVyLtGray(); - uipmv2i(xmin+4,ymin+12); uipdr2i(xmin+11,ymax-4); - uipdr2i(xmin+12,ymax-4); uipdr2i(xmax-4,ymin+12); - uipdr2i(xmin+12,ymin+5); uipdr2i(xmin+11,ymin+5); - uipclos(); - - uiLtGray(); - uimove2i(xmin+3,ymin+11); uidraw2i(xmin+11,ymin+3); - uidraw2i(xmin+12,ymin+3); uidraw2i(xmax-3,ymin+11); - uiendline(); - uimove2i(xmin+4,ymin+11); uidraw2i(xmin+11,ymin+4); - uidraw2i(xmin+12,ymin+4); uidraw2i(xmax-4,ymin+11); - uiendline(); - - uiBlack(); - uimove2i(xmin+2,ymin+11); uidraw2i(xmin+11,ymin+2); - uidraw2i(xmin+12,ymin+2); uidraw2i(xmax-2,ymin+11); - uiendline(); - - uiWhite(); - uimove2i(xmin,ymin+10); uidraw2i(xmin+10,ymin); - uidraw2i(xmin+13,ymin); uidraw2i(xmax,ymin+10); - uiendline(); - uimove2i(xmin,ymin+11); uidraw2i(xmin+10,ymin+1); - uidraw2i(xmin+13,ymin+1);uidraw2i(xmax,ymin+11); - uiendline(); - uimove2i(xmin+1,ymin+11);uidraw2i(xmin+10,ymin+2); - uimove2i(xmin+13,ymin+2);uidraw2i(xmax-1,ymin+11); - uiendline(); - - } else { /* not active */ - - uiDkGray(); - uipmv2i(xmin,ymin+10); uipdr2i(xmin,ymin+13); - uipdr2i(xmin+10,ymax); - uipdr2i(xmin+13,ymax); uipdr2i(xmax,ymin+13); uipdr2i(xmax,ymin+10); - uipdr2i(xmin+13,ymin); uipdr2i(xmin+10,ymin); uipclos(); - - uiVyLtGray(); - uipmv2i(xmin+1,ymin+11); uipdr2i(xmin+1,ymin+13); - uipdr2i(xmin+10,ymax-1); uipdr2i(xmin+13,ymax-1); - uipdr2i(xmax-1,ymin+13); uipdr2i(xmax-1,ymin+11); - uipdr2i(xmin+13,ymin+2); uipdr2i(xmin+10,ymin+2); - uipclos(); - - uiWhite(); - uimove2i(xmin+1,ymin+12); uidraw2i(xmin+11,ymax-1); - uidraw2i(xmin+12,ymax-1); uidraw2i(xmax-1,ymin+12); - uiendline(); - uimove2i(xmin+1,ymin+13); uidraw2i(xmin+10,ymax-1); - uidraw2i(xmin+13,ymax-1); uidraw2i(xmax-1,ymin+13); - uiendline(); - } - } - - } else { /* not located */ - - if (obj->active) { - - uiDkGray(); - uimove2i(xmin,ymin+13); uidraw2i(xmin+10,ymax); - uidraw2i(xmin+13,ymax); uidraw2i(xmax,ymin+13); - uiendline(); - uimove2i(xmin,ymin+12); uidraw2i(xmin+10,ymax-1); - uidraw2i(xmin+13,ymax-1); uidraw2i(xmax,ymin+12); - uiendline(); - - uiLtGray(); - uimove2i(xmin+1,ymin+12); uidraw2i(xmin+11,ymax-1); - uidraw2i(xmin+12,ymax-1); uidraw2i(xmax-1,ymin+12); - uiendline(); - - uiWhite(); - uimove2i(xmin+2,ymin+12); uidraw2i(xmin+11,ymax-2); - uidraw2i(xmin+12,ymax-2); uidraw2i(xmax-2,ymin+12); - uiendline(); - uimove2i(xmin+3,ymin+12); uidraw2i(xmin+11,ymax-3); - uidraw2i(xmin+12,ymax-3); uidraw2i(xmax-3,ymin+12); - uiendline(); - - uiLtGray(); - uipmv2i(xmin+4,ymin+12); uipdr2i(xmin+11,ymax-4); - uipdr2i(xmin+12,ymax-4); uipdr2i(xmax-4,ymin+12); - uipdr2i(xmin+12,ymin+5); uipdr2i(xmin+11,ymin+5); uipclos(); - - uiLtGray(); - uimove2i(xmin+3,ymin+11); uidraw2i(xmin+11,ymin+3); - uidraw2i(xmin+12,ymin+3); uidraw2i(xmax-3,ymin+11); - uiendline(); - uimove2i(xmin+4,ymin+11); uidraw2i(xmin+11,ymin+4); - uidraw2i(xmin+12,ymin+4); uidraw2i(xmax-4,ymin+11); - uiendline(); - - uiBlack(); - uimove2i(xmin+2,ymin+11); uidraw2i(xmin+11,ymin+2); - uidraw2i(xmin+12,ymin+2); uidraw2i(xmax-2,ymin+11); - uiendline(); - - uiWhite(); - uimove2i(xmin,ymin+10); uidraw2i(xmin+10,ymin); - uidraw2i(xmin+13,ymin); uidraw2i(xmax,ymin+10); - uiendline(); - uimove2i(xmin,ymin+11); uidraw2i(xmin+10,ymin+1); - uidraw2i(xmin+13,ymin+1);uidraw2i(xmax,ymin+11); - uiendline(); - uimove2i(xmin+1,ymin+11);uidraw2i(xmin+10,ymin+2); - uimove2i(xmin+13,ymin+2);uidraw2i(xmax-1,ymin+11); - uiendline(); - - } else { - - uiDkGray(); - uipmv2i(xmin,ymin+10); uipdr2i(xmin,ymin+13); - uipdr2i(xmin+10,ymax); - uipdr2i(xmin+13,ymax); uipdr2i(xmax,ymin+13); - uipdr2i(xmax,ymin+10); - uipdr2i(xmin+13,ymin); uipdr2i(xmin+10,ymin); uipclos(); - - uiLtGray(); - uipmv2i(xmin+1,ymin+11); uipdr2i(xmin+1,ymin+13); - uipdr2i(xmin+10,ymax-1); uipdr2i(xmin+13,ymax-1); - uipdr2i(xmax-1,ymin+13); uipdr2i(xmax-1,ymin+11); - uipdr2i(xmin+13,ymin+2); uipdr2i(xmin+10,ymin+2); uipclos(); - - uiWhite(); - uimove2i(xmin+1,ymin+12); uidraw2i(xmin+11,ymax-1); - uidraw2i(xmin+12,ymax-1); uidraw2i(xmax-1,ymin+12); - uiendline(); - } - } - - } else { /* not enabled */ - uiDkGray(); - uipmv2i(xmin,ymin+10); uipdr2i(xmin,ymin+13); uipdr2i(xmin+10,ymax); - uipdr2i(xmin+13,ymax); uipdr2i(xmax,ymin+13); uipdr2i(xmax,ymin+10); - uipdr2i(xmin+13,ymin); uipdr2i(xmin+10,ymin); uipclos(); - - uiLtGray(); - uipmv2i(xmin+1,ymin+10); uipdr2i(xmin+1,ymin+13); - uipdr2i(xmin+10,ymax-1); uipdr2i(xmin+13,ymax-1); - uipdr2i(xmax-1,ymin+13); uipdr2i(xmax-1,ymin+10); - uipdr2i(xmin+13,ymin+1); uipdr2i(xmin+10,ymin+1); uipclos(); - } - - if (obj->active) { - if (muiGetEnable(obj)) { - uiSlateBlue(); - uipmv2i(xmin+12,ymax-5); uipdr2i(xmax-6,ymin+13); - uipdr2i(xmax-8,ymin+13); uipdr2i(xmin+12,ymax-7); uipclos(); - - uiBlue(); - uipmv2i(xmin+12,ymax-8); uipdr2i(xmax-9,ymin+13); - uipdr2i(xmax-9,ymin+12); uipdr2i(xmin+12,ymin+10); uipclos(); - - uiBlack(); - uipmv2i(xmin+12,ymin+9); uipdr2i(xmin+15,ymin+12); - uipdr2i(xmax-6,ymin+12); uipdr2i(xmin+13,ymin+8); - uipdr2i(xmin+12,ymin+8); uipclos(); - - uiDkGray(); - uimove2i(xmin+13,ymin+7); uidraw2i(xmax-5,ymin+12); - uiendline(); - } else { - uiSlateBlue(); - uipmv2i(xmin+12,ymax-5); uipdr2i(xmax-6,ymin+13); - uipdr2i(xmax-6,ymin+12); uipdr2i(xmin+13,ymin+8); - uipdr2i(xmin+12,ymin+8); uipclos(); - - uiBlack(); - uimove2i(xmin+13,ymin+7); uidraw2i(xmax-5,ymin+12); - uiendline(); - } - } - drawbuttonlabel(obj); -} - -void drawtinyradio(muiObject *obj) -{ - int xmin = obj->xmin, xmax = obj->xmax, - ymin = obj->ymin, ymax = obj->ymax; - int sxmin = obj->xmin+4, sxmax = obj->xmin+13, sxmid = obj->xmin+8, - symin = obj->ymin+3, symax = obj->ymin+12, symid = obj->ymin+7; - - if (!muiGetVisible(obj)) { - backgrounddraw(obj->xmin,obj->ymin,obj->xmax,obj->ymax); - return; - } - - if (muiGetEnable(obj) && obj->locate) { - if (obj->select) { - drawedges(xmin++,xmax--,ymin++,ymax--,uiBlack,uiWhite); - drawedges(xmin++,xmax--,ymin++,ymax--,uiDkGray,uiBlack); - drawedges(xmin++,xmax--,ymin++,ymax--,uiWhite,uiMmGray); - - uiVyLtGray(); - uirectfi(xmin,ymin,xmax,ymax); - } else { - uiWhite(); - uirectfi(xmin,ymin,xmax,ymax); - } - } else { - uiBackground(); - uirectfi(xmin,ymin,xmax,ymax); - } - - - uiBlack(); - uipmv2i(sxmin, symid); uipdr2i(sxmin++, symid+1); - uipdr2i(sxmid, symax); uipdr2i(sxmid+1, symax--); uipdr2i(sxmax, symid+1); - uipclos(); - - uiLtGray(); - uipmv2i(sxmax--, symid); uipdr2i(sxmid+1, symin); - uipdr2i(sxmid, symin++); uipdr2i(sxmin, symid-1); - uipclos(); - - if (obj->active) { - if (!muiGetEnable(obj)) - uiLtYellow(); - else - uiYellow(); - } else { - if (!muiGetEnable(obj)) - uiMmGray(); - else if (obj->locate) - uiMmYellow(); - else - uiDkYellow(); - } - uipmv2i(sxmin, symid); uipdr2i(sxmin, symid+1); - uipdr2i(sxmid, symax); uipdr2i(sxmid+1, symax); uipdr2i(sxmax, symid+1); - uipdr2i(sxmax, symid); uipdr2i(sxmid+1, symin); uipdr2i(sxmid, symin); - uipclos(); - - drawbuttonlabel(obj); -} - diff --git a/lib/glut-3.7.6/lib/mui/dirent32.h b/lib/glut-3.7.6/lib/mui/dirent32.h deleted file mode 100644 index 02608c4b3..000000000 --- a/lib/glut-3.7.6/lib/mui/dirent32.h +++ /dev/null @@ -1,96 +0,0 @@ -/* - - Win32 lacks unix dirent support. But, we can fake it. Many - thanks to Dave Lubrik (lubrik@jaka.ece.uiuc.edu) who found and - fixed many bugs in the original code. - - */ - - -#ifndef _WIN32 -#include -#else - -#include - - - -struct dirent { - char d_name[MAX_PATH]; -}; - -typedef struct { - WIN32_FIND_DATA wfd; - HANDLE hFind; - struct dirent de; -} DIR; - - -static DIR * -opendir(char *pSpec) -{ - DIR *pDir = malloc(sizeof(DIR)); - char pathnamespec[MAX_PATH]; - int l; /* length of directory specifier */ - char c; /* last char of directory specifier */ - - /* Given a directory pathname in pSpec, add \ (if necessary) and * - to yield a globbable expression describing all the files in that - directory */ - strcpy(pathnamespec, pSpec); - - /* Add a \ to separate the directory name from the filename-wildcard - "*", unless it already ends in a \ (don't create \\ sequences), - or it is a drivespec (since "C:*" differs in meaning from "C:\*") */ - if (((l = strlen(pSpec)) > 0) && ((c = pSpec[l-1]) != '\\') && (c != ':')) - strcat(pathnamespec, "\\"); - - /* Add the filename wildcard "*" */ - strcat(pathnamespec,"*"); - - /* Find files matching that expression (all the files in that - directory) */ - pDir->hFind = FindFirstFile(pathnamespec, &pDir->wfd); - - return pDir; -} - - -/* closedir takes a pointer to a DIR structure created by opendir, and - frees up resources allocated by opendir. Call it when done with a - directory. */ -static void -closedir(DIR * pDir) -{ - FindClose(pDir->hFind); /* Release system resources */ - free(pDir); /* release memory */ -} - -/* readdir is used to iterate through the files in a directory. It - takes a pointer to a DIR structure created by opendir, and each - time it is called it returns the name of another file in the - directory passed to opendir. Returns: a pointer to a dirent - structure, containing the file name. NULL if there are no more - files in the directory. */ -static struct dirent * -readdir(DIR *pDir) -{ - /* The previous call to opendir or readdir has already found the next - file (using FindFirstFile or FindNextFile respectively). Return - that file name to the caller, and silently find the next one. */ - - if (*(pDir->wfd.cFileName)) { /* If we haven't exhausted the files */ - strcpy(pDir->de.d_name, pDir->wfd.cFileName); /* copy name */ - - if (!FindNextFile(pDir->hFind, &pDir->wfd)) /* get next */ - *(pDir->wfd.cFileName) = 0; - /* if no more, zero next filename, so that next time through, - we don't even try. */ - - return &pDir->de; /* return dirent struct w/filename */ - } - - return NULL; /* No more files to find. */ -} - -#endif diff --git a/lib/glut-3.7.6/lib/mui/displaylist.c b/lib/glut-3.7.6/lib/mui/displaylist.c deleted file mode 100644 index 64cf3edb0..000000000 --- a/lib/glut-3.7.6/lib/mui/displaylist.c +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -#include -#include -#include - -#define MOVE2I 1 -#define DRAW2I 2 -#define RECTFI 3 -#define CMOV2I 4 -#define CHARSTR 5 -#define PMV2I 6 -#define PDR2I 7 -#define PCLOS 8 -#define RECTI 9 -#define CLEAR 10 -#define ENDLINE 11 -#define PUSHVP 12 -#define POPVP 13 -#define VP 14 - -extern short ditherflag; - -void charstr(char *s, int font) -{ - int len = (int) strlen(s); - int i; - void **f; - switch(font) { - case UI_FONT_BOLD: - case UI_FONT_NORMAL: - f = GLUT_BITMAP_HELVETICA_12; - break; - case UI_FONT_FIXED_PITCH: - f = GLUT_BITMAP_9_BY_15; - break; - } - for (i = 0; i < len; i++) - glutBitmapCharacter(f, s[i]); -} - -void uipushviewport(void) -{ -} - -void uipopviewport(void) -{ - glDisable(GL_SCISSOR_TEST); -} - -void uiviewport(int x, int y, int width, int height) -{ - glScissor(x, y, width, height); - glEnable(GL_SCISSOR_TEST); -} - -void uicharstr(char *s, int font) -{ - charstr(s, font); -} - -void uirecti(int x, int y, int z, int w) -{ - glBegin(GL_LINE_LOOP); - glVertex2i(x, y); - glVertex2i(x, w); - glVertex2i(z, w); - glVertex2i(z, y); - glEnd(); -} - -void uirectfi(int x, int y, int x1, int y1) -{ - glRecti(x, y, x1, y1); -} - -void uipclos(void) -{ - glEnd(); -} - -void uiclear(void) -{ - glClearColor(214.0/255.0, 214.0/255.0, 214.0/255.0, 0.0); - glClear(GL_COLOR_BUFFER_BIT); -} - -void uipdr2i(int x, int y) -{ - glVertex2i(x, y); -} - -void uipmv2i(int x, int y) -{ - glBegin(GL_POLYGON); - glVertex2i(x, y); -} - -void uicmov2i(int x, int y) -{ - glRasterPos2i(x, y); -} - -void uidraw2i(int x, int y) -{ - glVertex2i(x, y); -} - -void uiendline(void) -{ - glEnd(); -} - -void uimove2i(int x, int y) -{ - glBegin(GL_LINE_STRIP); - glVertex2i(x, y); -} - diff --git a/lib/glut-3.7.6/lib/mui/gizmo.c b/lib/glut-3.7.6/lib/mui/gizmo.c deleted file mode 100644 index 14ee1cd12..000000000 --- a/lib/glut-3.7.6/lib/mui/gizmo.c +++ /dev/null @@ -1,447 +0,0 @@ -/* - * Copyright (c) 1992, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - - /* jot text editor source code. */ - /* Tom Davis */ - /* February 7, 1992 */ - -#include -#include -#include -#include -#include -#include - -#define BUTTONUP 0 -#define BUTTONDOWN 1 -#define BUTTONCLICK 2 -#define BUTTONDOUBLE 3 - -void drawtb(muiObject *); - -int definescaledfont = 0; -char *tmpfilename; - -/* NEW BUTTON PROCEDURES */ - -int strwidth(char *s) -{ - int len = 0; - while (*s) { - len += glutBitmapWidth(GLUT_BITMAP_HELVETICA_12, *s++); - } - return len; -} - -Button *newbut(void) -{ - Button *b; - b = newbed(); - b->type = BUTTON; - b->link = 0; - return b; -} - -Button *newradiobut(void) -{ - Button *b; - b = newbed(); - b->type = RADIOBUTTON; - b->link = 0; - return b; -} - -Button *newbed(void) -{ - Button *b; - - b = (Button *)malloc(sizeof(Button)); - b->str[0] = 0; - b->type = BED; - return b; -} - -void muiLoadButton(muiObject *b, char *s) -{ - int temp; - Button *but = (Button *)b->object; - - strcpy(but->str, s); - switch (but->type) { - case PUSHBUTTON: - temp = b->xmin + strwidth(but->str) + 20; - if (temp > b->xmax) - b->xmax = temp; - break; - default: - break; - } -} - -void drawbuttonbackground(muiObject *b) -{ - int xmin = b->xmin, xmax = b->xmax, ymin = b->ymin, ymax = b->ymax; - - if (b->locate) { - if (b->select) { - drawedges(xmin++,xmax--,ymin++,ymax--,uiVyDkGray,uiWhite); - drawedges(xmin++,xmax--,ymin++,ymax--,uiDkGray,uiWhite); - drawedges(xmin++,xmax--,ymin++,ymax--,uiLtGray,uiBlack); - drawedges(xmin++,xmax--,ymin++,ymax--,uiWhite,uiLtGray); - drawedges(xmin++,xmax--,ymin++,ymax--,uiWhite,uiVyLtGray); - } else { - drawedges(xmin++,xmax--,ymin++,ymax--,uiDkGray,uiVyDkGray); - drawedges(xmin++,xmax--,ymin++,ymax--,uiWhite,uiDkGray); - drawedges(xmin++,xmax--,ymin++,ymax--,uiWhite,uiLtGray); - drawedges(xmin++,xmax--,ymin++,ymax--,uiWhite,uiLtGray); - } - } else { - drawedges(xmin++,xmax--,ymin++,ymax--,uiDkGray,uiVyDkGray); - drawedges(xmin++,xmax--,ymin++,ymax--,uiWhite,uiDkGray); - drawedges(xmin++,xmax--,ymin++,ymax--,uiVyLtGray,uiMmGray); - drawedges(xmin++,xmax--,ymin++,ymax--,uiVyLtGray,uiMmGray); - } - (b->locate)?uiVyLtGray():uiLtGray(); - uirectfi(xmin,ymin,xmax+1,ymax+1); -} - -void drawpushbut(muiObject *b) -{ - Button *but = (Button *)b->object; - - drawbuttonbackground(b); - uiBlack(); - uicmov2i(b->xmin+ (b->xmax - b->xmin - strwidth(but->str))/2 + 1, b->ymin+9); - uicharstr(but->str, UI_FONT_NORMAL); -} - -void drawbut(muiObject *b) -{ - switch(b->type) { - case BUTTON: - case PUSHBUTTON: - drawpushbut(b); - break; - case BED: - break; - default: - drawpushbut(b); - break; - } -} - -void muiChangeLabel(muiObject *obj, char *s) -{ - Label *l; - - if (obj->type != MUI_LABEL && obj->type != MUI_BOLDLABEL) - muiError("muiChangeLabel: not a label"); - l = (Label *)obj->object; - strncpy(l->str, s, LABELSTRLEN); - l->str[LABELSTRLEN] = 0; - return; -} - -Label *newlabel(char *s) -{ - Label *l = (Label *)malloc(sizeof(Label)); - strncpy(l->str, s, LABELSTRLEN); - l->str[LABELSTRLEN] = 0; - return l; -} - -TextBox *activetb = 0; - -TextBox *newtb(int xmin, int xmax) -{ - TextBox *tb; - static int inited = 0; - - if (!inited) { - inited = 1; - } - - tb = (TextBox *)malloc(sizeof(TextBox)); - tb->charWidth = (xmax - xmin - 9)/FONTWIDTH; - tb->tp1 = tb->tp2 = 0; - *tb->str = 0; - *tb->label = 0; - return tb; -} - -char *muiGetTBString(muiObject *obj) -{ - TextBox *tb = (TextBox *)obj->object; - return tb->str; -} - -void muiClearTBString(muiObject *obj) -{ - TextBox *tb = (TextBox *)obj->object; - *tb->str = 0; - tb->tp1 = tb->tp2 = 0; -} - -void loadtb(TextBox *tb, char *s) -{ - if (s == 0) - *tb->str = 0; - else - strcpy(tb->str, s); - tb->tp1 = tb->tp2 = (int) strlen(s); -} - -void muiSetTBString(muiObject *obj, char *s) -{ - TextBox *tb = (TextBox *)obj->object; - loadtb(tb, s); -} - -void backspacetb(TextBox *tb) -{ - char *s1, *s2, *stemp; - - if ((tb->tp1 == tb->tp2) && tb->tp1 > 0) { - s1 = &tb->str[tb->tp1-1]; - while (*s1) { - *s1 = *(s1+1); - s1++; - } - tb->tp1--; tb->tp2--; - return; - } - s1 = &tb->str[tb->tp1]; - s2 = &tb->str[tb->tp2]; - if (s1 > s2) { stemp = s1; s1 = s2; s2 = stemp; } - stemp = s1; - while (*s2) {*s1++ = *s2++;} - *s1 = 0; - tb->tp1 = tb->tp2 = (int) (stemp - tb->str); -} - -void inserttbchar(TextBox *tb, char c) -{ - char *s1, *s2; - int len; - - if (tb->tp1 != tb->tp2) backspacetb(tb); - len = (int) strlen(tb->str); - if (len == TBSTRLEN) return; - s1 = &tb->str[tb->tp1]; - s2 = &tb->str[len+1]; - while (s2 != s1) { - *s2 = *(s2 - 1); - s2--; - } - *s1 = c; - tb->tp1++; tb->tp2++; -} - -int findtp(muiObject *obj, int x) -{ - TextBox *tb = (TextBox *)obj->object; - int tp, sl = (int) strlen(tb->str); - - tp = (x - obj->xmin)/FONTWIDTH; - if (tp < 0) tp = 0; - if (tp > tb->charWidth) tp = tb->charWidth; - if (tp > sl) tp = sl; - return tp; -} - -void drawtbcontents(muiObject *obj) -{ - int xmin = obj->xmin, ymin = obj->ymin; - int ymax = ymin+TEXTBOXHEIGHT; - int s1, s2; - char str[160], *s; - TextBox *tb = (TextBox *)obj->object; - - strncpy(str, tb->str, (unsigned int)tb->charWidth); - for (s = str; *s; s++) - if (*s < ' ' || *s >= '\177') *s = '*'; - str[tb->charWidth] = 0; - s1 = tb->tp1; s2 = tb->tp2; - if (s1 > tb->charWidth) s1 = tb->charWidth; - if (s2 > tb->charWidth) s2 = tb->charWidth; - - /* selected area */ - if (obj->active && (s1 != s2)) { - uiVyLtGray(); - uirectfi(xmin+6+FONTWIDTH*s1, ymin+7, xmin+6+FONTWIDTH*s2, ymax-6); - } - - /* contents of text box */ - if (muiGetEnable(obj)) uiBlack(); else uiDkGray(); - uicmov2i(xmin+6, ymin+9); - uicharstr(str, UI_FONT_FIXED_PITCH); - - /* Blue bar */ - if ((obj->active == 0) || (obj->enable == 0) || (s1 != s2)) return; - uiBlue(); - uimove2i(xmin+4+FONTWIDTH*s1, ymin+7); uidraw2i(xmin+4+FONTWIDTH*s1, ymax-6); uiendline(); - uimove2i(xmin+5+FONTWIDTH*s1, ymin+7); uidraw2i(xmin+5+FONTWIDTH*s1, ymax-6); uiendline(); -} - -void drawtb(muiObject *tb) -{ - int xmin = tb->xmin, xmax = tb->xmax, ymin = tb->ymin; - int ymax = ymin+TEXTBOXHEIGHT; - - if(!muiGetVisible(tb)) return; - - if( muiGetEnable(tb) ) { - drawedges(xmin++,xmax--,ymin++,ymax--,uiDkGray,uiWhite); - drawedges(xmin++,xmax--,ymin++,ymax--,uiBlack,uiVyLtGray); - drawedges(xmin++,xmax--,ymin++,ymax--,uiLtGray,uiDkGray); - drawedges(xmin++,xmax--,ymin++,ymax--,uiTerraCotta,uiTerraCotta); - uiTerraCotta(); - } - else { - drawedges(xmin++,xmax--,ymin++,ymax--,uiDkGray,uiWhite); - drawedges(xmin++,xmax--,ymin++,ymax--,uiMmGray,uiVyLtGray); - drawedges(xmin++,xmax--,ymin++,ymax--,uiLtGray,uiDkGray); - drawedges(xmin++,xmax--,ymin++,ymax--,uiLtGray,uiDkGray); - uiLtGray(); - } - uirectfi(xmin, ymin, xmax+1, ymax+1); - - drawtbcontents(tb); -} - -void muiActivateTB(muiObject *obj) -{ - muiCons *mcons; - - if ((mcons = muiGetListCons(muiGetUIList(obj))) == (muiCons *)0) return; - muiSetActive(obj, 1); - while (mcons) { - if (mcons->object != obj && mcons->object->type == MUI_TEXTBOX) - muiSetActive(mcons->object, 0); - mcons = mcons->next; - } -} - -muiObject *muiGetActiveTB(void) -{ - muiCons *mcons; - int list = muiGetActiveUIList(); - - if (list == 0) return 0; - if ((mcons = muiGetListCons(list)) == (muiCons *)0) return 0; - while (mcons) { - if (mcons->object->type == MUI_TEXTBOX && muiGetActive(mcons->object)) - return mcons->object; - mcons = mcons->next; - } - return 0; -} - -enum muiReturnValue textboxhandler(muiObject *obj, int event, int value, int x, int y) -{ - int tp; - TextBox *tb = (TextBox *)obj->object; - - if( !muiGetEnable(obj) || !muiGetVisible(obj) ) return MUI_NO_ACTION; - - switch (event) { - case MUI_DEVICE_DOWN: - tp = findtp(obj, x); - tb->tp2 = tp; - break; - case MUI_DEVICE_UP: - break; - case MUI_DEVICE_PRESS: - muiActivateTB(obj); - tp = findtp(obj, x); - tb->tp1 = tb->tp2 = tp; - break; - case MUI_DEVICE_RELEASE: - break; - case MUI_DEVICE_CLICK: - case MUI_DEVICE_DOUBLE_CLICK: - muiActivateTB(obj); - tp = findtp(obj, x); - tb->tp1 = tb->tp2 = tp; - break; - case MUI_KEYSTROKE: - if (value == '\n' || value == '\r') /* carriage return */ - return MUI_TEXTBOX_RETURN; - if (value == '\025') { muiClearTBString(obj); } - else if (value == '\b') { backspacetb((TextBox *)obj->object); } - else inserttbchar((TextBox *)obj->object, (char)value); - break; - } - x = y; /* for lint's sake */ - return MUI_NO_ACTION; -} - -void helpdrawlabel(char *s, int x, int y) -{ - uiBlack(); - uicmov2i(x, y); - uicharstr(s, UI_FONT_NORMAL); -} - -void helpdrawboldlabel(char *s, int x, int y) -{ - uiBlack(); /* XXX Hack! -- no bold font in GLUT */ - uicmov2i(x, y); - uicharstr(s, UI_FONT_NORMAL); - uicmov2i(x+1, y); - uicharstr(s, UI_FONT_NORMAL); -} - -void drawlabel(muiObject *lab) -{ - Label *l = (Label *)lab->object; - if(!muiGetVisible(lab)) return; - if(muiGetEnable(lab)) uiBlack(); else uiDkGray(); - uicmov2i(lab->xmin, lab->ymin); - uicharstr(l->str, UI_FONT_NORMAL); -} - -void drawboldlabel(muiObject *lab) -{ - Label *l = (Label *)lab->object; - if(!muiGetVisible(lab)) return; - if(muiGetEnable(lab)) uiBlack(); else uiDkGray(); - uicmov2i(lab->xmin, lab->ymin); /* XXX Hack! -- no bold font in GLUT */ - uicharstr(l->str, UI_FONT_NORMAL); - uicmov2i(lab->xmin+1, lab->ymin); - uicharstr(l->str, UI_FONT_NORMAL); -} diff --git a/lib/glut-3.7.6/lib/mui/glutmui.c b/lib/glut-3.7.6/lib/mui/glutmui.c deleted file mode 100644 index e6db10842..000000000 --- a/lib/glut-3.7.6/lib/mui/glutmui.c +++ /dev/null @@ -1,184 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -#include -#include -#include - -typedef struct _Window { - int mui_xorg, mui_yorg, mui_xsize, mui_ysize; - int uilist; - int mbleft; -} WindowRec, *Window; - -static Window winList = NULL; -static int numWins = 0; - -int mui_singlebuffered = 0; - -int menuinuse = 0; - -static int mbmiddle = 0, mbright = 0; /* XXX unused currently */ - -void setmousebuttons(int b, int s) -{ - Window win = &winList[glutGetWindow()-1]; - - switch (b) { - case GLUT_LEFT_BUTTON: - win->mbleft = (s == GLUT_DOWN); - break; - case GLUT_MIDDLE_BUTTON: - mbmiddle =(s == GLUT_DOWN); - break; - case GLUT_RIGHT_BUTTON: - mbright =(s == GLUT_DOWN); - break; - } -} - -void mui_drawgeom(void) -{ - Window win = &winList[glutGetWindow()-1]; - - glViewport(0, 0, win->mui_xsize, win->mui_ysize); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluOrtho2D(0, win->mui_xsize, 0, win->mui_ysize); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - muiDrawUIList(win->uilist); - if (mui_singlebuffered == 0) - glutSwapBuffers(); - else - glFlush(); -} - -void mui_keyboard(unsigned char c, int x, int y) -{ - Window win = &winList[glutGetWindow()-1]; - - muiSetActiveUIList(win->uilist); - muiHandleEvent(MUI_KEYSTROKE, c, x, win->mui_ysize-y); - glutPostRedisplay(); -} - -void mui_mouse(int b, int s, int x, int y) -{ - Window win = &winList[glutGetWindow()-1]; - - muiSetActiveUIList(win->uilist); - setmousebuttons(b, s); - if (b == GLUT_MIDDLE_BUTTON && s == GLUT_DOWN) { - muiHandleEvent(MUI_DEVICE_DOUBLE_CLICK, 0, x, win->mui_ysize-y); - glutPostRedisplay(); - } - if (b != GLUT_LEFT_BUTTON) { return; } - muiHandleEvent((s==GLUT_DOWN)?MUI_DEVICE_PRESS:MUI_DEVICE_RELEASE, 0, x, win->mui_ysize-y); - glutPostRedisplay(); -} - -static void mui_Reshape(int width, int height) -{ - Window win = &winList[glutGetWindow()-1]; - - win->mui_xorg = glutGet(GLUT_WINDOW_X); - win->mui_yorg = glutGet(GLUT_WINDOW_Y); - win->mui_xsize = width; - win->mui_ysize = height; - glViewport(0, 0, win->mui_xsize, win->mui_ysize); -} - -void mui_glutmotion(int x, int y) -{ - Window win = &winList[glutGetWindow()-1]; - - muiSetActiveUIList(win->uilist); - if (win->mbleft == 0) return; - muiHandleEvent(MUI_DEVICE_DOWN, 0, x, win->mui_ysize-y); - glutPostRedisplay(); -} - -void mui_glutpassivemotion(int x, int y) -{ - Window win = &winList[glutGetWindow()-1]; - - muiSetActiveUIList(win->uilist); - muiHandleEvent(MUI_DEVICE_UP, 0, x, win->mui_ysize-y); - glutPostRedisplay(); -} - -void mui_menufunc(int state) -{ - menuinuse = state; -} - -void muiInit(void) -{ - int winNum = glutGetWindow(); - Window win; - - if (winNum >= numWins) { - numWins = winNum; - winList = (Window) realloc(winList, numWins * sizeof(WindowRec)); - } - win = &winList[glutGetWindow()-1]; - win->mui_xorg = glutGet(GLUT_WINDOW_X); - win->mui_yorg = glutGet(GLUT_WINDOW_Y); - win->mui_xsize = glutGet(GLUT_WINDOW_WIDTH); - win->mui_ysize = glutGet(GLUT_WINDOW_HEIGHT);; - win->mbleft = 0; - /* The "uilist = 1" is for compatibility with GLUT 3.5's MUI - implementation that was hardwired to support a single window - only with UI list 1. */ - win->uilist = 1; - - glutKeyboardFunc(mui_keyboard); - glutMouseFunc(mui_mouse); - glutReshapeFunc(mui_Reshape); - glutMotionFunc(mui_glutmotion); - glutPassiveMotionFunc(mui_glutpassivemotion); - glutDisplayFunc(mui_drawgeom); - glutMenuStateFunc(mui_menufunc); -} - -void muiAttachUIList(int uilist) -{ - Window win = &winList[glutGetWindow()-1]; - - win->uilist = uilist; -} diff --git a/lib/glut-3.7.6/lib/mui/hslider.c b/lib/glut-3.7.6/lib/mui/hslider.c deleted file mode 100644 index 24db16a5c..000000000 --- a/lib/glut-3.7.6/lib/mui/hslider.c +++ /dev/null @@ -1,488 +0,0 @@ -/* - * Copyright (c) 1990,1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -#include -#include -#include -#include -#include -#include - -extern HSlider *locatedhs; - -int gethstrough(muiObject *obj) -{ - return obj->xmax - obj->xmin - 2*ARROWHEIGHT; -} - -void sethscenter(muiObject *obj, int scenter) -{ - HSlider *hs = (HSlider *)obj->object; - if ((scenter - hs->shalf) < (obj->xmin+ARROWHEIGHT)) - hs->scenter = gethstrough(obj)/2 + obj->xmin+ARROWHEIGHT; - else - hs->scenter = scenter; -} - -void muiSetHSArrowDelta(muiObject *obj, int newd) -{ - HSlider *hs = (HSlider *)obj->object; - hs->arrowdelta = newd; -} - -HSlider *newhs(muiObject *obj, int xmin, int xmax, int scenter, int shalf) -{ - HSlider *hs; - - hs = (HSlider *)malloc(sizeof(HSlider)); - obj->object = (HSlider *)hs; - if (shalf == 0) { - hs->shalf = 0; - } else if (shalf < MINSHALF) - hs->shalf = MINSHALF; - else - hs->shalf = shalf; - - if ((xmax - xmin + 1) <= (2*ARROWHEIGHT+2*MINSHALF)) - hs->thumb = 0; - else - hs->thumb = 1; - - sethscenter(obj, scenter); - hs->oldpos = hs->scenter; - - muiSetHSArrowDelta(obj, 1); - return hs; -} - -void freehs(HSlider *hs) -{ - if (hs) { - free(hs); - } -} - -void drawhsarrows(muiObject *obj) -{ - int ymin = obj->ymin, ymax = obj->ymin+ARROWHEIGHT, - xmin = obj->xmin, xmax = obj->xmax; - - if (!muiGetVisible(obj)) - return; - - /* Draw the arrows: */ - - /* down arrow */ - uiDkGray(); - uirecti(xmin,ymin,xmin+20,ymax); - - if (muiGetVisible(obj)) { - if (obj->locate == SCROLLDOWN) { - if (obj->select == SCROLLDOWN) { - drawedges(xmin+1,xmin+19,ymin+1,ymax-1,uiMmGray,uiWhite); - drawedges(xmin+2,xmin+18,ymin+2,ymax-2,uiLtGray,uiWhite); - } else { - drawedges(xmin+1,xmin+19,ymin+1,ymax-1,uiWhite,uiMmGray); - drawedges(xmin+2,xmin+18,ymin+2,ymax-2,uiWhite,uiLtGray); - } - uiVyLtGray(); - uirectfi(xmin+3,ymin+3,xmin+17,ymax-3); - } else { - if (obj->select == SCROLLDOWN) { - drawedges(xmin+1,xmin+19,ymin+1,ymax-1,uiMmGray,uiVyLtGray); - drawedges(xmin+2,xmin+18,ymin+2,ymax-2,uiMmGray,uiVyLtGray); - } else { - drawedges(xmin+1,xmin+19,ymin+1,ymax-1,uiWhite,uiMmGray); - drawedges(xmin+2,xmin+18,ymin+2,ymax-2,uiVyLtGray,uiMmGray); - } - uiLtGray(); - uirectfi(xmin+3,ymin+3,xmin+17,ymax-3); - } - } else { - drawedges(xmin+1,xmin+19,ymin+1,ymax-1,uiVyLtGray,uiMmGray); - uiLtGray(); - uirectfi(xmin+2,ymin+2,xmin+18,ymax-2); - } - - /* arrow XXX probably wrong for hsliders XXX */ - if (muiGetEnable(obj)) - uiDkGray(); - else - uiMmGray(); - uimove2i(xmin+14, ymin+5); - uidraw2i(xmin+14, ymin+14); - uiendline(); - uirectfi(xmin+13,ymin+6,xmin+12,ymin+13); - uirectfi(xmin+11,ymin+7,xmin+10,ymin+12); - uirectfi(xmin+8,ymin+8,xmin+9,ymin+11); - uirectfi(xmin+6,ymin+9,xmin+7,ymin+10); - - /* up arrow */ - uiDkGray(); - uirecti(xmax-20,ymin,xmax,ymax); - - if (muiGetEnable(obj)) { - if (obj->locate == SCROLLUP) { - if (obj->select == SCROLLUP) { - drawedges(xmax-19,xmax-1,ymin+1,ymax-1,uiMmGray,uiWhite); - drawedges(xmax-18,xmax-2,ymin+2,ymax-2,uiLtGray,uiWhite); - } else { - drawedges(xmax-19,xmax-1,ymin+1,ymax-1,uiWhite,uiMmGray); - drawedges(xmax-18,xmax-2,ymin+2,ymax-2,uiWhite,uiLtGray); - } - uiVyLtGray(); - uirectfi(xmax-17,ymin+3,xmax-3,ymax-3); - } else { - if (obj->select == SCROLLUP) { - drawedges(xmax-19,xmax-1,ymin+1,ymax-1,uiMmGray,uiVyLtGray); - drawedges(xmax-18,xmax-2,ymin+2,ymax-2,uiMmGray,uiVyLtGray); - } else { - drawedges(xmax-19,xmax-1,ymin+1,ymax-1,uiWhite,uiMmGray); - drawedges(xmax-18,xmax-2,ymin+2,ymax-2,uiVyLtGray,uiMmGray); - } - uiLtGray(); - uirectfi(xmax-17,ymin+3,xmax-3,ymax-3); - } - } else { - drawedges(xmin+1,xmax-1,ymin+1,ymax-1,uiVyLtGray,uiMmGray); - uiLtGray(); - uirectfi(xmax-18,ymin+2,xmax-2,ymax-2); - } - - /* arrow XXX probably wrong for hslider XXX */ - if (muiGetEnable(obj)) - uiDkGray(); - else - uiMmGray(); - uirectfi(xmax-6,ymin+9,xmax-7,ymin+10); - uirectfi(xmax-8,ymin+8,xmax-9,ymin+11); - uirectfi(xmax-10,ymin+7,xmax-11,ymin+12); - uirectfi(xmax-12,ymin+6,xmax-13,ymin+13); - uimove2i(xmax-14, ymin+5); - uidraw2i(xmax-14, ymin+14); - uiendline(); -} - -void drawhs(muiObject *obj) -{ - HSlider *hs = (HSlider *)obj->object; - - int ymin = obj->ymin, xmax = obj->xmax-ARROWHEIGHT, - xmin = obj->xmin+ARROWHEIGHT; - int ymax = ymin+SLIDERWIDTH; - int sxmin = hs->scenter - hs->shalf; - int sxmax = hs->scenter + hs->shalf; - int oldsxmin = hs->oldpos - hs->shalf; - int oldsxmax = hs->oldpos + hs->shalf; - - drawsetup(); - - if (!muiGetVisible(obj)) { - backgrounddraw(xmin,ymin,xmax,ymax); - drawrestore(); - return; - } - - /* trough */ - - uiDkGray(); - uirecti(xmin, ymin, xmax, ymax); - - drawedges(xmin+1,xmax-1,ymin+1,ymax-1,uiVyLtGray,uiMmGray); - - uiLtGray(); - uirectfi(xmin+2, ymin+2, xmax-2, ymax-2); - - if (hs->thumb) { - /* last thumb position */ - if ((hs->oldpos != hs->scenter) && (obj->enable)) { - - uiDkGray(); - uimove2i(oldsxmax, ymax-2); - uidraw2i(oldsxmax, ymin+1); - uiendline(); - - uiMmGray(); - uimove2i(oldsxmax, ymin+1); - uidraw2i(oldsxmin, ymin+1); - uiendline(); - - uiVyLtGray(); - uimove2i(oldsxmin, ymin+2); - uidraw2i(oldsxmin, ymax-1); - uiendline(); - - uiLtGray(); - uimove2i(oldsxmin, ymax-1); - uidraw2i(oldsxmax, ymax-1); - uiendline(); - - uiVyLtGray(); - uimove2i(--oldsxmax, ymax-2); - uidraw2i(++oldsxmin, ymax-2); - uidraw2i(oldsxmin, ymin+2); - uiendline(); - - uiVyDkGray(); - uimove2i(oldsxmin, ymin+2); - uidraw2i(oldsxmax, ymin+2); - uidraw2i(oldsxmax, ymax-3); - uiendline(); - - uiDkGray(); - uimove2i(--oldsxmax, ymin+3); - uidraw2i(oldsxmax, ymax-3); - uiendline(); - - uiLtGray(); - uimove2i(oldsxmax, ymax-3); - uidraw2i(++oldsxmin, ymax-3); - uidraw2i(oldsxmin, ymin+3); - uiendline(); - - uiMmGray(); - uirectfi(++oldsxmin, ymin+3, --oldsxmax, ymax-4); - - } - - if (obj->enable) { - - /* thumb */ - uiDkGray(); - uirecti(sxmin,ymin,sxmax,ymax); - if (obj->locate == THUMB) { - drawedges(sxmin+1,sxmax-1,ymin+1,ymax-1,uiWhite,uiDkGray); - drawedges(sxmin+2,sxmax-2,ymin+2,ymax-2,uiWhite,uiLtGray); - drawedges(sxmin+3,sxmax-3,ymin+3,ymax-3,uiWhite,uiLtGray); - - uiVyLtGray(); - uirectfi(sxmin+4, ymin+4, sxmax-4, ymax-4); - - /* ridges on thumb */ - uiDkGray(); - uimove2i(hs->scenter, ymin+3); - uidraw2i(hs->scenter, ymax-3); - uiendline(); - uimove2i(hs->scenter-4, ymin+3); - uidraw2i(hs->scenter-4, ymax-3); - uiendline(); - uimove2i(hs->scenter+4, ymin+3); - uidraw2i(hs->scenter+4, ymax-3); - uiendline(); - - uiWhite(); - uirectfi(hs->scenter+1,ymin+3,hs->scenter+2,ymax-3); - uirectfi(hs->scenter+5,ymin+3,hs->scenter+6,ymax-3); - uirectfi(hs->scenter-2,ymin+3,hs->scenter-3,ymax-3); - } else { - drawedges(sxmin+1,sxmax-1,ymin+1,ymax-1,uiWhite,uiDkGray); - drawedges(sxmin+2,sxmax-2,ymin+2,ymax-2,uiVyLtGray,uiMmGray); - drawedges(sxmin+3,sxmax-3,ymin+3,ymax-3,uiVyLtGray,uiMmGray); - - uiLtGray(); - uirectfi(sxmin+4, ymin+4, sxmax-4, ymax-4); - - /* ridges on thumb */ - uiBlack(); - uimove2i(hs->scenter, ymin+3); - uidraw2i(hs->scenter, ymax-3); - uiendline(); - uimove2i(hs->scenter-4, ymin+3); - uidraw2i(hs->scenter-4, ymax-3); - uiendline(); - uimove2i(hs->scenter+4, ymin+3); - uidraw2i(hs->scenter+4, ymax-3); - uiendline(); - - uiWhite(); - uimove2i(hs->scenter+1, ymin+3); - uidraw2i(hs->scenter+1, ymax-3); - uiendline(); - uimove2i(hs->scenter-3, ymin+3); - uidraw2i(hs->scenter-3, ymax-3); - uiendline(); - uimove2i(hs->scenter+5, ymin+3); - uidraw2i(hs->scenter+5, ymax-3); - uiendline(); - } - } - } - drawhsarrows(obj); - - drawrestore(); -} - -enum muiReturnValue hshandler(muiObject *obj, int event, int value, int x, int y) -{ - int my = x; - static int mfudge=0; - static enum muiReturnValue retval = MUI_NO_ACTION; - HSlider *hs = (HSlider *)obj->object; - - if (!muiGetEnable(obj) || !muiGetVisible(obj)) - return MUI_NO_ACTION; - switch (event) { - case MUI_DEVICE_RELEASE: - if (value == 0) { - hs->oldpos = hs->scenter; - muiSetSelect(obj, 0); - return MUI_SLIDER_RETURN; - } - case MUI_DEVICE_PRESS: - case MUI_DEVICE_CLICK: - /* in the arrows */ - if (my >= obj->xmin && my <= obj->xmax && - (my < obj->xmin+ARROWHEIGHT || my > obj->xmax-ARROWHEIGHT)) { - mfudge = -10000; - if (my < obj->xmin+ARROWHEIGHT) { /* boink down */ - my = hs->scenter - hs->arrowdelta; - retval = MUI_SLIDER_SCROLLDOWN; - } else { /* boink up */ - my = hs->scenter + hs->arrowdelta; - retval = MUI_SLIDER_SCROLLUP; - } - if (event == MUI_DEVICE_CLICK) { - muiSetSelect(obj, 0); - retval = MUI_SLIDER_RETURN; - } - if (my - hs->shalf < obj->xmin+1+ARROWHEIGHT) - my = obj->xmin+1+hs->shalf+ARROWHEIGHT; - if (my + hs->shalf > obj->xmax-1-ARROWHEIGHT) - my = obj->xmax-1-hs->shalf-ARROWHEIGHT; - hs->scenter = my; - break; - } else if (my >= obj->xmin && my <= obj->xmax) - retval = MUI_SLIDER_THUMB; - hs->oldpos = hs->scenter; - if (my >= hs->scenter-hs->shalf && my <= hs->scenter+hs->shalf) - mfudge = hs->scenter - my; - else - mfudge = 0; - break; - case MUI_DEVICE_DOWN: - if (mfudge == -10000) { /* auto - repeat the arrow keys */ - if (retval == MUI_SLIDER_SCROLLDOWN) { - my = hs->scenter - hs->arrowdelta; - if (my - hs->shalf < obj->xmin+1+ARROWHEIGHT) - my = obj->xmin+1+hs->shalf+ARROWHEIGHT; - } else { - my = hs->scenter + hs->arrowdelta; - if (my + hs->shalf > obj->xmax-1-ARROWHEIGHT) - my = obj->xmax-1-hs->shalf-ARROWHEIGHT; - } - hs->scenter = my; - break; - } - my = x+mfudge; - if (my - hs->shalf < obj->xmin+1+ARROWHEIGHT) - my = obj->xmin+1+hs->shalf+ARROWHEIGHT; - if (my + hs->shalf > obj->xmax-1-ARROWHEIGHT) - my = obj->xmax-1-hs->shalf-ARROWHEIGHT; - - /* adjust thumb */ - hs->scenter = my; - break; - } - y = y; /* for lint's sake */ - return retval; -} - -float muiGetHSVal(muiObject *obj) -{ - HSlider *hs = (HSlider *)obj->object; - - return (hs->scenter-obj->xmin-1.0-hs->shalf-ARROWHEIGHT)/ - (obj->xmax - obj->xmin - 2.0*hs->shalf - 2.0-2*ARROWHEIGHT); -} - -void sethshalf(muiObject *obj, int shalf) -{ - HSlider *hs = (HSlider *)obj->object; - hs->shalf = shalf; - if (hs->shalf==0) - muiSetEnable(obj, 0); - else if (hs->shalf < MINSHALF) { - hs->shalf = MINSHALF; - muiSetEnable(obj, 1); - } else if (2*hs->shalf >= gethstrough(obj)) { - hs->shalf = gethstrough(obj)/2; - muiSetEnable(obj, 0); - } -} - -void movehsval(muiObject *obj, float val) -{ - float f; - HSlider *hs = (HSlider *)obj->object; - - if (val < 0.0) val = 0.0; - if (val > 1.0) val = 1.0; - f = val*(obj->xmax - obj->xmin - 2.0*hs->shalf - 2.0-2*ARROWHEIGHT); - hs->scenter = f + hs->shalf + obj->xmin + 1.0+ARROWHEIGHT; - - if ((hs->scenter + hs->shalf) > (obj->xmax - ARROWHEIGHT)) - hs->scenter = obj->xmax - ARROWHEIGHT - hs->shalf; - if ((hs->scenter - hs->shalf) < (obj->xmin+ ARROWHEIGHT)) - hs->scenter = obj->xmin + ARROWHEIGHT + hs->shalf; -} - -void muiSetHSValue(muiObject *obj, float val) -{ - HSlider *hs = (HSlider *)obj->object; - movehsval(obj, (float) val); - hs->oldpos = hs->scenter; -} - -/* - * visible is windowheight/dataheight - * top is top/dataheight - */ - -void -adjusthsthumb(muiObject *obj, double visible, double top) -{ - int size; - - if (visible >= 1.0) { - size = gethstrough(obj) + 1; - } else { - size = visible*gethstrough(obj); - } - muiSetEnable(obj, 1); - sethshalf(obj, size/2); - muiSetHSValue(obj, (float) (1.0 - top)); -} diff --git a/lib/glut-3.7.6/lib/mui/miscui.c b/lib/glut-3.7.6/lib/mui/miscui.c deleted file mode 100644 index 4042512c7..000000000 --- a/lib/glut-3.7.6/lib/mui/miscui.c +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Copyright (c) 1990,1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -#include -#include -#include -#include - -extern int mui_xsize, mui_ysize; - -short sharefont1 = 0; -short sharefont2 = 0; - -void drawedges(int xmin,int xmax,int ymin,int ymax, - void (*topleft)(void), void (*bottomright)(void)) -{ - (*topleft)(); - uimove2i(xmin,ymin); - uidraw2i(xmin,ymax); - uidraw2i(xmax,ymax); - uiendline(); - - (*bottomright)(); - uimove2i(xmax,ymax-1); - uidraw2i(xmax,ymin); - uidraw2i(xmin+1,ymin); - uiendline(); -} - -static short called = 0; - -void drawsetup(void) -{ - if (called) return; - else called = 1; -} - -void drawrestore(void) -{ - called = 0; -} - -void backgrounddraw(int xmin, int ymin, int xmax, int ymax) -{ - drawsetup(); - - uiBackground(); - uirectfi(xmin, ymin, xmax, ymax); - - drawrestore(); -} - -void muiBackgroundClear(void) -{ - drawsetup(); - - uiBackground(); - uiclear(); - - drawrestore(); -} - -#if 0 -void windowborderdraw(void) -{ - int sxsize, sysize; - - sxsize = mui_xsize-1; sysize = mui_ysize-1; - - drawsetup(); - - uiBlack(); - uirecti(0,0,sxsize,sysize); - - uiWhite(); - uirecti(0+1,0+1,sxsize-1,sysize-1); - uirecti(0+2,0+2,sxsize-2,sysize-2); - - uiLtGray(); - uirecti(0+3,0+3,sxsize-3,sysize-3); - uirecti(0+4,0+4,sxsize-4,sysize-4); - uirecti(0+5,0+5,sxsize-5,sysize-5); - uirecti(0+6,0+6,sxsize-6,sysize-6); - - uiBlack(); - uirecti(0+7,0+7,sxsize-7,sysize-7); - - uiDkGray(); - uimove2i(0+1,0+1); uidraw2i(sxsize-1,0+1); uiendline(); - uimove2i(0+2,0+2); uidraw2i(sxsize-2,0+2); uiendline(); - uimove2i(0+3,0+3); uidraw2i(sxsize-3,0+3); uiendline(); - - drawrestore(); -} -#endif diff --git a/lib/glut-3.7.6/lib/mui/mui.c b/lib/glut-3.7.6/lib/mui/mui.c deleted file mode 100644 index 3d6afb44b..000000000 --- a/lib/glut-3.7.6/lib/mui/mui.c +++ /dev/null @@ -1,638 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -#include -#include -#include -#include - -extern int activemenu; -extern int menuinuse; - -static muiObject *newmuiobj(void) -{ - muiObject *newobj = (muiObject *)malloc(sizeof(muiObject)); - newobj->active = 0; - newobj->enable = 1; - newobj->select = 0; - newobj->locate = 0; - newobj->visible = 1; - newobj->callback = 0; - muiSetUIList(newobj, muiGetActiveUIList()); - muiAddToUIList(muiGetActiveUIList(), newobj); - newobj->id = 0; - return newobj; -} - -muiObject *muiNewPulldown(void) -{ - muiObject *newPD = newmuiobj(); - newPD->type = MUI_PULLDOWN; - newPD->xmin = 0; - newPD->ymin = glutGet(GLUT_WINDOW_HEIGHT) - PULLDOWN_HEIGHT; - newPD->xmax = glutGet(GLUT_WINDOW_WIDTH); - newPD->ymax = glutGet(GLUT_WINDOW_HEIGHT); - newPD->object = (void *)newpd(); - newPD->handler = pdhandler; - return newPD; -} - -muiObject *muiNewButton(int xmin, int xmax, int ymin, int ymax) -{ - muiObject *newb = newmuiobj(); - newb->type = MUI_BUTTON; - newb->xmin = xmin; - newb->ymin = ymin; - newb->xmax = xmax; - newb->ymax = ymax; - newb->object = (void *)newbut(); - ((Button *)(newb->object))->object = newb; - newb->handler = buttonhandler; - return newb; -} - -muiObject *muiNewRadioButton(int xmin, int ymin) -{ - muiObject *newb = newmuiobj(); - newb->type = MUI_RADIOBUTTON; - newb->xmin = xmin; - newb->ymin = ymin; - newb->xmax = xmin+ RADIOWIDTH-1; - newb->ymax = ymin+RADIOHEIGHT-1; - newb->object = (void *)newradiobut(); - ((Button *)(newb->object))->object = newb; - newb->handler = buttonhandler; - return newb; -} - -muiObject *muiNewTinyRadioButton(int xmin, int ymin) -{ - muiObject *newb = newmuiobj(); - newb->type = MUI_TINYRADIOBUTTON; - newb->xmin = xmin; - newb->ymin = ymin; - newb->xmax = xmin+ TINYRADIOWIDTH-1; - newb->ymax = ymin+ TINYRADIOHEIGHT-1; - newb->object = (void *)newradiobut(); - ((Button *)(newb->object))->object = newb; - newb->handler = buttonhandler; - return newb; -} - -muiObject *muiNewVSlider(int xmin, int ymin, int ymax, int scenter, int shalf) -{ - muiObject *newvsl = newmuiobj(); - newvsl->type = MUI_VSLIDER; - newvsl->xmin = xmin; - newvsl->ymin = ymin; - newvsl->xmax = xmin+SLIDERWIDTH-1; - newvsl->ymax = ymax; - newvsl->object = (void *)newvs(newvsl, ymin, ymax, scenter, shalf); - newvsl->handler = vshandler; - return newvsl; -} - -muiObject *muiNewHSlider(int xmin, int ymin, int xmax, int scenter, int shalf) -{ - muiObject *newhsl = newmuiobj(); - newhsl->type = MUI_HSLIDER; - newhsl->xmin = xmin; - newhsl->ymin = ymin; - newhsl->xmax = xmax; - newhsl->ymax = ymin+SLIDERWIDTH-1; - newhsl->object = (void *)newhs(newhsl, xmin, xmax, scenter, shalf); - newhsl->handler = hshandler; - return newhsl; -} - -muiObject *muiNewTextList(int xmin, int ymin, int xmax, int listheight) -{ - muiObject *newtlo = newmuiobj(); - newtlo->type = MUI_TEXTLIST; - newtlo->xmin = xmin; - newtlo->ymin = ymin; - newtlo->xmax = xmax; - newtlo->object = (void *)newtl(newtlo, listheight); - newtlo->handler = tlhandler; - return newtlo; -} - -muiObject *muiNewLabel(int xmin, int ymin, char *label) -{ - muiObject *newlbl = newmuiobj(); - newlbl->type = MUI_LABEL; - newlbl->xmin = xmin; - newlbl->ymin = ymin; - /* XXX maximums */ - newlbl->object = (void *)newlabel(label); - newlbl->handler = nullhandler; - return newlbl; -} - -muiObject *muiNewBoldLabel(int xmin, int ymin, char *label) -{ - muiObject *newlbl = newmuiobj(); - newlbl->type = MUI_BOLDLABEL; - newlbl->xmin = xmin; - newlbl->ymin = ymin; - /* XXX maximums */ - newlbl->object = (void *)newlabel(label); - newlbl->handler = nullhandler; - return newlbl; -} - -muiObject *muiNewTextbox(int xmin, int xmax, int ymin) -{ - muiObject *newtextbox = newmuiobj(); - newtextbox->type = MUI_TEXTBOX; - newtextbox->xmin = xmin; - newtextbox->ymin = ymin; - newtextbox->xmax = xmax; - newtextbox->ymax = ymin + TEXTBOXHEIGHT - 1; - newtextbox->object = (void *)newtb(xmin, xmax); - newtextbox->handler = textboxhandler; - return newtextbox; -} - -void muiGetObjectSize(muiObject *obj, int *xmin, int *ymin, int *xmax, int *ymax) -{ - *xmin = obj->xmin; - *xmax = obj->xmax; - *ymin = obj->ymin; - *ymax = obj->ymax; -} - -void muiFreeObject(muiObject *obj) -{ - switch (obj->type) { - case MUI_BUTTON: - case MUI_RADIOBUTTON: - case MUI_TINYRADIOBUTTON: - case MUI_VSLIDER: - case MUI_HSLIDER: - case MUI_TEXTBOX: - case MUI_TEXTLIST: - case MUI_PULLDOWN: - free(obj->object); - break; - case MUI_LABEL: - case MUI_BOLDLABEL: - break; - } - free(obj); -} - -void muiSetID(muiObject *obj, int id) -{ - obj->id = id; -} - -int muiGetID(muiObject *obj) -{ - return obj->id; -} - -void muiSetCallback(muiObject *obj, void (*callback)(muiObject *, enum muiReturnValue)) -{ - obj->callback = callback; -} - -int muiInObject(muiObject *obj, int x, int y) -{ - if (obj->xmin <= x && x <= obj->xmax && obj->ymin <= y && y <= obj->ymax) - return 1; - return 0; -} - -int muiGetLocate(muiObject *obj) -{ - return obj->locate; -} - -void muiSetLocate(muiObject *obj, int state) -{ - obj->locate = (short) state; -} - -int muiGetSelect(muiObject *obj) -{ - return obj->select; -} - -void muiSetUIList(muiObject *obj, int list) -{ - obj->uilist = list; -} - -int muiGetUIList(muiObject *obj) -{ - return obj->uilist; -} - -void muiSetSelect(muiObject *obj, int state) -{ - obj->select = (short) state; -} - -int muiGetVisible(muiObject *obj) -{ - return obj->visible; -} - -void muiSetVisible(muiObject *obj, int state) -{ - obj->visible = (short) state; -} - -int muiGetActive(muiObject *obj) -{ - return obj->active; -} - -void muiSetActive(muiObject *obj, int state) -{ - obj->active = (short) state; -} - -int muiGetEnable(muiObject *obj) -{ - return obj->enable; -} - -void muiSetEnable(muiObject *obj, int state) -{ - obj->enable = (short) state; -} - -void muiDrawObject(muiObject *obj) -{ - switch (obj->type) { - case MUI_BUTTON: - drawbut(obj); - break; - case MUI_RADIOBUTTON: - drawradiobutton(obj); - break; - case MUI_TINYRADIOBUTTON: - drawtinyradio(obj); - break; - case MUI_LABEL: - drawlabel(obj); - break; - case MUI_BOLDLABEL: - drawboldlabel(obj); - break; - case MUI_TEXTBOX: - drawtb(obj); - break; - case MUI_VSLIDER: - drawvs(obj); - break; - case MUI_HSLIDER: - drawhs(obj); - break; - case MUI_TEXTLIST: - drawtl(obj); - break; - case MUI_PULLDOWN: - drawpulldown(obj); - break; - } -} - -void muiError(char *s) -{ - fprintf(stderr, "%s\n", s); - exit(0); -} - -#define MAX_UI_LISTS 50 -static muiCons *muilist[MAX_UI_LISTS]; -static int muilistindex[MAX_UI_LISTS]; - -void muiNewUIList(int listid) -{ - static int inited = 0; - int i; - - if (inited == 0) { - inited = 1; - for (i = 1; i < MAX_UI_LISTS; i++) - muilistindex[i] = -1; - muilistindex[0] = listid; - muiSetActiveUIList(listid); - return; - } - for (i = 0; i < MAX_UI_LISTS; i++) - if (muilistindex[i] == -1) { - muilistindex[i] = listid; - muiSetActiveUIList(listid); - return; - } - muiError("muiNewUIList: No more UI lists available"); -} - -int muiGetListId(int uilist) -{ - int i; - - for (i = 0; i < MAX_UI_LISTS; i++) { - if (muilistindex[i] == uilist) return i; - } - muiError("muiAddToUIList: illegal UI list identifier"); - return -1; -} - -muiCons *muiGetListCons(int uilist) -{ - int i; - - for (i = 0; i < MAX_UI_LISTS; i++) { - if (muilistindex[i] == uilist) return muilist[i]; - } - muiError("muiGetListCons: illegal UI list identifier"); - return (muiCons *)0; -} - -void muiAddToUIList(int uilist, muiObject *obj) -{ - int i; - muiCons *mcons; - - if (uilist == 0) { - muiError("muiAddToUIList: no active UI list"); - } - if ((i = muiGetListId(uilist)) == -1) return; - mcons = (muiCons *)malloc(sizeof(muiCons)); - mcons->next = muilist[i]; - muilist[i] = mcons; - mcons->object = obj; -} - -static muiObject *muiFastHitInList(muiCons *mcons, int x, int y) -{ - while (mcons) { - if (muiInObject(mcons->object, x, y)) - switch (mcons->object->type) { - case MUI_BUTTON: - case MUI_TEXTBOX: - case MUI_VSLIDER: - case MUI_HSLIDER: - case MUI_TEXTLIST: - case MUI_RADIOBUTTON: - case MUI_TINYRADIOBUTTON: - case MUI_PULLDOWN: - return mcons->object; - case MUI_LABEL: - case MUI_BOLDLABEL: - return 0; - } - mcons = mcons->next; - } - return (muiObject *)0; /* not found */ -} - -muiObject *muiHitInList(int uilist, int x, int y) -{ - muiCons *mcons; - - if ((mcons = muiGetListCons(uilist)) == (muiCons *)0) return (muiObject *)0; - return muiFastHitInList(mcons, x, y); -} - -void muiDrawUIList(int uilist) -{ - muiCons *mcons; - - if ((mcons = muiGetListCons(uilist)) == (muiCons *)0) return; - muiBackgroundClear(); - while (mcons) { - muiDrawObject(mcons->object); - mcons = mcons->next; - } -} - -static muiObject *SelectedObj, *LocatedObj; -static muiCons *ActiveCons; -static int ActiveUIList = 0; -static muiObject *ActiveSlider = 0; - -void muiSetActiveUIList(int i) -{ - ActiveUIList = i; -} - -int muiGetActiveUIList(void) -{ - return ActiveUIList; -} - -static void muiInitInteraction(int uilist) -{ - muiCons *mcons; - muiObject *obj; - - if ((mcons = muiGetListCons(uilist)) == (muiCons *)0) return; - SelectedObj = LocatedObj = (muiObject *)0; - ActiveCons = mcons; - ActiveUIList = uilist; - while (mcons) { - obj = mcons->object; - muiSetSelect(obj, 0); - muiSetLocate(obj, 0); - mcons = mcons->next; - } -} - -static void (*noncallback)(int, int) = 0; - -static void nonmuicallback(int x, int y) -{ - if (noncallback == 0) return; - noncallback(x, y); -} - -void muiSetNonMUIcallback(void (*nc)(int, int)) -{ - noncallback = nc; -} - -void muiHandleEvent(int event, int value, int x, int y) -{ - muiObject *obj; - static int lastactive = 0; - enum muiReturnValue retval; - - if (ActiveUIList == 0) { - muiError("muiHandleEvent: no active UI list"); - } - if (lastactive != ActiveUIList) { - muiInitInteraction(lastactive = ActiveUIList); - } - if ((event == MUI_KEYSTROKE)) { - if (obj = muiGetActiveTB()) { - retval = (obj->handler)(obj, event, value, x, y); - if (retval && obj->callback) - (obj->callback)(obj, retval); - return; - } - /* may have to add text editors, et cetera */ - return; - } - if (event == MUI_DEVICE_RELEASE && ActiveSlider) { - retval = (ActiveSlider->handler)(ActiveSlider, event, value, x, y); - if (retval && ActiveSlider->callback) - (ActiveSlider->callback)(ActiveSlider, retval); - ActiveSlider = 0; - return; - } - ActiveCons = muiGetListCons(ActiveUIList); - obj = muiFastHitInList(ActiveCons, x, y); - if (obj == 0 && event == MUI_DEVICE_PRESS) { - nonmuicallback(x, y); - return; - } - if (event == MUI_DEVICE_UP && (!menuinuse) && (activemenu != -1) && (obj == 0 || obj->type != MUI_PULLDOWN)) { - activemenu = -1; - glutDetachMenu(GLUT_LEFT_BUTTON); - } - if (obj && (obj->type == MUI_VSLIDER || obj->type == MUI_HSLIDER) - && event == MUI_DEVICE_PRESS) - ActiveSlider = obj; - if (obj == 0) { - if (ActiveSlider) { - retval = (ActiveSlider->handler)(ActiveSlider, event, value, x, y); - if (retval && ActiveSlider->callback) - (ActiveSlider->callback)(ActiveSlider, retval); - return; - } - if (LocatedObj) { - muiSetLocate(LocatedObj, 0); - muiDrawObject(LocatedObj); - LocatedObj = 0; - } - if ((event == MUI_DEVICE_RELEASE) && SelectedObj) { - muiSetSelect(SelectedObj, 0); - muiSetLocate(SelectedObj, 0); - muiDrawObject(SelectedObj); - LocatedObj = SelectedObj = 0; - } - return; - } - retval = (obj->handler)(obj, event, value, x, y); - if (retval && obj->callback) - (obj->callback)(obj, retval); - return; -} - -/* ARGSUSED2 */ -enum muiReturnValue buttonhandler(muiObject *obj, int event, int value, int x, int y) -{ - if (!muiGetEnable(obj) || !muiGetVisible(obj)) return MUI_NO_ACTION; - - switch (event) { - case MUI_DEVICE_DOWN: - return MUI_NO_ACTION; - case MUI_DEVICE_UP: - if (LocatedObj != obj) { - if (LocatedObj) { - muiSetLocate(LocatedObj, 0); - muiDrawObject(LocatedObj); - } - muiSetLocate(obj, 1); - muiDrawObject(obj); - LocatedObj = obj; - } - return MUI_NO_ACTION; - case MUI_DEVICE_PRESS: - muiSetSelect(obj, 1); - muiSetLocate(obj, 1); - SelectedObj = LocatedObj = obj; - muiDrawObject(obj); - return MUI_NO_ACTION; - case MUI_DEVICE_RELEASE: - if (SelectedObj != obj) { - muiSetSelect(SelectedObj, 0); - muiSetLocate(SelectedObj, 0); - muiDrawObject(SelectedObj); - muiSetLocate(obj, 1); - LocatedObj = obj; - muiDrawObject(obj); - return MUI_NO_ACTION; - } - if (obj->type == MUI_RADIOBUTTON || obj->type == MUI_TINYRADIOBUTTON) { - Button *b = (Button *)obj->object, *b1; - if (b->link) { - muiSetActive(obj, 1); - b1 = b->link; - while (b1 != b) { - muiSetActive(b1->object, 0); - b1 = b1->link; - } - } else { - muiSetActive(obj, ( muiGetActive(obj) ? 0 : 1 ) ); - } - } - muiSetSelect(obj, 0); - muiDrawObject(obj); - return MUI_BUTTON_PRESS; - case MUI_DEVICE_CLICK: - muiSetSelect(obj, 0); - muiSetLocate(obj, 1); - LocatedObj = obj; - muiDrawObject(obj); - return MUI_BUTTON_PRESS; - case MUI_DEVICE_DOUBLE_CLICK: - muiSetSelect(obj, 0); - muiSetLocate(obj, 1); - LocatedObj = obj; - muiDrawObject(obj); - return MUI_BUTTON_PRESS; /* XXX this may not be right; */ - case MUI_KEYSTROKE: - return MUI_NO_ACTION; - default: - muiError("buttonhandler: wacko event"); - return MUI_NO_ACTION; - } -} - -/* ARGSUSED */ -enum muiReturnValue nullhandler(muiObject *obj, int event, int value, int x, int y) -{ - return MUI_NO_ACTION; -} - diff --git a/lib/glut-3.7.6/lib/mui/mui.dsp b/lib/glut-3.7.6/lib/mui/mui.dsp deleted file mode 100644 index 9d4032770..000000000 --- a/lib/glut-3.7.6/lib/mui/mui.dsp +++ /dev/null @@ -1,137 +0,0 @@ -# Microsoft Developer Studio Project File - Name="mui" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Static Library" 0x0104 - -CFG=mui - 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 "mui.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 "mui.mak" CFG="mui - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "mui - Win32 Release" (based on "Win32 (x86) Static Library") -!MESSAGE "mui - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "mui - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../../include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo - -!ELSEIF "$(CFG)" == "mui - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo - -!ENDIF - -# Begin Target - -# Name "mui - Win32 Release" -# Name "mui - Win32 Debug" -# Begin Source File - -SOURCE=.\browseparse.c -# End Source File -# Begin Source File - -SOURCE=.\browser.c -# PROP Exclude_From_Build 1 -# End Source File -# Begin Source File - -SOURCE=.\button.c -# End Source File -# Begin Source File - -SOURCE=.\displaylist.c -# End Source File -# Begin Source File - -SOURCE=.\gizmo.c -# End Source File -# Begin Source File - -SOURCE=.\glutmui.c -# End Source File -# Begin Source File - -SOURCE=.\hslider.c -# End Source File -# Begin Source File - -SOURCE=.\miscui.c -# End Source File -# Begin Source File - -SOURCE=.\mui.c -# End Source File -# Begin Source File - -SOURCE=.\pulldown.c -# End Source File -# Begin Source File - -SOURCE=.\textlist.c -# End Source File -# Begin Source File - -SOURCE=.\uicolor.c -# End Source File -# Begin Source File - -SOURCE=.\vslider.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/lib/mui/pulldown.c b/lib/glut-3.7.6/lib/mui/pulldown.c deleted file mode 100644 index 6ae8489d3..000000000 --- a/lib/glut-3.7.6/lib/mui/pulldown.c +++ /dev/null @@ -1,469 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -#include -#include -#include -#include -#include -#include -#include - -/* M E N U B A R F U N C T I O N S */ - -Pulldown *newpd(void) -{ - Pulldown *pd = (Pulldown *)malloc(sizeof(Pulldown)); - pd->count = 0; - return pd; -} - -void muiAddPulldownEntry(muiObject *obj, char *title, int menu, int ishelp) -{ - Pulldown *pd = (Pulldown *)obj->object; - int space = obj->xmax - obj->xmin - 66; - int i, delta; - - if (ishelp) { - strcpy(pd->helpmenu.title, title); - pd->ishelp = 1; - pd->helpmenu.xoffset = obj->xmax - 58; - pd->helpmenu.menu = menu; - return; - } - if (pd->count == 29) muiError("muiAddPulldownEntry: more than 29 entries"); - strcpy(pd->menus[pd->count].title, title); - pd->menus[pd->count].menu = menu; - pd->count++; - /* now recalculate spacings */ - if (space > 50*pd->count) { - for (i = 0; i <= pd->count; i++) - pd->menus[i].xoffset = 8 + i*50; - } else { - delta = space/pd->count; - for (i = 0; i <= pd->count; i++) - pd->menus[i].xoffset = 8 + i*delta; - } -} - -int activemenu = -1; -extern int menuinuse; - -/* ARGSUSED2 */ -enum muiReturnValue pdhandler(muiObject *obj, int event, int value, int x, int y) -{ - int i; - Pulldown *pd = (Pulldown *)obj->object; - - if( !muiGetEnable(obj) || !muiGetVisible(obj) ) return MUI_NO_ACTION; - - if (event == MUI_DEVICE_UP) { - for (i = 0; i < pd->count; i++) - if (pd->menus[i].xoffset-8 < x && x < pd->menus[i+1].xoffset-8) { - if (activemenu != pd->menus[i].menu && !menuinuse) { - glutSetMenu(activemenu = pd->menus[i].menu); - glutAttachMenu(GLUT_LEFT_BUTTON); - } - return MUI_NO_ACTION; - } - if (pd->ishelp && (x > pd->helpmenu.xoffset-8)) { - if ((activemenu != pd->helpmenu.menu) && !menuinuse) { - glutSetMenu(activemenu = pd->helpmenu.menu); - glutAttachMenu(GLUT_LEFT_BUTTON); - } - return MUI_NO_ACTION; - } - if (activemenu && !menuinuse) { - glutDetachMenu(GLUT_LEFT_BUTTON); - activemenu = -1; - } - } - return MUI_NO_ACTION; -} - -void drawpulldown(muiObject *obj) -{ - int i; - int xmin, xmax, ymin, ymax; - - if (!muiGetVisible(obj)) - return; - - drawsetup(); - - xmin = obj->xmin; - ymin = obj->ymin; - xmax = obj->xmax; - ymax = obj->ymax; - - drawedges(xmin++,xmax--,ymin++,ymax--,uiDkGray,uiVyDkGray); - drawedges(xmin++,xmax--,ymin++,ymax--,uiWhite,uiDkGray); - drawedges(xmin++,xmax--,ymin++,ymax--,uiVyLtGray,uiMmGray); - drawedges(xmin++,xmax--,ymin++,ymax--,uiVyLtGray,uiMmGray); - - uiLtGray(); - uirectfi(xmin,ymin,xmax,ymax); - - if (obj->object) { - Pulldown *pd = (Pulldown *)obj->object; - - for (i = 0; i < pd->count; i++) { - if (muiGetEnable(obj)) uiBlack(); else uiDkGray(); - uicmov2i(obj->xmin + pd->menus[i].xoffset, obj->ymin + 8); - uicharstr(pd->menus[i].title, UI_FONT_NORMAL); - } - if (pd->ishelp) { - if(muiGetEnable(obj)) uiBlack(); else uiDkGray(); - uicmov2i(obj->xmin + pd->helpmenu.xoffset, obj->ymin + 8); - uicharstr(pd->helpmenu.title, UI_FONT_NORMAL); - } - } - - drawrestore(); -} - -#ifdef NOTDEF - -/* static variables */ -static int offrightside; -static PullDown *basepd; -static int menubut; -static int menuretval; -static int inpdmode = 0; -static int indopd = 0; -static int savep; -static short savedev[SAVELEN]; -static short saveval[SAVELEN]; - -extern MenuBar *locatedmb; - -static short pdinit = 0; - -void movemenubar(muiObject *obj) -{ - int i, tx = MENUXENDGAP-9, totaltwidth = 0; - int xsize, ysize, width; - - mb->xmin = mb->xorg; - mb->xmax = mb->xorg+xsize-1; - mb->ymin = mb->yorg+ysize-MENUBARHEIGHT; - mb->ymax = mb->yorg+ysize-1; - - width = mb->xmax - mb->xmin + 1; - - font(PULLDOWNFONT); /* for correct strwidths */ - for (i = 0; i < mb->count; i++) - totaltwidth += strwidth(mb->pds[i]->title) + 2*MENUXENDGAP; - - for (i = 0; i < mb->count; i++) { - if (mb->pds[i]->title) - mb->pds[i]->twidth = strwidth(mb->pds[i]->title); - if ((mb->pds[i]->title) && (!strcmp(mb->pds[i]->title,"Help"))) - mb->pds[i]->txorg = mb->xmax-MENUXENDGAP-mb->pds[i]->twidth-MENUXGAP; - else - mb->pds[i]->txorg = mb->xmin + tx; - mb->pds[i]->xorg = mb->pds[i]->txorg; - mb->pds[i]->yorg = mb->ymin-TITLESEP; - mb->pds[i]->orglocked = 1; - mb->pds[i]->mb = mb; - - if (totaltwidth > width) - tx += (width-2*MENUXENDGAP)/mb->count-2; - else - tx += mb->pds[i]->twidth+24; - } -} - -MenuBar *newmenubar(void) -{ - MenuBar *mb; - - mb = (MenuBar *)calloc(1,sizeof(MenuBar)); - mb->count = 0; - mb->pds = 0; - mb->locate = -1; - mb->enable = 1; - mb->invisible = 0; - - return mb; -} - -/* ENABLE STATE FUNCTIONS FOR MENU BARS */ - -void enablemb(MenuBar *mb) -{ - if (mb->enable) - return; - mb->enable = 1; -} - -void disablemb(MenuBar *mb) -{ - if (!mb->enable) - return; - mb->enable = 0; -} - -short getenablemb(MenuBar *mb) -{ - return mb->enable; -} - -/* LOCATE STATE FUNCTIONS FOR MENU BARS */ - -short gethighlightmb(MenuBar *mb) -{ - return mb->locate; -} - -void highlightmb(MenuBar *mb, int pdnum) -{ - short oldpdnum = mb->locate; - - if (mb->locate == pdnum) - return; - mb->locate = pdnum; - locatedmb = mb; - if (!mb->invisible) { - if (pdnum != -1) - drawmenubartext(mb,pdnum); - if (oldpdnum != -1) - drawmenubartext(mb,oldpdnum); - } -} - -void unhighlightmb(MenuBar *mb) -{ - short oldpdnum = mb->locate; - - if (mb->locate == -1) - return; - mb->locate = -1; - if (locatedmb == mb) - locatedmb = 0; - if (!mb->invisible) - if (oldpdnum != -1) - drawmenubartext(mb,oldpdnum); -} - -/* VISIBLE STATE FUNCTIONS */ - -void makevisiblemb(MenuBar *mb) -{ - if (!mb->invisible) - return; - mb->invisible = 0; -} - -void makeinvisiblemb(MenuBar *mb) -{ - if (mb->invisible) - return; - mb->invisible = 1; -} - -short getvisiblemb(MenuBar *mb) -{ - return 1-mb->invisible; -} - -void loadmenubar(MenuBar *mb, int menucount, PullDown **pdarray) -{ - int i; - - drawsetup(); - - mb->count = menucount; - mb->pds = (PullDown **)calloc(menucount,sizeof(PullDown)); - mb->locate = -1; - mb->enable = 1; - mb->invisible = 0; - - for (i = 0; i < mb->count; i++){ - mb->pds[i] = pdarray[i]; - } - movemenubar(mb); - - drawrestore(); -} - -void addtomenubar(MenuBar *mb, PullDown *pd) -{ - PullDown **pds; - int i; - - mb->count++; - pds = (PullDown **)calloc(mb->count,sizeof(PullDown)); - - for (i = 0; i < mb->count-1; i++){ - pds[i] = mb->pds[i]; - } - pds[i] = pd; - - free(mb->pds); - mb->pds = pds; -} - -void addtopd(PullDown *pd, MenuItem *mi) -{ - MenuItem *m, *tail; - - tail = pd->entries; - - if (tail) { - while (tail->next) - tail = tail->next; - tail->next = mi; - } else - tail = pd->entries = mi; - - m = pd->entries; - - while (m) { - pd->nentries++; - m->no = pd->nentries; - m = m->next; - } - - fixuppd(pd); -} - -void removefrommenubar(MenuBar *mb, PullDown *pd) -{ - PullDown **pds; - int i, j; - - mb->count--; - pds = (PullDown **)calloc(mb->count,sizeof(PullDown)); - - for (i = 0,j = 0; i <= mb->count; i++) { - if (mb->pds[i] != pd) { - pds[j] = mb->pds[i]; - j++; - } - } - - free(mb->pds); - mb->pds = pds; -} - -void movemenubar(MenuBar *mb) -{ - int i, tx = MENUXENDGAP-9, totaltwidth = 0; - int xsize, ysize, width; - - getorigin(&mb->xorg, &mb->yorg); - getsize(&xsize, &ysize); - mb->xmin = mb->xorg; - mb->xmax = mb->xorg+xsize-1; - mb->ymin = mb->yorg+ysize-MENUBARHEIGHT; - mb->ymax = mb->yorg+ysize-1; - - width = mb->xmax - mb->xmin + 1; - - font(PULLDOWNFONT); /* for correct strwidths */ - for (i = 0; i < mb->count; i++) - totaltwidth += strwidth(mb->pds[i]->title) + 2*MENUXENDGAP; - - for (i = 0; i < mb->count; i++) { - if (mb->pds[i]->title) - mb->pds[i]->twidth = strwidth(mb->pds[i]->title); - if ((mb->pds[i]->title) && (!strcmp(mb->pds[i]->title,"Help"))) - mb->pds[i]->txorg = mb->xmax-MENUXENDGAP-mb->pds[i]->twidth-MENUXGAP; - else - mb->pds[i]->txorg = mb->xmin + tx; - mb->pds[i]->xorg = mb->pds[i]->txorg; - mb->pds[i]->yorg = mb->ymin-TITLESEP; - mb->pds[i]->orglocked = 1; - mb->pds[i]->mb = mb; - - if (totaltwidth > width) - tx += (width-2*MENUXENDGAP)/mb->count-2; - else - tx += mb->pds[i]->twidth+24; - } -} - -int inmenubar(MenuBar *mb, int mx, int my) /* Window coordinates */ -{ - int i; - - if (!getenablemb(mb)) - return -1; - - if (getdrawmode() == NORMALDRAW) { - mx += mb->xorg; - my += mb->yorg; - } - if (mb->xmin <= mx && mx <= mb->xmax && - mb->ymin+2 <= my && my <= mb->ymax-2) /* +-2 for locate highlight*/ - for (i = 0; i < mb->count; i++) { - if ((mx >= mb->pds[i]->txorg) && - (mx <= mb->pds[i]->txorg+mb->pds[i]->twidth+MENUXGAP*2)) - return i; - } - return -1; -} - -short locatemenubar(MenuBar *mb, int mx, int my) /* window coordinates */ -{ - int highlight = gethighlightmb(mb); - int inmb = inmenubar(mb,mx,my); - - if (!getenablemb(mb) || !getvisiblemb(mb) || (highlight == inmb)) - return 0; - if (inmb != -1) { - unlocateall(); - highlightmb(mb,inmb); - return 1; - } else { - unhighlightmb(mb); - return 0; - } -} - -/* DRAWING MENUBAR FUNCTIONS */ - -void drawmenubarnow(MenuBar *mb) -{ - uifrontbuffer(1); - drawmenubar(mb); - uifrontbuffer(0); -} - - -#endif /* NOTDEF */ diff --git a/lib/glut-3.7.6/lib/mui/textlist.c b/lib/glut-3.7.6/lib/mui/textlist.c deleted file mode 100644 index 929e85ec7..000000000 --- a/lib/glut-3.7.6/lib/mui/textlist.c +++ /dev/null @@ -1,438 +0,0 @@ -/* - * Copyright (c) 1990,1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -extern short sharefont1; - -extern TextList *locatedtl; - -int gettlheightcount(int ymin, int ymax) -{ - if (ymin > ymax) { - int tmp = ymin; - ymin = ymax; - ymax = tmp; - } - return ((ymax-ymin+1-7)/TEXTHEIGHT); -} - -void movetl(TextList *tl, int ymin, int ymax) -{ - tl->listheight = gettlheightcount(ymin, ymax); -} - -int gettextlistheight(int count) -{ - return (count*TEXTHEIGHT+7); -} - -TextList *newtl(muiObject *obj, int listheight) -{ - TextList *tl; - - tl = (TextList *)malloc(sizeof(TextList)); - - tl->strs = 0; - tl->top = 0; - tl->selecteditem = -1; - tl->locateditem = -1; - tl->listheight = listheight; - - movetl(tl, obj->ymin, obj->ymax = obj->ymin+gettextlistheight(listheight)); - - return tl; -} - -void resettl(TextList *tl) -{ - tl->selecteditem = -1; - tl->top = 0; -} - -void drawtl(muiObject *obj) -{ - TextList *tl = (TextList *)obj->object; - int xmin = obj->xmin, xmax = obj->xmax, - ymin = obj->ymin, ymax = obj->ymax; - int item = 0, ybot, xright; - char **s = &tl->strs[tl->top]; - - if (!muiGetVisible(obj)) - return; - - drawsetup(); - - drawedges(xmin++, xmax--, ymin++, ymax--, uiMmGray, uiWhite); - drawedges(xmin++, xmax--, ymin++, ymax--, uiDkGray, uiVyLtGray); - drawedges(xmin++, xmax--, ymin++, ymax--, uiVyDkGray, uiDkGray); - - drawedges(xmin++, xmax--, ymin++, ymax--, uiVyLtGray, uiMmGray); - - uiLtGray(); - uirectfi(xmin, ymin, xmax, ymax); - - uiBlack(); - uipushviewport(); - uiviewport(xmin+3, ymin-1, xmax-xmin-6, ymax-ymin); - if (s) while (*s && item < tl->listheight) { - if (item == tl->selecteditem - tl->top && muiGetEnable(obj)) { - ybot = ymin + 1 + (tl->listheight - item - 1)*TEXTHEIGHT; - xright = xmin + 11 + FONTWIDTH*(int)strlen(*s); - uiWhite(); - uirectfi(xmin+4, ybot, xright, ybot + TEXTHEIGHT - 3); - } - - /* locate highlight */ - if (item == tl->locateditem - tl->top && muiGetEnable(obj)) { - ybot = ymin + 1 + (tl->listheight - item - 1)*TEXTHEIGHT; - xright = xmin + 11 + FONTWIDTH*(int)strlen(*s); - uiWhite(); - uirecti(xmin+3, ybot-1, xright+1, ybot + TEXTHEIGHT - 2); - uirecti(xmin+4, ybot, xright, ybot + TEXTHEIGHT - 3); - } - if (muiGetEnable(obj)) uiBlack(); else uiDkGray(); - uicmov2i(xmin+8, ymin + 6 + (tl->listheight - item - 1)*TEXTHEIGHT); - uicharstr(*s, UI_FONT_NORMAL); - item++; s++; - } - uiBlack(); - uipopviewport(); - drawrestore(); -} - -int muiGetTLSelectedItem(muiObject *obj) -{ - TextList *tl = (TextList *)obj->object; - return tl->selecteditem; -} - -void muiSetTLStrings(muiObject *obj, char **s) -{ - TextList *tl = (TextList *)obj->object; - tl->strs = s; - - tl->count = 0; - while(*s) { - tl->count++; - s++; - } - resettl(tl); - tl->selecteditem = 0; -} - -/* ARGSUSED3 */ -enum muiReturnValue tlhandler(muiObject *obj, int event, int value, int x, int y) -{ - int i; - TextList *tl = (TextList *)obj->object; - - if( !muiGetEnable(obj) || !muiGetVisible(obj) ) return MUI_NO_ACTION; - - if (event == MUI_DEVICE_DOUBLE_CLICK) { - i = (y - obj->ymin - 3)/TEXTHEIGHT; - tl->selecteditem = (tl->listheight - i - 1) + tl->top; - return MUI_TEXTLIST_RETURN_CONFIRM; - } - if (event == MUI_DEVICE_RELEASE) { - i = (y - obj->ymin - 3)/TEXTHEIGHT; - tl->selecteditem = (tl->listheight - i - 1) + tl->top; - return MUI_TEXTLIST_RETURN; - } - if (event == MUI_DEVICE_PRESS || event == MUI_DEVICE_DOWN) { - i = (y - obj->ymin - 3)/TEXTHEIGHT; - tl->selecteditem = (tl->listheight - i - 1) + tl->top; - return MUI_NO_ACTION; - } - return MUI_NO_ACTION; -} - -void muiSetTLTopInt(muiObject *obj, int top) -{ - TextList *tl = (TextList *)obj->object; - if (top < 0) top = 0; - if (top >= tl->count) top = tl->count - 1; - tl->top = top; -} - -void muiSetTLTop(muiObject *obj, float p) -{ - TextList *tl = (TextList *)obj->object; - if (tl->count <= tl->listheight) { tl->top = 0; return; } - tl->top = (1.0-p)*(tl->count + 1 - tl->listheight); -} - - -void settlstrings(TextList *tl, char **s) -{ - tl->strs = s; - - tl->count = 0; - while(*s) { - tl->count++; - s++; - } -} - -#ifdef NOTDEF - -/* SELECT STATE FUNCTIONS */ - -void unselecttl(TextList *tl) -{ - int oldselect = tl->selecteditem; - - if (tl->selecteditem == -1) - return; - tl->selecteditem = -1; - if (!tl->invisible) - if (oldselect != -1) - drawparttl(tl,oldselect); -} - -void selecttlitem(TextList *tl, int item) -{ - int oldselect = tl->selecteditem; - - if (tl->selecteditem == item) - return; - tl->selecteditem = item; - if (!tl->invisible) { - if (tl->selecteditem != -1) - drawparttl(tl,tl->selecteditem); - if (oldselect != -1) - drawparttl(tl,oldselect); - } -} - -short getselectedtlitem(TextList *tl) -{ - return tl->selecteditem; /* returns -1 if none selected */ -} - -void highlighttl(TextList *tl, int item) -{ - int oldhighlight = tl->locateditem; - - if (tl->locateditem == item) - return; - tl->locateditem = item; - locatedtl = tl; - if (!tl->invisible) { - if (tl->locateditem != -1) - drawparttl(tl,tl->locateditem); - if (oldhighlight != -1) - drawparttl(tl,oldhighlight); - } -} - -void unhighlighttl(TextList *tl) -{ - int oldhighlight = tl->locateditem; - - if (tl->locateditem == -1) - return; - tl->locateditem = -1; - if (locatedtl == tl) - locatedtl = 0; - if (!tl->invisible) { - if (oldhighlight != -1) - drawparttl(tl,oldhighlight); - } -} - -short gethighlighttl(TextList *tl) -{ - return tl->locateditem; -} - -void makevisibletl(TextList *tl) -{ - if (!tl->invisible) - return; - tl->invisible = 0; -} - -void makeinvisibletl(TextList *tl) -{ - if (tl->invisible) - return; - tl->invisible = 1; -} - -/* whether or not the text list is showing */ -short getvisibletl(TextList *tl) -{ - return 1-tl->invisible; -} - -/* whether or not the item is showing */ -short getitemvisibletl(TextList *tl, int item) -{ - if ((item < tl->top) || (item >= (tl->top+tl->listheight)) || - (item >= tl->count) || (item == -1)) - return 0; - else - return 1; -} - -short locatetl(TextList *tl, int x, int y) -{ - int highlight = gethighlighttl(tl); - int intextlist = intl(tl,x,y); - - if ((intextlist == highlight) || !getvisibletl(tl)) - return 0; - if (intextlist != -1) { - unlocateall(); - highlighttl(tl,intextlist); - return 1; - } else { - unhighlighttl(tl); - return 0; - } -} - -char *selectedstring(TextList *tl) -{ - if (tl->selecteditem == -1) return 0; - return tl->strs[tl->selecteditem]; -} - -void drawtlnow(TextList *tl) -{ - uifrontbuffer(1); - drawtl(tl); - uifrontbuffer(0); -} - -void drawparttl(TextList *tl,int item) -{ - int xmin = tl->xmin+8, xmax = tl->xmax-8-SLIDERWIDTH; - int ymin = - tl->ymin+5+(tl->listheight - item + tl->top - 1)*TEXTHEIGHT; - int ymax = ymin + TEXTHEIGHT - 3; - char **s; - - if (!getvisibletl(tl) || !getitemvisibletl(tl,item)) - return; - - s = &tl->strs[item]; - drawsetup(); - - uifrontbuffer(1); - - uiLtGray(); - uirectfi(xmin-1, ymin-1, xmax+1, ymax+1); - - font(TEXTLISTFONT); - pushviewport(); - scrmask(xmin-1, xmax+1, ymin-1, ymax+1); - if (s) { - xmax = xmin + 7 + strwidth(*s); - if (item == tl->selecteditem) { - uiWhite(); - uirectfi(xmin, ymin, xmax, ymax); - } - if (item == tl->locateditem) { - uiWhite(); - uirecti(xmin-1, ymin-1, xmax+1, ymax+1); - uirecti(xmin, ymin, xmax, ymax); - } - uiBlack(); - uicmov2i(xmin+4, ymin + 5); - uicharstr(*s); - } - popviewport(); - - uifrontbuffer(0); - - drawrestore(); -} - -void settlstrslinkhandle(char **l, TextList *tl) -{ - int vshalf, d; - float p; - - settlstrings(tl, l); - - if (tl->count <= tl->listheight) { - vshalf = ((tl->listheight*TEXTHEIGHT - 36)/2) - 2; - d = 0; - p = 1.0; - disablevs(tl->vs); - } else { - enablevs(tl->vs); - p = getvsval(tl->vs); - vshalf = tl->listheight*(tl->listheight*TEXTHEIGHT-36)/(2*tl->count); - d = (tl->listheight*TEXTHEIGHT - 2*vshalf)/(tl->count - tl->listheight); - if (d == 0) d = 1; - } - setvsarrowdelta(tl->vs, d); - setvshalf(tl->vs, vshalf); - movevsval(tl->vs, p); -} - -void adjustslider(TextList *tl, VSlider *sl) -{ - setvsval(sl, (float) (1.0 - (float) tl->top/ (float) tl->count)); -} - -short selectedtl(TextList *tl, int x, int y, int val) -{ - if (intl(tl, x, y) == -1) { - if (intlboundaries(tl, x, y)) { - tl->selecteditem = -1; - drawtlnow(tl); - } - } else { - if (val == UIBUTTONUP) return 0; - return handletl(tl, LEFTMOUSE, val); - } - return 0; -} - -#endif /* NOTDEF */ diff --git a/lib/glut-3.7.6/lib/mui/uicolor.c b/lib/glut-3.7.6/lib/mui/uicolor.c deleted file mode 100644 index 83c4afcee..000000000 --- a/lib/glut-3.7.6/lib/mui/uicolor.c +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright (c) 1990,1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -#include -#include - -#define MKRGB(r, g, b) ((((r)&0xff)<<0) | (((g)&0xff)<<8) | (((b)&0xff)<<16)) -extern short ditherflag; - -void uiBlack(void) -{ - glColor3f(0.0, 0.0, 0.0); -} - -void uiWhite(void) -{ - glColor3f(1.0, 1.0, 1.0); -} - -void uiLtGray(void) -{ - glColor3f(170.0/255.0, 170.0/255.0, 170.0/255.0); -} - -void uiDkGray(void) -{ - glColor3f(85.0/255.0, 85.0/255.0, 85.0/255.0); -} - -void uiSlateBlue(void) -{ - glColor3f(113.0/255.0, 113.0/255.0, 198.0/255.0); -} - -void uiBlue(void) -{ - glColor3f(0.0, 0.0, 1.0); -} - -void uiBackground(void) -{ - uiVyLtGray(); -} - -void uiVyDkGray(void) -{ - glColor3f(40.0/255.0, 40.0/255.0, 40.0/255.0); -} - -void uiMmGray(void) -{ - glColor3f(132.0/255.0, 132.0/255.0, 132.0/255.0); -} - -void uiVyLtGray(void) -{ - glColor3f(214.0/255.0, 214.0/255.0, 214.0/255.0); -} - -void uiTerraCotta(void) -{ - glColor3f(198.0/255.0, 113.0/255.0, 113.0/255.0); -} - -void uiYellow(void) -{ - glColor3f(1.0, 1.0, 0.0); -} - -void uiDkYellow(void) -{ - glColor3f(0x47/255.0, 0x72/255.0, 0x72/255.0); -} - -void uiMmYellow(void) -{ - glColor3f(0x38/255.0, 0xc7/255.0, 0xc7/255.0); -} - -void uiLtYellow(void) -{ - glColor3f(0x80/255.0, 0xff/255.0, 0xff/255.0); -} - -/* -void uiPupBlack(void) -{ - color(PUP_BLACK); -} - -void uiPupWhite(void) -{ - color(PUP_WHITE); -} - -void uiPupGray(void) -{ - color(PUP_COLOR); -} - -void uiPupClear(void) -{ - color(PUP_CLEAR); -} -*/ diff --git a/lib/glut-3.7.6/lib/mui/vslider.c b/lib/glut-3.7.6/lib/mui/vslider.c deleted file mode 100644 index 1b08b69e9..000000000 --- a/lib/glut-3.7.6/lib/mui/vslider.c +++ /dev/null @@ -1,490 +0,0 @@ -/* - * Copyright (c) 1990,1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -#include -#include -#include -#include -#include -#include - -extern VSlider *locatedvs; - -int getvstrough(muiObject *obj) -{ - return obj->ymax - obj->ymin - 2*ARROWHEIGHT; -} - -void setvscenter(muiObject *obj, int scenter) -{ - VSlider *vs = (VSlider *)obj->object; - if ((scenter - vs->shalf) < (obj->ymin+ARROWHEIGHT)) - vs->scenter = getvstrough(obj)/2 + obj->ymin+ARROWHEIGHT; - else - vs->scenter = scenter; -} - -void muiSetVSArrowDelta(muiObject *obj, int newd) -{ - VSlider *vs = (VSlider *)obj->object; - vs->arrowdelta = newd; -} - -VSlider *newvs(muiObject *obj, int ymin, int ymax, int scenter, int shalf) -{ - VSlider *vs; - - vs = (VSlider *)malloc(sizeof(VSlider)); - obj->object = (VSlider *)vs; - if (shalf == 0) { - vs->shalf = 0; - } else if (shalf < MINSHALF) - vs->shalf = MINSHALF; - else - vs->shalf = shalf; - - if ((ymax - ymin + 1) <= (2*ARROWHEIGHT+2*MINSHALF)) - vs->thumb = 0; - else - vs->thumb = 1; - - setvscenter(obj, scenter); - vs->oldpos = vs->scenter; - - muiSetVSArrowDelta(obj, 1); - return vs; -} - -void freevs(VSlider *vs) -{ - if (vs) { - free(vs); - } -} - -void drawvsarrows(muiObject *obj) -{ - int xmin = obj->xmin, xmax = obj->xmin+ARROWHEIGHT, - ymin = obj->ymin, ymax = obj->ymax; - - if (!muiGetVisible(obj)) - return; - - /* Draw the arrows: */ - - /* down arrow */ - uiDkGray(); - uirecti(xmin,ymin,xmax,ymin+20); - - if (muiGetVisible(obj)) { - if (obj->locate == SCROLLDOWN) { - if (obj->select == SCROLLDOWN) { - drawedges(xmin+1,xmax-1,ymin+1,ymin+19,uiMmGray,uiWhite); - drawedges(xmin+2,xmax-2,ymin+2,ymin+18,uiLtGray,uiWhite); - } else { - drawedges(xmin+1,xmax-1,ymin+1,ymin+19,uiWhite,uiMmGray); - drawedges(xmin+2,xmax-2,ymin+2,ymin+18,uiWhite,uiLtGray); - } - uiVyLtGray(); - uirectfi(xmin+3,ymin+3,xmax-3,ymin+17); - } else { - if (obj->select == SCROLLDOWN) { - drawedges(xmin+1,xmax-1,ymin+1,ymin+19,uiMmGray,uiVyLtGray); - drawedges(xmin+2,xmax-2,ymin+2,ymin+18,uiMmGray,uiVyLtGray); - } else { - drawedges(xmin+1,xmax-1,ymin+1,ymin+19,uiWhite,uiMmGray); - drawedges(xmin+2,xmax-2,ymin+2,ymin+18,uiVyLtGray,uiMmGray); - } - uiLtGray(); - uirectfi(xmin+3,ymin+3,xmax-3,ymin+17); - } - } else { - drawedges(xmin+1,xmax-1,ymin+1,ymin+19,uiVyLtGray,uiMmGray); - uiLtGray(); - uirectfi(xmin+2,ymin+2,xmax-2,ymin+18); - } - - /* arrow */ - if (muiGetEnable(obj)) - uiDkGray(); - else - uiMmGray(); - uimove2i(xmin+5,ymin+14); - uidraw2i(xmin+14,ymin+14); - uiendline(); - uirectfi(xmin+6,ymin+13,xmin+13,ymin+12); - uirectfi(xmin+7,ymin+11,xmin+12,ymin+10); - uirectfi(xmin+8,ymin+8,xmin+11,ymin+9); - uirectfi(xmin+9,ymin+6,xmin+10,ymin+7); - - /* up arrow */ - uiDkGray(); - uirecti(xmin,ymax-20,xmax,ymax); - - if (muiGetEnable(obj)) { - if (obj->locate == SCROLLUP) { - if (obj->select == SCROLLUP) { - drawedges(xmin+1,xmax-1,ymax-19,ymax-1,uiMmGray,uiWhite); - drawedges(xmin+2,xmax-2,ymax-18,ymax-2,uiLtGray,uiWhite); - } else { - drawedges(xmin+1,xmax-1,ymax-19,ymax-1,uiWhite,uiMmGray); - drawedges(xmin+2,xmax-2,ymax-18,ymax-2,uiWhite,uiLtGray); - } - uiVyLtGray(); - uirectfi(xmin+3,ymax-17,xmax-3,ymax-3); - } else { - if (obj->select == SCROLLUP) { - drawedges(xmin+1,xmax-1,ymax-19,ymax-1,uiMmGray,uiVyLtGray); - drawedges(xmin+2,xmax-2,ymax-18,ymax-2,uiMmGray,uiVyLtGray); - } else { - drawedges(xmin+1,xmax-1,ymax-19,ymax-1,uiWhite,uiMmGray); - drawedges(xmin+2,xmax-2,ymax-18,ymax-2,uiVyLtGray,uiMmGray); - } - uiLtGray(); - uirectfi(xmin+3,ymax-17,xmax-3,ymax-3); - } - } else { - drawedges(xmin+1,xmax-1,ymax-19,ymax-1,uiVyLtGray,uiMmGray); - uiLtGray(); - uirectfi(xmin+2,ymax-18,xmax-2,ymax-2); - } - - /* arrow */ - - if (muiGetEnable(obj)) - uiDkGray(); - else - uiMmGray(); - uirectfi(xmin+9,ymax-6,xmin+10,ymax-7); - uirectfi(xmin+8,ymax-8,xmin+11,ymax-9); - uirectfi(xmin+7,ymax-10,xmin+12,ymax-11); - uirectfi(xmin+6,ymax-12,xmin+13,ymax-13); - uimove2i(xmin+5,ymax-14); - uidraw2i(xmin+14,ymax-14); - uiendline(); -} - -void drawvs(muiObject *obj) -{ - VSlider *vs = (VSlider *)obj->object; - - int xmin = obj->xmin, ymax = obj->ymax-ARROWHEIGHT, - ymin = obj->ymin+ARROWHEIGHT; - int xmax = xmin+SLIDERWIDTH; - int symin = vs->scenter - vs->shalf; - int symax = vs->scenter + vs->shalf; - int oldsymin = vs->oldpos - vs->shalf; - int oldsymax = vs->oldpos + vs->shalf; - - drawsetup(); - - if (!muiGetVisible(obj)) { - backgrounddraw(xmin,ymin,xmax,ymax); - drawrestore(); - return; - } - - /* trough */ - - uiDkGray(); - uirecti(xmin, ymin, xmax, ymax); - - drawedges(xmin+1,xmax-1,ymin+1,ymax-1,uiVyLtGray,uiMmGray); - - uiLtGray(); - uirectfi(xmin+2, ymin+2, xmax-2, ymax-2); - - if (vs->thumb) { - /* last thumb position */ - if ((vs->oldpos != vs->scenter) && (obj->enable)) { - - uiDkGray(); - uimove2i(xmax-2, oldsymax); - uidraw2i(xmin+1, oldsymax); - uiendline(); - - uiMmGray(); - uimove2i(xmin+1, oldsymax); - uidraw2i(xmin+1, oldsymin); - uiendline(); - - uiVyLtGray(); - uimove2i(xmin+2, oldsymin); - uidraw2i(xmax-1, oldsymin); - uiendline(); - - uiLtGray(); - uimove2i(xmax-1, oldsymin); - uidraw2i(xmax-1, oldsymax); - uiendline(); - - uiVyLtGray(); - uimove2i(xmax-2, --oldsymax); - uidraw2i(xmax-2, ++oldsymin); - uidraw2i(xmin+2, oldsymin); - uiendline(); - - uiVyDkGray(); - uimove2i(xmin+2, oldsymin); - uidraw2i(xmin+2, oldsymax); - uidraw2i(xmax-3, oldsymax); - uiendline(); - - uiDkGray(); - uimove2i(xmin+3, --oldsymax); - uidraw2i(xmax-3, oldsymax); - uiendline(); - - uiLtGray(); - uimove2i(xmax-3, oldsymax); - uidraw2i(xmax-3, ++oldsymin); - uidraw2i(xmin+3, oldsymin); - uiendline(); - - uiMmGray(); - uirectfi(xmin+3, ++oldsymin, xmax-4, --oldsymax); - - } - - if (obj->enable) { - - /* thumb */ - uiDkGray(); - uirecti(xmin,symin,xmax,symax); - - if (obj->locate == THUMB) { - drawedges(xmin+1,xmax-1,symin+1,symax-1,uiWhite,uiDkGray); - drawedges(xmin+2,xmax-2,symin+2,symax-2,uiWhite,uiLtGray); - drawedges(xmin+3,xmax-3,symin+3,symax-3,uiWhite,uiLtGray); - - uiVyLtGray(); - uirectfi(xmin+4, symin+4, xmax-4, symax-4); - - /* ridges on thumb */ - uiDkGray(); - uimove2i(xmin+3,vs->scenter); - uidraw2i(xmax-3,vs->scenter); - uiendline(); - uimove2i(xmin+3,vs->scenter-4); - uidraw2i(xmax-3,vs->scenter-4); - uiendline(); - uimove2i(xmin+3,vs->scenter+4); - uidraw2i(xmax-3,vs->scenter+4); - uiendline(); - - uiWhite(); - uirectfi(xmin+3,vs->scenter+1,xmax-3,vs->scenter+2); - uirectfi(xmin+3,vs->scenter+5,xmax-3,vs->scenter+6); - uirectfi(xmin+3,vs->scenter-2,xmax-3,vs->scenter-3); - } else { - drawedges(xmin+1,xmax-1,symin+1,symax-1,uiWhite,uiDkGray); - drawedges(xmin+2,xmax-2,symin+2,symax-2,uiVyLtGray,uiMmGray); - drawedges(xmin+3,xmax-3,symin+3,symax-3,uiVyLtGray,uiMmGray); - - uiLtGray(); - uirectfi(xmin+4, symin+4, xmax-4, symax-4); - - /* ridges on thumb */ - uiBlack(); - uimove2i(xmin+3,vs->scenter); - uidraw2i(xmax-3,vs->scenter); - uiendline(); - uimove2i(xmin+3,vs->scenter-4); - uidraw2i(xmax-3,vs->scenter-4); - uiendline(); - uimove2i(xmin+3,vs->scenter+4); - uidraw2i(xmax-3,vs->scenter+4); - uiendline(); - - uiWhite(); - uimove2i(xmin+3,vs->scenter+1); - uidraw2i(xmax-3,vs->scenter+1); - uiendline(); - uimove2i(xmin+3,vs->scenter-3); - uidraw2i(xmax-3,vs->scenter-3); - uiendline(); - uimove2i(xmin+3,vs->scenter+5); - uidraw2i(xmax-3,vs->scenter+5); - uiendline(); - } - } - } - drawvsarrows(obj); - - drawrestore(); -} - -enum muiReturnValue vshandler(muiObject *obj, int event, int value, int x, int y) -{ - int my = y; - static int mfudge=0; - static enum muiReturnValue retval = MUI_NO_ACTION; - VSlider *vs = (VSlider *)obj->object; - - if (!muiGetEnable(obj) || !muiGetVisible(obj)) - return MUI_NO_ACTION; - switch (event) { - case MUI_DEVICE_RELEASE: - if (value == 0) { - vs->oldpos = vs->scenter; - muiSetSelect(obj, 0); - return MUI_SLIDER_RETURN; - } - case MUI_DEVICE_PRESS: - case MUI_DEVICE_CLICK: - /* in the arrows */ - if (my >= obj->ymin && my <= obj->ymax && - (my < obj->ymin+ARROWHEIGHT || my > obj->ymax-ARROWHEIGHT)) { - mfudge = -10000; - if (my < obj->ymin+ARROWHEIGHT) { /* boink down */ - my = vs->scenter - vs->arrowdelta; - retval = MUI_SLIDER_SCROLLDOWN; - } else { /* boink up */ - my = vs->scenter + vs->arrowdelta; - retval = MUI_SLIDER_SCROLLUP; - } - if (event == MUI_DEVICE_CLICK) { - muiSetSelect(obj, 0); - retval = MUI_SLIDER_RETURN; - } - if (my - vs->shalf < obj->ymin+1+ARROWHEIGHT) - my = obj->ymin+1+vs->shalf+ARROWHEIGHT; - if (my + vs->shalf > obj->ymax-1-ARROWHEIGHT) - my = obj->ymax-1-vs->shalf-ARROWHEIGHT; - vs->scenter = my; - break; - } else if (my >= obj->ymin && my <= obj->ymax) - retval = MUI_SLIDER_THUMB; - vs->oldpos = vs->scenter; - if (my >= vs->scenter-vs->shalf && my <= vs->scenter+vs->shalf) - mfudge = vs->scenter - my; - else - mfudge = 0; - break; - case MUI_DEVICE_DOWN: - if (mfudge == -10000) { /* auto - repeat the arrow keys */ - if (retval == MUI_SLIDER_SCROLLDOWN) { - my = vs->scenter - vs->arrowdelta; - if (my - vs->shalf < obj->ymin+1+ARROWHEIGHT) - my = obj->ymin+1+vs->shalf+ARROWHEIGHT; - } else { - my = vs->scenter + vs->arrowdelta; - if (my + vs->shalf > obj->ymax-1-ARROWHEIGHT) - my = obj->ymax-1-vs->shalf-ARROWHEIGHT; - } - vs->scenter = my; - break; - } - my = y+mfudge; - if (my - vs->shalf < obj->ymin+1+ARROWHEIGHT) - my = obj->ymin+1+vs->shalf+ARROWHEIGHT; - if (my + vs->shalf > obj->ymax-1-ARROWHEIGHT) - my = obj->ymax-1-vs->shalf-ARROWHEIGHT; - - /* adjust thumb */ - vs->scenter = my; - break; - } - x = x; /* for lint's sake */ - return retval; -} - -float muiGetVSVal(muiObject *obj) -{ - VSlider *vs = (VSlider *)obj->object; - - return (vs->scenter-obj->ymin-1.0-vs->shalf-ARROWHEIGHT)/ - (obj->ymax - obj->ymin - 2.0*vs->shalf - 2.0-2*ARROWHEIGHT); -} - -void setvshalf(muiObject *obj, int shalf) -{ - VSlider *vs = (VSlider *)obj->object; - vs->shalf = shalf; - if (vs->shalf==0) - muiSetEnable(obj, 0); - else if (vs->shalf < MINSHALF) { - vs->shalf = MINSHALF; - muiSetEnable(obj, 1); - } else if (2*vs->shalf >= getvstrough(obj)) { - vs->shalf = getvstrough(obj)/2; - muiSetEnable(obj, 0); - } -} - -void movevsval(muiObject *obj, float val) -{ - float f; - VSlider *vs = (VSlider *)obj->object; - - if (val < 0.0) val = 0.0; - if (val > 1.0) val = 1.0; - f = val*(obj->ymax - obj->ymin - 2.0*vs->shalf - 2.0-2*ARROWHEIGHT); - vs->scenter = f + vs->shalf + obj->ymin + 1.0+ARROWHEIGHT; - - if ((vs->scenter + vs->shalf) > (obj->ymax - ARROWHEIGHT)) - vs->scenter = obj->ymax - ARROWHEIGHT - vs->shalf; - if ((vs->scenter - vs->shalf) < (obj->ymin+ ARROWHEIGHT)) - vs->scenter = obj->ymin + ARROWHEIGHT + vs->shalf; -} - -void muiSetVSValue(muiObject *obj, float val) -{ - VSlider *vs = (VSlider *)obj->object; - movevsval(obj, (float) val); - vs->oldpos = vs->scenter; -} - -/* - * visible is windowheight/dataheight - * top is top/dataheight - */ - -void -adjustvsthumb(muiObject *obj, double visible, double top) -{ - int size; - - if (visible >= 1.0) { - size = getvstrough(obj) + 1; - } else { - size = visible*getvstrough(obj); - } - muiSetEnable(obj, 1); - setvshalf(obj, size/2); - muiSetVSValue(obj, (float) (1.0 - top)); -} diff --git a/lib/glut-3.7.6/man/Imakefile b/lib/glut-3.7.6/man/Imakefile deleted file mode 100644 index 451179923..000000000 --- a/lib/glut-3.7.6/man/Imakefile +++ /dev/null @@ -1,7 +0,0 @@ -#define IHaveSubdirs -#define PassCDebugFlags - -SUBDIRS = glut gle - -MakeSubdirs($(SUBDIRS)) -DependSubdirs($(SUBDIRS)) diff --git a/lib/glut-3.7.6/man/gle/Imakefile b/lib/glut-3.7.6/man/gle/Imakefile deleted file mode 100644 index 465ada5ca..000000000 --- a/lib/glut-3.7.6/man/gle/Imakefile +++ /dev/null @@ -1,39 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1994. */ - -/* This file is freely distributable without licensing fees - and is provided without guarantee or warrantee expressed or - implied. This file is -not- in the public domain. */ - -#include "../../Glut.cf" - -MANDIR = $(LIBMANDIR) -MANSUFFIX = $(LIBMANSUFFIX)gle - -#ifdef SGIArchitecture -/* This ensures that all the GLE man pages get put in a GLE subdirectory. */ -MANPACKAGE = /GLE -#endif - -all: - @echo 'The default rule in GLUT API man page Makefile is a no-op.' - @echo 'Try "make install.man" to build and install man pages.' - -InstallManPageLong(gle,$(MANDIR),gle) -InstallManPageLong(gleExtrusion,$(MANDIR),gleExtrusion) -InstallManPageLong(gleHelicoid,$(MANDIR),gleHelicoid) -InstallManPageLong(gleLathe,XXX,gleLathe) -InstallManPageLong(glePolyCone,$(MANDIR),glePolyCone) -InstallManPageLong(glePolyCylinder,$(MANDIR),glePolyCylinder) -InstallManPageLong(gleScrew,$(MANDIR),gleScrew) -InstallManPageLong(gleSetJoinStyle,$(MANDIR),gleSetJoinStyle) -InstallManPageLong(gleSpiral,$(MANDIR),gleSpiral) -InstallManPageLong(gleSuperExtrusion,$(MANDIR),gleSuperExtrusion) -InstallManPageLong(gleTextureMode,$(MANDIR),gleTextureMode) -InstallManPageLong(gleToroid,$(MANDIR),gleToroid) -InstallManPageLong(gleTwistExtrusion,$(MANDIR),gleTwistExtrusion) - -InstallManPageAliases(gleSetJoinStyle,$(MANDIR),gleGetJoinStyle) -InstallManPageAliases(gle,$(MANDIR),intro) - -DependTarget() diff --git a/lib/glut-3.7.6/man/gle/gle.man b/lib/glut-3.7.6/man/gle/gle.man deleted file mode 100644 index c837ab3fb..000000000 --- a/lib/glut-3.7.6/man/gle/gle.man +++ /dev/null @@ -1,66 +0,0 @@ -.\" -.\" GLE Tubing & Extrusions Library Documentation -.\" -.TH gle 3GLE "3.6" "GLE" "GLE" -.SH NAME -gle - an introduction to the GLE Tubing & Extrusions Library -.SH SYNOPSIS -.nf -.LP -#include -.fi -.SH DESCRIPTION -The GLE Tubing and Extrusion Library is a graphics application -programming interface (API). The library consists of a number of "C" -language subroutines for drawing tubing and extrusions. The library is -distributed in source code form, in a package that includes -documentation, a VRML proposal, Makefiles, and full source code and -header files. It uses the OpenGL (TM) programming API to perform the -actual drawing of the tubing and extrusions. - -A "sweep" or "extrusion" is a 2D contour (polyline) that is swept or -extruded along a 3D path (polyline). For example, sweeping a circle -along a straight line will generate a cylinder. Sweeping a circle -along a circular path will generate a doughnut (torus). - -The library also includes a set of utility routines for drawing some of -the more common extruded shapes: a polycylinder, a polycone, a -generalized torus (circle swept along a helical path), a "helix" -(arbitrary contour swept along a helical path) and a "lathe" (arbitrary -contour swept along a helical path, with torsion used to keep the -contour aligned). - -The most general extrusion supported by this library allows an -arbitrary 2D contour to be swept around an arbitrary 3D path. A set of -normal vectors can be specified to go along with the contour; the -normal vectors determine the appearance of the contour when lighting is -turned on. A set of colors and affine matrices can be specified to go -along with the 3D path. The colors are used to color along the path. -The affine matrices are used to operate on the contour as it is swept -along. If no affine matrices are specified, the contour is extruded -using the mathematical concept of "parallel translation" or "Gaussian -translation". That is, the contour is moved (and drawn) along the -extrusion path in a "straight" manner. If there are affine matrices, -they are applied to the contour at each extrusion segment before the -segment is drawn. - -The affine matrices allow work in a quasi-non-Euclidean space. They -essentially allow the contour to be distorted as it is swept along. The -allow the contour to be rotated, translated and rescaled as it is -drawn. For example, a rescaling will turn a polycylinder into a -poly-cone, since the circle that is being extruded is scaled to a -different size at each extrusion vertex. A rotation allows the contour -to be spun around while it is being extruded, thus for instance -allowing drill-bit type shapes to be drawn. A translation allows the -appearance of shearing in real space; that is, taking a contour and -displacing it, without otherwise bending it. Note that the affines are -2x3 matrices, not 3x4 matrices, since they apply to the 2D contour as -it is being extruded. -.SH WEB SITE -http://linas.org/gle/index.html -.SH SEE ALSO -gleExtrusion, gleHelicoid, gleLathe, glePolyCone, glePolyCylinder, -gleScrew, gleSetJoinStyle, gleSpiral, gleSuperExtrusion, gleTextureMode, -gleToroid, gleTwistExtrusion, gleTwistExtrusion, gleSuperExtrusion -.SH AUTHOR -Linas Vepstas (linas@fc.net) diff --git a/lib/glut-3.7.6/man/gle/gleExtrusion.man b/lib/glut-3.7.6/man/gle/gleExtrusion.man deleted file mode 100644 index e18f59fcb..000000000 --- a/lib/glut-3.7.6/man/gle/gleExtrusion.man +++ /dev/null @@ -1,57 +0,0 @@ -.\" -.\" GLE Tubing & Extrusions Library Documentation -.\" -.TH gleExtrusion 3GLE "3.6" "GLE" "GLE" -.SH NAME -gleExtrusion - Extrude arbitrary 2D contour along arbitrary 3D path. -.SH SYNTAX -.nf -.LP -void gleExtrusion (int ncp, - gleDouble contour[][2], - gleDouble cont_normal[][2], - gleDouble up[3], - int npoints, - gleDouble point_array[][3], - float color_array[][3]); -.fi -.SH ARGUMENTS -.IP \fIncp\fP 1i -number of contour points -.IP \fIcontour\fP 1i -2D contour -.IP \fIcont_normal\fP 1i -2D contour normals -.IP \fIup\fP 1i -up vector for contour -.IP \fInpoints\fP 1i -numpoints in poly-line -.IP \fIpoint_array\fP 1i -polyline vertices -.IP \fIcolor_array\fP 1i -colors at polyline verts -.SH DESCRIPTION - -Extrude arbitrary 2D contour along arbitrary 3D path. The argument -"contour" specifies the 2D contour to be extruded, while the argument -"point_array" specifies the path along which to extrude. The vector -"up" defines the orientation of the contour y-axis in real 3D space. - -Note that neither the very first segment, nor the very last segment are -drawn. The first and last segments serve only to define the angle of -the join at the very ends of the polyline. Thus, to draw one segment, -three must be specified. To draw two segments, four must be specified, -etc. - -The normal array may be NULL. If it is, normal vectors will NOT be -automatically generated, and the object will look terrible when lit. - -The color array may be NULL. If NULL, the current color is used. If not -NULL, the glColor3f() routine is used to set the color; therefore, -specifying the glColorMaterial() subroutine before this primitive can -be used to set diffuse, specular, ambient, etc. colors. - -.SH SEE ALSO -gleTwistExtrusion, gleSuperExtrusion -.SH AUTHOR -Linas Vepstas (linas@fc.net) diff --git a/lib/glut-3.7.6/man/gle/gleHelicoid.man b/lib/glut-3.7.6/man/gle/gleHelicoid.man deleted file mode 100644 index b3c56e48c..000000000 --- a/lib/glut-3.7.6/man/gle/gleHelicoid.man +++ /dev/null @@ -1,48 +0,0 @@ -.\" -.\" GLE Tubing & Extrusions Library Documentation -.\" -.TH gleHelicoid 3GLE "3.6" "GLE" "GLE" -.SH NAME -gleHelicoid - Generalized torus, spiral with circle contour. -.SH SYNTAX -.nf -.LP -void gleHelicoid (gleDouble rToroid, - gleDouble up[3], - gleDouble startRadius, - gleDouble drdTheta, - gleDouble startZ, - gleDouble dzdTheta, - gleDouble startXform[2][3], - gleDouble dXformdTheta[2][3], - gleDouble startTheta, - gleDouble sweepTheta); -.fi -.SH ARGUMENTS -.IP \fIrToroid\fP 1i -circle contour (torus) radius -.IP \fIstartRadius\fP 1i -spiral starts in x-y plane -.IP \fIdrdTheta\fP 1i -change in radius per revolution -.IP \fIstartZ\fP 1i -starting z value -.IP \fIdzdTheta\fP 1i -change in Z per revolution -.IP \fIstartXform\fP 1i -starting contour affine transformation -.IP \fIdXformdTheta\fP 1i -tangent change xform per revolution -.IP \fIstartTheta\fP 1i -start angle in x-y plane -.IP \fIsweepTheta\fP 1i -degrees to spiral around -.SH DESCRIPTION - -Generalized Torus. Similar to gleSpiral, except contour is a circle. -Uses gleSpiral to draw. - -.SH SEE ALSO -gleSpiral, gleToroid -.SH AUTHOR -Linas Vepstas (linas@fc.net) diff --git a/lib/glut-3.7.6/man/gle/gleLathe.man b/lib/glut-3.7.6/man/gle/gleLathe.man deleted file mode 100644 index 34a904540..000000000 --- a/lib/glut-3.7.6/man/gle/gleLathe.man +++ /dev/null @@ -1,62 +0,0 @@ -.\" -.\" GLE Tubing & Extrusions Library Documentation -.\" -.TH gleLathe 3GLE "3.6" "GLE" "GLE" -.SH NAME -gleLathe - Sweep using a Z-axis shear to create an arbitrary contour along a helical path. -.SH SYNTAX -.nf -.LP -void gleLathe (int ncp, - gleDouble contour[][2], - gleDouble cont_normal[][2], - gleDouble up[3], - gleDouble startRadius, /* spiral starts in x-y plane */ - gleDouble drdTheta, /* change in radius per revolution */ - gleDouble startZ, /* starting z value */ - gleDouble dzdTheta, /* change in Z per revolution */ - gleDouble startXform[2][3], /* starting contour affine xform */ - gleDouble dXformdTheta[2][3], /* tangent change xform per revoln */ - gleDouble startTheta, /* start angle in x-y plane */ - gleDouble sweepTheta); /* degrees to spiral around */ -.fi -.SH ARGUMENTS -.IP \fIncp\fP 1i -number of contour points -.IP \fIcontour\fP 1i -2D contour -.IP \fIcont_normal\fP 1i -2D contour normals -.IP \fIup\fP 1i -up vector for contour -.IP \fIstartRadius\fP 1i -spiral starts in x-y plane -.IP \fIdrdTheta\fP 1i -change in radius per revolution -.IP \fIstartZ\fP 1i -starting z value -.IP \fIdzdTheta\fP 1i -change in Z per revolution -.IP \fIstartXform\fP 1i -starting contour affine transformation -.IP \fIdXformdTheta\fP 1i -tangent change xform per revolution -.IP \fIstartTheta\fP 1i -start angle in x-y plane -.IP \fIsweepTheta\fP 1i -degrees to spiral around -.SH DESCRIPTION - -Sweep an arbitrary contour along a helical path. The sweep will be -performed as a shear along the z-axis, so that the orientation of the -contour is displaced, rather than translated, as the contour is swept. - -The axis of the helix lies along the modeling coordinate z-axis. - -An affine transform can be applied as the contour is swept. For most -ordinary usage, the affines should be given as NULL. - -.SH SEE ALSO -gleSpiral -.SH AUTHOR -Linas Vepstas (linas@fc.net) diff --git a/lib/glut-3.7.6/man/gle/glePolyCone.man b/lib/glut-3.7.6/man/gle/glePolyCone.man deleted file mode 100644 index 035584b25..000000000 --- a/lib/glut-3.7.6/man/gle/glePolyCone.man +++ /dev/null @@ -1,42 +0,0 @@ -.\" -.\" GLE Tubing & Extrusions Library Documentation -.\" -.TH glePolyCone 3GLE "3.6" "GLE" "GLE" -.SH NAME -glePolyCone - Draw polycone, specified as a polyline with radii. -.SH SYNTAX -.nf -.LP -void glePolyCone(int npoints, - gleDouble point_array[][3], - float color_array[][3], - gleDouble radius_array[]); -.fi -.SH ARGUMENTS -.IP \fInpoints\fP 1i -numpoints in poly-line -.IP \fIpoint_array\fP 1i -polyline vertices -.IP \fIcolor_array\fP 1i -colors at polyline verts -.IP \fIradius_array\fP 1i -cone radii at polyline -.SH DESCRIPTION - -Draw polycone, specified as a polyline with radii. - -Note that neither the very first segment, nor the very last segment are -drawn. The first and last segments serve only to define the angle of -the join at the very ends of the polyline. Thus, to draw one segment, -three must be specified. To draw two segments, four must be specified, -etc. - -The color array may be NULL. If NULL, the current color is used. If not -NULL, the glColor3f() routine is used to set the color; therefore, -specifying the glColorMaterial() subroutine before this primitive can -be used to set diffuse, specular, ambient, etc. colors. - -.SH SEE ALSO -glePolyCylinder -.SH AUTHOR -Linas Vepstas (linas@fc.net) diff --git a/lib/glut-3.7.6/man/gle/glePolyCylinder.man b/lib/glut-3.7.6/man/gle/glePolyCylinder.man deleted file mode 100644 index d7d7dff4a..000000000 --- a/lib/glut-3.7.6/man/gle/glePolyCylinder.man +++ /dev/null @@ -1,42 +0,0 @@ -.\" -.\" GLE Tubing & Extrusions Library Documentation -.\" -.TH glePolyCylinder 3GLE "3.6" "GLE" "GLE" -.SH NAME -glePolyCylinder - Draw polycylinder, specified as a polyline. -.SH SYNTAX -.nf -.LP -void glePolyCylinder(int npoints, - gleDouble point_array[][3], - float color_array[][3], - gleDouble radius); -.fi -.SH ARGUMENTS -.IP \fInpoints\fP 1i -numpoints in poly-line -.IP \fIpoint_array\fP 1i -polyline vertices -.IP \fIcolor_array\fP 1i -colors at polyline verts -.IP \fIradius\fP 1i -cylinder radius -.SH DESCRIPTION - -Draw polycylinder, specified as a polyline. - -Note that neither the very first segment, nor the very last segment are -drawn. The first and last segments serve only to define the angle of -the join at the very ends of the polyline. Thus, to draw one segment, -three must be specified. To draw two segments, four must be specified, -etc. - -The color array may be NULL. If NULL, the current color is used. If not -NULL, the glColor3f() routine is used to set the color; therefore, -specifying the glColorMaterial() subroutine before this primitive can -be used to set diffuse, specular, ambient, etc. colors. - -.SH SEE ALSO -glePolyCone -.SH AUTHOR -Linas Vepstas (linas@fc.net) diff --git a/lib/glut-3.7.6/man/gle/gleScrew.man b/lib/glut-3.7.6/man/gle/gleScrew.man deleted file mode 100644 index bc65f58b8..000000000 --- a/lib/glut-3.7.6/man/gle/gleScrew.man +++ /dev/null @@ -1,43 +0,0 @@ -.\" -.\" GLE Tubing & Extrusions Library Documentation -.\" -.TH gleScrew 3GLE "3.6" "GLE" "GLE" -.SH NAME -gleScrew - Draws screw-type shapes. -.SH SYNTAX -.nf -.LP -void gleScrew (int ncp, - gleDouble contour[][2], - gleDouble cont_normal[][2], - gleDouble up[3], - gleDouble startz, - gleDouble endz, - gleDouble twist); -.fi -.SH ARGUMENTS -.IP \fIncp\fP 1i -number of contour points -.IP \fIcontour\fP 1i -2D contour -.IP \fIcont_normal\fP 1i -2D contour normals -.IP \fIup\fP 1i -up vector for contour -.IP \fIstartx\fP 1i -start of segment -.IP \fIendz\fP 1i -end of segment -.IP \fItwist\fP 1i -number of rotations -.SH DESCRIPTION - -Draws screw-type shapes. Takes a contour, and extrudes it along the -z-axis, from a start z value of startz to an end z-value of endz. -During the extrusion, it will spin the contour along the contour origin -by twist degrees. - -.SH SEE ALSO -gleExtrusion -.SH AUTHOR -Linas Vepstas (linas@fc.net) diff --git a/lib/glut-3.7.6/man/gle/gleSetJoinStyle.man b/lib/glut-3.7.6/man/gle/gleSetJoinStyle.man deleted file mode 100644 index 726dddf2a..000000000 --- a/lib/glut-3.7.6/man/gle/gleSetJoinStyle.man +++ /dev/null @@ -1,88 +0,0 @@ -.\" -.\" GLE Tubing & Extrusions Library Documentation -.\" -.TH gleSetJoinStyle 3GLE "3.6" "GLE" "GLE" -.SH NAME -gleSetJoinStyle, gleGetJoinStyle - Query and Set the GLE join style flags. -.SH SYNTAX -.nf -.LP -void gleSetJoinStyle (int style); -int gleGetJoinStyle (void); -.fi -.SH ARGUMENTS -.IP \fIstyle\fP 1i -bitwise OR of flags -.SH DESCRIPTION - -Query and set the GLE join style flags. This word is a bitwise OR of -the flags described below. - -The initial join style is TUBE_JN_ANGLE | TUBE_JN_CAP | TUBE_NORM_FACET. - -.B "Extrusion Join Styles" -.IP \fBTUBE_JN_RAW\fP -Draw polycylinders, polycones, extrusions, etc. with no special -treatment of the extrusion ends. -.IP \fBTUBE_JN_ANGLE\fP -Draw polycylinders, polycones, extrusions, etc. by extending the -different segments until they butt into each other with an -angular style. -.IP \fBTUBE_JN_CUT\fP -Draw polycylinders, polycones, extrusions, etc. by joining together the -different segments and slicing off the joint at half the angle between -the segments. A cap is drawn. Note that the slicing plane runs through -the origin of the contour coordinate system. Thus, the amount of slice -can be varied by offsetting the contour with respect to the origin. - -Note that when two segments meet at a shallow angle, the cut join style -will potentially shave off a whole lot of the contour, leading to -"surprising" results... -.IP \fBTUBE_JN_ROUND\fP -Joints will be rounded. Strictly speaking, the part of the joint above -the origin will be rounded. The part below the origin will come -together in an angular join. -.IP \fBTUBE_JN_MASK\fP -Mask bits. This can be used to mask off the bit field that defines the -join style. - -.B "End Caps" -.IP \fBTUBE_JN_CAP\fP -If this is set, a cap will be drawn at each end of the extrusion. - -.B "Automatic Normal Vector Generation" -.IP \fBTUBE_NORM_FACET\fP -A normal vector is generated per facet. Useful for having an extrusion -have a "faceted" look, such as when extruding a square -- each of the -four sides of the square will look flat. -.IP \fBTUBE_NORM_EDGE\fP -Normal vectors are generated so that they lie along edges. Useful for -making angular things look rounded under lighting. For example, when -extruding a hexagon and using this flag, the hexagonal extrusion will -look (more like a) smooth perfectly round cylinder, rather than a -six-sided shape. -.IP \fBTUBE_NORM_PATH_EDGE\fP -Normal vectors are generated so that they both lie on edges, and so -that they interpolate between neighboring segments. Useful for drawing -"spaghetti" -- extrusions that follow a spline path. Because the -spline path must be "tessellated" into small straight segments, each -segment will look straight unless this flag is set. -.IP \fBTUBE_NORM_MASK\fP -A mask useful for masking out the "norm" bits. - -.B "Closed or Open Contours" -.IP \fBTUBE_CONTOUR_CLOSED\fP -If this bit is set, the contour will be treated as a "closed" contour, -where the last point connects back up to the first. It is useful to set -this flag when drawing closed shapes (such as extruded cylinders, -star-shapes, I-Beams, etc. When drawing open extrusions (e.g. -corrugated sheet metal), you DON'T want to set this flag. - -.SH BUGS - -Multiple threads using GLE share a single global join style. - -.SH SEE ALSO -gleExtrusion, gleTextureMode -.SH AUTHOR -Linas Vepstas (linas@fc.net) diff --git a/lib/glut-3.7.6/man/gle/gleSpiral.man b/lib/glut-3.7.6/man/gle/gleSpiral.man deleted file mode 100644 index 8f60c3f54..000000000 --- a/lib/glut-3.7.6/man/gle/gleSpiral.man +++ /dev/null @@ -1,110 +0,0 @@ -.\" -.\" GLE Tubing & Extrusions Library Documentation -.\" -.TH gleSpiral 3GLE "3.6" "GLE" "GLE" -.SH NAME -gleSpiral - Sweep an arbitrary contour along a helical path. -.SH SYNTAX -.nf -.LP -void gleSpiral (int ncp, - gleDouble contour[][2], - gleDouble cont_normal[][2], - gleDouble up[3], - gleDouble startRadius, /* spiral starts in x-y plane */ - gleDouble drdTheta, /* change in radius per revolution */ - gleDouble startZ, /* starting z value */ - gleDouble dzdTheta, /* change in Z per revolution */ - gleDouble startXform[2][3], /* starting contour affine xform */ - gleDouble dXformdTheta[2][3], /* tangent change xform per revoln */ - gleDouble startTheta, /* start angle in x-y plane */ - gleDouble sweepTheta); /* degrees to spiral around */ -.fi -.SH ARGUMENTS -.IP \fIncp\fP 1i -number of contour points -.IP \fIcontour\fP 1i -2D contour -.IP \fIcont_normal\fP 1i -2D contour normals -.IP \fIup\fP 1i -up vector for contour -.IP \fIstartRadius\fP 1i -spiral starts in x-y plane -.IP \fIdrdTheta\fP 1i -change in radius per revolution -.IP \fIstartZ\fP 1i -starting z value -.IP \fIdzdTheta\fP 1i -change in Z per revolution -.IP \fIstartXform\fP 1i -starting contour affine transformation -.IP \fIdXformdTheta\fP 1i -tangent change xform per revolution -.IP \fIstartTheta\fP 1i -start angle in x-y plane -.IP \fIsweepTheta\fP 1i -degrees to spiral around -.SH DESCRIPTION - -Sweep an arbitrary contour along a helical path. - -The axis of the helix lies along the modeling coordinate z-axis. - -An affine transform can be applied as the contour is swept. For most -ordinary usage, the affines should be given as NULL. - -The "startXform[][]" is an affine matrix applied to the contour to -deform the contour. Thus, "startXform" of the form - - | cos sin 0 | - | -sin cos 0 | - -will rotate the contour (in the plane of the contour), while - - | 1 0 tx | - | 0 1 ty | - -will translate the contour, and - - | sx 0 0 | - | 0 sy 0 | - -scales along the two axes of the contour. In particular, note that - - | 1 0 0 | - | 0 1 0 | - -is the identity matrix. - -The "dXformdTheta[][]" is a differential affine matrix that is -integrated while the contour is extruded. Note that this affine matrix -lives in the tangent space, and so it should have the form of a -generator. Thus, dx/dt's of the form - - | 0 r 0 | - | -r 0 0 | - -rotate the the contour as it is extruded (r == 0 implies no rotation, r -== 2*PI implies that the contour is rotated once, etc.), while - - | 0 0 tx | - | 0 0 ty | - -translates the contour, and - - | sx 0 0 | - | 0 sy 0 | - -scales it. In particular, note that - - | 0 0 0 | - | 0 0 0 | - -is the identity matrix -- i.e. the derivatives are zero, and therefore -the integral is a constant. - -.SH SEE ALSO -gleLathe -.SH AUTHOR -Linas Vepstas (linas@fc.net) diff --git a/lib/glut-3.7.6/man/gle/gleSuperExtrusion.man b/lib/glut-3.7.6/man/gle/gleSuperExtrusion.man deleted file mode 100644 index b63a84b12..000000000 --- a/lib/glut-3.7.6/man/gle/gleSuperExtrusion.man +++ /dev/null @@ -1,64 +0,0 @@ -.\" -.\" GLE Tubing & Extrusions Library Documentation -.\" -.TH gleSuperExtrusion 3GLE "3.6" "GLE" "GLE" -.SH NAME -gleSuperExtrusion - Extrude arbitrary 2D contour along arbitrary 3D path, specifying local affine transformations. -.SH SYNTAX -.nf -.LP -void gleSuperExtrusion (int ncp, - gleDouble contour[][2], - gleDouble cont_normal[][2], - gleDouble up[3], - int npoints, - gleDouble point_array[][3], - float color_array[][3], - gleDouble xform_array[][2][3]); -.fi -.SH ARGUMENTS -.IP \fIncp\fP 1i -number of contour points -.IP \fIcontour\fP 1i -2D contour -.IP \fIcont_normal\fP 1i -2D contour normals -.IP \fIup\fP 1i -up vector for contour -.IP \fInpoints\fP 1i -numpoints in poly-line -.IP \fIpoint_array\fP 1i -polyline vertices -.IP \fIcolor_array\fP 1i -colors at polyline verts -.IP \fIxform_array\fP 1i -2D contour affine transforms -.SH DESCRIPTION - -Extrude arbitrary 2D contour along arbitrary 3D path, specifying local -affine transformations. As the contour is extruded, the affine will be -applied to the points in the contour. - -The argument "contour" specifies the 2D contour to be extruded, while -the argument "point_array" specifies the path along which to extrude. -The vector "up" defines the orientation of the contour y-axis in real -3D space. - -Note that neither the very first segment, nor the very last segment are -drawn. The first and last segments serve only to define the angle of -the join at the very ends of the polyline. Thus, to draw one segment, -three must be specified. To draw two segments, four must be specified, -etc. - -The normal array may be NULL. If it is, normal vectors will NOT be -automatically generated, and the object will look terrible when lit. - -The color array may be NULL. If NULL, the current color is used. If not -NULL, the glColor3f() routine is used to set the color; therefore, -specifying the glColorMaterial() subroutine before this primitive can -be used to set diffuse, specular, ambient, etc. colors. - -.SH SEE ALSO -gleExtrusion, gleTwistExtrusion -.SH AUTHOR -Linas Vepstas (linas@fc.net) diff --git a/lib/glut-3.7.6/man/gle/gleTextureMode.man b/lib/glut-3.7.6/man/gle/gleTextureMode.man deleted file mode 100644 index 2a3bf3ff2..000000000 --- a/lib/glut-3.7.6/man/gle/gleTextureMode.man +++ /dev/null @@ -1,160 +0,0 @@ -.\" -.\" GLE Tubing & Extrusions Library Documentation -.\" -.TH gleTextureMode 3GLE "3.6" "GLE" "GLE" -.SH NAME -gleTextureMode - set the type of GLE automatic texture coordinate generation. -.SH SYNTAX -.nf -.LP -void gleTextureMode (int mode); -.fi -.SH ARGUMENTS -.IP \fImode\fP 1i -bitwise OR of GLE texture mode flags -.SH DESCRIPTION - -In addition to the default glTexGen modes that are supplied by OpenGL, -the tubing library also contains some of its own automatic texture -coordinate generation routines. In addition, user-defined texture coord -generation routines can be supplied. - -To use texture mapping with the extrusion library, one must remember to "do the obvious": -.IP -Enable texture mapping through OpenGL -.IP -Define and load (glTexImage2D/glBindTexture) a texture -.IP -If using the routine below, then disable glTexgGen -.LP -gleTextureMode can be used to set the type of automatic texture -coordinate generation to be used. The argument should be a bitwise-OR -of any of the following flags: -.IP \fBGLE_TEXTURE_ENABLE\fP -If this bit is set, then texturing is enabled. If this bit is NOT set, -then automatic texture coordinate generation is disabled. -.LP -The way in which the automatic texture coordinate generation occurs is -determined by one of the following flags. One and only one of these -should be selected at a time. These tokens are enumerants, not -bit-flags. -.IP \fBGLE_TEXTURE_VERTEX_FLAT\fP -Uses the vertexes "x" coordinate as the texture "u" coordinate, and the -accumulated segment length as the "v" coordinate. -.IP \fBGLE_TEXTURE_NORMAL_FLAT\fP -Uses the normal vector's "x" coordinate as the texture "u" coordinate, -and the accumulated segment length as the "v" coordinate. -.IP \fBGLE_TEXTURE_VERTEX_CYL\fP -Uses u = phi/(2*pi) = arctan (vy/vx)/(2*pi) as the texture "u" -coordinate, and the accumulated segment length as the "v" coordinate. -In the above equation, "vx" and "vy" stand for the vertex's x and y -coordinates. -.IP \fBGLE_TEXTURE_NORMAL_CYL\fP -Uses u = phi/(2*pi) = arctan (ny/nx)/(2*pi) as the texture "u" -coordinate, and the accumulated segment length as the "v" coordinate. -In the above equation, "nx" and "ny" stand for the normal's x and y -coordinates. -.IP \fBGLE_TEXTURE_VERTEX_SPH\fP -Uses u = phi/(2*pi) = arctan (vy/vx)/(2*pi) as the texture "u" -coordinate, and v = theta/pi = (1.0 - arccos(vz))/pi as the texture "v" -coordinate. In the above equation, "vx","vy" and "vz" stand for the -vertex's x, y and z coordinates. -.IP \fBGLE_TEXTURE_NORMAL_SPH\fP -Uses u = phi/(2*pi) = arctan (ny/nx)/(2*pi) as the texture "u" -coordinate, and v = theta/pi = (1.0 - arccos(nz))/pi as the texture "v" -coordinate. In the above equation, "nx","ny" and "nz" stand for the -normal's x, y and z coordinates. -.IP \fBGLE_TEXTURE_VERTEX_MODEL_FLAT\fP -.IP \fBGLE_TEXTURE_NORMAL_MODEL_FLAT\fP -.IP \fBGLE_TEXTURE_VERTEX_MODEL_CYL\fP -.IP \fBGLE_TEXTURE_NORMAL_MODEL_CYL\fP -.IP \fBGLE_TEXTURE_VERTEX_MODEL_SPH\fP -.IP \fBGLE_TEXTURE_NORMAL_MODEL_SPH\fP -These define texture mapping modes that are very similar to those -described above, except that the untransformed vertices and/or normals -are used. As a result, textures tends to stick to the extrusion -according to the extrusions local surface coordinates rather than -according to real-space coordinates. This will in general provide the -correct style of texture mapping when affine transforms are being -applied to the contour, since the coordinates used are those prior to -the affine transform. -.SH OPERATION -To best understand how to use the above functions, it is best to -understand how the tubing is actually drawn. Let us start by defining -some terms. The tubing library "extrudes" a "contour" along a "path". -The contour is a 2D polyline. The path is a 3D polyline. We use the -word "segment" to refer to a straight-line segment of the path -polyline. We also interchangeably use the word "segment" to stand for -the section of the extrusion that lies along a path segment. - -The tubing library draws segments one at a time. It uses glPushmatrix() -and glPopmatrix() to orient each segment along the negative z-axis. The -segment starts at z=0 and ends at some negative z-value (equal to the -length of the segment). The segment is then drawn by calling -glVertex3f() (and glNormal3F()) by drawing the 2D contour at z=0 and -again at z=-len. (Of course, if the join style is one of the fancy -ones, then the end-points are trimmed in a variety of ways, and do not -land exactly on z=0, or z=-len, but they do come close). Note that -glBegin() and glEnd() are called around each segment. (Note also that -additional glBegins/Ends may be called to draw end-caps or filleting -triangles for the more complex join styles.) - -The obvious way to automatically generate textures is to warp the -glVertex() and glNormal() functions, and compute texture coordinates -based on the 3-space vertex and normal coordinates. This is essentially -what the tubing code does, except that it passes some extra parameters. -The glBegin calls are wrapped, and the integer segment number and the -floating-point length of the segment are passed in. By knowing the -segment number, and the segment length, the texture coordinates can be -adjusted. Knowing the length allows the length to be accumulated, so -that a texture is applied lengthwise along the extrusion. It is this -accumulated length that is used in the FLAT and CYL mapping modes. - -For each vertex, not only are the vertex x,y,z coordinates available, -but so is a contour vertex counter indicating which contour vertex this -corresponds to. There is also a flag indicating whether the vertex -corresponds to a front or back vertex (i.e. a z=0 or z=-len vertex). -Again, this info can be used to avoid confusion when drawing the more -complex join styles. -.SH HINTS -Here are a few hints, tips, and techniques: -.IP o -Hint: Confused? RUN THE DEMOS! The best way to understand what all the -different texture modes are doing is to see them in action. -.IP o -Hint: The texture matrix can be used to your advantage! That is, you -can use glMatrixMode(GL_TEXTURE) to control how textures are mapped to -the surface. In particular, you may/will want to use it to to rescale -the V coordinate. -.IP o -The origin of the contour will in general change the vertex x's and -y's, thus changing the texture coordinates. -.IP o -The contour "up" vector will NOT influence the texture coordinates. -.IP o -For the FLAT and CYL modes, the accumulated length really is the -accumulated length of the segments in modeling coordinates. Unless the -extrusion is very small, this length will probably be much larger than -1.0, and so the resulting texture coordinate will wrap. You will -generally want to rescale the "V" coordinate to make the texture map -fit. -.IP o -If the texture is "swimming" around on the surface in an undesired way, -try using the "MODEL" version of the texture generation flag. -.IP o -Typically, you will NOT want to use the "SPH" versions of the texture -generation engine unless you really, really have an extrusion for which -spherical coordinates are appropriate. Most uses of extrusions are best -handled with the "FLAT" and "CYL" generation methods. -.IP o -User-defined texture generation callbacks are not currently -implemented, but these should be very, very easy to hack in as desired. -It should be easy to let your imagination run wild in here. Look at -texgen.c -- what needs to be done should be obvious, I hope. When in -doubt, experiment. -.SH BUGS -Multiple threads using GLE share a single texture mode. -.SH SEE ALSO -gleExtrusion, gleSetJoinStyle -.SH AUTHOR -Linas Vepstas (linas@fc.net) diff --git a/lib/glut-3.7.6/man/gle/gleToroid.man b/lib/glut-3.7.6/man/gle/gleToroid.man deleted file mode 100644 index ac2e9fd96..000000000 --- a/lib/glut-3.7.6/man/gle/gleToroid.man +++ /dev/null @@ -1,48 +0,0 @@ -.\" -.\" GLE Tubing & Extrusions Library Documentation -.\" -.TH gleToroid 3GLE "3.6" "GLE" "GLE" -.SH NAME -gleToroid - Generalized torus, lathe with circle contour. -.SH SYNTAX -.nf -.LP -void gleToroid (gleDouble rToroid, - gleDouble up[3], - gleDouble startRadius, - gleDouble drdTheta, - gleDouble startZ, - gleDouble dzdTheta, - gleDouble startXform[2][3], - gleDouble dXformdTheta[2][3], - gleDouble startTheta, - gleDouble sweepTheta); -.fi -.SH ARGUMENTS -.IP \fIrToroid\fP 1i -circle contour (torus) radius -.IP \fIstartRadius\fP 1i -spiral starts in x-y plane -.IP \fIdrdTheta\fP 1i -change in radius per revolution -.IP \fIstartZ\fP 1i -starting z value -.IP \fIdzdTheta\fP 1i -change in Z per revolution -.IP \fIstartXform\fP 1i -starting contour affine transformation -.IP \fIdXformdTheta\fP 1i -tangent change xform per revolution -.IP \fIstartTheta\fP 1i -start angle in x-y plane -.IP \fIsweepTheta\fP 1i -degrees to spiral around -.SH DESCRIPTION - -Generalized Torus. Similar to gleLathe, except contour is a circle. -Uses gleLathe to draw. - -.SH SEE ALSO -gleSpiral, gleHelicoid -.SH AUTHOR -Linas Vepstas (linas@fc.net) diff --git a/lib/glut-3.7.6/man/gle/gleTwistExtrusion.man b/lib/glut-3.7.6/man/gle/gleTwistExtrusion.man deleted file mode 100644 index 2f791df51..000000000 --- a/lib/glut-3.7.6/man/gle/gleTwistExtrusion.man +++ /dev/null @@ -1,66 +0,0 @@ -.\" -.\" GLE Tubing & Extrusions Library Documentation -.\" -.TH gleTwistExtrusion 3GLE "3.6" "GLE" "GLE" -.SH NAME -gleTwistExtrusion - Extrude arbitrary 2D contour along arbitrary 3D path, specifying local rotations (twists). -.SH SYNTAX -.nf -.LP -void gleTwistExtrusion (int ncp, - gleDouble contour[][2], - gleDouble cont_normal[][2], - gleDouble up[3], - int npoints, - gleDouble point_array[][3], - float color_array[][3], - gleDouble twist_array[]); -.fi -.SH ARGUMENTS -.IP \fIncp\fP 1i -number of contour points -.IP \fIcontour\fP 1i -2D contour -.IP \fIcont_normal\fP 1i -2D contour normals -.IP \fIup\fP 1i -up vector for contour -.IP \fInpoints\fP 1i -numpoints in poly-line -.IP \fIpoint_array\fP 1i -polyline vertices -.IP \fIcolor_array\fP 1i -colors at polyline verts -.IP \fItwist_array\fP 1i -contour twists (in degrees) -.SH DESCRIPTION - -Extrude arbitrary 2D contour along arbitrary 3D path, specifying local -rotations (twists). As the contour is extruded, it will be twisted by -the amount specified in the array "twist_array". The angles are -measured in degrees, and the rotation is about the origin of the -contour coordinate system. - -The argument "contour" specifies the 2D contour to be extruded, while -the argument "point_array" specifies the path along which to extrude. -The vector "up" defines the orientation of the contour y-axis in real -3D space. - -Note that neither the very first segment, nor the very last segment are -drawn. The first and last segments serve only to define the angle of -the join at the very ends of the polyline. Thus, to draw one segment, -three must be specified. To draw two segments, four must be specified, -etc. - -The normal array may be NULL. If it is, normal vectors will NOT be -automatically generated, and the object will look terrible when lit. - -The color array may be NULL. If NULL, the current color is used. If not -NULL, the glColor3f() routine is used to set the color; therefore, -specifying the glColorMaterial() subroutine before this primitive can -be used to set diffuse, specular, ambient, etc. colors. - -.SH SEE ALSO -gleExtrusion, gleSuperExtrusion -.SH AUTHOR -Linas Vepstas (linas@fc.net) diff --git a/lib/glut-3.7.6/man/glut/Imakefile b/lib/glut-3.7.6/man/glut/Imakefile deleted file mode 100644 index c61303f50..000000000 --- a/lib/glut-3.7.6/man/glut/Imakefile +++ /dev/null @@ -1,132 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1994. */ - -/* This file is freely distributable without licensing fees - and is provided without guarantee or warrantee expressed or - implied. This file is -not- in the public domain. */ - -#include "../../Glut.cf" - -MANDIR = $(LIBMANDIR) -MANSUFFIX = $(LIBMANSUFFIX)glut - -#ifdef SGIArchitecture -/* This ensurs that all the GLUT man pages get put in a GLUT subdirectory. */ -MANPACKAGE = /GLUT -#endif - -all: - @echo 'The default rule in GLUT API man page Makefile is a no-op.' - @echo 'Try "make install.man" to build and install man pages.' - -InstallManPageLong(glutAddMenuEntry,$(MANDIR),glutAddMenuEntry) -InstallManPageLong(glutAddSubMenu,$(MANDIR),glutAddSubMenu) -InstallManPageLong(glutAttachMenu,$(MANDIR),glutAttachMenu) -InstallManPageLong(glutBitmapCharacter,$(MANDIR),glutBitmapCharacter) -InstallManPageLong(glutBitmapWidth,$(MANDIR),glutBitmapWidth) -InstallManPageLong(glutButtonBoxFunc,$(MANDIR),glutButtonBoxFunc) -InstallManPageLong(glutChangeToMenuEntry,$(MANDIR),glutChangeToMenuEntry) -InstallManPageLong(glutChangeToSubMenu,$(MANDIR),glutChangeToSubMenu) -InstallManPageLong(glutCopyColormap,$(MANDIR),glutCopyColormap) -InstallManPageLong(glutCreateMenu,$(MANDIR),glutCreateMenu) -InstallManPageLong(glutCreateSubWindow,$(MANDIR),glutCreateSubWindow) -InstallManPageLong(glutCreateWindow,$(MANDIR),glutCreateWindow) -InstallManPageLong(glutDestroyMenu,$(MANDIR),glutDestroyMenu) -InstallManPageLong(glutDestroyWindow,$(MANDIR),glutDestroyWindow) -InstallManPageLong(glutDeviceGet,$(MANDIR),glutDeviceGet) -InstallManPageLong(glutDialsFunc,$(MANDIR),glutDialsFunc) -InstallManPageLong(glutDisplayFunc,$(MANDIR),glutDisplayFunc) -InstallManPageLong(glutEnterGameMode,$(MANDIR),glutEnterGameMode) -InstallManPageLong(glutEntryFunc,$(MANDIR),glutEntryFunc) -InstallManPageLong(glutEstablishOverlay,$(MANDIR),glutEstablishOverlay) -InstallManPageLong(glutExtensionSupported,$(MANDIR),glutExtensionSupported) -InstallManPageLong(glutForceJoystickFunc,$(MANDIR),glutForceJoystickFunc) -InstallManPageLong(glutFullScreen,$(MANDIR),glutFullScreen) -InstallManPageLong(glutGameModeGet,$(MANDIR),glutGameModeGet) -InstallManPageLong(glutGameModeString,$(MANDIR),glutGameModeString) -InstallManPageLong(glutGet,$(MANDIR),glutGet) -InstallManPageLong(glutGetColor,$(MANDIR),glutGetColor) -InstallManPageLong(glutGetModifiers,$(MANDIR),glutGetModifiers) -InstallManPageLong(glutIdleFunc,$(MANDIR),glutIdleFunc) -InstallManPageLong(glutIgnoreKeyRepeat,$(MANDIR),glutIgnoreKeyRepeat) -InstallManPageLong(glutInit,$(MANDIR),glutInit) -InstallManPageLong(glutInitDisplayMode,$(MANDIR),glutInitDisplayMode) -InstallManPageLong(glutInitDisplayString,$(MANDIR),glutInitDisplayString) -InstallManPageLong(glutInitWindowPosition,$(MANDIR),glutInitWindowPosition) -InstallManPageLong(glutJoystickFunc,$(MANDIR),glutJoystickFunc) -InstallManPageLong(glutKeyboardFunc,$(MANDIR),glutKeyboardFunc) -InstallManPageLong(glutKeyboardUpFunc,$(MANDIR),glutKeyboardUpFunc) -InstallManPageLong(glutLayerGet,$(MANDIR),glutLayerGet) -InstallManPageLong(glutMainLoop,$(MANDIR),glutMainLoop) -InstallManPageLong(glutMenuStatusFunc,$(MANDIR),glutMenuStatusFunc) -InstallManPageLong(glutMotionFunc,$(MANDIR),glutMotionFunc) -InstallManPageLong(glutMouseFunc,$(MANDIR),glutMouseFunc) -InstallManPageLong(glutOverlayDisplayFunc,$(MANDIR),glutOverlayDisplayFunc) -InstallManPageLong(glutPopWindow,$(MANDIR),glutPopWindow) -InstallManPageLong(glutPositionWindow,$(MANDIR),glutPositionWindow) -InstallManPageLong(glutPostOverlayRedisplay,$(MANDIR),glutPostOverlayRedisplay) -InstallManPageLong(glutPostRedisplay,$(MANDIR),glutPostRedisplay) -InstallManPageLong(glutRemoveMenuItem,$(MANDIR),glutRemoveMenuItem) -InstallManPageLong(glutRemoveOverlay,$(MANDIR),glutRemoveOverlay) -InstallManPageLong(glutReportErrors,$(MANDIR),glutReportErrors) -InstallManPageLong(glutReshapeFunc,$(MANDIR),glutReshapeFunc) -InstallManPageLong(glutReshapeWindow,$(MANDIR),glutReshapeWindow) -InstallManPageLong(glutSetColor,$(MANDIR),glutSetColor) -InstallManPageLong(glutSetCursor,$(MANDIR),glutSetCursor) -InstallManPageLong(glutSetKeyRepeat,$(MANDIR),glutSetKeyRepeat) -InstallManPageLong(glutSetMenu,$(MANDIR),glutSetMenu) -InstallManPageLong(glutSetWindow,$(MANDIR),glutSetWindow) -InstallManPageLong(glutSetWindowTitle,$(MANDIR),glutSetWindowTitle) -InstallManPageLong(glutShowOverlay,$(MANDIR),glutShowOverlay) -InstallManPageLong(glutShowWindow,$(MANDIR),glutShowWindow) -InstallManPageLong(glutSolidCone,$(MANDIR),glutSolidCone) -InstallManPageLong(glutSolidCube,$(MANDIR),glutSolidCube) -InstallManPageLong(glutSolidDodecahedron,$(MANDIR),glutSolidDodecahedron) -InstallManPageLong(glutSolidIcosahedron,$(MANDIR),glutSolidIcosahedron) -InstallManPageLong(glutSolidOctahedron,$(MANDIR),glutSolidOctahedron) -InstallManPageLong(glutSolidSphere,$(MANDIR),glutSolidSphere) -InstallManPageLong(glutSolidTeapot,$(MANDIR),glutSolidTeapot) -InstallManPageLong(glutSolidTetrahedron,$(MANDIR),glutSolidTetrahedron) -InstallManPageLong(glutSolidTorus,$(MANDIR),glutSolidTorus) -InstallManPageLong(glutSpaceballButtonFunc,$(MANDIR),glutSpaceballButtonFunc) -InstallManPageLong(glutSpaceballMotionFunc,$(MANDIR),glutSpaceballMotionFunc) -InstallManPageLong(glutSpaceballRotateFunc,$(MANDIR),glutSpaceballRotateFunc) -InstallManPageLong(glutSpecialFunc,$(MANDIR),glutSpecialFunc) -InstallManPageLong(glutSpecialUpFunc,$(MANDIR),glutSpecialUpFunc) -InstallManPageLong(glutStrokeCharacter,$(MANDIR),glutStrokeCharacter) -InstallManPageLong(glutStrokeWidth,$(MANDIR),glutStrokeWidth) -InstallManPageLong(glutSwapBuffers,$(MANDIR),glutSwapBuffers) -InstallManPageLong(glutTabletButtonFunc,$(MANDIR),glutTabletButtonFunc) -InstallManPageLong(glutTabletMotionFunc,$(MANDIR),glutTabletMotionFunc) -InstallManPageLong(glutTimerFunc,$(MANDIR),glutTimerFunc) -InstallManPageLong(glutUseLayer,$(MANDIR),glutUseLayer) -InstallManPageLong(glutVisibilityFunc,$(MANDIR),glutVisibilityFunc) -InstallManPageLong(glutWarpPointer,$(MANDIR),glutWarpPointer) -InstallManPageLong(glut,$(MANDIR),glut) - -InstallManPageAliases(glutSolidCone,$(MANDIR),glutWireCone) -InstallManPageAliases(glutSolidCube,$(MANDIR),glutWireCube) -InstallManPageAliases(glutSolidDodecahedron,$(MANDIR),glutWireDodecahedron) -InstallManPageAliases(glutSolidIcosahedron,$(MANDIR),glutWireIcosahedron) -InstallManPageAliases(glutSolidOctahedron,$(MANDIR),glutWireOctahedron) -InstallManPageAliases(glutSolidSphere,$(MANDIR),glutWireSphere) -InstallManPageAliases(glutSolidTeapot,$(MANDIR),glutWireTeapot) -InstallManPageAliases(glutSolidTetrahedron,$(MANDIR),glutWireTetrahedron) -InstallManPageAliases(glutSolidTorus,$(MANDIR),glutWireTorus) - -InstallManPageAliases(glutSetWindow,$(MANDIR),glutGetWindow) -InstallManPageAliases(glutPopWindow,$(MANDIR),glutPushWindow) -InstallManPageAliases(glutShowWindow,$(MANDIR),glutHideWindow glutIconifyWindow) -InstallManPageAliases(glutSetWindowTitle,$(MANDIR),glutSetIconTitle) -InstallManPageAliases(glutShowOverlay,$(MANDIR),glutHideOverlay) -InstallManPageAliases(glutSetMenu,$(MANDIR),glutGetMenu) -InstallManPageAliases(glutAttachMenu,$(MANDIR),glutDetachMenu) -InstallManPageAliases(glutMotionFunc,$(MANDIR),glutPassiveMotionFunc) -InstallManPageAliases(glut,$(MANDIR),intro) - -InstallManPageAliases(glutBitmapWidth,$(MANDIR),glutBitmapLength) -InstallManPageAliases(glutStrokeWidth,$(MANDIR),glutStrokeLength) - -InstallManPageAliases(glutEnterGameMode,$(MANDIR),glutLeaveGameMode) - -DependTarget() diff --git a/lib/glut-3.7.6/man/glut/glut.man b/lib/glut-3.7.6/man/glut/glut.man deleted file mode 100644 index 54bd981c0..000000000 --- a/lib/glut-3.7.6/man/glut/glut.man +++ /dev/null @@ -1,247 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glut 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glut - an introduction to the OpenGL Utility Toolkit -.SH SYNOPSIS -.nf -.LP -#include -.fi -.SH DESCRIPTION -The OpenGL Utility Toolkit (GLUT) is a programming interface with ANSI C and FORTRAN bindings for writing -window system independent OpenGL programs. The toolkit supports the following functionality: -.IP -Multiple windows for OpenGL rendering. -.IP -Callback driven event processing. -.IP -Sophisticated input devices. -.IP -An ``idle'' routine and timers. -.IP -A simple, cascading pop-up menu facility. -.IP -Utility routines to generate various solid and wire frame objects. -.IP -Support for bitmap and stroke fonts. -.IP -Miscellaneous window management functions, including managing overlays. -.LP -An ANSI C implementation of GLUT for the X Window System has been -implemented by the author. Windows NT and OS/2 versions of GLUT are -also available. -.SH BACKGROUND -One of the major accomplishments in the specification of OpenGL -was the isolation of window system dependencies from OpenGL's -rendering model. The result is that OpenGL is window system independent. - -Window system operations such as the creation of a rendering window and -the handling of window system events are left to the native window system -to define. Necessary interactions between OpenGL and the window system -such as creating and binding an OpenGL context to a window are described -separately from the OpenGL specification in a window system dependent -specification. For example, the GLX specification describes the standard -by which OpenGL interacts with the X Window System. - -The predecessor to OpenGL is IRIS GL. Unlike OpenGL, IRIS GL -does specify how rendering windows are created and manipulated. IRIS -GL's windowing interface is reasonably popular largely because it is simple -to use. IRIS GL programmers can worry about graphics programming -without needing to be an expert in programming the native window system. -Experience also demonstrated that IRIS GL's windowing interface was -high-level enough that it could be retargeted to different window systems. -Silicon Graphics migrated from NeWS to the X Window System without -any major changes to IRIS GL's basic windowing interface. - -Removing window system operations from OpenGL is a sound decision -because it allows the OpenGL graphics system to be retargeted to various -systems including powerful but expensive graphics workstations as well as -mass-production graphics systems like video games, set-top boxes for -interactive television, and PCs. - -Unfortunately, the lack of a window system interface for OpenGL is a gap -in OpenGL's utility. Learning native window system APIs such as the X -Window System's Xlib or Motif can be daunting. Even those -familiar with native window system APIs need to understand the interface -that binds OpenGL to the native window system. And when an OpenGL -program is written using the native window system interface, despite the -portability of the program's OpenGL rendering code, the program itself -will be window system dependent. - -Testing and documenting OpenGL's functionality lead to the development -of the tk and aux toolkits. The aux toolkit is used in the examples found in -the OpenGL Programming Guide. Unfortunately, aux has numerous -limitations and its utility is largely limited to toy programs. The tk library -has more functionality than aux but was developed in an ad hoc fashion and -still lacks much important functionality that IRIS GL programmers expect, -like pop-up menus and overlays. - -GLUT is designed to fill the need for a window system independent -programming interface for OpenGL programs. The interface is designed to -be simple yet still meet the needs of useful OpenGL programs. Features -from the IRIS GL, aux, and tk interfaces are included to make it easy for -programmers used to these interfaces to develop programs for GLUT. -.SH PHILOSPHY -GLUT simplifies the implementation of programs using OpenGL -rendering. The GLUT application programming interface (API) requires -very few routines to display a graphics scene rendered using OpenGL. The -GLUT API (like the OpenGL API) is stateful. Most initial GLUT state is -defined and the initial state is reasonable for simple programs. - -The GLUT routines also take relatively few parameters. No pointers are -returned. The only pointers passed into GLUT are pointers to character -strings (all strings passed to GLUT are copied, not referenced) and opaque -font handles. - -The GLUT API is (as much as reasonable) window system independent. For -this reason, GLUT does not return any native window system handles, -pointers, or other data structures. More subtle window system dependencies -such as reliance on window system dependent fonts are avoided by GLUT; -instead, GLUT supplies its own (limited) set of fonts. - -For programming ease, GLUT provides a simple menu sub-API. While the -menuing support is designed to be implemented as pop-up menus, GLUT -gives window system leeway to support the menu functionality in another -manner (pull-down menus for example). - -Two of the most important pieces of GLUT state are the current window -and current menu. Most window and menu routines affect the current -window or menu respectively. Most callbacks implicitly set the current -window and menu to the appropriate window or menu responsible for the -callback. GLUT is designed so that a program with only a single window -and/or menu will not need to keep track of any window or menu identifiers. -This greatly simplifies very simple GLUT programs. - -GLUT is designed for simple to moderately complex programs focused on -OpenGL rendering. GLUT implements its own event loop. For this reason, -mixing GLUT with other APIs that demand their own event handling -structure may be difficult. The advantage of a builtin event dispatch loop is -simplicity. - -GLUT contains routines for rendering fonts and geometric objects, however -GLUT makes no claims on the OpenGL display list name space. For this -reason, none of the GLUT rendering routines use OpenGL display lists. It is -up to the GLUT programmer to compile the output from GLUT rendering -routines into display lists if this is desired. - -GLUT routines are logically organized into several sub-APIs according to -their functionality. The sub-APIs are: -.IP Initialization. -Command line processing, window system initialization, and initial -window creation state are controlled by these routines. -.IP "Beginning Event Processing." -This routine enters GLUT's event processing loop. This routine never -returns, and it continuously calls GLUT callbacks as necessary. -.IP "Window Management." -These routines create and control windows. -.IP "Overlay Management." -These routines establish and manage overlays for windows. -.IP "Menu Management." -These routines create and control pop-up menus. -.IP "Callback Registration." -These routines register callbacks to be called by the GLUT event -processing loop. -.IP "Color Index Colormap Management." -These routines allow the manipulation of color index colormaps for -windows. -.IP "State Retrieval." -These routines allows programs to retrieve state from GLUT. -.IP "Font Rendering." -These routines allow rendering of stroke and bitmap fonts. -.IP "Geometric Shape Rendering." -These routines allow the rendering of 3D geometric objects including -spheres, cones, icosahedrons, and teapots. -.SH CONVENTIONS -GLUT window and screen coordinates are expressed in pixels. The -upper left hand corner of the screen or a window is (0,0). X coordinates -increase in a rightward direction; Y coordinates increase in a -downward direction. Note: This is inconsistent with OpenGL's -coordinate scheme that generally considers the lower left hand -coordinate of a window to be at (0,0) but is consistent with most -popular window systems. - -Integer identifiers in GLUT begin with one, not zero. So window -identifiers, menu identifiers, and menu item indexes are based from -one, not zero. - -In GLUT's ANSI C binding, for most routines, basic types (int, -char*) are used as parameters. In routines where the parameters are -directly passed to OpenGL routines, OpenGL types (GLfloat) are -used. - -The header files for GLUT should be included in GLUT programs -with the following include directive: -.nf -.LP -#include -.fi -.LP -Because a very large window system software vendor (who will -remain nameless) has an apparent inability to appreciate that -OpenGL's API is independent of their window system API, portable -ANSI C GLUT programs should not directly include or -. Instead, ANSI C GLUT programs should rely on - to include the necessary OpenGL and GLU related -header files. - -The ANSI C GLUT library archive is typically named libglut.a on -Unix systems. GLUT programs need to link with the system's OpenGL -and GLUT libraries (and any libraries these libraries potentially -depend on). A set of window system dependent libraries may also be -necessary for linking GLUT programs. For example, programs using -the X11 GLUT implementation typically need to link with Xlib, the X -extension library, possibly the X Input extension library, the X -miscellaneous utilities library, and the math library. An example -X11/Unix compile line would look like: -.nf -.LP -cc -o foo foo.c -lglut -lGLU -lGL -lXmu -lXi -lXext -lX11 -lm -.fi -.SH SEE ALSO -glutAddMenuEntry, glutAddSubMenu, glutAttachMenu, glutBitmapCharacter, -glutBitmapWidth, glutButtonBoxFunc, glutChangeToMenuEntry, -glutChangeToSubMenu, glutCopyColormap, glutCreateMenu, -glutCreateSubWindow, glutCreateWindow, glutDestroyMenu, -glutDestroyWindow, glutDeviceGet, glutDialsFunc, glutDisplayFunc, -glutEntryFunc, glutEstablishOverlay, glutExtensionSupported, -glutFullScreen, glutGet, glutGetColor, glutGetModifiers, glutIdleFunc, -glutInit, glutInitDisplayMode, glutInitWindowPosition, -glutKeyboardFunc, glutLayerGet, glutMainLoop, glutMenuStatusFunc, -glutMotionFunc, glutMouseFunc, glutOverlayDisplayFunc, glutPopWindow, -glutPositionWindow, glutPostOverlayRedisplay, glutPostRedisplay, -glutRemoveMenuItem, glutRemoveOverlay, glutReshapeFunc, -glutReshapeWindow, glutSetColor, glutSetCursor, glutSetMenu, -glutSetWindow, glutSetWindowTitle, glutShowOverlay, glutShowWindow, -glutSolidCone, glutSolidCube, glutSolidDodecahedron, -glutSolidIcosahedron, glutSolidOctahedron, glutSolidSphere, -glutSolidTeapot, glutSolidTetrahedron, glutSolidTorus, -glutSpaceballButtonFunc, glutSpaceballMotionFunc, -glutSpaceballRotateFunc, glutSpecialFunc, glutStrokeCharacter, -glutStrokeWidth, glutSwapBuffers, glutTabletButtonFunc, -glutTabletMotionFunc, glutTimerFunc, glutUseLayer, glutVisibilityFunc, -.SH REFERENCES -Mark Kilgard, \fIProgramming OpenGL for the X Window System\fP, Addison-Wesley, ISBN 0-201-48359-9, 1996. - -Mark Kilgard, \fIThe OpenGL Utility Toolkit (GLUT) Programming Interface API Version 3\fP (the official GLUT specification). -.SH WEB REFERENCES -Main GLUT page -.br -http://reality.sgi.com/mjk/glut3/glut3.html - -GLUT Frequently Asked Question list -.br -http://reality.sgi.com/mjk/glut3/glut-faq.html - -The OpenGL Utility Toolkit (GLUT) Programming Interface API Version 3 -.br -http://reality.sgi.com/mjk/spec3/spec3.html -.br -http://reality.sgi.com/mjk/glut3/glut-3.spec.ps.gz - -OpenGL and X: An OpenGL Toolkit article (PostScript) -.br -http://reality.sgi.com/mjk/glut3/glut.column1.ps.gz -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutAddMenuEntry.man b/lib/glut-3.7.6/man/glut/glutAddMenuEntry.man deleted file mode 100644 index 5df7c2c58..000000000 --- a/lib/glut-3.7.6/man/glut/glutAddMenuEntry.man +++ /dev/null @@ -1,26 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutAddMenuEntry 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutAddMenuEntry - adds a menu entry to the bottom of the current menu. -.SH SYNTAX -.nf -.LP -void glutAddMenuEntry(char *name, int value); -.fi -.SH ARGUMENTS -.IP \fIname\fP 1i -ASCII character string to display in the menu entry. -.IP \fIvalue\fP 1i -Value to return to the menu's callback function if the menu -entry is selected. -.SH DESCRIPTION -glutAddMenuEntry adds a menu entry to the bottom of the current -menu. The string name will be displayed for the newly added menu -entry. If the menu entry is selected by the user, the menu's callback -will be called passing value as the callback's parameter. -.SH SEE ALSO -glutAddSubMenu, glutCreateMenu, glutChangeToMenuEntry, glutRemoveMenuItem -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutAddSubMenu.man b/lib/glut-3.7.6/man/glut/glutAddSubMenu.man deleted file mode 100644 index 0446b9904..000000000 --- a/lib/glut-3.7.6/man/glut/glutAddSubMenu.man +++ /dev/null @@ -1,27 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutAddSubMenu 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutAddSubMenu - adds a sub-menu trigger to the bottom of the current menu. -.SH SYNTAX -.nf -.LP -void glutAddSubMenu(char *name, int menu); -.fi -.SH ARGUMENTS -.IP \fIname\fP 1i -ASCII character string to display in the menu item from which -to cascade the sub-menu. -.IP \fImenu\fP 1i -Identifier of the menu to cascade from this sub-menu menu item. -.SH DESCRIPTION -glutAddSubMenu adds a sub-menu trigger to the bottom of the -current menu. The string name will be displayed for the newly added -sub-menu trigger. If the sub-menu trigger is entered, the sub-menu -numbered menu will be cascaded, allowing sub-menu menu items to -be selected. -.SH SEE ALSO -glutAddMenuEntry, glutChangeToSubMenu, glutRemoveItem -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutAttachMenu.man b/lib/glut-3.7.6/man/glut/glutAttachMenu.man deleted file mode 100644 index 0bfb8963a..000000000 --- a/lib/glut-3.7.6/man/glut/glutAttachMenu.man +++ /dev/null @@ -1,29 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutAttachMenu 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutAttachMenu - attaches a mouse button for the current window to the -identifier of the current menu; glutDetachMenu - detaches an attached -mouse button from the current window. -.SH SYNTAX -.nf -.LP -void glutAttachMenu(int button); -void glutDetachMenu(int button); -.fi -.SH ARGUMENTS -.IP \fIbutton\fP 1i -The button to attach a menu or detach a menu. -.SH DESCRIPTION -glutAttachMenu attaches a mouse button for the current window to the -identifier of the current menu; glutDetachMenu detaches an attached -mouse button from the current window. By attaching a menu identifier to -a button, the named menu will be popped up when the user presses the -specified button. button should be one of GLUT_LEFT_BUTTON, -GLUT_MIDDLE_BUTTON, and GLUT_RIGHT_BUTTON. Note that the menu -is attached to the button by identifier, not by reference. -.SH SEE ALSO -glutCreateMenu, glutMouseFunc, glutMenuStatusFunc -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutBitmapCharacter.man b/lib/glut-3.7.6/man/glut/glutBitmapCharacter.man deleted file mode 100644 index 7aae01731..000000000 --- a/lib/glut-3.7.6/man/glut/glutBitmapCharacter.man +++ /dev/null @@ -1,102 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutBitmapCharacter 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutBitmapCharacter - renders a bitmap character using OpenGL. -.SH SYNTAX -.nf -.LP -void glutBitmapCharacter(void *font, int character); -.fi -.SH ARGUMENTS -.IP \fIfont\fP 1i -Bitmap font to use. -.IP \fIcharacter\fP 1i -Character to render (not confined to 8 bits). -.SH DESCRIPTION -Without using any display lists, glutBitmapCharacter renders the -character in the named bitmap font. The available fonts are: -.TP 8 -.B GLUT_BITMAP_8_BY_13 -A fixed width font with every character fitting in an 8 by 13 pixel -rectangle. The exact bitmaps to be used is defined by the standard X -glyph bitmaps for the X font named: - --misc-fixed-medium-r-normal--13-120-75-75-C-80-iso8859-1 - -.TP 8 -.B GLUT_BITMAP_9_BY_15 -A fixed width font with every character fitting in an 9 by 15 pixel -rectangle. The exact bitmaps to be used is defined by the standard X -glyph bitmaps for the X font named: - --misc-fixed-medium-r-normal--15-140-75-75-C-90-iso8859-1 - -.TP 8 -.B GLUT_BITMAP_TIMES_ROMAN_10 -A 10-point proportional spaced Times Roman font. The exact -bitmaps to be used is defined by the standard X glyph bitmaps for -the X font named: - --adobe-times-medium-r-normal--10-100-75-75-p-54-iso8859-1 - -.TP 8 -.B GLUT_BITMAP_TIMES_ROMAN_24 -A 24-point proportional spaced Times Roman font. The exact -bitmaps to be used is defined by the standard X glyph bitmaps for -the X font named: - --adobe-times-medium-r-normal--24-240-75-75-p-124-iso8859-1 - -.TP 8 -.B GLUT_BITMAP_HELVETICA_10 -A 10-point proportional spaced Helvetica font. The exact bitmaps -to be used is defined by the standard X glyph bitmaps for the X font -named: - --adobe-helvetica-medium-r-normal--10-100-75-75-p-56-iso8859-1 - -.TP 8 -.B GLUT_BITMAP_HELVETICA_12 -A 12-point proportional spaced Helvetica font. The exact bitmaps -to be used is defined by the standard X glyph bitmaps for the X font -named: - --adobe-helvetica-medium-r-normal--12-120-75-75-p-67-iso8859-1 - -.TP 8 -.B GLUT_BITMAP_HELVETICA_18 -A 18-point proportional spaced Helvetica font. The exact bitmaps -to be used is defined by the standard X glyph bitmaps for the X font -named: - --adobe-helvetica-medium-r-normal--18-180-75-75-p-98-iso8859-1 -.LP -Rendering a nonexistent character has no effect. -glutBitmapCharacter automatically sets the OpenGL unpack pixel -storage modes it needs appropriately and saves and restores the previous -modes before returning. The generated call to glBitmap will adjust the -current raster position based on the width of the character. -.SH EXAMPLE -Here is a routine that shows how to render a string of ASCII -text with glutBitmapCharacter: -.nf -.LP - void - output(int x, int y, char *string) - { - int len, i; - - glRasterPos2f(x, y); - len = (int) strlen(string); - for (i = 0; i < len; i++) { - glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18, string[i]); - } - } -.fi -.LP -.SH SEE ALSO -glutBitmapWidth, glutStrokeCharacter -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutBitmapWidth.man b/lib/glut-3.7.6/man/glut/glutBitmapWidth.man deleted file mode 100644 index d87afd8ef..000000000 --- a/lib/glut-3.7.6/man/glut/glutBitmapWidth.man +++ /dev/null @@ -1,34 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutBitmapWidth 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutBitmapWidth - returns the width of a bitmap character, -glutBitmapLength returns the length of a bitmap font string. -.SH SYNTAX -.nf -.LP -int glutBitmapWidth(void *font, int character) -int glutBitmapLength(void *font, const unsigned char *string) -.fi -.SH ARGUMENTS -.IP \fIfont\fP 1i -Bitmap font to use. For valid values, see the -glutBitmapCharacter description. -.IP \fIcharacter\fP 1i -Character to return width of (not confined to 8 bits). -.IP \fIstring\fP 1i -Text string (8-bit characters), nul terminated. -.SH DESCRIPTION -glutBitmapWidth returns the width in pixels of a bitmap character in -a supported bitmap font. While the width of characters in a font may vary -(though fixed width fonts do not vary), the maximum height -characteristics of a particular font are fixed. - -glutBitmapLength returns the length in pixels of a string (8-bit -characters). This length is equivalent to summing all the widths -returned by glutBitmapWidth for each character in the string. -.SH SEE ALSO -glutBitmapCharacter, glutStrokeWidth -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutButtonBoxFunc.man b/lib/glut-3.7.6/man/glut/glutButtonBoxFunc.man deleted file mode 100644 index f5742a7cd..000000000 --- a/lib/glut-3.7.6/man/glut/glutButtonBoxFunc.man +++ /dev/null @@ -1,37 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutButtonBoxFunc 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutButtonBoxFunc - sets the dial & button box button callback for the current window. -.SH SYNTAX -.nf -.LP -void glutButtonBoxFunc(void (*func)(int button, int state)); -.fi -.SH ARGUMENTS -.IP \fIfunc\fP 1i -The new button box callback function. -.SH DESCRIPTION -glutButtonBoxFunc sets the dial & button box button callback for the -current window. The dial & button box button callback for a window is -called when the window has dial & button box input focus (normally, -when the mouse is in the window) and the user generates dial & button -box button presses. The button parameter will be the button number -(starting at one). The number of available dial & button box buttons can -be determined with -glutDeviceGet(GLUT_NUM_BUTTON_BOX_BUTTONS). The state is -either GLUT_UP or GLUT_DOWN indicating whether the callback was due -to a release or press respectively. - -Registering a dial & button box button callback when a dial & button -box device is not available is ineffectual and not an error. In this case, no -dial & button box button callbacks will be generated. - -Passing NULL to glutButtonBoxFunc disables the generation of dial & -button box button callbacks. When a new window is created, no dial & -button box button callback is initially registered. -.SH SEE ALSO -glutDialsFunc, glutDeviceGet, glutSpaceballButtonFunc, glutTabletButtonFunc -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutChangeToMenuEntry.man b/lib/glut-3.7.6/man/glut/glutChangeToMenuEntry.man deleted file mode 100644 index 409068a32..000000000 --- a/lib/glut-3.7.6/man/glut/glutChangeToMenuEntry.man +++ /dev/null @@ -1,32 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutChangeToMenuEntry 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutChangeToMenuEntry - changes the specified menu item in -the current menu into a menu entry. -.SH SYNTAX -.nf -.LP -void glutChangeToMenuEntry(int entry, char *name, int value); -.fi -.SH ARGUMENTS -.IP \fIentry\fP 1i -Index into the menu items of the current menu (1 is the topmost menu item). -.IP \fIname\fP 1i -ASCII character string to display in the menu entry. -.IP \fIvalue\fP 1i -Value to return to the menu's callback function if the menu entry is selected. -.SH DESCRIPTION -glutChangeToMenuEntry changes the specified menu entry in the -current menu into a menu entry. The entry parameter determines which -menu item should be changed, with one being the topmost item. entry -must be between 1 and glutGet(GLUT_MENU_NUM_ITEMS) inclusive. -The menu item to change does not have to be a menu entry already. The -string name will be displayed for the newly changed menu entry. The -value will be returned to the menu's callback if this menu entry is -selected. -.SH SEE ALSO -glutChangeToSubMenu, glutAddMenuEntry, glutRemoveMenuItem -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutChangeToSubMenu.man b/lib/glut-3.7.6/man/glut/glutChangeToSubMenu.man deleted file mode 100644 index e735bd137..000000000 --- a/lib/glut-3.7.6/man/glut/glutChangeToSubMenu.man +++ /dev/null @@ -1,32 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutChangeToSubMenu 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutChangeToSubMenu - changes the specified menu item in the current -menu into a sub-menu trigger. -.SH SYNTAX -.nf -.LP -void glutChangeToSubMenu(int entry, char *name, int menu); -.fi -.SH ARGUMENTS -.IP \fIentry\fP 1i -Index into the menu items of the current menu (1 is the topmost menu item). -.IP \fIname\fP 1i -ASCII character string to display in the menu item to cascade the sub-menu from. -.IP \fImenu\fP 1i -Identifier of the menu to cascade from this sub-menu menu item. -.SH DESCRIPTION -glutChangeToSubMenu changes the specified menu item in the current -menu into a sub-menu trigger. The entry parameter determines which -menu item should be changed, with one being the topmost item. entry -must be between 1 and glutGet(GLUT_MENU_NUM_ITEMS) inclusive. -The menu item to change does not have to be a sub-menu trigger already. -The string name will be displayed for the newly changed sub-menu -trigger. The menu identifier names the sub-menu to cascade from the -newly added sub-menu trigger. -.SH SEE ALSO -glutChangeToMenuEntry, glutAddSubMenu, glutRemoveMenuItem -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutCopyColormap.man b/lib/glut-3.7.6/man/glut/glutCopyColormap.man deleted file mode 100644 index a1d055905..000000000 --- a/lib/glut-3.7.6/man/glut/glutCopyColormap.man +++ /dev/null @@ -1,47 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutCopyColormap 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutCopyColormap - copies the logical colormap for the layer in use -from a specified window to the current window. -.SH SYNTAX -.nf -.LP -void glutCopyColormap(int win); -.fi -.SH ARGUMENTS -.IP \fIwin\fP 1i -The identifier of the window to copy the logical colormap from. -.SH DESCRIPTION -glutCopyColormap copies (lazily if possible to promote sharing) the -logical colormap from a specified window to the current window's layer -in use. The copy will be from the normal plane to the normal plane; or -from the overlay to the overlay (never across different layers). Once a -colormap has been copied, avoid setting cells in the colormap with -glutSetColor since that will force an actual copy of the colormap if it -was previously copied by reference. glutCopyColormap should only -be called when both the current window and the win window are color -index windows. -.SH EXAMPLE -Here is an example of how to create two color index GLUT windows with -their colormaps loaded identically and so that the windows are -likely to share the same colormap: -.nf -.LP - int win1, win2; - - glutInitDisplayMode(GLUT_INDEX); - win1 = glutCreateWindow("first color index win"); - glutSetColor(0, 0.0, 0.0, 0.0); /* black */ - glutSetColor(1, 0.5, 0.5, 0.5); /* gray */ - glutSetColor(2, 1.0, 1.0, 1.0); /* black */ - glutSetColor(3, 1.0, 0.0, 0.0); /* red */ - win2 = glutCreateWindow("second color index win"); - glutCopyColormap(win1); -.fi -.LP -.SH SEE ALSO -glutSetColor, glutGetColor, glutCreateWindow -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutCreateMenu.man b/lib/glut-3.7.6/man/glut/glutCreateMenu.man deleted file mode 100644 index b8762ad1b..000000000 --- a/lib/glut-3.7.6/man/glut/glutCreateMenu.man +++ /dev/null @@ -1,61 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutCreateMenu 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutCreateMenu - creates a new pop-up menu. -.SH SYNTAX -.nf -.LP -int glutCreateMenu(void (*func)(int value)); -.fi -.SH ARGUMENTS -.IP \fIfunc\fP 1i -The callback function for the menu that is called when a menu -entry from the menu is selected. The value passed to the -callback is determined by the value for the selected menu -entry. -.SH DESCRIPTION -glutCreateMenu creates a new pop-up menu and returns a unique -small integer identifier. The range of allocated identifiers starts at -one. The menu identifier range is separate from the window -identifier range. Implicitly, the current menu is set to the newly -created menu. This menu identifier can be used when calling -glutSetMenu. - -When the menu callback is called because a menu entry is selected -for the menu, the current menu will be implicitly set to the menu -with the selected entry before the callback is made. -.SH EXAMPLE -Here is a quick example of how to create a GLUT popup menu with -two submenus and attach it to the right button of the current window: -.nf -.LP - int submenu1, submenu2; - - submenu1 = glutCreateMenu(selectMessage); - glutAddMenuEntry("abc", 1); - glutAddMenuEntry("ABC", 2); - submenu2 = glutCreateMenu(selectColor); - glutAddMenuEntry("Green", 1); - glutAddMenuEntry("Red", 2); - glutAddMenuEntry("White", 3); - glutCreateMenu(selectFont); - glutAddMenuEntry("9 by 15", 0); - glutAddMenuEntry("Times Roman 10", 1); - glutAddMenuEntry("Times Roman 24", 2); - glutAddSubMenu("Messages", submenu1); - glutAddSubMenu("Color", submenu2); - glutAttachMenu(GLUT_RIGHT_BUTTON); -.fi -.LP -.SH X IMPLEMENTATION NOTES -If available, GLUT for X will take advantage of overlay planes for -implementing pop-up menus. The use of overlay planes can -eliminate display callbacks when pop-up menus are deactivated. The -SERVER_OVERLAY_VISUALS convention is used to determine -if overlay visuals are available. -.SH SEE ALSO -glutCreateWindow, glutDestroyMenu, glutSetMenu, glutAttachMenu -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutCreateSubWindow.man b/lib/glut-3.7.6/man/glut/glutCreateSubWindow.man deleted file mode 100644 index a9e5273cc..000000000 --- a/lib/glut-3.7.6/man/glut/glutCreateSubWindow.man +++ /dev/null @@ -1,47 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutCreateSubWindow 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutCreateSubWindow - creates a subwindow. -.SH SYNTAX -.nf -.LP -int glutCreateSubWindow(int win, - int x, int y, int width, int height); -.fi -.SH ARGUMENTS -.IP \fIwin\fP 1i -Identifier of the subwindow's parent window. -.IP \fIx\fP 1i -Window X location in pixels relative to parent window's origin. -.IP \fIy\fP 1i -Window Y location in pixels relative to parent window's origin. -.IP \fIwidth\fP 1i -Width in pixels. -.IP \fIheight\fP 1i -Height in pixels. -.SH DESCRIPTION -glutCreateSubWindow creates a subwindow of the window identified -by win of size width and height at location x and y within the current -window. Implicitly, the current window is set to the newly created -subwindow. - -Each created window has a unique associated OpenGL context. State -changes to a window's associated OpenGL context can be done -immediately after the window is created. - -The display state of a window is initially for the window to be shown. -But the window's display state is not actually acted upon until -glutMainLoop is entered. This means until glutMainLoop is called, -rendering to a created window is ineffective. Subwindows can not be -iconified. - -Subwindows can be nested arbitrarily deep. - -The value returned is a unique small integer identifier for the window. -The range of allocated identifiers starts at one. -.SH SEE ALSO -glutCreateWindow, glutDestroyWindow -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutCreateWindow.man b/lib/glut-3.7.6/man/glut/glutCreateWindow.man deleted file mode 100644 index 0d39863d3..000000000 --- a/lib/glut-3.7.6/man/glut/glutCreateWindow.man +++ /dev/null @@ -1,43 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutCreateWindow 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutCreateWindow - creates a top-level window. -.SH SYNTAX -.nf -.LP -int glutCreateWindow(char *name); -.fi -.SH ARGUMENTS -.IP \fIname\fP 1i -ASCII character string for use as window name. -.SH DESCRIPTION -glutCreateWindow creates a top-level window. The -name will be provided to the window system as the window's name. The -intent is that the window system will label the window with the name. - -Implicitly, the current window is set to the newly created window. - -Each created window has a unique associated OpenGL context. State -changes to a window's associated OpenGL context can be done -immediately after the window is created. - -The display state of a window is initially for the window to be shown. -But the window's display state is not actually acted upon until -glutMainLoop is entered. This means until glutMainLoop is called, -rendering to a created window is ineffective because the window can not -yet be displayed. - -The value returned is a unique small integer identifier for the window. -The range of allocated identifiers starts at one. This window identifier -can be used when calling glutSetWindow. -.SH X IMPLEMENTATION NOTES -The proper X Inter-Client Communication Conventions Manual -(ICCCM) top-level properties are established. The WM_COMMAND -property that lists the command line used to invoke the GLUT program -is only established for the first window created. -.SH SEE ALSO -glutCreateSubWindow, glutCreateMenu, glutDestroyWindow -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutDestroyMenu.man b/lib/glut-3.7.6/man/glut/glutDestroyMenu.man deleted file mode 100644 index 55d5a6ccd..000000000 --- a/lib/glut-3.7.6/man/glut/glutDestroyMenu.man +++ /dev/null @@ -1,22 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutDestroyMenu 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutDestroyMenu - destroys the specified menu. -.SH SYNTAX -.nf -.LP -void glutDestroyMenu(int menu); -.fi -.SH ARGUMENTS -.IP \fImenu\fP 1i -The identifier of the menu to destroy. -.SH DESCRIPTION -glutDestroyMenu destroys the specified menu by menu. If menu -was the current menu, the current menu becomes invalid and -glutGetMenu will return zero. -.SH SEE ALSO -glutCreateMenu, glutDestroyWindow -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutDestroyWindow.man b/lib/glut-3.7.6/man/glut/glutDestroyWindow.man deleted file mode 100644 index 5c30e6779..000000000 --- a/lib/glut-3.7.6/man/glut/glutDestroyWindow.man +++ /dev/null @@ -1,25 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutDestroyWindow 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutDestroyWindow - destroys the specified window. -.SH SYNTAX -.nf -.LP -void glutDestroyWindow(int win); -.fi -.SH ARGUMENTS -.IP \fIwin\fP 1i -Identifier of GLUT window to destroy. -.SH DESCRIPTION -glutDestroyWindow destroys the window specified by win and the -window's associated OpenGL context, logical colormap (if the window -is color index), and overlay and related state (if an overlay has been -established). Any subwindows of destroyed windows are also destroyed -by glutDestroyWindow. If win was the current window, the current -window becomes invalid ( glutGetWindow will return zero). -.SH SEE ALSO -glutCreateWindow, glutCreateSubWindow, glutDestroyMenu -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutDeviceGet.man b/lib/glut-3.7.6/man/glut/glutDeviceGet.man deleted file mode 100644 index e689055fc..000000000 --- a/lib/glut-3.7.6/man/glut/glutDeviceGet.man +++ /dev/null @@ -1,85 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996, 1998. -.\" -.TH glutDeviceGet 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutDeviceGet - retrieves GLUT device information represented by integers. -.SH SYNTAX -.nf -.LP -int glutDeviceGet(GLenum info); -.fi -.SH ARGUMENTS -.IP \fIinfo\fP 1i -Name of device information to retrieve. -.TP 8 -.B GLUT_HAS_KEYBOARD -Non-zero if a keyboard is available; zero if not available. For most -GLUT implementations, a keyboard can be assumed. -.TP 8 -.B GLUT_HAS_MOUSE -Non-zero if a mouse is available; zero if not available. For most GLUT -implementations, a keyboard can be assumed. -.TP 8 -.B GLUT_HAS_SPACEBALL -Non-zero if a Spaceball is available; zero if not available. -.TP 8 -.B GLUT_HAS_DIAL_AND_BUTTON_BOX -Non-zero if a dial & button box is available; zero if not available. -.TP 8 -.B GLUT_HAS_TABLET -Non-zero if a tablet is available; zero if not available. -.TP 8 -.B GLUT_NUM_MOUSE_BUTTONS -Number of buttons supported by the mouse. If no mouse is supported, zero is -returned. -.TP 8 -.B GLUT_NUM_SPACEBALL_BUTTONS -Number of buttons supported by the Spaceball. If no Spaceball is supported, zero is -returned. -.TP 8 -.B GLUT_NUM_BUTTON_BOX_BUTTONS -Number of buttons supported by the dial & button box device. If no dials & button -box device is supported, zero is returned. -.TP 8 -.B GLUT_NUM_DIALS -Number of dials supported by the dial & button box device. If no dials & button -box device is supported, zero is returned. -.TP 8 -.B GLUT_NUM_TABLET_BUTTONS -Number of buttons supported by the tablet. If no tablet is supported, zero is -returned. -.TP 8 -.B GLUT_DEVICE_IGNORE_KEY_REPEAT -Returns true if the current window's auto repeated keys are ignored. -This state is controlled by glutIgnoreKeyRepeat. -.TP 8 -.B GLUT_DEVICE_KEY_REPEAT -The window system's global key repeat state. Returns either GLUT_KEY_REPEAT_OFF, GLUT_KEY_REPEAT_ON, or GLUT_KEY_REPEAT_DEFAULT. This will not necessarily return the value last passed to glutSetKeyRepeat. -.TP 8 -.B GLUT_JOYSTICK_POLL_RATE -Returns the current window's joystick poll rate as set by glutJoystickFunc. If no joystick is supported, the poll rate will always be zero. The joystick poll -rate also returns zero if the poll rate last specified to glutJoystickFunc is negative or a NULL callback was registered. -.TP 8 -.B GLUT_HAS_JOYSTICK -Non-zero if a joystick is available; zero if not available. -.TP 8 -.B GLUT_JOYSTICK_BUTTONS -Number of buttons supported by the joystick. If no joystick is supported, zero is returned. -.TP 8 -.B GLUT_JOYSTICK_AXES -Number of axes supported by the joystick. If no joystick is supposrted, zero is returned. -.SH DESCRIPTION -glutDeviceGet retrieves GLUT device information represented by integers. The info -parameter determines what type of device information to return. Requesting device -information for an invalid GLUT device information name returns negative one. -.SH X IMPLEMENTATION NOTES -The current implementation uses to X Input extension to regonize SGI's Spaceball, -tablet, and dial and button box devices. -.SH WIN32 IMPLEMENTATION NOTES -The GLUT_DEVICE_KEY_REPEAT alwasy returns GLUT_KEY_REPEAT_ON. -.SH SEE ALSO -glutGet, glutKeyboardFunc, glutMouseFunc, glutSpaceballMotion, glutTabletMotionFunc, glutTabletButtonFunc, -glutDialsFunc, glutButtonBoxFunc, glutIgnoreKeyRepeat, glutSetKeyRepeat, glutJoystickFunc -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutDialsFunc.man b/lib/glut-3.7.6/man/glut/glutDialsFunc.man deleted file mode 100644 index e7bf9268d..000000000 --- a/lib/glut-3.7.6/man/glut/glutDialsFunc.man +++ /dev/null @@ -1,37 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutDialsFunc 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutDialsFunc - sets the dial & button box dials callback for the current window. -.SH SYNTAX -.nf -.LP -void glutDialsFunc(void (*func)(int dial, int value)); -.fi -.SH ARGUMENTS -.IP \fIfunc\fP 1i -The new dials callback function. -.SH DESCRIPTION -glutDialsFunc sets the dial & button box dials callback for the -current window. The dial & button box dials callback for a window is -called when the window has dial & button box input focus (normally, -when the mouse is in the window) and the user generates dial & button -box dial changes. The dial parameter will be the dial number (starting -at one). The number of available dial & button box dials can be -determined with glutDeviceGet(GLUT_NUM_DIALS). The value -measures the absolute rotation in degrees. Dial values do not ``roll over'' -with each complete rotation but continue to accumulate degrees (until the -int dial value overflows). - -Registering a dial & button box dials callback when a dial & button box -device is not available is ineffectual and not an error. In this case, no dial -& button box dials callbacks will be generated. - -Passing NULL to glutDialsFunc disables the generation of dial & -button box dials callbacks. When a new window is created, no dial & -button box dials callback is initially registered. -.SH SEE ALSO -glutButtonBoxFunc, glutDeviceGet -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutDisplayFunc.man b/lib/glut-3.7.6/man/glut/glutDisplayFunc.man deleted file mode 100644 index 5753bf70e..000000000 --- a/lib/glut-3.7.6/man/glut/glutDisplayFunc.man +++ /dev/null @@ -1,59 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutDisplayFunc 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutDisplayFunc - sets the display callback for the current window. -.SH SYNTAX -.nf -.LP -void glutDisplayFunc(void (*func)(void)); -.fi -.SH ARGUMENTS -.IP \fIfunc\fP 1i -The new display callback function. -.SH DESCRIPTION -glutDisplayFunc sets the display callback for the current window. -When GLUT determines that the normal plane for the window needs to be -redisplayed, the display callback for the window is called. Before the -callback, the current window is set to the window needing to be -redisplayed and (if no overlay display callback is registered) the layer in -use is set to the normal plane. The display callback is called with no -parameters. The entire normal plane region should be redisplayed in -response to the callback (this includes ancillary buffers if your program -depends on their state). - -GLUT determines when the display callback should be triggered based on -the window's redisplay state. The redisplay state for a window can be -either set explicitly by calling glutPostRedisplay or implicitly as the -result of window damage reported by the window system. Multiple posted -redisplays for a window are coalesced by GLUT to minimize the number -of display callbacks called. - -When an overlay is established for a window, but there is no overlay -display callback registered, the display callback is used for redisplaying -both the overlay and normal plane (that is, it will be called if either the -redisplay state or overlay redisplay state is set). In this case, the layer in -use is not implicitly changed on entry to the display callback. - -See glutOverlayDisplayFunc to understand how distinct callbacks -for the overlay and normal plane of a window may be established. - -When a window is created, no display callback exists for the window. It is -the responsibility of the programmer to install a display callback for the -window before the window is shown. A display callback must be -registered for any window that is shown. If a window becomes displayed -without a display callback being registered, a fatal error occurs. Passing -NULL to glutDisplayFunc is illegal as of GLUT 3.0; there is no way to -``deregister'' a display callback (though another callback routine can -always be registered). - -Upon return from the display callback, the normal damaged state of the -window (returned by calling glutLayerGet(GLUT_NORMAL_DAMAGED) -is cleared. If there is no overlay display callback registered the overlay -damaged state of the window (returned by calling -glutLayerGet(GLUT_OVERLAY_DAMAGED) is also cleared. -.SH SEE ALSO -glutCreateMenu, glutPostRedisplay, glutOverlayDisplayFunc -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutEnterGameMode.man b/lib/glut-3.7.6/man/glut/glutEnterGameMode.man deleted file mode 100644 index db46602d4..000000000 --- a/lib/glut-3.7.6/man/glut/glutEnterGameMode.man +++ /dev/null @@ -1,72 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1998. -.\" -.TH glutEnterGameMode 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutEnterGameMode, glutLeaveGameMode - enters and leaves GLUT's game mode. -.SH SYNTAX -.nf -.LP -void glutEnterGameMode(void); -void glutLeaveGameMode(void); -.fi -.SH DESCRIPTION - -glutEnterGameMode is designed to enable high-performance fullscreen GLUT rendering, possibly -at a different screen display format. Calling glutEnterGameMode creates a -special fullscreen GLUT window (with its own callbacks and OpenGL rendering context -state). If the game mode string describes a possible screen display format, -GLUT also changes the screen display format to the one described by the -game mode string. glutLeaveGameMode leaves the GLUT game mode and returns the -screen display format to its default format. - -When game mode is entered, certain GLUT functionality is disable to facilitate -high-performance fullscreen rendering. GLUT pop-up menus are not available -while in game mode. Other created windows and subwindows are not displayed -in GLUT game mode. Game mode will also hide all other applications running -on the computer's display screen. -The intent of these restrictions is to eliminate window -clipping issues, permit screen display format changes, -and permit fullscreen -rendering optimization such as page flipping for fullscreen buffer swaps. - -After leaving game mode, the GLUT functionality disabled in game mode is -available again. The game mode window (and its OpenGL rendering state) is -destroyed when leaving game mode. Any windows and subwindows created before -entering the game mode are displayed in their previous locations. The OpenGL -state of normal GLUT windows and subwindows is not disturbed by entering -and/or leaving game mode. - -The following GLUT routines are ignored in game mode: glutFullScreen, -glutSetWindowTitle, glutSetIconTitle, glutPositionWindow, glutReshapeWindow, -glutPopWindow, glutPushWindow, glutIconifyWindow, glutShowWindow, -glutHideWindow. - -glutEnterGameMode can be called when already in game mode. This will destroy -the previous game mode window (including any OpenGL rendering state) and -create a new game mode window with a new OpenGL rendering context. -Also if glutEnterGameMode is called when already in game mode and if the game mode -string has changed and describes a possible screen display format, the new -screen display format takes effect. A reshape callback is generated if the -game mode window changes size due to a screen display format change. - -Re-entering game mode provides a mechanism for changing the screen display -format while already in game mode. Note though that the game mode window's -OpenGL state is lost in this process and the application is responsible for -re-initializing the newly created game mode window OpenGL state when -re-entering game mode. - -Game mode cannot be entered while pop-up menus are in use. - -Note that the glutEnterGameMode and glutFullScreen routines operate differently. -glutFullScreen simply makes the current window match the size of the screen. -glutFullScreen does not change the screen display format and does not disable -any GLUT features such as pop-up menus; glutFullScreen continues to operate -in a "windowed" mode of operation. glutEnterGameMode creates a new window -style, possibly changes the screen display mode, limits GLUT functionality, -and hides other applications. - -.SH SEE ALSO -glutGameModeGet, glutGameModeString, glutInitDisplayString -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutEntryFunc.man b/lib/glut-3.7.6/man/glut/glutEntryFunc.man deleted file mode 100644 index e357ee232..000000000 --- a/lib/glut-3.7.6/man/glut/glutEntryFunc.man +++ /dev/null @@ -1,31 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutEntryFunc 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutEntryFunc - sets the mouse enter/leave callback for the current window. -.SH SYNTAX -.nf -.LP -void glutEntryFunc(void (*func)(int state)); -.fi -.SH ARGUMENTS -.IP \fIfunc\fP 1i -The new entry callback function. -.SH DESCRIPTION -glutEntryFunc sets the mouse enter/leave callback for the current -window. The state callback parameter is either GLUT_LEFT or -GLUT_ENTERED depending on if the mouse pointer has last left or entered -the window. - -Passing NULL to glutEntryFunc disables the generation of the mouse -enter/leave callback. - -Some window systems may not generate accurate enter/leave callbacks. -X IMPLEMENTATION NOTES -An X implementation of GLUT should generate accurate enter/leave -callbacks. -.SH SEE ALSO -glutMotionFunc, glutCreateWindow -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutEstablishOverlay.man b/lib/glut-3.7.6/man/glut/glutEstablishOverlay.man deleted file mode 100644 index db4dc883d..000000000 --- a/lib/glut-3.7.6/man/glut/glutEstablishOverlay.man +++ /dev/null @@ -1,97 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutEstablishOverlay 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutEstablishOverlay - establishes an overlay (if possible) for the -current window. -.SH SYNTAX -.nf -.LP -void glutEstablishOverlay(void); -.fi -.SH DESCRIPTION -glutEstablishOverlay establishes an overlay (if possible) for the -current window. The requested display mode for the overlay is -determined by the initial display mode. -glutLayerGet(GLUT_OVERLAY_POSSIBLE) can be called to -determine if an overlay is possible for the current window with the -current initial display mode. Do not attempt to establish an overlay when -one is not possible; GLUT will terminate the program. - -If glutEstablishOverlay is called when an overlay already exists, -the existing overlay is first removed, and then a new overlay is -established. The state of the old overlay's OpenGL context is discarded. - -The initial display state of an overlay is shown, however the overlay is -only actually shown if the overlay's window is shown. - -Implicitly, the window's layer in use changes to the overlay immediately -after the overlay is established. -.SH EXAMPLE -Establishing an overlay is a bit involved, but easy once you get the -hang of it. Here is an example: -.nf -.LP - int overlaySupport; - int transparent, red, white; - - glutInitDisplayMode(GLUT_SINGLE | GLUT_INDEX); - overlaySupport = glutLayerGet(GLUT_OVERLAY_POSSIBLE); - if (overlaySupport) { - glutEstablishOverlay(); - glutHideOverlay(); - transparent = glutLayerGet(GLUT_TRANSPARENT_INDEX); - glClearIndex(transparent); - red = (transparent + 1) % glutGet(GLUT_WINDOW_COLORMAP_SIZE); - white = (transparent + 2) % glutGet(GLUT_WINDOW_COLORMAP_SIZE); - glutSetColor(red, 1.0, 0.0, 0.0); /* Red. */ - glutSetColor(white, 1.0, 1.0, 1.0); /* White. */ - glutOverlayDisplayFunc(redrawOverlay); - glutReshapeFunc(reshape); - } else { - printf("Sorry, no nifty overlay (try an SGI workstation)!\n"); - } -.fi -.LP -If you setup an overlay and you install a reshape callback, you need -to update the viewports and possibly projection matrices of both the -normal plane and the overlay. For example, your reshape callback -might look like this: -.nf -.LP - void - reshape(int w, int h) - { - if (overlaySupport) { - glutUseLayer(GLUT_OVERLAY); - /* Setup overlay to have X style coordinate system. */ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluOrtho2D(0, w, 0, h); - glScalef(1, -1, 1); - glTranslatef(0, -h, 0); - glMatrixMode(GL_MODELVIEW); - glutUseLayer(GLUT_NORMAL); - } - glViewport(0, 0, w, h); - } -.fi -.LP -See the glutOverlayDisplayFunc man page for an example showing one way to write -your overlay display callback. -.SH X IMPLEMENTATION NOTES -GLUT for X uses the SERVER_OVERLAY_VISUALS convention is -used to determine if overlay visuals are available. While the convention -allows for opaque overlays (no transparency) and overlays with the -transparency specified as a bitmask, GLUT overlay management only -provides access to transparent pixel overlays. - -Until RGBA overlays are better understood, GLUT only supports color -index overlays. -.SH SEE ALSO -glutUseLayer, glutRemoveLayer, glutCreateWindow, glutPostOverlayRedisplay, glutShowOverlay, -glutOverlayDisplayFunc -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutExtensionSupported.man b/lib/glut-3.7.6/man/glut/glutExtensionSupported.man deleted file mode 100644 index 1f5eca64c..000000000 --- a/lib/glut-3.7.6/man/glut/glutExtensionSupported.man +++ /dev/null @@ -1,49 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutExtensionSupported 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutExtensionSupported - helps to easily determine whether a -given OpenGL extension is supported. -.SH SYNTAX -.nf -.LP -int glutExtensionSupported(char *extension); -.fi -.SH ARGUMENTS -.IP \fIextension\fP 1i -Name of OpenGL extension. -.SH DESCRIPTION -glutExtensionSupported helps to easily determine whether a -given OpenGL extension is supported or not. The extension -parameter names the extension to query. The supported extensions can -also be determined with glGetString(GL_EXTENSIONS), but -glutExtensionSupported does the correct parsing of the returned -string. - -glutExtensionSupported returns non-zero if the extension is -supported, zero if not supported. - -There must be a valid current window to call -glutExtensionSupported. - -glutExtensionSupported only returns information about OpenGL -extensions only. This means window system dependent extensions (for -example, GLX extensions) are not reported by -glutExtensionSupported. -.SH EXAMPLE -Here is an example of using glutExtensionSupported: -.nf -.LP - if (!glutExtensionSupported("GL_EXT_texture")) { - fprintf(stderr, "Missing the texture extension!\\n"); - exit(1); - } - -.fi -Notice that the name argument includes both the GL prefix and the -extension family prefix (EXT). -.SH SEE ALSO -glutGet, glGetString -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutForceJoystickFunc.man b/lib/glut-3.7.6/man/glut/glutForceJoystickFunc.man deleted file mode 100644 index 0e94fb5df..000000000 --- a/lib/glut-3.7.6/man/glut/glutForceJoystickFunc.man +++ /dev/null @@ -1,40 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1998. -.\" -.TH glutForceJoystickFunc 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutForceJoystickFunc - forces current window's joystick callback to be called. -.SH SYNTAX -.nf -.LP -void glutForceJoystickFunc(void); -.fi -.SH DESCRIPTION -glutForceJoystickFunc forces the current window's joystick callback to be -called, reporting the latest joystick state. - -The joystick callback is called either due to polling of the joystick -at the uniform timer interval set by glutJoystickFunc's -pollInterval (specified in milliseconds) or -in response to calling glutForceJoystickFunc. If the pollInterval is -non-positive, no joystick polling is performed and the GLUT application -must frequently (usually from an idle callback) call glutForceJoystickFunc. - -The joystick callback will be called once (if one exists) -for each time glutForceJoystickFunc is called. The callback is called -from glutJoystickFunc. That is, when glutJoystickFunc returns, the -callback will have already happened. -.SH GLUT IMPLEMENTATION NOTES FOR X11 -The GLUT 3.7 implementation of GLUT for X11 supports the joystick API, but -not actual joystick input. A future implementation of GLUT for X11 may -add joystick support. -.SH GLUT IMPLEMENTATION NOTES FOR WIN32 -The GLUT 3.7 implementation of GLUT for Win32 supports the joystick API -and joystick input, but does so through the dated joySetCapture and -joyGetPosEx Win32 Multimedia API. The GLUT 3.7 joystick support for -Win32 has all the limitations of the Win32 Multimedia API joystick support. -A future implementation of GLUT for Win32 may use DirectInput. -.SH SEE ALSO -glutJoystickFunc -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutFullScreen.man b/lib/glut-3.7.6/man/glut/glutFullScreen.man deleted file mode 100644 index 196065038..000000000 --- a/lib/glut-3.7.6/man/glut/glutFullScreen.man +++ /dev/null @@ -1,38 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutFullScreen 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutFullScreen - requests that the current window be made full screen. -.SH SYNTAX -.nf -.LP -void glutFullScreen(void); -.fi -.SH DESCRIPTION -glutFullScreen requests that the current window be made full screen. -The exact semantics of what full screen means may vary by window -system. The intent is to make the window as large as possible and disable -any window decorations or borders added the window system. The -window width and height are not guaranteed to be the same as the screen -width and height, but that is the intent of making a window full screen. - -glutFullScreen is defined to work only on top-level windows. - -The glutFullScreen requests are not processed immediately. The -request is executed after returning to the main event loop. This allows -multiple glutReshapeWindow, glutPositionWindow, and -glutFullScreen requests to the same window to be coalesced. - -Subsequent glutReshapeWindow and glutPositionWindow -requests on the window will disable the full screen status of the window. -.SH X IMPLEMENTATION NOTES -In the X implementation of GLUT, full screen is implemented by sizing -and positioning the window to cover the entire screen and posting the -_MOTIF_WM_HINTS property on the window requesting absolutely no -decorations. Non-Motif window managers may not respond to -_MOTIF_WM_HINTS. -.SH SEE ALSO -glutReshapeWindow, glutPositionWindow -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutGameModeGet.man b/lib/glut-3.7.6/man/glut/glutGameModeGet.man deleted file mode 100644 index a268da49b..000000000 --- a/lib/glut-3.7.6/man/glut/glutGameModeGet.man +++ /dev/null @@ -1,52 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996, 1998. -.\" -.TH glutGameModeGet 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutGameModeGet - retrieves GLUT device information represented by integers. -.SH SYNTAX -.nf -.LP -int glutGameModeGet(GLenum info); -.fi -.SH ARGUMENTS -.IP \fIinfo\fP 1i -Name of game mode information to retrieve. -.TP 8 -.B GLUT_GAME_MODE_ACTIVE -Non-zero if GLUT's game mode is active; zero if not active. -Game mode is not active initially. Game mode becomes active when -glutEnterGameMode is called. Game mode becomes inactive when -glutLeaveGameMode is called. -.TP 8 -.B GLUT_GAME_MODE_POSSIBLE -Non-zero if the game mode string last specified to glutGameModeString is -a possible game mode configuration; zero otherwise. Being "possible" -does not guarantee that if game mode is entered with glutEnterGameMode -that the display settings will actually changed. GLUT_GAME_MODE_DISPLAY_CHANGED should be called once game mode is entered to determine if the display mode is actually changed. -.TP 8 -.B GLUT_GAME_MODE_WIDTH -Width in pixels of the screen when game mode is activated. -.TP 8 -.B GLUT_GAME_MODE_HEIGHT -Height in pixels of the screen when game mode is activated. -.TP 8 -.B GLUT_GAME_MODE_PIXEL_DEPTH -Pixel depth of the screen when game mode is activiated. -.TP 8 -.B GLUT_GAME_MODE_REFRESH_RATE -Screen refresh rate in cyles per second (hertz) when game mode is activated. -Zero is returned if the refresh rate is unknown or cannot be queried. -.TP 8 -.B GLUT_GAME_MODE_DISPLAY_CHANGED -Non-zero if entering game mode actually changed the display settings. -If the game mode string is not possible or the display mode could not be -changed for any other reason, zero is returned. -.SH DESCRIPTION -glutGameModeGet retrieves GLUT game mode information represented by integers. The info -parameter determines what type of game mode information to return. Requesting game mode -information for an invalid GLUT game mode information name returns negative one. -.SH SEE ALSO -glutGet, glutDeviceGet, glutLayerGet, glutGameModeString, glutEnterGameMode, glutLeaveGameMode -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutGameModeString.man b/lib/glut-3.7.6/man/glut/glutGameModeString.man deleted file mode 100644 index df5c58f09..000000000 --- a/lib/glut-3.7.6/man/glut/glutGameModeString.man +++ /dev/null @@ -1,20 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1998. -.\" -.TH glutGameModeString 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutGameModeString - sets the game mode configuration via a string. -.SH SYNTAX -.nf -.LP -void glutGameModeString(const char *string); -.fi -.SH ARGUMENTS -.IP \fIstring\fP 1i -ASCII string for selecting a game mode configuration. -.SH DESCRIPTION -.I XXX fix me -.SH SEE ALSO -glutGameModeGet, glutEnterGameMode, glutLeaveGameMode, glutInitDisplayString -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutGet.man b/lib/glut-3.7.6/man/glut/glutGet.man deleted file mode 100644 index 2f7fd98ef..000000000 --- a/lib/glut-3.7.6/man/glut/glutGet.man +++ /dev/null @@ -1,161 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutGet 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutGet - retrieves simple GLUT state represented by integers. -.SH SYNTAX -.nf -.LP -int glutGet(GLenum state); -.fi -.SH ARGUMENTS -.IP \fIstate\fP 1i -Name of state to retrieve. -.TP 8 -.B GLUT_WINDOW_X -X location in pixels (relative to the screen origin) of the current -window. -.TP 8 -.B GLUT_WINDOW_Y -Y location in pixels (relative to the screen origin) of the current -window. -.TP 8 -.B GLUT_WINDOW_WIDTH -Width in pixels of the current window. -.TP 8 -.B GLUT_WINDOW_HEIGHT -Height in pixels of the current window. -.TP 8 -.B GLUT_WINDOW_BUFFER_SIZE -Total number of bits for current layer of current window's color buffer. For an -RGBA window, this is the sum of GLUT_WINDOW_RED_SIZE, -GLUT_WINDOW_GREEN_SIZE, GLUT_WINDOW_BLUE_SIZE, and -GLUT_WINDOW_ALPHA_SIZE. For color index windows, this is -the size of the color indexes. -.TP 8 -.B GLUT_WINDOW_STENCIL_SIZE -Number of bits in the current layer of current window's stencil buffer. -.TP 8 -.B GLUT_WINDOW_DEPTH_SIZE -Number of bits in the current layer of current window's depth buffer. -.TP 8 -.B GLUT_WINDOW_RED_SIZE -Number of bits of red stored the current layer of current window's color buffer. -Zero if the current layer of the current window is color index. -.TP 8 -.B GLUT_WINDOW_GREEN_SIZE -Number of bits of green stored the current layer of current window's color buffer. -Zero if the current layer of the current window is color index. -.TP 8 -.B GLUT_WINDOW_BLUE_SIZE -Number of bits of blue stored the current layer of current window's color buffer. -Zero if the current layer of the current window is color index. -.TP 8 -.B GLUT_WINDOW_ALPHA_SIZE -Number of bits of alpha stored the current layer of current window's color buffer. -Zero if the current layer of the current window is color index. -.TP 8 -.B GLUT_WINDOW_ACCUM_RED_SIZE -Number of bits of red stored in the current layer of current window's accumulation -buffer. Zero if the current layer of the current window is color index. -.TP 8 -.B GLUT_WINDOW_ACCUM_GREEN_SIZE -Number of bits of green stored in the current layer of current window's -accumulation buffer. Zero if the current layer of the current window is color index. -.TP 8 -.B GLUT_WINDOW_ACCUM_BLUE_SIZE -Number of bits of blue stored in the current layer of current window's -accumulation buffer. Zero if the current layer of the current window is color index. -.TP 8 -.B GLUT_WINDOW_ACCUM_ALPHA_SIZE -Number of bits of alpha stored in the current layer of current window's -accumulation buffer. Zero if the current layer of the current window is color index. -.TP 8 -.B GLUT_WINDOW_DOUBLEBUFFER -One if the current layer of the current window is double buffered, zero otherwise. -.TP 8 -.B GLUT_WINDOW_RGBA -One if the current layer of the current window is RGBA mode, zero otherwise (i.e., -color index). -.TP 8 -.B GLUT_WINDOW_PARENT -The window number of the current window's parent; zero if the -window is a top-level window. -.TP 8 -.B GLUT_WINDOW_NUM_CHILDREN -The number of subwindows the current window has (not counting -children of children). -.TP 8 -.B GLUT_WINDOW_COLORMAP_SIZE -Size of current layer of current window's color index colormap; zero for RGBA -color model layers. -.TP 8 -.B GLUT_WINDOW_NUM_SAMPLES -Number of samples for multisampling for the current layer of the current window. -.TP 8 -.B GLUT_WINDOW_STEREO -One if the current layer of the current window is stereo, zero otherwise. -.TP 8 -.B GLUT_WINDOW_CURSOR -Current cursor for the current window. -.TP 8 -.B GLUT_SCREEN_WIDTH -Width of the screen in pixels. Zero indicates the width is unknown -or not available. -.TP 8 -.B GLUT_SCREEN_HEIGHT -Height of the screen in pixels. Zero indicates the height is -unknown or not available. -.TP 8 -.B GLUT_SCREEN_WIDTH_MM -Width of the screen in millimeters. Zero indicates the width is -unknown or not available. -.TP 8 -.B GLUT_SCREEN_HEIGHT_MM -Height of the screen in millimeters. Zero indicates the height is -unknown or not available. -.TP 8 -.B GLUT_MENU_NUM_ITEMS -Number of menu items in the current menu. -.TP 8 -.B GLUT_DISPLAY_MODE_POSSIBLE -Whether the current display mode is supported or not. -.TP 8 -.B GLUT_INIT_DISPLAY_MODE -The initial display mode bit mask. -.TP 8 -.B GLUT_INIT_WINDOW_X -The X value of the initial window position. -.TP 8 -.B GLUT_INIT_WINDOW_Y -The Y value of the initial window position. -.TP 8 -.B GLUT_INIT_WINDOW_WIDTH -The width value of the initial window size. -.TP 8 -.B GLUT_INIT_WINDOW_HEIGHT -The height value of the initial window size. -.TP 8 -.B GLUT_ELAPSED_TIME -Number of milliseconds since glutInit called (or first call to -glutGet(GLUT_ELAPSED_TIME)). -.TP 8 -.B GLUT_WINDOW_FORMAT_ID -The window system dependent format ID for the current layer of the -current window. On X11 GLUT implementations, this is the X visual ID. -On Win32 GLUT implementations, this is the Win32 Pixel Format -Descriptor number. This value is returned for debugging, benchmarking, -and testing ease. -.SH DESCRIPTION -glutGet retrieves simple GLUT state represented by integers. The -state parameter determines what type of state to return. Where appropriate, window -capability state is returned for the layer in use. GLUT state names -beginning with GLUT_WINDOW_ return state for the current window. -GLUT state names beginning with GLUT_MENU_ return state for the -current menu. Other GLUT state names return global state. Requesting -state for an invalid GLUT state name returns negative one. -.SH SEE ALSO -glutDeviceGet, glutLayerGet, glutGetColor, glutGetWindow, glutGetMenu, glutGetModifiers, glutExtensionSupported -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutGetColor.man b/lib/glut-3.7.6/man/glut/glutGetColor.man deleted file mode 100644 index 8303ad94b..000000000 --- a/lib/glut-3.7.6/man/glut/glutGetColor.man +++ /dev/null @@ -1,33 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutGetColor 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutGetColor - retrieves a red, green, or blue component for a given -color index colormap entry for the layer in use's logical colormap for the -current window. -.SH SYNTAX -.nf -.LP -GLfloat glutGetColor(int cell, int component); -.fi -.SH ARGUMENTS -.IP \fIcell\fP 1i -Color cell index (starting at zero). -.IP \fIcomponent\fP 1i -One of GLUT_RED, GLUT_GREEN, or GLUT_BLUE. -.SH DESCRIPTION -glutGetColor retrieves a red, green, or blue component for a given -color index colormap entry for the current window's logical colormap. -The current window should be a color index window. cell should be -zero or greater and less than the total number of colormap entries for the -window. For valid color indices, the value returned is a floating point -value between 0.0 and 1.0 inclusive. glutGetColor will return -1.0 if -the color index specified is an overlay's transparent index, less than zero, -or greater or equal to the value returned by -glutGet(GLUT_WINDOW_COLORMAP_SIZE), that is if the color index -is transparent or outside the valid range of color indices. -.SH SEE ALSO -glutGet, glutSetColor, glutCopyColormap -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutGetModifiers.man b/lib/glut-3.7.6/man/glut/glutGetModifiers.man deleted file mode 100644 index cf4bed1e8..000000000 --- a/lib/glut-3.7.6/man/glut/glutGetModifiers.man +++ /dev/null @@ -1,35 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutGetModifiers 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutGetModifiers - returns the modifier key state when certain -callbacks were generated. -.SH SYNTAX -.nf -.LP -int glutGetModifiers(void); -.fi -.SH DESCRIPTION -glutGetModifiers returns the modifier key state at the time the -input event for a keyboard, special, or mouse callback is generated. -This routine may only be called while a keyboard, special, or mouse -callback is being handled. The window system is permitted to intercept -window system defined modifier key strokes or mouse buttons, in -which case, no GLUT callback will be generated. This interception -will be independent of use of glutGetModifiers. - -The bitmask components of the returned integer value are: -.TP 8 -.B GLUT_ACTIVE_SHIFT -Set if the Shift modifier or Caps Lock is active. -.TP 8 -.B GLUT_ACTIVE_CTRL -Set if the Ctrl modifier is active. -.TP 8 -.B GLUT_ACTIVE_ALT -Set if the Alt modifier is active. -.SH SEE ALSO -glutSpecialFunc, glutKeyboardFunc, glutMouseFunc -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutIdleFunc.man b/lib/glut-3.7.6/man/glut/glutIdleFunc.man deleted file mode 100644 index 4ba574b39..000000000 --- a/lib/glut-3.7.6/man/glut/glutIdleFunc.man +++ /dev/null @@ -1,73 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutIdleFunc 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutIdleFunc - sets the global idle callback. -.SH SYNTAX -.nf -.LP -void glutIdleFunc(void (*func)(void)); -.fi -.SH ARGUMENTS -.IP \fIfunc\fP 1i -The new idle callback function. -.SH DESCRIPTION -glutIdleFunc sets the global idle callback to be func so a GLUT -program can perform background processing tasks or continuous -animation when window system events are not being received. If -enabled, the idle callback is continuously called when events are not -being received. The callback routine has no parameters. The current -window and current menu will not be changed before the idle callback. -Programs with multiple windows and/or menus should explicitly set the -current window and/or current menu and not rely on its current setting. - -The amount of computation and rendering done in an idle callback -should be minimized to avoid affecting the program's interactive -response. In general, not more than a single frame of rendering should be -done in an idle callback. - -Passing NULL to glutIdleFunc disables the generation of the idle -callback. -.SH EXAMPLE -A typical idle callback to animate a window might look like: -.nf -.LP - void - idle(void) - { - time += 0.05; - glutSetWindow(window); - glutPostRedisplay(); - } -.fi -.LP -Notice how the idle callback does not do any actual drawing; it only -advances the time scene state global variable. That -is left to the window's display callback which will be triggered -by the call to glutPostRedisplay. -.LP -If you use the idle callback for animation, you should be sure to stop -rendering when the window is not visible. This is easy to set up -with a visibility callback. For example: -.nf -.LP - void - visible(int vis) - { - if (vis == GLUT_VISIBLE) - glutIdleFunc(idle); - else - glutIdleFunc(NULL); - } -.fi -.LP -If you do use the idle callback for animation, one thing you should -.I not -do is setup the idle callback before calling glutMainLoop. It is much -better to use the visibility callback to install idle callback when the -window first becomes visible on the screen. -.SH SEE ALSO -glutTimerFunc, glutVisibilityFunc -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutIgnoreKeyRepeat.man b/lib/glut-3.7.6/man/glut/glutIgnoreKeyRepeat.man deleted file mode 100644 index 3860d67db..000000000 --- a/lib/glut-3.7.6/man/glut/glutIgnoreKeyRepeat.man +++ /dev/null @@ -1,30 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1998. -.\" -.TH glutIgnoreKeyRepeat 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutIgnoreKeyRepeat - determines if auto repeat keystrokes are reported to the current window -.SH SYNTAX -.nf -.LP -void glutIgnoreKeyRepeat(int ignore); -.fi -.SH ARGUMENTS -.IP \fIignore\fP 1i -Non-zero indicates auto repeat keystrokes should not be reported by the keyboard and special callbacks; zero indicates that auto repeat keystrokes will be reported. -.SH DESCRIPTION -glutIgnoreKeyRepeat determines if auto repeat keystrokes are reported to the current window. -The ignore auto repeat state of a window can be queried with -glutDeviceGet(GLUT_DEVICE_IGNORE_KEY_REPEAT). - -Ignoring auto repeated keystrokes is generally done in conjunction -with using the glutKeyboardUpFunc and glutSpecialUpFunc callbacks -to repeat key releases. If you do not ignore auto repeated keystrokes, -your GLUT application will experience repeated release/press callbacks. -Games using the keyboard will typically want to ignore key repeat. -.SH GLUT IMPLEMENTATION NOTES FOR X11 -X11 sends KeyPress events repeatedly when the window system's global auto repeat is enabled. glutIgnoreKeyRepeat can prevent these auto repeated keystrokes from being reported as keyboard or special callbacks, but there is still some minimal overhead by the X server to continually stream KeyPress events to the GLUT application. The glutSetKeyRepeat routine can be used to actually disable the global sending of auto repeated KeyPress events. Note that glutSetKeyRepeat affects the global window system auto repeat state so other applications will not auto repeat if you disable auto repeat globally through glutSetKeyRepeat. -.SH SEE ALSO -glutSetKeyRepeat, glutDeviceGet, glutKeyboardFunc, glutKeyboardUpFunc, glutSpecialFunc, glutSpecialUpFunc -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutInit.man b/lib/glut-3.7.6/man/glut/glutInit.man deleted file mode 100644 index c64cf37d6..000000000 --- a/lib/glut-3.7.6/man/glut/glutInit.man +++ /dev/null @@ -1,81 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutInit 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutInit - initialize the GLUT library. -.SH SYNTAX -.nf -.LP -void glutInit(int *argcp, char **argv); -.fi -.SH ARGUMENTS -.IP \fIargcp\fP 1i -A pointer to the program's unmodified argc variable from main. -Upon return, the value pointed to by argcp will be updated, -because glutInit extracts any command line options intended -for the GLUT library. -.IP \fIargv\fP 1i -The program's unmodified argv variable from main. Like -argcp, the data for argv will be updated because glutInit -extracts any command line options understood by the GLUT -library. -.SH DESCRIPTION -glutInit will initialize the GLUT library and negotiate a session with -the window system. During this process, glutInit may cause the -termination of the GLUT program with an error message to the user if -GLUT cannot be properly initialized. Examples of this situation include -the failure to connect to the window system, the lack of window system -support for OpenGL, and invalid command line options. -.LP -glutInit also processes command line options, but the specific options -parse are window system dependent. -.SH X IMPLEMENTATION NOTES -The X Window System specific options parsed by glutInit are as -follows: -.TP 8 -.B \-display \fIDISPLAY\fP -Specify the X server to connect to. If not specified, the value of the -DISPLAY environment variable is used. -.TP 8 -.B \-geometry \fIWxH+X+Y\fP -Determines where window's should be created on the screen. The -parameter following -geometry should be formatted as a -standard X geometry specification. The effect of using this option -is to change the GLUT initial size and initial position the same as -if glutInitWindowSize or glutInitWindowPosition were -called directly. -.TP 8 -.B \-iconic -Requests all top-level windows be created in an iconic state. -.TP 8 -.B \-indirect -Force the use of indirect OpenGL rendering contexts. -.TP 8 -.B \-direct -Force the use of direct OpenGL rendering contexts (not all GLX -implementations support direct rendering contexts). A fatal error -is generated if direct rendering is not supported by the OpenGL -implementation. - -If neither -indirect or -direct are used to force a particular -behavior, GLUT will attempt to use direct rendering if possible -and otherwise fallback to indirect rendering. -.TP 8 -.B \-gldebug -After processing callbacks and/or events, check if there are any -OpenGL errors by calling glGetError. If an error is reported, -print out a warning by looking up the error code with -gluErrorString. Using this option is helpful in detecting -OpenGL run-time errors. -.TP 8 -.B \-sync -Enable synchronous X protocol transactions. This option makes it -easier to track down potential X protocol errors. -.SH SEE ALSO -glutCreateWindow, -glutInitWindowPosition, -glutInitWindowSize, -glutMainLoop -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutInitDisplayMode.man b/lib/glut-3.7.6/man/glut/glutInitDisplayMode.man deleted file mode 100644 index 6e91baf23..000000000 --- a/lib/glut-3.7.6/man/glut/glutInitDisplayMode.man +++ /dev/null @@ -1,93 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutInitDisplayMode 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutInitDisplayMode - sets the initial display mode. -.SH SYNTAX -.nf -.LP -void glutInitDisplayMode(unsigned int mode); -.fi -.SH ARGUMENTS -.IP \fImode\fP 1i -Display mode, normally the bitwise {\em OR}-ing of GLUT display mode bit masks. -See values below: -.TP 8 -.B GLUT_RGBA -Bit mask to select an RGBA mode window. This is the default if -neither GLUT_RGBA nor GLUT_INDEX are specified. -.TP 8 -.B GLUT_RGB -An alias for GLUT_RGBA. -.TP 8 -.B GLUT_INDEX -Bit mask to select a color index mode window. This overrides -GLUT_RGBA if it is also specified. -.TP 8 -.B GLUT_SINGLE -Bit mask to select a single buffered window. This is the default if -neither GLUT_DOUBLE or GLUT_SINGLE are specified. -.TP 8 -.B GLUT_DOUBLE -Bit mask to select a double buffered window. This overrides -GLUT_SINGLE if it is also specified. -.TP 8 -.B GLUT_ACCUM -Bit mask to request a window with an accumulation buffer. -.TP 8 -.B GLUT_ALPHA -Bit mask to request a window with an alpha component to the color -buffer(s). -.TP 8 -.B GLUT_DEPTH -Bit mask to request a window with a depth buffer. -.TP 8 -.B GLUT_STENCIL -Bit mask to request a window with a stencil buffer. -.TP 8 -.B GLUT_MULTISAMPLE -Bit mask to request a window with multisampling support. If -multisampling is not available, a non-multisampling window will -automatically be chosen. Note: both the OpenGL client-side and -server-side implementations must support the -GLX_SAMPLE_SGIS extension for multisampling to be available. -.TP 8 -.B GLUT_STEREO -Bit mask to select a stereo window. -.TP 8 -.B GLUT_LUMINANCE -Bit mask to select a window with a ``luminance'' color model. -This model provides the functionality of OpenGL's RGBA color -model, but the green and blue components are not maintained in -the frame buffer. Instead each pixel's red component is converted -to an index between zero and -glutGet(GLUT_WINDOW_COLORMAP_SIZE)-1 and looked up in -a per-window color map to determine the color of pixels within -the window. The initial colormap of GLUT_LUMINANCE windows -is initialized to be a linear gray ramp, but can be modified with -GLUT's colormap routines. -.SH DESCRIPTION -The initial display mode is used when creating top-level windows, -subwindows, and overlays to determine the OpenGL display mode for -the to-be-created window or overlay. - -Note that GLUT_RGBA selects the RGBA color model, but it does not -request any bits of alpha (sometimes called an alpha buffer or destination -alpha) be allocated. To request alpha, specify GLUT_ALPHA. The same -applies to GLUT_LUMINANCE. - -Note that some bits "request" a capability and other bits "select" -a capability. A requestable capability may be assigned to the created -window even if the bit for the capability was not set. For example, -GLUT may create a window with a depth buffer even though GLUT_DEPTH -is not specified. - -The glutInitDisplayString routine provides a more powerful way to -select frame buffer capabilities for GLUT windows. -.SH GLUT_LUMINANCE IMPLEMENTATION NOTES -GLUT_LUMINANCE is not supported on most OpenGL platforms. -.SH SEE ALSO -glutInit, glutCreateWindow, glutInitDisplayString -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutInitDisplayString.man b/lib/glut-3.7.6/man/glut/glutInitDisplayString.man deleted file mode 100644 index 8c07e434f..000000000 --- a/lib/glut-3.7.6/man/glut/glutInitDisplayString.man +++ /dev/null @@ -1,250 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutInitDisplayString 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutInitDisplayString - sets the initial display mode via a string. -.SH SYNTAX -.nf -.LP -void glutInitDisplayString(char *string); -.fi -.SH ARGUMENTS -.IP \fIstring\fP 1i -Display mode description string, see below. -.SH DESCRIPTION -The initial display mode description string is used when creating top-level windows, -subwindows, and overlays to determine the OpenGL display mode for -the to-be-created window or overlay. - -The string is a list of zero or more capability descriptions separated by -spaces and tabs. Each capability description is a capability name that -is optionally followed by a comparator and a numeric value. For -example, "double" and "depth>=12" are both valid criteria. - -The capability descriptions are translated into a set of criteria -used to select the appropriate frame buffer configuration. - -The criteria are matched in -strict left to right order of precdence. That is, the first specified -criteria (leftmost) takes precedence over the later criteria for non-exact -criteria (greater than, less than, etc. comparators). Exact -criteria (equal, not equal compartors) must match exactly so precedence is -not relevant. - -The numeric value is an integer that is parsed according to ANSI C's -strtol(str, strptr, 0) behavior. This means that decimal, octal -(leading 0), and hexidecimal values (leading 0x) are accepeted. - -The valid compartors are: -.TP 8 -.B = -Equal. -.TP 8 -.B != -Not equal. -.TP 8 -.B < -Less than and preferring larger difference (the least is best). -.TP 8 -.B > -Greeater than and preferring larger differences (the most is best). -.TP 8 -.B <= -Less than or equal and preferring larger difference (the least is best). -.TP 8 -.B >= -Greater than or equal and preferring more instead of less. -This comparator is useful for allocating resources like color -precsion or depth buffer precision where the maximum precison -is generally preferred. Contrast with the tilde (~) comprator. -.TP 8 -.B ~ -Greater than or equal but preferring less instead of more. This -compartor is useful for allocating resources such as stencil bits or -auxillary color buffers where you would rather not over allocate. - -When the compartor and numeric value are not specified, each -capability name has a different default (one default is to require -a a compartor and numeric value). - -.LP -The valid capability names are: -.TP 8 -.B alpha -Alpha color buffer precision in bits. -Default is ">=1". -.TP 8 -.B acca -Red, green, blue, and alpha accumulation buffer precision in bits. -Default is ">=1" for red, green, blue, and alpha capabilities. -.TP 8 -.B acc -Red, green, and green accumulation buffer precision in bits and zero -bits of alpha accumulation buffer precision. -Default is ">=1" for red, green, and blue capabilities, and -"~0" for the alpha capability. -.TP 8 -.B blue -Blue color buffer precision in bits. -Default is ">=1". -.TP 8 -.B buffer -Number of bits in the color index color buffer. -Default is ">=1". -.TP 8 -.B conformant -Boolean indicating if the frame buffer configuration is conformant or -not. Conformance information is based on GLX's EXT_visual_rating -extension if supported. If the extension is not supported, all visuals -are assumed conformat. -Default is "=1". -.TP 8 -.B depth -Number of bits of precsion in the depth buffer. -Default is ">=12". -.TP 8 -.B double -Boolean indicating if the color buffer is double buffered. -Default is "=1". -.TP 8 -.B green -Green color buffer precision in bits. -Default is ">=1". -.TP 8 -.B index -Boolean if the color model is color index or not. True is color index. -Default is ">=1". -.TP 8 -.B num -A special capability name indicating where the value represents the -Nth frame buffer configuration matching the description string. -When not specified, glutInitDisplayString also returns the first -(best matching) configuration. num requires a compartor and -numeric value. -.TP 8 -.B red -Red color buffer precision in bits. -Default is ">=1". -.TP 8 -.B rgba -Number of bits of red, green, blue, and alpha in the RGBA color buffer. -Default is ">=1" for red, green, blue, and alpha capabilities, -and "=1" for the RGBA color model capability. -.TP 8 -.B rgb -Number of bits of red, green, and blue in the RGBA color buffer and -zero bits of alpha color buffer precision. -Default is ">=1" for the red, green, and blue capabilities, and "~0" for -alpha capability, and "=1" for the RGBA color model capability. -.TP 8 -.B luminance -Number of bits of red in the RGBA and zero bits of green, blue (alpha -not specified) of color buffer precision. -Default is ">=1" for the red capabilitis, and "=0" for the -green and blue capabilities, and "=1" for the RGBA color model -capability, and, for X11, "=1" for the StaticGray ("xstaticgray") -capability. - -SGI InfiniteReality (and other future machines) support a 16-bit -luminance (single channel) display mode (an additional 16-bit alpha -channel can also be requested). The red channel maps to gray scale and -green and blue channels are not available. A 16-bit precision -luminance display mode is often appropriate for medical imaging -applications. Do not expect many machines to support extended -precision luminance display modes. -.TP 8 -.B stencil -Number of bits in the stencil buffer. -.TP 8 -.B single -Boolean indicate the color buffer is single buffered. -Double buffer capability "=1". -.TP 8 -.B stereo -Boolean indicating the color buffer is supports OpenGL-style stereo. -Default is "=1". -.TP 8 -.B samples -Indicates the number of multisamples to use based on GLX's -SGIS_multisample extension (for antialiasing). -Default is "<=4". This default means that a GLUT application can -request multipsampling if available by simply specifying "samples". -.TP 8 -.B slow -Boolean indicating if the frame buffer configuration is slow or -not. Slowness information is based on GLX's EXT_visual_rating -extension if supported. If the extension is not supported, all visuals -are assumed fast. Note that slowness is a relative designation relative -to other frame buffer configurations available. The intent of the -slow capability is to help programs avoid frame buffer configurations -that are slower (but perhaps higher precision) for the current machine. -Default is ">=0". This default means that slow visuals are used in -preference to fast visuals, but fast visuals will still be allowed. -.TP 8 -.B win32pfd -Only recognized on GLUT implementations for Win32, this capability -name matches the Win32 Pixel Format Descriptor by numer. win32pfd -requires a compartor and numeric value. -.TP 8 -.B xvisual -Only recongized on GLUT implementations for the X Window System, this -capability name matches the X visual ID by number. -xvisual requires a compartor and numeric value. -.TP 8 -.B xstaticgray -Only recongized on GLUT implementations for the X Window System, -boolean indicating if the frame buffer configuration's X visual is -of type StaticGray. -Default is "=1". -.TP 8 -.B xgrayscale -Only recongized on GLUT implementations for the X Window System, -boolean indicating if the frame buffer configuration's X visual is -of type GrayScale. -Default is "=1". -.TP 8 -.B xstaticcolor -Only recongized on GLUT implementations for the X Window System, -boolean indicating if the frame buffer configuration's X visual is -of type StaticColor. -Default is "=1". -.TP 8 -.B xpseudocolor -Only recongized on GLUT implementations for the X Window System, -boolean indicating if the frame buffer configuration's X visual is -of type PsuedoColor. -Default is "=1". -.TP 8 -.B xtruecolor -Only recongized on GLUT implementations for the X Window System, -boolean indicating if the frame buffer configuration's X visual is -of type TrueColor. -Default is "=1". -.TP 8 -.B xdirectcolor -Only recongized on GLUT implementations for the X Window System, -boolean indicating if the frame buffer configuration's X visual is -of type DirectColor. -Default is "=1". -.LP -Unspecifed capability descriptions will result in unspecified -criteria being generated. These unspecified criteria help -glutInitDisplayString behave sensibly with terse -display mode description strings. -.SH EXAMPLE -Here is an examples using glutInitDisplayString: -.nf -.LP - glutInitDisplayString("stencil~2 rgb double depth>=16 samples"); -.LP -.fi -The above call requests a window with an RGBA color model (but requesting -no bits of alpha), a depth buffer with at least 16 bits of precsion but -preferring more, mutlisampling -if available, and at least 2 bits of stencil (favoring less stencil -to more as long as 2 bits are available). -.SH SEE ALSO -glutInit, glutCreateWindow, glutInitDisplayMode -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutInitWindowPosition.man b/lib/glut-3.7.6/man/glut/glutInitWindowPosition.man deleted file mode 100644 index 20b710a44..000000000 --- a/lib/glut-3.7.6/man/glut/glutInitWindowPosition.man +++ /dev/null @@ -1,74 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutInitWindowPosition 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutInitWindowPosition, glutInitWindowSize - set the -initial window position and size respectively. -.SH SYNTAX -.nf -.LP -void glutInitWindowSize(int width, int height); -void glutInitWindowPosition(int x, int y); -.fi -.SH ARGUMENTS -.IP \fIwidth\fP 1i -Width in pixels. -.IP \fIheight\fP 1i -Height in pixels. -.IP \fIx\fP 1i -Window X location in pixels. -.IP \fIy\fP 1i -Window Y location in pixels. -.SH DESCRIPTION -Windows created by glutCreateWindow will be requested to be -created with the current initial window position and size. - -The initial value of the initial window position GLUT state is -1 and -1. -If either the X or Y component to the initial window position is negative, -the actual window position is left to the window system to determine. -The initial value of the initial window size GLUT state is 300 by 300. -The initial window size components must be greater than zero. - -The intent of the initial window position and size values is to provide a -suggestion to the window system for a window's initial size and -position. The window system is not obligated to use this information. -Therefore, GLUT programs should not assume the window was created -at the specified size or position. A GLUT program should use the -window's reshape callback to determine the true size of the window. -.SH EXAMPLE -If you would like your GLUT program to default to starting at a given -screen location and at a given size, but you would also like to let -the user override these defaults via a command line argument (such as --geometry for X11), call glutInitWindowSize and glutInitWindowPosition -.I before -your call to glutInit. For example: -.nf -.LP - int main(int argc, char **argv) - { - glutInitWindowSize(500, 300); - glutInitWindowPosition(100, 100); - glutInit(&argc, argv); - ... - } -.fi -.LP -However, if you'd like to force your program to start up at a given -size, call glutInitWindowSize and glutInitWindowPosition -.I after -your call to glutInit. For example: -.nf -.LP - int main(int argc, char **argv) - { - glutInit(&argc, argv); - glutInitWindowSize(500, 300); - glutInitWindowPosition(100, 100); - ... - } -.fi -.SH SEE ALSO -glutInit, glutCreateWindow, glutCreateSubWindow, glutReshapeFunc, glutGet -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutJoystickFunc.man b/lib/glut-3.7.6/man/glut/glutJoystickFunc.man deleted file mode 100644 index 1e11919e3..000000000 --- a/lib/glut-3.7.6/man/glut/glutJoystickFunc.man +++ /dev/null @@ -1,67 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1998. -.\" -.TH glutJoystickFunc 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutJoystickFunc - sets the joystick callback for the current window. -.SH SYNTAX -.nf -.LP -void glutJoystickFunc(void (*func)(unsigned int buttonMask, - int x, int y, int z), int pollInterval); -.fi -.SH ARGUMENTS -.IP \fIfunc\fP 1i -The new joystick callback function. -.IP \fIpollInterval\fP 1i -Joystick polling interval in milliseconds. -.SH DESCRIPTION -glutJoystickFunc sets the joystick callback for the current window. - -The joystick callback is called either due to polling of the joystick -at the uniform timer interval specified by pollInterval (in milliseconds) or -in response to calling glutForceJoystickFunc. If the pollInterval is -non-positive, no joystick polling is performed and the GLUT application -must frequently (usually from an idle callback) call glutForceJoystickFunc. - -The joystick buttons are reported by the callback's buttonMask parameter. -The constants GLUT_JOYSTICK_BUTTON_A (0x1), GLUT_JOYSTICK_BUTTON_B (0x2), -GLUT_JOYSTICK_BUTTON_C (0x4), and GLUT_JOYSTICK_BUTTON_D (0x8) are provided -for programming convience. - -The x, y, and z callback parameters report the X, Y, and Z axes of the -joystick. The joystick is centered at (0,0,0). X, Y, and Z are -scaled to range between -1000 and 1000. Moving the joystick left reports -negative X; right reports positive X. Pulling the stick towards -you reports negative Y; push the stick away from you reports positive Y. -If the joystick has a third axis (rudder or up/down), down reports -negative Z; up reports positive Z. - -Passing a NULL func to glutJoystickFunc -disables the generation of joystick callbacks. Without a joystick -callback registered, glutForceJoystickFunc does nothing. - -When a new window is created, no joystick callback is -initially registered. -.SH LIMITATIONS -The GLUT joystick callback only reports the first 3 axes and 32 buttons. -GLUT supports only a single joystick. -.SH GLUT IMPLEMENTATION NOTES FOR X11 -The GLUT 3.7 implementation of GLUT for X11 supports the joystick API, but -not joystick input. A future implementation of GLUT for X11 may -add joystick support. -.SH GLUT IMPLEMENTATION NOTES FOR WIN32 -The GLUT 3.7 implementation of GLUT for Win32 supports the joystick API -and joystick input, but does so through the dated joySetCapture and -joyGetPosEx Win32 Multimedia API. The GLUT 3.7 joystick support for -Win32 has all the limitations of the Win32 Multimedia API joystick support. -A future implementation of GLUT for Win32 may use DirectInput. -.SH GLUT IMPLEMENTATION NOTES FOR NON-ANALOG JOYSTICKS -If the connected joystick does not return (x,y,z) as a continuous range -(for example, an 8 position Atari 2600 joystick), the implementation should -report the most extreme (x,y,z) location. That is, if a 2D joystick is -pushed to the upper left, report (-1000,1000,0). -.SH SEE ALSO -glutForceJoystickFunc, glutMotionFunc, glutMouseFunc, glutSpaceballButtonFunc, glutSpaceballMotionFunc, glutButtonBoxFunc, glutTabletButtonFunc, glutDeviceGet -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutKeyboardFunc.man b/lib/glut-3.7.6/man/glut/glutKeyboardFunc.man deleted file mode 100644 index 945519043..000000000 --- a/lib/glut-3.7.6/man/glut/glutKeyboardFunc.man +++ /dev/null @@ -1,38 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutKeyboardFunc 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutKeyboardFunc - sets the keyboard callback for the current window. -.SH SYNTAX -.nf -.LP -void glutKeyboardFunc(void (*func)(unsigned char key, - int x, int y)); -.fi -.SH ARGUMENTS -.IP \fIfunc\fP 1i -The new keyboard callback function. -.SH DESCRIPTION -glutKeyboardFunc sets the keyboard callback for the current window. -When a user types into the window, each key press generating an ASCII -character will generate a keyboard callback. The key callback parameter -is the generated ASCII character. The state of modifier keys such as Shift -cannot be determined directly; their only effect will be on the returned -ASCII data. The x and y callback parameters indicate the mouse location -in window relative coordinates when the key was pressed. When a new -window is created, no keyboard callback is initially registered, and ASCII -key strokes in the window are ignored. Passing NULL to -glutKeyboardFunc disables the generation of keyboard callbacks. - -During a keyboard callback, glutGetModifiers may be called to -determine the state of modifier keys when the keystroke generating the -callback occurred. - -Use glutSpecialFunc for a means to detect non-ASCII key -strokes. -.SH SEE ALSO -glutKeyboardUpFunc, -glutSpecialFunc, glutCreateWindow, glutMouseFunc, glutSpaceballButtonFunc, glutButtonBoxFunc, glutTabletButtonFunc, glutGetModifiers -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutKeyboardUpFunc.man b/lib/glut-3.7.6/man/glut/glutKeyboardUpFunc.man deleted file mode 100644 index 66fc63037..000000000 --- a/lib/glut-3.7.6/man/glut/glutKeyboardUpFunc.man +++ /dev/null @@ -1,47 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1998. -.\" -.TH glutKeyboardUpFunc 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutKeyboardUpFunc - sets the keyboard up (key release) callback for the current window. -.SH SYNTAX -.nf -.LP -void glutKeyboardUpFunc(void (*func)(unsigned char key, - int x, int y)); -.fi -.SH ARGUMENTS -.IP \fIfunc\fP 1i -The new keyboard up callback function. -.SH DESCRIPTION -glutKeyboardFunc sets the keyboard up (key release) callback for the current window. -When a user types into the window, each key release matching an ASCII -character will generate a keyboard up callback. The key callback parameter -is the generated ASCII character. The state of modifier keys such as Shift -cannot be determined directly; their only effect will be on the returned -ASCII data. The x and y callback parameters indicate the mouse location -in window relative coordinates when the key was pressed. When a new -window is created, no keyboard callback is initially registered, and ASCII -key strokes in the window are ignored. Passing NULL to -glutKeyboardFunc disables the generation of keyboard callbacks. - -During a keyboard up callback, glutGetModifiers may be called to -determine the state of modifier keys when the keystroke generating the -callback occurred. - -To avoid the reporting of key release/press pairs due to auto -repeat, use glutIgnoreKeyRepeat to ignore auto repeated keystrokes. - -There is no guarantee that the keyboard press callback will match -the exact ASCII character as the keyboard up callback. For example, -the key down may be for a lowercase b, but the key release may -report an uppercase B if the shift state has changed. The same -applies to symbols and control characters. The precise behavior -is window system dependent. - -Use glutSpecialUpFunc for a means to detect non-ASCII key -releases. -.SH SEE ALSO -glutKeyboardFunc, glutSpecialUpFunc, glutSpecialFunc, glutCreateWindow, glutMouseFunc, glutSpaceballButtonFunc, glutButtonBoxFunc, glutTabletButtonFunc, glutGetModifiers, glutIgnoreKeyRepeat -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutLayerGet.man b/lib/glut-3.7.6/man/glut/glutLayerGet.man deleted file mode 100644 index 8c11c76e8..000000000 --- a/lib/glut-3.7.6/man/glut/glutLayerGet.man +++ /dev/null @@ -1,51 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutLayerGet 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutLayerGet - retrieves GLUT state pertaining to the layers of the -current window. -.SH SYNTAX -.nf -.LP -int glutLayerGet(GLenum info); -.fi -.SH ARGUMENTS -.IP \fIinfo\fP 1i -Name of device information to retrieve. -.TP 8 -.B GLUT_OVERLAY_POSSIBLE -Whether an overlay could be established for the current window -given the current initial display mode. If false, -glutEstablishOverlay will fail with a fatal error if called. -.TP 8 -.B GLUT_LAYER_IN_USE -Either GLUT_NORMAL or GLUT_OVERLAY depending on whether -the normal plane or overlay is the layer in use. -.TP 8 -.B GLUT_HAS_OVERLAY -If the current window has an overlay established. -.TP 8 -.B GLUT_TRANSPARENT_INDEX -The transparent color index of the overlay of the current window; -negative one is returned if no overlay is in use. -.TP 8 -.B GLUT_NORMAL_DAMAGED -True if the normal plane of the current window has damaged (by -window system activity) since the last display callback was -triggered. Calling glutPostRedisplay will not set this true. -.TP 8 -.B GLUT_OVERLAY_DAMAGED -True if the overlay plane of the current window has damaged (by -window system activity) since the last display callback was -triggered. Calling glutPostRedisplay or -glutPostOverlayRedisplay will not set this true. Negative -one is returned if no overlay is in use. -.SH DESCRIPTION -glutLayerGet retrieves GLUT layer information for the current -window represented by integers. The info parameter determines what -type of layer information to return. -.SH SEE ALSO -glutEstablishOverlay, glutUseOverlay, glutCreateWindow, glutSetColor -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutMainLoop.man b/lib/glut-3.7.6/man/glut/glutMainLoop.man deleted file mode 100644 index 5e222f0e0..000000000 --- a/lib/glut-3.7.6/man/glut/glutMainLoop.man +++ /dev/null @@ -1,20 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutMainLoop 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutMainLoop - enters the GLUT event processing loop. -.SH SYNTAX -.nf -.LP -void glutMainLoop(void); -.fi -.SH DESCRIPTION -glutMainLoop enters the GLUT event processing loop. This routine -should be called at most once in a GLUT program. Once called, this -routine will never return. It will call as necessary any callbacks that have -been registered. -.SH SEE ALSO -glutInit -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutMenuStatusFunc.man b/lib/glut-3.7.6/man/glut/glutMenuStatusFunc.man deleted file mode 100644 index e52a99a8c..000000000 --- a/lib/glut-3.7.6/man/glut/glutMenuStatusFunc.man +++ /dev/null @@ -1,50 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutMenuStatusFunc 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutMenuStatusFunc - sets the global menu status callback. -.SH SYNTAX -.nf -.LP -void glutMenuStatusFunc(void (*func)(int status, int x, int y)); -void glutMenuStateFunc(void (*func)(int status)); -.fi -.SH ARGUMENTS -.IP \fIfunc\fP 1i -The new menu status (or state) callback function. -.SH DESCRIPTION -glutMenuStatusFunc sets the global menu status callback so a GLUT -program can determine when a menu is in use or not. When a menu -status callback is registered, it will be called with the value -GLUT_MENU_IN_USE for its value parameter when pop-up menus are -in use by the user; and the callback will be called with the value -GLUT_MENU_NOT_IN_USE for its status parameter when pop-up -menus are no longer in use. The x and y parameters indicate the location -in window coordinates of the button press that caused the menu to go -into use, or the location where the menu was released (may be outside the -window). The func parameter names the callback function. Other -callbacks continue to operate (except mouse motion callbacks) when -pop-up menus are in use so the menu status callback allows a program to -suspend animation or other tasks when menus are in use. The cascading -and unmapping of sub-menus from an initial pop-up menu does not -generate menu status callbacks. There is a single menu status callback for -GLUT. - -When the menu status callback is called, the current menu will be set to -the initial pop-up menu in both the GLUT_MENU_IN_USE and -GLUT_MENU_NOT_IN_USE cases. The current window will be set to the -window from which the initial menu was popped up from, also in both -cases. - -Passing NULL to glutMenuStatusFunc disables the generation of the -menu status callback. - -glutMenuStateFunc is a deprecated version of the -glutMenuStatusFunc routine. The only difference is -glutMenuStateFunc callback prototype does not deliver the two -additional x and y coordinates. -.SH SEE ALSO -glutCreateMenu, glutCreateWindow -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutMotionFunc.man b/lib/glut-3.7.6/man/glut/glutMotionFunc.man deleted file mode 100644 index 09b37ddf9..000000000 --- a/lib/glut-3.7.6/man/glut/glutMotionFunc.man +++ /dev/null @@ -1,34 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutMotionFunc 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutMotionFunc, glutPassiveMotionFunc - set the motion and -passive motion callbacks respectively for the current window. -.SH SYNTAX -.nf -.LP -void glutMotionFunc(void (*func)(int x, int y)); -void glutPassiveMotionFunc(void (*func)(int x, int y)); -.fi -.SH ARGUMENTS -.IP \fIfunc\fP 1i -The new motion or passive motion callback function. -.SH DESCRIPTION -glutMotionFunc and glutPassiveMotionFunc set the motion and -passive motion callback respectively for the current window. The motion -callback for a window is called when the mouse moves within the window -while one or more mouse buttons are pressed. The passive motion callback -for a window is called when the mouse moves within the window while -no mouse buttons are pressed. - -The x and y callback parameters indicate the mouse location in window -relative coordinates. - -Passing NULL to glutMotionFunc or glutPassiveMotionFunc -disables the generation of the mouse or passive motion callback -respectively. -.SH SEE ALSO -glutMouseFunc, glutSpaceballMotionFunc, glutTabletMotionFunc -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutMouseFunc.man b/lib/glut-3.7.6/man/glut/glutMouseFunc.man deleted file mode 100644 index 0cfc95f1b..000000000 --- a/lib/glut-3.7.6/man/glut/glutMouseFunc.man +++ /dev/null @@ -1,45 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutMouseFunc 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutMouseFunc - sets the mouse callback for the current window. -.SH SYNTAX -.nf -.LP -void glutMouseFunc(void (*func)(int button, int state, - int x, int y)); -.fi -.SH ARGUMENTS -.IP \fIfunc\fP 1i -The new mouse callback function. -.SH DESCRIPTION -glutMouseFunc sets the mouse callback for the current window. When a -user presses and releases mouse buttons in the window, each press and -each release generates a mouse callback. The button parameter is one of -GLUT_LEFT_BUTTON, GLUT_MIDDLE_BUTTON, or -GLUT_RIGHT_BUTTON. For systems with only two mouse buttons, it may -not be possible to generate GLUT_MIDDLE_BUTTON callback. For systems -with a single mouse button, it may be possible to generate only a -GLUT_LEFT_BUTTON callback. The state parameter is either GLUT_UP -or GLUT_DOWN indicating whether the callback was due to a release or -press respectively. The x and y callback parameters indicate the window -relative coordinates when the mouse button state changed. If a -GLUT_DOWN callback for a specific button is triggered, the program can -assume a GLUT_UP callback for the same button will be generated -(assuming the window still has a mouse callback registered) when the -mouse button is released even if the mouse has moved outside the window. - -If a menu is attached to a button for a window, mouse callbacks will not -be generated for that button. - -During a mouse callback, glutGetModifiers may be called to -determine the state of modifier keys when the mouse event generating the -callback occurred. - -Passing NULL to glutMouseFunc disables the generation of mouse -callbacks. -.SH SEE ALSO -glutKeyboardFunc, glutMotionFunc, glutSpaceballButtonFunc, glutButtonBoxFunc, glutTabletButtonFunc, glutGetModifiers -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutOverlayDisplayFunc.man b/lib/glut-3.7.6/man/glut/glutOverlayDisplayFunc.man deleted file mode 100644 index 524704be0..000000000 --- a/lib/glut-3.7.6/man/glut/glutOverlayDisplayFunc.man +++ /dev/null @@ -1,49 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutOverlayDisplayFunc 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutOverlayDisplayFunc - sets the overlay display callback for the current window. -.SH SYNTAX -.nf -.LP -void glutOverlayDisplayFunc(void (*func)(void)); -.fi -.SH ARGUMENTS -.IP \fIfunc\fP 1i -The new overlay display callback function. -.SH DESCRIPTION -glutDisplayFunc sets the overlay display callback for the current -window. The overlay display callback is functionally the same as the -window's display callback except that the overlay display callback is used -to redisplay the window's overlay. - -When GLUT determines that the overlay plane for the window needs to -be redisplayed, the overlay display callback for the window is called. -Before the callback, the current window is set to the window needing to be -redisplayed and the layer in use is set to the overlay. The overlay display -callback is called with no parameters. The entire overlay region should be -redisplayed in response to the callback (this includes ancillary buffers if -your program depends on their state). - -GLUT determines when the overlay display callback should be triggered -based on the window's overlay redisplay state. The overlay redisplay state -for a window can be either set explicitly by calling -glutPostOverlayRedisplay or implicitly as the result of window -damage reported by the window system. Multiple posted overlay -redisplays for a window are coalesced by GLUT to minimize the number -of overlay display callbacks called. - -Upon return from the overlay display callback, the overlay damaged state -of the window (returned by calling -glutLayerGet(GLUT_OVERLAY_DAMAGED) is cleared. - -The overlay display callback can be deregistered by passing NULL to -glutOverlayDisplayFunc. The overlay display callback is initially -NULL when an overlay is established. See glutDisplayFunc to -understand how the display callback alone is used if an overlay display -callback is not registered. -.SH SEE ALSO -glutDisplayFunc, glutPostOverlayRedisplay -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutPopWindow.man b/lib/glut-3.7.6/man/glut/glutPopWindow.man deleted file mode 100644 index dde6e8fb3..000000000 --- a/lib/glut-3.7.6/man/glut/glutPopWindow.man +++ /dev/null @@ -1,24 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutPopWindow 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutPopWindow, glutPushWindow - change the stacking order of the current window relative to its siblings. -.SH SYNTAX -.nf -.LP -void glutPopWindow(void); -void glutPushWindow(void); -.fi -.SH DESCRIPTION -glutPopWindow and glutPushWindow work on both top-level -windows and subwindows. The effect of pushing and popping windows -does not take place immediately. Instead the push or pop is saved for -execution upon return to the GLUT event loop. Subsequent push or pop -requests on a window replace the previously saved request for that -window. The effect of pushing and popping top-level windows is subject -to the window system's policy for restacking windows. -.SH SEE ALSO -glutShowWindow, glutIconifyWindow, glutHideWindow -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutPositionWindow.man b/lib/glut-3.7.6/man/glut/glutPositionWindow.man deleted file mode 100644 index 7862b696f..000000000 --- a/lib/glut-3.7.6/man/glut/glutPositionWindow.man +++ /dev/null @@ -1,39 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutPositionWindow 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutPositionWindow - requests a change to the position of the current window. -.SH SYNTAX -.nf -.LP -void glutPositionWindow(int x, int y); -.fi -.SH ARGUMENTS -.IP \fIx\fP 1i -New X location of window in pixels. -.IP \fIy\fP 1i -New Y location of window in pixels. -.SH DESCRIPTION -glutPositionWindow requests a change in the position of the current -window. For top-level windows, the x and y parameters are pixel offsets -from the screen origin. For subwindows, the x and y parameters are -pixel offsets from the window's parent window origin. - -The requests by glutPositionWindow are not processed immediately. -The request is executed after returning to the main event loop. This -allows multiple glutPositionWindow, glutReshapeWindow, and -glutFullScreen requests to the same window to be coalesced. - -In the case of top-level windows, a glutPositionWindow call is -considered only a request for positioning the window. The window -system is free to apply its own policies to top-level window placement. -The intent is that top-level windows should be repositioned according -glutPositionWindow's parameters. - -glutPositionWindow disables the full screen status of a window if -previously enabled. -.SH SEE ALSO -glutInitWindowPosition, glutReshapeWindow -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutPostOverlayRedisplay.man b/lib/glut-3.7.6/man/glut/glutPostOverlayRedisplay.man deleted file mode 100644 index 9c73e3c35..000000000 --- a/lib/glut-3.7.6/man/glut/glutPostOverlayRedisplay.man +++ /dev/null @@ -1,88 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutPostOverlayRedisplay 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutPostOverlayRedisplay, glutPostWindowOverlayRedisplay - marks the -overlay of the current or specified window as needing to be -redisplayed. -.SH SYNTAX -.nf -.LP -void glutPostOverlayRedisplay(void); -void glutPostWindowOverlayRedisplay(int win); -.fi -.SH DESCRIPTION -Mark the overlay of current window as needing to be redisplayed. -The next iteration through glutMainLoop, the window's overlay -display callback (or simply the display callback if no overlay display -callback is registered) will be called to redisplay the window's -overlay plane. Multiple calls to glutPostOverlayRedisplay -before the next display callback opportunity (or overlay display -callback opportunity if one is registered) generate only a single -redisplay. glutPostOverlayRedisplay may be called within a -window's display or overlay display callback to re-mark that -window for redisplay. - -Logically, overlay damage notification for a window is treated as a -glutPostOverlayRedisplay on the damaged window. Unlike -damage reported by the window system, -glutPostOverlayRedisplay will not set to true the overlay's -damaged status (returned by -glutLayerGet(GLUT_OVERLAY_DAMAGED). - -If the window you want to post an overlay redisplay on is not already current -(and you do not require it to be immediately made current), using -glutPostWindowOverlayRedisplay is more efficient that calling glutSetWindow to -the desired window and then calling glutPostOverlayRedisplay. -.SH EXAMPLE -If you are doing an interactive effect like rubberbanding in the -overlay, it is a good idea to structure your rendering to minimize -flicker (most overlays are single-buffered). Only clear the -overlay if you know that the window has been damaged. Otherwise, -try to simply erase what you last drew and redraw it in an updated -position. Here is an example overlay display callback used to -implement overlay rubberbanding: -.nf -.LP - void - redrawOverlay(void) - { - static int prevStretchX, prevStretchY; - - if (glutLayerGet(GLUT_OVERLAY_DAMAGED)) { - /* Damage means we need a full clear. */ - glClear(GL_COLOR_BUFFER_BIT); - } else { - /* Undraw last rubber-band. */ - glIndexi(transparent); - glBegin(GL_LINE_LOOP); - glVertex2i(anchorX, anchorY); - glVertex2i(anchorX, prevStretchY); - glVertex2i(prevStretchX, prevStretchY); - glVertex2i(prevStretchX, anchorY); - glEnd(); - } - glIndexi(red); - glBegin(GL_LINE_LOOP); - glVertex2i(anchorX, anchorY); - glVertex2i(anchorX, stretchY); - glVertex2i(stretchX, stretchY); - glVertex2i(stretchX, anchorY); - glEnd(); - prevStretchX = stretchX; - prevStretchY = stretchY; - } -.fi -.LP -Notice how glutLayerGet(GLUT_OVERLAY_DAMAGED) is used to determine if -a clear needs to take place because of damage; if a clear is unnecessary, -it is faster to just draw the last rubberband using the transparent pixel. -.LP -When the application is through with the rubberbanding effect, the best -way to get ride of the rubberband is to simply hide the overlay by -calling glutHideOverlay. -.SH SEE ALSO -glutPostRedisplay, glutEstablishOverlay, glutLayerGet -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutPostRedisplay.man b/lib/glut-3.7.6/man/glut/glutPostRedisplay.man deleted file mode 100644 index 730ff7fe5..000000000 --- a/lib/glut-3.7.6/man/glut/glutPostRedisplay.man +++ /dev/null @@ -1,37 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutPostRedisplay 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutPostRedisplay, glutPostWindowRedisplay - marks the current or specified window as needing to be -redisplayed. -.SH SYNTAX -.nf -.LP -void glutPostRedisplay(void); -void glutPostWindowRedisplay(int win); -.fi -.SH DESCRIPTION -glutPostRedisplay marks the normal plane of current window as needing to be redisplayed. -glutPostWindowRedisplay works the specified window as needing to be redisplayed. -After either call, the next iteration through glutMainLoop, the window's display -callback will be called to redisplay the window's normal plane. Multiple -calls to glutPostRedisplay before the next display callback -opportunity generates only a single redisplay callback. -glutPostRedisplay may be called within a window's display or -overlay display callback to re-mark that window for redisplay. - -Logically, normal plane damage notification for a window is treated as a -glutPostRedisplay on the damaged window. Unlike damage -reported by the window system, glutPostRedisplay will not set to -true the normal plane's damaged status (returned by -glutLayerGet(GLUT_NORMAL_DAMAGED). - -If the window you want to post a redisplay on is not already current -(and you do not require it to be immediately made current), using -glutPostWindowRedisplay is more efficient that calling glutSetWindow to -the desired window and then calling glutPostRedisplay. -.SH SEE ALSO -glutPostOverlayRedisplay, glutDisplayFunc -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutRemoveMenuItem.man b/lib/glut-3.7.6/man/glut/glutRemoveMenuItem.man deleted file mode 100644 index 59486eee5..000000000 --- a/lib/glut-3.7.6/man/glut/glutRemoveMenuItem.man +++ /dev/null @@ -1,23 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutRemoveMenuItem 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutRemoveMenuItem - remove the specified menu item. -.SH SYNTAX -.nf -.LP -void glutRemoveMenuItem(int entry); -.fi -.SH ARGUMENTS -.IP \fIentry\fP 1i -Index into the menu items of the current menu (1 is the topmost menu item). -.SH DESCRIPTION -glutRemoveMenuItem remove the entry menu item regardless of -whether it is a menu entry or sub-menu trigger. entry must be between 1 -and glutGet(GLUT_MENU_NUM_ITEMS) inclusive. Menu items below -the removed menu item are renumbered. -.SH SEE ALSO -glutAddMenuEntry, glutAddSubMenu, glutChangeToMenuEntry, glutChangeToSubMenu -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutRemoveOverlay.man b/lib/glut-3.7.6/man/glut/glutRemoveOverlay.man deleted file mode 100644 index 55a756afa..000000000 --- a/lib/glut-3.7.6/man/glut/glutRemoveOverlay.man +++ /dev/null @@ -1,26 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutRemoveLayer 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutRemoveOverlay - removes the overlay (if one exists) from the current window. -.SH SYNTAX -.nf -.LP -void glutRemoveOverlay(void); -.fi -.SH DESCRIPTION -glutRemoveOverlay removes the overlay (if one exists). It is safe -to call glutRemoveOverlay even if no overlay is currently -established--it does nothing in this case. Implicitly, the window's -layer in use changes to the normal plane immediately once the -overlay is removed. - -If the program intends to re-establish the overlay later, it is typically -faster and less resource intensive to use glutHideOverlay and -glutShowOverlay to simply change the display status of the -overlay. -.SH SEE ALSO -glutEstablishOverlay, glutDestroyWindow -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutReportErrors.man b/lib/glut-3.7.6/man/glut/glutReportErrors.man deleted file mode 100644 index 40e8b70a6..000000000 --- a/lib/glut-3.7.6/man/glut/glutReportErrors.man +++ /dev/null @@ -1,29 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutReportErrors 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutReportErrors - for debugging purposes; prints out OpenGL run-time errors. -.SH SYNTAX -.nf -.LP -void glutReportErrors(void); -.SH DESCRIPTION -This routine prints out any OpenGL run-time errors pending and clears -the errors. This routine typically should only be used for debugging purposes -since calling it will slow OpenGL programs. It is provided as a convenience; -all the routine does is call -.I glGetError -until no more errors are reported. Any errors detected are reported -with a GLUT warning and the corresponding text message generated by -.I gluErrorString. - -Calling glutReportErrors repeatedly in your program can help isolate -OpenGL errors to the offending OpenGL command. Remember that you -can use the -.I -gldebug -option to detect OpenGL errors in any GLUT program. -.SH SEE ALSO -glutInit, glutCreateWindow, glutInitDisplayMode, gluErrorString, glGetError -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutReshapeFunc.man b/lib/glut-3.7.6/man/glut/glutReshapeFunc.man deleted file mode 100644 index 399224e73..000000000 --- a/lib/glut-3.7.6/man/glut/glutReshapeFunc.man +++ /dev/null @@ -1,41 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutReshapeFunc 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutReshapeFunc - sets the reshape callback for the current window. -.SH SYNTAX -.nf -.LP -void glutReshapeFunc(void (*func)(int width, int height)); -.fi -.SH ARGUMENTS -.IP \fIfunc\fP 1i -The new reshape callback function. -.SH DESCRIPTION -glutReshapeFunc sets the reshape callback for the current window. The -reshape callback is triggered when a window is reshaped. A reshape -callback is also triggered immediately before a window's first display -callback after a window is created or whenever an overlay for the window -is established. The width and height parameters of the callback specify -the new window size in pixels. Before the callback, the current window is -set to the window that has been reshaped. - -If a reshape callback is not registered for a window or NULL is passed to -glutReshapeFunc (to deregister a previously registered callback), the -default reshape callback is used. This default callback will simply call -glViewport(0,0,width,height) on the normal plane (and on the -overlay if one exists). - -If an overlay is established for the window, a single reshape callback is -generated. It is the callback's responsibility to update both the normal -plane and overlay for the window (changing the layer in use as necessary). - -When a top-level window is reshaped, subwindows are not reshaped. It is -up to the GLUT program to manage the size and positions of subwindows -within a top-level window. Still, reshape callbacks will be triggered for -subwindows when their size is changed using glutReshapeWindow. -.SH SEE ALSO -glutDisplayFunc, glutReshapeWindow -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutReshapeWindow.man b/lib/glut-3.7.6/man/glut/glutReshapeWindow.man deleted file mode 100644 index d4af32a38..000000000 --- a/lib/glut-3.7.6/man/glut/glutReshapeWindow.man +++ /dev/null @@ -1,40 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutReshapeWindow 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutReshapeWindow - requests a change to the size of the current window. -.SH SYNTAX -.nf -.LP -void glutReshapeWindow(int width, int height); -.fi -.SH ARGUMENTS -.IP \fIwidth\fP 1i -New width of window in pixels. -.IP \fIheight\fP 1i -New height of window in pixels. -.SH DESCRIPTION -glutReshapeWindow requests a change in the size of the current -window. The width and height parameters are size extents in pixels. -The width and height must be positive values. - -The requests by glutReshapeWindow are not processed immediately. -The request is executed after returning to the main event loop. This -allows multiple glutReshapeWindow, glutPositionWindow, and -glutFullScreen requests to the same window to be coalesced. - -In the case of top-level windows, a glutReshapeWindow call is -considered only a request for sizing the window. The window system is -free to apply its own policies to top-level window sizing. The intent is -that top-level windows should be reshaped according -glutReshapeWindow's parameters. Whether a reshape actually takes -effect and, if so, the reshaped dimensions are reported to the program by -a reshape callback. - -glutReshapeWindow disables the full screen status of a window if -previously enabled. -.SH SEE ALSO -glutPositionWindow, glutReshapeFunc -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutSetColor.man b/lib/glut-3.7.6/man/glut/glutSetColor.man deleted file mode 100644 index 874a686e9..000000000 --- a/lib/glut-3.7.6/man/glut/glutSetColor.man +++ /dev/null @@ -1,35 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutSetColor 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutSetColor - sets the color of a colormap entry in the layer of use -for the current window. -.SH SYNTAX -.nf -.LP -void glutSetColor(int cell, - GLfloat red, GLfloat green, GLfloat blue); -.fi -.SH ARGUMENTS -.IP \fIcell\fP 1i -Color cell index (starting at zero). -.IP \fIred\fP 1i -Red intensity (clamped between 0.0 and 1.0 inclusive). -.IP \fIgreen\fP 1i -Green intensity (clamped between 0.0 and 1.0 inclusive). -.IP \fIblue\fP 1i -Blue intensity (clamped between 0.0 and 1.0 inclusive). -.SH DESCRIPTION -Sets the cell color index colormap entry of the current window's -logical colormap for the layer in use with the color specified by red, -green, and blue. The layer in use of the current window should be a -color index window. cell should be zero or greater and less than the -total number of colormap entries for the window. If the layer in use's -colormap was copied by reference, a glutSetColor call will force the -duplication of the colormap. Do not attempt to set the color of an -overlay's transparent index. -.SH SEE ALSO -glutGetColor, glutCopyColormap, glutInitDisplayMode -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutSetCursor.man b/lib/glut-3.7.6/man/glut/glutSetCursor.man deleted file mode 100644 index 4e568ee55..000000000 --- a/lib/glut-3.7.6/man/glut/glutSetCursor.man +++ /dev/null @@ -1,99 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutSetCursor 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutSetCursor - changes the cursor image of the current window. -.SH SYNTAX -.nf -.LP -void glutSetCursor(int cursor); -.fi -.SH ARGUMENTS -.IP \fIcursor\fP 1i -Name of cursor image to change to. Possible values follow: -.TP 8 -.B GLUT_CURSOR_RIGHT_ARROW -Arrow pointing up and to the right. -.TP 8 -.B GLUT_CURSOR_LEFT_ARROW -Arrow pointing up and to the left. -.TP 8 -.B GLUT_CURSOR_INFO -Pointing hand. -.TP 8 -.B GLUT_CURSOR_DESTROY -Skull & cross bones. -.TP 8 -.B GLUT_CURSOR_HELP -Question mark. -.TP 8 -.B GLUT_CURSOR_CYCLE -Arrows rotating in a circle. -.TP 8 -.B GLUT_CURSOR_SPRAY -Spray can. -.TP 8 -.B GLUT_CURSOR_WAIT -Wrist watch. -.TP 8 -.B GLUT_CURSOR_TEXT -Insertion point cursor for text. -.TP 8 -.B GLUT_CURSOR_CROSSHAIR -Simple cross-hair. -.TP 8 -.B GLUT_CURSOR_UP_DOWN -Bi-directional pointing up & down. -.TP 8 -.B GLUT_CURSOR_LEFT_RIGHT -Bi-directional pointing left & right. -.TP 8 -.B GLUT_CURSOR_TOP_SIDE -Arrow pointing to top side. -.TP 8 -.B GLUT_CURSOR_BOTTOM_SIDE -Arrow pointing to bottom side. -.TP 8 -.B GLUT_CURSOR_LEFT_SIDE -Arrow pointing to left side. -.TP 8 -.B GLUT_CURSOR_RIGHT_SIDE -Arrow pointing to right side. -.TP 8 -.B GLUT_CURSOR_TOP_LEFT_CORNER -Arrow pointing to top-left corner. -.TP 8 -.B GLUT_CURSOR_TOP_RIGHT_CORNER -Arrow pointing to top-right corner. -.TP 8 -.B GLUT_CURSOR_BOTTOM_RIGHT_CORNER -Arrow pointing to bottom-left corner. -.TP 8 -.B GLUT_CURSOR_BOTTOM_LEFT_CORNER -Arrow pointing to bottom-right corner. -.TP 8 -.B GLUT_CURSOR_FULL_CROSSHAIR -Full-screen cross-hair cursor (if possible, otherwise -GLUT_CURSOR_CROSSHAIR). -.TP 8 -.B GLUT_CURSOR_NONE -Invisible cursor. -.TP 8 -.B GLUT_CURSOR_INHERIT -Use parent's cursor. -.SH DESCRIPTION -glutSetCursor changes the cursor image of the current window. -Each call requests the window system change the cursor appropriately. -The cursor image when a window is created is -GLUT_CURSOR_INHERIT. The exact cursor images used are -implementation dependent. The intent is for the image to convey the -meaning of the cursor name. For a top-level window, -GLUT_CURSOR_INHERIT uses the default window system cursor. -.SH X IMPLEMENTATION NOTES -GLUT for X uses SGI's _SGI_CROSSHAIR_CURSOR convention to -access a full-screen cross-hair cursor if possible. -.SH SEE ALSO -glutCreateWindow, glutCreateSubWindow -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutSetKeyRepeat.man b/lib/glut-3.7.6/man/glut/glutSetKeyRepeat.man deleted file mode 100644 index 7e66ac5f3..000000000 --- a/lib/glut-3.7.6/man/glut/glutSetKeyRepeat.man +++ /dev/null @@ -1,30 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1998. -.\" -.TH glutSetKeyRepeat 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutSetKeyRepeat - retrieves simple GLUT state represented by integers. -.SH SYNTAX -.nf -.LP -int glutSetKeyRepeat(int repeatMode); -.fi -.SH ARGUMENTS -.IP \fIrepeatMode\fP 1i -Mode for setting key repeat to. -.TP 8 -.B GLUT_KEY_REPEAT_OFF -Disable key repeat for the window system on a global basis if possible. -.TP 8 -.B GLUT_KEY_REPEAT_ON -Enable key repeat for the window system on a global basis if possible. -.TP 8 -.B GLUT_KEY_REPEAT_DEFAULT -Reset the key repeat mode for the window system to its default state -if possible. -.SH DESCRIPTION -.I XXX fix me -.SH SEE ALSO -glutIgnoreKeyRepeat, glutKeyboardFunc, glutSpecialFunc, glutKeyboardUpFunc, glutSpecialUpFunc, glutDeviceGet -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutSetMenu.man b/lib/glut-3.7.6/man/glut/glutSetMenu.man deleted file mode 100644 index 72f077087..000000000 --- a/lib/glut-3.7.6/man/glut/glutSetMenu.man +++ /dev/null @@ -1,23 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutSetMenu 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutSetMenu - sets the current menu; glutGetMenu - returns the identifier of the current menu. -.SH SYNTAX -.nf -.LP -void glutSetMenu(int menu); -int glutGetMenu(void); -.fi -.SH ARGUMENTS -.IP \fImenu\fP 1i -The identifier of the menu to make the current menu. -.SH DESCRIPTION -glutSetMenu sets the current menu; glutGetMenu returns the -identifier of the current menu. If no menus exist or the previous -current menu was destroyed, glutGetMenu returns zero. -.SH SEE ALSO -glutCreateMenu, glutSetWindow -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutSetWindow.man b/lib/glut-3.7.6/man/glut/glutSetWindow.man deleted file mode 100644 index 481b283d6..000000000 --- a/lib/glut-3.7.6/man/glut/glutSetWindow.man +++ /dev/null @@ -1,26 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutSetWindow 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutSetWindow - sets the current window; glutGetWindow - returns -the identifier of the current window. -.SH SYNTAX -.nf -.LP -void glutSetWindow(int win); -int glutGetWindow(void); -.fi -.SH ARGUMENTS -.IP \fIwin\fP 1i -Identifier of GLUT window to make the current window. -.SH DESCRIPTION -glutSetWindow sets the current window; glutGetWindow returns the -identifier of the current window. If no windows exist or the previously -current window was destroyed, glutGetWindow returns zero. -glutSetWindow does not change the layer in use for the window; this is -done using glutUseLayer. -.SH SEE ALSO -glutCreateWindow, glutSetMenu -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutSetWindowTitle.man b/lib/glut-3.7.6/man/glut/glutSetWindowTitle.man deleted file mode 100644 index 51293ba58..000000000 --- a/lib/glut-3.7.6/man/glut/glutSetWindowTitle.man +++ /dev/null @@ -1,30 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutSetWindowTitle 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutSetWindowTitle, glutSetIconTitle - change the window or icon title respectively of the current top-level window. -.SH SYNTAX -.nf -.LP -void glutSetWindowTitle(char *name); -void glutSetIconTitle(char *name); -.fi -.SH ARGUMENTS -.IP \fIname\fP 1i -ASCII character string for the window or icon name to be set for -the window. -.SH DESCRIPTION -These routines should be called only when the current window is a -top-level window. Upon creation of a top-level window, the window -and icon names are determined by the name parameter to -glutCreateWindow. Once created, glutSetWindowTitle and -glutSetIconTitle can change the window and icon names -respectively of top-level windows. Each call requests the window -system change the title appropriately. Requests are not buffered or -coalesced. The policy by which the window and icon name are displayed -is window system dependent. -.SH SEE ALSO -glutCreateWindow, glutIconifyWindow -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutShowOverlay.man b/lib/glut-3.7.6/man/glut/glutShowOverlay.man deleted file mode 100644 index 14affb829..000000000 --- a/lib/glut-3.7.6/man/glut/glutShowOverlay.man +++ /dev/null @@ -1,26 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutShowOverlay 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutShowOverlay, glutHideOverlay - shows or hides the overlay of the current window -.SH SYNTAX -.nf -.LP -void glutShowOverlay(void); -void glutHideOverlay(void); -.fi -.SH DESCRIPTION -glutShowOverlay shows the overlay of the current window; -glutHideOverlay hides the overlay. The effect of showing or -hiding an overlay takes place immediately. Note that -glutShowOverlay will not actually display the overlay unless the -window is also shown (and even a shown window may be obscured -by other windows, thereby obscuring the overlay). It is typically -faster and less resource intensive to use these routines to control the -display status of an overlay as opposed to removing and -re-establishing the overlay. -.SH SEE ALSO -glutEstablishOverlay, glutShowWindow -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutShowWindow.man b/lib/glut-3.7.6/man/glut/glutShowWindow.man deleted file mode 100644 index 3e534c545..000000000 --- a/lib/glut-3.7.6/man/glut/glutShowWindow.man +++ /dev/null @@ -1,28 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutShowWindow 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutShowWindow, glutHideWindow, glutIconifyWindow - change the display status of the current window. -.SH SYNTAX -.nf -.LP -void glutShowWindow(void); -void glutHideWindow(void); -void glutIconifyWindow(void); -.fi -.SH DESCRIPTION -glutShowWindow will show the current window (though it may still -not be visible if obscured by other shown windows). glutHideWindow -will hide the current window. glutIconifyWindow will iconify a -top-level window, but GLUT prohibits iconification of a subwindow. -The effect of showing, hiding, and iconifying windows does not take -place immediately. Instead the requests are saved for execution upon -return to the GLUT event loop. Subsequent show, hide, or iconification -requests on a window replace the previously saved request for that -window. The effect of hiding, showing, or iconifying top-level windows -is subject to the window system's policy for displaying windows. -.SH SEE ALSO -glutPopWindow, glutPushWindow -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutSolidCone.man b/lib/glut-3.7.6/man/glut/glutSolidCone.man deleted file mode 100644 index f0a6dca49..000000000 --- a/lib/glut-3.7.6/man/glut/glutSolidCone.man +++ /dev/null @@ -1,34 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutSolidCone 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutSolidCone, glutWireCone - render a solid or wireframe cone respectively. -.SH SYNTAX -.nf -.LP -void glutSolidCone(GLdouble base, GLdouble height, - GLint slices, GLint stacks); -void glutWireCone(GLdouble base, GLdouble height, - GLint slices, GLint stacks); -.fi -.SH ARGUMENTS -.IP \fIbase\fP 1i -The radius of the base of the cone. -.IP \fIheight\fP 1i -The height of the cone. -.IP \fIslices\fP 1i -The number of subdivisions around the Z axis. -.IP \fIstacks\fP 1i -The number of subdivisions along the Z axis. -.SH DESCRIPTION -glutSolidCone and glutWireCone render a solid or wireframe cone -respectively oriented along the Z axis. The base of the cone is placed at Z -= 0, and the top at Z = height. The cone is subdivided around the Z axis -into slices, and along the Z axis into stacks. -.SH SEE ALSO -glutSolidSphere, glutSolidCube, glutSolidTorus, glutSolidDodecahedron, -glutSolidOctahedron, glutSolidTetrahedron, glutSolidIcosahedron, -glutSolidTeapot -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutSolidCube.man b/lib/glut-3.7.6/man/glut/glutSolidCube.man deleted file mode 100644 index f9ba2c00f..000000000 --- a/lib/glut-3.7.6/man/glut/glutSolidCube.man +++ /dev/null @@ -1,25 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutSolidCube 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutSolidCube, glutWireCube - render a solid or wireframe cube respectively. -.SH SYNTAX -.nf -.LP -void glutSolidCube(GLdouble size); -void glutWireCube(GLdouble size); -.fi -.SH ARGUMENTS -.IP \fIsize\fP 1i -Length of each edge. -.SH DESCRIPTION -glutSolidCube and glutWireCube render a solid or wireframe cube -respectively. The cube is centered at the modeling coordinates origin with -sides of length size. -.SH SEE ALSO -glutSolidSphere, glutSolidCone, glutSolidTorus, glutSolidDodecahedron, -glutSolidOctahedron, glutSolidTetrahedron, glutSolidIcosahedron, -glutSolidTeapot -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutSolidDodecahedron.man b/lib/glut-3.7.6/man/glut/glutSolidDodecahedron.man deleted file mode 100644 index 2be20cf9a..000000000 --- a/lib/glut-3.7.6/man/glut/glutSolidDodecahedron.man +++ /dev/null @@ -1,23 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutSolidDodecahedron 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutSolidDodecahedron, glutWireDodecahedron - render a -solid or wireframe dodecahedron (12-sided regular solid) respectively. -.SH SYNTAX -.nf -.LP -void glutSolidDodecahedron(void); -void glutWireDodecahedron(void); -.fi -.SH DESCRIPTION -glutSolidDodecahedron and glutWireDodecahedron render a -solid or wireframe dodecahedron respectively centered at the modeling -coordinates origin with a radius of sqrt(3). -.SH SEE ALSO -glutSolidSphere, glutSolidCube, glutSolidCone, glutSolidTorus, -glutSolidOctahedron, glutSolidTetrahedron, glutSolidIcosahedron, -glutSolidTeapot -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutSolidIcosahedron.man b/lib/glut-3.7.6/man/glut/glutSolidIcosahedron.man deleted file mode 100644 index 50b715667..000000000 --- a/lib/glut-3.7.6/man/glut/glutSolidIcosahedron.man +++ /dev/null @@ -1,23 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutSolidIcosahedron 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutSolidIcosahedron, glutWireIcosahedron - render a -solid or wireframe icosahedron (20-sided regular solid) respectively. -.SH SYNTAX -.nf -.LP -void glutSolidIcosahedron(void); -void glutWireIcosahedron(void); -.fi -.SH DESCRIPTION -glutSolidIcosahedron and glutWireIcosahedron render a solid -or wireframe icosahedron respectively. The icosahedron is centered at the -modeling coordinates origin and has a radius of 1.0. -.SH SEE ALSO -glutSolidSphere, glutSolidCube, glutSolidCone, glutSolidTorus, glutSolidDodecahedron, -glutSolidOctahedron, glutSolidTetrahedron, -glutSolidTeapot -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutSolidOctahedron.man b/lib/glut-3.7.6/man/glut/glutSolidOctahedron.man deleted file mode 100644 index 0b058e7a3..000000000 --- a/lib/glut-3.7.6/man/glut/glutSolidOctahedron.man +++ /dev/null @@ -1,23 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutSolidOctahedron 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutSolidOctahedron, glutWireOctahedron - render a solid -or wireframe octahedron (8-sided regular solid) respectively. -.SH SYNTAX -.nf -.LP -void glutSolidOctahedron(void); -void glutWireOctahedron(void); -.fi -.SH DESCRIPTION -glutSolidOctahedron and glutWireOctahedron render a solid or -wireframe octahedron respectively centered at the modeling coordinates -origin with a radius of 1.0. -.SH SEE ALSO -glutSolidSphere, glutSolidCube, glutSolidCone, glutSolidTorus, glutSolidDodecahedron, -glutSolidTetrahedron, glutSolidIcosahedron, -glutSolidTeapot -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutSolidSphere.man b/lib/glut-3.7.6/man/glut/glutSolidSphere.man deleted file mode 100644 index 531f3a1f7..000000000 --- a/lib/glut-3.7.6/man/glut/glutSolidSphere.man +++ /dev/null @@ -1,31 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutSolidSphere 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutSolidSphere, glutWireSphere - render a solid or wireframe sphere respectively. -.SH SYNTAX -.nf -.LP -void glutSolidSphere(GLdouble radius, - GLint slices, GLint stacks); -void glutWireSphere(GLdouble radius, - GLint slices, GLint stacks); -.fi -.SH ARGUMENTS -.IP \fIradius\fP 1i -The radius of the sphere. -.IP \fIslices\fP 1i -The number of subdivisions around the Z axis (similar to lines of longitude). -.IP \fIstacks\fP 1i -The number of subdivisions along the Z axis (similar to lines of latitude). -.SH DESCRIPTION -Renders a sphere centered at the modeling coordinates origin of the -specified radius. The sphere is subdivided around the Z axis into slices -and along the Z axis into stacks. -.SH SEE ALSO -glutSolidCube, glutSolidCone, glutSolidTorus, glutSolidDodecahedron, -glutSolidOctahedron, glutSolidTetrahedron, glutSolidIcosahedron, -glutSolidTeapot -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutSolidTeapot.man b/lib/glut-3.7.6/man/glut/glutSolidTeapot.man deleted file mode 100644 index 8090f3296..000000000 --- a/lib/glut-3.7.6/man/glut/glutSolidTeapot.man +++ /dev/null @@ -1,42 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutSolidTeapot 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutSolidTeapot, glutWireTeapot - render a solid or wireframe teapot respectively. -.SH SYNTAX -.nf -.LP -void glutSolidTeapot(GLdouble size); -void glutWireTeapot(GLdouble size); -.fi -.SH ARGUMENTS -.IP \fIsize\fP 1i -Relative size of the teapot. -.SH DESCRIPTION -glutSolidTeapot and glutWireTeapot render a solid or wireframe -teapot respectively. Both surface normals and texture coordinates for the -teapot are generated. The teapot is generated with OpenGL evaluators. -.SH BUGS -The teapot is greatly over-tesselated; it renders way too slow. - -OpenGL's default glFrontFace state assumes that front facing polygons -(for the purpose of face culling) -have vertices that wind counter clockwise when projected into window -space. This teapot is rendered with its front facing polygon vertices -winding clockwise. For OpenGL's default back face culling to work, -you should use: -.nf -.LP - glFrontFace(GL_CW); - glutSolidTeapot(size); - glFrontFace(GL_CCW); -.fi -.LP -Both these bugs reflect issues in the original aux toolkit's -teapot rendering routines (GLUT used the same teapot rendering routine). -.SH SEE ALSO -glutSolidSphere, glutSolidCube, glutSolidCone, glutSolidTorus, glutSolidDodecahedron, -glutSolidOctahedron, glutSolidTetrahedron, glutSolidIcosahedron -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutSolidTetrahedron.man b/lib/glut-3.7.6/man/glut/glutSolidTetrahedron.man deleted file mode 100644 index 88e3bccdc..000000000 --- a/lib/glut-3.7.6/man/glut/glutSolidTetrahedron.man +++ /dev/null @@ -1,23 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutSolidTetrahedron 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutSolidTetrahedron, glutWireTetrahedron - render a -solid or wireframe tetrahedron (4-sided regular solid) respectively. -.SH SYNTAX -.nf -.LP -void glutSolidTetrahedron(void); -void glutWireTetrahedron(void); -.fi -.SH DESCRIPTION -glutSolidTetrahedron and glutWireTetrahedron render a solid -or wireframe tetrahedron respectively centered at the modeling -coordinates origin with a radius of sqrt(3). -.SH SEE ALSO -glutSolidSphere, glutSolidCube, glutSolidCone, glutSolidTorus, glutSolidDodecahedron, -glutSolidOctahedron, glutSolidIcosahedron, -glutSolidTeapot -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutSolidTorus.man b/lib/glut-3.7.6/man/glut/glutSolidTorus.man deleted file mode 100644 index 648e57930..000000000 --- a/lib/glut-3.7.6/man/glut/glutSolidTorus.man +++ /dev/null @@ -1,36 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutSolidTorus 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutSolidTorus, glutWireTorus - render a solid or wireframe -torus (doughnut) respectively. -.SH SYNTAX -.nf -.LP -void glutSolidTorus(GLdouble innerRadius, - GLdouble outerRadius, - GLint nsides, GLint rings); -void glutWireTorus(GLdouble innerRadius, - GLdouble outerRadius, - GLint nsides, GLint rings); -.fi -.SH ARGUMENTS -.IP \fIinnerRadius\fP 1i -Inner radius of the torus. -.IP \fIouterRadius\fP 1i -Outer radius of the torus. -.IP \fInsides\fP 1i -Number of sides for each radial section. -.IP \fIrings\fP 1i -Number of radial divisions for the torus. -.SH DESCRIPTION -glutSolidTorus and glutWireTorus render a solid or wireframe -torus (doughnut) respectively centered at the modeling coordinates origin -whose axis is aligned with the Z axis. -.SH SEE ALSO -glutSolidSphere, glutSolidCube, glutSolidCone, glutSolidDodecahedron, -glutSolidOctahedron, glutSolidTetrahedron, glutSolidIcosahedron, -glutSolidTeapot -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutSpaceballButtonFunc.man b/lib/glut-3.7.6/man/glut/glutSpaceballButtonFunc.man deleted file mode 100644 index d095d4e6d..000000000 --- a/lib/glut-3.7.6/man/glut/glutSpaceballButtonFunc.man +++ /dev/null @@ -1,36 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutSpaceballButtonFunc 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutSpaceballButtonFunc - sets the Spaceball button callback for the current window. -.SH SYNTAX -.nf -.LP -void glutSpaceballButtonFunc(void (*func)(int button, int state)); -.fi -.SH ARGUMENTS -.IP \fIfunc\fP 1i -The new spaceball button callback function. -.SH DESCRIPTION -glutSpaceballButtonFunc sets the Spaceball button callback for the -current window. The Spaceball button callback for a window is called -when the window has Spaceball input focus (normally, when the mouse -is in the window) and the user generates Spaceball button presses. The -button parameter will be the button number (starting at one). The -number of available Spaceball buttons can be determined with -glutDeviceGet(GLUT_NUM_SPACEBALL_BUTTONS). The state is -either GLUT_UP or GLUT_DOWN indicating whether the callback was due -to a release or press respectively. - -Registering a Spaceball button callback when a Spaceball device is not -available is ineffectual and not an error. In this case, no Spaceball button -callbacks will be generated. - -Passing NULL to glutSpaceballButtonFunc disables the generation -of Spaceball button callbacks. When a new window is created, no -Spaceball button callback is initially registered. -.SH SEE ALSO -glutSpaceballMotionFunc, glutSpaceballRotateFunc, glutMouseFunc, glutButtonBoxFunc, glutTabletButtonFunc, glutJoystickFunc, glutDeviceGet -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutSpaceballMotionFunc.man b/lib/glut-3.7.6/man/glut/glutSpaceballMotionFunc.man deleted file mode 100644 index 6f2c6df76..000000000 --- a/lib/glut-3.7.6/man/glut/glutSpaceballMotionFunc.man +++ /dev/null @@ -1,34 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutSpaceballMotionFunc 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutSpaceballMotionFunc - sets the Spaceball motion callback for the current window. -.SH SYNTAX -.nf -.LP -void glutSpaceballMotionFunc(void (*func)(int x, int y, int z)); -.fi -.SH ARGUMENTS -.IP \fIfunc\fP 1i -The new entry callback function. -.SH DESCRIPTION -glutSpaceballMotionFunc sets the Spaceball motion callback for -the current window. The Spaceball motion callback for a window is -called when the window has Spaceball input focus (normally, when the -mouse is in the window) and the user generates Spaceball translations. -The x, y, and z callback parameters indicate the translations along the X, -Y, and Z axes. The callback parameters are normalized to be within the -range of -1000 to 1000 inclusive. - -Registering a Spaceball motion callback when a Spaceball device is not -available has no effect and is not an error. In this case, no Spaceball -motion callbacks will be generated. - -Passing NULL to glutSpaceballMotionFunc disables the generation -of Spaceball motion callbacks. When a new window is created, no -Spaceball motion callback is initially registered. -.SH SEE ALSO -glutSpaceballRotateFunc, glutSpaceballButtonFunc, glutMotionFunc, glutTabletMotionFunc, glutJoystickFunc, glutDeviceGet -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutSpaceballRotateFunc.man b/lib/glut-3.7.6/man/glut/glutSpaceballRotateFunc.man deleted file mode 100644 index d06f9a89b..000000000 --- a/lib/glut-3.7.6/man/glut/glutSpaceballRotateFunc.man +++ /dev/null @@ -1,35 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutSpaceballRotateFunc 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutSpaceballRotateFunc - sets the Spaceball rotation callback for the current -window. -.SH SYNTAX -.nf -.LP -void glutSpaceballRotateFunc(void (*func)(int x, int y, int z)); -.fi -.SH ARGUMENTS -.IP \fIfunc\fP 1i -The new spaceball rotate callback function. -.SH DESCRIPTION -glutSpaceballRotateFunc sets the Spaceball rotate callback for the -current window. The Spaceball rotate callback for a window is called -when the window has Spaceball input focus (normally, when the mouse -is in the window) and the user generates Spaceball rotations. The x, y, -and z callback parameters indicate the rotation along the X, Y, and Z -axes. The callback parameters are normalized to be within the range of --1800 to 1800 inclusive. - -Registering a Spaceball rotate callback when a Spaceball device is not -available is ineffectual and not an error. In this case, no Spaceball rotate -callbacks will be generated. - -Passing NULL to glutSpaceballRotateFunc disables the generation -of Spaceball rotate callbacks. When a new window is created, no -Spaceball rotate callback is initially registered. -.SH SEE ALSO -glutSpaceballMotionFunc, glutSpaceballButtonFunc, glutMotionFunc, glutTabletMotionFunc, glutJoystickFunc, glutDeviceGet -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutSpecialFunc.man b/lib/glut-3.7.6/man/glut/glutSpecialFunc.man deleted file mode 100644 index c346a2ed6..000000000 --- a/lib/glut-3.7.6/man/glut/glutSpecialFunc.man +++ /dev/null @@ -1,102 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutSpecialFunc 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutSpecialFunc - sets the special keyboard callback for the current window. -.SH SYNTAX -.nf -.LP -void glutSpecialFunc(void (*func)(int key, int x, int y)); -.fi -.SH ARGUMENTS -.IP \fIfunc\fP 1i -The new special callback function. -.SH DESCRIPTION -glutSpecialFunc sets the special keyboard callback for the current -window. The special keyboard callback is triggered when keyboard -function or directional keys are pressed. The key callback parameter is a -GLUT_KEY_* constant for the special key pressed. The x and y callback -parameters indicate the mouse in window relative coordinates when the -key was pressed. When a new window is created, no special callback is -initially registered and special key strokes in the window are ignored. -Passing NULL to glutSpecialFunc disables the generation of special -callbacks. - -During a special callback, glutGetModifiers may be called to -determine the state of modifier keys when the keystroke generating the -callback occurred. - -An implementation should do its best to provide ways to generate all the -GLUT_KEY_* special keys. The available GLUT_KEY_* values are: -.TP 8 -.B GLUT_KEY_F1 -F1 function key. -.TP 8 -.B GLUT_KEY_F2 -F2 function key. -.TP 8 -.B GLUT_KEY_F3 -F3 function key. -.TP 8 -.B GLUT_KEY_F4 -F4 function key. -.TP 8 -.B GLUT_KEY_F5 -F5 function key. -.TP 8 -.B GLUT_KEY_F6 -F6 function key. -.TP 8 -.B GLUT_KEY_F7 -F7 function key. -.TP 8 -.B GLUT_KEY_F8 -F8 function key. -.TP 8 -.B GLUT_KEY_F9 -F9 function key. -.TP 8 -.B GLUT_KEY_F10 -F10 function key. -.TP 8 -.B GLUT_KEY_F11 -F11 function key. -.TP 8 -.B GLUT_KEY_F12 -F12 function key. -.TP 8 -.B GLUT_KEY_LEFT -Left directional key. -.TP 8 -.B GLUT_KEY_UP -Up directional key. -.TP 8 -.B GLUT_KEY_RIGHT -Right directional key. -.TP 8 -.B GLUT_KEY_DOWN -Down directional key. -.TP 8 -.B GLUT_KEY_PAGE_UP -Page up directional key. -.TP 8 -.B GLUT_KEY_PAGE_DOWN -Page down directional key. -.TP 8 -.B GLUT_KEY_HOME -Home directional key. -.TP 8 -.B GLUT_KEY_END -End directional key. -.TP 8 -.B GLUT_KEY_INSERT -Inset directional key. -.LP -Note that the escape, backspace, and delete keys are generated as an ASCII -character. -.SH SEE ALSO -glutSpecialUpFunc, -glutKeyboardFunc, glutMouseFunc, glutSpaceballButtonFunc, glutButtonBoxFunc, glutTabletButtonFunc, glutGetModifiers -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutSpecialUpFunc.man b/lib/glut-3.7.6/man/glut/glutSpecialUpFunc.man deleted file mode 100644 index d112d8ad5..000000000 --- a/lib/glut-3.7.6/man/glut/glutSpecialUpFunc.man +++ /dev/null @@ -1,105 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutSpecialUpFunc 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutSpecialUpFunc - sets the special keyboard up (key release) callback for the current window. -.SH SYNTAX -.nf -.LP -void glutSpecialUpFunc(void (*func)(int key, int x, int y)); -.fi -.SH ARGUMENTS -.IP \fIfunc\fP 1i -The new special callback function. -.SH DESCRIPTION -glutSpecialUpFunc sets the special keyboard up (key release) callback for the current -window. The special keyboard up callback is triggered when keyboard -function or directional keys are released. The key callback parameter is a -GLUT_KEY_* constant for the special key pressed. The x and y callback -parameters indicate the mouse in window relative coordinates when the -key was pressed. When a new window is created, no special up callback is -initially registered and special key releases in the window are ignored. -Passing NULL to glutSpecialUpFunc disables the generation of special up -callbacks. - -During a special up callback, glutGetModifiers may be called to -determine the state of modifier keys when the key release generating the -callback occurred. - -To avoid the reporting of key release/press pairs due to auto -repeat, use glutIgnoreKeyRepeat to ignore auto repeated keystrokes. - -An implementation should do its best to provide ways to generate all the -GLUT_KEY_* special keys. The available GLUT_KEY_* values are: -.TP 8 -.B GLUT_KEY_F1 -F1 function key. -.TP 8 -.B GLUT_KEY_F2 -F2 function key. -.TP 8 -.B GLUT_KEY_F3 -F3 function key. -.TP 8 -.B GLUT_KEY_F4 -F4 function key. -.TP 8 -.B GLUT_KEY_F5 -F5 function key. -.TP 8 -.B GLUT_KEY_F6 -F6 function key. -.TP 8 -.B GLUT_KEY_F7 -F7 function key. -.TP 8 -.B GLUT_KEY_F8 -F8 function key. -.TP 8 -.B GLUT_KEY_F9 -F9 function key. -.TP 8 -.B GLUT_KEY_F10 -F10 function key. -.TP 8 -.B GLUT_KEY_F11 -F11 function key. -.TP 8 -.B GLUT_KEY_F12 -F12 function key. -.TP 8 -.B GLUT_KEY_LEFT -Left directional key. -.TP 8 -.B GLUT_KEY_UP -Up directional key. -.TP 8 -.B GLUT_KEY_RIGHT -Right directional key. -.TP 8 -.B GLUT_KEY_DOWN -Down directional key. -.TP 8 -.B GLUT_KEY_PAGE_UP -Page up directional key. -.TP 8 -.B GLUT_KEY_PAGE_DOWN -Page down directional key. -.TP 8 -.B GLUT_KEY_HOME -Home directional key. -.TP 8 -.B GLUT_KEY_END -End directional key. -.TP 8 -.B GLUT_KEY_INSERT -Inset directional key. -.LP -Note that the escape, backspace, and delete keys are generated as an ASCII -character. -.SH SEE ALSO -glutSpecialFunc, -glutKeyboardFunc, glutKeyboardUpFunc, glutMouseFunc, glutSpaceballButtonFunc, glutButtonBoxFunc, glutTabletButtonFunc, glutGetModifiers, glutIgnoreKeyRepeat -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutStrokeCharacter.man b/lib/glut-3.7.6/man/glut/glutStrokeCharacter.man deleted file mode 100644 index 237bbd9be..000000000 --- a/lib/glut-3.7.6/man/glut/glutStrokeCharacter.man +++ /dev/null @@ -1,66 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutStrokeCharacter 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutStrokeCharacter - renders a stroke character using OpenGL. -.SH SYNTAX -.nf -.LP -void glutStrokeCharacter(void *font, int character); -.fi -.SH ARGUMENTS -.IP \fIfont\fP 1i -Stroke font to use. -.IP \fIcharacter\fP 1i -Character to render (not confined to 8 bits). -.SH DESCRIPTION -Without using any display lists, glutStrokeCharacter renders the -character in the named stroke font. The available fonts are: -.TP 8 -.B GLUT_STROKE_ROMAN -A proportionally spaced Roman Simplex font for ASCII characters -32 through 127. The maximum top character in the font is 119.05 -units; the bottom descends 33.33 units. -.TP 8 -.B GLUT_STROKE_MONO_ROMAN -A mono-spaced spaced Roman Simplex font (same characters as -GLUT_STROKE_ROMAN) for ASCII characters 32 through 127. The -maximum top character in the font is 119.05 units; the bottom -descends 33.33 units. Each character is 104.76 units wide. -.LP -Rendering a nonexistent character has no effect. A glTranslatef is -used to translate the current model view matrix to advance the width of -the character. -.SH EXAMPLE -Here is a routine that shows how to render a string of ASCII text -with glutStrokeCharacter: -.nf -.LP - void - output(GLfloat x, GLfloat y, char *text) - { - char *p; - - glPushMatrix(); - glTranslatef(x, y, 0); - for (p = text; *p; p++) - glutStrokeCharacter(GLUT_STROKE_ROMAN, *p); - glPopMatrix(); - } -.fi -.LP -If you want to draw stroke font text using wide, antialiased lines, use: -.nf -.LP - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glEnable(GL_BLEND); - glEnable(GL_LINE_SMOOTH); - glLineWidth(2.0); - output(200, 225, "This is antialiased."); -.fi -.LP -.SH SEE ALSO -glutBitmapCharacter, glutStrokeWidth -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutStrokeWidth.man b/lib/glut-3.7.6/man/glut/glutStrokeWidth.man deleted file mode 100644 index ba0bcda27..000000000 --- a/lib/glut-3.7.6/man/glut/glutStrokeWidth.man +++ /dev/null @@ -1,35 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutStrokeWidth 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutStrokeWidth returns the width of a stroke character, -glutStrokeLength returns the length of a stroke font string. -.SH SYNTAX -.nf -.LP -int glutStrokeWidth(void *font, int character); -int glutStrokeLength(void *font, const unsigned char *string); -.fi -.SH ARGUMENTS -.IP \fIfont\fP 1i -Stroke font to use. -For valid values, see the -glutStrokeWidth description. -.IP \fIcharacter\fP 1i -Character to return width of (not confined to 8 bits). -.IP \fIstring\fP 1i -Text string (8-bit characters), nul terminated. -.SH DESCRIPTION -glutStrokeWidth returns the width in modeling units of a stroke character in a -supported stroke font. While the width of characters in a font may vary -(though fixed width fonts do not vary), the maximum height -characteristics of a particular font are fixed. - -glutStrokeLength returns the length in modeling units of a string (8-bit -characters). This length is equivalent to summing all the widths -returned by glutStrokeWidth for each character in the string. -.SH SEE ALSO -glutStrokeCharacter, glutBitmapWidth -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutSwapBuffers.man b/lib/glut-3.7.6/man/glut/glutSwapBuffers.man deleted file mode 100644 index 005b36ce7..000000000 --- a/lib/glut-3.7.6/man/glut/glutSwapBuffers.man +++ /dev/null @@ -1,30 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutSwapBuffers 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutSwapBuffers - swaps the buffers of the current window if double buffered. -.SH SYNTAX -.nf -.LP -void glutSwapBuffers(void); -.fi -.SH DESCRIPTION -Performs a buffer swap on the layer in use for the current window. -Specifically, glutSwapBuffers promotes the contents of the back -buffer of the layer in use of the current window to become the contents -of the front buffer. The contents of the back buffer then become -undefined. The update typically takes place during the vertical retrace of -the monitor, rather than immediately after glutSwapBuffers is called. - -An implicit glFlush is done by glutSwapBuffers before it returns. -Subsequent OpenGL commands can be issued immediately after calling -glutSwapBuffers, but are not executed until the buffer exchange is -completed. - -If the layer in use is not double buffered, glutSwapBuffers has no -effect. -.SH SEE ALSO -glutPostRedisplay, glutDisplayFunc -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutTabletButtonFunc.man b/lib/glut-3.7.6/man/glut/glutTabletButtonFunc.man deleted file mode 100644 index 14dcff319..000000000 --- a/lib/glut-3.7.6/man/glut/glutTabletButtonFunc.man +++ /dev/null @@ -1,39 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutTabletButtonFunc 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutTabletButtonFunc - sets the special keyboard callback for the current window. -.SH SYNTAX -.nf -.LP -void glutTabletButtonFunc(void (*func)(int button, int state, - int x, int y)); -.fi -.SH ARGUMENTS -.IP \fIfunc\fP 1i -The new tablet button callback function. -.SH DESCRIPTION -glutTabletButtonFunc sets the tablet button callback for the current -window. The tablet button callback for a window is called when the -window has tablet input focus (normally, when the mouse is in the -window) and the user generates tablet button presses. The button -parameter will be the button number (starting at one). The number of -available tablet buttons can be determined with -glutDeviceGet(GLUT_NUM_TABLET_BUTTONS). The state is -either GLUT_UP or GLUT_DOWN indicating whether the callback was due -to a release or press respectively. The x and y callback parameters -indicate the window relative coordinates when the tablet button state -changed. - -Registering a tablet button callback when a tablet device is not available -is ineffectual and not an error. In this case, no tablet button callbacks will -be generated. - -Passing NULL to glutTabletButtonFunc disables the generation of -tablet button callbacks. When a new window is created, no tablet button -callback is initially registered. -.SH SEE ALSO -glutTabletMotionFunc, glutDeviceGet, glutMotionFunc, glutSpaceballMotionFunc -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutTabletMotionFunc.man b/lib/glut-3.7.6/man/glut/glutTabletMotionFunc.man deleted file mode 100644 index 370b690df..000000000 --- a/lib/glut-3.7.6/man/glut/glutTabletMotionFunc.man +++ /dev/null @@ -1,34 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutTabletMotionFunc 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutTabletMotionFunc - sets the special keyboard callback for the current window. -.SH SYNTAX -.nf -.LP -void glutTabletMotionFunc(void (*func)(int x, int y)); -.fi -.SH ARGUMENTS -.IP \fIfunc\fP 1i -The new entry callback function. -.SH DESCRIPTION -glutTabletMotionFunc sets the tablet motion callback for the -current window. The tablet motion callback for a window is called when -the window has tablet input focus (normally, when the mouse is in the -window) and the user generates tablet motion. The x and y callback -parameters indicate the absolute position of the tablet ``puck'' on the -tablet. The callback parameters are normalized to be within the range of -0 to 2000 inclusive. - -Registering a tablet motion callback when a tablet device is not available -is ineffectual and not an error. In this case, no tablet motion callbacks -will be generated. - -Passing NULL to glutTabletMotionFunc disables the generation of -tablet motion callbacks. When a new window is created, no tablet motion -callback is initially registered. -.SH SEE ALSO -glutTabletButtonFunc, glutDeviceGet, glutMotionFunc, glutSpaceballMotionFunc -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutTimerFunc.man b/lib/glut-3.7.6/man/glut/glutTimerFunc.man deleted file mode 100644 index 013b91eb1..000000000 --- a/lib/glut-3.7.6/man/glut/glutTimerFunc.man +++ /dev/null @@ -1,37 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutTimerFunc 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutTimerFunc - registers a timer callback to be triggered in a -specified number of milliseconds. -.SH SYNTAX -.nf -.LP -void glutTimerFunc(unsigned int msecs, - void (*func)(int value), value); -.fi -.SH ARGUMENTS -.IP \fImsecs\fP 1i -Number of milliseconds to pass before calling the callback. -.IP \fIfunc\fP 1i -The timer callback function. -.IP \fIvalue\fP 1i -Integer value to pass to the timer callback. -.SH DESCRIPTION -glutTimerFunc registers the timer callback func to be triggered in at -least msecs milliseconds. The value parameter to the timer callback -will be the value of the value parameter to glutTimerFunc. Multiple -timer callbacks at same or differing times may be registered -simultaneously. - -The number of milliseconds is a lower bound on the time before the -callback is generated. GLUT attempts to deliver the timer callback as -soon as possible after the expiration of the callback's time interval. - -There is no support for canceling a registered callback. Instead, ignore a -callback based on its value parameter when it is triggered. -.SH SEE ALSO -glutIdleFunc -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutUseLayer.man b/lib/glut-3.7.6/man/glut/glutUseLayer.man deleted file mode 100644 index b35c95213..000000000 --- a/lib/glut-3.7.6/man/glut/glutUseLayer.man +++ /dev/null @@ -1,28 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutUseLayer 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutUseLayer - changes the layer in use for the current window. -.SH SYNTAX -.nf -.LP -void glutUseLayer(GLenum layer); -.fi -.SH ARGUMENTS -.IP \fIlayer\fP 1i -Either GLUT_NORMAL or GLUT_OVERLAY, selecting the normal -plane or overlay respectively. -.SH DESCRIPTION -glutUseLayer changes the per-window layer in use for the current -window, selecting either the normal plane or overlay. The overlay should -only be specified if an overlay exists, however windows without an -overlay may still call glutUseLayer(GLUT_NORMAL). OpenGL -commands for the window are directed to the current layer in use. - -To query the layer in use for a window, call -glutLayerGet(GLUT_LAYER_IN_USE). -.SH SEE ALSO -glutEstablishOverlay, glutSetWindow -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutVisibilityFunc.man b/lib/glut-3.7.6/man/glut/glutVisibilityFunc.man deleted file mode 100644 index 62aa1ed2e..000000000 --- a/lib/glut-3.7.6/man/glut/glutVisibilityFunc.man +++ /dev/null @@ -1,39 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1996. -.\" -.TH glutVisibilityFunc 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutVisibilityFunc - sets the visibility callback for the current window. -.SH SYNTAX -.nf -.LP -void glutVisibilityFunc(void (*func)(int state)); -.fi -.SH ARGUMENTS -.IP \fIfunc\fP 1i -The new visibility callback function. -.SH DESCRIPTION -glutVisibilityFunc sets the visibility callback for the current -window. The visibility callback for a window is called when the visibility -of a window changes. The state callback parameter is either -GLUT_NOT_VISIBLE or GLUT_VISIBLE depending on the current -visibility of the window. GLUT_VISIBLE does not distinguish a window -being totally versus partially visible. GLUT_NOT_VISIBLE means no part -of the window is visible, i.e., until the window's visibility changes, all -further rendering to the window is discarded. - -GLUT considers a window visible if any pixel of the window is visible or -any pixel of any descendant window is visible on the screen. - -Passing NULL to glutVisibilityFunc disables the generation of the -visibility callback. - -If the visibility callback for a window is disabled and later re-enabled, the -visibility status of the window is undefined; any change in window -visibility will be reported, that is if you disable a visibility callback and -re-enable the callback, you are guaranteed the next visibility change will -be reported. -.SH SEE ALSO -glutCreateWindow, glutPopWindow -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/man/glut/glutWarpPointer.man b/lib/glut-3.7.6/man/glut/glutWarpPointer.man deleted file mode 100644 index 7f733904e..000000000 --- a/lib/glut-3.7.6/man/glut/glutWarpPointer.man +++ /dev/null @@ -1,39 +0,0 @@ -.\" -.\" Copyright (c) Mark J. Kilgard, 1997. -.\" -.TH glutWarpPointer 3GLUT "3.7" "GLUT" "GLUT" -.SH NAME -glutWarpPointer warps the pointer's location. -.SH SYNTAX -.nf -.LP -void glutWarpPointer(int x, int y); -.fi -.SH ARGUMENTS -.IP \fIx\fP 1i -X offset relative to the current window's origin (upper left). -.IP \fIy\fP 1i -Y offset relative to the current window's origin (upper left). -.SH DESCRIPTION -glutWarpPointer warps the window system's pointer to a new location -relative to the origin of the current window. The new location will -be offset -.I x -pixels on the X axis and -.I y -pixels on the Y axis. -These parameters may be negative. The warp is done immediately. - -If the pointer would be warped outside the screen's frame buffer -region, the location will be clamped to the nearest screen edge. The -window system is allowed to further constrain the pointer's location in -window system dependent ways. - -The following is good advice that applies to glutWarpPointer: -``There is seldom any reason for calling this function. The pointer -should normally be left to the user.'' (from Xlib's -XWarpPointer man page.) -.SH SEE ALSO -glutMouseFunc, glutMotionFunc -.SH AUTHOR -Mark J. Kilgard (mjk@nvidia.com) diff --git a/lib/glut-3.7.6/mkmkfiles.imake b/lib/glut-3.7.6/mkmkfiles.imake deleted file mode 100644 index 20982537a..000000000 --- a/lib/glut-3.7.6/mkmkfiles.imake +++ /dev/null @@ -1,65 +0,0 @@ -#!/bin/csh -f -# -# Let user know what's going on... -# -set verbose -# -mv -f Makefile Makefile.bak >& /dev/null -# -# Unfortunately, some systems vary where they find imake, imake's config -# files, and/or xmkmf. You may need to be clever to get Makefiles -# generated if your system is non-standard. The following tries its best -# to generate the Makefiles for you... -# -if ( -d /usr/lib/X11/config) then - if ( -x /usr/bin/X11/imake ) then - # Things are in standard places - /usr/bin/X11/imake -DUseInstalled -I/usr/lib/X11/config -DTOPDIR=. - else - # Hope imake is on your path! - imake -DUseInstalled -I/usr/lib/X11/config -DTOPDIR=. - endif -else # Try non-standard places vendor locations - # Look for IBM's non-standard placement of imake - if ( -d /usr/lpp/X11/Xamples/config) then - if ( -x /usr/lpp/X11/Xamples/config/imake ) then - # Things are in non-standard IBM AIX places - /usr/lpp/X11/Xamples/config/imake -DUseInstalled -I/usr/lpp/X11/Xamples/config -DTOPDIR=. - else - # Hope imake is on your path! - imake -DUseInstalled -I/usr/lpp/X11/Xamples/config -DTOPDIR=. - endif - else - # Look for Sun's non-standard placement of imake and xmkmf - if ( -x /usr/openwin/bin/xmkmf ) then - # Make sure that /usr/openwin/bin is at the front of your - # path so that you pick up /usr/openwin/bin/imake when - # you run /usr/openwin/bin/xmkmf instead of some other - # imake potentially mismatched with the /usr/openwin/lib/config - # config files. - set path = ( /usr/openwin/bin $path ) - /usr/openwin/bin/xmkmf - else - # Look for FreeBSD's non-standard placement of imake and xmkmf - if ( -d /usr/X11R6/lib/X11/config ) then - if ( -x /usr/X11R6/bin/imake ) then - # We found FreeBSD's location for imake and xmkmf - /usr/X11R6/bin/imake -DUseInstalled -I/usr/X11R6/lib/X11/config -DTOPDIR=. - else - # Hope imake is on your path! - imake -DUseInstalled -I/usr/X11R6/lib/X11/config -DTOPDIR=. - endif - else - # Hope xmkmf is on your path! - xmkmf - endif - endif - endif -endif -make Makefiles - -## man subdirectory is not built by default -## uncomment line below to build its Makefiles -#make SUBDIRS=man Makefiles - -make depend diff --git a/lib/glut-3.7.6/mkmkfiles.sgi b/lib/glut-3.7.6/mkmkfiles.sgi deleted file mode 100644 index 0d8c125a9..000000000 --- a/lib/glut-3.7.6/mkmkfiles.sgi +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/csh -f -echo "Setting up use of SGI Makefiles" -echo "" -echo "NOTE: If you have a Fortran compiler and IRIX 5.3 or later, please see" -echo "the instructions in README.fortran for building the GLUT Fortran" -echo "API and sample programs. Fortran code is not built by default." -echo "" -foreach i ( `find . -name Makefile.sgi -print` ) - echo "Linking $i to $i:r" - rm -f $i:r - ln -s Makefile.sgi $i:r -end diff --git a/lib/glut-3.7.6/progs/Imakefile b/lib/glut-3.7.6/progs/Imakefile deleted file mode 100644 index f454a3826..000000000 --- a/lib/glut-3.7.6/progs/Imakefile +++ /dev/null @@ -1,14 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1997, 1998. */ - -#define IHaveSubdirs -#define PassCDebugFlags - -SUBDIRS = examples redbook demos contrib advanced mesademos \ - texfont perf_harness mui gle gameglut bucciarelli advanced97 spheremap tiff - -/* not yet ready for gnu/linux (mostly headers): glc inventor sgi-stero */ -/* not yet ready for gnu/linux (mostly language): ada fortran */ - -MakeSubdirs($(SUBDIRS)) -DependSubdirs($(SUBDIRS)) diff --git a/lib/glut-3.7.6/progs/ada/README b/lib/glut-3.7.6/progs/ada/README deleted file mode 100644 index 5057033a3..000000000 --- a/lib/glut-3.7.6/progs/ada/README +++ /dev/null @@ -1,10 +0,0 @@ - -See the ../../README.ada file for details of how to use GLUT with the -Ada language binding. Unless you program in Ada, this directory is -probably not that interesting to you. - -For the most part, these programs are the "redbook" programs just -converted to use Ada instead of C. - -- Mark Kilgard - October 9, 1997 diff --git a/lib/glut-3.7.6/progs/ada/ada_sphere.adb b/lib/glut-3.7.6/progs/ada/ada_sphere.adb deleted file mode 100644 index 4cde400f7..000000000 --- a/lib/glut-3.7.6/progs/ada/ada_sphere.adb +++ /dev/null @@ -1,40 +0,0 @@ - -with GL; use GL; -with Interfaces.C.Strings; -with Glut; use Glut; -with ada_sphere_procs; use ada_sphere_procs; - -procedure ada_sphere is - - package ICS renames Interfaces.C.Strings; - - type chars_ptr_ptr is access ICS.chars_ptr; - - argc : aliased integer; - pragma Import (C, argc, "gnat_argc"); - - argv : chars_ptr_ptr; - pragma Import (C, argv, "gnat_argv"); - - win : Integer; - m : Integer; - -begin - - glutInit (argc'access, argv); - - glutInitDisplayMode(GLUT_RGB or GLUT_DEPTH or GLUT_DOUBLE); - win := glutCreateWindow("ada_sphere"); - - glutDisplayFunc(display'access); - glutReshapeFunc(reshape'access); - - init; - - m := glutCreateMenu(menu'access); - glutAddMenuEntry("Quit", 666); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - glutMainLoop; - -end ada_sphere; diff --git a/lib/glut-3.7.6/progs/ada/ada_sphere_procs.adb b/lib/glut-3.7.6/progs/ada/ada_sphere_procs.adb deleted file mode 100644 index 01ce267cc..000000000 --- a/lib/glut-3.7.6/progs/ada/ada_sphere_procs.adb +++ /dev/null @@ -1,60 +0,0 @@ - -with GL; use GL; -with GLU; use GLU; -with Glut; use Glut; -with GNAT.OS_Lib; - -package body ada_sphere_procs is - - procedure display is - - begin - glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); - glutSolidSphere(1.0, 10, 10); - glutSwapBuffers; - end display; - - procedure reshape(w : Integer; h : Integer) is - - begin - glViewport(0, 0, GLsizei(w), GLsizei(h)); - end reshape; - - procedure menu (value : Integer) is - - begin - if (value = 666) then - GNAT.OS_Lib.OS_Exit (0); - end if; - end menu; - - procedure init is - - light_diffuse : array(0 .. 3) of aliased GLfloat := - (1.0, 0.0, 0.0, 1.0); - light_position : array(0 .. 3) of aliased GLfloat := - (1.0, 1.0, 1.0, 0.0); - - begin - glClearColor(0.1, 0.1, 0.1, 0.0); - - glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse(0)'access); - glLightfv(GL_LIGHT0, GL_POSITION, light_position(0)'access); - - glFrontFace(GL_CW); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_LESS); - - glMatrixMode(GL_PROJECTION); - gluPerspective(40.0, 1.0, 1.0, 10.0); - - glMatrixMode(GL_MODELVIEW); - gluLookAt( - 0.0, 0.0, -5.0, - 0.0, 0.0, 0.0, - 0.0, 1.0, 0.0); - end init; - -end ada_sphere_procs; diff --git a/lib/glut-3.7.6/progs/ada/ada_sphere_procs.ads b/lib/glut-3.7.6/progs/ada/ada_sphere_procs.ads deleted file mode 100644 index bb0e3f4de..000000000 --- a/lib/glut-3.7.6/progs/ada/ada_sphere_procs.ads +++ /dev/null @@ -1,10 +0,0 @@ - -with GL; use GL; -with Glut; use Glut; - -package ada_sphere_procs is - procedure display; - procedure reshape (w : Integer; h : Integer); - procedure menu (value : Integer); - procedure init; -end ada_sphere_procs; diff --git a/lib/glut-3.7.6/progs/ada/bezmesh.adb b/lib/glut-3.7.6/progs/ada/bezmesh.adb deleted file mode 100644 index be94b4cfe..000000000 --- a/lib/glut-3.7.6/progs/ada/bezmesh.adb +++ /dev/null @@ -1,71 +0,0 @@ --- --- (c) Copyright 1993,1994,1995,1996 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. --- - --- bezsurf.c --- This program renders a lighted, filled Bezier surface, --- using two-dimensional evaluators. - -with GL; use GL; -with Glut; use Glut; -with Bezmesh_Procs; use Bezmesh_Procs; -with Interfaces.C.Strings; - -procedure Bezmesh is - - package ICS renames Interfaces.C.Strings; - - type chars_ptr_ptr is access ICS.chars_ptr; - - argc : aliased integer; - pragma Import (C, argc, "gnat_argc"); - - argv : chars_ptr_ptr; - pragma Import (C, argv, "gnat_argv"); - - winRet : Integer; -begin - glutInitWindowSize(500, 500); - glutInit (argc'access, argv); - glutInitDisplayMode(GLUT_RGB or GLUT_DEPTH or GLUT_SINGLE); - winRet := glutCreateWindow ("OpenGL and Ada: bezmesh"); - - Initialize; - - glutReshapeFunc(HandleReshape'ACCESS); - glutDisplayFunc(Display'ACCESS); - glutMainLoop; -end Bezmesh; diff --git a/lib/glut-3.7.6/progs/ada/bezmesh_procs.adb b/lib/glut-3.7.6/progs/ada/bezmesh_procs.adb deleted file mode 100644 index 62ff48947..000000000 --- a/lib/glut-3.7.6/progs/ada/bezmesh_procs.adb +++ /dev/null @@ -1,116 +0,0 @@ --- --- (c) Copyright 1993,1994,1995,1996 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. --- - -with GL; use GL; -with Text_IO; use Text_IO; - -package body Bezmesh_Procs is - Bezier_Control_Points : array (1 .. 4, 1 .. 4, 1 .. 3) of aliased GLfloat := - (((-1.5, -1.5, 4.0), (-0.5, -1.5, 2.0), - (0.5, -1.5, -1.0), (1.5, -1.5, 2.0)), - ((-1.5, -0.5, 1.0), (-0.5, -0.5, 3.0), - (0.5, -0.5, 0.0), (1.5, -0.5, -1.0)), - ((-1.5, 0.5, 4.0), (-0.5, 0.5, 0.0), - (0.5, 0.5, 3.0), (1.5, 0.5, 4.0)), - ((-1.5, 1.5, -2.0), (-0.5, 1.5, -2.0), - (0.5, 1.5, 0.0), (1.5, 1.5, -1.0))); - - - procedure Initialize is - ambient : array (0 .. 3) of aliased GLfloat := - (0.2, 0.2, 0.2, 1.0); - diffuse : array (0 .. 3) of aliased GLfloat := - (0.0, 0.0, 2.0, 1.0); - position : array (0 .. 3) of aliased GLfloat := - (0.6, 0.6, 0.6, 1.0); - - mat_diffuse : array (0 .. 3) of aliased GLfloat := - (0.6, 0.6, 0.6, 1.0); - mat_specular : array (0 .. 3) of aliased GLfloat := - (1.0, 1.0, 1.0, 1.0); - mat_shininess : aliased GLfloat := 50.0; - - begin - glClearColor (0.0, 0.0, 0.0, 1.0); - glEnable (GL_DEPTH_TEST); - glMap2f (GL_MAP2_VERTEX_3, 0.0, 1.0, 3, 4, 0.0, 1.0, 12, 4, - Bezier_Control_Points(1,1,1)'ACCESS); - glEnable (GL_MAP2_VERTEX_3); - glEnable (GL_AUTO_NORMAL); - glEnable (GL_NORMALIZE); - glMapGrid2f(20, 0.0, 1.0, 20, 0.0, 1.0); - - glEnable (GL_LIGHTING); - glEnable (GL_LIGHT0); - - glLightfv (GL_LIGHT0, GL_AMBIENT, ambient (0)'access); - glLightfv (GL_LIGHT0, GL_POSITION, position (0)'access); - - glMaterialfv (GL_FRONT, GL_DIFFUSE, mat_diffuse (0)'access); - glMaterialfv (GL_FRONT, GL_SPECULAR, mat_specular (0)'access); - glMaterialfv (GL_FRONT, GL_SHININESS, mat_shininess'access); - end Initialize; - - procedure Display is - begin - glClear (GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); - - glPushMatrix; - --- Glloadidentity; - Glrotatef (85.0, 1.0, 1.0, 1.0); - glEvalMesh2 (GL_FILL, 0, 20, 0, 20); - - glPopMatrix; - - glFlush; - end Display; - - procedure HandleReshape (w : Integer; h : Integer) is - begin - glViewport (0, 0, GLsizei(w), GLsizei(h)); - GlMatrixMode (GL_PROJECTION); - GlLoadIdentity; - if (W < H) then - Glortho (-4.0, 4.0, -4.0 * Gldouble (H / W), 4.0 * Gldouble (H / W), - -4.0, 4.0); - else - Glortho (-4.0 * Gldouble (W / H), 4.0 * Gldouble (W / H), - -4.0, 4.0, -4.0, 4.0); - end if; - end HandleReshape; -end Bezmesh_Procs; diff --git a/lib/glut-3.7.6/progs/ada/bezmesh_procs.ads b/lib/glut-3.7.6/progs/ada/bezmesh_procs.ads deleted file mode 100644 index 59f78d0eb..000000000 --- a/lib/glut-3.7.6/progs/ada/bezmesh_procs.ads +++ /dev/null @@ -1,46 +0,0 @@ --- --- (c) Copyright 1993,1994,1995,1996 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. --- - -with GL; use GL; - -package Bezmesh_Procs is - procedure Initialize; - procedure Display; - procedure HandleReshape (w : Integer; h : Integer); - - An_Error : exception; -end Bezmesh_Procs; diff --git a/lib/glut-3.7.6/progs/ada/cone.adb b/lib/glut-3.7.6/progs/ada/cone.adb deleted file mode 100644 index d1f3b53b1..000000000 --- a/lib/glut-3.7.6/progs/ada/cone.adb +++ /dev/null @@ -1,68 +0,0 @@ --- --- (c) Copyright 1993,1994,1995,1996 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. --- - -with GL; use GL; -with Glut; use Glut; -with Text_IO; -with Cone_Procs; use Cone_Procs; -with Interfaces.C.Strings; - -procedure Cone is - package Tio renames Text_IO; - package ICS renames Interfaces.C.Strings; - - type chars_ptr_ptr is access ICS.chars_ptr; - - argc : aliased integer; - pragma Import (C, argc, "gnat_argc"); - - argv : chars_ptr_ptr; - pragma Import (C, argv, "gnat_argv"); - - foobar : Integer; -begin - glutInitWindowSize(500, 500); - glutInit (argc'access, argv); - glutInitDisplayMode(GLUT_RGB or GLUT_DEPTH or GLUT_SINGLE); - foobar := glutCreateWindow ("OpenGL and Ada: cone"); - - DoInit; - - glutReshapeFunc (ReshapeCallback'ACCESS); - glutDisplayFunc (DoDisplay'ACCESS); - glutMainLoop; -end Cone; diff --git a/lib/glut-3.7.6/progs/ada/cone_procs.adb b/lib/glut-3.7.6/progs/ada/cone_procs.adb deleted file mode 100644 index d2b1f6037..000000000 --- a/lib/glut-3.7.6/progs/ada/cone_procs.adb +++ /dev/null @@ -1,120 +0,0 @@ --- --- (c) Copyright 1993,1994,1995,1996 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. --- - -with GL; use GL; -with GLU; use GLU; - -package body Cone_Procs is - procedure DoInit is - mat_ambient : array (0 .. 3) of aliased GLfloat := - (0.2, 0.2, 0.2, 1.0); - mat_diffuse : array (0 .. 3) of aliased GLfloat := - (0.8, 0.8, 0.8, 1.0); - -- Specular and Shininess are not default values - mat_specular : array (0 .. 3) of aliased GLfloat := - (1.0, 1.0, 1.0, 1.0); - mat_shininess : aliased GLfloat := 50.0; - - light_ambient : array (0 .. 3) of aliased GLfloat := - (0.0, 0.0, 0.0, 1.0); - light_diffuse : array (0 .. 3) of aliased GLfloat := - (1.0, 1.0, 1.0, 1.0); - light_specular : array (0 .. 3) of aliased GLfloat := - (1.0, 1.0, 1.0, 1.0); - light_position : array (0 .. 3) of aliased GLfloat := - (1.0, 1.0, 1.0, 0.0); - - lmodel_ambient : array (0 .. 3) of aliased GLfloat := - (0.2, 0.2, 0.2, 1.0); - begin - glMaterialfv (GL_FRONT, GL_AMBIENT, mat_ambient (0)'Access); - glMaterialfv (GL_FRONT, GL_DIFFUSE, mat_diffuse (0)'Access); - glMaterialfv (GL_FRONT, GL_SPECULAR, mat_specular (0)'Access); - glMaterialfv (GL_FRONT, GL_SHININESS, mat_shininess'Access); - - glLightfv (GL_LIGHT0, GL_AMBIENT, light_ambient (0)'Access); - glLightfv (GL_LIGHT0, GL_DIFFUSE, light_diffuse (0)'Access); - glLightfv (GL_LIGHT0, GL_SPECULAR, light_specular (0)'Access); - glLightfv (GL_LIGHT0, GL_POSITION, light_position (0)'Access); - - glLightModelfv (GL_LIGHT_MODEL_AMBIENT, lmodel_ambient (0)'Access); - - glEnable (GL_LIGHTING); - glEnable (GL_LIGHT0); - glEnable (GL_DEPTH_TEST); - end DoInit; - - procedure solidCone (base : Float; height : Float) is - quadObj : GLUquadricObj_Ptr; - begin - quadObj := gluNewQuadric; - gluQuadricDrawStyle (quadObj, GLU_FILL); - gluQuadricNormals (quadObj, GLU_SMOOTH); - gluCylinder (quadObj, GLdouble(base), 0.0, GLdouble(height), 15, 10); - gluDeleteQuadric (quadObj); - end solidCone; - - procedure DoDisplay is - begin - glClear (GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); - - glPushMatrix; - glTranslatef (0.0, -1.0, 0.0); - glRotatef (250.0, 1.0, 0.0, 0.0); - solidCone (1.0, 2.0); - glPopMatrix; - glFlush; - end DoDisplay; - - - procedure ReshapeCallback (w : Integer; h : Integer) is - begin - glViewport (0, 0, GLsizei(w), GLsizei(h)); - glMatrixMode (GL_PROJECTION); - glLoadIdentity; - - if w <= h then - glOrtho (-1.5, 1.5, GLdouble (-1.5*Float (h)/Float (w)), - GLdouble (1.5*Float (h)/Float (w)), -10.0, 10.0); - else - glOrtho (GLdouble (-1.5*Float (w)/Float (h)), - GLdouble (1.5*Float (w)/Float (h)), -1.5, 1.5, -10.0, 10.0); - end if; - - glMatrixMode (GL_MODELVIEW); - end ReshapeCallback; -end Cone_Procs; diff --git a/lib/glut-3.7.6/progs/ada/cone_procs.ads b/lib/glut-3.7.6/progs/ada/cone_procs.ads deleted file mode 100644 index e79cd7212..000000000 --- a/lib/glut-3.7.6/progs/ada/cone_procs.ads +++ /dev/null @@ -1,44 +0,0 @@ --- --- (c) Copyright 1993,1994,1995,1996 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. --- - -with GL; use GL; - -package Cone_Procs is - procedure DoInit; - procedure DoDisplay; - procedure ReshapeCallback (w : Integer; h : Integer); -end Cone_Procs; diff --git a/lib/glut-3.7.6/progs/ada/dof.adb b/lib/glut-3.7.6/progs/ada/dof.adb deleted file mode 100644 index 22bbe2e2e..000000000 --- a/lib/glut-3.7.6/progs/ada/dof.adb +++ /dev/null @@ -1,68 +0,0 @@ --- --- (c) Copyright 1993,1994,1995,1996 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. --- - -with GL; use GL; -with Glut; use Glut; -with Text_IO; -with Dof_Procs; use Dof_Procs; -with Interfaces.C.Strings; - -procedure Dof is - package Tio renames Text_IO; - package ICS renames Interfaces.C.Strings; - - type chars_ptr_ptr is access ICS.chars_ptr; - - argc : aliased integer; - pragma Import (C, argc, "gnat_argc"); - - argv : chars_ptr_ptr; - pragma Import (C, argv, "gnat_argv"); - - foobar : Integer; -begin - glutInitWindowSize(500, 500); - glutInit (argc'access, argv); - glutInitDisplayMode(GLUT_RGB or GLUT_DEPTH or GLUT_SINGLE); - foobar := glutCreateWindow ("OpenGL and Ada: dof"); - - DoInit; - - glutReshapeFunc (ReshapeCallback'Access); - glutDisplayFunc (DoDisplay'Access); - glutMainLoop; -end Dof; diff --git a/lib/glut-3.7.6/progs/ada/dof_procs.adb b/lib/glut-3.7.6/progs/ada/dof_procs.adb deleted file mode 100644 index e287f2f7c..000000000 --- a/lib/glut-3.7.6/progs/ada/dof_procs.adb +++ /dev/null @@ -1,200 +0,0 @@ --- --- (c) Copyright 1993,1994,1995,1996 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. --- - -with GL; use GL; -with Glut; use Glut; -with Jitter; -with Ada.Numerics; -with Ada.Numerics.Generic_Elementary_Functions; - -package body Dof_Procs is - package Num renames Ada.Numerics; - package GLdouble_GEF is new - Num.Generic_Elementary_Functions (GLdouble); - use GLdouble_GEF; - - procedure accFrustum - (left : GLdouble; right : GLdouble; bottom : GLdouble; - top : GLdouble; near : GLdouble; far : GLdouble; - pixdx : GLdouble; pixdy : GLdouble; eyedx : GLdouble; - eyedy : GLdouble; focus : GLdouble) - is - xwsize, ywsize : GLdouble; - dx, dy : GLdouble; - viewport : array (0 .. 3) of aliased GLint; - begin - glGetIntegerv (GL_VIEWPORT, viewport (0)'Access); - - xwsize := right - left; - ywsize := top - bottom; - - dx := -(pixdx * xwsize / GLdouble (viewport (2)) + eyedx * near / focus); - dy := -(pixdy * ywsize / GLdouble (viewport (3)) + eyedy * near / focus); - - glMatrixMode (GL_PROJECTION); - glLoadIdentity; - glFrustum (left + dx, right + dx, bottom + dy, top + dy, near, far); - glMatrixMode (GL_MODELVIEW); - glLoadIdentity; - glTranslated (-eyedx, -eyedy, 0.0); - end accFrustum; - - procedure accPerspective - (fovy : GLdouble; aspect : GLdouble; near : GLdouble; - far : GLdouble; pixdx : GLdouble; pixdy : GLdouble; - eyedx : GLdouble; eyedy : GLdouble; focus : GLdouble) - is - fov2, left, right, bottom, top : GLdouble; - begin - fov2 := ((fovy * Num.Pi) / 180.0) / 2.0; - - top := near / (Cos (fov2) / Sin (fov2)); - bottom := -top; - - right := top * aspect; - left := -right; - - accFrustum (left, right, bottom, top, near, far, pixdx, - pixdy, eyedx, eyedy, focus); - end accPerspective; - - procedure DoInit is - ambient : array (0 .. 3) of aliased GLfloat := - (0.0, 0.0, 0.0, 1.0); - diffuse : array (0 .. 3) of aliased GLfloat := - (1.0, 1.0, 1.0, 1.0); - position : array (0 .. 3) of aliased GLfloat := - (0.0, 3.0, 3.0, 0.0); - - lmodel_ambient : array (0 .. 3) of aliased GLfloat := - (0.2, 0.2, 0.2, 1.0); - local_view : aliased GLfloat := 0.0; - begin - glLightfv (GL_LIGHT0, GL_AMBIENT, ambient (0)'Access); - glLightfv (GL_LIGHT0, GL_DIFFUSE, diffuse (0)'Access); - glLightfv (GL_LIGHT0, GL_POSITION, position (0)'Access); - - glLightModelfv (GL_LIGHT_MODEL_AMBIENT, lmodel_ambient (0)'Access); - glLightModelfv (GL_LIGHT_MODEL_LOCAL_VIEWER, local_view'Access); - - glFrontFace (GL_CW); - glEnable (GL_LIGHTING); - glEnable (GL_LIGHT0); - glEnable (GL_AUTO_NORMAL); - glEnable (GL_NORMALIZE); - - glEnable (GL_DEPTH_TEST); - glDepthFunc (GL_LESS); - - glMatrixMode (GL_MODELVIEW); - glLoadIdentity; - - glClearColor (0.0, 0.0, 0.0, 0.0); - glClearAccum (0.0, 0.0, 0.0, 0.0); - end DoInit; - - procedure renderTeapot - (x : GLfloat; y : GLfloat; z : GLfloat; - ambr : GLfloat; ambg : GLfloat; ambb : GLfloat; - difr : GLfloat; difg : GLfloat; difb : GLfloat; - specr : GLfloat; specg : GLfloat; specb : GLfloat; - shine : GLfloat) - is - mat : array (0 .. 3) of aliased GLfloat; - begin - glPushMatrix; - - glTranslatef (x, y, z); - - mat (0) := ambr; - mat (1) := ambg; - mat (2) := ambb; - mat (3) := 1.0; - glMaterialfv (GL_FRONT, GL_AMBIENT, mat (0)'Access); - - mat (0) := difr; - mat (1) := difg; - mat (2) := difb; - glMaterialfv (GL_FRONT, GL_DIFFUSE, mat (0)'Access); - - mat (0) := specr; - mat (1) := specg; - mat (2) := specb; - glMaterialfv (GL_FRONT, GL_SPECULAR, mat (0)'Access); - - glMaterialf (GL_FRONT, GL_SHININESS, shine * 128.0); - - glutSolidTeapot (0.5); - glPopMatrix; - end renderTeapot; - - procedure DoDisplay is - viewport : array (0 .. 3) of aliased GLint; - begin - glGetIntegerv (GL_VIEWPORT, viewport (0)'Access); - glClear (GL_ACCUM_BUFFER_BIT); - - for jitval in 1 .. 8 loop - glClear (GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); - accPerspective (45.0, GLdouble (viewport (2)) / - GLdouble (viewport (3)), - 1.0, 15.0, 0.0, 0.0, GLdouble (0.33 * Jitter.j8 (jitval).x), - GLdouble (0.33 * Jitter.j8 (jitval).y), 5.0); - - renderTeapot (-1.1, -0.5, -4.5, 0.1745, 0.01175, 0.01175, - 0.61424, 0.04136, 0.04136, 0.727811, 0.626959, 0.626959, 0.6); - renderTeapot (-0.5, -0.5, -5.0, 0.24725, 0.1995, 0.0745, - 0.75164, 0.60648, 0.22648, 0.628281, 0.555802, 0.366065, 0.4); - renderTeapot (0.2, -0.5, -5.5, 0.19225, 0.19225, 0.19225, - 0.50754, 0.50754, 0.50754, 0.508273, 0.508273, 0.508273, 0.4); - renderTeapot (1.0, -0.5, -6.0, 0.0215, 0.1745, 0.0215, - 0.07568, 0.61424, 0.07568, 0.633, 0.727811, 0.633, 0.6); - renderTeapot (1.8, -0.5, -6.5, 0.0, 0.1, 0.06, 0.0, 0.50980392, - 0.50980392, 0.50196078, 0.50196078, 0.50196078, 0.25); - glAccum (GL_ACCUM, 0.125); - end loop; - - glAccum (GL_RETURN, 1.0); - glFlush; - end DoDisplay; - - - procedure ReshapeCallback (w : Integer; h : Integer) is - begin - glViewport (0, 0, GLsizei(w), GLsizei(h)); - end ReshapeCallback; -end Dof_Procs; diff --git a/lib/glut-3.7.6/progs/ada/dof_procs.ads b/lib/glut-3.7.6/progs/ada/dof_procs.ads deleted file mode 100644 index d2922e7d7..000000000 --- a/lib/glut-3.7.6/progs/ada/dof_procs.ads +++ /dev/null @@ -1,62 +0,0 @@ --- --- (c) Copyright 1993,1994,1995,1996 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. --- - -with GL; use GL; - -package Dof_Procs is - procedure accFrustum - (left : GLdouble; right : GLdouble; bottom : GLdouble; - top : GLdouble; near : GLdouble; far : GLdouble; - pixdx : GLdouble; pixdy : GLdouble; eyedx : GLdouble; - eyedy : GLdouble; focus : GLdouble); - - procedure accPerspective - (fovy : GLdouble; aspect : GLdouble; near : GLdouble; - far : GLdouble; pixdx : GLdouble; pixdy : GLdouble; - eyedx : GLdouble; eyedy : GLdouble; focus : GLdouble); - - procedure renderTeapot - (x : GLfloat; y : GLfloat; z : GLfloat; - ambr : GLfloat; ambg : GLfloat; ambb : GLfloat; - difr : GLfloat; difg : GLfloat; difb : GLfloat; - specr : GLfloat; specg : GLfloat; specb : GLfloat; - shine : GLfloat); - - procedure DoInit; - procedure DoDisplay; - procedure ReshapeCallback (w : Integer; h : Integer); -end Dof_Procs; diff --git a/lib/glut-3.7.6/progs/ada/fog.adb b/lib/glut-3.7.6/progs/ada/fog.adb deleted file mode 100644 index 444e45e70..000000000 --- a/lib/glut-3.7.6/progs/ada/fog.adb +++ /dev/null @@ -1,67 +0,0 @@ --- --- (c) Copyright 1993,1994,1995,1996 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. --- - -with GL; use GL; -with Glut; use Glut; -with Fog_Procs; use Fog_Procs; -with Interfaces.C.Strings; - -procedure Fog is - package ICS renames Interfaces.C.Strings; - - type chars_ptr_ptr is access ICS.chars_ptr; - - argc : aliased integer; - pragma Import (C, argc, "gnat_argc"); - - argv : chars_ptr_ptr; - pragma Import (C, argv, "gnat_argv"); - - winRet : Integer; -begin - glutInitWindowSize(450, 150); - glutInit (argc'access, argv); - glutInitDisplayMode(GLUT_RGB or GLUT_DEPTH or GLUT_SINGLE); - winRet := glutCreateWindow ("OpenGL and Ada: fog"); - glutMouseFunc (CycleFog'ACCESS); - - Initialize; - - glutReshapeFunc (HandleReshape'ACCESS); - glutDisplayFunc (Display'ACCESS); - glutMainLoop; -end Fog; diff --git a/lib/glut-3.7.6/progs/ada/fog_procs.adb b/lib/glut-3.7.6/progs/ada/fog_procs.adb deleted file mode 100644 index 6835a866c..000000000 --- a/lib/glut-3.7.6/progs/ada/fog_procs.adb +++ /dev/null @@ -1,162 +0,0 @@ --- --- (c) Copyright 1993,1994,1995,1996 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. --- - -with GL; use GL; -with Glut; use Glut; -with Text_IO; use Text_IO; -with Unchecked_Conversion; - -package body Fog_Procs is - package tio renames Text_IO; - - function FogToInt is new - Unchecked_Conversion (Source => FogMode, Target => GLint); - - procedure CycleFog (btn: Integer; state: Integer; x, y: Integer) is - begin - if btn = GLUT_LEFT_BUTTON then - if state = GLUT_DOWN then - if fogType = GL_EXP then - fogType := GL_EXP2; - elsif fogType = GL_EXP2 then - fogType := GL_LINEAR; - glFogf (GL_FOG_START, 1.0); - glFogf (GL_FOG_END, 5.0); - elsif fogType = GL_LINEAR then - fogType := GL_EXP; - end if; - --- tio.Put_Line("Fog mode is " & FogMode'IMAGE (fogType)); - - glFogi (GL_FOG_MODE, FogToInt (fogType)); - glutPostRedisplay; - end if; - end if; - end CycleFog; - - procedure Initialize is - position : array (0 .. 3) of aliased GLfloat := - (0.0, 3.0, 3.0, 0.0); - local_view : aliased GLfloat := 0.0; - - fogColor : array (0 .. 3) of aliased GLfloat := - (0.5, 0.5, 0.5, 1.0); - begin - glEnable (GL_DEPTH_TEST); - glDepthFunc (GL_LESS); - - glLightfv (GL_LIGHT0, GL_POSITION, position (0)'Access); - glLightModelfv (GL_LIGHT_MODEL_LOCAL_VIEWER, local_view'Access); - - glFrontFace (GL_CW); - glEnable (GL_LIGHTING); - glEnable (GL_LIGHT0); - glEnable (GL_AUTO_NORMAL); - glEnable (GL_NORMALIZE); - glEnable (GL_FOG); - - fogType := GL_EXP; - - glFogi (GL_FOG_MODE, FogToInt (fogType)); - glFogfv (GL_FOG_COLOR, fogColor (0)'Access); - glFogf (GL_FOG_DENSITY, 0.35); - glHint (GL_FOG_HINT, GL_DONT_CARE); - glClearColor (0.5, 0.5, 0.5, 1.0); - end Initialize; - - procedure RenderRedTeapot (x : GLfloat; y : GLfloat; z : GLfloat) is - mat : array (0 .. 3) of aliased GLfloat; - begin - glPushMatrix; - - glTranslatef (x, y, z); - - mat (0) := 0.1745; - mat (1) := 0.01175; - mat (2) := 0.01175; - mat (3) := 1.0; - glMaterialfv (GL_FRONT, GL_AMBIENT, mat (0)'Access); - - mat (0) := 0.61424; - mat (1) := 0.04136; - mat (2) := 0.04136; - glMaterialfv (GL_FRONT, GL_DIFFUSE, mat (0)'Access); - - mat (0) := 0.727811; - mat (1) := 0.626959; - mat (2) := 0.626959; - glMaterialfv (GL_FRONT, GL_SPECULAR, mat (0)'Access); - - glMaterialf (GL_FRONT, GL_SHININESS, 0.6*128.0); - - glutSolidTeapot (1.0); - - glPopMatrix; - end RenderRedTeapot; - - procedure Display is - begin - glClear (GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); - RenderRedTeapot (-4.0, -0.5, -1.0); - RenderRedTeapot (-2.0, -0.5, -2.0); - RenderRedTeapot (0.0, -0.5, -3.0); - RenderRedTeapot (2.0, -0.5, -4.0); - RenderRedTeapot (4.0, -0.5, -5.0); - glFlush; - end Display; - - procedure HandleReshape (w : Integer; h : Integer) is - begin - glViewport (0, 0, GLsizei(w), GLsizei(h)); - glMatrixMode (GL_PROJECTION); - - glLoadIdentity; - - if w <= (h * 3) then - glOrtho (-6.0, 6.0, - GLdouble (-2.0 * (GLdouble (h) * 3.0) / GLdouble (w)), - GLdouble (2.0 * (GLdouble (h) * 3.0 / GLdouble (w))), 0.0, 10.0); - else - glOrtho (GLdouble (-6.0 * GLdouble (w) / (GLdouble (h) * 3.0)), - GLdouble (6.0 * GLdouble (w) / (GLdouble (h) * 3.0)), - -2.0, 2.0, 0.0, 10.0); - end if; - - glMatrixMode (GL_MODELVIEW); - glLoadIdentity; - end HandleReshape; -end Fog_Procs; diff --git a/lib/glut-3.7.6/progs/ada/fog_procs.ads b/lib/glut-3.7.6/progs/ada/fog_procs.ads deleted file mode 100644 index 92e86f8f0..000000000 --- a/lib/glut-3.7.6/progs/ada/fog_procs.ads +++ /dev/null @@ -1,48 +0,0 @@ --- --- (c) Copyright 1993,1994,1995,1996 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. --- - -with GL; use GL; - -package Fog_Procs is - fogType : FogMode; - - procedure CycleFog (btn: Integer; state: Integer; x, y: Integer); - procedure Initialize; - procedure RenderRedTeapot (x : GLfloat; y : GLfloat; z : GLfloat); - procedure Display; - procedure HandleReshape (w : Integer; h : Integer); -end Fog_Procs; diff --git a/lib/glut-3.7.6/progs/ada/jitter.ads b/lib/glut-3.7.6/progs/ada/jitter.ads deleted file mode 100644 index 72d835d45..000000000 --- a/lib/glut-3.7.6/progs/ada/jitter.ads +++ /dev/null @@ -1,182 +0,0 @@ --- --- (c) Copyright 1993,1994,1995,1996 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. --- - -with GL; use GL; - -package Jitter is - type Jitter_Point is - record - x, y : GLfloat; - end record; - - j2 : array (1 .. 2) of Jitter_Point := - ((0.246490, 0.249999), - (-0.246490, -0.249999)); - - j3 : array (1 .. 3) of Jitter_Point := - ((-0.373411, -0.250550), - (0.256263, 0.368119), - (0.117148, -0.117570)); - - j4 : array (1 .. 4) of Jitter_Point := - ((-0.208147, 0.353730), - (0.203849, -0.353780), - (-0.292626, -0.149945), - (0.296924, 0.149994)); - - j8 : array (1 .. 8) of Jitter_Point := - ((-0.334818, 0.435331), - (0.286438, -0.393495), - (0.459462, 0.141540), - (-0.414498, -0.192829), - (-0.183790, 0.082102), - (-0.079263, -0.317383), - (0.102254, 0.299133), - (0.164216, -0.054399)); - - j15 : array (1 .. 15) of Jitter_Point := - ((0.285561, 0.188437), - (0.360176, -0.065688), - (-0.111751, 0.275019), - (-0.055918, -0.215197), - (-0.080231, -0.470965), - (0.138721, 0.409168), - (0.384120, 0.458500), - (-0.454968, 0.134088), - (0.179271, -0.331196), - (-0.307049, -0.364927), - (0.105354, -0.010099), - (-0.154180, 0.021794), - (-0.370135, -0.116425), - (0.451636, -0.300013), - (-0.370610, 0.387504)); - - j24 : array (1 .. 24) of Jitter_Point := - ((0.030245, 0.136384), - (0.018865, -0.348867), - (-0.350114, -0.472309), - (0.222181, 0.149524), - (-0.393670, -0.266873), - (0.404568, 0.230436), - (0.098381, 0.465337), - (0.462671, 0.442116), - (0.400373, -0.212720), - (-0.409988, 0.263345), - (-0.115878, -0.001981), - (0.348425, -0.009237), - (-0.464016, 0.066467), - (-0.138674, -0.468006), - (0.144932, -0.022780), - (-0.250195, 0.150161), - (-0.181400, -0.264219), - (0.196097, -0.234139), - (-0.311082, -0.078815), - (0.268379, 0.366778), - (-0.040601, 0.327109), - (-0.234392, 0.354659), - (-0.003102, -0.154402), - (0.297997, -0.417965)); - - j66 : array (1 .. 66) of Jitter_Point := - ((0.266377, -0.218171), - (-0.170919, -0.429368), - (0.047356, -0.387135), - (-0.430063, 0.363413), - (-0.221638, -0.313768), - (0.124758, -0.197109), - (-0.400021, 0.482195), - (0.247882, 0.152010), - (-0.286709, -0.470214), - (-0.426790, 0.004977), - (-0.361249, -0.104549), - (-0.040643, 0.123453), - (-0.189296, 0.438963), - (-0.453521, -0.299889), - (0.408216, -0.457699), - (0.328973, -0.101914), - (-0.055540, -0.477952), - (0.194421, 0.453510), - (0.404051, 0.224974), - (0.310136, 0.419700), - (-0.021743, 0.403898), - (-0.466210, 0.248839), - (0.341369, 0.081490), - (0.124156, -0.016859), - (-0.461321, -0.176661), - (0.013210, 0.234401), - (0.174258, -0.311854), - (0.294061, 0.263364), - (-0.114836, 0.328189), - (0.041206, -0.106205), - (0.079227, 0.345021), - (-0.109319, -0.242380), - (0.425005, -0.332397), - (0.009146, 0.015098), - (-0.339084, -0.355707), - (-0.224596, -0.189548), - (0.083475, 0.117028), - (0.295962, -0.334699), - (0.452998, 0.025397), - (0.206511, -0.104668), - (0.447544, -0.096004), - (-0.108006, -0.002471), - (-0.380810, 0.130036), - (-0.242440, 0.186934), - (-0.200363, 0.070863), - (-0.344844, -0.230814), - (0.408660, 0.345826), - (-0.233016, 0.305203), - (0.158475, -0.430762), - (0.486972, 0.139163), - (-0.301610, 0.009319), - (0.282245, -0.458671), - (0.482046, 0.443890), - (-0.121527, 0.210223), - (-0.477606, -0.424878), - (-0.083941, -0.121440), - (-0.345773, 0.253779), - (0.234646, 0.034549), - (0.394102, -0.210901), - (-0.312571, 0.397656), - (0.200906, 0.333293), - (0.018703, -0.261792), - (-0.209349, -0.065383), - (0.076248, 0.478538), - (-0.073036, -0.355064), - (0.145087, 0.221726)); - -end Jitter; diff --git a/lib/glut-3.7.6/progs/ada/pickdepth.adb b/lib/glut-3.7.6/progs/ada/pickdepth.adb deleted file mode 100644 index 794725857..000000000 --- a/lib/glut-3.7.6/progs/ada/pickdepth.adb +++ /dev/null @@ -1,69 +0,0 @@ --- --- (c) Copyright 1993,1994,1995,1996 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. --- - -with GL; use GL; -with Glut; use Glut; -with Text_IO; -with PickDepth_Procs; use PickDepth_Procs; -with Interfaces.C.Strings; - -procedure PickDepth is - package Tio renames Text_IO; - package ICS renames Interfaces.C.Strings; - - type chars_ptr_ptr is access ICS.chars_ptr; - - argc : aliased integer; - pragma Import (C, argc, "gnat_argc"); - - argv : chars_ptr_ptr; - pragma Import (C, argv, "gnat_argv"); - - foobar : Integer; -begin - glutInitWindowSize (300, 300); - glutInit (argc'access, argv); - glutInitDisplayMode(GLUT_RGB or GLUT_DEPTH or GLUT_SINGLE); - foobar := glutCreateWindow ("OpenGL & Ada: pickdepth"); - - DoInit; - - glutMouseFunc (PickRects'Access); - glutReshapeFunc (ReshapeCallback'Access); - glutDisplayFunc (DoDisplay'Access); - glutMainLoop; -end PickDepth; diff --git a/lib/glut-3.7.6/progs/ada/pickdepth_procs.adb b/lib/glut-3.7.6/progs/ada/pickdepth_procs.adb deleted file mode 100644 index 24e9f2906..000000000 --- a/lib/glut-3.7.6/progs/ada/pickdepth_procs.adb +++ /dev/null @@ -1,166 +0,0 @@ --- --- (c) Copyright 1993,1994,1995,1996 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. --- - -with GL; use GL; -with GLU; use GLU; -with GLUT; use GLUT; -with Text_IO; - -package body PickDepth_Procs is - package tio renames Text_IO; - - procedure DoInit is - begin - glClearColor (0.0, 0.0, 0.0, 0.0); - glDepthFunc (GL_LESS); - glEnable (GL_DEPTH_TEST); - glShadeModel (GL_FLAT); - glDepthRange (0.0, 1.0); - end DoInit; - - procedure DrawRects (mode : RenderingMode) is - begin - if mode = GL_SELECT then glLoadName (1); end if; - glBegin (GL_QUADS); - glColor3f (1.0, 1.0, 0.0); - glVertex3i (2, 0, 0); - glVertex3i (2, 6, 0); - glVertex3i (6, 6, 0); - glVertex3i (6, 0, 0); - glEnd; - - if mode = GL_SELECT then glLoadName (2); end if; - glBegin (GL_QUADS); - glColor3f (0.0, 1.0, 1.0); - glVertex3i (3, 2, -1); - glVertex3i (3, 8, -1); - glVertex3i (8, 8, -1); - glVertex3i (8, 2, -1); - glEnd; - - if mode = GL_SELECT then glLoadName (3); end if; - glBegin (GL_QUADS); - glColor3f (1.0, 0.0, 1.0); - glVertex3i (0, 2, -2); - glVertex3i (0, 7, -2); - glVertex3i (5, 7, -2); - glVertex3i (5, 2, -2); - glEnd; - end DrawRects; - - type int_ar is array (Integer range <>) of aliased GLuint; - - procedure ProcessHits (hits : GLint; buffer : in int_ar) is - j : Integer := buffer'First; - begin - tio.Put_Line ("Hits = " & GLint'Image (hits)); - - if hits /= 0 then - for i in - Integer (buffer'First) .. - Integer (buffer'First + Integer (hits) - 1) - loop - tio.Put_Line (" number of names for hit = " & - GLuint'Image (buffer (j))); - j := j + 1; - tio.Put (" z1 is " & GLuint'Image (buffer (j))); - j := j + 1; - tio.Put ("; z2 is " & GLuint'Image (buffer (j))); - j := j + 1; - tio.New_Line; - tio.Put (" names:"); - - for k in 1 .. Integer (buffer (buffer'First)) loop - tio.Put (" " & GLuint'Image (buffer (j))); - j := j + 1; - end loop; - tio.New_Line; - end loop; - end if; - end ProcessHits; - - BUFSIZE : constant := 512; - - procedure PickRects (btn : Integer; state: Integer; x, y: Integer) is - selectBuf : array (1 .. BUFSIZE) of aliased GLuint; - hits : GLint; - viewport : array (0 .. 3) of aliased GLint; - begin - if state = GLUT_LEFT_BUTTON then - if state = GLUT_DOWN then - glGetIntegerv (GL_VIEWPORT, viewport (0)'Access); - - glSelectBuffer (BUFSIZE, selectBuf (1)'Access); - hits := glRenderMode (GL_SELECT); - - glInitNames; - glPushName (-1); - - glMatrixMode (GL_PROJECTION); - glPushMatrix; - glLoadIdentity; - gluPickMatrix (GLdouble (x), GLdouble (viewport (3) - GLint(y)), - 5.0, 5.0, viewport (0)'Access); - glOrtho (0.0, 8.0, 0.0, 8.0, -0.5, 2.5); - DrawRects (GL_SELECT); - glPopMatrix; - glFlush; - - hits := glRenderMode (GL_RENDER); - ProcessHits (hits, int_ar (selectBuf)); - end if; - end if; - end PickRects; - - procedure DoDisplay is - begin - glClear (GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); - DrawRects (GL_RENDER); - glFlush; - end DoDisplay; - - - procedure ReshapeCallback (w : Integer; h : Integer) is - begin - glViewport (0, 0, GLsizei(w), GLsizei(h)); - glMatrixMode (GL_PROJECTION); - glLoadIdentity; - glOrtho (0.0, 8.0, 0.0, 8.0, -0.5, 2.5); - glMatrixMode (GL_MODELVIEW); - glLoadIdentity; - end ReshapeCallback; -end PickDepth_Procs; diff --git a/lib/glut-3.7.6/progs/ada/pickdepth_procs.ads b/lib/glut-3.7.6/progs/ada/pickdepth_procs.ads deleted file mode 100644 index 0fa9a26dd..000000000 --- a/lib/glut-3.7.6/progs/ada/pickdepth_procs.ads +++ /dev/null @@ -1,45 +0,0 @@ --- --- (c) Copyright 1993,1994,1995,1996 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. --- - -with GL; use GL; - -package PickDepth_Procs is - procedure DoInit; - procedure DoDisplay; - procedure PickRects (btn: Integer; state: Integer; x, y: Integer); - procedure ReshapeCallback (w : Integer; h : Integer); -end PickDepth_Procs; diff --git a/lib/glut-3.7.6/progs/ada/scenebamb.adb b/lib/glut-3.7.6/progs/ada/scenebamb.adb deleted file mode 100644 index 2d0034890..000000000 --- a/lib/glut-3.7.6/progs/ada/scenebamb.adb +++ /dev/null @@ -1,68 +0,0 @@ --- --- (c) Copyright 1993,1994,1995,1996 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. --- - -with GL; use GL; -with Glut; use Glut; -with Text_IO; -with Scenebamb_Procs; use Scenebamb_Procs; -with Interfaces.C.Strings; - -procedure Scenebamb is - package Tio renames Text_IO; - package ICS renames Interfaces.C.Strings; - - type chars_ptr_ptr is access ICS.chars_ptr; - - argc : aliased integer; - pragma Import (C, argc, "gnat_argc"); - - argv : chars_ptr_ptr; - pragma Import (C, argv, "gnat_argv"); - - foobar : Integer; -begin - glutInitWindowSize (500, 500); - glutInit (argc'access, argv); - glutInitDisplayMode(GLUT_RGB or GLUT_DEPTH or GLUT_SINGLE); - foobar := glutCreateWindow ("OpenGL & Ada: scenebamb"); - - DoInit; - - glutReshapeFunc (ReshapeCallback'ACCESS); - glutDisplayFunc (DoDisplay'ACCESS); - glutMainLoop; -end Scenebamb; diff --git a/lib/glut-3.7.6/progs/ada/scenebamb_procs.adb b/lib/glut-3.7.6/progs/ada/scenebamb_procs.adb deleted file mode 100644 index 0a575d63c..000000000 --- a/lib/glut-3.7.6/progs/ada/scenebamb_procs.adb +++ /dev/null @@ -1,109 +0,0 @@ --- --- (c) Copyright 1993,1994,1995,1996 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. --- - -with GL; use GL; -with Glut; use Glut; - -package body Scenebamb_Procs is - procedure DoInit is - ambient : array (0 .. 3) of aliased GLfloat := - (0.0, 0.0, 1.0, 1.0); - diffuse : array (0 .. 3) of aliased GLfloat := - (1.0, 1.0, 1.0, 1.0); - specular : array (0 .. 3) of aliased GLfloat := - (1.0, 1.0, 1.0, 1.0); - position : array (0 .. 3) of aliased GLfloat := - (1.0, 1.0, 1.0, 0.0); - begin - glLightfv (GL_LIGHT0, GL_AMBIENT, ambient (0)'access); - glLightfv (GL_LIGHT0, GL_DIFFUSE, diffuse (0)'access); - glLightfv (GL_LIGHT0, GL_POSITION, position (0)'access); - - glEnable (GL_LIGHTING); - glEnable (GL_LIGHT0); - glEnable (GL_DEPTH_TEST); - glDepthFunc (GL_LESS); - end DoInit; - - procedure DoDisplay is - begin - -- 16#4100# = GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT - glClear (GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); - - glPushMatrix; - glRotatef (20.0, 1.0, 0.0, 0.0); - - glPushMatrix; - glTranslatef (-0.75, 0.5, 0.0); - glRotatef (90.0, 1.0, 0.0, 0.0); - glutSolidTorus (0.275, 0.85, 15, 15); - glPopMatrix; - - glPushMatrix; - glTranslatef (-0.75, -0.5, 0.0); - glRotatef (270.0, 1.0, 0.0, 0.0); - glutSolidCone (1.0, 2.0, 15, 15); - glPopMatrix; - - glPushMatrix; - glTranslatef (0.75, 0.0, -1.0); - glutSolidSphere (1.0, 15, 15); - glPopMatrix; - - glPopMatrix; - - glFlush; - end DoDisplay; - - - procedure ReshapeCallback (w : Integer; h : Integer) is - begin - glViewport (0, 0, GLsizei(w), GLsizei(h)); - glMatrixMode (GL_PROJECTION); - glLoadIdentity; - - if w <= h then - glOrtho (-2.5, 2.5, GLdouble (-2.5*Float (h)/ Float (w)), - GLdouble (2.5*Float (h)/Float (w)), -10.0, 10.0); - else - glOrtho (GLdouble (-2.5*Float (w)/Float (h)), - GLdouble (2.5*Float (w)/Float (h)), -2.5, 2.5, -10.0, 10.0); - end if; - - glMatrixMode (GL_MODELVIEW); - end ReshapeCallback; -end Scenebamb_Procs; diff --git a/lib/glut-3.7.6/progs/ada/scenebamb_procs.ads b/lib/glut-3.7.6/progs/ada/scenebamb_procs.ads deleted file mode 100644 index 3310d5fbd..000000000 --- a/lib/glut-3.7.6/progs/ada/scenebamb_procs.ads +++ /dev/null @@ -1,42 +0,0 @@ --- --- (c) Copyright 1993,1994,1995,1996 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. --- - -package Scenebamb_Procs is - procedure DoInit; - procedure DoDisplay; - procedure ReshapeCallback (w : Integer; h : Integer); -end Scenebamb_Procs; diff --git a/lib/glut-3.7.6/progs/ada/teapots.adb b/lib/glut-3.7.6/progs/ada/teapots.adb deleted file mode 100644 index 9e8864a5b..000000000 --- a/lib/glut-3.7.6/progs/ada/teapots.adb +++ /dev/null @@ -1,70 +0,0 @@ --- --- (c) Copyright 1993,1994,1995,1996 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. --- - -with GL; use GL; -with Glut; use Glut; -with Text_IO; -with Teapots_Procs; use Teapots_Procs; -with Interfaces.C.Strings; - -procedure Teapots is - package Tio renames Text_IO; - package C renames Interfaces.C; - - package ICS renames Interfaces.C.Strings; - - type chars_ptr_ptr is access ICS.chars_ptr; - - argc : aliased integer; - pragma Import (C, argc, "gnat_argc"); - - argv : chars_ptr_ptr; - pragma Import (C, argv, "gnat_argv"); - - foobar : Integer; -begin - glutInitWindowSize (500, 600); - glutInit (argc'access, argv); - glutInitDisplayMode(GLUT_RGB or GLUT_DEPTH or GLUT_SINGLE); - foobar := glutCreateWindow ("OpenGL & Ada: teapots"); - - DoInit; - - glutReshapeFunc (ReshapeCallback'Access); - glutDisplayFunc (DoDisplay'Access); - glutMainLoop; -end Teapots; diff --git a/lib/glut-3.7.6/progs/ada/teapots_procs.adb b/lib/glut-3.7.6/progs/ada/teapots_procs.adb deleted file mode 100644 index 2865f0a08..000000000 --- a/lib/glut-3.7.6/progs/ada/teapots_procs.adb +++ /dev/null @@ -1,178 +0,0 @@ --- --- (c) Copyright 1993,1994,1995,1996 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. --- - -with GL; use GL; -with Glut; use Glut; - -package body Teapots_Procs is - procedure DoInit is - ambient : array (0 .. 3) of aliased GLfloat := - (0.0, 0.0, 0.0, 1.0); - diffuse : array (0 .. 3) of aliased GLfloat := - (1.0, 1.0, 1.0, 1.0); - specular : array (0 .. 3) of aliased GLfloat := - (1.0, 1.0, 1.0, 1.0); - position : array (0 .. 3) of aliased GLfloat := - (0.0, 3.0, 3.0, 0.0); - - lmodel_ambient : array (0 .. 3) of aliased GLfloat := - (0.2, 0.2, 0.2, 1.0); - local_view : aliased GLfloat := 0.0; - begin - glLightfv (GL_LIGHT0, GL_AMBIENT, ambient (0)'Access); - glLightfv (GL_LIGHT0, GL_DIFFUSE, diffuse (0)'Access); - glLightfv (GL_LIGHT0, GL_POSITION, position (0)'Access); - glLightModelfv (GL_LIGHT_MODEL_AMBIENT, lmodel_ambient (0)'Access); - glLightModelfv (GL_LIGHT_MODEL_LOCAL_VIEWER, local_view'Access); - - glFrontFace (GL_CW); - glEnable (GL_LIGHTING); - glEnable (GL_LIGHT0); - glEnable (GL_AUTO_NORMAL); - glEnable (GL_NORMALIZE); - glEnable (GL_DEPTH_TEST); - glDepthFunc (GL_LESS); - end DoInit; - - procedure renderTeapot - (x : GLfloat; y : GLfloat; ambr : GLfloat; - ambg : GLfloat; ambb : GLfloat; difr : GLfloat; - difg : GLfloat; difb : GLfloat; specr : GLfloat; - specg : GLfloat; specb : GLfloat; shine : GLfloat) - is - mat : array (0 .. 3) of aliased GLfloat; - begin - glPushMatrix; - - glTranslatef (x, y, 0.0); - - mat (0) := ambr; - mat (1) := ambg; - mat (2) := ambb; - mat (3) := 1.0; - glMaterialfv (GL_FRONT, GL_AMBIENT, mat (0)'Access); - - mat (0) := difr; - mat (1) := difg; - mat (2) := difb; - glMaterialfv (GL_FRONT, GL_DIFFUSE, mat (0)'Access); - - mat (0) := specr; - mat (1) := specg; - mat (2) := specb; - glMaterialfv (GL_FRONT, GL_SPECULAR, mat (0)'Access); - - glMaterialf (GL_FRONT, GL_SHININESS, shine * 128.0); - - glutSolidTeapot (1.0); - glPopMatrix; - end renderTeapot; - - procedure DoDisplay is - begin - -- 16#4100# = GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT - glClear (GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); - renderTeapot (2.0, 17.0, 0.0215, 0.1745, 0.0215, - 0.07568, 0.61424, 0.07568, 0.633, 0.727811, 0.633, 0.6); - renderTeapot (2.0, 14.0, 0.135, 0.2225, 0.1575, - 0.54, 0.89, 0.63, 0.316228, 0.316228, 0.316228, 0.1); - renderTeapot (2.0, 11.0, 0.05375, 0.05, 0.06625, - 0.18275, 0.17, 0.22525, 0.332741, 0.328634, 0.346435, 0.3); - renderTeapot (2.0, 8.0, 0.25, 0.20725, 0.20725, - 1.0, 0.829, 0.829, 0.296648, 0.296648, 0.296648, 0.088); - renderTeapot (2.0, 5.0, 0.1745, 0.01175, 0.01175, - 0.61424, 0.04136, 0.04136, 0.727811, 0.626959, 0.626959, 0.6); - renderTeapot (2.0, 2.0, 0.1, 0.18725, 0.1745, - 0.396, 0.74151, 0.69102, 0.297254, 0.30829, 0.306678, 0.1); - renderTeapot (6.0, 17.0, 0.329412, 0.223529, 0.027451, - 0.780392, 0.568627, 0.113725, 0.992157, 0.941176, 0.807843, - 0.21794872); - renderTeapot (6.0, 14.0, 0.2125, 0.1275, 0.054, - 0.714, 0.4284, 0.18144, 0.393548, 0.271906, 0.166721, 0.2); - renderTeapot (6.0, 11.0, 0.25, 0.25, 0.25, - 0.4, 0.4, 0.4, 0.774597, 0.774597, 0.774597, 0.6); - renderTeapot (6.0, 8.0, 0.19125, 0.0735, 0.0225, - 0.7038, 0.27048, 0.0828, 0.256777, 0.137622, 0.086014, 0.1); - renderTeapot (6.0, 5.0, 0.24725, 0.1995, 0.0745, - 0.75164, 0.60648, 0.22648, 0.628281, 0.555802, 0.366065, 0.4); - renderTeapot (6.0, 2.0, 0.19225, 0.19225, 0.19225, - 0.50754, 0.50754, 0.50754, 0.508273, 0.508273, 0.508273, 0.4); - renderTeapot (10.0, 17.0, 0.0, 0.0, 0.0, 0.01, 0.01, 0.01, - 0.50, 0.50, 0.50, 0.25); - renderTeapot (10.0, 14.0, 0.0, 0.1, 0.06, 0.0, 0.50980392, 0.50980392, - 0.50196078, 0.50196078, 0.50196078, 0.25); - renderTeapot (10.0, 11.0, 0.0, 0.0, 0.0, - 0.1, 0.35, 0.1, 0.45, 0.55, 0.45, 0.25); - renderTeapot (10.0, 8.0, 0.0, 0.0, 0.0, 0.5, 0.0, 0.0, - 0.7, 0.6, 0.6, 0.25); - renderTeapot (10.0, 5.0, 0.0, 0.0, 0.0, 0.55, 0.55, 0.55, - 0.70, 0.70, 0.70, 0.25); - renderTeapot (10.0, 2.0, 0.0, 0.0, 0.0, 0.5, 0.5, 0.0, - 0.60, 0.60, 0.50, 0.25); - renderTeapot (14.0, 17.0, 0.02, 0.02, 0.02, 0.01, 0.01, 0.01, - 0.4, 0.4, 0.4, 0.078125); - renderTeapot (14.0, 14.0, 0.0, 0.05, 0.05, 0.4, 0.5, 0.5, - 0.04, 0.7, 0.7, 0.078125); - renderTeapot (14.0, 11.0, 0.0, 0.05, 0.0, 0.4, 0.5, 0.4, - 0.04, 0.7, 0.04, 0.078125); - renderTeapot (14.0, 8.0, 0.05, 0.0, 0.0, 0.5, 0.4, 0.4, - 0.7, 0.04, 0.04, 0.078125); - renderTeapot (14.0, 5.0, 0.05, 0.05, 0.05, 0.5, 0.5, 0.5, - 0.7, 0.7, 0.7, 0.078125); - renderTeapot (14.0, 2.0, 0.05, 0.05, 0.0, 0.5, 0.5, 0.4, - 0.7, 0.7, 0.04, 0.078125); - glFlush; - end DoDisplay; - - - procedure ReshapeCallback (w : Integer; h : Integer) is - begin - glViewport (0, 0, GLsizei(w), GLsizei(h)); - glMatrixMode (GL_PROJECTION); - glLoadIdentity; - - if w <= h then - glOrtho (0.0, 16.0, 0.0, GLdouble (16.0*Float (h)/Float (w)), - -10.0, 0.0); - else - glOrtho (0.0, GLdouble (16.0*Float (w)/Float (h)), - 0.0, 16.0, -10.0, 10.0); - end if; - - glMatrixMode (GL_MODELVIEW); - end ReshapeCallback; -end Teapots_Procs; diff --git a/lib/glut-3.7.6/progs/ada/teapots_procs.ads b/lib/glut-3.7.6/progs/ada/teapots_procs.ads deleted file mode 100644 index b7976d7f4..000000000 --- a/lib/glut-3.7.6/progs/ada/teapots_procs.ads +++ /dev/null @@ -1,50 +0,0 @@ --- --- (c) Copyright 1993,1994,1995,1996 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. --- - -with GL; use GL; - -package Teapots_Procs is - procedure DoInit; - procedure renderTeapot - (x : GLfloat; y : GLfloat; ambr : GLfloat; - ambg : GLfloat; ambb : GLfloat; difr : GLfloat; - difg : GLfloat; difb : GLfloat; specr : GLfloat; - specg : GLfloat; specb : GLfloat; shine : GLfloat); - - procedure DoDisplay; - procedure ReshapeCallback (w : Integer; h : Integer); -end Teapots_Procs; diff --git a/lib/glut-3.7.6/progs/ada/texgen.adb b/lib/glut-3.7.6/progs/ada/texgen.adb deleted file mode 100644 index 67a687c95..000000000 --- a/lib/glut-3.7.6/progs/ada/texgen.adb +++ /dev/null @@ -1,68 +0,0 @@ --- --- (c) Copyright 1993,1994,1995,1996 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. --- - -with GL; use GL; -with Glut; use Glut; -with Text_IO; -with Texgen_Procs; use Texgen_Procs; -with Interfaces.C.Strings; - -procedure Texgen is - package Tio renames Text_IO; - package ICS renames Interfaces.C.Strings; - - type chars_ptr_ptr is access ICS.chars_ptr; - - argc : aliased integer; - pragma Import (C, argc, "gnat_argc"); - - argv : chars_ptr_ptr; - pragma Import (C, argv, "gnat_argv"); - - foobar : Integer; -begin - glutInitWindowSize (300, 300); - glutInit (argc'access, argv); - glutInitDisplayMode(GLUT_RGB or GLUT_DEPTH or GLUT_SINGLE); - foobar := glutCreateWindow ("OpenGL & Ada: texgen"); - - DoInit; - - glutReshapeFunc (ReshapeCallback'ACCESS); - glutDisplayFunc (DoDisplay'ACCESS); - glutMainLoop; -end Texgen; diff --git a/lib/glut-3.7.6/progs/ada/texgen_procs.adb b/lib/glut-3.7.6/progs/ada/texgen_procs.adb deleted file mode 100644 index 63856dc9d..000000000 --- a/lib/glut-3.7.6/progs/ada/texgen_procs.adb +++ /dev/null @@ -1,121 +0,0 @@ --- --- (c) Copyright 1993,1994,1995,1996 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. --- - -with GL; use GL; -with Glut; use Glut; - -package body Texgen_Procs is - stripeImage : array (0 .. 95) of aliased GLubyte; - - procedure makeStripeImage is - begin - for j in 0 .. 31 loop - if j <= 4 then stripeImage (3*j) := 255; - else stripeImage (3*j) := 0; - end if; - - if j > 4 then stripeImage (3*j+1) := 255; - else stripeImage (3*j+1) := 0; - end if; - - stripeImage (3*j+2) := 0; - end loop; - end makeStripeImage; - - sgenparams : array (0 .. 3) of aliased GLfloat := - (1.0, 1.0, 1.0, 0.0); - - procedure DoInit is - begin - glClearColor (0.0, 0.0, 0.0, 0.0); - - makeStripeImage; - glPixelStorei (GL_UNPACK_ALIGNMENT, 1); - glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - glTexParameteri (GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri (GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri (GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexImage1D (GL_TEXTURE_1D, 0, 3, 32, 0, - GL_RGB, GL_UNSIGNED_BYTE, stripeImage(0)'Access); - - glTexGeni (GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - glTexGenfv (GL_S, GL_OBJECT_PLANE, sgenparams (0)'ACCESS); - - glEnable (GL_DEPTH_TEST); - glDepthFunc (GL_LESS); - glEnable (GL_TEXTURE_GEN_S); - glEnable (GL_TEXTURE_1D); - glEnable (GL_CULL_FACE); - glEnable (GL_LIGHTING); - glEnable (GL_LIGHT0); - glEnable (GL_AUTO_NORMAL); - glEnable (GL_NORMALIZE); - glFrontFace (GL_CW); - glCullFace (GL_BACK); - glMaterialf (GL_FRONT, GL_SHININESS, 64.0); - end DoInit; - - procedure DoDisplay is - begin - glClear (GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); - glPushMatrix; - glRotatef (45.0, 0.0, 0.0, 1.0); - glutSolidTeapot (2.0); - glPopMatrix; - glFlush; - end DoDisplay; - - - procedure ReshapeCallback (w : Integer; h : Integer) is - begin - glViewport (0, 0, GLsizei(w), GLsizei(h)); - - glMatrixMode (GL_PROJECTION); - glLoadIdentity; - - if w <= h then - glOrtho (-3.5, 3.5, GLdouble (-3.5*GLdouble (h)/GLdouble (w)), - GLdouble (3.5*GLdouble (h)/GLdouble (w)), -3.5, 3.5); - else - glOrtho ((-3.5*GLdouble (w)/GLdouble (h)), - GLdouble (3.5*GLdouble (w)/GLdouble (h)), -3.5, 3.5, -3.5, 3.5); - end if; - - glMatrixMode (GL_MODELVIEW); - glLoadIdentity; - end ReshapeCallback; -end Texgen_Procs; diff --git a/lib/glut-3.7.6/progs/ada/texgen_procs.ads b/lib/glut-3.7.6/progs/ada/texgen_procs.ads deleted file mode 100644 index c07d8cfb6..000000000 --- a/lib/glut-3.7.6/progs/ada/texgen_procs.ads +++ /dev/null @@ -1,42 +0,0 @@ --- --- (c) Copyright 1993,1994,1995,1996 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. --- - -package Texgen_Procs is - procedure DoInit; - procedure DoDisplay; - procedure ReshapeCallback (w : Integer; h : Integer); -end Texgen_Procs; diff --git a/lib/glut-3.7.6/progs/ada/texturesurf.adb b/lib/glut-3.7.6/progs/ada/texturesurf.adb deleted file mode 100644 index 6d9945e3d..000000000 --- a/lib/glut-3.7.6/progs/ada/texturesurf.adb +++ /dev/null @@ -1,68 +0,0 @@ --- --- (c) Copyright 1993,1994,1995,1996 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. --- - -with GL; use GL; -with Glut; use Glut; -with Text_IO; -with Texturesurf_Procs; use Texturesurf_Procs; -with Interfaces.C.Strings; - -procedure Texturesurf is - package Tio renames Text_IO; - package ICS renames Interfaces.C.Strings; - - type chars_ptr_ptr is access ICS.chars_ptr; - - argc : aliased integer; - pragma Import (C, argc, "gnat_argc"); - - argv : chars_ptr_ptr; - pragma Import (C, argv, "gnat_argv"); - - foobar : Integer; -begin - glutInitWindowSize (300, 300); - glutInit (argc'access, argv); - glutInitDisplayMode(GLUT_RGB or GLUT_DEPTH or GLUT_SINGLE); - foobar := glutCreateWindow ("OpenGL & Ada: texturesurf"); - - DoInit; - - glutReshapeFunc (ReshapeCallback'ACCESS); - glutDisplayFunc (DoDisplay'ACCESS); - glutMainLoop; -end Texturesurf; diff --git a/lib/glut-3.7.6/progs/ada/texturesurf_procs.adb b/lib/glut-3.7.6/progs/ada/texturesurf_procs.adb deleted file mode 100644 index a47fc8454..000000000 --- a/lib/glut-3.7.6/progs/ada/texturesurf_procs.adb +++ /dev/null @@ -1,139 +0,0 @@ --- --- (c) Copyright 1993,1994,1995,1996 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. --- - -with System; use System; -with GL; use GL; - -with Ada.Numerics; use Ada.Numerics; -with Ada.Numerics.Generic_Elementary_Functions; - -package body Texturesurf_Procs is - package GLdouble_GEF is new - Generic_Elementary_Functions (GLfloat); - - use GLdouble_GEF; - - ctrlpoints : array (0 .. 3, 0 .. 3, 0 .. 2) of aliased GLfloat := - (((-1.5, -1.5, 4.0), (-0.5, -1.5, 2.0), - (0.5, -1.5, -1.0), (1.5, -1.5, 2.0)), - ((-1.5, -0.5, 1.0), (-0.5, -0.5, 3.0), - (0.5, -0.5, 0.0), (1.5, -0.5, -1.0)), - ((-1.5, 0.5, 4.0), (-0.5, 0.5, 0.0), - (0.5, 0.5, 3.0), (1.5, 0.5, 4.0)), - ((-1.5, 1.5, -2.0), (-0.5, 1.5, -2.0), - (0.5, 1.5, 0.0), (1.5, 1.5, -1.0))); - - texpts : array (0 .. 1, 0 .. 1, 0 .. 1) of aliased GLfloat := - (((0.0, 0.0), (0.0, 1.0)), ((1.0, 0.0), (1.0, 1.0))); - - imageWidth : constant := 64; - imageHeight : constant := 64; - image : array (Integer range 0 .. (3*imageWidth*imageHeight)) - of aliased GLubyte; - - procedure makeImage is - ti, tj : GLfloat; - begin - for i in 0 .. (imageWidth - 1) loop - ti := 2.0*Pi*GLfloat (i)/GLfloat (imageWidth); - for j in 0 .. (imageHeight - 1) loop - tj := 2.0*Pi*GLfloat (j)/GLfloat (imageHeight); - - image (3 * (imageHeight * i + j)) := - GLubyte (127.0 * (1.0 + Sin (ti))); - image (3 * (imageHeight * i + j) + 1) := - GLubyte (127.0 * (1.0 + Cos (2.0 * tj))); - image (3 * (imageHeight * i + j) + 2) := - GLubyte (127.0 * (1.0 + Cos (ti + tj))); - end loop; - end loop; - end makeImage; - - procedure DoInit is - begin - glMap2f (GL_MAP2_VERTEX_3, 0.0, 1.0, 3, 4, - 0.0, 1.0, 12, 4, ctrlpoints (0, 0, 0)'Access); - glMap2f (GL_MAP2_TEXTURE_COORD_2, 0.0, 1.0, 2, 2, - 0.0, 1.0, 4, 2, texpts (0, 0, 0)'Access); - - glEnable (GL_MAP2_TEXTURE_COORD_2); - glEnable (GL_MAP2_VERTEX_3); - glMapGrid2f (20, 0.0, 1.0, 20, 0.0, 1.0); - makeImage; - glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); - glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexImage2D (GL_TEXTURE_2D, 0, 3, imageWidth, imageHeight, 0, - GL_RGB, GL_UNSIGNED_BYTE, image(0)'Access); - - glEnable (GL_TEXTURE_2D); - glEnable (GL_DEPTH_TEST); - glEnable (GL_NORMALIZE); - glShadeModel (GL_FLAT); - end DoInit; - - procedure DoDisplay is - begin - glClear (GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); - glColor3f (1.0, 1.0, 1.0); - glEvalMesh2 (GL_FILL, 0, 20, 0, 20); - glFlush; - end DoDisplay; - - - procedure ReshapeCallback (w : Integer; h : Integer) is - begin - glViewport (0, 0, GLsizei(w), GLsizei(h)); - - glMatrixMode (GL_PROJECTION); - glLoadIdentity; - - if w <= h then - glOrtho (-4.0, 4.0, GLdouble (-4.0*GLdouble (h)/GLdouble (w)), - GLdouble (4.0*GLdouble (h)/GLdouble (w)), -4.0, 4.0); - else - glOrtho ((-4.0*GLdouble (w)/GLdouble (h)), - GLdouble (4.0*GLdouble (w)/GLdouble (h)), -4.0, 4.0, -4.0, 4.0); - end if; - - glMatrixMode (GL_MODELVIEW); - glLoadIdentity; - glRotatef (85.0, 1.0, 1.0, 1.0); - end ReshapeCallback; -end Texturesurf_Procs; diff --git a/lib/glut-3.7.6/progs/ada/texturesurf_procs.ads b/lib/glut-3.7.6/progs/ada/texturesurf_procs.ads deleted file mode 100644 index 1491c3aa8..000000000 --- a/lib/glut-3.7.6/progs/ada/texturesurf_procs.ads +++ /dev/null @@ -1,44 +0,0 @@ --- --- (c) Copyright 1993,1994,1995,1996 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. --- - -with GL; use GL; - -package Texturesurf_Procs is - procedure DoInit; - procedure DoDisplay; - procedure ReshapeCallback (w : Integer; h : Integer); -end Texturesurf_Procs; diff --git a/lib/glut-3.7.6/progs/advanced.dsw b/lib/glut-3.7.6/progs/advanced.dsw deleted file mode 100644 index 16a01e513..000000000 --- a/lib/glut-3.7.6/progs/advanced.dsw +++ /dev/null @@ -1,659 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "_all"=".\advanced\_all.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name accumaa - End Project Dependency - Begin Project Dependency - Project_Dep_Name af_depthcue - End Project Dependency - Begin Project Dependency - Project_Dep_Name af_teapots - End Project Dependency - Begin Project Dependency - Project_Dep_Name boundary - End Project Dependency - Begin Project Dependency - Project_Dep_Name comp - End Project Dependency - Begin Project Dependency - Project_Dep_Name convolve - End Project Dependency - Begin Project Dependency - Project_Dep_Name csg - End Project Dependency - Begin Project Dependency - Project_Dep_Name decal - End Project Dependency - Begin Project Dependency - Project_Dep_Name dissolve - End Project Dependency - Begin Project Dependency - Project_Dep_Name envmap - End Project Dependency - Begin Project Dependency - Project_Dep_Name envphong - End Project Dependency - Begin Project Dependency - Project_Dep_Name field - End Project Dependency - Begin Project Dependency - Project_Dep_Name genmipmap - End Project Dependency - Begin Project Dependency - Project_Dep_Name haloed - End Project Dependency - Begin Project Dependency - Project_Dep_Name hello2rts - End Project Dependency - Begin Project Dependency - Project_Dep_Name hiddenline - End Project Dependency - Begin Project Dependency - Project_Dep_Name imgproc - End Project Dependency - Begin Project Dependency - Project_Dep_Name mipmap_lines - End Project Dependency - Begin Project Dependency - Project_Dep_Name motionblur - End Project Dependency - Begin Project Dependency - Project_Dep_Name multilight - End Project Dependency - Begin Project Dependency - Project_Dep_Name occlude - End Project Dependency - Begin Project Dependency - Project_Dep_Name pointburst - End Project Dependency - Begin Project Dependency - Project_Dep_Name projshadow - End Project Dependency - Begin Project Dependency - Project_Dep_Name projtex - End Project Dependency - Begin Project Dependency - Project_Dep_Name rasonly - End Project Dependency - Begin Project Dependency - Project_Dep_Name redblue_stereo - End Project Dependency - Begin Project Dependency - Project_Dep_Name sgiflag - End Project Dependency - Begin Project Dependency - Project_Dep_Name shadowfun - End Project Dependency - Begin Project Dependency - Project_Dep_Name shadowmap - End Project Dependency - Begin Project Dependency - Project_Dep_Name shadowvol - End Project Dependency - Begin Project Dependency - Project_Dep_Name silhouette - End Project Dependency - Begin Project Dependency - Project_Dep_Name softshadow - End Project Dependency - Begin Project Dependency - Project_Dep_Name tess - End Project Dependency - Begin Project Dependency - Project_Dep_Name textext - End Project Dependency - Begin Project Dependency - Project_Dep_Name textile - End Project Dependency - Begin Project Dependency - Project_Dep_Name textrim - End Project Dependency - Begin Project Dependency - Project_Dep_Name texwinalign - End Project Dependency - Begin Project Dependency - Project_Dep_Name tvertex - End Project Dependency - Begin Project Dependency - Project_Dep_Name videoresize - End Project Dependency - Begin Project Dependency - Project_Dep_Name vox - End Project Dependency - Begin Project Dependency - Project_Dep_Name warp - End Project Dependency - Begin Project Dependency - Project_Dep_Name zcomposite - End Project Dependency -}}} - -############################################################################### - -Project: "accumaa"=".\advanced\accumaa.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "af_depthcue"=".\advanced\af_depthcue.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "af_teapots"=".\advanced\af_teapots.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "boundary"=".\advanced\boundary.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "comp"=".\advanced\comp.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "convolve"=".\advanced\convolve.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "csg"=".\advanced\csg.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "decal"=".\advanced\decal.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "dissolve"=".\advanced\dissolve.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "envmap"=".\advanced\envmap.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "envphong"=".\advanced\envphong.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "field"=".\advanced\field.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "genmipmap"=".\advanced\genmipmap.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "haloed"=".\advanced\haloed.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "hello2rts"=".\advanced\hello2rts.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "hiddenline"=".\advanced\hiddenline.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "imgproc"=".\advanced\imgproc.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "mipmap_lines"=".\advanced\mipmap_lines.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "motionblur"=".\advanced\motionblur.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "multilight"=".\advanced\multilight.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "occlude"=".\advanced\occlude.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "pointburst"=".\advanced\pointburst.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "projshadow"=".\advanced\projshadow.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "projtex"=".\advanced\projtex.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "rasonly"=".\advanced\rasonly.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "redblue_stereo"=".\advanced\redblue_stereo.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "sgiflag"=".\advanced\sgiflag.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "shadowfun"=".\advanced\shadowfun.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "shadowmap"=".\advanced\shadowmap.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "shadowvol"=".\advanced\shadowvol.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "silhouette"=".\advanced\silhouette.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "softshadow"=".\advanced\softshadow.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "tess"=".\advanced\tess.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "textext"=".\advanced\textext.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "textile"=".\advanced\textile.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "textrim"=".\advanced\textrim.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "texwinalign"=".\advanced\texwinalign.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "tvertex"=".\advanced\tvertex.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "videoresize"=".\advanced\videoresize.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "vox"=".\advanced\vox.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "warp"=".\advanced\warp.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "zcomposite"=".\advanced\zcomposite.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/lib/glut-3.7.6/progs/advanced/Imakefile b/lib/glut-3.7.6/progs/advanced/Imakefile deleted file mode 100644 index f319f7118..000000000 --- a/lib/glut-3.7.6/progs/advanced/Imakefile +++ /dev/null @@ -1,83 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1996, 1998. */ - -#include "../../Glut.cf" - -TARGETS = hiddenline haloed silhouette softshadow accumaa field convolve \ - shadowvol shadowmap projshadow tess textile comp csg dissolve envmap \ - envphong decal textext genmipmap imgproc mipmap_lines textrim tvertex \ - warp motionblur projtex zcomposite videoresize occlude af_depthcue \ - af_teapots multilight boundary shadowfun hello2rts rasonly sgiflag \ - pointburst redblue_stereo texwinalign - -SRCS = hiddenline.c haloed.c silhouette.c softshadow.c accumaa.c field.c \ - convolve.c shadowvol.c shadowmap.c projshadow.c sphere.c tess.c texture.c \ - textile.c comp.c csg.c dissolve.c envmap.c envphong.c decal.c textext.c \ - textmap.c genmipmap.c imgproc.c mipmap_lines.c izoom.c textrim.c tvertex.c \ - warp.c motionblur.c projtex.c zcomposite.c videoresize.c occlude.c \ - addfog.c af_depthcue.c af_teapots.c multilight.c boundary.c shadowfun.c \ - rts.c hello2rts.c rasonly.c sgiflag.c pointburst.c redblue_stereo.c \ - texwinalign.c nvidia_logo.c - -AllTarget($(TARGETS)) - -SimpleGlutProgramTarget(accumaa) -NormalGlutProgramTarget(af_depthcue,af_depthcue.o addfog.o) -NormalGlutProgramTarget(af_teapots,af_teapots.o addfog.o) -SimpleGlutProgramTarget(boundary) -NormalGlutProgramTarget(comp,comp.o texture.o) -SimpleGlutProgramTarget(csg) -SimpleGlutProgramTarget(convolve) -SimpleGlutProgramTarget(decal) -SimpleGlutProgramTarget(dissolve) -NormalGlutProgramTarget(envmap,envmap.o texture.o) -SimpleGlutProgramTarget(envphong) -SimpleGlutProgramTarget(field) -NormalGlutProgramTarget(genmipmap,genmipmap.o texture.o) -SimpleGlutProgramTarget(haloed) -NormalGlutProgramTarget(hello2rts,hello2rts.o rts.o nvidia_logo.o) -SimpleGlutProgramTarget(hiddenline) -NormalGlutProgramTarget(imgproc,imgproc.o texture.o) -NormalGlutProgramTarget(mipmap_lines,mipmap_lines.o izoom.o texture.o) -SimpleGlutProgramTarget(motionblur) -SimpleGlutProgramTarget(multilight) -SimpleGlutProgramTarget(occlude) -SimpleGlutProgramTarget(pointburst) -SimpleGlutProgramTarget(projshadow) -NormalGlutProgramTarget(projtex,projtex.o texture.o) -SimpleGlutProgramTarget(rasonly) -SimpleGlutProgramTarget(redblue_stereo) -SimpleGlutProgramTarget(sgiflag) -SimpleGlutProgramTarget(shadowfun) -SimpleGlutProgramTarget(shadowmap) -SimpleGlutProgramTarget(shadowvol) -SimpleGlutProgramTarget(silhouette) -SimpleGlutProgramTarget(softshadow) -NormalGlutProgramTarget(tess,tess.o sphere.o) -NormalGlutProgramTarget(textext,textext.o textmap.o texture.o) -NormalGlutProgramTarget(textrim,textrim.o texture.o) -NormalGlutProgramTarget(textile,textile.o texture.o) -SimpleGlutProgramTarget(texwinalign) -SimpleGlutProgramTarget(tvertex) -NormalGlutProgramTarget(videoresize,videoresize.o sphere.o) -SimpleGlutProgramTarget(vox) -NormalGlutProgramTarget(warp,warp.o texture.o) -SimpleGlutProgramTarget(zcomposite) - -DATA_LINKS = 00.rgb 02.rgb 04.rgb a.rgb mandrill.rgb 01.rgb 03.rgb 05.rgb b.rgb tree.rgb vox.bin.gz - -links: - for i in $(DATA_LINKS); do \ - /bin/rm -rf $$i ; \ - ln -s ../../data/$$i . ; \ - done - -#ifdef RemoveFiles -clean:: - RemoveFiles($(DATA_LINKS)) -#else -clean:: - $(RM) $(DATA_LINKS) -#endif - -DependTarget() diff --git a/lib/glut-3.7.6/progs/advanced/README b/lib/glut-3.7.6/progs/advanced/README deleted file mode 100644 index 0bcb5d0f4..000000000 --- a/lib/glut-3.7.6/progs/advanced/README +++ /dev/null @@ -1,53 +0,0 @@ - -This directory contains OpenGL examaples from the SIGGRAPH '96 course -titled "Programming with OpenGL: Advanced Rendering" taught by Tom -McReynolds (tomcat@sgi.com) and David Blythe (blythe@sgi.com), both -from SGI. These examples demonstrate interesting rendering techniques -that may not be obvious to the beginning OpenGL user. Think of OpenGL -as a powerful vocabulary for rendering, and you'll be surprised the -powerful expressions that you can devise. - -Information about the course is at: - - http://www.siggraph.org/conferences/siggraph96/core/conference/courses/23.html - -Material presented at the course can be found at: - - http://www.sgi.com/Technology/openGL/advanced_sig96.html - -The original source code for the course examples can be found at: - - http://www.sgi.com/Technology/openGL/advanced/programs.html - -In a few places, I've taken the liberty of adding GLUT popup menus and -disabling animation when the window is iconfied. Warnings and bugs I -found were fixed. In a few examples, the degree of tesselation and -default window size have been scaled down to perform better on low-end -graphics workstations and PCs. - -A number of SGI .rgb image files are used to supply texture data needed -by some of these examples. Since the files are large, I am not -including them in the GLUT distribution. Instead, they are provided in -a separate distribution called glut_data.tar.gz - -If you retrieve glut_data.tar.gz, it will generate a glut-3.3/data -directory where the images will be placed. Use the "make links" target -to make links in this directory into the glut-3.3/data directory. - -You can also get the files individually over the Internet from: - - http://www.sgi.com/Technology/openGL/advanced/blythe/00.rgb - http://www.sgi.com/Technology/openGL/advanced/blythe/01.rgb - http://www.sgi.com/Technology/openGL/advanced/blythe/02.rgb - http://www.sgi.com/Technology/openGL/advanced/blythe/03.rgb - http://www.sgi.com/Technology/openGL/advanced/blythe/04.rgb - http://www.sgi.com/Technology/openGL/advanced/blythe/05.rgb - http://www.sgi.com/Technology/openGL/advanced/blythe/a.rgb - http://www.sgi.com/Technology/openGL/advanced/blythe/b.rgb - http://www.sgi.com/Technology/openGL/advanced/blythe/flowers.rgb - http://www.sgi.com/Technology/openGL/advanced/blythe/mandrill.rgb - http://www.sgi.com/Technology/openGL/advanced/blythe/road.rgb - http://www.sgi.com/Technology/openGL/advanced/blythe/tree.rgb - -- Mark Kilgard - October 25, 1996. diff --git a/lib/glut-3.7.6/progs/advanced/Times-Italic.bw b/lib/glut-3.7.6/progs/advanced/Times-Italic.bw deleted file mode 100644 index be99f4a6d95bd8417ac134344b9bfe2eedd2c000..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29864 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 PM?~@8 -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Generic Project" 0x010a - -CFG=_all - 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 "_all.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 "_all.mak" CFG="_all - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "_all - Win32 Release" (based on "Win32 (x86) Generic Project") -!MESSAGE "_all - Win32 Debug" (based on "Win32 (x86) Generic Project") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -MTL=midl.exe - -!IF "$(CFG)" == "_all - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" - -!ELSEIF "$(CFG)" == "_all - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "_all___Win32_Debug" -# PROP BASE Intermediate_Dir "_all___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" - -!ENDIF - -# Begin Target - -# Name "_all - Win32 Release" -# Name "_all - Win32 Debug" -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced/accumaa.c b/lib/glut-3.7.6/progs/advanced/accumaa.c deleted file mode 100644 index 278b697f8..000000000 --- a/lib/glut-3.7.6/progs/advanced/accumaa.c +++ /dev/null @@ -1,277 +0,0 @@ - -/* accumaa.c - by Tom McReynolds, SGI */ - -/* Using the accumulation buffer for scene antialiasing. */ - -#include -#include -#include - -const GLdouble FRUSTDIM = 100.f; - -/* Create a single component texture map */ -GLfloat * -make_texture(int maxs, int maxt) -{ - int s, t; - static GLfloat *texture; - - texture = (GLfloat *) malloc(maxs * maxt * sizeof(GLfloat)); - for (t = 0; t < maxt; t++) { - for (s = 0; s < maxs; s++) { - texture[s + maxs * t] = ((s >> 4) & 0x1) ^ ((t >> 4) & 0x1); - } - } - return texture; -} - -enum { - SPHERE = 1, CONE -}; - -void -render(void) -{ - /* material properties for objects in scene */ - static GLfloat wall_mat[] = - {1.f, 1.f, 1.f, 1.f}; - - glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); - - /* Note: wall verticies are ordered so they are all front facing this lets - me do back face culling to speed things up. */ - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, wall_mat); - - /* floor */ - /* make the floor textured */ - glEnable(GL_TEXTURE_2D); - - /* Since we want to turn texturing on for floor only, we have to make floor - a separate glBegin()/glEnd() sequence. You can't turn texturing on and - off between begin and end calls */ - glBegin(GL_QUADS); - glNormal3f(0.f, 1.f, 0.f); - glTexCoord2i(0, 0); - glVertex3f(-100.f, -100.f, -320.f); - glTexCoord2i(1, 0); - glVertex3f(100.f, -100.f, -320.f); - glTexCoord2i(1, 1); - glVertex3f(100.f, -100.f, -520.f); - glTexCoord2i(0, 1); - glVertex3f(-100.f, -100.f, -520.f); - glEnd(); - - glDisable(GL_TEXTURE_2D); - - /* walls */ - - glBegin(GL_QUADS); - /* left wall */ - glNormal3f(1.f, 0.f, 0.f); - glVertex3f(-100.f, -100.f, -320.f); - glVertex3f(-100.f, -100.f, -520.f); - glVertex3f(-100.f, 100.f, -520.f); - glVertex3f(-100.f, 100.f, -320.f); - - /* right wall */ - glNormal3f(-1.f, 0.f, 0.f); - glVertex3f(100.f, -100.f, -320.f); - glVertex3f(100.f, 100.f, -320.f); - glVertex3f(100.f, 100.f, -520.f); - glVertex3f(100.f, -100.f, -520.f); - - /* ceiling */ - glNormal3f(0.f, -1.f, 0.f); - glVertex3f(-100.f, 100.f, -320.f); - glVertex3f(-100.f, 100.f, -520.f); - glVertex3f(100.f, 100.f, -520.f); - glVertex3f(100.f, 100.f, -320.f); - - /* back wall */ - glNormal3f(0.f, 0.f, 1.f); - glVertex3f(-100.f, -100.f, -520.f); - glVertex3f(100.f, -100.f, -520.f); - glVertex3f(100.f, 100.f, -520.f); - glVertex3f(-100.f, 100.f, -520.f); - glEnd(); - - glPushMatrix(); - glTranslatef(-80.f, -60.f, -420.f); - glCallList(SPHERE); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(-20.f, -80.f, -500.f); - glCallList(CONE); - glPopMatrix(); - - if (glGetError()) /* to catch programming errors; should never happen */ - printf("Oops! I screwed up my OpenGL calls somewhere\n"); - - glFlush(); /* high end machines may need this */ -} - -/* compute scale factor for window->object space transform could use - gluUnProject(), but probably too much trouble */ -void -computescale(GLfloat * sx, GLfloat * sy) -{ - enum { - XORG, YORG, WID, HT - }; - GLint viewport[4]; - glGetIntegerv(GL_VIEWPORT, viewport); - - *sx = 2 * FRUSTDIM / viewport[WID]; - *sy = 2 * FRUSTDIM / viewport[WID]; -} - -enum { - NONE, AA -}; - -int rendermode = NONE; - -void -menu(int selection) -{ - rendermode = selection; - glutPostRedisplay(); -} - -/* Called when window needs to be redrawn */ -void -redraw(void) -{ - int i, j; - int min, max; - int count; - GLfloat invx, invy; - GLfloat scale, dx, dy; - - switch (rendermode) { - case NONE: - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glFrustum(-FRUSTDIM, FRUSTDIM, -FRUSTDIM, FRUSTDIM, 320., 640.); - glMatrixMode(GL_MODELVIEW); - render(); - break; - case AA: - min = -2; - max = -min + 1; - count = -2 * min + 1; - count *= count; - - /* uniform scaling, less than one pixel wide */ - scale = -.9f / min; - - computescale(&invx, &invy); - - glClear(GL_ACCUM_BUFFER_BIT); - - for (j = min; j < max; j++) { - for (i = min; i < max; i++) { - dx = invx * scale * i; - dy = invy * scale * j; - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glFrustum(-FRUSTDIM + dx, - FRUSTDIM + dy, - -FRUSTDIM + dx, - FRUSTDIM + dy, - 320., 640.); - glMatrixMode(GL_MODELVIEW); - render(); - glAccum(GL_ACCUM, 1.f / count); - } - } - glAccum(GL_RETURN, 1.f); - break; - } - - glutSwapBuffers(); -} - -/* ARGSUSED1 */ -void -key(unsigned char key, int x, int y) -{ - if (key == '\033') - exit(0); -} - -const int TEXDIM = 256; -/* Parse arguments, and set up interface between OpenGL and window system */ -int -main(int argc, char *argv[]) -{ - GLfloat *tex; - static GLfloat lightpos[] = - {50.f, 50.f, -320.f, 1.f}; - static GLfloat sphere_mat[] = - {1.f, .5f, 0.f, 1.f}; - static GLfloat cone_mat[] = - {0.f, .5f, 1.f, 1.f}; - GLUquadricObj *sphere, *cone, *base; - - glutInit(&argc, argv); - glutInitWindowSize(512, 512); - glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_ACCUM | GLUT_DOUBLE); - (void) glutCreateWindow("scene antialiasing"); - glutDisplayFunc(redraw); - glutKeyboardFunc(key); - - glutCreateMenu(menu); - glutAddMenuEntry("Aliased View", NONE); - glutAddMenuEntry("AntiAliased", AA); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - /* draw a perspective scene */ - glMatrixMode(GL_PROJECTION); - glFrustum(-FRUSTDIM, FRUSTDIM, -FRUSTDIM, FRUSTDIM, 320., 640.); - glMatrixMode(GL_MODELVIEW); - - /* turn on features */ - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - - /* place light 0 in the right place */ - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - - /* remove back faces to speed things up */ - glCullFace(GL_BACK); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - - glNewList(SPHERE, GL_COMPILE); - /* make display lists for sphere and cone; for efficiency */ - sphere = gluNewQuadric(); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, sphere_mat); - gluSphere(sphere, 20.f, 20, 20); - gluDeleteQuadric(sphere); - glEndList(); - - glNewList(CONE, GL_COMPILE); - cone = gluNewQuadric(); - base = gluNewQuadric(); - glRotatef(-90.f, 1.f, 0.f, 0.f); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, cone_mat); - gluDisk(base, 0., 20., 20, 1); - gluCylinder(cone, 20., 0., 60., 20, 20); - gluDeleteQuadric(cone); - gluDeleteQuadric(base); - glEndList(); - - /* load pattern for current 2d texture */ - tex = make_texture(TEXDIM, TEXDIM); - glTexImage2D(GL_TEXTURE_2D, 0, 1, TEXDIM, TEXDIM, 0, GL_RED, GL_FLOAT, tex); - free(tex); - - glReadBuffer(GL_BACK); /* input to accum buffer */ - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/advanced/accumaa.dsp b/lib/glut-3.7.6/progs/advanced/accumaa.dsp deleted file mode 100644 index af9f9cab2..000000000 --- a/lib/glut-3.7.6/progs/advanced/accumaa.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="accumaa" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=accumaa - 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 "accumaa.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 "accumaa.mak" CFG="accumaa - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "accumaa - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "accumaa - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "accumaa - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "accumaa - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "accumaa - Win32 Release" -# Name "accumaa - Win32 Debug" -# Begin Source File - -SOURCE=.\accumaa.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced/addfog.c b/lib/glut-3.7.6/progs/advanced/addfog.c deleted file mode 100644 index d860d169e..000000000 --- a/lib/glut-3.7.6/progs/advanced/addfog.c +++ /dev/null @@ -1,296 +0,0 @@ - -/* 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. */ - -/* addfog.c is a set of routines for adding OpenGL-style depth attenuated fog - to a scene as a final rendering pass. This may be useful if you are doing - multipass algorithms where attempting to enable fog within the passes - would screw up the rendering effect. - - The approach is to read back the depth buffer, then do an in-place draw - pixels of the depth buffer values back into the frame buffer as alpha. - OpenGL's standard pixel path is used to "blend in" fog. The Red, Green, - and Blue components are forced to the fog color; alpha is either scaled & - biased (for GL_LINEAR style fog) or remapped with OpenGL's "map color" - capability (for GL_EXP or GL_EXP style fog). The result is blended with - the current frame buffer contents. The result is almost identical to - OpenGL's fog. - - With this fogging technique, the fog pass time is always proportional to - the number of pixels in the window. This is in contrast to fogging the - entire scene standard OpenGL fog during rendering. With standard OpenGL - fog rendering, a scene with a depth complexity greater than 1 may end up - fogging many more pixels than are visible. If fog is not supported for - free in hardware and you are rendering a scene with high enough depth - complexity, this fogging technique could be faster than standard OpenGL - fog. - - As mentioned earlier, the technique may also be appropriate in multi-pass - rendering algorithms to avoid fog improperly interferring with the various - passes. Examples: reflections or shadows. - - A more sophisticated version of this technique could be used to simulate - "eye distance" attenuated fog instead of OpenGL's "depth" attenuated fog. - The technique could perform the depth to alpha read/write in tiles with a - pixel map set up to attenuate based on eye distance instead of simply - depth. - - This approach could be made more efficient with an extension to - glCopyPixels to support a copy of one frame buffer type to another - (specifically, depth to alpha). - - One side-effect of this approach is that it trashes your destination - alpha buffer (if you even have one). */ - -/** Using the "addfog" routines: - - 1) Given your near and far ranges (generally from glOrtho, glFrustum, or - gluPerspective), call: - - afEyeNearFar(near, far); - - Careful since "near" and "far" are reserved words on PC compilers. - - 2) Instead calling glFog to set fog parameters, use the corresponding - "addfog" routines as shown below: - - Instead of: - - glFogf(GL_FOG_START, start); glFogf(GL_FOG_END, end); - - Use: - - afFogStartEnd(start, end); - - Instead of: - - glFogi(GL_FOG_MODE, mode); - - Use: - - afFogMode(mode); - - Instead of: - - glFogf(GL_FOG_DENSITY, density); - - Use: - - afFogDensity(density); - - Instead of: - - GLfloat fogcolor[4] = { red, green, blue, alpha }; - glFogfv(GL_FOG_COLOR, fog_color); - - Use: - - afFogColor(red, green, blue); - - 3) Draw you scene *without* OpenGL fog enabled. - - 4) Assuming you want to fog the entire window of size width by - height, call: - - afDoFinalFogPass(0, 0, width, height); - - Note: x & y are OpenGL-style lower-left hand window coordinates. - - 5) Call glFinish or do a buffer swap. - - That's it. View your fogged scene. */ - -#ifdef __sgi /* SGI has a good alloca; many other machines don't. */ -#define HAS_ALLOCA -#endif - -#include -#ifdef HAS_ALLOCA -#include -#endif -#ifdef _WIN32 -#include -#pragma warning (disable:4244) /* disable bogus conversion warnings */ -#endif -#include -#include - -static GLfloat eye_near = 0.0, eye_far = 1.0; -static GLfloat fog_start = 0.0, fog_end = 1.0; -static GLenum fog_mode = GL_EXP; -static GLfloat fog_density = 1.0; -static int valid = 0; -static GLfloat fog_red, fog_green, fog_blue; - -void -afEyeNearFar(GLfloat fnear, GLfloat ffar) -{ - eye_near = fnear; - eye_far = ffar; - valid = 0; -} - -void -afFogStartEnd(GLfloat start, GLfloat end) -{ - fog_start = start; - fog_end = end; - valid = 0; -} - -void -afFogMode(GLenum mode) -{ - fog_mode = mode; - valid = 0; -} - -void -afFogDensity(GLfloat density) -{ - fog_density = density; - valid = 0; -} - -void -afFogColor(GLfloat red, GLfloat green, GLfloat blue) -{ - fog_red = red; - fog_green = green; - fog_blue = blue; -} - -#define LEN 256 - -void -afDoFinalFogPass(GLint x, GLint y, GLsizei width, GLsizei height) -{ - static GLfloat alpha_scale, alpha_bias; - static GLfloat fog_map[LEN]; - int i; - -#ifdef HAS_ALLOCA - void *buffer = alloca((unsigned int) sizeof(GLushort) * width * height); -#else - static void *buffer = NULL; - static int last_width, last_height; - - if (width * height != last_width * last_height) { - buffer = realloc(buffer, sizeof(GLushort) * width * height); - last_width = width; - last_height = height; - } -#endif - - if (!valid) { - switch (fog_mode) { - case GL_LINEAR: - /* Figure out linear fog blending from "f = (e-z)/(e-s)". */ - alpha_scale = (eye_far - eye_near) / (fog_end - fog_start); - alpha_bias = (eye_near - fog_start) / (fog_end - fog_start); - break; - case GL_EXP: - /* Setup fog_map to be "f = exp(-d*z)". */ - for (i = 0; i < LEN; i += 1) { - float fi, z, dz; - - fi = i * 1.0 / (LEN - 1); - z = eye_near + fi * (eye_far - eye_near); - dz = fog_density * z; - fog_map[i] = 1.0 - exp(-dz); - } - break; - case GL_EXP2: - /* Setup fog_map to be "f = exp(-(d*z)^2)". */ - for (i = 0; i < LEN; i += 1) { - float fi, z, dz; - - fi = i * 1.0 / (LEN - 1); - z = eye_near + fi * (eye_far - eye_near); - dz = fog_density * z; - fog_map[i] = 1.0 - exp(-dz * dz); - } - break; - default:; - /* Mesa makes GLenum an actual enumerant. Have a default - case to avoid all the gcc warnings from all the other - GLenum values that we are not handling. */ - } - } - - /* XXX Careful, afDoFinalFogPass makes no attempt to preserve your - pixel store state and assumes the initial pixel store state! */ - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - glPixelStorei(GL_PACK_ALIGNMENT, 1); - - /* Preserve the current raster position, viewport, matrix mode, - blend function, enable state, and pixel path state. */ - /* XXX This is pretty expensive. A real application should just - "know" to reload all the OpenGL state mucked with by afDoFinalFogPass - and then you could get rid of all this glPushAttrib and glPopMatrix - garbage. */ - glPushAttrib(GL_PIXEL_MODE_BIT | GL_ENABLE_BIT | GL_COLOR_BUFFER_BIT | - GL_TRANSFORM_BIT | GL_VIEWPORT_BIT | GL_CURRENT_BIT); - - /* Reposition the current raster position as location (x,y). */ - glMatrixMode(GL_MODELVIEW); - glViewport(x-1, y-1, 2, 2); - glPushMatrix(); - glLoadIdentity(); - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - glRasterPos2i(0, 0); - - /* Definitely don't want fog or depth enabled. */ - glDisable(GL_FOG); - glDisable(GL_DEPTH_TEST); - - /* The alpha on the glDrawPixels after the pixel path transformation - will be "1 - f" where f is the blending factor described in Section - 3.9 of the OpenGL 1.1 specification. */ - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glEnable(GL_BLEND); - - switch (fog_mode) { - case GL_LINEAR: - /* Force red, green, and blue to the fog color. */ - glPixelTransferf(GL_RED_SCALE, 0); - glPixelTransferf(GL_GREEN_SCALE, 0); - glPixelTransferf(GL_BLUE_SCALE, 0); - glPixelTransferf(GL_RED_BIAS, fog_red); - glPixelTransferf(GL_GREEN_BIAS, fog_green); - glPixelTransferf(GL_BLUE_BIAS, fog_blue); - - glPixelTransferf(GL_ALPHA_SCALE, alpha_scale); - glPixelTransferf(GL_ALPHA_BIAS, alpha_bias); - break; - case GL_EXP: - case GL_EXP2: - /* Force red, green, and blue to the fog color. */ - glPixelMapfv(GL_PIXEL_MAP_R_TO_R, 1, &fog_red); - glPixelMapfv(GL_PIXEL_MAP_G_TO_G, 1, &fog_green); - glPixelMapfv(GL_PIXEL_MAP_B_TO_B, 1, &fog_blue); - - glPixelMapfv(GL_PIXEL_MAP_A_TO_A, LEN, fog_map); - glPixelTransferi(GL_MAP_COLOR, GL_TRUE); - break; - } - - /* Read out the depth buffer... */ - glReadPixels(x, y, width, height, - GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT, buffer); - - /* ... and write it back as alpha. */ - glDrawPixels(width, height, GL_ALPHA, - GL_UNSIGNED_SHORT, buffer); - - /* Restore state saved earlier. */ - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); - glPopAttrib(); -} diff --git a/lib/glut-3.7.6/progs/advanced/addfog.h b/lib/glut-3.7.6/progs/advanced/addfog.h deleted file mode 100644 index c200bb936..000000000 --- a/lib/glut-3.7.6/progs/advanced/addfog.h +++ /dev/null @@ -1,8 +0,0 @@ - -extern void afEyeNearFar(GLfloat fnear, GLfloat ffar); -extern void afFogStartEnd(GLfloat start, GLfloat end); -extern void afFogMode(GLenum mode); -extern void afFogDensity(GLfloat density); -extern void afFogColor(GLfloat red, GLfloat green, GLfloat blue); -extern void afDoFinalFogPass(GLint x, GLint y, GLsizei width, GLsizei height); - diff --git a/lib/glut-3.7.6/progs/advanced/af_depthcue.c b/lib/glut-3.7.6/progs/advanced/af_depthcue.c deleted file mode 100644 index e5f52bb39..000000000 --- a/lib/glut-3.7.6/progs/advanced/af_depthcue.c +++ /dev/null @@ -1,163 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1997. */ - -/* A version of the OpenGL Programming Guide's depthcue.c that - uses the "addfog" routines to add depth cueing as a post-rendering - pass. This is not a rather poor application for "addfog" but it - does demonstrate how it use "addfog". See "addfog.c" for details. */ - -/* - * (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. - */ -/* - * depthcue.c - * This program draws a wireframe model, which uses - * intensity (brightness) to give clues to distance. - * Fog is used to achieve this effect. - */ -#include -#include -#include "addfog.h" - -/* Initialize linear fog for depth cueing. - */ -void myinit(void) -{ - GLfloat fogColor[4] = {0.0, 0.0, 0.0, 1.0}; - - glFogi (GL_FOG_MODE, GL_LINEAR); - glHint (GL_FOG_HINT, GL_NICEST); /* per pixel */ - glFogf (GL_FOG_START, 3.0); - glFogf (GL_FOG_END, 5.0); - glFogfv (GL_FOG_COLOR, fogColor); - glClearColor(0.0, 0.0, 0.0, 1.0); - - glDepthFunc(GL_LESS); - glEnable(GL_DEPTH_TEST); - glShadeModel(GL_FLAT); - - afEyeNearFar(3.0, 5.0); - afFogStartEnd(3.0, 5.0); - afFogMode(GL_LINEAR); - afFogColor(0.0, 0.0, 0.0); -} - -int width, height; -int twopass = 1; - -/* display() draws an icosahedron. - */ -void display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - if (!twopass) { - glEnable(GL_FOG); - } else { - glDisable(GL_FOG); - } - - glColor3f (1.0, 1.0, 1.0); - glutWireIcosahedron(); - - if (twopass) { - afDoFinalFogPass(0, 0, width, height); - } - - glutSwapBuffers(); -} - -void myReshape(int w, int h) -{ - width = w; - height = h; - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective (45.0, (GLfloat) w/(GLfloat) h, 3.0, 5.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity (); - glTranslatef (0.0, 0.0, -4.0); /* move object into view */ -} - -/* ARGSUSED1 */ -void -keyboard(unsigned char c, int x, int y) -{ - switch(c) { - case 'T': - case 't': - twopass = 1 - twopass; - case ' ': - glutPostRedisplay(); - break; - } -} - -void -menu(int value) -{ - switch(value) { - case 1: - twopass = 0; - break; - case 2: - twopass = 1; - break; - } - glutPostRedisplay(); -} - -/* Main Loop - */ -int main(int argc, char** argv) -{ - glutInitWindowSize(380, 380); - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); - glutCreateWindow("depthcuing by post-rendering pass"); - myinit(); - glutReshapeFunc(myReshape); - glutDisplayFunc(display); - glutKeyboardFunc(keyboard); - glutCreateMenu(menu); - glutAddMenuEntry("GL_LINEAR depthcueing", 1); - glutAddMenuEntry("\"add fog\" post-render depthcueing", 2); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} - diff --git a/lib/glut-3.7.6/progs/advanced/af_depthcue.dsp b/lib/glut-3.7.6/progs/advanced/af_depthcue.dsp deleted file mode 100644 index 4f74aaf55..000000000 --- a/lib/glut-3.7.6/progs/advanced/af_depthcue.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="af_depthcue" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=af_depthcue - 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 "af_depthcue.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 "af_depthcue.mak" CFG="af_depthcue - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "af_depthcue - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "af_depthcue - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "af_depthcue - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "af_depthcue - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "af_depthcue - Win32 Release" -# Name "af_depthcue - Win32 Debug" -# Begin Source File - -SOURCE=.\addfog.c -# End Source File -# Begin Source File - -SOURCE=.\addfog.h -# End Source File -# Begin Source File - -SOURCE=.\af_depthcue.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced/af_teapots.c b/lib/glut-3.7.6/progs/advanced/af_teapots.c deleted file mode 100644 index 63cab20ab..000000000 --- a/lib/glut-3.7.6/progs/advanced/af_teapots.c +++ /dev/null @@ -1,222 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 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. - */ - -/** - * fog.c - * This program draws 5 red teapots, each at a different - * z distance from the eye, in different types of fog. - * Pressing the left mouse button chooses between 3 types of - * fog: exponential, exponential squared, and linear. - * In this program, there is a fixed density value, as well - * as fixed start and end values for the linear fog. - */ - -#include -#include -#include - -#include "addfog.h" - -GLint fogMode; - -#define TPF_LINEAR 1 -#define TPF_EXP 2 -#define TPF_EXP2 3 - -int addfog = 0; - -void -selectFog(int mode) -{ - switch (mode) { - case GL_LINEAR: - glFogf(GL_FOG_START, 1.0); - glFogf(GL_FOG_END, 5.0); - /* falls through */ - case GL_EXP2: - case GL_EXP: - glFogi(GL_FOG_MODE, mode); - glEnable(GL_FOG); - addfog = 0; - glutPostRedisplay(); - break; - case TPF_LINEAR: - afFogStartEnd(0.0, 10.0); - afFogMode(GL_LINEAR); - glDisable(GL_FOG); - addfog = 1; - glutPostRedisplay(); - break; - case TPF_EXP: - afFogMode(GL_EXP); - glDisable(GL_FOG); - addfog = 1; - glutPostRedisplay(); - break; - case TPF_EXP2: - afFogMode(GL_EXP2); - glDisable(GL_FOG); - addfog = 1; - glutPostRedisplay(); - break; - case 0: - exit(0); - } -} - -/* Initialize z-buffer, projection matrix, light source, * and lighting - model. Do not specify a material property here. */ -void -myinit(void) -{ - GLfloat position[] = - {0.0, 3.0, 3.0, 0.0}; - GLfloat local_view[] = - {0.0}; - GLfloat fogColor[4] = - {0.5, 0.5, 0.5, 1.0}; - - glEnable(GL_DEPTH_TEST); - glEnable(GL_FOG); - glDepthFunc(GL_LESS); - - glLightfv(GL_LIGHT0, GL_POSITION, position); - glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, local_view); - - glFrontFace(GL_CW); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_AUTO_NORMAL); - glEnable(GL_NORMALIZE); - - fogMode = GL_EXP; - glFogi(GL_FOG_MODE, fogMode); - glFogfv(GL_FOG_COLOR, fogColor); - afFogColor(0.5, 0.5, 0.5); - glFogf(GL_FOG_DENSITY, 0.35); - afFogDensity(0.35); - glHint(GL_FOG_HINT, GL_DONT_CARE); - glClearColor(0.5, 0.5, 0.5, 1.0); -} - -void -renderRedTeapot(GLfloat x, GLfloat y, GLfloat z) -{ - float mat[4]; - - glPushMatrix(); - glTranslatef(x, y, z); - mat[0] = 0.1745; - mat[1] = 0.01175; - mat[2] = 0.01175; - mat[3] = 1.0; - glMaterialfv(GL_FRONT, GL_AMBIENT, mat); - mat[0] = 0.61424; - mat[1] = 0.04136; - mat[2] = 0.04136; - glMaterialfv(GL_FRONT, GL_DIFFUSE, mat); - mat[0] = 0.727811; - mat[1] = 0.626959; - mat[2] = 0.626959; - glMaterialfv(GL_FRONT, GL_SPECULAR, mat); - glMaterialf(GL_FRONT, GL_SHININESS, 0.6 * 128.0); - glutSolidTeapot(1.0); - glPopMatrix(); -} - -int width, height; - - /* display() draws 5 teapots at different z positions. */ -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - renderRedTeapot(-4.0, -0.5, -1.0); - renderRedTeapot(-2.0, -0.5, -2.0); - renderRedTeapot(0.0, -0.5, -3.0); - renderRedTeapot(2.0, -0.5, -4.0); - renderRedTeapot(4.0, -0.5, -5.0); - if (addfog) { - afDoFinalFogPass(0, 0, width, height); - } - glFlush(); -} - -void -myReshape(int w, int h) -{ - width = w; - height = h; - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - if (w <= (h * 3)) - glOrtho(-6.0, 6.0, -2.0 * ((GLfloat) h * 3) / (GLfloat) w, - 2.0 * ((GLfloat) h * 3) / (GLfloat) w, 0.0, 10.0); - else - glOrtho(-6.0 * (GLfloat) w / ((GLfloat) h * 3), - 6.0 * (GLfloat) w / ((GLfloat) h * 3), -2.0, 2.0, 0.0, 10.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - afEyeNearFar(0.0, 10.0); -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); - glutInitWindowSize(450, 150); - glutCreateWindow("fogged teapots via post-rendering pass"); - myinit(); - glutReshapeFunc(myReshape); - glutDisplayFunc(display); - glutCreateMenu(selectFog); - glutAddMenuEntry("Fog EXP", GL_EXP); - glutAddMenuEntry("Fog EXP2", GL_EXP2); - glutAddMenuEntry("Fog LINEAR", GL_LINEAR); - glutAddMenuEntry("Two Pass Fog EXP", TPF_EXP); - glutAddMenuEntry("Two Pass Fog EXP2", TPF_EXP2); - glutAddMenuEntry("Two Pass Fog LINEAR", TPF_LINEAR); - glutAddMenuEntry("Quit", 0); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/advanced/af_teapots.dsp b/lib/glut-3.7.6/progs/advanced/af_teapots.dsp deleted file mode 100644 index d9007592f..000000000 --- a/lib/glut-3.7.6/progs/advanced/af_teapots.dsp +++ /dev/null @@ -1,92 +0,0 @@ -# Microsoft Developer Studio Project File - Name="af_teapots" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=af_teapots - 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 "af_teapots.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 "af_teapots.mak" CFG="af_teapots - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "af_teapots - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "af_teapots - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "af_teapots - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "af_teapots - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "af_teapots - Win32 Release" -# Name "af_teapots - Win32 Debug" -# Begin Source File - -SOURCE=.\addfog.c -# End Source File -# Begin Source File - -SOURCE=.\af_teapots.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced/boundary.c b/lib/glut-3.7.6/progs/advanced/boundary.c deleted file mode 100644 index b93a4c863..000000000 --- a/lib/glut-3.7.6/progs/advanced/boundary.c +++ /dev/null @@ -1,349 +0,0 @@ - -/* 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. */ - -/* This example shows how to use the GLU polygon tessellator to determine the - - 2D boundary of OpenGL rendered objects. The program uses OpenGL's - feedback mechanim to capture transformed polygons and then feeds them to - the GLU tesselator in GLU_TESS_WINDING_NONZERO and GLU_TESS_BOUNDARY_ONLY - mode. */ - -#include -#include -#include -#include - -#ifdef GLU_VERSION_1_2 - -#ifndef CALLBACK -#define CALLBACK -#endif - -enum { - M_TORUS, M_CUBE, M_SPHERE, M_ICO, M_TEAPOT, M_ANGLE, M_BOUNDARY -}; - -struct VertexHolder { - struct VertexHolder *next; - GLfloat v[2]; -}; - -int shape = M_TORUS; -int boundary = 1; -GLfloat angle = 0.0; - -GLfloat lightDiffuse[] = -{1.0, 0.0, 0.0, 1.0}; -GLfloat lightPosition[] = -{1.0, 1.0, 1.0, 0.0}; - -GLUtesselator *tess; -int width, height; - -static void CALLBACK -begin(GLenum type) -{ - assert(type == GL_LINE_LOOP); - glBegin(type); -} - -static void CALLBACK -vertex(void *data) -{ - GLfloat *v = data; - glVertex2fv(v); -} - -static void CALLBACK -end(void) -{ - glEnd(); -} - -static GLfloat *combineList = NULL; -static int combineListSize = 0; -static int combineNext = 0; -static struct VertexHolder *excessList = NULL; - -static void -freeExcessList(void) -{ - struct VertexHolder *holder, *next; - - holder = excessList; - while (holder) { - next = holder->next; - free(holder); - holder = next; - } - excessList = NULL; -} - -/* ARGSUSED1 */ -static void CALLBACK -combine(GLdouble coords[3], void *d[4], GLfloat w[4], void **dataOut) -{ - GLfloat *newCoords; - struct VertexHolder *holder; - - /* XXX Careful, some systems still don't understand realloc of NULL. */ - if (combineNext >= combineListSize) { - holder = (struct VertexHolder *) malloc(sizeof(struct VertexHolder)); - holder->next = excessList; - excessList = holder; - newCoords = holder->v; - } else { - newCoords = &combineList[combineNext * 2]; - } - - newCoords[0] = coords[0]; - newCoords[1] = coords[1]; - *dataOut = newCoords; - - combineNext++; -} - -static void CALLBACK -error(GLenum errno) -{ - printf("ERROR: %s\n", gluErrorString(errno)); -} - -void -reshape(int w, int h) -{ - width = w; - height = h; - glViewport(0, 0, width, height); -} - -void -processFeedback(GLint size, GLfloat * buffer) -{ - GLfloat *loc, *end; - GLdouble v[3]; - int token, nvertices, i; - - if (combineNext > combineListSize) { - freeExcessList(); - combineListSize = combineNext; - combineList = realloc(combineList, sizeof(GLfloat) * 2 * combineListSize); - } - combineNext = 0; - - gluTessBeginPolygon(tess, NULL); - loc = buffer; - end = buffer + size; - while (loc < end) { - token = *loc; - loc++; - switch (token) { - case GL_POLYGON_TOKEN: - nvertices = *loc; - loc++; - assert(nvertices >= 3); - gluTessBeginContour(tess); - for (i = 0; i < nvertices; i++) { - v[0] = loc[0]; - v[1] = loc[1]; - v[2] = 0.0; - gluTessVertex(tess, v, loc); - loc += 2; - } - gluTessEndContour(tess); - break; - default: - /* Ignore everything but polygons. */ - ; - } - } - gluTessEndPolygon(tess); -} - -int -determineBoundary(void (*renderFunc) (void), int probableSize) -{ - static GLfloat *feedbackBuffer = NULL; - static int bufferSize = 0; - GLint returned; - - if (bufferSize > probableSize) { - probableSize = bufferSize; - } -doFeedback: - - /* XXX Careful, some systems still don't understand realloc of NULL. */ - if (bufferSize < probableSize) { - bufferSize = probableSize; - feedbackBuffer = realloc(feedbackBuffer, bufferSize * sizeof(GLfloat)); - } - glFeedbackBuffer(bufferSize, GL_2D, feedbackBuffer); - - (void) glRenderMode(GL_FEEDBACK); - - (*renderFunc) (); - - returned = glRenderMode(GL_RENDER); -#if 0 - if (returned == -1) { -#else - /* XXX RealityEngine workaround. */ - if (returned == -1 || returned == probableSize) { -#endif - probableSize = probableSize + (probableSize >> 1); - goto doFeedback; /* Try again with larger feedback buffer. */ - } - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluOrtho2D(0, width, 0, height); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - processFeedback(returned, feedbackBuffer); - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - - return returned; -} - -void -render(void) -{ - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective( /* field of view in degree */ 30.0, - /* aspect ratio */ 1.0, - /* Z near */ 1.0, /* Z far */ 20.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - gluLookAt(0.0, 0.0, 10.0, /* eye is at (0,0,5) */ - 0.0, 0.0, 0.0, /* center is at (0,0,0) */ - 0.0, 1.0, 0.); /* up is in postivie Y direction */ - - glPushMatrix(); - glRotatef(angle, 1.0, 0.3, 0.0); - switch (shape) { - case M_TORUS: - glutSolidTorus(0.275, 0.85, 8, 8); - break; - case M_CUBE: - glutSolidCube(1.0); - break; - case M_SPHERE: - glutSolidSphere(1.0, 10, 10); - break; - case M_ICO: - glutSolidIcosahedron(); - break; - case M_TEAPOT: - glutSolidTeapot(1.0); - break; - } - glPopMatrix(); -} - -void -display(void) -{ - if (boundary) { - glClear(GL_COLOR_BUFFER_BIT); - glDisable(GL_LIGHTING); - glDisable(GL_DEPTH_TEST); - glEnable(GL_CULL_FACE); - determineBoundary(render, 250); - } else { - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glEnable(GL_LIGHTING); - glEnable(GL_DEPTH_TEST); - glDisable(GL_CULL_FACE); - render(); - } - glutSwapBuffers(); -} - -void -menu(int value) -{ - switch (value) { - case M_TORUS: - case M_CUBE: - case M_SPHERE: - case M_ICO: - case M_TEAPOT: - shape = value; - break; - case M_ANGLE: - angle += 10.0; - break; - case M_BOUNDARY: - boundary = !boundary; /* Toggle. */ - break; - } - glutPostRedisplay(); -} - -/* ARGSUSED1 */ -void -special(int key, int x, int y) -{ - switch (key) { - case GLUT_KEY_UP: - angle += 10.0; - glutPostRedisplay(); - break; - case GLUT_KEY_DOWN: - angle -= 10.0; - glutPostRedisplay(); - break; - } -} - -int -main(int argc, char **argv) -{ - glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH | GLUT_MULTISAMPLE); - glutInit(&argc, argv); - - glutCreateWindow("boundary"); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glutSpecialFunc(special); - - glLightfv(GL_LIGHT0, GL_DIFFUSE, lightDiffuse); - glLightfv(GL_LIGHT0, GL_POSITION, lightPosition); - glEnable(GL_LIGHT0); - - tess = gluNewTess(); - gluTessProperty(tess, GLU_TESS_BOUNDARY_ONLY, GL_TRUE); - gluTessProperty(tess, GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_NONZERO); - gluTessCallback(tess, GLU_TESS_BEGIN, (void (CALLBACK*)())begin); - gluTessCallback(tess, GLU_TESS_VERTEX, (void (CALLBACK*)())vertex); - gluTessCallback(tess, GLU_TESS_END, (void (CALLBACK*)())end); - gluTessCallback(tess, GLU_TESS_ERROR, (void (CALLBACK*)())error); - gluTessCallback(tess, GLU_TESS_COMBINE, (void (CALLBACK*)())combine); - - glutCreateMenu(menu); - glutAddMenuEntry("Torus", M_TORUS); - glutAddMenuEntry("Cube", M_CUBE); - glutAddMenuEntry("Sphere", M_SPHERE); - glutAddMenuEntry("Icosahedron", M_ICO); - glutAddMenuEntry("Teapot", M_TEAPOT); - glutAddMenuEntry("Angle", M_ANGLE); - glutAddMenuEntry("Toggle boundary", M_BOUNDARY); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} - -#else -int main(int argc, char** argv) -{ - fprintf(stderr, "This program demonstrates the new tesselator API in GLU 1.2.\n"); - fprintf(stderr, "Your GLU library does not support this new interface, sorry.\n"); - return 0; -} -#endif /* GLU_VERSION_1_2 */ diff --git a/lib/glut-3.7.6/progs/advanced/boundary.dsp b/lib/glut-3.7.6/progs/advanced/boundary.dsp deleted file mode 100644 index 33a02b7e8..000000000 --- a/lib/glut-3.7.6/progs/advanced/boundary.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="boundary" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=boundary - 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 "boundary.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 "boundary.mak" CFG="boundary - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "boundary - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "boundary - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "boundary - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "boundary - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "boundary - Win32 Release" -# Name "boundary - Win32 Debug" -# Begin Source File - -SOURCE=.\boundary.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced/comp.c b/lib/glut-3.7.6/progs/advanced/comp.c deleted file mode 100644 index e3b0a032e..000000000 --- a/lib/glut-3.7.6/progs/advanced/comp.c +++ /dev/null @@ -1,182 +0,0 @@ - -/* comp.c - by David Blythe, SGI */ - -/* Porter/Duff compositing operations using OpenGL alpha blending. */ - -/* NOTE: This program uses OpenGL blending functions that need the frame - buffer to retain a destination alpha component. Examples of such - hardware: O2, IMPACT, RealityEngine, and InfiniteReality. */ - -#include -#include -#include -#include -#include "texture.h" - -static int w = 640, h = 640; - -void -myReshape(int nw, int nh) -{ - w = nw, h = nh; - glClearColor(0, 0, 0, 0); - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -static unsigned *a_data = 0, *b_data = 0; -static int a_width, a_height, b_width, b_height; - -void -init_tris(void) -{ - if (a_data) - free(a_data); - if (b_data) - free(b_data); - a_data = (unsigned *) malloc(w * h); - b_data = (unsigned *) malloc(w * h); - glViewport(0, 0, w / 2, h / 2); - glClear(GL_COLOR_BUFFER_BIT); - glColor4f(1, 0, 0, 1); - glBegin(GL_TRIANGLES); - glVertex2f(-1, -1); - glVertex2f(-1, 1); - glVertex2f(.5, 1); - glEnd(); - glReadPixels(0, 0, w / 2, h / 2, GL_RGBA, GL_UNSIGNED_BYTE, a_data); - - glClear(GL_COLOR_BUFFER_BIT); - glColor4f(0, 1, 0, 1); - glBegin(GL_TRIANGLES); - glVertex2f(1, -1); - glVertex2f(1, 1); - glVertex2f(-.5, 1); - glEnd(); - glReadPixels(0, 0, w / 2, h / 2, GL_RGBA, GL_UNSIGNED_BYTE, b_data); - - a_width = b_width = w / 2, a_height = b_height = h / 2; -} - -void -init_images(void) -{ - int comp; - - a_data = read_texture("a.rgb", &a_width, &a_height, &comp); - printf("%dx%dx%d\n", a_width, a_height, comp); - b_data = read_texture("b.rgb", &b_width, &b_height, &comp); - printf("%dx%dx%d\n", b_width, b_height, comp); -} - -void -display(void) -{ - int i; - - glDrawBuffer(GL_FRONT_AND_BACK); - glClear(GL_COLOR_BUFFER_BIT); - glDrawBuffer(GL_BACK); - - glBlendFunc(GL_SRC_ALPHA, GL_ZERO); - /* image A */ - glViewport(0, 0, w / 2, h / 2); - glRasterPos2f(-1, -1); - glDrawPixels(a_width, a_height, GL_RGBA, GL_UNSIGNED_BYTE, - a_data); - glEnable(GL_BLEND); - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); - glCopyPixels(0, 0, w / 2, h / 2, GL_COLOR); - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - glDisable(GL_BLEND); - - /* image B */ - glViewport(w / 2, 0, w / 2, h / 2); - glRasterPos2f(-1, -1); - glDrawPixels(b_width, b_height, GL_RGBA, GL_UNSIGNED_BYTE, - b_data); - glEnable(GL_BLEND); - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); - glCopyPixels(w / 2, 0, w / 2, h / 2, GL_COLOR); - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - glReadBuffer(GL_BACK); - glDrawBuffer(GL_FRONT); - - for (i = 0; i < 4; i++) { - glDisable(GL_BLEND); - switch (i) { - case 0: /* a over b */ - glViewport(0, 0, w / 2, h / 2); - glRasterPos2f(-1, -1); - glCopyPixels(0, 0, w / 2, h / 2, GL_COLOR); - glEnable(GL_BLEND); - glBlendFunc(GL_ONE_MINUS_DST_ALPHA, GL_ONE); - glCopyPixels(w / 2, 0, w / 2, h / 2, GL_COLOR); - break; - case 1: /* a under b */ - glViewport(w / 2, 0, w / 2, h / 2); - glRasterPos2f(-1, -1); - glCopyPixels(0, 0, w / 2, h / 2, GL_COLOR); - glEnable(GL_BLEND); - glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); - glCopyPixels(w / 2, 0, w / 2, h / 2, GL_COLOR); - break; - case 2: /* b in a */ - glViewport(0, h / 2, w / 2, h / 2); - glRasterPos2f(-1, -1); - glCopyPixels(0, 0, w / 2, h / 2, GL_COLOR); - glEnable(GL_BLEND); - glBlendFunc(GL_DST_ALPHA, GL_ZERO); - glCopyPixels(w / 2, 0, w / 2, h / 2, GL_COLOR); - break; - case 3: /* b out of a */ - glViewport(w / 2, h / 2, w / 2, h / 2); - glRasterPos2f(-1, -1); - glCopyPixels(0, 0, w / 2, h / 2, GL_COLOR); - glEnable(GL_BLEND); - glBlendFunc(GL_ONE_MINUS_DST_ALPHA, GL_ZERO); - glCopyPixels(w / 2, 0, w / 2, h / 2, GL_COLOR); - break; - } - } - glViewport(0, 0, w, h); - glEnable(GL_BLEND); - glBlendFunc(GL_ONE_MINUS_DST_ALPHA, GL_ONE); - glColor4f(1., 1., 1., 0.); - glRectf(-1, -1, 1, 1); - glFlush(); -} - -/* ARGSUSED1 */ -void -key(unsigned char key, int x, int y) -{ - if (key == '\033') - exit(0); -} - -int -main(int argc, char *argv[]) -{ - glutInit(&argc, argv); - glutInitWindowSize(w, h); - glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_ALPHA); - if (!glutGet(GLUT_DISPLAY_MODE_POSSIBLE)) { - printf("comp: requires a frame buffer with destination alpha\n"); - exit(1); - } - glutCreateWindow("comp"); - - if (argc > 1) - init_images(); - else - init_tris(); - glutDisplayFunc(display); - glutReshapeFunc(myReshape); - glutKeyboardFunc(key); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/advanced/comp.dsp b/lib/glut-3.7.6/progs/advanced/comp.dsp deleted file mode 100644 index 672d3e622..000000000 --- a/lib/glut-3.7.6/progs/advanced/comp.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="comp" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=comp - 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 "comp.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 "comp.mak" CFG="comp - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "comp - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "comp - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "comp - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "comp - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "comp - Win32 Release" -# Name "comp - Win32 Debug" -# Begin Source File - -SOURCE=.\comp.c -# End Source File -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# Begin Source File - -SOURCE=.\texture.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced/convolve.c b/lib/glut-3.7.6/progs/advanced/convolve.c deleted file mode 100644 index 3867d94ed..000000000 --- a/lib/glut-3.7.6/progs/advanced/convolve.c +++ /dev/null @@ -1,397 +0,0 @@ - -/* convolve.c - by Tom McReynolds, SGI */ - -/* Using the accumulation buffer for fast convolutions. */ - -#include -#include -#include -#include - -/* convolution choices */ -enum {CONV_NONE, - CONV_BOX_3X3, - CONV_BOX_5X5, - CONV_SOBEL_X, - CONV_LAPLACE -}; - -/* Filter contents and size */ -typedef struct { - GLfloat scale; /* 1/scale applied to image to prevent overflow */ - GLfloat bias; /* for biasing images */ - int rows; - int cols; - GLfloat *array; -} Filter; - -Filter *curmat; /* current filter to use for redrawing */ - -/* identity filter */ -void -identity(Filter *mat) -{ - int n, size; - size = mat->rows * mat->cols; - - mat->array[0] = 1.f; - for(n = 1; n < size; n++) - mat->array[n] = 0.f; - - mat->scale = 1.f; - mat->bias = 0.f; -} - - -/* create a new filter with identity filter in it */ -Filter * -newfilter(int rows, int cols) -{ - Filter *mat; - - mat = (Filter *)malloc(sizeof(Filter)); - mat->rows = rows; - mat->cols = cols; - mat->array = (GLfloat *)malloc(rows * cols * sizeof(GLfloat)); - identity(mat); - - return mat; -} - - -/* doesn't re-initialize matrix */ -void -resize(Filter *mat, int rows, int cols) -{ - if(mat->rows != rows || - mat->cols != cols) { - free(mat->array); - mat->array = NULL; - mat->array = (GLfloat *)realloc(mat->array, rows * cols * sizeof(GLfloat)); - } - mat->rows = rows; - mat->cols = cols; -} - - -/* box filter blur */ -void -box(Filter *mat) -{ - int n, count; - GLfloat blur; - - count = mat->cols * mat->rows; - blur = 1.f/count; - for(n = 0; n < count; n++) - mat->array[n] = blur; - - mat->scale = 1.f; - mat->bias = 0.f; -} - -/* sobel filter */ - -void -sobel(Filter *mat) -{ - static GLfloat sobel[] = {-.5f, 0.f, .5f, - -1.f, 0.f, 1.f, - -.5f, 0.f, .5f}; - - /* sobel is fixed size */ - resize(mat, 3, 3); /* will do nothing if size is right already */ - - memcpy(mat->array, sobel, sizeof(sobel)); - - mat->scale = 2.f; - mat->bias = 0.f; -} - -/* laplacian filter */ -void -laplace(Filter *mat) -{ - static GLfloat laplace[] = { 0.f, -.25f, 0.f, - -.25f, 1.f, -.25f, - 0.f, -.25f, 0.f}; - - /* sobel is fixed size */ - resize(mat, 3, 3); /* will do nothing if size is right already */ - - memcpy(mat->array, laplace, sizeof(laplace)); - - mat->scale = 4.f; - mat->bias = .125f; -} - -/* add menu callback */ - -void menu(int filter) -{ - switch(filter) { - case CONV_NONE: - resize(curmat, 1,1); - identity(curmat); - break; - case CONV_BOX_3X3: - resize(curmat, 3, 3); - box(curmat); - break; - case CONV_BOX_5X5: - resize(curmat, 5, 5); - box(curmat); - break; - case CONV_SOBEL_X: - sobel(curmat); - break; - case CONV_LAPLACE: - laplace(curmat); - break; - } - glutPostRedisplay(); -} - -int winWidth = 0; -int winHeight = 0; - -/* used to get current width and height of viewport */ -void -reshape(int wid, int ht) -{ - glViewport(0, 0, wid, ht); - winWidth = wid; - winHeight = ht; -} - -/* ARGSUSED1 */ -void key(unsigned char key, int x, int y) -{ - if(key == '\033') - exit(0); -} - - -/* -** Create a single component texture map -*/ -GLfloat *make_texture(int maxs, int maxt) -{ - int s, t; - static GLfloat *texture; - - texture = (GLfloat *)malloc(maxs * maxt * sizeof(GLfloat)); - for(t = 0; t < maxt; t++) { - for(s = 0; s < maxs; s++) { - texture[s + maxs * t] = ((s >> 4) & 0x1) ^ ((t >> 4) & 0x1); - } - } - return texture; -} - -enum {SPHERE = 1, CONE}; - -void -render(void) -{ - /* material properties for objects in scene */ - static GLfloat wall_mat[] = {1.f, 1.f, 1.f, 1.f}; - - glClear(GL_DEPTH_BUFFER_BIT|GL_COLOR_BUFFER_BIT); - - /* - ** Note: wall verticies are ordered so they are all front facing - ** this lets me do back face culling to speed things up. - */ - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, wall_mat); - - /* floor */ - /* make the floor textured */ - glEnable(GL_TEXTURE_2D); - - /* - ** Since we want to turn texturing on for floor only, we have to - ** make floor a separate glBegin()/glEnd() sequence. You can't - ** turn texturing on and off between begin and end calls - */ - glBegin(GL_QUADS); - glNormal3f(0.f, 1.f, 0.f); - glTexCoord2i(0, 0); - glVertex3f(-100.f, -100.f, -320.f); - glTexCoord2i(1, 0); - glVertex3f( 100.f, -100.f, -320.f); - glTexCoord2i(1, 1); - glVertex3f( 100.f, -100.f, -520.f); - glTexCoord2i(0, 1); - glVertex3f(-100.f, -100.f, -520.f); - glEnd(); - - glDisable(GL_TEXTURE_2D); - - /* walls */ - - glBegin(GL_QUADS); - /* left wall */ - glNormal3f(1.f, 0.f, 0.f); - glVertex3f(-100.f, -100.f, -320.f); - glVertex3f(-100.f, -100.f, -520.f); - glVertex3f(-100.f, 100.f, -520.f); - glVertex3f(-100.f, 100.f, -320.f); - - /* right wall */ - glNormal3f(-1.f, 0.f, 0.f); - glVertex3f( 100.f, -100.f, -320.f); - glVertex3f( 100.f, 100.f, -320.f); - glVertex3f( 100.f, 100.f, -520.f); - glVertex3f( 100.f, -100.f, -520.f); - - /* ceiling */ - glNormal3f(0.f, -1.f, 0.f); - glVertex3f(-100.f, 100.f, -320.f); - glVertex3f(-100.f, 100.f, -520.f); - glVertex3f( 100.f, 100.f, -520.f); - glVertex3f( 100.f, 100.f, -320.f); - - /* back wall */ - glNormal3f(0.f, 0.f, 1.f); - glVertex3f(-100.f, -100.f, -520.f); - glVertex3f( 100.f, -100.f, -520.f); - glVertex3f( 100.f, 100.f, -520.f); - glVertex3f(-100.f, 100.f, -520.f); - glEnd(); - - - glPushMatrix(); - glTranslatef(-80.f, -60.f, -420.f); - glCallList(SPHERE); - glPopMatrix(); - - - glPushMatrix(); - glTranslatef(-20.f, -80.f, -500.f); - glCallList(CONE); - glPopMatrix(); - -} - - - -void -convolve(void (*draw)(void), Filter *mat) -{ - int i, j; - int imax, jmax; - - imax = mat->cols; - jmax = mat->rows; - for(j = 0; j < jmax; j++) { - for(i = 0; i < imax; i++) { - glViewport(-i, -j, winWidth - i, winHeight - j); - draw(); - glAccum(GL_ACCUM, mat->array[i + j * imax]); - } - } -} - - -/* Called when window needs to be redrawn */ -void redraw(void) -{ - glClearAccum(curmat->bias, - curmat->bias, - curmat->bias, - 1.0); - - glClear(GL_ACCUM_BUFFER_BIT); - - convolve(render, curmat); - - glViewport(0, 0, winWidth, winHeight); - - glAccum(GL_RETURN, curmat->scale); - - glutSwapBuffers(); - - if(glGetError()) /* to catch programming errors; should never happen */ - printf("Oops! I screwed up my OpenGL calls somewhere\n"); -} - - -const int TEXDIM = 256; - -int -main(int argc, char *argv[]) -{ - GLfloat *tex; - static GLfloat lightpos[] = {50.f, 50.f, -320.f, 1.f}; - static GLfloat sphere_mat[] = {1.f, .5f, 0.f, 1.f}; - static GLfloat cone_mat[] = {0.f, .5f, 1.f, 1.f}; - GLUquadricObj *sphere, *cone, *base; - - glutInit(&argc, argv); - glutInitWindowSize(512, 512); - glutInitDisplayMode(GLUT_RGBA|GLUT_DEPTH|GLUT_ACCUM|GLUT_DOUBLE); - (void)glutCreateWindow("accumulation buffer convolve"); - glutDisplayFunc(redraw); - glutKeyboardFunc(key); - glutReshapeFunc(reshape); - - /* draw a perspective scene */ - glMatrixMode(GL_PROJECTION); - glFrustum(-100., 100., -100., 100., 320., 640.); - glMatrixMode(GL_MODELVIEW); - - /* turn on features */ - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - - /* place light 0 in the right place */ - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - - /* remove back faces to speed things up */ - glCullFace(GL_BACK); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - - /* make display lists for sphere and cone; for efficiency */ - - glNewList(SPHERE, GL_COMPILE); - sphere = gluNewQuadric(); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, sphere_mat); - gluSphere(sphere, 20.f, 20, 20); - gluDeleteQuadric(sphere); - glEndList(); - - glNewList(CONE, GL_COMPILE); - cone = gluNewQuadric(); - base = gluNewQuadric(); - glRotatef(-90.f, 1.f, 0.f, 0.f); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, cone_mat); - gluDisk(base, 0., 20., 20, 1); - gluCylinder(cone, 20., 0., 60., 20, 20); - gluDeleteQuadric(cone); - gluDeleteQuadric(base); - glEndList(); - - glutCreateMenu(menu); - glutAddMenuEntry("none", CONV_NONE); - glutAddMenuEntry("box filter (3x3 blur)", CONV_BOX_3X3); - glutAddMenuEntry("box filter (5x5 blur)", CONV_BOX_5X5); - glutAddMenuEntry("Sobel(x direction)", CONV_SOBEL_X); - glutAddMenuEntry("Laplace", CONV_LAPLACE); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - - /* load pattern for current 2d texture */ - tex = make_texture(TEXDIM, TEXDIM); - glTexImage2D(GL_TEXTURE_2D, 0, 1, TEXDIM, TEXDIM, 0, GL_RED, GL_FLOAT, tex); - free(tex); - - curmat = newfilter(1, 1); - identity(curmat); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/advanced/convolve.dsp b/lib/glut-3.7.6/progs/advanced/convolve.dsp deleted file mode 100644 index 14356a390..000000000 --- a/lib/glut-3.7.6/progs/advanced/convolve.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="convolve" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=convolve - 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 "convolve.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 "convolve.mak" CFG="convolve - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "convolve - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "convolve - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "convolve - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "convolve - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "convolve - Win32 Release" -# Name "convolve - Win32 Debug" -# Begin Source File - -SOURCE=.\convolve.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced/csg.c b/lib/glut-3.7.6/progs/advanced/csg.c deleted file mode 100644 index c72c0a0ad..000000000 --- a/lib/glut-3.7.6/progs/advanced/csg.c +++ /dev/null @@ -1,343 +0,0 @@ - -/* csg.c - by Tom McReynolds, SGI */ - -/* Doing constructive solid geometry (CSG) with stencil. */ - -#include -#include -#include - -enum { - CSG_A, CSG_B, CSG_A_OR_B, CSG_A_AND_B, CSG_A_SUB_B, CSG_B_SUB_A -}; - -/* just draw single object */ -void -one(void (*a) (void)) -{ - glEnable(GL_DEPTH_TEST); - a(); - glDisable(GL_DEPTH_TEST); -} - -/* "or" is easy; simply draw both objects with depth buffering on */ -void -or(void (*a) (void), void (*b) (void)) -{ - glEnable(GL_DEPTH_TEST); - a(); - b(); - glDisable(GL_DEPTH_TEST); -} - -/* Set stencil buffer to show the part of a (front or back face) that's - inside b's volume. Requirements: GL_CULL_FACE enabled, depth func GL_LESS - Side effects: depth test, stencil func, stencil op */ -void -firstInsideSecond(void (*a) (void), void (*b) (void), GLenum face, GLenum test) -{ - glEnable(GL_DEPTH_TEST); - glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); - glCullFace(face); /* controls which face of a to use */ - a(); /* draw a face of a into depth buffer */ - - /* use stencil plane to find parts of a in b */ - glDepthMask(GL_FALSE); - glEnable(GL_STENCIL_TEST); - glStencilFunc(GL_ALWAYS, 0, 0); - glStencilOp(GL_KEEP, GL_KEEP, GL_INCR); - glCullFace(GL_BACK); - b(); /* increment the stencil where the front face of b is - drawn */ - glStencilOp(GL_KEEP, GL_KEEP, GL_DECR); - glCullFace(GL_FRONT); - b(); /* decrement the stencil buffer where the back face - of b is drawn */ - glDepthMask(GL_TRUE); - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - - glStencilFunc(test, 0, 1); - glDisable(GL_DEPTH_TEST); - - glCullFace(face); - a(); /* draw the part of a that's in b */ -} - -void -fixDepth(void (*a) (void)) -{ - glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); - glEnable(GL_DEPTH_TEST); - glDisable(GL_STENCIL_TEST); - glDepthFunc(GL_ALWAYS); - a(); /* draw the front face of a, fixing the depth buffer */ - glDepthFunc(GL_LESS); -} - -/* "and" two objects together */ -void -and(void (*a) (void), void (*b) (void)) -{ - firstInsideSecond(a, b, GL_BACK, GL_NOTEQUAL); - - fixDepth(b); - - firstInsideSecond(b, a, GL_BACK, GL_NOTEQUAL); - - glDisable(GL_STENCIL_TEST); /* reset things */ -} - -/* subtract b from a */ -void -sub(void (*a) (void), void (*b) (void)) -{ - firstInsideSecond(a, b, GL_FRONT, GL_NOTEQUAL); - - fixDepth(b); - - firstInsideSecond(b, a, GL_BACK, GL_EQUAL); - - glDisable(GL_STENCIL_TEST); /* reset things */ -} - -enum { - SPHERE = 1, CONE -}; - -/* Draw a cone */ -GLfloat coneX = 0.f, coneY = 0.f, coneZ = 0.f; -void -cone(void) -{ - glPushMatrix(); - glTranslatef(coneX, coneY, coneZ); - glTranslatef(0.f, 0.f, -30.f); - glCallList(CONE); - glPopMatrix(); -} - -/* Draw a sphere */ -GLfloat sphereX = 0.f, sphereY = 0.f, sphereZ = 0.f; -void -sphere(void) -{ - glPushMatrix(); - glTranslatef(sphereX, sphereY, sphereZ); - glCallList(SPHERE); - glPopMatrix(); - -} - -int csg_op = CSG_A; - -/* add menu callback */ - -void -menu(int csgop) -{ - csg_op = csgop; - glutPostRedisplay(); -} - -GLfloat viewangle; - -void -redraw(void) -{ - /* clear stencil each time */ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); - - glPushMatrix(); - glRotatef(viewangle, 0.f, 1.f, 0.f); - - switch (csg_op) { - case CSG_A: - one(cone); - break; - case CSG_B: - one(sphere); - break; - case CSG_A_OR_B: - or(cone, sphere); - break; - case CSG_A_AND_B: - and(cone, sphere); - break; - case CSG_A_SUB_B: - sub(cone, sphere); - break; - case CSG_B_SUB_A: - sub(sphere, cone); - break; - } - glPopMatrix(); - glutSwapBuffers(); -} - -/* animate scene by rotating */ -enum { - ANIM_LEFT, ANIM_RIGHT -}; -int animDirection = ANIM_LEFT; - -void -anim(void) -{ - if (animDirection == ANIM_LEFT) - viewangle -= 3.f; - else - viewangle += 3.f; - glutPostRedisplay(); -} - -/* ARGSUSED1 */ -/* special keys, like array and F keys */ -void -special(int key, int x, int y) -{ - switch (key) { - case GLUT_KEY_LEFT: - glutIdleFunc(anim); - animDirection = ANIM_LEFT; - break; - case GLUT_KEY_RIGHT: - glutIdleFunc(anim); - animDirection = ANIM_RIGHT; - break; - case GLUT_KEY_UP: - case GLUT_KEY_DOWN: - glutIdleFunc(0); - break; - } -} - -/* ARGSUSED1 */ -void -key(unsigned char key, int x, int y) -{ - switch (key) { - case 'a': - viewangle -= 10.f; - glutPostRedisplay(); - break; - case 's': - viewangle += 10.f; - glutPostRedisplay(); - break; - case '\033': - exit(0); - } -} - -int picked_object; -int xpos = 0, ypos = 0; -int newxpos, newypos; -int startx, starty; - -void -mouse(int button, int state, int x, int y) -{ - if (state == GLUT_UP) { - picked_object = button; - xpos += newxpos; - ypos += newypos; - newxpos = 0; - newypos = 0; - } else { /* GLUT_DOWN */ - startx = x; - starty = y; - } -} - -#define DEGTORAD (2 * 3.1415 / 360) -void -motion(int x, int y) -{ - GLfloat r, objx, objy, objz; - - newxpos = x - startx; - newypos = starty - y; - - r = (newxpos + xpos) * 50.f / 512.f; - objx = r * cos(viewangle * DEGTORAD); - objy = (newypos + ypos) * 50.f / 512.f; - objz = r * sin(viewangle * DEGTORAD); - - switch (picked_object) { - case CSG_A: - coneX = objx; - coneY = objy; - coneZ = objz; - break; - case CSG_B: - sphereX = objx; - sphereY = objy; - sphereZ = objz; - break; - } - glutPostRedisplay(); -} - -int -main(int argc, char **argv) -{ - static GLfloat lightpos[] = - {25.f, 50.f, -50.f, 1.f}; - static GLfloat sphere_mat[] = - {1.f, .5f, 0.f, 1.f}; - static GLfloat cone_mat[] = - {0.f, .5f, 1.f, 1.f}; - GLUquadricObj *sphere, *cone, *base; - - glutInit(&argc, argv); - glutInitWindowSize(512, 512); - glutInitDisplayMode(GLUT_STENCIL | GLUT_DEPTH | GLUT_DOUBLE); - (void) glutCreateWindow("csg"); - glutDisplayFunc(redraw); - glutKeyboardFunc(key); - glutSpecialFunc(special); - glutMouseFunc(mouse); - glutMotionFunc(motion); - - glutCreateMenu(menu); - glutAddMenuEntry("A only", CSG_A); - glutAddMenuEntry("B only", CSG_B); - glutAddMenuEntry("A or B", CSG_A_OR_B); - glutAddMenuEntry("A and B", CSG_A_AND_B); - glutAddMenuEntry("A sub B", CSG_A_SUB_B); - glutAddMenuEntry("B sub A", CSG_B_SUB_A); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - glEnable(GL_CULL_FACE); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); - - /* make display lists for sphere and cone; for efficiency */ - - glNewList(SPHERE, GL_COMPILE); - sphere = gluNewQuadric(); - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, sphere_mat); - gluSphere(sphere, 20.f, 64, 64); - gluDeleteQuadric(sphere); - glEndList(); - - glNewList(CONE, GL_COMPILE); - cone = gluNewQuadric(); - base = gluNewQuadric(); - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, cone_mat); - gluQuadricOrientation(base, GLU_INSIDE); - gluDisk(base, 0., 15., 64, 1); - gluCylinder(cone, 15., 0., 60., 64, 64); - gluDeleteQuadric(cone); - gluDeleteQuadric(base); - glEndList(); - - glMatrixMode(GL_PROJECTION); - glOrtho(-50., 50., -50., 50., -50., 50.); - glMatrixMode(GL_MODELVIEW); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/advanced/csg.dsp b/lib/glut-3.7.6/progs/advanced/csg.dsp deleted file mode 100644 index 5157a741d..000000000 --- a/lib/glut-3.7.6/progs/advanced/csg.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="csg" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=csg - 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 "csg.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 "csg.mak" CFG="csg - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "csg - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "csg - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "csg - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "csg - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "csg - Win32 Release" -# Name "csg - Win32 Debug" -# Begin Source File - -SOURCE=.\csg.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced/decal.c b/lib/glut-3.7.6/progs/advanced/decal.c deleted file mode 100644 index 17d27c02f..000000000 --- a/lib/glut-3.7.6/progs/advanced/decal.c +++ /dev/null @@ -1,123 +0,0 @@ - -/* decal.c - by Tom McReynolds, SGI */ - -/* An Example of decaling, using stencil */ - -#include -#include - -/* ARGSUSED1 */ -void -key(unsigned char key, int x, int y) -{ - switch (key) { - case '\033': - exit(0); - } -} - -/* decal shape polygon onto base */ -void -decal_poly(void) -{ - glBegin(GL_QUADS); - glNormal3f(0.f, 0.f, -1.f); - glVertex3i(-2, 2, 0); - glVertex3i(-2, 3, 0); - glVertex3i(2, 3, 0); - glVertex3i(2, 2, 0); - - glVertex3f(-.5, -3.f, 0); - glVertex3f(-.5f, 2.f, 0); - glVertex3f(.5f, 2.f, 0); - glVertex3f(.5f, -3.f, 0); - glEnd(); -} - -int angle = 0; - -void -redraw(void) -{ - /* clear stencil each time */ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); - - glEnable(GL_STENCIL_TEST); - glStencilFunc(GL_ALWAYS, 1, 1); - glStencilOp(GL_KEEP, GL_REPLACE, GL_REPLACE); - glDepthFunc(GL_LESS); - - glPushMatrix(); - glColor3f(1.f, 0.f, 0.f); - glTranslatef(0.f, 0.f, -10.f); - glScalef(5.f, 5.f, 5.f); - glRotatef((GLfloat) angle, 0.f, 1.f, 0.f); - glEnable(GL_NORMALIZE); - glutSolidDodecahedron(); - glDisable(GL_NORMALIZE); - glPopMatrix(); - - glStencilFunc(GL_EQUAL, 1, 1); - glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); - glDepthFunc(GL_ALWAYS); - - glPushMatrix(); - glTranslatef(0.f, 0.f, -10.f); - glRotatef((GLfloat) angle, 0.f, 1.f, 0.f); - glRotatef(58.285f, 0.f, 1.f, 0.f); - glTranslatef(0.f, 0.f, -7.265f); - glColor3f(0.f, 1.f, 0.f); - decal_poly(); - glPopMatrix(); - - glDisable(GL_STENCIL_TEST); - - glutSwapBuffers(); -} - -void -anim(void) -{ - angle = (angle + 1) % 360; - glutPostRedisplay(); -} - -void -visible(int vis) -{ - if (vis == GLUT_VISIBLE) - glutIdleFunc(anim); - else - glutIdleFunc(NULL); -} - -int -main(int argc, char *argv[]) -{ - static GLfloat lightpos[] = - {10.f, 5.f, 0.f, 1.f}; - - glutInit(&argc, argv); - glutInitWindowSize(512, 512); - glutInitDisplayMode(GLUT_STENCIL | GLUT_DEPTH | GLUT_DOUBLE); - (void) glutCreateWindow("decal"); - glutDisplayFunc(redraw); - glutKeyboardFunc(key); - glutVisibilityFunc(visible); - glEnable(GL_DEPTH_TEST); - glMatrixMode(GL_PROJECTION); - glOrtho(-10., 10., -10., 10., 0., 20.); - glMatrixMode(GL_MODELVIEW); - - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_CULL_FACE); - glCullFace(GL_BACK); - - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); - glEnable(GL_COLOR_MATERIAL); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/advanced/decal.dsp b/lib/glut-3.7.6/progs/advanced/decal.dsp deleted file mode 100644 index b0c8bccdd..000000000 --- a/lib/glut-3.7.6/progs/advanced/decal.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="decal" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=decal - 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 "decal.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 "decal.mak" CFG="decal - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "decal - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "decal - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "decal - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "decal - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "decal - Win32 Release" -# Name "decal - Win32 Debug" -# Begin Source File - -SOURCE=.\decal.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced/dissolve.c b/lib/glut-3.7.6/progs/advanced/dissolve.c deleted file mode 100644 index db6b2aeed..000000000 --- a/lib/glut-3.7.6/progs/advanced/dissolve.c +++ /dev/null @@ -1,441 +0,0 @@ - -/* dissolve.c - by Tom McReynolds, SGI */ - -/* An Example of dissolve, using stencil */ - -/* Drag with left mouse button to dissolve to the 3D background, - Drag with middle mouse button to dissolve to checkerboard, and - use right button for menu to clear stencil. */ - -#include -#include -#include -#include -#include - -#ifdef _WIN32 -#define random rand -#endif - -int winWidth = 512; -int winHeight = 512; - -/* Create a single component texture map */ -GLfloat * -make_texture(int maxs, int maxt) -{ - int s, t; - static GLfloat *texture; - - texture = (GLfloat *) malloc(maxs * maxt * sizeof(GLfloat)); - for (t = 0; t < maxt; t++) { - for (s = 0; s < maxs; s++) { - texture[s + maxs * t] = ((s >> 4) & 0x1) ^ ((t >> 4) & 0x1); - } - } - return texture; -} - -enum { - SPHERE = 1, CONE -}; - -GLfloat angle = 0.f; /* angle of rotating object in layer 0 */ - -enum { - X, Y -}; -GLboolean eraser = GL_FALSE; -GLint layer = 1; -GLint eraserpos[2] = -{512 / 8, 512 / 12}; - -/* draw eraser and erase what's underneath */ - -GLubyte *eraserpix = 0; -int erasersize = 0; -void -makeEraser(void) -{ - int i, skip; - - erasersize = 4 * winWidth / 4 * winHeight / 6; - eraserpix = (GLubyte *) realloc(eraserpix, erasersize * sizeof(GLubyte)); - - /* make it white */ - (void) memset(eraserpix, 255, erasersize * sizeof(GLubyte)); - - skip = (int) (random() % 8); - for (i = 0; i < erasersize; i++) { - if (!skip) { - eraserpix[i] = 0; - eraserpix[i + 1] = 0; - eraserpix[i + 2] = 0; - eraserpix[i + 3] = 0; - skip = (int) (random() % 8); - } else - skip--; - } - -} - -/* ARGSUSED2 */ -/* left button, first layer, middle button, second layer */ -void -mouse(int button, int state, int x, int y) -{ - if (state == GLUT_DOWN) { - eraser = GL_TRUE; - if (button == GLUT_LEFT_BUTTON) - layer = 1; - else /* GLUT_MIDDLE: GLUT_RIGHT is for menu */ - layer = 0; - } else { /* GLUT_UP */ - eraser = GL_FALSE; - } - glutPostRedisplay(); -} - -enum { - CLEAR -}; /* menu choices */ -GLboolean clearstencil = GL_TRUE; - -void -menu(int choice) -{ - switch (choice) { - case CLEAR: - clearstencil = GL_TRUE; - break; - } - glutPostRedisplay(); -} - -/* used to get current width and height of viewport */ -void -reshape(int wid, int ht) -{ - glViewport(0, 0, wid, ht); - winWidth = wid; - winHeight = ht; - clearstencil = GL_TRUE; - makeEraser(); - glutPostRedisplay(); -} - -void -draweraser(void) -{ - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluOrtho2D(0, winWidth, 0, winHeight); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - /* replace with this layer */ - glStencilFunc(GL_ALWAYS, layer, 0); - glStencilOp(GL_KEEP, GL_REPLACE, GL_REPLACE); - glDisable(GL_LIGHTING); - glDisable(GL_DEPTH_TEST); - - glEnable(GL_ALPHA_TEST); - glAlphaFunc(GL_NOTEQUAL, 0); - glRasterPos2i(eraserpos[X], eraserpos[Y]); - glBitmap(0, 0, 0.f, 0.f, -winWidth / 8.f, -winHeight / 12.f, 0); - glDrawPixels(winWidth / 4, winHeight / 6, GL_RGBA, GL_UNSIGNED_BYTE, eraserpix); - glDisable(GL_ALPHA_TEST); -} - -void -drawlayer2(void) -{ - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluOrtho2D(0, winWidth, 0, winHeight); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - glDisable(GL_LIGHTING); - glDisable(GL_DEPTH_TEST); - glEnable(GL_TEXTURE_2D); - - glBegin(GL_QUADS); - glTexCoord2i(0, 0); - glVertex2i(0, 0); - glTexCoord2i(1, 0); - glVertex2i(winWidth, 0); - glTexCoord2i(1, 1); - glVertex2i(winWidth, winHeight); - glTexCoord2i(0, 1); - glVertex2i(0, winHeight); - glEnd(); - - glDisable(GL_TEXTURE_2D); - - if (glGetError()) /* to catch programming errors; should never happen */ - printf("Oops! I screwed up my OpenGL calls somewhere\n"); -} - -void -drawlayer1(void) -{ - /* material properties for objects in scene */ - static GLfloat wall_mat[] = - {1.f, 1.f, 1.f, 1.f}; - static GLfloat lightpos[] = - {50.f, 50.f, -320.f, 1.f}; - - /* draw a perspective scene */ - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glFrustum(-100., 100., -100., 100., 320., 640.); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - /* turn on features */ - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - - /* place light 0 in the right place */ - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - - /* remove back faces to speed things up */ - glCullFace(GL_BACK); - - /* Note: wall verticies are ordered so they are all front facing this lets - me do back face culling to speed things up. */ - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, wall_mat); - - /* floor */ - /* make the floor textured */ - glEnable(GL_TEXTURE_2D); - - /* Since we want to turn texturing on for floor only, we have to make floor - a separate glBegin()/glEnd() sequence. You can't turn texturing on and - off between begin and end calls */ - glBegin(GL_QUADS); - glNormal3f(0.f, 1.f, 0.f); - glTexCoord2i(0, 0); - glVertex3f(-100.f, -100.f, -320.f); - glTexCoord2i(1, 0); - glVertex3f(100.f, -100.f, -320.f); - glTexCoord2i(1, 1); - glVertex3f(100.f, -100.f, -520.f); - glTexCoord2i(0, 1); - glVertex3f(-100.f, -100.f, -520.f); - glEnd(); - - glDisable(GL_TEXTURE_2D); - - /* walls */ - - glBegin(GL_QUADS); - /* left wall */ - glNormal3f(1.f, 0.f, 0.f); - glVertex3f(-100.f, -100.f, -320.f); - glVertex3f(-100.f, -100.f, -520.f); - glVertex3f(-100.f, 100.f, -520.f); - glVertex3f(-100.f, 100.f, -320.f); - - /* right wall */ - glNormal3f(-1.f, 0.f, 0.f); - glVertex3f(100.f, -100.f, -320.f); - glVertex3f(100.f, 100.f, -320.f); - glVertex3f(100.f, 100.f, -520.f); - glVertex3f(100.f, -100.f, -520.f); - - /* ceiling */ - glNormal3f(0.f, -1.f, 0.f); - glVertex3f(-100.f, 100.f, -320.f); - glVertex3f(-100.f, 100.f, -520.f); - glVertex3f(100.f, 100.f, -520.f); - glVertex3f(100.f, 100.f, -320.f); - - /* back wall */ - glNormal3f(0.f, 0.f, 1.f); - glVertex3f(-100.f, -100.f, -520.f); - glVertex3f(100.f, -100.f, -520.f); - glVertex3f(100.f, 100.f, -520.f); - glVertex3f(-100.f, 100.f, -520.f); - glEnd(); - - glPushMatrix(); - glTranslatef(-80.f, -80.f, -420.f); - glCallList(SPHERE); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(-20.f, -100.f, -500.f); - glCallList(CONE); - glPopMatrix(); - - if (glGetError()) /* to catch programming errors; should never happen */ - printf("Oops! I screwed up my OpenGL calls somewhere\n"); -} - -void -drawlayer0(void) -{ - static GLfloat lightpos[] = - {50.f, 50.f, 0.f, 1.f}; - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho(-50.f, 50.f, -50.f, 50.f, 0.f, 100.f); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(0.f, 0.f, -50.f); - glRotatef(angle, 0.f, 1.f, 0.f); - glRotatef(90.f, 0.f, 0.f, 1.f); - glTranslatef(0.f, -25.f, 0.f); - - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - glCullFace(GL_BACK); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - - glCallList(CONE); - -} - -void -redraw(void) -{ - if (glutLayerGet(GLUT_NORMAL_DAMAGED) || - clearstencil == GL_TRUE) { - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); - clearstencil = GL_FALSE; - } else - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); - - glStencilFunc(GL_EQUAL, 2, ~0); - drawlayer2(); - - glStencilFunc(GL_EQUAL, 1, ~0); - drawlayer1(); - - glStencilFunc(GL_EQUAL, 0, ~0); - drawlayer0(); - - if (eraser) - draweraser(); - - glutSwapBuffers(); -} - -void -idle(void) -{ - angle += 1.f; - glutPostRedisplay(); -} - -void -passive(int x, int y) -{ - - eraserpos[X] = x; - eraserpos[Y] = winHeight - y; -} - -void -motion(int x, int y) -{ - - eraserpos[X] = x; - eraserpos[Y] = winHeight - y; - - glutPostRedisplay(); -} - -/* ARGSUSED1 */ -void -key(unsigned char key, int x, int y) -{ - switch (key) { - case '\033': - exit(0); - } -} - -void -visible(int vis) -{ - if (vis == GLUT_VISIBLE) - glutIdleFunc(idle); - else - glutIdleFunc(NULL); -} - -const int TEXDIM = 256; -GLfloat *tex = 0; - -int -main(int argc, char *argv[]) -{ - static GLfloat sphere_mat[] = - {1.f, .5f, 0.f, 1.f}; - static GLfloat cone_mat[] = - {0.f, .5f, 1.f, 1.f}; - GLUquadricObj *sphere, *cone, *base; - - glutInit(&argc, argv); - glutInitWindowSize(winWidth, winHeight); - glutInitDisplayMode(GLUT_DOUBLE | GLUT_STENCIL | GLUT_DEPTH); - (void) glutCreateWindow("dissolve"); - glutDisplayFunc(redraw); - glutMouseFunc(mouse); - glutMotionFunc(motion); - glutPassiveMotionFunc(passive); - glutKeyboardFunc(key); - glutVisibilityFunc(visible); - glutReshapeFunc(reshape); - - glutCreateMenu(menu); - glutAddMenuEntry("Clear Stencil", CLEAR); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - glNewList(SPHERE, GL_COMPILE); - /* make display lists for sphere and cone; for efficiency */ - sphere = gluNewQuadric(); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, sphere_mat); - gluSphere(sphere, 20.f, 20, 20); - gluDeleteQuadric(sphere); - glEndList(); - - glNewList(CONE, GL_COMPILE); - cone = gluNewQuadric(); - base = gluNewQuadric(); - glRotatef(-90.f, 1.f, 0.f, 0.f); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, cone_mat); - gluQuadricOrientation(base, GLU_INSIDE); - gluDisk(base, 0., 20., 20, 1); - gluCylinder(cone, 20., 0., 60., 20, 20); - gluDeleteQuadric(cone); - gluDeleteQuadric(base); - glEndList(); - - makeEraser(); - - /* load pattern for current 2d texture */ - tex = make_texture(TEXDIM, TEXDIM); - glTexImage2D(GL_TEXTURE_2D, 0, 1, TEXDIM, TEXDIM, 0, GL_RED, GL_FLOAT, tex); - free(tex); - - glClearStencil(2); - glEnable(GL_STENCIL_TEST); /* used all the time */ - - glEnable(GL_CULL_FACE); - glCullFace(GL_BACK); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/advanced/dissolve.dsp b/lib/glut-3.7.6/progs/advanced/dissolve.dsp deleted file mode 100644 index 330ae94db..000000000 --- a/lib/glut-3.7.6/progs/advanced/dissolve.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="dissolve" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=dissolve - 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 "dissolve.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 "dissolve.mak" CFG="dissolve - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "dissolve - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "dissolve - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "dissolve - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "dissolve - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "dissolve - Win32 Release" -# Name "dissolve - Win32 Debug" -# Begin Source File - -SOURCE=.\dissolve.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced/envmap.c b/lib/glut-3.7.6/progs/advanced/envmap.c deleted file mode 100644 index 212ca0a50..000000000 --- a/lib/glut-3.7.6/progs/advanced/envmap.c +++ /dev/null @@ -1,1195 +0,0 @@ - -/* envmap.c - David Blythe, SGI */ - -/* Texture environment mapping demo. */ - -#include -#include -#include -#ifndef _WIN32 -#include -#else -#define drand48() (((float) rand())/((float) RAND_MAX)) -#endif -#include -#include -#include "texture.h" - -#if defined(GL_VERSION_1_1) -/* Routines called directly. */ -#elif defined(GL_EXT_texture_object) && defined(GL_EXT_copy_texture) && defined(GL_EXT_subtexture) -#define glBindTexture(A,B) glBindTextureEXT(A,B) -#define glGenTextures(A,B) glGenTexturesEXT(A,B) -#define glDeleteTextures(A,B) glDeleteTexturesEXT(A,B) -#define glCopyTexSubImage2D(A,B,C,D,E,F,G,H) glCopyTexSubImage2DEXT(A,B,C,D,E,F,G,H) -#else -#define glBindTexture(A,B) -#define glGenTextures(A,B) -#define glDeleteTextures(A,B) -#define glCopyTexSubImage2D(A,B,C,D,E,F,G,H) -#endif - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -#define OB_CUBE 0 -#define OB_SPHERE 1 -#define OB_SQUARE 2 -#define OB_CYL 3 -#define OB_TORUS 4 -#define OB_HSPHERE 5 - -#define NOBJS 5 -#define TDRAW 10 - -#define LIST_BASE 100 -#define TOBJ_BASE 200 -#define TEXSIZE 256 /* default texture-size */ - -typedef struct _vector { - float x, y, z; -} vector_t; - -typedef struct _face { - char *filename; - unsigned *buf; - int width; - int height; - int components; - vector_t u, v, n, o; /* plane equation */ - float angle1; - vector_t axis1; /* for rotation */ - float angle2; - vector_t axis2; -} face_t; - -typedef struct _color { - float r, g, b; -} color_t; - -struct { /* command-line options */ - int use_spheremap; - char *spheremap_file; - int hw; - int size; - int samples; - int object; - char *outfile; - int tessellation; -} opts = { - - 0, 0, 0, TEXSIZE, 4, OB_TORUS, 0, 30 -}; /* default settings */ - -void display(void); -void init(void); -void build_lists(void); -unsigned *render_spheremap(int *width, int *height, - int *components, int doalloc); - -/* strdup is actually not a standard ANSI C or POSIX routine - so implement a private one. OpenVMS does not have a strdup; Linux's - standard libc doesn't declare strdup by default (unless BSD or SVID - interfaces are requested). */ -static char * -stralloc(const char *string) -{ - char *copy; - - copy = malloc(strlen(string) + 1); - if (copy == NULL) - return NULL; - strcpy(copy, string); - return copy; -} - -void -vadd(vector_t * a, vector_t * b, vector_t * sum) -{ - sum->x = a->x + b->x; - sum->y = a->y + b->y; - sum->z = a->z + b->z; -} - -void -vsub(vector_t * a, vector_t * b, vector_t * diff) -{ - diff->x = a->x - b->x; - diff->y = a->y - b->y; - diff->z = a->z - b->z; -} - -void -vscale(vector_t * v, float scale) -{ - v->x *= scale; - v->y *= scale; - v->z *= scale; -} - -float -vdot(vector_t * u, vector_t * v) -{ - return (u->x * v->x + u->y * v->y + u->z * v->z); -} - -void -vreflect(vector_t * axis, vector_t * v, vector_t * r) -{ - vector_t t = *axis; - - vscale(&t, 2 * vdot(axis, v)); - vsub(&t, v, r); -} - -int -intersect(vector_t * v) -{ - int f; - float x, y, z; - - x = fabs(v->x); - y = fabs(v->y); - z = fabs(v->z); - if (x >= y && x >= z) - f = (v->x > 0) ? 2 : 0; - else if (y >= x && y >= z) - f = (v->y > 0) ? 4 : 5; - else - f = (v->z > 0) ? 3 : 1; - - return f; -} - -face_t face[6] = -{ - {"../data/00.rgb", 0, 0, 0, 0, - {0, 0, -1}, - {0, 1, 0}, - {-1, 0, 0}, - {-0.5, -0.5, 0.5}, 90.0, - {0, 1, 0}, 0, - {0, 0, 0}}, - {"../data/01.rgb", 0, 0, 0, 0, - {1, 0, 0}, - {0, 1, 0}, - {0, 0, -1}, - {-0.5, -0.5, -0.5}, 180.0, - {0, 1, 0}, 0, - {0, 0, 0}}, - {"../data/02.rgb", 0, 0, 0, 0, - {0, 0, 1}, - {0, 1, 0}, - {1, 0, 0}, - {0.5, -0.5, -0.5}, 270.0, - {0, 1, 0}, 0, - {0, 0, 0}}, - {"../data/03.rgb", 0, 0, 0, 0, - {-1, 0, 0}, - {0, 1, 0}, - {0, 0, 1}, - {0.5, -0.5, 0.5}, 0.0, - {0, 1, 0}, 0, - {0, 0, 0}}, - {"../data/04.rgb", 0, 0, 0, 0, - {1, 0, 0}, - {0, 0, 1}, - {0, 1, 0}, - {-0.5, 0.5, -0.5}, 90.0, - {1, 0, 0}, 180.0, - {0, 1, 0}}, - {"../data/05.rgb", 0, 0, 0, 0, - {1, 0, 0}, - {0, 0, -1}, - {0, -1, 0}, - {-0.5, -0.5, 0.5}, -90.0, - {1, 0, 0}, 180.0, - {0, 1, 0}} -}; - -void -sample(int facenum, float s, float t, color_t * c) -{ - face_t *f = &face[facenum]; - int xpos, ypos; - unsigned char *p; - - xpos = s * f->width; - ypos = t * f->height; - - p = (unsigned char *) &f->buf[ypos * f->width + xpos]; - c->r = p[0] / 255.0; - c->g = p[1] / 255.0; - c->b = p[2] / 255.0; -} - -unsigned * -construct_spheremap(int *width, int *height, - int *components) -{ - int i, j, x, y, f; - unsigned *spheremap; - unsigned char *lptr; - int size = opts.size; - color_t c, texel; - vector_t v, r, p; - float s, t, temp, k; - int samples; - - /* Read in the 6 faces of the environment */ - for (i = 0; i < 6; i++) { - face[i].buf = read_texture(face[i].filename, &face[i].width, - &face[i].height, &face[i].components); - if (!face[i].buf) { - fprintf(stderr, "Error: cannot load image %s\n", face[i].filename); - exit(1); - } - } - - *components = face[0].components; - *width = *height = size; - samples = opts.samples; - - spheremap = (unsigned *) malloc(size * size * sizeof(unsigned)); - if (!spheremap) { - perror("malloc"); - exit(1); - } - lptr = (unsigned char *) spheremap; - - /* Calculate sphere-map by rendering a perfectly reflective solid sphere. */ - - for (y = 0; y < size; y++) - for (x = 0; x < size; x++) { - - texel.r = texel.g = texel.b = 0.0; - for (j = 0; j < samples; j++) { - s = (x + (float) drand48()) / size - 0.5; - t = (y + (float) drand48()) / size - 0.5; - - temp = s * s + t * t; - if (temp >= 0.25) { /* point not on sphere */ - c.r = c.g = c.b = 0; - continue; - } - /* get point on sphere */ - p.x = s; - p.y = t; - p.z = sqrt(0.25 - temp); - vscale(&p, 2.0); - /* ray from infinity (eyepoint) to surface */ - v.x = 0.0; - v.y = 0.0; - v.z = 1.0; - - /* get reflected ray */ - vreflect(&p, &v, &r); - - /* Intersect reflected ray with cube */ - f = intersect(&r); - k = vdot(&face[f].o, &face[f].n) / vdot(&r, &face[f].n); - vscale(&r, k); - vsub(&r, &face[f].o, &v); - - /* Get texture map-indices */ - s = vdot(&v, &face[f].u); - t = vdot(&v, &face[f].v); - - /* Sample to get color */ - sample(f, s, t, &c); - - texel.r += c.r; - texel.g += c.g; - texel.b += c.b; - } - - lptr[0] = 255 * texel.r / samples; - lptr[1] = 255 * texel.g / samples; - lptr[2] = 255 * texel.b / samples; - lptr[3] = 0xff; - lptr += 4; - } - - return (unsigned *) spheremap; -} - -void -texture_init(void) -{ - unsigned *buf; - int width, height, components; - char filename[80]; - - if (opts.use_spheremap) { - strcpy(filename, opts.spheremap_file); - buf = read_texture(filename, &width, &height, &components); - if (components == 3) - components++; - if (!buf) { - fprintf(stderr, "Error: cannot load image %s\n", filename); - exit(1); - } - } else { - buf = (opts.hw) ? - render_spheremap(&width, &height, &components, 1) : - construct_spheremap(&width, &height, &components); - - if (!buf) { - fprintf(stderr, "Error: Cannot construct spheremap\n"); - exit(1); - } - } - - glBindTexture(GL_TEXTURE_2D, TOBJ_BASE + TDRAW); - glPixelStorei(GL_UNPACK_ALIGNMENT, 4); - glEnable(GL_TEXTURE_2D); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); - gluBuild2DMipmaps(GL_TEXTURE_2D, components, width, height, - GL_RGBA, GL_UNSIGNED_BYTE, buf); - - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, - GL_LINEAR_MIPMAP_LINEAR); - - glTexGenf(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); - glTexGenf(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); - glEnable(GL_TEXTURE_GEN_S); - glEnable(GL_TEXTURE_GEN_T); - - free(buf); -} - -void -texture_init_from_spheremap(void) -{ - int w, h, components; - - render_spheremap(&w, &h, &components, 0); - - glReadBuffer(GL_BACK); - glBindTexture(GL_TEXTURE_2D, TOBJ_BASE + TDRAW); - glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, w, h); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - - glTexGenf(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); - glTexGenf(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); - glEnable(GL_TEXTURE_GEN_S); - glEnable(GL_TEXTURE_GEN_T); -} - -void -parse(int argc, char *argv[]) -{ - int i = 1; - char *usage = - "Usage: map [-size n] [-samples n] [-help] \n\ -\t[-sphere filename | -cubemap [0-5].rgb]\n\ -\n\ -\t-size n : specify size of sphere-map (when generated from cubemap)\n\ -\t-samples n : #samples to use per pixel of the spheremap\n\ -\t-sphere file.rgb : specify spheremap-image\n\ -\t-cubemap [0-5].rgb: specify 6 cubemap files\n\ -\t-out file.rgb: save generated spheremap to file\n\ -\t-hw : Use hardware texture mapping to create sphere-map\n\ -\t-help : print this message\n"; - -#define check_arg(i, n, str) \ - if (argc < i+n) { \ - fprintf(stderr, "%s needs an argument\n", str); \ - fprintf(stderr, usage); \ - exit(1); \ - } - - while (i < argc) { - if (!strcmp(argv[i], "-size")) { - check_arg(i, 1, "-size"); - opts.size = atoi(argv[++i]); - - } else if (!strcmp(argv[i], "-samples")) { - check_arg(i, 1, "-samples"); - opts.samples = atoi(argv[++i]); - - } else if (!strcmp(argv[i], "-out")) { - check_arg(i, 1, "-out"); - opts.outfile = stralloc(argv[++i]); - - } else if (!strcmp(argv[i], "-sphere")) { - opts.use_spheremap = 1; - - } else if (!strcmp(argv[i], "-cubemap")) { - int j; - check_arg(i, 6, "-cubemap"); - for (j = 0; j < 6; j++) - face[j].filename = stralloc(argv[++i]); - - } else if (!strcmp(argv[i], "-help")) { - fprintf(stderr, usage); - exit(0); - - } else if (!strcmp(argv[i], "-hw")) { - opts.hw = 1; - - } else { - if (opts.use_spheremap && !opts.spheremap_file) - opts.spheremap_file = stralloc(argv[i]); - else { - fprintf(stderr, "Error: unrecognized option %s\n", argv[i]); - fprintf(stderr, usage); - exit(1); - } - } - i++; - } /* end-while */ -} - -#ifdef use_copytex -static int currwidth = TEXSIZE; -static int currheight = TEXSIZE; -#else -static int currwidth = 400; -static int currheight = 400; -#endif - -static int do_spheremap = 0, do_alloc = 0; -static GLfloat rotv[] = -{0., 0., 0.}; -static GLfloat rots[] = -{0., 0., 0.}; -static GLfloat plane[4][3] = -{ - {1.0, -1.0, 0.0}, - {1.0, 1.0, 0.0}, - {-1.0, 1.0, 0.0}, - {-1.0, -1.0, 0.0} -}; - -static GLfloat cube[6][4][3] = -{ - { - {1.0, -1.0, -1.0}, /* counter-clockwise faces */ - {-1.0, -1.0, -1.0}, - {-1.0, 1.0, -1.0}, - {1.0, 1.0, -1.0} - }, - { - {1.0, -1.0, 1.0}, - {1.0, -1.0, -1.0}, - {1.0, 1.0, -1.0}, - {1.0, 1.0, 1.0} - }, - { - {-1.0, -1.0, 1.0}, - {1.0, -1.0, 1.0}, - {1.0, 1.0, 1.0}, - {-1.0, 1.0, 1.0} - }, - { - {-1.0, -1.0, -1.0}, - {-1.0, -1.0, 1.0}, - {-1.0, 1.0, 1.0}, - {-1.0, 1.0, -1.0} - }, - { - {1.0, 1.0, 1.0}, - {1.0, 1.0, -1.0}, - {-1.0, 1.0, -1.0}, - {-1.0, 1.0, 1.0} - }, - { - {1.0, -1.0, -1.0}, - {1.0, -1.0, 1.0}, - {-1.0, -1.0, 1.0}, - {-1.0, -1.0, -1.0} - } -}; - -static float norm[6][3] = -{ - {0.0, 0.0, -1.0}, - {1.0, 0.0, 0.0}, - {0.0, 0.0, 1.0}, - {-1.0, 0.0, 0.0}, - {0.0, 1.0, 0.0}, - {0.0, -1.0, 0.0} -}; - -void -reshape(int w, int h) -{ - currwidth = w; - currheight = h; - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(40.0, (GLfloat) w / (GLfloat) h, 1.0, 20.0); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - gluLookAt(0, 0, 6, - 0, 0, 0, - 0, 1, 0); -} - -/* ARGSUSED1 */ -void -keys(unsigned char key, int x, int y) -{ - switch (key) { - - case 'o': /* switch between objects */ - opts.object = (opts.object + 1) % NOBJS; - glutPostRedisplay(); - break; - - case '+': /* change tessellation */ - opts.tessellation += 2; - build_lists(); - glutPostRedisplay(); - break; - - case '-': - opts.tessellation -= 2; - if (opts.tessellation < 4) - opts.tessellation = 4; - build_lists(); - glutPostRedisplay(); - break; - - case 's': /* toggle between spheremap generation */ - /* mode and display mode */ - do_spheremap ^= 1; - if (!do_spheremap) /* switch back to normal mode */ - do_alloc = 1; - glutPostRedisplay(); - break; - - case 'h': - case 'H': - printf("\nKey functions\n"); - printf("\to: switch objects\n"); - printf("\ts: switch to spheremap generation mode\n"); - printf("\t+: increase tessellation\n"); - printf("\t-: decrease tessellation\n"); - printf("\th: help\n"); - printf("\tESC: quit\n"); - printf("\tleft/right arrow-keys: Rotate around X axis\n"); - printf("\tup/down arrow-keys: Rotate around Y axis\n"); - printf("\tpage-up/pgdown arrow-keys: Rotate around Z axis\n"); - break; - - case 27: - exit(0); - } -} - -/* ARGSUSED1 */ -void -special_keys(int key, int x, int y) -{ - GLfloat *vect; - - if (do_spheremap) - vect = rots; - else - vect = rotv; - - switch (key) { - case GLUT_KEY_LEFT: - vect[1] -= 0.5; - glutPostRedisplay(); - break; - case GLUT_KEY_RIGHT: - vect[1] += 0.5; - glutPostRedisplay(); - break; - case GLUT_KEY_UP: - vect[0] -= 0.5; - glutPostRedisplay(); - break; - case GLUT_KEY_DOWN: - vect[0] += 0.5; - glutPostRedisplay(); - break; - case GLUT_KEY_PAGE_UP: - vect[2] -= 0.5; - glutPostRedisplay(); - break; - case GLUT_KEY_PAGE_DOWN: - vect[2] += 0.5; - glutPostRedisplay(); - break; - } -} - -/* Use mouse buttons to generate spheremap on the fly while the objects are - being displayed. */ -static void -motion(int x, int y) -{ - rots[1] = 180.0 * x / currwidth - 90.0; - rots[0] = 180.0 * y / currheight - 90.0; -#ifdef use_copytex - if (!do_spheremap) - texture_init_from_spheremap(); -#endif - glutPostRedisplay(); -} - -void -menu(int value) -{ - keys((unsigned char) value, 0, 0); -} - -#if defined(GL_VERSION_1_1) - -static int -supportsOneDotOne(void) -{ - const char *version; - int major, minor; - - version = (char *) glGetString(GL_VERSION); - if (sscanf(version, "%d.%d", &major, &minor) == 2) - return major >= 1 && minor >= 1; - return 0; /* OpenGL version string malformed! */ -} - -#endif - -int -main(int argc, char *argv[]) -{ - int hasExtendedTextures; - - parse(argc, argv); - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); - glutInitWindowSize(currwidth, currheight); - glutCreateWindow("Environment map"); - -#if defined(GL_VERSION_1_1) - hasExtendedTextures = supportsOneDotOne(); - if(!hasExtendedTextures) { - fprintf(stderr, - "envmap: This example requires OpenGL 1.1.\n"); - exit(1); - } -#elif defined(GL_EXT_texture_object) && defined(GL_EXT_copy_texture) && defined(GL_EXT_subtexture) - hasExtendedTextures = glutExtensionSupported("GL_EXT_subtexture") - && glutExtensionSupported("GL_EXT_texture_object") - && glutExtensionSupported("GL_EXT_copy_texture"); - if(!hasExtendedTextures) { - fprintf(stderr, - "envmap: This example requires the OpenGL EXT_subtexture, EXT_texture_object, and EXT_copy_texture extensions.\n"); - exit(1); - } -#else - hasExtendedTextures = 0; - if(!hasExtendedTextures) { - fprintf(stderr, - "envmap: This example must be compiled with either OpenGL 1.1 or the OpenGL EXT_subtexture, EXT_texture_object, and EXT_copy_texture extensions.\n"); - exit(1); - } -#endif - - init(); - - glutReshapeFunc(reshape); - glutKeyboardFunc(keys); - glutSpecialFunc(special_keys); - if (opts.hw) - glutMotionFunc(motion); - glutDisplayFunc(display); - glutCreateMenu(menu); - glutAddMenuEntry("Switch object", 'o'); - glutAddMenuEntry("Up tessellation", '+'); - glutAddMenuEntry("Lower tessellation", '-'); - glutAddMenuEntry("Quit", 27); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} - -void -build_cube(void) -{ - int i; - - glNewList(LIST_BASE + OB_CUBE, GL_COMPILE); - for (i = 0; i < 6; i++) { - glBegin(GL_QUADS); - glNormal3fv(norm[i]); - glVertex3fv(cube[i][0]); - glVertex3fv(cube[i][1]); - glVertex3fv(cube[i][2]); - glVertex3fv(cube[i][3]); - glEnd(); - } - glEndList(); -} - -void -build_sphere(int tess) -{ - float r = 1.0, r1, r2, z1, z2; - float theta, phi; - int nlon = tess, nlat = tess; - int i, j; - - glNewList(LIST_BASE + OB_SPHERE, GL_COMPILE); - glBegin(GL_TRIANGLE_FAN); - theta = M_PI * 1.0 / nlat; - r2 = r * sin(theta); - z2 = r * cos(theta); - glNormal3f(0.0, 0.0, 1.0); - glVertex3f(0.0, 0.0, r); - for (j = 0, phi = 0.0; j <= nlon; j++, phi = 2 * M_PI * j / nlon) { - glNormal3f(r2 * cos(phi), r2 * sin(phi), z2); - glVertex3f(r2 * cos(phi), r2 * sin(phi), z2); /* top */ - } - glEnd(); - - for (i = 2; i < nlat; i++) { - theta = M_PI * i / nlat; - r1 = r * sin(M_PI * (i - 1) / nlat); - z1 = r * cos(M_PI * (i - 1) / nlat); - r2 = r * sin(theta); - z2 = r * cos(theta); - glBegin(GL_QUAD_STRIP); - for (j = 0, phi = 0; j <= nlat; j++, phi = 2 * M_PI * j / nlon) { - glNormal3f(r1 * cos(phi), r1 * sin(phi), z1); - glVertex3f(r1 * cos(phi), r1 * sin(phi), z1); - glNormal3f(r2 * cos(phi), r2 * sin(phi), z2); - glVertex3f(r2 * cos(phi), r2 * sin(phi), z2); - } - glEnd(); - } - - glBegin(GL_TRIANGLE_FAN); - theta = M_PI * (nlat - 1) / nlat; - r2 = r * sin(theta); - z2 = r * cos(theta); - glNormal3f(0.0, 0.0, -1.0); - glVertex3f(0.0, 0.0, -r); - for (j = nlon, phi = 0.0; j >= 0; j--, phi = 2 * M_PI * j / nlon) { - glNormal3f(r2 * cos(phi), r2 * sin(phi), z2); - glVertex3f(r2 * cos(phi), r2 * sin(phi), z2); /* bottom */ - } - glEnd(); - glEndList(); -} - -/* Same as above routine except that we use homogeneous co-ordinates. Each - component (including w) is multiplied by z */ -void -build_special_sphere(int tess) -{ - float r = 1.0, r1, r2, z1, z2; - float theta, phi; - int nlon = tess, nlat = tess; - int i, j; - - glNewList(LIST_BASE + OB_HSPHERE, GL_COMPILE); - glBegin(GL_TRIANGLE_FAN); - theta = M_PI * 1.0 / nlat; - r2 = r * sin(theta); - z2 = r * cos(theta); - glNormal3f(0.0, 0.0, 1.0); - glVertex4f(0.0, 0.0, r * r, r); - for (j = 0, phi = 0.0; j <= nlon; j++, phi = 2 * M_PI * j / nlon) { - glNormal3f(r2 * cos(phi), r2 * sin(phi), z2); - glVertex4f(r2 * cos(phi) * z2, r2 * sin(phi) * z2, z2 * z2, z2); /* top */ - } - glEnd(); - - for (i = 2; i < nlat; i++) { - theta = M_PI * i / nlat; - r1 = r * sin(M_PI * (i - 1) / nlat); - z1 = r * cos(M_PI * (i - 1) / nlat); - r2 = r * sin(theta); - z2 = r * cos(theta); - - if (fabs(z1) < 0.01 || fabs(z2) < 0.01) - break; - - glBegin(GL_QUAD_STRIP); - for (j = 0, phi = 0; j <= nlat; j++, phi = 2 * M_PI * j / nlon) { - glNormal3f(r1 * cos(phi), r1 * sin(phi), z1); - glVertex4f(r1 * cos(phi) * z1, r1 * sin(phi) * z1, z1 * z1, z1); - glNormal3f(r2 * cos(phi), r2 * sin(phi), z2); - glVertex4f(r2 * cos(phi) * z2, r2 * sin(phi) * z2, z2 * z2, z2); - } - glEnd(); - } - - glBegin(GL_TRIANGLE_FAN); - theta = M_PI * (nlat - 1) / nlat; - r2 = r * sin(theta); - z2 = r * cos(theta); - glNormal3f(0.0, 0.0, -1.0); - glVertex4f(0.0, 0.0, -r * -r, -r); - for (j = nlon, phi = 0.0; j >= 0; j--, phi = 2 * M_PI * j / nlon) { - glNormal3f(r2 * cos(phi), r2 * sin(phi), z2); - glVertex4f(r2 * cos(phi) * z2, r2 * sin(phi) * z2, z2 * z2, z2); /* bottom - - */ - } - glEnd(); - glEndList(); -} - -void -build_square(void) -{ - glNewList(LIST_BASE + OB_SQUARE, GL_COMPILE); - glBegin(GL_POLYGON); - glNormal3f(0.0, 0.0, 1.0); - glVertex3fv(plane[0]); - glVertex3fv(plane[1]); - glVertex3fv(plane[2]); - glVertex3fv(plane[3]); - glEnd(); - glEndList(); -} - -void -build_cylinder(int tess) -{ - int slices = tess, stacks = tess; - int i, j; - GLfloat phi, z1, r, z2; - - glNewList(LIST_BASE + OB_CYL, GL_COMPILE); - z1 = 2.0; - r = 1.0; - glBegin(GL_TRIANGLE_FAN); - glNormal3f(0.0, 0.0, 1.0); - glVertex3f(0.0, 0.0, z1); - for (i = 0; i <= slices; i++) { - phi = M_PI * 2.0 * i / slices; - glVertex3f(r * cos(phi), r * sin(phi), z1); - } - glEnd(); - - for (i = 0, z2 = 0.0, z1 = 2.0 / stacks; i < stacks; i++) { - glBegin(GL_QUAD_STRIP); - for (j = 0, phi = 0; j <= slices; j++, phi = M_PI * 2.0 * j / slices) { - glNormal3f(r * cos(phi), r * sin(phi), 0); - glVertex3f(r * cos(phi), r * sin(phi), z1); - glVertex3f(r * cos(phi), r * sin(phi), z2); - } - glEnd(); - z1 += 2.0 / stacks; - z2 += 2.0 / stacks; - } - - z2 = 0.0; - glBegin(GL_TRIANGLE_FAN); - glNormal3f(0.0, 0.0, -1.0); - glVertex3f(0.0, 0.0, z2); - for (i = slices; i >= 0; i--) { - phi = M_PI * 2.0 * i / slices; - glVertex3f(r * cos(phi), r * sin(phi), z2); - } - glEnd(); - glEndList(); -} - -void -build_torus(int tess) -{ - int i, j, k, l; - int numg = 1.2 * tess; - int nums = tess; - GLfloat x, y, z; - GLfloat theta, phi; - const GLfloat twopi = 2.0 * M_PI; - const GLfloat rg = 2.0, rs = 1.0; - - glNewList(LIST_BASE + OB_TORUS, GL_COMPILE); - for (i = 0; i < numg; i++) { - - glBegin(GL_QUAD_STRIP); - for (j = 0; j <= nums; j++) { - phi = twopi * j / nums; - - for (k = 0; k <= 1; k++) { - l = (i + k) % numg; - theta = twopi * l / numg; - - glNormal3f(rs * cos(phi) * cos(theta), - rs * cos(phi) * sin(theta), - rs * sin(phi)); - - x = (rg + rs * cos(phi)) * cos(theta); - y = (rg + rs * cos(phi)) * sin(theta); - z = rs * sin(phi); - glVertex3f(x, y, z); - } - } - glEnd(); - } - glEndList(); -} - -void -display(void) -{ - static int once = 0; - - if (!once && opts.hw) { - texture_init(); - once = 1; - } - if (do_spheremap || do_alloc) { - int w, h, comp; - if (do_alloc) { - texture_init(); - do_alloc = 0; - } else - render_spheremap(&w, &h, &comp, 0); - - } else { - - glPushMatrix(); - glBindTexture(GL_TEXTURE_2D, TOBJ_BASE + TDRAW); - glEnable(GL_DEPTH_TEST); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glRotatef(rotv[0], 1, 0, 0); - glRotatef(rotv[1], 0, 1, 0); - glRotatef(rotv[2], 0, 0, 1); - - switch (opts.object) { - - case OB_SQUARE: - case OB_CUBE: - case OB_SPHERE: - glCallList(LIST_BASE + opts.object); - break; - - case OB_CYL: - glTranslatef(0.0, 0.0, -1.0); - glCallList(LIST_BASE + OB_CYL); - break; - - case OB_TORUS: - glScalef(0.6, 0.6, 0.6); - glEnable(GL_NORMALIZE); - glCallList(LIST_BASE + OB_TORUS); - glDisable(GL_NORMALIZE); - break; - - default: - printf("Eh?\n"); - } - - glLineWidth(2.0); - glDisable(GL_DEPTH_TEST); - glDisable(GL_TEXTURE_2D); - glBegin(GL_LINES); - glColor3f(1.0, 0.0, 0.0); - glVertex3f(0.0, 0.0, 0.0); - glVertex3f(4.0, 0.0, 0.0); - - glColor3f(0.0, 1.0, 0.0); - glVertex3f(0.0, 0.0, 0.0); - glVertex3f(0.0, 4.0, 0.0); - - glColor3f(1.0, 1.0, 1.0); - glVertex3f(0.0, 0.0, 0.0); - glVertex3f(0.0, 0.0, 4.0); - glEnd(); - glEnable(GL_TEXTURE_2D); - glEnable(GL_DEPTH_TEST); - glPopMatrix(); - } - - glutSwapBuffers(); -} - -void -build_lists(void) -{ - build_square(); - build_cube(); - build_sphere(opts.tessellation); - build_cylinder(opts.tessellation); - build_torus(opts.tessellation); - build_special_sphere(opts.tessellation + 10); -} - -void -init(void) -{ - glEnable(GL_DEPTH_TEST); - glEnable(GL_CULL_FACE); - - glClearColor(0.0, 0.0, 0.0, 1.0); - build_lists(); - texture_init(); -} - -void -err(void) -{ - printf("error=%#x\n", glGetError()); -} - -/* Use projective textures to generate sphere-map */ -unsigned * -render_spheremap(int *width, int *height, - int *components, int doalloc) -{ - int i, j, k; - GLfloat p[4]; - static unsigned *spheremap = NULL; - static int texread_done = 0; - - if (!opts.hw) /* shouldn't come here */ - return NULL; - - for (i = 0; i < 6; i++) { - if (!texread_done) { - face[i].buf = read_texture(face[i].filename, &face[i].width, - &face[i].height, &face[i].components); - if (!face[i].buf) { - fprintf(stderr, "Error: cannot load image %s\n", face[i].filename); - exit(1); - } - for (j = 0; j < face[i].height; j++) /* texture border hack!! */ - for (k = 0; k < face[i].width; k++) - if (j < 1 || k < 1 || - j > face[i].height - 2 || k > face[i].width - 2) { - unsigned char *p = (unsigned char *) &face[i].buf[face[i].width * j + k]; - p[3] = 0; /* zero out alpha */ - } - } - glBindTexture(GL_TEXTURE_2D, TOBJ_BASE + i); - glEnable(GL_TEXTURE_2D); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - - glTexImage2D(GL_TEXTURE_2D, 0, 4, - face[i].width, face[i].height, 0, - GL_RGBA, GL_UNSIGNED_BYTE, face[i].buf); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); - - glTexGenf(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - - p[0] = 2.0; - p[1] = p[2] = p[3] = 0.0; /* 2zx */ - glTexGenfv(GL_S, GL_OBJECT_PLANE, p); - - glTexGenf(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - p[0] = 0.0; - p[1] = 2.0; - p[2] = p[3] = 0.0; /* 2zy */ - glTexGenfv(GL_T, GL_OBJECT_PLANE, p); - - glTexGenf(GL_R, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - p[0] = p[1] = 0.0; - p[2] = 0.0; - p[3] = 2.0; /* 2z */ - glTexGenfv(GL_R, GL_OBJECT_PLANE, p); - - glEnable(GL_TEXTURE_GEN_S); - glEnable(GL_TEXTURE_GEN_T); - glEnable(GL_TEXTURE_GEN_R); - } - - texread_done = 1; - - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glMatrixMode(GL_TEXTURE); - glPushMatrix(); - - glColor4f(1.0, 1.0, 1.0, 1.0); - - /* Initialize sphere-map colors, and viewing transformations */ - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho(-1, 1, -1, 1, 1.0, 100); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - gluLookAt(0, 0, 6, - 0, 0, 0, - 0, 1, 0); - - glEnable(GL_DEPTH_TEST); - glEnable(GL_CULL_FACE); - - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - - glClearColor(0.0, 0.0, 0.0, 1.0); - glClearDepth(1.0); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - /* Look at the sphere from the chosen viewing direction and render the - sphere at origin. */ - - for (i = 0; i < 6; i++) { /* for all faces */ - glBindTexture(GL_TEXTURE_2D, TOBJ_BASE + i); - - glMatrixMode(GL_TEXTURE); - glLoadIdentity(); - glScalef(0.5, 0.5, 1.0); - glTranslatef(1.0, 1.0, 0.0); - glFrustum(-1.01, 1.01, -1.01, 1.01, 1.0, 100.0); - if (face[i].angle2 != 0.) { - glRotatef(face[i].angle2, - face[i].axis2.x, face[i].axis2.y, face[i].axis2.z); - } - glRotatef(face[i].angle1, - face[i].axis1.x, face[i].axis1.y, face[i].axis1.z); - glRotatef(rots[0], 1, 0, 0); - glRotatef(rots[1], 0, 1, 0); - glRotatef(rots[2], 0, 0, 1); - glTranslatef(0.0, 0.0, -1.00); - - glMatrixMode(GL_MODELVIEW); - glClear(GL_DEPTH_BUFFER_BIT); - glCallList(LIST_BASE + OB_HSPHERE); - } - - glDisable(GL_BLEND); - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); - glMatrixMode(GL_TEXTURE); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - - if (doalloc) { - /* read in current image and return it to be used as the spheremap */ - unsigned *temp; - - temp = (unsigned *) - malloc(currwidth * currheight * sizeof(unsigned)); - spheremap = (unsigned *) - malloc(opts.size * opts.size * sizeof(unsigned)); - - glReadBuffer(GL_BACK); - glReadPixels(0, 0, currwidth, currheight, GL_RGBA, - GL_UNSIGNED_BYTE, temp); - gluScaleImage(GL_RGBA, - currwidth, currheight, GL_UNSIGNED_BYTE, temp, - opts.size, opts.size, GL_UNSIGNED_BYTE, spheremap); - free(temp); - } - *width = *height = opts.size; - *components = 4; - return (unsigned *) spheremap; -} - diff --git a/lib/glut-3.7.6/progs/advanced/envmap.dsp b/lib/glut-3.7.6/progs/advanced/envmap.dsp deleted file mode 100644 index 56bcf5d1d..000000000 --- a/lib/glut-3.7.6/progs/advanced/envmap.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="envmap" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=envmap - 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 "envmap.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 "envmap.mak" CFG="envmap - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "envmap - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "envmap - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "envmap - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "envmap - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "envmap - Win32 Release" -# Name "envmap - Win32 Debug" -# Begin Source File - -SOURCE=.\envmap.c -# End Source File -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# Begin Source File - -SOURCE=.\texture.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced/envphong.c b/lib/glut-3.7.6/progs/advanced/envphong.c deleted file mode 100644 index 07ab1c1f6..000000000 --- a/lib/glut-3.7.6/progs/advanced/envphong.c +++ /dev/null @@ -1,671 +0,0 @@ - -/* envphong.c - David G. Yu, SGI */ - -/** - ** Demonstrates a use of environment texture mapping for improved highlight - ** shading. - ** - ** Press mouse button one to move the object, press mouse button two to - ** move the light source. Pressing the key switches between using - ** regular lighting or texture mapping for the specular highlights. The - ** key will cycle through objects (sphere, cylinder, torus). Check - ** out the event loop code below for other keys which do will things. - ** - ** TBD - ** - improve accuracy of the highlight texture map - ** - reduce or eliminate grazing angle artifacts - ** - improve user interaction - ** - ** 1995 -- David G Yu - ** - ** cc -o envphong envphong.c -lglut -lGLU -lGL -lXmu -lXext -lX11 -lm - **/ - -#include -#include -#include -#include -#include - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -int win, win2; -int needsLightUpdate = GL_TRUE; -int useLighting = GL_TRUE; -int useSpecularTexture = GL_FALSE; -int useTexture = GL_FALSE; -int useHighRes = GL_FALSE; -int usePattern = GL_FALSE; -int moveLight = GL_FALSE; -int moveObject = GL_FALSE; -int drawObj = 0, maxObj = 2; -GLfloat lightRotX, lightRotY; -GLfloat objectRotX, objectRotY; -int curx, cury, width, height; - -void -drawSphere(int numMajor, int numMinor, float radius) -{ - double majorStep = (M_PI / numMajor); - double minorStep = (2.0 * M_PI / numMinor); - int i, j; - - for (i = 0; i < numMajor; ++i) { - double a = i * majorStep; - double b = a + majorStep; - double r0 = radius * sin(a); - double r1 = radius * sin(b); - GLfloat z0 = radius * cos(a); - GLfloat z1 = radius * cos(b); - - glBegin(GL_TRIANGLE_STRIP); - for (j = 0; j <= numMinor; ++j) { - double c = j * minorStep; - GLfloat x = cos(c); - GLfloat y = sin(c); - - glNormal3f((x * r0) / radius, (y * r0) / radius, z0 / radius); - glTexCoord2f(j / (GLfloat) numMinor, i / (GLfloat) numMajor); - glVertex3f(x * r0, y * r0, z0); - - glNormal3f((x * r1) / radius, (y * r1) / radius, z1 / radius); - glTexCoord2f(j / (GLfloat) numMinor, (i + 1) / (GLfloat) numMajor); - glVertex3f(x * r1, y * r1, z1); - } - glEnd(); - } -} - -void -drawCylinder(int numMajor, int numMinor, float height, float radius) -{ - double majorStep = height / numMajor; - double minorStep = 2.0 * M_PI / numMinor; - int i, j; - - for (i = 0; i < numMajor; ++i) { - GLfloat z0 = 0.5 * height - i * majorStep; - GLfloat z1 = z0 - majorStep; - - glBegin(GL_TRIANGLE_STRIP); - for (j = 0; j <= numMinor; ++j) { - double a = j * minorStep; - GLfloat x = radius * cos(a); - GLfloat y = radius * sin(a); - - glNormal3f(x / radius, y / radius, 0.0); - glTexCoord2f(j / (GLfloat) numMinor, i / (GLfloat) numMajor); - glVertex3f(x, y, z0); - - glNormal3f(x / radius, y / radius, 0.0); - glTexCoord2f(j / (GLfloat) numMinor, (i + 1) / (GLfloat) numMajor); - glVertex3f(x, y, z1); - } - glEnd(); - } -} - -void -drawTorus(int numMajor, int numMinor, float majorRadius, float minorRadius) -{ - double majorStep = 2.0 * M_PI / numMajor; - double minorStep = 2.0 * M_PI / numMinor; - int i, j; - - for (i = 0; i < numMajor; ++i) { - double a0 = i * majorStep; - double a1 = a0 + majorStep; - GLfloat x0 = cos(a0); - GLfloat y0 = sin(a0); - GLfloat x1 = cos(a1); - GLfloat y1 = sin(a1); - - glBegin(GL_TRIANGLE_STRIP); - for (j = 0; j <= numMinor; ++j) { - double b = j * minorStep; - GLfloat c = cos(b); - GLfloat r = minorRadius * c + majorRadius; - GLfloat z = minorRadius * sin(b); - - glNormal3f(x0 * c, y0 * c, z / minorRadius); - glTexCoord2f(i / (GLfloat) numMajor, j / (GLfloat) numMinor); - glVertex3f(x0 * r, y0 * r, z); - - glNormal3f(x1 * c, y1 * c, z / minorRadius); - glTexCoord2f((i + 1) / (GLfloat) numMajor, j / (GLfloat) numMinor); - glVertex3f(x1 * r, y1 * r, z); - } - glEnd(); - } -} - -void -setNullTexture(void) -{ - GLubyte texPixel[4] = - {0xff, 0xff, 0xff, 0xff}; - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexImage2D(GL_TEXTURE_2D, 0, 4, 1, 1, 0, - GL_RGBA, GL_UNSIGNED_BYTE, texPixel); -} - -void -setCheckTexture(void) -{ - int texWidth = 64; - int texHeight = 64; - GLubyte *texPixels, *p; - int i, j; - - texPixels = (GLubyte *) malloc(texWidth * texHeight * 4 * sizeof(GLubyte)); - if (texPixels == NULL) { - return; - } - p = texPixels; - for (i = 0; i < texHeight; ++i) { - for (j = 0; j < texWidth; ++j) { - if ((i ^ j) & 8) { - p[0] = 0xff; - p[1] = 0xff; - p[2] = 0xff; - p[3] = 0xff; - } else { - p[0] = 0x08; - p[1] = 0x08; - p[2] = 0x08; - p[3] = 0xff; - } - p += 4; - } - } - - glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_LINEAR); - glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - gluBuild2DMipmaps(GL_TEXTURE_2D, 4, texWidth, texHeight, - GL_RGBA, GL_UNSIGNED_BYTE, texPixels); - free(texPixels); -} - -void -setLight(void) -{ - GLfloat light0Pos[4] = - {0.70, 0.70, 1.25, 0.00}; - GLfloat light0Amb[4] = - {0.00, 0.00, 0.00, 1.00}; - GLfloat light0Diff[4] = - {1.00, 1.00, 1.00, 1.00}; - GLfloat light0Spec[4] = - {1.00, 1.00, 1.00, 1.00}; - GLfloat light0SpotDir[3] = - {0.00, 0.00, -1.00}; - GLfloat light0SpotExp = 0.00; - GLfloat light0SpotCutoff = 180.00; - GLfloat light0Atten0 = 1.00; - GLfloat light0Atten1 = 0.00; - GLfloat light0Atten2 = 0.00; - - glEnable(GL_LIGHT0); - glLightfv(GL_LIGHT0, GL_POSITION, light0Pos); - glLightfv(GL_LIGHT0, GL_AMBIENT, light0Amb); - glLightfv(GL_LIGHT0, GL_DIFFUSE, light0Diff); - glLightfv(GL_LIGHT0, GL_SPECULAR, light0Spec); - glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, light0SpotDir); - glLightf(GL_LIGHT0, GL_SPOT_EXPONENT, light0SpotExp); - glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, light0SpotCutoff); - glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, light0Atten0); - glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, light0Atten1); - glLightf(GL_LIGHT0, GL_QUADRATIC_ATTENUATION, light0Atten2); -} - -#define MAT_ALL 0 -#define MAT_NO_SPECULAR 1 -#define MAT_SPECULAR_ONLY 2 -#define MAT_SPECULAR_TEXTURE_ONLY 3 -#define MAT_GEN_SPECULAR_TEXTURE 4 - -void -setMaterial(int mode) -{ - static GLubyte *texPixels; - int texWidth = 128; - int texHeight = 128; - - GLfloat matZero[4] = - {0.00, 0.00, 0.00, 1.00}; - GLfloat matOne[4] = - {1.00, 1.00, 1.00, 1.00}; - GLfloat matEm[4] = - {0.00, 0.00, 0.00, 1.00}; - GLfloat matAmb[4] = - {0.01, 0.01, 0.01, 1.00}; - GLfloat matDiff[4] = - {0.02, 0.20, 0.16, 1.00}; - GLfloat matSpec[4] = - {0.50, 0.50, 0.50, 1.00}; - GLfloat matShine = 20.00; - - if ((mode == MAT_ALL) || (mode == MAT_NO_SPECULAR)) { - glMaterialfv(GL_FRONT, GL_EMISSION, matEm); - glMaterialfv(GL_FRONT, GL_AMBIENT, matAmb); - glMaterialfv(GL_FRONT, GL_DIFFUSE, matDiff); - } else { - glMaterialfv(GL_FRONT, GL_EMISSION, matZero); - glMaterialfv(GL_FRONT, GL_AMBIENT, matZero); - glMaterialfv(GL_FRONT, GL_DIFFUSE, matZero); - } - - if ((mode == MAT_ALL) || (mode == MAT_SPECULAR_ONLY)) { - glMaterialfv(GL_FRONT, GL_SPECULAR, matSpec); - glMaterialf(GL_FRONT, GL_SHININESS, matShine); - } else { - glMaterialfv(GL_FRONT, GL_SPECULAR, matZero); - glMaterialf(GL_FRONT, GL_SHININESS, 1); - } - - if (mode == MAT_SPECULAR_TEXTURE_ONLY) { - if (texPixels == NULL) { - return; - } - glMaterialfv(GL_FRONT, GL_SPECULAR, matOne); - glMaterialf(GL_FRONT, GL_SHININESS, 0); - - glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_LINEAR); - glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); - gluBuild2DMipmaps(GL_TEXTURE_2D, 4, texWidth, texHeight, - GL_RGBA, GL_UNSIGNED_BYTE, texPixels); - } - if (mode == MAT_GEN_SPECULAR_TEXTURE) { - if (texPixels == NULL) { - texPixels = (GLubyte *) - malloc(texWidth * texHeight * 4 * sizeof(GLubyte)); - if (texPixels == NULL) { - return; - } - } - glPushAttrib(GL_ALL_ATTRIB_BITS); - - glClearColor(0.0, 0.0, 0.0, 1.0); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - setMaterial(MAT_SPECULAR_ONLY); - - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - glOrtho(-1, 1, -1, 1, 1, 3); - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); - glTranslatef(0, 0, -2); - - glPushMatrix(); - glRotatef(lightRotY, 0, 1, 0); - glRotatef(lightRotX, 1, 0, 0); - setLight(); - glPopMatrix(); - - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - - glViewport(0, 0, 128, 128); - glClearColor(.25, .25, .25, .25); - glClear(GL_COLOR_BUFFER_BIT); - drawSphere(128, 128, 1.0); - - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); - - glReadPixels(0, 0, texWidth, texHeight, - GL_RGBA, GL_UNSIGNED_BYTE, texPixels); - - glPopAttrib(); - } -} - -void -initialize(void) -{ - glMatrixMode(GL_PROJECTION); - glFrustum(-0.50, 0.50, -0.50, 0.50, 1.0, 3.0); - glMatrixMode(GL_MODELVIEW); - glTranslatef(0.0, 0.0, -2.0); - - glDepthFunc(GL_LEQUAL); - - glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE); -} - -void -redraw(void) -{ - glClearColor(0.1, 0.1, 0.1, 1.0); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glBegin(GL_QUADS); - glColor3f(0.9, 0.0, 1.0); - glVertex3f(-2.0, -2.0, -1.0); - glColor3f(0.9, 0.0, 1.0); - glVertex3f(2.0, -2.0, -1.0); - glColor3f(0.0, 0.1, 0.1); - glVertex3f(2.0, 2.0, -1.0); - glColor3f(0.0, 0.1, 0.1); - glVertex3f(-2.0, 2.0, -1.0); - glEnd(); - - glEnable(GL_DEPTH_TEST); - - if (useLighting) { - glEnable(GL_LIGHTING); - glPushMatrix(); - glRotatef(lightRotY, 0, 1, 0); - glRotatef(lightRotX, 1, 0, 0); - setLight(); - glPopMatrix(); - } else { - glColor3f(0.2, 0.2, 0.2); - } - if (useTexture || useSpecularTexture) { - glEnable(GL_TEXTURE_2D); - } - if (useTexture) { - setCheckTexture(); - } else { - setNullTexture(); - } - if (useSpecularTexture) { - /* pass one */ - glEnable(GL_BLEND); - glBlendFunc(GL_ONE, GL_ZERO); - setMaterial(MAT_NO_SPECULAR); - } else { - setMaterial(MAT_ALL); - } - glPushMatrix(); - glRotatef(objectRotY, 0, 1, 0); - glRotatef(objectRotX, 1, 0, 0); - if (useHighRes) { - switch (drawObj) { - case 0: - drawSphere(64, 64, 0.8); - break; - case 1: - drawCylinder(32, 64, 1.0, 0.4); - break; - case 2: - drawTorus(64, 64, 0.6, 0.2); - break; - default: - break; - } - } else { - switch (drawObj) { - case 0: - drawSphere(16, 32, 0.8); - break; - case 1: - drawCylinder(6, 16, 1.0, 0.4); - break; - case 2: - drawTorus(32, 16, 0.6, 0.2); - break; - default: - break; - } - } - glPopMatrix(); - - if (useSpecularTexture) { - /* pass two */ - if (!useLighting) { - glColor3f(1.0, 1.0, 1.0); - } - glBlendFunc(GL_ONE, GL_ONE); - glEnable(GL_TEXTURE_GEN_S); - glEnable(GL_TEXTURE_GEN_T); - glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); - glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); - - setMaterial(MAT_SPECULAR_TEXTURE_ONLY); - glPushMatrix(); - glRotatef(objectRotY, 0, 1, 0); - glRotatef(objectRotX, 1, 0, 0); - if (useHighRes) { - switch (drawObj) { - case 0: - drawSphere(64, 64, 0.8); - break; - case 1: - drawCylinder(32, 64, 1.0, 0.4); - break; - case 2: - drawTorus(64, 64, 0.6, 0.2); - break; - default: - break; - } - } else { - switch (drawObj) { - case 0: - drawSphere(16, 32, 0.8); - break; - case 1: - drawCylinder(6, 16, 1.0, 0.4); - break; - case 2: - drawTorus(32, 16, 0.6, 0.2); - break; - default: - break; - } - } - glPopMatrix(); - } - glDisable(GL_DEPTH_TEST); - glDisable(GL_LIGHTING); - glDisable(GL_TEXTURE_2D); - glDisable(GL_BLEND); - glDisable(GL_TEXTURE_GEN_S); - glDisable(GL_TEXTURE_GEN_T); -} - -void -checkErrors(void) -{ - GLenum error; - while ((error = glGetError()) != GL_NO_ERROR) { - fprintf(stderr, "Error: %s\n", (char *) gluErrorString(error)); - } -} - -void -usage(char *name) -{ - fprintf(stderr, "\n"); - fprintf(stderr, "usage: %s [ options ]\n", name); - fprintf(stderr, "\n"); - fprintf(stderr, " Options:\n"); - fprintf(stderr, " none\n"); - fprintf(stderr, "\n"); -} - -void -help(void) -{ - printf("'h' - help\n"); - printf("'l' - toggle lighting\n"); - printf("'o' - switch objects\n"); - printf("'r' - toggle resolution\n"); - printf("'s' - toggle two pass lighting\n"); - printf("'t' - toggle texturing\n"); - printf("left mouse - move object\n"); - printf("middle mouse - move light\n"); -} - -void -motion(int x, int y) -{ - if (moveLight || moveObject) { - GLfloat dx = (y - cury) * 360.0 / height; - GLfloat dy = (x - curx) * 360.0 / width; - if (moveLight) { - lightRotX += dx; - if (lightRotX > 360) - lightRotX -= 360; - if (lightRotX < 0) - lightRotX += 360; - lightRotY += dy; - if (lightRotY > 360) - lightRotY -= 360; - if (lightRotY < 0) - lightRotY += 360; - needsLightUpdate = GL_TRUE; - } else if (moveObject) { - objectRotX += dx; - if (objectRotX > 360) - objectRotX -= 360; - if (objectRotX < 0) - objectRotX += 360; - objectRotY += dy; - if (objectRotY > 360) - objectRotY -= 360; - if (objectRotY < 0) - objectRotY += 360; - } - curx = x; - cury = y; - } - glutPostRedisplay(); -} - -void -mouse(int button, int state, int x, int y) -{ - if (state == GLUT_DOWN) { - switch (button) { - case GLUT_LEFT_BUTTON: - moveObject = GL_TRUE; - motion(curx = x, cury = y); - break; - case GLUT_MIDDLE_BUTTON: - moveLight = GL_TRUE; - motion(curx = x, cury = y); - break; - } - } else if (state == GLUT_UP) { - switch (button) { - case GLUT_LEFT_BUTTON: - moveObject = GL_FALSE; - break; - case GLUT_MIDDLE_BUTTON: - moveLight = GL_FALSE; - break; - } - } -} - -void -display(void) -{ - if (useSpecularTexture && needsLightUpdate) { - setMaterial(MAT_GEN_SPECULAR_TEXTURE); - needsLightUpdate = GL_FALSE; - } - redraw(); - glFlush(); - glutSwapBuffers(); - checkErrors(); -} - -void -reshape(int w, int h) -{ - glViewport(0, 0, width = w, height = h); -} - -/* ARGSUSED1 */ -void -key(unsigned char key, int x, int y) -{ - switch (key) { - case 'h': - help(); - break; - case ' ': - break; - case 'l': - useLighting = !useLighting; - break; - case 's': - useSpecularTexture = !useSpecularTexture; - needsLightUpdate = GL_TRUE; - break; - case 't': - useTexture = !useTexture; - break; - case 'r': - useHighRes = !useHighRes; - break; - case 'o': - ++drawObj; - if (drawObj > maxObj) - drawObj = 0; - break; - case '\033': - exit(0); - } - glutPostRedisplay(); -} - -/* ARGSUSED1 */ -void -domenu(int value) -{ - key((unsigned char) value, 0, 0); -} - -int -main(int argc, char **argv) -{ - int i; - - glutInit(&argc, argv); - glutInitWindowSize(width = 300, height = 300); - glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE); - - for (i = 1; i < argc; ++i) { - usage(argv[0]); - exit(1); - } - win = glutCreateWindow("envphong"); - glutDisplayFunc(display); - glutKeyboardFunc(key); - glutReshapeFunc(reshape); - glutMouseFunc(mouse); - glutMotionFunc(motion); - glutCreateMenu(domenu); - glutAddMenuEntry("Toggle lighting", 'l'); - glutAddMenuEntry("Toggle checker texture", 't'); - glutAddMenuEntry("Toggle two-pass textured specular", 's'); - glutAddMenuEntry("Toggle object resolution", 'r'); - glutAddMenuEntry("Switch object", 'o'); - glutAddMenuEntry("Print help", 'h'); - glutAttachMenu(GLUT_RIGHT_BUTTON); - initialize(); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/advanced/envphong.dsp b/lib/glut-3.7.6/progs/advanced/envphong.dsp deleted file mode 100644 index df4a2d73a..000000000 --- a/lib/glut-3.7.6/progs/advanced/envphong.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="envphong" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=envphong - 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 "envphong.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 "envphong.mak" CFG="envphong - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "envphong - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "envphong - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "envphong - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "envphong - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "envphong - Win32 Release" -# Name "envphong - Win32 Debug" -# Begin Source File - -SOURCE=.\envphong.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced/field.c b/lib/glut-3.7.6/progs/advanced/field.c deleted file mode 100644 index 1019bd569..000000000 --- a/lib/glut-3.7.6/progs/advanced/field.c +++ /dev/null @@ -1,258 +0,0 @@ - -/* field.c - by Tom McReynolds, SGI */ - -/* Using the accumulation buffer for depth of field (camera focus blur). */ - -#include -#include -#include - -const GLdouble FRUSTDIM = 100.f; -const GLdouble FRUSTNEAR = 320.f; -const GLdouble FRUSTFAR = 660.f; - -/* -** Create a single component texture map -*/ -GLfloat *make_texture(int maxs, int maxt) -{ - int s, t; - static GLfloat *texture; - - texture = (GLfloat *)malloc(maxs * maxt * sizeof(GLfloat)); - for(t = 0; t < maxt; t++) { - for(s = 0; s < maxs; s++) { - texture[s + maxs * t] = ((s >> 4) & 0x1) ^ ((t >> 4) & 0x1); - } - } - return texture; -} - -enum {SPHERE = 1, CONE}; - -void -render(void) -{ - /* material properties for objects in scene */ - static GLfloat wall_mat[] = {1.f, 1.f, 1.f, 1.f}; - - glClear(GL_DEPTH_BUFFER_BIT|GL_COLOR_BUFFER_BIT); - - /* - ** Note: wall verticies are ordered so they are all front facing - ** this lets me do back face culling to speed things up. - */ - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, wall_mat); - - /* floor */ - /* make the floor textured */ - glEnable(GL_TEXTURE_2D); - - /* - ** Since we want to turn texturing on for floor only, we have to - ** make floor a separate glBegin()/glEnd() sequence. You can't - ** turn texturing on and off between begin and end calls - */ - glBegin(GL_QUADS); - glNormal3f(0.f, 1.f, 0.f); - glTexCoord2i(0, 0); - glVertex3f(-100.f, -100.f, -320.f); - glTexCoord2i(1, 0); - glVertex3f( 100.f, -100.f, -320.f); - glTexCoord2i(1, 1); - glVertex3f( 100.f, -100.f, -640.f); - glTexCoord2i(0, 1); - glVertex3f(-100.f, -100.f, -640.f); - glEnd(); - - glDisable(GL_TEXTURE_2D); - - /* walls */ - - glBegin(GL_QUADS); - /* left wall */ - glNormal3f(1.f, 0.f, 0.f); - glVertex3f(-100.f, -100.f, -320.f); - glVertex3f(-100.f, -100.f, -640.f); - glVertex3f(-100.f, 100.f, -640.f); - glVertex3f(-100.f, 100.f, -320.f); - - /* right wall */ - glNormal3f(-1.f, 0.f, 0.f); - glVertex3f( 100.f, -100.f, -320.f); - glVertex3f( 100.f, 100.f, -320.f); - glVertex3f( 100.f, 100.f, -640.f); - glVertex3f( 100.f, -100.f, -640.f); - - /* ceiling */ - glNormal3f(0.f, -1.f, 0.f); - glVertex3f(-100.f, 100.f, -320.f); - glVertex3f(-100.f, 100.f, -640.f); - glVertex3f( 100.f, 100.f, -640.f); - glVertex3f( 100.f, 100.f, -320.f); - - /* back wall */ - glNormal3f(0.f, 0.f, 1.f); - glVertex3f(-100.f, -100.f, -640.f); - glVertex3f( 100.f, -100.f, -640.f); - glVertex3f( 100.f, 100.f, -640.f); - glVertex3f(-100.f, 100.f, -640.f); - glEnd(); - - - glPushMatrix(); - glTranslatef(-80.f, -60.f, -420.f); - glCallList(SPHERE); - glPopMatrix(); - - - glPushMatrix(); - glTranslatef(-20.f, -80.f, -600.f); - glCallList(CONE); - glPopMatrix(); - - if(glGetError()) /* to catch programming errors; should never happen */ - printf("Oops! I screwed up my OpenGL calls somewhere\n"); - - glFlush(); /* high end machines may need this */ -} - -enum {NONE, FIELD}; - -int rendermode = NONE; - -void -menu(int selection) -{ - rendermode = selection; - glutPostRedisplay(); -} - -GLdouble focus = 420.; - -/* Called when window needs to be redrawn */ -void redraw(void) -{ - int i, j; - int min, max; - int count; - GLfloat scale, dx, dy; - - switch(rendermode) { - case NONE: - glLoadIdentity(); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glFrustum(-FRUSTDIM, FRUSTDIM, -FRUSTDIM, FRUSTDIM, FRUSTNEAR, FRUSTFAR); - glMatrixMode(GL_MODELVIEW); - render(); - break; - case FIELD: - min = -2; - max = -min + 1; - count = -2 * min + 1; - count *= count; - - scale = 2.f; - - glClear(GL_ACCUM_BUFFER_BIT); - - for(j = min; j < max; j++) { - for(i = min; i < max; i++) { - dx = scale * i * FRUSTNEAR/focus; - dy = scale * j * FRUSTNEAR/focus; - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glFrustum(-FRUSTDIM + dx, - FRUSTDIM + dx, - -FRUSTDIM + dy, - FRUSTDIM + dy, - FRUSTNEAR, - FRUSTFAR); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(scale * i, scale * j, 0.f); - render(); - glAccum(GL_ACCUM, 1.f/count); - } - } - glAccum(GL_RETURN, 1.f); - break; - } - - glutSwapBuffers(); -} - -/* ARGSUSED1 */ -void key(unsigned char key, int x, int y) -{ - if(key == '\033') - exit(0); -} - - -const int TEXDIM = 256; -/* Parse arguments, and set up interface between OpenGL and window system */ -int -main(int argc, char *argv[]) -{ - GLfloat *tex; - static GLfloat lightpos[] = {50.f, 50.f, -320.f, 1.f}; - static GLfloat sphere_mat[] = {1.f, .5f, 0.f, 1.f}; - static GLfloat cone_mat[] = {0.f, .5f, 1.f, 1.f}; - GLUquadricObj *sphere, *cone, *base; - - glutInit(&argc, argv); - glutInitWindowSize(512, 512); - glutInitDisplayMode(GLUT_RGBA|GLUT_DEPTH|GLUT_ACCUM|GLUT_DOUBLE); - (void)glutCreateWindow("depth of field"); - glutDisplayFunc(redraw); - glutKeyboardFunc(key); - - glutCreateMenu(menu); - glutAddMenuEntry("Normal", NONE); - glutAddMenuEntry("Depth of Field", FIELD); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - /* turn on features */ - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - - /* place light 0 in the right place */ - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - - /* remove back faces to speed things up */ - glCullFace(GL_BACK); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - - glNewList(SPHERE, GL_COMPILE); - /* make display lists for sphere and cone; for efficiency */ - sphere = gluNewQuadric(); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, sphere_mat); - gluSphere(sphere, 20.f, 20, 20); - gluDeleteQuadric(sphere); - glEndList(); - - glNewList(CONE, GL_COMPILE); - cone = gluNewQuadric(); - base = gluNewQuadric(); - glRotatef(-90.f, 1.f, 0.f, 0.f); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, cone_mat); - gluDisk(base, 0., 20., 20, 1); - gluCylinder(cone, 20., 0., 60., 20, 20); - gluDeleteQuadric(cone); - gluDeleteQuadric(base); - glEndList(); - - /* load pattern for current 2d texture */ - tex = make_texture(TEXDIM, TEXDIM); - glTexImage2D(GL_TEXTURE_2D, 0, 1, TEXDIM, TEXDIM, 0, GL_RED, GL_FLOAT, tex); - free(tex); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} - diff --git a/lib/glut-3.7.6/progs/advanced/field.dsp b/lib/glut-3.7.6/progs/advanced/field.dsp deleted file mode 100644 index df5cd253f..000000000 --- a/lib/glut-3.7.6/progs/advanced/field.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="field" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=field - 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 "field.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 "field.mak" CFG="field - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "field - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "field - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "field - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "field - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "field - Win32 Release" -# Name "field - Win32 Debug" -# Begin Source File - -SOURCE=.\field.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced/genmipmap.c b/lib/glut-3.7.6/progs/advanced/genmipmap.c deleted file mode 100644 index 4eb49765c..000000000 --- a/lib/glut-3.7.6/progs/advanced/genmipmap.c +++ /dev/null @@ -1,192 +0,0 @@ - -/* genmipmap.c - by David Blythe, SGI */ - -/* Example of how to generate texture mipmap levels with the - accumulation buffer. */ - -/* Usage example: genmipmap [file.rgb] */ - -#include -#include -#include -#include -#include "texture.h" - -static int w = 512, h = 512; -static int pause; - -void -reshape(int w, int h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho(0, w, 0, h, -1, 1); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -void -init_textures(char *filename) -{ - unsigned *buf; - int width, height, components; - - if (filename) { - buf = read_texture(filename, &width, &height, &components); - if (buf == NULL) { - fprintf(stderr, "Error: Can't load image file \"%s\".\n", - filename); - exit(1); - } else { - printf("%d x %d texture loaded\n", width, height); - } - } else { - int i, j; - GLubyte *p; - components = 4; - width = height = 512; - buf = (unsigned *) malloc(width * height * sizeof(unsigned)); - p = (GLubyte *) buf; - for (j = 0; j < height; j++) { - for (i = 0; i < width; i++) { - if (i & 1) - p[4 * (i + j * width) + 0] = 0xff; - else - p[4 * (i + j * width) + 1] = 0xff; - if (j & 1) - p[4 * (i + j * width) + 2] = 0xff; - } - } - } - - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexImage2D(GL_TEXTURE_2D, 0, components, width, - height, 0, GL_RGBA, GL_UNSIGNED_BYTE, - buf); - free(buf); -} - -void -init(char *filename) -{ - glEnable(GL_TEXTURE_2D); - init_textures(filename); -} - -void -draw_rect(int w, int h) -{ - glBegin(GL_QUADS); - glTexCoord2f(0, 0); - glVertex2f(0, 0); - glTexCoord2f(1, 0); - glVertex2f(w, 0); - glTexCoord2f(1, 1); - glVertex2f(w, h); - glTexCoord2f(0, 1); - glVertex2f(0, h); - glEnd(); -} - -void -stop(void) -{ - if (pause) { - printf("? "); - fflush(stdout); - getchar(); - } -} - -void -acfilter(int width, int height) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_ACCUM_BUFFER_BIT); - glMatrixMode(GL_TEXTURE); - - if (pause) { - draw_rect(width, height); - stop(); - glClear(GL_COLOR_BUFFER_BIT); - } - draw_rect(width / 2, height / 2); - stop(); - glAccum(GL_ACCUM, 0.25); - - glTranslatef(1.0 / width, 0, 0); - draw_rect(width / 2, height / 2); - stop(); - glAccum(GL_ACCUM, 0.25); - - glLoadIdentity(); - glTranslatef(0, 1.0 / height, 0); - draw_rect(width / 2, height / 2); - stop(); - glAccum(GL_ACCUM, 0.25); - - glLoadIdentity(); - glTranslatef(1.0 / width, 1.0 / height, 0); - draw_rect(width / 2, height / 2); - stop(); - glAccum(GL_ACCUM, 0.25); - - glAccum(GL_RETURN, 1.0); - glMatrixMode(GL_MODELVIEW); -} - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - draw_rect(w, h); - acfilter(w, h); - glFlush(); -} - -void -help(void) -{ - printf("'h' - help\n"); - printf("'s' - toggle single step mode\n"); -} - -/* ARGSUSED1 */ -void -key(unsigned char key, int x, int y) -{ - switch (key) { - case 'h': - help(); - break; - case 's': - pause ^= 1; - break; - case '\033': - exit(0); - break; - default: - glutPostRedisplay(); - } -} - -int -main(int argc, char *argv[]) -{ - glutInit(&argc, argv); - glutInitWindowSize(w, h); - glutInitDisplayMode(GLUT_RGBA | GLUT_ACCUM); - (void) glutCreateWindow("genmipmap"); - if (argc > 1) - init(argv[1]); - else - init(0); - glutDisplayFunc(display); - glutKeyboardFunc(key); - glutReshapeFunc(reshape); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/advanced/genmipmap.dsp b/lib/glut-3.7.6/progs/advanced/genmipmap.dsp deleted file mode 100644 index 81f0a44ca..000000000 --- a/lib/glut-3.7.6/progs/advanced/genmipmap.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="genmipmap" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=genmipmap - 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 "genmipmap.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 "genmipmap.mak" CFG="genmipmap - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "genmipmap - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "genmipmap - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "genmipmap - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "genmipmap - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "genmipmap - Win32 Release" -# Name "genmipmap - Win32 Debug" -# Begin Source File - -SOURCE=.\genmipmap.c -# End Source File -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# Begin Source File - -SOURCE=.\texture.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced/haloed.c b/lib/glut-3.7.6/progs/advanced/haloed.c deleted file mode 100644 index 211b47cc6..000000000 --- a/lib/glut-3.7.6/progs/advanced/haloed.c +++ /dev/null @@ -1,274 +0,0 @@ - -/* haloed.c - by Tom McReynolds, SGI */ - -/* Draw haloed lines. */ - -#include -#include -#include -#include - -enum {CONE = 1}; - -/* Draw a cone */ -void -cone(void) -{ - glPushMatrix(); - glTranslatef(0.f, 0.f, -30.f); - glCallList(CONE); - glPopMatrix(); -} - -/* Draw a torus */ -void -torus(void) -{ - glutSolidTorus(10., 20., 16, 16); -} - -enum {FILL, WIRE, HALO, OFFSET_HALO, BACKFACE_HALO, TOGGLE}; - -int rendermode = FILL; - -void (*curobj)(void) = cone; - -void -menu(int mode) -{ - if(mode == TOGGLE) - if(curobj == cone) - curobj = torus; - else - curobj = cone; - else - rendermode = mode; - glutPostRedisplay(); -} - -int winWidth = 512; -int winHeight = 512; - -/* used to get current width and height of viewport */ -void -reshape(int wid, int ht) -{ - glViewport(0, 0, wid, ht); - winWidth = wid; - winHeight = ht; -} - -GLfloat viewangle; - - -void -redraw(void) -{ - /* clear stencil each time */ - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT); - - glPushMatrix(); - glRotatef(viewangle, 0.f, 1.f, 0.f); - - switch(rendermode) { - case FILL: - curobj(); - break; - case WIRE: - glDisable(GL_DEPTH_TEST); - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - glLineWidth(3.f); - curobj(); - glLineWidth(1.f); - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - glEnable(GL_DEPTH_TEST); - break; - case HALO: - /* draw wide lines into depth buffer */ - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); - glLineWidth(9.f); - curobj(); - - /* draw narrow lines into color with depth test on */ - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - glLineWidth(3.f); - glDepthFunc(GL_LEQUAL); - curobj(); - glDepthFunc(GL_LESS); - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - glLineWidth(1.f); - break; - case OFFSET_HALO: - /* draw wide lines into depth buffer */ - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); - glLineWidth(9.f); - curobj(); - - /* draw narrow lines into color with depth test on */ - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - glLineWidth(3.f); -#if GL_EXT_polygon_offset - glEnable(GL_POLYGON_OFFSET_EXT); - glPolygonOffsetEXT(-.5f, -.02f); -#endif - glDepthFunc(GL_LEQUAL); - curobj(); - glDepthFunc(GL_LESS); -#if GL_EXT_polygon_offset - glDisable(GL_POLYGON_OFFSET_EXT); -#endif - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - glLineWidth(1.f); - break; - case BACKFACE_HALO: /* cheat: only works on single non-intersecting obj */ - /* draw wide lines into depth buffer */ - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - glEnable(GL_CULL_FACE); - glCullFace(GL_FRONT); - glLineWidth(3.f); - - curobj(); - - /* mask out borders of objects with wide gray lines */ - glCullFace(GL_BACK); - glLineWidth(9.f); - glDisable(GL_LIGHTING); - glColor3f(.7f, .7f, .7f); - - curobj(); - - /* draw front face narrow lines without depth test */ - glEnable(GL_LIGHTING); - glLineWidth(3.f); - glDisable(GL_DEPTH_TEST); - - curobj(); - - /* clean up */ - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - glEnable(GL_DEPTH_TEST); - glDisable(GL_CULL_FACE); - glLineWidth(1.f); - break; - } - - glPopMatrix(); - glutSwapBuffers(); - - if(glGetError()) - printf("oops! Bad gl command!\n"); -} - -/* animate scene by rotating */ -enum {ANIM_LEFT, ANIM_RIGHT}; -int animDirection = ANIM_LEFT; - -void anim(void) -{ - if(animDirection == ANIM_LEFT) - viewangle -= 1.f; - else - viewangle += 1.f; - glutPostRedisplay(); -} - -/* ARGSUSED1 */ -/* special keys, like array and F keys */ -void special(int key, int x, int y) -{ - switch(key) { - case GLUT_KEY_LEFT: - glutIdleFunc(anim); - animDirection = ANIM_LEFT; - break; - case GLUT_KEY_RIGHT: - glutIdleFunc(anim); - animDirection = ANIM_RIGHT; - break; - case GLUT_KEY_UP: - case GLUT_KEY_DOWN: - glutIdleFunc(0); - break; - } -} - -/* ARGSUSED1 */ -void -key(unsigned char key, int x, int y) -{ - switch(key) { - case 'a': - viewangle -= 10.f; - glutPostRedisplay(); - break; - case 's': - viewangle += 10.f; - glutPostRedisplay(); - break; - case '\033': - exit(0); - } -} - - -int picked_object; -int xpos = 0, ypos = 0; -int newxpos, newypos; -int startx, starty; - -int -main(int argc, char **argv) -{ - static GLfloat lightpos[] = {25.f, 50.f, -50.f, 1.f}; - static GLfloat cone_mat[] = {0.f, .5f, 1.f, 1.f}; - GLUquadricObj *cone, *base; - - glutInit(&argc, argv); - glutInitWindowSize(512, 512); - glutInitDisplayMode(GLUT_STENCIL|GLUT_DEPTH|GLUT_DOUBLE); - (void)glutCreateWindow("haloed lines"); - glutDisplayFunc(redraw); - glutKeyboardFunc(key); - glutSpecialFunc(special); - - glutCreateMenu(menu); - glutAddMenuEntry("Filled Object", FILL); - glutAddMenuEntry("Wireframe", WIRE); - glutAddMenuEntry("Haloed Wireframe", HALO); - glutAddMenuEntry("Pgon Offset Haloed Wireframe", OFFSET_HALO); - glutAddMenuEntry("Backface Haloed Wireframe", BACKFACE_HALO); - glutAddMenuEntry("Toggle Object", TOGGLE); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - - glClearColor(.7f, .7f, .7f, .7f); - - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); - - - /* make display list for cone; for efficiency */ - - glNewList(CONE, GL_COMPILE); - cone = gluNewQuadric(); - base = gluNewQuadric(); - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, cone_mat); - gluQuadricOrientation(base, GLU_INSIDE); - gluDisk(base, 0., 25., 8, 1); - gluCylinder(cone, 25., 0., 60., 8, 8); - gluDeleteQuadric(cone); - gluDeleteQuadric(base); - glEndList(); - - glMatrixMode(GL_PROJECTION); - glOrtho(-50., 50., -50., 50., -50., 50.); - glMatrixMode(GL_MODELVIEW); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/advanced/haloed.dsp b/lib/glut-3.7.6/progs/advanced/haloed.dsp deleted file mode 100644 index af24378b1..000000000 --- a/lib/glut-3.7.6/progs/advanced/haloed.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="haloed" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=haloed - 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 "haloed.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 "haloed.mak" CFG="haloed - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "haloed - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "haloed - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "haloed - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "haloed - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "haloed - Win32 Release" -# Name "haloed - Win32 Debug" -# Begin Source File - -SOURCE=.\haloed.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced/hello2rts.c b/lib/glut-3.7.6/progs/advanced/hello2rts.c deleted file mode 100644 index 6bc26c601..000000000 --- a/lib/glut-3.7.6/progs/advanced/hello2rts.c +++ /dev/null @@ -1,636 +0,0 @@ - -/* 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. */ - -/* This code demonstrates use of the OpenGL Real-time Shadowing (RTS) - routines. The program renders two objects with two light sources in a - scene with several other walls and curved surfaces. Objects cast shadows - on the walls and curved surfaces as well as each other. The shadowing - objects spin. See the rts.c and rtshadow.h source code for more details. */ - -#include -#include -#include -#include -#include - -#ifdef GLU_VERSION_1_2 - -#include "rtshadow.h" - -extern GLuint makeNVidiaLogo(GLuint dlistBase); - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -enum { - X, Y, Z -}; - -enum { - DL_NONE, DL_TORUS, DL_CUBE, DL_DOUBLE_TORUS, DL_SPHERE, DL_NVIDIA_LOGO -}; - -enum { - M_TORUS, M_CUBE, M_DOUBLE_TORUS, M_NVIDIA_LOGO, - M_NORMAL_VIEW, M_LIGHT1_VIEW, M_LIGHT2_VIEW, - M_START_MOTION, M_ROTATING, - M_TWO_BIT_STENCIL, M_ALL_STENCIL, - M_RENDER_SILHOUETTE, - M_ENABLE_STENCIL_HACK, M_DISABLE_STENCIL_HACK -}; - -#define OBJECT_1 0x8000 -#define OBJECT_2 0x4000 - -int fullscreen = 0, forceStencilHack = 0; -int lightView = M_NORMAL_VIEW; -int rotate1 = 1, rotate2 = 1; - -RTSscene *scene; -RTSlight *light; -RTSlight *light2; -RTSobject *object, *object2; - -GLfloat eyePos[3] = -{0.0, 0.0, 10.0}; -GLfloat lightPos[4] = -{-3.9, 5.0, 1.0, 1.0}; -GLfloat lightPos2[4] = -{4.0, 5.0, 0.0, 1.0}; -GLfloat objectPos[3] = -{-1.0, 1.0, 0.0}; -GLfloat objectPos2[3] = -{2.0, -2.0, 0.0}; - -GLfloat pink[4] = -{0.75, 0.5, 0.5, 1.0}; -GLfloat greeny[4] = -{0.5, 0.75, 0.5, 1.0}; - -int shape1 = M_TORUS, shape2 = M_CUBE; -int renderSilhouette1, renderSilhouette2; - -GLfloat angle1 = 75.0; -GLfloat angle2 = 75.0; -GLfloat viewAngle = 0.0; -int moving, begin; - -void -renderBasicObject(int shape) -{ - switch (shape) { - case M_TORUS: - glCallList(DL_TORUS); - break; - case M_CUBE: - glCallList(DL_CUBE); - break; - case M_DOUBLE_TORUS: - glCallList(DL_DOUBLE_TORUS); - break; - case M_NVIDIA_LOGO: - glCallList(DL_NVIDIA_LOGO); - break; - } -} - -/* ARGSUSED */ -void -renderObject(void *data) -{ - glPushMatrix(); - glTranslatef(objectPos[X], objectPos[Y], objectPos[Z]); - glRotatef(angle1, 1.0, 1.2, 0.0); - renderBasicObject(shape1); - glPopMatrix(); -} - -/* ARGSUSED */ -void -renderObject2(void *data) -{ - glPushMatrix(); - glTranslatef(objectPos2[X], objectPos2[Y], objectPos2[Z]); - glRotatef(-angle2, 1.3, 0.0, 1.0); - renderBasicObject(shape2); - glPopMatrix(); -} - -/* ARGSUSED1 */ -void -renderScene(GLenum castingLight, void *sceneData, RTSscene * scene) -{ - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - switch (lightView) { - case M_NORMAL_VIEW: - gluLookAt(eyePos[X], eyePos[Y], eyePos[Z], - objectPos[X], objectPos[Y], objectPos[Z], - 0.0, 1.0, 0.0); - break; - case M_LIGHT1_VIEW: - gluLookAt(lightPos[X], lightPos[Y], lightPos[Z], - objectPos[X], objectPos[Y], objectPos[Z], - 0.0, 1.0, 0.0); - break; - case M_LIGHT2_VIEW: - gluLookAt(lightPos2[X], lightPos2[Y], lightPos2[Z], - objectPos[X], objectPos[Y], objectPos[Z], - 0.0, 1.0, 0.0); - break; - } - glLightfv(GL_LIGHT0, GL_POSITION, lightPos); - glLightfv(GL_LIGHT1, GL_POSITION, lightPos2); - - glEnable(GL_NORMALIZE); - glPushMatrix(); - glTranslatef(0.0, 8.0, -5.0); - glScalef(3.0, 3.0, 3.0); - glCallList(DL_SPHERE); - glPopMatrix(); - glDisable(GL_NORMALIZE); - - glPushMatrix(); - glTranslatef(-5.0, 0.0, 0.0); - glCallList(DL_SPHERE); - glPopMatrix(); - - glBegin(GL_QUADS); - glNormal3f(0.0, 0.0, 1.0); - glVertex3f(-7.5, -7.5, -7.0); - glVertex3f(7.5, -7.5, -7.0); - glVertex3f(7.5, 7.5, -7.0); - glVertex3f(-7.5, 7.5, -7.0); - - glNormal3f(-1.0, 0.0, 0.0); - glVertex3f(5.0, -5.0, -5.0); - glVertex3f(5.0, -5.0, 5.0); - glVertex3f(5.0, 5.0, 5.0); - glVertex3f(5.0, 5.0, -5.0); - - glNormal3f(0.0, 1.0, 0.0); - glVertex3f(-5.0, -5.0, -5.0); - glVertex3f(-5.0, -5.0, 5.0); - glVertex3f(5.0, -5.0, 5.0); - glVertex3f(5.0, -5.0, -5.0); - - glEnd(); - - if (castingLight == GL_NONE) { - /* Rendering that is not affected by lighting should be drawn only once. - The time to render it is when no light is casting. */ - glDisable(GL_LIGHTING); - - glColor3fv(pink); - glPushMatrix(); - glTranslatef(lightPos[X], lightPos[Y], lightPos[Z]); - glutSolidSphere(0.3, 8, 8); - glPopMatrix(); - - glColor3fv(greeny); - glPushMatrix(); - glTranslatef(lightPos2[X], lightPos2[Y], lightPos2[Z]); - glutSolidSphere(0.3, 8, 8); - glPopMatrix(); - - glEnable(GL_LIGHTING); - } - renderObject(NULL); - renderObject2(NULL); -} - -void -reshape(int w, int h) -{ - GLfloat wf = w, hf = h; - - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(70.0, wf/hf, 0.5, 30.0); - glMatrixMode(GL_MODELVIEW); -} - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); - rtsRenderScene(scene, RTS_USE_SHADOWS); - if (renderSilhouette1) { - glColor3f(0.0, 1.0, 0.0); - rtsRenderSilhouette(scene, light, object); - glColor3f(0.0, 0.0, 1.0); - rtsRenderSilhouette(scene, light2, object); - } - if (renderSilhouette2) { - glColor3f(1.0, 0.0, 0.0); - rtsRenderSilhouette(scene, light, object2); - glColor3f(1.0, 1.0, 0.0); - rtsRenderSilhouette(scene, light2, object2); - } - glutSwapBuffers(); -} - -void -idle(void) -{ - if (rotate1) { - angle1 += 10; - rtsUpdateObjectShape(object); - } - if (rotate2) { - angle2 += 10; - rtsUpdateObjectShape(object2); - } - glutPostRedisplay(); -} - -/* ARGSUSED1 */ -void -special(int c, int x, int y) -{ - switch (c) { - case GLUT_KEY_UP: - lightPos[Y] += 0.5; - rtsUpdateLightPos(light, lightPos); - break; - case GLUT_KEY_DOWN: - lightPos[Y] -= 0.5; - rtsUpdateLightPos(light, lightPos); - break; - case GLUT_KEY_RIGHT: - lightPos[X] += 0.5; - rtsUpdateLightPos(light, lightPos); - break; - case GLUT_KEY_LEFT: - lightPos[X] -= 0.5; - rtsUpdateLightPos(light, lightPos); - break; - case GLUT_KEY_PAGE_UP: - lightPos[Z] += 0.5; - rtsUpdateLightPos(light, lightPos); - break; - case GLUT_KEY_PAGE_DOWN: - lightPos[Z] -= 0.5; - rtsUpdateLightPos(light, lightPos); - break; - case GLUT_KEY_HOME: - angle1 += 15; - angle2 += 15; - rtsUpdateObjectShape(object); - rtsUpdateObjectShape(object2); - break; - case GLUT_KEY_END: - angle1 -= 15; - angle2 -= 15; - rtsUpdateObjectShape(object); - rtsUpdateObjectShape(object2); - break; - case GLUT_KEY_F1: - lightView = !lightView; - break; - } - glutPostRedisplay(); -} - -void -updateIdleCallback(void) -{ - if (rotate1 || rotate2) { - glutIdleFunc(idle); - } else { - glutIdleFunc(NULL); - } -} - -/* ARGSUSED1 */ -void -menuHandler(int value) -{ - switch (value) { - case OBJECT_1 | M_TORUS: - case OBJECT_1 | M_CUBE: - case OBJECT_1 | M_DOUBLE_TORUS: - case OBJECT_1 | M_NVIDIA_LOGO: - shape1 = value & ~OBJECT_1; - rtsUpdateObjectShape(object); - glutPostRedisplay(); - break; - case OBJECT_2 | M_TORUS: - case OBJECT_2 | M_CUBE: - case OBJECT_2 | M_DOUBLE_TORUS: - case OBJECT_2 | M_NVIDIA_LOGO: - shape2 = value & ~OBJECT_2; - rtsUpdateObjectShape(object2); - glutPostRedisplay(); - break; - case M_NORMAL_VIEW: - case M_LIGHT1_VIEW: - case M_LIGHT2_VIEW: - lightView = value; - glutPostRedisplay(); - break; - case M_START_MOTION: - rotate1 = 1; - rotate2 = 1; - glutIdleFunc(idle); - break; - case OBJECT_1 | M_ROTATING: - rotate1 = !rotate1; - updateIdleCallback(); - break; - case OBJECT_2 | M_ROTATING: - rotate2 = !rotate2; - updateIdleCallback(); - break; - case M_ALL_STENCIL: - rtsUpdateUsableStencilBits(scene, ~0); - glutPostRedisplay(); - break; - case M_TWO_BIT_STENCIL: - rtsUpdateUsableStencilBits(scene, 0x3); - glutPostRedisplay(); - break; - case OBJECT_1 | M_RENDER_SILHOUETTE: - renderSilhouette1 = !renderSilhouette1; - glutPostRedisplay(); - break; - case OBJECT_2 | M_RENDER_SILHOUETTE: - renderSilhouette2 = !renderSilhouette2; - glutPostRedisplay(); - break; - case M_ENABLE_STENCIL_HACK: - rtsStencilRenderingInvariantHack(scene, GL_TRUE); - glutPostRedisplay(); - break; - case M_DISABLE_STENCIL_HACK: - rtsStencilRenderingInvariantHack(scene, GL_FALSE); - glutPostRedisplay(); - break; - } -} - -void -keyboard(unsigned char c, int x, int y) -{ - switch (c) { - case 27: - exit(0); - /* NOTREACHED */ - break; - case ' ': - if (rotate1 || rotate2) { - glutIdleFunc(NULL); - rotate1 = 0; - rotate2 = 0; - } else { - glutIdleFunc(idle); - rotate1 = 1; - rotate2 = 1; - } - break; - case '1': - menuHandler(OBJECT_1 | M_TORUS); - break; - case '2': - menuHandler(OBJECT_1 | M_CUBE); - break; - case '3': - menuHandler(OBJECT_1 | M_DOUBLE_TORUS); - break; - case '4': - menuHandler(OBJECT_1 | M_NVIDIA_LOGO); - break; - case '5': - menuHandler(OBJECT_2 | M_TORUS); - break; - case '6': - menuHandler(OBJECT_2 | M_CUBE); - break; - case '7': - menuHandler(OBJECT_2 | M_DOUBLE_TORUS); - break; - case '8': - menuHandler(OBJECT_2 | M_NVIDIA_LOGO); - break; - } -} - -void -visible(int vis) -{ - if (vis == GLUT_VISIBLE) - updateIdleCallback(); - else - glutIdleFunc(NULL); -} - -void -initMenu(void) -{ - glutCreateMenu(menuHandler); - - glutAddMenuEntry("1 Torus", OBJECT_1 | M_TORUS); - glutAddMenuEntry("1 Cube", OBJECT_1 | M_CUBE); - glutAddMenuEntry("1 Double torus", OBJECT_1 | M_DOUBLE_TORUS); - glutAddMenuEntry("1 NVIDIA logo", OBJECT_1 | M_NVIDIA_LOGO); - - glutAddMenuEntry("2 Torus", OBJECT_2 | M_TORUS); - glutAddMenuEntry("2 Cube", OBJECT_2 | M_CUBE); - glutAddMenuEntry("2 Double torus", OBJECT_2 | M_DOUBLE_TORUS); - glutAddMenuEntry("2 NVIDIA logo", OBJECT_2 | M_NVIDIA_LOGO); - - glutAddMenuEntry("Normal view", M_NORMAL_VIEW); - glutAddMenuEntry("View from light 1", M_LIGHT1_VIEW); - glutAddMenuEntry("View from light 2", M_LIGHT2_VIEW); - - glutAddMenuEntry("Start motion", M_START_MOTION); - glutAddMenuEntry("1 Toggle rotating", OBJECT_1 | M_ROTATING); - glutAddMenuEntry("2 Toggle rotating", OBJECT_2 | M_ROTATING); - - glutAddMenuEntry("Use all stencil", M_ALL_STENCIL); - glutAddMenuEntry("Use only 2 bits stencil", M_TWO_BIT_STENCIL); - - glutAddMenuEntry("1 Toggle silhouette", OBJECT_1 | M_RENDER_SILHOUETTE); - glutAddMenuEntry("2 Toggle silhouette", OBJECT_2 | M_RENDER_SILHOUETTE); - - glutAddMenuEntry("Enable stencil hack", M_ENABLE_STENCIL_HACK); - glutAddMenuEntry("Disable stencil hack", M_DISABLE_STENCIL_HACK); - - glutAttachMenu(GLUT_RIGHT_BUTTON); -} - -/* ARGSUSED2 */ -void -mouse(int button, int state, int x, int y) -{ - if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) { - moving = 1; - begin = x; - } - if (button == GLUT_LEFT_BUTTON && state == GLUT_UP) { - moving = 0; - } -} - -/* ARGSUSED1 */ -void -motion(int x, int y) -{ - if (moving) { - viewAngle = viewAngle + (x - begin); - eyePos[X] = sin(viewAngle * M_PI / 180.0) * 10.0; - eyePos[Z] = cos(viewAngle * M_PI / 180.0) * 10.0; - begin = x; - glutPostRedisplay(); - } -} - -/* XXX RIVA 128 board vendors may change their GL_VENDOR - and GL_RENDERER strings. */ -int -needsStencilRenderingInvariantHack(void) -{ - const char *renderer; - GLint bits; - - renderer = glGetString(GL_RENDERER); - /* Stencil rendering on RIVA 128 and RIVA 128 ZX - is not invariant with stencil-disabled rendering - in 16-bit hardware accelerated mode. */ - if (!strncmp("RIVA 128", renderer, 8)) { - glGetIntegerv(GL_INDEX_BITS, &bits); - return bits == 16; - } - /* Stencil rendering on RIVA 128 and RIVA 128 ZX - is not invariant with stencil-disabled rendering - in 16-bit hardware accelerated mode. 32-bit mode - is invariant (and hardware accelerated though!). */ - if (!strncmp("RIVA TNT", renderer, 8)) { - glGetIntegerv(GL_INDEX_BITS, &bits); - return bits == 16; - } - return 1; -} - -void -parseArgs(int argc, char **argv) -{ - int i; - - for (i=1; i=2 rgb depth samples"); - glutInitDisplayString("stencil>=2 rgb double depth samples"); - glutInit(&argc, argv); - - parseArgs(argc, argv); - - if (fullscreen) { - glutGameModeString("640x480:32@60"); - glutEnterGameMode(); - } else { - glutCreateWindow("Hello to Real Time Shadows"); - } - glutReshapeFunc(reshape); - glutDisplayFunc(display); - glutSpecialFunc(special); - glutKeyboardFunc(keyboard); - glutVisibilityFunc(visible); - glutMouseFunc(mouse); - glutMotionFunc(motion); - - /* 0xffffffff means "use as much stencil as is available". */ - scene = rtsCreateScene(eyePos, 0xffffffff, renderScene, NULL); - - glLightfv(GL_LIGHT0, GL_POSITION, lightPos); - glLightfv(GL_LIGHT0, GL_DIFFUSE, pink); - light = rtsCreateLight(GL_LIGHT0, lightPos, 1000.0); - glLightfv(GL_LIGHT1, GL_POSITION, lightPos2); - glLightfv(GL_LIGHT1, GL_DIFFUSE, greeny); - light2 = rtsCreateLight(GL_LIGHT1, lightPos2, 1000.0); - - object = rtsCreateObject(objectPos, 1.0, renderObject, NULL, 100); - object2 = rtsCreateObject(objectPos2, 1.0, renderObject2, NULL, 100); - - rtsAddLightToScene(scene, light); - rtsAddObjectToLight(light, object); - rtsAddObjectToLight(light, object2); - - rtsAddLightToScene(scene, light2); - rtsAddObjectToLight(light2, object); - rtsAddObjectToLight(light2, object2); - - if (forceStencilHack || needsStencilRenderingInvariantHack()) { - /* RIVA 128 and RIVA 128 ZX lack hardware stencil - support and the hardware rasterization path - (non-stenciled) and the software rasterization - path (with stenciling enabled) do not meet the - invariants. */ - rtsStencilRenderingInvariantHack(scene, GL_TRUE); - } - - glEnable(GL_CULL_FACE); - glEnable(GL_DEPTH_TEST); - - if (!fullscreen) { - initMenu(); - } - - glNewList(DL_TORUS, GL_COMPILE); - glutSolidTorus(0.2, 0.8, 10, 10); - glEndList(); - - glNewList(DL_CUBE, GL_COMPILE); - glutSolidCube(1.0); - glEndList(); - - glNewList(DL_DOUBLE_TORUS, GL_COMPILE); - glCallList(DL_TORUS); - glRotatef(90.0, 0.0, 1.0, 0.0); - glCallList(DL_TORUS); - glRotatef(-90.0, 0.0, 1.0, 0.0); - glEndList(); - - glNewList(DL_SPHERE, GL_COMPILE); - glutSolidSphere(1.5, 20, 20); - glEndList(); - - makeNVidiaLogo(1000); - glNewList(DL_NVIDIA_LOGO, GL_COMPILE); - glPushMatrix(); - glScalef(.25, .25, .25); - glEnable(GL_NORMALIZE); - glCallList(1000); - glDisable(GL_NORMALIZE); - glPopMatrix(); - glEndList(); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} - -#else -int main(int argc, char** argv) -{ - fprintf(stderr, "This program requires the new tesselator API in GLU 1.2.\n"); - fprintf(stderr, "Your GLU library does not support this new interface, sorry.\n"); - return 0; -} -#endif /* GLU_VERSION_1_2 */ diff --git a/lib/glut-3.7.6/progs/advanced/hello2rts.dsp b/lib/glut-3.7.6/progs/advanced/hello2rts.dsp deleted file mode 100644 index 75628fc21..000000000 --- a/lib/glut-3.7.6/progs/advanced/hello2rts.dsp +++ /dev/null @@ -1,100 +0,0 @@ -# Microsoft Developer Studio Project File - Name="hello2rts" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=hello2rts - 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 "hello2rts.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 "hello2rts.mak" CFG="hello2rts - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "hello2rts - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "hello2rts - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "hello2rts - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "hello2rts - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "hello2rts - Win32 Release" -# Name "hello2rts - Win32 Debug" -# Begin Source File - -SOURCE=.\hello2rts.c -# End Source File -# Begin Source File - -SOURCE=.\nvidia_logo.c -# End Source File -# Begin Source File - -SOURCE=.\rts.c -# End Source File -# Begin Source File - -SOURCE=.\rtshadow.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced/hiddenline.c b/lib/glut-3.7.6/progs/advanced/hiddenline.c deleted file mode 100644 index 1e04c9c52..000000000 --- a/lib/glut-3.7.6/progs/advanced/hiddenline.c +++ /dev/null @@ -1,335 +0,0 @@ - -/* hiddenline.c - by Tom McReynolds, SGI */ - -/* Line Rendering: Hidden line techniques */ - -#include -#include -#include - -/* -** Create a single component texture map -*/ -GLfloat *make_texture(int maxs, int maxt) -{ - int s, t; - static GLfloat *texture; - - texture = (GLfloat *)malloc(maxs * maxt * sizeof(GLfloat)); - for(t = 0; t < maxt; t++) { - for(s = 0; s < maxs; s++) { - texture[s + maxs * t] = ((s >> 4) & 0x1) ^ ((t >> 4) & 0x1); - } - } - return texture; -} - -enum {FILL, WIRE, BACKFACE, FRONTLINES, DEPTH, STENCIL, FAT_STENCIL}; - -int rendermode = FILL; - -void -menu(int selection) -{ - rendermode = selection; - glutPostRedisplay(); -} - - -/* geometry display list names */ -enum {SPHERE = 1, CONE, FLOOR, WALLS}; - -void -drawscene(void) -{ - glEnable(GL_TEXTURE_2D); - glCallList(FLOOR); - glDisable(GL_TEXTURE_2D); - - glCallList(WALLS); - - glPushMatrix(); - glTranslatef(-40.f, -50.f, -400.f); - glCallList(SPHERE); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(20.f, -100.f, -420.f); - glCallList(CONE); - glPopMatrix(); -} - -/* do hidden line removal on an object in the scene */ -/* use display lists to represent objects */ -void -hiddenlineobj(GLint dlist) -{ - GLboolean tex2d; - - glGetBooleanv(GL_TEXTURE_2D, &tex2d); - if(tex2d) - glDisable(GL_TEXTURE_2D); - glDisable(GL_LIGHTING); - glColor3f(.7f, .7f, .7f); - - glEnable(GL_STENCIL_TEST); - glStencilFunc(GL_ALWAYS, 0, 0); /* clear stencil for this object */ - - glCallList(dlist); /* draw filled object in depth buffer */ - - glEnable(GL_LIGHTING); - if(tex2d) - glEnable(GL_TEXTURE_2D); - - glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); /* turn off color */ - glDisable(GL_DEPTH_TEST); /* turn off depth */ - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - glStencilFunc(GL_ALWAYS, 1, 1); - glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); - - glCallList(dlist); /* draw lines into stencil buffer */ - - glStencilFunc(GL_EQUAL, 1 , 1); - glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_LEQUAL); - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - - glCallList(dlist); /* use lines in stencil to stencil out solid pgons */ - - /* clean up state */ - glDisable(GL_STENCIL_TEST); - glDepthFunc(GL_LESS); -} - -void -drawscenestencil(void) -{ - glEnable(GL_TEXTURE_2D); - hiddenlineobj(FLOOR); - glDisable(GL_TEXTURE_2D); - - hiddenlineobj(WALLS); - - glPushMatrix(); - glTranslatef(-40.f, -50.f, -400.f); - hiddenlineobj(SPHERE); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(20.f, -100.f, -420.f); - hiddenlineobj(CONE); - glPopMatrix(); -} - -/* Called when window needs to be redrawn */ -void redraw(void) -{ - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT); - - switch(rendermode) { - case FILL: - drawscene(); - break; - case WIRE: /* basic wireframe mode */ - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - drawscene(); - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - break; - case BACKFACE: /* use backface culling to clean things up */ - glEnable(GL_CULL_FACE); - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - drawscene(); - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - glDisable(GL_CULL_FACE); - break; - case FRONTLINES: /* use polygon mode line on front, fill on back */ - glPolygonMode(GL_FRONT, GL_LINE); - drawscene(); - glPolygonMode(GL_FRONT, GL_FILL); - break; - case DEPTH: /* use depth buffer to remove hidden lines */ - glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); - drawscene(); - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - glDepthFunc(GL_LEQUAL); - drawscene(); - glDepthFunc(GL_LESS); - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - break; - case STENCIL: /* use stencil to remove hidden lines */ - glEnable(GL_CULL_FACE); - drawscenestencil(); - glDisable(GL_CULL_FACE); - break; - case FAT_STENCIL: /* use stencil with fat lines to fix edges */ - glLineWidth(2.f); - glEnable(GL_CULL_FACE); - drawscenestencil(); - glDisable(GL_CULL_FACE); - glLineWidth(1.f); - break; - } - - if(glGetError()) /* to catch programming errors; should never happen */ - printf("Oops! I screwed up my OpenGL calls somewhere\n"); - - glFlush(); /* high end machines may need this */ -} - - -/* ARGSUSED1 */ -void key(unsigned char key, int x, int y) -{ - if(key == '\033') - exit(0); -} - -const int TEXDIM = 256; - -/* Parse arguments, and set up interface between OpenGL and window system */ -int -main(int argc, char *argv[]) -{ - /* material properties for objects in scene */ - static GLfloat wall_mat[] = {1.f, 1.f, 1.f, 1.f}; - - GLfloat *tex; - static GLfloat lightpos[] = {50.f, 50.f, -320.f, 1.f}; - static GLfloat sphere_mat[] = {1.f, .5f, 0.f, 1.f}; - static GLfloat cone_mat[] = {0.f, .5f, 1.f, 1.f}; - GLUquadricObj *sphere, *cone, *base; - - glutInit(&argc, argv); - glutInitWindowSize(512, 512); - glutInitDisplayMode(GLUT_RGBA|GLUT_DEPTH|GLUT_STENCIL); - (void)glutCreateWindow("hidden line removal survey"); - glutDisplayFunc(redraw); - glutKeyboardFunc(key); - - glutCreateMenu(menu); - glutAddMenuEntry("Solid Fill", FILL); - glutAddMenuEntry("Wireframe", WIRE); - glutAddMenuEntry("Backface Culling", BACKFACE); - glutAddMenuEntry("Frontface Lines", FRONTLINES); - glutAddMenuEntry("Depth Test", DEPTH); - glutAddMenuEntry("Stencil", STENCIL); - glutAddMenuEntry("Stencil: Fat Lines", FAT_STENCIL); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - - /* draw a perspective scene */ - glMatrixMode(GL_PROJECTION); - glFrustum(-100., 100., -100., 100., 320., 640.); - glMatrixMode(GL_MODELVIEW); - - /* turn on features */ - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glClearColor(.7f, .7f, .7f, .7f); - - glCullFace(GL_BACK); - - /* place light 0 in the right place */ - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - - /* remove back faces to speed things up */ - glCullFace(GL_BACK); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - - glNewList(SPHERE, GL_COMPILE); - /* make display lists for sphere and cone; for efficiency */ - sphere = gluNewQuadric(); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, sphere_mat); - gluSphere(sphere, 50.f, 20, 20); - gluDeleteQuadric(sphere); - glEndList(); - - glNewList(CONE, GL_COMPILE); - cone = gluNewQuadric(); - base = gluNewQuadric(); - glPushMatrix(); - glRotatef(-90.f, 1.f, 0.f, 0.f); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, cone_mat); - gluQuadricOrientation(base, GLU_INSIDE); - gluDisk(base, 0., 40., 20, 1); - gluCylinder(cone, 40., 0., 120., 20, 20); - glPopMatrix(); - gluDeleteQuadric(cone); - gluDeleteQuadric(base); - glEndList(); - - glNewList(FLOOR, GL_COMPILE); - /* - ** Note: wall verticies are ordered so they are all front facing - ** this lets me do back face culling to speed things up. - */ - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, wall_mat); - - /* floor */ - - /* - ** Since we want to turn texturing on for floor only, we have to - ** make floor a separate glBegin()/glEnd() sequence. You can't - ** turn texturing on and off between begin and end calls - */ - glBegin(GL_QUADS); - glNormal3f(0.f, 1.f, 0.f); - glTexCoord2i(0, 0); - glVertex3f(-100.f, -100.f, -320.f); - glTexCoord2i(1, 0); - glVertex3f( 100.f, -100.f, -320.f); - glTexCoord2i(1, 1); - glVertex3f( 100.f, -100.f, -520.f); - glTexCoord2i(0, 1); - glVertex3f(-100.f, -100.f, -520.f); - glEnd(); - glEndList(); - - /* walls */ - - glNewList(WALLS, GL_COMPILE); - glBegin(GL_QUADS); - /* left wall */ - glNormal3f(1.f, 0.f, 0.f); - glVertex3f(-100.f, -100.f, -320.f); - glVertex3f(-100.f, -100.f, -520.f); - glVertex3f(-100.f, 100.f, -520.f); - glVertex3f(-100.f, 100.f, -320.f); - - /* right wall */ - glNormal3f(-1.f, 0.f, 0.f); - glVertex3f( 100.f, -100.f, -320.f); - glVertex3f( 100.f, 100.f, -320.f); - glVertex3f( 100.f, 100.f, -520.f); - glVertex3f( 100.f, -100.f, -520.f); - - /* ceiling */ - glNormal3f(0.f, -1.f, 0.f); - glVertex3f(-100.f, 100.f, -320.f); - glVertex3f(-100.f, 100.f, -520.f); - glVertex3f( 100.f, 100.f, -520.f); - glVertex3f( 100.f, 100.f, -320.f); - - /* back wall */ - glNormal3f(0.f, 0.f, 1.f); - glVertex3f(-100.f, -100.f, -520.f); - glVertex3f( 100.f, -100.f, -520.f); - glVertex3f( 100.f, 100.f, -520.f); - glVertex3f(-100.f, 100.f, -520.f); - glEnd(); - - glEndList(); - /* load pattern for current 2d texture */ - tex = make_texture(TEXDIM, TEXDIM); - glTexImage2D(GL_TEXTURE_2D, 0, 1, TEXDIM, TEXDIM, 0, GL_RED, GL_FLOAT, tex); - free(tex); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} - diff --git a/lib/glut-3.7.6/progs/advanced/hiddenline.dsp b/lib/glut-3.7.6/progs/advanced/hiddenline.dsp deleted file mode 100644 index ee1a591cf..000000000 --- a/lib/glut-3.7.6/progs/advanced/hiddenline.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="hiddenline" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=hiddenline - 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 "hiddenline.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 "hiddenline.mak" CFG="hiddenline - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "hiddenline - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "hiddenline - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "hiddenline - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "hiddenline - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "hiddenline - Win32 Release" -# Name "hiddenline - Win32 Debug" -# Begin Source File - -SOURCE=.\hiddenline.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced/imgproc.c b/lib/glut-3.7.6/progs/advanced/imgproc.c deleted file mode 100644 index 771bb5263..000000000 --- a/lib/glut-3.7.6/progs/advanced/imgproc.c +++ /dev/null @@ -1,288 +0,0 @@ - -/* imgproc.c - by David Blythe, SGI */ - -/* Examples of various image processing operations coded as OpenGL - accumulation buffer operations. This allows extremely fast - image processing on machines with hardware accumulation buffers - (RealityEngine, InfiniteReality, VGX). */ - -#include -#include -#include -#include -#include "texture.h" - -static unsigned *image, *null; -static int width, height, components; -static void (*func) (void); -static float alpha = 1.; -static float luma = .5; -static int reset = 1; -static int format = GL_RGBA; - -void -brighten(void) -{ - if (reset) { - memset(null, 0, width * height * sizeof *null); - reset = 0; - } - glDrawPixels(width, height, format, GL_UNSIGNED_BYTE, image); - glAccum(GL_LOAD, alpha / 2.); - glDrawPixels(width, height, format, GL_UNSIGNED_BYTE, null); - glAccum(GL_ACCUM, (1 - alpha) / 2.); - glAccum(GL_RETURN, 2.0); -} - -void -saturate(void) -{ - if (reset) { - memset(null, 0xff, width * height * sizeof *null); - reset = 0; - } - glDrawPixels(width, height, format, GL_UNSIGNED_BYTE, image); - glAccum(GL_LOAD, alpha / 2.); - glDrawPixels(width, height, format, GL_UNSIGNED_BYTE, null); - glAccum(GL_ACCUM, (1 - alpha) / 2.); - glAccum(GL_RETURN, 2.0); -} - -void -contrast(void) -{ - if (reset) { - memset(null, luma, width * height * sizeof *null); - reset = 0; - } - glDrawPixels(width, height, format, GL_UNSIGNED_BYTE, image); - glAccum(GL_LOAD, alpha / 2.); - glDrawPixels(width, height, format, GL_UNSIGNED_BYTE, null); - glAccum(GL_ACCUM, (1 - alpha) / 2.); - glAccum(GL_RETURN, 2.0); -} - -void -balance(void) -{ - if (reset) { - memset(null, luma, width * height * sizeof *null); - reset = 0; - } - glDrawPixels(width, height, format, GL_UNSIGNED_BYTE, image); - glAccum(GL_LOAD, alpha / 2.); - glDrawPixels(width, height, format, GL_UNSIGNED_BYTE, null); - glAccum(GL_ACCUM, (1 - alpha) / 2.); - glAccum(GL_RETURN, 2.0); -} - -void -sharpen(void) -{ - if (reset) { - gluScaleImage(format, width, height, GL_UNSIGNED_BYTE, image, - width / 4, height / 4, GL_UNSIGNED_BYTE, null); - gluScaleImage(format, width / 4, height / 4, GL_UNSIGNED_BYTE, null, - width, height, GL_UNSIGNED_BYTE, null); - reset = 0; - } - glDrawPixels(width, height, format, GL_UNSIGNED_BYTE, image); - glAccum(GL_LOAD, alpha / 2.); - glDrawPixels(width, height, format, GL_UNSIGNED_BYTE, null); - glAccum(GL_ACCUM, (1 - alpha) / 2.); - glAccum(GL_RETURN, 2.0); -} - -void -set_brighten(void) -{ - func = brighten; - reset = 1; - printf("brighten\n"); -} - -void -set_saturate(void) -{ - func = saturate; - reset = 1; - printf("saturate\n"); -} - -void -set_contrast(void) -{ - func = contrast; - reset = 1; - printf("contrast\n"); -} - -void -set_balance(void) -{ - func = balance; - reset = 1; - printf("balance\n"); -} - -void -set_sharpen(void) -{ - func = sharpen; - reset = 1; - printf("sharpen\n"); -} - -void -help(void) -{ - printf("'h' - help\n"); - printf("'b' - brighten\n"); - printf("'s' - saturate\n"); - printf("'c' - contrast\n"); - printf("'z' - sharpen\n"); - printf("'a' - color balance\n"); - printf("left mouse - increase alpha\n"); - printf("middle mouse - decrease alpha\n"); -} - -void -init(char *filename) -{ - double l = 0; - int i; - - func = brighten; - - if (filename) { - image = read_texture(filename, &width, &height, &components); - if (image == NULL) { - fprintf(stderr, "Error: Can't load image file \"%s\".\n", - filename); - exit(1); - } else { - printf("%d x %d image loaded\n", width, height); - } - if (components < 3 || components > 4) { - printf("must be RGB or RGBA image\n"); - exit(1); - } - } else { - int i, j; - components = 4; - width = height = 512; - image = (unsigned *) malloc(width * height * sizeof(unsigned)); - for (j = 0; j < height; j++) - for (i = 0; i < width; i++) { - if (i & 1) - image[i + j * width] = 0xff; - else - image[i + j * width] = 0xff00; - if (j & 1) - image[i + j * width] |= 0xff0000; - } - - } - null = (unsigned *) malloc(width * height * sizeof *image); - - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - glClearColor(.25, .25, .25, .25); - - /* compute luminance */ - for (i = 0; i < width * height; i++) { - GLubyte *p = (GLubyte *) (image + i); - double r = p[0] / 255.; - double g = p[1] / 255.; - double b = p[2] / 255.; - l += r * .3086 + g * .0820 + b * .114; - } - luma = l / (width * height); - printf("average luminance = %f\n", luma); -} - -void -display(void) -{ - printf("alpha = %f\n", alpha); - glClear(GL_COLOR_BUFFER_BIT); - (*func) (); - glutSwapBuffers(); -} - -void -reshape(int w, int h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho(0., (GLdouble) width, 0., (GLdouble) height, -1., 1.); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -/* ARGSUSED1 */ -void -key(unsigned char key, int x, int y) -{ - switch (key) { - case 'b': - set_brighten(); - break; - case 's': - set_saturate(); - break; - case 'c': - set_contrast(); - break; - case 'z': - set_sharpen(); - break; - case 'a': - set_balance(); - break; - case 'h': - help(); - break; - case '\033': - exit(0); - break; - default: - return; - } - glutPostRedisplay(); -} - -/* ARGSUSED2 */ -void -mouse(int button, int state, int x, int y) -{ - if (state == GLUT_DOWN) { - switch (button) { - case GLUT_LEFT_BUTTON: - alpha += .1; - break; - case GLUT_MIDDLE_BUTTON: - alpha -= .1; - break; - case GLUT_RIGHT_BUTTON: - break; - } - } - glutPostRedisplay(); -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitWindowSize(512, 512); - glutInitDisplayMode(GLUT_RGBA | GLUT_ACCUM | GLUT_DOUBLE); - (void) glutCreateWindow("imgproc"); - init(argv[1]); - glutDisplayFunc(display); - glutKeyboardFunc(key); - glutReshapeFunc(reshape); - glutMouseFunc(mouse); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/advanced/imgproc.dsp b/lib/glut-3.7.6/progs/advanced/imgproc.dsp deleted file mode 100644 index 477c7a3a1..000000000 --- a/lib/glut-3.7.6/progs/advanced/imgproc.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="imgproc" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=imgproc - 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 "imgproc.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 "imgproc.mak" CFG="imgproc - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "imgproc - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "imgproc - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "imgproc - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "imgproc - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "imgproc - Win32 Release" -# Name "imgproc - Win32 Debug" -# Begin Source File - -SOURCE=.\imgproc.c -# End Source File -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# Begin Source File - -SOURCE=.\texture.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced/izoom.c b/lib/glut-3.7.6/progs/advanced/izoom.c deleted file mode 100644 index b0742dd32..000000000 --- a/lib/glut-3.7.6/progs/advanced/izoom.c +++ /dev/null @@ -1,671 +0,0 @@ -/** - ** izoom- - ** Magnify or minify a picture with or without filtering. The - ** filtered method is one pass, uses 2-d convolution, and is optimized - ** by integer arithmetic and precomputation of filter coeffs. - ** - ** Paul Haeberli - 1988 - **/ -#include -#include -#include -#include -#include "izoom.h" - -#ifdef _WIN32 -#pragma warning (disable:4244) /* disable bogus conversion warnings */ -#endif - -typedef struct filtinteg { - float rad, min, max; - float *tab; -} filtinteg; - -float flerp(float f0, float f1, float p); - -#define GRIDTOFLOAT(pos,n) (((pos)+0.5)/(n)) -#define FLOATTOGRID(pos,n) ((pos)*(n)) -#define SHIFT 12 -#define ONE (1<rad) -#define FILTTABSIZE 250 - -static void makexmap(short *abuf, short *xmap[], int anx, int bnx); -static void setintrow(int *buf, int val, int n); -static void xscalebuf(short *xmap[], short *bbuf, int bnx); -static void addrow(int *iptr, short *sptr, int w, int n); -static void divrow(int *iptr, short *sptr, int tot, int n); -static FILTER *makefilt(short *abuf, int anx, int bnx, int *maxn); -static void freefilt(FILTER * filt, int n); -static void applyxfilt(short *bbuf, FILTER * xfilt, int bnx); -float filterinteg(float bmin, float bmax, float blurf); -static void mitchellinit(float b, float c); -static void clamprow(short *iptr, short *optr, int n); - -float filt_box(float x); -float filt_triangle(float x); -float filt_quadratic(float x); -float filt_mitchell(float x); -float filt_gaussian(float x); - -static int (*xfiltfunc) (short *, int); -static float blurfactor; -int izoomdebug; - -static filtinteg *shapeBOX; -static filtinteg *shapeTRIANGLE; -static filtinteg *shapeQUADRATIC; -static filtinteg *shapeMITCHELL; -static filtinteg *shapeGAUSSIAN; -static filtinteg *shape; - -static filtinteg * -integrate(float (*filtfunc) (float), float rad) -{ - int i; - float del, x, min, max; - double tot; - filtinteg *filt; - - min = -rad; - max = rad; - del = 2 * rad; - tot = 0.0; - filt = (filtinteg *) malloc(sizeof(filtinteg)); - filt->rad = rad; - filt->min = min; - filt->max = max; - filt->tab = (float *) malloc(FILTTABSIZE * sizeof(float)); - for (i = 0; i < FILTTABSIZE; i++) { - x = min + (del * i / (FILTTABSIZE - 1.0)); - tot = tot + filtfunc(x); - filt->tab[i] = tot; - } - for (i = 0; i < FILTTABSIZE; i++) - filt->tab[i] /= tot; - return filt; -} - -float -filterinteg(float bmin, float bmax, float blurf) -{ - int i1, i2; - float f1, f2; - float *tab; - float mult; - - bmin /= blurf; - bmax /= blurf; - tab = shape->tab; - mult = (FILTTABSIZE - 1.0) / (2.0 * shape->rad); - - f1 = ((bmin - shape->min) * mult); - i1 = floor(f1); - f1 = f1 - i1; - if (i1 < 0) - f1 = 0.0; - else if (i1 >= (FILTTABSIZE - 1)) - f1 = 1.0; - else - f1 = flerp(tab[i1], tab[i1 + 1], f1); - - f2 = ((bmax - shape->min) * mult); - i2 = floor(f2); - f2 = f2 - i2; - if (i2 < 0) - f2 = 0.0; - else if (i2 >= (FILTTABSIZE - 1)) - f2 = 1.0; - else - f2 = flerp(tab[i2], tab[i2 + 1], f2); - return f2 - f1; -} - -void -setfiltertype(int filttype) -{ - switch (filttype) { - case IMPULSE: - shape = 0; - break; - case BOX: - if (!shapeBOX) - shapeBOX = integrate(filt_box, 0.5); - shape = shapeBOX; - break; - case TRIANGLE: - if (!shapeTRIANGLE) - shapeTRIANGLE = integrate(filt_triangle, 1.0); - shape = shapeTRIANGLE; - break; - case QUADRATIC: - if (!shapeQUADRATIC) - shapeQUADRATIC = integrate(filt_quadratic, 1.5); - shape = shapeQUADRATIC; - break; - case MITCHELL: - if (!shapeMITCHELL) - shapeMITCHELL = integrate(filt_mitchell, 2.0); - shape = shapeMITCHELL; - break; - case GAUSSIAN: - if (!shapeGAUSSIAN) - shapeGAUSSIAN = integrate(filt_gaussian, 1.5); - shape = shapeGAUSSIAN; - break; - } -} - -void -copyimage(getfunc_t getfunc, getfunc_t putfunc, int nx, int ny) -{ - int y; - short *abuf; - - abuf = (short *) malloc(nx * sizeof(short)); - for (y = 0; y < ny; y++) { - getfunc(abuf, y); - putfunc(abuf, y); - } - free(abuf); -} - -/* general zoom follows */ -zoom * -newzoom(getfunc_t getfunc, int anx, int any, int bnx, int bny, int filttype, float blur) -{ - zoom *z; - int i; - - setfiltertype(filttype); - z = (zoom *) malloc(sizeof(zoom)); - z->getfunc = getfunc; - z->abuf = (short *) malloc(anx * sizeof(short)); - z->bbuf = (short *) malloc(bnx * sizeof(short)); - z->anx = anx; - z->any = any; - z->bnx = bnx; - z->bny = bny; - z->curay = -1; - z->y = 0; - z->type = filttype; - if (filttype == IMPULSE) { - if (z->anx != z->bnx) { - z->xmap = (short **) malloc(z->bnx * sizeof(short *)); - makexmap(z->abuf, z->xmap, z->anx, z->bnx); - } - } else { - blurfactor = blur; - if (filttype == MITCHELL) - z->clamp = 1; - else - z->clamp = 0; - z->tbuf = (short *) malloc(bnx * sizeof(short)); - z->xfilt = makefilt(z->abuf, anx, bnx, &z->nrows); - z->yfilt = makefilt(0, any, bny, &z->nrows); - z->filtrows = (short **) malloc(z->nrows * sizeof(short *)); - for (i = 0; i < z->nrows; i++) - z->filtrows[i] = (short *) malloc(z->bnx * sizeof(short)); - z->accrow = (int *) malloc(z->bnx * sizeof(int)); - z->ay = 0; - } - return z; -} - -void -getzoomrow(zoom * z, short *buf, int y) -{ - float fy; - int ay; - FILTER *f; - int i, max; - short *row; - - if (y == 0) { - z->curay = -1; - z->y = 0; - z->ay = 0; - } - if (z->type == IMPULSE) { - fy = GRIDTOFLOAT(z->y, z->bny); - ay = FLOATTOGRID(fy, z->any); - if (z->anx == z->bnx) { - if (z->curay != ay) { - z->getfunc(z->abuf, ay); - z->curay = ay; - if (xfiltfunc) - xfiltfunc(z->abuf, z->bnx); - } - memcpy(buf, z->abuf, z->bnx * sizeof(short)); - } else { - if (z->curay != ay) { - z->getfunc(z->abuf, ay); - xscalebuf(z->xmap, z->bbuf, z->bnx); - z->curay = ay; - if (xfiltfunc) - xfiltfunc(z->bbuf, z->bnx); - } - memcpy(buf, z->bbuf, z->bnx * sizeof(short)); - } - } else if (z->any == 1 && z->bny == 1) { - z->getfunc(z->abuf, z->ay++); - applyxfilt(z->filtrows[0], z->xfilt, z->bnx); - if (xfiltfunc) - xfiltfunc(z->filtrows[0], z->bnx); - if (z->clamp) { - clamprow(z->filtrows[0], z->tbuf, z->bnx); - memcpy(buf, z->tbuf, z->bnx * sizeof(short)); - } else { - memcpy(buf, z->filtrows[0], z->bnx * sizeof(short)); - } - } else { - f = z->yfilt + z->y; - max = (int) (sizeof(f->dat) / sizeof(short) + (f->n - 1)); - while (z->ay <= max) { - z->getfunc(z->abuf, z->ay++); - row = z->filtrows[0]; - for (i = 0; i < (z->nrows - 1); i++) - z->filtrows[i] = z->filtrows[i + 1]; - z->filtrows[z->nrows - 1] = row; - applyxfilt(z->filtrows[z->nrows - 1], z->xfilt, z->bnx); - if (xfiltfunc) - xfiltfunc(z->filtrows[z->nrows - 1], z->bnx); - } - if (f->n == 1) { - if (z->clamp) { - clamprow(z->filtrows[z->nrows - 1], z->tbuf, z->bnx); - memcpy(buf, z->tbuf, z->bnx * sizeof(short)); - } else { - memcpy(buf, z->filtrows[z->nrows - 1], z->bnx * sizeof(short)); - } - } else { - setintrow(z->accrow, f->halftotw, z->bnx); - for (i = 0; i < f->n; i++) - addrow(z->accrow, z->filtrows[i + (z->nrows - 1) - (f->n - 1)], - f->w[i], z->bnx); - divrow(z->accrow, z->bbuf, f->totw, z->bnx); - if (z->clamp) { - clamprow(z->bbuf, z->tbuf, z->bnx); - memcpy(buf, z->tbuf, z->bnx * sizeof(short)); - } else { - memcpy(buf, z->bbuf, z->bnx * sizeof(short)); - } - } - } - z->y++; -} - -static void -setintrow(int *buf, int val, int n) -{ - while (n >= 8) { - buf[0] = val; - buf[1] = val; - buf[2] = val; - buf[3] = val; - buf[4] = val; - buf[5] = val; - buf[6] = val; - buf[7] = val; - buf += 8; - n -= 8; - } - while (n--) - *buf++ = val; -} - -void -freezoom(zoom * z) -{ - int i; - - if (z->type == IMPULSE) { - if (z->anx != z->bnx) - free(z->xmap); - } else { - freefilt(z->xfilt, z->bnx); - freefilt(z->yfilt, z->bny); - free(z->tbuf); - for (i = 0; i < z->nrows; i++) - free(z->filtrows[i]); - free(z->filtrows); - free(z->accrow); - } - free(z->abuf); - free(z->bbuf); - free(z); - -} - -void -filterzoom(getfunc_t getfunc, getfunc_t putfunc, int anx, int any, int bnx, int bny, int filttype, float blur) -{ - zoom *z; - int y; - short *buf; - - buf = (short *) malloc(bnx * sizeof(short)); - z = newzoom(getfunc, anx, any, bnx, bny, filttype, blur); - for (y = 0; y < bny; y++) { - getzoomrow(z, buf, y); - putfunc(buf, y); - } - freezoom(z); - free(buf); -} - -/* impulse zoom utilities */ -static void -makexmap(short *abuf, short *xmap[], int anx, int bnx) -{ - int x, ax; - float fx; - - for (x = 0; x < bnx; x++) { - fx = GRIDTOFLOAT(x, bnx); - ax = FLOATTOGRID(fx, anx); - xmap[x] = abuf + ax; - } -} - -static void -xscalebuf(short *xmap[], short *bbuf, int bnx) -{ - while (bnx >= 8) { - bbuf[0] = *(xmap[0]); - bbuf[1] = *(xmap[1]); - bbuf[2] = *(xmap[2]); - bbuf[3] = *(xmap[3]); - bbuf[4] = *(xmap[4]); - bbuf[5] = *(xmap[5]); - bbuf[6] = *(xmap[6]); - bbuf[7] = *(xmap[7]); - bbuf += 8; - xmap += 8; - bnx -= 8; - } - while (bnx--) - *bbuf++ = *(*xmap++); -} - -void -zoomxfilt(int (*filtfunc) (short *, int)) -{ - xfiltfunc = filtfunc; -} - -/* filter zoom utilities */ -static void -addrow(int *iptr, short *sptr, int w, int n) -{ - while (n >= 8) { - iptr[0] += (w * sptr[0]); - iptr[1] += (w * sptr[1]); - iptr[2] += (w * sptr[2]); - iptr[3] += (w * sptr[3]); - iptr[4] += (w * sptr[4]); - iptr[5] += (w * sptr[5]); - iptr[6] += (w * sptr[6]); - iptr[7] += (w * sptr[7]); - iptr += 8; - sptr += 8; - n -= 8; - } - while (n--) - *iptr++ += (w * *sptr++); -} - -static void -divrow(int *iptr, short *sptr, int tot, int n) -{ - while (n >= 8) { - sptr[0] = iptr[0] / tot; - sptr[1] = iptr[1] / tot; - sptr[2] = iptr[2] / tot; - sptr[3] = iptr[3] / tot; - sptr[4] = iptr[4] / tot; - sptr[5] = iptr[5] / tot; - sptr[6] = iptr[6] / tot; - sptr[7] = iptr[7] / tot; - sptr += 8; - iptr += 8; - n -= 8; - } - while (n--) - *sptr++ = (*iptr++) / tot; -} - -static FILTER * -makefilt(short *abuf, int anx, int bnx, int *maxn) -{ - FILTER *f, *filter; - int x, n; - float bmin, bmax, bcent, brad; - float fmin, fmax, acent, arad; - int amin, amax; - float coverscale; - - if (izoomdebug) - fprintf(stderr, "makefilt\n"); - f = filter = (FILTER *) malloc(bnx * sizeof(FILTER)); - *maxn = 0; - if (bnx < anx) { - coverscale = ((float) anx / bnx * ONE) / 2.0; - brad = FILTERRAD / bnx; - for (x = 0; x < bnx; x++) { - bcent = ((float) x + 0.5) / bnx; - amin = floor((bcent - brad) * anx + EPSILON); - amax = floor((bcent + brad) * anx - EPSILON); - if (amin < 0) - amin = 0; - if (amax >= anx) - amax = anx - 1; - f->n = 1 + amax - amin; - f->dat = abuf + amin; - f->w = (short *) malloc(f->n * sizeof(short)); - f->totw = 0; - if (izoomdebug) - fprintf(stderr, "| "); - for (n = 0; n < f->n; n++) { - bmin = bnx * ((((float) amin + n) / anx) - bcent); - bmax = bnx * ((((float) amin + n + 1) / anx) - bcent); - f->w[n] = floor((coverscale * filterinteg(bmin, bmax, blurfactor)) + 0.5); - if (izoomdebug) - fprintf(stderr, "%d ", f->w[n]); - f->totw += f->w[n]; - } - f->halftotw = f->totw / 2; - if (f->n > *maxn) - *maxn = f->n; - f++; - } - } else { - coverscale = ((float) bnx / anx * ONE) / 2.0; - arad = FILTERRAD / anx; - for (x = 0; x < bnx; x++) { - bmin = ((float) x) / bnx; - bmax = ((float) x + 1.0) / bnx; - amin = floor((bmin - arad) * anx + (0.5 + EPSILON)); - amax = floor((bmax + arad) * anx - (0.5 + EPSILON)); - if (amin < 0) - amin = 0; - if (amax >= anx) - amax = anx - 1; - f->n = 1 + amax - amin; - f->dat = abuf + amin; - f->w = (short *) malloc(f->n * sizeof(short)); - f->totw = 0; - if (izoomdebug) - fprintf(stderr, "| "); - for (n = 0; n < f->n; n++) { - acent = (amin + n + 0.5) / anx; - fmin = anx * (bmin - acent); - fmax = anx * (bmax - acent); - f->w[n] = floor((coverscale * filterinteg(fmin, fmax, blurfactor)) + 0.5); - if (izoomdebug) - fprintf(stderr, "%d ", f->w[n]); - f->totw += f->w[n]; - } - f->halftotw = f->totw / 2; - if (f->n > *maxn) - *maxn = f->n; - f++; - } - } - if (izoomdebug) - fprintf(stderr, "|\n"); - return filter; -} - -static void -freefilt(FILTER * filt, int n) -{ - FILTER *f; - - f = filt; - while (n--) { - free(f->w); - f++; - } - free(filt); -} - -static void -applyxfilt(short *bbuf, FILTER * xfilt, int bnx) -{ - short *w; - short *dptr; - int n, val; - - while (bnx--) { - if ((n = xfilt->n) == 1) { - *bbuf++ = *xfilt->dat; - } else { - w = xfilt->w; - dptr = xfilt->dat; - val = xfilt->halftotw; - n = xfilt->n; - while (n--) - val += *w++ * *dptr++; - *bbuf++ = val / xfilt->totw; - } - xfilt++; - } -} - -/* filter shape functions follow */ -float -filt_box(float x) -{ - if (x < -0.5) - return 0.0; - if (x < 0.5) - return 1.0; - return 0.0; -} - -float -filt_triangle(float x) -{ - if (x < -1.0) - return 0.0; - if (x < 0.0) - return 1.0 + x; - if (x < 1.0) - return 1.0 - x; - return 0.0; -} - -float -filt_quadratic(float x) -{ - if (x < -1.5) - return 0.0; - if (x < -0.5) - return 0.5 * (x + 1.5) * (x + 1.5); - if (x < 0.5) - return 0.75 - (x * x); - if (x < 1.5) - return 0.5 * (x - 1.5) * (x - 1.5); - return 0.0; -} - -static float p0, p2, p3, q0, q1, q2, q3; - -/* see Mitchell&Netravali, "Reconstruction Filters in Computer Graphics", - SIGGRAPH 88. Mitchell code provided by Paul Heckbert. */ - -float -filt_mitchell(float x) -{ /* Mitchell & Netravali's two-param cubic */ - static int mitfirsted; - - if (!mitfirsted) { - mitchellinit(1.0f / 3.0f, 1.0f / 3.0f); - mitfirsted = 1; - } - if (x < -2.0) - return 0.0; - if (x < -1.0) - return (q0 - x * (q1 - x * (q2 - x * q3))); - if (x < 0.0) - return (p0 + x * x * (p2 - x * p3)); - if (x < 1.0) - return (p0 + x * x * (p2 + x * p3)); - if (x < 2.0) - return (q0 + x * (q1 + x * (q2 + x * q3))); - return 0.0; -} - -static void -mitchellinit(float b, float c) -{ - p0 = (6.0 - 2.0 * b) / 6.0; - p2 = (-18.0 + 12.0 * b + 6.0 * c) / 6.0; - p3 = (12.0 - 9.0 * b - 6.0 * c) / 6.0; - q0 = (8.0 * b + 24.0 * c) / 6.0; - q1 = (-12.0 * b - 48.0 * c) / 6.0; - q2 = (6.0 * b + 30.0 * c) / 6.0; - q3 = (-b - 6.0 * c) / 6.0; -} - -#define NARROWNESS 1.5 - -float -filt_gaussian(float x) -{ - x = x * NARROWNESS; - return (1.0 / exp(x * x) - 1.0 / exp(1.5 * NARROWNESS * 1.5 * NARROWNESS)); -} - -float -flerp(float f0, float f1, float p) -{ - return ((f0 * (1.0 - p)) + (f1 * p)); -} - -#define DOCLAMP(iptr,optr) *(optr) = ((*(iptr)<0) ? 0 : (*(iptr)>255) ? 255 : *(iptr)) - -static void -clamprow(short *iptr, short *optr, int n) -{ - while (n >= 8) { - DOCLAMP(iptr + 0, optr + 0); - DOCLAMP(iptr + 1, optr + 1); - DOCLAMP(iptr + 2, optr + 2); - DOCLAMP(iptr + 3, optr + 3); - DOCLAMP(iptr + 4, optr + 4); - DOCLAMP(iptr + 5, optr + 5); - DOCLAMP(iptr + 6, optr + 6); - DOCLAMP(iptr + 7, optr + 7); - iptr += 8; - optr += 8; - n -= 8; - } - while (n--) { - DOCLAMP(iptr, optr); - iptr++; - optr++; - } -} diff --git a/lib/glut-3.7.6/progs/advanced/izoom.h b/lib/glut-3.7.6/progs/advanced/izoom.h deleted file mode 100644 index 1c0f40687..000000000 --- a/lib/glut-3.7.6/progs/advanced/izoom.h +++ /dev/null @@ -1,49 +0,0 @@ -#ifndef IZOOMDEF -#define IZOOMDEF - -/** - ** header for izoom- - ** Magnify or minify a picture with or without filtering. The - ** filtered method is one pass, uses 2-d convolution, and is optimized - ** by integer arithmetic and precomputation of filter coeffs. - ** - ** Paul Haeberli - 1988 - **/ - -#define IMPULSE 1 -#define BOX 2 -#define TRIANGLE 3 -#define QUADRATIC 4 -#define MITCHELL 5 -#define GAUSSIAN 6 - -typedef struct FILTER { - int n, totw, halftotw; - short *dat; - short *w; -} FILTER; - -typedef void (*getfunc_t) (short *, int); - -typedef struct zoom { - getfunc_t getfunc; - short *abuf; - short *bbuf; - int anx, any; - int bnx, bny; - short **xmap; - int type; - int curay; - int y; - FILTER *xfilt, *yfilt; /* stuff for fitered zoom */ - short *tbuf; - int nrows, clamp, ay; - short **filtrows; - int *accrow; -} zoom; - -zoom *newzoom(getfunc_t getfunc, int anx, int any, int bnx, int bny, int filttype, float blur); -float filterinteg(float bmin, float bmax, float blurf); -void filterzoom(getfunc_t getfunc, getfunc_t putfunc, int anx, int any, int bnx, int bny, int filttype, float blur); - -#endif diff --git a/lib/glut-3.7.6/progs/advanced/logopoints.h b/lib/glut-3.7.6/progs/advanced/logopoints.h deleted file mode 100644 index 3925e7659..000000000 --- a/lib/glut-3.7.6/progs/advanced/logopoints.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * logopoints.h - * - * contains the data for one-third of the complete SGI "box" logo. this - * data is centered at the origin. The complete logo is created by scaling, - * rotating and translating the initial data points specified here. - */ - -#define Ax 0.0 -#define Ay 0.104 - -#define Bx 0.231 -#define By 0.237 - -#define Cx 0.113 -#define Cy 0.3051 - -#define Dx 0.113 -#define Dy 0.192 - -#define Ex 0.023 -#define Ey 0.14 - -#define Fx 0.023 -#define Fy 0.461 - -#define Gx 0.411 -#define Gy 0.237 - -#define Z 0.0 - -/* Radius of round corners */ -#define LOGO_RADIUS .1 diff --git a/lib/glut-3.7.6/progs/advanced/mipmap_lines.c b/lib/glut-3.7.6/progs/advanced/mipmap_lines.c deleted file mode 100644 index 64afdc488..000000000 --- a/lib/glut-3.7.6/progs/advanced/mipmap_lines.c +++ /dev/null @@ -1,301 +0,0 @@ - -/* mipmap_lines.c - by David Blythe, SGI */ - -/* Different mipmap filters. */ - -#include -#include -#include -#include -#include "texture.h" -#include "izoom.h" - -static int w = 1024, h = 512; - -void -reshape(int w, int h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(40.0, (GLfloat) w / (GLfloat) h, 1.0, 20.0); - - gluLookAt(0, 1, 3, - 0, 0, 0, - 0, 1, 0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -int original_width, reduced_width, global_comp; -unsigned *original, *reduced; - -void -getimgrow(short *buf, int y) -{ - int i; - unsigned *p = &original[y * original_width]; - int shift = global_comp * 8; - unsigned int mask = 0xff << shift; - - for (i = 0; i < original_width; i++) { - buf[i] = (p[i] & mask) >> shift; - } -} - -void -putimgrow(short *buf, int y) -{ - int i; - unsigned *p = &reduced[y * reduced_width]; - int shift = global_comp * 8; - unsigned int mask = 0xff << shift; - - for (i = 0; i < reduced_width; i++) { - p[i] = (p[i] & ~mask) | (buf[i] << shift); - } -} - -void -buildMitchellMipmaps(int components, int width, int height, unsigned - *buf) -{ - int level = 0; - - original_width = width; - original = buf; - glTexImage2D(GL_TEXTURE_2D, level, components, width, - height, 0, GL_RGBA, GL_UNSIGNED_BYTE, - original); - while (width) { - reduced_width = width / 2; - for (global_comp = 0; global_comp < 4; global_comp++) { - filterzoom(getimgrow, putimgrow, width, height, width / 2, - height / 2, MITCHELL, 1.); - } - glTexImage2D(GL_TEXTURE_2D, ++level, components, width / 2, - height / 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, - reduced); - width /= 2, height /= 2; - memcpy(original, reduced, width * height * sizeof(unsigned)); - original_width = width; - printf("build level %d\n", level); - } -} - -int width = 256, height = 256; -int grid_space = 4; - -void -init_textures(char *filename) -{ - unsigned *buf; - int components; - - if (filename) { - buf = read_texture(filename, &width, &height, &components); - if (buf == NULL) { - fprintf(stderr, "Error: Can't load image file \"%s\".\n", - filename); - exit(1); - } else { - printf("%d x %d texture loaded\n", width, height); - } - } else { - int i, j; - components = 4; - buf = (unsigned *) malloc(width * height * sizeof(unsigned)); - for (i = 0; i < height; i++) - for (j = 0; j < width; j++) - if ((i % grid_space) && (j % grid_space)) - buf[i * width + j] = 0xffffffff; - else - buf[i * width + j] = 0; - } - -#ifdef GL_EXT_texture_object - glBindTextureEXT(GL_TEXTURE_2D, 1); -#else - glNewList(1001, GL_COMPILE); -#endif - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, - GL_LINEAR_MIPMAP_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - gluBuild2DMipmaps(GL_TEXTURE_2D, components, width, height, GL_RGBA, - GL_UNSIGNED_BYTE, buf); -#ifndef GL_EXT_texture_object - glEndList(); -#endif - -#ifdef GL_EXT_texture_object - glBindTextureEXT(GL_TEXTURE_2D, 2); -#else - glNewList(1002, GL_COMPILE); -#endif - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - reduced = (unsigned *) malloc(width * height * sizeof(unsigned)); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, - GL_LINEAR_MIPMAP_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - buildMitchellMipmaps(components, width, height, buf); -#ifndef GL_EXT_texture_object - glEndList(); -#endif - - free(buf); - free(reduced); -} - -void -init(char *filename) -{ - glEnable(GL_TEXTURE_2D); - init_textures(filename); - glNewList(1, GL_COMPILE); - glColor3f(1., 1., 1.); - glBegin(GL_QUADS); - glTexCoord2f(0, 1); - glVertex3f(-4, 0, -10); - glTexCoord2f(1, 1); - glVertex3f(4, 0, -10); - glTexCoord2f(1, 0); - glVertex3f(4, 0, 3); - glTexCoord2f(0, 0); - glVertex3f(-4, 0, 3); - glEnd(); - glEndList(); - glClearColor(.2, 0, .9, 0); -} - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - - glViewport(0, 0, w / 2, h); -#ifdef GL_EXT_texture_object - glBindTextureEXT(GL_TEXTURE_2D, 1); -#else - glCallList(1001); -#endif - glCallList(1); - - glViewport(w / 2, 0, w / 2, h); -#ifdef GL_EXT_texture_object - glBindTextureEXT(GL_TEXTURE_2D, 2); -#else - glCallList(1002); -#endif - glCallList(1); - glutSwapBuffers(); -} - -void -idle(void) -{ - glRotatef(.1, 1, 0, 0); - glutPostRedisplay(); -} - -void -bidle(void) -{ - glRotatef(-.1, 1, 0, 0); - glutPostRedisplay(); -} - -/* ARGSUSED1 */ -void -mouse(int button, int state, int x, int y) -{ - if (state == GLUT_DOWN) { - switch (button) { - case GLUT_LEFT_BUTTON: - glutIdleFunc(idle); - break; - case GLUT_MIDDLE_BUTTON: - glutIdleFunc(bidle); - break; - case GLUT_RIGHT_BUTTON: - break; - } - } else { - glutIdleFunc(NULL); - } -} - -void -help(void) -{ - printf("'h' - help\n"); - printf("'g' - increase line spacing\n"); - printf("'G' - decrease line spacing\n"); - printf("'s' - double texture dimensions\n"); - printf("'S' - halve texture dimensions\n"); -} - -char *filename; - -/* ARGSUSED1 */ -void -key(unsigned char key, int x, int y) -{ - switch (key) { - case 'h': - help(); - break; - case 'g': - grid_space++; - init_textures(filename); - printf("grid spacing %d\n", grid_space); - break; - case 'G': - grid_space--; - if (grid_space <= 0) - grid_space = 1; - init_textures(filename); - printf("grid spacing %d\n", grid_space); - break; - case 's': - height = width *= 2; - if (height > 1024) - height = width = 1024; - init_textures(filename); - printf("texture size %d\n", height); - break; - case 'S': - height = width /= 2; - init_textures(filename); - printf("texture size %d\n", height); - break; - default: - return; - case '\033': - exit(0); - break; - } - glutPostRedisplay(); -} - -int -main(int argc, char *argv[]) -{ - glutInit(&argc, argv); - glutInitWindowSize(w, h); - glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); - (void) glutCreateWindow("Left: GLU mipmaps, Right: Mitchell mipmaps"); - if (argc > 1) - init(filename = argv[1]); - else - init(filename = 0); - glutDisplayFunc(display); - glutKeyboardFunc(key); - glutReshapeFunc(reshape); - glutMouseFunc(mouse); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/advanced/mipmap_lines.dsp b/lib/glut-3.7.6/progs/advanced/mipmap_lines.dsp deleted file mode 100644 index 7237f5553..000000000 --- a/lib/glut-3.7.6/progs/advanced/mipmap_lines.dsp +++ /dev/null @@ -1,104 +0,0 @@ -# Microsoft Developer Studio Project File - Name="mipmap_lines" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=mipmap_lines - 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 "mipmap_lines.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 "mipmap_lines.mak" CFG="mipmap_lines - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "mipmap_lines - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "mipmap_lines - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "mipmap_lines - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "mipmap_lines - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "mipmap_lines - Win32 Release" -# Name "mipmap_lines - Win32 Debug" -# Begin Source File - -SOURCE=.\izoom.c -# End Source File -# Begin Source File - -SOURCE=.\izoom.h -# End Source File -# Begin Source File - -SOURCE=.\mipmap_lines.c -# End Source File -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# Begin Source File - -SOURCE=.\texture.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced/motionblur.c b/lib/glut-3.7.6/progs/advanced/motionblur.c deleted file mode 100644 index 1e9f3264b..000000000 --- a/lib/glut-3.7.6/progs/advanced/motionblur.c +++ /dev/null @@ -1,241 +0,0 @@ - -/* motionblur.c - by Tom McReynolds, SGI */ - -/* Using the accumulation buffer for motion blur. */ - -#include -#include -#include - -const GLdouble FRUSTDIM = 100.f; -const GLdouble FRUSTNEAR = 320.f; -const GLdouble FRUSTFAR = 660.f; - -/* -** Create a single component texture map -*/ -GLfloat *make_texture(int maxs, int maxt) -{ - int s, t; - static GLfloat *texture; - - texture = (GLfloat *)malloc(maxs * maxt * sizeof(GLfloat)); - for(t = 0; t < maxt; t++) { - for(s = 0; s < maxs; s++) { - texture[s + maxs * t] = ((s >> 4) & 0x1) ^ ((t >> 4) & 0x1); - } - } - return texture; -} - -enum {SPHERE = 1, CONE}; - -void -render(GLfloat dx, GLfloat dy, GLfloat dz) -{ - /* material properties for objects in scene */ - static GLfloat wall_mat[] = {1.f, 1.f, 1.f, 1.f}; - - glClear(GL_DEPTH_BUFFER_BIT|GL_COLOR_BUFFER_BIT); - - /* - ** Note: wall verticies are ordered so they are all front facing - ** this lets me do back face culling to speed things up. - */ - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, wall_mat); - - /* floor */ - /* make the floor textured */ - glEnable(GL_TEXTURE_2D); - - /* - ** Since we want to turn texturing on for floor only, we have to - ** make floor a separate glBegin()/glEnd() sequence. You can't - ** turn texturing on and off between begin and end calls - */ - glBegin(GL_QUADS); - glNormal3f(0.f, 1.f, 0.f); - glTexCoord2i(0, 0); - glVertex3f(-100.f, -100.f, -320.f); - glTexCoord2i(1, 0); - glVertex3f( 100.f, -100.f, -320.f); - glTexCoord2i(1, 1); - glVertex3f( 100.f, -100.f, -640.f); - glTexCoord2i(0, 1); - glVertex3f(-100.f, -100.f, -640.f); - glEnd(); - - glDisable(GL_TEXTURE_2D); - - /* walls */ - - glBegin(GL_QUADS); - /* left wall */ - glNormal3f(1.f, 0.f, 0.f); - glVertex3f(-100.f, -100.f, -320.f); - glVertex3f(-100.f, -100.f, -640.f); - glVertex3f(-100.f, 100.f, -640.f); - glVertex3f(-100.f, 100.f, -320.f); - - /* right wall */ - glNormal3f(-1.f, 0.f, 0.f); - glVertex3f( 100.f, -100.f, -320.f); - glVertex3f( 100.f, 100.f, -320.f); - glVertex3f( 100.f, 100.f, -640.f); - glVertex3f( 100.f, -100.f, -640.f); - - /* ceiling */ - glNormal3f(0.f, -1.f, 0.f); - glVertex3f(-100.f, 100.f, -320.f); - glVertex3f(-100.f, 100.f, -640.f); - glVertex3f( 100.f, 100.f, -640.f); - glVertex3f( 100.f, 100.f, -320.f); - - /* back wall */ - glNormal3f(0.f, 0.f, 1.f); - glVertex3f(-100.f, -100.f, -640.f); - glVertex3f( 100.f, -100.f, -640.f); - glVertex3f( 100.f, 100.f, -640.f); - glVertex3f(-100.f, 100.f, -640.f); - glEnd(); - - - glPushMatrix(); - glTranslatef(-80.f + dx, -60.f + dy, -420.f + dz); - glCallList(SPHERE); - glPopMatrix(); - - - glPushMatrix(); - glTranslatef(-20.f, -80.f, -600.f); - glCallList(CONE); - glPopMatrix(); - - if(glGetError()) /* to catch programming errors; should never happen */ - printf("Oops! I screwed up my OpenGL calls somewhere\n"); - - glFlush(); /* high end machines may need this */ -} - -enum {NONE, FIELD}; - -int rendermode = NONE; - -void -menu(int selection) -{ - rendermode = selection; - glutPostRedisplay(); -} - -GLdouble focus = 420.; - -/* Called when window needs to be redrawn */ -void redraw(void) -{ - int i; - int max; - GLfloat dx, dy, dz; - - dx = .5f; - dy = 1.f; - dz = -2.f; - - glPushMatrix(); - switch(rendermode) { - case NONE: - render(0.f, 0.f, 0.f); - break; - case FIELD: - max = 16; - - glClear(GL_ACCUM_BUFFER_BIT); - - for(i = 0; i < max; i++) { - render(dx * i, dy * i, dz * i); - glAccum(GL_ACCUM, 1.f/max); - } - glAccum(GL_RETURN, 1.f); - break; - } - - glPopMatrix(); - glutSwapBuffers(); -} - -/* ARGSUSED1 */ -void key(unsigned char key, int x, int y) -{ - if(key == '\033') - exit(0); -} - -const int TEXDIM = 256; -/* Parse arguments, and set up interface between OpenGL and window system */ -int -main(int argc, char *argv[]) -{ - GLfloat *tex; - static GLfloat lightpos[] = {50.f, 50.f, -320.f, 1.f}; - static GLfloat sphere_mat[] = {1.f, .5f, 0.f, 1.f}; - static GLfloat cone_mat[] = {0.f, .5f, 1.f, 1.f}; - GLUquadricObj *sphere, *cone, *base; - - glutInit(&argc, argv); - glutInitWindowSize(512, 512); - glutInitDisplayMode(GLUT_RGBA|GLUT_DEPTH|GLUT_ACCUM|GLUT_DOUBLE); - (void)glutCreateWindow("motion blur"); - glutDisplayFunc(redraw); - glutKeyboardFunc(key); - - glutCreateMenu(menu); - glutAddMenuEntry("Normal", NONE); - glutAddMenuEntry("Motion Blur", FIELD); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - /* draw a perspective scene */ - glMatrixMode(GL_PROJECTION); - glFrustum(-FRUSTDIM, FRUSTDIM, -FRUSTDIM, FRUSTDIM, FRUSTNEAR, FRUSTFAR); - glMatrixMode(GL_MODELVIEW); - - /* turn on features */ - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - - /* place light 0 in the right place */ - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - - /* remove back faces to speed things up */ - glCullFace(GL_BACK); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - - glNewList(SPHERE, GL_COMPILE); - /* make display lists for sphere and cone; for efficiency */ - sphere = gluNewQuadric(); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, sphere_mat); - gluSphere(sphere, 20.f, 20, 20); - gluDeleteQuadric(sphere); - glEndList(); - - glNewList(CONE, GL_COMPILE); - cone = gluNewQuadric(); - base = gluNewQuadric(); - glRotatef(-90.f, 1.f, 0.f, 0.f); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, cone_mat); - gluDisk(base, 0., 20., 20, 1); - gluCylinder(cone, 20., 0., 60., 20, 20); - gluDeleteQuadric(cone); - gluDeleteQuadric(base); - glEndList(); - - /* load pattern for current 2d texture */ - tex = make_texture(TEXDIM, TEXDIM); - glTexImage2D(GL_TEXTURE_2D, 0, 1, TEXDIM, TEXDIM, 0, GL_RED, GL_FLOAT, tex); - free(tex); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/advanced/motionblur.dsp b/lib/glut-3.7.6/progs/advanced/motionblur.dsp deleted file mode 100644 index 6b91f4188..000000000 --- a/lib/glut-3.7.6/progs/advanced/motionblur.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="motionblur" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=motionblur - 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 "motionblur.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 "motionblur.mak" CFG="motionblur - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "motionblur - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "motionblur - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "motionblur - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "motionblur - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "motionblur - Win32 Release" -# Name "motionblur - Win32 Debug" -# Begin Source File - -SOURCE=.\motionblur.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced/multilight.c b/lib/glut-3.7.6/progs/advanced/multilight.c deleted file mode 100644 index 8d8272357..000000000 --- a/lib/glut-3.7.6/progs/advanced/multilight.c +++ /dev/null @@ -1,536 +0,0 @@ - -/* 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. */ - -/* This program demonstrates virtualization of OpenGL's lights. The idea is - that if an object is lit by many lights, it is computationally more - efficient to calculate the approximate lighting contribution of the - various lights per-object and only enable the "brightest" lights while - rendering the object. This also lets you render scenes with more lights - than the OpenGL implementation light (usually 8). Two approaches are - used: The "distance-based" approach only enables the 8 closest lights - based purely on distance. The "Lambertian-based" approach accounts for - diffuse lighting contributions and approximates the diffuse contribution. */ - -#include -#include -#include -#include -#include - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -#define MIN_VALUE(a,b) (((a)<(b))?(a):(b)) -#define MAX_VALUE(a,b) (((a)>(b))?(a):(b)) - -enum { - DL_LIGHT_SPHERE = 1, - DL_BIG_SPHERE = 2, - DL_ICO = 3 -}; - -enum { - M_SPHERE, M_ICO, M_LABELS, M_LINEAR, M_QUAD, M_REPORT_SIG, - M_LAMBERTIAN, M_DISTANCE, M_TIME -}; - -typedef struct _LightInfo { - GLfloat xyz[4]; - GLfloat *rgb; - int enable; -} LightInfo; - -typedef struct _LightBrightness { - int num; - GLfloat brightness; -} LightBrightness; - -static int animation = 1; -static int labelLights = 1; -static int reportLightSignificance = 0; -static int brightnessModel = M_LAMBERTIAN; -static int numActiveLights; -static int timeFrames = 0; -static int singleBuffer = 0; -/* *INDENT-OFF* */ - -static GLfloat modelAmb[4] = {0.1, 0.1, 0.1, 1.0}; -static GLfloat matAmb[4] = {0.2, 0.2, 0.2, 1.0}; -static GLfloat matDiff[4] = {0.8, 0.8, 0.8, 1.0}; -static GLfloat matSpec[4] = {0.4, 0.4, 0.4, 1.0}; -static GLfloat matEmission[4] = {0.0, 0.0, 0.0, 1.0}; - -GLfloat red[] = {1.0, 0.0, 0.0, 1.0}; -GLfloat green[] = {0.0, 1.0, 0.0, 1.0}; -GLfloat blue[] = {0.0, 0.0, 1.0, 1.0}; -GLfloat yellow[] = {1.0, 1.0, 0.0, 1.0}; -GLfloat magenta[] = {1.0, 0.0, 1.0, 1.0}; -GLfloat white[] = {1.0, 1.0, 1.0, 1.0}; -GLfloat dim[] = {0.5, 0.5, 0.5, 1.0}; - -LightInfo linfo[] = { - { {-4.0, 0.0, -10.0, 1.0}, yellow}, - { {4.0, 0.0, -10.0, 1.0}, green}, - { {-4.0, 0.0, -6.0, 1.0}, red}, - { {4.0, 0.0, -6.0, 1.0}, blue}, - { {-4.0, 0.0, -2.0, 1.0}, green}, - { {4.0, 0.0, -2.0, 1.0}, yellow}, - { {-4.0, 0.0, 2.0, 1.0}, blue}, - { {4.0, 0.0, 2.0, 1.0}, red}, - { {-4.0, 0.0, 6.0, 1.0}, yellow}, - { {4.0, 0.0, 6.0, 1.0}, green}, - { {-4.0, 0.0, 10.0, 1.0}, red}, - { {4.0, 0.0, 10.0, 1.0}, blue}, -}; - -int lightState[8] = {1, 1, 1, 1, 1, 1, 1, 1}; -/* *INDENT-ON* */ - -#define MAX_LIGHTS (sizeof(linfo)/sizeof(linfo[0])) - -int moving = 0, begin; -GLfloat angle = 0.0; -int object = M_SPHERE; -int attenuation = M_QUAD; -GLfloat t = 0.0; - -void -initLight(int num) -{ - glLightf(GL_LIGHT0 + num, GL_CONSTANT_ATTENUATION, 0.0); - if (attenuation == M_LINEAR) { - glLightf(GL_LIGHT0 + num, GL_LINEAR_ATTENUATION, 0.4); - glLightf(GL_LIGHT0 + num, GL_QUADRATIC_ATTENUATION, 0.0); - } else { - glLightf(GL_LIGHT0 + num, GL_LINEAR_ATTENUATION, 0.0); - glLightf(GL_LIGHT0 + num, GL_QUADRATIC_ATTENUATION, 0.1); - } - glLightfv(GL_LIGHT0 + num, GL_SPECULAR, dim); -} - -/* Draw a sphere the same color as the light at the light position so it is - easy to tell where the positional light sources are. */ -void -drawLight(LightInfo * info) -{ - glPushMatrix(); - glTranslatef(info->xyz[0], info->xyz[1], info->xyz[2]); - glColor3fv(info->rgb); - glCallList(DL_LIGHT_SPHERE); - glPopMatrix(); -} - -/* Place the light's OpenGL light number next to the light's sphere. To - ensure a readable number with good contrast, a black version of the number - is drawn shifted a pixel to the left and right of the actual white number. - */ -void -labelLight(LightInfo * info, int num) -{ - GLubyte nothin = 0; - void *font = GLUT_BITMAP_HELVETICA_18; - int width = glutBitmapWidth(font, '0' + num); - - glPushMatrix(); - glColor3f(0.0, 0.0, 0.0); - glRasterPos3f(info->xyz[0], info->xyz[1], info->xyz[2]); - glBitmap(1, 1, 0, 0, 4, 5, ¬hin); - glutBitmapCharacter(font, '0' + num); - - glBitmap(1, 1, 0, 0, 2 - width, 0, ¬hin); - glutBitmapCharacter(font, '0' + num); - - if (lightState[num]) { - glColor3fv(white); - } else { - /* Draw disabled lights dimmer. */ - glColor3fv(dim); - } - glRasterPos3f(info->xyz[0], info->xyz[1], info->xyz[2]); - glBitmap(1, 1, 0, 0, 5, 5, ¬hin); - glutBitmapCharacter(font, '0' + num); - glPopMatrix(); -} - -/* Comparison routine used by qsort. */ -int -lightBrightnessCompare(const void *a, const void *b) -{ - LightBrightness *ld1 = (LightBrightness *) a; - LightBrightness *ld2 = (LightBrightness *) b; - GLfloat diff; - - /* The brighter lights get sorted close to top of the list. */ - diff = ld2->brightness - ld1->brightness; - - if (diff > 0) - return 1; - if (diff < 0) - return -1; - return 0; -} - -void -display(void) -{ - int i; - GLfloat x, y, z; - LightBrightness ld[MAX_LIGHTS]; - int start, end; - - if (timeFrames) { - start = glutGet(GLUT_ELAPSED_TIME); - } - x = cos(t * 12.3) * 2.0; - y = 0.0; - z = sin(t) * 7.0; - - for (i = 0; i < MAX_LIGHTS; i++) { - GLfloat dx, dy, dz; - GLfloat quadraticAttenuation; - - /* Calculate object to light position vector. */ - dx = (linfo[i].xyz[0] - x); - dy = (linfo[i].xyz[1] - y); - dz = (linfo[i].xyz[2] - z); - - quadraticAttenuation = dx * dx + dy * dy + dz * dz; - - if (brightnessModel == M_LAMBERTIAN) { - /* Lambertian surface-based brightness determination. */ - GLfloat ex, ey, ez; - GLfloat nx, ny, nz; - GLfloat distance; - GLfloat diffuseReflection; - - /* Determine eye point location (remember we can rotate by angle). */ - ex = 16.0 * sin(angle * M_PI / 180.0); - ey = 1.0; - ez = 16.0 * -cos(angle * M_PI / 180.0); - - /* Calculated normalized object to eye position direction (nx,ny,nz). */ - nx = (ex - x); - ny = (ey - y); - nz = (ez - z); - distance = sqrt(nx * nx + ny * ny + nz * nz); - nx = nx / distance; - ny = ny / distance; - nz = nz / distance; - - /* True distance needed, take square root. */ - distance = sqrt(quadraticAttenuation); - - /* Calculate normalized object to light postition direction (dx,dy,dz). - */ - dx = dx / distance; - dy = dy / distance; - dz = dz / distance; - - /* Dot product of object->eye and object->light source directions. - OpenGL's lighting equations actually force the diffuse contribution - to be zero if the dot product is less than zero. For our purposes, - that's too strict since we are approximating the entire object with - a single object-to-eye normal. */ - diffuseReflection = nx * dx + ny * dy + nz * dz; - if (attenuation == M_QUAD) { - /* Attenuate based on square of distance. */ - ld[i].brightness = diffuseReflection / quadraticAttenuation; - } else { - /* Attenuate based on linear distance. */ - ld[i].brightness = diffuseReflection / distance; - } - } else { - /* Distance-based brightness determination. */ - - /* In theory, we are really determining brightness based on just the - linear distance of the light source, but since we are just doing - comparisons, there is no reason to waste time doing a square root. */ - - /* Negation makes sure closer distances are "bigger" than further - distances for sorting. */ - ld[i].brightness = -quadraticAttenuation; - } - ld[i].num = i; - } - - /* Sort the lights so that the "brightest" are listed first. We really - want to just determine the first numActiveLights so a full sort is - overkill. */ - qsort(ld, MAX_LIGHTS, sizeof(ld[0]), lightBrightnessCompare); - - if (reportLightSignificance) { - printf("\n"); - for (i = 0; i < MAX_LIGHTS; i++) { - printf("%d: dist = %g\n", ld[i].num, ld[i].brightness); - } - } - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glPushMatrix(); - glRotatef(angle, 0.0, 1.0, 0.0); - - glDisable(GL_LIGHTING); - for (i = 0; i < MAX_LIGHTS; i++) { - drawLight(&linfo[i]); - } - - /* After sorting, the first numActiveLights (ie, <8) light sources are the - light sources with the biggest contribution to the object's lighting. - Assign these "virtual lights of significance" to OpenGL's actual - available light sources. */ - - glEnable(GL_LIGHTING); - for (i = 0; i < numActiveLights; i++) { - if (lightState[i]) { - int num = ld[i].num; - - glLightfv(GL_LIGHT0 + i, GL_POSITION, linfo[num].xyz); - glLightfv(GL_LIGHT0 + i, GL_DIFFUSE, linfo[num].rgb); - glEnable(GL_LIGHT0 + i); - } else { - glDisable(GL_LIGHT0 + i); - } - } - - glPushMatrix(); - glTranslatef(x, y, z); - switch (object) { - case M_SPHERE: - glCallList(DL_BIG_SPHERE); - break; - case M_ICO: - glCallList(DL_ICO); - break; - } - glPopMatrix(); - - if (labelLights) { - glDisable(GL_DEPTH_TEST); - glDisable(GL_LIGHTING); - for (i = 0; i < numActiveLights; i++) { - labelLight(&linfo[ld[i].num], i); - } - glEnable(GL_DEPTH_TEST); - } - glPopMatrix(); - - if (timeFrames) { - glFinish(); - end = glutGet(GLUT_ELAPSED_TIME); - printf("Speed %.3g frames/sec (%d ms)\n", - 1000.0 / (end - start), end - start); - } - if (!singleBuffer) { - glutSwapBuffers(); - } -} - -void -idle(void) -{ - t += 0.005; - glutPostRedisplay(); -} - -/* When not visible, stop animating. Restart when visible again. */ -static void -visible(int vis) -{ - if (vis == GLUT_VISIBLE) { - if (animation) - glutIdleFunc(idle); - } else { - if (!animation) - glutIdleFunc(NULL); - } -} - -/* Press any key to redraw; good when motion stopped and performance - reporting on. */ -/* ARGSUSED */ -static void -key(unsigned char c, int x, int y) -{ - int i; - - switch (c) { - case 27: - exit(0); /* IRIS GLism, Escape quits. */ - break; - case ' ': - animation = 1 - animation; - if (animation) - glutIdleFunc(idle); - else - glutIdleFunc(NULL); - break; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - lightState[c - '0'] = 1 - lightState[c - '0']; - break; - case 13: - for (i = 0; i < numActiveLights; i++) { - lightState[i] = 1; - } - break; - } - glutPostRedisplay(); -} - -/* ARGSUSED3 */ -void -mouse(int button, int state, int x, int y) -{ - if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) { - moving = 1; - begin = x; - } - if (button == GLUT_LEFT_BUTTON && state == GLUT_UP) { - moving = 0; - } -} - -/* ARGSUSED1 */ -void -motion(int x, int y) -{ - if (moving) { - angle = angle + (x - begin); - begin = x; - glutPostRedisplay(); - } -} - -void -menu(int value) -{ - int i; - - switch (value) { - case M_SPHERE: - object = M_SPHERE; - break; - case M_ICO: - object = M_ICO; - break; - case M_LABELS: - labelLights = 1 - labelLights; - break; - case M_LINEAR: - case M_QUAD: - attenuation = value; - for (i = 0; i < numActiveLights; i++) { - initLight(i); - } - break; - case M_REPORT_SIG: - reportLightSignificance = 1 - reportLightSignificance; - break; - case M_LAMBERTIAN: - brightnessModel = M_LAMBERTIAN; - glutSetWindowTitle("multilight (Lambertian-based)"); - break; - case M_DISTANCE: - brightnessModel = M_DISTANCE; - glutSetWindowTitle("multilight (Distance-based)"); - break; - case M_TIME: - timeFrames = 1 - timeFrames; - break; - case 666: - exit(0); - } - glutPostRedisplay(); -} - -int -main(int argc, char **argv) -{ - int i; - - glutInitWindowSize(400, 200); - glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH | GLUT_MULTISAMPLE); - glutInit(&argc, argv); - - for (i = 1; i < argc; i++) { - if (!strcmp("-sb", argv[i])) { - glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_MULTISAMPLE); - singleBuffer = 1; - } - } - - glutCreateWindow("multilight"); - - glClearColor(0.0, 0.0, 0.0, 0.0); - - glMatrixMode(GL_PROJECTION); - gluPerspective(50.0, 2.0, 0.1, 100.0); - glMatrixMode(GL_MODELVIEW); - gluLookAt( - 0.0, 1.0, -16.0, - 0.0, 0.0, 0.0, - 0.0, 1.0, 0.); - - numActiveLights = MIN_VALUE(MAX_LIGHTS, 8); - for (i = 0; i < numActiveLights; i++) { - initLight(i); - } - - glLightModelfv(GL_LIGHT_MODEL_AMBIENT, modelAmb); - glLightModelf(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE); - glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE); - glEnable(GL_CULL_FACE); - glEnable(GL_DEPTH_TEST); - - glMaterialfv(GL_FRONT, GL_AMBIENT, matAmb); - glMaterialfv(GL_FRONT, GL_DIFFUSE, matDiff); - glMaterialfv(GL_FRONT, GL_SPECULAR, matSpec); - glMaterialfv(GL_FRONT, GL_EMISSION, matEmission); - glMaterialf(GL_FRONT, GL_SHININESS, 10.0); - - glNewList(DL_LIGHT_SPHERE, GL_COMPILE); - glutSolidSphere(0.2, 4, 4); - glEndList(); - - glNewList(DL_BIG_SPHERE, GL_COMPILE); - glutSolidSphere(1.5, 20, 20); - glEndList(); - - glNewList(DL_ICO, GL_COMPILE); - glutSolidIcosahedron(); - glEndList(); - - glutDisplayFunc(display); - glutVisibilityFunc(visible); - glutKeyboardFunc(key); - glutMouseFunc(mouse); - glutMotionFunc(motion); - - glutCreateMenu(menu); - glutAddMenuEntry("Sphere", M_SPHERE); - glutAddMenuEntry("Icosahedron", M_ICO); - glutAddMenuEntry("Linear attenuation", M_LINEAR); - glutAddMenuEntry("Quadratic attenuation", M_QUAD); - glutAddMenuEntry("Toggle Light Number Labels", M_LABELS); - glutAddMenuEntry("Report Light Significance", M_REPORT_SIG); - glutAddMenuEntry("Lambertian-based Significance", M_LAMBERTIAN); - glutAddMenuEntry("Distance-based Significance", M_DISTANCE); - glutAddMenuEntry("Time Frames", M_TIME); - glutAddMenuEntry("Quit", 666); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/advanced/multilight.dsp b/lib/glut-3.7.6/progs/advanced/multilight.dsp deleted file mode 100644 index df8f8cae5..000000000 --- a/lib/glut-3.7.6/progs/advanced/multilight.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="multilight" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=multilight - 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 "multilight.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 "multilight.mak" CFG="multilight - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "multilight - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "multilight - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "multilight - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "multilight - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "multilight - Win32 Release" -# Name "multilight - Win32 Debug" -# Begin Source File - -SOURCE=.\multilight.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced/nvidia_logo.c b/lib/glut-3.7.6/progs/advanced/nvidia_logo.c deleted file mode 100644 index 0bd583680..000000000 --- a/lib/glut-3.7.6/progs/advanced/nvidia_logo.c +++ /dev/null @@ -1,239 +0,0 @@ - -/* 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. */ - -#include -#include -#include - -GLfloat nvlogo0[][2] = { - { -0.474465, -1.259490 }, - { 0.115919, -1.113297 }, - { 0.588227, -0.899634 }, - { 0.942455, -0.652235 }, - { 1.296687, -0.348609 }, - { 1.690275, -0.033738 }, - { 1.926431, 0.269888 }, - { 2.123226, 0.494796 }, - { 1.847713, 0.832160 }, - { 1.532842, 1.124540 }, - { 1.178611, 1.394430 }, - { 0.706303, 1.709300 }, - { 0.076562, 1.967940 }, - { -0.395747, 2.080400 }, - { -1.064784, 2.058940 }, - { -1.064847, 2.811350 }, - { 3.973113, 2.811350 }, - { 3.973113, -2.811350 }, - { -1.025490, -2.811350 }, - { -1.025490, -2.159120 }, - { -0.474465, -2.159120 }, - { 0.155277, -2.102890 }, - { 0.706303, -1.979190 }, - { 1.178611, -1.833000 }, - { 1.690275, -1.653080 }, - { 2.201941, -1.450660 }, - { 2.674248, -1.214510 }, - { 3.107212, -0.955861 }, - { 3.343357, -0.719707 }, - { 2.438097, -0.179928 }, - { 2.005147, -0.517290 }, - { 1.690275, -0.820916 }, - { 1.296687, -1.079560 }, - { 0.863740, -1.338200 }, - { 0.273356, -1.585600 }, - { -0.198952, -1.709300 }, - { -1.025490, -1.731790 }, - { -1.025490, -1.248240 }, -}; -GLfloat nvlogo1[][2] = { - { -0.493508, 0.560265 }, - { -0.233835, 0.218981 }, - { -0.078033, -0.107463 }, - { 0.545180, 0.441557 }, - { 0.285509, 0.753164 }, - { -0.129966, 1.005420 }, - { -0.545442, 1.153800 }, - { -1.034999, 1.167860 }, - { -1.064784, 1.658310 }, - { -0.233835, 1.598950 }, - { 0.233576, 1.361540 }, - { 0.649050, 1.094450 }, - { 1.012591, 0.753164 }, - { 1.324197, 0.426719 }, - { 1.064524, 0.189305 }, - { 0.804852, -0.166817 }, - { 0.389378, -0.508100 }, - { -0.078033, -0.745515 }, - { -0.441573, -0.879060 }, - { -1.013530, -0.889070 }, - { -1.012851, 0.723487 }, -}; -GLfloat nvlogo2[][2] = { - { -1.025490, -2.159120 }, - { -1.843800, -1.962260 }, - { -2.415081, -1.635820 }, - { -2.934425, -1.205510 }, - { -3.297966, -0.760353 }, - { -3.609571, -0.315201 }, - { -3.869244, 0.204143 }, - { -3.973113, 0.545426 }, - { -3.505702, 0.960900 }, - { -2.830556, 1.435730 }, - { -2.051539, 1.851210 }, - { -1.064784, 2.058940 }, - { -1.064784, 1.658310 }, - { -1.791868, 1.495080 }, - { -2.363145, 1.183480 }, - { -2.830556, 0.842190 }, - { -3.194097, 0.471234 }, - { -3.090228, 0.055759 }, - { -2.830556, -0.315201 }, - { -2.570884, -0.760353 }, - { -2.103473, -1.220340 }, - { -1.584129, -1.531950 }, - { -1.025490, -1.731790 }, -}; -GLfloat nvlogo3[][2] = { - { -1.025490, -1.248240 }, - { -1.472016, -1.099371 }, - { -1.794030, -0.875934 }, - { -2.047038, -0.606495 }, - { -2.254046, -0.337056 }, - { -2.415053, -0.047902 }, - { -2.530060, 0.260968 }, - { -2.392054, 0.536978 }, - { -2.047038, 0.806418 }, - { -1.633023, 1.016710 }, - { -1.034999, 1.167860 }, - { -1.012851, 0.723487 }, - { -1.380012, 0.681555 }, - { -1.610022, 0.530407 }, - { -1.863033, 0.326685 }, - { -1.909033, 0.076960 }, - { -1.748027, -0.159620 }, - { -1.541019, -0.448774 }, - { -1.311010, -0.685355 }, - { -1.013530, -0.889070 }, -}; - -#define SIZE(a) (sizeof(a)/sizeof(a[0])) - -void -extrudeSolidFromPolygon(GLfloat data[][2], unsigned int dataSize, - GLdouble thickness, GLuint side, GLuint edge, GLuint whole, - float breakAngle) -{ - static GLUtriangulatorObj *tobj = NULL; - GLdouble vertex[3], dx, dy, len; - GLdouble ndx, ndy, ondx, ondy, dot; - int i; - int count = (int) (dataSize / (2 * sizeof(GLfloat))); - - if (tobj == NULL) { - tobj = gluNewTess(); /* create and initialize a GLU - polygon tesselation object */ - gluTessCallback(tobj, GLU_BEGIN, glBegin); - gluTessCallback(tobj, GLU_VERTEX, glVertex2fv); /* semi-tricky */ - gluTessCallback(tobj, GLU_END, glEnd); - } - glNewList(side, GL_COMPILE); - gluBeginPolygon(tobj); - for (i = 0; i < count; i++) { - vertex[0] = data[i][0]; - vertex[1] = data[i][1]; - vertex[2] = 0; - gluTessVertex(tobj, vertex, data[i]); - } - gluEndPolygon(tobj); - glEndList(); - glNewList(edge, GL_COMPILE); - glBegin(GL_QUAD_STRIP); - - dx = data[0][1] - data[-1 % count][1]; - dy = data[-1 % count][0] - data[0][0]; - len = sqrt(dx * dx + dy * dy); - ondx = dx / len; - ondy = dy / len; - - for (i = 0; i <= count; i++) { - /* mod function handles closing the edge */ - /* Calculate a unit normal by dividing by Euclidean - distance. We could be lazy and use - glEnable(GL_NORMALIZE) so we could pass in arbitrary - normals for a very slight performance hit. */ - dx = data[(i + 1) % count][1] - data[i % count][1]; - dy = data[i % count][0] - data[(i +1) % count][0]; - len = sqrt(dx * dx + dy * dy); - ndx = dx / len; - ndy = dy / len; - - dot = fabs(acos(ndx * ondx + ndy * ondy) * 180.0/3.14159); - - if (dot > breakAngle) { - glVertex3f(data[i % count][0], data[i % count][1], thickness); - glVertex3f(data[i % count][0], data[i % count][1], 0.0); - glNormal3f(ndx, ndy, 0.0); - } else { - GLdouble adx, ady, nadx, nady; - - adx = ndx + ondx; - ady = ndy + ondy; - len = sqrt(adx*adx + ady*ady); - nadx = adx / len; - nady = ady / len; - glNormal3f(nadx, nady, 0.0); - } - glVertex3f(data[i % count][0], data[i % count][1], thickness); - glVertex3f(data[i % count][0], data[i % count][1], 0.0); - - ondx = ndx; - ondy = ndy; - } - glEnd(); - glEndList(); - glNewList(whole, GL_COMPILE); - - glFrontFace(GL_CW); - glCallList(edge); - - glPushMatrix(); - glTranslatef(0.0, 0.0, thickness); - glFrontFace(GL_CW); - glNormal3f(0.0, 0.0, 1.0); /* opposite normal for other side */ - glCallList(side); - glPopMatrix(); - - glFrontFace(GL_CCW); - glNormal3f(0.0, 0.0, -1.0); /* constant normal for side */ - glCallList(side); - - glEndList(); -} - -GLuint -makeNVidiaLogo(GLuint dlistBase) -{ - const float extrudeWidth = 1.0; - const float breakAngle = 30.0; - - extrudeSolidFromPolygon(nvlogo0, sizeof(nvlogo0), extrudeWidth, - dlistBase+1, dlistBase+2, dlistBase+3, breakAngle); - extrudeSolidFromPolygon(nvlogo1, sizeof(nvlogo1), extrudeWidth, - dlistBase+4, dlistBase+5, dlistBase+6, breakAngle); - extrudeSolidFromPolygon(nvlogo2, sizeof(nvlogo2), extrudeWidth, - dlistBase+7, dlistBase+8, dlistBase+9, breakAngle); - extrudeSolidFromPolygon(nvlogo3, sizeof(nvlogo3), extrudeWidth, - dlistBase+10, dlistBase+11, dlistBase+12, breakAngle); - glNewList(dlistBase, GL_COMPILE); - glCallList(dlistBase+3); - glCallList(dlistBase+6); - glCallList(dlistBase+9); - glCallList(dlistBase+12); - glEndList(); - return dlistBase; -} - diff --git a/lib/glut-3.7.6/progs/advanced/occlude.c b/lib/glut-3.7.6/progs/advanced/occlude.c deleted file mode 100644 index 994e59053..000000000 --- a/lib/glut-3.7.6/progs/advanced/occlude.c +++ /dev/null @@ -1,488 +0,0 @@ - -/* 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. */ - -/* This program demonstrates an OpenGL histogram extension based algorithm - for occlusion culling. Occlusion culling tries to speed rendering by - quickly determine what objects that are in the view frustrum are not - actually visible because they are occluded by other objects in the scene. - If object occlusion can be quickly determined, you can save time by simply - not rendering occluded objects. */ - -/* cc -o occlude occlude.c -lglut -lGL -lGLU -lXmu -lXext -lX11 -lm */ - -/* XXX Note that IMPACTs running IRIX 6.2 and earlier do not implement the - histogram extension over alpha correctly. The algorithm works correctly - on RealityEngine and InfiniteReality platforms. */ - -/* Hacked starting with the OpenGL programming Guide's scene.c */ - -#include -#include -#include -#include -#include - -#define TORUS 1 -#define TETRAHEDRON 2 -#define ICOSAHEDRON 3 - -int W = 250, H = 250; -int showBoxes = 0; -int single = 0; -int showHistogram = 0; -int showRate = 0; -int occlusionDectection = 1; -int nameOccludedTeapots = 1; -int noOcclude = 0; -int frames = 0; -int renderCount = 0, occludedCount = 0; - -void -output(GLfloat x, GLfloat y, char *format,...) -{ - va_list args; - char buffer[200], *p; - - va_start(args, format); - vsprintf(buffer, format, args); - va_end(args); - glPushMatrix(); - glTranslatef(x, y, 0); - for (p = buffer; *p; p++) - glutStrokeCharacter(GLUT_STROKE_ROMAN, *p); - glPopMatrix(); -} - -/* Initialize material property and light source. */ -void -myinit(void) -{ - GLfloat light_ambient[] = - {0.2, 0.2, 0.2, 1.0}; - GLfloat light_diffuse[] = - {1.0, 1.0, 1.0, 1.0}; - GLfloat light_specular[] = - {1.0, 1.0, 1.0, 1.0}; - GLfloat light_position[] = - {1.0, 1.0, 1.0, 0.0}; - - glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); - glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); - glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); - glLightfv(GL_LIGHT0, GL_POSITION, light_position); - - glEnable(GL_LIGHT0); - glDepthFunc(GL_LESS); - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - - glNewList(TORUS, GL_COMPILE); - glutSolidTorus(0.275, 0.85, 10, 15); - glEndList(); - glNewList(TETRAHEDRON, GL_COMPILE); - glutSolidTetrahedron(); - glEndList(); - glNewList(ICOSAHEDRON, GL_COMPILE); - glutSolidIcosahedron(); - glEndList(); - - /* Make sure we clear with alpha set to 1. */ - glClearColor(0, 0, 0, 1); - -#ifdef GL_EXT_histogram - /* Do a histogram on alpha with 8 bins; throw away the image data used when - computing the histogram. */ - glHistogramEXT(GL_HISTOGRAM_EXT, 8, GL_ALPHA, GL_TRUE); -#endif -} - -void -draw(void) -{ - glPushMatrix(); - glScalef(1.3, 1.3, 1.3); - glRotatef(23.0, 1.0, 0.0, 0.0); - - glPushMatrix(); - glTranslatef(-0.75, -0.5, 0.0); - glRotatef(270.0, 1.0, 0.0, 0.0); - glCallList(TETRAHEDRON); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(-0.75, 0.5, 0.0); - glRotatef(90.0, 1.0, 0.0, 0.0); - glCallList(TORUS); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(0.75, 0.0, -1.0); - glCallList(ICOSAHEDRON); - glPopMatrix(); - - glPopMatrix(); -} - -void -myortho(void) -{ - if (W <= H) - glOrtho(-2.5, 2.5, -2.5 * (GLfloat) H / (GLfloat) W, - 2.5 * (GLfloat) H / (GLfloat) W, -10.0, 10.0); - else - glOrtho(-2.5 * (GLfloat) W / (GLfloat) H, - 2.5 * (GLfloat) W / (GLfloat) H, -2.5, 2.5, -10.0, 10.0); -} - -GLint turn = 90; -int dir = -3; - -void -idle(void) -{ - /* Make the angle alternate back and forth. */ - turn += dir; - if (turn > 50) - dir = -3; - if (turn <= 0) - dir = 3; - glutPostRedisplay(); -} - -void -visible(int vis) -{ - if (vis == GLUT_VISIBLE) - glutIdleFunc(idle); - else - glutIdleFunc(NULL); -} - -void -boundingBox(void) -{ - glScalef(1.9 * .6, 1.3 * .6, 1.2 * .6); - glutSolidCube(0.9); -} - -void -teapot(void) -{ - glutSolidTeapot(0.3); -} - -typedef void (*RenderFunc) (void); - -void -render1(RenderFunc func) -{ - glPushMatrix(); - glTranslatef(-0.75, 0.5, 0.0); - glRotatef(turn, 0.0, 1.0, 0.0); - glTranslatef(3.0, 0.0, 0.0); - glColor4f(0, 1, 0, .25); - func(); - glPopMatrix(); -} - -void -render2(RenderFunc func) -{ - glPushMatrix(); - glTranslatef(-0.75, 0.5, 0.0); - glRotatef(turn + 30, 0.0, 1.0, 0.0); - glTranslatef(3.0, 0.0, 0.0); - glColor4f(1, 0, 0, .5); - func(); - glPopMatrix(); -} - -void -render3(RenderFunc func) -{ - glPushMatrix(); - glTranslatef(-0.75, 0.5, 0.0); - glRotatef(turn + 60, 0.0, 1.0, 0.0); - glTranslatef(3.0, 0.0, 0.0); - glColor4f(0, 0, 1, .0); - func(); - glPopMatrix(); -} - -void -render4(RenderFunc func) -{ - glPushMatrix(); - glTranslatef(-0.75, -0.75, 0.0); - glRotatef(turn + 60, 0.0, 1.0, 0.0); - glTranslatef(3.0, 0.0, 0.0); - glColor4f(1, 1, 0, .75); - func(); - glPopMatrix(); -} - -void -render5(RenderFunc func) -{ - glPushMatrix(); - glTranslatef(-0.75, -0.25, 0.0); - glRotatef(turn + 45, 0.0, 1.0, 0.0); - glTranslatef(3.0, 0.0, 0.0); - glColor4f(1, 0, 1, .12); - func(); - glPopMatrix(); -} - -void -display(void) -{ - int teapot1, teapot2, teapot3, teapot4, teapot5; - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - draw(); - - /* Draw all teapots. */ - teapot1 = teapot2 = teapot3 = teapot4 = teapot5 = 1; -#ifdef GL_EXT_histogram - if (occlusionDectection && !noOcclude) { - GLuint count_buffer[8]; - int i; - - glDisable(GL_LIGHTING); - if (!showBoxes) { - glDepthMask(GL_FALSE); - glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE); - } - /* Render the bounding box for each teapot. */ - render1(boundingBox); - render2(boundingBox); - render3(boundingBox); - render4(boundingBox); - render5(boundingBox); - - glEnable(GL_HISTOGRAM_EXT); - /* Sort of cheat. I know all the teapots move in the center horizontal - half of the screen so only take the histogram over that area instead - of the full window. */ - glCopyPixels(0, H / 4, W, H / 2, GL_COLOR); - glGetHistogramEXT(GL_HISTOGRAM_EXT, GL_TRUE, - GL_ALPHA, GL_UNSIGNED_INT, count_buffer); - glDisable(GL_HISTOGRAM_EXT); - if (showHistogram) { - printf("%2d: ", turn); - for (i = 0; i < 8; i++) - printf(" %7d", count_buffer[i]); - printf("\n"); - } - /* Get the count from each histogram bucket for each teapot's bounding - box. */ - teapot1 = count_buffer[2]; - teapot2 = count_buffer[3]; - teapot3 = count_buffer[0]; - teapot4 = count_buffer[5]; - teapot5 = count_buffer[1]; - - glEnable(GL_LIGHTING); - glDepthMask(GL_TRUE); - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - } -#endif - /* If each teapot needs to be drawn (ie, not occluded when occlusion - detection is enabled, draw it. */ - if (teapot1) { - render1(teapot); - renderCount++; - } else { - occludedCount++; - } - if (teapot2) { - render2(teapot); - renderCount++; - } else { - occludedCount++; - } - if (teapot3) { - render3(teapot); - renderCount++; - } else { - occludedCount++; - } - if (teapot4) { - render4(teapot); - renderCount++; - } else { - occludedCount++; - } - if (teapot5) { - render5(teapot); - renderCount++; - } else { - occludedCount++; - } - - /* To help see when occlusions take place, render the teapot number of each - - occluded teapot. */ - if (nameOccludedTeapots) { - if (!teapot1 || !teapot2 || !teapot3 || !teapot4 || !teapot5) { - glDisable(GL_DEPTH_TEST); - glDisable(GL_LIGHTING); - - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - gluOrtho2D(0, 3000, 0, 3000); - glMatrixMode(GL_MODELVIEW); - - glColor3f(1, 1, 0); /* Yellow text. */ - - if (!teapot1) { - glLoadIdentity(); - output(80, 2800, "1"); - } - if (!teapot2) { - glLoadIdentity(); - output(150, 2800, "2"); - } - if (!teapot3) { - glLoadIdentity(); - output(220, 2800, "3"); - } - if (!teapot4) { - glLoadIdentity(); - output(290, 2800, "4"); - } - if (!teapot5) { - glLoadIdentity(); - output(360, 2800, "5"); - } - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - } - } - if (!single) { - glutSwapBuffers(); - } else { - glFlush(); - } - frames++; -} - -void -reshape(int w, int h) -{ - W = w; - H = h; - glViewport(0, 0, W, H); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - myortho(); - glMatrixMode(GL_MODELVIEW); -} - -void -main_menu(int value) -{ - switch (value) { - case 666: - exit(0); - break; - case 0: - showBoxes = !showBoxes; - break; - case 1: - showHistogram = !showHistogram; - break; - case 2: - occlusionDectection = !occlusionDectection; - break; - case 3: - nameOccludedTeapots = !nameOccludedTeapots; - break; - case 4: - showRate = !showRate; - break; - case 5: - noOcclude = !noOcclude; - break; - } - glutPostRedisplay(); -} - -/* This timer callback will print out stats every three seconds of the frame - rate and precent of teapots occluded. */ -/* ARGSUSED */ -void -timer(int value) -{ - static int last = 0; - int now; - float time, total; - - now = glutGet(GLUT_ELAPSED_TIME); - time = (now - last) / 1000; - total = renderCount + occludedCount; - if (showRate) { - if (frames) { - if (occlusionDectection) { - printf("rate = %.1f (detection on) @ %%%.0f\n", - frames / time, occludedCount/total*100); - } else { - printf("rate = %.1f @ %%%.0f\n", - frames / time, occludedCount/total*100); - } - } - } - last = now; - frames = 0; - renderCount = 0; - occludedCount = 0; - glutTimerFunc(3000, timer, 0); -} - -int -main(int argc, char **argv) -{ - int has_histogram, has_logic_op; - - glutInit(&argc, argv); - glutInitWindowSize(W, H); - if (argc > 1 && !strcmp(argv[1], "-single")) { - single = 1; - glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH | GLUT_ALPHA); - } else { - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH | GLUT_ALPHA); - } - glutCreateWindow(argv[0]); - has_histogram = glutExtensionSupported("GL_EXT_histogram"); - has_logic_op = glutExtensionSupported("GL_EXT_blend_logic_op"); - if (!has_histogram && !has_logic_op) { - fprintf(stderr, - "\nYour OpenGL implementation lacks support for\nEXT_histogram or EXT_blend_logic_op (or both).\n\n"); - exit(1); - } - myinit(); - glutReshapeFunc(reshape); - glutDisplayFunc(display); - glutCreateMenu(main_menu); - glutAddMenuEntry("Toggle occlusion detection", 2); - glutAddMenuEntry("Toggle bounding boxes", 0); - glutAddMenuEntry("Toggle histogram print", 1); - glutAddMenuEntry("Toggle name occluded teapots", 3); - glutAddMenuEntry("Toggle frame rate print", 4); - glutAddMenuEntry("Toggle histogram without occlusion", 5); - glutAddMenuEntry("Quit", 666); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutVisibilityFunc(visible); - glutTimerFunc(3000, timer, 0); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/advanced/occlude.dsp b/lib/glut-3.7.6/progs/advanced/occlude.dsp deleted file mode 100644 index 9ec526045..000000000 --- a/lib/glut-3.7.6/progs/advanced/occlude.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="occlude" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=occlude - 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 "occlude.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 "occlude.mak" CFG="occlude - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "occlude - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "occlude - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "occlude - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "occlude - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "occlude - Win32 Release" -# Name "occlude - Win32 Debug" -# Begin Source File - -SOURCE=.\occlude.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced/pointburst.c b/lib/glut-3.7.6/progs/advanced/pointburst.c deleted file mode 100644 index b6df5e3bc..000000000 --- a/lib/glut-3.7.6/progs/advanced/pointburst.c +++ /dev/null @@ -1,567 +0,0 @@ - -/* 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. */ - -/* This example demonstrates how to render particle effects - with OpenGL. A cloud of pinkish/orange particles explodes with the - particles bouncing off the ground. When the SGIS_point_parameters - is present (supported on SGI's InfiniteReality hardware), the - particle size is attenuated based on eye distance. */ - -/* Now pointburst.c is extended to support the multi-vendor - EXT_point_parameters extension that has the same interface as the - SGIS extension (modulo the SGIS suffix/prefix). NVidia's Release 2 - OpenGL ICD driver supports the EXT_point_parameters extension. */ - -#include -#include -#include -#include /* for cos(), sin(), and sqrt() */ -#ifdef _WIN32 -#include /* for wglGetProcAddress */ -#endif -#include - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -#if 0 /* For debugging. */ -#undef GL_SGIS_point_parameters -#endif - -#if defined(GL_SGIS_point_parameters) && !defined(GL_EXT_point_parameters) -/* Use the EXT point parameters interface for the SGIS implementation. */ -#define GL_POINT_SIZE_MIN_EXT GL_POINT_SIZE_MIN_SGIS -#define GL_POINT_SIZE_MAX_EXT GL_POINT_SIZE_MAX_SGIS -#define GL_POINT_FADE_THRESHOLD_SIZE_EXT GL_POINT_FADE_THRESHOLD_SIZE_SGIS -#define GL_DISTANCE_ATTENUATION_EXT GL_DISTANCE_ATTENUATION_SGIS -#define glPointParameterfEXT glPointParameterfSGIS -#define glPointParameterfvEXT glPointParameterfvSGIS -#define GL_EXT_point_parameters 1 -#endif - -#if !defined(GL_EXT_point_parameters) -#define GL_POINT_SIZE_MIN_EXT 0x8126 -#define GL_POINT_SIZE_MAX_EXT 0x8127 -#define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128 -#define GL_DISTANCE_ATTENUATION_EXT 0x8129 -#if defined(_WIN32) && !defined(MESA) -/* Curse Microsoft for the insanity of wglGetProcAddress. */ -typedef void (APIENTRY * PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRY * PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat *params); -#define GL_EXT_point_parameters 1 -#endif -#endif - -#if defined(_WIN32) && !defined(MESA) -PFNGLPOINTPARAMETERFEXTPROC glPointParameterfEXT; -PFNGLPOINTPARAMETERFVEXTPROC glPointParameterfvEXT; -#endif - -int hasPointParameters; - -static GLfloat angle = -150; /* in degrees */ -static int spin = 0; -static int moving, begin; -static int newModel = 1; -static float time; -static int repeat = 1; -int useMipmaps = 1; -int linearFiltering = 1; -int useTexture = 1; - -#if GL_EXT_point_parameters -static GLfloat constant[3] = { 1/5.0, 0.0, 0.0 }; -static GLfloat linear[3] = { 0.0, 1/5.0, 0.0 }; -static GLfloat quadratic[3] = { 0.25, 0.0, 1/60.0 }; -#endif - -#define MAX_POINTS 2000 - -static int numPoints = 500; - -static GLfloat pointList[MAX_POINTS][3]; -static GLfloat pointTime[MAX_POINTS]; -static GLfloat pointVelocity[MAX_POINTS][2]; -static GLfloat pointDirection[MAX_POINTS][2]; -static int colorList[MAX_POINTS]; -static int animate = 1, motion = 0; - -static GLfloat colorSet[][4] = { - /* Shades of red. */ - { 0.7, 0.2, 0.4, 0.5 }, - { 0.8, 0.0, 0.7, 0.5 }, - { 1.0, 0.0, 0.0, 0.5 }, - { 0.9, 0.3, 0.6, 0.5 }, - { 1.0, 0.4, 0.0, 0.5 }, - { 1.0, 0.0, 0.5, 0.5 }, -}; - -#define NUM_COLORS (sizeof(colorSet)/sizeof(colorSet[0])) - -#define DEAD (NUM_COLORS+1) - - -#if 0 /* drand48 might be better on Unix machines */ -#define RANDOM_RANGE(lo, hi) ((lo) + (hi - lo) * drand48()) -#else -static float float_rand(void) { return rand() / (float) RAND_MAX; } -#define RANDOM_RANGE(lo, hi) ((lo) + (hi - lo) * float_rand()) -#endif - -#define MEAN_VELOCITY 3.0 -#define GRAVITY 2.0 -#define TIME_DELTA 0.025 /* The speed of time. */ - -/* Modeling units of ground extent in each X and Z direction. */ -#define EDGE 12 - -void -makePointList(void) -{ - float angle, velocity, direction; - int i; - - motion = 1; - for (i=0; i EDGE) { - /* Particle has hit ground past the distance duration of - the particles. Mark particle as dead. */ - colorList[i] = NUM_COLORS; /* Not moving. */ - continue; - } - - pointVelocity[i][1] *= 0.8; /* 80% of previous up velocity. */ - pointTime[i] = 0.0; /* Reset the particles sense of up time. */ - } - motion = 1; - pointTime[i] += TIME_DELTA; - } - time += TIME_DELTA; - if (!motion && !spin) { - if (repeat) { - makePointList(); - } else { - glutIdleFunc(NULL); - } - } -} - -void -idle(void) -{ - updatePointList(); - if (spin) { - angle += 0.3; - newModel = 1; - } - glutPostRedisplay(); -} - -void -visible(int vis) -{ - if (vis == GLUT_VISIBLE) { - if (animate && (motion || spin)) { - glutIdleFunc(idle); - } - } else { - glutIdleFunc(NULL); - } -} - -void -recalcModelView(void) -{ - glPopMatrix(); - glPushMatrix(); - glRotatef(angle, 0.0, 1.0, 0.0); - newModel = 0; -} - -void -redraw(void) -{ - int i; - - glDepthMask(GL_TRUE); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - if (newModel) - recalcModelView(); - - /* Draw the floor. */ - if (useTexture) { - glEnable(GL_TEXTURE_2D); - } - glColor3f(0.5, 1.0, 0.5); - glBegin(GL_QUADS); - glTexCoord2f(0.0, 0.0); - glVertex3f(-EDGE, -0.05, -EDGE); - glTexCoord2f(20.0, 0.0); - glVertex3f(EDGE, -0.05, -EDGE); - glTexCoord2f(20.0, 20.0); - glVertex3f(EDGE, -0.05, EDGE); - glTexCoord2f(0.0, 20.0); - glVertex3f(-EDGE, -0.05, EDGE); - glEnd(); - - /* Allow particles to blend with each other. */ - glDepthMask(GL_FALSE); - - if (useTexture) { - glDisable(GL_TEXTURE_2D); - } - glBegin(GL_POINTS); - for (i=0; i -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=pointburst - 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 "pointburst.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 "pointburst.mak" CFG="pointburst - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "pointburst - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "pointburst - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "pointburst - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "pointburst - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "pointburst - Win32 Release" -# Name "pointburst - Win32 Debug" -# Begin Source File - -SOURCE=.\pointburst.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced/projshadow.c b/lib/glut-3.7.6/progs/advanced/projshadow.c deleted file mode 100644 index 92fb6fa28..000000000 --- a/lib/glut-3.7.6/progs/advanced/projshadow.c +++ /dev/null @@ -1,377 +0,0 @@ - -/* projshadow.c - by Tom McReynolds, SGI */ - -/* Rendering shadows using projective shadows. */ - -#include -#include - -/* Create a single component texture map */ -GLfloat * -make_texture(int maxs, int maxt) -{ - int s, t; - static GLfloat *texture; - - texture = (GLfloat *) malloc(maxs * maxt * sizeof(GLfloat)); - for (t = 0; t < maxt; t++) { - for (s = 0; s < maxs; s++) { - texture[s + maxs * t] = ((s >> 4) & 0x1) ^ ((t >> 4) & 0x1); - } - } - return texture; -} - -enum { - SPHERE = 1, CONE, LIGHT, LEFTWALL, FLOOR -}; - -enum { - X, Y, Z, W -}; -enum { - A, B, C, D -}; - -/* create a matrix that will project the desired shadow */ -void -shadowmatrix(GLfloat shadowMat[4][4], - GLfloat groundplane[4], - GLfloat lightpos[4]) -{ - GLfloat dot; - - /* find dot product between light position vector and ground plane normal */ - dot = groundplane[X] * lightpos[X] + - groundplane[Y] * lightpos[Y] + - groundplane[Z] * lightpos[Z] + - groundplane[W] * lightpos[W]; - - shadowMat[0][0] = dot - lightpos[X] * groundplane[X]; - shadowMat[1][0] = 0.f - lightpos[X] * groundplane[Y]; - shadowMat[2][0] = 0.f - lightpos[X] * groundplane[Z]; - shadowMat[3][0] = 0.f - lightpos[X] * groundplane[W]; - - shadowMat[X][1] = 0.f - lightpos[Y] * groundplane[X]; - shadowMat[1][1] = dot - lightpos[Y] * groundplane[Y]; - shadowMat[2][1] = 0.f - lightpos[Y] * groundplane[Z]; - shadowMat[3][1] = 0.f - lightpos[Y] * groundplane[W]; - - shadowMat[X][2] = 0.f - lightpos[Z] * groundplane[X]; - shadowMat[1][2] = 0.f - lightpos[Z] * groundplane[Y]; - shadowMat[2][2] = dot - lightpos[Z] * groundplane[Z]; - shadowMat[3][2] = 0.f - lightpos[Z] * groundplane[W]; - - shadowMat[X][3] = 0.f - lightpos[W] * groundplane[X]; - shadowMat[1][3] = 0.f - lightpos[W] * groundplane[Y]; - shadowMat[2][3] = 0.f - lightpos[W] * groundplane[Z]; - shadowMat[3][3] = dot - lightpos[W] * groundplane[W]; - -} - -/* find the plane equation given 3 points */ -void -findplane(GLfloat plane[4], - GLfloat v0[3], GLfloat v1[3], GLfloat v2[3]) -{ - GLfloat vec0[3], vec1[3]; - - /* need 2 vectors to find cross product */ - vec0[X] = v1[X] - v0[X]; - vec0[Y] = v1[Y] - v0[Y]; - vec0[Z] = v1[Z] - v0[Z]; - - vec1[X] = v2[X] - v0[X]; - vec1[Y] = v2[Y] - v0[Y]; - vec1[Z] = v2[Z] - v0[Z]; - - /* find cross product to get A, B, and C of plane equation */ - plane[A] = vec0[Y] * vec1[Z] - vec0[Z] * vec1[Y]; - plane[B] = -(vec0[X] * vec1[Z] - vec0[Z] * vec1[X]); - plane[C] = vec0[X] * vec1[Y] - vec0[Y] * vec1[X]; - - plane[D] = -(plane[A] * v0[X] + plane[B] * v0[Y] + plane[C] * v0[Z]); -} - -void -sphere(void) -{ - glPushMatrix(); - glTranslatef(60.f, -50.f, -360.f); - glCallList(SPHERE); - glPopMatrix(); -} - -void -cone(void) -{ - glPushMatrix(); - glTranslatef(-40.f, -40.f, -400.f); - glCallList(CONE); - glPopMatrix(); - -} - -enum { - NONE, SHADOW -}; - -int rendermode = NONE; - -void -menu(int mode) -{ - rendermode = mode; - glutPostRedisplay(); -} - -GLfloat leftwallshadow[4][4]; -GLfloat floorshadow[4][4]; - -GLfloat lightpos[] = -{50.f, 50.f, -320.f, 1.f}; - -void -redraw(void) -{ - /* material properties for objects in scene */ - static GLfloat wall_mat[] = - {1.f, 1.f, 1.f, 1.f}; - static GLfloat sphere_mat[] = - {1.f, .5f, 0.f, 1.f}; - static GLfloat cone_mat[] = - {0.f, .5f, 1.f, 1.f}; - - glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); - - /* Note: wall verticies are ordered so they are all front facing this lets - me do back face culling to speed things up. */ - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, wall_mat); - - /* floor */ - /* make the floor textured */ - glEnable(GL_TEXTURE_2D); - - /* Since we want to turn texturing on for floor only, we have to make floor - a separate glBegin()/glEnd() sequence. You can't turn texturing on and - off between begin and end calls */ - glBegin(GL_QUADS); - glNormal3f(0.f, 1.f, 0.f); - glTexCoord2i(0, 0); - glVertex3f(-100.f, -100.f, -320.f); - glTexCoord2i(1, 0); - glVertex3f(100.f, -100.f, -320.f); - glTexCoord2i(1, 1); - glVertex3f(100.f, -100.f, -520.f); - glTexCoord2i(0, 1); - glVertex3f(-100.f, -100.f, -520.f); - glEnd(); - - glDisable(GL_TEXTURE_2D); - - if (rendermode == SHADOW) { - glDisable(GL_DEPTH_TEST); - glDisable(GL_LIGHTING); - glColor3f(0.f, 0.f, 0.f); /* shadow color */ - - glPushMatrix(); - glMultMatrixf((GLfloat *) floorshadow); - cone(); - glPopMatrix(); - - glPushMatrix(); - glMultMatrixf((GLfloat *) floorshadow); - sphere(); - glPopMatrix(); - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - } - /* walls */ - - if (rendermode == SHADOW) { - glEnable(GL_STENCIL_TEST); - glStencilFunc(GL_ALWAYS, 1, 0); - glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); - } - glBegin(GL_QUADS); - /* left wall */ - glNormal3f(1.f, 0.f, 0.f); - glVertex3f(-100.f, -100.f, -320.f); - glVertex3f(-100.f, -100.f, -520.f); - glVertex3f(-100.f, 100.f, -520.f); - glVertex3f(-100.f, 100.f, -320.f); - glEnd(); - - if (rendermode == SHADOW) { - glStencilFunc(GL_EQUAL, 1, 1); - glDisable(GL_DEPTH_TEST); - glDisable(GL_LIGHTING); - glColor3f(0.f, 0.f, 0.f); /* shadow color */ - glDisable(GL_DEPTH_TEST); - glPushMatrix(); - glMultMatrixf((GLfloat *) leftwallshadow); - cone(); - glPopMatrix(); - glEnable(GL_DEPTH_TEST); - glDisable(GL_STENCIL_TEST); - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - } - glBegin(GL_QUADS); - /* right wall */ - glNormal3f(-1.f, 0.f, 0.f); - glVertex3f(100.f, -100.f, -320.f); - glVertex3f(100.f, 100.f, -320.f); - glVertex3f(100.f, 100.f, -520.f); - glVertex3f(100.f, -100.f, -520.f); - - /* ceiling */ - glNormal3f(0.f, -1.f, 0.f); - glVertex3f(-100.f, 100.f, -320.f); - glVertex3f(-100.f, 100.f, -520.f); - glVertex3f(100.f, 100.f, -520.f); - glVertex3f(100.f, 100.f, -320.f); - - /* back wall */ - glNormal3f(0.f, 0.f, 1.f); - glVertex3f(-100.f, -100.f, -520.f); - glVertex3f(100.f, -100.f, -520.f); - glVertex3f(100.f, 100.f, -520.f); - glVertex3f(-100.f, 100.f, -520.f); - glEnd(); - - glPushMatrix(); - glTranslatef(lightpos[X], lightpos[Y], lightpos[Z]); - glDisable(GL_LIGHTING); - glColor3f(1.f, 1.f, .7f); - glCallList(LIGHT); - glEnable(GL_LIGHTING); - glPopMatrix(); - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, cone_mat); - cone(); - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, sphere_mat); - sphere(); - - glutSwapBuffers(); /* high end machines may need this */ -} - -/* ARGSUSED1 */ -void -key(unsigned char key, int x, int y) -{ - if (key == '\033') - exit(0); -} - -const int TEXDIM = 256; -/* Parse arguments, and set up interface between OpenGL and window system */ - -int -main(int argc, char *argv[]) -{ - GLfloat *tex; - GLUquadricObj *sphere, *cone, *base; - GLfloat plane[4]; - GLfloat v0[3], v1[3], v2[3]; - - glutInit(&argc, argv); - glutInitWindowSize(512, 512); - glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL | GLUT_DOUBLE); - (void) glutCreateWindow("projection shadows"); - glutDisplayFunc(redraw); - glutKeyboardFunc(key); - - glutCreateMenu(menu); - glutAddMenuEntry("No Shadows", NONE); - glutAddMenuEntry("Shadows", SHADOW); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - /* draw a perspective scene */ - glMatrixMode(GL_PROJECTION); - glFrustum(-100., 100., -100., 100., 320., 640.); - glMatrixMode(GL_MODELVIEW); - - /* turn on features */ - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - - /* make shadow matricies */ - - /* 3 points on floor */ - v0[X] = -100.f; - v0[Y] = -100.f; - v0[Z] = -320.f; - v1[X] = 100.f; - v1[Y] = -100.f; - v1[Z] = -320.f; - v2[X] = 100.f; - v2[Y] = -100.f; - v2[Z] = -520.f; - - findplane(plane, v0, v1, v2); - shadowmatrix(floorshadow, plane, lightpos); - - /* 3 points on left wall */ - v0[X] = -100.f; - v0[Y] = -100.f; - v0[Z] = -320.f; - v1[X] = -100.f; - v1[Y] = -100.f; - v1[Z] = -520.f; - v2[X] = -100.f; - v2[Y] = 100.f; - v2[Z] = -520.f; - - findplane(plane, v0, v1, v2); - shadowmatrix(leftwallshadow, plane, lightpos); - - /* place light 0 in the right place */ - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - - /* remove back faces to speed things up */ - glCullFace(GL_BACK); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - - /* make display lists for sphere and cone; for efficiency */ - - glNewList(SPHERE, GL_COMPILE); - sphere = gluNewQuadric(); - gluSphere(sphere, 20.f, 20, 20); - gluDeleteQuadric(sphere); - glEndList(); - - glNewList(LIGHT, GL_COMPILE); - sphere = gluNewQuadric(); - gluSphere(sphere, 5.f, 20, 20); - gluDeleteQuadric(sphere); - glEndList(); - - glNewList(CONE, GL_COMPILE); - cone = gluNewQuadric(); - base = gluNewQuadric(); - glRotatef(-90.f, 1.f, 0.f, 0.f); - gluDisk(base, 0., 20., 20, 1); - gluCylinder(cone, 20., 0., 60., 20, 20); - gluDeleteQuadric(cone); - gluDeleteQuadric(base); - glEndList(); - - glNewList(FLOOR, GL_COMPILE); - glEndList(); - - glNewList(LEFTWALL, GL_COMPILE); - glEndList(); - - /* load pattern for current 2d texture */ - tex = make_texture(TEXDIM, TEXDIM); - glTexImage2D(GL_TEXTURE_2D, 0, 1, TEXDIM, TEXDIM, 0, GL_RED, GL_FLOAT, tex); - free(tex); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/advanced/projshadow.dsp b/lib/glut-3.7.6/progs/advanced/projshadow.dsp deleted file mode 100644 index d385ea6dc..000000000 --- a/lib/glut-3.7.6/progs/advanced/projshadow.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="projshadow" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=projshadow - 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 "projshadow.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 "projshadow.mak" CFG="projshadow - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "projshadow - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "projshadow - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "projshadow - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "projshadow - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "projshadow - Win32 Release" -# Name "projshadow - Win32 Debug" -# Begin Source File - -SOURCE=.\projshadow.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced/projtex.c b/lib/glut-3.7.6/progs/advanced/projtex.c deleted file mode 100644 index 766916fa4..000000000 --- a/lib/glut-3.7.6/progs/advanced/projtex.c +++ /dev/null @@ -1,916 +0,0 @@ - -/* projtex.c - by David Yu and David Blythe, SGI */ - -/** - ** Demonstrates simple projective texture mapping. - ** - ** Button1 changes view, Button2 moves texture. - ** - ** (See: Segal, Korobkin, van Widenfelt, Foran, and Haeberli - ** "Fast Shadows and Lighting Effects Using Texture Mapping", SIGGRAPH '92) - ** - ** 1994,1995 -- David G Yu - ** - ** cc -o projtex projtex.c texture.c -lglut -lGLU -lGL -lX11 -lm - **/ - -#include -#include -#include -#include -#include "texture.h" - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -int winWidth, winHeight; - -GLboolean redrawContinuously = GL_FALSE; - -float angle, axis[3]; -enum MoveModes { - MoveNone, MoveView, MoveObject, MoveTexture -}; -enum MoveModes mode = MoveNone; - -GLfloat objectXform[4][4]; -GLfloat textureXform[4][4]; - -void (*drawObject) (void); -void (*loadTexture) (void); -GLboolean textureEnabled = GL_TRUE; -GLboolean showProjection = GL_TRUE; -GLboolean linearFilter = GL_TRUE; - -char *texFilename = NULL; - -GLfloat zoomFactor = 1.0; - -/*****************************************************************/ - -/* matrix = identity */ -void -matrixIdentity(GLfloat matrix[16]) -{ - matrix[0] = 1.0; - matrix[1] = 0.0; - matrix[2] = 0.0; - matrix[3] = 0.0; - matrix[4] = 0.0; - matrix[5] = 1.0; - matrix[6] = 0.0; - matrix[7] = 0.0; - matrix[8] = 0.0; - matrix[9] = 0.0; - matrix[10] = 1.0; - matrix[11] = 0.0; - matrix[12] = 0.0; - matrix[13] = 0.0; - matrix[14] = 0.0; - matrix[15] = 1.0; -} - -/* matrix2 = transpose(matrix1) */ -void -matrixTranspose(GLfloat matrix2[16], GLfloat matrix1[16]) -{ - matrix2[0] = matrix1[0]; - matrix2[1] = matrix1[4]; - matrix2[2] = matrix1[8]; - matrix2[3] = matrix1[12]; - - matrix2[4] = matrix1[1]; - matrix2[5] = matrix1[5]; - matrix2[6] = matrix1[9]; - matrix2[7] = matrix1[13]; - - matrix2[8] = matrix1[2]; - matrix2[9] = matrix1[6]; - matrix2[10] = matrix1[10]; - matrix2[11] = matrix1[14]; - - matrix2[12] = matrix1[3]; - matrix2[13] = matrix1[7]; - matrix2[14] = matrix1[14]; - matrix2[15] = matrix1[15]; -} - -/*****************************************************************/ - -/* load SGI .rgb image (pad with a border of the specified width and color) */ -static void -imgLoad(char *filenameIn, int borderIn, GLfloat borderColorIn[4], - int *wOut, int *hOut, GLubyte ** imgOut) -{ - int border = borderIn; - int width, height; - int w, h; - GLubyte *image, *img, *p; - int i, j, components; - - image = (GLubyte *) read_texture(filenameIn, &width, &height, &components); - w = width + 2 * border; - h = height + 2 * border; - img = (GLubyte *) calloc(w * h, 4 * sizeof(unsigned char)); - - p = img; - for (j = -border; j < height + border; ++j) { - for (i = -border; i < width + border; ++i) { - if (0 <= j && j <= height - 1 && 0 <= i && i <= width - 1) { - p[0] = image[4 * (j * width + i) + 0]; - p[1] = image[4 * (j * width + i) + 1]; - p[2] = image[4 * (j * width + i) + 2]; - p[3] = 0xff; - } else { - p[0] = borderColorIn[0] * 0xff; - p[1] = borderColorIn[1] * 0xff; - p[2] = borderColorIn[2] * 0xff; - p[3] = borderColorIn[3] * 0xff; - } - p += 4; - } - } - free(image); - *wOut = w; - *hOut = h; - *imgOut = img; -} - -/*****************************************************************/ - -/* Load the image file specified on the command line as the current texture */ -void -loadImageTexture(void) -{ - static int texWidth, texHeight; - static GLubyte *texData; - GLfloat borderColor[4] = - {1.0, 1.0, 1.0, 1.0}; - - if (!texData && texFilename) { - imgLoad(texFilename, 2, borderColor, &texWidth, &texHeight, &texData); - } - if (linearFilter) { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - } else { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - } - glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, borderColor); - gluBuild2DMipmaps(GL_TEXTURE_2D, 4, texWidth, texHeight, - GL_RGBA, GL_UNSIGNED_BYTE, texData); -} - -/* Create a simple spotlight pattern and make it the current texture */ -void -loadSpotlightTexture(void) -{ - static int texWidth = 64, texHeight = 64; - static GLubyte *texData; - GLfloat borderColor[4] = - {0.1, 0.1, 0.1, 1.0}; - - if (!texData) { - GLubyte *p; - int i, j; - - texData = (GLubyte *) malloc(texWidth * texHeight * 4 * sizeof(GLubyte)); - - p = texData; - for (j = 0; j < texHeight; ++j) { - float dy = (texHeight * 0.5 - j + 0.5) / (texHeight * 0.5); - - for (i = 0; i < texWidth; ++i) { - float dx = (texWidth * 0.5 - i + 0.5) / (texWidth * 0.5); - float r = cos(M_PI / 2.0 * sqrt(dx * dx + dy * dy)); - float c; - - r = (r < 0) ? 0 : r * r; - c = 0xff * (r + borderColor[0]); - p[0] = (c <= 0xff) ? c : 0xff; - c = 0xff * (r + borderColor[1]); - p[1] = (c <= 0xff) ? c : 0xff; - c = 0xff * (r + borderColor[2]); - p[2] = (c <= 0xff) ? c : 0xff; - c = 0xff * (r + borderColor[3]); - p[3] = (c <= 0xff) ? c : 0xff; - p += 4; - } - } - } - if (linearFilter) { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - } else { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - } - glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, borderColor); - gluBuild2DMipmaps(GL_TEXTURE_2D, 4, texWidth, texHeight, - GL_RGBA, GL_UNSIGNED_BYTE, texData); -} - -/*****************************************************************/ - -void -checkErrors(void) -{ - GLenum error; - while ((error = glGetError()) != GL_NO_ERROR) { - fprintf(stderr, "Error: %s\n", (char *) gluErrorString(error)); - } -} - -void -drawCube(void) -{ - glBegin(GL_QUADS); - - glNormal3f(-1.0, 0.0, 0.0); - glColor3f(0.80, 0.50, 0.50); - glVertex3f(-0.5, -0.5, -0.5); - glVertex3f(-0.5, -0.5, 0.5); - glVertex3f(-0.5, 0.5, 0.5); - glVertex3f(-0.5, 0.5, -0.5); - - glNormal3f(1.0, 0.0, 0.0); - glColor3f(0.50, 0.80, 0.50); - glVertex3f(0.5, 0.5, 0.5); - glVertex3f(0.5, -0.5, 0.5); - glVertex3f(0.5, -0.5, -0.5); - glVertex3f(0.5, 0.5, -0.5); - - glNormal3f(0.0, -1.0, 0.0); - glColor3f(0.50, 0.50, 0.80); - glVertex3f(-0.5, -0.5, -0.5); - glVertex3f(0.5, -0.5, -0.5); - glVertex3f(0.5, -0.5, 0.5); - glVertex3f(-0.5, -0.5, 0.5); - - glNormal3f(0.0, 1.0, 0.0); - glColor3f(0.50, 0.80, 0.80); - glVertex3f(0.5, 0.5, 0.5); - glVertex3f(0.5, 0.5, -0.5); - glVertex3f(-0.5, 0.5, -0.5); - glVertex3f(-0.5, 0.5, 0.5); - - glNormal3f(0.0, 0.0, -1.0); - glColor3f(0.80, 0.50, 0.80); - glVertex3f(-0.5, -0.5, -0.5); - glVertex3f(-0.5, 0.5, -0.5); - glVertex3f(0.5, 0.5, -0.5); - glVertex3f(0.5, -0.5, -0.5); - - glNormal3f(0.0, 0.0, 1.0); - glColor3f(1.00, 0.80, 0.50); - glVertex3f(0.5, 0.5, 0.5); - glVertex3f(-0.5, 0.5, 0.5); - glVertex3f(-0.5, -0.5, 0.5); - glVertex3f(0.5, -0.5, 0.5); - glEnd(); -} - -void -drawDodecahedron(void) -{ -#define A (0.5 * 1.61803) /* (sqrt(5) + 1) / 2 */ -#define B (0.5 * 0.61803) /* (sqrt(5) - 1) / 2 */ -#define C (0.5 * 1.0) - GLfloat vertexes[20][3] = - { - {-A, 0.0, B}, - {-A, 0.0, -B}, - {A, 0.0, -B}, - {A, 0.0, B}, - {B, -A, 0.0}, - {-B, -A, 0.0}, - {-B, A, 0.0}, - {B, A, 0.0}, - {0.0, B, -A}, - {0.0, -B, -A}, - {0.0, -B, A}, - {0.0, B, A}, - {-C, -C, C}, - {-C, -C, -C}, - {C, -C, -C}, - {C, -C, C}, - {-C, C, C}, - {-C, C, -C}, - {C, C, -C}, - {C, C, C}, - }; -#undef A -#undef B -#undef C - GLint polygons[12][5] = - { - {0, 12, 10, 11, 16}, - {1, 17, 8, 9, 13}, - {2, 14, 9, 8, 18}, - {3, 19, 11, 10, 15}, - {4, 14, 2, 3, 15}, - {5, 12, 0, 1, 13}, - {6, 17, 1, 0, 16}, - {7, 19, 3, 2, 18}, - {8, 17, 6, 7, 18}, - {9, 14, 4, 5, 13}, - {10, 12, 5, 4, 15}, - {11, 19, 7, 6, 16}, - }; - int i; - - glColor3f(0.75, 0.75, 0.75); - for (i = 0; i < 12; ++i) { - GLfloat *p0, *p1, *p2, d; - GLfloat u[3], v[3], n[3]; - - p0 = &vertexes[polygons[i][0]][0]; - p1 = &vertexes[polygons[i][1]][0]; - p2 = &vertexes[polygons[i][2]][0]; - - u[0] = p2[0] - p1[0]; - u[1] = p2[1] - p1[1]; - u[2] = p2[2] - p1[2]; - - v[0] = p0[0] - p1[0]; - v[1] = p0[1] - p1[1]; - v[2] = p0[2] - p1[2]; - - n[0] = u[1] * v[2] - u[2] * v[1]; - n[1] = u[2] * v[0] - u[0] * v[2]; - n[2] = u[0] * v[1] - u[1] * v[0]; - - d = 1.0 / sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]); - n[0] *= d; - n[1] *= d; - n[2] *= d; - - glBegin(GL_POLYGON); - glNormal3fv(n); - glVertex3fv(p0); - glVertex3fv(p1); - glVertex3fv(p2); - glVertex3fv(vertexes[polygons[i][3]]); - glVertex3fv(vertexes[polygons[i][4]]); - glEnd(); - } -} - -void -drawSphere(void) -{ - int numMajor = 24; - int numMinor = 32; - float radius = 0.8; - double majorStep = (M_PI / numMajor); - double minorStep = (2.0 * M_PI / numMinor); - int i, j; - - glColor3f(0.50, 0.50, 0.50); - for (i = 0; i < numMajor; ++i) { - double a = i * majorStep; - double b = a + majorStep; - double r0 = radius * sin(a); - double r1 = radius * sin(b); - GLfloat z0 = radius * cos(a); - GLfloat z1 = radius * cos(b); - - glBegin(GL_TRIANGLE_STRIP); - for (j = 0; j <= numMinor; ++j) { - double c = j * minorStep; - GLfloat x = cos(c); - GLfloat y = sin(c); - - glNormal3f((x * r0) / radius, (y * r0) / radius, z0 / radius); - glTexCoord2f(j / (GLfloat) numMinor, i / (GLfloat) numMajor); - glVertex3f(x * r0, y * r0, z0); - - glNormal3f((x * r1) / radius, (y * r1) / radius, z1 / radius); - glTexCoord2f(j / (GLfloat) numMinor, (i + 1) / (GLfloat) numMajor); - glVertex3f(x * r1, y * r1, z1); - } - glEnd(); - } -} - -/*****************************************************************/ - -float xmin = -0.035, xmax = 0.035; -float ymin = -0.035, ymax = 0.035; -float nnear = 0.1; -float ffar = 1.9; -float distance = -1.0; - -static void -loadTextureProjection(GLfloat m[16]) -{ - GLfloat mInverse[4][4]; - - /* Should use true inverse, but since m consists only of rotations, we can - just use the transpose. */ - matrixTranspose((GLfloat *) mInverse, m); - - glMatrixMode(GL_TEXTURE); - glLoadIdentity(); - glTranslatef(0.5, 0.5, 0.0); - glScalef(0.5, 0.5, 1.0); - glFrustum(xmin, xmax, ymin, ymax, nnear, ffar); - glTranslatef(0.0, 0.0, distance); - glMultMatrixf((GLfloat *) mInverse); - glMatrixMode(GL_MODELVIEW); -} - -static void -drawTextureProjection(void) -{ - float t = ffar / nnear; - GLfloat n[4][3]; - GLfloat f[4][3]; - - n[0][0] = xmin; - n[0][1] = ymin; - n[0][2] = -(nnear + distance); - - n[1][0] = xmax; - n[1][1] = ymin; - n[1][2] = -(nnear + distance); - - n[2][0] = xmax; - n[2][1] = ymax; - n[2][2] = -(nnear + distance); - - n[3][0] = xmin; - n[3][1] = ymax; - n[3][2] = -(nnear + distance); - - f[0][0] = xmin * t; - f[0][1] = ymin * t; - f[0][2] = -(ffar + distance); - - f[1][0] = xmax * t; - f[1][1] = ymin * t; - f[1][2] = -(ffar + distance); - - f[2][0] = xmax * t; - f[2][1] = ymax * t; - f[2][2] = -(ffar + distance); - - f[3][0] = xmin * t; - f[3][1] = ymax * t; - f[3][2] = -(ffar + distance); - - glColor3f(1.0, 1.0, 0.0); - glBegin(GL_LINE_LOOP); - glVertex3fv(n[0]); - glVertex3fv(n[1]); - glVertex3fv(n[2]); - glVertex3fv(n[3]); - glVertex3fv(f[3]); - glVertex3fv(f[2]); - glVertex3fv(f[1]); - glVertex3fv(f[0]); - glVertex3fv(n[0]); - glVertex3fv(n[1]); - glVertex3fv(f[1]); - glVertex3fv(f[0]); - glVertex3fv(f[3]); - glVertex3fv(f[2]); - glVertex3fv(n[2]); - glVertex3fv(n[3]); - glEnd(); -} - -/*****************************************************************/ - -void -initialize(void) -{ - GLfloat light0Pos[4] = - {0.3, 0.3, 0.0, 1.0}; - GLfloat matAmb[4] = - {0.01, 0.01, 0.01, 1.00}; - GLfloat matDiff[4] = - {0.65, 0.65, 0.65, 1.00}; - GLfloat matSpec[4] = - {0.30, 0.30, 0.30, 1.00}; - GLfloat matShine = 10.0; - GLfloat eyePlaneS[] = - {1.0, 0.0, 0.0, 0.0}; - GLfloat eyePlaneT[] = - {0.0, 1.0, 0.0, 0.0}; - GLfloat eyePlaneR[] = - {0.0, 0.0, 1.0, 0.0}; - GLfloat eyePlaneQ[] = - {0.0, 0.0, 0.0, 1.0}; - - /* Setup Misc. */ - glClearColor(0.41, 0.41, 0.31, 0.0); - - glEnable(GL_DEPTH_TEST); - - glLineWidth(2.0); - - glCullFace(GL_FRONT); - glEnable(GL_CULL_FACE); - - glMatrixMode(GL_PROJECTION); - glFrustum(-0.5, 0.5, -0.5, 0.5, 1, 3); - glMatrixMode(GL_MODELVIEW); - glTranslatef(0, 0, -2); - - matrixIdentity((GLfloat *) objectXform); - matrixIdentity((GLfloat *) textureXform); - - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - glOrtho(0, 1, 0, 1, -1, 1); - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); - - glRasterPos2i(0, 0); - - glPopMatrix(); - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - - /* Setup Lighting */ - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, matAmb); - glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, matDiff); - glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, matSpec); - glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, matShine); - - glEnable(GL_COLOR_MATERIAL); - - glLightfv(GL_LIGHT0, GL_POSITION, light0Pos); - glEnable(GL_LIGHT0); - - glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); - glEnable(GL_LIGHTING); - - /* Setup Texture */ - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - (*loadTexture) (); - - glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); - glTexGenfv(GL_S, GL_EYE_PLANE, eyePlaneS); - - glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); - glTexGenfv(GL_T, GL_EYE_PLANE, eyePlaneT); - - glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); - glTexGenfv(GL_R, GL_EYE_PLANE, eyePlaneR); - - glTexGeni(GL_Q, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); - glTexGenfv(GL_Q, GL_EYE_PLANE, eyePlaneQ); -} - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - if (textureEnabled) { - if (mode == MoveTexture || mode == MoveView) { - /* Have OpenGL compute the new transformation (simple but slow). */ - glPushMatrix(); - glLoadIdentity(); - glRotatef(angle, axis[0], axis[1], axis[2]); - glMultMatrixf((GLfloat *) textureXform); - glGetFloatv(GL_MODELVIEW_MATRIX, (GLfloat *) textureXform); - glPopMatrix(); - } - loadTextureProjection((GLfloat *) textureXform); - - if (showProjection) { - glPushMatrix(); - glMultMatrixf((GLfloat *) textureXform); - glDisable(GL_LIGHTING); - drawTextureProjection(); - glEnable(GL_LIGHTING); - glPopMatrix(); - } - glEnable(GL_TEXTURE_2D); - glEnable(GL_TEXTURE_GEN_S); - glEnable(GL_TEXTURE_GEN_T); - glEnable(GL_TEXTURE_GEN_R); - glEnable(GL_TEXTURE_GEN_Q); - } - if (mode == MoveObject || mode == MoveView) { - /* Have OpenGL compute the new transformation (simple but slow). */ - glPushMatrix(); - glLoadIdentity(); - glRotatef(angle, axis[0], axis[1], axis[2]); - glMultMatrixf((GLfloat *) objectXform); - glGetFloatv(GL_MODELVIEW_MATRIX, (GLfloat *) objectXform); - glPopMatrix(); - } - glPushMatrix(); - glMultMatrixf((GLfloat *) objectXform); - (*drawObject) (); - glPopMatrix(); - - glDisable(GL_TEXTURE_2D); - glDisable(GL_TEXTURE_GEN_S); - glDisable(GL_TEXTURE_GEN_T); - glDisable(GL_TEXTURE_GEN_R); - glDisable(GL_TEXTURE_GEN_Q); - - if (zoomFactor > 1.0) { - glDisable(GL_DEPTH_TEST); - glCopyPixels(0, 0, winWidth / zoomFactor, winHeight / zoomFactor, GL_COLOR); - glEnable(GL_DEPTH_TEST); - } - glFlush(); - glutSwapBuffers(); - checkErrors(); -} - -/*****************************************************************/ - -/* simple trackball-like motion control */ -float lastPos[3]; -int lastTime; - -void -ptov(int x, int y, int width, int height, float v[3]) -{ - float d, a; - - /* project x,y onto a hemi-sphere centered within width, height */ - v[0] = (2.0 * x - width) / width; - v[1] = (height - 2.0 * y) / height; - d = sqrt(v[0] * v[0] + v[1] * v[1]); - v[2] = cos((M_PI / 2.0) * ((d < 1.0) ? d : 1.0)); - a = 1.0 / sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]); - v[0] *= a; - v[1] *= a; - v[2] *= a; -} - -void -startMotion(int x, int y, int but, int time) -{ - if (but == GLUT_LEFT_BUTTON) { - mode = MoveView; - } else if (but == GLUT_MIDDLE_BUTTON) { - mode = MoveTexture; - } else { - return; - } - - lastTime = time; - ptov(x, y, winWidth, winHeight, lastPos); -} - -void -animate(void) -{ - glutPostRedisplay(); -} - -void -vis(int visible) -{ - if (visible == GLUT_VISIBLE) { - if (redrawContinuously) - glutIdleFunc(animate); - } else { - if (redrawContinuously) - glutIdleFunc(NULL); - } -} - -void -stopMotion(int but, int time) -{ - if ((but == GLUT_LEFT_BUTTON && mode == MoveView) || - (but == GLUT_MIDDLE_BUTTON && mode == MoveTexture)) { - } else { - return; - } - - if (time == lastTime) { - redrawContinuously = GL_TRUE; - glutIdleFunc(animate); - } else { - angle = 0.0; - redrawContinuously = GL_FALSE; - glutIdleFunc(0); - } - if (!redrawContinuously) { - mode = MoveNone; - } -} - -void -trackMotion(int x, int y) -{ - float curPos[3], dx, dy, dz; - - ptov(x, y, winWidth, winHeight, curPos); - - dx = curPos[0] - lastPos[0]; - dy = curPos[1] - lastPos[1]; - dz = curPos[2] - lastPos[2]; - angle = 90.0 * sqrt(dx * dx + dy * dy + dz * dz); - - axis[0] = lastPos[1] * curPos[2] - lastPos[2] * curPos[1]; - axis[1] = lastPos[2] * curPos[0] - lastPos[0] * curPos[2]; - axis[2] = lastPos[0] * curPos[1] - lastPos[1] * curPos[0]; - - lastTime = glutGet(GLUT_ELAPSED_TIME); - lastPos[0] = curPos[0]; - lastPos[1] = curPos[1]; - lastPos[2] = curPos[2]; - glutPostRedisplay(); -} - -/*****************************************************************/ - -void -object(void) -{ - static int object; - - object++; - object %= 3; - switch (object) { - case 0: - drawObject = drawCube; - break; - case 1: - drawObject = drawDodecahedron; - break; - case 2: - drawObject = drawSphere; - break; - default: - break; - } -} - -static void -nop(void) -{ -} - -void -texture(void) -{ - static int texture = 0; - - texture++; - texture %= 3; - if (texture == 1 && texFilename == NULL) { - /* Skip file texture if not loaded. */ - texture++; - } - switch (texture) { - case 0: - loadTexture = nop; - textureEnabled = GL_FALSE; - break; - case 1: - loadTexture = loadImageTexture; - (*loadTexture) (); - textureEnabled = GL_TRUE; - break; - case 2: - loadTexture = loadSpotlightTexture; - (*loadTexture) (); - textureEnabled = GL_TRUE; - break; - default: - break; - } -} - -void -help(void) -{ - printf("'h' - help\n"); - printf("'l' - toggle linear/nearest filter\n"); - printf("'s' - toggle projection frustum\n"); - printf("'t' - toggle projected texture\n"); - printf("'o' - toggle object\n"); - printf("'z' - increase zoom factor\n"); - printf("'Z' - decrease zoom factor\n"); - printf("left mouse - move view\n"); - printf("middle mouse - move projection\n"); -} - -/* ARGSUSED1 */ -void -key(unsigned char key, int x, int y) -{ - switch (key) { - case '\033': - exit(0); - break; - case 'l': - linearFilter = !linearFilter; - (*loadTexture) (); - break; - case 's': - showProjection = !showProjection; - break; - case 't': - texture(); - break; - case 'o': - object(); - break; - case 'z': - zoomFactor += 1.0; - glPixelZoom(zoomFactor, zoomFactor); - glViewport(0, 0, winWidth / zoomFactor, winHeight / zoomFactor); - break; - case 'Z': - zoomFactor -= 1.0; - if (zoomFactor < 1.0) - zoomFactor = 1.0; - glPixelZoom(zoomFactor, zoomFactor); - glViewport(0, 0, winWidth / zoomFactor, winHeight / zoomFactor); - break; - case 'h': - help(); - break; - } - glutPostRedisplay(); -} - -void -mouse(int button, int state, int x, int y) -{ - if (state == GLUT_DOWN) - startMotion(x, y, button, glutGet(GLUT_ELAPSED_TIME)); - else if (state == GLUT_UP) - stopMotion(button, glutGet(GLUT_ELAPSED_TIME)); - glutPostRedisplay(); -} - -void -reshape(int w, int h) -{ - winWidth = w; - winHeight = h; - glViewport(0, 0, w / zoomFactor, h / zoomFactor); -} - -void -usage(char *name) -{ - fprintf(stderr, "usage: %s \n", name); - fprintf(stderr, "\n"); -} - -void -menu(int selection) -{ - if (selection == 666) { - exit(0); - } - key((unsigned char) selection, 0, 0); -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE); - (void) glutCreateWindow("projtex"); - if (argc > 2) { - usage(argv[0]); - exit(1); - } - if (argc > 1) { - texFilename = argv[1]; - } - loadTexture = loadImageTexture; - drawObject = drawCube; - initialize(); - glutDisplayFunc(display); - glutKeyboardFunc(key); - glutReshapeFunc(reshape); - glutMouseFunc(mouse); - glutMotionFunc(trackMotion); - glutVisibilityFunc(vis); - glutCreateMenu(menu); - glutAddMenuEntry("Toggle showing projection", 's'); - glutAddMenuEntry("Switch texture", 't'); - glutAddMenuEntry("Switch object", 'o'); - glutAddMenuEntry("Toggle filtering", 'l'); - glutAddMenuEntry("Quit", 666); - glutAttachMenu(GLUT_RIGHT_BUTTON); - texture(); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/advanced/projtex.dsp b/lib/glut-3.7.6/progs/advanced/projtex.dsp deleted file mode 100644 index ed88e0922..000000000 --- a/lib/glut-3.7.6/progs/advanced/projtex.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="projtex" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=projtex - 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 "projtex.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 "projtex.mak" CFG="projtex - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "projtex - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "projtex - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "projtex - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "projtex - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "projtex - Win32 Release" -# Name "projtex - Win32 Debug" -# Begin Source File - -SOURCE=.\projtex.c -# End Source File -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# Begin Source File - -SOURCE=.\texture.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced/rasonly.c b/lib/glut-3.7.6/progs/advanced/rasonly.c deleted file mode 100644 index 9ffce8f8c..000000000 --- a/lib/glut-3.7.6/progs/advanced/rasonly.c +++ /dev/null @@ -1,326 +0,0 @@ -/* - * rasonly.c - - * Demonstrates the use of OpenGL for rasterization-only, with - * perspective-correct texture mapping. - * - * Michael I. Gold - * Silicon Graphics Computer Systems, May 1997 - * - * Since current low-end 3D accelerators support only rasterization in - * hardware, a number of developers have expressed interested in using - * OpenGL as an interface to rasterization hardware while retaining - * control of transformations and lighting in the application code. - * Many OpenGL implementations detect and optimize for identity xforms, - * so this approach is entirely reasonable. - * - * Setting up rasterization-only is fairly straightforward. The projection - * matrix is set up as a one-to-one mapping between eye and clip coordinates, - * and the modelview matrix is set up as identity, e.g. object coordinates - * map directly to eye coordinates. This can be achieved as follows: - * - * glMatrixMode(GL_PROJECTION); - * glLoadIdentity(); - * glOrtho(0.0f, (GLfloat) width, 0.0f, (GLfloat) height, -1.0f, 1.0f); - * glMatrixMode(GL_MODELVIEW); - * glLoadIdentity(); - * glViewport(0, 0, width, height); - * - * where (width, height) represent the window dimensions. - * - * Now transformed geometry may be specified directly through the standard - * interfaces (e.g. glVertex*()). The only tricky part that remains is - * specifying texture coordinates such that perspective correction may - * occur. The answer is to use glTexCoord4*(), and perform the perspective - * divide on the texture coordinates directly. - */ - -#include -#include -#include - -GLboolean motion = GL_TRUE; - -/* Matrices */ -GLfloat rot = 0.0f; -GLfloat ModelView[16]; -GLfloat Projection[16]; -GLfloat Viewport[4]; - -/* Sample geometry */ -GLfloat quadV[][4] = { - { -1.0f, 0.0f, -1.0f, 1.0f }, - { 1.0f, 0.0f, -1.0f, 1.0f }, - { 1.0f, 0.5f, -0.2f, 1.0f }, - { -1.0f, 0.5f, -0.2f, 1.0f }, -}; - -GLfloat quadC[][3] = { - { 1.0f, 0.0f, 0.0f }, - { 0.0f, 1.0f, 0.0f }, - { 0.0f, 0.0f, 1.0f }, - { 1.0f, 1.0f, 1.0f }, -}; - -GLfloat quadT[][2] = { - { 0.0f, 0.0f }, - { 0.0f, 1.0f }, - { 1.0f, 1.0f }, - { 1.0f, 0.0f }, -}; - -/********************************************************************* - * Utility functions - */ - -int texWidth = 128; -int texHeight = 128; - -/* Create and download the application texture map */ -static void -setCheckedTexture(void) -{ - int texSize; - void *textureBuf; - GLubyte *p; - int i,j; - - /* malloc for rgba as worst case */ - texSize = texWidth*texHeight*4; - - textureBuf = malloc(texSize); - if (NULL == textureBuf) return; - - p = (GLubyte *)textureBuf; - for (i=0; i < texWidth; i++) { - for (j=0; j < texHeight; j++) { - if ((i ^ j) & 8) { - p[0] = 0xff; p[1] = 0xff; p[2] = 0xff; p[3] = 0xff; - } else { - p[0] = 0x08; p[1] = 0x08; p[2] = 0x08; p[3] = 0xff; - } - p += 4; - } - } - gluBuild2DMipmaps(GL_TEXTURE_2D, 4, texWidth, texHeight, - GL_RGBA, GL_UNSIGNED_BYTE, textureBuf); - free(textureBuf); -} - -/* Perform one transform operation */ -static void -Transform(GLfloat *matrix, GLfloat *in, GLfloat *out) -{ - int ii; - - for (ii=0; ii<4; ii++) { - out[ii] = - in[0] * matrix[0*4+ii] + - in[1] * matrix[1*4+ii] + - in[2] * matrix[2*4+ii] + - in[3] * matrix[3*4+ii]; - } -} - -/* Transform a vertex from object coordinates to window coordinates. - * Lighting is left as an exercise for the reader. - */ -static void -DoTransform(GLfloat *in, GLfloat *out) -{ - GLfloat tmp[4]; - GLfloat invW; /* 1/w */ - - /* Modelview xform */ - Transform(ModelView, in, tmp); - - /* Lighting calculation goes here! */ - - /* Projection xform */ - Transform(Projection, tmp, out); - - if (out[3] == 0.0f) /* do what? */ - return; - - invW = 1.0f / out[3]; - - /* Perspective divide */ - out[0] *= invW; - out[1] *= invW; - out[2] *= invW; - - /* Map to 0..1 range */ - out[0] = out[0] * 0.5f + 0.5f; - out[1] = out[1] * 0.5f + 0.5f; - out[2] = out[2] * 0.5f + 0.5f; - - /* Map to viewport */ - out[0] = out[0] * Viewport[2] + Viewport[0]; - out[1] = out[1] * Viewport[3] + Viewport[1]; - - /* Store inverted w for performance */ - out[3] = invW; -} - -/********************************************************************* - * Application code begins here - */ - -/* For the sake of brevity, I'm use OpenGL to compute my matrices. */ -void UpdateModelView(void) -{ - glPushMatrix(); - glLoadIdentity(); - gluLookAt(0.0f, 1.0f, -4.0f, - 0.0f, 0.0f, 0.0f, - 0.0f, 1.0f, 0.0f); - glRotatef(rot, 0.0f, 1.0f, 0.0f); - /* Retrieve the matrix */ - glGetFloatv(GL_MODELVIEW_MATRIX, ModelView); - glPopMatrix(); -} - -void InitMatrices(void) -{ - /* Calculate projection matrix */ - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - gluPerspective(45.0f, 1.0f, 1.0f, 100.0f); - /* Retrieve the matrix */ - glGetFloatv(GL_PROJECTION_MATRIX, Projection); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - - UpdateModelView(); -} - -void Init(void) -{ - glClearColor(0.2f, 0.2f, 0.6f, 1.0f); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); - glEnable(GL_TEXTURE_2D); - glEnable(GL_DEPTH_TEST); - setCheckedTexture(); - - InitMatrices(); -} - -void Redraw(void) -{ - GLfloat tmp[4]; - int ii; - - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - - glBegin(GL_QUADS); - - for (ii = 0; ii < 4; ii++) { - - /* Transform a vertex from object to window coordinates. - * 1/w is returned as tmp[3] for perspective-correcting - * the texture coordinates. - */ - DoTransform(quadV[ii], tmp); - - /* Ideally the colors will be computed by the lighting equation, - * but I've hard-coded values for this example. - */ - glColor3fv(quadC[ii]); - - /* Scale by 1/w (stored in tmp[3]) */ - glTexCoord4f(quadT[ii][0] * tmp[3], - quadT[ii][1] * tmp[3], 0.0f, tmp[3]); - - /* Note I am using Vertex3, not Vertex4, since we have already - * performed the perspective divide. - */ - glVertex3fv(tmp); - } - - glEnd(); - - glutSwapBuffers(); -} - -void Motion(void) -{ - rot += 3.0f; - if (rot >= 360.0f) rot -= 360.0f; - UpdateModelView(); - Redraw(); -} - -/* ARGSUSED1 */ -void Key(unsigned char key, int x, int y) -{ - switch (key) { - case 27: - exit(0); - case 'm': - motion = !motion; - glutIdleFunc(motion ? Motion : NULL); - break; - } -} - -/* ARGSUSED1 */ -void Button(int button, int state, int x, int y) -{ - switch (button) { - case GLUT_LEFT_BUTTON: - if (state == GLUT_DOWN) { - rot -= 15.0f; - UpdateModelView(); - Redraw(); - } - break; - case GLUT_RIGHT_BUTTON: - if (state == GLUT_DOWN) { - rot += 15.0f; - UpdateModelView(); - Redraw(); - } - break; - } -} - -void Reshape(int width, int height) -{ - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho(0.0f, (GLfloat) width, 0.0f, (GLfloat) height, -1.0f, 1.0f); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - glViewport(0, 0, width, height); - - Viewport[0] = Viewport[1] = 0.0f; - Viewport[2] = (GLfloat) width; - Viewport[3] = (GLfloat) height; -} - -int -main(int argc, char *argv[]) -{ - char *t; - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH); - glutInitWindowSize(400, 400); - glutCreateWindow((t=strrchr(argv[0], '\\')) != NULL ? t+1 : argv[0]); - - Init(); - - glutDisplayFunc(Redraw); - glutReshapeFunc(Reshape); - glutKeyboardFunc(Key); - glutMouseFunc(Button); - glutIdleFunc(Motion); - - glutMainLoop(); - - return 0; -} diff --git a/lib/glut-3.7.6/progs/advanced/rasonly.dsp b/lib/glut-3.7.6/progs/advanced/rasonly.dsp deleted file mode 100644 index 5803d3848..000000000 --- a/lib/glut-3.7.6/progs/advanced/rasonly.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="rasonly" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=rasonly - 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 "rasonly.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 "rasonly.mak" CFG="rasonly - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "rasonly - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "rasonly - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "rasonly - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "rasonly - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "rasonly - Win32 Release" -# Name "rasonly - Win32 Debug" -# Begin Source File - -SOURCE=.\rasonly.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced/redblue_stereo.c b/lib/glut-3.7.6/progs/advanced/redblue_stereo.c deleted file mode 100644 index 902a0298d..000000000 --- a/lib/glut-3.7.6/progs/advanced/redblue_stereo.c +++ /dev/null @@ -1,289 +0,0 @@ - -/* redblue_stereo.c - demo of stereo for red/blue filter stereo glasses */ - -/* by Walter Vannini (walterv@jps.net, waltervannini@hotmail.com) */ - -/* In stereo mode, the object is drawn in red for the left eye - and blue for the right eye. Viewing the scene with red/blue - filter stereo glasses should give a sense of stereo 3D. - glColorMask is used to control update of the red and blue - channel. glFrustum is used to setup two different view frustums - for each eye based on eye separation. */ - -/* Copyright (c) Walter Vannini, 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 -#include -#include - -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -void init(void); -void KeyboardFunc(unsigned char key, int x, int y); -void MenuFunc(int value); -void IdleFunc(void); -void ReshapeFunc(int w, int h); -void DisplayFunc(void); - - -struct ProgramState -{ - int w; - int h; - GLdouble RotationY; - double eye; - double zscreen; - double znear; - double zfar; - double RotationIncrement; - int solidmode; -}; -struct ProgramState ps; - -const double PIXELS_PER_INCH = 100.0; - -void init(void) -{ - GLfloat mat_ambient[] = {0.2,0.0,0.2,1.0} ; - GLfloat mat_diffuse[] = {0.7,0.0,0.7,1.0} ; - GLfloat mat_specular[] = {0.1,0.0,0.1,1.0} ; - GLfloat mat_shininess[]={20.0}; - - GLfloat light_position[]={0.0,5.0,20.0,1.0}; - - GLfloat light_ambient0[]= {1.0,0.0,0.0,1.0}; - GLfloat light_diffuse0[]= {1.0,0.0,0.0,1.0}; - GLfloat light_specular0[]={1.0,0.0,0.0,1.0}; - - GLfloat light_ambient1[]= {0.0,0.0,1.0,1.0}; - GLfloat light_diffuse1[]= {0.0,0.0,1.0,1.0}; - GLfloat light_specular1[]={0.0,0.0,1.0,1.0}; - - glDisable(GL_DITHER); - glClearColor(0.0, 0.0, 0.0, 1.0); - glShadeModel(GL_SMOOTH); - glEnable(GL_DEPTH_TEST); - glEnable(GL_NORMALIZE); - glEnable(GL_CULL_FACE); - glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, 1); - - - glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); - glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); - glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); - glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); - - glLightfv(GL_LIGHT0, GL_POSITION, light_position); - glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient0); - glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse0); - glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular0); - - glLightfv(GL_LIGHT1, GL_POSITION, light_position); - glLightfv(GL_LIGHT1, GL_AMBIENT, light_ambient1); - glLightfv(GL_LIGHT1, GL_DIFFUSE, light_diffuse1); - glLightfv(GL_LIGHT1, GL_SPECULAR, light_specular1); - glEnable(GL_LIGHTING); - - ps.eye=0.80; - ps.zscreen = 10.0; - ps.znear = 7.0; - ps.zfar = 13.0; - ps.RotationY = 0.0; - ps.RotationIncrement = 4.0; - ps.solidmode = 1; -} - -void KeyboardFunc(unsigned char key, int x, int y) -{ - switch(key) - { - case 27: /* escape */ - case 'q': - case 'Q': - exit(0); - break; - case 's': /* stereo */ - ps.eye = 0.80; - break; - case '1': - ps.solidmode = 1; - glFrontFace(GL_CCW); - break; - case '2': - ps.solidmode = 2; - glFrontFace(GL_CCW); - break; - case '3': - ps.solidmode = 3; - /* The teapot polygons face the wrong way. Sigh. */ - glFrontFace(GL_CW); - break; - case '4': - ps.solidmode = 4; - glFrontFace(GL_CCW); - break; - case 'm': /* mono */ - ps.eye = 0.0; - break; - } -} - -void MenuFunc(int value) -{ - KeyboardFunc((unsigned char) value, 0, 0); -} - -void IdleFunc(void) -{ - ps.RotationY += ps.RotationIncrement; - glutPostRedisplay(); -} - -void ReshapeFunc(int w, int h) -{ - glViewport(0,0, w, h); - ps.w = w; - ps.h = h; -} - -void DisplayFunc(void) -{ - double xfactor=1.0, yfactor=1.0; - double Eye =0.0; - int i; - - if(ps.w < ps.h) - { - xfactor = 1.0; - yfactor = ps.h/ps.w; - } - else if(ps.h < ps.w) - { - xfactor = ps.w/ps.h; - yfactor = 1.0; - } - - glClear(GL_COLOR_BUFFER_BIT); - for(i=0;i<2;i++) - { - glEnable(GL_LIGHT0 + i); - glClear(GL_DEPTH_BUFFER_BIT); - if(i==0) /* left eye - RED */ - { - Eye = ps.eye; - glColorMask(GL_TRUE,GL_FALSE,GL_FALSE,GL_TRUE); - } - else /* if(i==1) right eye - BLUE */ - { - Eye = -ps.eye; - glColorMask(GL_FALSE,GL_FALSE,GL_TRUE,GL_TRUE); - } - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glFrustum( - (-(ps.w/(2.0*PIXELS_PER_INCH))+Eye) *(ps.znear/ps.zscreen)*xfactor, - (ps.w/(2.0*PIXELS_PER_INCH)+Eye) *(ps.znear/ps.zscreen)*xfactor, - -(ps.h/(2.0*PIXELS_PER_INCH))*(ps.znear/ps.zscreen)*yfactor, - (ps.h/(2.0*PIXELS_PER_INCH))*(ps.znear/ps.zscreen)*yfactor, - ps.znear, ps.zfar); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(Eye,0.0,0.0); - glTranslated(0,0,-ps.zscreen); - - switch(ps.solidmode) - { - case 1: - { - glTranslated(cos(ps.RotationY*M_PI/180.0), - 0, -sin(ps.RotationY*M_PI/180.0) ); - glRotated(ps.RotationY, 0.0,0.1,0.0); - glPushMatrix(); - glScalef(0.5,0.5,0.5); - glutSolidDodecahedron(); - glPopMatrix(); - break; - } - case 2: - { - glTranslated(cos(ps.RotationY*M_PI/180.0), - 0, -sin(ps.RotationY*M_PI/180.0) ); - glRotated(ps.RotationY, 0.0,0.1,0.0); - glutSolidIcosahedron(); - break; - } - case 3: - { - glRotated(60.0, 1 , 0, 0); - glTranslated(cos(ps.RotationY*M_PI/180.0), - 0, -sin(ps.RotationY*M_PI/180.0) ); - glRotated(ps.RotationY, 0.0,0.1,0.0); - glutSolidTeapot(1.0); - break; - } - case 4: - { - double SunRadius = 0.2; - double SunToEarth = 1.0; - double EarthRadius = 0.15; - - glutSolidSphere(SunRadius, 20, 16); /* draw sun */ - glRotated(60.0, 1 , 0, 0); - glPushMatrix(); - glRotated(90.0, 1 , 0, 0); - glutSolidTorus(0.01,SunToEarth, 10,50); - glPopMatrix(); - glRotated(ps.RotationY, 0.0,0.1,0.0); - glTranslatef (SunToEarth, 0.0, 0.0); - glutSolidSphere(EarthRadius, 10, 8); /* draw earth */ - break; - } - } - glDisable(GL_LIGHT0 + i); - } - glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE); - glutSwapBuffers(); -} -void -VisibilityFunc(int vis) -{ - if (vis == GLUT_VISIBLE) { - glutIdleFunc(IdleFunc); - } else { - glutIdleFunc(NULL); - } -} -int main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA ); - ps.w = 512; - ps.h = 512; - glutInitWindowSize(ps.w, ps.h); - glutInitWindowPosition(100,100); - - glutCreateWindow(argv[0]); - init(); - glutVisibilityFunc(VisibilityFunc); - glutDisplayFunc(DisplayFunc); - glutReshapeFunc(ReshapeFunc); - glutKeyboardFunc(KeyboardFunc); - glutCreateMenu(MenuFunc); - glutAddMenuEntry("Stereo", 's'); - glutAddMenuEntry("Mono", 'm'); - glutAddMenuEntry("Dodecahedron", '1'); - glutAddMenuEntry("Icosahedron", '2'); - glutAddMenuEntry("Teapot", '3'); - glutAddMenuEntry("Solar system", '4'); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutMainLoop(); - return 0; -} - diff --git a/lib/glut-3.7.6/progs/advanced/redblue_stereo.dsp b/lib/glut-3.7.6/progs/advanced/redblue_stereo.dsp deleted file mode 100644 index 6c52f55d1..000000000 --- a/lib/glut-3.7.6/progs/advanced/redblue_stereo.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="redblue_stereo" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=redblue_stereo - 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 "redblue_stereo.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 "redblue_stereo.mak" CFG="redblue_stereo - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "redblue_stereo - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "redblue_stereo - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "redblue_stereo - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "redblue_stereo - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "redblue_stereo - Win32 Release" -# Name "redblue_stereo - Win32 Debug" -# Begin Source File - -SOURCE=.\redblue_stereo.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced/rts.c b/lib/glut-3.7.6/progs/advanced/rts.c deleted file mode 100644 index 226e89671..000000000 --- a/lib/glut-3.7.6/progs/advanced/rts.c +++ /dev/null @@ -1,2168 +0,0 @@ - -/* 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. */ - -/* Real-time Shadowing library, Version 0.97 */ - -/* XXX This is library is not fully implemented yet, but still quite - functional. */ - -/* XXX This code _does_ assume that you that your realloc can realloc NULL - (as specified by ANSI C). You also should have the 1.2 version of the - OpenGL Utility (GLU) library. SGI users need IRIX 6.2 (or higher) or IRIX - 5.3 with patch 1449 installed. */ - -/* This code will use multiple CPUs if available in its SGI version - using IRIX's Shared Parallel Arena facility. The generation of - silhouettes with the GLU 1.2 tessellator is farmed out to a gang for - tessellation threads. */ - -/* This code will use Win32's multithreading and multiple CPUs if - available when compiled with the Visual C++ "/MT" option. Just - like with the IRIX multiprocessor support, the generation of - silhouettes with the GLU 1.2 tessellator is farmed out to a gang - of tessellation threads. -mjk July 28, 1998. */ - -/* Please do not naively assume that enabling the multiprocessor - code will make rts-based programs run any faster if you do not - have multiple CPUs. Indeed, the extra thread overhead will in - fact likely make the program slightly slower. */ - -#ifdef __sgi -# define MP -#endif - -#ifdef _WIN32 -# include /* for wglGetProcAddress */ -# ifdef _MT /* If Visual C++ "/MT" compiler switch specified. */ -# define MP -# endif -#endif - -#ifndef NDEBUG -#define NDEBUG /* No assertions for best performance. */ -#endif - -#include -#include -#include -#include -#include -#ifdef MP -# ifdef __sgi -# include -# include -# include -# include -# include -# endif -# ifdef _WIN32 -# include -# endif -#endif - -#include "rtshadow.h" - -/* The "real time shadows" (RTS) library code requires the GLU 1.2 - polygon tessellator's boundary return capability to work. */ -#ifdef GLU_VERSION_1_2 - -/* Win32 calling conventions. */ -#ifndef CALLBACK -#define CALLBACK -#endif - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -/* For testing... */ -#if 0 -#undef GL_VERSION_1_1 -#undef GL_EXT_vertex_array -#endif - -#if defined(GL_VERSION_1_1) || defined(GL_EXT_vertex_array) -static int hasVertexArray = 0; -#else -static const int hasVertexArray = 0; -#endif - -#ifdef GL_EXT_blend_subtract -static int hasBlendSubtract = 0; -#if defined(_WIN32) && !defined(MESA) -PFNGLBLENDEQUATIONEXTPROC glBlendEquationEXT = NULL; -#endif -#else -static const int hasBlendSubtract = 0; -#endif - -/* Coordinates. */ -enum { - X, Y, Z -}; - -struct VertexHolder2D { - struct VertexHolder2D *next; - GLfloat v[2]; -}; - -struct VertexHolder3D { - struct VertexHolder3D *next; - GLfloat v[3]; -}; - -#ifndef MP - -# define NUM_CONTEXTS 1 -# define MP_ASSERT(assertion) - -# define ARENA_VARIABLE(arena) -# define SEMA_VARIABLE(sema) -# define LOCK_VARIABLE(lock) -# define THREAD_VARIABLE(thread) -# define INITSEMA(arena) -# define WAIT(sema) -# define SIGNAL(sema) -# define INITLOCK(arena) -# define LOCK(lock) -# define UNLOCK(lock) -# define PRIVATE_MALLOC(size) malloc(size) -# define PRIVATE_FREE(ptr) free(ptr) -# define PRIVATE_REALLOC(ptr, size) realloc(ptr, size) -# define SHARED_MALLOC(size) malloc(size) -# define SHARED_FREE(ptr) free(ptr) -# define SHARED_REALLOC(ptr, size) realloc(ptr, size) - -#else - -# define NUM_CONTEXTS 4 -# define MP_ASSERT(assertion) assert(assertion) - -# ifdef __sgi - -# define ARENA_VARIABLE(arena) usptr_t *arena; -# define SEMA_VARIABLE(sema) usema_t *sema; -# define LOCK_VARIABLE(lock) ulock_t lock; -# define THREAD_VARIABLE(thread) pid_t thread; - -# define INITSEMA(arena, value) usnewsema(arena, value) -# define WAIT(sema) uspsema(sema) -# define SIGNAL(sema) usvsema(sema) -# define SAMPLE(sema) ustestsema(sema) - -# define INITLOCK(arena) usnewlock(arena) -# define LOCK(lock) ussetlock(lock) -# define UNLOCK(lock) usunsetlock(lock) - -# define PRIVATE_MALLOC(size) malloc(size) -# define PRIVATE_FREE(ptr) free(ptr) -# define PRIVATE_REALLOC(ptr, size) realloc(ptr, size) - -# define SHARED_MALLOC(size) usmalloc(size, arena) -# define SHARED_FREE(ptr) usfree(ptr, arena) -# define SHARED_REALLOC(ptr, size) usrealloc(ptr, size, arena) - -# endif /* __sgi */ - -# ifdef _WIN32 - -# define ARENA_VARIABLE(arena) HANDLE arena; -# define SEMA_VARIABLE(sema) HANDLE sema; -# define LOCK_VARIABLE(lock) HANDLE lock; -# define THREAD_VARIABLE(thread) HANDLE thread; - -# define INITSEMA(arena, value) CreateSemaphore(NULL, value, NUM_CONTEXTS, NULL) -# define WAIT(sema) WaitForSingleObject(sema, INFINITE) -# define SIGNAL(sema) ReleaseSemaphore(sema, 1, NULL) - - /* Does Win32 have something cheaper than a mutex for locking? */ -# define INITLOCK(arena) CreateMutex(NULL, FALSE, NULL) -# define LOCK(lock) WaitForSingleObject(lock, INFINITE) -# define UNLOCK(lock) ReleaseMutex(lock) - -# define PRIVATE_MALLOC(size) malloc(size) -# define PRIVATE_FREE(ptr) free(ptr) -# define PRIVATE_REALLOC(ptr, size) realloc(ptr, size) - -# define SHARED_MALLOC(size) malloc(size) -# define SHARED_FREE(ptr) free(ptr) -# define SHARED_REALLOC(ptr, size) realloc(ptr, size) - -# endif /* _WIN32 */ - -typedef enum { - CS_UNUSED, CS_CAPTURING, CS_QUEUED, CS_GENERATING -} ContextState; - -#endif - -typedef struct ShadowVolumeState ShadowVolumeState; - -typedef struct TessellationContext { -#ifdef MP - ContextState state; -#endif - RTSscene *scene; - RTSlight *light; - RTSobject *object; - ShadowVolumeState *svs; - - GLUtesselator *tess; - - /* For managing memory allocated by the GLU tessellator's - combine callback. */ - GLfloat *combineList; - int combineListSize; - int combineNext; - struct VertexHolder2D *excessList2D; - - int saveFirst; - GLfloat *firstVertex; - - GLfloat *feedbackBuffer; - int feedbackBufferSize; - int feedbackBufferReturned; - - GLfloat shadowProjectionDistance; - GLfloat extentScale; - - int nextVertex; - int *header; - struct VertexHolder3D *excessList3D; -} TessellationContext; - -const float uniquePassThroughValue = 34567.0; - -#define SmallerOf(a,b) ((a) < (b) ? (a) : (b)) - -ARENA_VARIABLE(arena) -SEMA_VARIABLE(contextAvailable) -LOCK_VARIABLE(accessQueue) -SEMA_VARIABLE(silhouetteNeedsGeneration) - -static TessellationContext *context[NUM_CONTEXTS]; - -struct RTSscene { - GLfloat eyePos[3]; - GLbitfield usableStencilBits; - int numStencilBits; - char bitList[32]; - void (*renderSceneFunc) (GLenum castingLight, void *sceneData, RTSscene * scene); - void *sceneData; - - SEMA_VARIABLE(silhouetteGenerationDone) - THREAD_VARIABLE(*workerPids) -#ifdef MP - ShadowVolumeState *waitingForSVS; -#endif - - GLfloat viewScale; - GLint stencilBits; - int stencilValidateNeeded; - - GLfloat sceneAmbient[4]; - - int lightListSize; - RTSlight **lightList; - - GLboolean stencilRenderingInvariantHack; -}; - -struct ShadowVolumeState { - int lightSernum; - int objectSernum; -#ifdef MP - int generationDone; -#endif - - int silhouetteSize; - GLfloat *silhouette; - - GLfloat angle; - GLfloat axis[3]; - - GLfloat topScale; -}; - -struct RTSlight { - int refcnt; - int sernum; - - GLenum glLight; - GLfloat lightPos[3]; - GLfloat radius; - - int state; - - int sceneListSize; - RTSscene **sceneList; - - int objectListSize; - RTSobject **objectList; - ShadowVolumeState *shadowVolumeList; -}; - -struct RTSobject { - int refcnt; - int sernum; - - GLfloat objectPos[3]; - GLfloat maxRadius; - void (*renderObject) (void *objectData); - void *objectData; - - int feedbackBufferSizeGuess; - - int state; - - int lightListSize; - RTSlight **lightList; -}; - -#if defined(GL_VERSION_1_1) -static int -supportsOneDotOne(void) -{ - const char *version; - int major, minor; - - version = (char *) glGetString(GL_VERSION); - if (sscanf(version, "%d.%d", &major, &minor) == 2) - return major >= 1 && minor >= 1; - return 0; /* OpenGL version string malformed! */ -} -#endif - -static int -extensionSupported(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 (;;) { - 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; -} - -static GLfloat * -nextVertexHolder3D(TessellationContext * context) -{ - struct VertexHolder3D *holder; - ShadowVolumeState *svs; - GLfloat *newHolder; - - svs = context->svs; - if (context->nextVertex >= svs->silhouetteSize) { - holder = (struct VertexHolder3D *) PRIVATE_MALLOC(sizeof(struct VertexHolder3D)); - if (holder == NULL) { - printf("holder alloc problem\n"); - } - holder->next = context->excessList3D; - context->excessList3D = holder; - newHolder = holder->v; - } else { - newHolder = &svs->silhouette[context->nextVertex * 3]; - } - context->nextVertex++; - return newHolder; -} - -/* ARGSUSED */ -static void CALLBACK -begin(GLenum type, void *polyData) -{ - TessellationContext *context = polyData; - GLfloat *newHolder; - - assert(type == GL_LINE_LOOP); - context->saveFirst = 1; - - context->header = (int *) nextVertexHolder3D(context); - context->header[0] = context->nextVertex; - context->header[1] = 0xdeadbabe; /* Aid assertion testing. */ - context->header[2] = 0xdeadbeef; /* Non-termintor token. */ - - newHolder = nextVertexHolder3D(context); - newHolder[X] = 0.0; - newHolder[Y] = 0.0; - newHolder[Z] = 0.0; -} - -static void CALLBACK -vertex(void *data, void *polyData) -{ - TessellationContext *context = polyData; - GLfloat *v = data; - GLfloat *newHolder; - - newHolder = nextVertexHolder3D(context); - newHolder[X] = context->extentScale * v[X]; - newHolder[Y] = context->extentScale * v[Y]; - newHolder[Z] = context->shadowProjectionDistance; - if (context->saveFirst) { - context->firstVertex = newHolder; - context->saveFirst = 0; - } -} - -static void CALLBACK -end(void *polyData) -{ - TessellationContext *context = polyData; - GLfloat *newHolder; - - newHolder = nextVertexHolder3D(context); - newHolder[X] = context->firstVertex[X]; - newHolder[Y] = context->firstVertex[Y]; - newHolder[Z] = context->firstVertex[Z]; - assert(context->firstVertex[Z] == context->shadowProjectionDistance); - - assert(context->header[1] == 0xdeadbabe); - assert(context->header[2] == 0xdeadbeef); - context->header[1] = context->nextVertex - context->header[0]; -} - -static void -freeExcessList(TessellationContext * context) -{ - struct VertexHolder2D *holder, *next; - - holder = context->excessList2D; - while (holder) { - next = holder->next; - PRIVATE_FREE(holder); - holder = next; - } - context->excessList2D = NULL; -} - -/* The GLU tessellator's combine callback is called to create a - new vertex when tessellation detects an intersection or wishes - to merge features. - - The memory for the new vertex must be allocated by the GLU - tessellator caller. The caller is also responsible for this - memory's deletion. The combineList is an array for the memory - for these combined vertices. The array is of size combineListSize. - combineNext decides how many vertices are in use on the combineList. - - The combineList is of finite size. When this list is exhausted, - individual vertex memory is allocated via malloc in a linked list. - This is the excessList2D linked list. After tessellation, the - combineList will be expanded by how many vertices had to be - added to the excessList2D list. The idea is that next time the - shadow volume tessellation is done, the combineList should - hopefully be large enough. - -/* ARGSUSED1 */ -static void CALLBACK -combine(GLdouble coords[3], void *d[4], GLfloat w[4], - void **dataOut, void *polyData) -{ - TessellationContext *context = polyData; - struct VertexHolder2D *holder; - GLfloat *newHolder; - - if (context->combineNext >= context->combineListSize) { - holder = (struct VertexHolder2D *) PRIVATE_MALLOC(sizeof(struct VertexHolder2D)); - if (holder == NULL) { - printf("got no holder alloc\n"); - } - holder->next = context->excessList2D; - context->excessList2D = holder; - newHolder = holder->v; - } else { - newHolder = &context->combineList[context->combineNext * 2]; - } - - newHolder[0] = (GLfloat) coords[0]; - newHolder[1] = (GLfloat) coords[1]; - *dataOut = newHolder; - - context->combineNext++; -} - -static void CALLBACK -error(GLenum errno) -{ - fprintf(stderr, "ERROR: %s\n", gluErrorString(errno)); -} - -#ifdef DEBUG - -/* These verify routines are useful for asserting the sanity of - the silhouette data structures. */ - -static void -verifySilhouette(ShadowVolumeState * svs) -{ - int *infoPtr = (int *) svs->silhouette; - int *info = infoPtr; - int fan; - - if (info[0] == 0) { - printf("2 ZERO\n"); - } - if (info ==0) { - printf("ZERO\n"); - } - fan = 0; - for (;;) { - if(info[2] == 0xdeadbeef || info[2] == 0xcafecafe) { - if (info[2] == 0xcafecafe) { - return; - } - info += ((1 + info[1]) * 3); - fan++; - } else { - printf("Corrupted silhouette! (svs=0x%x, silhouette=0x%x, fan=%d)\n", - svs, svs->silhouette, fan); - abort(); - } - } -} - -static void -verifySilhouettesOfScene(RTSscene *scene) -{ - int i, obj; - RTSlight *light; - - for (i = 0; i < scene->lightListSize; i++) { - light = scene->lightList[i]; - if (light) { - for (obj = 0; obj < light->objectListSize; obj++) { - ShadowVolumeState *svs; - - svs = &light->shadowVolumeList[obj]; - if (svs && svs->generationDone) { - verifySilhouette(svs); - } - } - } - } -} - -#endif - -static void -generateSilhouette(TessellationContext * context) -{ - ShadowVolumeState * svs; - GLfloat *start, *end, *loc; - GLfloat *eyeLoc; - GLdouble v[3]; - int token, nvertices, i; - GLfloat passThroughToken; - int watchingForEyePos; - struct VertexHolder3D *holder, *next; - - assert(context->excessList2D == NULL); - assert(context->excessList3D == NULL); - - svs = context->svs; - - context->nextVertex = 0; - - watchingForEyePos = 0; - eyeLoc = NULL; - - gluTessBeginPolygon(context->tess, context); - start = context->feedbackBuffer; - end = start + context->feedbackBufferReturned; - for (loc = start; loc < end;) { - token = *loc; - loc++; - switch (token) { - case GL_POLYGON_TOKEN: - nvertices = *loc; - loc++; - assert(nvertices >= 3); - gluTessBeginContour(context->tess); - for (i = 0; i < nvertices; i++) { - v[0] = loc[0]; - v[1] = loc[1]; - v[2] = 0.0; - gluTessVertex(context->tess, v, loc); - loc += 2; - } - gluTessEndContour(context->tess); - break; - case GL_PASS_THROUGH_TOKEN: - passThroughToken = *loc; - if (passThroughToken == uniquePassThroughValue) { - watchingForEyePos = !watchingForEyePos; - } else { - /* Ignore everything else. */ - fprintf(stderr, "WARNING: Unexpected feedback token 0x%x (%d).\n", - token, token); - } - loc++; - break; - case GL_POINT_TOKEN: - if (watchingForEyePos) { - fprintf(stderr, - "WARNING: Eye point possibly within the shadow volume.\n"); - fprintf(stderr, - " Program should be improved to handle this.\n"); - /* XXX Write code to handle this case. You would need to determine - if the point was instead any of the returned boundary polyons. - Once you found that you were really in the clipping volume, then I - haven't quite thought about what you do. */ - eyeLoc = loc; - watchingForEyePos = 0; - } else { - /* Ignore everything else. */ - fprintf(stderr, "WARNING: Unexpected feedback token 0x%x (%d).\n", - token, token); - } - loc += 2; - break; - default: - /* Ignore everything else. */ - fprintf(stderr, "WARING: Unexpected feedback token 0x%x (%d).\n", - token, token); - } - } - gluTessEndPolygon(context->tess); - - /* Free any memory that got allocated due to the combine callback during - tessellation and then enlarge the combineList so we hopefully don't need - the combine list next time. */ - if (context->combineNext > context->combineListSize) { - freeExcessList(context); - context->combineListSize = context->combineNext; - SHARED_FREE(context->combineList); - context->combineList = SHARED_MALLOC(sizeof(GLfloat) * 2 * context->combineListSize); - if (context->combineList == NULL) { - printf("problem alloc context->combineList\n"); - } - } - context->combineNext = 0; - - context->header[2] = 0xcafecafe; /* Terminating token. */ - - if (context->excessList3D) { -#ifndef NDEBUG - int oldSize; - - oldSize = svs->silhouetteSize; -#endif - assert(context->nextVertex > svs->silhouetteSize); - svs->silhouetteSize = context->nextVertex; - svs->silhouette = SHARED_REALLOC(svs->silhouette, - svs->silhouetteSize * sizeof(GLfloat) * 3); - if (svs->silhouette == NULL) { - fprintf(stderr, "libRTS: generateSilhouette: out of memory\n"); - abort(); - } - holder = context->excessList3D; - while (holder) { - context->nextVertex--; - svs->silhouette[context->nextVertex * 3] = holder->v[0]; - svs->silhouette[context->nextVertex * 3 + 1] = holder->v[1]; - svs->silhouette[context->nextVertex * 3 + 2] = holder->v[2]; - next = holder->next; - PRIVATE_FREE(holder); - holder = next; - } - assert(context->nextVertex == oldSize); - context->excessList3D = NULL; - } - - /* Validate shadow volume state's serial numbers. */ - svs->lightSernum = context->light->sernum; - svs->objectSernum = context->object->sernum; -} - -static int -listBits(GLbitfield usableStencilBits, char bitList[32]) -{ - int num = 0, bit = 0; - - while (usableStencilBits) { - if (usableStencilBits & 0x1) { - bitList[num] = bit; - num++; - } - bit++; - usableStencilBits >>= 1; - } - return num; -} - -/* Three element vector dot product. */ -static GLfloat -vdot(const GLfloat * v1, const GLfloat * v2) -{ - return v1[0] * v2[0] + v1[1] * v2[1] + v1[2] * v2[2]; -} - -/* Three element vector cross product. */ -static void -vcross(const GLfloat * v1, const GLfloat * v2, GLfloat * cross) -{ - assert(v1 != cross && v2 != cross); - cross[0] = (v1[1] * v2[2]) - (v1[2] * v2[1]); - cross[1] = (v1[2] * v2[0]) - (v1[0] * v2[2]); - cross[2] = (v1[0] * v2[1]) - (v1[1] * v2[0]); -} - -static GLfloat -getViewScale(RTSscene * scene) -{ - if (scene->viewScale == 0.0) { - GLfloat maxViewSize[2]; - - glGetFloatv(GL_MAX_VIEWPORT_DIMS, maxViewSize); - scene->viewScale = SmallerOf(maxViewSize[0], maxViewSize[1]) / 2.0; - - /* Other stuff piggy backs on viewScale to ensure initialization. */ - - glGetIntegerv(GL_STENCIL_BITS, &scene->stencilBits); - -#if defined(GL_VERSION_1_1) - hasVertexArray = supportsOneDotOne(); -#elif defined(GL_EXT_vertex_array) - hasVertexArray = extensionSupported("GL_EXT_vertex_array"); -#endif - -#ifdef GL_EXT_blend_subtract - hasBlendSubtract = extensionSupported("GL_EXT_blend_subtract"); -#if defined(_WIN32) && !defined(MESA) - if (hasBlendSubtract) { - glBlendEquationEXT = (PFNGLBLENDEQUATIONEXTPROC) wglGetProcAddress("glBlendEquationEXT"); - if (glBlendEquationEXT == NULL) { - hasBlendSubtract = 0; - } - } -#endif - - /* XXX RealityEngine workaround. */ - if (!strcmp((char *) glGetString(GL_VENDOR), "SGI")) { - if (!strncmp((char *) glGetString(GL_RENDERER), "RE", 2)) { - fprintf(stderr, "WARNING: RealityEngine workaround forcing additive blending.\n"); - hasBlendSubtract = 0; - } - } -#endif - } - return scene->viewScale; -} - -static void -captureLightView(RTSscene * scene, RTSlight * light, RTSobject * object, - ShadowVolumeState * svs, TessellationContext * context) -{ - static GLfloat unit[3] = - {0.0, 0.0, 1.0}; - int feedbackBufferSizeGuess; - GLfloat lightDelta[3], eyeDelta[3]; - GLfloat lightDistance, eyeDistance, fieldOfViewRatio, viewScale; - GLdouble fieldOfViewAngle; - GLdouble nnear, ffar; /* Avoid x86 C keywords. Grumble. */ - GLint returned; - - MP_ASSERT(context->state == CS_CAPTURING); - viewScale = getViewScale(scene); - -#ifdef MP - svs->generationDone = 0; -#endif - - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - - /* Calculate the light's distance from the object being shadowed. */ - lightDelta[X] = object->objectPos[X] - light->lightPos[X]; - lightDelta[Y] = object->objectPos[Y] - light->lightPos[Y]; - lightDelta[Z] = object->objectPos[Z] - light->lightPos[Z]; - lightDistance = (GLfloat) sqrt(lightDelta[X] * lightDelta[X] + - lightDelta[Y] * lightDelta[Y] + lightDelta[Z] * lightDelta[Z]); - - /* Determine the appropriate field of view. We want to use as narrow a - field of view as possible to not waste resolution, but not narrower than - the object. Add 50% extra slop. */ - fieldOfViewRatio = object->maxRadius / lightDistance; - if (fieldOfViewRatio > 0.99) { - fprintf(stderr, - "WARNING: Clamping FOV to 164 degrees for determining shadow.\n"); - fprintf(stderr, - " Light distance = %g, object maxmium radius = %g\n", - lightDistance, object->maxRadius); - - /* 2*asin(0.99) ~= 164 degrees. */ - fieldOfViewRatio = 0.99; - } - /* Pre-compute scaling factors for the near and far extent of the shadow - volume. */ - context->extentScale = light->radius * fieldOfViewRatio / viewScale; - context->shadowProjectionDistance = light->radius; - - nnear = 0.5 * (lightDistance - object->maxRadius); - if (nnear < 0.0001) { - fprintf(stderr, - "WARNING: Clamping near clip plane to 0.0001 because light source too near.\n"); - fprintf(stderr, - " Light distance = %g, object maxmium radius = %g\n", - lightDistance, object->maxRadius); - nnear = 0.0001; - } - ffar = 2.0 * (lightDistance + object->maxRadius); - - eyeDelta[X] = scene->eyePos[X] - light->lightPos[X]; - eyeDelta[Y] = scene->eyePos[Y] - light->lightPos[Y]; - eyeDelta[Z] = scene->eyePos[Z] - light->lightPos[Z]; - eyeDistance = 1.05 * - sqrt(eyeDelta[X] * eyeDelta[X] + eyeDelta[Y] * eyeDelta[Y] - + eyeDelta[Z] * eyeDelta[Z]); - if (eyeDistance > ffar) { - ffar = eyeDistance; - } - fieldOfViewAngle = 2.0 * asin(fieldOfViewRatio) * 180 / M_PI; - gluPerspective(fieldOfViewAngle, 1.0, nnear, ffar); - - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); - /* XXX Look up vector needs adjusting. */ - gluLookAt(light->lightPos[X], light->lightPos[Y], light->lightPos[Z], - object->objectPos[X], object->objectPos[Y], object->objectPos[Z], - 0.0, 1.0, 0.0); /* up is in positive Y direction */ - - glPushAttrib(GL_VIEWPORT_BIT); - glViewport(-viewScale, -viewScale, 2 * viewScale, 2 * viewScale); - - feedbackBufferSizeGuess = object->feedbackBufferSizeGuess; - -doFeedback: - - if (feedbackBufferSizeGuess > context->feedbackBufferSize) { - context->feedbackBufferSize = feedbackBufferSizeGuess; - object->feedbackBufferSizeGuess = feedbackBufferSizeGuess; - - /* A "free & malloc" is better than a "realloc" below because we - do not care for the previous buffer contents to be preserved. */ - /* XXX Add 32 words of slop (an extra cache line) to end for buggy - hardware that uses DMA to return feedback results but that sometimes - overrun the buffer. Yuck. */ - SHARED_FREE(context->feedbackBuffer); - context->feedbackBuffer = (GLfloat *) - SHARED_MALLOC(context->feedbackBufferSize * sizeof(GLfloat) + 32 * 4); - if (context->feedbackBuffer == NULL) { - fprintf(stderr, "libRTS: captureLightView: out of memory\n"); - abort(); - } - } - glFeedbackBuffer(context->feedbackBufferSize, - GL_2D, context->feedbackBuffer); - - (void) glRenderMode(GL_FEEDBACK); - - /* Render the eye position. The eye position is "bracketed" by unique pass - through tokens. These bracketing pass through tokens let us determine if - the eye position was clipped or not. This helps us determine whether the - eye position is possibly within the shadow volume or not. If the point is - clipped, the eye position is not in the shadow volume. If the point is - not clipped, a more complicated test is necessary to determine if the eye - position is really in the shadow volume or not. See generateSilhouette. */ - glPassThrough(uniquePassThroughValue); - glBegin(GL_POINTS); - glVertex3fv(scene->eyePos); - glEnd(); - glPassThrough(uniquePassThroughValue); - - (object->renderObject) (object->objectData); - - returned = glRenderMode(GL_RENDER); - assert(returned <= context->feedbackBufferSize); -#if 0 - if (returned == -1) { -#else - /* XXX RealityEngine workaround. */ - if (returned == -1 || returned == context->feedbackBufferSize) { -#endif - feedbackBufferSizeGuess = context->feedbackBufferSize - + (context->feedbackBufferSize >> 1); - goto doFeedback; /* Try again with larger feedback buffer. */ - } - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); - glPopAttrib(); /* Restore viewport. */ - - vcross(unit, lightDelta, svs->axis); - svs->angle = (GLfloat) acos(vdot(unit, lightDelta) / lightDistance) * 180.0 / M_PI; - svs->topScale = (lightDistance + object->maxRadius) / light->radius; - - context->feedbackBufferReturned = returned; - - context->scene = scene; - context->light = light; - context->object = object; - context->svs = svs; -} - -static TessellationContext * -createTessellationContext(void) -{ - TessellationContext *context; - GLUtesselator *tess; - - context = (TessellationContext *) SHARED_MALLOC(sizeof(TessellationContext)); - if (context == NULL) { - printf("TessellationContext alloc failed\n"); - return NULL; - } - tess = gluNewTess(); - if (tess == NULL) { - SHARED_FREE(context); - return NULL; - } - gluTessProperty(tess, GLU_TESS_BOUNDARY_ONLY, GL_TRUE); - gluTessProperty(tess, GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_NONZERO); - gluTessCallback(tess, GLU_TESS_BEGIN_DATA, (void (CALLBACK*)()) &begin); - gluTessCallback(tess, GLU_TESS_VERTEX_DATA, (void (CALLBACK*)()) &vertex); - gluTessCallback(tess, GLU_TESS_COMBINE_DATA, (void (CALLBACK*)()) &combine); - gluTessCallback(tess, GLU_TESS_END_DATA, (void (CALLBACK*)()) &end); - gluTessCallback(tess, GLU_TESS_ERROR, error); - context->tess = tess; - -#ifdef MP - context->state = CS_UNUSED; -#endif - context->combineListSize = 0; - context->combineList = NULL; - context->combineNext = 0; - context->excessList2D = NULL; - - context->feedbackBufferSize = 0; - context->feedbackBuffer = NULL; - - context->excessList3D = NULL; - - return context; -} - -#ifdef MP - -static void -work(void) -{ - TessellationContext *workContext; - RTSscene *scene; - int i; - - WAIT(silhouetteNeedsGeneration); - - LOCK(accessQueue); - workContext = NULL; - for (i=0; istate == CS_QUEUED) { - workContext = context[i]; - break; - } - } - assert(workContext); - workContext->state = CS_GENERATING; - UNLOCK(accessQueue); - - generateSilhouette(workContext); - - LOCK(accessQueue); - assert(workContext->state == CS_GENERATING); - workContext->state = CS_UNUSED; - workContext->svs->generationDone = 1; - scene = workContext->scene; - - /* If the main thread is sleeping on this particular - shadow volume, wake up the main thread. */ - if (workContext->svs == scene->waitingForSVS) { - scene->waitingForSVS = NULL; - SIGNAL(scene->silhouetteGenerationDone); - } - UNLOCK(accessQueue); - SIGNAL(contextAvailable); -} - -static void -waitForSilhouetteGenerationDone(RTSscene * scene, ShadowVolumeState *svs) -{ - LOCK(accessQueue); - - if (svs->generationDone == 0) { - scene->waitingForSVS = svs; - UNLOCK(accessQueue); - WAIT(scene->silhouetteGenerationDone); - assert(svs->generationDone); - } else { - UNLOCK(accessQueue); - } -} - -#ifdef __sgi - -static void -worker(void) -{ - signal(SIGHUP, SIG_DFL); - prctl(PR_TERMCHILD); - usadd(arena); - for (;;) { - work(); - } -} - -static void -setupArena(int numWorkers) -{ - static int beenhere = 0; - int i; - THREAD_VARIABLE(pid) - - if (beenhere) { - return; - } - beenhere = 1; - - usconfig(CONF_INITUSERS, 1 + numWorkers); - usconfig(CONF_ARENATYPE, US_SHAREDONLY); - usconfig(CONF_INITSIZE, 1024 * 1024); - arena = usinit("/dev/zero"); - if (arena == NULL) { - fprintf(stderr, "libRTS: could not create arena.\n"); - exit(1); - } - - for (i=0; isilhouetteGenerationDone = INITSEMA(arena, 0); - scene->waitingForSVS = NULL; -#endif - - scene->eyePos[X] = eyePos[X]; - scene->eyePos[Y] = eyePos[Y]; - scene->eyePos[Z] = eyePos[Z]; - scene->usableStencilBits = usableStencilBits; - scene->renderSceneFunc = renderSceneFunc; - scene->sceneData = sceneData; - - scene->viewScale = 0.0; /* 0.0 means "to be determined". */ - scene->stencilValidateNeeded = 1; - - scene->sceneAmbient[0] = 0.2; - scene->sceneAmbient[1] = 0.2; - scene->sceneAmbient[2] = 0.2; - scene->sceneAmbient[3] = 1.0; - - scene->lightListSize = 0; - scene->lightList = NULL; - - scene->stencilRenderingInvariantHack = GL_FALSE; - - return scene; -} - -RTSlight * -rtsCreateLight( - GLenum glLight, - GLfloat lightPos[3], - GLfloat radius) -{ - RTSlight *light; - - light = (RTSlight *) SHARED_MALLOC(sizeof(RTSlight)); - if (light == NULL) { - printf("rtsCreateLight failed\n"); - return NULL; - } - light->refcnt = 1; - light->sernum = 1; - - light->glLight = glLight; - light->lightPos[X] = lightPos[X]; - light->lightPos[Y] = lightPos[Y]; - light->lightPos[Z] = lightPos[Z]; - light->radius = radius; - - light->state = RTS_SHINING_AND_CASTING; - - light->sceneListSize = 0; - light->sceneList = NULL; - - light->objectListSize = 0; - light->objectList = NULL; - light->shadowVolumeList = NULL; - - return light; -} - -RTSobject * -rtsCreateObject( - GLfloat objectPos[3], - GLfloat maxRadius, - void (*renderObject) (void *objectData), - void *objectData, - int feedbackBufferSizeGuess) -{ - RTSobject *object; - - object = (RTSobject *) SHARED_MALLOC(sizeof(RTSobject)); - if (object == NULL) { - printf("rtsCreateObject failed\n"); - return NULL; - } - object->refcnt = 1; - object->sernum = 1; - - object->objectPos[X] = objectPos[X]; - object->objectPos[Y] = objectPos[Y]; - object->objectPos[Z] = objectPos[Z]; - object->maxRadius = maxRadius; - object->renderObject = renderObject; - object->objectData = objectData; - object->feedbackBufferSizeGuess = feedbackBufferSizeGuess; -#ifdef __sgi - /* XXX Impact/Octane feedback bug work around. If the feedback - buffer on Impact/Octane is less than 2048 entries, a buggy - hardware accelerated path is used. Make sure at least 2049 - entries for the feedback buffer; this forces Impact/Octane to use - the (bug free) software feedback path. This bug is fixed in IRIX - 6.5. */ - if (object->feedbackBufferSizeGuess < 2048) { - object->feedbackBufferSizeGuess = 2048; - } -#endif - - object->state = RTS_SHADOWING; - - object->lightListSize = 0; - object->lightList = NULL; - - return object; -} - -void -rtsAddLightToScene( - RTSscene * scene, - RTSlight * light) -{ - int i; - - for (i = 0; i < light->sceneListSize; i++) { - if (light->sceneList[i] == scene) { - return; - } - if (light->sceneList[i] == NULL) { - goto addToSceneList; - } - } - light->sceneListSize++; - light->sceneList = (RTSscene **) SHARED_REALLOC(light->sceneList, - light->sceneListSize * sizeof(RTSscene *)); - if (light->sceneList == NULL) { - fprintf(stderr, "rtsAddLightToScene: out of memory\n"); - abort(); - } -addToSceneList: - - light->sceneList[i] = scene; - - for (i = 0; i < scene->lightListSize; i++) { - if (scene->lightList[i] == light) { - fprintf(stderr, "rtsAddLightToScene: inconsistent lists\n"); - abort(); - } - if (scene->lightList[i] == NULL) { - goto addToLightList; - } - } - scene->lightListSize++; - scene->lightList = (RTSlight **) SHARED_REALLOC(scene->lightList, - scene->lightListSize * sizeof(RTSlight *)); - if (scene->lightList == NULL) { - fprintf(stderr, "rtsAddLightToScene: out of memory\n"); - abort(); - } -addToLightList: - - scene->lightList[i] = light; - - light->refcnt++; -} - -static void -initShadowVolumeState(ShadowVolumeState * svs) -{ - svs->lightSernum = 0; - svs->objectSernum = 0; - svs->silhouette = NULL; - svs->silhouetteSize = 0; -#ifdef MP - svs->generationDone = 0; -#endif -} - -void -rtsAddObjectToLight( - RTSlight * light, - RTSobject * object) -{ - int i; - - for (i = 0; i < object->lightListSize; i++) { - if (object->lightList[i] == light) { - return; - } - if (object->lightList[i] == NULL) { - goto addToLightList; - } - } - object->lightListSize++; - object->lightList = (RTSlight **) SHARED_REALLOC(object->lightList, - object->lightListSize * sizeof(RTSlight *)); - if (object->lightList == NULL) { - fprintf(stderr, "rtsAddObjectToLight: out of memory\n"); - abort(); - } -addToLightList: - object->lightList[i] = light; - - for (i = 0; i < light->objectListSize; i++) { - if (light->objectList[i] == object) { - fprintf(stderr, "rtsAddObjectToLight: inconsistent lists\n"); - abort(); - } - if (light->objectList[i] == NULL) { - goto addToObjectList; - } - } - - /* Extend object list. */ - light->objectListSize++; - light->objectList = (RTSobject **) SHARED_REALLOC(light->objectList, - light->objectListSize * sizeof(RTSscene *)); - if (light->objectList == NULL) { - fprintf(stderr, "rtsAddObjectToLight: out of memory\n"); - abort(); - } - /* Extend shadow volume list. */ - light->shadowVolumeList = (ShadowVolumeState *) - SHARED_REALLOC(light->shadowVolumeList, - light->objectListSize * sizeof(ShadowVolumeState)); - if (light->shadowVolumeList == NULL) { - fprintf(stderr, "rtsAddObjectToLight: out of memory\n"); - abort(); - } -addToObjectList: - - initShadowVolumeState(&light->shadowVolumeList[i]); - - light->objectList[i] = object; - - light->refcnt++; - object->refcnt++; -} - -void -rtsSetLightState( - RTSlight * light, - RTSlightState state) -{ - light->state = state; -} - -void -rtsSetObjectState( - RTSobject * object, - RTSobjectState state) -{ - object->state = state; -} - -void -rtsUpdateEyePos( - RTSscene * scene, - GLfloat eyePos[3]) -{ - scene->eyePos[X] = eyePos[X]; - scene->eyePos[Y] = eyePos[Y]; - scene->eyePos[Z] = eyePos[Z]; -} - -void -rtsUpdateUsableStencilBits( - RTSscene * scene, - GLbitfield usableStencilBits) -{ - scene->usableStencilBits = usableStencilBits; - scene->stencilValidateNeeded = 1; -} - -void -rtsUpdateLightPos( - RTSlight * light, - GLfloat lightPos[3]) -{ - light->lightPos[X] = lightPos[X]; - light->lightPos[Y] = lightPos[Y]; - light->lightPos[Z] = lightPos[Z]; - light->sernum++; -} - -void -rtsUpdateLightRadius( - RTSlight * light, - GLfloat radius) -{ - light->radius = radius; - light->sernum++; -} - -void -rtsUpdateObjectPos( - RTSobject * object, - GLfloat objectPos[3]) -{ - object->objectPos[X] = objectPos[X]; - object->objectPos[Y] = objectPos[Y]; - object->objectPos[Z] = objectPos[Z]; - object->sernum++; -} - -void -rtsUpdateObjectShape( - RTSobject * object) -{ - object->sernum++; -} - -void -rtsUpdateObjectMaxRadius( - RTSobject * object, - GLfloat maxRadius) -{ - object->maxRadius = maxRadius; - object->sernum++; -} - -#if defined(GL_EXT_vertex_array) && !defined(GL_VERSION_1_1) -/* Only needed if has vertex array extension, but no OpenGL 1.1. */ -static void -setupVertexArray(ShadowVolumeState * svs, int numCoordinates) -{ - glDisable(GL_EDGE_FLAG_ARRAY_EXT); - glEnable(GL_VERTEX_ARRAY_EXT); - glDisable(GL_NORMAL_ARRAY_EXT); - glDisable(GL_COLOR_ARRAY_EXT); - glDisable(GL_TEXTURE_COORD_ARRAY_EXT); - glDisable(GL_EDGE_FLAG_ARRAY_EXT); - glVertexPointerEXT(numCoordinates, GL_FLOAT, 3 * sizeof(GLfloat), svs->silhouetteSize, svs->silhouette); -} -#endif - -static void -renderSilhouette(ShadowVolumeState * svs) -{ - int *infoPtr = (int *) svs->silhouette; - int *info = infoPtr; - int end, i; - - /* CONSTANTCONDITION */ - assert(sizeof(GLfloat) == sizeof(GLint)); - - if (hasVertexArray) { -#if defined(GL_VERSION_1_1) - glInterleavedArrays(GL_V2F, 3 * sizeof(GLfloat), svs->silhouette); -#elif defined(GL_EXT_vertex_array) - setupVertexArray(svs, 2); -#endif - } - for (;;) { - assert(info[2] == 0xdeadbeef || info[2] == 0xcafecafe); - /* Two fewer vertices get rendered in the renderSilhouette case (compared - to renderShadowVolumeBase) because because a line loop does not need - the initial fan center or the final repeated first vertex. */ - if (hasVertexArray) { -#if defined(GL_VERSION_1_1) - glDrawArrays(GL_LINE_LOOP, info[0] + 1, info[1] - 2); -#elif defined(GL_EXT_vertex_array) - glDrawArraysEXT(GL_LINE_LOOP, info[0] + 1, info[1] - 2); -#endif - } else { - glBegin(GL_LINE_LOOP); - end = info[0] + info[1] - 2; - for (i = info[0] + 1; i < end; i++) { - glVertex2fv(&svs->silhouette[i * 3]); - } - glEnd(); - } - if (info[2] == 0xcafecafe) { - return; - } - info += ((1 + info[1]) * 3); - } -} - -static void -renderShadowVolumeBase(ShadowVolumeState * svs) -{ - int *infoPtr = (int *) svs->silhouette; - int *info = infoPtr; - int end, i; - int fan; - - fan = 0; - /* CONSTANTCONDITION */ - assert(sizeof(GLfloat) == sizeof(GLint)); - glRotatef(svs->angle, svs->axis[X], svs->axis[Y], svs->axis[Z]); - for (;;) { - assert((info[2] == 0xdeadbeef || info[2] == 0xcafecafe) && info[1] > 0); - if (hasVertexArray) { - /* Note: assumes that glInterleavedArrays has already been called. */ -#if defined(GL_VERSION_1_1) - glDrawArrays(GL_TRIANGLE_FAN, info[0], info[1]); -#elif defined(GL_EXT_vertex_array) - glDrawArraysEXT(GL_TRIANGLE_FAN, info[0], info[1]); -#endif - } else { - glBegin(GL_TRIANGLE_FAN); - end = info[0] + info[1]; - for (i = info[0]; i < end; i++) { - glVertex3fv(&svs->silhouette[i * 3]); - } - glEnd(); - } - if (info[2] == 0xcafecafe) { - return; - } - assert(info[1] > 0); - info += ((1 + info[1]) * 3); - fan++; - } -} - -static void -renderShadowVolume(ShadowVolumeState * svs, GLfloat lightPos[3]) -{ - glPushMatrix(); - glTranslatef(lightPos[X], lightPos[Y], lightPos[Z]); - renderShadowVolumeBase(svs); - glPopMatrix(); -} - -static void -renderShadowVolumeTop(ShadowVolumeState * svs, GLfloat lightPos[3]) -{ - glPushMatrix(); - glTranslatef(lightPos[X], lightPos[Y], lightPos[Z]); - glScalef(svs->topScale, svs->topScale, svs->topScale); - renderShadowVolumeBase(svs); - glPopMatrix(); -} - -static void -validateShadowVolume(RTSscene * scene, RTSlight * light, - RTSobject * object, ShadowVolumeState * svs) -{ - /* Serial number mismatch indicates light or object has changed since last - shadow volume generation. If mismatch, regenerate the shadow volume. */ - if (light->sernum != svs->lightSernum - || object->sernum != svs->objectSernum) { - TessellationContext *workContext; -#ifdef MP - int i; - - WAIT(contextAvailable); - - LOCK(accessQueue); - workContext = NULL; - for (i=0; istate == CS_UNUSED) { - workContext = context[i]; - break; - } - } - assert(workContext); - workContext->state = CS_CAPTURING; - UNLOCK(accessQueue); - - captureLightView(scene, light, - object, svs, workContext); - - workContext->state = CS_QUEUED; - SIGNAL(silhouetteNeedsGeneration); - -#else - workContext = context[0]; - captureLightView(scene, light, - object, svs, workContext); - - generateSilhouette(workContext); -#endif - } -} - -void -rtsRenderScene( - RTSscene * scene, - RTSmode mode) -{ - static GLfloat totalDarkness[4] = - {0.0, 0.0, 0.0, 0.0}; - int i, obj, bit; - int numStencilBits, numCastingLights, numShadowingObjects; - RTSlight *firstLight, *prevLight, *light; - RTSobject *object; - GLbitfield fullStencilMask; - - /* Expect application (caller) to do the glClear (including stencil). */ - /* Expect application (caller) to enable depth testing. */ - - if (mode != RTS_NO_SHADOWS) { - /* Validate shadow volumes, count casting lights, and stash the first - light. */ - numCastingLights = 0; - firstLight = NULL; - for (i = 0; i < scene->lightListSize; i++) { - light = scene->lightList[i]; - if (light) { - if (light->state != RTS_OFF) { - if (light->state == RTS_SHINING_AND_CASTING) { - - if (numCastingLights == 0) { - /* Count number of shadowing objects. */ - numShadowingObjects = 0; - for (obj = 0; obj < light->objectListSize; obj++) { - if (light->objectList[obj]->state == RTS_SHADOWING) { - numShadowingObjects++; - } - } - if (numShadowingObjects == 0) { - /* Not casting on any object; skip it. */ - continue; - } - assert(firstLight == NULL); - firstLight = light; - } - numCastingLights++; - if (numCastingLights == 1 || hasBlendSubtract) { - glEnable(light->glLight); - } else { - glDisable(light->glLight); - } - - for (obj = 0; obj < light->objectListSize; obj++) { - object = light->objectList[obj]; - if (object->state == RTS_SHADOWING) { - ShadowVolumeState *svs; - - svs = &light->shadowVolumeList[obj]; - validateShadowVolume(scene, light, object, svs); - } - } - } else if (light->state == RTS_SHINING_AND_CASTING) { - glEnable(light->glLight); - } - } else { - glDisable(light->glLight); - } - } - } - } - glEnable(GL_LIGHTING); - glEnable(GL_CULL_FACE); - if (scene->stencilRenderingInvariantHack) { - glEnable(GL_STENCIL_TEST); - glStencilFunc(GL_ALWAYS, 0, 0xffffffff); - glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); - } else { - /* XXX Note that the non-hack case does not enable or - disable stencil. The hack case enables stencil - testing but sets up the stencil modes so that stencil - testing is effectively disabled. If you wanted - stencil testing on during the renderSceneFunc, you won't - need to have the hack enabled though! */ - } - scene->renderSceneFunc(GL_NONE, scene->sceneData, scene); - - if (mode == RTS_NO_SHADOWS) { - return; - } - if (numCastingLights == 0) { - /* No lights, no shadows. */ - return; - } - assert(firstLight); - assert(numShadowingObjects > 0); - - /* Determine exactly which stencil bits usable for shadowing. */ - if (scene->stencilValidateNeeded) { - GLbitfield shadowStencilBits; - - shadowStencilBits = scene->usableStencilBits & ((1 << scene->stencilBits) - 1); - scene->numStencilBits = listBits(shadowStencilBits, scene->bitList); - if (scene->numStencilBits == 0) { - fprintf(stderr, - "WARNING: No stencil bits available for shadowing, expect bad results.\n"); - fprintf(stderr, - " Frame buffer stencil bits = %d, usable stencil bits = 0x%x.\n", - scene->stencilBits, scene->usableStencilBits); - } - scene->stencilValidateNeeded = 0; - } - numStencilBits = scene->numStencilBits; - - /* The first light is easier than the rest since we need subtractive - blending for two or more lights. Do the first light the fast way. */ - - bit = 0; - assert(scene->stencilValidateNeeded == 0); - - glDisable(firstLight->glLight); - glEnable(GL_STENCIL_TEST); - glDepthMask(GL_FALSE); - - obj = 0; - while (firstLight->objectList[obj]->state == RTS_NOT_SHADOWING) { - obj++; - } - - do { - assert(bit < numStencilBits); - assert(firstLight->objectList[obj]->state == RTS_SHADOWING); - assert(obj < firstLight->objectListSize); - - fullStencilMask = 0; - - glDisable(GL_LIGHTING); - glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); - glDisable(GL_CULL_FACE); - glStencilFunc(GL_ALWAYS, 0, 0); - do { - -#ifdef MP - waitForSilhouetteGenerationDone(scene, &firstLight->shadowVolumeList[obj]); -#endif - - if (hasVertexArray) { -#if defined(GL_VERSION_1_1) - glInterleavedArrays(GL_V3F, 0, - firstLight->shadowVolumeList[obj].silhouette); -#elif defined(GL_EXT_vertex_array) - setupVertexArray(&firstLight->shadowVolumeList[obj], 3); -#endif - } - fullStencilMask |= 1 << scene->bitList[bit]; - glStencilMask(1 << scene->bitList[bit]); - glStencilOp(GL_KEEP, GL_KEEP, GL_INVERT); - renderShadowVolume(&firstLight->shadowVolumeList[obj], - firstLight->lightPos); - - glStencilOp(GL_KEEP, GL_KEEP, GL_ZERO); - renderShadowVolumeTop(&firstLight->shadowVolumeList[obj], - firstLight->lightPos); - - bit++; - do { - obj++; - } while (obj < firstLight->objectListSize - && firstLight->objectList[obj]->state == RTS_NOT_SHADOWING); - - } while (bit < numStencilBits && obj < firstLight->objectListSize); - - glEnable(GL_CULL_FACE); - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - glDepthFunc(GL_EQUAL); - glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); - glStencilFunc(GL_NOTEQUAL, 0, fullStencilMask); - glEnable(GL_LIGHTING); - scene->renderSceneFunc(firstLight->glLight, scene->sceneData, scene); - if (obj < firstLight->objectListSize) { - glStencilMask(~0); - glClear(GL_STENCIL_BUFFER_BIT); - glDepthFunc(GL_LESS); /* XXX needed? */ - bit = 0; - } - } while (obj < firstLight->objectListSize); - - if (numCastingLights == 1) { - glStencilMask(~0); - glCullFace(GL_BACK); /* XXX Needed? */ - glDepthMask(GL_TRUE); - glDepthFunc(GL_LESS); - if (scene->stencilRenderingInvariantHack) { - glEnable(GL_STENCIL_TEST); - glStencilFunc(GL_ALWAYS, 0, 0xffffffff); - glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); - } else { - glDisable(GL_STENCIL_TEST); - } - if (hasVertexArray) { -#if defined(GL_VERSION_1_1) - glDisableClientState(GL_VERTEX_ARRAY); -#elif defined(GL_EXT_vertex_array) - glDisable(GL_VERTEX_ARRAY_EXT); -#endif - } - return; - } - /* Get ready to subtract out the particular contribution for each light - source in regions shadowed by the light source's shadowing objects. */ - glLightModelfv(GL_LIGHT_MODEL_AMBIENT, totalDarkness); - glDepthFunc(GL_LESS); -#ifdef GL_EXT_blend_subtract - if (hasBlendSubtract) { - glBlendEquationEXT(GL_FUNC_REVERSE_SUBTRACT_EXT); - } -#endif - glBlendFunc(GL_ONE, GL_ONE); - glEnable(GL_BLEND); - - prevLight = firstLight; - - for (i = 1; i < scene->lightListSize; i++) { - light = scene->lightList[i]; - if (light) { - if (light->state == RTS_SHINING_AND_CASTING) { - - /* Count number of shadowing objects. */ - numShadowingObjects = 0; - for (obj = 0; obj < light->objectListSize; obj++) { - if (light->objectList[obj]->state == RTS_SHADOWING) { - numShadowingObjects++; - } - } - - if (numShadowingObjects > 0) { - int reservedStencilBit; - - assert(scene->stencilValidateNeeded == 0); - - /* Switch off the last light; switch on the current light (all - other lights should be disabled). */ - glDisable(prevLight->glLight); - glEnable(light->glLight); - - /* Complicated logic to try to figure out the stencil clear - strategy. Tries hard to conserve stencil bit planes and scene - re-renders. */ - if (numStencilBits < numShadowingObjects) { - if (numStencilBits == 1) { - fprintf(stderr, "WARNING: 1 bit of stencil not enough to reserve a bit.\n"); - fprintf(stderr, " Skipping lights beyond the first.\n"); - continue; - } - /* Going to require one or more stencil clears; this requires - reserving a bit of stencil to avoid double subtracts. */ - reservedStencilBit = 1 << scene->bitList[0]; - bit = 1; - glStencilMask(~0); - glClear(GL_STENCIL_BUFFER_BIT); - glDepthFunc(GL_LESS); /* XXX Needed? */ - } else { - /* Faster cases. All the objects can be rendered each to a - distinct available stencil plane. No need to reserve a - stencil bit to avoid double blending since only one scene - render required. */ - reservedStencilBit = 0; - if (numShadowingObjects <= numStencilBits - bit) { - /* Best case: Enough stencil bits available to not even - require a stencil clear for this light. Keep "bit" as is. */ - } else { - /* Not enough left over bitplanes to subtract out this light - with what's currently available, so clear the stencil buffer - to get enough. */ - glStencilMask(~0); - glClear(GL_STENCIL_BUFFER_BIT); - bit = 0; - } - } - - obj = 0; - while (light->objectList[obj]->state == RTS_NOT_SHADOWING) { - obj++; - } - - do { - assert(bit < numStencilBits); - assert(light->objectList[obj]->state == RTS_SHADOWING); - assert(obj < light->objectListSize); - - fullStencilMask = reservedStencilBit; - - glDisable(GL_LIGHTING); - glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); - glStencilFunc(GL_ALWAYS, 0, 0); - glDisable(GL_CULL_FACE); - do { - -#ifdef MP - waitForSilhouetteGenerationDone(scene, - &light->shadowVolumeList[obj]); -#endif - - if (hasVertexArray) { -#if defined(GL_VERSION_1_1) - glInterleavedArrays(GL_V3F, 0, - light->shadowVolumeList[obj].silhouette); -#elif defined(GL_EXT_vertex_array) - setupVertexArray(&light->shadowVolumeList[obj], 3); -#endif - } - fullStencilMask |= 1 << scene->bitList[bit]; - glStencilMask(1 << scene->bitList[bit]); - glStencilOp(GL_KEEP, GL_KEEP, GL_INVERT); - renderShadowVolume(&light->shadowVolumeList[obj], - light->lightPos); - - glStencilOp(GL_KEEP, GL_KEEP, GL_ZERO); - renderShadowVolumeTop(&light->shadowVolumeList[obj], - light->lightPos); - - bit++; - do { - obj++; - } while (obj < light->objectListSize - && light->objectList[obj]->state == RTS_NOT_SHADOWING); - - } while (bit < scene->numStencilBits && obj < light->objectListSize); - - glEnable(GL_CULL_FACE); - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - glDepthFunc(GL_EQUAL); - if (reservedStencilBit) { - glStencilMask(reservedStencilBit); - glStencilOp(GL_KEEP, GL_KEEP, GL_ONE); - if (hasBlendSubtract) { - /* Subtract lighting contribution inside of shadow; prevent - double drawing via stencil */ - glStencilFunc(GL_GREATER, reservedStencilBit, fullStencilMask); - } else { - /* Add lighting contribution outside of shadow; prevent - double drawing via stencil. */ - glStencilFunc(GL_EQUAL, 0, fullStencilMask); - } - } else { - if (hasBlendSubtract) { - glStencilOp(GL_KEEP, GL_KEEP, GL_ZERO); - glStencilFunc(GL_NOTEQUAL, 0, fullStencilMask); - } else { - glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); - glStencilFunc(GL_EQUAL, 0, fullStencilMask); - } - } - glEnable(GL_LIGHTING); - scene->renderSceneFunc(light->glLight, scene->sceneData, scene); - - if (obj < light->objectListSize) { - assert(reservedStencilBit); - glStencilMask(~0); - glClear(GL_STENCIL_BUFFER_BIT); - glDepthFunc(GL_LESS); /* XXX Needed? */ - bit = 1; - } - } while (obj < light->objectListSize); - - prevLight = light; - } - } - } - } - - glStencilMask(~0); - glCullFace(GL_BACK); /* XXX needed? */ - glDepthMask(GL_TRUE); - glDepthFunc(GL_LESS); - if (scene->stencilRenderingInvariantHack) { - glEnable(GL_STENCIL_TEST); - glStencilFunc(GL_ALWAYS, 0, 0xffffffff); - glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); - } else { - glDisable(GL_STENCIL_TEST); - } - glDisable(GL_BLEND); - if (hasVertexArray) { -#if defined(GL_VERSION_1_1) - glDisableClientState(GL_VERTEX_ARRAY); -#elif defined(GL_EXT_vertex_array) - glDisable(GL_VERTEX_ARRAY_EXT); -#endif - } - glLightModelfv(GL_LIGHT_MODEL_AMBIENT, scene->sceneAmbient); -} - -void -rtsRenderSilhouette( - RTSscene * scene, - RTSlight * light, - RTSobject * object) -{ - GLfloat lightDelta[3]; - GLfloat lightDistance, viewScale, fieldOfViewRatio, extentScale; - ShadowVolumeState svsRec, *svs; - int obj; - int anonymousShadowVolumeState; - - /* Calculate the light's distance from the object being shadowed. */ - lightDelta[X] = object->objectPos[X] - light->lightPos[X]; - lightDelta[Y] = object->objectPos[Y] - light->lightPos[Y]; - lightDelta[Z] = object->objectPos[Z] - light->lightPos[Z]; - lightDistance = sqrt(lightDelta[X] * lightDelta[X] + - lightDelta[Y] * lightDelta[Y] + lightDelta[Z] * lightDelta[Z]); - - viewScale = getViewScale(scene); - fieldOfViewRatio = object->maxRadius / lightDistance; - extentScale = light->radius * fieldOfViewRatio / viewScale; - - for (obj = 0; obj < light->objectListSize; obj++) { - if (light->objectList[obj] == object) { - svs = &light->shadowVolumeList[obj]; - anonymousShadowVolumeState = 0; - goto gotShadowVolumeState; - } - } - - /* It probably makes sense to have the object on the light's object list - already since then we would have a ShadowVolumeState structure ready to - use and likely to have a reasonably sized silhouette vertex array. Plus, - we'd validate the light and object's shadow volume. - - Anyway, rtsRenderSilhouette will still handle the case where the object - is not already added to the specified light for generality (but not - economy). Use an "anonymous" ShadowVolumeState data structure that only - lives during this routine. */ - - svs = &svsRec; - anonymousShadowVolumeState = 1; - initShadowVolumeState(svs); - -gotShadowVolumeState: - - validateShadowVolume(scene, light, object, svs); - - glPushAttrib(GL_ENABLE_BIT); - /* Disable a few things likely to screw up the rendering of the - silhouette. */ - glDisable(GL_LIGHTING); - glDisable(GL_DEPTH_TEST); -#if 0 - glDisable(GL_STENCIL_TEST); -#else - glEnable(GL_STENCIL_TEST); - glStencilFunc(GL_ALWAYS, 0, 0xffffffff); - glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); -#endif - glDisable(GL_ALPHA_TEST); - glDisable(GL_BLEND); - - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - gluOrtho2D(-viewScale, viewScale, -viewScale, viewScale); - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); - glScalef(1.0 / extentScale, 1.0 / extentScale, 1.0 / extentScale); - - renderSilhouette(svs); - -#if 0 - glColor3f(0.0, 1.0, 0.0); - glPointSize(7.0); - glBegin(GL_POINTS); - glVertex2fv(eyeLoc); - glEnd(); -#endif - - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); - glPopAttrib(); - - if (anonymousShadowVolumeState) { - /* Deallocate "anonymous" ShadowVolumeState's silhouette vertex array. */ - SHARED_FREE(svs->silhouette); - } -} - -void -rtsStencilRenderingInvariantHack(RTSscene * scene, GLboolean enableHack) -{ - scene->stencilRenderingInvariantHack = enableHack; -} - -/* XXX These free routines are not complete. */ - -#if 0 -static void -freeTessellationContext(TessellationContext *context) -{ - gluDeleteTess(context->tess); - free(context->feedbackBuffer); - free(context); -} -#endif - -void -rtsFreeScene( - RTSscene * scene) -{ - int i; - - for (i=0; i < scene->lightListSize; i++) { - if (scene->lightList[i]) { - rtsFreeLight(scene->lightList[i]); - } - } - free(scene->lightList); - free(scene); -} - -void -rtsFreeLight( - RTSlight * light) -{ - int i; - - for (i=0; isceneListSize; i++) { - if (light->sceneList[i]) { - rtsFreeScene(light->sceneList[i]); - } - } - free(light); -} - -void -rtsFreeObject( - RTSobject * object) -{ - free(object); -} - -#endif /* GLU_VERSION_1_2 */ diff --git a/lib/glut-3.7.6/progs/advanced/rtshadow.h b/lib/glut-3.7.6/progs/advanced/rtshadow.h deleted file mode 100644 index 014539e0c..000000000 --- a/lib/glut-3.7.6/progs/advanced/rtshadow.h +++ /dev/null @@ -1,182 +0,0 @@ -#ifndef __rtshadow_h__ -#define __rtshadow_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. */ - -/* Real-time Shadowing library, Version 0.96 */ - -#if defined(_WIN32) - -/* Try to avoid including to avoid name space - pollution, but Win32's needs APIENTRY and - WINGDIAPI defined properly. */ -# if 0 -# define WIN32_LEAN_AND_MEAN -# include -# else - /* This is from Win32's */ -# ifndef APIENTRY -# if (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED) -# define APIENTRY __stdcall -# else -# define APIENTRY -# endif -# endif -# ifndef CALLBACK - /* This is from Win32's */ -# if (defined(_M_MRX000) || defined(_M_IX86) || defined(_M_ALPHA) || defined(_M_PPC)) && !defined(MIDL_PASS) -# define CALLBACK __stdcall -# else -# define CALLBACK -# endif -# endif - /* This is from Win32's and */ -# ifndef WINGDIAPI -# define WINGDIAPI __declspec(dllimport) -# endif - /* XXX This is from Win32's */ -# ifndef _WCHAR_T_DEFINED -typedef unsigned short wchar_t; -# define _WCHAR_T_DEFINED -# endif -# endif - -#pragma warning (disable:4244) /* Disable bogus conversion warnings. */ -#pragma warning (disable:4305) /* VC++ 5.0 version of above warning. */ - -#endif - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -enum { - RTS_ERROR_OUT_OF_MEMORY, - RTS_WARNING_EYE_IN_SHADOW, - RTS_WARNING_LIGHT_TOO_CLOSE -}; - -typedef enum { - RTS_OFF, - RTS_SHINING, - RTS_SHINING_AND_CASTING -} RTSlightState; - -typedef enum { - RTS_NOT_SHADOWING, - RTS_SHADOWING -} RTSobjectState; - -typedef enum { - RTS_NO_SHADOWS, - RTS_USE_SHADOWS, - RTS_USE_SHADOWS_NO_OVERLAP -} RTSmode; - -typedef struct RTSscene RTSscene; -typedef struct RTSlight RTSlight; -typedef struct RTSobject RTSobject; - -typedef void (*RTSerrorHandler)(int error, char *message); -typedef void (*RTSrenderSceneFunc)(GLenum castingLight, void *sceneData, RTSscene *scene); - -extern RTSscene *rtsCreateScene( - GLfloat eyePos[3], - GLbitfield usableStencilBits, - RTSrenderSceneFunc func, - void *sceneData); -extern RTSlight *rtsCreateLight( - GLenum glLight, - GLfloat lightPos[3], - GLfloat radius); -extern RTSobject *rtsCreateObject( - GLfloat objectPos[3], - GLfloat maxRadius, - void (*renderObject) (void *objectData), - void *objectData, - int feedbackBufferSizeGuess); - -extern void rtsAddLightToScene( - RTSscene * scene, - RTSlight * light); -extern void rtsAddObjectToLight( - RTSlight * light, - RTSobject * object); - -extern void rtsRemoveLightFromScene( - RTSscene * scene, - RTSlight * light); -extern void rtsRemoveObjectFromLight( - RTSlight * light, - RTSobject * object); - -extern void rtsSetLightState( - RTSlight * light, - RTSlightState state); -extern void rtsSetObjectState( - RTSobject * object, - RTSobjectState state); - -extern void rtsUpdateEyePos( - RTSscene * scene, - GLfloat eyePos[3]); -extern void rtsUpdateUsableStencilBits( - RTSscene * scene, - GLbitfield usableStencilBits); - -extern void rtsUpdateLightPos( - RTSlight * light, - GLfloat lightPos[3]); -extern void rtsUpdateLightRadius( - RTSlight * light, - GLfloat lightRadius); - -extern void rtsUpdateObjectPos( - RTSobject * object, - GLfloat objectPos[3]); -extern void rtsUpdateObjectShape( - RTSobject * object); -extern void rtsUpdateObjectMaxRadius( - RTSobject * object, - GLfloat maxRadius); - -extern void rtsFreeScene( - RTSscene * scene); -extern void rtsFreeLight( - RTSlight * light); -extern void rtsFreeObject( - RTSobject * object); - -extern int rtsTriviallyOutsideShadowVolume( - RTSscene * scene, - GLfloat objectPos[3], - GLfloat maxRadius); - -extern void rtsRenderScene( - RTSscene * scene, - RTSmode mode); - -extern void rtsRenderSilhouette( - RTSscene * scene, - RTSlight * light, - RTSobject * object); - -extern RTSerrorHandler rtsSetErrorHandler( - RTSerrorHandler handler); - -extern void rtsStencilRenderingInvariantHack( - RTSscene * scene, - GLboolean enableHack); - -#ifdef __cplusplus -} - -#endif -#endif /* __rtshadow_h__ */ diff --git a/lib/glut-3.7.6/progs/advanced/sgiflag.c b/lib/glut-3.7.6/progs/advanced/sgiflag.c deleted file mode 100644 index e0873e8ee..000000000 --- a/lib/glut-3.7.6/progs/advanced/sgiflag.c +++ /dev/null @@ -1,488 +0,0 @@ - -/* - * sgiflag.c: - * - * This program displays a waving flag with an SGI logo trimmed out of - * it. The flag is a single nurbs surface (bicubic, bezier). It "waves" - * by making it control point oscillate on a sine wave. - * - * The logo is cut from the flag using a combination of piecewise-linear - * and bezier trim curves. - * - * Howard Look - December 1990 - * David Blythe - June 1995 - */ - -#include - -#include -#include - -#include -#include "sgiflag.h" -#include "logopoints.h" - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -/* Knot sequences for cubic bezier surface and trims */ -Knot sknots[S_NUMKNOTS] = {0., 0., 0., 0., 1., 1., 1., 1.}; -Knot tknots[T_NUMKNOTS] = {0., 0., 0., 0., 1., 1., 1., 1.}; -Knot trimknots[S_NUMKNOTS] = {0., 0., 0., 0., 1., 1., 1., 1.}; - -/* Control points for the flag. The Z values are modified to make it wave */ -Point ctlpoints[S_NUMPOINTS][T_NUMPOINTS] = { - { {0., 3., 0.}, {1., 3., 0.}, {2., 3., 0}, {3., 3., 0.}}, - { {0., 2., 0.}, {1., 2., 0.}, {2., 2., 0}, {3., 2., 0.}}, - { {0., 1., 0.}, {1., 1., 0.}, {2., 1., 0}, {3., 1., 0.}}, - { {0., 0., 0.}, {1., 0., 0.}, {2., 0., 0}, {3., 0., 0.}} -}; - -/* Trim the whole exterior of the, counter clockwise. Necessary to do - * internal trimming - */ -TrimCurve *whole; -TrimCurve ccl_path; -TrimPiece ccl_square[] = { - { - PWL, - 11, - { - {0., 0.}, {.25, 0.}, {.5, 0.}, {.75, 0.}, {1., 0.}, - {1., 1.}, {.75, 1.}, {.5, 1.}, {.25, 1.}, {0., 1.}, {0., 0.} - } - } -}; - -/* Three paths for three parts of the logo */ -TrimCurve *path[3]; - -/* Initial one-third of the logo, centered at origin */ -TrimCurve initial_path; -TrimPiece initial_pieces[] = { - { - PWL, /* 0 */ - 6, - {{Ax,Ay},{Bx,By},{Cx,Cy},{Dx,Dy},{Ex,Ey},{0.,0.}} - }, - { - CURVE, /* 1 */ - 4, - {{0.,0.},{Fx,Fy},{Fx,Fy},{0.,0.}} - }, - { - PWL, /* 2 */ - 2, - {{Gx, Gy},{Gx,Gy}} - }, - { - CURVE, /* 3 */ - 4, - {{0.,0.},{Gx,Gy},{Gx,Gy},{0.,0.}} - }, - { - PWL, /* 4 */ - 3, - {{0., 0.},{Z,Z},{0.,0.}} - }, - { - CURVE, /* 5 */ - 4, - {{0.,0.},{-Gx,Gy},{-Gx,Gy},{0.,0.}} - }, - { - PWL, /* 6 */ - 2, - {{-Fx, Fy},{-Fx,Fy}} - }, - { - CURVE, /* 7 */ - 4, - {{0.,0.},{-Fx,Fy},{-Fx,Fy},{0.,0.}} - }, - { - PWL, /* 8 */ - 6, - {{0.,0.},{-Ex,Ey},{-Dx,Dy},{-Cx,Cy},{-Bx,By},{Ax,Ay}} - } -}; - -static GLUnurbsObj *nurbsflag; - -static GLboolean trimming = GL_TRUE, filled = GL_TRUE, hull = GL_TRUE; -static int mousex = 248, mousey = 259, mstate; - -/* Given endpoints of the line a and b, the distance d from point a, - * returns a new point (in result) that is on that line. - */ -void interp(TrimPoint a, TrimPoint b, GLfloat d, TrimPoint result) { - - GLfloat l; - - l = sqrt((a[0] - b[0])*(a[0] - b[0]) + (a[1] - b[1])*(a[1] - b[1])); - - result[0] = a[0] + (b[0] - a[0])*d/l; - result[1] = a[1] + (b[1] - a[1])*d/l; - -} - -/* Given two trim pieces, coerces the endpoint of the first and the - * start point of the second to be indentical. - * - * The two trims must be of opposite types, PWL or CURVE. - */ -void join_trims(TrimPiece *trim1, TrimPiece *trim2, GLfloat radius) { - - int last; - TrimPoint result; - - last = trim1->points - 1; - - if (trim1->type == PWL) - interp(trim2->point[1], trim1->point[last - 1], radius, result); - else /* trim1 is CURVE */ - interp(trim1->point[last-1], trim2->point[0], radius, result); - - trim1->point[last][0] = trim2->point[0][0] = result[0]; - trim1->point[last][1] = trim2->point[0][1] = result[1]; -} - -/* Translates each point in the trim piece by tx and ty */ -void translate_trim(TrimPiece *trim, GLfloat tx, GLfloat ty) { - - int i; - - for (i=0; ipoints; i++) { - trim->point[i][0] += tx; - trim->point[i][1] += ty; - } -} - -/* Scales each point in the trim piece by sx and sy */ -void scale_trim(TrimPiece *trim, GLfloat sx, GLfloat sy) { - - int i; - - for (i=0; ipoints; i++) { - trim->point[i][0] *= sx; - trim->point[i][1] *= sy; - } -} - -/* Rotates each point in the trim piece by angle radians about the origin */ -void rotate_trim(TrimPiece *trim, GLfloat angle) { - - int i; - GLfloat s,c; - TrimPoint t; - - s = sin(angle); - c = cos(angle); - - for (i=0; ipoints; i++) { - t[0] = trim->point[i][0]; - t[1] = trim->point[i][1]; - - trim->point[i][0] = c*t[0] - s*t[1]; - trim->point[i][1] = s*t[0] + c*t[1]; - } -} - -/* Creates storage space for dst and copies the contents of src into dst */ -void copy_path(TrimCurve *src, TrimCurve **dst) { - - int i,j; - - *dst = (TrimCurve *) malloc(sizeof(TrimCurve)); - (*dst)->pieces = src->pieces; - (*dst)->trim = (TrimPiece *) malloc((src->pieces)*sizeof(TrimPiece)); - - for(i=0; i < src->pieces; i++) { - (*dst)->trim[i].type = src->trim[i].type; - (*dst)->trim[i].points = src->trim[i].points; - - for (j=0; j < src->trim[i].points; j++) { - (*dst)->trim[i].point[j][0] = src->trim[i].point[j][0]; - (*dst)->trim[i].point[j][1] = src->trim[i].point[j][1]; - } - } -} - -/* Initializes the outer whole trim plus the three trimming paths - * required to trim the logo. - */ -void init_trims(void) { - - int i; - - /* whole outer path, counter clockwise, so NuRB is not trimmed */ - whole = &ccl_path; - whole->pieces = 1; - whole->trim = ccl_square; - - /* initial third of logo, centered at origin */ - path[0] = &initial_path; - path[0]->pieces = ELEMENTS(initial_pieces); - path[0]->trim = initial_pieces; - for(i=0; i < path[0]->pieces - 1; i++) - join_trims(&path[0]->trim[i], &path[0]->trim[i+1], LOGO_RADIUS); - - /* copy other to other two thirds */ - copy_path(path[0],&path[1]); - copy_path(path[0],&path[2]); - - /* scale and translate first third */ - for (i=0; ipieces; i++) { - scale_trim(&path[0]->trim[i],0.5,1.0); - translate_trim(&path[0]->trim[i],0.5,0.52); - } - - /* rotate, scale and translate second third */ - for (i=0; ipieces; i++) { - rotate_trim(&path[1]->trim[i],2.0*M_PI/3.0); - scale_trim(&path[1]->trim[i],0.5,1.0); - translate_trim(&path[1]->trim[i],0.49,0.5); - } - - /* rotate, scale and translate last third */ - for (i=0; ipieces; i++) { - rotate_trim(&path[2]->trim[i],2.0*2.0*M_PI/3.0); - scale_trim(&path[2]->trim[i],0.5,1.0); - translate_trim(&path[2]->trim[i],0.51,0.5); - } -} - -/* Opens a square window, and initializes the window, interesting devices, - * viewing volume, material, and lights. - */ -static void -initialize(void) { - - GLfloat mat_diffuse[] = { .8, .1, .8, 1. }; - GLfloat mat_specular[] = { .6, .6, .6, 1. }; - GLfloat mat_ambient[] = { .1, .1, .1, 1. }; - - glClearColor(.58, .58, .58, 0.); - glClearDepth(1.); - glEnable(GL_DEPTH_TEST); - - glMatrixMode(GL_PROJECTION); - gluPerspective(60,1.0,1.0,10.0); - glMatrixMode(GL_MODELVIEW); - glTranslatef(0., 0., -6.); - - glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mat_diffuse); - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, mat_ambient); - glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, mat_specular); - glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 32.0); - glEnable(GL_LIGHT0); - glEnable(GL_LIGHTING); - glEnable(GL_AUTO_NORMAL); - glEnable(GL_NORMALIZE); - - nurbsflag = gluNewNurbsRenderer(); - gluNurbsProperty(nurbsflag, GLU_SAMPLING_TOLERANCE, 100.0); - gluNurbsProperty(nurbsflag, GLU_DISPLAY_MODE, GLU_FILL); - - init_trims(); -} - - -/* Draw the nurb, possibly with trimming */ -void draw_nurb(GLboolean trimming) { - - static GLfloat angle = 0.0; - int i,j; - - - /* wave the flag by rotating Z coords though a sine wave */ - for (i=1; i<4; i++) - for (j=0; j<4; j++) - ctlpoints[i][j][2] = sin((GLfloat)i+angle); - - angle += 0.1; - - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - - glPushMatrix(); - - glTranslatef(2.5,-1.0,0.0); - glScalef(1.5,1.0,1.0); - glRotatef(90,0.,0.,1.); - glRotatef(mousey/10.,1.,0.,0.); - glRotatef(mousex/10.,0.,1.,0.); - - gluBeginSurface(nurbsflag); - gluNurbsSurface(nurbsflag,S_NUMKNOTS, sknots, T_NUMKNOTS, tknots, - 3 * T_NUMPOINTS, 3, - &ctlpoints[0][0][0], T_ORDER, S_ORDER, GL_MAP2_VERTEX_3); - if (trimming) { - dotrim(whole); - dotrim(path[0]); - dotrim(path[1]); - dotrim(path[2]); - } - gluEndSurface(nurbsflag); - - if (hull) draw_hull(ctlpoints); - - glPopMatrix(); - -} - -/* Draw the convex hull of the control points */ -void draw_hull(Point cpoints[S_NUMPOINTS][T_NUMPOINTS]) { - - int s,t; - - glDisable(GL_LIGHTING); - glColor3f(0.,1.,0.); - - glBegin(GL_LINES); - for (s=0; spieces; i++) { - - if (trim_curve->trim[i].type == PWL) { - gluPwlCurve(nurbsflag, trim_curve->trim[i].points, - &trim_curve->trim[i].point[0][0], - 2, GLU_MAP1_TRIM_2); - } else { - gluNurbsCurve(nurbsflag, ELEMENTS(trimknots),trimknots, - 2,&trim_curve->trim[i].point[0][0], - trim_curve->trim[i].points, GLU_MAP1_TRIM_2); - } - } - gluEndTrim(nurbsflag); -} - - -/* ARGSUSED1 */ -static void -Key(unsigned char c, int x, int y) -{ - switch(c) { - case 27: /* Escape */ - exit(0); - break; - default: - break; - } -} - -static void -Button(int button, int down, int x, int y) -{ - if (down) { - if (button == GLUT_LEFT_BUTTON) { - mstate = 1; - mousex = x; - mousey = y; - } - } else { - if (button == GLUT_LEFT_BUTTON) - mstate = 0; - } - if (mstate) { - mousex = x; - mousey = y; - } -} - -static void -resize(int width, int height) -{ - glViewport(0, 0, width, height); -} - - -static void -expose(void) -{ - draw_nurb(trimming); - glutSwapBuffers(); -} - -static void -idle(void) -{ - glutPostRedisplay(); -} - -static void -visibility(int state) -{ - if (state == GLUT_VISIBLE) { - glutIdleFunc(idle); - } else { - glutIdleFunc(NULL); - } -} - -static void -Menu(int value) -{ - switch (value) { - case 1: - trimming ^= 1; break; - case 2: - filled ^= 1; - gluNurbsProperty(nurbsflag, GLU_DISPLAY_MODE, - filled ? GLU_FILL : GLU_OUTLINE_POLYGON); - break; - case 3: - hull ^= 1; break; - case 4: - exit(0); break; - default: - break; - } -} - -int -main(int argc, char *argv[]) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); - glutInitWindowSize(400, 400); - glutCreateWindow("NURBS Surface"); - glutDisplayFunc(expose); - glutReshapeFunc(resize); - glutKeyboardFunc(Key); - glutMouseFunc(Button); - - glutCreateMenu(Menu); - glutAddMenuEntry("Trim", 1); - glutAddMenuEntry("Fill", 2); - glutAddMenuEntry("Hull", 3); - glutAddMenuEntry("Exit", 4); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutVisibilityFunc(visibility); - - initialize(); - - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/advanced/sgiflag.dsp b/lib/glut-3.7.6/progs/advanced/sgiflag.dsp deleted file mode 100644 index 9115e23a2..000000000 --- a/lib/glut-3.7.6/progs/advanced/sgiflag.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="sgiflag" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=sgiflag - 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 "sgiflag.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 "sgiflag.mak" CFG="sgiflag - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "sgiflag - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "sgiflag - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "sgiflag - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "sgiflag - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "sgiflag - Win32 Release" -# Name "sgiflag - Win32 Debug" -# Begin Source File - -SOURCE=.\sgiflag.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced/sgiflag.h b/lib/glut-3.7.6/progs/advanced/sgiflag.h deleted file mode 100644 index 5f3c143fe..000000000 --- a/lib/glut-3.7.6/progs/advanced/sgiflag.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - * sgiflag.h - * - */ - -/* useful for lmdef, nurbssurface, nurbscurve, and more */ -#define ELEMENTS(x) (sizeof(x)/sizeof(x[0])) - -/* Define nurbs surface properties */ -#define S_NUMPOINTS 4 -#define S_ORDER 4 /* cubic, degree 3 */ -#define S_NUMKNOTS (S_NUMPOINTS + S_ORDER) -#define S_NUMCOORDS 3 - -#define T_NUMPOINTS 4 -#define T_ORDER 4 -#define T_NUMKNOTS (T_NUMPOINTS + T_ORDER) -#define T_NUMCOORDS 3 - -typedef GLfloat Knot; -typedef GLfloat Point[3]; -typedef GLfloat TrimPoint[2]; - -/* Trimming curves are either piecewise linear or nurbscurve */ -enum TrimType {PWL, CURVE}; - - -/* A trimming curve is made up of one or more trimming pieces. - * A trimming piece may be of PWL or CURVE. If a trim piece is PWL, - * it has at least two trim points, with each trim point composing - * the endpoints of the line segments. If a trim piece is CURVE, it - * has four trim points defining the cubic bezier trim. - */ - -#define MAX_PIECES 20 - -struct TrimPieceStruct { - enum TrimType type; /* type of the trim */ - int points; /* # of points in the trim piece */ - TrimPoint point[MAX_PIECES]; /* pointer to first trim point */ -}; -typedef struct TrimPieceStruct TrimPiece; - -struct TrimCurveStruct { - int pieces; - TrimPiece *trim; -}; -typedef struct TrimCurveStruct TrimCurve; - - -struct teststruct { - int a, b, c[2]; -}; -typedef struct teststruct Test; - -/* function prototypes */ -static void interp(TrimPoint a, TrimPoint b, GLfloat d, TrimPoint result); -static void join_trims(TrimPiece *trim1, TrimPiece *trim2, GLfloat radius); -static void translate_trim(TrimPiece *trim, GLfloat tx, GLfloat ty); -static void scale_trim(TrimPiece *trim, GLfloat sx, GLfloat sy); -static void rotate_trim(TrimPiece *trim, GLfloat angle); -static void copy_path(TrimCurve *src, TrimCurve **dst); -static void init_trims(void); -static void initialize(void); -static void draw_nurb(GLboolean); -static void draw_hull(Point cpoints[S_NUMPOINTS][T_NUMPOINTS]); -static void dotrim(TrimCurve *curve); diff --git a/lib/glut-3.7.6/progs/advanced/shadowfun.c b/lib/glut-3.7.6/progs/advanced/shadowfun.c deleted file mode 100644 index 593dad8dc..000000000 --- a/lib/glut-3.7.6/progs/advanced/shadowfun.c +++ /dev/null @@ -1,1163 +0,0 @@ - -/* 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. */ - -/* Unix compile line: cc -o shadowfun shadowfun.c -lglut -lGLU -lGL -lXmu -lXext -lX11 -lm */ - -/* THIS PROGRAM REQUIRES GLU 1.2. If you have IRIX 5.3, you need patch 1449 - (the IRIX 5.3 GLU 1.2 functionality patch) or its successor to use this - program. GLU 1.2 is standard on IRIX 6.2 and later. */ - -/* This program demonstrates a light source and object of arbitrary geometry - casing a shadow on arbitary geometry. The program uses OpenGL's feedback, - stencil, and boundary tessellation support. */ - -#include -#include -#include -#include -#include - -#ifdef GLU_VERSION_1_2 - -/* Win32 calling conventions. */ -#ifndef CALLBACK -#define CALLBACK -#endif - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -const float uniquePassThroughValue = 34567.0; - -#define SmallerOf(a,b) ((a) < (b) ? (a) : (b)) - -int stencilBits; - -/* Display list names. */ -enum { - /* Display lists should start at 1, not 0. */ - DL_BALL = 1, DL_CONE, DL_LIGHT, DL_SHADOW_VOLUME, DL_SPHERE, - DL_ICO, DL_TORUS, DL_CUBE, DL_SHADOW_VOLUME_TOP, DL_BASE_SHADOW_VOLUME -}; - -/* Menu option names. */ -enum { - /* Important for objectMaxRadius array that the shape enums appear first in - this list. */ - M_TORUS, M_CUBE, M_SPHERE, M_ICO, M_DOUBLE_TORUS, M_ANGLE, M_BOUNDARY, - M_NO_SHADOW, M_NO_LIGHT, M_FRONT_VOLUME, M_BACK_VOLUME, M_SHADOW, - M_LIGHT_SOURCE_VIEW, M_NORMAL_VIEW, M_SPIN, M_SWING, M_STOP -}; - -/* Coordinates. */ -enum { - X, Y, Z -}; - -const int TEXDIM = 64; - -int shape; -GLfloat maxRadius; -int renderMode = M_SHADOW; -int view = M_NORMAL_VIEW; -int renderBoundary = 0; -GLfloat angle = 0.0; -int frontFace = 1; -int rotatingObject = 1; -int swingingLight = 1; -float swingTime = M_PI / 2.0; - -GLfloat lightDiffuse[4] = -{1.0, 0.0, 0.0, 1.0}; -GLfloat lightPos[4] = -{60.0, 50.0, -350.0, 1.0}; -GLfloat objectPos[4] = -{40.0, 30.0, -360.0, 1.0}; -GLfloat sceneEyePos[4] = -{0.0, 0.0, 0.0, 0.0}; - -struct VertexHolder { - struct VertexHolder *next; - GLfloat v[2]; -}; - -typedef struct _ShadowVolumeMemoryPool { - /* Reference count because ShadowVolumeMemoryPool's can be shared between - multiple ShadowVolumeState's. */ - int refcnt; - - GLUtesselator *tess; - GLfloat viewScale; - - /* Memory used for GLU tessellator combine callbacks. */ - GLfloat *combineList; - int combineListSize; - int combineNext; - struct VertexHolder *excessList; -} ShadowVolumeMemoryPool; - -typedef struct _ShadowVolumeState { - ShadowVolumeMemoryPool *pool; - - GLfloat shadowProjectionDistance; - GLfloat extentScale; - - /* Scratch variables used during GLU tessellator callbacks. */ - int saveFirst; - GLfloat *firstVertex; -} ShadowVolumeState; - -ShadowVolumeState *svs; - -static void CALLBACK -begin(GLenum type, void *shadowVolumeState) -{ - ShadowVolumeState *svs = (ShadowVolumeState *) shadowVolumeState; - - assert(type == GL_LINE_LOOP); - if (renderBoundary) { - glBegin(type); - } else { - svs->saveFirst = 1; - glBegin(GL_TRIANGLE_FAN); - glColor3f(0, 1, 0); - glVertex3f(0.0, 0.0, 0.0); - } -} - -static void CALLBACK -vertex(void *data, void *shadowVolumeState) -{ - ShadowVolumeState *svs = (ShadowVolumeState *) shadowVolumeState; - GLfloat *v = data; - - if (renderBoundary) { - glVertex2fv(v); - } else { - if (svs->saveFirst) { - svs->firstVertex = v; - svs->saveFirst = 0; - } - glColor3f(0, 0, 1); - glVertex3f(svs->extentScale * v[X], svs->extentScale * v[Y], - svs->shadowProjectionDistance); - } -} - -static void CALLBACK -end(void *shadowVolumeState) -{ - ShadowVolumeState *svs = (ShadowVolumeState *) shadowVolumeState; - - if (!renderBoundary) { - glColor3f(0, 0, 1); - glVertex3f(svs->extentScale * svs->firstVertex[X], svs->extentScale * svs->firstVertex[Y], - svs->shadowProjectionDistance); - } - glEnd(); -} - -static void -freeExcessList(ShadowVolumeMemoryPool * pool) -{ - struct VertexHolder *holder, *next; - - holder = pool->excessList; - while (holder) { - next = holder->next; - free(holder); - holder = next; - } - pool->excessList = NULL; -} - -/* ARGSUSED1 */ -static void CALLBACK -combine(GLdouble coords[3], void *d[4], GLfloat w[4], void **dataOut, void *shadowVolumeState) -{ - ShadowVolumeState *svs = (ShadowVolumeState *) shadowVolumeState; - ShadowVolumeMemoryPool *pool = svs->pool; - struct VertexHolder *holder; - GLfloat *newCoords; - - if (pool->combineNext >= pool->combineListSize) { - holder = (struct VertexHolder *) malloc(sizeof(struct VertexHolder)); - holder->next = pool->excessList; - pool->excessList = holder; - newCoords = holder->v; - } else { - newCoords = &pool->combineList[pool->combineNext * 2]; - } - - newCoords[0] = coords[0]; - newCoords[1] = coords[1]; - *dataOut = newCoords; - - pool->combineNext++; -} - -static void CALLBACK -error(GLenum errno) -{ - printf("ERROR: %s\n", gluErrorString(errno)); -} - -static void -processFeedback(GLint size, GLfloat * buffer, ShadowVolumeState * svs) -{ - ShadowVolumeMemoryPool *pool = svs->pool; - GLfloat *loc, *end, *eyeLoc; - GLdouble v[3]; - int token, nvertices, i; - GLfloat passThroughToken; - int watchingForEyePos; - - if (pool->combineNext > pool->combineListSize) { - freeExcessList(pool); - pool->combineListSize = pool->combineNext; - pool->combineList = realloc(pool->combineList, sizeof(GLfloat) * 2 * pool->combineListSize); - } - pool->combineNext = 0; - - watchingForEyePos = 0; - eyeLoc = NULL; - - glColor3f(1, 1, 1); - gluTessBeginPolygon(pool->tess, svs); - loc = buffer; - end = buffer + size; - while (loc < end) { - token = *loc; - loc++; - switch (token) { - case GL_POLYGON_TOKEN: - nvertices = *loc; - loc++; - assert(nvertices >= 3); - gluTessBeginContour(pool->tess); - for (i = 0; i < nvertices; i++) { - v[0] = loc[0]; - v[1] = loc[1]; - v[2] = 0.0; - gluTessVertex(pool->tess, v, loc); - loc += 2; - } - gluTessEndContour(pool->tess); - break; - case GL_PASS_THROUGH_TOKEN: - passThroughToken = *loc; - if (passThroughToken == uniquePassThroughValue) { - watchingForEyePos = !watchingForEyePos; - } else { - /* Ignore everything else. */ - fprintf(stderr, "ERROR: Unexpected feedback token 0x%x (%d).\n", token, token); - } - loc++; - break; - case GL_POINT_TOKEN: - if (watchingForEyePos) { - fprintf(stderr, "WARNING: Eye point possibly within the shadow volume.\n"); - fprintf(stderr, " Program should be improved to handle this.\n"); - /* XXX Write code to handle this case. You would need to determine - if the point was instead any of the returned boundary polyons. - Once you found that you were really in the clipping volume, then I - haven't quite thought about what you do. */ - eyeLoc = loc; - watchingForEyePos = 0; - } else { - /* Ignore everything else. */ - fprintf(stderr, "ERROR: Unexpected feedback token 0x%x (%d).\n", - token, token); - } - loc += 2; - break; - default: - /* Ignore everything else. */ - fprintf(stderr, "ERROR: Unexpected feedback token 0x%x (%d).\n", - token, token); - } - } - gluTessEndPolygon(pool->tess); - - if (eyeLoc && renderBoundary) { - glColor3f(0, 1, 0); - glPointSize(7.0); - glBegin(GL_POINTS); - glVertex2fv(eyeLoc); - glEnd(); - } -} - -/* Three element vector dot product. */ -static GLfloat -vdot(const GLfloat * v1, const GLfloat * v2) -{ - return v1[0] * v2[0] + v1[1] * v2[1] + v1[2] * v2[2]; -} - -/* Three element vector cross product. */ -static void -vcross(const GLfloat * v1, const GLfloat * v2, GLfloat * cross) -{ - assert(v1 != cross && v2 != cross); - cross[0] = (v1[1] * v2[2]) - (v1[2] * v2[1]); - cross[1] = (v1[2] * v2[0]) - (v1[0] * v2[2]); - cross[2] = (v1[0] * v2[1]) - (v1[1] * v2[0]); -} - -void -svsFreeShadowVolumeState(ShadowVolumeState * svs) -{ - if (svs->pool) { - svs->pool->refcnt--; - if (svs->pool->refcnt == 0) { - if (svs->pool->excessList) { - freeExcessList(svs->pool); - } - if (svs->pool->combineList) { - free(svs->pool->combineList); - } - if (svs->pool->tess) { - gluDeleteTess(svs->pool->tess); - } - free(svs->pool); - } - } - free(svs); -} - -ShadowVolumeState * -svsCreateShadowVolumeState(GLfloat shadowProjectionDistance, - ShadowVolumeState * shareSVS) -{ - ShadowVolumeState *svs; - ShadowVolumeMemoryPool *pool; - GLUtesselator *tess; - - svs = (ShadowVolumeState *) malloc(sizeof(ShadowVolumeState)); - if (svs == NULL) { - return NULL; - } - svs->pool = NULL; - - if (shareSVS == NULL) { - pool = (ShadowVolumeMemoryPool *) malloc(sizeof(ShadowVolumeMemoryPool)); - if (pool == NULL) { - svsFreeShadowVolumeState(svs); - return NULL; - } - pool->refcnt = 1; - pool->excessList = NULL; - pool->combineList = NULL; - pool->combineListSize = 0; - pool->combineNext = 0; - pool->tess = NULL; - svs->pool = pool; - - tess = gluNewTess(); - if (tess == NULL) { - svsFreeShadowVolumeState(svs); - return NULL; - } - gluTessProperty(tess, GLU_TESS_BOUNDARY_ONLY, GL_TRUE); - gluTessProperty(tess, GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_NONZERO); - gluTessCallback(tess, GLU_TESS_BEGIN_DATA, (void (CALLBACK*)()) begin); - gluTessCallback(tess, GLU_TESS_VERTEX_DATA, (void (CALLBACK*)()) vertex); - gluTessCallback(tess, GLU_TESS_COMBINE_DATA, (void (CALLBACK*)()) combine); - gluTessCallback(tess, GLU_TESS_END_DATA, (void (CALLBACK*)()) end); - gluTessCallback(tess, GLU_TESS_ERROR, (void (CALLBACK*)()) error); - pool->tess = tess; - } else { - pool = shareSVS->pool; - pool->refcnt++; - } - - svs->pool = pool; - svs->shadowProjectionDistance = shadowProjectionDistance; - - return svs; -} - -int -svsGenerateShadowVolume(ShadowVolumeState * svs, - void (*renderFunc) (void), int feedbackBufferSizeGuess, - GLfloat maxRadius, - GLfloat lightPos[3], GLfloat objectPos[3], GLfloat eyePos[3]) -{ - static GLfloat unit[3] = - {0.0, 0.0, 1.0}; - static GLfloat *feedbackBuffer = NULL; - static int bufferSize = 0; - GLfloat axis[3], lightDelta[3], eyeDelta[3]; - GLfloat nnear, ffar; /* Avoid Intel C keywords. Grumble. */ - GLfloat lightDistance, eyeDistance, angle, fieldOfViewRatio, fieldOfViewAngle, - topScale, viewScale; - GLint returned; - - if (svs->pool->viewScale == 0.0) { - GLfloat maxViewSize[2]; - - glGetFloatv(GL_MAX_VIEWPORT_DIMS, maxViewSize); - printf("max viewport = %gx%g\n", maxViewSize[0], maxViewSize[1]); - svs->pool->viewScale = SmallerOf(maxViewSize[0], maxViewSize[1]) / 2.0; - } - viewScale = svs->pool->viewScale; - - if (bufferSize > feedbackBufferSizeGuess) { - feedbackBufferSizeGuess = bufferSize; - } - /* Calculate the light's distance from the object being shadowed. */ - lightDelta[X] = objectPos[X] - lightPos[X]; - lightDelta[Y] = objectPos[Y] - lightPos[Y]; - lightDelta[Z] = objectPos[Z] - lightPos[Z]; - lightDistance = sqrt(lightDelta[X] * lightDelta[X] + - lightDelta[Y] * lightDelta[Y] + lightDelta[Z] * lightDelta[Z]); - - /* Determine the appropriate field of view. We want to use as narrow a - field of view as possible to not waste resolution, but not narrower than - the object. Add 50% extra slop. */ - fieldOfViewRatio = maxRadius / lightDistance; - if (fieldOfViewRatio > 0.99) { - fprintf(stderr, "WARNING: Clamping FOV to 164 degrees for determining shadow boundary.\n"); - fprintf(stderr, " Light distance = %g, object maxmium radius = %g\n", - lightDistance, maxRadius); - - /* 2*asin(0.99) ~= 164 degrees. */ - fieldOfViewRatio = 0.99; - } - /* Pre-compute scaling factors for the near and far extent of the shadow - volume. */ - svs->extentScale = svs->shadowProjectionDistance * fieldOfViewRatio / viewScale; - - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - - nnear = 0.5 * (lightDistance - maxRadius); - if (nnear < 0.0001) { - fprintf(stderr, "WARNING: Clamping near clip plane to 0.0001 because light source too near.\n"); - fprintf(stderr, " Light distance = %g, object maxmium radius = %g\n", - lightDistance, maxRadius); - nnear = 0.0001; - } - ffar = 2.0 * (lightDistance + maxRadius); - if (eyePos) { - eyeDelta[X] = eyePos[X] - lightPos[X]; - eyeDelta[Y] = eyePos[Y] - lightPos[Y]; - eyeDelta[Z] = eyePos[Z] - lightPos[Z]; - eyeDistance = 1.05 * sqrt(eyeDelta[X] * eyeDelta[X] + eyeDelta[Y] * eyeDelta[Y] + eyeDelta[Z] * eyeDelta[Z]); - if (eyeDistance > ffar) { - ffar = eyeDistance; - } - } - fieldOfViewAngle = 2.0 * asin(fieldOfViewRatio) * 180 / M_PI; - gluPerspective(fieldOfViewAngle, 1.0, nnear, ffar); - - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); - /* XXX Need to update "up vector". Degenerate when light directly above or - below the object. */ - gluLookAt(lightPos[X], lightPos[Y], lightPos[Z], - objectPos[X], objectPos[Y], objectPos[Z], - 0.0, 1.0, 0.0); /* up is in positive Y direction */ - - glPushAttrib(GL_VIEWPORT_BIT); - glViewport(-viewScale, -viewScale, 2 * viewScale, 2 * viewScale); - -doFeedback: - - /* XXX Careful, some systems still don't understand realloc of NULL. */ - if (bufferSize < feedbackBufferSizeGuess) { - bufferSize = feedbackBufferSizeGuess; - /* XXX Add 32 words of slop (an extra cache line) to end for buggy - hardware that uses DMA to return feedback results but that sometimes - overrun the buffer. Yuck. */ - feedbackBuffer = realloc(feedbackBuffer, bufferSize * sizeof(GLfloat) + 32 * 4); - } - glFeedbackBuffer(bufferSize, GL_2D, feedbackBuffer); - - (void) glRenderMode(GL_FEEDBACK); - - (*renderFunc) (); - - /* Render the eye position. The eye position is "bracketed" by unique pass - through tokens. These bracketing pass through tokens let us determine - if the eye position was clipped or not. This helps us determine whether - the eye position is possibly within the shadow volume or not. If the - point is clipped, the eye position is not in the shadow volume. If the - point is not clipped, a more complicated test is necessary to determine - if the eye position is really in the shadow volume or not. See - processFeedback. */ - if (eyePos) { - glPassThrough(uniquePassThroughValue); - glBegin(GL_POINTS); - glVertex3fv(eyePos); - glEnd(); - glPassThrough(uniquePassThroughValue); - } - returned = glRenderMode(GL_RENDER); -#if 0 - if (returned == -1) { -#else - /* XXX RealityEngine workaround. */ - if (returned == -1 || returned == feedbackBufferSizeGuess) { -#endif - feedbackBufferSizeGuess = feedbackBufferSizeGuess + (feedbackBufferSizeGuess >> 1); - goto doFeedback; /* Try again with larger feedback buffer. */ - } - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); - glPopAttrib(); /* Restore viewport. */ - - if (renderBoundary) { - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluOrtho2D(-viewScale, viewScale, -viewScale, viewScale); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - processFeedback(returned, feedbackBuffer, svs); - } else { - glNewList(DL_BASE_SHADOW_VOLUME, GL_COMPILE); - vcross(unit, lightDelta, axis); - angle = acos(vdot(unit, lightDelta) / lightDistance) * 180.0 / M_PI; - glRotatef(angle, axis[X], axis[Y], axis[Z]); - processFeedback(returned, feedbackBuffer, svs); - glEndList(); - - glNewList(DL_SHADOW_VOLUME, GL_COMPILE); - glPushMatrix(); - glTranslatef(lightPos[X], lightPos[Y], lightPos[Z]); - glCallList(DL_BASE_SHADOW_VOLUME); - glPopMatrix(); - glEndList(); - - glNewList(DL_SHADOW_VOLUME_TOP, GL_COMPILE); - glPushMatrix(); - glTranslatef(lightPos[X], lightPos[Y], lightPos[Z]); - topScale = (lightDistance + maxRadius) / svs->shadowProjectionDistance; - glScalef(topScale, topScale, topScale); - glCallList(DL_BASE_SHADOW_VOLUME); - glPopMatrix(); - glEndList(); - } - return returned; -} - -GLfloat objectMaxRadius[] = -{ - 8.0 + 2.0, /* M_TORUS */ - 12.0 / 2.0 * 1.142, /* M_CUBE */ - 8.0, /* M_SPHERE */ - 8.0, /* M_ICO */ - 8.0 + 2.0, /* M_DOUBLE_TORUS */ -}; - -void -renderShadowingObject(void) -{ - static int torusList = 0, cubeList = 0, sphereList = 0, icoList = 0; - - glPushMatrix(); - glTranslatef(objectPos[X], objectPos[Y], objectPos[Z]); - glRotatef(angle, 1.0, 0.3, 0.0); - switch (shape) { - case M_TORUS: - if (torusList) { - glCallList(torusList); - } else { - torusList = DL_TORUS; - glNewList(torusList, GL_COMPILE_AND_EXECUTE); - glutSolidTorus(2.0, 8.0, 8, 15); - glEndList(); - } - break; - case M_CUBE: - if (cubeList) { - glCallList(cubeList); - } else { - cubeList = DL_CUBE; - glNewList(cubeList, GL_COMPILE_AND_EXECUTE); - glutSolidCube(12.0); - glEndList(); - } - break; - case M_SPHERE: - if (sphereList) { - glCallList(sphereList); - } else { - sphereList = DL_SPHERE; - glNewList(sphereList, GL_COMPILE_AND_EXECUTE); - glutSolidSphere(8.0, 10, 10); - glEndList(); - } - break; - case M_ICO: - if (icoList) { - glCallList(icoList); - } else { - icoList = DL_ICO; - glNewList(icoList, GL_COMPILE_AND_EXECUTE); - glEnable(GL_NORMALIZE); - glPushMatrix(); - glScalef(8.0, 8.0, 8.0); - glutSolidIcosahedron(); - glPopMatrix(); - glDisable(GL_NORMALIZE); - glEndList(); - } - break; - case M_DOUBLE_TORUS: - if (torusList) { - glCallList(torusList); - } else { - torusList = DL_TORUS; - glNewList(torusList, GL_COMPILE_AND_EXECUTE); - glutSolidTorus(2.0, 8.0, 8, 15); - glEndList(); - } - glRotatef(90, 0, 1, 0); - glCallList(torusList); - break; - } - glPopMatrix(); -} - -void -sphere(void) -{ - glPushMatrix(); - glTranslatef(60.0, -50.0, -400.0); - glCallList(DL_BALL); - glPopMatrix(); -} - -void -cone(void) -{ - glPushMatrix(); - glTranslatef(-40.0, -40.0, -400.0); - glCallList(DL_CONE); - glPopMatrix(); -} - -void -scene(void) -{ - /* material properties for objects in scene */ - static GLfloat wall_mat[] = - {1.0, 1.0, 1.0, 1.0}; - static GLfloat shad_mat[] = - {1.0, 0.1, 0.1, 1.0}; - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - if (view == M_LIGHT_SOURCE_VIEW) { - gluPerspective(45.0, 1.0, 0.5, 600.0); - } else { - gluPerspective(33.0, 1.0, 10.0, 600.0); - } - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - if (view == M_LIGHT_SOURCE_VIEW) { - gluLookAt(lightPos[X], lightPos[Y], lightPos[Z], - objectPos[X], objectPos[Y], objectPos[Z], - 0.0, 1.0, 0.); /* up is in positive Y direction */ - } else { - gluLookAt(0.0, 0.0, 0.0, - 0.0, 0.0, -100.0, - 0.0, 1.0, 0.); /* up is in positive Y direction */ - } - /* Place light 0 in the right place. */ - glLightfv(GL_LIGHT0, GL_POSITION, lightPos); - - /* Note: wall verticies are ordered so they are all front facing this lets - me do back face culling to speed things up. */ - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, wall_mat); - - /* Floor with checkerboard texture. */ - glEnable(GL_TEXTURE_2D); - - glColor3f(0, 0, 0); - - /* Since we want to turn texturing on for floor only, we have to make floor - a separate glBegin()/glEnd() sequence. You can't turn texturing on and - off between begin and end calls */ - glBegin(GL_QUADS); - glNormal3f(0.0, 1.0, 0.0); - glTexCoord2i(0, 0); - glVertex3f(-100.0, -100.0, -320.0); - glTexCoord2i(4, 0); - glVertex3f(100.0, -100.0, -320.0); - glTexCoord2i(4, 4); - glVertex3f(100.0, -100.0, -520.0); - glTexCoord2i(0, 4); - glVertex3f(-100.0, -100.0, -520.0); - glEnd(); - - glDisable(GL_TEXTURE_2D); - - /* Walls. */ - - glBegin(GL_QUADS); - /* Left wall. */ - glNormal3f(1.0, 0.0, 0.0); - glVertex3f(-100.0, -100.0, -320.0); - glVertex3f(-100.0, -100.0, -520.0); - glVertex3f(-100.0, 100.0, -520.0); - glVertex3f(-100.0, 100.0, -320.0); - - /* Right wall. */ - glNormal3f(-1.0, 0.0, 0.0); - glVertex3f(100.0, -100.0, -320.0); - glVertex3f(100.0, 100.0, -320.0); - glVertex3f(100.0, 100.0, -520.0); - glVertex3f(100.0, -100.0, -520.0); - - /* Ceiling. */ - glNormal3f(0.0, -1.0, 0.0); - glVertex3f(-100.0, 100.0, -320.0); - glVertex3f(-100.0, 100.0, -520.0); - glVertex3f(100.0, 100.0, -520.0); - glVertex3f(100.0, 100.0, -320.0); - - /* Back wall. */ - glNormal3f(0.0, 0.0, 1.0); - glVertex3f(-100.0, -100.0, -520.0); - glVertex3f(100.0, -100.0, -520.0); - glVertex3f(100.0, 100.0, -520.0); - glVertex3f(-100.0, 100.0, -520.0); - glEnd(); - - cone(); - - sphere(); - - glPushMatrix(); - glTranslatef(lightPos[X], lightPos[Y], lightPos[Z]); - glCallList(DL_LIGHT); - glPopMatrix(); - - /* Draw shadowing object. */ - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, shad_mat); - - renderShadowingObject(); -} - -void -generateShadowVolume(void) -{ - GLfloat *eyePos; - - if (view == M_LIGHT_SOURCE_VIEW) { - eyePos = lightPos; - } else { - eyePos = sceneEyePos; - } - /* XXX The 2048 feedbackBufferGuessSize is large enough to - workaround the Octane/Impact bug where if the feedback - buffer is under 2048 entries, a buggy hardware feedback - path is used. 2048 forces the (bug free) software path. - This bug is fixed in IRIX 6.5. */ - svsGenerateShadowVolume(svs, renderShadowingObject, 2048, maxRadius, - lightPos, objectPos, eyePos); -} - -void -display(void) -{ - if (renderBoundary) { - glClear(GL_COLOR_BUFFER_BIT); - glDisable(GL_LIGHTING); - glDisable(GL_DEPTH_TEST); - generateShadowVolume(); - glEnable(GL_LIGHTING); - } else { - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); - switch (renderMode) { - case M_NO_SHADOW: - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHT0); - scene(); - break; - case M_NO_LIGHT: - /* Render scene without the light source enabled (conceptually, the - entire scene is "in the shadow"). */ - glEnable(GL_DEPTH_TEST); - glDisable(GL_LIGHT0); - scene(); - break; - case M_FRONT_VOLUME: - case M_BACK_VOLUME: - generateShadowVolume(); - - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHT0); - scene(); - if (frontFace) { - glFrontFace(GL_CW); - } else { - glFrontFace(GL_CCW); - } - glCallList(DL_SHADOW_VOLUME); - glFrontFace(GL_CCW); - break; - case M_SHADOW: - /* Construct DL_SHADOW_VOLUME display list for the scene's current - shadow volume. */ - generateShadowVolume(); - - /* 1st scene pass. */ - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHT0); - scene(); - - /* 1st shadow volume pass: Enable stencil to increment the stencil - value of pixels that pass the depth test when drawing the front - facing polygons of the shadow volume. Do not update the depth - buffer while rendering the shadow volume. */ - glDisable(GL_LIGHTING); - glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); - glEnable(GL_STENCIL_TEST); - glDepthMask(GL_FALSE); - glStencilFunc(GL_ALWAYS, 0, 0); - glStencilOp(GL_KEEP, GL_KEEP, GL_INVERT); - glCullFace(GL_FRONT); - glCallList(DL_SHADOW_VOLUME); - - /* 2nd shadow volume pass: Now, draw the back facing polygons of the - shadow volume except decrement pixels that pass the depth test. - Again, do not update the depth buffer. */ - glStencilOp(GL_KEEP, GL_KEEP, GL_INVERT); - glCullFace(GL_BACK); - glCallList(DL_SHADOW_VOLUME); - - glDisable(GL_CULL_FACE); - glStencilOp(GL_KEEP, GL_KEEP, GL_ZERO); - glCallList(DL_SHADOW_VOLUME_TOP); - glEnable(GL_CULL_FACE); - - /* Now, pixels that lie within the shadow volume are tagged with a one - stencil value. Empty shadowed regions of the shadow volume get - incremented, then decremented, to resolve to a net zero stencil - value. */ - - /* 2nd scene pass (render shadowed region): Re-enable update of the - depth and color buffer (use GL_LEQUAL for depth buffer so we can - over-write depth values again with color. Switch back to backface - culling and disable the light source. Only update pixels with a - stencil value of one (shadowed). */ - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); -#if 0 - glDepthFunc(GL_EQUAL); -#else - glDepthMask(GL_TRUE); - glDepthFunc(GL_LEQUAL); -#endif - glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); - glStencilFunc(GL_EQUAL, 1, 1); - glDisable(GL_LIGHT0); - glEnable(GL_LIGHTING); - scene(); - - /* Put state back to sane modes. */ - glDepthMask(GL_TRUE); - glDepthFunc(GL_LESS); - glDisable(GL_STENCIL_TEST); - break; - } - } - glutSwapBuffers(); -} - -void -idle(void) -{ - if (rotatingObject) { - angle += 10.0; - } - if (swingingLight) { - swingTime += 0.05; - lightPos[X] += 2 * cos(swingTime); - } - glutPostRedisplay(); -} - -void -menu(int value) -{ - switch (value) { - case M_TORUS: - case M_CUBE: - case M_SPHERE: - case M_ICO: - case M_DOUBLE_TORUS: - shape = value; - maxRadius = objectMaxRadius[value]; - glutPostRedisplay(); - break; - case M_ANGLE: - angle += 10.0; - glutPostRedisplay(); - break; - case M_BOUNDARY: - renderBoundary = 1; - glutPostRedisplay(); - break; - case M_FRONT_VOLUME: - case M_BACK_VOLUME: - frontFace = (value == M_FRONT_VOLUME); - /* FALLTHROUGH */ - case M_NO_SHADOW: - case M_NO_LIGHT: - case M_SHADOW: - renderBoundary = 0; - renderMode = value; - glutPostRedisplay(); - break; - case M_LIGHT_SOURCE_VIEW: - case M_NORMAL_VIEW: - view = value; - glutPostRedisplay(); - break; - case M_STOP: - swingingLight = 0; - rotatingObject = 0; - glutIdleFunc(NULL); - break; - case M_SPIN: - rotatingObject = 1; - glutIdleFunc(idle); - break; - case M_SWING: - swingingLight = 1; - glutIdleFunc(idle); - break; - case 666: - svsFreeShadowVolumeState(svs); - exit(0); - /* NOTREACHED */ - break; - } -} - -void -visible(int vis) -{ - if (vis == GLUT_VISIBLE && swingingLight && rotatingObject) { - glutIdleFunc(idle); - } else { - glutIdleFunc(NULL); - } -} - -/* ARGSUSED1 */ -void -key(unsigned char c, int x, int y) -{ - switch (c) { - case 27: /* Escape. */ - svsFreeShadowVolumeState(svs); - exit(0); - break; - case 13: /* Return. */ - swingingLight = !swingingLight; - swingTime = M_PI / 2.0; - break; - case ' ': /* Space. */ - if (rotatingObject || swingingLight) { - rotatingObject = 0; - swingingLight = 0; - glutIdleFunc(NULL); - } else { - rotatingObject = 1; - swingingLight = 1; - glutIdleFunc(idle); - } - break; - } -} - -/* ARGSUSED1 */ -void -special(int key, int x, int y) -{ - switch (key) { - case GLUT_KEY_HOME: - frontFace = !frontFace; - glutPostRedisplay(); - break; - case GLUT_KEY_UP: - lightPos[Y] += 10.0; - glutPostRedisplay(); - break; - case GLUT_KEY_DOWN: - lightPos[Y] -= 10.0; - glutPostRedisplay(); - break; - case GLUT_KEY_PAGE_UP: - lightPos[Z] += 10.0; - glutPostRedisplay(); - break; - case GLUT_KEY_PAGE_DOWN: - lightPos[Z] -= 10.0; - glutPostRedisplay(); - break; - case GLUT_KEY_RIGHT: - lightPos[X] += 10.0; - glutPostRedisplay(); - break; - case GLUT_KEY_LEFT: - lightPos[X] -= 10.0; - glutPostRedisplay(); - break; - } -} - -/* Create a single component checkboard texture map. */ -GLfloat * -makeTexture(int maxs, int maxt) -{ - int s, t; - static GLfloat *texture; - - texture = (GLfloat *) malloc(maxs * maxt * sizeof(GLfloat)); - for (t = 0; t < maxt; t++) { - for (s = 0; s < maxs; s++) { - texture[s + maxs * t] = ((s >> 4) & 0x1) ^ ((t >> 4) & 0x1); - } - } - return texture; -} - -void -initScene(void) -{ - GLfloat *tex; - GLUquadricObj *qobj; - static GLfloat sphere_mat[] = - {1.0, 0.5, 0.0, 1.0}; - static GLfloat cone_mat[] = - {0.0, 0.5, 1.0, 1.0}; - - /* Turn on features. */ - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_CULL_FACE); - - /* remove back faces to speed things up */ - glCullFace(GL_BACK); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - - /* Make display lists for sphere and cone; for efficiency. */ - - qobj = gluNewQuadric(); - - glNewList(DL_BALL, GL_COMPILE); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, sphere_mat); - gluSphere(qobj, 20.0, 20, 20); - glEndList(); - - glNewList(DL_CONE, GL_COMPILE); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, cone_mat); - glRotatef(-90.0, 1.0, 0.0, 0.0); - gluDisk(qobj, 0.0, 20.0, 20, 1); - gluCylinder(qobj, 20.0, 0.0, 60.0, 20, 20); - glEndList(); - - glNewList(DL_LIGHT, GL_COMPILE); - glDisable(GL_LIGHTING); - glColor3f(0.9, 0.9, 0.6); - gluSphere(qobj, 5.0, 20, 20); - glEnable(GL_LIGHTING); - glEndList(); - - gluDeleteQuadric(qobj); - - /* load pattern for current 2d texture */ - tex = makeTexture(TEXDIM, TEXDIM); - glTexImage2D(GL_TEXTURE_2D, 0, 1, TEXDIM, TEXDIM, 0, GL_RED, GL_FLOAT, tex); - free(tex); -} - -int -main(int argc, char **argv) -{ - int shapeMenu, viewMenu, actionMenu, renderModeMenu; - - svs = svsCreateShadowVolumeState(1000.0, NULL); - - glutInitDisplayString("stencil>=1 rgb double depth samples"); - glutInit(&argc, argv); - - glutCreateWindow("shadowfun"); - - stencilBits = glutGet(GLUT_WINDOW_STENCIL_SIZE); - printf("bits of stencil = %d\n", stencilBits); - - glutDisplayFunc(display); - glutVisibilityFunc(visible); - glutSpecialFunc(special); - glutKeyboardFunc(key); - - initScene(); - - shapeMenu = glutCreateMenu(menu); - glutAddMenuEntry("Torus", M_TORUS); - glutAddMenuEntry("Cube", M_CUBE); - glutAddMenuEntry("Sphere", M_SPHERE); - glutAddMenuEntry("Icosahedron", M_ICO); - glutAddMenuEntry("Double Torus", M_DOUBLE_TORUS); - - viewMenu = glutCreateMenu(menu); - glutAddMenuEntry("Normal view", M_NORMAL_VIEW); - glutAddMenuEntry("Light source view", M_LIGHT_SOURCE_VIEW); - - renderModeMenu = glutCreateMenu(menu); - glutAddMenuEntry("With shadow", M_SHADOW); - glutAddMenuEntry("With front shadow volume", M_FRONT_VOLUME); - glutAddMenuEntry("With back shadow volume", M_BACK_VOLUME); - glutAddMenuEntry("Without shadow", M_NO_SHADOW); - glutAddMenuEntry("Without light", M_NO_LIGHT); - glutAddMenuEntry("2D shadow boundary", M_BOUNDARY); - - actionMenu = glutCreateMenu(menu); - glutAddMenuEntry("Spin object", M_SPIN); - glutAddMenuEntry("Swing light", M_SWING); - glutAddMenuEntry("Stop", M_STOP); - - glutCreateMenu(menu); - glutAddSubMenu("Object shape", shapeMenu); - glutAddSubMenu("Viewpoint", viewMenu); - glutAddSubMenu("Render mode", renderModeMenu); - glutAddSubMenu("Action", actionMenu); - glutAddMenuEntry("Step rotate", M_ANGLE); - glutAddMenuEntry("Quit", 666); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - menu(M_DOUBLE_TORUS); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} - -#else -int main(int argc, char** argv) -{ - fprintf(stderr, "This program requires the new tesselator API in GLU 1.2.\n"); - fprintf(stderr, "Your GLU library does not support this new interface, sorry.\n"); - return 0; -} -#endif /* GLU_VERSION_1_2 */ diff --git a/lib/glut-3.7.6/progs/advanced/shadowfun.dsp b/lib/glut-3.7.6/progs/advanced/shadowfun.dsp deleted file mode 100644 index 5721465d5..000000000 --- a/lib/glut-3.7.6/progs/advanced/shadowfun.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="shadowfun" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=shadowfun - 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 "shadowfun.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 "shadowfun.mak" CFG="shadowfun - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "shadowfun - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "shadowfun - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "shadowfun - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "shadowfun - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "shadowfun - Win32 Release" -# Name "shadowfun - Win32 Debug" -# Begin Source File - -SOURCE=.\shadowfun.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced/shadowmap.c b/lib/glut-3.7.6/progs/advanced/shadowmap.c deleted file mode 100644 index 3255d30d1..000000000 --- a/lib/glut-3.7.6/progs/advanced/shadowmap.c +++ /dev/null @@ -1,447 +0,0 @@ - -/* shadowmap.c - by Tom McReynolds, SGI */ - -/* Shadows: Shadow volumes. */ - -#include -#include -#include -#include - -/* This program demonstrates shadows on IR using single pass projective - texture method. 1. Render the scene with light position as the viewpoint - and save the depth-map into texture image. 2. Use texgen to generate - texture co-ordinates which are identical to vertex co-ordinates. The - texture matrix then transforms each pixel coods back to light co-ods. The - 'z' or the depth-value is now available in the 'r' texture co-ordinate. - - 3. Render the normal scene enabling texgen and shadow texture comparison. - Left mouse button: controls rotation of the scene - - Right mouse button: controls light (and shadow position) */ - -#define SCENE 10 -enum { - M_NORMAL, M_SHADOW, M_PROJTEX, M_LIGHT -}; - -GLfloat rotv[] = -{0.0, 0.0, 0.0}; /* rotation vector for scene */ -GLfloat rotl[] = -{0.0, 0.0, 0.0}; /* rotation vector for light */ -GLfloat lv[] = -{10.0, 10.0, 10.0, 1.0}; /* default light position */ - -GLfloat perspective_mat[16], modelview_mat[16], temp[16]; -int width = 512, height = 512; -int mouse_button, mouse_state; -static int do_light = 0; -static int do_proj = 0; /* Use projective textures instead of shadows */ -/* are shadow extensions supported? */ -GLboolean shadows_supported = GL_FALSE; -GLboolean ambient_shadows = GL_FALSE; -GLboolean depth_texture = GL_FALSE; - -static void generate_shadow_map(void); - -static void -reshape(int w, int h) -{ - glViewport(0, 0, w, h); - width = w; - height = h; - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(40.0, (GLfloat) w / (GLfloat) h, 2.0, 30.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - gluLookAt(0, 0, 15, - 0, 0, 0, - 0, 1, 0); -} - -/* ARGSUSED1 */ -static void -key(unsigned char key, int x, int y) -{ - switch (key) { - case '\033': - exit(0); - } -} - -/* ARGSUSED2 */ -static void -mouse(int button, int state, int x, int y) -{ - mouse_button = button; - mouse_state = state; -} - -static void -motion(int x, int y) -{ - if (mouse_state == GLUT_UP) - return; - - switch (mouse_button) { - case GLUT_LEFT_BUTTON: - rotv[1] = 180.0 * x / 400.0 - 90.0; - rotv[0] = 180.0 * y / 400.0 - 90.0; - break; - case GLUT_MIDDLE_BUTTON: - rotl[0] = 180.0 * x / 400.0 - 90.0; - rotl[1] = 180.0 * y / 400.0 - 90.0; - break; - } - glutPostRedisplay(); -} - -static void -display(void) -{ - /* Render the scene with the light source as the viewpoint and save the - depth values in the texture map. */ - generate_shadow_map(); - - /* Now render the normal scene using projective textures to get the depth - value from the light's point of view into the r-cood of the texture. */ - glEnable(GL_TEXTURE_2D); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glGetFloatv(GL_PROJECTION_MATRIX, perspective_mat); - glMatrixMode(GL_TEXTURE); - glLoadIdentity(); - glTranslatef(0.5, 0.5, 0.4994); - glScalef(0.5, 0.5, 0.5); - glMultMatrixf(perspective_mat); - glMultMatrixf(modelview_mat); - - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - - glRotatef(rotv[0], 1, 0, 0); - glRotatef(rotv[1], 0, 1, 0); - glRotatef(rotv[2], 0, 0, 1); - glCallList(SCENE); - - glPopMatrix(); - glutSwapBuffers(); -} - -static void -render_normal_view(void) -{ - glDisable(GL_TEXTURE_2D); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); - gluLookAt(0, 0, 15, - 0, 0, 0, - 0, 1, 0); - glRotatef(rotv[0], 1, 0, 0); - glRotatef(rotv[1], 0, 1, 0); - glRotatef(rotv[2], 0, 0, 1); - glCallList(SCENE); - - glPopMatrix(); - glutSwapBuffers(); -} - -static void -render_light_view(void) -{ - glDisable(GL_TEXTURE_2D); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); - gluLookAt(lv[0], lv[1], lv[2], - 0, 0, 0, - 0, 1, 0); - glRotatef(rotl[0], 1, 0, 0); - glRotatef(rotl[1], 0, 1, 0); - glRotatef(rotl[2], 0, 0, 1); - glGetFloatv(GL_MODELVIEW_MATRIX, modelview_mat); - - glCallList(SCENE); - glPopMatrix(); - if (do_light) - glutSwapBuffers(); -} - -static void -generate_shadow_map(void) -{ - int x, y; - GLfloat log2 = log(2.0); - - x = 1 << ((int) (log((float) width) / log2)); - y = 1 << ((int) (log((float) height) / log2)); - glViewport(0, 0, x, y); - render_light_view(); - - /* Read in frame-buffer into a depth texture map */ -#if defined(GL_EXT_subtexture) && defined(GL_EXT_copy_texture) -#ifdef GL_SGIX_depth_texture - if (do_proj && depth_texture) -#endif - glCopyTexImage2DEXT(GL_TEXTURE_2D, 0, GL_RGBA, - 0, 0, x, y, 0); -#ifdef GL_SGIX_depth_texture - else - glCopyTexImage2DEXT(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT16_SGIX, - 0, 0, x, y, 0); -#endif -#endif - glViewport(0, 0, width, height); -} - -static void -menu(int mode) -{ - switch (mode) { - case M_NORMAL: - do_light = 0; - do_proj = 0; -#ifdef GL_SGIX_shadow - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_SGIX, GL_FALSE); -#endif - glutDisplayFunc(render_normal_view); - break; - case M_SHADOW: -#ifdef GL_SGIX_shadow - do_light = 0; - do_proj = 0; - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_SGIX, GL_TRUE); - glutDisplayFunc(display); -#endif - break; - case M_PROJTEX: - do_light = 0; - do_proj = 1; -#ifdef GL_SGIX_shadow - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_SGIX, GL_FALSE); -#endif - glutDisplayFunc(display); - break; - case M_LIGHT: - do_light = 1; - if (do_light) - glutDisplayFunc(render_light_view); - else - glutDisplayFunc(display); - break; - } - glutPostRedisplay(); -} - -#define XFORM(cmds) \ - glMatrixMode(GL_TEXTURE); \ - cmds; \ - glMatrixMode(GL_MODELVIEW); \ - cmds - -static void -create_scene(void) -{ - GLfloat floor_col[] = - {0.7, 0.7, 0.7}; - GLfloat floor_norm[] = - {0.0, 0.0, 1.0}; - GLfloat floor_verts[4][3] = - { - {4.0, 4.0, 0.0}, - {-4.0, 4.0, 0.0}, - {-4.0, -4.0, 0.0}, - {4.0, -4.0, 0.0}}; - GLfloat sphere_col[] = - {0.7, 0.1, 0.2}; - GLfloat box_col[] = - {0.1, 0.2, 0.7}; - GLfloat box_verts[6][4][3] = - { - { - {1.0, -1.0, -1.0}, - {-1.0, -1.0, -1.0}, - {-1.0, 1.0, -1.0}, - {1.0, 1.0, -1.0}}, - { - {1.0, -1.0, 1.0}, - {1.0, -1.0, -1.0}, - {1.0, 1.0, -1.0}, - {1.0, 1.0, 1.0}}, - { - {-1.0, -1.0, 1.0}, - {1.0, -1.0, 1.0}, - {1.0, 1.0, 1.0}, - {-1.0, 1.0, 1.0}}, - { - {-1.0, -1.0, -1.0}, - {-1.0, -1.0, 1.0}, - {-1.0, 1.0, 1.0}, - {-1.0, 1.0, -1.0}}, - { - {1.0, 1.0, 1.0}, - {1.0, 1.0, -1.0}, - {-1.0, 1.0, -1.0}, - {-1.0, 1.0, 1.0}}, - { - {1.0, -1.0, -1.0}, - {1.0, -1.0, 1.0}, - {-1.0, -1.0, 1.0}, - {-1.0, -1.0, -1.0}}}; - GLfloat box_norm[6][3] = - { - {0, 0, -1}, - {1, 0, 0}, - {0, 0, 1}, - {-1, 0, 0}, - {0, 1, 0}, - {0, -1, 0}}; - GLUquadricObj *q; - int i; - - glNewList(SCENE, GL_COMPILE); - - glBegin(GL_QUADS); /* draw the floor */ - glNormal3fv(floor_norm); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, floor_col); - for (i = 0; i < 4; i++) - glVertex3fv(floor_verts[i]); - glEnd(); - - q = gluNewQuadric(); - XFORM(glPushMatrix(); - glTranslatef(1.0, 1.0, 1.01)); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, sphere_col); - gluSphere(q, 1.0, 40, 40); - XFORM(glPopMatrix()); - - XFORM(glPushMatrix(); - glTranslatef(-1.0, -1.0, 1.01)); - for (i = 0; i < 6; i++) { - glBegin(GL_QUADS); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, box_col); - glNormal3fv(box_norm[i]); - glVertex3fv(box_verts[i][0]); - glVertex3fv(box_verts[i][1]); - glVertex3fv(box_verts[i][2]); - glVertex3fv(box_verts[i][3]); - glEnd(); - } - XFORM(glPopMatrix()); - glEndList(); -} - -static void -init(void) -{ - GLfloat ambient[] = - {0.1, 0.1, 0.1, 1.0}; - GLfloat diffuse[] = - {0.8, 0.7, 0.8, 1.0}; - GLfloat specular[] = - {0.5, 0.6, 0.8, 1.0}; - GLfloat p[4]; - - create_scene(); - glClearColor(0.0, 0.0, 0.0, 1.0); - glClearDepth(1.0); - glEnable(GL_DEPTH_TEST); - glEnable(GL_POLYGON_SMOOTH); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); - glLightfv(GL_LIGHT0, GL_SPECULAR, specular); - glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); - glLightfv(GL_LIGHT0, GL_POSITION, lv); - - glPixelStorei(GL_UNPACK_ALIGNMENT, 4); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); - - if (shadows_supported) { -#ifdef GL_SGIX_shadow_ambient - if (ambient_shadows) - glTexParameterf(GL_TEXTURE_2D, GL_SHADOW_AMBIENT_SGIX, 0.6); -#endif -#ifdef GL_SGIX_shadow - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_SGIX, GL_TRUE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_OPERATOR_SGIX, - GL_TEXTURE_LEQUAL_R_SGIX); -#endif - } - /* Enable texgen to get texture-coods (x, y, z, w) at every point.These - texture co-ordinates are then transformed by the texture matrix. */ - glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - glTexGeni(GL_Q, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - - p[0] = 1.0; - p[1] = p[2] = p[3] = 0.0; - glTexGenfv(GL_S, GL_OBJECT_PLANE, p); - - p[0] = 0.0; - p[1] = 1.0; - p[2] = p[3] = 0.0; - glTexGenfv(GL_T, GL_OBJECT_PLANE, p); - - p[0] = p[1] = 0.0; - p[2] = 1.0, p[3] = 0.0; - glTexGenfv(GL_R, GL_OBJECT_PLANE, p); - - p[0] = p[1] = p[2] = 0.0; - p[3] = 1.0; - glTexGenfv(GL_Q, GL_OBJECT_PLANE, p); - - glEnable(GL_TEXTURE_GEN_S); - glEnable(GL_TEXTURE_GEN_T); - glEnable(GL_TEXTURE_GEN_R); - glEnable(GL_TEXTURE_GEN_Q); -} - -int -main(int argc, char *argv[]) -{ - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); - glutInitWindowSize(width, height); - glutCreateWindow("Shadow Map"); - - if (glutExtensionSupported("GL_SGIX_shadow") && - glutExtensionSupported("GL_EXT_subtexture") && - glutExtensionSupported("GL_EXT_copy_texture")) { - shadows_supported = GL_TRUE; - ambient_shadows = glutExtensionSupported("GL_SGIX_shadow_ambient"); - depth_texture = glutExtensionSupported("GL_SGIX_depth_texture"); - } else { - fprintf(stderr, "shadowmap: uses several OpenGL extensions to operate fully:\n"); - fprintf(stderr, " GL_SGIX_shadow\n"); - fprintf(stderr, " GL_SGIX_shadow_ambient\n"); - fprintf(stderr, " GL_SGIS_depth_texture\n"); - fprintf(stderr, " GL_EXT_subtexture\n"); - fprintf(stderr, " GL_EXT_copy_texture\n"); - } - - init(); - glutReshapeFunc(reshape); - glutDisplayFunc(display); - glutMotionFunc(motion); - glutMouseFunc(mouse); - glutKeyboardFunc(key); - glutCreateMenu(menu); - glutAddMenuEntry("Normal view", M_NORMAL); - glutAddMenuEntry("Light view", M_LIGHT); - glutAddMenuEntry("Projective textures", M_PROJTEX); - if (shadows_supported) - glutAddMenuEntry("Shadows", M_SHADOW); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/advanced/shadowmap.dsp b/lib/glut-3.7.6/progs/advanced/shadowmap.dsp deleted file mode 100644 index 904a49afa..000000000 --- a/lib/glut-3.7.6/progs/advanced/shadowmap.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="shadowmap" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=shadowmap - 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 "shadowmap.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 "shadowmap.mak" CFG="shadowmap - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "shadowmap - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "shadowmap - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "shadowmap - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "shadowmap - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "shadowmap - Win32 Release" -# Name "shadowmap - Win32 Debug" -# Begin Source File - -SOURCE=.\shadowmap.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced/shadowvol.c b/lib/glut-3.7.6/progs/advanced/shadowvol.c deleted file mode 100644 index e4c0c44c0..000000000 --- a/lib/glut-3.7.6/progs/advanced/shadowvol.c +++ /dev/null @@ -1,373 +0,0 @@ - -/* shadowvol.c - by Tom McReynolds, SGI */ - -/* Shadows: Shadow maps */ - -#include -#include - -/* Demonstrate shadow volumes */ - -/* Create a single component texture map */ -GLfloat * -make_texture(int maxs, int maxt) -{ - int s, t; - static GLfloat *texture; - - texture = (GLfloat *) malloc(maxs * maxt * sizeof(GLfloat)); - for (t = 0; t < maxt; t++) { - for (s = 0; s < maxs; s++) { - texture[s + maxs * t] = ((s >> 4) & 0x1) ^ ((t >> 4) & 0x1); - } - } - return texture; -} - -enum { - SPHERE = 1, CONE, LIGHT, SHADOWVOL -}; - -typedef struct { - GLfloat *verticies; - GLfloat *normal; - int n; /* number of verticies */ -} ShadObj; - -GLfloat shadVerts[] = -{30.f, 30.f, -350.f, - 60.f, 20.f, -340.f, - 40.f, 40.f, -400.f}; - -GLfloat shadNormal[] = -{1.f, 1.f, 1.f}; -ShadObj shadower; - -enum { - X, Y, Z -}; - -/* simple way to extend a point to build shadow volume */ -void -extend(GLfloat new[3], GLfloat light[3], GLfloat vertex[3], GLfloat t) -{ - GLfloat delta[3]; - - delta[X] = vertex[X] - light[X]; - delta[Y] = vertex[Y] - light[Y]; - delta[Z] = vertex[Z] - light[Z]; - - new[X] = light[X] + delta[X] * t; - new[Y] = light[Y] + delta[Y] * t; - new[Z] = light[Z] + delta[Z] * t; -} - -/* Create a shadow volume in a display list */ -/* XXX light should have 4 compoents */ -void -makeShadowVolume(ShadObj * shadower, GLfloat light[3], - GLfloat t, GLint dlist) -{ - int i; - GLfloat newv[3]; - - glNewList(dlist, GL_COMPILE); - glDisable(GL_LIGHTING); - glBegin(GL_QUADS); - /* for debugging */ - glColor3f(.2f, .8f, .4f); - for (i = 0; i < shadower->n; i++) { - glVertex3fv(&shadower->verticies[i * 3]); - extend(newv, light, &shadower->verticies[i * 3], t); - glVertex3fv(newv); - extend(newv, light, &shadower->verticies[((i + 1) % shadower->n) * 3], - t); - glVertex3fv(newv); - glVertex3fv(&shadower->verticies[((i + 1) % shadower->n) * 3]); - } - glEnd(); - glEnable(GL_LIGHTING); - glEndList(); -} - -void -sphere(void) -{ - glPushMatrix(); - glTranslatef(60.f, -50.f, -360.f); - glCallList(SPHERE); - glPopMatrix(); -} - -void -cone(void) -{ - glPushMatrix(); - glTranslatef(-40.f, -40.f, -400.f); - glCallList(CONE); - glPopMatrix(); - -} - -enum { - NONE, NOLIGHT, VOLUME, SHADOW -}; - -int rendermode = NONE; - -void -menu(int mode) -{ - rendermode = mode; - glutPostRedisplay(); -} - -GLfloat leftwallshadow[4][4]; -GLfloat floorshadow[4][4]; - -GLfloat lightpos[] = -{50.f, 50.f, -340.f, 1.f}; - -/* render while jittering the shadows */ -void -render(ShadObj * obj) -{ - static GLfloat shad_mat[] = - {1.f, .1f, .1f, 1.f}; - GLfloat *v; /* vertex pointer */ - int i; - - /* material properties for objects in scene */ - static GLfloat wall_mat[] = - {1.f, 1.f, 1.f, 1.f}; - - /* Note: wall verticies are ordered so they are all front facing this lets - me do back face culling to speed things up. */ - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, wall_mat); - - /* floor */ - /* make the floor textured */ - glEnable(GL_TEXTURE_2D); - - /* Since we want to turn texturing on for floor only, we have to make floor - a separate glBegin()/glEnd() sequence. You can't turn texturing on and - off between begin and end calls */ - glBegin(GL_QUADS); - glNormal3f(0.f, 1.f, 0.f); - glTexCoord2i(0, 0); - glVertex3f(-100.f, -100.f, -320.f); - glTexCoord2i(1, 0); - glVertex3f(100.f, -100.f, -320.f); - glTexCoord2i(1, 1); - glVertex3f(100.f, -100.f, -520.f); - glTexCoord2i(0, 1); - glVertex3f(-100.f, -100.f, -520.f); - glEnd(); - - glDisable(GL_TEXTURE_2D); - - /* walls */ - - glBegin(GL_QUADS); - /* left wall */ - glNormal3f(1.f, 0.f, 0.f); - glVertex3f(-100.f, -100.f, -320.f); - glVertex3f(-100.f, -100.f, -520.f); - glVertex3f(-100.f, 100.f, -520.f); - glVertex3f(-100.f, 100.f, -320.f); - - /* right wall */ - glNormal3f(-1.f, 0.f, 0.f); - glVertex3f(100.f, -100.f, -320.f); - glVertex3f(100.f, 100.f, -320.f); - glVertex3f(100.f, 100.f, -520.f); - glVertex3f(100.f, -100.f, -520.f); - - /* ceiling */ - glNormal3f(0.f, -1.f, 0.f); - glVertex3f(-100.f, 100.f, -320.f); - glVertex3f(-100.f, 100.f, -520.f); - glVertex3f(100.f, 100.f, -520.f); - glVertex3f(100.f, 100.f, -320.f); - - /* back wall */ - glNormal3f(0.f, 0.f, 1.f); - glVertex3f(-100.f, -100.f, -520.f); - glVertex3f(100.f, -100.f, -520.f); - glVertex3f(100.f, 100.f, -520.f); - glVertex3f(-100.f, 100.f, -520.f); - glEnd(); - - cone(); - - sphere(); - - glCallList(LIGHT); - - /* draw shadowing object */ - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, shad_mat); - glBegin(GL_POLYGON); - glNormal3fv(obj->normal); - for (v = obj->verticies, i = 0; i < obj->n; i++) { - glVertex3fv(v); - v += 3; - } - glEnd(); - -} - -void -redraw(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); - switch (rendermode) { - case NONE: - render(&shadower); - break; - case NOLIGHT: - glDisable(GL_LIGHT0); - render(&shadower); - glEnable(GL_LIGHT0); - break; - case VOLUME: - render(&shadower); - glCallList(SHADOWVOL); - break; - case SHADOW: - glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); - render(&shadower); /* render scene in depth buffer */ - - glEnable(GL_STENCIL_TEST); - glDepthMask(GL_FALSE); - glStencilFunc(GL_ALWAYS, 0, 0); - - glStencilOp(GL_KEEP, GL_KEEP, GL_INCR); - glCullFace(GL_BACK); /* increment using front face of shadow volume */ - glCallList(SHADOWVOL); - - glStencilOp(GL_KEEP, GL_KEEP, GL_DECR); - glCullFace(GL_FRONT); /* increment using front face of shadow volume */ - glCallList(SHADOWVOL); - - glDepthMask(GL_TRUE); - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - glCullFace(GL_BACK); - glDepthFunc(GL_LEQUAL); - glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); - - glStencilFunc(GL_EQUAL, 1, 1); /* draw shadowed part */ - glDisable(GL_LIGHT0); - render(&shadower); - - glStencilFunc(GL_EQUAL, 0, 1); /* draw lit part */ - glEnable(GL_LIGHT0); - render(&shadower); - - glDepthFunc(GL_LESS); - glDisable(GL_STENCIL_TEST); - break; - } - - glutSwapBuffers(); /* high end machines may need this */ -} - -/* ARGSUSED1 */ -void -key(unsigned char key, int x, int y) -{ - if (key == '\033') - exit(0); -} - -const int TEXDIM = 256; -/* Parse arguments, and set up interface between OpenGL and window system */ -int -main(int argc, char *argv[]) -{ - GLfloat *tex; - GLUquadricObj *sphere, *cone, *base; - static GLfloat sphere_mat[] = - {1.f, .5f, 0.f, 1.f}; - static GLfloat cone_mat[] = - {0.f, .5f, 1.f, 1.f}; - - glutInit(&argc, argv); - glutInitWindowSize(512, 512); - glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL | GLUT_DOUBLE); - (void) glutCreateWindow("shadow volumes"); - glutDisplayFunc(redraw); - glutKeyboardFunc(key); - - glutCreateMenu(menu); - glutAddMenuEntry("No Shadows", NONE); - glutAddMenuEntry("No Light", NOLIGHT); - glutAddMenuEntry("Show Volume", VOLUME); - glutAddMenuEntry("Shadows", SHADOW); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - /* draw a perspective scene */ - glMatrixMode(GL_PROJECTION); - glFrustum(-100., 100., -100., 100., 320., 640.); - glMatrixMode(GL_MODELVIEW); - - /* turn on features */ - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_CULL_FACE); - - /* place light 0 in the right place */ - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - - /* remove back faces to speed things up */ - glCullFace(GL_BACK); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - - /* make display lists for sphere and cone; for efficiency */ - - glNewList(SPHERE, GL_COMPILE); - sphere = gluNewQuadric(); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, sphere_mat); - gluSphere(sphere, 20.f, 20, 20); - gluDeleteQuadric(sphere); - glEndList(); - - glNewList(CONE, GL_COMPILE); - cone = gluNewQuadric(); - base = gluNewQuadric(); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, cone_mat); - glRotatef(-90.f, 1.f, 0.f, 0.f); - gluDisk(base, 0., 20., 20, 1); - gluCylinder(cone, 20., 0., 60., 20, 20); - gluDeleteQuadric(cone); - gluDeleteQuadric(base); - glEndList(); - - glNewList(LIGHT, GL_COMPILE); - sphere = gluNewQuadric(); - glPushMatrix(); - glTranslatef(lightpos[X], lightpos[Y], lightpos[Z]); - glDisable(GL_LIGHTING); - glColor3f(.9f, .9f, .6f); - gluSphere(sphere, 5.f, 20, 20); - glEnable(GL_LIGHTING); - glPopMatrix(); - gluDeleteQuadric(sphere); - glEndList(); - - /* load pattern for current 2d texture */ - tex = make_texture(TEXDIM, TEXDIM); - glTexImage2D(GL_TEXTURE_2D, 0, 1, TEXDIM, TEXDIM, 0, GL_RED, GL_FLOAT, tex); - free(tex); - - shadower.verticies = shadVerts; - shadower.normal = shadNormal; - shadower.n = sizeof(shadVerts) / (3 * sizeof(GLfloat)); - - makeShadowVolume(&shadower, lightpos, 10.f, SHADOWVOL); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/advanced/shadowvol.dsp b/lib/glut-3.7.6/progs/advanced/shadowvol.dsp deleted file mode 100644 index 160d81e53..000000000 --- a/lib/glut-3.7.6/progs/advanced/shadowvol.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="shadowvol" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=shadowvol - 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 "shadowvol.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 "shadowvol.mak" CFG="shadowvol - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "shadowvol - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "shadowvol - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "shadowvol - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "shadowvol - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "shadowvol - Win32 Release" -# Name "shadowvol - Win32 Debug" -# Begin Source File - -SOURCE=.\shadowvol.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced/silhouette.c b/lib/glut-3.7.6/progs/advanced/silhouette.c deleted file mode 100644 index 8e5f20883..000000000 --- a/lib/glut-3.7.6/progs/advanced/silhouette.c +++ /dev/null @@ -1,248 +0,0 @@ - -/* silhouette.c - by Tom McReynolds, SGI */ - -/* Doing Silhouette Edges with stencil */ - -#include -#include -#include - -enum { - CONE = 1 -}; - -/* Draw a cone */ -void -cone(void) -{ - glPushMatrix(); - glTranslatef(0.f, 0.f, -30.f); - glCallList(CONE); - glPopMatrix(); -} - -/* Draw a torus */ -void -torus(void) -{ - glutSolidTorus(10., 20., 20, 20); -} - -enum { - SIL, OBJ, SIL_AND_OBJ, TOGGLE -}; - -int rendermode = OBJ; - -void (*curobj) (void) = cone; - -void -menu(int mode) -{ - switch (mode) { - case SIL: - case OBJ: - case SIL_AND_OBJ: - rendermode = mode; - break; - case TOGGLE: - if (curobj == cone) - curobj = torus; - else - curobj = cone; - break; - } - glutPostRedisplay(); -} - -int winWidth = 512; -int winHeight = 512; - -/* used to get current width and height of viewport */ -void -reshape(int wid, int ht) -{ - glViewport(0, 0, wid, ht); - winWidth = wid; - winHeight = ht; - glutPostRedisplay(); -} - -GLfloat viewangle; - -void -drawsilhouette(void) -{ - int i; - - glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); - glEnable(GL_STENCIL_TEST); - glStencilFunc(GL_ALWAYS, 1, 1); - glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); - glDisable(GL_DEPTH_TEST); /* so the depth buffer doesn't change */ - for (i = -1; i < 2; i += 2) { /* set stencil around object */ - glViewport(i, 0, winWidth + i, winHeight); - curobj(); - } - for (i = -1; i < 2; i += 2) { - glViewport(0, i, winWidth, winHeight + i); - curobj(); - } - - /* cut out stencil where object is */ - glViewport(0, 0, winWidth, winHeight); - glStencilFunc(GL_ALWAYS, 0, 0); - curobj(); - - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - - glStencilFunc(GL_EQUAL, 1, 1); - - glDisable(GL_LIGHTING); - glColor3f(1.f, 0.f, 0.f); /* draw silhouette red */ - glRotatef(-viewangle, 0.f, 1.f, 0.f); - glRecti(-50, -50, 50, 50); - glRotatef(viewangle, 0.f, 1.f, 0.f); - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - glDisable(GL_STENCIL_TEST); -} - -void -redraw(void) -{ - /* clear stencil each time */ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); - - glPushMatrix(); - glRotatef(viewangle, 0.f, 1.f, 0.f); - - switch (rendermode) { - case SIL: - drawsilhouette(); - break; - case SIL_AND_OBJ: - drawsilhouette(); - curobj(); - break; - case OBJ: - curobj(); - break; - } - - glPopMatrix(); - glutSwapBuffers(); -} - -/* animate scene by rotating */ -enum { - ANIM_LEFT, ANIM_RIGHT -}; -int animDirection = ANIM_LEFT; - -void -anim(void) -{ - if (animDirection == ANIM_LEFT) - viewangle -= 1.f; - else - viewangle += 1.f; - glutPostRedisplay(); -} - -/* ARGSUSED1 */ -/* special keys, like array and F keys */ -void -special(int key, int x, int y) -{ - switch (key) { - case GLUT_KEY_LEFT: - glutIdleFunc(anim); - animDirection = ANIM_LEFT; - break; - case GLUT_KEY_RIGHT: - glutIdleFunc(anim); - animDirection = ANIM_RIGHT; - break; - case GLUT_KEY_UP: - case GLUT_KEY_DOWN: - glutIdleFunc(0); - break; - } -} - -/* ARGSUSED1 */ -void -key(unsigned char key, int x, int y) -{ - switch (key) { - case 'a': - viewangle -= 10.f; - glutPostRedisplay(); - break; - case 's': - viewangle += 10.f; - glutPostRedisplay(); - break; - case '\033': - exit(0); - } -} - -int picked_object; -int xpos = 0, ypos = 0; -int newxpos, newypos; -int startx, starty; - -int -main(int argc, char **argv) -{ - static GLfloat lightpos[] = - {25.f, 50.f, -50.f, 1.f}; - static GLfloat cone_mat[] = - {0.f, .5f, 1.f, 1.f}; - GLUquadricObj *cone, *base; - - glutInit(&argc, argv); - glutInitWindowSize(512, 512); - glutInitDisplayMode(GLUT_STENCIL | GLUT_DEPTH | GLUT_DOUBLE); - (void) glutCreateWindow("silhouette edges"); - glutDisplayFunc(redraw); - glutKeyboardFunc(key); - glutSpecialFunc(special); - glutReshapeFunc(reshape); - - glutCreateMenu(menu); - glutAddMenuEntry("Object", OBJ); - glutAddMenuEntry("Silhouette Only", SIL); - glutAddMenuEntry("Object and Silhouette", SIL_AND_OBJ); - glutAddMenuEntry("Toggle Object", TOGGLE); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - glEnable(GL_DEPTH_TEST); - glEnable(GL_CULL_FACE); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); - - /* make display list for cone; for efficiency */ - - glNewList(CONE, GL_COMPILE); - cone = gluNewQuadric(); - base = gluNewQuadric(); - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, cone_mat); - gluQuadricOrientation(base, GLU_INSIDE); - gluDisk(base, 0., 15., 32, 1); - gluCylinder(cone, 15., 0., 60., 32, 32); - gluDeleteQuadric(cone); - gluDeleteQuadric(base); - glEndList(); - - glMatrixMode(GL_PROJECTION); - glOrtho(-50., 50., -50., 50., -50., 50.); - glMatrixMode(GL_MODELVIEW); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/advanced/silhouette.dsp b/lib/glut-3.7.6/progs/advanced/silhouette.dsp deleted file mode 100644 index 9ad7ee1b9..000000000 --- a/lib/glut-3.7.6/progs/advanced/silhouette.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="silhouette" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=silhouette - 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 "silhouette.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 "silhouette.mak" CFG="silhouette - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "silhouette - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "silhouette - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "silhouette - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "silhouette - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "silhouette - Win32 Release" -# Name "silhouette - Win32 Debug" -# Begin Source File - -SOURCE=.\silhouette.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced/softshadow.c b/lib/glut-3.7.6/progs/advanced/softshadow.c deleted file mode 100644 index 0dbd651fb..000000000 --- a/lib/glut-3.7.6/progs/advanced/softshadow.c +++ /dev/null @@ -1,405 +0,0 @@ - -/* softshadow.c - by Tom McReynolds, SGI */ - -/* Using the accumulation buffer for soft shadows. */ - -#include -#include - -/* Demonstrate the use of accumulation buffer to create soft shadows */ - -/* Create a single component texture map */ -GLfloat * -make_texture(int maxs, int maxt) -{ - int s, t; - static GLfloat *texture; - - texture = (GLfloat *) malloc(maxs * maxt * sizeof(GLfloat)); - for (t = 0; t < maxt; t++) { - for (s = 0; s < maxs; s++) { - texture[s + maxs * t] = ((s >> 4) & 0x1) ^ ((t >> 4) & 0x1); - } - } - return texture; -} - -enum { - SPHERE = 1, CONE, LIGHT, LEFTWALL, FLOOR -}; - -/* create a matrix that will project the desired shadow */ -void -shadowmatrix(GLfloat shadowMat[4][4], - GLfloat groundplane[4], - GLfloat lightpos[4]) -{ - GLfloat dot; - - /* find dot product between light position vector and ground plane normal */ - dot = groundplane[0] * lightpos[0] + - groundplane[1] * lightpos[1] + - groundplane[2] * lightpos[2] + - groundplane[3] * lightpos[3]; - - shadowMat[0][0] = dot - lightpos[0] * groundplane[0]; - shadowMat[1][0] = 0.f - lightpos[0] * groundplane[1]; - shadowMat[2][0] = 0.f - lightpos[0] * groundplane[2]; - shadowMat[3][0] = 0.f - lightpos[0] * groundplane[3]; - - shadowMat[0][1] = 0.f - lightpos[1] * groundplane[0]; - shadowMat[1][1] = dot - lightpos[1] * groundplane[1]; - shadowMat[2][1] = 0.f - lightpos[1] * groundplane[2]; - shadowMat[3][1] = 0.f - lightpos[1] * groundplane[3]; - - shadowMat[0][2] = 0.f - lightpos[2] * groundplane[0]; - shadowMat[1][2] = 0.f - lightpos[2] * groundplane[1]; - shadowMat[2][2] = dot - lightpos[2] * groundplane[2]; - shadowMat[3][2] = 0.f - lightpos[2] * groundplane[3]; - - shadowMat[0][3] = 0.f - lightpos[3] * groundplane[0]; - shadowMat[1][3] = 0.f - lightpos[3] * groundplane[1]; - shadowMat[2][3] = 0.f - lightpos[3] * groundplane[2]; - shadowMat[3][3] = dot - lightpos[3] * groundplane[3]; - -} - -enum { - X, Y, Z -}; -enum { - A, B, C, D -}; - -/* find the plane equation given 3 points */ -void -findplane(GLfloat plane[4], - GLfloat v0[3], GLfloat v1[3], GLfloat v2[3]) -{ - GLfloat vec0[3], vec1[3]; - - /* need 2 vectors to find cross product */ - vec0[X] = v1[X] - v0[X]; - vec0[Y] = v1[Y] - v0[Y]; - vec0[Z] = v1[Z] - v0[Z]; - - vec1[X] = v2[X] - v0[X]; - vec1[Y] = v2[Y] - v0[Y]; - vec1[Z] = v2[Z] - v0[Z]; - - /* find cross product to get A, B, and C of plane equation */ - plane[A] = vec0[Y] * vec1[Z] - vec0[Z] * vec1[Y]; - plane[B] = -(vec0[X] * vec1[Z] - vec0[Z] * vec1[X]); - plane[C] = vec0[X] * vec1[Y] - vec0[Y] * vec1[X]; - - plane[D] = -(plane[A] * v0[X] + plane[B] * v0[Y] + plane[C] * v0[Z]); -} - -void -sphere(void) -{ - glPushMatrix(); - glTranslatef(60.f, -50.f, -360.f); - glCallList(SPHERE); - glPopMatrix(); -} - -void -cone(void) -{ - glPushMatrix(); - glTranslatef(-40.f, -40.f, -400.f); - glCallList(CONE); - glPopMatrix(); - -} - -enum { - NONE, SHADOW -}; - -int rendermode = NONE; - -void -menu(int mode) -{ - rendermode = mode; - glutPostRedisplay(); -} - -GLfloat leftwallshadow[4][4]; -GLfloat floorshadow[4][4]; - -GLfloat lightpos[] = -{50.f, 50.f, -320.f, 1.f}; - -/* render while jittering the shadows */ -void -render(GLfloat dx, GLfloat dy, GLfloat dz) -{ - - /* material properties for objects in scene */ - static GLfloat wall_mat[] = - {1.f, 1.f, 1.f, 1.f}; - static GLfloat sphere_mat[] = - {1.f, .5f, 0.f, 1.f}; - static GLfloat cone_mat[] = - {0.f, .5f, 1.f, 1.f}; - - glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); - - /* Note: wall verticies are ordered so they are all front facing this lets - me do back face culling to speed things up. */ - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, wall_mat); - - /* floor */ - /* make the floor textured */ - glEnable(GL_TEXTURE_2D); - - /* Since we want to turn texturing on for floor only, we have to make floor - a separate glBegin()/glEnd() sequence. You can't turn texturing on and - off between begin and end calls */ - glBegin(GL_QUADS); - glNormal3f(0.f, 1.f, 0.f); - glTexCoord2i(0, 0); - glVertex3f(-100.f, -100.f, -320.f); - glTexCoord2i(1, 0); - glVertex3f(100.f, -100.f, -320.f); - glTexCoord2i(1, 1); - glVertex3f(100.f, -100.f, -520.f); - glTexCoord2i(0, 1); - glVertex3f(-100.f, -100.f, -520.f); - glEnd(); - - glDisable(GL_TEXTURE_2D); - - if (rendermode == SHADOW) { - - glDisable(GL_DEPTH_TEST); - glDisable(GL_LIGHTING); - glColor3f(0.f, 0.f, 0.f); /* shadow color */ - - glPushMatrix(); - glMultMatrixf((GLfloat *) floorshadow); - glTranslatef(dx, dy, dz); - cone(); - glPopMatrix(); - - glPushMatrix(); - glMultMatrixf((GLfloat *) floorshadow); - glTranslatef(dx, dy, dz); - sphere(); - glPopMatrix(); - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - } - /* walls */ - - if (rendermode == SHADOW) { - glEnable(GL_STENCIL_TEST); - glStencilFunc(GL_ALWAYS, 1, 0); - glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); - } - glBegin(GL_QUADS); - /* left wall */ - glNormal3f(1.f, 0.f, 0.f); - glVertex3f(-100.f, -100.f, -320.f); - glVertex3f(-100.f, -100.f, -520.f); - glVertex3f(-100.f, 100.f, -520.f); - glVertex3f(-100.f, 100.f, -320.f); - glEnd(); - - if (rendermode == SHADOW) { - glStencilFunc(GL_EQUAL, 1, 1); - glDisable(GL_DEPTH_TEST); - glDisable(GL_LIGHTING); - glColor3f(0.f, 0.f, 0.f); /* shadow color */ - glDisable(GL_DEPTH_TEST); - glPushMatrix(); - glMultMatrixf((GLfloat *) leftwallshadow); - glTranslatef(dx, dy, dz); - cone(); - glPopMatrix(); - glEnable(GL_DEPTH_TEST); - glDisable(GL_STENCIL_TEST); - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - } - glBegin(GL_QUADS); - /* right wall */ - glNormal3f(-1.f, 0.f, 0.f); - glVertex3f(100.f, -100.f, -320.f); - glVertex3f(100.f, 100.f, -320.f); - glVertex3f(100.f, 100.f, -520.f); - glVertex3f(100.f, -100.f, -520.f); - - /* ceiling */ - glNormal3f(0.f, -1.f, 0.f); - glVertex3f(-100.f, 100.f, -320.f); - glVertex3f(-100.f, 100.f, -520.f); - glVertex3f(100.f, 100.f, -520.f); - glVertex3f(100.f, 100.f, -320.f); - - /* back wall */ - glNormal3f(0.f, 0.f, 1.f); - glVertex3f(-100.f, -100.f, -520.f); - glVertex3f(100.f, -100.f, -520.f); - glVertex3f(100.f, 100.f, -520.f); - glVertex3f(-100.f, 100.f, -520.f); - glEnd(); - - glPushMatrix(); - glTranslatef(lightpos[X], lightpos[Y], lightpos[Z]); - glDisable(GL_LIGHTING); - glColor3f(1.f, 1.f, .7f); - glCallList(LIGHT); - glEnable(GL_LIGHTING); - glPopMatrix(); - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, cone_mat); - cone(); - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, sphere_mat); - sphere(); - -} - -void -redraw(void) -{ - int dx, dy, dz; - - dy = 0; - /* jitter the light around */ - if (rendermode == SHADOW) { - glClear(GL_ACCUM_BUFFER_BIT); - for (dz = -4; dz < 5; dz += 2) { - for (dx = -4; dx < 5; dx += 2) { - render((GLfloat) dx, (GLfloat) dy, (GLfloat) dz); - glAccum(GL_ACCUM, 1.f / 25); - } - } - glAccum(GL_RETURN, 1.f); - } else - render(0.f, 0.f, 0.f); - - glutSwapBuffers(); -} - -/* ARGSUSED1 */ -void -key(unsigned char key, int x, int y) -{ - if (key == '\033') - exit(0); -} - -const int TEXDIM = 256; -/* Parse arguments, and set up interface between OpenGL and window system */ -int -main(int argc, char *argv[]) -{ - GLfloat *tex; - GLUquadricObj *sphere, *cone, *base; - GLfloat plane[4]; - GLfloat v0[3], v1[3], v2[3]; - - glutInit(&argc, argv); - glutInitWindowSize(512, 512); - glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL | GLUT_DOUBLE | GLUT_ACCUM); - (void) glutCreateWindow("soft shadows"); - glutDisplayFunc(redraw); - glutKeyboardFunc(key); - - glutCreateMenu(menu); - glutAddMenuEntry("No Shadows", NONE); - glutAddMenuEntry("Shadows", SHADOW); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - /* draw a perspective scene */ - glMatrixMode(GL_PROJECTION); - glFrustum(-100., 100., -100., 100., 320., 640.); - glMatrixMode(GL_MODELVIEW); - - /* turn on features */ - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - - /* make shadow matricies */ - - /* 3 points on floor */ - v0[X] = -100.f; - v0[Y] = -100.f; - v0[Z] = -320.f; - v1[X] = 100.f; - v1[Y] = -100.f; - v1[Z] = -320.f; - v2[X] = 100.f; - v2[Y] = -100.f; - v2[Z] = -520.f; - - findplane(plane, v0, v1, v2); - shadowmatrix(floorshadow, plane, lightpos); - - /* 3 points on left wall */ - v0[X] = -100.f; - v0[Y] = -100.f; - v0[Z] = -320.f; - v1[X] = -100.f; - v1[Y] = -100.f; - v1[Z] = -520.f; - v2[X] = -100.f; - v2[Y] = 100.f; - v2[Z] = -520.f; - - findplane(plane, v0, v1, v2); - shadowmatrix(leftwallshadow, plane, lightpos); - - /* place light 0 in the right place */ - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - - /* remove back faces to speed things up */ - glCullFace(GL_BACK); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - - /* make display lists for sphere and cone; for efficiency */ - - glNewList(SPHERE, GL_COMPILE); - sphere = gluNewQuadric(); - gluSphere(sphere, 20.f, 20, 20); - gluDeleteQuadric(sphere); - glEndList(); - - glNewList(LIGHT, GL_COMPILE); - sphere = gluNewQuadric(); - gluSphere(sphere, 5.f, 20, 20); - gluDeleteQuadric(sphere); - glEndList(); - - glNewList(CONE, GL_COMPILE); - cone = gluNewQuadric(); - base = gluNewQuadric(); - glRotatef(-90.f, 1.f, 0.f, 0.f); - gluDisk(base, 0., 20., 20, 1); - gluCylinder(cone, 20., 0., 60., 20, 20); - gluDeleteQuadric(cone); - gluDeleteQuadric(base); - glEndList(); - - glNewList(FLOOR, GL_COMPILE); - glEndList(); - - glNewList(LEFTWALL, GL_COMPILE); - glEndList(); - - /* load pattern for current 2d texture */ - tex = make_texture(TEXDIM, TEXDIM); - glTexImage2D(GL_TEXTURE_2D, 0, 1, TEXDIM, TEXDIM, 0, GL_RED, GL_FLOAT, tex); - free(tex); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/advanced/softshadow.dsp b/lib/glut-3.7.6/progs/advanced/softshadow.dsp deleted file mode 100644 index e107cf310..000000000 --- a/lib/glut-3.7.6/progs/advanced/softshadow.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="softshadow" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=softshadow - 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 "softshadow.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 "softshadow.mak" CFG="softshadow - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "softshadow - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "softshadow - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "softshadow - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "softshadow - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "softshadow - Win32 Release" -# Name "softshadow - Win32 Debug" -# Begin Source File - -SOURCE=.\softshadow.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced/sphere.c b/lib/glut-3.7.6/progs/advanced/sphere.c deleted file mode 100644 index b02271c41..000000000 --- a/lib/glut-3.7.6/progs/advanced/sphere.c +++ /dev/null @@ -1,187 +0,0 @@ - -/* sphere.c - by David Blythe, SGI */ - -/* Instead of tessellating a sphere by lines of longitude and latitude - (a technique that over tessellates the poles and under tessellates - the equator of the sphere), tesselate based on regular solids for a - more uniform tesselation. - - This approach is arguably better than the gluSphere routine's - approach using slices and stacks (latitude and longitude). -mjk */ - -#include -#include -#include - -typedef struct { - float x, y, z; -} point; - -typedef struct { - point pt[3]; -} triangle; - -/* six equidistant points lying on the unit sphere */ -#define XPLUS { 1, 0, 0 } /* X */ -#define XMIN { -1, 0, 0 } /* -X */ -#define YPLUS { 0, 1, 0 } /* Y */ -#define YMIN { 0, -1, 0 } /* -Y */ -#define ZPLUS { 0, 0, 1 } /* Z */ -#define ZMIN { 0, 0, -1 } /* -Z */ - -/* for icosahedron */ -#define CZ (0.89442719099991) /* 2/sqrt(5) */ -#define SZ (0.44721359549995) /* 1/sqrt(5) */ -#define C1 (0.951056516) /* cos(18), */ -#define S1 (0.309016994) /* sin(18) */ -#define C2 (0.587785252) /* cos(54), */ -#define S2 (0.809016994) /* sin(54) */ -#define X1 (C1*CZ) -#define Y1 (S1*CZ) -#define X2 (C2*CZ) -#define Y2 (S2*CZ) - -#define Ip0 {0., 0., 1.} -#define Ip1 {-X2, -Y2, SZ} -#define Ip2 {X2, -Y2, SZ} -#define Ip3 {X1, Y1, SZ} -#define Ip4 {0, CZ, SZ} -#define Ip5 {-X1, Y1, SZ} - -#define Im0 {-X1, -Y1, -SZ} -#define Im1 {0, -CZ, -SZ} -#define Im2 {X1, -Y1, -SZ} -#define Im3 {X2, Y2, -SZ} -#define Im4 {-X2, Y2, -SZ} -#define Im5 {0., 0., -1.} - -/* vertices of a unit icosahedron */ -static triangle icosahedron[20]= { - /* front pole */ - { {Ip0, Ip1, Ip2}, }, - { {Ip0, Ip5, Ip1}, }, - { {Ip0, Ip4, Ip5}, }, - { {Ip0, Ip3, Ip4}, }, - { {Ip0, Ip2, Ip3}, }, - - /* mid */ - { {Ip1, Im0, Im1}, }, - { {Im0, Ip1, Ip5}, }, - { {Ip5, Im4, Im0}, }, - { {Im4, Ip5, Ip4}, }, - { {Ip4, Im3, Im4}, }, - { {Im3, Ip4, Ip3}, }, - { {Ip3, Im2, Im3}, }, - { {Im2, Ip3, Ip2}, }, - { {Ip2, Im1, Im2}, }, - { {Im1, Ip2, Ip1}, }, - - /* back pole */ - { {Im3, Im2, Im5}, }, - { {Im4, Im3, Im5}, }, - { {Im0, Im4, Im5}, }, - { {Im1, Im0, Im5}, }, - { {Im2, Im1, Im5}, }, -}; - -/* normalize point r */ -static void -normalize(point *r) { - float mag; - - mag = r->x * r->x + r->y * r->y + r->z * r->z; - if (mag != 0.0f) { - mag = 1.0f / sqrt(mag); - r->x *= mag; - r->y *= mag; - r->z *= mag; - } -} - -/* linearly interpolate between a & b, by fraction f */ -static void -lerp(point *a, point *b, float f, point *r) { - r->x = a->x + f*(b->x-a->x); - r->y = a->y + f*(b->y-a->y); - r->z = a->z + f*(b->z-a->z); -} - -void -sphere(int maxlevel) { - int nrows = 1 << maxlevel; - int s; - - /* iterate over the 20 sides of the icosahedron */ - for(s = 0; s < 20; s++) { - int i; - triangle *t = &icosahedron[s]; - for(i = 0; i < nrows; i++) { - /* create a tstrip for each row */ - /* number of triangles in this row is number in previous +2 */ - /* strip the ith trapezoid block */ - point v0, v1, v2, v3, va, vb; - int j; - lerp(&t->pt[1], &t->pt[0], (float)(i+1)/nrows, &v0); - lerp(&t->pt[1], &t->pt[0], (float)i/nrows, &v1); - lerp(&t->pt[1], &t->pt[2], (float)(i+1)/nrows, &v2); - lerp(&t->pt[1], &t->pt[2], (float)i/nrows, &v3); - glBegin(GL_TRIANGLE_STRIP); -#define V(v) { point x; x = v; normalize(&x); glNormal3fv(&x.x); glVertex3fv(&x.x); } - V(v0); - V(v1); - for(j = 0; j < i; j++) { - /* calculate 2 more vertices at a time */ - lerp(&v0, &v2, (float)(j+1)/(i+1), &va); - lerp(&v1, &v3, (float)(j+1)/i, &vb); - V(va); - V(vb); - } - V(v2); -#undef V - glEnd(); - } - } -} - -float * -sphere_tris(int maxlevel) { - int nrows = 1 << maxlevel; - int s, n; - float *buf, *b; - - n = 20*(1 << (maxlevel * 2)); - b = buf = (float *)malloc(n*3*3*sizeof(float)); - - /* iterate over the 20 sides of the icosahedron */ - for(s = 0; s < 20; s++) { - int i; - triangle *t = &icosahedron[s]; - for(i = 0; i < nrows; i++) { - /* create a tstrip for each row */ - /* number of triangles in this row is number in previous +2 */ - /* strip the ith trapezoid block */ - point v0, v1, v2, v3, va, vb, x1, x2; - int j; - lerp(&t->pt[1], &t->pt[0], (float)(i+1)/nrows, &v0); - lerp(&t->pt[1], &t->pt[0], (float)i/nrows, &v1); - lerp(&t->pt[1], &t->pt[2], (float)(i+1)/nrows, &v2); - lerp(&t->pt[1], &t->pt[2], (float)i/nrows, &v3); -#define V(a, c, v) { point x = v; normalize(&a); normalize(&c); normalize(&x); \ - b[0] = a.x; b[1] = a.y; b[2] = a.z; \ - b[3] = c.x; b[4] = c.y; b[5] = c.z; \ - b[6] = x.x; b[7] = x.y; b[8] = x.z; b+=9; } - x1 = v0; - x2 = v1; - for(j = 0; j < i; j++) { - /* calculate 2 more vertices at a time */ - lerp(&v0, &v2, (float)(j+1)/(i+1), &va); - lerp(&v1, &v3, (float)(j+1)/i, &vb); - V(x1,x2,va); x1 = x2; x2 = va; - V(vb,x2,x1); x1 = x2; x2 = vb; - } - V(x1, x2, v2); -#undef V - } - } - return buf; -} diff --git a/lib/glut-3.7.6/progs/advanced/tess.c b/lib/glut-3.7.6/progs/advanced/tess.c deleted file mode 100644 index 8cb504c4d..000000000 --- a/lib/glut-3.7.6/progs/advanced/tess.c +++ /dev/null @@ -1,206 +0,0 @@ - -/* tess.c - by David Blythe, SGI */ - -#include -#include -#include - -static GLfloat spin = 0; -static int level = 4; -static int model = 0; -static GLfloat rotx, roty; -static int ox = -1, oy = -1; -static int mot; -#define PAN 1 -#define ROT 2 - -void -movelight(int x, int y) { - spin += (y-oy); - ox = x; oy = y; - if (spin > 360.) spin -= 360.; - if (spin < -360.) spin -= -360.; - glutPostRedisplay(); -} - -void -rotate(int x, int y) { - rotx += x-ox; - if (rotx > 360.) rotx -= 360.; - else if (rotx < -360.) rotx += 360.; - roty += y-oy; - if (roty > 360.) roty -= 360.; - else if (roty < -360.) roty += 360.; - ox = x; oy = y; - glutPostRedisplay(); -} - -void -motion(int x, int y) { - if (mot == PAN) movelight(x, y); - else if (mot == ROT) rotate(x,y); -} - -void -mouse(int button, int state, int x, int y) { - if(state == GLUT_DOWN) { - switch(button) { - case GLUT_LEFT_BUTTON: - mot = PAN; - motion(ox = x, oy = y); - break; - case GLUT_MIDDLE_BUTTON: - mot = ROT; - motion(ox = x, oy = y); - break; - case GLUT_RIGHT_BUTTON: - break; - } - } else if (state == GLUT_UP) { - mot = 0; - } -} - -void togglewire(void) { - static int toggle = 0; - toggle ^= 1; - glPolygonMode(GL_FRONT_AND_BACK, toggle ? GL_LINE : GL_FILL); -} - -void genmodel(void) { - extern void sphere(int level); - - glNewList(1, GL_COMPILE); - if (model) { - GLUquadricObj *q = gluNewQuadric(); - - gluSphere(q, 1.0, 10*level, 10*level); - gluDeleteQuadric(q); - } else { - sphere(level-1); - } - glEndList(); -} - -void togglemodel(void) { - model ^= 1; - genmodel(); -} - -void levelup(void) { - level += 1; - if (level > 7) level = 7; - genmodel(); -} - -void leveldown(void) { - level -= 1; - if (level <= 0) level = 1; - genmodel(); -} - -void help(void) { - printf("'h' - help\n"); - printf("'t' - tessellation style\n"); - printf("'UP' - increase tessellation\n"); - printf("'DOWN' - decrease tessellation\n"); - printf("left mouse - rotate sphere\n"); - printf("middle mouse - move light\n"); -} - -void init(void) { - GLfloat specular[4] = { 1., 1., 1., 1. }; - - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - genmodel(); - glDepthFunc(GL_LESS); - glEnable(GL_DEPTH_TEST); - glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular); - glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 30); -} - -void display(void) { - GLfloat position[] = { 0.0, 0.0, 3.5, 1.0 }; - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glPushMatrix(); - glTranslatef(0.0, 0.0, -5.0); - - glPushMatrix(); - glRotatef(spin, 1.0, 0.0, 0.0); - glRotatef(0.0, 1.0, 0.0, 0.0); - glLightfv(GL_LIGHT0, GL_POSITION, position); - - glPopMatrix(); - - glRotatef(rotx, 0., 1., 0.); - glRotatef(roty, 1., 0., 0.); - glCallList(1); - glPopMatrix(); - glutSwapBuffers(); -} - -void reshape(int w, int h) { - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(40.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0); - glMatrixMode(GL_MODELVIEW); -} - -/* ARGSUSED1 */ -void -key(unsigned char key, int x, int y) { - switch(key) { - case 't': togglemodel(); break; - case 'w': togglewire(); break; - case 'h': help(); break; - case '\033': exit(0); - default: break; - } - glutPostRedisplay(); -} - -/* ARGSUSED1 */ -void -special(int key, int x, int y) { - switch(key) { - case GLUT_KEY_UP: levelup(); break; - case GLUT_KEY_DOWN: leveldown(); break; - } - glutPostRedisplay(); -} - -void -menu(int value) -{ - if(value<0) - special(-value,0,0); - else - key((unsigned char) value,0,0); -} - -int main(int argc, char** argv) { - glutInit(&argc, argv); - glutInitWindowSize(512, 512); - glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE|GLUT_DEPTH); - (void)glutCreateWindow("Quality of sphere tesselation"); - init(); - glutDisplayFunc(display); - glutKeyboardFunc(key); - glutSpecialFunc(special); - glutReshapeFunc(reshape); - glutMouseFunc(mouse); - glutMotionFunc(motion); - glutCreateMenu(menu); - glutAddMenuEntry("Toggle sphere model", 't'); - glutAddMenuEntry("Toggle solid/wireframe", 'w'); - glutAddMenuEntry("Increase tessellation", -GLUT_KEY_UP); - glutAddMenuEntry("Decrease tessellation", -GLUT_KEY_DOWN); - glutAddMenuEntry("Print help message", 'h'); - glutAddMenuEntry("Quit", '\033'); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/advanced/tess.dsp b/lib/glut-3.7.6/progs/advanced/tess.dsp deleted file mode 100644 index 1daf5a704..000000000 --- a/lib/glut-3.7.6/progs/advanced/tess.dsp +++ /dev/null @@ -1,92 +0,0 @@ -# Microsoft Developer Studio Project File - Name="tess" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=tess - 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 "tess.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 "tess.mak" CFG="tess - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "tess - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "tess - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "tess - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "tess - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "tess - Win32 Release" -# Name "tess - Win32 Debug" -# Begin Source File - -SOURCE=.\sphere.c -# End Source File -# Begin Source File - -SOURCE=.\tess.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced/textext.c b/lib/glut-3.7.6/progs/advanced/textext.c deleted file mode 100644 index 44f8f18f4..000000000 --- a/lib/glut-3.7.6/progs/advanced/textext.c +++ /dev/null @@ -1,186 +0,0 @@ - -/* textext.c - by David Blythe, SGI */ - -/* Example of using texturing for 3D transformable fonts. */ - -#include -#include -#include -#include -#include "texture.h" -#include "textmap.h" - -static float scale = .03; -static char *string = "OpenGL rules"; -static float transx, transy, rotx, roty; -static int ox = -1, oy = -1; -static int mot = 0; -#define PAN 1 -#define ROT 2 - -void -pan(int x, int y) -{ - transx += (x - ox) / 500.; - transy -= (y - oy) / 500.; - ox = x; - oy = y; - glutPostRedisplay(); -} - -void -rotate(int x, int y) -{ - rotx += x - ox; - if (rotx > 360.) - rotx -= 360.; - else if (rotx < -360.) - rotx += 360.; - roty += y - oy; - if (roty > 360.) - roty -= 360.; - else if (roty < -360.) - roty += 360.; - ox = x; - oy = y; - glutPostRedisplay(); -} - -void -motion(int x, int y) -{ - if (mot == PAN) - pan(x, y); - else if (mot == ROT) - rotate(x, y); -} - -void -mouse(int button, int state, int x, int y) -{ - if (state == GLUT_DOWN) { - switch (button) { - case GLUT_LEFT_BUTTON: - mot = PAN; - motion(ox = x, oy = y); - break; - case GLUT_MIDDLE_BUTTON: - mot = ROT; - motion(ox = x, oy = y); - break; - case GLUT_RIGHT_BUTTON: - break; - } - } else if (state == GLUT_UP) { - mot = 0; - } -} - -void -up(void) -{ - scale += .0025; -} - -void -down(void) -{ - scale -= .0025; -} - -void -help(void) -{ - printf("Usage: textext [string]\n"); - printf("'h' - help\n"); - printf("'UP' - scale up\n"); - printf("'DOWN' - scale down\n"); - printf("left mouse - pan\n"); - printf("middle mouse - rotate\n"); -} - -void -init(void) -{ - texfntinit("Times-Italic.bw"); - glEnable(GL_TEXTURE_2D); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(90., 1., .1, 10.); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(0., 0., -1.5); -} - -void -display(void) -{ - float width = texstrwidth(string); - glClear(GL_COLOR_BUFFER_BIT); - glPushMatrix(); - glTranslatef(transx, transy, 0.f); - glRotatef(rotx, 0., 1., 0.); - glRotatef(roty, 1., 0., 0.); - glScalef(scale, scale, 0.); - glTranslatef(-width * 5, 0.f, 0.f); - texfntstroke(string, 0.f, 0.f); - glPopMatrix(); - glutSwapBuffers(); -} - -void -reshape(int w, int h) -{ - glViewport(0, 0, w, h); -} - -/* ARGSUSED1 */ -void -key(unsigned char key, int x, int y) -{ - switch (key) { - case 'h': - help(); - break; - case '\033': - exit(1); - break; - default: - break; - } -} - -/* ARGSUSED1 */ -void -special(int key, int x, int y) -{ - switch (key) { - case GLUT_KEY_UP: - up(); - break; - case GLUT_KEY_DOWN: - down(); - break; - } - glutPostRedisplay(); -} - -int -main(int argc, char **argv) -{ - if (argc > 1) - string = argv[1]; - glutInit(&argc, argv); - glutInitWindowSize(512, 512); - glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); - (void) glutCreateWindow("textext"); - init(); - glutDisplayFunc(display); - glutKeyboardFunc(key); - glutSpecialFunc(special); - glutReshapeFunc(reshape); - glutMouseFunc(mouse); - glutMotionFunc(motion); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/advanced/textext.dsp b/lib/glut-3.7.6/progs/advanced/textext.dsp deleted file mode 100644 index ff40e187d..000000000 --- a/lib/glut-3.7.6/progs/advanced/textext.dsp +++ /dev/null @@ -1,104 +0,0 @@ -# Microsoft Developer Studio Project File - Name="textext" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=textext - 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 "textext.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 "textext.mak" CFG="textext - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "textext - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "textext - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "textext - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "textext - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "textext - Win32 Release" -# Name "textext - Win32 Debug" -# Begin Source File - -SOURCE=.\textext.c -# End Source File -# Begin Source File - -SOURCE=.\textmap.c -# End Source File -# Begin Source File - -SOURCE=.\textmap.h -# End Source File -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# Begin Source File - -SOURCE=.\texture.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced/textile.c b/lib/glut-3.7.6/progs/advanced/textile.c deleted file mode 100644 index 272ebeff6..000000000 --- a/lib/glut-3.7.6/progs/advanced/textile.c +++ /dev/null @@ -1,427 +0,0 @@ - -/* textile.c - by David Blythe, SGI */ - -/* The idea behind texture tiling is that OpenGL's texture modes, - particularly its support for a texture border make it possible to "tile" - together small textures with a result identical to if a much larger - texture was supported. OpenGL allows implementations to limit the maximum - size of a texture image (often this limit reflects size limitations within - fast texturing hardware). Texture tiling lets you work around otherwise - limited texture image sizes. - - Try textile with tiling enabled and linear filtering enabled. As long as - you have texture borders enabled, you won't see any seams. If you disable - texture borders with linear filtering enabled, you'll get seams at the - boundaries of the tiles. The seams can be detected whether the texture - wrap mode is either clamped or wrapped. - - If you disable texture tiling in textile, textile acts as if your maximum - texture image size was 32x32 (no matter what your OpenGL implementation - really supports) to mimic how the image would look on a system with a very - limited texture image size. When the display window is large, the - textured rectangle should look very blurry at this limited texture image - size. -mjk */ - -#include -#include -#include -#include -#include -#include "texture.h" - -int maxTextureSize; -int maxTextureLevel; - -int imageWidth, imageHeight; -GLubyte *imageData; - -int texWidthLevel0, texHeightLevel0; -int texWidthTiles, texHeightTiles; -GLubyte **texImageLevel; - -GLboolean useBorder = GL_TRUE; -GLboolean useClamp = GL_TRUE; -GLboolean useLinear = GL_TRUE; -GLboolean useMipmap = GL_TRUE; -GLboolean useTextureTiling = GL_TRUE; - -/* (int)floor(log2(a)) */ -static int -iflog2(unsigned int a) -{ - int x = 0; - while (a >>= 1) - ++x; - return x; -} - -static void -initialize(void) -{ - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glFrustum(-0.5, 0.5, -0.5, 0.5, 0.5, 1.5); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(0, 0, -0.90); - glRotatef(45.0, 0, 1, 0); - glTranslatef(-0.5, -0.5, 0.0); - -#if 0 - /* A real program would query the real maximum supported texture size, but - program is an example. Even better would be to use OpenGL 1.1's texture - proxy mechanism. */ - glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTextureSize); -#else - /* Assume that the OpenGL implemenatation does not support anything larger - than 32x32 texture images. */ - maxTextureSize = 32; -#endif - maxTextureLevel = iflog2(maxTextureSize); - - texImageLevel = (GLubyte **) calloc(maxTextureLevel + 1, sizeof(GLubyte *)); - if (texImageLevel == NULL) { - fprintf(stderr, "texture level image allocation failed\n"); - exit(1); - } - glClearColor(0.1, 0.1, 0.1, 0.1); -} - -static void -imgLoad(char *filename_in, int *w_out, int *h_out, GLubyte ** img_out) -{ - int comp; - - *img_out = (GLubyte *) read_texture(filename_in, w_out, h_out, &comp); - if (*img_out == NULL) { - fprintf(stderr, "unable to read %s\n", filename_in); - exit(1); - } - if (comp != 3 && comp != 4) { - fprintf(stderr, "%s: image is not RGB or RGBA\n", filename_in); - exit(1); - } -} - -static void -buildMipmaps(void) -{ - int level, levelWidth, levelHeight; - - if (useTextureTiling) { - int width2 = iflog2(imageWidth); - int height2 = iflog2(imageHeight); - - width2 = (width2 > maxTextureLevel) ? width2 : maxTextureLevel; - height2 = (height2 > maxTextureLevel) ? height2 : maxTextureLevel; - - texWidthLevel0 = 1 << width2; - texHeightLevel0 = 1 << height2; - texWidthTiles = texWidthLevel0 >> maxTextureLevel; - texHeightTiles = texHeightLevel0 >> maxTextureLevel; - } else { - texWidthLevel0 = maxTextureSize; - texHeightLevel0 = maxTextureSize; - texWidthTiles = 1; - texHeightTiles = 1; - } - - texImageLevel[0] = (GLubyte *) - calloc(1, (texWidthLevel0 + 2) * (texHeightLevel0 + 2) * 4 * sizeof(GLubyte)); - - glPixelStorei(GL_PACK_ROW_LENGTH, texWidthLevel0 + 2); - glPixelStorei(GL_PACK_SKIP_PIXELS, 1); - glPixelStorei(GL_PACK_SKIP_ROWS, 1); - - gluScaleImage(GL_RGBA, imageWidth, imageHeight, - GL_UNSIGNED_BYTE, imageData, - texWidthLevel0, texHeightLevel0, - GL_UNSIGNED_BYTE, texImageLevel[0]); - - glPixelStorei(GL_UNPACK_SKIP_PIXELS, 1); - glPixelStorei(GL_UNPACK_SKIP_ROWS, 1); - - levelWidth = texWidthLevel0; - levelHeight = texHeightLevel0; - for (level = 0; level < maxTextureLevel; ++level) { - int newLevelWidth = (levelWidth > 1) ? levelWidth / 2 : 1; - int newLevelHeight = (levelHeight > 1) ? levelHeight / 2 : 1; - - texImageLevel[level + 1] = (GLubyte *) - calloc(1, (newLevelWidth + 2) * (newLevelHeight + 2) * 4 * sizeof(GLubyte)); - - glPixelStorei(GL_PACK_ROW_LENGTH, newLevelWidth + 2); - glPixelStorei(GL_UNPACK_ROW_LENGTH, levelWidth + 2); - - gluScaleImage(GL_RGBA, levelWidth, levelHeight, - GL_UNSIGNED_BYTE, texImageLevel[level], - newLevelWidth, newLevelHeight, - GL_UNSIGNED_BYTE, texImageLevel[level + 1]); - - levelWidth = newLevelWidth; - levelHeight = newLevelHeight; - } - - glPixelStorei(GL_PACK_ROW_LENGTH, 0); - glPixelStorei(GL_PACK_SKIP_PIXELS, 0); - glPixelStorei(GL_PACK_SKIP_ROWS, 0); - - glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); - glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0); - glPixelStorei(GL_UNPACK_SKIP_ROWS, 0); -} - -static void -freeMipmaps(void) -{ - int i; - - for (i = 0; i <= maxTextureLevel; ++i) { - if (texImageLevel[i] != NULL) { - free(texImageLevel[i]); - texImageLevel[i] = NULL; - } - } -} - -static void -loadTile(int row, int col) -{ - int border = useBorder ? 1 : 0; - int level, levelWidth, levelHeight; - - levelWidth = texWidthLevel0; - levelHeight = texHeightLevel0; - for (level = 0; level <= maxTextureLevel; ++level) { - int tileWidth = levelWidth / texWidthTiles; - int tileHeight = levelHeight / texHeightTiles; - int skipPixels = col * tileWidth + (1 - border); - int skipRows = row * tileHeight + (1 - border); - - glPixelStorei(GL_UNPACK_ROW_LENGTH, levelWidth + 2); - glPixelStorei(GL_UNPACK_SKIP_PIXELS, skipPixels); - glPixelStorei(GL_UNPACK_SKIP_ROWS, skipRows); - - glTexImage2D(GL_TEXTURE_2D, level, 4, - tileWidth + 2 * border, tileHeight + 2 * border, - border, GL_RGBA, GL_UNSIGNED_BYTE, texImageLevel[level]); - - if (levelWidth > 1) - levelWidth = levelWidth / 2; - if (levelHeight > 1) - levelHeight = levelHeight / 2; - } - - glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); - glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0); - glPixelStorei(GL_UNPACK_SKIP_ROWS, 0); -} - -static void -redraw(void) -{ - GLenum minFilterMode, magFilterMode, wrapMode; - char *minFilterName, *magFilterName, *wrapName; - int i, j; - - if (useLinear) { - if (useMipmap) { - minFilterMode = GL_LINEAR_MIPMAP_LINEAR; - minFilterName = "LINEAR_MIPMAP_LINEAR"; - } else { - minFilterMode = GL_LINEAR; - minFilterName = "LINEAR"; - } - magFilterMode = GL_LINEAR; - magFilterName = "LINEAR"; - } else { - if (useMipmap) { - minFilterMode = GL_NEAREST_MIPMAP_LINEAR; - minFilterName = "NEAREST_MIPMAP_LINEAR"; - } else { - minFilterMode = GL_NEAREST; - minFilterName = "NEAREST"; - } - magFilterMode = GL_NEAREST; - magFilterName = "NEAREST"; - } - - if (useClamp) { - wrapMode = GL_CLAMP; - wrapName = "CLAMP"; - } else { - wrapMode = GL_REPEAT; - wrapName = "REPEAT"; - } - - fprintf(stderr, "tile(%s) ", useTextureTiling ? "yes" : "no"); - fprintf(stderr, "border(%s) ", useBorder ? "yes" : "no"); - fprintf(stderr, "filter(%s, %s) ", minFilterName, magFilterName); - fprintf(stderr, "wrap(%s) ", wrapName); - fprintf(stderr, "\n"); - - glClear(GL_COLOR_BUFFER_BIT); - - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, minFilterMode); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, magFilterMode); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrapMode); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrapMode); - - buildMipmaps(); - - glEnable(GL_TEXTURE_2D); - - for (i = 0; i < texHeightTiles; ++i) { - float ySize = 1.0 / texHeightTiles; - float y0 = i * ySize; - float y1 = y0 + ySize; - - for (j = 0; j < texWidthTiles; ++j) { - float xSize = 1.0 / texWidthTiles; - float x0 = j * xSize; - float x1 = x0 + xSize; - - loadTile(i, j); - - glBegin(GL_TRIANGLE_STRIP); - glTexCoord2f(0.0, 1.0); - glVertex2f(x0, y1); - glTexCoord2f(0.0, 0.0); - glVertex2f(x0, y0); - glTexCoord2f(1.0, 1.0); - glVertex2f(x1, y1); - glTexCoord2f(1.0, 0.0); - glVertex2f(x1, y0); - glEnd(); - } - } - - glDisable(GL_TEXTURE_2D); - - freeMipmaps(); -} - -static void -usage(char *name) -{ - fprintf(stderr, "\n"); - fprintf(stderr, "usage: %s [ options ] filename\n", name); - fprintf(stderr, "\n"); - fprintf(stderr, " Demonstrates using texture borders\n"); - fprintf(stderr, " to tile a large texture\n"); - fprintf(stderr, "\n"); - fprintf(stderr, " Options:\n"); - fprintf(stderr, " -sb single buffered\n"); - fprintf(stderr, " -db double buffered\n"); - fprintf(stderr, "\n"); -} - -/* ARGSUSED1 */ -void -key(unsigned char key, int x, int y) -{ - switch (key) { - case '\033': - exit(0); - break; - case 'b': - useBorder = !useBorder; - break; - case 'w': - useClamp = !useClamp; - break; - case 'l': - useLinear = !useLinear; - break; - case 'm': - useMipmap = !useMipmap; - break; - case 't': - useTextureTiling = !useTextureTiling; - break; - default: - return; - } - glutPostRedisplay(); -} - -void -menu(int value) -{ - key((unsigned char) value, 0, 0); -} - -int doubleBuffered = GL_FALSE; - -void -display(void) -{ - GLenum error; - redraw(); - if (doubleBuffered) - glutSwapBuffers(); - else - glFlush(); - while ((error = glGetError()) != GL_NO_ERROR) { - fprintf(stderr, "Error: %s\n", (char *) gluErrorString(error)); - } -} - -void -reshape(int w, int h) -{ - glViewport(0, 0, w, h); -} - -int -main(int argc, char *argv[]) -{ - char *name = "Texture Tiling Test"; - int width = 300, height = 300; - char *filename = NULL; - int i; - - for (i = 1; i < argc; ++i) { - if (!strcmp("-sb", argv[i])) { - doubleBuffered = GL_FALSE; - - } else if (!strcmp("-db", argv[i])) { - doubleBuffered = GL_TRUE; - - } else if (argv[i][0] != '-' && i == argc - 1) { - filename = argv[i]; - - } else { - usage(argv[0]); - exit(1); - } - } - - if (filename == NULL) { - usage(argv[0]); - exit(1); - } - imgLoad(filename, &imageWidth, &imageHeight, &imageData); - - glutInitWindowSize(width, height); - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGBA | (doubleBuffered ? GLUT_DOUBLE : 0)); - glutCreateWindow(name); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glutKeyboardFunc(key); - initialize(); - glutCreateMenu(menu); - glutAddMenuEntry("Toggle texture tiling", 't'); - glutAddMenuEntry("Toggle clamping", 'w'); - glutAddMenuEntry("Toggle linear filtering", 'l'); - glutAddMenuEntry("Toggle mipmap usage", 'm'); - glutAddMenuEntry("Toggle texture border", 'b'); - glutAddMenuEntry("Quit", '\033'); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/advanced/textile.dsp b/lib/glut-3.7.6/progs/advanced/textile.dsp deleted file mode 100644 index c00ee3e91..000000000 --- a/lib/glut-3.7.6/progs/advanced/textile.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="textile" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=textile - 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 "textile.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 "textile.mak" CFG="textile - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "textile - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "textile - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "textile - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "textile - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "textile - Win32 Release" -# Name "textile - Win32 Debug" -# Begin Source File - -SOURCE=.\textile.c -# End Source File -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# Begin Source File - -SOURCE=.\texture.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced/textmap.c b/lib/glut-3.7.6/progs/advanced/textmap.c deleted file mode 100644 index 2e2fd5948..000000000 --- a/lib/glut-3.7.6/progs/advanced/textmap.c +++ /dev/null @@ -1,328 +0,0 @@ - -/* textmap.c - by David Blythe, SGI */ - -/* Helper routines used by textext.c for texture mapped fonts. */ - -#include -#include -#include -#include "textmap.h" -#include "texture.h" - -/* byte swap a 32-bit value */ -#define SWAPL(x, n) { \ - n = ((char *) (x))[0];\ - ((char *) (x))[0] = ((char *) (x))[3];\ - ((char *) (x))[3] = n;\ - n = ((char *) (x))[1];\ - ((char *) (x))[1] = ((char *) (x))[2];\ - ((char *) (x))[2] = n; } - -/* byte swap a short */ -#define SWAPS(x, n) { \ - n = ((char *) (x))[0];\ - ((char *) (x))[0] = ((char *) (x))[1];\ - ((char *) (x))[1] = n; } - -static texfnt *curtfnt; -static unsigned char *fb; -static unsigned char *gptr; - -/* get metric data into image */ -static void -initget(void) -{ - gptr = fb; -} - -static void -getbytes(void *pbuf, int n) -{ - char *buf = pbuf; - while (n--) { - *buf++ = *gptr++; - } -} - -static void -fixrow(unsigned short *sptr, int n) -{ - while (n--) { - /* *sptr = *sptr + (0xff<<8); */ - /* *sptr = (*sptr<<8) | 0xff; */ - sptr++; - } -} - -int -doSwap(void) -{ - int i = 0xffff0000; - char *cptr = (char*) &i; - - if (cptr[0] == 0) { - return 1; /* little endian (x86, alpha) */ - } else { - return 0; /* big endian (SGI, 68000, VAX, SPARC) */ - } -} - -texfnt * -readtexfont(char *name) -{ - texfnt *tfnt; - unsigned *image; - unsigned char *cptr; - unsigned short *sbuf, *sptr; - short advancecell, xadvance; - short llx, lly, urx, ury, ox, oy; - int i, y, extralines; - texchardesc *cd; - int xsize, ysize, components; - int swap = doSwap(); - int tmp; - - tfnt = (texfnt *) malloc(sizeof(texfnt)); - image = read_texture(name, &xsize, &ysize, &components); - if (!image) { - fprintf(stderr, "textmap: can't open font image %s\n", name); - return 0; - } - extralines = ysize - xsize; - if (extralines < 1) { - fprintf(stderr, "textmap: bad input font!!\n"); - return 0; - } - fb = (unsigned char *) malloc(xsize * extralines); - sbuf = (unsigned short *) malloc(xsize * sizeof(short)); - cptr = fb; - for (y = xsize; y < ysize; y++) { - int x; - for (x = 0; x < xsize; x++) - cptr[x] = image[y * xsize + x] >> 16; - cptr += xsize; - } - initget(); - tfnt->rasxsize = xsize; - tfnt->rasysize = xsize; - getbytes(&tfnt->charmin, sizeof(short)); - getbytes(&tfnt->charmax, sizeof(short)); - getbytes(&tfnt->pixhigh, sizeof(float)); - getbytes(&advancecell, sizeof(short)); - if (swap) { - SWAPS(&tfnt->charmin, tmp); - SWAPS(&tfnt->charmax, tmp); - SWAPL(&tfnt->pixhigh, tmp); - SWAPS(&advancecell, tmp); - } - tfnt->nchars = tfnt->charmax - tfnt->charmin + 1; - tfnt->chars = (texchardesc *) malloc(tfnt->nchars * sizeof(texchardesc)); - tfnt->rasdata = (unsigned short *) malloc(tfnt->rasxsize * tfnt->rasysize * sizeof(long)); - sptr = tfnt->rasdata; - for (y = 0; y < tfnt->rasysize; y++) { - int x; - for (x = 0; x < xsize; x++) - sptr[x] = image[y * xsize + x] >> 16; - fixrow(sptr, tfnt->rasxsize); - sptr += tfnt->rasxsize; - } - - cd = tfnt->chars; - for (i = 0; i < tfnt->nchars; i++) { - getbytes(&xadvance, sizeof(short)); - getbytes(&llx, sizeof(short)); - getbytes(&lly, sizeof(short)); - getbytes(&urx, sizeof(short)); - getbytes(&ury, sizeof(short)); - getbytes(&ox, sizeof(short)); - getbytes(&oy, sizeof(short)); - if (swap) { - SWAPS(&xadvance, tmp); - SWAPS(&llx, tmp); - SWAPS(&lly, tmp); - SWAPS(&urx, tmp); - SWAPS(&ury, tmp); - SWAPS(&ox, tmp); - SWAPS(&oy, tmp); - } - cd->movex = xadvance / (float) advancecell; - - if (llx >= 0) { - cd->haveimage = 1; - cd->llx = (llx - ox) / tfnt->pixhigh; - cd->lly = (lly - oy) / tfnt->pixhigh; - cd->urx = (urx - ox + 1) / tfnt->pixhigh; - cd->ury = (ury - oy + 1) / tfnt->pixhigh; - cd->tllx = llx / (float) tfnt->rasxsize; - cd->tlly = lly / (float) tfnt->rasysize; - cd->turx = (urx + 1) / (float) tfnt->rasxsize; - cd->tury = (ury + 1) / (float) tfnt->rasysize; - cd->data[0] = cd->tllx; - cd->data[1] = cd->tlly; - - cd->data[2] = cd->llx; - cd->data[3] = cd->lly; - - cd->data[4] = cd->turx; - cd->data[5] = cd->tlly; - - cd->data[6] = cd->urx; - cd->data[7] = cd->lly; - - cd->data[8] = cd->turx; - cd->data[9] = cd->tury; - - cd->data[10] = cd->urx; - cd->data[11] = cd->ury; - - cd->data[12] = cd->tllx; - cd->data[13] = cd->tury; - - cd->data[14] = cd->llx; - cd->data[15] = cd->ury; - - cd->data[16] = cd->llx; - cd->data[17] = cd->lly; - cd->data[18] = cd->urx; - cd->data[19] = cd->lly; - - cd->data[20] = cd->urx; - cd->data[21] = cd->ury; - cd->data[22] = cd->llx; - cd->data[23] = cd->ury; - - } else { - cd->haveimage = 0; - } - cd++; - } - free(fb); - free(sbuf); - free(image); - return tfnt; -} - -void -texfont(texfnt * tfnt) -{ - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexImage2D(GL_TEXTURE_2D, 0, 2, tfnt->rasxsize, tfnt->rasysize, 0, - GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, tfnt->rasdata); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - curtfnt = tfnt; -} - -float -texstrwidth(char *str) -{ - unsigned int c; - unsigned int charmin, tnchars; - texfnt *tfnt; - texchardesc *cdbase, *cd; - float xpos; - - tfnt = curtfnt; - if (!tfnt) { - fprintf(stderr, "texstrwidth: no texfont set!!\n"); - return 0; - } - charmin = tfnt->charmin; - tnchars = tfnt->nchars; - cdbase = tfnt->chars; - xpos = 0.0; - while (*str) { - c = *str - charmin; - if (c < tnchars) { - cd = cdbase + c; - xpos += cd->movex; - } - str++; - } - return xpos; -} - -void -texcharstr(char *str) -{ - unsigned int c; - unsigned int charmin, tnchars; - texfnt *tfnt; - texchardesc *cdbase, *cd; - float *fdata, xpos; - - tfnt = curtfnt; - if (!tfnt) { - fprintf(stderr, "texcharstr: no texfont set!!\n"); - return; - } - charmin = tfnt->charmin; - tnchars = tfnt->nchars; - cdbase = tfnt->chars; - xpos = 0.0; -#if 0 - texbind(TX_TEXTURE_0, LETTER_INDEX); /* bind letter texture */ - tevbind(TV_ENV0, LETTER_INDEX); -#endif - while (*str) { - c = *str - charmin; - if (c < tnchars) { - cd = cdbase + c; - if (cd->haveimage) { - fdata = cd->data; - fdata[16] = fdata[2] + xpos; - fdata[18] = fdata[6] + xpos; - fdata[20] = fdata[10] + xpos; - fdata[22] = fdata[14] + xpos; - glBegin(GL_POLYGON); - glTexCoord2fv(&fdata[0]); - glVertex2fv(&fdata[16]); - glTexCoord2fv(&fdata[4]); - glVertex2fv(&fdata[18]); - glTexCoord2fv(&fdata[8]); - glVertex2fv(&fdata[20]); - glTexCoord2fv(&fdata[12]); - glVertex2fv(&fdata[22]); - glEnd(); - } - xpos += cd->movex; - } - str++; - } -} - -int -texfntinit(char *file) -{ - static int once = 0; - static texfnt *tfnt; - if (!once) { - tfnt = readtexfont(file); - if (!tfnt) { - fprintf(stderr, "texfntinit: can't open input font %s\n", file); - return -1; - } - texfont(tfnt); - once = 1; - } - return 0; -} - -float -texfntwidth(char *str) -{ - return texstrwidth(str) * 12.5 / 6.; -} - -void -texfntstroke(char *s, float xoffset, float yoffset) -{ - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glPushMatrix(); - glTranslatef(xoffset, yoffset, 0.0); - glScalef(12.5, 12.5, 12.5); - texcharstr(s); - glPopMatrix(); - glDisable(GL_BLEND); -} diff --git a/lib/glut-3.7.6/progs/advanced/textmap.h b/lib/glut-3.7.6/progs/advanced/textmap.h deleted file mode 100644 index 8e9c0055e..000000000 --- a/lib/glut-3.7.6/progs/advanced/textmap.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef TEXTMAPDEF -#define TEXTMAPDEF - -#define LETTER_INDEX 1 - -typedef struct texchardesc { - float movex; /* advance */ - int haveimage; - float llx, lly; /* geometry box */ - float urx, ury; - float tllx, tlly; /* texture box */ - float turx, tury; - float data[3 * 8]; -} texchardesc; - -typedef struct texfnt { - short charmin, charmax; - short nchars; - float pixhigh; - texchardesc *chars; - short rasxsize, rasysize; - unsigned short *rasdata; -} texfnt; - -texfnt *readtexfont(char *name); -float texstrwidth(char *str); -int texfntinit(char *file); -void texfntstroke(char *s, float xoffset, float yoffset); - -#endif diff --git a/lib/glut-3.7.6/progs/advanced/textrim.c b/lib/glut-3.7.6/progs/advanced/textrim.c deleted file mode 100644 index 10cc3b835..000000000 --- a/lib/glut-3.7.6/progs/advanced/textrim.c +++ /dev/null @@ -1,285 +0,0 @@ - -/* textrim.c - by David Blythe, SGI */ - -/* Trimming textures: demonstrates how alpha blending or alpha testing - can be used to "trim" the shape of textures to arbitrary shapes. - Alpha testing is generally cheaper than alpha blending, but - blending permits antialiased edges. */ - -/* Try: "textrim tree.rgb" where tree.rgb is a SGI .rgb file including - an alpha component. */ - -#include -#include -#include -#include -#include "texture.h" - -static float scale = 1.4; -static float transx, transy, rotx, roty; -static int ox = -1, oy = -1; -static int mot = 0; -#define PAN 1 -#define ROT 2 - -void -pan(int x, int y) -{ - transx += (x - ox) / 500.; - transy -= (y - oy) / 500.; - ox = x; - oy = y; - glutPostRedisplay(); -} - -void -rotate(int x, int y) -{ - rotx += x - ox; - if (rotx > 360.) - rotx -= 360.; - else if (rotx < -360.) - rotx += 360.; - roty += y - oy; - if (roty > 360.) - roty -= 360.; - else if (roty < -360.) - roty += 360.; - ox = x; - oy = y; - glutPostRedisplay(); -} - -void -motion(int x, int y) -{ - if (mot == PAN) - pan(x, y); - else if (mot == ROT) - rotate(x, y); -} - -void -mouse(int button, int state, int x, int y) -{ - if (state == GLUT_DOWN) { - switch (button) { - case GLUT_LEFT_BUTTON: - mot = PAN; - motion(ox = x, oy = y); - break; - case GLUT_MIDDLE_BUTTON: - mot = ROT; - motion(ox = x, oy = y); - break; - } - } else if (state == GLUT_UP) { - mot = 0; - } -} - -void -afunc(void) -{ - static int state; - if (state ^= 1) { - glAlphaFunc(GL_GREATER, .01); - glEnable(GL_ALPHA_TEST); - } else { - glDisable(GL_ALPHA_TEST); - } -} - -void -bfunc(void) -{ - static int state; - if (state ^= 1) { - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glEnable(GL_BLEND); - } else { - glDisable(GL_BLEND); - } -} - -void -up(void) -{ - scale += .1; -} - -void -down(void) -{ - scale -= .1; -} - -void -help(void) -{ - printf("Usage: textrim [image]\n"); - printf("'h' - help\n"); - printf("'a' - toggle alpha test\n"); - printf("'b' - toggle blend\n"); - printf("'UP' - scale up\n"); - printf("'DOWN' - scale down\n"); - printf("left mouse - pan\n"); - printf("middle mouse - rotate\n"); -} - -void -init(char *filename) -{ - static unsigned *image; - static int width, height, components; - if (filename) { - image = read_texture(filename, &width, &height, &components); - if (image == NULL) { - fprintf(stderr, "Error: Can't load image file \"%s\".\n", - filename); - exit(1); - } else { - printf("%d x %d image loaded\n", width, height); - } - if (components != 4) { - printf("must be an RGBA image\n"); - exit(1); - } - } else { - int i, j; - unsigned char *img; - components = 4; - width = height = 512; - image = (unsigned *) malloc(width * height * sizeof(unsigned)); - img = (unsigned char *) image; - for (j = 0; j < height; j++) - for (i = 0; i < width; i++) { - int w2 = width / 2, h2 = height / 2; - if (i & 32) - img[4 * (i + j * width) + 0] = 0xff; - else - img[4 * (i + j * width) + 1] = 0xff; - if (j & 32) - img[4 * (i + j * width) + 2] = 0xff; - if ((i - w2) * (i - w2) + (j - h2) * (j - h2) > 64 * 64 && - (i - w2) * (i - w2) + (j - h2) * (j - h2) < 300 * 300) - img[4 * (i + j * width) + 3] = 0xff; - } - - } - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexImage2D(GL_TEXTURE_2D, 0, components, width, - height, 0, GL_RGBA, GL_UNSIGNED_BYTE, - image); - glEnable(GL_TEXTURE_2D); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(50., 1., .1, 10.); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(0., 0., -5.5); - glClearColor(.25f, .25f, .25f, .25f); -} - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - glPushMatrix(); - glTranslatef(transx, transy, 0.f); - glRotatef(rotx, 0., 1., 0.); - glRotatef(roty, 1., 0., 0.); - glScalef(scale, scale, 0.); - glBegin(GL_POLYGON); - glTexCoord2f(0.0, 0.0); - glVertex2f(-1.0, -1.0); - glTexCoord2f(1.0, 0.0); - glVertex2f(1.0, -1.0); - glTexCoord2f(1.0, 1.0); - glVertex2f(1.0, 1.0); - glTexCoord2f(0.0, 1.0); - glVertex2f(-1.0, 1.0); - glEnd(); - glPopMatrix(); - glutSwapBuffers(); -} - -void -reshape(int w, int h) -{ - glViewport(0, 0, w, h); -} - -/* ARGSUSED1 */ -void -key(unsigned char key, int x, int y) -{ - switch (key) { - case 'A': - case 'a': - afunc(); - break; - case 'B': - case 'b': - bfunc(); - break; - case 'H': - case 'h': - help(); - break; - case '\033': - exit(0); - break; - default: - break; - } - glutPostRedisplay(); -} - -/* ARGSUSED1 */ -void -special(int key, int x, int y) -{ - switch (key) { - case GLUT_KEY_UP: - up(); - break; - case GLUT_KEY_DOWN: - down(); - break; - default: - return; - } - glutPostRedisplay(); -} - -void -menu(int value) -{ - key((unsigned char) value, 0, 0); -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); - (void) glutCreateWindow("textrim"); - init(argv[1]); - glutDisplayFunc(display); - glutKeyboardFunc(key); - glutSpecialFunc(special); - glutReshapeFunc(reshape); - glutMouseFunc(mouse); - glutMotionFunc(motion); - glutCreateMenu(menu); - glutAddMenuEntry("Toggle alpha testing", 'a'); - glutAddMenuEntry("Toggle alpha blending", 'b'); - glutAddMenuEntry("Quit", '\033'); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/advanced/textrim.dsp b/lib/glut-3.7.6/progs/advanced/textrim.dsp deleted file mode 100644 index 335b3b354..000000000 --- a/lib/glut-3.7.6/progs/advanced/textrim.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="textrim" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=textrim - 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 "textrim.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 "textrim.mak" CFG="textrim - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "textrim - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "textrim - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "textrim - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "textrim - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "textrim - Win32 Release" -# Name "textrim - Win32 Debug" -# Begin Source File - -SOURCE=.\textrim.c -# End Source File -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# Begin Source File - -SOURCE=.\texture.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced/texture.c b/lib/glut-3.7.6/progs/advanced/texture.c deleted file mode 100644 index c53763507..000000000 --- a/lib/glut-3.7.6/progs/advanced/texture.c +++ /dev/null @@ -1,245 +0,0 @@ - -/* texture.c - by David Blythe, SGI */ - -/* read_texture is a simplistic routine for reading an SGI .rgb image file. */ - -#include -#include -#include - -void -bwtorgba(unsigned char *b,unsigned char *l,int n) { - while(n--) { - l[0] = *b; - l[1] = *b; - l[2] = *b; - l[3] = 0xff; - l += 4; b++; - } -} - -void -rgbtorgba(unsigned char *r,unsigned char *g,unsigned char *b,unsigned char *l,int n) { - while(n--) { - l[0] = r[0]; - l[1] = g[0]; - l[2] = b[0]; - l[3] = 0xff; - l += 4; r++; g++; b++; - } -} - -void -rgbatorgba(unsigned char *r,unsigned char *g,unsigned char *b,unsigned char *a,unsigned char *l,int n) { - while(n--) { - l[0] = r[0]; - l[1] = g[0]; - l[2] = b[0]; - l[3] = a[0]; - l += 4; r++; g++; b++; a++; - } -} - -typedef struct _ImageRec { - unsigned short imagic; - unsigned short type; - unsigned short dim; - unsigned short xsize, ysize, zsize; - unsigned int min, max; - unsigned int wasteBytes; - char name[80]; - unsigned long colorMap; - FILE *file; - unsigned char *tmp, *tmpR, *tmpG, *tmpB; - unsigned long rleEnd; - unsigned int *rowStart; - int *rowSize; -} ImageRec; - -static void -ConvertShort(unsigned short *array, unsigned int length) { - unsigned short b1, b2; - unsigned char *ptr; - - ptr = (unsigned char *)array; - while (length--) { - b1 = *ptr++; - b2 = *ptr++; - *array++ = (b1 << 8) | (b2); - } -} - -static void -ConvertUint(unsigned *array, unsigned int length) { - unsigned int b1, b2, b3, b4; - unsigned char *ptr; - - ptr = (unsigned char *)array; - while (length--) { - b1 = *ptr++; - b2 = *ptr++; - b3 = *ptr++; - b4 = *ptr++; - *array++ = (b1 << 24) | (b2 << 16) | (b3 << 8) | (b4); - } -} - -static ImageRec *ImageOpen(char *fileName) -{ - union { - int testWord; - char testByte[4]; - } endianTest; - ImageRec *image; - int swapFlag; - int x; - - endianTest.testWord = 1; - if (endianTest.testByte[0] == 1) { - swapFlag = 1; - } else { - swapFlag = 0; - } - - image = (ImageRec *)malloc(sizeof(ImageRec)); - if (image == NULL) { - fprintf(stderr, "Out of memory!\n"); - exit(1); - } - if ((image->file = fopen(fileName, "rb")) == NULL) { - perror(fileName); - exit(1); - } - - fread(image, 1, 12, image->file); - - if (swapFlag) { - ConvertShort(&image->imagic, 6); - } - - image->tmp = (unsigned char *)malloc(image->xsize*256); - image->tmpR = (unsigned char *)malloc(image->xsize*256); - image->tmpG = (unsigned char *)malloc(image->xsize*256); - image->tmpB = (unsigned char *)malloc(image->xsize*256); - if (image->tmp == NULL || image->tmpR == NULL || image->tmpG == NULL || - image->tmpB == NULL) { - fprintf(stderr, "Out of memory!\n"); - exit(1); - } - - if ((image->type & 0xFF00) == 0x0100) { - x = image->ysize * image->zsize * (int) sizeof(unsigned); - image->rowStart = (unsigned *)malloc(x); - image->rowSize = (int *)malloc(x); - if (image->rowStart == NULL || image->rowSize == NULL) { - fprintf(stderr, "Out of memory!\n"); - exit(1); - } - image->rleEnd = 512 + (2 * x); - fseek(image->file, 512, SEEK_SET); - fread(image->rowStart, 1, x, image->file); - fread(image->rowSize, 1, x, image->file); - if (swapFlag) { - ConvertUint(image->rowStart, x/(int) sizeof(unsigned)); - ConvertUint((unsigned *)image->rowSize, x/(int) sizeof(int)); - } - } - return image; -} - -static void -ImageClose(ImageRec *image) { - fclose(image->file); - free(image->tmp); - free(image->tmpR); - free(image->tmpG); - free(image->tmpB); - free(image); -} - -static void -ImageGetRow(ImageRec *image, unsigned char *buf, int y, int z) { - unsigned char *iPtr, *oPtr, pixel; - int count; - - if ((image->type & 0xFF00) == 0x0100) { - fseek(image->file, (long) image->rowStart[y+z*image->ysize], SEEK_SET); - fread(image->tmp, 1, (unsigned int)image->rowSize[y+z*image->ysize], - image->file); - - iPtr = image->tmp; - oPtr = buf; - for (;;) { - pixel = *iPtr++; - count = (int)(pixel & 0x7F); - if (!count) { - return; - } - if (pixel & 0x80) { - while (count--) { - *oPtr++ = *iPtr++; - } - } else { - pixel = *iPtr++; - while (count--) { - *oPtr++ = pixel; - } - } - } - } else { - fseek(image->file, 512+(y*image->xsize)+(z*image->xsize*image->ysize), - SEEK_SET); - fread(buf, 1, image->xsize, image->file); - } -} - -unsigned * -read_texture(char *name, int *width, int *height, int *components) { - unsigned *base, *lptr; - unsigned char *rbuf, *gbuf, *bbuf, *abuf; - ImageRec *image; - int y; - - image = ImageOpen(name); - - if(!image) - return NULL; - (*width)=image->xsize; - (*height)=image->ysize; - (*components)=image->zsize; - base = (unsigned *)malloc(image->xsize*image->ysize*sizeof(unsigned)); - rbuf = (unsigned char *)malloc(image->xsize*sizeof(unsigned char)); - gbuf = (unsigned char *)malloc(image->xsize*sizeof(unsigned char)); - bbuf = (unsigned char *)malloc(image->xsize*sizeof(unsigned char)); - abuf = (unsigned char *)malloc(image->xsize*sizeof(unsigned char)); - if(!base || !rbuf || !gbuf || !bbuf) - return NULL; - lptr = base; - for(y=0; yysize; y++) { - if(image->zsize>=4) { - ImageGetRow(image,rbuf,y,0); - ImageGetRow(image,gbuf,y,1); - ImageGetRow(image,bbuf,y,2); - ImageGetRow(image,abuf,y,3); - rgbatorgba(rbuf,gbuf,bbuf,abuf,(unsigned char *)lptr,image->xsize); - lptr += image->xsize; - } else if(image->zsize==3) { - ImageGetRow(image,rbuf,y,0); - ImageGetRow(image,gbuf,y,1); - ImageGetRow(image,bbuf,y,2); - rgbtorgba(rbuf,gbuf,bbuf,(unsigned char *)lptr,image->xsize); - lptr += image->xsize; - } else { - ImageGetRow(image,rbuf,y,0); - bwtorgba(rbuf,(unsigned char *)lptr,image->xsize); - lptr += image->xsize; - } - } - ImageClose(image); - free(rbuf); - free(gbuf); - free(bbuf); - free(abuf); - - return (unsigned *) base; -} diff --git a/lib/glut-3.7.6/progs/advanced/texture.h b/lib/glut-3.7.6/progs/advanced/texture.h deleted file mode 100644 index c1e720c88..000000000 --- a/lib/glut-3.7.6/progs/advanced/texture.h +++ /dev/null @@ -1,7 +0,0 @@ - -/* texture.h - by David Blythe, SGI */ - -/* Simple SGI .rgb image file loader routine. */ - -unsigned * -read_texture(char *name, int *width, int *height, int *components); diff --git a/lib/glut-3.7.6/progs/advanced/texwinalign.c b/lib/glut-3.7.6/progs/advanced/texwinalign.c deleted file mode 100644 index 18452c92e..000000000 --- a/lib/glut-3.7.6/progs/advanced/texwinalign.c +++ /dev/null @@ -1,354 +0,0 @@ - -/* 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. */ - -/* This program demonstrates how to use the texture matrix - and texture coordinate generation (texgen) to generate - window space texture coordinates for arbitrary 3D geometry. - The basic technique is to generate texture coordinates - directly matching the object coordinates and using the - texture matrix to mimic the viewport, projection, and - modelview transformations to convert the texture coordinates - into window coordinates identically to how the actual - object coordinates are transformed into window space. It - is important to have perspective correct texturing if you - want perspective projections to look right. */ - -#include -#include - -GLfloat lightDiffuse[] = {1.0, 0.0, 0.0, 1.0}; /* Red diffuse light. */ -GLfloat lightPosition[] = {1.0, 1.0, 1.0, 0.0}; /* Infinite light location. */ - -GLfloat n[6][3] = { /* Normals for the 6 faces of a cube. */ - {-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} }; -GLint faces[6][4] = { /* Vertex indices for the 6 faces of a cube. */ - {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]; /* Will be filled in with X,Y,Z vertexes. */ - -GLfloat angle = -20.0; -int animating = 1; - -#define TEX_WIDTH 16 -#define TEX_HEIGHT 16 - -/* Nice circle texture tiling pattern. */ -static char *circles[] = { - "....xxxx........", - "..xxxxxxxx......", - ".xxxxxxxxxx.....", - ".xxx....xxx.....", - "xxx......xxx....", - "xxx......xxx....", - "xxx......xxx....", - "xxx......xxx....", - ".xxx....xxx.....", - ".xxxxxxxxxx.....", - "..xxxxxxxx......", - "....xxxx........", - "................", - "................", - "................", - "................", -}; - -/* Nice grid texture tiling pattern. */ -static char *grid[] = { - "..............xx", - "..............xx", - "..............xx", - "..............xx", - "..............xx", - "..............xx", - "..............xx", - "..............xx", - "..............xx", - "..............xx", - "..............xx", - "..............xx", - "..............xx", - "..............xx", - "xxxxxxxxxxxxxxxx", - "xxxxxxxxxxxxxxxx", -}; - -static void -makeTexture(char *pattern[]) -{ - GLubyte floorTexture[TEX_WIDTH][TEX_HEIGHT][3]; - GLubyte *loc; - int s, t; - - /* Setup RGB image for the texture. */ - loc = (GLubyte*) floorTexture; - for (t = 0; t < TEX_HEIGHT; t++) { - for (s = 0; s < TEX_WIDTH; s++) { - if (pattern[t][s] == 'x') { - /* Nice green. */ - loc[0] = 0x6f; - loc[1] = 0x8f; - loc[2] = 0x1f; - } else { - /* Light gray. */ - loc[0] = 0xaa; - loc[1] = 0xaa; - loc[2] = 0xaa; - } - loc += 3; - } - } - - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexImage2D(GL_TEXTURE_2D, 0, 3, TEX_WIDTH, TEX_HEIGHT, 0, - GL_RGB, GL_UNSIGNED_BYTE, floorTexture); -} - -void -drawBox(void) -{ - int i; - - for (i = 0; i < 6; i++) { - glBegin(GL_QUADS); - 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(); - } -} - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glPushMatrix(); - glRotatef(angle, 0.0, 0.0, 1.0); - drawBox(); - glPopMatrix(); - glutSwapBuffers(); -} - -int windowWidth; -int windowHeight; -int slideX = 0, slideY = 0; - -void -configTextureMatrix(void) -{ - glMatrixMode(GL_TEXTURE); - glLoadIdentity(); - /* Shift texture in pixel units (slideX,slideY). You could use this - to copensate for a viewport origin different from the window - origin. */ - glTranslatef(slideX/(GLfloat)TEX_WIDTH, - slideY/(GLfloat)TEX_HEIGHT, - 0.0); - /* Scale based on the window size in pixel. */ - glScalef(windowWidth/(GLfloat)TEX_WIDTH, - windowHeight/(GLfloat)TEX_HEIGHT, - 1.0); - /* Mimic the scene's projection matrix setup. */ - gluPerspective( /* field of view in degree */ 40.0, - /* aspect ratio */ 1.0, - /* Z near */ 1.0, /* Z far */ 10.0); - /* Mimic the scene's view matrix setup. */ - gluLookAt(0.0, 0.0, 5.0, /* eye is at (0,0,5) */ - 0.0, 0.0, 0.0, /* center is at (0,0,0) */ - 0.0, 1.0, 0.); /* up is in positive Y direction */ - /* Mimic the scene's model matrix setup. */ - /* Adjust cube position to be aesthetic angle. */ - glTranslatef(0.0, 0.0, -1.0); - glRotatef(60, 1.0, 0.0, 0.0); - glRotatef(angle, 0.0, 0.0, 1.0); - /* Switch back to the modelview matrix. */ - glMatrixMode(GL_MODELVIEW); - -} - -void -idle(void) -{ - /* Slowly rotate object. */ - angle += 0.5; - if (angle > 360.0) { - angle -= 360.0; - } - /* Make sure the texture matrix mimics the changing - modelview matrix. */ - configTextureMatrix(); - glutPostRedisplay(); -} - -void -keyboard(unsigned char c, int x, int y) -{ - switch(c) { - case 27: /* Escape */ - exit(0); - break; - case 'h': - slideX--; - break; - case 'j': - slideY--; - break; - case 'k': - slideY++; - break; - case 'l': - slideX++; - break; - case 'r': - angle += 10; - break; - case 'a': - animating = !animating; - if (animating) { - glutIdleFunc(idle); - } else { - glutIdleFunc(NULL); - } - break; - } - configTextureMatrix(); - glutPostRedisplay(); -} - -void -reshape(int width, int height) -{ - windowWidth = width; - windowHeight = height; - glViewport(0, 0, width, height); - configTextureMatrix(); -} - -void -init(void) -{ - static GLfloat sPlane[4] = { 1.0, 0.0, 0.0, 0.0 }; - static GLfloat tPlane[4] = { 0.0, 1.0, 0.0, 0.0 }; - static GLfloat rPlane[4] = { 0.0, 0.0, 1.0, 0.0 }; - static GLfloat qPlane[4] = { 0.0, 0.0, 0.0, 1.0 }; - - /* Setup cube vertex data. */ - v[0][0] = v[1][0] = v[2][0] = v[3][0] = -1; - v[4][0] = v[5][0] = v[6][0] = v[7][0] = 1; - v[0][1] = v[1][1] = v[4][1] = v[5][1] = -1; - v[2][1] = v[3][1] = v[6][1] = v[7][1] = 1; - v[0][2] = v[3][2] = v[4][2] = v[7][2] = 1; - v[1][2] = v[2][2] = v[5][2] = v[6][2] = -1; - - /* Use depth buffering for hidden surface elimination. */ - glEnable(GL_DEPTH_TEST); - - /* Enable a single OpenGL light. */ - glLightfv(GL_LIGHT0, GL_DIFFUSE, lightDiffuse); - glLightfv(GL_LIGHT0, GL_POSITION, lightPosition); - glEnable(GL_LIGHT0); - - /* Setup the view of the cube. */ - glMatrixMode(GL_PROJECTION); - gluPerspective( /* field of view in degree */ 40.0, - /* aspect ratio */ 1.0, - /* Z near */ 1.0, /* Z far */ 10.0); - glMatrixMode(GL_MODELVIEW); - gluLookAt(0.0, 0.0, 5.0, /* eye is at (0,0,5) */ - 0.0, 0.0, 0.0, /* center is at (0,0,0) */ - 0.0, 1.0, 0.); /* up is in positive Y direction */ - - /* Texgen that maps object coordinates directly to texture - coordinates. */ - glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - glTexGeni(GL_Q, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - glTexGenfv(GL_S, GL_OBJECT_PLANE, sPlane); - glTexGenfv(GL_T, GL_OBJECT_PLANE, tPlane); - glTexGenfv(GL_R, GL_OBJECT_PLANE, rPlane); - glTexGenfv(GL_Q, GL_OBJECT_PLANE, qPlane); - glEnable(GL_TEXTURE_GEN_S); - glEnable(GL_TEXTURE_GEN_T); - glEnable(GL_TEXTURE_GEN_R); - glEnable(GL_TEXTURE_GEN_Q); - - /* Enable texturing. Perspective correct texturing is - important to this demo! */ - glEnable(GL_TEXTURE_2D); - glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); - - /* Adjust cube position to be aesthetic orientation. */ - glTranslatef(0.0, 0.0, -1.0); - glRotatef(60, 1.0, 0.0, 0.0); -} - -void -menu(int selection) -{ - switch (selection) { - case 1: - glEnable(GL_LIGHTING); - glutPostRedisplay(); - break; - case 2: - glDisable(GL_LIGHTING); - glutPostRedisplay(); - break; - case 3: - keyboard('a', 0, 0); - break; - case 4: - makeTexture(circles); - break; - case 5: - makeTexture(grid); - break; - case 666: - exit(0); - } -} - -void -visibility(int state) -{ - if (state == GLUT_VISIBLE) { - if (animating) { - glutIdleFunc(idle); - } - } else { - glutIdleFunc(NULL); - } -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); - glutCreateWindow("window space aligned textures"); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glutKeyboardFunc(keyboard); - glutVisibilityFunc(visibility); - init(); - makeTexture(grid); - glutCreateMenu(menu); - glutAddMenuEntry("Enable lighting", 1); - glutAddMenuEntry("Disable lighting", 2); - glutAddMenuEntry("Animating", 3); - glutAddMenuEntry("Circles", 4); - glutAddMenuEntry("Grid", 5); - glutAddMenuEntry("Quit", 666); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/advanced/texwinalign.dsp b/lib/glut-3.7.6/progs/advanced/texwinalign.dsp deleted file mode 100644 index 894fb24e8..000000000 --- a/lib/glut-3.7.6/progs/advanced/texwinalign.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="texwinalign" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=texwinalign - 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 "texwinalign.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 "texwinalign.mak" CFG="texwinalign - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "texwinalign - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "texwinalign - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "texwinalign - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "texwinalign - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "texwinalign - Win32 Release" -# Name "texwinalign - Win32 Debug" -# Begin Source File - -SOURCE=.\texwinalign.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced/tvertex.c b/lib/glut-3.7.6/progs/advanced/tvertex.c deleted file mode 100644 index 9211fd37e..000000000 --- a/lib/glut-3.7.6/progs/advanced/tvertex.c +++ /dev/null @@ -1,281 +0,0 @@ - -/* tvertex.c - by David Blythe (with help from Mark Kilgard), SGI */ - -/* T-vertex artifacts example. The moral: Avoid vertex edge junctions that - make a T-shape. */ - -#include -#include -#include -#include - -static float scale = 1.; -static float transx = 0, transy = 0; -static float rotx = 29, roty = -21; /* Initially askew. */ -static int ox = -1, oy = -1; -static int show_t = 1; -static int mot; -#define PAN 1 -#define ROT 2 - -void -pan(int x, int y) -{ - transx += (x - ox) / 500.; - transy -= (y - oy) / 500.; - ox = x; - oy = y; - glutPostRedisplay(); -} - -void -rotate(int x, int y) -{ - rotx += x - ox; - if (rotx > 360.) - rotx -= 360.; - else if (rotx < -360.) - rotx += 360.; - roty += y - oy; - if (roty > 360.) - roty -= 360.; - else if (roty < -360.) - roty += 360.; - ox = x; - oy = y; - glutPostRedisplay(); -} - -void -motion(int x, int y) -{ - if (mot == PAN) - pan(x, y); - else if (mot == ROT) - rotate(x, y); -} - -void -mouse(int button, int state, int x, int y) -{ - if (state == GLUT_DOWN) { - switch (button) { - case GLUT_LEFT_BUTTON: - mot = PAN; - motion(ox = x, oy = y); - break; - case GLUT_MIDDLE_BUTTON: - mot = ROT; - motion(ox = x, oy = y); - break; - } - } else if (state == GLUT_UP) { - mot = 0; - } -} - -void -toggle_t(void) -{ - show_t ^= 1; -} - -void -wire(void) -{ - static int w; - - if (w ^= 1) - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - else - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); -} - -void -light(void) -{ - static int l = 1; - - if (l ^= 1) - glEnable(GL_LIGHTING); - else - glDisable(GL_LIGHTING); -} - -void -up(void) -{ - scale += .1; -} - -void -down(void) -{ - scale -= .1; -} - -void -help(void) -{ - printf("Usage: tvertex\n"); - printf("'h' - help\n"); - printf("'l' - toggle lighting\n"); - printf("'t' - toggle T vertex\n"); - printf("'w' - toggle wireframe\n"); - printf("'UP' - scale up\n"); - printf("'DOWN' - scale down\n"); - printf("left mouse - pan\n"); - printf("middle mouse - rotate\n"); -} - -void -init(void) -{ - GLfloat pos[4] = - {0.0, 0.0, 1.0, 1.0}; - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(50., 1., .1, 10.); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(0., 0., -3.5); - - /* The default light is "infinite"; a local light is important to ensure - varying lighting color calculations at the vertices. */ - glLightfv(GL_LIGHT0, GL_POSITION, pos); - - glEnable(GL_LIGHT0); - glEnable(GL_LIGHTING); -} - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - glPushMatrix(); - glTranslatef(transx, transy, 0.f); - glRotatef(rotx, 0., 1., 0.); - glRotatef(roty, 1., 0., 0.); - glScalef(scale, scale, 1.); - if (show_t) { - glBegin(GL_QUADS); - glVertex2f(-1., 0.); - glVertex2f(0., 0.); - glVertex2f(0., 1.); - glVertex2f(-1., 1.); - - glVertex2f(0., 0.); - glVertex2f(1., 0.); - glVertex2f(1., 1.); - glVertex2f(0., 1.); - - glVertex2f(-1., -1.); - glVertex2f(1., -1.); - glVertex2f(1., 0.); - glVertex2f(-1., 0.); - glEnd(); - } else { - glBegin(GL_QUADS); - glVertex2f(-1., 0.); - glVertex2f(0., 0.); - glVertex2f(0., 1.); - glVertex2f(-1., 1.); - - glVertex2f(0., 0.); - glVertex2f(1., 0.); - glVertex2f(1., 1.); - glVertex2f(0., 1.); - - glVertex2f(-1., -1.); - glVertex2f(0., -1.); - glVertex2f(0., 0.); - glVertex2f(-1., 0.); - - glVertex2f(0., -1.); - glVertex2f(1., -1.); - glVertex2f(1., 0.); - glVertex2f(0., 0.); - glEnd(); - } - glPopMatrix(); - glutSwapBuffers(); -} - -void -reshape(int w, int h) -{ - glViewport(0, 0, w, h); -} - -/* ARGSUSED1 */ -void -key(unsigned char key, int x, int y) -{ - switch (key) { - case 'l': - light(); - break; - case 't': - toggle_t(); - break; - case 'w': - wire(); - break; - case 'h': - help(); - break; - case '\033': - exit(0); - break; - default: - return; - } - glutPostRedisplay(); -} - -/* ARGSUSED1 */ -void -special(int key, int x, int y) -{ - switch (key) { - case GLUT_KEY_UP: - up(); - break; - case GLUT_KEY_DOWN: - down(); - break; - default: - return; - } - glutPostRedisplay(); -} - -void -menu(int value) -{ - key((unsigned char) value, 0, 0); -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); - (void) glutCreateWindow("T vertex artifact demo"); - init(); - glutDisplayFunc(display); - glutKeyboardFunc(key); - glutSpecialFunc(special); - glutReshapeFunc(reshape); - glutMouseFunc(mouse); - glutMotionFunc(motion); - glutCreateMenu(menu); - glutAddMenuEntry("Toggle T vertex", 't'); - glutAddMenuEntry("Toggle wireframe/solid", 'w'); - glutAddMenuEntry("Toggle lighting", 'l'); - glutAddMenuEntry("Quit", '\033'); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/advanced/tvertex.dsp b/lib/glut-3.7.6/progs/advanced/tvertex.dsp deleted file mode 100644 index 4086336a8..000000000 --- a/lib/glut-3.7.6/progs/advanced/tvertex.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="tvertex" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=tvertex - 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 "tvertex.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 "tvertex.mak" CFG="tvertex - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "tvertex - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "tvertex - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "tvertex - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "tvertex - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "tvertex - Win32 Release" -# Name "tvertex - Win32 Debug" -# Begin Source File - -SOURCE=.\tvertex.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced/videoresize.c b/lib/glut-3.7.6/progs/advanced/videoresize.c deleted file mode 100644 index b78b1e4c9..000000000 --- a/lib/glut-3.7.6/progs/advanced/videoresize.c +++ /dev/null @@ -1,617 +0,0 @@ - -/* 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. */ - -/* This demo shows off InfiniteReality's "dynamic video resize" (DVR) - capability. Dynamic video resizing let's you maintain a constant frame - rate even when the view becomes limited by your hardware's pixel fill - rate. The idea is simple: Draw the fill-limited frame into a smaller - area (ie, touch less pixels) and then have the video hardware "zoom" up - the image to fill the video screen. This trick does require special - hardware. - - As written with no command line options, this demo works well on a 1RM - InfiniteReality. It keeps a scene containing colored large orbs that - rotate around the viewer at a constant 60 frames/sec, even though the - number of viewable orbs is changing (hence the required fullscreen pixel - fill rate is changing too). The demo adapts the rendered image size and - video resizing based on the last frame to keep a constant frame rate. */ - -/**************************************************************** - -Command line arguments: - - -window ... run in a window instead of full screen and will not use - hardware resizing even if the hardware supports it. Good for - demos. - - -novidresize ... start without using video resize hardware even though - the system might really support video resizing. - - -debug ... output frame size to stdout. - - -target # ... sets the target frame rate in increments of 60th of - a second; the default is 1. - - -twosnaps ... sample the last frame rate as the average of the last - two frames; the default is to simply use the last frame. - - -nice ... better tesselate the orbs; nice if you have transformation - rate to burn (ie, use an InfiniteReality). - - -orbs # ... an initial number of orbs to populate the viewing space; - the default is 80. - -Example command lines: - - Because this program's behavior depends on adapting to the speed of the - system it is running at, a good demonstration of this program may depend - on the system performance. Adjust the command line options accordingly, - particularly -target and -orbs. - - InfiniteReality (1RM) ... "videoresize" - - (For the hardware listed below, you won't get actual video resizing - since the hardware lacks the support.) - - Indigo^2 XL 200Mhz ... "videoresize -geometry 800x600 -target 5 -orbs 40 -window" - -Key controls: - - ESC or q ... exit the demo. - - n ... disable dynamic video resizing. - - r ... enable dynamic video resizing (the default if hardware video - resizing is detected; otherwise no video resizing is the - default). - - NOTE: you can enable dynamic video resizing even without the - hardware and the demo will show you how the rendered area would - vary as if the feature were supported. - - h ... toggle use of hardware video resizing (only if in fullscreen - mode and the hardware supports the feature). - - m ... toggle display of the frame meter. Enabled by default. - - c ... toggle display of the cursor. Sometimes it is nice to see the - cursor when video resizing so that you can see the effect of the - video resizing since the cursor resizes too, but in general a - resizing cursor is quite distracting. The cursor is enabled if - hardware video resizing is to be used. - - Up arrow ... add 10 more orbs. - - Down arrow ... subtract 10 less orbs. - - Spacebar ... regenerate the set of viewing orbs. - - Right arrow ... increase rightward rotation. - - Left arrow ... increase rightward rotation. - -Frame meter: - - The frame meter shows how long each frame takes to render. It - operates differently depending on if video resizing is being - demonstrated or not. - - The meter line is BLUE when video resizing is not being demonstrated. - - When video resizing is being demonstrated, a GREEN meter line - indicates the frame is being shown at full (non-resized) resolution. - YELLOW indicates the frame is being video resized. RED indicates the - frame is being resized so much that dropping a frame is better than - the resulting poor resize quality (the demo won't zoom anymore than 8 - to 1). A smaller MAGENTA line shows a calculation of the - "unadjusted" frame rate for the displayed scene. When the MAGENTA - line is longer than the base line, it is showing a relative measure - of how much resizing was needed to keep the frame at a sustained - frame rate. - -Bugs: - - This program assumes a frame rate of 60 Hz. - - This program should use InfiniteReality's SGIX_instruments - extension for better fill rate measurement. - -*****************************************************************/ - -#include -#include -#include -#include -#include -#if !defined(_WIN32) -#include -#else -#define lrand48() (0) -#define srand48(x) (0) -#define getpid() (0) -#endif - -#define OVERLOAD 0 -#define ZOOMED 1 -#define UNZOOMED 2 -#define STATIC 3 -GLfloat state_colors[4][3] = -{ - {1.0, 0.0, 0.0}, - {0.8, 0.8, 0.0}, - {0.0, 0.7, 0.0}, - {0.3, 0.3, 0.8}, -}; -int state; - -extern void sphere(int level); - -GLdouble angle, speed = 0.5; - -GLfloat light0_ambient[] = -{0.1, 0.1, 0.1, 1.0}; -GLfloat light0_diffuse[] = -{0.5, 0.5, 0.5, 1.0}; -GLfloat light0_position[] = -{0.0, 0.0, 0.0, 1.0}; - -typedef struct { - GLfloat offset; - GLfloat distance; - GLfloat size; - GLfloat *color; -} Orb; - -Orb *orbs = NULL; -int num_orbs = 80; /* Good default for 1 RM InfiniteReality. */ -int fullscreen = 1; -int debug = 0; -int video_resizing = 1; -int hw_video_resizing = 1; /* Assume we have it until told otherwise. */ -int hw_exists = 0; -int frame_time = 15; -int sphere_quality = 1; -int max_w, max_h; -GLfloat W, H; -int delta_w_resize = 1, delta_h_resize = 1; -GLfloat target_frame_time = 1000.0 / 60.0; -int show_cursor = 1, show_meter = 1; - -#define NUM_SNAPS 2 -int snap[NUM_SNAPS] = -{0}; -int num_snaps = 1; -int frame = 0; - -GLfloat color[][3] = -{ - {0.0, 0.5, 0.0}, - {0.5, 0.5, 0.0}, - {1.0, 0.0, 0.5}, - {0.0, 1.0, 0.5}, - {1.0, 0.0, 0.0}, - {1.0, 0.0, 1.0}, - {0.0, 0.0, 0.8}, - {0.0, 0.2, 0.5}, - {1.0, 1.0, 0.0}, - {1.0, 1.0, 1.0}, - {0.3, 0.3, 0.3}, -}; -int num_colors = sizeof(color) / (sizeof(GLfloat) * 3); - -void -calculate_frame_rate(int delta) -{ - int sum, count, i; - - snap[frame] = delta; - frame += 1; - frame %= num_snaps; - - sum = 0; - count = 0; - for (i = 0; i < num_snaps; i++) { - if (snap[i] != 0) { - sum += snap[i]; - count++; - } - } - frame_time = sum / count; -} - -void -advancedAnimation(void) -{ - angle = (GLfloat) fmod(angle + speed, 360.0); - glutPostRedisplay(); -} - -void -resize(int w, int h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(50.0, (GLfloat) w / (GLfloat) h, 1.0, 100.0); - glMatrixMode(GL_MODELVIEW); -} - -void -reshape(int w, int h) -{ - max_w = w; - max_h = h; - W = w; - H = h; - resize(w, h); -} - -void -do_video_resize_logic(void) -{ - GLfloat frame_ratio, adjusted_area, dimension_scale; - GLfloat area; - int Wint, Hint; - - if (frame_time > (target_frame_time * 0.92)) { - /* Shrink case. */ - frame_ratio = (target_frame_time * 0.92) / frame_time; - area = W * H; - adjusted_area = area * frame_ratio; - dimension_scale = sqrt(adjusted_area) / sqrt(area); - W = dimension_scale * W; - H = dimension_scale * H; - if (W < max_w / 8 || H < max_h / 8) { - W = max_w / 8; - H = max_h / 8; - state = OVERLOAD; - } else { - state = ZOOMED; - } - Wint = (((int) W) / delta_w_resize) * delta_w_resize; - Hint = (((int) H) / delta_h_resize) * delta_h_resize; - if (video_resizing) { - if (hw_video_resizing) - glutVideoResize(0, 0, -Wint, -Hint); - resize(Wint, Hint); - } - } else if (frame_time < (target_frame_time * 0.82)) { - /* Grow case. */ - frame_ratio = (target_frame_time * 0.82) / frame_time; - area = W * H; - adjusted_area = area * frame_ratio; - dimension_scale = sqrt(adjusted_area) / sqrt(area); - - /* Be a bit conservative about our growth. As Allan Greenspan would say, - "You don't want to overheat the economy; put on the brakes." */ - dimension_scale = (dimension_scale - 1.0) * 0.75 + 1.0; - if (dimension_scale > 1.5) { - dimension_scale = 1.5; - } - W = dimension_scale * W; - H = dimension_scale * H; - if (W > max_w || H > max_h) { - W = max_w; - H = max_h; - state = UNZOOMED; - } else { - state = ZOOMED; - } - Wint = (((int) W) / delta_w_resize) * delta_w_resize; - Hint = (((int) H) / delta_h_resize) * delta_h_resize; - if (video_resizing) { - if (hw_video_resizing) - glutVideoResize(0, 0, -Wint, -Hint); - resize(Wint, Hint); - } - } else { - if (!hw_video_resizing) { - /* We keep the meter constant size, so we must keep restoring our - viewport. */ - Wint = (((int) W) / delta_w_resize) * delta_w_resize; - Hint = (((int) H) / delta_h_resize) * delta_h_resize; - glViewport(0, 0, Wint, Hint); - } - } - if (debug) - printf("%gx%g\n\n", W, H); -} - -void -display(void) -{ - int i, start, stop; - - if (video_resizing) - do_video_resize_logic(); - - start = glutGet(GLUT_ELAPSED_TIME); - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - gluLookAt(0.0, 0.0, 1.0, - 0.0, 0.0, 0.0, - 0.0, 1.0, 0.0); - glTranslatef(0.0, 0.0, -1.0); - - for (i = 0; i < num_orbs; i++) { - glPushMatrix(); - glRotatef(angle + orbs[i].offset, 0.0, 1.0, 0.0); - glTranslatef(0.0, 0.0, orbs[i].distance); - glScalef(orbs[i].size, orbs[i].size, orbs[i].size); - glColor3fv(orbs[i].color); - glCallList(1); - glPopMatrix(); - } - - if (show_meter) { - if (!hw_video_resizing) { - /* Make sure the meter stays constant size in window mode. */ - glViewport(0, 0, max_w, max_h); - } - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - gluOrtho2D(0, 3000, 0, 3000); - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); - - glDisable(GL_DEPTH_TEST); - glDisable(GL_LIGHTING); - - glColor3fv(state_colors[state]); - glRecti(100, 100, 100 + frame_time * 8, 200); - if (video_resizing) { - float render_area = W * H, full_area = max_w * max_h; - float advantage = sqrt(full_area / render_area); - - glColor3f(1.0, 0.0, 1.0); - glRecti(100, 140, 100 + frame_time * advantage * 8, 160); - } - glColor3f(1.0, 1.0, 1.0); - glBegin(GL_LINES); - for (i = 0; i < 21; i++) { - glVertex2f(100 + i * 16.6 * 8, 80); - glVertex2f(100 + i * 16.6 * 8, 220); - } - glEnd(); - - glPopMatrix(); - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - } - glFinish(); - stop = glutGet(GLUT_ELAPSED_TIME); - - glutSwapBuffers(); - - calculate_frame_rate(stop - start); -} - -void -visible(int vis) -{ - if (vis == GLUT_VISIBLE) - glutIdleFunc(advancedAnimation); - else - glutIdleFunc(NULL); -} - -void -set_cursor(int on) -{ - if (on) { - glutSetCursor(GLUT_CURSOR_INHERIT); - } else { - glutSetCursor(GLUT_CURSOR_NONE); - } -} - -void -generate_orbs(void) -{ - int i, r, angle, chance, delta, d; - - if (orbs) - free(orbs); - orbs = (Orb *) malloc(num_orbs * sizeof(Orb)); - - i = 0; - angle = 0; - while (i < num_orbs) { - angle += 37; - angle %= 360; - r = (int) lrand48(); - chance = abs(r % 360 - 180); - delta = chance - abs(angle - 180); - if (delta > 0) { - orbs[i].color = color[lrand48() % num_colors]; - orbs[i].offset = angle; - d = (r % 20) + (delta / 180.0) * 10; - orbs[i].distance = d + 3.0; - orbs[i].size = 1.4 * exp(d / 8.0) / exp(1.0); - i++; - } - } -} - -/* ARGSUSED */ -void -keyboard(unsigned char k, int x, int y) -{ - switch (k) { - case 27: - case 'q': - case 'Q': - exit(0); - break; - case 'R': - case 'r': - video_resizing = 1; - break; - case 'H': - case 'h': - if (hw_exists) { - hw_video_resizing = 1 - hw_video_resizing; - if (!hw_video_resizing) { - glutVideoResize(0, 0, max_w, max_h); - resize(max_w, max_h); - } - } - break; - case 'N': - case 'n': - video_resizing = 0; - if (hw_video_resizing) - glutVideoResize(0, 0, max_w, max_h); - resize(max_w, max_h); - state = STATIC; - break; - case 'D': - case 'd': - debug = 1; - break; - case 'M': - case 'm': - show_meter = 1 - show_meter; - break; - case ' ': - generate_orbs(); - break; - case 'C': - case 'c': - show_cursor = 1 - show_cursor; - set_cursor(show_cursor); - break; - } -} - -/* ARGSUSED */ -void -special(int k, int x, int y) -{ - switch (k) { - case GLUT_KEY_RIGHT: - speed -= 0.25; - break; - case GLUT_KEY_LEFT: - speed += 0.25; - break; - case GLUT_KEY_UP: - num_orbs += 10; - generate_orbs(); - break; - case GLUT_KEY_DOWN: - num_orbs -= 10; - generate_orbs(); - break; - } -} - -int -main(int argc, char **argv) -{ - int i; - - glutInit(&argc, argv); - for (i = 1; i < argc; i++) { - if (!strcmp(argv[i], "-orbs")) { - i++; - if (i >= argc) { - fprintf(stderr, "videoresize: need number of orbs\n"); - exit(1); - } - num_orbs = atoi(argv[i]); - if (num_orbs < 1) { - fprintf(stderr, "videoresize: number of orbs must be 1 or more\n"); - exit(1); - } - } else if (!strcmp(argv[i], "-target")) { - i++; - if (i >= argc) { - fprintf(stderr, "videoresize: need target number of frames\n"); - exit(1); - } - target_frame_time = atoi(argv[i]) * 1000.0 / 60.0; - if (target_frame_time <= 0.0) { - fprintf(stderr, "videoresize: target frames must be 1 or more\n"); - exit(1); - } - } else if (!strcmp(argv[i], "-novidresize")) { - hw_video_resizing = 0; - } else if (!strcmp(argv[i], "-debug")) { - debug = 1; - } else if (!strcmp(argv[i], "-window")) { - fullscreen = 0; - } else if (!strcmp(argv[i], "-twosnaps")) { - num_snaps = 2; - } else if (!strcmp(argv[i], "-nice")) { - sphere_quality = 2; - } else { - printf("usage: videoresize [-window] [-twosnaps] [-nice] [-target #] [-orbs #]\n"); - printf(" -target # = target number of frame intervals to stay under (default=%g)\n", target_frame_time); - printf(" -orbs # = number of orbs to randomly position (default=%d)\n", num_orbs); - printf(" -window = do not go fullscreen\n"); - printf(" -nice = use better tesselated spheres\n"); - printf(" -novidresize = even if videoresizing is supported, don't use it\n"); - printf(" -twosnaps = averages over last two frames instead of just estimating\n"); - printf(" based on the last frame\n"); - exit(1); - } - } - glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH | GLUT_MULTISAMPLE); - glutCreateWindow("Dynamic video resizing for constant frame rates"); - if (fullscreen) { - glutFullScreen(); - if (glutVideoResizeGet(GLUT_VIDEO_RESIZE_POSSIBLE)) { - delta_w_resize = glutVideoResizeGet(GLUT_VIDEO_RESIZE_WIDTH_DELTA); - delta_h_resize = glutVideoResizeGet(GLUT_VIDEO_RESIZE_HEIGHT_DELTA); - show_cursor = 0; - glutSetupVideoResizing(); - hw_exists = 1; - } else { - hw_video_resizing = 0; - } - } else { - hw_video_resizing = 0; - } - if (video_resizing) { - state = UNZOOMED; - } else { - state = STATIC; - } - glutReshapeFunc(reshape); - glDisable(GL_CULL_FACE); /* Makes us more fill limited. */ - glEnable(GL_LIGHT0); - glColorMaterial(GL_FRONT, GL_DIFFUSE); - glEnable(GL_COLOR_MATERIAL); - glEnable(GL_NORMALIZE); - glLightfv(GL_LIGHT0, GL_AMBIENT, light0_ambient); - glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_diffuse); - glLightfv(GL_LIGHT0, GL_POSITION, light0_position); - - glNewList(1, GL_COMPILE); - sphere(sphere_quality); - glEndList(); - - srand48(getpid() * 16 + glutGet(GLUT_ELAPSED_TIME)); - generate_orbs(); - - glutDisplayFunc(display); - glutVisibilityFunc(visible); - glutKeyboardFunc(keyboard); - glutSpecialFunc(special); - set_cursor(show_cursor); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/advanced/videoresize.dsp b/lib/glut-3.7.6/progs/advanced/videoresize.dsp deleted file mode 100644 index 1fc4f307d..000000000 --- a/lib/glut-3.7.6/progs/advanced/videoresize.dsp +++ /dev/null @@ -1,92 +0,0 @@ -# Microsoft Developer Studio Project File - Name="videoresize" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=videoresize - 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 "videoresize.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 "videoresize.mak" CFG="videoresize - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "videoresize - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "videoresize - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "videoresize - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "videoresize - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "videoresize - Win32 Release" -# Name "videoresize - Win32 Debug" -# Begin Source File - -SOURCE=.\sphere.c -# End Source File -# Begin Source File - -SOURCE=.\videoresize.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced/vox.c b/lib/glut-3.7.6/progs/advanced/vox.c deleted file mode 100644 index bc20efb41..000000000 --- a/lib/glut-3.7.6/progs/advanced/vox.c +++ /dev/null @@ -1,892 +0,0 @@ -/** - * - * vox.c : GLUT example for volume rendering - * - * Author : Yusuf Attarwala - * SGI - Applications - * - * Mods by Mark Kilgard. - * - * cc vox.c -o vox -lglut -lGLU -lGL -lXmu -lXext -lX11 -lm - * - * Voxel Head is a simple volume rendering example using OpenGL 3d textures. - * This version has limited features (intentional), to keep the code simple. - * - * i.e. - there is no control for changing alpha values. - * - it just deals with one block of texture (no tiling) - * - there are no clipping planes - * - it only works with one data set, so it assumes that texture data - * is in powers of 2. - * - * Some of these features will be implemented in future releases. - * - * The technique to create polygonal slices thru voxel space is as - * follows: - * - * Instead of recomputing polygonal slices perpendicular to every - * viewing vector, it uses the same set of polygonal slices for a - * range of -45 to 45 degrees. Outside this range, it recomputes - * another set of slices and so on. - * - * These slices are then rendered back to front with 3d texture and - * blending enabled. - * - * It uses GLUT for handling events, windows etc. - * - * This program runs with good performance on RealityEngine, VTX, - * InfiniteReality, or Maximum IMPACT. In IRIX 6.2, a software - * implementation of OpenGL's 3D texture mapping extension is - * available, but performance is very poor. If you are on a slow - * machine, you can run "vox -sb" and still get a good feel for how - * the program performs volume rendering since you can see the 3D - * slices be rendered back to front with blending. - * - */ - -#include -#include -#ifndef _WIN32 -#include -#else -#define R_OK 04 /* Win32 doesn't define this */ -/* Win32 defines these, but with a leading _ */ -#define pclose _pclose -#define popen _popen -/* Win32 doesn't have a re-entrand rand() */ -#define rand_r(x) rand() -#endif -#include -#include - -#include - -#define ABS(a) (((a) >= 0) ? (a) : -(a)) -#define _XY 1 -#define _YZ 2 -#define _ZX 3 -#define _MXY 4 -#define _MYZ 5 -#define _MZX 6 - -/* pop up menu entries */ -#define SPIN_ON 1 -#define SPIN_OFF 2 -#define MENU_HELP 3 -#define MENU_EXIT 4 - -/* global variables */ - -int width, height; /* window width, height */ -float left, right, bottom, top, nnear, ffar; /* ortho, view volume */ -float vol_width, vol_height, vol_depth; /* volume dimensions */ -float bminx, bmaxx, bminy, bmaxy, bminz, bmaxz, bdiag; /* bounding box */ -int n_slices; /* number of slices */ -int tex3dSupported = 1; -float slice_poly[3][4][3]; -float slice_tcoord[3][4][3]; -float anglex, angley, anglez; - -unsigned char *voxels; - -void -readVoxelData(void) -{ - FILE *file; - int i, j, k, using_pipe; - unsigned char *vptr; - unsigned char *vp, *vx; - - /* see if the hardware supports 3d texture */ -#ifdef GL_EXT_texture3D - if (!glutExtensionSupported("GL_EXT_texture3D")) { - printf("\n==================================================================\n"); - printf("This hardware (%s) does not support 3d texture extentions\n", - (char *) (glGetString(GL_RENDERER))); - printf("==================================================================\n"); - - tex3dSupported = 0; - } -#else - printf("\n==================================================================\n"); - printf("Not API support for GL_EXT_texture3D extension when compiled.\n"); - printf("==================================================================\n"); -#endif - /* open vox.bin data file */ - if ((file = fopen("vox.bin", "r")) == NULL) { -#ifndef _WIN32 - if (!access("vox.bin.gz", R_OK)) { - if ((file = popen("gzcat vox.bin.gz", "r")) == NULL) { - fprintf(stderr, "cannot popen input file vox.bin.gz (missing gzcat?)\n"); - exit(1); - } - } else if (!access("vox.bin.Z", R_OK)) { - if ((file = popen("zcat vox.bin.Z", "r")) == NULL) { - fprintf(stderr, "cannot popen input file vox.bin.Z (missing zcat?)\n"); - exit(1); - } - } else { - fprintf(stderr, "cannot find vox.bin, vox.bin.gz, or vox.bin.Z\n"); - exit(1); - } - using_pipe = 1; -#else - fprintf(stderr, "cannot find vox.bin\n"); - exit(1); -#endif - } else { - using_pipe = 0; - } - vol_width = 128; /* hard coded for demo */ - vol_height = 128; - vol_depth = 64; - n_slices = 128; - - if (tex3dSupported) { - unsigned long size = (unsigned long) (vol_width * vol_height * vol_depth); - - vptr = (unsigned char *) malloc(size); - - fread(vptr, sizeof(char), size, file); - if (using_pipe) { - pclose(file); - } else { - fclose(file); - } - - /* size of voxels is twice as the size of vptr, to duplicate alpha value - = intensity */ - voxels = (unsigned char *) malloc(2 * size); - - /* for now duplicate, alpha value = intensity */ - vx = voxels; - vp = vptr; - for (i = 0; i < vol_width; i++) - for (j = 0; j < vol_height; j++) - for (k = 0; k < vol_depth; k++) { - *vx++ = *vp; - *vx++ = *vp++; - } - - free(vptr); - } - /* compute bounding box extents */ - - bminx = -(float) vol_width / 2.0; - bmaxx = (float) vol_width / 2.0; - bminy = -(float) vol_height / 2.0; - bmaxy = (float) vol_height / 2.0; - bminz = -(float) vol_depth / 2.0; - bmaxz = (float) vol_depth / 2.0; - - bdiag = sqrt((bmaxx) * (bmaxx) + (bmaxy) * (bmaxy) + (bmaxz) * (bmaxz)); - - /* compute view volume extents */ - - left = -1.1 * bdiag; - right = 1.1 * bdiag; - bottom = -1.1 * bdiag; - top = 1.1 * bdiag; - nnear = -1.0 * bdiag; - ffar = 2 * 1.1 * bdiag; - - /* define the polygon dimensions on which the texture will be mapped */ - /* xy plane */ - slice_poly[0][0][0] = -vol_width / 2.0; - slice_poly[0][0][1] = -vol_height / 2.0; - slice_poly[0][0][2] = 0.0; - - slice_poly[0][1][0] = vol_width / 2.0; - slice_poly[0][1][1] = -vol_height / 2.0; - slice_poly[0][1][2] = 0.0; - - slice_poly[0][2][0] = vol_width / 2.0; - slice_poly[0][2][1] = vol_height / 2.0; - slice_poly[0][2][2] = 0.0; - - slice_poly[0][3][0] = -vol_width / 2.0; - slice_poly[0][3][1] = vol_height / 2.0; - slice_poly[0][3][2] = 0.0; - - /* yz plane */ - slice_poly[1][0][0] = 0.0; - slice_poly[1][0][1] = -vol_height / 2.0; - slice_poly[1][0][2] = -vol_depth / 2.0; - - slice_poly[1][1][0] = 0.0; - slice_poly[1][1][1] = vol_height / 2.0; - slice_poly[1][1][2] = -vol_depth / 2.0; - - slice_poly[1][2][0] = 0.0; - slice_poly[1][2][1] = vol_height / 2.0; - slice_poly[1][2][2] = vol_depth / 2.0; - - slice_poly[1][3][0] = 0.0; - slice_poly[1][3][1] = -vol_height / 2.0; - slice_poly[1][3][2] = vol_depth / 2.0; - - /* zx plane */ - slice_poly[2][0][0] = -vol_width / 2.0; - slice_poly[2][0][1] = 0.0; - slice_poly[2][0][2] = -vol_depth / 2.0; - - slice_poly[2][1][0] = -vol_width / 2.0; - slice_poly[2][1][1] = 0.0; - slice_poly[2][1][2] = vol_depth / 2.0; - - slice_poly[2][2][0] = vol_width / 2.0; - slice_poly[2][2][1] = 0.0; - slice_poly[2][2][2] = vol_depth / 2.0; - - slice_poly[2][3][0] = vol_width / 2.0; - slice_poly[2][3][1] = 0.0; - slice_poly[2][3][2] = -vol_depth / 2.0; - - /* texture coordinates */ - - slice_tcoord[0][0][0] = 0.0; - slice_tcoord[0][0][1] = 0.0; - slice_tcoord[0][1][0] = 1.0; - slice_tcoord[0][1][1] = 0.0; - slice_tcoord[0][2][0] = 1.0; - slice_tcoord[0][2][1] = 1.0; - slice_tcoord[0][3][0] = 0.0; - slice_tcoord[0][3][1] = 1.0; - - slice_tcoord[1][0][1] = 0.0; - slice_tcoord[1][0][2] = 1.0; - slice_tcoord[1][1][1] = 1.0; - slice_tcoord[1][1][2] = 1.0; - slice_tcoord[1][2][1] = 1.0; - slice_tcoord[1][2][2] = 0.0; - slice_tcoord[1][3][1] = 0.0; - slice_tcoord[1][3][2] = 0.0; - - slice_tcoord[2][0][2] = 0.0; - slice_tcoord[2][0][0] = 0.0; - slice_tcoord[2][1][2] = 1.0; - slice_tcoord[2][1][0] = 0.0; - slice_tcoord[2][2][2] = 1.0; - slice_tcoord[2][2][0] = 1.0; - slice_tcoord[2][3][2] = 0.0; - slice_tcoord[2][3][0] = 1.0; - -} - -void -randomTick(void) -{ - static unsigned int seed = 0; - static int changeSeed = 25; - float fltran; - - if (changeSeed++ >= 25) { - seed++; - if (seed > 256) - seed = 0; - changeSeed = 0; - } - fltran = (float) (rand_r(&seed) / 30000.0); - - anglex = (anglex > 360.0) ? 0.0 : (anglex + fltran); - angley = (angley > 360.0) ? 0.0 : (angley + fltran); - anglez = (anglez > 360.0) ? 0.0 : (anglez + fltran); -} - -void -animate(void) -{ - randomTick(); - glutPostRedisplay(); -} - -void -printCheatSheet(void) -{ - printf("\n\n-------------------------\n"); - printf("OpenGL 3d texture example\n\n"); - - printf("Keyboard shortcuts\n"); - printf("s key : zoom out (small)\n"); - printf("l key : zoom in (large)\n"); - printf("x key : rotate about screen x\n"); - printf("y key : rotate about screen y\n"); - printf("z key : rotate about screen z\n"); - printf("esc key : quit\n"); -} - -void -menu(int choice) -{ - /* simple GLUT popup menu stuff */ - switch (choice) { - case SPIN_ON: - glutChangeToMenuEntry(1, "Random Spin OFF", SPIN_OFF); - glutIdleFunc(animate); - break; - case SPIN_OFF: - glutChangeToMenuEntry(1, "Random Spin ON", SPIN_ON); - glutIdleFunc(NULL); - break; - case MENU_HELP: - printCheatSheet(); - break; - case MENU_EXIT: - exit(0); - break; - } -} - -void -setMatrix(void) -{ - /* feel like using ortho projection */ - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho(left, right, bottom, top, nnear, ffar); - - /* boring view matrix */ - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -void -load3DTexture(void) -{ - printf("setting up 3d textures...\n"); - - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - -#ifdef GL_EXT_texture3D - glTexParameteri(GL_TEXTURE_3D_EXT, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_3D_EXT, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_3D_EXT, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_3D_EXT, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexParameteri(GL_TEXTURE_3D_EXT, GL_TEXTURE_WRAP_R_EXT, GL_REPEAT); - - glTexImage3DEXT(GL_TEXTURE_3D_EXT, 0, GL_LUMINANCE8_ALPHA8_EXT, - vol_width, vol_height, vol_depth, - 0, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, voxels); -#endif - - if (tex3dSupported) { - /* enable texturing, blending etc */ - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glEnable(GL_BLEND); - } - setMatrix(); -} - -void -init(void) -{ - /* angle of rotation about coordinate axes */ - anglex = angley = anglez = 0.0; -} - -void -invert4d(float from[4][4], float to[4][4]) -{ - - /* 4x4 matrix inversion routine */ - - float wtemp[4][8]; - register float m0, m1, m2, m3, s; - register float *r0, *r1, *r2, *r3, *rtemp; - - r0 = wtemp[0]; - r1 = wtemp[1]; - r2 = wtemp[2]; - r3 = wtemp[3]; - r0[0] = from[0][0]; /* build up [A][I] */ - r0[1] = from[0][1]; - r0[2] = from[0][2]; - r0[3] = from[0][3]; - r0[4] = 1.0; - r0[5] = 0.0; - r0[6] = 0.0; - r0[7] = 0.0; - r1[0] = from[1][0]; - r1[1] = from[1][1]; - r1[2] = from[1][2]; - r1[3] = from[1][3]; - r1[4] = 0.0; - r1[5] = 1.0; - r1[6] = 0.0; - r1[7] = 0.0; - r2[0] = from[2][0]; - r2[1] = from[2][1]; - r2[2] = from[2][2]; - r2[3] = from[2][3]; - r2[4] = 0.0; - r2[5] = 0.0; - r2[6] = 1.0; - r2[7] = 0.0; - r3[0] = from[3][0]; - r3[1] = from[3][1]; - r3[2] = from[3][2]; - r3[3] = from[3][3]; - r3[4] = 0.0; - r3[5] = 0.0; - r3[6] = 0.0; - r3[7] = 1.0; - if (r0[0] == 0.0) { /* swap rows if needed */ - if (r1[0] == 0.0) { - if (r2[0] == 0.0) { - if (r3[0] == 0.0) - goto singular; - rtemp = r0; - r0 = r3; - r3 = rtemp; - } else { - rtemp = r0; - r0 = r2; - r2 = rtemp; - } - } else { - rtemp = r0; - r0 = r1; - r1 = rtemp; - } - } - m1 = r1[0] / r0[0]; /* eliminate first variable */ - m2 = r2[0] / r0[0]; - m3 = r3[0] / r0[0]; - s = r0[1]; - r1[1] = r1[1] - m1 * s; - r2[1] = r2[1] - m2 * s; - r3[1] = r3[1] - m3 * s; - s = r0[2]; - r1[2] = r1[2] - m1 * s; - r2[2] = r2[2] - m2 * s; - r3[2] = r3[2] - m3 * s; - s = r0[3]; - r1[3] = r1[3] - m1 * s; - r2[3] = r2[3] - m2 * s; - r3[3] = r3[3] - m3 * s; - s = r0[4]; - if (s != 0.0) { - r1[4] = r1[4] - m1 * s; - r2[4] = r2[4] - m2 * s; - r3[4] = r3[4] - m3 * s; - } - s = r0[5]; - if (s != 0.0) { - r1[5] = r1[5] - m1 * s; - r2[5] = r2[5] - m2 * s; - r3[5] = r3[5] - m3 * s; - } - s = r0[6]; - if (s != 0.0) { - r1[6] = r1[6] - m1 * s; - r2[6] = r2[6] - m2 * s; - r3[6] = r3[6] - m3 * s; - } - s = r0[7]; - if (s != 0.0) { - r1[7] = r1[7] - m1 * s; - r2[7] = r2[7] - m2 * s; - r3[7] = r3[7] - m3 * s; - } - if (r1[1] == 0.0) { /* swap rows if needed */ - if (r2[1] == 0.0) { - if (r3[1] == 0.0) - goto singular; - rtemp = r1; - r1 = r3; - r3 = rtemp; - } else { - rtemp = r1; - r1 = r2; - r2 = rtemp; - } - } - m2 = r2[1] / r1[1]; /* eliminate second variable */ - m3 = r3[1] / r1[1]; - r2[2] = r2[2] - m2 * r1[2]; - r3[2] = r3[2] - m3 * r1[2]; - r3[3] = r3[3] - m3 * r1[3]; - r2[3] = r2[3] - m2 * r1[3]; - s = r1[4]; - if (s != 0.0) { - r2[4] = r2[4] - m2 * s; - r3[4] = r3[4] - m3 * s; - } - s = r1[5]; - if (s != 0.0) { - r2[5] = r2[5] - m2 * s; - r3[5] = r3[5] - m3 * s; - } - s = r1[6]; - if (s != 0.0) { - r2[6] = r2[6] - m2 * s; - r3[6] = r3[6] - m3 * s; - } - s = r1[7]; - if (s != 0.0) { - r2[7] = r2[7] - m2 * s; - r3[7] = r3[7] - m3 * s; - } - if (r2[2] == 0.0) { /* swap last 2 rows if needed */ - if (r3[2] == 0.0) - goto singular; - rtemp = r2; - r2 = r3; - r3 = rtemp; - } - m3 = r3[2] / r2[2]; /* eliminate third variable */ - r3[3] = r3[3] - m3 * r2[3]; - r3[4] = r3[4] - m3 * r2[4]; - r3[5] = r3[5] - m3 * r2[5]; - r3[6] = r3[6] - m3 * r2[6]; - r3[7] = r3[7] - m3 * r2[7]; - if (r3[3] == 0.0) - goto singular; - s = 1.0 / r3[3]; /* now back substitute row 3 */ - r3[4] = r3[4] * s; - r3[5] = r3[5] * s; - r3[6] = r3[6] * s; - r3[7] = r3[7] * s; - m2 = r2[3]; /* now back substitute row 2 */ - s = 1.0 / r2[2]; - r2[4] = s * (r2[4] - r3[4] * m2); - r2[5] = s * (r2[5] - r3[5] * m2); - r2[6] = s * (r2[6] - r3[6] * m2); - r2[7] = s * (r2[7] - r3[7] * m2); - m1 = r1[3]; - r1[4] = (r1[4] - r3[4] * m1); - r1[5] = (r1[5] - r3[5] * m1); - r1[6] = (r1[6] - r3[6] * m1); - r1[7] = (r1[7] - r3[7] * m1); - m0 = r0[3]; - r0[4] = (r0[4] - r3[4] * m0); - r0[5] = (r0[5] - r3[5] * m0); - r0[6] = (r0[6] - r3[6] * m0); - r0[7] = (r0[7] - r3[7] * m0); - m1 = r1[2]; /* now back substitute row 1 */ - s = 1.0 / r1[1]; - r1[4] = s * (r1[4] - r2[4] * m1); - r1[5] = s * (r1[5] - r2[5] * m1); - r1[6] = s * (r1[6] - r2[6] * m1); - r1[7] = s * (r1[7] - r2[7] * m1); - m0 = r0[2]; - r0[4] = (r0[4] - r2[4] * m0); - r0[5] = (r0[5] - r2[5] * m0); - r0[6] = (r0[6] - r2[6] * m0); - r0[7] = (r0[7] - r2[7] * m0); - m0 = r0[1]; /* now back substitute row 0 */ - s = 1.0 / r0[0]; - r0[4] = s * (r0[4] - r1[4] * m0); - r0[5] = s * (r0[5] - r1[5] * m0); - r0[6] = s * (r0[6] - r1[6] * m0); - r0[7] = s * (r0[7] - r1[7] * m0); - to[0][0] = r0[4]; /* copy results back */ - to[0][1] = r0[5]; - to[0][2] = r0[6]; - to[0][3] = r0[7]; - to[1][0] = r1[4]; - to[1][1] = r1[5]; - to[1][2] = r1[6]; - to[1][3] = r1[7]; - to[2][0] = r2[4]; - to[2][1] = r2[5]; - to[2][2] = r2[6]; - to[2][3] = r2[7]; - to[3][0] = r3[4]; - to[3][1] = r3[5]; - to[3][2] = r3[6]; - to[3][3] = r3[7]; - return; -singular: - printf("ERROR : non_invertable transform\n"); - return; -} - -void -normalize(float *xn, float *yn, float *zn) -{ - double denom; - - denom = sqrt((double) ((*xn * *xn) + (*yn * *yn) + (*zn * *zn))); - - *xn = *xn / denom; - *yn = *yn / denom; - *zn = *zn / denom; -} - -int -getViewAxis(void) -{ - float viewDir[3]; - float mat[4][4], vinv[4][4]; - float maxf, xy, yz, zx; - int im; - - /* out of 3 orthogonal set of planes in world coords, find out which one - has maximum angle from the line of sight. - - we will use these set of planes for creating polygonal slices thru the - voxel space */ - - glGetFloatv(GL_MODELVIEW_MATRIX, (GLfloat *) mat); - invert4d(mat, vinv); - - viewDir[0] = -vinv[2][0]; - viewDir[1] = -vinv[2][1]; - viewDir[2] = -vinv[2][2]; - - normalize(&viewDir[0], &viewDir[1], &viewDir[2]); - - xy = viewDir[2]; /* simplified because 0*xx + 0*yy + 1*zz */ - yz = viewDir[0]; - zx = viewDir[1]; - - maxf = ABS(xy); - im = (xy < 0.0) ? _XY : _MXY; - - if (maxf <= ABS(yz)) { - maxf = ABS(yz); - im = (yz < 0.0) ? _YZ : _MYZ; - } - if (maxf <= ABS(zx)) { - maxf = ABS(zx); - im = (zx < 0.0) ? _ZX : _MZX; - } - return (im); -} - -#define DRAW_SLICE \ - if (tex3dSupported) {\ - glBegin(GL_POLYGON);\ - for (p=0;p<4;p++) {\ - glTexCoord3fv(slice_tcoord[myaxis][p]);\ - glVertex3fv(slice_poly[myaxis][p]);\ - }\ - glEnd();\ - } \ - else {\ - glBegin(GL_LINE_LOOP);\ - for (p=0;p<4;p++){\ - glVertex3fv(slice_poly[myaxis][p]);\ - }\ - glEnd();\ - } - -void -drawScene(void) -{ - - int i, p; - float tc; - int viewAxis, myaxis; - int sign; - - static int myaxis_lut[] = - {0, 0, 1, 2, 0, 1, 2}; - - /* clear background, z buffer etc */ - glClear(GL_COLOR_BUFFER_BIT); - - glPushMatrix(); - - /* apply all the modeling transformations */ - glTranslatef(0.0, 0.0, -bdiag); - glRotatef(anglex, 1.0, 0.0, 0.0); - glRotatef(angley, 0.0, 1.0, 0.0); - glRotatef(anglez, 0.0, 0.0, 1.0); - - /* getViewAxis(), determines which set of polygons need to be used for - texturing, depending upon the viewing direction */ - - viewAxis = getViewAxis(); - myaxis = myaxis_lut[viewAxis]; - - glColor3f(1.0, 1.0, 1.0); - -#ifdef GL_EXT_texture3D - if (tex3dSupported) - glEnable(GL_TEXTURE_3D_EXT); -#endif - - switch (viewAxis) { - case _XY: - case _MXY: - - sign = (viewAxis == _XY) ? 1 : -1; - tc = (viewAxis == _XY) ? 0.0 : 1.0; - - glTranslatef(0.0, 0.0, -sign * vol_depth / 2.0); - for (i = 0; i < n_slices; i++) { - - slice_tcoord[0][0][2] = slice_tcoord[0][1][2] = - slice_tcoord[0][2][2] = slice_tcoord[0][3][2] = tc; - - tc += sign * 1.0 / n_slices; - glTranslatef(0.0, 0.0, sign * vol_depth / (n_slices + 1.0)); - - DRAW_SLICE; - } - break; - case _YZ: - case _MYZ: - - sign = (viewAxis == _YZ) ? 1 : -1; - tc = (viewAxis == _YZ) ? 0.0 : 1.0; - - glTranslatef(-sign * vol_width / 2.0, 0.0, 0.0); - for (i = 0; i < n_slices; i++) { - - slice_tcoord[1][0][0] = slice_tcoord[1][1][0] = - slice_tcoord[1][2][0] = slice_tcoord[1][3][0] = tc; - - tc += sign * 1.0 / n_slices; - glTranslatef(sign * vol_width / (n_slices + 1.0), 0.0, 0.0); - - DRAW_SLICE; - } - break; - case _ZX: - case _MZX: - - sign = (viewAxis == _ZX) ? 1 : -1; - tc = (viewAxis == _ZX) ? 0.0 : 1.0; - - glTranslatef(0.0, -sign * vol_height / 2.0, 0.0); - for (i = 0; i < n_slices; i++) { - - slice_tcoord[2][0][1] = slice_tcoord[2][1][1] = - slice_tcoord[2][2][1] = slice_tcoord[2][3][1] = tc; - - tc += sign * 1.0 / n_slices; - glTranslatef(0.0, sign * vol_height / (n_slices + 1.0), 0.0); - - DRAW_SLICE; - - } - break; - } - -#ifdef GL_EXT_texture3D - if (tex3dSupported) - glDisable(GL_TEXTURE_3D_EXT); -#endif - - glPopMatrix(); - - glutSwapBuffers(); -} - -void -resize(int w, int h) -{ - /* things you do, when the user resizes the window */ - - width = w; - height = h; - - glViewport(0, 0, w, h); - setMatrix(); -} - -/* ARGSUSED1 */ -void -keyboard(unsigned char c, int x, int y) -{ - /* handle key board input */ - - switch (c) { - case 27: - exit(0); - break; - case 'x': - anglex += 1.0; - drawScene(); - break; - case 'y': - angley += 1.0; - drawScene(); - break; - case 'z': - anglez += 1.0; - drawScene(); - break; - case 'm': - n_slices++; - drawScene(); - break; - case 'e': - n_slices--; - if (n_slices < 4) - n_slices = 4; - drawScene(); - break; - case 's': - if (left < right + 10.0) { - left -= 1.0; - right += 1.0; - bottom -= 1.0; - top += 1.0; - setMatrix(); - drawScene(); - } - break; - case 'l': - left += 1.0; - right -= 1.0; - bottom += 1.0; - top -= 1.0; - setMatrix(); - drawScene(); - break; - default: - break; - } -} - -void -main(int argc, char **argv) -{ - int i, mode = GLUT_DOUBLE; - - glutInit(&argc, argv); - - for (i = 1; i < argc; i++) { - if (!strcmp(argv[i], "-no3Dtex")) { - tex3dSupported = 0; - } else if (!strcmp(argv[i], "-sb")) { - mode = GLUT_SINGLE; - } - } - - /* let glut do all the X Stuff */ - glutInitDisplayMode(GLUT_RGB | mode); - glutCreateWindow("Voxel Head"); - - /* init our variables, etc */ - init(); - - /* read texture data from a file */ - readVoxelData(); - - /* set up OpenGL texturing */ - if (tex3dSupported) - load3DTexture(); - - /* register specific routines to glut */ - glutDisplayFunc(drawScene); - glutReshapeFunc(resize); - glutKeyboardFunc(keyboard); - - /* create popup menu for glut */ - glutCreateMenu(menu); - - glutAddMenuEntry("Random Spin ON", SPIN_ON); - glutAddMenuEntry("Help", MENU_HELP); - glutAddMenuEntry("Exit", MENU_EXIT); - - glutAttachMenu(GLUT_RIGHT_BUTTON); - - /* loop for ever */ - glutMainLoop(); -} diff --git a/lib/glut-3.7.6/progs/advanced/vox.dsp b/lib/glut-3.7.6/progs/advanced/vox.dsp deleted file mode 100644 index 0039ea4f5..000000000 --- a/lib/glut-3.7.6/progs/advanced/vox.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="vox" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=vox - 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 "vox.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 "vox.mak" CFG="vox - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "vox - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "vox - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "vox - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "vox - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "vox - Win32 Release" -# Name "vox - Win32 Debug" -# Begin Source File - -SOURCE=.\vox.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced/warp.c b/lib/glut-3.7.6/progs/advanced/warp.c deleted file mode 100644 index d6f4b1ef1..000000000 --- a/lib/glut-3.7.6/progs/advanced/warp.c +++ /dev/null @@ -1,284 +0,0 @@ - -/* warp.c - by David Blythe, SGI */ - -/* Image warping operations can be done via OpenGL texture mapping. */ - -#include -#include -#include -#include -#include "texture.h" - -static unsigned *image; -static int width, height, components; -static float incr = .05, dir = 1.0; - -#define MAXMESH 32 - -float Ml[4 * 2 * (MAXMESH + 1) * 2 * (MAXMESH + 1)]; - -float N = 1.5; -float B = -1.5; - -void -mesh1(float x0, float x1, float y0, float y1, - float s0, float s1, float t0, float t1, float z, int nx, int ny) -{ - float y, x, s, t, dx, dy, ds, dt, vb[3], tb[2]; - float v; - float *mp = Ml; - - dx = (x1 - x0) / nx; - dy = (y1 - y0) / ny; - ds = (s1 - s0) / nx; - dt = (t1 - t0) / ny; - y = y0; - t = t0; - vb[2] = z; - while (y < y1) { - x = x0; - s = s0; - while (x <= x1) { - tb[0] = s; - tb[1] = t; - vb[0] = x; - vb[1] = y; - v = N * N - x * x - y * y; - if (v < 0.0) - v = 0.0; - vb[2] = sqrt(v) + B; - if (vb[2] < 0.) - vb[2] = 0.0; - *mp++ = tb[0]; - *mp++ = tb[1]; - mp += 2; - *mp++ = vb[0]; - *mp++ = vb[1]; - *mp++ = vb[2]; - mp++; - tb[1] = t + dt; - vb[1] = y + dy; - v = N * N - x * x - (y + dy) * (y + dy); - if (v < 0.0) - v = 0.0; - vb[2] = sqrt(v) + B; - if (vb[2] < 0.) - vb[2] = 0.0; - *mp++ = tb[0]; - *mp++ = tb[1]; - mp += 2; - *mp++ = vb[0]; - *mp++ = vb[1]; - *mp++ = vb[2]; - mp++; - x += dx; - s += ds; - } - y += dy; - t += dt; - } -} - -void -drawmesh(int nx, int ny) -{ - float *mp = Ml; - int i, j; - - glColor4f(1, 1, 1, 1); - for (i = ny + 1; i; i--) { - glBegin(GL_TRIANGLE_STRIP); - for (j = nx + 1; j; j--) { - glTexCoord2fv(mp); - glVertex3fv(mp + 4); - glTexCoord2fv(mp + 8); - glVertex3fv(mp + 12); - mp += 16; - } - glEnd(); - } -} - -void -move(void) -{ - if (N > 2.1 || N < 1.5) - dir = -dir; - N += incr * dir; - mesh1(-1.5, 1.5, -1.5, 1.5, 0.0, 1.0, 0.0, 1.0, 0.0, MAXMESH, MAXMESH); - glutPostRedisplay(); -} - -void -alphaup(void) -{ - incr += .01; - if (incr > .1) - incr = .1; - glutPostRedisplay(); -} - -void -alphadown(void) -{ - incr -= .01; - if (incr < 0) - incr = 0; - glutPostRedisplay(); -} - -void -wire(void) -{ - static int wire_mode; - if (wire_mode ^= 1) - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - else - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); -} - -void -help(void) -{ - printf("'h' - help\n"); - printf("'w' - wire frame\n"); - printf("UP - faster\n"); - printf("DOWN - slower\n"); -} - -void -init(char *filename) -{ - if (filename) { - image = read_texture(filename, &width, &height, &components); - if (image == NULL) { - fprintf(stderr, "Error: Can't load image file \"%s\".\n", - filename); - exit(1); - } else { - printf("%d x %d image loaded\n", width, height); - } - if (components < 3 || components > 4) { - printf("must be RGB or RGBA image\n"); - exit(1); - } - } else { - int i, j; - components = 4; - width = height = 512; - image = (unsigned *) malloc(width * height * sizeof(unsigned)); - for (j = 0; j < height; j++) - for (i = 0; i < width; i++) { - if (i & 64) - image[i + j * width] = 0xff; - else - image[i + j * width] = 0xff00; - if (j & 64) - image[i + j * width] |= 0xff0000; - } - - } - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexImage2D(GL_TEXTURE_2D, 0, components, width, - height, 0, GL_RGBA, GL_UNSIGNED_BYTE, - image); - glEnable(GL_TEXTURE_2D); - glMatrixMode(GL_TEXTURE); - glLoadIdentity(); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(90., 1., .1, 10.); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(0., 0., -1.5); - glClearColor(.25, .25, .25, 0.); - -} - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - drawmesh(MAXMESH, MAXMESH); - glutSwapBuffers(); -} - -void -reshape(int w, int h) -{ - glViewport(0, 0, w, h); -} - -/* ARGSUSED1 */ -void -key(unsigned char key, int x, int y) -{ - switch (key) { - case '\033': - exit(0); - break; - case 'h': - help(); - break; - case 'w': - wire(); - break; - } -} - -/* ARGSUSED1 */ -void -special(int key, int x, int y) -{ - switch (key) { - case GLUT_KEY_UP: - alphaup(); - break; - case GLUT_KEY_DOWN: - alphadown(); - break; - } -} - -void -visible(int vis) -{ - if (vis == GLUT_VISIBLE) - glutIdleFunc(move); - else - glutIdleFunc(NULL); -} - -void -menu(int value) -{ - if(value < 0) - special(-value, 0, 0); - else - key((unsigned char) value, 0, 0); -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); - (void) glutCreateWindow("warp"); - init(argv[1]); - glutKeyboardFunc(key); - glutSpecialFunc(special); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glutVisibilityFunc(visible); - glutCreateMenu(menu); - glutAddMenuEntry("Toggle wireframe", 'w'); - glutAddMenuEntry("Quicken warping", -GLUT_KEY_UP); - glutAddMenuEntry("Slow warping", -GLUT_KEY_DOWN); - glutAddMenuEntry("Quit", '\033'); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/advanced/warp.dsp b/lib/glut-3.7.6/progs/advanced/warp.dsp deleted file mode 100644 index d6d9d5c0d..000000000 --- a/lib/glut-3.7.6/progs/advanced/warp.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="warp" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=warp - 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 "warp.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 "warp.mak" CFG="warp - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "warp - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "warp - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "warp - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "warp - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "warp - Win32 Release" -# Name "warp - Win32 Debug" -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# Begin Source File - -SOURCE=.\texture.h -# End Source File -# Begin Source File - -SOURCE=.\warp.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced/zcomposite.c b/lib/glut-3.7.6/progs/advanced/zcomposite.c deleted file mode 100644 index 3bce5ebda..000000000 --- a/lib/glut-3.7.6/progs/advanced/zcomposite.c +++ /dev/null @@ -1,437 +0,0 @@ - -/* zcomposite.c - by Tom McReynolds, SGI */ - -/* Compositing images that include depth information. */ - -/* To use this program, you select a region of the "room" scene by - rubber-banding the region with the left mouse button. Once a - region is selected, position the region with the middle mouse - button. The region will be composited using the region image and - the region's depth information. With the right mouse button, you - can shift the region's depth values nearer or further away. */ - -#include -#include -#include - -/* Create a single component texture map */ -GLfloat * -make_texture(int maxs, int maxt) -{ - int s, t; - static GLfloat *texture; - - texture = (GLfloat *) malloc(maxs * maxt * sizeof(GLfloat)); - for (t = 0; t < maxt; t++) { - for (s = 0; s < maxs; s++) { - texture[s + maxs * t] = ((s >> 4) & 0x1) ^ ((t >> 4) & 0x1); - } - } - return texture; -} - -GLboolean stencil = GL_TRUE; - -/* ARGSUSED1 */ -void -key(unsigned char key, int x, int y) -{ - switch (key) { - case 't': /* toggle using stencil */ - if (stencil == GL_TRUE) - stencil = GL_FALSE; - else - stencil = GL_TRUE; - glutPostRedisplay(); - break; - case '\033': - exit(0); - break; - } -} - -enum { - SPHERE = 1, CONE -}; -enum { - X, Y, Z -}; - -int startx, starty; -int wid, ht; -int oldwid = 0, oldht = 0; - -const int WINDIM = 512; -const GLfloat FRUSTDIM = 110.f; -const GLfloat FRUSTNEAR = 320.f; -const GLfloat FRUSTFAR = 540.f; -const GLfloat FRUSTDIFF = 540.f - 320.f; - -GLboolean drawmode = GL_FALSE; -GLboolean depthmode = GL_FALSE; -GLboolean rubberbandmode = GL_FALSE; -GLfloat *color; -GLfloat *depth; -GLfloat depthbias = 0.f; -GLfloat raspos[] = -{0.f, 0.f, -430.f}; - -int winWidth = 512; -int winHeight = 512; - -GLfloat sx = 0; -GLfloat sy = 0; - -/* Overlay Stuff */ -int transparent; -int red; -int overlaySupport = 0; - -void -setRasterPosXY(int x, int y) -{ - raspos[X] = (x - winWidth / 2) * sx; - raspos[Y] = (y - winHeight / 2) * sy; - - glRasterPos3fv(raspos); - - glutPostRedisplay(); -} - -void -setRasterPosZ(int y) -{ - raspos[Z] = -(FRUSTNEAR + y * FRUSTDIFF / winHeight); - - depthbias = (y - winHeight / 2.f) / winHeight; - - glRasterPos3fv(raspos); - - glutPostRedisplay(); -} - -void -motion(int x, int y) -{ - y = winHeight - y; - if (drawmode) - setRasterPosXY(x, y); - - if (rubberbandmode) { - wid = x - startx; - ht = y - starty; - if (overlaySupport) glutPostOverlayRedisplay(); - } - if (depthmode) - setRasterPosZ(y); -} - -/* redraw function for overlay: used to show selected region */ -void -overlay(void) -{ - if (glutLayerGet(GLUT_OVERLAY_DAMAGED)) { - glClear(GL_COLOR_BUFFER_BIT); - } else { - glIndexi(transparent); - glBegin(GL_LINE_LOOP); - glVertex2i(startx, starty); - glVertex2i(startx + oldwid, starty); - glVertex2i(startx + oldwid, starty + oldht); - glVertex2i(startx, starty + oldht); - glEnd(); - } - - glIndexi(red); - glBegin(GL_LINE_LOOP); - glVertex2i(startx, starty); - glVertex2i(startx + wid, starty); - glVertex2i(startx + wid, starty + ht); - glVertex2i(startx, starty + ht); - glEnd(); - - oldwid = wid; - oldht = ht; - - glFlush(); -} - -/* used to get current width and height of viewport */ -void -reshape(int wid, int ht) -{ - if (overlaySupport) { - glutUseLayer(GLUT_OVERLAY); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluOrtho2D(0, wid, 0, ht); /* 1 to 1 with window */ - glMatrixMode(GL_MODELVIEW); - glViewport(0, 0, wid, ht); - } - - glutUseLayer(GLUT_NORMAL); - glViewport((GLint) (-wid * .1), (GLint) (-ht * .1), - (GLuint) (wid * 1.2), (GLuint) (ht * 1.2)); - - winWidth = wid; - winHeight = ht; - - sx = 2 * FRUSTDIM / (winWidth * 1.2); - sy = 2 * FRUSTDIM / (winHeight * 1.2); -} - -void -mouse(int button, int state, int x, int y) -{ - y = winHeight - y; /* flip y orientation */ - if (state == GLUT_DOWN) - switch (button) { - case GLUT_LEFT_BUTTON: /* select an image */ - startx = x; - starty = y; - wid = 0; - ht = 0; - rubberbandmode = GL_TRUE; - if (overlaySupport) glutShowOverlay(); - break; - case GLUT_MIDDLE_BUTTON: - glutUseLayer(GLUT_NORMAL); - if (color && depth) { - drawmode = GL_TRUE; - setRasterPosXY(x, y); - } - break; - case GLUT_RIGHT_BUTTON: /* change depth */ - glutUseLayer(GLUT_NORMAL); - if (color && depth) { - depthmode = GL_TRUE; - setRasterPosZ(y); - } - break; - } else /* GLUT_UP */ - switch (button) { - case GLUT_LEFT_BUTTON: - rubberbandmode = GL_FALSE; - if (overlaySupport) glutHideOverlay(); - wid = x - startx; - ht = y - starty; - if (wid < 0) { - wid = -wid; - startx = x; - } - if (ht < 0) { - ht = -ht; - starty = y; - } - color = (GLfloat *) realloc(color, wid * ht * 3 * sizeof(GLfloat)); - depth = (GLfloat *) realloc(depth, wid * ht * sizeof(GLfloat)); - - glutUseLayer(GLUT_NORMAL); - glReadPixels(startx, starty, wid, ht, GL_RGB, GL_FLOAT, color); - glReadPixels(startx, starty, wid, ht, GL_DEPTH_COMPONENT, GL_FLOAT, - depth); - break; - case GLUT_MIDDLE_BUTTON: - drawmode = GL_FALSE; - break; - case GLUT_RIGHT_BUTTON: /* change depth */ - depthmode = GL_FALSE; - break; - } -} - -/* Called when window needs to be redrawn */ -void -redraw(void) -{ - /* material properties for objects in scene */ - static GLfloat wall_mat[] = - {1.f, 1.f, 1.f, 1.f}; - - glutUseLayer(GLUT_NORMAL); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); - - /* Note: wall verticies are ordered so they are all front facing this lets - me do back face culling to speed things up. */ - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, wall_mat); - - /* floor */ - /* make the floor textured */ - glEnable(GL_TEXTURE_2D); - - /* Since we want to turn texturing on for floor only, we have to make floor - a separate glBegin()/glEnd() sequence. You can't turn texturing on and - off between begin and end calls */ - glBegin(GL_QUADS); - glNormal3f(0.f, 1.f, 0.f); - glTexCoord2i(0, 0); - glVertex3f(-100.f, -100.f, -320.f); - glTexCoord2i(1, 0); - glVertex3f(100.f, -100.f, -320.f); - glTexCoord2i(1, 1); - glVertex3f(100.f, -100.f, -520.f); - glTexCoord2i(0, 1); - glVertex3f(-100.f, -100.f, -520.f); - glEnd(); - - glDisable(GL_TEXTURE_2D); - - /* walls */ - - glBegin(GL_QUADS); - /* left wall */ - glNormal3f(1.f, 0.f, 0.f); - glVertex3f(-100.f, -100.f, -320.f); - glVertex3f(-100.f, -100.f, -520.f); - glVertex3f(-100.f, 100.f, -520.f); - glVertex3f(-100.f, 100.f, -320.f); - - /* right wall */ - glNormal3f(-1.f, 0.f, 0.f); - glVertex3f(100.f, -100.f, -320.f); - glVertex3f(100.f, 100.f, -320.f); - glVertex3f(100.f, 100.f, -520.f); - glVertex3f(100.f, -100.f, -520.f); - - /* ceiling */ - glNormal3f(0.f, -1.f, 0.f); - glVertex3f(-100.f, 100.f, -320.f); - glVertex3f(-100.f, 100.f, -520.f); - glVertex3f(100.f, 100.f, -520.f); - glVertex3f(100.f, 100.f, -320.f); - - /* back wall */ - glNormal3f(0.f, 0.f, 1.f); - glVertex3f(-100.f, -100.f, -520.f); - glVertex3f(100.f, -100.f, -520.f); - glVertex3f(100.f, 100.f, -520.f); - glVertex3f(-100.f, 100.f, -520.f); - glEnd(); - - glPushMatrix(); - glTranslatef(-80.f, -80.f, -420.f); - glCallList(SPHERE); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(-20.f, -100.f, -500.f); - glCallList(CONE); - glPopMatrix(); - - if (stencil) { - glEnable(GL_STENCIL_TEST); - glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); - glStencilFunc(GL_ALWAYS, 1, 1); - glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); - glPixelTransferf(GL_DEPTH_BIAS, depthbias); - - glDrawPixels(wid, ht, GL_DEPTH_COMPONENT, GL_FLOAT, depth); - - glPixelTransferf(GL_DEPTH_BIAS, 0.f); - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - glStencilFunc(GL_EQUAL, 1, 1); - glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); - glDisable(GL_DEPTH_TEST); - - glDrawPixels(wid, ht, GL_RGB, GL_FLOAT, color); - - glEnable(GL_DEPTH_TEST); - glDisable(GL_STENCIL_TEST); - } else - glDrawPixels(wid, ht, GL_RGB, GL_FLOAT, color); - - glutSwapBuffers(); -} - -const int TEXDIM = 256; - -/* Parse arguments, and set up interface between OpenGL and window system */ -int -main(int argc, char *argv[]) -{ - GLfloat *tex; - static GLfloat lightpos[] = - {50.f, 50.f, -320.f, 1.f}; - static GLfloat sphere_mat[] = - {1.f, .5f, 0.f, 1.f}; - static GLfloat cone_mat[] = - {0.f, .5f, 1.f, 1.f}; - GLUquadricObj *obj; - - glutInit(&argc, argv); - glutInitWindowSize(WINDIM, WINDIM); - - glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL | GLUT_DOUBLE); - (void) glutCreateWindow("compositing images with depth"); - glutDisplayFunc(redraw); - glutKeyboardFunc(key); - glutMouseFunc(mouse); - glutMotionFunc(motion); - glutReshapeFunc(reshape); - - /* draw a perspective scene */ - glMatrixMode(GL_PROJECTION); - glFrustum(-FRUSTDIM, FRUSTDIM, -FRUSTDIM, FRUSTDIM, FRUSTNEAR, FRUSTFAR); - glMatrixMode(GL_MODELVIEW); - - /* turn on features */ - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - - /* place light 0 in the right place */ - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - - /* remove back faces to speed things up */ - glCullFace(GL_BACK); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - - glNewList(SPHERE, GL_COMPILE); - /* make display lists for sphere and cone; for efficiency */ - obj = gluNewQuadric(); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, sphere_mat); - gluSphere(obj, 20.f, 20, 20); - glEndList(); - - glNewList(CONE, GL_COMPILE); - glRotatef(-90.f, 1.f, 0.f, 0.f); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, cone_mat); - gluQuadricOrientation(obj, GLU_INSIDE); - gluDisk(obj, 0., 20., 20, 1); - gluQuadricOrientation(obj, GLU_OUTSIDE); - gluCylinder(obj, 20., 0., 60., 20, 20); - glEndList(); - - gluDeleteQuadric(obj); - - /* load pattern for current 2d texture */ - tex = make_texture(TEXDIM, TEXDIM); - glTexImage2D(GL_TEXTURE_2D, 0, 1, TEXDIM, TEXDIM, 0, GL_RED, GL_FLOAT, tex); - free(tex); - - /* storage for saved image */ - color = 0; - depth = 0; - - glReadBuffer(GL_FRONT); /* so glReadPixel() always get the right image */ - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - glPixelStorei(GL_PACK_ALIGNMENT, 1); - - glutInitDisplayMode(GLUT_SINGLE | GLUT_INDEX); - if (glutLayerGet(GLUT_OVERLAY_POSSIBLE)) { - glutEstablishOverlay(); - glutHideOverlay(); - transparent = glutLayerGet(GLUT_TRANSPARENT_INDEX); - glClearIndex(transparent); - red = (transparent + 1) % glutGet(GLUT_WINDOW_COLORMAP_SIZE); - glutSetColor(red, 1.0, 0.0, 0.0); /* Red. */ - glutOverlayDisplayFunc(overlay); - overlaySupport = 1; - } else { - printf("Running without overlay rubber banding support.\n"); - } - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/advanced/zcomposite.dsp b/lib/glut-3.7.6/progs/advanced/zcomposite.dsp deleted file mode 100644 index f03411104..000000000 --- a/lib/glut-3.7.6/progs/advanced/zcomposite.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="zcomposite" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=zcomposite - 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 "zcomposite.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 "zcomposite.mak" CFG="zcomposite - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "zcomposite - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "zcomposite - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "zcomposite - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "zcomposite - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "zcomposite - Win32 Release" -# Name "zcomposite - Win32 Debug" -# Begin Source File - -SOURCE=.\zcomposite.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97.dsw b/lib/glut-3.7.6/progs/advanced97.dsw deleted file mode 100644 index c9bcfffdb..000000000 --- a/lib/glut-3.7.6/progs/advanced97.dsw +++ /dev/null @@ -1,779 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "_all"=".\advanced97\_all.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name accconvolve - End Project Dependency - Begin Project Dependency - Project_Dep_Name accumaa - End Project Dependency - Begin Project Dependency - Project_Dep_Name alphablend - End Project Dependency - Begin Project Dependency - Project_Dep_Name alphablendnosort - End Project Dependency - Begin Project Dependency - Project_Dep_Name billboard - End Project Dependency - Begin Project Dependency - Project_Dep_Name bubble - End Project Dependency - Begin Project Dependency - Project_Dep_Name bump - End Project Dependency - Begin Project Dependency - Project_Dep_Name chromakey - End Project Dependency - Begin Project Dependency - Project_Dep_Name chromakey_fancy - End Project Dependency - Begin Project Dependency - Project_Dep_Name cloud - End Project Dependency - Begin Project Dependency - Project_Dep_Name cloudl - End Project Dependency - Begin Project Dependency - Project_Dep_Name complexity - End Project Dependency - Begin Project Dependency - Project_Dep_Name csg - End Project Dependency - Begin Project Dependency - Project_Dep_Name decal - End Project Dependency - Begin Project Dependency - Project_Dep_Name dissolve - End Project Dependency - Begin Project Dependency - Project_Dep_Name explode - End Project Dependency - Begin Project Dependency - Project_Dep_Name fire - End Project Dependency - Begin Project Dependency - Project_Dep_Name genspheremap - End Project Dependency - Begin Project Dependency - Project_Dep_Name highlight - End Project Dependency - Begin Project Dependency - Project_Dep_Name interp - End Project Dependency - Begin Project Dependency - Project_Dep_Name lightmap - End Project Dependency - Begin Project Dependency - Project_Dep_Name lightp - End Project Dependency - Begin Project Dependency - Project_Dep_Name line - End Project Dependency - Begin Project Dependency - Project_Dep_Name multiaccumaa - End Project Dependency - Begin Project Dependency - Project_Dep_Name multialphablend - End Project Dependency - Begin Project Dependency - Project_Dep_Name multialphablendnosort - End Project Dependency - Begin Project Dependency - Project_Dep_Name multimirror - End Project Dependency - Begin Project Dependency - Project_Dep_Name multiscreendoor - End Project Dependency - Begin Project Dependency - Project_Dep_Name multispheremap - End Project Dependency - Begin Project Dependency - Project_Dep_Name noise - End Project Dependency - Begin Project Dependency - Project_Dep_Name nthsurfdemo - End Project Dependency - Begin Project Dependency - Project_Dep_Name paint - End Project Dependency - Begin Project Dependency - Project_Dep_Name projtex - End Project Dependency - Begin Project Dependency - Project_Dep_Name sbias - End Project Dependency - Begin Project Dependency - Project_Dep_Name screendoor - End Project Dependency - Begin Project Dependency - Project_Dep_Name smoke - End Project Dependency - Begin Project Dependency - Project_Dep_Name softshadow2 - End Project Dependency - Begin Project Dependency - Project_Dep_Name spectral - End Project Dependency - Begin Project Dependency - Project_Dep_Name tess - End Project Dependency - Begin Project Dependency - Project_Dep_Name usespheremap - End Project Dependency - Begin Project Dependency - Project_Dep_Name vapor - End Project Dependency - Begin Project Dependency - Project_Dep_Name volume - End Project Dependency - Begin Project Dependency - Project_Dep_Name warp - End Project Dependency - Begin Project Dependency - Project_Dep_Name water - End Project Dependency - Begin Project Dependency - Project_Dep_Name zcomposite - End Project Dependency - Begin Project Dependency - Project_Dep_Name texmovie - End Project Dependency - Begin Project Dependency - Project_Dep_Name texpage - End Project Dependency - Begin Project Dependency - Project_Dep_Name textile - End Project Dependency - Begin Project Dependency - Project_Dep_Name underwater - End Project Dependency - Begin Project Dependency - Project_Dep_Name texgen - End Project Dependency -}}} - -############################################################################### - -Project: "accconvolve"=".\advanced97\accconvolve.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "accumaa"=".\advanced97\accumaa.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "alphablend"=".\advanced97\alphablend.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "alphablendnosort"=".\advanced97\alphablendnosort.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "billboard"=".\advanced97\billboard.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "bubble"=".\advanced97\bubble.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "bump"=".\advanced97\bump.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "chromakey"=".\advanced97\chromakey.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "chromakey_fancy"=".\advanced97\chromakey_fancy.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "cloud"=".\advanced97\cloud.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "cloudl"=".\advanced97\cloudl.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "complexity"=".\advanced97\complexity.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "csg"=".\advanced97\csg.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "decal"=".\advanced97\decal.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "dissolve"=".\advanced97\dissolve.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "explode"=".\advanced97\explode.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "fire"=".\advanced97\fire.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "genspheremap"=".\advanced97\genspheremap.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "highlight"=".\advanced97\highlight.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "interp"=".\advanced97\interp.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "lightmap"=".\advanced97\lightmap.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "lightp"=".\advanced97\lightp.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "line"=".\advanced97\line.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "multiaccumaa"=".\advanced97\multiaccumaa.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "multialphablend"=".\advanced97\multialphablend.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "multialphablendnosort"=".\advanced97\multialphablendnosort.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "multimirror"=".\advanced97\multimirror.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "multiscreendoor"=".\advanced97\multiscreendoor.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "multispheremap"=".\advanced97\multispheremap.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "noise"=".\advanced97\noise.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "nthsurfdemo"=".\advanced97\nthsurfdemo.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "paint"=".\advanced97\paint.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "projtex"=".\advanced97\projtex.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "sbias"=".\advanced97\sbias.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "screendoor"=".\advanced97\screendoor.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "smoke"=".\advanced97\smoke.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "softshadow2"=".\advanced97\softshadow2.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "spectral"=".\advanced97\spectral.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "tess"=".\advanced97\tess.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "texgen"=".\advanced97\texgen.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "texmovie"=".\advanced97\texmovie.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "texpage"=".\advanced97\texpage.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "textile"=".\advanced97\textile.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "underwater"=".\advanced97\underwater.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "usespheremap"=".\advanced97\usespheremap.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "vapor"=".\advanced97\vapor.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "volume"=".\advanced97\volume.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "warp"=".\advanced97\warp.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "water"=".\advanced97\water.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "zcomposite"=".\advanced97\zcomposite.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/lib/glut-3.7.6/progs/advanced97/Imakefile b/lib/glut-3.7.6/progs/advanced97/Imakefile deleted file mode 100644 index 694bdd4d5..000000000 --- a/lib/glut-3.7.6/progs/advanced97/Imakefile +++ /dev/null @@ -1,77 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1998. */ - -#include "../../Glut.cf" - -TARGETS = accconvolve alphablend alphablendnosort billboard \ - bubble bump chromakey chromakey_fancy cloud cloudl complexity csg decal dissolve \ - explode fire genspheremap highlight interp lightmap lightp line \ - multiaccumaa multialphablend multialphablendnosort multimirror \ - multiscreendoor multispheremap noise nthsurfdemo paint projtex sbias \ - screendoor smoke softshadow2 spectral tess texgen texmovie texpage \ - textile underwater usespheremap vapor volume warp water zcomposite - -SRCS = accconvolve.c accumaa.c alphablend.c alphablendnosort.c \ - billboard.c bubble.c bump.c chromakey.c chromakey_fancy.c cloud.c \ - cloudl.c complexity.c csg.c d.c decal.c dissolve.c explode.c fire.c genspheremap.c \ - highlight.c interp.c lightmap.c lightp.c line.c multiaccumaa.c \ - multialphablend.c multialphablendnosort.c multimirror.c \ - multiscreendoor.c multispheremap.c noise.c nthsurfdemo.c paint.c \ - projtex.c sbias.c screendoor.c sm.c smoke.c softshadow2.c spectral.c \ - sphere.c tess.c texgen.c texmovie.c texpage.c textile.c texture.c \ - underwater.c usespheremap.c vapor.c volume.c warp.c water.c \ - zcomposite.c - -AllTarget($(TARGETS)) - -NormalGlutProgramTarget(accconvolve,accconvolve.o texture.o) -SimpleGlutProgramTarget(alphablend) -SimpleGlutProgramTarget(alphablendnosort) -NormalGlutProgramTarget(billboard,billboard.o texture.o) -NormalGlutProgramTarget(bubble,bubble.o texture.o) -NormalGlutProgramTarget(bump,bump.o texture.o) -NormalGlutProgramTarget(chromakey,chromakey.o texture.o) -NormalGlutProgramTarget(chromakey_fancy,chromakey_fancy.o texture.o) -NormalGlutProgramTarget(cloud,cloud.o texture.o) -NormalGlutProgramTarget(cloudl,cloudl.o texture.o) -SimpleGlutProgramTarget(complexity) -SimpleGlutProgramTarget(csg) -SimpleGlutProgramTarget(decal) -SimpleGlutProgramTarget(dissolve) -NormalGlutProgramTarget(explode,explode.o texture.o) -NormalGlutProgramTarget(fire,fire.o texture.o sm.o d.o) -NormalGlutProgramTarget(genspheremap,genspheremap.o texture.o) -NormalGlutProgramTarget(highlight,highlight.o texture.o) -NormalGlutProgramTarget(interp,interp.o texture.o) -NormalGlutProgramTarget(lightmap,lightmap.o texture.o) -NormalGlutProgramTarget(lightp,lightp.o texture.o) -SimpleGlutProgramTarget(line) -SimpleGlutProgramTarget(multiaccumaa) -SimpleGlutProgramTarget(multialphablend) -SimpleGlutProgramTarget(multialphablendnosort) -SimpleGlutProgramTarget(multimirror) -SimpleGlutProgramTarget(multiscreendoor) -NormalGlutProgramTarget(multispheremap,multispheremap.o texture.o) -SimpleGlutProgramTarget(noise) -SimpleGlutProgramTarget(nthsurfdemo) -NormalGlutProgramTarget(paint,paint.o texture.o) -NormalGlutProgramTarget(projtex,projtex.o texture.o) -NormalGlutProgramTarget(sbias,sbias.o texture.o) -SimpleGlutProgramTarget(screendoor) -NormalGlutProgramTarget(smoke,smoke.o texture.o) -SimpleGlutProgramTarget(softshadow2) -SimpleGlutProgramTarget(spectral) -NormalGlutProgramTarget(tess,tess.o sphere.o) -SimpleGlutProgramTarget(texgen) -NormalGlutProgramTarget(texmovie,texmovie.o texture.o) -NormalGlutProgramTarget(texpage,texpage.o texture.o) -NormalGlutProgramTarget(textile,textile.o texture.o) -NormalGlutProgramTarget(underwater,underwater.o texture.o) -NormalGlutProgramTarget(usespheremap,usespheremap.o texture.o) -NormalGlutProgramTarget(vapor,vapor.o texture.o) -NormalGlutProgramTarget(volume,volume.o texture.o) -NormalGlutProgramTarget(warp,warp.o texture.o) -NormalGlutProgramTarget(water,water.o texture.o) -SimpleGlutProgramTarget(zcomposite) - -DependTarget() diff --git a/lib/glut-3.7.6/progs/advanced97/_all.dsp b/lib/glut-3.7.6/progs/advanced97/_all.dsp deleted file mode 100644 index 6a4421548..000000000 --- a/lib/glut-3.7.6/progs/advanced97/_all.dsp +++ /dev/null @@ -1,63 +0,0 @@ -# Microsoft Developer Studio Project File - Name="_all" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Generic Project" 0x010a - -CFG=_all - 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 "_all.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 "_all.mak" CFG="_all - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "_all - Win32 Release" (based on "Win32 (x86) Generic Project") -!MESSAGE "_all - Win32 Debug" (based on "Win32 (x86) Generic Project") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -MTL=midl.exe - -!IF "$(CFG)" == "_all - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" - -!ELSEIF "$(CFG)" == "_all - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "_all___Win32_Debug" -# PROP BASE Intermediate_Dir "_all___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" - -!ENDIF - -# Begin Target - -# Name "_all - Win32 Release" -# Name "_all - Win32 Debug" -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/accconvolve.c b/lib/glut-3.7.6/progs/advanced97/accconvolve.c deleted file mode 100644 index 528d037d0..000000000 --- a/lib/glut-3.7.6/progs/advanced97/accconvolve.c +++ /dev/null @@ -1,223 +0,0 @@ -#include -#include -#include -#include -#include -#include "texture.h" - -static char defaultFile[] = "../data/mandrill.rgb"; -GLuint *img; -GLsizei w, h; -GLint comp; - -GLfloat kernScale; - -/* a few filters... */ -GLfloat horizontalEdge3x3[] = { - -1, -1, -1, - 2, 2, 2, - -1, -1, -1, -}; - -GLfloat verticalEdge3x3[] = { - -1, 2, -1, - -1, 2, -1, - -1, 2, -1, -}; - -GLfloat allEdge3x3[] = { - -2, 1, -2, - 1, 4, 1, - -2, 1, -2, -}; - -GLfloat smooth3x3[] = { - 1, 2, 1, - 2, 4, 2, - 1, 2, 1, -}; - -GLfloat highpass3x3[] = { - -1, -1, -1, - -1, 9, -1, - -1, -1, -1, -}; - -GLfloat laplacian5x5[] = { - 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, - 1, 1, 24, 1, 1, - 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, -}; - -GLfloat box3x3[] = { - 1, 1, 1, - 1, 1, 1, - 1, 1, 1, -}; - -GLfloat box5x5[] = { - 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, -}; - -struct Kernel { - const char *name; - GLfloat *kern; - GLsizei w, h; -} filters[] = { - {"horizontal edge detect", horizontalEdge3x3, 3, 3}, - {"vertical edge detect", verticalEdge3x3, 3, 3}, - {"all edge detect", allEdge3x3, 3, 3}, - {"3x3 smooth", smooth3x3, 3, 3}, - {"3x3 highpass", highpass3x3, 3, 3}, - {"5x5 laplacian", laplacian5x5, 5, 5}, - {"3x3 box", box3x3, 3, 3}, - {"5x5 box", box5x5, 5, 5}, -}; -struct Kernel *kern; - -void kern_normalize(void) -{ - GLfloat total, scale, *k; - int i; - - k = kern->kern; - total = 0; - for (i = 0; i < kern->w*kern->h; i++) { - total += *k++; - } - - if (!total) { - /* kernel sums to 0... */ - return; - } else { - scale = 1. / total; - k = kern->kern; - for (i = 0; i < kern->w * kern->h; i++) { - *k *= scale; - k++; - } - } -} - -GLfloat acc_kern_scale(void) -{ - GLfloat minPossible = 0, maxPossible = 1; - GLfloat *k; - int i; - - k = kern->kern; - for (i = 0; i < kern->w*kern->h; i++) { - if (*k < 0) { - minPossible += *k; - } else { - maxPossible += *k; - } - k++; - } - - return(1. / ((-minPossible > maxPossible) ? -minPossible : maxPossible)); -} - -void init(void) -{ - kern = &filters[4]; - kern_normalize(); - kernScale = acc_kern_scale(); -} - -void load_img(const char *fname) -{ - img = read_texture(fname, &w, &h, &comp); - if (!img) { - fprintf(stderr, "Could not open %s\n", fname); - exit(1); - } -} - -void reshape(GLsizei winW, GLsizei winH) -{ - glViewport(0, 0, w, h); - glLoadIdentity(); - glOrtho(0, winW, 0, winH, 0, 5); -} - -void acc_convolve(void) -{ - int x, y; - - for (y = 0; y < kern->h; y++) { - for (x = 0; x < kern->w; x++) { - glRasterPos2i(0, 0); - glBitmap(0, 0, 0, 0, -x, -y, 0); - glDrawPixels(w, h, GL_RGBA, GL_UNSIGNED_BYTE, img); - glAccum(GL_ACCUM, kern->kern[y*kern->w + x]*kernScale); - } - } - glAccum(GL_RETURN, 1./kernScale); -} - -void draw(void) -{ - GLenum err; - - glutSetCursor(GLUT_CURSOR_WAIT); - - glClear(GL_COLOR_BUFFER_BIT | GL_ACCUM_BUFFER_BIT); - - acc_convolve(); - - err = glGetError(); - if (err != GL_NO_ERROR) printf("Error: %s\n", gluErrorString(err)); - - glutSetCursor(GLUT_CURSOR_INHERIT); -} - -/* ARGSUSED1 */ -void key(unsigned char key, int x, int y) -{ - if (key == 27) exit(0); -} - -void menu(int val) -{ - kern = &filters[val]; - kern_normalize(); - kernScale= acc_kern_scale(); - draw(); -} - -main(int argc, char *argv[]) -{ - int i; - - glutInit(&argc, argv); - if (argc > 1) { - load_img(argv[1]); - } else { - load_img(defaultFile); - } - glutInitWindowSize(w, h); - glutInitWindowPosition(0, 0); - glutInitDisplayMode(GLUT_RGB | GLUT_ACCUM); - glutCreateWindow(argv[0]); - glutDisplayFunc(draw); - glutKeyboardFunc(key); - glutReshapeFunc(reshape); - - glutCreateMenu(menu); - for (i = 0; i < sizeof(filters) / sizeof(filters[0]); i++) { - glutAddMenuEntry(filters[i].name, i); - } - glutAttachMenu(GLUT_RIGHT_BUTTON); - - init(); - - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/advanced97/accconvolve.dsp b/lib/glut-3.7.6/progs/advanced97/accconvolve.dsp deleted file mode 100644 index 24abc5275..000000000 --- a/lib/glut-3.7.6/progs/advanced97/accconvolve.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="accconvolve" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=accconvolve - 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 "accconvolve.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 "accconvolve.mak" CFG="accconvolve - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "accconvolve - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "accconvolve - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "accconvolve - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "accconvolve - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "accconvolve - Win32 Release" -# Name "accconvolve - Win32 Debug" -# Begin Source File - -SOURCE=.\accconvolve.c -# End Source File -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# Begin Source File - -SOURCE=.\texture.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/accumaa.c b/lib/glut-3.7.6/progs/advanced97/accumaa.c deleted file mode 100644 index ba1591ba3..000000000 --- a/lib/glut-3.7.6/progs/advanced97/accumaa.c +++ /dev/null @@ -1,272 +0,0 @@ -#include -#include -#include - -const GLdouble FRUSTDIM = 100.f; - -/* -** Create a single component texture map -*/ -GLfloat *make_texture(int maxs, int maxt) -{ - int s, t; - static GLfloat *texture; - - texture = (GLfloat *)malloc(maxs * maxt * sizeof(GLfloat)); - for(t = 0; t < maxt; t++) { - for(s = 0; s < maxs; s++) { - texture[s + maxs * t] = ((s >> 4) & 0x1) ^ ((t >> 4) & 0x1); - } - } - return texture; -} - -enum {SPHERE = 1, CONE}; - -void -render(void) -{ - /* material properties for objects in scene */ - static GLfloat wall_mat[] = {1.f, 1.f, 1.f, 1.f}; - - glClear(GL_DEPTH_BUFFER_BIT|GL_COLOR_BUFFER_BIT); - - /* - ** Note: wall verticies are ordered so they are all front facing - ** this lets me do back face culling to speed things up. - */ - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, wall_mat); - - /* floor */ - /* make the floor textured */ - glEnable(GL_TEXTURE_2D); - - /* - ** Since we want to turn texturing on for floor only, we have to - ** make floor a separate glBegin()/glEnd() sequence. You can't - ** turn texturing on and off between begin and end calls - */ - glBegin(GL_QUADS); - glNormal3f(0.f, 1.f, 0.f); - glTexCoord2i(0, 0); - glVertex3f(-100.f, -100.f, -320.f); - glTexCoord2i(1, 0); - glVertex3f( 100.f, -100.f, -320.f); - glTexCoord2i(1, 1); - glVertex3f( 100.f, -100.f, -520.f); - glTexCoord2i(0, 1); - glVertex3f(-100.f, -100.f, -520.f); - glEnd(); - - glDisable(GL_TEXTURE_2D); - - /* walls */ - - glBegin(GL_QUADS); - /* left wall */ - glNormal3f(1.f, 0.f, 0.f); - glVertex3f(-100.f, -100.f, -320.f); - glVertex3f(-100.f, -100.f, -520.f); - glVertex3f(-100.f, 100.f, -520.f); - glVertex3f(-100.f, 100.f, -320.f); - - /* right wall */ - glNormal3f(-1.f, 0.f, 0.f); - glVertex3f( 100.f, -100.f, -320.f); - glVertex3f( 100.f, 100.f, -320.f); - glVertex3f( 100.f, 100.f, -520.f); - glVertex3f( 100.f, -100.f, -520.f); - - /* ceiling */ - glNormal3f(0.f, -1.f, 0.f); - glVertex3f(-100.f, 100.f, -320.f); - glVertex3f(-100.f, 100.f, -520.f); - glVertex3f( 100.f, 100.f, -520.f); - glVertex3f( 100.f, 100.f, -320.f); - - /* back wall */ - glNormal3f(0.f, 0.f, 1.f); - glVertex3f(-100.f, -100.f, -520.f); - glVertex3f( 100.f, -100.f, -520.f); - glVertex3f( 100.f, 100.f, -520.f); - glVertex3f(-100.f, 100.f, -520.f); - glEnd(); - - - glPushMatrix(); - glTranslatef(-80.f, -60.f, -420.f); - glCallList(SPHERE); - glPopMatrix(); - - - glPushMatrix(); - glTranslatef(-20.f, -80.f, -500.f); - glCallList(CONE); - glPopMatrix(); - - if(glGetError()) /* to catch programming errors; should never happen */ - printf("Oops! I screwed up my OpenGL calls somewhere\n"); - - glFlush(); /* high end machines may need this */ -} - -/* compute scale factor for window->object space transform */ -/* could use gluUnProject(), but probably too much trouble */ -void -computescale(GLfloat *sx, GLfloat *sy) -{ - enum {XORG, YORG, WID, HT}; - GLint viewport[4]; - glGetIntegerv(GL_VIEWPORT, viewport); - - *sx = 2 * FRUSTDIM/viewport[WID]; - *sy = 2 * FRUSTDIM/viewport[WID]; -} - -enum {NONE, AA}; - -int rendermode = NONE; - -void -menu(int selection) -{ - rendermode = selection; - glutPostRedisplay(); -} - -/* Called when window needs to be redrawn */ -void redraw(void) -{ - int i, j; - int min, max; - int count; - GLfloat invx, invy; - GLfloat scale, dx, dy; - - switch(rendermode) { - case NONE: - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glFrustum(-FRUSTDIM, FRUSTDIM, -FRUSTDIM, FRUSTDIM, 320., 640.); - glMatrixMode(GL_MODELVIEW); - render(); - break; - case AA: - min = -2; - max = -min + 1; - count = -2 * min + 1; - count *= count; - - /* uniform scaling, less than one pixel wide */ - scale = -.9f/min; - - computescale(&invx, &invy); - - glutSetCursor(GLUT_CURSOR_WAIT); - - glClear(GL_ACCUM_BUFFER_BIT); - - for(j = min; j < max; j++) { - for(i = min; i < max; i++) { - printf("pass %d of %d\n", - (j-min)*(max-min)+i-min+1,(max-min)*(max-min)); - dx = invx * scale * i; - dy = invy * scale * j; - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glFrustum(-FRUSTDIM + dx, - FRUSTDIM + dy, - -FRUSTDIM + dx, - FRUSTDIM + dy, - 320., 640.); - glMatrixMode(GL_MODELVIEW); - render(); - glAccum(GL_ACCUM, 1.f/count); - } - } - glAccum(GL_RETURN, 1.f); - glutSetCursor(GLUT_CURSOR_INHERIT); - break; - } - - glutSwapBuffers(); -} - -void key(unsigned char key, int x, int y) -{ - if(key == '\033') - exit(0); -} - - -const int TEXDIM = 256; -/* Parse arguments, and set up interface between OpenGL and window system */ -main(int argc, char *argv[]) -{ - GLfloat *tex; - static GLfloat lightpos[] = {50.f, 50.f, -320.f, 1.f}; - static GLfloat sphere_mat[] = {1.f, .5f, 0.f, 1.f}; - static GLfloat cone_mat[] = {0.f, .5f, 1.f, 1.f}; - GLUquadricObj *sphere, *cone, *base; - - glutInitWindowSize(512, 512); - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGBA|GLUT_DEPTH|GLUT_ACCUM|GLUT_DOUBLE); - (void)glutCreateWindow("Anti-aliasing with Accum"); - glutDisplayFunc(redraw); - glutKeyboardFunc(key); - - glutCreateMenu(menu); - glutAddMenuEntry("Aliased View", NONE); - glutAddMenuEntry("AntiAliased", AA); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - /* draw a perspective scene */ - glMatrixMode(GL_PROJECTION); - glFrustum(-FRUSTDIM, FRUSTDIM, -FRUSTDIM, FRUSTDIM, 320., 640.); - glMatrixMode(GL_MODELVIEW); - - /* turn on features */ - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - - /* place light 0 in the right place */ - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - - /* remove back faces to speed things up */ - glCullFace(GL_BACK); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - - glNewList(SPHERE, GL_COMPILE); - /* make display lists for sphere and cone; for efficiency */ - sphere = gluNewQuadric(); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, sphere_mat); - gluSphere(sphere, 20.f, 20, 20); - gluDeleteQuadric(sphere); - glEndList(); - - glNewList(CONE, GL_COMPILE); - cone = gluNewQuadric(); - base = gluNewQuadric(); - glRotatef(-90.f, 1.f, 0.f, 0.f); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, cone_mat); - gluDisk(base, 0., 20., 20, 1); - gluCylinder(cone, 20., 0., 60., 20, 20); - gluDeleteQuadric(cone); - gluDeleteQuadric(base); - glEndList(); - - /* load pattern for current 2d texture */ - tex = make_texture(TEXDIM, TEXDIM); - glTexImage2D(GL_TEXTURE_2D, 0, 1, TEXDIM, TEXDIM, 0, GL_RED, GL_FLOAT, tex); - free(tex); - - glReadBuffer(GL_BACK); /* input to accum buffer */ - - glutMainLoop(); - - return 0; -} diff --git a/lib/glut-3.7.6/progs/advanced97/accumaa.dsp b/lib/glut-3.7.6/progs/advanced97/accumaa.dsp deleted file mode 100644 index af9f9cab2..000000000 --- a/lib/glut-3.7.6/progs/advanced97/accumaa.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="accumaa" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=accumaa - 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 "accumaa.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 "accumaa.mak" CFG="accumaa - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "accumaa - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "accumaa - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "accumaa - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "accumaa - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "accumaa - Win32 Release" -# Name "accumaa - Win32 Debug" -# Begin Source File - -SOURCE=.\accumaa.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/alphablend.c b/lib/glut-3.7.6/progs/advanced97/alphablend.c deleted file mode 100644 index 1fb6c2cad..000000000 --- a/lib/glut-3.7.6/progs/advanced97/alphablend.c +++ /dev/null @@ -1,176 +0,0 @@ -#include -#include -#include -#include -#include - -GLUquadricObj *cone, *base, *qsphere; - -void init(void) -{ - static GLfloat lightpos[] = {.5, .75, 1.5, 1}; - - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - - cone = gluNewQuadric(); - base = gluNewQuadric(); - qsphere = gluNewQuadric(); - gluQuadricOrientation(base, GLU_INSIDE); - - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); -} - -void reshape(GLsizei w, GLsizei h) -{ - glViewport(0, 0, w, h); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(60, 1, .01, 10); - gluLookAt(0, 0, 2.577, 0, 0, -5, 0, 1, 0); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -void draw_room(void) -{ - /* material for the walls, floor, ceiling */ - static GLfloat wall_mat[] = {1.f, 1.f, 1.f, 1.f}; - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, wall_mat); - - glBegin(GL_QUADS); - - /* floor */ - glNormal3f(0, 1, 0); - glVertex3f(-1, -1, 1); - glVertex3f(1, -1, 1); - glVertex3f(1, -1, -1); - glVertex3f(-1, -1, -1); - - /* ceiling */ - glNormal3f(0, -1, 0); - glVertex3f(-1, 1, -1); - glVertex3f(1, 1, -1); - glVertex3f(1, 1, 1); - glVertex3f(-1, 1, 1); - - /* left wall */ - glNormal3f(1, 0, 0); - glVertex3f(-1, -1, -1); - glVertex3f(-1, -1, 1); - glVertex3f(-1, 1, 1); - glVertex3f(-1, 1, -1); - - /* right wall */ - glNormal3f(-1, 0, 0); - glVertex3f(1, 1, -1); - glVertex3f(1, 1, 1); - glVertex3f(1, -1, 1); - glVertex3f(1, -1, -1); - - /* far wall */ - glNormal3f(0, 0, 1); - glVertex3f(-1, -1, -1); - glVertex3f(1, -1, -1); - glVertex3f(1, 1, -1); - glVertex3f(-1, 1, -1); - - glEnd(); -} - -void draw_cone(void) -{ - static GLfloat cone_mat[] = {0.f, .5f, 1.f, 1.f}; - - glPushMatrix(); - glTranslatef(0, -1, 0); - glRotatef(-90, 1, 0, 0); - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, cone_mat); - gluCylinder(cone, .3, 0, 1.25, 20, 1); - gluDisk(base, 0., .3, 20, 1); - - glPopMatrix(); -} - -void draw_sphere(GLdouble angle) -{ - static GLfloat sphere_mat[] = {1.f, .5f, 0.f, .5f}; - - glPushMatrix(); - glTranslatef(0, -.3, 0); - glRotatef(angle, 0, 1, 0); - glTranslatef(0, 0, .6); - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, sphere_mat); - gluSphere(qsphere, .3, 20, 20); - - glPopMatrix(); -} - -GLdouble get_secs(void) -{ - return glutGet(GLUT_ELAPSED_TIME)/1000.0; -} - -void draw(void) -{ - GLenum err; - GLdouble secs; - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - draw_room(); - draw_cone(); - - secs = get_secs(); - glEnable(GL_BLEND); - glEnable(GL_CULL_FACE); - glCullFace(GL_FRONT); - draw_sphere(secs * 360. / 10.); - glCullFace(GL_BACK); - draw_sphere(secs * 360. / 10.); - glDisable(GL_CULL_FACE); - glDisable(GL_BLEND); - - err = glGetError(); - if (err != GL_NO_ERROR) printf("Error: %s\n", gluErrorString(err)); - - glutSwapBuffers(); -} - -/* ARGSUSED1 */ -void key(unsigned char key, int x, int y) -{ - static int idle = 1; - if (key == 27) exit(0); - idle = (idle == 0); - if (idle) { - glutIdleFunc(draw); - } else { - glutIdleFunc(0); - } -} - -main(int argc, char *argv[]) -{ - glutInitWindowSize(512, 512); - glutInitWindowPosition(0, 0); - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); - glutCreateWindow(argv[0]); - glutDisplayFunc(draw); - glutIdleFunc(draw); - glutKeyboardFunc(key); - glutReshapeFunc(reshape); - init(); - - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/advanced97/alphablend.dsp b/lib/glut-3.7.6/progs/advanced97/alphablend.dsp deleted file mode 100644 index a72842f59..000000000 --- a/lib/glut-3.7.6/progs/advanced97/alphablend.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="alphablend" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=alphablend - 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 "alphablend.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 "alphablend.mak" CFG="alphablend - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "alphablend - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "alphablend - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "alphablend - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "alphablend - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "alphablend - Win32 Release" -# Name "alphablend - Win32 Debug" -# Begin Source File - -SOURCE=.\alphablend.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/alphablendnosort.c b/lib/glut-3.7.6/progs/advanced97/alphablendnosort.c deleted file mode 100644 index 883dc6e8e..000000000 --- a/lib/glut-3.7.6/progs/advanced97/alphablendnosort.c +++ /dev/null @@ -1,171 +0,0 @@ -#include -#include -#include -#include -#include - -GLUquadricObj *cone, *base, *qsphere; - -void init(void) -{ - static GLfloat lightpos[] = {.5, .75, 1.5, 1}; - - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - - cone = gluNewQuadric(); - base = gluNewQuadric(); - qsphere = gluNewQuadric(); - gluQuadricOrientation(base, GLU_INSIDE); - - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); -} - -void reshape(GLsizei w, GLsizei h) -{ - glViewport(0, 0, w, h); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(60, 1, .01, 10); - gluLookAt(0, 0, 2.577, 0, 0, -5, 0, 1, 0); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -void draw_room(void) -{ - /* material for the walls, floor, ceiling */ - static GLfloat wall_mat[] = {1.f, 1.f, 1.f, 1.f}; - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, wall_mat); - - glBegin(GL_QUADS); - - /* floor */ - glNormal3f(0, 1, 0); - glVertex3f(-1, -1, 1); - glVertex3f(1, -1, 1); - glVertex3f(1, -1, -1); - glVertex3f(-1, -1, -1); - - /* ceiling */ - glNormal3f(0, -1, 0); - glVertex3f(-1, 1, -1); - glVertex3f(1, 1, -1); - glVertex3f(1, 1, 1); - glVertex3f(-1, 1, 1); - - /* left wall */ - glNormal3f(1, 0, 0); - glVertex3f(-1, -1, -1); - glVertex3f(-1, -1, 1); - glVertex3f(-1, 1, 1); - glVertex3f(-1, 1, -1); - - /* right wall */ - glNormal3f(-1, 0, 0); - glVertex3f(1, 1, -1); - glVertex3f(1, 1, 1); - glVertex3f(1, -1, 1); - glVertex3f(1, -1, -1); - - /* far wall */ - glNormal3f(0, 0, 1); - glVertex3f(-1, -1, -1); - glVertex3f(1, -1, -1); - glVertex3f(1, 1, -1); - glVertex3f(-1, 1, -1); - - glEnd(); -} - -void draw_cone(void) -{ - static GLfloat cone_mat[] = {0.f, .5f, 1.f, 1.f}; - - glPushMatrix(); - glTranslatef(0, -1, 0); - glRotatef(-90, 1, 0, 0); - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, cone_mat); - gluCylinder(cone, .3, 0, 1.25, 20, 1); - gluDisk(base, 0., .3, 20, 1); - - glPopMatrix(); -} - -void draw_sphere(GLdouble angle) -{ - static GLfloat sphere_mat[] = {1.f, .5f, 0.f, .5f}; - - glPushMatrix(); - glTranslatef(0, -.3, 0); - glRotatef(angle, 0, 1, 0); - glTranslatef(0, 0, .6); - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, sphere_mat); - gluSphere(qsphere, .3, 20, 20); - - glPopMatrix(); -} - -GLdouble get_secs(void) -{ - return glutGet(GLUT_ELAPSED_TIME) / 1000.0; -} - -void draw(void) -{ - GLenum err; - GLdouble secs; - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - draw_room(); - draw_cone(); - - glEnable(GL_BLEND); - secs = get_secs(); - draw_sphere(secs * 360. / 10.); - glDisable(GL_BLEND); - - err = glGetError(); - if (err != GL_NO_ERROR) printf("Error: %s\n", gluErrorString(err)); - - glutSwapBuffers(); -} - -/* ARGSUSED1 */ -void key(unsigned char key, int x, int y) -{ - static int idle = 1; - if (key == 27) exit(0); - idle = (idle == 0); - if (idle) { - glutIdleFunc(draw); - } else { - glutIdleFunc(0); - } -} - -main(int argc, char *argv[]) -{ - glutInitWindowSize(512, 512); - glutInitWindowPosition(0, 0); - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); - glutCreateWindow(argv[0]); - glutDisplayFunc(draw); - glutIdleFunc(draw); - glutKeyboardFunc(key); - glutReshapeFunc(reshape); - init(); - - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/advanced97/alphablendnosort.dsp b/lib/glut-3.7.6/progs/advanced97/alphablendnosort.dsp deleted file mode 100644 index 1d086ea45..000000000 --- a/lib/glut-3.7.6/progs/advanced97/alphablendnosort.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="alphablendnosort" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=alphablendnosort - 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 "alphablendnosort.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 "alphablendnosort.mak" CFG="alphablendnosort - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "alphablendnosort - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "alphablendnosort - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "alphablendnosort - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "alphablendnosort - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "alphablendnosort - Win32 Release" -# Name "alphablendnosort - Win32 Debug" -# Begin Source File - -SOURCE=.\alphablendnosort.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/billboard.c b/lib/glut-3.7.6/progs/advanced97/billboard.c deleted file mode 100644 index 1f46ee351..000000000 --- a/lib/glut-3.7.6/progs/advanced97/billboard.c +++ /dev/null @@ -1,339 +0,0 @@ -#include -#include -#include -#include "texture.h" -#include - -#ifndef __sgi -/* Most math.h's do not define float versions of the trig functions. */ -#define sinf sin -#define cosf cos -#define atan2f atan2 -#endif - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -static int billboard = 1, texture = 1; -static float scale = 1.; -static float transx = 1.0, transy, rotx, roty; -static int ox = -1, oy = -1; -static int mot = 0; -#define PAN 1 -#define ROT 2 - -void -pan(const int x, const int y) { - transx += (x-ox)/500.; - transy -= (y-oy)/500.; - ox = x; oy = y; - glutPostRedisplay(); -} - -void -rotate(const int x, const int y) { - rotx += x-ox; - if (rotx > 360.) rotx -= 360.; - else if (rotx < -360.) rotx += 360.; - roty += y-oy; - if (roty > 360.) roty -= 360.; - else if (roty < -360.) roty += 360.; - ox = x; oy = y; - glutPostRedisplay(); -} - -void -motion(int x, int y) { - if (mot == PAN) pan(x, y); - else if (mot == ROT) rotate(x,y); -} - -void -mouse(int button, int state, int x, int y) { - if(state == GLUT_DOWN) { - switch(button) { - case GLUT_LEFT_BUTTON: - mot = PAN; - motion(ox = x, oy = y); - break; - case GLUT_MIDDLE_BUTTON: - break; - case GLUT_RIGHT_BUTTON: - mot = ROT; - motion(ox = x, oy = y); - break; - } - } else if (state == GLUT_UP) { - mot = 0; - } -} - -void afunc(void) { - static int state; - if (state ^= 1) { - glAlphaFunc(GL_GREATER, .01); - glEnable(GL_ALPHA_TEST); - } else { - glDisable(GL_ALPHA_TEST); - } -} - -void demofunc(void) { - static float deltax = -.03; - static float deltay = 2.; - - transx += deltax; - if (transx > 2.0 || transx < -2.0) deltax = -deltax; - - rotx += deltay; - if (rotx > 360.f || rotx < 0.f) deltay = -deltay; - glutPostRedisplay(); -} - -void dfunc(void) { - static int demo; - if (demo ^= 1) { - glutIdleFunc(demofunc); - } else { - glutIdleFunc(0); - } -} - -void bfunc(void) { - static int state; - if (state ^= 1) { - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glEnable(GL_BLEND); - } else { - glDisable(GL_BLEND); - } -} - -void ffunc(void) { - billboard ^= 1; -} - -void tfunc(void) { - texture ^= 1; -} - -void up(void) { scale += .1; } -void down(void) { scale -= .1; } - -void help(void) { - printf("Usage: billboard [image]\n"); - printf("'h' - help\n"); - printf("'a' - toggle alpha test\n"); - printf("'b' - toggle blend\n"); - printf("'d' - toggle demo mode\n"); - printf("'f' - toggle fixed mode\n"); - printf("'t' - toggle texturing\n"); - printf("'UP' - scale up\n"); - printf("'DOWN' - scale down\n"); - printf("left mouse - pan\n"); - printf("right mouse - rotate\n"); -} - -void init(char *filename) { - static unsigned *image; - static int width, height, components; - if (filename) { - image = read_texture(filename, &width, &height, &components); - if (image == NULL) { - fprintf(stderr, "Error: Can't load image file \"%s\".\n", - filename); - exit(EXIT_FAILURE); - } else { - printf("%d x %d image loaded\n", width, height); - } - if (components != 4) { - printf("must be an RGBA image\n"); - exit(EXIT_FAILURE); - } - } else { - int i, j; - unsigned char *img; - components = 4; width = height = 256; - image = (unsigned *) malloc(width*height*sizeof(unsigned)); - img = (unsigned char *)image; - for (j = 0; j < height; j++) - for (i = 0; i < width; i++) { - int w2 = width/2, h2 = height/2; - if ((i & 32) ^ (j & 32)) { - img[4*(i+j*width)+0] = 0xff; - img[4*(i+j*width)+1] = 0xff; - img[4*(i+j*width)+2] = 0xff; - } else { - img[4*(i+j*width)+0] = 0x0; - img[4*(i+j*width)+1] = 0x0; - img[4*(i+j*width)+2] = 0x0; - } - if ((i-w2)*(i-w2) + (j-h2)*(j-h2) > 64*64 && - (i-w2)*(i-w2) + (j-h2)*(j-h2) < 300*300) img[4*(i+j*width)+3] = 0xff; - } - - } - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexImage2D(GL_TEXTURE_2D, 0, components, width, height, 0, - GL_RGBA, GL_UNSIGNED_BYTE, image); - glEnable(GL_TEXTURE_2D); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(50.,1.,.1,10.); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(0.,0.,-5.5); - glClearColor(.25f, .25f, .25f, .25f); - glEnable(GL_DEPTH_TEST); -} - -static void calcMatrix(void); - -void display(void) { -#if NATE - float mat[16]; -#endif - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - - glLoadIdentity(); -#define RAD(x) (((x)*M_PI)/180.) - gluLookAt(-sinf(RAD(rotx))*5.5,transy,cosf(RAD(rotx))*5.5, 0.,0.,0., 0.,1.,0.); - -#if NATE - glGetFloatv(GL_MODELVIEW_MATRIX, mat); -#endif - /* floor */ - glDisable(GL_TEXTURE_2D); - glColor4f(0.2, 0.8, 0.2, 1.); - glBegin(GL_POLYGON); - glVertex3f(-2.0, -1.0, -2.0); - glVertex3f( 2.0, -1.0, -2.0); - glVertex3f( 2.0, -1.0, 2.0); - glVertex3f(-2.0, -1.0, 2.0); - glEnd(); - - glPushMatrix(); -#if 0 - glTranslatef(transx, transy, 0.f); - glRotatef(rotx, 0., 1., 0.); - glRotatef(roty, 1., 0., 0.); -#endif - glTranslatef(0.f, 0.f, -transx); - if (billboard) calcMatrix(); - glScalef(scale,scale,1.); - if (texture) glEnable(GL_TEXTURE_2D); - glColor4f(1.f, 1.f, 1.f, 1.f); - glBegin(GL_POLYGON); - glTexCoord2f(0.0, 0.0); - glVertex2f(-1.0, -1.0); - glTexCoord2f(1.0, 0.0); - glVertex2f(1.0, -1.0); - glTexCoord2f(1.0, 1.0); - glVertex2f(1.0, 1.0); - glTexCoord2f(0.0, 1.0); - glVertex2f(-1.0, 1.0); - glEnd(); - glPopMatrix(); - - glutSwapBuffers(); -} - -void reshape(int w, int h) { - glViewport(0, 0, w, h); -} - -/*ARGSUSED*/ -void -key(unsigned char key, int x, int y) { - switch(key) { - case 'a': afunc(); break; - case 'd': dfunc(); break; - case 'b': bfunc(); break; - case 'f': ffunc(); break; - case 't': tfunc(); break; - case 'h': help(); break; - case '\033': exit(EXIT_SUCCESS); break; - default: break; - } - glutPostRedisplay(); -} - -/*ARGSUSED*/ -void -special(int key, int x, int y) { - switch(key) { - case GLUT_KEY_UP: up(); break; - case GLUT_KEY_DOWN: down(); break; - } - glutPostRedisplay(); -} - -int main(int argc, char** argv) { - glutInitWindowSize(512, 512); - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE|GLUT_DEPTH); - (void)glutCreateWindow("billboard"); - init(argv[1]); - glutDisplayFunc(display); - glutKeyboardFunc(key); - glutSpecialFunc(special); - glutReshapeFunc(reshape); - glutMouseFunc(mouse); - glutMotionFunc(motion); - glutMainLoop(); - return 0; -} - -void -buildRot(float theta, float x, float y, float z, float m[16]) { - float d = x*x + y*y + z*z; - float ct = cosf(RAD(theta)), st = sinf(RAD(theta)); - - /* normalize */ - if (d > 0) { - d = 1/d; - x *= d; - y *= d; - z *= d; - } - - m[ 0] = 1; m[ 1] = 0; m[ 2] = 0; m[ 3] = 0; - m[ 4] = 0; m[ 5] = 1; m[ 6] = 0; m[ 7] = 0; - m[ 8] = 0; m[ 9] = 0; m[10] = 1; m[11] = 0; - m[12] = 0; m[13] = 0; m[14] = 0; m[15] = 1; - - /* R = uu' + cos(theta)*(I-uu') + sin(theta)*S - * - * S = 0 -z y u' = (x, y, z) - * z 0 -x - * -y x 0 - */ - - m[0] = x*x + ct*(1-x*x) + st*0; - m[4] = x*y + ct*(0-x*y) + st*-z; - m[8] = x*z + ct*(0-x*z) + st*y; - - m[1] = y*x + ct*(0-y*x) + st*z; - m[5] = y*y + ct*(1-y*y) + st*0; - m[9] = y*z + ct*(0-y*z) + st*-x; - - m[2] = z*x + ct*(0-z*x) + st*-y; - m[6] = z*y + ct*(0-z*y) + st*x; - m[10]= z*z + ct*(1-z*z) + st*0; -} - -static void -calcMatrix(void) { - float mat[16]; - - glGetFloatv(GL_MODELVIEW_MATRIX, mat); - buildRot(-180*atan2f(mat[8], mat[10])/M_PI, 0, 1, 0, mat); - glMultMatrixf(mat); -} diff --git a/lib/glut-3.7.6/progs/advanced97/billboard.dsp b/lib/glut-3.7.6/progs/advanced97/billboard.dsp deleted file mode 100644 index cf025d1e7..000000000 --- a/lib/glut-3.7.6/progs/advanced97/billboard.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="billboard" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=billboard - 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 "billboard.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 "billboard.mak" CFG="billboard - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "billboard - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "billboard - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "billboard - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "billboard - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "billboard - Win32 Release" -# Name "billboard - Win32 Debug" -# Begin Source File - -SOURCE=.\billboard.c -# End Source File -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# Begin Source File - -SOURCE=.\texture.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/bubble.c b/lib/glut-3.7.6/progs/advanced97/bubble.c deleted file mode 100644 index 8665c2ca2..000000000 --- a/lib/glut-3.7.6/progs/advanced97/bubble.c +++ /dev/null @@ -1,450 +0,0 @@ -#include -#include -#include -#include -#include "texture.h" - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -#ifndef __sgi -/* Most math.h's do not define float versions of the trig functions. */ -#define sinf(x) ((float)sin((x))) -#define cosf(x) ((float)cos((x))) -#endif - -static float transp = .5f; -static int normals; -static float phase = .05; -static int tess = 10; -static float freq = 10.f, scale = .03; -static float transx = 1.0, transy, rotx, roty; -static int ox = -1, oy = -1; -static int mot = 0; -#define PAN 1 -#define ROT 2 - -void -pan(const int x, const int y) { - transx += (x-ox)/5.; - transy -= (y-oy)/5.; - ox = x; oy = y; - glutPostRedisplay(); -} - -void -rotate(const int x, const int y) { - rotx += x-ox; - if (rotx > 360.) rotx -= 360.; - else if (rotx < -360.) rotx += 360.; - roty += y-oy; - if (roty > 360.) roty -= 360.; - else if (roty < -360.) roty += 360.; - ox = x; oy = y; - glutPostRedisplay(); -} - -void -motion(int x, int y) { - if (mot == PAN) pan(x, y); - else if (mot == ROT) rotate(x,y); -} - -void -mouse(int button, int state, int x, int y) { - if(state == GLUT_DOWN) { - switch(button) { - case GLUT_LEFT_BUTTON: - mot = PAN; - motion(ox = x, oy = y); - break; - case GLUT_MIDDLE_BUTTON: - mot = ROT; - motion(ox = x, oy = y); - break; - case GLUT_RIGHT_BUTTON: - break; - } - } else if (state == GLUT_UP) { - mot = 0; - } -} - -void init(char *fname) { - int width, height, components; - GLubyte *image; - - glClearColor(0.0, 0.0, 0.0, 0.0); - glEnable(GL_DEPTH_TEST); - glShadeModel(GL_SMOOTH); - - if (!(image = (GLubyte *)read_texture(fname, &width, &height, &components))) { - perror(fname); - exit(EXIT_FAILURE); - } - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexImage2D(GL_TEXTURE_2D, 0, 4, width, height, 0, - GL_RGBA, GL_UNSIGNED_BYTE, image); - - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); - glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); - - glEnable(GL_TEXTURE_GEN_S); - glEnable(GL_TEXTURE_GEN_T); - glEnable(GL_TEXTURE_2D); - glEnable(GL_CULL_FACE); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_NORMALIZE); - glFrontFace(GL_CW); - glCullFace(GL_BACK); - glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE); - glEnable(GL_COLOR_MATERIAL); -#if 1 - glMaterialf (GL_FRONT, GL_SHININESS, 64.0); - glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, 1); - { - GLfloat pos[4] = { 0, 0, 1, 1}; - glLightfv(GL_LIGHT0, GL_POSITION, pos); - } -#endif - { int e; if (e = glGetError()) printf("error %x\n", e); } - -#if 0 - glClearColor(.2,.2f,.58f,1.f); -#endif - glBlendFunc(GL_SRC_ALPHA, GL_ONE); - glEnable(GL_BLEND); -} - -#if 0 -cube(void) { - glBegin(GL_QUAD_STRIP); - glVertex3f(-1.,-1.,-1.); - glVertex3f(-1., 1.,-1.); - glVertex3f( 1.,-1.,-1.); - glVertex3f( 1., 1.,-1.); - glVertex3f(-1.,-1.,-1.); - glVertex3f(-1.,-1.,-1.); - glVertex3f(-1.,-1.,-1.); - glEnd(); -} -#endif - -/* - * bilinear (longitude/lattitude) tesselation - * x = cos(theta)*cos(phi) - * y = sin(phi) - * z = sin(theta)*cos(phi) - */ - -float *normalize(float *v) { - static float vv[3]; - float len; - - len = v[0]*v[0] + v[1]*v[1] + v[2]*v[2]; - vv[0] = v[0]/len; vv[1] = v[1]/len; vv[2] = v[2]/len; - return vv; -} - -void -bubble(float rad) { - float v[3],s; - float phi, mod; - static float off; - int i, j; -#define N tess - off += phase; -#if 0 - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); -#endif -#if 1 - /* top cap */ - glBegin(GL_TRIANGLE_FAN); - glNormal3f(0.f, 1.f, 0.f); - glVertex3f(0.f, 1.f, 0.f); - v[1] = rad*sinf(phi = M_PI*(N+2)/(2*N)); - mod = 1+scale*sinf(freq*v[1]+off); - s = cosf(phi)*rad*mod; - for(i = 0; i <= 2*N; i++) { - v[0] = s*cosf((M_PI/N)*i); - v[2] = s*sinf((M_PI/N)*i); - glNormal3fv(v); - glVertex3fv(v); - } - glEnd(); -#endif -#if 1 - for(i = 1; i < N-1; i++) { - float v0[3], v1[3], s0, s1; - v0[1] = rad*sinf(phi=M_PI/2+M_PI/N*i); s0 = rad*cosf(phi); - mod = mod = 1+scale*sin(freq*v0[1]+off); s0 *= mod; - v1[1] = rad*sinf(phi=M_PI/2+M_PI/N*(i+1)); s1 = rad*cosf(phi); - mod = mod = 1+scale*sin(freq*v1[1]+off); s1 *= mod; - glBegin(GL_TRIANGLE_STRIP); - for(j = 0; j <= 2*N; j++) { - float x, z; - v0[0] = s0*(x = sinf(M_PI/N*j)); - v0[2] = s0*(z = cosf(M_PI/N*j)); - v1[0] = s1*x; v1[2] = s1*z; - glNormal3fv(normalize(v1)); - glVertex3fv(v1); - glNormal3fv(normalize(v0)); - glVertex3fv(v0); - } - glEnd(); -#if 1 - if (normals) { - float nscale = 1.2; - /*glDisable(GL_LIGHTING);*/ - glBegin(GL_LINES); - /*glColor3f(1.f, 1.f, 0.f);*/ - for(j = 0; j <= 2*N; j++) { - GLfloat x[3], x1, z1, *vv; - v0[0] = s0*(x1 = sinf(M_PI/N*j)); - v0[2] = s0*(z1 = cosf(M_PI/N*j)); - glVertex3fv(vv = normalize(v0)); - x[0] = nscale*vv[0]; x[1] = nscale*vv[1]; x[2] = nscale*vv[2]; - glVertex3fv(x); - - v1[0] = s1*x1; v1[2] = s1*z1; - glVertex3fv(vv = normalize(v1)); - x[0] = nscale*vv[0]; x[1] = nscale*vv[1]; x[2] = nscale*vv[2]; - glVertex3fv(x); - } - glEnd(); - /*glEnable(GL_LIGHTING);*/ - } -#endif - } -#endif -#if 1 - /* bottom cap */ - glBegin(GL_TRIANGLE_FAN); - glNormal3f(0.f, -1.f, 0.f); - glVertex3f(0.f, -1.f, 0.f); - v[1] = -rad*sinf(phi=M_PI*(N+2)/(2*N)); - mod = 1+scale*sin(freq*v[1]+off); - s = cosf(phi)*rad*mod; - for(i = 2*N; i >= 0; --i) { - v[0] = s*cosf((M_PI/N)*i); - v[2] = s*sinf((M_PI/N)*i); - glNormal3fv(v); - glVertex3fv(v); - } - glEnd(); -#endif -} - -void display(void) { -#if 0 - static float phase; -#endif - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - -#if 0 - glMatrixMode(GL_TEXTURE); - glPushMatrix(); - s = sinf(phase); t = s; phase += M_PI/25.f; - if (phase > 2*M_PI) phase -= 2*M_PI; - glTranslatef(.5f, -0.5f, 0.f); - glScalef(.1f, .1f, 1.f); - glTranslatef(s, t, 0.f); - glMatrixMode(GL_MODELVIEW); -#endif - - glPushMatrix(); - glTranslatef(0., 0., -100.+transx); - glRotatef(roty, 1.0, 0.0, 0.0); - glScalef(10.f, 10.f, 10.f); - glColor4f(1.f,1.f,1.f,transp); - bubble(1.0f); - glPopMatrix (); -#if 0 - glMatrixMode(GL_TEXTURE); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); -#endif - glutSwapBuffers(); -} - -void reshape(int w, int h) { - glViewport(0, 0, (GLsizei) w, (GLsizei) h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); -#if 0 - if (w <= h) - glOrtho (-3.5, 3.5, -3.5*(GLfloat)h/(GLfloat)w, - 3.5*(GLfloat)h/(GLfloat)w, -3.5, 10.5); - else - glOrtho (-3.5*(GLfloat)w/(GLfloat)h, - 3.5*(GLfloat)w/(GLfloat)h, -3.5, 3.5, -3.5, 10.5); -#endif - gluPerspective(40., 1.0, 10.0, 200000.); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -void ffunc(void) { - static int state = 1; - if (state ^= 1) - glBlendFunc(GL_SRC_ALPHA, GL_SRC_ALPHA); - else - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); -} - -void tfunc(void) { - static int state = 1; - if (state ^= 1) - glEnable(GL_TEXTURE_2D); - else - glDisable(GL_TEXTURE_2D); -} - -void lfunc(void) { - static int state = 1; - if (state ^= 1) - glEnable(GL_LIGHTING); - else - glDisable(GL_LIGHTING); - glEnable(GL_COLOR_MATERIAL); -} - -void bfunc(void) { - static int state = 1; - if (state ^= 1) { - glEnable(GL_BLEND); - glDisable(GL_DEPTH_TEST); - } else { - glDisable(GL_BLEND); - glEnable(GL_DEPTH_TEST); - } -} - -void cfunc(void) { - static int state = 1; - if (state ^= 1) - glEnable(GL_CULL_FACE); - else - glDisable(GL_CULL_FACE); -} - -void wfunc(void) { - static int state; - glPolygonMode(GL_FRONT_AND_BACK, (state ^= 1) ? GL_LINE : GL_FILL); -} - -void ufunc(void) { - tess *= 2; - if (tess > 160) tess = 160; -} -void Ufunc(void) { - tess /= 2; - if (tess < 10) tess = 10; -} - -void pfunc(void) { - phase += .01; -} - -void Pfunc(void) { - phase -= .01; -} - -void nfunc(void) { - normals ^= 1; -} - -void xfunc(void) { - transp += .1; -} - -void Xfunc(void) { - transp -= .1; -} - -void yfunc(void) { - static int state; - if (state ^= 1) - /*glClearColor(.2,.2f,.58f,0.f);*/ - glClearColor(.0,.0f,.65,0.f); - else - glClearColor(0.f, 0.f, 0.f, 0.f); -} - -void up(void) { - scale += .01f; -} -void down(void) { - scale -= .01f; -} -void left(void) { - freq -= 1.f; -} -void right(void) { - freq += 1.f; -} - -/*ARGSUSED1*/ -void key (unsigned char key, int x, int y) { - switch (key) { - case 'b': bfunc(); break; - case 'c': cfunc(); break; - case 'l': lfunc(); break; - case 't': tfunc(); break; - case 'f': ffunc(); break; - case 'n': nfunc(); break; - case 'u': ufunc(); break; - case 'U': Ufunc(); break; - case 'p': pfunc(); break; - case 'P': Pfunc(); break; - case 'w': wfunc(); break; - case 'x': xfunc(); break; - case 'X': Xfunc(); break; - case 'y': yfunc(); break; - case '\033': exit(EXIT_SUCCESS); break; - default: break; - } -} - -/*ARGSUSED1*/ -void -special(int key, int x, int y) { - switch(key) { - case GLUT_KEY_UP: up(); break; - case GLUT_KEY_DOWN: down(); break; - case GLUT_KEY_LEFT: left(); break; - case GLUT_KEY_RIGHT:right(); break; - } -} - -void animate(void) { - glutPostRedisplay(); -} - -int main(int argc, char** argv) { - glutInitWindowSize(256, 256); - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); - glutInitWindowPosition(100, 100); - glutCreateWindow (argv[0]); - init(argc > 1 ? argv[1] : "../data/spheremap.rgb"); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glutKeyboardFunc(key); - glutSpecialFunc(special); - glutIdleFunc(animate); - glutMouseFunc(mouse); - glutMotionFunc(motion); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/advanced97/bubble.dsp b/lib/glut-3.7.6/progs/advanced97/bubble.dsp deleted file mode 100644 index eff920522..000000000 --- a/lib/glut-3.7.6/progs/advanced97/bubble.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="bubble" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=bubble - 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 "bubble.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 "bubble.mak" CFG="bubble - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "bubble - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "bubble - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "bubble - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "bubble - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "bubble - Win32 Release" -# Name "bubble - Win32 Debug" -# Begin Source File - -SOURCE=.\bubble.c -# End Source File -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# Begin Source File - -SOURCE=.\texture.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/bump.c b/lib/glut-3.7.6/progs/advanced97/bump.c deleted file mode 100644 index 8684f713e..000000000 --- a/lib/glut-3.7.6/progs/advanced97/bump.c +++ /dev/null @@ -1,879 +0,0 @@ -#include -#include -#include -#include -#include -#include "texture.h" - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -#ifndef __sgi -/* Most math.h's do not define float versions of the math functions. */ -#define sqrtf(x) (float)sqrt((x)) -#define cosf(x) (float)cos((x)) -#define sinf(x) (float)sin((x)) -#endif - -#ifdef GL_EXT_blend_subtract -#if defined(_WIN32) && !defined(MESA) -#include -PFNGLBLENDEQUATIONEXTPROC glBlendEquationEXT = NULL; -#endif -static int hasBlendSubtract = 0; -#else -static const int hasBlendSubtract = 0; -#endif - -int winWidth = 512; -int winHeight = 512; - -#ifndef FALSE -enum {FALSE, TRUE}; -#endif -enum {S, T}; /* make array indexing more intuitive */ -enum {X, Y, Z, W}; -enum {R, G, B, A}; -enum {DEFAULT_TEX, ACCUM_TEX, ADD_TEX, SUB_TEX}; /* texture names */ -enum {LIGHT_XY, LIGHT_Z, PGON}; /* what should move */ - -int dblbuf = TRUE; -int accum = FALSE; -int color = FALSE; -int wire = FALSE; -int textureOnly = FALSE; -int lightOnly = FALSE; -int bindtex = FALSE; -int embossed = FALSE; -int steps_xz = 20, steps_y = 20; - -int texture_width; -int texture_height; - -/* is bumpmap shifting on? */ -int bumpEnabled = FALSE; - -int move = LIGHT_XY; - -/* current tangent vector */ -GLfloat curTangent[3]; - -/* current texture coordinate */ -GLfloat curTex[2]; - - -/* current normal */ -GLfloat curNormal[3]; - -/* current light position */ -GLfloat curLight[3]; -GLfloat lightpos[4] = {100.f, 100.f, 100.f, 1.f}; -GLfloat angles[2]; /* x and y angle */ - -unsigned *bumptex; /* pointer to bumpmap texture */ -GLfloat bumpscale = .39f; /* scale down bumpmap texture (a smidgen under .4) */ - -/* TEST PROGRAM */ - -#if !defined(GL_VERSION_1_1) && !defined(GL_VERSION_1_2) -#define glBindTexture glBindTextureEXT -#endif - -#define CHECK_ERROR(str) \ -{ \ - GLenum error; \ - if(error = glGetError()) \ - printf("GL Error: %s (%s)\n", gluErrorString(error), str); \ -} - -void -bumpEnable(void) -{ - bumpEnabled = TRUE; -} - -void -bumpDisable(void) -{ - bumpEnabled = FALSE; -} - -void -reshape(int wid, int ht) -{ - winWidth = wid; - winHeight = ht; - glViewport(0, 0, wid, ht); -} - - - -void -mouse(int button, int state, int x, int y) -{ - if(state == GLUT_DOWN) - switch(button) - { - case GLUT_LEFT_BUTTON: /* move the light */ - move = LIGHT_XY; - lightpos[X] = (x - winWidth/2) * 300.f/winWidth; - lightpos[Y] = (winHeight/2 - y) * 300.f/winHeight; - glutPostRedisplay(); - break; - case GLUT_MIDDLE_BUTTON: - move = PGON; - angles[X] = (x - winWidth/2) * 180.f/winWidth; - angles[Y] = (y - winHeight/2) * 180.f/winHeight; - glutPostRedisplay(); - break; - case GLUT_RIGHT_BUTTON: /* move the polygon */ - move = LIGHT_Z; - lightpos[Z] = (winHeight/2 - y) * 300.f/winWidth; - glutPostRedisplay(); - break; - } -} - -void -motion(int x, int y) -{ - switch(move) - { - case LIGHT_XY: - lightpos[X] = (x - winWidth/2) * 300.f/winWidth; - lightpos[Y] = (winHeight/2 - y) * 300.f/winHeight; - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - glutPostRedisplay(); - break; - case LIGHT_Z: - lightpos[Z] = (winHeight/2 - y) * 300.f/winWidth; - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - glutPostRedisplay(); - break; - case PGON: - angles[X] = (x - winWidth/2) * 180.f/winWidth; - angles[Y] = (y - winHeight/2) * 180.f/winHeight; - glutPostRedisplay(); - break; - } -} - - -/* -** Create a single component texture map -*/ -GLfloat *make_texture(int maxs, int maxt) -{ - int s, t; - GLfloat *texture; - - /* assumed format; LUMINANCE */ - texture = (GLfloat *)malloc(maxs * maxt * sizeof(GLfloat)); - for(t = 0; t < maxt; t++) { - for(s = 0; s < maxs; s++) { - texture[s + maxs * t] = ((s >> 3) & 0x1) ^ ((t >> 3) & 0x1); - } - } - return texture; -} - -/* get current light position in object space */ -void -bumpLightPos(GLfloat *x, GLfloat *y, GLfloat *z) -{ - GLdouble mvmatrix[16]; - GLint viewport[4]; - static GLdouble projmatrix[16]; /* to make them zero */ - GLfloat light[4]; - GLdouble Ex, Ey, Ez; - GLdouble Ox, Oy, Oz; - - CHECK_ERROR("bumpLightPos"); - glGetLightfv(GL_LIGHT0, GL_POSITION, light); - Ex = light[X]; Ey = light[Y]; Ez = (light[Z] + 1)/2.; - - CHECK_ERROR("bumpLightPos"); - glGetDoublev(GL_MODELVIEW_MATRIX, mvmatrix); - - /* identity projection matrix */ - projmatrix[0] = projmatrix[5] = projmatrix[10] = projmatrix[15] = 1.; - - /* identity viewport */ - viewport[0] = viewport[1] = -1; - viewport[2] = viewport[3] = 2; - - /* - ** use the inverse of the modelview matrix to - ** transform light from eye to object space - */ - gluUnProject(Ex, Ey, Ez, mvmatrix, projmatrix, viewport, &Ox, &Oy, &Oz); - - *x = Ox; *y = Oy; *z = Oz; - CHECK_ERROR("bumpLightPos"); -} - - -/* compute binormal from current normal and tangent vector, using cross prod */ -/* assuming normal and tangent are already normalized */ -void -biNormal(GLfloat *x, GLfloat *y, GLfloat *z) -{ - /* normal tangent = binormal */ - - *x = curNormal[Y] * curTangent[Z] - curNormal[Z] * curTangent[Y]; - *y = curNormal[Z] * curTangent[X] - curNormal[X] * curTangent[Z]; - *z = curNormal[X] * curTangent[Y] - curNormal[Y] * curTangent[X]; -} - -void -Normalize2f(GLfloat *x, GLfloat *y) -{ - GLfloat len; - len = *x * *x + *y * *y; - len = sqrtf(len); - - *x /= len; - *y /= len; -} - -/* rotate point by supplied rotatation matrix */ -void -Rotate(GLfloat *rot, GLfloat *light, GLfloat *s, GLfloat *t) -{ - GLfloat r; - r = rot[3] * light[X] + rot[4] * light[Y] + rot[5] * light[Z]; - if(r < 0.f) /* light below surface */ - { - *s = 0.f; - *t = 0.f; - return; - } - *s = rot[0] * light[X] + rot[1] * light[Y] + rot[2] * light[Z]; - *t = rot[6] * light[X] + rot[7] * light[Y] + rot[8] * light[Z]; - Normalize2f(s, t); -} - - -/* find out where the current normal is */ -void -bumpNormal3f(GLfloat x, GLfloat y, GLfloat z) -{ - curNormal[X] = x; - curNormal[Y] = y; - curNormal[Z] = z; - glNormal3f(x, y, z); -} - -void -bumpTangent3f(GLfloat x, GLfloat y, GLfloat z) -{ - curTangent[X] = x; - curTangent[Y] = y; - curTangent[Z] = z; -} - -/* save the texture coordinate call; will shift to do bumpmapping */ -void -bumpTexCoord2f(GLfloat s, GLfloat t) -{ - curTex[S] = s; - curTex[T] = t; -} - -/* -** use current tangent vector to compute texture coordinate shift -** then apply it by passing through vertex call -*/ -void -bumpVertex3f(GLfloat x, GLfloat y, GLfloat z) -{ - - GLfloat Light[3]; /* light in tangent space */ - GLfloat length; - GLfloat s, t; /* tranformed light, used to shift */ - GLfloat rot[9]; /* rotation matrix (just enought for x and y */ - GLfloat Bx, By, Bz; /* binormal axis */ - - if(bumpEnabled) - { - - /* get current light position */ - Light[X] = curLight[X]; - Light[Y] = curLight[Y]; - Light[Z] = curLight[Z]; - - /* find light vector from vertex */ - Light[X] -= x; Light[Y] -= y; Light[Z] -= z; - - length = 1.f/ sqrtf(Light[X] * Light[X] + - Light[Y] * Light[Y] + - Light[Z] * Light[Z]); - - Light[X] *= length; Light[Y] *= length; Light[Z] *= length; - - /* create rotation matrix (rotate into tangent space) */ - - biNormal(&Bx, &By, &Bz); /* find binormal axis */ - - rot[0] = curTangent[X]; rot[1] = curTangent[Y]; rot[2] = curTangent[Z]; - rot[3] = curNormal[X]; rot[4] = curNormal[Y]; rot[5] = curNormal[Z]; - rot[6] = Bx; rot[7] = By; rot[8] = Bz; - - Rotate(rot, Light, &s, &t); - - /* shift coordinates in opposite direction of desired texture shift */ - glTexCoord2f(curTex[S] - s/texture_width, curTex[T] - t/texture_height); - } - else - glTexCoord2f(curTex[S], curTex[T]); - - glVertex3f(x, y, z); /* pass on the vertex call */ -} - -void -bumpBegin(GLenum prim) -{ - if(bumpEnabled) - { - /* get light position; map back from eye to object space */ - bumpLightPos(&curLight[X], &curLight[Y], &curLight[Z]); - } - glBegin(prim); -} - -void draw(void) -{ - int i, j; - GLfloat Vx, Vy, Vz; /* vertex */ - GLfloat Tx, Ty, Tz; /* tangent */ - GLfloat Nx, Ny, Nz; /* normal */ - GLfloat c, s; /* cos, sin */ - - CHECK_ERROR("start of draw()"); - - - Ny = 0.f; - Ty = 0.f; - /* v(i, j) v(i+1, j), v(i+1, j+1), v(i, j+1) */ - bumpBegin(GL_QUADS); - for(j = 0; j < steps_y; j ++) - for(i = 0; i < steps_xz; i++) /* 180 -> 0 degrees */ - { - /* v(i, j) */ - c = cosf(M_PI * (1.f - (GLfloat)i/(steps_xz - 1))); - s = sinf(M_PI * (1.f - (GLfloat)i/(steps_xz - 1))); - Vx = 100 * c; - Vy = j * 200.f/steps_y - 100.f; - Vz = 100 * s - 100.f; - Nx = c; - Nz = s; - Tx = s; - Ty = -c; - Tz = 0; - bumpNormal3f(Nx, Ny, Nz); - bumpTangent3f(Tx, Ty, Tz); - bumpTexCoord2f(i/(GLfloat)steps_xz, j/(GLfloat)steps_y); - bumpVertex3f(Vx, Vy, Vz); - - /* v(i+1, j) */ - c = cosf(M_PI * (1.f - (GLfloat)(i + 1)/(steps_xz - 1))); - s = sinf(M_PI * (1.f - (GLfloat)(i + 1)/(steps_xz - 1))); - Vx = 100 * c; - Vz = 100 * s - 100.f; - Nx = c; - Nz = s; - Tx = s; - Ty = -c; - bumpNormal3f(Nx, Ny, Nz); - bumpTangent3f(Tx, Ty, Tz); - bumpTexCoord2f((i + 1)/(GLfloat)steps_xz, j/(GLfloat)steps_y); - bumpVertex3f(Vx, Vy, Vz); - - /* v(i+1, j+1) */ - Vy = (j + 1) * 200.f/steps_y - 100.f; - bumpNormal3f(Nx, Ny, Nz); - bumpTangent3f(Tx, Ty, Tz); - bumpTexCoord2f((i + 1)/(GLfloat)steps_xz, (j + 1)/(GLfloat)steps_y); - bumpVertex3f(Vx, Vy, Vz); - - /* v(i, j+1) */ - c = cosf(M_PI * (1.f - (GLfloat)i/(steps_xz - 1))); - s = sinf(M_PI * (1.f - (GLfloat)i/(steps_xz - 1))); - Vx = 100 * c; - Vz = 100 * s - 100.f; - Nx = c; - Nz = s; - Tx = s; - Ty = -c; - bumpNormal3f(Nx, Ny, Nz); - bumpTangent3f(Tx, Ty, Tz); - bumpTexCoord2f(i/(GLfloat)steps_xz, (j + 1)/(GLfloat)steps_y); - bumpVertex3f(Vx, Vy, Vz); - } - glEnd(); - - CHECK_ERROR("end of draw()"); -} - - - -/* Called when window needs to be redrawn */ -void redraw_blendext(void) -{ - GLUquadricObj *obj; - void draw(void); - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - - - glLoadIdentity(); - - gluLookAt(0., 0., 650., 0., 0., 0., 0., 1., 0.); - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - - glPushMatrix(); - glTranslatef(lightpos[X], lightpos[Y], lightpos[Z]); - obj = gluNewQuadric(); - gluSphere(obj, 7., 10, 10); - gluDeleteQuadric(obj); - glPopMatrix(); - - glRotatef(angles[X], 0.f, 1.f, 0.f); - glRotatef(angles[Y], 1.f, 0.f, 0.f); - - if(textureOnly) - { - glEnable(GL_TEXTURE_2D); - draw(); - glDisable(GL_TEXTURE_2D); - } - else if(lightOnly) - { - /* draw "z" diffuse component */ - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - draw(); - glDisable(GL_LIGHTING); - } - else /* bumpmapping */ - { - - /* find N dot L */ - - /* draw "z" diffuse component */ - /* also do ambient here */ - if(!embossed) - { - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - draw(); - glDisable(GL_LIGHTING); - } - /* add in shifted values */ - glEnable(GL_TEXTURE_2D); - glEnable(GL_BLEND); - glBlendFunc(GL_ONE, GL_ONE); - bumpEnable(); /* shift texture coords */ - draw(); - bumpDisable(); - -#ifdef GL_EXT_blend_subtract - if (hasBlendSubtract) { - /* subtract unshifted */ - glBlendEquationEXT(GL_FUNC_REVERSE_SUBTRACT_EXT); - draw(); - glBlendEquationEXT(GL_FUNC_ADD_EXT); - } -#endif - glDisable(GL_BLEND); - glDisable(GL_TEXTURE_2D); - - if(color) - { - /* Modulate the color texture with N dot L */ - glEnable(GL_TEXTURE_2D); - glEnable(GL_BLEND); - glBlendFunc(GL_DST_COLOR, GL_ZERO); - glBindTexture(GL_TEXTURE_2D, 1); /* use color texture */ - draw(); - glBindTexture(GL_TEXTURE_2D, 0); - glDisable(GL_BLEND); - glDisable(GL_TEXTURE_2D); - } - - } - - /* scale up the image */ - - glPixelTransferf(GL_RED_SCALE, 2.f); - glPixelTransferf(GL_GREEN_SCALE, 2.f); - glPixelTransferf(GL_BLUE_SCALE, 2.f); - glCopyPixels(0, 0, winWidth, winHeight, GL_COLOR); - - CHECK_ERROR("OpenGL Error in redraw()"); - - if(dblbuf) - glutSwapBuffers(); - else - glFlush(); -} - - -/* Called when window needs to be redrawn */ -void redraw_accum(void) -{ - GLUquadricObj *obj; - void draw(void); - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - - - glLoadIdentity(); - - gluLookAt(0., 0., 650., 0., 0., 0., 0., 1., 0.); - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - - glRotatef(angles[X], 0.f, 1.f, 0.f); - glRotatef(angles[Y], 1.f, 0.f, 0.f); - - if(textureOnly) - { - glEnable(GL_TEXTURE_2D); - draw(); - glDisable(GL_TEXTURE_2D); - } - else if(lightOnly) - { - /* draw "z" diffuse component */ - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - draw(); - glDisable(GL_LIGHTING); - } - else /* bumpmapping */ - { - - CHECK_ERROR("start"); - /* draw "z" diffuse component */ - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - draw(); - glAccum(GL_LOAD, .5f); - CHECK_ERROR("load"); - glDisable(GL_LIGHTING); - - /* draw shifted */ - glEnable(GL_TEXTURE_2D); - bumpEnable(); - draw(); - glAccum(GL_ACCUM, .5f); - bumpDisable(); - - /* subtract unshifted */ - draw(); - glAccum(GL_ACCUM, -.5f); - - glDisable(GL_TEXTURE_2D); - glAccum(GL_RETURN, 2.f); - - if(color) - { - /* Modulate the color texture with N dot L */ - glEnable(GL_TEXTURE_2D); - glEnable(GL_BLEND); - glBlendFunc(GL_DST_COLOR, GL_ZERO); - glBindTexture(GL_TEXTURE_2D, 1); /* use color texture */ - draw(); - glBindTexture(GL_TEXTURE_2D, 0); - glDisable(GL_BLEND); - glDisable(GL_TEXTURE_2D); - } - - } - - - - CHECK_ERROR("OpenGL Error in redraw()"); - - glPushMatrix(); - glLoadIdentity(); - gluLookAt(0., 0., 650., 0., 0., 0., 0., 1., 0.); - glTranslatef(lightpos[X], lightpos[Y], lightpos[Z]); - obj = gluNewQuadric(); - gluSphere(obj, 7., 10, 10); - gluDeleteQuadric(obj); - glPopMatrix(); - - - if(dblbuf) - glutSwapBuffers(); - else - glFlush(); -} - -/* ARGSUSED1 */ -void key(unsigned char key, int x, int y) -{ - switch(key) - { - case 't': - if(textureOnly) - textureOnly = FALSE; - else - textureOnly = TRUE; - glutPostRedisplay(); - break; - case 'l': - if(lightOnly) - lightOnly = FALSE; - else - lightOnly = TRUE; - glutPostRedisplay(); - break; - case 'e': - if(embossed) - embossed = FALSE; - else - embossed = TRUE; - glutPostRedisplay(); - break; - case 'B': /* make bumps taller */ - bumpscale += .01f; - printf("bump map scale = %.2f\n", bumpscale); - glPixelTransferf(GL_RED_SCALE, bumpscale); - glPixelTransferf(GL_GREEN_SCALE, bumpscale); - glPixelTransferf(GL_BLUE_SCALE, bumpscale); - - - glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, - texture_width, texture_height, 0, GL_RGBA, - GL_UNSIGNED_BYTE, bumptex); - glutPostRedisplay(); - break; - case 'b': /* make bumps flatter */ - bumpscale -= .01f; - if(bumpscale < 0.f) - bumpscale = 0.f; - printf("bump map scale = %.2f\n", bumpscale); - glPixelTransferf(GL_RED_SCALE, bumpscale); - glPixelTransferf(GL_GREEN_SCALE, bumpscale); - glPixelTransferf(GL_BLUE_SCALE, bumpscale); - - - glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, - texture_width, texture_height, 0, GL_RGBA, - GL_UNSIGNED_BYTE, bumptex); - glutPostRedisplay(); - break; - case 'c': - if(color == TRUE) - color = FALSE; - else - color = TRUE; - glutPostRedisplay(); - break; - case 'w': - if(wire == TRUE) - { - glPolygonMode(GL_FRONT, GL_FILL); - wire = FALSE; - } - else - { - glPolygonMode(GL_FRONT, GL_LINE); - wire = TRUE; - } - glutPostRedisplay(); - break; - case 'x': - steps_xz -= 2; - if(steps_xz < 1) - steps_xz = 1; - glutPostRedisplay(); - break; - case 'X': - steps_xz += 2; - glutPostRedisplay(); - break; - case 'y': - steps_y -= 2; - if(steps_y < 1) - steps_y = 1; - glutPostRedisplay(); - break; - case 'Y': - steps_y += 2; - glutPostRedisplay(); - break; - case '\033': - exit(0); - break; - case 'h': - case '?': - default: - fprintf(stderr, - "Keyboard commands:\n" - "t-texture only\n" - "l-light only\n" - "c-color texture\n" - "e-embossed (horizontal part)\n" - "w-toggle wireframe\n" - "B-increase bumps b-decrease bumps\n"); - break; - } - -} - - - -main(int argc, char *argv[]) -{ - unsigned *tex; - GLfloat lightpos[4]; - GLfloat diffuse[4]; - GLboolean valid; - int texcomps, texwid, texht; - const char *version; - char varray[32]; - - glutInit(&argc, argv); - glutInitWindowSize(winWidth, winHeight); - if(argc > 1) - { - char *args = argv[1]; - int done = FALSE; - while(!done) - { - switch(*args) - { - case 's': /* single buffer */ - printf("Single Buffered\n"); - dblbuf = FALSE; - break; - case 'a': /* use accumulation buffer */ - printf("Use accumulation buffer\n"); - accum = TRUE; - break; - case '-': /* do nothing */ - break; - case 0: - done = TRUE; - break; - } - args++; - } - } - if(dblbuf) - if(accum) - glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE|GLUT_DEPTH|GLUT_ACCUM); - else - glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE|GLUT_DEPTH); - else - if(accum) - glutInitDisplayMode(GLUT_RGBA|GLUT_DEPTH|GLUT_ACCUM); - else - glutInitDisplayMode(GLUT_RGBA|GLUT_DEPTH); - - (void)glutCreateWindow("bump mapping example program"); - if(accum) - glutDisplayFunc(redraw_accum); - else - glutDisplayFunc(redraw_blendext); - - glutKeyboardFunc(key); - glutMouseFunc(mouse); - glutMotionFunc(motion); - glutReshapeFunc(reshape); - - - - version = (char *) glGetString(GL_VERSION); - strncpy(varray, version, strcspn(version, " ")); - printf("%s\n", version); - if(atof(varray) > 1.f) - bindtex = TRUE; - else - bindtex = FALSE; - - glRasterPos3i(-1, -1, -1); - glGetBooleanv(GL_CURRENT_RASTER_POSITION_VALID, &valid); - if(!valid) - printf("invalid raster position!\n"); - /* draw a perspective scene */ - glMatrixMode(GL_PROJECTION); - glFrustum(-150., 150., -150., 150., 500., 800.); - glMatrixMode(GL_MODELVIEW); - - /* turn on features */ - glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_LEQUAL); - - /* remove back faces to speed things up */ - glCullFace(GL_BACK); - - - diffuse[R] = diffuse[G] = diffuse[B] = .4f; - diffuse[A] = 1.f; - glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuse); - bumptex = read_texture("../data/opengl.bw", &texture_width, - &texture_height, &texcomps); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - - if(!accum) - { - /* scale to match maximum z (default Kd = .8, default Ld = 1. */ - /* divide by 2 to stay in range of 0 to 1 */ - glPixelTransferf(GL_RED_SCALE, bumpscale); - glPixelTransferf(GL_GREEN_SCALE, bumpscale); - glPixelTransferf(GL_BLUE_SCALE, bumpscale); - } - - glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, - texture_width, texture_height, 0, GL_RGBA, - GL_UNSIGNED_BYTE, bumptex); - - tex = read_texture("../data/plank.rgb", &texwid, &texht, &texcomps); - - glBindTexture(GL_TEXTURE_2D, 1); /* for color */ - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - - glPixelTransferf(GL_RED_SCALE, 1.f); - glPixelTransferf(GL_GREEN_SCALE, 1.f); - glPixelTransferf(GL_BLUE_SCALE, 1.f); - - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, - texwid, texht, 0, GL_RGBA, - GL_UNSIGNED_BYTE, tex); - - glBindTexture(GL_TEXTURE_2D, 0); - - free(tex); - - lightpos[X] = lightpos[Y] = 0.f; - lightpos[Z] = -90.f; - lightpos[W] = 1.f; - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - glDisable(GL_DITHER); - - CHECK_ERROR("end of main"); - -#ifdef GL_EXT_blend_subtract - if(!glutExtensionSupported("GL_EXT_blend_subtract")) { - fprintf(stderr, - "bump: requires OpenGL blend subtract extension to operate correctly.\n"); - hasBlendSubtract = 0; - } else { - hasBlendSubtract = 1; -#if defined(_WIN32) && !defined(MESA) - glBlendEquationEXT = (PFNGLBLENDEQUATIONEXTPROC) wglGetProcAddress("glBlendEquationEXT"); - if (glBlendEquationEXT == NULL) { - hasBlendSubtract = 0; - } -#endif - } -#endif - - key('?', 0, 0); /* startup message */ - glutMainLoop(); - return(0); -} diff --git a/lib/glut-3.7.6/progs/advanced97/bump.dsp b/lib/glut-3.7.6/progs/advanced97/bump.dsp deleted file mode 100644 index f50d90f32..000000000 --- a/lib/glut-3.7.6/progs/advanced97/bump.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="bump" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=bump - 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 "bump.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 "bump.mak" CFG="bump - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "bump - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "bump - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "bump - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "bump - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "bump - Win32 Release" -# Name "bump - Win32 Debug" -# Begin Source File - -SOURCE=.\bump.c -# End Source File -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# Begin Source File - -SOURCE=.\texture.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/chromakey.c b/lib/glut-3.7.6/progs/advanced97/chromakey.c deleted file mode 100644 index 4479227a0..000000000 --- a/lib/glut-3.7.6/progs/advanced97/chromakey.c +++ /dev/null @@ -1,262 +0,0 @@ -#include -#include -#include -#include -#include -#include "texture.h" - -static char defaultFile0[] = "../data/sgi.bw"; -static char defaultFile1[] = "../data/mandrill.rgb"; -static char defaultFile2[] = "../data/brick.rgb"; -GLuint *img0, *img1, *img2; -GLsizei w, h; -GLsizei w0, w1, w2, h0, h1, h2; -GLint comp; -GLfloat key[3] = {0, 0, 0}; - -#define RW 0.3086 -#define GW 0.6094 -#define BW 0.0820 - -void init(void) -{ -} - -GLuint *load_img(const char *fname, GLsizei *imgW, GLsizei *imgH) -{ - GLuint *img; - - img = read_texture(fname, imgW, imgH, &comp); - if (!img) { - fprintf(stderr, "Could not open %s\n", fname); - exit(1); - } - - return img; -} - -GLuint * -resize_img(GLuint *img, GLsizei curW, GLsizei curH) -{ - - glPixelZoom((float)w / (float)curW, (float)h / (float)curH); - glRasterPos2i(0, 0); - glDrawPixels(curW, curH, GL_RGBA, GL_UNSIGNED_BYTE, img); - free(img); - img = (GLuint *)malloc(w * h * sizeof(GLuint)); - if (!img) { - fprintf(stderr, "Malloc of %d bytes failed.\n", - curW * curH * sizeof(GLuint)); - exit(1); - } - glPixelZoom(1, 1); - glReadPixels(0, 0, w, h, GL_RGBA, GL_UNSIGNED_BYTE, img); - - return img; -} - -void reshape(GLsizei winW, GLsizei winH) -{ - glViewport(0, 0, 2*w, 2*h); - glLoadIdentity(); - glOrtho(0, 2*w, 0, 2*h, 0, 5); -} - -void compute_matte(void) -{ - glClear(GL_ACCUM_BUFFER_BIT); - - /* draw rectangle in (key color + 1) / 2 */ - glBegin(GL_QUADS); - glColor3f(key[0], key[1], key[2]); - glVertex2f(0, 0); - glVertex2f(w, 0); - glVertex2f(w, h); - glVertex2f(0, h); - glEnd(); - glFlush(); - - /* negate & accumulate */ - glAccum(GL_LOAD, -1); - - /* compute & return (image - key) */ - glRasterPos2f(0, 0); - glDrawPixels(w, h, GL_RGBA, GL_UNSIGNED_BYTE, img0); - glAccum(GL_ACCUM, 1); - glAccum(GL_RETURN, 1); - - /* move to right hand side of window */ - glRasterPos2f(w, 0); - glCopyPixels(0, 0, w, h, GL_COLOR); - - /* compute & return (key - image) */ - glEnable(GL_SCISSOR_TEST); - glScissor(0, 0, w, h); - glAccum(GL_MULT, -1); - glAccum(GL_RETURN, 1); - glScissor(0, 0, 2*w, h); - glDisable(GL_SCISSOR_TEST); - - /* assemble to get fabs(key - image) */ - glBlendFunc(GL_ONE, GL_ONE); - glEnable(GL_BLEND); - glRasterPos2i(0, 0); - glCopyPixels(w, 0, w, h, GL_COLOR); - glDisable(GL_BLEND); - - /* assemble into alpha channel */ - { - GLfloat mat[] = { - RW, RW, RW, RW, - GW, GW, GW, GW, - BW, BW, BW, BW, - 0, 0, 0, 0, - }; - glMatrixMode(GL_COLOR); - glLoadMatrixf(mat); - - glRasterPos2i(w, 0); - glCopyPixels(0, 0, w, h, GL_COLOR); - glLoadIdentity(); - glMatrixMode(GL_MODELVIEW); - } - - /* copy matte to right */ - glRasterPos2i(0, 0); - glCopyPixels(w, 0, w, h, GL_COLOR); - - /* draw the third image */ - glColorMask(1, 1, 1, 0); - glRasterPos2i(w, 0); - glDrawPixels(w, h, GL_RGBA, GL_UNSIGNED_BYTE, img2); - glColorMask(1, 1, 1, 1); - - glBlendFunc(GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA); - glEnable(GL_BLEND); - glRasterPos2i(w, 0); - glDrawPixels(w, h, GL_RGBA, GL_UNSIGNED_BYTE, img1); - - /* this is for matte display... */ - glColor3f(1, 1, 1); - glBegin(GL_QUADS); - glVertex2f(0, 0); - glVertex2f(w, 0); - glVertex2f(w, h); - glVertex2f(0, h); - glEnd(); - - glDisable(GL_BLEND); -} - -void draw(void) -{ - GLenum err; - static int first = 1; - - if (first) { - printf("Scaling images to %d by %d\n", w, h); - - - if (w0 != w || h0 != h) { - img0 = resize_img(img0, w0, h0); - - } - if (w1 != w || h1 != h) { - img1 = resize_img(img1, w1, h1); - } - if (w2 != w || h2 != h) { - img2 = resize_img(img2, w2, h2); - } - first = 0; - } - - - glClear(GL_COLOR_BUFFER_BIT); - compute_matte(); - - glRasterPos2i(w/2, h); - glDrawPixels(w, h, GL_RGBA, GL_UNSIGNED_BYTE, img0); - - err = glGetError(); - if (err != GL_NO_ERROR) printf("Error: %s\n", gluErrorString(err)); -} - -/* ARGSUSED */ -void button(int button, int state, int xpos, int ypos) -{ - if (state != GLUT_UP) return; - - ypos = 2*h - ypos; - glReadPixels(xpos, ypos, 1, 1, GL_RGB, GL_FLOAT, key); - printf("Key is (%f %f %f)\n", key[0], key[1], key[2]); - draw(); -} - -/* ARGSUSED1 */ -void keyPress(unsigned char whichKey, int x, int y) -{ - if (whichKey == 27) exit(0); -} - -void show_usage(void) -{ - fprintf(stderr, "Usage:\n"); - fprintf(stderr, "chromakey mattefile file0 file1 [matteR matteG matteB]\n"); - fprintf(stderr, "chromakey mattefileAndfile0 file1 [matteR matteG matteB]\n"); -} - -main(int argc, char *argv[]) -{ - char *fileName0 = defaultFile0, *fileName1 = defaultFile1, - *fileName2 = defaultFile2; - - glutInit(&argc, argv); - if (argc > 1) { - fileName0 = fileName1 = argv[1]; - } - if (argc > 2) { - fileName2 = argv[2]; - } - if (argc > 3) { - fileName1 = fileName2; - fileName2 = argv[3]; - } - if (argc > 4) { - if (argc == 6 || argc == 7) { - key[0] = atof(argv[argc-3]); - key[1] = atof(argv[argc-2]); - key[2] = atof(argv[argc-1]); - } else { - show_usage(); - exit(1); - } - } - - printf("Matte file is %s\n", fileName0); - printf("Image file 1 is %s\n", fileName1); - printf("Image file 2 is %s\n", fileName2); - printf("Key is (%f %f %f)\n", key[0], key[1], key[2]); - img0 = load_img(fileName0, &w0, &h0); - img1 = load_img(fileName1, &w1, &h1); - img2 = load_img(fileName2, &w2, &h2); - -#define MAX(a, b) ((a) > (b) ? (a) : (b)) - w = MAX(MAX(w0, w1), w2); - h = MAX(MAX(h0, h1), h2); - - glutInitWindowSize(2*w, 2*h); - glutInitWindowPosition(0, 0); - glutInitDisplayMode(GLUT_RGBA | GLUT_ACCUM | GLUT_ALPHA); - glutCreateWindow(argv[0]); - glutDisplayFunc(draw); - glutKeyboardFunc(keyPress); - glutReshapeFunc(reshape); - glutMouseFunc(button); - - - init(); - - reshape(w, h); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/advanced97/chromakey.dsp b/lib/glut-3.7.6/progs/advanced97/chromakey.dsp deleted file mode 100644 index b3ef23f7c..000000000 --- a/lib/glut-3.7.6/progs/advanced97/chromakey.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="chromakey" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=chromakey - 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 "chromakey.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 "chromakey.mak" CFG="chromakey - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "chromakey - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "chromakey - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "chromakey - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "chromakey - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "chromakey - Win32 Release" -# Name "chromakey - Win32 Debug" -# Begin Source File - -SOURCE=.\chromakey.c -# End Source File -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# Begin Source File - -SOURCE=.\texture.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/chromakey_fancy.c b/lib/glut-3.7.6/progs/advanced97/chromakey_fancy.c deleted file mode 100644 index ab42afb3b..000000000 --- a/lib/glut-3.7.6/progs/advanced97/chromakey_fancy.c +++ /dev/null @@ -1,325 +0,0 @@ -#include -#include -#include -#include -#include -#include "texture.h" - -static char defaultFile0[] = "../data/swamp.rgb"; -static char defaultFile1[] = "../data/swamp.rgb"; -static char defaultFile2[] = "../data/mandrill.rgb"; -GLuint *img0, *img1, *img2; -GLsizei w, h; -GLsizei w0, w1, w2, h0, h1, h2; -GLint comp; -GLfloat key[3] = {0, 0, 0}; - -#define RW 0.3086 -#define GW 0.6094 -#define BW 0.0820 - -/* key values less than or equal to lower fudge map to totally - * transparent... */ -GLfloat lowerfudge = .2; -GLfloat upperfudge = .8; - -void init(void) -{ -} - -GLuint *load_img(const char *fname, GLsizei *imgW, GLsizei *imgH) -{ - GLuint *img; - - img = read_texture(fname, imgW, imgH, &comp); - if (!img) { - fprintf(stderr, "Could not open %s\n", fname); - exit(1); - } - - return img; -} - -GLuint * -resize_img(GLuint *img, GLsizei curW, GLsizei curH) -{ - - glPixelZoom((float)w / (float)curW, (float)h / (float)curH); - glRasterPos2i(0, 0); - glDrawPixels(curW, curH, GL_RGBA, GL_UNSIGNED_BYTE, img); - free(img); - img = (GLuint *)malloc(w * h * sizeof(GLuint)); - if (!img) { - fprintf(stderr, "Malloc of %d bytes failed.\n", - curW * curH * sizeof(GLuint)); - exit(1); - } - glPixelZoom(1, 1); - glReadPixels(0, 0, w, h, GL_RGBA, GL_UNSIGNED_BYTE, img); - - return img; -} - -void reshape(GLsizei winW, GLsizei winH) -{ - glViewport(0, 0, 2*w, 2*h); - glLoadIdentity(); - glOrtho(0, 2*w, 0, 2*h, 0, 5); -} - -void compute_matte(void) -{ - glClear(GL_ACCUM_BUFFER_BIT); - - /* draw rectangle in (key color + 1) / 2 */ - glBegin(GL_QUADS); - glColor3f(key[0], key[1], key[2]); - glVertex2f(0, 0); - glVertex2f(w, 0); - glVertex2f(w, h); - glVertex2f(0, h); - glEnd(); - glFlush(); - - /* negate & accumulate */ - glAccum(GL_LOAD, -1); - - /* compute & return (image - key) */ - glRasterPos2f(0, 0); - glDrawPixels(w, h, GL_RGBA, GL_UNSIGNED_BYTE, img0); - glAccum(GL_ACCUM, 1); - glAccum(GL_RETURN, 1); - - /* move to right hand side of window */ - glRasterPos2f(w, 0); - glCopyPixels(0, 0, w, h, GL_COLOR); - - /* compute & return (key - image) */ - glEnable(GL_SCISSOR_TEST); - glScissor(0, 0, w, h); - glAccum(GL_MULT, -1); - glAccum(GL_RETURN, 1); - glScissor(0, 0, 2*w, h); - glDisable(GL_SCISSOR_TEST); - - /* assemble to get fabs(key - image) */ - glBlendFunc(GL_ONE, GL_ONE); - glEnable(GL_BLEND); - glRasterPos2i(0, 0); - glCopyPixels(w, 0, w, h, GL_COLOR); - glDisable(GL_BLEND); - - /* assemble into alpha channel */ - { - GLfloat mat[] = { - RW, RW, RW, RW, - GW, GW, GW, GW, - BW, BW, BW, BW, - 0, 0, 0, 0, - }; - glMatrixMode(GL_COLOR); - glLoadMatrixf(mat); - - glRasterPos2i(w, 0); - glCopyPixels(0, 0, w, h, GL_COLOR); - glLoadIdentity(); - glMatrixMode(GL_MODELVIEW); - - /* do a second copy because sbias comes after color matrix in the - * transfer pipeline. could avoid this by using the post color matrix - * scale bias... */ - if (upperfudge - lowerfudge) { - glPixelTransferf(GL_ALPHA_SCALE, 1./(upperfudge - lowerfudge)); - glPixelTransferf(GL_ALPHA_BIAS, -lowerfudge/(upperfudge - lowerfudge)); - } else { - /* move such that upper/lowerfudge maps to .5, then quantize with - * 2-entry pixel map. */ - GLushort quantize[] = {0, 0xffff}; - glPixelTransferf(GL_ALPHA_BIAS, .5 - upperfudge); - glPixelMapusv(GL_PIXEL_MAP_A_TO_A, 2, quantize); - glPixelTransferi(GL_MAP_COLOR, 1); - } - glRasterPos2i(w, 0); - glCopyPixels(w, 0, w, h, GL_COLOR); - glPixelTransferf(GL_ALPHA_SCALE, 1); - glPixelTransferf(GL_ALPHA_BIAS, 0); - glPixelTransferi(GL_MAP_COLOR, 0); - } - - - /* copy matte to right */ - glRasterPos2i(0, 0); - glCopyPixels(w, 0, w, h, GL_COLOR); - - /* draw the third image */ - glColorMask(1, 1, 1, 0); - glRasterPos2i(w, 0); - glDrawPixels(w, h, GL_RGBA, GL_UNSIGNED_BYTE, img2); - glColorMask(1, 1, 1, 1); - - glBlendFunc(GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA); - glEnable(GL_BLEND); - glRasterPos2i(w, 0); - glDrawPixels(w, h, GL_RGBA, GL_UNSIGNED_BYTE, img1); - - /* this is for matte display... */ - glColor3f(1, 1, 1); - glBegin(GL_QUADS); - glVertex2f(0, 0); - glVertex2f(w, 0); - glVertex2f(w, h); - glVertex2f(0, h); - glEnd(); - - glDisable(GL_BLEND); -} - -void draw(void) -{ - GLenum err; - static int first = 1; - - if (first) { - printf("Scaling images to %d by %d\n", w, h); - - - if (w0 != w || h0 != h) { - img0 = resize_img(img0, w0, h0); - - } - if (w1 != w || h1 != h) { - img1 = resize_img(img1, w1, h1); - } - if (w2 != w || h2 != h) { - img2 = resize_img(img2, w2, h2); - } - first = 0; - } - - - glClear(GL_COLOR_BUFFER_BIT); - compute_matte(); - - glRasterPos2i(w/2, h); - glDrawPixels(w, h, GL_RGBA, GL_UNSIGNED_BYTE, img0); - - err = glGetError(); - if (err != GL_NO_ERROR) printf("Error: %s\n", gluErrorString(err)); -} - -/* ARGSUSED */ -void button(int button, int state, int xpos, int ypos) -{ - if (state != GLUT_UP) return; - - ypos = 2*h - ypos; - glReadPixels(xpos, ypos, 1, 1, GL_RGB, GL_FLOAT, key); - printf("Key is (%f %f %f)\n", key[0], key[1], key[2]); - draw(); -} - -/* ARGSUSED1 */ -void keyPress(unsigned char whichKey, int x, int y) -{ - if (whichKey == 27) exit(0); -} - -void change_lower_fudge(int val) -{ - lowerfudge = (float)val / 100.; - if (upperfudge < lowerfudge) upperfudge = lowerfudge; - draw(); -} - -void change_upper_fudge(int val) -{ - upperfudge = (float)val / 100.; - if (lowerfudge > upperfudge) lowerfudge = upperfudge; - draw(); -} - -void show_usage(void) -{ - fprintf(stderr, "Usage:\n"); - fprintf(stderr, "chromakey mattefile file0 file1 [matteR matteG matteB]\n"); - fprintf(stderr, "chromakey mattefileAndfile0 file1 [matteR matteG matteB]\n"); -} - -main(int argc, char *argv[]) -{ - char *fileName0 = defaultFile0, *fileName1 = defaultFile1, - *fileName2 = defaultFile2; - - glutInit(&argc, argv); - if (argc > 1) { - fileName0 = fileName1 = argv[1]; - } - if (argc > 2) { - fileName2 = argv[2]; - } - if (argc > 3) { - fileName1 = fileName2; - fileName2 = argv[3]; - } - if (argc > 4) { - if (argc == 6 || argc == 7) { - key[0] = atof(argv[argc-3]); - key[1] = atof(argv[argc-2]); - key[2] = atof(argv[argc-1]); - } else { - show_usage(); - exit(1); - } - } - - printf("Matte file is %s\n", fileName0); - printf("Image file 1 is %s\n", fileName1); - printf("Image file 2 is %s\n", fileName2); - printf("Key is (%f %f %f)\n", key[0], key[1], key[2]); - printf("Transparent boundary is %f\n", lowerfudge); - printf("Opaque boundary is %f\n", upperfudge); - img0 = load_img(fileName0, &w0, &h0); - img1 = load_img(fileName1, &w1, &h1); - img2 = load_img(fileName2, &w2, &h2); - -#define MAX(a, b) ((a) > (b) ? (a) : (b)) - w = MAX(MAX(w0, w1), w2); - h = MAX(MAX(h0, h1), h2); - - glutInitWindowSize(2*w, 2*h); - glutInitWindowPosition(0, 0); - glutInitDisplayMode(GLUT_RGBA | GLUT_ACCUM | GLUT_ALPHA); - glutCreateWindow(argv[0]); - glutDisplayFunc(draw); - glutKeyboardFunc(keyPress); - glutReshapeFunc(reshape); - glutMouseFunc(button); - - { - int lowerFudgeMenu, upperFudgeMenu; - lowerFudgeMenu = glutCreateMenu(change_lower_fudge); - glutAddMenuEntry("0", 0); - glutAddMenuEntry(".1", 20); - glutAddMenuEntry(".25", 20); - glutAddMenuEntry(".5", 50); - glutAddMenuEntry(".75", 75); - upperFudgeMenu = glutCreateMenu(change_upper_fudge); - glutAddMenuEntry(".25", 20); - glutAddMenuEntry(".5", 50); - glutAddMenuEntry(".75", 75); - glutAddMenuEntry(".9", 90); - glutAddMenuEntry("1", 100); - glutCreateMenu(0); - glutAddSubMenu("Transparent boundary", lowerFudgeMenu); - glutAddSubMenu("Opaque boundary", upperFudgeMenu); - glutAttachMenu(GLUT_RIGHT_BUTTON); - } - - init(); - - reshape(w, h); - glutMainLoop(); - return 0; -} - - diff --git a/lib/glut-3.7.6/progs/advanced97/chromakey_fancy.dsp b/lib/glut-3.7.6/progs/advanced97/chromakey_fancy.dsp deleted file mode 100644 index 503ddc01e..000000000 --- a/lib/glut-3.7.6/progs/advanced97/chromakey_fancy.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="chromakey_fancy" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=chromakey_fancy - 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 "chromakey_fancy.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 "chromakey_fancy.mak" CFG="chromakey_fancy - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "chromakey_fancy - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "chromakey_fancy - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "chromakey_fancy - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "chromakey_fancy - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "chromakey_fancy - Win32 Release" -# Name "chromakey_fancy - Win32 Debug" -# Begin Source File - -SOURCE=.\chromakey_fancy.c -# End Source File -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# Begin Source File - -SOURCE=.\texture.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/cloud.c b/lib/glut-3.7.6/progs/advanced97/cloud.c deleted file mode 100644 index 2cfc6b65a..000000000 --- a/lib/glut-3.7.6/progs/advanced97/cloud.c +++ /dev/null @@ -1,243 +0,0 @@ -#include -#include -#include -#include -#include "texture.h" - -#ifndef __sgi -/* Most math.h's do not define float versions of the math functions. */ -#define expf(x) ((float)exp((x))) -#endif - -static float ttrans[2]; -static float scale = 1.; -static float transx, transy, rotx, roty; -static int ox = -1, oy = -1; -static int mot; -#define PAN 1 -#define ROT 2 - -void -pan(int x, int y) { - transx += (x-ox)/500.; - transy -= (y-oy)/500.; - ox = x; oy = y; - glutPostRedisplay(); -} - -void -rotate(int x, int y) { - rotx += x-ox; - if (rotx > 360.) rotx -= 360.; - else if (rotx < -360.) rotx += 360.; - roty += y-oy; - if (roty > 360.) roty -= 360.; - else if (roty < -360.) roty += 360.; - ox = x; oy = y; - glutPostRedisplay(); -} - -void -motion(int x, int y) { - if (mot == PAN) pan(x, y); - else if (mot == ROT) rotate(x,y); -} - -void -mouse(int button, int state, int x, int y) { - if(state == GLUT_DOWN) { - switch(button) { - case GLUT_LEFT_BUTTON: - mot = PAN; - motion(ox = x, oy = y); - break; - case GLUT_RIGHT_BUTTON: - mot = ROT; - motion(ox = x, oy = y); - break; - case GLUT_MIDDLE_BUTTON: - break; - } - } else if (state == GLUT_UP) { - mot = 0; - } -} - -#if NATE -void -wire(void) { - static int w; - if (w ^= 1) - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - else - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); -} -#endif - -void up(void) { scale += .1; } -void down(void) { scale -= .1; } - -void -animate(void) { - ttrans[0] += .01; - if (ttrans[0] == 1.0) ttrans[0] = 0; - ttrans[1] += .005; - if (ttrans[1] == 1.0) ttrans[1] = 0; - glutPostRedisplay(); -} - -void help(void) { - printf("Usage: cloud [image]\n"); - printf("'h' - help\n"); -#if NATE - printf("'w' - toggle wireframe\n"); -#endif - printf("'UP' - scale up\n"); - printf("'DOWN' - scale down\n"); - printf("left mouse - pan\n"); - printf("right mouse - rotate\n"); -} - -void init(char *filename) { - GLfloat cloud_color[4] = { 1., 1., 1., 0., }; - GLfloat fog_color[4], fog_density = 0.05, density, far_cull; - unsigned *image; - int width, height, components; - if (filename) { - image = read_texture(filename, &width, &height, &components); - if (image == NULL) { - fprintf(stderr, "Error: Can't load image file \"%s\".\n", - filename); - exit(EXIT_FAILURE); - } else { - printf("%d x %d image loaded\n", width, height); - } - if (components != 1) { - printf("must be a bw image\n"); - exit(EXIT_FAILURE); - } - } else { - int i, j; - unsigned char *img; - components = 4; width = height = 512; - image = (unsigned *) malloc(width*height*sizeof(unsigned)); - img = (unsigned char *)image; - for (j = 0; j < height; j++) - for (i = 0; i < width; i++) { - int w2 = width/2, h2 = height/2; - if (i & 32) - img[4*(i+j*width)+0] = 0xff; - else - img[4*(i+j*width)+1] = 0xff; - if (j&32) - img[4*(i+j*width)+2] = 0xff; - if ((i-w2)*(i-w2) + (j-h2)*(j-h2) > 64*64 && - (i-w2)*(i-w2) + (j-h2)*(j-h2) < 300*300) img[4*(i+j*width)+3] = 0xff; - } - - } - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_BLEND); - glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, cloud_color); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexImage2D(GL_TEXTURE_2D, 0, components, width, - height, 0, GL_RGBA, GL_UNSIGNED_BYTE, - image); - glEnable(GL_TEXTURE_2D); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(50.,1.,.1,far_cull = 10.); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(0.,0.,-5.5); - - density = 1.- expf(-5.5 * fog_density * fog_density * - far_cull * far_cull); - -#define MAX(a,b) ((a) > (b) ? (a) : (b)) -#define MIN(a,b) ((a) < (b) ? (a) : (b)) - density = MAX(MIN(density, 1.), 0.); - - fog_color[0] = .23 + density *.57; - fog_color[1] = .35 + density *.45; - fog_color[2] = .78 + density *.22; - - glClearColor(fog_color[0], fog_color[1], fog_color[2], 1.f); - - glFogi(GL_FOG_MODE, GL_EXP2); - glFogf(GL_FOG_DENSITY, fog_density); - glFogfv(GL_FOG_COLOR, fog_color); - if (fog_density > 0) - glEnable(GL_FOG); -} - -void display(void) { - glClear(GL_COLOR_BUFFER_BIT); - glPushMatrix(); - glTranslatef(transx, transy, 0.f); - glRotatef(rotx, 0., 1., 0.); - glRotatef(roty, 1., 0., 0.); - glScalef(scale,scale,1.); - glScalef(10,1,10); - glColor3f(.19, .25, .70); - glMatrixMode(GL_TEXTURE); - glPushMatrix(); - glTranslatef(ttrans[0], ttrans[1], 0.); - glBegin(GL_QUADS); - glTexCoord2f(0, 0); glVertex3f(-1., 1., -1.); - glTexCoord2f(0, 5); glVertex3f(-1., 1., 1.); - glTexCoord2f(5, 5); glVertex3f( 1., 1., 1.); - glTexCoord2f(5, 0); glVertex3f( 1., 1., -1.); - glEnd(); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); - glutSwapBuffers(); -} - -void reshape(int w, int h) { - glViewport(0, 0, w, h); -} - -/*ARGSUSED1*/ -void -key(unsigned char key, int x, int y) { - switch(key) { -#if NATE - case 'w': wire(); break; -#endif - case 'h': help(); break; - case '\033': exit(EXIT_SUCCESS); break; - default: break; - } - glutPostRedisplay(); -} - -/*ARGSUSED1*/ -void -special(int key, int x, int y) { - switch(key) { - case GLUT_KEY_UP: up(); break; - case GLUT_KEY_DOWN: down(); break; - } -} - -int main(int argc, char** argv) { - glutInitWindowSize(512, 512); - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE); - (void)glutCreateWindow(argv[0]); - init(argc == 1 ? "../data/clouds.bw" : argv[1]); - glutDisplayFunc(display); - glutKeyboardFunc(key); - glutSpecialFunc(special); - glutReshapeFunc(reshape); - glutMouseFunc(mouse); - glutMotionFunc(motion); - glutIdleFunc(animate); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/advanced97/cloud.dsp b/lib/glut-3.7.6/progs/advanced97/cloud.dsp deleted file mode 100644 index 13b30cd56..000000000 --- a/lib/glut-3.7.6/progs/advanced97/cloud.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="cloud" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=cloud - 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 "cloud.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 "cloud.mak" CFG="cloud - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "cloud - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "cloud - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "cloud - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "cloud - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "cloud - Win32 Release" -# Name "cloud - Win32 Debug" -# Begin Source File - -SOURCE=.\cloud.c -# End Source File -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# Begin Source File - -SOURCE=.\texture.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/cloudl.c b/lib/glut-3.7.6/progs/advanced97/cloudl.c deleted file mode 100644 index 8e001c290..000000000 --- a/lib/glut-3.7.6/progs/advanced97/cloudl.c +++ /dev/null @@ -1,285 +0,0 @@ -#include -#include -#include -#include -#include "texture.h" - -#ifndef __sgi -/* Most math.h's do not define float versions of the math functions. */ -#define expf(x) ((float)exp((x))) -#endif - -static float ttrans[2]; -static float transx, transy, rotx, roty; -static int ox = -1, oy = -1; -static int mot; -#define PAN 1 -#define ROT 2 - -void -pan(int x, int y) { - transx += (x-ox)/500.; - transy -= (y-oy)/500.; - ox = x; oy = y; - glutPostRedisplay(); -} - -void -rotate(int x, int y) { - rotx += x-ox; - if (rotx > 360.) rotx -= 360.; - else if (rotx < -360.) rotx += 360.; - roty += y-oy; - if (roty > 360.) roty -= 360.; - else if (roty < -360.) roty += 360.; - ox = x; oy = y; - glutPostRedisplay(); -} - -void -motion(int x, int y) { - if (mot == PAN) pan(x, y); - else if (mot == ROT) rotate(x,y); -} - -void -mouse(int button, int state, int x, int y) { - if(state == GLUT_DOWN) { - switch(button) { - case GLUT_LEFT_BUTTON: - mot = PAN; - motion(ox = x, oy = y); - break; - case GLUT_RIGHT_BUTTON: - mot = ROT; - motion(ox = x, oy = y); - break; - case GLUT_MIDDLE_BUTTON: - break; - } - } else if (state == GLUT_UP) { - mot = 0; - } -} - -void -animate(void) { - ttrans[0] += .010f; - if (ttrans[0] == 1.0f) ttrans[0] = 0.0f; - ttrans[1] -= .020f; - if (ttrans[1] <= 0.0f) ttrans[1] = 1.0f; - glutPostRedisplay(); -} - -void xfunc(void) { - static state = 1; - glutIdleFunc((state ^= 1) ? animate : NULL); -} - -void help(void) { - printf("Usage: cloudl [image]\n"); - printf("'h' - help\n"); - printf("'x' - toggle cloud motion\n"); - printf("left mouse - pan\n"); - printf("middle mouse - rotate\n"); -} - -void init(char *filename) { - GLfloat fog_color[4], fog_density = 0.05, density, far_cull; - unsigned *image; - int width, height, components; - if (filename) { - image = read_texture(filename, &width, &height, &components); - if (image == NULL) { - fprintf(stderr, "Error: Can't load image file \"%s\".\n", - filename); - exit(EXIT_FAILURE); - } else { - printf("%d x %d image loaded\n", width, height); - } - if (components != 1 && components != 2) { - printf("must be a l or la image\n"); - exit(EXIT_FAILURE); - } - if (components == 1) { - /* hack for RE */ - int i; - GLubyte *p = (GLubyte *)image; - for(i = 0; i < width*height; i++) { - p[i*4+3] = p[i*4+0]; - } - components = 2; - } - } else { - int i, j; - unsigned char *img; - components = 4; width = height = 512; - image = (unsigned *) malloc(width*height*sizeof(unsigned)); - img = (unsigned char *)image; - for (j = 0; j < height; j++) - for (i = 0; i < width; i++) { - int w2 = width/2, h2 = height/2; - if (i & 32) - img[4*(i+j*width)+0] = 0xff; - else - img[4*(i+j*width)+1] = 0xff; - if (j&32) - img[4*(i+j*width)+2] = 0xff; - if ((i-w2)*(i-w2) + (j-h2)*(j-h2) > 64*64 && - (i-w2)*(i-w2) + (j-h2)*(j-h2) < 300*300) img[4*(i+j*width)+3] = 0xff; - } - - } - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexImage2D(GL_TEXTURE_2D, 0, components, width, - height, 0, GL_RGBA, GL_UNSIGNED_BYTE, - image); - /*glEnable(GL_TEXTURE_2D);*/ - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(50.,1.,.1,far_cull = 10.); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(0.,0.,-5.5); - - density = 1.- expf(-5.5 * fog_density * fog_density * - far_cull * far_cull); - -#define MAX(a,b) ((a) > (b) ? (a) : (b)) -#define MIN(a,b) ((a) < (b) ? (a) : (b)) - density = MAX(MIN(density, 1.), 0.); - - fog_color[0] = .23*.2 + density *.57*.2; - fog_color[1] = .35*.2 + density *.45*.2; - fog_color[2] = .78*.5 + density *.22*.2; - - glClearColor(fog_color[0], fog_color[1], fog_color[2], 1.f); - - glFogi(GL_FOG_MODE, GL_EXP2); - glFogf(GL_FOG_DENSITY, fog_density); - glFogfv(GL_FOG_COLOR, fog_color); - if (fog_density > 0) - glEnable(GL_FOG); - glLineWidth(2.0f); - glEnable(GL_LINE_SMOOTH); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glPointSize(10.f); - glEnable(GL_POINT_SMOOTH); - glHint(GL_POINT_SMOOTH_HINT, GL_NICEST); -} - -void draw_base(void) { - glColor4f(.1, .3, .1, 1.0); - glBegin(GL_QUADS); - glTexCoord2f(0, 0); glVertex3f(-1.f, 0.f, -1.f); - glTexCoord2f(0, 1); glVertex3f(-1.f, 0.f, 1.f); - glTexCoord2f(1, 1); glVertex3f( 1.f, 0.f, 1.f); - glTexCoord2f(1, 0); glVertex3f( 1.f, 0.f, -1.f); - glEnd(); -} - -void draw_runway(void) { - glColor4f(.1, .1, .1, 1.0); - glPushMatrix(); - glScalef(.1f, 1.f, 1.f); - glBegin(GL_QUADS); - glTexCoord2f(0, 0); glVertex3f(-1.f, 0.f, -1.f); - glTexCoord2f(0, 1); glVertex3f(-1.f, 0.f, 1.f); - glTexCoord2f(1, 1); glVertex3f( 1.f, 0.f, 1.f); - glTexCoord2f(1, 0); glVertex3f( 1.f, 0.f, -1.f); - glEnd(); - glPopMatrix(); -} - -void draw_lights(void) { - int i; - - glEnable(GL_BLEND); - glColor4f(.7f, .7f, .1f, 1.0); - glPushMatrix(); - glScalef(.1f, 1.f, 1.f); - glEnable(GL_POINT_SMOOTH); - for(i = 0; i <= 20; i++) { - glPointSize((float)i/2.); - glBegin(GL_POINTS); - glVertex3f(-1.f, 0.f, -1.f+2.f/20*i); - glVertex3f( 1.f, 0.f, -1.f+2.f/20*i); - glEnd(); - } - glPopMatrix(); - glDisable(GL_BLEND); -} - -void -draw_clouds(void) { - glEnable(GL_BLEND); - glEnable(GL_TEXTURE_2D); - glMatrixMode(GL_TEXTURE); - glPushMatrix(); - glTranslatef(ttrans[0], ttrans[1], 0.); - glColor4f(1.f, 1.f, 1.f, 1.0); - glBegin(GL_QUADS); - glTexCoord2f(0, 0); glVertex3f(-1., .2, -1.); - glTexCoord2f(0, 5); glVertex3f(-1., .2, 1.); - glTexCoord2f(5, 5); glVertex3f( 1., .2, 1.); - glTexCoord2f(5, 0); glVertex3f( 1., .2, -1.); - glEnd(); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glDisable(GL_TEXTURE_2D); - glDisable(GL_BLEND); -} - -void display(void) { - glClear(GL_COLOR_BUFFER_BIT); - - glPushMatrix(); - glTranslatef(transx, transy, 0.f); - glRotatef(rotx, 0., 1., 0.); - glRotatef(roty, 1., 0., 0.); - glScalef(10,1,10); - glTranslatef(0.f,-1.f,0.f); - draw_base(); - draw_runway(); - draw_lights(); - draw_clouds(); - glPopMatrix(); - glutSwapBuffers(); -} - -void reshape(int w, int h) { - glViewport(0, 0, w, h); -} - -/*ARGSUSED1*/ -void -key(unsigned char key, int x, int y) { - switch(key) { - case 'x': xfunc(); break; - case 'h': help(); break; - case '\033': exit(EXIT_SUCCESS); break; - default: break; - } - glutPostRedisplay(); -} - -int main(int argc, char** argv) { - glutInitWindowSize(512, 512); - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE); - (void)glutCreateWindow(argv[0]); - init(argc == 1 ? "../data/clouds.bw" : argv[1]); - glutDisplayFunc(display); - glutKeyboardFunc(key); - glutReshapeFunc(reshape); - glutMouseFunc(mouse); - glutMotionFunc(motion); - glutIdleFunc(animate); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/advanced97/cloudl.dsp b/lib/glut-3.7.6/progs/advanced97/cloudl.dsp deleted file mode 100644 index c32a3d43a..000000000 --- a/lib/glut-3.7.6/progs/advanced97/cloudl.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="cloudl" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=cloudl - 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 "cloudl.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 "cloudl.mak" CFG="cloudl - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "cloudl - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "cloudl - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "cloudl - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "cloudl - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "cloudl - Win32 Release" -# Name "cloudl - Win32 Debug" -# Begin Source File - -SOURCE=.\cloudl.c -# End Source File -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# Begin Source File - -SOURCE=.\texture.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/complexity.c b/lib/glut-3.7.6/progs/advanced97/complexity.c deleted file mode 100644 index 8f334b2c2..000000000 --- a/lib/glut-3.7.6/progs/advanced97/complexity.c +++ /dev/null @@ -1,234 +0,0 @@ -/* This program demonstrates how to use the stencil buffer to visualize -** the depth complexity of a scene. -*/ - -#include -#include -#include - -/* show contents of stencil buffer */ -int winwid = 512; -int winht = 512; -GLubyte *stencil = 0; /* so realloc works the first time */ - -void resize(int wid, int ht) -{ - winwid = wid; - winht = ht; - stencil = (GLubyte *)realloc((void*)stencil, - winwid * winht * sizeof(GLubyte)); - glViewport(0, 0, wid, ht); -} - -/* ARGSUSED1 */ -void key(unsigned char key, int x, int y) -{ - if(key == '\033') - exit(0); -} - -int rotate = 0; -GLfloat udangle = 0.f; -GLfloat lrangle = 0.f; - -void motion(int x, int y) -{ - if(rotate) - { - udangle = (y - winht/2) * 360./winht; - lrangle = (x - winwid/2) * 360./winwid; - } - glutPostRedisplay(); -} - -void mouse(int button, int state, int x, int y) -{ - if(state == GLUT_DOWN) - switch(button) - { - case GLUT_LEFT_BUTTON: /* rotate the scene up and down */ - case GLUT_MIDDLE_BUTTON: /* rotate the scene left and right */ - rotate = 1; - motion(x, y); - break; - } - else - rotate = 0; /* overkill; cover right button too */ -} - - -/* read back stencil buffer, store in memory, draw back colorized */ -void showstencil(void) -{ - glReadPixels(0, 0, winwid, winht, GL_STENCIL_INDEX, - GL_UNSIGNED_BYTE, stencil); - - glRasterPos2i(-1, -1); - glDrawPixels(winwid, winht, GL_COLOR_INDEX, GL_UNSIGNED_BYTE, stencil); -} - - -int showdepth = 0; -int depthtest = 1; -/* Called when window needs to be redrawn */ -void redraw(void) -{ - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT); - - glEnable(GL_STENCIL_TEST); - if(depthtest) - glEnable(GL_DEPTH_TEST); - - glPushMatrix(); - glRotatef(lrangle, 0.f, 1.f, 0.f); - glRotatef(udangle, 1.f, 0.f, 0.f); - glCallList(1); /* draw scene */ - glPopMatrix(); - - glDisable(GL_STENCIL_TEST); - glFlush(); /* high end machines may need this */ - - if(depthtest) - glDisable(GL_DEPTH_TEST); - - if(showdepth) - showstencil(); - - if(glGetError()) /* to catch programming errors; should never happen */ - printf("Oops! I screwed up my OpenGL calls somewhere\n"); - glutSwapBuffers(); -} - -/* menu entries mapped to actions */ -enum {RENDER, SHOW_STENCIL, DEPTH_TEST}; -void menu(int choice) -{ - switch(choice) - { - case RENDER: - showdepth = 0; - break; - case SHOW_STENCIL: - showdepth = 1; - break; - case DEPTH_TEST: - depthtest = !depthtest; - if(depthtest) - /* show how many pixels were discarded by depth test */ - glStencilOp(GL_KEEP, GL_INCR, GL_KEEP); - else - /* show how many pixels were written to frame buffer */ - glStencilOp(GL_KEEP, GL_KEEP, GL_INCR); - break; - } - glutPostRedisplay(); -} - -typedef struct { - GLfloat r; - GLfloat g; - GLfloat b; -} Color; - -/* color map to indicate different depth complexities */ -Color map[] = { - {0.f, 0.f, 0.f,}, - {0.f, .25f, 0.f,}, - {0.f, .5f, 0.f,}, - {0.f, .75f, 0.f,}, - {0.f, 1.f, 0.f,}, - {.25f, 1.f, 0.f,}, - {.5f, 1.f, 0.f,}, - {.75f, 1.f, 0.f,}, - {1.f, 1.f, 0.f,}, - {1.f, .75f, 0.f,}, - {1.f, .5f, 0.f,}, - {1.f, .25f, 0.f,}, - {1.f, .0f, 0.f,}, - {1.f, .0f, 0.f,}, - {1.f, .0f, 0.f,}, - {1.f, .0f, 0.f,} -}; - -/* mapsize should be a power of two */ -#define mapsize 16 -GLfloat lightpos[4] = {.5f, .5f, -1.f, 1.f}; -main(int argc, char *argv[]) -{ - GLfloat rmap[mapsize], gmap[mapsize], bmap[mapsize]; - int i; - - glutInit(&argc, argv); - glutInitWindowSize(winwid, winht); - glutInitDisplayMode(GLUT_RGBA|GLUT_STENCIL|GLUT_DOUBLE|GLUT_DEPTH); - (void)glutCreateWindow("visualizing depth complexity"); - glutDisplayFunc(redraw); - glutKeyboardFunc(key); - glutReshapeFunc(resize); - glutMouseFunc(mouse); - glutMotionFunc(motion); - - glutCreateMenu(menu); - glutAddMenuEntry("Draw Scene", RENDER); - glutAddMenuEntry("Show Stencil", SHOW_STENCIL); - glutAddMenuEntry("Toggle Depth Test", DEPTH_TEST); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - glStencilFunc(GL_ALWAYS, ~0, ~0); - glStencilOp(GL_KEEP, GL_KEEP, GL_INCR); - - /* draw an interesting scene */ - glNewList(1, GL_COMPILE); - /* center */ - glPushMatrix(); - glScalef(.2f, .2f, .2f); - glutSolidTetrahedron(); - glPopMatrix(); - /* right */ - glTranslatef(.4f, 0.f, 0.f); - glutSolidSphere(.25, 8, 8); - /* left */ - glTranslatef(-.8f, 0.f, 0.f); - glutSolidSphere(.25, 8, 8); - /* bottom */ - glTranslatef(.4f, -.4f, 0.f); - glutSolidSphere(.25, 8, 8); - /* top */ - glTranslatef(0.f, .8f, 0.f); - glutSolidSphere(.25, 8, 8); - - /* lefttop */ - glTranslatef(-.5f, .1f, 0.f); - glutSolidCube(.3); - /* righttop */ - glTranslatef(1.f, 0.f, 0.f); - glutSolidCube(.3); - /* rightbot */ - glTranslatef(0.f, -1.f, 0.f); - glutSolidCube(.3); - /* rightbot */ - glTranslatef(-1.f, 0.f, 0.f); - glutSolidCube(.3); - glEndList(); - - /* color ramp to show increasing complexity */ - /* black shading to green to yellow to red */ - for(i = 0; i < mapsize; i++) - { - rmap[i] = map[i].r; - gmap[i] = map[i].g; - bmap[i] = map[i].b; - } - - glPixelMapfv(GL_PIXEL_MAP_I_TO_R, mapsize, rmap); - glPixelMapfv(GL_PIXEL_MAP_I_TO_G, mapsize, gmap); - glPixelMapfv(GL_PIXEL_MAP_I_TO_B, mapsize, bmap); - - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - - glutMainLoop(); - return 0; -} - diff --git a/lib/glut-3.7.6/progs/advanced97/complexity.dsp b/lib/glut-3.7.6/progs/advanced97/complexity.dsp deleted file mode 100644 index f507b449e..000000000 --- a/lib/glut-3.7.6/progs/advanced97/complexity.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="complexity" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=complexity - 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 "complexity.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 "complexity.mak" CFG="complexity - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "complexity - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "complexity - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "complexity - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "complexity - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "complexity - Win32 Release" -# Name "complexity - Win32 Debug" -# Begin Source File - -SOURCE=.\complexity.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/csg.c b/lib/glut-3.7.6/progs/advanced97/csg.c deleted file mode 100644 index ab1061114..000000000 --- a/lib/glut-3.7.6/progs/advanced97/csg.c +++ /dev/null @@ -1,1408 +0,0 @@ -#include -#include -#include -#include - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -#define TRUE 1 -#define FALSE 0 - -/* - * #define the following symbol if you know your glClear honors the - * stencil mask. The O2 workstation stencil clear doesn't appear - * to honor the mask, so we use a workaround. The workaround may work - * on any other OpenGL which has this clear bug. - */ -#undef CLEAR_HONORS_STENCIL_MASK - - -GLUquadricObj *quadric; - - -int doCSG = 0; -int whereToStop = -1; -typedef enum {CONTINUE, STOP} progressEnum; -int whichTree = 0; -int showSurfaces = 1; -int showOnlyCurrent = 0; -int stenSize; -enum {COLOR, DEPTH, STENCILVALUES, STENCILPLANES} bufferInterest = COLOR; - - -void drawFace(void) -{ - glBegin(GL_QUADS); - glNormal3i(0, 0, 1); - glVertex3f(1, 1, 1); - glVertex3f(-1, 1, 1); - glVertex3f(-1, -1, 1); - glVertex3f(1, -1, 1); - glEnd(); -} - - -void drawBox(void) -{ - glPushMatrix(); - - drawFace(); - - glRotatef(90, 1, 0, 0); - drawFace(); - - glRotatef(90, 1, 0, 0); - drawFace(); - - glRotatef(90, 1, 0, 0); - drawFace(); - - glPopMatrix(); - - glPushMatrix(); - - glRotatef(90, 0, 1, 0); - drawFace(); - - glRotatef(180, 0, 1, 0); - drawFace(); - - glPopMatrix(); -} - - -void drawCylinder(void) -{ - glPushMatrix(); - - glTranslatef(0, 0, -.5); - gluCylinder(quadric, 1, 1, 1, 30, 5); - - glRotatef(180, 0, 1, 0); - gluDisk(quadric, 0, 1, 30, 2); - - glPopMatrix(); - - glPushMatrix(); - - glTranslatef(0, 0, .5); - gluDisk(quadric, 0, 1, 30, 2); - - glPopMatrix(); -} - - -void drawCone(void) -{ - glPushMatrix(); - - glTranslatef(0, 0, -.5); - gluCylinder(quadric, 1, 0, 1, 30, 5); - - glRotatef(180, 0, 1, 0); - gluDisk(quadric, 0, 1, 30, 2); - - glPopMatrix(); -} - - -void drawSphere(void) -{ - gluSphere(quadric, 1, 30, 20); -} - - -struct transformation { - float translation[3]; - float rotation[4]; - float scale[3]; -}; - - -struct primitive { - float color[4]; - void (*draw)(void); - struct transformation xform; -}; - - -struct transformation globalXform = { - 0, 0, 0, - 1, 0, 0, 0, - 1, 1, 1 -}; - - -struct primitive prims[20] = { - { - {.5, .5, 1}, - drawBox, - { - -3, 0, 0, - 1, 0, 0, 0, - 1, 1, 1 - } - }, - { - {1, .5, .5}, - drawCylinder, - { - -1, 0, 0, - 1, 0, 0, 0, - 1, 1, 1 - } - }, - { - {.5, 1, .5}, - drawCone, - { - 1, 0, 0, - 1, 0, 0, 0, - 1, 1, 1 - } - }, - { - {1, .5, 1}, - drawSphere, - { - 3, 0, 0, - 1, 0, 0, 0, - 1, 1, 1 - } - } -}; - - -int numPrims = 4; -int curPrim = 0; - - -void drawXform(struct transformation *xform, int applyScale) -{ - glTranslatef(xform->translation[0], xform->translation[1], xform->translation[2]); - glRotatef(xform->rotation[3] / M_PI * 180, xform->rotation[0], xform->rotation[1], xform->rotation[2]); - if(applyScale) - glScalef(xform->scale[0], xform->scale[1], xform->scale[2]); -} - - -int magicTranspHack = 0; - - -void drawPrim(int i) -{ - struct primitive *p = &prims[i]; - struct transformation *xform = &p->xform; - - if(magicTranspHack) - { - float c[4]; - c[0] = p->color[0]; - c[1] = p->color[1]; - c[2] = p->color[2]; - c[3] = .25; - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, c); - } - else - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, p->color); - glPushMatrix(); - drawXform(xform, TRUE); - p->draw(); - glPopMatrix(); -} - - -struct product { - int targetPrim; - int frontFace; - int whichSurface; - int numTrimPrims; - int *trimmingPrims; - int *isComplemented; -}; - - -int prodAtrimmingPrims1[] = {1}; -int prodAisComplemented1[] = {1}; -int prodBtrimmingPrims1[] = {0}; -int prodBisComplemented1[] = {0}; - - -int prodAtrimmingPrims2[] = {1}; -int prodAisComplemented2[] = {0}; -int prodBtrimmingPrims2[] = {0}; -int prodBisComplemented2[] = {1}; - - -int prodAtrimmingPrims3[] = {1}; -int prodAisComplemented3[] = {0}; -int prodBtrimmingPrims3[] = {0}; -int prodBisComplemented3[] = {0}; - - -int prodAtrimmingPrims4[] = {1, 2, 3}; -int prodAisComplemented4[] = {0, 1, 1}; -int prodBtrimmingPrims4[] = {1, 0, 2}; -int prodBisComplemented4[] = {0, 0, 1}; -int prodCtrimmingPrims4[] = {1, 0, 3}; -int prodCisComplemented4[] = {0, 0, 1}; -int prodDtrimmingPrims4[] = {0, 2, 3}; -int prodDisComplemented4[] = {0, 1, 1}; - - -struct product products[][4] = { - { /* A - B */ - { - 0, 1, 0, - 1, - prodAtrimmingPrims1, - prodAisComplemented1, - }, - { - 1, 0, 0, - 1, - prodBtrimmingPrims1, - prodBisComplemented1, - }, - }, - - { /* B - A */ - { - 0, 0, 0, - 1, - prodAtrimmingPrims2, - prodAisComplemented2, - }, - { - 1, 1, 0, - 1, - prodBtrimmingPrims2, - prodBisComplemented2, - }, - }, - - { /* A and B */ - { - 0, 1, 0, - 1, - prodAtrimmingPrims3, - prodAisComplemented3, - }, - { - 1, 1, 0, - 1, - prodBtrimmingPrims3, - prodBisComplemented3, - }, - }, - - { /* A and B - D - C */ - { - 0, 1, 0, - 3, - prodAtrimmingPrims4, - prodAisComplemented4, - }, - { - 3, 0, 0, - 3, - prodBtrimmingPrims4, - prodBisComplemented4, - }, - { - 2, 0, 0, - 3, - prodCtrimmingPrims4, - prodCisComplemented4, - }, - { - 1, 1, 0, - 3, - prodDtrimmingPrims4, - prodDisComplemented4, - }, - }, -}; - - -int numProducts[4] = {2, 2, 2, 4}; - - -int winWidth, winHeight; -GLfloat *depthSave = NULL; -GLubyte *stencilSave = NULL; -GLubyte *colorSave = NULL; - - -void resizeBuffers(void) -{ - if(colorSave != NULL) - free(colorSave); - colorSave = malloc(winWidth * winHeight * 4 * sizeof(GLubyte)); - if(depthSave != NULL) - free(depthSave); - depthSave = malloc(winWidth * winHeight * sizeof(GLfloat)); - stencilSave = (GLubyte *)depthSave; -} - - -void pushOrthoView(float left, float right, float bottom, float top, - float znear, float zfar) -{ - glPushMatrix(); - glLoadIdentity(); - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - glOrtho(left, right, bottom, top, znear, zfar); -} - - -void popView(void) -{ - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); -} - - -void copyDepthToColor(GLenum whichColorBuffer) -{ - int x, y; - GLfloat max, min; - GLint previousColorBuffer; - - glReadPixels(0, 0, winWidth, winHeight, GL_DEPTH_COMPONENT, GL_FLOAT, - depthSave); - - /* I'm sure this could be done much better with OpenGL */ - max = 0; - min = 1; - for(y = 0; y < winHeight; y++) - for(x = 0; x < winWidth; x++) { - if(depthSave[winWidth * y + x] < min) - min = depthSave[winWidth * y + x]; - if(depthSave[winWidth * y + x] > max && depthSave[winWidth * y + x] < .999) - max = depthSave[winWidth * y + x]; - } - - for(y = 0; y < winHeight; y++) - for(x = 0; x < winWidth; x++) { - if(depthSave[winWidth * y + x] <= max) - depthSave[winWidth * y + x] = 1 - (depthSave[winWidth * y + x] - min) / (max - min); - else - depthSave[winWidth * y + x] = 0; - } - - pushOrthoView(0, 1, 0, 1, 0, 1); - glRasterPos3f(0, 0, -.5); - glDisable(GL_DEPTH_TEST); - glDisable(GL_STENCIL_TEST); - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - glGetIntegerv(GL_DRAW_BUFFER, &previousColorBuffer); - glDrawBuffer(whichColorBuffer); - glDrawPixels(winWidth, winHeight, GL_LUMINANCE , GL_FLOAT, depthSave); - glDrawBuffer(previousColorBuffer); - glEnable(GL_DEPTH_TEST); - popView(); -} - - -unsigned char stencilValueToColorMap[][3] = -{ - {255, 0, 0}, /* red */ - {255, 218, 0}, /* yellow */ - {72, 255, 0}, /* yellowish green */ - {0, 255, 145}, /* bluish cyan */ - {0, 145, 255}, /* cyanish blue */ - {72, 0, 255}, /* purplish blue */ - {255, 0, 218}, /* reddish purple */ -}; - - -void copyStencilValuesToColor(GLenum whichColorBuffer) -{ - int x, y; - GLint previousColorBuffer; - - glReadPixels(0, 0, winWidth, winHeight, GL_STENCIL_INDEX, GL_UNSIGNED_BYTE, - stencilSave); - - /* I'm sure this could be done much better with OpenGL */ - for(y = 0; y < winHeight; y++) - for(x = 0; x < winWidth; x++) { - int stencilValue; - - stencilValue = stencilSave[winWidth * y + x]; - - colorSave[(winWidth * y + x) * 3 + 0] = - stencilValueToColorMap[stencilValue % 7][0]; - colorSave[(winWidth * y + x) * 3 + 1] = - stencilValueToColorMap[stencilValue % 7][1]; - colorSave[(winWidth * y + x) * 3 + 2] = - stencilValueToColorMap[stencilValue % 7][2]; - } - - pushOrthoView(0, 1, 0, 1, 0, 1); - glRasterPos3f(0, 0, -.5); - glDisable(GL_DEPTH_TEST); - glDisable(GL_STENCIL_TEST); - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - glGetIntegerv(GL_DRAW_BUFFER, &previousColorBuffer); - glDrawBuffer(whichColorBuffer); - glDrawPixels(winWidth, winHeight, GL_RGB, GL_UNSIGNED_BYTE, colorSave); - glDrawBuffer(previousColorBuffer); - glEnable(GL_DEPTH_TEST); - popView(); -} - - -/* - * XXX This function should make colors that identify individual bits in - * the stencil buffer, but it seems like too hard a problem to solve - * in five minutes. Fix later. - */ -void copyStencilPlanesToColor(GLenum whichColorBuffer) -{ - int x, y; - GLint previousColorBuffer; - - glReadPixels(0, 0, winWidth, winHeight, GL_STENCIL_INDEX, GL_UNSIGNED_BYTE, - stencilSave); - - /* I'm sure this could be done much better with OpenGL */ - for(y = 0; y < winHeight; y++) - for(x = 0; x < winWidth; x++) { - /* Have to think of something clever to do here */ - } - - pushOrthoView(0, 1, 0, 1, 0, 1); - glRasterPos3f(0, 0, -.5); - glDisable(GL_DEPTH_TEST); - glDisable(GL_STENCIL_TEST); - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - glGetIntegerv(GL_DRAW_BUFFER, &previousColorBuffer); - glDrawBuffer(whichColorBuffer); - glDrawPixels(winWidth, winHeight, GL_RGB, GL_UNSIGNED_BYTE, colorSave); - glDrawBuffer(previousColorBuffer); - glEnable(GL_DEPTH_TEST); - popView(); -} - - -void copyInterest(void) -{ - switch(bufferInterest) { - case COLOR: - break; /* Well, that's already there. */ - - case STENCILVALUES: - copyStencilValuesToColor(GL_BACK); - break; - - case STENCILPLANES: - copyStencilPlanesToColor(GL_BACK); - break; - - case DEPTH: - copyDepthToColor(GL_BACK); - break; - } -} - - -void axisamountToMat(float aa[], float mat[]) -{ - float c, s, t; - - c = (float)cos(aa[3]); - s = (float)sin(aa[3]); - t = 1.0f - c; - - mat[0] = t * aa[0] * aa[0] + c; - mat[1] = t * aa[0] * aa[1] + s * aa[2]; - mat[2] = t * aa[0] * aa[2] - s * aa[1]; - mat[3] = t * aa[0] * aa[1] - s * aa[2]; - mat[4] = t * aa[1] * aa[1] + c; - mat[5] = t * aa[1] * aa[2] + s * aa[0]; - mat[6] = t * aa[0] * aa[2] + s * aa[1]; - mat[7] = t * aa[1] * aa[2] - s * aa[0]; - mat[8] = t * aa[2] * aa[2] + c; -} - - -void matToAxisamount(float mat[], float aa[]) -{ - float c; - float s; - - c = (mat[0] + mat[4] + mat[8] - 1.0f) / 2.0f; - aa[3] = (float)acos(c); - s = (float)sin(aa[3]); - if(fabs(s / M_PI - (int)(s / M_PI)) < .0000001) - { - aa[0] = 0.0f; - aa[1] = 1.0f; - aa[2] = 0.0f; - } - else - { - aa[0] = (mat[5] - mat[7]) / (2.0f * s); - aa[1] = (mat[6] - mat[2]) / (2.0f * s); - aa[2] = (mat[1] - mat[3]) / (2.0f * s); - } -} - - -void multMat(float m1[], float m2[], float r[]) -{ - float t[9]; - int i; - - t[0] = m1[0] * m2[0] + m1[1] * m2[3] + m1[2] * m2[6]; - t[1] = m1[0] * m2[1] + m1[1] * m2[4] + m1[2] * m2[7]; - t[2] = m1[0] * m2[2] + m1[1] * m2[5] + m1[2] * m2[8]; - t[3] = m1[3] * m2[0] + m1[4] * m2[3] + m1[5] * m2[6]; - t[4] = m1[3] * m2[1] + m1[4] * m2[4] + m1[5] * m2[7]; - t[5] = m1[3] * m2[2] + m1[4] * m2[5] + m1[5] * m2[8]; - t[6] = m1[6] * m2[0] + m1[7] * m2[3] + m1[8] * m2[6]; - t[7] = m1[6] * m2[1] + m1[7] * m2[4] + m1[8] * m2[7]; - t[8] = m1[6] * m2[2] + m1[7] * m2[5] + m1[8] * m2[8]; - for(i = 0; i < 9; i++) - { - r[i] = t[i]; - } -} - - -void rotateTrackball(int dx, int dy, float rotation[4]) -{ - float dist; - float oldMat[9]; - float rotMat[9]; - float newRot[4]; - - dist = (float)sqrt((double)(dx * dx + dy * dy)); - if(fabs(dist) < 0.99) - return; - - newRot[0] = (float) dy / dist; - newRot[1] = (float) dx / dist; - newRot[2] = 0.0f; - newRot[3] = (float)M_PI * dist / winWidth; - - axisamountToMat(rotation, oldMat); - axisamountToMat(newRot, rotMat); - multMat(oldMat, rotMat, oldMat); - matToAxisamount(oldMat, rotation); - - dist = (float)sqrt(rotation[0] * rotation[0] + rotation[1] * rotation[1] + - rotation[2] * rotation[2]); - - rotation[0] /= dist; - rotation[1] /= dist; - rotation[2] /= dist; -} - - -struct transformation *curXform; - - -void init(void) -{ - glMatrixMode(GL_PROJECTION); - glFrustum(-.33, .33, -.33, .33, .5, 40); - - glMatrixMode(GL_MODELVIEW); - gluLookAt(0, 0, 7, 0, 0, 0, 0, 1, 0); - - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - - glEnable(GL_NORMALIZE); - - quadric = gluNewQuadric(); - - glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); - - curXform = &prims[0].xform; -} - - -void setupLight(void) -{ - static GLfloat lightpos[] = {0, 1, 0, 0}; - - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); -} - - -void redrawNoCSG(void) -{ - int i; - - glDisable(GL_STENCIL_TEST); - glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_LESS); - glEnable(GL_CULL_FACE); - glCullFace(GL_BACK); - glDepthMask(GL_TRUE); - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glPushMatrix(); - - drawXform(&globalXform, FALSE); - - for(i = 0; i < numPrims; i++) - { - if(i == curPrim || !showOnlyCurrent) - drawPrim(i); - } - - glPopMatrix(); - - copyInterest(); - - glutSwapBuffers(); -} - - -int whereSoFar; - - -GLfloat *depthResults = NULL; - - -void saveDepth(void) -{ - depthResults = realloc(depthResults, winWidth * winHeight * - sizeof(GLfloat)); - glReadPixels(0, 0, winWidth, winHeight, GL_DEPTH_COMPONENT, GL_FLOAT, - depthResults); -} - - -void restoreDepth(void) -{ - glStencilMask(0); - glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); - glDepthMask(GL_TRUE); - glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_ALWAYS); - glDisable(GL_STENCIL_TEST); - - pushOrthoView(0, 1, 0, 1, 0, 1); - glRasterPos3f(0, 0, -.5); - - glDrawPixels(winWidth, winHeight, GL_DEPTH_COMPONENT, GL_FLOAT, - depthResults); - - popView(); -} - - -#define COPY_AND_RETURN_IF_DONE(s) \ - { \ - if(whereSoFar++ == whereToStop) { \ - printf("%s\n", s); \ - return(STOP); \ - } \ - } - - -#define COPY_AND_GOTO_IF_DONE(s) \ - { \ - if(whereSoFar++ == whereToStop) { \ - printf("%s\n", s); \ - goto doneWithFrame; \ - } \ - } - - -int sCountMask = 0x01; /* 1-convexity maximum */ -int sCountShift = 0; -int sPMask = 1; -int sPShift = 0; - - -void drawFarRect(void) -{ - pushOrthoView(0, 1, 0, 1, 0, 1); - - /* Can I just draw & let be clipped? */ - glBegin(GL_QUADS); - glVertex3f(0, 0, -1); - glVertex3f(1, 0, -1); - glVertex3f(1, 1, -1); - glVertex3f(0, 1, -1); - glEnd(); - - popView(); -} - - -progressEnum renderPrimDepths(int targetPrim, int frontFace, int whichSurface) -{ - glClear(GL_DEPTH_BUFFER_BIT); - - - glDepthFunc(GL_ALWAYS); - glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); - glStencilMask(sCountMask); - -#ifndef CLEAR_HONORS_STENCIL_MASK /* see comment at beginning of source */ - - glDisable(GL_CULL_FACE); - glDisable(GL_DEPTH_TEST); - glDepthMask(GL_FALSE); - - glStencilFunc(GL_ALWAYS, 0, 0); - glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); - drawFarRect(); - - COPY_AND_RETURN_IF_DONE("After clearing p bit in stencil"); - -#else - - glClearStencil(0); - glClear(GL_STENCIL_BUFFER_BIT); - -#endif - - glEnable(GL_CULL_FACE); - if(frontFace) - glCullFace(GL_BACK); - else - glCullFace(GL_FRONT); - - glEnable(GL_DEPTH_TEST); - glDepthMask(GL_TRUE); - - glStencilFunc(GL_EQUAL, whichSurface, sCountMask); - glStencilOp(GL_INCR, GL_INCR, GL_INCR); - - drawPrim(targetPrim); - - return(CONTINUE); -} - - -progressEnum trimWithPrimitive(int trimPrim, int isComplemented) -{ - glDepthFunc(GL_LESS); - glEnable(GL_STENCIL_TEST); - glDepthMask(GL_FALSE); - glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); - glStencilMask(sPMask); - glDisable(GL_CULL_FACE); - -#ifndef CLEAR_HONORS_STENCIL_MASK /* see comment at beginning of source */ - - glDisable(GL_DEPTH_TEST); - - glStencilFunc(GL_ALWAYS, isComplemented ? (1 << sPShift) : 0, 0); - glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); - drawFarRect(); - -#else - - glClearStencil(isComplemented ? (1 << sPShift) : 0); - glClear(GL_STENCIL_BUFFER_BIT); - -#endif - - glEnable(GL_DEPTH_TEST); - glStencilFunc(GL_ALWAYS, 0, 0); - glStencilOp(GL_KEEP, GL_KEEP, GL_INVERT); - drawPrim(trimPrim); - - COPY_AND_RETURN_IF_DONE("After setting stencil to mark depths " - "inside trimming primitive"); - - /* stencil == 0 where pixels were not inside */ - /* so now set Z to far where stencil == 0, everywhere pixels trimmed */ - - glStencilFunc(GL_EQUAL, 0, sPMask); - glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); - glDepthMask(1); - glDepthFunc(GL_ALWAYS); - glDisable(GL_LIGHTING); - drawFarRect(); - glEnable(GL_LIGHTING); - - COPY_AND_RETURN_IF_DONE("After clearing depths where target outside " - "trimming primitive"); - - return(CONTINUE); -} - - -progressEnum markProductPixels(int product, int accumBit) -{ - int i; - - struct product *p; - - p = &products[whichTree][product]; - - if(renderPrimDepths(p->targetPrim, p->frontFace, p->whichSurface) == STOP) - return(STOP); - - COPY_AND_RETURN_IF_DONE("After rendering target depths"); - - for(i = 0; i < p->numTrimPrims; i++) - { - if(trimWithPrimitive(p->trimmingPrims[i], p->isComplemented[i]) == STOP) - return(STOP); - } - - COPY_AND_RETURN_IF_DONE("After target has been trimmed by all " - "trimming primitives"); - - /* set accumulator stencil bit for this primitive everywhere depth != far */ - glStencilFunc(GL_ALWAYS, 1 << accumBit, 0); - glStencilOp(GL_KEEP, GL_ZERO, GL_REPLACE); - glStencilMask(1 << accumBit); - glDepthMask(0); - glDepthFunc(GL_GREATER); - glDisable(GL_LIGHTING); - drawFarRect(); - glEnable(GL_LIGHTING); - - COPY_AND_RETURN_IF_DONE("After setting accumulator where depths != far"); - - return(CONTINUE); -} - - -progressEnum drawProduct(int product, int accumBit) -{ - struct product *p; - p = &products[whichTree][product]; - - glEnable(GL_CULL_FACE); - if(p->frontFace) - glCullFace(GL_BACK); - else - glCullFace(GL_FRONT); - - glDepthMask(GL_TRUE); - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_LESS); - glEnable(GL_STENCIL_TEST); - glStencilFunc(GL_EQUAL, 1 << accumBit, 1 << accumBit); - glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); - drawPrim(p->targetPrim); - - COPY_AND_RETURN_IF_DONE("After drawing target color and depth"); - - return(CONTINUE); -} - - -void redrawCSG(void) -{ - int i; - int accumBit; - int firstProduct; - int lastProduct; - - whereSoFar = 0; - glDepthMask(GL_TRUE); - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - glClear(GL_COLOR_BUFFER_BIT); - - /* Only have to do this if you're going to look at the stencil buffer */ - glClearStencil(0); - glStencilMask((1 << stenSize) - 1); - glClear(GL_STENCIL_BUFFER_BIT); - - glPushMatrix(); - - drawXform(&globalXform, FALSE); - - firstProduct = 0; - - while(firstProduct != numProducts[whichTree]) { - - /* - * set lastProduct so that accum bits for first to last fit in - * stencil buffer minus bits needed for surface counting bits - */ - lastProduct = firstProduct + (stenSize - 1) - 1; - if(lastProduct >= numProducts[whichTree]) - lastProduct = numProducts[whichTree] - 1; - - if(firstProduct > 0) /* know depth is clear before 1st group */ - saveDepth(); - - accumBit = 1; /* first available after counting bits */ - - for(i = firstProduct; i <= lastProduct; i++) - if(markProductPixels(i, accumBit++) == STOP) - goto doneWithFrame; - - COPY_AND_GOTO_IF_DONE("After marking \"inside\" target accumulators"); - - if(firstProduct > 0) /* know depth was clear before first group */ - restoreDepth(); - else { - glDepthMask(GL_TRUE); - glClear(GL_DEPTH_BUFFER_BIT); - } - - accumBit = 1; /* first available after counting bits */ - - for(i = firstProduct; i <= lastProduct; i++) - if(drawProduct(i, accumBit++) == STOP) - goto doneWithFrame; - - COPY_AND_GOTO_IF_DONE("After drawing all target colors and depths"); - - firstProduct = lastProduct + 1; - } - - if(showSurfaces) { - glDisable(GL_STENCIL_TEST); - glDepthMask(GL_FALSE); - glEnable(GL_CULL_FACE); - glCullFace(GL_BACK); - glEnable(GL_BLEND); - magicTranspHack = 1; - for(i = 0; i < numProducts[whichTree]; i++) - { - struct product *p; - p = &products[whichTree][i]; - - if(i == curPrim || !showOnlyCurrent) - drawPrim(p->targetPrim); - } - magicTranspHack = 0; - glDisable(GL_BLEND); - } - -doneWithFrame: - - glPopMatrix(); - - copyInterest(); - glutSwapBuffers(); -} - - -enum trackballModeEnum { - ROTATE, - TRANSLATEXY, - TRANSLATEZ, - SCALEX, - SCALEY, - SCALEZ -} trackballMode = ROTATE; - - -/* ARGSUSED1 */ -void special(int thing, int x, int y) -{ - switch(thing) { - case GLUT_KEY_F1: - prims[curPrim].draw = drawBox; - glutPostRedisplay(); - break; - - case GLUT_KEY_F2: - prims[curPrim].draw = drawCylinder; - glutPostRedisplay(); - break; - - case GLUT_KEY_F3: - prims[curPrim].draw = drawCone; - glutPostRedisplay(); - break; - - case GLUT_KEY_F4: - prims[curPrim].draw = drawSphere; - glutPostRedisplay(); - break; - } -} - -/* ARGSUSED1 */ -void keyboard(unsigned char key, int x, int y) -{ - switch(key) - { - case '1': - case '2': - case '3': - case '4': - whichTree = key - '1'; - glutPostRedisplay(); - break; - - case 'r': - trackballMode = ROTATE; - break; - - case 't': - trackballMode = TRANSLATEXY; - break; - - case 'T': - trackballMode = TRANSLATEZ; - break; - - case 'x': - trackballMode = SCALEX; - break; - - case 'y': - trackballMode = SCALEY; - break; - - case 'z': - trackballMode = SCALEZ; - break; - - case 'q': case 'Q': case '\033': - exit(0); - break; - - case '<': case ',': - if(curXform != &globalXform) - { - curPrim = (curPrim - 1 + numPrims) % numPrims; - curXform = &prims[curPrim].xform; - printf("Manipulating transformation for object %d\n", curPrim); - } - else - { - printf("Have to toggle out of global mode first\n"); - } - glutPostRedisplay(); - break; - - case '>': case '.': - if(curXform != &globalXform) - { - curPrim = (curPrim + 1) % numPrims; - curXform = &prims[curPrim].xform; - printf("Manipulating transformation for object %d\n", curPrim); - } - else - { - printf("Have to toggle out of global mode first\n"); - } - break; - - case 'g': - if(curXform == &globalXform){ - curXform = &prims[curPrim].xform; - printf("Manipulating transformation for object %d\n", curPrim); - }else{ - curXform = &globalXform; - printf("Manipulating global transformation\n"); - } - break; - - case '+': case '=': - whereToStop++; - glutPostRedisplay(); - break; - - case '-': case '_': - whereToStop--; - glutPostRedisplay(); - break; - - case 's': - glutPostRedisplay(); - showSurfaces = !showSurfaces; - break; - - case 'c': - doCSG = ! doCSG; - if(doCSG) - glutDisplayFunc(redrawCSG); - else - glutDisplayFunc(redrawNoCSG); - glutPostRedisplay(); - break; - - case ' ': - showOnlyCurrent = !showOnlyCurrent; - glutPostRedisplay(); - break; - } -} - - -static int ox, oy; - -/* ARGSUSED */ -void button(int b, int state, int x, int y) -{ - ox = x; - oy = y; -} - -void motion(int x, int y) -{ - int dx, dy; - - dx = x - ox; - dy = y - oy; - - ox = x; - oy = y; - - switch(trackballMode) { - case ROTATE: - rotateTrackball(dx, dy, curXform->rotation); - break; - - case SCALEX: - curXform->scale[0] += (dx + dy) / 40.0f; - if(curXform->scale[0] < 1/40.0) - curXform->scale[0] = 1/40.0; - break; - - case SCALEY: - curXform->scale[1] += (dx + dy) / 40.0f; - if(curXform->scale[1] < 1/40.0) - curXform->scale[1] = 1/40.0; - break; - - case SCALEZ: - curXform->scale[2] += (dx + dy) / 40.0f; - if(curXform->scale[2] < 1/40.0) - curXform->scale[2] = 1/40.0; - break; - - case TRANSLATEXY: - curXform->translation[0] += dx / 40.0f; - curXform->translation[1] -= dy / 40.0f; - break; - - case TRANSLATEZ: - curXform->translation[2] += (dx + dy) / 40.0f; - break; - } - glutPostRedisplay(); -} - - -void reshape(int width, int height) -{ - glViewport(0, 0, width, height); - winWidth = width; - winHeight = height; - resizeBuffers(); - glutPostRedisplay(); -} - - -int mainMenu; - - -void mainMenuFunc(int choice) -{ - switch(choice) - { - case 1: - doCSG = !doCSG; - if(doCSG) { - printf("CSG expression on\n"); - glutDisplayFunc(redrawCSG); - glutChangeToMenuEntry(1, "Turn off CSG", 0); - } - else { - printf("CSG expression off\n"); - glutDisplayFunc(redrawNoCSG); - glutChangeToMenuEntry(1, "Turn on CSG", 0); - } - glutPostRedisplay(); - break; - case 2: - showSurfaces = !showSurfaces; - if(showSurfaces) { - printf("Transparent surfaces on\n"); - glutChangeToMenuEntry(2, "(s) Don't show objects transparent in CSG", 2); - } - else { - printf("Transparent surfaces off\n"); - glutChangeToMenuEntry(2, "(s) Show objects transparent in CSG", 2); - } - glutPostRedisplay(); - break; - } -} - - -void interestBufferFunc(int data) -{ - char *s; - - bufferInterest = data; - - switch(data) { - case COLOR: - s = "color"; - break; - - case STENCILVALUES: - s = "stencil values"; - break; - - case STENCILPLANES: - s = "individual stencil plane converage"; - break; - - case DEPTH: - s = "depth"; - break; - } - printf("Now displaying %s data\n", s); - glutPostRedisplay(); -} - - -void csgMenuFunc(int data) -{ - whichTree = data; - glutPostRedisplay(); -} - - -void whichObjectFunc(int data) -{ - switch(data) - { - case 0: - case 1: - case 2: - case 3: - curPrim = data; - curXform = &prims[curPrim].xform; - printf("Editing object %d\n", data); - break; - - case 4: - curXform = &globalXform; - printf("Editing global transformation %d\n", data); - break; - } -} - - -void morphMenuFunc(int data) -{ - switch(data) { - case 0: - prims[curPrim].draw = drawBox; - glutPostRedisplay(); - break; - - case 1: - prims[curPrim].draw = drawCylinder; - glutPostRedisplay(); - break; - - case 2: - prims[curPrim].draw = drawCone; - glutPostRedisplay(); - break; - - case 3: - prims[curPrim].draw = drawSphere; - glutPostRedisplay(); - break; - } -} - - -void helpFakeFunc(int d) -{ -} - - -int main(int argc, char **argv) -{ - int bufferMenu; - int csgMenu; - int whichObjectMenu; - int morphMenu; - int helpFakeMenu; - - glutInitWindowSize(512,512); - glutInit(&argc, argv); - glutInitDisplayString("samples stencil>=3 rgb double depth"); - /* glutInitDisplayMode(GLUT_DOUBLE|GLUT_STENCIL|GLUT_DEPTH|GLUT_RGBA); */ - (void)glutCreateWindow("csg using stencil"); - glutDisplayFunc(redrawNoCSG); - glutKeyboardFunc(keyboard); - glutSpecialFunc(special); - glutMotionFunc(motion); - glutMouseFunc(button); - glutReshapeFunc(reshape); - - glGetIntegerv(GL_STENCIL_BITS, &stenSize); - printf("%d bits of stencil available in this visual\n", stenSize); - - printf("Hit 'S' to turn stencil on/off\n"); - - bufferMenu = glutCreateMenu(interestBufferFunc); - glutAddMenuEntry("Color data", COLOR); - glutAddMenuEntry("Stencil values", STENCILVALUES); - glutAddMenuEntry("Coverage in each stencil plane", STENCILPLANES); - glutAddMenuEntry("Depth data", DEPTH); - - csgMenu = glutCreateMenu(csgMenuFunc); - glutAddMenuEntry("(1) obj 1 MINUS obj 2", 0); - glutAddMenuEntry("(2) obj 2 MINUS obj 1", 1); - glutAddMenuEntry("(3) obj 1 AND obj 2", 2); - glutAddMenuEntry("(4) (obj 1 AND obj 2) MINUS (obj 3 or obj 4)", 3); - - whichObjectMenu = glutCreateMenu(whichObjectFunc); - glutAddMenuEntry("Object 1 (blue)", 0); - glutAddMenuEntry("Object 2 (peach)", 1); - glutAddMenuEntry("Object 3 (green)", 2); - glutAddMenuEntry("Object 4 (purple)", 3); - glutAddMenuEntry("(g) Toggle between global and local", 4); - - morphMenu = glutCreateMenu(morphMenuFunc); - glutAddMenuEntry("(F1) Box", 0); - glutAddMenuEntry("(F2) Cylinder", 1); - glutAddMenuEntry("(F3) Cone", 2); - glutAddMenuEntry("(F4) Sphere", 3); - - helpFakeMenu = glutCreateMenu(helpFakeFunc); - glutAddMenuEntry("Click the left mouse button and drag to manipulate\n", 0); - glutAddMenuEntry("Push 'r' to rotate like a trackball\n", 0); - glutAddMenuEntry("Push 't' to translate in the X-Y plane\n", 0); - glutAddMenuEntry("Push 'T' to translate in the Z axis\n", 0); - glutAddMenuEntry("Push 'X' to scale in X\n", 0); - glutAddMenuEntry("Push 'X' to scale in Y\n", 0); - glutAddMenuEntry("Push 'Z' to scale in Z\n", 0); - - mainMenu = glutCreateMenu(mainMenuFunc); - glutAddMenuEntry("(c) Turn on CSG", 1); - glutAddMenuEntry("(s) Show objects transparent in CSG", 2); - glutAddSubMenu("Buffer of interest", bufferMenu); - glutAddSubMenu("Which CSG expression", csgMenu); - glutAddSubMenu("Object for manipulation", whichObjectMenu); - glutAddSubMenu("Turn current object into...", morphMenu); - glutAddSubMenu("Help with moving and rotating:", helpFakeMenu); - glutAttachMenu(GLUT_RIGHT_BUTTON); - init(); - glutMainLoop(); - - return 0; -} diff --git a/lib/glut-3.7.6/progs/advanced97/csg.dsp b/lib/glut-3.7.6/progs/advanced97/csg.dsp deleted file mode 100644 index 5157a741d..000000000 --- a/lib/glut-3.7.6/progs/advanced97/csg.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="csg" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=csg - 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 "csg.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 "csg.mak" CFG="csg - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "csg - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "csg - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "csg - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "csg - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "csg - Win32 Release" -# Name "csg - Win32 Debug" -# Begin Source File - -SOURCE=.\csg.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/d.c b/lib/glut-3.7.6/progs/advanced97/d.c deleted file mode 100644 index ff0cd8b33..000000000 --- a/lib/glut-3.7.6/progs/advanced97/d.c +++ /dev/null @@ -1,129 +0,0 @@ -#include -#include "stdlib.h" -#include "math.h" - -typedef enum { - RESERVED, BODY_SIDE, BODY_EDGE, BODY_WHOLE, ARM_SIDE, ARM_EDGE, ARM_WHOLE, - LEG_SIDE, LEG_EDGE, LEG_WHOLE, EYE_SIDE, EYE_EDGE, EYE_WHOLE, DINOSAUR -} displayLists; - -/* *INDENT-OFF* */ -GLfloat body[][2] = { {0, 3}, {1, 1}, {5, 1}, {8, 4}, {10, 4}, {11, 5}, - {11, 11.5}, {13, 12}, {13, 13}, {10, 13.5}, {13, 14}, {13, 15}, {11, 16}, - {8, 16}, {7, 15}, {7, 13}, {8, 12}, {7, 11}, {6, 6}, {4, 3}, {3, 2}, - {1, 2} }; -GLfloat arm[][2] = { {8, 10}, {9, 9}, {10, 9}, {13, 8}, {14, 9}, {16, 9}, - {15, 9.5}, {16, 10}, {15, 10}, {15.5, 11}, {14.5, 10}, {14, 11}, {14, 10}, - {13, 9}, {11, 11}, {9, 11} }; -GLfloat leg[][2] = { {8, 6}, {8, 4}, {9, 3}, {9, 2}, {8, 1}, {8, 0.5}, {9, 0}, - {12, 0}, {10, 1}, {10, 2}, {12, 4}, {11, 6}, {10, 7}, {9, 7} }; -GLfloat eye[][2] = { {8.75, 15}, {9, 14.7}, {9.6, 14.7}, {10.1, 15}, - {9.6, 15.25}, {9, 15.25} }; -GLfloat lightZeroPosition[] = {10.0, 4.0, 10.0, 1.0}; -GLfloat lightZeroColor[] = {0.8, 1.0, 0.8, 1.0}; /* green-tinted */ -GLfloat lightOnePosition[] = {-1.0, -2.0, 1.0, 0.0}; -GLfloat lightOneColor[] = {0.6, 0.3, 0.2, 1.0}; /* red-tinted */ -GLfloat skinColor[] = {0.1, 1.0, 0.1, 1.0}, eyeColor[] = {1.0, 0.2, 0.2, 1.0}; -/* *INDENT-ON* */ - -void -extrudeSolidFromPolygon(GLfloat data[][2], unsigned int dataSize, - GLdouble thickness, GLuint side, GLuint edge, GLuint whole) -{ - static GLUtriangulatorObj *tobj = NULL; - GLdouble vertex[3], dx, dy, len; - int i; - int count = dataSize / (int) (2 * sizeof(GLfloat)); - - if (tobj == NULL) { - tobj = gluNewTess(); /* create and initialize a GLU - polygon tesselation object */ - gluTessCallback(tobj, GLU_BEGIN, glBegin); - gluTessCallback(tobj, GLU_VERTEX, glVertex2fv); /* semi-tricky */ - gluTessCallback(tobj, GLU_END, glEnd); - } - glNewList(side, GL_COMPILE); - glShadeModel(GL_SMOOTH); /* smooth minimizes seeing - tessellation */ - gluBeginPolygon(tobj); - for (i = 0; i < count; i++) { - vertex[0] = data[i][0]; - vertex[1] = data[i][1]; - vertex[2] = 0; - gluTessVertex(tobj, vertex, data[i]); - } - gluEndPolygon(tobj); - glEndList(); - glNewList(edge, GL_COMPILE); - glShadeModel(GL_FLAT); /* flat shade keeps angular hands - from being "smoothed" */ - glBegin(GL_QUAD_STRIP); - for (i = 0; i <= count; i++) { - /* mod function handles closing the edge */ - glVertex3f(data[i % count][0], data[i % count][1], 0.0); - glVertex3f(data[i % count][0], data[i % count][1], thickness); - /* Calculate a unit normal by dividing by Euclidean - distance. We * could be lazy and use - glEnable(GL_NORMALIZE) so we could pass in * arbitrary - normals for a very slight performance hit. */ - dx = data[(i + 1) % count][1] - data[i % count][1]; - dy = data[i % count][0] - data[(i + 1) % count][0]; - len = sqrt(dx * dx + dy * dy); - glNormal3f(dx / len, dy / len, 0.0); - } - glEnd(); - glEndList(); - glNewList(whole, GL_COMPILE); - glFrontFace(GL_CW); - glCallList(edge); - glNormal3f(0.0, 0.0, -1.0); /* constant normal for side */ - glCallList(side); - glPushMatrix(); - glTranslatef(0.0, 0.0, thickness); - glFrontFace(GL_CCW); - glNormal3f(0.0, 0.0, 1.0); /* opposite normal for other side */ - glCallList(side); - glPopMatrix(); - glEndList(); -} - -void -makeDinosaur(void) -{ - GLfloat bodyWidth = 3.0; - - extrudeSolidFromPolygon(body, sizeof(body), bodyWidth, - BODY_SIDE, BODY_EDGE, BODY_WHOLE); - extrudeSolidFromPolygon(arm, sizeof(arm), bodyWidth / 4, - ARM_SIDE, ARM_EDGE, ARM_WHOLE); - extrudeSolidFromPolygon(leg, sizeof(leg), bodyWidth / 2, - LEG_SIDE, LEG_EDGE, LEG_WHOLE); - extrudeSolidFromPolygon(eye, sizeof(eye), bodyWidth + 0.2, - EYE_SIDE, EYE_EDGE, EYE_WHOLE); - glNewList(DINOSAUR, GL_COMPILE); - glMaterialfv(GL_FRONT, GL_DIFFUSE, skinColor); - glCallList(BODY_WHOLE); - glPushMatrix(); - glTranslatef(0.0, 0.0, bodyWidth); - glCallList(ARM_WHOLE); - glCallList(LEG_WHOLE); - glTranslatef(0.0, 0.0, -bodyWidth - bodyWidth / 4); - glCallList(ARM_WHOLE); - glTranslatef(0.0, 0.0, -bodyWidth / 4); - glCallList(LEG_WHOLE); - glTranslatef(0.0, 0.0, bodyWidth / 2 - 0.1); - glMaterialfv(GL_FRONT, GL_DIFFUSE, eyeColor); - glCallList(EYE_WHOLE); - glPopMatrix(); - glEndList(); -} - -void -drawDinosaur(void) { - static int first = 1; - if (first) { - makeDinosaur(); - first = 0; - } - glCallList(DINOSAUR); -} diff --git a/lib/glut-3.7.6/progs/advanced97/decal.c b/lib/glut-3.7.6/progs/advanced97/decal.c deleted file mode 100644 index 6dc6c5726..000000000 --- a/lib/glut-3.7.6/progs/advanced97/decal.c +++ /dev/null @@ -1,611 +0,0 @@ -#include -#include -#include -#include - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -GLUquadricObj *quadric; -GLfloat black[] = {0, 0, 0, 1}; -GLfloat white[] = {1, 1, 1, 1}; - - -int winWidth, winHeight; -GLfloat *depthSave = NULL; -GLubyte *stencilSave = NULL; -GLubyte *colorSave = NULL; - - -void resizeBuffers(void) -{ - colorSave = realloc(colorSave, winWidth * winHeight * 4 * sizeof(GLubyte)); - depthSave = realloc(depthSave, winWidth * winHeight * 4 * sizeof(GLfloat)); - stencilSave = (GLubyte *)depthSave; -} - - -void pushOrthoView(float left, float right, float bottom, float top, - float znear, float zfar) -{ - glPushMatrix(); - glLoadIdentity(); - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - glOrtho(left, right, bottom, top, znear, zfar); -} - - -void popView(void) -{ - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); -} - - -void copyDepthToColor(GLenum whichColorBuffer) -{ - int x, y; - GLfloat max, min; - GLint previousColorBuffer; - - glReadPixels(0, 0, winWidth, winHeight, GL_DEPTH_COMPONENT, GL_FLOAT, - depthSave); - - /* I'm sure this could be done much better with OpenGL */ - max = 0; - min = 1; - for(y = 0; y < winHeight; y++) - for(x = 0; x < winWidth; x++) { - if(depthSave[winWidth * y + x] < min) - min = depthSave[winWidth * y + x]; - if(depthSave[winWidth * y + x] > max && depthSave[winWidth * y + x] < .999) - max = depthSave[winWidth * y + x]; - } - - for(y = 0; y < winHeight; y++) - for(x = 0; x < winWidth; x++) { - if(depthSave[winWidth * y + x] <= max) - depthSave[winWidth * y + x] = 1 - (depthSave[winWidth * y + x] - min) / (max - min); - else - depthSave[winWidth * y + x] = 0; - } - - pushOrthoView(0, 1, 0, 1, 0, 1); - glRasterPos3f(0, 0, -.5); - glDisable(GL_DEPTH_TEST); - glDisable(GL_STENCIL_TEST); - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - glGetIntegerv(GL_DRAW_BUFFER, &previousColorBuffer); - glDrawBuffer(whichColorBuffer); - glDrawPixels(winWidth, winHeight, GL_LUMINANCE , GL_FLOAT, depthSave); - glDrawBuffer(previousColorBuffer); - glEnable(GL_DEPTH_TEST); - popView(); -} - - -unsigned char colors[][3] = -{ - {255, 0, 0}, /* red */ - {255, 218, 0}, /* yellow */ - {72, 255, 0}, /* yellowish green */ - {0, 255, 145}, /* bluish cyan */ - {0, 145, 255}, /* cyanish blue */ - {72, 0, 255}, /* purplish blue */ - {255, 0, 218}, /* reddish purple */ -}; - - -void copyStencilToColor(GLenum whichColorBuffer) -{ - int x, y; - GLint previousColorBuffer; - - glReadPixels(0, 0, winWidth, winHeight, GL_STENCIL_INDEX, GL_UNSIGNED_BYTE, - stencilSave); - - /* I'm sure this could be done much better with OpenGL */ - for(y = 0; y < winHeight; y++) - for(x = 0; x < winWidth; x++) { - int stencilValue; - - stencilValue = stencilSave[winWidth * y + x]; - - colorSave[(winWidth * y + x) * 3 + 0] = colors[stencilValue % 7][0]; - colorSave[(winWidth * y + x) * 3 + 1] = colors[stencilValue % 7][1]; - colorSave[(winWidth * y + x) * 3 + 2] = colors[stencilValue % 7][2]; - } - - pushOrthoView(0, 1, 0, 1, 0, 1); - glRasterPos3f(0, 0, -.5); - glDisable(GL_DEPTH_TEST); - glDisable(GL_STENCIL_TEST); - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - glGetIntegerv(GL_DRAW_BUFFER, &previousColorBuffer); - glDrawBuffer(whichColorBuffer); - glDrawPixels(winWidth, winHeight, GL_RGB, GL_UNSIGNED_BYTE, colorSave); - glDrawBuffer(previousColorBuffer); - glEnable(GL_DEPTH_TEST); - popView(); -} - - -int useStencil = 0; -int stage = 6; -typedef enum {COLOR, DEPTH, STENCIL} DataChoice; -DataChoice dataChoice = COLOR; - -void init(void) -{ - glEnable(GL_DEPTH_TEST); - glEnable(GL_CULL_FACE); - glCullFace(GL_BACK); - - quadric = gluNewQuadric(); - - glMatrixMode(GL_PROJECTION); - glFrustum(-.33, .33, -.33, .33, .5, 40); - - glMatrixMode(GL_MODELVIEW); - gluLookAt(-4, 10, 6, 0, 0, 0, 0, 1, 0); - - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - - glEnable(GL_NORMALIZE); - - /* - * only need this to clear stencil and only need to clear stencil - * when you're looking at it; the algorithm works without it. - */ - glClearStencil(5); -} - - -void setupLight(void) -{ - static GLfloat lightpos[] = {0, 1, 0, 0}; - - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); -} - - -void setupNormalDrawingState(void) -{ - glDisable(GL_STENCIL_TEST); - glEnable(GL_DEPTH_TEST); - glDepthMask(1); -} - -void setupBasePolygonState(int maxDecal) -{ - glEnable(GL_DEPTH_TEST); - if(useStencil) { - glEnable(GL_STENCIL_TEST); - glStencilFunc(GL_ALWAYS, maxDecal + 1, 0xff); - glStencilOp(GL_KEEP, GL_REPLACE, GL_ZERO); - } -} - - -void setupDecalState(int decalNum) -{ - if(useStencil) { - glDisable(GL_DEPTH_TEST); - glDepthMask(0); - glEnable(GL_STENCIL_TEST); - glStencilFunc(GL_GREATER, decalNum, 0xff); - glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); - } -} - - -void drawAirplane(void) -{ - GLfloat airplaneColor[4] = {.75, .75, .75, 1}; - - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, airplaneColor); - - glDisable(GL_CULL_FACE); - - glPushMatrix(); - glTranslatef(0, 0, -2.5); - - gluCylinder(quadric, .5, .5, 5, 10, 10); - - glPushMatrix(); - glTranslatef(0, 0, 5); - gluCylinder(quadric, .5, 0, 1, 10, 10); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(0, 0, 3); - glScalef(3, .1, 1); - gluSphere(quadric, 1, 10, 10); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(0, 0, .5); - glScalef(2, .1, .5); - gluSphere(quadric, 1, 10, 10); - glPopMatrix(); - - glEnable(GL_CULL_FACE); - - glBegin(GL_TRIANGLES); - glNormal3f(1, 0, 0); - glVertex3f(0, 1.5, 0); - glVertex3f(0, .5, 1); - glVertex3f(0, .5, 0); - glNormal3f(-1, 0, 0); - glVertex3f(0, 1.5, 0); - glVertex3f(0, .5, 0); - glVertex3f(0, .5, 1); - glEnd(); - - glDisable(GL_CULL_FACE); - - glRotatef(180, 0, 1, 0); - gluDisk(quadric, 0, .5, 10, 10); - - glPopMatrix(); - - glEnable(GL_CULL_FACE); -} - - -void drawGround(void) -{ - GLfloat groundColor[4] = {.647, .165, .165, 1}; - - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, groundColor); - - glBegin(GL_QUADS); - glNormal3i(0, 1, 0); - glVertex3f(10, 0, 10); - glVertex3f(10, 0, -10); - glVertex3f(-10, 0, -10); - glVertex3f(-10, 0, 10); - glEnd(); -} - - -void drawAsphalt(void) -{ - GLfloat asphaltColor[4] = {.25, .25, .25, 1}; - - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, asphaltColor); - - glBegin(GL_QUADS); - glNormal3i(0, 1, 0); - glVertex3f(5, 0, 9.5); - glVertex3f(5, 0, -9.5); - glVertex3f(-5, 0, -9.5); - glVertex3f(-5, 0, 9.5); - glEnd(); -} - - -int numStripes = 5; -float stripeGap = .66; - - -void drawStripes(void) -{ - GLfloat stripeColor[4] = {1, 1, 0, 1}; - int i; - float stripeLength; - - stripeLength = (16 - stripeGap * (numStripes - 1)) / numStripes; - - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, stripeColor); - - glBegin(GL_QUADS); - - glNormal3i(0, 1, 0); - - glVertex3f(4.5, 0, 8.5); - glVertex3f(4.5, 0, -8.5); - glVertex3f(3.5, 0, -8.5); - glVertex3f(3.5, 0, 8.5); - - glVertex3f(-3.5, 0, 8.5); - glVertex3f(-3.5, 0, -8.5); - glVertex3f(-4.5, 0, -8.5); - glVertex3f(-4.5, 0, 8.5); - - for(i = 0; i < numStripes; i++) { - glVertex3f(.5, 0, 8 - i * (stripeLength + stripeGap)); - glVertex3f(.5, 0, 8 - i * (stripeLength + stripeGap) - stripeLength); - glVertex3f(-.5, 0, 8 - i * (stripeLength + stripeGap) - stripeLength); - glVertex3f(-.5, 0, 8 - i * (stripeLength + stripeGap)); - } - glEnd(); -} - - -void redraw(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - /* Only need this if you care to look at the stencil buffer */ - if(dataChoice == STENCIL) - glClear(GL_STENCIL_BUFFER_BIT); - - glPushMatrix(); - glScalef(.5, .5, .5); - - if(stage == 1) - goto doneWithFrame; - - setupLight(); - - setupNormalDrawingState(); - glPushMatrix(); - glTranslatef(0, 1, 4); - glRotatef(135, 0, 1, 0); - drawAirplane(); - glPopMatrix(); - - if(stage == 2) - goto doneWithFrame; - - setupBasePolygonState(3); /* 2 decals */ - drawGround(); - - if(stage == 3) - goto doneWithFrame; - - setupDecalState(1); /* decal # 1 = the runway asphalt */ - drawAsphalt(); - - if(stage == 4) - goto doneWithFrame; - - setupDecalState(2); /* decal # 2 = yellow paint on the runway */ - drawStripes(); - - if(stage == 5) - goto doneWithFrame; - - setupDecalState(3); /* decal # 3 = the plane's shadow */ - glDisable(GL_LIGHTING); - glEnable(GL_BLEND); - glPushMatrix(); - glColor4f(0, 0, 0, .5); - glTranslatef(0, 0, 4); - glRotatef(135, 0, 1, 0); - glScalef(1, 0, 1); - drawAirplane(); - glPopMatrix(); - glDisable(GL_BLEND); - glEnable(GL_LIGHTING); - -doneWithFrame: - - setupNormalDrawingState(); - - glPopMatrix(); - - switch(dataChoice) { - case COLOR: - break; /* color already in back buffer */ - - case STENCIL: - copyStencilToColor(GL_BACK); - break; - - case DEPTH: - copyDepthToColor(GL_BACK); - break; - } - - glutSwapBuffers(); -} - - -void reshape(int width, int height) -{ - glViewport(0, 0, width, height); - winWidth = width; - winHeight = height; - resizeBuffers(); - glutPostRedisplay(); -} - - -static int ox, oy; -static int mode; - - -/* ARGSUSED */ -void button(int b, int state, int x, int y) -{ - ox = x; - oy = y; - mode = b; -} - - -void motion(int x, int y) -{ - static float ang = 0; - static float height = 10; - float eyex, eyez; - - if(mode == GLUT_LEFT_BUTTON) - { - ang += (x - ox) / 512.0 * M_PI; - height += (y - oy) / 512.0 * 10; - eyex = cos(ang) * 7; - eyez = sin(ang) * 7; - glLoadIdentity(); - gluLookAt(eyex, height, eyez, 0, 0, 0, 0, 1, 0); - glutPostRedisplay(); - ox = x; - oy = y; - } -} - - -void changeData(int data) -{ - char *s; - - dataChoice = data; - glutPostRedisplay(); - - switch(data) { - case COLOR: - s = "color"; - break; - - case STENCIL: - s = "stencil"; - break; - - case DEPTH: - s = "depth"; - break; - } - printf("Now displaying %s data\n", s); -} - - -void changeStage(int data) -{ - char *s; - - stage = data; - glutPostRedisplay(); - switch(data) { - case 1: - s = "clearing"; - break; - - case 2: - s = "drawing airplane"; - break; - - case 3: - s = "drawing ground"; - break; - - case 4: - s = "drawing asphalt"; - break; - - case 5: - s = "drawing paint"; - break; - - case 6: - s = "drawing shadow"; - break; - } - printf("Now displaying frame after %s\n", s); -} - - -int mainMenu; - -void stencilDecalEnable(int enabled) -{ - glutSetMenu(mainMenu); - if(enabled){ - glutChangeToMenuEntry(1, "Turn off stencil decal", 0); - printf("Stencil decaling turned on\n"); - glutPostRedisplay(); - } else { - glutChangeToMenuEntry(1, "Turn on stencil decal", 1); - printf("Stencil decaling turned off\n"); - glutPostRedisplay(); - } - useStencil = enabled; -} - - -/* - * Basically shortcuts for menu items - */ -/* ARGSUSED1 */ -void keyboard(unsigned char key, int x, int y) -{ - switch(key) { - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - changeStage(key - '0'); - break; - - case 's': case 'S': - stencilDecalEnable(! useStencil); - break; - - case 'q': case 'Q': case '\033': - exit(0); - break; - - default: - fprintf(stderr, "Push right mouse button for menu\n"); - break; - } -} - - -int main(int argc, char **argv) -{ - int bufferMenu; - int finishMenu; - int stenSize; - - glutInitWindowSize(winWidth = 512, winHeight = 512); - glutInit(&argc, argv); - glutInitDisplayString("samples stencil>=3 rgb double depth"); - /* glutInitDisplayMode(GLUT_DOUBLE|GLUT_STENCIL|GLUT_DEPTH|GLUT_ALPHA); */ - (void)glutCreateWindow("decaling using stencil"); - glutDisplayFunc(redraw); - glutKeyboardFunc(keyboard); - glutMotionFunc(motion); - glutMouseFunc(button); - glutReshapeFunc(reshape); - - resizeBuffers(); - glGetIntegerv(GL_STENCIL_BITS, &stenSize); - fprintf(stderr, "(%d bits of stencil available in this visual)\n", stenSize); - - fprintf(stderr, "Hit 'h' for help message\n"); - - finishMenu = glutCreateMenu(changeStage); - glutAddMenuEntry("Clearing screen", 1); - glutAddMenuEntry("Drawing airplane", 2); - glutAddMenuEntry("Drawing ground ", 3); - glutAddMenuEntry("Drawing asphalt", 4); - glutAddMenuEntry("Drawing paint", 5); - glutAddMenuEntry("Drawing shadow", 6); - - bufferMenu = glutCreateMenu(changeData); - glutAddMenuEntry("Color data", COLOR); - glutAddMenuEntry("Stencil data", STENCIL); - glutAddMenuEntry("Depth data", DEPTH); - - mainMenu = glutCreateMenu(stencilDecalEnable); - glutAddMenuEntry("Turn on stencil decal", 1); - glutAddSubMenu("Visible buffer", bufferMenu); - glutAddSubMenu("Finish frame after...", finishMenu); - glutAttachMenu(GLUT_RIGHT_BUTTON); - init(); - glutMainLoop(); - - return 0; -} diff --git a/lib/glut-3.7.6/progs/advanced97/decal.dsp b/lib/glut-3.7.6/progs/advanced97/decal.dsp deleted file mode 100644 index b0c8bccdd..000000000 --- a/lib/glut-3.7.6/progs/advanced97/decal.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="decal" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=decal - 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 "decal.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 "decal.mak" CFG="decal - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "decal - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "decal - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "decal - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "decal - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "decal - Win32 Release" -# Name "decal - Win32 Debug" -# Begin Source File - -SOURCE=.\decal.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/dissolve.c b/lib/glut-3.7.6/progs/advanced97/dissolve.c deleted file mode 100644 index a09011cc6..000000000 --- a/lib/glut-3.7.6/progs/advanced97/dissolve.c +++ /dev/null @@ -1,443 +0,0 @@ -/* -** An Example of dissolve, using stencil -*/ -#include -#include -#include -#include -#include - -#ifdef _WIN32 -#define drand48() ((double)rand()/RAND_MAX) -#endif - -int winWidth = 512; -int winHeight = 512; - -/* -** Create a single component texture map -*/ -GLfloat *make_texture(int maxs, int maxt) -{ - int s, t; - static GLfloat *texture; - - texture = (GLfloat *)malloc(maxs * maxt * sizeof(GLfloat)); - for(t = 0; t < maxt; t++) { - for(s = 0; s < maxs; s++) { - texture[s + maxs * t] = ((s >> 4) & 0x1) ^ ((t >> 4) & 0x1); - } - } - return texture; -} - -enum {SPHERE = 1, CONE}; - - - - -GLfloat angle = 0.f; /* angle of rotating object in layer 0 */ - -enum {X, Y}; -GLboolean eraser = GL_FALSE; -GLint layer = 1; -GLint eraserpos[2] = {512/8, 512/12}; - -/* draw eraser and erase what's underneath */ - -GLubyte *eraserpix = 0; -int erasersize = 0; -int eraserWidth; -int eraserHeight; -void -makeEraser(void) -{ - int i; - int x, y; - int dx, dy; - float d; - - eraserWidth = winWidth / 6; - eraserHeight = winHeight / 6; - erasersize = 4 * eraserWidth * eraserHeight; - eraserpix = (GLubyte *)realloc(eraserpix, erasersize * sizeof(GLubyte)); - - - /* make it not erase */ - (void)memset(eraserpix, 0, erasersize * sizeof(GLubyte)); - - i = 0; - for(y = 0; y < eraserHeight; y++) - for(x = 0; x < eraserWidth; x++) - { - dx = x - eraserWidth / 2; - dy = y - eraserHeight / 2; - d = sqrt(dx * dx + dy * dy); - if(pow(drand48(), .75) * eraserWidth / 2 > d) - { - eraserpix[i + 0] = 255; - eraserpix[i + 1] = 255; - eraserpix[i + 2] = 255; - eraserpix[i + 3] = 255; - } - i += 4; - } -} - - -/* left button, first layer, middle button, second layer */ -/* ARGSUSED */ -void -mouse(int button, int state, int x, int y) -{ - if(state == GLUT_DOWN) { - eraser = GL_TRUE; - if(button == GLUT_LEFT_BUTTON) - layer = 1; - else /* GLUT_MIDDLE: GLUT_RIGHT is for menu */ - layer = 0; - } else { /* GLUT_UP */ - eraser = GL_FALSE; - } - glutPostRedisplay(); -} - - -enum {CLEAR}; /* menu choices */ -GLboolean clearstencil = GL_TRUE; - -void -menu(int choice) -{ - switch(choice) { - case CLEAR: - clearstencil = GL_TRUE; - break; - } - glutPostRedisplay(); -} - -/* used to get current width and height of viewport */ -void -reshape(int wid, int ht) -{ - glViewport(0, 0, wid, ht); - winWidth = wid; - winHeight = ht; - clearstencil = GL_TRUE; - makeEraser(); - glutPostRedisplay(); -} - - - -void -draweraser(void) -{ - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluOrtho2D(0, winWidth, 0, winHeight); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - /* replace with this layer */ - glStencilFunc(GL_ALWAYS, layer, 0); - glStencilOp(GL_KEEP, GL_REPLACE, GL_REPLACE); - glDisable(GL_LIGHTING); - glDisable(GL_DEPTH_TEST); - - glEnable(GL_ALPHA_TEST); - glAlphaFunc(GL_NOTEQUAL, 0); - glRasterPos2i(eraserpos[X], eraserpos[Y]); - glBitmap(0, 0, 0.f, 0.f, -winWidth/8.f, -winHeight/12.f, 0); - glDrawPixels(eraserWidth, eraserHeight, GL_RGBA, GL_UNSIGNED_BYTE, eraserpix); - glDisable(GL_ALPHA_TEST); -} - - -void -drawlayer2(void) -{ - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluOrtho2D(0, winWidth, 0, winHeight); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - glDisable(GL_LIGHTING); - glDisable(GL_DEPTH_TEST); - glEnable(GL_TEXTURE_2D); - - glBegin(GL_QUADS); - glTexCoord2i(0, 0); - glVertex2i(0, 0); - glTexCoord2i(1, 0); - glVertex2i(winWidth, 0); - glTexCoord2i(1, 1); - glVertex2i(winWidth, winHeight); - glTexCoord2i(0, 1); - glVertex2i(0, winHeight); - glEnd(); - - glDisable(GL_TEXTURE_2D); - - if(glGetError()) /* to catch programming errors; should never happen */ - printf("Oops! I screwed up my OpenGL calls somewhere\n"); - -} - -void -drawlayer1(void) -{ - /* material properties for objects in scene */ - static GLfloat wall_mat[] = {1.f, 1.f, 1.f, 1.f}; - static GLfloat lightpos[] = {50.f, 50.f, -320.f, 1.f}; - - /* draw a perspective scene */ - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glFrustum(-100., 100., -100., 100., 320., 640.); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - /* turn on features */ - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - - /* place light 0 in the right place */ - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - - /* remove back faces to speed things up */ - glCullFace(GL_BACK); - - /* - ** Note: wall verticies are ordered so they are all front facing - ** this lets me do back face culling to speed things up. - */ - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, wall_mat); - - /* floor */ - /* make the floor textured */ - glEnable(GL_TEXTURE_2D); - - /* - ** Since we want to turn texturing on for floor only, we have to - ** make floor a separate glBegin()/glEnd() sequence. You can't - ** turn texturing on and off between begin and end calls - */ - glBegin(GL_QUADS); - glNormal3f(0.f, 1.f, 0.f); - glTexCoord2i(0, 0); - glVertex3f(-100.f, -100.f, -320.f); - glTexCoord2i(1, 0); - glVertex3f( 100.f, -100.f, -320.f); - glTexCoord2i(1, 1); - glVertex3f( 100.f, -100.f, -520.f); - glTexCoord2i(0, 1); - glVertex3f(-100.f, -100.f, -520.f); - glEnd(); - - glDisable(GL_TEXTURE_2D); - - /* walls */ - - glBegin(GL_QUADS); - /* left wall */ - glNormal3f(1.f, 0.f, 0.f); - glVertex3f(-100.f, -100.f, -320.f); - glVertex3f(-100.f, -100.f, -520.f); - glVertex3f(-100.f, 100.f, -520.f); - glVertex3f(-100.f, 100.f, -320.f); - - /* right wall */ - glNormal3f(-1.f, 0.f, 0.f); - glVertex3f( 100.f, -100.f, -320.f); - glVertex3f( 100.f, 100.f, -320.f); - glVertex3f( 100.f, 100.f, -520.f); - glVertex3f( 100.f, -100.f, -520.f); - - /* ceiling */ - glNormal3f(0.f, -1.f, 0.f); - glVertex3f(-100.f, 100.f, -320.f); - glVertex3f(-100.f, 100.f, -520.f); - glVertex3f( 100.f, 100.f, -520.f); - glVertex3f( 100.f, 100.f, -320.f); - - /* back wall */ - glNormal3f(0.f, 0.f, 1.f); - glVertex3f(-100.f, -100.f, -520.f); - glVertex3f( 100.f, -100.f, -520.f); - glVertex3f( 100.f, 100.f, -520.f); - glVertex3f(-100.f, 100.f, -520.f); - glEnd(); - - glPushMatrix(); - glTranslatef(-80.f, -80.f, -420.f); - glCallList(SPHERE); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(-20.f, -100.f, -500.f); - glCallList(CONE); - glPopMatrix(); - - if(glGetError()) /* to catch programming errors; should never happen */ - printf("Oops! I screwed up my OpenGL calls somewhere\n"); -} - - -void -drawlayer0(void) -{ - static GLfloat lightpos[] = {50.f, 50.f, 0.f, 1.f}; - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho(-50.f, 50.f, -50.f, 50.f, 0.f, 100.f); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(0.f, 0.f, -50.f); - glRotatef(angle, 0.f, 1.f, 0.f); - glRotatef(90.f, 0.f, 0.f, 1.f); - glTranslatef(0.f, -25.f, 0.f); - - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - glCullFace(GL_BACK); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - - glCallList(CONE); - -} - -void -redraw(void) -{ - if(glutLayerGet(GLUT_NORMAL_DAMAGED) || - clearstencil == GL_TRUE) { - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT); - clearstencil = GL_FALSE; - } else - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - - glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); - - glStencilFunc(GL_EQUAL, 2, (unsigned)~0); - drawlayer2(); - - glStencilFunc(GL_EQUAL, 1, (unsigned)~0); - drawlayer1(); - - glStencilFunc(GL_EQUAL, 0, (unsigned)~0); - drawlayer0(); - - if(eraser) - draweraser(); - - glutSwapBuffers(); -} - -void -idle(void) -{ - angle += 1.f; - glutPostRedisplay(); -} - - -void -passive(int x, int y) -{ - - eraserpos[X] = x; - eraserpos[Y] = winHeight - y; -} - - -void -motion(int x, int y) -{ - - eraserpos[X] = x; - eraserpos[Y] = winHeight - y; - - glutPostRedisplay(); -} - -/* ARGSUSED1 */ -void key(unsigned char key, int x, int y) -{ - switch(key) { - case '\033': - exit(0); - } -} - -const int TEXDIM = 256; -GLfloat *tex = 0; - -main(int argc, char *argv[]) -{ - static GLfloat sphere_mat[] = {1.f, .5f, 0.f, 1.f}; - static GLfloat cone_mat[] = {0.f, .5f, 1.f, 1.f}; - GLUquadricObj *sphere, *cone, *base; - - glutInit(&argc, argv); - glutInitWindowSize(winWidth, winHeight); - glutInitDisplayMode(GLUT_DOUBLE|GLUT_STENCIL|GLUT_DEPTH); - (void)glutCreateWindow("dissolve"); - glutDisplayFunc(redraw); - glutMouseFunc(mouse); - glutMotionFunc(motion); - glutPassiveMotionFunc(passive); - glutKeyboardFunc(key); - glutIdleFunc(idle); - glutReshapeFunc(reshape); - - glutCreateMenu(menu); - glutAddMenuEntry("Clear Stencil", CLEAR); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - - glNewList(SPHERE, GL_COMPILE); - /* make display lists for sphere and cone; for efficiency */ - sphere = gluNewQuadric(); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, sphere_mat); - gluSphere(sphere, 20.f, 20, 20); - gluDeleteQuadric(sphere); - glEndList(); - - glNewList(CONE, GL_COMPILE); - cone = gluNewQuadric(); - base = gluNewQuadric(); - glRotatef(-90.f, 1.f, 0.f, 0.f); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, cone_mat); - gluQuadricOrientation(base, GLU_INSIDE); - gluDisk(base, 0., 20., 20, 1); - gluCylinder(cone, 20., 0., 60., 20, 20); - gluDeleteQuadric(cone); - gluDeleteQuadric(base); - glEndList(); - - makeEraser(); - - /* load pattern for current 2d texture */ - tex = make_texture(TEXDIM, TEXDIM); - glTexImage2D(GL_TEXTURE_2D, 0, 1, TEXDIM, TEXDIM, 0, GL_RED, GL_FLOAT, tex); - free(tex); - - glClearStencil(2); - glEnable(GL_STENCIL_TEST); /* used all the time */ - - glEnable(GL_CULL_FACE); - glCullFace(GL_BACK); - - glutMainLoop(); - - return 0; -} diff --git a/lib/glut-3.7.6/progs/advanced97/dissolve.dsp b/lib/glut-3.7.6/progs/advanced97/dissolve.dsp deleted file mode 100644 index 330ae94db..000000000 --- a/lib/glut-3.7.6/progs/advanced97/dissolve.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="dissolve" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=dissolve - 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 "dissolve.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 "dissolve.mak" CFG="dissolve - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "dissolve - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "dissolve - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "dissolve - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "dissolve - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "dissolve - Win32 Release" -# Name "dissolve - Win32 Debug" -# Begin Source File - -SOURCE=.\dissolve.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/explode.c b/lib/glut-3.7.6/progs/advanced97/explode.c deleted file mode 100644 index 3efac3797..000000000 --- a/lib/glut-3.7.6/progs/advanced97/explode.c +++ /dev/null @@ -1,388 +0,0 @@ -#include -#include -#include -#include -#include "texture.h" - -#ifndef __sgi -/* Most math.h's do not define float versions of the trig functions. */ -#define sinf sin -#define cosf cos -#define atan2f atan2 -#endif - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -static int texture = 1; -static float rot = 0; -static float opacity = 1.0; -static float intensity = 1.0; -static float size = .001, delta = 0; -static float scale = 1.; -static float transx, transy, rotx, roty; -static int ox = -1, oy = -1; -static int mot = 0; -#define PAN 1 -#define ROT 2 - -void -pan(int x, int y) { - transx += (x-ox)/500.; - transy -= (y-oy)/500.; - ox = x; oy = y; - glutPostRedisplay(); -} - -void -rotate(int x, int y) { - rotx += x-ox; - if (rotx > 360.) rotx -= 360.; - else if (rotx < -360.) rotx += 360.; - roty += y-oy; - if (roty > 360.) roty -= 360.; - else if (roty < -360.) roty += 360.; - ox = x; oy = y; - glutPostRedisplay(); -} - -void -motion(int x, int y) { - if (mot == PAN) pan(x, y); - else if (mot == ROT) rotate(x,y); -} - -void -mouse(int button, int state, int x, int y) { - if(state == GLUT_DOWN) { - switch(button) { - case GLUT_LEFT_BUTTON: - mot = PAN; - motion(ox = x, oy = y); - break; - case GLUT_RIGHT_BUTTON: - mot = ROT; - motion(ox = x, oy = y); - break; - case GLUT_MIDDLE_BUTTON: - break; - } - } else if (state == GLUT_UP) { - mot = 0; - } -} - -void afunc(void) { - static int state; - if (state ^= 1) { - glAlphaFunc(GL_GREATER, .01); - glEnable(GL_ALPHA_TEST); - } else { - glDisable(GL_ALPHA_TEST); - } -} - -void bfunc(void) { - static int state; - if (state ^= 1) { - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glEnable(GL_BLEND); - } else { - glDisable(GL_BLEND); - } -} - -void tfunc(void) { - texture ^= 1; -} - -void up(void) { scale += .1; } -void down(void) { scale -= .1; } -void left(void) { intensity -= .05f; if (intensity < 0.f) intensity = 0.0f; } -void right(void) { intensity += .05f; if (intensity > 1.f) intensity = 1.0f; } - -void help(void) { - printf("Usage: explode [image]\n"); - printf("'h' - help\n"); - printf("'a' - toggle alpha test\n"); - printf("'b' - toggle blend\n"); - printf("'t' - toggle texturing\n"); - printf("'UP' - scale up\n"); - printf("'DOWN' - scale down\n"); - printf("'LEFT' - darken\n"); - printf("'RIGHT' - brighten\n"); - printf("left mouse - pan\n"); - printf("right mouse - rotate\n"); -} - -void init(char *filename) { - static unsigned *image; - static int width, height, components; - if (filename) { - image = read_texture(filename, &width, &height, &components); - if (image == NULL) { - fprintf(stderr, "Error: Can't load image file \"%s\".\n", - filename); - exit(EXIT_FAILURE); - } else { - printf("%d x %d image loaded\n", width, height); - } - if (components != 2 && components != 4) { - printf("must be an RGBA or LA image\n"); - exit(EXIT_FAILURE); - } - } else { - int i, j; - unsigned char *img; - components = 4; width = height = 512; - image = (unsigned *) malloc(width*height*sizeof(unsigned)); - img = (unsigned char *)image; - for (j = 0; j < height; j++) - for (i = 0; i < width; i++) { - int w2 = width/2, h2 = height/2; - if (i & 32) - img[4*(i+j*width)+0] = 0xff; - else - img[4*(i+j*width)+1] = 0xff; - if (j&32) - img[4*(i+j*width)+2] = 0xff; - if ((i-w2)*(i-w2) + (j-h2)*(j-h2) > 64*64 && - (i-w2)*(i-w2) + (j-h2)*(j-h2) < 300*300) img[4*(i+j*width)+3] = 0xff; - } - - } - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexImage2D(GL_TEXTURE_2D, 0, components, width, - height, 0, GL_RGBA, GL_UNSIGNED_BYTE, - image); - glEnable(GL_TEXTURE_2D); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(50.,1.,.1,20.); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(0.,0.,-5.5); - glClearColor(.25f, .25f, .75f, .25f); - - glAlphaFunc(GL_GREATER, 0.016); - glEnable(GL_ALPHA_TEST); - - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glEnable(GL_DEPTH_TEST); - - glEnable(GL_LIGHT0); - glEnable(GL_COLOR_MATERIAL); - glEnable(GL_NORMALIZE); -} - -void -animate(void) { - if (delta > 10) { - delta = 0.f; - size = 0.f; - opacity = 1.f; - rot = 0.f; - } - size += .08f; - delta += .07f; - rot += .9f; - opacity -= .005f; - - glutPostRedisplay(); -} - -void -cube(void) { - glBegin(GL_QUADS); - glNormal3f(0.f, 0.f, -1.f); - glTexCoord2f(0.0, 0.0); glVertex3f(-1.0, -1.0, -1.0); - glTexCoord2f(1.0, 0.0); glVertex3f( 1.0, -1.0, -1.0); - glTexCoord2f(1.0, 1.0); glVertex3f( 1.0, 1.0, -1.0); - glTexCoord2f(0.0, 1.0); glVertex3f(-1.0, 1.0, -1.0); - - glNormal3f(0.f, 0.f, 1.f); - glTexCoord2f(0.0, 0.0); glVertex3f(-1.0, -1.0, 1.0); - glTexCoord2f(1.0, 0.0); glVertex3f( 1.0, -1.0, 1.0); - glTexCoord2f(1.0, 1.0); glVertex3f( 1.0, 1.0, 1.0); - glTexCoord2f(0.0, 1.0); glVertex3f(-1.0, 1.0, 1.0); - - glNormal3f(0.f, 1.f, 0.f); - glTexCoord2f(0.0, 0.0); glVertex3f(-1.0, 1.0, -1.0); - glTexCoord2f(1.0, 0.0); glVertex3f( 1.0, 1.0, -1.0); - glTexCoord2f(1.0, 1.0); glVertex3f( 1.0, 1.0, 1.0); - glTexCoord2f(0.0, 1.0); glVertex3f(-1.0, 1.0, 1.0); - - glNormal3f(0.f, -1.f, 0.f); - glTexCoord2f(0.0, 0.0); glVertex3f(-1.0, -1.0, -1.0); - glTexCoord2f(1.0, 0.0); glVertex3f( 1.0, -1.0, -1.0); - glTexCoord2f(1.0, 1.0); glVertex3f( 1.0, -1.0, 1.0); - glTexCoord2f(0.0, 1.0); glVertex3f(-1.0, -1.0, 1.0); - - glNormal3f( 1.f, 0.f, 0.f); - glTexCoord2f(0.0, 0.0); glVertex3f( 1.0, -1.0, -1.0); - glTexCoord2f(1.0, 0.0); glVertex3f( 1.0, 1.0, -1.0); - glTexCoord2f(1.0, 1.0); glVertex3f( 1.0, 1.0, 1.0); - glTexCoord2f(0.0, 1.0); glVertex3f( 1.0, -1.0, 1.0); - - glNormal3f(-1.f, 0.f, 0.f); - glTexCoord2f(0.0, 0.0); glVertex3f(-1.0, -1.0, -1.0); - glTexCoord2f(1.0, 0.0); glVertex3f(-1.0, 1.0, -1.0); - glTexCoord2f(1.0, 1.0); glVertex3f(-1.0, 1.0, 1.0); - glTexCoord2f(0.0, 1.0); glVertex3f(-1.0, -1.0, 1.0); - glEnd(); -} - -static void calcMatrix(void); - -void display(void) { - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - - glLoadIdentity(); -#define RAD(x) (((x)*M_PI)/180.) - gluLookAt(-sinf(RAD(rotx))*5.5,transy,cosf(RAD(rotx))*5.5, 0.,0.,0., 0.,1.,0.); - - /* floor */ - glColor4f(0.f,.2f,0.f,1.f); - glBegin(GL_POLYGON); - glVertex3f(-4.0, -1.0, -4.0); - glVertex3f( 4.0, -1.0, -4.0); - glVertex3f( 4.0, -1.0, 4.0); - glVertex3f(-4.0, -1.0, 4.0); - glEnd(); - - glEnable(GL_LIGHTING); - glPushMatrix(); - glColor3f(.3f,.3f,.3f); - glPushMatrix(); - glTranslatef(-1.f, -1.+.2f, -1.5f); - glScalef(.2f,.2f, .2f); - cube(); - glPopMatrix(); - glDisable(GL_LIGHTING); - - glTranslatef(-1.f, -1.f, -1.5f); - calcMatrix(); - glScalef(size,size,1.); - if (texture) glEnable(GL_TEXTURE_2D); - glColor4f(intensity, intensity, intensity, opacity); - glDepthMask(0); - glBegin(GL_POLYGON); - glTexCoord2f(0.0, 0.0); glVertex2f(-1.0, -1.0); - glTexCoord2f(1.0, 0.0); glVertex2f(1.0, -1.0); - glTexCoord2f(1.0, 1.0); glVertex2f(1.0, 1.0); - glTexCoord2f(0.0, 1.0); glVertex2f(-1.0, 1.0); - glEnd(); - glDepthMask(1); - glPopMatrix(); - glDisable(GL_TEXTURE_2D); - - glutSwapBuffers(); -} - -void reshape(int w, int h) { - glViewport(0, 0, w, h); -} - -/* ARGSUSED1 */ -void -key(unsigned char key, int x, int y) { - switch(key) { - case 'a': afunc(); break; - case 'b': bfunc(); break; - case 'h': help(); break; - case 't': tfunc(); break; - case '\033': exit(EXIT_SUCCESS); break; - default: break; - } - glutPostRedisplay(); -} - -/* ARGSUSED1 */ -void -special(int key, int x, int y) { - switch(key) { - case GLUT_KEY_UP: up(); break; - case GLUT_KEY_DOWN: down(); break; - case GLUT_KEY_LEFT: left(); break; - case GLUT_KEY_RIGHT:right(); break; - } -} - -int main(int argc, char** argv) { - glutInitWindowSize(512, 512); - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE|GLUT_DEPTH); - (void)glutCreateWindow(argv[0]); - init(argc == 1 ? "../data/explosion.rgba" : argv[1]); - glutDisplayFunc(display); - glutKeyboardFunc(key); - glutSpecialFunc(special); - glutReshapeFunc(reshape); - glutMouseFunc(mouse); - glutMotionFunc(motion); - glutIdleFunc(animate); - glutMainLoop(); - return 0; -} - -void -printmat(float *m) { - int i; - for(i = 0; i < 4; i++) { - printf("%f %f %f %f\n", m[4*i+0], m[4*i+1], m[4*i+2], m[4*i+3]); - } -} - -void -buildRot(float theta, float x, float y, float z, float m[16]) { - float d = x*x + y*y + z*z; - float ct = cosf(RAD(theta)), st = sinf(RAD(theta)); - - /* normalize */ - if (d > 0) { - d = 1/d; - x *= d; - y *= d; - z *= d; - } - - m[ 0] = 1; m[ 1] = 0; m[ 2] = 0; m[ 3] = 0; - m[ 4] = 0; m[ 5] = 1; m[ 6] = 0; m[ 7] = 0; - m[ 8] = 0; m[ 9] = 0; m[10] = 1; m[11] = 0; - m[12] = 0; m[13] = 0; m[14] = 0; m[15] = 1; - - /* R = uu' + cos(theta)*(I-uu') + sin(theta)*S - * - * S = 0 -z y u' = (x, y, z) - * z 0 -x - * -y x 0 - */ - - m[0] = x*x + ct*(1-x*x) + st*0; - m[4] = x*y + ct*(0-x*y) + st*-z; - m[8] = x*z + ct*(0-x*z) + st*y; - - m[1] = y*x + ct*(0-y*x) + st*z; - m[5] = y*y + ct*(1-y*y) + st*0; - m[9] = y*z + ct*(0-y*z) + st*-x; - - m[2] = z*x + ct*(0-z*x) + st*-y; - m[6] = z*y + ct*(0-z*y) + st*x; - m[10]= z*z + ct*(1-z*z) + st*0; -} - -static void -calcMatrix(void) { - float mat[16]; - - glGetFloatv(GL_MODELVIEW_MATRIX, mat); - - buildRot(-180*atan2f(mat[8], mat[10])/M_PI, 0, 1, 0, mat); - glMultMatrixf(mat); -} diff --git a/lib/glut-3.7.6/progs/advanced97/explode.dsp b/lib/glut-3.7.6/progs/advanced97/explode.dsp deleted file mode 100644 index 8eaa59817..000000000 --- a/lib/glut-3.7.6/progs/advanced97/explode.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="explode" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=explode - 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 "explode.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 "explode.mak" CFG="explode - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "explode - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "explode - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "explode - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "explode - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "explode - Win32 Release" -# Name "explode - Win32 Debug" -# Begin Source File - -SOURCE=.\explode.c -# End Source File -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# Begin Source File - -SOURCE=.\texture.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/fire.c b/lib/glut-3.7.6/progs/advanced97/fire.c deleted file mode 100644 index 983191ee4..000000000 --- a/lib/glut-3.7.6/progs/advanced97/fire.c +++ /dev/null @@ -1,480 +0,0 @@ -#include -#include -#include -#include -#include "texture.h" -#include "sm.h" - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -#ifndef __sgi -/* Most math.h's do not define float versions of the trig functions. */ -#define sinf(x) ((float)sin((x))) -#define cosf(x) ((float)cos((x))) -#define atan2f(y, x) ((float)atan2((y), (x))) -#endif - -#if !defined(GL_VERSION_1_1) && !defined(GL_VERSION_1_2) -#define glBindTexture glBindTextureEXT -#endif - -static void *smoke; -static int marshmallow; -static int the_texture; -static int texture_count; -static int texture = 1; -static float rot = 0; -static float opacity = 1.0; -static float intensity = 1.0; -static float transx, transy, rotx, roty; -static int ox = -1, oy = -1; -static int mot = 0; -#define PAN 1 -#define ROT 2 - -void -pan(int x, int y) { - transx += (x-ox)/500.; - transy -= (y-oy)/500.; - ox = x; oy = y; - glutPostRedisplay(); -} - -void -rotate(int x, int y) { - rotx += x-ox; - if (rotx > 360.) rotx -= 360.; - else if (rotx < -360.) rotx += 360.; - roty += y-oy; - if (roty > 360.) roty -= 360.; - else if (roty < -360.) roty += 360.; - ox = x; oy = y; - glutPostRedisplay(); -} - -void -motion(int x, int y) { - if (mot == PAN) pan(x, y); - else if (mot == ROT) rotate(x,y); -} - -void -mouse(int button, int state, int x, int y) { - if(state == GLUT_DOWN) { - switch(button) { - case GLUT_LEFT_BUTTON: - mot = PAN; - motion(ox = x, oy = y); - break; - case GLUT_RIGHT_BUTTON: - mot = ROT; - motion(ox = x, oy = y); - break; - case GLUT_MIDDLE_BUTTON: - break; - } - } else if (state == GLUT_UP) { - mot = 0; - } -} - -void afunc(void) { - static int state; - if (state ^= 1) - glEnable(GL_ALPHA_TEST); - else - glDisable(GL_ALPHA_TEST); -} - -void bfunc(void) { - static int state; - if (state ^= 1) - glEnable(GL_BLEND); - else - glDisable(GL_BLEND); -} - -void mfunc(void) { - marshmallow += 1; - if (marshmallow > 2) marshmallow = 0; -} - -void sfunc(void) { - the_texture++; - if (the_texture >= texture_count) the_texture = 0; -} - -void tfunc(void) { - static int state; - if (state ^= 1) - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); - else - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); -} - -void fourfunc(void) { - static int state; - GLenum wrap; - int i; - - glMatrixMode(GL_TEXTURE); - if (state ^= 1) { - wrap = GL_REPEAT; - glScalef(4.f, 4.f, 1.f); - } else { - wrap = GL_CLAMP; - glLoadIdentity(); - } - glMatrixMode(GL_MODELVIEW); - - for(i = 0; i < texture_count; i++) { - glBindTexture(GL_TEXTURE_2D, i+1); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrap); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrap); - } -} - -void help(void) { - printf("Usage: fire image0 ... imagen\n"); - printf("'h' - help\n"); - printf("'a' - toggle alpha test\n"); - printf("'b' - toggle blend\n"); - printf("'s' - single step\n"); - printf("'t' - toggle MODULATE or REPLACE\n"); - printf("'m' - marshmallow\n"); - printf("'x' - toggle animation\n"); - printf("left mouse - pan\n"); - printf("right mouse - rotate\n"); -} - -void init(int argc, char *argv[]) { - unsigned *image; - int i, width, height, components; - GLfloat pos[] = { 0.f, 1.f, 1.f, 0.f}; - - glEnable(GL_TEXTURE_2D); - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - - for(i = 0; i < argc; i++) { - image = read_texture(argv[i], &width, &height, &components); - if (image == NULL) { - fprintf(stderr, "Error: Can't load image file \"%s\".\n", - argv[i]); - exit(EXIT_FAILURE); - } else { - printf("%d x %d image loaded\n", width, height); - } - glBindTexture(GL_TEXTURE_2D, i+1); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); - glTexImage2D(GL_TEXTURE_2D, 0, components, width, - height, 0, GL_RGBA, GL_UNSIGNED_BYTE, image); - texture_count++; - } - - glBindTexture(GL_TEXTURE_2D, 1+texture_count); - image = read_texture("../data/smoke.bw", &width, &height, &components); - if (image == NULL) { - fprintf(stderr, "Error: Can't load image file \"%s\".\n", "smoke.la"); - exit(EXIT_FAILURE); - } - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); - glTexImage2D(GL_TEXTURE_2D, 0, components, width, - height, 0, GL_RGBA, GL_UNSIGNED_BYTE, image); - smoke = new_smoke(0.f, 0.f, 0.f, .0f, 2.5f, 0.f, 25, .4f, 1+texture_count); - - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - glEnable(GL_TEXTURE_2D); - glClearColor(.25f, .25f, .25f, .25f); - - glLightfv(GL_LIGHT0, GL_POSITION, pos); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(50.,1.,.1,20.); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(0.,0.,-5.5); - glClearColor(.25f, .25f, .75f, .25f); - - glAlphaFunc(GL_GREATER, 0.016f); - glEnable(GL_ALPHA_TEST); - - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHT0); - glEnable(GL_NORMALIZE); -} - -void -animate(void) { - static int cnt; - if (cnt++ == 2) { - the_texture++; - if (the_texture >= texture_count) the_texture = 0; - cnt = 0; - } - update_smoke(smoke, .003); - glutPostRedisplay(); -} - -void -xfunc(void) { - static int state = 1; - glutIdleFunc((state ^= 1) ? animate : NULL); -} - -void -cube(void) { - glBegin(GL_QUADS); - glNormal3f(0.f, 0.f, -1.f); - glTexCoord2f(0.0, 0.0); glVertex3f(-1.0, -1.0, -1.0); - glTexCoord2f(1.0, 0.0); glVertex3f( 1.0, -1.0, -1.0); - glTexCoord2f(1.0, 1.0); glVertex3f( 1.0, 1.0, -1.0); - glTexCoord2f(0.0, 1.0); glVertex3f(-1.0, 1.0, -1.0); - - glNormal3f(0.f, 0.f, 1.f); - glTexCoord2f(0.0, 0.0); glVertex3f(-1.0, -1.0, 1.0); - glTexCoord2f(1.0, 0.0); glVertex3f( 1.0, -1.0, 1.0); - glTexCoord2f(1.0, 1.0); glVertex3f( 1.0, 1.0, 1.0); - glTexCoord2f(0.0, 1.0); glVertex3f(-1.0, 1.0, 1.0); - - glNormal3f(0.f, 1.f, 0.f); - glTexCoord2f(0.0, 0.0); glVertex3f(-1.0, 1.0, -1.0); - glTexCoord2f(1.0, 0.0); glVertex3f( 1.0, 1.0, -1.0); - glTexCoord2f(1.0, 1.0); glVertex3f( 1.0, 1.0, 1.0); - glTexCoord2f(0.0, 1.0); glVertex3f(-1.0, 1.0, 1.0); - - glNormal3f(0.f, -1.f, 0.f); - glTexCoord2f(0.0, 0.0); glVertex3f(-1.0, -1.0, -1.0); - glTexCoord2f(1.0, 0.0); glVertex3f( 1.0, -1.0, -1.0); - glTexCoord2f(1.0, 1.0); glVertex3f( 1.0, -1.0, 1.0); - glTexCoord2f(0.0, 1.0); glVertex3f(-1.0, -1.0, 1.0); - - glNormal3f( 1.f, 0.f, 0.f); - glTexCoord2f(0.0, 0.0); glVertex3f( 1.0, -1.0, -1.0); - glTexCoord2f(1.0, 0.0); glVertex3f( 1.0, 1.0, -1.0); - glTexCoord2f(1.0, 1.0); glVertex3f( 1.0, 1.0, 1.0); - glTexCoord2f(0.0, 1.0); glVertex3f( 1.0, -1.0, 1.0); - - glNormal3f(-1.f, 0.f, 0.f); - glTexCoord2f(0.0, 0.0); glVertex3f(-1.0, -1.0, -1.0); - glTexCoord2f(1.0, 0.0); glVertex3f(-1.0, 1.0, -1.0); - glTexCoord2f(1.0, 1.0); glVertex3f(-1.0, 1.0, 1.0); - glTexCoord2f(0.0, 1.0); glVertex3f(-1.0, -1.0, 1.0); - glEnd(); -} - -void -logs(void) { - static GLUquadricObj *quadric; - - if (!quadric) { - quadric = gluNewQuadric(); - glNewList(100, GL_COMPILE); - gluQuadricOrientation(quadric, GLU_OUTSIDE); - glTranslatef(0.f, 0.f, -2.f); - gluCylinder(quadric, .5, .5, 4., 5, 1); - glTranslatef(0.f, 0.f, 4.f); - gluDisk(quadric, 0., .5, 10, 1); - glTranslatef(0.f, 0.f, -4.f); - gluQuadricOrientation(quadric, GLU_INSIDE); - gluDisk(quadric, 0., .5, 10, 1); - glEndList(); - } - glPushMatrix(); - glTranslatef(0.f, -.5f, 0.f); - glColor3f(.55f, .14f, .14f); - glPushMatrix(); - glRotatef(55., 0., 1., 0.); - glCallList(100); - glPopMatrix(); - glPushMatrix(); - glRotatef(-55., 0., 1., 0.); - glCallList(100); - glPopMatrix(); - if (marshmallow) { - glPushMatrix(); - glColor4f(1.f, 1.f, 1.f, 1.f); - glTranslatef(0.f, 1.7f, 0.f); - glRotatef(45.f, 0.f, 0.f, 1.f); - glRotatef(90.f, 0.f, 1.f, 0.f); - glScalef(1., 1., .25f); - glCallList(100); - glPopMatrix(); - - glPushMatrix(); - glColor4f(.1f, .1f, .1f, 1.f); - glTranslatef(1.5f, 3.4f, 0.f); - glRotatef(45.f, 0.f, 0.f, 1.f); - glRotatef(90.f, 0.f, 1.f, 0.f); - glScalef(.2f, .2f, 1.f); - glCallList(100); - glPopMatrix(); - - if (marshmallow == 2) { - extern void drawDinosaur(void); - glDisable(GL_COLOR_MATERIAL); - glPushMatrix(); - glTranslatef(10.f, 0.f, 0.f); - glRotatef(180.f, 0.f, 1.f, 0.f); - glScalef(.5f, .5f, .5f); - drawDinosaur(); - glPopMatrix(); - } - } - glPopMatrix(); -} -static void calcMatrix(void); - -void display(void) { - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - - glLoadIdentity(); -#define RAD(x) (((x)*M_PI)/180.) - gluLookAt(-sinf(RAD(rotx))*5.5,transy,cosf(RAD(rotx))*5.5, 0.,0.,0., 0.,1.,0.); - - glTranslatef(0.f, 0.f, transx*10.f); - - /* floor */ - glColor4f(0.f,.2f,0.f,1.f); - glBegin(GL_POLYGON); - glVertex3f(-4.0, -1.0, -4.0); - glVertex3f( 4.0, -1.0, -4.0); - glVertex3f( 4.0, -1.0, 4.0); - glVertex3f(-4.0, -1.0, 4.0); - glEnd(); - - glEnable(GL_COLOR_MATERIAL); - glEnable(GL_LIGHTING); - glColor3f(.1f,.1f,.1f); - glPushMatrix(); - glTranslatef(-1.f, -1.+.2f, -1.5f); - glScalef(.2f,.2f, .2f); - logs(); - /*cube();*/ - glDisable(GL_LIGHTING); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(-1.f, -1.f+.2f, -1.5f); - calcMatrix(); - draw_smoke(smoke); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(/*(delta/2.f*/-1.f, /*delta*/-.25f, -1.5f); - calcMatrix(); - glScalef(1.f,1.f,1.); - if (texture) { - glBindTexture(GL_TEXTURE_2D, the_texture+1); - glEnable(GL_TEXTURE_2D); - } - glColor4f(intensity, intensity, intensity, opacity); - glRotatef(rot, 0., 0., 1.); - glDepthMask(0); - glBegin(GL_POLYGON); - glTexCoord2f(0.0, 0.0); glVertex2f(-1.0, -1.0); - glTexCoord2f(1.0, 0.0); glVertex2f(1.0, -1.0); - glTexCoord2f(1.0, 1.0); glVertex2f(1.0, 1.0); - glTexCoord2f(0.0, 1.0); glVertex2f(-1.0, 1.0); - glEnd(); - glDepthMask(1); - glPopMatrix(); - glDisable(GL_TEXTURE_2D); - - glutSwapBuffers(); -} - -void reshape(int w, int h) { - glViewport(0, 0, w, h); -} - -/* ARGSUSED1 */ -void -key(unsigned char key, int x, int y) { - switch(key) { - case 'a': afunc(); break; - case 'b': bfunc(); break; - case 'h': help(); break; - case 'm': mfunc(); break; - case 's': sfunc(); break; - case 't': tfunc(); break; - case 'x': xfunc(); break; - case '\033': exit(EXIT_SUCCESS); break; - default: break; - } - glutPostRedisplay(); -} - -int main(int argc, char** argv) { - glutInitWindowSize(512, 512); - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE|GLUT_DEPTH); - (void)glutCreateWindow(argv[0]); - init(argc-1, argv+1); - glutDisplayFunc(display); - glutKeyboardFunc(key); - glutReshapeFunc(reshape); - glutMouseFunc(mouse); - glutMotionFunc(motion); - glutIdleFunc(animate); - glutMainLoop(); - return 0; -} - -void -buildRot(float theta, float x, float y, float z, float m[16]) { - float d = x*x + y*y + z*z; - float ct = cosf(RAD(theta)), st = sinf(RAD(theta)); - - /* normalize */ - if (d > 0) { - d = 1/d; - x *= d; - y *= d; - z *= d; - } - - m[ 0] = 1; m[ 1] = 0; m[ 2] = 0; m[ 3] = 0; - m[ 4] = 0; m[ 5] = 1; m[ 6] = 0; m[ 7] = 0; - m[ 8] = 0; m[ 9] = 0; m[10] = 1; m[11] = 0; - m[12] = 0; m[13] = 0; m[14] = 0; m[15] = 1; - - /* R = uu' + cos(theta)*(I-uu') + sin(theta)*S - * - * S = 0 -z y u' = (x, y, z) - * z 0 -x - * -y x 0 - */ - - m[0] = x*x + ct*(1-x*x) + st*0; - m[4] = x*y + ct*(0-x*y) + st*-z; - m[8] = x*z + ct*(0-x*z) + st*y; - - m[1] = y*x + ct*(0-y*x) + st*z; - m[5] = y*y + ct*(1-y*y) + st*0; - m[9] = y*z + ct*(0-y*z) + st*-x; - - m[2] = z*x + ct*(0-z*x) + st*-y; - m[6] = z*y + ct*(0-z*y) + st*x; - m[10]= z*z + ct*(1-z*z) + st*0; -} - -static void -calcMatrix(void) { - float mat[16]; - - glGetFloatv(GL_MODELVIEW_MATRIX, mat); - - buildRot(-180*atan2f(mat[8], mat[10])/M_PI, 0, 1, 0, mat); - glMultMatrixf(mat); -} diff --git a/lib/glut-3.7.6/progs/advanced97/fire.dsp b/lib/glut-3.7.6/progs/advanced97/fire.dsp deleted file mode 100644 index 6cc12662d..000000000 --- a/lib/glut-3.7.6/progs/advanced97/fire.dsp +++ /dev/null @@ -1,108 +0,0 @@ -# Microsoft Developer Studio Project File - Name="fire" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=fire - 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 "fire.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 "fire.mak" CFG="fire - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "fire - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "fire - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "fire - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "fire - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "fire - Win32 Release" -# Name "fire - Win32 Debug" -# Begin Source File - -SOURCE=.\d.c -# End Source File -# Begin Source File - -SOURCE=.\fire.c -# End Source File -# Begin Source File - -SOURCE=.\sm.c -# End Source File -# Begin Source File - -SOURCE=.\sm.h -# End Source File -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# Begin Source File - -SOURCE=.\texture.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/genspheremap.c b/lib/glut-3.7.6/progs/advanced97/genspheremap.c deleted file mode 100644 index 259dbac5e..000000000 --- a/lib/glut-3.7.6/progs/advanced97/genspheremap.c +++ /dev/null @@ -1,291 +0,0 @@ -#include -#include -#include -#include -#include -#include "texture.h" - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -#ifdef _WIN32 -#include -#define sleep(x) Sleep((x*1000)) -#else -#include -#endif - -#include - -const char defaultBaseName[] = "../data/"; - -GLuint *faces[6]; -GLsizei faceW[6], faceH[6]; - -GLfloat angle1[6] = {90, 180, 270, 0, 90, -90}; -GLfloat axis1[6][3] = {{0,1,0}, {0,1,0}, {0,1,0}, {0,1,0}, {1,0,0}, {1,0,0}}; -GLfloat angle2[6] = {0, 0, 0, 0, 180, 180}; -GLfloat axis2[6][3] = {{0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,1,0}, {0,1,0}}; - -GLuint *load_texture(const char *fname, GLsizei *w, GLsizei *h) -{ - int comps; - GLuint *img; - int i; - - img = read_texture(fname, w, h, &comps); - if (!img) { - fprintf(stderr, "Could not open %s\n", fname); - exit(1); - } - - for (i = 0; i < *w * *h; i++) { - img[i] |= 0xff; - } - - return img; -} - -void set_texture_border(GLuint val, GLuint mask, - GLsizei w, GLsizei h, GLuint *pix) -{ - int x, y; - - val &= mask; - mask = ~mask; - - /* top & bottom rows */ - for (x = 0; x < w; x++) { - pix[x] = (pix[x] & mask) | val; - pix[x + (h-1)*w] = (pix[x + (h-1)*w] & mask) | val; - } - - for (y = 0; y < h; y++) { - pix[y*w] = (pix[y*w] & mask) | val; - pix[y*w + (w-1)] = (pix[y*w + (w-1)] & mask) | val; - } -} - -void init(void) -{ - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); -} - -void reshape(GLsizei w, GLsizei h) -{ - glViewport(0, 0, w, h); - glLoadIdentity(); - glOrtho(-2, 2, -2, 2, 0, 5); -} - -void draw_special_sphere(int tess) -{ - float r = 1.0, r1, r2, z1, z2; - float theta, phi; - int nlon = tess, nlat = tess; - int i, j; - - glBegin(GL_TRIANGLE_FAN); - theta = M_PI*1.0/nlat; - r2 = r*sin(theta); z2 = r*cos(theta); - glNormal3f(0.0, 0.0, 1.0); - glVertex4f(0.0, 0.0, r*r, r); - for (j = 0, phi = 0.0; j <= nlon; j++, phi = 2*M_PI*j/nlon) { - glNormal3f(r2*cos(phi), r2*sin(phi), z2); - glVertex4f(r2*cos(phi)*z2, r2*sin(phi)*z2, z2*z2, z2); /* top */ - } - glEnd(); - - for (i = 2; i < nlat; i++) { - theta = M_PI*i/nlat; - r1 = r*sin(M_PI*(i-1)/nlat); z1 = r*cos(M_PI*(i-1)/nlat); - r2 = r*sin(theta); z2 = r*cos(theta); - - if (fabs(z1) < 0.01 || fabs(z2) < 0.01) - break; - - glBegin(GL_QUAD_STRIP); - for (j = 0, phi = 0; j <= nlat; j++, phi = 2*M_PI*j/nlon) { - glNormal3f(r1*cos(phi), r1*sin(phi), z1); - glVertex4f(r1*cos(phi)*z1, r1*sin(phi)*z1, z1*z1, z1); - glNormal3f(r2*cos(phi), r2*sin(phi), z2); - glVertex4f(r2*cos(phi)*z2, r2*sin(phi)*z2, z2*z2, z2); - } - glEnd(); - } -} - -void render_spheremap(int width, int height) -{ - GLfloat p[4]; - int i; - - glColor4f(1, 1, 1, 1); - - glEnable(GL_TEXTURE_2D); - - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); - - glTexGenf(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - - p[0] = 2.0; p[1] = p[2] = p[3] = 0.0; /* 2zx */ - glTexGenfv(GL_S, GL_OBJECT_PLANE, p); - - glTexGenf(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - p[0] = 0.0; p[1] = 2.0; p[2] = p[3] = 0.0; /* 2zy */ - glTexGenfv(GL_T, GL_OBJECT_PLANE, p); - - glTexGenf(GL_R, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - p[0] = p[1] = 0.0; p[2] = 0.0; p[3] = 2.0; /* 2z */ - glTexGenfv(GL_R, GL_OBJECT_PLANE, p); - - glEnable(GL_TEXTURE_GEN_S); - glEnable(GL_TEXTURE_GEN_T); - glEnable(GL_TEXTURE_GEN_R); - - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glMatrixMode(GL_TEXTURE); - glPushMatrix(); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho(-1, 1, -1, 1, 1.0, 100); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - gluLookAt(0, 0, 6, - 0, 0, 0, - 0, 1, 0); - - glEnable(GL_DEPTH_TEST); - glEnable(GL_CULL_FACE); - - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - - glClearColor(0.0, 0.0, 0.0, 1.0); - glClearDepth(1.0); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - for (i = 0; i < 6; i++) { - glTexImage2D(GL_TEXTURE_2D, 0, 4, faceW[i], faceH[i], 0, - GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid *)faces[i]); - - glMatrixMode(GL_TEXTURE); - glLoadIdentity(); - glScalef(0.5, 0.5, 1.0); - glTranslatef(1.0, 1.0, 0.0); - glFrustum(-1.01, 1.01, -1.01, 1.01, 1.0, 100.0); - if (angle2[i]) { - glRotatef(angle2[i], axis2[i][0], axis2[i][1], axis2[i][2]); - } - glRotatef(angle1[i], axis1[i][0], axis1[i][1], axis1[i][2]); - - /* XXX atul does another angle thing here... */ - /* XXX atul does a third angle thing here... */ - - glTranslatef(0.0, 0.0, -1.00); - - glMatrixMode(GL_MODELVIEW); - glClear(GL_DEPTH_BUFFER_BIT); - draw_special_sphere(20); - - sleep(1); - } - - glDisable(GL_BLEND); - glDisable(GL_CULL_FACE); - - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); - glMatrixMode(GL_TEXTURE); - glPopMatrix(); - - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - - glDisable(GL_TEXTURE_GEN_S); - glDisable(GL_TEXTURE_GEN_T); - glDisable(GL_TEXTURE_GEN_R); - - glDisable(GL_TEXTURE_2D); -} - -void draw(void) -{ - GLenum err; - - glClear(GL_COLOR_BUFFER_BIT); - - render_spheremap(256, 256); - - err = glGetError(); - if (err != GL_NO_ERROR) printf("Error: %s\n", gluErrorString(err)); -} - -/* ARGSUSED1 */ -void key(unsigned char key, int x, int y) -{ - if (key == 27) exit(0); -} - -void show_usage(void) -{ - fprintf(stderr, "Usage:\n"); - fprintf(stderr, "genspheremap -- use default files" - "(%s00.rgb through %s05.rgb)\n", defaultBaseName, defaultBaseName); - fprintf(stderr, "genspheremap baseName -- use files of the form " - "baseName0.rgb through baseName5.rgb\n"); - fprintf(stderr, "genspheremap f0.rgb f1.rgb f2.rgb f3.rgb f4.rgb f5.rgb\n"); -} - -main(int argc, char *argv[]) -{ - const char *baseName; - char fname[128]; - int i; - - glutInitWindowSize(512, 512); - glutInitWindowPosition(0, 0); - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGB); - glutCreateWindow(argv[0]); - glutDisplayFunc(draw); - glutKeyboardFunc(key); - glutReshapeFunc(reshape); - init(); - - if (argc == 1 || argc == 2) { - if (argc == 1) baseName = defaultBaseName; - else baseName = argv[1]; - assert(strlen(baseName) < 128 - (strlen("0.rgb") + 1)); - for (i = 0; i < 6; i++) { - sprintf(fname, "%s%02d.rgb", baseName, i); - faces[i] = load_texture(fname, &faceW[i], &faceH[i]); - } - } else if (argc == 7) { - for (i = 0; i < 6; i++) { - faces[i] = load_texture(fname, &faceW[i], &faceH[i]); - } - } else { - show_usage(); - exit(1); - } - - for (i = 0; i < 6; i++) { - set_texture_border(0x00, 0xff, faceW[i], faceH[i], faces[i]); - } - - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/advanced97/genspheremap.dsp b/lib/glut-3.7.6/progs/advanced97/genspheremap.dsp deleted file mode 100644 index cde6871fb..000000000 --- a/lib/glut-3.7.6/progs/advanced97/genspheremap.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="genspheremap" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=genspheremap - 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 "genspheremap.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 "genspheremap.mak" CFG="genspheremap - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "genspheremap - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "genspheremap - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "genspheremap - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "genspheremap - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "genspheremap - Win32 Release" -# Name "genspheremap - Win32 Debug" -# Begin Source File - -SOURCE=.\genspheremap.c -# End Source File -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# Begin Source File - -SOURCE=.\texture.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/highlight.c b/lib/glut-3.7.6/progs/advanced97/highlight.c deleted file mode 100644 index 591e66c08..000000000 --- a/lib/glut-3.7.6/progs/advanced97/highlight.c +++ /dev/null @@ -1,704 +0,0 @@ -#include -#include -#include -#include -#include "texture.h" - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -#if !defined(GL_VERSION_1_1) && !defined(GL_VERSION_1_2) -#define glBindTexture glBindTextureEXT -#endif - -#define CHECK_ERROR(str) \ -{ \ - GLenum error; \ - if(error = glGetError()) \ - printf("GL Error: %s (%s)\n", gluErrorString(error), str); \ -} - -#ifndef FALSE -enum {FALSE, TRUE}; -#endif -enum {X, Y, Z, W}; -enum {OBJ_ANGLE, LIGHT_ANGLE, OBJ_TRANSLATE}; -enum {SURF_TEX, HIGHLIGHT_TEX}; - -/* window dimensions */ -int winWidth = 512; -int winHeight = 512; -int active; -int dblbuf = TRUE; -int highlight = TRUE; -int gouraud = FALSE; -int texmap = FALSE; -int notex = FALSE; /* don't texture gouraud */ - -int object = 2; -int maxobject = 2; - -GLfloat lightangle[2] = {0.f, 0.f}; -GLfloat objangle[2] = {0.f, 0.f}; -GLfloat objpos[2] = {0.f, 0.f}; - -GLfloat color[4] = {1.f, 1.f, 1.f, 1.f}; -GLfloat zero[4] = {0.f, 0.f, 0.f, 1.f}; -GLfloat one[4] = {1.f, 1.f, 1.f, 1.f}; - -int texdim = 128; -GLfloat *lighttex = 0; -GLfloat lightpos[4] = {0.f, 0.f, 1.f, 0.f}; -GLboolean lightchanged[2] = {GL_TRUE, GL_TRUE}; -enum {UPDATE_OGL, UPDATE_TEX}; - - -/* draw a highly tesselated sphere with a specular highlight */ -void -makeHighlight(int shinyness) -{ - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - - glPushMatrix(); /* starts as modelview */ - glLoadIdentity(); - glTranslatef(0.f, 0.f, -texdim/2.f); - - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - glOrtho(-texdim/2., texdim/2., -texdim/2., texdim/2., 0., texdim/2.); - - glPushAttrib(GL_LIGHTING_BIT|GL_VIEWPORT_BIT); - glViewport(0, 0, texdim, texdim); - glEnable(GL_LIGHTING); - - glLightfv(GL_LIGHT0, GL_DIFFUSE, zero); - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); /* light direction */ - - /* XXX TODO, range check an report errors */ - glMateriali(GL_FRONT, GL_SHININESS, shinyness); /* cosine power */ - glMaterialfv(GL_FRONT, GL_AMBIENT, zero); - glMaterialfv(GL_FRONT, GL_DIFFUSE, zero); - glMaterialfv(GL_FRONT, GL_SPECULAR, color); - glDisable(GL_TEXTURE_2D); - - glCallList(1); - - glEnable(GL_TEXTURE_2D); - glPopAttrib(); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); - - glReadPixels(0, 0, texdim, texdim, GL_RGB, GL_FLOAT, lighttex); - - glBindTexture(GL_TEXTURE_2D, HIGHLIGHT_TEX); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, texdim, texdim, 0, GL_RGB, - GL_FLOAT, lighttex); -} - -void -reshape(int wid, int ht) -{ - winWidth = wid; - winHeight = ht; - glViewport(0, 0, wid, ht); -} - - -void -motion(int x, int y) -{ - - switch(active) - { - case OBJ_ANGLE: - objangle[X] = (x - winWidth/2) * 360./winWidth; - objangle[Y] = (y - winHeight/2) * 360./winHeight; - glutPostRedisplay(); - break; - case LIGHT_ANGLE: - lightangle[X] = (x - winWidth/2) * 2 * M_PI/winWidth; - lightangle[Y] = (winHeight/2 - y) * 2 * M_PI/winHeight; - - lightpos[Y] = sin(lightangle[Y]); - lightpos[X] = cos(lightangle[Y]) * sin(lightangle[X]); - lightpos[Z] = cos(lightangle[Y]) * cos(lightangle[X]); - lightpos[W] = 0.; - lightchanged[UPDATE_OGL] = GL_TRUE; - lightchanged[UPDATE_TEX] = GL_TRUE; - glutPostRedisplay(); - break; - case OBJ_TRANSLATE: - objpos[X] = (x - winWidth/2) * 100./winWidth; - objpos[Y] = (winHeight/2 - y) * 100./winHeight; - glutPostRedisplay(); - break; - } -} - -void -mouse(int button, int state, int x, int y) -{ - if(state == GLUT_DOWN) - switch(button) - { - case GLUT_LEFT_BUTTON: /* move the light */ - active = OBJ_ANGLE; - motion(x, y); - break; - case GLUT_MIDDLE_BUTTON: - active = LIGHT_ANGLE; - motion(x, y); - break; - case GLUT_RIGHT_BUTTON: /* move the polygon */ - active = OBJ_TRANSLATE; - motion(x, y); - break; - } -} - -/* draw the object unlit without surface texture */ -void redraw_white(void) -{ - glPushMatrix(); /* assuming modelview */ - glTranslatef(objpos[X], objpos[Y], 0.f); /* translate object */ - glRotatef(objangle[X], 0.f, 1.f, 0.f); /* rotate object */ - glRotatef(objangle[Y], 1.f, 0.f, 0.f); - - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - - glDisable(GL_LIGHTING); - glDisable(GL_TEXTURE_2D); - /* draw the specular highlight */ - - glCallList(object); - - glEnable(GL_TEXTURE_2D); - - glPopMatrix(); /* assuming modelview */ - - CHECK_ERROR("OpenGL Error in redraw_tex()"); - - if(dblbuf) - glutSwapBuffers(); - else - glFlush(); -} - - -/* just draw textured highlight */ -void redraw_tex_highlight(void) -{ - if(lightchanged[UPDATE_TEX]) - { - makeHighlight(128); - lightchanged[UPDATE_TEX] = GL_FALSE; - } - - - glPushMatrix(); /* assuming modelview */ - glTranslatef(objpos[X], objpos[Y], 0.f); /* translate object */ - glRotatef(objangle[X], 0.f, 1.f, 0.f); /* rotate object */ - glRotatef(objangle[Y], 1.f, 0.f, 0.f); - - glClearColor(.1f, .1f, .1f, 1.f); - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - glClearColor(0.f, 0.f, 0.f, 1.f); - - /* draw the specular highlight */ - glBindTexture(GL_TEXTURE_2D, HIGHLIGHT_TEX); - glEnable(GL_TEXTURE_GEN_S); - glEnable(GL_TEXTURE_GEN_T); - - glCallList(object); - - glDisable(GL_TEXTURE_GEN_S); - glDisable(GL_TEXTURE_GEN_T); - - glPopMatrix(); /* assuming modelview */ - - CHECK_ERROR("OpenGL Error in redraw_tex()"); - - if(dblbuf) - glutSwapBuffers(); - else - glFlush(); -} - -/* just draw opengl highlight */ -void redraw_gouraud_highlight(void) -{ - if(lightchanged[UPDATE_OGL]) - { - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - lightchanged[UPDATE_OGL] = GL_FALSE; - } - - glPushAttrib(GL_LIGHTING); - glPushMatrix(); /* assuming modelview */ - glTranslatef(objpos[X], objpos[Y], 0.f); /* translate object */ - glRotatef(objangle[X], 0.f, 1.f, 0.f); /* rotate object */ - glRotatef(objangle[Y], 1.f, 0.f, 0.f); - - glClearColor(.1f, .1f, .1f, 1.f); - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - glClearColor(0.f, 0.f, 0.f, 1.f); - - /* draw the specular highlight */ - - glEnable(GL_LIGHTING); - glDisable(GL_TEXTURE_2D); - - glMaterialfv(GL_FRONT, GL_SPECULAR, color); /* turn on ogl highlights */ - glMaterialfv(GL_FRONT, GL_DIFFUSE, zero); /* turn off ogl diffuse */ - glMaterialfv(GL_FRONT, GL_AMBIENT, zero); /* turn off ogl diffuse */ - - /* draw the specular highlight */ - glCallList(object); - - glEnable(GL_TEXTURE_2D); - glPopMatrix(); /* assuming modelview */ - glPopAttrib(); - - CHECK_ERROR("OpenGL Error in redraw_tex()"); - - if(dblbuf) - glutSwapBuffers(); - else - glFlush(); -} - - - -/* show highlight texture map */ -void redraw_map(void) -{ - if(lightchanged[UPDATE_TEX]) - { - makeHighlight(128); - lightchanged[UPDATE_TEX] = GL_FALSE; - } - - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); - - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - - glBindTexture(GL_TEXTURE_2D, HIGHLIGHT_TEX); - glDisable(GL_LIGHTING); - - glBegin(GL_QUADS); - glTexCoord2i(0, 0); - glVertex2i(-1, -1); - - glTexCoord2i(1, 0); - glVertex2i(1, -1); - - glTexCoord2i(1, 1); - glVertex2i(1, 1); - - glTexCoord2i(0, 1); - glVertex2i(-1, 1); - glEnd(); - - glEnable(GL_LIGHTING); - - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); - - CHECK_ERROR("OpenGL Error in redraw_map()"); - - if(dblbuf) - glutSwapBuffers(); - else - glFlush(); -} - - - -/* multipass, use texture to make highlight */ -void redraw_tex(void) -{ - if(lightchanged[UPDATE_TEX]) - { - makeHighlight(128); - lightchanged[UPDATE_TEX] = GL_FALSE; - } - if(lightchanged[UPDATE_OGL]) - { - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - lightchanged[UPDATE_OGL] = GL_FALSE; - } - - glPushMatrix(); /* assuming modelview */ - glTranslatef(objpos[X], objpos[Y], 0.f); /* translate object */ - glRotatef(objangle[X], 0.f, 1.f, 0.f); /* rotate object */ - glRotatef(objangle[Y], 1.f, 0.f, 0.f); - - - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - - /* draw the diffuse portion of the light */ - glEnable(GL_LIGHTING); - - glBindTexture(GL_TEXTURE_2D, SURF_TEX); - - if(notex) - glDisable(GL_TEXTURE_2D); - glCallList(object); - if(notex) - glEnable(GL_TEXTURE_2D); - - glDisable(GL_LIGHTING); - - /* draw the specular highlight */ - glEnable(GL_BLEND); - glBindTexture(GL_TEXTURE_2D, HIGHLIGHT_TEX); - glEnable(GL_TEXTURE_GEN_S); - glEnable(GL_TEXTURE_GEN_T); - glDepthFunc(GL_LEQUAL); - - glCallList(object); - - glDepthFunc(GL_LESS); - glDisable(GL_TEXTURE_GEN_S); - glDisable(GL_TEXTURE_GEN_T); - glDisable(GL_BLEND); - - glPopMatrix(); /* assuming modelview */ - - CHECK_ERROR("OpenGL Error in redraw_tex()"); - - if(dblbuf) - glutSwapBuffers(); - else - glFlush(); -} - -/* multipass; use opengl to make highlight */ -void redraw_phong(void) -{ - if(lightchanged[UPDATE_OGL]) - { - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - lightchanged[UPDATE_OGL] = GL_FALSE; - } - - glPushAttrib(GL_LIGHTING); - glPushMatrix(); /* assuming modelview */ - glTranslatef(objpos[X], objpos[Y], 0.f); /* translate object */ - glRotatef(objangle[X], 0.f, 1.f, 0.f); /* rotate object */ - glRotatef(objangle[Y], 1.f, 0.f, 0.f); - - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - - /* draw the diffuse portion of the light */ - glEnable(GL_LIGHTING); - - glBindTexture(GL_TEXTURE_2D, SURF_TEX); - - if(notex) - glDisable(GL_TEXTURE_2D); - glCallList(object); - if(notex) - glEnable(GL_TEXTURE_2D); - - /* turn off texturing so phong highlight color is pure */ - glDisable(GL_TEXTURE_2D); - - glMaterialfv(GL_FRONT, GL_SPECULAR, color); /* turn on ogl highlights */ - glMaterialfv(GL_FRONT, GL_DIFFUSE, zero); /* turn off ogl diffuse */ - glMaterialfv(GL_FRONT, GL_AMBIENT, zero); /* turn off ogl diffuse */ - - /* draw the specular highlight */ - glEnable(GL_BLEND); - glDepthFunc(GL_LEQUAL); - - glCallList(object); - - glEnable(GL_TEXTURE_2D); - glDepthFunc(GL_LESS); - glDisable(GL_BLEND); - - glPopMatrix(); /* assuming modelview */ - glPopAttrib(); - - CHECK_ERROR("OpenGL Error in redraw_tex()"); - - if(dblbuf) - glutSwapBuffers(); - else - glFlush(); -} - - -/* Use OpenGL lighting to get highlight */ -void redraw_original(void) -{ - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - - glPushMatrix(); /* assuming modelview */ - glTranslatef(objpos[X], objpos[Y], 0.f); /* translate object */ - glRotatef(objangle[X], 0.f, 1.f, 0.f); /* rotate object */ - glRotatef(objangle[Y], 1.f, 0.f, 0.f); - - if(lightchanged[UPDATE_OGL]) - { - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - lightchanged[UPDATE_OGL] = GL_FALSE; - } - - glEnable(GL_LIGHTING); - - glBindTexture(GL_TEXTURE_2D, SURF_TEX); - glMaterialfv(GL_FRONT, GL_SPECULAR, color); /* turn on ogl highlights */ - if(notex) - glDisable(GL_TEXTURE_2D); - glCallList(object); - if(notex) - glEnable(GL_TEXTURE_2D); - glMaterialfv(GL_FRONT, GL_SPECULAR, zero); - - glDisable(GL_LIGHTING); - - glPopMatrix(); /* assuming modelview */ - - CHECK_ERROR("OpenGL Error in redraw()"); - - if(dblbuf) - glutSwapBuffers(); - else - glFlush(); -} - -/* Draw with no highlight */ -void redraw_diffuse(void) -{ - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - - - glPushMatrix(); /* assuming modelview */ - glTranslatef(objpos[X], objpos[Y], 0.f); /* translate object */ - glRotatef(objangle[X], 0.f, 1.f, 0.f); /* rotate object */ - glRotatef(objangle[Y], 1.f, 0.f, 0.f); - - if(lightchanged[UPDATE_OGL]) - { - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - lightchanged[UPDATE_OGL] = GL_FALSE; - } - - /* draw the diffuse portion of the light */ - glEnable(GL_LIGHTING); - - glBindTexture(GL_TEXTURE_2D, SURF_TEX); - glCallList(object); - - glDisable(GL_LIGHTING); - - glPopMatrix(); /* assuming modelview */ - - CHECK_ERROR("OpenGL Error in redraw()"); - - if(dblbuf) - glutSwapBuffers(); - else - glFlush(); -} - -/* ARGSUSED1 */ -void key(unsigned char key, int x, int y) -{ - switch(key) - { - case 'u': /* unmodified highlight */ - printf("Use unmodified gouraud highlight\n"); - glutDisplayFunc(redraw_original); - glutPostRedisplay(); - break; - case 'd': - printf("Draw diffuse only\n"); - glutDisplayFunc(redraw_diffuse); - glutPostRedisplay(); - break; - case 'g': /* separate gouraud shaded highlight */ - printf("Use separate gouraud shaded highlight\n"); - glutDisplayFunc(redraw_phong); - glutPostRedisplay(); - break; - case 't': /* separate textured highlight */ - printf("Use separate texture highlight\n"); - glutDisplayFunc(redraw_tex); - glutPostRedisplay(); - break; - case 'o': - /* toggle object type */ - object++; - if(object > maxobject) - object = 2; - glutPostRedisplay(); - break; - case 'm': - /* show highlight texture map */ - printf("Show highlight texture map\n"); - glutDisplayFunc(redraw_map); - glutPostRedisplay(); - break; - case 'n': - if(notex) - notex = FALSE; - else - notex = TRUE; - glutPostRedisplay(); - break; - case 'h': - printf("Show textured phong highlight\n"); - glutDisplayFunc(redraw_tex_highlight); - glutPostRedisplay(); - break; - case 'p': - printf("Show gouraud-shaded phong highlight\n"); - glutDisplayFunc(redraw_gouraud_highlight); - glutPostRedisplay(); - break; - case 'w': - printf("Show white object\n"); - glutDisplayFunc(redraw_white); - glutPostRedisplay(); - break; - case '\033': - exit(0); - break; - default: - fprintf(stderr, "Keyboard commands:\n\n" - "u - (unmodified opengl lighting)\n" - "d - diffuse only\n" - "g - multipass gouraud highlight\n" - "t - multipass texture highlight\n" - "o - toggle object\n" - "m - show highlight texture map\n" - "n - toggle surface texturing\n" - "h - show textured phong highlight\n" - "p - show gouraud-shaded phong highlight\n" - "w - show unlit white object\n"); - break; - } - -} - - - -main(int argc, char *argv[]) -{ - GLuint *tex; - int texwid, texht, texcomps; - - GLUquadricObj *quadric; - - glutInitWindowSize(winWidth, winHeight); - glutInit(&argc, argv); - if(argc > 1) - { - char *args = argv[1]; - int done = FALSE; - while(!done) - { - switch(*args) - { - case 's': /* single buffer */ - printf("Single Buffered\n"); - dblbuf = FALSE; - break; - case '-': /* do nothing */ - break; - case 0: - done = TRUE; - break; - } - args++; - } - } - if(dblbuf) - glutInitDisplayMode(GLUT_RGBA|GLUT_DEPTH|GLUT_DOUBLE); - else - glutInitDisplayMode(GLUT_RGBA|GLUT_DEPTH); - (void)glutCreateWindow("example program"); - glutDisplayFunc(redraw_original); - glutReshapeFunc(reshape); - glutMouseFunc(mouse); - glutMotionFunc(motion); - glutKeyboardFunc(key); - - /* draw a perspective scene */ - glMatrixMode(GL_PROJECTION); - glFrustum(-100., 100., -100., 100., 300., 600.); - glMatrixMode(GL_MODELVIEW); - /* look at scene from (0, 0, 450) */ - gluLookAt(0., 0., 450., 0., 0., 0., 0., 1., 0.); - - /* turn on features */ - glEnable(GL_DEPTH_TEST); - - glEnable(GL_TEXTURE_2D); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - - glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); - glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); - - glMateriali(GL_FRONT, GL_SHININESS, 128); /* cosine power */ - - /* remove back faces to speed things up */ - glCullFace(GL_BACK); - glBlendFunc(GL_ONE, GL_ONE); - - lightchanged[UPDATE_TEX] = GL_TRUE; - lightchanged[UPDATE_OGL] = GL_TRUE; - - /* load pattern for current 2d texture */ - - tex = read_texture("../data/wood.rgb", &texwid, &texht, &texcomps); - - gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB, texwid, texht, GL_RGBA, - GL_UNSIGNED_BYTE, tex); - free(tex); - CHECK_ERROR("end of main"); - - lighttex = (GLfloat *)malloc(texdim * texdim * sizeof(GL_FLOAT) * 3); - - - - /* XXX TODO use display list to avoid retesselating */ - glNewList(1, GL_COMPILE); - glutSolidSphere((GLdouble)texdim/2., 50, 50); - glEndList(); - - - glNewList(2, GL_COMPILE); - glutSolidTeapot(70.); - glEndList(); - - quadric = gluNewQuadric(); - gluQuadricTexture(quadric, GL_TRUE); - - glNewList(3, GL_COMPILE); - gluSphere(quadric, 70., 20, 20); - glEndList(); - - gluDeleteQuadric(quadric); - maxobject = 3; - - glutMainLoop(); - - return 0; -} diff --git a/lib/glut-3.7.6/progs/advanced97/highlight.dsp b/lib/glut-3.7.6/progs/advanced97/highlight.dsp deleted file mode 100644 index 73006c38a..000000000 --- a/lib/glut-3.7.6/progs/advanced97/highlight.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="highlight" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=highlight - 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 "highlight.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 "highlight.mak" CFG="highlight - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "highlight - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "highlight - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "highlight - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "highlight - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "highlight - Win32 Release" -# Name "highlight - Win32 Debug" -# Begin Source File - -SOURCE=.\highlight.c -# End Source File -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# Begin Source File - -SOURCE=.\texture.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/interp.c b/lib/glut-3.7.6/progs/advanced97/interp.c deleted file mode 100644 index 49e64511e..000000000 --- a/lib/glut-3.7.6/progs/advanced97/interp.c +++ /dev/null @@ -1,261 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include "texture.h" - -static char defaultFile[] = "../data/mandrill.rgb"; -GLuint *img, *black, *avgLum, *lum; -GLsizei w, h; -GLint comp; -GLboolean isIR; - -#define RW 0.3086 -#define GW 0.6094 -#define BW 0.0820 - -GLuint *in0, *in1; -GLfloat x = 1.; - -#define BRIGHTNESS 0 -#define CONTRAST 1 -#define SATURATION 2 -int nOperations = 3; -int operation = 0; - - -void set_img_pointers(void) -{ - switch(operation) { - case CONTRAST: - in0 = avgLum; - printf("modifying contrast\n"); - break; - case SATURATION: - in0 = lum; - printf("modifying saturation\n"); - break; - case BRIGHTNESS: - in0 = black; - printf("modifying brightness\n"); - break; - default: - assert(0); - } -} - -void init(void) -{ - const char *renderer; - - set_img_pointers(); - - renderer = (char*) glGetString(GL_RENDERER); - isIR = (renderer[0] == 'I' && renderer[1] == 'R'); -} - -GLuint *alloc_image(void) -{ - GLuint *ptr; - - ptr = (GLuint *)malloc(w * h * sizeof(GLuint)); - if (!ptr) { - fprintf(stderr, "malloc of %d bytes failed.\n", w * h * sizeof(GLuint)); - } - return ptr; -} - -void load_img(const char *fname) -{ - int i; - GLubyte *src, *dst; - GLfloat pix, avg; - - img = read_texture(fname, &w, &h, &comp); - if (!img) { - fprintf(stderr, "Could not open %s\n", fname); - exit(1); - } - - black = alloc_image(); - memset(black, 0, w * h * sizeof(GLuint)); - - lum = alloc_image(); - src = (GLubyte *)img; - dst = (GLubyte *)lum; - avg = 0.; - /* compute average luminance at same time that we set luminance image. - * note that little care is taken to avoid mathematical error when - * computing overall average... */ - for (i = 0; i < w * h; i++) { - pix = (float)src[0]*RW + (float)src[1]*GW + (float)src[2]*BW; - if (pix > 255) pix = 255; - dst[0] = dst[1] = dst[2] = pix; - avg += pix / 255.; - src += 4; - dst += 4; - } - - avgLum = alloc_image(); - pix = avg * 255. / (float)(w*h); - dst = (GLubyte *)avgLum; - for (i = 0; i < w * h; i++) { - dst[0] = dst[1] = dst[2] = pix; - dst += 4; - } -} - -void reshape(GLsizei winW, GLsizei winH) -{ - glViewport(0, 0, w, h); - glLoadIdentity(); - glOrtho(0, winW, 0, winH, 0, 5); -} - -void draw(void) -{ - GLenum err; - GLfloat s, absx, abs1minusx; - - glClear(GL_COLOR_BUFFER_BIT | GL_ACCUM_BUFFER_BIT); - glRasterPos2i(0, 0); - glDrawPixels(w, h, GL_RGBA, GL_UNSIGNED_BYTE, in0); - - absx = fabs(x); - abs1minusx = fabs(1.-x); - s = absx > abs1minusx ? absx : abs1minusx; - - if (!isIR) { - glAccum(GL_ACCUM, (1. - x) / s); - glDrawPixels(w, h, GL_RGBA, GL_UNSIGNED_BYTE, in1); - glAccum(GL_ACCUM, x/s); - glAccum(GL_RETURN, s); - } else { - if (fabs(x) < 1. && fabs(1. - x) < 1) { - glAccum(GL_ACCUM, 1. - x); - glDrawPixels(w, h, GL_RGBA, GL_UNSIGNED_BYTE, in1); - glAccum(GL_ACCUM, x); - glAccum(GL_RETURN, 1); - } else { - absx = fabs(x); - abs1minusx = fabs(1.-x); - s = absx > abs1minusx ? absx : abs1minusx; - - glAccum(GL_ACCUM, .8 * ((1. - x) / s)); - glDrawPixels(w, h, GL_RGBA, GL_UNSIGNED_BYTE, in1); - glAccum(GL_ACCUM, .8 * x/s); - glAccum(GL_RETURN, 1.2 * s); - } - } - - err = glGetError(); - if (err != GL_NO_ERROR) printf("Error: %s\n", gluErrorString(err)); - - glutSwapBuffers(); -} - -/* ARGSUSED1 */ -void key(unsigned char key, int xpos, int ypos) -{ - if (key == 27) exit(0); - - operation = (operation + 1) % nOperations; - set_img_pointers(); - draw(); -} - -int mouseOriginX; -int moveCalled = 0; -float deltaSinceDraw = 0.; - -void idle(void); - -void clamp_x(void) -{ - if (x > 3.99 && isIR) x = 3.99; - else if (x < -4. && isIR) x = -4.; -} - -/* ARGSUSED */ -void button(int button, int state, int xpos, int ypos) -{ - if (state == GLUT_DOWN) { - mouseOriginX = xpos; - deltaSinceDraw = 0; - glutIdleFunc(idle); - return; - } - - if (!moveCalled) { - if (button == GLUT_MIDDLE_BUTTON) x = 1.; - else x = (float)xpos / ((float)w / 2.); - clamp_x(); - deltaSinceDraw = 100000.; - } - moveCalled = 0; - if (deltaSinceDraw) draw(); - printf("x = %f\n", x); - glutIdleFunc(NULL); -} - -void menu(int val) -{ - operation = val; - set_img_pointers(); - draw(); -} - -void idle(void) -{ - if (deltaSinceDraw) { - x += deltaSinceDraw; - clamp_x(); - draw(); - deltaSinceDraw = 0; - } -} - -/* ARGSUSED */ -void motion(int xpos, int ypos) -{ - float delta = xpos - mouseOriginX; - mouseOriginX = xpos; - moveCalled = 1; - delta /= w/2.; - deltaSinceDraw += delta; -} - -main(int argc, char *argv[]) -{ - glutInit(&argc, argv); - if (argc > 1) { - load_img(argv[1]); - } else { - load_img(defaultFile); - } - in0 = black; - in1 = img; - operation = BRIGHTNESS; - glutInitWindowSize(w, h); - glutInitWindowPosition(0, 0); - glutInitDisplayMode(GLUT_RGB | GLUT_ACCUM | GLUT_DOUBLE); - glutCreateWindow(argv[0]); - glutDisplayFunc(draw); - glutKeyboardFunc(key); - glutMotionFunc(motion); - glutMouseFunc(button); - glutReshapeFunc(reshape); - - glutCreateMenu(menu); - glutAddMenuEntry("Change brightness", 0); - glutAddMenuEntry("Change contrast", 1); - glutAddMenuEntry("Change saturation", 2); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - init(); - - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/advanced97/interp.dsp b/lib/glut-3.7.6/progs/advanced97/interp.dsp deleted file mode 100644 index 48b1ae41e..000000000 --- a/lib/glut-3.7.6/progs/advanced97/interp.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="interp" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=interp - 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 "interp.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 "interp.mak" CFG="interp - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "interp - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "interp - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "interp - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "interp - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "interp - Win32 Release" -# Name "interp - Win32 Debug" -# Begin Source File - -SOURCE=.\interp.c -# End Source File -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# Begin Source File - -SOURCE=.\texture.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/lightmap.c b/lib/glut-3.7.6/progs/advanced97/lightmap.c deleted file mode 100644 index e4a073d8e..000000000 --- a/lib/glut-3.7.6/progs/advanced97/lightmap.c +++ /dev/null @@ -1,1052 +0,0 @@ -#include -#include -#include -#include "texture.h" -#include - -#ifndef __sgi -/* Most math.h's do not define float versions of the math functions. */ -#define sqrtf(x) (float)sqrt((x)) -#endif - -#if !defined(GL_VERSION_1_1) && !defined(GL_VERSION_1_2) -#define glBindTexture glBindTextureEXT -#endif - -#define CHECK_ERROR(str) \ -{ \ - GLenum error; \ - if(error = glGetError()) \ - printf("GL Error: %s (%s)\n", gluErrorString(error), str); \ -} - -/* display lists */ -enum {SPHERE = 1, CONE, LIGHT, DISK, FLOOR, BACK, LEFT, RIGHT, CEIL}; - -/* texture objects */ -enum {DEFAULT, LIGHTMAP, SURFMAP}; - -enum {NONE, LIGHT_XY, LIGHT_Z, LIGHT_INTENS}; - -#ifndef TRUE -enum {FALSE, TRUE}; -#endif -enum {X, Y, Z, W}; -enum {R, G, B, A}; - -GLfloat staticlightpos[] = {50.f, 70.f, -10.f, 1.f}; -GLfloat lightpos[] = {50.f, 70.f, -10.f, 1.f}; -GLfloat intensity = 1.f; -GLfloat nearScale = .49f, farScale = .0001f; - -int dblbuf = TRUE; -int action = NONE; -int winWidth = 512; -int winHeight = 512; -int curtess = 1; /* current tessellation level */ -int lasttess = 1; /* last set tessellation level */ - -void -reshape(int wid, int ht) -{ - winWidth = wid; - winHeight = ht; - glViewport(0, 0, wid, ht); -} - -void -motion(int x, int y) -{ - switch(action) - { - case LIGHT_XY: - lightpos[X] = (x - winWidth/2) * 200.f/winWidth; - lightpos[Y] = (winHeight/2 - y) * 200.f/winHeight; - glutPostRedisplay(); - break; - case LIGHT_Z: - lightpos[Z] = (winHeight/2 - y) * 200.f/winWidth; - glutPostRedisplay(); - break; - case LIGHT_INTENS: - intensity = x/(GLfloat)winWidth; - glutPostRedisplay(); - break; - } -} - -void -mouse(int button, int state, int x, int y) -{ - if(state == GLUT_DOWN) - switch(button) - { - case GLUT_LEFT_BUTTON: /* move the light */ - action = LIGHT_XY; - motion(x, y); - break; - case GLUT_MIDDLE_BUTTON: - action = LIGHT_INTENS; - motion(x, y); - break; - case GLUT_RIGHT_BUTTON: /* move the polygon */ - action = LIGHT_Z; - motion(x, y); - break; - } -} - - -/* -** Create a single component texture map -*/ -GLfloat *make_texture(int maxs, int maxt) -{ - int s, t; - GLfloat *texture; - - texture = (GLfloat *)malloc(maxs * maxt * sizeof(GLfloat)); - for(t = 0; t < maxt; t++) { - for(s = 0; s < maxs; s++) { - texture[s + maxs * t] = ((s >> 3) & 0x1) ^ ((t >> 3) & 0x1); - } - } - return texture; -} - -/* make tesselated surface for display list dlist */ -/* normal tells you surface position and orientation */ -/* count = tesselation count */ -void -tess_surface(GLuint dlist, int count) -{ - int i, j; - GLfloat x0, y0, z0; - GLfloat over[3], up[3]; /* axes */ - int Sindex, Tindex; /* active texture axes */ - - glNewList(dlist, GL_COMPILE); - glBegin(GL_QUADS); - - switch(dlist) - { - case FLOOR: - glNormal3f( 0.f, 1.f, 0.f); - x0 = -100.f; y0 = -100.f; z0 = 100.f; - over[X] = 1.f/count; over[Y] = 0.f; over[Z] = 0.f; - up[X] = 0.f; up[Y] = 0.f; up[Z] = -1.f/count; - Sindex = X; Tindex = Z; - break; - case CEIL: - glNormal3f( 0.f, -1.f, 0.f); - x0 = -100.f; y0 = 100.f; z0 = 100.f; - over[X] = 0.f; over[Y] = 0.f; over[Z] = -1.f/count; - up[X] = 1.f/count; up[Y] = 0.f; up[Z] = 0.f; - Sindex = X; Tindex = Z; - break; - case LEFT: - glNormal3f( 1.f, 0.f, 0.f); - x0 = -100.f; y0 = -100.f; z0 = 100.f; - over[X] = 0.f; over[Y] = 0.f; over[Z] = -1.f/count; - up[X] = 0.f; up[Y] = 1.f/count; up[Z] = 0.f; - Sindex = Z; Tindex = Y; - break; - case RIGHT: - glNormal3f(-1.f, 0.f, 0.f); - x0 = 100.f; y0 = -100.f; z0 = 100.f; - over[X] = 0.f; over[Y] = 1.f/count; over[Z] = 0.f; - up[X] = 0.f; up[Y] = 0.f; up[Z] = -1.f/count; - Sindex = Z; Tindex = Y; - break; - case BACK: - glNormal3f( 0.f, 0.f, 1.f); - x0 = -100.f; y0 = -100.f; z0 = -100.f; - over[X] = 1.f/count; over[Y] = 0.f; over[Z] = 0.f; - up[X] = 0.f; up[Y] = 1.f/count; up[Z] = 0.f; - Sindex = X; Tindex = Y; - break; - default: - fprintf(stderr, "tess_surface(): bad display list argument %d\n", - dlist); - glEnd(); - glEndList(); - return; - } - - for(j = 0; j < count; j++) - for(i = 0; i < count; i++) - { - glTexCoord2f(i * over[Sindex], j * up[Tindex]); - glVertex3f(x0 + i * 200 * over[X] + j * 200 * up[X], - y0 + i * 200 * over[Y] + j * 200 * up[Y], - z0 + i * 200 * over[Z] + j * 200 * up[Z]); - glTexCoord2f((i + 1) * over[Sindex], j * up[Tindex]); - glVertex3f(x0 + (i + 1) * 200 * over[X] + j * 200 * up[X], - y0 + (i + 1) * 200 * over[Y] + j * 200 * up[Y], - z0 + (i + 1) * 200 * over[Z] + j * 200 * up[Z]); - glTexCoord2f((i + 1) * over[Sindex], (j + 1) * up[Tindex]); - glVertex3f(x0 + (i + 1) * 200 * over[X] + (j + 1) * 200 * up[X], - y0 + (i + 1) * 200 * over[Y] + (j + 1) * 200 * up[Y], - z0 + (i + 1) * 200 * over[Z] + (j + 1) * 200 * up[Z]); - glTexCoord2f(i * over[Sindex], (j + 1) * up[Tindex]); - glVertex3f(x0 + i * 200 * over[X] + (j + 1) * 200 * up[X], - y0 + i * 200 * over[Y] + (j + 1) * 200 * up[Y], - z0 + i * 200 * over[Z] + (j + 1) * 200 * up[Z]); - } - glEnd(); - glEndList(); -} - - - - - -static GLfloat zero[] = {0.f, 0.f, 0.f, 1.f}; -static GLfloat one[] = {1.f, 1.f, 1.f, 1.f}; -static GLfloat diff[] = {.25f, .25f, .25f, .25f}; - - -/* create a lightmap simulating a local light with attenuation */ -void -make_lightmap(GLenum light, int dim) -{ - GLfloat quadratic, linear, constant; - GLfloat diffuse[4], ambient[4]; /* light color */ - GLfloat *texture; - GLfloat dist, scale, edge; - int size; - int i, j; - - glPushAttrib(GL_TEXTURE_BIT); - /* get from light to simplify api */ - glGetLightfv(light, GL_QUADRATIC_ATTENUATION, &quadratic); - glGetLightfv(light, GL_LINEAR_ATTENUATION, &linear); - glGetLightfv(light, GL_CONSTANT_ATTENUATION, &constant); - - glGetLightfv(light, GL_AMBIENT, ambient); - glGetLightfv(light, GL_DIFFUSE, diffuse); - - size = dim + 2; - texture = (GLfloat *)malloc(sizeof(GLfloat) * 3 * size * size); - - dist = dim/2; /* 1 in from border */ - edge = 1.f/(constant + linear * dist + quadratic * dist * dist); - - for(j = 0; j < size; j++) - for(i = 0; i < size; i++) - { - dist = sqrtf((float)((size/2.f - i) * (size/2.f - i) + - (size/2.f - j) * (size/2.f - j))); - scale = 1.f/(constant + linear * dist + quadratic * dist * dist); - if(dist >= dim/2) - { - texture[3 * (i + size * j) + 0] = - diffuse[R] * edge + ambient[R]; - texture[3 * (i + size * j) + 1] = - diffuse[G] * edge + ambient[G]; - texture[3 * (i + size * j) + 2] = - diffuse[B] * edge + ambient[B]; - } - else - { - texture[3 * (i + size * j) + 0] = - diffuse[R] * scale + ambient[R]; - texture[3 * (i + size * j) + 1] = - diffuse[G] * scale + ambient[G]; - texture[3 * (i + size * j) + 2] = - diffuse[B] * scale + ambient[B]; - } - } - - glBindTexture(GL_TEXTURE_2D, LIGHTMAP); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); - - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, - size, size, 1, GL_RGB, GL_FLOAT, texture); - free(texture); - glPopAttrib(); -} - -/* draw a highly tesselated disk with local light */ -void -draw_lightmap(int dim, int dist) -{ - GLUquadricObj *qobj; - GLfloat *texture; - GLfloat light[4] = {0.f, 0.f, 1.f, 1.f}; - - texture = (GLfloat *)malloc(sizeof(GLfloat) * 3 * dim * dim); - - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - - glPushMatrix(); /* starts as modelview */ - glLoadIdentity(); - glTranslatef(0.f, 0.f, -dist); - - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - glOrtho(-dim/2., dim/2., -dim/2., dim/2., 0., (double)dist); - - glPushAttrib(GL_LIGHTING_BIT|GL_VIEWPORT_BIT); - glViewport(0, 0, dim, dim); - glEnable(GL_LIGHTING); - - light[Z] = dist; - glLightfv(GL_LIGHT0, GL_POSITION, light); /* light position */ - - /* XXX TODO, range check an report errors */ - glDisable(GL_TEXTURE_2D); - - qobj = gluNewQuadric(); - gluDisk(qobj, 0., dim/2. * sqrt(2.), dim/4, dim/4); - gluDeleteQuadric(qobj); - - glEnable(GL_TEXTURE_2D); - glPopAttrib(); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); - - glReadPixels(0, 0, dim, dim, GL_RGB, GL_FLOAT, texture); - - glBindTexture(GL_TEXTURE_2D, LIGHTMAP); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, dim, dim, 0, GL_RGB, - GL_FLOAT, texture); - - free(texture); -} - - -int texdim = 256; - - -/* draw the lightmap texture */ -void redraw_lightmap(void) -{ - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - - glPushAttrib(GL_LIGHTING_BIT|GL_TEXTURE_BIT); - - /* assume GL_MODELVIEW */ - glPushMatrix(); - glLoadIdentity(); - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - - glEnable(GL_TEXTURE_2D); - glBindTexture(GL_TEXTURE_2D, LIGHTMAP); - glDisable(GL_LIGHTING); - - glColor3f(1.f, 1.f, 1.f); - glBegin(GL_QUADS); - glTexCoord2i(0, 0); - glVertex2i(-1, -1); - - glTexCoord2i(1, 0); - glVertex2i(1, -1); - - glTexCoord2i(1, 1); - glVertex2i(1, 1); - - glTexCoord2i(0, 1); - glVertex2i(-1, 1); - glEnd(); - - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); - - glPopAttrib(); - - CHECK_ERROR("OpenGL Error in redraw_map()"); - - if(dblbuf) - glutSwapBuffers(); - else - glFlush(); -} - -/* draw the lightmap texture */ -void redraw_combomap(void) -{ - GLfloat scale; - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - - glPushAttrib(GL_LIGHTING_BIT|GL_TEXTURE_BIT|GL_COLOR_BUFFER_BIT| - GL_DEPTH_BUFFER_BIT); - - /* assume GL_MODELVIEW */ - glPushMatrix(); - glLoadIdentity(); - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - - glEnable(GL_TEXTURE_2D); - glDisable(GL_LIGHTING); - - - glBindTexture(GL_TEXTURE_2D, SURFMAP); - - glColor3f(intensity, intensity, intensity); - glBegin(GL_QUADS); - glTexCoord2i(0, 0); - glVertex2i(-1, -1); - - glTexCoord2i(5, 0); - glVertex2i(1, -1); - - glTexCoord2i(5, 5); - glVertex2i(1, 1); - - glTexCoord2i(0, 5); - glVertex2i(-1, 1); - glEnd(); - - glEnable(GL_BLEND); - glDepthFunc(GL_LEQUAL); - glBlendFunc(GL_ZERO, GL_SRC_COLOR); - glBindTexture(GL_TEXTURE_2D, LIGHTMAP); - - glMatrixMode(GL_TEXTURE); - glPushMatrix(); - glTranslatef(.5f, .5f, 0.f); - scale = .25f + (lightpos[Z] + 100.f) * 3.75f/200.f; - glScalef(scale, scale, 0.f); - glTranslatef(-.5f, -.5f, 0.f); - glTranslatef(-lightpos[X]/200.f, -lightpos[Y]/200.f, 0.f); - - glColor3f(1.f, 1.f, 1.f); - glBegin(GL_QUADS); - glTexCoord2i(0, 0); - glVertex2i(-1, -1); - - glTexCoord2i(1, 0); - glVertex2i(1, -1); - - glTexCoord2i(1, 1); - glVertex2i(1, 1); - - glTexCoord2i(0, 1); - glVertex2i(-1, 1); - glEnd(); - - /* GL_TEXTURE */ - glPopMatrix(); - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); - - glPopAttrib(); - - CHECK_ERROR("OpenGL Error in redraw_combomap()"); - - if(dblbuf) - glutSwapBuffers(); - else - glFlush(); -} - -/* draw the openGL scene with lighting off */ -void render_scene(int tess) -{ - /* material properties for objects in scene */ - - /* update tessellation if it changed */ - if(tess != lasttess) - { - tess_surface(FLOOR, tess); - tess_surface(CEIL, tess); - tess_surface(LEFT, tess); - tess_surface(RIGHT, tess); - tess_surface(BACK, tess); - lasttess = tess; - } - glPushAttrib(GL_LIGHTING_BIT|GL_TEXTURE_BIT); - - /* floor */ - glColor3f(.5f, .35f, .35f); /* reddish */ - glEnable(GL_TEXTURE_2D); - glCallList(FLOOR); - glDisable(GL_TEXTURE_2D); - - /* ceiling */ - glColor3f(.35f, .5f, .35f); /* greenish */ - glCallList(CEIL); - - /* right wall */ - glColor3f(.35f, .35f, .5f); /* bluish */ - glCallList(RIGHT); - - /* left wall */ - glCallList(LEFT); - - /* back wall */ - glCallList(BACK); - - /* draw the sphere */ - - glCallList(SPHERE); - - /* draw the cone */ - glCallList(CONE); - - /* draw the light */ - glPushMatrix(); - glTranslatef(lightpos[X], lightpos[Y], lightpos[Z]); - glCallList(LIGHT); - glPopMatrix(); - - glPopAttrib(); - CHECK_ERROR("OpenGL Error in render_unlit()"); -} - -void -redraw_opengl(void) -{ - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - glPushAttrib(GL_LIGHTING_BIT); - - glEnable(GL_LIGHTING); - glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); - glEnable(GL_COLOR_MATERIAL); - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); /* opengl lit */ - - - render_scene(curtess); - - glPopAttrib(); - - if(dblbuf) - glutSwapBuffers(); - else - glFlush(); -} - - -void -redraw_unlit(void) -{ - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - glPushAttrib(GL_LIGHTING_BIT); - - glDisable(GL_LIGHTING); - render_scene(1); - - glPopAttrib(); - - if(dblbuf) - glutSwapBuffers(); - else - glFlush(); -} - - -/* draw the scene white, modulated by lightmap */ -/* unlit, uncolored simulated by lighting */ -/* texgen overrides texture coords */ -void render_white(void) -{ - GLfloat scale; - - /* texgen used to override texure coords */ - static GLfloat XZs[] = {1/200.f, 0.f, 0.f, .5f}; - static GLfloat XZt[] = {0.f, 0.f, 1/200.f, .5f}; - - static GLfloat YZs[] = {0.f, 0.f, 1/200.f, .5f}; - static GLfloat YZt[] = {0.f, 1/200.f, 0.f, .5f}; - - static GLfloat XYs[] = {1/200.f, 0.f, 0.f, .5f}; - static GLfloat XYt[] = {0.f, 1/200.f, 0.f, .5f}; - - /* material properties for objects in scene */ - - glPushAttrib(GL_LIGHTING_BIT|GL_TEXTURE_BIT); - - glTexGenf(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - glTexGenf(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - - glEnable(GL_LIGHTING); - - /* simulate unlit, color = white */ - glLightfv(GL_LIGHT0, GL_AMBIENT, diff); - glMaterialfv(GL_FRONT, GL_DIFFUSE, zero); - glColorMaterial(GL_FRONT, GL_AMBIENT); - glEnable(GL_COLOR_MATERIAL); - - glEnable(GL_TEXTURE_2D); - glBindTexture(GL_TEXTURE_2D, LIGHTMAP); - - glEnable(GL_TEXTURE_GEN_S); - glEnable(GL_TEXTURE_GEN_T); - glMatrixMode(GL_TEXTURE); - glPushMatrix(); - - glTexGenfv(GL_S, GL_OBJECT_PLANE, XZs); - glTexGenfv(GL_T, GL_OBJECT_PLANE, XZt); - - glLoadIdentity(); - glTranslatef(.5f, .5f, 0.f); - scale = nearScale - (nearScale - farScale)/200.f * (100.f + lightpos[Y]); - glScalef(scale, scale, 1.f); - glTranslatef(-.5f, -.5f, 0.f); - glTranslatef(-lightpos[X]/200.f, -lightpos[Z]/200.f, 0.f); - /* add intensity (colorchange) */ - - scale = lightpos[Y] + 100; - scale /= 200.f; - scale *= scale; - scale = 1.f/(1.f + scale); - scale = 1.f; - glColor3f(scale, scale, scale); - - /* floor */ - glCallList(FLOOR); - - glLoadIdentity(); - glTranslatef(.5f, .5f, 0.f); - scale = nearScale - (nearScale - farScale)/200.f * (100.f - lightpos[Y]); - glScalef(scale, scale, 1.f); - glTranslatef(-.5f, -.5f, 0.f); - glTranslatef(-lightpos[X]/200.f, -lightpos[Z]/200.f, 0.f); - - scale = 100 - lightpos[Y]; - scale /= 100.f; - scale *= scale; - scale = 1.f/(1.f + scale); - scale = 1.f; - glColor3f(scale, scale, scale); - - /* ceiling */ - glCallList(CEIL); - - glTexGenfv(GL_S, GL_OBJECT_PLANE, YZs); - glTexGenfv(GL_T, GL_OBJECT_PLANE, YZt); - glLoadIdentity(); - glTranslatef(.5f, .5f, 0.f); - scale = nearScale - (nearScale - farScale)/200.f * (100.f - lightpos[X]); - glScalef(scale, scale, 1.f); - glTranslatef(-.5f, -.5f, 0.f); - glTranslatef(-lightpos[Z]/200.f, -lightpos[Y]/200.f, 0.f); - - scale = 100 - lightpos[X]; - scale /= 100.f; - scale *= scale; - scale = 1.f/(1.f + scale); - scale = 1.f; - glColor3f(scale, scale, scale); - - /* right wall */ - glCallList(RIGHT); - - glLoadIdentity(); - glTranslatef(.5f, .5f, 0.f); - scale = nearScale - (nearScale - farScale)/200.f * (100.f + lightpos[X]); - glScalef(scale, scale, 1.f); - glTranslatef(-.5f, -.5f, 0.f); - glTranslatef(-lightpos[Z]/200.f, -lightpos[Y]/200.f, 0.f); - - scale = lightpos[X] + 100; - scale /= 100.f; - scale *= scale; - scale = 1.f/(1.f + scale); - scale = 1.f; - glColor3f(scale, scale, scale); - - /* left wall */ - glCallList(LEFT); - - glTexGenfv(GL_S, GL_OBJECT_PLANE, XYs); - glTexGenfv(GL_T, GL_OBJECT_PLANE, XYt); - glLoadIdentity(); - glTranslatef(.5f, .5f, 0.f); - scale = nearScale - (nearScale - farScale)/200.f * (100.f + lightpos[Z]); - glScalef(scale, scale, 1.f); - glTranslatef(-.5f, -.5f, 0.f); - glTranslatef(-lightpos[X]/200.f, -lightpos[Y]/200.f, 0.f); - - scale = lightpos[Z] + 100; - scale /= 100.f; - scale *= scale; - scale = 1.f/(1.f + scale); - scale = 1.f; - glColor3f(scale, scale, scale); - - /* back wall */ - glCallList(BACK); - - /* done with texture matrix */ - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - - /* no contribution to highly tesselated objects */ - glMaterialfv(GL_FRONT, GL_AMBIENT, zero); - glLightfv(GL_LIGHT0, GL_AMBIENT, zero); - - /* draw the sphere */ - - glCallList(SPHERE); - - /* draw the cone */ - glCallList(CONE); - - glPopAttrib(); - CHECK_ERROR("OpenGL Error in render_white()"); -} - -void -redraw_white(void) -{ - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - render_white(); - - if(dblbuf) - glutSwapBuffers(); - else - glFlush(); -} - - -void -redraw_lightmapped(void) -{ - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - - glPushAttrib(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_LIGHTING_BIT); - glDisable(GL_LIGHTING); - render_scene(1); - glEnable(GL_LIGHTING); - glEnable(GL_BLEND); - glBlendFunc(GL_ZERO, GL_SRC_COLOR); - glDepthFunc(GL_LEQUAL); - render_white(); - glPopAttrib(); - - if(dblbuf) - glutSwapBuffers(); - else - glFlush(); -} - -void -redraw_maponly(void) -{ - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - - glPushAttrib(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_LIGHTING_BIT); - glDisable(GL_LIGHTING); - render_scene(1); - glEnable(GL_LIGHTING); - glEnable(GL_BLEND); - glBlendFunc(GL_ZERO, GL_SRC_COLOR); - glDepthFunc(GL_LEQUAL); - render_white(); - glBlendFunc(GL_ONE, GL_ONE); - glDisable(GL_LIGHTING); /* add in unlit scene again */ - render_scene(1); - - glPopAttrib(); - - if(dblbuf) - glutSwapBuffers(); - else - glFlush(); -} - -void -redraw_complete(void) -{ - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - - glPushAttrib(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_LIGHTING_BIT); - - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); /* opengl lit */ - glDisable(GL_LIGHTING); - render_scene(1); - glEnable(GL_LIGHTING); - glEnable(GL_BLEND); - glBlendFunc(GL_ZERO, GL_SRC_COLOR); - glDepthFunc(GL_LEQUAL); - render_white(); - glBlendFunc(GL_ONE, GL_ONE); - glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); - glEnable(GL_COLOR_MATERIAL); - render_scene(1); - - glPopAttrib(); - - if(dblbuf) - glutSwapBuffers(); - else - glFlush(); -} - - - -/* ARGSUSED1 */ -void key(unsigned char key, int x, int y) -{ - switch(key) - { - case 'l': /* show lightmap */ - glutDisplayFunc(redraw_lightmap); - glutPostRedisplay(); - break; - case 'w': /* show white scene modulated by lightmap */ - glutDisplayFunc(redraw_white); - glutPostRedisplay(); - break; - case 'm': /* unlit scene modified by lightmap */ - glutDisplayFunc(redraw_lightmapped); - glutPostRedisplay(); - break; - case 'u': /* draw scene without lighting */ - glutDisplayFunc(redraw_unlit); - glutPostRedisplay(); - break; - case 'o': /* draw scene lit using OpenGL */ - glutDisplayFunc(redraw_opengl); - glutPostRedisplay(); - break; - case 'a': /* show scene lit with OpenGL and lightmaps */ - glutDisplayFunc(redraw_complete); - glutPostRedisplay(); - break; - case 'p': /* show scene lit with pure lightmaps */ - glutDisplayFunc(redraw_maponly); - glutPostRedisplay(); - break; - case 'x': /* surface texture with lightmap combined */ - glutDisplayFunc(redraw_combomap); - glutPostRedisplay(); - break; - case 'T': /* surface texture with lightmap combined */ - curtess++; - glutPostRedisplay(); - break; - case 't': /* surface texture with lightmap combined */ - curtess--; - if(curtess < 1) - curtess = 1; - glutPostRedisplay(); - break; - case '1': /* surface texture with lightmap combined */ - curtess = 1; - glutPostRedisplay(); - break; - case 'y': - farScale -= .0001f; - if(farScale < .0001f) - farScale = .0001f; - printf("farScale = %.4f\n", farScale); - glutPostRedisplay(); - break; - case 'Y': - farScale += .0001f; - printf("farScale = %.4f\n", farScale); - glutPostRedisplay(); - break; - case 'z': - nearScale -= .01f; - if(nearScale < .01f) - nearScale = .01f; - printf("nearScale = %.2f\n", nearScale); - glutPostRedisplay(); - break; - case 'Z': - nearScale += .01f; - printf("nearScale = %.2f\n", nearScale); - glutPostRedisplay(); - break; - case '\033': - exit(0); - break; - case '?': - case 'h': - default: - fprintf(stderr, - "Keyboard Commands\n" - "l - draw lightmap\n" - "w - draw white scene modulated by lightmap\n" - "m - draw unlit scene modified by lightmap\n" - "u - draw unlit scene\n" - "o - draw scene lit by OpenGL\n" - "a - draw scene lit by OpenGL (tess = 1) + lightmaps\n" - "p - draw scene lit only by lightmaps\n" - "x - interactive lightmap on brick wall\n" - "T - increase surface tessellation\n" - "t - decrease surface tessellation\n" - "1 - set tessellation to one\n" - "y - decrease far scale for lightmaps\n" - "Y - increase far scale for lightmaps\n" - "z - decrease near scale for lightmaps\n" - "Z - increase near scale for lightmaps\n"); - break; - } - glutPostRedisplay(); -} - - - - -main(int argc, char *argv[]) -{ - GLfloat *tex; - - GLUquadricObj *qobj; - - glutInit(&argc, argv); - glutInitWindowSize(winWidth, winHeight); - if(argc > 1) - { - char *args = argv[1]; - int done = FALSE; - while(!done) - { - switch(*args) - { - case 's': /* single buffer */ - printf("Single Buffered\n"); - dblbuf = FALSE; - break; - case '-': /* do nothing */ - break; - case 0: - done = TRUE; - break; - } - args++; - } - } - - if(dblbuf) - glutInitDisplayMode(GLUT_RGBA|GLUT_DEPTH|GLUT_DOUBLE); - else - glutInitDisplayMode(GLUT_RGBA|GLUT_DEPTH); - - - (void)glutCreateWindow("example program"); - glutDisplayFunc(redraw_opengl); - glutKeyboardFunc(key); - glutMouseFunc(mouse); - glutMotionFunc(motion); - glutReshapeFunc(reshape); - - /* draw a perspective scene */ - glMatrixMode(GL_PROJECTION); - glFrustum(-100., 100., -100., 100., 300., 501.); - glMatrixMode(GL_MODELVIEW); - /* look at scene from (0, 0, 400) */ - gluLookAt(0., 0., 400., 0., 0., 0., 0., 1., 0.); - - /* turn on features */ - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHT0); - glLightfv(GL_LIGHT0, GL_POSITION, staticlightpos); - - /* remove back faces to speed things up */ - glCullFace(GL_BACK); - - - /* make a display list containing a sphere */ - glNewList(SPHERE, GL_COMPILE); - { - glPushMatrix(); - glTranslatef(0.f, -80.f, -80.f); - qobj = gluNewQuadric(); - gluQuadricTexture(qobj, GL_TRUE); - glColor3f(.5f, .25f, 0.f); - gluSphere(qobj, 20.f, 20, 20); - gluDeleteQuadric(qobj); - glPopMatrix(); - } - glEndList(); - - /* make a display list containing a sphere */ - glNewList(LIGHT, GL_COMPILE); - { - qobj = gluNewQuadric(); - glColor3f(1.f, 1.f, 1.f); - glPushAttrib(GL_LIGHTING_BIT); - glDisable(GL_LIGHTING); - gluSphere(qobj, 3.f, 20, 20); - glPopAttrib(); - gluDeleteQuadric(qobj); - } - glEndList(); - - /* create a display list containing a cone */ - glNewList(CONE, GL_COMPILE); - { - glPushMatrix(); - glTranslatef(-60.f, -100.f, -5.f); - - qobj = gluNewQuadric(); - gluQuadricTexture(qobj, GL_TRUE); - glRotatef(-90.f, 1.f, 0.f, 0.f); - glColor3f(0.f, .25f, .5f); - - gluCylinder(qobj, 20., 0., 60., 20, 20); - gluDeleteQuadric(qobj); - - qobj = gluNewQuadric(); - gluQuadricOrientation(qobj, GLU_INSIDE); - gluDisk(qobj, 0., 20., 20, 1); - gluDeleteQuadric(qobj); - glPopMatrix(); - } - glEndList(); - - /* load pattern for current 2d texture */ - tex = make_texture(128, 128); - - /* makes texturing faster, and looks better than GL_LINEAR */ - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexImage2D(GL_TEXTURE_2D, 0, 1, 128, 128, 0, GL_RED, GL_FLOAT, tex); - free(tex); - - { - GLuint *surftex; - int texwid, texht, texcomps; - surftex = read_texture("../data/brick.rgb", &texwid, &texht, &texcomps); - - glBindTexture(GL_TEXTURE_2D, SURFMAP); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, texwid, texht, 0, GL_RGBA, - GL_UNSIGNED_BYTE, surftex); - - } - - glBindTexture(GL_TEXTURE_2D, DEFAULT); - - tess_surface(FLOOR, 1); - tess_surface(CEIL, 1); - tess_surface(LEFT, 1); - tess_surface(RIGHT, 1); - tess_surface(BACK, 1); - - /* 1/80 intensity at edges */ - glLightf(GL_LIGHT1, GL_QUADRATIC_ATTENUATION, 100.f/(texdim * texdim/4)); - /* 1/2 intensity at edges */ - glLightf(GL_LIGHT1, GL_LINEAR_ATTENUATION, 1.f/texdim/2); - glLightfv(GL_LIGHT1, GL_DIFFUSE, one); - - make_lightmap(GL_LIGHT1, 128); - - key('?', 0, 0); - - CHECK_ERROR("end of main"); - - glutMainLoop(); - - return 0; -} - diff --git a/lib/glut-3.7.6/progs/advanced97/lightmap.dsp b/lib/glut-3.7.6/progs/advanced97/lightmap.dsp deleted file mode 100644 index 350cbd140..000000000 --- a/lib/glut-3.7.6/progs/advanced97/lightmap.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="lightmap" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=lightmap - 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 "lightmap.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 "lightmap.mak" CFG="lightmap - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "lightmap - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "lightmap - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "lightmap - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "lightmap - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "lightmap - Win32 Release" -# Name "lightmap - Win32 Debug" -# Begin Source File - -SOURCE=.\lightmap.c -# End Source File -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# Begin Source File - -SOURCE=.\texture.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/lightp.c b/lib/glut-3.7.6/progs/advanced97/lightp.c deleted file mode 100644 index 4f3558569..000000000 --- a/lib/glut-3.7.6/progs/advanced97/lightp.c +++ /dev/null @@ -1,315 +0,0 @@ -#include -#include -#include -#include "texture.h" -#include - -#ifndef __sgi -/* Most math.h's do not define float versions of the math functions. */ -#define expf(x) ((float)exp((x))) -#define fabsf(x) ((float)fabs((x))) -#endif - -static int pstyle = 3; -static float transx, transy, rotx, roty; -static int ox = -1, oy = -1; -static int mot; -#define PAN 1 -#define ROT 2 - -void -pan(int x, int y) { - transx += (x-ox)/500.; - transy -= (y-oy)/500.; - ox = x; oy = y; - glutPostRedisplay(); -} - -void -rotate(int x, int y) { - rotx += x-ox; - if (rotx > 360.) rotx -= 360.; - else if (rotx < -360.) rotx += 360.; - roty += y-oy; - if (roty > 360.) roty -= 360.; - else if (roty < -360.) roty += 360.; - ox = x; oy = y; - glutPostRedisplay(); -} - -void -motion(int x, int y) { - if (mot == PAN) pan(x, y); - else if (mot == ROT) rotate(x,y); -} - -void -mouse(int button, int state, int x, int y) { - if(state == GLUT_DOWN) { - switch(button) { - case GLUT_LEFT_BUTTON: - mot = PAN; - motion(ox = x, oy = y); - break; - case GLUT_RIGHT_BUTTON: - mot = ROT; - motion(ox = x, oy = y); - break; - case GLUT_MIDDLE_BUTTON: - break; - } - } else if (state == GLUT_UP) { - mot = 0; - } -} - -void pfunc(void) { pstyle = (pstyle+1) % 4; } - -void help(void) { - printf("Usage: lightp [image]\n"); - printf("'h' - help\n"); - printf("'p' - toggle point mode\n"); - printf("left mouse - pan\n"); - printf("right mouse - rotate\n"); -} - -void init(char *filename) { - GLfloat fog_color[4], fog_density = 0.05, density, far_cull; - unsigned *image; - int width, height, components; - if (filename) { - image = read_texture(filename, &width, &height, &components); - if (image == NULL) { - fprintf(stderr, "Error: Can't load image file \"%s\".\n", - filename); - exit(EXIT_FAILURE); - } else { - printf("%d x %d image loaded\n", width, height); - } - if (components != 1 && components != 2) { - printf("must be a l or la image\n"); - exit(EXIT_FAILURE); - } - if (components == 1) { - /* hack for RE */ - int i; - GLubyte *p = (GLubyte *)image; - for(i = 0; i < width*height; i++) { - p[i*4+3] = p[i*4+0]; - } - components = 2; - } - } else { - int i, j; - unsigned char *img; - components = 4; width = height = 512; - image = (unsigned *) malloc(width*height*sizeof(unsigned)); - img = (unsigned char *)image; - for (j = 0; j < height; j++) - for (i = 0; i < width; i++) { - int w2 = width/2, h2 = height/2; - if (i & 32) - img[4*(i+j*width)+0] = 0xff; - else - img[4*(i+j*width)+1] = 0xff; - if (j&32) - img[4*(i+j*width)+2] = 0xff; - if ((i-w2)*(i-w2) + (j-h2)*(j-h2) > 64*64 && - (i-w2)*(i-w2) + (j-h2)*(j-h2) < 300*300) img[4*(i+j*width)+3] = 0xff; - } - - } - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexImage2D(GL_TEXTURE_2D, 0, components, width, - height, 0, GL_RGBA, GL_UNSIGNED_BYTE, - image); - /*glEnable(GL_TEXTURE_2D);*/ - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(50.,1.,.1,far_cull = 10.); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(0.,0.,-5.5); - - density = 1.- expf(-5.5 * fog_density * fog_density * - far_cull * far_cull); - -#define MAX(a,b) ((a) > (b) ? (a) : (b)) -#define MIN(a,b) ((a) < (b) ? (a) : (b)) - density = MAX(MIN(density, 1.), 0.); - - fog_color[0] = .23*.19 + density *.57*.19; - fog_color[1] = .35*.19 + density *.45*.19; - fog_color[2] = .78*.19 + density *.22*.19; - - glClearColor(fog_color[0], fog_color[1], fog_color[2], 1.f); - - glFogi(GL_FOG_MODE, GL_EXP2); - glFogf(GL_FOG_DENSITY, fog_density); - glFogfv(GL_FOG_COLOR, fog_color); - if (fog_density > 0) - glEnable(GL_FOG); - glLineWidth(2.0f); - glEnable(GL_LINE_SMOOTH); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glPointSize(10.f); - glEnable(GL_POINT_SMOOTH); - glHint(GL_POINT_SMOOTH_HINT, GL_NICEST); -} - -void draw_base(void) { - glColor4f(.1, .3, .1, 1.0); - glBegin(GL_QUADS); - glTexCoord2f(0, 0); glVertex3f(-1.f, 0.f, -1.f); - glTexCoord2f(0, 1); glVertex3f(-1.f, 0.f, 1.f); - glTexCoord2f(1, 1); glVertex3f( 1.f, 0.f, 1.f); - glTexCoord2f(1, 0); glVertex3f( 1.f, 0.f, -1.f); - glEnd(); -} - -void draw_runway(void) { - glColor4f(.1, .1, .1, 1.0); - glPushMatrix(); - glScalef(.1f, 1.f, 1.f); - glBegin(GL_QUADS); - glTexCoord2f(0, 0); glVertex3f(-1.f, 0.f, -1.f); - glTexCoord2f(0, 1); glVertex3f(-1.f, 0.f, 1.f); - glTexCoord2f(1, 1); glVertex3f( 1.f, 0.f, 1.f); - glTexCoord2f(1, 0); glVertex3f( 1.f, 0.f, -1.f); - glEnd(); - glPopMatrix(); -} - -/* v0 = v1*mat */ -void xform(float *v0, float *mat, float *v1) { - v0[0] = v1[0]*mat[0] + v1[1]*mat[4] + v1[2]*mat[8] + v1[3]*mat[12]; - v0[1] = v1[1]*mat[1] + v1[1]*mat[5] + v1[2]*mat[9] + v1[3]*mat[13]; - v0[2] = v1[2]*mat[2] + v1[1]*mat[6] + v1[2]*mat[10] + v1[3]*mat[14]; - v0[3] = v1[3]*mat[3] + v1[1]*mat[7] + v1[2]*mat[11] + v1[3]*mat[15]; -} - -/* m0 = m1*m2 */ -void xformm(float *m0, float *m1, float *m2) { - int i, j; - for(i = 0; i < 4; i++) { - for(j = 0; j < 4; j++) { - m0[4*i+j] = m1[4*i+0]*m2[4*0+j] + m1[4*i+1]*m2[4*1+j] + m1[4*i+2]*m2[4*2+j] + m1[4*i+3]*m2[4*3+j]; - } - } -} - -void draw_quad(float x, float y, float z) { - glPushMatrix(); - glTranslatef(x, y, z); - glRotatef(90.f, 1.f, 0.f, 0.f); - glScalef(.03f, .03f, .03f); - glBegin(GL_QUADS); - glTexCoord2f(0, 0); glVertex3f(-1.f, 0.f, -1.f); - glTexCoord2f(0, 1); glVertex3f(-1.f, 0.f, 1.f); - glTexCoord2f(1, 1); glVertex3f( 1.f, 0.f, 1.f); - glTexCoord2f(1, 0); glVertex3f( 1.f, 0.f, -1.f); - glEnd(); - glPopMatrix(); -} - -void draw_lights(void) { - int i; - GLfloat mat[16], matv[16], matp[16]; - float v0[4], v1[4], v[4]; - - glEnable(GL_BLEND); - glColor4f(1.f, 1.f, 1.f, 1.0); - glPushMatrix(); - if (pstyle != 3) { - glScalef(.1f, 1.f, 1.f); - if (pstyle == 0) glDisable(GL_POINT_SMOOTH); - else glEnable(GL_POINT_SMOOTH); - if (pstyle == 1) glPointSize(13.f); - glGetFloatv(GL_MODELVIEW_MATRIX, matv); - glGetFloatv(GL_PROJECTION_MATRIX, matp); - xformm(mat, matv, matp); - v[0] = -1.f; - v[1] = 0.0f; - v[3] = 1.0f; - for(i = 0; i <= 20; i++) { - if (pstyle == 2) { - float s; - v[2] = -1.f+2.f/20*i; - v[0] -= 1.; - xform(v0, mat, v); - v[0] += 2.; - xform(v1, mat, v); - v[0] -= 1.; - s = fabsf(v0[0]/v0[3] - v1[0]/v1[3]); - glPointSize(10.f*s); - } - glBegin(GL_POINTS); - glVertex3f(-1.f, 0.f, -1.f+2.f/20*i); - glVertex3f( 1.f, 0.f, -1.f+2.f/20*i); - glEnd(); - } - } else { - glEnable(GL_TEXTURE_2D); - glScalef(1.f, 10.f, 1.f); - for(i = 0; i <= 20; i++) { - float v = -1.f+2.f/20*i; - draw_quad(-.1f, 0.f, v); - draw_quad( .1f, 0.f, v); - } - glDisable(GL_TEXTURE_2D); - } - glPopMatrix(); - glDisable(GL_BLEND); -} - -void display(void) { - glClear(GL_COLOR_BUFFER_BIT); - - glPushMatrix(); - glTranslatef(transx, transy, 0.f); - glRotatef(rotx, 0., 1., 0.); - glRotatef(roty, 1., 0., 0.); - glScalef(10.f,1.f,10.f); - glTranslatef(0.f,-.4f,0.f); - draw_base(); - draw_runway(); - draw_lights(); - glPopMatrix(); - glutSwapBuffers(); -} - -void reshape(int w, int h) { - glViewport(0, 0, w, h); -} - -/*ARGSUSED1*/ -void -key(unsigned char key, int x, int y) { - switch(key) { - case 'p': pfunc(); break; - case 'h': help(); break; - case '\033': exit(EXIT_SUCCESS); break; - default: break; - } - glutPostRedisplay(); -} - -int main(int argc, char** argv) { - glutInitWindowSize(512, 512); - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE); - (void)glutCreateWindow(argv[0]); - init(argc == 1 ? "../data/light.bw" : argv[1]); - glutDisplayFunc(display); - glutKeyboardFunc(key); - glutReshapeFunc(reshape); - glutMouseFunc(mouse); - glutMotionFunc(motion); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/advanced97/lightp.dsp b/lib/glut-3.7.6/progs/advanced97/lightp.dsp deleted file mode 100644 index 2c14fee20..000000000 --- a/lib/glut-3.7.6/progs/advanced97/lightp.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="lightp" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=lightp - 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 "lightp.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 "lightp.mak" CFG="lightp - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "lightp - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "lightp - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "lightp - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "lightp - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "lightp - Win32 Release" -# Name "lightp - Win32 Debug" -# Begin Source File - -SOURCE=.\lightp.c -# End Source File -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# Begin Source File - -SOURCE=.\texture.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/line.c b/lib/glut-3.7.6/progs/advanced97/line.c deleted file mode 100644 index c757f64ab..000000000 --- a/lib/glut-3.7.6/progs/advanced97/line.c +++ /dev/null @@ -1,224 +0,0 @@ -#include -#include -#include - -#define CHECK_ERROR(str) \ -{ \ - GLenum error; \ - if(error = glGetError()) \ - printf("GL Error: %s (%s)\n", gluErrorString(error), str); \ -} - -int winWidth = 512; -int winHeight = 512; -GLboolean smooth = GL_FALSE; -GLboolean dblbuf = GL_TRUE; -GLfloat objangle[2] = {0.f, 0.f}; -GLfloat scale = 1.f; -int active; - -enum {X, Y, Z}; -enum {OBJ_ANGLE, OBJ_SCALE}; -enum {NOLIST, PLANE}; /* display lists */ - -/* load data structure from file */ -enum {VERTS, END}; - - -void -reshape(int wid, int ht) -{ - winWidth = wid; - winHeight = ht; - glViewport(0, 0, wid, ht); -} - -void -motion(int x, int y) -{ - - switch(active) - { - case OBJ_ANGLE: - objangle[X] = (x - winWidth/2) * 360./winWidth; - objangle[Y] = (y - winHeight/2) * 360./winHeight; - glutPostRedisplay(); - break; - case OBJ_SCALE: - scale = x * 5./winWidth; - objangle[Y] = (y - winHeight/2) * 360./winHeight; - glutPostRedisplay(); - break; - } -} - -void -mouse(int button, int state, int x, int y) -{ - if(state == GLUT_DOWN) - switch(button) - { - case GLUT_LEFT_BUTTON: /* rotate the object */ - active = OBJ_ANGLE; - motion(x, y); - break; - case GLUT_RIGHT_BUTTON: /* scale the object */ - active = OBJ_SCALE; - motion(x, y); - break; - } -} - - -/* ARGSUSED1 */ -void key(unsigned char key, int x, int y) -{ - switch(key) - { - case 's': /* toggle line smoothing */ - if(smooth) - { - glDisable(GL_LINE_SMOOTH); - glDisable(GL_BLEND); - smooth = GL_FALSE; - printf("Turn off OpenGL line smoothing\n"); - } - else - { - glEnable(GL_LINE_SMOOTH); - glEnable(GL_BLEND); - printf("Turn on OpenGL line smoothing\n"); - smooth = GL_TRUE; - } - glutPostRedisplay(); - break; - case '\033': - exit(0); - break; - case '?': - case 'h': - case 'H': - default: - fprintf(stderr, "Keyboard commands:\n\n" - "s - toggle smooth line mode\n"); - break; - } - -} - - -void -loader(char *fname) -{ - FILE *fp; - GLfloat x, y, z; - int state = END; - int read; - - fp = fopen(fname, "r"); - if (!fp) { - printf("can't open file %s\n", fname); - exit(1); - } - - glNewList(PLANE, GL_COMPILE); - while(!feof(fp)) - { - switch(state) - { - case END: - read = fscanf(fp, " v"); - if(read < 0) /* hit eof */ - break; - state = VERTS; - glBegin(GL_LINE_STRIP); - break; - case VERTS: - read = fscanf(fp, " %f %f %f", &x, &y, &z); - if(read == 3) - glVertex3f(x, y, z); - else - { - fscanf(fp, " e"); - glEnd(); - state = END; - } - break; - } - } - glEndList(); - fclose(fp); -} - -void redraw(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - - glPushMatrix(); - glRotatef(objangle[X], 0.f, 1.f, 0.f); /* rotate object */ - glRotatef(objangle[Y], 1.f, 0.f, 0.f); - glScalef(scale, scale, scale); - - glCallList(PLANE); - - glPopMatrix(); - - if(dblbuf) - glutSwapBuffers(); - else - glFlush(); - - CHECK_ERROR("OpenGL Error in redraw()"); -} - -int main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitWindowSize(winWidth, winHeight); - if(argc > 1) - { - char *args = argv[1]; - GLboolean done = GL_FALSE; - while(!done) - { - switch(*args) - { - case 's': /* single buffer */ - printf("Single Buffered\n"); - dblbuf = GL_FALSE; - break; - case '-': /* do nothing */ - break; - case 0: - done = GL_TRUE; - break; - } - args++; - } - } - if(dblbuf) - glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE); - else - glutInitDisplayMode(GLUT_RGBA); - - (void)glutCreateWindow("load and draw a wireframe image"); - glutDisplayFunc(redraw); - glutReshapeFunc(reshape); - glutKeyboardFunc(key); - glutMotionFunc(motion); - glutMouseFunc(mouse); - - glMatrixMode(GL_PROJECTION); - glOrtho(-1., 1., -1., 1., -5., 5.); - glMatrixMode(GL_MODELVIEW); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); - - loader("../data/f15.data"); - - CHECK_ERROR("OpenGL Error in main()"); - - key('?', 0, 0); /* print usage message */ - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/advanced97/line.dsp b/lib/glut-3.7.6/progs/advanced97/line.dsp deleted file mode 100644 index e5375ba63..000000000 --- a/lib/glut-3.7.6/progs/advanced97/line.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="line" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=line - 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 "line.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 "line.mak" CFG="line - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "line - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "line - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "line - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "line - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "line - Win32 Release" -# Name "line - Win32 Debug" -# Begin Source File - -SOURCE=.\line.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/multiaccumaa.c b/lib/glut-3.7.6/progs/advanced97/multiaccumaa.c deleted file mode 100644 index 092c4c9aa..000000000 --- a/lib/glut-3.7.6/progs/advanced97/multiaccumaa.c +++ /dev/null @@ -1,436 +0,0 @@ -#include -#include - -#ifdef _WIN32 -#include -#define sleep(x) Sleep(1000*x) -#else -#include -#endif - -#include - -const GLdouble FRUSTDIM = 100.f; -int win_width = 256; -int win_height = 256; -int show_results = GL_TRUE; -int object_offset, font_offset; - -enum {SPHERE, CONE}; - -/*{0x00, 0x60, 0x60, 0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x06, 0x06, 0x03, 0x03},*/ -GLubyte rasters[][13] = { -{0x00, 0x00, 0x3c, 0x66, 0xc3, 0xe3, 0xf3, 0xdb, 0xcf, 0xc7, 0xc3, 0x66, 0x3c}, -{0x00, 0x00, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78, 0x38, 0x18}, -{0x00, 0x00, 0xff, 0xc0, 0xc0, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x03, 0xe7, 0x7e}, -{0x00, 0x00, 0x7e, 0xe7, 0x03, 0x03, 0x07, 0x7e, 0x07, 0x03, 0x03, 0xe7, 0x7e}, -{0x00, 0x00, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xff, 0xcc, 0x6c, 0x3c, 0x1c, 0x0c}, -{0x00, 0x00, 0x7e, 0xe7, 0x03, 0x03, 0x07, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0xff}, -{0x00, 0x00, 0x7e, 0xe7, 0xc3, 0xc3, 0xc7, 0xfe, 0xc0, 0xc0, 0xc0, 0xe7, 0x7e}, -{0x00, 0x00, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x06, 0x03, 0x03, 0x03, 0xff}, -{0x00, 0x00, 0x7e, 0xe7, 0xc3, 0xc3, 0xe7, 0x7e, 0xe7, 0xc3, 0xc3, 0xe7, 0x7e}, -{0x00, 0x00, 0x7e, 0xe7, 0x03, 0x03, 0x03, 0x7f, 0xe7, 0xc3, 0xc3, 0xe7, 0x7e}, -}; - -GLfloat mults[] = {1., 1./2., 2./3., 3./4., 4./5., 5./6., 6./7., 7./8., 8./9., 9./10.}; - - -/* -** Create a single component texture map -*/ - -void make_font(void) -{ - GLuint i; - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - - font_offset = glGenLists (10); - for (i = 0; i < 10; i++) { - glNewList(i+font_offset, GL_COMPILE); - glBitmap(8, 13, 0.0, 2.0, 10.0, 0.0, rasters[i]); - glEndList(); - } -} - -GLfloat *make_texture(int maxs, int maxt) -{ - int s, t; - static GLfloat *texture; - - texture = (GLfloat *)malloc(maxs * maxt * sizeof(GLfloat)); - for(t = 0; t < maxt; t++) { - for(s = 0; s < maxs; s++) { - texture[s + maxs * t] = ((s >> 4) & 0x1) ^ ((t >> 4) & 0x1); - } - } - return texture; -} - -void print_frame_number(GLuint frame) -{ - GLuint f1, f2; - - glPushAttrib( GL_ENABLE_BIT | GL_CURRENT_BIT); - - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - glOrtho (0.0, win_width, 0.0, win_height, -1.0, 1.0); - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); - - glDisable(GL_DEPTH_TEST); - glDisable(GL_LIGHTING); - glDisable(GL_TEXTURE_2D); - - glColor3f(1.0, 0.0, 0.0); - - f1 = frame/10; - if (f1 > 0) { - glRasterPos2i(50, win_height - 50); - glCallList(font_offset + f1); - } - else - glRasterPos2i(60, win_height - 50); - f2 = frame - f1*10; - glCallList(font_offset + f2); - - glPopMatrix(); - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glPopAttrib(); -} - -void -render(void) -{ - /* material properties for objects in scene */ - static GLfloat wall_mat[] = {1.f, 1.f, 1.f, 1.f}; - - glClear(GL_DEPTH_BUFFER_BIT|GL_COLOR_BUFFER_BIT); - - /* - ** Note: wall verticies are ordered so they are all front facing - ** this lets me do back face culling to speed things up. - */ - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, wall_mat); - - /* floor */ - /* make the floor textured */ - glEnable(GL_TEXTURE_2D); - - /* - ** Since we want to turn texturing on for floor only, we have to - ** make floor a separate glBegin()/glEnd() sequence. You can't - ** turn texturing on and off between begin and end calls - */ - glBegin(GL_QUADS); - glNormal3f(0.f, 1.f, 0.f); - glTexCoord2i(0, 0); - glVertex3f(-100.f, -100.f, -320.f); - glTexCoord2i(1, 0); - glVertex3f( 100.f, -100.f, -320.f); - glTexCoord2i(1, 1); - glVertex3f( 100.f, -100.f, -520.f); - glTexCoord2i(0, 1); - glVertex3f(-100.f, -100.f, -520.f); - glEnd(); - - glDisable(GL_TEXTURE_2D); - - /* walls */ - - glBegin(GL_QUADS); - /* left wall */ - glNormal3f(1.f, 0.f, 0.f); - glVertex3f(-100.f, -100.f, -320.f); - glVertex3f(-100.f, -100.f, -520.f); - glVertex3f(-100.f, 100.f, -520.f); - glVertex3f(-100.f, 100.f, -320.f); - - /* right wall */ - glNormal3f(-1.f, 0.f, 0.f); - glVertex3f( 100.f, -100.f, -320.f); - glVertex3f( 100.f, 100.f, -320.f); - glVertex3f( 100.f, 100.f, -520.f); - glVertex3f( 100.f, -100.f, -520.f); - - /* ceiling */ - glNormal3f(0.f, -1.f, 0.f); - glVertex3f(-100.f, 100.f, -320.f); - glVertex3f(-100.f, 100.f, -520.f); - glVertex3f( 100.f, 100.f, -520.f); - glVertex3f( 100.f, 100.f, -320.f); - - /* back wall */ - glNormal3f(0.f, 0.f, 1.f); - glVertex3f(-100.f, -100.f, -520.f); - glVertex3f( 100.f, -100.f, -520.f); - glVertex3f( 100.f, 100.f, -520.f); - glVertex3f(-100.f, 100.f, -520.f); - glEnd(); - - - glPushMatrix(); - glTranslatef(-80.f, -60.f, -420.f); - glCallList(object_offset + SPHERE); - glPopMatrix(); - - - glPushMatrix(); - glTranslatef(-20.f, -80.f, -500.f); - glCallList(object_offset + CONE); - glPopMatrix(); - - if(glGetError()) /* to catch programming errors; should never happen */ - printf("Oops! I screwed up my OpenGL calls somewhere\n"); - - glFlush(); /* high end machines may need this */ -} - -/* compute scale factor for window->object space transform */ -/* could use gluUnProject(), but probably too much trouble */ -void -computescale(GLfloat *sx, GLfloat *sy) -{ - enum {XORG, YORG, WID, HT}; - GLint viewport[4]; - glGetIntegerv(GL_VIEWPORT, viewport); - - *sx = 2 * FRUSTDIM/viewport[WID]; - *sy = 2 * FRUSTDIM/viewport[WID]; -} - -enum {NONE, AA, AA_NEW}; - -int rendermode = NONE; - -void -menu(int selection) -{ - rendermode = selection; - glutPostRedisplay(); -} - - - -/* Called when window needs to be redrawn */ -void redraw(void) -{ - GLfloat invx, invy; - GLfloat scale, dx, dy; - int i, j; - int min, max; - int count, nframes; - - switch(rendermode) { - case NONE: - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glFrustum(-FRUSTDIM, FRUSTDIM, -FRUSTDIM, FRUSTDIM, 320., 640.); - glMatrixMode(GL_MODELVIEW); - render(); - glutSwapBuffers(); - break; - case AA: - min = -1; - max = -min + 1; - count = -2 * min + 1; - count *= count; - /* uniform scaling, less than one pixel wide */ - scale = -.9f/min; - - computescale(&invx, &invy); - - glClear(GL_ACCUM_BUFFER_BIT); - - for(j = min, nframes = 1; j < max; j++) { - for(i = min; i < max; i++, nframes++) { - dx = invx * scale * i; - dy = invy * scale * j; - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glFrustum(-FRUSTDIM + dx, - FRUSTDIM + dy, - -FRUSTDIM + dx, - FRUSTDIM + dy, - 320., 640.); - glMatrixMode(GL_MODELVIEW); - render(); - glAccum(GL_ACCUM, 1.f/count); - - if (show_results) { - if (nframes == 1) { - glutSwapBuffers(); - glDrawBuffer(GL_FRONT); - } else if (nframes == 2) { - glDrawBuffer(GL_FRONT); - glAccum(GL_RETURN, 3.99); - } else { - glDrawBuffer(GL_FRONT); - glAccum(GL_RETURN, (GLfloat)count/(GLfloat)nframes); - } - print_frame_number(nframes); - glFlush(); - printf("frame number %d\n",nframes); - glDrawBuffer(GL_BACK); - sleep(3); - } - } - } - if (!show_results) { - glAccum(GL_RETURN, 1.f); - glutSwapBuffers(); - } - break; - case AA_NEW: - min = -2; - max = -min + 1; - count = -2 * min + 1; - count *= count; - /* uniform scaling, less than one pixel wide */ - scale = -.9f/min; - - computescale(&invx, &invy); - - glClear(GL_ACCUM_BUFFER_BIT); - - for(j = min, nframes = 1; j < max; j++) { - for(i = min; i < max; i++, nframes++) { - dx = invx * scale * i; - dy = invy * scale * j; - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glFrustum(-FRUSTDIM + dx, - FRUSTDIM + dy, - -FRUSTDIM + dx, - FRUSTDIM + dy, - 320., 640.); - glMatrixMode(GL_MODELVIEW); - render(); - if (nframes == 1) - glAccum(GL_ACCUM, 1.); - else - glAccum(GL_ACCUM, .5); - - if (show_results) { - glDrawBuffer(GL_FRONT); - glAccum(GL_RETURN, 1.); - print_frame_number(nframes); - glFlush(); - printf("frame number %d\n",nframes); - glDrawBuffer(GL_BACK); - sleep(3); - } - - if (nframes < count) { - glAccum(GL_RETURN, 1.); - glAccum(GL_LOAD, .5); - } - - } - } - if (!show_results) { - glAccum(GL_RETURN, 1.f); - glutSwapBuffers(); - } - break; - } - -} - -void reshape(int w, int h) -{ - if (w < h) { - win_height = win_width = w; - } else { - win_height = win_width = h; - } - glViewport(0, 0, win_width, win_height); -} - -/* ARGSUSED1 */ -void key(unsigned char key, int x, int y) -{ - if(key == '\033') - exit(0); -} - - -const int TEXDIM = 256; -/* Parse arguments, and set up interface between OpenGL and window system */ -main(int argc, char *argv[]) -{ - GLfloat *tex; - static GLfloat lightpos[] = {50.f, 50.f, -320.f, 1.f}; - static GLfloat sphere_mat[] = {1.f, .5f, 0.f, 1.f}; - static GLfloat cone_mat[] = {0.f, .5f, 1.f, 1.f}; - GLUquadricObj *sphere, *cone, *base; - - glutInit(&argc, argv); - glutInitWindowSize(win_width, win_height); - glutInitDisplayMode(GLUT_RGBA|GLUT_DEPTH|GLUT_ACCUM|GLUT_DOUBLE); - (void)glutCreateWindow("Accum antialias"); - glutDisplayFunc(redraw); - glutKeyboardFunc(key); - glutReshapeFunc(reshape); - - glutCreateMenu(menu); - glutAddMenuEntry("Aliased View", NONE); - glutAddMenuEntry("AntiAliased View", AA); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - make_font(); - - /* draw a perspective scene */ - glMatrixMode(GL_PROJECTION); - glFrustum(-FRUSTDIM, FRUSTDIM, -FRUSTDIM, FRUSTDIM, 320., 640.); - glMatrixMode(GL_MODELVIEW); - - /* turn on features */ - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - - /* place light 0 in the right place */ - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - - /* remove back faces to speed things up */ - glCullFace(GL_BACK); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - - object_offset = glGenLists(2); - glNewList(object_offset + SPHERE, GL_COMPILE); - /* make display lists for sphere and cone; for efficiency */ - sphere = gluNewQuadric(); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, sphere_mat); - gluSphere(sphere, 20.f, 20, 20); - gluDeleteQuadric(sphere); - glEndList(); - - glNewList(object_offset + CONE, GL_COMPILE); - cone = gluNewQuadric(); - base = gluNewQuadric(); - glRotatef(-90.f, 1.f, 0.f, 0.f); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, cone_mat); - gluDisk(base, 0., 20., 20, 1); - gluCylinder(cone, 20., 0., 60., 20, 20); - gluDeleteQuadric(cone); - gluDeleteQuadric(base); - glEndList(); - - /* load pattern for current 2d texture */ - tex = make_texture(TEXDIM, TEXDIM); - glTexImage2D(GL_TEXTURE_2D, 0, 1, TEXDIM, TEXDIM, 0, GL_RED, GL_FLOAT, tex); - free(tex); - - glReadBuffer(GL_BACK); /* input to accum buffer */ - - glutMainLoop(); - - return 0; -} - diff --git a/lib/glut-3.7.6/progs/advanced97/multiaccumaa.dsp b/lib/glut-3.7.6/progs/advanced97/multiaccumaa.dsp deleted file mode 100644 index 062a30819..000000000 --- a/lib/glut-3.7.6/progs/advanced97/multiaccumaa.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="multiaccumaa" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=multiaccumaa - 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 "multiaccumaa.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 "multiaccumaa.mak" CFG="multiaccumaa - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "multiaccumaa - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "multiaccumaa - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "multiaccumaa - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "multiaccumaa - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "multiaccumaa - Win32 Release" -# Name "multiaccumaa - Win32 Debug" -# Begin Source File - -SOURCE=.\multiaccumaa.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/multialphablend.c b/lib/glut-3.7.6/progs/advanced97/multialphablend.c deleted file mode 100644 index a9548540f..000000000 --- a/lib/glut-3.7.6/progs/advanced97/multialphablend.c +++ /dev/null @@ -1,202 +0,0 @@ -#include -#include -#include -#include -#include - -GLUquadricObj *cone, *base, *qsphere; - -#ifndef __sgi -#define trunc(x) ((double)((int)(x))) -#endif - -void init(void) -{ - static GLfloat lightpos[] = {.5, .75, 1.5, 1}; - - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - - cone = gluNewQuadric(); - base = gluNewQuadric(); - qsphere = gluNewQuadric(); - - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); -} - -void reshape(GLsizei w, GLsizei h) -{ - glViewport(0, 0, w, h); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(60, 1, .01, 10); - gluLookAt(0, 0, 2.577, 0, 0, -5, 0, 1, 0); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -void draw_room(void) -{ - /* material for the walls, floor, ceiling */ - static GLfloat wall_mat[] = {1.f, 1.f, 1.f, 1.f}; - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, wall_mat); - - glBegin(GL_QUADS); - - /* floor */ - glNormal3f(0, 1, 0); - glVertex3f(-1, -1, 1); - glVertex3f(1, -1, 1); - glVertex3f(1, -1, -1); - glVertex3f(-1, -1, -1); - - /* ceiling */ - glNormal3f(0, -1, 0); - glVertex3f(-1, 1, -1); - glVertex3f(1, 1, -1); - glVertex3f(1, 1, 1); - glVertex3f(-1, 1, 1); - - /* left wall */ - glNormal3f(1, 0, 0); - glVertex3f(-1, -1, -1); - glVertex3f(-1, -1, 1); - glVertex3f(-1, 1, 1); - glVertex3f(-1, 1, -1); - - /* right wall */ - glNormal3f(-1, 0, 0); - glVertex3f(1, 1, -1); - glVertex3f(1, 1, 1); - glVertex3f(1, -1, 1); - glVertex3f(1, -1, -1); - - /* far wall */ - glNormal3f(0, 0, 1); - glVertex3f(-1, -1, -1); - glVertex3f(1, -1, -1); - glVertex3f(1, 1, -1); - glVertex3f(-1, 1, -1); - - glEnd(); -} - -void draw_cone(void) -{ - static GLfloat cone_mat[] = {0.f, .5f, 1.f, .5f}; - - glPushMatrix(); - glTranslatef(0, -1, 0); - glRotatef(-90, 1, 0, 0); - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, cone_mat); - - /* base is coplanar with floor, so turn off depth testing */ - glDisable(GL_DEPTH_TEST); - gluDisk(base, 0., .3, 20, 1); - glEnable(GL_DEPTH_TEST); - - gluCylinder(cone, .3, 0, 1.25, 20, 1); - - glPopMatrix(); -} - -void draw_sphere(GLdouble angle) -{ - static GLfloat sphere_mat[] = {1.f, .5f, 0.f, .5f}; - - glPushMatrix(); - glTranslatef(0, -.3, 0); - glRotatef(angle, 0, 1, 0); - glTranslatef(.6, 0, 0); - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, sphere_mat); - gluSphere(qsphere, .3, 20, 20); - - glPopMatrix(); -} - -GLdouble get_secs(void) -{ - return glutGet(GLUT_ELAPSED_TIME) / 1000.0; -} - -void draw(void) -{ - GLenum err; - GLdouble secs, degrees; - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - /* one revolution every 10 seconds... */ - secs = get_secs(); - secs = secs - 10.*trunc(secs / 10.); - degrees = (secs/10.) * (360.); - - draw_room(); - - glEnable(GL_BLEND); - glEnable(GL_CULL_FACE); - if (degrees < 180) { - /* sphere behind cone */ - glCullFace(GL_FRONT); - draw_sphere(degrees); - draw_cone(); - glCullFace(GL_BACK); - draw_sphere(degrees); - draw_cone(); - } else { - /* cone behind sphere */ - glCullFace(GL_FRONT); - draw_cone(); - draw_sphere(degrees); - glCullFace(GL_BACK); - draw_cone(); - draw_sphere(degrees); - } - glDisable(GL_CULL_FACE); - glDisable(GL_BLEND); - - err = glGetError(); - if (err != GL_NO_ERROR) printf("Error: %s\n", gluErrorString(err)); - - glutSwapBuffers(); -} - -/* ARGSUSED1 */ -void key(unsigned char key, int x, int y) -{ - static int idle = 1; - if (key == 27) exit(0); - idle = (idle == 0); - if (idle) { - glutIdleFunc(draw); - } else { - glutIdleFunc(0); - } - -} - -main(int argc, char *argv[]) -{ - glutInit(&argc, argv); - glutInitWindowSize(256, 256); - glutInitWindowPosition(0, 0); - glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); - glutCreateWindow(argv[0]); - glutDisplayFunc(draw); - glutIdleFunc(draw); - glutKeyboardFunc(key); - glutReshapeFunc(reshape); - init(); - - glutMainLoop(); - return 0; -} - diff --git a/lib/glut-3.7.6/progs/advanced97/multialphablend.dsp b/lib/glut-3.7.6/progs/advanced97/multialphablend.dsp deleted file mode 100644 index 101aa76f2..000000000 --- a/lib/glut-3.7.6/progs/advanced97/multialphablend.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="multialphablend" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=multialphablend - 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 "multialphablend.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 "multialphablend.mak" CFG="multialphablend - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "multialphablend - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "multialphablend - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "multialphablend - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "multialphablend - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "multialphablend - Win32 Release" -# Name "multialphablend - Win32 Debug" -# Begin Source File - -SOURCE=.\multialphablend.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/multialphablendnosort.c b/lib/glut-3.7.6/progs/advanced97/multialphablendnosort.c deleted file mode 100644 index d97a5464f..000000000 --- a/lib/glut-3.7.6/progs/advanced97/multialphablendnosort.c +++ /dev/null @@ -1,190 +0,0 @@ -#include -#include -#include -#include -#include - -GLUquadricObj *cone, *base, *qsphere; - -#ifndef __sgi -#define trunc(x) ((double)((int)(x))) -#endif - -void init(void) -{ - static GLfloat lightpos[] = {.5, .75, 1.5, 1}; - - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - - cone = gluNewQuadric(); - base = gluNewQuadric(); - qsphere = gluNewQuadric(); - - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); -} - -void reshape(GLsizei w, GLsizei h) -{ - glViewport(0, 0, w, h); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(60, 1, .01, 10); - gluLookAt(0, 0, 2.577, 0, 0, -5, 0, 1, 0); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -void draw_room(void) -{ - /* material for the walls, floor, ceiling */ - static GLfloat wall_mat[] = {1.f, 1.f, 1.f, 1.f}; - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, wall_mat); - - glBegin(GL_QUADS); - - /* floor */ - glNormal3f(0, 1, 0); - glVertex3f(-1, -1, 1); - glVertex3f(1, -1, 1); - glVertex3f(1, -1, -1); - glVertex3f(-1, -1, -1); - - /* ceiling */ - glNormal3f(0, -1, 0); - glVertex3f(-1, 1, -1); - glVertex3f(1, 1, -1); - glVertex3f(1, 1, 1); - glVertex3f(-1, 1, 1); - - /* left wall */ - glNormal3f(1, 0, 0); - glVertex3f(-1, -1, -1); - glVertex3f(-1, -1, 1); - glVertex3f(-1, 1, 1); - glVertex3f(-1, 1, -1); - - /* right wall */ - glNormal3f(-1, 0, 0); - glVertex3f(1, 1, -1); - glVertex3f(1, 1, 1); - glVertex3f(1, -1, 1); - glVertex3f(1, -1, -1); - - /* far wall */ - glNormal3f(0, 0, 1); - glVertex3f(-1, -1, -1); - glVertex3f(1, -1, -1); - glVertex3f(1, 1, -1); - glVertex3f(-1, 1, -1); - - glEnd(); -} - -void draw_cone(void) -{ - static GLfloat cone_mat[] = {0.f, .5f, 1.f, .5f}; - - glPushMatrix(); - glTranslatef(0, -1, 0); - glRotatef(-90, 1, 0, 0); - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, cone_mat); - - /* base is coplanar with floor, so turn off depth testing */ - glDisable(GL_DEPTH_TEST); - gluDisk(base, 0., .3, 20, 1); - glEnable(GL_DEPTH_TEST); - - gluCylinder(cone, .3, 0, 1.25, 20, 1); - - glPopMatrix(); -} - -void draw_sphere(GLdouble angle) -{ - static GLfloat sphere_mat[] = {1.f, .5f, 0.f, .5f}; - - glPushMatrix(); - glTranslatef(0, -.3, 0); - glRotatef(angle, 0, 1, 0); - glTranslatef(.6, 0, 0); - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, sphere_mat); - gluSphere(qsphere, .3, 20, 20); - - glPopMatrix(); -} - -GLdouble get_secs(void) -{ - return glutGet(GLUT_ELAPSED_TIME) / 1000.0; -} - -void draw(void) -{ - GLenum err; - GLdouble secs, degrees; - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - /* one revolution every 10 seconds... */ - secs = get_secs(); - secs = secs - 10.*trunc(secs / 10.); - degrees = (secs/10.) * (360.); - - draw_room(); - - glEnable(GL_BLEND); - glEnable(GL_CULL_FACE); - glCullFace(GL_FRONT); - draw_cone(); - draw_sphere(degrees); - glCullFace(GL_BACK); - draw_cone(); - draw_sphere(degrees); - glDisable(GL_CULL_FACE); - glDisable(GL_BLEND); - - err = glGetError(); - if (err != GL_NO_ERROR) printf("Error: %s\n", gluErrorString(err)); - - glutSwapBuffers(); -} - -/* ARGSUSED1 */ -void key(unsigned char key, int x, int y) -{ - static int idle = 1; - if (key == 27) exit(0); - idle = (idle == 0); - if (idle) { - glutIdleFunc(draw); - } else { - glutIdleFunc(0); - } -} - -main(int argc, char *argv[]) -{ - glutInit(&argc, argv); - glutInitWindowSize(256, 256); - glutInitWindowPosition(0, 0); - glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); - glutCreateWindow(argv[0]); - glutDisplayFunc(draw); - glutIdleFunc(draw); - glutKeyboardFunc(key); - glutReshapeFunc(reshape); - init(); - - glutMainLoop(); - return 0; -} - diff --git a/lib/glut-3.7.6/progs/advanced97/multialphablendnosort.dsp b/lib/glut-3.7.6/progs/advanced97/multialphablendnosort.dsp deleted file mode 100644 index 4d0980b9f..000000000 --- a/lib/glut-3.7.6/progs/advanced97/multialphablendnosort.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="multialphablendnosort" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=multialphablendnosort - 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 "multialphablendnosort.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 "multialphablendnosort.mak" CFG="multialphablendnosort - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "multialphablendnosort - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "multialphablendnosort - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "multialphablendnosort - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "multialphablendnosort - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "multialphablendnosort - Win32 Release" -# Name "multialphablendnosort - Win32 Debug" -# Begin Source File - -SOURCE=.\multialphablendnosort.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/multimirror.c b/lib/glut-3.7.6/progs/advanced97/multimirror.c deleted file mode 100644 index c8401613e..000000000 --- a/lib/glut-3.7.6/progs/advanced97/multimirror.c +++ /dev/null @@ -1,367 +0,0 @@ -#include -#include -#include -#include -#include - -GLUquadricObj *cone, *base, *qsphere; - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -#ifndef __sgi -#define trunc(x) ((double)((int)(x))) -#endif - -int draw_passes = 8; - -int headsUp = 0; - -typedef struct { - GLfloat verts[4][3]; - GLfloat scale[3]; - GLfloat trans[3]; -} Mirror; - -Mirror mirrors[] = { - /* mirror on the left wall */ - {{{-1., -.75, -.75}, {-1., .75, -.75}, {-1., .75, .75}, {-1, -.75, .75}}, - {-1, 1, 1}, {2, 0, 0}}, - - /* mirror on right wall */ - {{{1., -.75, .75}, {1., .75, .75}, {1., .75, -.75}, {1., -.75, -.75}}, - {-1, 1, 1}, {-2, 0, 0}}, -}; -int nMirrors = 2; - -void init(void) -{ - static GLfloat lightpos[] = {.5, .75, 1.5, 1}; - - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - - glEnable(GL_CULL_FACE); - - glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); - - cone = gluNewQuadric(); - qsphere = gluNewQuadric(); -} - -void make_viewpoint(void) -{ - if (headsUp) { - float width = (1 + 2*(draw_passes/nMirrors)) * 1.25; - float height = (width / tan((30./360.) * (2.*M_PI))) + 1; - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(60, 1, height - 3, height + 3); - gluLookAt(0, height, 0, - 0, 0, 0, - 0, 0, 1); - } else { - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(60, 1, .01, 4 + 2*(draw_passes / nMirrors)); - gluLookAt(-2, 0, .75, - 0, 0, 0, - 0, 1, 0); - } - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -void reshape(GLsizei w, GLsizei h) -{ - glViewport(0, 0, w, h); - make_viewpoint(); -} - -void draw_room(void) -{ - /* material for the walls, floor, ceiling */ - static GLfloat wall_mat[] = {1.f, 1.f, 1.f, 1.f}; - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, wall_mat); - - glBegin(GL_QUADS); - - /* floor */ - glNormal3f(0, 1, 0); - glVertex3f(-1, -1, 1); - glVertex3f(1, -1, 1); - glVertex3f(1, -1, -1); - glVertex3f(-1, -1, -1); - - /* ceiling */ - glNormal3f(0, -1, 0); - glVertex3f(-1, 1, -1); - glVertex3f(1, 1, -1); - glVertex3f(1, 1, 1); - glVertex3f(-1, 1, 1); - - /* left wall */ - glNormal3f(1, 0, 0); - glVertex3f(-1, -1, -1); - glVertex3f(-1, 1, -1); - glVertex3f(-1, 1, 1); - glVertex3f(-1, -1, 1); - - /* right wall */ - glNormal3f(-1, 0, 0); - glVertex3f(1, -1, 1); - glVertex3f(1, 1, 1); - glVertex3f(1, 1, -1); - glVertex3f(1, -1, -1); - - /* far wall */ - glNormal3f(0, 0, 1); - glVertex3f(-1, -1, -1); - glVertex3f(1, -1, -1); - glVertex3f(1, 1, -1); - glVertex3f(-1, 1, -1); - - /* back wall */ - glNormal3f(0, 0, -1); - glVertex3f(-1, 1, 1); - glVertex3f(1, 1, 1); - glVertex3f(1, -1, 1); - glVertex3f(-1, -1, 1); - glEnd(); -} - -void draw_cone(void) -{ - static GLfloat cone_mat[] = {0.f, .5f, 1.f, 1.f}; - - glPushMatrix(); - glTranslatef(0, -1, 0); - glRotatef(-90, 1, 0, 0); - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, cone_mat); - - gluCylinder(cone, .3, 0, 1.25, 20, 1); - - glPopMatrix(); -} - -void draw_sphere(GLdouble secs) -{ - static GLfloat sphere_mat[] = {1.f, .5f, 0.f, 1.f}; - GLfloat angle; - - /* one revolution every 10 seconds... */ - secs = secs - 10.*trunc(secs / 10.); - angle = (secs/10.) * (360.); - - glPushMatrix(); - glTranslatef(0, -.3, 0); - glRotatef(angle, 0, 1, 0); - glTranslatef(.6, 0, 0); - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, sphere_mat); - gluSphere(qsphere, .3, 20, 20); - - glPopMatrix(); -} - -GLdouble get_secs(void) -{ - return glutGet(GLUT_ELAPSED_TIME) / 1000.0; -} - -void draw_mirror(Mirror *m) -{ - glBegin(GL_QUADS); - glVertex3fv(m->verts[0]); - glVertex3fv(m->verts[1]); - glVertex3fv(m->verts[2]); - glVertex3fv(m->verts[3]); - glEnd(); -} - -/* A note on matrix management: it would be easier to use push and - * pop to save and restore the matrices, but the projection matrix stack - * is very shallow, so we just undo what we did. In the extreme this - * could lead to mathematic error. */ - -GLenum reflect_through_mirror(Mirror *m, GLenum cullFace) -{ - GLenum newCullFace = ((cullFace == GL_FRONT) ? GL_BACK : GL_FRONT); - - glMatrixMode(GL_PROJECTION); - glScalef(m->scale[0], m->scale[1], m->scale[2]); - glTranslatef(m->trans[0], m->trans[1], m->trans[2]); - glMatrixMode(GL_MODELVIEW); - - /* must flip the cull face since reflection reverses the orientation - * of the polygons */ - glCullFace(newCullFace); - - return newCullFace; -} - -void undo_reflect_through_mirror(Mirror *m, GLenum cullFace) -{ - glMatrixMode(GL_PROJECTION); - glTranslatef(-m->trans[0], -m->trans[1], -m->trans[2]); - glScalef(1./m->scale[0], 1./m->scale[1], 1./m->scale[2]); - glMatrixMode(GL_MODELVIEW); - - glCullFace(cullFace); -} - -void draw_scene(GLdouble secs, int passes, GLenum cullFace, - GLuint stencilVal, GLuint mirror) -{ - GLenum newCullFace; - int passesPerMirror, passesPerMirrorRem; - unsigned int curMirror, drawMirrors; - int i; - - /* one pass to draw the real scene */ - passes--; - - /* only draw in my designated locations */ - glStencilFunc(GL_EQUAL, stencilVal, 0xffffffff); - - /* draw things which may obscure the mirrors first */ - draw_sphere(secs); - draw_cone(); - - /* now draw the appropriate number of mirror reflections. for - * best results, we perform a depth-first traversal by allocating - * a number of passes for each of the mirrors. */ - if (mirror != 0xffffffff) { - passesPerMirror = passes / (nMirrors - 1); - passesPerMirrorRem = passes % (nMirrors - 1); - if (passes > nMirrors - 1) drawMirrors = nMirrors - 1; - else drawMirrors = passes; - } else { - /* mirror == -1 means that this is the initial scene (there was no - * mirror) */ - passesPerMirror = passes / nMirrors; - passesPerMirrorRem = passes % nMirrors; - if (passes > nMirrors) drawMirrors = nMirrors; - else drawMirrors = passes; - } - for (i = 0; drawMirrors > 0; i++) { - curMirror = i % nMirrors; - if (curMirror == mirror) continue; - drawMirrors--; - - /* draw mirror into stencil buffer but not color or depth buffers */ - glColorMask(0, 0, 0, 0); - glDepthMask(0); - glStencilOp(GL_KEEP, GL_KEEP, GL_INCR); - draw_mirror(&mirrors[curMirror]); - glColorMask(1, 1, 1, 1); - glDepthMask(1); - glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); - - /* draw reflected scene */ - newCullFace = reflect_through_mirror(&mirrors[curMirror], cullFace); - if (passesPerMirrorRem) { - draw_scene(secs, passesPerMirror + 1, newCullFace, stencilVal + 1, - curMirror); - passesPerMirrorRem--; - } else { - draw_scene(secs, passesPerMirror, newCullFace, stencilVal + 1, - curMirror); - } - undo_reflect_through_mirror(&mirrors[curMirror], cullFace); - - /* back to our stencil value */ - glStencilFunc(GL_EQUAL, stencilVal, 0xffffffff); - } - - draw_room(); -} - -void draw(void) -{ - GLenum err; - GLfloat secs = get_secs(); - - glDisable(GL_STENCIL_TEST); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); - - if (!headsUp) glEnable(GL_STENCIL_TEST); - draw_scene(secs, draw_passes, GL_BACK, 0, (unsigned)-1); - glDisable(GL_STENCIL_TEST); - - if (headsUp) { - /* draw a red floor on the original scene */ - glDisable(GL_LIGHTING); - glBegin(GL_QUADS); - glColor3f(1, 0, 0); - glVertex3f(-1, -.95, 1); - glVertex3f(1, -.95, 1); - glVertex3f(1, -.95, -1); - glVertex3f(-1, -.95, -1); - glEnd(); - glEnable(GL_LIGHTING); - } - - err = glGetError(); - if (err != GL_NO_ERROR) printf("Error: %s\n", gluErrorString(err)); - - glutSwapBuffers(); -} - -/* ARGSUSED1 */ -void key(unsigned char key, int x, int y) -{ - switch(key) { - case '.': case '>': case '+': case '=': - draw_passes++; - printf("Passes = %d\n", draw_passes); - make_viewpoint(); - break; - case ',': case '<': case '-': case '_': - draw_passes--; - if (draw_passes < 1) draw_passes = 1; - printf("Passes = %d\n", draw_passes); - make_viewpoint(); - break; - case 'h': case 'H': - /* heads up mode */ - headsUp = (headsUp == 0); - make_viewpoint(); - break; - case 27: - exit(0); - } -} - -#define MIN_COLOR_BITS 4 -#define MIN_DEPTH_BITS 8 - -main(int argc, char *argv[]) -{ - glutInit(&argc, argv); - glutInitWindowSize(256, 256); - glutInitWindowPosition(0, 0); - if (argc > 1) { - glutInitDisplayString("samples stencil>=3 rgb depth"); - } else { - glutInitDisplayString("samples stencil>=3 rgb double depth"); - } - glutCreateWindow(argv[0]); - glutDisplayFunc(draw); - glutIdleFunc(draw); - glutKeyboardFunc(key); - glutReshapeFunc(reshape); - init(); - - glutMainLoop(); - return 0; -} - diff --git a/lib/glut-3.7.6/progs/advanced97/multimirror.dsp b/lib/glut-3.7.6/progs/advanced97/multimirror.dsp deleted file mode 100644 index b1b1d23e8..000000000 --- a/lib/glut-3.7.6/progs/advanced97/multimirror.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="multimirror" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=multimirror - 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 "multimirror.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 "multimirror.mak" CFG="multimirror - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "multimirror - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "multimirror - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "multimirror - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "multimirror - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "multimirror - Win32 Release" -# Name "multimirror - Win32 Debug" -# Begin Source File - -SOURCE=.\multimirror.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/multiscreendoor.c b/lib/glut-3.7.6/progs/advanced97/multiscreendoor.c deleted file mode 100644 index 3340042d2..000000000 --- a/lib/glut-3.7.6/progs/advanced97/multiscreendoor.c +++ /dev/null @@ -1,195 +0,0 @@ -#include -#include -#include -#include -#include - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -#ifdef _WIN32 -#define trunc(x) ((double)((int)(x))) -#define random() ((long)rand() + (rand() << 15) + (rand() << 30)) -#endif - -GLUquadricObj *cone, *base, *qsphere; - -GLuint conePattern[32], spherePattern[32]; - -void create_stipple_pattern(GLuint *pat, GLfloat opacity) -{ - int x, y; - long threshold = (float)0x7fffffff * (1. - opacity); - - for (y = 0; y < 32; y++) { - pat[y] = 0; - for (x = 0; x < 32; x++) { - if (random() > threshold) pat[y] |= (1 << x); - } - } -} - -void init(void) -{ - static GLfloat lightpos[] = {.5, .75, 1.5, 1}; - - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - - cone = gluNewQuadric(); - base = gluNewQuadric(); - qsphere = gluNewQuadric(); - gluQuadricOrientation(base, GLU_INSIDE); - - create_stipple_pattern(spherePattern, .5); - create_stipple_pattern(conePattern, .5); -} - -void reshape(GLsizei w, GLsizei h) -{ - glViewport(0, 0, w, h); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(60, 1, .01, 10); - gluLookAt(0, 0, 2.577, 0, 0, -5, 0, 1, 0); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -void draw_room(void) -{ - /* material for the walls, floor, ceiling */ - static GLfloat wall_mat[] = {1.f, 1.f, 1.f, 1.f}; - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, wall_mat); - - glBegin(GL_QUADS); - - /* floor */ - glNormal3f(0, 1, 0); - glVertex3f(-1, -1, 1); - glVertex3f(1, -1, 1); - glVertex3f(1, -1, -1); - glVertex3f(-1, -1, -1); - - /* ceiling */ - glNormal3f(0, -1, 0); - glVertex3f(-1, 1, -1); - glVertex3f(1, 1, -1); - glVertex3f(1, 1, 1); - glVertex3f(-1, 1, 1); - - /* left wall */ - glNormal3f(1, 0, 0); - glVertex3f(-1, -1, -1); - glVertex3f(-1, -1, 1); - glVertex3f(-1, 1, 1); - glVertex3f(-1, 1, -1); - - /* right wall */ - glNormal3f(-1, 0, 0); - glVertex3f(1, 1, -1); - glVertex3f(1, 1, 1); - glVertex3f(1, -1, 1); - glVertex3f(1, -1, -1); - - /* far wall */ - glNormal3f(0, 0, 1); - glVertex3f(-1, -1, -1); - glVertex3f(1, -1, -1); - glVertex3f(1, 1, -1); - glVertex3f(-1, 1, -1); - - glEnd(); -} - -void draw_cone(void) -{ - static GLfloat cone_mat[] = {0.f, .5f, 1.f, 1.f}; - - glPushMatrix(); - glTranslatef(0, -1, 0); - glRotatef(-90, 1, 0, 0); - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, cone_mat); - gluCylinder(cone, .3, 0, 1.25, 20, 1); - gluDisk(base, 0., .3, 20, 1); - - glPopMatrix(); -} - -void draw_sphere(GLdouble angle) -{ - static GLfloat sphere_mat[] = {1.f, .5f, 0.f, 1.f}; - - glPushMatrix(); - glTranslatef(0, -.3, 0); - glRotatef(angle, 0, 1, 0); - glTranslatef(0, 0, .6); - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, sphere_mat); - gluSphere(qsphere, .3, 20, 20); - - glPopMatrix(); -} - -GLdouble get_secs(void) -{ - return glutGet(GLUT_ELAPSED_TIME) / 1000.0; -} - -void draw(void) -{ - GLenum err; - GLdouble secs; - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - draw_room(); - - /* draw the transparent objects... */ - glEnable(GL_POLYGON_STIPPLE); - glPolygonStipple((GLubyte *)conePattern); - draw_cone(); - - glPolygonStipple((GLubyte *)spherePattern); - secs = get_secs(); - draw_sphere(secs * 360. / 10.); - glDisable(GL_POLYGON_STIPPLE); - - err = glGetError(); - if (err != GL_NO_ERROR) printf("Error: %s\n", gluErrorString(err)); - - glutSwapBuffers(); -} - -/* ARGSUSED1 */ -void key(unsigned char key, int x, int y) -{ - if (key == 27) exit(0); -} - -main(int argc, char *argv[]) -{ - glutInit(&argc, argv); - glutInitWindowSize(256, 256); - glutInitWindowPosition(0, 0); - glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); - glutCreateWindow(argv[0]); - glutDisplayFunc(draw); - glutIdleFunc(draw); - glutKeyboardFunc(key); - glutReshapeFunc(reshape); - init(); - - glutMainLoop(); - return 0; -} - diff --git a/lib/glut-3.7.6/progs/advanced97/multiscreendoor.dsp b/lib/glut-3.7.6/progs/advanced97/multiscreendoor.dsp deleted file mode 100644 index 729dd123e..000000000 --- a/lib/glut-3.7.6/progs/advanced97/multiscreendoor.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="multiscreendoor" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=multiscreendoor - 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 "multiscreendoor.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 "multiscreendoor.mak" CFG="multiscreendoor - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "multiscreendoor - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "multiscreendoor - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "multiscreendoor - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "multiscreendoor - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "multiscreendoor - Win32 Release" -# Name "multiscreendoor - Win32 Debug" -# Begin Source File - -SOURCE=.\multiscreendoor.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/multispheremap.c b/lib/glut-3.7.6/progs/advanced97/multispheremap.c deleted file mode 100644 index b2ab0cc64..000000000 --- a/lib/glut-3.7.6/progs/advanced97/multispheremap.c +++ /dev/null @@ -1,737 +0,0 @@ -#include -#include -#include -#include -#include -#include "texture.h" - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -#ifndef __sgi -#define trunc(x) ((double)((int)(x))) -#endif - -GLUquadricObj *cone, *base, *qsphere; - -static char defaultFile[] = "../data/mandrill.rgb"; -GLuint floorList; - -GLboolean animate = 1, useSphereMaps = 1; - -GLsizei w = 256, h = 256; - -#define LEFT 3 -#define RIGHT 1 -#define FRONT 2 -#define BACK 0 -#define TOP 4 -#define BOTTOM 5 - -GLuint *faceMap[6]; -GLsizei faceW = 128; - -GLuint *sphereMap[2]; -GLuint sphereW = 256; - -GLfloat angle1[6] = {90, 180, 270, 0, 90, -90}; -GLfloat axis1[6][3] = {{0,1,0}, {0,1,0}, {0,1,0}, {0,1,0}, {1,0,0}, {1,0,0}}; -GLfloat angle2[6] = {0, 0, 0, 0, 180, 180}; -GLfloat axis2[6][3] = {{0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,1,0}, {0,1,0}}; - -#define TORUS_BIT 1 -#define SPHERE_BIT 2 - -void reset_textures(void) -{ - unsigned int i; - - /* make sphereMap[0] start out all red... */ - for (i = 0; i < sphereW*sphereW; i++) sphereMap[0][i] = 0xff0000ff; - /* make sphereMap[1] start out all green... */ - for (i = 0; i < sphereW*sphereW; i++) sphereMap[1][i] = 0x00ff00ff; -} - -void realloc_textures(void) -{ - static int first = 1; - int i; - - if (!first) { - for (i = 0; i < 6; i++) free(faceMap[i]); - } else { - first = 0; - } - - for (i = 0; i < 6; i++) { - faceMap[i] = (GLuint *)malloc(faceW*faceW*sizeof(GLuint)); - if (!faceMap[i]) { - fprintf(stderr, "malloc of %d bytes failed.\n", - faceW*faceW*sizeof(GLuint)); - } - } - - sphereMap[0] = (GLuint *)malloc(sphereW * sphereW * sizeof(GLuint)); - sphereMap[1] = (GLuint *)malloc(sphereW * sphereW * sizeof(GLuint)); - reset_textures(); -} - -void eliminate_alpha(GLsizei w, GLsizei h, GLuint *map) -{ - int x, y; - - /* top & bottom rows */ - for (x = 0; x < w; x++) { - map[x] &= 0xffffff00; - map[x + (h-1)*w] &= 0xffffff00; - } - - for (y = 0; y < h; y++) { - map[y*w] &= 0xffffff00; - map[y*w + (w-1)] &= 0xffffff00; - } -} - -void init(const char *fname) -{ - GLuint *img; - GLsizei w, h; - int comps; - - glEnable(GL_DEPTH_TEST); - glEnable(GL_CULL_FACE); - - cone = gluNewQuadric(); - base = gluNewQuadric(); - qsphere = gluNewQuadric(); - - img = read_texture(fname, &w, &h, &comps); - if (!img) { - fprintf(stderr, "Could not open %s\n", fname); - exit(1); - } - floorList = glGenLists(1); - glNewList(floorList, GL_COMPILE); - glTexImage2D(GL_TEXTURE_2D, 0, 4, w, h, 0, - GL_RGBA, GL_UNSIGNED_BYTE, img); - glEndList(); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - free(img); - - glClearColor(.25, .25, .5, 1.0); - - realloc_textures(); -} - -void reshape(GLsizei winW, GLsizei winH) -{ - w = winW/2; - - glViewport(0, 0, w, h); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(60, 1, .01, 10); - gluLookAt(-1, 0, 2.577, 0, 0, -5, 0, 1, 0); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -void draw_room(void) -{ - /* material for the walls, floor, ceiling */ - static GLfloat wallMat[] = {1.f, 1.f, 1.f, 1.f}; - - glPushMatrix(); - glScalef(3, 2, 3); - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, wallMat); - - /* floor, textured */ - glColor3f(1, 1, 1); - glEnable(GL_TEXTURE_2D); - glCallList(floorList); - glBegin(GL_QUADS); - glNormal3f(0, 1, 0); - glTexCoord2f(0, 0); - glVertex3f(-1, -1, 1); - glTexCoord2f(1, 0); - glVertex3f(1, -1, 1); - glTexCoord2f(1, 1); - glVertex3f(1, -1, -1); - glTexCoord2f(0, 1); - glVertex3f(-1, -1, -1); - glEnd(); - glDisable(GL_TEXTURE_2D); - - /* ceiling */ - glColor3f(wallMat[0] * 1., wallMat[1] * 1., wallMat[2] * 1.); - glBegin(GL_QUADS); - glNormal3f(0, -1, 0); - glVertex3f(-1, 1, -1); - glVertex3f(1, 1, -1); - glVertex3f(1, 1, 1); - glVertex3f(-1, 1, 1); - - /* left wall */ - glColor3f(wallMat[0] * .75, wallMat[1] * .75, wallMat[2] * .75); - glNormal3f(1, 0, 0); - glVertex3f(-1, -1, -1); - glVertex3f(-1, 1, -1); - glVertex3f(-1, 1, 1); - glVertex3f(-1, -1, 1); - - /* right wall */ - glColor3f(wallMat[0] * .25, wallMat[1] * .25, wallMat[2] * .25); - glNormal3f(-1, 0, 0); - glVertex3f(1, -1, 1); - glVertex3f(1, 1, 1); - glVertex3f(1, 1, -1); - glVertex3f(1, -1, -1); - - /* far wall */ - glColor3f(wallMat[0] * .5, wallMat[1] * .5, wallMat[2] * .5); - glNormal3f(0, 0, 1); - glVertex3f(-1, -1, -1); - glVertex3f(1, -1, -1); - glVertex3f(1, 1, -1); - glVertex3f(-1, 1, -1); - - /* back wall */ - glColor3f(wallMat[0] * .5, wallMat[1] * .5, wallMat[2] * .5); - glNormal3f(0, 0, -1); - glVertex3f(-1, 1, 1); - glVertex3f(1, 1, 1); - glVertex3f(1, -1, 1); - glVertex3f(-1, -1, 1); - - glEnd(); - - glPopMatrix(); -} - -void draw_cone(void) -{ - static GLfloat cone_mat[] = {0.f, .5f, 1.f, 1.f}; - - glPushMatrix(); - glTranslatef(0, -1, 0); - glRotatef(-90, 1, 0, 0); - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, cone_mat); - - /* base is coplanar with floor, so turn off depth testing */ - glDisable(GL_DEPTH_TEST); - gluDisk(base, 0., .3, 20, 1); - glEnable(GL_DEPTH_TEST); - - gluCylinder(cone, .3, 0, 1.25, 20, 1); - - glPopMatrix(); -} - -void draw_cube(void) -{ - glBegin(GL_QUADS); - - glNormal3f(0, -1, 0); - glVertex3f(-.25, -.25, -.25); - glVertex3f(.25, -.25, -.25); - glVertex3f(.25, -.25, .25); - glVertex3f(-.25, -.25, .25); - - glNormal3f(0, 1, 0); - glVertex3f(-.25, .25, .25); - glVertex3f(.25, .25, .25); - glVertex3f(.25, .25, -.25); - glVertex3f(-.25, .25, -.25); - - glNormal3f(1, 0, 0); - glVertex3f(.25, -.25, -.25); - glVertex3f(.25, .25, -.25); - glVertex3f(.25, .25, .25); - glVertex3f(.25, -.25, .25); - - glNormal3f(-1, 0, 0); - glVertex3f(-.25, -.25, .25); - glVertex3f(-.25, .25, .25); - glVertex3f(-.25, .25, -.25); - glVertex3f(-.25, -.25, -.25); - - glNormal3f(0, 0, -1); - glVertex3f(-.25, .25, -.25); - glVertex3f(.25, .25, -.25); - glVertex3f(.25, -.25, -.25); - glVertex3f(-.25, -.25, -.25); - - glNormal3f(0, 0, 1); - glVertex3f(-.25, -.25, .25); - glVertex3f(.25, -.25, .25); - glVertex3f(.25, .25, .25); - glVertex3f(-.25, .25, .25); - - glEnd(); -} - -void draw_sphere(GLdouble angle) -{ - static GLfloat sphere_mat[] = {.2f, .7f, .2f, 1.f}; - - glTexImage2D(GL_TEXTURE_2D, 0, 4, sphereW, sphereW, 0, - GL_RGBA, GL_UNSIGNED_BYTE, sphereMap[1]); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - - if (useSphereMaps) glEnable(GL_TEXTURE_2D); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); - glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); - glEnable(GL_TEXTURE_GEN_S); - glEnable(GL_TEXTURE_GEN_T); - - glPushMatrix(); - glRotatef(45, 0, 0, 1); - glRotatef(angle, 0, 1, 0); - glTranslatef(1, 0, 0); - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, sphere_mat); - glColor3fv(sphere_mat); -#if 1 - { - GLUquadricObj *sphere = gluNewQuadric(); - gluSphere(sphere, .6, 64, 64); - gluDeleteQuadric(sphere); - } -#else - draw_cube(); -#endif - - glPopMatrix(); - - glDisable(GL_TEXTURE_GEN_S); - glDisable(GL_TEXTURE_GEN_T); - glDisable(GL_TEXTURE_2D); -} - -void draw_torus(GLdouble angle) -{ - angle = 0; - - glTexImage2D(GL_TEXTURE_2D, 0, 4, sphereW, sphereW, 0, - GL_RGBA, GL_UNSIGNED_BYTE, sphereMap[0]); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - - if (useSphereMaps) glEnable(GL_TEXTURE_2D); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); - glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); - glEnable(GL_TEXTURE_GEN_S); - glEnable(GL_TEXTURE_GEN_T); - - glColor3f(1, .5, .5); - - glPushMatrix(); - glRotatef(angle, 1, 0, 0); - glRotatef(0, 0, 1, 0); - -#if 0 - glutSolidTorus(.2, .25, 32, 32); -#else - { - GLUquadricObj *sphere = gluNewQuadric(); - gluSphere(sphere, .2, 64, 64); - } -#endif - - glPopMatrix(); - - glDisable(GL_TEXTURE_GEN_S); - glDisable(GL_TEXTURE_GEN_T); - glDisable(GL_TEXTURE_2D); -} - -void draw_scene(GLdouble degrees, GLint bits) -{ - glEnable(GL_CULL_FACE); - draw_room(); - - if (bits & TORUS_BIT) draw_torus(degrees); - if (bits & SPHERE_BIT) draw_sphere(degrees); -} - -GLdouble get_secs(void) -{ - return glutGet(GLUT_ELAPSED_TIME) / 1000.0; -} - -void draw_special_sphere(int tess) -{ - float r = 1.0, r1, r2, z1, z2; - float theta, phi; - int nlon = tess, nlat = tess; - int i, j; - - glBegin(GL_TRIANGLE_FAN); - theta = M_PI*1.0/nlat; - r2 = r*sin(theta); z2 = r*cos(theta); - glNormal3f(0.0, 0.0, 1.0); - glVertex4f(0.0, 0.0, r*r, r); - for (j = 0, phi = 0.0; j <= nlon; j++, phi = 2*M_PI*j/nlon) { - glNormal3f(r2*cos(phi), r2*sin(phi), z2); - glVertex4f(r2*cos(phi)*z2, r2*sin(phi)*z2, z2*z2, z2); /* top */ - } - glEnd(); - - for (i = 2; i < nlat; i++) { - theta = M_PI*i/nlat; - r1 = r*sin(M_PI*(i-1)/nlat); z1 = r*cos(M_PI*(i-1)/nlat); - r2 = r*sin(theta); z2 = r*cos(theta); - - if (fabs(z1) < 0.01 || fabs(z2) < 0.01) - break; - - glBegin(GL_QUAD_STRIP); - for (j = 0, phi = 0; j <= nlat; j++, phi = 2*M_PI*j/nlon) { - glNormal3f(r1*cos(phi), r1*sin(phi), z1); - glVertex4f(r1*cos(phi)*z1, r1*sin(phi)*z1, z1*z1, z1); - glNormal3f(r2*cos(phi), r2*sin(phi), z2); - glVertex4f(r2*cos(phi)*z2, r2*sin(phi)*z2, z2*z2, z2); - } - glEnd(); - } -} - -void render_spheremap(void) -{ - GLfloat p[4]; - int i; - - glColor4f(1, 1, 1, 1); - -#if 1 - glEnable(GL_TEXTURE_2D); -#endif - - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); - - glTexGenf(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - - p[0] = 2.0; p[1] = p[2] = p[3] = 0.0; /* 2zx */ - glTexGenfv(GL_S, GL_OBJECT_PLANE, p); - - glTexGenf(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - p[0] = 0.0; p[1] = 2.0; p[2] = p[3] = 0.0; /* 2zy */ - glTexGenfv(GL_T, GL_OBJECT_PLANE, p); - - glTexGenf(GL_R, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - p[0] = p[1] = 0.0; p[2] = 0.0; p[3] = 2.0; /* 2z */ - glTexGenfv(GL_R, GL_OBJECT_PLANE, p); - - glEnable(GL_TEXTURE_GEN_S); - glEnable(GL_TEXTURE_GEN_T); - glEnable(GL_TEXTURE_GEN_R); - - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glMatrixMode(GL_TEXTURE); - glPushMatrix(); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho(-.98, .98, -.98, .98, 1.0, 100); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - gluLookAt(0, 0, 6, - 0, 0, 0, - 0, 1, 0); - - glEnable(GL_DEPTH_TEST); - glEnable(GL_CULL_FACE); - - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - -#if 1 - glClearColor(0.25, 0.25, 0.5, 1.0); - glClearDepth(1.0); - glClear(/* GL_COLOR_BUFFER_BIT | */GL_DEPTH_BUFFER_BIT); -#endif - - for (i = 0; i < 6; i++) { - glTexImage2D(GL_TEXTURE_2D, 0, 4, faceW, faceW, 0, - GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid *)faceMap[i]); - - glMatrixMode(GL_TEXTURE); - glLoadIdentity(); - glScalef(0.5, 0.5, 1.0); - glTranslatef(1.0, 1.0, 0.0); - glFrustum(-1.01, 1.01, -1.01, 1.01, 1.0, 100.0); - if (angle2[i]) { - glRotatef(angle2[i], axis2[i][0], axis2[i][1], axis2[i][2]); - } - glRotatef(angle1[i], axis1[i][0], axis1[i][1], axis1[i][2]); - - /* XXX atul does another angle thing here... */ - /* XXX atul does a third angle thing here... */ - - glTranslatef(0.0, 0.0, -1.00); - - glMatrixMode(GL_MODELVIEW); - glClear(GL_DEPTH_BUFFER_BIT); - draw_special_sphere(20); - } - - glDisable(GL_BLEND); - glDisable(GL_CULL_FACE); - - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); - glMatrixMode(GL_TEXTURE); - glPopMatrix(); - - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - - glDisable(GL_TEXTURE_GEN_S); - glDisable(GL_TEXTURE_GEN_T); - glDisable(GL_TEXTURE_GEN_R); - - glDisable(GL_TEXTURE_2D); -} - -void make_projection(int face, GLfloat xpos, GLfloat ypos, GLfloat zpos) -{ - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(90, 1, .01, 10); - if (angle2[face]) { - glRotatef(angle2[face], axis2[face][0], axis2[face][1], axis2[face][2]); - } - glRotatef(angle1[face], axis1[face][0], axis1[face][1], axis1[face][2]); - gluLookAt(xpos, ypos, zpos, - ypos, ypos, zpos - 1, - 0, 1, 0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -void draw(void) -{ - static int frame = 0; - GLenum err; - GLdouble secs; - static double degrees = 0; - GLfloat sphereX, sphereY, sphereZ; - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - /* one revolution every 10 seconds... */ - if (animate) { - secs = get_secs(); - secs = secs - 10.*trunc(secs / 10.); - degrees = (secs/10.) * (360.); - } - - if (frame == 0) { - /* switch the viewport and draw the faces of the cube from the - * point of view of the square... */ - - glViewport(w + 0*faceW, 0, faceW, faceW); - make_projection(LEFT, 0, 0, 0); - draw_scene(degrees, -1 & ~TORUS_BIT); - glReadPixels(w + 0*faceW, 0, faceW, faceW, - GL_RGBA, GL_UNSIGNED_BYTE, faceMap[LEFT]); - eliminate_alpha(faceW, faceW, faceMap[LEFT]); - - glViewport(w + 1*faceW, 0, faceW, faceW); - make_projection(RIGHT, 0, 0, 0); - draw_scene(degrees, -1 & ~TORUS_BIT); - glReadPixels(w + 1*faceW, 0, faceW, faceW, - GL_RGBA, GL_UNSIGNED_BYTE, faceMap[RIGHT]); - eliminate_alpha(faceW, faceW, faceMap[RIGHT]); - - glViewport(w + 2*faceW, 0, faceW, faceW); - make_projection(BOTTOM, 0, 0, 0); - draw_scene(degrees, -1 & ~TORUS_BIT); - glReadPixels(w + 2*faceW, 0, faceW, faceW, - GL_RGBA, GL_UNSIGNED_BYTE, faceMap[BOTTOM]); - eliminate_alpha(faceW, faceW, faceMap[BOTTOM]); - - glViewport(w + 0*faceW, faceW, faceW, faceW); - make_projection(TOP, 0, 0, 0); - draw_scene(degrees, -1 & ~TORUS_BIT); - glReadPixels(w + 0*faceW, faceW, faceW, faceW, - GL_RGBA, GL_UNSIGNED_BYTE, faceMap[TOP]); - eliminate_alpha(faceW, faceW, faceMap[TOP]); - - glViewport(w + 1*faceW, faceW, faceW, faceW); - make_projection(FRONT, 0, 0, 0); - draw_scene(degrees, -1 & ~TORUS_BIT); - glReadPixels(w + 1*faceW, faceW, faceW, faceW, - GL_RGBA, GL_UNSIGNED_BYTE, faceMap[FRONT]); - eliminate_alpha(faceW, faceW, faceMap[FRONT]); - - glViewport(w + 2*faceW, faceW, faceW, faceW); - make_projection(BACK, 0, 0, 0); - draw_scene(degrees, -1 & ~TORUS_BIT); - glReadPixels(w + 2*faceW, faceW, faceW, faceW, - GL_RGBA, GL_UNSIGNED_BYTE, faceMap[BACK]); - eliminate_alpha(faceW, faceW, faceMap[BACK]); - - /* create the sphere map for the cube... */ - glViewport(w, 2*faceW, sphereW, sphereW); - render_spheremap(); - glReadPixels(w, 2*faceW, sphereW, sphereW, GL_RGBA, GL_UNSIGNED_BYTE, - sphereMap[0]); - } else { - sphereX = - sphereY = cos((degrees/360.) * 2.*M_PI); - sphereZ = -sin((degrees/360.) * 2.*M_PI); - - glViewport(w + 0*faceW, 0, faceW, faceW); - make_projection(LEFT, sphereX, sphereY, sphereZ); - draw_scene(degrees, -1 & ~SPHERE_BIT); - glReadPixels(w + 0*faceW, 0, faceW, faceW, - GL_RGBA, GL_UNSIGNED_BYTE, faceMap[LEFT]); - eliminate_alpha(faceW, faceW, faceMap[LEFT]); - - glViewport(w + 1*faceW, 0, faceW, faceW); - make_projection(RIGHT, sphereX, sphereY, sphereZ); - draw_scene(degrees, -1 & ~SPHERE_BIT); - glReadPixels(w + 1*faceW, 0, faceW, faceW, - GL_RGBA, GL_UNSIGNED_BYTE, faceMap[RIGHT]); - eliminate_alpha(faceW, faceW, faceMap[RIGHT]); - - glViewport(w + 2*faceW, 0, faceW, faceW); - make_projection(BOTTOM, sphereX, sphereY, sphereZ); - draw_scene(degrees, -1 & ~SPHERE_BIT); - glReadPixels(w + 2*faceW, 0, faceW, faceW, - GL_RGBA, GL_UNSIGNED_BYTE, faceMap[BOTTOM]); - eliminate_alpha(faceW, faceW, faceMap[BOTTOM]); - - glViewport(w + 0*faceW, faceW, faceW, faceW); - make_projection(TOP, sphereX, sphereY, sphereZ); - draw_scene(degrees, -1 & ~SPHERE_BIT); - glReadPixels(w + 0*faceW, faceW, faceW, faceW, - GL_RGBA, GL_UNSIGNED_BYTE, faceMap[TOP]); - eliminate_alpha(faceW, faceW, faceMap[TOP]); - - glViewport(w + 1*faceW, faceW, faceW, faceW); - make_projection(FRONT, sphereX, sphereY, sphereZ); - draw_scene(degrees, -1 & ~SPHERE_BIT); - glReadPixels(w + 1*faceW, faceW, faceW, faceW, - GL_RGBA, GL_UNSIGNED_BYTE, faceMap[FRONT]); - eliminate_alpha(faceW, faceW, faceMap[FRONT]); - - glViewport(w + 2*faceW, faceW, faceW, faceW); - make_projection(BACK, sphereX, sphereY, sphereZ); - draw_scene(degrees, -1 & ~SPHERE_BIT); - glReadPixels(w + 2*faceW, faceW, faceW, faceW, - GL_RGBA, GL_UNSIGNED_BYTE, faceMap[BACK]); - eliminate_alpha(faceW, faceW, faceMap[BACK]); - - /* create the sphere map for the cube... */ - glViewport(w + sphereW, 2*faceW, sphereW, sphereW); - render_spheremap(); - glReadPixels(w+sphereW, 2*faceW, sphereW, sphereW, - GL_RGBA, GL_UNSIGNED_BYTE, sphereMap[1]); - } - frame = (frame == 0); - - /* draw both spheremaps */ - glViewport(w, 2*faceW, 2*sphereW, sphereW); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho(0, 2*sphereW, 0, sphereW, 0, 1); - glRasterPos2i(0, 0); - glDrawPixels(sphereW, sphereW, GL_RGBA, GL_UNSIGNED_BYTE, sphereMap[0]); - glRasterPos2i(sphereW, 0); - glDrawPixels(sphereW, sphereW, GL_RGBA, GL_UNSIGNED_BYTE, sphereMap[1]); - - - /* draw the scene for the viewer's visual gratification... */ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(60, 1, .01, 10); - gluLookAt(0, 0, 0, - 0, 0, -1, - 0, 1, 0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(0, 0, -2.577); - draw_scene(degrees, -1); - glLoadIdentity(); - - err = glGetError(); - if (err != GL_NO_ERROR) printf("Error: %s\n", gluErrorString(err)); - - glutSwapBuffers(); -} - -/* ARGSUSED1 */ -void key(unsigned char key, int x, int y) -{ - static int idle = 1; - switch(key) { - case 'a': case 'A': - animate = (animate == 0); - printf("%sanimating\n", animate ? "" : "not "); - break; - case 'd': case 'D': - printf("drawing\n"); - draw(); - break; - case 'r': case 'R': - printf("resetting sphere maps...\n"); - reset_textures(); - draw(); - break; - case 't': case 'T': - useSphereMaps = (useSphereMaps == 0); - printf("%susing sphere maps\n", useSphereMaps ? "" : "not "); - break; - case 27: - exit(0); - default: - if (idle) { - glutIdleFunc(0); - } else { - glutIdleFunc(draw); - } - idle = (idle == 0); - printf("%sdrawing when idle\n", idle ? "" : "not "); - break; - } -} - -main(int argc, char *argv[]) -{ - glutInitWindowSize(w*2, h); - glutInitWindowPosition(0, 0); - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE); - glutCreateWindow(argv[0]); - glutDisplayFunc(draw); - glutIdleFunc(draw); - glutKeyboardFunc(key); - glutReshapeFunc(reshape); - init(defaultFile); - - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/advanced97/multispheremap.dsp b/lib/glut-3.7.6/progs/advanced97/multispheremap.dsp deleted file mode 100644 index e12a25484..000000000 --- a/lib/glut-3.7.6/progs/advanced97/multispheremap.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="multispheremap" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=multispheremap - 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 "multispheremap.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 "multispheremap.mak" CFG="multispheremap - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "multispheremap - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "multispheremap - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "multispheremap - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "multispheremap - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "multispheremap - Win32 Release" -# Name "multispheremap - Win32 Debug" -# Begin Source File - -SOURCE=.\multispheremap.c -# End Source File -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# Begin Source File - -SOURCE=.\texture.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/noise.c b/lib/glut-3.7.6/progs/advanced97/noise.c deleted file mode 100644 index 38562429a..000000000 --- a/lib/glut-3.7.6/progs/advanced97/noise.c +++ /dev/null @@ -1,263 +0,0 @@ -/* noise.c - by Simon Hui, 3Dfx Interactive */ - -/* create an octave by filtering randomly generated noise */ - -#include -#include -#include -#include - -#if !defined(GL_VERSION_1_1) && !defined(GL_VERSION_1_2) -#define glBindTexture glBindTextureEXT -#endif - - -static GLint texxsize = 256, texysize = 256; -static GLint winxsize = 512, winysize = 512; -static GLint freq = 4; - -/* texture object names */ -static GLuint basistex = 1; -static GLuint noisetex = 2; - -void -init_texture(void) { - int i, j, n; - int w, h; - GLubyte *basis, *tex; - - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - basis = (GLubyte *) malloc(texxsize * texysize); - w = texxsize / 2; - h = texysize / 2; - for (j=0; j < h; j++) { - for (i=0; i < w; i++) { - GLint r; - float u = i / (w - 1.0); - float v = j / (h - 1.0); - float f = 3 * u * u - 2 * u * u * u; - float g = 3 * v * v - 2 * v * v * v; - - /* basis is a bicubic spline */ - r = f * g * 0xff; - - /* reflect around x and y axes */ - basis[j * texxsize + i] = r; - basis[j * texxsize + texxsize-i-1] = r; - basis[(texysize-j-1) * texxsize + i] = r; - basis[(texysize-j-1) * texxsize + texxsize-i-1] = r; - } - } - glBindTexture(GL_TEXTURE_2D, basistex); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, texxsize, texysize, 0, - GL_RED, GL_UNSIGNED_BYTE, basis); - free(basis); - - tex = (GLubyte *) malloc(4 * texxsize * texysize); - for (n=0; n < 4; n++) { - for (j=0; j < texysize; j++) { - for (i=0; i < texxsize; i++) { - int r = rand(); - - /* mix it up a little more */ - r = ((r & 0xff) + ((r & 0xff00) >> 8)) & 0xff; - - tex[j*texxsize + i] = r; - } - } - glBindTexture(GL_TEXTURE_2D, noisetex + n); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, texxsize, texysize, 0, - GL_RED, GL_UNSIGNED_BYTE, tex); - } - free(tex); -} - -void -init(void) { - glClearColor(0.0, 0.0, 0.0, 1.0); - glMatrixMode(GL_PROJECTION); - glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); - glMatrixMode(GL_MODELVIEW); - glViewport(0, 0, winxsize, winysize); - glBlendFunc(GL_DST_COLOR, GL_ZERO); - - glEnable(GL_TEXTURE_2D); - init_texture(); -} - -void -draw_basis(int tsize, int ssize, int xadj, int yadj) { - float tilessize = 1.0 / ssize; - float tiletsize = 1.0 / tsize; - float xoff = (xadj - 0.5) * 0.5 * tilessize; - float yoff = (yadj - 0.5) * 0.5 * tiletsize; - float xo, yo; - int i, j; - - glBindTexture(GL_TEXTURE_2D, basistex); - glMatrixMode(GL_TEXTURE); - glLoadIdentity(); - - /* draw as many copies of the basis function as needed for this frequency */ - for (j=0; j < tsize; j++) { - for (i=0; i < ssize; i++) { - xo = xoff + i * tilessize; - yo = yoff + j * tiletsize; - glBegin(GL_TRIANGLE_STRIP); - glTexCoord2f(0.f, 0.f); glVertex2f(xo, yo); - glTexCoord2f(0.f, 1.f); glVertex2f(xo, yo + tiletsize); - glTexCoord2f(1.f, 0.f); glVertex2f(xo + tilessize, yo); - glTexCoord2f(1.f, 1.f); glVertex2f(xo + tilessize, yo + tiletsize); - glEnd(); - } - } - glFinish(); -} - -void -draw_noise_texture(int tsize, int ssize, int xadj, int yadj, int texname) { - float tilessize = 1.0 / ssize; - float tiletsize = 1.0 / tsize; - float xoff = (xadj - 0.5) * 0.5 * tilessize; - float yoff = (yadj - 0.5) * 0.5 * tiletsize; - float scale = 1.0 / (texxsize / ssize); - - glBindTexture(GL_TEXTURE_2D, texname); - - /* scale the texture matrix to get a noise pattern of desired frequency */ - glMatrixMode(GL_TEXTURE); - glLoadIdentity(); - glScalef(scale,scale,scale); - - glBegin(GL_TRIANGLE_STRIP); - glTexCoord2f(0.f, 0.f); glVertex2f(xoff, yoff); - glTexCoord2f(0.f, 1.f); glVertex2f(xoff, yoff+1.0); - glTexCoord2f(1.f, 0.f); glVertex2f(xoff + 1.0, yoff); - glTexCoord2f(1.f, 1.f); glVertex2f(xoff + 1.0, yoff + 1.0); - glEnd(); - glFlush(); -} - -/* menu choices */ -enum { - BASIS, NOISE, BASIS_TIMES_NOISE, OCTAVE, HIGHER_FREQ, LOWER_FREQ, QUIT=27 -}; - -GLint showmode = BASIS_TIMES_NOISE; - -void -display(void) { - switch (showmode) { - - case BASIS: - glClear(GL_COLOR_BUFFER_BIT); - draw_basis(freq, freq, 0, 0); - break; - - case NOISE: - glClear(GL_COLOR_BUFFER_BIT); - draw_noise_texture(freq, freq, 0, 0, noisetex); - break; - - case BASIS_TIMES_NOISE: - glClear(GL_COLOR_BUFFER_BIT); - glDisable(GL_BLEND); - draw_basis(freq, freq, 0, 0); - glEnable(GL_BLEND); - draw_noise_texture(freq, freq, 0, 0, noisetex); - glDisable(GL_BLEND); - break; - - case OCTAVE: - - /* put four sets together to get the final octave */ - - glClear(GL_COLOR_BUFFER_BIT); - glDisable(GL_BLEND); - draw_basis(freq, freq, 0, 0); - glEnable(GL_BLEND); - draw_noise_texture(freq, freq, 0, 0, noisetex); - glAccum(GL_LOAD, 1.0); - - glClear(GL_COLOR_BUFFER_BIT); - glDisable(GL_BLEND); - draw_basis(freq, freq, 1, 0); - glEnable(GL_BLEND); - draw_noise_texture(freq, freq, 1, 0, noisetex + 1); - glAccum(GL_ACCUM, 1.0); - - glClear(GL_COLOR_BUFFER_BIT); - glDisable(GL_BLEND); - draw_basis(freq, freq, 0, 1); - glEnable(GL_BLEND); - draw_noise_texture(freq, freq, 0, 1, noisetex + 2); - glAccum(GL_ACCUM, 1.0); - - glClear(GL_COLOR_BUFFER_BIT); - glDisable(GL_BLEND); - draw_basis(freq, freq, 1, 1); - glEnable(GL_BLEND); - draw_noise_texture(freq, freq, 1, 1, noisetex + 3); - glAccum(GL_ACCUM, 1.0); - - glDisable(GL_BLEND); - glClear(GL_COLOR_BUFFER_BIT); - glAccum(GL_RETURN, 1.0); - break; - } - glFlush(); -} - -void -reshape(int w, int h) { - glViewport(0, 0, w, h); - glutPostRedisplay(); -} - -void -menu(int value) { - switch (value) { - case BASIS: - case NOISE: - case BASIS_TIMES_NOISE: - case OCTAVE: - showmode = value; - break; - case HIGHER_FREQ: - if (freq < texxsize) freq *= 2; - break; - case LOWER_FREQ: - freq /= 2; - if (freq < 2) freq = 2; - break; - case QUIT: - exit(0); - } - glutPostRedisplay(); -} - -int -main(int argc, char** argv) { - glutInitWindowSize(winxsize, winysize); - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGBA | GLUT_ACCUM); - (void)glutCreateWindow("filtered noise function"); - init(); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glutCreateMenu(menu); - glutAddMenuEntry("Show One Basis", BASIS); - glutAddMenuEntry("Show One Noise", NOISE); - glutAddMenuEntry("Show One Basis x Noise", BASIS_TIMES_NOISE); - glutAddMenuEntry("Show Octave", OCTAVE); - glutAddMenuEntry("Higher Frequency", HIGHER_FREQ); - glutAddMenuEntry("Lower Frequency", LOWER_FREQ); - glutAddMenuEntry("Quit", QUIT); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/advanced97/noise.dsp b/lib/glut-3.7.6/progs/advanced97/noise.dsp deleted file mode 100644 index dd1da5816..000000000 --- a/lib/glut-3.7.6/progs/advanced97/noise.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="noise" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=noise - 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 "noise.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 "noise.mak" CFG="noise - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "noise - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "noise - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "noise - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "noise - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "noise - Win32 Release" -# Name "noise - Win32 Debug" -# Begin Source File - -SOURCE=.\noise.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/nthsurfdemo.c b/lib/glut-3.7.6/progs/advanced97/nthsurfdemo.c deleted file mode 100644 index a0ff8a9cc..000000000 --- a/lib/glut-3.7.6/progs/advanced97/nthsurfdemo.c +++ /dev/null @@ -1,590 +0,0 @@ -#include -#include -#include -#include - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -#define TRUE 1 -#define FALSE 0 - -int whichSurface = 0; -int takeSnapshot = 0; - - -int winWidth, winHeight; -GLfloat *depthSave = NULL; -GLubyte *stencilSave = NULL; -GLubyte *colorSave = NULL; - - -void resizeBuffers(void) -{ - colorSave = realloc(colorSave, winWidth * winHeight * 4 * sizeof(GLubyte)); - depthSave = realloc(depthSave, winWidth * winHeight * 4 * sizeof(GLfloat)); - stencilSave = (GLubyte *)depthSave; -} - - -void pushOrthoView(float left, float right, float bottom, float top, - float znear, float zfar) -{ - glPushMatrix(); - glLoadIdentity(); - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - glOrtho(left, right, bottom, top, znear, zfar); -} - - -void popView(void) -{ - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); -} - - -void copyDepthToColor(GLenum whichColorBuffer) -{ - int x, y; - GLfloat max, min; - GLint previousColorBuffer; - - glReadPixels(0, 0, winWidth, winHeight, GL_DEPTH_COMPONENT, GL_FLOAT, - depthSave); - - /* I'm sure this could be done much better with OpenGL */ - max = 0; - min = 1; - for(y = 0; y < winHeight; y++) - for(x = 0; x < winWidth; x++) { - if(depthSave[winWidth * y + x] < min) - min = depthSave[winWidth * y + x]; - if(depthSave[winWidth * y + x] > max && depthSave[winWidth * y + x] < .999) - max = depthSave[winWidth * y + x]; - } - - for(y = 0; y < winHeight; y++) - for(x = 0; x < winWidth; x++) { - if(depthSave[winWidth * y + x] <= max) - depthSave[winWidth * y + x] = 1 - (depthSave[winWidth * y + x] - min) / (max - min); - else - depthSave[winWidth * y + x] = 0; - } - - pushOrthoView(0, 1, 0, 1, 0, 1); - glRasterPos3f(0, 0, -.5); - glDisable(GL_DEPTH_TEST); - glDisable(GL_STENCIL_TEST); - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - glGetIntegerv(GL_DRAW_BUFFER, &previousColorBuffer); - glDrawBuffer(whichColorBuffer); - glDrawPixels(winWidth, winHeight, GL_LUMINANCE , GL_FLOAT, depthSave); - glDrawBuffer(previousColorBuffer); - glEnable(GL_DEPTH_TEST); - popView(); -} - - -unsigned char colors[][3] = -{ - {255, 0, 0}, /* red */ - {255, 218, 0}, /* yellow */ - {72, 255, 0}, /* yellowish green */ - {0, 255, 145}, /* bluish cyan */ - {0, 145, 255}, /* cyanish blue */ - {72, 0, 255}, /* purplish blue */ - {255, 0, 218}, /* reddish purple */ -}; - - -void copyStencilToColor(GLenum whichColorBuffer) -{ - int x, y; - GLint previousColorBuffer; - - glReadPixels(0, 0, winWidth, winHeight, GL_STENCIL_INDEX, GL_UNSIGNED_BYTE, - stencilSave); - - /* I'm sure this could be done much better with OpenGL */ - for(y = 0; y < winHeight; y++) - for(x = 0; x < winWidth; x++) { - int stencilValue; - - stencilValue = stencilSave[winWidth * y + x]; - - colorSave[(winWidth * y + x) * 3 + 0] = colors[stencilValue % 7][0]; - colorSave[(winWidth * y + x) * 3 + 1] = colors[stencilValue % 7][1]; - colorSave[(winWidth * y + x) * 3 + 2] = colors[stencilValue % 7][2]; - } - - pushOrthoView(0, 1, 0, 1, 0, 1); - glRasterPos3f(0, 0, -.5); - glDisable(GL_DEPTH_TEST); - glDisable(GL_STENCIL_TEST); - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - glGetIntegerv(GL_DRAW_BUFFER, &previousColorBuffer); - glDrawBuffer(whichColorBuffer); - glDrawPixels(winWidth, winHeight, GL_RGB, GL_UNSIGNED_BYTE, colorSave); - glDrawBuffer(previousColorBuffer); - glEnable(GL_DEPTH_TEST); - popView(); -} - - -#if 0 - -GLushort rrow[1280], grow[1280], brow[1280], arow[1280]; - - -#define iopen junk -#include -#undef iopen - - -IMAGE *iopen(char *file, char *mode, ...); -int putrow(IMAGE *image, unsigned short *buff, int y, int z); -int iclose(IMAGE *); - - -void saveSGIImage(char *name, int doAlphaToo) -{ - IMAGE *img; - FILE *fp; - GLubyte *pixels; - int x, y; - int numComp = doAlphaToo ? 4 : 3; - - pixels = malloc(winWidth * winHeight * numComp * sizeof(GLubyte)); - - glReadPixels(0, 0, winWidth, winHeight, doAlphaToo ? GL_RGBA : GL_RGB, - GL_UNSIGNED_BYTE, pixels); - - img = iopen(name, "w", RLE(1), numComp, winWidth, winHeight, numComp); - - for(y = 0; y < winHeight; y++) { - for(x = 0; x < winWidth; x++) { - rrow[x] = pixels[(y * winWidth + x) * numComp + 0]; - grow[x] = pixels[(y * winWidth + x) * numComp + 1]; - brow[x] = pixels[(y * winWidth + x) * numComp + 2]; - if(doAlphaToo) - arow[x] = pixels[(y * winWidth + x) * numComp + 3]; - } - putrow(img, rrow, y, 0); - putrow(img, grow, y, 1); - putrow(img, brow, y, 2); - if(doAlphaToo) - putrow(img, arow, y, 3); - } - iclose(img); - - free(pixels); -} - -#endif - - -struct transformation { - float translation[3]; - float rotation[4]; - float scale[3]; -}; - - -void drawXform(struct transformation *xform, int applyScale) -{ - glTranslatef(xform->translation[0], xform->translation[1], xform->translation[2]); - glRotatef(xform->rotation[3] / M_PI * 180, xform->rotation[0], xform->rotation[1], xform->rotation[2]); - if(applyScale) - glScalef(xform->scale[0], xform->scale[1], xform->scale[2]); -} - - -enum trackballModeEnum { - ROTATE, - TRANSLATEXY, - TRANSLATEZ, - SCALEX, - SCALEY, - SCALEZ -} trackballMode = ROTATE; - - -struct transformation xform = -{ - 0, 0, 0, - -0.65, -0.75, -0.04, 0.89, - .7, .7, 2, -}; - - -void axisamountToMat(float aa[], float mat[]) -{ - float c, s, t; - - c = (float)cos(aa[3]); - s = (float)sin(aa[3]); - t = 1.0f - c; - - mat[0] = t * aa[0] * aa[0] + c; - mat[1] = t * aa[0] * aa[1] + s * aa[2]; - mat[2] = t * aa[0] * aa[2] - s * aa[1]; - mat[3] = t * aa[0] * aa[1] - s * aa[2]; - mat[4] = t * aa[1] * aa[1] + c; - mat[5] = t * aa[1] * aa[2] + s * aa[0]; - mat[6] = t * aa[0] * aa[2] + s * aa[1]; - mat[7] = t * aa[1] * aa[2] - s * aa[0]; - mat[8] = t * aa[2] * aa[2] + c; -} - - -void matToAxisamount(float mat[], float aa[]) -{ - float c; - float s; - - c = (mat[0] + mat[4] + mat[8] - 1.0f) / 2.0f; - aa[3] = (float)acos(c); - s = (float)sin(aa[3]); - if(fabs(s / M_PI - (int)(s / M_PI)) < .0000001) - { - aa[0] = 0.0f; - aa[1] = 1.0f; - aa[2] = 0.0f; - } - else - { - aa[0] = (mat[5] - mat[7]) / (2.0f * s); - aa[1] = (mat[6] - mat[2]) / (2.0f * s); - aa[2] = (mat[1] - mat[3]) / (2.0f * s); - } -} - - -void multMat(float m1[], float m2[], float r[]) -{ - float t[9]; - int i; - - t[0] = m1[0] * m2[0] + m1[1] * m2[3] + m1[2] * m2[6]; - t[1] = m1[0] * m2[1] + m1[1] * m2[4] + m1[2] * m2[7]; - t[2] = m1[0] * m2[2] + m1[1] * m2[5] + m1[2] * m2[8]; - t[3] = m1[3] * m2[0] + m1[4] * m2[3] + m1[5] * m2[6]; - t[4] = m1[3] * m2[1] + m1[4] * m2[4] + m1[5] * m2[7]; - t[5] = m1[3] * m2[2] + m1[4] * m2[5] + m1[5] * m2[8]; - t[6] = m1[6] * m2[0] + m1[7] * m2[3] + m1[8] * m2[6]; - t[7] = m1[6] * m2[1] + m1[7] * m2[4] + m1[8] * m2[7]; - t[8] = m1[6] * m2[2] + m1[7] * m2[5] + m1[8] * m2[8]; - for(i = 0; i < 9; i++) - { - r[i] = t[i]; - } -} - - -void rotateTrackball(int dx, int dy, float rotation[4]) -{ - float dist; - float oldMat[9]; - float rotMat[9]; - float newRot[4]; - - dist = (float)sqrt((double)(dx * dx + dy * dy)); - if(fabs(dist) < 0.99) - return; - - newRot[0] = (float) dy / dist; - newRot[1] = (float) dx / dist; - newRot[2] = 0.0f; - newRot[3] = (float)M_PI * dist / winWidth; - - axisamountToMat(rotation, oldMat); - axisamountToMat(newRot, rotMat); - multMat(oldMat, rotMat, oldMat); - matToAxisamount(oldMat, rotation); - - dist = (float)sqrt(rotation[0] * rotation[0] + rotation[1] * rotation[1] + - rotation[2] * rotation[2]); - - rotation[0] /= dist; - rotation[1] /= dist; - rotation[2] /= dist; -} - - -int stage = 6; -typedef enum {COLOR, DEPTH, STENCIL} BufferInterest; - -BufferInterest bufferInterest = COLOR; - - -void init(void) -{ - GLfloat defaultMat[] = {.75, .25, .25, 1}; - - glEnable(GL_DEPTH_TEST); - glEnable(GL_CULL_FACE); - glCullFace(GL_BACK); - - glMatrixMode(GL_PROJECTION); - glFrustum(-.33, .33, -.33, .33, .5, 40); - - glMatrixMode(GL_MODELVIEW); - gluLookAt(0, 0, 10, 0, 0, 0, 0, 1, 0); - - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - - /* glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); */ - - glEnable(GL_NORMALIZE); - - glEnable(GL_STENCIL_TEST); - glStencilOp(GL_INCR, GL_INCR, GL_INCR); - - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, defaultMat); - - glLineWidth(3); - glShadeModel(GL_FLAT); -} - - -void redraw(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); - - glPushMatrix(); - - drawXform(&xform, TRUE); - - glEnable(GL_STENCIL_TEST); - if(whichSurface < 2) - glStencilFunc(GL_EQUAL, whichSurface, 0xff); - else - glStencilFunc(GL_ALWAYS, 0, 0); - - glutSolidTorus(2, 4, 20, 20); - - /* glDisable(GL_STENCIL_TEST); */ - /* glDisable(GL_LIGHTING); */ - /* glColor3f(1, 1, 1); */ - /* glutWireTorus(2, 4, 20, 20); */ - /* glEnable(GL_LIGHTING); */ - - glPopMatrix(); - - switch(bufferInterest) { - case COLOR: - break; /* color already in back buffer */ - - case STENCIL: - copyStencilToColor(GL_BACK); - break; - - case DEPTH: - copyDepthToColor(GL_BACK); - break; - } - - if(takeSnapshot) { - takeSnapshot = 0; - /* saveSGIImage("snap.rgb", FALSE); */ - /* printf("Saved RGBA image in snap.rgba\n"); */ - } - - glutSwapBuffers(); -} - - -void reshape(int width, int height) -{ - glViewport(0, 0, width, height); - winWidth = width; - winHeight = height; - resizeBuffers(); - glutPostRedisplay(); -} - - -void changeData(int data) -{ - char *s; - - bufferInterest = (BufferInterest) data; - glutPostRedisplay(); - - switch(data) { - case COLOR: - s = "color"; - break; - - case STENCIL: - s = "stencil"; - break; - - case DEPTH: - s = "depth"; - break; - } - printf("Now displaying %s data\n", s); -} - - -int mainMenu; - - -/* ARGSUSED1 */ -void keyboard(unsigned char key, int x, int y) -{ - switch(key) - { - case '1': - case '2': - case '3': - whichSurface = key - '1'; - glutPostRedisplay(); - break; - - case 'r': - trackballMode = ROTATE; - break; - - case 't': - trackballMode = TRANSLATEXY; - break; - - case 'T': - trackballMode = TRANSLATEZ; - break; - - case 'x': - trackballMode = SCALEX; - break; - - case 'y': - trackballMode = SCALEY; - break; - - case 'z': - trackballMode = SCALEZ; - break; - - case 'q': case 'Q': case '\033': - exit(0); - break; - - case '+': case '=': - stage++; - glutPostRedisplay(); - break; - - case '-': case '_': - stage--; - glutPostRedisplay(); - break; - - case 's': - printf("%f %f %f %f\n", xform.rotation[0], xform.rotation[1], - xform.rotation[2], xform.rotation[3]); - glutPostRedisplay(); - break; - } -} - - -static int ox, oy; - - -/* ARGSUSED */ -void button(int b, int state, int x, int y) -{ - ox = x; - oy = y; -} - - -void motion(int x, int y) -{ - int dx, dy; - - dx = x - ox; - dy = y - oy; - - ox = x; - oy = y; - - switch(trackballMode) { - case ROTATE: - rotateTrackball(dx, dy, xform.rotation); - break; - - case SCALEX: - xform.scale[0] += (dx + dy) / 20.0f; - break; - - case SCALEY: - xform.scale[1] += (dx + dy) / 20.0f; - break; - - case SCALEZ: - xform.scale[2] += (dx + dy) / 20.0f; - break; - - case TRANSLATEXY: - xform.translation[0] += dx / 20.0f; - xform.translation[1] -= dy / 20.0f; - break; - - case TRANSLATEZ: - xform.translation[2] += (dx + dy) / 20.0f; - break; - } - glutPostRedisplay(); -} - -/* ARGSUSED */ -void mainMenuFunc(int menu) -{ - /* */ -} - - -int main(int argc, char **argv) -{ - int bufferMenu; - int stenSize; - - glutInit(&argc, argv); - glutInitWindowSize(winWidth = 256, winHeight = 256); - glutInitDisplayMode(GLUT_DOUBLE|GLUT_STENCIL|GLUT_DEPTH|GLUT_ALPHA); - (void)glutCreateWindow("torus depth"); - glutDisplayFunc(redraw); - glutKeyboardFunc(keyboard); - glutMotionFunc(motion); - glutMouseFunc(button); - glutReshapeFunc(reshape); - - resizeBuffers(); - glGetIntegerv(GL_STENCIL_BITS, &stenSize); - fprintf(stderr, "(%d bits of stencil available in this visual)\n", stenSize); - - fprintf(stderr, "Hit 'h' for help message\n"); - - bufferMenu = glutCreateMenu(changeData); - glutAddMenuEntry("Color data", COLOR); - glutAddMenuEntry("Stencil data", STENCIL); - glutAddMenuEntry("Depth data", DEPTH); - - mainMenu = glutCreateMenu(mainMenuFunc); - glutAddSubMenu("Visible buffer", bufferMenu); - glutAttachMenu(GLUT_RIGHT_BUTTON); - init(); - glutMainLoop(); - - return 0; -} diff --git a/lib/glut-3.7.6/progs/advanced97/nthsurfdemo.dsp b/lib/glut-3.7.6/progs/advanced97/nthsurfdemo.dsp deleted file mode 100644 index 3d444ee6c..000000000 --- a/lib/glut-3.7.6/progs/advanced97/nthsurfdemo.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="nthsurfdemo" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=nthsurfdemo - 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 "nthsurfdemo.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 "nthsurfdemo.mak" CFG="nthsurfdemo - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "nthsurfdemo - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "nthsurfdemo - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "nthsurfdemo - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "nthsurfdemo - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "nthsurfdemo - Win32 Release" -# Name "nthsurfdemo - Win32 Debug" -# Begin Source File - -SOURCE=.\nthsurfdemo.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/paint.c b/lib/glut-3.7.6/progs/advanced97/paint.c deleted file mode 100644 index 3595cdfcc..000000000 --- a/lib/glut-3.7.6/progs/advanced97/paint.c +++ /dev/null @@ -1,266 +0,0 @@ -#include -#include -#include -#include -#include -#include "texture.h" - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -#ifndef __sgi -#define trunc(x) ((double)((int)(x))) -#endif - -#define RW 0.3086 -#define GW 0.6094 -#define BW 0.0820 - -static char defaultFile0[] = "../data/mandrill.rgb"; -static char defaultFile1[] = "../data/sgi.bw"; -static char defaultBrushFile[] = "../data/brush.rgb"; -GLuint *img0, *img1, *brush; -GLsizei w0, w1, wbrush, h0, h1, hbrush; -GLsizei w, h; - -GLint comp; - -void init(void) -{ - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); -} - -GLuint *load_img(const char *fname, GLsizei *imgW, GLsizei *imgH) -{ - GLuint *img; - - img = read_texture(fname, imgW, imgH, &comp); - if (!img) { - fprintf(stderr, "Could not open %s\n", fname); - exit(1); - } - - return img; -} - -GLuint * -resize_img(GLuint *img, GLsizei curW, GLsizei curH) -{ - /* save & set buffer settings */ - glPushAttrib(GL_COLOR_BUFFER_BIT | GL_PIXEL_MODE_BIT); - glDrawBuffer(GL_BACK); - glReadBuffer(GL_BACK); - - glPixelZoom((float)w / (float)curW, (float)h / (float)curH); - glRasterPos2i(0, 0); - glDrawPixels(curW, curH, GL_RGBA, GL_UNSIGNED_BYTE, img); - free(img); - img = (GLuint *)malloc(w * h * sizeof(GLuint)); - if (!img) { - fprintf(stderr, "Malloc of %d bytes failed.\n", - curW * curH * sizeof(GLuint)); - exit(1); - } - glPixelZoom(1, 1); - glReadPixels(0, 0, w, h, GL_RGBA, GL_UNSIGNED_BYTE, img); - - glPopAttrib(); - - return img; -} - -GLuint * -convert_to_luminance(GLuint *img, GLsizei w, GLsizei h) -{ - GLubyte *newImg, *src, *dst; - GLfloat val; - int i; - - newImg = (GLubyte *)malloc(w * h); - if (!newImg) { - fprintf(stderr, "malloc of %d bytes failed\n", w*h); - exit(1); - } - - src = (GLubyte *)img; - dst = newImg; - for (i = 0; i < w*h; i++) { - val = ((float)(*src++) * RW + - (float)(*src++) * GW + - (float)(*src++) * BW); - src++; - if (val > 255) val = 255; - *dst++ = val; - } - free(img); - - /* casting a ubyte ptr to a uint pointer is sloppy since it can - * lead to alignment errors, but since the pointer came from - * malloc we know it's legal in this case... */ - return (GLuint *)newImg; -} - -void reshape(GLsizei winW, GLsizei winH) -{ - glViewport(0, 0, w, h); - glLoadIdentity(); - glOrtho(0, winW, 0, winH, 0, 5); -} - -void draw(void) -{ - static int first = 1; - GLenum err; - - if (first) { - printf("Scaling images to %d by %d\n", w, h); - - if (w0 != w || h0 != h) { - img0 = resize_img(img0, w0, h0); - - } - if (w1 != w || h1 != h) { - img1 = resize_img(img1, w1, h1); - } - - first = 0; - } - - glClear(GL_COLOR_BUFFER_BIT); - glRasterPos2i(0, 0); - glDrawBuffer(GL_BACK); - glDrawPixels(w, h, GL_RGBA, GL_UNSIGNED_BYTE, img1); - glDrawBuffer(GL_FRONT); - glDrawPixels(w, h, GL_RGBA, GL_UNSIGNED_BYTE, img0); - - err = glGetError(); - if (err != GL_NO_ERROR) printf("Error: %s\n", gluErrorString(err)); -} - -int lastX, lastY, curX, curY; - -int get_msecs(void) -{ - return glutGet(GLUT_ELAPSED_TIME) / 1000.0; -} - -void idle(void) -{ - int x = curX - (wbrush/2); - int y = h - (curY + (hbrush/2)); - int msecs; - static int last_msecs = -1; - - /* do not do this more than 60 times a second. Otherwise it's - * to fast for use on high-end systems */ - msecs = get_msecs(); - if (fabs(last_msecs - msecs) < 1000./60.) { - return; - } - last_msecs = msecs; - - /* we draw the brush using a drawpixels command. on systems with - * hardware-accelerated texture mapping it would be better to use - * that. - * - * we use the bitmap hack to set the rasterpos because we don't - * know that the position will be within the window. - */ - glRasterPos2i(0, 0); - glBitmap(0, 0, 0, 0, x, y, 0); - glColorMask(0, 0, 0, 1); - glDrawBuffer(GL_BACK); - glDrawPixels(wbrush, hbrush, GL_ALPHA, GL_UNSIGNED_BYTE, brush); - glColorMask(1, 1, 1, 1); - - glReadBuffer(GL_BACK); - glDrawBuffer(GL_FRONT); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glEnable(GL_BLEND); - glCopyPixels(x, y, wbrush, hbrush, GL_COLOR); - glDisable(GL_BLEND); - - glColorMask(1, 1, 1, 1); -} - -void motion(int xpos, int ypos) -{ - curX = xpos; - curY = ypos; -} - -/* ARGSUSED */ -void button(int button, int state, int xpos, int ypos) -{ - if (state == GLUT_DOWN) { - glutIdleFunc(idle); - lastX = lastY = -1; - curX = xpos; - curY = ypos; - return; - } else { - glutIdleFunc(0); - } -} - -/* ARGSUSED1 */ -void key(unsigned char key, int x, int y) -{ - if (key == 27) exit(0); -} - -void -show_usage(void) -{ - fprintf(stderr, "Usage:\n"); - fprintf(stderr, "paint [imagefile0] [imagefile1] [brush]\n"); -} - -main(int argc, char *argv[]) -{ - const char *fileName0 = defaultFile0, *fileName1 = defaultFile1, - *brushName = defaultBrushFile; - - glutInit(&argc, argv); - if (argc > 1) { - fileName0 = argv[1]; - } - if (argc > 2) { - fileName1 = argv[2]; - } - if (argc > 3) { - brushName = argv[3]; - } - if (argc > 4) { - show_usage(); - exit(1); - } - printf("Image file 1 is %s\n", fileName0); - printf("Image file 2 is %s\n", fileName1); - printf("Brush file is %s\n", brushName); - - img0 = load_img(fileName0, &w0, &h0); - img1 = load_img(fileName1, &w1, &h1); - brush = load_img(brushName, &wbrush, &hbrush); - brush = convert_to_luminance(brush, wbrush, hbrush); - -#define MAX(a, b) ((a) > (b) ? (a) : (b)) - w = MAX(w0, w1); - h = MAX(h0, h1); - - glutInitWindowSize(w, h); - glutInitWindowPosition(0, 0); - glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_ALPHA); - glutCreateWindow(argv[0]); - glutDisplayFunc(draw); - glutKeyboardFunc(key); - glutReshapeFunc(reshape); - glutMouseFunc(button); - glutMotionFunc(motion); - init(); - - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/advanced97/paint.dsp b/lib/glut-3.7.6/progs/advanced97/paint.dsp deleted file mode 100644 index adc57ccbc..000000000 --- a/lib/glut-3.7.6/progs/advanced97/paint.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="paint" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=paint - 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 "paint.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 "paint.mak" CFG="paint - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "paint - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "paint - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "paint - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "paint - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "paint - Win32 Release" -# Name "paint - Win32 Debug" -# Begin Source File - -SOURCE=.\paint.c -# End Source File -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# Begin Source File - -SOURCE=.\texture.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/projtex.c b/lib/glut-3.7.6/progs/advanced97/projtex.c deleted file mode 100644 index 9fd8f2ea1..000000000 --- a/lib/glut-3.7.6/progs/advanced97/projtex.c +++ /dev/null @@ -1,837 +0,0 @@ -/* -** Demonstrates simple projective texture mapping. -** -** Button1 changes view, Button2 moves texture. -** -** (See: Segal, Korobkin, van Widenfelt, Foran, and Haeberli -** "Fast Shadows and Lighting Effects Using Texture Mapping", SIGGRAPH '92) -** -** 1994,1995 -- David G Yu -** -** cc -o projtex projtex.c texture.c -lglut -lGLU -lGL -lX11 -lm -*/ -#include -#include -#include -#include -#include "texture.h" - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -int winWidth, winHeight; - -GLboolean redrawContinuously; - -float angle, axis[3]; -enum MoveModes { MoveNone, MoveView, MoveObject, MoveTexture }; -enum MoveModes mode = MoveNone; - -GLfloat objectXform[4][4]; -GLfloat textureXform[4][4]; - -void (*drawObject)(void); -void (*loadTexture)(void); -GLboolean textureEnabled = GL_TRUE; -GLboolean showProjection = GL_TRUE; -GLboolean linearFilter = GL_TRUE; - -char *texFilename = NULL; - -GLfloat zoomFactor = 1.0; - -/*****************************************************************/ - -/* matrix = identity */ -void -matrixIdentity(GLfloat matrix[16]) -{ - matrix[ 0] = 1.0; - matrix[ 1] = 0.0; - matrix[ 2] = 0.0; - matrix[ 3] = 0.0; - matrix[ 4] = 0.0; - matrix[ 5] = 1.0; - matrix[ 6] = 0.0; - matrix[ 7] = 0.0; - matrix[ 8] = 0.0; - matrix[ 9] = 0.0; - matrix[10] = 1.0; - matrix[11] = 0.0; - matrix[12] = 0.0; - matrix[13] = 0.0; - matrix[14] = 0.0; - matrix[15] = 1.0; -} - -/* matrix2 = transpose(matrix1) */ -void -matrixTranspose(GLfloat matrix2[16], GLfloat matrix1[16]) -{ - matrix2[ 0] = matrix1[ 0]; - matrix2[ 1] = matrix1[ 4]; - matrix2[ 2] = matrix1[ 8]; - matrix2[ 3] = matrix1[12]; - - matrix2[ 4] = matrix1[ 1]; - matrix2[ 5] = matrix1[ 5]; - matrix2[ 6] = matrix1[ 9]; - matrix2[ 7] = matrix1[13]; - - matrix2[ 8] = matrix1[ 2]; - matrix2[ 9] = matrix1[ 6]; - matrix2[10] = matrix1[10]; - matrix2[11] = matrix1[14]; - - matrix2[12] = matrix1[ 3]; - matrix2[13] = matrix1[ 7]; - matrix2[14] = matrix1[14]; - matrix2[15] = matrix1[15]; -} - -/*****************************************************************/ - -/* load SGI .rgb image (pad with a border of the specified width and color) */ -static void -imgLoad(char *filenameIn, int borderIn, GLfloat borderColorIn[4], - int *wOut, int *hOut, GLubyte **imgOut) -{ - int border = borderIn; - int width, height; - int w, h; - GLubyte *image, *img, *p; - int i, j, components; - - image = (GLubyte *)read_texture(filenameIn, &width, &height, &components); - w = width + 2*border; - h = height + 2*border; - img = (GLubyte *) calloc(w*h, 4*sizeof(unsigned char)); - - p = img; - for (j=-border; j 1.0) { - glDisable(GL_DEPTH_TEST); - glCopyPixels(0, 0, winWidth/zoomFactor, winHeight/zoomFactor, GL_COLOR); - glEnable(GL_DEPTH_TEST); - } - glFlush(); - glutSwapBuffers(); - checkErrors(); -} - -/*****************************************************************/ - -/* simple trackball-like motion control */ -GLboolean trackingMotion = GL_FALSE; -float lastPos[3]; -int lastTime; - -void -ptov(int x, int y, int width, int height, float v[3]) -{ - float d, a; - - /* project x,y onto a hemi-sphere centered within width, height */ - v[0] = (2.0*x - width) / width; - v[1] = (height - 2.0*y) / height; - d = sqrt(v[0]*v[0] + v[1]*v[1]); - v[2] = cos((M_PI/2.0) * ((d < 1.0) ? d : 1.0)); - a = 1.0 / sqrt(v[0]*v[0] + v[1]*v[1] + v[2]*v[2]); - v[0] *= a; - v[1] *= a; - v[2] *= a; -} - -void -startMotion(int x, int y, int but, int time) -{ - if (but == GLUT_LEFT_BUTTON) { - mode = MoveView; - } else if (but == GLUT_RIGHT_BUTTON) { - mode = MoveTexture; - } else { - return; - } - - trackingMotion = GL_TRUE; - redrawContinuously = GL_FALSE; - lastTime = time; - ptov(x, y, winWidth, winHeight, lastPos); -} - -/*ARGSUSED*/ -void -stopMotion(int x, int y, int but, int time) -{ - if ((but == GLUT_LEFT_BUTTON && mode == MoveView) || - (but == GLUT_RIGHT_BUTTON && mode == MoveTexture)) - { - trackingMotion = GL_FALSE; - } else { - return; - } - - if (time == lastTime) { - redrawContinuously = GL_TRUE; - glutIdleFunc(display); - } else { - angle = 0.0; - redrawContinuously = GL_FALSE; - glutIdleFunc(0); - } - if (!redrawContinuously) { - mode = MoveNone; - } -} - -void -trackMotion(int x, int y) -{ - if (trackingMotion) { - float curPos[3], dx, dy, dz; - - ptov(x, y, winWidth, winHeight, curPos); - - dx = curPos[0] - lastPos[0]; - dy = curPos[1] - lastPos[1]; - dz = curPos[2] - lastPos[2]; - angle = 90.0 * sqrt(dx*dx + dy*dy + dz*dz); - - axis[0] = lastPos[1]*curPos[2] - lastPos[2]*curPos[1]; - axis[1] = lastPos[2]*curPos[0] - lastPos[0]*curPos[2]; - axis[2] = lastPos[0]*curPos[1] - lastPos[1]*curPos[0]; - - lastTime = glutGet(GLUT_ELAPSED_TIME); - lastPos[0] = curPos[0]; - lastPos[1] = curPos[1]; - lastPos[2] = curPos[2]; - glutPostRedisplay(); - } -} - -/*****************************************************************/ - -void -object(void) -{ - static int object; - object++; object %= 3; - switch (object) { - case 0: - drawObject = drawCube; - break; - case 1: - drawObject = drawDodecahedron; - break; - case 2: - drawObject = drawSphere; - break; - default: - break; - } -} - -void -texture(void) -{ - static int texture; - - texture++; texture %= 3; - switch (texture) { - case 0: - loadTexture = NULL; - textureEnabled = GL_FALSE; - break; - case 1: - loadTexture = loadImageTexture; - (*loadTexture)(); - textureEnabled = GL_TRUE; - break; - case 2: - loadTexture = loadSpotlightTexture; - (*loadTexture)(); - textureEnabled = GL_TRUE; - break; - default: - break; - } -} - -void help(void) { - printf("'h' - help\n"); - printf("'l' - toggle linear/nearest filter\n"); - printf("'s' - toggle projection frustum\n"); - printf("'t' - toggle projected texture\n"); - printf("'o' - toggle object\n"); - printf("'z' - increase zoom factor\n"); - printf("'Z' - decrease zoom factor\n"); - printf("left mouse - move view\n"); - printf("right mouse - move projection\n"); -} - -/*ARGSUSED1*/ -void -key(unsigned char key, int x, int y) { - switch(key) { - case '\033': - exit(EXIT_SUCCESS); - break; - case 'l': - linearFilter = !linearFilter; - (*loadTexture)(); - break; - case 's': - showProjection = !showProjection; - break; - case 't': - texture(); - break; - case 'o': - object(); - break; - case 'z': - zoomFactor += 1.0; - glPixelZoom(zoomFactor, zoomFactor); - glViewport(0, 0, winWidth/zoomFactor, winHeight/zoomFactor); - break; - case 'Z': - zoomFactor -= 1.0; - if (zoomFactor < 1.0) zoomFactor = 1.0; - glPixelZoom(zoomFactor, zoomFactor); - glViewport(0, 0, winWidth/zoomFactor, winHeight/zoomFactor); - break; - case 'h': help(); break; - } - glutPostRedisplay(); -} - -void -mouse(int button, int state, int x, int y) { - if(state == GLUT_DOWN) - startMotion(x, y, button, glutGet(GLUT_ELAPSED_TIME)); - else if (state == GLUT_UP) - stopMotion(x, y, button, glutGet(GLUT_ELAPSED_TIME)); - glutPostRedisplay(); -} - -void -reshape(int w, int h) -{ - winWidth = w; - winHeight = h; - glViewport(0, 0, w/zoomFactor, h/zoomFactor); -} - -void -usage(char **argv) -{ - fprintf(stderr, "usage: %s \n", argv[0]); - fprintf(stderr, "\n"); -} - -int -main(int argc, char **argv) -{ - glutInitWindowSize(512, 512); - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGBA|GLUT_DEPTH|GLUT_DOUBLE); - (void)glutCreateWindow("projtex"); - if (argc > 1) { - texFilename = argv[argc-1]; - } else { - texFilename = "../data/fendi.rgb"; - } - loadTexture = loadImageTexture; - drawObject = drawCube; - initialize(); - glutDisplayFunc(display); - glutKeyboardFunc(key); - glutReshapeFunc(reshape); - glutMouseFunc(mouse); - glutMotionFunc(trackMotion); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/advanced97/projtex.dsp b/lib/glut-3.7.6/progs/advanced97/projtex.dsp deleted file mode 100644 index ed88e0922..000000000 --- a/lib/glut-3.7.6/progs/advanced97/projtex.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="projtex" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=projtex - 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 "projtex.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 "projtex.mak" CFG="projtex - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "projtex - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "projtex - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "projtex - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "projtex - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "projtex - Win32 Release" -# Name "projtex - Win32 Debug" -# Begin Source File - -SOURCE=.\projtex.c -# End Source File -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# Begin Source File - -SOURCE=.\texture.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/sbias.c b/lib/glut-3.7.6/progs/advanced97/sbias.c deleted file mode 100644 index e0e1fe7a7..000000000 --- a/lib/glut-3.7.6/progs/advanced97/sbias.c +++ /dev/null @@ -1,192 +0,0 @@ -#include -#include -#include -#include -#include -#include "texture.h" - -static char defaultFile[] = "../data/mandrill.rgb"; -GLuint *img; -GLsizei w, h; -GLint comp; - -GLfloat scale[] = {1, 1, 1}, bias[] = {0, 0, 0}; -GLboolean changeScale = 1, changeBias = 1; -GLboolean changeR = 1, changeG = 1, changeB = 1; - -void init(void) -{ - glDrawBuffer(GL_FRONT); - glReadBuffer(GL_BACK); -} - -void load_img(const char *fname) -{ - img = read_texture(fname, &w, &h, &comp); - if (!img) { - fprintf(stderr, "Could not open %s\n", fname); - exit(1); - } -} - -void reshape(GLsizei winW, GLsizei winH) -{ - glViewport(0, 0, w, h); - glLoadIdentity(); - glOrtho(0, winW, 0, winH, 0, 5); -} - -void draw(void) -{ - GLenum err; - - glPixelTransferf(GL_RED_SCALE, 1); - glPixelTransferf(GL_GREEN_SCALE, 1); - glPixelTransferf(GL_BLUE_SCALE, 1); - glPixelTransferf(GL_RED_BIAS, 0); - glPixelTransferf(GL_GREEN_BIAS, 0); - glPixelTransferf(GL_BLUE_BIAS, 0); - - glClear(GL_COLOR_BUFFER_BIT); - glDrawBuffer(GL_BACK); - glRasterPos2i(0, 0); - glDrawPixels(w, h, GL_RGBA, GL_UNSIGNED_BYTE, img); - - - glPixelTransferf(GL_RED_SCALE, scale[0]); - glPixelTransferf(GL_GREEN_SCALE, scale[1]); - glPixelTransferf(GL_BLUE_SCALE, scale[2]); - glPixelTransferf(GL_RED_BIAS, bias[0]); - glPixelTransferf(GL_GREEN_BIAS, bias[1]); - glPixelTransferf(GL_BLUE_BIAS, bias[2]); - glDrawBuffer(GL_FRONT); - glCopyPixels(0, 0, w, h, GL_COLOR); - - err = glGetError(); - if (err != GL_NO_ERROR) printf("Error: %s\n", gluErrorString(err)); -} - -/* ARGSUSED1 */ -void key(unsigned char key, int x, int y) -{ - char change[][30] = {"Not changing", "Changing"}; - - switch(key) { - case 27: - exit(0); - case 's': case 'S': - changeScale = (changeScale == 0); - printf("%s scale\n", change[changeScale]); - break; - case 'i': case 'I': - changeBias = (changeBias == 0); - printf("%s bias\n", change[changeBias]); - break; - case 'r': case 'R': - changeR = (changeR == 0); - printf("%s red channel\n", change[changeR]); - break; - case 'g': case 'G': - changeG = (changeG == 0); - printf("%s green channel\n", change[changeG]); - break; - case 'b': case 'B': - changeB = (changeB == 0); - printf("%s blue channel\n", change[changeB]); - break; - case ' ': - changeScale = changeBias = changeR = changeG = changeB = 1; - scale[0] = scale[1] = scale[2] = 1; - bias[0] = bias[1] = bias[2] = 0; - printf("Resetting all\n"); - draw(); - break; - case '?': - printf("Scale:\n"); - printf("\tR: %f\n", scale[0]); - printf("\tG: %f\n", scale[1]); - printf("\tB: %f\n", scale[2]); - printf("Bias:\n"); - printf("\tR: %f\n", bias[0]); - printf("\tG: %f\n", bias[1]); - printf("\tB: %f\n\n", bias[2]); - } -} - -int lastX, lastY, curX, curY; - -void idle(void) -{ - float dScale, dBias; - - if (lastX != curX || lastY != curY) { - if (changeScale) { - dScale = (curX - lastX) / (float)w; - if (changeR) scale[0] += dScale; - if (changeG) scale[1] += dScale; - if (changeB) scale[2] += dScale; - } - if (changeBias) { - dBias = (curY - lastY) / (float)h; - if (changeR) bias[0] += dBias; - if (changeG) bias[1] += dBias; - if (changeB) bias[2] += dBias; - } - - glPixelTransferf(GL_RED_SCALE, scale[0]); - glPixelTransferf(GL_GREEN_SCALE, scale[1]); - glPixelTransferf(GL_BLUE_SCALE, scale[2]); - glPixelTransferf(GL_RED_BIAS, bias[0]); - glPixelTransferf(GL_GREEN_BIAS, bias[1]); - glPixelTransferf(GL_BLUE_BIAS, bias[2]); - - glRasterPos2i(0, 0); - glCopyPixels(0, 0, w, h, GL_COLOR); - - lastX = curX; - lastY = curY; - } -} - -void motion(int xpos, int ypos) -{ - curX = xpos; - curY = (h - ypos); -} - -/* ARGSUSED */ -void button(int button, int state, int xpos, int ypos) -{ - if (state == GLUT_DOWN) { - glutIdleFunc(idle); - curX = lastX = xpos; - curY = lastY = (h - ypos); - return; - } else { - glutIdleFunc(0); - } -} - -main(int argc, char *argv[]) -{ - glutInit(&argc, argv); - if (argc > 1) { - load_img(argv[1]); - } else { - load_img(defaultFile); - } - glutInitWindowSize(w, h); - glutInitWindowPosition(0, 0); - glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); - glutCreateWindow(argv[0]); - glutDisplayFunc(draw); - glutKeyboardFunc(key); - glutReshapeFunc(reshape); - glutMouseFunc(button); - glutMotionFunc(motion); - init(); - - glutMainLoop(); - return 0; -} - diff --git a/lib/glut-3.7.6/progs/advanced97/sbias.dsp b/lib/glut-3.7.6/progs/advanced97/sbias.dsp deleted file mode 100644 index 4b82758a2..000000000 --- a/lib/glut-3.7.6/progs/advanced97/sbias.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="sbias" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=sbias - 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 "sbias.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 "sbias.mak" CFG="sbias - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "sbias - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "sbias - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "sbias - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "sbias - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "sbias - Win32 Release" -# Name "sbias - Win32 Debug" -# Begin Source File - -SOURCE=.\sbias.c -# End Source File -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# Begin Source File - -SOURCE=.\texture.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/screendoor.c b/lib/glut-3.7.6/progs/advanced97/screendoor.c deleted file mode 100644 index 64575d53a..000000000 --- a/lib/glut-3.7.6/progs/advanced97/screendoor.c +++ /dev/null @@ -1,194 +0,0 @@ -#include -#include -#include -#include -#include - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -#ifndef __sgi -#define trunc(x) ((double)((int)(x))) -#endif - -#ifdef _WIN32 -#define random() ((long)rand() + (rand() << 15) + (rand() << 30)) -#endif - -GLUquadricObj *cone, *base, *qsphere; - -void create_stipple_pattern(GLuint *pat, GLfloat opacity) -{ - int x, y; - long threshold = (float)0x7fffffff * (1. - opacity); - - for (y = 0; y < 32; y++) { - pat[y] = 0; - for (x = 0; x < 32; x++) { - if (random() > threshold) pat[y] |= (1 << x); - } - } -} - -void init(void) -{ - static GLfloat lightpos[] = {.5, .75, 1.5, 1}; - GLuint spherePattern[32]; - - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - - cone = gluNewQuadric(); - base = gluNewQuadric(); - qsphere = gluNewQuadric(); - gluQuadricOrientation(base, GLU_INSIDE); - - create_stipple_pattern(spherePattern, .5); - glPolygonStipple((GLubyte *)spherePattern); -} - -void reshape(GLsizei w, GLsizei h) -{ - glViewport(0, 0, w, h); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(60, 1, .01, 10); - gluLookAt(0, 0, 2.577, 0, 0, -5, 0, 1, 0); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -void draw_room(void) -{ - /* material for the walls, floor, ceiling */ - static GLfloat wall_mat[] = {1.f, 1.f, 1.f, 1.f}; - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, wall_mat); - - glBegin(GL_QUADS); - - /* floor */ - glNormal3f(0, 1, 0); - glVertex3f(-1, -1, 1); - glVertex3f(1, -1, 1); - glVertex3f(1, -1, -1); - glVertex3f(-1, -1, -1); - - /* ceiling */ - glNormal3f(0, -1, 0); - glVertex3f(-1, 1, -1); - glVertex3f(1, 1, -1); - glVertex3f(1, 1, 1); - glVertex3f(-1, 1, 1); - - /* left wall */ - glNormal3f(1, 0, 0); - glVertex3f(-1, -1, -1); - glVertex3f(-1, -1, 1); - glVertex3f(-1, 1, 1); - glVertex3f(-1, 1, -1); - - /* right wall */ - glNormal3f(-1, 0, 0); - glVertex3f(1, 1, -1); - glVertex3f(1, 1, 1); - glVertex3f(1, -1, 1); - glVertex3f(1, -1, -1); - - /* far wall */ - glNormal3f(0, 0, 1); - glVertex3f(-1, -1, -1); - glVertex3f(1, -1, -1); - glVertex3f(1, 1, -1); - glVertex3f(-1, 1, -1); - - glEnd(); -} - -void draw_cone(void) -{ - static GLfloat cone_mat[] = {0.f, .5f, 1.f, 1.f}; - - glPushMatrix(); - glTranslatef(0, -1, 0); - glRotatef(-90, 1, 0, 0); - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, cone_mat); - gluCylinder(cone, .3, 0, 1.25, 20, 1); - gluDisk(base, 0., .3, 20, 1); - - glPopMatrix(); -} - -void draw_sphere(GLdouble angle) -{ - static GLfloat sphere_mat[] = {1.f, .5f, 0.f, 1.f}; - - glPushMatrix(); - glTranslatef(0, -.3, 0); - glRotatef(angle, 0, 1, 0); - glTranslatef(0, 0, .6); - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, sphere_mat); - gluSphere(qsphere, .3, 20, 20); - - glPopMatrix(); -} - -GLdouble get_secs(void) -{ - return glutGet(GLUT_ELAPSED_TIME) / 1000.0; -} - -void draw(void) -{ - GLenum err; - GLdouble secs; - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - draw_room(); - draw_cone(); - secs = get_secs(); - - /* draw the transparent object... */ - glEnable(GL_POLYGON_STIPPLE); - draw_sphere(secs * 360. / 10.); - glDisable(GL_POLYGON_STIPPLE); - - err = glGetError(); - if (err != GL_NO_ERROR) printf("Error: %s\n", gluErrorString(err)); - - glutSwapBuffers(); -} - -/* ARGSUSED1 */ -void key(unsigned char key, int x, int y) -{ - if (key == 27) exit(0); -} - -main(int argc, char *argv[]) -{ - glutInit(&argc, argv); - glutInitWindowSize(256, 256); - glutInitWindowPosition(0, 0); - glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); - glutCreateWindow(argv[0]); - glutDisplayFunc(draw); - glutIdleFunc(draw); - glutKeyboardFunc(key); - glutReshapeFunc(reshape); - init(); - - glutMainLoop(); - return 0; -} - diff --git a/lib/glut-3.7.6/progs/advanced97/screendoor.dsp b/lib/glut-3.7.6/progs/advanced97/screendoor.dsp deleted file mode 100644 index ef9450d91..000000000 --- a/lib/glut-3.7.6/progs/advanced97/screendoor.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="screendoor" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=screendoor - 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 "screendoor.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 "screendoor.mak" CFG="screendoor - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "screendoor - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "screendoor - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "screendoor - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "screendoor - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "screendoor - Win32 Release" -# Name "screendoor - Win32 Debug" -# Begin Source File - -SOURCE=.\screendoor.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/sm.c b/lib/glut-3.7.6/progs/advanced97/sm.c deleted file mode 100644 index 7f214a60b..000000000 --- a/lib/glut-3.7.6/progs/advanced97/sm.c +++ /dev/null @@ -1,112 +0,0 @@ -#include "stdlib.h" -#include "math.h" -#include -#include "sm.h" - -#ifdef _WIN32 -#define drand48() ((double)rand()/RAND_MAX) -#define srand48(x) (srand((x))) -#endif - -#if !defined(GL_VERSION_1_1) && !defined(GL_VERSION_1_2) -#define glBindTexture glBindTextureEXT -#endif - -typedef struct elem { - float x, y, z; /* current position */ - float dx, dy, dz; /* displacement */ - float size; /* scale factor */ - float ts; /* time stamp */ - float opacity; /* alpha value */ -} elem_t; - -typedef struct smoke { - float ox, oy, oz; /* origin */ - float dx, dy, dz; /* drift */ - int elems; - float intensity; - float min_size; - float max_size; - unsigned texture; - elem_t *elem; -} smoke_t; - -void * -new_smoke(float x, float y, float z, float dx, float dy, float dz, - int elems, float intensity, unsigned texture) { - int i; - smoke_t *s = malloc(sizeof(smoke_t)); - - s->ox = x; s->oy = y, s->oz = z; - s->dx = dx; s->dy = dy; s->dz = dz; - s->min_size = .1f; - s->max_size = 1.0; - s->elems = elems; - s->elem = malloc(sizeof(elem_t)*elems); - for(i = 0; i < elems; i++) { - s->elem[i].ts = (float)i/elems;; - s->elem[i].dx = -drand48()*1.5f; - s->elem[i].dy = drand48()*1.5f; - s->elem[i].dz = drand48()*1.5f; - } - s->intensity = intensity; - s->texture = texture; - return s; -} - -void -delete_smoke(void *smoke) { - smoke_t *s = smoke; - free(s->elem); - free(s); -} - -void -draw_smoke(void *smoke) { - smoke_t *s = smoke; - int i; - - glEnable(GL_BLEND); - glDepthMask(0); -#if 1 - glEnable(GL_TEXTURE_2D); -#else - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); -#endif - glBindTexture(GL_TEXTURE_2D, s->texture); - for(i = 0; i < s->elems; i++) { - elem_t *e = s->elem+i; - glPushMatrix(); - glTranslatef(e->x, e->y, e->z); - glScalef(e->size, e->size, 1.); - glColor4f(s->intensity,s->intensity,s->intensity,e->opacity); - glBegin(GL_QUADS); - glTexCoord2f(0, 0); glVertex3f(-1., -1., -0.); - glTexCoord2f(0, 1); glVertex3f(-1., 1., 0.); - glTexCoord2f(1, 1); glVertex3f( 1., 1., 0.); - glTexCoord2f(1, 0); glVertex3f( 1., -1., -0.); - glEnd(); - glPopMatrix(); - } - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - glDisable(GL_TEXTURE_2D); - glDepthMask(1); - glDisable(GL_BLEND); -} - -void -update_smoke(void *smoke, float tick) { - smoke_t *s = smoke; - int i; - - for(i = 0; i < s->elems; i++) { - elem_t *e = s->elem+i; - e->ts += tick; - if (e->ts > 1.0) e->ts = 0; - e->x = s->ox + s->dx*e->ts + e->dx*e->ts; - e->y = s->oy + s->dy*e->ts + e->dy*e->ts; - e->z = s->oz + s->dz*e->ts + e->dz*e->ts; - e->size = s->min_size + e->ts*s->max_size; - e->opacity = (1.0-e->ts); - } -} diff --git a/lib/glut-3.7.6/progs/advanced97/sm.h b/lib/glut-3.7.6/progs/advanced97/sm.h deleted file mode 100644 index ae7eb30f6..000000000 --- a/lib/glut-3.7.6/progs/advanced97/sm.h +++ /dev/null @@ -1,5 +0,0 @@ -void* new_smoke(float x, float y, float z, float dx, float dy, float dz, - int elems, float intensity, unsigned texture); -void delete_smoke(void *smoke); -void draw_smoke(void *smoke); -void update_smoke(void *smoke, float tick); diff --git a/lib/glut-3.7.6/progs/advanced97/smoke.c b/lib/glut-3.7.6/progs/advanced97/smoke.c deleted file mode 100644 index 5e8874b72..000000000 --- a/lib/glut-3.7.6/progs/advanced97/smoke.c +++ /dev/null @@ -1,397 +0,0 @@ -#include -#include -#include -#include -#include "texture.h" - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -#ifndef __sgi -/* Most math.h's do not define float versions of the trig functions. */ -#define sinf sin -#define cosf cos -#define atan2f atan2 -#endif - -static int texture = 1; -static float rot = 0; -static float opacity = 1.0; -static float intensity = 1.0; -static float size = .001, delta = 0; -static float scale = 1.; -static float transx, transy, rotx, roty; -static int ox = -1, oy = -1; -static int mot = 0; -#define PAN 1 -#define ROT 2 - -void -pan(int x, int y) { - transx += (x-ox)/500.; - transy -= (y-oy)/500.; - ox = x; oy = y; - glutPostRedisplay(); -} - -void -rotate(int x, int y) { - rotx += x-ox; - if (rotx > 360.) rotx -= 360.; - else if (rotx < -360.) rotx += 360.; - roty += y-oy; - if (roty > 360.) roty -= 360.; - else if (roty < -360.) roty += 360.; - ox = x; oy = y; - glutPostRedisplay(); -} - -void -motion(int x, int y) { - if (mot == PAN) pan(x, y); - else if (mot == ROT) rotate(x,y); -} - -void -mouse(int button, int state, int x, int y) { - if(state == GLUT_DOWN) { - switch(button) { - case GLUT_LEFT_BUTTON: - mot = PAN; - motion(ox = x, oy = y); - break; - case GLUT_RIGHT_BUTTON: - mot = ROT; - motion(ox = x, oy = y); - break; - case GLUT_MIDDLE_BUTTON: - break; - } - } else if (state == GLUT_UP) { - mot = 0; - } -} - -void afunc(void) { - static int state; - if (state ^= 1) { - glAlphaFunc(GL_GREATER, .01); - glEnable(GL_ALPHA_TEST); - } else { - glDisable(GL_ALPHA_TEST); - } -} - -void bfunc(void) { - static int state; - if (state ^= 1) { - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glEnable(GL_BLEND); - } else { - glDisable(GL_BLEND); - } -} - -void tfunc(void) { - texture ^= 1; -} - -void up(void) { scale += .1; } -void down(void) { scale -= .1; } -void left(void) { intensity -= .05f; if (intensity < 0.f) intensity = 0.0f; } -void right(void) { intensity += .05f; if (intensity > 1.f) intensity = 1.0f; } - -void help(void) { - printf("Usage: smoke [image]\n"); - printf("'h' - help\n"); - printf("'a' - toggle alpha test\n"); - printf("'b' - toggle blend\n"); - printf("'t' - toggle texturing\n"); - printf("'UP' - scale up\n"); - printf("'DOWN' - scale down\n"); - printf("'LEFT' - darken\n"); - printf("'RIGHT' - brighten\n"); - printf("left mouse - pan\n"); - printf("right mouse - rotate\n"); -} - -void init(char *filename) { - static unsigned *image; - static int width, height, components; - if (filename) { - image = read_texture(filename, &width, &height, &components); - if (image == NULL) { - fprintf(stderr, "Error: Can't load image file \"%s\".\n", - filename); - exit(EXIT_FAILURE); - } else { - printf("%d x %d image loaded\n", width, height); - } -#if 0 - if (components == 1) { - GLubyte *p = (GLubyte *)image; - int i; - for (i = 0; i < width*height; i++) { - p[i*4+3] = p[i*4+0]; - } - components = 2; - } -#endif - if (components != 2 && components != 4) { - printf("must be an RGBA or LA image\n"); - exit(EXIT_FAILURE); - } - } else { - int i, j; - unsigned char *img; - components = 4; width = height = 512; - image = (unsigned *) malloc(width*height*sizeof(unsigned)); - img = (unsigned char *)image; - for (j = 0; j < height; j++) - for (i = 0; i < width; i++) { - int w2 = width/2, h2 = height/2; - if (i & 32) - img[4*(i+j*width)+0] = 0xff; - else - img[4*(i+j*width)+1] = 0xff; - if (j&32) - img[4*(i+j*width)+2] = 0xff; - if ((i-w2)*(i-w2) + (j-h2)*(j-h2) > 64*64 && - (i-w2)*(i-w2) + (j-h2)*(j-h2) < 300*300) img[4*(i+j*width)+3] = 0xff; - } - - } - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexImage2D(GL_TEXTURE_2D, 0, components, width, - height, 0, GL_RGBA, GL_UNSIGNED_BYTE, - image); - glEnable(GL_TEXTURE_2D); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(50.,1.,.1,20.); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(0.,0.,-5.5); - glClearColor(.25f, .25f, .75f, .25f); - - glAlphaFunc(GL_GREATER, 0.016); - glEnable(GL_ALPHA_TEST); - - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHT0); - glEnable(GL_NORMALIZE); -} - -void -animate(void) { - if (delta > 8) { - delta = 0.f; - size = 0.f; - opacity = 1.f; - rot = 0.f; - } - size += .02f; - delta += .03f; - rot += .9f; - opacity -= .005f; - - glutPostRedisplay(); -} - -void -cube(void) { - glBegin(GL_QUADS); - glNormal3f(0.f, 0.f, -1.f); - glTexCoord2f(0.0, 0.0); glVertex3f(-1.0, -1.0, -1.0); - glTexCoord2f(1.0, 0.0); glVertex3f( 1.0, -1.0, -1.0); - glTexCoord2f(1.0, 1.0); glVertex3f( 1.0, 1.0, -1.0); - glTexCoord2f(0.0, 1.0); glVertex3f(-1.0, 1.0, -1.0); - - glNormal3f(0.f, 0.f, 1.f); - glTexCoord2f(0.0, 0.0); glVertex3f(-1.0, -1.0, 1.0); - glTexCoord2f(1.0, 0.0); glVertex3f( 1.0, -1.0, 1.0); - glTexCoord2f(1.0, 1.0); glVertex3f( 1.0, 1.0, 1.0); - glTexCoord2f(0.0, 1.0); glVertex3f(-1.0, 1.0, 1.0); - - glNormal3f(0.f, 1.f, 0.f); - glTexCoord2f(0.0, 0.0); glVertex3f(-1.0, 1.0, -1.0); - glTexCoord2f(1.0, 0.0); glVertex3f( 1.0, 1.0, -1.0); - glTexCoord2f(1.0, 1.0); glVertex3f( 1.0, 1.0, 1.0); - glTexCoord2f(0.0, 1.0); glVertex3f(-1.0, 1.0, 1.0); - - glNormal3f(0.f, -1.f, 0.f); - glTexCoord2f(0.0, 0.0); glVertex3f(-1.0, -1.0, -1.0); - glTexCoord2f(1.0, 0.0); glVertex3f( 1.0, -1.0, -1.0); - glTexCoord2f(1.0, 1.0); glVertex3f( 1.0, -1.0, 1.0); - glTexCoord2f(0.0, 1.0); glVertex3f(-1.0, -1.0, 1.0); - - glNormal3f( 1.f, 0.f, 0.f); - glTexCoord2f(0.0, 0.0); glVertex3f( 1.0, -1.0, -1.0); - glTexCoord2f(1.0, 0.0); glVertex3f( 1.0, 1.0, -1.0); - glTexCoord2f(1.0, 1.0); glVertex3f( 1.0, 1.0, 1.0); - glTexCoord2f(0.0, 1.0); glVertex3f( 1.0, -1.0, 1.0); - - glNormal3f(-1.f, 0.f, 0.f); - glTexCoord2f(0.0, 0.0); glVertex3f(-1.0, -1.0, -1.0); - glTexCoord2f(1.0, 0.0); glVertex3f(-1.0, 1.0, -1.0); - glTexCoord2f(1.0, 1.0); glVertex3f(-1.0, 1.0, 1.0); - glTexCoord2f(0.0, 1.0); glVertex3f(-1.0, -1.0, 1.0); - glEnd(); -} -static void calcMatrix(void); - -void display(void) { - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - - glLoadIdentity(); -#define RAD(x) (((x)*M_PI)/180.) - gluLookAt(-sinf(RAD(rotx))*5.5,transy,cosf(RAD(rotx))*5.5, 0.,0.,0., 0.,1.,0.); - - /* floor */ - glColor4f(0.f,.2f,0.f,1.f); - glBegin(GL_POLYGON); - glVertex3f(-4.0, -1.0, -4.0); - glVertex3f( 4.0, -1.0, -4.0); - glVertex3f( 4.0, -1.0, 4.0); - glVertex3f(-4.0, -1.0, 4.0); - glEnd(); - - glEnable(GL_COLOR_MATERIAL); - glEnable(GL_LIGHTING); - glColor3f(.3f,.3f,.3f); - glPushMatrix(); - glTranslatef(-1.f, -1.+.2f, -1.5f); - glScalef(.2f,.2f, .2f); - cube(); - glDisable(GL_LIGHTING); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(delta/2.f-1.f, delta-1.f, -1.5f); - calcMatrix(); - glScalef(size,size,1.); - if (texture) glEnable(GL_TEXTURE_2D); - glColor4f(intensity, intensity, intensity, opacity); - glRotatef(rot, 0., 0., 1.); - glDepthMask(0); - glBegin(GL_POLYGON); - glTexCoord2f(0.0, 0.0); glVertex2f(-1.0, -1.0); - glTexCoord2f(1.0, 0.0); glVertex2f(1.0, -1.0); - glTexCoord2f(1.0, 1.0); glVertex2f(1.0, 1.0); - glTexCoord2f(0.0, 1.0); glVertex2f(-1.0, 1.0); - glEnd(); - glDepthMask(1); - glPopMatrix(); - glDisable(GL_TEXTURE_2D); - - glutSwapBuffers(); -} - -void reshape(int w, int h) { - glViewport(0, 0, w, h); -} - -/* ARGSUSED1 */ -void -key(unsigned char key, int x, int y) { - switch(key) { - case 'a': afunc(); break; - case 'b': bfunc(); break; - case 'h': help(); break; - case 't': tfunc(); break; - case '\033': exit(EXIT_SUCCESS); break; - default: break; - } - glutPostRedisplay(); -} - -/* ARGSUSED1 */ -void -special(int key, int x, int y) { - switch(key) { - case GLUT_KEY_UP: up(); break; - case GLUT_KEY_DOWN: down(); break; - case GLUT_KEY_LEFT: left(); break; - case GLUT_KEY_RIGHT:right(); break; - } -} - -int main(int argc, char** argv) { - glutInitWindowSize(512, 512); - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE|GLUT_DEPTH); - (void)glutCreateWindow("smoke"); - init(argc == 1 ? "../data/smoke.bw" : argv[1]); - glutDisplayFunc(display); - glutKeyboardFunc(key); - glutSpecialFunc(special); - glutReshapeFunc(reshape); - glutMouseFunc(mouse); - glutMotionFunc(motion); - glutIdleFunc(animate); - glutMainLoop(); - return 0; -} - -void -printmat(float *m) { - int i; - for(i = 0; i < 4; i++) { - printf("%f %f %f %f\n", m[4*i+0], m[4*i+1], m[4*i+2], m[4*i+3]); - } -} - -void -buildRot(float theta, float x, float y, float z, float m[16]) { - float d = x*x + y*y + z*z; - float ct = cosf(RAD(theta)), st = sinf(RAD(theta)); - - /* normalize */ - if (d > 0) { - d = 1/d; - x *= d; - y *= d; - z *= d; - } - - m[ 0] = 1; m[ 1] = 0; m[ 2] = 0; m[ 3] = 0; - m[ 4] = 0; m[ 5] = 1; m[ 6] = 0; m[ 7] = 0; - m[ 8] = 0; m[ 9] = 0; m[10] = 1; m[11] = 0; - m[12] = 0; m[13] = 0; m[14] = 0; m[15] = 1; - - /* R = uu' + cos(theta)*(I-uu') + sin(theta)*S - * - * S = 0 -z y u' = (x, y, z) - * z 0 -x - * -y x 0 - */ - - m[0] = x*x + ct*(1-x*x) + st*0; - m[4] = x*y + ct*(0-x*y) + st*-z; - m[8] = x*z + ct*(0-x*z) + st*y; - - m[1] = y*x + ct*(0-y*x) + st*z; - m[5] = y*y + ct*(1-y*y) + st*0; - m[9] = y*z + ct*(0-y*z) + st*-x; - - m[2] = z*x + ct*(0-z*x) + st*-y; - m[6] = z*y + ct*(0-z*y) + st*x; - m[10]= z*z + ct*(1-z*z) + st*0; -} - -static void -calcMatrix(void) { - float mat[16]; - - glGetFloatv(GL_MODELVIEW_MATRIX, mat); - - buildRot(-180*atan2f(mat[8], mat[10])/M_PI, 0, 1, 0, mat); - glMultMatrixf(mat); -} diff --git a/lib/glut-3.7.6/progs/advanced97/smoke.dsp b/lib/glut-3.7.6/progs/advanced97/smoke.dsp deleted file mode 100644 index f1de91b74..000000000 --- a/lib/glut-3.7.6/progs/advanced97/smoke.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="smoke" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=smoke - 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 "smoke.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 "smoke.mak" CFG="smoke - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "smoke - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "smoke - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "smoke - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "smoke - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "smoke - Win32 Release" -# Name "smoke - Win32 Debug" -# Begin Source File - -SOURCE=.\smoke.c -# End Source File -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# Begin Source File - -SOURCE=.\texture.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/softshadow2.c b/lib/glut-3.7.6/progs/advanced97/softshadow2.c deleted file mode 100644 index d791e70fb..000000000 --- a/lib/glut-3.7.6/progs/advanced97/softshadow2.c +++ /dev/null @@ -1,632 +0,0 @@ - -/* softshadow2.c - by Simon Hui, 3Dfx Interactive */ - -/* Soft shadows using a shadow texture per polygon. Based on an algorithm */ -/* described by Paul Heckbert and Michael Herf of CMU; see their web site */ -/* http://www.cs.cmu.edu/ph/shadow.html for details. */ -/* */ -/* This program shows two methods of using precomputed, per-polygon textures */ -/* to display soft shadows. The first method is a simplified version of */ -/* Heckbert and Herf's algorithm: for each polygon a texture is created that */ -/* encodes the full radiance, including illumination and shadows, of the */ -/* polygon. The texture is created in a preprocessing step by rendering the */ -/* entire scene onto the polygon from the point of view of the light. The */ -/* advantage of this method is that the scene can be rerendered quickly (if */ -/* only the eye moves and the scene is static), since all lighting effects */ -/* have been precomputed and encoded in the texture. This method requires */ -/* GL_RGB textures. */ -/* */ -/* The second method uses the texture as an occlusion map: the texels */ -/* encode only the amount of occlusion by shadowing objects, not the full */ -/* radiance. The texture is then used to modulate the lighting of the */ -/* polygon during the rendering pass. This has the disadvantage of */ -/* requiring OpenGL lighting during scene rendering, but it does retain some */ -/* of the benefit of the first method in that all shadow effects are */ -/* precomputed. This method requires GL_LUMINANCE textures. */ -/* */ -/* The reason for including the occlusion map method is that some OpenGL */ -/* implementations support GL_RGB textures with low color resolution, */ -/* resulting in noticeable banding when using radiance maps. However, these */ -/* implementations may support a higher color resolution for GL_LUMINANCE */ -/* textures. */ -/* */ -/* To use occlusion maps instead of rediance maps, run this program with */ -/* "-o" on the command line. */ - -#include -#include -#include -#include - -#if !defined(GL_VERSION_1_1) && !defined(GL_VERSION_1_2) -#define glBindTexture glBindTextureEXT -#define glCopyTexImage2D glCopyTexImage2DEXT -#endif - -/* whether to use radiance maps or occlusion maps */ -static GLboolean radianceMap = GL_TRUE; - -static GLint winxsize = 480, winysize = 480; -static GLint texxsize = 128, texysize = 128; - -/* texture object names */ -const GLuint floorTexture = 1; -const GLuint shadowTextures = 2; - -static GLfloat lightpos[4] = { 70.f, 70.f, -320.f, 1.f }; - -/* number of shadow textures to make and use */ -static GLint numShadowTex; - -/* list of polygons that have shadow textures */ -GLfloat pts[][4][3] = { - /* floor */ - -100.f, -100.f, -320.f, - -100.f, -100.f, -520.f, - 100.f, -100.f, -320.f, - 100.f, -100.f, -520.f, - - /* left wall */ - -100.f, -100.f, -320.f, - -100.f, 100.f, -320.f, - -100.f, -100.f, -520.f, - -100.f, 100.f, -520.f, - - /* back wall */ - -100.f, -100.f, -520.f, - -100.f, 100.f, -520.f, - 100.f, -100.f, -520.f, - 100.f, 100.f, -520.f, - - /* right wall */ - 100.f, -100.f, -520.f, - 100.f, 100.f, -520.f, - 100.f, -100.f, -320.f, - 100.f, 100.f, -320.f, - - /* ceiling */ - -100.f, 100.f, -520.f, - -100.f, 100.f, -320.f, - 100.f, 100.f, -520.f, - 100.f, 100.f, -320.f, - - /* blue panel */ - -60.f, -40.f, -400.f, - -60.f, 70.f, -400.f, - -30.f, -40.f, -480.f, - -30.f, 70.f, -480.f, - - /* yellow panel */ - -40.f, -50.f, -400.f, - -40.f, 50.f, -400.f, - -10.f, -50.f, -450.f, - -10.f, 50.f, -450.f, - - /* red panel */ - -20.f, -60.f, -400.f, - -20.f, 30.f, -400.f, - 10.f, -60.f, -420.f, - 10.f, 30.f, -420.f, - - /* green panel */ - 0.f, -70.f, -400.f, - 0.f, 10.f, -400.f, - 30.f, -70.f, -395.f, - 30.f, 10.f, -395.f, -}; - -GLfloat materials[][4] = { - 1.0f, 1.0f, 1.0f, 1.0f, /* floor */ - 1.0f, 1.0f, 1.0f, 1.0f, /* left wall */ - 1.0f, 1.0f, 1.0f, 1.0f, /* back wall */ - 1.0f, 1.0f, 1.0f, 1.0f, /* right wall */ - 1.0f, 1.0f, 1.0f, 1.0f, /* ceiling */ - 0.2f, 0.5f, 1.0f, 1.0f, /* blue panel */ - 1.0f, 0.6f, 0.0f, 1.0f, /* yellow panel */ - 1.0f, 0.2f, 0.2f, 1.0f, /* red panel */ - 0.3f, 0.9f, 0.6f, 1.0f, /* green panel */ -}; - -/* some simple vector utility routines */ - -void -vcopy(GLfloat a[3], GLfloat b[3]) -{ - b[0] = a[0]; - b[1] = a[1]; - b[2] = a[2]; -} - -void -vnormalize(GLfloat v[3]) -{ - float m = sqrt(v[0]*v[0] + v[1]*v[1] + v[2]*v[2]); - v[0] /= m; - v[1] /= m; - v[2] /= m; -} - -void -vadd(GLfloat a[3], GLfloat b[3], GLfloat c[3]) -{ - c[0] = a[0] + b[0]; - c[1] = a[1] + b[1]; - c[2] = a[2] + b[2]; -} - -void -vsub(GLfloat a[3], GLfloat b[3], GLfloat c[3]) -{ - c[0] = a[0] - b[0]; - c[1] = a[1] - b[1]; - c[2] = a[2] - b[2]; -} - -void -vcross(GLfloat a[3], GLfloat b[3], GLfloat c[3]) -{ - c[0] = a[1] * b[2] - a[2] * b[1]; - c[1] = -(a[0] * b[2] - a[2] * b[0]); - c[2] = a[0] * b[1] - a[1] * b[0]; -} - -float -vdot(GLfloat a[3], GLfloat b[3]) -{ - return (a[0]*b[0] + a[1]*b[1] + a[2]*b[2]); -} - -void -findNormal(GLfloat pts[][3], GLfloat normal[3]) { - GLfloat a[3], b[3]; - - vsub(pts[1], pts[0], a); - vsub(pts[2], pts[0], b); - vcross(b, a, normal); - vnormalize(normal); -} - -static GLfloat origin[4] = { 0.f, 0.f, 0.f, 1.f }; -static GLfloat black[4] = { 0.f, 0.f, 0.f, 1.f }; -static GLfloat ambient[4] = { 0.2f, 0.2f, 0.2f, 1.f }; - -void -make_shadow_texture(int index, GLfloat eyept[3], GLfloat dx, GLfloat dy) -{ - GLfloat xaxis[3], yaxis[3], zaxis[3]; - GLfloat cov[3]; /* center of view */ - GLfloat pte[3]; /* plane to eye */ - GLfloat eye[3]; - GLfloat tmp[3], normal[3], dist; - GLfloat (*qpts)[3] = pts[index]; - GLfloat left, right, bottom, top; - GLfloat znear = 10.f, zfar = 600.f; - GLint n; - - /* For simplicity, we don't compute the transformation matrix described */ - /* in Heckbert and Herf's paper. The transformation and frustum used */ - /* here is much simpler. */ - - vcopy(eyept, eye); - vsub(qpts[1], qpts[0], yaxis); - vsub(qpts[2], qpts[0], xaxis); - vcross(yaxis, xaxis, zaxis); - - vnormalize(zaxis); - vnormalize(xaxis); /* x-axis of eye coord system, in object space */ - vnormalize(yaxis); /* y-axis of eye coord system, in object space */ - - /* jitter the eyepoint */ - eye[0] += xaxis[0] * dx; - eye[1] += xaxis[1] * dx; - eye[2] += xaxis[2] * dx; - eye[0] += yaxis[0] * dy; - eye[1] += yaxis[1] * dy; - eye[2] += yaxis[2] * dy; - - /* center of view is just eyepoint offset in direction of normal */ - vadd(eye, zaxis, cov); - - /* set up viewing matrix */ - glPushMatrix(); - glLoadIdentity(); - gluLookAt(eye[0], eye[1], eye[2], - cov[0], cov[1], cov[2], - yaxis[0], yaxis[1], yaxis[2]); - - /* compute a frustum that just encloses the polygon */ - vsub(qpts[0], eye, tmp); /* from eye to 0th vertex */ - left = vdot(tmp, xaxis); - vsub(qpts[2], eye, tmp); /* from eye to 2nd vertex */ - right = vdot(tmp, xaxis); - vsub(qpts[0], eye, tmp); /* from eye to 0th vertex */ - bottom = vdot(tmp, yaxis); - vsub(qpts[1], eye, tmp); /* from eye to 1st vertex */ - top = vdot(tmp, yaxis); - - /* scale the frustum values based on the distance to the polygon */ - vsub(qpts[0], eye, pte); - dist = fabs(vdot(zaxis, pte)); - left *= (znear/dist); - right *= (znear/dist); - bottom *= (znear/dist); - top *= (znear/dist); - - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - glFrustum(left, right, bottom, top, znear, zfar); - glMatrixMode(GL_MODELVIEW); - - if (radianceMap) { - glEnable(GL_LIGHTING); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, materials[index]); - } else { - glDisable(GL_LIGHTING); - } - glDisable(GL_TEXTURE_2D); - - for (n=0; n < numShadowTex; n++) { - qpts = pts[n]; - - if (radianceMap) { - glColor3f(1.f, 1.f, 1.f); - findNormal(qpts, normal); - glNormal3fv(normal); - if (n == index) { - /* draw this poly with ambient and diffuse lighting */ - glEnable(GL_LIGHT0); - } else { - /* draw other polys with ambient lighting only */ - glDisable(GL_LIGHT0); - } - } else { - if (n == index) { - /* this poly has full intensity, no occlusion */ - glColor3f(1.f, 1.f, 1.f); - } else { - /* all other polys just occlude the light */ - glColor3f(0.f, 0.f, 0.f); - } - } - glBegin(GL_TRIANGLE_STRIP); - glVertex3fv(qpts[0]); - glVertex3fv(qpts[1]); - glVertex3fv(qpts[2]); - glVertex3fv(qpts[3]); - glEnd(); - } - glPopMatrix(); - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); -} - -void make_all_shadow_textures(float eye[3], float dx, float dy) { - GLint texPerRow; - GLint n; - GLfloat x, y; - - texPerRow = (winxsize / texxsize); - for (n=0; n < numShadowTex; n++) { - y = (n / texPerRow) * texysize; - x = (n % texPerRow) * texxsize; - glViewport(x, y, texxsize, texysize); - make_shadow_texture(n, eye, dx, dy); - } - glViewport(0, 0, winxsize, winysize); -} - -void store_all_shadow_textures(void) { - GLint texPerRow; - GLint n, x, y; - GLubyte *texbuf; - - texbuf = (GLubyte *) malloc(texxsize * texysize * sizeof(int)); - - /* how many shadow textures can fit in the window */ - texPerRow = (winxsize / texxsize); - - for (n=0; n < numShadowTex; n++) { - GLenum format; - - x = (n % texPerRow) * texxsize; - y = (n / texPerRow) * texysize; - - glBindTexture(GL_TEXTURE_2D, shadowTextures + n); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); - - if (radianceMap) { - format = GL_RGB; - } else { - format = GL_LUMINANCE; - } - glCopyTexImage2D(GL_TEXTURE_2D, 0, format, x, y, texxsize, texysize, 0); - } - free(texbuf); -} - -/* menu choices */ -enum { - NOSHADOWS, SOFTSHADOWS, HARDSHADOWS, VIEWTEXTURE, VIEWSCENE, QUIT -}; - -GLint shadowMode = HARDSHADOWS; -GLboolean viewTextures = GL_FALSE; - -void -redraw(void) -{ - GLint n; - GLfloat normal[3]; - GLfloat (*qpts)[3]; - - glPushMatrix(); - glLoadIdentity(); - if (radianceMap && (shadowMode != NOSHADOWS)) { - glLightfv(GL_LIGHT0, GL_POSITION, origin); - } else { - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - } - glPopMatrix(); - - if (shadowMode == SOFTSHADOWS) { - GLfloat jitterSize; - GLfloat dx, dy; - GLint numSteps, i, j; - - /* size of the area to jitter the light in */ - jitterSize = 15.0; - - /* number of times along x and y to jitter */ - numSteps = 5; - - glClear(GL_ACCUM_BUFFER_BIT); - for (j=0; j < numSteps; j++) { - for (i=0; i < numSteps; i++) { - - /* compute jitter amount, centering the jitter steps around zero */ - dx = (i - (numSteps - 1.0) / 2.0) / (numSteps - 1.0) * jitterSize; - dy = (j - (numSteps - 1.0) / 2.0) / (numSteps - 1.0) * jitterSize; - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - make_all_shadow_textures(lightpos, dx, dy); - glAccum(GL_ACCUM, 1.0 / (numSteps * numSteps)); - if (viewTextures) { - glutSwapBuffers(); - } - } - } - glAccum(GL_RETURN, 1.0); - store_all_shadow_textures(); - - } else if (shadowMode == HARDSHADOWS) { - - /* make shadow textures from just one frame */ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_ACCUM_BUFFER_BIT); - make_all_shadow_textures(lightpos, 0, 0); - store_all_shadow_textures(); - if (viewTextures) { - glutSwapBuffers(); - } - } - if (viewTextures) { - glutSwapBuffers(); - return; - } - - glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); - glLoadIdentity(); - - glColor3f(1.f, 1.f, 1.f); - if (shadowMode == NOSHADOWS) { - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glDisable(GL_TEXTURE_2D); - for (n=0; n < numShadowTex; n++) { - qpts = pts[n]; - findNormal(qpts, normal); - glNormal3fv(normal); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, materials[n]); - glBegin(GL_TRIANGLE_STRIP); - glTexCoord2f(0,0); glVertex3fv(qpts[0]); - glTexCoord2f(0,1); glVertex3fv(qpts[1]); - glTexCoord2f(1,0); glVertex3fv(qpts[2]); - glTexCoord2f(1,1); glVertex3fv(qpts[3]); - glEnd(); - } - } else { - glEnable(GL_TEXTURE_2D); - - if (radianceMap) { - glDisable(GL_LIGHTING); - for (n=0; n < numShadowTex; n++) { - qpts = pts[n]; - glBindTexture(GL_TEXTURE_2D, shadowTextures + n); - glBegin(GL_TRIANGLE_STRIP); - glTexCoord2f(0,0); glVertex3fv(qpts[0]); - glTexCoord2f(0,1); glVertex3fv(qpts[1]); - glTexCoord2f(1,0); glVertex3fv(qpts[2]); - glTexCoord2f(1,1); glVertex3fv(qpts[3]); - glEnd(); - } - } else { - - /* Unfortunately, using the texture as an occlusion map requires two */ - /* passes: one in which the occlusion map modulates the diffuse */ - /* lighting, and one in which the ambient lighting is added in. It's */ - /* incorrect to modulate the ambient lighting, but if the result is */ - /* acceptable to you, you can include it in the first pass and */ - /* omit the second pass. */ - - /* draw only with diffuse light, modulating it with the texture */ - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glLightModelfv(GL_LIGHT_MODEL_AMBIENT, black); - for (n=0; n < numShadowTex; n++) { - qpts = pts[n]; - findNormal(qpts, normal); - glNormal3fv(normal); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, materials[n]); - glBindTexture(GL_TEXTURE_2D, shadowTextures + n); - glBegin(GL_TRIANGLE_STRIP); - glTexCoord2f(0,0); glVertex3fv(qpts[0]); - glTexCoord2f(0,1); glVertex3fv(qpts[1]); - glTexCoord2f(1,0); glVertex3fv(qpts[2]); - glTexCoord2f(1,1); glVertex3fv(qpts[3]); - glEnd(); - } - - /* add in the ambient lighting */ - glDisable(GL_LIGHTING); - glDisable(GL_TEXTURE_2D); - glEnable(GL_BLEND); - glBlendFunc(GL_ONE, GL_ONE); - glDepthFunc(GL_LEQUAL); - for (n=0; n < numShadowTex; n++) { - qpts = pts[n]; - glColor4f(ambient[0] * materials[n][0], - ambient[1] * materials[n][1], - ambient[2] * materials[n][2], - ambient[3] * materials[n][3]); - glBegin(GL_TRIANGLE_STRIP); - glTexCoord2f(0,0); glVertex3fv(qpts[0]); - glTexCoord2f(0,1); glVertex3fv(qpts[1]); - glTexCoord2f(1,0); glVertex3fv(qpts[2]); - glTexCoord2f(1,1); glVertex3fv(qpts[3]); - glEnd(); - } - /* restore the ambient colors to their defaults */ - glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient); - } - } - - /* blend in the checkerboard floor */ - glEnable(GL_BLEND); - glBlendFunc(GL_ZERO, GL_SRC_COLOR); - glDepthFunc(GL_LEQUAL); - glEnable(GL_TEXTURE_2D); - glBindTexture(GL_TEXTURE_2D, floorTexture); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, materials[0]); - glTranslatef(0.0f, 0.05f, 0.0f); - glColor3f(1.f, 1.f, 1.f); - glBegin(GL_TRIANGLE_STRIP); - glNormal3f(0.f, 1.f, 0.f); - glTexCoord2f(0.f, 0.f); glVertex3fv(pts[0][0]); - glTexCoord2f(0.f, 1.f); glVertex3fv(pts[0][1]); - glTexCoord2f(1.f, 0.f); glVertex3fv(pts[0][2]); - glTexCoord2f(1.f, 1.f); glVertex3fv(pts[0][3]); - glEnd(); - - /* undo some state settings that we did above */ - glDisable(GL_BLEND); - glDisable(GL_TEXTURE_2D); - glDepthFunc(GL_LESS); - glTranslatef(0.0f, -0.05f, 0.0f); - -glutSwapBuffers(); -} - -void -menu(int mode) -{ - switch (mode) { - case NOSHADOWS: - case SOFTSHADOWS: - case HARDSHADOWS: - shadowMode = mode; - break; - case VIEWTEXTURE: - viewTextures = GL_TRUE; - break; - case VIEWSCENE: - viewTextures = GL_FALSE; - break; - case QUIT: - exit(0); - } - glutPostRedisplay(); -} - -/* Make a checkerboard texture for the floor. */ -GLfloat * -make_texture(int maxs, int maxt) -{ - GLint s, t; - static GLfloat *texture; - - texture = (GLfloat *) malloc(maxs * maxt * sizeof(GLfloat)); - for (t = 0; t < maxt; t++) { - for (s = 0; s < maxs; s++) { - texture[s + maxs * t] = ((s >> 4) & 0x1) ^ ((t >> 4) & 0x1); - } - } - return texture; -} - -/* ARGSUSED1 */ -void -keyboard(unsigned char key, int x, int y) -{ - if (key == 27) /* ESC */ - exit(0); -} - -int -main(int argc, char *argv[]) -{ - GLfloat *tex; - GLint i; - - for (i = 1; i < argc; ++i) { - if (!strcmp("-o", argv[i])) { - /* use textures as occlusion maps rather than radiance maps */ - radianceMap = GL_FALSE; - } - } - - glutInit(&argc, argv); - glutInitWindowSize(winxsize, winysize); - glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_ACCUM | GLUT_SINGLE); - (void) glutCreateWindow("soft shadows"); - glutDisplayFunc(redraw); - glutKeyboardFunc(keyboard); - - glutCreateMenu(menu); - glutAddMenuEntry("No Shadows", NOSHADOWS); - glutAddMenuEntry("Soft Shadows", SOFTSHADOWS); - glutAddMenuEntry("Hard Shadows", HARDSHADOWS); - glutAddMenuEntry("View Textures", VIEWTEXTURE); - glutAddMenuEntry("View Scene", VIEWSCENE); - glutAddMenuEntry("Quit", QUIT); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - /* set up perspective projection */ - glMatrixMode(GL_PROJECTION); - glFrustum(-30., 30., -30., 30., 100., 640.); - glMatrixMode(GL_MODELVIEW); - - /* turn on features */ - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glCullFace(GL_BACK); - glLightfv(GL_LIGHT0, GL_AMBIENT, black); - - /* number of shadow textures to make */ - numShadowTex = sizeof(pts) / sizeof(pts[0]); - - tex = make_texture(texxsize, texysize); - glBindTexture(GL_TEXTURE_2D, floorTexture); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexImage2D(GL_TEXTURE_2D, 0, 1, texxsize, texysize, 0, GL_RED, GL_FLOAT, - tex); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); - free(tex); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/advanced97/softshadow2.dsp b/lib/glut-3.7.6/progs/advanced97/softshadow2.dsp deleted file mode 100644 index 91d661937..000000000 --- a/lib/glut-3.7.6/progs/advanced97/softshadow2.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="softshadow2" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=softshadow2 - 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 "softshadow2.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 "softshadow2.mak" CFG="softshadow2 - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "softshadow2 - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "softshadow2 - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "softshadow2 - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "softshadow2 - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "softshadow2 - Win32 Release" -# Name "softshadow2 - Win32 Debug" -# Begin Source File - -SOURCE=.\softshadow2.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/spectral.c b/lib/glut-3.7.6/progs/advanced97/spectral.c deleted file mode 100644 index 4335f04c0..000000000 --- a/lib/glut-3.7.6/progs/advanced97/spectral.c +++ /dev/null @@ -1,518 +0,0 @@ -/* spectral.c - by Simon Hui, 3Dfx Interactive */ - -/* make a noise texture from multiple frequencies of noise */ - -#include -#include -#include -#include - -#if !defined(GL_VERSION_1_1) && !defined(GL_VERSION_1_2) -#define glBindTexture glBindTextureEXT -#endif - -static int texxsize = 256, texysize = 256; -static int winxsize = 512, winysize = 512; - -/* the highest and lowest octaves in the final noise */ -static int minoctave = 1; -static int maxoctave = 6; - -static GLenum ifmt = GL_LUMINANCE; - -/* texture object names */ -static GLuint basistex = 1; -static GLuint noisetex = 2; -static GLuint spectraltex = 6; -static GLuint abstex = 7; - -int -logOf(int n) { - int i=0; - for (i=-1; n > 0; i++) { - n >>= 1; - } - return i; -} - -void -init_texture(void) { - int i, j, n; - int w, h; - unsigned char *basis, *tex; - - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - basis = (unsigned char *) malloc(texxsize * texysize); - w = texxsize / 2; - h = texysize / 2; - for (j=0; j < h; j++) { - for (i=0; i < w; i++) { - GLint r; - float u = i / (w - 1.0); - float v = j / (h - 1.0); - float f = 3 * u * u - 2 * u * u * u; - float g = 3 * v * v - 2 * v * v * v; - - /* basis is a bicubic spline */ - r = f * g * 0xff; - - /* reflect around x and y axes */ - basis[j * texxsize + i] = r; - basis[j * texxsize + texxsize-i-1] = r; - basis[(texysize-j-1) * texxsize + i] = r; - basis[(texysize-j-1) * texxsize + texxsize-i-1] = r; - } - } - glBindTexture(GL_TEXTURE_2D, basistex); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, texxsize, texysize, 0, - GL_RED, GL_UNSIGNED_BYTE, basis); - free(basis); - - tex = (unsigned char *) malloc(4 * texxsize * texysize); - for (n=0; n < 4; n++) { - for (j=0; j < texysize; j++) { - for (i=0; i < texxsize; i++) { - int r = rand(); - - /* mix it up a little more */ - r = ((r & 0xff) ^ ((r & 0xff00) >> 8)) & 0xff; - - /* For simplicity and because some opengl implementations offer */ - /* more texture color depth for luminance textures than rgb ones, */ - /* we use a luminance texture for the random noise. However, you */ - /* can make the texture rgb instead, and store different random */ - /* values for r, g, and b; this is especially useful if using */ - /* noise distortion below, because you'll get different distortion */ - /* values for s and t. */ - tex[j*texxsize + i] = r; - } - } - glBindTexture(GL_TEXTURE_2D, noisetex + n); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, texxsize, texysize, 0, - GL_RED, GL_UNSIGNED_BYTE, tex); - } - free(tex); -} - -void -init(void) { - glClearColor(0.0, 0.0, 0.0, 1.0); - glMatrixMode(GL_PROJECTION); - glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); - glMatrixMode(GL_MODELVIEW); - glViewport(0, 0, winxsize, winysize); - glDisable(GL_DITHER); - init_texture(); -} - -void -draw_basis(int tsize, int ssize, int xadj, int yadj) { - float tilessize = 1.0 / ssize; - float tiletsize = 1.0 / tsize; - float xoff = (xadj - 0.5) * 0.5 * tilessize; - float yoff = (yadj - 0.5) * 0.5 * tiletsize; - float xo, yo; - int i, j; - - glBindTexture(GL_TEXTURE_2D, basistex); - glMatrixMode(GL_TEXTURE); - glLoadIdentity(); - - /* draw as many copies of the basis function as needed for this frequency */ - for (j=0; j < tsize; j++) { - for (i=0; i < ssize; i++) { - xo = xoff + i * tilessize; - yo = yoff + j * tiletsize; - glBegin(GL_TRIANGLE_STRIP); - glTexCoord2f(0.f, 0.f); glVertex2f(xo, yo); - glTexCoord2f(0.f, 1.f); glVertex2f(xo, yo + tiletsize); - glTexCoord2f(1.f, 0.f); glVertex2f(xo + tilessize, yo); - glTexCoord2f(1.f, 1.f); glVertex2f(xo + tilessize, yo + tiletsize); - glEnd(); - } - } - glFinish(); -} - -void -draw_noise_texture(int tsize, int ssize, int xadj, int yadj, int texname) { - float tilessize = 1.0 / ssize; - float tiletsize = 1.0 / tsize; - float xoff = (xadj - 0.5) * 0.5 * tilessize; - float yoff = (yadj - 0.5) * 0.5 * tiletsize; - float scale = 1.0 / (texxsize / ssize); - - glBindTexture(GL_TEXTURE_2D, texname); - - /* scale the texture matrix to get a noise pattern of desired frequency */ - glMatrixMode(GL_TEXTURE); - glLoadIdentity(); - glScalef(scale,scale,scale); - - glBegin(GL_TRIANGLE_STRIP); - glTexCoord2f(0.f, 0.f); glVertex2f(xoff, yoff); - glTexCoord2f(0.f, 1.f); glVertex2f(xoff, yoff + 1.0); - glTexCoord2f(1.f, 0.f); glVertex2f(xoff + 1.0, yoff); - glTexCoord2f(1.f, 1.f); glVertex2f(xoff + 1.0, yoff + 1.0); - glEnd(); - glFlush(); -} - -static float wscale = 0.60; -static unsigned int **octbufs, *spectralbuf, *absbuf; - -void -make_octaves(void) { - int w, h, i; - int octaves = maxoctave - minoctave + 1; - float weight, sumweight; - - glBlendFunc(GL_ZERO, GL_SRC_COLOR); - glEnable(GL_TEXTURE_2D); - - /* find the total weight */ - weight = 1.0; - sumweight = 0; - for (i=0; i < octaves; i++) { - sumweight += weight; - weight *= wscale; - } - octbufs = (unsigned int **) malloc(octaves * sizeof(unsigned int *)); - - weight = 1.0; - w = h = (1 << minoctave); - for (i=0; i < octaves; i++) { - octbufs[i] = (unsigned int *) malloc(sizeof(unsigned int) * - winxsize * winysize); - glClear(GL_COLOR_BUFFER_BIT); - glDisable(GL_BLEND); - draw_basis(w, h, 0, 0); - glEnable(GL_BLEND); - draw_noise_texture(w, h, 0, 0, noisetex); - glAccum(GL_LOAD, 1.0); - - glClear(GL_COLOR_BUFFER_BIT); - glDisable(GL_BLEND); - draw_basis(w, h, 1, 0); - glEnable(GL_BLEND); - draw_noise_texture(w, h, 1, 0, noisetex + 1); - glAccum(GL_ACCUM, 1.0); - - glClear(GL_COLOR_BUFFER_BIT); - glDisable(GL_BLEND); - draw_basis(w, h, 0, 1); - glEnable(GL_BLEND); - draw_noise_texture(w, h, 0, 1, noisetex + 2); - glAccum(GL_ACCUM, 1.0); - - glClear(GL_COLOR_BUFFER_BIT); - glDisable(GL_BLEND); - draw_basis(w, h, 1, 1); - glEnable(GL_BLEND); - draw_noise_texture(w, h, 1, 1, noisetex + 3); - glAccum(GL_ACCUM, 1.0); - - glDisable(GL_BLEND); - glAccum(GL_RETURN, 1.0); - glReadPixels(0, 0, winxsize, winysize, GL_RGBA, GL_UNSIGNED_BYTE, - octbufs[i]); - w <<= 1; - h <<= 1; - } - glDisable(GL_TEXTURE_2D); -} - -static GLboolean need_remake_octaves = GL_TRUE; -static GLboolean need_remake_spectral = GL_TRUE; -static GLboolean need_remake_abs_noise = GL_TRUE; - -void -make_spectral_noise(void) { - int i; - int octaves = maxoctave - minoctave + 1; - float weight, sumweight; - - if (need_remake_octaves) { - make_octaves(); - need_remake_octaves = GL_FALSE; - } - /* find the total weight */ - weight = 1.0; - sumweight = 0; - for (i=0; i < octaves; i++) { - sumweight += weight; - weight *= wscale; - } - glClear(GL_COLOR_BUFFER_BIT | GL_ACCUM_BUFFER_BIT); - weight = 1.0; - for (i=0; i < octaves; i++) { - glDrawPixels(winxsize, winysize, GL_RGBA, GL_UNSIGNED_BYTE, - (GLvoid *) octbufs[i]); - glAccum(GL_ACCUM, weight/sumweight); - weight *= wscale; - } - - /* save image in a texture */ - glAccum(GL_RETURN, 1.0); - spectralbuf = (unsigned int *) malloc(4 * winxsize * winysize); - glReadPixels(0, 0, winxsize, winysize, GL_RGBA, GL_UNSIGNED_BYTE, - spectralbuf); - glBindTexture(GL_TEXTURE_2D, spectraltex); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexImage2D(GL_TEXTURE_2D, 0, ifmt, winxsize, winysize, 0, - GL_RGBA, GL_UNSIGNED_BYTE, spectralbuf); -} - -void -make_abs_noise(void) { - unsigned int *negbuf = (unsigned int *) malloc(4 * winxsize * winysize); - unsigned int *posbuf = (unsigned int *) malloc(4 * winxsize * winysize); - - if (need_remake_spectral) { - make_spectral_noise(); - need_remake_spectral = GL_FALSE; - } - glDrawPixels(winxsize, winysize, GL_RGBA, GL_UNSIGNED_BYTE, - (GLvoid *) spectralbuf); - glAccum(GL_LOAD, 1.0); - - /* make it signed */ - glAccum(GL_ADD, -0.5); - - /* get the positive part of the noise */ - glAccum(GL_RETURN, 2.0); - glReadPixels(0, 0, winxsize, winysize, GL_RGBA, GL_UNSIGNED_BYTE, - (GLvoid *) negbuf); - - /* invert the negative part of the noise */ - glAccum(GL_RETURN, -2.0); - glReadPixels(0, 0, winxsize, winysize, GL_RGBA, GL_UNSIGNED_BYTE, - (GLvoid *) posbuf); - - /* add positive and inverted negative together, and you get abs() */ - glClear(GL_COLOR_BUFFER_BIT); - glEnable(GL_BLEND); - glBlendFunc(GL_ONE, GL_ONE); - glDrawPixels(winxsize, winysize, GL_RGBA, GL_UNSIGNED_BYTE, - (GLvoid *) posbuf); - glDrawPixels(winxsize, winysize, GL_RGBA, GL_UNSIGNED_BYTE, - (GLvoid *) negbuf); - - /* invert the colors so that peaks are bright instead of dark */ - glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ZERO); - glColor4f(1,1,1,1); - glBegin(GL_TRIANGLE_STRIP); - glVertex2f(0,0); - glVertex2f(0,1); - glVertex2f(1,0); - glVertex2f(1,1); - glEnd(); - glDisable(GL_BLEND); - - free(posbuf); - free(negbuf); - - /* save image in a texture */ - absbuf = (unsigned int *) malloc(4 * winxsize * winysize); - glReadPixels(0, 0, winxsize, winysize, GL_RGBA, GL_UNSIGNED_BYTE, - (GLvoid *) absbuf); - glBindTexture(GL_TEXTURE_2D, abstex); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexImage2D(GL_TEXTURE_2D, 0, ifmt, winxsize, winysize, 0, - GL_RGBA, GL_UNSIGNED_BYTE, absbuf); -} - -static GLboolean show_abs = GL_FALSE; -static GLboolean show_distort = GL_FALSE; -static GLboolean mapcolors = GL_FALSE; -static float distfactor = 0.20; - -void -display(void) { - if (need_remake_spectral) { - make_spectral_noise(); - need_remake_spectral = GL_FALSE; - } - if (show_abs) { - if (need_remake_abs_noise) { - make_abs_noise(); - need_remake_abs_noise = GL_FALSE; - } - glBindTexture(GL_TEXTURE_2D, abstex); - } else { - glBindTexture(GL_TEXTURE_2D, spectraltex); - } - - glClear(GL_COLOR_BUFFER_BIT); - glEnable(GL_TEXTURE_2D); - glMatrixMode(GL_TEXTURE); - glLoadIdentity(); - - if (show_distort) { - /* Use values in the spectral texture to distort the texture being */ - /* viewed, by jittering the texture coordinates. */ - - float x, y0, y1; - float s, t0, t1; - float ds, dt; - unsigned int pix0, pix1; - int vrows = 64, vcols = 64; - int i, j; - - for (j=0; j < (vrows - 1); j++) { - t0 = y0 = j / (vrows - 1.0); - t1 = y1 = (j + 1) / (vrows - 1.0); - - glBegin(GL_TRIANGLE_STRIP); - for (i=0; i < vcols; i++) { - s = x = i / (vcols - 1.0); - pix0 = spectralbuf[j * winxsize + i]; - pix1 = spectralbuf[(j+1) * winxsize + i]; - - /* Use green component of noise to distort S coord, */ - /* and blue component to distort T coord. Subtract */ - /* 127.5 to make it signed, and scale by distfactor.*/ - - ds = ((pix0 & 0x00ff0000) >> 16); - dt = ((pix0 & 0x0000ff00) >> 8); - ds = (ds - 127.5) / 127.5 * distfactor; - dt = (dt - 127.5) / 127.5 * distfactor; - glTexCoord2f(s + ds, t0 + dt); glVertex2f(x, y0); - ds = ((pix1 & 0x00ff0000) >> 16); - dt = ((pix1 & 0x0000ff00) >> 8); - ds = (ds - 127.5) / 127.5 * distfactor; - dt = (dt - 127.5) / 127.5 * distfactor; - glTexCoord2f(s + ds, t1 + dt); glVertex2f(x, y1); - } - glEnd(); - } - } else { - glBegin(GL_TRIANGLE_STRIP); - glTexCoord2f(0, 0); glVertex2f(0, 0); - glTexCoord2f(0, 1); glVertex2f(0, 1); - glTexCoord2f(1, 0); glVertex2f(1, 0); - glTexCoord2f(1, 1); glVertex2f(1, 1); - glEnd(); - } - glDisable(GL_TEXTURE_2D); - - if (mapcolors) { - /* Map the gray values of the image into colors so that the texture */ - /* looks like flames. We do that by defining appropriate splines for */ - /* red, green, and blue. */ - - float r, g, b; - float rt = 0.8; - float gt = 0.3; - float bt = 0.1; - int i, j; - unsigned char *c; - unsigned int *mapbuf = (unsigned int *) malloc(4 * winxsize * winysize); - - glReadPixels(0, 0, winxsize, winysize, GL_RGBA, GL_UNSIGNED_BYTE, - mapbuf); - - for (j=0; j < winysize; j++) { - for (i=0; i < winxsize; i++) { - c = (unsigned char *) &mapbuf[j * winxsize + i]; - r = c[0] / 255.0; - g = c[1] / 255.0; - b = c[2] / 255.0; - - if (r < (1-rt)) { - r = 0.0; - } else { - float k = (r - (1.0 - rt)) / rt; - r = (3.0*k*k - 2.0*k*k*k) * 255.0; - } - if (g < (1-gt)) { - g = 0.0; - } else { - float k = (g - (1.0 - gt)) / gt; - g = (3.0*k*k - 2.0*k*k*k) * 255.0; - } - if (b < (1-bt)) { - b = 0.0; - } else { - float k = (b - (1.0 - bt)) / bt; - b = (3.0*k*k - 2.0*k*k*k) * 255.0; - } - c[0] = r; - c[1] = g; - c[2] = b; - } - } - glDrawPixels(winxsize, winysize, GL_RGBA, GL_UNSIGNED_BYTE, - (GLvoid *) mapbuf); - free(mapbuf); - } - glFlush(); -} - -void -reshape(int w, int h) { - glViewport(0, 0, w, h); - glutPostRedisplay(); -} - -enum { - TOGGLE_ABS, TOGGLE_DISTORT, MORE_DISTORT, LESS_DISTORT, TOGGLE_MAP_COLORS, - FIRE, QUIT -}; - -void -menu(int value) { - switch (value) { - case TOGGLE_ABS: - show_abs = !show_abs; - break; - case TOGGLE_DISTORT: - show_distort = !show_distort; - break; - case MORE_DISTORT: - if (distfactor > 0.05) distfactor -= 0.05; - break; - case LESS_DISTORT: - if (distfactor < 1.00) distfactor += 0.05; - break; - case TOGGLE_MAP_COLORS: - mapcolors = !mapcolors; - break; - case FIRE: - mapcolors = GL_TRUE; - show_distort = GL_TRUE; - show_abs = GL_TRUE; - break; - case QUIT: - exit(0); - } - glutPostRedisplay(); -} - -int -main(int argc, char** argv) { - glutInit(&argc, argv); - glutInitWindowSize(winxsize, winysize); - glutInitDisplayMode(GLUT_RGBA | GLUT_ACCUM); - (void)glutCreateWindow("spectral noise function"); - init(); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glutCreateMenu(menu); - glutAddMenuEntry("Toggle Absolute Value", TOGGLE_ABS); - glutAddMenuEntry("Toggle Noise Distortion", TOGGLE_DISTORT); - glutAddMenuEntry("Decrease Distortion", MORE_DISTORT); - glutAddMenuEntry("Increase Distortion", LESS_DISTORT); - glutAddMenuEntry("Toggle Color Mapping", TOGGLE_MAP_COLORS); - glutAddMenuEntry("Simulation of Fire", FIRE); - glutAddMenuEntry("Quit", QUIT); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/advanced97/spectral.dsp b/lib/glut-3.7.6/progs/advanced97/spectral.dsp deleted file mode 100644 index f40c17c64..000000000 --- a/lib/glut-3.7.6/progs/advanced97/spectral.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="spectral" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=spectral - 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 "spectral.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 "spectral.mak" CFG="spectral - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "spectral - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "spectral - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "spectral - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "spectral - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "spectral - Win32 Release" -# Name "spectral - Win32 Debug" -# Begin Source File - -SOURCE=.\spectral.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/sphere.c b/lib/glut-3.7.6/progs/advanced97/sphere.c deleted file mode 100644 index 0d2975804..000000000 --- a/lib/glut-3.7.6/progs/advanced97/sphere.c +++ /dev/null @@ -1,185 +0,0 @@ -#include -#include -#include - -#ifndef __sgi -/* Most math.h's do not define float versions of the math functions. */ -#define sqrtf(x) ((float)sqrt((x))) -#endif - -/* sphere tessellation code based on code originally - * written by Jon Leech (leech@cs.unc.edu) 3/24/89 - */ - -typedef struct { - float x, y, z; -} point; - -typedef struct { - point pt[3]; -} triangle; - -/* six equidistant points lying on the unit sphere */ -#define XPLUS { 1, 0, 0 } /* X */ -#define XMIN { -1, 0, 0 } /* -X */ -#define YPLUS { 0, 1, 0 } /* Y */ -#define YMIN { 0, -1, 0 } /* -Y */ -#define ZPLUS { 0, 0, 1 } /* Z */ -#define ZMIN { 0, 0, -1 } /* -Z */ - -/* for icosahedron */ -#define CZ (0.866025403) /* cos(30) */ -#define SZ (0.5) /* sin(30) */ -#define C1 (0.951056516) /* cos(18), */ -#define S1 (0.309016994) /* sin(18) */ -#define C2 (0.587785252) /* cos(54), */ -#define S2 (0.809016994) /* sin(54) */ -#define X1 (C1*CZ) -#define Y1 (S1*CZ) -#define X2 (C2*CZ) -#define Y2 (S2*CZ) - -#define Ip0 {0., 0., 1.} -#define Ip1 {-X2, -Y2, SZ} -#define Ip2 {X2, -Y2, SZ} -#define Ip3 {X1, Y1, SZ} -#define Ip4 {0, CZ, SZ} -#define Ip5 {-X1, Y1, SZ} - -#define Im0 {-X1, -Y1, -SZ} -#define Im1 {0, -CZ, -SZ} -#define Im2 {X1, -Y1, -SZ} -#define Im3 {X2, Y2, -SZ} -#define Im4 {-X2, Y2, -SZ} -#define Im5 {0., 0., -1.} - -/* vertices of a unit icosahedron */ -static triangle icosahedron[20]= { - /* front pole */ - { {Ip0, Ip1, Ip2}, }, - { {Ip0, Ip5, Ip1}, }, - { {Ip0, Ip4, Ip5}, }, - { {Ip0, Ip3, Ip4}, }, - { {Ip0, Ip2, Ip3}, }, - - /* mid */ - { {Ip1, Im0, Im1}, }, - { {Im0, Ip1, Ip5}, }, - { {Ip5, Im4, Im0}, }, - { {Im4, Ip5, Ip4}, }, - { {Ip4, Im3, Im4}, }, - { {Im3, Ip4, Ip3}, }, - { {Ip3, Im2, Im3}, }, - { {Im2, Ip3, Ip2}, }, - { {Ip2, Im1, Im2}, }, - { {Im1, Ip2, Ip1}, }, - - /* back pole */ - { {Im3, Im2, Im5}, }, - { {Im4, Im3, Im5}, }, - { {Im0, Im4, Im5}, }, - { {Im1, Im0, Im5}, }, - { {Im2, Im1, Im5}, }, -}; - -/* normalize point r */ -static void -normalize(point *r) { - float mag; - - mag = r->x * r->x + r->y * r->y + r->z * r->z; - if (mag != 0.0f) { - mag = 1.0f / sqrtf(mag); - r->x *= mag; - r->y *= mag; - r->z *= mag; - } -} - -/* linearly interpolate between a & b, by fraction f */ -static void -lerp(point *a, point *b, float f, point *r) { - r->x = a->x + f*(b->x-a->x); - r->y = a->y + f*(b->y-a->y); - r->z = a->z + f*(b->z-a->z); -} - -void -sphere(int maxlevel) { - int nrows = 1 << maxlevel; - int s; - - /* iterate over the 20 sides of the icosahedron */ - for(s = 0; s < 20; s++) { - int i; - triangle *t = &icosahedron[s]; - for(i = 0; i < nrows; i++) { - /* create a tstrip for each row */ - /* number of triangles in this row is number in previous +2 */ - /* strip the ith trapezoid block */ - point v0, v1, v2, v3, va, vb; - int j; - lerp(&t->pt[1], &t->pt[0], (float)(i+1)/nrows, &v0); - lerp(&t->pt[1], &t->pt[0], (float)i/nrows, &v1); - lerp(&t->pt[1], &t->pt[2], (float)(i+1)/nrows, &v2); - lerp(&t->pt[1], &t->pt[2], (float)i/nrows, &v3); - glBegin(GL_TRIANGLE_STRIP); -#define V(v) { point x; x = v; normalize(&x); glNormal3fv(&x.x); glVertex3fv(&x.x); } - V(v0); - V(v1); - for(j = 0; j < i; j++) { - /* calculate 2 more vertices at a time */ - lerp(&v0, &v2, (float)(j+1)/(i+1), &va); - lerp(&v1, &v3, (float)(j+1)/i, &vb); - V(va); - V(vb); - } - V(v2); -#undef V - glEnd(); - } - } -} - -float * -sphere_tris(int maxlevel) { - int nrows = 1 << maxlevel; - int s, n; - float *buf, *b; - - n = 20*(1 << (maxlevel * 2)); - b = buf = (float *)malloc(n*3*3*sizeof(float)); - - /* iterate over the 20 sides of the icosahedron */ - for(s = 0; s < 20; s++) { - int i; - triangle *t = &icosahedron[s]; - for(i = 0; i < nrows; i++) { - /* create a tstrip for each row */ - /* number of triangles in this row is number in previous +2 */ - /* strip the ith trapezoid block */ - point v0, v1, v2, v3, va, vb, x1, x2; - int j; - lerp(&t->pt[1], &t->pt[0], (float)(i+1)/nrows, &v0); - lerp(&t->pt[1], &t->pt[0], (float)i/nrows, &v1); - lerp(&t->pt[1], &t->pt[2], (float)(i+1)/nrows, &v2); - lerp(&t->pt[1], &t->pt[2], (float)i/nrows, &v3); -#define V(a, c, v) { point x = v; normalize(&a); normalize(&c); normalize(&x); \ - b[0] = a.x; b[1] = a.y; b[2] = a.z; \ - b[3] = c.x; b[4] = c.y; b[5] = c.z; \ - b[6] = x.x; b[7] = x.y; b[8] = x.z; b+=9; } - x1 = v0; - x2 = v1; - for(j = 0; j < i; j++) { - /* calculate 2 more vertices at a time */ - lerp(&v0, &v2, (float)(j+1)/(i+1), &va); - lerp(&v1, &v3, (float)(j+1)/i, &vb); - V(x1,x2,va); x1 = x2; x2 = va; - V(vb,x2,x1); x1 = x2; x2 = vb; - } - V(x1, x2, v2); -#undef V - } - } - return buf; -} diff --git a/lib/glut-3.7.6/progs/advanced97/tess.c b/lib/glut-3.7.6/progs/advanced97/tess.c deleted file mode 100644 index 91daaa724..000000000 --- a/lib/glut-3.7.6/progs/advanced97/tess.c +++ /dev/null @@ -1,185 +0,0 @@ -#include -#include -#include - -static GLfloat spin = 0; -static int level = 4; -static int model = 0; -static GLfloat rotx, roty; -static int ox = -1, oy = -1; -static int mot; -#define PAN 1 -#define ROT 2 - -void -movelight(int x, int y) { - spin += (x-ox); - ox = x; oy = y; - if (spin > 360.) spin -= 360.; - if (spin < -360.) spin -= -360.; - glutPostRedisplay(); -} - -void -rotate(int x, int y) { - rotx += x-ox; - if (rotx > 360.) rotx -= 360.; - else if (rotx < -360.) rotx += 360.; - roty += y-oy; - if (roty > 360.) roty -= 360.; - else if (roty < -360.) roty += 360.; - ox = x; oy = y; - glutPostRedisplay(); -} - -void -motion(int x, int y) { - if (mot == PAN) movelight(x, y); - else if (mot == ROT) rotate(x,y); -} - -void -mouse(int button, int state, int x, int y) { - if(state == GLUT_DOWN) { - switch(button) { - case GLUT_LEFT_BUTTON: - mot = PAN; - motion(ox = x, oy = y); - break; - case GLUT_RIGHT_BUTTON: - mot = ROT; - motion(ox = x, oy = y); - break; - case GLUT_MIDDLE_BUTTON: - break; - } - } else if (state == GLUT_UP) { - mot = 0; - } -} - -void togglewire(void) { - static int toggle = 0; - toggle ^= 1; - glPolygonMode(GL_FRONT_AND_BACK, toggle ? GL_LINE : GL_FILL); -} - -extern void sphere(int level); -void genmodel(void) { - - glNewList(1, GL_COMPILE); - if (model) { - GLUquadricObj *q = gluNewQuadric(); - gluSphere(q, 1.0, 10*level, 10*level); - gluDeleteQuadric(q); - } else { - sphere(level-1); - } - glEndList(); -} - -void togglemodel(void) { - model ^= 1; - genmodel(); -} - -void levelup(void) { - level += 1; - if (level > 7) level = 7; - genmodel(); -} - -void leveldown(void) { - level -= 1; - if (level <= 0) level = 1; - genmodel(); -} - -void help(void) { - printf("'h' - help\n"); - printf("'t' - tessellation style\n"); - printf("'UP' - increase tessellation\n"); - printf("'DOWN' - decrease tessellation\n"); - printf("left mouse - rotate sphere\n"); - printf("right mouse - move light\n"); -} - -void init(void) { - GLfloat specular[4] = { 1., 1., 1., 1. }; - - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - genmodel(); - glDepthFunc(GL_LESS); - glEnable(GL_DEPTH_TEST); - glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular); - glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 30); -} - -void display(void) { - GLfloat position[] = { 0.0, 0.0, 3.5, 1.0 }; - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glPushMatrix(); - glTranslatef(0.0, 0.0, -5.0); - - glPushMatrix(); - glRotatef(spin, 1.0, 0.0, 0.0); - glRotatef(0.0, 1.0, 0.0, 0.0); - glLightfv(GL_LIGHT0, GL_POSITION, position); - - glPopMatrix(); - - glRotatef(rotx, 0., 1., 0.); - glRotatef(roty, 1., 0., 0.); - glCallList(1); - glPopMatrix(); - glutSwapBuffers(); -} - -void reshape(int w, int h) { - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(40.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0); - glMatrixMode(GL_MODELVIEW); -} - -/*ARGSUSED1*/ -void -key(unsigned char key, int x, int y) { - switch(key) { - case 't': togglemodel(); break; - case 'w': togglewire(); break; - case 'h': help(); break; - case '\033': exit(EXIT_SUCCESS); break; - default: break; - } - glutPostRedisplay(); -} - -/*ARGSUSED1*/ -void -special(int key, int x, int y) { - switch(key) { - case GLUT_KEY_UP: levelup(); break; - case GLUT_KEY_DOWN: leveldown(); break; - } - glutPostRedisplay(); -} - -int main(int argc, char** argv) { - glutInit(&argc, argv); - glutInitWindowSize(512, 512); - glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE|GLUT_DEPTH); - (void)glutCreateWindow(argv[0]); - init(); - glutDisplayFunc(display); - glutKeyboardFunc(key); - glutSpecialFunc(special); - glutReshapeFunc(reshape); - glutMouseFunc(mouse); - glutMotionFunc(motion); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/advanced97/tess.dsp b/lib/glut-3.7.6/progs/advanced97/tess.dsp deleted file mode 100644 index 1daf5a704..000000000 --- a/lib/glut-3.7.6/progs/advanced97/tess.dsp +++ /dev/null @@ -1,92 +0,0 @@ -# Microsoft Developer Studio Project File - Name="tess" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=tess - 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 "tess.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 "tess.mak" CFG="tess - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "tess - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "tess - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "tess - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "tess - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "tess - Win32 Release" -# Name "tess - Win32 Debug" -# Begin Source File - -SOURCE=.\sphere.c -# End Source File -# Begin Source File - -SOURCE=.\tess.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/texgen.c b/lib/glut-3.7.6/progs/advanced97/texgen.c deleted file mode 100644 index 19f10d582..000000000 --- a/lib/glut-3.7.6/progs/advanced97/texgen.c +++ /dev/null @@ -1,292 +0,0 @@ -#include -#include -#include -#include - -#ifndef __sgi -/* Most math.h's do not define float versions of math functions. */ -#define floorf(x) ((float)floor((x))) -#endif - -static float transx = 1.0, transy, rotx, roty; -static int ox = -1, oy = -1; -static int mot = 0; -#define PAN 1 -#define ROT 2 - -void -pan(const int x, const int y) { - transx += (x-ox)/5.; - transy -= (y-oy)/5.; - ox = x; oy = y; - glutPostRedisplay(); -} - -void -rotate(const int x, const int y) { - rotx += x-ox; - if (rotx > 360.) rotx -= 360.; - else if (rotx < -360.) rotx += 360.; - roty += y-oy; - if (roty > 360.) roty -= 360.; - else if (roty < -360.) roty += 360.; - ox = x; oy = y; - glutPostRedisplay(); -} - -void -motion(int x, int y) { - if (mot == PAN) pan(x, y); - else if (mot == ROT) rotate(x,y); -} - -void -mouse(int button, int state, int x, int y) { - if(state == GLUT_DOWN) { - switch(button) { - case GLUT_LEFT_BUTTON: - mot = PAN; - motion(ox = x, oy = y); - break; - case GLUT_MIDDLE_BUTTON: - mot = ROT; - motion(ox = x, oy = y); - break; - case GLUT_RIGHT_BUTTON: - break; - } - } else if (state == GLUT_UP) { - mot = 0; - } -} - -#define stripeImageWidth 32 -GLubyte stripeImage[4*stripeImageWidth]; - -void makeStripeImage(void) { - int j; - - for (j = 0; j < stripeImageWidth; j++) { - stripeImage[4*j] = (GLubyte) ((j<=4) ? 255 : 0); - stripeImage[4*j+1] = (GLubyte) ((j>4) ? 255 : 0); - stripeImage[4*j+2] = (GLubyte) 0; - stripeImage[4*j+3] = (GLubyte) 255; - } -} - -void -hsv_to_rgb(float h,float s,float v,float *r,float *g,float *b) -{ - int i; - float f, p, q, t; - - h *= 360.0; - if (s==0) { - *r = v; - *g = v; - *b = v; - } else { - if (h==360) - h = 0; - h /= 60; - i = floorf(h); - f = h - i; - p = v*(1.0-s); - q = v*(1.0-(s*f)); - t = v*(1.0-(s*(1.0-f))); - switch (i) { - case 0 : - *r = v; - *g = t; - *b = p; - break; - case 1 : - *r = q; - *g = v; - *b = p; - break; - case 2 : - *r = p; - *g = v; - *b = t; - break; - case 3 : - *r = p; - *g = q; - *b = v; - break; - case 4 : - *r = t; - *g = p; - *b = v; - break; - case 5 : - *r = v; - *g = p; - *b = q; - break; - } - } -} - -GLubyte rainbow[4*stripeImageWidth]; -void makeRainbow(void) { - int j; - for (j = 0; j < stripeImageWidth; j++) { - float r, g, b; - hsv_to_rgb((float)j/(stripeImageWidth-1.f), 1.0, 1.0, &r, &g, &b); - rainbow[4*j] = r*255; - rainbow[4*j+1] = g*255; - rainbow[4*j+2] = b*255; - rainbow[4*j+3] = (GLubyte) 255; - } -} - -/* planes for texture coordinate generation */ -static GLfloat xequalzero[] = {1.0, 0.0, 0.0, 0.0}; -static GLfloat slanted[] = {1.0, 1.0, 1.0, 0.0}; -static GLfloat *currentCoeff; -static GLenum currentPlane; -static GLint currentGenMode; - -void init(void) { - glClearColor (0.0, 0.0, 0.0, 0.0); - glEnable(GL_DEPTH_TEST); - glShadeModel(GL_SMOOTH); - - makeStripeImage(); - makeRainbow(); - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - - glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexImage1D(GL_TEXTURE_1D, 0, 4, stripeImageWidth, 0, - GL_RGBA, GL_UNSIGNED_BYTE, stripeImage); - - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - currentCoeff = xequalzero; - currentGenMode = GL_OBJECT_LINEAR; - currentPlane = GL_OBJECT_PLANE; - glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, currentGenMode); - glTexGenfv(GL_S, currentPlane, currentCoeff); - - glEnable(GL_TEXTURE_GEN_S); - glEnable(GL_TEXTURE_1D); - glEnable(GL_CULL_FACE); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_AUTO_NORMAL); - glEnable(GL_NORMALIZE); - glFrontFace(GL_CW); - glCullFace(GL_BACK); - glMaterialf (GL_FRONT, GL_SHININESS, 64.0); -} - -void tfunc(void) { - static int state; - if (state ^= 1) { - glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexImage1D(GL_TEXTURE_1D, 0, 4, stripeImageWidth, 0, - GL_RGBA, GL_UNSIGNED_BYTE, rainbow); - } else { - glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexImage1D(GL_TEXTURE_1D, 0, 4, stripeImageWidth, 0, - GL_RGBA, GL_UNSIGNED_BYTE, stripeImage); - } - glutPostRedisplay(); -} - -void display(void) { -#if 0 - static GLUquadricObj *q = NULL; -#endif - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glPushMatrix(); - glTranslatef(0., 0., transx); - glRotatef(rotx, 1.0, 0.0, 0.0); - glRotatef(45.0, 0.0, 0.0, 1.0); - glutSolidTeapot(2.0); -#if 0 - if (!q) q = gluNewQuadric(); - gluQuadricTexture(q, GL_TRUE); - gluCylinder(q, 1.0, 2.0, 3.0, 10, 10); -#endif - glPopMatrix(); - glutSwapBuffers(); -} - -void reshape(int w, int h) { - glViewport(0, 0, (GLsizei) w, (GLsizei) h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - if (w <= h) - glOrtho (-3.5, 3.5, -3.5*(GLfloat)h/(GLfloat)w, - 3.5*(GLfloat)h/(GLfloat)w, -3.5, 3.5); - else - glOrtho (-3.5*(GLfloat)w/(GLfloat)h, - 3.5*(GLfloat)w/(GLfloat)h, -3.5, 3.5, -3.5, 3.5); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -/*ARGSUSED1*/ -void keyboard (unsigned char key, int x, int y) { - switch (key) { - case 'e': - case 'E': - currentGenMode = GL_EYE_LINEAR; - currentPlane = GL_EYE_PLANE; - glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, currentGenMode); - glTexGenfv(GL_S, currentPlane, currentCoeff); - glutPostRedisplay(); - break; - case 'o': - case 'O': - currentGenMode = GL_OBJECT_LINEAR; - currentPlane = GL_OBJECT_PLANE; - glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, currentGenMode); - glTexGenfv(GL_S, currentPlane, currentCoeff); - glutPostRedisplay(); - break; - case 's': - case 'S': - currentCoeff = slanted; - glTexGenfv(GL_S, currentPlane, currentCoeff); - glutPostRedisplay(); - break; - case 'x': - case 'X': - currentCoeff = xequalzero; - glTexGenfv(GL_S, currentPlane, currentCoeff); - glutPostRedisplay(); - break; - case 't': tfunc(); break; - case 27: - exit(0); - break; - default: - break; - } -} - -int main(int argc, char*argv[]) { - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); - glutInitWindowSize(256, 256); - glutInitWindowPosition(100, 100); - glutInit(&argc, argv); - glutCreateWindow(argv[0]); - init(); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glutKeyboardFunc(keyboard); - glutMouseFunc(mouse); - glutMotionFunc(motion); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/advanced97/texgen.dsp b/lib/glut-3.7.6/progs/advanced97/texgen.dsp deleted file mode 100644 index 307792e31..000000000 --- a/lib/glut-3.7.6/progs/advanced97/texgen.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="texgen" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=texgen - 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 "texgen.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 "texgen.mak" CFG="texgen - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "texgen - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "texgen - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "texgen - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "texgen - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "texgen - Win32 Release" -# Name "texgen - Win32 Debug" -# Begin Source File - -SOURCE=.\texgen.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/texmovie.c b/lib/glut-3.7.6/progs/advanced97/texmovie.c deleted file mode 100644 index 767ec7440..000000000 --- a/lib/glut-3.7.6/progs/advanced97/texmovie.c +++ /dev/null @@ -1,192 +0,0 @@ -#include -#include -#include -#include -#include "texture.h" - -#if !defined(GL_VERSION_1_1) && !defined(GL_VERSION_1_2) -#define glBindTexture glBindTextureEXT -#endif - -static int the_texture; -static int texture_count; -static int shrink = 1; - -void afunc(void) { - static int state; - if (state ^= 1) - glEnable(GL_ALPHA_TEST); - else - glDisable(GL_ALPHA_TEST); -} - -void bfunc(void) { - static int state; - if (state ^= 1) - glEnable(GL_BLEND); - else - glDisable(GL_BLEND); -} - -void sfunc(void) { - shrink ^= 1; -} - -void tfunc(void) { - static int state; - if (state ^= 1) - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); - else - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); -} - -void fourfunc(void) { - static int state; - GLenum wrap; - int i; - - glMatrixMode(GL_TEXTURE); - if (state ^= 1) { - wrap = GL_REPEAT; - glScalef(4.f, 4.f, 1.f); - } else { - wrap = GL_CLAMP; - glLoadIdentity(); - } - glMatrixMode(GL_MODELVIEW); - - for(i = 0; i < texture_count; i++) { - glBindTexture(GL_TEXTURE_2D, i+1); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrap); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrap); - } -} - -void help(void) { - printf("Usage: texmovie image0 ... imagen\n"); - printf("'h' - help\n"); - printf("'a' - toggle alpha test\n"); - printf("'b' - toggle blend\n"); - printf("'s' - toggle shrink\n"); - printf("'t' - toggle MODULATE or REPLACE\n"); - printf("'4' - toggle repeat by 4\n"); -} - -void init(int argc, char *argv[]) { - unsigned *image; - int i, width, height, components; - - glEnable(GL_TEXTURE_2D); - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - - if (argv[0] == NULL) { - char name[256]; - for (i = 0; i < 32; i++) { - sprintf(name, "../data/flame/f%02d", i); - image = read_texture(name, &width, &height, &components); - if (image == NULL) { - fprintf(stderr, "Error: Can't load image file \"%s\".\n", argv[i]); - exit(EXIT_FAILURE); - } else { - printf("%d x %d image loaded\n", width, height); - } - glBindTexture(GL_TEXTURE_2D, i+1); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); - glTexImage2D(GL_TEXTURE_2D, 0, components, width, - height, 0, GL_RGBA, GL_UNSIGNED_BYTE, image); - texture_count++; - } - } - - for(i = 0; i < argc; i++) { - image = read_texture(argv[i], &width, &height, &components); - if (image == NULL) { - fprintf(stderr, "Error: Can't load image file \"%s\".\n", - argv[i]); - exit(EXIT_FAILURE); - } else { - printf("%d x %d image loaded\n", width, height); - } - glBindTexture(GL_TEXTURE_2D, i+1); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); - glTexImage2D(GL_TEXTURE_2D, 0, components, width, - height, 0, GL_RGBA, GL_UNSIGNED_BYTE, image); - texture_count++; - } - - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - glEnable(GL_TEXTURE_2D); - glClearColor(.25f, .25f, .25f, .25f); - - glAlphaFunc(GL_GREATER, 0.f); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); -} - -void -animate(void) { - - the_texture++; - if (the_texture >= texture_count) the_texture = 0; - - glutPostRedisplay(); -} - -void display(void) { - glClear(GL_COLOR_BUFFER_BIT); - - glBindTexture(GL_TEXTURE_2D, the_texture+1); - glPushMatrix(); - if (shrink) glScalef(.5f, .5f, 1.f); - glBegin(GL_POLYGON); - glTexCoord2f(0.0, 0.0); - glVertex2f(-1.0, -1.0); - glTexCoord2f(1.0, 0.0); - glVertex2f(1.0, -1.0); - glTexCoord2f(1.0, 1.0); - glVertex2f(1.0, 1.0); - glTexCoord2f(0.0, 1.0); - glVertex2f(-1.0, 1.0); - glEnd(); - glPopMatrix(); - glutSwapBuffers(); -} - -void reshape(int w, int h) { - glViewport(0, 0, w, h); -} - -/* ARGSUSED1 */ -void -key(unsigned char key, int x, int y) { - switch(key) { - case 'a': afunc(); break; - case 'b': bfunc(); break; - case 'h': help(); break; - case 's': sfunc(); break; - case 't': tfunc(); break; - case '4': fourfunc(); break; - case '\033': exit(EXIT_SUCCESS); break; - default: break; - } - glutPostRedisplay(); -} - -int main(int argc, char** argv) { - glutInitWindowSize(256, 256); - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE); - (void)glutCreateWindow(argv[0]); - init(argc-1, argv+1); - glutDisplayFunc(display); - glutKeyboardFunc(key); - glutReshapeFunc(reshape); - glutIdleFunc(animate); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/advanced97/texmovie.dsp b/lib/glut-3.7.6/progs/advanced97/texmovie.dsp deleted file mode 100644 index 08524b53a..000000000 --- a/lib/glut-3.7.6/progs/advanced97/texmovie.dsp +++ /dev/null @@ -1,92 +0,0 @@ -# Microsoft Developer Studio Project File - Name="texmovie" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=texmovie - 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 "texmovie.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 "texmovie.mak" CFG="texmovie - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "texmovie - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "texmovie - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "texmovie - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "texmovie - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "texmovie - Win32 Release" -# Name "texmovie - Win32 Debug" -# Begin Source File - -SOURCE=.\texmovie.c -# End Source File -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/texpage.c b/lib/glut-3.7.6/progs/advanced97/texpage.c deleted file mode 100644 index 21418eaeb..000000000 --- a/lib/glut-3.7.6/progs/advanced97/texpage.c +++ /dev/null @@ -1,503 +0,0 @@ -#include -#include -#include -#include -#include "texture.h" -#include - -#if !defined(GL_VERSION_1_1) && !defined(GL_VERSION_1_2) -#define glTexSubImage2D glTexSubImage2DEXT -#endif - -static unsigned *image, *bgdtile; -static int width, height, components; -static int grid, zoom, texture; - - -#define TSIZE 128 -#define TILES 16 -#define TILESIZE 32 -static struct tile { - void *data; -} tiles[TILES][TILES]; - -static int x = TILES*TILESIZE/2, y = TILES*TILESIZE/2; - -/* - * make an rgb tile for the background. - */ -static void -background_tile(void) { - int i,j,grid; - unsigned char *ptr; - - bgdtile = (unsigned *) malloc(TILESIZE*TILESIZE*sizeof(unsigned)); - grid = 8; - ptr = (unsigned char *) bgdtile; - for (i=0; i= TILES/2-w2 && i < TILES/2-w2+w && j >= TILES/2-h2 && j < TILES/2-h2+h) { - /* interior */ - int x, y, k; - tiles[j][i].data = malloc(TILESIZE*TILESIZE*sizeof(*image)); - x = TILESIZE*(i-TILES/2+w2); - y = TILESIZE*(j-TILES/2+h2); - for(k = 0; k < TILESIZE; k++) - memcpy((unsigned *)tiles[j][i].data+k*TILESIZE, - image+width*(y+k)+x, TILESIZE*sizeof *image); - } - else - tiles[j][i].data = bgdtile; - } - } - for(i = 0; i < TILES; i++) { - for(j = 0; j < TILES; j++) { - printf("%d ", tiles[j][i].data != bgdtile); - } - printf("\n"); - } -} - -#define MAXMESH 64 - -static float Ml[4*2*(MAXMESH+1)*2 * (MAXMESH+1)]; - -static void -mesh0(float x0, float x1, float y0, float y1, - float s0, float s1, float t0, float t1, float z, int nx,int ny) -{ - float y,x,s,t,dx,dy,ds,dt,vb[3],tb[2]; - float *mp = Ml; - - dx = (x1-x0)/nx; - dy = (y1-y0)/ny; - ds = (s1-s0)/nx; - dt = (t1-t0)/ny; - y = y0; - t = t0; - vb[2] = z; - while (y < y1) { - x = x0; - s = s0; - while(x <= x1) { - tb[0] = s; tb[1] = t; - vb[0] = x; vb[1] = y; - vb[2] = 0.0; - *mp++ = tb[0]; - *mp++ = tb[1]; - mp += 2; - *mp++ = vb[0]; - *mp++ = vb[1]; - *mp++ = vb[2]; - mp++; - tb[1] = t+dt; - vb[1] = y+dy; - vb[2] = 0.0; - *mp++ = tb[0]; - *mp++ = tb[1]; - mp += 2; - *mp++ = vb[0]; - *mp++ = vb[1]; - *mp++ = vb[2]; - mp++; - x += dx; - s += ds; - } - y += dy; - t += dt; - } -} - -static void -drawmesh(int nx,int ny) { - float *mp = Ml; - int i,j; - - glPushMatrix(); - if (zoom) glScalef(1.5f, 1.5f, 1.f); - glColor4f(1,1,1,1); - for (i = ny+1; i; i--) { - glBegin(GL_TRIANGLE_STRIP); - for (j = nx+1; j; j--) { - glTexCoord2fv(mp); - glVertex3fv(mp+4); - glTexCoord2fv(mp+8); - glVertex3fv(mp+12); mp += 16; - } - glEnd(); - } - glPopMatrix(); -} - -static void -help(void) { - printf("'h' - help\n"); - printf("'left' - pan left\n"); - printf("'right' - pan right\n"); - printf("'up' - pan up\n"); - printf("'down' - pan down\n"); - printf("'t' - toggle texture memory display\n"); - printf("'g' - toggle grid\n"); - printf("'x' - toggle auto pan\n"); - printf("'z' - toggle zoom\n"); -} - -static void -gfunc(void) { - grid ^= 1; -} - -static void -tfunc(void) { - texture ^= 1; -} - -static void anim(void); - -static void -xfunc(void) { - static int state; - glutIdleFunc((state ^= 1) ? anim : NULL); -} - -static void -zfunc(void) { - zoom ^= 1; -} - -#define CLAMP(v) { int w = TSIZE/2; \ - if (v < w) v = w; \ - else if (v > TILES*TILESIZE-w) v = TILES*TILESIZE-w; } -static void -up(void) { - y += 8; - CLAMP(y); -} - -static void -pfunc(void) { - static int delta = -1; - int xx = x + delta; - x += delta; CLAMP(x); - y += delta; CLAMP(y); - if (x != xx) delta = -delta; -} - -static void -down(void) { - y -= 8; - CLAMP(y); -} - -static void -right(void) { - x += 8; - CLAMP(x); -} - -static void -left(void) { - x -= 8; - CLAMP(x); -} - -static void -anim(void) { - static int delta = -1; - int xx = x + delta; - x += delta; - CLAMP(x); - y += delta; - CLAMP(y); - if (x != xx) delta = -delta; - glutPostRedisplay(); -} - - -static void -loadtiles(void) { - int lx, rx, ty, by; /* image bounding box */ - static int ox = TILES*TILESIZE/2, oy = TILES*TILESIZE/2; /* image origin */ - static int ot = 0, os = 0; - int dx = 0, dy = 0, nx = -1, ny = -1; - float trx, try; -#define S_TSIZE (TSIZE-TILESIZE) /* visible portion of texture = TSIZE less one tile for slop */ - - /* calculate tile #'s at corners of visible region */ - lx = x - S_TSIZE/2; - rx = lx + S_TSIZE; - by = y - S_TSIZE/2; - ty = by + S_TSIZE; - lx /= TILESIZE; rx /= TILESIZE; - by /= TILESIZE; ty /= TILESIZE; - - dx = ((x - S_TSIZE/2)/TILESIZE) - ((ox - S_TSIZE/2)/TILESIZE); - - nx = lx; ny = by; - if (dx < 0) { - /* add on left */ - os -= TILESIZE; - if (os < 0) os += TSIZE; - nx = lx; - } else if (dx > 0) { - nx = rx; - } - - dy = ((y - S_TSIZE/2) / TILESIZE) - ((oy - S_TSIZE/2) / TILESIZE); - if (dy > 0) { - /* add on bottom */ - ny = ty; - } else if (dy < 0) { - /* add on top */ - ot -= TILESIZE; - if (ot < 0) ot += TSIZE; - ny = by; - } -if (dx || dy) printf("dx %d dy %d lx %d rx %d by %d ty %d nx %d ny %d os %d ot %d\n", dx, dy, lx, rx, by, ty, nx, ny, os, ot); - if (dx) { - int t; - for(t = 0; t < TSIZE; t += TILESIZE) { - glTexSubImage2D(GL_TEXTURE_2D, 0, os, (t+ot) % TSIZE, TILESIZE, - TILESIZE, GL_RGBA, GL_UNSIGNED_BYTE, - tiles[ny+t/TILESIZE][nx].data); -printf("load %d %d %d %d\n", nx, ny+t/TILESIZE, os, (t+ot) % TSIZE); - } - } - - if (dy) { - int s; - for(s = 0; s < TSIZE; s += TILESIZE) { - glTexSubImage2D(GL_TEXTURE_2D, 0, (s+os) % TSIZE, ot, TILESIZE, - TILESIZE, GL_RGBA, GL_UNSIGNED_BYTE, - tiles[ny][nx+s/TILESIZE].data); -printf("load %d %d %d %d\n", nx+s/TILESIZE, ny, (s+os) % TSIZE, ot); - } - } - if (dx > 0) { - os += TILESIZE; - if (os >= TSIZE) os -= TSIZE; - } - if (dy > 0) { - ot += TILESIZE; - if (ot >= TSIZE) ot -= TSIZE; - } - ox = x; oy = y; - glMatrixMode(GL_TEXTURE); - glLoadIdentity(); - trx = (float)((x-TILES*TILESIZE/2) % TSIZE)/TSIZE; - try = (float)((y-TILES*TILESIZE/2) % TSIZE)/TSIZE; - glTranslatef(trx, try, 0.f); - glMatrixMode(GL_MODELVIEW); -} - -static void -init(char *filename) { - int i; - - mesh0(-1.f,1.f,-1.f,1.f,0.f,1.f,0.f,1.f,0.f,64,64); - if (filename) { - image = read_texture(filename, &width, &height, &components); - if (image == NULL) { - fprintf(stderr, "Error: Can't load image file \"%s\".\n", - filename); - exit(EXIT_FAILURE); - } else { - printf("%d x %d image loaded\n", width, height); - } - if (components < 3 || components > 4) { - printf("must be RGB or RGBA image\n"); - exit(EXIT_FAILURE); - } - } else { - int i, j; - components = 4; width = height = TSIZE; - image = (unsigned *) malloc(width*height*sizeof(unsigned)); - for (j = 0; j < height; j++) - for (i = 0; i < width; i++) { - if (i & 1) - image[i+j*width] = 0xff; - else - image[i+j*width] = 0xff00; - if (j&1) - image[i+j*width] |= 0xff0000; - } - - } - if (width % TILESIZE || height % TILESIZE) { -#define TXSIZE 192 - unsigned *newimage = malloc(TXSIZE*TXSIZE*sizeof *newimage); - gluScaleImage(GL_RGBA, width, height, GL_UNSIGNED_BYTE, image, - TXSIZE, TXSIZE, GL_UNSIGNED_BYTE, newimage); - free(image); - image = newimage; width = height = TXSIZE; components = 4; - } - tile_image(image); - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT); - - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, TSIZE, - TSIZE, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); - for(i = 0; i < TILES; i++) { - int j; - for(j = 0; j < TILES; j++) { - glTexSubImage2D(GL_TEXTURE_2D, 0, i*TILESIZE, j*TILESIZE, TILESIZE, - TILESIZE, GL_RGBA, GL_UNSIGNED_BYTE, - tiles[(TILES-TSIZE/TILESIZE)/2+j][(TILES-TSIZE/TILESIZE)/2+i].data); - } - } - glEnable(GL_TEXTURE_2D); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(90.,1.,.1,10.); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(0.,0.,-1.0); - glLineWidth(3.0); - glClearColor(.25, .25, .25, .25); - - /* start at center of image */ - x = TILES*TILESIZE/2; - y = TILES*TILESIZE/2; -} - -void -showgrid(void) { - GLfloat mat[16]; - int i; - - glPushMatrix(); - glDisable(GL_TEXTURE_2D); - glPushMatrix(); - glColor3f(0.f, 0.f, 0.f); - if (!zoom) glScalef(1.f/1.5f, 1.f/1.5f, 1.f); - glBegin(GL_LINE_LOOP); - glVertex2f(-1.f,-1.f); - glVertex2f(-1.f, 1.f); - glVertex2f( 1.f, 1.f); - glVertex2f( 1.f,-1.f); - glEnd(); - glPopMatrix(); - - glGetFloatv(GL_TEXTURE_MATRIX,mat); - glPushMatrix(); - if (zoom) glScalef(1.5f,1.5f,1.f); - glTranslatef(-1.f,-1.f,-1.f); - glScalef(2.f,2.f,1.f); - glTranslatef(-mat[12], -mat[13], 1.0f); -#if 1 - glColor3f(1.f,1.f,1.f); -#else - glColor3f(1.f,0.f,0.f); -#endif - glBegin(GL_LINES); - for(i = -TSIZE; i <= 2*TSIZE; i+=TILESIZE) { - GLfloat x = (GLfloat)i/(GLfloat)TSIZE; - glVertex2f(-1.f,x); - glVertex2f(2.f,x); - glVertex2f(x,-1.f); - glVertex2f(x,2.f); - } - glEnd(); - glPopMatrix(); - glEnable(GL_TEXTURE_2D); - glPopMatrix(); -} - -static void -drawtexture(void) { - glMatrixMode(GL_TEXTURE); - glPushMatrix(); - glLoadIdentity(); - glColor3f(1.f,1.f,1.f); - glBegin(GL_QUADS); - glTexCoord2f(0.f, 0.f); glVertex2f(-1.f, -1.f); - glTexCoord2f(0.f, 1.f); glVertex2f(-1.f, 1.f); - glTexCoord2f(1.f, 1.f); glVertex2f( 1.f, 1.f); - glTexCoord2f(1.f, 0.f); glVertex2f( 1.f, -1.f); - glEnd(); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); -} - -static void -display(void) { - glClear(GL_COLOR_BUFFER_BIT); - loadtiles(); - if (texture) { - drawtexture(); - } else { - drawmesh(64,64); - if (grid) showgrid(); - } - glutSwapBuffers(); -} - -static void -reshape(int w, int h) { - glViewport(0, 0, w, h); -} - -/*ARGSUSED1*/ -static void -key(unsigned char key, int x, int y) { - switch(key) { - case 'h': help(); break; - case 'g': gfunc(); break; - case 't': tfunc(); break; - case 'z': zfunc(); break; - case 'x': xfunc(); break; - case 'p': pfunc(); break; - case '\033': exit(EXIT_SUCCESS); break; - default: break; - } - glutPostRedisplay(); -} - -/*ARGSUSED1*/ -static void -special(int key, int x, int y) { - switch(key) { - case GLUT_KEY_UP: up(); break; - case GLUT_KEY_DOWN: down(); break; - case GLUT_KEY_LEFT: left(); break; - case GLUT_KEY_RIGHT:right(); break; - } - glutPostRedisplay(); -} - -int main(int argc, char* argv[]) { - glutInitWindowSize(512, 512); - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE); - (void)glutCreateWindow(argv[0]); - init(argv[1] ? argv[1] : "../data/fendi.rgb"); - glutDisplayFunc(display); - glutKeyboardFunc(key); - glutSpecialFunc(special); - glutReshapeFunc(reshape); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/advanced97/texpage.dsp b/lib/glut-3.7.6/progs/advanced97/texpage.dsp deleted file mode 100644 index b3502b33d..000000000 --- a/lib/glut-3.7.6/progs/advanced97/texpage.dsp +++ /dev/null @@ -1,92 +0,0 @@ -# Microsoft Developer Studio Project File - Name="texpage" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=texpage - 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 "texpage.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 "texpage.mak" CFG="texpage - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "texpage - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "texpage - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "texpage - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "texpage - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "texpage - Win32 Release" -# Name "texpage - Win32 Debug" -# Begin Source File - -SOURCE=.\texpage.c -# End Source File -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/textile.c b/lib/glut-3.7.6/progs/advanced97/textile.c deleted file mode 100644 index 1b60f3092..000000000 --- a/lib/glut-3.7.6/progs/advanced97/textile.c +++ /dev/null @@ -1,365 +0,0 @@ -/* -** cc -o textile textile.c -lGLU -lGL -lglut -lXmu -lX11 -lm -*/ -#include -#include -#include -#include -#include -#include "texture.h" - -int maxTextureSize; -int maxTextureLevel; - -int imageWidth, imageHeight; -GLubyte *imageData; - -int texWidthLevel0, texHeightLevel0; -int texWidthTiles, texHeightTiles; -GLubyte **texImageLevel; - -GLboolean useBorder = GL_TRUE; -GLboolean useClamp = GL_TRUE; -GLboolean useLinear = GL_TRUE; -GLboolean useMipmap = GL_TRUE; -GLboolean useTextureTiling = GL_TRUE; - -/* (int)floor(log2(a)) */ -static int -iflog2(unsigned int a) -{ - int x = 0; - while (a >>= 1) ++x; - return x; -} - -static void -initialize(void) -{ - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glFrustum(-0.5, 0.5, -0.5, 0.5, 0.5, 1.5); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(0, 0, -0.90); - glRotatef( 45.0, 0, 1, 0); - glTranslatef(-0.5, -0.5, 0.0); - -#if 0 - glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTextureSize); -#else - maxTextureSize = 32; -#endif - maxTextureLevel = iflog2(maxTextureSize); - - texImageLevel = (GLubyte **) calloc(maxTextureLevel+1, sizeof(GLubyte *)); - if (texImageLevel == NULL) { - fprintf(stderr, "texture level image allocation failed\n"); - exit(EXIT_FAILURE); - } - glClearColor(0.1, 0.1, 0.1, 0.1); -} - -static void -imgLoad(char *filename_in, int *w_out, int *h_out, GLubyte **img_out) -{ - int comp; - - *img_out = (GLubyte *)read_texture(filename_in, w_out, h_out, &comp); - if (img_out == NULL) { - fprintf(stderr, "unable to read %s\n", filename_in); - exit(EXIT_FAILURE); - } - if (comp != 3 && comp != 4) { - fprintf(stderr, "%s: image is not RGB or RGBA\n", filename_in); - exit(EXIT_FAILURE); - } -} - -static void -buildMipmaps(void) -{ - int level, levelWidth, levelHeight; - - if (useTextureTiling) { - int width2 = iflog2(imageWidth); - int height2 = iflog2(imageHeight); - - width2 = (width2 > maxTextureLevel) ? width2 : maxTextureLevel; - height2 = (height2 > maxTextureLevel) ? height2 : maxTextureLevel; - - texWidthLevel0 = 1 << width2; - texHeightLevel0 = 1 << height2; - texWidthTiles = texWidthLevel0 >> maxTextureLevel; - texHeightTiles = texHeightLevel0 >> maxTextureLevel; - } else { - texWidthLevel0 = maxTextureSize; - texHeightLevel0 = maxTextureSize; - texWidthTiles = 1; - texHeightTiles = 1; - } - - texImageLevel[0] = (GLubyte *) - calloc(1, (texWidthLevel0+2)*(texHeightLevel0+2)*4*sizeof(GLubyte)); - - glPixelStorei(GL_PACK_ROW_LENGTH, texWidthLevel0+2); - glPixelStorei(GL_PACK_SKIP_PIXELS, 1); - glPixelStorei(GL_PACK_SKIP_ROWS, 1); - - gluScaleImage(GL_RGBA, imageWidth, imageHeight, - GL_UNSIGNED_BYTE, imageData, - texWidthLevel0, texHeightLevel0, - GL_UNSIGNED_BYTE, texImageLevel[0]); - - glPixelStorei(GL_UNPACK_SKIP_PIXELS, 1); - glPixelStorei(GL_UNPACK_SKIP_ROWS, 1); - - levelWidth = texWidthLevel0; - levelHeight = texHeightLevel0; - for (level=0; level 1) ? levelWidth / 2 : 1; - int newLevelHeight = (levelHeight > 1) ? levelHeight / 2 : 1; - - texImageLevel[level+1] = (GLubyte *) - calloc(1, (newLevelWidth+2)*(newLevelHeight+2)*4*sizeof(GLubyte)); - - glPixelStorei(GL_PACK_ROW_LENGTH, newLevelWidth+2); - glPixelStorei(GL_UNPACK_ROW_LENGTH, levelWidth+2); - - gluScaleImage(GL_RGBA, levelWidth, levelHeight, - GL_UNSIGNED_BYTE, texImageLevel[level], - newLevelWidth, newLevelHeight, - GL_UNSIGNED_BYTE, texImageLevel[level+1]); - - levelWidth = newLevelWidth; - levelHeight = newLevelHeight; - } - - glPixelStorei(GL_PACK_ROW_LENGTH, 0); - glPixelStorei(GL_PACK_SKIP_PIXELS, 0); - glPixelStorei(GL_PACK_SKIP_ROWS, 0); - - glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); - glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0); - glPixelStorei(GL_UNPACK_SKIP_ROWS, 0); -} - -static void -freeMipmaps(void) -{ - int i; - - for (i=0; i<=maxTextureLevel; ++i) { - if (texImageLevel[i] != NULL) { - free(texImageLevel[i]); - texImageLevel[i] = NULL; - } - } -} - -static void -loadTile(int row, int col) -{ - int border = useBorder ? 1 : 0; - int level, levelWidth, levelHeight; - - levelWidth = texWidthLevel0; - levelHeight = texHeightLevel0; - for (level=0; level<=maxTextureLevel; ++level) { - int tileWidth = levelWidth / texWidthTiles; - int tileHeight = levelHeight / texHeightTiles; - int skipPixels = col * tileWidth + (1 - border); - int skipRows = row * tileHeight + (1 - border); - - glPixelStorei(GL_UNPACK_ROW_LENGTH, levelWidth+2); - glPixelStorei(GL_UNPACK_SKIP_PIXELS, skipPixels); - glPixelStorei(GL_UNPACK_SKIP_ROWS, skipRows); - - glTexImage2D(GL_TEXTURE_2D, level, 4, - tileWidth + 2*border, tileHeight + 2*border, - border, GL_RGBA, GL_UNSIGNED_BYTE, texImageLevel[level]); - - if (levelWidth > 1) levelWidth = levelWidth / 2; - if (levelHeight > 1) levelHeight = levelHeight / 2; - } - - glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); - glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0); - glPixelStorei(GL_UNPACK_SKIP_ROWS, 0); -} - -static void -redraw(void) -{ - GLenum minFilterMode, magFilterMode, wrapMode; - char *minFilterName, *magFilterName, *wrapName; - int i, j; - - if (useLinear) { - if (useMipmap) { - minFilterMode = GL_LINEAR_MIPMAP_LINEAR; - minFilterName = "LINEAR_MIPMAP_LINEAR"; - } else { - minFilterMode = GL_LINEAR; - minFilterName = "LINEAR"; - } - magFilterMode = GL_LINEAR; - magFilterName = "LINEAR"; - } else { - if (useMipmap) { - minFilterMode = GL_NEAREST_MIPMAP_LINEAR; - minFilterName = "NEAREST_MIPMAP_LINEAR"; - } else { - minFilterMode = GL_NEAREST; - minFilterName = "NEAREST"; - } - magFilterMode = GL_NEAREST; - magFilterName = "NEAREST"; - } - - if (useClamp) { - wrapMode = GL_CLAMP; - wrapName = "CLAMP"; - } else { - wrapMode = GL_REPEAT; - wrapName = "REPEAT"; - } - - fprintf(stderr, "tile(%s) ", useTextureTiling ? "yes" : "no"); - fprintf(stderr, "border(%s) ", useBorder ? "yes" : "no"); - fprintf(stderr, "filter(%s, %s) ", minFilterName, magFilterName); - fprintf(stderr, "wrap(%s) ", wrapName); - fprintf(stderr, "\n"); - - glClear(GL_COLOR_BUFFER_BIT); - - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, minFilterMode); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, magFilterMode); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrapMode); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrapMode); - - buildMipmaps(); - - glEnable(GL_TEXTURE_2D); - - for (i=0; i -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=textile - 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 "textile.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 "textile.mak" CFG="textile - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "textile - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "textile - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "textile - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "textile - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "textile - Win32 Release" -# Name "textile - Win32 Debug" -# Begin Source File - -SOURCE=.\textile.c -# End Source File -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/texture.c b/lib/glut-3.7.6/progs/advanced97/texture.c deleted file mode 100644 index e3d28c090..000000000 --- a/lib/glut-3.7.6/progs/advanced97/texture.c +++ /dev/null @@ -1,256 +0,0 @@ -#include -#include -#include - -void -bwtorgba(unsigned char *b,unsigned char *l,int n) { - while(n--) { - l[0] = *b; - l[1] = *b; - l[2] = *b; - l[3] = 0xff; - l += 4; b++; - } -} - -void -latorgba(unsigned char *b, unsigned char *a,unsigned char *l,int n) { - while(n--) { - l[0] = *b; - l[1] = *b; - l[2] = *b; - l[3] = *a; - l += 4; b++; a++; - } -} - -void -rgbtorgba(unsigned char *r,unsigned char *g,unsigned char *b,unsigned char *l,int n) { - while(n--) { - l[0] = r[0]; - l[1] = g[0]; - l[2] = b[0]; - l[3] = 0xff; - l += 4; r++; g++; b++; - } -} - -void -rgbatorgba(unsigned char *r,unsigned char *g,unsigned char *b,unsigned char *a,unsigned char *l,int n) { - while(n--) { - l[0] = r[0]; - l[1] = g[0]; - l[2] = b[0]; - l[3] = a[0]; - l += 4; r++; g++; b++; a++; - } -} - -typedef struct _ImageRec { - unsigned short imagic; - unsigned short type; - unsigned short dim; - unsigned short xsize, ysize, zsize; - unsigned int min, max; - unsigned int wasteBytes; - char name[80]; - unsigned long colorMap; - FILE *file; - unsigned char *tmp, *tmpR, *tmpG, *tmpB; - unsigned long rleEnd; - unsigned int *rowStart; - int *rowSize; -} ImageRec; - -static void -ConvertShort(unsigned short *array, long length) { - unsigned b1, b2; - unsigned char *ptr; - - ptr = (unsigned char *)array; - while (length--) { - b1 = *ptr++; - b2 = *ptr++; - *array++ = (b1 << 8) | (b2); - } -} - -static void -ConvertLong(unsigned *array, long length) { - unsigned b1, b2, b3, b4; - unsigned char *ptr; - - ptr = (unsigned char *)array; - while (length--) { - b1 = *ptr++; - b2 = *ptr++; - b3 = *ptr++; - b4 = *ptr++; - *array++ = (b1 << 24) | (b2 << 16) | (b3 << 8) | (b4); - } -} - -static ImageRec *ImageOpen(const char *fileName) -{ - union { - int testWord; - char testByte[4]; - } endianTest; - ImageRec *image; - int swapFlag; - int x; - - endianTest.testWord = 1; - if (endianTest.testByte[0] == 1) { - swapFlag = 1; - } else { - swapFlag = 0; - } - - image = (ImageRec *)malloc(sizeof(ImageRec)); - if (image == NULL) { - fprintf(stderr, "Out of memory!\n"); - exit(1); - } - if ((image->file = fopen(fileName, "rb")) == NULL) { - perror(fileName); - exit(1); - } - - fread(image, 1, 12, image->file); - - if (swapFlag) { - ConvertShort(&image->imagic, 6); - } - - image->tmp = (unsigned char *)malloc(image->xsize*256); - image->tmpR = (unsigned char *)malloc(image->xsize*256); - image->tmpG = (unsigned char *)malloc(image->xsize*256); - image->tmpB = (unsigned char *)malloc(image->xsize*256); - if (image->tmp == NULL || image->tmpR == NULL || image->tmpG == NULL || - image->tmpB == NULL) { - fprintf(stderr, "Out of memory!\n"); - exit(1); - } - - if ((image->type & 0xFF00) == 0x0100) { - x = image->ysize * image->zsize * sizeof(unsigned); - image->rowStart = (unsigned *)malloc(x); - image->rowSize = (int *)malloc(x); - if (image->rowStart == NULL || image->rowSize == NULL) { - fprintf(stderr, "Out of memory!\n"); - exit(1); - } - image->rleEnd = 512 + (2 * x); - fseek(image->file, 512, SEEK_SET); - fread(image->rowStart, 1, x, image->file); - fread(image->rowSize, 1, x, image->file); - if (swapFlag) { - ConvertLong(image->rowStart, x/(int)sizeof(unsigned)); - ConvertLong((unsigned *)image->rowSize, x/(int)sizeof(int)); - } - } - return image; -} - -static void -ImageClose(ImageRec *image) { - fclose(image->file); - free(image->tmp); - free(image->tmpR); - free(image->tmpG); - free(image->tmpB); - free(image); -} - -static void -ImageGetRow(ImageRec *image, unsigned char *buf, int y, int z) { - unsigned char *iPtr, *oPtr, pixel; - int count; - - if ((image->type & 0xFF00) == 0x0100) { - fseek(image->file, (long) image->rowStart[y+z*image->ysize], SEEK_SET); - fread(image->tmp, 1, (unsigned int)image->rowSize[y+z*image->ysize], - image->file); - - iPtr = image->tmp; - oPtr = buf; - for (;;) { - pixel = *iPtr++; - count = (int)(pixel & 0x7F); - if (!count) { - return; - } - if (pixel & 0x80) { - while (count--) { - *oPtr++ = *iPtr++; - } - } else { - pixel = *iPtr++; - while (count--) { - *oPtr++ = pixel; - } - } - } - } else { - fseek(image->file, 512+(y*image->xsize)+(z*image->xsize*image->ysize), - SEEK_SET); - fread(buf, 1, image->xsize, image->file); - } -} - -unsigned * -read_texture(char *name, int *width, int *height, int *components) { - unsigned *base, *lptr; - unsigned char *rbuf, *gbuf, *bbuf, *abuf; - ImageRec *image; - int y; - - image = ImageOpen(name); - - if(!image) - return NULL; - (*width)=image->xsize; - (*height)=image->ysize; - (*components)=image->zsize; - base = (unsigned *)malloc(image->xsize*image->ysize*sizeof(unsigned)); - rbuf = (unsigned char *)malloc(image->xsize*sizeof(unsigned char)); - gbuf = (unsigned char *)malloc(image->xsize*sizeof(unsigned char)); - bbuf = (unsigned char *)malloc(image->xsize*sizeof(unsigned char)); - abuf = (unsigned char *)malloc(image->xsize*sizeof(unsigned char)); - if(!base || !rbuf || !gbuf || !bbuf) - return NULL; - lptr = base; - for(y=0; yysize; y++) { - if(image->zsize>=4) { - ImageGetRow(image,rbuf,y,0); - ImageGetRow(image,gbuf,y,1); - ImageGetRow(image,bbuf,y,2); - ImageGetRow(image,abuf,y,3); - rgbatorgba(rbuf,gbuf,bbuf,abuf,(unsigned char *)lptr,image->xsize); - lptr += image->xsize; - } else if(image->zsize==3) { - ImageGetRow(image,rbuf,y,0); - ImageGetRow(image,gbuf,y,1); - ImageGetRow(image,bbuf,y,2); - rgbtorgba(rbuf,gbuf,bbuf,(unsigned char *)lptr,image->xsize); - lptr += image->xsize; - } else if(image->zsize==2) { - ImageGetRow(image,rbuf,y,0); - ImageGetRow(image,abuf,y,1); - latorgba(rbuf,abuf,(unsigned char *)lptr,image->xsize); - lptr += image->xsize; - } else { - ImageGetRow(image,rbuf,y,0); - bwtorgba(rbuf,(unsigned char *)lptr,image->xsize); - lptr += image->xsize; - } - } - ImageClose(image); - free(rbuf); - free(gbuf); - free(bbuf); - free(abuf); - - return (unsigned *) base; -} diff --git a/lib/glut-3.7.6/progs/advanced97/texture.dsp b/lib/glut-3.7.6/progs/advanced97/texture.dsp deleted file mode 100644 index 876c7f0f3..000000000 --- a/lib/glut-3.7.6/progs/advanced97/texture.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="texture" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=texture - 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 "texture.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 "texture.mak" CFG="texture - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "texture - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "texture - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "texture - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "texture - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "texture - Win32 Release" -# Name "texture - Win32 Debug" -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/texture.h b/lib/glut-3.7.6/progs/advanced97/texture.h deleted file mode 100644 index 34012bdf3..000000000 --- a/lib/glut-3.7.6/progs/advanced97/texture.h +++ /dev/null @@ -1,16 +0,0 @@ -/* - * read_texture() - read in an image file in SGI 'libimage' format - * currently its very simple minded and converts all images - * to RGBA8 regardless of the input format and returns the - * original number of components in the appropriate parameter. - * - * - * the components are converted as follows - * L -> LLL 1.0 - * LA -> LLL A - * RGB -> RGB 1.0 - * RGBA -> RGB A - * - */ -unsigned * -read_texture(const char *name, int *width, int *height, int *components); diff --git a/lib/glut-3.7.6/progs/advanced97/underwater.c b/lib/glut-3.7.6/progs/advanced97/underwater.c deleted file mode 100644 index 4727f5a03..000000000 --- a/lib/glut-3.7.6/progs/advanced97/underwater.c +++ /dev/null @@ -1,220 +0,0 @@ -#include -#include -#include -#include -#include "texture.h" - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -#ifndef __sgi -/* Most math.h's do not define float versions of the math functions. */ -#define expf(x) ((float)exp((x))) -#define sinf(x) ((float)sin((x))) -#endif - -static float transx = 1.0, transy, rotx, roty; -static int ox = -1, oy = -1; -static int mot = 0; -#define PAN 1 -#define ROT 2 - -void -pan(const int x, const int y) { - transx += (x-ox)/5.; - transy -= (y-oy)/5.; - ox = x; oy = y; - glutPostRedisplay(); -} - -void -rotate(const int x, const int y) { - rotx += x-ox; - if (rotx > 360.) rotx -= 360.; - else if (rotx < -360.) rotx += 360.; - roty += y-oy; - if (roty > 360.) roty -= 360.; - else if (roty < -360.) roty += 360.; - ox = x; oy = y; - glutPostRedisplay(); -} - -void -motion(int x, int y) { - if (mot == PAN) pan(x, y); - else if (mot == ROT) rotate(x,y); -} - -void -mouse(int button, int state, int x, int y) { - if(state == GLUT_DOWN) { - switch(button) { - case GLUT_LEFT_BUTTON: - mot = PAN; - motion(ox = x, oy = y); - break; - case GLUT_RIGHT_BUTTON: - mot = ROT; - motion(ox = x, oy = y); - break; - case GLUT_MIDDLE_BUTTON: - break; - } - } else if (state == GLUT_UP) { - mot = 0; - } -} - -static GLfloat s_plane[4] = { 1.0, 0., 0., 0.}; -static GLfloat t_plane[4] = { 0., 0., 1.0, 0.}; -static GLfloat fog_params[5] = {.015, .1, .2, .2, .1}; - -void init(void) { - int width, height, components; - GLubyte *image; - - glClearColor (0.0, 0.0, 0.0, 0.0); - glEnable(GL_DEPTH_TEST); - glShadeModel(GL_SMOOTH); - - if (!(image = (GLubyte *)read_texture("../data/sea.rgb", &width, &height, &components))) { - perror("sea.rgb"); - exit(EXIT_FAILURE); - } - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexImage2D(GL_TEXTURE_2D, 0, 4, width, height, 0, - GL_RGBA, GL_UNSIGNED_BYTE, image); - - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); - glTexGenfv(GL_S, GL_EYE_PLANE, s_plane); - glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); - glTexGenfv(GL_T, GL_EYE_PLANE, t_plane); - - glEnable(GL_TEXTURE_GEN_S); - glEnable(GL_TEXTURE_GEN_T); - glEnable(GL_TEXTURE_2D); - glEnable(GL_CULL_FACE); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_AUTO_NORMAL); - glEnable(GL_NORMALIZE); - glFrontFace(GL_CW); - glCullFace(GL_BACK); - glMaterialf (GL_FRONT, GL_SHININESS, 64.0); - - glClearColor(.09f,.18f,.18f,1.f); - - glFogi(GL_FOG_MODE, GL_EXP); - glFogf(GL_FOG_DENSITY, fog_params[0]); - glFogfv(GL_FOG_COLOR, fog_params+1); - glEnable(GL_FOG); - { - GLfloat pos[] = {0.,150.,1.,1.}; - glLightfv(GL_LIGHT0, GL_POSITION, pos); - } -} - -void display(void) { - GLfloat s, t; - static float phase; - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glMatrixMode(GL_TEXTURE); - glPushMatrix(); - s = sinf(phase); t = s; phase += M_PI/25.f; - if (phase > 2*M_PI) phase -= 2*M_PI; - glTranslatef(.5f, -0.5f, 0.f); - glScalef(.1f, .1f, 1.f); - glTranslatef(s, t, 0.f); - glMatrixMode(GL_MODELVIEW); - - glPushMatrix(); - glColor4f(.09, .18, .18, 1.f); - glDisable(GL_TEXTURE_2D); - glTranslatef(0., 0., -160.); - glScalef(200., 200., 1.); - glBegin(GL_POLYGON); - glVertex3f(-1.,-1.,0.); - glVertex3f( 1.,-1.,0.); - glVertex3f( 1., 1.,0.); - glVertex3f(-1., 1.,0.); - glEnd(); - glPopMatrix(); - glPushMatrix(); - glEnable(GL_TEXTURE_2D); - glTranslatef(0., 0., -100.+transx); - glRotatef(rotx, 0.0, 1.0, 0.0); - glScalef(10.f, 10.f, 10.f); - glutSolidTeapot(2.0); - glPopMatrix (); - glMatrixMode(GL_TEXTURE); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glutSwapBuffers(); -} - -void reshape(int w, int h) { - glViewport(0, 0, (GLsizei) w, (GLsizei) h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(40., 1.0, 10.0, 200000.); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -void ffunc(void) { - static int state = 1; - if (state ^= 1) - glEnable(GL_FOG); - else - glDisable(GL_FOG); -} - -void help(void) { - printf("Usage: smoke [image]\n"); - printf("'h' - help\n"); - printf("'f' - toggle fog\n"); - printf("left mouse - pan\n"); - printf("right mouse - rotate\n"); -} - -/*ARGSUSED1*/ -void key (unsigned char key, int x, int y) { - switch (key) { - case 'f': ffunc(); break; - case 'h': help(); break; - case '\033': exit(EXIT_SUCCESS); break; - default: break; - } -} - -void animate(void) { - glutPostRedisplay(); -} - -int main(int argc, char** argv) { - glutInitWindowSize(256, 256); - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); - glutInitWindowPosition(100, 100); - glutCreateWindow (argv[0]); - init(); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glutKeyboardFunc(key); - glutIdleFunc(animate); - glutMouseFunc(mouse); - glutMotionFunc(motion); - - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/advanced97/underwater.dsp b/lib/glut-3.7.6/progs/advanced97/underwater.dsp deleted file mode 100644 index 4f42b32ec..000000000 --- a/lib/glut-3.7.6/progs/advanced97/underwater.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="underwater" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=underwater - 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 "underwater.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 "underwater.mak" CFG="underwater - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "underwater - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "underwater - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "underwater - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "underwater - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "underwater - Win32 Release" -# Name "underwater - Win32 Debug" -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# Begin Source File - -SOURCE=.\texture.h -# End Source File -# Begin Source File - -SOURCE=.\underwater.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/usespheremap.c b/lib/glut-3.7.6/progs/advanced97/usespheremap.c deleted file mode 100644 index 81ff5c2bf..000000000 --- a/lib/glut-3.7.6/progs/advanced97/usespheremap.c +++ /dev/null @@ -1,252 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include "texture.h" - -#ifndef __sgi -#define trunc(x) ((double)((int)(x))) -#endif - -GLsizei sphereTexW, sphereTexH, padSphereTexW, padSphereTexH; -GLint sphereTexComp; - - -const char defaultSphereMap[] = "../data/spheremap.rgb"; -int drawTorus = 1; - - -int roundup(int n) -{ - int val = 1; - while (val < n) val <<= 1; - return val; -} - -void create_texture(const char *fname, GLsizei *w, GLsizei *h, - GLsizei *padW, GLsizei *padH, GLint *comps) -{ - GLuint *img, *padImg = NULL; - int y; - - img = read_texture(fname, w, h, comps); - if (!img) { - fprintf(stderr, "Could not open %s\n", fname); - exit(1); - } - - /* if width & height are not powers of two, pad image with black */ - if (*w & (*w - 1)) { - *padW = roundup(*w); - } else { - *padW = *w; - } - if (*h & (*h - 1)) { - *padH = roundup(*h); - } else { - *padH = *h; - } - - if (*padW != *w || *padH != *h) { -printf("rounding %s up...\n", fname); - padImg = (GLuint *)malloc(*padW * *padH * sizeof(GLuint)); - if (!padImg) { - fprintf(stderr, "Malloc of %d bytes failed.\n", - *padW * *padH * sizeof(GLuint)); - exit(1); - } - memset(padImg, 0, *padW * *padH * sizeof(GLuint)); - for (y = 0; y < *h; y++) { - memcpy(&padImg[y * *padW], &img[y * *w], *w * sizeof(GLuint)); - } - } - - /* you should use texture objects here if your system supports them... */ -printf("w = %d h = %d\n", *padW, *padH); - glTexImage2D(GL_TEXTURE_2D, 0, 4, *padW, *padH, 0, - GL_RGBA, GL_UNSIGNED_BYTE, img); - - free(img); - if (padImg) free(padImg); -} - -void init(const char *sphereFile) -{ - static GLfloat lightpos[] = {.5, .75, 1.5, 1}; - - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - - create_texture(sphereFile, &sphereTexW, &sphereTexH, - &padSphereTexW, &padSphereTexH, &sphereTexComp); -} - -void reshape(GLsizei w, GLsizei h) -{ - glViewport(0, 0, w, h); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(60, 1, .01, 10); - gluLookAt(0, 0, 0, - 0, 0, -1, - 0, 1, 0); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -void draw_room(void) -{ - /* material for the walls, floor, ceiling */ - static GLfloat wall_mat[] = {1.f, 1.f, 1.f, 1.f}; - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, wall_mat); - - glBegin(GL_QUADS); - - /* floor */ - glNormal3f(0, 1, 0); - glVertex3f(-1, -1, 1); - glVertex3f(1, -1, 1); - glVertex3f(1, -1, -1); - glVertex3f(-1, -1, -1); - - /* ceiling */ - glNormal3f(0, -1, 0); - glVertex3f(-1, 1, -1); - glVertex3f(1, 1, -1); - glVertex3f(1, 1, 1); - glVertex3f(-1, 1, 1); - - /* left wall */ - glNormal3f(1, 0, 0); - glVertex3f(-1, -1, -1); - glVertex3f(-1, 1, -1); - glVertex3f(-1, 1, 1); - glVertex3f(-1, -1, 1); - - /* right wall */ - glNormal3f(-1, 0, 0); - glVertex3f(1, -1, 1); - glVertex3f(1, 1, 1); - glVertex3f(1, 1, -1); - glVertex3f(1, -1, -1); - - /* far wall */ - glNormal3f(0, 0, 1); - glVertex3f(-1, -1, -1); - glVertex3f(1, -1, -1); - glVertex3f(1, 1, -1); - glVertex3f(-1, 1, -1); - - glEnd(); - -} - -void draw_torus(GLdouble angle) -{ - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, - GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, - GL_NEAREST); - glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); - glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); - glEnable(GL_TEXTURE_GEN_S); - glEnable(GL_TEXTURE_GEN_T); - glEnable(GL_TEXTURE_2D); - glEnable(GL_CULL_FACE); - - glPushMatrix(); - glTranslatef(0, 0, -3); - glRotatef(angle, 1, 1, 0); - - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - - if (drawTorus) { - glutSolidTorus(.4, .75, 32, 32); - } else { - GLUquadricObj *sphere = gluNewQuadric(); - gluSphere(sphere, 1, 32, 32); - } - - glDisable(GL_TEXTURE_2D); - glDisable(GL_TEXTURE_GEN_S); - glDisable(GL_TEXTURE_GEN_T); - glEnable(GL_LIGHTING); - glDisable(GL_CULL_FACE); - - glPopMatrix(); -} - -GLdouble get_secs(void) -{ - return glutGet(GLUT_ELAPSED_TIME) / 1000.0; -} - -void draw(void) -{ - GLenum err; - GLdouble secs, degrees; - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - /* one revolution every 10 seconds... */ - secs = get_secs(); - secs = secs - 10.*trunc(secs / 10.); - degrees = (secs/10.) * (360.); - -#if 0 - draw_room(); -#endif - draw_torus(degrees); - - err = glGetError(); - if (err != GL_NO_ERROR) printf("Error: %s\n", gluErrorString(err)); - - glutSwapBuffers(); -} - -/* ARGSUSED1 */ -void key(unsigned char key, int x, int y) -{ - static int idle = 1; - if (key == 27) exit(0); - if (key == 'o' || key == 'O') { - drawTorus = (drawTorus == 0); - draw(); - } else { - if (idle) { - glutIdleFunc(0); - } else { - glutIdleFunc(draw); - } - idle = (idle == 0); - } -} - -main(int argc, char *argv[]) -{ - glutInit(&argc, argv); - glutInitWindowSize(256, 256); - glutInitWindowPosition(0, 0); - glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); - glutCreateWindow(argv[0]); - glutDisplayFunc(draw); - glutIdleFunc(draw); - glutKeyboardFunc(key); - glutReshapeFunc(reshape); - init(defaultSphereMap); - - glutMainLoop(); - return 0; -} - diff --git a/lib/glut-3.7.6/progs/advanced97/usespheremap.dsp b/lib/glut-3.7.6/progs/advanced97/usespheremap.dsp deleted file mode 100644 index ce04921b3..000000000 --- a/lib/glut-3.7.6/progs/advanced97/usespheremap.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="usespheremap" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=usespheremap - 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 "usespheremap.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 "usespheremap.mak" CFG="usespheremap - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "usespheremap - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "usespheremap - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "usespheremap - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "usespheremap - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "usespheremap - Win32 Release" -# Name "usespheremap - Win32 Debug" -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# Begin Source File - -SOURCE=.\texture.h -# End Source File -# Begin Source File - -SOURCE=.\usespheremap.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/vapor.c b/lib/glut-3.7.6/progs/advanced97/vapor.c deleted file mode 100644 index f51625849..000000000 --- a/lib/glut-3.7.6/progs/advanced97/vapor.c +++ /dev/null @@ -1,376 +0,0 @@ -#include -#include -#include -#include -#include -#include "texture.h" - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -#ifndef __sgi -/* Most math.h's do not define float versions of the trig functions. */ -#define sinf sin -#define cosf cos -#define atan2f atan2 -#endif - - -/* taken from skyfly */ -static float paper_plane_vertexes[] = { -/*Nx Ny Nz Vx Vy Vz */ -/* ---------------------------- Top view of plane, middle stretched open */ - 0.2, 0., .98, -.10, 0, .02,/* vertex #'s 4 (.48,0,-.06) */ - 0., 0., 1., -.36, .20, -.04,/* . */ - 0., 0., 1., .36, .01, 0,/* ... */ - 0., 0.,-1., -.32, .02, 0,/* . +X */ - 0., 1., 0., .48, 0, -.06,/* 2 . 6,8 ^ */ - 0., 1., 0., -.30, 0, -.12,/* . . . | */ - 0.,-1., 0., .36, -.01, 0,/* .. . .. | */ - 0.,-1., 0., -.32, -.02, 0,/* . . . | */ - 0., 0.,-1., .36, -.01, 0,/* . . . . . +Y<-----* */ - 0., 0.,-1., -.36, -.20, -.04,/* . . . for this picture */ - -0.2, 0., .98, -.10, 0, .02,/* . . . . . coord system rot. */ - -0.2, 0., -.98, -.10, 0, .02,/* . . . 90 degrees */ - 0., 0., -1., -.36, .20, -.04,/* . . . . . */ - 0., 0., -1., .36, .01, 0,/* . # . # marks */ - 0., 0., 1., -.32, .02, 0,/* . . . . . (0,0) origin */ - 0., -1., 0., .48, 0, -.06,/* . . . (z=0 at top */ - 0., -1., 0., -.30, 0, -.12,/* . 0 . 10 . of plane) */ - 0.,1., 0., .36, -.01, 0,/* . . . . . */ - 0.,1., 0., -.32, -.02, 0,/* . . . . . . . */ - 0., 0.,1., .36, -.01, 0,/* . . . . . */ - 0., 0.,1., -.36, -.20, -.04,/* 1.......3.5.7.......9 */ - 0.2, 0., -.98, -.10, 0, .02,/* (-.36,.2,-.04) */ -}; - -#define MAX_TIME (2*196) -#define MAX_VAPOR 1024 -int vapors = 0; -static struct vapor { - float x, y, z; - int time; - float size; -} vapor[MAX_VAPOR]; - -static float ttrans[2]; -static float scale = 1.; -static float transx, transy, rotx, roty; -static int ox = -1, oy = -1; -static int show_t = 0; -static int mot; -#define PAN 1 -#define ROT 2 - -static int _time = 1; -static float _x = -1.; -static float _y = .75; - -void -pan(int x, int y) { - transx += (x-ox)/500.; - transy -= (y-oy)/500.; - ox = x; oy = y; - glutPostRedisplay(); -} - -void -rotate(int x, int y) { - rotx += x-ox; - if (rotx > 360.) rotx -= 360.; - else if (rotx < -360.) rotx += 360.; - roty += y-oy; - if (roty > 360.) roty -= 360.; - else if (roty < -360.) roty += 360.; - ox = x; oy = y; - glutPostRedisplay(); -} - -void -motion(int x, int y) { - if (mot == PAN) pan(x, y); - else if (mot == ROT) rotate(x,y); -} - -void -mouse(int button, int state, int x, int y) { - if(state == GLUT_DOWN) { - switch(button) { - case GLUT_LEFT_BUTTON: - mot = PAN; - motion(ox = x, oy = y); - break; - case GLUT_MIDDLE_BUTTON: - mot = ROT; - motion(ox = x, oy = y); - break; - case GLUT_RIGHT_BUTTON: - break; - } - } else if (state == GLUT_UP) { - mot = 0; - } -} - -void toggle_t(void) { - show_t ^= 1; -} - -void wire(void) { - static int w; - if (w ^= 1) - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - else - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); -} - -void light(void) { - static int l; - if (l ^= 1) - glEnable(GL_LIGHTING); - else - glDisable(GL_LIGHTING); -} - -void up(void) { scale += .1; } -void down(void) { scale -= .1; } - -void -draw_plane(void) { - glEnable(GL_LIGHTING); - glShadeModel(GL_FLAT); - glRotatef(-120.f, 1.f, 0.f, 0.f); -#define nv(p) glNormal3fv(paper_plane_vertexes+6*p); glVertex3fv(paper_plane_vertexes+6*p+3) - glEnable(GL_CULL_FACE); - glCullFace(GL_FRONT); - glBegin(GL_TRIANGLE_STRIP); - nv(0); nv(1); nv(2); nv(3); nv(4); nv(5); nv(6); nv(7); nv(8); nv(9); nv(10); - glEnd(); - glCullFace(GL_BACK); - glBegin(GL_TRIANGLE_STRIP); - nv(11); nv(12); nv(13); nv(14); nv(15); nv(16); nv(17); nv(18); nv(19); nv(20); nv(21); - glEnd(); - glDisable(GL_CULL_FACE); - glShadeModel(GL_SMOOTH); - glDisable(GL_LIGHTING); -#undef nv -} - -void -add_vapor(void) { - int i; - /* garbage collect */ - for(i = 0; i < vapors; i++) - if (_time - vapor[i].time > MAX_TIME) { - memcpy(vapor+i, vapor+i+1, (vapors-i-1)*sizeof vapor[0]); - vapors--; - } - if (vapors >= MAX_VAPOR) { - printf("max_vapors\n"); - return; - } - vapor[vapors].time = _time; - vapor[vapors].x = -.6f + _x; - vapor[vapors].y = _y; - vapor[vapors].z = 0.f; - vapor[vapors].size = 1.f; - vapors++; - if (_x > 8.5) { - _y = .75f; - _x = -2.f; - vapors = 0; - } -} - -void -animate(void) { - static int cnt = 0; - ttrans[0] += .01; - if (ttrans[0] == 1.0) ttrans[0] = 0; - ttrans[1] += .005; - if (ttrans[1] == 1.0) ttrans[1] = 0; - _y -= .01f; - _x +=.025f; - if (cnt++ & 1) add_vapor(); - _time++; - glutPostRedisplay(); -} - -void help(void) { - printf("Usage: vapor [image]\n"); - printf("'h' - help\n"); - printf("'l' - toggle lighting\n"); - printf("'t' - toggle wireframe\n"); - printf("'UP' - scale up\n"); - printf("'DOWN' - scale down\n"); - printf("left mouse - pan\n"); - printf("middle mouse - rotate\n"); -} - -void init(char *filename) { - static GLfloat plane_mat[] = { 1.f, 1.f, .2f, 1.f }; - static unsigned *image; - static int width, height, components, i; - if (filename) { - image = read_texture(filename, &width, &height, &components); - if (image == NULL) { - fprintf(stderr, "Error: Can't load image file \"%s\".\n", - filename); - exit(EXIT_FAILURE); - } else { - printf("%d x %d image loaded\n", width, height); - } - if (components != 2 && components != 4) { - printf("must be an rgba or la image\n"); - exit(EXIT_FAILURE); - } - for(i = 0; i < width*height; i++) - image[i] = image[i] | 0xffffff00; - } else { - int i, j; - unsigned char *img; - components = 4; width = height = 512; - image = (unsigned *) malloc(width*height*sizeof(unsigned)); - img = (unsigned char *)image; - for (j = 0; j < height; j++) - for (i = 0; i < width; i++) { - int w2 = width/2, h2 = height/2; - if (i & 32) - img[4*(i+j*width)+0] = 0xff; - else - img[4*(i+j*width)+1] = 0xff; - if (j&32) - img[4*(i+j*width)+2] = 0xff; - if ((i-w2)*(i-w2) + (j-h2)*(j-h2) > 64*64 && - (i-w2)*(i-w2) + (j-h2)*(j-h2) < 300*300) img[4*(i+j*width)+3] = 0xff; - } - - } - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexImage2D(GL_TEXTURE_2D, 0, components, width, - height, 0, GL_RGBA, GL_UNSIGNED_BYTE, image); - glEnable(GL_TEXTURE_2D); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(50.,1.,.1,10.); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(0.,0.,-5.5); - - glEnable(GL_LIGHT0); - glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, plane_mat); - - glClearColor(0.1, 0.1, 0.6, 1.0); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glEnable(GL_ALPHA_TEST); - glAlphaFunc(GL_GREATER, 0./255.); - - glEnable(GL_DEPTH_TEST); -} - -void -draw_vapor(void) { - int i; - float intensity = .9f; - float t; - struct vapor *v; - - glDepthMask(0); - glEnable(GL_TEXTURE_2D); - - for(i = 0; i < vapors; i++) { - v = vapor+i; - t = _time - v->time; - - glPushMatrix(); - glTranslatef(v->x, v->y, v->z); - glScalef(.5*(t+40)/MAX_TIME, .5*(t+40)/MAX_TIME, 1.); - glColor4f(intensity,intensity,intensity,10./(t+0.f)); - glBegin(GL_QUADS); - glTexCoord2f(0, 0); glVertex3f(-1., -1., -0.); - glTexCoord2f(0, 1); glVertex3f(-1., 1., 0.); - glTexCoord2f(1, 1); glVertex3f( 1., 1., 0.); - glTexCoord2f(1, 0); glVertex3f( 1., -1., -0.); - glEnd(); - if (show_t) { - glDisable(GL_TEXTURE_2D); - glColor4f(0.,0.,0.,1.0); - glBegin(GL_LINE_LOOP); - glVertex3f(-1., -1., -0.); - glVertex3f(-1., 1., 0.); - glVertex3f( 1., 1., 0.); - glVertex3f( 1., -1., -0.); - glEnd(); - glEnable(GL_TEXTURE_2D); - } - glPopMatrix(); - } - glDisable(GL_TEXTURE_2D); - glDepthMask(1); -} - -void display(void) { - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - glPushMatrix(); - glPushMatrix(); - glColor4f(1.f,1.f,.2f,1.f); - glTranslatef(_x, _y+.05f, 0.f); - glScalef(2.f,2.f,2.f); - glRotatef(-10.f, 0.f, 0.f, 1.f); - draw_plane(); - glPopMatrix(); - draw_vapor(); - glPopMatrix(); - glutSwapBuffers(); -} - -void reshape(int w, int h) { - glViewport(0, 0, w, h); -} - -/*ARGSUSED1*/ -void -key(unsigned char key, int x, int y) { - switch(key) { - case 'l': light(); break; - case 't': toggle_t(); break; - case 'w': wire(); break; - case 'h': help(); break; - case '\033': exit(EXIT_SUCCESS); break; - default: break; - } - glutPostRedisplay(); -} - -/*ARGSUSED1*/ -void -special(int key, int x, int y) { - switch(key) { - case GLUT_KEY_UP: up(); break; - case GLUT_KEY_DOWN: down(); break; - } -} - -int main(int argc, char** argv) { - glutInitWindowSize(256, 256); - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE|GLUT_DEPTH); - (void)glutCreateWindow(argv[0]); - init(argc == 1 ? "../data/smoke.bw" : argv[1]); - glutDisplayFunc(display); - glutKeyboardFunc(key); - glutSpecialFunc(special); - glutReshapeFunc(reshape); - glutMouseFunc(mouse); - glutMotionFunc(motion); - glutIdleFunc(animate); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/advanced97/vapor.dsp b/lib/glut-3.7.6/progs/advanced97/vapor.dsp deleted file mode 100644 index 6d9799dfb..000000000 --- a/lib/glut-3.7.6/progs/advanced97/vapor.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="vapor" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=vapor - 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 "vapor.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 "vapor.mak" CFG="vapor - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "vapor - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "vapor - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "vapor - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "vapor - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "vapor - Win32 Release" -# Name "vapor - Win32 Debug" -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# Begin Source File - -SOURCE=.\texture.h -# End Source File -# Begin Source File - -SOURCE=.\vapor.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/volume.c b/lib/glut-3.7.6/progs/advanced97/volume.c deleted file mode 100644 index c9d39e09f..000000000 --- a/lib/glut-3.7.6/progs/advanced97/volume.c +++ /dev/null @@ -1,666 +0,0 @@ -#include -#include -#include "texture.h" -#include -#include -#include - -/* nonzero if not power of 2 */ -#define NOTPOW2(num) ((num) & (num - 1)) - -int -makepow2(int val) -{ - int power = 0; - if(!val) - return 0; - - while(val >>= 1) - power++; - - return(1 << power); -} - -#define CHECK_ERROR(str) \ -{ \ - GLenum error; \ - if(error = glGetError()) \ - printf("GL Error: %s (%s)\n", gluErrorString(error), str); \ -} - -enum {X, Y, Z, W}; -enum {R, G, B, A}; -enum {OVER, ATTENUATE, NONE, LASTOP}; /* blend modes */ -/* mouse modes */ -enum {OBJ_ANGLE, SLICES, CUTTING, GEOMXY, GEOMZ, MINBOOST, BOOSTWID, BOOST}; -enum {NOLIST, SPHERE}; /* display list */ - -/* window dimensions */ -int winWidth = 512; -int winHeight = 512; -int active; -int operator = OVER; -GLboolean texture = GL_TRUE; -GLboolean dblbuf = GL_TRUE; -GLboolean cut = GL_FALSE; -GLboolean geom = GL_FALSE; -GLboolean map = GL_FALSE; -GLint cutbias = 50; -int hasBlendColor = 0; -#if defined(_WIN32) && !defined(MESA) -#include -PFNGLBLENDCOLOREXTPROC glBlendColorEXT; -#endif - -GLfloat objangle[2] = {0.f, 0.f}; -GLfloat objpos[3] = {0.f, 0.f, 0.f}; - - -GLfloat minboost = 0.f, boostwid = .03f, boost = 3.f; /* transfer function */ - -/* 3d texture data that's read in */ -/* XXX TODO; make command line arguments */ -int Texwid = 128; /* dimensions of each 2D texture */ -int Texht = 128; -int Texdepth = 69; /* number of 2D textures */ - -/* Actual dimensions of the texture (restricted to max 3d texture size) */ -int texwid, texht, texdepth; -int slices; -GLubyte *tex3ddata; /* pointer to 3D texture data */ - - -GLfloat *lighttex = 0; -GLfloat lightpos[4] = {0.f, 0.f, 1.f, 0.f}; -GLboolean lightchanged[2] = {GL_TRUE, GL_TRUE}; - - -void -reshape(int wid, int ht) -{ - winWidth = wid; - winHeight = ht; - glViewport(0, 0, wid, ht); -} - - -void -motion(int x, int y) -{ - switch(active) - { - case OBJ_ANGLE: - objangle[X] = (x - winWidth/2) * 360./winWidth; - objangle[Y] = (y - winHeight/2) * 360./winHeight; - glutPostRedisplay(); - break; - case SLICES: - slices = x * texwid/winWidth; - glutPostRedisplay(); - break; - case CUTTING: - cutbias = (x - winWidth/2) * 300/winWidth; - glutPostRedisplay(); - break; - case GEOMXY: - objpos[X] = (x - winWidth/2) * 300/winWidth; - objpos[Y] = (winHeight/2 - y) * 300/winHeight; - glutPostRedisplay(); - break; - case GEOMZ: - objpos[Z] = (x - winWidth/2) * 300/winWidth; - glutPostRedisplay(); - break; - case MINBOOST: - minboost = x * .25f/winWidth; - glutPostRedisplay(); - break; - case BOOSTWID: - boostwid = x * .5f/winWidth; - glutPostRedisplay(); - break; - case BOOST: - boost = x * 20.f/winWidth; - glutPostRedisplay(); - break; - } -} - -void -mouse(int button, int state, int x, int y) -{ - if(state == GLUT_DOWN) - switch(button) - { - case GLUT_LEFT_BUTTON: /* rotate the data volume */ - if(map) - active = MINBOOST; - else - active = OBJ_ANGLE; - motion(x, y); - break; - case GLUT_MIDDLE_BUTTON: - if(map) - active = BOOSTWID; - else - if(cut) - active = CUTTING; /* move cutting plane */ - else - active = GEOMXY; /* move geometry */ - motion(x, y); - break; - case GLUT_RIGHT_BUTTON: /* move the polygon */ - if(map) - active = BOOST; - else - if(geom) - active = GEOMZ; - else - active = SLICES; - motion(x, y); - break; - } -} - -/* use pixel path to remap 3D texture data */ -void -remaptex(void) -{ - int i, size; - GLfloat *map; - - glPixelTransferi(GL_MAP_COLOR, GL_TRUE); - - glGetIntegerv(GL_MAX_PIXEL_MAP_TABLE, &size); - - map = (GLfloat *)malloc(sizeof(GLfloat) * size); - for(i = 0; i < size;i++) - { - map[i] = (GLfloat)i/(size - 1); - if(((GLfloat)i/size > minboost) && - ((GLfloat)i/size < minboost + boostwid)) - { - map[i] *= boost; - } - else - map[i] /= boost; - } - - glPixelMapfv(GL_PIXEL_MAP_R_TO_R, size, map); - glPixelMapfv(GL_PIXEL_MAP_G_TO_G, size, map); - glPixelMapfv(GL_PIXEL_MAP_B_TO_B, size, map); - glPixelMapfv(GL_PIXEL_MAP_A_TO_A, size, map); - -#ifdef GL_EXT_texture3D - glTexImage3DEXT(GL_TEXTURE_3D_EXT, 0, GL_LUMINANCE_ALPHA, - texwid, texht, texdepth, - 0, - GL_RGBA, GL_UNSIGNED_BYTE, tex3ddata); -#endif - - glPixelTransferi(GL_MAP_COLOR, GL_FALSE); - free(map); - - CHECK_ERROR("OpenGL Error in remaptex()"); -} - - -GLdouble clipplane0[] = {-1., 0., 0., 100.}; /* x < 100 out */ -GLdouble clipplane1[] = { 1., 0., 0., 100.}; /* x > 100 out */ -GLdouble clipplane2[] = { 0., -1., 0., 100.}; /* y < 100 out */ -GLdouble clipplane3[] = { 0., 1., 0., 100.}; /* y > 100 out */ -GLdouble clipplane4[] = { 0., 0., -1., 100.}; /* z < 100 out */ -GLdouble clipplane5[] = { 0., 0., 1., 100.}; /* z > 100 out */ - -/* define a cutting plane */ -GLdouble cutplane[] = {0.f, -.5f, -2.f, 50.f}; - -/* draw the object unlit without surface texture */ -void redraw(void) -{ - int i; - GLfloat offS, offT, offR; /* mapping texture to planes */ - - offS = 200.f/texwid; - offT = 200.f/texht; - offR = 200.f/texdepth; - - clipplane0[W] = 100.f - offS; - clipplane1[W] = 100.f - offS; - clipplane2[W] = 100.f - offT; - clipplane3[W] = 100.f - offT; - clipplane4[W] = 100.f - offR; - clipplane5[W] = 100.f - offR; - - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - - if(map) - remaptex(); - - /* GL_MODELVIEW */ - if(cut) - { - cutplane[W] = cutbias; - glClipPlane(GL_CLIP_PLANE5, cutplane); - } - - glPushMatrix(); /* identity */ - glRotatef(objangle[X], 0.f, 1.f, 0.f); - glRotatef(objangle[Y], 1.f, 0.f, 0.f); - glClipPlane(GL_CLIP_PLANE0, clipplane0); - glClipPlane(GL_CLIP_PLANE1, clipplane1); - glClipPlane(GL_CLIP_PLANE2, clipplane2); - glClipPlane(GL_CLIP_PLANE3, clipplane3); - glClipPlane(GL_CLIP_PLANE4, clipplane4); - if(!cut) - glClipPlane(GL_CLIP_PLANE5, clipplane5); - glPopMatrix(); /* back to identity */ - - /* draw opaque geometry here */ - glDisable(GL_CLIP_PLANE0); - glDisable(GL_CLIP_PLANE1); - glDisable(GL_CLIP_PLANE2); - glDisable(GL_CLIP_PLANE3); - glDisable(GL_CLIP_PLANE4); - if(geom) - { - if(!cut) - glDisable(GL_CLIP_PLANE5); - glPushMatrix(); - glTranslatef(objpos[X], objpos[Y], objpos[Z]); - glCallList(SPHERE); - glPopMatrix(); - } - glMatrixMode(GL_TEXTURE); - glEnable(GL_CLIP_PLANE0); - glEnable(GL_CLIP_PLANE1); - glEnable(GL_CLIP_PLANE2); - glEnable(GL_CLIP_PLANE3); - glEnable(GL_CLIP_PLANE4); - glEnable(GL_CLIP_PLANE5); - - glMatrixMode(GL_TEXTURE); - glPushMatrix(); /* identity */ - glTranslatef( .5f, .5f, .5f); - glRotatef(objangle[Y], 1.f, 0.f, 0.f); - glRotatef(objangle[X], 0.f, 0.f, 1.f); - glTranslatef( -.5f, -.5f, -.5f); - - switch(operator) - { - case OVER: - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - break; - case ATTENUATE: -#ifdef GL_EXT_blend_color - if (hasBlendColor){ - glEnable(GL_BLEND); - glBlendFunc(GL_CONSTANT_ALPHA_EXT, GL_ONE); - glBlendColorEXT(1.f, 1.f, 1.f, 1.f/slices); - } else -#endif - { - fprintf(stderr, "volume: attenuate not supported!\n"); - } - break; - case NONE: - /* don't blend */ - break; - } - - if(texture) { -#ifdef GL_EXT_texture3D - glEnable(GL_TEXTURE_3D_EXT); -#endif - } else { -#ifdef GL_EXT_texture3D - glDisable(GL_TEXTURE_3D_EXT); -#endif - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - } - - - - for(i = 0; i < slices; i++) - { - glBegin(GL_QUADS); - glVertex3f(-100.f, -100.f, - -100.f + offR + i * (200.f - 2 * offR)/(slices - 1)); - glVertex3f( 100.f, -100.f, - -100.f + offR + i * (200.f - 2 * offR)/(slices - 1)); - glVertex3f( 100.f, 100.f, - -100.f + offR + i * (200.f - 2 * offR)/(slices - 1)); - glVertex3f(-100.f, 100.f, - -100.f + offR + i * (200.f - 2 * offR)/(slices - 1)); - glEnd(); - } -#ifdef GL_EXT_texture3D - glDisable(GL_TEXTURE_3D_EXT); -#endif - if(!texture) - { - glDisable(GL_LIGHTING); - } - glDisable(GL_BLEND); - - glPopMatrix(); /* back to identity */ - glMatrixMode(GL_MODELVIEW); - - if(operator == ATTENUATE) - { - glPixelTransferf(GL_RED_SCALE, 3.f); /* brighten image */ - glPixelTransferf(GL_GREEN_SCALE, 3.f); - glPixelTransferf(GL_BLUE_SCALE, 3.f); - glCopyPixels(0, 0, winWidth, winHeight, GL_COLOR); - } - if(dblbuf) - glutSwapBuffers(); - else - glFlush(); - - CHECK_ERROR("OpenGL Error in redraw()"); -} - -/* ARGSUSED1 */ -void key(unsigned char key, int x, int y) -{ - switch(key) - { - case 'm': /* remap texture values */ - if(map) - { - fprintf(stderr, "remapping off\n"); - map = GL_FALSE; - } - else - { - fprintf(stderr, "remapping on:\n" - "left mouse moves emphasize value\n" - "middle mouse moves emphasize width\n" - "right mouse adjusts gain\n"); - map = GL_TRUE; - } - - remaptex(); - glutPostRedisplay(); - break; - case 'o': - operator++; - if(operator == LASTOP) - operator = OVER; - glutPostRedisplay(); - break; - case 't': - if(texture) - texture = GL_FALSE; - else - texture = GL_TRUE; - glutPostRedisplay(); - break; - case 'c': - if(cut) - { - fprintf(stderr, "cutting plane off\n"); - cut = GL_FALSE; - } - else - { - fprintf(stderr, - "Cutting plane on: " - "middle mouse (horizontal) moves cutting plane\n"); - cut = GL_TRUE; - } - glutPostRedisplay(); - break; - case 'g': /* toggle geometry */ - if(geom) - geom = GL_FALSE; - else - geom = GL_TRUE; - glutPostRedisplay(); - break; - case '\033': - exit(0); - break; - case '?': - case 'h': - default: - fprintf(stderr, - "Keyboard Commands\n" - "m - toggle transfer function (remapping)\n" - "o - toggle operator\n" - "t - toggle 3D texturing\n" - "c - toggle cutting plane\n" - "g - toggle geometry\n"); - break; - } -} - -GLubyte * -loadtex3d(int *texwid, int *texht, int *texdepth, int *texcomps) -{ - char *filename; - GLubyte *tex3ddata; - GLuint *texslice; /* 2D slice of 3D texture */ - GLint max3dtexdims; /* maximum allowed 3d texture dimension */ - GLint newval; - int i; - - /* load 3D texture data */ - filename = (char*)malloc(sizeof(char) * strlen("../data/skull/skullXX.la")); - - tex3ddata = (GLubyte *)malloc(Texwid * Texht * Texdepth * - 4 * sizeof(GLubyte)); - for(i = 0; i < Texdepth; i++) - { - sprintf(filename, "../data/skull/skull%d.la", i); - /* read_texture reads as RGBA */ - texslice = read_texture(filename, texwid, texht, texcomps); - memcpy(&tex3ddata[i * Texwid * Texht * 4], /* copy in a slice */ - texslice, - Texwid * Texht * 4 * sizeof(GLubyte)); - free(texslice); - } - free(filename); - - *texdepth = Texdepth; - - max3dtexdims = 0; -#ifdef GL_EXT_texture3D - glGetIntegerv(GL_MAX_3D_TEXTURE_SIZE_EXT, &max3dtexdims); -#endif - - /* adjust width */ - newval = *texwid; - if(*texwid > max3dtexdims) - newval = max3dtexdims; - if(NOTPOW2(*texwid)) - newval = makepow2(*texwid); - if(newval != *texwid) - { - glPixelStorei(GL_UNPACK_ROW_LENGTH, *texwid); - glPixelStorei(GL_UNPACK_SKIP_PIXELS, (*texwid - newval)/2); - *texwid = newval; - } - - /* adjust height */ - newval = *texht; - if(*texht > max3dtexdims) - newval = max3dtexdims; - if(NOTPOW2(*texht)) - newval = makepow2(*texht); - if(*texht > newval) - { -#ifdef GL_EXT_texture3D - glPixelStorei(GL_UNPACK_IMAGE_HEIGHT_EXT, *texht); -#endif - glPixelStorei(GL_UNPACK_SKIP_ROWS, (*texht - newval)/2); - *texht = newval; - } - - /* adjust depth */ - newval = *texdepth; - if(*texdepth > max3dtexdims) - newval = max3dtexdims; - if(NOTPOW2(*texdepth)) - newval = makepow2(*texdepth); - if(*texdepth > newval) - { - *texdepth = newval; - } - return tex3ddata; -} - - - -main(int argc, char *argv[]) -{ - int texcomps; - static GLfloat splane[4] = {1.f/200.f, 0.f, 0.f, .5f}; - static GLfloat rplane[4] = {0, 1.f/200.f, 0, .5f}; - static GLfloat tplane[4] = {0, 0, 1.f/200.f, .5f}; - static GLfloat lightpos[4] = {150., 150., 150., 1.f}; - - - glutInit(&argc, argv); - glutInitWindowSize(winWidth, winHeight); - if(argc > 1) - { - char *args = argv[1]; - GLboolean done = GL_FALSE; - while(!done) - { - switch(*args) - { - case 's': /* single buffer */ - printf("Single Buffered\n"); - dblbuf = GL_FALSE; - break; - case '-': /* do nothing */ - break; - case 0: - done = GL_TRUE; - break; - } - args++; - } - } - if(dblbuf) - glutInitDisplayMode(GLUT_RGBA|GLUT_DEPTH|GLUT_DOUBLE); - else - glutInitDisplayMode(GLUT_RGBA|GLUT_DEPTH); - - (void)glutCreateWindow("volume rendering demo"); - glutDisplayFunc(redraw); - glutReshapeFunc(reshape); - glutMouseFunc(mouse); - glutMotionFunc(motion); - glutKeyboardFunc(key); - - /* Initialize OpenGL State */ - - /* draw a perspective scene */ -#if 0 - glMatrixMode(GL_PROJECTION); - /* cube, 300 on a side */ - glFrustum(-150., 150., -150., 150., 300., 600.); - glMatrixMode(GL_MODELVIEW); - /* look at scene from (0, 0, 450) */ - gluLookAt(0., 0., 450., 0., 0., 0., 0., 1., 0.); -#else - glMatrixMode(GL_PROJECTION); - /* cube, 300 on a side */ - glOrtho(-150., 150., -150., 150., -150., 150.); - glMatrixMode(GL_MODELVIEW); -#endif - - glEnable(GL_DEPTH_TEST); -#ifdef GL_EXT_texture3D - glEnable(GL_TEXTURE_3D_EXT); -#endif - - glEnable(GL_TEXTURE_GEN_S); - glEnable(GL_TEXTURE_GEN_T); - glEnable(GL_TEXTURE_GEN_R); - - glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - - glTexGenfv(GL_S, GL_OBJECT_PLANE, splane); - glTexGenfv(GL_T, GL_OBJECT_PLANE, tplane); - glTexGenfv(GL_R, GL_OBJECT_PLANE, rplane); - -#ifdef GL_EXT_texture3D - /* to avoid boundary problems */ - glTexParameteri(GL_TEXTURE_3D_EXT, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameteri(GL_TEXTURE_3D_EXT, GL_TEXTURE_WRAP_T, GL_CLAMP); - glTexParameteri(GL_TEXTURE_3D_EXT, GL_TEXTURE_WRAP_R_EXT, GL_CLAMP); -#endif - - glEnable(GL_CLIP_PLANE0); - glEnable(GL_CLIP_PLANE1); - glEnable(GL_CLIP_PLANE2); - glEnable(GL_CLIP_PLANE3); - glEnable(GL_CLIP_PLANE4); - glEnable(GL_CLIP_PLANE5); - - glDisable(GL_LIGHT0); - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - - - - tex3ddata = loadtex3d(&texwid, &texht, &texdepth, &texcomps); - - slices = texht; - -#ifdef GL_EXT_texture3D - glTexParameteri(GL_TEXTURE_3D_EXT, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexImage3DEXT(GL_TEXTURE_3D_EXT, 0, GL_LUMINANCE_ALPHA, - texwid, texht, texdepth, - 0, - GL_RGBA, GL_UNSIGNED_BYTE, tex3ddata); -#endif - - /* make a display list containing a sphere */ - glNewList(SPHERE, GL_COMPILE); - { - static GLfloat lightpos[] = {150.f, 150.f, 150.f, 1.f}; - static GLfloat material[] = {1.f, .5f, 1.f, 1.f}; - GLUquadricObj *qobj = gluNewQuadric(); - glPushAttrib(GL_LIGHTING_BIT); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, material); - gluSphere(qobj, 20.f, 20, 20); - gluDeleteQuadric(qobj); - glPopAttrib(); - } - glEndList(); - - key('?', 0, 0); /* print usage message */ - - CHECK_ERROR("end of main"); - - if(!glutExtensionSupported("GL_EXT_texture3d")) { - fprintf(stderr, - "volume: requires OpenGL texture 3D extension to operate correctly.\n"); - } - hasBlendColor = glutExtensionSupported("GL_EXT_blend_color"); - if(!hasBlendColor) { - fprintf(stderr, - "volume: needs OpenGL blend color extension to attenuate.\n"); -#if defined(_WIN32) && !defined(MESA) - glBlendColorEXT = (PFNGLBLENDCOLOREXTPROC) wglGetProcAddress("glBlendColorEXT"); - if (glBlendColorEXT == NULL) { - hasBlendColor = 0; - } -#endif - } - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/advanced97/volume.dsp b/lib/glut-3.7.6/progs/advanced97/volume.dsp deleted file mode 100644 index 6f861e108..000000000 --- a/lib/glut-3.7.6/progs/advanced97/volume.dsp +++ /dev/null @@ -1,89 +0,0 @@ -# Microsoft Developer Studio Project File - Name="volume" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=volume - 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 "volume.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 "volume.mak" CFG="volume - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "volume - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "volume - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "volume - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "volume - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "volume - Win32 Release" -# Name "volume - Win32 Debug" -# Begin Source File - -SOURCE=.\volume.c -# PROP Exclude_From_Build 1 -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/warp.c b/lib/glut-3.7.6/progs/advanced97/warp.c deleted file mode 100644 index 069da6a5a..000000000 --- a/lib/glut-3.7.6/progs/advanced97/warp.c +++ /dev/null @@ -1,323 +0,0 @@ -#include -#include -#include -#include -#include "texture.h" - -static unsigned *image; -static int width, height, components; -static float incr = .01, dir = 1.0; -static float scale = 1.0, tscale = 1.0, trotx, troty; - -static float transx = 1.0, transy, rotx, roty; -static int ox = -1, oy = -1; -static int mot = 0; -float *wrotx = &rotx, *wroty = &roty, *wscale = &scale; -#define PAN 1 -#define ROT 2 - -void -pan(const int x, const int y) { - transx += (x-ox)/5.; - transy -= (y-oy)/5.; - ox = x; oy = y; - glutPostRedisplay(); -} - -void -rotate(const int x, const int y) { - *wrotx += x-ox; - if (*wrotx > 360.) *wrotx -= 360.; - else if (*wrotx < -360.) *wrotx += 360.; - *wroty += y-oy; - if (*wroty > 360.) *wroty -= 360.; - else if (*wroty < -360.) *wroty += 360.; - ox = x; oy = y; - glutPostRedisplay(); -} - -void -motion(int x, int y) { - if (mot == PAN) pan(x, y); - else if (mot == ROT) rotate(x,y); -} - -void -mouse(int button, int state, int x, int y) { - if(state == GLUT_DOWN) { - switch(button) { - case GLUT_LEFT_BUTTON: - mot = PAN; - motion(ox = x, oy = y); - break; - case GLUT_MIDDLE_BUTTON: - mot = ROT; - motion(ox = x, oy = y); - break; - case GLUT_RIGHT_BUTTON: - break; - } - } else if (state == GLUT_UP) { - mot = 0; - } -} - -#define MAXMESH 64 - -float Ml[4*2*(MAXMESH+1)*2 * (MAXMESH+1)]; - -float N = 1.5; -float B = -1.5; - -void -mesh1(float x0, float x1, float y0, float y1, - float s0, float s1, float t0, float t1, float z, int nx, int ny) -{ - float y,x,s,t,dx,dy,ds,dt,vb[3],tb[2]; - float v; - float *mp = Ml; - - dx = (x1-x0)/nx; - dy = (y1-y0)/ny; - ds = (s1-s0)/nx; - dt = (t1-t0)/ny; - y = y0; - t = t0; - vb[2] = z; - while (y < y1) { - x = x0; - s = s0; - while(x <= x1) { - tb[0] = s; tb[1] = t; - vb[0] = x; vb[1] = y; - v = N*N - x*x - y*y; - if (v < 0.0) v = 0.0; - vb[2] = sqrt(v) + B; - if (vb[2] < 0.) vb[2] = 0.0; - *mp++ = tb[0]; - *mp++ = tb[1]; - mp += 2; - *mp++ = vb[0]; - *mp++ = vb[1]; - *mp++ = vb[2]; - mp++; - tb[1] = t+dt; - vb[1] = y+dy; - v = N*N - x*x - (y+dy)*(y+dy); - if (v < 0.0) v = 0.0; - vb[2] = sqrt(v) + B; - if (vb[2] < 0.) vb[2] = 0.0; - *mp++ = tb[0]; - *mp++ = tb[1]; - mp += 2; - *mp++ = vb[0]; - *mp++ = vb[1]; - *mp++ = vb[2]; - mp++; - x += dx; - s += ds; - } - y += dy; - t += dt; - } -} - -void -drawmesh(int nx,int ny) { - float *mp = Ml; - int i,j; - - glColor4f(1,1,1,1); - for (i = ny+1; i; i--) { - glBegin(GL_TRIANGLE_STRIP); - for (j = nx+1; j; j--) { - glTexCoord2fv(mp); - glVertex3fv(mp+4); - glTexCoord2fv(mp+8); - glVertex3fv(mp+12); mp += 16; - } - glEnd(); - } -} - -void -move(void) { - if (N > 2.1 || N < 1.5) - dir = -dir; - N += incr*dir; - mesh1(-1.5,1.5,-1.5,1.5,0.0,1.0,0.0,1.0,0.0,64,64); - glutPostRedisplay(); -} - -void -alphaup(void) { - incr += .01; - if (incr > .1) incr = .1; - glutPostRedisplay(); -} - -void -alphadown(void) { - incr -= .01; - if (incr < 0) incr = 0; - glutPostRedisplay(); -} - -void -left(void) { - *wscale -= .1; -} - -void -right(void) { - *wscale += .1; -} - -void -wire(void) { - static int wire_mode; - if (wire_mode ^= 1) - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - else - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); -} - -void -tfunc(void) { - static state; - if (state ^= 1) { - wrotx = &trotx; - wroty = &troty; - wscale = &tscale; - } else { - wrotx = &rotx; - wroty = &roty; - wscale = &scale; - } - -} - - -void -help(void) { - printf("'h' - help\n"); - printf("'w' - wire frame\n"); - printf("UP - faster\n"); - printf("DOWN - slower\n"); -} - -void -init(char *filename) { - if (filename) { - image = read_texture(filename, &width, &height, &components); - if (image == NULL) { - fprintf(stderr, "Error: Can't load image file \"%s\".\n", - filename); - exit(EXIT_FAILURE); - } else { - printf("%d x %d image loaded\n", width, height); - } - if (components < 3 || components > 4) { - printf("must be RGB or RGBA image\n"); - exit(EXIT_FAILURE); - } - } else { - int i, j; - components = 4; width = height = 128; - image = (unsigned *) malloc(width*height*sizeof(unsigned)); - for (j = 0; j < height; j++) - for (i = 0; i < width; i++) { - if (i & 16) - image[i+j*width] = 0xff; - else - image[i+j*width] = 0xff00; - if (j&16) - image[i+j*width] |= 0xff0000; - } - - } - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexImage2D(GL_TEXTURE_2D, 0, components, width, - height, 0, GL_RGBA, GL_UNSIGNED_BYTE, - image); - glEnable(GL_TEXTURE_2D); - glMatrixMode(GL_TEXTURE); - glLoadIdentity(); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(90.,1.,.1,10.); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(0.,0.,-1.5); - glClearColor(.25, .25, .25, 0.); - -} - -void -display(void) { - glClear(GL_COLOR_BUFFER_BIT); - glMatrixMode(GL_TEXTURE); - glPushMatrix(); - glTranslatef(.5f, .5f, .5f); - glRotatef(trotx, 0.f, 0.f, 1.f); - glScalef(tscale, tscale, tscale); - glTranslatef(-.5f, -.5f, -.5f); - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glRotatef(rotx, 0.f, 0.f, 1.f); - glScalef(scale, scale, scale); - drawmesh(64,64); - glPopMatrix(); - glMatrixMode(GL_TEXTURE); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glutSwapBuffers(); -} - -void -reshape(int w, int h) { - glViewport(0, 0, w, h); -} - -/*ARGSUSED1*/ -void -key(unsigned char key, int x, int y) { - switch(key) { - case '\033': exit(0); break; - case 'h': help(); break; - case 't': tfunc(); break; - case 'w': wire(); break; - } -} - -/*ARGSUSED1*/ -void -special(int key, int x, int y) { - switch(key) { - case GLUT_KEY_UP: alphaup(); break; - case GLUT_KEY_DOWN: alphadown(); break; - case GLUT_KEY_LEFT: left(); break; - case GLUT_KEY_RIGHT:right(); break; - } -} - -int -main(int argc, char** argv) { - glutInitWindowSize(256, 256); - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE); - (void)glutCreateWindow("warp"); - init(argv[1] ? argv[1] : "../data/mandrill.rgb"); - glutKeyboardFunc(key); - glutSpecialFunc(special); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glutIdleFunc(move); - glutMouseFunc(mouse); - glutMotionFunc(motion); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/advanced97/warp.dsp b/lib/glut-3.7.6/progs/advanced97/warp.dsp deleted file mode 100644 index d6d9d5c0d..000000000 --- a/lib/glut-3.7.6/progs/advanced97/warp.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="warp" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=warp - 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 "warp.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 "warp.mak" CFG="warp - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "warp - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "warp - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "warp - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "warp - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "warp - Win32 Release" -# Name "warp - Win32 Debug" -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# Begin Source File - -SOURCE=.\texture.h -# End Source File -# Begin Source File - -SOURCE=.\warp.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/water.c b/lib/glut-3.7.6/progs/advanced97/water.c deleted file mode 100644 index d8e1c371d..000000000 --- a/lib/glut-3.7.6/progs/advanced97/water.c +++ /dev/null @@ -1,322 +0,0 @@ -#include -#include -#include -#include -#include "texture.h" - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -#ifndef __sgi -/* Most math.h's do not define float versions of the math functions. */ -#define expf(x) ((float)exp((x))) -#define sinf(x) ((float)sin((x))) -#endif - -static int rgb; -static int mesh = 1; -static float ttrans[2]; -static float transx, transy, rotx, roty; -static float amplitude = 0.03; -static float freq = 5.0f; -static float phase = .00003; -static int ox = -1, oy = -1; -static int show_t = 1; -static int mot; -#define PAN 1 -#define ROT 2 - -void -pan(int x, int y) { - transx += (x-ox)/500.; - transy -= (y-oy)/500.; - ox = x; oy = y; - glutPostRedisplay(); -} - -void -rotate(int x, int y) { - rotx += x-ox; - if (rotx > 360.) rotx -= 360.; - else if (rotx < -360.) rotx += 360.; - roty += y-oy; - if (roty > 360.) roty -= 360.; - else if (roty < -360.) roty += 360.; - ox = x; oy = y; - glutPostRedisplay(); -} - -void -motion(int x, int y) { - if (mot == PAN) pan(x, y); - else if (mot == ROT) rotate(x,y); -} - -void -mouse(int button, int state, int x, int y) { - if(state == GLUT_DOWN) { - switch(button) { - case GLUT_LEFT_BUTTON: - mot = PAN; - motion(ox = x, oy = y); - break; - case GLUT_MIDDLE_BUTTON: - mot = ROT; - motion(ox = x, oy = y); - break; - case GLUT_RIGHT_BUTTON: - break; - } - } else if (state == GLUT_UP) { - mot = 0; - } -} - -void toggle_t(void) { - show_t ^= 1; -} - -void ffunc(void) { freq *= 2.f; } -void Ffunc(void) { freq /= 2.f; } -void mfunc(void) { mesh ^= 1; } - -void wire(void) { - static int w; - if (w ^= 1) { - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - glEnable(GL_BLEND); - } else { - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - glDisable(GL_BLEND); - } -} - -void light(void) { - static int l; - if (l ^= 1) - glEnable(GL_LIGHTING); - else - glDisable(GL_LIGHTING); -} - -void up(void) { amplitude += .01; } -void down(void) { amplitude -= .01; } -void left(void) { phase -= .00001; } -void right(void) { phase += .00001; } - -void -animate(void) { - ttrans[0] += .005f; - if (ttrans[0] == 1.0f) ttrans[0] = 0.0f; - ttrans[1] -= .0025f; - if (ttrans[1] <= 0.0f) ttrans[1] = 1.0f; - glutPostRedisplay(); -} - -void xfunc(void) { - static state = 1; - glutIdleFunc((state ^= 1) ? animate : NULL); -} - -void help(void) { - printf("Usage: water [image]\n"); - printf("'h' - help\n"); - printf("'l' - toggle lighting\n"); - printf("'f' - increase frequency\n"); - printf("'F' - decrease frequency\n"); - printf("'m' - toggle mesh\n"); - printf("'t' - toggle wireframe\n"); - printf("'x' - toggle water motion\n"); - printf("'UP' - increase amplitude\n"); - printf("'DOWN' - decrease amplitude\n"); - printf("'RIGHT' - increase phase change\n"); - printf("'LEFT' - decreae phase change\n"); - printf("left mouse - pan\n"); - printf("middle mouse - rotate\n"); -} - -void init(char *filename) { - GLfloat cloud_color[4] = { 1., 1., 1., 0., }; - GLfloat fog_color[4], fog_density = 0.05, density, far_cull; - unsigned *image; - int width, height, components; - if (filename) { - image = read_texture(filename, &width, &height, &components); - if (image == NULL) { - fprintf(stderr, "Error: Can't load image file \"%s\".\n", - filename); - exit(EXIT_FAILURE); - } else { - printf("%d x %d image loaded\n", width, height); - } - if (components < 3) rgb = 0; - } else { - int i, j; - unsigned char *img; - components = 4; width = height = 512; - image = (unsigned *) malloc(width*height*sizeof(unsigned)); - img = (unsigned char *)image; - for (j = 0; j < height; j++) - for (i = 0; i < width; i++) { - int w2 = width/2, h2 = height/2; - if (i & 32) - img[4*(i+j*width)+0] = 0xff; - else - img[4*(i+j*width)+1] = 0xff; - if (j&32) - img[4*(i+j*width)+2] = 0xff; - if ((i-w2)*(i-w2) + (j-h2)*(j-h2) > 64*64 && - (i-w2)*(i-w2) + (j-h2)*(j-h2) < 300*300) img[4*(i+j*width)+3] = 0xff; - } - - } - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, cloud_color); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexImage2D(GL_TEXTURE_2D, 0, components, width, - height, 0, GL_RGBA, GL_UNSIGNED_BYTE, - image); - glEnable(GL_TEXTURE_2D); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(50.,1.,.1,far_cull = 10.); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(0.,0.,-5.5); - - density = 1.- expf(-5.5 * fog_density * fog_density * - far_cull * far_cull); - -#define MAX(a,b) ((a) > (b) ? (a) : (b)) -#define MIN(a,b) ((a) < (b) ? (a) : (b)) - density = MAX(MIN(density, 1.), 0.); - - fog_color[0] = .23 + density *.57; - fog_color[1] = .35 + density *.45; - fog_color[2] = .78 + density *.22; - - glClearColor(fog_color[0], fog_color[1], fog_color[2], 1.f); - - glFogi(GL_FOG_MODE, GL_EXP2); - glFogf(GL_FOG_DENSITY, fog_density); - glFogfv(GL_FOG_COLOR, fog_color); - if (fog_density > 0) - glEnable(GL_FOG); - glLineWidth(2.0f); - glEnable(GL_LINE_SMOOTH); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); -} - -void draw_mesh(void) { - if (mesh) { - glBegin(GL_QUADS); - glTexCoord2f(0, 0); glVertex3f(-1.f, 0.f, -1.f); - glTexCoord2f(0, 1); glVertex3f(-1.f, 0.f, 1.f); - glTexCoord2f(1, 1); glVertex3f( 1.f, 0.f, 1.f); - glTexCoord2f(1, 0); glVertex3f( 1.f, 0.f, -1.f); - glEnd(); - } else { -#define MESH 32 - int i, j; - static float off; - float d = 1.f/MESH; - for(i = 0; i < MESH; i++) { - glBegin(GL_TRIANGLE_STRIP); - for(j = 0; j < MESH; j++) { - float s = (float)j*d; - float t = (float)i*d; - float x = -1.0 + 2.f*s; - float z = -1.0 + 2.f*t; - float y = amplitude*sinf(freq*2.f*M_PI*t+off); - glTexCoord2f(s, t); glVertex3f(x, y, z); - s += d; t += d; - x = -1.0 + 2.f*s; - z = -1.0 + 2.f*t; - y = amplitude*sinf(freq*2.f*M_PI*t+off); - glTexCoord2f(s, t); glVertex3f(x, y, z); - off += phase; - } - glEnd(); - } - } -} - -void display(void) { - glClear(GL_COLOR_BUFFER_BIT); - - glPushMatrix(); - glTranslatef(transx, transy, 0.f); - glRotatef(rotx, 0., 1., 0.); - glRotatef(roty, 1., 0., 0.); - glScalef(10,1,10); - if (!rgb) - glColor3f(.31, .41, .97); - else - glColor3f(1.f,1.f,1.f); - glTranslatef(0.f,-1.f,0.f); - glMatrixMode(GL_TEXTURE); - glPushMatrix(); - glTranslatef(ttrans[0], ttrans[1], 0.); - glScalef(10.f, 10.f,1.f); - draw_mesh(); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); - glutSwapBuffers(); -} - -void reshape(int w, int h) { - glViewport(0, 0, w, h); -} - -/*ARGSUSED1*/ -void -key(unsigned char key, int x, int y) { - switch(key) { - case 'l': light(); break; - case 'f': ffunc(); break; - case 'F': Ffunc(); break; - case 't': toggle_t(); break; - case 'm': mfunc(); break; - case 'w': wire(); break; - case 'x': xfunc(); break; - case 'h': help(); break; - case '\033': exit(EXIT_SUCCESS); break; - default: break; - } - glutPostRedisplay(); -} - -/*ARGSUSED1*/ -void -special(int key, int x, int y) { - switch(key) { - case GLUT_KEY_UP: up(); break; - case GLUT_KEY_DOWN: down(); break; - case GLUT_KEY_LEFT: left(); break; - case GLUT_KEY_RIGHT:right(); break; - } -} - -int main(int argc, char** argv) { - glutInitWindowSize(256, 256); - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE); - (void)glutCreateWindow(argv[0]); - init(argc == 1 ? "../data/water.bw" : argv[1]); - glutDisplayFunc(display); - glutKeyboardFunc(key); - glutSpecialFunc(special); - glutReshapeFunc(reshape); - glutMouseFunc(mouse); - glutMotionFunc(motion); - glutIdleFunc(animate); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/advanced97/water.dsp b/lib/glut-3.7.6/progs/advanced97/water.dsp deleted file mode 100644 index 3569a1b46..000000000 --- a/lib/glut-3.7.6/progs/advanced97/water.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="water" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=water - 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 "water.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 "water.mak" CFG="water - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "water - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "water - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "water - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "water - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "water - Win32 Release" -# Name "water - Win32 Debug" -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# Begin Source File - -SOURCE=.\texture.h -# End Source File -# Begin Source File - -SOURCE=.\water.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/advanced97/zcomposite.c b/lib/glut-3.7.6/progs/advanced97/zcomposite.c deleted file mode 100644 index c416db3e1..000000000 --- a/lib/glut-3.7.6/progs/advanced97/zcomposite.c +++ /dev/null @@ -1,430 +0,0 @@ -#include -#include -#include - -/* -** Create a single component texture map -*/ -GLfloat *make_texture(int maxs, int maxt) -{ - int s, t; - static GLfloat *texture; - - texture = (GLfloat *)malloc(maxs * maxt * sizeof(GLfloat)); - for(t = 0; t < maxt; t++) { - for(s = 0; s < maxs; s++) { - texture[s + maxs * t] = ((s >> 4) & 0x1) ^ ((t >> 4) & 0x1); - } - } - return texture; -} - -GLboolean stencil = GL_TRUE; - -/* ARGSUSED1 */ -void key(unsigned char key, int x, int y) -{ - switch(key) { - case 't': /* toggle using stencil */ - if(stencil == GL_TRUE) - stencil = GL_FALSE; - else - stencil = GL_TRUE; - glutPostRedisplay(); - break; - case '\033': - exit(0); - break; - } -} - -enum {SPHERE = 1, CONE}; -enum {X, Y, Z}; - -int startx, starty; -int wid, ht; -int oldwid = 0, oldht = 0; - -const int WINDIM = 512; -const GLfloat FRUSTDIM = 110.f; -const GLfloat FRUSTNEAR = 320.f; -const GLfloat FRUSTFAR = 540.f; -const GLfloat FRUSTDIFF = 540.f - 320.f; - -GLboolean drawmode = GL_FALSE; -GLboolean depthmode = GL_FALSE; -GLboolean rubberbandmode = GL_FALSE; -GLfloat *color; -GLfloat *depth; -GLfloat depthbias = 0.f; -GLfloat raspos[] = {0.f, 0.f, -430.f}; - - -int winWidth = 512; -int winHeight = 512; - -GLfloat sx = 0; -GLfloat sy = 0; - - -/* Overlay Stuff */ -int transparent; -int red; - -void -setRasterPosXY(int x, int y) -{ - raspos[X] = (x - winWidth/2) * sx; - raspos[Y] = (y - winHeight/2) * sy; - - glRasterPos3fv(raspos); - - glutPostRedisplay(); -} - -void -setRasterPosZ(int y) -{ - raspos[Z] = -(FRUSTNEAR + y * FRUSTDIFF/winHeight); - - depthbias = (y - winHeight/2.f)/winHeight; - - glRasterPos3fv(raspos); - - glutPostRedisplay(); -} - - - -void -motion(int x, int y) -{ - y = winHeight - y; - if(drawmode) - setRasterPosXY(x, y); - - if(rubberbandmode) { - wid = x - startx; - ht = y - starty; - glutPostOverlayRedisplay(); - } - - if(depthmode) - setRasterPosZ(y); -} - -/* redraw function for overlay: used to show selected region */ -void -overlay(void) -{ - if(glutLayerGet(GLUT_OVERLAY_DAMAGED)) { - glClear(GL_COLOR_BUFFER_BIT); - } else { - glIndexi(transparent); - glBegin(GL_LINE_LOOP); - glVertex2i(startx, starty); - glVertex2i(startx + oldwid, starty); - glVertex2i(startx + oldwid, starty + oldht); - glVertex2i(startx, starty + oldht); - glEnd(); - } - - glIndexi(red); - glBegin(GL_LINE_LOOP); - glVertex2i(startx, starty); - glVertex2i(startx + wid, starty); - glVertex2i(startx + wid, starty + ht); - glVertex2i(startx, starty + ht); - glEnd(); - - oldwid = wid; - oldht = ht; - - glFlush(); -} - - -/* used to get current width and height of viewport */ -void -reshape(int wid, int ht) -{ - glutUseLayer(GLUT_OVERLAY); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluOrtho2D(0, wid, 0, ht); /* 1 to 1 with window */ - glMatrixMode(GL_MODELVIEW); - glViewport(0, 0, wid, ht); - - glutUseLayer(GLUT_NORMAL); - glViewport((GLint) (-wid * .1), (GLint) (-ht * .1), - (GLsizei) (wid * 1.2), (GLsizei) (ht * 1.2)); - - winWidth = wid; - winHeight = ht; - - sx = 2 * FRUSTDIM/(winWidth * 1.2); - sy = 2 * FRUSTDIM/(winHeight * 1.2); -} - - -void -mouse(int button, int state, int x, int y) -{ - y = winHeight - y; /* flip y orientation */ - if(state == GLUT_DOWN) - switch(button) { - case GLUT_LEFT_BUTTON: /* select an image */ - startx = x; - starty = y; - wid = 0; ht = 0; - rubberbandmode = GL_TRUE; - glutShowOverlay(); - break; - case GLUT_MIDDLE_BUTTON: - glutUseLayer(GLUT_NORMAL); - if(color && depth) { - drawmode = GL_TRUE; - setRasterPosXY(x, y); - } - break; - case GLUT_RIGHT_BUTTON: /* change depth */ - glutUseLayer(GLUT_NORMAL); - if(color && depth) { - depthmode = GL_TRUE; - setRasterPosZ(y); - } - break; - } - else /* GLUT_UP */ - switch(button) { - case GLUT_LEFT_BUTTON: - rubberbandmode = GL_FALSE; - glutHideOverlay(); - wid = x - startx; - ht = y - starty; - if(wid < 0) { - wid = -wid; - startx = x; - } - if(ht < 0) { - ht = -ht; - starty = y; - } - color = (GLfloat *)realloc(color, wid * ht * 3 * sizeof(GLfloat)); - depth = (GLfloat *)realloc(depth, wid * ht * sizeof(GLfloat)); - - glutUseLayer(GLUT_NORMAL); - glReadPixels(startx, starty, wid, ht, GL_RGB, GL_FLOAT, color); - glReadPixels(startx, starty, wid, ht, GL_DEPTH_COMPONENT, GL_FLOAT, - depth); - break; - case GLUT_MIDDLE_BUTTON: - drawmode = GL_FALSE; - break; - case GLUT_RIGHT_BUTTON: /* change depth */ - depthmode = GL_FALSE; - break; - } -} - - -/* Called when window needs to be redrawn */ -void -redraw(void) -{ - /* material properties for objects in scene */ - static GLfloat wall_mat[] = {1.f, 1.f, 1.f, 1.f}; - - glutUseLayer(GLUT_NORMAL); - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT); - - /* - ** Note: wall verticies are ordered so they are all front facing - ** this lets me do back face culling to speed things up. - */ - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, wall_mat); - - /* floor */ - /* make the floor textured */ - glEnable(GL_TEXTURE_2D); - - /* - ** Since we want to turn texturing on for floor only, we have to - ** make floor a separate glBegin()/glEnd() sequence. You can't - ** turn texturing on and off between begin and end calls - */ - glBegin(GL_QUADS); - glNormal3f(0.f, 1.f, 0.f); - glTexCoord2i(0, 0); - glVertex3f(-100.f, -100.f, -320.f); - glTexCoord2i(1, 0); - glVertex3f( 100.f, -100.f, -320.f); - glTexCoord2i(1, 1); - glVertex3f( 100.f, -100.f, -520.f); - glTexCoord2i(0, 1); - glVertex3f(-100.f, -100.f, -520.f); - glEnd(); - - glDisable(GL_TEXTURE_2D); - - /* walls */ - - glBegin(GL_QUADS); - /* left wall */ - glNormal3f(1.f, 0.f, 0.f); - glVertex3f(-100.f, -100.f, -320.f); - glVertex3f(-100.f, -100.f, -520.f); - glVertex3f(-100.f, 100.f, -520.f); - glVertex3f(-100.f, 100.f, -320.f); - - /* right wall */ - glNormal3f(-1.f, 0.f, 0.f); - glVertex3f( 100.f, -100.f, -320.f); - glVertex3f( 100.f, 100.f, -320.f); - glVertex3f( 100.f, 100.f, -520.f); - glVertex3f( 100.f, -100.f, -520.f); - - /* ceiling */ - glNormal3f(0.f, -1.f, 0.f); - glVertex3f(-100.f, 100.f, -320.f); - glVertex3f(-100.f, 100.f, -520.f); - glVertex3f( 100.f, 100.f, -520.f); - glVertex3f( 100.f, 100.f, -320.f); - - /* back wall */ - glNormal3f(0.f, 0.f, 1.f); - glVertex3f(-100.f, -100.f, -520.f); - glVertex3f( 100.f, -100.f, -520.f); - glVertex3f( 100.f, 100.f, -520.f); - glVertex3f(-100.f, 100.f, -520.f); - glEnd(); - - glPushMatrix(); - glTranslatef(-40.f, -60.f, -400.f); - glScalef(2, 2, 2); - glCallList(SPHERE); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(50.f, -120.f, -400.f); - glScalef(2, 2, 2); - glCallList(CONE); - glPopMatrix(); - - if(stencil) { - glEnable(GL_STENCIL_TEST); - glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); - glStencilFunc(GL_ALWAYS, 1, 1); - glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); - glPixelTransferf(GL_DEPTH_BIAS, depthbias); - - glDrawPixels(wid, ht, GL_DEPTH_COMPONENT, GL_FLOAT, depth); - - glPixelTransferf(GL_DEPTH_BIAS, 0.f); - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - glStencilFunc(GL_EQUAL, 1, 1); - glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); - glDisable(GL_DEPTH_TEST); - - glDrawPixels(wid, ht, GL_RGB, GL_FLOAT, color); - - glEnable(GL_DEPTH_TEST); - glDisable(GL_STENCIL_TEST); - } else - glDrawPixels(wid, ht, GL_RGB, GL_FLOAT, color); - - glutSwapBuffers(); -} - - -const int TEXDIM = 256; -/* Parse arguments, and set up interface between OpenGL and window system */ -main(int argc, char *argv[]) -{ - GLfloat *tex; - static GLfloat lightpos[] = {50.f, 50.f, -320.f, 1.f}; - static GLfloat sphere_mat[] = {1.f, .5f, 0.f, 1.f}; - static GLfloat cone_mat[] = {0.f, .5f, 1.f, 1.f}; - GLUquadricObj *sphere, *cone, *base; - - glutInit(&argc, argv); - glutInitWindowSize(WINDIM, WINDIM); - - glutInitDisplayMode(GLUT_RGBA|GLUT_DEPTH|GLUT_STENCIL|GLUT_DOUBLE); - (void)glutCreateWindow("compositing images with depth"); - glutDisplayFunc(redraw); - glutKeyboardFunc(key); - glutMouseFunc(mouse); - glutMotionFunc(motion); - glutReshapeFunc(reshape); - - /* draw a perspective scene */ - glMatrixMode(GL_PROJECTION); - glFrustum(-FRUSTDIM, FRUSTDIM, -FRUSTDIM, FRUSTDIM, FRUSTNEAR, FRUSTFAR); - glMatrixMode(GL_MODELVIEW); - - /* turn on features */ - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - - /* place light 0 in the right place */ - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - - /* remove back faces to speed things up */ - glCullFace(GL_BACK); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - - glNewList(SPHERE, GL_COMPILE); - /* make display lists for sphere and cone; for efficiency */ - sphere = gluNewQuadric(); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, sphere_mat); - gluSphere(sphere, 20.f, 20, 20); - gluDeleteQuadric(sphere); - glEndList(); - - glNewList(CONE, GL_COMPILE); - cone = gluNewQuadric(); - base = gluNewQuadric(); - glRotatef(-90.f, 1.f, 0.f, 0.f); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, cone_mat); - gluQuadricOrientation(base, GLU_INSIDE); - gluDisk(base, 0., 20., 20, 1); - gluCylinder(cone, 20., 0., 60., 20, 20); - gluDeleteQuadric(cone); - gluDeleteQuadric(base); - glEndList(); - - /* load pattern for current 2d texture */ - tex = make_texture(TEXDIM, TEXDIM); - glTexImage2D(GL_TEXTURE_2D, 0, 1, TEXDIM, TEXDIM, 0, GL_RED, GL_FLOAT, tex); - free(tex); - - /* storage for saved image */ - color = 0; - depth = 0; - - glReadBuffer(GL_FRONT);/* so glReadPixel() always get the right image */ - - glutInitDisplayMode(GLUT_SINGLE|GLUT_INDEX); - if(glutLayerGet(GLUT_OVERLAY_POSSIBLE)) { - glutEstablishOverlay(); - glutHideOverlay(); - transparent = glutLayerGet(GLUT_TRANSPARENT_INDEX); - glClearIndex(transparent); - red = (transparent + 1) % glutGet(GLUT_WINDOW_COLORMAP_SIZE); - glutSetColor(red, 1.0, 0.0, 0.0); /* Red. */ - glutOverlayDisplayFunc(overlay); - } - else - { - printf( "Overlay support unavailable - aborting.\n" ); - return 1; - } - - glutMainLoop(); - - return 0; -} diff --git a/lib/glut-3.7.6/progs/advanced97/zcomposite.dsp b/lib/glut-3.7.6/progs/advanced97/zcomposite.dsp deleted file mode 100644 index f03411104..000000000 --- a/lib/glut-3.7.6/progs/advanced97/zcomposite.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="zcomposite" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=zcomposite - 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 "zcomposite.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 "zcomposite.mak" CFG="zcomposite - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "zcomposite - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "zcomposite - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "zcomposite - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "zcomposite - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "zcomposite - Win32 Release" -# Name "zcomposite - Win32 Debug" -# Begin Source File - -SOURCE=.\zcomposite.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/aux2glut.sed b/lib/glut-3.7.6/progs/aux2glut.sed deleted file mode 100644 index b35983b2f..000000000 --- a/lib/glut-3.7.6/progs/aux2glut.sed +++ /dev/null @@ -1,55 +0,0 @@ -# -# aux2glut.sed - a sed script for converting AUX code to GLUT -# -# You will still need to do some work, but this is a good start. -# -1i\ -/* aux2glut conversion Copyright (c) Mark J. Kilgard, 1994, 1995 */ -1i\ - -s/int main/void main/g -s/auxInitWindow/glutCreateWindow/g -s/AUX_SINGLE/GLUT_SINGLE/g -s/AUX_DOUBLE/GLUT_DOUBLE/g -s/AUX_RGB/GLUT_RGB/g -s/AUX_RGBA/GLUT_RGBA/g -s/AUX_ACCUM/GLUT_ACCUM/g -s/AUX_DEPTH/GLUT_DEPTH/g -s/AUX_STENCIL/GLUT_STENCIL/g -s/AUX_ALPHA/GLUT_ALPHA/g -s/AUX_MOUSEDOWN/GLUT_DOWN/g -s/AUX_MOUSEUP/GLUT_UP/g -s/AUX_LEFTBUTTON/GLUT_LEFT_BUTTON/g -s/AUX_MIDDLEBUTTON/GLUT_MIDDLE_BUTTON/g -s/AUX_RIGHTBUTTON/GLUT_RIGHT_BUTTON/g -s/(.*AUX_EVENTREC.*)/( int x, int y )/g -s/auxReshapeFunc/glutReshapeFunc/g -s/#include \"aux.h\"/#include /g -s/#include[ ]*\/#include /g -s/\(initialize.*$\)/glutInit(\&argc, argv); \1/g -s/auxInitDisplayMode/glutInitDisplayMode/g -s/auxMainLoop(display)/glutDisplayFunc(display); glutMainLoop()/g -s/auxMainLoop[ ]*([ ]*drawScene[ ]*)/glutDisplayFunc(drawScene); glutMainLoop()/g -s/auxAnimation.*$/glutIdleFunc(drawScene);/g -s/auxGetScreenSize.*$/width = glutGet(GLUT_SCREEN_WIDTH); height = glutGet(GLUT_SCREEN_HEIGHT);/g -s/auxGetSize.*$/width = glutGet(GLUT_WINDOW_WIDTH); height = glutGet(GLUT_WINDOW_HEIGHT);/g -s/auxInitPosition(\(.*\),\(.*\),\(.*\),\(.*\));/glutInitWindowPosition(\1,\2); glutInitWindowSize(\3,\4);/g -s/auxSwapBuffers/glutSwapBuffers/g -s/auxWireIcosahedron/glutWireIcosahedron/g -s/auxSolidIcosahedron/glutSolidIcosahedron/g -s/auxSolidTorus/glutSolidTorus/g -s/auxWireTorus/glutWireTorus/g -s/auxSolidCube/glutSolidCube/g -s/auxWireCube/glutWireCube/g -s/auxSolidSphere/glutSolidSphere/g -s/auxWireSphere/glutWireSphere/g -s/auxSolidCone/glutSolidCone/g -s/auxWireCone/glutWireCone/g -s/auxSolidOctahedron/glutSolidOctahedron/g -s/auxWireOctahedron/glutWireOctahedron/g -s/auxSolidTeapot/glutSoliddTeapot/g -s/auxWireTeapot/glutWireTeapot/g -s/auxKeyFunc(.*,/glutKeyboardFunc(/g -s/auxMouseFunc(.*AUX_MOUSELOC,.*NULL,/glutMouseMotion(/g -s/auxMouseFunc/glutMouseFunc/g -s/auxDeleteMouseFunc( .*$/glutMouseMotion( NULL );/g diff --git a/lib/glut-3.7.6/progs/bucciarelli.dsw b/lib/glut-3.7.6/progs/bucciarelli.dsw deleted file mode 100644 index 7db308007..000000000 --- a/lib/glut-3.7.6/progs/bucciarelli.dsw +++ /dev/null @@ -1,149 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "_all"=".\bucciarelli\_all.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name fire - End Project Dependency - Begin Project Dependency - Project_Dep_Name glbpaltex - End Project Dependency - Begin Project Dependency - Project_Dep_Name gltest - End Project Dependency - Begin Project Dependency - Project_Dep_Name paltex - End Project Dependency - Begin Project Dependency - Project_Dep_Name ray - End Project Dependency - Begin Project Dependency - Project_Dep_Name teapot - End Project Dependency - Begin Project Dependency - Project_Dep_Name terrain - End Project Dependency - Begin Project Dependency - Project_Dep_Name tunnel - End Project Dependency -}}} - -############################################################################### - -Project: "fire"=".\bucciarelli\fire.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "glbpaltex"=".\bucciarelli\glbpaltex.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "gltest"=".\bucciarelli\gltest.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "paltex"=".\bucciarelli\paltex.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "ray"=".\bucciarelli\ray.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "teapot"=".\bucciarelli\teapot.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "terrain"=".\bucciarelli\terrain.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "tunnel"=".\bucciarelli\tunnel.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/lib/glut-3.7.6/progs/bucciarelli/Imakefile b/lib/glut-3.7.6/progs/bucciarelli/Imakefile deleted file mode 100644 index 9e1de31cf..000000000 --- a/lib/glut-3.7.6/progs/bucciarelli/Imakefile +++ /dev/null @@ -1,22 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1997. */ - -#include "../../Glut.cf" - -TARGETS = tunnel teapot fire terrain paltex gltest ray glbpaltx - -SRCS = dteapot.c fire.c glbpaltx.c gltest.c image.c paltex.c ray.c shadow.c \ - sources.c teapot.c terrain.c tunnel.c - -AllTarget($(TARGETS)) - -SimpleGlutProgramTarget(ray) -SimpleGlutProgramTarget(gltest) -SimpleGlutProgramTarget(paltex) -SimpleGlutProgramTarget(glbpaltx) -SimpleGlutProgramTarget(terrain) -NormalGlutProgramTarget(tunnel,tunnel.o image.o sources.o) -NormalGlutProgramTarget(teapot,teapot.o image.o dteapot.o shadow.o) -NormalGlutProgramTarget(fire,fire.o image.o) - -DependTarget() diff --git a/lib/glut-3.7.6/progs/bucciarelli/README b/lib/glut-3.7.6/progs/bucciarelli/README deleted file mode 100644 index 7c447402e..000000000 --- a/lib/glut-3.7.6/progs/bucciarelli/README +++ /dev/null @@ -1,155 +0,0 @@ - -INTRODUCTION ------------- - -This directory is usually included in the Mesa demos distribution or -in the GLUT distribution. - -I have written the demos included in this directory mainly for showing -the capabilities of the Mesa library when using the Voodoo driver. -However all the demos are written using the GLUT and OpenGL so they -work with any GLUT/OpenGL platform (tested: Linux+Mesa+Voodoo driver, -Linux+Mesa+X11 driver, Win95+Mesa+Voodoo driver and SGI Onyx IR thanks -to Mark Kilgard). - -All the demos make an heavy use of texture mapping, blending, etc. so -you _need_ some kind of hardware support for the OpenGL otherwise they -will run at ~1fps. You need also a OpenGL 1.1 compliant library. - -you can find some screenshot of these demos at -http://www-hmw.caribel.pisa.it/fxmesa/fxdemos.hmtl - -Write me if you find some bug in the demos. - -David Bucciarelli (tech.hmw@plus.it) - -Humanware s.r.l. -Via XXIV Maggio 62 -Pisa, Italy -Tel./Fax +39-50-554108 -email: info.hmw@plus.it -www: www-hmw.caribel.pisa.it - - -A BRIEF DESCRIPTION OF THE DEMOS --------------------------------- - -RAY ---- - -Sources: ray.c - -I'm using ray tracing to dynamically generate texture maps with -specular, diffuse, shadows, and mirror colors. Each frame the texture -maps of the plane and of the sphere are partially updated. With this -technique you can obtain true mirrors, shadows, specular highlights, -bump mapping, etc. in realtime. This demo is really CPU intensive -(~25fps on a PentiumII@300MHz with a Pure3D). - - -TUNNEL ------- - -Sources: tunnel.c image.c sources.c -Data: bw.rgb tile.rgb - -The model was designed and prelighted with Alias|Wavefront -PowerAnimator V8. Triangle strips were built with a tool written by -me and then statically included in the sources. - - -TEAPOT ------- - -Sources: teapot.c image.c dteapot.c shadow.c -Data: bw.rgb tile.rgb - -The shadow is drawn projecting the teapot geometry over the plane. All -other light effects are drawn using the standard OpenGL capabilities. - - -FIRE ----- - -Sources: fire.c image.c -Data: s128.rgb tree2.rgb - -The demo use a small particle system to draw some nice visual effect. -You can interactively change many parameters of the particle system -and you can choose the number of particles at the startup ('fire -4000'). This demo should be called fountain. - - -TERRAIN -------- - -Sources: mesaland.c - -This demo is base on another demo written by Mikael SkiZoWalker. -I have added the capabilities to freely fly around, view culling -and some nice color. - - -GLTEST ------- - -Sources: gltest.c - -This is a simple benchmark suite that I'm using in the development -of the Mesa/Voodoo driver. Type 'gltest >my.res' and you will get -some data about the performances of your OpenGL. Follow the -results with my PC (PentiumII@300MHz+Pure3D): - -Simple Points -587900.080674 Pnts/sec - -Smooth Lines -SIZE=480 => 39007.426183 Lins/sec -SIZE=250 => 74575.016485 Lins/sec -SIZE=100 => 179734.882409 Lins/sec -SIZE=050 => 183987.795297 Lins/sec -SIZE=025 => 183820.086309 Lins/sec - - -ZSmooth Triangles -SIZE=480 => 784.954997 Tris/sec -SIZE=250 => 2862.325889 Tris/sec -SIZE=100 => 17779.492938 Tris/sec -SIZE=050 => 159339.829844 Tris/sec -SIZE=025 => 428602.984008 Tris/sec - - -ZSmooth Tex Blend Triangles -SIZE=480 => 784.473931 Tris/sec -SIZE=250 => 2853.781513 Tris/sec -SIZE=100 => 17598.252146 Tris/sec -SIZE=050 => 152632.578337 Tris/sec -SIZE=025 => 377584.760048 Tris/sec - - -ZSmooth Tex Blend TMesh Triangles -SIZE=400 => 563.900695 Tris/sec, MPixel Fill/sec: 45.112056 -SIZE=250 => 1449.777225 Tris/sec, MPixel Fill/sec: 45.305538 -SIZE=100 => 8702.869121 Tris/sec, MPixel Fill/sec: 43.514346 -SIZE=050 => 31896.867466 Tris/sec, MPixel Fill/sec: 39.871084 -SIZE=025 => 114037.262894 Tris/sec, MPixel Fill/sec: 35.636645 -SIZE=010 => 220494.235839 Tris/sec, MPixel Fill/sec: 11.024712 -SIZE=005 => 225615.506651 Tris/sec, MPixel Fill/sec: 2.820194 -SIZE=002 => 225607.681439 Tris/sec, MPixel Fill/sec: 0.451215 - - -Color/Depth Buffer Clears -295.042474 Clrs/sec, MPixel Fill/sec: 90.553256 - - -PALTEX and GLBPALTX -------------------- - -Sources: paltex.c and glbpaltx.c - -The PALTEX example was written by Brian Paul and it shows the -capabilities of the GL_EXT_paletted_texture extension. I have written -the other example in order to show the capabilities of the -gl3DfxSetPaletteEXT() (it used only by GLQuake and Quake2). - - diff --git a/lib/glut-3.7.6/progs/bucciarelli/_all.dsp b/lib/glut-3.7.6/progs/bucciarelli/_all.dsp deleted file mode 100644 index 6a4421548..000000000 --- a/lib/glut-3.7.6/progs/bucciarelli/_all.dsp +++ /dev/null @@ -1,63 +0,0 @@ -# Microsoft Developer Studio Project File - Name="_all" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Generic Project" 0x010a - -CFG=_all - 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 "_all.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 "_all.mak" CFG="_all - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "_all - Win32 Release" (based on "Win32 (x86) Generic Project") -!MESSAGE "_all - Win32 Debug" (based on "Win32 (x86) Generic Project") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -MTL=midl.exe - -!IF "$(CFG)" == "_all - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" - -!ELSEIF "$(CFG)" == "_all - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "_all___Win32_Debug" -# PROP BASE Intermediate_Dir "_all___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" - -!ENDIF - -# Begin Target - -# Name "_all - Win32 Release" -# Name "_all - Win32 Debug" -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/bucciarelli/bw.rgb b/lib/glut-3.7.6/progs/bucciarelli/bw.rgb deleted file mode 100644 index 8e22a30a7b03e0c89b4b7e464b9487b00efc4e98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54196 zcmeFZ2au&}S|0WvdXZJGV)xE;IywC3&pGG+6rMDddZK~54x`MU^$mI;FS z3_);M%VVvGwG!4U*94*B9_iTE#J(2xby$LMKTQyRg&=}oBZz2~AmV>c5YC_xOcb_Q$b)(B$$Ul7E?eS%p0UkGCPJ%U)p!PmZ(AT}6+ z*!mC5Tslogm(_2;%L(OAznQ62yo9F+qIfm>@p- zuL$DfuLsu3_<+W?$Y>$lbucCib;S=pXX&9O(bE1QE_b|Nn#_DksoC^$`UPYGgp3jO~N1hE7it^7IY{~HNn9dh5mzFRi*{|f}Mi+%U7?*aBb z#J+d1?+Nxj#lGh`=>Pi(;+_uu|13OQ7yADlf_StK{r^jXc={Cjzk&WgMG$XJLI2-L z5U(ZZ|0fCJofh=}n*{OR4)p)u5X8r@_N!qxpZHpW_*4@5|89c#ItBX2+P~O<{{I0% z{H0Ck|Gy%Lzx)XL|F_WpCkf)OOhW&El_0(ya{rDWBZ%*+K>xo+5Z}83{r?_8eE&V@ zA9DVIcM0Ne{>RY&UnYnjA))^tCWuc5(El$H#NWZ4{c*_SCn1l|`~gAy^xFjSvsn9c zSo?R2(Ekq*#4kb~pMyMp8S?m*e@qa6?-=^Wo&62m*?;ioq5p3ph~L86-~OAheaPnx z$mcfXJ`TB0y3jwKP2$-UWSN01v%e49e-pOTkgI@j5Kl@>nZit%S8Q zM zNALYJ*gov&V_5suu$xc50sVg~Y@dPtKMmW*+Q0bAu>B?I|94^gccK4(O%UJwVc7mx zLI2+Z+lSo09diFp2m1dkY=0j5hmOAQ4)p)~uzkq+2R{J)e?4qJ4gG%~Y~O(Xe-^gi zhyHPAe**IO$^RC%{|vVO70^G{{(KVp|6bU>0{ufCzXW;wGUV~AJJ3I5_v=q#`vmll zJNuhh`&(H1I~sn0_wn!jgB;rCy-=JVhG zX@4KBdl&yczyANqSKR;qThEVP^UKNO&vO3HKmX z#+Ult=lA;jbD#hDi@*L!&wlaR|EGWcf5Tb+L(lLZy8er0IC}n1+vCgq{ZG^F7rxe? zwD!yG|Ao*0pT7UyhAhyT0#(jYjxLu-#WHk3HceHa3REsrX3JD6m!6)QxP9x5TW{Q+ zn4(pqlq*oBVws~#WvW=nXNxo^a15DE<+5a%<0vmM=v*$J&8Ei+-=0rqOAJHvbfHvA zmT9V7E);SFT3wk_xe}i+5+3o7+N#WCDV8lVp(U3&-E&RF@I75+OI)$Qatxgh|rC7$%dfqLL&lGAt|d3=dJ13Y4g-lE@dc`64UIDi;O@Tg(@Wg)CJj-#>#OYXVs& z(~Q6hJY6o4w7E5B3zU|qCu+ne11eX_r!z%nO!@<%Tw+TkN0aGvrkthA1)5~2QpL=q zSi0bhGXZ1f>20f!&F0B6L*cP}Nz!dzqRP-nuE-Q~lIA&c^J0ENEL{bbd zDDlv+Q*>2NCZ)?JnNL%k>R7TSN{VWkuEF7r;Ew1r=P|mmen(~mQz-GI$ny-V$Bt$( zC5ksx+9;<<-f?x;-)n?{Mg8#^8Y;&!G>i985H*J7VHrAA;8_?_x|B|F49m%eS{XWa zR;X#IjCWCGN+Y#b0@KlS&GdqbBTyu-sj{mJk>GhpTbgJFa#>_dO%a5!9XY;0@v>+0 z9+TzdYUETa2aR?kU||qMGOvH%$SrLQ_nh7GxM3l_fKoQYx98PV)hoo5+xKN)&SGA|pmK zdU6ko27CA{_%DlPu0CI6GmJ$o1ths@$aza`0ZN)Sc znS+0#m7snYE0SVB7aH-SO^YW-5Zhl$d;x%BHiKtQr>cQzXUZRJD+&CABuE z(8*+QE{zGlsu*4+@`ET2B15lK{HiMp45OJA≠Ip~A9($#WX1X?CR>nySLPb>H+o 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 diff --git a/lib/glut-3.7.6/progs/bucciarelli/dteapot.c b/lib/glut-3.7.6/progs/bucciarelli/dteapot.c deleted file mode 100644 index 312a0e163..000000000 --- a/lib/glut-3.7.6/progs/bucciarelli/dteapot.c +++ /dev/null @@ -1,196 +0,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. -*/ - -/* Modified by David Bucciarelli */ - -#include - -/* Rim, body, lid, and bottom data must be reflected in x - and y; handle and spout data across the y axis only. */ - -long 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* */ - -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* */ - -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(); -} - diff --git a/lib/glut-3.7.6/progs/bucciarelli/fire.c b/lib/glut-3.7.6/progs/bucciarelli/fire.c deleted file mode 100644 index 520119b0c..000000000 --- a/lib/glut-3.7.6/progs/bucciarelli/fire.c +++ /dev/null @@ -1,697 +0,0 @@ -/* - * This program is under the GNU GPL. - * Use at your own risk. - * - * written by David Bucciarelli (tech.hmw@plus.it) - * Humanware s.r.l. - */ - -#include -#include -#include -#include -#include - -#ifdef _WIN32 -#include -#endif - -#include -#include "image.h" - -#if defined(GL_VERSION_1_1) -/* Routines called directly. */ -#elif defined(GL_EXT_texture_object) && defined(GL_EXT_copy_texture) && defined(GL_EXT_subtexture) -#define glBindTexture(A,B) glBindTextureEXT(A,B) -#define glGenTextures(A,B) glGenTexturesEXT(A,B) -#else -#define glBindTexture(A,B) -#define glGenTextures(A,B) -#endif - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -#define vinit(a,i,j,k) {\ - (a)[0]=i;\ - (a)[1]=j;\ - (a)[2]=k;\ -} - -#define vinit4(a,i,j,k,w) {\ - (a)[0]=i;\ - (a)[1]=j;\ - (a)[2]=k;\ - (a)[3]=w;\ -} - - -#define vadds(a,dt,b) {\ - (a)[0]+=(dt)*(b)[0];\ - (a)[1]+=(dt)*(b)[1];\ - (a)[2]+=(dt)*(b)[2];\ -} - -#define vequ(a,b) {\ - (a)[0]=(b)[0];\ - (a)[1]=(b)[1];\ - (a)[2]=(b)[2];\ -} - -#define vinter(a,dt,b,c) {\ - (a)[0]=(dt)*(b)[0]+(1.0-dt)*(c)[0];\ - (a)[1]=(dt)*(b)[1]+(1.0-dt)*(c)[1];\ - (a)[2]=(dt)*(b)[2]+(1.0-dt)*(c)[2];\ -} - -#define clamp(a) ((a) < 0.0 ? 0.0 : ((a) < 1.0 ? (a) : 1.0)) - -#define vclamp(v) {\ - (v)[0]=clamp((v)[0]);\ - (v)[1]=clamp((v)[1]);\ - (v)[2]=clamp((v)[2]);\ -} - -static int WIDTH=640; -static int HEIGHT=480; - -#define FRAME 50 -#define DIMP 20.0 -#define DIMTP 16.0 - -#define RIDCOL 0.4 - -#define NUMTREE 50 -#define TREEINR 2.5 -#define TREEOUTR 8.0 - -#define AGRAV -9.8 - -typedef struct { - int age; - float p[3][3]; - float v[3]; - float c[3][4]; -} part; - -static float treepos[NUMTREE][3]; - -static float black[3]={0.0,0.0,0.0}; -static float blu[3]={0.0,0.2,1.0}; -static float blu2[3]={0.0,1.0,1.0}; - -static float fogcolor[4]={1.0,1.0,1.0,1.0}; - -static float q[4][3]={ - {-DIMP,0.0,-DIMP}, - {DIMP,0.0,-DIMP}, - {DIMP,0.0,DIMP}, - {-DIMP,0.0,DIMP} -}; - -static float qt[4][2]={ - {-DIMTP,-DIMTP}, - {DIMTP,-DIMTP}, - {DIMTP,DIMTP}, - {-DIMTP,DIMTP} -}; - -static int np; -static float eject_r,dt,maxage,eject_vy,eject_vl; -static short shadows; -static float ridtri; -static int fog=1; -static int help=1; -static int joyavailable=0; -static int joyactive=0; - -static part *p; - -static GLuint groundid; -static GLuint treeid; - -static float obs[3]={2.0,1.0,0.0}; -static float dir[3]; -static float v=0.0; -static float alpha=-90.0; -static float beta=90.0; - -static float gettime(void) -{ - static clock_t told=0; - clock_t tnew,ris; - - tnew=clock(); - - ris=tnew-told; - - told=tnew; - - return(ris/(float)CLOCKS_PER_SEC); -} - -float vrnd(void) -{ - return(((float)rand())/RAND_MAX); -} - -static void setnewpart(part *p) -{ - float a,v[3],*c; - - p->age=0; - - a=vrnd()*3.14159265359*2.0; - - vinit(v,sin(a)*eject_r*vrnd(),0.15,cos(a)*eject_r*vrnd()); - vinit(p->p[0],v[0]+vrnd()*ridtri,v[1]+vrnd()*ridtri,v[2]+vrnd()*ridtri); - vinit(p->p[1],v[0]+vrnd()*ridtri,v[1]+vrnd()*ridtri,v[2]+vrnd()*ridtri); - vinit(p->p[2],v[0]+vrnd()*ridtri,v[1]+vrnd()*ridtri,v[2]+vrnd()*ridtri); - - vinit(p->v,v[0]*eject_vl/(eject_r/2),vrnd()*eject_vy+eject_vy/2,v[2]*eject_vl/(eject_r/2)); - - c=blu; - - vinit4(p->c[0],c[0]*((1.0-RIDCOL)+vrnd()*RIDCOL), - c[1]*((1.0-RIDCOL)+vrnd()*RIDCOL), - c[2]*((1.0-RIDCOL)+vrnd()*RIDCOL), - 1.0); - vinit4(p->c[1],c[0]*((1.0-RIDCOL)+vrnd()*RIDCOL), - c[1]*((1.0-RIDCOL)+vrnd()*RIDCOL), - c[2]*((1.0-RIDCOL)+vrnd()*RIDCOL), - 1.0); - vinit4(p->c[2],c[0]*((1.0-RIDCOL)+vrnd()*RIDCOL), - c[1]*((1.0-RIDCOL)+vrnd()*RIDCOL), - c[2]*((1.0-RIDCOL)+vrnd()*RIDCOL), - 1.0); -} - -static void setpart(part *p) -{ - float fact; - - if(p->p[0][1]<0.1) { - setnewpart(p); - return; - } - - p->v[1]+=AGRAV*dt; - - vadds(p->p[0],dt,p->v); - vadds(p->p[1],dt,p->v); - vadds(p->p[2],dt,p->v); - - p->age++; - - if((p->age)>maxage) { - vequ(p->c[0],blu2); - vequ(p->c[1],blu2); - vequ(p->c[2],blu2); - } else { - fact=1.0/maxage; - vadds(p->c[0],fact,blu2); - vclamp(p->c[0]); - p->c[0][3]=fact*(maxage-p->age); - - vadds(p->c[1],fact,blu2); - vclamp(p->c[1]); - p->c[1][3]=fact*(maxage-p->age); - - vadds(p->c[2],fact,blu2); - vclamp(p->c[2]); - p->c[2][3]=fact*(maxage-p->age); - } -} - -static void drawtree(float x, float y, float z) -{ - glBegin(GL_QUADS); - glTexCoord2f(0.0,0.0); - glVertex3f(x-1.5,y+0.0,z); - - glTexCoord2f(1.0,0.0); - glVertex3f(x+1.5,y+0.0,z); - - glTexCoord2f(1.0,1.0); - glVertex3f(x+1.5,y+3.0,z); - - glTexCoord2f(0.0,1.0); - glVertex3f(x-1.5,y+3.0,z); - - - glTexCoord2f(0.0,0.0); - glVertex3f(x,y+0.0,z-1.5); - - glTexCoord2f(1.0,0.0); - glVertex3f(x,y+0.0,z+1.5); - - glTexCoord2f(1.0,1.0); - glVertex3f(x,y+3.0,z+1.5); - - glTexCoord2f(0.0,1.0); - glVertex3f(x,y+3.0,z-1.5); - - glEnd(); - -} - -static void calcposobs(void) -{ - dir[0]=sin(alpha*M_PI/180.0); - dir[2]=cos(alpha*M_PI/180.0)*sin(beta*M_PI/180.0); - dir[1]=cos(beta*M_PI/180.0); - - obs[0]+=v*dir[0]; - obs[1]+=v*dir[1]; - obs[2]+=v*dir[2]; -} - -static void printstring(void *font, char *string) -{ - int len,i; - - len=(int)strlen(string); - for(i=0;ijoy.wXpos) - min[0]=joy.wXpos; - center[0]=(max[0]+min[0])/2; - - if(max[1]joy.wYpos) - min[1]=joy.wYpos; - center[1]=(max[1]+min[1])/2; - - if(joyactive) { - if(fabs(center[0]-(float)joy.wXpos)>0.1*(max[0]-min[0])) - alpha+=2.5*(center[0]-(float)joy.wXpos)/(max[0]-min[0]); - if(fabs(center[1]-(float)joy.wYpos)>0.1*(max[1]-min[1])) - beta+=2.5*(center[1]-(float)joy.wYpos)/(max[1]-min[1]); - - if(joy.wButtons & JOY_BUTTON1) - v+=0.01; - if(joy.wButtons & JOY_BUTTON2) - v-=0.01; - } - } else - joyavailable=0; -#endif -} - -static void drawfire(void) -{ - static int count=0; - static char frbuf[80]; - int j; - float fr; - - dojoy(); - - glEnable(GL_DEPTH_TEST); - - if(fog) - glEnable(GL_FOG); - else - glDisable(GL_FOG); - - glDepthMask(GL_TRUE); - glClearColor(1.0,1.0,1.0,1.0); - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - - glPushMatrix(); - calcposobs(); - gluLookAt(obs[0],obs[1],obs[2], - obs[0]+dir[0],obs[1]+dir[1],obs[2]+dir[2], - 0.0,1.0,0.0); - - glColor4f(1.0,1.0,1.0,1.0); - - glEnable(GL_TEXTURE_2D); - - glBindTexture(GL_TEXTURE_2D,groundid); - glBegin(GL_QUADS); - glTexCoord2fv(qt[0]); - glVertex3fv(q[0]); - glTexCoord2fv(qt[1]); - glVertex3fv(q[1]); - glTexCoord2fv(qt[2]); - glVertex3fv(q[2]); - glTexCoord2fv(qt[3]); - glVertex3fv(q[3]); - glEnd(); - - glEnable(GL_ALPHA_TEST); - glAlphaFunc(GL_GEQUAL,0.9); - - glBindTexture(GL_TEXTURE_2D,treeid); - for(j=0;jsizeX, img->sizeY, GL_RGB, - GL_UNSIGNED_BYTE, (GLvoid *)(img->data)))) { - fprintf(stderr,"GLULib%s\n",gluErrorString(gluerr)); - exit(-1); - } - - glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); - glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT); - - glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST_MIPMAP_LINEAR); - glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); - - glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_DECAL); - - glGenTextures(1,&treeid); - glBindTexture(GL_TEXTURE_2D,treeid); - - if(!(img=ImageLoad("tree2.rgb"))) { - fprintf(stderr,"Error reading a texture.\n"); - exit(-1); - } - - for(y=0;y<128;y++) - for(x=0;x<128;x++) { - tex[x][y][0]=img->data[(y+x*128)*3]; - tex[x][y][1]=img->data[(y+x*128)*3+1]; - tex[x][y][2]=img->data[(y+x*128)*3+2]; - if((tex[x][y][0]==tex[x][y][1]) && (tex[x][y][1]==tex[x][y][2]) && (tex[x][y][2]==255)) - tex[x][y][3]=0; - else - tex[x][y][3]=255; - } - - if((gluerr=gluBuild2DMipmaps(GL_TEXTURE_2D, 4, 128, 128, GL_RGBA, - GL_UNSIGNED_BYTE, (GLvoid *)(tex)))) { - fprintf(stderr,"GLULib%s\n",gluErrorString(gluerr)); - exit(-1); - } - - glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); - glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT); - - glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST_MIPMAP_LINEAR); - glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); - - glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE); -} - -static void inittree(void) -{ - int i; - float dist; - - for(i=0;iTREEOUTR)); -} - -int main(int ac,char **av) -{ - int i; - - fprintf(stderr,"Fire V1.5\nWritten by David Bucciarelli (tech.hmw@plus.it)\n"); - - /* Default settings */ - - WIDTH=640; - HEIGHT=480; - np=800; - eject_r=0.1; - dt=0.015; - eject_vy=4; - eject_vl=1; - shadows=1; - ridtri=0.1; - - maxage=1.0/dt; - - if(ac==2) - np=atoi(av[1]); - - if(ac==4) { - WIDTH=atoi(av[2]); - HEIGHT=atoi(av[3]); - } - - glutInitWindowPosition(0,0); - glutInitWindowSize(WIDTH,HEIGHT); - glutInit(&ac,av); - - glutInitDisplayMode(GLUT_RGB|GLUT_DEPTH|GLUT_DOUBLE); - - glutCreateWindow("Fire"); - - reshape(WIDTH,HEIGHT); - - inittextures(); - - glShadeModel(GL_FLAT); - glEnable(GL_DEPTH_TEST); - - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); - - glEnable(GL_FOG); - glFogi(GL_FOG_MODE,GL_EXP); - glFogfv(GL_FOG_COLOR,fogcolor); - glFogf(GL_FOG_DENSITY,0.1); -#ifdef FX - glHint(GL_FOG_HINT,GL_NICEST); -#endif - - p=malloc(sizeof(part)*np); - - for(i=0;i -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=fire - 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 "fire.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 "fire.mak" CFG="fire - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "fire - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "fire - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "fire - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "fire - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "fire - Win32 Release" -# Name "fire - Win32 Debug" -# Begin Source File - -SOURCE=.\fire.c -# End Source File -# Begin Source File - -SOURCE=.\image.c -# End Source File -# Begin Source File - -SOURCE=.\image.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/bucciarelli/glbpaltex.dsp b/lib/glut-3.7.6/progs/bucciarelli/glbpaltex.dsp deleted file mode 100644 index 0c13c6cd3..000000000 --- a/lib/glut-3.7.6/progs/bucciarelli/glbpaltex.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="glbpaltex" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=glbpaltex - 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 "glbpaltex.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 "glbpaltex.mak" CFG="glbpaltex - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "glbpaltex - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "glbpaltex - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "glbpaltex - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "glbpaltex - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "glbpaltex - Win32 Release" -# Name "glbpaltex - Win32 Debug" -# Begin Source File - -SOURCE=.\glbpaltx.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/bucciarelli/glbpaltx.c b/lib/glut-3.7.6/progs/bucciarelli/glbpaltx.c deleted file mode 100644 index 202dcb41b..000000000 --- a/lib/glut-3.7.6/progs/bucciarelli/glbpaltx.c +++ /dev/null @@ -1,160 +0,0 @@ -/* glbpaltex.c */ - -/* - * Global Paletted texture demo. - */ - -#include -#include -#include -#include - -#if defined(FX) && defined(__WIN32__) -WINGDIAPI void APIENTRY gl3DfxSetPaletteEXT(GLuint *pal); -#else -void gl3DfxSetPaletteEXT(GLuint *pal); -#endif - -static float Rot = 0.0; - - -static void Idle( void ) -{ - Rot += 5.0; - glutPostRedisplay(); -} - - -static void Display( void ) -{ - glClear( GL_COLOR_BUFFER_BIT ); - - glPushMatrix(); - glRotatef(Rot, 0, 0, 1); - - glBegin(GL_POLYGON); - glTexCoord2f(0, 1); glVertex2f(-1, -1); - glTexCoord2f(1, 1); glVertex2f( 1, -1); - glTexCoord2f(1, 0); glVertex2f( 1, 1); - glTexCoord2f(0, 0); glVertex2f(-1, 1); - glEnd(); - - glPopMatrix(); - - glutSwapBuffers(); -} - - -static void Reshape( int width, int height ) -{ - glViewport( 0, 0, width, height ); - glMatrixMode( GL_PROJECTION ); - glLoadIdentity(); - glFrustum( -1.0, 1.0, -1.0, 1.0, 5.0, 25.0 ); - glMatrixMode( GL_MODELVIEW ); - glLoadIdentity(); - glTranslatef( 0.0, 0.0, -15.0 ); -} - - -/* ARGSUSED1 */ -static void Key( unsigned char key, int x, int y ) -{ - switch (key) { - case 27: - exit(0); - break; - } - glutPostRedisplay(); -} - - -/* ARGSUSED1 */ -static void SpecialKey( int key, int x, int y ) -{ - switch (key) { - case GLUT_KEY_UP: - break; - case GLUT_KEY_DOWN: - break; - case GLUT_KEY_LEFT: - break; - case GLUT_KEY_RIGHT: - break; - } - glutPostRedisplay(); -} - - -static void Init( void ) -{ -#ifdef GL_3DFX_set_global_palette - GLubyte texture[8][8] = { /* PT = Paletted Texture! */ - { 0, 0, 0, 0, 0, 0, 0, 0}, - { 0, 100, 100, 100, 0, 180, 180, 180}, - { 0, 100, 0, 100, 0, 0, 180, 0}, - { 0, 100, 0, 100, 0, 0, 180, 0}, - { 0, 100, 100, 100, 0, 0, 180, 0}, - { 0, 100, 0, 0, 0, 0, 180, 0}, - { 0, 100, 0, 0, 0, 0, 180, 0}, - { 0, 100, 255, 0, 0, 0, 180, 250}, - }; - int i; - - GLubyte table[256][4]; - - if (!glutExtensionSupported("3DFX_set_global_palette")) { -#endif - printf("Sorry, 3DFX_set_global_palette not supported\n"); - exit(0); -#ifdef GL_3DFX_set_global_palette - } - - /* put some wacky colors into the texture palette */ - for (i=0;i<256;i++) { - table[i][2] = i; - table[i][1] = 0; - table[i][0] = 127 + i / 2; - table[i][3] = 255; - } - - gl3DfxSetPaletteEXT((GLuint *)table); - - glTexImage2D(GL_TEXTURE_2D, /* target */ - 0, /* level */ - GL_COLOR_INDEX8_EXT, /* internal format */ - 8, 8, /* width, height */ - 0, /* border */ - GL_COLOR_INDEX, /* texture format */ - GL_UNSIGNED_BYTE, /* texture type */ - texture); /* teh texture */ -#endif - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); - glEnable(GL_TEXTURE_2D); -} - - -int main( int argc, char *argv[] ) -{ - glutInit( &argc, argv ); - glutInitWindowPosition( 0, 0 ); - glutInitWindowSize( 640, 480 ); - - glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE ); - - glutCreateWindow(argv[0]); - - Init(); - - glutReshapeFunc( Reshape ); - glutKeyboardFunc( Key ); - glutSpecialFunc( SpecialKey ); - glutDisplayFunc( Display ); - glutIdleFunc( Idle ); - - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/bucciarelli/gltest.c b/lib/glut-3.7.6/progs/bucciarelli/gltest.c deleted file mode 100644 index b9ec29e8b..000000000 --- a/lib/glut-3.7.6/progs/bucciarelli/gltest.c +++ /dev/null @@ -1,535 +0,0 @@ -/* - * This program is under the GNU GPL. - * Use at your own risk. - * - * written by David Bucciarelli (tech.hmw@plus.it) - * Humanware s.r.l. - */ - -#include -#include -#include -#include -#include - -typedef struct { - char *name; - char *unit; - void (*init)(void); - int (*run)(int, int); - int type; - int numsize; - int size[10]; -} benchmark; - -static int frontbuffer=1; - -/***************************************************************************/ - -static void init_test01(void) -{ - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluOrtho2D(-0.5,639.5,-0.5,479.5); - glMatrixMode(GL_MODELVIEW); - - glShadeModel(GL_FLAT); - glDisable(GL_DEPTH_TEST); - - glClearColor(0.0,0.1,1.0,0.0); - glClear(GL_COLOR_BUFFER_BIT); - glColor3f(1.0,0.0,0.0); -} - -/* ARGSUSED */ -static int test01(int size, int num) -{ - int x,y; - - glBegin(GL_POINTS); - for(y=0;yinit(); - - stime=glutGet(GLUT_ELAPSED_TIME); - - dtime=0.0; - calibnum=0; - while(dtime<2.0) { - bmark->run(0,1); - glFinish(); - etime=glutGet(GLUT_ELAPSED_TIME); - dtime=(etime-stime)/1000.0; - calibnum++; - } - glPopAttrib(); - - fprintf(stderr,"Elapsed time for the calibration test (%d): %f\n",calibnum,dtime); - - num=(int)((BMARKS_TIME/dtime)*calibnum); - - if(num<1) - num=1; - - fprintf(stderr,"Selected number of benchmark iterations: %d\n",num); - - mintime=HUGE_VAL; - maxtime=-HUGE_VAL; - - for(tottime=0.0,j=0;j<5;j++) { - glPushAttrib(GL_ALL_ATTRIB_BITS); - bmark->init(); - - stime=glutGet(GLUT_ELAPSED_TIME); - numelem=bmark->run(0,num); - glFinish(); - etime=glutGet(GLUT_ELAPSED_TIME); - - glPopAttrib(); - - dtime=(etime-stime)/1000.0; - tottime+=dtime; - - fprintf(stderr,"Elapsed time for run %d: %f\n",j,dtime); - - if(dtimemaxtime) - maxtime=dtime; - } - - tottime-=mintime+maxtime; - - fprintf(stdout,"%s\n%f %s/sec",bmark->name,numelem/(tottime/3.0),bmark->unit); - - if(bmark->type==3) - fprintf(stdout,", MPixel Fill/sec: %f\n\n", - (numelem*bmark->size[0]*(float)bmark->size[0])/(1000000.0*tottime/3.0)); - else - fprintf(stdout,"\n\n"); -} - -/***************************************************************************/ - -static void dotest1param(benchmark *bmark) -{ - float stime,etime,dtime,tottime,maxtime,mintime; - int num,numelem,calibnum,j,k; - - fprintf(stdout,"%s\n",bmark->name); - - for(j=0;jnumsize;j++) { - fprintf(stderr,"Current size: %d\n",bmark->size[j]); - - glPushAttrib(GL_ALL_ATTRIB_BITS); - bmark->init(); - - stime=glutGet(GLUT_ELAPSED_TIME); - - dtime=0.0; - calibnum=0; - while(dtime<2.0) { - bmark->run(bmark->size[j],1); - glFinish(); - etime=glutGet(GLUT_ELAPSED_TIME); - dtime=(etime-stime)/1000.0; - calibnum++; - } - glPopAttrib(); - - fprintf(stderr,"Elapsed time for the calibration test (%d): %f\n",calibnum,dtime); - - num=(int)((BMARKS_TIME/dtime)*calibnum); - - if(num<1) - num=1; - - fprintf(stderr,"Selected number of benchmark iterations: %d\n",num); - - mintime=HUGE_VAL; - maxtime=-HUGE_VAL; - - for(numelem=1,tottime=0.0,k=0;k<5;k++) { - glPushAttrib(GL_ALL_ATTRIB_BITS); - bmark->init(); - - stime=glutGet(GLUT_ELAPSED_TIME); - numelem=bmark->run(bmark->size[j],num); - glFinish(); - etime=glutGet(GLUT_ELAPSED_TIME); - - glPopAttrib(); - - dtime=(etime-stime)/1000.0; - tottime+=dtime; - - fprintf(stderr,"Elapsed time for run %d: %f\n",k,dtime); - - if(dtimemaxtime) - maxtime=dtime; - } - - tottime-=mintime+maxtime; - - fprintf(stdout,"SIZE=%03d => %f %s/sec",bmark->size[j],numelem/(tottime/3.0),bmark->unit); - if(bmark->type==2) - fprintf(stdout,", MPixel Fill/sec: %f\n", - (numelem*bmark->size[j]*bmark->size[j]/2)/(1000000.0*tottime/3.0)); - else - fprintf(stdout,"\n"); - } - - fprintf(stdout,"\n\n"); -} - -/***************************************************************************/ - -static void display(void) -{ - int i; - - if(frontbuffer) - glDrawBuffer(GL_FRONT); - else - glDrawBuffer(GL_BACK); - - for(i=0;i -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=gltest - 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 "gltest.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 "gltest.mak" CFG="gltest - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "gltest - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "gltest - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "gltest - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "gltest - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "gltest - Win32 Release" -# Name "gltest - Win32 Debug" -# Begin Source File - -SOURCE=.\gltest.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/bucciarelli/image.c b/lib/glut-3.7.6/progs/bucciarelli/image.c deleted file mode 100644 index 1ebf3106e..000000000 --- a/lib/glut-3.7.6/progs/bucciarelli/image.c +++ /dev/null @@ -1,232 +0,0 @@ -#include -#include -#include -#include -#include "image.h" - -#define IMAGIC 0x01da -#define IMAGIC_SWAP 0xda01 - -#define SWAP_SHORT_BYTES(x) ((((x) & 0xff) << 8) | (((x) & 0xff00) >> 8)) -#define SWAP_LONG_BYTES(x) (((((x) & 0xff) << 24) | (((x) & 0xff00) << 8)) | \ -((((x) & 0xff0000) >> 8) | (((x) & 0xff000000) >> 24))) - - typedef struct - { - unsigned short imagic; - unsigned short type; - unsigned short dim; - unsigned short sizeX, sizeY, sizeZ; - unsigned long min, max; - unsigned long wasteBytes; - char name[80]; - unsigned long colorMap; - FILE *file; - unsigned char *tmp[5]; - unsigned long rleEnd; - unsigned long *rowStart; - unsigned long *rowSize; - } Image; - - -static Image *ImageOpen(char *fileName) -{ - Image *image; - unsigned long *rowStart, *rowSize, ulTmp; - int x, i; - - image = (Image *)malloc(sizeof(Image)); - if (image == NULL) - { - fprintf(stderr, "Out of memory!\n"); - exit(-1); - } - if ((image->file = fopen(fileName, "rb")) == NULL) - { - perror(fileName); - exit(-1); - } - /* - * Read the image header - */ - fread(image, 1, 12, image->file); - /* - * Check byte order - */ - if (image->imagic == IMAGIC_SWAP) - { - image->type = SWAP_SHORT_BYTES(image->type); - image->dim = SWAP_SHORT_BYTES(image->dim); - image->sizeX = SWAP_SHORT_BYTES(image->sizeX); - image->sizeY = SWAP_SHORT_BYTES(image->sizeY); - image->sizeZ = SWAP_SHORT_BYTES(image->sizeZ); - } - - for ( i = 0 ; i <= image->sizeZ ; i++ ) - { - image->tmp[i] = (unsigned char *)malloc(image->sizeX*256); - if (image->tmp[i] == NULL ) - { - fprintf(stderr, "Out of memory!\n"); - exit(-1); - } - } - - if ((image->type & 0xFF00) == 0x0100) /* RLE image */ - { - x = image->sizeY * image->sizeZ * sizeof(long); - image->rowStart = (unsigned long *)malloc(x); - image->rowSize = (unsigned long *)malloc(x); - if (image->rowStart == NULL || image->rowSize == NULL) - { - fprintf(stderr, "Out of memory!\n"); - exit(-1); - } - image->rleEnd = 512 + (2 * x); - fseek(image->file, 512, SEEK_SET); - fread(image->rowStart, 1, x, image->file); - fread(image->rowSize, 1, x, image->file); - if (image->imagic == IMAGIC_SWAP) - { - x /= sizeof(long); - rowStart = image->rowStart; - rowSize = image->rowSize; - while (x--) - { - ulTmp = *rowStart; - *rowStart++ = SWAP_LONG_BYTES(ulTmp); - ulTmp = *rowSize; - *rowSize++ = SWAP_LONG_BYTES(ulTmp); - } - } - } - return image; -} - -static void ImageClose( Image *image) -{ - int i; - - fclose(image->file); - for ( i = 0 ; i <= image->sizeZ ; i++ ) - free(image->tmp[i]); - free(image); -} - -static void ImageGetRow( Image *image, unsigned char *buf, int y, int z) -{ - unsigned char *iPtr, *oPtr, pixel; - int count; - - if ((image->type & 0xFF00) == 0x0100) /* RLE image */ - { - fseek(image->file, image->rowStart[y+z*image->sizeY], SEEK_SET); - fread(image->tmp[0], 1, (unsigned int)image->rowSize[y+z*image->sizeY], - image->file); - - iPtr = image->tmp[0]; - oPtr = buf; - for (;;) - { - pixel = *iPtr++; - count = (int)(pixel & 0x7F); - if (!count) - return; - if (pixel & 0x80) - { - while (count--) - { - *oPtr++ = *iPtr++; - } - } - else - { - pixel = *iPtr++; - while (count--) - { - *oPtr++ = pixel; - } - } - } - } - else /* verbatim image */ - { - fseek(image->file, 512+(y*image->sizeX)+(z*image->sizeX*image->sizeY), - SEEK_SET); - fread(buf, 1, image->sizeX, image->file); - } -} - -static void ImageGetRawData( Image *image, unsigned char *data) -{ - int i, j, k; - int remain; - - switch ( image->sizeZ ) - { - case 1: - remain = image->sizeX % 4; - break; - case 2: - remain = image->sizeX % 2; - break; - case 3: - remain = (image->sizeX * 3) & 0x3; - if (remain) - remain = 4 - remain; - break; - case 4: - remain = 0; - break; - } - - for (i = 0; i < image->sizeY; i++) - { - for ( k = 0; k < image->sizeZ ; k++ ) - ImageGetRow(image, image->tmp[k+1], i, k); - for (j = 0; j < image->sizeX; j++) - for ( k = 1; k <= image->sizeZ ; k++ ) - *data++ = *(image->tmp[k] + j); - data += remain; - } -} - -IMAGE *ImageLoad(char *fileName) -{ - Image *image; - IMAGE *final; - int sx; - - image = ImageOpen(fileName); - - final = (IMAGE *)malloc(sizeof(IMAGE)); - if (final == NULL) - { - fprintf(stderr, "Out of memory!\n"); - exit(-1); - } - final->imagic = image->imagic; - final->type = image->type; - final->dim = image->dim; - final->sizeX = image->sizeX; - final->sizeY = image->sizeY; - final->sizeZ = image->sizeZ; - - /* - * Round up so rows are long-word aligned - */ - sx = ( (image->sizeX) * (image->sizeZ) + 3) >> 2; - - final->data - = (unsigned char *)malloc( sx * image->sizeY * sizeof(unsigned int)); - - if (final->data == NULL) - { - fprintf(stderr, "Out of memory!\n"); - exit(-1); - } - - ImageGetRawData(image, final->data); - ImageClose(image); - return final; -} diff --git a/lib/glut-3.7.6/progs/bucciarelli/image.h b/lib/glut-3.7.6/progs/bucciarelli/image.h deleted file mode 100644 index 52ccd5b11..000000000 --- a/lib/glut-3.7.6/progs/bucciarelli/image.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef __IMAGE_H__ -#define __IMAGE_H__ - -typedef struct -{ - unsigned short imagic; - unsigned short type; - unsigned short dim; - unsigned short sizeX, sizeY, sizeZ; - char name[128]; - unsigned char *data; -} IMAGE; - -IMAGE *ImageLoad(char *); - -#endif /* !__IMAGE_H__! */ diff --git a/lib/glut-3.7.6/progs/bucciarelli/mnt.bin b/lib/glut-3.7.6/progs/bucciarelli/mnt.bin deleted file mode 100644 index 0dc479b41..000000000 --- a/lib/glut-3.7.6/progs/bucciarelli/mnt.bin +++ /dev/null @@ -1 +0,0 @@ -âããå½äãããââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââä½çéëíÿû÷ŸŸ÷ŸŸŸŸ°±ÛÜÝÝÛŸûþÿîíìëëëëëìëëíïÿîìììëé½ååäãâãââãåèêëëèåãâãäå½çç½åããääåçèéêîÿûûûüü÷±ÛܲŸ÷úú÷±²°ûïîîîîïíëé½ãââââãåçåäããããâãâââãâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââäå½éìíîÿû÷ŸŸ÷÷Ÿ°±±±²ÝÞÞ²÷ûþïìéèèèèèèèççéëëêêêéèç½½½äãäåãããä½èêëèåââãå½çç½½½½èéèèèèèêííîîîîþú°ÜÞÛ±°°°±ÛÜ°úþÿÿÿÿïíëè½ãâââââä½ääãâãä½çåääåãâãäãâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãå½èìïÿþüú÷ŸŸ÷÷÷°±²²ÜÝÝݱŸ÷üîéç½åää½½åääå½½èèç½½åå½åääçèç½½å½èëìé½ãâã½èééèèèìíííìêéèêëêéèêìïüŸÜÞÝÜÛÜÜÜÝݱ÷üþüüüþîëèåââââââäåãâââãåèêèèèçåäåçåâââââââãããääãâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãåçéêíîþú÷÷Ÿ°÷úþþû÷²ÝÝÝÞÝÛ±÷üíé½äãâããããââââãäãããäääå½çèêìëêè½½èêìëéåãäåèìëëìîÿþüûÿîëêéèç½½èëïú±ÜÞßÞÝÞÞÞÝÜ°÷üþÿþûûïìèäââââââäåââââã½êìëëêèç½èèåââââââãå½çèçåããââããããââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãå½éëíîþ÷°°°°Ÿúüÿÿþû°ÜÝÝÝÝܱ÷þìçåãââââââââââââââãåååçéêíîîîìêéèéëîíéåää½êììíÿüûú÷Ÿúÿíëè½½ååèìÿú±ÜßßßÞÞÞÝÜÛ°÷üïïþûúÿìèäâââââäååãâããä½éìííìêèééèåãâââââäçèèèççççåå½çç½åäããâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãâââââãââã½èêêëîü÷°°Ÿ÷÷üÿîîïþú°±ÛÜÛ±Ÿûþíê½ãâââââââââââââãå½çèéêìïïïîìëëêêëíëçäâäçêìíÿüúûú°²Ÿûïìêèç½çéìïûŸ²ÝÜÜÜܲ±²²°÷þïÿþûúüîéåãâââãäåååå½½çèêìîïîíëêéèåãââââä½èèèèéëìíëéëíìëéè½äããââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãåääããå½ääåèéëëìïûŸ°Ÿ÷úûþïîîÿþüú°ÛÜÛ±Ÿúüïëçäãâââââââââââãå½çèéëìîïþþïìëëêëìíêçåäåçéëîþú÷úŸÛܱ÷þîìêèçéëíÿûŸ²ÜÛ²±±ŸŸ°±Ÿûÿîïÿûúþíé½äãâââãä½çèçèêëíïÿÿÿþîíêèåããääåçèèèéêìïþüÿïÿþÿîìêç½½åãââââââãâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââããäå½çéççèèç½çèéêëíþúŸ°Ÿ÷üÿÿÿïïþüüüú°²Û²°úüîëéçåãâââââââââäå½çèèéëìïü÷÷üîìììììêéèèççèéëïü÷ŸŸ±ÛÝÛ°üïìêç½èëîþú±ÛÝÜÛ°÷÷÷Ÿ÷ûþîííïüûïëéçåäââââä½çççéëìïþþþûûþïìéèç½çèèêêêêëíîþûúûûûûþÿîëéééèåãââââããââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãä½åå½êëêéééèçèèèéìïüúŸ°Ÿûÿîïÿÿÿþüüþû÷±ÜÛ°úüîëéç½äââââââââä½ççèéêéêíþú±²÷þïîîíëêëìëëêéêìïü÷Ÿ°²ÜÝÛŸüïíìé½èìïü÷±ÛÝܲŸúúûûúüïîííïüüîëéçåäââââââãä½êëìïþþüüþÿþïîíëèèèêëììíííîÿþûûûüÿîíëêëìëéçåå½äãããââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââããåçêëêéçç½çççèëîÿÿþüúûüïîïÿïîîïïþüú÷°÷ûüÿëéççåãâââââââãåççççêêéêìï÷²Û°úüÿîíëëíííìêêìíïÿüúŸ°±°÷ûÿïîíéçêíîïþúŸ±²±Ÿúûþüûÿîììíïïîëé½åãââââââââã½êëëîþüüþÿÿüüüÿíêêëíííîîíîïïÿüþþþÿïíììîíììëêëëçääãâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãä½éêéè½½½çççêîþþÿÿþüüþþÿÿÿïíìíïþûúú÷ûþÿïìéç½ãâââââââãäçéç½éëëêêëÿŸÜÞÛ±ŸûþÿîïïîîîììîÿÿÿüûúŸ÷ûþÿÿÿÿïìêëííîÿû÷°°°Ÿúüþûûÿîííîííìêçåäâââââââââãèëëíïþþþÿÿþüüûþîííîîîïïïÿþÿÿþþïïÿþÿïîîîîïÿïîïîêçäââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââä½çççççèéééìÿþüþÿÿþþüüüþÿîííîþú÷Ÿ÷úûüþÿíëèåãââââããäåçééçèêêêêêíü±ß¹ßÞÛ±Ÿ÷úúüÿïîííïüüüþþüûüÿïÿþüûüîíîîîîÿüúŸŸŸ÷úüüûûÿîììííìêéçåãââââââââã½êíîîîïïÿïïÿüûúüÿÿþþÿÿÿÿþüûþÿþÿïïÿþÿÿÿÿïïþûüþÿïìçãââââââââââââââââââââââââââââââââââââââââââââââââãââââââââââââââââââââââå½ççèèéëëìîïÿüþïîïÿþüüþïîîîÿû÷Ÿ°°Ÿ÷úüþîìèäâââââãä½çèèèèèêëêêìîü±ß›­¹ÞÛÛÛ²±÷üþÿïïû÷úúüþþþÿïîïþüüüþÿïïïïÿþúŸ°ŸŸŸ÷ûüþîììììëéç½åäâââââââââäèëïïîîîïïîîïÿþüþþÿÿïîîîîïþúüþÿïïÿÿÿÿþÿïïÿûûþÿïîë½ãâââââââââââââââââââââââââââââââââââââââââââââãä½çåäãâââââââââââââââââââä½½½½çèêëëëìíîíììíííîÿÿÿÿþþûŸ±±±±²°÷ûÿíêçäãâãäãäåååçèéèèêìëìíîû±Þ¹¹ôÝÛÛÝÝܱŸŸ÷ûû÷ŸŸ÷ûûþïïííîíììîÿÿîîïÿþüúŸŸ°²²Ÿúûüÿîíìêèäããäãââââââââãåéìÿÿÿîîïïïïîîÿüüÿïîíííííîü÷ûþÿïÿþÿïïïîîïþûúûÿïíê½ãââââââââââââââââââââââââââââââââââââââââââããåçéëìëéçåãâãäãâââââââââââââãåååäå½èêëëëëêêëììëëìïÿÿþû÷Ÿ²ÜÜÜÝÜ°÷ûþíé½åäãåååäääå½çééèëííîîÿú±ÝôôôÝÛÝßô¹ÞÜÜÛ²±²Û²°Ÿúüïíìììëééìïÿïïÿûúú÷°°²Üܱ°Ÿ÷ûÿïìé½ãââââââââââââã½êìîïîìëìíïÿÿþþÿïîîíîíìììíþúþÿïîîîííìëëíïþûŸúüÿíê½äããââââââââââââââââââââââââââââââââââââââääåçéêíîîîíìêç½çè½½åäããâââââââââââââäåçêëììëêééééééëîïþû°²ÛÝôôôôݱ÷úüíé½ååå½ççåãä½èéêêìîïîííÿü÷²ÞÞÞÞÞßô­œ­¹ôôÞÝÞÞܲ±°ûïìêêêèèêìïÿÿþûŸŸ°±ÛÛÜÝÞܲ±±÷ûþíéäâââââââââââââäçêìîîîìëëíïüûûþïïîííîîìëìîüúûÿïîííííëêëíïþúŸŸûÿíêè½ääãâââââââââââââââââââââââââââââââââââãåçèéëíïÿÿüþÿîíêéêéêêéè½ãâââââââââââââãä½èëëëêéç½çééêëíÿüŸÛÝÞô¹­­ôݱŸ÷üíêçå½èéêéç½½çéëííîÿþÿÿÿþû÷²ÝÝÞßßô¹œžžžœ­¹¹ôÞÜܲúïìêééèéìïþüüûŸ²²ÛÜÜÝÞÞÞÞÝÝܱ÷ûïê½ãâââââââââââä½éìíííííîïþüúú÷üÿïîííïïíëìÿú°Ÿûÿïîïïïîïïÿüûú÷úûÿîëêè½äãââââââââââââââââââââââââââââââââââä½çêëíîÿþüûûÿíëëééç½½½½½äââââââââââââââââãåçèéèç½½çéêìíïü÷±ÛÜÞßÞÞÝÛ±Ÿ÷ûïíìçå½éêêééééêìîîîïüûûûûûú°ÛÜÝÞÞßßô››œžœ››››­­ßÜ÷þîëìîîÿü÷ŸŸ÷Ÿ²ÜÜÝÝÜÝßßßßßÞÝ°úþîëçãââââââââââã½éëííîîíîïþû÷÷°±÷üÿîííîííìíïú±°÷üÿÿþþþüûû÷÷÷÷úûûüïììëéçåâââââââââââââââââââââââââââââââãäåçéêíîîÿüûú÷÷ÿíëêéçåäãâäåãâââââââââââââââââãä½ç½å½çéêìîïþú±ÛÝÝÞÞÞÝÛ±°÷ûÿîíìéçèêêéêëììíîïþþû÷°ŸŸ°±±ÛÝÝÞÞßôô¹­›œžžžžžžž›ßÜŸüïíïüúŸ±ÛÜÛ±²ÝßôôßÞÞôô¹¹ßÞݱúþïìéäââââââââââã½êëìîïïïïþ÷±²ÜÜÛ°÷þïìëìíîïÿþú°±°úüûúúúúû÷°÷÷÷úûûüÿïïîíëèäââââââââââââââââââââââââââââããäå½èêëîîïþûû÷ŸŸûÿëèåãâââãääâââââââââââââââââââãäääå½èêíÿüú°ÛÜÜÜÝÝÞßݲ°Ÿúþïîîîìêêëêêëìììíïû°°°°±²ÛÝßÞßôôôôßßô­›œ›››œž»º›ôݱúþþû÷±ÛÝßßÞÝÞß¹¹­›­¹­­›¹ßßß²÷ûþîëçäâââââââââãçììíÿþþüû÷±ÛÝÞÞÞÜ°ûïëêëíÿüüûŸ±±°÷÷÷ŸŸŸ÷Ÿ±±°ŸŸ÷ûüþþþüüüïë½ãââââââââââââââââââââââââââäçç½èêëìîÿÿÿüû÷Ÿ°°÷ÿê½äâââãäääâââââââââââââââââââââããäçéìïü÷²ÝÞÝÜÝÝÞÞÞÜÛ²Ÿúüþÿïÿïîíììëíííîÿú±ÛÛÛÛÛÝÞ¹œ››­­¹ôôô­žžžœ­­œ©ª¼»›Þ²÷ûûŸ²Ýô¹¹¹­¹¹­œžžœžœ¹ôôÞÛ±ŸúþîéåâââââââââãçìîïÿüûúŸ±±ÛÞßßÞÛŸüíéèéëîïÿû÷Ÿúúú÷÷÷Ÿ°°²²±±°Ÿúüÿïïþûûûïêåãââââââââââââââââââââââââãåçèéëìîÿüú÷÷÷Ÿ°°±Ÿ÷ûïëçäãââãå½½ãââââââââââââââââââââãä½èêíþû°ÜôßÝÝÞÞÞÜÛÛܲ°Ÿ÷úûüüþþïíííïþüúŸ²ÛÝÝÝÞô­œºœ›­¹¹¹›žºººž››ž©¼¶ø®œôܱŸŸ±Ûß­­¹­œžºººº›­­ßÝÝÝÛ°üíèåãââââââââãçíÿÿþû÷°ÛÝÝÝô¹ôÞ²÷þìéçèëëìïüûúú÷Ÿ°°±²ÛÛÛ²²²²°÷úþÿÿüú÷úÿëçäââââââââââââââââââââââãåèééêìîÿû÷Ÿ²ÜÜÛÛÛ±°Ÿ÷ûïë½åãââãä½çäââââââââââââââââââââãåçéìÿú÷±Þ­ôÞßôßÞܲÜÜÛ²²²±°Ÿ÷úúþïïÿû÷°ÛÝßßßß¹›žº©»®»ºžžœœººœœ®¶ýñ¶®º­ßݲ±²Þ­žœœž»¦»»»»©©œœ›ßÞßÞܱúÿìé½åâââââââäèìîÿüŸ±Üß­­­­­ôݱ÷þïëééêêëîþûŸ°±°±ÛÜÜÝÛ±°°²Û±°úüüüûŸ°÷üïê½ãâââââââââââãäääãââââäçêêêìîïþ÷±²ÛÞôßÝÝܱŸ÷÷þíèåãââââäççåäääãââââââââââââââââä½éíÿûŸ°²Þ­ôß¹­ôÞÛ²²²²ÝÞßßݲ°Ÿ÷üüûŸ±ÛÝô›œ››žº©»¦ªª®®¦©©»»»»»ººº»ªñæùæñ®œ­ôßô›žºº¦ªÈÈȼ¼ª¦»©ºž­ôÞÞÞݲŸþíêçãâââââã½éëîÿú±Üß¹œžž›­ÞÛ°úüïìëëëëëìïû°°°°°²ÛÜÜÛ°Ÿ°²ÜÛ°÷÷úû÷°°Ÿúþìçãâââââããããäåççç½äãââã½êììîÿüúŸÛÝßô›œ›ôÞݱ÷÷úþíèåââââãå½ååå½½ãââââââââââââââââäçêîüú÷°²ß­­­›­ôÝÛ±°±Üß¹›­ôÝÛ±Ÿ÷÷±ÜÝô›©¦®ª¦®Èȶø¶Èª¼¼¼ªª¦©»»¦ªª¶ýù§ù´¼»œ››žº©©»®¼ÈññññøÈ®¦»ž›ßÞÞÝÝÛŸüïëçãââââãåèèéíþ÷ÛÞô­››­››Þ²Ÿ÷üÿïîìëêéëíÿûûûüþüúŸ±ŸúúŸ±Û±±±±Ÿ÷Ÿ°ŸŸ÷ûïêçäâââãäå½½çè½äääãââââåéìïþü÷°²ÛÝôœº›ôÞÜ°ŸŸ÷ûÿìèäâââââââãå½½ãââââââââââââââââã½èëîïüú°Ý¹­›­­ôÝÛ±°²Ý¹››¹ÞÞݲ±±ÛÞ¹›žº©»»»»»¦¦¦¼øøøñýñø¶øø¶¼ª¼¼ª¼È¶ýæ·¸ý¶ª»œ©¦®ªÈøññøø¶¶¼®¦»ºž›ßÛ²±±±÷üïìèäâââââåèéèêîû±ÜÞ¹››¹¹››Þ±°ŸûþþþïíêêêëíïîíííîïüúúûûúŸ±±²²²±°°°°±±°úÿìçäâãäçèéêêé½ãââââââãåéìÿú÷±ÛÜÜÞ­©©›ôܱ°±±÷þîëçäââââââãäåäââââââââââââââââââäçêìíÿüŸÛß¹››­ôÝÜÛÛÜÞ­››¹ôôÞÝÜÝÞ­»®¼¼¼ª®ª®®ªøýñýµµ´µµýøøýýýý´´µ·¸ùæý¶®»º©»¦ªÈøýæµýýñø¶¼®¦»º›ôÛŸ÷÷úúüïíìèäâââãäèèèèêîú²Þ¹›œ›­­­­ßÛ²°úüüüÿîìëééêëëêëëëíïüûüþþû°²Û²±±±²²ÜÝܲŸûîêçååçéêìììëçäããââââãçëîüŸ±ÛÛÛÜôœ©®ª»­ßÛ±°ŸûÿïìèåââââââââãäââââââââââââââââââãåçéìïüŸÛßô¹¹¹ôÞÝÝÝÝß¹¹¹ô¹¹ôßßß­»ª¶ñ´ýñøøøñøøññ´æù§¸·µµµæ·¸§§¸··§¯§·µñ¶®¦¦¦¦¼ñµ·§ùæµýø¶¼®¦©¹ÜŸûüþÿïîîìëçäââãä½êéçéìÿ÷ÛÞ­œžž›¹­­¹ÞÛ²°ŸŸŸúþîìêéèèèéééêëíÿüþïïü°Ûܲ±²²ÛÝß¹Þܲ°üîëèéêìîîïïîê½äãããââäèíÿú°ÛÝÝÝÞ­ž©¼Èª»ž¹Ü±Ÿ÷üþïëçäââââââââääâââââââââââââââââââãåèëïû°ÛÝß¹¹¹ôÞÝÝÞÞßßßß¹››­¹­›»¼ñµù§·ææææµ´´µù¸¯¬«¬§·ù¸¯«¨¨¾¾«¬¬«¯¸¸ùµñȼ®¦ªÈ´·¬¾¯·æ´ýñȪ¦©žÞ±ûÿïîìëìíìêçåååå½êîìêëíþ°Üßô­œž››œž›ôÜÛÛÛ²±÷üïïíëéç½½å½çèëîîííïû±ÝßÝÜÛÜÝß¹­ßÝÛ²÷üíêìîïÿÿþÿÿíéçåååäâãèîûŸ±Ýßßß¹œ©ªÈ¼»žßܲ±Ÿûþîéåââââââââââãââââââââââââââââââââåèìÿú°²Ýô¹¹¹ôôÞÝÝÞÞÞß¹›žœ›œ®¶´æù¬¨«¯§¯§·ù·¸§¯¬¾¾«««¯¯¯¬«¾¨¨¨¨¾¾¾«§¸ùæ´ñ¶Èª¼¶øµ¸«¨«¯¸ùµñ¶ª©ž­Ý°þíìëêëíîíëéééééëîþïííïü°ÜÞô­›œœžºž›ÞÛÝÞÝܱ÷üÿíëéçäãäåå½êìììíïû²ß¹ôÞÞßß­žœôÞÝÛ²÷ÿíîÿþüüûüüîëéèèçåäåêþŸ²Ûß­­­œº»¼øȦœßÞݲ°÷ûîèäââââââââââââââââââââââââââââââãåéîûŸ°²Ýô¹­¹¹ôßÝÞßÞÞô›œ©»¼ñ§¯¬ÀŽÂÀÁÀ¾¬¯¬««¾¾¨¨¨¨ÀÁÀ¿¿¿¿ÀÀ¿¿¿¿¿¨¾¬¸´ýýñ¶øñýµù§¾¿¿¾¬§·´È©œôÝ°üíìëëíîîíìëêëíïïþûüüüüû°Üô›©©©©›ßÞß¹­­ÞÛ÷þìèåäâââââã½éêìíÿú²ß¹ôôôô¹›žž¹ÞÜܲ°úüüüüüüûúûÿîììêéç½éï÷²ÜÞ›ºº©»¦¼ø¼©œ¹ßÝÜÛ°ûíçãââââââââââââââââââââââââââââââãåéîúŸ±Üßôô¹›­ôÞÝÞÝÝÞô›žº©¦¦¼ýù¯¿¿Á’€’€’ÂÁÀÁÀÀÀÁÂŽŽŽŽŽŽŽŽÂÀ¿¿¿¨¨¬¸µ´´ýý´ææù¸¬¿Â¿¾«¬§·ùæø¦œÞ²Ÿþîîïïÿîíìëêëîþþüûüú÷úûú±Ý¹œ»»©©ºž­ôß¹››­ôÝ°þìèåäãããââã½èêíïþŸÜß¹¹¹¹¹¹›žž­ÞÜÛ²±ŸúûüþþüúŸ÷ûÿïîìêééíü°ÜÞ¹©»»©©»®È¶ª©­ÞÝÞÝ°ûíçãâââââââââââââââââââââââââââââä½èëÿúŸ±ÜÞßß¹œ¹ôÞÝÝÜÜÝß›ž©¦®¼ø¬¿ÂŽ’ÅÍÆÅÆÆÃ’’ŽŽ’ÃÃÃÃÀÃÃ’ÂÀÀÀÀ¿¾¬¸æææµæ··§¬¾ÁÂÀ¨¾¬¯§¸ùýªß²÷ÿîîïÿþïìëëëíÿþüúüÿþüÿÿûŸ±Üß›žžœ›­ôßÜÜÝÞßôßÝŸüïíêèèè½å½çéêíþûŸÛÞô¹¹¹ôßßô¹­ôÝÛܱ÷ûüþþïîïüúŸûÿÿïíìêêìïû±Ý­ž©º¦ª¼¦œ¹ßÞܱûïêåâââââââââââââââââââââââââââââåèëíïþûúŸ²ÝÝÝß¹ßÝÛÛÛܲ²Ý­¦¦®Èý·«¨ÁŽ€ÆÏÇÇÍÍÇÅÃÃÃÅÅÅÅÆÆÆÆÆÆÆ€ŽÂÁÁ¿¨¬§··ùù¸§§¯¬¨ÀÀ¨¾¬¸¸§¸ùñªß²ûîëêêìííìëëìîïïÿþïíïïîîþû÷°Üß­›­ôßÞÝܱ±²ÛÝÞÝÛŸûûþïîîìëêëíííþ÷±ÜÞô¹››­ôÞÝÝÞßÝÜܲ÷üþþþÿïïîÿúŸüïïïîíììíïüŸÜ¹œžº©¦¦©º›¹ôÞ²÷ÿíèãââââââââââââââââââââââââââââäéíÿþÿþüú÷²ÝÝÝÞßÜÛÛÜÝܲ±Ý›®ªÈøµ§«¨ÀÂ’ÆÐÏÏÏÐÏÍÆÆÆÍÍÍÇÇÆÆÇÆÇÍÏÍÏÐÏÅ€ŽÂÁÀ¨«¬¬¯§¸§¬««¬««¨¨¾¾«§¸¸¸¸·´È¹²üíéèèéêìíìêìïïîîíììíííîÿüû÷±Ýô­ôÞÝÝÝܲ±°±ÛÜÝܱ°Ÿ÷ûûüÿïÿüûüûŸ²ÜÞ¹››œ››¹ÞÜÜÞÞÝÝÛ°üïïïîïÿÿïÿûúþïíííîîïÿüúŸÛô­žœ››œººž›­ßÜŸþíë½ãââââââââââââââââââââââââââââ½ìÿûüþüûú÷±ÛÜÜÝÝÛÛÜÝÜÛ²Ûßœªø´æ¸¬¾¨¿Â€ÇÉÐÏÍÏÍÍÇÍÏÉÐÏÍÇÆÆÅÅÅÇÇÍÐÑ¥ÐÆ€ŽÂÀ¿¿¨¾¾¨¿Á¿«««««¬¬¯¸¸¸¸§¯¯ùý®œÛüëççèéêëíìëìíííííìììíîîïÿþú°ÛÞßÝÛÛÜÝÝÛ²°±²ÛÜÛ²²±°°Ÿ÷úú÷Ÿ±²ÛÝÝß¹››œœœœôÝÛ²ÛÝÝÛ±úþïíìíîÿÿïÿþüþïïïïïþûú÷÷°ÛÞ¹­¹¹­œœžžžœœ­Þ±ûîëèåãââââââââââââââââââââââââââãäéîûŸŸú÷÷÷Ÿ°±²ÛÛ²±²ÜÝܲ²Üôœªñ¸¬¾¨¨¿ŽÏ¥¥ÉÏÍÍÏÏÐÉÉÐÏÍÍÇÅÅÇÍÏÐÉÒÔÓ¥ÍÅ€ŽÁÁÁÀÀÁ۬«¬¬¬¯¸ù·¸¸§¬¬¯ù´¼Üûë½çèêëìíííííîïíììíîïíììîÿû÷°²ÜÛ²ÛÜÜÜÛ²±±±²²±²Û±±±±±°ŸŸ°ÛÝßÞÞô­­¹­­­¹ÝÛ°Ÿ÷ŸŸŸúüþþîíîïïïïïïÿÿþûúúúú÷÷÷Ÿ±ÛÜÞßô¹­››­œœ­¹ôÛ÷ÿëè½ãâââââââãäääããâââââââââââââä½çëÿú±²²²²±±°ŸŸŸ÷úŸ±Ûܲ±²Üß›º¦ø槾¿ÁÂÍ¥ÔÔÑÏÇÍÐÐÏÐÉÐÐÐÐÏÍÐÑÒÓÔÔ™™ÒÐÇÅ’ŽÁÀÀÁÀÁÂ’Å’À¾¬¬¬§···§¯¯§ñ¦›Ûûë½çéìîîïïïÿþÿïíìíïïïìëììïþüûŸ±±²ÜÜÛ²±°°±±±±°±²²ÛÜÜÜÛ±°ÛÞ¹­¹¹­›­¹­­¹ßܱŸ÷üþüüþþüþÿïÿÿÿïïïïïÿûŸ°°±±±ŸŸ°±²²ÜÝôôô¹ôôœž›ôÞÜŸþìèåãâââââãâã½ççç½åââââââââââââãçéìïþŸÛÞÞÞÝÛ²°úûþÿþúŸ±²±°²ÜÞ¹ž»È´§¨ÁŽ€ÅÍÉÔÖÊÒÉÏÐÉÐÏÉ¥¥ÑÑÑ¥¥Ò™ÊÖ××ÖÊÒÐÇÅ€ŽÀ¨¨ÀÀÁÆÍŽ¿«¬¬·æù·¸¯¯¸µÈ»›ÜúìçèëîÿþþüüûüüÿïîïÿïíêêëíïþþüûúúŸ±²±Ÿ÷Ÿ°²±±±±±²ÛÞô¹¹ôÞÞô­œžœœœžœ›œ›¹ßܱ÷üïíììíïïïÿþüüþÿÿÿÿïþ÷°²ÛÜÜÛ²²²²±±²ÜÝÞÞÞÞô­œ­ßܱûîéåãâââââäåå½èêêêé½ãâââââââââââãèìÿþû±ÝÞÞÞÞÝÛŸüïíîïÿü÷±ŸŸ²Üß­¦È´¸¾Á’ÅÏÉÓÖØÕ™ÑÐÏÏÍÐ¥ÒÔ™ÓÓÔÔ™Õ×ØØØÖÕÓÉÍÆÃŽ¿¾¾¿ÀÂ’ÍÐÆ€Á¾¬§ææù¸§¯¸ýÈ»œÝ÷íéëíïûúúŸ°ŸŸúüÿÿþþïìëëìíîÿÿþûúú÷°²°úúŸ±²±²²±°²Þ­œžžœ­¹›žººžžžžž›ßݲŸþíéééêëíïþûûûüÿÿÿïÿûŸ±ÛÝÝÝÜÜÜÜÜÛ±²²ÛÛ²²Ýô›ž›ß²Ÿþíèåãââââãå½çéêëêêéçäâââââââââââåëÿú÷°ÜÞßÞÞßܱúþîíííïþú÷Ÿ±Üß­œº¦È´¸¾Â€ÆÉљך×ÕÓ¥ÐÐÉ¥Ò™ÕÖÕÊÕÕךËËššØÖÔÑÐÆ’À¾¿ÁÂŽ€ÆÏÏÇŽ¿«¯¸æ·¸¸¸ùµñȦžÞŸÿìíÿûŸŸ°²ÜÛ±÷üþþüûÿîíîîïïÿü÷Ÿ°Ÿ°²Û°÷÷°²ÛÛÜÜÛÜÞ¹›žºº›­›œžžœ›œžžœ¹ÞÛ÷ÿëèééèêìïÿþþþîìíïÿûûúŸ²²²²ÛÛÛÛÝÜÛ±ŸŸ°°²Ý¹žºœôÜ°ûïêçäââââââãäçèèçèéè½äãââââââââãèîüŸŸ°ÛÞÞÝÝܲŸûÿÿþþþþþûŸ²ÜÞ­œ»ª¶´·¬¿ŽÅÉÒ™ÖØ×ÊÔÑ¥¥ÒÓ™Õ×Ø××××ØššËËËØ×ÊÔÐÆ’À¨Á’€ÆÇÍÅÃŽÀ¾«¯¸··ùùùµýøÈ»žß±þìÿ÷±Û²±²Ü±÷ûüÿþûûÿîîïÿþþü÷°ÛÜÛÛÜܲ±±²ÛÝÞßÞÞô¹›ž»»©ºœœ›œžœ­œº»»º­ßÜ÷ÿëéééèèêìîÿÿîëêìïüûüû÷°±²ÛÜÜÜÞßÞÜŸûûú÷°Ûôœºœ¹Ý²Ÿüíé½ãââââââãå½çççèéçåãâââââââä½ëÿ÷°Ÿ°²ÜÜÜÛ²°÷ûüûûúûüû÷°ÜÞ­¦¼¶ñµ·§¾ÂÅÉÓÊØš×™ÓÑ¥ÑÓÊÕ×ךššØØØššÌÌËš×ÕÓÐÆÃ’ÂÁ’ÅÆÆÇÆÆ’ŽÁÀ¨«¬§¸ùææ´ñ¶¼»žô±üïû±ÝÞÝÛÛ²ŸúúûþþüûûüüûúŸúúŸ²ÝÞÝÜÝÞÝÜÜÝÝÞ¹››œœœ»®¼ª®©ºž›­›œœ©»›ôÜ÷ÿìëéèçèéëíïïìêèêîüúú÷÷°ÛÝßôôôôßݱ÷úú÷Ÿ±Üôœºž­ßܱ÷þíêçäââââââãäç½½èèåãâãâââââåçêíþú÷÷Ÿ°±²±±±Ÿúûûûûûú÷Ÿ°±Ûßœ»®¼¶ýæ·«ÂÐљךÖÔÑ¥¥Ò™ÕÖÖךšššËšËá…ÌËšØÊÒÉÍÅÃ’€ÆÍÏÍÆÅÃÂÂÂÂÀ¨«¯·æææµý¶®œß²÷üŸÛÞôÝÛ²±°°÷ûüûûûú÷÷Ÿ°°ŸŸ²Üß¹ôßßÞßôôßô­žºº©®¼¶È¼¦©›­¹­œ©»žôÜŸüïìêèèéééëîìêéçéíü÷÷÷÷±Üß¹­›­¹ßݱ÷úúŸ±²ÜÞ›ºœ¹ÞÛ±÷þîë½ãââââââä½ååç½åäååãâââåéëíïüúŸŸŸŸŸŸŸ°°÷ûû÷÷÷÷ŸŸ°±±Üôž©®ªÈøý´µ¬ÁÃÍ¥ÓÖØÕÔÒ¥ÑÔÕ××ÖØËËÌááÌá ƒ…áÌšÕÔÑÐÇÆÅÆÇÐÉÍÆÅÃŽŽÁÀ¨¯ùæµµµµý¼©­ßÜ°ŸÛÝô¹ßܲ±±±÷ûûûüþþüû÷÷÷÷°Üß¹­­­¹ô­œœœ©»»¦®¦»®ª¶ñø¼¦»ºººžœ­­›œ¦­ßÛ±÷þïíììéçéêèèèéìÿüû÷Ÿ±Ûß­›œ›¹ßÞÝÛ°÷÷Ÿ±²ÛÞ›º›¹ôÝÜ°ûïë½ãâââââããããäå½çèèè½äãä½èêìîü÷±Ÿúûûûûúúûüû÷÷Ÿ°°°±±²Üßœ®¼¼¼Èññ´¸¨ŽÅÍ¥ÔÊ™™ÓÒÓ™ÖØššÌá…ƒƒƒ  Ù„„„Ù ËÖÔÑ¥ÐÆÃÅÇÇÆÅÅÀ’’ÂÁÁ¿«§´ýñøÈ®œßݲ°±ÛÝô­ôÝÛ²°Ÿûþþþÿîîîþûú÷Ÿ²Ýô¹›œœœ›žº»®ªª¼Èȼ¼¼Èø´ñ¼®¦©ºž›››ž©¦©ºœ¹ßݲŸúûþïëéèçååèëîþüú÷°Ûß›žºœôÞÞÞÛ°Ÿ°±±±ÛÞ›ºž›››¹Ý²÷þëçäââââããââãä½èééêëéèèèèéëìïû°²°÷ûüûûüüüüú÷÷Ÿ±²²²²²Ý­©ªª¦®¼¶øý·«ÂÃÇÐÑÔ™™™Ô™ÕØËÌá…ƒ†‡‘„ÙÙ‘‡‡‡‘„…ØÕÔÒÐÆÃÃÃÆÆÆÆÆÅÀÂÁÁÀ¾¯ùµñȪª»º­ÞÛÜÜÝÝÞ¹­¹ßÝÛ°÷üÿÿÿïííîþúŸ±ÛÝô­›œœžº»®¼¶¶øýµµýñññý´ñ¶¼ª®¦©ž››œ©¦¦»©º›ôßÝÛ±÷þíé½åäåèëîÿüúŸ°Ý­ž©»­ôÞÛ±°°±²²ÛÝß­žž­Þܲ÷ÿë½äãâââââãä½éêêêëíìììììîîîþ÷±Û²°úüþþÿÿïþû÷÷Ÿ°±±²ÛÜôœ¦®¦¦®®ªÈýù«Á’ÅÏ¥ÓÔ™™™ÊÖØË̃„‡‚ˆŠŠ‡ŠŠŠ‡‡‡‘ šÖ™ÑÐÍÆÅÅÃÅÇÇÇÅÃÀŽÂÁ¾¯·ý¼¦©œôÞÞôôôßßô¹¹¹¹ôݱûþïîíëìîÿ÷±ÜÞß¹­››œº©»®Èñýýæù·ùæµ´ý´´ýø¶ÈȪ¦ž›œ©¦¦¦¦¦©›­¹ÞÛŸüîéäâã½èìîïþû÷±Þ­©»»›ôܱ°±±²ÛÛÛÜÞô­œžœ›ôÞÝÛŸþìçäââââââãä½ééêêìíííîîïÿÿþû÷±Û²°úÿïïíìíïûŸŸŸ°±ÛÛÝô›¦¼¼ªª®®ªÈñ«ÀÃÇÐÑÒÓÔ™ÊÖØË „‡‚ˆ‰‰‰‰‰‰ˆŠ‘‡‘ Ë×ÊÓÑÐÍÇÅÃÃÆÍÏÏÆÃ’ÂÀ¾§¸ù´È®©ºž¹ß¹›œœ›­­¹­­­¹Þ²úþîìëêëíïüŸ²ÛÜÝÞô­›žžº©¦ª¶ýæ·¸·æµ´µæ´¶¼¼ªª®¦©©¦»©©¦®»ºœ¹ôÞ²Ÿûþíéäãäçèêëìíîÿ÷ܹ››œž›­Þ±ŸŸŸŸ°±±²²²²ÜÞßÜÛ±°Ÿ÷þíçãâââââââââãä½½½çèéêééëìïüûú°²²±úÿïíëêíþûŸ°°²ÜÝÞ¹œªøøøȼÈøñ´·¾ÁÃÅÍÐÉ¥ÒÔ՚˅ Ù†Š‰‰‚ŠŠ‘ Ìš×™Ò¥ÐÏÏÇÇÏÐÉÐÇÅÅ€ÂÀ¾¬§·´ø¼¦©œ¹­œžž›­¹ôôßݱ÷üíëêèêìîïûŸ±²²ÜÞô­››ž»®¶´æù¸¸ùù··µøȪ¼È¼ª®®¼È®©©¦¦©ºž¹ÞÞÜŸûþïìéåãå½½çèééêíû²Þßßô¹ôßÛ°Ÿ÷÷÷÷Ÿ±±°Ÿ÷Ÿ°Ÿúúüþþþíèäâââââââââââãäãããä½ç½½çëÿú÷÷Ÿ±²²÷þîìêêíüú°±²ÜÞô¹œ¦¶´µµñøýµæ§¾Á’ÃÆÇÏ¥ÓÊ×Ë… ƒƒ†‡‰¡¡¡‰ˆˆ‚‘Ù …Ì×ÊÔÒ¥ÉÐÉÑÒÑÉÍÆÅÅÿ«¬§§ùµ´ñȦºžž©©ž­¹ôßÞܲŸüíëéèéëíïþúŸ²ÛÜÜÞô¹­œ®øýµù§¸··¸¸§¯¸æýø¶¶È¼¶¶ñ´ý¶®»©ºž­ÞÜÝÛŸüïîëèååååååååä½ëþ°ÜÝÝÝÞÝÛ±Ÿúú÷÷ú÷ŸŸúüüüïîîíëêëë½ãââââââââââââââââââããâã½êÿ÷°±±²²±Ÿúïëééíþ÷±ÛÜÝôô¹œº»¼ýùùùæµæ·¯«¿ÂÃÅÆÆÏ¥Ó֚჆†††‡‚‰¡‹Œ¡¡‰ˆŠ‘„ƒƒƒÌÖ™ÓÓÔÔ™™ÔÒÉÍÆÅ’ŽÁ¨¬¯§·ææµñ¼¦©º»¦¦©œ¹ßÝÛ°÷üÿíëèåèëíîïþ÷±²ÛÛÜÞßô¹œº®¶ñµ·¯§¸¸§¬««¯ùµýøø¶øñ´ææñÈ®ž›ôÞÜÜÛ°ûÿíêè½½½½ååäãâäêïú±ÛÛÛܲ°Ÿ÷ûûûûûûúúþïîëéèèçåå½åâââââââââââââââââââââââãåêÿ÷°²ÛÜÜÛ±÷ÿíëëîû°ÛÝß¹­­›º»¼ñ游¸¸··¸¬¨ÀÁ’ÅÆÆÇÏ¥Ô֚ᆂ‚‡‘‡ˆ‰¡‹‹Œ¡ˆŠ‡‘‡‘‘ šÖÕÕÖÖÖÕ™Ó¥ÏÇÆÀ’ÂÀ«¯¸ùæ´øȪ¦¦®ªª¦ž­ÞÛ°úüÿîëé½äçêëëíÿüú÷÷Ÿ°±±²Üß›¼ñ¸¯§¸¸§§§§¸µýñýµæµñ¶®©ºž­ßÝÛÛ±úüÿîëéç½½½½çåãâã½êîü÷±²Ü²°Ÿ÷ûüþÿÿïïîëéçåäåäãââââââââââââââââââââââââââââãèíþú±ÛÜܱŸúüÿîîþ÷±Üß­ž¦¼ø´ù§§¯¬¬«¨Á’€ÃÃÅÇ¥ÓÕØ…‘ˆˆŠ‡Š‚ˆŒŒŒ¡ˆ‚ˆˆˆ‚„…ÌËšØ×ÕÊ™ÒÉÍÇÆÅ€Ž¨¬¸¸·ùµ´ñ¶ÈÈȶ¼¦ºœôܱúüïíëéçååèêéèëîïÿþüúúúŸ°±Ü­®ø測¬¯§§¸¸§¸µýýæù¸¸·ùµý¶ª¦©­ÞÝݲŸûþïîìëéç½½½çåãââã½éìþ÷²Ü²±°°÷üþÿîíëéçåãâââââââââââââââââââââââââââããââââã½êíþŸ²ÜÛ²±°úûüüúŸ²Þ­©»®ª¶ñ´¸¬«¾¨ÀÁŽ€ÃÅÅÇÉÓÊš ‡‰ˆ‚Š‚ˆ‰¡‹Î΋ŒÎΡ¡ŒŒ¡‰Š‘„ …áØÕÊ™ÓÑÐÇÇÅÀ€À«¬¯¯¸···ùæµ´ñññÈ»›Þ±úþïìêéç½åçèèç½éìììîþûú÷ŸŸ°Ü¹œ©¶æ¸¬«¬¯§¯¬¯§ùæµæù¸¯¯§·æ´øȼ¼¦º›ßÝܱ°÷üÿîìêçåäãäåääãããå½éíü°Û²±±±Ÿúþïíëè½äââââââââââââââââââââââââââââãäãâââââåçêïú°²ÛÜÜÛ±°úü÷±Ýô›º¦Èñ´µ·§¬¨¿ÀÂŽ€ÅÆÆÅÅÍÉÑÊØᆂ‚ŠŠˆ‰ŒÎ•¢¢¤¤•¤‹‹‹‹‹Œ‰ˆŠ‘Ù šÖÕÊ™ÔÑÏÆÀ’’’Á¿¨¨¾««¬¯§¸ùµýýñª›Ü÷ÿíëëéèç½½ççç½½èééëîïþûúú÷ŸÛô›¼ýù¯¬¬¯¬««¬¯·ù·§¯¯««¬¸´ñø¶¶ª©œßÝÛ±°÷úÿíëêçäââãååäãââãä½êîû°ŸŸŸŸúüÿîêçåãââââââââââââââââââââââââââââãääãâââââãäçìþŸ²ÜÝÝÜÛ±÷÷°ÛÞ›ž»È´æù·¸¯«¨ÁÂ’€ÃÃÆÆÅÆÍÍÍÇÆÇÐ¥ÒÊØ…‘ˆŠ‡Š‚¡Î•“ÚÚ““•Î΋‹Î‹Œ¡ˆŠ† Ë×ÖÊÊÊÒÏÆ€’’€ÂÂÂÁÀ¿¨¾«¬§ùµýñ¼©º›Üúïìêêéèèçç½½½åå½ééêêëîÿþüû÷²ß¹ž»È´·¸¸§¯«¾««¬¬¬¬¬¬¬¬¬§¸¸µ´ñȦº­ôßÛŸûüïìêéçäããå½åäãââããä½êïüþÿîíëêé½ãâââââââââââââââââââââââââââââââââââââââââäèëïû÷Ÿ±±±°÷÷÷°Ûôž©¼ø´æù¸¯¬¨Á’€ÃÅÅÅÅÍÐÐÏÏÏÏÉÒÔÕÌ„‚‰ˆˆˆ‰Œ‹¤¢¢•••ÎŒ¡‰ˆ‚‡†ƒ…ËšØÖÕÊÓ¥ÏÇ€ÃÅ€’ÂÁÀ¿«¯¸æ´È¦º­Þ²úþîìêéèçåäååå½ççççèêëíîÿú°Üô­œ®øµù¸§¯«¾¨¿¨¨¨¨¨¾««¬¯«¬¯¸·æý¶¦ºœô²Ÿúüïíëéç½½çééèåãââãâãäçëíìé½åääãââââââââââââââââââââââââââââââââââââââââââã½èëîþûúú÷Ÿ÷÷ŸŸ²ß›®Èñµù¯«¿Â’ÃÀÃÅÆÅÅÍÉÉɥѥÐÑÔÕšƒŠ‰¡ŒŒŒŒŒ‹Î¤¤Î¤¢ÎŒˆ‚ˆ‚‡††„ áááášÖÊÔÓ¥ÏÇÆÆÆÃÃ’ŽŽÂ¿¾¬·ùµø®­ôÝ°úþîìëèåãããåçéçååå½çéêìÿ÷²Þ­›ž®Èñ港¬¾¨ÀÀ¿ÀÁÁ¿¨¿¿¨ÀÀ¿¨¨¾§æø®œßܲ²°úüïíëêêëëêèåããäåååäå½½äãâââââââââââââââââââââââââââââââââââââââââââââââå½èëîÿûþþüûú°²Üôœ»ªø´ù·¯¾ÁŽ€ÅÆÃÃÆÇÍÏÉÑÑÒÒÓÑ¥ÓÊ×á„Š‰ŒŒŒÎ¤Î¤¤¤ÎΕ¢¤Œ‰‚Š‡‘‘††„ÙÙƒƒ áØÖÊ™ÑÉÉÐÏÍÇÇÇÍÇÅÀ’ŽÀ¿«§ùæø¦­ôÞܲ÷þîëè½ãâã½éé½åäãä½çèëÿ°Ýß­œž»ªøæ·¬¾¾¨ÀÀÁÂŽÁÀÁÂŽŽÂÂÁÀ¾¸´È»ž¹ßÞÝܱ÷ûÿîíííìëé½äää½åäãâââââââââââââââââââââââââââââââââââââââââââââââââââãå½éíÿüüÿïÿûŸ²Ýß›»ª¶æ·¯«¿Ž’ÅÇÍÆÆÅÆÏÏÐÉÑÓÔÔÓÑÑÔ×̃‘‚¡ÎÎΤ¢•¤¤Î‹Î•¢ÎŒˆŠ‡‘‘‘‡‡‘‘††„Ù ÌØ×ÕÔÒÒÑÉÏÏÐÐÐÏÇÆÅ€ŽÂÀ¾¯·µ¶¦º›¹ôôÞ²÷þîê½ãâã½çç½äãââäå½êÿ÷ÛÞ¹›œº©ª¶ñ´¸¯¾¿ÂŽŽŽ’’’ÂÀ¿¬ùýȦ©ž­ôÞÜÛ±Ÿúûþïîîíé½ääåäâââââââââââââââââââââââââââââââââââââââââââââââââââââä½çëîþúúüþûŸ±ÛÜÞô›»ªøµù¯¾ÀŽ€ÆÇÍÍÍÆÅÆÇÍÐ¥ÑÔ™ÓѥљØá„Š‰‹•¤‹Î¤ÎŒ¡¡¡‹¤•Î¡‰‚ŠŠ‘‘‡‚‚ŠŠŠ‡„Ùƒ…áËØÕÔÓÑÉÏÐ¥ÉÉÐÏÍÅ€’ŽÀ¾¬·µ¶®»ºžœ­ßÛŸüîèäââãäåç½åäâââãåêÿ÷²Ýô­›ž¦ªÈøñµù¬ÀŽ’€€’’€ÃÃÀŽÂ¨¯ù´ø¼»º›ßßßÞÝÛ²÷ûûûþíèäå½ãâââââââââââââââââââââââââââââââââââââââââââââââââââââä½êíïüúŸ÷úŸ±²ÛÜÞô­ž®¶´ù¯¾ÀŽÇÍÐÉ¥ÏÆÇÇÉÒÒÓÊÕÔÒ¥ÑÕš †‚¡Î¤‹Œ‹‹Œ¡‹Î‹Œ‚‡‡‡‡‚‰‰‰‰Š†„ÙÙÙ ÌØÕÔÑÐÏÉ¥¥¥¥ÉÏÆÅÀ¾¬·µýø¼®¦œ¹ÝŸüìçãââââãåååãââãäåéîû°ÛÝß¹›žº»®¼¶ý渨ÂÂŽ’€Ã€€€ÃÃÀÁ¾¯·µøª»›­­¹ôßÞÛ°°°ûïé½½åãâââââââââââââââââââââââââââââââââââââââââââââââââââââäèëíïþú°°±ÛÜÜÝÝô­œ®¶´ù§«¿ŽÃÇÐÑÒÑÐÏÐÉÒÔ™Õ××ÊÔÓÔÕËÙ‡ˆŒ‹‹Œ¡¡‰¡¡¡‰ˆˆ‡‘‘‡ˆ¡¡ŒŒŒŒ¡‚‘„†‘Š† Ì×Ô¥ÐÐÉ¥¥¥Ñ¥ÉÐÍÅÀ¨«¸ùæµýñ¶®º›Þ°þëçäãâââäåäääãäå½èëïú±ÛÜÞô­žº©®È¶¶ýù¾ÁÁÁ€À€€ÃÅÆÆÃÂÀ¾§ý¶ªž›­­››­ßÜÛ²úÿëèç½äâââââââââââââââââââââââââââââââââââââââââââââââââââââåèëíïüŸÛÛÜÝÝÝÝß¹œº©ª¶´ù¸¬¿ŽÃÍÑÔÔÓÑ¥¥ÒÓ™ÕÖØš×Õ™Ê×Ì„ŠˆŒ‹Œ¡¡‰‰¡¡¡ˆŠ‡‡††‘Š‰ŒŒ¡¡¡¡‰Š†„„‡Š† áØ™ÑÉÏÐɥѥÉÉÐÇÅÀ¨«¯ùùæµ´ñªžô²üìèåääãä½ççè½åçêëïþúŸ²ÜÞô­ž©®¼È¶ý¯¨ÀÀÁÂ’Ã’’€’€€Ã€ŽÀ¨¯ù´ø¼¦ž­¹­œ›¹ÞÞÞݱúîêè½äãâââââââââââââââââââââââââââââââââââââââââââââââââââä½éëíÿû±ÝÝßÞÜÝÞßô›ž»¼øµ¸¯«¿Â€ÇÑÊÕ™ÔÒÒÓÓÓÔÕ×Ø×ÕÊÖØ…„Š‰¡‹‹ŒŒŒ¡¡¡¡ˆ‡‘†„„„†‡‚‚‚‡‡‘†Ù á…Ù„ ËØÊÓÒÉÏÏÉÉÐÍÆÆÆÅÿ¾¬¸ùµýøÈ®©¹Ü÷þìèç½½½çèééèèëïü÷°±²Üß¹­œº©»¦ª¼¼Èñµ¸«¿¿ÀÁŽ’’’ŽŽŽÁ¿«¸ýȪ¦©›­œœ­¹ôôÞÛ÷þîëèåãâââââââââââââââââââââââââââââââââââââââââââââââââââåçéëîü÷Ûô¹ôÞÜÜÝÝß¹œªø´ù§¬¨ÀŽÃÏÓÖÕÊ™ÔÓÓÒÒ™Õ××ÖÕÕ×Ë…„Š‰ŒÎ¤Î‹‹Î‹ŒŒŒ¡¡ˆŠ‘„ÙƒÙÙ„†††„ƒƒ…ÌšØØËášÖ™ÒÑÑÐÍÏÏÏÏÆÃÃÀÁ¿¾¬·æµýø¶È¦ž¹Ý²ŸþíêëêéëììëêëîûŸÛÞßÞÞô­œº¦ª¼ª®®¼Èñ§¬«¨ÀÁŽŽŽÂŽŽÂÂÁ¾§ùµñȪª®»œžž­ôßݱ÷üïíé½ãââââââââââââââââââââââââââââââââââââââââââââââââââäèéëíþú°ßœ›­ßÝÝÜÛݹº®øµù¯¾¨¨ÀŽÅ¥™×ÖÕÕÊÔÓÓÔÊÖ×××ÖÖØÌ Ù‘‚¡Î¤Î‹Î΋‹Œ¡‰‚Š‘„ƒ  ƒƒ … áááÌš×ÕÊÖ×Õ™ÒÉÉÉÏÍÇÇÇÇÃ’ŽÂÂÂÁÀ¾§æñø¶ÈȪ©ºž­ôݲ÷þïîíìîïîííîü÷²ß¹­­­­œ»ª¶¶Èª®ª¼øµù¸¯¨ÀÀÁÂŽÂÀ¿ÀÁÁÀ¨¯ùæý¶¼Èȼ®©º›ôßݲ÷üïìéäââââââââââââââââââââââââââââââââââââââââââââââââââãçëëíÿú±Þœºœ­ôßÝÜÝ­©È´ù§¨ÀÀÀŽÃÍÒÊØ×ÖÖÖÊ™™™Õ×ØššØšÌ…ƒ„‘‚¡‹¤ÎΤ¤Î‹Œ¡‰‰ˆ‚‘Ù áááÌšššØššØÖ™ÓÔ™™ÔÒÉÏÏÐÏÇÆÅÅ’ÂÀ¨¿ÀÁÁ¾·ýø¶Èȼ¦ºœ¹ÞܱŸûþïîîïÿþÿþûŸÛßô­›žº©©»ªÈÈȼª®®¼øñ´§«¨¨¾¨À¨«««¾¨«¬¸ùæýø¶Èȼ¼»©©›¹ßݱûïìê½ãââââââââââââââââââââââââââââââââââââââââââââââââââäêîïü÷²Þœº©ºž›­ôÝÞ­©È´æ§¾ÀÁÇÉÓÊ×ÖÖ×ØØ××ØšËá…áÌÌ…ƒ„†‡ˆŒÎ•••¢“¢ÎŒŒˆ‚‡ƒáÌÌÌËšØØ×ÕÊÊ™ÔÓÑÑÑÑ¥ÐÍÇÍÍÅÃ’’’€ŽÀ«¯¬¾¨¿¯´ñøø¶È¦©©ž¹ßÝÛ±÷úþïîÿüûûû÷²Þ¹¹›žº»®¦®¼¶¶¶ÈÈ®¦ª¶¶ñµù§«¬¬¾¿¾¬§§¬¬¬§¸ùæµñ¶¶È¶¶ª®¦¦»ºœ¹ÞÛ°ûîëèäâââââââââââââââââââââââââââââââââââââââââââââââââãåèíü÷°Üôœ»®¦»ºœ¹ßÝ­º¼ý¯¿Ž€ÅÍÉÑÓÊ×ÖÖØËšËÌá… „†ƒ … Ù„‘‡‰‹¤¢“Ú”ö“•ÎŒˆ‡„…ÌÌÌËËšØÖÊÔÓÒ¥¥ÑÉÉÉÐÏÍÇÇÆ€ŽÂŽŽÀ«¯¸¸§¯¬¸æ´ýýýøȦ»»©ž­¹ßݲ°÷ûþÿÿþûú÷±Ý¹››žº©®¼¼¼È¶øñø¶ªªª¼¼¶ñµ¸¯¬¾¾¬§····¸¸·ùææ´´ýñø¶¶ø¶¼¦›Ý²°ûïìêåâââââââââââââââââââââââââââââââââââââââââââââââââãçêíû±Ûß›»®¼¼ª»ž­ÝÜôª´·«ÁÃÇÐ¥ÒÓÔÊ×ÖÕÖؚ̅ƒÙ‘‡Š‘†Ùكن‡ˆŒ•Ú”öööÚÚ¢¤¡Š„ áÌËš××ÖÕ™ÒÑ¥ÉÉÉÐÍÇÇÆÆÆÅÅÃ’ŽÀ¿¿¿¾¬§¸·¸§§·æ´´´´ñ¶ª¦»»œ¹Þܱ÷ûûþÿþû÷°²Þ¹›»®È¶ÈÈÈÈøñø¶¼ªªª¼È¶ñæ·¸§¯¬§¸ùµææµ´µ´´ýøøñ´ñ¶®­Ý±úþîìéäââââââââââââââââââââââââââââââââââââââââââââââââãçìÿú±Üôœ©®®®¼¶È¼ª»º›ÞÜß¼´·«ÂÍ¥ÒÔÓÔÊÖÖÕÖØË̃„‘Šˆˆ‚‡‘†ÙÙ„†Š¤“”ö”Ú”öÚ¢ŒŠ„ƒ áË×Õ™ÔÔÒÉÏÍÍÏÍÇÀÃÃÀ€ÁÁ¨¾¾««¯§§·ù·¸¸ùµµµ´ñ¶¼®¦»ºœ¹ßÜ°ûüþÿþþüú÷±Üß­»ª¼¼®®®ª¼Èȶ¼®ªÈÈȶñ´µæ·§§¸ùæµ´ññýýø¶Èȶ¶¶øñýøÈ®œ¹Ûúÿîìê½ãâââââââââââââââââââââââââââââââââââââââââââââãä½êïû±Ý¹œº®Èª®ªÈÈȪ¦©žßÝôž¦ñ¯À’ÅÏÑÓÓÔÊÖÕÖØššÌƒ†‡‚ˆ‰‚‡‡‡†„„†‘‚Œ•““¢“”””Ú‹ˆ‡†ƒáš×ÊÒÑ¥ÏÆÃÃÀ’’’ÂÀÀ¨«¬§¯¬¬¬§·ææùæ´´´ýøÈ®»©ž­ôßܲ÷üþÿþûûûû÷±Üô›©¦ªª®¦»»¦®®ªªªª¼¶Èȶøñý´µù¸¸¸æµýȪÈȼª®®®ª¼È¶ññ¶ª¦›Üúþÿîíèãââââââââââââââââââââââââââââââââââââââââââââä½çëîü°Ý­º¦È¶È¼È¶È¼¼®»¹ß­®ñ§¾Á€ÇÉÑÒÓ™ÕÊÖØššáƒ†‡Šˆ‰‚ŠŠŠ‘ÙÙ†‘ŠÎ¤••¢ÚÚö”Έ‡ÙáØÕÓÉÐÏÆÃ’ŽŽŽÁÁÂÂŽŽÀ¨«¬§¸·¸§¯¸µµµ´µææµ´´ýøȪ©ºº›ßßÞÜ°ûÿÿþ÷±°÷÷°Ûß¹œ»®®¦»©©©»¦¦®ªÈ¶ÈÈÈȼ¼¶ñµæææµøª»»¦®®®¦¦¦¦®¼¶¶ÈÈȦœÜŸúûþïêåâââââââââââââââââââââââââââââââââââââââââãä½éìïþû°Ý¹º¦®¼È¶¶øøø¼ªª®©º›¹œ©ªñæù§¾ŽÏ¥ÒÓÔ™™ÊÖØÌ…Ù†‘‡‚ˆ‚ŠŠ‚‘„„‘‘‘‚Œ¤¤¤•¢””•¡‰‚„ÌÖÔÐÇÆÅÃ’ŽÁÀ¿¾¾¾¨ÀÁ¿¾§ùæµýýµ·§·µ´ýýñýµææµý¶¼®žžœ¹ôßݲŸþïþú°Û±Ÿ°²Ýô›º©¦®¦»»©©»»»»¦¼Èȼ¼ªª®®¼ø´æµ´µµñ¼»º©¦¦¦»¦»¦ª¼¼ÈñýªÞ±Ÿúüþìçãâââââââââââââââââââââââââââââââââââââââãåèìïü÷±²Ý¹®øøøøñý´ý¶ª®®»©ž›»Èýæ·¯À€ÍÉÑÑÓÔ™Ê×Ì ƒ„†‘‡‚‰ˆ‚ˆˆŠ‘‘‡‘‡‚ˆ¡‹‹¤•¢””¢‹‚„ËÊ¥ÇÅÀ’ŽÀ¨«¯¯§¯¾¨¾¬·µýñøøýæ·¸·ù´ýñøñ´ææñȪ»œ›­ôßܲ°úþþûú°²²²ÛÜÞ¹ž©¦®®®®®®¦¦¦¦¦¦ª¼®¦»»»®ª¼Èñýýñøø¶®œ¹ô­©»¦»¦¼È¼Èøø®Þ±Ÿ÷ûÿëçãââââââââââââââââââââââââââââââââââââäääåèëïüŸ²ÝÞ¹ž»¶æææ´ý´µý¶ª®»ººœžª¶´´µù§¾ŽÇÏÉÒÔ™ÖË…… ƒ†‡ˆ‰‰‰ˆˆ‚‚ŠŠŠˆˆ‰¡ŒÎ•¢ÚÚ¤¡ˆ‡ÙÌ™ÉÍÅÀ’’Ž¿«¯§·ù·§§·µñ¶È¶øñ´æù·ùææ´ýýý´´øÈ®ž›¹ÝÛ°ŸúûûûûúŸ²ÛÝÝß¹›»®ªª¼È¶¶¼ªª¼ªªª®»º©¦®ª¶¶¶¶È¼ªª›ôÝÞ¹œ»¦»¦¼¶ÈÈø¶®ß²°÷üïê½ãâââââââââââââââââââââââââââââââââââäçç½èëîü÷²Þ¹›»¶§§·æææ´ø¼¦©ºººº¦¼ñ´´´æù¬Á’ÅÇÐÒ™ÖØá   ƒ„‡ˆ¡¡¡‰‰‰ˆˆˆ‰ŒÎ•“ÚÚ•¡Š† šÔÉÍÅÀ€’Ž¨¯¸·æµµææµ´øÈÈȶøñýµæ···µýñøýýøȦ©ºž›ßܱ°÷ûþüûúŸ±ÛÞ¹­žžž©¦ªÈøññø¶¶¶Èª®¦»©©º©»®Èȼª¼ª®»›ßÜÜÞ¹›œ»®¼¼È¶¶¶øññ¼©›Ý±úþîéåâââââââââââââââââââââââââââââââââââåéìëëíïþú°Ý¹ž¦¶µ§¾¬¸¸·æ´ýø¼¦»»»»»ª¶ñµµµæù¬¿Â€ÆÉÓÕØÌ…ƒÙ„††‘Š‰¡¡ŒŒ¡¡Œ¡¡¡‰‹¤¢Úö•‡ƒÌ×ÔÉÍÆÅÅ’Á¾¸ùæµµ´ýýýýøȼ¼È¶¶¶¶øýæù¸¸ùæ´ñøýýñ¶ª»ºœ­ßܱ÷ûþÿü÷Ÿ°Ûݹœºººº©»ª¶øñøññ¶È¼ª¦»ºººº©¦ªª®®®»©œôÝÛÛÝßô­»®¼È¶ÈÈøý´ýȦô²úÿìéåãââââââââââââââââââââââââââââââââã½ëíîîîþúŸ°Ûßœ®¶´¬À¨¬¬¯·ææµý¶ª¦®ªªª¶øýæµæ·¬¿Â€Ç¥ÔÖšá „†‘‘‘†‘ˆŒ‹‹‹‹‹ÎÎŒ¡¡¡‰ˆ‹¤“öö¤‰‘ ËÖÓÉÍÆÅ€À«§ùµ´´´ññø¶Èªª¼¼ªª¼¼Èøýæ·ùæ´ñ¶¶ñ´ñȼ¦º›¹ßݲŸûüû÷°°±²Ý¹œºººº»¦¦ª¼Èª¦»©žžž›››žºº›¹Þݲ°°±ÛÝ­º©¦¦®ÈñýñÈ»žß±ûîëé½ãâââââââââââââââââââââââââââââââãåéíîÿÿüŸÛÝßô›º»ª¶ý·¿ŽÁ¿¨¾§ùæý¶¼¼¼¼Èøý´µæ·¸§«À€ÍÑÔÊØÌ…ƒ„††††‘‚¡ŒŒÎ΋‹‹‹‹¡ˆ‚‰‹•“””¤‘ ØÔÉÇÅ€ŽÂÀ¿¨«§´ýýñøȪ¦©©ºº©¦ªÈøøÈȪ¦®¼ñµñȪ»ž¹ôßÝÛ²±°±²ÛÛ²ÛÝô›ºžžžžºººº©¦©ºžžžœ››­ô¹¹­œ›­­›œ›­ôÞÞÞ²Ÿ÷Ÿ°²Þôô›žº¦¼ñýý¶¦žÞ±ûîëêçäâââââââââââââââââââââââââââââââåèëîÿþû°Ý­œœž»®¼øµ§ÂÃ’ŽÂÀ«¸·ý¶¶Èȶñµææ·§¯¯¨ÁÅÏÑÓ™ØÌ Ù„„„„„„‡‚ˆŒÎ‹ŒŒ‹‹¡‰‚‚‚¡Î•“““·ƒØÓÍ€€€ŽÀ¨¨¿¿¾¯´ýýñ¶È®ºžœœ›››œžº©»»©©ºº»¼ýµñÈ®©ž¹ßÞÝÝÝÝÝÝÝÝÜÜÜÝß­œºžœ›œœœžºž›­­­­¹¹¹ôßÞÝÝÝÝÝÝÞßßßÞÝÝܲŸ÷÷÷±²ÛÜß¹œ©®¶ýµ¶»œß²ûîìéçåãâââââââââââââââââââââââââââââ½éëíÿþûŸÛôºº¦®¼¶ý«ŽÃ€Á«§·æñøøøøýµ···¸¯¬¾ÀŽ€ÆÏ¥ÓÊØá „„†„كل†‡ˆŒÎ‹Œ‹ÎŒ‚‡Šˆ¡Î•¢••Î¡ŠƒØÓÆ’ŽÁ¿¾¾¾¨¾¯ùµýñø¶ª»ž›¹ôßßô­›žžžœœžžœž®øý¶ª¦©œôÞÜÛÜÝßßÞÞÞÞÝÝÞß¹›œ¹¹­¹¹­­ôßßßßôôôÞÝÜÛ±°±²±±²²ÛÛÛÜÛ²°÷úú÷ŸŸŸ²ÜÞ¹œº¦È´µ¶¦¹ÛúÿìéçäâââââââââââââââââââââââââââââäèìïïþúŸ²Þ›º©»¦®¼¶ý§¨ÅÆÅÿ«¸´´µµ´æù·¯§§¬¾¨ÁŽÃÆÏÉÒÔÕš Ù†‘†„Ùƒ ƒ„‘‚¡Î‹Œ‹‹Œ‰‡‘‚ˆŒÎ¤¤¤Œ‰ŠƒØÒÅŽÂÀ¨¾¾¨¨¾¯·æ´ø¶¼¦º›ôÞÛ²²ÜÞ¹›­ôßßô¹¹›¦ÈøȪ¦›ôܲ²ÜÞôôßßßÞßßßô¹­œœœžž›­¹ßÞôßßÝÜÝÝÝÞÜÛÛ²±°÷Ÿ°±±±°°°°±±°Ÿúüûú÷÷÷°ÛÜÝß­ž©ªøñ¼©ž¹ÜŸþíêçäââââââââââââââââââââââââââââã½éìïü÷²ÝÝß­ž©¦¼¶ñµ¸¬¿’ÆÇÇÅ€Ž¿«¸¸¸·ùùù·¯«¬¬¿ÁŽ’ÍÉÒÓ™ÊÖË ƒÙÙÙ„‘†„Ù„‡‰¡Œ¡¡ŒŒ¡‰Š‘‘‡‚‰ŒÎ‹Œ‰‚†áÊɎŽ¿¾¾¨¨¬·æ´ñø¼®©ž¹Ü°úüüú°ÛÝÜÛ²ÛÝô¹›ž®¼®©º›ßÜÛÜÝÞßô­­­¹ôôô¹¹¹¹¹­›œœ›¹ßßÞÞÞÜÜÜÛÜܲ±±°ŸúúúŸ±±Ÿ÷úú÷ŸŸŸ÷ûþüüüûú°²ÜÜÝôœ©ª¶øª©­Ý±ûîêèåãââääãââââââââââââââââââââââäçêíÿ÷²Ýôô­››ž©®¶ø´·«ÀÅÍÏÍÇÅÃ’À«¾«¬¯¸¸¸¯¾¨¨¿ŽÃÅÍ¥ÔÊÊÊÖØÌ…   ƒ†Š‡‘†‘‚¡¡¡¡‰‚‘‘‘Š‰¡¡Œ¡ˆ‘ šÔÏÃŽŽŽÁ¿¨¨¨¬ùæ´ý¶ª»¹Ü÷üîííïþú°Ÿ÷Ÿ°²Üß¹›»ª»ºœ¹ßÞÝÝÞÝÞ¹›œ›­ôßôôÞÝÜÝß¹­­­­ßÝÝÜÛÜÛÛ²²°Ÿ÷÷úúüü÷°÷ûþÿÿþûúúúüÿïïÿþüú±Û²Ûݹ¦Èøªž¹Ý±ûîêçåãäåå½äâââââââââââââââââââââã½èëíþ÷²ß››œœžº¦¼ñ´ù¬ÀÍ¥ÉÏÍÇÆÿ¿¿¨¾«««¾¨ÀÁŽÃÆÍÐ¥ÓÕ××ךÌá… ƒÙ†‡ŠŠŠ‚‚‰¡¡¡‰‰‰ˆˆŠ‡‡‘Šˆ‰‰Œ‹ˆ† ËÔÐ’ŽÂŽŽÁ¿¿¨¬¸ùµø¼®›ÝŸüïíëéëíîþÿïÿüú°Üô­ž©»ºžœ­ôôßÞÝÝÝÞô›ºž›­¹ôÞܲ±²Ýßôô¹¹ÝÛ²±²²²°°Ÿúûú÷úüþüûûþïîììîþüüþïíììîïÿûŸ±²²ÛÝ›©ª¼®©ž¹Þ²úïêèççè½ççäãâãââââââââââââââââââ½éëìïûŸÜ­žž»¼ø´ù¯¿ŽÃÍÑÔÒÉÐÏÇÅ’ÂÁÁÀÀÁÁÁÀÁÂÃÅÍÉÑÒ™ÖØØØšÌáá…ƒÙ†‡ŠŠ‚ˆ‰¡¡¡ˆ‰‰‰ˆŠŠ‡‡‚ˆ‰‹Œ‚† šÔÐÁÂÂÀ¿¾«§ùýÈ®©žôÛúÿîëè½çéêëêêëíîþ°Ýô›žœ­¹ôôßÞÝÞÞß­œž›ôݲ±±±²ÛÜÞßݲŸûüüüüþþÿÿüûüþüþïìììéèèëîïîëèççèëíïþûŸ±²±Ûôœº»©º­ßÛŸûïíììëè½½åãâââââââââââââââââââãåêîÿü÷±Ý­žº©©»ªñµù¯¨ŽÃÍÒ™Õ™Ó¥ÏÇÅ€ŽŽŽÂÁÀÁŽŽ’ÏÑÒÓ™ÊÕÊ™Õ×Ëá… ƒ„†‘‘ŠŠ‚ˆˆˆ‰‰¡¡¡‰‚Š‡‚‚‚ˆ‰‰‡ÙÌեǀÂÁÂÂÂÁÁ¿¾¬¸µÈ»º›ßݱûïìé½äåçééèèèèêîú²ÜÝß¹¹¹ôôßÞÜÜÞôßô¹›žºº»©ž¹ßÝÛ²Ÿ÷Ÿ±ÛÝÛŸüïîîííííìíÿþþþüÿìêêéåäåéëëèåããä½éìîïþ÷±²±°Ý­žôݱŸûþÿÿïíé½½äãââââââââââââââââââã½êïûŸ±Ûôœ©¦ªªª¼ñ測¨ÂÃÇ¥™Ö×ÖÊÒÉÍÅÀÀÂÁÂŽ€ÅÐ¥ÒÓÔÔ™ÓÒÓÊØáƒÙÙÙ„††‡‡‚‚ˆˆ‰¡ŒŒ¡‰‚ŠŠ‚‚ŠŠ‚‚Š„…×ÒÍŽÀÀÁÁ¿¨¬·´ªœßÜÛ°ûîê½åãä½ççååå½èíû°°±ÜÝÝÝÞÞÝÜÛÜô¹­­­œº»®®©ž­ôÝÛ°ûúŸ±²Ÿþïíìëêêêêêìîÿÿüÿìè½ååãâä½ççåãâââä½éíÿü÷Ÿ°ŸŸÜ¹žºœ¹Þܲ÷ûþþÿïìé½åäãããâââââââââââââââäçìþ°Üô›©®¼¶øø¶ñ渫ÀŽ€ÆÐÓÕØÌš×™ÓÉÏÍÆÆÇÏÏÅ’ŽÁÁ€ÇÏ¥¥ÑÑ¥ÉÐ¥Ô×áÙ††„Ù†‘‡Š‚‰¡Œˆ‚Š‡‡‘††††ÙÌ×™¥ÇÃŽÁÁÂÂŽŽÂÁ¿¬ùýªº­Ý²ŸúÿìèäããäååäãâãåçëîüúŸ±²²ÛÜÜÛ²²Ýô­œ©¦®ªª¼¦ºž›ôÜŸüû÷ŸŸûïíìëêéèèéêëíïþüîê½ãããââããããâââââãä½êïüúú÷÷ŸÛß­žœ›¹ÞÝܱŸúüüüïìè½ååäããääããââãââââäåçéìþŸÜ¹©®ª¼øýýý´æ¸«Á€ÅÍ¥™×ჅËØÕÔÒ¥ÉÐÐÑÑÏÂŽ€ÍÉÉÐÏÏÏÐ¥Ô×˃††Ù„‘‡Š‚‰¡¡ŒŒŒ¡ŒŒ‰ˆŠŠ‘†ÙÙƒ á×ÔÑÉÍÅ’ÂÂÂÂÂÂÂÂÀ¬ñ®žô²÷ûþíé½ãââãããããããåçèêíÿþ÷°Ÿ÷°±±±²Ý¹›©©®ÈÈÈȼ»ºœôÜŸüþþÿïíëëììëêéêêêêëîþüíéäââââââââââââââââã½êîþþüüû°ÜßôôßÝÛ²²²²Ÿûûüÿïìêè½äãäåååäããääää½éìíÿú²Ý¹ž»ªÈȶñ´µù§¾Á’ÆÍÐÒÖáÙ‘†„ƒášÖÊÔÓÒÓÒÉÆ€€ÃÅÅÍÐÐÏÍÇÍÏÉÒ™×…„Ùƒ„‘‘‡‚‰¡¡‹‹Î‹¡‰‰‰ˆ‚†Ùƒ áÌ×™ÒÑÐÆ€ÂÁ¿¨¨¨¿¨§µÈ›Þ°üïíêçäâââââââãäââåççèéìïÿÿÿþüû÷±Ýô›œž»¼ñø¶È¼¦©ºœôÛ÷ÿïîìëêéëëëêêêëëëëíîÿÿîéäâââââââââââââââââãåéìíîïþ÷±²ÛÛÛ²±°±²Û±Ÿ÷úþÿîìé½åå½½çç½å½çèèêìïþú°Ûß­»ª¶ýñøýµæù¸¾Â€ÆÐÉ¥Ò™ËÙ‡‰‰Š„ƒ…š×ÖʙԥÍÆÅÆÆÇÍÆÅÇÇÍÍÍÇÇÏÉ¥ÓÖÌ ƒ„‘Š‡‡ŠˆŒÎ¤¤ÎŒ¡¡¡¡ˆ‘Ù…áÌš×ÊÔÓ¥ÍÅÃŽÀ¾««¬«¬·´®žôÛúïìé½äââââââââããâãääãäåçéêëìíîüŸÛÞô­›œº¦¶´ñ¶Èª»œß±ûïìéçç½çèéèççèéëìîïÿÿþîéåââââââââââââââââââãåèéëíïüúŸ°ŸŸŸŸ÷°²ÛÛ²±Ÿûÿïîëéèç½çéêêêëìíïÿüû÷±Üß›º®¼¶ýµ´ýý´æ·¯À’Í¥Ò™ÕØ ‡¡••¤Œ‰Š†…ËØ×ÕÔÑÉÏÏÍÍÏÏÍÇÆÅÆÍÍÍÍÍÏÉÓÕš…Ù‘ŠˆŠ‡Š‚¡‹¤¤ÎÎÎÎÎ΋‹ŠÙ…áËØÖÊÔÓ¥ÐÇÁ¨¬¯¯¯§µÈ›ÝŸÿìé½äãâââââââââââââââââãääåçéìþ°Üß¹›œžº®øæýø¼®©ž›Þ±úïêç½äå½çèèçççéìíîÿþþÿíéåâââââââââââââââââââãäçêìîÿþûúúûûûú÷°ÛÜÛ²°ûÿÿîìëêéçèëìíîîîÿûŸ°°²Üô›¦Èøñµæ´ýý´¸¾Ž€ÅÏÑ™ÖØᆉ¤ÚÚ“•‹‡„ …ÌØÊ™ÒÑ¥ÐÐÉÉÉÐÍÇÏÐÐÐÏÍÐÑÔÕš…„‘Š‚‚‚‚ˆ‹¤¢•¤¤Î‹‹‹‹Œ‰ŠÙáËØÖÕ™ÓÑ¥ÐÇ’Á¾§§¸¸ø¦º­Üúîëéåãââââââââââââââââââââââäçëþ°Þ¹›œžªñµñ¼®»ºœ¹Ü±úÿíê½ãäåçéèç½çêííîîïïïíêçäâââââââââââââââââââã½éëííîÿüþþþüû÷°²±ŸŸúþïîíììììééêìîïïÿü÷±²²Üß­ž®Èñ´ææµµµæ·¬¿Ž’ÃÇÑÔÊØ…†ˆŒ¤ÎÎŒŒˆ‡†Ùƒ Ë×ÊÔ™™ÒÑÑÒÒÒÑÒÒÑÉÐÐÉÒ™ÖØÌ ƒ„‘Š‚ˆˆ‰¡Î¤¤Î‹Œ‰ˆŠ‡‘†ƒáš×ÊÓÒÑÉÏÏÍÆÀ¬·µµñ®ž¹Ü÷üþíçäââââââââââââââââââââââåéíü±Þ¹­›œ©¼´ùæø¼¦»ºœôݲŸûïë½ãâäçèèçççëîîííîïïíëé½äâââââââââââââââââââäèêëìîÿþþüþÿþû°±÷úüþïïîîîíîîìëëíïÿþü÷±ÛÜÝß­ž¦¼øñ´ææùù·¯¾ÁŽÃÇÐљؠ‘‚Œ‰‰‰‚‡‡†„ƒáØÖÖ××Ê™™™™™ÕÖÕÔÑÉÑÒÊØËá ƒÙ„‡ˆ‰‰¡‹••¤‹Œ‰ˆ‡† á…ááËÖÔÑÐÐÐÍÆÇÆÅÅÀ¯ùµñ¶¼©›ßÛ°°÷ÿê½ãââââââââââââââââââââãçëÿ÷Ûß¹­œžº»¶æù´¶ª¦»ž¹Ý±Ÿûïê½ããä½ç½½çéìîïïîíííìëéèåãââââãäãäääããââââââã½èéëïþüüûüüþü÷Ÿ÷ûþþþÿïïîîÿþïííîïþûŸ±ÛÛÛÜß›»¼ø´´´µæù·§¾ÀÂŽ€ÆÏ¥Ôؠن‡‚Š‡‡Š‡‡ŠŠ‘„ ÌËšÌáËš×ÖÖךË×ÊÓÒÒÔÖËá ƒ„††‚¡ŒÎ••¤Œ‚‘Ù…šØØšš×ÔÉÍÆÅÅÅÅè¯ñȪ¦›ßÝÝܲûì½ãââââââââââââââââââââã½ëþŸÝ¹œ©»ªñ·µ¶¼®»ºœôÛŸúþíé½ääääåå½èêìíïÿïîííìëëêçåãââãåççççç½åãâââââãå½çëïüüûúúüüûúŸ÷üïïïïîîïïÿÿïïîîÿûŸ²²Û²²Üßœ©®¶ýµµµµæ·¯¨ÂŽ’ÃÇ¥™š… Ù†‘‘†‘‡‡Šˆ‚‡„Ùƒ     ÌšËÌ… ÌØÕ™™ÖË ƒƒÙ‘‘‡‰Œ¡¡Œ‹¤¤Î¡ˆ‘ƒáØÕ™ÊÕÖ™¥Ç€€ÃÃÃÃÀ¾§æø¼®©º›ô¹ßÞÛúí½ãââââââââââââââââââââã½ëü±Þ­»¦¦È´¸ñ¼¦ºœ¹Ý±ûïëèåãâââãååäå½çêíÿþþÿÿïïïîéåããå½èéèéêëëé½äãââââãåèìïþüúŸ÷ú÷÷ŸŸ÷üïììííìíîîíììíïü÷°²²²²ÜÝÞ›®Èøýµææù¸¬¨ÁÁÁŽ’ÃÆÉ™×Ì ††‘‘‡‡ŠŠŠ‰¡‰Š‡‡„Ù  ƒÙ áჄ†ƒ…ËšËá „ÙÙ†‡‡‚¡‹¡‰ˆ‰¡ŒŒ¡ˆ‡ƒËÖ™ÔÓÒÑÑÉÍ’ŽÁÁŽÂÂÁ¿¾¬·µñ¼¦­¹ô¹ßÛ÷ÿèäããââââââââââââââââââãçìû°Ýô›º©»¦ø測¸´¼©œôݲŸþìèåãââââãäãââãåèëïþüüüüüüþìèåä½éêéêìîÿïìéçåãâââãåéìïÿû÷°ŸŸ°°°Ÿúüïììëêêìëêééêíþû÷°±±²ÛÝÝß›º¦ª¶ýæù¸¯¾¿ÀÁÁÁ’ÃÅÇ¥™×̃††‘‡Š‡‡‡‚¡‹ˆ‰‚‡†ÙÙ„„كن‘‡†Ùƒ ƒÙ„‘††‘Š‚‰¡‹¡‰ˆˆ‰ˆŠ‘…×™ÒÑÉÍÆÆÅÃÂÀ¿¨¿À¨¨¾¬¯·æý¶¼»ººœ­­­ôÞ±üìççåââââââââââââââââââã½ìüŸÛݹž»®ø槫·ý®¹Ý±÷üïëçäâââââãäãââãäåéìîïþûûúúûïìè½çèêìîïüúþîëèåãâãä½çêíïüŸ±²²Û±Ÿ÷úüÿíëëêèçç½çèéêíÿþû÷°°±ÛÝß¹›žº¦Èý槬¨¿ÀÂŽÂÂÂŽ’ÅÇÉÒÖá Ù„‡‡ŠŠŠ‚‹‹¡¡¡ˆ‡‘‘†††‘‡Š‚ˆŠ‡‡‡‡‡ŠŠ‡‡‘‡Š‚‰¡‰‰‰‰¡¡‰Š„ÌÕÒÐÍÆÃ’ÂÀ¨¾«¯¯¬«««¯§·´ø¼ª©œ›››­Ý±üìé½ãââââââââââââââââââäéïû±Ý¹ž»ªø¯«ùø¦ô²÷þïíé½ãâââââãããââââãçëííþú÷úúúþîêççéëîÿüŸ°÷þîëè½½çèèéìîüŸÛÝÝÝݱúûüþïíëêéç½ää½éêìîÿüûúŸŸ±ÛÝßô¹­ž©¼ý§«¿ÀÂŽÂÁÁŽ’ÃÅÇÉÓ×Ì…ƒ†ŠŠŠŠ‚‰¡‹Î‹‹Î‹ˆŠ‘‘‘Š‚ˆ‰¡¡¡¡‰‰ˆˆ‚Š‡‡Šˆ‰‰‰‰ˆˆ‰‰‚†…×™ÑÏÆÃ’Ž¿¾¬¸¸¸·ù·§§§¸¸µñ¶¼®¦»©ºœ›­››ôÜ÷ïê½ãââââââââââââââââââãçíþŸÝ­»ªñ槯µÈ©œß²úÿìè½åãââââââââââââäçêëìïüüüûþíêç½çéìïÿü÷°Ÿúþíëëëííìíîþ÷²ÝÞÞÝÝ°ûþïîíêè½ääãâã½éêìíþú÷÷Ÿ°²ÛÜÝÞô›žªø´·¯¾¿ÁÁÂŽ’€ÃÃÅÏÓ×Ì…Ù‘‚‚ŠŠ‚ˆ¡ŒÎÎÎ΋¡ˆ‘Ù„†‘‡‚‰¡Œ‹Î‹ŒŒŒ‰‚ŠŠˆ‰ˆ‚‚‚‚Š‡‘„á×ÔÑÏÆ€ÂÀ¨¬·ùùùæµææùùùæý¶Èª®¦©ºž­¹­›­ß²ûíèåããââââââââââââââââââäéï÷Ü­žº©®¶µ¸¸ý®ºœôÛ÷ïêçååäâââââââââââãäçéêëíïïïïíé½½åçêíÿüû÷±±Ÿúüþÿþüþþüü÷°ÝôôÞÞÜŸüïìëëêé½ãâââãçéêëîþú÷Ÿ°²ÜÜÜÛÞ¹œžº®¶ýæ·¯¾¿ÀŽ’€€€ÃÀÃÏÔ×Ì…Ù‡‰‰ˆ‚Šˆ‹•••¤‹¡ˆ†ƒÙ„„‡‚‹¤¢Ú“•¤ÎŒ¡‰‚‚‰‰ˆ‚ˆ‚‡†ƒ ÌÖÓÉÇ’ŽÁ¿¨«¯·ææ´ýñøýµæµýø¼¼®®»º›ô¹››¹Þ±þìè½åäââââââââââââââââââãçíûÛ­œº»È´ø¦›Þ±ûïëè½äâââââââââââãããäåçéëìëììêåãããäçëÿþü÷±°±±±±±²²°Ÿ÷÷Ÿ²ß¹¹¹ßÜ°ûïëëëëëèäâââäçééëîÿüû÷±ÛÜÜÛÜÞô›ž¦Èñý渫¿Á’€ÃÃÅÃÍÒÕÌ „Š‰ˆŠŠˆŒ•“•¤‹¡ˆŠ„  ƒ„‡ˆ‹•“öò”“•¤‹¡‰‰¡¡‚‘ƒÌØÕÓÉÇÃŽÁÀ¿¨«¯¸ùææ´ý¶È¶øø¶¼ª®®¦¦ºº­ô­­­¹Þ±üîêèçåâââââââââââââââââââåêÿ±ß¹›ž©¼ñµµ¶»­Ý°þíëêçãââââââââââãäããããåèééééèçäâââã½ëïÿü÷±±²ÛÞßôôôÞÝÛ±²Üß¹­­ôݱûïëêêìíê½ãâã½èéêìïþüú°±²Û²ÛÜÞô­ž®¶¶øµ·¯¨ÁŽ€€€ÃÀÃÍÑÕÌ Ù‡ˆ‰ˆ‚‚Γ”¢ÎŒ‰‚‘Ù… Ù„‡¤“öòöö”¢ÎŒŒŒŒŒŒ¡ŒŒŒ‚‡†…×™ÒÐÆŽÀ¿¨¾¾¬§ùùùµ´ñ¶ªªª®®»©©©»»©ž­¹ôô¹ôݱûîìëé½ãââââââââââââââââââãèîŸÝÞ¹œ®ÈýýªœôÝ°þíëé½ãâââââââââââãããââä½ääååäåäãââäéíÿþûŸÛ²²Ýßô­­­¹ôÝÛÜÝß¹¹¹ßÝ°üïìêêìîìèäâã½èéëîïþú°±°Ÿ°±²ÛÞ¹ž®¶ñøñ´¸¯«¿ÁÂÁÂ’’ÃÍÒÕË…Ù†Šˆ‰ˆ‰‹¢“ڕ΋Œ‰‡„ƒÙÙÙ‘‰Œ•ÚÚ““Ú•ÎÎÎ΋Œ¡¡Œ¡Š†„ÙËÊÓÉÆ€ŽÁÀ¨¯§§§·ùùùµ´ñ¼¦¦®¦©©›¹ßÝÝÞÞݱ÷üîíëèåãââââââââââââââââââ½ëþŸÜß­žº©®øñªœôÜŸÿìëéçäââââââââââãäääââããââââââããâãçëïþüû±ÜÜÜÞô­œžœ›ßÞßô¹¹¹¹ôÞ±ûïíììîîìèåâãåçêíïþú°²²Ÿ÷÷°²Ûݹž©ªø´ýñ´·¸¯¾¨¨¾¨ÁŽÃÏÓÕØáÙ†‚‰Œ¤¢““•¤¤Î‡†††††‡‰¡¤“¢•¢¢••¢“•Î‹¡¡¡‚‘ƒƒá×Ô¥ÇÃŽÀ¿¾¯ùæù¸ùùæµ´ø®»»¦©º©œ¹ßÜÜÜÛ²²°÷üïîëè½ääãâââââââââââââââãèîü°Üô›žº»ÈȦº¹Ü°ûÿïíëèåãâââââââââãääãâââââââââââãã½éîÿüüú±ÜÜÝß­œ©©›ôô­›­›­¹ôÞ²÷ÿíìîïîëèåää½éìîþú°°±°ŸŸ°°²Üß­©ªñµýý´·§««¬¬¬«¿ÁÏÒ™×Ì †ˆ¡‹Î•¢“““¢¢••¡Š‡‘‡ŠŠ‚‰Œ¤¢•¤¤¤•Úöö¢‹‰ˆ‚Š‡„ …ËÕÒÏÁ¿«§´´µµùæµµ´¶®»©º©©©œ¹ÞÛ²±°°°÷ûþîìëéèèçåãââââââââââââââäêïú±Ýô›œžº©®»º­Þ²÷þÿïíëé½ãâââââââââãäãââââââââââââäåèêîÿüûú±ÛÛÝß­žº©»º›­­œœœ›­¹ôÞ²÷ÿìíïîíê½å½½çêíïüŸ±°ŸŸ°±±±ÛÞ¹žº»ªøýý´æ·¸§¬«¬¯¬¾¿Â€ÆÐÒÊØÌ †‰Œ‹¢Ú“¢“Ú“¢•¤¡‚‡‡‚‚ˆˆ¡Î•¢•¤¤•“ò£ò¢Œ‰‚Š‡†ƒáË×ԥǒÂÀ¾¯ùýøøøñ´æ´´µµñÈ®»ººžœºž­ßݲ±°Ÿ÷úûüÿîëêéèéè½äââââââââââââââåëÿ÷±ÛÞô›œž›ßÜ°üïîìêè½åãââââââââââââââââââââââââãåçéëíïþþüú÷Ÿ°²Ý¹œžœ›¹¹­­¹ôßÞݲŸüìèéëêêèççç½½éëîþ÷°Ÿ÷÷÷ŸŸ±Ýô›žº©¦¼øøýæ·ùù§«««¨ÀŽÃÅÏ¥Ô՚ბ‰ŒÎ••“ÚÚ¢Î΋Š‡‡Š‚‰Œ¤¢“Ú“ÚÚÚö—ò”¢ÎŒŒ‰‚‘„…ØÊÓÉÍÀ¾¯·´È¼ª®ª¼È¶ý´´ñÈ®©º›¹­žžžœ›¹ßÝÛ²²±Ÿûþþÿîìëé½åååääââââââââââââââåéîûŸ²²ÜÝß¹­­ß²ŸüïîëçåãâââââââââââââââââââââââââââäçéêëëíïïïþþüúŸ²Ýßô¹­¹ßôôßÞÞÝܲ°úïê½½çèçèèèéèçéêëîû÷Ÿ÷úûûú±Ýô­ž®¼¶¶ñæùùù§¬¾ÀÂÅÍÐÑÓ™Öšá„‚¡‹¤•“ÚÚ¤‹Œ¡ˆŠ‡‘‡ˆŒ¤¢”ööòòòò££öÚ¢Î΋¡‚‡†…×ÒЃ¿¬·µøª¦»©»»»ª¶ñ´ñ¶¦œ¹ß¹››­¹ßÝÜÜÛ²±°÷üÿïîíìêèåãââãäââââââââââââââåéíþúŸŸ°±ÛÝÞݲ÷þîìêçãâââââââââââââââââââââââââââãåçèéëéèêëëíîîÿüû÷°ÛÜÝÝÝÝÝÜÛÛÛ²°÷üîêçåå½½çéêëìéççèèëïüûûüþþû°ÝÞ¹›©®ª¼È¶´æù¸¬¿ÃÇÏÉÑÓÔÊ×˃Š¡‹‹Î‹Œ‹¤¢Ú¤¡‰‚Š‡†‚¡¤Úö—£––òÚ•Î΋‰‚Š†áÕÉÅ€Á¿«¸µø¼¦ºº¦Èñýñ¼žœ­ôßßßÞÞÝÝÜÛÛ²±°úüþÿÿïìêèåâââââãâââââââââââââãäèìïþûûûû÷÷÷ŸŸüîëé½äâââââââââââââââââââââââââââãä½ç½èêéèèèéêìîïþüüû÷Ÿ°±±²²°°²ÜÛ°ûïëçåååå½çéìîïìèèçèêíÿÿÿÿÿþú±ÝÞô­ž¦®¼¼Èñµæ·§«ÁÃÇÐ¥ÑÓ™ÊÕØᆈ΢•¤ŒŒ¢“¤Œˆ‚‚‡‘‰‹•”ò£–ijÄÄÄ–—”•¤¤ŒˆŠ‡†Ì™ÏÃÁ¿¾§æñ¼¦ºžœœœœœªøýø®ºœ­ôÞÞÝÜÜÝÜÜÛÛÛ²°÷üüþþþïíëçäâââââãâââââââââââââãåéëìîïÿÿÿþþüûûïìêèäââââââââââââââââââââââââââââââããã½èèèçççèëíîïïÿþüüûûû÷°Ÿ°ÛÞܱúÿìé½äåçççéëîïìêéèéêìîîïïÿþú°ÜÞÞÞô›¦¦®¼¶ý§¨ŽÃÇÏ¥ÑÒ™Õך…†ˆÎ“¢•ÎŒ¡‹•¢¤‹‰ˆˆ‡‡‰Œ¤¢”—£–––––££—ö¢ÎŒˆŠ‘†ƒØÓÇ€Á¾¯·´¶ª»›­­ôßßôœ»¼¶ª©º›¹¹¹ßÞÞÞÞÞÝÝÛ±÷ûûûüþþÿíêçåâââââãââââââãääããââãçëììììíîïþüûúþíêè½ãââââââââââââââââââââââââââââââââãåçèççç½çêíîííîííîÿÿÿü÷Ÿ°ÛÞÝÛ÷þîëçå½èèèêíÿÿîëééèèêëííîîÿûŸ²ÜÜÝÞ¹œž¦ªø槿ÃÅÍÉÑÔÕך̃‡¤““¢¢¤ÎΕ¢¤ÎŒ‰ˆ‚‚ŒÎ•Ú—£––––£ò—ò“‹‰‡‘„ÙáÕÑƾ¸ùý¼¦©­ôôôßÞÝß›º¦ª¦ºžœœ›¹ßßßôôßÞܱ÷ûúúûûüïìè½äâââââãââââãä½è½åääããèíîìêéêëíïÿüüÿëçåãââââââââââââââââââââââââââââââââââä½½åååå½èëëëêêèèéëìîÿûŸ±ÜÞݲ÷üïìè½çêëìïþüüïëéè½çèéëììíïþúŸ±²²ÜÞßô­­œ®¶µ§À’Í¥ÔÕØÌ ƒ†‚Œ•ÚÚ”ÚÚ¢ÎΤ¤¤¤¤Î‹¡¡ŒŒŒÎ“ö£ÄÄ£—öÚ””¤Š††Ù áÖÑŬ·µ¶»œ­¹ôßßßßÝÞô­»»©ºžœ¹ßßôßÞÞßݲŸ÷÷÷÷Ÿúþìçäâââââä½åäãããäçêéè½åä½êííëèççèëíîïïîé½ãââââââââââââââââââââââââââââââââââãå½åãäåå½èêêèèé½å½çêìíþ÷²Ýßܱ÷ûïëè½èêìïüú÷÷þìêéèèèèêëíîïÿû÷ŸŸ±²ÛÛÝßô›©¼´¯ÀÂ’ÅÏÒÕØჄ‘‚‰‹“”öòòö“¤Î¤•¢ÚÚ¢•ÎŒŒ¡ŒÎ¢”£Ä£ò”ÚÚÚΉ‡„Ùƒƒ…֥ÿ¯ý¼©ž­ôßßÞÝÞÞÝÜÝß­º©ºžœ›¹ôßÝÜÝÞÛ±Ÿ÷úúŸ±÷ÿêåãââââãåççåäääåçéééçççéìííëéç½½éëëëìëèåãâââââââââââââââââââââââââââââââââââã½ååäãäçêìëêêéç½äåéìîþ÷±ÛÛŸúüÿìèåãäçêíÿûúúþîíììëééëíïþÿÿþûúŸŸ°±ÛÞô¹œžÈæ¬ÀŽÃÇÐÒÊ×Ì „‡ˆ¡¤ÚòòòöÚ•¤Î¤•“ÚÚ•ÎŒ¡¡ŒŒ‹•”ò££—òò”Úöö¤‰‘Ùƒƒƒ…ÕÉ€¨§ñ¼®©ž¹ßÝÛÛÜÜÛÜÞßßß¹›œœ›­­›¹ôßݲ±ÛܲŸúûüû÷÷þîê½åäääääååãââããäåå½åå½çéëìêéè½äåçéêêêé½äââââââââââââââââââââââââââââââââââââãåååäãåèìîíìëéçåãåèìîþúŸ±°úÿïíéåãâã½êíÿüûúüÿïÿïîìëìïûúüþÿÿüûúŸ±²Ýô›œž¶ù«ÁÍÉÒ™×Ì †Š‰‹¢ö££—ö¢¤‹‹¤•¢““¤‹‰¡¡ŒÎ•Úöòö”öö”ö££¢‘ƒƒÙÙ Ö¥€¿§æýȼ®ž¹Þ²²²²ÛÝÝܲ±ÛÜÞßÞÞßôßÞܱŸŸ°²±÷ûüþüûûþîêèçç½½½åäââââââââãããä½èéééççççåå½èééèåãââââââââââââââââââââââââââââââââââââââãããâãäçëïîìêéè½ää½êíÿüú÷÷þíëêçäââãèìÿþüúŸŸúûüþþïíîü÷Ÿ÷úÿîïÿüú÷°Ûßô­œÈ¬ÀŽ€ÆÐÒ™ØáÙ‡‚‰‹¢ò£—”¢ÎŒ‹¤•¢““•¤¡ŒÎ΢”ò”ÚÚÚ”—–£“¡‘Ù„‘‘„šÒÀ¯ù´¶¼®»œôÛ±±ÛÝÝܲ÷ûúŸ±ÛÜÝÝÝÛ²ŸúúúŸ°÷úûüÿÿþüþïìêèç½½äãâââââââââããää½½½åäää½ççèèç½½äãââââââââââââââââââââââââââââââââââââââââââââä½ëîìêèéçåää½éíÿþþüüîêè½åãââåéíþþüŸ±±°Ÿ÷úûÿïü÷Ÿ±Ÿûïìíîÿþú°ÜÞô›ž»¶æ¯¨ÁÅÏ¥™Ø „‡Š‰‹Ú£–£ö“¤Î¤¤•“Ú““•‹¡ŒÎΕ“ö”Ú“Úö£–£“¡Š†‘ŠŠ†ËÒÅÁ¬·µñȪ®»º­ÜŸ°²ÜÝÛŸþîïþ÷±²²²±°÷üþþüûúúûüþïÿÿþþþïëéç½½½äââââââââââããäåãâââãä½çèèèç½äâââââââââââââââââââââââââââââââââââââââââââââääçëíìêèçåãâã½êíïîíííé½äããâââãçëïþûŸ±²²°÷úúûûú÷÷÷üÿîîîîïþú²ÜÞ­žº¦Èµ¸«¿Â€ÆÉÓÖჄ‘‚‹Ú—Ä–ö“¢¢••¢ÚÚ““¢Î‹Œ‹Î¤¤¢Ú”””””öò—ò•¡‚‘‘‡‘ƒØÒÆŽ«·´¶¼¼®»ºœÝŸŸ°²²Ÿüíêëíþúúûûúüÿîíîÿþüüþþÿÿþüüüüïëêéèèçåãããââââââââââââââããäåçèèèéçåãâââââââââââââââââââââââââââââââââââââââââââââã½éìëéç½äâââåèêëéèéèäâââââââã½êïüû°ÛÞݲ°°±°°°Ÿ÷ûÿïÿïîíîþ÷±ÜÞ­©®¶´·¬¾ÀÏÑÕÌ…ƒ‘ˆ‹Ú—Äò””Ú““Ú””Ú“•¤¤¤¤¤•¢Úö”ööòòò——ò“‹‰ŠŠ‡†ƒØÒǾ¸´¶¶¶ª»œÞ°Ÿ÷°°úîéççéìîïïïîíëêêìîïïÿÿÿþüüüûûüïíìëêééèççåãâââââââââââââäåå½èèèéêè½ãâââââââââââââââââââââââââââââââââââââââââââââãåçéèèçåãââãäå½çç½åãââââââââäçêîÿú²ßôßÝÜÝÝÜÛ±°÷üþüþÿïîïü÷±Üß­©ª¶ñ槫¿Â’ÅÐÊËá †ˆ‹“—ijĖ£òööòòöööÚ““Ú“¢“Ú”öò£££òòööòò“Ρ‰‚‘„ ÖÑÍ€¿§µñøø¼®œßÛ°Ÿ÷÷ÿê½äåçéêëìëëéèèèéêëíííïüûû÷Ÿúüïîìëêééèèèåãââââââââââââäççççèèéêé½ãââââââââââââââââââââââââââââââââââââââââââââââããäåå½åäââãââãåç½ãâââââââââã½éëîþŸÝ­­ôßÞßßÞܲŸúüüûüüüþÿü÷²ß›ž¦È¶ñ測¨ÁÂÃÏ™šá ‘ˆ‹“—Ä£—££ò”öö”“Ú”“““Ú”ö—–£—öÚÚÚöò“Ρ‰Š†ƒÌÊÉƨ¸µø¶È¼¦º›ôܱŸúþë½ããäå½çççèéèçç½å½êëìíÿüû÷ŸŸûþïíëëëëêèéè½ãââââââââââââ彽罽èéêéåâââââââââââââââââââââââââââââââââââââââââââââââââââãäääããããåççèåãâââââââââãçëïü÷±Ý­¹ßÜÛÛÝÝܱ÷ûûûûû÷úûþü°Þ›º©¦®ªÈýæ·§«¿ÂЙšáƒ†ˆ‹“ò££££–£—òòÚ“¢•¤¤••¤¤Î¤¢“ÚÚ¢•¤¤Î¤¢Ú•Œ‰ŠÙ…šÕÑÇ’À§µ¶¼®¦»›ôÞÛ°úþíçãâââââââä½éèèçäãåèêêëíïþûüþÿïíìëêêëéèèçåãââââââââââââãåäãââãäåäââââââââââââââââââââââââââââââââââââââââââââââââââââââãåäääåçééè½ãââââãå½åäåèîþ÷°±Ý¹ôÞÛ±²ÜÜܱ÷÷÷ûú÷ŸŸ÷ûû²¹º¦ª¼ª¼øµù¸¯¾¿ŽÐ™š…„‡ˆ‹“ö———£–£—òöÚ•‹¡¡Œ‹‹ŒŒ‹‹‹¡‰¡Œ¤•Î‚† šÊÒÍþøª¦©ºž­ßܲŸûþîêåâââââââââåçèçåããäçéêêëìïÿîîîíìììëììêèçåäãââââââââââââãäââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââä½½åå½½çèè½ãâââä½êêéççêíþŸ²Ûß¹ôÞܲ²ÛÜÝÛ²±°÷÷Ÿ°ŸŸ÷ŸÝœ»Èøñ¶¶ý¸¬«¨Á’ÅÐÔš ‘‚΢”ò—————£òö¢Î‰‡‡‚‚ˆ‰‰‰‰ˆ‚‡††‘Šˆ‰¡ŒŒˆ‘Ù ØÔÑÐÅ¿§ýªž­ôÞܲŸúþïíéåââââââââââãååäããâäå½ççèêìíììêééêëìíîëçäââââââââââââââââãââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââä½½½½½ååççåãââã½êîíìììíÿú²ÜÞô¹ôßݲ²ÛÝÝÜÜÛ±ŸŸŸŸ°°°Û¹ºªñ´´ýý測¾¨ÀÂÃÇÐÔš ‡ˆ¡¤¢”—££————ò”•¡‘ÙÙ„„†‡Š‡‘Ùƒ …… Ù†‡‚ˆˆ† ÌØÔÉÍ¿¯¶©œßܲ±Ÿúüÿîëèäâââââââââââããããããããäååå½çéêééèçççéìîïëçãââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãäååç½åäå½çåäâââ½êíîÿÿþûŸ±ÛÜÝÞßôßܲ²ÛÜÜÛÛÛ²°Ÿ÷úúŸ²Ýœ»Èýýýýµ·¯¾ÀÁÁÃÆÐÔš ‘Š¡Î•“öò———ò”“•¡‘…ËššššÌ………áÌËËËÌ…ƒ„††„áØÕ™ÉÅ’Ž¨§æñ¦ž¹Ý±Ÿ÷ûïìêèåãâââââââââââââââââââãåç½åääååå½åäãã½éëìèåãâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãäåäåç½åää½çåäââäèëîÿüû÷°²ÛÝÝÞÞßßßܱ±°±±±±²²°÷ûûú°Ü­ºªñýý´æ·¯«¿ÀÁŽ’ÃÆə؅„‡‹•“”öò——ö¢¤ŒŠƒËÖÊÔÓÔÊÖÖ××××Ø×ØšÌÌá…áؙӥǒ¿§æñªº›ßÜ°÷ûÿìêèåãââââââââââââââââââââãåç½äââââããâââãåçéêè½ãââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãäååääãââä½åäãã½ëîüú°²ÜÝÝÞßßßßßßßܲŸúûûûûú÷÷úûû÷±Þœ©Èñµ·¸¯¬¾¨¿Â€ÃÆÏ¥Ô×Ë ‘‰‹¢”òòöòò¢‹¡ˆ‘…×™ÑÉÐÉ¥ÑÒÓÔ™™™™™™™Ô™ÖØ™ÑÐƀ¿¬·´È©›ßܱ÷þíêèåâââââââââââââââââââââââåè½äâââââââââãåçéëêçäââââââââââââââââââââââââââââãâââââââââââââââââââââââââââââââââââââââââââââââââãåçåäããââä½ååäåêîüúŸ²Ýôßß¹¹¹ôôôôôÞ²ŸúûüþþûŸŸ÷ûûŸ²ô¦¼ý·§¯¯¬¾¨¨ŽÃÅÍÐÉÓÊ×á„‚¡•”òòö”“Ή‚‘ šÊÑÐÇÅÆÆÆÍÐÉ¥ÑÒÒÑ¥ÉÐÑÔ™ÒÏ’ŽÁ«¸æñ®œ­ÞÛ°úïëèåãââââââââââââââââââââââã½çåãâââââââââãäçêëêèäââââââââââââââââââââââââââââââãââââããââââââââââââââââââââââââââââââââââââââââââä½åäãããä½ççççéëïþú÷°ÛÞÝÞÝÝßôô­­¹Ý²±±ŸûüûŸ±ŸŸúû÷²ôžªñù¸§¸¸¯«¬¾Á€ÅÍÏÉÑÔÕš…„ˆ‹•ÚÚ¢•¤‡„…šÊÑÐÍÆÃ’’€ÃÆÍÏÏÏÍÇÍÉÒÔÉÅ’ŽÁ¾·µý¶©›¹Þ°ûüÿë½ãâââââââââââââââââââââââââä½åãââââââââââã½ççç½ãâââââââââââââââââââââââââââââããââââãããâââââââââââââââââââââââââââââââââââââââââäå½åãâãåèêêêëìîïþûúŸ²ÜÜÛ²ÛÞß¹œœ­ÞÛÛÛ°÷÷÷²Û±Ÿúú°Ü¹œ®ñ·¸·ùù¸§¯«À’ÅÏÐÐÑÓ՚ბˆ‹•¤Î‹Š„áØÊÑÏÆÅÀÂÀÀÀÂ’ÆÅÅÅÆÏ¥ÒÏÃÀ¾¸µñ¶ªº­Þ²ûïíê½ãââââââââââââââââââââââââââãåäãââââââââââä½½ååäââââââââââââââââââââââââââââââããâãå½½½åäãäå½ååäãâââââââââââââââââââââââââââââââããäåäãããäçëíïþüüüüú÷Ÿ°±±±±²ÜÞ­ž¹ÞÞܱ°Ÿ°ÛÞÝÛ°°ÛÞ­ž©ªý·ùæù·¯¾ÂÃÇÐÉ¥Ò™ÖššÌÙŠ¡¤‹‚‘ÙáØÊÑÍÅÃÁÀ¿¨¾¬¬¨Á€ÅÅÆÏÉÆ€Á¾§æñ¼®©­Ü÷ïëèåãâââââââââââââââââââââââââââãååããããââââââããããääãããâââââââââââââââââââââââââââããâã½èéèç½½½èéèèççåãââããäâââââââââââââââââââââââââââãääãâãåèíÿú°°÷úúú÷ŸŸ°±±±²Ýßœºº›­¹ßÝÛÛÛÞßÞÝÛÜÞô›º¦È´ùùæµæù¸¬¿ÅÍÐ¥ÑÓ™Õ×ÖØ…‘ˆ¡‰‡„ Ë×™ÑÏŀ¨«¯§§§¸¸¯¨ÃÀÃÃÇÇÅ’À¬ùý¶®©ºž¹²üíéåâââââââââââââââââââââââââââââãçåääãââââââãäâââââãããââââââââââââââââââââââââââââãããä½è½å½çåå½çç½çè½½ççç½äãâââââââââââââââââââââââââääããäçêîþû÷°±°°Ÿ÷úú÷Ÿ°²ÛÝß­©žœœ­¹¹¹­­¹ôßÞô­ž®¶´µý´¸¯¨Â€ÆÐÉ¥ÓÊÕÕ™Ê؅ن†ÙÌÖ™ÒÏ’Ž¨¬§·µµæù¸«Á’’€ÃÅÆÅ€Ž¿¬ñª©ž­Þ±üìèäâââââââââââââââââââââââââââââãåãââââââââãääââââââââââââââââââââââââââââââââââââããããääãä½ç½ä½ç½çéëëëììëêè½ãâââââââââââââââââââââââãääå½èëîü÷Ÿ°²²²±°÷ûú÷Ÿ±ÜÞô­ž»»»©ºººžœ›­¹­œ¦¼ø´ææ´ýýæù§¾Á’ÆÏÐÉÓÕÊ™ÓÔÕš…ƒ…šÊÑÐÇ¿¨¬·æ´ñ¶ÈÈøýµù¯¿Ž€ÃÁ¨¬¶¦ºœ­ßÜŸþëçäâââââââââââââââââââââââââââââãäããââãäãâââââââââââââââââââââââââââââââââââââââââââââââãå½½åå½çèéëíîÿÿÿÿÿíéåäãâââââãäãââââââââââââââåçêêìíïú°²ÜÝݲ°Ÿ÷÷÷÷±Üß¹›ž»¦»©©»©»»®®®»ž›­¹­ž®ª¶ñýñøøññ´ù¯¨ÇÍÉÔÕ™ÓÒÓÊØÌÌÖÓÐǾ§ùµñÈ®©»¼¶ýæ·¬¿Â’’€’’€€Ž¿«§µÈ¦­ßܱûîê½ãâââââââââââââââââââââââââââââãäåååååäâââââââââââââââââââââââââââââââââââââââââââââââãäåääååçééêìïüûûûûûÿìéè½åäããä½çåãââââââââââââäçêííîïü÷±ÜÞôßܲ°ŸŸŸ°²Þ­œžº©»©©»¦»»ª¼ªª¦©œ­¹›©ªªÈ¶¶¶¶¶¶¶ñµ·«Â€ÆÇÏÒÔÓÑÑÑÔÕ××ÓÏŀ¨¸µ¶ª¦ž­¹¹œ©®¼ø´¯¨ÀÁŽŽÂÁ«§·ý¼»žôÛ±úïëçäâââââââââââââââââââââââââââââââãå½ççåãââââââââââââââââââââââââââââââââââââââââââââãäääääããäå½½½½éíïÿÿþþþïíêéèèåãäåçèåãããââââââââââäèéêìîþúŸ²Ý¹›œ¹ÞÛ°°°±Üß­››­›žº©¦¦»žœ›ôßô¹ž»¦ª¼¶ñýñøñ´µæ§¿ŽÃÅÍÐÐÐÍÍ¥Ó™™ÉÆ’Á«¸µ¶»ž›­¹ßÞô¹›ž»ªø´æù¸¬¬«««¯·´È¦œÞ±üíéåâââââââââââââââââââââââââââââââââãããäãââââââââââââââââââââââââââââââââââââââââââââââäçç½½åäãääå½å½êíîîïÿþþÿïíêêé½äå½çèçå½åãâââââââââä½çêìïûŸ±Ü¹œ­ÝÛÛÛÝô­›­¹ô¹›žžºº©œ­­¹¹ÞÝÝßœº»®¼ñ´´ýñ´´ý´·«Á’€’€ÃÅÆÍÉÒÒÏ€Á«·´È»ž¹ßÞÞßÞÜÛÛÜÞ­º¦¼¼Èø´æææµý¶¦›Ý÷îèäâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââåèééèç½åå½½ååçêìíîïÿþüüþïîìéç½½çèè½å½½äãããââââââãåçêìïüŸÜ¹›ž©¦©¹ßÞÞô›œ›­ôôôô¹›ºž›¹ßÞÞܱ±ÛÞ¹›º¦È´µµý´ýñøý渾ÁÀÀÁÂ’’€ÆÍÏŬý¼œôݲ°°°°°Ÿ°Ÿ°Ûßœ©©»¦ª¶øø¶È®ž›¹Ûûëåââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââäèééêêéèèéçççèéëìîîÿþüüüÿïìéééêëìëêéééèç½åäãäãããä½èëïüŸÛô›®È®œ¹¹­œžž›¹ôôßÞß­œœ¹¹ßÞܲ°°²Ýß­»¶µµ´ýññøøñ´ù¯¾««¾¨¿ÁÂ’€Å¾ñ¼©œßÜÛ°÷ûüûúúúûúŸÛß­­­­­›¦®¦»©ºœ­¹Þ°ïèãââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââã½çèëîíììëééèèêììììííîÿÿîíëëëìíÿþüÿîííìëêêéèç½½ççéëïû°Üß›»ªÈ¶ª©ž­¹››­¹ôÝÝÝÞÜÜÞôœºž›­­­ôÞÝܲ±ÛÞô›º¦¶´´ýñ¶¶Èøý´æ·§¸§§§¯«¨¿¿À¾ùñ¼»­ÞÛ±úüÿîïÿþÿÿûúŸ°²ÜÝßôô­žœ­¹ôÞÝܱüìçãââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãå½èíþÿïîíìêéêìíììëêêêìîíìííîÿþûŸ°ŸúûüþÿÿïîíìêééêìïûŸÜß›»¼øññ¼¦žžœ­ôÞÜÛÜܲ²Üßœœ›­¹¹¹ßÞÝÛ²²ÜÞ¹œª¶ññøȼ¼Èøýý´µæµµµµù¸¯¬¬¾¨«ùñª©›ôݲ÷üþîìíììëîÿþþû÷Ÿ±ÛÜÝÝßôÞÜÜÜÛ±Ÿûîêçãâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãåêÿ÷÷úüþÿîîîïïîíëéèééêëíîïþüû°ÛÝÞßÞܲŸúûüüþïíîïÿþú±Ýôž©ª¶ýµ´¶ª¦©©œ­ôÝÛÜÛ±±Üß­œœ›­¹ßÝÝÝÛ±°°Üô­œ®¼ø¶¼®®ªÈøññø¶È¼ª¼¶ýµæææùùæñ¼©œ¹ßܱ÷üþÿíìéèççêììíïÿþû÷°°±±±°±±±°÷üïê½äââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãäåäââââââââââäèíúÛܲ°÷ûþþþÿþÿîìêêêêëíïÿüûúŸ²Þ¹›œ›¹Þ²°ŸŸ°÷úúúûûúŸÜô›º®øýææ´øȪ¦©œ›ßÛ²±±°°ÛÝß­­¹¹¹ßÜÜܱ°°²Ýß¹œº»ªÈ¼¦¦¦®¼¶øøȪ»©»®¼È¶¶¶øøø¼¦žôÞܱúþïîíìé½åää½èèéêìíîþüûûûüûûûúûþïìçäââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââä½ç½äââââââââãåèêíúÛÛ±²±÷üþþþüþÿîîíîîîïüú÷ŸŸŸ±ÛÞô¹ôôÞÜÛ²²ÜÜÜÛÛ²±°ÛÞ›©¼ýµæµýø¼©ž›­¹Þ²°°°Ÿú÷°²Ýôôßô¹ÞÜÛ°°±²ÛÜÝÞôœ¦¼®¦®®®ªÈ¶Èª¦©ººº©»¦®ª®©¹Ý²Ÿûÿïíêèçåãâââääåçéééëíÿÿÿïÿÿÿïîëééèäââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââããââââââââââäçëíÿ°ÛÛÛÜÜ°úüþþüüûüüüüüûúŸŸ°±±°°°±ÛÝÞßßÞÝÝß¹­­­¹ôÞÝÞ¹žº»¶µæý¶®©­ßÞݲŸŸ°Ÿ÷ûúŸ²ÝßÞÝßôßݱŸ°±ÛÝÛÛÜÝ­º»®¦¦®¼ªª¼¼ª»ºž›¹¹¹­›œº›Þ±úþîìëéåääãââââââãåç½çèêììììíîìê½åå½åâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââäèíïûŸ²ÛÛÝݱŸ÷÷Ÿ°°°°±±±²²±±°°²Ü²±Ÿ÷Ÿ±ÛÜÞßô­œžºººž­­œªøµùµ¶®©žôݲ±°Ÿ÷úûûûúŸ±ÛÝÝÞô¹ßÜ°÷Ÿ±Ûݲ²²Ûß­©»¦ªÈª¦»»ºžœœœ­ÞÛ²²²ÛÝß­›¹Ý²Ÿûïëçåãâââââââââââãäååäåçéììíêçäââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââäéïþú°±ÛÜÞÞÜÛÛÛÛÜÜÜÜÝÞßÞÞÝÜÛ²ÜÜÛ²°Ÿ÷°²ÜÞôœº»¦®¦¦»»žž¦Èýµùùæø®©¹Ü±°Ÿ÷úûüüüû÷±²ÜÝÞßßÞÜ°÷°±Üݲ±±²Üß›º©¦ªª¦©©ž›››ôݱ÷ûüüûŸ²ÞßÜ°÷ûÿíçäââââââââââââââããââãäçéëêçãâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââåëÿüúŸ±ÛÝÞßßßôôßÞßßôô¹¹ô¹¹¹ÞÜÜÜÝÝÛ²²ÛÜÞô›©¦ªÈ¼ª®»©®Èøýµ·¸·ý¼®©›Ý±Ÿ÷úûþþüüüúŸŸ°²ÝÝÝÝÛŸúŸ²ÝÝÛ²ÛÝßô¹›©»»»©ºžœ­Ý°üïïïíîüŸ°°úüÿîë½ãâââââââââââââââââââââãå½åãâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââã½ëþüü÷°²Ýß¹­­žœ­›œ›­­›œžœœ¹ßßÞßßßßôôôß¹žº»¦¼øýø¶¼®¦®¼øý´µæù·§§æøȪßÛ°Ÿ÷ûüüüþþûúúú°ÛÛÜܲŸ÷°ÛÝÞÜÜÝÞôôßô›œž»©©ºž¹ÜúïíììëìîþþÿïíëéåãââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãåêïÿüúŸ²Üß›žº©»ºœœºººœ›­ôßß¹›­­¹ô›º¦¼Èø´æµýø¼¼¶ýµæææææù¯¬·´ñ¼›Þ²°Ÿ÷úþÿÿÿþüûûú÷±Û²±±±±²ÜÝÝÞÞßßÞÜÜÜÞ¹œº»©œ¹Ûúïìëêêêêëëëè½äãâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãââââââââââââââââãåêîÿþúŸ²Ý¹ž©¦ª¦©©©žžžº©ºœ¹ô¹›œ­­ôß­º®È¶øý´´µñøñ´æù·ù¸¬¬¸æý¶¦ß²°°°÷þïïîïïÿÿÿû°Û±°°°±±ÛÝÞÞÞÞÝܲ°²Ý¹ž»©ºž¹ÛûíëêéèçççççäââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãâââââââââââââââääçëïïÿûŸ±Üô­œž¦»©ººž›­­›œºœ­­­›œ›ôÞÝÝß­©¦®®ªÈøøøýµ··ùùù¸¯¯¯¸ùµø¦œÞ²±±°÷üïíëëêëíïüŸÛ±Ÿ÷Ÿ÷÷±ÜÝÝÝÝÝÝÛÛÝß›º©ºž›ß±üíéççççççèçäâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââäççèìîîïû÷Ÿ±Ýß­œº¦»ºž›­ô¹­œœœ›­››­ßÜÛÛÜÞôœºº¦¼Èøýµ··ùùù§¯¯¯§·ý®žßÛ²°Ÿúüîêç½çéëîüŸÛ²°÷úûú±ÜÝÝÜÛÝÝÜÝß¹žºžœ¹Ý°ûíéç½½çççèçäâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãåèëìììíîÿûúú°±Üô›º»ºœ›¹ôôßô­žººžœ›­¹Þ²°°±²Ý¹­››œ©®Èøýµù§¬¬¬¸æýªôܱŸúüïë½ããåèëíÿú²²°úþÿü°ÛÛÛ²ÜÝÝÞßô­œžœ¹Ý°ûíê½ääååå½çäâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãäçêìîííìíïþüüú÷Ÿ±Þœž­ôÞÞÞÞô­œžžžºž›­¹Ý±Ÿ÷Ÿ°ÛÞßßÞß¹ž»Èøýµùù¸¯¬¯·ææ´È©›Þ²Ÿúüîéäâãäèëíÿú±±Ÿûïïü÷°±±ÛÜÝÝÞßô­œœœžžž›¹Ü°üîëè½åäääååãâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââäçêííííîííïþþþú°±²Þ­ž›ôÝÛÛÜÝßßßßß¹››œ›­ôÞÜÛ±±°°²ÜÛ²ÛÜôœ®¶ýæ···ùù¸¬¬¯·æµ´¶¦žßÛ°÷üíçãââã½éíÿûŸ÷úüÿÿÿþûŸ±²ÛÜÜÝô¹­››­­››­ôÞÛŸüÿîìëéééè½äãââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââããåèëìììíïÿïïÿþþü÷±ÛÝÞô›ž­ßÛ²±²ÜÞÜÛÛÛÞô¹­¹ôÞÜÛÛÛ²±°°°Ÿ÷±Üß­ž©¼ñù§¸·ùù¸¯¬¬·æµý¶®ºœß²Ÿüì½ãâââåéíïþüüûüüþÿïþû÷Ÿ°°±Ýôôßô¹¹ôô­ôÞÝÜŸûþÿïîííëé½äãââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââå½èëíìììîïÿïïïÿþûŸ²ÜÞÝÞôôßݲ°°²ÜÜÜÛ²²Ýô¹­ôßÝÛ²Û²±÷ûûûüþû°Ý¹ž®ø¸·ù·¸·¸¯¯¸ùæñ¼¦©ºôÛŸþë½ãââåèëìíîÿþþþþÿÿïîïþüüú°ÝôßÞÞÞßßô¹ôßßÞ±÷þÿÿþïîìé½äääãääãããââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââåçéìîÿïîîïïÿïïïÿþûŸ²ÜÜÜÜÞÞÞܱŸ°²ÛÜÜܲ±Üß¹­¹ôÞÜÜܲ±úüþþÿïþ÷Ûôœ¦¶µ··¸¸·ù·§§¸·æøª¦¦¹²÷ÿêåââãåèêêëíÿÿîïÿÿÿíëìîïÿü°ÝßÝÜÜÝÝß¹¹¹ôôÞ²÷üÿþþþïëçåäååå½åååäâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãçéëíïÿþïïíììíïÿþûûúŸ°±²ÜÝÝÛ²°÷Ÿ²ÜÝÞݲ±Üß­žž›¹ßôßܲŸûüüþüûú°Üôœ®ñæùææ·¸¸ùæñ¼®¦›Þ±þë½ãâââãçêêëîÿîììíííêéêíïÿü÷±²±±²²ÛÜÜÝÞÞÞÜ°üîíííìëèåãââââââââãâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãä½èêëíîïîìììîÿþûûûúúúŸ±ÛÝÝÛ±ŸŸ±ÜÝßôôÝÜÞô›ººžœœ­ÞÛ±÷ûüûúú÷°Üß›ž©Èýµ´ýý´æùùæ´¶¼®©œôÜúíçäãâââãçêêëííìêééêëéèêíïþüûú÷°°ŸŸ±±±²ÛÛÛ²úîëééééè½åãâââââââãäââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââã½çèéêììëìíîïÿÿÿþûûüû÷÷°²ÜÛ±±ÛÞô¹›œ›¹¹­œº»»»»»ž¹Þ²°úú÷ŸŸ°±Ýô­œº¦Èȼ¼ÈÈøýµ´´ñÈ»ôÛ÷ÿëçäãâââäçêêëëëêêéèèèççéìíïþüûú÷÷ú÷ŸŸ°±°°°Ÿþìèççç½äââââââââââääââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãå½½åååçêìîïïïïÿþüþüú÷÷ŸÛÝÛ²Ûݹœžžžž»¦®ª®®¦žôÞ²Ÿ÷ŸŸ°°²Ýô›œž¦»©»®ª¼¶ñýýø¼©›Ûúþîëçäãâââäçêêëëìëéèççèèçéëíÿÿÿþûúúúú÷÷Ÿ°÷ûûþíè½ååäââââââââââââãäââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãä½½äããåèééêêëîÿÿþþüûûú°²Û²²Üô›ž©º»®®¦»»»»©ºœ›ßÛ±±°°Ÿ÷°²Ýôôô›ºº»ª¼¶ø¶È®ôŸþîíêçäãããä½éìëêêìêç½½½çççéíïÿîíîïîïïÿþüúúÿíìëçåäãâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãä½äãä½èèèççêìîïþþüüû÷°±²²ÜÞ¹œ©¦»©¦ª¼ªª¦»»»žžœ¹ßÝܲ±Ÿúú°ÛÜÛÛÞ­›››œ¦ªÈȼª»›Üûîíëêçäããäçéìíëéêìé½½çèééèëîÿÿíìëëêêëëìïþÿìéçåãããââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãååããå½çç½å½çèêíÿüûûú÷÷÷Ÿ±ÛÞ¹œ»¦»©»ª¼¼È¶ª¦»©ººž­¹ôÞÛŸûúŸ°°°±ÛÜÜÝÞôœ©®¼ªª¦º¹²üîìêè½åää½èêììéèêëéééêëëëìíïÿïíìêêèçççèêëìê½ãââââââââââââââââââââââââââââãâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãä½åãâââãäåääå½½èìïþûúúúûûúŸ²ß›©»»»®È¼¼¶ø¶ª»ºº©»ž›ô²ûþüúú÷ŸŸ°°°±²Ý­º¦¼¼¦º›Þ±üîëéç½½çççèêëêééêëëëëìììíîïîîîíëëéè½½å½çéêèäâââââââââââââââââââââââââââãääâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââäååãâââââã½åååçèêíïïÿþûüüüûŸÜ¹žº©»®¼øÈÈø´ý¶®©©»»ºž­ßÛ÷ÿíïþûúúú÷÷Ÿ°±Ü¹ž»¼ª©žßÛŸüîëèç½½çç½½èççéêëìëêééêëìíìììíìëììëêéèèéêêçäããââââââââââââââââââââââââââãäââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãäãââââã½éçååçèêìîîîïþþþüú°Ü­ººº»®¶ñ¶¶ýµ´ñȦ¦¦¦¦ºœôÛŸþìëìîÿþþÿþúŸ°²Ýôœ©¼®©›Ü±úÿíëéèç½½åååääåèëîïíêéèéêìíìëìíëìíïîîíìëìëêçåååäâââââââââââââââââââââââââãäãâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãäãâââãåèêçååå½èëîííîïÿþû÷±Ý­ºº©¦Èøøñý´´ýøȼª®»ž¹Ü°üíêèèêëíííïûŸ²Üß­»ª»ôÛŸüïíëéè½äãâãâââãçìîÿîìêèêìïÿîìëëëìïüüûþïîíêçççèéçäâââââââââââââââââââââââä½çåãâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãããâãååèêçåå½çèëìíîïÿþüŸ±Üß›º©¦¼¶øñ´µ´ýñøȪ¦©œß±ûïìèå½èêêêëîü°²Þ¹›»ª©žß²÷üïíìëéçäãããâââäèëîïîíêèëíïÿîìêéëîüú÷÷úüïíéçèêëêè½ãââââââââââââââââââââââä½çåäââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãääåçç½çéêéééêìîïþûŸ²Ý¹›œºº©¦®ªÈñµýø¶Èª¦»œß°þïìçäåèêëëìÿú°²ÜÞ¹œ¦›Þ²°úÿíììêéç½åååååèëííìëêè½èêìíëéèéìïüú÷ŸŸ÷üîêèéêéèè½äãââââââââââââââââââââââäåääâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââä½çèéëëêéèèëîÿü°ÜÞ¹œžžººº©»®¶ñø¶ÈȪ¦»›ÝŸüÿíçääçêìíîü÷°±²Üß­º»œôܲ°ûîííììëéçççèêìííìëééç½çèêêèççéíÿüû÷Ÿ°Ÿûïëèéêèèççç½ãâââââââââââââââââââââãääãâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââã½èéëìíëéççëïüŸÛݹžººººžžººººº»ª¶ññø¶ª¦»º­Ý±úþíçäåçêíîÿü÷°°±Ûݹ›ôÞÜŸþïîííííëêééëîîíìêêéçççèêéçççêîÿþúŸ°°Ÿûÿíëêéèèççèçåãâââââââââââââããâââââãäãââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââã½éëííìêéèèëîû°Üßœººž©º»¼øýýñø¼®©¹Ü±÷þìçäåèëîÿüû÷Ÿ°°°Ûôž©ž­ßÝ°üÿïîîîîíìëëíïîìëëêèèèèèéèèééëîþûŸ°°°ŸûþîëêèèéèèèéçåâââââââââââââãââââââãäâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãåçêëêèçéêëíÿûŸÛôœººººººžž®¶ýýññ¶ª©ºžß²÷üîê½ãäèëíîÿü÷÷Ÿ÷÷±Þ›œ­¹ßÝÜ°ûïííîíìììëêêëëìììêééèèééèêëêëîþúŸ÷÷Ÿ÷ûÿëèèèèééèç½äãââââââââââââââââââââããââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãåçèç½çêíïÿþü÷Ûôœºº©ººººº¦Èýµý¶ø¶¦œ­Ý°ûïìê½ãåçêìîïü÷÷úüüŸÜô›­ôÞÜÛ²°ûÿîïïìêëìéçèçéëíîìééèéééêììëìîüú÷úúúúüïé½ççèéèè½äããââââââââââââââââââââãäãâããââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãäå½éìÿú÷úúŸ²ß›º©¦º»»¦ª¶ñµýøȼ©œ­ôÛ÷ÿëéè½å½çéìíïû÷úüÿüú±ÜßÞݲ°Ÿ÷úûüþÿïìêéè½½½½èëîÿíéèççèéêëëëìîþû÷÷úûüïìç½½çèéèçååäãããâââââââââââââââââããäââãããâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãåêï÷±±±±²ÛÞ¹žº»¦©ººº»¦ª¼¶ýæý¶È®ºœ¹Þ²ûîéççç½å½éëìïüúûÿïÿü÷±ÛÛ±Ÿúûûúúúüþïìéçç½ååäèìÿüïëé½çéêêëëëëíïüúúûþíëè½ää½éêèçåäããäãâââââââââââââââââãå½äããäãââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââåëü°ÛÜÞßß¹­›ž©©©»©©»®ÈøýµæñÈ®»­ÞÛ°ûíçääåäãåçèêìïþþïÿþûúú÷÷úûúúŸŸŸ÷ûÿîêçççåääåéíÿþïíêççèéééêêêëíîÿÿîëèç½äââäçêéçäããåäââââââââââââââââââã½çåãããââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââã½îú±Þô›œžžž©©»¦®»©»®Èýµæùùý¼¦œ¹Ý±Ÿüë½ääãâãäå½èéìîîîïÿþþþüüüüû÷Ÿ°Ÿúþîëéçççåää½éìîþÿïìééèééêêéèêëíîìé½äääãââã½éêè½åååãâââââââââââââââãåäåçè½äãââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãåéÿ÷ܹœº©©»©©¦®®®¦»»®Èñæ·§¸µ¶»­ßÛ°úÿëç½½ããâââãä½èëëëìîîìíîÿþþûûûú÷üîìëéèç½åäåçéêíïîîììëêéêêêééëíîïìéåââââââã½éêéèçåãââââââââââãããââãå½½éëëé½äâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãåçêþ°Þ›©»¦¦®¦»¦ªª®¦¦»»ª¶´·§¯§æ¶»ž¹Ý²°úÿìéèçåäãââââãçèéêëìëêêëîïÿÿÿÿüúÿììêéèçèèççéééìîíííííìêééêêêëìîîëçäââââââä½çèçç½äââââââââââãääãããäåçéëííëé½äâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââä½èèêïŸÝ­œžºººº©»¦®¦»ºº»¼ñµ·¯««·´ª¹ÜÛ²÷þîìêéèçåãâââå½½èéêêêëêêìííììíÿüîìëêéèéêêééééêëíìëêêêêè½çèèèççéê½ãâââââââââââââââââââââââââããââââãåèèéíïíêçåãâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãçèéèéî÷Üô¹­›œœœžº©¦¦»©žªø´·§«¾¸µÈ©­ßÝÜ°ûþÿíëëëèäãâäååå½èçéêëêééééêëëîþîìëëèèêììëêéééêêêéççç½ää½ç½äããå½ãââââââââââââââââââââââââââââââââãåèèéìïíêèçäãâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãäçéëëìþŸÜô¹ô¹›œžº©»ž­­ž¦¼ýæ·¯«¸æø»œôÞÝ°úúûÿîîîêçååãããä½èééèéç½ååå½çéîþïìêè½çêìëêèçèéèèç½ååãâââäåãââââââââââââââââââââââââââââââââââââââãåç½çëîíëêêçåäãâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãåêìîïÿúŸÛßßßô¹›žžº©©ž¹ßôœ©ªø´¸¯¸ø¦ž¹ßܱ°°°÷ûþïìêè½ããää½çèèèéè½ääãäåèëîìêçç½èêìëêéééèç½½åäãâââââââââââââââââââââââââââââââââââââââââââââãåååçêìêèéêéç½äââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãåéíîÿþûú÷±ÛÛÛÜÞ¹›žºº©©ž¹ôô›º»®¶´¸ùµ¶¦­Þܲ²ÛÛ±úüÿíëèçååäãããääåçç½å½ääå½èéçåäåå½éëììëëéç½ç½½äâââââââââââââââââââââââââââââââââââââââââââââââãäää½é½åå½½½åäâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââããå½éìþüúŸŸ÷ûúŸŸŸ²Ûß›ººœôôô¹­ž®øµæ´¶®›ßÝÜÜÝݲŸúþîëéèççäâââââãäå½½½äãäå½åãâââãäèëììììé½åçççåãââââââââââââââââââââââââââââââââââââââââââââââââââä½äãâãäääãââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââã½éêìîü°±²±°úüûúú÷°²Þ­žººººž¹ÞÞßßô¹œ©¼ñ´ýñ¶¼»º›ôßÞÞÝÛ²°úþïíëçäâââââââã½éèåâââääãâââââãåèééêìêççççç½åãâââââââââââââââââââââââââââââââââââââââââââââââââãäââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ½ëîþú°ÛÞÞÜÛ±÷úúúú÷°²Þ­žººž¹ßÞÝÝÝÜß­»¼¶¶ø¶È¦œ­¹ßÞÝܲ°úþÿîë½ãââââââââ½êèäââããââââââââãåå½éëéè½½½½½åãââââââââââââââââââââââââââââââââââââââââââââââââââäâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãçìïû±ÝÞôßÝÜÛ±²²±±±²ÜÞ¹œœôÞÝÛÛܲ²ÛÝ­º©¦ª¼®»ºœ­­ôÞÝÛ±÷üÿíëêèäâââââââââ½êçãâââããââââââââââãåååããããããâââââââââââââââââââââââââââââââââââââââââââââââââââãåääââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââäèìÿŸÜß­¹ßÞÝÝßôßÞÝÝÝÞô­œ›¹Ýܲ±²±±°±²ßœº©»»©œ­­¹ÞܲŸûïîìé½ååâââââââââãçé½ãâââããâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââã½½åãââããäãâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââäèëï÷Üôžœ­¹¹¹›œž›¹ßÞß¹¹¹ßÝÛ²°÷÷÷Ÿ°°°Ûôœºž›­¹¹ßÛ°úüîìêè½äääââââââââãå½½äãââãääãââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãç½åããåçèèåãââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââåèêíúÛ­ºžžœžº©»©›ô¹­¹ßܱ²±Ÿûûûú÷ŸŸ±Ý­žœ­¹¹ô¹ßÝ°ûþïìëé½åãäãââââââââãäååääãâãääãââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââäèç½ååçêëìé½ãâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââä½éíúÜ›ºººžž¦®ª¦©ž­­›¹ßÛ±±±úÿïÿþþþü÷²ß­ôÝÝÝÝÝÛ±÷ûüÿîíéç½½åäãââââââââãä½ääãââãããââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââåè½åää½èëíëéåââããâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââã½êþŸÝœ©©ºº©®¼¶È®º›››­ôܱŸúüïîîïîïÿü÷ÛÞÝÛÛÛ²±ŸŸ÷úüþÿîêçç½½åãâââââââââä½åääãââãâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââåè½äãä½éìîíêåãäååäââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãçíû±ßœ©ºº©¦Èø¶ª©›­ôܱúüÿïîîîïïïþú±Û²ÛÛÛ±°Ÿ÷÷÷ûûÿíêè½åååãâââââââââäåääääââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââäç½å½èêëíîíêç½½èéèåãââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââåêÿŸ²Þœºº©®Èñ¶¼¦ž›­ôݱúÿïîíììíííïÿû÷Ÿ±±°÷÷úûûüþþîêèçåääãââââââââââããããããââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãåä½çêëìïÿîëéèéëíìèåãââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãèíü°Ûßœºº»®È¶È®­ôôÞܲ°ûïìêéçç½åççèëíïÿÿïïîííìêéè½ääãâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââããä½ééëïþîëêêêëííé½ãââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââäéïú±Ý¹œžºº©¦¼Èª©›ÞÝÝÜÛ±Ÿüïê½åäãââââäåçèééééèéêçåãâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãå½èèéîþïíííìíîîëçäâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãçìüŸ²Þ¹­œººº©¦žôÜÛ²±°÷ûÿíçäââââââââââãäääããååãâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââä½½êïüüþÿïïïïïìê½äãââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââã½ëÿ÷±ÛÝß¹›œžžœ››žœ­ÝÛ°Ÿ÷ûüþîëçãââââââââââââââââããââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãäçêÿúúûüþþÿÿïíêèåäãâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ½ëÿú±Üßßô­œœœ›­ôô¹­ôÞÛ°úûþïîìêèäâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââã½èìþúûûüüüüÿïíëè½äãââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââäéîû±Üô›œžžœ­ßÞÞÞܱŸûþÿìêéè½äââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââã½éìþúûûûúûþÿïîíéçäãäãâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãèíû±Ý¹ž©©©ºœôÞÝܱúüÿïíìé½äãââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãåèëïüþÿüüÿïîïîíìëéç½äâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ½ìû²ß­©¦¦»¦®¦º›ôÞܲ÷þïîìêé½ãââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãåèêíïîîþûþïïÿÿïïïìêçäââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââäéÿ±ôœ©¦ªªªªª»º›ôÞݲ÷ûþîëè½ãââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãåçêììîþûüüüûüþþþíé½äââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââåéïŸÝ­žº»®®ªª¼¦ºœ­ôÞ²°÷üîéçäââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãäèëìîüûûú÷Ÿ÷ûûûïëçåäãâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãçëï÷ܹžº¦®®ªÈ¶®©›ôݲ±úþíé½ãâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãçêìïþüüúŸ²±ŸŸ÷üïêçåãâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââäèìÿû±Þ­º¦¼¼Èñ´È»º›ôÝܲúþíèäââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãçêíïÿþüú°Û²±°ŸûþíéçäâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãâãäåéîÿüŸÛ¹®È¶øýµ¶®ž­ßݲ÷þë½ãââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãåèëîÿüû÷±Û²°°Ÿûÿíëè½äââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãåççééêìîÿü÷²ô©®¼øµý¼»›ôÞÜ°þêåââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââäèêìïüú÷±Û±±°÷ûÿîíëéåããâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãåèìîïïïïÿûúŸ²ßœ¦¼ñæùý¼œ­¹ßÝ°þëåââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãçèêíþüûŸ±Ÿ÷÷÷ûþþþîêç½åäãââââââââââââââââââââââââââââââââââââââââââââââââââââââââââä½éíþû÷ŸŸúú÷Ÿ°Ûô©®¼øµæñª©œ­ßÜŸÿêäââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââã½èéíÿþûŸ°÷úúúûûûüïìéèç½äâââââââââââââââââââââââââââââââââââââââââââââââââââââââââä½éíþú°ÛÛÛ²²²²Ûݹ©®¼øµ´¶¦ºœ­Ý°üíçãââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãåèëîïÿûú÷ûüûúúúûüïíêçåäâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãèíïþ÷²ÛÜÜÜÛÛ²ÛÞ›º»ªøµæ´ø®žô²úÿëçãâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââäèëíîþûûûüüûúûûüüÿîëèåãâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââäéíîÿ÷²ÜÝÝÜܲ±±Ü¹»ªø´´ñȪ»›Ý°ûîëçäâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââåèêìïÿþüûüþþþþþüþïíìëçåãââââââââââââââââââââââââââââââââââââââââââââââââââââââââââåêîÿú±ÛÜÝÝÞÛ±°°Ü­¦ª¶ññ¶È®¹Û÷ÿíêçäââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãåçèëîïþûúûüüþüþüÿîìíìé½äâââââââââââââââââââââââââââââââââââââââââââââââââââââââââã½êíÿúŸ²ÜÝÝݲ²°°Ýœ»ªª¼¶¶¼¦žô±üìèåãâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãåçéëíïüú÷ú÷ûûüüüþîíîíëèåãâââââââââââââââââââââââââââââââââââââââââââââââââââââââââã½éìÿûŸ±²±°±±Ÿ°Ýœ©¦®È¶È¦ž¹ÝŸïèäâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââã½èêìíïü÷°°Ÿ÷úúûüþÿîïïìèäââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãå½éíÿû÷ŸúúŸŸŸ±Þž¦®¼ÈÈ»ž¹Ý°üìçãâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãåçéìÿüúŸ±±±°÷úüüûüüþïëèäââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãåéíþüþþüúŸ±²ßœ®ªÈ¶È©›ß²úïêçäââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââäçêîüúúŸŸ°±°÷ûüûûûûþïêçãâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââäèìîîîÿþûŸ±Üß›¦ªÈȪ¹Ý²úïëçãââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââã½êíÿÿüüûúûüüþþþþÿîëèåäââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââäéììíîîïü÷²Þßôœ¦ª¼®¹ÞÛ÷ÿëçãââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââããããããâããçêìíîÿÿïÿÿïïïïïïíëçåãââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââã½êêêëìíîüŸÛßÞß›¦ª®º­Þ²úÿëèåäãããâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââä½½½åäãääåéììíîîîííëêêëìììêèåãâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââä½èççèëìîü°ÜßÞß¹­œº¦»¹Ý±÷þíêè½½çåãâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãåèéè½ää½çèêëìíîîíìêè½ççéêêè½äãâââââââââââââââââââââââââââââââââââââââââââââââââââãââââââââââãäå½½½èêìÿú±ÜÞßßßß­žºœ¹Ü°úüîëêêéè½åãââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãåèêêè½½çèéëìííííìëè½ååääåçåäããââââââââââââââââââââââââââââââââââââââââââââââââââãåãââââââââããããäåçéíÿúŸ±ÛÝÞßÞÞ¹œ›­¹Þ²÷úþïîíìêéç½åãââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãåèéêëêêééêëìîïÿïîíëçåäãââãããâããââââââââââââââââââââââââââââââââââââââââââââââââââ½èåãâââââãäåäãããå½éíüŸ±±ÛÝÞÞÝÝô­¹ßܱŸúüþÿïìëêéèèçåãââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââããããä½èêëìííîíììíïÿþþÿïîìçåãâââââââããâââââââââââââââââââââââââââââââââââââââââââââââââäèêèçäãããåçèè½äãäåçêïû±²²ÜßßÞÜÜÝßßßÛŸúüþÿþÿìêéèèèèçäâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãääãä½èëíîîîÿþÿíîîïþüþÿïíëçäâââââââãããââââââââââââââââââââââââââââââââââââââããâââââââãä½êìëé½ääåèëëéçåäåçèìÿ÷²ÛÛÞôßßÞÝÝÝÞôݱ÷úüÿÿïëèçç½½½çäâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãããäçëîÿïîííìëëëëìíîíìëëè½äãââââââââââââââââââââââââââââââââââââââââââââââââââââââãäçêìîìé½åäåèëëëêèçççêîþ÷²²ÛÞÞÞßÞÝÝÞô­ßܱ°ûþÿïëèç½ääå½äâââââââââââââââââââââââââââââââââââââââââââââããâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãääèìÿüÿíìëêéééèéêêéééêéè½åãâãããâââââââââââââââââââââââââââââââââââââââââââââââãää½êìîïíêçç½½èëìììëéçèëíÿ÷±²ÛÜÝÞßÞÞßß­­ôÞܲúþïíêè½äããä½äââââââââââââââââââââââââââââââââââââââââââââãäåäâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãå½çêíÿüÿîìêèèéè½çèéèèèéèç½½ääääãâââââââââââââââââââââââââââââââââââââââââââââââä½çêìíïþïìêèççêííííëééêëìïûŸ±²²ÛÝÞÞôô¹›­¹ôݲúþïíëèåãââãäããããâââââââââââââââââââââââââââââââââââââââââãå½åãââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââä½èéêíþüþîìèèééç½½çèçèééèèèç½çç½äââââââââââââââââââââââââââââââââââââââãâââââââãä½éëìîþûþïíëêêìíìíîíëëìëìïü÷°²ÛÜÝÞô¹ô¹ôÞÝܲŸûüÿîëçäããââââââäââââââââââââââââââââââââââââââââââââââââââãäãââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãåçèéëïÿþïíêéééèçççéêëìëëêëéèèèççåãâââââââââââââââââââââââââââââââââââââââââââââââã½èêíþúúüþÿîííííîïïîïîîÿüú÷°²ÛÜÝÞÞÞÝÝÝÜÛ²°÷úûÿíé½ääãâââââãäãâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãä½çèëíîÿþïìêêêêéééêëìíîííììëêéèççäâââââââââââââââââââââââââââââââââââââââââââââââââäçêíü÷÷÷Ÿúüþÿÿïþüüüüþüú÷÷Ÿ²ÜÜÝÞÞÝÝÜÛÛÛ²±°Ÿúþîëçãââââââââãäääããââââââââââââââââââââââââââââââââââââââããâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãå½½½çéêìïÿíëëëëìëëìíîîîîííììëëêèèçäâââââââââââââââââââââââââââââââââââââââââââââââââã½êîû÷Ÿ±±±°Ÿ÷÷÷ŸŸ÷÷÷ûüû÷Ÿ°²ÜÞÞÞÞÝܲ²Û²°ŸŸ÷üïíêåãââââââââãäåå½äââââââââââââââââââââââââââââââââââââââããâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââä½èç½èéééìïíììììììíïÿÿÿïîííííììéèèçåãââââââââââââââââããâââââââââââââââââââââââââââââââäéîü÷°°±ÛÛ²±°±²²±°÷úû÷°°°±ÛÝÝÜÜÝÛ±±°÷úüþþÿïìçääããâââââââããããââââââââââââââââââââââââââââââââââââââââããâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââåè½½çèççêììííìëìíïïîîÿþÿïîíìëëêêèçåãâââââââââââââââãâââââââââââââââââââââââââââââââââãçìÿûûû÷Ÿ°°ŸŸŸ±±ŸŸŸŸŸ°°ŸŸŸ±±°±ÛÛ²°Ÿ÷ûþÿîîîìèåääääâââââââããââââââââââââââââââââââââââââââââââââââââââäããâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââããââã½ç½½½½å½èêìíììëíÿþïíîïÿÿÿÿîíìëêêèèçäãâââââââââââââââââââââââââââãäããââââââââââââââââââåéíþÿþüú÷÷÷ŸŸ°°Ÿ°±±²²°÷ú÷ŸŸ÷÷°±±Ÿúüîíììíêèåäãââãââââââââââââââââââââââââââââââââââââââââââââââââââãåããâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââããäåççååå½èèèèçèêìïüûþïííîÿüþÿïííìëêé½ääãââãããäããââââââââââââââââââã½ççååååäãââããããâââââãä½êîïÿÿþûŸ±²°Ÿ÷úŸ°²Û°÷ûüú÷÷úúûûúþïìêééêëçäãââââãââââââââââââââââââââââââââââââââââââââââââââââââââãåäãâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãä½ç½½½½½çèèèççèêíþú÷ûþîîïþúúüþþÿïíìêçååäãâäåååååäããâââââââââââââââåèêêéééè½äãäå½½äââââããä½êîïïÿþú°ÛܲŸúûú°ÜÜ°úüþüüûúüÿÿïìëêè½½èé½åäãããââââââââââââââââââââââââââââââââââââââââââââââââââââãäâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââääääå½çççèëëëìíïü÷Ÿ÷ûþþþû÷÷úûþïîíëêééç½ååçèç½çç½½½½åããââââââââââäçêêééè½åääåå½½åãâââãä½½èìïÿÿþûúŸÛݲŸüþüŸ²Û±÷þïïÿüüïíìëêêèåää½ç½åääããâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââããä½½½½èíîïîÿûú°±ŸúûûúŸ°±°÷þîïîëéêëéèççéêêêëëéèééè½äãââââââââä½éëêéè½äããå½½½åäãâããäåçèêîÿÿþüûúŸ²ÜÛ°üÿü÷±Û±÷ÿííïÿÿîìêéèçäãããå½äãããâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââãäåçèêíïþþûúúŸŸ÷úúŸ±²ÛÛ²Ÿüÿÿïìëëëëêéêêëìíîíëêëêè½äãâââââââä½èêêè½äãããäå½½½åãâãããåçéêìïþüüüû÷°²Û²Ÿûüû÷±±°úÿíííîïíëéè½ä0 \ No newline at end of file diff --git a/lib/glut-3.7.6/progs/bucciarelli/paltex.c b/lib/glut-3.7.6/progs/bucciarelli/paltex.c deleted file mode 100644 index 13955bd5b..000000000 --- a/lib/glut-3.7.6/progs/bucciarelli/paltex.c +++ /dev/null @@ -1,175 +0,0 @@ -/* paltex.c */ - -/* - * Paletted texture demo. - */ - -#include -#include -#include -#ifdef _WIN32 -#include -#endif -#include - -#if defined(GL_EXT_paletted_texture) && defined(_WIN32) -void (*glColorTableEXT)(GLenum target, GLenum internalFormat, - GLsizei width, GLenum format, GLenum type, const GLvoid * data); -#endif - -static float Rot = 0.0; - - -static void Idle( void ) -{ - Rot += 5.0; - glutPostRedisplay(); -} - - -static void Display( void ) -{ - glClear( GL_COLOR_BUFFER_BIT ); - - glPushMatrix(); - glRotatef(Rot, 0, 0, 1); - - glBegin(GL_POLYGON); - glTexCoord2f(0, 1); glVertex2f(-1, -1); - glTexCoord2f(1, 1); glVertex2f( 1, -1); - glTexCoord2f(1, 0); glVertex2f( 1, 1); - glTexCoord2f(0, 0); glVertex2f(-1, 1); - glEnd(); - - glPopMatrix(); - - glutSwapBuffers(); -} - - -static void Reshape( int width, int height ) -{ - glViewport( 0, 0, width, height ); - glMatrixMode( GL_PROJECTION ); - glLoadIdentity(); - glFrustum( -1.0, 1.0, -1.0, 1.0, 5.0, 25.0 ); - glMatrixMode( GL_MODELVIEW ); - glLoadIdentity(); - glTranslatef( 0.0, 0.0, -15.0 ); -} - - -/* ARGSUSED1 */ -static void Key( unsigned char key, int x, int y ) -{ - switch (key) { - case 27: - exit(0); - break; - } - glutPostRedisplay(); -} - - -/* ARGSUSED1 */ -static void SpecialKey( int key, int x, int y ) -{ - switch (key) { - case GLUT_KEY_UP: - break; - case GLUT_KEY_DOWN: - break; - case GLUT_KEY_LEFT: - break; - case GLUT_KEY_RIGHT: - break; - } - glutPostRedisplay(); -} - - -static void Init( void ) -{ -#ifdef GL_EXT_paletted_texture - GLubyte texture[8][8] = { /* PT = Paletted Texture! */ - { 0, 0, 0, 0, 0, 0, 0, 0}, - { 0, 100, 100, 100, 0, 180, 180, 180}, - { 0, 100, 0, 100, 0, 0, 180, 0}, - { 0, 100, 0, 100, 0, 0, 180, 0}, - { 0, 100, 100, 100, 0, 0, 180, 0}, - { 0, 100, 0, 0, 0, 0, 180, 0}, - { 0, 100, 0, 0, 0, 0, 180, 0}, - { 0, 100, 255, 0, 0, 0, 180, 250}, - }; - - GLubyte table[256][4]; - int i; - - if (!glutExtensionSupported("GL_EXT_paletted_texture")) { -#endif - printf("Sorry, GL_EXT_paletted_texture not supported\n"); - exit(0); -#ifdef GL_EXT_paletted_texture - } - - /* put some wacky colors into the texture palette */ - for (i=0;i<256;i++) { - table[i][0] = i; - table[i][1] = 0; - table[i][2] = 127 + i / 2; - table[i][3] = 255; - } - -#if defined(GL_EXT_paletted_texture) && defined(_WIN32) - glColorTableEXT = (void *) wglGetProcAddress("glColorTableEXT"); - if (!glColorTableEXT) { - fprintf(stderr, "wglGetProcAddress could not get glColorTableEXT\n"); - exit(1); - } -#endif - - glColorTableEXT(GL_TEXTURE_2D, /* target */ - GL_RGBA, /* internal format */ - 256, /* table size */ - GL_RGBA, /* table format */ - GL_UNSIGNED_BYTE, /* table type */ - table); /* the color table */ - - glTexImage2D(GL_TEXTURE_2D, /* target */ - 0, /* level */ - GL_COLOR_INDEX8_EXT, /* internal format */ - 8, 8, /* width, height */ - 0, /* border */ - GL_COLOR_INDEX, /* texture format */ - GL_UNSIGNED_BYTE, /* texture type */ - texture); /* teh texture */ -#endif - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); - glEnable(GL_TEXTURE_2D); -} - - -int main( int argc, char *argv[] ) -{ - glutInit( &argc, argv ); - glutInitWindowPosition( 0, 0 ); - glutInitWindowSize( 640, 480 ); - - glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE ); - - glutCreateWindow(argv[0]); - - Init(); - - glutReshapeFunc( Reshape ); - glutKeyboardFunc( Key ); - glutSpecialFunc( SpecialKey ); - glutDisplayFunc( Display ); - glutIdleFunc( Idle ); - - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/bucciarelli/paltex.dsp b/lib/glut-3.7.6/progs/bucciarelli/paltex.dsp deleted file mode 100644 index cadf48f90..000000000 --- a/lib/glut-3.7.6/progs/bucciarelli/paltex.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="paltex" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=paltex - 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 "paltex.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 "paltex.mak" CFG="paltex - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "paltex - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "paltex - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "paltex - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "paltex - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "paltex - Win32 Release" -# Name "paltex - Win32 Debug" -# Begin Source File - -SOURCE=.\paltex.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/bucciarelli/ray.c b/lib/glut-3.7.6/progs/bucciarelli/ray.c deleted file mode 100644 index 97a5a0704..000000000 --- a/lib/glut-3.7.6/progs/bucciarelli/ray.c +++ /dev/null @@ -1,862 +0,0 @@ -/* - * This program is under the GNU GPL. - * Use at your own risk. - * - * written by David Bucciarelli (tech.hmw@plus.it) - * Humanware s.r.l. - */ - -#include -#include -#include -#include - -#ifdef _WIN32 -#include -#endif - -#include - -#if defined(GL_VERSION_1_1) -/* Routines called directly. */ -#elif defined(GL_EXT_texture_object) && defined(GL_EXT_copy_texture) && defined(GL_EXT_subtexture) -#define glBindTexture(A,B) glBindTextureEXT(A,B) -#define glGenTextures(A,B) glGenTexturesEXT(A,B) -#define glTexSubImage2D(A,B,C,D,E,F,G,H,I) glTexSubImage2DEXT(A,B,C,D,E,F,G,H,I) -#else -#define glBindTexture(A,B) -#define glGenTextures(A,B) -#define glTexSubImage2D(A,B,C,D,E,F,G,H,I) -#endif - -static int WIDTH=640; -static int HEIGHT=480; - -#define FRAME 50 - -#define BASESIZE 7.5f -#define SPHERE_RADIUS 0.75f - -#define TEX_CHECK_WIDTH 256 -#define TEX_CHECK_HEIGHT 256 -#define TEX_CHECK_SLOT_SIZE (TEX_CHECK_HEIGHT/16) -#define TEX_CHECK_NUMSLOT (TEX_CHECK_HEIGHT/TEX_CHECK_SLOT_SIZE) - -#define TEX_REFLECT_WIDTH 256 -#define TEX_REFLECT_HEIGHT 256 -#define TEX_REFLECT_SLOT_SIZE (TEX_REFLECT_HEIGHT/16) -#define TEX_REFLECT_NUMSLOT (TEX_REFLECT_HEIGHT/TEX_REFLECT_SLOT_SIZE) - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -#define EPSILON 0.0001 - -#define clamp255(a) ( (a)<(0.0f) ? (0.0f) : ((a)>(255.0f) ? (255.0f) : (a)) ) - -#define fabs(x) ((x)<0.0f?-(x):(x)) - -#define vequ(a,b) { (a)[0]=(b)[0]; (a)[1]=(b)[1]; (a)[2]=(b)[2]; } -#define vsub(a,b,c) { (a)[0]=(b)[0]-(c)[0]; (a)[1]=(b)[1]-(c)[1]; (a)[2]=(b)[2]-(c)[2]; } -#define dprod(a,b) ((a)[0]*(b)[0]+(a)[1]*(b)[1]+(a)[2]*(b)[2]) -#define vnormalize(a,b) { \ - register float m_norm; \ - m_norm=sqrt((double)dprod((a),(a))); \ - (a)[0] /=m_norm; \ - (a)[1] /=m_norm; \ - (a)[2] /=m_norm; } - -static GLubyte checkmap[TEX_CHECK_HEIGHT][TEX_CHECK_WIDTH][3]; -static GLuint checkid; -static int checkmap_currentslot=0; - -static GLubyte reflectmap[TEX_REFLECT_HEIGHT][TEX_REFLECT_WIDTH][3]; -static GLuint reflectid; -static int reflectmap_currentslot=0; - -static GLuint lightdlist; -static GLuint objdlist; - -static float lightpos[3]={2.1,2.1,2.8}; -static float objpos[3]={0.0,0.0,1.0}; - -static float sphere_pos[TEX_CHECK_HEIGHT][TEX_REFLECT_WIDTH][3]; - -static float fogcolor[4]={0.05,0.05,0.05,1.0}; - -static float obs[3]={7.0,0.0,2.0}; -static float dir[3]; -static float v=0.0; -static float alpha=-90.0; -static float beta=90.0; - -static int fog=1; -static int bfcull=1; -static int poutline=0; -static int help=1; -static int showcheckmap=1; -static int showreflectmap=1; -static int joyavailable=0; -static int joyactive=0; - -static float gettime(void) -{ - static float told=0.0f; - float tnew,ris; - - tnew=glutGet(GLUT_ELAPSED_TIME); - - ris=tnew-told; - - told=tnew; - - return ris/1000.0; -} - -static void calcposobs(void) -{ - dir[0]=sin(alpha*M_PI/180.0); - dir[1]=cos(alpha*M_PI/180.0)*sin(beta*M_PI/180.0); - dir[2]=cos(beta*M_PI/180.0); - - obs[0]+=v*dir[0]; - obs[1]+=v*dir[1]; - obs[2]+=v*dir[2]; -} - -/* ARGSUSED1 */ -static void special(int k, int x, int y) -{ - switch(k) { - case GLUT_KEY_LEFT: - alpha-=2.0; - break; - case GLUT_KEY_RIGHT: - alpha+=2.0; - break; - case GLUT_KEY_DOWN: - beta-=2.0; - break; - case GLUT_KEY_UP: - beta+=2.0; - break; - } -} - -/* ARGSUSED1 */ -static void key(unsigned char k, int x, int y) -{ - switch(k) { - case 27: - exit(0); - break; - - case 's': - lightpos[1]-=0.1; - break; - case 'd': - lightpos[1]+=0.1; - break; - case 'e': - lightpos[0]-=0.1; - break; - case 'x': - lightpos[0]+=0.1; - break; - case 'w': - lightpos[2]-=0.1; - break; - case 'r': - lightpos[2]+=0.1; - break; - - case 'j': - objpos[1]-=0.1; - break; - case 'k': - objpos[1]+=0.1; - break; - case 'i': - objpos[0]-=0.1; - break; - case 'm': - objpos[0]+=0.1; - break; - case 'u': - objpos[2]-=0.1; - break; - case 'o': - objpos[2]+=0.1; - break; - - case 'a': - v+=0.005; - break; - case 'z': - v-=0.005; - break; - - case 'g': - joyactive=(!joyactive); - break; - case 'h': - help=(!help); - break; - case 'f': - fog=(!fog); - break; - - case '1': - showcheckmap=(!showcheckmap); - break; - case '2': - showreflectmap=(!showreflectmap); - break; - - case 'b': - if(bfcull) { - glDisable(GL_CULL_FACE); - bfcull=0; - } else { - glEnable(GL_CULL_FACE); - bfcull=1; - } - break; - case 'p': - if(poutline) { - glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); - poutline=0; - } else { - glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); - poutline=1; - } - break; - } -} - -static void reshape(int w, int h) -{ - WIDTH=w; - HEIGHT=h; - glViewport(0,0,w,h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(45.0,w/(float)h,0.8,40.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -static void printstring(void *font, char *string) -{ - int len,i; - - len=(int)strlen(string); - for(i=0;i0.0)) - return GL_FALSE; - - d=sqrt(d); - - t=b-d; - - if(t10)) - return GL_FALSE; - - y=(int)((ppos[1]+BASESIZE/2)*(10.0f/BASESIZE)); - if((y<0) || (y>10)) - return GL_FALSE; - - r=255.0f; - if(y & 1) { - if(x & 1) - g=255.0f; - else - g=0.0f; - } else { - if(x & 1) - g=0.0f; - else - g=255.0f; - } - b=0.0f; - - vsub(ldir,lightpos,ppos); - vnormalize(ldir,ldir); - - if(seelight(ppos,ldir)) { - c[0]=r*0.05f; - c[1]=g*0.05f; - c[2]=b*0.05f; - - return GL_TRUE; - } - - dfact=dprod(ldir,norm); - if(dfact<0.0f) - dfact=0.0f; - - vsub(vdir,obs,ppos); - vnormalize(vdir,vdir); - h[0]=0.5f*(vdir[0]+ldir[0]); - h[1]=0.5f*(vdir[1]+ldir[1]); - h[2]=0.5f*(vdir[2]+ldir[2]); - kfact=dprod(h,norm); - kfact=kfact*kfact*kfact*kfact*kfact*kfact*kfact*7.0f*255.0f; - - r=r*dfact+kfact; - g=g*dfact+kfact; - b=b*dfact+kfact; - - c[0]=clamp255(r); - c[1]=clamp255(g); - c[2]=clamp255(b); - - return GL_TRUE; -} - -static void updatecheckmap(int slot) -{ - float c[3],ppos[3]; - int x,y; - - glBindTexture(GL_TEXTURE_2D,checkid); - - ppos[2]=0.0f; - for(y=slot*TEX_CHECK_SLOT_SIZE;y<(slot+1)*TEX_CHECK_SLOT_SIZE;y++) { - ppos[1]=(y/(float)TEX_CHECK_HEIGHT)*BASESIZE-BASESIZE/2; - - for(x=0;xEPSILON) { - rdir[0]=rf*norm[0]-vdir[0]; - rdir[1]=rf*norm[1]-vdir[1]; - rdir[2]=rf*norm[2]-vdir[2]; - - t=-objpos[2]/rdir[2]; - - if(t>EPSILON) { - planepos[0]=objpos[0]+t*rdir[0]; - planepos[1]=objpos[1]+t*rdir[1]; - planepos[2]=0.0f; - - if(!colorcheckmap(planepos,rcol)) - rcol[0]=rcol[1]=rcol[2]=0.0f; - } else - rcol[0]=rcol[1]=rcol[2]=0.0f; - } else - rcol[0]=rcol[1]=rcol[2]=0.0f; - - dfact=0.1f*dprod(ldir,norm); - - if(dfact<0.0f) { - dfact=0.0f; - kfact=0.0f; - } else { - h[0]=0.5f*(vdir[0]+ldir[0]); - h[1]=0.5f*(vdir[1]+ldir[1]); - h[2]=0.5f*(vdir[2]+ldir[2]); - kfact=dprod(h,norm); - kfact*=kfact; - kfact*=kfact; - kfact*=kfact; - kfact*=kfact; - kfact*=10.0f; - } - - r=dfact+kfact; - g=dfact+kfact; - b=dfact+kfact; - - r*=255.0f; - g*=255.0f; - b*=255.0f; - - r+=rcol[0]; - g+=rcol[1]; - b+=rcol[2]; - - r=clamp255(r); - g=clamp255(g); - b=clamp255(b); - - reflectmap[y][x][0]=(GLubyte)r; - reflectmap[y][x][1]=(GLubyte)g; - reflectmap[y][x][2]=(GLubyte)b; - } - - glTexSubImage2D(GL_TEXTURE_2D,0,0,slot*TEX_REFLECT_SLOT_SIZE,TEX_REFLECT_WIDTH, - TEX_REFLECT_SLOT_SIZE,GL_RGB,GL_UNSIGNED_BYTE, - &reflectmap[slot*TEX_REFLECT_SLOT_SIZE][0][0]); -} - -static void drawbase(void) -{ - glColor3f(0.0,0.0,0.0); - glBindTexture(GL_TEXTURE_2D,checkid); - glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE); - - glBegin(GL_QUADS); - glTexCoord2f(0.0f,0.0f); - glVertex3f(-BASESIZE/2.0f,-BASESIZE/2.0f,0.0f); - - glTexCoord2f(1.0f,0.0f); - glVertex3f(BASESIZE/2.0f,-BASESIZE/2.0f,0.0f); - - glTexCoord2f(1.0f,1.0f); - glVertex3f(BASESIZE/2.0f,BASESIZE/2.0f,0.0f); - - glTexCoord2f(0.0f,1.0f); - glVertex3f(-BASESIZE/2.0f,BASESIZE/2.0f,0.0f); - - glEnd(); -} - -static void drawobj(void) -{ - glColor3f(0.0,0.0,0.0); - glBindTexture(GL_TEXTURE_2D,reflectid); - glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE); - - glPushMatrix(); - glTranslatef(objpos[0],objpos[1],objpos[2]); - glCallList(objdlist); - glPopMatrix(); -} - -static void dojoy(void) -{ -#ifdef _WIN32 - static UINT max[2]={0,0}; - static UINT min[2]={0xffffffff,0xffffffff},center[2]; - MMRESULT res; - JOYINFO joy; - - res=joyGetPos(JOYSTICKID1,&joy); - - if(res==JOYERR_NOERROR) { - joyavailable=1; - - if(max[0]joy.wXpos) - min[0]=joy.wXpos; - center[0]=(max[0]+min[0])/2; - - if(max[1]joy.wYpos) - min[1]=joy.wYpos; - center[1]=(max[1]+min[1])/2; - - if(joyactive) { - if(fabs(center[0]-(float)joy.wXpos)>0.1*(max[0]-min[0])) - alpha-=2.5*(center[0]-(float)joy.wXpos)/(max[0]-min[0]); - if(fabs(center[1]-(float)joy.wYpos)>0.1*(max[1]-min[1])) - beta+=2.5*(center[1]-(float)joy.wYpos)/(max[1]-min[1]); - - if(joy.wButtons & JOY_BUTTON1) - v+=0.005; - if(joy.wButtons & JOY_BUTTON2) - v-=0.005; - } - } else - joyavailable=0; -#endif -} - -static void updatemaps(void) -{ - updatecheckmap(checkmap_currentslot); - checkmap_currentslot=(checkmap_currentslot+1) % TEX_CHECK_NUMSLOT; - - updatereflectmap(reflectmap_currentslot); - reflectmap_currentslot=(reflectmap_currentslot+1) % TEX_REFLECT_NUMSLOT; -} - -static void draw(void) -{ - static int count=0; - static char frbuf[80]; - float fr; - - dojoy(); - - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - - glEnable(GL_TEXTURE_2D); - glEnable(GL_DEPTH_TEST); - if(fog) - glEnable(GL_FOG); - else - glDisable(GL_FOG); - - glPushMatrix(); - calcposobs(); - - gluLookAt(obs[0],obs[1],obs[2], - obs[0]+dir[0],obs[1]+dir[1],obs[2]+dir[2], - 0.0,0.0,1.0); - - drawbase(); - drawobj(); - - glColor3f(1.0,1.0,1.0); - glDisable(GL_TEXTURE_2D); - - glPushMatrix(); - glTranslatef(lightpos[0],lightpos[1],lightpos[2]); - glCallList(lightdlist); - glPopMatrix(); - - glPopMatrix(); - - if((count % FRAME)==0) { - fr=gettime(); - sprintf(frbuf,"Frame rate: %f",FRAME/fr); - } - - glDisable(GL_DEPTH_TEST); - glDisable(GL_FOG); - - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - glOrtho(-0.5,639.5,-0.5,479.5,-1.0,1.0); - glMatrixMode(GL_MODELVIEW); - - glColor3f(0.0f,0.3f,1.0f); - - if(showcheckmap) { - glEnable(GL_TEXTURE_2D); - glBindTexture(GL_TEXTURE_2D,checkid); - glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE); - - glBegin(GL_QUADS); - glTexCoord2f(1.0f,0.0f); - glVertex2i(10,30); - glTexCoord2f(1.0f,1.0f); - glVertex2i(10+90,30); - glTexCoord2f(0.0f,1.0f); - glVertex2i(10+90,30+90); - glTexCoord2f(0.0f,0.0f); - glVertex2i(10,30+90); - glEnd(); - - glDisable(GL_TEXTURE_2D); - glBegin(GL_LINE_LOOP); - glVertex2i(10,30); - glVertex2i(10+90,30); - glVertex2i(10+90,30+90); - glVertex2i(10,30+90); - glEnd(); - glRasterPos2i(105,65); - printstring(GLUT_BITMAP_HELVETICA_18,"Plane Texture Map"); - } - - if(showreflectmap) { - glEnable(GL_TEXTURE_2D); - glBindTexture(GL_TEXTURE_2D,reflectid); - glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE); - - glBegin(GL_QUADS); - glTexCoord2f(1.0f,0.0f); - glVertex2i(540,30); - glTexCoord2f(1.0f,1.0f); - glVertex2i(540+90,30); - glTexCoord2f(0.0f,1.0f); - glVertex2i(540+90,30+90); - glTexCoord2f(0.0f,0.0f); - glVertex2i(540,30+90); - glEnd(); - - glDisable(GL_TEXTURE_2D); - glBegin(GL_LINE_LOOP); - glVertex2i(540,30); - glVertex2i(540+90,30); - glVertex2i(540+90,30+90); - glVertex2i(540,30+90); - glEnd(); - glRasterPos2i(360,65); - printstring(GLUT_BITMAP_HELVETICA_18,"Sphere Texture Map"); - } - - glDisable(GL_TEXTURE_2D); - - glRasterPos2i(10,10); - printstring(GLUT_BITMAP_HELVETICA_18,frbuf); - glRasterPos2i(360,470); - printstring(GLUT_BITMAP_HELVETICA_10,"Ray V1.0 Written by David Bucciarelli (tech.hmw@plus.it)"); - - if(help) - printhelp(); - - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - - updatemaps(); - - glutSwapBuffers(); - - count++; -} - -static void inittextures(void) -{ - int y; - - glGenTextures(1,&checkid); - glBindTexture(GL_TEXTURE_2D,checkid); - - for(y=0;y -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=ray - 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 "ray.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 "ray.mak" CFG="ray - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "ray - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "ray - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "ray - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "ray - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "ray - Win32 Release" -# Name "ray - Win32 Debug" -# Begin Source File - -SOURCE=.\ray.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/bucciarelli/s128.rgb b/lib/glut-3.7.6/progs/bucciarelli/s128.rgb deleted file mode 100644 index 79f5c1d98c6b614e6dc20863fe782bcd0ddd92df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54258 zcmeFYXOLvsb?0}JR4_Ie8x)sXK@_!uNDu%?m;o>tjJG}0-P7Ke_r5B<_ujjg-h1!8 z_gR@$S-z|N^bBSOg8>OHK`y0WC>R?IMM<}{l0L4!NFT`9?&!#h>=!5M-QWA)d(Quy zhx!bK0>2Fe@b7Pf|Mcg7fAN9C|1oY6yZV29^OF z0Q|)>0KUHjzz_Z&fR|VR{P=eO_=ypKpMDd7SCRm{`YHgg4FGuKIsk8e2Ef~E0KD@L z0KCTm;Ddh!z&SGjAN?@^=hFaOd>w#~cL2D26M!q918{8vfb0J&05=5y-2T@9+_3|2 z@7n;33>l^^=`v7pK0O0)^009XA;TZs86#&w2 z03Ztjpm+%YWfK7P1pqXU06^vd(ESDg0}TMvZvkLN0I>cM0JbOqj+X&&b^&l-2Eg+S z0N)Y-{=Wwx$O0hzI{-xV0L1njkJbSA zJ-AN457+76I05)?z6<#m0roft^X$r2>G+d|I70Ca80bqdxz|y~h{EYyteiQOf08!d{{a9wcx@iWEyB1Z7`FoB)?nN^jN629TQF`1#_htmeR%CQ zj5~yJcVOI+3V{7@K>k4hj$VTNn*iLu0Qo-x;NcwP{~M@%xK6)shT8uo-W zzX$m{q4vKE`4^$~--Y}Sq4vih|F5C;aghH%LH-h`{ojZD-B9~~4*8d%_TPv6kD>M_ zApgIF+9yE%{~P2F*Xa&ir@L^S#^5@Q!*!a3>of(|X=VoU|MyV)6sUaw`D>u|zXACN zq4r;b{F_kw@ZQnz-m!C#|8Jo7X;AyW1^FXT`+o%aN1^s#hWxuw`jaw-4hEVB8^$y9?v){T}4+gxdcut;`AH4qm`T76;?w|YTKbL#@&;6eNx&Qm;&gZ}U{{Qcq`Sqjj-Y#Xe_yP;v-OE`tO&b!X!I#PuhqYosYWo;!7JMIwqM%&cWH z3$t|n&7Z#h?VtU{Pp_e+S~+QUQN+WoeK<*Eu%$*b$0}0r@hlNZc>}vKN7=wI#Zr_M zr2}Ushu!4zlO|{cV^EQPwm-1=Lg9X5uTaXBn-z01C1b!ZQl4xvpUAeGnsV1)uKAPc zlS8jHS&6FFAZ0spd#y*UY`$B`9On{; zqd_5XVvQyOv2L}ADxebJOdyl;#nQ3&XYP=s6x((wBT%U|aYNqevbv)|k=;&QR3Lh% z+U9hdt>FkGkW_ela)+y4R*3C>E#VHWn=0(5U2Y`kR5Hfzjn6JB);D)@pgo ziqM(~)O==J*k!4D9ff$pt*QxhdKnV&MNnRp4V=xdtu3ysz4j;X{Pgz9ZC1o)Si#}8 z`qP->QJKki+HC$?x1=y2x<^%jsG;QY+~FYJ|vP5#tV?ev2k#n;cS0sNhNG z+=*z`;|lXxT7w)>>cg(ZtMr;P)5_}YdWXv)V`K4Dl|#uf$YXJlQIT3^`5 zNBl0c#aZ0x295lUurh0r+SJAfR7D7!iJ4qJapRSrefZrOrpT&u$`wvCfse-Bo}C@j z@)n7g#}=k2tWAd8!q@7#D!HD|Q>@Hl$r~6nNyd8XyHg&4$!{bxNn9>-W$N0sJDc?N zY0`#5wMxSn%S!Tx?{jei34f6&;n3(DOFSea&3-J|(ovQf7_t;4K}o?`R_`=66d) zKJ5hcxnj0lmIUKI#Ac^k?4eQKn)N-(vV}ywf)gnue7Tg#r3sb#qrB4|4adq+cf=B@ zql%~~ICF930)=&YVtr9(%tXs|pQC8DN7gAczLXyj$thTeRAsSCt$Jl~7&OL$4!_fb zVQS=3tw~2hkIxKu^Mi!l7GSIW@( za|Iiphag5DBGK}YAj*R>fHU^&*76qpowqK&ho|V2HkXKFp)(}s?@TPNFG<$6?p`2^xz!1r*kobOPvh|v0e%@bPY^>@P{5g%i|6az2CLo>uGX^E z`pJW~q3<+0Ljiv-@6I8qrb!zO@C&u#qoY>*xR)zRC=!EOSIJ0e3yf0slhNs6)e`FN z?;llkVx7xc2}=BtZ>GF%21T;k*@Egr~ze8eVDAI+LNTo}v zwMsHur41@j$`{Y%)YbQI&aO=^%*^71Vva=S^eSf+3u6m7Jch%^a3`sfxhXRCDqkv& z`c!lm!WG>9@YeLqB9CvymM3mp z9mj}-WGYd@UnfnXb!KD*ja8uu=)2PxykrZ7MQy_U0l^|}L$>F(B>VMTymK^?^3@EV zE1#{m6Iplc)0$9`i3CRR=g$ViQr#5Pi@1hZJQ!CA47>X|_ffM_uo>)?Wa`OwQX@$u zvYFs+qmjr}3tE*C_nAj<9TDY&>tlcx7nKyqLL^lI73)dTm{D( zQwmM-pwkqu76_Y^MTOMm2u7_=scsm;Q5||s(XhQ!%=<%J6%&i*>a98*5zEWv%;KWo z>l83Jc9U(8G1CcVgVm(WhJr@B&&8l~2xy(Z8FH8`!F0>xclS~ulapa_CQCM!oFlcX zPzIC`oDpZ=TSU(?RGW)bt%6HY+Kjg@-}_)|jmHtoY3wyZNOWU@ML?VA$*jXHQ7qwS zZ(f-tvZ%!CSLgLQ`i5O5;x0_iFv*ONjyiFRN}`ds3=$EEEn-hh%-+625PPI73Qb}R zizU3UUP@+8QJHEBb7pgPoryuwP^;j~PD^bE%|V+*n>niZ+YdrEshFQm+e^FkS|l5) z?58cYvb*+bsjxF?xj7M%3)lnPX%qM0?Pd2_Zhm8p@3*J& z;iOR}#jJ93al6M7vWuAhqLLYFMg=O1(`m2ggYka160=Cmo{9y_wQGfD7mABAg0r>r zTr+7AyRtONa4K*LH-7onwTm>)hR`736IeKbk-jYDFH1f8VmgfQ(6jXE*=Z`5C*gcV z$!U;H9G80aor~w^d33d2qNZ%FUAr)6(6G2P8E0iiYRAv2Jjx|Bjm_Z)ZE{UCWR;TF zXQP?mMa{zY@G)W zzWnsC9&q|1cDbdPDYOgX#xKfsZy}e*t`l(4!QeQVI|wM-?2lTXC* zS%XJP(Mhub2)qIN3Ve%#2`1py}BeK~XQ}^a)kZ_`Ab5(Ux((*lK z*eR47d|tgWUyYfIZNJ_e37OobkUCPUCK5W6-EYN=bKE+n-h@J4oZWY)Ogai?`R?j6 z*=SeV9Jr~idvj(4F`H;~9F>d+Sv;$BM(Fkz3jqxUgCi{8TjJ2gI__1ZEaWe<>9p5= z`p(-}vBFAc+lU)?&%Zh)=Pj)hMIs8;=0R9izl2PaOKBpvnxOEwRWdAng_a|W_6oJ#LH?lo^zqLh)ho$D zF&ysPALdj3&aMG7N6U3&YM&pqi|THB!2IHZ&Q0^C;Hn5O}ESF37Cw@PTpyhhtu?XSJr$fB2A@%S#=7W5hPNXn7wdkWr?Ma8~p06 zw@FJfgF0lFsI&r^*eOS3M#_pnkd380EG<^C6XlZxCPqz=n_)F5DGiU=F*&GYU97 zg>3BF8}GihdUs;>>NrEsmYDTihd!1l1cY3YP|jxR!d5PML#iEn^+#8vhMV`cFmRvL zfU{VrwBKt+omoSo+;!y-Y}BH?T^M$&{nKu&Kj;SIfr2mM)bt0fls%U%x2vr|E*s;o zP9r+4jLQu$C81>J!Q=swqV7Dp7&V;F)a!2jG?)H;brn6f-=U zw9cPhTbmijvFAjrb>fymYfZ{2Vl~fYaybLcEzB4N^PNAP7x`Rh4o3jb?gen>F$W68 zbR^-GcyjfSukJ0j^7oHY?W0kz8tXRHG8?@0j4fPlg@gWVu~y0^ORa)|B4$~(?G#rA zk@p@)TDwQBkXT@HSav@9)x%Cb;?tD^(O6OzOpQvts@c1Dw7Wan?NzlfWjid=tS3j+ zcCi`KqBJNyI1_PnKCjbgRNz(as9xb$xqYTu$rLJPV_rid!XO9~h|4k;(XE(#8#p5TR}g)>%Tj$4--(^=c7WC7Zap zuz_7C&R}?Q5&K+GC{?ZW$us=2qx~Ax$79vZ&8^Qlc<(F(f?7RCxPBWohMEEY(I4CHR)&SDir3gX zZ0DSQbE~tn(>y7*ik^Ng#8X+baj(jD5I4q+Dpx!a@S8(%z13^Rj&kl`#>caJEA2@A zxDpLyYRz)*+4Cn)EBR=;(cLaJTkUSMwo{F^`rG~ECl4|PhSH!uOsPVl_-{AF+d2)( zin7BqOP@`Liv9o<9W6H!HldQ^4P-LGiX-Hbr-H~9g>Tc#i2S^sV-c~Humn}|vF^`WrS)l{)M$`e*%JPiMvT9FXO4zjxiM!T z&QTX8F-!&qJ%`3l%r1@nSVvpjWD&2f;I$?S-_FNwGQ<+TK9Nc##5_7rrPYa4YOPT% zHcClKy$10n;?lK?<8zZP)*S+!kEkTd+c)9ay#~$#$^P#4=&;;yl!v?JZa*46EG7!w zWNj~>-`$QQ?oy_wS4Rr5ghM4ZSj|d9*uf=rnk{W5o{4x(p=_rqr8N$AI?dj3D_(qX zJWLri$%9_I+341Lz5RZEd+=Z{)INam)9$oEY|@$nu3RgVHtK_LuZFdr(wr$5Dve-N z87`GW@wir#wdidTQ=sT_<sZl6keN-rN zHo}!`IFP7E^v-sp=-@DHm1HCmj0TdaQo@-|)~iUo8Z1`5S{IKbX7dqEFlo1O7%G$t zWddhdy3u8G`4lR&!r_vulvr4%kyr|f*u>)*wUo(K4n;P83(F!=F!`i}aZ7q{|Cd=G;u2CZuDQ#ksAmFw07iZXZM5U0aWCo){FEAPdZj#y|wK|13 z&fM*l*##m&re!l`#y3%%7kN~@RjbvTt(~;7-wcMuMYs#;3$1c0nmu}cG<3_nWxaaY z=rp_NY;(MmbBFvQEsk2RwemqnE~d3KM%(h)^i4MF}OQ zMO48m+^E7n1>(=gBgyoz9kaH)wn8%EL3An=ly@ZS5TkJpF4U$AoJru4X>|s-Xx(aH zF>i6$0`@pf#HCSr&X`@desi5WdFKaHEAwj~UR-4Agcv;f>e#FANrhqtETb_~Yg(6c z<@MKP#0|_kbMAe#+$tfG@p6YxE0+r~WSK>y)*BK*HPg*wn6xSZ9>29E64Mn1*2XLHL>MdzVQhY#CBRW+Dy4cF>oyCh7erP$%JSme zEafZBVzoLP9PY%9iyBqJ9(Px~W}C`Y+wNxVxu!{HRobN)9>ZR5$FtRJKuJY&!q)j& zXhN%^2ag~4X14T9L0D+v8JsF>#*}pSpZ6mE2+v|nIK-j)@TlJj7?pCRIOWx(>XCF* z5gHZ}Im7Ap9_rZ(7A~tN5{v{2g=X2>3bCmsiAmy?arhKzI1BY-kMLOnqJZGWtxLi& zi^FGCk{8BSHQe(b&XQO}YkM@bjIBslH*|Q>CPPTz7?}o98aiT#2@TB?IS~mJ+p(aE zOT-beb`8rOHo9$0b2Vaf(5smWYWsy_&SUZAVuiwG_t}_!`Rq7(nX<-PpIx}SCWD#N z5<@aKy>xHoF8}(46`6*~6EnANzw_e{F*D!!&O3K!?y!RC82$Cj*pENLTwA(0zHoP$ zF+*N6rA%}@>B{T`6@3dYw*@rf&AHpxu3w>JrWjJHkTc74%IS=IHlqvHSqL~gI?Cl- zk^aN&tfzRCt`%ajN@x2dobq*Qg}fgrM0EL7+U9h~MX8)a?k*W6ag~$jBrf7%USmJ` z)h89*v}$N}`4L#!haB;+FPGe@WF-ukRHy|Tj8N+E*>2evmGRK?YO*-xvv`!=Oib-b zm71k(RR2Y-S1wx}YD;!d^lAc4Z`5Njcq6GAH2LB|w_D9{>6k8?O(d7o@K&dUC~>jS zdXjieIC1gbI)N|jKR-%{Z;P8kv4%_DR4RoAjm&B)g}s#ZRR)`m9bbn#>0a6{L$GUO zSJ}%%yGo#8>pXV0!tC&SGN=?P0R0CmgN0#PQw}js>=7yjBoa@ibK}SxN->Xzo95!D zcr5lB20eCz&RM^+#+kZ8xV3y?@wGpH?c&XamDnJ!S$zc^-B{R~y>n>;z0M?Uu^3jF z;NHda<5OeT-?&KR_|kgz8vgo+FaO2l2R9g)Rq`TL$e!CIvqWMuO8+8%7>&%+^(VxGe{q`Pg4NoES_k~X;V?qVks%^$`cY$kNfm2ssG`pH~^Rx4nL$H)rzYGTfNB*!2}YefopVgflvXc_M;mjW1rh zd{OA8u#`c!)uf6W{b83I6-8Ac3(MRB#Sn{d=$kYt3E}XVG?qPXR9Lcd=G^SH@r6w_ zmPq1K=5Apza}&$!KO3{jqI$_kA1~ayJ45M@sv%@t6m#Rm8_@1sWSdPkCx=3syYcZy za})3W=@pGg7qerQh_|PI_THa=|Jw_^v01!AK&RnVB&nP)f;A5GtH ztXAH;f3%(0d79HFcB=^ulgyQ>Le&!Vh2rjLBb$o4^s3OP+w}@XMwPnw^f$kL_~cio z+n*or-tU=MB+>o$?oI@8`2|v6I)>c3nXHT+9;F+Dp?`g08xRq~Z1*_BOW}=WYa1?3`MQhVD&%JL8W}6L1D3wuQmu9bC zosvptMai<&77h6lm5M$9Sp?zPEnbsQLP6>{6|LnU8jsr|#hEjLNtTmKnz;DR`75`{ zN(mo_p{x+U4$wz8CmBWODh}d)W z?fbue-Yb`?yIOPgVJ|Mxi$w~5>-l!5)9HH3J1MV8Y0zZyKEoE#VAfgo|MKsCnXW#4 z_TbCo<0n}b-dZWTo26K&T#vbT_p2tQc&~Ucw9~8QTF5CO&9F3bHWG1XN;|d2=%8F3 z9H3&TE;#d4yBjkQICvaYo7l_i6Pc9UlQGLVBo@_T zS1@i*viK}s`RQMN5=f3lJC9n;fqQLA81O2BZnNI)*DH!;FONwo`}0Zha?l^rN(oEX z&`b)NV^p|8#Xuli^m$`>lnxaGXHwWDQbm-r7Z$ffT4%hQM!0OLdwx+7R#9%xT)T7w ztw|ZlT12zSL#XRBws`+~K z(?|XKaIbwozyEBIi#d7;hdRCc#l!aLshJ&acuZQ3PLcLncvzOt+v@+-Z@xa2m-edn zpWQ#G@|I@l_F87Q-tU!*&Ee^jtp5H;2*6r1Zn(j4GMi;0Tnw92GGE;6; zQMni0Zhx|5l4k2Umpv9px$f^~!02ixS2~`)6iDOnf9Dt z=?Sb}#*5cy$37ar&Dfav=#>vKc%8Ys-wRD?Lr6U5wn?wO{QVEtRRW{bWZ<$S29J+6 z8}y0T62@Cg7DU3@K+oRQqFN@*wMeWX(Ro51%xP8NthHO!Rf>UVxxath-G8<> zI6NGj91re4+z!d3gZs7ilV3d9ZQgI=1^u=!?9~+FakodoKrG2G|LSl5{_|eraHsmH z-)-4M3v*biC)4aVdhtSb^yr{5I*jv`A)BdM^c0fy3O7(@6S*Q@VcTcS<>HQbHxx(t zUetQ2N`w~;!&Y9t-p+Rpn}u2>Q)?7E-K?HsNHw6(eKIUXTbWsOBBIpFsZN7lDkm&3 zg!Tu|zx?Gjvu?3|)5Rax1o3+p_1&S>@hOTDO+%ARN5(;eTLmP_( zD$ZZf@?Ca>XNanh|J3!@JC!RM4Tq~RdBd()IqdX0bZ)=JA2#9d5Hv2SDqN14q%Om` z8;D{HzkZiRqO2`ndv9`$*BBli<>Yd|OO>#wWlPt-_h+wtL=Y+vt&zxNn0;_u!OOZn ziJrX6WNq+hQppX9?9xYf?p>Ey2umCWZh@r05>e|YA~>tGdgbH2l1ZFv?0$6^?LIy2 z4~`!0_5&d?L!gXrKmF>fUafJQlxL25^?uA^RE1JSKM!_||N1}t?cW@RY_aNLH(!HJ zx|+BubcAx*S~OEB4GzPho_rHaP$(_sOd=fKDJ$(tjFv(1mQ(ClIvezr()uXusX1Uj zE0GPiYaubo8?QX>Itshpbhg$h<@6@P z=Z4wgP>S7FrUpeoNuUp-F{*+-)!IEF;)T1jD;w77Jz=YfM!oUD#Tz7TAX_rZ6(0T+ z&xOb}gxRUPcq(iC!m89cIyo3v*B6;er&%UhzP&K^){m~EX*{-qLFe)GRvcP0{np#> z-@Q4>pi=MzlXMzA_14^#b7%?sGJ{E9U*WQ538-5yJdkp8xV?8!ao7jV<6jIjN1u*% z_D&ymT1Kl-$u&m1$B!TG3_B-I?eM{9rxguoMe#~1r0_NG|IOe1^(RLmfi1m1sFx9a z#35i?P1a_;?jDvJjh@X{m#%GW31rrAJ{ZXkVllsj>Qjl*VXI+Sh-b2})=I!$k{6r> zRxcw^hmRT3+!iHACWwHiCT4ZDW`rVJl@k*OFWHo91_(hA~ zYL??S?_H(vDOZw0h;j((;BvBFE@BQn`9zT{iLhYj57X zHM_;a5?BT%i+t}KZt5D1xH50%5r|~57*9dXqA=jh>kP+w2invlS5CL%xv(YTQLF3e*6~+g{$lhzuBs#(>1;e$4Y^CL zt}pNMYK%Kp=#NzES!A9hMKjy>XsBIGI!{JTX}RS#Al`O86v;Gq9#rzE3~C>G<}#x- zTg!yg+wS3m!_$4YzvYa_W5s}9rtmf+rC@*-88xarb2}dFq>T=QhsY@8fIZQE^x(9# zZJ-8iQLo>uiI`wZB%<~z)eL??sFm0~0VnUq9BFzjBrxgYKAWsjiW7ZdF@vd!M|3)) zC)4)Z;PX(1p7}bJZT7&PTu_*77V8Cx%){1dl~$Q>3(a*(&3xXZBJOpsutSL4uO%_C z^Q6tYcg1X7s9vu*f`oB73)YHUlAMAO$rTv>`o{QzaS^}H;t4p5FMn|F{j2gN5Kj=|HwK7$p0L+oi`}JbJia*zv0E#(X|j*0MXp z;r&*g>U;dzp!myQ47-g;;z`cO=i>zBLT&iuFMs{CRcJgpdD=^=8y#DBySJZ=Qpgmi zNt*ALi(ZFzQ;}yWYoS!QTB(;mdzKRPlkk{W7exU@ysrc+!QUBU#A? zw~vQ|x;Lk0DuiC2EzDVuCR4SrV^+C+SoA))pO1T$mK~28haKDSd84JB$4`ebS8TVl zo3qm*2}v>?%b9d@vkP(&$(``H6mrfa&9g=gB36AU6!wos9(>ArZ7!U(!#&0BG52!N z8AK()83V`HTg(il)u4!%;xUiJjG5e6hWLCXW%da#55QlWGB1y3!g1!|nY~Pam9qvD@1fo2rRQ(Q1u22iaE0 zYs=Rko^%d=@#XRTVXFT;WFs+{4uf;J{q-+*6SClN&_C=aBS($y0Nz6&YL{~)2{>tR z&?pc0v-u%cH|%!n&7;;q+i$8o4GJ>hnA$hm9i$t(Eg{USOW;f+cZK6cBlJ=CTCLvw za;iWOMC>8IL}HeutYNJ}VD)u6naYEcMkA(8?dt>!>x*KpyjXbhwB=Z( z(KzBXs1QDW4R259+r^--SogXzYn);x8ICs-)r4Le8R&^#qlt;+QxRi07ute-f4EO# z*Le!Hk%(2=Q+{8#>@b*bE-E-mIR-=DP*Wwi^%)`ywpBchvfCras^j>DbC*9{o!_!r z+TDP7ieRzZ0%kVV3%OB*R5Wh(+DA9oI-}Ptk=eX5vEkB!1%XplL4#LM+fqkKw|PX; z9Lb2t;h2N+3hZBqz?s38O&0t*eQlJjbe}yOZSQ)zk3WC%W#7ZGK56uGJEK~6P(MDr z-z*H%rR}aKos49*{l(_Vvr53nMY8Q;IvVRVplC#C*nWt?*`?g^a8!uZ+7I_1?z)cp z@$`1JeDb)_IlVv3?QO$G#qepfQO-3JF;wkEPRo&a>|Pz87p=Pd(cNJ+Q_y4vM}w2B z8ZGVylg@0;8_C4m^vW7aH}7M)qU1g&3o0lV$bh&IU^P`D)hpSnqA>@g!uUdnT0J> zrqUjhc}pA1C(2gx)g_Nm#nx(ALaho8=qcHHGE=QwCej%^BT1t1=M4hR-37Mtg{cb- zKMDToi^>AKy0{^R%-KY>F%=AIS6o&OTdz`wVj5#8V1Pp_0vy>Iln6OIHHQvo)u10G zG6uqtU~e?YtHp=+JNpk}h12fvv(I|Tb?l=D4;~*3M*9zP)qIG71oPE)L@7V`;y1rM z*w5_*R5}GkWYy%l^-8ah))K_Q%qUqcM%qsr$+X?GvvW|cQnO((jG#@29e1 zxw#F8;-cQc-r#wEh&n~J;4{gG{VsjBl=m`lrEad?vjlpX;=w`Iac`>IYIRGgY`*1< zcnwQbjU$jUlL^)1r^n@zGY?Nk{svLZbf-eznA^sf#;9z0qsO6%4x?6^NR}-$!vRZd zpu~tZLJMr{wJJ6{LKR1K&az$_&!vZ%BCP!*;OzQ5nNA_-?FR1Hb!!Bk)C^HTZ_Q+k z+@HPSaY98X)realXJOyDjpGPa#A{cbrC!+=_GEKc$bDk&UMn0osdiillp+b?ZmwWgV0vToJ6SCJ#De1nD zYp)si9iDcBj`kZc)7ETu@;urqhj55e2I~a5gzVHw*1`wOK~RdZH%UmNwZdw3`u*{Km9_ zWcTB#MiYl&G8@(xmPqW`53kP1eDO#~ipFeBzyG7}zcn_c3)r+*H$VRH{ES$STb_JF z3inr=_}-X+FCz$a8qyS9C5Cgjh+QM!oSc7UO2W3vv2?Rm=XKgqd=vwm8KdsdgWc_J zW4HO_i_cPo(&#sT`>ThKB1r!D7bgdulm5d|A)Rh#+J&Ykt6n1sY|+u)Fy=Msqc+|W z$E|dfv+zJl@inG&8Ma{+yj^&8&TlbC8nxEWpsnaWK519`pFhla^%QcLUEV2Gd)59? zv;L@CLpf0eaK<&Obj@5k9?V9zPmbLS{^GOekNVqYp09q?swEq#X5MXc#9%|jD|66p zOl|P>`C`_j5^%Kq&FdR7vNYhKF$l&@2G3+y({T8WvODQ?srej*HxS8XB7}IS91diU z`fe3_VP3x(deI&ZCd*-8Gww%;Ui5kAC|HWufT(2#WweyzyeG7D`?W}fz96)xy)Kr&y=)E(NjnI$?4H+l2sC9BXR z65tnRH+Uko)hNBC4OpZSQ!d2A%)b9F;i|$cR+{99O(u4$C8$-%A{I==%16z{5KicS z_US`C@!?P~?8tGK31Uljzt;%F(y@w;i*=S{ zo|uoK3?$4_cO~YuXv0(H0wwlc%GefqWomQdSJ-i>S z?dGy@uZDFu;;{Hj;Yc=^3hW&YMDyk9(?>hSs)Ft;9W(~Te!XdPMBIo{DRYXQYnR4g zDxXh;v}UK-!`PUR`H2dXW|5-Qaqv=?lEWg1bgfd^uNA>L#Gu0+ONH6(vP*|VM|sx9 z+We|sR?3Cl=|s7v_hsxhm_NWA2FGMb?J}7`rkAC&k;Qk-j&?IUvMBW17hYZA+}NPvKD>vfEZsv3FblJ{mx*4xOHNwH zEK|g6A!3lu2JBoSNu4lGU%L4INB9l9StT*)94?XwVKRRU3(m~Sc;#WGl=Suc%|cd{ zJvjJ$xBYa->S$!zr%yh8lC{S68b`sPB~%aU@v}<-jWy)4rM-`z4&+2zF=}uc&ALq7 zR}B{nMX%etbG*I(^L@R2&_3yTVmqBw^Z9pTvNNGM5_;b3BgEl!2YQIRGcvxd7V6`NoQi!NW7-k=Jc z`hY)`>o$_+ie!U@!lNd@+2S};>JbQ7c%4?x6-+Vp#*|ebx2|t07^-l(kYF!REON)@ z^30}~GWWA@e;+drONS*EE)rEda=L`iTwPhy*i7!6YhgpLu*nv& zdNo}dM9{PMShAJB_|99G?#*+^5~Is7jcsDl%qtrj_>|~;j_h7U!&b+=iE<=T-L01D zo!y=7cCOeuX%ArqoUFBviwcS&>@B5g*=!*bP0;U5E-%5uPZ3M@c6Ra^zm7V_7|onLJl%C1>{e>Wqw0=M7>&4nHj8jogkBb0yT#n#8fh}I zqikfXk`RT}t=9T7UWXqR@2Qa88LEUc{(#LIid5Z%DZEDEHoEk1WDBvZd~oT`4YqecsWe)yB|3-i>8jWv#ya`)VA;uf8`juo1uLb=`nCsx>88Eo#z!k_%v%RiafyfsN-*xeR31HJslk6%T-g8BhCvqVQ(8OLgEoD?!) zZv_scW;)M~9_@bh*T4Au7oUIfuwEVXTRW+^XmM>i7~Ue$B>7^nlo>kce7sp7NEWi& zupowxdZWMH9rkwa?|X9F$r{Yc@Y8G3jK7|-s2RFJLC+*8=a-zZP(0@CoZR2HJ7`)Z z1GS7=f*CE6cTzB7Ua;zN7_~kV4{wZ&TK)2a=MRqWACG!rUm_7o=#97=6Ia!SdsA~* zhfD3YrNxWu;~a+4Xfq`Xkzgzm4aO7EOgvL7DqTrSu#j<0d~^eAReB99;sP`6U@cEl zZr+fZ^k%&x->)XQf;k#_33UT?9h}YJ4D7pCmgXf+5tl>~5NEDY)R|z^S>JBfnw4}= zEYQIBRknz?e)jfDXu>P6zkQ9z$8hM{m2($fou1ev(a9>KLZ;OsN<^zPAqKk%Eif>} zMm_(vZ~gEpZHrGHzx>{ukvDt(&ATuCWRp&!lCbWi3z?sL`}Wm0QQv>TqLmKInQDcx zo@bi(e*S5}T?`|9ZsGaq<4=D1)vv#<1qM6CKs@54;~BI}EEBf44)#t?VH-m(V|tQ% zC$)YwRLGySO2z$QX}G(SwL0Jt({Y92TTu+<$cXWnsfFNxNy?qh!0J~~>eixS&GNk~Gai#hFS5zFzC?tk zLkt^&N`Vu#X}etyPePT5xg6*WE7eRo>Ky|n5qC%9-1dh+@e0etPI*lu>K z3Y^}+LF3kz&Y!z}kxHPfPp!J_E;nXr{O-*U*C_@YUqK`YMP8+lZ$@}<`kS$Wv4>sq zRoul_zV|kdiX*KtSC$k8)fAaXxwPW6&MR2tSX8jIb{7s)Pr~QnJUDyO>Nz|~sa#rX zKK`q(A3ZCd7UMMX&ez9ZJb(17Uq`uEo-yLlAz76vMYrwL%Yp4!wwn>l5?ZeM_*pa* zi$Jd;IjnV?)w-|J+KXCG4|74a$Rj}(C9o&r%e6WOj|Q=1I9BWKZacl@^5}W5RBO1B zzHAzH)L;e!YeA{fipLS7so|5y-9fnRF)z*K?zismZ9jTq-kih2rU{E~qwt-pyrk12 zPutuHJCY|v`k1_aSka2i|27Yq6V3Qs7j6Ly;(4RK9^p2AfV7 z$W#hyB<#=aWWD~N$RM+tVJ8Vra0XQdG>&=m+I5LG(eJ@iz{@7S^CprDRI~ABi+T0! zYjgN@ILSY@%)KzH=1^DFY>}38>mFm~@`NKq#uIS&ZsNHnu}UfsZSo{K!b;dDB;2{Q zc75Xe*JV`l3Qewb1a%Z9nIeaCSOkhfYDt>-BH1!&o%Uj~c?FyeVFsP(B_ffd-7k)J zzxdnXZXwz%?0()EjqaBUOv1_vQnWM7wZM^^R?epLwUW+TDF@mo!*ugO-{f{_Jn_>3 z91es-dBwfKNuzrZ;nH1YTR@5<=rfIB>-5Plp0`}aNb+=NzZ%YY9^9|#YSo>5wb^Vz z7CtzMl1>;bNrT4FteCcjHv zK2@vYV+R8{nmM z`tbS533(CE+=O#NICib;i@`3J$LhAwl&+LQmx2?4!(sYh?|!%7S6c_8?NT(E$qt6Y z2Yc=OwqB+4q>H7Rokq?bbUUG95`Y!B;|Rw!72RTk{1`CLS_ z)Gkp!{P`Al7Mp}cfT!8$mn-wvr&jMR2sUTdeF?SE2d@w*L`y`0fylN*LxE({R4O(S zZZ(ycEoQwslhu|=Wjdv(HBP7UQE%1>NEA9ltJV3fa=Kz-d;v}8a0QF+z0EW$B^WV> zwXk?`lPJ!X9x7Y>;R~9aX+O>)$R~?p$CR_Bd4?U!Gy#=k3N00U@ z6|p$oO4Rx_8%f#Oj>FfF_#Cu|QB8EKzIf2qdE77ZOo!X;?UE;xK>1%dAWrqls>C3O zeDUSd%Jn5rGnZ;GZEer)?&bc0wsYKAy#aVZMYxCiSA2dnK6B56 z8u+)D!D@tryIdAXnS-@ym-*1%!Qr2de+Xhp@F{-v?#Dl6hSk{a0$WJLbAh1m zrYASoaI-U8`>gh>aoFn1U`nfe>iOg@ZkREF3kb}sW;t&#E<{i{~1fYd-LwKr{l467-lOTN1|)m7u`gm zd3J~;Osi9?dm07-0{w?FmL9gf9=E2Pfpr{BB;CHKy=o>0%~{un(L~Mz$ z!H~;`;)zCD2j_dRU8SVmA-Q4oCVhtEu<+aYl5uxtMPX5@ZLx$o51s`RI7uXt#I-4m z8O`MMrSz0NHY;~wj*06=ZGzD3#-R-HLKIU_Aw`M+B0M{6w*-E_g z+b^~#n>dCVV!|LDH3#-dU8YsWT8E?Z=)1QG*QWdN~+0Z7GzP zd^N}7Ym4&OJCzTZBC2B=XQo8SS{9>9_}XWR%2S9DDiEDFig1jh&xB$6PrzZRdGV`{=4~PNn%vcwKlWd zmaZ%J!rWbt#H}JI7!3U6uRnbJXaOiJ-b{jV{S(c`um8*6{^zyF&nNi`wGsw_l%=V! z=U6m0jV0o-WIBDwA#rJFJi+cN6%Ht6PMuD<$|ij-Knxrv#X!{C7nwFG^T9v;Wa^`* z_tt=kfp>!M1-Nf2WtmjIc{vEV5bPp8sE1V+@9Ch{y&R%Z28(NQRg$UGR|%y+S0#-Prf)I)F^tM@BdFazg0$NhezTCPNGzVyN1C|hmBv$0YKjvV)kxmF{T zxESgi`M8Cj&#vE|on=s%9*p!1E^{ik2wW{D_tEe!7d zOJILcw@3BfK_(JIk+kP^6iceB2ene}=%u-0^Kiwvax8gKl0~k1-Z*;NYUq616PDCTY3Q$K{m2UN@ojtCgm7pWhgRMN8 z(ku~(CHa6abub3(2asgtu#*KW0WRn^6Xe$Qte{?iW-$}7HoejlEp@GCqfzNI26LD%ik2d- zqTdkGNvsJee`Arv#cl5Fx|C|TPyo$I&|;mRgKTQ>t0U3L1kPTF&Jr%FjA8-L9-QUQ z?>v}fut^NBY?9*D;TSi5v*(Vif4QLt1|pB6<2=FXNOwS@flb@p5m`7&4VBFx;P@&> zh)JW6w*|nwRSC5^x0de^k>$h$3f=isn% zQ12hM3XStnT+e|5l_8?_MM{HoJ706z{BZTMTsTUU5NpthnVlw9tfiOn&8RP)sh5FD z>jdwEwV1O5B}!xQ1?kj)1NhXoa7m$!C!qH+ML1AOcq~qTD4Pj4yx=ob=JE?MDBuYs za&EbYvmwtEks_APgBJ4Ejn|zd@vx7`S5gsx`vc z-{KimHfP8O?s}>Z{=7r8npqG5N1zKNQ%^)JF(hNjY@54U9f7e=r}6;Nfa#PWC0iPgTi}Zx4~*U(b_cz0|MepA0^AbA5g;20 z@XK;zDi@#gHxra+($)uuyTWuDy_bO%?(gBqpi>Fu(Yesx90HI zu1UnV9xo8NEDn>1o8Z4sN0n-^A{Mcj^p;8@VE5)Absp>cQ&p=?Cv@qotwA*cTEMYJ zCnAdinea02ylQF;snp4^UG1M1v!}1mkB6fl|JX~t9G0W;LR2E!U0CJWN@$|3*Mhe> zGOoo6a+9xj>I}mcgriIccq)S@?DV4v^xrj*AZGKM%tAhc?>8!iDj$dLx2803NC$Jm?tZn@(W^Au%ncd?t=$Y5{MxS1)Jtrx$6sk@OpkZqp8K=JvgH z9{3y}R0>Bd*XK~HpUhRKsxqCJr&}dDwVPzN(jZrZ%NAG{;8}i9Z(f*zCEI ziS5#f$P_;1-rbM>@h3Ny1Vpm*>67`jZ4#_yNuDq5n>;&&wT1n!AM^HaK3UkM?CcV# z#0mQQXMuuO!|Z?zXtIVREr^BZKkmiE{;bRGPUm8WgL)aHbKHZ23t?PR1oD9b=K*P2kjODeMGU@##Z;TUas$gC+E$e_)_t{8B9puPmP`snQCwz4 zGG(VH3*kVh1_cvVo!f3Mms`1RDHKlR4v%Z6V{p#y7921K&tGH+NL;mD$G34fdf1}1 z=8KVlEfCH%V6Rpq5C>yn?m9&*+EWH>@(IuTyB=v{b$V%i<~fec-5|`8R_^Y*&Gd)+ zoVB%0o|tYlsO17abxUVtP3x^Pk-|@rsK_`LgW>gs?5InjG{MiaJFaB+iX?=I`-RKaF#WS_DMmrOdFa^A%J(KVCN{z;#-mUg)wfZ5VuXV~jzct=Z z$b%7~W}@;w1wxmyC0#$ zl`B`#HlOco?k)(7AcHO-XjSG|As&ySIyPP7cLmEBU){RF zSmlefkOop2)R4-qSF4=V84<``?JUxCjK{m=yUzh72P7BcB`@UmyPy0({{jBb>zi*`AkVlmsup#VSOx5!yyB?(G8QB-b_=nO8mm}7CkKA-}^(adOk)7+v53gG2$^&gXM!%2ApfyE6##Dk@dr{%@@Ipp`gkeD$;d%vrujG*P2E< z%3cPU!S~byhIo5sYj5)@Vf~x+2g@M`Z1sb}t&J(9tWB@&Jf)g=TJ0`%lR)BfSLbLf zjzBJDGZcnss*LJ>m`#}zsQXi<6eK(5Nc#X zW(`(PVlfx6{2)y$-t0&G5qCVBb9phV)Ep0p@=nGs%Me3hr#s9vbU;fDq#t~C9R8y_ zbdp81C?Q$21{oBx@gW*bvp74qji*378g*`ETWh>KBj7#T*ax+I=^k^Hu1Ea4)2Pv4 z7A*4BPQ6fOqbmJI37rT9O)8Dx?i7WL4;jNTy-dT=SgbsOim^%8OI9r0>Dx18y^71> zN@i#XI8TCe_1lwFPNm2NqoLAqe>grYW$G6{Tw3!QC7O<*`SGBYiDr|nGMC}@#r(-~ zDw@XPj&%KC6fFRr3-EZ3&-zEDgR_G_y&aW&$ybLb!;n*}&!%eC&bZY&JHoP^5~z9C zLB}OFJk6mNFIKE&Y>qIe`gUSGarD8T`z6>*qqsGo5S)u8Qs7>OHjbJiAC087TOoHo z6NQZ~I2qnrkt)n8o8NA77)&AulFwTGYNlMtFBICGGz1F6jqDms?AcXT_2U5ZfC<0 zKj@VI^hcmawSceZ@wTLD&i*Q^7}sc0X-HnHB^0}a9i!M4#^Pb%u?EsX)XHRwsVx9i zGg|B#lD28Y>KyvQ{Jzj=b4p>G*$MR5n8y-IRYCD{OQ_MOEs4Ctov$WREVs{Px1t6Z zfK38OFy`Qk1tFoe5D&k)0B1R%Pipx>{{{~DptBA=e&1lC?s~m?-2F#)$m^gVXaLIq zl9}Wx#>~v}6R$?WC)1dFk9R#}g=_ZNXP@3*Cek>Y941X*Ky?~ELuK{pAjz%OJ%W*8 zv~z{9&t#tA3fMHNoWzl;_yVa!Nt<6@5H8RxCQYLZ^eC`LwbEyAgklXbBR=U5KEzf;<(-!rN@;>rT_pe7^wY76mc7hbsKbfyfSDGd)ZdK zGd?I3A`*idX97mp!&evE88e0 zv-t}fR1$~1b$^nzP9mzLUp%5oAeB+aQOb-ir&K)s^f%WxsNi4QIcB+9NT;buh6n4E zbrCoVC{;R%cpWF0!)d%8q*??iF|aNQ<#AJI5-ao>Jsd~Ir@eMHqBOWUZ_dwObn^Kk z0B;VXl`z&l=p1%Iz6cGwMahV_sb*;`C#7b%RAB~N{XxGAPsg`}t42f5l#G=Bo6Mla7_{ntPIFP9(u+38K8Y!QHWx>!=XvDnDQ z0}zERU+a`>?YIke**(#uIb<@$(ve)klJ`J584eg|7-f~pF9#5{%e|FW?JVe2tN=1i%P`(yXUj_(c5XT`F-?KKbRdWtU93 z&l7yPtAq@Y4t&$q8rUM$KE40NBOE~m;s{EZ4N3OpDuH?y^Z+>YZLvzP6iG>J<5QXy z3r5Qskl*xy9&NxA3I$sA-XPPcoWA_y)whW(U5iCp&C}yzZ(M8*ht*cQ*S{Dfs--HZ z7R&cY$xzPAvtWs%(Lwp}s5m++!S-0xm5hR_)c1ezVpyrsJ53f!br2CL*I)KVY4d@j z5c4J5rFJpv(Vq2^hnMHChrU4x>vv#dZzQHwEi`le0nFL_gkW^qcNo{6OGCLT{^oBqckD{G;D~Lf>O=T%RMeoHmQdXyQQ*@y05RvcUj- zGBlIiA(F&$jg7$v+dbc+)P}Vx^1Nk*1Cnc6fmX@in6hh`HUx<|tW3al69QMyo-dmW zSAYEDtMAXg{nMY0yH}v}QgLN#y;`+5>bjGSe5cbpJs-p~?ONWEut{xtlOt>J7qjh@ zE0r1^v>FxI>#oHuo_gu*3N$baQCqQ9wrBd_!-9>!e^HB@q{Z|}8O!@3!^0CmJ&1NL zk4_E>aR+!GK(^W{@&B8i2$rHO+DlZ&?WfpThgN6fQg)C&@$-}-{Cl54pv)CK*2y9WaRc*+P8h$;K;CB=} zkV~mg0r-mrw!~YNS|w-^g03D=Y3ZvX`SL=rP>3Y`(R$qrd2Qx-;W|gEQ>lz5^(Irv z*Xm3jmyW{LX@slvP8GU(Tdt&y3KYQ#)4KLaqp1wIqlrLT- z!C47h=B#ReXb1H$6Nb^s>qH+3Uk{-i{u00g$uQs>Lyjq8NR3P_L!*{&?K) zjOVh)d4C8vDC$Ty?k*>xfYej$UnH?`8%?BK4$$+c=d(7u*$BvwAU5)%2~KiW(B+jB zF(nkw)kh^K(rj5ofWDcI1d25WmJAsDs&q7JPuH>uhs9Ct<^66U1Y(MjU?37U8w4ab z1Q;+m+Qb5l%o+~3L5-dlE>yEA zv=RVrH%JBH)@@2034;A`Cr=p&GS;>zRD)XP3JA3(8C8sf)EbV-Yt{jm!h_jFycMDu zQtK5mjhsqac_JW%>~ab1**2ZAyGG@593lc?e)-uHg+<=v(dP({wnQc$eS1?$q|w)w z_O=)@31@M6VM*l*IIJ3%1h^NAAN;vK?qF)^vba(BW4F-WCSHdbCl}claq;j9yr{GbP%7{Y>aB8!wVq4H_6lkt$ym=9<`?Pndy8K_ym@<@PZgT% z9u3GfgT!8S)V8W(7+NovGynGe0OEz~z0Oq?l-gp(WaqqIesOx%u4H24CK?PhV;+s| zaNG>l3T=;4>TW2k{>FEO^;M$$tbBNkC@rW&5Iem}M-tIS_jPB~{nv3VRktNFm#<4k z%&b#zJ;`iA$N@TV9qdUZ;QE7gf#ecmicx1kgFzSgE-^N=!5CHvgqRIG5AYg$DetvDk4zM#!HWMkB~s z5i$FDW=C`2Wf?hi%C^Gh_U~;)gR)4n2G#}py|bvX>sOzU@MM)t#?Pa=>6`mfjocxY z3+Q0?GW!)m4*+b4IV_86e`iZX+?ZT+zz|u=Q>;I_yQQ68!D|uGuYUg7bVy^hQl?ia zkM7gp5RXhHil8KPzOE!S1_~U2IA@qMZ&>&ctE$>A(HZ=$wwy!TR{$aw?MdXqXxWzI}0+jrV$H0iWxQ zyYd&uZQkQ0XDjdSRKw1Lt72$;RSCwM?Q;IxF_t_z9-ibgrFPSRHTNXl-!Jd4Gv8HYNQz4B6~Bnbcu zQMKxMrx8V2K!;X2)V@j~y7}=fDdtsRKCLue^BZza)L;sQot|-CXDL2*RT7C^Abmp{Ibr%|Woc^b8Hcayef@u@jH+5~=r4tkSz9{{FRTlq%)m76aj zc);sfjAu&;q&)m@|Ml$PJAjYxn~x8LJ9GpDW{1%i&C`6Lnn-5#8iniZ^t(&r)0Id? z0w_Ulsooy61~E4hZpn7`=Tt1N*=Kfn4Vqx##fx5T)GVuG+(H32Ij8bQQW4ZZ@ENdaFYDKrt7%R({Z{JpQ=?otT zatlmC9Nk`mDJ<=Kb`%U;|1Ba@OqHkwDrI2%_Pvj{r{_p~3P(sMDV+^~&xm+k`?>|2 zYy+z-BSV zbGdZ08jFwKe*0?p;*V#qYKN|?9(#xA`-`Kij6avZD7P}nR>287;ES`DC#+|8p6$ti zO43CES`cZpUjN}wZ>u#>&kiBoABVA`w^k8ttn45EL2f=BU><{0P0(aBMlDi1oH&^1 zfE$iP3$g>544Od_0xD^P#kF~z)=0=`$sCLZmBDGP8OTT)ap3k#Q<;KG9|$$Qh#i!G z1Okz~U2Ei*LEPmD-UFjCV z)*{R26>=?+;zaKKt=kEn1&3xbt1T+S>eENxOwZA|Y`RLuU|WHe=81s9o7A-K(S7yP zU#&oTh`uXQ28D74MaEuUUf&J-{MIl3)BpOPKYS$O0)y3H(15xsnyX@B5nF0w(9BsQ znY$?#-2B;Zu7|RZRst|%XK8o-i#efaeU+_qfCPs6gFg?u7a62=`trMDv&m$TSR$R; zusc4ebWQ-Ft`urqod5Xk`Kuo*c!IEd=x~cTjKb;g^~-N_iHfg&(hX+=`<%^NP@;lBo{>Ee>p=++Y6c zhRU+E^3C<@GPlm_@pGucO@+@+<81%x+RuOX^Xqi}#`?U3F+<)67%Ui*paqC)$ej(4 z_BhjA`rmxWv{i%xC25aDzjNcp-#@)KdDjsS`ariEC?L6HG1ELbJZ<<5;kr{21WHDu zl8C1cE=#3yvDyx{zCS)VId&8?FaAeJZUVLboU!uqZP}mV!j;oOrz++9VLr#I=Enn> zcnu^#PMU{BCw6`Wj=<+Z9E124#cwd`NxDdC|;V$+4!C(N3>*Kv_s#xH=9kmyF0#n2zJ80gWdL@ory5Z+WHrsO814e`;ndRX zBhED69RgeTH>>ghY?R!;v9o^X`tsZ(7D38W?(ytSwL`i=aa-&NxVp;)tJ_nk{4UKV zc|IrnYMyG9-COwTDQWZbc@z=i!S@0rw93Oo?O;3_fiZ zg~4&R|K^}+a`XA@%}!3`-I-ZSSE9kBPn&51`yj;4z8>YHfGZE&tWe$qF7?@j*XJpu zV%|t84Adf{8}TG+r}b8n50U%Pd8 z;cGe9Bvmr@1O$pwtt9fd^-hz?7Xn3EgINSn?3$2SwZ3)p_BX%QaUX5`?w@`uQ8FkZ z;+)tx%bmsD5=LM#9V8E?!M(eIw7P>~t&unw6+*q{Wv!ZuHCkmaC_R>=Qm#&VMnXirW-F$ziq|!jXFFWkI!=5c%@t)R!^?pT$DTK-=8}VItchX zx?O@p!0SD?X&e;Xc!LQBJeHQ{Dtmg|uEoJ#9RquH+?p;FGeN`(R)j7UZK8ae&f-$2%7>N3SUs3~o zsbNE!#xy}pvMk0=TQo}b%}IVfpqS_Lq#-94Q#9RG;6pipDhHeczMf@<-FBIZZ7~Un zMqNOy<};L#l4vlwRcyN{V{wVu?ByM;OCiI5_4VgZs5-7faR1RG8Was@ZGuIOYRhUf z!$Js1_)3G!g~WU^qbDB58CClV&D!TH4?Y674&2{=xaLsezF1k>R0x(;TRu_1Z&ENO zc<;|q)l8~CJj=UaX)y&MzILX3agwiwM$z&(ciJc%R5Oiy_Xvm$5{iJ&RB?RuqwM*m z!IK^j2fg!t485v#`dA@YXr}6Y@R1!~bvnlfFUQr&Sk7>VshU{4{kj=z2R*OHVv->r zY^Ln-TCi7m1@10>@GKg@S@b!x<+ev6r+6$hNF8&B8x=2NE;+(^UnAHlJ^$EKmagqIIy^88ioy8IX2vMN`;0^EU2DvPej1|LL_u}BeIR{DJgf3yr&b${VtJ`=HRKF zGOtE#QSzi*jd^W}eCJo6ee>DFuT}*XuEqLfh5r5ui&&Y|pc;Zme1b^Dk{e6{smZU^ zdE9=pN(|lme3Sh7B$=T{R8%!#FXDRk<%(!e#af~(DOPPZW)N+GX8{~mG~OAWl;ETr z0~x7QbDTN!0l6yH$#mbnt{*n5NTr?;T$B4~l6t+G+Kh zVO|u?q-tk{tMOGMkn0~@4XdbKOy!&Co5wG{eXSwq2gP1Dg5(dh4mnWj#;wzf??7k# z{j&hc1BWY-YlOvCmDLha*dke1QEPx~aN3(Z>_^L3z!;8rqG>om`sTsT-A(+uKj_i` z%`cWICkr8$-WZ9bqWTSk!EW&ty~S7!(>fF7ZZcpLfx-Z1`9Z$k>oFGG33nu7G z(O>`F*Z+9q!8JgX+?R0Kpq*!OC?#~dPG`~(ZjebVx)c_{TDM}4Yw*X664K)B-+eXn z<YbKwq8beew!ya>?A5j6u-T30+~7pfy*NKUJ^Hp# zNDK}Ss*PF^3Ww4*eKg!{RY!Q4_S-V$G8#bxJd@5Ls25Rg;OB2#o1@q?I8NSIZq&1=Fq{ko zQei)Tep4U~S`cG37`5#ZVR!4K6p({R%|2o7NjYoU|7-_Pa>Dq1lYxGpPj#Z1O8#)r zI~j!y|ISo{R5rbl&EFE)w2;T|^|>Pw3CHU8=peOxl}6-j%u@+^B}cM(?e<51_cxzC zq3qmQw1K7MvuoCsRu#yyOO`*owX!CrDQO<5hH>vPR}`O@vD=U$+Uw+QUz0kS}*-=r=;Y?E4f#1 zTOhOQv`Tnn;^mQib>0xEl_MfKq#zP|*?OZn>-;5 zRA}0@LJmVJwNg0e(xJltlw8B6H%7Wysj*$aOrP(H)pChRp z$zaUZ4!OwNHlKSq4(SwN4#>{t!gQ@besF_nM1#g%GMBQrknkY!RK9v#%8a{-(1h(h zTMkGjLLFba4KS#BrzeQ|V4Ftm@dG}YgtWIO)IWVl;>u_X9NhfkC9#$V$ zh1y2QZu2GBitK)tAZ+v4L3$?=iw)VuV<~gttfMc0_Tf#~w9--exMu@^ujKYGX;!Xf#T{1*Xe-}fO6d>n}u8I4A2D8QVK4WeMqqM@9Ao<)1sCL z6-+!|tx{+MF4%0AdaYcV+r!$R%{ygxpNV#s7nX6K++(Oezq77qb7(5StA!xxvJ44` zNH>^wmLKmJy;dzSs_-9wtO}WY1s8`WnxaoWzk7qM-TnFBO^YRD@`Il|p{(2kpijL` z4V(Ecw?r+6CpO-mG_#%|rZ`);ZB= z2%h2z5Ze54-|6txN%dXD$A;1cw+3xtNNx1pRf4hb|1-lIeW5KCJbul(pSz zPp@%VsU;_SmuC)^Gthlk8HZZuQP5(|5nv+cZu6r<;&=g@J<|Y}_^t=YTvGRa`;3J45GfPg67u zmd=5C$e;aUD!nWQJfm{PrJ>SUICB7&LYcGs zXwqBB7wkHNBkrJ*g>IG9l&zHGuptzPxoIqS5fg5hm1fim zZQNJZN)V8X9S|H%A?-Zs&bYu}DzDQRbATZ+xr*Plx4W*t9P|cp%33^uxKLdIrbH3c|Zjb^63!YtW*GgKkxp%ulB(} z&6s}jng*~@&3}kOk_1^p`d4tCb!-oXxgQUi3zz@prE-+A*ya z9C@4Fqs!MX{_sjqB+vr={@VipKI4L!4fVqsnrCgnmQ?GobNRz}0fP0{G8EV8(Nn<`(49#Hi4!+84oB97+2%@am+9YmZg3{qqAo zN637#^P7+Pg#x6K&<#2enVEkA+TBDjaq{u(?iPc`BkKi%hqr`kZOEtHrvps$;_QaN zD|@oWpi9)uXCFRzjGvn!F;#Y#-fD+IBt=blupslOG)51Sh-AVGUw!)Jwi-&fLQeYU zBs&Nma5t%6{9Q&sw%N&h8&jmcyI=qMqhA82d;JllRp=EGZf{D0n|VSLlwWjuS4X24AdTsq|>Ebqj?;;y%lVh%+6{$uE)_lkklDWm~>0il5lE==S?&t zH-ORR34QwWxloaB;ccpH20HQC8h9Tbe(>ktPi}E`cEnt>V{hsf!w2>|lZdZ+x;2HT z;P7N7Ny3n`DQjDdJHPqK-~Rr(z^T>*-PV9gAzqzXb|5CB9So5Rp;_ra+)<-$2H$5? z@7;dJ!>_R=YQoOvAFWID_t&JRfa)K9_wiGn_;3G@FC>l?>f)_ECh7U355EFD)SrVH zgQ{9DTgGaKO^qV^BKP9;5mFnRpxI*gpxrb&F{icfQ%W*%@#;5soJhOg9=~k8It7QJ zd}UNm)@pD1t=i=e|I#Dm|DVBmvRkfNNXxAE;YB1}sFtv!v_lshN5VoX2!ofocdu>R z0*(+!9Y*|Gl~@N-qzvHu6I@{+TLrTyl?XT7^>$txNLCC0RtwU9BBfEni^+*N*p9#Z z&p+d9u>g|k#=8|bfC3#BbD~H$jv>v%li0NTZL$ENULSMj&Jq{mfPAh!2+Rz-h-1hY zp}l#HA`sgC=ogcGjYugp$4y!Wd51c&_r4MI&0{_&Mp6_G_2ffAP#i)WU`~&R%w&Ve zhJJmAyt1I(dU%ITz4_1o+yB0ZSBjN}5EOFpBOCh&%pj* z&Ez_{@nIwCj=%f%&A;@$>Uy_X8Ke(msm9@?kJzqn8u&T1`YlQUu|h8~2s>SGG8MslsVR5hpE>A7vTK zo)!|=nZ7QhOmoeAQ!?*ya`x>o(B;6hxCf@HsreSGlDa`lVrWXU@lXQkC16+sp00B^ z$%|y(`q~cn`O^H%6qvK4P#FxKkYDH2C|Ru4=M3S-~8;6fxh+h_Fc*5*MI%Xt-t^1{+@Ji zg-h2PNKZX6zn+G(IoV6U{mEBO@z?vxMZ8hRBTe1csVDADd=Hx{MQK?O8_FphS6jmx91!CnK0--NO9qES9g6xv-hRUG}H4=7*Zgc}c- zm@cbWZYbmTI7(1ykpLQ987m!)!{+ba9_5mwK~m1eZ8+Zz<@v)*z7vjGaI#(yG|T}* z%awEmJT|Q#!O$?6W1QveA_Q>pCV;%?y>^Y&$p=CiyONxx6^Cz6|xHY@UZNK(-9K@!atTDrSYDu z&674;`Okc2@zj!i!pEQU1Pp=E%+TrNKD+YS zg4ihLFy;jgsnAN{>CHqI7+Y%Ma8yLv>Mwu(tLN*}*YC}WfB)N?Pp*CP&0VfgASR1# z=B=4b(I@6P^wc|FeE4f(+4fijlAQ($ZRw*)h%oWV`}g7e)b3?)eEw87K050~F{-qj z#G>V4rT_}@hk)o1KKZtST(unf_WyhE{Xze*SMgi{5s0nu7mw=h5U4YBTq?eb85|(u z$S5nMCTn1bhbf*K77vcnaT9#aqY;}|NcR_Dhucu;hmEa>gcW_49Tif!h)YlgBG4L14WK@9 zjSetRgoKryWldDMX-LDkWhY8lT;!NcaaSs9x6t{O5vaO$d|EAsq5%J;P&VR^a<{-V zv3Sq~@-TpCW;0JOe|8P>+ecbHirrDtZH4Kqz?#A8u4M<7>dlWcF4I_3fN8omN{fC#8idM=}30-nvtflk$ zLdqzwXQNjy3yD|FYV(hO=$#*2{P%a&LQ7}&IO1llPP8U60{p59)T0=OK{VY+L)+xT z4v7`amwMxRDj&mKSSnKJUyL&$^8A)IAq(_8Qi%-AF_qQ}XRjtS?=|zRkxSm(l}l9G zLL(HU?X3_u#YC1y3TAQpVGbeewzdH`ryE6Lr-!L}v3WHHLv<-UnaCnwvhfdaEWTPu zkm)3g8HwDA*cne23-N_DwFeBm2w7kgB!Qe}PpXl&Lkrg)v7A&*R8GK??%i1@qW<;> z=nr6RYWHUze06JU1BZ77C8EhYUp~IIa(8NXmCO-|xeJe^0yc_Cc^IV9rc<_n&0mS| zS(3-|Yb%tw=d<^JdTVBBcjfUGe&f1zeVe0VJpawtcFm_>@31*?i-O4^;a5o_w!|DT zvGAY%^-m`mPxm!DkMBSF$v<6xtdRwfe>fJ>7~ z;0Q`L(p3WclVyR@saH6i7!VlC@X4qG>QBXJxCDgE&bZ>#c*44>&1PL#nZ5sXU8X`e#@DDIFmRK!9;{FCQ5wiZ^Vc_tQ%N0{8Vc{Ax| z3uLsw-Jdao`|bSP^wv5DQa>R)-(6<@;?sp49$||s($Y3J?7V!&Z_6ah>^uufG`)jwaYlOOO9v;8F^JwxWRlNG;eYt&a_x_#PCjy;TDp1%p zisgsD{@vf-`280jEmEeZ<{$p%F-Kyv_ygd(iGmrVBuJ-sIU$LoR)XuLCgM`4bznFQ z5ay12j`MGu|MKSDw2JqA_p@%YRSo!pVWSot%7=xZ%n^#0zJGD>;~)v{-58jgJ^$pMU)9$<*f7;=@g~bWJ8y?62HiH6u^=PC*1Nc7X zLUW(}cU*j{l z4i!ZyS>41Fryf0-BO7^pkJj)ENj&UKo4Mdz4epy;WZM5%(pv>tdS2<8s`mZNTy&f{ zGi|rsh89?sB~=MZQZZ&#GIMUq&CJZq%*@P~xs$V!imNQia=YDqPWPFMiI|JInM=hi z#kp4~qV~@H|KGRP`#z7vZng-Kimjc_Su|b_usESwdpFzLKWkW?ynOSofBWlSo42 zdanc_|8Oh|h#8;7)b%A2tzx_y3FHeFE@YEL@BBEnv`P?h*r-RubT-y8o4v}FHMuR2 zw}%T2Kf65Gd;a|5WH2b%wQy_6y~>at-ng~S&=0`7DSIp>m+2i+CRQQhN2Df82%?h)t=Gdxg8vidavxp&>i*LF z(!<|B*637TB8h|e^4caF0H`X9OE7DNt75-hO+;-hJWCB4arJ}W{Nq2}nAu#Wtf?ir zuz|BN@$P%GjMYy*{Bm~f>o3+YW>qRr^SY44ugB*nS7~c_f`%beA`k=)V)7n(bxDDu z(IgzQh>YiRX1=*JdFlE)esfr*?>77SRQpM9*!02cQWNj>PoMm(`yc&8reFKFH-CE_ z>w-UF-`DKEIZY{%n@R@FZg%hwk6!FQNgKR;12cq~+9WwMV)viF+xy}9L3QBgI929A zwiA>o1H;I6I+vn~3=y4;U@CL>ni*ZLYx1~wnr&#p>_D^HNMpsr35PjSjb|cCi5f%E z2YsblG#HKR;6`<}eKs^_vgvG29t>~QjhlBz@bfc#HV;|I_sbO%Q-)wH$Vb1Pm}2Qr z(&K|NK&*lp`3eWiQJ4Y>98MBfC5#sRB4ALM!a2SdQHfh=wir*T#4z&UQp>&LUm;G+ zC>44xS!$CTWXLu2oyT~I$ZY+Y{67>pqMTnz)sjr3NoUX_#LASHbn72~d+*E7mgbi4 zn2ce&nJ}~Q&BWK}4}boLKTczBBZ~!3BkL1uHolsxm%t6{(SgyD{gcPuv(K| zA57|mdN2Ivo`P$W?@9_ZqDtA`up7k1ouJ1;)to?s6rR=TBG;13^g$d~jO2_?uVh^v zDaWHer`8owICbhqeVC)yiur0$><;%*`jv+mFHNN6@(o+nOd-h-#T6co=HbniM;IQ_ ze$*@N0_V-7gm!w#j;P46FC>F<^AaoV#)mE4lgZDC&wdTrRct6YKo@BaE56ii!G)K5W zl$pI6mq-_=m$TlA#sQ7FR3lb`c6@i>?+3;9emhn4ah4sG-u_N;2P*2~wGjk`i(xEdMS$byS+EQ$Zb9o)8VMwPAPjyn1ScHO*(3|!u&hD2 z5WV-|H^2H~Y=gJHLM4vhUKsi4^3ChZcNW)gjZr4Xe!u*9ap@MHDY}8u+ckg}zK35V zA|E`Mdc1V$t4oidDK~fxJ0PFjBXDH;$IYW>;m)(LPsmZi4moTKy)30Jigq@UYPDx~ z)AejB-+i(d1Ha1g+npCX9#_Peelx7<=I2(IDf;1w!{KMk_L@hzqFX<#pPV$e4niDV zR+ctpUJ3lE%8Ox$Dbu&gW;v5D(@MbB^iw{{mF@48oC>@IDfkI9TOF8EeT4|IPJ+3h zg01YiOl^+@wXh89=d96dG1@_t2#^A8buZt|O8F{|eVFyruU~ukV2%4Ss^Px zdKsZ={2NO*zIjAqk~XFgUJk{}UAy(gSMv)rJ(Wwu)8sDm<^r1H$yfmjw}M+>rp%(L zU;N{{zq>Lfv#ze8uieopoox2Xghu4`fzNW`$_VKmX@cm#zCslT)vKT0o>p>UDRSrW z`0bl;riHoO&a;;nDe4B9Z#+3n#|Hc7ows|AB2yh0^p5Ph+*YPvPzh~-FWc@rc%Ze7 zZofIOwqL(`by!YWL=2njxEaJRupEoiXhRvgy$rD=#8S7OS-Xdozy0fRQY;g2LdLQI z>B&Nt%V-1lCbaeP-A+|M_h5E|Q7)Q|(8EaX7r3?sk^%&ae5x&F zPr0d^A~M;KObFJTuoK8^=a`}W-K}cC%tg<$!L_5AxwFi>dwqmr_vlF*1e^}Tj(54? zqVN2)YDA&eRupsx*%LFlF&li`>;e}q`Y@J4EeYs6$Y|Ap;T`f>v7h|z%JmtWfkHJq zgPNpahVtcOgiK+aAEl~TTJFTX<aq}{xB^-IJQ;}Km-U_89Pa{rSrmL(eL`sC;L zuP=|y!C4MELFfOzD z!SU9Ss&jGrcDwZ?Y1F$czO$T(gp-*zS-yNo4{|cAO2UN$)WPXRz3VPhi1K928wGAM z`20u@$8gw4qc=pq)GvjJaw3ZfgH*iFOU=y-xkok8N6!Q=7OcKV%89b)aXCtkl zCO==8o?;4@*FQy~*2E7!8C$kGVkEls2HL6B*wluH5?`X~FnEYl6EJo0au+`R=)u%S z*Vc%uQ#bBBTpYa*hB1*R=n*K#fBpzvD1aed+T==k#D zJ?I^*!sn0^qZ!8Sh)LjwrE1BehAfRpr3b92gGZ0}dPX9Iw|fUrCO*#vcJ{iqY&*GK zf#uN;f7w2Uea_KAFJ{v#Ec)brN58brAgIK;#)~6JaJIzg4K9DT--Y0vUd5YZVn)B3 zqgh?v;xOwChLbXrg?Xv-(_Sy)z>Y05lNuI6rnQ88aiNujV#{2 zeDl#XS4v#Fdvz17p8CTggQm14^a?9!Rb^1FGR1hMsL%mywbsnjsBKo|=G54u*(s8S z_vlyeUH#+3JL5bs^9B>*TOYoE{gy@~Lb4XeAAbE0pTGa}|K+z=rh7qfWvdj6`#GW%BjY=J2q>R*{*URL}sfp&y10u}MW2mDlkHZg3PwHurSqShQPjDKsc~lBY0yWNP6r87PZTW{m9A;UNi_|tl;$*>+Zz+a9I_>z{LUNn<+u9IgLmvs_q*yTKK8)-9( zA{suCwS)+>x8^s+tD{7eip8ec^g2`Yr?5xNuDaCy>CXG;^2eWkvSeeC$qF=+_VA`% zZDr6l2`>5wk_6N*>)P_#%o5~f$?}bRcSmRfVZfy_n2WJOBk7V6*RcdVW$rOM8Qn;(yj5a#BlxC|OorPL|JYBnCS zi|}3SB&2+fF4ylLZgomJK0hXRmb%93o-cHe&xdw*Ga;)KzmE0#${C+O?$n)~*He3~ z*C*e7d-25TmZe?cprL;8w~KBeu3*}DQl?r>Dn-tpIyZURW>wF!rxFn{ewJwGuY!f> ztmdyZk9ytHXRTcMIMe{@Vi?X3dJH7hU8z(h6Zf%@NHb05jWhivxw7bTsj~%}ijAFp zG%Z*9ta51NQ<|NCKItDc4vz*cp_FKsLy0-id)7_5b%b^PI(C^%m~!jd9pUI2HQ*pE z^9(xm=JfSh3HE`^s;T=FzECxj?rg=~frdT;&nP|oO%fm7A6XR{jBb;fKYQ~Ad1h0r zp5q&lSTj#RFxl9c={uL9dw~(qkVyQ(xW_LbXhbo8sS@?BA}2T~0%}?s??rR~W4Sta z{r=aZ4?pG-z23$5u1$zoAVehKF?T-xhffeAAE3w>D+ei5d*IX`*NYWU*N0~m{+%C( zC9hHDE$$zm9bS|THl3L%vKM2+T~~ECl!-szk9s@;@+K#qDC9D+n8)y^!?a~kd;R)f z-t08PslZ;pR*9W{`@=IJQpkiFVZa$QbIx~~0rCb_dz^3xycx4bhMA@Eam-@U*9C-d z=fzI@=&+p(S0Y_-+SlIsG3%DHC>n3M-YR!|96p`Du_W8OX;9T+c-Rd3bO^bNkJ+_D%MI9;;ggx=cpwO2O%*s z$hgt#%Rqs0>ZCDGC>-0Wq?@&v)f6@*!66m^S`dG8d6ouAPcc?TTlTN@bO~h@aNeLH#H5sdl%%(VjN=5V*sxhyF_TcvD9nAXX z%ypkpg8cZ`pG{hD3-=J@*|CRz_{G(cFK)0g%OYU6=@VA1*Q?_)RSZ3R7chSaruNF| z;}=g)o;@3+oWMF%KsoODpL!}!yjI`d&2Mi7bcvSNeAv$J*VQ}6FG@CMEzy5*khI57 z4$jWr)awTa-wz_^-#zK1-O+HNS8YBorLYt81lyBlI(C?k#Hp(^fz;m!ScK_Xz14eK zPwzImTXt&s6rK;zeK6Qd0atTt(CT-SW(l8)CB=YxzLO-2tq@gC+j3bY!rlKxQFX&C+D#x$=2&HSQOrJK9A zj3cYVDlWzv2u2g#h`j&-3&nb<4etxcHq-eoxhM!zzeH3=Szmm7_pw4O_ePWx2%17^ zG;(bw%q&ZbU3REAHtD$B;0G}b6|0HbD66!fFA`2Gl}=~QK#S&`GRiucA_huZlu!Eo z-~arxRfmX5h2aVL>ige}OkhOl*_%YZ7|3#Bx>;$k;_k`)aPQ{6qv^lg?!Nii^Z)Pl z#a7g1OorU8Jpi8m%g&&af4N)iwf^(_lkUN@TCw9xH+E9xeUAc9wAYSzazfYM%h&z0 z&i?*i2505s>!YWC9-KeRs*hj1DOaAl)<|+^Zm&W0#gl6lm4<3TFi+|A!Z~jPh(e?L|U3yp3-TRyo3YN zYs0cv2UShJ8qZPNs7&qp<3GGN#&VkJH&)H5l-8xPyK3fuP?Yrt(<)CyxExGoBm&3c zZ$F>eeFs&uy?ZmG|5Rcv%}qk{nLwYci#3+HL9aM@xytywsr{P#|@r41$y3G z$N`@Nq>2v@%k@GfUhI`Ja@K}SwxMJi0)ZIAEY|h&Y9OvU8YNF6>(cNU)=VmZuTunMEO`X%4KWK2VGr6YnYb1D%?g|-ViGz$L5qiQjiQjb93F2p znzN<#{@DqW>dt?84?QDsYJ9|ZZy^|Kb87-J3Q~iRj@r%E4pYay(}NvYkJ!R4VW&OF z=R9J6WalDcc=BqeG2E>tLnd%8cv89Qakx|HKZTBJI|)6?JvE`cCsTDHGoJSYTzK#N z&C#%XQ4a9*&)VPq<;CgA*~#`Eh`)2k+v!a-KfMEjW68?O0!C@@M2p45r4~G?|JLxw znyyx=Q!VJlTCReRNyHOoqhu4T4g;&Od)P?i3c$)@X$3;1)8(t^;`V3@&U!&zESJj? zMr|1aJ>BWS`tI2mGbk?qHc& z78T*6%a3Uq5sP*I-4EZrJiUMhQw$Tx3nVbHIz#27gKuB&_re)Rp;xP)6-!b|)KKli zD_R(B7Yi59!#)pB16)JBCtEq~M=FEJun)AZ*V|qk*6bi~!A+Rg}@d2^%$0h z2<}^%DWzL^_k-ExPi|AiIj_v>btS1uD5|%M@>NvQCvhjSq>w{}5HExMhdeU7u23o$ z)^)lEzy3e|;h(?!<0lw~m<_iJ*tjRW-u`g!>BZ?*tr|96oSs#(Z4LuYN|~)pJJCLh zkD z-3{8qOLJyk+Lp0L4dIf(-P-N+V^9=w3(Y>eqgu%utGPg+kQhR$1Urgi3AAF_mNQq) zbnLvn*3q-)hoQjs4iKwK^Ex|cWgRRN8XFVM6TsL-pHb=_-@SEv60yJ$xFkzF0VDRw?PoSTH1IOTV~GoYyin3^`fmU`d1NP*f$u;kfGzDVJ@t>Ie>_L}Js$ zQr_hUpN`BggPbhEx46wA)>q2MWrkZv%-x|LOe2Nx%N|b)w!V z8boC)VtjF$2#Hdclmb`TGejQ2n{4_zL<-~ zVAP+jdz4PdJw4m+51+LBwo=^~_enC11Se+D=_PuqGz58B$tH80A!9Ib)+3P8Z0&2T zr^o&6S|Zr$YTRBs1MA^D`0BwoQxqIkhMSkLf%oQKMncR1vp%89*y18IID+7&hsFt9 zwxBnvpvxQ@p4|?}3dD^Kor8;EDj*k@PGrk|A;aRLs00XuS2ZKt#NZL+DWt-p6(dJx zKb}T_7@b#&#`Vb@f!(YoQ!b6%=L0+lY5X2{;e%g(^qbEnMrKhDKVM%^i%9INw;of; zBX_Rg3>+Qe(Ix6nO&E0ue$adU;{>qfx0}_{uv@WN_l~}8L`?Nk>-pgH@LzV)>RS~V4HEy5=tc1j5tq~C zr85j50aGiiD&fk!-V&D(=Y$-2)Ex0QU3{s>ffF$R87CW2qHisZPF^3S8CaaD+0knY z$hmd4A5QdvMnR#e_Y6j8$~#mjfOdX-hqCy=&;RRx{ouxXU*neUGLRDC1PCAmVdg4p zlIuyhH|Jo(N`*;KwYPgvtM7K-47LV??cKwQC-mYhTJ76ZC6O~yYwz!N{^h^5w%p0? zvlk~uN=!l0THv=?-O+{pen^6a8}Kd<6waT$d0}?Mg5q@l{Ml*5HE>ZDme-eNr$%P! z4uYwg&U9K?@P!BbrBpQDs~4NyXn6ncU|w#I7i#rLC>I?h)0s@MTJ_qX{ns~&5Gdr?u$ z^s^T3jf~#AdF``n3%nU&*lvqOpnrhTY5XpWqW}c0qTO8kyAb>?bq=2&NNCEiMsKt@ zTrLrY5cZIT>eW%s{dKAeR$-QAU!z*aN&Ruh)MxmIACImqkAPNbo{YnS8w;gzq-<1a zJe7|xZ&2_L>1vPHx;Dw3{^Gqqe)8^be*N=*zP|nyO2Of1b&~np_pqBXA&YA>XaIf3 zbpM?UGHNjIE4NM#kItjJ+xrJVLM=C*ruA`$etVGHi9hL_G|yig=F-WnbG1gh(+I`;4wg~KNX4yb6O^>$ z{hhkYZc3D^UEd;!x}8Pqv89vU{yv-z;XHdO`4huSV~bR@2A{+3BAU$}Uohwv z$%Cvp((;sA!89-frm!v=cd{r%g~b+NU3oO|6_TbmphpE`4^~#E$7ZZdjZd%Ccq9IR z;&;D#gc!wgO~Kgojhi36|BJu>Uw`q-k3YRfpL^(L5Y%NyNGzu>VOAzc0(T-3Q7o+T z;0X!63rL~u=i9mFaWvd*?C!UY+HiQyM%rN)fD((n(-+UqhNWoLU2^oEZUw?AlRjVC ziNu5!rN(3Tg)`gWs&4MRe%s5~8H=n&GOSH%!ciJgz?r-?zD_{M*y@lgGmK`d@kq!Q zvAW8cM5R4AI5@NOYdzo{#9*HninRl2SFEnrCZZq@sm3Aq;?PA@!ide`OtuHTPQh;s z%G`ojI}53LHpA}9YPDFP9*cNVjVq_tJ7eYDy_7?=dS@eKR8q_gy?$XDjri=nFYZm; z$F0#cVn^BP4x4`x8%gCpyET|BG&@5XHk^jHl?C>B3Vl>%5^6kTk`^?O;GHpxsSKCs{cjHOvRQ-{ah-x#0VSV9oE`b}_YI+DQD-?;I+TVeuY zlrlrWU-`rJZ~o8!?Ux^X^6tZH6F3CN!IeO%n}lPaP<#$crniUUIm{!O9-ffE5vwK= z>BjNSoAXMgvsEer1*B;<7q`J9S#3nJ-~Q>ea=NpBxZV8@WMW50uP+kN=xUdvYPBuo zsFxJ#RR6p0U!NTH8r{6jc@apkaa>O$w!TDSj4sd>=}gE;^ErEws@)X?9+yfVPZ>Pz zaz9sWsa?fBFj-)K6R`spyjeQz1^fx{xN@DrD3|L>*)@(pNMk=d?1a0OT0NK8uXe*w z{b=fg;bz#SrqFpZuE$1T+EOPc+tBTc#2o?&fXY`U5c06$!R@(~Pj0M`06r>OQ3!!q zFIDP&dI5`XGP7h+U&<3m(xvVs{5B(CALR-prjWA`kxKP8g?N=ClFrXE0H0lCIB{o5MacYC7gG|y-oykGenc2R04w#4f zR;d|mwqrq)Gvo3^UA=hw`xo22KmFU^UR@kN`{C3+>~`9@XSQUmZdQpbK25YxIQs5o z?{E(+@}0aVynWH@YXZKV{gO>8VG}5s>dwAP?rH6wmOF;hc5aX_6!&7f+{LNg=d$an zzAEgHnsD3AnxwA6V5g!tgtGpSBAn34SwgE=YLKN&acDB-pjorqt@e&<{4^XmEiHk` z=VMWETq#LqaWoFMvNga&I%0OQI@5|LX(~lF@8V*y>r;!aP_`%{DI=M>Kfw!@yjf2m zSkTez&6+?i5wQXaKM-N#kma>7aU$@SJ4qCUMXJEb6gcGMB58RQx2B?KD|wr-x-%@r z09NK+R>`DdnsZ1T0~D^s9YFdTf8sZvrtNWO_{hLPnKmNz-##XTL@*veJM@y}~$f65s)hfB%9CzgRdM1okXf+$_nNZ#o zPxzzBtsgRqd?xFciAsT3#2JdWI!zPT^Zayom`HWEN?Ygqv7J1-KU1=7;#aXj(rE$DT%;jNN6xR8WE;$5*L^1$6t-ja-n#Ga0?F z3`gN|$SqB}=ZW5(=dUWsx5w#((_RHYr+x{kB3$Z$as$1%;55|cNW2wQ~`O0 z{QBcrvMp7r2Xpl>pn6^Dkl&``OV!yBLm$zK62)K!_@KwT1&={zc1Z-*5In2l`5*&S zRo2eM-u?;+F(RVC>{PRCG67P<`)pKR*xm!0VM(uKFs!@{qDRKXq9q$^OAEJ9OQVnH zIh3h|rTf3Sa&1ZIGJ!_#S07xNgrh8!Z#{Ct+B{b)7BUEn2&`T>Nl}qe2B*SeGWtu< z!KIQJ0`wY9atV8h2G587_Sse`7g6#Gd%MT+Kxy}Q|FnM4IO>QaJKz52e}8%UA1?~U z%=URB5`4b9pY~>&$wW*TPH33QV#DQ(OA%7Nd;2(*&5PGrGd!A5ep{l@@&uwOm^{FZJCOy9Sir3#Z8&n7qF(JQ)XLp> zJz5E4bk*}ef4kp%Jp{yiz8%(S2APyr2%HI%5v?{-5o9yGA~eWRDE*{sHisR3XMUDo zDW}VUc0EGFSqovW(blEHxz_7>1zHCU}diB9}lV-9nQl?u=8Ji>v6H zA3T^?)p_W2+TDNt{IhYk%V3iPyvnIZ46}sGCT~m<#4ublTQ?T<3Sro4PSmn$5|YJN z;)pa3bnIb|_4ZF^d!2eO8A_hC2c5XllN`R-J-RqNst^A*Jo~@?`s`2NcEi5>){}oZ zdUbwKiDYASm`h*{}RloG+(qAFtzF*JA!%36MSPRGDYNs^khV|}Fvk^+4 zSBF15-#&t+gxr~}AD6c~d8g880a01#+_~CYq+1;C)J2pIn%unK;30Hl8tM zgK?K3nbOb^Shglr_D2IToz&_y%DoPsNzW2v?52QEr?ST`9bN)XF>rOQT7?!a=1#d< zgr7sgR2G)hKBq`q4dhR@GUcKkk7OB~SxY2f<)El|7Kgx?=1o7kzl^4lB#R$U5J@!E zD=WqnTuCE?K2QkKcT-KrlLiTBsx-fXRs!v4vFX67m5X)EiVHR|D_O z4m_*lQMV`OHiLX8_q5=lR`;JBJv|-d+x3^PL7BaO{;&Ii?d{Cr_d75LKW%k=o)Di- z6elG-rOa(Kf}S?u@|6r!zDmW7m-0vLcm~|vrMfqk_bb3t?Fv=vC6~nlR6+%tVAZLJ zlufDjNxav}RNuUYNt6qE-6pk2?v$|2_N2XSmo5j3-P%?!=Z*&Y!`yDa(Yq+AQfW(h zKVwQ3s{V*VE?--m#u(6RR3iMFKPRM2~EKL$wE%1Tb{5!i~IZ(dyql$uukUnaO!B#UowAHJ8XrhOMCO%-X zQubWj2Qy@%PD{5ZwPdx$A(Wz!8{d3$JQKNUSuFg(=@y+GYSr1huWyvyGUJ2#GHmO#5>ePcOf3q9$W}ZE3Yn^V*#>SdB>c!Kr zxKZfDCH;YF*-?)=L;?q3;GF$dXE3k@GC`MyfyXO7zGynCZ74N`El0#5YSEpBe4iWW>rh+E7Q{yncQGAvZEx5 zJppY=9`)gdRHP&cmUwQbG-QBIHDvW}U)|hfXxLoFywGSMj(u$LU{+KL8qw%*2)!An z&=FUO{7G-zfZd=6-2AZ(#G~K*{)2~vjgP; z#0pJ!zoZsgnnfzJ+34(^oK^hK&!1nMKi@lh0#vSCeCPF6HysX3oN7LW92KB9NL+M2 zpR84Uz=eui=t*A)B&VgL!S0}17&gGkNyg%c7E^j}tA3C;KRVoj`<}=&Jn5yaNnLq6 z8cc;R(SEYo(`k}G0erSpYOLTUZwe#M`PFDRma8{?D!|kay8U9SlF66sy3AH8q?IW* z`9#Fxf&n@5aCYO7)vWV*q-v!`%a~Deg*pYzQH*C}4pSni=WotV%`FMo)?y}7G1S1l zW%nBKLeOcM`8Jj>qf;5xmzI9&5|53p@%3zhaB5O+U_HLSBBp)*jZ_SgbdMMhclt;$ z0*C~&)y5>~!g>i7fgM?Vbo=U;gxl}`?((fa&?$Jn0D(p0uv1r1a|>A1B+De%sn}$t zn7sPnvrn#kxxC16S~U)W&0sQcMU=;D7N>%`M4RDja2P7?($!1v!{#Dc=t~6*sVdO0 z+oXk8t+uOr0t<}8gYxjt&%gcGKR-KsG2A&hdUgDCf2S1B`6Q|UX&Hk2KoX$nBLI*s zdMZwe<@O6NSebJ}RvfF9+2cGga9Z+G(-Pi(be z>Js^q^r!cxJ59mB9$Fa`@UgC)Xjtf}MqTbg-kmud96f*1uMBdzMs2Iy0@JZlFT#-J zledvH9@!_J18T3u?2&@16g#sX5z3TSWhJiB2eb;MS~kzvn4eo?EU^8F4(KktA+J59 zQw-W+V=|R=cWPX3%5-Vw(&jrq5-4o-=-sa$jG+O7@Q@dmidT7735#no^Yqzhv0V&0 zqgI>W6}CdrhK<5+jEo^K|Mu?G(kN%;vnha}Q+ON9`PsXdZ%UWepeATjUtF*>>eNe_1|}&oSt7CynX#@`*}O>t2b0;xmE-JKVKxD5hvVHxkCnb z8YjnCNSPDqdLm|vfVN&E2nLgRZ;;{O@w(?HEsZCcOC*m^>U#j5s~=YFrA91PPkLYu z16u=yEUa6@iA9@K{50&74)f8ir*SS#?+2ewxpMKU(rkBn)&1S=OfTk9dfa$6l|e!h zu@bq}gwlz1SU#D{UgECO%xa2K@6~BI8moDgj8@5&27zpWkKRnS8&R6nXf>GX^6#vcrwdH%`BUebWK+Y(OR^@YJI3Y)@1!VUSHi^L~@C_nb zznqU@Gak-QOpo0ieYn0(A>P8R5gsm$&P{$k_w^JFJBA?e3AhC;jeLFl4r*hQxB%Jy zdk=L%k9-nAq7lhXr^KcKdXGi8E|8H30{qIQ$CuWD15zwHYWbvrp-SwZ_K%-Ed-Z*Z zxIoq<676!W|CfL3{pI}Ibfe#jclU>9Z4eH^*`9*OP!oZeQ{RusEKw{5BY{Kjb_rY< zXGNQ5_e4usXGcM_8TIQr<<43Eu(GvRIBf4`5{dZWqSrocbjp^nHx%#ylLc~73Y%RR za_Z?zBtyOut@Jv*J@5RjIjY$jba>(?&$6f8BWFAtwc3ec|>nMczndv2+Sk0%# zbtJZCYH}25GbIuhgT`62bH&*TVe0;xR;MH>M5Lf6-b|If$($`0%GtrqoarXQHGkAE z)Jaux5inWc-Hm0jR)kE##FvjLX1mf8g%B9`$}caEQD{QgQB}L9qCd;inxI>3GkWC9 zql>ulkuNS^{tCakIsZtE9i7E|^2hgYQb}qRjfmqqS&Qp>>!Zu>UdLiFqlo3lLZLon za)~r1hEAZRlPEM}P$hGTRgyI#Y7?;xe-H56ER?h1ekow$yN-a2ynFoW`yJuhGACLp zHqzzJw{MH*uMWH^k3BX#IXz48g{>TqM`G$!C3`ubE-OiDKN^WQHdD2JGr4uvO8W{& z`%KiLGL^K6e1-r}!S?s|2G3sPO*A|5#7D_etR9qmKyIq%UvR0g@$#got z)fps(H8+h#<5*y;+DK_F_Kr!S(}fETv#A^9(g+B1&aARk3+YfV7JM~m1v-UdUQFi1 zdV`3u6h7ELK0bZ3Uq2k=h8CkM1oZuUFkvu;vI8TGGcqs(fsLL{BUL-#Xe`Vhgd%)f zEaAmXY&;ObR>`1=g%T!gM82}IiW1bTm8hA@6UTW(CJi>NOj=lrTAd$dTNp&H*I`t} zRFZByAdfg)cI4EmHkMQ~?8-v11YdtSR7zTsOomveR3`jtBZr}K7kGTF#00+!$kF1l z8yGsDBV0D-F6Rj+7MF4B6zIUH;Jc{6@iPYlj-x@*B2s~nQ=Js7M0&X*P#=$za;9#BXy)fm zE17x$Bsl?t!e=$RtjQ?Yw+S3RE1t9Hw6;OKaFFWml+T;ZZpIyOW{Us=&L0m>ws!07 z{@MA{z_4iYW|Gmu;dZSS%;gWxqXppOLmvq?n+CTGgs4uwww!RXkR*r6g4d(&YGO90 zDNrmM32Us887{`v3fY5RtwO41lT|{FRBSU@aP#vh%(~9PqEh(@t+SvDrreDX)Xbm& zY;lM*7JDgP&*uEGbi3WvWL<29({A)OOTnPV>T2{2Ua3wA8-MdV{|Ws$$|jSwg0*Nl zGq=Y%WYT@Yy>|&}=mCq&7UKPHCV%~h+1pINj4k04Q0wT~G4#q3VvRwek9>aR=A9c@ z@*GGdWhjObRJdHHSfXUEBbKPFRVfzB!Sl|k>Z&GUx>)x zz@edA4jVnK!WM~#%}l<>Y!oqgiTsYIBEkvct;3`Kv#mJ%-bJBvxC0vvd7IsxsvE^h zl~pNoC=_Ut${5S1!cmV}TXD3r%{tgzN|}1De>8E+M2W26_o$uqK5r^aM&DDiva#w2?&+VbqOy zKFnj<1w64iz`?;s4|hBoWptj-GrLSGjhI67@WNpBkQxncTgc_%f&YuhH5~W60x&i-CUoaxpVavXcm^)_ddBx zmRaGZt|3g0EZ;)8!4lf>{$^_z+EE| zIdn0LvqWECe!N67sW}oS*vx>IKp0)VL&6JLa-G&7k%=v!vKRAJ!EWmG*nrdZZ zS`#PSGBM@3gY%covM^z=5a!_G^%Q#P(#V+=WY90JK#O8P6= zQm2yg1@h5M<7qD0s8-4V8qbx?TC*kK3)!Q4d(re+HK4Y#f?J+ad%IIDHg@+K^?s_? zJGQtlm40&4%q$p#4g;A9wRk#cN(;?F$h`T8SE`1BkfXIpXpY=rC&l7zaMpU@R+p+Kb_~{oU5rZ&3b7NCD_01^D>9zgXAl8Fa?kp^kDsFfWBv81rmez-!Y1mKpFFStjgn``TpO+ zw{Kp5H&ihM{Y>8H(C97YqByeKF&boIaUPCUB{Qh(C2W~iDnv@E!*0k0OTO*hMk1Lj zx9Wjzal2J*6nhqpwk$B_o!(si@b#;UW?CODIo}>Xe?6>M8}+TDPPP@dWEwqP8<>yq zyTFlsHX$s3Nfm)m?i%*Dj|!A|MBL(3f?HVZcM~ne1eZs~fCSYYaj*$kCvJnxBBJkY zK;K;_f+=`97c!eIAcK*Itnq-y?})PDhl1gFByvZ%wzt!b*w{K7f2#} zm|0+tBxzyzF4*tgibAQ7vxkIjqAD1I^$&zr}uT$7O*$fe1}4WQ6bjmnkPi3c|^ zSeleM`{)7d;mxs`kvqS;!Plz^>kO7wtrJt}be2er1_iQ^D`3jz#wNJ;<~i#~jw+B( z2c*;~EPWa7j1jY#FA{3ZQkIIk%uuK&gkZ#-f%AjRq1I$lRd>CVkJS24_V=2c_{kGs zKbsZ&P(I)POEV|tX=I*3vAdN6N3cgPW65|Vp;aGg1e)DW_k61hmFIl6W&x&3-5d2q z7-;Jta&%hnHvabKzrK80D~Y4k-k^K5+dMxj{S;%^+3%++N4f4980~ED{J2iwlc{D% zsQHX~Z7^OgRU)gZa!F;>vq@N!+mShoy6_k#K@u{B6IKzEFJ<6Yi74oj(X~OPAN2Lj zbRre;n2cVIM*q`GK&D+9<)!sNyGukaPA-NWpKDVC3(YvF$?6qnq?iR4R>B&n*dtZw zufj9x+Q`!AI0esK zd~5X1m77yjcqvvak;wy+fympyA+T3JT+|S39;rsvZnjf?KJ(5dL#kFg z3`*e2NX>e<@Teen$dZ_Wmox|c6Pi>c3%1*>K)hhF__tfbdg=N3&cI!Z(DUb8!;5dX zwU~9ar_?itZ^wp--k<}B{*xz;OeNE746C{BR%3e)W`n_Zeq34JMB|lk%#}*?9HAl^ z&U&r&N-7}>s#pA5g=~92LmL~RD`TFRN3YO?*mQ-4NThBmm@_Pcz7on8J%((pUe>#f zO1fFXMAFu##}`F#SlipF3|_qmxvRO5HmQz)+A7_sl?0G_4F-~KM=IruCE>e(48~Vq z-M{+~&F6~Nmp7MIkxH3a$Z%LSN`x4HLz=K#BU#<#$G@N6lyemv0tzdhn?ez%r=}ht zr!UWv!53;Wa|k*(xZ>z|)EIGX`qsp?Pd@q*gh9bn!j%{f)qI;yh*M!?T8#o`HnwHD zh%S=pcyzU1Bv-(90dqM9oyXOCyPbhM0MSEtzx%Yl_x!Njvh9R6cm8y|d-ir$fLP_b zhqV`NsN(kZs&LAn0qUTf=19e!?3_Q31fD)S2MMb=XzK)ZR2g9vE%G$>PG7$|`tHB| zyDxCK+o_yI2B*#3ljlcIEtPh>TG=U=`t4?K2-$-S{4Q43A%*An#`qkKlq`uwJMK70 z$by2rVzP45%r|zjh=&g_@~jhZKRi{8PSzM{6b4O2nCF|c#dxiwRdsvKvM$I`bHXaP zGtNI4#mK_N*6y%!@baZbSIPw4RavYab=9}a4Nf3o_IXlHZzcln1=wf7F6r9WH?B`@ z2ziR7DHLjAU8)QTR8Ad7ykf#$ag~GiV8(F!!w>FbbZnP+V-X{t8pF~Sp;d$)`D}?w zGAo=uEZP?eIyN~o=xGsp^2Ot=ffT?)~x5pnGZg - -enum { - X, Y, Z, W -}; -enum { - A, B, C, D -}; - -/* create a matrix that will project the desired shadow */ -void -shadowmatrix(GLfloat shadowMat[4][4], - GLfloat groundplane[4], - GLfloat lightpos[4]) -{ - GLfloat dot; - - /* find dot product between light position vector and ground plane normal */ - dot = groundplane[X] * lightpos[X] + - groundplane[Y] * lightpos[Y] + - groundplane[Z] * lightpos[Z] + - groundplane[W] * lightpos[W]; - - shadowMat[0][0] = dot - lightpos[X] * groundplane[X]; - shadowMat[1][0] = 0.f - lightpos[X] * groundplane[Y]; - shadowMat[2][0] = 0.f - lightpos[X] * groundplane[Z]; - shadowMat[3][0] = 0.f - lightpos[X] * groundplane[W]; - - shadowMat[X][1] = 0.f - lightpos[Y] * groundplane[X]; - shadowMat[1][1] = dot - lightpos[Y] * groundplane[Y]; - shadowMat[2][1] = 0.f - lightpos[Y] * groundplane[Z]; - shadowMat[3][1] = 0.f - lightpos[Y] * groundplane[W]; - - shadowMat[X][2] = 0.f - lightpos[Z] * groundplane[X]; - shadowMat[1][2] = 0.f - lightpos[Z] * groundplane[Y]; - shadowMat[2][2] = dot - lightpos[Z] * groundplane[Z]; - shadowMat[3][2] = 0.f - lightpos[Z] * groundplane[W]; - - shadowMat[X][3] = 0.f - lightpos[W] * groundplane[X]; - shadowMat[1][3] = 0.f - lightpos[W] * groundplane[Y]; - shadowMat[2][3] = 0.f - lightpos[W] * groundplane[Z]; - shadowMat[3][3] = dot - lightpos[W] * groundplane[W]; - -} - -/* find the plane equation given 3 points */ -void -findplane(GLfloat plane[4], - GLfloat v0[3], GLfloat v1[3], GLfloat v2[3]) -{ - GLfloat vec0[3], vec1[3]; - - /* need 2 vectors to find cross product */ - vec0[X] = v1[X] - v0[X]; - vec0[Y] = v1[Y] - v0[Y]; - vec0[Z] = v1[Z] - v0[Z]; - - vec1[X] = v2[X] - v0[X]; - vec1[Y] = v2[Y] - v0[Y]; - vec1[Z] = v2[Z] - v0[Z]; - - /* find cross product to get A, B, and C of plane equation */ - plane[A] = vec0[Y] * vec1[Z] - vec0[Z] * vec1[Y]; - plane[B] = -(vec0[X] * vec1[Z] - vec0[Z] * vec1[X]); - plane[C] = vec0[X] * vec1[Y] - vec0[Y] * vec1[X]; - - plane[D] = -(plane[A] * v0[X] + plane[B] * v0[Y] + plane[C] * v0[Z]); -} diff --git a/lib/glut-3.7.6/progs/bucciarelli/sources.c b/lib/glut-3.7.6/progs/bucciarelli/sources.c deleted file mode 100644 index 0da4ae355..000000000 --- a/lib/glut-3.7.6/progs/bucciarelli/sources.c +++ /dev/null @@ -1,85 +0,0 @@ - -#if defined(_WIN32) -#pragma warning (disable:4244) /* disable bogus conversion warnings */ -#pragma warning (disable:4305) /* VC++ 5.0 version of above warning. */ -#endif - -/* Object: skin_13 */ - -int striplength_skin_13[]={ -10,7,3,5,5,4,4,4,4,5,3,4,5,4,4,4,4,4,4,6, -6,3,6,3,3,3,3,0}; - -float stripdata_skin_13[]={ -0.415686,0.415686,0.415686,1.000000,0.000000,1.500000,2.000000,4.000000,0.000000,0.341176,0.341176,0.341176,1.000000,-0.500000,1.500000,4.000000,4.000000,0.000000,0.545098,0.545098,0.545098,1.000000,0.000000,1.000000,2.000000,4.000000,2.000000,0.435294,0.435294,0.435294,1.000000,-0.500000,1.000000,4.000000,4.000000,2.000000,0.517647,0.517647,0.517647,1.000000,0.000000,0.500000,2.000000,4.000000,4.000000,0.450980,0.450980,0.450980,1.000000,-0.500000,0.500000,4.000000,4.000000,4.000000,0.427451,0.427451,0.427451,1.000000,0.000000,0.000000,2.000000,4.000000,6.000000,0.388235,0.388235,0.388235,1.000000,-0.500000,0.000000,4.000000,4.000000,6.000000,0.356863,0.356863,0.356863,1.000000,0.000000,-0.500000,2.000000,4.000000,8.000000,0.333333,0.333333,0.333333,1.000000,-0.500000,-0.500000,4.000000,4.000000,8.000000, -0.435294,0.435294,0.435294,1.000000,1.500000,1.000000,-4.000000,4.000000,2.000000,0.415686,0.415686,0.415686,1.000000,1.000000,1.500000,-2.000000,4.000000,0.000000,0.545098,0.545098,0.545098,1.000000,1.000000,1.000000,-2.000000,4.000000,2.000000,0.450980,0.450980,0.450980,1.000000,0.500000,1.500000,0.000000,4.000000,0.000000,0.600000,0.600000,0.600000,1.000000,0.500000,1.000000,0.000000,4.000000,2.000000,0.415686,0.415686,0.415686,1.000000,0.000000,1.500000,2.000000,4.000000,0.000000,0.545098,0.545098,0.545098,1.000000,0.000000,1.000000,2.000000,4.000000,2.000000, -0.435294,0.435294,0.435294,1.000000,1.500000,1.000000,-4.000000,4.000000,2.000000,0.341176,0.341176,0.341176,1.000000,1.500000,1.500000,-4.000000,4.000000,0.000000,0.415686,0.415686,0.415686,1.000000,1.000000,1.500000,-2.000000,4.000000,0.000000, -0.356863,0.356863,0.356863,1.000000,0.000000,-0.500000,2.000000,4.000000,8.000000,0.364706,0.364706,0.364706,1.000000,0.500000,-0.500000,0.000000,4.000000,8.000000,0.427451,0.427451,0.427451,1.000000,0.000000,0.000000,2.000000,4.000000,6.000000,0.415686,0.415686,0.415686,1.000000,0.395020,-0.133318,0.420032,4.000000,6.533272,0.423529,0.423529,0.423529,1.000000,0.388550,-0.103582,0.445932,4.000000,6.414327, -0.423529,0.423529,0.423529,1.000000,0.388550,-0.103582,0.445932,4.000000,6.414327,0.427451,0.427451,0.427451,1.000000,0.383423,-0.069344,0.466541,4.000000,6.277375,0.427451,0.427451,0.427451,1.000000,0.000000,0.000000,2.000000,4.000000,6.000000,0.435294,0.435294,0.435294,1.000000,0.380371,-0.034595,0.478689,4.000000,6.138380,0.439216,0.439216,0.439216,1.000000,0.379272,0.000000,0.482673,4.000000,6.000000, -0.407843,0.407843,0.407843,1.000000,0.414673,-0.191394,0.341301,4.000000,6.765576,0.411765,0.411765,0.411765,1.000000,0.403687,-0.162957,0.385368,4.000000,6.651829,0.364706,0.364706,0.364706,1.000000,0.500000,-0.500000,0.000000,4.000000,8.000000,0.415686,0.415686,0.415686,1.000000,0.395020,-0.133318,0.420032,4.000000,6.533272, -0.400000,0.400000,0.400000,1.000000,0.438232,-0.232438,0.247284,4.000000,6.929754,0.403922,0.403922,0.403922,1.000000,0.425171,-0.212276,0.299425,4.000000,6.849104,0.364706,0.364706,0.364706,1.000000,0.500000,-0.500000,0.000000,4.000000,8.000000,0.407843,0.407843,0.407843,1.000000,0.414673,-0.191394,0.341301,4.000000,6.765576, -0.396078,0.396078,0.396078,1.000000,0.467285,-0.260554,0.130636,4.000000,7.042214,0.400000,0.400000,0.400000,1.000000,0.453857,-0.250068,0.184711,4.000000,7.000273,0.364706,0.364706,0.364706,1.000000,0.500000,-0.500000,0.000000,4.000000,8.000000,0.400000,0.400000,0.400000,1.000000,0.438232,-0.232438,0.247284,4.000000,6.929754, -0.396078,0.396078,0.396078,1.000000,0.500000,-0.270672,0.000000,4.000000,7.082688,0.396078,0.396078,0.396078,1.000000,0.482788,-0.267902,0.068730,4.000000,7.071609,0.364706,0.364706,0.364706,1.000000,0.500000,-0.500000,0.000000,4.000000,8.000000,0.396078,0.396078,0.396078,1.000000,0.467285,-0.260554,0.130636,4.000000,7.042214, -0.439216,0.439216,0.439216,1.000000,0.379272,0.000000,0.482673,4.000000,6.000000,0.474510,0.474510,0.474510,1.000000,0.379272,0.180448,0.482673,4.000000,5.278208,0.517647,0.517647,0.517647,1.000000,0.000000,0.500000,2.000000,4.000000,4.000000,0.513726,0.513726,0.513726,1.000000,0.379272,0.360896,0.482673,4.000000,4.556417,0.545098,0.545098,0.545098,1.000000,0.379272,0.500000,0.482673,4.000000,4.000000, -0.545098,0.545098,0.545098,1.000000,0.379272,0.500000,0.482673,4.000000,4.000000,0.545098,0.545098,0.545098,1.000000,0.000000,1.000000,2.000000,4.000000,2.000000,0.517647,0.517647,0.517647,1.000000,0.000000,0.500000,2.000000,4.000000,4.000000, -0.600000,0.600000,0.600000,1.000000,0.500000,1.000000,0.000000,4.000000,2.000000,0.545098,0.545098,0.545098,1.000000,0.000000,1.000000,2.000000,4.000000,2.000000,0.552941,0.552941,0.552941,1.000000,0.379272,0.541344,0.482673,4.000000,3.834625,0.545098,0.545098,0.545098,1.000000,0.379272,0.500000,0.482673,4.000000,4.000000, -0.552941,0.552941,0.552941,1.000000,0.379272,0.541344,0.482673,4.000000,3.834625,0.556863,0.556863,0.556863,1.000000,0.459717,0.541344,0.160891,4.000000,3.834625,0.600000,0.600000,0.600000,1.000000,0.500000,1.000000,0.000000,4.000000,2.000000,0.556863,0.556863,0.556863,1.000000,0.500000,0.541344,0.000000,4.000000,3.834625,0.556863,0.556863,0.556863,1.000000,0.540283,0.541344,-0.160891,4.000000,3.834625, -0.396078,0.396078,0.396078,1.000000,0.517212,-0.267902,-0.068730,4.000000,7.071609,0.396078,0.396078,0.396078,1.000000,0.500000,-0.270672,0.000000,4.000000,7.082688,0.356863,0.356863,0.356863,1.000000,1.000000,-0.500000,-2.000000,4.000000,8.000000,0.364706,0.364706,0.364706,1.000000,0.500000,-0.500000,0.000000,4.000000,8.000000, -0.400000,0.400000,0.400000,1.000000,0.546143,-0.250068,-0.184711,4.000000,7.000273,0.396078,0.396078,0.396078,1.000000,0.532715,-0.260554,-0.130636,4.000000,7.042214,0.356863,0.356863,0.356863,1.000000,1.000000,-0.500000,-2.000000,4.000000,8.000000,0.396078,0.396078,0.396078,1.000000,0.517212,-0.267902,-0.068730,4.000000,7.071609, -0.403922,0.403922,0.403922,1.000000,0.574829,-0.212276,-0.299425,4.000000,6.849104,0.400000,0.400000,0.400000,1.000000,0.561768,-0.232438,-0.247284,4.000000,6.929754,0.356863,0.356863,0.356863,1.000000,1.000000,-0.500000,-2.000000,4.000000,8.000000,0.400000,0.400000,0.400000,1.000000,0.546143,-0.250068,-0.184711,4.000000,7.000273, -0.411765,0.411765,0.411765,1.000000,0.596313,-0.162957,-0.385368,4.000000,6.651829,0.407843,0.407843,0.407843,1.000000,0.585327,-0.191394,-0.341301,4.000000,6.765576,0.356863,0.356863,0.356863,1.000000,1.000000,-0.500000,-2.000000,4.000000,8.000000,0.403922,0.403922,0.403922,1.000000,0.574829,-0.212276,-0.299425,4.000000,6.849104, -0.423529,0.423529,0.423529,1.000000,0.611450,-0.103582,-0.445931,4.000000,6.414327,0.415686,0.415686,0.415686,1.000000,0.604980,-0.133318,-0.420033,4.000000,6.533272,0.356863,0.356863,0.356863,1.000000,1.000000,-0.500000,-2.000000,4.000000,8.000000,0.411765,0.411765,0.411765,1.000000,0.596313,-0.162957,-0.385368,4.000000,6.651829, -0.435294,0.435294,0.435294,1.000000,0.619629,-0.034595,-0.478689,4.000000,6.138380,0.427451,0.427451,0.427451,1.000000,0.616577,-0.069344,-0.466541,4.000000,6.277375,0.356863,0.356863,0.356863,1.000000,1.000000,-0.500000,-2.000000,4.000000,8.000000,0.423529,0.423529,0.423529,1.000000,0.611450,-0.103582,-0.445931,4.000000,6.414327, -0.513726,0.513726,0.513726,1.000000,0.620728,0.360896,-0.482673,4.000000,4.556417,0.474510,0.474510,0.474510,1.000000,0.620728,0.180448,-0.482673,4.000000,5.278208,0.427451,0.427451,0.427451,1.000000,1.000000,0.000000,-2.000000,4.000000,6.000000,0.439216,0.439216,0.439216,1.000000,0.620728,0.000000,-0.482673,4.000000,6.000000,0.356863,0.356863,0.356863,1.000000,1.000000,-0.500000,-2.000000,4.000000,8.000000,0.435294,0.435294,0.435294,1.000000,0.619629,-0.034595,-0.478689,4.000000,6.138380, -0.333333,0.333333,0.333333,1.000000,1.500000,-0.500000,-4.000000,4.000000,8.000000,0.388235,0.388235,0.388235,1.000000,1.500000,0.000000,-4.000000,4.000000,6.000000,0.427451,0.427451,0.427451,1.000000,1.000000,0.000000,-2.000000,4.000000,6.000000,0.517647,0.517647,0.517647,1.000000,1.000000,0.500000,-2.000000,4.000000,4.000000,0.513726,0.513726,0.513726,1.000000,0.620728,0.360896,-0.482673,4.000000,4.556417,0.545098,0.545098,0.545098,1.000000,0.620728,0.500000,-0.482673,4.000000,4.000000, -0.333333,0.333333,0.333333,1.000000,1.500000,-0.500000,-4.000000,4.000000,8.000000,0.427451,0.427451,0.427451,1.000000,1.000000,0.000000,-2.000000,4.000000,6.000000,0.356863,0.356863,0.356863,1.000000,1.000000,-0.500000,-2.000000,4.000000,8.000000, -0.556863,0.556863,0.556863,1.000000,0.540283,0.541344,-0.160891,4.000000,3.834625,0.552941,0.552941,0.552941,1.000000,0.620728,0.541344,-0.482673,4.000000,3.834625,0.545098,0.545098,0.545098,1.000000,1.000000,1.000000,-2.000000,4.000000,2.000000,0.517647,0.517647,0.517647,1.000000,1.000000,0.500000,-2.000000,4.000000,4.000000,0.450980,0.450980,0.450980,1.000000,1.500000,0.500000,-4.000000,4.000000,4.000000,0.388235,0.388235,0.388235,1.000000,1.500000,0.000000,-4.000000,4.000000,6.000000, -0.517647,0.517647,0.517647,1.000000,1.000000,0.500000,-2.000000,4.000000,4.000000,0.552941,0.552941,0.552941,1.000000,0.620728,0.541344,-0.482673,4.000000,3.834625,0.545098,0.545098,0.545098,1.000000,0.620728,0.500000,-0.482673,4.000000,4.000000, -0.450980,0.450980,0.450980,1.000000,1.500000,0.500000,-4.000000,4.000000,4.000000,0.435294,0.435294,0.435294,1.000000,1.500000,1.000000,-4.000000,4.000000,2.000000,0.545098,0.545098,0.545098,1.000000,1.000000,1.000000,-2.000000,4.000000,2.000000, -0.439216,0.439216,0.439216,1.000000,0.379272,0.000000,0.482673,4.000000,6.000000,0.517647,0.517647,0.517647,1.000000,0.000000,0.500000,2.000000,4.000000,4.000000,0.427451,0.427451,0.427451,1.000000,0.000000,0.000000,2.000000,4.000000,6.000000, -0.556863,0.556863,0.556863,1.000000,0.540283,0.541344,-0.160891,4.000000,3.834625,0.545098,0.545098,0.545098,1.000000,1.000000,1.000000,-2.000000,4.000000,2.000000,0.600000,0.600000,0.600000,1.000000,0.500000,1.000000,0.000000,4.000000,2.000000 - -}; - - -/* Object: skin_12 */ - -int striplength_skin_12[]={ -12,12,12,12,12,0}; - -float stripdata_skin_12[]={ -0.498039,0.498039,0.498039,1.000000,-0.099976,1.500000,-2.400000,-4.000000,-0.000002,0.337255,0.337255,0.337255,1.000000,-0.500000,1.500000,-4.000000,-4.000000,-0.000002,0.568627,0.568627,0.568627,1.000000,-0.099976,1.100000,-2.400000,-4.000000,1.599999,0.341176,0.341176,0.341176,1.000000,-0.500000,1.100000,-4.000000,-4.000000,1.599999,0.498039,0.498039,0.498039,1.000000,-0.099976,0.700000,-2.400000,-4.000000,3.200000,0.325490,0.325490,0.325490,1.000000,-0.500000,0.700000,-4.000000,-4.000000,3.199999,0.352941,0.352941,0.352941,1.000000,-0.099976,0.300000,-2.400000,-4.000000,4.800000,0.282353,0.282353,0.282353,1.000000,-0.500000,0.300000,-4.000000,-4.000000,4.800000,0.282353,0.282353,0.282353,1.000000,-0.099976,-0.100000,-2.400000,-4.000000,6.400001,0.254902,0.254902,0.254902,1.000000,-0.500000,-0.100000,-4.000000,-4.000000,6.400000,0.239216,0.239216,0.239216,1.000000,-0.099976,-0.500000,-2.400000,-4.000000,8.000000,0.227451,0.227451,0.227451,1.000000,-0.500000,-0.500000,-4.000000,-4.000000,8.000000, -0.239216,0.239216,0.239216,1.000000,1.099976,-0.500000,2.400001,-4.000000,8.000000,0.227451,0.227451,0.227451,1.000000,1.500000,-0.500000,4.000002,-4.000000,8.000000,0.282353,0.282353,0.282353,1.000000,1.099976,-0.100000,2.400001,-4.000000,6.400001,0.254902,0.254902,0.254902,1.000000,1.500000,-0.100000,4.000002,-4.000000,6.400001,0.352941,0.352941,0.352941,1.000000,1.099976,0.300000,2.400002,-4.000000,4.800001,0.282353,0.282353,0.282353,1.000000,1.500000,0.300000,4.000002,-4.000000,4.800001,0.498039,0.498039,0.498039,1.000000,1.099976,0.700000,2.400002,-4.000000,3.200000,0.321569,0.321569,0.321569,1.000000,1.500000,0.700000,4.000003,-4.000000,3.200000,0.568627,0.568627,0.568627,1.000000,1.099976,1.100000,2.400002,-4.000000,1.599999,0.341176,0.341176,0.341176,1.000000,1.500000,1.100000,4.000003,-4.000000,1.599999,0.494118,0.494118,0.494118,1.000000,1.099976,1.500000,2.400003,-4.000000,-0.000002,0.337255,0.337255,0.337255,1.000000,1.500000,1.500000,4.000004,-4.000000,-0.000002, -0.639216,0.639216,0.639216,1.000000,0.300049,1.500000,-0.799999,-4.000000,-0.000002,0.498039,0.498039,0.498039,1.000000,-0.099976,1.500000,-2.400000,-4.000000,-0.000002,0.858824,0.858824,0.858824,1.000000,0.300049,1.100000,-0.799999,-4.000000,1.599999,0.568627,0.568627,0.568627,1.000000,-0.099976,1.100000,-2.400000,-4.000000,1.599999,0.686275,0.686275,0.686275,1.000000,0.300049,0.700000,-0.799999,-4.000000,3.200000,0.498039,0.498039,0.498039,1.000000,-0.099976,0.700000,-2.400000,-4.000000,3.200000,0.419608,0.419608,0.419608,1.000000,0.300049,0.300000,-0.800000,-4.000000,4.800000,0.352941,0.352941,0.352941,1.000000,-0.099976,0.300000,-2.400000,-4.000000,4.800000,0.298039,0.298039,0.298039,1.000000,0.300049,-0.100000,-0.800000,-4.000000,6.400001,0.282353,0.282353,0.282353,1.000000,-0.099976,-0.100000,-2.400000,-4.000000,6.400001,0.247059,0.247059,0.247059,1.000000,0.300049,-0.500000,-0.800000,-4.000000,8.000000,0.239216,0.239216,0.239216,1.000000,-0.099976,-0.500000,-2.400000,-4.000000,8.000000, -0.639216,0.639216,0.639216,1.000000,0.699951,1.500000,0.800002,-4.000000,-0.000002,0.639216,0.639216,0.639216,1.000000,0.300049,1.500000,-0.799999,-4.000000,-0.000002,0.858824,0.858824,0.858824,1.000000,0.699951,1.100000,0.800001,-4.000000,1.599999,0.858824,0.858824,0.858824,1.000000,0.300049,1.100000,-0.799999,-4.000000,1.599999,0.686275,0.686275,0.686275,1.000000,0.699951,0.700000,0.800001,-4.000000,3.200000,0.686275,0.686275,0.686275,1.000000,0.300049,0.700000,-0.799999,-4.000000,3.200000,0.419608,0.419608,0.419608,1.000000,0.699951,0.300000,0.800001,-4.000000,4.800001,0.419608,0.419608,0.419608,1.000000,0.300049,0.300000,-0.800000,-4.000000,4.800000,0.298039,0.298039,0.298039,1.000000,0.699951,-0.100000,0.800001,-4.000000,6.400001,0.298039,0.298039,0.298039,1.000000,0.300049,-0.100000,-0.800000,-4.000000,6.400001,0.247059,0.247059,0.247059,1.000000,0.699951,-0.500000,0.800000,-4.000000,8.000000,0.247059,0.247059,0.247059,1.000000,0.300049,-0.500000,-0.800000,-4.000000,8.000000, -0.494118,0.494118,0.494118,1.000000,1.099976,1.500000,2.400003,-4.000000,-0.000002,0.639216,0.639216,0.639216,1.000000,0.699951,1.500000,0.800002,-4.000000,-0.000002,0.568627,0.568627,0.568627,1.000000,1.099976,1.100000,2.400002,-4.000000,1.599999,0.858824,0.858824,0.858824,1.000000,0.699951,1.100000,0.800001,-4.000000,1.599999,0.498039,0.498039,0.498039,1.000000,1.099976,0.700000,2.400002,-4.000000,3.200000,0.686275,0.686275,0.686275,1.000000,0.699951,0.700000,0.800001,-4.000000,3.200000,0.352941,0.352941,0.352941,1.000000,1.099976,0.300000,2.400002,-4.000000,4.800001,0.419608,0.419608,0.419608,1.000000,0.699951,0.300000,0.800001,-4.000000,4.800001,0.282353,0.282353,0.282353,1.000000,1.099976,-0.100000,2.400001,-4.000000,6.400001,0.298039,0.298039,0.298039,1.000000,0.699951,-0.100000,0.800001,-4.000000,6.400001,0.239216,0.239216,0.239216,1.000000,1.099976,-0.500000,2.400001,-4.000000,8.000000,0.247059,0.247059,0.247059,1.000000,0.699951,-0.500000,0.800000,-4.000000,8.000000 - -}; - - -/* Object: skin_11 */ - -int striplength_skin_11[]={ -12,12,12,12,12,0}; - -float stripdata_skin_11[]={ -0.145098,0.145098,0.145098,1.000000,-0.099976,1.500000,-2.400000,4.000002,0.000000,0.141176,0.141176,0.141176,1.000000,-0.500000,1.500000,-4.000000,4.000002,0.000000,0.176471,0.176471,0.176471,1.000000,-0.099976,1.100000,-2.400000,2.400001,0.000000,0.145098,0.145098,0.145098,1.000000,-0.500000,1.100000,-4.000000,2.400001,0.000000,0.341176,0.341176,0.341176,1.000000,-0.099976,0.700000,-2.400000,0.800000,0.000000,0.188235,0.188235,0.188235,1.000000,-0.500000,0.700000,-4.000000,0.800000,0.000000,0.450980,0.450980,0.450980,1.000000,-0.099976,0.300000,-2.400000,-0.800000,0.000000,0.247059,0.247059,0.247059,1.000000,-0.500000,0.300000,-4.000000,-0.800000,0.000000,0.439216,0.439216,0.439216,1.000000,-0.099976,-0.100000,-2.400000,-2.400000,0.000000,0.270588,0.270588,0.270588,1.000000,-0.500000,-0.100000,-4.000000,-2.400000,0.000000,0.364706,0.364706,0.364706,1.000000,-0.099976,-0.500000,-2.400000,-4.000000,0.000000,0.258824,0.258824,0.258824,1.000000,-0.500000,-0.500000,-4.000000,-4.000000,0.000000, -0.364706,0.364706,0.364706,1.000000,1.099976,-0.500000,2.400001,-4.000000,0.000000,0.258824,0.258824,0.258824,1.000000,1.500000,-0.500000,4.000002,-4.000000,0.000000,0.439216,0.439216,0.439216,1.000000,1.099976,-0.100000,2.400001,-2.400001,0.000000,0.270588,0.270588,0.270588,1.000000,1.500000,-0.100000,4.000002,-2.400001,0.000000,0.454902,0.454902,0.454902,1.000000,1.099976,0.300000,2.400002,-0.800000,0.000000,0.247059,0.247059,0.247059,1.000000,1.500000,0.300000,4.000002,-0.800000,0.000000,0.341176,0.341176,0.341176,1.000000,1.099976,0.700000,2.400002,0.800000,0.000000,0.184314,0.184314,0.184314,1.000000,1.500000,0.700000,4.000003,0.800000,0.000000,0.176471,0.176471,0.176471,1.000000,1.099976,1.100000,2.400002,2.400001,0.000000,0.145098,0.145098,0.145098,1.000000,1.500000,1.100000,4.000003,2.400001,0.000000,0.145098,0.145098,0.145098,1.000000,1.099976,1.500000,2.400003,4.000003,0.000000,0.141176,0.141176,0.141176,1.000000,1.500000,1.500000,4.000004,4.000002,0.000000, -0.145098,0.145098,0.145098,1.000000,0.300049,1.500000,-0.799999,4.000002,0.000000,0.145098,0.145098,0.145098,1.000000,-0.099976,1.500000,-2.400000,4.000002,0.000000,0.262745,0.262745,0.262745,1.000000,0.300049,1.100000,-0.799999,2.400001,0.000000,0.176471,0.176471,0.176471,1.000000,-0.099976,1.100000,-2.400000,2.400001,0.000000,0.580392,0.580392,0.580392,1.000000,0.300049,0.700000,-0.799999,0.800000,0.000000,0.341176,0.341176,0.341176,1.000000,-0.099976,0.700000,-2.400000,0.800000,0.000000,0.709804,0.709804,0.709804,1.000000,0.300049,0.300000,-0.800000,-0.800000,0.000000,0.450980,0.450980,0.450980,1.000000,-0.099976,0.300000,-2.400000,-0.800000,0.000000,0.627451,0.627451,0.627451,1.000000,0.300049,-0.100000,-0.800000,-2.400001,0.000000,0.439216,0.439216,0.439216,1.000000,-0.099976,-0.100000,-2.400000,-2.400000,0.000000,0.458824,0.458824,0.458824,1.000000,0.300049,-0.500000,-0.800000,-4.000000,0.000000,0.364706,0.364706,0.364706,1.000000,-0.099976,-0.500000,-2.400000,-4.000000,0.000000, -0.145098,0.145098,0.145098,1.000000,0.699951,1.500000,0.800002,4.000002,0.000000,0.145098,0.145098,0.145098,1.000000,0.300049,1.500000,-0.799999,4.000002,0.000000,0.262745,0.262745,0.262745,1.000000,0.699951,1.100000,0.800001,2.400001,0.000000,0.262745,0.262745,0.262745,1.000000,0.300049,1.100000,-0.799999,2.400001,0.000000,0.580392,0.580392,0.580392,1.000000,0.699951,0.700000,0.800001,0.800000,0.000000,0.580392,0.580392,0.580392,1.000000,0.300049,0.700000,-0.799999,0.800000,0.000000,0.713726,0.713726,0.713726,1.000000,0.699951,0.300000,0.800001,-0.800000,0.000000,0.709804,0.709804,0.709804,1.000000,0.300049,0.300000,-0.800000,-0.800000,0.000000,0.631373,0.631373,0.631373,1.000000,0.699951,-0.100000,0.800001,-2.400001,0.000000,0.627451,0.627451,0.627451,1.000000,0.300049,-0.100000,-0.800000,-2.400001,0.000000,0.458824,0.458824,0.458824,1.000000,0.699951,-0.500000,0.800000,-4.000000,0.000000,0.458824,0.458824,0.458824,1.000000,0.300049,-0.500000,-0.800000,-4.000000,0.000000, -0.145098,0.145098,0.145098,1.000000,1.099976,1.500000,2.400003,4.000003,0.000000,0.145098,0.145098,0.145098,1.000000,0.699951,1.500000,0.800002,4.000002,0.000000,0.176471,0.176471,0.176471,1.000000,1.099976,1.100000,2.400002,2.400001,0.000000,0.262745,0.262745,0.262745,1.000000,0.699951,1.100000,0.800001,2.400001,0.000000,0.341176,0.341176,0.341176,1.000000,1.099976,0.700000,2.400002,0.800000,0.000000,0.580392,0.580392,0.580392,1.000000,0.699951,0.700000,0.800001,0.800000,0.000000,0.454902,0.454902,0.454902,1.000000,1.099976,0.300000,2.400002,-0.800000,0.000000,0.713726,0.713726,0.713726,1.000000,0.699951,0.300000,0.800001,-0.800000,0.000000,0.439216,0.439216,0.439216,1.000000,1.099976,-0.100000,2.400001,-2.400001,0.000000,0.631373,0.631373,0.631373,1.000000,0.699951,-0.100000,0.800001,-2.400001,0.000000,0.364706,0.364706,0.364706,1.000000,1.099976,-0.500000,2.400001,-4.000000,0.000000,0.458824,0.458824,0.458824,1.000000,0.699951,-0.500000,0.800000,-4.000000,0.000000 - -}; - - -/* Object: skin_9 */ - -int striplength_skin_9[]={ -18,0}; - -float stripdata_skin_9[]={ -0.384314,0.384314,0.384314,1.000000,-0.500000,1.500000,-4.000000,4.000000,8.000000,0.384314,0.384314,0.384314,1.000000,1.500000,1.500000,4.000000,4.000000,8.000000,0.376471,0.376471,0.376471,1.000000,-0.500000,1.250000,-4.000000,3.695518,9.530733,0.403922,0.403922,0.403922,1.000000,1.500000,1.250000,4.000000,3.695518,9.530733,0.415686,0.415686,0.415686,1.000000,-0.500000,1.000000,-4.000000,2.828427,10.828427,0.431373,0.431373,0.431373,1.000000,1.500000,1.000000,4.000000,2.828427,10.828427,0.435294,0.435294,0.435294,1.000000,-0.500000,0.750000,-4.000000,1.530734,11.695518,0.443137,0.443137,0.443137,1.000000,1.500000,0.750000,4.000000,1.530734,11.695518,0.439216,0.439216,0.439216,1.000000,-0.500000,0.500000,-4.000000,0.000000,12.000000,0.435294,0.435294,0.435294,1.000000,1.500000,0.500000,4.000000,0.000000,12.000000,0.427451,0.427451,0.427451,1.000000,-0.500000,0.250000,-4.000000,-1.530734,11.695518,0.411765,0.411765,0.411765,1.000000,1.500000,0.250000,4.000000,-1.530734,11.695518,0.396078,0.396078,0.396078,1.000000,-0.500000,0.000000,-4.000000,-2.828427,10.828427,0.368627,0.368627,0.368627,1.000000,1.500000,0.000000,4.000000,-2.828427,10.828427,0.341176,0.341176,0.341176,1.000000,-0.500000,-0.250000,-4.000000,-3.695518,9.530733,0.301961,0.301961,0.301961,1.000000,1.500000,-0.250000,4.000000,-3.695518,9.530733,0.294118,0.294118,0.294118,1.000000,-0.500000,-0.500000,-4.000000,-4.000000,8.000000,0.294118,0.294118,0.294118,1.000000,1.500000,-0.500000,4.000000,-4.000000,8.000000 - -}; - - diff --git a/lib/glut-3.7.6/progs/bucciarelli/teapot.c b/lib/glut-3.7.6/progs/bucciarelli/teapot.c deleted file mode 100644 index 02226030e..000000000 --- a/lib/glut-3.7.6/progs/bucciarelli/teapot.c +++ /dev/null @@ -1,594 +0,0 @@ -/* - * This program is under the GNU GPL. - * Use at your own risk. - * - * written by David Bucciarelli (tech.hmw@plus.it) - * Humanware s.r.l. - */ - -#include -#include -#include -#include -#include - -#ifdef _WIN32 -#include -#endif - -#include - -#if defined(GL_VERSION_1_1) -/* Routines called directly. */ -#elif defined(GL_EXT_texture_object) && defined(GL_EXT_copy_texture) && defined(GL_EXT_subtexture) -#define glBindTexture(A,B) glBindTextureEXT(A,B) -#define glGenTextures(A,B) glGenTexturesEXT(A,B) -#else -#define glBindTexture(A,B) -#define glGenTextures(A,B) -#endif - -#include "image.h" - -static int WIDTH=640; -static int HEIGHT=480; - -#define FRAME 50 - -#define BASESIZE 10.0 - -#define BASERES 12 -#define TEAPOTRES 3 - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -extern void teapot(GLint, GLdouble, GLenum); -extern void shadowmatrix(GLfloat [4][4], GLfloat [4], GLfloat [4]); -extern void findplane(GLfloat [4], GLfloat [3], GLfloat [3], GLfloat [3]); - -static float obs[3]={5.0,0.0,1.0}; -static float dir[3]; -static float v=0.0; -static float alpha=-90.0; -static float beta=90.0; - -static GLfloat baseshadow[4][4]; -static GLfloat lightpos[4]={2.3,0.0,3.0,1.0}; -static GLfloat lightdir[3]={-2.3,0.0,-3.0}; -static GLfloat lightalpha=0.0; - -static int fog=1; -static int bfcull=1; -static int usetex=1; -static int help=1; -static int joyavailable=0; -static int joyactive=0; - -static GLuint t1id,t2id; -static GLuint teapotdlist,basedlist,lightdlist; - -static float gettime(void) -{ - static clock_t told=0; - clock_t tnew,ris; - - tnew=clock(); - - ris=tnew-told; - - told=tnew; - - return(ris/(float)CLOCKS_PER_SEC); -} - -static void calcposobs(void) -{ - dir[0]=sin(alpha*M_PI/180.0); - dir[1]=cos(alpha*M_PI/180.0)*sin(beta*M_PI/180.0); - dir[2]=cos(beta*M_PI/180.0); - - obs[0]+=v*dir[0]; - obs[1]+=v*dir[1]; - obs[2]+=v*dir[2]; -} - -/* ARGSUSED1 */ -static void special(int k, int x, int y) -{ - switch(k) { - case GLUT_KEY_LEFT: - alpha-=2.0; - break; - case GLUT_KEY_RIGHT: - alpha+=2.0; - break; - case GLUT_KEY_DOWN: - beta-=2.0; - break; - case GLUT_KEY_UP: - beta+=2.0; - break; - } -} - -/* ARGSUSED1 */ -static void key(unsigned char k, int x, int y) -{ - switch(k) { - case 27: - exit(0); - break; - - case 'a': - v+=0.005; - break; - case 'z': - v-=0.005; - break; - - case 'j': - joyactive=(!joyactive); - break; - case 'h': - help=(!help); - break; - case 'f': - fog=(!fog); - break; - case 't': - usetex=(!usetex); - break; - case 'b': - if(bfcull) { - glDisable(GL_CULL_FACE); - bfcull=0; - } else { - glEnable(GL_CULL_FACE); - bfcull=1; - } - break; - } -} - -static void reshape(int w, int h) -{ - WIDTH=w; - HEIGHT=h; - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(45.0,w/(float)h,0.2,40.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glViewport(0,0,w,h); -} - -static void printstring(void *font, char *string) -{ - int len,i; - - len=(int)strlen(string); - for(i=0;ijoy.wXpos) - min[0]=joy.wXpos; - center[0]=(max[0]+min[0])/2; - - if(max[1]joy.wYpos) - min[1]=joy.wYpos; - center[1]=(max[1]+min[1])/2; - - if(joyactive) { - if(fabs(center[0]-(float)joy.wXpos)>0.1*(max[0]-min[0])) - alpha-=2.5*(center[0]-(float)joy.wXpos)/(max[0]-min[0]); - if(fabs(center[1]-(float)joy.wYpos)>0.1*(max[1]-min[1])) - beta+=2.5*(center[1]-(float)joy.wYpos)/(max[1]-min[1]); - - if(joy.wButtons & JOY_BUTTON1) - v+=0.005; - if(joy.wButtons & JOY_BUTTON2) - v-=0.005; - } - } else - joyavailable=0; -#endif -} - -static void draw(void) -{ - static int count=0; - static char frbuf[80]; - float fr; - - dojoy(); - - glEnable(GL_DEPTH_TEST); - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - - if(usetex) - glEnable(GL_TEXTURE_2D); - else - glDisable(GL_TEXTURE_2D); - - if(fog) - glEnable(GL_FOG); - else - glDisable(GL_FOG); - - glEnable(GL_LIGHTING); - - glShadeModel(GL_SMOOTH); - - glPushMatrix(); - calcposobs(); - - gluLookAt(obs[0],obs[1],obs[2], - obs[0]+dir[0],obs[1]+dir[1],obs[2]+dir[2], - 0.0,0.0,1.0); - - drawlight1(); - glCallList(basedlist); - drawteapot(); - drawlight2(); - glPopMatrix(); - - if((count % FRAME)==0) { - fr=gettime(); - sprintf(frbuf,"Frame rate: %f",FRAME/fr); - } - - glDisable(GL_LIGHTING); - glDisable(GL_TEXTURE_2D); - glDisable(GL_DEPTH_TEST); - glDisable(GL_FOG); - glShadeModel(GL_FLAT); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho(-0.5,639.5,-0.5,479.5,-1.0,1.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - glColor3f(1.0,0.0,0.0); - glRasterPos2i(10,10); - printstring(GLUT_BITMAP_HELVETICA_18,frbuf); - glRasterPos2i(350,470); - printstring(GLUT_BITMAP_HELVETICA_10,"Teapot V1.2 Written by David Bucciarelli (tech.hmw@plus.it)"); - - if(help) - printhelp(); - - reshape(WIDTH,HEIGHT); - - glutSwapBuffers(); - - count++; -} - -static void inittextures(void) -{ - IMAGE *img; - GLenum gluerr; - - glGenTextures(1,&t1id); - glBindTexture(GL_TEXTURE_2D,t1id); - - if(!(img=ImageLoad("tile.rgb"))) { - fprintf(stderr,"Error reading a texture.\n"); - exit(-1); - } - - glPixelStorei(GL_UNPACK_ALIGNMENT,4); - if((gluerr=gluBuild2DMipmaps(GL_TEXTURE_2D, 3, img->sizeX, img->sizeY, GL_RGB, - GL_UNSIGNED_BYTE, (GLvoid *)(img->data)))) { - fprintf(stderr,"GLULib%s\n",gluErrorString(gluerr)); - exit(-1); - } - - glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); - glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT); - - glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST_MIPMAP_LINEAR); - glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); - - glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE); - - glGenTextures(1,&t2id); - glBindTexture(GL_TEXTURE_2D,t2id); - - if(!(img=ImageLoad("bw.rgb"))) { - fprintf(stderr,"Error reading a texture.\n"); - exit(-1); - } - - glPixelStorei(GL_UNPACK_ALIGNMENT,4); - if((gluerr=gluBuild2DMipmaps(GL_TEXTURE_2D, 3, img->sizeX, img->sizeY, GL_RGB, - GL_UNSIGNED_BYTE, (GLvoid *)(img->data)))) { - fprintf(stderr,"GLULib%s\n",gluErrorString(gluerr)); - exit(-1); - } - - glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); - glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT); - - glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST_MIPMAP_LINEAR); - glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); - - glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE); -} - -static void initlight(void) -{ - float lamb[4]={0.2,0.2,0.2,1.0}; - float lspec[4]={1.0,1.0,1.0,1.0}; - - glLightf(GL_LIGHT0,GL_SPOT_CUTOFF,70.0); - glLightf(GL_LIGHT0,GL_SPOT_EXPONENT,20.0); - glLightfv(GL_LIGHT0,GL_AMBIENT,lamb); - glLightfv(GL_LIGHT0,GL_SPECULAR,lspec); - - glMaterialf(GL_FRONT_AND_BACK,GL_SHININESS,20.0); - glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,lspec); - - glEnable(GL_LIGHT0); -} - -static void initdlists(void) -{ - GLUquadricObj *lcone,*lbase; - GLfloat plane[4]; - GLfloat v0[3]={0.0,0.0,0.0}; - GLfloat v1[3]={1.0,0.0,0.0}; - GLfloat v2[3]={0.0,1.0,0.0}; - - findplane(plane,v0,v1,v2); - shadowmatrix(baseshadow,plane,lightpos); - - teapotdlist=glGenLists(1); - glNewList(teapotdlist,GL_COMPILE); - glRotatef(90.0,1.0,0.0,0.0); - glCullFace(GL_FRONT); - glBindTexture(GL_TEXTURE_2D,t2id); - teapot(TEAPOTRES,0.6,GL_FILL); - glCullFace(GL_BACK); - glEndList(); - - basedlist=glGenLists(1); - glNewList(basedlist,GL_COMPILE); - drawbase(); - glEndList(); - - lightdlist=glGenLists(1); - glNewList(lightdlist,GL_COMPILE); - glDisable(GL_LIGHTING); - - lcone=gluNewQuadric(); - lbase=gluNewQuadric(); - glRotatef(45.0,0.0,1.0,0.0); - - glColor3f(1.0,1.0,1.0); - glCullFace(GL_FRONT); - gluDisk(lbase,0.0,0.2,12.0,1.0); - glCullFace(GL_BACK); - - glColor3f(0.5,0.0,0.0); - gluCylinder(lcone,0.2,0.0,0.5,12,1); - - gluDeleteQuadric(lcone); - gluDeleteQuadric(lbase); - - glEnable(GL_LIGHTING); - glEndList(); -} - -int main(int ac, char **av) -{ - float fogcolor[4]={0.025,0.025,0.025,1.0}; - - fprintf(stderr,"Teapot V1.2\nWritten by David Bucciarelli (tech.hmw@plus.it)\n"); - - /* - if(!SetPriorityClass(GetCurrentProcess(),REALTIME_PRIORITY_CLASS)) { - fprintf(stderr,"Error setting the process class.\n"); - return 0; - } - - if(!SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_TIME_CRITICAL)) { - fprintf(stderr,"Error setting the process priority.\n"); - return 0; - } - */ - - glutInitWindowPosition(0,0); - glutInitWindowSize(WIDTH,HEIGHT); - glutInit(&ac,av); - - glutInitDisplayMode(GLUT_RGB|GLUT_DEPTH|GLUT_DOUBLE); - - glutCreateWindow("Teapot"); - - reshape(WIDTH,HEIGHT); - - glShadeModel(GL_SMOOTH); - glEnable(GL_DEPTH_TEST); - glEnable(GL_CULL_FACE); - glEnable(GL_TEXTURE_2D); - - glEnable(GL_FOG); - glFogi(GL_FOG_MODE,GL_EXP2); - glFogfv(GL_FOG_COLOR,fogcolor); - - glFogf(GL_FOG_DENSITY,0.04); -#ifdef FX - glHint(GL_FOG_HINT,GL_NICEST); -#endif - glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); - - calcposobs(); - - inittextures(); - initlight(); - -#ifndef FX - glDisable(GL_TEXTURE_2D); - usetex=0; -#endif - - initdlists(); - - glClearColor(fogcolor[0],fogcolor[1],fogcolor[2],fogcolor[3]); - - glutReshapeFunc(reshape); - glutDisplayFunc(draw); - glutKeyboardFunc(key); - glutSpecialFunc(special); - glutIdleFunc(draw); - - glutMainLoop(); - - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/bucciarelli/teapot.dsp b/lib/glut-3.7.6/progs/bucciarelli/teapot.dsp deleted file mode 100644 index 289963aa7..000000000 --- a/lib/glut-3.7.6/progs/bucciarelli/teapot.dsp +++ /dev/null @@ -1,104 +0,0 @@ -# Microsoft Developer Studio Project File - Name="teapot" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=teapot - 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 "teapot.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 "teapot.mak" CFG="teapot - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "teapot - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "teapot - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "teapot - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "teapot - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "teapot - Win32 Release" -# Name "teapot - Win32 Debug" -# Begin Source File - -SOURCE=.\dteapot.c -# End Source File -# Begin Source File - -SOURCE=.\image.c -# End Source File -# Begin Source File - -SOURCE=.\image.h -# End Source File -# Begin Source File - -SOURCE=.\shadow.c -# End Source File -# Begin Source File - -SOURCE=.\teapot.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/bucciarelli/terrain.c b/lib/glut-3.7.6/progs/bucciarelli/terrain.c deleted file mode 100644 index 6a60e0390..000000000 --- a/lib/glut-3.7.6/progs/bucciarelli/terrain.c +++ /dev/null @@ -1,596 +0,0 @@ -/* - * This program is under the GNU GPL. - * Use at your own risk. - * - * written by David Bucciarelli (tech.hmw@plus.it) - * Humanware s.r.l. - * - * based on a Mikael SkiZoWalker's (MoDEL) / France (Skizo@Hol.Fr) demo - */ - -#include -#include -#include -#include -#include - -#ifdef _WIN32 -#include -#endif - -#include - -#ifndef M_PI -#define M_PI 3.14159265 -#endif - -#define heightMnt 450 -#define lenghtXmnt 62 -#define lenghtYmnt 62 - -#define stepXmnt 96.0 -#define stepYmnt 96.0 - -#define WIDTH 640 -#define HEIGHT 480 - -#define TSCALE 4 - -#define FRAME 50 - -#define FOV 85 - -static GLfloat terrain[256*256]; -static GLfloat terraincolor[256*256][3]; - -static int fog=1; -static int bfcull=1; -static int usetex=1; -static int poutline=0; -static int help=1; -static int joyavailable=0; -static int joyactive=0; -static long GlobalMnt=0; - -static int scrwidth=WIDTH; -static int scrheight=HEIGHT; - -#define OBSSTARTX 992.0 -#define OBSSTARTY 103.0 - -static float obs[3]={OBSSTARTX,heightMnt*1.3,OBSSTARTY}; -static float dir[3],v1[2],v2[2]; -static float v=0.0; -static float alpha=75.0; -static float beta=90.0; - -static float gettime(void) -{ - static clock_t told=0; - clock_t tnew,ris; - - tnew=clock(); - - ris=tnew-told; - - told=tnew; - - return(ris/(float)CLOCKS_PER_SEC); -} - -static void calcposobs(void) -{ - float alpha1,alpha2; - - dir[0]=sin(alpha*M_PI/180.0); - dir[2]=cos(alpha*M_PI/180.0)*sin(beta*M_PI/180.0); - dir[1]=cos(beta*M_PI/180.0); - - alpha1=alpha+FOV/2.0; - v1[0]=sin(alpha1*M_PI/180.0); - v1[1]=cos(alpha1*M_PI/180.0); - - alpha2=alpha-FOV/2.0; - v2[0]=sin(alpha2*M_PI/180.0); - v2[1]=cos(alpha2*M_PI/180.0); - - obs[0]+=v*dir[0]; - obs[1]+=v*dir[1]; - obs[2]+=v*dir[2]; - - if(obs[1]<0.0) - obs[1]=0.0; -} - -static void reshape( int width, int height ) -{ - scrwidth=width; - scrheight=height; - glViewport(0, 0, (GLint)width, (GLint)height); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(50.0, ((GLfloat) width/(GLfloat)height), lenghtXmnt*stepYmnt*0.01, - lenghtXmnt*stepYmnt*0.7); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -int clipstrip(float y, float *start, float *end) -{ - float x1,x2,t1,t2,tmp; - - if(v1[1]==0.0) { - t1=0.0; - x1=-HUGE_VAL; - } else { - t1=y/v1[1]; - x1=t1*v1[0]; - } - - if(v2[1]==0.0) { - t2=0.0; - x2=HUGE_VAL; - } else { - t2=y/v2[1]; - x2=t2*v2[0]; - } - - if(((x1<-(lenghtXmnt*stepXmnt)/2) && (t2<=0.0)) || - ((t1<=0.0) && (x2>(lenghtXmnt*stepXmnt)/2)) || - ((t1<0.0) && (t2<0.0))) - return 0; - - if((t1==0.0) && (t2==0.0)) { - if((v1[0]<0.0) && (v1[1]>0.0) && (v2[0]<0.0) && (v2[1]<0.0)) { - *start=-(lenghtXmnt*stepXmnt)/2; - *end=stepXmnt; - return 1; - } else { - if((v1[0]>0.0) && (v1[1]<0.0) && (v2[0]>0.0) && (v2[1]>0.0)) { - *start=-stepXmnt; - *end=(lenghtXmnt*stepXmnt)/2; - return 1; - } else - return 0; - } - } else { - if(t2<0.0) { - if(x1<0.0) - x2=-(lenghtXmnt*stepXmnt)/2; - else - x2=(lenghtXmnt*stepXmnt)/2; - } - - if(t1<0.0) { - if(x2<0.0) - x1=-(lenghtXmnt*stepXmnt)/2; - else - x1=(lenghtXmnt*stepXmnt)/2; - } - } - - if(x1>x2) { - tmp=x1; - x1=x2; - x2=tmp; - } - - x1-=stepXmnt; - if(x1<-(lenghtXmnt*stepXmnt)/2) - x1=-(lenghtXmnt*stepXmnt)/2; - - x2+=stepXmnt; - if(x2>(lenghtXmnt*stepXmnt)/2) - x2=(lenghtXmnt*stepXmnt)/2; - - *start=((int)(x1/stepXmnt))*stepXmnt; - *end=((int)(x2/stepXmnt))*stepXmnt; - - return 1; -} - -static void printstring(void *font, char *string) -{ - int len,i; - - len=(int)strlen(string); - for(i=0;ijoy.wXpos) - min[0]=joy.wXpos; - center[0]=(max[0]+min[0])/2; - - if(max[1]joy.wYpos) - min[1]=joy.wYpos; - center[1]=(max[1]+min[1])/2; - - if(joyactive) { - if(fabs(center[0]-(float)joy.wXpos)>0.1*(max[0]-min[0])) - alpha+=2.5*(center[0]-(float)joy.wXpos)/(max[0]-min[0]); - if(fabs(center[1]-(float)joy.wYpos)>0.1*(max[1]-min[1])) - beta+=2.5*(center[1]-(float)joy.wYpos)/(max[1]-min[1]); - - if(joy.wButtons & JOY_BUTTON1) - v+=0.5; - if(joy.wButtons & JOY_BUTTON2) - v-=0.5; - } - } else - joyavailable=0; -#endif -} - -void drawscene(void) -{ - static int count=0; - static char frbuf[80]; - float fr; - - dojoy(); - - glShadeModel(GL_SMOOTH); - glEnable(GL_DEPTH_TEST); - - if(usetex) - glEnable(GL_TEXTURE_2D); - else - glDisable(GL_TEXTURE_2D); - - if(fog) - glEnable(GL_FOG); - else - glDisable(GL_FOG); - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glPushMatrix(); - - calcposobs(); - gluLookAt(obs[0],obs[1],obs[2], - obs[0]+dir[0],obs[1]+dir[1],obs[2]+dir[2], - 0.0,1.0,0.0); - - drawterrain(); - glPopMatrix(); - - if((count % FRAME)==0) { - fr=gettime(); - sprintf(frbuf,"Frame rate: %.3f",FRAME/fr); - } - - glDisable(GL_TEXTURE_2D); - glDisable(GL_DEPTH_TEST); - glDisable(GL_FOG); - glShadeModel(GL_FLAT); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho(-0.5,639.5,-0.5,479.5,-1.0,1.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - glColor3f(1.0,0.0,0.0); - glRasterPos2i(10,10); - printstring(GLUT_BITMAP_HELVETICA_18,frbuf); - glRasterPos2i(350,470); - printstring(GLUT_BITMAP_HELVETICA_10,"Terrain V1.2 Written by David Bucciarelli (tech.hmw@plus.it)"); - glRasterPos2i(434,457); - printstring(GLUT_BITMAP_HELVETICA_10,"Based on a Mickael's demo (Skizo@Hol.Fr)"); - - if(help) - printhelp(); - - reshape(scrwidth,scrheight); - - glutSwapBuffers(); - - count++; -} - -/* ARGSUSED1 */ -static void key(unsigned char k, int x, int y) -{ - switch (k) { - case 27: - exit(0); - break; - case 'a': - v+=0.5; - break; - case 'z': - v-=0.5; - break; - case 'p': - if(poutline) { - glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); - poutline=0; - } else { - glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); - poutline=1; - } - break; - case 'j': - joyactive=(!joyactive); - break; - case 'h': - help=(!help); - break; - case 'f': - fog=(!fog); - break; - case 't': - usetex=(!usetex); - break; - case 'b': - if(bfcull) { - glDisable(GL_CULL_FACE); - bfcull=0; - } else { - glEnable(GL_CULL_FACE); - bfcull=1; - } - break; - } -} - -/* ARGSUSED1 */ -static void special(int k, int x, int y) -{ - switch(k) { - case GLUT_KEY_LEFT: - alpha+=2.0; - break; - case GLUT_KEY_RIGHT: - alpha-=2.0; - break; - case GLUT_KEY_DOWN: - beta-=2.0; - break; - case GLUT_KEY_UP: - beta+=2.0; - break; - } -} - -static void calccolor(GLfloat height, GLfloat c[3]) -{ - GLfloat color[4][3]={ - {1.0,1.0,1.0}, - {0.0,0.8,0.0}, - {1.0,1.0,0.3}, - {0.0,0.0,0.8} - }; - GLfloat fact; - - height=height*(1.0/255.0); - - if(height>=0.9) { - c[0]=color[0][0]; c[1]=color[0][1]; c[2]=color[0][2]; - return; - } - - if((height<0.9) && (height>=0.7)) { - fact=(height-0.7)*5.0; - c[0]=fact*color[0][0]+(1.0-fact)*color[1][0]; - c[1]=fact*color[0][1]+(1.0-fact)*color[1][1]; - c[2]=fact*color[0][2]+(1.0-fact)*color[1][2]; - return; - } - - if((height<0.7) && (height>=0.6)) { - fact=(height-0.6)*10.0; - c[0]=fact*color[1][0]+(1.0-fact)*color[2][0]; - c[1]=fact*color[1][1]+(1.0-fact)*color[2][1]; - c[2]=fact*color[1][2]+(1.0-fact)*color[2][2]; - return; - } - - if((height<0.6) && (height>=0.5)) { - fact=(height-0.5)*10.0; - c[0]=fact*color[2][0]+(1.0-fact)*color[3][0]; - c[1]=fact*color[2][1]+(1.0-fact)*color[3][1]; - c[2]=fact*color[2][2]+(1.0-fact)*color[3][2]; - return; - } - - c[0]=color[3][0]; c[1]=color[3][1]; c[2]=color[3][2]; -} - -static void loadpic (void) -{ - GLubyte bufferter[256*256],terrainpic[256*256]; - FILE *FilePic; - int i,tmp; - GLenum gluerr; - - if((FilePic=fopen("mnt.bin","r"))==NULL) { - fprintf(stderr,"Error loading Mnt.bin\n"); - exit(-1); - } - fread(bufferter , 256*256 , 1 , FilePic); - fclose(FilePic); - - for (i=0;i<(256*256);i++) { - terrain[i]=(bufferter[i]*(heightMnt/255.0f)); - calccolor((GLfloat)bufferter[i],terraincolor[i]); - tmp=(((int)bufferter[i])+96); - terrainpic[i]=(tmp>255) ? 255 : tmp; - } - - glPixelStorei(GL_UNPACK_ALIGNMENT,1); - if((gluerr=gluBuild2DMipmaps(GL_TEXTURE_2D, 1, 256, 256, GL_LUMINANCE, - GL_UNSIGNED_BYTE, (GLvoid *)(&terrainpic[0])))) { - fprintf(stderr,"GLULib%s\n",gluErrorString(gluerr)); - exit(-1); - } - - glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); - glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT); - - glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST_MIPMAP_LINEAR); - glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); - - glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE); - glEnable(GL_TEXTURE_2D); -} - -static void init( void ) -{ - float fogcolor[4]={0.6,0.7,0.7,1.0}; - - glClearColor(fogcolor[0],fogcolor[1],fogcolor[2],fogcolor[3]); - glClearDepth(1.0); - glDepthFunc(GL_LEQUAL); - glShadeModel(GL_SMOOTH); - glEnable(GL_DEPTH_TEST); - glEnable(GL_CULL_FACE); - - glDisable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); - - glEnable(GL_FOG); - glFogi(GL_FOG_MODE,GL_EXP2); - glFogfv(GL_FOG_COLOR,fogcolor); - glFogf(GL_FOG_DENSITY,0.0007); -#ifdef FX - glHint(GL_FOG_HINT,GL_NICEST); -#endif - - reshape(scrwidth,scrheight); -} - - -int main(int ac, char **av) -{ - glutInitWindowPosition(0,0); - glutInitWindowSize(WIDTH,HEIGHT); - glutInit(&ac,av); - - glutInitDisplayMode(GLUT_RGB|GLUT_DEPTH|GLUT_DOUBLE); - - glutCreateWindow("Terrain"); - - loadpic(); - - init(); - -#ifndef FX - glDisable(GL_TEXTURE_2D); - usetex=0; -#endif - - glutReshapeFunc(reshape); - glutDisplayFunc(drawscene); - glutKeyboardFunc(key); - glutSpecialFunc(special); - glutIdleFunc(drawscene); - - glutMainLoop(); - - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/bucciarelli/terrain.dsp b/lib/glut-3.7.6/progs/bucciarelli/terrain.dsp deleted file mode 100644 index a4ef5e121..000000000 --- a/lib/glut-3.7.6/progs/bucciarelli/terrain.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="terrain" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=terrain - 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 "terrain.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 "terrain.mak" CFG="terrain - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "terrain - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "terrain - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "terrain - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "terrain - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "terrain - Win32 Release" -# Name "terrain - Win32 Debug" -# Begin Source File - -SOURCE=.\terrain.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/bucciarelli/tile.rgb b/lib/glut-3.7.6/progs/bucciarelli/tile.rgb deleted file mode 100644 index 8daf5acd11e0d08befd268a9f654b51cc33110e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53807 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 Upi)}<={Q?TKqVLUd;==|AAnilv;Y7A diff --git a/lib/glut-3.7.6/progs/bucciarelli/tunnel.c b/lib/glut-3.7.6/progs/bucciarelli/tunnel.c deleted file mode 100644 index 3b7c3bcae..000000000 --- a/lib/glut-3.7.6/progs/bucciarelli/tunnel.c +++ /dev/null @@ -1,534 +0,0 @@ -/* - * This program is under the GNU GPL. - * Use at your own risk. - * - * written by David Bucciarelli (tech.hmw@plus.it) - * Humanware s.r.l. - */ - -#include -#include -#include -#include -#include - -#ifdef _WIN32 -#include -#endif - -#include - -#if defined(GL_VERSION_1_1) -/* Routines called directly. */ -#elif defined(GL_EXT_texture_object) && defined(GL_EXT_copy_texture) && defined(GL_EXT_subtexture) -#define glBindTexture(A,B) glBindTextureEXT(A,B) -#define glGenTextures(A,B) glGenTexturesEXT(A,B) -#define glDeleteTextures(A,B) glDeleteTexturesEXT(A,B) -#else -#define glBindTexture(A,B) -#define glGenTextures(A,B) -#define glDeleteTextures(A,B) -#endif - -#include "image.h" - -static int WIDTH=640; -static int HEIGHT=480; - -#define FRAME 50 - -#define NUMBLOC 5 - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -extern int striplength_skin_13[]; -extern float stripdata_skin_13[]; - -extern int striplength_skin_12[]; -extern float stripdata_skin_12[]; - -extern int striplength_skin_11[]; -extern float stripdata_skin_11[]; - -extern int striplength_skin_9[]; -extern float stripdata_skin_9[]; - -static float obs[3]={1000.0,0.0,2.0}; -static float dir[3]; -static float v=0.0; -static float alpha=90.0; -static float beta=90.0; - -static int fog=1; -static int bfcull=1; -static int usetex=1; -static int cstrip=0; -static int help=1; -static int joyavailable=0; -static int joyactive=0; - -static GLuint t1id,t2id; - -static void inittextures(void) -{ - IMAGE *img; - GLenum gluerr; - - glGenTextures(1,&t1id); - glBindTexture(GL_TEXTURE_2D,t1id); - - if(!(img=ImageLoad("tile.rgb"))) { - fprintf(stderr,"Error reading a texture.\n"); - exit(-1); - } - - glPixelStorei(GL_UNPACK_ALIGNMENT,4); - if((gluerr=gluBuild2DMipmaps(GL_TEXTURE_2D, 3, img->sizeX, img->sizeY, GL_RGB, - GL_UNSIGNED_BYTE, (GLvoid *)(img->data)))) { - fprintf(stderr,"GLULib%s\n",gluErrorString(gluerr)); - exit(-1); - } - - glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); - glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT); - - glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST_MIPMAP_LINEAR); - glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); - - glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE); - - glGenTextures(1,&t2id); - glBindTexture(GL_TEXTURE_2D,t2id); - - if(!(img=ImageLoad("bw.rgb"))) { - fprintf(stderr,"Error reading a texture.\n"); - exit(-1); - } - - glPixelStorei(GL_UNPACK_ALIGNMENT,4); - if((gluerr=gluBuild2DMipmaps(GL_TEXTURE_2D, 3, img->sizeX, img->sizeY, GL_RGB, - GL_UNSIGNED_BYTE, (GLvoid *)(img->data)))) { - fprintf(stderr,"GLULib%s\n",gluErrorString(gluerr)); - exit(-1); - } - - glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); - glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT); - - glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST_MIPMAP_LINEAR); - glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); - - glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE); -} - -static void drawobjs(int *l, float *f) -{ - int mend,j; - - if(cstrip) { - float r=0.33,g=0.33,b=0.33; - - for(;(*l)!=0;) { - mend=*l++; - - r+=0.33; - if(r>1.0) { - r=0.33; - g+=0.33; - if(g>1.0) { - g=0.33; - b+=0.33; - if(b>1.0) - b=0.33; - } - } - - glColor3f(r,g,b); - glBegin(GL_TRIANGLE_STRIP); - for(j=0;jjoy.wXpos) - min[0]=joy.wXpos; - center[0]=(max[0]+min[0])/2; - - if(max[1]joy.wYpos) - min[1]=joy.wYpos; - center[1]=(max[1]+min[1])/2; - - if(joyactive) { - if(fabs(center[0]-(float)joy.wXpos)>0.1*(max[0]-min[0])) - alpha-=2.0*(center[0]-(float)joy.wXpos)/(max[0]-min[0]); - if(fabs(center[1]-(float)joy.wYpos)>0.1*(max[1]-min[1])) - beta+=2.0*(center[1]-(float)joy.wYpos)/(max[1]-min[1]); - - if(joy.wButtons & JOY_BUTTON1) - v+=0.01; - if(joy.wButtons & JOY_BUTTON2) - v-=0.01; - } - } else - joyavailable=0; -#endif -} - -static void draw(void) -{ - static int count=0; - static char frbuf[80]; - int i; - float fr,base,offset; - - dojoy(); - - glEnable(GL_DEPTH_TEST); - - /* - if(count & 1) { - glDepthRange(1.0,0.5); - glDepthFunc(GL_GREATER); - } else { - glDepthRange(0.0,0.5); - glDepthFunc(GL_LESS); - } - */ - - /*glClear(GL_COLOR_BUFFER_BIT);*/ - - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - - if(usetex) - glEnable(GL_TEXTURE_2D); - else - glDisable(GL_TEXTURE_2D); - - if(fog) - glEnable(GL_FOG); - else - glDisable(GL_FOG); - - glShadeModel(GL_SMOOTH); - - glPushMatrix(); - calcposobs(); - gluLookAt(obs[0],obs[1],obs[2], - obs[0]+dir[0],obs[1]+dir[1],obs[2]+dir[2], - 0.0,0.0,1.0); - - if(dir[0]>0) { - offset=8.0; - base=obs[0]-fmod(obs[0],8.0); - } else { - offset=-8.0; - base=obs[0]+(8.0-fmod(obs[0],8.0)); - } - - glPushMatrix(); - glTranslatef(base-offset/2.0,0.0,0.0); - for(i=0;i -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=tunnel - 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 "tunnel.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 "tunnel.mak" CFG="tunnel - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "tunnel - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "tunnel - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "tunnel - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "tunnel - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "tunnel - Win32 Release" -# Name "tunnel - Win32 Debug" -# Begin Source File - -SOURCE=.\image.c -# End Source File -# Begin Source File - -SOURCE=.\image.h -# End Source File -# Begin Source File - -SOURCE=.\sources.c -# End Source File -# Begin Source File - -SOURCE=.\tunnel.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/contrib.dsw b/lib/glut-3.7.6/progs/contrib.dsw deleted file mode 100644 index 84397c3b7..000000000 --- a/lib/glut-3.7.6/progs/contrib.dsw +++ /dev/null @@ -1,209 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "_all"=".\contrib\_all.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name agv_viewer - End Project Dependency - Begin Project Dependency - Project_Dep_Name fractals - End Project Dependency - Begin Project Dependency - Project_Dep_Name gears - End Project Dependency - Begin Project Dependency - Project_Dep_Name hanoi - End Project Dependency - Begin Project Dependency - Project_Dep_Name hanoi2 - End Project Dependency - Begin Project Dependency - Project_Dep_Name lineblend - End Project Dependency - Begin Project Dependency - Project_Dep_Name moth - End Project Dependency - Begin Project Dependency - Project_Dep_Name noof - End Project Dependency - Begin Project Dependency - Project_Dep_Name rings - End Project Dependency - Begin Project Dependency - Project_Dep_Name steam - End Project Dependency - Begin Project Dependency - Project_Dep_Name text3d - End Project Dependency - Begin Project Dependency - Project_Dep_Name worms - End Project Dependency -}}} - -############################################################################### - -Project: "agv_viewer"=".\contrib\agv_viewer.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "fractals"=".\contrib\fractals.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "gears"=".\contrib\gears.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "hanoi"=".\contrib\hanoi.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "hanoi2"=".\contrib\hanoi2.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "lineblend"=".\contrib\lineblend.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "moth"=".\contrib\moth.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "noof"=".\contrib\noof.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "rings"=".\contrib\rings.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "steam"=".\contrib\steam.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "text3d"=".\contrib\text3d.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "worms"=".\contrib\worms.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/lib/glut-3.7.6/progs/contrib/Imakefile b/lib/glut-3.7.6/progs/contrib/Imakefile deleted file mode 100644 index ae7641c2c..000000000 --- a/lib/glut-3.7.6/progs/contrib/Imakefile +++ /dev/null @@ -1,26 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1994. */ - -#include "../../Glut.cf" - -TARGETS = lineblend worms rings agv_example fractals moth text3d \ - noof gears hanoi steam - -SRCS = lineblend.c rings.c worms.c agv_example.c agviewer.c fractals.c \ - fracviewer.c hanoi.c moth.c gears.c noof.c text3d.c hanoi.c steam.c - -AllTarget($(TARGETS)) - -SimpleGlutProgramTarget(gears) -SimpleGlutProgramTarget(hanoi) -SimpleGlutProgramTarget(lineblend) -SimpleGlutProgramTarget(moth) -SimpleGlutProgramTarget(noof) -SimpleGlutProgramTarget(rings) -SimpleGlutProgramTarget(steam) -SimpleGlutProgramTarget(text3d) -SimpleGlutProgramTarget(worms) -NormalGlutProgramTarget(agv_example,agv_example.o agviewer.o) -NormalGlutProgramTarget(fractals,fractals.o fracviewer.o) - -DependTarget() diff --git a/lib/glut-3.7.6/progs/contrib/_all.dsp b/lib/glut-3.7.6/progs/contrib/_all.dsp deleted file mode 100644 index 6a4421548..000000000 --- a/lib/glut-3.7.6/progs/contrib/_all.dsp +++ /dev/null @@ -1,63 +0,0 @@ -# Microsoft Developer Studio Project File - Name="_all" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Generic Project" 0x010a - -CFG=_all - 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 "_all.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 "_all.mak" CFG="_all - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "_all - Win32 Release" (based on "Win32 (x86) Generic Project") -!MESSAGE "_all - Win32 Debug" (based on "Win32 (x86) Generic Project") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -MTL=midl.exe - -!IF "$(CFG)" == "_all - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" - -!ELSEIF "$(CFG)" == "_all - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "_all___Win32_Debug" -# PROP BASE Intermediate_Dir "_all___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" - -!ENDIF - -# Begin Target - -# Name "_all - Win32 Release" -# Name "_all - Win32 Debug" -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/contrib/agv_example.c b/lib/glut-3.7.6/progs/contrib/agv_example.c deleted file mode 100644 index 9826ccc49..000000000 --- a/lib/glut-3.7.6/progs/contrib/agv_example.c +++ /dev/null @@ -1,215 +0,0 @@ -/* - * agv_example.c (version 1.0) - * - * Example program to show how to use AGV - * - * See agviewer.h, agviewer.c and comments within for more info - * - * Philip Winston - 4/11/95 - * pwinston@hmc.edu - * http://www.cs.hmc.edu/people/pwinston - */ - -#include - -#include -#include -#include - -#include "agviewer.h" - -typedef enum {NOTALLOWED, AXES, STUFF, RING } DisplayLists; - -int DrawAxes = 0; - -#define ROTATEINC 2; - -GLfloat Rotation = 0; /* start ring flat and not spinning */ -int Rotating = 0; - - -void myGLInit(void) -{ - GLfloat mat_ambuse[] = { 0.6, 0.0, 0.0, 1.0 }; - GLfloat mat_specular[] = { 0.4, 0.4, 0.4, 1.0 }; - - GLfloat light0_position[] = { 0.6, 0.4, 0.3, 0.0 }; - - glLightfv(GL_LIGHT0, GL_POSITION, light0_position); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, mat_ambuse); - glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); - glMaterialf(GL_FRONT, GL_SHININESS, 25.0); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - glEnable(GL_NORMALIZE); - - glDepthFunc(GL_LESS); - glEnable(GL_DEPTH_TEST); - - glShadeModel(GL_SMOOTH); - - glFlush(); -} - - -void MakeDisplayLists(void) -{ - glNewList(STUFF, GL_COMPILE); - glPushMatrix(); - glutSolidCube(1.0); - glTranslatef(2, 0, 0); - glutSolidSphere(0.5, 10, 10); - glTranslatef(-2, 0, 3); - glRotatef(-90, 1, 0, 0); - glutSolidCone(0.5, 1.0, 8, 8); - glPopMatrix(); - glEndList(); - - glNewList(RING, GL_COMPILE); - glutSolidTorus(0.1, 0.5, 8, 15); - glEndList(); -} - - -void display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - - gluPerspective(60, 1, 0.01, 100); - - /* so this replaces gluLookAt or equiv */ - agvViewTransform(); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - /* we call agvMakeAxesList() to make this display list */ - if (DrawAxes) - glCallList(AXES); - - glCallList(STUFF); - - glTranslatef(-2, 1, -2); - glRotatef(Rotation, 1, 0, 0); - glCallList(RING); - - glutSwapBuffers(); - glFlush(); -} - - - /* rotate the axis and adjust position if nec. */ -void rotatethering(void) -{ - Rotation += ROTATEINC; - - if (agvMoving) /* we since we are the only idle function, we must */ - agvMove(); /* give AGV the chance to update the eye position */ - - glutPostRedisplay(); -} - -typedef enum { MENU_AXES, MENU_QUIT, MENU_RING } MenuChoices; - -void handlemenu(int value) -{ - switch (value) { - case MENU_AXES: - DrawAxes = !DrawAxes; - break; - case MENU_QUIT: - exit(0); - break; - case MENU_RING: - Rotating = !Rotating; - if (Rotating) { - glutIdleFunc(rotatethering); /* install our idle function */ - agvSetAllowIdle(0); /* and tell AGV to not */ - } else { - glutIdleFunc(NULL); /* uninstall our idle function */ - agvSetAllowIdle(1); /* and tell AGV it can mess with it */ - } - break; - } - glutPostRedisplay(); -} - -void visible(int v) -{ - if (v == GLUT_VISIBLE) { - if (Rotating) { - glutIdleFunc(rotatethering); - agvSetAllowIdle(0); - } else { - glutIdleFunc(NULL); - agvSetAllowIdle(1); - } - } else { - glutIdleFunc(NULL); - agvSetAllowIdle(0); - } -} - - -void MenuInit(void) -{ - int sub2 = glutCreateMenu(agvSwitchMoveMode); /* pass these right to */ - glutAddMenuEntry("Flying move", FLYING); /* agvSwitchMoveMode() */ - glutAddMenuEntry("Polar move", POLAR); - - glutCreateMenu(handlemenu); - glutAddSubMenu("Movement", sub2); - glutAddMenuEntry("Toggle Axes", MENU_AXES); - glutAddMenuEntry("Toggle ring rotation", MENU_RING); - glutAddMenuEntry("Quit", MENU_QUIT); - glutAttachMenu(GLUT_RIGHT_BUTTON); -} - - -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitWindowSize(512, 512); - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); - glutCreateWindow("AGV example"); - - glutVisibilityFunc(visible); - - if (Rotating) - glutIdleFunc(rotatethering); - - /* - * let AGV know if it can mess with the idle function (if we've - * just installed an idle function, we tell AGV it can't touch it) - */ - - agvInit(!Rotating); - - /* - * agvInit() installs mouse, motion, and keyboard handles, but - * we don't care for this example cause we only use right button menu - */ - - agvMakeAxesList(AXES); /* create AGV axes */ - - myGLInit(); - MakeDisplayLists(); - MenuInit(); - - glutDisplayFunc(display); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} - - diff --git a/lib/glut-3.7.6/progs/contrib/agv_viewer.dsp b/lib/glut-3.7.6/progs/contrib/agv_viewer.dsp deleted file mode 100644 index 49913b114..000000000 --- a/lib/glut-3.7.6/progs/contrib/agv_viewer.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="agv_viewer" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=agv_viewer - 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 "agv_viewer.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 "agv_viewer.mak" CFG="agv_viewer - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "agv_viewer - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "agv_viewer - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "agv_viewer - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "agv_viewer - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "agv_viewer___Win32_Debug" -# PROP BASE Intermediate_Dir "agv_viewer___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "agv_viewer - Win32 Release" -# Name "agv_viewer - Win32 Debug" -# Begin Source File - -SOURCE=.\agv_example.c -# End Source File -# Begin Source File - -SOURCE=.\agviewer.c -# End Source File -# Begin Source File - -SOURCE=.\agviewer.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/contrib/agviewer.c b/lib/glut-3.7.6/progs/contrib/agviewer.c deleted file mode 100644 index addba578a..000000000 --- a/lib/glut-3.7.6/progs/contrib/agviewer.c +++ /dev/null @@ -1,497 +0,0 @@ -/* - * agviewer.c (version 1.0) - * - * AGV: a glut viewer. Routines for viewing a 3d scene w/ glut - * - * See agv_example.c and agviewer.h comments within for more info. - * - * I welcome any feedback or improved versions! - * - * Philip Winston - 4/11/95 - * pwinston@hmc.edu - * http://www.cs.hmc.edu/people/pwinston - */ - -#include -#include -#include -#include - -#include "agviewer.h" - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -/***************************************************************/ -/************************** SETTINGS ***************************/ -/***************************************************************/ - - /* Initial polar movement settings */ -#define INIT_POLAR_AZ 0.0 -#define INIT_POLAR_EL 30.0 -#define INIT_DIST 8.0 -#define INIT_AZ_SPIN 0.5 -#define INIT_EL_SPIN 0.0 - - /* Initial flying movement settings */ -#define INIT_EX 0.0 -#define INIT_EY -2.0 -#define INIT_EZ -2.0 -#define INIT_MOVE 0.01 -#define MINMOVE 0.001 - - /* Start in this mode */ -#define INIT_MODE POLAR - - /* Controls: */ - - /* map 0-9 to an EyeMove value when number key is hit in FLYING mode */ -#define SPEEDFUNCTION(x) ((x)*(x)*0.001) - - /* Multiply EyeMove by (1+-MOVEFRACTION) when +/- hit in FLYING mode */ -#define MOVEFRACTION 0.25 - - /* What to multiply number of pixels mouse moved by to get rotation amount */ -#define EL_SENS 0.5 -#define AZ_SENS 0.5 - - /* What to multiply number of pixels mouse moved by for movement amounts */ -#define DIST_SENS 0.01 -#define E_SENS 0.01 - - /* Minimum spin to allow in polar (lower forced to zero) */ -#define MIN_AZSPIN 0.1 -#define MIN_ELSPIN 0.1 - - /* Factors used in computing dAz and dEl (which determine AzSpin, ElSpin) */ -#define SLOW_DAZ 0.90 -#define SLOW_DEL 0.90 -#define PREV_DAZ 0.80 -#define PREV_DEL 0.80 -#define CUR_DAZ 0.20 -#define CUR_DEL 0.20 - -/***************************************************************/ -/************************** GLOBALS ****************************/ -/***************************************************************/ - -int MoveMode = INIT_MODE; /* FLYING or POLAR mode? */ - -GLfloat Ex = INIT_EX, /* flying parameters */ - Ey = INIT_EY, - Ez = INIT_EZ, - EyeMove = INIT_MOVE, - - EyeDist = INIT_DIST, /* polar params */ - AzSpin = INIT_AZ_SPIN, - ElSpin = INIT_EL_SPIN, - - EyeAz = INIT_POLAR_AZ, /* used by both */ - EyeEl = INIT_POLAR_EL; - -int agvMoving; /* Currently moving? */ - -int downx, downy, /* for tracking mouse position */ - lastx, lasty, - downb = -1; /* and button status */ - -GLfloat downDist, downEl, downAz, /* for saving state of things */ - downEx, downEy, downEz, /* when button is pressed */ - downEyeMove; - -GLfloat dAz, dEl, lastAz, lastEl; /* to calculate spinning w/ polar motion */ -int AdjustingAzEl = 0; - -int AllowIdle, RedisplayWindow; - /* If AllowIdle is 1 it means AGV will install its own idle which - * will update the viewpoint as needed and send glutPostRedisplay() to the - * window RedisplayWindow which was set in agvInit(). AllowIdle of 0 - * means AGV won't install an idle funciton, and something like - * "if (agvMoving) agvMove()" should exist at the end of the running - * idle function. - */ - -#define MAX(x,y) (((x) > (y)) ? (x) : (y)) -#define TORAD(x) ((M_PI/180.0)*(x)) -#define TODEG(x) ((180.0/M_PI)*(x)) - -/***************************************************************/ -/************************ PROTOTYPES ***************************/ -/***************************************************************/ - - /* - * these are functions meant for internal use only - * the other prototypes are in agviewer.h - */ - -void PolarLookFrom(GLfloat dist, GLfloat elevation, GLfloat azimuth); -void FlyLookFrom(GLfloat x, GLfloat y, GLfloat z, GLfloat az, GLfloat el); -int ConstrainEl(void); -void MoveOn(int v); -void SetMove(float newmove); -static void normalize(GLfloat v[3]); -static void ncrossprod(float v1[3], float v2[3], float cp[3]); - - -/***************************************************************/ -/************************ agvInit ******************************/ -/***************************************************************/ - -void agvInit(int window) -{ - glutMouseFunc(agvHandleButton); - glutMotionFunc(agvHandleMotion); - glutKeyboardFunc(agvHandleKeys); - RedisplayWindow = glutGetWindow(); - agvSetAllowIdle(window); -} - -/***************************************************************/ -/************************ VIEWPOINT STUFF **********************/ -/***************************************************************/ - - /* - * viewing transformation modified from page 90 of red book - */ -void PolarLookFrom(GLfloat dist, GLfloat elevation, GLfloat azimuth) -{ - glTranslatef(0, 0, -dist); - glRotatef(elevation, 1, 0, 0); - glRotatef(azimuth, 0, 1, 0); - -} - - /* - * I took the idea of tracking eye position in absolute - * coords and direction looking in Polar form from denis - */ -void FlyLookFrom(GLfloat x, GLfloat y, GLfloat z, GLfloat az, GLfloat el) -{ - float lookat[3], perp[3], up[3]; - - lookat[0] = sin(TORAD(az))*cos(TORAD(el)); - lookat[1] = sin(TORAD(el)); - lookat[2] = -cos(TORAD(az))*cos(TORAD(el)); - normalize(lookat); - perp[0] = lookat[2]; - perp[1] = 0; - perp[2] = -lookat[0]; - normalize(perp); - ncrossprod(lookat, perp, up); - gluLookAt(x, y, z, - x+lookat[0], y+lookat[1], z+lookat[2], - up[0], up[1], up[2]); -} - - /* - * Call viewing transformation based on movement mode - */ -void agvViewTransform(void) -{ - switch (MoveMode) { - case FLYING: - FlyLookFrom(Ex, Ey, Ez, EyeAz, EyeEl); - break; - case POLAR: - PolarLookFrom(EyeDist, EyeEl, EyeAz); - break; - } -} - - /* - * keep them vertical; I think this makes a lot of things easier, - * but maybe it wouldn't be too hard to adapt things to let you go - * upside down - */ -int ConstrainEl(void) -{ - if (EyeEl <= -90) { - EyeEl = -89.99; - return 1; - } else if (EyeEl >= 90) { - EyeEl = 89.99; - return 1; - } - return 0; -} - - /* - * Idle Function - moves eyeposition - */ -void agvMove(void) -{ - - switch (MoveMode) { - case FLYING: - Ex += EyeMove*sin(TORAD(EyeAz))*cos(TORAD(EyeEl)); - Ey += EyeMove*sin(TORAD(EyeEl)); - Ez -= EyeMove*cos(TORAD(EyeAz))*cos(TORAD(EyeEl)); - break; - - case POLAR: - EyeEl += ElSpin; - EyeAz += AzSpin; - if (ConstrainEl()) { /* weird spin thing to make things look */ - ElSpin = -ElSpin; /* look better when you are kept from going */ - /* upside down while spinning - Isn't great */ - if (fabs(ElSpin) > fabs(AzSpin)) - AzSpin = fabs(ElSpin) * ((AzSpin > 0) ? 1 : -1); - } - break; - } - - if (AdjustingAzEl) { - dAz *= SLOW_DAZ; - dEl *= SLOW_DEL; - } - - if (AllowIdle) { - glutSetWindow(RedisplayWindow); - glutPostRedisplay(); - } -} - - - /* - * Don't install agvMove as idle unless we will be updating the view - * and we've been given a RedisplayWindow - */ -void MoveOn(int v) -{ - if (v && ((MoveMode == FLYING && EyeMove != 0) || - (MoveMode == POLAR && - (AzSpin != 0 || ElSpin != 0 || AdjustingAzEl)))) { - agvMoving = 1; - if (AllowIdle) - glutIdleFunc(agvMove); - } else { - agvMoving = 0; - if (AllowIdle) - glutIdleFunc(NULL); - } -} - - /* - * set new redisplay window. If <= 0 it means we are not to install - * an idle function and will rely on whoever does install one to - * put statement like "if (agvMoving) agvMove();" at end of it - */ -void agvSetAllowIdle(int allowidle) -{ - if ((AllowIdle = allowidle)) - MoveOn(1); -} - - - /* - * when moving to flying we stay in the same spot, moving to polar we - * reset since we have to be looking at the origin (though a pivot from - * current position to look at origin might be cooler) - */ -void agvSwitchMoveMode(int move) -{ - switch (move) { - case FLYING: - if (MoveMode == FLYING) return; - Ex = -EyeDist*sin(TORAD(EyeAz))*cos(TORAD(EyeEl)); - Ey = EyeDist*sin(TORAD(EyeEl)); - Ez = EyeDist*(cos(TORAD(EyeAz))*cos(TORAD(EyeEl))); - EyeAz = EyeAz; - EyeEl = -EyeEl; - EyeMove = INIT_MOVE; - break; - case POLAR: - EyeDist = INIT_DIST; - EyeAz = INIT_POLAR_AZ; - EyeEl = INIT_POLAR_EL; - AzSpin = INIT_AZ_SPIN; - ElSpin = INIT_EL_SPIN; - break; - } - MoveMode = move; - MoveOn(1); - glutPostRedisplay(); -} - -/***************************************************************/ -/******************* MOUSE HANDLING ***********************/ -/***************************************************************/ - -void agvHandleButton(int button, int state, int x, int y) -{ - if (state == GLUT_DOWN && downb == -1) { - lastx = downx = x; - lasty = downy = y; - downb = button; - - switch (button) { - case GLUT_LEFT_BUTTON: - lastEl = downEl = EyeEl; - lastAz = downAz = EyeAz; - AzSpin = ElSpin = dAz = dEl = 0; - AdjustingAzEl = 1; - MoveOn(1); - break; - - case GLUT_MIDDLE_BUTTON: - downDist = EyeDist; - downEx = Ex; - downEy = Ey; - downEz = Ez; - downEyeMove = EyeMove; - EyeMove = 0; - } - - } else if (state == GLUT_UP && button == downb) { - - downb = -1; - - switch (button) { - case GLUT_LEFT_BUTTON: - if (MoveMode != FLYING) { - AzSpin = -dAz; - if (AzSpin < MIN_AZSPIN && AzSpin > -MIN_AZSPIN) - AzSpin = 0; - ElSpin = -dEl; - if (ElSpin < MIN_ELSPIN && ElSpin > -MIN_ELSPIN) - ElSpin = 0; - } - AdjustingAzEl = 0; - MoveOn(1); - break; - - case GLUT_MIDDLE_BUTTON: - EyeMove = downEyeMove; - } - } -} - - /* - * change EyeEl and EyeAz and position when mouse is moved w/ button down - */ -void agvHandleMotion(int x, int y) -{ - int deltax = x - downx, deltay = y - downy; - - switch (downb) { - case GLUT_LEFT_BUTTON: - EyeEl = downEl + EL_SENS * ((MoveMode == FLYING) ? -deltay : deltay); - ConstrainEl(); - EyeAz = downAz + AZ_SENS * deltax; - dAz = PREV_DAZ*dAz + CUR_DAZ*(lastAz - EyeAz); - dEl = PREV_DEL*dEl + CUR_DEL*(lastEl - EyeEl); - lastAz = EyeAz; - lastEl = EyeEl; - break; - case GLUT_MIDDLE_BUTTON: - EyeDist = downDist + DIST_SENS*deltay; - Ex = downEx - E_SENS*deltay*sin(TORAD(EyeAz))*cos(TORAD(EyeEl)); - Ey = downEy - E_SENS*deltay*sin(TORAD(EyeEl)); - Ez = downEz + E_SENS*deltay*cos(TORAD(EyeAz))*cos(TORAD(EyeEl)); - break; - } - glutPostRedisplay(); -} - -/***************************************************************/ -/********************* KEYBOARD HANDLING ***********************/ -/***************************************************************/ - - /* - * set EyeMove (current speed) for FLYING mode - */ -void SetMove(float newmove) -{ - if (newmove > MINMOVE) { - EyeMove = newmove; - MoveOn(1); - } else { - EyeMove = 0; - MoveOn(0); - } -} - - /* - * 0->9 set speed, +/- adjust current speed -- in FLYING mode - */ -/* ARGSUSED1 */ -void agvHandleKeys(unsigned char key, int x, int y) -{ - if (MoveMode != FLYING) - return; - - if (key >= '0' && key <= '9') - SetMove(SPEEDFUNCTION((key-'0'))); - else - switch(key) { - case '+': - if (EyeMove == 0) - SetMove(MINMOVE); - else - SetMove(EyeMove *= (1 + MOVEFRACTION)); - break; - case '-': - SetMove(EyeMove *= (1 - MOVEFRACTION)); - break; - } -} - -/***************************************************************/ -/*********************** VECTOR STUFF **************************/ -/***************************************************************/ - - /* normalizes v */ -static void normalize(GLfloat v[3]) -{ - GLfloat d = sqrt(v[0]*v[0] + v[1]*v[1] + v[2]*v[2]); - - if (d == 0) - fprintf(stderr, "Zero length vector in normalize\n"); - else - v[0] /= d; v[1] /= d; v[2] /= d; -} - - /* calculates a normalized crossproduct to v1, v2 */ -static void ncrossprod(float v1[3], float v2[3], float cp[3]) -{ - cp[0] = v1[1]*v2[2] - v1[2]*v2[1]; - cp[1] = v1[2]*v2[0] - v1[0]*v2[2]; - cp[2] = v1[0]*v2[1] - v1[1]*v2[0]; - normalize(cp); -} - -/***************************************************************/ -/**************************** AXES *****************************/ -/***************************************************************/ - - - /* draw axes -- was helpful to debug/design things */ -void agvMakeAxesList(int displaylistnum) -{ - int i,j; - GLfloat axes_ambuse[] = { 0.5, 0.0, 0.0, 1.0 }; - glNewList(displaylistnum, GL_COMPILE); - glPushAttrib(GL_LIGHTING_BIT); - glMatrixMode(GL_MODELVIEW); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, axes_ambuse); - glBegin(GL_LINES); - glVertex3f(15, 0, 0); glVertex3f(-15, 0, 0); - glVertex3f(0, 15, 0); glVertex3f(0, -15, 0); - glVertex3f(0, 0, 15); glVertex3f(0, 0, -15); - glEnd(); - for (i = 0; i < 3; i++) { - glPushMatrix(); - glTranslatef(-10*(i==0), -10*(i==1), -10*(i==2)); - for (j = 0; j < 21; j++) { - glutSolidCube(0.1); - glTranslatef(i==0, i==1, i==2); - } - glPopMatrix(); - } - glPopAttrib(); - glEndList(); -} - - diff --git a/lib/glut-3.7.6/progs/contrib/agviewer.h b/lib/glut-3.7.6/progs/contrib/agviewer.h deleted file mode 100644 index a404bfb1b..000000000 --- a/lib/glut-3.7.6/progs/contrib/agviewer.h +++ /dev/null @@ -1,104 +0,0 @@ -/* - * agviewer.h (version 1.0) - * - * AGV: a glut viewer. Routines for viewing a 3d scene w/ glut - * - * The two view movement modes are POLAR and FLYING. Both move the eye, NOT - * THE OBJECT. You can never be upside down or twisted (roll) in either mode. - * - * A nice addition would be an examiner type trackball mode where you are - * moving the object and so could see it from any angle. Also less restricted - * flying and polar modes (fly upside down, do rolls, etc.). - * - * Controls for Polar are just left and middle buttons -- for flying it's - * those plus 0-9 number keys and +/- for speed adjustment. - * - * See agv_example.c and agviewer.c for more info. Probably want to make - * a copy of these and then edit for each program. This isn't meant to be - * a library, just something to graft onto your own programs. - * - * I welcome any feedback or improved versions. - * - * Philip Winston - 4/11/95 - * pwinston@hmc.edu - * http://www.cs.hmc.edu/people/pwinston - */ - - - /* - * Call agvInit() with glut's current window set to the window in - * which you want to run the viewer. Right after creating it is fine. It - * will remember that window for possible later use (see below) and - * registers mouse, motion, and keyboard handlers for that window (see below). - * - * allowidle is 1 or 0 depnding on whether you will let AGV install - * and uninstall an idle function. 0 means you will not let it (because - * you will be having your own idle function). In this case it is your - * responsibility to put a statement like: - * - * if (agvMoving) - * agvMove(); - * - * at the end of your idle function, to let AGV update the viewpoint if it - * is moving. - * - * If allowidle is 1 it means AGV will install its own idle which - * will update the viewpoint as needed and send glutPostRedisplay() to the - * window which was current when agvInit() was called. - * - * agvSetIdleAllow changes this value so you can let AGV install its idle - * when your idle isn't installed. - * - */ -void agvInit(int allowidle); -void agvSetAllowIdle(int allowidle); - - - /* - * Set which movement mode you are in. - */ -typedef enum { FLYING, POLAR } MovementType; -void agvSwitchMoveMode(int move); - - /* - * agvViewTransform basically does the appropriate gluLookAt() for the - * current position. So call it in your display on the projection matrix - */ -void agvViewTransform(void); - - /* - * agvMoving will be set by AGV according to whether it needs you to call - * agvMove() at the end of your idle function. You only need these if - * you aren't allowing AGV to do its own idle. - * (Don't change the value of agvMoving) - */ -extern int agvMoving; -void agvMove(void); - - /* - * These are the routines AGV registers to deal with mouse and keyboard input. - * Keyboard input only matters in flying mode, and then only to set speed. - * Mouse input only uses left two buttons in both modes. - * These are all registered with agvInit(), but you could register - * something else which called these, or reregister these as needed - */ -void agvHandleButton(int button, int state, int x, int y); -void agvHandleMotion(int x, int y); -void agvHandleKeys(unsigned char key, int x, int y); - - /* - * Just an extra routine which makes an x-y-z axes (about 10x10x10) - * which is nice for aligning things and debugging. Pass it an available - * displaylist number. - */ -void agvMakeAxesList(int displaylist); - - - - - - - - - - diff --git a/lib/glut-3.7.6/progs/contrib/engine.c b/lib/glut-3.7.6/progs/contrib/engine.c deleted file mode 100644 index 999bf135c..000000000 --- a/lib/glut-3.7.6/progs/contrib/engine.c +++ /dev/null @@ -1,75 +0,0 @@ - -/* hanoi solver for hanoi2 */ - -#include -#include -#include -#include - -static int num_disks[3] = -{0, 0, 0}; - -static void -move_disk(int from, int to, int fd) -{ - char buf[3]; - - assert(from != to); - num_disks[from]--; - num_disks[to]++; -#ifdef TEST_ENGINE - printf("%d --> %d\n", from, to); -#else - buf[0] = 'M'; - buf[1] = (char) from; - buf[2] = (char) to; - if (3 != write(fd, buf, 3)) { - perror("can't write"); - exit(1); - } -#endif -} - -static void -move_disks(int from, int to, int n, int fd) -{ - static int other_table[9] = - {-1, 2, 1, 2, -1, 0, 1, 0, -1}; - int other; - - assert(from != to); - other = other_table[from * 3 + to]; - assert(other != -1); - if (n == 1) { - move_disk(from, to, fd); - } else { - move_disks(from, other, n - 1, fd); - move_disk(from, to, fd); - move_disks(other, to, n - 1, fd); - } -} - -void -engine(int *args) -{ - num_disks[0] = args[0]; - for (;;) { - move_disks(0, 2, args[0], args[1]); - move_disks(2, 0, args[0], args[1]); - } -} - -#ifdef TEST_ENGINE -int -main(int argc, char *argv[]) -{ - int engine_args[2]; - - if (argc > 1) { - engine_args[0] = atoi(argv[1]); - } - engine_args[1] = 1; - engine(n, engine_args); - return 0; /* ANSI C requires main to return int. */ -} -#endif diff --git a/lib/glut-3.7.6/progs/contrib/fractals.c b/lib/glut-3.7.6/progs/contrib/fractals.c deleted file mode 100644 index 542b753b7..000000000 --- a/lib/glut-3.7.6/progs/contrib/fractals.c +++ /dev/null @@ -1,713 +0,0 @@ -/* - * To compile: cc -o fractals fractals.c -lGL -lGLU -lX11 -lglut -lXmu -lm - * - * Usage: fractals - * - * Homework 6, Part 2: fractal mountains and fractal trees - * (Pretty Late) - * - * Draws fractal mountains and trees -- and an island of mountains in water - * (I tried having trees on the island but it didn't work too well.) - * - * Two viewer modes: polar and flying (both restrained to y>0 for up vector). - * Keyboard 0->9 and +/- control speed when flying. - * - * Only keyboard commands are 0-9 and +/- for speed in flying mode. - * - * Fog would make the island look much better, but I couldn't get it to work - * correctly. Would line up on -z axis not from eye. - * - * Philip Winston - 3/4/95 - * pwinston@hmc.edu - * http://www.cs.hmc.edu/people/pwinston - * - */ - -#include - -#include -#include -#include -#include /* ULONG_MAX is defined here */ -#include /* FLT_MAX is atleast defined here */ - -#include /* for random seed */ - -#include "fracviewer.h" - -#ifdef _WIN32 -#define drand48() (((float) rand())/((float) RAND_MAX)) -#define srand48(x) (srand((x))) -#endif - -typedef enum { NOTALLOWED, MOUNTAIN, TREE, ISLAND, BIGMTN, STEM, LEAF, - MOUNTAIN_MAT, WATER_MAT, LEAF_MAT, TREE_MAT, STEMANDLEAVES, - AXES } DisplayLists; - -#define MAXLEVEL 8 - -int Rebuild = 1, /* Rebuild display list in next display? */ - Fract = TREE, /* What fractal are we building */ - Level = 4; /* levels of recursion for fractals */ - -int DrawAxes = 0; - -/***************************************************************/ -/************************* VECTOR JUNK *************************/ -/***************************************************************/ - - /* print vertex to stderr */ -void printvert(float v[3]) -{ - fprintf(stderr, "(%f, %f, %f)\n", v[0], v[1], v[2]); -} - - /* normalizes v */ -void normalize(GLfloat v[3]) -{ - GLfloat d = sqrt(v[0]*v[0] + v[1]*v[1] + v[2]*v[2]); - - if (d == 0) - fprintf(stderr, "Zero length vector in normalize\n"); - else - v[0] /= d; v[1] /= d; v[2] /= d; -} - - /* calculates a normalized crossproduct to v1, v2 */ -void ncrossprod(float v1[3], float v2[3], float cp[3]) -{ - cp[0] = v1[1]*v2[2] - v1[2]*v2[1]; - cp[1] = v1[2]*v2[0] - v1[0]*v2[2]; - cp[2] = v1[0]*v2[1] - v1[1]*v2[0]; - normalize(cp); -} - - /* calculates normal to the triangle designated by v1, v2, v3 */ -void triagnormal(float v1[3], float v2[3], float v3[3], float norm[3]) -{ - float vec1[3], vec2[3]; - - vec1[0] = v3[0] - v1[0]; vec2[0] = v2[0] - v1[0]; - vec1[1] = v3[1] - v1[1]; vec2[1] = v2[1] - v1[1]; - vec1[2] = v3[2] - v1[2]; vec2[2] = v2[2] - v1[2]; - - ncrossprod(vec2, vec1, norm); -} - -float xzlength(float v1[3], float v2[3]) -{ - return sqrt((v1[0] - v2[0])*(v1[0] - v2[0]) + - (v1[2] - v2[2])*(v1[2] - v2[2])); -} - -float xzslope(float v1[3], float v2[3]) -{ - return ((v1[0] != v2[0]) ? ((v1[2] - v2[2]) / (v1[0] - v2[0])) - : FLT_MAX); -} - - -/***************************************************************/ -/************************ MOUNTAIN STUFF ***********************/ -/***************************************************************/ - -GLfloat DispFactor[MAXLEVEL]; /* Array of what to multiply random number - by for a given level to get midpoint - displacement */ -GLfloat DispBias[MAXLEVEL]; /* Array of what to add to random number - before multiplying it by DispFactor */ - -#define NUMRANDS 191 -float RandTable[NUMRANDS]; /* hash table of random numbers so we can - raise the same midpoints by the same amount */ - - /* The following are for permitting an edge of a moutain to be */ - /* pegged so it won't be displaced up or down. This makes it */ - /* easier to setup scenes and makes a single moutain look better */ - -GLfloat Verts[3][3], /* Vertices of outside edges of mountain */ - Slopes[3]; /* Slopes between these outside edges */ -int Pegged[3]; /* Is this edge pegged or not */ - - /* - * Comes up with a new table of random numbers [0,1) - */ -void InitRandTable(unsigned int seed) -{ - int i; - - srand48((long) seed); - for (i = 0; i < NUMRANDS; i++) - RandTable[i] = drand48() - 0.5; -} - - /* calculate midpoint and displace it if required */ -void Midpoint(GLfloat mid[3], GLfloat v1[3], GLfloat v2[3], - int edge, int level) -{ - unsigned hash; - - mid[0] = (v1[0] + v2[0]) / 2; - mid[1] = (v1[1] + v2[1]) / 2; - mid[2] = (v1[2] + v2[2]) / 2; - if (!Pegged[edge] || (fabs(xzslope(Verts[edge], mid) - - Slopes[edge]) > 0.00001)) { - srand48((int)((v1[0]+v2[0])*23344)); - hash = drand48() * 7334334; - srand48((int)((v2[2]+v1[2])*43433)); - hash = (unsigned)(drand48() * 634344 + hash) % NUMRANDS; - mid[1] += ((RandTable[hash] + DispBias[level]) * DispFactor[level]); - } -} - - /* - * Recursive moutain drawing routine -- from lecture with addition of - * allowing an edge to be pegged. This function requires the above - * globals to be set, as well as the Level global for fractal level - */ -void FMR(GLfloat v1[3], GLfloat v2[3], GLfloat v3[3], int level) -{ - if (level == Level) { - GLfloat norm[3]; - - triagnormal(v1, v2, v3, norm); - glNormal3fv(norm); - glVertex3fv(v1); - glVertex3fv(v2); - glVertex3fv(v3); - - } else { - GLfloat m1[3], m2[3], m3[3]; - - Midpoint(m1, v1, v2, 0, level); - Midpoint(m2, v2, v3, 1, level); - Midpoint(m3, v3, v1, 2, level); - - FMR(v1, m1, m3, level + 1); - FMR(m1, v2, m2, level + 1); - FMR(m3, m2, v3, level + 1); - FMR(m1, m2, m3, level + 1); - } -} - - /* - * sets up lookup tables and calls recursive mountain function - */ -void FractalMountain(GLfloat v1[3], GLfloat v2[3], GLfloat v3[3], - int pegged[3]) -{ - GLfloat lengths[MAXLEVEL]; - GLfloat fraction[8] = { 0.3, 0.3, 0.4, 0.2, 0.3, 0.2, 0.4, 0.4 }; - GLfloat bias[8] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 }; - int i; - float avglen = (xzlength(v1, v2) + - xzlength(v2, v3) + - xzlength(v3, v1) / 3); - - for (i = 0; i < 3; i++) { - Verts[0][i] = v1[i]; /* set mountain vertex globals */ - Verts[1][i] = v2[i]; - Verts[2][i] = v3[i]; - Pegged[i] = pegged[i]; - } - - Slopes[0] = xzslope(Verts[0], Verts[1]); /* set edge slope globals */ - Slopes[1] = xzslope(Verts[1], Verts[2]); - Slopes[2] = xzslope(Verts[2], Verts[0]); - - lengths[0] = avglen; - for (i = 1; i < Level; i++) { - lengths[i] = lengths[i-1]/2; /* compute edge length for each level */ - } - - for (i = 0; i < Level; i++) { /* DispFactor and DispBias arrays */ - DispFactor[i] = (lengths[i] * ((i <= 7) ? fraction[i] : fraction[7])); - DispBias[i] = ((i <= 7) ? bias[i] : bias[7]); - } - - glBegin(GL_TRIANGLES); - FMR(v1, v2, v3, 0); /* issues no GL but vertex calls */ - glEnd(); -} - - /* - * draw a mountain and build the display list - */ -void CreateMountain(void) -{ - GLfloat v1[3] = { 0, 0, -1 }, v2[3] = { -1, 0, 1 }, v3[3] = { 1, 0, 1 }; - int pegged[3] = { 1, 1, 1 }; - - glNewList(MOUNTAIN, GL_COMPILE); - glPushAttrib(GL_LIGHTING_BIT); - glCallList(MOUNTAIN_MAT); - FractalMountain(v1, v2, v3, pegged); - glPopAttrib(); - glEndList(); -} - - /* - * new random numbers to make a different moutain - */ -void NewMountain(void) -{ - InitRandTable(time(NULL)); -} - -/***************************************************************/ -/***************************** TREE ****************************/ -/***************************************************************/ - -long TreeSeed; /* for srand48 - remember so we can build "same tree" - at a different level */ - - /* - * recursive tree drawing thing, fleshed out from class notes pseudocode - */ -void FractalTree(int level) -{ - long savedseed; /* need to save seeds while building tree too */ - - if (level == Level) { - glPushMatrix(); - glRotatef(drand48()*180, 0, 1, 0); - glCallList(STEMANDLEAVES); - glPopMatrix(); - } else { - glCallList(STEM); - glPushMatrix(); - glRotatef(drand48()*180, 0, 1, 0); - glTranslatef(0, 1, 0); - glScalef(0.7, 0.7, 0.7); - - savedseed = (long) drand48()*ULONG_MAX; /* recurse on a 3-way branching */ - glPushMatrix(); - glRotatef(110 + drand48()*40, 0, 1, 0); - glRotatef(30 + drand48()*20, 0, 0, 1); - FractalTree(level + 1); - glPopMatrix(); - - srand48(savedseed); - savedseed = (long) drand48()*ULONG_MAX; - glPushMatrix(); - glRotatef(-130 + drand48()*40, 0, 1, 0); - glRotatef(30 + drand48()*20, 0, 0, 1); - FractalTree(level + 1); - glPopMatrix(); - - srand48(savedseed); - glPushMatrix(); - glRotatef(-20 + drand48()*40, 0, 1, 0); - glRotatef(30 + drand48()*20, 0, 0, 1); - FractalTree(level + 1); - glPopMatrix(); - - glPopMatrix(); - } -} - - /* - * Create display lists for a leaf, a set of leaves, and a stem - */ -void CreateTreeLists(void) -{ - GLUquadricObj *cylquad = gluNewQuadric(); - int i; - - glNewList(STEM, GL_COMPILE); - glPushMatrix(); - glRotatef(-90, 1, 0, 0); - gluCylinder(cylquad, 0.1, 0.08, 1, 10, 2 ); - glPopMatrix(); - glEndList(); - - glNewList(LEAF, GL_COMPILE); /* I think this was jeff allen's leaf idea */ - glBegin(GL_TRIANGLES); - glNormal3f(-0.1, 0, 0.25); /* not normalized */ - glVertex3f(0, 0, 0); - glVertex3f(0.25, 0.25, 0.1); - glVertex3f(0, 0.5, 0); - - glNormal3f(0.1, 0, 0.25); - glVertex3f(0, 0, 0); - glVertex3f(0, 0.5, 0); - glVertex3f(-0.25, 0.25, 0.1); - glEnd(); - glEndList(); - - glNewList(STEMANDLEAVES, GL_COMPILE); - glPushMatrix(); - glPushAttrib(GL_LIGHTING_BIT); - glCallList(STEM); - glCallList(LEAF_MAT); - for(i = 0; i < 3; i++) { - glTranslatef(0, 0.333, 0); - glRotatef(90, 0, 1, 0); - glPushMatrix(); - glRotatef(0, 0, 1, 0); - glRotatef(50, 1, 0, 0); - glCallList(LEAF); - glPopMatrix(); - glPushMatrix(); - glRotatef(180, 0, 1, 0); - glRotatef(60, 1, 0, 0); - glCallList(LEAF); - glPopMatrix(); - } - glPopAttrib(); - glPopMatrix(); - glEndList(); -} - - /* - * draw and build display list for tree - */ -void CreateTree(void) -{ - srand48(TreeSeed); - - glNewList(TREE, GL_COMPILE); - glPushMatrix(); - glPushAttrib(GL_LIGHTING_BIT); - glCallList(TREE_MAT); - glTranslatef(0, -1, 0); - FractalTree(0); - glPopAttrib(); - glPopMatrix(); - glEndList(); -} - - /* - * new seed for a new tree (groan) - */ -void NewTree(void) -{ - TreeSeed = time(NULL); -} - -/***************************************************************/ -/*********************** FRACTAL PLANET ************************/ -/***************************************************************/ - -void CreateIsland(void) -{ - CreateMountain(); - glNewList(ISLAND, GL_COMPILE); - glPushAttrib(GL_LIGHTING_BIT); - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glCallList(WATER_MAT); - - glBegin(GL_QUADS); - glNormal3f(0, 1, 0); - glVertex3f(100, 0.01, 100); - glVertex3f(100, 0.01, -100); - glVertex3f(-100, 0.01, -100); - glVertex3f(-100, 0.01, 100); - glEnd(); - - glPushMatrix(); - glTranslatef(0, -0.1, 0); - glCallList(MOUNTAIN); - glPopMatrix(); - - glPushMatrix(); - glRotatef(135, 0, 1, 0); - glTranslatef(0.2, -0.15, -0.4); - glCallList(MOUNTAIN); - glPopMatrix(); - - glPushMatrix(); - glRotatef(-60, 0, 1, 0); - glTranslatef(0.7, -0.07, 0.5); - glCallList(MOUNTAIN); - glPopMatrix(); - - glPushMatrix(); - glRotatef(-175, 0, 1, 0); - glTranslatef(-0.7, -0.05, -0.5); - glCallList(MOUNTAIN); - glPopMatrix(); - - glPushMatrix(); - glRotatef(165, 0, 1, 0); - glTranslatef(-0.9, -0.12, 0.0); - glCallList(MOUNTAIN); - glPopMatrix(); - - glPopMatrix(); - glPopAttrib(); - glEndList(); -} - - -void NewFractals(void) -{ - NewMountain(); - NewTree(); -} - -void Create(int fract) -{ - switch(fract) { - case MOUNTAIN: - CreateMountain(); - break; - case TREE: - CreateTree(); - break; - case ISLAND: - CreateIsland(); - break; - } -} - - - -/***************************************************************/ -/**************************** OPENGL ***************************/ -/***************************************************************/ - - -void SetupMaterials(void) -{ - GLfloat mtn_ambuse[] = { 0.426, 0.256, 0.108, 1.0 }; - GLfloat mtn_specular[] = { 0.394, 0.272, 0.167, 1.0 }; - GLfloat mtn_shininess[] = { 10 }; - - GLfloat water_ambuse[] = { 0.0, 0.1, 0.5, 1.0 }; - GLfloat water_specular[] = { 0.0, 0.1, 0.5, 1.0 }; - GLfloat water_shininess[] = { 10 }; - - GLfloat tree_ambuse[] = { 0.4, 0.25, 0.1, 1.0 }; - GLfloat tree_specular[] = { 0.0, 0.0, 0.0, 1.0 }; - GLfloat tree_shininess[] = { 0 }; - - GLfloat leaf_ambuse[] = { 0.0, 0.8, 0.0, 1.0 }; - GLfloat leaf_specular[] = { 0.0, 0.8, 0.0, 1.0 }; - GLfloat leaf_shininess[] = { 10 }; - - glNewList(MOUNTAIN_MAT, GL_COMPILE); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, mtn_ambuse); - glMaterialfv(GL_FRONT, GL_SPECULAR, mtn_specular); - glMaterialfv(GL_FRONT, GL_SHININESS, mtn_shininess); - glEndList(); - - glNewList(WATER_MAT, GL_COMPILE); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, water_ambuse); - glMaterialfv(GL_FRONT, GL_SPECULAR, water_specular); - glMaterialfv(GL_FRONT, GL_SHININESS, water_shininess); - glEndList(); - - glNewList(TREE_MAT, GL_COMPILE); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, tree_ambuse); - glMaterialfv(GL_FRONT, GL_SPECULAR, tree_specular); - glMaterialfv(GL_FRONT, GL_SHININESS, tree_shininess); - glEndList(); - - glNewList(LEAF_MAT, GL_COMPILE); - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, leaf_ambuse); - glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, leaf_specular); - glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, leaf_shininess); - glEndList(); -} - -void myGLInit(void) -{ - GLfloat light_ambient[] = { 0.0, 0.0, 0.0, 1.0 }; - GLfloat light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 }; - GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 }; - GLfloat light_position[] = { 0.0, 0.3, 0.3, 0.0 }; - - GLfloat lmodel_ambient[] = { 0.4, 0.4, 0.4, 1.0 }; - - glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); - glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); - glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); - glLightfv(GL_LIGHT0, GL_POSITION, light_position); - - glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); - - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - - glDepthFunc(GL_LEQUAL); - glEnable(GL_DEPTH_TEST); - - glEnable(GL_NORMALIZE); -#if 0 - glEnable(GL_CULL_FACE); - glCullFace(GL_BACK); -#endif - - glShadeModel(GL_SMOOTH); -#if 0 - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); -#endif - - SetupMaterials(); - CreateTreeLists(); - - glFlush(); -} - -/***************************************************************/ -/************************ GLUT STUFF ***************************/ -/***************************************************************/ - -void reshape(GLsizei w, GLsizei h) -{ - glViewport(0,0,w,h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(60.0, (GLdouble)w/h, 0.01, 100); - glPushMatrix(); - glMatrixMode(GL_MODELVIEW); - glFlush(); -} - -void display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glFlush(); - - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glPushMatrix(); /* clear of last viewing xform, leaving perspective */ - - agvViewTransform(); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - if (Rebuild) { - Create(Fract); - Rebuild = 0; - } - - glCallList(Fract); - - if (DrawAxes) - glCallList(AXES); - - glutSwapBuffers(); - glFlush(); -} - - -void visible(int v) -{ - if (v == GLUT_VISIBLE) - agvSetAllowIdle(1); - else { - glutIdleFunc(NULL); - agvSetAllowIdle(0); - } -} - -void menuuse(int v) -{ - if (v == GLUT_MENU_NOT_IN_USE) - agvSetAllowIdle(1); - else { - glutIdleFunc(NULL); - agvSetAllowIdle(0); - } -} - -/***************************************************************/ -/******************* MENU SETUP & HANDLING *********************/ -/***************************************************************/ - -typedef enum { MENU_QUIT, MENU_RAND, MENU_MOVE, MENU_AXES } MenuChoices; - -void setlevel(int value) -{ - Level = value; - Rebuild = 1; - glutPostRedisplay(); -} - -void choosefract(int value) -{ - Fract = value; - Rebuild = 1; - glutPostRedisplay(); -} - -void handlemenu(int value) -{ - switch (value) { - case MENU_QUIT: - exit(0); - break; - case MENU_RAND: - NewFractals(); - Rebuild = 1; - glutPostRedisplay(); - break; - case MENU_AXES: - DrawAxes = !DrawAxes; - glutPostRedisplay(); - break; - } -} - -void MenuInit(void) -{ - int submenu3, submenu2, submenu1; - - submenu1 = glutCreateMenu(setlevel); - glutAddMenuEntry("0", 0); glutAddMenuEntry("1", 1); - glutAddMenuEntry("2", 2); glutAddMenuEntry("3", 3); - glutAddMenuEntry("4", 4); glutAddMenuEntry("5", 5); - glutAddMenuEntry("6", 6); glutAddMenuEntry("7", 7); - glutAddMenuEntry("8", 8); - - submenu2 = glutCreateMenu(choosefract); - glutAddMenuEntry("Moutain", MOUNTAIN); - glutAddMenuEntry("Tree", TREE); - glutAddMenuEntry("Island", ISLAND); - - submenu3 = glutCreateMenu(agvSwitchMoveMode); - glutAddMenuEntry("Flying", FLYING); - glutAddMenuEntry("Polar", POLAR); - - glutCreateMenu(handlemenu); - glutAddSubMenu("Level", submenu1); - glutAddSubMenu("Fractal", submenu2); - glutAddSubMenu("Movement", submenu3); - glutAddMenuEntry("New Fractal", MENU_RAND); - glutAddMenuEntry("Toggle Axes", MENU_AXES); - glutAddMenuEntry("Quit", MENU_QUIT); - glutAttachMenu(GLUT_RIGHT_BUTTON); -} - - -/***************************************************************/ -/**************************** MAIN *****************************/ -/***************************************************************/ - -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitWindowSize(512, 512); - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_MULTISAMPLE); - glutCreateWindow("Fractal Planet?"); - - agvInit(1); /* 1 cause we don't have our own idle */ - - glutReshapeFunc(reshape); - glutDisplayFunc(display); - glutVisibilityFunc(visible); - glutMenuStateFunc(menuuse); - - NewFractals(); - agvMakeAxesList(AXES); - myGLInit(); - MenuInit(); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/contrib/fractals.dsp b/lib/glut-3.7.6/progs/contrib/fractals.dsp deleted file mode 100644 index 26ff71f0d..000000000 --- a/lib/glut-3.7.6/progs/contrib/fractals.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="fractals" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=fractals - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "fractals.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "fractals.mak" CFG="fractals - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "fractals - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "fractals - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "fractals - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "fractals - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "fractals - Win32 Release" -# Name "fractals - Win32 Debug" -# Begin Source File - -SOURCE=.\fractals.c -# End Source File -# Begin Source File - -SOURCE=.\fracviewer.c -# End Source File -# Begin Source File - -SOURCE=.\fracviewer.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/contrib/fracviewer.c b/lib/glut-3.7.6/progs/contrib/fracviewer.c deleted file mode 100644 index 105c4379e..000000000 --- a/lib/glut-3.7.6/progs/contrib/fracviewer.c +++ /dev/null @@ -1,498 +0,0 @@ -/* - * fractviewer.c [from agviewer.c (version 1.0)] - * - * AGV: a glut viewer. Routines for viewing a 3d scene w/ glut - * - * See agv_example.c and agviewer.h comments within for more info. - * - * I welcome any feedback or improved versions! - * - * Philip Winston - 4/11/95 - * pwinston@hmc.edu - * http://www.cs.hmc.edu/people/pwinston - */ - -#include -#include -#include -#include - -#include "fracviewer.h" - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -/***************************************************************/ -/************************** SETTINGS ***************************/ -/***************************************************************/ - - /* Initial polar movement settings */ -#define INIT_POLAR_AZ 0.0 -#define INIT_POLAR_EL 30.0 -#define INIT_DIST 4.0 -#define INIT_AZ_SPIN 0.5 -#define INIT_EL_SPIN 0.0 - - /* Initial flying movement settings */ -#define INIT_EX 0.0 -#define INIT_EY -2.0 -#define INIT_EZ -2.0 -#define INIT_MOVE 0.01 -#define MINMOVE 0.001 - - /* Start in this mode */ -#define INIT_MODE POLAR - - /* Controls: */ - - /* map 0-9 to an EyeMove value when number key is hit in FLYING mode */ -#define SPEEDFUNCTION(x) ((x)*(x)*0.001) - - /* Multiply EyeMove by (1+-MOVEFRACTION) when +/- hit in FLYING mode */ -#define MOVEFRACTION 0.25 - - /* What to multiply number of pixels mouse moved by to get rotation amount */ -#define EL_SENS 0.5 -#define AZ_SENS 0.5 - - /* What to multiply number of pixels mouse moved by for movement amounts */ -#define DIST_SENS 0.01 -#define E_SENS 0.01 - - /* Minimum spin to allow in polar (lower forced to zero) */ -#define MIN_AZSPIN 0.1 -#define MIN_ELSPIN 0.1 - - /* Factors used in computing dAz and dEl (which determine AzSpin, ElSpin) */ -#define SLOW_DAZ 0.90 -#define SLOW_DEL 0.90 -#define PREV_DAZ 0.80 -#define PREV_DEL 0.80 -#define CUR_DAZ 0.20 -#define CUR_DEL 0.20 - -/***************************************************************/ -/************************** GLOBALS ****************************/ -/***************************************************************/ - -int MoveMode = INIT_MODE; /* FLYING or POLAR mode? */ - -GLfloat Ex = INIT_EX, /* flying parameters */ - Ey = INIT_EY, - Ez = INIT_EZ, - EyeMove = INIT_MOVE, - - EyeDist = INIT_DIST, /* polar params */ - AzSpin = INIT_AZ_SPIN, - ElSpin = INIT_EL_SPIN, - - EyeAz = INIT_POLAR_AZ, /* used by both */ - EyeEl = INIT_POLAR_EL; - -int agvMoving; /* Currently moving? */ - -int downx, downy, /* for tracking mouse position */ - lastx, lasty, - downb = -1; /* and button status */ - -GLfloat downDist, downEl, downAz, /* for saving state of things */ - downEx, downEy, downEz, /* when button is pressed */ - downEyeMove; - -GLfloat dAz, dEl, lastAz, lastEl; /* to calculate spinning w/ polar motion */ -int AdjustingAzEl = 0; - -int AllowIdle, RedisplayWindow; - /* If AllowIdle is 1 it means AGV will install its own idle which - * will update the viewpoint as needed and send glutPostRedisplay() to the - * window RedisplayWindow which was set in agvInit(). AllowIdle of 0 - * means AGV won't install an idle funciton, and something like - * "if (agvMoving) agvMove()" should exist at the end of the running - * idle function. - */ - -#define MAX(x,y) (((x) > (y)) ? (x) : (y)) -#define TORAD(x) ((M_PI/180.0)*(x)) -#define TODEG(x) ((180.0/M_PI)*(x)) - -/***************************************************************/ -/************************ PROTOTYPES ***************************/ -/***************************************************************/ - - /* - * these are functions meant for internal use only - * the other prototypes are in agviewer.h - */ - -void PolarLookFrom(GLfloat dist, GLfloat elevation, GLfloat azimuth); -void FlyLookFrom(GLfloat x, GLfloat y, GLfloat z, - GLfloat az, GLfloat el); -int ConstrainEl(void); -void MoveOn(int v); -void SetMove(float newmove); -static void normalize(GLfloat v[3]); -static void ncrossprod(float v1[3], float v2[3], float cp[3]); - - -/***************************************************************/ -/************************ agvInit ******************************/ -/***************************************************************/ - -void agvInit(int window) -{ - glutMouseFunc(agvHandleButton); - glutMotionFunc(agvHandleMotion); - glutKeyboardFunc(agvHandleKeys); - RedisplayWindow = glutGetWindow(); - agvSetAllowIdle(window); -} - -/***************************************************************/ -/************************ VIEWPOINT STUFF **********************/ -/***************************************************************/ - - /* - * viewing transformation modified from page 90 of red book - */ -void PolarLookFrom(GLfloat dist, GLfloat elevation, GLfloat azimuth) -{ - glTranslatef(0, 0, -dist); - glRotatef(elevation, 1, 0, 0); - glRotatef(azimuth, 0, 1, 0); - -} - - /* - * I took the idea of tracking eye position in absolute - * coords and direction looking in Polar form from denis - */ -void FlyLookFrom(GLfloat x, GLfloat y, GLfloat z, GLfloat az, GLfloat el) -{ - float lookat[3], perp[3], up[3]; - - lookat[0] = sin(TORAD(az))*cos(TORAD(el)); - lookat[1] = sin(TORAD(el)); - lookat[2] = -cos(TORAD(az))*cos(TORAD(el)); - normalize(lookat); - perp[0] = lookat[2]; - perp[1] = 0; - perp[2] = -lookat[0]; - normalize(perp); - ncrossprod(lookat, perp, up); - gluLookAt(x, y, z, - x+lookat[0], y+lookat[1], z+lookat[2], - up[0], up[1], up[2]); -} - - /* - * Call viewing transformation based on movement mode - */ -void agvViewTransform(void) -{ - switch (MoveMode) { - case FLYING: - FlyLookFrom(Ex, Ey, Ez, EyeAz, EyeEl); - break; - case POLAR: - PolarLookFrom(EyeDist, EyeEl, EyeAz); - break; - } -} - - /* - * keep them vertical; I think this makes a lot of things easier, - * but maybe it wouldn't be too hard to adapt things to let you go - * upside down - */ -int ConstrainEl(void) -{ - if (EyeEl <= -90) { - EyeEl = -89.99; - return 1; - } else if (EyeEl >= 90) { - EyeEl = 89.99; - return 1; - } - return 0; -} - - /* - * Idle Function - moves eyeposition - */ -void agvMove(void) -{ - - switch (MoveMode) { - case FLYING: - Ex += EyeMove*sin(TORAD(EyeAz))*cos(TORAD(EyeEl)); - Ey += EyeMove*sin(TORAD(EyeEl)); - Ez -= EyeMove*cos(TORAD(EyeAz))*cos(TORAD(EyeEl)); - break; - - case POLAR: - EyeEl += ElSpin; - EyeAz += AzSpin; - if (ConstrainEl()) { /* weird spin thing to make things look */ - ElSpin = -ElSpin; /* look better when you are kept from going */ - /* upside down while spinning - Isn't great */ - if (fabs(ElSpin) > fabs(AzSpin)) - AzSpin = fabs(ElSpin) * ((AzSpin > 0) ? 1 : -1); - } - break; - } - - if (AdjustingAzEl) { - dAz *= SLOW_DAZ; - dEl *= SLOW_DEL; - } - - if (AllowIdle) { - glutSetWindow(RedisplayWindow); - glutPostRedisplay(); - } -} - - - /* - * Don't install agvMove as idle unless we will be updating the view - * and we've been given a RedisplayWindow - */ -void MoveOn(int v) -{ - if (v && ((MoveMode == FLYING && EyeMove != 0) || - (MoveMode == POLAR && - (AzSpin != 0 || ElSpin != 0 || AdjustingAzEl)))) { - agvMoving = 1; - if (AllowIdle) - glutIdleFunc(agvMove); - } else { - agvMoving = 0; - if (AllowIdle) - glutIdleFunc(NULL); - } -} - - /* - * set new redisplay window. If <= 0 it means we are not to install - * an idle function and will rely on whoever does install one to - * put statement like "if (agvMoving) agvMove();" at end of it - */ -void agvSetAllowIdle(int allowidle) -{ - if ((AllowIdle = allowidle)) - MoveOn(1); -} - - - /* - * when moving to flying we stay in the same spot, moving to polar we - * reset since we have to be looking at the origin (though a pivot from - * current position to look at origin might be cooler) - */ -void agvSwitchMoveMode(int move) -{ - switch (move) { - case FLYING: - if (MoveMode == FLYING) return; - Ex = -EyeDist*sin(TORAD(EyeAz))*cos(TORAD(EyeEl)); - Ey = EyeDist*sin(TORAD(EyeEl)); - Ez = EyeDist*(cos(TORAD(EyeAz))*cos(TORAD(EyeEl))); - EyeAz = EyeAz; - EyeEl = -EyeEl; - EyeMove = INIT_MOVE; - break; - case POLAR: - EyeDist = INIT_DIST; - EyeAz = INIT_POLAR_AZ; - EyeEl = INIT_POLAR_EL; - AzSpin = INIT_AZ_SPIN; - ElSpin = INIT_EL_SPIN; - break; - } - MoveMode = move; - MoveOn(1); - glutPostRedisplay(); -} - -/***************************************************************/ -/******************* MOUSE HANDLING ***********************/ -/***************************************************************/ - -void agvHandleButton(int button, int state, int x, int y) -{ - if (state == GLUT_DOWN && downb == -1) { - lastx = downx = x; - lasty = downy = y; - downb = button; - - switch (button) { - case GLUT_LEFT_BUTTON: - lastEl = downEl = EyeEl; - lastAz = downAz = EyeAz; - AzSpin = ElSpin = dAz = dEl = 0; - AdjustingAzEl = 1; - MoveOn(1); - break; - - case GLUT_MIDDLE_BUTTON: - downDist = EyeDist; - downEx = Ex; - downEy = Ey; - downEz = Ez; - downEyeMove = EyeMove; - EyeMove = 0; - } - - } else if (state == GLUT_UP && button == downb) { - - downb = -1; - - switch (button) { - case GLUT_LEFT_BUTTON: - if (MoveMode != FLYING) { - AzSpin = -dAz; - if (AzSpin < MIN_AZSPIN && AzSpin > -MIN_AZSPIN) - AzSpin = 0; - ElSpin = -dEl; - if (ElSpin < MIN_ELSPIN && ElSpin > -MIN_ELSPIN) - ElSpin = 0; - } - AdjustingAzEl = 0; - MoveOn(1); - break; - - case GLUT_MIDDLE_BUTTON: - EyeMove = downEyeMove; - } - } -} - - /* - * change EyeEl and EyeAz and position when mouse is moved w/ button down - */ -void agvHandleMotion(int x, int y) -{ - int deltax = x - downx, deltay = y - downy; - - switch (downb) { - case GLUT_LEFT_BUTTON: - EyeEl = downEl + EL_SENS * ((MoveMode == FLYING) ? -deltay : deltay); - ConstrainEl(); - EyeAz = downAz + AZ_SENS * deltax; - dAz = PREV_DAZ*dAz + CUR_DAZ*(lastAz - EyeAz); - dEl = PREV_DEL*dEl + CUR_DEL*(lastEl - EyeEl); - lastAz = EyeAz; - lastEl = EyeEl; - break; - case GLUT_MIDDLE_BUTTON: - EyeDist = downDist + DIST_SENS*deltay; - Ex = downEx - E_SENS*deltay*sin(TORAD(EyeAz))*cos(TORAD(EyeEl)); - Ey = downEy - E_SENS*deltay*sin(TORAD(EyeEl)); - Ez = downEz + E_SENS*deltay*cos(TORAD(EyeAz))*cos(TORAD(EyeEl)); - break; - } - glutPostRedisplay(); -} - -/***************************************************************/ -/********************* KEYBOARD HANDLING ***********************/ -/***************************************************************/ - - /* - * set EyeMove (current speed) for FLYING mode - */ -void SetMove(float newmove) -{ - if (newmove > MINMOVE) { - EyeMove = newmove; - MoveOn(1); - } else { - EyeMove = 0; - MoveOn(0); - } -} - - /* - * 0->9 set speed, +/- adjust current speed -- in FLYING mode - */ -/* ARGSUSED1 */ -void agvHandleKeys(unsigned char key, int x, int y) -{ - if (MoveMode != FLYING) - return; - - if (key >= '0' && key <= '9') - SetMove(SPEEDFUNCTION((key-'0'))); - else - switch(key) { - case '+': - if (EyeMove == 0) - SetMove(MINMOVE); - else - SetMove(EyeMove *= (1 + MOVEFRACTION)); - break; - case '-': - SetMove(EyeMove *= (1 - MOVEFRACTION)); - break; - } -} - -/***************************************************************/ -/*********************** VECTOR STUFF **************************/ -/***************************************************************/ - - /* normalizes v */ -static void normalize(GLfloat v[3]) -{ - GLfloat d = sqrt(v[0]*v[0] + v[1]*v[1] + v[2]*v[2]); - - if (d == 0) - fprintf(stderr, "Zero length vector in normalize\n"); - else - v[0] /= d; v[1] /= d; v[2] /= d; -} - - /* calculates a normalized crossproduct to v1, v2 */ -static void ncrossprod(float v1[3], float v2[3], float cp[3]) -{ - cp[0] = v1[1]*v2[2] - v1[2]*v2[1]; - cp[1] = v1[2]*v2[0] - v1[0]*v2[2]; - cp[2] = v1[0]*v2[1] - v1[1]*v2[0]; - normalize(cp); -} - -/***************************************************************/ -/**************************** AXES *****************************/ -/***************************************************************/ - - - /* draw axes -- was helpful to debug/design things */ -void agvMakeAxesList(int displaylistnum) -{ - int i,j; - GLfloat axes_ambuse[] = { 0.5, 0.0, 0.0, 1.0 }; - glNewList(displaylistnum, GL_COMPILE); - glPushAttrib(GL_LIGHTING_BIT); - glMatrixMode(GL_MODELVIEW); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, axes_ambuse); - glBegin(GL_LINES); - glVertex3f(15, 0, 0); glVertex3f(-15, 0, 0); - glVertex3f(0, 15, 0); glVertex3f(0, -15, 0); - glVertex3f(0, 0, 15); glVertex3f(0, 0, -15); - glEnd(); - for (i = 0; i < 3; i++) { - glPushMatrix(); - glTranslatef(-10*(i==0), -10*(i==1), -10*(i==2)); - for (j = 0; j < 21; j++) { - glutSolidCube(0.1); - glTranslatef(i==0, i==1, i==2); - } - glPopMatrix(); - } - glPopAttrib(); - glEndList(); -} - - diff --git a/lib/glut-3.7.6/progs/contrib/fracviewer.h b/lib/glut-3.7.6/progs/contrib/fracviewer.h deleted file mode 100644 index 0bfe6d0b1..000000000 --- a/lib/glut-3.7.6/progs/contrib/fracviewer.h +++ /dev/null @@ -1,104 +0,0 @@ -/* - * fracviewer.h [from agviewer.h (version 1.0)] - * - * AGV: a glut viewer. Routines for viewing a 3d scene w/ glut - * - * The two view movement modes are POLAR and FLYING. Both move the eye, NOT - * THE OBJECT. You can never be upside down or twisted (roll) in either mode. - * - * A nice addition would be an examiner type trackball mode where you are - * moving the object and so could see it from any angle. Also less restricted - * flying and polar modes (fly upside down, do rolls, etc.). - * - * Controls for Polar are just left and middle buttons -- for flying it's - * those plus 0-9 number keys and +/- for speed adjustment. - * - * See agv_example.c and agviewer.c for more info. Probably want to make - * a copy of these and then edit for each program. This isn't meant to be - * a library, just something to graft onto your own programs. - * - * I welcome any feedback or improved versions. - * - * Philip Winston - 4/11/95 - * pwinston@hmc.edu - * http://www.cs.hmc.edu/people/pwinston - */ - - - /* - * Call agvInit() with glut's current window set to the window in - * which you want to run the viewer. Right after creating it is fine. It - * will remember that window for possible later use (see below) and - * registers mouse, motion, and keyboard handlers for that window (see below). - * - * allowidle is 1 or 0 depnding on whether you will let AGV install - * and uninstall an idle function. 0 means you will not let it (because - * you will be having your own idle function). In this case it is your - * responsibility to put a statement like: - * - * if (agvMoving) - * agvMove(); - * - * at the end of your idle function, to let AGV update the viewpoint if it - * is moving. - * - * If allowidle is 1 it means AGV will install its own idle which - * will update the viewpoint as needed and send glutPostRedisplay() to the - * window which was current when agvInit() was called. - * - * agvSetIdleAllow changes this value so you can let AGV install its idle - * when your idle isn't installed. - * - */ -void agvInit(int allowidle); -void agvSetAllowIdle(int allowidle); - - - /* - * Set which movement mode you are in. - */ -typedef enum { FLYING, POLAR } MovementType; -void agvSwitchMoveMode(int move); - - /* - * agvViewTransform basically does the appropriate gluLookAt() for the - * current position. So call it in your display on the projection matrix - */ -void agvViewTransform(void); - - /* - * agvMoving will be set by AGV according to whether it needs you to call - * agvMove() at the end of your idle function. You only need these if - * you aren't allowing AGV to do its own idle. - * (Don't change the value of agvMoving) - */ -extern int agvMoving; -void agvMove(void); - - /* - * These are the routines AGV registers to deal with mouse and keyboard input. - * Keyboard input only matters in flying mode, and then only to set speed. - * Mouse input only uses left two buttons in both modes. - * These are all registered with agvInit(), but you could register - * something else which called these, or reregister these as needed - */ -void agvHandleButton(int button, int state, int x, int y); -void agvHandleMotion(int x, int y); -void agvHandleKeys(unsigned char key, int x, int y); - - /* - * Just an extra routine which makes an x-y-z axes (about 10x10x10) - * which is nice for aligning things and debugging. Pass it an available - * displaylist number. - */ -void agvMakeAxesList(int displaylist); - - - - - - - - - - diff --git a/lib/glut-3.7.6/progs/contrib/gears.c b/lib/glut-3.7.6/progs/contrib/gears.c deleted file mode 100644 index 9f5ced6f1..000000000 --- a/lib/glut-3.7.6/progs/contrib/gears.c +++ /dev/null @@ -1,569 +0,0 @@ -#include -#include - -#include -#ifndef _WIN32 -#include -#endif -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif -#include -#include - -/* For portability... */ -#undef fcos -#undef fsin -#undef fsqrt -#define fcos cos -#define fsin sin -#define fsqrt sqrt - -static double d_near = 1.0; -static double d_far = 2000; -static int poo = 0; - -typedef struct { - float rad, wid; -} Profile; - -void flat_face(float ir, float or, float wd); -void draw_inside(float w1, float w2, float rad); -void draw_outside(float w1, float w2, float rad); -void tooth_side(int nt, float ir, float or, float tp, float tip, float wd); - -int circle_subdiv; - -int mode = GLUT_DOUBLE; - -void -gear(int nt, float wd, float ir, float or, float tp, float tip, int ns, Profile * ip) -{ - /** - * nt - number of teeth - * wd - width of gear at teeth - * ir - inside radius absolute scale - * or - radius at outside of wheel (tip of tooth) ratio of ir - * tp - ratio of tooth in slice of circle (0..1] (1 = teeth are touching at base) - * tip - ratio of tip of tooth (0..tp] (cant be wider that base of tooth) - * ns - number of elements in wheel width profile - * *ip - list of float pairs {start radius, width, ...} (width is ratio to wd) - * - */ - - /* gear lying on xy plane, z for width. all normals calulated - (normalized) */ - - float prev; - int k, t; - - /* estimat # times to divide circle */ - if (nt <= 0) - circle_subdiv = 64; - else { - /* lowest multiple of number of teeth */ - circle_subdiv = nt; - while (circle_subdiv < 64) - circle_subdiv += nt; - } - - /* --- draw wheel face --- */ - - /* draw horzontal, vertical faces for each section. if first - section radius not zero, use wd for 0.. first if ns == 0 - use wd for whole face. last width used to edge. */ - - if (ns <= 0) { - flat_face(0.0, ir, wd); - } else { - /* draw first flat_face, then continue in loop */ - if (ip[0].rad > 0.0) { - flat_face(0.0, ip[0].rad * ir, wd); - prev = wd; - t = 0; - } else { - flat_face(0.0, ip[1].rad * ir, ip[0].wid * wd); - prev = ip[0].wid; - t = 1; - } - for (k = t; k < ns; k++) { - if (prev < ip[k].wid) { - draw_inside(prev * wd, ip[k].wid * wd, ip[k].rad * ir); - } else { - draw_outside(prev * wd, ip[k].wid * wd, ip[k].rad * ir); - } - prev = ip[k].wid; - /* - draw to edge of wheel, add final face if needed - */ - if (k == ns - 1) { - flat_face(ip[k].rad * ir, ir, ip[k].wid * wd); - - /* now draw side to match tooth rim */ - if (ip[k].wid < 1.0) { - draw_inside(ip[k].wid * wd, wd, ir); - } else { - draw_outside(ip[k].wid * wd, wd, ir); - } - } else { - flat_face(ip[k].rad * ir, ip[k + 1].rad * ir, ip[k].wid * wd); - } - } - } - - /* --- tooth side faces --- */ - tooth_side(nt, ir, or, tp, tip, wd); - - /* --- tooth hill surface --- */ -} - -void -tooth_side(int nt, float ir, float or, float tp, float tip, float wd) -{ - - float i; - float end = 2.0 * M_PI / nt; - float x[6], y[6]; - float s[3], c[3]; - - or = or * ir; /* or is really a ratio of ir */ - for (i = 0; i < 2.0 * M_PI - end / 4.0; i += end) { - - c[0] = fcos(i); - s[0] = fsin(i); - c[1] = fcos(i + end * (0.5 - tip / 2)); - s[1] = fsin(i + end * (0.5 - tip / 2)); - c[2] = fcos(i + end * (0.5 + tp / 2)); - s[2] = fsin(i + end * (0.5 + tp / 2)); - - x[0] = ir * c[0]; - y[0] = ir * s[0]; - x[5] = ir * fcos(i + end); - y[5] = ir * fsin(i + end); - /* ---treat veritices 1,4 special to match strait edge of - face */ - x[1] = x[0] + (x[5] - x[0]) * (0.5 - tp / 2); - y[1] = y[0] + (y[5] - y[0]) * (0.5 - tp / 2); - x[4] = x[0] + (x[5] - x[0]) * (0.5 + tp / 2); - y[4] = y[0] + (y[5] - y[0]) * (0.5 + tp / 2); - x[2] = or * fcos(i + end * (0.5 - tip / 2)); - y[2] = or * fsin(i + end * (0.5 - tip / 2)); - x[3] = or * fcos(i + end * (0.5 + tip / 2)); - y[3] = or * fsin(i + end * (0.5 + tip / 2)); - - /* draw face trapezoids as 2 tmesh */ - glNormal3f(0.0, 0.0, 1.0); - glBegin(GL_TRIANGLE_STRIP); - glVertex3f(x[2], y[2], wd / 2); - glVertex3f(x[1], y[1], wd / 2); - glVertex3f(x[3], y[3], wd / 2); - glVertex3f(x[4], y[4], wd / 2); - glEnd(); - - glNormal3f(0.0, 0.0, -1.0); - glBegin(GL_TRIANGLE_STRIP); - glVertex3f(x[2], y[2], -wd / 2); - glVertex3f(x[1], y[1], -wd / 2); - glVertex3f(x[3], y[3], -wd / 2); - glVertex3f(x[4], y[4], -wd / 2); - glEnd(); - - /* draw inside rim pieces */ - glNormal3f(c[0], s[0], 0.0); - glBegin(GL_TRIANGLE_STRIP); - glVertex3f(x[0], y[0], -wd / 2); - glVertex3f(x[1], y[1], -wd / 2); - glVertex3f(x[0], y[0], wd / 2); - glVertex3f(x[1], y[1], wd / 2); - glEnd(); - - /* draw up hill side */ - { - float a, b, n; - /* calculate normal of face */ - a = x[2] - x[1]; - b = y[2] - y[1]; - n = 1.0 / fsqrt(a * a + b * b); - a = a * n; - b = b * n; - glNormal3f(b, -a, 0.0); - } - glBegin(GL_TRIANGLE_STRIP); - glVertex3f(x[1], y[1], -wd / 2); - glVertex3f(x[2], y[2], -wd / 2); - glVertex3f(x[1], y[1], wd / 2); - glVertex3f(x[2], y[2], wd / 2); - glEnd(); - /* draw top of hill */ - glNormal3f(c[1], s[1], 0.0); - glBegin(GL_TRIANGLE_STRIP); - glVertex3f(x[2], y[2], -wd / 2); - glVertex3f(x[3], y[3], -wd / 2); - glVertex3f(x[2], y[2], wd / 2); - glVertex3f(x[3], y[3], wd / 2); - glEnd(); - - /* draw down hill side */ - { - float a, b, c; - /* calculate normal of face */ - a = x[4] - x[3]; - b = y[4] - y[3]; - c = 1.0 / fsqrt(a * a + b * b); - a = a * c; - b = b * c; - glNormal3f(b, -a, 0.0); - } - glBegin(GL_TRIANGLE_STRIP); - glVertex3f(x[3], y[3], -wd / 2); - glVertex3f(x[4], y[4], -wd / 2); - glVertex3f(x[3], y[3], wd / 2); - glVertex3f(x[4], y[4], wd / 2); - glEnd(); - /* inside rim part */ - glNormal3f(c[2], s[2], 0.0); - glBegin(GL_TRIANGLE_STRIP); - glVertex3f(x[4], y[4], -wd / 2); - glVertex3f(x[5], y[5], -wd / 2); - glVertex3f(x[4], y[4], wd / 2); - glVertex3f(x[5], y[5], wd / 2); - glEnd(); - } -} - -void -flat_face(float ir, float or, float wd) -{ - - int i; - float w; - - /* draw each face (top & bottom ) * */ - if (poo) - printf("Face : %f..%f wid=%f\n", ir, or, wd); - if (wd == 0.0) - return; - for (w = wd / 2; w > -wd; w -= wd) { - if (w > 0.0) - glNormal3f(0.0, 0.0, 1.0); - else - glNormal3f(0.0, 0.0, -1.0); - - if (ir == 0.0) { - /* draw as t-fan */ - glBegin(GL_TRIANGLE_FAN); - glVertex3f(0.0, 0.0, w); /* center */ - glVertex3f(or, 0.0, w); - for (i = 1; i < circle_subdiv; i++) { - glVertex3f(fcos(2.0 * M_PI * i / circle_subdiv) * or, - fsin(2.0 * M_PI * i / circle_subdiv) * or, - w); - } - glVertex3f(or, 0.0, w); - glEnd(); - } else { - /* draw as tmesh */ - glBegin(GL_TRIANGLE_STRIP); - glVertex3f(or, 0.0, w); - glVertex3f(ir, 0.0, w); - for (i = 1; i < circle_subdiv; i++) { - glVertex3f(fcos(2.0 * M_PI * i / circle_subdiv) * or, - fsin(2.0 * M_PI * i / circle_subdiv) * or, - w); - glVertex3f(fcos(2.0 * M_PI * i / circle_subdiv) * ir, - fsin(2.0 * M_PI * i / circle_subdiv) * ir, - w); - } - glVertex3f(or, 0.0, w); - glVertex3f(ir, 0.0, w); - glEnd(); - - } - } -} - -void -draw_inside(float w1, float w2, float rad) -{ - - int i, j; - float c, s; - if (poo) - printf("Inside: wid=%f..%f rad=%f\n", w1, w2, rad); - if (w1 == w2) - return; - - w1 = w1 / 2; - w2 = w2 / 2; - for (j = 0; j < 2; j++) { - if (j == 1) { - w1 = -w1; - w2 = -w2; - } - glBegin(GL_TRIANGLE_STRIP); - glNormal3f(-1.0, 0.0, 0.0); - glVertex3f(rad, 0.0, w1); - glVertex3f(rad, 0.0, w2); - for (i = 1; i < circle_subdiv; i++) { - c = fcos(2.0 * M_PI * i / circle_subdiv); - s = fsin(2.0 * M_PI * i / circle_subdiv); - glNormal3f(-c, -s, 0.0); - glVertex3f(c * rad, - s * rad, - w1); - glVertex3f(c * rad, - s * rad, - w2); - } - glNormal3f(-1.0, 0.0, 0.0); - glVertex3f(rad, 0.0, w1); - glVertex3f(rad, 0.0, w2); - glEnd(); - } -} - -void -draw_outside(float w1, float w2, float rad) -{ - - int i, j; - float c, s; - if (poo) - printf("Outsid: wid=%f..%f rad=%f\n", w1, w2, rad); - if (w1 == w2) - return; - - w1 = w1 / 2; - w2 = w2 / 2; - for (j = 0; j < 2; j++) { - if (j == 1) { - w1 = -w1; - w2 = -w2; - } - glBegin(GL_TRIANGLE_STRIP); - glNormal3f(1.0, 0.0, 0.0); - glVertex3f(rad, 0.0, w1); - glVertex3f(rad, 0.0, w2); - for (i = 1; i < circle_subdiv; i++) { - c = fcos(2.0 * M_PI * i / circle_subdiv); - s = fsin(2.0 * M_PI * i / circle_subdiv); - glNormal3f(c, s, 0.0); - glVertex3f(c * rad, - s * rad, - w1); - glVertex3f(c * rad, - s * rad, - w2); - } - glNormal3f(1.0, 0.0, 0.0); - glVertex3f(rad, 0.0, w1); - glVertex3f(rad, 0.0, w2); - glEnd(); - } -} - -Profile gear_profile[] = -{0.000, 0.0, - 0.300, 7.0, - 0.340, 0.4, - 0.550, 0.64, - 0.600, 0.4, - 0.950, 1.0 -}; - -float a1 = 27.0; -float a2 = 67.0; -float a3 = 47.0; -float a4 = 87.0; -float i1 = 1.2; -float i2 = 3.1; -float i3 = 2.3; -float i4 = 1.1; -void -oneFrame(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glPushMatrix(); - glTranslatef(0.0, 0.0, -4.0); - glRotatef(a3, 1.0, 1.0, 1.0); - glRotatef(a4, 0.0, 0.0, -1.0); - glTranslatef(0.14, 0.2, 0.0); - gear(76, - 0.4, 2.0, 1.1, - 0.4, 0.04, - sizeof(gear_profile) / sizeof(Profile), gear_profile); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(0.1, 0.2, -3.8); - glRotatef(a2, -4.0, 2.0, -1.0); - glRotatef(a1, 1.0, -3.0, 1.0); - glTranslatef(0.0, -0.2, 0.0); - gear(36, - 0.4, 2.0, 1.1, - 0.7, 0.2, - sizeof(gear_profile) / sizeof(Profile), gear_profile); - glPopMatrix(); - - a1 += i1; - if (a1 > 360.0) - a1 -= 360.0; - if (a1 < 0.0) - a1 -= 360.0; - a2 += i2; - if (a2 > 360.0) - a2 -= 360.0; - if (a2 < 0.0) - a2 -= 360.0; - a3 += i3; - if (a3 > 360.0) - a3 -= 360.0; - if (a3 < 0.0) - a3 -= 360.0; - a4 += i4; - if (a4 > 360.0) - a4 -= 360.0; - if (a4 < 0.0) - a4 -= 360.0; - if (mode == GLUT_SINGLE) { - glFlush(); - } else { - glutSwapBuffers(); - } -} - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); -} - -void -myReshape(int w, int h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glFrustum(-1.0, 1.0, -1.0, 1.0, d_near, d_far); - /** - use perspective instead: - - if (w <= h){ - glOrtho( 0.0, 1.0, - 0.0, 1.0 * (GLfloat) h / (GLfloat) w, - -16.0, 4.0); - }else{ - glOrtho( 0.0, 1.0 * (GLfloat) w / (GLfloat) h, - 0.0, 1.0, - -16.0, 4.0); - } - */ - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); -} - -void -visibility(int status) -{ - if (status == GLUT_VISIBLE) { - glutIdleFunc(oneFrame); - } else { - glutIdleFunc(NULL); - } - -} - -void -myinit(void) -{ - float f[20]; - glClearColor(0.0, 0.0, 0.0, 0.0); - myReshape(640, 480); - /* glShadeModel(GL_FLAT); */ - glEnable(GL_DEPTH_TEST); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glEnable(GL_LIGHTING); - - glLightf(GL_LIGHT0, GL_SHININESS, 1.0); - f[0] = 1.3; - f[1] = 1.3; - f[2] = -3.3; - f[3] = 1.0; - glLightfv(GL_LIGHT0, GL_POSITION, f); - f[0] = 0.8; - f[1] = 1.0; - f[2] = 0.83; - f[3] = 1.0; - glLightfv(GL_LIGHT0, GL_SPECULAR, f); - glLightfv(GL_LIGHT0, GL_DIFFUSE, f); - glEnable(GL_LIGHT0); - - glLightf(GL_LIGHT1, GL_SHININESS, 1.0); - f[0] = -2.3; - f[1] = 0.3; - f[2] = -7.3; - f[3] = 1.0; - glLightfv(GL_LIGHT1, GL_POSITION, f); - f[0] = 1.0; - f[1] = 0.8; - f[2] = 0.93; - f[3] = 1.0; - glLightfv(GL_LIGHT1, GL_SPECULAR, f); - glLightfv(GL_LIGHT1, GL_DIFFUSE, f); - glEnable(GL_LIGHT1); - - /* gear material */ - f[0] = 0.1; - f[1] = 0.15; - f[2] = 0.2; - f[3] = 1.0; - glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, f); - - f[0] = 0.9; - f[1] = 0.3; - f[2] = 0.3; - f[3] = 1.0; - glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, f); - - f[0] = 0.4; - f[1] = 0.9; - f[2] = 0.6; - f[3] = 1.0; - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, f); - - glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 4); -} - -/* ARGSUSED1 */ -void -keys(unsigned char c, int x, int y) -{ - - if (c == 0x1b) - exit(0); /* escape */ -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - - if (argc > 1) - mode = GLUT_SINGLE; - glutInitDisplayMode(mode | GLUT_RGB | GLUT_DEPTH); - glutInitWindowPosition(100, 100); - glutInitWindowSize(640, 480); - glutCreateWindow(argv[0]); - - myinit(); - glutReshapeFunc(myReshape); - glutDisplayFunc(display); - glutKeyboardFunc(keys); - glutVisibilityFunc(visibility); - glutPostRedisplay(); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/contrib/gears.dsp b/lib/glut-3.7.6/progs/contrib/gears.dsp deleted file mode 100644 index 1fa4c54ca..000000000 --- a/lib/glut-3.7.6/progs/contrib/gears.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="gears" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=gears - 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 "gears.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 "gears.mak" CFG="gears - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "gears - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "gears - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "gears - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "gears - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "gears - Win32 Release" -# Name "gears - Win32 Debug" -# Begin Source File - -SOURCE=.\gears.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/contrib/hanoi.c b/lib/glut-3.7.6/progs/contrib/hanoi.c deleted file mode 100644 index 46db95290..000000000 --- a/lib/glut-3.7.6/progs/contrib/hanoi.c +++ /dev/null @@ -1,469 +0,0 @@ - -/* hanoi.c - written by Greg Humphreys while an intern at SGI */ - -#include -#include -#include -#include - -double WIDTH = 800; -double HEIGHT = 800; - -GLboolean motion = GL_TRUE; -GLboolean back_wall = GL_FALSE; -GLint xangle = 0, yangle = 0; -GLint xlangle = 0, ylangle = 0; - -#define other(i,j) (6-(i+j)) -#define wallz -(WIDTH/2) -#define DISK_HEIGHT 20 -int NUM_DISKS = 11; -#define CONE NUM_DISKS+1 -#define WALL CONE + 1 -#define HANOI_SOLVE 0 -#define HANOI_QUIT 1 -#define HANOI_LIGHTING 2 -#define HANOI_WALL 3 -#define HANOI_FOG 4 - -GLfloat lightOneDirection[] = -{0, 0, -1}; -GLfloat lightOnePosition[] = -{200, 100, 300, 1}; -GLfloat lightOneColor[] = -{1.0, 1.0, 0.5, 1.0}; - -GLfloat lightTwoDirection[] = -{0, 0, -1}; -GLfloat lightTwoPosition[] = -{600, 100, 300, 1}; -GLfloat lightTwoColor[] = -{1.0, 0.0, 0.3, 1.0}; - -GLfloat lightZeroPosition[] = -{400, 200, 300, 1}; -GLfloat lightZeroColor[] = -{.3, .3, .3, .3}; - -GLfloat diskColor[] = -{1.0, 1.0, 1.0, .8}, poleColor[] = -{1.0, 0.2, 0.2, .8}; - -typedef struct stack_node { - int size; - struct stack_node *next; -} stack_node; - -typedef struct stack { - struct stack_node *head; - int depth; -} stack; - -stack poles[4]; - -void -push(int which, int size) -{ - stack_node *node = malloc(sizeof(stack_node)); - if (!node) { - fprintf(stderr, "out of memory!\n"); - exit(-1); - } - node->size = size; - node->next = poles[which].head; - poles[which].head = node; - poles[which].depth++; -} - -int -pop(int which) -{ - int retval = poles[which].head->size; - stack_node *temp = poles[which].head; - poles[which].head = poles[which].head->next; - poles[which].depth--; - free(temp); - return retval; -} - -typedef struct move_node { - int t, f; - struct move_node *next; - struct move_node *prev; -} move_node; - -typedef struct move_stack { - int depth; - struct move_node *head, *tail; -} move_stack; - -move_stack moves; - -void -init(void) -{ - int i; - for (i = 0; i < 4; i++) { - poles[i].head = NULL; - poles[i].depth = 0; - } - moves.head = NULL; - moves.tail = NULL; - moves.depth = 0; - - for (i = 1; i <= NUM_DISKS; i++) { - glNewList(i, GL_COMPILE); - { - glutSolidTorus(DISK_HEIGHT / 2, 5 * i, 15, 15); - } - glEndList(); - } - glNewList(CONE, GL_COMPILE); - { - glutSolidCone(10, (NUM_DISKS + 1) * DISK_HEIGHT, 20, 20); - } - glEndList(); -} - -void -mpop(void) -{ - move_node *temp = moves.head; - moves.head = moves.head->next; - free(temp); - moves.depth--; -} - -void -mpush(int t, int f) -{ - move_node *node = malloc(sizeof(move_node)); - if (!node) { - fprintf(stderr, "Out of memory!\n"); - exit(-1); - } - node->t = t; - node->f = f; - node->next = NULL; - node->prev = moves.tail; - if (moves.tail) - moves.tail->next = node; - moves.tail = node; - if (!moves.head) - moves.head = moves.tail; - moves.depth++; -} - -/* ARGSUSED1 */ -void -keyboard(unsigned char key, int x, int y) -{ - switch (key) { - case 27: /* ESC */ - case 'q': - case 'Q': - exit(0); - } -} - -void -update(void) -{ - glutPostRedisplay(); -} - -void -DrawPost(int xcenter) -{ - glPushMatrix(); - { - glTranslatef(xcenter, 0, 0); - glRotatef(90, -1, 0, 0); - glCallList(CONE); - } glPopMatrix(); -} - -void -DrawPosts(void) -{ - glColor3fv(poleColor); - glLineWidth(10); - glMaterialfv(GL_FRONT, GL_DIFFUSE, poleColor); - DrawPost((int) WIDTH / 4); - DrawPost(2 * (int) WIDTH / 4); - DrawPost(3 * (int) WIDTH / 4); -} - -void -DrawDisk(int xcenter, int ycenter, int size) -{ - glPushMatrix(); - { - glTranslatef(xcenter, ycenter, 0); - glRotatef(90, 1, 0, 0); - glCallList(size); - } glPopMatrix(); -} - -void -DrawDooDads(void) -{ - int i; - stack_node *temp; - int xcenter, ycenter; - glColor3fv(diskColor); - glMaterialfv(GL_FRONT, GL_DIFFUSE, diskColor); - for (i = 1; i <= 3; i++) { - xcenter = i * WIDTH / 4; - for (temp = poles[i].head, ycenter = DISK_HEIGHT * poles[i].depth - DISK_HEIGHT / 2; temp; temp = temp->next, ycenter -= DISK_HEIGHT) { - DrawDisk(xcenter, ycenter, temp->size); - } - } -} - -#define MOVE(t,f) mpush((t),(f)) - -static void -mov(int n, int f, int t) -{ - int o; - - if (n == 1) { - MOVE(t, f); - return; - } - o = other(f, t); - mov(n - 1, f, o); - mov(1, f, t); - mov(n - 1, o, t); -} - -GLfloat wallcolor[] = -{0, .3, 1, 1}; - -void -DrawWall(void) -{ - int i; - int j; - glColor3fv(wallcolor); - for (i = 0; i < WIDTH; i += 10) { - for (j = 0; j < HEIGHT; j += 10) { - glBegin(GL_POLYGON); - { - glNormal3f(0, 0, 1); - glVertex3f(i + 10, j, wallz); - glVertex3f(i + 10, j + 10, wallz); - glVertex3f(i, j + 10, wallz); - glVertex3f(i, j, wallz); - } - glEnd(); - } - } -} - -void -draw(void) -{ - int t, f; - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - if (back_wall) { - glMaterialfv(GL_FRONT, GL_DIFFUSE, wallcolor); - DrawWall(); - } - glPushMatrix(); - { - glTranslatef(WIDTH / 2, HEIGHT / 2, 0); - glRotatef(xlangle, 0, 1, 0); - glRotatef(ylangle, 1, 0, 0); - glTranslatef(-WIDTH / 2, -HEIGHT / 2, 0); - glLightfv(GL_LIGHT0, GL_POSITION, lightZeroPosition); - } - glPopMatrix(); - - glPushMatrix(); - { - glTranslatef(WIDTH / 2, HEIGHT / 2, 0); - glRotatef(xangle, 0, 1, 0); - glRotatef(yangle, 1, 0, 0); - glTranslatef(-WIDTH / 2, -HEIGHT / 2, 0); - DrawPosts(); - DrawDooDads(); - } - glPopMatrix(); - if (motion && moves.depth) { - t = moves.head->t; - f = moves.head->f; - push(t, pop(f)); - mpop(); - } - glutSwapBuffers(); -} - -void -hanoi_menu(int value) -{ - switch (value) { - case HANOI_SOLVE: - motion = !motion; - if(motion) { - glutIdleFunc(update); - } else { - glutIdleFunc(NULL); - } - break; - case HANOI_LIGHTING: - if (glIsEnabled(GL_LIGHTING)) - glDisable(GL_LIGHTING); - else - glEnable(GL_LIGHTING); - break; - case HANOI_WALL: - back_wall = !back_wall; - break; - case HANOI_FOG: - if (glIsEnabled(GL_FOG)) - glDisable(GL_FOG); - else { - glEnable(GL_FOG); - glFogi(GL_FOG_MODE, GL_EXP); - glFogf(GL_FOG_DENSITY, .01); - } - break; - case HANOI_QUIT: - exit(0); - break; - } - glutPostRedisplay(); -} - -int oldx, oldy; - -GLboolean leftb = GL_FALSE, middleb = GL_FALSE; - -void -hanoi_mouse(int button, int state, int x, int y) -{ - if (button == GLUT_LEFT_BUTTON) { - oldx = x; - oldy = y; - if (state == GLUT_DOWN) - leftb = GL_TRUE; - else - leftb = GL_FALSE; - } - if (button == GLUT_MIDDLE_BUTTON) { - oldx = x; - oldy = y; - if (state == GLUT_DOWN) - middleb = GL_TRUE; - else - middleb = GL_FALSE; - } -} - -void -hanoi_visibility(int state) -{ - if (state == GLUT_VISIBLE && motion) { - glutIdleFunc(update); - } else { - glutIdleFunc(NULL); - } -} - -void -hanoi_motion(int x, int y) -{ - if (leftb) { - xangle -= (x - oldx); - yangle -= (y - oldy); - } - if (middleb) { - xlangle -= (x - oldx); - ylangle -= (y - oldy); - } - oldx = x; - oldy = y; - glutPostRedisplay(); -} - -int -main(int argc, char *argv[]) -{ - int i; - - glutInit(&argc, argv); - for(i=1; i= argc) { - printf("hanoi: number after -n is required\n"); - exit(1); - } - NUM_DISKS = atoi(argv[i]); - } - } - - glutInitWindowSize((int) WIDTH, (int) HEIGHT); - glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH); - - glutCreateWindow("Hanoi"); - - glutDisplayFunc(draw); - glutKeyboardFunc(keyboard); - - glViewport(0, 0, (GLsizei) WIDTH, (GLsizei) HEIGHT); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho(0, WIDTH, 0, HEIGHT, -10000, 10000); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glClearColor(0, 0, 0, 0); - glClearDepth(1.0); - - glEnable(GL_CULL_FACE); - glEnable(GL_DEPTH_TEST); - -/* glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, 1); */ - - glLightfv(GL_LIGHT1, GL_POSITION, lightOnePosition); - glLightfv(GL_LIGHT1, GL_DIFFUSE, lightOneColor); - glLightf(GL_LIGHT1, GL_SPOT_CUTOFF, 10); - glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, lightOneDirection); - glEnable(GL_LIGHT1); - - glLightfv(GL_LIGHT2, GL_POSITION, lightTwoPosition); - glLightfv(GL_LIGHT2, GL_DIFFUSE, lightTwoColor); -/* glLightf(GL_LIGHT2,GL_LINEAR_ATTENUATION,.005); */ - glLightf(GL_LIGHT2, GL_SPOT_CUTOFF, 10); - glLightfv(GL_LIGHT2, GL_SPOT_DIRECTION, lightTwoDirection); - glEnable(GL_LIGHT2); - - glLightfv(GL_LIGHT0, GL_DIFFUSE, lightZeroColor); - glEnable(GL_LIGHT0); - - glEnable(GL_LIGHTING); - - glutMouseFunc(hanoi_mouse); - glutMotionFunc(hanoi_motion); - glutVisibilityFunc(hanoi_visibility); - - glutCreateMenu(hanoi_menu); - glutAddMenuEntry("Solve", HANOI_SOLVE); - glutAddMenuEntry("Lighting", HANOI_LIGHTING); - glutAddMenuEntry("Back Wall", HANOI_WALL); - glutAddMenuEntry("Fog", HANOI_FOG); - glutAddMenuEntry("Quit", HANOI_QUIT); - glutAttachMenu(GLUT_RIGHT_BUTTON); - init(); - - for (i = 0; i < NUM_DISKS; i++) - push(1, NUM_DISKS - i); - mov(NUM_DISKS, 1, 3); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/contrib/hanoi.dsp b/lib/glut-3.7.6/progs/contrib/hanoi.dsp deleted file mode 100644 index 20abbbfcc..000000000 --- a/lib/glut-3.7.6/progs/contrib/hanoi.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="hanoi" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=hanoi - 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 "hanoi.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 "hanoi.mak" CFG="hanoi - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "hanoi - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "hanoi - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "hanoi - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "hanoi - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "hanoi - Win32 Release" -# Name "hanoi - Win32 Debug" -# Begin Source File - -SOURCE=.\hanoi.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/contrib/hanoi2.c b/lib/glut-3.7.6/progs/contrib/hanoi2.c deleted file mode 100644 index ebe660196..000000000 --- a/lib/glut-3.7.6/progs/contrib/hanoi2.c +++ /dev/null @@ -1,444 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include - -#define MAX_DISKS 6 - -#define DISK_HEIGHT 0.2 -#define CYL_RADIUS 0.1 -#define CYL_HEIGHT 1.8 -#define OVER_CLICKS 120 -#define UP_CLICKS 120 - -enum {X=0, Y, Z}; -enum {DL_POLE=1, DL_FLOOR, DL_DISK}; /* disk must be last */ - -/* motion states */ -enum {ST_UP=1, ST_TO_1, ST_TO_2, ST_DOWN, ST_READNEXT, ST_IDLE}; - -int motion = 1; -int spinning = 1; -int click = 0; -int delay = 0; -int direction; -int state=ST_READNEXT; -int c_pole; -int old_pole; -int c_disk; -int engine_fd; -int engine_pid; - -float pole_offset[3][2] = { { 0, -0.575 }, - { 1.15, 0.575 }, - { -1.15, 0.575 } }; -float disk_offset[MAX_DISKS][3] = {{ 0, -0.575, 0}, - { 0, -0.575, 0}, - { 0, -0.575, 0}, - { 0, -0.575, 0}, - { 0, -0.575, 0}, - { 0, -0.575, 0}}; -float disk_incr[3] = { 0, 0, 0 }; - -int num_disks; -struct { - int num_disks; - int disks[MAX_DISKS]; -} disks_on_poles[3]; - -/* - * create display list for disk of outside radius orad - */ -void -diskdlist(int dlist, float orad) -{ - GLUquadricObj *obj; - - obj = gluNewQuadric(); - if (obj == 0) { - perror("can't alloc quadric"); - exit(1); - } - glNewList(dlist, GL_COMPILE); - glPushMatrix(); - glColor4ub(205, 67, 100, 200); - gluQuadricDrawStyle(obj, GLU_FILL); - - gluQuadricOrientation(obj, GLU_OUTSIDE); - gluCylinder(obj, orad, orad, DISK_HEIGHT, 20, 4); - - gluQuadricOrientation(obj, GLU_INSIDE); - gluCylinder(obj, CYL_RADIUS, CYL_RADIUS, DISK_HEIGHT, 20, 4); - - gluQuadricOrientation(obj, GLU_INSIDE); - gluDisk(obj, CYL_RADIUS, orad, 20, 4); - - gluQuadricOrientation(obj, GLU_OUTSIDE); - glPushMatrix(); - glTranslatef(0.0, 0.0, DISK_HEIGHT); - gluDisk(obj, CYL_RADIUS, orad, 20, 4); - glPopMatrix(); - glPopMatrix(); - glEndList(); -} - -/* - * create display list for pole - */ -void -poledlist(int dlist) -{ - GLUquadricObj *obj; - - obj = gluNewQuadric(); - if (obj == 0) { - perror("can't alloc quadric"); - exit(1); - } - - glNewList(dlist, GL_COMPILE); - glPushMatrix(); - glColor3ub(67, 205, 128); - gluQuadricDrawStyle(obj, GLU_FILL); - gluQuadricOrientation(obj, GLU_OUTSIDE); - - gluCylinder(obj, CYL_RADIUS, CYL_RADIUS, CYL_HEIGHT, 12, 3); - - gluQuadricOrientation(obj, GLU_INSIDE); - gluDisk(obj, 0.0, CYL_RADIUS, 12, 3); - - gluQuadricOrientation(obj, GLU_OUTSIDE); - glPushMatrix(); - glTranslatef(0.0, 0.0, CYL_HEIGHT); - gluDisk(obj, 0.0, CYL_RADIUS, 12, 3); - glPopMatrix(); - glPopMatrix(); - glEndList(); - -} - -/* - * create display list for floor - */ -void -floordlist(int dlist) -{ - glNewList(dlist, GL_COMPILE); - glPushMatrix(); - glColor4ub(90, 100, 230,100); - - /* top/bottom */ - glBegin(GL_TRIANGLE_STRIP); - glNormal3f(0.0, 0.0, 1.0); - glVertex3f(-2.0, -2.0, 0); - glVertex3f(2.0, -2.0, 0); - glVertex3f(-2.0, 2.0, 0); - glVertex3f(2.0, 2.0, 0); - glEnd(); - glPushMatrix(); - glTranslatef(0, 0, -0.2); - glBegin(GL_TRIANGLE_STRIP); - glNormal3f(0.0, 0.0, -1.0); - glVertex3f(2.0, -2.0, 0); - glVertex3f(-2.0, -2.0, 0); - glVertex3f(2.0, 2.0, 0); - glVertex3f(-2.0, 2.0, 0); - glEnd(); - glPopMatrix(); - - /* edges */ - glBegin(GL_TRIANGLE_STRIP); - glNormal3f(-1.0, 0.0, 0.0); - glVertex3f(-2.0, -2.0, -0.2); - glVertex3f(-2.0, -2.0, 0); - glVertex3f(-2.0, 2.0, -0.2); - glVertex3f(-2.0, 2.0, 0); - glNormal3f(0.0, 1.0, 0.0); - glVertex3f(2.0, 2.0, -0.2); - glVertex3f(2.0, 2.0, 0); - glNormal3f(1.0, 0.0, 0.0); - glVertex3f(2.0, -2.0, -0.2); - glVertex3f(2.0, -2.0, 0); - glNormal3f(0.0, -1.0, 0.0); - glVertex3f(-2.0, -2.0, -0.2); - glVertex3f(-2.0, -2.0, 0); - glEnd(); - glPopMatrix(); - glEndList(); -} - -/* - * motion state machine -- idle loop - */ -void -idle(void) -{ - static int over_clicks; - int rc; - char next_move[3]; - - if (spinning) - click++; - - if (motion) { - switch(state) { - case ST_READNEXT: - /* - * read an instruction from the hanoi engine - */ - rc = read(engine_fd, next_move, 3); - if (rc == 3 && next_move[0] == 'M') { - /* choose poles/disks to move */ - old_pole = next_move[1]; - c_pole = next_move[2]; - c_disk = disks_on_poles[old_pole].disks[disks_on_poles[old_pole].num_disks - 1]; - state = ST_UP; - disk_incr[Z] = CYL_HEIGHT / (float)UP_CLICKS; - } - else if (rc == 3 && next_move[0] == 'D') { - state = ST_IDLE; - } - else if (rc != 0) { - fprintf(stderr,"bad read; %d, [%d%d%d]\n", - rc, next_move[0], next_move[1], next_move[2]); - exit(1); - } - /* if rc == 0, do nothing this frame */ - break; - - case ST_UP: - disk_offset[c_disk][Z] += disk_incr[Z]; - if (disk_offset[c_disk][Z] >= (CYL_HEIGHT+0.1)) { - state = ST_TO_1; - over_clicks = OVER_CLICKS; - disk_incr[X] = (pole_offset[c_pole][X] - - pole_offset[old_pole][X]) / (float)(over_clicks-1); - disk_incr[Y] = (pole_offset[c_pole][Y] - - pole_offset[old_pole][Y]) / (float)(over_clicks-1); - disk_incr[Z] = 0.0; - } - break; - - case ST_DOWN: - disk_offset[c_disk][Z] -= disk_incr[Z]; - if (disk_offset[c_disk][Z] <= (disks_on_poles[c_pole].num_disks*0.2+disk_incr[Z])) { - disk_offset[c_disk][Z] = disks_on_poles[c_pole].num_disks*0.2; - disks_on_poles[old_pole].num_disks --; - disks_on_poles[c_pole].disks[disks_on_poles[c_pole].num_disks ++] = c_disk; - state = ST_READNEXT; - } - break; - - case ST_TO_1: - case ST_TO_2: - disk_offset[c_disk][X] += disk_incr[X]; - disk_offset[c_disk][Y] += disk_incr[Y]; - over_clicks --; - if (over_clicks == 0) { - state = ST_DOWN; - disk_incr[X] = 0.0; - disk_incr[Y] = 0.0; - disk_incr[Z] = CYL_HEIGHT / (float)UP_CLICKS; - disk_offset[c_disk][X] = pole_offset[c_pole][X]; /* paranoia */ - disk_offset[c_disk][Y] = pole_offset[c_pole][Y]; - } - break; - - case ST_IDLE: - break; - } - } - glutPostRedisplay(); -} - -void -draw_scene(void) -{ - int i; - glPushMatrix(); - glRotatef(click, 0, 0, 1); - glRotatef(click/5.0, 1, 0, 0); - for (i=0; i<3; i++) { - glPushMatrix(); - glTranslatef(pole_offset[i][X], pole_offset[i][Y], 0); - glCallList(DL_POLE); - glPopMatrix(); - } - for(i=0; i MAX_DISKS) { - num_disks = MAX_DISKS; - } - break; - case 's': - spinning = atoi(optarg) ? 1 : 0; - break; - case 'm': - motion = atoi(optarg) ? 1 : 0; - break; - default: - break; - } - } - - glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); - glutCreateWindow("Hanoi"); - glutDisplayFunc(display); - glutVisibilityFunc(visible); - glMatrixMode(GL_PROJECTION); - gluPerspective(40.0, 1.0, 0.1, 10.0); - glMatrixMode(GL_MODELVIEW); - gluLookAt(0, 5.5, 3.5, - 0, 0, 0, - 0, 0, 1); - glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); -#ifndef TOOSLOW - glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); - glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); - glEnable(GL_COLOR_MATERIAL); -#endif -#ifndef TOOSLOW - glShadeModel(GL_SMOOTH); -#endif - glEnable(GL_DEPTH_TEST); - glEnable(GL_CULL_FACE); -#ifndef TOOSLOW - glLightfv(GL_LIGHT0, GL_POSITION, light_position); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); -#endif - glDepthFunc(GL_LEQUAL); - glClearColor(0.3, 0.3, 0.3, 0.0); -#ifndef TOOSLOW - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); -#endif - - glPolygonMode(GL_FRONT, GL_FILL); - - glutCreateMenu(menu); - glutAddMenuEntry("Toggle motion", 2); - glutAddMenuEntry("Toggle spinning", 3); - glutAddMenuEntry("Quit", 666); - glutAttachMenu(GLUT_RIGHT_BUTTON); -#if defined(GL_POLYGON_OFFSET_EXT) - if (glutExtensionSupported("GL_EXT_polygon_offset")) { - glPolygonOffsetEXT(0.5, 0.0); - glEnable(GL_POLYGON_OFFSET_EXT); - } -#endif - - poledlist(DL_POLE); - floordlist(DL_FLOOR); - - disks_on_poles[0].num_disks = num_disks; - for (i=0; i -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=hanoi2 - 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 "hanoi2.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 "hanoi2.mak" CFG="hanoi2 - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "hanoi2 - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "hanoi2 - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "hanoi2 - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "hanoi2 - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "hanoi2___Win32_Debug" -# PROP BASE Intermediate_Dir "hanoi2___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "hanoi2 - Win32 Release" -# Name "hanoi2 - Win32 Debug" -# Begin Source File - -SOURCE=.\engine.c -# PROP Exclude_From_Build 1 -# End Source File -# Begin Source File - -SOURCE=.\hanoi2.c -# PROP Exclude_From_Build 1 -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/contrib/lineblend.c b/lib/glut-3.7.6/progs/contrib/lineblend.c deleted file mode 100644 index a844ce2a6..000000000 --- a/lib/glut-3.7.6/progs/contrib/lineblend.c +++ /dev/null @@ -1,257 +0,0 @@ - -/* lineblend.c - * - * To compile: cc -o lineblend lineblend.c -lGL -lGLU -lX11 -lglut -lXmu - * - * Usage: lineblend - * - * This is an puffed up version of the first GL assignment we had for my - * graphics class: write a 2-d openGL program w/ color and interactivity. - * - * Left and middle buttons drawn colored lines, right button brings up a menu - * with a few options. If you draw for long enough and then hit pick - * "redraw" (or resize or uncover the window) it takes so long to redraw - * all the lines it is kind of like a kaleidoscope animation. Or something. - * - * Philip Winston - 2/11/95 (modified: 2/12) - * pwinston@hmc.edu - * http://www.cs.hmc.edu/people/pwinston - * - */ - -#include - -#include -#include - -#ifdef _WIN32 -#define drand48() (((float) rand())/((float) RAND_MAX)) -#endif - -typedef enum {MENU_ALPHA_1, MENU_ALPHA_2, MENU_ALPHA_3, MENU_ALPHA_4, - MENU_COLOR_1, MENU_COLOR_2, MENU_COLOR_3, MENU_COLOR_4, - MENU_ANTI_ON, MENU_ANTI_OFF, - MENU_ERASE, MENU_REDRAW, MENU_QUIT} MenuChoices; - -typedef enum {SC1, SC2, SC3, SC4} ColorScheme; - -int wwidth, wheight, downbtn = -1, downx, downy; - -GLuint DispLists = 1; - -GLfloat Alpha = 0.2; -int Color = SC1; - -void myglInit(void) -{ - glLineWidth(10.0); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluOrtho2D(-0.5,0.5,-0.5,0.5); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - glFlush(); -} - -void myreshape(GLsizei w, GLsizei h) -{ - wwidth = w; wheight = h; - glViewport(0,0,w,h); - glClear(GL_COLOR_BUFFER_BIT); - glFlush(); -} - -void mydisplay(void) -{ - GLuint i; - - glClear(GL_COLOR_BUFFER_BIT); - - for (i = 0; i < DispLists; i++) - glCallList(i); - - glFlush(); -} - -void drawline(int x, int y) -{ - GLfloat fx = (float)(x - downx)/wwidth, - fy = -((float)(y - downy)/wheight), - r1, g1, b1, r2, g2, b2; - - switch(Color) { /* four different ways to pick colors */ - case SC1: /* just kind of random formulas... */ - r1 = fy+1; g1 = 0; b1 = (float)x/wwidth; - r2 = 0; g2 = fy+1; b2 = 1-(float)x/wwidth; - break; - case SC2: - r1 = fx+fy+1; g1 = 0; b1 = 0; - r2 = 0; g2 = fx+fy+1; b2 = 0; - break; - case SC3: - r1 = 0; g1 = (float)downx/wwidth; b1 = (float)x/wwidth; - r2 = 0; g2 = (float)y/wheight; b2 = (float)downy/wheight; - break; - case SC4: - r1 = drand48(); g1 = drand48(); b1 = (float)downx/(wwidth*1.5); - r2 = drand48(); g2 = (float)downy/(wheight*1.5); b2 = drand48(); - break; - } - - - glBegin(GL_LINES); - glColor4f(r1, g1, b1, Alpha); - switch(downbtn) { - case GLUT_LEFT_BUTTON: glVertex2f(0,0); break; - case GLUT_MIDDLE_BUTTON: glVertex2f(-fx,-fy); break; - } - glColor4f(r2, g2, b2, Alpha); glVertex2f(fx,fy); - glEnd(); - - glFlush(); -} - -void mousebutton(int btn, int state, int x, int y) -{ - GLfloat fx = (float)x/wwidth - 0.5, - fy = -(float)y/wheight + 0.5; - - if (state == GLUT_DOWN && downbtn == -1) { - glNewList(DispLists++, GL_COMPILE_AND_EXECUTE); - glPushMatrix(); - glTranslatef(fx, fy, 0); - downbtn = btn; - downx = x; - downy = y; - drawline(x, y); - } else if (state == GLUT_UP && btn == downbtn) { - glPopMatrix(); - glEndList(); - downbtn = -1; - } -} - -/* - * For some reason I felt like doing these check boxes -- it is kind of - * lame the way I did it, though. Probably a smarter and easier way. - */ - -void handlealphamenu(int value) -{ - glutChangeToMenuEntry(1,"[ ] 0.05", MENU_ALPHA_1); - glutChangeToMenuEntry(2,"[ ] 0.20", MENU_ALPHA_2); - glutChangeToMenuEntry(3,"[ ] 0.50", MENU_ALPHA_3); - glutChangeToMenuEntry(4,"[ ] 1.00", MENU_ALPHA_4); - switch (value) { - case MENU_ALPHA_1: - glutChangeToMenuEntry(1, "[ * ] 0.05", MENU_ALPHA_1); - Alpha = 0.05; break; - case MENU_ALPHA_2: - glutChangeToMenuEntry(2, "[ * ] 0.20", MENU_ALPHA_2); - Alpha = 0.2; break; - case MENU_ALPHA_3: - glutChangeToMenuEntry(3, "[ * ] 0.50", MENU_ALPHA_3); - Alpha = 0.5; break; - case MENU_ALPHA_4: - glutChangeToMenuEntry(4, "[ * ] 1.00", MENU_ALPHA_4); - Alpha = 1.0; break; - } -} - -void handlecolormenu(int value) -{ - glutChangeToMenuEntry(1,"[ ] Various", MENU_COLOR_1); - glutChangeToMenuEntry(2,"[ ] Red/Green ", MENU_COLOR_2); - glutChangeToMenuEntry(3,"[ ] Blue/Green", MENU_COLOR_3); - glutChangeToMenuEntry(4,"[ ] Random", MENU_COLOR_4); - switch (value) { - case MENU_COLOR_1: - glutChangeToMenuEntry(1, "[ * ] Various", MENU_COLOR_1); - Color = SC1; break; - case MENU_COLOR_2: - glutChangeToMenuEntry(2, "[ * ] Red/Green", MENU_COLOR_2); - Color = SC2; break; - case MENU_COLOR_3: - glutChangeToMenuEntry(3, "[ * ] Blue/Green", MENU_COLOR_3); - Color = SC3; break; - case MENU_COLOR_4: - glutChangeToMenuEntry(4, "[ * ] Random", MENU_COLOR_4); - Color = SC4; break; - } -} - -void handlemenu(int value) -{ - switch (value) { - case MENU_ANTI_OFF: - glDisable(GL_LINE_SMOOTH); - glutChangeToMenuEntry(3, "anti-aliasing [NO]", MENU_ANTI_ON); - break; - case MENU_ANTI_ON: - glEnable(GL_LINE_SMOOTH); - glutChangeToMenuEntry(3, "anti-aliasing [YES]", MENU_ANTI_OFF); - break; - case MENU_REDRAW: - glutPostRedisplay(); - break; - case MENU_ERASE: - glDeleteLists(0, DispLists); - DispLists = 1; - mydisplay(); - break; - case MENU_QUIT: - exit(0); - break; - } -} - -void myMenuInit(void) -{ - int sub1,sub2,sub3; - - sub3 = glutCreateMenu(handlealphamenu); - glutAddMenuEntry("[ ] 0.05", MENU_ALPHA_1); - glutAddMenuEntry("[ * ] 0.20", MENU_ALPHA_2); - glutAddMenuEntry("[ ] 0.50", MENU_ALPHA_3); - glutAddMenuEntry("[ ] 1.00", MENU_ALPHA_4); - sub2 = glutCreateMenu(handlecolormenu); - glutAddMenuEntry("[ * ] Various", MENU_COLOR_1); - glutAddMenuEntry("[ ] Red/Green", MENU_COLOR_2); - glutAddMenuEntry("[ ] Blue/Green", MENU_COLOR_3); - glutAddMenuEntry("[ ] Random", MENU_COLOR_4); - sub1 = glutCreateMenu(handlemenu); - glutAddSubMenu("Colors", sub2); - glutAddSubMenu("Alpha", sub3); - glutAddMenuEntry("anti-aliasing [NO]", MENU_ANTI_ON); - glutCreateMenu(handlemenu); - glutAddSubMenu("Lines", sub1); - glutAddMenuEntry("Erase", MENU_ERASE); - glutAddMenuEntry("Redraw", MENU_REDRAW); - glutAddMenuEntry("Quit", MENU_QUIT); - glutAttachMenu(GLUT_RIGHT_BUTTON); -} - -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitWindowSize(512, 512); - glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); - glutCreateWindow("lineblend"); - - myglInit(); - myMenuInit(); - - glutReshapeFunc(myreshape); - glutMouseFunc(mousebutton); - glutMotionFunc(drawline); - glutDisplayFunc(mydisplay); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} - diff --git a/lib/glut-3.7.6/progs/contrib/lineblend.dsp b/lib/glut-3.7.6/progs/contrib/lineblend.dsp deleted file mode 100644 index ad2725848..000000000 --- a/lib/glut-3.7.6/progs/contrib/lineblend.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="lineblend" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=lineblend - 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 "lineblend.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 "lineblend.mak" CFG="lineblend - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "lineblend - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "lineblend - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "lineblend - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "lineblend - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "lineblend - Win32 Release" -# Name "lineblend - Win32 Debug" -# Begin Source File - -SOURCE=.\lineblend.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/contrib/moth.c b/lib/glut-3.7.6/progs/contrib/moth.c deleted file mode 100644 index 2ba2affaa..000000000 --- a/lib/glut-3.7.6/progs/contrib/moth.c +++ /dev/null @@ -1,1372 +0,0 @@ -/* - "moth" by Robert Doyle, Naval Research Laboratory, Washington, DC. - Scene objects are built into display lists in the 'myInit' function - (look for three rows of I's). Objects are assembled and motion - described in the 'display' function (look for three rows of $'s). -*/ -#include -#include -#include -#include -#include - -GLfloat wall_color[] = {1.0, 1.0, 1.0, 1.0}; -GLfloat wall_ambient[] = {0.5, 0.5, 0.5, 1.0}; -GLfloat floor_color[] = {0.5, 1.0, 0.5, 0.5}; -GLfloat column_color[] = {1.0, 0.0, 0.0, 1.0}; -GLfloat column_ambient[] = {0.25, 0.0, 0.0, 1.0}; - -GLfloat panel_color[] = {0.1, 0.1, 1.0, 1.0}; -GLfloat panel_ambient[] = {0.01, 0.01, 0.3, 1.0}; - -GLfloat lamp_ambient[] = {1.0, 1.0, 1.0, 1.0}; -GLfloat lamp_diffuse[] = {1.0, 1.0, 1.0, 1.0}; -GLfloat lamp_specular[] = {1.0, 1.0, 1.0, 1.0}; -GLfloat lamp_post_diffuse[] = {0.8, 0.0, 0.0, 1.0}; -GLfloat lamp_post_specular[] = {0.8, 0.0, 0.0, 1.0}; -GLfloat lamp_post_ambient[] = {0.25, 0.0, 0.0, 1.0}; - -GLfloat satellite_diffuse[] = {1.0, 0.69, 0.0, 1.0}; -GLfloat satellite_shiny[] = {128.0}; -GLfloat satellite_specular[] = {1.0, 1.0, 1.0, 1.0}; -GLfloat satellite_ambient[] = {0.37, 0.25, 0.0, 1.0}; - -GLfloat cube_color[] = {1.0, 1.0, 0.0, 1.0}; -GLfloat cube_shiny[] = {99.0}; -GLfloat cube_specular[] = {0.9, 0.9, 0.9, 1.0}; -GLfloat cube_ambient[] = {0.1, 0.1, 0.1, 1.0}; - -GLfloat shadow_ambient[] = {0.0, 0.0, 0.0, 1.0}; -GLfloat shadow_diffuse[] = {0.0, 0.0, 0.0, 0.3}; -GLfloat shadow_shiny[] = {0.0}; -GLfloat shadow_specular[] = {0.0, 0.0, 0.0, 1.0}; - -GLuint column = 3; -GLuint ground_shadow_matrix = 16; -GLuint left_wall_shadow_matrix = 17; -GLuint ground = 30; -GLuint left_wall = 40; -GLuint right_wall = 50; -GLuint four_columns = 7; -GLuint two_columns = 32; -GLuint satellite1 = 301; -GLuint satellite2 = 302; -GLuint panel1 = 303; -GLuint panel2 = 304; - -static GLfloat Tx = -0.01; -static GLfloat Ty = -0.01; -static GLfloat Tz = -0.02; -#if 0 -static GLfloat mvt_zi = -0.7; -#endif -#if 0 -static GLfloat mvt_x = 0.0; -static GLfloat mvt_y = 0.0; -static GLfloat mvt_z = -0.7; -#endif - -static GLfloat mvt_x = -15.0; -static GLfloat mvt_y = -15.0; -static GLfloat mvt_z = -30.7; - -/*static GLfloat Rx = 0.1; -static GLfloat mvr_d = 0.0; -static GLfloat mvr_x = 1.0; -static GLfloat mvr_y = -1.0; -static GLfloat mvr_z = -1.0;*/ - -static GLfloat Rx = 0.1; -static GLfloat mvr_d = 150.0; -static GLfloat mvr_x = 1.0; -static GLfloat mvr_y = -1.0; -static GLfloat mvr_z = -1.0; - -GLfloat cubeXform[4][4]; -GLfloat column1Xform[4][4]; -GLfloat column2Xform[4][4]; -GLfloat column3Xform[4][4]; -GLfloat four_columnsXform[4][4]; - -/*static GLint nest[1];*/ -static float shadowMat_ground[4][4]; -static float shadowMat_left[4][4]; -static float shadowMat_back[4][4]; -static float shadowMat_column[4][4]; -static float shadowMat_right[4][4]; - -static float shadowMat1_ground[4][4]; -static float shadowMat1_left[4][4]; -static float shadowMat1_back[4][4]; -static float shadowMat1_right[4][4]; - -static int useDB = 1; - -static int tick = -1; -static int moving = 1; - -#if 0 -static float lmodel_ambient[4] = {0.2, 0.2, 0.2, 1.0}; -#endif -static float lightPos[4] = {1.0, 2.5, 3.0, 1.0}; -#if 0 -static float lightDir[4] = {-2.0, -4.0, -2.0, 1.0}; -static float lightAmb[4] = {0.2, 0.2, 0.2, 1.0}; -static float lightDiff[4] = {0.3, 0.3, 0.3, 1.0}; -static float lightSpec[4] = {0.4, 0.4, 0.4, 1.0}; -#endif - -static float light1Pos[4] = {0.0, 1.6, -5.0, 1.0}; -static float light1Amb[4] = {1.0, 1.0, 1.0, 1.0}; -static float light1Diff[4] = {1.0, 1.0, 1.0, 1.0}; -static float light1Spec[4] = {1.0, 1.0, 1.0, 1.0}; - -static float leftPlane[4] = {1.0, 0.0, 0.0, 4.88}; /* X = -4.88 */ -static float rightPlane[4] = {-1.0, 0.0, 0.0, 4.88}; /* X = 4.98 */ -static float groundPlane[4] = {0.0, 1.0, 0.0, 1.450}; /* Y = -1.480 */ -static float columnPlane[4] = {0.0, 0.0, 1.0, 0.899}; /* Z = -0.899 */ -static float backPlane[4] = {0.0, 0.0, 1.0, 8.98}; /* Z = -8.98 */ - -#define S 0.7071 -#define NS 0.382683 -#define NC 0.923880 - -/* satellite body. */ -static float oct_vertices[8][3][4] = -{ - { - {0.0, 0.0, 0.0, 1.0}, - {0.0, 1.0, 0.0, 1.0}, - {-S, S, 0.0, 1.0}}, - - { - {0.0, 0.0, 0.0, 1.0}, - {-S, S, 0.0, 1.0}, - {-1.0, 0.0, 0.0, 1.0}}, - - { - {0.0, 0.0, 0.0, 1.0}, - {-1.0, 0.0, 0.0, 1.0}, - {-S, -S, 0.0, 1.0}}, - - { - {0.0, 0.0, 0.0, 1.0}, - {-S, -S, 0.0, 1.0}, - {0.0, -1.0, 0.0, 1.0}}, - - { - {0.0, 0.0, 0.0, 1.0}, - {0.0, -1.0, 0.0, 1.0}, - {S, -S, 0.0, 1.0}}, - - { - - {0.0, 0.0, 0.0, 1.0}, - {S, -S, 0.0, 1.0}, - {1.0, 0.0, 0.0, 1.0}}, - - { - {0.0, 0.0, 0.0, 1.0}, - {1.0, 0.0, 0.0, 1.0}, - {S, S, 0.0, 1.0}}, - - { - {0.0, 0.0, 0.0, 1.0}, - {S, S, 0.0, 1.0}, - {0.0, 1.0, 0.0, 1.0}} - -}; - -static float oct_side_vertices[8][4][4] = -{ - { - {-S, S, 0.0, 1.0}, - {0.0, 1.0, 0.0, 1.0}, - {0.0, 1.0, -1.0, 1.0}, - {-S, S, -1.0, 1.0}}, - - { - {-1.0, 0.0, 0.0, 1.0}, - {-S, S, 0.0, 1.0}, - {-S, S, -1.0, 1.0}, - {-1.0, 0.0, -1.0, 1.0}}, - - { - {-S, -S, 0.0, 1.0}, - {-1.0, 0.0, 0.0, 1.0}, - {-1.0, 0.0, -1.0, 1.0}, - {-S, -S, -1.0, 1.0}}, - - { - {0.0, -1.0, 0.0, 1.0}, - {-S, -S, 0.0, 1.0}, - {-S, -S, -1.0, 1.0}, - {0.0, -1.0, -1.0, 1.0}}, - - { - {S, -S, 0.0, 1.0}, - {0.0, -1.0, 0.0, 1.0}, - {0.0, -1.0, -1.0, 1.0}, - {S, -S, -1.0, 1.0}}, - - { - {1.0, 0.0, 0.0, 1.0}, - {S, -S, 0.0, 1.0}, - {S, -S, -1.0, 1.0}, - {1.0, 0.0, -1.0, 1.0}}, - - { - {S, S, 0.0, 1.0}, - {1.0, 0.0, 0.0, 1.0}, - {1.0, 0.0, -1.0, 1.0}, - {S, S, -1.0, 1.0}}, - - { - {0.0, 1.0, 0.0, 1.0}, - {S, S, 0.0, 1.0}, - {S, S, -1.0, 1.0}, - {0.0, 1.0, -1.0, 1.0}} - -}; - -static float oct_side_normals[8][3] = -{ - {-NS, NC, 0.0}, - {-NC, NS, 0.0}, - {-NC, -NS, 0.0}, - {-NS, -NC, 0.0}, - {NS, -NC, 0.0}, - {NC, -NS, 0.0}, - {NC, NS, 0.0}, - {NS, NC, 0.0} - -}; - -static float cube_vertexes[6][4][4] = -{ - { - {-1.0, -1.0, -1.0, 1.0}, - {-1.0, -1.0, 1.0, 1.0}, - {-1.0, 1.0, 1.0, 1.0}, - {-1.0, 1.0, -1.0, 1.0}}, - - { - {1.0, 1.0, 1.0, 1.0}, - {1.0, -1.0, 1.0, 1.0}, - {1.0, -1.0, -1.0, 1.0}, - {1.0, 1.0, -1.0, 1.0}}, - - { - {-1.0, -1.0, -1.0, 1.0}, - {1.0, -1.0, -1.0, 1.0}, - {1.0, -1.0, 1.0, 1.0}, - {-1.0, -1.0, 1.0, 1.0}}, - - { - {1.0, 1.0, 1.0, 1.0}, - {1.0, 1.0, -1.0, 1.0}, - {-1.0, 1.0, -1.0, 1.0}, - {-1.0, 1.0, 1.0, 1.0}}, - - { - {-1.0, -1.0, -1.0, 1.0}, - {-1.0, 1.0, -1.0, 1.0}, - {1.0, 1.0, -1.0, 1.0}, - {1.0, -1.0, -1.0, 1.0}}, - - { - {1.0, 1.0, 1.0, 1.0}, - {-1.0, 1.0, 1.0, 1.0}, - {-1.0, -1.0, 1.0, 1.0}, - {1.0, -1.0, 1.0, 1.0}} -}; - -static float cube_normals[6][4] = -{ - {-1.0, 0.0, 0.0, 0.0}, - {1.0, 0.0, 0.0, 0.0}, - {0.0, -1.0, 0.0, 0.0}, - {0.0, 1.0, 0.0, 0.0}, - {0.0, 0.0, -1.0, 0.0}, - {0.0, 0.0, 1.0, 0.0} -}; - -static void usage(void) -{ - printf("\n"); - printf("usage: moth\n"); - printf("\n"); - printf(" Open_gl demo.\n"); - printf("\n"); - printf(" Options:\n"); - printf(" Press the right mouse button for very limited options.\n"); - printf("\n"); -#ifndef EXIT_FAILURE /* should be defined by ANSI C */ -#define EXIT_FAILURE 1 -#endif - exit(EXIT_FAILURE); -} - -/*!!!!!!!!!!!!!!!!!!!!!! ERRORS? !!!!!!!!!!!!!!!!!!!!*/ - -static void checkErrors(void) -{ - GLenum error; - while ((error = glGetError()) != GL_NO_ERROR) { - fprintf(stderr, "Error: %s\n", (char *) gluErrorString(error)); - } -} - -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ - -/*%%%%%%%%%%%%%%%%%%%% DRAW CUBE %%%%%%%%%%%%%%%%%%*/ - -static void -drawCube(GLfloat color[4], GLfloat ambient[4]) -{ - int i; - - glMaterialfv(GL_FRONT, GL_DIFFUSE, color); - glMaterialfv(GL_FRONT, GL_AMBIENT, ambient); - - for (i = 0; i < 6; ++i) { - glNormal3fv(&cube_normals[i][0]); - glBegin(GL_POLYGON); - glVertex4fv(&cube_vertexes[i][0][0]); - glVertex4fv(&cube_vertexes[i][1][0]); - glVertex4fv(&cube_vertexes[i][2][0]); - glVertex4fv(&cube_vertexes[i][3][0]); - glEnd(); - } -} - -/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ - -/*OOOOOOOOOOO DRAW OCTOGON TOP OOOOOOOOOOOOO*/ - -static void drawOct(void) -{ - int i; - - for (i = 0; i < 8; ++i) { - glNormal3f(0.0, 0.0, 1.0); - glBegin(GL_TRIANGLE_FAN); - glVertex4fv(&oct_vertices[i][0][0]); - glVertex4fv(&oct_vertices[i][1][0]); - glVertex4fv(&oct_vertices[i][2][0]); - glEnd(); - } -} - -/*OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO*/ - -/*oooooooooooDRAW OCTOGON SIDES ooooooooo*/ - -static void drawOctSides(void) -{ - int i; - - for (i = 0; i < 8; ++i) { - glNormal3fv(&oct_side_normals[i][0]); - glBegin(GL_POLYGON); - glVertex4fv(&oct_side_vertices[i][0][0]); - glVertex4fv(&oct_side_vertices[i][1][0]); - glVertex4fv(&oct_side_vertices[i][2][0]); - glVertex4fv(&oct_side_vertices[i][3][0]); - glEnd(); - } -} - -/*ooooooooooooooooooooooooooooooooooooooo*/ - -/*SSSSSSSSSSSSSSSS DRAW SATELLITE BODY SSSSSSSSSSSSSSSSSSS*/ - -static void drawSatellite(GLfloat diffuse[4], GLfloat ambient[4], GLfloat specular[4], GLfloat shiny[1]) -{ - - glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuse); - glMaterialfv(GL_FRONT, GL_AMBIENT, ambient); - glMaterialfv(GL_FRONT, GL_SPECULAR, specular); - glMaterialfv(GL_FRONT, GL_SHININESS, shiny); - - - glPushMatrix(); - glScalef(0.3, 0.3, 0.9); - glPushMatrix(); - drawOctSides(); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(0.0, 0.0, 0.0); - drawOct(); - glPopMatrix(); - glPushMatrix(); - glRotatef(180, 1.0, 0.0, 0.0); - glTranslatef(0.0, 0.0, 1.0); - drawOct(); - glPopMatrix(); - glPopMatrix(); -} - -/*SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS*/ - -/*PPPPPPPPPPPPPPPP DRAW SOLAR PANELS PPPPPPPPPPPP*/ - -static void drawPanels(GLfloat color[4], GLfloat ambient[4]) -{ - - glMaterialfv(GL_FRONT, GL_DIFFUSE, color); - glMaterialfv(GL_FRONT, GL_AMBIENT, ambient); - - glPushMatrix(); - glTranslatef(0.95, 0.0, -0.45); - glRotatef(45.0, 1.0, 0.0, 0.0); - glScalef(0.65, 0.20, 0.02); - drawCube(color, ambient); - glPopMatrix(); - -/* glPushMatrix(); - glTranslatef(0.95, 0.0, -0.45); - glTranslatef((1.3/3.0), 0.1, 0.01); - glRotatef(45.0, 1.0, 0.0, 0.0); - glScalef(0.65/3.2, 0.20/2.1, 0.08); - drawCube(color, ambient); - glPopMatrix(); -*/ - glPushMatrix(); - glTranslatef(-0.95, 0.0, -0.45); - glRotatef(45.0, 1.0, 0.0, 0.0); - glScalef(0.65, 0.20, 0.02); - drawCube(color, ambient); - glPopMatrix(); - -} -/*PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP*/ - -/*################ DRAW FLOOR ################*/ - -void drawFloor(GLfloat f_color[4], GLfloat ambient[4]) -{ - - glMaterialfv(GL_FRONT, GL_DIFFUSE, f_color); - glMaterialfv(GL_FRONT, GL_AMBIENT, ambient); - -/* glNormal3f (0.0, 0.0, 1.0); */ - - glBegin (GL_QUADS); - glVertex3f (-1.0, -1.0, 0.0); - glVertex3f (1.0, -1.0, 0.0); - glVertex3f (1.0, 1.0, 0.0); - glVertex3f (-1.0, 1.0, 0.0); - glEnd(); - -} - -/*################################################*/ - -/*||||||||||||||| DRAW GROUND |||||||||||||||||*/ - -/* Ground coordinates are in drawGround() below. Subdivision */ -/* of triangles id done by subDivide(). */ - - -void subDivide(float u1[3], float u2[3], float u3[3], int depth) -{ - -GLfloat u12[3]; -GLfloat u23[3]; -GLfloat u31[3]; - -GLint i; - - if(depth == 0) { - - glBegin (GL_POLYGON); - glNormal3f (0.0, 0.0, 1.0); glVertex3fv(u1); - glNormal3f (0.0, 0.0, 1.0); glVertex3fv(u2); - glNormal3f (0.0, 0.0, 1.0); glVertex3fv(u3); - glEnd(); - return; -} - - for(i = 0; i < 3; i++){ - - u12[i] = (u1[i] + u2[i]) / 2.0; - u23[i] = (u2[i] + u3[i]) / 2.0; - u31[i] = (u3[i] + u1[i]) / 2.0; - - } - - subDivide(u1, u12, u31, depth - 1); - subDivide(u2, u23, u12, depth - 1); - subDivide(u3, u31, u23, depth - 1); - subDivide(u12, u23, u31, depth - 1); - -} - -void drawGround(void) -{ - -/* Use two subdivided triangles for the unscaled 1X1 square. */ -/* Subdivide to this depth: */ - -GLint maxdepth = 2; - -/* Coordinates of first triangle: */ - -GLfloat u1[] = {-1.0, -1.0, 0.0}; -GLfloat u2[] = {1.0, -1.0, 0.0}; -GLfloat u3[] = {1.0, 1.0, 0.0}; - -/* Coordinates of second triangle: */ - -GLfloat v1[] = {-1.0, -1.0, 0.0}; -GLfloat v2[] = {1.0, 1.0, 0.0}; -GLfloat v3[] = {-1.0, 1.0, 0.0}; - - subDivide(u1, u2, u3, maxdepth); - subDivide(v1, v2, v3, maxdepth); - -} - - -/*|||||||||||||||||||||||||||||||||||||||||||*/ - -/* Matrix for shadow. From Mark Kilgard's "scube". */ - -static void -myShadowMatrix(float ground[4], float light[4], float shadowMat[4][4]) -{ - float dot; -/* float shadowMat[4][4]; */ - - dot = ground[0] * light[0] + - ground[1] * light[1] + - ground[2] * light[2] + - ground[3] * light[3]; - - shadowMat[0][0] = dot - light[0] * ground[0]; - shadowMat[1][0] = 0.0 - light[0] * ground[1]; - shadowMat[2][0] = 0.0 - light[0] * ground[2]; - shadowMat[3][0] = 0.0 - light[0] * ground[3]; - - shadowMat[0][1] = 0.0 - light[1] * ground[0]; - shadowMat[1][1] = dot - light[1] * ground[1]; - shadowMat[2][1] = 0.0 - light[1] * ground[2]; - shadowMat[3][1] = 0.0 - light[1] * ground[3]; - - shadowMat[0][2] = 0.0 - light[2] * ground[0]; - shadowMat[1][2] = 0.0 - light[2] * ground[1]; - shadowMat[2][2] = dot - light[2] * ground[2]; - shadowMat[3][2] = 0.0 - light[2] * ground[3]; - - shadowMat[0][3] = 0.0 - light[3] * ground[0]; - shadowMat[1][3] = 0.0 - light[3] * ground[1]; - shadowMat[2][3] = 0.0 - light[3] * ground[2]; - shadowMat[3][3] = dot - light[3] * ground[3]; - -/* glMultMatrixf((const GLfloat *) shadowMat); */ -} - -void -idle(void) -{ - tick++; - if (tick >= 60) { - tick = 0; - } - glutPostRedisplay(); -} - -/* ARGSUSED1 */ -void -keyboard(unsigned char ch, int x, int y) -{ - switch (ch) { - case 27: /* escape */ - exit(0); - break; - case ' ': - if (!moving) { - idle(); - glutPostRedisplay(); - } - } -} - -/*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*/ -/*$$$$$$$$$$$$$$$$$$$$$$ DISPLAY $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*/ -/*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*/ - -void display(void) -{ - - - glPushMatrix(); /* Make sure the matrix stack is cleared at the end of this function. */ - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glLoadIdentity(); - -/*@@@@@@ Rotation and Translation of Entire Scene @@@@@*/ - - if(mvt_x < 0 && mvt_y < 0){ - glTranslatef(mvt_x ,mvt_y ,mvt_z ); - mvt_x = mvt_x - Tx; - mvt_y = mvt_y - Ty; - mvt_z = mvt_z - Tz; - - glRotatef(mvr_d, mvr_x, mvr_y, mvr_z); - mvr_d = mvr_d - Rx; - } - - else{ - glTranslatef(0.0, 0.0 ,mvt_z); - } - -/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ - -glPushMatrix(); - glLightfv(GL_LIGHT1, GL_POSITION, light1Pos); -glPopMatrix(); -/*______________________ Draw Floor _______________________*/ - -glPushMatrix(); - glCallList(ground); -glPopMatrix(); - -/*_________________________________________________________*/ - -/*@@@@@@@@@ Draw Lamp Post amd Lamp @@@@@@@@@@*/ - -glPushMatrix(); - glCallList(21); -glPopMatrix(); - -glPushMatrix(); - glCallList(22); -glPopMatrix(); - -glPushMatrix(); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glCallList(501); - glDisable(GL_BLEND); -glPopMatrix(); - -/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ - -/*||||||||||||||||||| Draw Left Wall ||||||||||||||||||*/ - - glCallList(left_wall); - -/*|||||||||||||||||||||||||||||||||||||||||||||||||||||*/ - -/*\\\\\\\\\\\\\\\\ Draw Right Wall \\\\\\\\\\\\\\*/ - - glCallList(right_wall); - -/*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ - -/*[[[[[[[[[[[[[[[[[[[ Draw Columns ]]]]]]]]]]]]]]]]]]]*/ - -/***** Place columns at front of scene. *****/ - - glCallList(four_columns); - -/***** Place columns at back of scene. *****/ - - glPushMatrix(); - glTranslatef(0.0, 0.0, -9.0); - glCallList(four_columns); - glPopMatrix(); - -/***** Place columns at centers of left and right walls. *****/ - - glCallList(two_columns); - -/*[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]*/ - - -/*....................... Draw Column Shadows ....................*/ - -/*glDepthMask(GL_FALSE); -glEnable(GL_BLEND); -glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);*/ - -/* shadows on floor */ - -/* glPushMatrix(); - glCallList(100); - glPopMatrix();*/ - -/* shdows on left wall */ - -/* glPushMatrix(); - glCallList(101); - glPopMatrix();*/ - -/* shdows on back wall */ - -/* glPushMatrix(); - glCallList(102); - glPopMatrix();*/ - -/* shdows on right wall */ - -/* glPushMatrix(); - glCallList(103); - glPopMatrix();*/ - -/*glDepthMask(GL_TRUE); -glDisable(GL_BLEND);*/ - -/*................................................................*/ - -/************************* CUBE ***********************/ - - glMaterialf(GL_FRONT, GL_SHININESS, 99.0); - glMaterialfv(GL_FRONT, GL_SPECULAR, cube_specular); - - glPushMatrix(); - glTranslatef(0.0, 0.0, -5.0); - glRotatef((360.0 / (30 * 2)) * tick, 0, 1, 0); - glPushMatrix(); - glTranslatef(0.0, 0.2, 2.0); -/* glTranslatef(0.0, 0.2, 0.0); */ -/* glScalef(0.3, 0.3, 0.3); */ - glRotatef((360.0 / (30 * 1)) * tick, 1, 0, 0); - glRotatef((360.0 / (30 * 2)) * tick, 0, 1, 0); - glRotatef((360.0 / (30 * 4)) * tick, 0, 0, 1); - - glGetFloatv(GL_MODELVIEW_MATRIX, (GLfloat *) cubeXform); - -/* drawSatellite(satellite_diffuse, satellite_ambient, satellite_specular, satellite_shiny); */ - glCallList(satellite1); - glCallList(panel1); -/* drawPanels(panel_color, panel_ambient); */ - - glPopMatrix(); - glPopMatrix(); - - glMaterialf(GL_FRONT, GL_SHININESS, 0.0); - glMaterialfv(GL_FRONT, GL_SPECULAR, shadow_specular); - -/****************************************************/ - -/*................... CUBE SHADOWS .............................*/ - -/*glDepthMask(GL_FALSE);*/ -glEnable(GL_BLEND); -glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - - glPushMatrix(); - glMultMatrixf((const GLfloat *) shadowMat1_ground); - glRotatef(-mvr_d, mvr_x, mvr_y, mvr_z); - glTranslatef(-mvt_x, -mvt_y, -mvt_z); /* correct for modelview matrix */ - glMultMatrixf((const GLfloat *) cubeXform); - - -/* drawSatellite(shadow_diffuse, shadow_ambient, shadow_specular, shadow_shiny); */ /* draw ground shadow */ - glCallList(satellite2); - glTranslatef(0.0, -.040, 0.0); - glCallList(panel2); -/* drawPanels(shadow_diffuse, shadow_ambient); */ - glPopMatrix(); - -/* Shadow left wall only if cube is in front of left wall. */ - if((tick*6) >= 220 && (tick*6) <= 320) { - - glPushMatrix(); - glMultMatrixf((const GLfloat *) shadowMat1_left); - glRotatef(-mvr_d, mvr_x, mvr_y, mvr_z); - glTranslatef(-mvt_x, -mvt_y, -mvt_z); /* correct for modelview matrix */ - glMultMatrixf((const GLfloat *) cubeXform); - drawSatellite(shadow_diffuse, shadow_ambient, shadow_specular, shadow_shiny); /* draw left shadow */ - drawPanels(shadow_diffuse, shadow_ambient); - glPopMatrix(); - - } - -/* Shadow back wall only if cube is in front of back wall. */ - if((tick*6) >= 125 && (tick*6) <= 330) { - - glPushMatrix(); - glMultMatrixf((const GLfloat *) shadowMat1_back); - glRotatef(-mvr_d, mvr_x, mvr_y, mvr_z); - glTranslatef(-mvt_x, -mvt_y, -mvt_z); /* correct for modelview matrix */ - glMultMatrixf((const GLfloat *) cubeXform); - drawSatellite(shadow_diffuse, shadow_ambient, shadow_specular, shadow_shiny); /* draw back wall shadow */ - drawPanels(shadow_diffuse, shadow_ambient); - glPopMatrix(); - - } - -/* Shadow right wall only if cube is in front of right wall. */ - if((tick*6) >= 40 && (tick*6) <= 145) { - - glPushMatrix(); - glMultMatrixf((const GLfloat *) shadowMat1_right); - glRotatef(-mvr_d, mvr_x, mvr_y, mvr_z); - glTranslatef(-mvt_x, -mvt_y, -mvt_z); /* correct for modelview matrix */ - glMultMatrixf((const GLfloat *) cubeXform); - drawSatellite(shadow_diffuse, shadow_ambient, shadow_specular, shadow_shiny); /* draw right wall shadow */ - drawPanels(shadow_diffuse, shadow_ambient); - glPopMatrix(); - - } - -/*glDepthMask(GL_TRUE);*/ -glDisable(GL_BLEND); - -/*.........................................................*/ - - glutSwapBuffers(); - - checkErrors(); - - glPopMatrix(); /* Clear the matrix stack */ - -} - -/*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ -$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*/ - -void -menu_select(int mode) -{ - switch (mode) { - case 1: - moving = 1; - glutIdleFunc(idle); - break; - case 2: - moving = 0; - glutIdleFunc(NULL); - break; - case 5: - exit(0); - break; - } -} - -void -visible(int state) -{ - if (state == GLUT_VISIBLE) { - if (moving) - glutIdleFunc(idle); - } else { - if (moving) - glutIdleFunc(NULL); - } -} - -/* IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII*/ -/* IIIIIIIIIIIIIIIIII INITIALIZE IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII*/ -/* IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII*/ - -void myInit(void) -{ - -/* glGetIntegerv(GL_MAX_CLIP_PLANES, nest); - printf("GL_MAX_CLIP_PLANES are %d \n", nest[0]); */ - -/*%%%%%%%% Initialize Positional Light and Ambient Light %%%%%%%%*/ - -#if 0 - glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); -#endif - -#if 0 - glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); - glLightfv(GL_LIGHT0, GL_POSITION, lightPos); - glLightfv(GL_LIGHT0, GL_AMBIENT, lightAmb); - glLightfv(GL_LIGHT0, GL_DIFFUSE, lightDiff); - glLightfv(GL_LIGHT0, GL_SPECULAR, lightSpec); - glEnable(GL_LIGHT0); -#endif - -/*** Initial light position is declared in the display function ***/ - - glLightfv(GL_LIGHT1, GL_AMBIENT, light1Amb); - glLightfv(GL_LIGHT1, GL_DIFFUSE, light1Diff); - glLightfv(GL_LIGHT1, GL_SPECULAR, light1Spec); - glEnable(GL_LIGHT1); - - glEnable(GL_LIGHTING); - -/* glLightf(GL_LIGHT1, GL_CONSTANT_ATTENUATION, 0.7);*/ -/* glLightf(GL_LIGHT1, GL_LINEAR_ATTENUATION, 0.04);*/ /* use 0.04 w/ 24 bit color */ - glLightf(GL_LIGHT1, GL_QUADRATIC_ATTENUATION, 0.07); /* try 0.07 w/ 24 bit color */ - - -/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ - -/*########### Initialize Fog ##################*/ - -/* -{ - GLfloat fog_color[] = {0.5, 0.5, 0.5, 1.0}; - GLfloat fog_start[] = {0.0, 0.0, 1.0, 20.0}; - - glEnable(GL_FOG); - glFogi(GL_FOG_MODE, GL_LINEAR); - glFogfv(GL_FOG_COLOR, fog_color); - glFogf(GL_FOG_DENSITY, 0.35); - glFogfv(GL_FOG_START, fog_start); - glHint(GL_FOG_HINT, GL_FASTEST); -} - -*/ - -/*##########################################*/ - -/*....Shadow Matrices For Floor, Left Wall, Back Wall, and Right Wall......*/ - - -/* For light0 */ - - myShadowMatrix(groundPlane, lightPos, shadowMat_ground); - myShadowMatrix(leftPlane, lightPos, shadowMat_left); - myShadowMatrix(columnPlane, lightPos, shadowMat_column); - myShadowMatrix(backPlane, lightPos, shadowMat_back); - myShadowMatrix(rightPlane, lightPos, shadowMat_right); - -/* For light1 */ - - myShadowMatrix(groundPlane, light1Pos, shadowMat1_ground); - myShadowMatrix(leftPlane, light1Pos, shadowMat1_left); - myShadowMatrix(backPlane, light1Pos, shadowMat1_back); - myShadowMatrix(rightPlane, light1Pos, shadowMat1_right); - -/*.......................................................................*/ - -/*sssssssssssssssss Make Satellite Body and Shadow ssssssssssssssssssssssss*/ - - glNewList(satellite1, GL_COMPILE); - glPushMatrix(); - drawSatellite(satellite_diffuse, satellite_ambient, satellite_specular, satellite_shiny); - glPopMatrix(); - glEndList(); - glNewList(satellite2, GL_COMPILE); - glPushMatrix(); - drawSatellite(shadow_diffuse, shadow_ambient, shadow_specular, shadow_shiny); - glPopMatrix(); - glEndList(); - -/*sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss*/ - -/*ppppppppppppppppppppppppppp Make Solar Panels and Shadows pppppppppppppppppp*/ - - glNewList(panel1, GL_COMPILE); - glPushMatrix(); - drawPanels(panel_color, panel_ambient); - glPopMatrix(); - glEndList(); - - glNewList(panel2, GL_COMPILE); - glPushMatrix(); - drawPanels(shadow_diffuse, shadow_ambient); - glPopMatrix(); - glEndList(); - - -/*pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp*/ - -/*========= Make Floor ==============*/ - - glNewList(ground, GL_COMPILE); - glPushMatrix(); - glPushAttrib(GL_LIGHTING_BIT); - glMaterialfv(GL_FRONT, GL_DIFFUSE, floor_color); - glMaterialfv(GL_FRONT, GL_AMBIENT, shadow_ambient); - glTranslatef(0.0, -1.5, -5.0); - glRotatef(-90.0, 1, 0, 0); - glScalef(5.0, 5.0, 1.0); - drawGround(); /* draw ground */ - glPopAttrib(); - glPopMatrix(); - glEndList(); - -/*==================================*/ - -/*@@@@@@@@@@ Make Lamp Post and Lamp @@@@@@@@@@@@*/ - - glNewList(21, GL_COMPILE); - glPushMatrix(); - glPushAttrib(GL_LIGHTING_BIT); - glMaterialfv(GL_FRONT, GL_AMBIENT, lamp_post_specular); - glTranslatef(0.0, -0.1, -5.0); - glScalef(0.07, 1.45, 0.07); - drawCube(lamp_post_diffuse, lamp_post_ambient); /* draw lamp post */ - glPopAttrib(); - glPopMatrix(); - glPushMatrix(); - glTranslatef(0.0, -1.45, -5.0); - glScalef(0.3, 0.05, 0.3); - drawCube(wall_color, cube_ambient); /* draw lamp post base */ - glPopMatrix(); - glEndList(); - - glNewList(22, GL_COMPILE); - glPushMatrix(); - glPushAttrib(GL_LIGHTING_BIT); - glMaterialfv(GL_FRONT, GL_AMBIENT, lamp_ambient); - glMaterialfv(GL_FRONT, GL_DIFFUSE, lamp_diffuse); - glMaterialfv(GL_FRONT, GL_SPECULAR, lamp_specular); - glTranslatef(0.0, 1.6, -5.0); - glutSolidSphere(0.3, 20.0, 20.0); /* draw lamp */ - glPopAttrib(); - glPopMatrix(); - glEndList(); - -/*** Lamp post base shadow ***/ - - glNewList(501, GL_COMPILE); - glPushMatrix(); - glPushAttrib(GL_LIGHTING_BIT); - glMaterialfv(GL_FRONT, GL_AMBIENT, shadow_ambient); - glMaterialfv(GL_FRONT, GL_DIFFUSE, shadow_diffuse); - glMaterialfv(GL_FRONT, GL_SPECULAR, shadow_specular); - glMaterialfv(GL_FRONT, GL_SHININESS, shadow_shiny); - glTranslatef(0.0, -1.49, -5.0); - glRotatef(-90.0, 1.0, 0.0, 0.0); - glScalef(0.7, 0.7, 1.0); - drawOct(); - glPopAttrib(); - glPopMatrix(); - glEndList(); - - - - - -/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ - -/*||||||||||| Make Left Wall |||||||||||||*/ - - glNewList(left_wall, GL_COMPILE); - glPushMatrix(); - glPushAttrib(GL_LIGHTING_BIT); - glMaterialfv(GL_FRONT, GL_DIFFUSE, wall_color); - glMaterialfv(GL_FRONT, GL_AMBIENT, wall_ambient); - glTranslatef(0.0, -1.5, 0.0); - glTranslatef(0.0, 1.2, 0.0); - glTranslatef(0.0, 0.0, -5.0); - glTranslatef(-5.0, 0.0, 0.0); - glRotatef(90.0, 0, 1, 0); - glScalef(4.5, 1.2, 1.0); - glNormal3f (0.0, 0.0, 1.0); - drawGround(); /* draw left wall */ - glPopAttrib(); - glPopMatrix(); - glEndList(); - -/*||||||||||||||||||||||||||||||||||||||||*/ - -/*\\\\\\\\\\\\\ Make Right Wall \\\\\\\\\\\\\\\\\\\*/ - - glNewList(right_wall, GL_COMPILE); - glPushMatrix(); - glPushAttrib(GL_LIGHTING_BIT); - glMaterialfv(GL_FRONT, GL_DIFFUSE, wall_color); - glMaterialfv(GL_FRONT, GL_AMBIENT, wall_ambient); - glTranslatef(0.0, -1.5, 0.0); - glTranslatef(0.0, 1.2, 0.0); - - glTranslatef(0.0, 0.0, -5.0); - glTranslatef(5.0, 0.0, 0.0); - glRotatef(270.0, 0, 1, 0); - - glScalef(4.5, 1.2, 1.0); - glNormal3f (0.0, 0.0, 1.0); - drawGround(); /* draw right wall */ - glPopAttrib(); - glPopMatrix(); - glEndList(); - -/*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ - -/*[[[[[[[[[[[ Build Columns ]]]]]]]]]]]*/ - -glPushMatrix(); - glNewList(1, GL_COMPILE); - glPushMatrix(); - glScalef(0.4, 1.4, 0.4); - drawCube(column_color, column_ambient); /* draw column1 */ - glPopMatrix(); - glEndList(); - - glNewList(2, GL_COMPILE); - glPushMatrix(); - glTranslatef(0.0, -1.45, 0.0); - glScalef(0.5, 0.1, 0.5); - drawCube(wall_color, cube_ambient); /* draw base */ - glPopMatrix(); - glPushMatrix(); - glTranslatef(0.0, 1.45, 0.0); - glScalef(0.5, 0.1, 0.5); - drawCube(wall_color, cube_ambient); /* draw top */ - glPopMatrix(); - glEndList(); -glPopMatrix(); - - glNewList(column, GL_COMPILE); - glPushMatrix(); - glCallList(1); - glCallList(2); - glPopMatrix(); - glEndList(); - -/***** Place columns at front of scene. *****/ - -glNewList(4, GL_COMPILE); - glPushMatrix(); - glTranslatef(-5.0, 0.0, -0.5); - glCallList(column); - glPopMatrix(); -glEndList(); - -glNewList(5, GL_COMPILE); - glPushMatrix(); - glTranslatef(-1.75, 0.0, -0.5); - glCallList(column); - glPopMatrix(); -glEndList(); - -glNewList(6, GL_COMPILE); - glPushMatrix(); - glTranslatef(1.75, 0.0, -0.5); - glCallList(column); - glPopMatrix(); -glEndList(); - -glNewList(17, GL_COMPILE); - glPushMatrix(); - glTranslatef(5.0, 0.0, -0.5); - glCallList(column); - glPopMatrix(); -glEndList(); - - -/*** Get the modelview matrix once ***/ - glPushMatrix(); - glRotatef(-mvr_d, mvr_x, mvr_y, mvr_z); - glTranslatef(-mvt_x, -mvt_y, -mvt_z); - glGetFloatv(GL_MODELVIEW_MATRIX, (GLfloat *) four_columnsXform); - glPopMatrix(); - -glNewList(four_columns, GL_COMPILE); - glPushMatrix(); - glCallList(4); - glCallList(5); - glCallList(6); - glCallList(17); - glPopMatrix(); -glEndList(); - -/***** Make two columns for sides of scene *****/ - -glNewList(two_columns, GL_COMPILE); - glPushMatrix(); - glRotatef(90.0, 0.0, 1.0, 0.0); - glTranslatef(5.0, 0.0, -5.0); - glPushMatrix(); - glTranslatef(0.0, 0.0, -0.3); - glCallList(column); - glPopMatrix(); - glPushMatrix(); - glTranslatef(0.0, 0.0, 10.3); - glCallList(column); - glPopMatrix(); - glPopMatrix(); -glEndList(); - - - - -/*[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]*/ - - -/* .......................Make shadows .........................*/ - - glPushMatrix(); - glNewList(8, GL_COMPILE); - glPushMatrix(); - glScalef(0.4, 1.4, 0.4); - drawCube(shadow_diffuse, shadow_ambient); /* draw column1 */ - glPopMatrix(); - glEndList(); - - - glNewList(9, GL_COMPILE); - glPushMatrix(); - glTranslatef(0.0, -1.45, 0.0); - glScalef(0.5, 0.1, 0.5); - drawCube(shadow_diffuse, shadow_ambient); /* draw base. */ - glPopMatrix(); - glPushMatrix(); - glTranslatef(0.0, 1.45, 0.0); - glScalef(0.5, 0.1, 0.5); - drawCube(shadow_diffuse, shadow_ambient); /* draw top. */ - glPopMatrix(); - glEndList(); - glPopMatrix(); - - glNewList(10, GL_COMPILE); - glPushMatrix(); - glCallList(8); - glCallList(9); - glPopMatrix(); - glEndList(); - -glNewList(11, GL_COMPILE); - glPushMatrix(); - glTranslatef(-5.0, 0.0, -0.5); - glCallList(10); - glPopMatrix(); -glEndList(); - -glNewList(12, GL_COMPILE); - glPushMatrix(); - glTranslatef(-1.75, 0.0, -0.5); - glCallList(10); - glPopMatrix(); -glEndList(); - -glNewList(13, GL_COMPILE); - glPushMatrix(); - glTranslatef(1.75, 0.0, -0.5 ); - glCallList(10); - glPopMatrix(); -glEndList(); - -glNewList(14, GL_COMPILE); - glPushMatrix(); - glTranslatef(5.0, 0.0, -0.5 ); - glCallList(10); - glPopMatrix(); -glEndList(); - -glNewList(15, GL_COMPILE); - glPushMatrix(); - glCallList(11); - glCallList(12); - glCallList(13); - glCallList(14); - glPopMatrix(); -glEndList(); - -glNewList(100, GL_COMPILE); - glPushMatrix(); - glMultMatrixf((const GLfloat *) shadowMat_ground); - glTranslatef(-mvt_x, -mvt_y, -mvt_z); /* correct for modelview matrix */ - glRotatef(-mvr_d, mvr_x, mvr_y, mvr_z); - glMultMatrixf((const GLfloat *) four_columnsXform); - glCallList(15); - glPopMatrix(); -glEndList(); - -glNewList(101, GL_COMPILE); - glPushMatrix(); - glMultMatrixf((const GLfloat *) shadowMat_left); - glTranslatef(-mvt_x, -mvt_y, -mvt_z); /* correct for modelview matrix */ - glRotatef(-mvr_d, mvr_x, mvr_y, mvr_z); - glMultMatrixf((const GLfloat *) four_columnsXform); - glCallList(15); - glPopMatrix(); -glEndList(); - -glNewList(102, GL_COMPILE); - glPushMatrix(); - glMultMatrixf((const GLfloat *) shadowMat_back); - glRotatef(-mvr_d, mvr_x, mvr_y, mvr_z); - glTranslatef(-mvt_x, -mvt_y, -mvt_z); /* correct for modelview matrix */ - glMultMatrixf((const GLfloat *) four_columnsXform); - glCallList(15); - glPopMatrix(); -glEndList(); - -glNewList(103, GL_COMPILE); - glPushMatrix(); - glMultMatrixf((const GLfloat *) shadowMat_right); - glRotatef(-mvr_d, mvr_x, mvr_y, mvr_z); - glTranslatef(-mvt_x, -mvt_y, -mvt_z); /* correct for modelview matrix */ - glMultMatrixf((const GLfloat *) four_columnsXform); - glCallList(15); - glPopMatrix(); -glEndList(); - - -/* ......................................................*/ - -} - -/* IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII*/ - - -/* ////////////////////////////////////////////////////////////// */ -/* //////////////////////\ MAIN ///////////////////////////////// */ -/* ////////////////////////////////////////////////////////////// */ - -int main(int argc, char **argv) -{ - int width = 320, height = 240; - int i; - - char *name; - glutInitWindowSize(width, height); - glutInit(&argc, argv); - - /* process commmand line args */ - for (i = 1; i < argc; ++i) { - if (!strcmp("-db", argv[i])) { - useDB = !useDB; - } else { - usage(); - } - } - -/* choose visual */ - - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); - name = "MOTH - by Bob Doyle"; - glutCreateWindow(name); - - glutKeyboardFunc(keyboard); - - myInit(); /* initialize objects in scene */ - glutDisplayFunc(display); - glutVisibilityFunc(visible); - - - glutCreateMenu(menu_select); - glutAddMenuEntry("Start motion", 1); - glutAddMenuEntry("Stop motion", 2); - glutAddMenuEntry("Quit", 5); - glutAddMenuEntry("Drink Ed's beer", 5); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - - glFrustum(-.9, .9, -.9, .9, 1.0, 35.0); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -#if 0 - glTranslatef(0.0, 0.0, mvt_zi); -#endif - - glEnable(GL_NORMALIZE); - glEnable(GL_CULL_FACE); - glCullFace(GL_BACK); /* double your fun */ - glShadeModel(GL_SMOOTH); - glDepthFunc(GL_LESS); - glDepthMask(GL_TRUE); - glEnable(GL_DEPTH_TEST); - myInit(); /* initialize objects in scene */ - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/contrib/moth.dsp b/lib/glut-3.7.6/progs/contrib/moth.dsp deleted file mode 100644 index 4c01451ef..000000000 --- a/lib/glut-3.7.6/progs/contrib/moth.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="moth" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=moth - 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 "moth.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 "moth.mak" CFG="moth - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "moth - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "moth - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "moth - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "moth - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "moth - Win32 Release" -# Name "moth - Win32 Debug" -# Begin Source File - -SOURCE=.\moth.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/contrib/noof.c b/lib/glut-3.7.6/progs/contrib/noof.c deleted file mode 100644 index d8835f80c..000000000 --- a/lib/glut-3.7.6/progs/contrib/noof.c +++ /dev/null @@ -1,475 +0,0 @@ - -/* XXX Very crufty code follows. */ - -#include -#include - -#include -#ifndef _WIN32 -#include -#else -#define random rand -#define srandom srand -#include -#endif -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif -#include -#include - -/* For portability... */ -#undef fcos -#undef fsin -#define fcos cos -#define fsin sin - -/* --- shape parameters def'n --- */ -#define N_SHAPES 7 -float pos[N_SHAPES * 3]; -float dir[N_SHAPES * 3]; -float acc[N_SHAPES * 3]; -float col[N_SHAPES * 3]; -float hsv[N_SHAPES * 3]; -float hpr[N_SHAPES * 3]; -float ang[N_SHAPES]; -float spn[N_SHAPES]; -float sca[N_SHAPES]; -float geep[N_SHAPES]; -float peep[N_SHAPES]; -float speedsq[N_SHAPES]; -int blad[N_SHAPES]; - -float ht, wd; - -void -initshapes(int i) -{ - int k; - float f; - - /* random init of pos, dir, color */ - for (k = i * 3; k <= i * 3 + 2; k++) { - f = random() / (float)RAND_MAX; - pos[k] = f; - f = random() / (float)RAND_MAX; - f = (f - 0.5) * 0.05; - dir[k] = f; - f = random() / (float)RAND_MAX; - f = (f - 0.5) * 0.0002; - acc[k] = f; - f = random() / (float)RAND_MAX; - col[k] = f; - } - - speedsq[i] = dir[i * 3] * dir[i * 3] + dir[i * 3 + 1] * dir[i * 3 + 1]; - f = random() / (float)RAND_MAX; - blad[i] = 2 + (int) (f * 17.0); - f = random() / (float)RAND_MAX; - ang[i] = f; - f = random() / (float)RAND_MAX; - spn[i] = (f - 0.5) * 40.0 / (10 + blad[i]); - f = random() / (float)RAND_MAX; - sca[i] = (f * 0.1 + 0.08); - dir[i * 3] *= sca[i]; - dir[i * 3 + 1] *= sca[i]; - - f = random() / (float)RAND_MAX; - hsv[i * 3] = f * 360.0; - - f = random() / (float)RAND_MAX; - hsv[i * 3 + 1] = f * 0.6 + 0.4; - - f = random() / (float)RAND_MAX; - hsv[i * 3 + 2] = f * 0.7 + 0.3; - - f = random() / (float)RAND_MAX; - hpr[i * 3] = f * 0.005 * 360.0; - f = random() / (float)RAND_MAX; - hpr[i * 3 + 1] = f * 0.03; - f = random() / (float)RAND_MAX; - hpr[i * 3 + 2] = f * 0.02; - - geep[i] = 0; - f = random() / (float)RAND_MAX; - peep[i] = 0.01 + f * 0.2; -} - -int tko = 0; - -float bladeratio[] = -{ - /* nblades = 2..7 */ - 0.0, 0.0, 3.00000, 1.73205, 1.00000, 0.72654, 0.57735, 0.48157, - /* 8..13 */ - 0.41421, 0.36397, 0.19076, 0.29363, 0.26795, 0.24648, - /* 14..19 */ - 0.22824, 0.21256, 0.19891, 0.18693, 0.17633, 0.16687, -}; - -void -drawleaf(int l) -{ - - int b, blades; - float x, y; - float wobble; - - blades = blad[l]; - - y = 0.10 * fsin(geep[l] * M_PI / 180.0) + 0.099 * fsin(geep[l] * 5.12 * M_PI / 180.0); - if (y < 0) - y = -y; - x = 0.15 * fcos(geep[l] * M_PI / 180.0) + 0.149 * fcos(geep[l] * 5.12 * M_PI / 180.0); - if (x < 0.0) - x = 0.0 - x; - if (y < 0.001 && x > 0.000002 && ((tko & 0x1) == 0)) { - initshapes(l); /* let it become reborn as something - else */ - tko++; - return; - } { - float w1 = fsin(geep[l] * 15.3 * M_PI / 180.0); - wobble = 3.0 + 2.00 * fsin(geep[l] * 0.4 * M_PI / 180.0) + 3.94261 * w1; - } - - /** - if(blades == 2) if (y > 3.000*x) y = x*3.000; - if(blades == 3) if (y > 1.732*x) y = x*1.732; - if(blades == 4) if (y > x) y = x; - if(blades == 5) if (y > 0.726*x) y = x*0.726; - if(blades == 6) if (y > 0.577*x) y = x*0.577; - if(blades == 7) if (y > 0.481*x) y = x*0.481; - if(blades == 8) if (y > 0.414*x) y = x*0.414; - */ - if (y > x * bladeratio[blades]) - y = x * bladeratio[blades]; - - for (b = 0; b < blades; b++) { - glPushMatrix(); - glTranslatef(pos[l * 3], pos[l * 3 + 1], pos[l * 3 + 2]); - glRotatef(ang[l] + b * (360.0 / blades), 0.0, 0.0, 1.0); - glScalef(wobble * sca[l], wobble * sca[l], wobble * sca[l]); - /** - if(tko & 0x40000) glColor3f(col[l*3], col[l*3+1], col[l*3+2]); - else - */ - glColor4ub(0, 0, 0, 0x60); - - /* constrain geep cooridinates here XXX */ - glEnable(GL_BLEND); - - glBegin(GL_TRIANGLE_STRIP); - glVertex2f(x * sca[l], 0.0); - glVertex2f(x, y); - glVertex2f(x, -y); /* C */ - glVertex2f(0.3, 0.0); /* D */ - glEnd(); - - /** - if(tko++ & 0x40000) glColor3f(0,0,0); - else - */ - glColor3f(col[l * 3], col[l * 3 + 1], col[l * 3 + 2]); - glBegin(GL_LINE_LOOP); - glVertex2f(x * sca[l], 0.0); - glVertex2f(x, y); - glVertex2f(0.3, 0.0); /* D */ - glVertex2f(x, -y); /* C */ - glEnd(); - glDisable(GL_BLEND); - - glPopMatrix(); - } -} - -void -motionUpdate(int t) -{ - if (pos[t * 3] < -sca[t] * wd && dir[t * 3] < 0.0) { - dir[t * 3] = -dir[t * 3]; - /** - acc[t*3+1] += 0.8*acc[t*3]; - acc[t*3] = -0.8*acc[t*3]; - */ - } else if (pos[t * 3] > (1 + sca[t]) * wd && dir[t * 3] > 0.0) { - dir[t * 3] = -dir[t * 3]; - /** - acc[t*3+1] += 0.8*acc[t*3]; - acc[t*3] = -0.8*acc[t*3]; - */ - } else if (pos[t * 3 + 1] < -sca[t] * ht && dir[t * 3 + 1] < 0.0) { - dir[t * 3 + 1] = -dir[t * 3 + 1]; - /** - acc[t*3] += 0.8*acc[t*3+1]; - acc[t*3+1] = -0.8*acc[t*3+1]; - */ - } else if (pos[t * 3 + 1] > (1 + sca[t]) * ht && dir[t * 3 + 1] > 0.0) { - dir[t * 3 + 1] = -dir[t * 3 + 1]; - /** - acc[t*3] += 0.8*acc[t*3+1]; - acc[t*3+1] = -0.8*acc[t*3+1]; - */ - } - - pos[t * 3] += dir[t * 3]; - pos[t * 3 + 1] += dir[t * 3 + 1]; - /** - dir[t*3] += acc[t*3]; - dir[t*3+1] += acc[t*3+1]; - */ - ang[t] += spn[t]; - geep[t] += peep[t]; - if (geep[t] > 360 * 5.0) - geep[t] -= 360 * 5.0; - if (ang[t] < 0.0) { - ang[t] += 360.0; - } - if (ang[t] > 360.0) { - ang[t] -= 360.0; - } -} - -void -colorUpdate(int i) -{ - if (hsv[i * 3 + 1] <= 0.5 && hpr[i * 3 + 1] < 0.0) - hpr[i * 3 + 1] = -hpr[i * 3 + 1]; /* adjust s */ - if (hsv[i * 3 + 1] >= 1.0 && hpr[i * 3 + 1] > 0.0) - hpr[i * 3 + 1] = -hpr[i * 3 + 1]; /* adjust s */ - if (hsv[i * 3 + 2] <= 0.4 && hpr[i * 3 + 2] < 0.0) - hpr[i * 3 + 2] = -hpr[i * 3 + 2]; /* adjust s */ - if (hsv[i * 3 + 2] >= 1.0 && hpr[i * 3 + 2] > 0.0) - hpr[i * 3 + 2] = -hpr[i * 3 + 2]; /* adjust s */ - - hsv[i * 3] += hpr[i * 3]; - hsv[i * 3 + 1] += hpr[i * 3 + 1]; - hsv[i * 3 + 2] += hpr[i * 3 + 2]; - - /* --- hsv -> rgb --- */ -#define H(hhh) hhh[i*3 ] -#define S(hhh) hhh[i*3+1] -#define V(hhh) hhh[i*3+2] - -#define R(hhh) hhh[i*3 ] -#define G(hhh) hhh[i*3+1] -#define B(hhh) hhh[i*3+2] - - if (V(hsv) < 0.0) - V(hsv) = 0.0; - if (V(hsv) > 1.0) - V(hsv) = 1.0; - if (S(hsv) <= 0.0) { - R(col) = V(hsv); - G(col) = V(hsv); - B(col) = V(hsv); - } else { - float f, h, p, q, t, v; - int hi; - - while (H(hsv) < 0.0) - H(hsv) += 360.0; - while (H(hsv) >= 360.0) - H(hsv) -= 360.0; - - if (S(hsv) < 0.0) - S(hsv) = 0.0; - if (S(hsv) > 1.0) - S(hsv) = 1.0; - - h = H(hsv) / 60.0; - hi = (int) (h); - f = h - hi; - v = V(hsv); - p = V(hsv) * (1 - S(hsv)); - q = V(hsv) * (1 - S(hsv) * f); - t = V(hsv) * (1 - S(hsv) * (1 - f)); - - if (hi <= 0) { - R(col) = v; - G(col) = t; - B(col) = p; - } else if (hi == 1) { - R(col) = q; - G(col) = v; - B(col) = p; - } else if (hi == 2) { - R(col) = p; - G(col) = v; - B(col) = t; - } else if (hi == 3) { - R(col) = p; - G(col) = q; - B(col) = v; - } else if (hi == 4) { - R(col) = t; - G(col) = p; - B(col) = v; - } else { - R(col) = v; - G(col) = p; - B(col) = q; - } - } -} - -void -gravity(float fx) -{ - int a, b; - - for (a = 0; a < N_SHAPES; a++) { - for (b = 0; b < a; b++) { - float t, d2; - - t = pos[b * 3] - pos[a * 3]; - d2 = t * t; - t = pos[b * 3 + 1] - pos[a * 3 + 1]; - d2 += t * t; - if (d2 < 0.000001) - d2 = 0.00001; - if (d2 < 0.1) { - - float v0, v1, z; - v0 = pos[b * 3] - pos[a * 3]; - v1 = pos[b * 3 + 1] - pos[a * 3 + 1]; - - z = 0.00000001 * fx / (d2); - - dir[a * 3] += v0 * z * sca[b]; - dir[b * 3] += -v0 * z * sca[a]; - dir[a * 3 + 1] += v1 * z * sca[b]; - dir[b * 3 + 1] += -v1 * z * sca[a]; - - } - } - /** apply brakes - if(dir[a*3]*dir[a*3] + dir[a*3+1]*dir[a*3+1] - > 0.0001) { - dir[a*3] *= 0.9; - dir[a*3+1] *= 0.9; - } - */ - } -} -void -oneFrame(void) -{ - int i; - - /** - if((random() & 0xff) == 0x34){ - glClear(GL_COLOR_BUFFER_BIT); - } - - if((tko & 0x1f) == 0x1f){ - glEnable(GL_BLEND); - glColor4f(0.0, 0.0, 0.0, 0.09); - glRectf(0.0, 0.0, wd, ht); - glDisable(GL_BLEND); -#ifdef __sgi - sginap(0); -#endif - } - */ - gravity(-2.0); - for (i = 0; i < N_SHAPES; i++) { - motionUpdate(i); -#ifdef __sgi - sginap(0); -#endif - colorUpdate(i); -#ifdef __sgi - sginap(0); -#endif - drawleaf(i); -#ifdef __sgi - sginap(0); -#endif - - } - glFlush(); -} - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT); -} - -void -myReshape(int w, int h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - if (w <= h) { - wd = 1.0; - ht = (GLfloat) h / (GLfloat) w; - glOrtho(0.0, 1.0, - 0.0, 1.0 * (GLfloat) h / (GLfloat) w, - -16.0, 4.0); - } else { - wd = (GLfloat) w / (GLfloat) h; - ht = 1.0; - glOrtho(0.0, 1.0 * (GLfloat) w / (GLfloat) h, - 0.0, 1.0, - -16.0, 4.0); - } - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -void -visibility(int status) -{ - if (status == GLUT_VISIBLE) { - glutIdleFunc(oneFrame); - } else { - glutIdleFunc(NULL); - } - -} - -void -myinit(void) -{ - int i; - srandom(getpid()); - glClearColor(0.0, 0.0, 0.0, 1.0); - glEnable(GL_LINE_SMOOTH); - glShadeModel(GL_FLAT); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - for (i = 0; i < N_SHAPES; i++) - initshapes(i); - myReshape(200, 200); -} - -/* ARGSUSED1 */ -void -keys(unsigned char c, int x, int y) -{ - - if (c == 0x1b) - exit(0); /* escape */ -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); - glutInitWindowSize(300, 300); - glutCreateWindow(argv[0]); - - myinit(); - glutReshapeFunc(myReshape); - glutDisplayFunc(display); - glutKeyboardFunc(keys); - glutVisibilityFunc(visibility); - glutIdleFunc(oneFrame); - glutPostRedisplay(); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/contrib/noof.dsp b/lib/glut-3.7.6/progs/contrib/noof.dsp deleted file mode 100644 index e7a289724..000000000 --- a/lib/glut-3.7.6/progs/contrib/noof.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="noof" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=noof - 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 "noof.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 "noof.mak" CFG="noof - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "noof - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "noof - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "noof - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "noof - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "noof - Win32 Release" -# Name "noof - Win32 Debug" -# Begin Source File - -SOURCE=.\noof.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/contrib/rings.c b/lib/glut-3.7.6/progs/contrib/rings.c deleted file mode 100644 index 32d0f9b30..000000000 --- a/lib/glut-3.7.6/progs/contrib/rings.c +++ /dev/null @@ -1,279 +0,0 @@ -/* rings.c - * - * To compile: cc -o rings rings.c -lGL -lGLU -lX11 -lglut -lXmu -lm - * - * Usage: rings - * - * Homework 4, Part 1: perspective, hierarchical coords, moving eye pos. - * - * Do a slow zoom on a bunch of rings (ala Superman III?) - * - * Philip Winston - 2/21/95 - * pwinston@hmc.edu - * http://www.cs.hmc.edu/people/pwinston - * - */ - -#include - -#include -#include -#include - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -typedef enum {MENU_STARTOVER, MENU_ZOOM_OUT, MENU_STOP_RINGS, MENU_STOP_FADE, - MENU_START_RINGS, MENU_START_FADE, MENU_QUIT} MenuChoices; - -typedef enum {NOTALLOWED, CONE, TORUS, INNERMAT, OUTTERMAT} DisplayLists; - -#define STEPS 30 - -int Fade = 1; /* Start moving out */ - -float Axis = 0, AxisInc = (2.0 * M_PI / STEPS); - -GLfloat InnerRad, OutterRad, Tilt, Trans, TransCone, Dist; - - /* mainly computes the translation amount as a function of the - tilt angle and torus radii */ -void myInit(void) -{ - float sinoftilt; - - InnerRad = 0.70; - OutterRad = 5.0; - Tilt = 15; - Dist = 10; - - sinoftilt = sin(Tilt * M_PI*2/360); - - Trans = (2*OutterRad + InnerRad) * sinoftilt + InnerRad + - ((1 - sinoftilt) * InnerRad) - (InnerRad * 1/10); - - TransCone = Trans + (OutterRad * sinoftilt + InnerRad); -} - - /* I used code from the book's accnot.c as a starting point for lighting. - I have one positional light in center, then one directional */ -void myglInit(void) -{ - GLfloat light0_position[] = { 1.0, 0.2, 1.0, 0.0 }; - GLfloat light1_position[] = { 0.0, 0.0, 0.0, 1.0 }; - GLfloat light1_diffuse[] = { 1.0, 1.0, 1.0, 1.0 }; - GLfloat light1_specular[] = { 1.0, 1.0, 1.0, 1.0 }; - GLfloat lm_ambient[] = { 0.2, 0.2, 0.2, 1.0 }; - - glEnable(GL_NORMALIZE); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - glLightfv(GL_LIGHT0, GL_POSITION, light0_position); - glLightfv(GL_LIGHT1, GL_POSITION, light1_position); - glLightfv(GL_LIGHT1, GL_DIFFUSE, light1_diffuse); - glLightfv(GL_LIGHT1, GL_SPECULAR, light1_specular); - glLightf(GL_LIGHT1, GL_LINEAR_ATTENUATION, 0.2); - glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lm_ambient); - - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_LIGHT1); - - glDepthFunc(GL_LESS); - glEnable(GL_DEPTH_TEST); - - glFlush(); -} - -void myreshape(GLsizei w, GLsizei h) -{ - glViewport(0,0,w,h); - glFlush(); -} - - /* setup display lists to change material for inner/outter rings and - to draw a single torus or cone */ -void MakeDisplayLists(void) -{ - GLfloat cone_diffuse[] = { 0.0, 0.7, 0.7, 1.0 }; - GLfloat mat1_ambient[] = { 1.0, 1.0, 1.0, 1.0 }; - GLfloat mat2_ambient[] = { 0.0, 0.0, 0.0, 0.0 }; - GLfloat torus1_diffuse[] = { 0.7, 0.7, 0.0, 1.0 }; - GLfloat torus2_diffuse[] = { 0.3, 0.0, 0.0, 1.0 }; - GLfloat mat1_specular[] = { 1.0, 1.0, 1.0, 1.0 }; - GLfloat mat2_specular[] = { 0.5, 0.5, 0.5, 1.0 }; - - glNewList(INNERMAT, GL_COMPILE); - glMaterialfv(GL_FRONT, GL_SPECULAR, mat1_specular); - glMaterialf(GL_FRONT, GL_SHININESS, 50.0); - glMaterialfv(GL_FRONT, GL_DIFFUSE, torus1_diffuse); - glMaterialfv(GL_FRONT, GL_AMBIENT, mat1_ambient); - glEndList(); - - glNewList(OUTTERMAT, GL_COMPILE); - glMaterialfv(GL_FRONT, GL_SPECULAR, mat2_specular); - glMaterialf(GL_FRONT, GL_SHININESS, 25.0); - glMaterialfv(GL_FRONT, GL_DIFFUSE, torus2_diffuse); - glMaterialfv(GL_FRONT, GL_AMBIENT, mat2_ambient); - glEndList(); - - glNewList(CONE, GL_COMPILE); - glMaterialfv(GL_FRONT, GL_DIFFUSE, cone_diffuse); - glPushMatrix(); - glTranslatef(0, -TransCone, 0); - glRotatef(90, 1, 0, 0); - glutSolidCone(OutterRad, 10, 8, 8); - glPopMatrix(); - glEndList(); - - glNewList(TORUS, GL_COMPILE); - glPushMatrix(); - glRotatef(90, 1, 0, 0); - glutSolidTorus(InnerRad, OutterRad, 15, 25); - glPopMatrix(); - glEndList(); -} - - /* Draw three rings, rotated and translate so they look cool */ -void DrawRings(float axis) -{ - GLfloat x = sin(axis), y = cos(axis); - - glPushMatrix(); - glTranslatef(0, Trans, 0); - glRotatef(Tilt, x, 0, y); - glCallList(TORUS); - glPopMatrix(); - - glPushMatrix(); - glRotatef(-Tilt, x, 0, y); - glCallList(TORUS); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(0, -Trans, 0); - glRotatef(Tilt, x, 0, y); - glCallList(TORUS); - glPopMatrix(); -} - - /* Draw the inner thing, then glScale and draw 3 huge rings */ -void mydisplay(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glFrustum(-1, 1, -1, 1, 10, 1000); - gluLookAt(0, 0, Dist, 0, 0, 0, 0, 1, 0); - - glMatrixMode(GL_MODELVIEW); - - glCallList(INNERMAT); - DrawRings(Axis); - glCallList(CONE); - - glCallList(OUTTERMAT); - glPushMatrix(); - glScalef(10, 10, 10); - DrawRings(Axis/3); - glPopMatrix(); - - glutSwapBuffers(); - glFlush(); -} - - /* rotate the axis and adjust position if nec. */ -void myidle(void) -{ - Axis += AxisInc; - - if (Dist < 15 && Fade) /* start slow */ - Dist += 0.1; - else if (Dist < 800 && Fade) /* don't go back too far */ - Dist *= 1.005; - - mydisplay(); -} - - /* nothing fancy */ -void handlemenu(int value) -{ - switch (value) { - case MENU_STARTOVER: - Dist = 10; Axis = 0; Fade = 1; - AxisInc = (2.0 * M_PI / STEPS); - glutChangeToMenuEntry(3, "Stop rings", MENU_STOP_RINGS); - glutChangeToMenuEntry(4, "Stop fade", MENU_STOP_FADE); - break; - case MENU_ZOOM_OUT: - Dist = 800; - break; - case MENU_STOP_RINGS: - AxisInc = 0; - glutChangeToMenuEntry(3, "Start rings", MENU_START_RINGS); - break; - case MENU_START_RINGS: - AxisInc = (2.0 * M_PI / STEPS); - glutChangeToMenuEntry(3, "Stop rings", MENU_STOP_RINGS); - break; - case MENU_STOP_FADE: - Fade = 0; - glutChangeToMenuEntry(4, "Start fade", MENU_START_FADE); - break; - case MENU_START_FADE: - Fade = 1; - glutChangeToMenuEntry(4, "Stop fade", MENU_STOP_FADE); - break; - case MENU_QUIT: - exit(0); - break; - } -} - -void MenuInit(void) -{ - glutCreateMenu(handlemenu); - glutAddMenuEntry("Start Over", MENU_STARTOVER); - glutAddMenuEntry("Zoom Out", MENU_ZOOM_OUT); - glutAddMenuEntry("Stop rings", MENU_STOP_RINGS); - glutAddMenuEntry("Stop fade", MENU_STOP_FADE); - glutAddMenuEntry("Quit", MENU_QUIT); - glutAttachMenu(GLUT_RIGHT_BUTTON); -} - -void -vis(int visible) -{ - if (visible == GLUT_VISIBLE) { - glutIdleFunc(myidle); - } else { - glutIdleFunc(NULL); - } -} - -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitWindowSize(512, 512); - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); - glutCreateWindow("rings"); - - myInit(); - myglInit(); - - MakeDisplayLists(); - MenuInit(); - - glutReshapeFunc(myreshape); - glutDisplayFunc(mydisplay); - glutVisibilityFunc(vis); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/contrib/rings.dsp b/lib/glut-3.7.6/progs/contrib/rings.dsp deleted file mode 100644 index 91d4aa5e6..000000000 --- a/lib/glut-3.7.6/progs/contrib/rings.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="rings" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=rings - 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 "rings.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 "rings.mak" CFG="rings - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "rings - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "rings - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "rings - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "rings - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "rings - Win32 Release" -# Name "rings - Win32 Debug" -# Begin Source File - -SOURCE=.\rings.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/contrib/steam.c b/lib/glut-3.7.6/progs/contrib/steam.c deleted file mode 100644 index 07d9cc095..000000000 --- a/lib/glut-3.7.6/progs/contrib/steam.c +++ /dev/null @@ -1,621 +0,0 @@ -/** - - Description: Interactive 3D graphics, Assignment #1 - Miniature Steam Engine Simulation. - Author: Troy Robinette - Date: 29/9/95 - Email: troyr@yallara.cs.rmit.edu.au - Notes: - Transparence doesn't quite work. The color of the - underlying object doesn't show through. - - Also only the front side of the transparent objects are - transparent. - -**/ - -#include -#include -#include - -#define TRUE 1 -#define FALSE 0 - -/* Dimensions of texture image. */ -#define IMAGE_WIDTH 64 -#define IMAGE_HEIGHT 64 - -/* Step to be taken for each rotation. */ -#define ANGLE_STEP 10 - -/* Magic numbers for relationship b/w cylinder head and crankshaft. */ -#define MAGNITUDE 120 -#define PHASE 270.112 -#define FREQ_DIV 58 -#define ARC_LENGHT 2.7 -#define ARC_RADIUS 0.15 - -/* Rotation angles */ -GLdouble view_h = 270, view_v = 0, head_angle = 0; -GLint crank_angle = 0; - -/* Crank rotation step. */ -GLdouble crank_step = 5; - -/* Toggles */ -GLshort shaded = TRUE, anim = FALSE; -GLshort texture = FALSE, transparent = FALSE; -GLshort light1 = TRUE, light2 = FALSE; - -/* Storage for the angle look up table and the texture map */ -GLdouble head_look_up_table[361]; -GLubyte image[IMAGE_WIDTH][IMAGE_HEIGHT][3]; - -/* Indentifiers for each Display list */ -GLint list_piston_shaded = 1; -GLint list_piston_texture = 2; -GLint list_flywheel_shaded = 4; -GLint list_flywheel_texture = 8; - -/* Variable used in the creaton of glu objects */ -GLUquadricObj *obj; - -/* Draws a box by scaling a glut cube of size 1. Also checks the shaded - toggle to see which rendering style to use. NB Texture doesn't work - correctly due to the cube being scaled. */ -void -myBox(GLdouble x, GLdouble y, GLdouble z) -{ - glPushMatrix(); - glScalef(x, y, z); - if (shaded) - glutSolidCube(1); - else - glutWireCube(1); - glPopMatrix(); -} - -/* Draws a cylinder using glu function, drawing flat disc's at each end, - to give the appearence of it being solid. */ -void -myCylinder(GLUquadricObj * object, GLdouble outerRadius, - GLdouble innerRadius, GLdouble lenght) -{ - glPushMatrix(); - gluCylinder(object, outerRadius, outerRadius, lenght, 20, 1); - glPushMatrix(); - glRotatef(180, 0.0, 1.0, 0.0); - gluDisk(object, innerRadius, outerRadius, 20, 1); - glPopMatrix(); - - glTranslatef(0.0, 0.0, lenght); - gluDisk(object, innerRadius, outerRadius, 20, 1); - glPopMatrix(); -} - -/* Draws a piston. */ -void -draw_piston(void) -{ - glPushMatrix(); - glColor4f(0.3, 0.6, 0.9, 1.0); - - glPushMatrix(); - glRotatef(90, 0.0, 1.0, 0.0); - glTranslatef(0.0, 0.0, -0.07); - myCylinder(obj, 0.125, 0.06, 0.12); - glPopMatrix(); - - glRotatef(-90, 1.0, 0.0, 0.0); - glTranslatef(0.0, 0.0, 0.05); - myCylinder(obj, 0.06, 0.0, 0.6); - glTranslatef(0.0, 0.0, 0.6); - myCylinder(obj, 0.2, 0.0, 0.5); - glPopMatrix(); -} - -/* Draws the engine pole and the pivot pole for the cylinder head. */ -void -draw_engine_pole(void) -{ - glPushMatrix(); - glColor4f(0.9, 0.9, 0.9, 1.0); - myBox(0.5, 3.0, 0.5); - - glColor3f(0.5, 0.1, 0.5); - glRotatef(90, 0.0, 1.0, 0.0); - glTranslatef(0.0, 0.9, -0.4); - myCylinder(obj, 0.1, 0.0, 2); - glPopMatrix(); -} - -/* Draws the cylinder head at the appropreate angle, doing the necesary - translations for the rotation. */ -void -draw_cylinder_head(void) -{ - glPushMatrix(); - glColor4f(0.5, 1.0, 0.5, 0.1); - glRotatef(90, 1.0, 0.0, 0.0); - glTranslatef(0, 0.0, 0.4); - glRotatef(head_angle, 1, 0, 0); - glTranslatef(0, 0.0, -0.4); - myCylinder(obj, 0.23, 0.21, 1.6); - glRotatef(180, 1.0, 0.0, 0.0); - gluDisk(obj, 0, 0.23, 20, 1); - glPopMatrix(); -} - -/* Draws the flywheel. */ -void -draw_flywheel(void) -{ - glPushMatrix(); - glColor4f(0.5, 0.5, 1.0, 1.0); - glRotatef(90, 0.0, 1.0, 0.0); - myCylinder(obj, 0.625, 0.08, 0.5); - glPopMatrix(); -} - -/* Draws the crank bell, and the pivot pin for the piston. Also calls the - appropreate display list of a piston doing the nesacary rotations before - hand. */ -void -draw_crankbell(void) -{ - glPushMatrix(); - glColor4f(1.0, 0.5, 0.5, 1.0); - glRotatef(90, 0.0, 1.0, 0.0); - myCylinder(obj, 0.3, 0.08, 0.12); - - glColor4f(0.5, 0.1, 0.5, 1.0); - glTranslatef(0.0, 0.2, 0.0); - myCylinder(obj, 0.06, 0.0, 0.34); - - glTranslatef(0.0, 0.0, 0.22); - glRotatef(90, 0.0, 1.0, 0.0); - glRotatef(crank_angle - head_angle, 1.0, 0.0, 0.0); - if (shaded) { - if (texture) - glCallList(list_piston_texture); - else - glCallList(list_piston_shaded); - } else - draw_piston(); - glPopMatrix(); -} - -/* Draws the complete crank. Piston also gets drawn through the crank bell - function. */ -void -draw_crank(void) -{ - glPushMatrix(); - glRotatef(crank_angle, 1.0, 0.0, 0.0); - - glPushMatrix(); - glRotatef(90, 0.0, 1.0, 0.0); - glTranslatef(0.0, 0.0, -1.0); - myCylinder(obj, 0.08, 0.0, 1.4); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(0.28, 0.0, 0.0); - draw_crankbell(); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(-0.77, 0.0, 0.0); - if (shaded) { - if (texture) - glCallList(list_flywheel_texture); - else - glCallList(list_flywheel_shaded); - } else - draw_flywheel(); - glPopMatrix(); - glPopMatrix(); -} - -/* Main display routine. Clears the drawing buffer and if transparency is - set, displays the model twice, 1st time accepting those fragments with - a ALPHA value of 1 only, then with DEPTH_BUFFER writing disabled for - those with other values. */ -void -display(void) -{ - int pass; - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glPushMatrix(); - if (transparent) { - glEnable(GL_ALPHA_TEST); - pass = 2; - } else { - glDisable(GL_ALPHA_TEST); - pass = 0; - } - - /* Rotate the whole model */ - glRotatef(view_h, 0, 1, 0); - glRotatef(view_v, 1, 0, 0); - - do { - if (pass == 2) { - glAlphaFunc(GL_EQUAL, 1); - glDepthMask(GL_TRUE); - pass--; - } else if (pass != 0) { - glAlphaFunc(GL_NOTEQUAL, 1); - glDepthMask(GL_FALSE); - pass--; - } - draw_engine_pole(); - - glPushMatrix(); - glTranslatef(0.5, 1.4, 0.0); - draw_cylinder_head(); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(0.0, -0.8, 0.0); - draw_crank(); - glPopMatrix(); - } while (pass > 0); - glDepthMask(GL_TRUE); - glutSwapBuffers(); - glPopMatrix(); -} - -/* Called when the window is idle. When called increments the crank angle - by ANGLE_STEP, updates the head angle and notifies the system that - the screen needs to be updated. */ -void -animation(void) -{ - if ((crank_angle += crank_step) >= 360) - crank_angle = 0; - head_angle = head_look_up_table[crank_angle]; - glutPostRedisplay(); -} - -/* Called when a key is pressed. Checks if it reconises the key and if so - acts on it, updateing the screen. */ -/* ARGSUSED1 */ -void -keyboard(unsigned char key, int x, int y) -{ - switch (key) { - case 's': - if (shaded == FALSE) { - shaded = TRUE; - glShadeModel(GL_SMOOTH); - glEnable(GL_LIGHTING); - glEnable(GL_DEPTH_TEST); - glEnable(GL_COLOR_MATERIAL); - gluQuadricNormals(obj, GLU_SMOOTH); - gluQuadricDrawStyle(obj, GLU_FILL); - } else { - shaded = FALSE; - glShadeModel(GL_FLAT); - glDisable(GL_LIGHTING); - glDisable(GL_DEPTH_TEST); - glDisable(GL_COLOR_MATERIAL); - gluQuadricNormals(obj, GLU_NONE); - gluQuadricDrawStyle(obj, GLU_LINE); - gluQuadricTexture(obj, GL_FALSE); - } - if (texture && !shaded); - else - break; - case 't': - if (texture == FALSE) { - texture = TRUE; - glEnable(GL_TEXTURE_2D); - gluQuadricTexture(obj, GL_TRUE); - } else { - texture = FALSE; - glDisable(GL_TEXTURE_2D); - gluQuadricTexture(obj, GL_FALSE); - } - break; - case 'o': - if (transparent == FALSE) { - transparent = TRUE; - } else { - transparent = FALSE; - } - break; - - case 'a': - if ((crank_angle += crank_step) >= 360) - crank_angle = 0; - head_angle = head_look_up_table[crank_angle]; - break; - case 'z': - if ((crank_angle -= crank_step) <= 0) - crank_angle = 360; - head_angle = head_look_up_table[crank_angle]; - break; - case '0': - if (light1) { - glDisable(GL_LIGHT0); - light1 = FALSE; - } else { - glEnable(GL_LIGHT0); - light1 = TRUE; - } - break; - case '1': - if (light2) { - glDisable(GL_LIGHT1); - light2 = FALSE; - } else { - glEnable(GL_LIGHT1); - light2 = TRUE; - } - break; - case '4': - if ((view_h -= ANGLE_STEP) <= 0) - view_h = 360; - break; - case '6': - if ((view_h += ANGLE_STEP) >= 360) - view_h = 0; - break; - case '8': - if ((view_v += ANGLE_STEP) >= 360) - view_v = 0; - break; - case '2': - if ((view_v -= ANGLE_STEP) <= 0) - view_v = 360; - break; - case ' ': - if (anim) { - glutIdleFunc(0); - anim = FALSE; - } else { - glutIdleFunc(animation); - anim = TRUE; - } - break; - case '+': - if ((++crank_step) > 45) - crank_step = 45; - break; - case '-': - if ((--crank_step) <= 0) - crank_step = 0; - break; - default: - return; - } - glutPostRedisplay(); -} - -/* ARGSUSED1 */ -void -special(int key, int x, int y) -{ - switch (key) { - case GLUT_KEY_LEFT: - if ((view_h -= ANGLE_STEP) <= 0) - view_h = 360; - break; - case GLUT_KEY_RIGHT: - if ((view_h += ANGLE_STEP) >= 360) - view_h = 0; - break; - case GLUT_KEY_UP: - if ((view_v += ANGLE_STEP) >= 360) - view_v = 0; - break; - case GLUT_KEY_DOWN: - if ((view_v -= ANGLE_STEP) <= 0) - view_v = 360; - break; - default: - return; - } - glutPostRedisplay(); -} - -/* Called when a menu option has been selected. Translates the menu item - identifier into a keystroke, then call's the keyboard function. */ -void -menu(int val) -{ - unsigned char key; - - switch (val) { - case 1: - key = 's'; - break; - case 2: - key = ' '; - break; - case 3: - key = 't'; - break; - case 4: - key = 'o'; - break; - case 5: - key = '0'; - break; - case 6: - key = '1'; - break; - case 7: - key = '+'; - break; - case 8: - key = '-'; - break; - default: - return; - } - keyboard(key, 0, 0); -} - -/* Initialises the menu of toggles. */ -void -create_menu(void) -{ - glutCreateMenu(menu); - glutAttachMenu(GLUT_LEFT_BUTTON); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutAddMenuEntry("Shaded", 1); - glutAddMenuEntry("Animation", 2); - glutAddMenuEntry("Texture", 3); - glutAddMenuEntry("Transparency", 4); - glutAddMenuEntry("Right Light (0)", 5); - glutAddMenuEntry("Left Light (1)", 6); - glutAddMenuEntry("Speed UP", 7); - glutAddMenuEntry("Slow Down", 8); -} - -/* Makes a simple check pattern image. (Copied from the redbook example - "checker.c".) */ -void -make_image(void) -{ - int i, j, c; - - for (i = 0; i < IMAGE_WIDTH; i++) { - for (j = 0; j < IMAGE_HEIGHT; j++) { - c = (((i & 0x8) == 0) ^ ((j & 0x8) == 0)) * 255; - image[i][j][0] = (GLubyte) c; - image[i][j][1] = (GLubyte) c; - image[i][j][2] = (GLubyte) c; - } - } -} - -/* Makes the head look up table for all possible crank angles. */ -void -make_table(void) -{ - GLint i; - GLdouble k; - - for (i = 0, k = 0.0; i < 360; i++, k++) { - head_look_up_table[i] = - MAGNITUDE * atan( - (ARC_RADIUS * sin(PHASE - k / FREQ_DIV)) / - ((ARC_LENGHT - ARC_RADIUS * cos(PHASE - k / FREQ_DIV)))); - } -} - -/* Initialises texturing, lighting, display lists, and everything else - associated with the model. */ -void -myinit(void) -{ - GLfloat mat_specular[] = {1.0, 1.0, 1.0, 1.0}; - GLfloat mat_shininess[] = {50.0}; - GLfloat light_position1[] = {1.0, 1.0, 1.0, 0.0}; - GLfloat light_position2[] = {-1.0, 1.0, 1.0, 0.0}; - - glClearColor(0.0, 0.0, 0.0, 0.0); - - obj = gluNewQuadric(); - make_table(); - make_image(); - - /* Set up Texturing */ - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - glTexImage2D(GL_TEXTURE_2D, 0, 3, IMAGE_WIDTH, - IMAGE_HEIGHT, 0, GL_RGB, GL_UNSIGNED_BYTE, - image); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - - /* Set up Lighting */ - glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); - glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); - glLightfv(GL_LIGHT0, GL_POSITION, light_position1); - glLightfv(GL_LIGHT1, GL_POSITION, light_position2); - - /* Initial render mode is with full shading and LIGHT 0 - enabled. */ - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glDepthFunc(GL_LEQUAL); - glEnable(GL_DEPTH_TEST); - glDisable(GL_ALPHA_TEST); - - glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE); - glEnable(GL_COLOR_MATERIAL); - glShadeModel(GL_SMOOTH); - - /* Initialise display lists */ - glNewList(list_piston_shaded, GL_COMPILE); - draw_piston(); - glEndList(); - glNewList(list_flywheel_shaded, GL_COMPILE); - draw_flywheel(); - glEndList(); - - gluQuadricTexture(obj, GL_TRUE); - glNewList(list_piston_texture, GL_COMPILE); - draw_piston(); - glEndList(); - glNewList(list_flywheel_texture, GL_COMPILE); - draw_flywheel(); - glEndList(); - gluQuadricTexture(obj, GL_FALSE); -} - -/* Called when the model's window has been reshaped. */ -void -myReshape(int w, int h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(65.0, (GLfloat) w / (GLfloat) h, 1.0, 20.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(0.0, 0.0, -5.0); /* viewing transform */ - glScalef(1.5, 1.5, 1.5); -} - -/* Main program. An interactive model of a miniture steam engine. - Sets system in Double Buffered mode and initialises all the call-back - functions. */ -int -main(int argc, char **argv) -{ - puts("Miniature Steam Engine Troy Robinette\n"); - - puts("Keypad Arrow keys (with NUM_LOCK on) rotates object."); - puts("Rotate crank: 'a' = anti-clock wise 'z' = clock wise"); - puts("Crank Speed : '+' = Speed up by 1 '-' = Slow Down by 1"); - puts("Toggle : 's' = Shading 't' = Texture"); - puts(" : ' ' = Animation 'o' = Transparency"); - puts(" : '0' = Right Light '1' = Left Light"); - puts(" Alternatively a pop up menu with all toggles is attached"); - puts(" to the left mouse button.\n"); - - glutInitWindowSize(400, 400); - glutInit(&argc, argv); - - /* Transperancy won't work properly without GLUT_ALPHA */ - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_MULTISAMPLE); - glutCreateWindow("Miniature Steam Engine by Troy Robinette"); - - glutDisplayFunc(display); - glutKeyboardFunc(keyboard); - glutSpecialFunc(special); - create_menu(); - - myinit(); - - glutReshapeFunc(myReshape); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/contrib/steam.dsp b/lib/glut-3.7.6/progs/contrib/steam.dsp deleted file mode 100644 index 77cb2f3ca..000000000 --- a/lib/glut-3.7.6/progs/contrib/steam.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="steam" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=steam - 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 "steam.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 "steam.mak" CFG="steam - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "steam - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "steam - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "steam - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "steam - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "steam - Win32 Release" -# Name "steam - Win32 Debug" -# Begin Source File - -SOURCE=.\steam.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/contrib/text3d.c b/lib/glut-3.7.6/progs/contrib/text3d.c deleted file mode 100644 index b3f0c5e09..000000000 --- a/lib/glut-3.7.6/progs/contrib/text3d.c +++ /dev/null @@ -1,509 +0,0 @@ -/* Text3d by Robert J. Doyle, Jr., Naval Research Laboratory, Washington, DC. */ -#include -#include -#include -#include -#ifndef _WIN32 -#include -#endif -#include - -typedef enum {RESERVED, M_SIDE, M_EDGE, M_WHOLE, O_SIDE, O_EDGE, O_WHOLE, -T_SIDE, T_EDGE, T_WHOLE, H_SIDE, H_EDGE, H_WHOLE,REPEAT_SIDE, REPEAT_EDGE, REPEAT1, -REPEAT2_SIDE, REPEAT2_EDGE,REPEAT2, REPEAT3_SIDE, REPEAT3_EDGE,REPEAT3, -REPEAT4_SIDE, REPEAT4_EDGE,REPEAT4} displayLists; - -GLfloat sideColor[] = {0.0, 0.0, 0.5, 1.0}; -GLfloat edgeColor[] = {0.7, 0.7, 0.0, 1.0}; -GLfloat shininess[] = {128.0}; -GLfloat mat_specular[] = {0.7, 0.7, 0.7, 1.0}; - -GLfloat width = 0.0; -GLfloat width2 = 2.0; - -GLfloat letterM[][3] = -{ - {-3.125000, 0.000000, 0.000000}, - {-3.125000, 6.208000, 0.000000}, - {-1.233000, 6.208000, 0.000000}, - {0.003000, 1.484000, 0.000000}, - {1.223000, 6.208000, 0.000000}, - {3.123000, 6.208000, 0.000000}, - {3.123000, 0.000000, 0.000000}, - {1.923000, 0.000000, 0.000000}, - {1.923000, 5.010000, 0.000000}, - {0.659000, 0.000000, 0.000000}, - {-0.649000, 0.000000, 0.000000}, - {-1.925000, 5.010000, 0.000000}, - {-1.925000, 0.000000, 0.000000} - -}; - -GLfloat letterO[][3] = -{ - {-3.038000, 3.102000, 0.000000}, - {-2.974000, 3.874000, 0.000000}, - {-2.827000, 4.440000, 0.000000}, - {-2.802000, 4.508000, 0.000000}, - {-2.544000, 5.042000, 0.000000}, - {-2.502000, 5.110000, 0.000000}, - {-2.223000, 5.479000, 0.000000}, - {-2.132000, 5.576000, 0.000000}, - {-1.784000, 5.869000, 0.000000}, - {-1.678000, 5.940000, 0.000000}, - {-1.260000, 6.155000, 0.000000}, - {-1.148000, 6.198000, 0.000000}, - {-0.677000, 6.321000, 0.000000}, - {-0.638000, 6.328000, 0.000000}, - {-0.002000, 6.378000, 0.000000}, - {0.634000, 6.328000, 0.000000}, - {1.107000, 6.210000, 0.000000}, - {1.144000, 6.198000, 0.000000}, - {1.570000, 6.002000, 0.000000}, - {1.674000, 5.940000, 0.000000}, - {2.038000, 5.661000, 0.000000}, - {2.128000, 5.576000, 0.000000}, - {2.428000, 5.217000, 0.000000}, - {2.504000, 5.104000, 0.000000}, - {2.762000, 4.598000, 0.000000}, - {2.798000, 4.508000, 0.000000}, - {2.960000, 3.913000, 0.000000}, - {2.970000, 3.862000, 0.000000}, - {3.034000, 3.102000, 0.000000}, - {2.970000, 2.342000, 0.000000}, - {2.815000, 1.745000, 0.000000}, - {2.798000, 1.696000, 0.000000}, - {2.554000, 1.182000, 0.000000}, - {2.504000, 1.100000, 0.000000}, - {2.221000, 0.726000, 0.000000}, - {2.128000, 0.628000, 0.000000}, - {1.776000, 0.332000, 0.000000}, - {1.674000, 0.264000, 0.000000}, - {1.256000, 0.049000, 0.000000}, - {1.144000, 0.006000, 0.000000}, - {0.672000, -0.117000, 0.000000}, - {0.634000, -0.124000, 0.000000}, - {-0.002000, -0.174000, 0.000000}, - {-0.638000, -0.124000, 0.000000}, - {-1.112000, -0.006000, 0.000000}, - {-1.148000, 0.006000, 0.000000}, - {-1.576000, 0.202000, 0.000000}, - {-1.678000, 0.264000, 0.000000}, - {-2.041000, 0.540000, 0.000000}, - {-2.132000, 0.628000, 0.000000}, - {-2.430000, 0.983000, 0.000000}, - {-2.502000, 1.094000, 0.000000}, - {-2.773000, 1.622000, 0.000000}, - {-2.802000, 1.696000, 0.000000}, - {-2.962000, 2.258000, 0.000000}, - {-2.974000, 2.330000, 0.000000}, - {-1.736000, 3.102000, 10000.0}, - {-1.710000, 3.578000, 0.000000}, - {-1.644000, 3.934000, 0.000000}, - {-1.503000, 4.328000, 0.000000}, - {-1.494000, 4.346000, 0.000000}, - {-1.352000, 4.593000, 0.000000}, - {-1.306000, 4.656000, 0.000000}, - {-1.120000, 4.857000, 0.000000}, - {-1.040000, 4.926000, 0.000000}, - {-0.825000, 5.067000, 0.000000}, - {-0.726000, 5.116000, 0.000000}, - {-0.480000, 5.200000, 0.000000}, - {-0.402000, 5.218000, 0.000000}, - {-0.041000, 5.257000, 0.000000}, - {-0.002000, 5.258000, 0.000000}, - {0.361000, 5.227000, 0.000000}, - {0.400000, 5.220000, 0.000000}, - {0.650000, 5.147000, 0.000000}, - {0.726000, 5.116000, 0.000000}, - {0.950000, 4.990000, 0.000000}, - {1.038000, 4.926000, 0.000000}, - {1.239000, 4.736000, 0.000000}, - {1.306000, 4.656000, 0.000000}, - {1.462000, 4.413000, 0.000000}, - {1.498000, 4.342000, 0.000000}, - {1.635000, 3.964000, 0.000000}, - {1.644000, 3.934000, 0.000000}, - {1.710000, 3.568000, 0.000000}, - {1.736000, 3.102000, 0.000000}, - {1.710000, 2.636000, 0.000000}, - {1.642000, 2.268000, 0.000000}, - {1.508000, 1.886000, 0.000000}, - {1.496000, 1.860000, 0.000000}, - {1.351000, 1.610000, 0.000000}, - {1.304000, 1.546000, 0.000000}, - {1.115000, 1.343000, 0.000000}, - {1.036000, 1.276000, 0.000000}, - {0.823000, 1.135000, 0.000000}, - {0.724000, 1.086000, 0.000000}, - {0.480000, 1.001000, 0.000000}, - {0.400000, 0.984000, 0.000000}, - {0.035000, 0.946000, 0.000000}, - {-0.002000, 0.946000, 0.000000}, - {-0.368000, 0.979000, 0.000000}, - {-0.402000, 0.986000, 0.000000}, - {-0.653000, 1.057000, 0.000000}, - {-0.726000, 1.088000, 0.000000}, - {-0.952000, 1.213000, 0.000000}, - {-1.040000, 1.278000, 0.000000}, - {-1.240000, 1.467000, 0.000000}, - {-1.306000, 1.548000, 0.000000}, - {-1.460000, 1.788000, 0.000000}, - {-1.494000, 1.858000, 0.000000}, - {-1.639000, 2.251000, 0.000000}, - {-1.644000, 2.270000, 0.000000}, - {-1.710000, 2.626000, 0.000000} -}; - -GLfloat letterT[][3] = -{ - {-0.640000, 0.000000, 0.000000}, - {-0.640000, 5.104000, 0.000000}, - {-2.476000, 5.104000, 0.000000}, - {-2.476000, 6.208000, 0.000000}, - {2.476000, 6.208000, 0.000000}, - {2.476000, 5.104000, 0.000000}, - {0.640000, 5.104000, 0.000000}, - {0.640000, 0.000000, 0.000000} -}; - -GLfloat letterH[][3] = -{ - {-2.570000, 0.000000, 0.000000}, - {-2.570000, 6.208000, 0.000000}, - {-1.282000, 6.208000, 0.000000}, - {-1.282000, 3.900000, 0.000000}, - {1.280000, 3.900000, 0.000000}, - {1.280000, 6.208000, 0.000000}, - {2.568000, 6.208000, 0.000000}, - {2.568000, 0.000000, 0.000000}, - {1.280000, 0.000000, 0.000000}, - {1.280000, 2.760000, 0.000000}, - {-1.282000, 2.760000, 0.000000}, - {-1.282000, 0.000000, 0.000000} -}; - -/* Initialize light source and lighting. - */ - - -static void checkErrors(void) -{ - GLenum error; - while ((error = glGetError()) != GL_NO_ERROR) { - fprintf(stderr, "Error: %s\n", (char *) gluErrorString(error)); - } -} - -void myinit(void) -{ - int count1 = sizeof(letterM) / (3 * sizeof(GLfloat)); - int count2 = sizeof(letterO) / (3 * sizeof(GLfloat)); - int count3 = sizeof(letterT) / (3 * sizeof(GLfloat)); - int count4 = sizeof(letterH) / (3 * sizeof(GLfloat)); - - int i; - - GLfloat light_ambient[] = { 1.0, 1.0, 1.0, 1.0 }; - GLfloat light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 }; - GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 }; -/* light_position is NOT default value */ - GLfloat light_position[] = { -1.0, -1.0, 1.0, 0.0 }; - - glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); - glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); - glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); - glLightfv(GL_LIGHT0, GL_POSITION, light_position); - - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glDepthFunc(GL_LESS); - glEnable(GL_DEPTH_TEST); - - glDrawBuffer(GL_FRONT_AND_BACK); - glClearColor(0.0, 0.0, 0.0, 1.0); - glClear(GL_COLOR_BUFFER_BIT); - glClear(GL_ACCUM_BUFFER_BIT); - glDrawBuffer(GL_BACK); - -/* Zero position of text */ - - for(i = 0; i < count1; i++) { - letterM[i][1] = letterM[i][1] - 3.175; - } - for(i = 0; i < count2; i++) { - letterO[i][1] = letterO[i][1] - 3.175; - } - for(i = 0; i < count3; i++) { - letterT[i][1] = letterT[i][1] - 3.175; - } - for(i = 0; i < count4; i++) { - letterH[i][1] = letterH[i][1] - 3.175; - } -} - - -/* Mark Kilgard's tessellation code from the "dino" demos. */ -void extrudeSolidFromPolygon(GLfloat data[][3], unsigned int dataSize, - GLdouble thickness, GLuint side, GLuint edge, GLuint whole) -{ - GLdouble vertex[3], dx, dy, len; - int i, k; - int flag = 0; - int count = dataSize / (3 * sizeof(GLfloat)); - static GLUtriangulatorObj *tobj = NULL; - - if (tobj == NULL) { - tobj = gluNewTess(); - - gluTessCallback(tobj, GLU_BEGIN, glBegin); - gluTessCallback(tobj, GLU_VERTEX, glVertex3fv); - gluTessCallback(tobj, GLU_END, glEnd); - } - glNewList(side, GL_COMPILE); - glShadeModel(GL_SMOOTH); - gluBeginPolygon(tobj); - for(i = 0; i < count; i++) { - /* This detects a new contour from a large number placed in - the unused z coordinate of the vertex where the new contour - starts. See the coordinates for letterO, above. The coordinate - must be reset below for additional calls. */ - - if (data[i][2] > 1000.0) { - data[i][2] = 0.0; - flag = 1; k = i; - gluNextContour(tobj, GLU_INTERIOR); - } - - vertex[0] = data[i][0]; - vertex[1] = data[i][1]; - vertex[2] = 0.0; - gluTessVertex(tobj, vertex, data[i]); - } - gluEndPolygon(tobj); - glEndList(); - - /* Reset coordinate for new calls. */ - if (flag == 1) { - data[k][2] = 10000.0; - flag = 0; - } - glNewList(edge, GL_COMPILE); - glBegin(GL_QUAD_STRIP); - for(i = 0; i <= count; i++) { - glVertex3f(data[i % count][0], data[i % count][1], 0.0); - glVertex3f(data[i % count][0], data[i % count][1], thickness); - /* Normals */ - dx = data[(i+ 1) % count][1] - data[i % count][1]; - dy = data[i % count][0] - data[(i + 1) % count][0]; - len = sqrt(dx * dx + dy * dy); - glNormal3f(dx / len, dy / len, 0.0); - } - glEnd(); - glEndList(); - - glNewList(whole, GL_COMPILE); - glFrontFace(GL_CW); - - glMaterialfv(GL_FRONT, GL_DIFFUSE, edgeColor); - glMaterialfv(GL_FRONT, GL_SHININESS, shininess); - glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); - - glCallList(edge); - glNormal3f(0.0, 0.0, -1.0); - glCallList(side); - glPushMatrix(); - glTranslatef(0.0, 0.0, thickness); - glFrontFace(GL_CCW); - glNormal3f(0.0, 0.0, 1.0); - - glMaterialfv(GL_FRONT, GL_DIFFUSE, sideColor); - glMaterialfv(GL_FRONT, GL_SHININESS, shininess); - glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); - - glCallList(side); - glPopMatrix(); - glEndList(); -} - -void repeat(int j) -{ - if(j == 2){ - glPushMatrix(); - glTranslatef((31 * -0.34) , 9.3, -9.6); - glCallList(REPEAT1); - glPopMatrix(); - } - if(j == 3){ - glPushMatrix(); - glTranslatef(31 * -0.34, 9.3, -9.6); - glCallList(REPEAT1); - glPopMatrix(); - glPushMatrix(); - glTranslatef(31 * -.09, 9.3, -9.6); - glCallList(REPEAT2); - glPopMatrix(); - } - if(j == 4){ - glPushMatrix(); - glTranslatef(31 * -0.34, 9.3, -9.6); - glCallList(REPEAT1); - glPopMatrix(); - glPushMatrix(); - glTranslatef(31 * -.09, 9.3, -9.6); - glCallList(REPEAT2); - glPopMatrix(); - glPushMatrix(); - glTranslatef(31 * 0.12, 9.3, -9.6); - glCallList(REPEAT3); - glPopMatrix(); - } -} - -void display(void) -{ - int i, j; - GLfloat xPos = -0.34; - glLoadIdentity(); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glTranslatef(0.0, 0.0, -10.0); - - extrudeSolidFromPolygon(letterM, sizeof(letterM), width2, REPEAT_SIDE, - REPEAT_EDGE, REPEAT1); - extrudeSolidFromPolygon(letterO, sizeof(letterO), width2, REPEAT2_SIDE, - REPEAT2_EDGE, REPEAT2); - extrudeSolidFromPolygon(letterT, sizeof(letterT), width2, REPEAT3_SIDE, - REPEAT3_EDGE, REPEAT3); - extrudeSolidFromPolygon(letterH, sizeof(letterH), width2, REPEAT4_SIDE, - REPEAT4_EDGE, REPEAT4); - - for(j = 1; j < 5; j++){ - width = 0.0; -checkErrors(); - for(i = 0; i < 10; i++){ - - glPushMatrix(); - repeat(j); - glPopMatrix(); - - glPushMatrix(); - glRotatef(90.0, 0.0, 1.0, 0.0); - if(j == 1){ - extrudeSolidFromPolygon(letterM, sizeof(letterM), width, M_SIDE, - M_EDGE, M_WHOLE); - glCallList(M_WHOLE); - } - if(j == 2){ - extrudeSolidFromPolygon(letterO, sizeof(letterO), width, O_SIDE, - O_EDGE, O_WHOLE); - glCallList(O_WHOLE); - } - if(j == 3){ - extrudeSolidFromPolygon(letterT, sizeof(letterT), width, T_SIDE, - T_EDGE, T_WHOLE); - glCallList(T_WHOLE); - } - if(j == 4){ - extrudeSolidFromPolygon(letterH, sizeof(letterH), width, H_SIDE, - H_EDGE, H_WHOLE); - glCallList(H_WHOLE); - } - glutSwapBuffers(); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - width = width + 0.2; - glPopMatrix(); - } - for(i = 0; i < 45 ; i++){ - - glPushMatrix(); - repeat(j); - glPopMatrix(); - - glPushMatrix(); - glRotatef(90.0 - (2.0 * i), 0.0, 1.0, 0.0); - if(j == 1){ - glCallList(M_WHOLE); - } - if(j == 2){ - glCallList(O_WHOLE); - } - if(j == 3){ - glCallList(T_WHOLE); - } - if(j == 4){ - glCallList(H_WHOLE); - } - glutSwapBuffers(); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glPopMatrix(); - } - for(i = 1; i < 32 ; i++){ - - glPushMatrix(); - repeat(j); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(i * xPos, i * 0.3, i * -0.3); - if(j == 1){ - glCallList(M_WHOLE); - } - if(j == 2){ - glCallList(O_WHOLE); - } - if(j == 3){ - glCallList(T_WHOLE); - } - if(j == 4){ - glCallList(H_WHOLE); - } - glutSwapBuffers(); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glPopMatrix(); - } - - if(j == 1){ - xPos = xPos + 0.25; - } - else{ - xPos = xPos + 0.21; - } - } - glFlush(); -} - -void myReshape(int w, int h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glFrustum(-7.0, 7.0, -7.0, 7.0, 6.0, 20.0); -/* if (w <= h) - glOrtho (-7.0, 7.0, -7.0*(GLfloat)h/(GLfloat)w, - 7.0*(GLfloat)h/(GLfloat)w, -10.0, 10.0); - else - glOrtho (-7.0*(GLfloat)w/(GLfloat)h, - 7.0*(GLfloat)w/(GLfloat)h, -7.0, 7.0, -10.0, 10.0); */ - glMatrixMode(GL_MODELVIEW); -} - -/* Main Loop - * Open window with initial window size, title bar, - * RGBA display mode, and handle input events. - */ -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); - glutCreateWindow ("text3d"); - -/*glCullFace(GL_FRONT);*/ -/*glEnable(GL_CULL_FACE);*/ - - myinit(); - glutReshapeFunc (myReshape); - glutDisplayFunc (display); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/contrib/text3d.dsp b/lib/glut-3.7.6/progs/contrib/text3d.dsp deleted file mode 100644 index 7f1dc794b..000000000 --- a/lib/glut-3.7.6/progs/contrib/text3d.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="text3d" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=text3d - 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 "text3d.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 "text3d.mak" CFG="text3d - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "text3d - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "text3d - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "text3d - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "text3d - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "text3d - Win32 Release" -# Name "text3d - Win32 Debug" -# Begin Source File - -SOURCE=.\text3d.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/contrib/worms.c b/lib/glut-3.7.6/progs/contrib/worms.c deleted file mode 100644 index 95efed857..000000000 --- a/lib/glut-3.7.6/progs/contrib/worms.c +++ /dev/null @@ -1,519 +0,0 @@ -#if 0 -From jallen@cs.hmc.edu Fri Feb 17 00:49:59 1995 -Received: from giraffe.asd.sgi.com by hoot.asd.sgi.com via SMTP (940816.SGI.8.6.9/940406.SGI.AUTO) - for id AAA13591; Fri, 17 Feb 1995 00:49:33 -0800 -Received: from sgi.sgi.com by giraffe.asd.sgi.com via SMTP (920330.SGI/920502.SGI) - for mjk@hoot.asd.sgi.com id AA09774; Fri, 17 Feb 95 00:52:30 -0800 -Received: from cs.hmc.edu by sgi.sgi.com via SMTP (950215.405.SGI.8.6.10/910110.SGI) - for id AAA06439; Fri, 17 Feb 1995 00:52:28 -0800 -Received: by cs.hmc.edu (5.0/SMI-SVR4) - id AA13309; Fri, 17 Feb 1995 00:52:10 -0800 -Date: Fri, 17 Feb 1995 00:52:10 -0800 -From: jallen@cs.hmc.edu (Jeff R. Allen) -Message-Id: <9502170852.AA13309@cs.hmc.edu> -To: nate@cs.hmc.edu (Nathan Tuck), mjk@sgi.sgi.com, hadas@cs.hmc.edu -Subject: Re: GLUT demos -In-Reply-To: <9502100805.AA08487@cs.hmc.edu> -References: <9502100805.AA08487@cs.hmc.edu> -Reply-To: Jeff Allen -Content-Length: 12851 -Status: RO - -Below is a program I wrote for the Graphics class at Harvey Mudd. As -the comments explain, I am currently working on a version in 3D with -lighting, and a pre-programmed camera flight-path. I also added a -checker-board-type-thing for the worms to crawl around on, so that -there is some reference for the viewer. - -For now, here is the program. - --- -Jeff R. Allen | Senior CS major | Support your local -(fnord) | South 351d, x4940 | unicyclist! - -------------------------- begin worms.c ------------------------- -#endif - -/* worms.c -- demos OpenGL in 2D using the GLUT interface to the - underlying window system. - - Compile with: [g]cc -O3 -o worms worms.c -lm -lGLU -lglut -lXmu -lX11 -lGL - - This is a fun little demo that actually makes very little use of - OpenGL and GLUT. It generates a bunch of worms and animates them as - they crawl around your screen. When you click in the screen with - the left mouse button, the worms converge on the spot for a while, - then go back to their business. The animation is incredibly simple: - we erase the tail, then draw a new head, repeatedly. It is so - simple, actually, we don't even need double-buffering! - - The behavior of the worms can be controlled via the compile-time - constants below. Enterprising indiviuals wil want to add GLUT menus - to control these constants at run time. This is left as an exercise - to the reader. The only thing that can currently be controlled is - wether or not the worms are filled. Use the right button to get a popup - menu. - - A future version of this program will make more use of OpenGL by - rendering 3d worms crawling in 3-space (or possibly just around on - a plane) and it will allow the user to manipulate the viewpoint - using the mouse. This will require double-buffering and less - optimal updates. - - This program is Copyright 1995 by Jeff R. Allen . - Permission is hereby granted to use and modify this code freely, - provided it is not sold or redistibuted in any way for profit. This - is copyrighted material, and is NOT in the Public Domain. - - $Id: //sw/main/apps/OpenGL/glut/progs/contrib/worms.c#6 $ - - */ - -#include -#include -#include -#include -#include -#include - -#ifdef _WIN32 -#define drand48() (((float) rand())/((float) RAND_MAX)) -#define srand48(x) (srand((x))) -#endif - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -/* operational constants */ -#define RADIAN .0174532 -#define CIRCLE_POINTS 25 -#define SIDETOLERANCE .01 -#define INITH 500 -#define INITW 500 - -/* worm options */ -#define SEGMENTS 20 -#define SEG_RADIUS 0.01 -#define STEPSIZE 0.01 -#define MAXTURN (20 * RADIAN) /* in radians */ -#define MAXWORMS 400 -#define INITWORMS 40 -#define MARKTICKS 100 - -typedef struct worm_s { - float dir; /* direction in radians */ - float segx[SEGMENTS]; /* location of segments. */ - float segy[SEGMENTS]; - GLfloat *color; /* pointer to the RGB color of the worm */ - int head; /* which elt of seg[xy] is currently head */ - /* the tail is always (head+1 % SEGMENTS) */ -} worm_t; - -/* colors available for worms... this is a huge mess because I - originally brought these colors in from rgb.txt as integers, - but they have to be normalized into floats. And C is stupid - and truncates them unless I add the annoying .0's - */ - -const GLfloat colors[][3] = { - { 255.0/255.0, 0.0/255.0, 0.0/255.0}, - { 238.0/255.0, 0.0/255.0, 0.0/255.0}, - { 205.0/255.0, 0.0/255.0, 0.0/255.0}, - { 0.0/255.0, 255.0/255.0, 0.0/255.0}, - { 0.0/255.0, 238.0/255.0, 0.0/255.0}, - { 0.0/255.0, 205.0/255.0, 0.0/255.0}, - { 0.0/255.0, 0.0/255.0, 255.0/255.0}, - { 0.0/255.0, 0.0/255.0, 238.0/255.0}, - { 0.0/255.0, 0.0/255.0, 205.0/255.0}, - { 255.0/255.0, 255.0/255.0, 0.0/255.0}, - { 238.0/255.0, 238.0/255.0, 0.0/255.0}, - { 205.0/255.0, 205.0/255.0, 0.0/255.0}, - { 0.0/255.0, 255.0/255.0, 255.0/255.0}, - { 0.0/255.0, 238.0/255.0, 238.0/255.0}, - { 0.0/255.0, 205.0/255.0, 205.0/255.0}, - { 255.0/255.0, 0.0/255.0, 255.0/255.0}, - { 238.0/255.0, 0.0/255.0, 238.0/255.0}, - { 205.0/255.0, 0.0/255.0, 205.0/255.0}, -}; - -#define COLORS 18 - -/* define's for the menu item numbers */ -#define MENU_NULL 0 -#define MENU_FILLED 1 -#define MENU_UNFILLED 2 -#define MENU_QUIT 3 - -/* flag to determine how to draw worms; set by popup menu -- starts out - filled in - */ -int filled = 1; - -/* the global worm array */ -worm_t worms[MAXWORMS]; -int curworms = 0; - -/* global window extent variables */ -GLfloat gleft = -1.0, gright = 1.0, gtop = 1.0, gbottom = -1.0; -GLint wsize, hsize; - -/* globals for marking */ -float markx, marky; -int marktime; - -/* prototypes */ -void mydisplay(void); - -void drawCircle(float x0, float y0, float radius) -{ - int i; - float angle; - - /* a table of offsets for a circle (used in drawCircle) */ - static float circlex[CIRCLE_POINTS]; - static float circley[CIRCLE_POINTS]; - static int inited = 0; - - if (! inited) { - for (i = 0; i < CIRCLE_POINTS; i++) { - angle = 2.0 * M_PI * i / CIRCLE_POINTS; - circlex[i] = cos(angle); - circley[i] = sin(angle); - } - inited++; - }; - - if (filled) - glBegin(GL_POLYGON); - else - glBegin(GL_LINE_LOOP); - for(i = 0; i < CIRCLE_POINTS; i++) - glVertex2f((radius * circlex[i]) + x0, (radius * circley[i]) + y0); - glEnd(); - - return; -} - -void drawWorm(worm_t *theworm) -{ - int i; - - glColor3fv(theworm->color); - for (i = 0; i < SEGMENTS; i++) - drawCircle(theworm->segx[i], theworm->segy[i], SEG_RADIUS); - - return; -} - -void myinit(void) -{ - int i, j, thecolor; - float thedir; - - srand48(time(NULL)); - - curworms = INITWORMS; - - for (j = 0; j < curworms; j++) { - /* divide the circle up into a number of pieces, and send one worm - each direction. - */ - worms[j].dir = ((2.0 * M_PI) / curworms) * j; - thedir = worms[j].dir; - - worms[j].segx[0] = 0.0; - worms[j].segy[0] = 0.0; - - for (i = 1; i < SEGMENTS; i++) { - worms[j].segx[i] = worms[j].segx[i-1] + (STEPSIZE * cos(thedir)); - worms[j].segy[i] = worms[j].segx[i-1] + (STEPSIZE * sin(thedir)); - }; - worms[j].head = (SEGMENTS - 1); - - /* make this worm one of the predefined colors */ - thecolor = (int) COLORS * drand48(); - worms[j].color = (GLfloat *) colors[thecolor]; - }; - - /* now that they are all set, draw them as though they have just been - uncovered - */ - mydisplay(); -} - - - -/* this routine is called after the coordinates are changed to make sure - worms outside the window come back into view right away. (This behavior - is arbitrary, but they are my worms, and they'll do what I please!) - */ - -void warpWorms(void) -{ - register int j, head; - - for (j = 0; j < curworms; j++) { - head = worms[j].head; - - if (worms[j].segx[head] < gleft) - worms[j].segx[head] = gleft; - if (worms[j].segx[head] > gright) - worms[j].segx[head] = gright; - if (worms[j].segx[head] > gtop) - worms[j].segx[head] = gtop; - if (worms[j].segx[head] < gbottom) - worms[j].segx[head] = gbottom; - } -} - -/* a bunch of extra hoopla goes on here to change the Global coordinate - space at teh same rate that the window itself changes. This give the - worms more space to play in when the window gets bigger, and vice versa. - The alternative would be to end up with big worms when the window gets - big, and that looks silly. - */ - -void myreshape (GLsizei w, GLsizei h) -{ - float ratiow = (float) w/INITW; - float ratioh = (float) h/INITH; - - glViewport(0,0,w,h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - - gleft = -1 * ratiow; - gright = 1 * ratiow; - gbottom = -1 * ratioh; - gtop = 1 * ratioh; - - gluOrtho2D(gleft, gright, gbottom, gtop); - warpWorms(); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - wsize = w; hsize = h; - - return; -} - - -/* given a pointer to a worm, this routine will decide on the next - place to put a head and will advance the head pointer - */ - -void updateWorm(worm_t *theworm) -{ - int newhead; - float prevx, prevy; - float newh = -1, newv = -1; - float num, denom; - - /* make an easy to reference local copy of head, and update it in - the worm structure. The new head replaces the old tail. - */ - newhead = (theworm->head + 1) % SEGMENTS; - - prevx = theworm->segx[theworm->head]; - prevy = theworm->segy[theworm->head]; - - /* if there is a mark, home in on it. After this, we still allow - the random adjustment so that the worms play around a bit on the - way to the mark. - */ - if (marktime) { - num = marky - prevy; - denom = markx - prevx; - theworm->dir = atan2(num,denom); - }; - - /* make a bit of a turn: between -MAXTURN and MAXTURN degrees change - to dir (actualy theworm->dir is in radians for later use with - cosf(). - */ - theworm->dir += (MAXTURN - (2 * MAXTURN * (float) drand48())); - - theworm->segx[newhead] = prevx + (STEPSIZE * cos(theworm->dir)); - theworm->segy[newhead] = prevy + (STEPSIZE * sin(theworm->dir)); - - /* if we are at an edge, change direction so that we are heading away - from the edge in question. There might be a problem here handling - corner cases, but I have never seen a worm get stuck, so what the - heck... - */ - if (theworm->segx[newhead] <= gleft) - theworm->dir = 0; - if (theworm->segx[newhead] >= gright) - theworm->dir = (180 * RADIAN); - if (theworm->segy[newhead] >= gtop) - theworm->dir = (270 * RADIAN); - if (theworm->segy[newhead] <= gbottom) - theworm->dir = (90 * RADIAN); - - if ((newv >= 0) || (newh >= 0)) { - newh = (newh<0) ? 0 : newh; - newv = (newv<0) ? 0 : newv; - }; - - /* update the permanent copy of the new head index */ - theworm->head = newhead; -} - -/* updates the worms -- drawing takes place here, which may actually - be a bad idea. It will probably be better to update the internal - state only here, then post a redisplay using GLUT. -*/ - -void myidle (void) -{ - register int i, tail; - - if (marktime) - marktime--; - - for (i = 0; i < curworms; i++) { - /* first find tail */ - tail = (worms[i].head + 1) % SEGMENTS; - - /* erase tail */ - glColor3f(0.0, 0.0, 0.0); - drawCircle(worms[i].segx[tail], worms[i].segy[tail], SEG_RADIUS); - - /* update head segment position and head pointer */ - updateWorm(&worms[i]); - - /* draw head */ - glColor3fv(worms[i].color); - drawCircle(worms[i].segx[worms[i].head], worms[i].segy[worms[i].head], - SEG_RADIUS); - }; - - glFlush(); - return; -} - -/* redraws the worms from scratch -- called after a window gets obscured */ - -void mydisplay(void) -{ - int i; - -#ifndef WORMS_EAT_BACKGROUND - glClearColor(0.0, 0.0, 0.0, 0.0); - glClear(GL_COLOR_BUFFER_BIT); -#endif - - for (i = 0; i < curworms; i++) - drawWorm(&worms[i]); - - glFlush(); - return; -} - -/* this routine gets called when the mouse is clicked. The incoming - coordinates are in screen coordinates relative to the upper-left corner - of the window, and oriented according to X, not to GL. So, here we - convert the given coordinates into worm-world coordinates, and set the - mark. - */ - -void markSpot(int x, int y) -{ - /* map into the corridinate space I am using */ - markx = (float)((x - wsize/2)*(gright - gleft)/wsize); - marky = -(float)((y - hsize/2)*(gtop - gbottom)/hsize); - - marktime = MARKTICKS; -} - -void handleMouse(int btn, int state, int x, int y) -{ - switch (btn) { - - case (GLUT_LEFT_BUTTON): - if (state == GLUT_UP) - markSpot(x,y); - break; - - default: - /* do nothing */ - break; - } - - return; -} - -void menuSelect(int value) -{ - switch (value) { - case MENU_FILLED: - filled = 1; - break; - - case MENU_UNFILLED: - filled = 0; - break; - - case MENU_QUIT: - exit(0); - break; - - case MENU_NULL: - return; - - default: - break; - }; - - glutPostRedisplay(); - return; -} - -void visibility(int status) -{ - if (status == GLUT_VISIBLE) - glutIdleFunc(myidle); - else - glutIdleFunc(NULL); -} - -/* this is where GLUT is initialized, and the whole thing starts up. - All animation and redisplay happens via the callbacks registered below. - */ - -int main(int argc, char **argv) -{ - int fillmenu = 0; - - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); - glutInitWindowSize(INITW, INITH); - glutCreateWindow("Worms"); - - myinit(); - - glutDisplayFunc(mydisplay); - glutVisibilityFunc(visibility); - glutReshapeFunc(myreshape); - glutMouseFunc(handleMouse); - - /* popup menu, courtsey of GLUT */ - fillmenu = glutCreateMenu(menuSelect); - glutAddMenuEntry("Filled", MENU_FILLED); - glutAddMenuEntry("Unfilled", MENU_UNFILLED); - - glutCreateMenu(menuSelect); - glutAddMenuEntry(" WORMS", MENU_NULL); - glutAddSubMenu("Drawing Mode", fillmenu); - glutAddMenuEntry("Quit", MENU_QUIT); - - glutAttachMenu(GLUT_RIGHT_BUTTON); - - glutMainLoop(); - return 0; -} - - diff --git a/lib/glut-3.7.6/progs/contrib/worms.dsp b/lib/glut-3.7.6/progs/contrib/worms.dsp deleted file mode 100644 index fe85e9666..000000000 --- a/lib/glut-3.7.6/progs/contrib/worms.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="worms" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=worms - 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 "worms.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 "worms.mak" CFG="worms - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "worms - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "worms - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "worms - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "worms - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "worms - Win32 Release" -# Name "worms - Win32 Debug" -# Begin Source File - -SOURCE=.\worms.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/data/00.rgb b/lib/glut-3.7.6/progs/data/00.rgb deleted file mode 100644 index ec7f50f58937179bbc7a35dd8b15db81ae3282d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13275 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 X#*$lw4b#g%BqSm->We}wAqxEuk{lsk diff --git a/lib/glut-3.7.6/progs/data/02.rgb b/lib/glut-3.7.6/progs/data/02.rgb deleted file mode 100644 index 56b846111207a7178ca3753b8f1d709f78398882..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13284 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 diff --git a/lib/glut-3.7.6/progs/data/03.rgb b/lib/glut-3.7.6/progs/data/03.rgb deleted file mode 100644 index 3ec52599a05ba4598c6940e8aa3bd54b284fd888..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14103 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�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 diff --git a/lib/glut-3.7.6/progs/data/05.rgb b/lib/glut-3.7.6/progs/data/05.rgb deleted file mode 100644 index 84e719949c9d23c8ee256e10ac825d534400f4ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7160 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 diff --git a/lib/glut-3.7.6/progs/data/brick.rgb b/lib/glut-3.7.6/progs/data/brick.rgb deleted file mode 100644 index d37b755d9e5ca24ebbe22dbbc46332dcda1fd911..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66048 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 diff --git a/lib/glut-3.7.6/progs/data/clouds.bw b/lib/glut-3.7.6/progs/data/clouds.bw deleted file mode 100644 index fe40dce1b0b33b0af152b29b2db1b0eef297f508..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17352 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 diff --git a/lib/glut-3.7.6/progs/data/f15.data b/lib/glut-3.7.6/progs/data/f15.data deleted file mode 100644 index ac0739123..000000000 --- a/lib/glut-3.7.6/progs/data/f15.data +++ /dev/null @@ -1,13182 +0,0 @@ -v - 0.701655 -0.031842 0.0 - 0.701655 -0.031799 0.000435 - 0.701655 -0.031886 0.000957 - 0.701655 -0.031973 0.001479 - 0.701655 -0.03206 0.001914 - 0.701655 -0.032233 0.002436 - 0.701655 -0.032407 0.002871 - 0.701655 -0.032582 0.003393 - 0.701655 -0.032842 0.003828 - 0.701655 -0.033103 0.004263 - 0.701655 -0.033365 0.004611 - 0.701655 -0.033625 0.005046 - 0.701655 -0.033974 0.005394 - 0.701655 -0.034322 0.005742 - 0.701655 -0.034757 0.00609 - 0.701655 -0.035105 0.006351 - 0.701655 -0.03554 0.006699 - 0.701655 -0.035974 0.006873 - 0.701655 -0.036497 0.007134 - 0.701655 -0.036931 0.007308 - 0.701655 -0.037367 0.007482 - 0.701655 -0.037889 0.007569 - 0.701655 -0.03841 0.007656 - 0.701655 -0.038846 0.007743 - 0.701655 -0.039368 0.00783 - 0.701655 -0.039889 0.00783 - 0.701655 -0.040411 0.007743 - 0.701655 -0.040847 0.007656 - 0.701655 -0.041368 0.007569 - 0.701655 -0.041891 0.007482 - 0.701655 -0.042326 0.007308 - 0.701655 -0.042847 0.007134 - 0.701655 -0.043283 0.006873 - 0.701655 -0.043717 0.006699 - 0.701655 -0.044153 0.006351 - 0.701655 -0.0445 0.00609 - 0.701655 -0.044935 0.005742 - 0.701655 -0.045284 0.005394 - 0.701655 -0.045632 0.005046 - 0.701655 -0.045892 0.004611 - 0.701655 -0.046241 0.004263 - 0.701655 -0.046501 0.003828 - 0.701655 -0.046675 0.003393 - 0.701655 -0.046937 0.002871 - 0.701655 -0.047111 0.002436 - 0.701655 -0.047197 0.001914 - 0.701655 -0.047284 0.001479 - 0.701655 -0.047371 0.000957 - 0.701655 -0.047458 0.000435 - 0.701655 -0.047458 0.0 -e -v - 0.688431 -0.024447 0.0 - 0.688431 -0.024403 0.000783 - 0.688431 -0.02449 0.001566 - 0.688431 -0.024665 0.002436 - 0.688431 -0.024838 0.003219 - 0.688431 -0.0251 0.004002 - 0.688431 -0.025361 0.004785 - 0.688431 -0.025709 0.005568 - 0.688431 -0.026057 0.006264 - 0.688431 -0.026492 0.007047 - 0.688431 -0.027013 0.007656 - 0.688431 -0.027448 0.008352 - 0.688431 -0.028058 0.008961 - 0.688431 -0.028667 0.009483 - 0.688431 -0.029275 0.010092 - 0.688431 -0.029972 0.010527 - 0.688431 -0.030668 0.011049 - 0.688431 -0.031363 0.011397 - 0.688431 -0.03206 0.011745 - 0.688431 -0.032842 0.012093 - 0.688431 -0.033625 0.012354 - 0.688431 -0.034495 0.012528 - 0.688431 -0.035278 0.012702 - 0.688431 -0.036061 0.012789 - 0.688431 -0.036931 0.012876 - 0.688431 -0.037714 0.012876 - 0.688431 -0.038585 0.012789 - 0.688431 -0.039368 0.012702 - 0.688431 -0.040238 0.012528 - 0.688431 -0.041021 0.012354 - 0.688431 -0.041804 0.012093 - 0.688431 -0.042587 0.011745 - 0.688431 -0.043283 0.011397 - 0.688431 -0.044066 0.011049 - 0.688431 -0.044762 0.010527 - 0.688431 -0.045371 0.010092 - 0.688431 -0.045979 0.009483 - 0.688431 -0.046588 0.008961 - 0.688431 -0.047197 0.008352 - 0.688431 -0.04772 0.007656 - 0.688431 -0.048154 0.007047 - 0.688431 -0.04859 0.006264 - 0.688431 -0.048937 0.005568 - 0.688431 -0.049286 0.004785 - 0.688431 -0.049633 0.004002 - 0.688431 -0.049808 0.003219 - 0.688431 -0.049982 0.002436 - 0.688431 -0.050156 0.001566 - 0.688431 -0.050242 0.000783 - 0.688431 -0.050242 0.0 -e -v - 0.666246 -0.011571 0.0 - 0.666246 -0.011614 0.001392 - 0.666246 -0.011702 0.002871 - 0.666246 -0.011963 0.00435 - 0.666246 -0.012311 0.005829 - 0.666246 -0.012745 0.007221 - 0.666246 -0.013268 0.008613 - 0.666246 -0.01379 0.009918 - 0.666246 -0.014485 0.011223 - 0.666246 -0.015268 0.012528 - 0.666246 -0.016138 0.013746 - 0.666246 -0.017009 0.014877 - 0.666246 -0.018052 0.016008 - 0.666246 -0.019096 0.016965 - 0.666246 -0.020227 0.017922 - 0.666246 -0.021358 0.018879 - 0.666246 -0.022664 0.019662 - 0.666246 -0.023882 0.020358 - 0.666246 -0.025274 0.020967 - 0.666246 -0.026579 0.021576 - 0.666246 -0.028058 0.022011 - 0.666246 -0.02945 0.022359 - 0.666246 -0.030928 0.022707 - 0.666246 -0.03232 0.022881 - 0.666246 -0.033799 0.022968 - 0.666246 -0.035278 0.022968 - 0.666246 -0.036757 0.022881 - 0.666246 -0.038236 0.022707 - 0.666246 -0.039715 0.022359 - 0.666246 -0.041108 0.022011 - 0.666246 -0.0425 0.021576 - 0.666246 -0.043892 0.020967 - 0.666246 -0.045196 0.020358 - 0.666246 -0.046501 0.019662 - 0.666246 -0.04772 0.018879 - 0.666246 -0.048937 0.017922 - 0.666246 -0.050069 0.016965 - 0.666246 -0.051112 0.016008 - 0.666246 -0.05207 0.014877 - 0.666246 -0.053027 0.013746 - 0.666246 -0.053897 0.012528 - 0.666246 -0.054593 0.011223 - 0.666246 -0.055289 0.009918 - 0.666246 -0.055898 0.008613 - 0.666246 -0.056419 0.007221 - 0.666246 -0.056855 0.005829 - 0.666246 -0.057202 0.00435 - 0.666246 -0.057377 0.002871 - 0.666246 -0.057551 0.001392 - 0.666246 -0.057551 0.0 -e -v - 0.622137 0.002262 0.0 - 0.622137 0.002219 0.002088 - 0.622137 0.001958 0.004176 - 0.622137 0.001696 0.006177 - 0.622137 0.001174 0.008265 - 0.622137 0.000565 0.010266 - 0.622137 -0.000131 0.012267 - 0.622137 -0.001001 0.014181 - 0.622137 -0.001958 0.016008 - 0.622137 -0.003001 0.017748 - 0.622137 -0.004219 0.019488 - 0.622137 -0.005524 0.021141 - 0.622137 -0.006917 0.022707 - 0.622137 -0.008482 0.024186 - 0.622137 -0.010049 0.025491 - 0.622137 -0.011702 0.026796 - 0.622137 -0.013442 0.027927 - 0.622137 -0.015268 0.028971 - 0.622137 -0.017182 0.029841 - 0.622137 -0.019096 0.030624 - 0.622137 -0.021097 0.03132 - 0.622137 -0.023186 0.031842 - 0.622137 -0.025186 0.03219 - 0.622137 -0.027275 0.032451 - 0.622137 -0.029362 0.032625 - 0.622137 -0.03145 0.032625 - 0.622137 -0.033539 0.032451 - 0.622137 -0.035627 0.03219 - 0.622137 -0.037714 0.031842 - 0.622137 -0.039715 0.03132 - 0.622137 -0.041717 0.030624 - 0.622137 -0.04363 0.029841 - 0.622137 -0.045545 0.028971 - 0.622137 -0.047371 0.027927 - 0.622137 -0.049112 0.026796 - 0.622137 -0.050765 0.025491 - 0.622137 -0.052418 0.024186 - 0.622137 -0.053897 0.022707 - 0.622137 -0.055289 0.021141 - 0.622137 -0.056594 0.019488 - 0.622137 -0.057811 0.017748 - 0.622137 -0.058943 0.016008 - 0.622137 -0.0599 0.014181 - 0.622137 -0.060683 0.012267 - 0.622137 -0.061466 0.010266 - 0.622137 -0.062075 0.008265 - 0.622137 -0.062509 0.006177 - 0.622137 -0.062858 0.004176 - 0.622137 -0.063032 0.002088 - 0.622137 -0.063119 0.0 -e -v - 0.562455 0.019227 0.0 - 0.562455 0.019183 0.002697 - 0.562455 0.018923 0.005481 - 0.562455 0.018488 0.008265 - 0.562455 0.017879 0.010962 - 0.562455 0.017096 0.013572 - 0.562455 0.016138 0.016182 - 0.562455 0.015007 0.018705 - 0.562455 0.013702 0.021228 - 0.562455 0.012311 0.023577 - 0.562455 0.010744 0.025839 - 0.562455 0.009004 0.028014 - 0.562455 0.007091 0.030102 - 0.562455 0.005089 0.032016 - 0.562455 0.003001 0.033756 - 0.562455 0.000827 0.035496 - 0.562455 -0.001522 0.036975 - 0.562455 -0.003958 0.038367 - 0.562455 -0.006481 0.039498 - 0.562455 -0.009004 0.040542 - 0.562455 -0.011702 0.041412 - 0.562455 -0.014311 0.042195 - 0.562455 -0.017096 0.042717 - 0.562455 -0.019793 0.043065 - 0.562455 -0.022576 0.043239 - 0.562455 -0.025361 0.043239 - 0.562455 -0.028144 0.043065 - 0.562455 -0.030928 0.042717 - 0.562455 -0.033625 0.042195 - 0.562455 -0.036323 0.041412 - 0.562455 -0.038932 0.040542 - 0.562455 -0.041543 0.039498 - 0.562455 -0.043979 0.038367 - 0.562455 -0.046415 0.036975 - 0.562455 -0.048763 0.035496 - 0.562455 -0.050939 0.033756 - 0.562455 -0.053114 0.032016 - 0.562455 -0.055115 0.030102 - 0.562455 -0.056942 0.028014 - 0.562455 -0.058681 0.025839 - 0.562455 -0.060247 0.023577 - 0.562455 -0.061726 0.021228 - 0.562455 -0.062945 0.018705 - 0.562455 -0.064075 0.016182 - 0.562455 -0.065032 0.013572 - 0.562455 -0.065816 0.010962 - 0.562455 -0.066425 0.008265 - 0.562455 -0.066946 0.005481 - 0.562455 -0.067208 0.002697 - 0.562455 -0.067295 0.0 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.031799 0.0 - 0.688431 -0.024403 0.0 - 0.666246 -0.011528 0.0 - 0.622137 0.002305 0.0 - 0.562455 0.019271 0.0 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.031799 0.000435 - 0.688431 -0.024403 0.000783 - 0.666246 -0.011614 0.001392 - 0.622137 0.002219 0.002088 - 0.562455 0.019183 0.002697 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.031886 0.000957 - 0.688431 -0.02449 0.001566 - 0.666246 -0.011702 0.002871 - 0.622137 0.001958 0.004176 - 0.562455 0.018923 0.005481 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.031973 0.001479 - 0.688431 -0.024665 0.002436 - 0.666246 -0.011963 0.00435 - 0.622137 0.001696 0.006177 - 0.562455 0.018488 0.008265 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.03206 0.001914 - 0.688431 -0.024838 0.003219 - 0.666246 -0.012311 0.005829 - 0.622137 0.001174 0.008265 - 0.562455 0.017879 0.010962 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.032233 0.002436 - 0.688431 -0.0251 0.004002 - 0.666246 -0.012745 0.007221 - 0.622137 0.000565 0.010266 - 0.562455 0.017096 0.013572 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.032407 0.002871 - 0.688431 -0.025361 0.004785 - 0.666246 -0.013268 0.008613 - 0.622137 -0.000131 0.012267 - 0.562455 0.016138 0.016182 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.032582 0.003393 - 0.688431 -0.025709 0.005568 - 0.666246 -0.01379 0.009918 - 0.622137 -0.001001 0.014181 - 0.562455 0.015007 0.018705 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.032842 0.003828 - 0.688431 -0.026057 0.006264 - 0.666246 -0.014485 0.011223 - 0.622137 -0.001958 0.016008 - 0.562455 0.013702 0.021228 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.033103 0.004263 - 0.688431 -0.026492 0.007047 - 0.666246 -0.015268 0.012528 - 0.622137 -0.003001 0.017748 - 0.562455 0.012311 0.023577 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.033365 0.004611 - 0.688431 -0.027013 0.007656 - 0.666246 -0.016138 0.013746 - 0.622137 -0.004219 0.019488 - 0.562455 0.010744 0.025839 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.033625 0.005046 - 0.688431 -0.027448 0.008352 - 0.666246 -0.017009 0.014877 - 0.622137 -0.005524 0.021141 - 0.562455 0.009004 0.028014 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.033974 0.005394 - 0.688431 -0.028058 0.008961 - 0.666246 -0.018052 0.016008 - 0.622137 -0.006917 0.022707 - 0.562455 0.007091 0.030102 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.034322 0.005742 - 0.688431 -0.028667 0.009483 - 0.666246 -0.019096 0.016965 - 0.622137 -0.008482 0.024186 - 0.562455 0.005089 0.032016 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.034757 0.00609 - 0.688431 -0.029275 0.010092 - 0.666246 -0.020227 0.017922 - 0.622137 -0.010049 0.025491 - 0.562455 0.003001 0.033756 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.035105 0.006351 - 0.688431 -0.029972 0.010527 - 0.666246 -0.021358 0.018879 - 0.622137 -0.011702 0.026796 - 0.562455 0.000827 0.035496 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.03554 0.006699 - 0.688431 -0.030668 0.011049 - 0.666246 -0.022664 0.019662 - 0.622137 -0.013442 0.027927 - 0.562455 -0.001522 0.036975 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.035974 0.006873 - 0.688431 -0.031363 0.011397 - 0.666246 -0.023882 0.020358 - 0.622137 -0.015268 0.028971 - 0.562455 -0.003958 0.038367 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.036497 0.007134 - 0.688431 -0.03206 0.011745 - 0.666246 -0.025274 0.020967 - 0.622137 -0.017182 0.029841 - 0.562455 -0.006481 0.039498 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.036931 0.007308 - 0.688431 -0.032842 0.012093 - 0.666246 -0.026579 0.021576 - 0.622137 -0.019096 0.030624 - 0.562455 -0.009004 0.040542 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.037367 0.007482 - 0.688431 -0.033625 0.012354 - 0.666246 -0.028058 0.022011 - 0.622137 -0.021097 0.03132 - 0.562455 -0.011702 0.041412 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.037889 0.007569 - 0.688431 -0.034495 0.012528 - 0.666246 -0.02945 0.022359 - 0.622137 -0.023186 0.031842 - 0.562455 -0.014311 0.042195 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.03841 0.007656 - 0.688431 -0.035278 0.012702 - 0.666246 -0.030928 0.022707 - 0.622137 -0.025186 0.03219 - 0.562455 -0.017096 0.042717 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.038846 0.007743 - 0.688431 -0.036061 0.012789 - 0.666246 -0.03232 0.022881 - 0.622137 -0.027275 0.032451 - 0.562455 -0.019793 0.043065 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.039368 0.00783 - 0.688431 -0.036931 0.012876 - 0.666246 -0.033799 0.022968 - 0.622137 -0.029362 0.032625 - 0.562455 -0.022576 0.043239 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.039889 0.00783 - 0.688431 -0.037714 0.012876 - 0.666246 -0.035278 0.022968 - 0.622137 -0.03145 0.032625 - 0.562455 -0.025361 0.043239 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.040411 0.007743 - 0.688431 -0.038585 0.012789 - 0.666246 -0.036757 0.022881 - 0.622137 -0.033539 0.032451 - 0.562455 -0.028144 0.043065 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.040847 0.007656 - 0.688431 -0.039368 0.012702 - 0.666246 -0.038236 0.022707 - 0.622137 -0.035627 0.03219 - 0.562455 -0.030928 0.042717 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.041368 0.007569 - 0.688431 -0.040238 0.012528 - 0.666246 -0.039715 0.022359 - 0.622137 -0.037714 0.031842 - 0.562455 -0.033625 0.042195 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.041891 0.007482 - 0.688431 -0.041021 0.012354 - 0.666246 -0.041108 0.022011 - 0.622137 -0.039715 0.03132 - 0.562455 -0.036323 0.041412 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.042326 0.007308 - 0.688431 -0.041804 0.012093 - 0.666246 -0.0425 0.021576 - 0.622137 -0.041717 0.030624 - 0.562455 -0.038932 0.040542 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.042847 0.007134 - 0.688431 -0.042587 0.011745 - 0.666246 -0.043892 0.020967 - 0.622137 -0.04363 0.029841 - 0.562455 -0.041543 0.039498 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.043283 0.006873 - 0.688431 -0.043283 0.011397 - 0.666246 -0.045196 0.020358 - 0.622137 -0.045545 0.028971 - 0.562455 -0.043979 0.038367 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.043717 0.006699 - 0.688431 -0.044066 0.011049 - 0.666246 -0.046501 0.019662 - 0.622137 -0.047371 0.027927 - 0.562455 -0.046415 0.036975 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.044153 0.006351 - 0.688431 -0.044762 0.010527 - 0.666246 -0.04772 0.018879 - 0.622137 -0.049112 0.026796 - 0.562455 -0.048763 0.035496 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.0445 0.00609 - 0.688431 -0.045371 0.010092 - 0.666246 -0.048937 0.017922 - 0.622137 -0.050765 0.025491 - 0.562455 -0.050939 0.033756 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.044935 0.005742 - 0.688431 -0.045979 0.009483 - 0.666246 -0.050069 0.016965 - 0.622137 -0.052418 0.024186 - 0.562455 -0.053114 0.032016 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.045284 0.005394 - 0.688431 -0.046588 0.008961 - 0.666246 -0.051112 0.016008 - 0.622137 -0.053897 0.022707 - 0.562455 -0.055115 0.030102 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.045632 0.005046 - 0.688431 -0.047197 0.008352 - 0.666246 -0.05207 0.014877 - 0.622137 -0.055289 0.021141 - 0.562455 -0.056942 0.028014 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.045892 0.004611 - 0.688431 -0.04772 0.007656 - 0.666246 -0.053027 0.013746 - 0.622137 -0.056594 0.019488 - 0.562455 -0.058681 0.025839 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.046241 0.004263 - 0.688431 -0.048154 0.007047 - 0.666246 -0.053897 0.012528 - 0.622137 -0.057811 0.017748 - 0.562455 -0.060247 0.023577 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.046501 0.003828 - 0.688431 -0.04859 0.006264 - 0.666246 -0.054593 0.011223 - 0.622137 -0.058943 0.016008 - 0.562455 -0.061726 0.021228 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.046675 0.003393 - 0.688431 -0.048937 0.005568 - 0.666246 -0.055289 0.009918 - 0.622137 -0.0599 0.014181 - 0.562455 -0.062945 0.018705 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.046937 0.002871 - 0.688431 -0.049286 0.004785 - 0.666246 -0.055898 0.008613 - 0.622137 -0.060683 0.012267 - 0.562455 -0.064075 0.016182 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.047111 0.002436 - 0.688431 -0.049633 0.004002 - 0.666246 -0.056419 0.007221 - 0.622137 -0.061466 0.010266 - 0.562455 -0.065032 0.013572 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.047197 0.001914 - 0.688431 -0.049808 0.003219 - 0.666246 -0.056855 0.005829 - 0.622137 -0.062075 0.008265 - 0.562455 -0.065816 0.010962 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.047284 0.001479 - 0.688431 -0.049982 0.002436 - 0.666246 -0.057202 0.00435 - 0.622137 -0.062509 0.006177 - 0.562455 -0.066425 0.008265 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.047371 0.000957 - 0.688431 -0.050156 0.001566 - 0.666246 -0.057377 0.002871 - 0.622137 -0.062858 0.004176 - 0.562455 -0.066946 0.005481 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.047458 0.000435 - 0.688431 -0.050242 0.000783 - 0.666246 -0.057551 0.001392 - 0.622137 -0.063032 0.002088 - 0.562455 -0.067208 0.002697 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.047458 0.0 - 0.688431 -0.050242 0.0 - 0.666246 -0.057551 0.0 - 0.622137 -0.063119 0.0 - 0.562455 -0.067295 0.0 -e -v - 0.562455 0.01914 0.0 - 0.562455 0.01901 0.001218 - 0.562455 0.018835 0.002523 - 0.562455 0.018748 0.003741 - 0.562455 0.018575 0.005046 - 0.562455 0.018313 0.006264 - 0.562455 0.01814 0.007482 - 0.562455 0.017879 0.008787 - 0.562455 0.017617 0.010005 - 0.562455 0.017357 0.011223 - 0.562455 0.017096 0.012528 - 0.562455 0.016748 0.013746 - 0.562455 0.016313 0.014964 - 0.562455 0.015878 0.016095 - 0.562455 0.015442 0.017313 - 0.562455 0.015007 0.018531 - 0.562455 0.013442 0.021663 - 0.562455 0.011702 0.024621 - 0.562455 0.009701 0.027405 - 0.562455 0.007438 0.030102 - 0.562455 0.005003 0.032538 - 0.562455 0.002305 0.034713 - 0.562455 -0.000565 0.036714 - 0.562455 -0.003523 0.038454 - 0.562455 -0.006743 0.039933 - 0.562455 -0.009961 0.041064 - 0.562455 -0.013354 0.042021 - 0.562455 -0.016748 0.042804 - 0.562455 -0.020141 0.043413 - 0.562455 -0.02362 0.043674 - 0.562455 -0.0271 0.043587 - 0.562455 -0.030493 0.043152 - 0.562455 -0.033886 0.042369 - 0.562455 -0.037193 0.041412 - 0.562455 -0.040498 0.040281 - 0.562455 -0.043717 0.038889 - 0.562455 -0.046762 0.037236 - 0.562455 -0.04972 0.035496 - 0.562455 -0.052591 0.033495 - 0.562455 -0.055289 0.031233 - 0.562455 -0.057638 0.028797 - 0.562455 -0.059813 0.026013 - 0.562455 -0.061726 0.023142 - 0.562455 -0.06338 0.020097 - 0.562455 -0.064772 0.016878 - 0.562455 -0.065903 0.013659 - 0.562455 -0.066859 0.010266 - 0.562455 -0.067556 0.006873 - 0.562455 -0.06799 0.003393 - 0.562455 -0.068164 0.0 -e -v - 0.522696 0.029232 0.0 - 0.522696 0.029189 0.001305 - 0.522696 0.029102 0.002697 - 0.522696 0.028927 0.004089 - 0.522696 0.028754 0.005481 - 0.522696 0.028579 0.006786 - 0.522696 0.028406 0.008178 - 0.522696 0.028231 0.00957 - 0.522696 0.027971 0.010875 - 0.522696 0.02771 0.012267 - 0.522696 0.027448 0.013572 - 0.522696 0.0271 0.014877 - 0.522696 0.026665 0.016269 - 0.522696 0.026231 0.017574 - 0.522696 0.025796 0.018879 - 0.522696 0.025361 0.020184 - 0.522696 0.023447 0.023577 - 0.522696 0.021358 0.02697 - 0.522696 0.019096 0.030189 - 0.522696 0.016573 0.033234 - 0.522696 0.013876 0.036018 - 0.522696 0.010744 0.038454 - 0.522696 0.007525 0.040629 - 0.522696 0.004045 0.042543 - 0.522696 0.000565 0.044283 - 0.522696 -0.003089 0.045762 - 0.522696 -0.00683 0.04698 - 0.522696 -0.010658 0.04785 - 0.522696 -0.014573 0.048372 - 0.522696 -0.018488 0.048546 - 0.522696 -0.022489 0.048372 - 0.522696 -0.026405 0.04785 - 0.522696 -0.030233 0.047154 - 0.522696 -0.034061 0.046197 - 0.522696 -0.037802 0.044892 - 0.522696 -0.041368 0.043326 - 0.522696 -0.044849 0.041499 - 0.522696 -0.048154 0.039324 - 0.522696 -0.051286 0.036888 - 0.522696 -0.054244 0.034365 - 0.522696 -0.057115 0.031668 - 0.522696 -0.0599 0.028884 - 0.522696 -0.062509 0.025926 - 0.522696 -0.064598 0.02262 - 0.522696 -0.066338 0.019053 - 0.522696 -0.06773 0.015399 - 0.522696 -0.068861 0.011658 - 0.522696 -0.06973 0.00783 - 0.522696 -0.070253 0.003915 - 0.522696 -0.070427 0.0 -e -v - 0.48285 0.039324 0.0 - 0.48285 0.039542 0.001305 - 0.48285 0.039715 0.00261 - 0.48285 0.039802 0.003915 - 0.48285 0.039802 0.00522 - 0.48285 0.039629 0.006612 - 0.48285 0.039455 0.007917 - 0.48285 0.039193 0.009222 - 0.48285 0.038846 0.010527 - 0.48285 0.038498 0.011832 - 0.48285 0.038149 0.01305 - 0.48285 0.037802 0.014355 - 0.48285 0.037367 0.01566 - 0.48285 0.036931 0.016878 - 0.48285 0.03641 0.018096 - 0.48285 0.035887 0.019314 - 0.48285 0.034061 0.023229 - 0.48285 0.031886 0.02697 - 0.48285 0.029362 0.03045 - 0.48285 0.026579 0.033756 - 0.48285 0.023534 0.036801 - 0.48285 0.020314 0.039585 - 0.48285 0.016748 0.042108 - 0.48285 0.013094 0.044457 - 0.48285 0.009352 0.046458 - 0.48285 0.00535 0.048111 - 0.48285 0.001174 0.049329 - 0.48285 -0.003001 0.050025 - 0.48285 -0.007351 0.05046 - 0.48285 -0.011614 0.050547 - 0.48285 -0.015965 0.050286 - 0.48285 -0.020227 0.049764 - 0.48285 -0.02449 0.049068 - 0.48285 -0.028667 0.048198 - 0.48285 -0.032842 0.047154 - 0.48285 -0.036931 0.045762 - 0.48285 -0.040934 0.044109 - 0.48285 -0.044762 0.042108 - 0.48285 -0.048416 0.039846 - 0.48285 -0.051895 0.037323 - 0.48285 -0.055115 0.034452 - 0.48285 -0.05816 0.03132 - 0.48285 -0.060856 0.028014 - 0.48285 -0.063293 0.024447 - 0.48285 -0.06538 0.020706 - 0.48285 -0.067208 0.016791 - 0.48285 -0.068512 0.012702 - 0.48285 -0.069556 0.008526 - 0.48285 -0.070166 0.004263 - 0.48285 -0.070427 0.0 -e -v - 0.456402 0.048546 0.0 - 0.456402 0.048416 0.001218 - 0.456402 0.048329 0.002523 - 0.456402 0.048154 0.003741 - 0.456402 0.04798 0.004959 - 0.456402 0.04772 0.006264 - 0.456402 0.047546 0.007482 - 0.456402 0.047284 0.008787 - 0.456402 0.047024 0.010005 - 0.456402 0.046762 0.011223 - 0.456402 0.046415 0.012441 - 0.456402 0.046067 0.013659 - 0.456402 0.045632 0.014877 - 0.456402 0.045196 0.016095 - 0.456402 0.044762 0.017226 - 0.456402 0.044326 0.018444 - 0.456402 0.041977 0.022359 - 0.456402 0.039368 0.0261 - 0.456402 0.036584 0.029667 - 0.456402 0.033539 0.033147 - 0.456402 0.03032 0.036279 - 0.456402 0.026927 0.039324 - 0.456402 0.023272 0.042021 - 0.456402 0.019358 0.044457 - 0.456402 0.015356 0.046632 - 0.456402 0.01118 0.048372 - 0.456402 0.00683 0.049764 - 0.456402 0.002305 0.050547 - 0.456402 -0.002219 0.050982 - 0.456402 -0.006743 0.051243 - 0.456402 -0.011354 0.05133 - 0.456402 -0.015878 0.051156 - 0.456402 -0.020402 0.050634 - 0.456402 -0.024926 0.049764 - 0.456402 -0.029275 0.048633 - 0.456402 -0.033625 0.047154 - 0.456402 -0.037802 0.045414 - 0.456402 -0.041977 0.043413 - 0.456402 -0.045979 0.041238 - 0.456402 -0.049808 0.038802 - 0.456402 -0.053461 0.036018 - 0.456402 -0.056855 0.032973 - 0.456402 -0.059987 0.029667 - 0.456402 -0.062684 0.026013 - 0.456402 -0.064859 0.022011 - 0.456402 -0.066511 0.017835 - 0.456402 -0.067904 0.013485 - 0.456402 -0.068948 0.009048 - 0.456402 -0.069643 0.004524 - 0.456402 -0.069991 0.0 -e -v - 0.429867 0.058116 0.0 - 0.429867 0.057898 0.001566 - 0.429867 0.057638 0.003219 - 0.429867 0.057289 0.004872 - 0.429867 0.056942 0.006438 - 0.429867 0.056506 0.008091 - 0.429867 0.056072 0.009657 - 0.429867 0.055549 0.011223 - 0.429867 0.055027 0.012789 - 0.429867 0.054419 0.014355 - 0.429867 0.053636 0.015834 - 0.429867 0.052853 0.017313 - 0.429867 0.051982 0.018705 - 0.429867 0.050939 0.02001 - 0.429867 0.049895 0.021315 - 0.429867 0.048763 0.022533 - 0.429867 0.046328 0.026448 - 0.429867 0.043543 0.030276 - 0.429867 0.040498 0.033756 - 0.429867 0.037193 0.037062 - 0.429867 0.033625 0.04002 - 0.429867 0.029797 0.042804 - 0.429867 0.025882 0.045327 - 0.429867 0.021881 0.047676 - 0.429867 0.017617 0.049677 - 0.429867 0.01318 0.051156 - 0.429867 0.008656 0.052113 - 0.429867 0.003958 0.052548 - 0.429867 -0.000653 0.052809 - 0.429867 -0.00535 0.052896 - 0.429867 -0.010049 0.052809 - 0.429867 -0.014659 0.052461 - 0.429867 -0.019358 0.051852 - 0.429867 -0.023882 0.050895 - 0.429867 -0.028406 0.049677 - 0.429867 -0.032842 0.048198 - 0.429867 -0.037193 0.046458 - 0.429867 -0.041368 0.04437 - 0.429867 -0.045371 0.041934 - 0.429867 -0.049286 0.039324 - 0.429867 -0.05294 0.03654 - 0.429867 -0.056594 0.033495 - 0.429867 -0.0599 0.030189 - 0.429867 -0.062684 0.026535 - 0.429867 -0.065032 0.022446 - 0.429867 -0.066946 0.018183 - 0.429867 -0.068512 0.013833 - 0.429867 -0.069556 0.009222 - 0.429867 -0.070253 0.004611 - 0.429867 -0.070427 0.0 -e -v - 0.403332 0.069165 0.0 - 0.403332 0.069122 0.002958 - 0.403332 0.068774 0.005916 - 0.403332 0.068251 0.008874 - 0.403332 0.067469 0.011745 - 0.403332 0.066598 0.014529 - 0.403332 0.06538 0.017313 - 0.403332 0.063901 0.019923 - 0.403332 0.062162 0.022272 - 0.403332 0.06016 0.024534 - 0.403332 0.057898 0.026535 - 0.403332 0.055549 0.028362 - 0.403332 0.053114 0.030015 - 0.403332 0.050503 0.031407 - 0.403332 0.04772 0.032625 - 0.403332 0.044935 0.033669 - 0.403332 0.042064 0.036975 - 0.403332 0.038846 0.04002 - 0.403332 0.035452 0.042717 - 0.403332 0.031799 0.045153 - 0.403332 0.027971 0.047241 - 0.403332 0.023969 0.049068 - 0.403332 0.019879 0.050547 - 0.403332 0.015616 0.051678 - 0.403332 0.011354 0.052548 - 0.403332 0.007004 0.053157 - 0.403332 0.002654 0.053418 - 0.403332 -0.001783 0.053505 - 0.403332 -0.006134 0.053244 - 0.403332 -0.010483 0.052722 - 0.403332 -0.014747 0.052026 - 0.403332 -0.019096 0.051069 - 0.403332 -0.023359 0.050025 - 0.403332 -0.027536 0.048894 - 0.403332 -0.031712 0.047589 - 0.403332 -0.035801 0.046023 - 0.403332 -0.039802 0.044196 - 0.403332 -0.04363 0.042108 - 0.403332 -0.047284 0.039672 - 0.403332 -0.050852 0.037149 - 0.403332 -0.054244 0.034365 - 0.403332 -0.057377 0.031233 - 0.403332 -0.060247 0.028014 - 0.403332 -0.063032 0.024621 - 0.403332 -0.06538 0.02088 - 0.403332 -0.067295 0.016965 - 0.403332 -0.068861 0.012876 - 0.403332 -0.069904 0.008613 - 0.403332 -0.070601 0.00435 - 0.403332 -0.070862 0.0 -e -v - 0.376797 0.084825 0.0 - 0.376797 0.084607 0.003828 - 0.376797 0.083912 0.007656 - 0.376797 0.082781 0.011397 - 0.376797 0.081302 0.014964 - 0.376797 0.079388 0.018444 - 0.376797 0.077212 0.021663 - 0.376797 0.07469 0.024621 - 0.376797 0.071906 0.027318 - 0.376797 0.068861 0.029754 - 0.376797 0.065554 0.031929 - 0.376797 0.062075 0.033669 - 0.376797 0.058508 0.035061 - 0.376797 0.05468 0.036192 - 0.376797 0.050852 0.036888 - 0.376797 0.047024 0.037149 - 0.376797 0.043892 0.040194 - 0.376797 0.040498 0.042978 - 0.376797 0.036931 0.045588 - 0.376797 0.033278 0.04785 - 0.376797 0.029362 0.049851 - 0.376797 0.025361 0.051591 - 0.376797 0.021185 0.052896 - 0.376797 0.017009 0.053853 - 0.376797 0.012659 0.054462 - 0.376797 0.008309 0.05481 - 0.376797 0.003958 0.054897 - 0.376797 -0.000392 0.05481 - 0.376797 -0.004742 0.054375 - 0.376797 -0.009092 0.053679 - 0.376797 -0.013354 0.052809 - 0.376797 -0.017617 0.051765 - 0.376797 -0.021793 0.050547 - 0.376797 -0.025882 0.048981 - 0.376797 -0.029885 0.047328 - 0.376797 -0.033799 0.045501 - 0.376797 -0.037714 0.043413 - 0.376797 -0.041455 0.041325 - 0.376797 -0.045284 0.039063 - 0.376797 -0.048937 0.036714 - 0.376797 -0.052504 0.034191 - 0.376797 -0.055723 0.03132 - 0.376797 -0.058681 0.028014 - 0.376797 -0.061205 0.024534 - 0.376797 -0.06338 0.020706 - 0.376797 -0.065293 0.016791 - 0.376797 -0.066859 0.012789 - 0.376797 -0.068077 0.008526 - 0.376797 -0.068948 0.004263 - 0.376797 -0.069556 0.0 -e -v - 0.323814 0.108228 0.0 - 0.323814 0.108011 0.00522 - 0.323814 0.107054 0.010353 - 0.323814 0.105314 0.015399 - 0.323814 0.102877 0.02001 - 0.323814 0.100006 0.024447 - 0.323814 0.096614 0.028449 - 0.323814 0.092611 0.031929 - 0.323814 0.088174 0.0348 - 0.323814 0.083389 0.037062 - 0.323814 0.078431 0.038715 - 0.323814 0.073298 0.039933 - 0.323814 0.068077 0.040455 - 0.323814 0.062771 0.040368 - 0.323814 0.057551 0.039498 - 0.323814 0.052504 0.038106 - 0.323814 0.049373 0.041325 - 0.323814 0.046067 0.04437 - 0.323814 0.0425 0.047154 - 0.323814 0.038759 0.04959 - 0.323814 0.034757 0.051678 - 0.323814 0.030668 0.053418 - 0.323814 0.026317 0.054723 - 0.323814 0.021968 0.05568 - 0.323814 0.017444 0.056115 - 0.323814 0.013006 0.056289 - 0.323814 0.008482 0.056289 - 0.323814 0.004045 0.055941 - 0.323814 -0.000479 0.055419 - 0.323814 -0.004916 0.054636 - 0.323814 -0.009266 0.053592 - 0.323814 -0.013616 0.052374 - 0.323814 -0.017879 0.050982 - 0.323814 -0.022055 0.049416 - 0.323814 -0.026231 0.047676 - 0.323814 -0.03032 0.045762 - 0.323814 -0.034235 0.043761 - 0.323814 -0.038149 0.041499 - 0.323814 -0.041977 0.03915 - 0.323814 -0.045718 0.036714 - 0.323814 -0.049459 0.034104 - 0.323814 -0.05294 0.031233 - 0.323814 -0.056159 0.028101 - 0.323814 -0.059117 0.024795 - 0.323814 -0.061813 0.021228 - 0.323814 -0.064075 0.017313 - 0.323814 -0.065903 0.013224 - 0.323814 -0.06712 0.008874 - 0.323814 -0.067817 0.004437 - 0.323814 -0.068164 0.0 -e -v - 0.270744 0.112839 0.0 - 0.270744 0.11236 0.004611 - 0.270744 0.111404 0.009657 - 0.270744 0.109838 0.014616 - 0.270744 0.107749 0.019314 - 0.270744 0.104966 0.023664 - 0.270744 0.101659 0.027579 - 0.270744 0.097832 0.031059 - 0.270744 0.093569 0.034017 - 0.270744 0.088958 0.036279 - 0.270744 0.084086 0.037932 - 0.270744 0.079039 0.039063 - 0.270744 0.073907 0.039585 - 0.270744 0.068774 0.039411 - 0.270744 0.06364 0.038802 - 0.270744 0.058681 0.037584 - 0.270744 0.055549 0.041151 - 0.270744 0.052157 0.044457 - 0.270744 0.048416 0.047328 - 0.270744 0.0445 0.049851 - 0.270744 0.040238 0.051852 - 0.270744 0.035714 0.053418 - 0.270744 0.031189 0.054549 - 0.270744 0.026492 0.055332 - 0.270744 0.021793 0.055941 - 0.270744 0.017096 0.056289 - 0.270744 0.012397 0.056289 - 0.270744 0.007699 0.056028 - 0.270744 0.003001 0.055419 - 0.270744 -0.00161 0.054723 - 0.270744 -0.00622 0.053766 - 0.270744 -0.010832 0.052722 - 0.270744 -0.015442 0.051678 - 0.270744 -0.019966 0.050373 - 0.270744 -0.02449 0.049068 - 0.270744 -0.028927 0.047415 - 0.270744 -0.033278 0.045588 - 0.270744 -0.03754 0.043587 - 0.270744 -0.04163 0.041238 - 0.270744 -0.045545 0.038628 - 0.270744 -0.049373 0.035844 - 0.270744 -0.053027 0.032886 - 0.270744 -0.056419 0.029667 - 0.270744 -0.059464 0.026013 - 0.270744 -0.062162 0.022185 - 0.270744 -0.064424 0.018009 - 0.270744 -0.066251 0.013659 - 0.270744 -0.06773 0.009222 - 0.270744 -0.068774 0.004611 - 0.270744 -0.069556 0.0 -e -v - 0.229506 0.11049 0.0 - 0.229506 0.11062 0.004872 - 0.229506 0.110186 0.009831 - 0.229506 0.109315 0.014703 - 0.229506 0.107749 0.019401 - 0.229506 0.105575 0.023838 - 0.229506 0.102703 0.027927 - 0.229506 0.099224 0.031494 - 0.229506 0.095395 0.034539 - 0.229506 0.091045 0.037062 - 0.229506 0.086521 0.038976 - 0.229506 0.081736 0.040368 - 0.229506 0.076865 0.041238 - 0.229506 0.071906 0.041586 - 0.229506 0.067033 0.041325 - 0.229506 0.062075 0.040629 - 0.229506 0.058768 0.044196 - 0.229506 0.055115 0.047502 - 0.229506 0.051112 0.050286 - 0.229506 0.04685 0.052722 - 0.229506 0.042326 0.054462 - 0.229506 0.03754 0.055854 - 0.229506 0.032756 0.056811 - 0.229506 0.027971 0.057594 - 0.229506 0.023012 0.057942 - 0.229506 0.01814 0.057855 - 0.229506 0.013268 0.057594 - 0.229506 0.008396 0.057072 - 0.229506 0.003523 0.05655 - 0.229506 -0.001349 0.056028 - 0.229506 -0.00622 0.055506 - 0.229506 -0.011092 0.05481 - 0.229506 -0.015878 0.05394 - 0.229506 -0.020662 0.052809 - 0.229506 -0.025361 0.05133 - 0.229506 -0.029885 0.049503 - 0.229506 -0.034408 0.047502 - 0.229506 -0.038759 0.045327 - 0.229506 -0.042934 0.042804 - 0.229506 -0.047024 0.04002 - 0.229506 -0.050939 0.037149 - 0.229506 -0.054766 0.034104 - 0.229506 -0.058421 0.030798 - 0.229506 -0.061639 0.027144 - 0.229506 -0.064511 0.023055 - 0.229506 -0.066859 0.018792 - 0.229506 -0.068774 0.014268 - 0.229506 -0.070166 0.00957 - 0.229506 -0.071209 0.004785 - 0.229506 -0.071819 0.0 -e -v - 0.217674 0.110055 0.0 - 0.217674 0.109751 0.004437 - 0.217674 0.109054 0.008874 - 0.217674 0.107836 0.013311 - 0.217674 0.106096 0.017487 - 0.217674 0.103922 0.021402 - 0.217674 0.101224 0.024969 - 0.217674 0.098006 0.028188 - 0.217674 0.094526 0.031059 - 0.217674 0.090697 0.033408 - 0.217674 0.086608 0.035322 - 0.217674 0.082259 0.036627 - 0.217674 0.077822 0.037497 - 0.217674 0.073385 0.037845 - 0.217674 0.068861 0.037671 - 0.217674 0.064337 0.037149 - 0.217674 0.061205 0.04089 - 0.217674 0.057638 0.044283 - 0.217674 0.053723 0.047241 - 0.217674 0.049373 0.049677 - 0.217674 0.044935 0.051678 - 0.217674 0.040238 0.053331 - 0.217674 0.035452 0.054549 - 0.217674 0.030581 0.055332 - 0.217674 0.025709 0.055767 - 0.217674 0.02075 0.056115 - 0.217674 0.015878 0.056202 - 0.217674 0.010918 0.056115 - 0.217674 0.006047 0.055854 - 0.217674 0.001088 0.055332 - 0.217674 -0.003785 0.054636 - 0.217674 -0.008656 0.053766 - 0.217674 -0.013442 0.052635 - 0.217674 -0.018227 0.051417 - 0.217674 -0.022924 0.049938 - 0.217674 -0.027536 0.048285 - 0.217674 -0.032146 0.046458 - 0.217674 -0.036584 0.04437 - 0.217674 -0.040934 0.042021 - 0.217674 -0.045109 0.039411 - 0.217674 -0.049286 0.036714 - 0.217674 -0.053287 0.033843 - 0.217674 -0.057028 0.030711 - 0.217674 -0.060422 0.027144 - 0.217674 -0.06338 0.023142 - 0.217674 -0.065816 0.018879 - 0.217674 -0.06773 0.014355 - 0.217674 -0.069296 0.009657 - 0.217674 -0.070253 0.004872 - 0.217674 -0.070862 0.0 -e -v - 0.164691 0.102225 0.0 - 0.164691 0.101921 0.00348 - 0.164691 0.101224 0.00696 - 0.164691 0.100267 0.010353 - 0.164691 0.09905 0.013659 - 0.164691 0.097484 0.016791 - 0.164691 0.095569 0.019836 - 0.164691 0.093482 0.022707 - 0.164691 0.091045 0.025317 - 0.164691 0.088436 0.027666 - 0.164691 0.085652 0.029754 - 0.164691 0.082607 0.031581 - 0.164691 0.079388 0.03306 - 0.164691 0.075994 0.034278 - 0.164691 0.072601 0.035148 - 0.164691 0.069122 0.03567 - 0.164691 0.066425 0.039759 - 0.164691 0.062684 0.043239 - 0.164691 0.058421 0.04611 - 0.164691 0.05381 0.048285 - 0.164691 0.049024 0.050199 - 0.164691 0.044066 0.051504 - 0.164691 0.039019 0.052374 - 0.164691 0.033886 0.052983 - 0.164691 0.028841 0.053505 - 0.164691 0.023707 0.05394 - 0.164691 0.018575 0.054375 - 0.164691 0.013442 0.054549 - 0.164691 0.008309 0.054549 - 0.164691 0.003263 0.054375 - 0.164691 -0.001871 0.05394 - 0.164691 -0.007004 0.053418 - 0.164691 -0.012049 0.052635 - 0.164691 -0.017096 0.051591 - 0.164691 -0.022055 0.050373 - 0.164691 -0.027013 0.048981 - 0.164691 -0.031886 0.047502 - 0.164691 -0.036757 0.045849 - 0.164691 -0.041543 0.043935 - 0.164691 -0.046067 0.041673 - 0.164691 -0.050416 0.038889 - 0.164691 -0.054419 0.03567 - 0.164691 -0.05816 0.032103 - 0.164691 -0.061552 0.028275 - 0.164691 -0.064511 0.024099 - 0.164691 -0.067033 0.019662 - 0.164691 -0.069035 0.014964 - 0.164691 -0.070601 0.010092 - 0.164691 -0.071644 0.005046 - 0.164691 -0.072254 0.0 -e -v - 0.111621 0.092568 0.0 - 0.111621 0.092698 0.002436 - 0.111621 0.092611 0.004959 - 0.111621 0.09235 0.007482 - 0.111621 0.091916 0.009918 - 0.111621 0.091307 0.012354 - 0.111621 0.090524 0.01479 - 0.111621 0.089653 0.017139 - 0.111621 0.08861 0.019401 - 0.111621 0.087305 0.021576 - 0.111621 0.085913 0.023664 - 0.111621 0.08426 0.025578 - 0.111621 0.08252 0.027405 - 0.111621 0.080605 0.029058 - 0.111621 0.078604 0.030537 - 0.111621 0.076517 0.031929 - 0.111621 0.072862 0.035931 - 0.111621 0.068948 0.039672 - 0.111621 0.064685 0.042978 - 0.111621 0.060073 0.045849 - 0.111621 0.055202 0.048285 - 0.111621 0.050156 0.050199 - 0.111621 0.045022 0.051765 - 0.111621 0.039715 0.05307 - 0.111621 0.034408 0.054027 - 0.111621 0.029014 0.054549 - 0.111621 0.02362 0.05481 - 0.111621 0.018227 0.05481 - 0.111621 0.012745 0.05481 - 0.111621 0.007351 0.054636 - 0.111621 0.001958 0.054462 - 0.111621 -0.003436 0.054027 - 0.111621 -0.00883 0.053418 - 0.111621 -0.014225 0.052635 - 0.111621 -0.019531 0.051591 - 0.111621 -0.024751 0.05046 - 0.111621 -0.030058 0.049155 - 0.111621 -0.035278 0.047676 - 0.111621 -0.040325 0.045762 - 0.111621 -0.045196 0.043413 - 0.111621 -0.049808 0.040542 - 0.111621 -0.054157 0.037323 - 0.111621 -0.058247 0.033756 - 0.111621 -0.061988 0.029841 - 0.111621 -0.065206 0.025491 - 0.111621 -0.067904 0.020793 - 0.111621 -0.070078 0.015834 - 0.111621 -0.071644 0.010614 - 0.111621 -0.072688 0.005307 - 0.111621 -0.073211 0.0 -e -v - 0.058638 0.081606 0.0 - 0.058638 0.081562 0.001479 - 0.058638 0.081562 0.003045 - 0.058638 0.081389 0.004611 - 0.058638 0.081215 0.006177 - 0.058638 0.080954 0.007743 - 0.058638 0.080692 0.009222 - 0.058638 0.080344 0.010788 - 0.058638 0.079997 0.012267 - 0.058638 0.079475 0.013746 - 0.058638 0.078952 0.015225 - 0.058638 0.078344 0.016617 - 0.058638 0.077647 0.018009 - 0.058638 0.076865 0.019401 - 0.058638 0.076081 0.020706 - 0.058638 0.075212 0.022011 - 0.058638 0.07208 0.026883 - 0.058638 0.068512 0.030972 - 0.058638 0.064511 0.034626 - 0.058638 0.06016 0.037758 - 0.058638 0.055463 0.040542 - 0.058638 0.050678 0.042978 - 0.058638 0.045632 0.044892 - 0.058638 0.040411 0.046458 - 0.058638 0.035191 0.047676 - 0.058638 0.029885 0.04872 - 0.058638 0.02449 0.049503 - 0.058638 0.019183 0.050025 - 0.058638 0.013702 0.050199 - 0.058638 0.008309 0.050286 - 0.058638 0.002914 0.050112 - 0.058638 -0.002479 0.049938 - 0.058638 -0.007873 0.049677 - 0.058638 -0.013268 0.049155 - 0.058638 -0.018662 0.048546 - 0.058638 -0.023969 0.047676 - 0.058638 -0.029275 0.046545 - 0.058638 -0.034582 0.045414 - 0.058638 -0.039802 0.044022 - 0.058638 -0.044849 0.042195 - 0.058638 -0.04972 0.039759 - 0.058638 -0.054244 0.036888 - 0.058638 -0.058594 0.033582 - 0.058638 -0.062422 0.029841 - 0.058638 -0.065816 0.025665 - 0.058638 -0.068512 0.020967 - 0.058638 -0.070514 0.015921 - 0.058638 -0.071906 0.010701 - 0.058638 -0.072601 0.005394 - 0.058638 -0.072775 0.0 -e -v - 0.562455 0.01914 0.0 - 0.522696 0.029275 0.0 - 0.48285 0.039368 0.0 - 0.456402 0.04859 0.0 - 0.429867 0.05816 0.0 - 0.403332 0.069209 0.0 - 0.376797 0.084868 0.0 - 0.323814 0.108272 0.0 - 0.270744 0.112883 0.0 - 0.229506 0.110533 0.0 - 0.217674 0.110099 0.0 - 0.164691 0.102269 0.0 - 0.111621 0.092611 0.0 - 0.058638 0.081649 0.0 -e -v - 0.562455 0.018966 0.001218 - 0.522696 0.029189 0.001305 - 0.48285 0.039542 0.001305 - 0.456402 0.048416 0.001218 - 0.429867 0.057898 0.001566 - 0.403332 0.069122 0.002958 - 0.376797 0.084607 0.003828 - 0.323814 0.108011 0.00522 - 0.270744 0.11236 0.004611 - 0.229506 0.11062 0.004872 - 0.217674 0.109751 0.004437 - 0.164691 0.101921 0.00348 - 0.111621 0.092698 0.002436 - 0.058638 0.081562 0.001479 -e -v - 0.562455 0.018792 0.002523 - 0.522696 0.029102 0.002697 - 0.48285 0.039715 0.00261 - 0.456402 0.048329 0.002523 - 0.429867 0.057638 0.003219 - 0.403332 0.068774 0.005916 - 0.376797 0.083912 0.007656 - 0.323814 0.107054 0.010353 - 0.270744 0.111404 0.009657 - 0.229506 0.110186 0.009831 - 0.217674 0.109054 0.008874 - 0.164691 0.101224 0.00696 - 0.111621 0.092611 0.004959 - 0.058638 0.081562 0.003045 -e -v - 0.562455 0.018705 0.003741 - 0.522696 0.028927 0.004089 - 0.48285 0.039802 0.003915 - 0.456402 0.048154 0.003741 - 0.429867 0.057289 0.004872 - 0.403332 0.068251 0.008874 - 0.376797 0.082781 0.011397 - 0.323814 0.105314 0.015399 - 0.270744 0.109838 0.014616 - 0.229506 0.109315 0.014703 - 0.217674 0.107836 0.013311 - 0.164691 0.100267 0.010353 - 0.111621 0.09235 0.007482 - 0.058638 0.081389 0.004611 -e -v - 0.562455 0.018531 0.005046 - 0.522696 0.028754 0.005481 - 0.48285 0.039802 0.00522 - 0.456402 0.04798 0.004959 - 0.429867 0.056942 0.006438 - 0.403332 0.067469 0.011745 - 0.376797 0.081302 0.014964 - 0.323814 0.102877 0.02001 - 0.270744 0.107749 0.019314 - 0.229506 0.107749 0.019401 - 0.217674 0.106096 0.017487 - 0.164691 0.09905 0.013659 - 0.111621 0.091916 0.009918 - 0.058638 0.081215 0.006177 -e -v - 0.562455 0.01827 0.006264 - 0.522696 0.028579 0.006786 - 0.48285 0.039629 0.006612 - 0.456402 0.04772 0.006264 - 0.429867 0.056506 0.008091 - 0.403332 0.066598 0.014529 - 0.376797 0.079388 0.018444 - 0.323814 0.100006 0.024447 - 0.270744 0.104966 0.023664 - 0.229506 0.105575 0.023838 - 0.217674 0.103922 0.021402 - 0.164691 0.097484 0.016791 - 0.111621 0.091307 0.012354 - 0.058638 0.080954 0.007743 -e -v - 0.562455 0.018096 0.007482 - 0.522696 0.028406 0.008178 - 0.48285 0.039455 0.007917 - 0.456402 0.047546 0.007482 - 0.429867 0.056072 0.009657 - 0.403332 0.06538 0.017313 - 0.376797 0.077212 0.021663 - 0.323814 0.096614 0.028449 - 0.270744 0.101659 0.027579 - 0.229506 0.102703 0.027927 - 0.217674 0.101224 0.024969 - 0.164691 0.095569 0.019836 - 0.111621 0.090524 0.01479 - 0.058638 0.080692 0.009222 -e -v - 0.562455 0.017835 0.008787 - 0.522696 0.028231 0.00957 - 0.48285 0.039193 0.009222 - 0.456402 0.047284 0.008787 - 0.429867 0.055549 0.011223 - 0.403332 0.063901 0.019923 - 0.376797 0.07469 0.024621 - 0.323814 0.092611 0.031929 - 0.270744 0.097832 0.031059 - 0.229506 0.099224 0.031494 - 0.217674 0.098006 0.028188 - 0.164691 0.093482 0.022707 - 0.111621 0.089653 0.017139 - 0.058638 0.080344 0.010788 -e -v - 0.562455 0.017574 0.010005 - 0.522696 0.027971 0.010875 - 0.48285 0.038846 0.010527 - 0.456402 0.047024 0.010005 - 0.429867 0.055027 0.012789 - 0.403332 0.062162 0.022272 - 0.376797 0.071906 0.027318 - 0.323814 0.088174 0.0348 - 0.270744 0.093569 0.034017 - 0.229506 0.095395 0.034539 - 0.217674 0.094526 0.031059 - 0.164691 0.091045 0.025317 - 0.111621 0.08861 0.019401 - 0.058638 0.079997 0.012267 -e -v - 0.562455 0.017313 0.011223 - 0.522696 0.02771 0.012267 - 0.48285 0.038498 0.011832 - 0.456402 0.046762 0.011223 - 0.429867 0.054419 0.014355 - 0.403332 0.06016 0.024534 - 0.376797 0.068861 0.029754 - 0.323814 0.083389 0.037062 - 0.270744 0.088958 0.036279 - 0.229506 0.091045 0.037062 - 0.217674 0.090697 0.033408 - 0.164691 0.088436 0.027666 - 0.111621 0.087305 0.021576 - 0.058638 0.079475 0.013746 -e -v - 0.562455 0.017052 0.012528 - 0.522696 0.027448 0.013572 - 0.48285 0.038149 0.01305 - 0.456402 0.046415 0.012441 - 0.429867 0.053636 0.015834 - 0.403332 0.057898 0.026535 - 0.376797 0.065554 0.031929 - 0.323814 0.078431 0.038715 - 0.270744 0.084086 0.037932 - 0.229506 0.086521 0.038976 - 0.217674 0.086608 0.035322 - 0.164691 0.085652 0.029754 - 0.111621 0.085913 0.023664 - 0.058638 0.078952 0.015225 -e -v - 0.562455 0.016704 0.013746 - 0.522696 0.0271 0.014877 - 0.48285 0.037802 0.014355 - 0.456402 0.046067 0.013659 - 0.429867 0.052853 0.017313 - 0.403332 0.055549 0.028362 - 0.376797 0.062075 0.033669 - 0.323814 0.073298 0.039933 - 0.270744 0.079039 0.039063 - 0.229506 0.081736 0.040368 - 0.217674 0.082259 0.036627 - 0.164691 0.082607 0.031581 - 0.111621 0.08426 0.025578 - 0.058638 0.078344 0.016617 -e -v - 0.562455 0.016269 0.014964 - 0.522696 0.026665 0.016269 - 0.48285 0.037367 0.01566 - 0.456402 0.045632 0.014877 - 0.429867 0.051982 0.018705 - 0.403332 0.053114 0.030015 - 0.376797 0.058508 0.035061 - 0.323814 0.068077 0.040455 - 0.270744 0.073907 0.039585 - 0.229506 0.076865 0.041238 - 0.217674 0.077822 0.037497 - 0.164691 0.079388 0.03306 - 0.111621 0.08252 0.027405 - 0.058638 0.077647 0.018009 -e -v - 0.562455 0.015834 0.016095 - 0.522696 0.026231 0.017574 - 0.48285 0.036931 0.016878 - 0.456402 0.045196 0.016095 - 0.429867 0.050939 0.02001 - 0.403332 0.050503 0.031407 - 0.376797 0.05468 0.036192 - 0.323814 0.062771 0.040368 - 0.270744 0.068774 0.039411 - 0.229506 0.071906 0.041586 - 0.217674 0.073385 0.037845 - 0.164691 0.075994 0.034278 - 0.111621 0.080605 0.029058 - 0.058638 0.076865 0.019401 -e -v - 0.562455 0.015399 0.017313 - 0.522696 0.025796 0.018879 - 0.48285 0.03641 0.018096 - 0.456402 0.044762 0.017226 - 0.429867 0.049895 0.021315 - 0.403332 0.04772 0.032625 - 0.376797 0.050852 0.036888 - 0.323814 0.057551 0.039498 - 0.270744 0.06364 0.038802 - 0.229506 0.067033 0.041325 - 0.217674 0.068861 0.037671 - 0.164691 0.072601 0.035148 - 0.111621 0.078604 0.030537 - 0.058638 0.076081 0.020706 -e -v - 0.562455 0.014964 0.018531 - 0.522696 0.025361 0.020184 - 0.48285 0.035887 0.019314 - 0.456402 0.044326 0.018444 - 0.429867 0.048763 0.022533 - 0.403332 0.044935 0.033669 - 0.376797 0.047024 0.037149 - 0.323814 0.052504 0.038106 - 0.270744 0.058681 0.037584 - 0.229506 0.062075 0.040629 - 0.217674 0.064337 0.037149 - 0.164691 0.069122 0.03567 - 0.111621 0.076517 0.031929 - 0.058638 0.075212 0.022011 -e -v - 0.562455 0.013398 0.021663 - 0.522696 0.023447 0.023577 - 0.48285 0.034061 0.023229 - 0.456402 0.041977 0.022359 - 0.429867 0.046328 0.026448 - 0.403332 0.042064 0.036975 - 0.376797 0.043892 0.040194 - 0.323814 0.049373 0.041325 - 0.270744 0.055549 0.041151 - 0.229506 0.058768 0.044196 - 0.217674 0.061205 0.04089 - 0.164691 0.066425 0.039759 - 0.111621 0.072862 0.035931 - 0.058638 0.07208 0.026883 -e -v - 0.562455 0.011658 0.024621 - 0.522696 0.021358 0.02697 - 0.48285 0.031886 0.02697 - 0.456402 0.039368 0.0261 - 0.429867 0.043543 0.030276 - 0.403332 0.038846 0.04002 - 0.376797 0.040498 0.042978 - 0.323814 0.046067 0.04437 - 0.270744 0.052157 0.044457 - 0.229506 0.055115 0.047502 - 0.217674 0.057638 0.044283 - 0.164691 0.062684 0.043239 - 0.111621 0.068948 0.039672 - 0.058638 0.068512 0.030972 -e -v - 0.562455 0.009657 0.027405 - 0.522696 0.019096 0.030189 - 0.48285 0.029362 0.03045 - 0.456402 0.036584 0.029667 - 0.429867 0.040498 0.033756 - 0.403332 0.035452 0.042717 - 0.376797 0.036931 0.045588 - 0.323814 0.0425 0.047154 - 0.270744 0.048416 0.047328 - 0.229506 0.051112 0.050286 - 0.217674 0.053723 0.047241 - 0.164691 0.058421 0.04611 - 0.111621 0.064685 0.042978 - 0.058638 0.064511 0.034626 -e -v - 0.562455 0.007395 0.030102 - 0.522696 0.016573 0.033234 - 0.48285 0.026579 0.033756 - 0.456402 0.033539 0.033147 - 0.429867 0.037193 0.037062 - 0.403332 0.031799 0.045153 - 0.376797 0.033278 0.04785 - 0.323814 0.038759 0.04959 - 0.270744 0.0445 0.049851 - 0.229506 0.04685 0.052722 - 0.217674 0.049373 0.049677 - 0.164691 0.05381 0.048285 - 0.111621 0.060073 0.045849 - 0.058638 0.06016 0.037758 -e -v - 0.562455 0.004959 0.032538 - 0.522696 0.013876 0.036018 - 0.48285 0.023534 0.036801 - 0.456402 0.03032 0.036279 - 0.429867 0.033625 0.04002 - 0.403332 0.027971 0.047241 - 0.376797 0.029362 0.049851 - 0.323814 0.034757 0.051678 - 0.270744 0.040238 0.051852 - 0.229506 0.042326 0.054462 - 0.217674 0.044935 0.051678 - 0.164691 0.049024 0.050199 - 0.111621 0.055202 0.048285 - 0.058638 0.055463 0.040542 -e -v - 0.562455 0.002262 0.034713 - 0.522696 0.010744 0.038454 - 0.48285 0.020314 0.039585 - 0.456402 0.026927 0.039324 - 0.429867 0.029797 0.042804 - 0.403332 0.023969 0.049068 - 0.376797 0.025361 0.051591 - 0.323814 0.030668 0.053418 - 0.270744 0.035714 0.053418 - 0.229506 0.03754 0.055854 - 0.217674 0.040238 0.053331 - 0.164691 0.044066 0.051504 - 0.111621 0.050156 0.050199 - 0.058638 0.050678 0.042978 -e -v - 0.562455 -0.000609 0.036714 - 0.522696 0.007525 0.040629 - 0.48285 0.016748 0.042108 - 0.456402 0.023272 0.042021 - 0.429867 0.025882 0.045327 - 0.403332 0.019879 0.050547 - 0.376797 0.021185 0.052896 - 0.323814 0.026317 0.054723 - 0.270744 0.031189 0.054549 - 0.229506 0.032756 0.056811 - 0.217674 0.035452 0.054549 - 0.164691 0.039019 0.052374 - 0.111621 0.045022 0.051765 - 0.058638 0.045632 0.044892 -e -v - 0.562455 -0.003567 0.038454 - 0.522696 0.004045 0.042543 - 0.48285 0.013094 0.044457 - 0.456402 0.019358 0.044457 - 0.429867 0.021881 0.047676 - 0.403332 0.015616 0.051678 - 0.376797 0.017009 0.053853 - 0.323814 0.021968 0.05568 - 0.270744 0.026492 0.055332 - 0.229506 0.027971 0.057594 - 0.217674 0.030581 0.055332 - 0.164691 0.033886 0.052983 - 0.111621 0.039715 0.05307 - 0.058638 0.040411 0.046458 -e -v - 0.562455 -0.006786 0.039933 - 0.522696 0.000565 0.044283 - 0.48285 0.009352 0.046458 - 0.456402 0.015356 0.046632 - 0.429867 0.017617 0.049677 - 0.403332 0.011354 0.052548 - 0.376797 0.012659 0.054462 - 0.323814 0.017444 0.056115 - 0.270744 0.021793 0.055941 - 0.229506 0.023012 0.057942 - 0.217674 0.025709 0.055767 - 0.164691 0.028841 0.053505 - 0.111621 0.034408 0.054027 - 0.058638 0.035191 0.047676 -e -v - 0.562455 -0.010005 0.041064 - 0.522696 -0.003089 0.045762 - 0.48285 0.00535 0.048111 - 0.456402 0.01118 0.048372 - 0.429867 0.01318 0.051156 - 0.403332 0.007004 0.053157 - 0.376797 0.008309 0.05481 - 0.323814 0.013006 0.056289 - 0.270744 0.017096 0.056289 - 0.229506 0.01814 0.057855 - 0.217674 0.02075 0.056115 - 0.164691 0.023707 0.05394 - 0.111621 0.029014 0.054549 - 0.058638 0.029885 0.04872 -e -v - 0.562455 -0.013398 0.042021 - 0.522696 -0.00683 0.04698 - 0.48285 0.001174 0.049329 - 0.456402 0.00683 0.049764 - 0.429867 0.008656 0.052113 - 0.403332 0.002654 0.053418 - 0.376797 0.003958 0.054897 - 0.323814 0.008482 0.056289 - 0.270744 0.012397 0.056289 - 0.229506 0.013268 0.057594 - 0.217674 0.015878 0.056202 - 0.164691 0.018575 0.054375 - 0.111621 0.02362 0.05481 - 0.058638 0.02449 0.049503 -e -v - 0.562455 -0.016791 0.042804 - 0.522696 -0.010658 0.04785 - 0.48285 -0.003001 0.050025 - 0.456402 0.002305 0.050547 - 0.429867 0.003958 0.052548 - 0.403332 -0.001783 0.053505 - 0.376797 -0.000392 0.05481 - 0.323814 0.004045 0.055941 - 0.270744 0.007699 0.056028 - 0.229506 0.008396 0.057072 - 0.217674 0.010918 0.056115 - 0.164691 0.013442 0.054549 - 0.111621 0.018227 0.05481 - 0.058638 0.019183 0.050025 -e -v - 0.562455 -0.020184 0.043413 - 0.522696 -0.014573 0.048372 - 0.48285 -0.007351 0.05046 - 0.456402 -0.002219 0.050982 - 0.429867 -0.000653 0.052809 - 0.403332 -0.006134 0.053244 - 0.376797 -0.004742 0.054375 - 0.323814 -0.000479 0.055419 - 0.270744 0.003001 0.055419 - 0.229506 0.003523 0.05655 - 0.217674 0.006047 0.055854 - 0.164691 0.008309 0.054549 - 0.111621 0.012745 0.05481 - 0.058638 0.013702 0.050199 -e -v - 0.562455 -0.023664 0.043674 - 0.522696 -0.018488 0.048546 - 0.48285 -0.011614 0.050547 - 0.456402 -0.006743 0.051243 - 0.429867 -0.00535 0.052896 - 0.403332 -0.010483 0.052722 - 0.376797 -0.009092 0.053679 - 0.323814 -0.004916 0.054636 - 0.270744 -0.00161 0.054723 - 0.229506 -0.001349 0.056028 - 0.217674 0.001088 0.055332 - 0.164691 0.003263 0.054375 - 0.111621 0.007351 0.054636 - 0.058638 0.008309 0.050286 -e -v - 0.562455 -0.027144 0.043587 - 0.522696 -0.022489 0.048372 - 0.48285 -0.015965 0.050286 - 0.456402 -0.011354 0.05133 - 0.429867 -0.010049 0.052809 - 0.403332 -0.014747 0.052026 - 0.376797 -0.013354 0.052809 - 0.323814 -0.009266 0.053592 - 0.270744 -0.00622 0.053766 - 0.229506 -0.00622 0.055506 - 0.217674 -0.003785 0.054636 - 0.164691 -0.001871 0.05394 - 0.111621 0.001958 0.054462 - 0.058638 0.002914 0.050112 -e -v - 0.562455 -0.030537 0.043152 - 0.522696 -0.026405 0.04785 - 0.48285 -0.020227 0.049764 - 0.456402 -0.015878 0.051156 - 0.429867 -0.014659 0.052461 - 0.403332 -0.019096 0.051069 - 0.376797 -0.017617 0.051765 - 0.323814 -0.013616 0.052374 - 0.270744 -0.010832 0.052722 - 0.229506 -0.011092 0.05481 - 0.217674 -0.008656 0.053766 - 0.164691 -0.007004 0.053418 - 0.111621 -0.003436 0.054027 - 0.058638 -0.002479 0.049938 -e -v - 0.562455 -0.03393 0.042369 - 0.522696 -0.030233 0.047154 - 0.48285 -0.02449 0.049068 - 0.456402 -0.020402 0.050634 - 0.429867 -0.019358 0.051852 - 0.403332 -0.023359 0.050025 - 0.376797 -0.021793 0.050547 - 0.323814 -0.017879 0.050982 - 0.270744 -0.015442 0.051678 - 0.229506 -0.015878 0.05394 - 0.217674 -0.013442 0.052635 - 0.164691 -0.012049 0.052635 - 0.111621 -0.00883 0.053418 - 0.058638 -0.007873 0.049677 -e -v - 0.562455 -0.037236 0.041412 - 0.522696 -0.034061 0.046197 - 0.48285 -0.028667 0.048198 - 0.456402 -0.024926 0.049764 - 0.429867 -0.023882 0.050895 - 0.403332 -0.027536 0.048894 - 0.376797 -0.025882 0.048981 - 0.323814 -0.022055 0.049416 - 0.270744 -0.019966 0.050373 - 0.229506 -0.020662 0.052809 - 0.217674 -0.018227 0.051417 - 0.164691 -0.017096 0.051591 - 0.111621 -0.014225 0.052635 - 0.058638 -0.013268 0.049155 -e -v - 0.562455 -0.040542 0.040281 - 0.522696 -0.037802 0.044892 - 0.48285 -0.032842 0.047154 - 0.456402 -0.029275 0.048633 - 0.429867 -0.028406 0.049677 - 0.403332 -0.031712 0.047589 - 0.376797 -0.029885 0.047328 - 0.323814 -0.026231 0.047676 - 0.270744 -0.02449 0.049068 - 0.229506 -0.025361 0.05133 - 0.217674 -0.022924 0.049938 - 0.164691 -0.022055 0.050373 - 0.111621 -0.019531 0.051591 - 0.058638 -0.018662 0.048546 -e -v - 0.562455 -0.043761 0.038889 - 0.522696 -0.041368 0.043326 - 0.48285 -0.036931 0.045762 - 0.456402 -0.033625 0.047154 - 0.429867 -0.032842 0.048198 - 0.403332 -0.035801 0.046023 - 0.376797 -0.033799 0.045501 - 0.323814 -0.03032 0.045762 - 0.270744 -0.028927 0.047415 - 0.229506 -0.029885 0.049503 - 0.217674 -0.027536 0.048285 - 0.164691 -0.027013 0.048981 - 0.111621 -0.024751 0.05046 - 0.058638 -0.023969 0.047676 -e -v - 0.562455 -0.046806 0.037236 - 0.522696 -0.044849 0.041499 - 0.48285 -0.040934 0.044109 - 0.456402 -0.037802 0.045414 - 0.429867 -0.037193 0.046458 - 0.403332 -0.039802 0.044196 - 0.376797 -0.037714 0.043413 - 0.323814 -0.034235 0.043761 - 0.270744 -0.033278 0.045588 - 0.229506 -0.034408 0.047502 - 0.217674 -0.032146 0.046458 - 0.164691 -0.031886 0.047502 - 0.111621 -0.030058 0.049155 - 0.058638 -0.029275 0.046545 -e -v - 0.562455 -0.049764 0.035496 - 0.522696 -0.048154 0.039324 - 0.48285 -0.044762 0.042108 - 0.456402 -0.041977 0.043413 - 0.429867 -0.041368 0.04437 - 0.403332 -0.04363 0.042108 - 0.376797 -0.041455 0.041325 - 0.323814 -0.038149 0.041499 - 0.270744 -0.03754 0.043587 - 0.229506 -0.038759 0.045327 - 0.217674 -0.036584 0.04437 - 0.164691 -0.036757 0.045849 - 0.111621 -0.035278 0.047676 - 0.058638 -0.034582 0.045414 -e -v - 0.562455 -0.052635 0.033495 - 0.522696 -0.051286 0.036888 - 0.48285 -0.048416 0.039846 - 0.456402 -0.045979 0.041238 - 0.429867 -0.045371 0.041934 - 0.403332 -0.047284 0.039672 - 0.376797 -0.045284 0.039063 - 0.323814 -0.041977 0.03915 - 0.270744 -0.04163 0.041238 - 0.229506 -0.042934 0.042804 - 0.217674 -0.040934 0.042021 - 0.164691 -0.041543 0.043935 - 0.111621 -0.040325 0.045762 - 0.058638 -0.039802 0.044022 -e -v - 0.562455 -0.055332 0.031233 - 0.522696 -0.054244 0.034365 - 0.48285 -0.051895 0.037323 - 0.456402 -0.049808 0.038802 - 0.429867 -0.049286 0.039324 - 0.403332 -0.050852 0.037149 - 0.376797 -0.048937 0.036714 - 0.323814 -0.045718 0.036714 - 0.270744 -0.045545 0.038628 - 0.229506 -0.047024 0.04002 - 0.217674 -0.045109 0.039411 - 0.164691 -0.046067 0.041673 - 0.111621 -0.045196 0.043413 - 0.058638 -0.044849 0.042195 -e -v - 0.562455 -0.057681 0.028797 - 0.522696 -0.057115 0.031668 - 0.48285 -0.055115 0.034452 - 0.456402 -0.053461 0.036018 - 0.429867 -0.05294 0.03654 - 0.403332 -0.054244 0.034365 - 0.376797 -0.052504 0.034191 - 0.323814 -0.049459 0.034104 - 0.270744 -0.049373 0.035844 - 0.229506 -0.050939 0.037149 - 0.217674 -0.049286 0.036714 - 0.164691 -0.050416 0.038889 - 0.111621 -0.049808 0.040542 - 0.058638 -0.04972 0.039759 -e -v - 0.562455 -0.059856 0.026013 - 0.522696 -0.0599 0.028884 - 0.48285 -0.05816 0.03132 - 0.456402 -0.056855 0.032973 - 0.429867 -0.056594 0.033495 - 0.403332 -0.057377 0.031233 - 0.376797 -0.055723 0.03132 - 0.323814 -0.05294 0.031233 - 0.270744 -0.053027 0.032886 - 0.229506 -0.054766 0.034104 - 0.217674 -0.053287 0.033843 - 0.164691 -0.054419 0.03567 - 0.111621 -0.054157 0.037323 - 0.058638 -0.054244 0.036888 -e -v - 0.562455 -0.06177 0.023142 - 0.522696 -0.062509 0.025926 - 0.48285 -0.060856 0.028014 - 0.456402 -0.059987 0.029667 - 0.429867 -0.0599 0.030189 - 0.403332 -0.060247 0.028014 - 0.376797 -0.058681 0.028014 - 0.323814 -0.056159 0.028101 - 0.270744 -0.056419 0.029667 - 0.229506 -0.058421 0.030798 - 0.217674 -0.057028 0.030711 - 0.164691 -0.05816 0.032103 - 0.111621 -0.058247 0.033756 - 0.058638 -0.058594 0.033582 -e -v - 0.562455 -0.063423 0.020097 - 0.522696 -0.064598 0.02262 - 0.48285 -0.063293 0.024447 - 0.456402 -0.062684 0.026013 - 0.429867 -0.062684 0.026535 - 0.403332 -0.063032 0.024621 - 0.376797 -0.061205 0.024534 - 0.323814 -0.059117 0.024795 - 0.270744 -0.059464 0.026013 - 0.229506 -0.061639 0.027144 - 0.217674 -0.060422 0.027144 - 0.164691 -0.061552 0.028275 - 0.111621 -0.061988 0.029841 - 0.058638 -0.062422 0.029841 -e -v - 0.562455 -0.064815 0.016878 - 0.522696 -0.066338 0.019053 - 0.48285 -0.06538 0.020706 - 0.456402 -0.064859 0.022011 - 0.429867 -0.065032 0.022446 - 0.403332 -0.06538 0.02088 - 0.376797 -0.06338 0.020706 - 0.323814 -0.061813 0.021228 - 0.270744 -0.062162 0.022185 - 0.229506 -0.064511 0.023055 - 0.217674 -0.06338 0.023142 - 0.164691 -0.064511 0.024099 - 0.111621 -0.065206 0.025491 - 0.058638 -0.065816 0.025665 -e -v - 0.562455 -0.065946 0.013659 - 0.522696 -0.06773 0.015399 - 0.48285 -0.067208 0.016791 - 0.456402 -0.066511 0.017835 - 0.429867 -0.066946 0.018183 - 0.403332 -0.067295 0.016965 - 0.376797 -0.065293 0.016791 - 0.323814 -0.064075 0.017313 - 0.270744 -0.064424 0.018009 - 0.229506 -0.066859 0.018792 - 0.217674 -0.065816 0.018879 - 0.164691 -0.067033 0.019662 - 0.111621 -0.067904 0.020793 - 0.058638 -0.068512 0.020967 -e -v - 0.562455 -0.066903 0.010266 - 0.522696 -0.068861 0.011658 - 0.48285 -0.068512 0.012702 - 0.456402 -0.067904 0.013485 - 0.429867 -0.068512 0.013833 - 0.403332 -0.068861 0.012876 - 0.376797 -0.066859 0.012789 - 0.323814 -0.065903 0.013224 - 0.270744 -0.066251 0.013659 - 0.229506 -0.068774 0.014268 - 0.217674 -0.06773 0.014355 - 0.164691 -0.069035 0.014964 - 0.111621 -0.070078 0.015834 - 0.058638 -0.070514 0.015921 -e -v - 0.562455 -0.067599 0.006873 - 0.522696 -0.06973 0.00783 - 0.48285 -0.069556 0.008526 - 0.456402 -0.068948 0.009048 - 0.429867 -0.069556 0.009222 - 0.403332 -0.069904 0.008613 - 0.376797 -0.068077 0.008526 - 0.323814 -0.06712 0.008874 - 0.270744 -0.06773 0.009222 - 0.229506 -0.070166 0.00957 - 0.217674 -0.069296 0.009657 - 0.164691 -0.070601 0.010092 - 0.111621 -0.071644 0.010614 - 0.058638 -0.071906 0.010701 -e -v - 0.562455 -0.068034 0.003393 - 0.522696 -0.070253 0.003915 - 0.48285 -0.070166 0.004263 - 0.456402 -0.069643 0.004524 - 0.429867 -0.070253 0.004611 - 0.403332 -0.070601 0.00435 - 0.376797 -0.068948 0.004263 - 0.323814 -0.067817 0.004437 - 0.270744 -0.068774 0.004611 - 0.229506 -0.071209 0.004785 - 0.217674 -0.070253 0.004872 - 0.164691 -0.071644 0.005046 - 0.111621 -0.072688 0.005307 - 0.058638 -0.072601 0.005394 -e -v - 0.562455 -0.068208 0.0 - 0.522696 -0.070427 0.0 - 0.48285 -0.070427 0.0 - 0.456402 -0.069991 0.0 - 0.429867 -0.070427 0.0 - 0.403332 -0.070862 0.0 - 0.376797 -0.069556 0.0 - 0.323814 -0.068164 0.0 - 0.270744 -0.069556 0.0 - 0.229506 -0.071819 0.0 - 0.217674 -0.070862 0.0 - 0.164691 -0.072254 0.0 - 0.111621 -0.073211 0.0 - 0.058638 -0.072775 0.0 -e -v - 0.058638 0.081867 0.0 - 0.058638 0.078431 0.017835 - 0.058638 0.06799 0.032712 - 0.058638 0.053027 0.043065 - 0.058638 0.03554 0.048633 - 0.058638 0.017444 0.051069 - 0.058638 0.017444 0.061161 - 0.058638 0.036323 0.061683 - 0.058638 0.03641 0.067512 - 0.058638 0.03641 0.073428 - 0.058638 0.03641 0.079344 - 0.058638 0.036497 0.08526 - 0.058638 0.036497 0.091176 - 0.058638 0.036584 0.097092 - 0.058638 0.036584 0.103008 - 0.058638 0.03667 0.108924 - 0.058638 0.03667 0.11484 - 0.058638 0.036757 0.120756 - 0.058638 0.036757 0.126672 - 0.058638 0.036757 0.132501 - 0.058638 0.028579 0.132414 - 0.058638 0.020489 0.132414 - 0.058638 0.012311 0.132327 - 0.058638 0.004132 0.13224 - 0.058638 -0.004045 0.13224 - 0.058638 -0.012223 0.132153 - 0.058638 -0.020402 0.132153 - 0.058638 -0.028579 0.132066 - 0.058638 -0.036757 0.132066 - 0.058638 -0.044849 0.132675 - 0.058638 -0.053027 0.132501 - 0.058638 -0.06103 0.130674 - 0.058638 -0.067208 0.125628 - 0.058638 -0.069556 0.117885 - 0.058638 -0.070427 0.109794 - 0.058638 -0.070166 0.101616 - 0.058638 -0.070078 0.093438 - 0.058638 -0.071122 0.085347 - 0.058638 -0.07147 0.077169 - 0.058638 -0.068948 0.069513 - 0.058638 -0.063293 0.063771 - 0.058638 -0.055289 0.062379 - 0.058638 -0.047197 0.061335 - 0.058638 -0.039019 0.061074 - 0.058638 -0.030841 0.061683 - 0.058638 -0.030406 0.047415 - 0.058638 -0.04685 0.041934 - 0.058638 -0.060683 0.031581 - 0.058638 -0.06973 0.016965 - 0.058638 -0.072775 0.0 -e -v - 0.023229 0.074994 0.0 - 0.023229 0.072862 0.015399 - 0.023229 0.065206 0.028884 - 0.023229 0.053287 0.038889 - 0.023229 0.038932 0.044979 - 0.023229 0.023534 0.047937 - 0.023229 0.023969 0.061248 - 0.023229 0.036844 0.06177 - 0.023229 0.036757 0.067686 - 0.023229 0.036757 0.073515 - 0.023229 0.03667 0.079431 - 0.023229 0.03667 0.08526 - 0.023229 0.036584 0.091176 - 0.023229 0.036584 0.097005 - 0.023229 0.036497 0.102921 - 0.023229 0.036497 0.10875 - 0.023229 0.036497 0.114666 - 0.023229 0.03641 0.120495 - 0.023229 0.03641 0.126411 - 0.023229 0.036323 0.13224 - 0.023229 0.027796 0.132153 - 0.023229 0.019271 0.132153 - 0.023229 0.010744 0.132066 - 0.023229 0.002132 0.131979 - 0.023229 -0.006394 0.131979 - 0.023229 -0.014921 0.131892 - 0.023229 -0.023447 0.131805 - 0.023229 -0.031973 0.131805 - 0.023229 -0.040498 0.131805 - 0.023229 -0.049112 0.13224 - 0.023229 -0.057638 0.132327 - 0.023229 -0.066077 0.131196 - 0.023229 -0.074167 0.128847 - 0.023229 -0.078691 0.1218 - 0.023229 -0.080431 0.113535 - 0.023229 -0.07991 0.105009 - 0.023229 -0.079475 0.096483 - 0.023229 -0.080257 0.087957 - 0.023229 -0.080518 0.079431 - 0.023229 -0.079388 0.070992 - 0.023229 -0.075212 0.063684 - 0.023229 -0.067904 0.059508 - 0.023229 -0.059377 0.058986 - 0.023229 -0.050852 0.058464 - 0.023229 -0.042326 0.058464 - 0.023229 -0.042238 0.042804 - 0.023229 -0.055376 0.037323 - 0.023229 -0.065293 0.027057 - 0.023229 -0.071296 0.014094 - 0.023229 -0.073211 0.0 -e -v - -0.022359 0.069426 0.0 - -0.022359 0.06799 0.012006 - -0.022359 0.062945 0.023055 - -0.022359 0.05494 0.03219 - -0.022359 0.044675 0.038802 - -0.022359 0.033278 0.042891 - -0.022359 0.032842 0.0609 - -0.022359 0.038846 0.061335 - -0.022359 0.038672 0.06699 - -0.022359 0.038498 0.072645 - -0.022359 0.03841 0.0783 - -0.022359 0.038498 0.084042 - -0.022359 0.038585 0.089697 - -0.022359 0.038759 0.095352 - -0.022359 0.038932 0.101007 - -0.022359 0.039019 0.106749 - -0.022359 0.039019 0.112404 - -0.022359 0.038932 0.118059 - -0.022359 0.038846 0.123801 - -0.022359 0.038672 0.129456 - -0.022359 0.030233 0.12963 - -0.022359 0.021793 0.129891 - -0.022359 0.013354 0.130065 - -0.022359 0.004916 0.130152 - -0.022359 -0.003523 0.130326 - -0.022359 -0.012049 0.130413 - -0.022359 -0.020489 0.130587 - -0.022359 -0.028927 0.130587 - -0.022359 -0.037367 0.130761 - -0.022359 -0.045805 0.131022 - -0.022359 -0.054244 0.130935 - -0.022359 -0.062684 0.130674 - -0.022359 -0.071035 0.129978 - -0.022359 -0.07817 0.125541 - -0.022359 -0.082171 0.118233 - -0.022359 -0.083563 0.109968 - -0.022359 -0.082781 0.101529 - -0.022359 -0.082084 0.093177 - -0.022359 -0.082868 0.084738 - -0.022359 -0.083042 0.076299 - -0.022359 -0.082084 0.067947 - -0.022359 -0.078257 0.060465 - -0.022359 -0.071557 0.055506 - -0.022359 -0.06338 0.053418 - -0.022359 -0.055115 0.052026 - -0.022359 -0.05929 0.034974 - -0.022359 -0.065206 0.027318 - -0.022359 -0.06973 0.018879 - -0.022359 -0.071993 0.00957 - -0.022359 -0.071819 0.0 -e -v - -0.07395 0.063945 0.0 - -0.07395 0.062945 0.009048 - -0.07395 0.060073 0.017835 - -0.07395 0.055549 0.025752 - -0.07395 0.049286 0.032451 - -0.07395 0.04163 0.037497 - -0.07395 0.038585 0.055071 - -0.07395 0.038585 0.061509 - -0.07395 0.038932 0.06699 - -0.07395 0.039193 0.072471 - -0.07395 0.039281 0.077952 - -0.07395 0.039281 0.083433 - -0.07395 0.039281 0.089001 - -0.07395 0.039281 0.094482 - -0.07395 0.039368 0.099963 - -0.07395 0.039629 0.105444 - -0.07395 0.040064 0.110925 - -0.07395 0.040151 0.116493 - -0.07395 0.039629 0.121887 - -0.07395 0.038585 0.127281 - -0.07395 0.030058 0.127368 - -0.07395 0.02162 0.127455 - -0.07395 0.013094 0.127455 - -0.07395 0.004568 0.127455 - -0.07395 -0.003872 0.127542 - -0.07395 -0.012397 0.127716 - -0.07395 -0.020837 0.127977 - -0.07395 -0.029362 0.128325 - -0.07395 -0.037889 0.128673 - -0.07395 -0.046328 0.128847 - -0.07395 -0.054853 0.129108 - -0.07395 -0.063293 0.129717 - -0.07395 -0.071644 0.128412 - -0.07395 -0.079301 0.124758 - -0.07395 -0.084173 0.117972 - -0.07395 -0.086957 0.109968 - -0.07395 -0.087479 0.101529 - -0.07395 -0.087044 0.093003 - -0.07395 -0.087044 0.084564 - -0.07395 -0.087566 0.076038 - -0.07395 -0.087044 0.067599 - -0.07395 -0.084868 0.059334 - -0.07395 -0.080692 0.052026 - -0.07395 -0.073733 0.047415 - -0.07395 -0.066077 0.043761 - -0.07395 -0.065729 0.034974 - -0.07395 -0.067643 0.026361 - -0.07395 -0.069556 0.017661 - -0.07395 -0.07034 0.008787 - -0.07395 -0.069991 0.0 -e -v - -0.153555 0.055158 0.0 - -0.153555 0.055289 0.005568 - -0.153555 0.054244 0.011049 - -0.153555 0.05207 0.016182 - -0.153555 0.049112 0.020967 - -0.153555 0.045545 0.025317 - -0.153555 0.04363 0.032103 - -0.153555 0.041977 0.038976 - -0.153555 0.040585 0.045849 - -0.153555 0.038932 0.052722 - -0.153555 0.037714 0.059682 - -0.153555 0.037627 0.066816 - -0.153555 0.037714 0.073863 - -0.153555 0.037714 0.08091 - -0.153555 0.037714 0.087957 - -0.153555 0.037714 0.095091 - -0.153555 0.037714 0.102138 - -0.153555 0.037714 0.109185 - -0.153555 0.037714 0.116232 - -0.153555 0.037714 0.123366 - -0.153555 0.028841 0.123714 - -0.153555 0.019966 0.123975 - -0.153555 0.011092 0.124149 - -0.153555 0.002219 0.124236 - -0.153555 -0.006743 0.124149 - -0.153555 -0.015616 0.123888 - -0.153555 -0.02449 0.123714 - -0.153555 -0.033365 0.123888 - -0.153555 -0.042238 0.12441 - -0.153555 -0.051112 0.124932 - -0.153555 -0.0599 0.125889 - -0.153555 -0.068599 0.127629 - -0.153555 -0.077212 0.125976 - -0.153555 -0.084173 0.120582 - -0.153555 -0.086521 0.11223 - -0.153555 -0.086957 0.103356 - -0.153555 -0.087739 0.094569 - -0.153555 -0.088436 0.085695 - -0.153555 -0.088871 0.076821 - -0.153555 -0.088958 0.067947 - -0.153555 -0.088436 0.059073 - -0.153555 -0.086957 0.050286 - -0.153555 -0.083999 0.041934 - -0.153555 -0.077996 0.035496 - -0.153555 -0.070514 0.030798 - -0.153555 -0.068251 0.025143 - -0.153555 -0.06773 0.018879 - -0.153555 -0.067556 0.012528 - -0.153555 -0.067643 0.006264 - -0.153555 -0.068164 0.0 -e -v - -0.21663 0.048285 0.0 - -0.21663 0.048154 0.004089 - -0.21663 0.047284 0.008178 - -0.21663 0.045892 0.012006 - -0.21663 0.043456 0.015399 - -0.21663 0.040151 0.017748 - -0.21663 0.039802 0.02523 - -0.21663 0.039368 0.032625 - -0.21663 0.038759 0.040107 - -0.21663 0.037976 0.047502 - -0.21663 0.036931 0.054897 - -0.21663 0.036757 0.062292 - -0.21663 0.037193 0.069687 - -0.21663 0.03728 0.077169 - -0.21663 0.037193 0.084651 - -0.21663 0.037019 0.092046 - -0.21663 0.036931 0.099528 - -0.21663 0.036844 0.106923 - -0.21663 0.036757 0.114405 - -0.21663 0.03667 0.121887 - -0.21663 0.027623 0.121887 - -0.21663 0.018575 0.121974 - -0.21663 0.009527 0.122061 - -0.21663 0.000565 0.122061 - -0.21663 -0.008482 0.122148 - -0.21663 -0.017531 0.122061 - -0.21663 -0.026579 0.122148 - -0.21663 -0.03554 0.122583 - -0.21663 -0.044588 0.123279 - -0.21663 -0.053548 0.123975 - -0.21663 -0.062509 0.125106 - -0.21663 -0.07147 0.124671 - -0.21663 -0.07991 0.121713 - -0.21663 -0.085391 0.114666 - -0.21663 -0.087044 0.105879 - -0.21663 -0.08687 0.096918 - -0.21663 -0.087739 0.08787 - -0.21663 -0.088523 0.078909 - -0.21663 -0.088958 0.069861 - -0.21663 -0.088958 0.0609 - -0.21663 -0.088436 0.051852 - -0.21663 -0.08626 0.043152 - -0.21663 -0.08252 0.034887 - -0.21663 -0.076952 0.02784 - -0.21663 -0.07034 0.021663 - -0.21663 -0.068687 0.017661 - -0.21663 -0.068425 0.013224 - -0.21663 -0.068164 0.008787 - -0.21663 -0.068077 0.00435 - -0.21663 -0.068164 0.0 -e -v - -0.286143 0.04089 0.0 - -0.286143 0.041021 0.002784 - -0.286143 0.040238 0.005568 - -0.286143 0.038672 0.007917 - -0.286143 0.036584 0.009918 - -0.286143 0.034061 0.011223 - -0.286143 0.033886 0.019053 - -0.286143 0.033712 0.026796 - -0.286143 0.033712 0.034626 - -0.286143 0.033712 0.042456 - -0.286143 0.033712 0.050199 - -0.286143 0.033886 0.058029 - -0.286143 0.034148 0.065859 - -0.286143 0.034235 0.073602 - -0.286143 0.034235 0.081432 - -0.286143 0.034235 0.089175 - -0.286143 0.034061 0.097005 - -0.286143 0.033712 0.104835 - -0.286143 0.03319 0.112578 - -0.286143 0.032495 0.120321 - -0.286143 0.02362 0.119712 - -0.286143 0.014747 0.11919 - -0.286143 0.005873 0.118929 - -0.286143 -0.003001 0.118929 - -0.286143 -0.011875 0.119016 - -0.286143 -0.02075 0.119364 - -0.286143 -0.029624 0.119886 - -0.286143 -0.038498 0.120669 - -0.286143 -0.047284 0.121713 - -0.286143 -0.056159 0.122496 - -0.286143 -0.064945 0.123627 - -0.286143 -0.073646 0.122322 - -0.286143 -0.081041 0.117537 - -0.286143 -0.085652 0.110055 - -0.286143 -0.087479 0.101355 - -0.286143 -0.087652 0.092481 - -0.286143 -0.088262 0.083607 - -0.286143 -0.088958 0.07482 - -0.286143 -0.089218 0.065946 - -0.286143 -0.089045 0.056985 - -0.286143 -0.088262 0.048198 - -0.286143 -0.086 0.039585 - -0.286143 -0.082259 0.031581 - -0.286143 -0.076865 0.024534 - -0.286143 -0.070862 0.017922 - -0.286143 -0.069469 0.014529 - -0.286143 -0.068251 0.010962 - -0.286143 -0.06773 0.007308 - -0.286143 -0.068077 0.003567 - -0.286143 -0.069122 0.0 -e -v - -0.365661 0.033495 0.0 - -0.365661 0.031973 0.002175 - -0.365661 0.03032 0.004437 - -0.365661 0.029102 0.00696 - -0.365661 0.028579 0.009657 - -0.365661 0.028579 0.012441 - -0.365661 0.028058 0.02001 - -0.365661 0.028058 0.027492 - -0.365661 0.028754 0.035061 - -0.365661 0.029972 0.042456 - -0.365661 0.031189 0.049938 - -0.365661 0.032495 0.057333 - -0.365661 0.032929 0.064902 - -0.365661 0.03206 0.072384 - -0.365661 0.030841 0.079779 - -0.365661 0.029972 0.087348 - -0.365661 0.029275 0.09483 - -0.365661 0.028667 0.102312 - -0.365661 0.028319 0.109881 - -0.365661 0.028144 0.11745 - -0.365661 0.019619 0.117798 - -0.365661 0.011006 0.117711 - -0.365661 0.002479 0.117711 - -0.365661 -0.006047 0.117798 - -0.365661 -0.014659 0.117885 - -0.365661 -0.023186 0.117972 - -0.365661 -0.031712 0.118146 - -0.365661 -0.040325 0.11832 - -0.365661 -0.04885 0.118581 - -0.365661 -0.057377 0.119016 - -0.365661 -0.065903 0.119973 - -0.365661 -0.073907 0.117276 - -0.365661 -0.080257 0.111708 - -0.365661 -0.084868 0.104487 - -0.365661 -0.086608 0.096222 - -0.365661 -0.086608 0.087696 - -0.365661 -0.087044 0.079083 - -0.365661 -0.087305 0.070557 - -0.365661 -0.087392 0.062031 - -0.365661 -0.087131 0.053418 - -0.365661 -0.086695 0.044892 - -0.365661 -0.084781 0.03654 - -0.365661 -0.081302 0.028797 - -0.365661 -0.075994 0.022098 - -0.365661 -0.070862 0.015225 - -0.365661 -0.069469 0.012267 - -0.365661 -0.069122 0.009222 - -0.365661 -0.068948 0.00609 - -0.365661 -0.068774 0.003045 - -0.365661 -0.068599 0.0 -e -v - -0.409683 0.028449 0.0 - -0.409683 0.027448 0.003567 - -0.409683 0.02684 0.007221 - -0.409683 0.026665 0.010875 - -0.409683 0.026579 0.014616 - -0.409683 0.026579 0.018357 - -0.409683 0.02684 0.025491 - -0.409683 0.028493 0.032451 - -0.409683 0.030581 0.039237 - -0.409683 0.032407 0.046197 - -0.409683 0.033886 0.053157 - -0.409683 0.034495 0.060291 - -0.409683 0.034322 0.067512 - -0.409683 0.033452 0.074559 - -0.409683 0.031799 0.081519 - -0.409683 0.029537 0.088392 - -0.409683 0.027362 0.095178 - -0.409683 0.025621 0.102138 - -0.409683 0.024751 0.109185 - -0.409683 0.024665 0.116406 - -0.409683 0.016313 0.116493 - -0.409683 0.007873 0.116667 - -0.409683 -0.000479 0.116841 - -0.409683 -0.008918 0.117015 - -0.409683 -0.017357 0.117276 - -0.409683 -0.025709 0.117537 - -0.409683 -0.034148 0.117798 - -0.409683 -0.0425 0.118146 - -0.409683 -0.050939 0.118407 - -0.409683 -0.05929 0.118755 - -0.409683 -0.06773 0.118668 - -0.409683 -0.075646 0.116928 - -0.409683 -0.081476 0.110838 - -0.409683 -0.085042 0.103443 - -0.409683 -0.085391 0.095091 - -0.409683 -0.085826 0.086652 - -0.409683 -0.086 0.0783 - -0.409683 -0.086 0.069861 - -0.409683 -0.086 0.061422 - -0.409683 -0.085826 0.05307 - -0.409683 -0.085129 0.044718 - -0.409683 -0.083738 0.036366 - -0.409683 -0.081041 0.028449 - -0.409683 -0.076081 0.02175 - -0.409683 -0.071035 0.015051 - -0.409683 -0.069209 0.012441 - -0.409683 -0.068164 0.009483 - -0.409683 -0.06773 0.006351 - -0.409683 -0.067556 0.003132 - -0.409683 -0.06773 0.0 -e -v - -0.485634 0.022968 0.0 - -0.485634 0.022924 0.003741 - -0.485634 0.022489 0.007482 - -0.485634 0.022489 0.01131 - -0.485634 0.023099 0.015051 - -0.485634 0.024143 0.018705 - -0.485634 0.026579 0.025839 - -0.485634 0.029797 0.032625 - -0.485634 0.032842 0.039411 - -0.485634 0.035365 0.046545 - -0.485634 0.036931 0.053853 - -0.485634 0.037627 0.061335 - -0.485634 0.037193 0.068817 - -0.485634 0.035801 0.076212 - -0.485634 0.033539 0.083346 - -0.485634 0.03032 0.090132 - -0.485634 0.026057 0.096309 - -0.485634 0.022228 0.102834 - -0.485634 0.019271 0.109707 - -0.485634 0.01814 0.117102 - -0.485634 0.010049 0.116754 - -0.485634 0.001958 0.116406 - -0.485634 -0.006134 0.116232 - -0.485634 -0.014311 0.116058 - -0.485634 -0.022403 0.115971 - -0.485634 -0.030493 0.115971 - -0.485634 -0.038585 0.116058 - -0.485634 -0.046675 0.116406 - -0.485634 -0.054766 0.116841 - -0.485634 -0.062858 0.116841 - -0.485634 -0.070949 0.116232 - -0.485634 -0.077822 0.112143 - -0.485634 -0.083389 0.106314 - -0.485634 -0.085478 0.098571 - -0.485634 -0.086 0.09048 - -0.485634 -0.086173 0.082389 - -0.485634 -0.085913 0.074298 - -0.485634 -0.085391 0.066207 - -0.485634 -0.084955 0.058116 - -0.485634 -0.084868 0.050025 - -0.485634 -0.084868 0.041934 - -0.485634 -0.083563 0.03393 - -0.485634 -0.080344 0.026535 - -0.485634 -0.075473 0.020097 - -0.485634 -0.070601 0.013572 - -0.485634 -0.069643 0.010962 - -0.485634 -0.068948 0.008265 - -0.485634 -0.068774 0.005481 - -0.485634 -0.068512 0.002697 - -0.485634 -0.068164 0.0 -e -v - -0.5568 0.019749 0.0 - -0.5568 0.019706 0.002871 - -0.5568 0.019879 0.005829 - -0.5568 0.020314 0.008787 - -0.5568 0.021185 0.011571 - -0.5568 0.022403 0.014268 - -0.5568 0.026752 0.021489 - -0.5568 0.03206 0.027927 - -0.5568 0.035801 0.035409 - -0.5568 0.038846 0.043239 - -0.5568 0.041108 0.051417 - -0.5568 0.041891 0.059769 - -0.5568 0.041455 0.068121 - -0.5568 0.039802 0.076299 - -0.5568 0.037019 0.084303 - -0.5568 0.033365 0.091872 - -0.5568 0.028667 0.098745 - -0.5568 0.022924 0.104922 - -0.5568 0.017531 0.11136 - -0.5568 0.014833 0.11919 - -0.5568 0.006917 0.118929 - -0.5568 -0.000914 0.118755 - -0.5568 -0.008744 0.118407 - -0.5568 -0.016661 0.118059 - -0.5568 -0.02449 0.117711 - -0.5568 -0.032407 0.117363 - -0.5568 -0.040238 0.116928 - -0.5568 -0.048067 0.116406 - -0.5568 -0.055985 0.115884 - -0.5568 -0.063814 0.115623 - -0.5568 -0.071383 0.113622 - -0.5568 -0.077473 0.108837 - -0.5568 -0.08078 0.101703 - -0.5568 -0.081128 0.093873 - -0.5568 -0.081562 0.086043 - -0.5568 -0.081823 0.078213 - -0.5568 -0.081997 0.070296 - -0.5568 -0.081997 0.062466 - -0.5568 -0.081823 0.054549 - -0.5568 -0.081476 0.046719 - -0.5568 -0.081302 0.038802 - -0.5568 -0.079736 0.031146 - -0.5568 -0.075473 0.024621 - -0.5568 -0.069991 0.018966 - -0.5568 -0.06599 0.012267 - -0.5568 -0.064859 0.010005 - -0.5568 -0.06425 0.007569 - -0.5568 -0.064075 0.005046 - -0.5568 -0.063988 0.002523 - -0.5568 -0.063988 0.0 -e -v - -0.638232 0.012354 0.0 - -0.638232 0.012223 0.001653 - -0.638232 0.012311 0.003306 - -0.638232 0.012571 0.004959 - -0.638232 0.013006 0.006612 - -0.638232 0.013702 0.008178 - -0.638232 0.02075 0.014703 - -0.638232 0.027448 0.021663 - -0.638232 0.033365 0.029145 - -0.638232 0.037802 0.037671 - -0.638232 0.040672 0.046893 - -0.638232 0.041891 0.056376 - -0.638232 0.04163 0.065946 - -0.638232 0.039976 0.075429 - -0.638232 0.036844 0.084564 - -0.638232 0.03232 0.093003 - -0.638232 0.026231 0.100398 - -0.638232 0.019096 0.106836 - -0.638232 0.011354 0.112491 - -0.638232 0.007091 0.12093 - -0.638232 -0.000131 0.12006 - -0.638232 -0.007351 0.11919 - -0.638232 -0.014573 0.118407 - -0.638232 -0.021793 0.117624 - -0.638232 -0.029014 0.116928 - -0.638232 -0.036148 0.116058 - -0.638232 -0.04337 0.11484 - -0.638232 -0.050416 0.113361 - -0.638232 -0.057377 0.111099 - -0.638232 -0.063727 0.107619 - -0.638232 -0.068948 0.102573 - -0.638232 -0.072862 0.096483 - -0.638232 -0.075386 0.089697 - -0.638232 -0.076865 0.08265 - -0.638232 -0.077822 0.075429 - -0.638232 -0.078083 0.068121 - -0.638232 -0.078257 0.0609 - -0.638232 -0.078344 0.053679 - -0.638232 -0.077909 0.046371 - -0.638232 -0.076778 0.039237 - -0.638232 -0.074602 0.032277 - -0.638232 -0.071122 0.025926 - -0.638232 -0.066251 0.020619 - -0.638232 -0.061205 0.015486 - -0.638232 -0.057638 0.009135 - -0.638232 -0.056942 0.007395 - -0.638232 -0.056419 0.005568 - -0.638232 -0.056072 0.003741 - -0.638232 -0.05581 0.001827 - -0.638232 -0.055723 0.0 -e -v - -0.706005 0.004524 0.0 - -0.706005 0.004742 0.001131 - -0.706005 0.005003 0.002349 - -0.706005 0.005176 0.003567 - -0.706005 0.00535 0.004785 - -0.706005 0.005524 0.006003 - -0.706005 0.014137 0.011136 - -0.706005 0.022141 0.017052 - -0.706005 0.029014 0.02436 - -0.706005 0.034235 0.032799 - -0.706005 0.037976 0.042108 - -0.706005 0.039889 0.051852 - -0.706005 0.040064 0.061857 - -0.706005 0.038585 0.071775 - -0.706005 0.035627 0.081345 - -0.706005 0.030841 0.090045 - -0.706005 0.024403 0.097701 - -0.706005 0.016921 0.104313 - -0.706005 0.008744 0.110055 - -0.706005 0.000392 0.115536 - -0.706005 -0.006134 0.11484 - -0.706005 -0.012571 0.114057 - -0.706005 -0.01901 0.113274 - -0.706005 -0.025534 0.112839 - -0.706005 -0.03206 0.11223 - -0.706005 -0.038323 0.110838 - -0.706005 -0.0445 0.10875 - -0.706005 -0.050242 0.105705 - -0.706005 -0.055202 0.101529 - -0.706005 -0.059377 0.09657 - -0.706005 -0.063206 0.091263 - -0.706005 -0.066511 0.085608 - -0.706005 -0.069296 0.079779 - -0.706005 -0.071383 0.073602 - -0.706005 -0.072601 0.067164 - -0.706005 -0.073123 0.060726 - -0.706005 -0.072862 0.054201 - -0.706005 -0.071906 0.047763 - -0.706005 -0.070253 0.041499 - -0.706005 -0.067904 0.035409 - -0.706005 -0.064772 0.029754 - -0.706005 -0.060943 0.024447 - -0.706005 -0.056332 0.019836 - -0.706005 -0.051635 0.015312 - -0.706005 -0.047807 0.010005 - -0.706005 -0.046937 0.008178 - -0.706005 -0.046241 0.006177 - -0.706005 -0.045805 0.004176 - -0.706005 -0.045545 0.002088 - -0.706005 -0.045632 0.0 -e -v - -0.757944 -0.005133 0.0 - -0.757944 -0.005089 0.001479 - -0.757944 -0.005089 0.003045 - -0.757944 -0.005089 0.004611 - -0.757944 -0.005003 0.006177 - -0.757944 -0.005003 0.007743 - -0.757944 0.004655 0.011136 - -0.757944 0.013528 0.016443 - -0.757944 0.021097 0.023403 - -0.757944 0.0271 0.031668 - -0.757944 0.031277 0.041064 - -0.757944 0.033365 0.051069 - -0.757944 0.033452 0.061422 - -0.757944 0.031712 0.071514 - -0.757944 0.027971 0.081084 - -0.757944 0.022489 0.089784 - -0.757944 0.015356 0.097179 - -0.757944 0.00683 0.102834 - -0.757944 -0.002741 0.106749 - -0.757944 -0.012833 0.108663 - -0.757944 -0.018488 0.108663 - -0.757944 -0.024143 0.108141 - -0.757944 -0.02971 0.107097 - -0.757944 -0.035105 0.105357 - -0.757944 -0.040238 0.103008 - -0.757944 -0.045109 0.100137 - -0.757944 -0.049633 0.096657 - -0.757944 -0.05381 0.092829 - -0.757944 -0.057551 0.088566 - -0.757944 -0.06077 0.083955 - -0.757944 -0.063466 0.078909 - -0.757944 -0.065554 0.073689 - -0.757944 -0.067033 0.068208 - -0.757944 -0.067817 0.062553 - -0.757944 -0.068077 0.056898 - -0.757944 -0.067817 0.051243 - -0.757944 -0.066859 0.045675 - -0.757944 -0.065206 0.040281 - -0.757944 -0.062684 0.035148 - -0.757944 -0.059551 0.03045 - -0.757944 -0.056072 0.026013 - -0.757944 -0.052244 0.02175 - -0.757944 -0.048067 0.017922 - -0.757944 -0.043543 0.014616 - -0.757944 -0.038585 0.011832 - -0.757944 -0.038672 0.009396 - -0.757944 -0.038846 0.007047 - -0.757944 -0.038932 0.004698 - -0.757944 -0.039019 0.002349 - -0.757944 -0.039193 0.0 -e -v - -0.812058 -0.015747 0.0 - -0.812058 -0.015703 0.001827 - -0.812058 -0.015703 0.003654 - -0.812058 -0.015703 0.005481 - -0.812058 -0.015703 0.007308 - -0.812058 -0.015703 0.009135 - -0.812058 -0.004655 0.010788 - -0.812058 0.005786 0.014964 - -0.812058 0.015007 0.021141 - -0.812058 0.022489 0.029493 - -0.812058 0.027536 0.039498 - -0.812058 0.03032 0.050373 - -0.812058 0.030755 0.061509 - -0.812058 0.028841 0.072558 - -0.812058 0.02449 0.082911 - -0.812058 0.017879 0.091872 - -0.812058 0.009178 0.098919 - -0.812058 -0.000914 0.103704 - -0.812058 -0.011875 0.106053 - -0.812058 -0.023099 0.105879 - -0.812058 -0.028754 0.104835 - -0.812058 -0.033799 0.103095 - -0.812058 -0.038585 0.100833 - -0.812058 -0.043109 0.097962 - -0.812058 -0.047371 0.094743 - -0.812058 -0.051199 0.091002 - -0.812058 -0.054593 0.086913 - -0.812058 -0.057725 0.082563 - -0.812058 -0.060334 0.077952 - -0.812058 -0.062422 0.072993 - -0.812058 -0.063814 0.06786 - -0.812058 -0.064511 0.062553 - -0.812058 -0.064685 0.057246 - -0.812058 -0.064337 0.051939 - -0.812058 -0.06364 0.046632 - -0.812058 -0.062335 0.041499 - -0.812058 -0.060247 0.03654 - -0.812058 -0.057551 0.032016 - -0.812058 -0.054419 0.027666 - -0.812058 -0.051025 0.023577 - -0.812058 -0.047197 0.019836 - -0.812058 -0.042847 0.016791 - -0.812058 -0.038063 0.014355 - -0.812058 -0.03319 0.012267 - -0.812058 -0.028144 0.010527 - -0.812058 -0.028144 0.008439 - -0.812058 -0.028144 0.006351 - -0.812058 -0.028144 0.004176 - -0.812058 -0.028144 0.002088 - -0.812058 -0.028144 0.0 -e -v - -0.838506 -0.02175 0.0 - -0.838506 -0.021706 0.00174 - -0.838506 -0.021706 0.003567 - -0.838506 -0.021706 0.005394 - -0.838506 -0.021706 0.007134 - -0.838506 -0.021793 0.008961 - -0.838506 -0.010571 0.009309 - -0.838506 0.000217 0.012354 - -0.838506 0.010223 0.017487 - -0.838506 0.018835 0.024708 - -0.838506 0.025013 0.034104 - -0.838506 0.028927 0.044544 - -0.838506 0.030928 0.05568 - -0.838506 0.030406 0.066816 - -0.838506 0.027013 0.077517 - -0.838506 0.021272 0.087174 - -0.838506 0.013616 0.095352 - -0.838506 0.004306 0.101616 - -0.838506 -0.006307 0.105183 - -0.838506 -0.017531 0.10614 - -0.838506 -0.023447 0.105879 - -0.838506 -0.029275 0.104922 - -0.838506 -0.034844 0.103095 - -0.838506 -0.040151 0.100398 - -0.838506 -0.045022 0.097092 - -0.838506 -0.049633 0.093438 - -0.838506 -0.053897 0.089349 - -0.838506 -0.057638 0.084738 - -0.838506 -0.060596 0.079605 - -0.838506 -0.062771 0.074124 - -0.838506 -0.064337 0.068469 - -0.838506 -0.065293 0.06264 - -0.838506 -0.065467 0.056724 - -0.838506 -0.065206 0.050808 - -0.838506 -0.064337 0.044979 - -0.838506 -0.062596 0.039324 - -0.838506 -0.059987 0.034017 - -0.838506 -0.056681 0.029145 - -0.838506 -0.05294 0.024621 - -0.838506 -0.048763 0.020358 - -0.838506 -0.044066 0.016878 - -0.838506 -0.038759 0.014094 - -0.838506 -0.033278 0.012093 - -0.838506 -0.027536 0.010527 - -0.838506 -0.021793 0.009396 - -0.838506 -0.021706 0.007134 - -0.838506 -0.021706 0.005394 - -0.838506 -0.021706 0.003567 - -0.838506 -0.021706 0.00174 - -0.838506 -0.021706 0.0 -e -v - 0.058638 0.081867 0.0 - 0.023229 0.075038 0.0 - -0.022359 0.069469 0.0 - -0.07395 0.063988 0.0 - -0.153555 0.055202 0.0 - -0.21663 0.048329 0.0 - -0.286143 0.040934 0.0 - -0.365661 0.033539 0.0 - -0.409683 0.028493 0.0 - -0.485634 0.023012 0.0 - -0.5568 0.019793 0.0 - -0.638232 0.012397 0.0 - -0.706005 0.004568 0.0 - -0.757944 -0.005089 0.0 - -0.812058 -0.015703 0.0 - -0.838506 -0.021706 0.0 -e -v - 0.058638 0.078387 0.017835 - 0.023229 0.072862 0.015399 - -0.022359 0.06799 0.012006 - -0.07395 0.062945 0.009048 - -0.153555 0.055289 0.005568 - -0.21663 0.048154 0.004089 - -0.286143 0.041021 0.002784 - -0.365661 0.031973 0.002175 - -0.409683 0.027448 0.003567 - -0.485634 0.022924 0.003741 - -0.5568 0.019706 0.002871 - -0.638232 0.012223 0.001653 - -0.706005 0.004742 0.001131 - -0.757944 -0.005089 0.001479 - -0.812058 -0.015703 0.001827 - -0.838506 -0.021706 0.00174 -e -v - 0.058638 0.067947 0.032712 - 0.023229 0.065206 0.028884 - -0.022359 0.062945 0.023055 - -0.07395 0.060073 0.017835 - -0.153555 0.054244 0.011049 - -0.21663 0.047284 0.008178 - -0.286143 0.040238 0.005568 - -0.365661 0.03032 0.004437 - -0.409683 0.02684 0.007221 - -0.485634 0.022489 0.007482 - -0.5568 0.019879 0.005829 - -0.638232 0.012311 0.003306 - -0.706005 0.005003 0.002349 - -0.757944 -0.005089 0.003045 - -0.812058 -0.015703 0.003654 - -0.838506 -0.021706 0.003567 -e -v - 0.058638 0.052983 0.043065 - 0.023229 0.053287 0.038889 - -0.022359 0.05494 0.03219 - -0.07395 0.055549 0.025752 - -0.153555 0.05207 0.016182 - -0.21663 0.045892 0.012006 - -0.286143 0.038672 0.007917 - -0.365661 0.029102 0.00696 - -0.409683 0.026665 0.010875 - -0.485634 0.022489 0.01131 - -0.5568 0.020314 0.008787 - -0.638232 0.012571 0.004959 - -0.706005 0.005176 0.003567 - -0.757944 -0.005089 0.004611 - -0.812058 -0.015703 0.005481 - -0.838506 -0.021706 0.005394 -e -v - 0.058638 0.035496 0.048633 - 0.023229 0.038932 0.044979 - -0.022359 0.044675 0.038802 - -0.07395 0.049286 0.032451 - -0.153555 0.049112 0.020967 - -0.21663 0.043456 0.015399 - -0.286143 0.036584 0.009918 - -0.365661 0.028579 0.009657 - -0.409683 0.026579 0.014616 - -0.485634 0.023099 0.015051 - -0.5568 0.021185 0.011571 - -0.638232 0.013006 0.006612 - -0.706005 0.00535 0.004785 - -0.757944 -0.005003 0.006177 - -0.812058 -0.015703 0.007308 - -0.838506 -0.021706 0.007134 -e -v - 0.058638 0.0174 0.051069 - 0.023229 0.023534 0.047937 - -0.022359 0.033278 0.042891 - -0.07395 0.04163 0.037497 - -0.153555 0.045545 0.025317 - -0.21663 0.040151 0.017748 - -0.286143 0.034061 0.011223 - -0.365661 0.028579 0.012441 - -0.409683 0.026579 0.018357 - -0.485634 0.024143 0.018705 - -0.5568 0.022403 0.014268 - -0.638232 0.013702 0.008178 - -0.706005 0.005524 0.006003 - -0.757944 -0.005003 0.007743 - -0.812058 -0.015703 0.009135 - -0.838506 -0.021793 0.008961 -e -v - 0.058638 0.0174 0.061161 - 0.023229 0.023969 0.061248 - -0.022359 0.032842 0.0609 - -0.07395 0.038585 0.055071 - -0.153555 0.04363 0.032103 - -0.21663 0.039802 0.02523 - -0.286143 0.033886 0.019053 - -0.365661 0.028058 0.02001 - -0.409683 0.02684 0.025491 - -0.485634 0.026579 0.025839 - -0.5568 0.026752 0.021489 - -0.638232 0.02075 0.014703 - -0.706005 0.014137 0.011136 - -0.757944 0.004655 0.011136 - -0.812058 -0.004655 0.010788 - -0.838506 -0.010571 0.009309 -e -v - 0.058638 0.036279 0.061683 - 0.023229 0.036844 0.06177 - -0.022359 0.038846 0.061335 - -0.07395 0.038585 0.061509 - -0.153555 0.041977 0.038976 - -0.21663 0.039368 0.032625 - -0.286143 0.033712 0.026796 - -0.365661 0.028058 0.027492 - -0.409683 0.028493 0.032451 - -0.485634 0.029797 0.032625 - -0.5568 0.03206 0.027927 - -0.638232 0.027448 0.021663 - -0.706005 0.022141 0.017052 - -0.757944 0.013528 0.016443 - -0.812058 0.005786 0.014964 - -0.838506 0.000217 0.012354 -e -v - 0.058638 0.036366 0.067512 - 0.023229 0.036757 0.067686 - -0.022359 0.038672 0.06699 - -0.07395 0.038932 0.06699 - -0.153555 0.040585 0.045849 - -0.21663 0.038759 0.040107 - -0.286143 0.033712 0.034626 - -0.365661 0.028754 0.035061 - -0.409683 0.030581 0.039237 - -0.485634 0.032842 0.039411 - -0.5568 0.035801 0.035409 - -0.638232 0.033365 0.029145 - -0.706005 0.029014 0.02436 - -0.757944 0.021097 0.023403 - -0.812058 0.015007 0.021141 - -0.838506 0.010223 0.017487 -e -v - 0.058638 0.036366 0.073428 - 0.023229 0.036757 0.073515 - -0.022359 0.038498 0.072645 - -0.07395 0.039193 0.072471 - -0.153555 0.038932 0.052722 - -0.21663 0.037976 0.047502 - -0.286143 0.033712 0.042456 - -0.365661 0.029972 0.042456 - -0.409683 0.032407 0.046197 - -0.485634 0.035365 0.046545 - -0.5568 0.038846 0.043239 - -0.638232 0.037802 0.037671 - -0.706005 0.034235 0.032799 - -0.757944 0.0271 0.031668 - -0.812058 0.022489 0.029493 - -0.838506 0.018835 0.024708 -e -v - 0.058638 0.036366 0.079344 - 0.023229 0.03667 0.079431 - -0.022359 0.03841 0.0783 - -0.07395 0.039281 0.077952 - -0.153555 0.037714 0.059682 - -0.21663 0.036931 0.054897 - -0.286143 0.033712 0.050199 - -0.365661 0.031189 0.049938 - -0.409683 0.033886 0.053157 - -0.485634 0.036931 0.053853 - -0.5568 0.041108 0.051417 - -0.638232 0.040672 0.046893 - -0.706005 0.037976 0.042108 - -0.757944 0.031277 0.041064 - -0.812058 0.027536 0.039498 - -0.838506 0.025013 0.034104 -e -v - 0.058638 0.036453 0.08526 - 0.023229 0.03667 0.08526 - -0.022359 0.038498 0.084042 - -0.07395 0.039281 0.083433 - -0.153555 0.037627 0.066816 - -0.21663 0.036757 0.062292 - -0.286143 0.033886 0.058029 - -0.365661 0.032495 0.057333 - -0.409683 0.034495 0.060291 - -0.485634 0.037627 0.061335 - -0.5568 0.041891 0.059769 - -0.638232 0.041891 0.056376 - -0.706005 0.039889 0.051852 - -0.757944 0.033365 0.051069 - -0.812058 0.03032 0.050373 - -0.838506 0.028927 0.044544 -e -v - 0.058638 0.036453 0.091176 - 0.023229 0.036584 0.091176 - -0.022359 0.038585 0.089697 - -0.07395 0.039281 0.089001 - -0.153555 0.037714 0.073863 - -0.21663 0.037193 0.069687 - -0.286143 0.034148 0.065859 - -0.365661 0.032929 0.064902 - -0.409683 0.034322 0.067512 - -0.485634 0.037193 0.068817 - -0.5568 0.041455 0.068121 - -0.638232 0.04163 0.065946 - -0.706005 0.040064 0.061857 - -0.757944 0.033452 0.061422 - -0.812058 0.030755 0.061509 - -0.838506 0.030928 0.05568 -e -v - 0.058638 0.03654 0.097092 - 0.023229 0.036584 0.097005 - -0.022359 0.038759 0.095352 - -0.07395 0.039281 0.094482 - -0.153555 0.037714 0.08091 - -0.21663 0.03728 0.077169 - -0.286143 0.034235 0.073602 - -0.365661 0.03206 0.072384 - -0.409683 0.033452 0.074559 - -0.485634 0.035801 0.076212 - -0.5568 0.039802 0.076299 - -0.638232 0.039976 0.075429 - -0.706005 0.038585 0.071775 - -0.757944 0.031712 0.071514 - -0.812058 0.028841 0.072558 - -0.838506 0.030406 0.066816 -e -v - 0.058638 0.03654 0.103008 - 0.023229 0.036497 0.102921 - -0.022359 0.038932 0.101007 - -0.07395 0.039368 0.099963 - -0.153555 0.037714 0.087957 - -0.21663 0.037193 0.084651 - -0.286143 0.034235 0.081432 - -0.365661 0.030841 0.079779 - -0.409683 0.031799 0.081519 - -0.485634 0.033539 0.083346 - -0.5568 0.037019 0.084303 - -0.638232 0.036844 0.084564 - -0.706005 0.035627 0.081345 - -0.757944 0.027971 0.081084 - -0.812058 0.02449 0.082911 - -0.838506 0.027013 0.077517 -e -v - 0.058638 0.036627 0.108924 - 0.023229 0.036497 0.10875 - -0.022359 0.039019 0.106749 - -0.07395 0.039629 0.105444 - -0.153555 0.037714 0.095091 - -0.21663 0.037019 0.092046 - -0.286143 0.034235 0.089175 - -0.365661 0.029972 0.087348 - -0.409683 0.029537 0.088392 - -0.485634 0.03032 0.090132 - -0.5568 0.033365 0.091872 - -0.638232 0.03232 0.093003 - -0.706005 0.030841 0.090045 - -0.757944 0.022489 0.089784 - -0.812058 0.017879 0.091872 - -0.838506 0.021272 0.087174 -e -v - 0.058638 0.036627 0.11484 - 0.023229 0.036497 0.114666 - -0.022359 0.039019 0.112404 - -0.07395 0.040064 0.110925 - -0.153555 0.037714 0.102138 - -0.21663 0.036931 0.099528 - -0.286143 0.034061 0.097005 - -0.365661 0.029275 0.09483 - -0.409683 0.027362 0.095178 - -0.485634 0.026057 0.096309 - -0.5568 0.028667 0.098745 - -0.638232 0.026231 0.100398 - -0.706005 0.024403 0.097701 - -0.757944 0.015356 0.097179 - -0.812058 0.009178 0.098919 - -0.838506 0.013616 0.095352 -e -v - 0.058638 0.036714 0.120756 - 0.023229 0.03641 0.120495 - -0.022359 0.038932 0.118059 - -0.07395 0.040151 0.116493 - -0.153555 0.037714 0.109185 - -0.21663 0.036844 0.106923 - -0.286143 0.033712 0.104835 - -0.365661 0.028667 0.102312 - -0.409683 0.025621 0.102138 - -0.485634 0.022228 0.102834 - -0.5568 0.022924 0.104922 - -0.638232 0.019096 0.106836 - -0.706005 0.016921 0.104313 - -0.757944 0.00683 0.102834 - -0.812058 -0.000914 0.103704 - -0.838506 0.004306 0.101616 -e -v - 0.058638 0.036714 0.126672 - 0.023229 0.03641 0.126411 - -0.022359 0.038846 0.123801 - -0.07395 0.039629 0.121887 - -0.153555 0.037714 0.116232 - -0.21663 0.036757 0.114405 - -0.286143 0.03319 0.112578 - -0.365661 0.028319 0.109881 - -0.409683 0.024751 0.109185 - -0.485634 0.019271 0.109707 - -0.5568 0.017531 0.11136 - -0.638232 0.011354 0.112491 - -0.706005 0.008744 0.110055 - -0.757944 -0.002741 0.106749 - -0.812058 -0.011875 0.106053 - -0.838506 -0.006307 0.105183 -e -v - 0.058638 0.036714 0.132501 - 0.023229 0.036323 0.13224 - -0.022359 0.038672 0.129456 - -0.07395 0.038585 0.127281 - -0.153555 0.037714 0.123366 - -0.21663 0.03667 0.121887 - -0.286143 0.032495 0.120321 - -0.365661 0.028144 0.11745 - -0.409683 0.024665 0.116406 - -0.485634 0.01814 0.117102 - -0.5568 0.014833 0.11919 - -0.638232 0.007091 0.12093 - -0.706005 0.000392 0.115536 - -0.757944 -0.012833 0.108663 - -0.812058 -0.023099 0.105879 - -0.838506 -0.017531 0.10614 -e -v - 0.058638 0.028536 0.132414 - 0.023229 0.027796 0.132153 - -0.022359 0.030233 0.12963 - -0.07395 0.030058 0.127368 - -0.153555 0.028841 0.123714 - -0.21663 0.027623 0.121887 - -0.286143 0.02362 0.119712 - -0.365661 0.019619 0.117798 - -0.409683 0.016313 0.116493 - -0.485634 0.010049 0.116754 - -0.5568 0.006917 0.118929 - -0.638232 -0.000131 0.12006 - -0.706005 -0.006134 0.11484 - -0.757944 -0.018488 0.108663 - -0.812058 -0.028754 0.104835 - -0.838506 -0.023447 0.105879 -e -v - 0.058638 0.020445 0.132414 - 0.023229 0.019271 0.132153 - -0.022359 0.021793 0.129891 - -0.07395 0.02162 0.127455 - -0.153555 0.019966 0.123975 - -0.21663 0.018575 0.121974 - -0.286143 0.014747 0.11919 - -0.365661 0.011006 0.117711 - -0.409683 0.007873 0.116667 - -0.485634 0.001958 0.116406 - -0.5568 -0.000914 0.118755 - -0.638232 -0.007351 0.11919 - -0.706005 -0.012571 0.114057 - -0.757944 -0.024143 0.108141 - -0.812058 -0.033799 0.103095 - -0.838506 -0.029275 0.104922 -e -v - 0.058638 0.012267 0.132327 - 0.023229 0.010744 0.132066 - -0.022359 0.013354 0.130065 - -0.07395 0.013094 0.127455 - -0.153555 0.011092 0.124149 - -0.21663 0.009527 0.122061 - -0.286143 0.005873 0.118929 - -0.365661 0.002479 0.117711 - -0.409683 -0.000479 0.116841 - -0.485634 -0.006134 0.116232 - -0.5568 -0.008744 0.118407 - -0.638232 -0.014573 0.118407 - -0.706005 -0.01901 0.113274 - -0.757944 -0.02971 0.107097 - -0.812058 -0.038585 0.100833 - -0.838506 -0.034844 0.103095 -e -v - 0.058638 0.004089 0.13224 - 0.023229 0.002132 0.131979 - -0.022359 0.004916 0.130152 - -0.07395 0.004568 0.127455 - -0.153555 0.002219 0.124236 - -0.21663 0.000565 0.122061 - -0.286143 -0.003001 0.118929 - -0.365661 -0.006047 0.117798 - -0.409683 -0.008918 0.117015 - -0.485634 -0.014311 0.116058 - -0.5568 -0.016661 0.118059 - -0.638232 -0.021793 0.117624 - -0.706005 -0.025534 0.112839 - -0.757944 -0.035105 0.105357 - -0.812058 -0.043109 0.097962 - -0.838506 -0.040151 0.100398 -e -v - 0.058638 -0.004089 0.13224 - 0.023229 -0.006394 0.131979 - -0.022359 -0.003523 0.130326 - -0.07395 -0.003872 0.127542 - -0.153555 -0.006743 0.124149 - -0.21663 -0.008482 0.122148 - -0.286143 -0.011875 0.119016 - -0.365661 -0.014659 0.117885 - -0.409683 -0.017357 0.117276 - -0.485634 -0.022403 0.115971 - -0.5568 -0.02449 0.117711 - -0.638232 -0.029014 0.116928 - -0.706005 -0.03206 0.11223 - -0.757944 -0.040238 0.103008 - -0.812058 -0.047371 0.094743 - -0.838506 -0.045022 0.097092 -e -v - 0.058638 -0.012267 0.132153 - 0.023229 -0.014921 0.131892 - -0.022359 -0.012049 0.130413 - -0.07395 -0.012397 0.127716 - -0.153555 -0.015616 0.123888 - -0.21663 -0.017531 0.122061 - -0.286143 -0.02075 0.119364 - -0.365661 -0.023186 0.117972 - -0.409683 -0.025709 0.117537 - -0.485634 -0.030493 0.115971 - -0.5568 -0.032407 0.117363 - -0.638232 -0.036148 0.116058 - -0.706005 -0.038323 0.110838 - -0.757944 -0.045109 0.100137 - -0.812058 -0.051199 0.091002 - -0.838506 -0.049633 0.093438 -e -v - 0.058638 -0.020445 0.132153 - 0.023229 -0.023447 0.131805 - -0.022359 -0.020489 0.130587 - -0.07395 -0.020837 0.127977 - -0.153555 -0.02449 0.123714 - -0.21663 -0.026579 0.122148 - -0.286143 -0.029624 0.119886 - -0.365661 -0.031712 0.118146 - -0.409683 -0.034148 0.117798 - -0.485634 -0.038585 0.116058 - -0.5568 -0.040238 0.116928 - -0.638232 -0.04337 0.11484 - -0.706005 -0.0445 0.10875 - -0.757944 -0.049633 0.096657 - -0.812058 -0.054593 0.086913 - -0.838506 -0.053897 0.089349 -e -v - 0.058638 -0.028623 0.132066 - 0.023229 -0.031973 0.131805 - -0.022359 -0.028927 0.130587 - -0.07395 -0.029362 0.128325 - -0.153555 -0.033365 0.123888 - -0.21663 -0.03554 0.122583 - -0.286143 -0.038498 0.120669 - -0.365661 -0.040325 0.11832 - -0.409683 -0.0425 0.118146 - -0.485634 -0.046675 0.116406 - -0.5568 -0.048067 0.116406 - -0.638232 -0.050416 0.113361 - -0.706005 -0.050242 0.105705 - -0.757944 -0.05381 0.092829 - -0.812058 -0.057725 0.082563 - -0.838506 -0.057638 0.084738 -e -v - 0.058638 -0.036801 0.132066 - 0.023229 -0.040498 0.131805 - -0.022359 -0.037367 0.130761 - -0.07395 -0.037889 0.128673 - -0.153555 -0.042238 0.12441 - -0.21663 -0.044588 0.123279 - -0.286143 -0.047284 0.121713 - -0.365661 -0.04885 0.118581 - -0.409683 -0.050939 0.118407 - -0.485634 -0.054766 0.116841 - -0.5568 -0.055985 0.115884 - -0.638232 -0.057377 0.111099 - -0.706005 -0.055202 0.101529 - -0.757944 -0.057551 0.088566 - -0.812058 -0.060334 0.077952 - -0.838506 -0.060596 0.079605 -e -v - 0.058638 -0.044892 0.132675 - 0.023229 -0.049112 0.13224 - -0.022359 -0.045805 0.131022 - -0.07395 -0.046328 0.128847 - -0.153555 -0.051112 0.124932 - -0.21663 -0.053548 0.123975 - -0.286143 -0.056159 0.122496 - -0.365661 -0.057377 0.119016 - -0.409683 -0.05929 0.118755 - -0.485634 -0.062858 0.116841 - -0.5568 -0.063814 0.115623 - -0.638232 -0.063727 0.107619 - -0.706005 -0.059377 0.09657 - -0.757944 -0.06077 0.083955 - -0.812058 -0.062422 0.072993 - -0.838506 -0.062771 0.074124 -e -v - 0.058638 -0.05307 0.132501 - 0.023229 -0.057638 0.132327 - -0.022359 -0.054244 0.130935 - -0.07395 -0.054853 0.129108 - -0.153555 -0.0599 0.125889 - -0.21663 -0.062509 0.125106 - -0.286143 -0.064945 0.123627 - -0.365661 -0.065903 0.119973 - -0.409683 -0.06773 0.118668 - -0.485634 -0.070949 0.116232 - -0.5568 -0.071383 0.113622 - -0.638232 -0.068948 0.102573 - -0.706005 -0.063206 0.091263 - -0.757944 -0.063466 0.078909 - -0.812058 -0.063814 0.06786 - -0.838506 -0.064337 0.068469 -e -v - 0.058638 -0.061074 0.130674 - 0.023229 -0.066077 0.131196 - -0.022359 -0.062684 0.130674 - -0.07395 -0.063293 0.129717 - -0.153555 -0.068599 0.127629 - -0.21663 -0.07147 0.124671 - -0.286143 -0.073646 0.122322 - -0.365661 -0.073907 0.117276 - -0.409683 -0.075646 0.116928 - -0.485634 -0.077822 0.112143 - -0.5568 -0.077473 0.108837 - -0.638232 -0.072862 0.096483 - -0.706005 -0.066511 0.085608 - -0.757944 -0.065554 0.073689 - -0.812058 -0.064511 0.062553 - -0.838506 -0.065293 0.06264 -e -v - 0.058638 -0.067251 0.125628 - 0.023229 -0.074167 0.128847 - -0.022359 -0.071035 0.129978 - -0.07395 -0.071644 0.128412 - -0.153555 -0.077212 0.125976 - -0.21663 -0.07991 0.121713 - -0.286143 -0.081041 0.117537 - -0.365661 -0.080257 0.111708 - -0.409683 -0.081476 0.110838 - -0.485634 -0.083389 0.106314 - -0.5568 -0.08078 0.101703 - -0.638232 -0.075386 0.089697 - -0.706005 -0.069296 0.079779 - -0.757944 -0.067033 0.068208 - -0.812058 -0.064685 0.057246 - -0.838506 -0.065467 0.056724 -e -v - 0.058638 -0.0696 0.117885 - 0.023229 -0.078691 0.1218 - -0.022359 -0.07817 0.125541 - -0.07395 -0.079301 0.124758 - -0.153555 -0.084173 0.120582 - -0.21663 -0.085391 0.114666 - -0.286143 -0.085652 0.110055 - -0.365661 -0.084868 0.104487 - -0.409683 -0.085042 0.103443 - -0.485634 -0.085478 0.098571 - -0.5568 -0.081128 0.093873 - -0.638232 -0.076865 0.08265 - -0.706005 -0.071383 0.073602 - -0.757944 -0.067817 0.062553 - -0.812058 -0.064337 0.051939 - -0.838506 -0.065206 0.050808 -e -v - 0.058638 -0.07047 0.109794 - 0.023229 -0.080431 0.113535 - -0.022359 -0.082171 0.118233 - -0.07395 -0.084173 0.117972 - -0.153555 -0.086521 0.11223 - -0.21663 -0.087044 0.105879 - -0.286143 -0.087479 0.101355 - -0.365661 -0.086608 0.096222 - -0.409683 -0.085391 0.095091 - -0.485634 -0.086 0.09048 - -0.5568 -0.081562 0.086043 - -0.638232 -0.077822 0.075429 - -0.706005 -0.072601 0.067164 - -0.757944 -0.068077 0.056898 - -0.812058 -0.06364 0.046632 - -0.838506 -0.064337 0.044979 -e -v - 0.058638 -0.070209 0.101616 - 0.023229 -0.07991 0.105009 - -0.022359 -0.083563 0.109968 - -0.07395 -0.086957 0.109968 - -0.153555 -0.086957 0.103356 - -0.21663 -0.08687 0.096918 - -0.286143 -0.087652 0.092481 - -0.365661 -0.086608 0.087696 - -0.409683 -0.085826 0.086652 - -0.485634 -0.086173 0.082389 - -0.5568 -0.081823 0.078213 - -0.638232 -0.078083 0.068121 - -0.706005 -0.073123 0.060726 - -0.757944 -0.067817 0.051243 - -0.812058 -0.062335 0.041499 - -0.838506 -0.062596 0.039324 -e -v - 0.058638 -0.070122 0.093438 - 0.023229 -0.079475 0.096483 - -0.022359 -0.082781 0.101529 - -0.07395 -0.087479 0.101529 - -0.153555 -0.087739 0.094569 - -0.21663 -0.087739 0.08787 - -0.286143 -0.088262 0.083607 - -0.365661 -0.087044 0.079083 - -0.409683 -0.086 0.0783 - -0.485634 -0.085913 0.074298 - -0.5568 -0.081997 0.070296 - -0.638232 -0.078257 0.0609 - -0.706005 -0.072862 0.054201 - -0.757944 -0.066859 0.045675 - -0.812058 -0.060247 0.03654 - -0.838506 -0.059987 0.034017 -e -v - 0.058638 -0.071166 0.085347 - 0.023229 -0.080257 0.087957 - -0.022359 -0.082084 0.093177 - -0.07395 -0.087044 0.093003 - -0.153555 -0.088436 0.085695 - -0.21663 -0.088523 0.078909 - -0.286143 -0.088958 0.07482 - -0.365661 -0.087305 0.070557 - -0.409683 -0.086 0.069861 - -0.485634 -0.085391 0.066207 - -0.5568 -0.081997 0.062466 - -0.638232 -0.078344 0.053679 - -0.706005 -0.071906 0.047763 - -0.757944 -0.065206 0.040281 - -0.812058 -0.057551 0.032016 - -0.838506 -0.056681 0.029145 -e -v - 0.058638 -0.071514 0.077169 - 0.023229 -0.080518 0.079431 - -0.022359 -0.082868 0.084738 - -0.07395 -0.087044 0.084564 - -0.153555 -0.088871 0.076821 - -0.21663 -0.088958 0.069861 - -0.286143 -0.089218 0.065946 - -0.365661 -0.087392 0.062031 - -0.409683 -0.086 0.061422 - -0.485634 -0.084955 0.058116 - -0.5568 -0.081823 0.054549 - -0.638232 -0.077909 0.046371 - -0.706005 -0.070253 0.041499 - -0.757944 -0.062684 0.035148 - -0.812058 -0.054419 0.027666 - -0.838506 -0.05294 0.024621 -e -v - 0.058638 -0.068991 0.069513 - 0.023229 -0.079388 0.070992 - -0.022359 -0.083042 0.076299 - -0.07395 -0.087566 0.076038 - -0.153555 -0.088958 0.067947 - -0.21663 -0.088958 0.0609 - -0.286143 -0.089045 0.056985 - -0.365661 -0.087131 0.053418 - -0.409683 -0.085826 0.05307 - -0.485634 -0.084868 0.050025 - -0.5568 -0.081476 0.046719 - -0.638232 -0.076778 0.039237 - -0.706005 -0.067904 0.035409 - -0.757944 -0.059551 0.03045 - -0.812058 -0.051025 0.023577 - -0.838506 -0.048763 0.020358 -e -v - 0.058638 -0.063336 0.063771 - 0.023229 -0.075212 0.063684 - -0.022359 -0.082084 0.067947 - -0.07395 -0.087044 0.067599 - -0.153555 -0.088436 0.059073 - -0.21663 -0.088436 0.051852 - -0.286143 -0.088262 0.048198 - -0.365661 -0.086695 0.044892 - -0.409683 -0.085129 0.044718 - -0.485634 -0.084868 0.041934 - -0.5568 -0.081302 0.038802 - -0.638232 -0.074602 0.032277 - -0.706005 -0.064772 0.029754 - -0.757944 -0.056072 0.026013 - -0.812058 -0.047197 0.019836 - -0.838506 -0.044066 0.016878 -e -v - 0.058638 -0.055332 0.062379 - 0.023229 -0.067904 0.059508 - -0.022359 -0.078257 0.060465 - -0.07395 -0.084868 0.059334 - -0.153555 -0.086957 0.050286 - -0.21663 -0.08626 0.043152 - -0.286143 -0.086 0.039585 - -0.365661 -0.084781 0.03654 - -0.409683 -0.083738 0.036366 - -0.485634 -0.083563 0.03393 - -0.5568 -0.079736 0.031146 - -0.638232 -0.071122 0.025926 - -0.706005 -0.060943 0.024447 - -0.757944 -0.052244 0.02175 - -0.812058 -0.042847 0.016791 - -0.838506 -0.038759 0.014094 -e -v - 0.058638 -0.047241 0.061335 - 0.023229 -0.059377 0.058986 - -0.022359 -0.071557 0.055506 - -0.07395 -0.080692 0.052026 - -0.153555 -0.083999 0.041934 - -0.21663 -0.08252 0.034887 - -0.286143 -0.082259 0.031581 - -0.365661 -0.081302 0.028797 - -0.409683 -0.081041 0.028449 - -0.485634 -0.080344 0.026535 - -0.5568 -0.075473 0.024621 - -0.638232 -0.066251 0.020619 - -0.706005 -0.056332 0.019836 - -0.757944 -0.048067 0.017922 - -0.812058 -0.038063 0.014355 - -0.838506 -0.033278 0.012093 -e -v - 0.058638 -0.039063 0.061074 - 0.023229 -0.050852 0.058464 - -0.022359 -0.06338 0.053418 - -0.07395 -0.073733 0.047415 - -0.153555 -0.077996 0.035496 - -0.21663 -0.076952 0.02784 - -0.286143 -0.076865 0.024534 - -0.365661 -0.075994 0.022098 - -0.409683 -0.076081 0.02175 - -0.485634 -0.075473 0.020097 - -0.5568 -0.069991 0.018966 - -0.638232 -0.061205 0.015486 - -0.706005 -0.051635 0.015312 - -0.757944 -0.043543 0.014616 - -0.812058 -0.03319 0.012267 - -0.838506 -0.027536 0.010527 -e -v - 0.058638 -0.030885 0.061683 - 0.023229 -0.042326 0.058464 - -0.022359 -0.055115 0.052026 - -0.07395 -0.066077 0.043761 - -0.153555 -0.070514 0.030798 - -0.21663 -0.07034 0.021663 - -0.286143 -0.070862 0.017922 - -0.365661 -0.070862 0.015225 - -0.409683 -0.071035 0.015051 - -0.485634 -0.070601 0.013572 - -0.5568 -0.06599 0.012267 - -0.638232 -0.057638 0.009135 - -0.706005 -0.047807 0.010005 - -0.757944 -0.038585 0.011832 - -0.812058 -0.028144 0.010527 - -0.838506 -0.021793 0.009396 -e -v - 0.058638 -0.03045 0.047415 - 0.023229 -0.042238 0.042804 - -0.022359 -0.05929 0.034974 - -0.07395 -0.065729 0.034974 - -0.153555 -0.068251 0.025143 - -0.21663 -0.068687 0.017661 - -0.286143 -0.069469 0.014529 - -0.365661 -0.069469 0.012267 - -0.409683 -0.069209 0.012441 - -0.485634 -0.069643 0.010962 - -0.5568 -0.064859 0.010005 - -0.638232 -0.056942 0.007395 - -0.706005 -0.046937 0.008178 - -0.757944 -0.038672 0.009396 - -0.812058 -0.028144 0.008439 - -0.838506 -0.021706 0.007134 -e -v - 0.058638 -0.046893 0.041934 - 0.023229 -0.055376 0.037323 - -0.022359 -0.065206 0.027318 - -0.07395 -0.067643 0.026361 - -0.153555 -0.06773 0.018879 - -0.21663 -0.068425 0.013224 - -0.286143 -0.068251 0.010962 - -0.365661 -0.069122 0.009222 - -0.409683 -0.068164 0.009483 - -0.485634 -0.068948 0.008265 - -0.5568 -0.06425 0.007569 - -0.638232 -0.056419 0.005568 - -0.706005 -0.046241 0.006177 - -0.757944 -0.038846 0.007047 - -0.812058 -0.028144 0.006351 - -0.838506 -0.021706 0.005394 -e -v - 0.058638 -0.060726 0.031581 - 0.023229 -0.065293 0.027057 - -0.022359 -0.06973 0.018879 - -0.07395 -0.069556 0.017661 - -0.153555 -0.067556 0.012528 - -0.21663 -0.068164 0.008787 - -0.286143 -0.06773 0.007308 - -0.365661 -0.068948 0.00609 - -0.409683 -0.06773 0.006351 - -0.485634 -0.068774 0.005481 - -0.5568 -0.064075 0.005046 - -0.638232 -0.056072 0.003741 - -0.706005 -0.045805 0.004176 - -0.757944 -0.038932 0.004698 - -0.812058 -0.028144 0.004176 - -0.838506 -0.021706 0.003567 -e -v - 0.058638 -0.069774 0.016965 - 0.023229 -0.071296 0.014094 - -0.022359 -0.071993 0.00957 - -0.07395 -0.07034 0.008787 - -0.153555 -0.067643 0.006264 - -0.21663 -0.068077 0.00435 - -0.286143 -0.068077 0.003567 - -0.365661 -0.068774 0.003045 - -0.409683 -0.067556 0.003132 - -0.485634 -0.068512 0.002697 - -0.5568 -0.063988 0.002523 - -0.638232 -0.05581 0.001827 - -0.706005 -0.045545 0.002088 - -0.757944 -0.039019 0.002349 - -0.812058 -0.028144 0.002088 - -0.838506 -0.021706 0.00174 -e -v - 0.058638 -0.072819 0.0 - 0.023229 -0.073211 0.0 - -0.022359 -0.071819 0.0 - -0.07395 -0.069991 0.0 - -0.153555 -0.068164 0.0 - -0.21663 -0.068164 0.0 - -0.286143 -0.069122 0.0 - -0.365661 -0.068599 0.0 - -0.409683 -0.06773 0.0 - -0.485634 -0.068164 0.0 - -0.5568 -0.063988 0.0 - -0.638232 -0.055723 0.0 - -0.706005 -0.045632 0.0 - -0.757944 -0.039193 0.0 - -0.812058 -0.028144 0.0 - -0.838506 -0.021706 0.0 -e -v - 0.135894 -0.001566 0.050025 - 0.135894 -0.001958 0.061944 - 0.135894 -0.001522 0.050025 -e -v - 0.058638 -0.03045 0.047241 - 0.058638 0.016748 0.050025 - 0.058638 0.017269 0.060639 - 0.058638 -0.030233 0.061074 - 0.058638 -0.030406 0.047241 -e -v - 0.135894 -0.001566 0.050025 - 0.058638 -0.030406 0.047241 -e -v - 0.135894 -0.001566 0.050025 - 0.058638 0.016748 0.050025 -e -v - 0.135894 -0.002001 0.061944 - 0.058638 0.017269 0.060639 -e -v - 0.135894 -0.002001 0.061944 - 0.058638 -0.030233 0.061074 -e -v - 0.135894 -0.001566 0.050025 - 0.058638 -0.030406 0.047241 -e -v - 0.230985 0.027492 0.065163 - 0.230985 0.027536 0.065076 - 0.230985 0.027536 0.064989 - 0.230985 0.027536 0.064902 - 0.230985 0.027536 0.064815 - 0.230985 0.027536 0.064728 - 0.230985 0.027536 0.064641 - 0.230985 0.027796 0.126933 - 0.230985 0.027536 0.065163 -e -v - 0.217674 0.020358 0.065946 - 0.217674 0.021185 0.065685 - 0.217674 0.022055 0.065337 - 0.217674 0.022838 0.065076 - 0.217674 0.023707 0.064815 - 0.217674 0.02449 0.064554 - 0.217674 0.025361 0.064293 - 0.217674 0.026144 0.064032 - 0.217674 0.027013 0.063684 - 0.217674 0.027883 0.063423 - 0.217674 0.028667 0.063162 - 0.217674 0.028667 0.128238 - 0.217674 0.027883 0.12789 - 0.217674 0.027013 0.127629 - 0.217674 0.026144 0.127368 - 0.217674 0.025361 0.127107 - 0.217674 0.02449 0.126846 - 0.217674 0.023707 0.126585 - 0.217674 0.022838 0.126237 - 0.217674 0.022055 0.125976 - 0.217674 0.021185 0.125715 - 0.217674 0.020402 0.125454 - 0.217674 0.025882 0.125019 - 0.217674 0.025448 0.065946 - 0.217674 0.020402 0.065946 -e -v - 0.164691 -0.006612 0.06525 - 0.164691 -0.003263 0.063336 - 0.164691 0.000304 0.06177 - 0.164691 0.004132 0.060987 - 0.164691 0.007961 0.060639 - 0.164691 0.011875 0.060639 - 0.164691 0.015703 0.060552 - 0.164691 0.019619 0.060465 - 0.164691 0.023447 0.060552 - 0.164691 0.027362 0.060726 - 0.164691 0.031189 0.060987 - 0.164691 0.031973 0.131544 - 0.164691 0.027971 0.131805 - 0.164691 0.024055 0.131805 - 0.164691 0.020054 0.131631 - 0.164691 0.016051 0.131283 - 0.164691 0.012137 0.130761 - 0.164691 0.008221 0.129978 - 0.164691 0.004393 0.129021 - 0.164691 0.000565 0.127803 - 0.164691 -0.003176 0.126411 - 0.164691 -0.00683 0.124758 - 0.164691 0.018575 0.124671 - 0.164691 0.018313 0.065163 - 0.164691 -0.006568 0.06525 -e -v - 0.111621 -0.033669 0.065946 - 0.111621 -0.027883 0.062205 - 0.111621 -0.021185 0.060987 - 0.111621 -0.014311 0.0609 - 0.111621 -0.007438 0.060465 - 0.111621 -0.000565 0.060117 - 0.111621 0.006307 0.06003 - 0.111621 0.01318 0.06003 - 0.111621 0.020054 0.060291 - 0.111621 0.026927 0.060726 - 0.111621 0.033712 0.061335 - 0.111621 0.033712 0.132327 - 0.111621 0.02684 0.132327 - 0.111621 0.019879 0.13224 - 0.111621 0.01292 0.132153 - 0.111621 0.00596 0.132066 - 0.111621 -0.000914 0.131979 - 0.111621 -0.007873 0.132066 - 0.111621 -0.014833 0.132588 - 0.111621 -0.021706 0.131892 - 0.111621 -0.027971 0.129021 - 0.111621 -0.033625 0.125019 - 0.111621 0.018052 0.125019 - 0.111621 0.018488 0.065946 - 0.111621 -0.033625 0.065946 -e -v - 0.058638 -0.060204 0.065511 - 0.058638 -0.052157 0.061161 - 0.058638 -0.042238 0.0609 - 0.058638 -0.03232 0.060639 - 0.058638 -0.022403 0.060552 - 0.058638 -0.012485 0.060465 - 0.058638 -0.002567 0.060291 - 0.058638 0.007351 0.060291 - 0.058638 0.017269 0.060291 - 0.058638 0.027188 0.060291 - 0.058638 0.037106 0.060465 - 0.058638 0.037367 0.130065 - 0.058638 0.027448 0.130935 - 0.058638 0.017531 0.131631 - 0.058638 0.007612 0.132066 - 0.058638 -0.002305 0.132327 - 0.058638 -0.012223 0.132414 - 0.058638 -0.022141 0.132327 - 0.058638 -0.03206 0.131979 - 0.058638 -0.041977 0.131457 - 0.058638 -0.051895 0.131457 - 0.058638 -0.059117 0.125541 - 0.058638 0.017879 0.125193 - 0.058638 0.016834 0.06525 - 0.058638 -0.06016 0.065511 -e -v - 0.230985 0.027492 0.065163 - 0.217674 0.020402 0.065946 - 0.164691 -0.006568 0.06525 - 0.111621 -0.033625 0.065946 - 0.058638 -0.06016 0.065511 -e -v - 0.230985 0.027492 0.065076 - 0.217674 0.021185 0.065685 - 0.164691 -0.003263 0.063336 - 0.111621 -0.027883 0.062205 - 0.058638 -0.052157 0.061161 -e -v - 0.230985 0.027492 0.065076 - 0.217674 0.022055 0.065337 - 0.164691 0.000304 0.06177 - 0.111621 -0.021185 0.060987 - 0.058638 -0.042238 0.0609 -e -v - 0.230985 0.027492 0.064989 - 0.217674 0.022838 0.065076 - 0.164691 0.004132 0.060987 - 0.111621 -0.014311 0.0609 - 0.058638 -0.03232 0.060639 -e -v - 0.230985 0.027492 0.064989 - 0.217674 0.023707 0.064815 - 0.164691 0.007961 0.060639 - 0.111621 -0.007438 0.060465 - 0.058638 -0.022403 0.060552 -e -v - 0.230985 0.027492 0.064902 - 0.217674 0.02449 0.064554 - 0.164691 0.011875 0.060639 - 0.111621 -0.000565 0.060117 - 0.058638 -0.012485 0.060465 -e -v - 0.230985 0.027492 0.064902 - 0.217674 0.025361 0.064293 - 0.164691 0.015703 0.060552 - 0.111621 0.006307 0.06003 - 0.058638 -0.002567 0.060291 -e -v - 0.230985 0.027492 0.064815 - 0.217674 0.026144 0.064032 - 0.164691 0.019619 0.060465 - 0.111621 0.01318 0.06003 - 0.058638 0.007351 0.060291 -e -v - 0.230985 0.027492 0.064728 - 0.217674 0.027013 0.063684 - 0.164691 0.023447 0.060552 - 0.111621 0.020054 0.060291 - 0.058638 0.017269 0.060291 -e -v - 0.230985 0.027492 0.064728 - 0.217674 0.027883 0.063423 - 0.164691 0.027362 0.060726 - 0.111621 0.026927 0.060726 - 0.058638 0.027188 0.060291 -e -v - 0.230985 0.027492 0.064641 - 0.217674 0.028667 0.063162 - 0.164691 0.031189 0.060987 - 0.111621 0.033712 0.061335 - 0.058638 0.037106 0.060465 -e -v - 0.230985 0.027753 0.126933 - 0.217674 0.028667 0.128238 - 0.164691 0.031973 0.131544 - 0.111621 0.033712 0.132327 - 0.058638 0.037367 0.130065 -e -v - 0.230985 0.027753 0.126933 - 0.217674 0.027883 0.12789 - 0.164691 0.027971 0.131805 - 0.111621 0.02684 0.132327 - 0.058638 0.027448 0.130935 -e -v - 0.230985 0.027753 0.126933 - 0.217674 0.027013 0.127629 - 0.164691 0.024055 0.131805 - 0.111621 0.019879 0.13224 - 0.058638 0.017531 0.131631 -e -v - 0.230985 0.027753 0.126933 - 0.217674 0.026144 0.127368 - 0.164691 0.020054 0.131631 - 0.111621 0.01292 0.132153 - 0.058638 0.007612 0.132066 -e -v - 0.230985 0.027753 0.126933 - 0.217674 0.025361 0.127107 - 0.164691 0.016051 0.131283 - 0.111621 0.00596 0.132066 - 0.058638 -0.002305 0.132327 -e -v - 0.230985 0.027753 0.126933 - 0.217674 0.02449 0.126846 - 0.164691 0.012137 0.130761 - 0.111621 -0.000914 0.131979 - 0.058638 -0.012223 0.132414 -e -v - 0.230985 0.027753 0.126933 - 0.217674 0.023707 0.126585 - 0.164691 0.008221 0.129978 - 0.111621 -0.007873 0.132066 - 0.058638 -0.022141 0.132327 -e -v - 0.230985 0.027753 0.126933 - 0.217674 0.022838 0.126237 - 0.164691 0.004393 0.129021 - 0.111621 -0.014833 0.132588 - 0.058638 -0.03206 0.131979 -e -v - 0.230985 0.027753 0.126933 - 0.217674 0.022055 0.125976 - 0.164691 0.000565 0.127803 - 0.111621 -0.021706 0.131892 - 0.058638 -0.041977 0.131457 -e -v - 0.230985 0.027753 0.126933 - 0.217674 0.021185 0.125715 - 0.164691 -0.003176 0.126411 - 0.111621 -0.027971 0.129021 - 0.058638 -0.051895 0.131457 -e -v - 0.230985 0.027753 0.126933 - 0.217674 0.020402 0.125454 - 0.164691 -0.00683 0.124758 - 0.111621 -0.033625 0.125019 - 0.058638 -0.059117 0.125541 -e -v - 0.230985 0.027753 0.126933 - 0.217674 0.025882 0.125019 - 0.164691 0.018575 0.124671 - 0.111621 0.018052 0.125019 - 0.058638 0.017879 0.125193 -e -v - 0.230985 0.027492 0.065163 - 0.217674 0.025448 0.065946 - 0.164691 0.018313 0.065163 - 0.111621 0.018488 0.065946 - 0.058638 0.016834 0.06525 -e -v - 0.230985 0.027492 0.065163 - 0.217674 0.020402 0.065946 - 0.164691 -0.006568 0.06525 - 0.111621 -0.033625 0.065946 - 0.058638 -0.06016 0.065511 -e -v - 0.111621 0.018444 0.13137 -e -v - 0.058638 0.004785 0.131457 - 0.058638 0.007351 0.13137 - 0.058638 0.009787 0.13137 - 0.058638 0.012223 0.13137 - 0.058638 0.014659 0.13137 - 0.058638 0.017096 0.13137 - 0.058638 0.019531 0.131283 - 0.058638 0.022055 0.131283 - 0.058638 0.02449 0.131283 - 0.058638 0.026927 0.131283 - 0.058638 0.026492 0.132762 - 0.058638 0.026144 0.134241 - 0.058638 0.025709 0.13572 - 0.058638 0.025361 0.137199 - 0.058638 0.0251 0.138765 - 0.058638 0.024751 0.140244 - 0.058638 0.024403 0.141723 - 0.058638 0.023795 0.143202 - 0.058638 0.023186 0.144594 - 0.058638 0.022403 0.145899 - 0.058638 0.021533 0.147204 - 0.058638 0.020314 0.148161 - 0.058638 0.01901 0.148944 - 0.058638 0.017531 0.149466 - 0.058638 0.016051 0.149727 - 0.058638 0.014311 0.149814 - 0.058638 0.012659 0.149553 - 0.058638 0.011266 0.148596 - 0.058638 0.010223 0.147291 - 0.058638 0.009266 0.145899 - 0.058638 0.008396 0.14442 - 0.058638 0.007699 0.142941 - 0.058638 0.007091 0.141288 - 0.058638 0.006568 0.139722 - 0.058638 0.006134 0.138069 - 0.058638 0.005699 0.136416 - 0.058638 0.00535 0.134763 - 0.058638 0.005089 0.13311 - 0.058638 0.004829 0.131457 -e -v - 0.023229 -0.001566 0.131457 - 0.023229 0.002132 0.131457 - 0.023229 0.005786 0.131457 - 0.023229 0.009352 0.131544 - 0.023229 0.013006 0.131544 - 0.023229 0.016661 0.131544 - 0.023229 0.020227 0.131544 - 0.023229 0.023882 0.131631 - 0.023229 0.027448 0.131631 - 0.023229 0.031103 0.131631 - 0.023229 0.030841 0.133806 - 0.023229 0.030493 0.135981 - 0.023229 0.030058 0.138156 - 0.023229 0.029624 0.140244 - 0.023229 0.029102 0.142332 - 0.023229 0.028579 0.144507 - 0.023229 0.027883 0.146508 - 0.023229 0.026927 0.148509 - 0.023229 0.025969 0.15051 - 0.023229 0.024838 0.152337 - 0.023229 0.023534 0.154077 - 0.023229 0.021881 0.155469 - 0.023229 0.019879 0.156513 - 0.023229 0.017879 0.157122 - 0.023229 0.015703 0.15747 - 0.023229 0.013354 0.156948 - 0.023229 0.01118 0.155991 - 0.023229 0.009266 0.154599 - 0.023229 0.007612 0.153033 - 0.023229 0.006047 0.151206 - 0.023229 0.004655 0.149205 - 0.023229 0.00361 0.147117 - 0.023229 0.002654 0.144942 - 0.023229 0.001783 0.142767 - 0.023229 0.000914 0.140592 - 0.023229 0.000131 0.13833 - 0.023229 -0.000479 0.136068 - 0.023229 -0.001001 0.133719 - 0.023229 -0.001522 0.131457 -e -v - -0.022359 -0.009309 0.12963 - -0.022359 -0.004306 0.12963 - -0.022359 0.000653 0.12963 - -0.022359 0.005524 0.129717 - -0.022359 0.010483 0.129717 - -0.022359 0.015442 0.129717 - -0.022359 0.020402 0.129717 - -0.022359 0.025361 0.129717 - -0.022359 0.03032 0.129717 - -0.022359 0.035278 0.129804 - -0.022359 0.035105 0.132675 - -0.022359 0.034757 0.135546 - -0.022359 0.034322 0.13833 - -0.022359 0.033712 0.141201 - -0.022359 0.033016 0.143985 - -0.022359 0.032233 0.146769 - -0.022359 0.031189 0.149466 - -0.022359 0.029885 0.152076 - -0.022359 0.028406 0.154512 - -0.022359 0.026752 0.156948 - -0.022359 0.024838 0.159123 - -0.022359 0.022576 0.160863 - -0.022359 0.019966 0.162168 - -0.022359 0.017269 0.163038 - -0.022359 0.014399 0.163473 - -0.022359 0.011266 0.163038 - -0.022359 0.008309 0.162081 - -0.022359 0.005612 0.160428 - -0.022359 0.003436 0.158166 - -0.022359 0.001522 0.155643 - -0.022359 -0.000304 0.15312 - -0.022359 -0.001871 0.150336 - -0.022359 -0.003263 0.147552 - -0.022359 -0.004568 0.144681 - -0.022359 -0.005699 0.141723 - -0.022359 -0.00683 0.138765 - -0.022359 -0.007786 0.13572 - -0.022359 -0.00857 0.132675 - -0.022359 -0.009266 0.12963 -e -v - -0.07395 -0.015399 0.127977 - -0.07395 -0.00944 0.12789 - -0.07395 -0.003523 0.12789 - -0.07395 0.002392 0.127803 - -0.07395 0.008309 0.127716 - -0.07395 0.014225 0.127716 - -0.07395 0.020141 0.127629 - -0.07395 0.026057 0.127629 - -0.07395 0.031973 0.127542 - -0.07395 0.037889 0.127455 - -0.07395 0.037714 0.130935 - -0.07395 0.037367 0.134415 - -0.07395 0.036757 0.137808 - -0.07395 0.036061 0.141201 - -0.07395 0.035191 0.144594 - -0.07395 0.034148 0.1479 - -0.07395 0.032842 0.151119 - -0.07395 0.03145 0.154251 - -0.07395 0.029797 0.157383 - -0.07395 0.027883 0.160254 - -0.07395 0.025534 0.162777 - -0.07395 0.022924 0.165126 - -0.07395 0.019966 0.166953 - -0.07395 0.016748 0.168171 - -0.07395 0.013354 0.16878 - -0.07395 0.009701 0.168258 - -0.07395 0.006655 0.166257 - -0.07395 0.004132 0.16356 - -0.07395 0.001696 0.160776 - -0.07395 -0.000304 0.157644 - -0.07395 -0.002132 0.154425 - -0.07395 -0.003958 0.151206 - -0.07395 -0.005786 0.147987 - -0.07395 -0.007438 0.144681 - -0.07395 -0.009092 0.141375 - -0.07395 -0.010744 0.138069 - -0.07395 -0.012311 0.134676 - -0.07395 -0.013876 0.13137 - -0.07395 -0.015356 0.127977 -e -v - -0.153555 -0.026448 0.124323 - -0.153555 -0.019531 0.124323 - -0.153555 -0.012571 0.12441 - -0.153555 -0.005699 0.124584 - -0.153555 0.001174 0.124758 - -0.153555 0.008047 0.124758 - -0.153555 0.014921 0.124758 - -0.153555 0.021881 0.124671 - -0.153555 0.028754 0.12441 - -0.153555 0.035627 0.124149 - -0.153555 0.035627 0.127803 - -0.153555 0.035365 0.131544 - -0.153555 0.034931 0.135198 - -0.153555 0.034235 0.138765 - -0.153555 0.033365 0.142332 - -0.153555 0.032407 0.145899 - -0.153555 0.031624 0.149466 - -0.153555 0.030668 0.153033 - -0.153555 0.029537 0.1566 - -0.153555 0.028058 0.159993 - -0.153555 0.026492 0.163299 - -0.153555 0.024751 0.166518 - -0.153555 0.022924 0.169737 - -0.153555 0.021097 0.172869 - -0.153555 0.020227 0.178002 - -0.153555 0.000392 0.178524 - -0.153555 -0.000479 0.172956 - -0.153555 -0.002305 0.169128 - -0.153555 -0.004132 0.1653 - -0.153555 -0.006134 0.161559 - -0.153555 -0.008396 0.157992 - -0.153555 -0.010571 0.154338 - -0.153555 -0.012745 0.150771 - -0.153555 -0.014833 0.14703 - -0.153555 -0.016921 0.143289 - -0.153555 -0.018835 0.139548 - -0.153555 -0.020837 0.135807 - -0.153555 -0.022751 0.131979 - -0.153555 -0.024578 0.128238 - -0.153555 -0.026405 0.124323 -e -v - -0.21663 -0.029058 0.122322 - -0.21663 -0.021881 0.121539 - -0.21663 -0.014747 0.121278 - -0.21663 -0.007612 0.121539 - -0.21663 -0.000479 0.121626 - -0.21663 0.006655 0.1218 - -0.21663 0.01379 0.1218 - -0.21663 0.02101 0.1218 - -0.21663 0.028144 0.121713 - -0.21663 0.035278 0.121539 - -0.21663 0.034931 0.125367 - -0.21663 0.034408 0.129108 - -0.21663 0.033712 0.132849 - -0.21663 0.032842 0.136503 - -0.21663 0.031886 0.140157 - -0.21663 0.031189 0.143898 - -0.21663 0.030841 0.147639 - -0.21663 0.030406 0.151467 - -0.21663 0.029797 0.155208 - -0.21663 0.028754 0.158775 - -0.21663 0.027448 0.162429 - -0.21663 0.026665 0.166083 - -0.21663 0.026057 0.169824 - -0.21663 0.025796 0.173652 - -0.21663 0.025796 0.174957 - -0.21663 -0.000827 0.17574 - -0.21663 -0.000827 0.172521 - -0.21663 -0.003089 0.168693 - -0.21663 -0.005263 0.164865 - -0.21663 -0.007438 0.161037 - -0.21663 -0.009613 0.157122 - -0.21663 -0.011702 0.153207 - -0.21663 -0.01379 0.149379 - -0.21663 -0.015965 0.145464 - -0.21663 -0.018052 0.141549 - -0.21663 -0.020227 0.137721 - -0.21663 -0.022403 0.133893 - -0.21663 -0.024665 0.130065 - -0.21663 -0.02684 0.12615 - -0.21663 -0.029014 0.122322 -e -v - -0.286143 -0.031929 0.119973 - -0.286143 -0.024665 0.119799 - -0.286143 -0.017357 0.119799 - -0.286143 -0.010135 0.119886 - -0.286143 -0.002914 0.119886 - -0.286143 0.004393 0.119799 - -0.286143 0.011614 0.119625 - -0.286143 0.018835 0.119364 - -0.286143 0.026057 0.119103 - -0.286143 0.033365 0.118755 - -0.286143 0.03319 0.122583 - -0.286143 0.032842 0.126411 - -0.286143 0.032407 0.130239 - -0.286143 0.031799 0.134067 - -0.286143 0.031277 0.137895 - -0.286143 0.030668 0.141723 - -0.286143 0.030145 0.145551 - -0.286143 0.02971 0.149379 - -0.286143 0.02945 0.153294 - -0.286143 0.029362 0.157122 - -0.286143 0.029275 0.161037 - -0.286143 0.029102 0.164865 - -0.286143 0.028754 0.168693 - -0.286143 0.028406 0.172608 - -0.286143 0.028406 0.175305 - -0.286143 -0.001001 0.175914 - -0.286143 -0.002479 0.170433 - -0.286143 -0.005176 0.166518 - -0.286143 -0.007351 0.162603 - -0.286143 -0.009613 0.158775 - -0.286143 -0.011789 0.15486 - -0.286143 -0.014051 0.151032 - -0.286143 -0.016313 0.147117 - -0.286143 -0.018488 0.143202 - -0.286143 -0.02075 0.139374 - -0.286143 -0.023012 0.135459 - -0.286143 -0.025186 0.131544 - -0.286143 -0.027448 0.127716 - -0.286143 -0.029624 0.123801 - -0.286143 -0.031886 0.119973 -e -v - -0.365661 -0.034713 0.118755 - -0.365661 -0.027796 0.118146 - -0.365661 -0.020924 0.118059 - -0.365661 -0.014051 0.118059 - -0.365661 -0.007091 0.11832 - -0.365661 -0.000217 0.11832 - -0.365661 0.006655 0.117972 - -0.365661 0.013528 0.117711 - -0.365661 0.020402 0.117624 - -0.365661 0.027362 0.117624 - -0.365661 0.02771 0.122061 - -0.365661 0.02771 0.12615 - -0.365661 0.027623 0.130152 - -0.365661 0.027536 0.134241 - -0.365661 0.027362 0.138243 - -0.365661 0.027275 0.142332 - -0.365661 0.027188 0.146334 - -0.365661 0.027013 0.150423 - -0.365661 0.026927 0.154425 - -0.365661 0.026752 0.158427 - -0.365661 0.026492 0.162516 - -0.365661 0.026231 0.166518 - -0.365661 0.025969 0.17052 - -0.365661 0.025709 0.174609 - -0.365661 0.025709 0.176436 - -0.365661 -4.4e-05 0.176697 - -0.365661 -0.001001 0.17487 - -0.365661 -0.00361 0.17052 - -0.365661 -0.006134 0.166257 - -0.365661 -0.008744 0.161907 - -0.365661 -0.011354 0.157644 - -0.365661 -0.013964 0.153294 - -0.365661 -0.016573 0.148944 - -0.365661 -0.019096 0.144681 - -0.365661 -0.021706 0.140331 - -0.365661 -0.024317 0.135981 - -0.365661 -0.026927 0.131718 - -0.365661 -0.02945 0.127368 - -0.365661 -0.03206 0.123105 - -0.365661 -0.034669 0.118755 -e -v - -0.409683 -0.037236 0.118233 - -0.409683 -0.030406 0.118146 - -0.409683 -0.02362 0.118059 - -0.409683 -0.016834 0.117972 - -0.409683 -0.010049 0.117885 - -0.409683 -0.003263 0.117798 - -0.409683 0.003523 0.117711 - -0.409683 0.010309 0.117624 - -0.409683 0.017096 0.117537 - -0.409683 0.023882 0.11745 - -0.409683 0.02423 0.121626 - -0.409683 0.024055 0.125802 - -0.409683 0.023969 0.130065 - -0.409683 0.023795 0.134241 - -0.409683 0.02362 0.138417 - -0.409683 0.023534 0.14268 - -0.409683 0.023359 0.146856 - -0.409683 0.023272 0.151032 - -0.409683 0.023099 0.155208 - -0.409683 0.022924 0.159471 - -0.409683 0.022838 0.163647 - -0.409683 0.022664 0.167823 - -0.409683 0.022489 0.171999 - -0.409683 0.022403 0.176262 - -0.409683 0.022838 0.178089 - -0.409683 0.000739 0.177828 - -0.409683 -0.000131 0.176436 - -0.409683 -0.003001 0.171999 - -0.409683 -0.005873 0.167475 - -0.409683 -0.008656 0.163038 - -0.409683 -0.011528 0.158514 - -0.409683 -0.014399 0.154077 - -0.409683 -0.017269 0.149553 - -0.409683 -0.020054 0.145116 - -0.409683 -0.022924 0.140592 - -0.409683 -0.025796 0.136155 - -0.409683 -0.028667 0.131631 - -0.409683 -0.031537 0.127194 - -0.409683 -0.034322 0.12267 - -0.409683 -0.037193 0.118233 -e -v - 0.111621 0.018444 0.13137 - 0.058638 0.004829 0.131457 - 0.023229 -0.001522 0.131457 - -0.022359 -0.009266 0.12963 - -0.07395 -0.015356 0.127977 - -0.153555 -0.026405 0.124323 - -0.21663 -0.029014 0.122322 - -0.286143 -0.031886 0.119973 - -0.365661 -0.034669 0.118755 - -0.409683 -0.037193 0.118233 -e -v - 0.111621 0.018444 0.13137 - 0.058638 0.007351 0.13137 - 0.023229 0.002132 0.131457 - -0.022359 -0.004306 0.12963 - -0.07395 -0.00944 0.12789 - -0.153555 -0.019531 0.124323 - -0.21663 -0.021881 0.121539 - -0.286143 -0.024665 0.119799 - -0.365661 -0.027796 0.118146 - -0.409683 -0.030406 0.118146 -e -v - 0.111621 0.018444 0.13137 - 0.058638 0.009787 0.13137 - 0.023229 0.005786 0.131457 - -0.022359 0.000653 0.12963 - -0.07395 -0.003523 0.12789 - -0.153555 -0.012571 0.12441 - -0.21663 -0.014747 0.121278 - -0.286143 -0.017357 0.119799 - -0.365661 -0.020924 0.118059 - -0.409683 -0.02362 0.118059 -e -v - 0.111621 0.018444 0.13137 - 0.058638 0.012223 0.13137 - 0.023229 0.009352 0.131544 - -0.022359 0.005524 0.129717 - -0.07395 0.002392 0.127803 - -0.153555 -0.005699 0.124584 - -0.21663 -0.007612 0.121539 - -0.286143 -0.010135 0.119886 - -0.365661 -0.014051 0.118059 - -0.409683 -0.016834 0.117972 -e -v - 0.111621 0.018444 0.13137 - 0.058638 0.014659 0.13137 - 0.023229 0.013006 0.131544 - -0.022359 0.010483 0.129717 - -0.07395 0.008309 0.127716 - -0.153555 0.001174 0.124758 - -0.21663 -0.000479 0.121626 - -0.286143 -0.002914 0.119886 - -0.365661 -0.007091 0.11832 - -0.409683 -0.010049 0.117885 -e -v - 0.111621 0.018444 0.13137 - 0.058638 0.017096 0.13137 - 0.023229 0.016661 0.131544 - -0.022359 0.015442 0.129717 - -0.07395 0.014225 0.127716 - -0.153555 0.008047 0.124758 - -0.21663 0.006655 0.1218 - -0.286143 0.004393 0.119799 - -0.365661 -0.000217 0.11832 - -0.409683 -0.003263 0.117798 -e -v - 0.111621 0.018444 0.13137 - 0.058638 0.019531 0.131283 - 0.023229 0.020227 0.131544 - -0.022359 0.020402 0.129717 - -0.07395 0.020141 0.127629 - -0.153555 0.014921 0.124758 - -0.21663 0.01379 0.1218 - -0.286143 0.011614 0.119625 - -0.365661 0.006655 0.117972 - -0.409683 0.003523 0.117711 -e -v - 0.111621 0.018444 0.13137 - 0.058638 0.022055 0.131283 - 0.023229 0.023882 0.131631 - -0.022359 0.025361 0.129717 - -0.07395 0.026057 0.127629 - -0.153555 0.021881 0.124671 - -0.21663 0.02101 0.1218 - -0.286143 0.018835 0.119364 - -0.365661 0.013528 0.117711 - -0.409683 0.010309 0.117624 -e -v - 0.111621 0.018444 0.13137 - 0.058638 0.02449 0.131283 - 0.023229 0.027448 0.131631 - -0.022359 0.03032 0.129717 - -0.07395 0.031973 0.127542 - -0.153555 0.028754 0.12441 - -0.21663 0.028144 0.121713 - -0.286143 0.026057 0.119103 - -0.365661 0.020402 0.117624 - -0.409683 0.017096 0.117537 -e -v - 0.111621 0.018444 0.13137 - 0.058638 0.026927 0.131283 - 0.023229 0.031103 0.131631 - -0.022359 0.035278 0.129804 - -0.07395 0.037889 0.127455 - -0.153555 0.035627 0.124149 - -0.21663 0.035278 0.121539 - -0.286143 0.033365 0.118755 - -0.365661 0.027362 0.117624 - -0.409683 0.023882 0.11745 -e -v - 0.111621 0.018444 0.13137 - 0.058638 0.026492 0.132762 - 0.023229 0.030841 0.133806 - -0.022359 0.035105 0.132675 - -0.07395 0.037714 0.130935 - -0.153555 0.035627 0.127803 - -0.21663 0.034931 0.125367 - -0.286143 0.03319 0.122583 - -0.365661 0.02771 0.122061 - -0.409683 0.02423 0.121626 -e -v - 0.111621 0.018444 0.13137 - 0.058638 0.026144 0.134241 - 0.023229 0.030493 0.135981 - -0.022359 0.034757 0.135546 - -0.07395 0.037367 0.134415 - -0.153555 0.035365 0.131544 - -0.21663 0.034408 0.129108 - -0.286143 0.032842 0.126411 - -0.365661 0.02771 0.12615 - -0.409683 0.024055 0.125802 -e -v - 0.111621 0.018444 0.13137 - 0.058638 0.025709 0.13572 - 0.023229 0.030058 0.138156 - -0.022359 0.034322 0.13833 - -0.07395 0.036757 0.137808 - -0.153555 0.034931 0.135198 - -0.21663 0.033712 0.132849 - -0.286143 0.032407 0.130239 - -0.365661 0.027623 0.130152 - -0.409683 0.023969 0.130065 -e -v - 0.111621 0.018444 0.13137 - 0.058638 0.025361 0.137199 - 0.023229 0.029624 0.140244 - -0.022359 0.033712 0.141201 - -0.07395 0.036061 0.141201 - -0.153555 0.034235 0.138765 - -0.21663 0.032842 0.136503 - -0.286143 0.031799 0.134067 - -0.365661 0.027536 0.134241 - -0.409683 0.023795 0.134241 -e -v - 0.111621 0.018444 0.13137 - 0.058638 0.0251 0.138765 - 0.023229 0.029102 0.142332 - -0.022359 0.033016 0.143985 - -0.07395 0.035191 0.144594 - -0.153555 0.033365 0.142332 - -0.21663 0.031886 0.140157 - -0.286143 0.031277 0.137895 - -0.365661 0.027362 0.138243 - -0.409683 0.02362 0.138417 -e -v - 0.111621 0.018444 0.13137 - 0.058638 0.024751 0.140244 - 0.023229 0.028579 0.144507 - -0.022359 0.032233 0.146769 - -0.07395 0.034148 0.1479 - -0.153555 0.032407 0.145899 - -0.21663 0.031189 0.143898 - -0.286143 0.030668 0.141723 - -0.365661 0.027275 0.142332 - -0.409683 0.023534 0.14268 -e -v - 0.111621 0.018444 0.13137 - 0.058638 0.024403 0.141723 - 0.023229 0.027883 0.146508 - -0.022359 0.031189 0.149466 - -0.07395 0.032842 0.151119 - -0.153555 0.031624 0.149466 - -0.21663 0.030841 0.147639 - -0.286143 0.030145 0.145551 - -0.365661 0.027188 0.146334 - -0.409683 0.023359 0.146856 -e -v - 0.111621 0.018444 0.13137 - 0.058638 0.023795 0.143202 - 0.023229 0.026927 0.148509 - -0.022359 0.029885 0.152076 - -0.07395 0.03145 0.154251 - -0.153555 0.030668 0.153033 - -0.21663 0.030406 0.151467 - -0.286143 0.02971 0.149379 - -0.365661 0.027013 0.150423 - -0.409683 0.023272 0.151032 -e -v - 0.111621 0.018444 0.13137 - 0.058638 0.023186 0.144594 - 0.023229 0.025969 0.15051 - -0.022359 0.028406 0.154512 - -0.07395 0.029797 0.157383 - -0.153555 0.029537 0.1566 - -0.21663 0.029797 0.155208 - -0.286143 0.02945 0.153294 - -0.365661 0.026927 0.154425 - -0.409683 0.023099 0.155208 -e -v - 0.111621 0.018444 0.13137 - 0.058638 0.022403 0.145899 - 0.023229 0.024838 0.152337 - -0.022359 0.026752 0.156948 - -0.07395 0.027883 0.160254 - -0.153555 0.028058 0.159993 - -0.21663 0.028754 0.158775 - -0.286143 0.029362 0.157122 - -0.365661 0.026752 0.158427 - -0.409683 0.022924 0.159471 -e -v - 0.111621 0.018444 0.13137 - 0.058638 0.021533 0.147204 - 0.023229 0.023534 0.154077 - -0.022359 0.024838 0.159123 - -0.07395 0.025534 0.162777 - -0.153555 0.026492 0.163299 - -0.21663 0.027448 0.162429 - -0.286143 0.029275 0.161037 - -0.365661 0.026492 0.162516 - -0.409683 0.022838 0.163647 -e -v - 0.111621 0.018444 0.13137 - 0.058638 0.020314 0.148161 - 0.023229 0.021881 0.155469 - -0.022359 0.022576 0.160863 - -0.07395 0.022924 0.165126 - -0.153555 0.024751 0.166518 - -0.21663 0.026665 0.166083 - -0.286143 0.029102 0.164865 - -0.365661 0.026231 0.166518 - -0.409683 0.022664 0.167823 -e -v - 0.111621 0.018444 0.13137 - 0.058638 0.01901 0.148944 - 0.023229 0.019879 0.156513 - -0.022359 0.019966 0.162168 - -0.07395 0.019966 0.166953 - -0.153555 0.022924 0.169737 - -0.21663 0.026057 0.169824 - -0.286143 0.028754 0.168693 - -0.365661 0.025969 0.17052 - -0.409683 0.022489 0.171999 -e -v - 0.111621 0.018444 0.13137 - 0.058638 0.017531 0.149466 - 0.023229 0.017879 0.157122 - -0.022359 0.017269 0.163038 - -0.07395 0.016748 0.168171 - -0.153555 0.021097 0.172869 - -0.21663 0.025796 0.173652 - -0.286143 0.028406 0.172608 - -0.365661 0.025709 0.174609 - -0.409683 0.022403 0.176262 -e -v - 0.111621 0.018444 0.13137 - 0.058638 0.016051 0.149727 - 0.023229 0.015703 0.15747 - -0.022359 0.014399 0.163473 - -0.07395 0.013354 0.16878 - -0.153555 0.020227 0.178002 - -0.21663 0.025796 0.174957 - -0.286143 0.028406 0.175305 - -0.365661 0.025709 0.176436 - -0.409683 0.022838 0.178089 -e -v - 0.111621 0.018444 0.13137 - 0.058638 0.016051 0.149727 - 0.023229 0.015703 0.15747 - -0.022359 0.014399 0.163473 - -0.07395 0.013354 0.16878 - -0.153555 0.000392 0.178524 - -0.21663 -0.000827 0.17574 - -0.286143 -0.001001 0.175914 - -0.365661 -4.4e-05 0.176697 - -0.409683 0.000739 0.177828 -e -v - 0.111621 0.018444 0.13137 - 0.058638 0.014311 0.149814 - 0.023229 0.013354 0.156948 - -0.022359 0.011266 0.163038 - -0.07395 0.009701 0.168258 - -0.153555 -0.000479 0.172956 - -0.21663 -0.000827 0.172521 - -0.286143 -0.002479 0.170433 - -0.365661 -0.001001 0.17487 - -0.409683 -0.000131 0.176436 -e -v - 0.111621 0.018444 0.13137 - 0.058638 0.012659 0.149553 - 0.023229 0.01118 0.155991 - -0.022359 0.008309 0.162081 - -0.07395 0.006655 0.166257 - -0.153555 -0.002305 0.169128 - -0.21663 -0.003089 0.168693 - -0.286143 -0.005176 0.166518 - -0.365661 -0.00361 0.17052 - -0.409683 -0.003001 0.171999 -e -v - 0.111621 0.018444 0.13137 - 0.058638 0.011266 0.148596 - 0.023229 0.009266 0.154599 - -0.022359 0.005612 0.160428 - -0.07395 0.004132 0.16356 - -0.153555 -0.004132 0.1653 - -0.21663 -0.005263 0.164865 - -0.286143 -0.007351 0.162603 - -0.365661 -0.006134 0.166257 - -0.409683 -0.005873 0.167475 -e -v - 0.111621 0.018444 0.13137 - 0.058638 0.010223 0.147291 - 0.023229 0.007612 0.153033 - -0.022359 0.003436 0.158166 - -0.07395 0.001696 0.160776 - -0.153555 -0.006134 0.161559 - -0.21663 -0.007438 0.161037 - -0.286143 -0.009613 0.158775 - -0.365661 -0.008744 0.161907 - -0.409683 -0.008656 0.163038 -e -v - 0.111621 0.018444 0.13137 - 0.058638 0.009266 0.145899 - 0.023229 0.006047 0.151206 - -0.022359 0.001522 0.155643 - -0.07395 -0.000304 0.157644 - -0.153555 -0.008396 0.157992 - -0.21663 -0.009613 0.157122 - -0.286143 -0.011789 0.15486 - -0.365661 -0.011354 0.157644 - -0.409683 -0.011528 0.158514 -e -v - 0.111621 0.018444 0.13137 - 0.058638 0.008396 0.14442 - 0.023229 0.004655 0.149205 - -0.022359 -0.000304 0.15312 - -0.07395 -0.002132 0.154425 - -0.153555 -0.010571 0.154338 - -0.21663 -0.011702 0.153207 - -0.286143 -0.014051 0.151032 - -0.365661 -0.013964 0.153294 - -0.409683 -0.014399 0.154077 -e -v - 0.111621 0.018444 0.13137 - 0.058638 0.007699 0.142941 - 0.023229 0.00361 0.147117 - -0.022359 -0.001871 0.150336 - -0.07395 -0.003958 0.151206 - -0.153555 -0.012745 0.150771 - -0.21663 -0.01379 0.149379 - -0.286143 -0.016313 0.147117 - -0.365661 -0.016573 0.148944 - -0.409683 -0.017269 0.149553 -e -v - 0.111621 0.018444 0.13137 - 0.058638 0.007091 0.141288 - 0.023229 0.002654 0.144942 - -0.022359 -0.003263 0.147552 - -0.07395 -0.005786 0.147987 - -0.153555 -0.014833 0.14703 - -0.21663 -0.015965 0.145464 - -0.286143 -0.018488 0.143202 - -0.365661 -0.019096 0.144681 - -0.409683 -0.020054 0.145116 -e -v - 0.111621 0.018444 0.13137 - 0.058638 0.006568 0.139722 - 0.023229 0.001783 0.142767 - -0.022359 -0.004568 0.144681 - -0.07395 -0.007438 0.144681 - -0.153555 -0.016921 0.143289 - -0.21663 -0.018052 0.141549 - -0.286143 -0.02075 0.139374 - -0.365661 -0.021706 0.140331 - -0.409683 -0.022924 0.140592 -e -v - 0.111621 0.018444 0.13137 - 0.058638 0.006134 0.138069 - 0.023229 0.000914 0.140592 - -0.022359 -0.005699 0.141723 - -0.07395 -0.009092 0.141375 - -0.153555 -0.018835 0.139548 - -0.21663 -0.020227 0.137721 - -0.286143 -0.023012 0.135459 - -0.365661 -0.024317 0.135981 - -0.409683 -0.025796 0.136155 -e -v - 0.111621 0.018444 0.13137 - 0.058638 0.005699 0.136416 - 0.023229 0.000131 0.13833 - -0.022359 -0.00683 0.138765 - -0.07395 -0.010744 0.138069 - -0.153555 -0.020837 0.135807 - -0.21663 -0.022403 0.133893 - -0.286143 -0.025186 0.131544 - -0.365661 -0.026927 0.131718 - -0.409683 -0.028667 0.131631 -e -v - 0.111621 0.018444 0.13137 - 0.058638 0.00535 0.134763 - 0.023229 -0.000479 0.136068 - -0.022359 -0.007786 0.13572 - -0.07395 -0.012311 0.134676 - -0.153555 -0.022751 0.131979 - -0.21663 -0.024665 0.130065 - -0.286143 -0.027448 0.127716 - -0.365661 -0.02945 0.127368 - -0.409683 -0.031537 0.127194 -e -v - 0.111621 0.018444 0.13137 - 0.058638 0.005089 0.13311 - 0.023229 -0.001001 0.133719 - -0.022359 -0.00857 0.132675 - -0.07395 -0.013876 0.13137 - -0.153555 -0.024578 0.128238 - -0.21663 -0.02684 0.12615 - -0.286143 -0.029624 0.123801 - -0.365661 -0.03206 0.123105 - -0.409683 -0.034322 0.12267 -e -v - 0.111621 0.018444 0.13137 - 0.058638 0.004829 0.131457 - 0.023229 -0.001522 0.131457 - -0.022359 -0.009266 0.12963 - -0.07395 -0.015356 0.127977 - -0.153555 -0.026405 0.124323 - -0.21663 -0.029014 0.122322 - -0.286143 -0.031886 0.119973 - -0.365661 -0.034669 0.118755 - -0.409683 -0.037193 0.118233 -e -v - -0.409683 -0.036888 0.118059 - -0.409683 -0.016138 0.117537 - -0.409683 0.004481 0.117015 - -0.409683 0.0251 0.116493 - -0.409683 0.024665 0.129717 - -0.409683 0.02423 0.142941 - -0.409683 0.023707 0.156165 - -0.409683 0.023882 0.179307 - -0.409683 0.002654 0.179481 - -0.409683 -0.010571 0.161298 - -0.409683 -0.012571 0.157992 - -0.409683 -0.014573 0.154686 - -0.409683 -0.016573 0.15138 - -0.409683 -0.018662 0.147987 - -0.409683 -0.020662 0.144681 - -0.409683 -0.022664 0.141375 - -0.409683 -0.024665 0.137982 - -0.409683 -0.026752 0.134676 - -0.409683 -0.028754 0.13137 - -0.409683 -0.030755 0.128064 - -0.409683 -0.032756 0.124671 - -0.409683 -0.034844 0.121365 - -0.409683 -0.036844 0.118059 -e -v - -0.485634 -0.038541 0.117189 - -0.485634 -0.019096 0.117102 - -0.485634 0.000304 0.117015 - -0.485634 0.019793 0.116841 - -0.485634 0.019531 0.13137 - -0.485634 0.019183 0.145812 - -0.485634 0.018923 0.160341 - -0.485634 0.018662 0.178785 - -0.485634 0.005699 0.179046 - -0.485634 -0.015878 0.167997 - -0.485634 -0.019531 0.165648 - -0.485634 -0.022576 0.162603 - -0.485634 -0.024143 0.158514 - -0.485634 -0.025534 0.154338 - -0.485634 -0.02684 0.150162 - -0.485634 -0.028144 0.145986 - -0.485634 -0.029537 0.141897 - -0.485634 -0.031016 0.137721 - -0.485634 -0.032407 0.133632 - -0.485634 -0.033886 0.129456 - -0.485634 -0.035365 0.125367 - -0.485634 -0.036931 0.121278 - -0.485634 -0.038498 0.117189 -e -v - -0.5568 -0.038976 0.117189 - -0.5568 -0.021097 0.118146 - -0.5568 -0.003176 0.119016 - -0.5568 0.014659 0.119973 - -0.5568 0.013964 0.132675 - -0.5568 0.013702 0.145464 - -0.5568 0.013528 0.15834 - -0.5568 0.013616 0.179133 - -0.5568 -0.025186 0.175653 - -0.5568 -0.029885 0.174609 - -0.5568 -0.032407 0.170433 - -0.5568 -0.03319 0.165648 - -0.5568 -0.033712 0.160776 - -0.5568 -0.034235 0.155991 - -0.5568 -0.034757 0.151119 - -0.5568 -0.035365 0.146247 - -0.5568 -0.035887 0.141375 - -0.5568 -0.036497 0.13659 - -0.5568 -0.037106 0.131718 - -0.5568 -0.037714 0.126846 - -0.5568 -0.038323 0.121974 - -0.5568 -0.038932 0.117189 -e -v - -0.638232 -0.038541 0.116232 - -0.638232 -0.023272 0.117624 - -0.638232 -0.008047 0.119016 - -0.638232 0.007178 0.120408 - -0.638232 0.00683 0.12789 - -0.638232 0.006568 0.135459 - -0.638232 0.006307 0.143028 - -0.638232 0.012571 0.15051 - -0.638232 0.012833 0.162081 - -0.638232 0.006394 0.162429 - -0.638232 0.007004 0.178176 - -0.638232 -0.035974 0.178263 - -0.638232 -0.037802 0.174261 - -0.638232 -0.037714 0.169389 - -0.638232 -0.037627 0.164604 - -0.638232 -0.037627 0.159732 - -0.638232 -0.037627 0.154947 - -0.638232 -0.037627 0.150075 - -0.638232 -0.037714 0.14529 - -0.638232 -0.037802 0.140418 - -0.638232 -0.037889 0.135546 - -0.638232 -0.037976 0.130761 - -0.638232 -0.038149 0.125889 - -0.638232 -0.038323 0.121104 - -0.638232 -0.038498 0.116232 -e -v - -0.706005 -0.037062 0.111534 - -0.706005 -0.024751 0.112752 - -0.706005 -0.012397 0.11397 - -0.706005 -0.000131 0.115188 - -0.706005 -0.000653 0.120582 - -0.706005 0.000304 0.12615 - -0.706005 0.000653 0.131805 - -0.706005 0.013442 0.146769 - -0.706005 0.013268 0.160167 - -0.706005 0.000827 0.159558 - -0.706005 0.000739 0.167823 - -0.706005 -0.036236 0.168432 - -0.706005 -0.036497 0.16443 - -0.706005 -0.036757 0.16008 - -0.706005 -0.036931 0.155643 - -0.706005 -0.037193 0.151206 - -0.706005 -0.03728 0.146856 - -0.706005 -0.037367 0.142419 - -0.706005 -0.037367 0.137982 - -0.706005 -0.03728 0.133545 - -0.706005 -0.037193 0.129195 - -0.706005 -0.037193 0.124758 - -0.706005 -0.037106 0.120321 - -0.706005 -0.037106 0.115971 - -0.706005 -0.037019 0.111534 -e -v - -0.757944 -0.030885 0.108228 - -0.757944 -0.024665 0.109185 - -0.757944 -0.018488 0.10962 - -0.757944 -0.012311 0.109707 - -0.757944 -0.010049 0.116319 - -0.757944 -0.007786 0.122931 - -0.757944 -0.005437 0.12963 - -0.757944 0.013876 0.144942 - -0.757944 0.014311 0.156513 - -0.757944 -0.004219 0.156861 - -0.757944 -0.004219 0.15921 - -0.757944 -0.036148 0.159993 - -0.757944 -0.03667 0.155469 - -0.757944 -0.036931 0.15138 - -0.757944 -0.036757 0.147378 - -0.757944 -0.036584 0.143289 - -0.757944 -0.036497 0.1392 - -0.757944 -0.036584 0.135111 - -0.757944 -0.03667 0.131109 - -0.757944 -0.036844 0.12702 - -0.757944 -0.036931 0.122931 - -0.757944 -0.036584 0.118929 - -0.757944 -0.034844 0.115275 - -0.757944 -0.032929 0.111708 - -0.757944 -0.030841 0.108228 -e -v - -0.812058 -0.026883 0.109098 - -0.812058 -0.025709 0.109098 - -0.812058 -0.024665 0.109098 - -0.812058 -0.02362 0.109185 - -0.812058 -0.019879 0.117363 - -0.812058 -0.015703 0.125628 - -0.812058 -0.011528 0.133893 - -0.812058 0.011702 0.149118 - -0.812058 0.012049 0.155121 - -0.812058 -0.010658 0.158427 - -0.812058 -0.035105 0.157905 - -0.812058 -0.035974 0.154077 - -0.812058 -0.036148 0.150162 - -0.812058 -0.035887 0.14616 - -0.812058 -0.035887 0.142245 - -0.812058 -0.036236 0.13833 - -0.812058 -0.036497 0.134328 - -0.812058 -0.03641 0.130413 - -0.812058 -0.035887 0.126498 - -0.812058 -0.034844 0.12267 - -0.812058 -0.033103 0.11919 - -0.812058 -0.031103 0.115797 - -0.812058 -0.029014 0.112404 - -0.812058 -0.02684 0.109098 -e -v - -0.849642 -0.026709 0.122322 - -0.849642 -0.025709 0.122148 - -0.849642 -0.024751 0.121974 - -0.849642 -0.023882 0.121887 - -0.849642 -0.020662 0.126846 - -0.849642 -0.017531 0.131805 - -0.849642 -0.014311 0.136764 - -0.849642 0.007265 0.149988 - -0.849642 -0.01318 0.156687 - -0.849642 -0.032582 0.156861 - -0.849642 -0.032582 0.154077 - -0.849642 -0.032669 0.151293 - -0.849642 -0.032756 0.148422 - -0.849642 -0.032842 0.145638 - -0.849642 -0.032842 0.142854 - -0.849642 -0.032756 0.139983 - -0.849642 -0.032669 0.137199 - -0.849642 -0.03319 0.134415 - -0.849642 -0.032495 0.131805 - -0.849642 -0.030755 0.12963 - -0.849642 -0.029102 0.127281 - -0.849642 -0.027796 0.124845 - -0.849642 -0.026665 0.122322 -e -v - -0.898275 -0.026883 0.139548 - -0.898275 -0.026231 0.139635 - -0.898275 -0.025621 0.139635 - -0.898275 -0.025013 0.139635 - -0.898275 -0.02362 0.141375 - -0.898275 -0.022228 0.143028 - -0.898275 -0.020924 0.144768 - -0.898275 -0.011789 0.15138 - -0.898275 -0.019706 0.155904 - -0.898275 -0.020141 0.155904 - -0.898275 -0.029885 0.15573 - -0.898275 -0.03032 0.154338 - -0.898275 -0.03032 0.153033 - -0.898275 -0.03032 0.151728 - -0.898275 -0.030233 0.150423 - -0.898275 -0.030233 0.149118 - -0.898275 -0.030233 0.147726 - -0.898275 -0.03032 0.146421 - -0.898275 -0.030233 0.145116 - -0.898275 -0.029885 0.143811 - -0.898275 -0.029275 0.14268 - -0.898275 -0.028493 0.141636 - -0.898275 -0.027623 0.140592 - -0.898275 -0.02684 0.139548 -e -v - -0.938034 -0.031581 0.155904 -e -v - -0.409683 -0.036888 0.118059 - -0.485634 -0.038498 0.117189 - -0.5568 -0.038932 0.117189 - -0.638232 -0.038498 0.116232 - -0.706005 -0.037019 0.111534 - -0.757944 -0.030841 0.108228 - -0.812058 -0.02684 0.109098 - -0.849642 -0.026665 0.122322 - -0.898275 -0.02684 0.139548 - -0.938034 -0.031537 0.155904 -e -v - -0.409683 -0.016182 0.117537 - -0.485634 -0.019096 0.117102 - -0.5568 -0.021097 0.118146 - -0.638232 -0.023272 0.117624 - -0.706005 -0.024751 0.112752 - -0.757944 -0.024665 0.109185 - -0.812058 -0.025709 0.109098 - -0.849642 -0.025709 0.122148 - -0.898275 -0.026231 0.139635 - -0.938034 -0.031537 0.155904 -e -v - -0.409683 0.004437 0.117015 - -0.485634 0.000304 0.117015 - -0.5568 -0.003176 0.119016 - -0.638232 -0.008047 0.119016 - -0.706005 -0.012397 0.11397 - -0.757944 -0.018488 0.10962 - -0.812058 -0.024665 0.109098 - -0.849642 -0.024751 0.121974 - -0.898275 -0.025621 0.139635 - -0.938034 -0.031537 0.155904 -e -v - -0.409683 0.025056 0.116493 - -0.485634 0.019793 0.116841 - -0.5568 0.014659 0.119973 - -0.638232 0.007178 0.120408 - -0.706005 -0.000131 0.115188 - -0.757944 -0.012311 0.109707 - -0.812058 -0.02362 0.109185 - -0.849642 -0.023882 0.121887 - -0.898275 -0.025013 0.139635 - -0.938034 -0.031537 0.155904 -e -v - -0.409683 0.024621 0.129717 - -0.485634 0.019531 0.13137 - -0.5568 0.013964 0.132675 - -0.638232 0.00683 0.12789 - -0.706005 -0.000653 0.120582 - -0.757944 -0.010049 0.116319 - -0.812058 -0.019879 0.117363 - -0.849642 -0.020662 0.126846 - -0.898275 -0.02362 0.141375 - -0.938034 -0.031537 0.155904 -e -v - -0.409683 0.024186 0.142941 - -0.485634 0.019183 0.145812 - -0.5568 0.013702 0.145464 - -0.638232 0.006568 0.135459 - -0.706005 0.000304 0.12615 - -0.757944 -0.007786 0.122931 - -0.812058 -0.015703 0.125628 - -0.849642 -0.017531 0.131805 - -0.898275 -0.022228 0.143028 - -0.938034 -0.031537 0.155904 -e -v - -0.409683 0.023664 0.156165 - -0.485634 0.018923 0.160341 - -0.5568 0.013528 0.15834 - -0.638232 0.006307 0.143028 - -0.706005 0.000653 0.131805 - -0.757944 -0.005437 0.12963 - -0.812058 -0.011528 0.133893 - -0.849642 -0.014311 0.136764 - -0.898275 -0.020924 0.144768 - -0.938034 -0.031537 0.155904 -e -v - -0.409683 0.023664 0.156165 - -0.485634 0.018923 0.160341 - -0.5568 0.013528 0.15834 - -0.638232 0.012571 0.15051 - -0.706005 0.013442 0.146769 - -0.757944 0.013876 0.144942 - -0.812058 0.011702 0.149118 - -0.849642 0.007265 0.149988 - -0.898275 -0.011789 0.15138 - -0.938034 -0.031537 0.155904 -e -v - -0.409683 0.023664 0.156165 - -0.485634 0.018923 0.160341 - -0.5568 0.013528 0.15834 - -0.638232 0.012833 0.162081 - -0.706005 0.013268 0.160167 - -0.757944 0.014311 0.156513 - -0.812058 0.012049 0.155121 - -0.849642 0.007265 0.149988 - -0.898275 -0.011789 0.15138 - -0.938034 -0.031537 0.155904 -e -v - -0.409683 0.023838 0.179307 - -0.485634 0.018662 0.178785 - -0.5568 0.013616 0.179133 - -0.638232 0.006394 0.162429 - -0.706005 0.000827 0.159558 - -0.757944 -0.004219 0.156861 - -0.812058 -0.010658 0.158427 - -0.849642 -0.01318 0.156687 - -0.898275 -0.019706 0.155904 - -0.938034 -0.031537 0.155904 -e -v - -0.409683 0.00261 0.179481 - -0.485634 0.005699 0.179046 - -0.5568 0.013616 0.179133 - -0.638232 0.007004 0.178176 - -0.706005 0.000739 0.167823 - -0.757944 -0.004219 0.15921 - -0.812058 -0.010658 0.158427 - -0.849642 -0.01318 0.156687 - -0.898275 -0.020141 0.155904 - -0.938034 -0.031537 0.155904 -e -v - -0.409683 -0.010614 0.161298 - -0.485634 -0.015878 0.167997 - -0.5568 -0.025186 0.175653 - -0.638232 -0.035974 0.178263 - -0.706005 -0.036236 0.168432 - -0.757944 -0.036148 0.159993 - -0.812058 -0.035105 0.157905 - -0.849642 -0.032582 0.156861 - -0.898275 -0.029885 0.15573 - -0.938034 -0.031537 0.155904 -e -v - -0.409683 -0.012615 0.157992 - -0.485634 -0.019531 0.165648 - -0.5568 -0.029885 0.174609 - -0.638232 -0.037802 0.174261 - -0.706005 -0.036497 0.16443 - -0.757944 -0.03667 0.155469 - -0.812058 -0.035974 0.154077 - -0.849642 -0.032582 0.154077 - -0.898275 -0.03032 0.154338 - -0.938034 -0.031537 0.155904 -e -v - -0.409683 -0.014616 0.154686 - -0.485634 -0.022576 0.162603 - -0.5568 -0.032407 0.170433 - -0.638232 -0.037714 0.169389 - -0.706005 -0.036757 0.16008 - -0.757944 -0.036931 0.15138 - -0.812058 -0.036148 0.150162 - -0.849642 -0.032669 0.151293 - -0.898275 -0.03032 0.153033 - -0.938034 -0.031537 0.155904 -e -v - -0.409683 -0.016617 0.15138 - -0.485634 -0.024143 0.158514 - -0.5568 -0.03319 0.165648 - -0.638232 -0.037627 0.164604 - -0.706005 -0.036931 0.155643 - -0.757944 -0.036757 0.147378 - -0.812058 -0.035887 0.14616 - -0.849642 -0.032756 0.148422 - -0.898275 -0.03032 0.151728 - -0.938034 -0.031537 0.155904 -e -v - -0.409683 -0.018705 0.147987 - -0.485634 -0.025534 0.154338 - -0.5568 -0.033712 0.160776 - -0.638232 -0.037627 0.159732 - -0.706005 -0.037193 0.151206 - -0.757944 -0.036584 0.143289 - -0.812058 -0.035887 0.142245 - -0.849642 -0.032842 0.145638 - -0.898275 -0.030233 0.150423 - -0.938034 -0.031537 0.155904 -e -v - -0.409683 -0.020706 0.144681 - -0.485634 -0.02684 0.150162 - -0.5568 -0.034235 0.155991 - -0.638232 -0.037627 0.154947 - -0.706005 -0.03728 0.146856 - -0.757944 -0.036497 0.1392 - -0.812058 -0.036236 0.13833 - -0.849642 -0.032842 0.142854 - -0.898275 -0.030233 0.149118 - -0.938034 -0.031537 0.155904 -e -v - -0.409683 -0.022707 0.141375 - -0.485634 -0.028144 0.145986 - -0.5568 -0.034757 0.151119 - -0.638232 -0.037627 0.150075 - -0.706005 -0.037367 0.142419 - -0.757944 -0.036584 0.135111 - -0.812058 -0.036497 0.134328 - -0.849642 -0.032756 0.139983 - -0.898275 -0.030233 0.147726 - -0.938034 -0.031537 0.155904 -e -v - -0.409683 -0.024708 0.137982 - -0.485634 -0.029537 0.141897 - -0.5568 -0.035365 0.146247 - -0.638232 -0.037714 0.14529 - -0.706005 -0.037367 0.137982 - -0.757944 -0.03667 0.131109 - -0.812058 -0.03641 0.130413 - -0.849642 -0.032669 0.137199 - -0.898275 -0.03032 0.146421 - -0.938034 -0.031537 0.155904 -e -v - -0.409683 -0.026796 0.134676 - -0.485634 -0.031016 0.137721 - -0.5568 -0.035887 0.141375 - -0.638232 -0.037802 0.140418 - -0.706005 -0.03728 0.133545 - -0.757944 -0.036844 0.12702 - -0.812058 -0.035887 0.126498 - -0.849642 -0.03319 0.134415 - -0.898275 -0.030233 0.145116 - -0.938034 -0.031537 0.155904 -e -v - -0.409683 -0.028797 0.13137 - -0.485634 -0.032407 0.133632 - -0.5568 -0.036497 0.13659 - -0.638232 -0.037889 0.135546 - -0.706005 -0.037193 0.129195 - -0.757944 -0.036931 0.122931 - -0.812058 -0.034844 0.12267 - -0.849642 -0.032495 0.131805 - -0.898275 -0.029885 0.143811 - -0.938034 -0.031537 0.155904 -e -v - -0.409683 -0.030798 0.128064 - -0.485634 -0.033886 0.129456 - -0.5568 -0.037106 0.131718 - -0.638232 -0.037976 0.130761 - -0.706005 -0.037193 0.124758 - -0.757944 -0.036584 0.118929 - -0.812058 -0.033103 0.11919 - -0.849642 -0.030755 0.12963 - -0.898275 -0.029275 0.14268 - -0.938034 -0.031537 0.155904 -e -v - -0.409683 -0.032799 0.124671 - -0.485634 -0.035365 0.125367 - -0.5568 -0.037714 0.126846 - -0.638232 -0.038149 0.125889 - -0.706005 -0.037106 0.120321 - -0.757944 -0.034844 0.115275 - -0.812058 -0.031103 0.115797 - -0.849642 -0.029102 0.127281 - -0.898275 -0.028493 0.141636 - -0.938034 -0.031537 0.155904 -e -v - -0.409683 -0.034887 0.121365 - -0.485634 -0.036931 0.121278 - -0.5568 -0.038323 0.121974 - -0.638232 -0.038323 0.121104 - -0.706005 -0.037106 0.115971 - -0.757944 -0.032929 0.111708 - -0.812058 -0.029014 0.112404 - -0.849642 -0.027796 0.124845 - -0.898275 -0.027623 0.140592 - -0.938034 -0.031537 0.155904 -e -v - -0.409683 -0.036888 0.118059 - -0.485634 -0.038498 0.117189 - -0.5568 -0.038932 0.117189 - -0.638232 -0.038498 0.116232 - -0.706005 -0.037019 0.111534 - -0.757944 -0.030841 0.108228 - -0.812058 -0.02684 0.109098 - -0.849642 -0.026665 0.122322 - -0.898275 -0.02684 0.139548 - -0.938034 -0.031537 0.155904 -e -v - -0.096048 0.008961 0.176784 - -0.099702 0.011789 0.176784 - -0.108402 0.014137 0.176871 - -0.120756 0.016226 0.176871 - -0.133197 0.017792 0.176871 - -0.145638 0.019096 0.176958 - -0.17052 0.021185 0.176958 - -0.220284 0.024143 0.177045 - -0.270048 0.025796 0.177045 - -0.319812 0.025969 0.177045 - -0.369576 0.024838 0.177045 - -0.41934 0.022489 0.176958 - -0.469104 0.019358 0.176958 - -0.518868 0.015356 0.176871 - -0.568458 0.010918 0.176784 - -0.593253 0.008918 0.176784 - -0.568371 0.007961 0.176697 - -0.518607 0.006134 0.176697 - -0.46893 0.003958 0.176697 - -0.419253 0.00161 0.17661 - -0.369576 -0.000304 0.17661 - -0.319899 -0.001522 0.176523 - -0.270222 -0.001783 0.176523 - -0.220545 -0.001001 0.17661 - -0.170868 0.000565 0.17661 - -0.145986 0.001696 0.17661 - -0.133545 0.002479 0.17661 - -0.121104 0.00335 0.17661 - -0.108663 0.004742 0.176697 - -0.099963 0.006394 0.176697 - -0.096135 0.00883 0.176697 -e -v - -0.261783 0.008874 0.346869 - -0.264219 0.010744 0.346956 - -0.270048 0.012311 0.346956 - -0.278313 0.013616 0.346956 - -0.286578 0.014659 0.346956 - -0.294843 0.015442 0.347043 - -0.31146 0.016834 0.347043 - -0.344607 0.018748 0.347043 - -0.377754 0.019793 0.347043 - -0.410988 0.019966 0.34713 - -0.444135 0.019183 0.347043 - -0.477282 0.017704 0.347043 - -0.510516 0.015703 0.347043 - -0.543663 0.013094 0.346956 - -0.576723 0.010223 0.346956 - -0.593253 0.008918 0.346869 - -0.576723 0.008309 0.346869 - -0.543489 0.007178 0.346869 - -0.510342 0.005786 0.346869 - -0.477282 0.004306 0.346782 - -0.444135 0.003089 0.346782 - -0.410988 0.002305 0.346782 - -0.377928 0.002132 0.346782 - -0.344781 0.002567 0.346782 - -0.311634 0.00361 0.346782 - -0.295104 0.004306 0.346782 - -0.286839 0.004829 0.346782 - -0.278487 0.00535 0.346869 - -0.270222 0.00622 0.346869 - -0.264393 0.007265 0.346869 - -0.26187 0.00883 0.346869 -e -v - -0.42978 0.008874 0.512604 - -0.431259 0.009961 0.512691 - -0.434652 0.010918 0.512691 - -0.439611 0.011702 0.512691 - -0.444657 0.012311 0.512691 - -0.449616 0.012745 0.512691 - -0.459534 0.013616 0.512691 - -0.479457 0.014747 0.512691 - -0.49938 0.015356 0.512778 - -0.519216 0.015442 0.512778 - -0.539139 0.015007 0.512778 - -0.559062 0.014137 0.512691 - -0.578985 0.01292 0.512691 - -0.598821 0.011354 0.512691 - -0.618744 0.009701 0.512604 - -0.628662 0.008918 0.512604 - -0.618657 0.00857 0.512604 - -0.598821 0.007873 0.512604 - -0.578898 0.007091 0.512604 - -0.559062 0.00622 0.512604 - -0.539139 0.005524 0.512604 - -0.519303 0.005003 0.512604 - -0.49938 0.004916 0.512517 - -0.479544 0.005176 0.512604 - -0.459708 0.005786 0.512604 - -0.449703 0.00622 0.512604 - -0.444744 0.006481 0.512604 - -0.439785 0.00683 0.512604 - -0.434826 0.007351 0.512604 - -0.431346 0.007961 0.512604 - -0.42978 0.00883 0.512604 -e -v - -0.47589 0.008874 0.563412 - -0.476412 0.009961 0.563499 - -0.477543 0.010744 0.563499 - -0.479283 0.01144 0.563499 - -0.480936 0.011963 0.563499 - -0.482676 0.012397 0.563499 - -0.486156 0.013094 0.563499 - -0.492942 0.014051 0.563586 - -0.499815 0.014573 0.563586 - -0.506688 0.014573 0.563586 - -0.513561 0.014137 0.563586 - -0.520434 0.013268 0.563499 - -0.527307 0.012223 0.563499 - -0.53418 0.010918 0.563499 - -0.540966 0.009527 0.563499 - -0.544446 0.008918 0.563412 - -0.540966 0.008396 0.563412 - -0.534093 0.007438 0.563412 - -0.52722 0.006394 0.563412 - -0.520434 0.00535 0.563412 - -0.513561 0.004568 0.563412 - -0.506775 0.004132 0.563412 - -0.499902 0.004132 0.563412 - -0.493116 0.004481 0.563412 - -0.486243 0.005263 0.563412 - -0.48285 0.005786 0.563412 - -0.48111 0.006134 0.563412 - -0.47937 0.006568 0.563412 - -0.477717 0.007178 0.563412 - -0.476499 0.007873 0.563412 - -0.47589 0.00883 0.563412 -e -v - -0.522609 0.008874 0.574548 - -0.522609 0.009004 0.574548 - -0.522609 0.009092 0.574548 - -0.522696 0.009092 0.574548 - -0.522783 0.009178 0.574548 - -0.52287 0.009178 0.574548 - -0.523131 0.009266 0.574548 - -0.523305 0.009352 0.574548 - -0.523566 0.009352 0.574548 - -0.523827 0.009352 0.574548 - -0.524001 0.009266 0.574548 - -0.524262 0.009178 0.574548 - -0.524523 0.009092 0.574548 - -0.524697 0.008918 0.574548 - -0.524784 0.008918 0.574548 - -0.524697 0.008918 0.574548 - -0.524436 0.008918 0.574548 - -0.524175 0.008918 0.574548 - -0.524001 0.00883 0.574548 - -0.523827 0.00883 0.574461 - -0.523566 0.008744 0.574461 - -0.523392 0.008744 0.574461 - -0.523131 0.008744 0.574461 - -0.522957 0.008744 0.574461 - -0.52287 0.00883 0.574461 - -0.522783 0.00883 0.574461 - -0.522696 0.00883 0.574461 - -0.522696 0.00883 0.574548 - -0.522609 0.00883 0.574548 - -0.522609 0.008918 0.574548 -e -v - -0.096048 0.008961 0.176784 - -0.261783 0.008918 0.346869 - -0.42978 0.008918 0.512604 - -0.47589 0.008918 0.563412 - -0.522609 0.008918 0.574548 -e -v - -0.099702 0.011745 0.176784 - -0.264219 0.010744 0.346956 - -0.431259 0.009961 0.512691 - -0.476412 0.009961 0.563499 - -0.522609 0.008918 0.574548 -e -v - -0.108402 0.014094 0.176871 - -0.270048 0.012311 0.346956 - -0.434652 0.010918 0.512691 - -0.477543 0.010744 0.563499 - -0.522609 0.009004 0.574548 -e -v - -0.120756 0.016182 0.176871 - -0.278313 0.013616 0.346956 - -0.439611 0.011702 0.512691 - -0.479283 0.01144 0.563499 - -0.522609 0.009092 0.574548 -e -v - -0.133197 0.017748 0.176871 - -0.286578 0.014659 0.346956 - -0.444657 0.012311 0.512691 - -0.480936 0.011963 0.563499 - -0.522696 0.009092 0.574548 -e -v - -0.145638 0.019053 0.176958 - -0.294843 0.015442 0.347043 - -0.449616 0.012745 0.512691 - -0.482676 0.012397 0.563499 - -0.522783 0.009178 0.574548 -e -v - -0.17052 0.021141 0.176958 - -0.31146 0.016834 0.347043 - -0.459534 0.013616 0.512691 - -0.486156 0.013094 0.563499 - -0.52287 0.009178 0.574548 -e -v - -0.220284 0.024099 0.177045 - -0.344607 0.018748 0.347043 - -0.479457 0.014747 0.512691 - -0.492942 0.014051 0.563586 - -0.523131 0.009266 0.574548 -e -v - -0.270048 0.025752 0.177045 - -0.377754 0.019793 0.347043 - -0.49938 0.015356 0.512778 - -0.499815 0.014573 0.563586 - -0.523305 0.009352 0.574548 -e -v - -0.319812 0.025926 0.177045 - -0.410988 0.019966 0.34713 - -0.519216 0.015442 0.512778 - -0.506688 0.014573 0.563586 - -0.523566 0.009352 0.574548 -e -v - -0.369576 0.024795 0.177045 - -0.444135 0.019183 0.347043 - -0.539139 0.015007 0.512778 - -0.513561 0.014137 0.563586 - -0.523827 0.009352 0.574548 -e -v - -0.41934 0.022446 0.176958 - -0.477282 0.017704 0.347043 - -0.559062 0.014137 0.512691 - -0.520434 0.013268 0.563499 - -0.524001 0.009266 0.574548 -e -v - -0.469104 0.019314 0.176958 - -0.510516 0.015703 0.347043 - -0.578985 0.01292 0.512691 - -0.527307 0.012223 0.563499 - -0.524262 0.009178 0.574548 -e -v - -0.518868 0.015312 0.176871 - -0.543663 0.013094 0.346956 - -0.598821 0.011354 0.512691 - -0.53418 0.010918 0.563499 - -0.524523 0.009092 0.574548 -e -v - -0.568458 0.010875 0.176784 - -0.576723 0.010223 0.346956 - -0.618744 0.009701 0.512604 - -0.540966 0.009527 0.563499 - -0.524697 0.008918 0.574548 -e -v - -0.593253 0.008874 0.176784 - -0.593253 0.008918 0.346869 - -0.628662 0.008918 0.512604 - -0.544446 0.008918 0.563412 - -0.524784 0.008918 0.574548 -e -v - -0.568371 0.007917 0.176697 - -0.576723 0.008309 0.346869 - -0.618657 0.00857 0.512604 - -0.540966 0.008396 0.563412 - -0.524697 0.008918 0.574548 -e -v - -0.518607 0.00609 0.176697 - -0.543489 0.007178 0.346869 - -0.598821 0.007873 0.512604 - -0.534093 0.007438 0.563412 - -0.524436 0.008918 0.574548 -e -v - -0.46893 0.003915 0.176697 - -0.510342 0.005786 0.346869 - -0.578898 0.007091 0.512604 - -0.52722 0.006394 0.563412 - -0.524175 0.008918 0.574548 -e -v - -0.419253 0.001566 0.17661 - -0.477282 0.004306 0.346782 - -0.559062 0.00622 0.512604 - -0.520434 0.00535 0.563412 - -0.524001 0.00883 0.574548 -e -v - -0.369576 -0.000348 0.17661 - -0.444135 0.003089 0.346782 - -0.539139 0.005524 0.512604 - -0.513561 0.004568 0.563412 - -0.523827 0.00883 0.574461 -e -v - -0.319899 -0.001566 0.176523 - -0.410988 0.002305 0.346782 - -0.519303 0.005003 0.512604 - -0.506775 0.004132 0.563412 - -0.523566 0.008744 0.574461 -e -v - -0.270222 -0.001827 0.176523 - -0.377928 0.002132 0.346782 - -0.49938 0.004916 0.512517 - -0.499902 0.004132 0.563412 - -0.523392 0.008744 0.574461 -e -v - -0.220545 -0.001044 0.17661 - -0.344781 0.002567 0.346782 - -0.479544 0.005176 0.512604 - -0.493116 0.004481 0.563412 - -0.523131 0.008744 0.574461 -e -v - -0.170868 0.000522 0.17661 - -0.311634 0.00361 0.346782 - -0.459708 0.005786 0.512604 - -0.486243 0.005263 0.563412 - -0.522957 0.008744 0.574461 -e -v - -0.145986 0.001653 0.17661 - -0.295104 0.004306 0.346782 - -0.449703 0.00622 0.512604 - -0.48285 0.005786 0.563412 - -0.52287 0.00883 0.574461 -e -v - -0.133545 0.002436 0.17661 - -0.286839 0.004829 0.346782 - -0.444744 0.006481 0.512604 - -0.48111 0.006134 0.563412 - -0.522783 0.00883 0.574461 -e -v - -0.121104 0.003306 0.17661 - -0.278487 0.00535 0.346869 - -0.439785 0.00683 0.512604 - -0.47937 0.006568 0.563412 - -0.522696 0.00883 0.574461 -e -v - -0.108663 0.004698 0.176697 - -0.270222 0.00622 0.346869 - -0.434826 0.007351 0.512604 - -0.477717 0.007178 0.563412 - -0.522696 0.00883 0.574548 -e -v - -0.099963 0.006351 0.176697 - -0.264393 0.007265 0.346869 - -0.431346 0.007961 0.512604 - -0.476499 0.007873 0.563412 - -0.522609 0.00883 0.574548 -e -v - -0.096135 0.008787 0.176697 - -0.26187 0.00883 0.346869 - -0.42978 0.00883 0.512604 - -0.47589 0.00883 0.563412 - -0.522609 0.008918 0.574548 -e -v - -0.792222 0.27405 0.147987 - -0.792744 0.274094 0.147726 - -0.794136 0.274094 0.147465 - -0.79605 0.274094 0.147291 - -0.797964 0.274094 0.147117 - -0.799878 0.274094 0.14703 - -0.803793 0.274094 0.146943 - -0.811536 0.274094 0.146769 - -0.819279 0.274094 0.146682 - -0.827022 0.274094 0.146682 - -0.834678 0.274094 0.146769 - -0.842421 0.274094 0.146943 - -0.850164 0.274094 0.147117 - -0.857907 0.274094 0.147378 - -0.86565 0.274094 0.147813 - -0.869565 0.274094 0.148074 - -0.86565 0.274094 0.148248 - -0.857907 0.274094 0.148596 - -0.850164 0.274094 0.148857 - -0.842421 0.274094 0.149118 - -0.834678 0.274094 0.149292 - -0.827022 0.274094 0.149379 - -0.819279 0.274094 0.149379 - -0.811536 0.274094 0.149292 - -0.803793 0.274094 0.149118 - -0.799878 0.274094 0.148944 - -0.797964 0.274094 0.148857 - -0.79605 0.274094 0.14877 - -0.794136 0.274094 0.148596 - -0.792744 0.274094 0.148335 - -0.792222 0.274094 0.147987 -e -v - -0.604389 0.013224 0.147987 - -0.792222 0.274094 0.147987 -e -v - -0.606216 0.013224 0.146508 - -0.792744 0.274094 0.147726 -e -v - -0.610653 0.013224 0.145464 - -0.794136 0.274094 0.147465 -e -v - -0.616917 0.013224 0.144594 - -0.79605 0.274094 0.147291 -e -v - -0.623268 0.013224 0.143985 - -0.797964 0.274094 0.147117 -e -v - -0.629532 0.013224 0.14355 - -0.799878 0.274094 0.14703 -e -v - -0.642147 0.013224 0.142941 - -0.803793 0.274094 0.146943 -e -v - -0.66729 0.013224 0.142158 - -0.811536 0.274094 0.146769 -e -v - -0.69252 0.013224 0.141723 - -0.819279 0.274094 0.146682 -e -v - -0.71775 0.013224 0.141723 - -0.827022 0.274094 0.146682 -e -v - -0.742893 0.013224 0.142158 - -0.834678 0.274094 0.146769 -e -v - -0.768123 0.013224 0.142854 - -0.842421 0.274094 0.146943 -e -v - -0.793266 0.013224 0.143898 - -0.850164 0.274094 0.147117 -e -v - -0.818496 0.013224 0.14529 - -0.857907 0.274094 0.147378 -e -v - -0.843639 0.013224 0.146943 - -0.86565 0.274094 0.147813 -e -v - -0.856254 0.013224 0.148161 - -0.869565 0.274094 0.148074 -e -v - -0.843639 0.013224 0.149118 - -0.86565 0.274094 0.148248 -e -v - -0.818496 0.013224 0.150771 - -0.857907 0.274094 0.148596 -e -v - -0.793266 0.013224 0.152163 - -0.850164 0.274094 0.148857 -e -v - -0.768123 0.013224 0.153207 - -0.842421 0.274094 0.149118 -e -v - -0.742893 0.013224 0.153903 - -0.834678 0.274094 0.149292 -e -v - -0.71775 0.013224 0.154251 - -0.827022 0.274094 0.149379 -e -v - -0.69252 0.013224 0.154251 - -0.819279 0.274094 0.149379 -e -v - -0.66729 0.013224 0.153903 - -0.811536 0.274094 0.149292 -e -v - -0.642147 0.013224 0.15312 - -0.803793 0.274094 0.149118 -e -v - -0.629532 0.013224 0.152424 - -0.799878 0.274094 0.148944 -e -v - -0.623268 0.013224 0.151989 - -0.797964 0.274094 0.148857 -e -v - -0.616917 0.013224 0.151467 - -0.79605 0.274094 0.14877 -e -v - -0.610653 0.013224 0.150597 - -0.794136 0.274094 0.148596 -e -v - -0.606216 0.013224 0.149553 - -0.792744 0.274094 0.148335 -e -v - -0.604389 0.013224 0.148074 - -0.792222 0.274094 0.147987 -e -v - -0.604389 0.013224 0.147987 - -0.606216 0.013268 0.146508 - -0.610653 0.013268 0.145464 - -0.616917 0.013268 0.144594 - -0.623268 0.013268 0.143985 - -0.629532 0.013268 0.14355 - -0.642147 0.013268 0.142941 - -0.66729 0.013268 0.142158 - -0.69252 0.013268 0.141723 - -0.71775 0.013268 0.141723 - -0.742893 0.013268 0.142158 - -0.768123 0.013268 0.142854 - -0.793266 0.013268 0.143898 - -0.818496 0.013268 0.14529 - -0.843639 0.013268 0.146943 - -0.856254 0.013268 0.148161 - -0.843639 0.013268 0.149118 - -0.818496 0.013268 0.150771 - -0.793266 0.013268 0.152163 - -0.768123 0.013268 0.153207 - -0.742893 0.013268 0.153903 - -0.71775 0.013268 0.154251 - -0.69252 0.013268 0.154251 - -0.66729 0.013268 0.153903 - -0.642147 0.013268 0.15312 - -0.629532 0.013268 0.152424 - -0.623268 0.013268 0.151989 - -0.616917 0.013268 0.151467 - -0.610653 0.013268 0.150597 - -0.606216 0.013268 0.149553 - -0.604389 0.013268 0.148074 -e -v - -0.670683 -0.026448 0.159036 - -0.672597 -0.024751 0.159036 - -0.677121 -0.023534 0.159036 - -0.683646 -0.022576 0.159036 - -0.690171 -0.021881 0.159036 - -0.696696 -0.021358 0.159036 - -0.709746 -0.020662 0.159036 - -0.735846 -0.019793 0.159036 - -0.761946 -0.019358 0.159036 - -0.787959 -0.019358 0.159036 - -0.814059 -0.019793 0.159036 - -0.840159 -0.020575 0.159036 - -0.866172 -0.021793 0.159036 - -0.892272 -0.023359 0.159036 - -0.918372 -0.025274 0.159036 - -0.931422 -0.026579 0.159036 - -0.918372 -0.02771 0.159036 - -0.892272 -0.029624 0.159036 - -0.866172 -0.031189 0.159036 - -0.840159 -0.032407 0.159036 - -0.814059 -0.03319 0.159036 - -0.787959 -0.033625 0.159036 - -0.761946 -0.033625 0.159036 - -0.735846 -0.03319 0.159036 - -0.709746 -0.03232 0.159036 - -0.696696 -0.031537 0.159036 - -0.690171 -0.031016 0.159036 - -0.683646 -0.030406 0.159036 - -0.677121 -0.02945 0.159036 - -0.672597 -0.028231 0.159036 - -0.670683 -0.026579 0.159036 -e -v - -0.76125 -0.026448 0.236379 - -0.762642 -0.025361 0.236379 - -0.766035 -0.02449 0.236379 - -0.770733 -0.023882 0.236379 - -0.775518 -0.023447 0.236379 - -0.780216 -0.023099 0.236379 - -0.789786 -0.022664 0.236379 - -0.808752 -0.022055 0.236379 - -0.827718 -0.021793 0.236379 - -0.846771 -0.021793 0.236379 - -0.865737 -0.022055 0.236379 - -0.88479 -0.022576 0.236379 - -0.903756 -0.023359 0.236379 - -0.922809 -0.024403 0.236379 - -0.941775 -0.025621 0.236379 - -0.951258 -0.026579 0.236379 - -0.941775 -0.027275 0.236379 - -0.922809 -0.028579 0.236379 - -0.903756 -0.029624 0.236379 - -0.88479 -0.030406 0.236379 - -0.865737 -0.030928 0.236379 - -0.846771 -0.031189 0.236379 - -0.827718 -0.031189 0.236379 - -0.808752 -0.030928 0.236379 - -0.789786 -0.03032 0.236379 - -0.780216 -0.029797 0.236379 - -0.775518 -0.029537 0.236379 - -0.770733 -0.029102 0.236379 - -0.766035 -0.028406 0.236379 - -0.762642 -0.027623 0.236379 - -0.76125 -0.026492 0.236379 -e -v - -0.725928 -0.026448 0.23751 - -0.727581 -0.025361 0.23751 - -0.731583 -0.02449 0.23751 - -0.737238 -0.023882 0.23751 - -0.74298 -0.023447 0.23751 - -0.748635 -0.023099 0.23751 - -0.760032 -0.022664 0.23751 - -0.782826 -0.022055 0.23751 - -0.805533 -0.021793 0.23751 - -0.828327 -0.021793 0.23751 - -0.851034 -0.022055 0.23751 - -0.873828 -0.022576 0.23751 - -0.896622 -0.023359 0.23751 - -0.919329 -0.024403 0.23751 - -0.942123 -0.025621 0.23751 - -0.95352 -0.026579 0.23751 - -0.942123 -0.027275 0.23751 - -0.919329 -0.028579 0.23751 - -0.896622 -0.029624 0.23751 - -0.873828 -0.030406 0.23751 - -0.851034 -0.030928 0.23751 - -0.828327 -0.031189 0.23751 - -0.805533 -0.031189 0.23751 - -0.782826 -0.030928 0.23751 - -0.760032 -0.03032 0.23751 - -0.748635 -0.029797 0.23751 - -0.74298 -0.029537 0.23751 - -0.737238 -0.029102 0.23751 - -0.731583 -0.028406 0.23751 - -0.727581 -0.027623 0.23751 - -0.725928 -0.026492 0.23751 -e -v - -0.84738 -0.026535 0.342519 - -0.848424 -0.025969 0.342519 - -0.850599 -0.025534 0.342519 - -0.853818 -0.025274 0.342519 - -0.857037 -0.025013 0.342519 - -0.860256 -0.024926 0.342519 - -0.866607 -0.024665 0.342519 - -0.879483 -0.024403 0.342519 - -0.892272 -0.02423 0.342519 - -0.905061 -0.02423 0.342519 - -0.917937 -0.024403 0.342519 - -0.930726 -0.024665 0.342519 - -0.943515 -0.025013 0.342519 - -0.956391 -0.025534 0.342519 - -0.96918 -0.026057 0.342519 - -0.975618 -0.026492 0.342519 - -0.96918 -0.02684 0.342519 - -0.956391 -0.027448 0.342519 - -0.943515 -0.027971 0.342519 - -0.930726 -0.028319 0.342519 - -0.917937 -0.028579 0.342519 - -0.905061 -0.028667 0.342519 - -0.892272 -0.028667 0.342519 - -0.879483 -0.028579 0.342519 - -0.866607 -0.028319 0.342519 - -0.860256 -0.028058 0.342519 - -0.857037 -0.027883 0.342519 - -0.853818 -0.02771 0.342519 - -0.850599 -0.027362 0.342519 - -0.848424 -0.027013 0.342519 - -0.84738 -0.026492 0.342519 -e -v - -0.891663 -0.026535 0.380016 - -0.891837 -0.026405 0.380016 - -0.892446 -0.026317 0.380016 - -0.893316 -0.026231 0.380016 - -0.894099 -0.026231 0.380016 - -0.894969 -0.026144 0.380016 - -0.896622 -0.026144 0.380016 - -0.899928 -0.026057 0.380016 - -0.903234 -0.026057 0.380016 - -0.90654 -0.026057 0.380016 - -0.909846 -0.026057 0.380016 - -0.913152 -0.026144 0.380016 - -0.916458 -0.026231 0.380016 - -0.919764 -0.026317 0.380016 - -0.92307 -0.026405 0.380016 - -0.92481 -0.026492 0.380016 - -0.92307 -0.026579 0.380016 - -0.919764 -0.026665 0.380016 - -0.916458 -0.026752 0.380016 - -0.913152 -0.02684 0.380016 - -0.909846 -0.02684 0.380016 - -0.90654 -0.026927 0.380016 - -0.903234 -0.026927 0.380016 - -0.899928 -0.02684 0.380016 - -0.896622 -0.02684 0.380016 - -0.894969 -0.026752 0.380016 - -0.894099 -0.026752 0.380016 - -0.893316 -0.026665 0.380016 - -0.892446 -0.026665 0.380016 - -0.891837 -0.026579 0.380016 - -0.891663 -0.026492 0.380016 -e -v - -0.670683 -0.026448 0.159036 - -0.76125 -0.026405 0.236379 - -0.725928 -0.026405 0.23751 - -0.84738 -0.026492 0.342519 - -0.891663 -0.026492 0.380016 -e -v - -0.672597 -0.024795 0.159036 - -0.762642 -0.025361 0.236379 - -0.727581 -0.025361 0.23751 - -0.848424 -0.025969 0.342519 - -0.891837 -0.026405 0.380016 -e -v - -0.677121 -0.023577 0.159036 - -0.766035 -0.02449 0.236379 - -0.731583 -0.02449 0.23751 - -0.850599 -0.025534 0.342519 - -0.892446 -0.026317 0.380016 -e -v - -0.683646 -0.02262 0.159036 - -0.770733 -0.023882 0.236379 - -0.737238 -0.023882 0.23751 - -0.853818 -0.025274 0.342519 - -0.893316 -0.026231 0.380016 -e -v - -0.690171 -0.021924 0.159036 - -0.775518 -0.023447 0.236379 - -0.74298 -0.023447 0.23751 - -0.857037 -0.025013 0.342519 - -0.894099 -0.026231 0.380016 -e -v - -0.696696 -0.021402 0.159036 - -0.780216 -0.023099 0.236379 - -0.748635 -0.023099 0.23751 - -0.860256 -0.024926 0.342519 - -0.894969 -0.026144 0.380016 -e -v - -0.709746 -0.020706 0.159036 - -0.789786 -0.022664 0.236379 - -0.760032 -0.022664 0.23751 - -0.866607 -0.024665 0.342519 - -0.896622 -0.026144 0.380016 -e -v - -0.735846 -0.019836 0.159036 - -0.808752 -0.022055 0.236379 - -0.782826 -0.022055 0.23751 - -0.879483 -0.024403 0.342519 - -0.899928 -0.026057 0.380016 -e -v - -0.761946 -0.019401 0.159036 - -0.827718 -0.021793 0.236379 - -0.805533 -0.021793 0.23751 - -0.892272 -0.02423 0.342519 - -0.903234 -0.026057 0.380016 -e -v - -0.787959 -0.019401 0.159036 - -0.846771 -0.021793 0.236379 - -0.828327 -0.021793 0.23751 - -0.905061 -0.02423 0.342519 - -0.90654 -0.026057 0.380016 -e -v - -0.814059 -0.019836 0.159036 - -0.865737 -0.022055 0.236379 - -0.851034 -0.022055 0.23751 - -0.917937 -0.024403 0.342519 - -0.909846 -0.026057 0.380016 -e -v - -0.840159 -0.020619 0.159036 - -0.88479 -0.022576 0.236379 - -0.873828 -0.022576 0.23751 - -0.930726 -0.024665 0.342519 - -0.913152 -0.026144 0.380016 -e -v - -0.866172 -0.021837 0.159036 - -0.903756 -0.023359 0.236379 - -0.896622 -0.023359 0.23751 - -0.943515 -0.025013 0.342519 - -0.916458 -0.026231 0.380016 -e -v - -0.892272 -0.023403 0.159036 - -0.922809 -0.024403 0.236379 - -0.919329 -0.024403 0.23751 - -0.956391 -0.025534 0.342519 - -0.919764 -0.026317 0.380016 -e -v - -0.918372 -0.025317 0.159036 - -0.941775 -0.025621 0.236379 - -0.942123 -0.025621 0.23751 - -0.96918 -0.026057 0.342519 - -0.92307 -0.026405 0.380016 -e -v - -0.931422 -0.026622 0.159036 - -0.951258 -0.026579 0.236379 - -0.95352 -0.026579 0.23751 - -0.975618 -0.026492 0.342519 - -0.92481 -0.026492 0.380016 -e -v - -0.918372 -0.027753 0.159036 - -0.941775 -0.027275 0.236379 - -0.942123 -0.027275 0.23751 - -0.96918 -0.02684 0.342519 - -0.92307 -0.026579 0.380016 -e -v - -0.892272 -0.029667 0.159036 - -0.922809 -0.028579 0.236379 - -0.919329 -0.028579 0.23751 - -0.956391 -0.027448 0.342519 - -0.919764 -0.026665 0.380016 -e -v - -0.866172 -0.031233 0.159036 - -0.903756 -0.029624 0.236379 - -0.896622 -0.029624 0.23751 - -0.943515 -0.027971 0.342519 - -0.916458 -0.026752 0.380016 -e -v - -0.840159 -0.032451 0.159036 - -0.88479 -0.030406 0.236379 - -0.873828 -0.030406 0.23751 - -0.930726 -0.028319 0.342519 - -0.913152 -0.02684 0.380016 -e -v - -0.814059 -0.033234 0.159036 - -0.865737 -0.030928 0.236379 - -0.851034 -0.030928 0.23751 - -0.917937 -0.028579 0.342519 - -0.909846 -0.02684 0.380016 -e -v - -0.787959 -0.033669 0.159036 - -0.846771 -0.031189 0.236379 - -0.828327 -0.031189 0.23751 - -0.905061 -0.028667 0.342519 - -0.90654 -0.026927 0.380016 -e -v - -0.761946 -0.033669 0.159036 - -0.827718 -0.031189 0.236379 - -0.805533 -0.031189 0.23751 - -0.892272 -0.028667 0.342519 - -0.903234 -0.026927 0.380016 -e -v - -0.735846 -0.033234 0.159036 - -0.808752 -0.030928 0.236379 - -0.782826 -0.030928 0.23751 - -0.879483 -0.028579 0.342519 - -0.899928 -0.02684 0.380016 -e -v - -0.709746 -0.032364 0.159036 - -0.789786 -0.03032 0.236379 - -0.760032 -0.03032 0.23751 - -0.866607 -0.028319 0.342519 - -0.896622 -0.02684 0.380016 -e -v - -0.696696 -0.031581 0.159036 - -0.780216 -0.029797 0.236379 - -0.748635 -0.029797 0.23751 - -0.860256 -0.028058 0.342519 - -0.894969 -0.026752 0.380016 -e -v - -0.690171 -0.031059 0.159036 - -0.775518 -0.029537 0.236379 - -0.74298 -0.029537 0.23751 - -0.857037 -0.027883 0.342519 - -0.894099 -0.026752 0.380016 -e -v - -0.683646 -0.03045 0.159036 - -0.770733 -0.029102 0.236379 - -0.737238 -0.029102 0.23751 - -0.853818 -0.02771 0.342519 - -0.893316 -0.026665 0.380016 -e -v - -0.677121 -0.029493 0.159036 - -0.766035 -0.028406 0.236379 - -0.731583 -0.028406 0.23751 - -0.850599 -0.027362 0.342519 - -0.892446 -0.026665 0.380016 -e -v - -0.672597 -0.028275 0.159036 - -0.762642 -0.027623 0.236379 - -0.727581 -0.027623 0.23751 - -0.848424 -0.027013 0.342519 - -0.891837 -0.026579 0.380016 -e -v - -0.670683 -0.026622 0.159036 - -0.76125 -0.026492 0.236379 - -0.725928 -0.026492 0.23751 - -0.84738 -0.026492 0.342519 - -0.891663 -0.026492 0.380016 -e -v - 0.701655 -0.031842 0.0 - 0.701655 -0.031799 -0.000435 - 0.701655 -0.031886 -0.000957 - 0.701655 -0.031973 -0.001479 - 0.701655 -0.03206 -0.001914 - 0.701655 -0.032233 -0.002436 - 0.701655 -0.032407 -0.002871 - 0.701655 -0.032582 -0.003393 - 0.701655 -0.032842 -0.003828 - 0.701655 -0.033103 -0.004263 - 0.701655 -0.033365 -0.004611 - 0.701655 -0.033625 -0.005046 - 0.701655 -0.033974 -0.005394 - 0.701655 -0.034322 -0.005742 - 0.701655 -0.034757 -0.00609 - 0.701655 -0.035105 -0.006351 - 0.701655 -0.03554 -0.006699 - 0.701655 -0.035974 -0.006873 - 0.701655 -0.036497 -0.007134 - 0.701655 -0.036931 -0.007308 - 0.701655 -0.037367 -0.007482 - 0.701655 -0.037889 -0.007569 - 0.701655 -0.03841 -0.007656 - 0.701655 -0.038846 -0.007743 - 0.701655 -0.039368 -0.00783 - 0.701655 -0.039889 -0.00783 - 0.701655 -0.040411 -0.007743 - 0.701655 -0.040847 -0.007656 - 0.701655 -0.041368 -0.007569 - 0.701655 -0.041891 -0.007482 - 0.701655 -0.042326 -0.007308 - 0.701655 -0.042847 -0.007134 - 0.701655 -0.043283 -0.006873 - 0.701655 -0.043717 -0.006699 - 0.701655 -0.044153 -0.006351 - 0.701655 -0.0445 -0.00609 - 0.701655 -0.044935 -0.005742 - 0.701655 -0.045284 -0.005394 - 0.701655 -0.045632 -0.005046 - 0.701655 -0.045892 -0.004611 - 0.701655 -0.046241 -0.004263 - 0.701655 -0.046501 -0.003828 - 0.701655 -0.046675 -0.003393 - 0.701655 -0.046937 -0.002871 - 0.701655 -0.047111 -0.002436 - 0.701655 -0.047197 -0.001914 - 0.701655 -0.047284 -0.001479 - 0.701655 -0.047371 -0.000957 - 0.701655 -0.047458 -0.000435 - 0.701655 -0.047458 0.0 -e -v - 0.688431 -0.024447 0.0 - 0.688431 -0.024403 -0.000783 - 0.688431 -0.02449 -0.001566 - 0.688431 -0.024665 -0.002436 - 0.688431 -0.024838 -0.003219 - 0.688431 -0.0251 -0.004002 - 0.688431 -0.025361 -0.004785 - 0.688431 -0.025709 -0.005568 - 0.688431 -0.026057 -0.006264 - 0.688431 -0.026492 -0.007047 - 0.688431 -0.027013 -0.007656 - 0.688431 -0.027448 -0.008352 - 0.688431 -0.028058 -0.008961 - 0.688431 -0.028667 -0.009483 - 0.688431 -0.029275 -0.010092 - 0.688431 -0.029972 -0.010527 - 0.688431 -0.030668 -0.011049 - 0.688431 -0.031363 -0.011397 - 0.688431 -0.03206 -0.011745 - 0.688431 -0.032842 -0.012093 - 0.688431 -0.033625 -0.012354 - 0.688431 -0.034495 -0.012528 - 0.688431 -0.035278 -0.012702 - 0.688431 -0.036061 -0.012789 - 0.688431 -0.036931 -0.012876 - 0.688431 -0.037714 -0.012876 - 0.688431 -0.038585 -0.012789 - 0.688431 -0.039368 -0.012702 - 0.688431 -0.040238 -0.012528 - 0.688431 -0.041021 -0.012354 - 0.688431 -0.041804 -0.012093 - 0.688431 -0.042587 -0.011745 - 0.688431 -0.043283 -0.011397 - 0.688431 -0.044066 -0.011049 - 0.688431 -0.044762 -0.010527 - 0.688431 -0.045371 -0.010092 - 0.688431 -0.045979 -0.009483 - 0.688431 -0.046588 -0.008961 - 0.688431 -0.047197 -0.008352 - 0.688431 -0.04772 -0.007656 - 0.688431 -0.048154 -0.007047 - 0.688431 -0.04859 -0.006264 - 0.688431 -0.048937 -0.005568 - 0.688431 -0.049286 -0.004785 - 0.688431 -0.049633 -0.004002 - 0.688431 -0.049808 -0.003219 - 0.688431 -0.049982 -0.002436 - 0.688431 -0.050156 -0.001566 - 0.688431 -0.050242 -0.000783 - 0.688431 -0.050242 0.0 -e -v - 0.666246 -0.011571 0.0 - 0.666246 -0.011614 -0.001392 - 0.666246 -0.011702 -0.002871 - 0.666246 -0.011963 -0.00435 - 0.666246 -0.012311 -0.005829 - 0.666246 -0.012745 -0.007221 - 0.666246 -0.013268 -0.008613 - 0.666246 -0.01379 -0.009918 - 0.666246 -0.014485 -0.011223 - 0.666246 -0.015268 -0.012528 - 0.666246 -0.016138 -0.013746 - 0.666246 -0.017009 -0.014877 - 0.666246 -0.018052 -0.016008 - 0.666246 -0.019096 -0.016965 - 0.666246 -0.020227 -0.017922 - 0.666246 -0.021358 -0.018879 - 0.666246 -0.022664 -0.019662 - 0.666246 -0.023882 -0.020358 - 0.666246 -0.025274 -0.020967 - 0.666246 -0.026579 -0.021576 - 0.666246 -0.028058 -0.022011 - 0.666246 -0.02945 -0.022359 - 0.666246 -0.030928 -0.022707 - 0.666246 -0.03232 -0.022881 - 0.666246 -0.033799 -0.022968 - 0.666246 -0.035278 -0.022968 - 0.666246 -0.036757 -0.022881 - 0.666246 -0.038236 -0.022707 - 0.666246 -0.039715 -0.022359 - 0.666246 -0.041108 -0.022011 - 0.666246 -0.0425 -0.021576 - 0.666246 -0.043892 -0.020967 - 0.666246 -0.045196 -0.020358 - 0.666246 -0.046501 -0.019662 - 0.666246 -0.04772 -0.018879 - 0.666246 -0.048937 -0.017922 - 0.666246 -0.050069 -0.016965 - 0.666246 -0.051112 -0.016008 - 0.666246 -0.05207 -0.014877 - 0.666246 -0.053027 -0.013746 - 0.666246 -0.053897 -0.012528 - 0.666246 -0.054593 -0.011223 - 0.666246 -0.055289 -0.009918 - 0.666246 -0.055898 -0.008613 - 0.666246 -0.056419 -0.007221 - 0.666246 -0.056855 -0.005829 - 0.666246 -0.057202 -0.00435 - 0.666246 -0.057377 -0.002871 - 0.666246 -0.057551 -0.001392 - 0.666246 -0.057551 0.0 -e -v - 0.622137 0.002262 0.0 - 0.622137 0.002219 -0.002088 - 0.622137 0.001958 -0.004176 - 0.622137 0.001696 -0.006177 - 0.622137 0.001174 -0.008265 - 0.622137 0.000565 -0.010266 - 0.622137 -0.000131 -0.012267 - 0.622137 -0.001001 -0.014181 - 0.622137 -0.001958 -0.016008 - 0.622137 -0.003001 -0.017748 - 0.622137 -0.004219 -0.019488 - 0.622137 -0.005524 -0.021141 - 0.622137 -0.006917 -0.022707 - 0.622137 -0.008482 -0.024186 - 0.622137 -0.010049 -0.025491 - 0.622137 -0.011702 -0.026796 - 0.622137 -0.013442 -0.027927 - 0.622137 -0.015268 -0.028971 - 0.622137 -0.017182 -0.029841 - 0.622137 -0.019096 -0.030624 - 0.622137 -0.021097 -0.03132 - 0.622137 -0.023186 -0.031842 - 0.622137 -0.025186 -0.03219 - 0.622137 -0.027275 -0.032451 - 0.622137 -0.029362 -0.032625 - 0.622137 -0.03145 -0.032625 - 0.622137 -0.033539 -0.032451 - 0.622137 -0.035627 -0.03219 - 0.622137 -0.037714 -0.031842 - 0.622137 -0.039715 -0.03132 - 0.622137 -0.041717 -0.030624 - 0.622137 -0.04363 -0.029841 - 0.622137 -0.045545 -0.028971 - 0.622137 -0.047371 -0.027927 - 0.622137 -0.049112 -0.026796 - 0.622137 -0.050765 -0.025491 - 0.622137 -0.052418 -0.024186 - 0.622137 -0.053897 -0.022707 - 0.622137 -0.055289 -0.021141 - 0.622137 -0.056594 -0.019488 - 0.622137 -0.057811 -0.017748 - 0.622137 -0.058943 -0.016008 - 0.622137 -0.0599 -0.014181 - 0.622137 -0.060683 -0.012267 - 0.622137 -0.061466 -0.010266 - 0.622137 -0.062075 -0.008265 - 0.622137 -0.062509 -0.006177 - 0.622137 -0.062858 -0.004176 - 0.622137 -0.063032 -0.002088 - 0.622137 -0.063119 0.0 -e -v - 0.562455 0.019227 0.0 - 0.562455 0.019183 -0.002697 - 0.562455 0.018923 -0.005481 - 0.562455 0.018488 -0.008265 - 0.562455 0.017879 -0.010962 - 0.562455 0.017096 -0.013572 - 0.562455 0.016138 -0.016182 - 0.562455 0.015007 -0.018705 - 0.562455 0.013702 -0.021228 - 0.562455 0.012311 -0.023577 - 0.562455 0.010744 -0.025839 - 0.562455 0.009004 -0.028014 - 0.562455 0.007091 -0.030102 - 0.562455 0.005089 -0.032016 - 0.562455 0.003001 -0.033756 - 0.562455 0.000827 -0.035496 - 0.562455 -0.001522 -0.036975 - 0.562455 -0.003958 -0.038367 - 0.562455 -0.006481 -0.039498 - 0.562455 -0.009004 -0.040542 - 0.562455 -0.011702 -0.041412 - 0.562455 -0.014311 -0.042195 - 0.562455 -0.017096 -0.042717 - 0.562455 -0.019793 -0.043065 - 0.562455 -0.022576 -0.043239 - 0.562455 -0.025361 -0.043239 - 0.562455 -0.028144 -0.043065 - 0.562455 -0.030928 -0.042717 - 0.562455 -0.033625 -0.042195 - 0.562455 -0.036323 -0.041412 - 0.562455 -0.038932 -0.040542 - 0.562455 -0.041543 -0.039498 - 0.562455 -0.043979 -0.038367 - 0.562455 -0.046415 -0.036975 - 0.562455 -0.048763 -0.035496 - 0.562455 -0.050939 -0.033756 - 0.562455 -0.053114 -0.032016 - 0.562455 -0.055115 -0.030102 - 0.562455 -0.056942 -0.028014 - 0.562455 -0.058681 -0.025839 - 0.562455 -0.060247 -0.023577 - 0.562455 -0.061726 -0.021228 - 0.562455 -0.062945 -0.018705 - 0.562455 -0.064075 -0.016182 - 0.562455 -0.065032 -0.013572 - 0.562455 -0.065816 -0.010962 - 0.562455 -0.066425 -0.008265 - 0.562455 -0.066946 -0.005481 - 0.562455 -0.067208 -0.002697 - 0.562455 -0.067295 0.0 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.031799 0.0 - 0.688431 -0.024403 0.0 - 0.666246 -0.011528 0.0 - 0.622137 0.002305 0.0 - 0.562455 0.019271 0.0 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.031799 -0.000435 - 0.688431 -0.024403 -0.000783 - 0.666246 -0.011614 -0.001392 - 0.622137 0.002219 -0.002088 - 0.562455 0.019183 -0.002697 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.031886 -0.000957 - 0.688431 -0.02449 -0.001566 - 0.666246 -0.011702 -0.002871 - 0.622137 0.001958 -0.004176 - 0.562455 0.018923 -0.005481 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.031973 -0.001479 - 0.688431 -0.024665 -0.002436 - 0.666246 -0.011963 -0.00435 - 0.622137 0.001696 -0.006177 - 0.562455 0.018488 -0.008265 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.03206 -0.001914 - 0.688431 -0.024838 -0.003219 - 0.666246 -0.012311 -0.005829 - 0.622137 0.001174 -0.008265 - 0.562455 0.017879 -0.010962 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.032233 -0.002436 - 0.688431 -0.0251 -0.004002 - 0.666246 -0.012745 -0.007221 - 0.622137 0.000565 -0.010266 - 0.562455 0.017096 -0.013572 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.032407 -0.002871 - 0.688431 -0.025361 -0.004785 - 0.666246 -0.013268 -0.008613 - 0.622137 -0.000131 -0.012267 - 0.562455 0.016138 -0.016182 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.032582 -0.003393 - 0.688431 -0.025709 -0.005568 - 0.666246 -0.01379 -0.009918 - 0.622137 -0.001001 -0.014181 - 0.562455 0.015007 -0.018705 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.032842 -0.003828 - 0.688431 -0.026057 -0.006264 - 0.666246 -0.014485 -0.011223 - 0.622137 -0.001958 -0.016008 - 0.562455 0.013702 -0.021228 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.033103 -0.004263 - 0.688431 -0.026492 -0.007047 - 0.666246 -0.015268 -0.012528 - 0.622137 -0.003001 -0.017748 - 0.562455 0.012311 -0.023577 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.033365 -0.004611 - 0.688431 -0.027013 -0.007656 - 0.666246 -0.016138 -0.013746 - 0.622137 -0.004219 -0.019488 - 0.562455 0.010744 -0.025839 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.033625 -0.005046 - 0.688431 -0.027448 -0.008352 - 0.666246 -0.017009 -0.014877 - 0.622137 -0.005524 -0.021141 - 0.562455 0.009004 -0.028014 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.033974 -0.005394 - 0.688431 -0.028058 -0.008961 - 0.666246 -0.018052 -0.016008 - 0.622137 -0.006917 -0.022707 - 0.562455 0.007091 -0.030102 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.034322 -0.005742 - 0.688431 -0.028667 -0.009483 - 0.666246 -0.019096 -0.016965 - 0.622137 -0.008482 -0.024186 - 0.562455 0.005089 -0.032016 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.034757 -0.00609 - 0.688431 -0.029275 -0.010092 - 0.666246 -0.020227 -0.017922 - 0.622137 -0.010049 -0.025491 - 0.562455 0.003001 -0.033756 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.035105 -0.006351 - 0.688431 -0.029972 -0.010527 - 0.666246 -0.021358 -0.018879 - 0.622137 -0.011702 -0.026796 - 0.562455 0.000827 -0.035496 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.03554 -0.006699 - 0.688431 -0.030668 -0.011049 - 0.666246 -0.022664 -0.019662 - 0.622137 -0.013442 -0.027927 - 0.562455 -0.001522 -0.036975 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.035974 -0.006873 - 0.688431 -0.031363 -0.011397 - 0.666246 -0.023882 -0.020358 - 0.622137 -0.015268 -0.028971 - 0.562455 -0.003958 -0.038367 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.036497 -0.007134 - 0.688431 -0.03206 -0.011745 - 0.666246 -0.025274 -0.020967 - 0.622137 -0.017182 -0.029841 - 0.562455 -0.006481 -0.039498 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.036931 -0.007308 - 0.688431 -0.032842 -0.012093 - 0.666246 -0.026579 -0.021576 - 0.622137 -0.019096 -0.030624 - 0.562455 -0.009004 -0.040542 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.037367 -0.007482 - 0.688431 -0.033625 -0.012354 - 0.666246 -0.028058 -0.022011 - 0.622137 -0.021097 -0.03132 - 0.562455 -0.011702 -0.041412 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.037889 -0.007569 - 0.688431 -0.034495 -0.012528 - 0.666246 -0.02945 -0.022359 - 0.622137 -0.023186 -0.031842 - 0.562455 -0.014311 -0.042195 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.03841 -0.007656 - 0.688431 -0.035278 -0.012702 - 0.666246 -0.030928 -0.022707 - 0.622137 -0.025186 -0.03219 - 0.562455 -0.017096 -0.042717 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.038846 -0.007743 - 0.688431 -0.036061 -0.012789 - 0.666246 -0.03232 -0.022881 - 0.622137 -0.027275 -0.032451 - 0.562455 -0.019793 -0.043065 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.039368 -0.00783 - 0.688431 -0.036931 -0.012876 - 0.666246 -0.033799 -0.022968 - 0.622137 -0.029362 -0.032625 - 0.562455 -0.022576 -0.043239 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.039889 -0.00783 - 0.688431 -0.037714 -0.012876 - 0.666246 -0.035278 -0.022968 - 0.622137 -0.03145 -0.032625 - 0.562455 -0.025361 -0.043239 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.040411 -0.007743 - 0.688431 -0.038585 -0.012789 - 0.666246 -0.036757 -0.022881 - 0.622137 -0.033539 -0.032451 - 0.562455 -0.028144 -0.043065 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.040847 -0.007656 - 0.688431 -0.039368 -0.012702 - 0.666246 -0.038236 -0.022707 - 0.622137 -0.035627 -0.03219 - 0.562455 -0.030928 -0.042717 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.041368 -0.007569 - 0.688431 -0.040238 -0.012528 - 0.666246 -0.039715 -0.022359 - 0.622137 -0.037714 -0.031842 - 0.562455 -0.033625 -0.042195 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.041891 -0.007482 - 0.688431 -0.041021 -0.012354 - 0.666246 -0.041108 -0.022011 - 0.622137 -0.039715 -0.03132 - 0.562455 -0.036323 -0.041412 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.042326 -0.007308 - 0.688431 -0.041804 -0.012093 - 0.666246 -0.0425 -0.021576 - 0.622137 -0.041717 -0.030624 - 0.562455 -0.038932 -0.040542 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.042847 -0.007134 - 0.688431 -0.042587 -0.011745 - 0.666246 -0.043892 -0.020967 - 0.622137 -0.04363 -0.029841 - 0.562455 -0.041543 -0.039498 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.043283 -0.006873 - 0.688431 -0.043283 -0.011397 - 0.666246 -0.045196 -0.020358 - 0.622137 -0.045545 -0.028971 - 0.562455 -0.043979 -0.038367 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.043717 -0.006699 - 0.688431 -0.044066 -0.011049 - 0.666246 -0.046501 -0.019662 - 0.622137 -0.047371 -0.027927 - 0.562455 -0.046415 -0.036975 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.044153 -0.006351 - 0.688431 -0.044762 -0.010527 - 0.666246 -0.04772 -0.018879 - 0.622137 -0.049112 -0.026796 - 0.562455 -0.048763 -0.035496 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.0445 -0.00609 - 0.688431 -0.045371 -0.010092 - 0.666246 -0.048937 -0.017922 - 0.622137 -0.050765 -0.025491 - 0.562455 -0.050939 -0.033756 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.044935 -0.005742 - 0.688431 -0.045979 -0.009483 - 0.666246 -0.050069 -0.016965 - 0.622137 -0.052418 -0.024186 - 0.562455 -0.053114 -0.032016 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.045284 -0.005394 - 0.688431 -0.046588 -0.008961 - 0.666246 -0.051112 -0.016008 - 0.622137 -0.053897 -0.022707 - 0.562455 -0.055115 -0.030102 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.045632 -0.005046 - 0.688431 -0.047197 -0.008352 - 0.666246 -0.05207 -0.014877 - 0.622137 -0.055289 -0.021141 - 0.562455 -0.056942 -0.028014 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.045892 -0.004611 - 0.688431 -0.04772 -0.007656 - 0.666246 -0.053027 -0.013746 - 0.622137 -0.056594 -0.019488 - 0.562455 -0.058681 -0.025839 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.046241 -0.004263 - 0.688431 -0.048154 -0.007047 - 0.666246 -0.053897 -0.012528 - 0.622137 -0.057811 -0.017748 - 0.562455 -0.060247 -0.023577 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.046501 -0.003828 - 0.688431 -0.04859 -0.006264 - 0.666246 -0.054593 -0.011223 - 0.622137 -0.058943 -0.016008 - 0.562455 -0.061726 -0.021228 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.046675 -0.003393 - 0.688431 -0.048937 -0.005568 - 0.666246 -0.055289 -0.009918 - 0.622137 -0.0599 -0.014181 - 0.562455 -0.062945 -0.018705 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.046937 -0.002871 - 0.688431 -0.049286 -0.004785 - 0.666246 -0.055898 -0.008613 - 0.622137 -0.060683 -0.012267 - 0.562455 -0.064075 -0.016182 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.047111 -0.002436 - 0.688431 -0.049633 -0.004002 - 0.666246 -0.056419 -0.007221 - 0.622137 -0.061466 -0.010266 - 0.562455 -0.065032 -0.013572 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.047197 -0.001914 - 0.688431 -0.049808 -0.003219 - 0.666246 -0.056855 -0.005829 - 0.622137 -0.062075 -0.008265 - 0.562455 -0.065816 -0.010962 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.047284 -0.001479 - 0.688431 -0.049982 -0.002436 - 0.666246 -0.057202 -0.00435 - 0.622137 -0.062509 -0.006177 - 0.562455 -0.066425 -0.008265 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.047371 -0.000957 - 0.688431 -0.050156 -0.001566 - 0.666246 -0.057377 -0.002871 - 0.622137 -0.062858 -0.004176 - 0.562455 -0.066946 -0.005481 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.047458 -0.000435 - 0.688431 -0.050242 -0.000783 - 0.666246 -0.057551 -0.001392 - 0.622137 -0.063032 -0.002088 - 0.562455 -0.067208 -0.002697 -e -v - 0.716532 -0.041064 0.0 - 0.701655 -0.047458 0.0 - 0.688431 -0.050242 0.0 - 0.666246 -0.057551 0.0 - 0.622137 -0.063119 0.0 - 0.562455 -0.067295 0.0 -e -v - 0.562455 0.01914 0.0 - 0.562455 0.01901 -0.001218 - 0.562455 0.018835 -0.002523 - 0.562455 0.018748 -0.003741 - 0.562455 0.018575 -0.005046 - 0.562455 0.018313 -0.006264 - 0.562455 0.01814 -0.007482 - 0.562455 0.017879 -0.008787 - 0.562455 0.017617 -0.010005 - 0.562455 0.017357 -0.011223 - 0.562455 0.017096 -0.012528 - 0.562455 0.016748 -0.013746 - 0.562455 0.016313 -0.014964 - 0.562455 0.015878 -0.016095 - 0.562455 0.015442 -0.017313 - 0.562455 0.015007 -0.018531 - 0.562455 0.013442 -0.021663 - 0.562455 0.011702 -0.024621 - 0.562455 0.009701 -0.027405 - 0.562455 0.007438 -0.030102 - 0.562455 0.005003 -0.032538 - 0.562455 0.002305 -0.034713 - 0.562455 -0.000565 -0.036714 - 0.562455 -0.003523 -0.038454 - 0.562455 -0.006743 -0.039933 - 0.562455 -0.009961 -0.041064 - 0.562455 -0.013354 -0.042021 - 0.562455 -0.016748 -0.042804 - 0.562455 -0.020141 -0.043413 - 0.562455 -0.02362 -0.043674 - 0.562455 -0.0271 -0.043587 - 0.562455 -0.030493 -0.043152 - 0.562455 -0.033886 -0.042369 - 0.562455 -0.037193 -0.041412 - 0.562455 -0.040498 -0.040281 - 0.562455 -0.043717 -0.038889 - 0.562455 -0.046762 -0.037236 - 0.562455 -0.04972 -0.035496 - 0.562455 -0.052591 -0.033495 - 0.562455 -0.055289 -0.031233 - 0.562455 -0.057638 -0.028797 - 0.562455 -0.059813 -0.026013 - 0.562455 -0.061726 -0.023142 - 0.562455 -0.06338 -0.020097 - 0.562455 -0.064772 -0.016878 - 0.562455 -0.065903 -0.013659 - 0.562455 -0.066859 -0.010266 - 0.562455 -0.067556 -0.006873 - 0.562455 -0.06799 -0.003393 - 0.562455 -0.068164 0.0 -e -v - 0.522696 0.029232 0.0 - 0.522696 0.029189 -0.001305 - 0.522696 0.029102 -0.002697 - 0.522696 0.028927 -0.004089 - 0.522696 0.028754 -0.005481 - 0.522696 0.028579 -0.006786 - 0.522696 0.028406 -0.008178 - 0.522696 0.028231 -0.00957 - 0.522696 0.027971 -0.010875 - 0.522696 0.02771 -0.012267 - 0.522696 0.027448 -0.013572 - 0.522696 0.0271 -0.014877 - 0.522696 0.026665 -0.016269 - 0.522696 0.026231 -0.017574 - 0.522696 0.025796 -0.018879 - 0.522696 0.025361 -0.020184 - 0.522696 0.023447 -0.023577 - 0.522696 0.021358 -0.02697 - 0.522696 0.019096 -0.030189 - 0.522696 0.016573 -0.033234 - 0.522696 0.013876 -0.036018 - 0.522696 0.010744 -0.038454 - 0.522696 0.007525 -0.040629 - 0.522696 0.004045 -0.042543 - 0.522696 0.000565 -0.044283 - 0.522696 -0.003089 -0.045762 - 0.522696 -0.00683 -0.04698 - 0.522696 -0.010658 -0.04785 - 0.522696 -0.014573 -0.048372 - 0.522696 -0.018488 -0.048546 - 0.522696 -0.022489 -0.048372 - 0.522696 -0.026405 -0.04785 - 0.522696 -0.030233 -0.047154 - 0.522696 -0.034061 -0.046197 - 0.522696 -0.037802 -0.044892 - 0.522696 -0.041368 -0.043326 - 0.522696 -0.044849 -0.041499 - 0.522696 -0.048154 -0.039324 - 0.522696 -0.051286 -0.036888 - 0.522696 -0.054244 -0.034365 - 0.522696 -0.057115 -0.031668 - 0.522696 -0.0599 -0.028884 - 0.522696 -0.062509 -0.025926 - 0.522696 -0.064598 -0.02262 - 0.522696 -0.066338 -0.019053 - 0.522696 -0.06773 -0.015399 - 0.522696 -0.068861 -0.011658 - 0.522696 -0.06973 -0.00783 - 0.522696 -0.070253 -0.003915 - 0.522696 -0.070427 0.0 -e -v - 0.48285 0.039324 0.0 - 0.48285 0.039542 -0.001305 - 0.48285 0.039715 -0.00261 - 0.48285 0.039802 -0.003915 - 0.48285 0.039802 -0.00522 - 0.48285 0.039629 -0.006612 - 0.48285 0.039455 -0.007917 - 0.48285 0.039193 -0.009222 - 0.48285 0.038846 -0.010527 - 0.48285 0.038498 -0.011832 - 0.48285 0.038149 -0.01305 - 0.48285 0.037802 -0.014355 - 0.48285 0.037367 -0.01566 - 0.48285 0.036931 -0.016878 - 0.48285 0.03641 -0.018096 - 0.48285 0.035887 -0.019314 - 0.48285 0.034061 -0.023229 - 0.48285 0.031886 -0.02697 - 0.48285 0.029362 -0.03045 - 0.48285 0.026579 -0.033756 - 0.48285 0.023534 -0.036801 - 0.48285 0.020314 -0.039585 - 0.48285 0.016748 -0.042108 - 0.48285 0.013094 -0.044457 - 0.48285 0.009352 -0.046458 - 0.48285 0.00535 -0.048111 - 0.48285 0.001174 -0.049329 - 0.48285 -0.003001 -0.050025 - 0.48285 -0.007351 -0.05046 - 0.48285 -0.011614 -0.050547 - 0.48285 -0.015965 -0.050286 - 0.48285 -0.020227 -0.049764 - 0.48285 -0.02449 -0.049068 - 0.48285 -0.028667 -0.048198 - 0.48285 -0.032842 -0.047154 - 0.48285 -0.036931 -0.045762 - 0.48285 -0.040934 -0.044109 - 0.48285 -0.044762 -0.042108 - 0.48285 -0.048416 -0.039846 - 0.48285 -0.051895 -0.037323 - 0.48285 -0.055115 -0.034452 - 0.48285 -0.05816 -0.03132 - 0.48285 -0.060856 -0.028014 - 0.48285 -0.063293 -0.024447 - 0.48285 -0.06538 -0.020706 - 0.48285 -0.067208 -0.016791 - 0.48285 -0.068512 -0.012702 - 0.48285 -0.069556 -0.008526 - 0.48285 -0.070166 -0.004263 - 0.48285 -0.070427 0.0 -e -v - 0.456402 0.048546 0.0 - 0.456402 0.048416 -0.001218 - 0.456402 0.048329 -0.002523 - 0.456402 0.048154 -0.003741 - 0.456402 0.04798 -0.004959 - 0.456402 0.04772 -0.006264 - 0.456402 0.047546 -0.007482 - 0.456402 0.047284 -0.008787 - 0.456402 0.047024 -0.010005 - 0.456402 0.046762 -0.011223 - 0.456402 0.046415 -0.012441 - 0.456402 0.046067 -0.013659 - 0.456402 0.045632 -0.014877 - 0.456402 0.045196 -0.016095 - 0.456402 0.044762 -0.017226 - 0.456402 0.044326 -0.018444 - 0.456402 0.041977 -0.022359 - 0.456402 0.039368 -0.0261 - 0.456402 0.036584 -0.029667 - 0.456402 0.033539 -0.033147 - 0.456402 0.03032 -0.036279 - 0.456402 0.026927 -0.039324 - 0.456402 0.023272 -0.042021 - 0.456402 0.019358 -0.044457 - 0.456402 0.015356 -0.046632 - 0.456402 0.01118 -0.048372 - 0.456402 0.00683 -0.049764 - 0.456402 0.002305 -0.050547 - 0.456402 -0.002219 -0.050982 - 0.456402 -0.006743 -0.051243 - 0.456402 -0.011354 -0.05133 - 0.456402 -0.015878 -0.051156 - 0.456402 -0.020402 -0.050634 - 0.456402 -0.024926 -0.049764 - 0.456402 -0.029275 -0.048633 - 0.456402 -0.033625 -0.047154 - 0.456402 -0.037802 -0.045414 - 0.456402 -0.041977 -0.043413 - 0.456402 -0.045979 -0.041238 - 0.456402 -0.049808 -0.038802 - 0.456402 -0.053461 -0.036018 - 0.456402 -0.056855 -0.032973 - 0.456402 -0.059987 -0.029667 - 0.456402 -0.062684 -0.026013 - 0.456402 -0.064859 -0.022011 - 0.456402 -0.066511 -0.017835 - 0.456402 -0.067904 -0.013485 - 0.456402 -0.068948 -0.009048 - 0.456402 -0.069643 -0.004524 - 0.456402 -0.069991 0.0 -e -v - 0.429867 0.058116 0.0 - 0.429867 0.057898 -0.001566 - 0.429867 0.057638 -0.003219 - 0.429867 0.057289 -0.004872 - 0.429867 0.056942 -0.006438 - 0.429867 0.056506 -0.008091 - 0.429867 0.056072 -0.009657 - 0.429867 0.055549 -0.011223 - 0.429867 0.055027 -0.012789 - 0.429867 0.054419 -0.014355 - 0.429867 0.053636 -0.015834 - 0.429867 0.052853 -0.017313 - 0.429867 0.051982 -0.018705 - 0.429867 0.050939 -0.02001 - 0.429867 0.049895 -0.021315 - 0.429867 0.048763 -0.022533 - 0.429867 0.046328 -0.026448 - 0.429867 0.043543 -0.030276 - 0.429867 0.040498 -0.033756 - 0.429867 0.037193 -0.037062 - 0.429867 0.033625 -0.04002 - 0.429867 0.029797 -0.042804 - 0.429867 0.025882 -0.045327 - 0.429867 0.021881 -0.047676 - 0.429867 0.017617 -0.049677 - 0.429867 0.01318 -0.051156 - 0.429867 0.008656 -0.052113 - 0.429867 0.003958 -0.052548 - 0.429867 -0.000653 -0.052809 - 0.429867 -0.00535 -0.052896 - 0.429867 -0.010049 -0.052809 - 0.429867 -0.014659 -0.052461 - 0.429867 -0.019358 -0.051852 - 0.429867 -0.023882 -0.050895 - 0.429867 -0.028406 -0.049677 - 0.429867 -0.032842 -0.048198 - 0.429867 -0.037193 -0.046458 - 0.429867 -0.041368 -0.04437 - 0.429867 -0.045371 -0.041934 - 0.429867 -0.049286 -0.039324 - 0.429867 -0.05294 -0.03654 - 0.429867 -0.056594 -0.033495 - 0.429867 -0.0599 -0.030189 - 0.429867 -0.062684 -0.026535 - 0.429867 -0.065032 -0.022446 - 0.429867 -0.066946 -0.018183 - 0.429867 -0.068512 -0.013833 - 0.429867 -0.069556 -0.009222 - 0.429867 -0.070253 -0.004611 - 0.429867 -0.070427 0.0 -e -v - 0.403332 0.069165 0.0 - 0.403332 0.069122 -0.002958 - 0.403332 0.068774 -0.005916 - 0.403332 0.068251 -0.008874 - 0.403332 0.067469 -0.011745 - 0.403332 0.066598 -0.014529 - 0.403332 0.06538 -0.017313 - 0.403332 0.063901 -0.019923 - 0.403332 0.062162 -0.022272 - 0.403332 0.06016 -0.024534 - 0.403332 0.057898 -0.026535 - 0.403332 0.055549 -0.028362 - 0.403332 0.053114 -0.030015 - 0.403332 0.050503 -0.031407 - 0.403332 0.04772 -0.032625 - 0.403332 0.044935 -0.033669 - 0.403332 0.042064 -0.036975 - 0.403332 0.038846 -0.04002 - 0.403332 0.035452 -0.042717 - 0.403332 0.031799 -0.045153 - 0.403332 0.027971 -0.047241 - 0.403332 0.023969 -0.049068 - 0.403332 0.019879 -0.050547 - 0.403332 0.015616 -0.051678 - 0.403332 0.011354 -0.052548 - 0.403332 0.007004 -0.053157 - 0.403332 0.002654 -0.053418 - 0.403332 -0.001783 -0.053505 - 0.403332 -0.006134 -0.053244 - 0.403332 -0.010483 -0.052722 - 0.403332 -0.014747 -0.052026 - 0.403332 -0.019096 -0.051069 - 0.403332 -0.023359 -0.050025 - 0.403332 -0.027536 -0.048894 - 0.403332 -0.031712 -0.047589 - 0.403332 -0.035801 -0.046023 - 0.403332 -0.039802 -0.044196 - 0.403332 -0.04363 -0.042108 - 0.403332 -0.047284 -0.039672 - 0.403332 -0.050852 -0.037149 - 0.403332 -0.054244 -0.034365 - 0.403332 -0.057377 -0.031233 - 0.403332 -0.060247 -0.028014 - 0.403332 -0.063032 -0.024621 - 0.403332 -0.06538 -0.02088 - 0.403332 -0.067295 -0.016965 - 0.403332 -0.068861 -0.012876 - 0.403332 -0.069904 -0.008613 - 0.403332 -0.070601 -0.00435 - 0.403332 -0.070862 0.0 -e -v - 0.376797 0.084825 0.0 - 0.376797 0.084607 -0.003828 - 0.376797 0.083912 -0.007656 - 0.376797 0.082781 -0.011397 - 0.376797 0.081302 -0.014964 - 0.376797 0.079388 -0.018444 - 0.376797 0.077212 -0.021663 - 0.376797 0.07469 -0.024621 - 0.376797 0.071906 -0.027318 - 0.376797 0.068861 -0.029754 - 0.376797 0.065554 -0.031929 - 0.376797 0.062075 -0.033669 - 0.376797 0.058508 -0.035061 - 0.376797 0.05468 -0.036192 - 0.376797 0.050852 -0.036888 - 0.376797 0.047024 -0.037149 - 0.376797 0.043892 -0.040194 - 0.376797 0.040498 -0.042978 - 0.376797 0.036931 -0.045588 - 0.376797 0.033278 -0.04785 - 0.376797 0.029362 -0.049851 - 0.376797 0.025361 -0.051591 - 0.376797 0.021185 -0.052896 - 0.376797 0.017009 -0.053853 - 0.376797 0.012659 -0.054462 - 0.376797 0.008309 -0.05481 - 0.376797 0.003958 -0.054897 - 0.376797 -0.000392 -0.05481 - 0.376797 -0.004742 -0.054375 - 0.376797 -0.009092 -0.053679 - 0.376797 -0.013354 -0.052809 - 0.376797 -0.017617 -0.051765 - 0.376797 -0.021793 -0.050547 - 0.376797 -0.025882 -0.048981 - 0.376797 -0.029885 -0.047328 - 0.376797 -0.033799 -0.045501 - 0.376797 -0.037714 -0.043413 - 0.376797 -0.041455 -0.041325 - 0.376797 -0.045284 -0.039063 - 0.376797 -0.048937 -0.036714 - 0.376797 -0.052504 -0.034191 - 0.376797 -0.055723 -0.03132 - 0.376797 -0.058681 -0.028014 - 0.376797 -0.061205 -0.024534 - 0.376797 -0.06338 -0.020706 - 0.376797 -0.065293 -0.016791 - 0.376797 -0.066859 -0.012789 - 0.376797 -0.068077 -0.008526 - 0.376797 -0.068948 -0.004263 - 0.376797 -0.069556 0.0 -e -v - 0.323814 0.108228 0.0 - 0.323814 0.108011 -0.00522 - 0.323814 0.107054 -0.010353 - 0.323814 0.105314 -0.015399 - 0.323814 0.102877 -0.02001 - 0.323814 0.100006 -0.024447 - 0.323814 0.096614 -0.028449 - 0.323814 0.092611 -0.031929 - 0.323814 0.088174 -0.0348 - 0.323814 0.083389 -0.037062 - 0.323814 0.078431 -0.038715 - 0.323814 0.073298 -0.039933 - 0.323814 0.068077 -0.040455 - 0.323814 0.062771 -0.040368 - 0.323814 0.057551 -0.039498 - 0.323814 0.052504 -0.038106 - 0.323814 0.049373 -0.041325 - 0.323814 0.046067 -0.04437 - 0.323814 0.0425 -0.047154 - 0.323814 0.038759 -0.04959 - 0.323814 0.034757 -0.051678 - 0.323814 0.030668 -0.053418 - 0.323814 0.026317 -0.054723 - 0.323814 0.021968 -0.05568 - 0.323814 0.017444 -0.056115 - 0.323814 0.013006 -0.056289 - 0.323814 0.008482 -0.056289 - 0.323814 0.004045 -0.055941 - 0.323814 -0.000479 -0.055419 - 0.323814 -0.004916 -0.054636 - 0.323814 -0.009266 -0.053592 - 0.323814 -0.013616 -0.052374 - 0.323814 -0.017879 -0.050982 - 0.323814 -0.022055 -0.049416 - 0.323814 -0.026231 -0.047676 - 0.323814 -0.03032 -0.045762 - 0.323814 -0.034235 -0.043761 - 0.323814 -0.038149 -0.041499 - 0.323814 -0.041977 -0.03915 - 0.323814 -0.045718 -0.036714 - 0.323814 -0.049459 -0.034104 - 0.323814 -0.05294 -0.031233 - 0.323814 -0.056159 -0.028101 - 0.323814 -0.059117 -0.024795 - 0.323814 -0.061813 -0.021228 - 0.323814 -0.064075 -0.017313 - 0.323814 -0.065903 -0.013224 - 0.323814 -0.06712 -0.008874 - 0.323814 -0.067817 -0.004437 - 0.323814 -0.068164 0.0 -e -v - 0.270744 0.112839 0.0 - 0.270744 0.11236 -0.004611 - 0.270744 0.111404 -0.009657 - 0.270744 0.109838 -0.014616 - 0.270744 0.107749 -0.019314 - 0.270744 0.104966 -0.023664 - 0.270744 0.101659 -0.027579 - 0.270744 0.097832 -0.031059 - 0.270744 0.093569 -0.034017 - 0.270744 0.088958 -0.036279 - 0.270744 0.084086 -0.037932 - 0.270744 0.079039 -0.039063 - 0.270744 0.073907 -0.039585 - 0.270744 0.068774 -0.039411 - 0.270744 0.06364 -0.038802 - 0.270744 0.058681 -0.037584 - 0.270744 0.055549 -0.041151 - 0.270744 0.052157 -0.044457 - 0.270744 0.048416 -0.047328 - 0.270744 0.0445 -0.049851 - 0.270744 0.040238 -0.051852 - 0.270744 0.035714 -0.053418 - 0.270744 0.031189 -0.054549 - 0.270744 0.026492 -0.055332 - 0.270744 0.021793 -0.055941 - 0.270744 0.017096 -0.056289 - 0.270744 0.012397 -0.056289 - 0.270744 0.007699 -0.056028 - 0.270744 0.003001 -0.055419 - 0.270744 -0.00161 -0.054723 - 0.270744 -0.00622 -0.053766 - 0.270744 -0.010832 -0.052722 - 0.270744 -0.015442 -0.051678 - 0.270744 -0.019966 -0.050373 - 0.270744 -0.02449 -0.049068 - 0.270744 -0.028927 -0.047415 - 0.270744 -0.033278 -0.045588 - 0.270744 -0.03754 -0.043587 - 0.270744 -0.04163 -0.041238 - 0.270744 -0.045545 -0.038628 - 0.270744 -0.049373 -0.035844 - 0.270744 -0.053027 -0.032886 - 0.270744 -0.056419 -0.029667 - 0.270744 -0.059464 -0.026013 - 0.270744 -0.062162 -0.022185 - 0.270744 -0.064424 -0.018009 - 0.270744 -0.066251 -0.013659 - 0.270744 -0.06773 -0.009222 - 0.270744 -0.068774 -0.004611 - 0.270744 -0.069556 0.0 -e -v - 0.229506 0.11049 0.0 - 0.229506 0.11062 -0.004872 - 0.229506 0.110186 -0.009831 - 0.229506 0.109315 -0.014703 - 0.229506 0.107749 -0.019401 - 0.229506 0.105575 -0.023838 - 0.229506 0.102703 -0.027927 - 0.229506 0.099224 -0.031494 - 0.229506 0.095395 -0.034539 - 0.229506 0.091045 -0.037062 - 0.229506 0.086521 -0.038976 - 0.229506 0.081736 -0.040368 - 0.229506 0.076865 -0.041238 - 0.229506 0.071906 -0.041586 - 0.229506 0.067033 -0.041325 - 0.229506 0.062075 -0.040629 - 0.229506 0.058768 -0.044196 - 0.229506 0.055115 -0.047502 - 0.229506 0.051112 -0.050286 - 0.229506 0.04685 -0.052722 - 0.229506 0.042326 -0.054462 - 0.229506 0.03754 -0.055854 - 0.229506 0.032756 -0.056811 - 0.229506 0.027971 -0.057594 - 0.229506 0.023012 -0.057942 - 0.229506 0.01814 -0.057855 - 0.229506 0.013268 -0.057594 - 0.229506 0.008396 -0.057072 - 0.229506 0.003523 -0.05655 - 0.229506 -0.001349 -0.056028 - 0.229506 -0.00622 -0.055506 - 0.229506 -0.011092 -0.05481 - 0.229506 -0.015878 -0.05394 - 0.229506 -0.020662 -0.052809 - 0.229506 -0.025361 -0.05133 - 0.229506 -0.029885 -0.049503 - 0.229506 -0.034408 -0.047502 - 0.229506 -0.038759 -0.045327 - 0.229506 -0.042934 -0.042804 - 0.229506 -0.047024 -0.04002 - 0.229506 -0.050939 -0.037149 - 0.229506 -0.054766 -0.034104 - 0.229506 -0.058421 -0.030798 - 0.229506 -0.061639 -0.027144 - 0.229506 -0.064511 -0.023055 - 0.229506 -0.066859 -0.018792 - 0.229506 -0.068774 -0.014268 - 0.229506 -0.070166 -0.00957 - 0.229506 -0.071209 -0.004785 - 0.229506 -0.071819 0.0 -e -v - 0.217674 0.110055 0.0 - 0.217674 0.109751 -0.004437 - 0.217674 0.109054 -0.008874 - 0.217674 0.107836 -0.013311 - 0.217674 0.106096 -0.017487 - 0.217674 0.103922 -0.021402 - 0.217674 0.101224 -0.024969 - 0.217674 0.098006 -0.028188 - 0.217674 0.094526 -0.031059 - 0.217674 0.090697 -0.033408 - 0.217674 0.086608 -0.035322 - 0.217674 0.082259 -0.036627 - 0.217674 0.077822 -0.037497 - 0.217674 0.073385 -0.037845 - 0.217674 0.068861 -0.037671 - 0.217674 0.064337 -0.037149 - 0.217674 0.061205 -0.04089 - 0.217674 0.057638 -0.044283 - 0.217674 0.053723 -0.047241 - 0.217674 0.049373 -0.049677 - 0.217674 0.044935 -0.051678 - 0.217674 0.040238 -0.053331 - 0.217674 0.035452 -0.054549 - 0.217674 0.030581 -0.055332 - 0.217674 0.025709 -0.055767 - 0.217674 0.02075 -0.056115 - 0.217674 0.015878 -0.056202 - 0.217674 0.010918 -0.056115 - 0.217674 0.006047 -0.055854 - 0.217674 0.001088 -0.055332 - 0.217674 -0.003785 -0.054636 - 0.217674 -0.008656 -0.053766 - 0.217674 -0.013442 -0.052635 - 0.217674 -0.018227 -0.051417 - 0.217674 -0.022924 -0.049938 - 0.217674 -0.027536 -0.048285 - 0.217674 -0.032146 -0.046458 - 0.217674 -0.036584 -0.04437 - 0.217674 -0.040934 -0.042021 - 0.217674 -0.045109 -0.039411 - 0.217674 -0.049286 -0.036714 - 0.217674 -0.053287 -0.033843 - 0.217674 -0.057028 -0.030711 - 0.217674 -0.060422 -0.027144 - 0.217674 -0.06338 -0.023142 - 0.217674 -0.065816 -0.018879 - 0.217674 -0.06773 -0.014355 - 0.217674 -0.069296 -0.009657 - 0.217674 -0.070253 -0.004872 - 0.217674 -0.070862 0.0 -e -v - 0.164691 0.102225 0.0 - 0.164691 0.101921 -0.00348 - 0.164691 0.101224 -0.00696 - 0.164691 0.100267 -0.010353 - 0.164691 0.09905 -0.013659 - 0.164691 0.097484 -0.016791 - 0.164691 0.095569 -0.019836 - 0.164691 0.093482 -0.022707 - 0.164691 0.091045 -0.025317 - 0.164691 0.088436 -0.027666 - 0.164691 0.085652 -0.029754 - 0.164691 0.082607 -0.031581 - 0.164691 0.079388 -0.03306 - 0.164691 0.075994 -0.034278 - 0.164691 0.072601 -0.035148 - 0.164691 0.069122 -0.03567 - 0.164691 0.066425 -0.039759 - 0.164691 0.062684 -0.043239 - 0.164691 0.058421 -0.04611 - 0.164691 0.05381 -0.048285 - 0.164691 0.049024 -0.050199 - 0.164691 0.044066 -0.051504 - 0.164691 0.039019 -0.052374 - 0.164691 0.033886 -0.052983 - 0.164691 0.028841 -0.053505 - 0.164691 0.023707 -0.05394 - 0.164691 0.018575 -0.054375 - 0.164691 0.013442 -0.054549 - 0.164691 0.008309 -0.054549 - 0.164691 0.003263 -0.054375 - 0.164691 -0.001871 -0.05394 - 0.164691 -0.007004 -0.053418 - 0.164691 -0.012049 -0.052635 - 0.164691 -0.017096 -0.051591 - 0.164691 -0.022055 -0.050373 - 0.164691 -0.027013 -0.048981 - 0.164691 -0.031886 -0.047502 - 0.164691 -0.036757 -0.045849 - 0.164691 -0.041543 -0.043935 - 0.164691 -0.046067 -0.041673 - 0.164691 -0.050416 -0.038889 - 0.164691 -0.054419 -0.03567 - 0.164691 -0.05816 -0.032103 - 0.164691 -0.061552 -0.028275 - 0.164691 -0.064511 -0.024099 - 0.164691 -0.067033 -0.019662 - 0.164691 -0.069035 -0.014964 - 0.164691 -0.070601 -0.010092 - 0.164691 -0.071644 -0.005046 - 0.164691 -0.072254 0.0 -e -v - 0.111621 0.092568 0.0 - 0.111621 0.092698 -0.002436 - 0.111621 0.092611 -0.004959 - 0.111621 0.09235 -0.007482 - 0.111621 0.091916 -0.009918 - 0.111621 0.091307 -0.012354 - 0.111621 0.090524 -0.01479 - 0.111621 0.089653 -0.017139 - 0.111621 0.08861 -0.019401 - 0.111621 0.087305 -0.021576 - 0.111621 0.085913 -0.023664 - 0.111621 0.08426 -0.025578 - 0.111621 0.08252 -0.027405 - 0.111621 0.080605 -0.029058 - 0.111621 0.078604 -0.030537 - 0.111621 0.076517 -0.031929 - 0.111621 0.072862 -0.035931 - 0.111621 0.068948 -0.039672 - 0.111621 0.064685 -0.042978 - 0.111621 0.060073 -0.045849 - 0.111621 0.055202 -0.048285 - 0.111621 0.050156 -0.050199 - 0.111621 0.045022 -0.051765 - 0.111621 0.039715 -0.05307 - 0.111621 0.034408 -0.054027 - 0.111621 0.029014 -0.054549 - 0.111621 0.02362 -0.05481 - 0.111621 0.018227 -0.05481 - 0.111621 0.012745 -0.05481 - 0.111621 0.007351 -0.054636 - 0.111621 0.001958 -0.054462 - 0.111621 -0.003436 -0.054027 - 0.111621 -0.00883 -0.053418 - 0.111621 -0.014225 -0.052635 - 0.111621 -0.019531 -0.051591 - 0.111621 -0.024751 -0.05046 - 0.111621 -0.030058 -0.049155 - 0.111621 -0.035278 -0.047676 - 0.111621 -0.040325 -0.045762 - 0.111621 -0.045196 -0.043413 - 0.111621 -0.049808 -0.040542 - 0.111621 -0.054157 -0.037323 - 0.111621 -0.058247 -0.033756 - 0.111621 -0.061988 -0.029841 - 0.111621 -0.065206 -0.025491 - 0.111621 -0.067904 -0.020793 - 0.111621 -0.070078 -0.015834 - 0.111621 -0.071644 -0.010614 - 0.111621 -0.072688 -0.005307 - 0.111621 -0.073211 0.0 -e -v - 0.058638 0.081606 0.0 - 0.058638 0.081562 -0.001479 - 0.058638 0.081562 -0.003045 - 0.058638 0.081389 -0.004611 - 0.058638 0.081215 -0.006177 - 0.058638 0.080954 -0.007743 - 0.058638 0.080692 -0.009222 - 0.058638 0.080344 -0.010788 - 0.058638 0.079997 -0.012267 - 0.058638 0.079475 -0.013746 - 0.058638 0.078952 -0.015225 - 0.058638 0.078344 -0.016617 - 0.058638 0.077647 -0.018009 - 0.058638 0.076865 -0.019401 - 0.058638 0.076081 -0.020706 - 0.058638 0.075212 -0.022011 - 0.058638 0.07208 -0.026883 - 0.058638 0.068512 -0.030972 - 0.058638 0.064511 -0.034626 - 0.058638 0.06016 -0.037758 - 0.058638 0.055463 -0.040542 - 0.058638 0.050678 -0.042978 - 0.058638 0.045632 -0.044892 - 0.058638 0.040411 -0.046458 - 0.058638 0.035191 -0.047676 - 0.058638 0.029885 -0.04872 - 0.058638 0.02449 -0.049503 - 0.058638 0.019183 -0.050025 - 0.058638 0.013702 -0.050199 - 0.058638 0.008309 -0.050286 - 0.058638 0.002914 -0.050112 - 0.058638 -0.002479 -0.049938 - 0.058638 -0.007873 -0.049677 - 0.058638 -0.013268 -0.049155 - 0.058638 -0.018662 -0.048546 - 0.058638 -0.023969 -0.047676 - 0.058638 -0.029275 -0.046545 - 0.058638 -0.034582 -0.045414 - 0.058638 -0.039802 -0.044022 - 0.058638 -0.044849 -0.042195 - 0.058638 -0.04972 -0.039759 - 0.058638 -0.054244 -0.036888 - 0.058638 -0.058594 -0.033582 - 0.058638 -0.062422 -0.029841 - 0.058638 -0.065816 -0.025665 - 0.058638 -0.068512 -0.020967 - 0.058638 -0.070514 -0.015921 - 0.058638 -0.071906 -0.010701 - 0.058638 -0.072601 -0.005394 - 0.058638 -0.072775 0.0 -e -v - 0.562455 0.01914 0.0 - 0.522696 0.029275 0.0 - 0.48285 0.039368 0.0 - 0.456402 0.04859 0.0 - 0.429867 0.05816 0.0 - 0.403332 0.069209 0.0 - 0.376797 0.084868 0.0 - 0.323814 0.108272 0.0 - 0.270744 0.112883 0.0 - 0.229506 0.110533 0.0 - 0.217674 0.110099 0.0 - 0.164691 0.102269 0.0 - 0.111621 0.092611 0.0 - 0.058638 0.081649 0.0 -e -v - 0.562455 0.018966 -0.001218 - 0.522696 0.029189 -0.001305 - 0.48285 0.039542 -0.001305 - 0.456402 0.048416 -0.001218 - 0.429867 0.057898 -0.001566 - 0.403332 0.069122 -0.002958 - 0.376797 0.084607 -0.003828 - 0.323814 0.108011 -0.00522 - 0.270744 0.11236 -0.004611 - 0.229506 0.11062 -0.004872 - 0.217674 0.109751 -0.004437 - 0.164691 0.101921 -0.00348 - 0.111621 0.092698 -0.002436 - 0.058638 0.081562 -0.001479 -e -v - 0.562455 0.018792 -0.002523 - 0.522696 0.029102 -0.002697 - 0.48285 0.039715 -0.00261 - 0.456402 0.048329 -0.002523 - 0.429867 0.057638 -0.003219 - 0.403332 0.068774 -0.005916 - 0.376797 0.083912 -0.007656 - 0.323814 0.107054 -0.010353 - 0.270744 0.111404 -0.009657 - 0.229506 0.110186 -0.009831 - 0.217674 0.109054 -0.008874 - 0.164691 0.101224 -0.00696 - 0.111621 0.092611 -0.004959 - 0.058638 0.081562 -0.003045 -e -v - 0.562455 0.018705 -0.003741 - 0.522696 0.028927 -0.004089 - 0.48285 0.039802 -0.003915 - 0.456402 0.048154 -0.003741 - 0.429867 0.057289 -0.004872 - 0.403332 0.068251 -0.008874 - 0.376797 0.082781 -0.011397 - 0.323814 0.105314 -0.015399 - 0.270744 0.109838 -0.014616 - 0.229506 0.109315 -0.014703 - 0.217674 0.107836 -0.013311 - 0.164691 0.100267 -0.010353 - 0.111621 0.09235 -0.007482 - 0.058638 0.081389 -0.004611 -e -v - 0.562455 0.018531 -0.005046 - 0.522696 0.028754 -0.005481 - 0.48285 0.039802 -0.00522 - 0.456402 0.04798 -0.004959 - 0.429867 0.056942 -0.006438 - 0.403332 0.067469 -0.011745 - 0.376797 0.081302 -0.014964 - 0.323814 0.102877 -0.02001 - 0.270744 0.107749 -0.019314 - 0.229506 0.107749 -0.019401 - 0.217674 0.106096 -0.017487 - 0.164691 0.09905 -0.013659 - 0.111621 0.091916 -0.009918 - 0.058638 0.081215 -0.006177 -e -v - 0.562455 0.01827 -0.006264 - 0.522696 0.028579 -0.006786 - 0.48285 0.039629 -0.006612 - 0.456402 0.04772 -0.006264 - 0.429867 0.056506 -0.008091 - 0.403332 0.066598 -0.014529 - 0.376797 0.079388 -0.018444 - 0.323814 0.100006 -0.024447 - 0.270744 0.104966 -0.023664 - 0.229506 0.105575 -0.023838 - 0.217674 0.103922 -0.021402 - 0.164691 0.097484 -0.016791 - 0.111621 0.091307 -0.012354 - 0.058638 0.080954 -0.007743 -e -v - 0.562455 0.018096 -0.007482 - 0.522696 0.028406 -0.008178 - 0.48285 0.039455 -0.007917 - 0.456402 0.047546 -0.007482 - 0.429867 0.056072 -0.009657 - 0.403332 0.06538 -0.017313 - 0.376797 0.077212 -0.021663 - 0.323814 0.096614 -0.028449 - 0.270744 0.101659 -0.027579 - 0.229506 0.102703 -0.027927 - 0.217674 0.101224 -0.024969 - 0.164691 0.095569 -0.019836 - 0.111621 0.090524 -0.01479 - 0.058638 0.080692 -0.009222 -e -v - 0.562455 0.017835 -0.008787 - 0.522696 0.028231 -0.00957 - 0.48285 0.039193 -0.009222 - 0.456402 0.047284 -0.008787 - 0.429867 0.055549 -0.011223 - 0.403332 0.063901 -0.019923 - 0.376797 0.07469 -0.024621 - 0.323814 0.092611 -0.031929 - 0.270744 0.097832 -0.031059 - 0.229506 0.099224 -0.031494 - 0.217674 0.098006 -0.028188 - 0.164691 0.093482 -0.022707 - 0.111621 0.089653 -0.017139 - 0.058638 0.080344 -0.010788 -e -v - 0.562455 0.017574 -0.010005 - 0.522696 0.027971 -0.010875 - 0.48285 0.038846 -0.010527 - 0.456402 0.047024 -0.010005 - 0.429867 0.055027 -0.012789 - 0.403332 0.062162 -0.022272 - 0.376797 0.071906 -0.027318 - 0.323814 0.088174 -0.0348 - 0.270744 0.093569 -0.034017 - 0.229506 0.095395 -0.034539 - 0.217674 0.094526 -0.031059 - 0.164691 0.091045 -0.025317 - 0.111621 0.08861 -0.019401 - 0.058638 0.079997 -0.012267 -e -v - 0.562455 0.017313 -0.011223 - 0.522696 0.02771 -0.012267 - 0.48285 0.038498 -0.011832 - 0.456402 0.046762 -0.011223 - 0.429867 0.054419 -0.014355 - 0.403332 0.06016 -0.024534 - 0.376797 0.068861 -0.029754 - 0.323814 0.083389 -0.037062 - 0.270744 0.088958 -0.036279 - 0.229506 0.091045 -0.037062 - 0.217674 0.090697 -0.033408 - 0.164691 0.088436 -0.027666 - 0.111621 0.087305 -0.021576 - 0.058638 0.079475 -0.013746 -e -v - 0.562455 0.017052 -0.012528 - 0.522696 0.027448 -0.013572 - 0.48285 0.038149 -0.01305 - 0.456402 0.046415 -0.012441 - 0.429867 0.053636 -0.015834 - 0.403332 0.057898 -0.026535 - 0.376797 0.065554 -0.031929 - 0.323814 0.078431 -0.038715 - 0.270744 0.084086 -0.037932 - 0.229506 0.086521 -0.038976 - 0.217674 0.086608 -0.035322 - 0.164691 0.085652 -0.029754 - 0.111621 0.085913 -0.023664 - 0.058638 0.078952 -0.015225 -e -v - 0.562455 0.016704 -0.013746 - 0.522696 0.0271 -0.014877 - 0.48285 0.037802 -0.014355 - 0.456402 0.046067 -0.013659 - 0.429867 0.052853 -0.017313 - 0.403332 0.055549 -0.028362 - 0.376797 0.062075 -0.033669 - 0.323814 0.073298 -0.039933 - 0.270744 0.079039 -0.039063 - 0.229506 0.081736 -0.040368 - 0.217674 0.082259 -0.036627 - 0.164691 0.082607 -0.031581 - 0.111621 0.08426 -0.025578 - 0.058638 0.078344 -0.016617 -e -v - 0.562455 0.016269 -0.014964 - 0.522696 0.026665 -0.016269 - 0.48285 0.037367 -0.01566 - 0.456402 0.045632 -0.014877 - 0.429867 0.051982 -0.018705 - 0.403332 0.053114 -0.030015 - 0.376797 0.058508 -0.035061 - 0.323814 0.068077 -0.040455 - 0.270744 0.073907 -0.039585 - 0.229506 0.076865 -0.041238 - 0.217674 0.077822 -0.037497 - 0.164691 0.079388 -0.03306 - 0.111621 0.08252 -0.027405 - 0.058638 0.077647 -0.018009 -e -v - 0.562455 0.015834 -0.016095 - 0.522696 0.026231 -0.017574 - 0.48285 0.036931 -0.016878 - 0.456402 0.045196 -0.016095 - 0.429867 0.050939 -0.02001 - 0.403332 0.050503 -0.031407 - 0.376797 0.05468 -0.036192 - 0.323814 0.062771 -0.040368 - 0.270744 0.068774 -0.039411 - 0.229506 0.071906 -0.041586 - 0.217674 0.073385 -0.037845 - 0.164691 0.075994 -0.034278 - 0.111621 0.080605 -0.029058 - 0.058638 0.076865 -0.019401 -e -v - 0.562455 0.015399 -0.017313 - 0.522696 0.025796 -0.018879 - 0.48285 0.03641 -0.018096 - 0.456402 0.044762 -0.017226 - 0.429867 0.049895 -0.021315 - 0.403332 0.04772 -0.032625 - 0.376797 0.050852 -0.036888 - 0.323814 0.057551 -0.039498 - 0.270744 0.06364 -0.038802 - 0.229506 0.067033 -0.041325 - 0.217674 0.068861 -0.037671 - 0.164691 0.072601 -0.035148 - 0.111621 0.078604 -0.030537 - 0.058638 0.076081 -0.020706 -e -v - 0.562455 0.014964 -0.018531 - 0.522696 0.025361 -0.020184 - 0.48285 0.035887 -0.019314 - 0.456402 0.044326 -0.018444 - 0.429867 0.048763 -0.022533 - 0.403332 0.044935 -0.033669 - 0.376797 0.047024 -0.037149 - 0.323814 0.052504 -0.038106 - 0.270744 0.058681 -0.037584 - 0.229506 0.062075 -0.040629 - 0.217674 0.064337 -0.037149 - 0.164691 0.069122 -0.03567 - 0.111621 0.076517 -0.031929 - 0.058638 0.075212 -0.022011 -e -v - 0.562455 0.013398 -0.021663 - 0.522696 0.023447 -0.023577 - 0.48285 0.034061 -0.023229 - 0.456402 0.041977 -0.022359 - 0.429867 0.046328 -0.026448 - 0.403332 0.042064 -0.036975 - 0.376797 0.043892 -0.040194 - 0.323814 0.049373 -0.041325 - 0.270744 0.055549 -0.041151 - 0.229506 0.058768 -0.044196 - 0.217674 0.061205 -0.04089 - 0.164691 0.066425 -0.039759 - 0.111621 0.072862 -0.035931 - 0.058638 0.07208 -0.026883 -e -v - 0.562455 0.011658 -0.024621 - 0.522696 0.021358 -0.02697 - 0.48285 0.031886 -0.02697 - 0.456402 0.039368 -0.0261 - 0.429867 0.043543 -0.030276 - 0.403332 0.038846 -0.04002 - 0.376797 0.040498 -0.042978 - 0.323814 0.046067 -0.04437 - 0.270744 0.052157 -0.044457 - 0.229506 0.055115 -0.047502 - 0.217674 0.057638 -0.044283 - 0.164691 0.062684 -0.043239 - 0.111621 0.068948 -0.039672 - 0.058638 0.068512 -0.030972 -e -v - 0.562455 0.009657 -0.027405 - 0.522696 0.019096 -0.030189 - 0.48285 0.029362 -0.03045 - 0.456402 0.036584 -0.029667 - 0.429867 0.040498 -0.033756 - 0.403332 0.035452 -0.042717 - 0.376797 0.036931 -0.045588 - 0.323814 0.0425 -0.047154 - 0.270744 0.048416 -0.047328 - 0.229506 0.051112 -0.050286 - 0.217674 0.053723 -0.047241 - 0.164691 0.058421 -0.04611 - 0.111621 0.064685 -0.042978 - 0.058638 0.064511 -0.034626 -e -v - 0.562455 0.007395 -0.030102 - 0.522696 0.016573 -0.033234 - 0.48285 0.026579 -0.033756 - 0.456402 0.033539 -0.033147 - 0.429867 0.037193 -0.037062 - 0.403332 0.031799 -0.045153 - 0.376797 0.033278 -0.04785 - 0.323814 0.038759 -0.04959 - 0.270744 0.0445 -0.049851 - 0.229506 0.04685 -0.052722 - 0.217674 0.049373 -0.049677 - 0.164691 0.05381 -0.048285 - 0.111621 0.060073 -0.045849 - 0.058638 0.06016 -0.037758 -e -v - 0.562455 0.004959 -0.032538 - 0.522696 0.013876 -0.036018 - 0.48285 0.023534 -0.036801 - 0.456402 0.03032 -0.036279 - 0.429867 0.033625 -0.04002 - 0.403332 0.027971 -0.047241 - 0.376797 0.029362 -0.049851 - 0.323814 0.034757 -0.051678 - 0.270744 0.040238 -0.051852 - 0.229506 0.042326 -0.054462 - 0.217674 0.044935 -0.051678 - 0.164691 0.049024 -0.050199 - 0.111621 0.055202 -0.048285 - 0.058638 0.055463 -0.040542 -e -v - 0.562455 0.002262 -0.034713 - 0.522696 0.010744 -0.038454 - 0.48285 0.020314 -0.039585 - 0.456402 0.026927 -0.039324 - 0.429867 0.029797 -0.042804 - 0.403332 0.023969 -0.049068 - 0.376797 0.025361 -0.051591 - 0.323814 0.030668 -0.053418 - 0.270744 0.035714 -0.053418 - 0.229506 0.03754 -0.055854 - 0.217674 0.040238 -0.053331 - 0.164691 0.044066 -0.051504 - 0.111621 0.050156 -0.050199 - 0.058638 0.050678 -0.042978 -e -v - 0.562455 -0.000609 -0.036714 - 0.522696 0.007525 -0.040629 - 0.48285 0.016748 -0.042108 - 0.456402 0.023272 -0.042021 - 0.429867 0.025882 -0.045327 - 0.403332 0.019879 -0.050547 - 0.376797 0.021185 -0.052896 - 0.323814 0.026317 -0.054723 - 0.270744 0.031189 -0.054549 - 0.229506 0.032756 -0.056811 - 0.217674 0.035452 -0.054549 - 0.164691 0.039019 -0.052374 - 0.111621 0.045022 -0.051765 - 0.058638 0.045632 -0.044892 -e -v - 0.562455 -0.003567 -0.038454 - 0.522696 0.004045 -0.042543 - 0.48285 0.013094 -0.044457 - 0.456402 0.019358 -0.044457 - 0.429867 0.021881 -0.047676 - 0.403332 0.015616 -0.051678 - 0.376797 0.017009 -0.053853 - 0.323814 0.021968 -0.05568 - 0.270744 0.026492 -0.055332 - 0.229506 0.027971 -0.057594 - 0.217674 0.030581 -0.055332 - 0.164691 0.033886 -0.052983 - 0.111621 0.039715 -0.05307 - 0.058638 0.040411 -0.046458 -e -v - 0.562455 -0.006786 -0.039933 - 0.522696 0.000565 -0.044283 - 0.48285 0.009352 -0.046458 - 0.456402 0.015356 -0.046632 - 0.429867 0.017617 -0.049677 - 0.403332 0.011354 -0.052548 - 0.376797 0.012659 -0.054462 - 0.323814 0.017444 -0.056115 - 0.270744 0.021793 -0.055941 - 0.229506 0.023012 -0.057942 - 0.217674 0.025709 -0.055767 - 0.164691 0.028841 -0.053505 - 0.111621 0.034408 -0.054027 - 0.058638 0.035191 -0.047676 -e -v - 0.562455 -0.010005 -0.041064 - 0.522696 -0.003089 -0.045762 - 0.48285 0.00535 -0.048111 - 0.456402 0.01118 -0.048372 - 0.429867 0.01318 -0.051156 - 0.403332 0.007004 -0.053157 - 0.376797 0.008309 -0.05481 - 0.323814 0.013006 -0.056289 - 0.270744 0.017096 -0.056289 - 0.229506 0.01814 -0.057855 - 0.217674 0.02075 -0.056115 - 0.164691 0.023707 -0.05394 - 0.111621 0.029014 -0.054549 - 0.058638 0.029885 -0.04872 -e -v - 0.562455 -0.013398 -0.042021 - 0.522696 -0.00683 -0.04698 - 0.48285 0.001174 -0.049329 - 0.456402 0.00683 -0.049764 - 0.429867 0.008656 -0.052113 - 0.403332 0.002654 -0.053418 - 0.376797 0.003958 -0.054897 - 0.323814 0.008482 -0.056289 - 0.270744 0.012397 -0.056289 - 0.229506 0.013268 -0.057594 - 0.217674 0.015878 -0.056202 - 0.164691 0.018575 -0.054375 - 0.111621 0.02362 -0.05481 - 0.058638 0.02449 -0.049503 -e -v - 0.562455 -0.016791 -0.042804 - 0.522696 -0.010658 -0.04785 - 0.48285 -0.003001 -0.050025 - 0.456402 0.002305 -0.050547 - 0.429867 0.003958 -0.052548 - 0.403332 -0.001783 -0.053505 - 0.376797 -0.000392 -0.05481 - 0.323814 0.004045 -0.055941 - 0.270744 0.007699 -0.056028 - 0.229506 0.008396 -0.057072 - 0.217674 0.010918 -0.056115 - 0.164691 0.013442 -0.054549 - 0.111621 0.018227 -0.05481 - 0.058638 0.019183 -0.050025 -e -v - 0.562455 -0.020184 -0.043413 - 0.522696 -0.014573 -0.048372 - 0.48285 -0.007351 -0.05046 - 0.456402 -0.002219 -0.050982 - 0.429867 -0.000653 -0.052809 - 0.403332 -0.006134 -0.053244 - 0.376797 -0.004742 -0.054375 - 0.323814 -0.000479 -0.055419 - 0.270744 0.003001 -0.055419 - 0.229506 0.003523 -0.05655 - 0.217674 0.006047 -0.055854 - 0.164691 0.008309 -0.054549 - 0.111621 0.012745 -0.05481 - 0.058638 0.013702 -0.050199 -e -v - 0.562455 -0.023664 -0.043674 - 0.522696 -0.018488 -0.048546 - 0.48285 -0.011614 -0.050547 - 0.456402 -0.006743 -0.051243 - 0.429867 -0.00535 -0.052896 - 0.403332 -0.010483 -0.052722 - 0.376797 -0.009092 -0.053679 - 0.323814 -0.004916 -0.054636 - 0.270744 -0.00161 -0.054723 - 0.229506 -0.001349 -0.056028 - 0.217674 0.001088 -0.055332 - 0.164691 0.003263 -0.054375 - 0.111621 0.007351 -0.054636 - 0.058638 0.008309 -0.050286 -e -v - 0.562455 -0.027144 -0.043587 - 0.522696 -0.022489 -0.048372 - 0.48285 -0.015965 -0.050286 - 0.456402 -0.011354 -0.05133 - 0.429867 -0.010049 -0.052809 - 0.403332 -0.014747 -0.052026 - 0.376797 -0.013354 -0.052809 - 0.323814 -0.009266 -0.053592 - 0.270744 -0.00622 -0.053766 - 0.229506 -0.00622 -0.055506 - 0.217674 -0.003785 -0.054636 - 0.164691 -0.001871 -0.05394 - 0.111621 0.001958 -0.054462 - 0.058638 0.002914 -0.050112 -e -v - 0.562455 -0.030537 -0.043152 - 0.522696 -0.026405 -0.04785 - 0.48285 -0.020227 -0.049764 - 0.456402 -0.015878 -0.051156 - 0.429867 -0.014659 -0.052461 - 0.403332 -0.019096 -0.051069 - 0.376797 -0.017617 -0.051765 - 0.323814 -0.013616 -0.052374 - 0.270744 -0.010832 -0.052722 - 0.229506 -0.011092 -0.05481 - 0.217674 -0.008656 -0.053766 - 0.164691 -0.007004 -0.053418 - 0.111621 -0.003436 -0.054027 - 0.058638 -0.002479 -0.049938 -e -v - 0.562455 -0.03393 -0.042369 - 0.522696 -0.030233 -0.047154 - 0.48285 -0.02449 -0.049068 - 0.456402 -0.020402 -0.050634 - 0.429867 -0.019358 -0.051852 - 0.403332 -0.023359 -0.050025 - 0.376797 -0.021793 -0.050547 - 0.323814 -0.017879 -0.050982 - 0.270744 -0.015442 -0.051678 - 0.229506 -0.015878 -0.05394 - 0.217674 -0.013442 -0.052635 - 0.164691 -0.012049 -0.052635 - 0.111621 -0.00883 -0.053418 - 0.058638 -0.007873 -0.049677 -e -v - 0.562455 -0.037236 -0.041412 - 0.522696 -0.034061 -0.046197 - 0.48285 -0.028667 -0.048198 - 0.456402 -0.024926 -0.049764 - 0.429867 -0.023882 -0.050895 - 0.403332 -0.027536 -0.048894 - 0.376797 -0.025882 -0.048981 - 0.323814 -0.022055 -0.049416 - 0.270744 -0.019966 -0.050373 - 0.229506 -0.020662 -0.052809 - 0.217674 -0.018227 -0.051417 - 0.164691 -0.017096 -0.051591 - 0.111621 -0.014225 -0.052635 - 0.058638 -0.013268 -0.049155 -e -v - 0.562455 -0.040542 -0.040281 - 0.522696 -0.037802 -0.044892 - 0.48285 -0.032842 -0.047154 - 0.456402 -0.029275 -0.048633 - 0.429867 -0.028406 -0.049677 - 0.403332 -0.031712 -0.047589 - 0.376797 -0.029885 -0.047328 - 0.323814 -0.026231 -0.047676 - 0.270744 -0.02449 -0.049068 - 0.229506 -0.025361 -0.05133 - 0.217674 -0.022924 -0.049938 - 0.164691 -0.022055 -0.050373 - 0.111621 -0.019531 -0.051591 - 0.058638 -0.018662 -0.048546 -e -v - 0.562455 -0.043761 -0.038889 - 0.522696 -0.041368 -0.043326 - 0.48285 -0.036931 -0.045762 - 0.456402 -0.033625 -0.047154 - 0.429867 -0.032842 -0.048198 - 0.403332 -0.035801 -0.046023 - 0.376797 -0.033799 -0.045501 - 0.323814 -0.03032 -0.045762 - 0.270744 -0.028927 -0.047415 - 0.229506 -0.029885 -0.049503 - 0.217674 -0.027536 -0.048285 - 0.164691 -0.027013 -0.048981 - 0.111621 -0.024751 -0.05046 - 0.058638 -0.023969 -0.047676 -e -v - 0.562455 -0.046806 -0.037236 - 0.522696 -0.044849 -0.041499 - 0.48285 -0.040934 -0.044109 - 0.456402 -0.037802 -0.045414 - 0.429867 -0.037193 -0.046458 - 0.403332 -0.039802 -0.044196 - 0.376797 -0.037714 -0.043413 - 0.323814 -0.034235 -0.043761 - 0.270744 -0.033278 -0.045588 - 0.229506 -0.034408 -0.047502 - 0.217674 -0.032146 -0.046458 - 0.164691 -0.031886 -0.047502 - 0.111621 -0.030058 -0.049155 - 0.058638 -0.029275 -0.046545 -e -v - 0.562455 -0.049764 -0.035496 - 0.522696 -0.048154 -0.039324 - 0.48285 -0.044762 -0.042108 - 0.456402 -0.041977 -0.043413 - 0.429867 -0.041368 -0.04437 - 0.403332 -0.04363 -0.042108 - 0.376797 -0.041455 -0.041325 - 0.323814 -0.038149 -0.041499 - 0.270744 -0.03754 -0.043587 - 0.229506 -0.038759 -0.045327 - 0.217674 -0.036584 -0.04437 - 0.164691 -0.036757 -0.045849 - 0.111621 -0.035278 -0.047676 - 0.058638 -0.034582 -0.045414 -e -v - 0.562455 -0.052635 -0.033495 - 0.522696 -0.051286 -0.036888 - 0.48285 -0.048416 -0.039846 - 0.456402 -0.045979 -0.041238 - 0.429867 -0.045371 -0.041934 - 0.403332 -0.047284 -0.039672 - 0.376797 -0.045284 -0.039063 - 0.323814 -0.041977 -0.03915 - 0.270744 -0.04163 -0.041238 - 0.229506 -0.042934 -0.042804 - 0.217674 -0.040934 -0.042021 - 0.164691 -0.041543 -0.043935 - 0.111621 -0.040325 -0.045762 - 0.058638 -0.039802 -0.044022 -e -v - 0.562455 -0.055332 -0.031233 - 0.522696 -0.054244 -0.034365 - 0.48285 -0.051895 -0.037323 - 0.456402 -0.049808 -0.038802 - 0.429867 -0.049286 -0.039324 - 0.403332 -0.050852 -0.037149 - 0.376797 -0.048937 -0.036714 - 0.323814 -0.045718 -0.036714 - 0.270744 -0.045545 -0.038628 - 0.229506 -0.047024 -0.04002 - 0.217674 -0.045109 -0.039411 - 0.164691 -0.046067 -0.041673 - 0.111621 -0.045196 -0.043413 - 0.058638 -0.044849 -0.042195 -e -v - 0.562455 -0.057681 -0.028797 - 0.522696 -0.057115 -0.031668 - 0.48285 -0.055115 -0.034452 - 0.456402 -0.053461 -0.036018 - 0.429867 -0.05294 -0.03654 - 0.403332 -0.054244 -0.034365 - 0.376797 -0.052504 -0.034191 - 0.323814 -0.049459 -0.034104 - 0.270744 -0.049373 -0.035844 - 0.229506 -0.050939 -0.037149 - 0.217674 -0.049286 -0.036714 - 0.164691 -0.050416 -0.038889 - 0.111621 -0.049808 -0.040542 - 0.058638 -0.04972 -0.039759 -e -v - 0.562455 -0.059856 -0.026013 - 0.522696 -0.0599 -0.028884 - 0.48285 -0.05816 -0.03132 - 0.456402 -0.056855 -0.032973 - 0.429867 -0.056594 -0.033495 - 0.403332 -0.057377 -0.031233 - 0.376797 -0.055723 -0.03132 - 0.323814 -0.05294 -0.031233 - 0.270744 -0.053027 -0.032886 - 0.229506 -0.054766 -0.034104 - 0.217674 -0.053287 -0.033843 - 0.164691 -0.054419 -0.03567 - 0.111621 -0.054157 -0.037323 - 0.058638 -0.054244 -0.036888 -e -v - 0.562455 -0.06177 -0.023142 - 0.522696 -0.062509 -0.025926 - 0.48285 -0.060856 -0.028014 - 0.456402 -0.059987 -0.029667 - 0.429867 -0.0599 -0.030189 - 0.403332 -0.060247 -0.028014 - 0.376797 -0.058681 -0.028014 - 0.323814 -0.056159 -0.028101 - 0.270744 -0.056419 -0.029667 - 0.229506 -0.058421 -0.030798 - 0.217674 -0.057028 -0.030711 - 0.164691 -0.05816 -0.032103 - 0.111621 -0.058247 -0.033756 - 0.058638 -0.058594 -0.033582 -e -v - 0.562455 -0.063423 -0.020097 - 0.522696 -0.064598 -0.02262 - 0.48285 -0.063293 -0.024447 - 0.456402 -0.062684 -0.026013 - 0.429867 -0.062684 -0.026535 - 0.403332 -0.063032 -0.024621 - 0.376797 -0.061205 -0.024534 - 0.323814 -0.059117 -0.024795 - 0.270744 -0.059464 -0.026013 - 0.229506 -0.061639 -0.027144 - 0.217674 -0.060422 -0.027144 - 0.164691 -0.061552 -0.028275 - 0.111621 -0.061988 -0.029841 - 0.058638 -0.062422 -0.029841 -e -v - 0.562455 -0.064815 -0.016878 - 0.522696 -0.066338 -0.019053 - 0.48285 -0.06538 -0.020706 - 0.456402 -0.064859 -0.022011 - 0.429867 -0.065032 -0.022446 - 0.403332 -0.06538 -0.02088 - 0.376797 -0.06338 -0.020706 - 0.323814 -0.061813 -0.021228 - 0.270744 -0.062162 -0.022185 - 0.229506 -0.064511 -0.023055 - 0.217674 -0.06338 -0.023142 - 0.164691 -0.064511 -0.024099 - 0.111621 -0.065206 -0.025491 - 0.058638 -0.065816 -0.025665 -e -v - 0.562455 -0.065946 -0.013659 - 0.522696 -0.06773 -0.015399 - 0.48285 -0.067208 -0.016791 - 0.456402 -0.066511 -0.017835 - 0.429867 -0.066946 -0.018183 - 0.403332 -0.067295 -0.016965 - 0.376797 -0.065293 -0.016791 - 0.323814 -0.064075 -0.017313 - 0.270744 -0.064424 -0.018009 - 0.229506 -0.066859 -0.018792 - 0.217674 -0.065816 -0.018879 - 0.164691 -0.067033 -0.019662 - 0.111621 -0.067904 -0.020793 - 0.058638 -0.068512 -0.020967 -e -v - 0.562455 -0.066903 -0.010266 - 0.522696 -0.068861 -0.011658 - 0.48285 -0.068512 -0.012702 - 0.456402 -0.067904 -0.013485 - 0.429867 -0.068512 -0.013833 - 0.403332 -0.068861 -0.012876 - 0.376797 -0.066859 -0.012789 - 0.323814 -0.065903 -0.013224 - 0.270744 -0.066251 -0.013659 - 0.229506 -0.068774 -0.014268 - 0.217674 -0.06773 -0.014355 - 0.164691 -0.069035 -0.014964 - 0.111621 -0.070078 -0.015834 - 0.058638 -0.070514 -0.015921 -e -v - 0.562455 -0.067599 -0.006873 - 0.522696 -0.06973 -0.00783 - 0.48285 -0.069556 -0.008526 - 0.456402 -0.068948 -0.009048 - 0.429867 -0.069556 -0.009222 - 0.403332 -0.069904 -0.008613 - 0.376797 -0.068077 -0.008526 - 0.323814 -0.06712 -0.008874 - 0.270744 -0.06773 -0.009222 - 0.229506 -0.070166 -0.00957 - 0.217674 -0.069296 -0.009657 - 0.164691 -0.070601 -0.010092 - 0.111621 -0.071644 -0.010614 - 0.058638 -0.071906 -0.010701 -e -v - 0.562455 -0.068034 -0.003393 - 0.522696 -0.070253 -0.003915 - 0.48285 -0.070166 -0.004263 - 0.456402 -0.069643 -0.004524 - 0.429867 -0.070253 -0.004611 - 0.403332 -0.070601 -0.00435 - 0.376797 -0.068948 -0.004263 - 0.323814 -0.067817 -0.004437 - 0.270744 -0.068774 -0.004611 - 0.229506 -0.071209 -0.004785 - 0.217674 -0.070253 -0.004872 - 0.164691 -0.071644 -0.005046 - 0.111621 -0.072688 -0.005307 - 0.058638 -0.072601 -0.005394 -e -v - 0.562455 -0.068208 0.0 - 0.522696 -0.070427 0.0 - 0.48285 -0.070427 0.0 - 0.456402 -0.069991 0.0 - 0.429867 -0.070427 0.0 - 0.403332 -0.070862 0.0 - 0.376797 -0.069556 0.0 - 0.323814 -0.068164 0.0 - 0.270744 -0.069556 0.0 - 0.229506 -0.071819 0.0 - 0.217674 -0.070862 0.0 - 0.164691 -0.072254 0.0 - 0.111621 -0.073211 0.0 - 0.058638 -0.072775 0.0 -e -v - 0.058638 0.081867 0.0 - 0.058638 0.078431 -0.017835 - 0.058638 0.06799 -0.032712 - 0.058638 0.053027 -0.043065 - 0.058638 0.03554 -0.048633 - 0.058638 0.017444 -0.051069 - 0.058638 0.017444 -0.061161 - 0.058638 0.036323 -0.061683 - 0.058638 0.03641 -0.067512 - 0.058638 0.03641 -0.073428 - 0.058638 0.03641 -0.079344 - 0.058638 0.036497 -0.08526 - 0.058638 0.036497 -0.091176 - 0.058638 0.036584 -0.097092 - 0.058638 0.036584 -0.103008 - 0.058638 0.03667 -0.108924 - 0.058638 0.03667 -0.11484 - 0.058638 0.036757 -0.120756 - 0.058638 0.036757 -0.126672 - 0.058638 0.036757 -0.132501 - 0.058638 0.028579 -0.132414 - 0.058638 0.020489 -0.132414 - 0.058638 0.012311 -0.132327 - 0.058638 0.004132 -0.13224 - 0.058638 -0.004045 -0.13224 - 0.058638 -0.012223 -0.132153 - 0.058638 -0.020402 -0.132153 - 0.058638 -0.028579 -0.132066 - 0.058638 -0.036757 -0.132066 - 0.058638 -0.044849 -0.132675 - 0.058638 -0.053027 -0.132501 - 0.058638 -0.06103 -0.130674 - 0.058638 -0.067208 -0.125628 - 0.058638 -0.069556 -0.117885 - 0.058638 -0.070427 -0.109794 - 0.058638 -0.070166 -0.101616 - 0.058638 -0.070078 -0.093438 - 0.058638 -0.071122 -0.085347 - 0.058638 -0.07147 -0.077169 - 0.058638 -0.068948 -0.069513 - 0.058638 -0.063293 -0.063771 - 0.058638 -0.055289 -0.062379 - 0.058638 -0.047197 -0.061335 - 0.058638 -0.039019 -0.061074 - 0.058638 -0.030841 -0.061683 - 0.058638 -0.030406 -0.047415 - 0.058638 -0.04685 -0.041934 - 0.058638 -0.060683 -0.031581 - 0.058638 -0.06973 -0.016965 - 0.058638 -0.072775 0.0 -e -v - 0.023229 0.074994 0.0 - 0.023229 0.072862 -0.015399 - 0.023229 0.065206 -0.028884 - 0.023229 0.053287 -0.038889 - 0.023229 0.038932 -0.044979 - 0.023229 0.023534 -0.047937 - 0.023229 0.023969 -0.061248 - 0.023229 0.036844 -0.06177 - 0.023229 0.036757 -0.067686 - 0.023229 0.036757 -0.073515 - 0.023229 0.03667 -0.079431 - 0.023229 0.03667 -0.08526 - 0.023229 0.036584 -0.091176 - 0.023229 0.036584 -0.097005 - 0.023229 0.036497 -0.102921 - 0.023229 0.036497 -0.10875 - 0.023229 0.036497 -0.114666 - 0.023229 0.03641 -0.120495 - 0.023229 0.03641 -0.126411 - 0.023229 0.036323 -0.13224 - 0.023229 0.027796 -0.132153 - 0.023229 0.019271 -0.132153 - 0.023229 0.010744 -0.132066 - 0.023229 0.002132 -0.131979 - 0.023229 -0.006394 -0.131979 - 0.023229 -0.014921 -0.131892 - 0.023229 -0.023447 -0.131805 - 0.023229 -0.031973 -0.131805 - 0.023229 -0.040498 -0.131805 - 0.023229 -0.049112 -0.13224 - 0.023229 -0.057638 -0.132327 - 0.023229 -0.066077 -0.131196 - 0.023229 -0.074167 -0.128847 - 0.023229 -0.078691 -0.1218 - 0.023229 -0.080431 -0.113535 - 0.023229 -0.07991 -0.105009 - 0.023229 -0.079475 -0.096483 - 0.023229 -0.080257 -0.087957 - 0.023229 -0.080518 -0.079431 - 0.023229 -0.079388 -0.070992 - 0.023229 -0.075212 -0.063684 - 0.023229 -0.067904 -0.059508 - 0.023229 -0.059377 -0.058986 - 0.023229 -0.050852 -0.058464 - 0.023229 -0.042326 -0.058464 - 0.023229 -0.042238 -0.042804 - 0.023229 -0.055376 -0.037323 - 0.023229 -0.065293 -0.027057 - 0.023229 -0.071296 -0.014094 - 0.023229 -0.073211 0.0 -e -v - -0.022359 0.069426 0.0 - -0.022359 0.06799 -0.012006 - -0.022359 0.062945 -0.023055 - -0.022359 0.05494 -0.03219 - -0.022359 0.044675 -0.038802 - -0.022359 0.033278 -0.042891 - -0.022359 0.032842 -0.0609 - -0.022359 0.038846 -0.061335 - -0.022359 0.038672 -0.06699 - -0.022359 0.038498 -0.072645 - -0.022359 0.03841 -0.0783 - -0.022359 0.038498 -0.084042 - -0.022359 0.038585 -0.089697 - -0.022359 0.038759 -0.095352 - -0.022359 0.038932 -0.101007 - -0.022359 0.039019 -0.106749 - -0.022359 0.039019 -0.112404 - -0.022359 0.038932 -0.118059 - -0.022359 0.038846 -0.123801 - -0.022359 0.038672 -0.129456 - -0.022359 0.030233 -0.12963 - -0.022359 0.021793 -0.129891 - -0.022359 0.013354 -0.130065 - -0.022359 0.004916 -0.130152 - -0.022359 -0.003523 -0.130326 - -0.022359 -0.012049 -0.130413 - -0.022359 -0.020489 -0.130587 - -0.022359 -0.028927 -0.130587 - -0.022359 -0.037367 -0.130761 - -0.022359 -0.045805 -0.131022 - -0.022359 -0.054244 -0.130935 - -0.022359 -0.062684 -0.130674 - -0.022359 -0.071035 -0.129978 - -0.022359 -0.07817 -0.125541 - -0.022359 -0.082171 -0.118233 - -0.022359 -0.083563 -0.109968 - -0.022359 -0.082781 -0.101529 - -0.022359 -0.082084 -0.093177 - -0.022359 -0.082868 -0.084738 - -0.022359 -0.083042 -0.076299 - -0.022359 -0.082084 -0.067947 - -0.022359 -0.078257 -0.060465 - -0.022359 -0.071557 -0.055506 - -0.022359 -0.06338 -0.053418 - -0.022359 -0.055115 -0.052026 - -0.022359 -0.05929 -0.034974 - -0.022359 -0.065206 -0.027318 - -0.022359 -0.06973 -0.018879 - -0.022359 -0.071993 -0.00957 - -0.022359 -0.071819 0.0 -e -v - -0.07395 0.063945 0.0 - -0.07395 0.062945 -0.009048 - -0.07395 0.060073 -0.017835 - -0.07395 0.055549 -0.025752 - -0.07395 0.049286 -0.032451 - -0.07395 0.04163 -0.037497 - -0.07395 0.038585 -0.055071 - -0.07395 0.038585 -0.061509 - -0.07395 0.038932 -0.06699 - -0.07395 0.039193 -0.072471 - -0.07395 0.039281 -0.077952 - -0.07395 0.039281 -0.083433 - -0.07395 0.039281 -0.089001 - -0.07395 0.039281 -0.094482 - -0.07395 0.039368 -0.099963 - -0.07395 0.039629 -0.105444 - -0.07395 0.040064 -0.110925 - -0.07395 0.040151 -0.116493 - -0.07395 0.039629 -0.121887 - -0.07395 0.038585 -0.127281 - -0.07395 0.030058 -0.127368 - -0.07395 0.02162 -0.127455 - -0.07395 0.013094 -0.127455 - -0.07395 0.004568 -0.127455 - -0.07395 -0.003872 -0.127542 - -0.07395 -0.012397 -0.127716 - -0.07395 -0.020837 -0.127977 - -0.07395 -0.029362 -0.128325 - -0.07395 -0.037889 -0.128673 - -0.07395 -0.046328 -0.128847 - -0.07395 -0.054853 -0.129108 - -0.07395 -0.063293 -0.129717 - -0.07395 -0.071644 -0.128412 - -0.07395 -0.079301 -0.124758 - -0.07395 -0.084173 -0.117972 - -0.07395 -0.086957 -0.109968 - -0.07395 -0.087479 -0.101529 - -0.07395 -0.087044 -0.093003 - -0.07395 -0.087044 -0.084564 - -0.07395 -0.087566 -0.076038 - -0.07395 -0.087044 -0.067599 - -0.07395 -0.084868 -0.059334 - -0.07395 -0.080692 -0.052026 - -0.07395 -0.073733 -0.047415 - -0.07395 -0.066077 -0.043761 - -0.07395 -0.065729 -0.034974 - -0.07395 -0.067643 -0.026361 - -0.07395 -0.069556 -0.017661 - -0.07395 -0.07034 -0.008787 - -0.07395 -0.069991 0.0 -e -v - -0.153555 0.055158 0.0 - -0.153555 0.055289 -0.005568 - -0.153555 0.054244 -0.011049 - -0.153555 0.05207 -0.016182 - -0.153555 0.049112 -0.020967 - -0.153555 0.045545 -0.025317 - -0.153555 0.04363 -0.032103 - -0.153555 0.041977 -0.038976 - -0.153555 0.040585 -0.045849 - -0.153555 0.038932 -0.052722 - -0.153555 0.037714 -0.059682 - -0.153555 0.037627 -0.066816 - -0.153555 0.037714 -0.073863 - -0.153555 0.037714 -0.08091 - -0.153555 0.037714 -0.087957 - -0.153555 0.037714 -0.095091 - -0.153555 0.037714 -0.102138 - -0.153555 0.037714 -0.109185 - -0.153555 0.037714 -0.116232 - -0.153555 0.037714 -0.123366 - -0.153555 0.028841 -0.123714 - -0.153555 0.019966 -0.123975 - -0.153555 0.011092 -0.124149 - -0.153555 0.002219 -0.124236 - -0.153555 -0.006743 -0.124149 - -0.153555 -0.015616 -0.123888 - -0.153555 -0.02449 -0.123714 - -0.153555 -0.033365 -0.123888 - -0.153555 -0.042238 -0.12441 - -0.153555 -0.051112 -0.124932 - -0.153555 -0.0599 -0.125889 - -0.153555 -0.068599 -0.127629 - -0.153555 -0.077212 -0.125976 - -0.153555 -0.084173 -0.120582 - -0.153555 -0.086521 -0.11223 - -0.153555 -0.086957 -0.103356 - -0.153555 -0.087739 -0.094569 - -0.153555 -0.088436 -0.085695 - -0.153555 -0.088871 -0.076821 - -0.153555 -0.088958 -0.067947 - -0.153555 -0.088436 -0.059073 - -0.153555 -0.086957 -0.050286 - -0.153555 -0.083999 -0.041934 - -0.153555 -0.077996 -0.035496 - -0.153555 -0.070514 -0.030798 - -0.153555 -0.068251 -0.025143 - -0.153555 -0.06773 -0.018879 - -0.153555 -0.067556 -0.012528 - -0.153555 -0.067643 -0.006264 - -0.153555 -0.068164 0.0 -e -v - -0.21663 0.048285 0.0 - -0.21663 0.048154 -0.004089 - -0.21663 0.047284 -0.008178 - -0.21663 0.045892 -0.012006 - -0.21663 0.043456 -0.015399 - -0.21663 0.040151 -0.017748 - -0.21663 0.039802 -0.02523 - -0.21663 0.039368 -0.032625 - -0.21663 0.038759 -0.040107 - -0.21663 0.037976 -0.047502 - -0.21663 0.036931 -0.054897 - -0.21663 0.036757 -0.062292 - -0.21663 0.037193 -0.069687 - -0.21663 0.03728 -0.077169 - -0.21663 0.037193 -0.084651 - -0.21663 0.037019 -0.092046 - -0.21663 0.036931 -0.099528 - -0.21663 0.036844 -0.106923 - -0.21663 0.036757 -0.114405 - -0.21663 0.03667 -0.121887 - -0.21663 0.027623 -0.121887 - -0.21663 0.018575 -0.121974 - -0.21663 0.009527 -0.122061 - -0.21663 0.000565 -0.122061 - -0.21663 -0.008482 -0.122148 - -0.21663 -0.017531 -0.122061 - -0.21663 -0.026579 -0.122148 - -0.21663 -0.03554 -0.122583 - -0.21663 -0.044588 -0.123279 - -0.21663 -0.053548 -0.123975 - -0.21663 -0.062509 -0.125106 - -0.21663 -0.07147 -0.124671 - -0.21663 -0.07991 -0.121713 - -0.21663 -0.085391 -0.114666 - -0.21663 -0.087044 -0.105879 - -0.21663 -0.08687 -0.096918 - -0.21663 -0.087739 -0.08787 - -0.21663 -0.088523 -0.078909 - -0.21663 -0.088958 -0.069861 - -0.21663 -0.088958 -0.0609 - -0.21663 -0.088436 -0.051852 - -0.21663 -0.08626 -0.043152 - -0.21663 -0.08252 -0.034887 - -0.21663 -0.076952 -0.02784 - -0.21663 -0.07034 -0.021663 - -0.21663 -0.068687 -0.017661 - -0.21663 -0.068425 -0.013224 - -0.21663 -0.068164 -0.008787 - -0.21663 -0.068077 -0.00435 - -0.21663 -0.068164 0.0 -e -v - -0.286143 0.04089 0.0 - -0.286143 0.041021 -0.002784 - -0.286143 0.040238 -0.005568 - -0.286143 0.038672 -0.007917 - -0.286143 0.036584 -0.009918 - -0.286143 0.034061 -0.011223 - -0.286143 0.033886 -0.019053 - -0.286143 0.033712 -0.026796 - -0.286143 0.033712 -0.034626 - -0.286143 0.033712 -0.042456 - -0.286143 0.033712 -0.050199 - -0.286143 0.033886 -0.058029 - -0.286143 0.034148 -0.065859 - -0.286143 0.034235 -0.073602 - -0.286143 0.034235 -0.081432 - -0.286143 0.034235 -0.089175 - -0.286143 0.034061 -0.097005 - -0.286143 0.033712 -0.104835 - -0.286143 0.03319 -0.112578 - -0.286143 0.032495 -0.120321 - -0.286143 0.02362 -0.119712 - -0.286143 0.014747 -0.11919 - -0.286143 0.005873 -0.118929 - -0.286143 -0.003001 -0.118929 - -0.286143 -0.011875 -0.119016 - -0.286143 -0.02075 -0.119364 - -0.286143 -0.029624 -0.119886 - -0.286143 -0.038498 -0.120669 - -0.286143 -0.047284 -0.121713 - -0.286143 -0.056159 -0.122496 - -0.286143 -0.064945 -0.123627 - -0.286143 -0.073646 -0.122322 - -0.286143 -0.081041 -0.117537 - -0.286143 -0.085652 -0.110055 - -0.286143 -0.087479 -0.101355 - -0.286143 -0.087652 -0.092481 - -0.286143 -0.088262 -0.083607 - -0.286143 -0.088958 -0.07482 - -0.286143 -0.089218 -0.065946 - -0.286143 -0.089045 -0.056985 - -0.286143 -0.088262 -0.048198 - -0.286143 -0.086 -0.039585 - -0.286143 -0.082259 -0.031581 - -0.286143 -0.076865 -0.024534 - -0.286143 -0.070862 -0.017922 - -0.286143 -0.069469 -0.014529 - -0.286143 -0.068251 -0.010962 - -0.286143 -0.06773 -0.007308 - -0.286143 -0.068077 -0.003567 - -0.286143 -0.069122 0.0 -e -v - -0.365661 0.033495 0.0 - -0.365661 0.031973 -0.002175 - -0.365661 0.03032 -0.004437 - -0.365661 0.029102 -0.00696 - -0.365661 0.028579 -0.009657 - -0.365661 0.028579 -0.012441 - -0.365661 0.028058 -0.02001 - -0.365661 0.028058 -0.027492 - -0.365661 0.028754 -0.035061 - -0.365661 0.029972 -0.042456 - -0.365661 0.031189 -0.049938 - -0.365661 0.032495 -0.057333 - -0.365661 0.032929 -0.064902 - -0.365661 0.03206 -0.072384 - -0.365661 0.030841 -0.079779 - -0.365661 0.029972 -0.087348 - -0.365661 0.029275 -0.09483 - -0.365661 0.028667 -0.102312 - -0.365661 0.028319 -0.109881 - -0.365661 0.028144 -0.11745 - -0.365661 0.019619 -0.117798 - -0.365661 0.011006 -0.117711 - -0.365661 0.002479 -0.117711 - -0.365661 -0.006047 -0.117798 - -0.365661 -0.014659 -0.117885 - -0.365661 -0.023186 -0.117972 - -0.365661 -0.031712 -0.118146 - -0.365661 -0.040325 -0.11832 - -0.365661 -0.04885 -0.118581 - -0.365661 -0.057377 -0.119016 - -0.365661 -0.065903 -0.119973 - -0.365661 -0.073907 -0.117276 - -0.365661 -0.080257 -0.111708 - -0.365661 -0.084868 -0.104487 - -0.365661 -0.086608 -0.096222 - -0.365661 -0.086608 -0.087696 - -0.365661 -0.087044 -0.079083 - -0.365661 -0.087305 -0.070557 - -0.365661 -0.087392 -0.062031 - -0.365661 -0.087131 -0.053418 - -0.365661 -0.086695 -0.044892 - -0.365661 -0.084781 -0.03654 - -0.365661 -0.081302 -0.028797 - -0.365661 -0.075994 -0.022098 - -0.365661 -0.070862 -0.015225 - -0.365661 -0.069469 -0.012267 - -0.365661 -0.069122 -0.009222 - -0.365661 -0.068948 -0.00609 - -0.365661 -0.068774 -0.003045 - -0.365661 -0.068599 0.0 -e -v - -0.409683 0.028449 0.0 - -0.409683 0.027448 -0.003567 - -0.409683 0.02684 -0.007221 - -0.409683 0.026665 -0.010875 - -0.409683 0.026579 -0.014616 - -0.409683 0.026579 -0.018357 - -0.409683 0.02684 -0.025491 - -0.409683 0.028493 -0.032451 - -0.409683 0.030581 -0.039237 - -0.409683 0.032407 -0.046197 - -0.409683 0.033886 -0.053157 - -0.409683 0.034495 -0.060291 - -0.409683 0.034322 -0.067512 - -0.409683 0.033452 -0.074559 - -0.409683 0.031799 -0.081519 - -0.409683 0.029537 -0.088392 - -0.409683 0.027362 -0.095178 - -0.409683 0.025621 -0.102138 - -0.409683 0.024751 -0.109185 - -0.409683 0.024665 -0.116406 - -0.409683 0.016313 -0.116493 - -0.409683 0.007873 -0.116667 - -0.409683 -0.000479 -0.116841 - -0.409683 -0.008918 -0.117015 - -0.409683 -0.017357 -0.117276 - -0.409683 -0.025709 -0.117537 - -0.409683 -0.034148 -0.117798 - -0.409683 -0.0425 -0.118146 - -0.409683 -0.050939 -0.118407 - -0.409683 -0.05929 -0.118755 - -0.409683 -0.06773 -0.118668 - -0.409683 -0.075646 -0.116928 - -0.409683 -0.081476 -0.110838 - -0.409683 -0.085042 -0.103443 - -0.409683 -0.085391 -0.095091 - -0.409683 -0.085826 -0.086652 - -0.409683 -0.086 -0.0783 - -0.409683 -0.086 -0.069861 - -0.409683 -0.086 -0.061422 - -0.409683 -0.085826 -0.05307 - -0.409683 -0.085129 -0.044718 - -0.409683 -0.083738 -0.036366 - -0.409683 -0.081041 -0.028449 - -0.409683 -0.076081 -0.02175 - -0.409683 -0.071035 -0.015051 - -0.409683 -0.069209 -0.012441 - -0.409683 -0.068164 -0.009483 - -0.409683 -0.06773 -0.006351 - -0.409683 -0.067556 -0.003132 - -0.409683 -0.06773 0.0 -e -v - -0.485634 0.022968 0.0 - -0.485634 0.022924 -0.003741 - -0.485634 0.022489 -0.007482 - -0.485634 0.022489 -0.01131 - -0.485634 0.023099 -0.015051 - -0.485634 0.024143 -0.018705 - -0.485634 0.026579 -0.025839 - -0.485634 0.029797 -0.032625 - -0.485634 0.032842 -0.039411 - -0.485634 0.035365 -0.046545 - -0.485634 0.036931 -0.053853 - -0.485634 0.037627 -0.061335 - -0.485634 0.037193 -0.068817 - -0.485634 0.035801 -0.076212 - -0.485634 0.033539 -0.083346 - -0.485634 0.03032 -0.090132 - -0.485634 0.026057 -0.096309 - -0.485634 0.022228 -0.102834 - -0.485634 0.019271 -0.109707 - -0.485634 0.01814 -0.117102 - -0.485634 0.010049 -0.116754 - -0.485634 0.001958 -0.116406 - -0.485634 -0.006134 -0.116232 - -0.485634 -0.014311 -0.116058 - -0.485634 -0.022403 -0.115971 - -0.485634 -0.030493 -0.115971 - -0.485634 -0.038585 -0.116058 - -0.485634 -0.046675 -0.116406 - -0.485634 -0.054766 -0.116841 - -0.485634 -0.062858 -0.116841 - -0.485634 -0.070949 -0.116232 - -0.485634 -0.077822 -0.112143 - -0.485634 -0.083389 -0.106314 - -0.485634 -0.085478 -0.098571 - -0.485634 -0.086 -0.09048 - -0.485634 -0.086173 -0.082389 - -0.485634 -0.085913 -0.074298 - -0.485634 -0.085391 -0.066207 - -0.485634 -0.084955 -0.058116 - -0.485634 -0.084868 -0.050025 - -0.485634 -0.084868 -0.041934 - -0.485634 -0.083563 -0.03393 - -0.485634 -0.080344 -0.026535 - -0.485634 -0.075473 -0.020097 - -0.485634 -0.070601 -0.013572 - -0.485634 -0.069643 -0.010962 - -0.485634 -0.068948 -0.008265 - -0.485634 -0.068774 -0.005481 - -0.485634 -0.068512 -0.002697 - -0.485634 -0.068164 0.0 -e -v - -0.5568 0.019749 0.0 - -0.5568 0.019706 -0.002871 - -0.5568 0.019879 -0.005829 - -0.5568 0.020314 -0.008787 - -0.5568 0.021185 -0.011571 - -0.5568 0.022403 -0.014268 - -0.5568 0.026752 -0.021489 - -0.5568 0.03206 -0.027927 - -0.5568 0.035801 -0.035409 - -0.5568 0.038846 -0.043239 - -0.5568 0.041108 -0.051417 - -0.5568 0.041891 -0.059769 - -0.5568 0.041455 -0.068121 - -0.5568 0.039802 -0.076299 - -0.5568 0.037019 -0.084303 - -0.5568 0.033365 -0.091872 - -0.5568 0.028667 -0.098745 - -0.5568 0.022924 -0.104922 - -0.5568 0.017531 -0.11136 - -0.5568 0.014833 -0.11919 - -0.5568 0.006917 -0.118929 - -0.5568 -0.000914 -0.118755 - -0.5568 -0.008744 -0.118407 - -0.5568 -0.016661 -0.118059 - -0.5568 -0.02449 -0.117711 - -0.5568 -0.032407 -0.117363 - -0.5568 -0.040238 -0.116928 - -0.5568 -0.048067 -0.116406 - -0.5568 -0.055985 -0.115884 - -0.5568 -0.063814 -0.115623 - -0.5568 -0.071383 -0.113622 - -0.5568 -0.077473 -0.108837 - -0.5568 -0.08078 -0.101703 - -0.5568 -0.081128 -0.093873 - -0.5568 -0.081562 -0.086043 - -0.5568 -0.081823 -0.078213 - -0.5568 -0.081997 -0.070296 - -0.5568 -0.081997 -0.062466 - -0.5568 -0.081823 -0.054549 - -0.5568 -0.081476 -0.046719 - -0.5568 -0.081302 -0.038802 - -0.5568 -0.079736 -0.031146 - -0.5568 -0.075473 -0.024621 - -0.5568 -0.069991 -0.018966 - -0.5568 -0.06599 -0.012267 - -0.5568 -0.064859 -0.010005 - -0.5568 -0.06425 -0.007569 - -0.5568 -0.064075 -0.005046 - -0.5568 -0.063988 -0.002523 - -0.5568 -0.063988 0.0 -e -v - -0.638232 0.012354 0.0 - -0.638232 0.012223 -0.001653 - -0.638232 0.012311 -0.003306 - -0.638232 0.012571 -0.004959 - -0.638232 0.013006 -0.006612 - -0.638232 0.013702 -0.008178 - -0.638232 0.02075 -0.014703 - -0.638232 0.027448 -0.021663 - -0.638232 0.033365 -0.029145 - -0.638232 0.037802 -0.037671 - -0.638232 0.040672 -0.046893 - -0.638232 0.041891 -0.056376 - -0.638232 0.04163 -0.065946 - -0.638232 0.039976 -0.075429 - -0.638232 0.036844 -0.084564 - -0.638232 0.03232 -0.093003 - -0.638232 0.026231 -0.100398 - -0.638232 0.019096 -0.106836 - -0.638232 0.011354 -0.112491 - -0.638232 0.007091 -0.12093 - -0.638232 -0.000131 -0.12006 - -0.638232 -0.007351 -0.11919 - -0.638232 -0.014573 -0.118407 - -0.638232 -0.021793 -0.117624 - -0.638232 -0.029014 -0.116928 - -0.638232 -0.036148 -0.116058 - -0.638232 -0.04337 -0.11484 - -0.638232 -0.050416 -0.113361 - -0.638232 -0.057377 -0.111099 - -0.638232 -0.063727 -0.107619 - -0.638232 -0.068948 -0.102573 - -0.638232 -0.072862 -0.096483 - -0.638232 -0.075386 -0.089697 - -0.638232 -0.076865 -0.08265 - -0.638232 -0.077822 -0.075429 - -0.638232 -0.078083 -0.068121 - -0.638232 -0.078257 -0.0609 - -0.638232 -0.078344 -0.053679 - -0.638232 -0.077909 -0.046371 - -0.638232 -0.076778 -0.039237 - -0.638232 -0.074602 -0.032277 - -0.638232 -0.071122 -0.025926 - -0.638232 -0.066251 -0.020619 - -0.638232 -0.061205 -0.015486 - -0.638232 -0.057638 -0.009135 - -0.638232 -0.056942 -0.007395 - -0.638232 -0.056419 -0.005568 - -0.638232 -0.056072 -0.003741 - -0.638232 -0.05581 -0.001827 - -0.638232 -0.055723 0.0 -e -v - -0.706005 0.004524 0.0 - -0.706005 0.004742 -0.001131 - -0.706005 0.005003 -0.002349 - -0.706005 0.005176 -0.003567 - -0.706005 0.00535 -0.004785 - -0.706005 0.005524 -0.006003 - -0.706005 0.014137 -0.011136 - -0.706005 0.022141 -0.017052 - -0.706005 0.029014 -0.02436 - -0.706005 0.034235 -0.032799 - -0.706005 0.037976 -0.042108 - -0.706005 0.039889 -0.051852 - -0.706005 0.040064 -0.061857 - -0.706005 0.038585 -0.071775 - -0.706005 0.035627 -0.081345 - -0.706005 0.030841 -0.090045 - -0.706005 0.024403 -0.097701 - -0.706005 0.016921 -0.104313 - -0.706005 0.008744 -0.110055 - -0.706005 0.000392 -0.115536 - -0.706005 -0.006134 -0.11484 - -0.706005 -0.012571 -0.114057 - -0.706005 -0.01901 -0.113274 - -0.706005 -0.025534 -0.112839 - -0.706005 -0.03206 -0.11223 - -0.706005 -0.038323 -0.110838 - -0.706005 -0.0445 -0.10875 - -0.706005 -0.050242 -0.105705 - -0.706005 -0.055202 -0.101529 - -0.706005 -0.059377 -0.09657 - -0.706005 -0.063206 -0.091263 - -0.706005 -0.066511 -0.085608 - -0.706005 -0.069296 -0.079779 - -0.706005 -0.071383 -0.073602 - -0.706005 -0.072601 -0.067164 - -0.706005 -0.073123 -0.060726 - -0.706005 -0.072862 -0.054201 - -0.706005 -0.071906 -0.047763 - -0.706005 -0.070253 -0.041499 - -0.706005 -0.067904 -0.035409 - -0.706005 -0.064772 -0.029754 - -0.706005 -0.060943 -0.024447 - -0.706005 -0.056332 -0.019836 - -0.706005 -0.051635 -0.015312 - -0.706005 -0.047807 -0.010005 - -0.706005 -0.046937 -0.008178 - -0.706005 -0.046241 -0.006177 - -0.706005 -0.045805 -0.004176 - -0.706005 -0.045545 -0.002088 - -0.706005 -0.045632 0.0 -e -v - -0.757944 -0.005133 0.0 - -0.757944 -0.005089 -0.001479 - -0.757944 -0.005089 -0.003045 - -0.757944 -0.005089 -0.004611 - -0.757944 -0.005003 -0.006177 - -0.757944 -0.005003 -0.007743 - -0.757944 0.004655 -0.011136 - -0.757944 0.013528 -0.016443 - -0.757944 0.021097 -0.023403 - -0.757944 0.0271 -0.031668 - -0.757944 0.031277 -0.041064 - -0.757944 0.033365 -0.051069 - -0.757944 0.033452 -0.061422 - -0.757944 0.031712 -0.071514 - -0.757944 0.027971 -0.081084 - -0.757944 0.022489 -0.089784 - -0.757944 0.015356 -0.097179 - -0.757944 0.00683 -0.102834 - -0.757944 -0.002741 -0.106749 - -0.757944 -0.012833 -0.108663 - -0.757944 -0.018488 -0.108663 - -0.757944 -0.024143 -0.108141 - -0.757944 -0.02971 -0.107097 - -0.757944 -0.035105 -0.105357 - -0.757944 -0.040238 -0.103008 - -0.757944 -0.045109 -0.100137 - -0.757944 -0.049633 -0.096657 - -0.757944 -0.05381 -0.092829 - -0.757944 -0.057551 -0.088566 - -0.757944 -0.06077 -0.083955 - -0.757944 -0.063466 -0.078909 - -0.757944 -0.065554 -0.073689 - -0.757944 -0.067033 -0.068208 - -0.757944 -0.067817 -0.062553 - -0.757944 -0.068077 -0.056898 - -0.757944 -0.067817 -0.051243 - -0.757944 -0.066859 -0.045675 - -0.757944 -0.065206 -0.040281 - -0.757944 -0.062684 -0.035148 - -0.757944 -0.059551 -0.03045 - -0.757944 -0.056072 -0.026013 - -0.757944 -0.052244 -0.02175 - -0.757944 -0.048067 -0.017922 - -0.757944 -0.043543 -0.014616 - -0.757944 -0.038585 -0.011832 - -0.757944 -0.038672 -0.009396 - -0.757944 -0.038846 -0.007047 - -0.757944 -0.038932 -0.004698 - -0.757944 -0.039019 -0.002349 - -0.757944 -0.039193 0.0 -e -v - -0.812058 -0.015747 0.0 - -0.812058 -0.015703 -0.001827 - -0.812058 -0.015703 -0.003654 - -0.812058 -0.015703 -0.005481 - -0.812058 -0.015703 -0.007308 - -0.812058 -0.015703 -0.009135 - -0.812058 -0.004655 -0.010788 - -0.812058 0.005786 -0.014964 - -0.812058 0.015007 -0.021141 - -0.812058 0.022489 -0.029493 - -0.812058 0.027536 -0.039498 - -0.812058 0.03032 -0.050373 - -0.812058 0.030755 -0.061509 - -0.812058 0.028841 -0.072558 - -0.812058 0.02449 -0.082911 - -0.812058 0.017879 -0.091872 - -0.812058 0.009178 -0.098919 - -0.812058 -0.000914 -0.103704 - -0.812058 -0.011875 -0.106053 - -0.812058 -0.023099 -0.105879 - -0.812058 -0.028754 -0.104835 - -0.812058 -0.033799 -0.103095 - -0.812058 -0.038585 -0.100833 - -0.812058 -0.043109 -0.097962 - -0.812058 -0.047371 -0.094743 - -0.812058 -0.051199 -0.091002 - -0.812058 -0.054593 -0.086913 - -0.812058 -0.057725 -0.082563 - -0.812058 -0.060334 -0.077952 - -0.812058 -0.062422 -0.072993 - -0.812058 -0.063814 -0.06786 - -0.812058 -0.064511 -0.062553 - -0.812058 -0.064685 -0.057246 - -0.812058 -0.064337 -0.051939 - -0.812058 -0.06364 -0.046632 - -0.812058 -0.062335 -0.041499 - -0.812058 -0.060247 -0.03654 - -0.812058 -0.057551 -0.032016 - -0.812058 -0.054419 -0.027666 - -0.812058 -0.051025 -0.023577 - -0.812058 -0.047197 -0.019836 - -0.812058 -0.042847 -0.016791 - -0.812058 -0.038063 -0.014355 - -0.812058 -0.03319 -0.012267 - -0.812058 -0.028144 -0.010527 - -0.812058 -0.028144 -0.008439 - -0.812058 -0.028144 -0.006351 - -0.812058 -0.028144 -0.004176 - -0.812058 -0.028144 -0.002088 - -0.812058 -0.028144 0.0 -e -v - -0.838506 -0.02175 0.0 - -0.838506 -0.021706 -0.00174 - -0.838506 -0.021706 -0.003567 - -0.838506 -0.021706 -0.005394 - -0.838506 -0.021706 -0.007134 - -0.838506 -0.021793 -0.008961 - -0.838506 -0.010571 -0.009309 - -0.838506 0.000217 -0.012354 - -0.838506 0.010223 -0.017487 - -0.838506 0.018835 -0.024708 - -0.838506 0.025013 -0.034104 - -0.838506 0.028927 -0.044544 - -0.838506 0.030928 -0.05568 - -0.838506 0.030406 -0.066816 - -0.838506 0.027013 -0.077517 - -0.838506 0.021272 -0.087174 - -0.838506 0.013616 -0.095352 - -0.838506 0.004306 -0.101616 - -0.838506 -0.006307 -0.105183 - -0.838506 -0.017531 -0.10614 - -0.838506 -0.023447 -0.105879 - -0.838506 -0.029275 -0.104922 - -0.838506 -0.034844 -0.103095 - -0.838506 -0.040151 -0.100398 - -0.838506 -0.045022 -0.097092 - -0.838506 -0.049633 -0.093438 - -0.838506 -0.053897 -0.089349 - -0.838506 -0.057638 -0.084738 - -0.838506 -0.060596 -0.079605 - -0.838506 -0.062771 -0.074124 - -0.838506 -0.064337 -0.068469 - -0.838506 -0.065293 -0.06264 - -0.838506 -0.065467 -0.056724 - -0.838506 -0.065206 -0.050808 - -0.838506 -0.064337 -0.044979 - -0.838506 -0.062596 -0.039324 - -0.838506 -0.059987 -0.034017 - -0.838506 -0.056681 -0.029145 - -0.838506 -0.05294 -0.024621 - -0.838506 -0.048763 -0.020358 - -0.838506 -0.044066 -0.016878 - -0.838506 -0.038759 -0.014094 - -0.838506 -0.033278 -0.012093 - -0.838506 -0.027536 -0.010527 - -0.838506 -0.021793 -0.009396 - -0.838506 -0.021706 -0.007134 - -0.838506 -0.021706 -0.005394 - -0.838506 -0.021706 -0.003567 - -0.838506 -0.021706 -0.00174 - -0.838506 -0.021706 0.0 -e -v - 0.058638 0.081867 0.0 - 0.023229 0.075038 0.0 - -0.022359 0.069469 0.0 - -0.07395 0.063988 0.0 - -0.153555 0.055202 0.0 - -0.21663 0.048329 0.0 - -0.286143 0.040934 0.0 - -0.365661 0.033539 0.0 - -0.409683 0.028493 0.0 - -0.485634 0.023012 0.0 - -0.5568 0.019793 0.0 - -0.638232 0.012397 0.0 - -0.706005 0.004568 0.0 - -0.757944 -0.005089 0.0 - -0.812058 -0.015703 0.0 - -0.838506 -0.021706 0.0 -e -v - 0.058638 0.078387 -0.017835 - 0.023229 0.072862 -0.015399 - -0.022359 0.06799 -0.012006 - -0.07395 0.062945 -0.009048 - -0.153555 0.055289 -0.005568 - -0.21663 0.048154 -0.004089 - -0.286143 0.041021 -0.002784 - -0.365661 0.031973 -0.002175 - -0.409683 0.027448 -0.003567 - -0.485634 0.022924 -0.003741 - -0.5568 0.019706 -0.002871 - -0.638232 0.012223 -0.001653 - -0.706005 0.004742 -0.001131 - -0.757944 -0.005089 -0.001479 - -0.812058 -0.015703 -0.001827 - -0.838506 -0.021706 -0.00174 -e -v - 0.058638 0.067947 -0.032712 - 0.023229 0.065206 -0.028884 - -0.022359 0.062945 -0.023055 - -0.07395 0.060073 -0.017835 - -0.153555 0.054244 -0.011049 - -0.21663 0.047284 -0.008178 - -0.286143 0.040238 -0.005568 - -0.365661 0.03032 -0.004437 - -0.409683 0.02684 -0.007221 - -0.485634 0.022489 -0.007482 - -0.5568 0.019879 -0.005829 - -0.638232 0.012311 -0.003306 - -0.706005 0.005003 -0.002349 - -0.757944 -0.005089 -0.003045 - -0.812058 -0.015703 -0.003654 - -0.838506 -0.021706 -0.003567 -e -v - 0.058638 0.052983 -0.043065 - 0.023229 0.053287 -0.038889 - -0.022359 0.05494 -0.03219 - -0.07395 0.055549 -0.025752 - -0.153555 0.05207 -0.016182 - -0.21663 0.045892 -0.012006 - -0.286143 0.038672 -0.007917 - -0.365661 0.029102 -0.00696 - -0.409683 0.026665 -0.010875 - -0.485634 0.022489 -0.01131 - -0.5568 0.020314 -0.008787 - -0.638232 0.012571 -0.004959 - -0.706005 0.005176 -0.003567 - -0.757944 -0.005089 -0.004611 - -0.812058 -0.015703 -0.005481 - -0.838506 -0.021706 -0.005394 -e -v - 0.058638 0.035496 -0.048633 - 0.023229 0.038932 -0.044979 - -0.022359 0.044675 -0.038802 - -0.07395 0.049286 -0.032451 - -0.153555 0.049112 -0.020967 - -0.21663 0.043456 -0.015399 - -0.286143 0.036584 -0.009918 - -0.365661 0.028579 -0.009657 - -0.409683 0.026579 -0.014616 - -0.485634 0.023099 -0.015051 - -0.5568 0.021185 -0.011571 - -0.638232 0.013006 -0.006612 - -0.706005 0.00535 -0.004785 - -0.757944 -0.005003 -0.006177 - -0.812058 -0.015703 -0.007308 - -0.838506 -0.021706 -0.007134 -e -v - 0.058638 0.0174 -0.051069 - 0.023229 0.023534 -0.047937 - -0.022359 0.033278 -0.042891 - -0.07395 0.04163 -0.037497 - -0.153555 0.045545 -0.025317 - -0.21663 0.040151 -0.017748 - -0.286143 0.034061 -0.011223 - -0.365661 0.028579 -0.012441 - -0.409683 0.026579 -0.018357 - -0.485634 0.024143 -0.018705 - -0.5568 0.022403 -0.014268 - -0.638232 0.013702 -0.008178 - -0.706005 0.005524 -0.006003 - -0.757944 -0.005003 -0.007743 - -0.812058 -0.015703 -0.009135 - -0.838506 -0.021793 -0.008961 -e -v - 0.058638 0.0174 -0.061161 - 0.023229 0.023969 -0.061248 - -0.022359 0.032842 -0.0609 - -0.07395 0.038585 -0.055071 - -0.153555 0.04363 -0.032103 - -0.21663 0.039802 -0.02523 - -0.286143 0.033886 -0.019053 - -0.365661 0.028058 -0.02001 - -0.409683 0.02684 -0.025491 - -0.485634 0.026579 -0.025839 - -0.5568 0.026752 -0.021489 - -0.638232 0.02075 -0.014703 - -0.706005 0.014137 -0.011136 - -0.757944 0.004655 -0.011136 - -0.812058 -0.004655 -0.010788 - -0.838506 -0.010571 -0.009309 -e -v - 0.058638 0.036279 -0.061683 - 0.023229 0.036844 -0.06177 - -0.022359 0.038846 -0.061335 - -0.07395 0.038585 -0.061509 - -0.153555 0.041977 -0.038976 - -0.21663 0.039368 -0.032625 - -0.286143 0.033712 -0.026796 - -0.365661 0.028058 -0.027492 - -0.409683 0.028493 -0.032451 - -0.485634 0.029797 -0.032625 - -0.5568 0.03206 -0.027927 - -0.638232 0.027448 -0.021663 - -0.706005 0.022141 -0.017052 - -0.757944 0.013528 -0.016443 - -0.812058 0.005786 -0.014964 - -0.838506 0.000217 -0.012354 -e -v - 0.058638 0.036366 -0.067512 - 0.023229 0.036757 -0.067686 - -0.022359 0.038672 -0.06699 - -0.07395 0.038932 -0.06699 - -0.153555 0.040585 -0.045849 - -0.21663 0.038759 -0.040107 - -0.286143 0.033712 -0.034626 - -0.365661 0.028754 -0.035061 - -0.409683 0.030581 -0.039237 - -0.485634 0.032842 -0.039411 - -0.5568 0.035801 -0.035409 - -0.638232 0.033365 -0.029145 - -0.706005 0.029014 -0.02436 - -0.757944 0.021097 -0.023403 - -0.812058 0.015007 -0.021141 - -0.838506 0.010223 -0.017487 -e -v - 0.058638 0.036366 -0.073428 - 0.023229 0.036757 -0.073515 - -0.022359 0.038498 -0.072645 - -0.07395 0.039193 -0.072471 - -0.153555 0.038932 -0.052722 - -0.21663 0.037976 -0.047502 - -0.286143 0.033712 -0.042456 - -0.365661 0.029972 -0.042456 - -0.409683 0.032407 -0.046197 - -0.485634 0.035365 -0.046545 - -0.5568 0.038846 -0.043239 - -0.638232 0.037802 -0.037671 - -0.706005 0.034235 -0.032799 - -0.757944 0.0271 -0.031668 - -0.812058 0.022489 -0.029493 - -0.838506 0.018835 -0.024708 -e -v - 0.058638 0.036366 -0.079344 - 0.023229 0.03667 -0.079431 - -0.022359 0.03841 -0.0783 - -0.07395 0.039281 -0.077952 - -0.153555 0.037714 -0.059682 - -0.21663 0.036931 -0.054897 - -0.286143 0.033712 -0.050199 - -0.365661 0.031189 -0.049938 - -0.409683 0.033886 -0.053157 - -0.485634 0.036931 -0.053853 - -0.5568 0.041108 -0.051417 - -0.638232 0.040672 -0.046893 - -0.706005 0.037976 -0.042108 - -0.757944 0.031277 -0.041064 - -0.812058 0.027536 -0.039498 - -0.838506 0.025013 -0.034104 -e -v - 0.058638 0.036453 -0.08526 - 0.023229 0.03667 -0.08526 - -0.022359 0.038498 -0.084042 - -0.07395 0.039281 -0.083433 - -0.153555 0.037627 -0.066816 - -0.21663 0.036757 -0.062292 - -0.286143 0.033886 -0.058029 - -0.365661 0.032495 -0.057333 - -0.409683 0.034495 -0.060291 - -0.485634 0.037627 -0.061335 - -0.5568 0.041891 -0.059769 - -0.638232 0.041891 -0.056376 - -0.706005 0.039889 -0.051852 - -0.757944 0.033365 -0.051069 - -0.812058 0.03032 -0.050373 - -0.838506 0.028927 -0.044544 -e -v - 0.058638 0.036453 -0.091176 - 0.023229 0.036584 -0.091176 - -0.022359 0.038585 -0.089697 - -0.07395 0.039281 -0.089001 - -0.153555 0.037714 -0.073863 - -0.21663 0.037193 -0.069687 - -0.286143 0.034148 -0.065859 - -0.365661 0.032929 -0.064902 - -0.409683 0.034322 -0.067512 - -0.485634 0.037193 -0.068817 - -0.5568 0.041455 -0.068121 - -0.638232 0.04163 -0.065946 - -0.706005 0.040064 -0.061857 - -0.757944 0.033452 -0.061422 - -0.812058 0.030755 -0.061509 - -0.838506 0.030928 -0.05568 -e -v - 0.058638 0.03654 -0.097092 - 0.023229 0.036584 -0.097005 - -0.022359 0.038759 -0.095352 - -0.07395 0.039281 -0.094482 - -0.153555 0.037714 -0.08091 - -0.21663 0.03728 -0.077169 - -0.286143 0.034235 -0.073602 - -0.365661 0.03206 -0.072384 - -0.409683 0.033452 -0.074559 - -0.485634 0.035801 -0.076212 - -0.5568 0.039802 -0.076299 - -0.638232 0.039976 -0.075429 - -0.706005 0.038585 -0.071775 - -0.757944 0.031712 -0.071514 - -0.812058 0.028841 -0.072558 - -0.838506 0.030406 -0.066816 -e -v - 0.058638 0.03654 -0.103008 - 0.023229 0.036497 -0.102921 - -0.022359 0.038932 -0.101007 - -0.07395 0.039368 -0.099963 - -0.153555 0.037714 -0.087957 - -0.21663 0.037193 -0.084651 - -0.286143 0.034235 -0.081432 - -0.365661 0.030841 -0.079779 - -0.409683 0.031799 -0.081519 - -0.485634 0.033539 -0.083346 - -0.5568 0.037019 -0.084303 - -0.638232 0.036844 -0.084564 - -0.706005 0.035627 -0.081345 - -0.757944 0.027971 -0.081084 - -0.812058 0.02449 -0.082911 - -0.838506 0.027013 -0.077517 -e -v - 0.058638 0.036627 -0.108924 - 0.023229 0.036497 -0.10875 - -0.022359 0.039019 -0.106749 - -0.07395 0.039629 -0.105444 - -0.153555 0.037714 -0.095091 - -0.21663 0.037019 -0.092046 - -0.286143 0.034235 -0.089175 - -0.365661 0.029972 -0.087348 - -0.409683 0.029537 -0.088392 - -0.485634 0.03032 -0.090132 - -0.5568 0.033365 -0.091872 - -0.638232 0.03232 -0.093003 - -0.706005 0.030841 -0.090045 - -0.757944 0.022489 -0.089784 - -0.812058 0.017879 -0.091872 - -0.838506 0.021272 -0.087174 -e -v - 0.058638 0.036627 -0.11484 - 0.023229 0.036497 -0.114666 - -0.022359 0.039019 -0.112404 - -0.07395 0.040064 -0.110925 - -0.153555 0.037714 -0.102138 - -0.21663 0.036931 -0.099528 - -0.286143 0.034061 -0.097005 - -0.365661 0.029275 -0.09483 - -0.409683 0.027362 -0.095178 - -0.485634 0.026057 -0.096309 - -0.5568 0.028667 -0.098745 - -0.638232 0.026231 -0.100398 - -0.706005 0.024403 -0.097701 - -0.757944 0.015356 -0.097179 - -0.812058 0.009178 -0.098919 - -0.838506 0.013616 -0.095352 -e -v - 0.058638 0.036714 -0.120756 - 0.023229 0.03641 -0.120495 - -0.022359 0.038932 -0.118059 - -0.07395 0.040151 -0.116493 - -0.153555 0.037714 -0.109185 - -0.21663 0.036844 -0.106923 - -0.286143 0.033712 -0.104835 - -0.365661 0.028667 -0.102312 - -0.409683 0.025621 -0.102138 - -0.485634 0.022228 -0.102834 - -0.5568 0.022924 -0.104922 - -0.638232 0.019096 -0.106836 - -0.706005 0.016921 -0.104313 - -0.757944 0.00683 -0.102834 - -0.812058 -0.000914 -0.103704 - -0.838506 0.004306 -0.101616 -e -v - 0.058638 0.036714 -0.126672 - 0.023229 0.03641 -0.126411 - -0.022359 0.038846 -0.123801 - -0.07395 0.039629 -0.121887 - -0.153555 0.037714 -0.116232 - -0.21663 0.036757 -0.114405 - -0.286143 0.03319 -0.112578 - -0.365661 0.028319 -0.109881 - -0.409683 0.024751 -0.109185 - -0.485634 0.019271 -0.109707 - -0.5568 0.017531 -0.11136 - -0.638232 0.011354 -0.112491 - -0.706005 0.008744 -0.110055 - -0.757944 -0.002741 -0.106749 - -0.812058 -0.011875 -0.106053 - -0.838506 -0.006307 -0.105183 -e -v - 0.058638 0.036714 -0.132501 - 0.023229 0.036323 -0.13224 - -0.022359 0.038672 -0.129456 - -0.07395 0.038585 -0.127281 - -0.153555 0.037714 -0.123366 - -0.21663 0.03667 -0.121887 - -0.286143 0.032495 -0.120321 - -0.365661 0.028144 -0.11745 - -0.409683 0.024665 -0.116406 - -0.485634 0.01814 -0.117102 - -0.5568 0.014833 -0.11919 - -0.638232 0.007091 -0.12093 - -0.706005 0.000392 -0.115536 - -0.757944 -0.012833 -0.108663 - -0.812058 -0.023099 -0.105879 - -0.838506 -0.017531 -0.10614 -e -v - 0.058638 0.028536 -0.132414 - 0.023229 0.027796 -0.132153 - -0.022359 0.030233 -0.12963 - -0.07395 0.030058 -0.127368 - -0.153555 0.028841 -0.123714 - -0.21663 0.027623 -0.121887 - -0.286143 0.02362 -0.119712 - -0.365661 0.019619 -0.117798 - -0.409683 0.016313 -0.116493 - -0.485634 0.010049 -0.116754 - -0.5568 0.006917 -0.118929 - -0.638232 -0.000131 -0.12006 - -0.706005 -0.006134 -0.11484 - -0.757944 -0.018488 -0.108663 - -0.812058 -0.028754 -0.104835 - -0.838506 -0.023447 -0.105879 -e -v - 0.058638 0.020445 -0.132414 - 0.023229 0.019271 -0.132153 - -0.022359 0.021793 -0.129891 - -0.07395 0.02162 -0.127455 - -0.153555 0.019966 -0.123975 - -0.21663 0.018575 -0.121974 - -0.286143 0.014747 -0.11919 - -0.365661 0.011006 -0.117711 - -0.409683 0.007873 -0.116667 - -0.485634 0.001958 -0.116406 - -0.5568 -0.000914 -0.118755 - -0.638232 -0.007351 -0.11919 - -0.706005 -0.012571 -0.114057 - -0.757944 -0.024143 -0.108141 - -0.812058 -0.033799 -0.103095 - -0.838506 -0.029275 -0.104922 -e -v - 0.058638 0.012267 -0.132327 - 0.023229 0.010744 -0.132066 - -0.022359 0.013354 -0.130065 - -0.07395 0.013094 -0.127455 - -0.153555 0.011092 -0.124149 - -0.21663 0.009527 -0.122061 - -0.286143 0.005873 -0.118929 - -0.365661 0.002479 -0.117711 - -0.409683 -0.000479 -0.116841 - -0.485634 -0.006134 -0.116232 - -0.5568 -0.008744 -0.118407 - -0.638232 -0.014573 -0.118407 - -0.706005 -0.01901 -0.113274 - -0.757944 -0.02971 -0.107097 - -0.812058 -0.038585 -0.100833 - -0.838506 -0.034844 -0.103095 -e -v - 0.058638 0.004089 -0.13224 - 0.023229 0.002132 -0.131979 - -0.022359 0.004916 -0.130152 - -0.07395 0.004568 -0.127455 - -0.153555 0.002219 -0.124236 - -0.21663 0.000565 -0.122061 - -0.286143 -0.003001 -0.118929 - -0.365661 -0.006047 -0.117798 - -0.409683 -0.008918 -0.117015 - -0.485634 -0.014311 -0.116058 - -0.5568 -0.016661 -0.118059 - -0.638232 -0.021793 -0.117624 - -0.706005 -0.025534 -0.112839 - -0.757944 -0.035105 -0.105357 - -0.812058 -0.043109 -0.097962 - -0.838506 -0.040151 -0.100398 -e -v - 0.058638 -0.004089 -0.13224 - 0.023229 -0.006394 -0.131979 - -0.022359 -0.003523 -0.130326 - -0.07395 -0.003872 -0.127542 - -0.153555 -0.006743 -0.124149 - -0.21663 -0.008482 -0.122148 - -0.286143 -0.011875 -0.119016 - -0.365661 -0.014659 -0.117885 - -0.409683 -0.017357 -0.117276 - -0.485634 -0.022403 -0.115971 - -0.5568 -0.02449 -0.117711 - -0.638232 -0.029014 -0.116928 - -0.706005 -0.03206 -0.11223 - -0.757944 -0.040238 -0.103008 - -0.812058 -0.047371 -0.094743 - -0.838506 -0.045022 -0.097092 -e -v - 0.058638 -0.012267 -0.132153 - 0.023229 -0.014921 -0.131892 - -0.022359 -0.012049 -0.130413 - -0.07395 -0.012397 -0.127716 - -0.153555 -0.015616 -0.123888 - -0.21663 -0.017531 -0.122061 - -0.286143 -0.02075 -0.119364 - -0.365661 -0.023186 -0.117972 - -0.409683 -0.025709 -0.117537 - -0.485634 -0.030493 -0.115971 - -0.5568 -0.032407 -0.117363 - -0.638232 -0.036148 -0.116058 - -0.706005 -0.038323 -0.110838 - -0.757944 -0.045109 -0.100137 - -0.812058 -0.051199 -0.091002 - -0.838506 -0.049633 -0.093438 -e -v - 0.058638 -0.020445 -0.132153 - 0.023229 -0.023447 -0.131805 - -0.022359 -0.020489 -0.130587 - -0.07395 -0.020837 -0.127977 - -0.153555 -0.02449 -0.123714 - -0.21663 -0.026579 -0.122148 - -0.286143 -0.029624 -0.119886 - -0.365661 -0.031712 -0.118146 - -0.409683 -0.034148 -0.117798 - -0.485634 -0.038585 -0.116058 - -0.5568 -0.040238 -0.116928 - -0.638232 -0.04337 -0.11484 - -0.706005 -0.0445 -0.10875 - -0.757944 -0.049633 -0.096657 - -0.812058 -0.054593 -0.086913 - -0.838506 -0.053897 -0.089349 -e -v - 0.058638 -0.028623 -0.132066 - 0.023229 -0.031973 -0.131805 - -0.022359 -0.028927 -0.130587 - -0.07395 -0.029362 -0.128325 - -0.153555 -0.033365 -0.123888 - -0.21663 -0.03554 -0.122583 - -0.286143 -0.038498 -0.120669 - -0.365661 -0.040325 -0.11832 - -0.409683 -0.0425 -0.118146 - -0.485634 -0.046675 -0.116406 - -0.5568 -0.048067 -0.116406 - -0.638232 -0.050416 -0.113361 - -0.706005 -0.050242 -0.105705 - -0.757944 -0.05381 -0.092829 - -0.812058 -0.057725 -0.082563 - -0.838506 -0.057638 -0.084738 -e -v - 0.058638 -0.036801 -0.132066 - 0.023229 -0.040498 -0.131805 - -0.022359 -0.037367 -0.130761 - -0.07395 -0.037889 -0.128673 - -0.153555 -0.042238 -0.12441 - -0.21663 -0.044588 -0.123279 - -0.286143 -0.047284 -0.121713 - -0.365661 -0.04885 -0.118581 - -0.409683 -0.050939 -0.118407 - -0.485634 -0.054766 -0.116841 - -0.5568 -0.055985 -0.115884 - -0.638232 -0.057377 -0.111099 - -0.706005 -0.055202 -0.101529 - -0.757944 -0.057551 -0.088566 - -0.812058 -0.060334 -0.077952 - -0.838506 -0.060596 -0.079605 -e -v - 0.058638 -0.044892 -0.132675 - 0.023229 -0.049112 -0.13224 - -0.022359 -0.045805 -0.131022 - -0.07395 -0.046328 -0.128847 - -0.153555 -0.051112 -0.124932 - -0.21663 -0.053548 -0.123975 - -0.286143 -0.056159 -0.122496 - -0.365661 -0.057377 -0.119016 - -0.409683 -0.05929 -0.118755 - -0.485634 -0.062858 -0.116841 - -0.5568 -0.063814 -0.115623 - -0.638232 -0.063727 -0.107619 - -0.706005 -0.059377 -0.09657 - -0.757944 -0.06077 -0.083955 - -0.812058 -0.062422 -0.072993 - -0.838506 -0.062771 -0.074124 -e -v - 0.058638 -0.05307 -0.132501 - 0.023229 -0.057638 -0.132327 - -0.022359 -0.054244 -0.130935 - -0.07395 -0.054853 -0.129108 - -0.153555 -0.0599 -0.125889 - -0.21663 -0.062509 -0.125106 - -0.286143 -0.064945 -0.123627 - -0.365661 -0.065903 -0.119973 - -0.409683 -0.06773 -0.118668 - -0.485634 -0.070949 -0.116232 - -0.5568 -0.071383 -0.113622 - -0.638232 -0.068948 -0.102573 - -0.706005 -0.063206 -0.091263 - -0.757944 -0.063466 -0.078909 - -0.812058 -0.063814 -0.06786 - -0.838506 -0.064337 -0.068469 -e -v - 0.058638 -0.061074 -0.130674 - 0.023229 -0.066077 -0.131196 - -0.022359 -0.062684 -0.130674 - -0.07395 -0.063293 -0.129717 - -0.153555 -0.068599 -0.127629 - -0.21663 -0.07147 -0.124671 - -0.286143 -0.073646 -0.122322 - -0.365661 -0.073907 -0.117276 - -0.409683 -0.075646 -0.116928 - -0.485634 -0.077822 -0.112143 - -0.5568 -0.077473 -0.108837 - -0.638232 -0.072862 -0.096483 - -0.706005 -0.066511 -0.085608 - -0.757944 -0.065554 -0.073689 - -0.812058 -0.064511 -0.062553 - -0.838506 -0.065293 -0.06264 -e -v - 0.058638 -0.067251 -0.125628 - 0.023229 -0.074167 -0.128847 - -0.022359 -0.071035 -0.129978 - -0.07395 -0.071644 -0.128412 - -0.153555 -0.077212 -0.125976 - -0.21663 -0.07991 -0.121713 - -0.286143 -0.081041 -0.117537 - -0.365661 -0.080257 -0.111708 - -0.409683 -0.081476 -0.110838 - -0.485634 -0.083389 -0.106314 - -0.5568 -0.08078 -0.101703 - -0.638232 -0.075386 -0.089697 - -0.706005 -0.069296 -0.079779 - -0.757944 -0.067033 -0.068208 - -0.812058 -0.064685 -0.057246 - -0.838506 -0.065467 -0.056724 -e -v - 0.058638 -0.0696 -0.117885 - 0.023229 -0.078691 -0.1218 - -0.022359 -0.07817 -0.125541 - -0.07395 -0.079301 -0.124758 - -0.153555 -0.084173 -0.120582 - -0.21663 -0.085391 -0.114666 - -0.286143 -0.085652 -0.110055 - -0.365661 -0.084868 -0.104487 - -0.409683 -0.085042 -0.103443 - -0.485634 -0.085478 -0.098571 - -0.5568 -0.081128 -0.093873 - -0.638232 -0.076865 -0.08265 - -0.706005 -0.071383 -0.073602 - -0.757944 -0.067817 -0.062553 - -0.812058 -0.064337 -0.051939 - -0.838506 -0.065206 -0.050808 -e -v - 0.058638 -0.07047 -0.109794 - 0.023229 -0.080431 -0.113535 - -0.022359 -0.082171 -0.118233 - -0.07395 -0.084173 -0.117972 - -0.153555 -0.086521 -0.11223 - -0.21663 -0.087044 -0.105879 - -0.286143 -0.087479 -0.101355 - -0.365661 -0.086608 -0.096222 - -0.409683 -0.085391 -0.095091 - -0.485634 -0.086 -0.09048 - -0.5568 -0.081562 -0.086043 - -0.638232 -0.077822 -0.075429 - -0.706005 -0.072601 -0.067164 - -0.757944 -0.068077 -0.056898 - -0.812058 -0.06364 -0.046632 - -0.838506 -0.064337 -0.044979 -e -v - 0.058638 -0.070209 -0.101616 - 0.023229 -0.07991 -0.105009 - -0.022359 -0.083563 -0.109968 - -0.07395 -0.086957 -0.109968 - -0.153555 -0.086957 -0.103356 - -0.21663 -0.08687 -0.096918 - -0.286143 -0.087652 -0.092481 - -0.365661 -0.086608 -0.087696 - -0.409683 -0.085826 -0.086652 - -0.485634 -0.086173 -0.082389 - -0.5568 -0.081823 -0.078213 - -0.638232 -0.078083 -0.068121 - -0.706005 -0.073123 -0.060726 - -0.757944 -0.067817 -0.051243 - -0.812058 -0.062335 -0.041499 - -0.838506 -0.062596 -0.039324 -e -v - 0.058638 -0.070122 -0.093438 - 0.023229 -0.079475 -0.096483 - -0.022359 -0.082781 -0.101529 - -0.07395 -0.087479 -0.101529 - -0.153555 -0.087739 -0.094569 - -0.21663 -0.087739 -0.08787 - -0.286143 -0.088262 -0.083607 - -0.365661 -0.087044 -0.079083 - -0.409683 -0.086 -0.0783 - -0.485634 -0.085913 -0.074298 - -0.5568 -0.081997 -0.070296 - -0.638232 -0.078257 -0.0609 - -0.706005 -0.072862 -0.054201 - -0.757944 -0.066859 -0.045675 - -0.812058 -0.060247 -0.03654 - -0.838506 -0.059987 -0.034017 -e -v - 0.058638 -0.071166 -0.085347 - 0.023229 -0.080257 -0.087957 - -0.022359 -0.082084 -0.093177 - -0.07395 -0.087044 -0.093003 - -0.153555 -0.088436 -0.085695 - -0.21663 -0.088523 -0.078909 - -0.286143 -0.088958 -0.07482 - -0.365661 -0.087305 -0.070557 - -0.409683 -0.086 -0.069861 - -0.485634 -0.085391 -0.066207 - -0.5568 -0.081997 -0.062466 - -0.638232 -0.078344 -0.053679 - -0.706005 -0.071906 -0.047763 - -0.757944 -0.065206 -0.040281 - -0.812058 -0.057551 -0.032016 - -0.838506 -0.056681 -0.029145 -e -v - 0.058638 -0.071514 -0.077169 - 0.023229 -0.080518 -0.079431 - -0.022359 -0.082868 -0.084738 - -0.07395 -0.087044 -0.084564 - -0.153555 -0.088871 -0.076821 - -0.21663 -0.088958 -0.069861 - -0.286143 -0.089218 -0.065946 - -0.365661 -0.087392 -0.062031 - -0.409683 -0.086 -0.061422 - -0.485634 -0.084955 -0.058116 - -0.5568 -0.081823 -0.054549 - -0.638232 -0.077909 -0.046371 - -0.706005 -0.070253 -0.041499 - -0.757944 -0.062684 -0.035148 - -0.812058 -0.054419 -0.027666 - -0.838506 -0.05294 -0.024621 -e -v - 0.058638 -0.068991 -0.069513 - 0.023229 -0.079388 -0.070992 - -0.022359 -0.083042 -0.076299 - -0.07395 -0.087566 -0.076038 - -0.153555 -0.088958 -0.067947 - -0.21663 -0.088958 -0.0609 - -0.286143 -0.089045 -0.056985 - -0.365661 -0.087131 -0.053418 - -0.409683 -0.085826 -0.05307 - -0.485634 -0.084868 -0.050025 - -0.5568 -0.081476 -0.046719 - -0.638232 -0.076778 -0.039237 - -0.706005 -0.067904 -0.035409 - -0.757944 -0.059551 -0.03045 - -0.812058 -0.051025 -0.023577 - -0.838506 -0.048763 -0.020358 -e -v - 0.058638 -0.063336 -0.063771 - 0.023229 -0.075212 -0.063684 - -0.022359 -0.082084 -0.067947 - -0.07395 -0.087044 -0.067599 - -0.153555 -0.088436 -0.059073 - -0.21663 -0.088436 -0.051852 - -0.286143 -0.088262 -0.048198 - -0.365661 -0.086695 -0.044892 - -0.409683 -0.085129 -0.044718 - -0.485634 -0.084868 -0.041934 - -0.5568 -0.081302 -0.038802 - -0.638232 -0.074602 -0.032277 - -0.706005 -0.064772 -0.029754 - -0.757944 -0.056072 -0.026013 - -0.812058 -0.047197 -0.019836 - -0.838506 -0.044066 -0.016878 -e -v - 0.058638 -0.055332 -0.062379 - 0.023229 -0.067904 -0.059508 - -0.022359 -0.078257 -0.060465 - -0.07395 -0.084868 -0.059334 - -0.153555 -0.086957 -0.050286 - -0.21663 -0.08626 -0.043152 - -0.286143 -0.086 -0.039585 - -0.365661 -0.084781 -0.03654 - -0.409683 -0.083738 -0.036366 - -0.485634 -0.083563 -0.03393 - -0.5568 -0.079736 -0.031146 - -0.638232 -0.071122 -0.025926 - -0.706005 -0.060943 -0.024447 - -0.757944 -0.052244 -0.02175 - -0.812058 -0.042847 -0.016791 - -0.838506 -0.038759 -0.014094 -e -v - 0.058638 -0.047241 -0.061335 - 0.023229 -0.059377 -0.058986 - -0.022359 -0.071557 -0.055506 - -0.07395 -0.080692 -0.052026 - -0.153555 -0.083999 -0.041934 - -0.21663 -0.08252 -0.034887 - -0.286143 -0.082259 -0.031581 - -0.365661 -0.081302 -0.028797 - -0.409683 -0.081041 -0.028449 - -0.485634 -0.080344 -0.026535 - -0.5568 -0.075473 -0.024621 - -0.638232 -0.066251 -0.020619 - -0.706005 -0.056332 -0.019836 - -0.757944 -0.048067 -0.017922 - -0.812058 -0.038063 -0.014355 - -0.838506 -0.033278 -0.012093 -e -v - 0.058638 -0.039063 -0.061074 - 0.023229 -0.050852 -0.058464 - -0.022359 -0.06338 -0.053418 - -0.07395 -0.073733 -0.047415 - -0.153555 -0.077996 -0.035496 - -0.21663 -0.076952 -0.02784 - -0.286143 -0.076865 -0.024534 - -0.365661 -0.075994 -0.022098 - -0.409683 -0.076081 -0.02175 - -0.485634 -0.075473 -0.020097 - -0.5568 -0.069991 -0.018966 - -0.638232 -0.061205 -0.015486 - -0.706005 -0.051635 -0.015312 - -0.757944 -0.043543 -0.014616 - -0.812058 -0.03319 -0.012267 - -0.838506 -0.027536 -0.010527 -e -v - 0.058638 -0.030885 -0.061683 - 0.023229 -0.042326 -0.058464 - -0.022359 -0.055115 -0.052026 - -0.07395 -0.066077 -0.043761 - -0.153555 -0.070514 -0.030798 - -0.21663 -0.07034 -0.021663 - -0.286143 -0.070862 -0.017922 - -0.365661 -0.070862 -0.015225 - -0.409683 -0.071035 -0.015051 - -0.485634 -0.070601 -0.013572 - -0.5568 -0.06599 -0.012267 - -0.638232 -0.057638 -0.009135 - -0.706005 -0.047807 -0.010005 - -0.757944 -0.038585 -0.011832 - -0.812058 -0.028144 -0.010527 - -0.838506 -0.021793 -0.009396 -e -v - 0.058638 -0.03045 -0.047415 - 0.023229 -0.042238 -0.042804 - -0.022359 -0.05929 -0.034974 - -0.07395 -0.065729 -0.034974 - -0.153555 -0.068251 -0.025143 - -0.21663 -0.068687 -0.017661 - -0.286143 -0.069469 -0.014529 - -0.365661 -0.069469 -0.012267 - -0.409683 -0.069209 -0.012441 - -0.485634 -0.069643 -0.010962 - -0.5568 -0.064859 -0.010005 - -0.638232 -0.056942 -0.007395 - -0.706005 -0.046937 -0.008178 - -0.757944 -0.038672 -0.009396 - -0.812058 -0.028144 -0.008439 - -0.838506 -0.021706 -0.007134 -e -v - 0.058638 -0.046893 -0.041934 - 0.023229 -0.055376 -0.037323 - -0.022359 -0.065206 -0.027318 - -0.07395 -0.067643 -0.026361 - -0.153555 -0.06773 -0.018879 - -0.21663 -0.068425 -0.013224 - -0.286143 -0.068251 -0.010962 - -0.365661 -0.069122 -0.009222 - -0.409683 -0.068164 -0.009483 - -0.485634 -0.068948 -0.008265 - -0.5568 -0.06425 -0.007569 - -0.638232 -0.056419 -0.005568 - -0.706005 -0.046241 -0.006177 - -0.757944 -0.038846 -0.007047 - -0.812058 -0.028144 -0.006351 - -0.838506 -0.021706 -0.005394 -e -v - 0.058638 -0.060726 -0.031581 - 0.023229 -0.065293 -0.027057 - -0.022359 -0.06973 -0.018879 - -0.07395 -0.069556 -0.017661 - -0.153555 -0.067556 -0.012528 - -0.21663 -0.068164 -0.008787 - -0.286143 -0.06773 -0.007308 - -0.365661 -0.068948 -0.00609 - -0.409683 -0.06773 -0.006351 - -0.485634 -0.068774 -0.005481 - -0.5568 -0.064075 -0.005046 - -0.638232 -0.056072 -0.003741 - -0.706005 -0.045805 -0.004176 - -0.757944 -0.038932 -0.004698 - -0.812058 -0.028144 -0.004176 - -0.838506 -0.021706 -0.003567 -e -v - 0.058638 -0.069774 -0.016965 - 0.023229 -0.071296 -0.014094 - -0.022359 -0.071993 -0.00957 - -0.07395 -0.07034 -0.008787 - -0.153555 -0.067643 -0.006264 - -0.21663 -0.068077 -0.00435 - -0.286143 -0.068077 -0.003567 - -0.365661 -0.068774 -0.003045 - -0.409683 -0.067556 -0.003132 - -0.485634 -0.068512 -0.002697 - -0.5568 -0.063988 -0.002523 - -0.638232 -0.05581 -0.001827 - -0.706005 -0.045545 -0.002088 - -0.757944 -0.039019 -0.002349 - -0.812058 -0.028144 -0.002088 - -0.838506 -0.021706 -0.00174 -e -v - 0.058638 -0.072819 0.0 - 0.023229 -0.073211 0.0 - -0.022359 -0.071819 0.0 - -0.07395 -0.069991 0.0 - -0.153555 -0.068164 0.0 - -0.21663 -0.068164 0.0 - -0.286143 -0.069122 0.0 - -0.365661 -0.068599 0.0 - -0.409683 -0.06773 0.0 - -0.485634 -0.068164 0.0 - -0.5568 -0.063988 0.0 - -0.638232 -0.055723 0.0 - -0.706005 -0.045632 0.0 - -0.757944 -0.039193 0.0 - -0.812058 -0.028144 0.0 - -0.838506 -0.021706 0.0 -e -v - 0.135894 -0.001566 -0.050025 - 0.135894 -0.001958 -0.061944 - 0.135894 -0.001522 -0.050025 -e -v - 0.058638 -0.03045 -0.047241 - 0.058638 0.016748 -0.050025 - 0.058638 0.017269 -0.060639 - 0.058638 -0.030233 -0.061074 - 0.058638 -0.030406 -0.047241 -e -v - 0.135894 -0.001566 -0.050025 - 0.058638 -0.030406 -0.047241 -e -v - 0.135894 -0.001566 -0.050025 - 0.058638 0.016748 -0.050025 -e -v - 0.135894 -0.002001 -0.061944 - 0.058638 0.017269 -0.060639 -e -v - 0.135894 -0.002001 -0.061944 - 0.058638 -0.030233 -0.061074 -e -v - 0.135894 -0.001566 -0.050025 - 0.058638 -0.030406 -0.047241 -e -v - 0.230985 0.027492 -0.065163 - 0.230985 0.027536 -0.065076 - 0.230985 0.027536 -0.064989 - 0.230985 0.027536 -0.064902 - 0.230985 0.027536 -0.064815 - 0.230985 0.027536 -0.064728 - 0.230985 0.027536 -0.064641 - 0.230985 0.027796 -0.126933 - 0.230985 0.027536 -0.065163 -e -v - 0.217674 0.020358 -0.065946 - 0.217674 0.021185 -0.065685 - 0.217674 0.022055 -0.065337 - 0.217674 0.022838 -0.065076 - 0.217674 0.023707 -0.064815 - 0.217674 0.02449 -0.064554 - 0.217674 0.025361 -0.064293 - 0.217674 0.026144 -0.064032 - 0.217674 0.027013 -0.063684 - 0.217674 0.027883 -0.063423 - 0.217674 0.028667 -0.063162 - 0.217674 0.028667 -0.128238 - 0.217674 0.027883 -0.12789 - 0.217674 0.027013 -0.127629 - 0.217674 0.026144 -0.127368 - 0.217674 0.025361 -0.127107 - 0.217674 0.02449 -0.126846 - 0.217674 0.023707 -0.126585 - 0.217674 0.022838 -0.126237 - 0.217674 0.022055 -0.125976 - 0.217674 0.021185 -0.125715 - 0.217674 0.020402 -0.125454 - 0.217674 0.025882 -0.125019 - 0.217674 0.025448 -0.065946 - 0.217674 0.020402 -0.065946 -e -v - 0.164691 -0.006612 -0.06525 - 0.164691 -0.003263 -0.063336 - 0.164691 0.000304 -0.06177 - 0.164691 0.004132 -0.060987 - 0.164691 0.007961 -0.060639 - 0.164691 0.011875 -0.060639 - 0.164691 0.015703 -0.060552 - 0.164691 0.019619 -0.060465 - 0.164691 0.023447 -0.060552 - 0.164691 0.027362 -0.060726 - 0.164691 0.031189 -0.060987 - 0.164691 0.031973 -0.131544 - 0.164691 0.027971 -0.131805 - 0.164691 0.024055 -0.131805 - 0.164691 0.020054 -0.131631 - 0.164691 0.016051 -0.131283 - 0.164691 0.012137 -0.130761 - 0.164691 0.008221 -0.129978 - 0.164691 0.004393 -0.129021 - 0.164691 0.000565 -0.127803 - 0.164691 -0.003176 -0.126411 - 0.164691 -0.00683 -0.124758 - 0.164691 0.018575 -0.124671 - 0.164691 0.018313 -0.065163 - 0.164691 -0.006568 -0.06525 -e -v - 0.111621 -0.033669 -0.065946 - 0.111621 -0.027883 -0.062205 - 0.111621 -0.021185 -0.060987 - 0.111621 -0.014311 -0.0609 - 0.111621 -0.007438 -0.060465 - 0.111621 -0.000565 -0.060117 - 0.111621 0.006307 -0.06003 - 0.111621 0.01318 -0.06003 - 0.111621 0.020054 -0.060291 - 0.111621 0.026927 -0.060726 - 0.111621 0.033712 -0.061335 - 0.111621 0.033712 -0.132327 - 0.111621 0.02684 -0.132327 - 0.111621 0.019879 -0.13224 - 0.111621 0.01292 -0.132153 - 0.111621 0.00596 -0.132066 - 0.111621 -0.000914 -0.131979 - 0.111621 -0.007873 -0.132066 - 0.111621 -0.014833 -0.132588 - 0.111621 -0.021706 -0.131892 - 0.111621 -0.027971 -0.129021 - 0.111621 -0.033625 -0.125019 - 0.111621 0.018052 -0.125019 - 0.111621 0.018488 -0.065946 - 0.111621 -0.033625 -0.065946 -e -v - 0.058638 -0.060204 -0.065511 - 0.058638 -0.052157 -0.061161 - 0.058638 -0.042238 -0.0609 - 0.058638 -0.03232 -0.060639 - 0.058638 -0.022403 -0.060552 - 0.058638 -0.012485 -0.060465 - 0.058638 -0.002567 -0.060291 - 0.058638 0.007351 -0.060291 - 0.058638 0.017269 -0.060291 - 0.058638 0.027188 -0.060291 - 0.058638 0.037106 -0.060465 - 0.058638 0.037367 -0.130065 - 0.058638 0.027448 -0.130935 - 0.058638 0.017531 -0.131631 - 0.058638 0.007612 -0.132066 - 0.058638 -0.002305 -0.132327 - 0.058638 -0.012223 -0.132414 - 0.058638 -0.022141 -0.132327 - 0.058638 -0.03206 -0.131979 - 0.058638 -0.041977 -0.131457 - 0.058638 -0.051895 -0.131457 - 0.058638 -0.059117 -0.125541 - 0.058638 0.017879 -0.125193 - 0.058638 0.016834 -0.06525 - 0.058638 -0.06016 -0.065511 -e -v - 0.230985 0.027492 -0.065163 - 0.217674 0.020402 -0.065946 - 0.164691 -0.006568 -0.06525 - 0.111621 -0.033625 -0.065946 - 0.058638 -0.06016 -0.065511 -e -v - 0.230985 0.027492 -0.065076 - 0.217674 0.021185 -0.065685 - 0.164691 -0.003263 -0.063336 - 0.111621 -0.027883 -0.062205 - 0.058638 -0.052157 -0.061161 -e -v - 0.230985 0.027492 -0.065076 - 0.217674 0.022055 -0.065337 - 0.164691 0.000304 -0.06177 - 0.111621 -0.021185 -0.060987 - 0.058638 -0.042238 -0.0609 -e -v - 0.230985 0.027492 -0.064989 - 0.217674 0.022838 -0.065076 - 0.164691 0.004132 -0.060987 - 0.111621 -0.014311 -0.0609 - 0.058638 -0.03232 -0.060639 -e -v - 0.230985 0.027492 -0.064989 - 0.217674 0.023707 -0.064815 - 0.164691 0.007961 -0.060639 - 0.111621 -0.007438 -0.060465 - 0.058638 -0.022403 -0.060552 -e -v - 0.230985 0.027492 -0.064902 - 0.217674 0.02449 -0.064554 - 0.164691 0.011875 -0.060639 - 0.111621 -0.000565 -0.060117 - 0.058638 -0.012485 -0.060465 -e -v - 0.230985 0.027492 -0.064902 - 0.217674 0.025361 -0.064293 - 0.164691 0.015703 -0.060552 - 0.111621 0.006307 -0.06003 - 0.058638 -0.002567 -0.060291 -e -v - 0.230985 0.027492 -0.064815 - 0.217674 0.026144 -0.064032 - 0.164691 0.019619 -0.060465 - 0.111621 0.01318 -0.06003 - 0.058638 0.007351 -0.060291 -e -v - 0.230985 0.027492 -0.064728 - 0.217674 0.027013 -0.063684 - 0.164691 0.023447 -0.060552 - 0.111621 0.020054 -0.060291 - 0.058638 0.017269 -0.060291 -e -v - 0.230985 0.027492 -0.064728 - 0.217674 0.027883 -0.063423 - 0.164691 0.027362 -0.060726 - 0.111621 0.026927 -0.060726 - 0.058638 0.027188 -0.060291 -e -v - 0.230985 0.027492 -0.064641 - 0.217674 0.028667 -0.063162 - 0.164691 0.031189 -0.060987 - 0.111621 0.033712 -0.061335 - 0.058638 0.037106 -0.060465 -e -v - 0.230985 0.027753 -0.126933 - 0.217674 0.028667 -0.128238 - 0.164691 0.031973 -0.131544 - 0.111621 0.033712 -0.132327 - 0.058638 0.037367 -0.130065 -e -v - 0.230985 0.027753 -0.126933 - 0.217674 0.027883 -0.12789 - 0.164691 0.027971 -0.131805 - 0.111621 0.02684 -0.132327 - 0.058638 0.027448 -0.130935 -e -v - 0.230985 0.027753 -0.126933 - 0.217674 0.027013 -0.127629 - 0.164691 0.024055 -0.131805 - 0.111621 0.019879 -0.13224 - 0.058638 0.017531 -0.131631 -e -v - 0.230985 0.027753 -0.126933 - 0.217674 0.026144 -0.127368 - 0.164691 0.020054 -0.131631 - 0.111621 0.01292 -0.132153 - 0.058638 0.007612 -0.132066 -e -v - 0.230985 0.027753 -0.126933 - 0.217674 0.025361 -0.127107 - 0.164691 0.016051 -0.131283 - 0.111621 0.00596 -0.132066 - 0.058638 -0.002305 -0.132327 -e -v - 0.230985 0.027753 -0.126933 - 0.217674 0.02449 -0.126846 - 0.164691 0.012137 -0.130761 - 0.111621 -0.000914 -0.131979 - 0.058638 -0.012223 -0.132414 -e -v - 0.230985 0.027753 -0.126933 - 0.217674 0.023707 -0.126585 - 0.164691 0.008221 -0.129978 - 0.111621 -0.007873 -0.132066 - 0.058638 -0.022141 -0.132327 -e -v - 0.230985 0.027753 -0.126933 - 0.217674 0.022838 -0.126237 - 0.164691 0.004393 -0.129021 - 0.111621 -0.014833 -0.132588 - 0.058638 -0.03206 -0.131979 -e -v - 0.230985 0.027753 -0.126933 - 0.217674 0.022055 -0.125976 - 0.164691 0.000565 -0.127803 - 0.111621 -0.021706 -0.131892 - 0.058638 -0.041977 -0.131457 -e -v - 0.230985 0.027753 -0.126933 - 0.217674 0.021185 -0.125715 - 0.164691 -0.003176 -0.126411 - 0.111621 -0.027971 -0.129021 - 0.058638 -0.051895 -0.131457 -e -v - 0.230985 0.027753 -0.126933 - 0.217674 0.020402 -0.125454 - 0.164691 -0.00683 -0.124758 - 0.111621 -0.033625 -0.125019 - 0.058638 -0.059117 -0.125541 -e -v - 0.230985 0.027753 -0.126933 - 0.217674 0.025882 -0.125019 - 0.164691 0.018575 -0.124671 - 0.111621 0.018052 -0.125019 - 0.058638 0.017879 -0.125193 -e -v - 0.230985 0.027492 -0.065163 - 0.217674 0.025448 -0.065946 - 0.164691 0.018313 -0.065163 - 0.111621 0.018488 -0.065946 - 0.058638 0.016834 -0.06525 -e -v - 0.230985 0.027492 -0.065163 - 0.217674 0.020402 -0.065946 - 0.164691 -0.006568 -0.06525 - 0.111621 -0.033625 -0.065946 - 0.058638 -0.06016 -0.065511 -e -v - 0.111621 0.018444 -0.13137 -e -v - 0.058638 0.004785 -0.131457 - 0.058638 0.007351 -0.13137 - 0.058638 0.009787 -0.13137 - 0.058638 0.012223 -0.13137 - 0.058638 0.014659 -0.13137 - 0.058638 0.017096 -0.13137 - 0.058638 0.019531 -0.131283 - 0.058638 0.022055 -0.131283 - 0.058638 0.02449 -0.131283 - 0.058638 0.026927 -0.131283 - 0.058638 0.026492 -0.132762 - 0.058638 0.026144 -0.134241 - 0.058638 0.025709 -0.13572 - 0.058638 0.025361 -0.137199 - 0.058638 0.0251 -0.138765 - 0.058638 0.024751 -0.140244 - 0.058638 0.024403 -0.141723 - 0.058638 0.023795 -0.143202 - 0.058638 0.023186 -0.144594 - 0.058638 0.022403 -0.145899 - 0.058638 0.021533 -0.147204 - 0.058638 0.020314 -0.148161 - 0.058638 0.01901 -0.148944 - 0.058638 0.017531 -0.149466 - 0.058638 0.016051 -0.149727 - 0.058638 0.014311 -0.149814 - 0.058638 0.012659 -0.149553 - 0.058638 0.011266 -0.148596 - 0.058638 0.010223 -0.147291 - 0.058638 0.009266 -0.145899 - 0.058638 0.008396 -0.14442 - 0.058638 0.007699 -0.142941 - 0.058638 0.007091 -0.141288 - 0.058638 0.006568 -0.139722 - 0.058638 0.006134 -0.138069 - 0.058638 0.005699 -0.136416 - 0.058638 0.00535 -0.134763 - 0.058638 0.005089 -0.13311 - 0.058638 0.004829 -0.131457 -e -v - 0.023229 -0.001566 -0.131457 - 0.023229 0.002132 -0.131457 - 0.023229 0.005786 -0.131457 - 0.023229 0.009352 -0.131544 - 0.023229 0.013006 -0.131544 - 0.023229 0.016661 -0.131544 - 0.023229 0.020227 -0.131544 - 0.023229 0.023882 -0.131631 - 0.023229 0.027448 -0.131631 - 0.023229 0.031103 -0.131631 - 0.023229 0.030841 -0.133806 - 0.023229 0.030493 -0.135981 - 0.023229 0.030058 -0.138156 - 0.023229 0.029624 -0.140244 - 0.023229 0.029102 -0.142332 - 0.023229 0.028579 -0.144507 - 0.023229 0.027883 -0.146508 - 0.023229 0.026927 -0.148509 - 0.023229 0.025969 -0.15051 - 0.023229 0.024838 -0.152337 - 0.023229 0.023534 -0.154077 - 0.023229 0.021881 -0.155469 - 0.023229 0.019879 -0.156513 - 0.023229 0.017879 -0.157122 - 0.023229 0.015703 -0.15747 - 0.023229 0.013354 -0.156948 - 0.023229 0.01118 -0.155991 - 0.023229 0.009266 -0.154599 - 0.023229 0.007612 -0.153033 - 0.023229 0.006047 -0.151206 - 0.023229 0.004655 -0.149205 - 0.023229 0.00361 -0.147117 - 0.023229 0.002654 -0.144942 - 0.023229 0.001783 -0.142767 - 0.023229 0.000914 -0.140592 - 0.023229 0.000131 -0.13833 - 0.023229 -0.000479 -0.136068 - 0.023229 -0.001001 -0.133719 - 0.023229 -0.001522 -0.131457 -e -v - -0.022359 -0.009309 -0.12963 - -0.022359 -0.004306 -0.12963 - -0.022359 0.000653 -0.12963 - -0.022359 0.005524 -0.129717 - -0.022359 0.010483 -0.129717 - -0.022359 0.015442 -0.129717 - -0.022359 0.020402 -0.129717 - -0.022359 0.025361 -0.129717 - -0.022359 0.03032 -0.129717 - -0.022359 0.035278 -0.129804 - -0.022359 0.035105 -0.132675 - -0.022359 0.034757 -0.135546 - -0.022359 0.034322 -0.13833 - -0.022359 0.033712 -0.141201 - -0.022359 0.033016 -0.143985 - -0.022359 0.032233 -0.146769 - -0.022359 0.031189 -0.149466 - -0.022359 0.029885 -0.152076 - -0.022359 0.028406 -0.154512 - -0.022359 0.026752 -0.156948 - -0.022359 0.024838 -0.159123 - -0.022359 0.022576 -0.160863 - -0.022359 0.019966 -0.162168 - -0.022359 0.017269 -0.163038 - -0.022359 0.014399 -0.163473 - -0.022359 0.011266 -0.163038 - -0.022359 0.008309 -0.162081 - -0.022359 0.005612 -0.160428 - -0.022359 0.003436 -0.158166 - -0.022359 0.001522 -0.155643 - -0.022359 -0.000304 -0.15312 - -0.022359 -0.001871 -0.150336 - -0.022359 -0.003263 -0.147552 - -0.022359 -0.004568 -0.144681 - -0.022359 -0.005699 -0.141723 - -0.022359 -0.00683 -0.138765 - -0.022359 -0.007786 -0.13572 - -0.022359 -0.00857 -0.132675 - -0.022359 -0.009266 -0.12963 -e -v - -0.07395 -0.015399 -0.127977 - -0.07395 -0.00944 -0.12789 - -0.07395 -0.003523 -0.12789 - -0.07395 0.002392 -0.127803 - -0.07395 0.008309 -0.127716 - -0.07395 0.014225 -0.127716 - -0.07395 0.020141 -0.127629 - -0.07395 0.026057 -0.127629 - -0.07395 0.031973 -0.127542 - -0.07395 0.037889 -0.127455 - -0.07395 0.037714 -0.130935 - -0.07395 0.037367 -0.134415 - -0.07395 0.036757 -0.137808 - -0.07395 0.036061 -0.141201 - -0.07395 0.035191 -0.144594 - -0.07395 0.034148 -0.1479 - -0.07395 0.032842 -0.151119 - -0.07395 0.03145 -0.154251 - -0.07395 0.029797 -0.157383 - -0.07395 0.027883 -0.160254 - -0.07395 0.025534 -0.162777 - -0.07395 0.022924 -0.165126 - -0.07395 0.019966 -0.166953 - -0.07395 0.016748 -0.168171 - -0.07395 0.013354 -0.16878 - -0.07395 0.009701 -0.168258 - -0.07395 0.006655 -0.166257 - -0.07395 0.004132 -0.16356 - -0.07395 0.001696 -0.160776 - -0.07395 -0.000304 -0.157644 - -0.07395 -0.002132 -0.154425 - -0.07395 -0.003958 -0.151206 - -0.07395 -0.005786 -0.147987 - -0.07395 -0.007438 -0.144681 - -0.07395 -0.009092 -0.141375 - -0.07395 -0.010744 -0.138069 - -0.07395 -0.012311 -0.134676 - -0.07395 -0.013876 -0.13137 - -0.07395 -0.015356 -0.127977 -e -v - -0.153555 -0.026448 -0.124323 - -0.153555 -0.019531 -0.124323 - -0.153555 -0.012571 -0.12441 - -0.153555 -0.005699 -0.124584 - -0.153555 0.001174 -0.124758 - -0.153555 0.008047 -0.124758 - -0.153555 0.014921 -0.124758 - -0.153555 0.021881 -0.124671 - -0.153555 0.028754 -0.12441 - -0.153555 0.035627 -0.124149 - -0.153555 0.035627 -0.127803 - -0.153555 0.035365 -0.131544 - -0.153555 0.034931 -0.135198 - -0.153555 0.034235 -0.138765 - -0.153555 0.033365 -0.142332 - -0.153555 0.032407 -0.145899 - -0.153555 0.031624 -0.149466 - -0.153555 0.030668 -0.153033 - -0.153555 0.029537 -0.1566 - -0.153555 0.028058 -0.159993 - -0.153555 0.026492 -0.163299 - -0.153555 0.024751 -0.166518 - -0.153555 0.022924 -0.169737 - -0.153555 0.021097 -0.172869 - -0.153555 0.020227 -0.178002 - -0.153555 0.000392 -0.178524 - -0.153555 -0.000479 -0.172956 - -0.153555 -0.002305 -0.169128 - -0.153555 -0.004132 -0.1653 - -0.153555 -0.006134 -0.161559 - -0.153555 -0.008396 -0.157992 - -0.153555 -0.010571 -0.154338 - -0.153555 -0.012745 -0.150771 - -0.153555 -0.014833 -0.14703 - -0.153555 -0.016921 -0.143289 - -0.153555 -0.018835 -0.139548 - -0.153555 -0.020837 -0.135807 - -0.153555 -0.022751 -0.131979 - -0.153555 -0.024578 -0.128238 - -0.153555 -0.026405 -0.124323 -e -v - -0.21663 -0.029058 -0.122322 - -0.21663 -0.021881 -0.121539 - -0.21663 -0.014747 -0.121278 - -0.21663 -0.007612 -0.121539 - -0.21663 -0.000479 -0.121626 - -0.21663 0.006655 -0.1218 - -0.21663 0.01379 -0.1218 - -0.21663 0.02101 -0.1218 - -0.21663 0.028144 -0.121713 - -0.21663 0.035278 -0.121539 - -0.21663 0.034931 -0.125367 - -0.21663 0.034408 -0.129108 - -0.21663 0.033712 -0.132849 - -0.21663 0.032842 -0.136503 - -0.21663 0.031886 -0.140157 - -0.21663 0.031189 -0.143898 - -0.21663 0.030841 -0.147639 - -0.21663 0.030406 -0.151467 - -0.21663 0.029797 -0.155208 - -0.21663 0.028754 -0.158775 - -0.21663 0.027448 -0.162429 - -0.21663 0.026665 -0.166083 - -0.21663 0.026057 -0.169824 - -0.21663 0.025796 -0.173652 - -0.21663 0.025796 -0.174957 - -0.21663 -0.000827 -0.17574 - -0.21663 -0.000827 -0.172521 - -0.21663 -0.003089 -0.168693 - -0.21663 -0.005263 -0.164865 - -0.21663 -0.007438 -0.161037 - -0.21663 -0.009613 -0.157122 - -0.21663 -0.011702 -0.153207 - -0.21663 -0.01379 -0.149379 - -0.21663 -0.015965 -0.145464 - -0.21663 -0.018052 -0.141549 - -0.21663 -0.020227 -0.137721 - -0.21663 -0.022403 -0.133893 - -0.21663 -0.024665 -0.130065 - -0.21663 -0.02684 -0.12615 - -0.21663 -0.029014 -0.122322 -e -v - -0.286143 -0.031929 -0.119973 - -0.286143 -0.024665 -0.119799 - -0.286143 -0.017357 -0.119799 - -0.286143 -0.010135 -0.119886 - -0.286143 -0.002914 -0.119886 - -0.286143 0.004393 -0.119799 - -0.286143 0.011614 -0.119625 - -0.286143 0.018835 -0.119364 - -0.286143 0.026057 -0.119103 - -0.286143 0.033365 -0.118755 - -0.286143 0.03319 -0.122583 - -0.286143 0.032842 -0.126411 - -0.286143 0.032407 -0.130239 - -0.286143 0.031799 -0.134067 - -0.286143 0.031277 -0.137895 - -0.286143 0.030668 -0.141723 - -0.286143 0.030145 -0.145551 - -0.286143 0.02971 -0.149379 - -0.286143 0.02945 -0.153294 - -0.286143 0.029362 -0.157122 - -0.286143 0.029275 -0.161037 - -0.286143 0.029102 -0.164865 - -0.286143 0.028754 -0.168693 - -0.286143 0.028406 -0.172608 - -0.286143 0.028406 -0.175305 - -0.286143 -0.001001 -0.175914 - -0.286143 -0.002479 -0.170433 - -0.286143 -0.005176 -0.166518 - -0.286143 -0.007351 -0.162603 - -0.286143 -0.009613 -0.158775 - -0.286143 -0.011789 -0.15486 - -0.286143 -0.014051 -0.151032 - -0.286143 -0.016313 -0.147117 - -0.286143 -0.018488 -0.143202 - -0.286143 -0.02075 -0.139374 - -0.286143 -0.023012 -0.135459 - -0.286143 -0.025186 -0.131544 - -0.286143 -0.027448 -0.127716 - -0.286143 -0.029624 -0.123801 - -0.286143 -0.031886 -0.119973 -e -v - -0.365661 -0.034713 -0.118755 - -0.365661 -0.027796 -0.118146 - -0.365661 -0.020924 -0.118059 - -0.365661 -0.014051 -0.118059 - -0.365661 -0.007091 -0.11832 - -0.365661 -0.000217 -0.11832 - -0.365661 0.006655 -0.117972 - -0.365661 0.013528 -0.117711 - -0.365661 0.020402 -0.117624 - -0.365661 0.027362 -0.117624 - -0.365661 0.02771 -0.122061 - -0.365661 0.02771 -0.12615 - -0.365661 0.027623 -0.130152 - -0.365661 0.027536 -0.134241 - -0.365661 0.027362 -0.138243 - -0.365661 0.027275 -0.142332 - -0.365661 0.027188 -0.146334 - -0.365661 0.027013 -0.150423 - -0.365661 0.026927 -0.154425 - -0.365661 0.026752 -0.158427 - -0.365661 0.026492 -0.162516 - -0.365661 0.026231 -0.166518 - -0.365661 0.025969 -0.17052 - -0.365661 0.025709 -0.174609 - -0.365661 0.025709 -0.176436 - -0.365661 -4.4e-05 -0.176697 - -0.365661 -0.001001 -0.17487 - -0.365661 -0.00361 -0.17052 - -0.365661 -0.006134 -0.166257 - -0.365661 -0.008744 -0.161907 - -0.365661 -0.011354 -0.157644 - -0.365661 -0.013964 -0.153294 - -0.365661 -0.016573 -0.148944 - -0.365661 -0.019096 -0.144681 - -0.365661 -0.021706 -0.140331 - -0.365661 -0.024317 -0.135981 - -0.365661 -0.026927 -0.131718 - -0.365661 -0.02945 -0.127368 - -0.365661 -0.03206 -0.123105 - -0.365661 -0.034669 -0.118755 -e -v - -0.409683 -0.037236 -0.118233 - -0.409683 -0.030406 -0.118146 - -0.409683 -0.02362 -0.118059 - -0.409683 -0.016834 -0.117972 - -0.409683 -0.010049 -0.117885 - -0.409683 -0.003263 -0.117798 - -0.409683 0.003523 -0.117711 - -0.409683 0.010309 -0.117624 - -0.409683 0.017096 -0.117537 - -0.409683 0.023882 -0.11745 - -0.409683 0.02423 -0.121626 - -0.409683 0.024055 -0.125802 - -0.409683 0.023969 -0.130065 - -0.409683 0.023795 -0.134241 - -0.409683 0.02362 -0.138417 - -0.409683 0.023534 -0.14268 - -0.409683 0.023359 -0.146856 - -0.409683 0.023272 -0.151032 - -0.409683 0.023099 -0.155208 - -0.409683 0.022924 -0.159471 - -0.409683 0.022838 -0.163647 - -0.409683 0.022664 -0.167823 - -0.409683 0.022489 -0.171999 - -0.409683 0.022403 -0.176262 - -0.409683 0.022838 -0.178089 - -0.409683 0.000739 -0.177828 - -0.409683 -0.000131 -0.176436 - -0.409683 -0.003001 -0.171999 - -0.409683 -0.005873 -0.167475 - -0.409683 -0.008656 -0.163038 - -0.409683 -0.011528 -0.158514 - -0.409683 -0.014399 -0.154077 - -0.409683 -0.017269 -0.149553 - -0.409683 -0.020054 -0.145116 - -0.409683 -0.022924 -0.140592 - -0.409683 -0.025796 -0.136155 - -0.409683 -0.028667 -0.131631 - -0.409683 -0.031537 -0.127194 - -0.409683 -0.034322 -0.12267 - -0.409683 -0.037193 -0.118233 -e -v - 0.111621 0.018444 -0.13137 - 0.058638 0.004829 -0.131457 - 0.023229 -0.001522 -0.131457 - -0.022359 -0.009266 -0.12963 - -0.07395 -0.015356 -0.127977 - -0.153555 -0.026405 -0.124323 - -0.21663 -0.029014 -0.122322 - -0.286143 -0.031886 -0.119973 - -0.365661 -0.034669 -0.118755 - -0.409683 -0.037193 -0.118233 -e -v - 0.111621 0.018444 -0.13137 - 0.058638 0.007351 -0.13137 - 0.023229 0.002132 -0.131457 - -0.022359 -0.004306 -0.12963 - -0.07395 -0.00944 -0.12789 - -0.153555 -0.019531 -0.124323 - -0.21663 -0.021881 -0.121539 - -0.286143 -0.024665 -0.119799 - -0.365661 -0.027796 -0.118146 - -0.409683 -0.030406 -0.118146 -e -v - 0.111621 0.018444 -0.13137 - 0.058638 0.009787 -0.13137 - 0.023229 0.005786 -0.131457 - -0.022359 0.000653 -0.12963 - -0.07395 -0.003523 -0.12789 - -0.153555 -0.012571 -0.12441 - -0.21663 -0.014747 -0.121278 - -0.286143 -0.017357 -0.119799 - -0.365661 -0.020924 -0.118059 - -0.409683 -0.02362 -0.118059 -e -v - 0.111621 0.018444 -0.13137 - 0.058638 0.012223 -0.13137 - 0.023229 0.009352 -0.131544 - -0.022359 0.005524 -0.129717 - -0.07395 0.002392 -0.127803 - -0.153555 -0.005699 -0.124584 - -0.21663 -0.007612 -0.121539 - -0.286143 -0.010135 -0.119886 - -0.365661 -0.014051 -0.118059 - -0.409683 -0.016834 -0.117972 -e -v - 0.111621 0.018444 -0.13137 - 0.058638 0.014659 -0.13137 - 0.023229 0.013006 -0.131544 - -0.022359 0.010483 -0.129717 - -0.07395 0.008309 -0.127716 - -0.153555 0.001174 -0.124758 - -0.21663 -0.000479 -0.121626 - -0.286143 -0.002914 -0.119886 - -0.365661 -0.007091 -0.11832 - -0.409683 -0.010049 -0.117885 -e -v - 0.111621 0.018444 -0.13137 - 0.058638 0.017096 -0.13137 - 0.023229 0.016661 -0.131544 - -0.022359 0.015442 -0.129717 - -0.07395 0.014225 -0.127716 - -0.153555 0.008047 -0.124758 - -0.21663 0.006655 -0.1218 - -0.286143 0.004393 -0.119799 - -0.365661 -0.000217 -0.11832 - -0.409683 -0.003263 -0.117798 -e -v - 0.111621 0.018444 -0.13137 - 0.058638 0.019531 -0.131283 - 0.023229 0.020227 -0.131544 - -0.022359 0.020402 -0.129717 - -0.07395 0.020141 -0.127629 - -0.153555 0.014921 -0.124758 - -0.21663 0.01379 -0.1218 - -0.286143 0.011614 -0.119625 - -0.365661 0.006655 -0.117972 - -0.409683 0.003523 -0.117711 -e -v - 0.111621 0.018444 -0.13137 - 0.058638 0.022055 -0.131283 - 0.023229 0.023882 -0.131631 - -0.022359 0.025361 -0.129717 - -0.07395 0.026057 -0.127629 - -0.153555 0.021881 -0.124671 - -0.21663 0.02101 -0.1218 - -0.286143 0.018835 -0.119364 - -0.365661 0.013528 -0.117711 - -0.409683 0.010309 -0.117624 -e -v - 0.111621 0.018444 -0.13137 - 0.058638 0.02449 -0.131283 - 0.023229 0.027448 -0.131631 - -0.022359 0.03032 -0.129717 - -0.07395 0.031973 -0.127542 - -0.153555 0.028754 -0.12441 - -0.21663 0.028144 -0.121713 - -0.286143 0.026057 -0.119103 - -0.365661 0.020402 -0.117624 - -0.409683 0.017096 -0.117537 -e -v - 0.111621 0.018444 -0.13137 - 0.058638 0.026927 -0.131283 - 0.023229 0.031103 -0.131631 - -0.022359 0.035278 -0.129804 - -0.07395 0.037889 -0.127455 - -0.153555 0.035627 -0.124149 - -0.21663 0.035278 -0.121539 - -0.286143 0.033365 -0.118755 - -0.365661 0.027362 -0.117624 - -0.409683 0.023882 -0.11745 -e -v - 0.111621 0.018444 -0.13137 - 0.058638 0.026492 -0.132762 - 0.023229 0.030841 -0.133806 - -0.022359 0.035105 -0.132675 - -0.07395 0.037714 -0.130935 - -0.153555 0.035627 -0.127803 - -0.21663 0.034931 -0.125367 - -0.286143 0.03319 -0.122583 - -0.365661 0.02771 -0.122061 - -0.409683 0.02423 -0.121626 -e -v - 0.111621 0.018444 -0.13137 - 0.058638 0.026144 -0.134241 - 0.023229 0.030493 -0.135981 - -0.022359 0.034757 -0.135546 - -0.07395 0.037367 -0.134415 - -0.153555 0.035365 -0.131544 - -0.21663 0.034408 -0.129108 - -0.286143 0.032842 -0.126411 - -0.365661 0.02771 -0.12615 - -0.409683 0.024055 -0.125802 -e -v - 0.111621 0.018444 -0.13137 - 0.058638 0.025709 -0.13572 - 0.023229 0.030058 -0.138156 - -0.022359 0.034322 -0.13833 - -0.07395 0.036757 -0.137808 - -0.153555 0.034931 -0.135198 - -0.21663 0.033712 -0.132849 - -0.286143 0.032407 -0.130239 - -0.365661 0.027623 -0.130152 - -0.409683 0.023969 -0.130065 -e -v - 0.111621 0.018444 -0.13137 - 0.058638 0.025361 -0.137199 - 0.023229 0.029624 -0.140244 - -0.022359 0.033712 -0.141201 - -0.07395 0.036061 -0.141201 - -0.153555 0.034235 -0.138765 - -0.21663 0.032842 -0.136503 - -0.286143 0.031799 -0.134067 - -0.365661 0.027536 -0.134241 - -0.409683 0.023795 -0.134241 -e -v - 0.111621 0.018444 -0.13137 - 0.058638 0.0251 -0.138765 - 0.023229 0.029102 -0.142332 - -0.022359 0.033016 -0.143985 - -0.07395 0.035191 -0.144594 - -0.153555 0.033365 -0.142332 - -0.21663 0.031886 -0.140157 - -0.286143 0.031277 -0.137895 - -0.365661 0.027362 -0.138243 - -0.409683 0.02362 -0.138417 -e -v - 0.111621 0.018444 -0.13137 - 0.058638 0.024751 -0.140244 - 0.023229 0.028579 -0.144507 - -0.022359 0.032233 -0.146769 - -0.07395 0.034148 -0.1479 - -0.153555 0.032407 -0.145899 - -0.21663 0.031189 -0.143898 - -0.286143 0.030668 -0.141723 - -0.365661 0.027275 -0.142332 - -0.409683 0.023534 -0.14268 -e -v - 0.111621 0.018444 -0.13137 - 0.058638 0.024403 -0.141723 - 0.023229 0.027883 -0.146508 - -0.022359 0.031189 -0.149466 - -0.07395 0.032842 -0.151119 - -0.153555 0.031624 -0.149466 - -0.21663 0.030841 -0.147639 - -0.286143 0.030145 -0.145551 - -0.365661 0.027188 -0.146334 - -0.409683 0.023359 -0.146856 -e -v - 0.111621 0.018444 -0.13137 - 0.058638 0.023795 -0.143202 - 0.023229 0.026927 -0.148509 - -0.022359 0.029885 -0.152076 - -0.07395 0.03145 -0.154251 - -0.153555 0.030668 -0.153033 - -0.21663 0.030406 -0.151467 - -0.286143 0.02971 -0.149379 - -0.365661 0.027013 -0.150423 - -0.409683 0.023272 -0.151032 -e -v - 0.111621 0.018444 -0.13137 - 0.058638 0.023186 -0.144594 - 0.023229 0.025969 -0.15051 - -0.022359 0.028406 -0.154512 - -0.07395 0.029797 -0.157383 - -0.153555 0.029537 -0.1566 - -0.21663 0.029797 -0.155208 - -0.286143 0.02945 -0.153294 - -0.365661 0.026927 -0.154425 - -0.409683 0.023099 -0.155208 -e -v - 0.111621 0.018444 -0.13137 - 0.058638 0.022403 -0.145899 - 0.023229 0.024838 -0.152337 - -0.022359 0.026752 -0.156948 - -0.07395 0.027883 -0.160254 - -0.153555 0.028058 -0.159993 - -0.21663 0.028754 -0.158775 - -0.286143 0.029362 -0.157122 - -0.365661 0.026752 -0.158427 - -0.409683 0.022924 -0.159471 -e -v - 0.111621 0.018444 -0.13137 - 0.058638 0.021533 -0.147204 - 0.023229 0.023534 -0.154077 - -0.022359 0.024838 -0.159123 - -0.07395 0.025534 -0.162777 - -0.153555 0.026492 -0.163299 - -0.21663 0.027448 -0.162429 - -0.286143 0.029275 -0.161037 - -0.365661 0.026492 -0.162516 - -0.409683 0.022838 -0.163647 -e -v - 0.111621 0.018444 -0.13137 - 0.058638 0.020314 -0.148161 - 0.023229 0.021881 -0.155469 - -0.022359 0.022576 -0.160863 - -0.07395 0.022924 -0.165126 - -0.153555 0.024751 -0.166518 - -0.21663 0.026665 -0.166083 - -0.286143 0.029102 -0.164865 - -0.365661 0.026231 -0.166518 - -0.409683 0.022664 -0.167823 -e -v - 0.111621 0.018444 -0.13137 - 0.058638 0.01901 -0.148944 - 0.023229 0.019879 -0.156513 - -0.022359 0.019966 -0.162168 - -0.07395 0.019966 -0.166953 - -0.153555 0.022924 -0.169737 - -0.21663 0.026057 -0.169824 - -0.286143 0.028754 -0.168693 - -0.365661 0.025969 -0.17052 - -0.409683 0.022489 -0.171999 -e -v - 0.111621 0.018444 -0.13137 - 0.058638 0.017531 -0.149466 - 0.023229 0.017879 -0.157122 - -0.022359 0.017269 -0.163038 - -0.07395 0.016748 -0.168171 - -0.153555 0.021097 -0.172869 - -0.21663 0.025796 -0.173652 - -0.286143 0.028406 -0.172608 - -0.365661 0.025709 -0.174609 - -0.409683 0.022403 -0.176262 -e -v - 0.111621 0.018444 -0.13137 - 0.058638 0.016051 -0.149727 - 0.023229 0.015703 -0.15747 - -0.022359 0.014399 -0.163473 - -0.07395 0.013354 -0.16878 - -0.153555 0.020227 -0.178002 - -0.21663 0.025796 -0.174957 - -0.286143 0.028406 -0.175305 - -0.365661 0.025709 -0.176436 - -0.409683 0.022838 -0.178089 -e -v - 0.111621 0.018444 -0.13137 - 0.058638 0.016051 -0.149727 - 0.023229 0.015703 -0.15747 - -0.022359 0.014399 -0.163473 - -0.07395 0.013354 -0.16878 - -0.153555 0.000392 -0.178524 - -0.21663 -0.000827 -0.17574 - -0.286143 -0.001001 -0.175914 - -0.365661 -4.4e-05 -0.176697 - -0.409683 0.000739 -0.177828 -e -v - 0.111621 0.018444 -0.13137 - 0.058638 0.014311 -0.149814 - 0.023229 0.013354 -0.156948 - -0.022359 0.011266 -0.163038 - -0.07395 0.009701 -0.168258 - -0.153555 -0.000479 -0.172956 - -0.21663 -0.000827 -0.172521 - -0.286143 -0.002479 -0.170433 - -0.365661 -0.001001 -0.17487 - -0.409683 -0.000131 -0.176436 -e -v - 0.111621 0.018444 -0.13137 - 0.058638 0.012659 -0.149553 - 0.023229 0.01118 -0.155991 - -0.022359 0.008309 -0.162081 - -0.07395 0.006655 -0.166257 - -0.153555 -0.002305 -0.169128 - -0.21663 -0.003089 -0.168693 - -0.286143 -0.005176 -0.166518 - -0.365661 -0.00361 -0.17052 - -0.409683 -0.003001 -0.171999 -e -v - 0.111621 0.018444 -0.13137 - 0.058638 0.011266 -0.148596 - 0.023229 0.009266 -0.154599 - -0.022359 0.005612 -0.160428 - -0.07395 0.004132 -0.16356 - -0.153555 -0.004132 -0.1653 - -0.21663 -0.005263 -0.164865 - -0.286143 -0.007351 -0.162603 - -0.365661 -0.006134 -0.166257 - -0.409683 -0.005873 -0.167475 -e -v - 0.111621 0.018444 -0.13137 - 0.058638 0.010223 -0.147291 - 0.023229 0.007612 -0.153033 - -0.022359 0.003436 -0.158166 - -0.07395 0.001696 -0.160776 - -0.153555 -0.006134 -0.161559 - -0.21663 -0.007438 -0.161037 - -0.286143 -0.009613 -0.158775 - -0.365661 -0.008744 -0.161907 - -0.409683 -0.008656 -0.163038 -e -v - 0.111621 0.018444 -0.13137 - 0.058638 0.009266 -0.145899 - 0.023229 0.006047 -0.151206 - -0.022359 0.001522 -0.155643 - -0.07395 -0.000304 -0.157644 - -0.153555 -0.008396 -0.157992 - -0.21663 -0.009613 -0.157122 - -0.286143 -0.011789 -0.15486 - -0.365661 -0.011354 -0.157644 - -0.409683 -0.011528 -0.158514 -e -v - 0.111621 0.018444 -0.13137 - 0.058638 0.008396 -0.14442 - 0.023229 0.004655 -0.149205 - -0.022359 -0.000304 -0.15312 - -0.07395 -0.002132 -0.154425 - -0.153555 -0.010571 -0.154338 - -0.21663 -0.011702 -0.153207 - -0.286143 -0.014051 -0.151032 - -0.365661 -0.013964 -0.153294 - -0.409683 -0.014399 -0.154077 -e -v - 0.111621 0.018444 -0.13137 - 0.058638 0.007699 -0.142941 - 0.023229 0.00361 -0.147117 - -0.022359 -0.001871 -0.150336 - -0.07395 -0.003958 -0.151206 - -0.153555 -0.012745 -0.150771 - -0.21663 -0.01379 -0.149379 - -0.286143 -0.016313 -0.147117 - -0.365661 -0.016573 -0.148944 - -0.409683 -0.017269 -0.149553 -e -v - 0.111621 0.018444 -0.13137 - 0.058638 0.007091 -0.141288 - 0.023229 0.002654 -0.144942 - -0.022359 -0.003263 -0.147552 - -0.07395 -0.005786 -0.147987 - -0.153555 -0.014833 -0.14703 - -0.21663 -0.015965 -0.145464 - -0.286143 -0.018488 -0.143202 - -0.365661 -0.019096 -0.144681 - -0.409683 -0.020054 -0.145116 -e -v - 0.111621 0.018444 -0.13137 - 0.058638 0.006568 -0.139722 - 0.023229 0.001783 -0.142767 - -0.022359 -0.004568 -0.144681 - -0.07395 -0.007438 -0.144681 - -0.153555 -0.016921 -0.143289 - -0.21663 -0.018052 -0.141549 - -0.286143 -0.02075 -0.139374 - -0.365661 -0.021706 -0.140331 - -0.409683 -0.022924 -0.140592 -e -v - 0.111621 0.018444 -0.13137 - 0.058638 0.006134 -0.138069 - 0.023229 0.000914 -0.140592 - -0.022359 -0.005699 -0.141723 - -0.07395 -0.009092 -0.141375 - -0.153555 -0.018835 -0.139548 - -0.21663 -0.020227 -0.137721 - -0.286143 -0.023012 -0.135459 - -0.365661 -0.024317 -0.135981 - -0.409683 -0.025796 -0.136155 -e -v - 0.111621 0.018444 -0.13137 - 0.058638 0.005699 -0.136416 - 0.023229 0.000131 -0.13833 - -0.022359 -0.00683 -0.138765 - -0.07395 -0.010744 -0.138069 - -0.153555 -0.020837 -0.135807 - -0.21663 -0.022403 -0.133893 - -0.286143 -0.025186 -0.131544 - -0.365661 -0.026927 -0.131718 - -0.409683 -0.028667 -0.131631 -e -v - 0.111621 0.018444 -0.13137 - 0.058638 0.00535 -0.134763 - 0.023229 -0.000479 -0.136068 - -0.022359 -0.007786 -0.13572 - -0.07395 -0.012311 -0.134676 - -0.153555 -0.022751 -0.131979 - -0.21663 -0.024665 -0.130065 - -0.286143 -0.027448 -0.127716 - -0.365661 -0.02945 -0.127368 - -0.409683 -0.031537 -0.127194 -e -v - 0.111621 0.018444 -0.13137 - 0.058638 0.005089 -0.13311 - 0.023229 -0.001001 -0.133719 - -0.022359 -0.00857 -0.132675 - -0.07395 -0.013876 -0.13137 - -0.153555 -0.024578 -0.128238 - -0.21663 -0.02684 -0.12615 - -0.286143 -0.029624 -0.123801 - -0.365661 -0.03206 -0.123105 - -0.409683 -0.034322 -0.12267 -e -v - 0.111621 0.018444 -0.13137 - 0.058638 0.004829 -0.131457 - 0.023229 -0.001522 -0.131457 - -0.022359 -0.009266 -0.12963 - -0.07395 -0.015356 -0.127977 - -0.153555 -0.026405 -0.124323 - -0.21663 -0.029014 -0.122322 - -0.286143 -0.031886 -0.119973 - -0.365661 -0.034669 -0.118755 - -0.409683 -0.037193 -0.118233 -e -v - -0.409683 -0.036888 -0.118059 - -0.409683 -0.016138 -0.117537 - -0.409683 0.004481 -0.117015 - -0.409683 0.0251 -0.116493 - -0.409683 0.024665 -0.129717 - -0.409683 0.02423 -0.142941 - -0.409683 0.023707 -0.156165 - -0.409683 0.023882 -0.179307 - -0.409683 0.002654 -0.179481 - -0.409683 -0.010571 -0.161298 - -0.409683 -0.012571 -0.157992 - -0.409683 -0.014573 -0.154686 - -0.409683 -0.016573 -0.15138 - -0.409683 -0.018662 -0.147987 - -0.409683 -0.020662 -0.144681 - -0.409683 -0.022664 -0.141375 - -0.409683 -0.024665 -0.137982 - -0.409683 -0.026752 -0.134676 - -0.409683 -0.028754 -0.13137 - -0.409683 -0.030755 -0.128064 - -0.409683 -0.032756 -0.124671 - -0.409683 -0.034844 -0.121365 - -0.409683 -0.036844 -0.118059 -e -v - -0.485634 -0.038541 -0.117189 - -0.485634 -0.019096 -0.117102 - -0.485634 0.000304 -0.117015 - -0.485634 0.019793 -0.116841 - -0.485634 0.019531 -0.13137 - -0.485634 0.019183 -0.145812 - -0.485634 0.018923 -0.160341 - -0.485634 0.018662 -0.178785 - -0.485634 0.005699 -0.179046 - -0.485634 -0.015878 -0.167997 - -0.485634 -0.019531 -0.165648 - -0.485634 -0.022576 -0.162603 - -0.485634 -0.024143 -0.158514 - -0.485634 -0.025534 -0.154338 - -0.485634 -0.02684 -0.150162 - -0.485634 -0.028144 -0.145986 - -0.485634 -0.029537 -0.141897 - -0.485634 -0.031016 -0.137721 - -0.485634 -0.032407 -0.133632 - -0.485634 -0.033886 -0.129456 - -0.485634 -0.035365 -0.125367 - -0.485634 -0.036931 -0.121278 - -0.485634 -0.038498 -0.117189 -e -v - -0.5568 -0.038976 -0.117189 - -0.5568 -0.021097 -0.118146 - -0.5568 -0.003176 -0.119016 - -0.5568 0.014659 -0.119973 - -0.5568 0.013964 -0.132675 - -0.5568 0.013702 -0.145464 - -0.5568 0.013528 -0.15834 - -0.5568 0.013616 -0.179133 - -0.5568 -0.025186 -0.175653 - -0.5568 -0.029885 -0.174609 - -0.5568 -0.032407 -0.170433 - -0.5568 -0.03319 -0.165648 - -0.5568 -0.033712 -0.160776 - -0.5568 -0.034235 -0.155991 - -0.5568 -0.034757 -0.151119 - -0.5568 -0.035365 -0.146247 - -0.5568 -0.035887 -0.141375 - -0.5568 -0.036497 -0.13659 - -0.5568 -0.037106 -0.131718 - -0.5568 -0.037714 -0.126846 - -0.5568 -0.038323 -0.121974 - -0.5568 -0.038932 -0.117189 -e -v - -0.638232 -0.038541 -0.116232 - -0.638232 -0.023272 -0.117624 - -0.638232 -0.008047 -0.119016 - -0.638232 0.007178 -0.120408 - -0.638232 0.00683 -0.12789 - -0.638232 0.006568 -0.135459 - -0.638232 0.006307 -0.143028 - -0.638232 0.012571 -0.15051 - -0.638232 0.012833 -0.162081 - -0.638232 0.006394 -0.162429 - -0.638232 0.007004 -0.178176 - -0.638232 -0.035974 -0.178263 - -0.638232 -0.037802 -0.174261 - -0.638232 -0.037714 -0.169389 - -0.638232 -0.037627 -0.164604 - -0.638232 -0.037627 -0.159732 - -0.638232 -0.037627 -0.154947 - -0.638232 -0.037627 -0.150075 - -0.638232 -0.037714 -0.14529 - -0.638232 -0.037802 -0.140418 - -0.638232 -0.037889 -0.135546 - -0.638232 -0.037976 -0.130761 - -0.638232 -0.038149 -0.125889 - -0.638232 -0.038323 -0.121104 - -0.638232 -0.038498 -0.116232 -e -v - -0.706005 -0.037062 -0.111534 - -0.706005 -0.024751 -0.112752 - -0.706005 -0.012397 -0.11397 - -0.706005 -0.000131 -0.115188 - -0.706005 -0.000653 -0.120582 - -0.706005 0.000304 -0.12615 - -0.706005 0.000653 -0.131805 - -0.706005 0.013442 -0.146769 - -0.706005 0.013268 -0.160167 - -0.706005 0.000827 -0.159558 - -0.706005 0.000739 -0.167823 - -0.706005 -0.036236 -0.168432 - -0.706005 -0.036497 -0.16443 - -0.706005 -0.036757 -0.16008 - -0.706005 -0.036931 -0.155643 - -0.706005 -0.037193 -0.151206 - -0.706005 -0.03728 -0.146856 - -0.706005 -0.037367 -0.142419 - -0.706005 -0.037367 -0.137982 - -0.706005 -0.03728 -0.133545 - -0.706005 -0.037193 -0.129195 - -0.706005 -0.037193 -0.124758 - -0.706005 -0.037106 -0.120321 - -0.706005 -0.037106 -0.115971 - -0.706005 -0.037019 -0.111534 -e -v - -0.757944 -0.030885 -0.108228 - -0.757944 -0.024665 -0.109185 - -0.757944 -0.018488 -0.10962 - -0.757944 -0.012311 -0.109707 - -0.757944 -0.010049 -0.116319 - -0.757944 -0.007786 -0.122931 - -0.757944 -0.005437 -0.12963 - -0.757944 0.013876 -0.144942 - -0.757944 0.014311 -0.156513 - -0.757944 -0.004219 -0.156861 - -0.757944 -0.004219 -0.15921 - -0.757944 -0.036148 -0.159993 - -0.757944 -0.03667 -0.155469 - -0.757944 -0.036931 -0.15138 - -0.757944 -0.036757 -0.147378 - -0.757944 -0.036584 -0.143289 - -0.757944 -0.036497 -0.1392 - -0.757944 -0.036584 -0.135111 - -0.757944 -0.03667 -0.131109 - -0.757944 -0.036844 -0.12702 - -0.757944 -0.036931 -0.122931 - -0.757944 -0.036584 -0.118929 - -0.757944 -0.034844 -0.115275 - -0.757944 -0.032929 -0.111708 - -0.757944 -0.030841 -0.108228 -e -v - -0.812058 -0.026883 -0.109098 - -0.812058 -0.025709 -0.109098 - -0.812058 -0.024665 -0.109098 - -0.812058 -0.02362 -0.109185 - -0.812058 -0.019879 -0.117363 - -0.812058 -0.015703 -0.125628 - -0.812058 -0.011528 -0.133893 - -0.812058 0.011702 -0.149118 - -0.812058 0.012049 -0.155121 - -0.812058 -0.010658 -0.158427 - -0.812058 -0.035105 -0.157905 - -0.812058 -0.035974 -0.154077 - -0.812058 -0.036148 -0.150162 - -0.812058 -0.035887 -0.14616 - -0.812058 -0.035887 -0.142245 - -0.812058 -0.036236 -0.13833 - -0.812058 -0.036497 -0.134328 - -0.812058 -0.03641 -0.130413 - -0.812058 -0.035887 -0.126498 - -0.812058 -0.034844 -0.12267 - -0.812058 -0.033103 -0.11919 - -0.812058 -0.031103 -0.115797 - -0.812058 -0.029014 -0.112404 - -0.812058 -0.02684 -0.109098 -e -v - -0.849642 -0.026709 -0.122322 - -0.849642 -0.025709 -0.122148 - -0.849642 -0.024751 -0.121974 - -0.849642 -0.023882 -0.121887 - -0.849642 -0.020662 -0.126846 - -0.849642 -0.017531 -0.131805 - -0.849642 -0.014311 -0.136764 - -0.849642 0.007265 -0.149988 - -0.849642 -0.01318 -0.156687 - -0.849642 -0.032582 -0.156861 - -0.849642 -0.032582 -0.154077 - -0.849642 -0.032669 -0.151293 - -0.849642 -0.032756 -0.148422 - -0.849642 -0.032842 -0.145638 - -0.849642 -0.032842 -0.142854 - -0.849642 -0.032756 -0.139983 - -0.849642 -0.032669 -0.137199 - -0.849642 -0.03319 -0.134415 - -0.849642 -0.032495 -0.131805 - -0.849642 -0.030755 -0.12963 - -0.849642 -0.029102 -0.127281 - -0.849642 -0.027796 -0.124845 - -0.849642 -0.026665 -0.122322 -e -v - -0.898275 -0.026883 -0.139548 - -0.898275 -0.026231 -0.139635 - -0.898275 -0.025621 -0.139635 - -0.898275 -0.025013 -0.139635 - -0.898275 -0.02362 -0.141375 - -0.898275 -0.022228 -0.143028 - -0.898275 -0.020924 -0.144768 - -0.898275 -0.011789 -0.15138 - -0.898275 -0.019706 -0.155904 - -0.898275 -0.020141 -0.155904 - -0.898275 -0.029885 -0.15573 - -0.898275 -0.03032 -0.154338 - -0.898275 -0.03032 -0.153033 - -0.898275 -0.03032 -0.151728 - -0.898275 -0.030233 -0.150423 - -0.898275 -0.030233 -0.149118 - -0.898275 -0.030233 -0.147726 - -0.898275 -0.03032 -0.146421 - -0.898275 -0.030233 -0.145116 - -0.898275 -0.029885 -0.143811 - -0.898275 -0.029275 -0.14268 - -0.898275 -0.028493 -0.141636 - -0.898275 -0.027623 -0.140592 - -0.898275 -0.02684 -0.139548 -e -v - -0.938034 -0.031581 -0.155904 -e -v - -0.409683 -0.036888 -0.118059 - -0.485634 -0.038498 -0.117189 - -0.5568 -0.038932 -0.117189 - -0.638232 -0.038498 -0.116232 - -0.706005 -0.037019 -0.111534 - -0.757944 -0.030841 -0.108228 - -0.812058 -0.02684 -0.109098 - -0.849642 -0.026665 -0.122322 - -0.898275 -0.02684 -0.139548 - -0.938034 -0.031537 -0.155904 -e -v - -0.409683 -0.016182 -0.117537 - -0.485634 -0.019096 -0.117102 - -0.5568 -0.021097 -0.118146 - -0.638232 -0.023272 -0.117624 - -0.706005 -0.024751 -0.112752 - -0.757944 -0.024665 -0.109185 - -0.812058 -0.025709 -0.109098 - -0.849642 -0.025709 -0.122148 - -0.898275 -0.026231 -0.139635 - -0.938034 -0.031537 -0.155904 -e -v - -0.409683 0.004437 -0.117015 - -0.485634 0.000304 -0.117015 - -0.5568 -0.003176 -0.119016 - -0.638232 -0.008047 -0.119016 - -0.706005 -0.012397 -0.11397 - -0.757944 -0.018488 -0.10962 - -0.812058 -0.024665 -0.109098 - -0.849642 -0.024751 -0.121974 - -0.898275 -0.025621 -0.139635 - -0.938034 -0.031537 -0.155904 -e -v - -0.409683 0.025056 -0.116493 - -0.485634 0.019793 -0.116841 - -0.5568 0.014659 -0.119973 - -0.638232 0.007178 -0.120408 - -0.706005 -0.000131 -0.115188 - -0.757944 -0.012311 -0.109707 - -0.812058 -0.02362 -0.109185 - -0.849642 -0.023882 -0.121887 - -0.898275 -0.025013 -0.139635 - -0.938034 -0.031537 -0.155904 -e -v - -0.409683 0.024621 -0.129717 - -0.485634 0.019531 -0.13137 - -0.5568 0.013964 -0.132675 - -0.638232 0.00683 -0.12789 - -0.706005 -0.000653 -0.120582 - -0.757944 -0.010049 -0.116319 - -0.812058 -0.019879 -0.117363 - -0.849642 -0.020662 -0.126846 - -0.898275 -0.02362 -0.141375 - -0.938034 -0.031537 -0.155904 -e -v - -0.409683 0.024186 -0.142941 - -0.485634 0.019183 -0.145812 - -0.5568 0.013702 -0.145464 - -0.638232 0.006568 -0.135459 - -0.706005 0.000304 -0.12615 - -0.757944 -0.007786 -0.122931 - -0.812058 -0.015703 -0.125628 - -0.849642 -0.017531 -0.131805 - -0.898275 -0.022228 -0.143028 - -0.938034 -0.031537 -0.155904 -e -v - -0.409683 0.023664 -0.156165 - -0.485634 0.018923 -0.160341 - -0.5568 0.013528 -0.15834 - -0.638232 0.006307 -0.143028 - -0.706005 0.000653 -0.131805 - -0.757944 -0.005437 -0.12963 - -0.812058 -0.011528 -0.133893 - -0.849642 -0.014311 -0.136764 - -0.898275 -0.020924 -0.144768 - -0.938034 -0.031537 -0.155904 -e -v - -0.409683 0.023664 -0.156165 - -0.485634 0.018923 -0.160341 - -0.5568 0.013528 -0.15834 - -0.638232 0.012571 -0.15051 - -0.706005 0.013442 -0.146769 - -0.757944 0.013876 -0.144942 - -0.812058 0.011702 -0.149118 - -0.849642 0.007265 -0.149988 - -0.898275 -0.011789 -0.15138 - -0.938034 -0.031537 -0.155904 -e -v - -0.409683 0.023664 -0.156165 - -0.485634 0.018923 -0.160341 - -0.5568 0.013528 -0.15834 - -0.638232 0.012833 -0.162081 - -0.706005 0.013268 -0.160167 - -0.757944 0.014311 -0.156513 - -0.812058 0.012049 -0.155121 - -0.849642 0.007265 -0.149988 - -0.898275 -0.011789 -0.15138 - -0.938034 -0.031537 -0.155904 -e -v - -0.409683 0.023838 -0.179307 - -0.485634 0.018662 -0.178785 - -0.5568 0.013616 -0.179133 - -0.638232 0.006394 -0.162429 - -0.706005 0.000827 -0.159558 - -0.757944 -0.004219 -0.156861 - -0.812058 -0.010658 -0.158427 - -0.849642 -0.01318 -0.156687 - -0.898275 -0.019706 -0.155904 - -0.938034 -0.031537 -0.155904 -e -v - -0.409683 0.00261 -0.179481 - -0.485634 0.005699 -0.179046 - -0.5568 0.013616 -0.179133 - -0.638232 0.007004 -0.178176 - -0.706005 0.000739 -0.167823 - -0.757944 -0.004219 -0.15921 - -0.812058 -0.010658 -0.158427 - -0.849642 -0.01318 -0.156687 - -0.898275 -0.020141 -0.155904 - -0.938034 -0.031537 -0.155904 -e -v - -0.409683 -0.010614 -0.161298 - -0.485634 -0.015878 -0.167997 - -0.5568 -0.025186 -0.175653 - -0.638232 -0.035974 -0.178263 - -0.706005 -0.036236 -0.168432 - -0.757944 -0.036148 -0.159993 - -0.812058 -0.035105 -0.157905 - -0.849642 -0.032582 -0.156861 - -0.898275 -0.029885 -0.15573 - -0.938034 -0.031537 -0.155904 -e -v - -0.409683 -0.012615 -0.157992 - -0.485634 -0.019531 -0.165648 - -0.5568 -0.029885 -0.174609 - -0.638232 -0.037802 -0.174261 - -0.706005 -0.036497 -0.16443 - -0.757944 -0.03667 -0.155469 - -0.812058 -0.035974 -0.154077 - -0.849642 -0.032582 -0.154077 - -0.898275 -0.03032 -0.154338 - -0.938034 -0.031537 -0.155904 -e -v - -0.409683 -0.014616 -0.154686 - -0.485634 -0.022576 -0.162603 - -0.5568 -0.032407 -0.170433 - -0.638232 -0.037714 -0.169389 - -0.706005 -0.036757 -0.16008 - -0.757944 -0.036931 -0.15138 - -0.812058 -0.036148 -0.150162 - -0.849642 -0.032669 -0.151293 - -0.898275 -0.03032 -0.153033 - -0.938034 -0.031537 -0.155904 -e -v - -0.409683 -0.016617 -0.15138 - -0.485634 -0.024143 -0.158514 - -0.5568 -0.03319 -0.165648 - -0.638232 -0.037627 -0.164604 - -0.706005 -0.036931 -0.155643 - -0.757944 -0.036757 -0.147378 - -0.812058 -0.035887 -0.14616 - -0.849642 -0.032756 -0.148422 - -0.898275 -0.03032 -0.151728 - -0.938034 -0.031537 -0.155904 -e -v - -0.409683 -0.018705 -0.147987 - -0.485634 -0.025534 -0.154338 - -0.5568 -0.033712 -0.160776 - -0.638232 -0.037627 -0.159732 - -0.706005 -0.037193 -0.151206 - -0.757944 -0.036584 -0.143289 - -0.812058 -0.035887 -0.142245 - -0.849642 -0.032842 -0.145638 - -0.898275 -0.030233 -0.150423 - -0.938034 -0.031537 -0.155904 -e -v - -0.409683 -0.020706 -0.144681 - -0.485634 -0.02684 -0.150162 - -0.5568 -0.034235 -0.155991 - -0.638232 -0.037627 -0.154947 - -0.706005 -0.03728 -0.146856 - -0.757944 -0.036497 -0.1392 - -0.812058 -0.036236 -0.13833 - -0.849642 -0.032842 -0.142854 - -0.898275 -0.030233 -0.149118 - -0.938034 -0.031537 -0.155904 -e -v - -0.409683 -0.022707 -0.141375 - -0.485634 -0.028144 -0.145986 - -0.5568 -0.034757 -0.151119 - -0.638232 -0.037627 -0.150075 - -0.706005 -0.037367 -0.142419 - -0.757944 -0.036584 -0.135111 - -0.812058 -0.036497 -0.134328 - -0.849642 -0.032756 -0.139983 - -0.898275 -0.030233 -0.147726 - -0.938034 -0.031537 -0.155904 -e -v - -0.409683 -0.024708 -0.137982 - -0.485634 -0.029537 -0.141897 - -0.5568 -0.035365 -0.146247 - -0.638232 -0.037714 -0.14529 - -0.706005 -0.037367 -0.137982 - -0.757944 -0.03667 -0.131109 - -0.812058 -0.03641 -0.130413 - -0.849642 -0.032669 -0.137199 - -0.898275 -0.03032 -0.146421 - -0.938034 -0.031537 -0.155904 -e -v - -0.409683 -0.026796 -0.134676 - -0.485634 -0.031016 -0.137721 - -0.5568 -0.035887 -0.141375 - -0.638232 -0.037802 -0.140418 - -0.706005 -0.03728 -0.133545 - -0.757944 -0.036844 -0.12702 - -0.812058 -0.035887 -0.126498 - -0.849642 -0.03319 -0.134415 - -0.898275 -0.030233 -0.145116 - -0.938034 -0.031537 -0.155904 -e -v - -0.409683 -0.028797 -0.13137 - -0.485634 -0.032407 -0.133632 - -0.5568 -0.036497 -0.13659 - -0.638232 -0.037889 -0.135546 - -0.706005 -0.037193 -0.129195 - -0.757944 -0.036931 -0.122931 - -0.812058 -0.034844 -0.12267 - -0.849642 -0.032495 -0.131805 - -0.898275 -0.029885 -0.143811 - -0.938034 -0.031537 -0.155904 -e -v - -0.409683 -0.030798 -0.128064 - -0.485634 -0.033886 -0.129456 - -0.5568 -0.037106 -0.131718 - -0.638232 -0.037976 -0.130761 - -0.706005 -0.037193 -0.124758 - -0.757944 -0.036584 -0.118929 - -0.812058 -0.033103 -0.11919 - -0.849642 -0.030755 -0.12963 - -0.898275 -0.029275 -0.14268 - -0.938034 -0.031537 -0.155904 -e -v - -0.409683 -0.032799 -0.124671 - -0.485634 -0.035365 -0.125367 - -0.5568 -0.037714 -0.126846 - -0.638232 -0.038149 -0.125889 - -0.706005 -0.037106 -0.120321 - -0.757944 -0.034844 -0.115275 - -0.812058 -0.031103 -0.115797 - -0.849642 -0.029102 -0.127281 - -0.898275 -0.028493 -0.141636 - -0.938034 -0.031537 -0.155904 -e -v - -0.409683 -0.034887 -0.121365 - -0.485634 -0.036931 -0.121278 - -0.5568 -0.038323 -0.121974 - -0.638232 -0.038323 -0.121104 - -0.706005 -0.037106 -0.115971 - -0.757944 -0.032929 -0.111708 - -0.812058 -0.029014 -0.112404 - -0.849642 -0.027796 -0.124845 - -0.898275 -0.027623 -0.140592 - -0.938034 -0.031537 -0.155904 -e -v - -0.409683 -0.036888 -0.118059 - -0.485634 -0.038498 -0.117189 - -0.5568 -0.038932 -0.117189 - -0.638232 -0.038498 -0.116232 - -0.706005 -0.037019 -0.111534 - -0.757944 -0.030841 -0.108228 - -0.812058 -0.02684 -0.109098 - -0.849642 -0.026665 -0.122322 - -0.898275 -0.02684 -0.139548 - -0.938034 -0.031537 -0.155904 -e -v - -0.096048 0.008961 -0.176784 - -0.099702 0.011789 -0.176784 - -0.108402 0.014137 -0.176871 - -0.120756 0.016226 -0.176871 - -0.133197 0.017792 -0.176871 - -0.145638 0.019096 -0.176958 - -0.17052 0.021185 -0.176958 - -0.220284 0.024143 -0.177045 - -0.270048 0.025796 -0.177045 - -0.319812 0.025969 -0.177045 - -0.369576 0.024838 -0.177045 - -0.41934 0.022489 -0.176958 - -0.469104 0.019358 -0.176958 - -0.518868 0.015356 -0.176871 - -0.568458 0.010918 -0.176784 - -0.593253 0.008918 -0.176784 - -0.568371 0.007961 -0.176697 - -0.518607 0.006134 -0.176697 - -0.46893 0.003958 -0.176697 - -0.419253 0.00161 -0.17661 - -0.369576 -0.000304 -0.17661 - -0.319899 -0.001522 -0.176523 - -0.270222 -0.001783 -0.176523 - -0.220545 -0.001001 -0.17661 - -0.170868 0.000565 -0.17661 - -0.145986 0.001696 -0.17661 - -0.133545 0.002479 -0.17661 - -0.121104 0.00335 -0.17661 - -0.108663 0.004742 -0.176697 - -0.099963 0.006394 -0.176697 - -0.096135 0.00883 -0.176697 -e -v - -0.261783 0.008874 -0.346869 - -0.264219 0.010744 -0.346956 - -0.270048 0.012311 -0.346956 - -0.278313 0.013616 -0.346956 - -0.286578 0.014659 -0.346956 - -0.294843 0.015442 -0.347043 - -0.31146 0.016834 -0.347043 - -0.344607 0.018748 -0.347043 - -0.377754 0.019793 -0.347043 - -0.410988 0.019966 -0.34713 - -0.444135 0.019183 -0.347043 - -0.477282 0.017704 -0.347043 - -0.510516 0.015703 -0.347043 - -0.543663 0.013094 -0.346956 - -0.576723 0.010223 -0.346956 - -0.593253 0.008918 -0.346869 - -0.576723 0.008309 -0.346869 - -0.543489 0.007178 -0.346869 - -0.510342 0.005786 -0.346869 - -0.477282 0.004306 -0.346782 - -0.444135 0.003089 -0.346782 - -0.410988 0.002305 -0.346782 - -0.377928 0.002132 -0.346782 - -0.344781 0.002567 -0.346782 - -0.311634 0.00361 -0.346782 - -0.295104 0.004306 -0.346782 - -0.286839 0.004829 -0.346782 - -0.278487 0.00535 -0.346869 - -0.270222 0.00622 -0.346869 - -0.264393 0.007265 -0.346869 - -0.26187 0.00883 -0.346869 -e -v - -0.42978 0.008874 -0.512604 - -0.431259 0.009961 -0.512691 - -0.434652 0.010918 -0.512691 - -0.439611 0.011702 -0.512691 - -0.444657 0.012311 -0.512691 - -0.449616 0.012745 -0.512691 - -0.459534 0.013616 -0.512691 - -0.479457 0.014747 -0.512691 - -0.49938 0.015356 -0.512778 - -0.519216 0.015442 -0.512778 - -0.539139 0.015007 -0.512778 - -0.559062 0.014137 -0.512691 - -0.578985 0.01292 -0.512691 - -0.598821 0.011354 -0.512691 - -0.618744 0.009701 -0.512604 - -0.628662 0.008918 -0.512604 - -0.618657 0.00857 -0.512604 - -0.598821 0.007873 -0.512604 - -0.578898 0.007091 -0.512604 - -0.559062 0.00622 -0.512604 - -0.539139 0.005524 -0.512604 - -0.519303 0.005003 -0.512604 - -0.49938 0.004916 -0.512517 - -0.479544 0.005176 -0.512604 - -0.459708 0.005786 -0.512604 - -0.449703 0.00622 -0.512604 - -0.444744 0.006481 -0.512604 - -0.439785 0.00683 -0.512604 - -0.434826 0.007351 -0.512604 - -0.431346 0.007961 -0.512604 - -0.42978 0.00883 -0.512604 -e -v - -0.47589 0.008874 -0.563412 - -0.476412 0.009961 -0.563499 - -0.477543 0.010744 -0.563499 - -0.479283 0.01144 -0.563499 - -0.480936 0.011963 -0.563499 - -0.482676 0.012397 -0.563499 - -0.486156 0.013094 -0.563499 - -0.492942 0.014051 -0.563586 - -0.499815 0.014573 -0.563586 - -0.506688 0.014573 -0.563586 - -0.513561 0.014137 -0.563586 - -0.520434 0.013268 -0.563499 - -0.527307 0.012223 -0.563499 - -0.53418 0.010918 -0.563499 - -0.540966 0.009527 -0.563499 - -0.544446 0.008918 -0.563412 - -0.540966 0.008396 -0.563412 - -0.534093 0.007438 -0.563412 - -0.52722 0.006394 -0.563412 - -0.520434 0.00535 -0.563412 - -0.513561 0.004568 -0.563412 - -0.506775 0.004132 -0.563412 - -0.499902 0.004132 -0.563412 - -0.493116 0.004481 -0.563412 - -0.486243 0.005263 -0.563412 - -0.48285 0.005786 -0.563412 - -0.48111 0.006134 -0.563412 - -0.47937 0.006568 -0.563412 - -0.477717 0.007178 -0.563412 - -0.476499 0.007873 -0.563412 - -0.47589 0.00883 -0.563412 -e -v - -0.522609 0.008874 -0.574548 - -0.522609 0.009004 -0.574548 - -0.522609 0.009092 -0.574548 - -0.522696 0.009092 -0.574548 - -0.522783 0.009178 -0.574548 - -0.52287 0.009178 -0.574548 - -0.523131 0.009266 -0.574548 - -0.523305 0.009352 -0.574548 - -0.523566 0.009352 -0.574548 - -0.523827 0.009352 -0.574548 - -0.524001 0.009266 -0.574548 - -0.524262 0.009178 -0.574548 - -0.524523 0.009092 -0.574548 - -0.524697 0.008918 -0.574548 - -0.524784 0.008918 -0.574548 - -0.524697 0.008918 -0.574548 - -0.524436 0.008918 -0.574548 - -0.524175 0.008918 -0.574548 - -0.524001 0.00883 -0.574548 - -0.523827 0.00883 -0.574461 - -0.523566 0.008744 -0.574461 - -0.523392 0.008744 -0.574461 - -0.523131 0.008744 -0.574461 - -0.522957 0.008744 -0.574461 - -0.52287 0.00883 -0.574461 - -0.522783 0.00883 -0.574461 - -0.522696 0.00883 -0.574461 - -0.522696 0.00883 -0.574548 - -0.522609 0.00883 -0.574548 - -0.522609 0.008918 -0.574548 -e -v - -0.096048 0.008961 -0.176784 - -0.261783 0.008918 -0.346869 - -0.42978 0.008918 -0.512604 - -0.47589 0.008918 -0.563412 - -0.522609 0.008918 -0.574548 -e -v - -0.099702 0.011745 -0.176784 - -0.264219 0.010744 -0.346956 - -0.431259 0.009961 -0.512691 - -0.476412 0.009961 -0.563499 - -0.522609 0.008918 -0.574548 -e -v - -0.108402 0.014094 -0.176871 - -0.270048 0.012311 -0.346956 - -0.434652 0.010918 -0.512691 - -0.477543 0.010744 -0.563499 - -0.522609 0.009004 -0.574548 -e -v - -0.120756 0.016182 -0.176871 - -0.278313 0.013616 -0.346956 - -0.439611 0.011702 -0.512691 - -0.479283 0.01144 -0.563499 - -0.522609 0.009092 -0.574548 -e -v - -0.133197 0.017748 -0.176871 - -0.286578 0.014659 -0.346956 - -0.444657 0.012311 -0.512691 - -0.480936 0.011963 -0.563499 - -0.522696 0.009092 -0.574548 -e -v - -0.145638 0.019053 -0.176958 - -0.294843 0.015442 -0.347043 - -0.449616 0.012745 -0.512691 - -0.482676 0.012397 -0.563499 - -0.522783 0.009178 -0.574548 -e -v - -0.17052 0.021141 -0.176958 - -0.31146 0.016834 -0.347043 - -0.459534 0.013616 -0.512691 - -0.486156 0.013094 -0.563499 - -0.52287 0.009178 -0.574548 -e -v - -0.220284 0.024099 -0.177045 - -0.344607 0.018748 -0.347043 - -0.479457 0.014747 -0.512691 - -0.492942 0.014051 -0.563586 - -0.523131 0.009266 -0.574548 -e -v - -0.270048 0.025752 -0.177045 - -0.377754 0.019793 -0.347043 - -0.49938 0.015356 -0.512778 - -0.499815 0.014573 -0.563586 - -0.523305 0.009352 -0.574548 -e -v - -0.319812 0.025926 -0.177045 - -0.410988 0.019966 -0.34713 - -0.519216 0.015442 -0.512778 - -0.506688 0.014573 -0.563586 - -0.523566 0.009352 -0.574548 -e -v - -0.369576 0.024795 -0.177045 - -0.444135 0.019183 -0.347043 - -0.539139 0.015007 -0.512778 - -0.513561 0.014137 -0.563586 - -0.523827 0.009352 -0.574548 -e -v - -0.41934 0.022446 -0.176958 - -0.477282 0.017704 -0.347043 - -0.559062 0.014137 -0.512691 - -0.520434 0.013268 -0.563499 - -0.524001 0.009266 -0.574548 -e -v - -0.469104 0.019314 -0.176958 - -0.510516 0.015703 -0.347043 - -0.578985 0.01292 -0.512691 - -0.527307 0.012223 -0.563499 - -0.524262 0.009178 -0.574548 -e -v - -0.518868 0.015312 -0.176871 - -0.543663 0.013094 -0.346956 - -0.598821 0.011354 -0.512691 - -0.53418 0.010918 -0.563499 - -0.524523 0.009092 -0.574548 -e -v - -0.568458 0.010875 -0.176784 - -0.576723 0.010223 -0.346956 - -0.618744 0.009701 -0.512604 - -0.540966 0.009527 -0.563499 - -0.524697 0.008918 -0.574548 -e -v - -0.593253 0.008874 -0.176784 - -0.593253 0.008918 -0.346869 - -0.628662 0.008918 -0.512604 - -0.544446 0.008918 -0.563412 - -0.524784 0.008918 -0.574548 -e -v - -0.568371 0.007917 -0.176697 - -0.576723 0.008309 -0.346869 - -0.618657 0.00857 -0.512604 - -0.540966 0.008396 -0.563412 - -0.524697 0.008918 -0.574548 -e -v - -0.518607 0.00609 -0.176697 - -0.543489 0.007178 -0.346869 - -0.598821 0.007873 -0.512604 - -0.534093 0.007438 -0.563412 - -0.524436 0.008918 -0.574548 -e -v - -0.46893 0.003915 -0.176697 - -0.510342 0.005786 -0.346869 - -0.578898 0.007091 -0.512604 - -0.52722 0.006394 -0.563412 - -0.524175 0.008918 -0.574548 -e -v - -0.419253 0.001566 -0.17661 - -0.477282 0.004306 -0.346782 - -0.559062 0.00622 -0.512604 - -0.520434 0.00535 -0.563412 - -0.524001 0.00883 -0.574548 -e -v - -0.369576 -0.000348 -0.17661 - -0.444135 0.003089 -0.346782 - -0.539139 0.005524 -0.512604 - -0.513561 0.004568 -0.563412 - -0.523827 0.00883 -0.574461 -e -v - -0.319899 -0.001566 -0.176523 - -0.410988 0.002305 -0.346782 - -0.519303 0.005003 -0.512604 - -0.506775 0.004132 -0.563412 - -0.523566 0.008744 -0.574461 -e -v - -0.270222 -0.001827 -0.176523 - -0.377928 0.002132 -0.346782 - -0.49938 0.004916 -0.512517 - -0.499902 0.004132 -0.563412 - -0.523392 0.008744 -0.574461 -e -v - -0.220545 -0.001044 -0.17661 - -0.344781 0.002567 -0.346782 - -0.479544 0.005176 -0.512604 - -0.493116 0.004481 -0.563412 - -0.523131 0.008744 -0.574461 -e -v - -0.170868 0.000522 -0.17661 - -0.311634 0.00361 -0.346782 - -0.459708 0.005786 -0.512604 - -0.486243 0.005263 -0.563412 - -0.522957 0.008744 -0.574461 -e -v - -0.145986 0.001653 -0.17661 - -0.295104 0.004306 -0.346782 - -0.449703 0.00622 -0.512604 - -0.48285 0.005786 -0.563412 - -0.52287 0.00883 -0.574461 -e -v - -0.133545 0.002436 -0.17661 - -0.286839 0.004829 -0.346782 - -0.444744 0.006481 -0.512604 - -0.48111 0.006134 -0.563412 - -0.522783 0.00883 -0.574461 -e -v - -0.121104 0.003306 -0.17661 - -0.278487 0.00535 -0.346869 - -0.439785 0.00683 -0.512604 - -0.47937 0.006568 -0.563412 - -0.522696 0.00883 -0.574461 -e -v - -0.108663 0.004698 -0.176697 - -0.270222 0.00622 -0.346869 - -0.434826 0.007351 -0.512604 - -0.477717 0.007178 -0.563412 - -0.522696 0.00883 -0.574548 -e -v - -0.099963 0.006351 -0.176697 - -0.264393 0.007265 -0.346869 - -0.431346 0.007961 -0.512604 - -0.476499 0.007873 -0.563412 - -0.522609 0.00883 -0.574548 -e -v - -0.096135 0.008787 -0.176697 - -0.26187 0.00883 -0.346869 - -0.42978 0.00883 -0.512604 - -0.47589 0.00883 -0.563412 - -0.522609 0.008918 -0.574548 -e -v - -0.792222 0.27405 -0.147987 - -0.792744 0.274094 -0.147726 - -0.794136 0.274094 -0.147465 - -0.79605 0.274094 -0.147291 - -0.797964 0.274094 -0.147117 - -0.799878 0.274094 -0.14703 - -0.803793 0.274094 -0.146943 - -0.811536 0.274094 -0.146769 - -0.819279 0.274094 -0.146682 - -0.827022 0.274094 -0.146682 - -0.834678 0.274094 -0.146769 - -0.842421 0.274094 -0.146943 - -0.850164 0.274094 -0.147117 - -0.857907 0.274094 -0.147378 - -0.86565 0.274094 -0.147813 - -0.869565 0.274094 -0.148074 - -0.86565 0.274094 -0.148248 - -0.857907 0.274094 -0.148596 - -0.850164 0.274094 -0.148857 - -0.842421 0.274094 -0.149118 - -0.834678 0.274094 -0.149292 - -0.827022 0.274094 -0.149379 - -0.819279 0.274094 -0.149379 - -0.811536 0.274094 -0.149292 - -0.803793 0.274094 -0.149118 - -0.799878 0.274094 -0.148944 - -0.797964 0.274094 -0.148857 - -0.79605 0.274094 -0.14877 - -0.794136 0.274094 -0.148596 - -0.792744 0.274094 -0.148335 - -0.792222 0.274094 -0.147987 -e -v - -0.604389 0.013224 -0.147987 - -0.792222 0.274094 -0.147987 -e -v - -0.606216 0.013224 -0.146508 - -0.792744 0.274094 -0.147726 -e -v - -0.610653 0.013224 -0.145464 - -0.794136 0.274094 -0.147465 -e -v - -0.616917 0.013224 -0.144594 - -0.79605 0.274094 -0.147291 -e -v - -0.623268 0.013224 -0.143985 - -0.797964 0.274094 -0.147117 -e -v - -0.629532 0.013224 -0.14355 - -0.799878 0.274094 -0.14703 -e -v - -0.642147 0.013224 -0.142941 - -0.803793 0.274094 -0.146943 -e -v - -0.66729 0.013224 -0.142158 - -0.811536 0.274094 -0.146769 -e -v - -0.69252 0.013224 -0.141723 - -0.819279 0.274094 -0.146682 -e -v - -0.71775 0.013224 -0.141723 - -0.827022 0.274094 -0.146682 -e -v - -0.742893 0.013224 -0.142158 - -0.834678 0.274094 -0.146769 -e -v - -0.768123 0.013224 -0.142854 - -0.842421 0.274094 -0.146943 -e -v - -0.793266 0.013224 -0.143898 - -0.850164 0.274094 -0.147117 -e -v - -0.818496 0.013224 -0.14529 - -0.857907 0.274094 -0.147378 -e -v - -0.843639 0.013224 -0.146943 - -0.86565 0.274094 -0.147813 -e -v - -0.856254 0.013224 -0.148161 - -0.869565 0.274094 -0.148074 -e -v - -0.843639 0.013224 -0.149118 - -0.86565 0.274094 -0.148248 -e -v - -0.818496 0.013224 -0.150771 - -0.857907 0.274094 -0.148596 -e -v - -0.793266 0.013224 -0.152163 - -0.850164 0.274094 -0.148857 -e -v - -0.768123 0.013224 -0.153207 - -0.842421 0.274094 -0.149118 -e -v - -0.742893 0.013224 -0.153903 - -0.834678 0.274094 -0.149292 -e -v - -0.71775 0.013224 -0.154251 - -0.827022 0.274094 -0.149379 -e -v - -0.69252 0.013224 -0.154251 - -0.819279 0.274094 -0.149379 -e -v - -0.66729 0.013224 -0.153903 - -0.811536 0.274094 -0.149292 -e -v - -0.642147 0.013224 -0.15312 - -0.803793 0.274094 -0.149118 -e -v - -0.629532 0.013224 -0.152424 - -0.799878 0.274094 -0.148944 -e -v - -0.623268 0.013224 -0.151989 - -0.797964 0.274094 -0.148857 -e -v - -0.616917 0.013224 -0.151467 - -0.79605 0.274094 -0.14877 -e -v - -0.610653 0.013224 -0.150597 - -0.794136 0.274094 -0.148596 -e -v - -0.606216 0.013224 -0.149553 - -0.792744 0.274094 -0.148335 -e -v - -0.604389 0.013224 -0.148074 - -0.792222 0.274094 -0.147987 -e -v - -0.604389 0.013224 -0.147987 - -0.606216 0.013268 -0.146508 - -0.610653 0.013268 -0.145464 - -0.616917 0.013268 -0.144594 - -0.623268 0.013268 -0.143985 - -0.629532 0.013268 -0.14355 - -0.642147 0.013268 -0.142941 - -0.66729 0.013268 -0.142158 - -0.69252 0.013268 -0.141723 - -0.71775 0.013268 -0.141723 - -0.742893 0.013268 -0.142158 - -0.768123 0.013268 -0.142854 - -0.793266 0.013268 -0.143898 - -0.818496 0.013268 -0.14529 - -0.843639 0.013268 -0.146943 - -0.856254 0.013268 -0.148161 - -0.843639 0.013268 -0.149118 - -0.818496 0.013268 -0.150771 - -0.793266 0.013268 -0.152163 - -0.768123 0.013268 -0.153207 - -0.742893 0.013268 -0.153903 - -0.71775 0.013268 -0.154251 - -0.69252 0.013268 -0.154251 - -0.66729 0.013268 -0.153903 - -0.642147 0.013268 -0.15312 - -0.629532 0.013268 -0.152424 - -0.623268 0.013268 -0.151989 - -0.616917 0.013268 -0.151467 - -0.610653 0.013268 -0.150597 - -0.606216 0.013268 -0.149553 - -0.604389 0.013268 -0.148074 -e -v - -0.670683 -0.026448 -0.159036 - -0.672597 -0.024751 -0.159036 - -0.677121 -0.023534 -0.159036 - -0.683646 -0.022576 -0.159036 - -0.690171 -0.021881 -0.159036 - -0.696696 -0.021358 -0.159036 - -0.709746 -0.020662 -0.159036 - -0.735846 -0.019793 -0.159036 - -0.761946 -0.019358 -0.159036 - -0.787959 -0.019358 -0.159036 - -0.814059 -0.019793 -0.159036 - -0.840159 -0.020575 -0.159036 - -0.866172 -0.021793 -0.159036 - -0.892272 -0.023359 -0.159036 - -0.918372 -0.025274 -0.159036 - -0.931422 -0.026579 -0.159036 - -0.918372 -0.02771 -0.159036 - -0.892272 -0.029624 -0.159036 - -0.866172 -0.031189 -0.159036 - -0.840159 -0.032407 -0.159036 - -0.814059 -0.03319 -0.159036 - -0.787959 -0.033625 -0.159036 - -0.761946 -0.033625 -0.159036 - -0.735846 -0.03319 -0.159036 - -0.709746 -0.03232 -0.159036 - -0.696696 -0.031537 -0.159036 - -0.690171 -0.031016 -0.159036 - -0.683646 -0.030406 -0.159036 - -0.677121 -0.02945 -0.159036 - -0.672597 -0.028231 -0.159036 - -0.670683 -0.026579 -0.159036 -e -v - -0.76125 -0.026448 -0.236379 - -0.762642 -0.025361 -0.236379 - -0.766035 -0.02449 -0.236379 - -0.770733 -0.023882 -0.236379 - -0.775518 -0.023447 -0.236379 - -0.780216 -0.023099 -0.236379 - -0.789786 -0.022664 -0.236379 - -0.808752 -0.022055 -0.236379 - -0.827718 -0.021793 -0.236379 - -0.846771 -0.021793 -0.236379 - -0.865737 -0.022055 -0.236379 - -0.88479 -0.022576 -0.236379 - -0.903756 -0.023359 -0.236379 - -0.922809 -0.024403 -0.236379 - -0.941775 -0.025621 -0.236379 - -0.951258 -0.026579 -0.236379 - -0.941775 -0.027275 -0.236379 - -0.922809 -0.028579 -0.236379 - -0.903756 -0.029624 -0.236379 - -0.88479 -0.030406 -0.236379 - -0.865737 -0.030928 -0.236379 - -0.846771 -0.031189 -0.236379 - -0.827718 -0.031189 -0.236379 - -0.808752 -0.030928 -0.236379 - -0.789786 -0.03032 -0.236379 - -0.780216 -0.029797 -0.236379 - -0.775518 -0.029537 -0.236379 - -0.770733 -0.029102 -0.236379 - -0.766035 -0.028406 -0.236379 - -0.762642 -0.027623 -0.236379 - -0.76125 -0.026492 -0.236379 -e -v - -0.725928 -0.026448 -0.23751 - -0.727581 -0.025361 -0.23751 - -0.731583 -0.02449 -0.23751 - -0.737238 -0.023882 -0.23751 - -0.74298 -0.023447 -0.23751 - -0.748635 -0.023099 -0.23751 - -0.760032 -0.022664 -0.23751 - -0.782826 -0.022055 -0.23751 - -0.805533 -0.021793 -0.23751 - -0.828327 -0.021793 -0.23751 - -0.851034 -0.022055 -0.23751 - -0.873828 -0.022576 -0.23751 - -0.896622 -0.023359 -0.23751 - -0.919329 -0.024403 -0.23751 - -0.942123 -0.025621 -0.23751 - -0.95352 -0.026579 -0.23751 - -0.942123 -0.027275 -0.23751 - -0.919329 -0.028579 -0.23751 - -0.896622 -0.029624 -0.23751 - -0.873828 -0.030406 -0.23751 - -0.851034 -0.030928 -0.23751 - -0.828327 -0.031189 -0.23751 - -0.805533 -0.031189 -0.23751 - -0.782826 -0.030928 -0.23751 - -0.760032 -0.03032 -0.23751 - -0.748635 -0.029797 -0.23751 - -0.74298 -0.029537 -0.23751 - -0.737238 -0.029102 -0.23751 - -0.731583 -0.028406 -0.23751 - -0.727581 -0.027623 -0.23751 - -0.725928 -0.026492 -0.23751 -e -v - -0.84738 -0.026535 -0.342519 - -0.848424 -0.025969 -0.342519 - -0.850599 -0.025534 -0.342519 - -0.853818 -0.025274 -0.342519 - -0.857037 -0.025013 -0.342519 - -0.860256 -0.024926 -0.342519 - -0.866607 -0.024665 -0.342519 - -0.879483 -0.024403 -0.342519 - -0.892272 -0.02423 -0.342519 - -0.905061 -0.02423 -0.342519 - -0.917937 -0.024403 -0.342519 - -0.930726 -0.024665 -0.342519 - -0.943515 -0.025013 -0.342519 - -0.956391 -0.025534 -0.342519 - -0.96918 -0.026057 -0.342519 - -0.975618 -0.026492 -0.342519 - -0.96918 -0.02684 -0.342519 - -0.956391 -0.027448 -0.342519 - -0.943515 -0.027971 -0.342519 - -0.930726 -0.028319 -0.342519 - -0.917937 -0.028579 -0.342519 - -0.905061 -0.028667 -0.342519 - -0.892272 -0.028667 -0.342519 - -0.879483 -0.028579 -0.342519 - -0.866607 -0.028319 -0.342519 - -0.860256 -0.028058 -0.342519 - -0.857037 -0.027883 -0.342519 - -0.853818 -0.02771 -0.342519 - -0.850599 -0.027362 -0.342519 - -0.848424 -0.027013 -0.342519 - -0.84738 -0.026492 -0.342519 -e -v - -0.891663 -0.026535 -0.380016 - -0.891837 -0.026405 -0.380016 - -0.892446 -0.026317 -0.380016 - -0.893316 -0.026231 -0.380016 - -0.894099 -0.026231 -0.380016 - -0.894969 -0.026144 -0.380016 - -0.896622 -0.026144 -0.380016 - -0.899928 -0.026057 -0.380016 - -0.903234 -0.026057 -0.380016 - -0.90654 -0.026057 -0.380016 - -0.909846 -0.026057 -0.380016 - -0.913152 -0.026144 -0.380016 - -0.916458 -0.026231 -0.380016 - -0.919764 -0.026317 -0.380016 - -0.92307 -0.026405 -0.380016 - -0.92481 -0.026492 -0.380016 - -0.92307 -0.026579 -0.380016 - -0.919764 -0.026665 -0.380016 - -0.916458 -0.026752 -0.380016 - -0.913152 -0.02684 -0.380016 - -0.909846 -0.02684 -0.380016 - -0.90654 -0.026927 -0.380016 - -0.903234 -0.026927 -0.380016 - -0.899928 -0.02684 -0.380016 - -0.896622 -0.02684 -0.380016 - -0.894969 -0.026752 -0.380016 - -0.894099 -0.026752 -0.380016 - -0.893316 -0.026665 -0.380016 - -0.892446 -0.026665 -0.380016 - -0.891837 -0.026579 -0.380016 - -0.891663 -0.026492 -0.380016 -e -v - -0.670683 -0.026448 -0.159036 - -0.76125 -0.026405 -0.236379 - -0.725928 -0.026405 -0.23751 - -0.84738 -0.026492 -0.342519 - -0.891663 -0.026492 -0.380016 -e -v - -0.672597 -0.024795 -0.159036 - -0.762642 -0.025361 -0.236379 - -0.727581 -0.025361 -0.23751 - -0.848424 -0.025969 -0.342519 - -0.891837 -0.026405 -0.380016 -e -v - -0.677121 -0.023577 -0.159036 - -0.766035 -0.02449 -0.236379 - -0.731583 -0.02449 -0.23751 - -0.850599 -0.025534 -0.342519 - -0.892446 -0.026317 -0.380016 -e -v - -0.683646 -0.02262 -0.159036 - -0.770733 -0.023882 -0.236379 - -0.737238 -0.023882 -0.23751 - -0.853818 -0.025274 -0.342519 - -0.893316 -0.026231 -0.380016 -e -v - -0.690171 -0.021924 -0.159036 - -0.775518 -0.023447 -0.236379 - -0.74298 -0.023447 -0.23751 - -0.857037 -0.025013 -0.342519 - -0.894099 -0.026231 -0.380016 -e -v - -0.696696 -0.021402 -0.159036 - -0.780216 -0.023099 -0.236379 - -0.748635 -0.023099 -0.23751 - -0.860256 -0.024926 -0.342519 - -0.894969 -0.026144 -0.380016 -e -v - -0.709746 -0.020706 -0.159036 - -0.789786 -0.022664 -0.236379 - -0.760032 -0.022664 -0.23751 - -0.866607 -0.024665 -0.342519 - -0.896622 -0.026144 -0.380016 -e -v - -0.735846 -0.019836 -0.159036 - -0.808752 -0.022055 -0.236379 - -0.782826 -0.022055 -0.23751 - -0.879483 -0.024403 -0.342519 - -0.899928 -0.026057 -0.380016 -e -v - -0.761946 -0.019401 -0.159036 - -0.827718 -0.021793 -0.236379 - -0.805533 -0.021793 -0.23751 - -0.892272 -0.02423 -0.342519 - -0.903234 -0.026057 -0.380016 -e -v - -0.787959 -0.019401 -0.159036 - -0.846771 -0.021793 -0.236379 - -0.828327 -0.021793 -0.23751 - -0.905061 -0.02423 -0.342519 - -0.90654 -0.026057 -0.380016 -e -v - -0.814059 -0.019836 -0.159036 - -0.865737 -0.022055 -0.236379 - -0.851034 -0.022055 -0.23751 - -0.917937 -0.024403 -0.342519 - -0.909846 -0.026057 -0.380016 -e -v - -0.840159 -0.020619 -0.159036 - -0.88479 -0.022576 -0.236379 - -0.873828 -0.022576 -0.23751 - -0.930726 -0.024665 -0.342519 - -0.913152 -0.026144 -0.380016 -e -v - -0.866172 -0.021837 -0.159036 - -0.903756 -0.023359 -0.236379 - -0.896622 -0.023359 -0.23751 - -0.943515 -0.025013 -0.342519 - -0.916458 -0.026231 -0.380016 -e -v - -0.892272 -0.023403 -0.159036 - -0.922809 -0.024403 -0.236379 - -0.919329 -0.024403 -0.23751 - -0.956391 -0.025534 -0.342519 - -0.919764 -0.026317 -0.380016 -e -v - -0.918372 -0.025317 -0.159036 - -0.941775 -0.025621 -0.236379 - -0.942123 -0.025621 -0.23751 - -0.96918 -0.026057 -0.342519 - -0.92307 -0.026405 -0.380016 -e -v - -0.931422 -0.026622 -0.159036 - -0.951258 -0.026579 -0.236379 - -0.95352 -0.026579 -0.23751 - -0.975618 -0.026492 -0.342519 - -0.92481 -0.026492 -0.380016 -e -v - -0.918372 -0.027753 -0.159036 - -0.941775 -0.027275 -0.236379 - -0.942123 -0.027275 -0.23751 - -0.96918 -0.02684 -0.342519 - -0.92307 -0.026579 -0.380016 -e -v - -0.892272 -0.029667 -0.159036 - -0.922809 -0.028579 -0.236379 - -0.919329 -0.028579 -0.23751 - -0.956391 -0.027448 -0.342519 - -0.919764 -0.026665 -0.380016 -e -v - -0.866172 -0.031233 -0.159036 - -0.903756 -0.029624 -0.236379 - -0.896622 -0.029624 -0.23751 - -0.943515 -0.027971 -0.342519 - -0.916458 -0.026752 -0.380016 -e -v - -0.840159 -0.032451 -0.159036 - -0.88479 -0.030406 -0.236379 - -0.873828 -0.030406 -0.23751 - -0.930726 -0.028319 -0.342519 - -0.913152 -0.02684 -0.380016 -e -v - -0.814059 -0.033234 -0.159036 - -0.865737 -0.030928 -0.236379 - -0.851034 -0.030928 -0.23751 - -0.917937 -0.028579 -0.342519 - -0.909846 -0.02684 -0.380016 -e -v - -0.787959 -0.033669 -0.159036 - -0.846771 -0.031189 -0.236379 - -0.828327 -0.031189 -0.23751 - -0.905061 -0.028667 -0.342519 - -0.90654 -0.026927 -0.380016 -e -v - -0.761946 -0.033669 -0.159036 - -0.827718 -0.031189 -0.236379 - -0.805533 -0.031189 -0.23751 - -0.892272 -0.028667 -0.342519 - -0.903234 -0.026927 -0.380016 -e -v - -0.735846 -0.033234 -0.159036 - -0.808752 -0.030928 -0.236379 - -0.782826 -0.030928 -0.23751 - -0.879483 -0.028579 -0.342519 - -0.899928 -0.02684 -0.380016 -e -v - -0.709746 -0.032364 -0.159036 - -0.789786 -0.03032 -0.236379 - -0.760032 -0.03032 -0.23751 - -0.866607 -0.028319 -0.342519 - -0.896622 -0.02684 -0.380016 -e -v - -0.696696 -0.031581 -0.159036 - -0.780216 -0.029797 -0.236379 - -0.748635 -0.029797 -0.23751 - -0.860256 -0.028058 -0.342519 - -0.894969 -0.026752 -0.380016 -e -v - -0.690171 -0.031059 -0.159036 - -0.775518 -0.029537 -0.236379 - -0.74298 -0.029537 -0.23751 - -0.857037 -0.027883 -0.342519 - -0.894099 -0.026752 -0.380016 -e -v - -0.683646 -0.03045 -0.159036 - -0.770733 -0.029102 -0.236379 - -0.737238 -0.029102 -0.23751 - -0.853818 -0.02771 -0.342519 - -0.893316 -0.026665 -0.380016 -e -v - -0.677121 -0.029493 -0.159036 - -0.766035 -0.028406 -0.236379 - -0.731583 -0.028406 -0.23751 - -0.850599 -0.027362 -0.342519 - -0.892446 -0.026665 -0.380016 -e -v - -0.672597 -0.028275 -0.159036 - -0.762642 -0.027623 -0.236379 - -0.727581 -0.027623 -0.23751 - -0.848424 -0.027013 -0.342519 - -0.891837 -0.026579 -0.380016 -e -v - -0.670683 -0.026622 -0.159036 - -0.76125 -0.026492 -0.236379 - -0.725928 -0.026492 -0.23751 - -0.84738 -0.026492 -0.342519 - -0.891663 -0.026492 -0.380016 -e diff --git a/lib/glut-3.7.6/progs/data/fendi.rgb b/lib/glut-3.7.6/progs/data/fendi.rgb deleted file mode 100644 index 00c78b9fa775062d7caa80d2919a143a85cb51a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 169124 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 diff --git a/lib/glut-3.7.6/progs/data/flame/f00 b/lib/glut-3.7.6/progs/data/flame/f00 deleted file mode 100644 index d43a935fb3b1af75423f0c760b0f389afe057146..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16896 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 VIMo$%5ub(Ubj83j_CJike*nt9>~;VE diff --git a/lib/glut-3.7.6/progs/data/flame/f04 b/lib/glut-3.7.6/progs/data/flame/f04 deleted file mode 100644 index d01562cd0beb52c857921f9885105324ffd6b1e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16896 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 diff --git a/lib/glut-3.7.6/progs/data/flame/f05 b/lib/glut-3.7.6/progs/data/flame/f05 deleted file mode 100644 index 89316c69dcf1c4cf18219fd6e16f568472352752..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16896 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 diff --git a/lib/glut-3.7.6/progs/data/flame/f07 b/lib/glut-3.7.6/progs/data/flame/f07 deleted file mode 100644 index 50e422f9f6219b9bc3228740c27c8b1b37c9682f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16896 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 diff --git a/lib/glut-3.7.6/progs/data/flame/f08 b/lib/glut-3.7.6/progs/data/flame/f08 deleted file mode 100644 index 7c10d06cfa73f72e4c53af3d52d420a4430dca34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16896 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 u3c=IGBGZiC_5MHP*Q!c*% diff --git a/lib/glut-3.7.6/progs/data/flame/f09 b/lib/glut-3.7.6/progs/data/flame/f09 deleted file mode 100644 index 158a464b5fec4650911714dda1c321eb093056b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16896 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 diff --git a/lib/glut-3.7.6/progs/data/flame/f10 b/lib/glut-3.7.6/progs/data/flame/f10 deleted file mode 100644 index ef495342efa4f03e194e4b16808cd3f5ce1fe03c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16896 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 Su?$}RbRx}IWn`ce2L20b*aUR| diff --git a/lib/glut-3.7.6/progs/data/flame/f11 b/lib/glut-3.7.6/progs/data/flame/f11 deleted file mode 100644 index 5e8d4e9eec10b8ef705356c8ba20ac25d35d8d65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16896 zcmeHO2UHZ-8lKq>%d!hgQMz=LCZeLEh}abjDn&&^167XU%!%yz};Q&d$u8`Tp|V|NghkfIdV} zgo*SAe=MY_XtamfbDU;RPEKmB`o|6|grSoa0(7<(5i%;M^}=vsV8FnDfq{R50imtf z=riQ-My**E&e30h*~Tj=pOe_)fBJorr-|PBxj&Td^mlW5FVWHyv-m>%lg z(;^PY_D$*jT_x-p7eN?Y6Y#5Fu}v~%*tok|uu#45j0ryp%*PJ&=_s<+3ol3tXF2uS znmEGEk*7}p+4Obt7IC+o%8Z$ox~y+U9$h0)LC(tseQx7#s@~wl{RIxRV}N}aud2YL zQXH3J#KYOMySh^);bm1iuKA;!<3$RyP1Cq^vY;R+udf z7CM##kYrh0WQ0Er7yK(RjFd}d8jYq=is9s=(B2DU*zg7fS78LD#v1@$ zF2Qigg;=k}iEsp%2U?@XBVS>PMvWZcDL@19;_w8o(X*g>126gJH(ffVNu(sDR;e`_ z6@e4Pt+g8>I{3o$1(wxWqN;a~d>qsIu2E}LBtg6`-Fqt6tYv=KE(=_%Lj0vi_;o3v z0LnEgwF<{&<%L-*b~(0-Yq`nwI)FV7?^BBDxYsBYGK?f8ds9-^x+5qAf!txS`)*}S zuOM+u)u>b{}Ww1tCbvF;cQUcE60ouBV3%Y6sVHi#zuYcK0cc6PN@eaL@zm$gKnJ zkk$BaW#b3KwBR&?lsqFb4Cu!}sm;AqF}D`4dt3i}X8#r??H&E^6J#yG;{aZZk+*U( zuBTQLZ{Cn4^L^UGwcNA3K@vbO2s_YkWwQDQd3h<7

J<0CCwo@wtW{7wcUmLPvA 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 U{u~aTQhVi}6(j%PZ_L1d0Dwwy`v3p{ diff --git a/lib/glut-3.7.6/progs/data/flame/f14 b/lib/glut-3.7.6/progs/data/flame/f14 deleted file mode 100644 index 1c84e8d460fae3f7cc8ea8a5abf87ba08e2c166f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16896 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 U;1Ljb=i{S)w@7pU*Ym)?0Bs;jLI3~& diff --git a/lib/glut-3.7.6/progs/data/flame/f15 b/lib/glut-3.7.6/progs/data/flame/f15 deleted file mode 100644 index 238b9fb5926778485eee04415d87e20fed422349..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16896 zcmeHOc~nzZ8h=~z61Ie}Bl{k#KLCs%#vVb&Oa*vfU}smGu~-si03f`02|HlV(}G~a(3LU3G^0=l zJ2-O!5C=;Rz}v_wBj5X%sNbr)cm-?}_K$JWw!F^AWdtjhp)}@Q{Jy_xg zWJkG5yw;r<9U17B`S6#0PVDdl22KtPnBY-(dHIMT!)snp_XF7B!=v52vx_5E{`BOl z>if@I=~XQ8)?xu6KDgsl{lk)-lw7I&EXhR3rVTLQV0Z$9_tFZ598{subai*D zRG_xT^(lV#0=R%=7`vRN6fJVOLaFKQ?(S-rw@{A*>?5=1+d^?58h?yZ$N`+D7<_jp zC8reAtw*F6d%@s&UeYT{0H@lN3N?e*v{6)RZFq>4j}-(S9po2SegjDF>{2RJ0N&N1 zR49}WMtYzELkK)CM;boAl4=21T1jcTRBgZ*ntm}8&Ui%h@%qWx=V^t!P1D%{8W3ng z(XI7c(kvi^gGWSrj^=Hxr73xs8QzR9h<`k)r9V zqYC9;P8tvCfar*?Cl($Bo-3!AMo=nWR*au^;)}c?rf~8RgJpl7`#r!>a-cg+zrIs> z>&~5B#YvF%BS`F-(k3NP9GIX4)qGWU|HX?hPad-8K`Icqt@t(QvouXB>DJaCa!wy! zcWl?<>5h;QggfSw%~u$~6fJL%D}P?ov^t>pn1|3X9IpFd;|`pvZl-ApR8Uj%xGJq^ zpRD4v1=kGHfe`zJTlc9F{L<$~ z(({HH88bsMbm0@YP3Y3KnWhLY|L&=^+heSq;lrO+iltY4R`N_2BZ2$81c|!|21{O_ ziq4UvJntHgJn6qfN zw@B?7iE?yRU5o!9@b7fdU+NjqGoWWc&%pnX0i63G!cc<4*W!gb4M8Xv@U=N!)YelM zH9QTFoZVruL2W#jg#oHsZZxoraz#Amh-nm$_WZmw1if->}*K~GXS`oy;hk4Nz=kGkedGh-vX8o^L zx5(=j23in+RJdZ`^GWTk=l35d+W{P`-PQ@t?6hvU7XD0LQY2w32yjD`yW16b+xrJ`GYQ1 zyW&!Ljw!4IIq*sMn6f8Ib$464Qq!gGP&VE>vSOAKobd=M4zRLI+4a-wjxLo7to>VF zeN(Z0+4N8=NcPbfnPX_ujw?U5X*BJPcW+<1wsz>)q9l@p#Y@LHgr=0$-G1HCE`M~P z`oO_dp?i_c650VR$C`T#U0z-DxV2G!uXyCHX>78>CI*j33?R#geT<{WtP6gEpCU^!q&0tUjCHXkPGqx1;;}TvG zFnuy0F~Zi>&qg=>IRuY`61I_p{dqdIAck5B2&3SP>7#5}&Ob4Nua(F%GO>tXf8@x# zM0N=reprNyF~a49CMKmXF8}peZ944UUk|<9#AzuB_6|XX`}bdNIrIAF&572m7$5@2 zOq-n{%h=SUQg_!s-S(GcGgf%iJ89~o8Tl2*o0;YRjWvbI){J7%Zh(hoF8H`$?f$)u zO#a|O)smrh3>F&C5ogZK*>mOS&Swn1>Fe!@wyazjBc(IfJnA@7(E#A>Kc3n)PHfb} zEZlz-cbi}FPxY~rpS_|RF7GeNjkSW$prOD_Qj%MILHY2`mfckwSEdH~TChkzfz=8| z_)W;FX?jt&IVW@6Bo~5X%EJE$4#2x5XKuN2dgJVr_{f0<2x`VAfyhC?q9;C~uyWbv zocK^z5pW$=**8D{>EP=#Hf#L+)PW%;T%1diY?hx0fw=_=EQgF7o8ar_BET^&AH*RR z7GS8yAam=;c&V$ElM@M)#|VsR71)AdhJgV-Lu3JFya7HYs1aDZvsyvo1a2BNc+}|O z5)Nq$mSA8h$;y3E3^xf1j~Emv#fq&R0 zFvvv%e|l3ho0FaOe>#)^_XO15- zdhuCrTlbfY2z(+0%ncpheq&&QfUtOG*3C}}V=mbi(@2hqnAvhMpRo*f=cS(v?!qv{ z#fF(S+mEUWWiff|twVOkAIlgnAPFS0_`5Yh{c46fwU{`4w9n_Oe56w2nb)o@@qq%p zeaLZEyf{p<=}hVnsdwI!XJ5Fz{R!sGF+MvYJi~A4jddxBqt7*WJPLt9y?rKTxOc$p z(zud`zy0;}qu1)r4dLwE&`x5?ksRAs_w>ou%8qum`p`HboA*Z%%+JEuf5H7r%{NNU zszJHC)h)>Nt$Oc0vkmZdj$O39RNivoC4+y}I5m#N3fy2>)w$IL$!WuWqJLAW)f$aj zeK>~2_XCn^YIWPKobUGo(?RL#(x_j41oQ5CuVDl007~^ttpcLEx;0&36S{M21av1r zBM&lSL1DK4yMcI(TD~PM#KjaYAQ>mD?}cl(@4LIe)zfg7!39ekq1?c7N{vb@ozb3A z0Pxq5XP1&)>JNkGOJZ+m;XrRKUR%NWn5Y4PFl~s&he#`KcQUrWkq;F3WxOvc(tghL z9`E57#K!#ja4#MZz_gxP-Pydr;XT0KpDk8x$u77GAet_Qc?JyFc=~C!Hih#3IxG&H zn!ocxA08alijy}~XX4@^Uj!DFU!Sw{W+x+`kqyetkCwKb$jX3pU~KfaQmfy5)S3+2o=FTMEo)7u_3 zHJ?0N?E*WRN%xe}>P~In18V#{`~30EHTzfOyFms~GPPpIw>`q!Ubd<0%jk{ar8T~0 z#xZbdOf2na-Dwaum{NDH;mfR52S-<(wQDUy(8E<7`=&$H=M9(C@z>i1cD@b;-^N6Vnr2or2EY{#a}k=4T1Z zK4@ibz~E?Muq-PV^jE|3*C(^*C7TG?WI#|u4sJha&88XV2!FwYx=nkB*?B;RzaBTU z^-r2Lq0rMrk*7n*AS)}c+z3;g{rmwlv^Errqx?KvEntG)f9e~k slSgc15OlYBw+eG#v8gqScKcloe2mRYZ@&YBOI_`Lw18lKs{%NEMgUCOf3L7GyPA|eq50Vyg<5fDVWiWP%BHi!y|8nL%Tjfshg zB_3q+CKnO)i}JkLF|?0N%<*E8haA2)Z;J`ZPScHZxMzjw|#bG~y1 z^bUd|bR-OX7)XEVBdelfyQ0j(9PO$9Sj9kS8e5^j=gVS<#09)O(0|b@pjSYzz+Xjy z{_$?e(V%QPI%Kd0NaGKU0!kN{Y7E#2heE*07VUqcu#(0zsT*LWN)U+!3jmEK&#|Q* zf$wG$({&NU0N%AKJ=$6KY=b4j%v>aiy_Pk~$XFCuzhQcw6)aGDo#{lsNhMqA=AP=IVBRz5-tM<8)LckZBl=-pag9B=JR3t_vTvDi>rNLv# zDd*gpW^NEPD0U+69myoYN=A4bc7NQ;bl)x zE%;6;Z&!A!01FK0NVb9-DQSJZK2d4qpBBa#R2ec|ei9urhV~ zRp3#f!pU2p#E(TxZ`=FESOFY=G-^}C{PQ@jxrLY#Yilg`jsE0tMlcr+kMQQE6koxV zAOaABO8L$9^6LGEH_i5k^p7AxTjoAjwmw(lfV`spn^k3BJZRp!b|D|qKVnl^+=Bmd zR|(3))`#y#SFCt*d)c&9L)Z@FI5X?CQmF#on?L$Rbu#7KS+c3Kjp;NCNCHl?mu-Fo z;>Yo}`aR!PMXadsDO|@v=p0DA!RQ%fx0IUjXT@ZMdwZ2TC&j_^9G!j1qOYDmYd!bl zg=-T=_>J^-b+z;!MP&dNE~{8DIm181-%l(Mmn|G`%#oTx^?V%xfy9As5D65E@5fJi08+UR-eC z!;{4`VUq`)P0-{-fx~8HOd7wTq2YYhLR$tU1({45-N4MOYTo3+)2$C1s;i?oaJjF> zKWgaZYRY5M`RgjCEV-%d#C|?M-voaB0v(Z3v#}u3+&$@w<2z2as)*k1+dG5d`O~Ay zzPfq-@chDan4+mo-A$-_n)al^&q7%~E6&}2@cpS%w>tX>qOZ5Nr}NUrFd3H#*^dPw zOHMcb`16g17hRh4y9ax6akUlQD!>b_845$^o^8C}eB*}>?fLPjYmYI?3QmWEUo|G(Ee5P%9A~1aXESZUT&|D>-VSWZqk)Ia%OMcU00Pm zCnr$o16W(%wBUqV>>$-u@F=gAK^7_)uCqPjZ!c8d`*>>xJqH)0}*v(6l8qGScq%3=UboLqIAI*IV?8gf!QYtfey5)rY+&P)) zZ(Stw|K7%$$|MPC7Pb}9g|T^M^D}df9wqbdz8jm0;++5%Bn6N~5MGdPxg z{Vk0+ zD=Ie-;kxB5{0?c?Im4YlNiqII&vFZD7->RFPI(^b4I|hsFNU(*( zGhJh+tv+{fL1K{Ka4(QW38}EBf%t7h$Chm_DT;BnG9(vmD6PJMNSXGYPH{OCv&Kp- zS#*@fpi@eOXo!`IfxtI3IKWyUV4@(C>9yf_9fe(n|=4jV*610QIx=0cvM zm8rMCjK|=M83?7Or-7q1p@(-wM1T#Q!2wI5z&WM(fep6vh>^j5+Ra~z@J<@}kx}J41>{CFHbMoLcTcU4pKu-hUuB>CUBPIv*eLAa*6dOnEiK3jwVV=?yl_W-dCs(uDc2s9j(3Cv z_Fu+|TAdp6+7v|X6%1n&lpDLdu=)PQ z(;Wa$C`(6rzO?@OFG4>riPN~u8S)pGpOJ8aI2IZHdYJACK|=M48L;^^XVXA#_67!e2B`tfQFp7c(1WxC|nS9?MA!^k5~euwW_W0!vL zlW{QHkfLczTQqpJ*1v|p)tF$v7#I!FsdF`1~y5gZa@*`o}pTWG0 zMc2D^_@0}4mb~-9iQ1A-Nd5>CwqqVnywLQ4o=(-xjY}>+Y28`99QrLXhqVjaiN_B~ z1}*I^d*YX`U$Q5? z<-xX#3RQ0gNSL#d*_8j zNGUF1fR%5CecB{%;C0-_MRAi&C@-KOJeO#nC_ah`BR#}ag4c?Oa%ct!SA;T59HASY qPJdm^3OHQa3*t;`~ClSzkBD- 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 C_P4D7 diff --git a/lib/glut-3.7.6/progs/data/flame/f20 b/lib/glut-3.7.6/progs/data/flame/f20 deleted file mode 100644 index 7aa1db15fc278f76c8225ca735bfc2696f9a77b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16896 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 diff --git a/lib/glut-3.7.6/progs/data/flame/f21 b/lib/glut-3.7.6/progs/data/flame/f21 deleted file mode 100644 index e11df278c32ade96f43fab6b60753f93a416a57b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16896 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 diff --git a/lib/glut-3.7.6/progs/data/flame/f23 b/lib/glut-3.7.6/progs/data/flame/f23 deleted file mode 100644 index 54844af4c08b41fcc995edf41e1e204c55a34fd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16896 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 JEB}8m@Nd8FU|RqH diff --git a/lib/glut-3.7.6/progs/data/flame/f24 b/lib/glut-3.7.6/progs/data/flame/f24 deleted file mode 100644 index 210cd1752ce8ab24136c39e7d3c99dad30e5a34c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16896 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 diff --git a/lib/glut-3.7.6/progs/data/flame/f26 b/lib/glut-3.7.6/progs/data/flame/f26 deleted file mode 100644 index d592ea9b0dba2bedb97ae30dfd95ec94d727acae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16896 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 Sl8ffqT>Q{nEpPw!7Wf}lBy{8e diff --git a/lib/glut-3.7.6/progs/data/flame/f30 b/lib/glut-3.7.6/progs/data/flame/f30 deleted file mode 100644 index 5d7b0db1f758e6dfd22f96825560e2d8e89e5721..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16896 zcmeHO30PFs9zS=PeHa;5Sq5a6MFSxaL{V@7(Sei{LPbO+P(ehql-H(cTBKG~7|--s zxs+yFxjx(;W={i4!>1`?8lWaKcZOx=&hUNj+?jzUtmdAXzVE&7y}5pJ&%O8j{>$&I z|Np&%T?ZH-z*zW?1jeJ6IhB+SDal{5z;x?RJCOi4$V!4b`wvHuF|z-{Ua&J@XW)N> z0StI}U^ciiOyK0)H!E2q#>+U_SOaA+m@T#gFeEFEZ>?&Glh(F>zno*e0G`M5Ev+x- z3aytAy}MI=C)Ij9h&X!e(n7O|9#xb_@!NNk~ufSM0yyjEnm3uq_ZSLV$@A zGIsAheralXS`1rUe?4*#kXEn%@W`d+2a4un?@9X~urK(&o>%kD-%GzxeOCX@>R|Rb zQ%%BM7Cv_N(`g&2is$prZ$ceL(%~Z9Kd|c9u9`b}-r~5SsQM#E0N^jb(fn{{{qq6jVa@Cn1RGlYJ98C?Ibr_8R;pDa#osur8J5`+z{?&P7%WY~h(pb*DtGadZ z0Yxb(HKkPl+(uDzkqDf16+(NoG~K0Cc2P>DLOBPsZO&M%f!9r2O z2eEM6Ko|7A-O2{J)F-86LyiTI*<&0B;?GnHt&Z-7<4?IWA^+fQE8eYEy;j+x>}a`gGP^CG1<1UL0OJ?k`*G;xD+=X5 zw{3~KwZ!}(o3e{rT-wa|!yO7mU0%Z67JoJv^Ew_|pTxjIN7q8+GOUjGUe05auslt5gq?6GyYR9*)wPiyWakZt3ceI@D@P^@hKr56Vso=LHe~<71>OvE*1I_1!YA z6q*cq@h@SkD;uH-fxTpL4ho0QvNw-L(o zbg)GRHnucB+!g_3MDYvJJ~k{O;t3n8mbuzsf+#a17kSrWrVsaxUs8y$Z!m)ziiCIQ zq}f(=0){or!8K*Pe3pBtqgCyQkBl5Q<*E5=wid`oS9jDTtHr)R~73kJGo z`5MPbv8PNDT^SbcH8a+7{a@F>;eLxCV&%yRMKFuTXSQ=lhX^KJ2x-xRvawlk-_3DG z0>jEdu-}ExnD=buG`ZZ3>pc}^`v#lNZABFB^z>^hD=RBXUzi_Tz8N8Uf!ck`YS*rO z@6h?PUsms{e|^R3y}M*c4#*bNHMaI>bvo4#ZQU&wzWTm?2vQfoN8i*L186->_jEt( zY(m^ZKGAIo|6m3I!n?1I5+gZK(DMtvvxQRKDs@7_hc))c|MU;nPJYq&5)-_$ABvoc zR()Ume|+n#(#@&tv9S387MeZg=+(>F9s=J|w%MzGHN+@5>xCb= zd3;a2G;JQr4B}{P?6?R3yx;lqjr_r$*~thqFfk?CU_^Q-;7%y3$j^538td3^7K_4T z6AcDr#mmy)+_q!mi;fbs#`6p`jMd=Kl;^h89^92gUrxmvz~Kv5(c@eW zySI+!hW}C~yrBbJ>ns2yN#Itb9{ROA@WlkjsxHWYa6V7!#UbJD2}9U?8kIXkkEMPR zZ*O;3H$LtH!#|V*la2`Vk4c@AJvl5nJJ4}(QX&c(+UqcV{-%cJ`)x;7tgl;NkXxLC zxc}t6+ooosFTL{ijZ+6IKU#r^cW+|Q%%Q(~=#?FZ%1~aPL0^5Y7}4-=>!;-(?p}`g z6%J=rXP4FK zP%mJ{4kG;+?ptk2Uo?dSI0Dcj0F3L9+-&0SY6J$8=!hSZaRvqLHR(U*#pK}msDqG9 z`CMzr0c~@)ZUXenIq+j|Z@1>$G!Fx(s4EdSe#6aJR zKx^;IAEAZ)jmT4Hno7`C{$B}~m2bP(;`ysvC>LbVlC@u4b0g4S-;?fQfJw&9{PeRk zO%M3>i*%`9-BJ zESvU5PvyG8hPP2Wl5>n04+*V4y?@8OLO)5;a8&&pm-`U!($wb=z=HI8=uBd6#q3WQu zg-G4F;3iG$;P=yd9X!MTG+l^9fM<>A^*@Z?^-zFLSMGo^mvL(QU%xXpKnXREqfDfn zg9Gu`Cqq1sbr`+0@AWlwz`)|qao%t>;IV533U)WEnmCPa!2@kE%1T&k|ZfnhlW1i%Lyj1L_;LZ(lm*?0k22 z)ElITVkXqmCI@tPHdPGcPt2Tx5QIquAVC8M0F%Pd)8Ef<@lStdbDo)j7K$)qAvsJ# z3JjfJ^Knwqkv7c{1OlM^zyr+hZ*;V#lU97Z>-6Q82T>NZ4tOkHm0k8Jt$nkqjqYy! zwm!dO;eZO3E`_+TRM9?s+6|ii_QRU^)@7Ce1E0HljLDciu1-VK^-rfPYzrFr+|spd z$7~ENVus&ebB?x@u#bX86O6OfTWc_o3E@`?3NG&-&UOMK!Qi^hOumtGbT#g==V8zF z#yNBMrXozBf~rG)u)B)S)#mSp>b0u0l<_EADSXZ{=69pKm23BPGVa%eI0c|AfH*%C ye*Z7TIDRS5oNm%ydyZ$tR*>t(c+4H-`Q$L1`?8lWaKcZOx=&hUNj+?jzUtmdAXzVE&7y}5pJ&%O8j{>$&I z|Np&%T?ZH-z*zW?1jeJ6IhB+SDal{5z;x?RJCOi4$V!4b`wvHuF|z-{Ua&J@XW)N> z0StI}U^ciiOyK0)H!E2q#>+U_SOaA+m@T#gFeEFEZ>?&Glh(F>zno*e0G`M5Ev+x- z3aytAy}MI=C)Ij9h&X!e(n7O|9#xb_@!NNk~ufSM0yyjEnm3uq_ZSLV$@A zGIsAheralXS`1rUe?4*#kXEn%@W`d+2a4un?@9X~urK(&o>%kD-%GzxeOCX@>R|Rb zQ%%BM7Cv_N(`g&2is$prZ$ceL(%~Z9Kd|c9u9`b}-r~5SsQM#E0N^jb(fn{{{qq6jVa@Cn1RGlYJ98C?Ibr_8R;pDa#osur8J5`+z{?&P7%WY~h(pb*DtGadZ z0Yxb(HKkPl+(uDzkqDf16+(NoG~K0Cc2P>DLOBPsZO&M%f!9r2O z2eEM6Ko|7A-O2{J)F-86LyiTI*<&0B;?GnHt&Z-7<4?IWA^+fQE8eYEy;j+x>}a`gGP^CG1<1UL0OJ?k`*G;xD+=X5 zw{3~KwZ!}(o3e{rT-wa|!yO7mU0%Z67JoJv^Ew_|pTxjIN7q8+GOUjGUe05auslt5gq?6GyYR9*)wPiyWakZt3ceI@D@P^@hKr56Vso=LHe~<71>OvE*1I_1!YA z6q*cq@h@SkD;uH-fxTpL4ho0QvNw-L(o zbg)GRHnucB+!g_3MDYvJJ~k{O;t3n8mbuzsf+#a17kSrWrVsaxUs8y$Z!m)ziiCIQ zq}f(=0){or!8K*Pe3pBtqgCyQkBl5Q<*E5=wid`oS9jDTtHr)R~73kJGo z`5MPbv8PNDT^SbcH8a+7{a@F>;eLxCV&%yRMKFuTXSQ=lhX^KJ2x-xRvawlk-_3DG z0>jEdu-}ExnD=buG`ZZ3>pc}^`v#lNZABFB^z>^hD=RBXUzi_Tz8N8Uf!ck`YS*rO z@6h?PUsms{e|^R3y}M*c4#*bNHMaI>bvo4#ZQU&wzWTm?2vQfoN8i*L186->_jEt( zY(m^ZKGAIo|6m3I!n?1I5+gZK(DMtvvxQRKDs@7_hc))c|MU;nPJYq&5)-_$ABvoc zR()Ume|+n#(#@&tv9S387MeZg=+(>F9s=J|w%MzGHN+@5>xCb= zd3;a2G;JQr4B}{P?6?R3yx;lqjr_r$*~thqFfk?CU_^Q-;7%y3$j^538td3^7K_4T z6AcDr#mmy)+_q!mi;fbs#`6p`jMd=Kl;^h89^92gUrxmvz~Kv5(c@eW zySI+!hW}C~yrBbJ>ns2yN#Itb9{ROA@WlkjsxHWYa6V7!#UbJD2}9U?8kIXkkEMPR zZ*O;3H$LtH!#|V*la2`Vk4c@AJvl5nJJ4}(QX&c(+UqcV{-%cJ`)x;7tgl;NkXxLC zxc}t6+ooosFTL{ijZ+6IKU#r^cW+|Q%%Q(~=#?FZ%1~aPL0^5Y7}4-=>!;-(?p}`g z6%J=rXP4FK zP%mJ{4kG;+?ptk2Uo?dSI0Dcj0F3L9+-&0SY6J$8=!hSZaRvqLHR(U*#pK}msDqG9 z`CMzr0c~@)ZUXenIq+j|Z@1>$G!Fx(s4EdSe#6aJR zKx^;IAEAZ)jmT4Hno7`C{$B}~m2bP(;`ysvC>LbVlC@u4b0g4S-;?fQfJw&9{PeRk zO%M3>i*%`9-BJ zESvU5PvyG8hPP2Wl5>n04+*V4y?@8OLO)5;a8&&pm-`U!($wb=z=HI8=uBd6#q3WQu zg-G4F;3iG$;P=yd9X!MTG+l^9fM<>A^*@Z?^-zFLSMGo^mvL(QU%xXpKnXREqfDfn zg9Gu`Cqq1sbr`+0@AWlwz`)|qao%t>;IV533U)WEnmCPa!2@kE%1T&k|ZfnhlW1i%Lyj1L_;LZ(lm*?0k22 z)ElITVkXqmCI@tPHdPGcPt2Tx5QIquAVC8M0F%Pd)8Ef<@lStdbDo)j7K$)qAvsJ# z3JjfJ^Knwqkv7c{1OlM^zyr+hZ*;V#lU97Z>-6Q82T>NZ4tOkHm0k8Jt$nkqjqYy! zwm!dO;eZO3E`_+TRM9?s+6|ii_QRU^)@7Ce1E0HljLDciu1-VK^-rfPYzrFr+|spd z$7~ENVus&ebB?x@u#bX86O6OfTWc_o3E@`?3NG&-&UOMK!Qi^hOumtGbT#g==V8zF z#yNBMrXozBf~rG)u)B)S)#mSp>b0u0l<_EADSXZ{=69pKm23BPGVa%eI0c|AfH*%C ye*Z7TIDRS5oNm%ydyZ$tR*>t(c+4H-`Q$LenTUS-@YxUk;Gwt!rIAa4I&)5!@S&S9H4tv0fVkct#00GG) z-97EG$G~{T3jrYmLIN9u5CRE^Knz3zu?dhOML`iDMMy01m#k7Ejrsr2z4z6-ud3bs zJ;D4{{q8&GymOa#-~G)g{j5|{o;rj7Jf;8locaC#pZ^mhP(d#%tI*4!cR)`---Ldr zR6Gvd3cU;ZB=i&Ls#3{O=uOavp`R+1)}cF~M2=xOLTN{!%p!YO$IwS0VH!`{@xI_zP*dw;LgkurqmA3>jvd>KOgqw^5v`sf4D zm!O|3wG}{E+gmS&-UuPzt!?NL=;P2=6p}MqHoqJA#aM`tv)Y2LF|vOj$MyBl3n1j7 z&OkR8es9WM^Il$O3)jVaXN<4?r9H)%R+w*fgAsE%2AzbMBgS5>LyOQHGy!#>Mow+h zwuavoi2dg;{pfG|&bW-pYl>rWEp!UPoT<}Bwhz2!u4l~e^YzvG6o1)A+h@kfi{ovd z$?<0%6#LHHZ2xV4=Fx`tNwL5A{&P%t&Hi%@*!j2pw`+hgZCv{|=O61==HJc-e{DaQ z-x(v@4|~u4?l&&hzUa?u`z+2q#qsCdpMaPT^Wq$F{@AZBv;Ym8e`yPpS2|xVd*yPe zR8{9nCH(E}l=1g2{`UE2q*S1GN+qwn=Xqkb3oE%rt8zK;a5tot_{*JC{Beh&c1qWR^;n-UGP6-9$Z1Ti*|O&!lI3 zX^Xpv!@GIgz}jBmbF{Cvg{iSc4si5>b3R4`J4}FB@}PhX2}gl}nPQ?Y@FEC8+zU!O zmIJ+9W0!1K!s}DJp|WUvt17{A-foT@x17Tajj9W~4`4QE+1VcKXnD~Pzqi1HLKNJd6StLWAPdSHrwi3FyxkEeNI zb)vh_sAyZ$7Np}Vn-ggz!s?*mHWIju#463{rRg+cST^g%s6M;CHj-dzFkNZHY}TfG z$ENCO>_qVVxV6|@sKph@jK+^(nO2(JtzM^!<%0+Tp5!6Z*<+`sN9u`*>eDbtM%S)g zYNoo;7sDWKEuTC#)~x9#d8J3W?&FcUQ>SOgTh%Nn^wba2@!s_-?M77|r2WIRv-+Zw zlVgoUGS&W3+Fm&OlJ4wSO)N|5G5yjh~)8@UK*oZNczZ7YkTNY_SS+iq&`099#5txEB&Yj%(=$+ThH**n?Z+*Ob$N8JL z7TZ|_c4A`jwx`~9^Ts5)-0#H1@~xlw*1g9UBm$NqbMV8YIlcbIue|OLmOH7Jwx?jQX2-6!T7I;{GJ>BPc`_xO z_9knQ=^Db0EF8b@*{ko_n&F#=m;Wh_c~l!;J^SREr$<>x+pjOjA48JpSOpFjI|w@lTs@9=4MD$aiT zYp+^j1U51PW~kcfp8DJW`oNLVRHw!Wn2PbG*M0r5n`UYzg2auR(>J{5!CRI(Sp?HO zb@cx4ymf0V(Sc?4MM=B+^1Zj6m}}Sww2f+0*W7i_$@xxfa(K!-ZfxV8i+62Irh%kp z*6+x|={MZ9G2MvJ3r{^Rtzm6)^TyjZr$=lA)0~d2-Eq$?OA}QcLBG^dbMD$(&n{13 z+VsZA&8j-Fdh|N9VaR0|#1yaf(hawroF7d?v~mx23Ha(! zezGd{_Sh7571`PG{Ku5S$okkqCTHhb=56xy#|taBJu%fbjlQ~w0Q^+7I@oDs`@u>y z0iv`uIx%V9bM#ieegQsL?M_p68fG8?@X@R{?e5bL5GM6zyTk1c-wOnQErz?2RvS%e z^x*#?CVfJ^ekK_pIfPFy|@<1L~$PA8rZ-w)D=hnX%S+_3l%B!wd=4lTRrpNDe}kDl0?9^gSr9~kU2vv5T_>6`KN{XKq|VFJ{YkMK64 zJtPM=?hc`TfbX9dGd6goT|AMGgdb;3`|Y3u{yA77Rw$=n>>oa&iOV*Vlq+k`793gi z!}Vh%><*KO)DET+*SnG%d^{7<_r-u|cx9YPxK52dCfq|*X5`V|FF%O;^0|s&&fB|4 zxT1pWOpjA6r^7Rzy!9YSfJ>~R!jeSz`~E-!plm3!))fS^uSsZbB;IrhyZo<6-Gcs3I|4h(575`Gb*VJMUX8%cT> zOH(}hBxF!UbITAT%R(uZovemkEV0aPC=I1J>ccdLI~aIbT0CaBG(@7|GUY1G5C+Dw z4D-hP*d;EoUTw03|fc7cU2zr14%zANTr7QU2tcz{l6LNUOCjVcht*@uV> z&{$$I#{2M)7;_`kykc<&TiY-iDzb`(m;G@_5Q00eWt7Zee;}eykxpz{2SHI0PWTSX zTYC@}S&GSl33-PEfOMW8j7Tv2{`2!+gc8{%AL3!Zh(;uk0vc&vDqx937>Y)0ET9o1 z3}DIjK4?S+anLBBw~HlxS{eW&VGsw5EQ92^LFaRas1nvZfLnCcjfD#h{nH>U+7-0ZPgjEiUMy3-k zlxW&HBpR{115~0Tpc98dBN?zFl@NE>xx=6lafjKuRH6XHG7K&oeU@W3z(!(Pq!NXN zb4WINLPHSNlS3tD9Fpc?*eF{$c`C`~;xKF^i!UrtiF!tw564EDHXJU&7Y9dp8REmR zk$wjqGC_oW(1`nrgGSs!@$WSbm%x2nUhN@lBpXwnjZ6RsOiX|wa70|dHkOAY0hS_} z^m$_djxHA9$oRWplKB_m=n_8OE*u$umrMHo2eOf-2rTg&nBW*-c2aAW`J9iumv_JRFFGb#kmC_#$U=Qr0jWBF$K2 z5$pX~C=%Gw)M8ABaS&NY&_zIH9|+2@#u#~Jhk$r{0CqA0id9upP#=C$mFTm*=AI08 z(h~n9@ZjXH>BbU{kd5Y^3*Oo?4ruuQ6R9O04M3|!*dY)M7I6^Vg`GYJxg?`$HY@xL zmT@FfRuRfM>pu;)h?Ok~IUwW~a4@=LHLR9B{&ONqHaQk@>o>wA`O=UBLvH;>Y~`Q% zHFQfU2pQ*vXfRtYr?1`t=(5Ogr@&>0Q5K)CZ$s)f%`Lsx`8!59Okv(q0;IW6Fd7C$#@&IEzPnQ{GVTr&S@%4Zi2FdbXb2N=LR==Xu5PKwGEI(%28uO2 zCwYTqBI}yNA;TfMtRrNieT!wHK^oF0T6|h;y`~Q=xgt>!hTM8h-=$w28UUf}=xh*0 zoC>9(0tXdpHpXL{JEc^HiXfCP+JIerUBIw4p*#dRbsKAH%RzYr(zPGK7BTBrf-(Yf zDW_io%Gz!H28U!_)A6L>lhttK@N7_s)We#Nw52$5>p~7tAV4cIM^|ouIhuIPB_F2$ S%oTBfIf;~fa_F<5)b9bAptxNC diff --git a/lib/glut-3.7.6/progs/data/mandrill.rgb b/lib/glut-3.7.6/progs/data/mandrill.rgb deleted file mode 100644 index 8b935608ee48cd756931acde50abbce8a57cea71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53783 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 h|FU;M7HT^vS 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 Px-!UC!qVxWR`~w`#V|zW diff --git a/lib/glut-3.7.6/progs/data/sea.rgb b/lib/glut-3.7.6/progs/data/sea.rgb deleted file mode 100644 index ba7c1b585002cd57c861f2c3b2b671e4dc40ad90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14705 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 T59?D8>r)TwQxE?)Pd)rQo?T1? diff --git a/lib/glut-3.7.6/progs/data/sgi.bw b/lib/glut-3.7.6/progs/data/sgi.bw deleted file mode 100644 index f02f807240d65007df5372c0225b5c9a47f673b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12800 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 G5&3ty#RrT4 diff --git a/lib/glut-3.7.6/progs/data/swamp.rgb b/lib/glut-3.7.6/progs/data/swamp.rgb deleted file mode 100644 index fa985ce876c49751881f5ed20e02cb74c6794cb4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27039 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 diff --git a/lib/glut-3.7.6/progs/data/water.bw b/lib/glut-3.7.6/progs/data/water.bw deleted file mode 100644 index b600a0477cf84127265a72c469a43034d00075f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4608 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 diff --git a/lib/glut-3.7.6/progs/data/wood.rgb b/lib/glut-3.7.6/progs/data/wood.rgb deleted file mode 100644 index 52af2305a4eb47d7a584ab59994872893bfaf66e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12800 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 - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name atlantis - End Project Dependency - Begin Project Dependency - Project_Dep_Name bluepony - End Project Dependency - Begin Project Dependency - Project_Dep_Name bounce - End Project Dependency - Begin Project Dependency - Project_Dep_Name chess - End Project Dependency - Begin Project Dependency - Project_Dep_Name geoface - End Project Dependency - Begin Project Dependency - Project_Dep_Name glflare - End Project Dependency - Begin Project Dependency - Project_Dep_Name glutmech - End Project Dependency - Begin Project Dependency - Project_Dep_Name ideas - End Project Dependency - Begin Project Dependency - Project_Dep_Name lorenz - End Project Dependency - Begin Project Dependency - Project_Dep_Name newave - End Project Dependency - Begin Project Dependency - Project_Dep_Name opengl_logo - End Project Dependency - Begin Project Dependency - Project_Dep_Name particle - End Project Dependency - Begin Project Dependency - Project_Dep_Name rollercoaster - End Project Dependency - Begin Project Dependency - Project_Dep_Name skyfly - End Project Dependency - Begin Project Dependency - Project_Dep_Name smooth - End Project Dependency - Begin Project Dependency - Project_Dep_Name sunlight - End Project Dependency - Begin Project Dependency - Project_Dep_Name sysview - End Project Dependency - Begin Project Dependency - Project_Dep_Name underwater - End Project Dependency - Begin Project Dependency - Project_Dep_Name walker - End Project Dependency - Begin Project Dependency - Project_Dep_Name yacme - End Project Dependency -}}} - -############################################################################### - -Project: "atlantis"=".\demos\atlantis\atlantis.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "bluepony"=".\demos\bluepony\bluepony.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "bounce"=".\demos\bounce\bounce.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "chess"=".\demos\chess\chess.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "geoface"=".\demos\geoface\geoface.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "glflare"=".\demos\glflare\glflare.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "gliq"=".\demos\gliq\gliq.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "glutmech"=".\demos\glutmech\glutmech.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "ideas"=".\demos\ideas\ideas.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "lorenz"=".\demos\lorenz\lorenz.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "newave"=".\demos\newave\newave.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "opengl_logo"=".\demos\opengl_logo\opengl_logo.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "particle"=".\demos\particle\particle.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "rollercoaster"=".\demos\rollercoaster\rollercoaster.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "skyfly"=".\demos\skyfly\skyfly.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "smooth"=".\demos\smooth\smooth.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "sunlight"=".\demos\sunlight\sunlight.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "sysview"=".\demos\sysview\sysview.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "underwater"=".\demos\underwater\underwater.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "walker"=".\demos\walker\walker.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "yacme"=".\demos\yacme\yacme.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/lib/glut-3.7.6/progs/demos/Imakefile b/lib/glut-3.7.6/progs/demos/Imakefile deleted file mode 100644 index 5dcc2328d..000000000 --- a/lib/glut-3.7.6/progs/demos/Imakefile +++ /dev/null @@ -1,13 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1994, 1997, 1998. */ - -#define IHaveSubdirs -#define PassCDebugFlags - -SUBDIRS = ideas atlantis walker yacme glutmech geoface \ - chess rollercoaster underwater opengl_logo bluepony \ - lorenz smooth gliq glflare bounce skyfly particle \ - newave sunlight - -MakeSubdirs($(SUBDIRS)) -DependSubdirs($(SUBDIRS)) diff --git a/lib/glut-3.7.6/progs/demos/_all.dsp b/lib/glut-3.7.6/progs/demos/_all.dsp deleted file mode 100644 index 2e26c30f3..000000000 --- a/lib/glut-3.7.6/progs/demos/_all.dsp +++ /dev/null @@ -1,63 +0,0 @@ -# Microsoft Developer Studio Project File - Name="_all" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Generic Project" 0x010a - -CFG=_all - 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 "_all.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 "_all.mak" CFG="_all - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "_all - Win32 Release" (based on "Win32 (x86) Generic Project") -!MESSAGE "_all - Win32 Debug" (based on "Win32 (x86) Generic Project") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -MTL=midl.exe - -!IF "$(CFG)" == "_all - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" - -!ELSEIF "$(CFG)" == "_all - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" - -!ENDIF - -# Begin Target - -# Name "_all - Win32 Release" -# Name "_all - Win32 Debug" -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/demos/atlantis/Imakefile b/lib/glut-3.7.6/progs/demos/atlantis/Imakefile deleted file mode 100644 index 85e155145..000000000 --- a/lib/glut-3.7.6/progs/demos/atlantis/Imakefile +++ /dev/null @@ -1,14 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1994. */ - -#include "../../../Glut.cf" - -TARGETS = atlantis - -SRCS = atlantis.c dolphin.c shark.c swim.c whale.c - -AllTarget($(TARGETS)) - -NormalGlutProgramTarget(atlantis,atlantis.o whale.o dolphin.o shark.o swim.o) - -DependTarget() diff --git a/lib/glut-3.7.6/progs/demos/atlantis/atlantis.c b/lib/glut-3.7.6/progs/demos/atlantis/atlantis.c deleted file mode 100644 index 205e33878..000000000 --- a/lib/glut-3.7.6/progs/demos/atlantis/atlantis.c +++ /dev/null @@ -1,262 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1994. */ - -/** - * (c) Copyright 1993, 1994, 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 -#include -#include -#include -#include -#include "atlantis.h" - -fishRec sharks[NUM_SHARKS]; -fishRec momWhale; -fishRec babyWhale; -fishRec dolph; - -GLboolean moving; - -void -InitFishs(void) -{ - int i; - - for (i = 0; i < NUM_SHARKS; i++) { - sharks[i].x = 70000.0 + rand() % 6000; - sharks[i].y = rand() % 6000; - sharks[i].z = rand() % 6000; - sharks[i].psi = rand() % 360 - 180.0; - sharks[i].v = 1.0; - } - - dolph.x = 30000.0; - dolph.y = 0.0; - dolph.z = 6000.0; - dolph.psi = 90.0; - dolph.theta = 0.0; - dolph.v = 3.0; - - momWhale.x = 70000.0; - momWhale.y = 0.0; - momWhale.z = 0.0; - momWhale.psi = 90.0; - momWhale.theta = 0.0; - momWhale.v = 3.0; - - babyWhale.x = 60000.0; - babyWhale.y = -2000.0; - babyWhale.z = -2000.0; - babyWhale.psi = 90.0; - babyWhale.theta = 0.0; - babyWhale.v = 3.0; -} - -void -Init(void) -{ - static float ambient[] = - {0.1, 0.1, 0.1, 1.0}; - static float diffuse[] = - {1.0, 1.0, 1.0, 1.0}; - static float position[] = - {0.0, 1.0, 0.0, 0.0}; - static float mat_shininess[] = - {90.0}; - static float mat_specular[] = - {0.8, 0.8, 0.8, 1.0}; - static float mat_diffuse[] = - {0.46, 0.66, 0.795, 1.0}; - static float mat_ambient[] = - {0.0, 0.1, 0.2, 1.0}; - static float lmodel_ambient[] = - {0.4, 0.4, 0.4, 1.0}; - static float lmodel_localviewer[] = - {0.0}; - - glFrontFace(GL_CW); - - glDepthFunc(GL_LEQUAL); - glEnable(GL_DEPTH_TEST); - - glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); - glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); - glLightfv(GL_LIGHT0, GL_POSITION, position); - glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); - glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, lmodel_localviewer); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - - glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, mat_shininess); - glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, mat_specular); - glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mat_diffuse); - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, mat_ambient); - - InitFishs(); - - glClearColor(0.0, 0.5, 0.9, 0.0); -} - -void -Reshape(int width, int height) -{ - glViewport(0, 0, width, height); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(400.0, 2.0, 10000.0, 400000.0); - glMatrixMode(GL_MODELVIEW); -} - -void -Animate(void) -{ - int i; - - for (i = 0; i < NUM_SHARKS; i++) { - SharkPilot(&sharks[i]); - SharkMiss(i); - } - WhalePilot(&dolph); - dolph.phi++; - glutPostRedisplay(); - WhalePilot(&momWhale); - momWhale.phi++; - WhalePilot(&babyWhale); - babyWhale.phi++; -} - -/* ARGSUSED1 */ -void -Key(unsigned char key, int x, int y) -{ - switch (key) { - case 27: /* Esc will quit */ - exit(1); - break; - case ' ': /* space will advance frame */ - if (!moving) { - Animate(); - } - } -} - -void -Display(void) -{ - int i; - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - for (i = 0; i < NUM_SHARKS; i++) { - glPushMatrix(); - FishTransform(&sharks[i]); - DrawShark(&sharks[i]); - glPopMatrix(); - } - - glPushMatrix(); - FishTransform(&dolph); - DrawDolphin(&dolph); - glPopMatrix(); - - glPushMatrix(); - FishTransform(&momWhale); - DrawWhale(&momWhale); - glPopMatrix(); - - glPushMatrix(); - FishTransform(&babyWhale); - glScalef(0.45, 0.45, 0.3); - DrawWhale(&babyWhale); - glPopMatrix(); - - glutSwapBuffers(); -} - -void -Visible(int state) -{ - if (state == GLUT_VISIBLE) { - if (moving) - glutIdleFunc(Animate); - } else { - if (moving) - glutIdleFunc(NULL); - } -} - -void -menuSelect(int value) -{ - switch (value) { - case 1: - moving = GL_TRUE; - glutIdleFunc(Animate); - break; - case 2: - moving = GL_FALSE;; - glutIdleFunc(NULL); - break; - case 3: - exit(0); - break; - } -} - -int -main(int argc, char **argv) -{ - glutInitWindowSize(500, 250); - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); - glutCreateWindow("GLUT Atlantis Demo"); - Init(); - glutDisplayFunc(Display); - glutReshapeFunc(Reshape); - glutKeyboardFunc(Key); - moving = GL_TRUE; - glutIdleFunc(Animate); - glutVisibilityFunc(Visible); - glutCreateMenu(menuSelect); - glutAddMenuEntry("Start motion", 1); - glutAddMenuEntry("Stop motion", 2); - glutAddMenuEntry("Quit", 3); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/demos/atlantis/atlantis.dsp b/lib/glut-3.7.6/progs/demos/atlantis/atlantis.dsp deleted file mode 100644 index f1fa16d4c..000000000 --- a/lib/glut-3.7.6/progs/demos/atlantis/atlantis.dsp +++ /dev/null @@ -1,108 +0,0 @@ -# Microsoft Developer Studio Project File - Name="atlantis" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=atlantis - 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 "atlantis.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 "atlantis.mak" CFG="atlantis - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "atlantis - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "atlantis - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "atlantis - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "atlantis - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "atlantis - Win32 Release" -# Name "atlantis - Win32 Debug" -# Begin Source File - -SOURCE=.\atlantis.c -# End Source File -# Begin Source File - -SOURCE=.\atlantis.h -# End Source File -# Begin Source File - -SOURCE=.\dolphin.c -# End Source File -# Begin Source File - -SOURCE=.\shark.c -# End Source File -# Begin Source File - -SOURCE=.\swim.c -# End Source File -# Begin Source File - -SOURCE=.\whale.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/demos/atlantis/atlantis.h b/lib/glut-3.7.6/progs/demos/atlantis/atlantis.h deleted file mode 100644 index 539141b3d..000000000 --- a/lib/glut-3.7.6/progs/demos/atlantis/atlantis.h +++ /dev/null @@ -1,65 +0,0 @@ -/** - * (c) Copyright 1993, 1994, 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. - */ -#define RAD 57.295 -#define RRAD 0.01745 - -#define NUM_SHARKS 4 -#define SHARKSIZE 6000 -#define SHARKSPEED 100.0 - -#define WHALESPEED 250.0 - -typedef struct _fishRec { - float x, y, z, phi, theta, psi, v; - float xt, yt, zt; - float htail, vtail; - float dtheta; - int spurt, attack; -} fishRec; - -extern fishRec sharks[NUM_SHARKS]; -extern fishRec momWhale; -extern fishRec babyWhale; -extern fishRec dolph; - -extern void FishTransform(fishRec *); -extern void WhalePilot(fishRec *); -extern void SharkPilot(fishRec *); -extern void SharkMiss(int); -extern void DrawWhale(fishRec *); -extern void DrawShark(fishRec *); -extern void DrawDolphin(fishRec *); diff --git a/lib/glut-3.7.6/progs/demos/atlantis/dolphin.c b/lib/glut-3.7.6/progs/demos/atlantis/dolphin.c deleted file mode 100644 index 6c3015f11..000000000 --- a/lib/glut-3.7.6/progs/demos/atlantis/dolphin.c +++ /dev/null @@ -1,1934 +0,0 @@ -/** - * (c) Copyright 1993, 1994, 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 -#include -#include "atlantis.h" -/* *INDENT-OFF* */ -static float N001[3] = {-0.005937 ,-0.101998 ,-0.994767}; -static float N002[3] = {0.936780 ,-0.200803 ,0.286569}; -static float N003[3] = {-0.233062 ,0.972058 ,0.028007}; -static float N005[3] = {0.898117 ,0.360171 ,0.252315}; -static float N006[3] = {-0.915437 ,0.348456 ,0.201378}; -static float N007[3] = {0.602263 ,-0.777527 ,0.180920}; -static float N008[3] = {-0.906912 ,-0.412015 ,0.088061}; -static float N012[3] = {0.884408 ,-0.429417 ,-0.182821}; -static float N013[3] = {0.921121 ,0.311084 ,-0.234016}; -static float N014[3] = {0.382635 ,0.877882 ,-0.287948}; -static float N015[3] = {-0.380046 ,0.888166 ,-0.258316}; -static float N016[3] = {-0.891515 ,0.392238 ,-0.226607}; -static float N017[3] = {-0.901419 ,-0.382002 ,-0.203763}; -static float N018[3] = {-0.367225 ,-0.911091 ,-0.187243}; -static float N019[3] = {0.339539 ,-0.924846 ,-0.171388}; -static float N020[3] = {0.914706 ,-0.378617 ,-0.141290}; -static float N021[3] = {0.950662 ,0.262713 ,-0.164994}; -static float N022[3] = {0.546359 ,0.801460 ,-0.243218}; -static float N023[3] = {-0.315796 ,0.917068 ,-0.243431}; -static float N024[3] = {-0.825687 ,0.532277 ,-0.186875}; -static float N025[3] = {-0.974763 ,-0.155232 ,-0.160435}; -static float N026[3] = {-0.560596 ,-0.816658 ,-0.137119}; -static float N027[3] = {0.380210 ,-0.910817 ,-0.160786}; -static float N028[3] = {0.923772 ,-0.358322 ,-0.135093}; -static float N029[3] = {0.951202 ,0.275053 ,-0.139859}; -static float N030[3] = {0.686099 ,0.702548 ,-0.188932}; -static float N031[3] = {-0.521865 ,0.826719 ,-0.210220}; -static float N032[3] = {-0.923820 ,0.346739 ,-0.162258}; -static float N033[3] = {-0.902095 ,-0.409995 ,-0.134646}; -static float N034[3] = {-0.509115 ,-0.848498 ,-0.144404}; -static float N035[3] = {0.456469 ,-0.880293 ,-0.129305}; -static float N036[3] = {0.873401 ,-0.475489 ,-0.105266}; -static float N037[3] = {0.970825 ,0.179861 ,-0.158584}; -static float N038[3] = {0.675609 ,0.714187 ,-0.183004}; -static float N039[3] = {-0.523574 ,0.830212 ,-0.191360}; -static float N040[3] = {-0.958895 ,0.230808 ,-0.165071}; -static float N041[3] = {-0.918285 ,-0.376803 ,-0.121542}; -static float N042[3] = {-0.622467 ,-0.774167 ,-0.114888}; -static float N043[3] = {0.404497 ,-0.908807 ,-0.102231}; -static float N044[3] = {0.930538 ,-0.365155 ,-0.027588}; -static float N045[3] = {0.921920 ,0.374157 ,-0.100345}; -static float N046[3] = {0.507346 ,0.860739 ,0.041562}; -static float N047[3] = {-0.394646 ,0.918815 ,-0.005730}; -static float N048[3] = {-0.925411 ,0.373024 ,-0.066837}; -static float N049[3] = {-0.945337 ,-0.322309 ,-0.049551}; -static float N050[3] = {-0.660437 ,-0.750557 ,-0.022072}; -static float N051[3] = {0.488835 ,-0.871950 ,-0.027261}; -static float N052[3] = {0.902599 ,-0.421397 ,0.087969}; -static float N053[3] = {0.938636 ,0.322606 ,0.122020}; -static float N054[3] = {0.484605 ,0.871078 ,0.079878}; -static float N055[3] = {-0.353607 ,0.931559 ,0.084619}; -static float N056[3] = {-0.867759 ,0.478564 ,0.134054}; -static float N057[3] = {-0.951583 ,-0.296030 ,0.082794}; -static float N058[3] = {-0.672355 ,-0.730209 ,0.121384}; -static float N059[3] = {0.528336 ,-0.842452 ,0.105525}; -static float N060[3] = {0.786913 ,-0.564760 ,0.248627}; -static float N062[3] = {0.622098 ,0.765230 ,0.165584}; -static float N063[3] = {-0.631711 ,0.767816 ,0.106773}; -static float N064[3] = {-0.687886 ,0.606351 ,0.398938}; -static float N065[3] = {-0.946327 ,-0.281623 ,0.158598}; -static float N066[3] = {-0.509549 ,-0.860437 ,0.002776}; -static float N067[3] = {0.462594 ,-0.876692 ,0.131977}; -static float N071[3] = {0.000000 ,1.000000 ,0.000000}; -static float N077[3] = {-0.880770 ,0.461448 ,0.106351}; -static float N078[3] = {-0.880770 ,0.461448 ,0.106351}; -static float N079[3] = {-0.880770 ,0.461448 ,0.106351}; -static float N080[3] = {-0.880770 ,0.461448 ,0.106351}; -static float N081[3] = {-0.571197 ,0.816173 ,0.087152}; -static float N082[3] = {-0.880770 ,0.461448 ,0.106351}; -static float N083[3] = {-0.571197 ,0.816173 ,0.087152}; -static float N084[3] = {-0.571197 ,0.816173 ,0.087152}; -static float N085[3] = {-0.880770 ,0.461448 ,0.106351}; -static float N086[3] = {-0.571197 ,0.816173 ,0.087152}; -static float N087[3] = {-0.880770 ,0.461448 ,0.106351}; -static float N088[3] = {-0.880770 ,0.461448 ,0.106351}; -static float N089[3] = {-0.880770 ,0.461448 ,0.106351}; -static float N090[3] = {-0.880770 ,0.461448 ,0.106351}; -static float N091[3] = {0.000000 ,1.000000 ,0.000000}; -static float N092[3] = {0.000000 ,1.000000 ,0.000000}; -static float N093[3] = {0.000000 ,1.000000 ,0.000000}; -static float N094[3] = {1.000000 ,0.000000 ,0.000000}; -static float N095[3] = {-1.000000 ,0.000000 ,0.000000}; -static float N097[3] = {-0.697296 ,0.702881 ,0.140491}; -static float N098[3] = {0.918864 ,0.340821 ,0.198819}; -static float N099[3] = {-0.932737 ,0.201195 ,0.299202}; -static float N100[3] = {0.029517 ,0.981679 ,0.188244}; -static float N102[3] = {0.813521 ,-0.204936 ,0.544229}; -static float N110[3] = {-0.781480 ,-0.384779 ,0.491155}; -static float N111[3] = {-0.722243 ,0.384927 ,0.574627}; -static float N112[3] = {-0.752278 ,0.502679 ,0.425901}; -static float N113[3] = {0.547257 ,0.367910 ,0.751766}; -static float N114[3] = {0.725949 ,-0.232568 ,0.647233}; -static float N115[3] = {-0.747182 ,-0.660786 ,0.071280}; -static float N116[3] = {0.931519 ,0.200748 ,0.303270}; -static float N117[3] = {-0.828928 ,0.313757 ,0.463071}; -static float N118[3] = {0.902554 ,-0.370967 ,0.218587}; -static float N119[3] = {-0.879257 ,-0.441851 ,0.177973}; -static float N120[3] = {0.642327 ,0.611901 ,0.461512}; -static float N121[3] = {0.964817 ,-0.202322 ,0.167910}; -static float N122[3] = {0.000000 ,1.000000 ,0.000000}; -static float P001[3] = {5.68, -300.95, 1324.70}; -static float P002[3] = {338.69, -219.63, 9677.03}; -static float P003[3] = {12.18, 474.59, 9138.14}; -static float P005[3] = {487.51, 198.05, 9350.78}; -static float P006[3] = {-457.61, 68.74, 9427.85}; -static float P007[3] = {156.52, -266.72, 10311.68}; -static float P008[3] = {-185.56, -266.51, 10310.47}; -static float P009[3] = {124.39, -261.46, 1942.34}; -static float P010[3] = {-130.05, -261.46, 1946.03}; -static float P011[3] = {141.07, -320.11, 1239.38}; -static float P012[3] = {156.48, -360.12, 2073.41}; -static float P013[3] = {162.00, -175.88, 2064.44}; -static float P014[3] = {88.16, -87.72, 2064.02}; -static float P015[3] = {-65.21, -96.13, 2064.02}; -static float P016[3] = {-156.48, -180.96, 2064.44}; -static float P017[3] = {-162.00, -368.93, 2082.39}; -static float P018[3] = {-88.16, -439.22, 2082.39}; -static float P019[3] = {65.21, -440.32, 2083.39}; -static float P020[3] = {246.87, -356.02, 2576.95}; -static float P021[3] = {253.17, -111.15, 2567.15}; -static float P022[3] = {132.34, 51.41, 2559.84}; -static float P023[3] = {-97.88, 40.44, 2567.15}; -static float P024[3] = {-222.97, -117.49, 2567.15}; -static float P025[3] = {-252.22, -371.53, 2569.92}; -static float P026[3] = {-108.44, -518.19, 2586.75}; -static float P027[3] = {97.88, -524.79, 2586.75}; -static float P028[3] = {370.03, -421.19, 3419.70}; -static float P029[3] = {351.15, -16.98, 3423.17}; -static float P030[3] = {200.66, 248.46, 3430.37}; -static float P031[3] = {-148.42, 235.02, 3417.91}; -static float P032[3] = {-360.21, -30.27, 3416.84}; -static float P033[3] = {-357.90, -414.89, 3407.04}; -static float P034[3] = {-148.88, -631.35, 3409.90}; -static float P035[3] = {156.38, -632.59, 3419.70}; -static float P036[3] = {462.61, -469.21, 4431.51}; -static float P037[3] = {466.60, 102.25, 4434.98}; -static float P038[3] = {243.05, 474.34, 4562.02}; -static float P039[3] = {-191.23, 474.40, 4554.42}; -static float P040[3] = {-476.12, 111.05, 4451.11}; -static float P041[3] = {-473.36, -470.74, 4444.78}; -static float P042[3] = {-266.95, -748.41, 4447.78}; -static float P043[3] = {211.14, -749.91, 4429.73}; -static float P044[3] = {680.57, -370.27, 5943.46}; -static float P045[3] = {834.01, 363.09, 6360.63}; -static float P046[3] = {371.29, 804.51, 6486.26}; -static float P047[3] = {-291.43, 797.22, 6494.28}; -static float P048[3] = {-784.13, 370.75, 6378.01}; -static float P049[3] = {-743.29, -325.82, 5943.46}; -static float P050[3] = {-383.24, -804.77, 5943.46}; -static float P051[3] = {283.47, -846.09, 5943.46}; -static float iP001[3] = {5.68, -300.95, 1324.70}; -static float iP009[3] = {124.39, -261.46, 1942.34}; -static float iP010[3] = {-130.05, -261.46, 1946.03}; -static float iP011[3] = {141.07, -320.11, 1239.38}; -static float iP012[3] = {156.48, -360.12, 2073.41}; -static float iP013[3] = {162.00, -175.88, 2064.44}; -static float iP014[3] = {88.16, -87.72, 2064.02}; -static float iP015[3] = {-65.21, -96.13, 2064.02}; -static float iP016[3] = {-156.48, -180.96, 2064.44}; -static float iP017[3] = {-162.00, -368.93, 2082.39}; -static float iP018[3] = {-88.16, -439.22, 2082.39}; -static float iP019[3] = {65.21, -440.32, 2083.39}; -static float iP020[3] = {246.87, -356.02, 2576.95}; -static float iP021[3] = {253.17, -111.15, 2567.15}; -static float iP022[3] = {132.34, 51.41, 2559.84}; -static float iP023[3] = {-97.88, 40.44, 2567.15}; -static float iP024[3] = {-222.97, -117.49, 2567.15}; -static float iP025[3] = {-252.22, -371.53, 2569.92}; -static float iP026[3] = {-108.44, -518.19, 2586.75}; -static float iP027[3] = {97.88, -524.79, 2586.75}; -static float iP028[3] = {370.03, -421.19, 3419.70}; -static float iP029[3] = {351.15, -16.98, 3423.17}; -static float iP030[3] = {200.66, 248.46, 3430.37}; -static float iP031[3] = {-148.42, 235.02, 3417.91}; -static float iP032[3] = {-360.21, -30.27, 3416.84}; -static float iP033[3] = {-357.90, -414.89, 3407.04}; -static float iP034[3] = {-148.88, -631.35, 3409.90}; -static float iP035[3] = {156.38, -632.59, 3419.70}; -static float iP036[3] = {462.61, -469.21, 4431.51}; -static float iP037[3] = {466.60, 102.25, 4434.98}; -static float iP038[3] = {243.05, 474.34, 4562.02}; -static float iP039[3] = {-191.23, 474.40, 4554.42}; -static float iP040[3] = {-476.12, 111.05, 4451.11}; -static float iP041[3] = {-473.36, -470.74, 4444.78}; -static float iP042[3] = {-266.95, -748.41, 4447.78}; -static float iP043[3] = {211.14, -749.91, 4429.73}; -static float iP044[3] = {680.57, -370.27, 5943.46}; -static float iP045[3] = {834.01, 363.09, 6360.63}; -static float iP046[3] = {371.29, 804.51, 6486.26}; -static float iP047[3] = {-291.43, 797.22, 6494.28}; -static float iP048[3] = {-784.13, 370.75, 6378.01}; -static float iP049[3] = {-743.29, -325.82, 5943.46}; -static float iP050[3] = {-383.24, -804.77, 5943.46}; -static float iP051[3] = {283.47, -846.09, 5943.46}; -static float P052[3] = {599.09, -300.15, 7894.03}; -static float P053[3] = {735.48, 306.26, 7911.92}; -static float P054[3] = {246.22, 558.53, 8460.50}; -static float P055[3] = {-230.41, 559.84, 8473.23}; -static float P056[3] = {-698.66, 320.83, 7902.59}; -static float P057[3] = {-643.29, -299.16, 7902.59}; -static float P058[3] = {-341.47, -719.30, 7902.59}; -static float P059[3] = {252.57, -756.12, 7902.59}; -static float P060[3] = {458.39, -265.31, 9355.44}; -static float P062[3] = {224.04, 338.75, 9450.30}; -static float P063[3] = {-165.71, 341.04, 9462.35}; -static float P064[3] = {-298.11, 110.13, 10180.37}; -static float P065[3] = {-473.99, -219.71, 9355.44}; -static float P066[3] = {-211.97, -479.87, 9355.44}; -static float P067[3] = {192.86, -491.45, 9348.73}; -static float P068[3] = {-136.29, -319.84, 1228.73}; -static float P069[3] = {1111.17, -314.14, 1314.19}; -static float P070[3] = {-1167.34, -321.61, 1319.45}; -static float P071[3] = {1404.86, -306.66, 1235.45}; -static float P072[3] = {-1409.73, -314.14, 1247.66}; -static float P073[3] = {1254.01, -296.87, 1544.58}; -static float P074[3] = {-1262.09, -291.70, 1504.26}; -static float P075[3] = {965.71, -269.26, 1742.65}; -static float P076[3] = {-900.97, -276.74, 1726.07}; -static float iP068[3] = {-136.29, -319.84, 1228.73}; -static float iP069[3] = {1111.17, -314.14, 1314.19}; -static float iP070[3] = {-1167.34, -321.61, 1319.45}; -static float iP071[3] = {1404.86, -306.66, 1235.45}; -static float iP072[3] = {-1409.73, -314.14, 1247.66}; -static float iP073[3] = {1254.01, -296.87, 1544.58}; -static float iP074[3] = {-1262.09, -291.70, 1504.26}; -static float iP075[3] = {965.71, -269.26, 1742.65}; -static float iP076[3] = {-900.97, -276.74, 1726.07}; -static float P077[3] = {1058.00, -448.81, 8194.66}; -static float P078[3] = {-1016.51, -456.43, 8190.62}; -static float P079[3] = {-1515.96, -676.45, 7754.93}; -static float P080[3] = {1856.75, -830.34, 7296.56}; -static float P081[3] = {1472.16, -497.38, 7399.68}; -static float P082[3] = {-1775.26, -829.51, 7298.46}; -static float P083[3] = {911.09, -252.51, 7510.99}; -static float P084[3] = {-1451.94, -495.62, 7384.30}; -static float P085[3] = {1598.75, -669.26, 7769.90}; -static float P086[3] = {-836.53, -250.08, 7463.25}; -static float P087[3] = {722.87, -158.18, 8006.41}; -static float P088[3] = {-688.86, -162.28, 7993.89}; -static float P089[3] = {-626.92, -185.30, 8364.98}; -static float P090[3] = {647.72, -189.46, 8354.99}; -static float P091[3] = {0.00, 835.01, 5555.62}; -static float P092[3] = {0.00, 1350.18, 5220.86}; -static float P093[3] = {0.00, 1422.94, 5285.27}; -static float P094[3] = {0.00, 1296.75, 5650.19}; -static float P095[3] = {0.00, 795.63, 6493.88}; -static float iP091[3] = {0.00, 835.01, 5555.62}; -static float iP092[3] = {0.00, 1350.18, 5220.86}; -static float iP093[3] = {0.00, 1422.94, 5285.27}; -static float iP094[3] = {0.00, 1296.75, 5650.19}; -static float iP095[3] = {0.00, 795.63, 6493.88}; -static float P097[3] = {-194.91, -357.14, 10313.32}; -static float P098[3] = {135.35, -357.66, 10307.94}; -static float iP097[3] = {-194.91, -357.14, 10313.32}; -static float iP098[3] = {135.35, -357.66, 10307.94}; -static float P099[3] = {-380.53, -221.14, 9677.98}; -static float P100[3] = {0.00, 412.99, 9629.33}; -static float P102[3] = {59.51, -412.55, 10677.58}; -static float iP102[3] = {59.51, -412.55, 10677.58}; -static float P103[3] = {6.50, 484.74, 9009.94}; -static float P105[3] = {-41.86, 476.51, 9078.17}; -static float P108[3] = {49.20, 476.83, 9078.24}; -static float P110[3] = {-187.62, -410.04, 10674.12}; -static float iP110[3] = {-187.62, -410.04, 10674.12}; -static float P111[3] = {-184.25, -318.70, 10723.88}; -static float iP111[3] = {-184.25, -318.70, 10723.88}; -static float P112[3] = {-179.61, -142.81, 10670.26}; -static float P113[3] = {57.43, -147.94, 10675.26}; -static float P114[3] = {54.06, -218.90, 10712.44}; -static float P115[3] = {-186.35, -212.09, 10713.76}; -static float P116[3] = {205.90, -84.61, 10275.97}; -static float P117[3] = {-230.96, -83.26, 10280.09}; -static float iP118[3] = {216.78, -509.17, 10098.94}; -static float iP119[3] = {-313.21, -510.79, 10102.62}; -static float P118[3] = {216.78, -509.17, 10098.94}; -static float P119[3] = {-313.21, -510.79, 10102.62}; -static float P120[3] = {217.95, 96.34, 10161.62}; -static float P121[3] = {71.99, -319.74, 10717.70}; -static float iP121[3] = {71.99, -319.74, 10717.70}; -static float P122[3] = {0.00, 602.74, 5375.84}; -static float iP122[3] = {0.00, 602.74, 5375.84}; -static float P123[3] = {-448.94, -203.14, 9499.60}; -static float P124[3] = {-442.64, -185.20, 9528.07}; -static float P125[3] = {-441.07, -148.05, 9528.07}; -static float P126[3] = {-443.43, -128.84, 9499.60}; -static float P127[3] = {-456.87, -146.78, 9466.67}; -static float P128[3] = {-453.68, -183.93, 9466.67}; -static float P129[3] = {428.43, -124.08, 9503.03}; -static float P130[3] = {419.73, -142.14, 9534.56}; -static float P131[3] = {419.92, -179.96, 9534.56}; -static float P132[3] = {431.20, -199.73, 9505.26}; -static float P133[3] = {442.28, -181.67, 9475.96}; -static float P134[3] = {442.08, -143.84, 9475.96}; -/* *INDENT-ON* */ - -void -Dolphin001(void) -{ - glNormal3fv(N071); - glBegin(GL_POLYGON); - glVertex3fv(P001); - glVertex3fv(P068); - glVertex3fv(P010); - glEnd(); - glBegin(GL_POLYGON); - glVertex3fv(P068); - glVertex3fv(P076); - glVertex3fv(P010); - glEnd(); - glBegin(GL_POLYGON); - glVertex3fv(P068); - glVertex3fv(P070); - glVertex3fv(P076); - glEnd(); - glBegin(GL_POLYGON); - glVertex3fv(P076); - glVertex3fv(P070); - glVertex3fv(P074); - glEnd(); - glBegin(GL_POLYGON); - glVertex3fv(P070); - glVertex3fv(P072); - glVertex3fv(P074); - glEnd(); - glNormal3fv(N119); - glBegin(GL_POLYGON); - glVertex3fv(P072); - glVertex3fv(P070); - glVertex3fv(P074); - glEnd(); - glBegin(GL_POLYGON); - glVertex3fv(P074); - glVertex3fv(P070); - glVertex3fv(P076); - glEnd(); - glBegin(GL_POLYGON); - glVertex3fv(P070); - glVertex3fv(P068); - glVertex3fv(P076); - glEnd(); - glBegin(GL_POLYGON); - glVertex3fv(P076); - glVertex3fv(P068); - glVertex3fv(P010); - glEnd(); - glBegin(GL_POLYGON); - glVertex3fv(P068); - glVertex3fv(P001); - glVertex3fv(P010); - glEnd(); -} - -void -Dolphin002(void) -{ - glNormal3fv(N071); - glBegin(GL_POLYGON); - glVertex3fv(P011); - glVertex3fv(P001); - glVertex3fv(P009); - glEnd(); - glBegin(GL_POLYGON); - glVertex3fv(P075); - glVertex3fv(P011); - glVertex3fv(P009); - glEnd(); - glBegin(GL_POLYGON); - glVertex3fv(P069); - glVertex3fv(P011); - glVertex3fv(P075); - glEnd(); - glBegin(GL_POLYGON); - glVertex3fv(P069); - glVertex3fv(P075); - glVertex3fv(P073); - glEnd(); - glBegin(GL_POLYGON); - glVertex3fv(P071); - glVertex3fv(P069); - glVertex3fv(P073); - glEnd(); - glNormal3fv(N119); - glBegin(GL_POLYGON); - glVertex3fv(P001); - glVertex3fv(P011); - glVertex3fv(P009); - glEnd(); - glBegin(GL_POLYGON); - glVertex3fv(P009); - glVertex3fv(P011); - glVertex3fv(P075); - glEnd(); - glBegin(GL_POLYGON); - glVertex3fv(P011); - glVertex3fv(P069); - glVertex3fv(P075); - glEnd(); - glBegin(GL_POLYGON); - glVertex3fv(P069); - glVertex3fv(P073); - glVertex3fv(P075); - glEnd(); - glBegin(GL_POLYGON); - glVertex3fv(P069); - glVertex3fv(P071); - glVertex3fv(P073); - glEnd(); -} - -void -Dolphin003(void) -{ - glBegin(GL_POLYGON); - glNormal3fv(N018); - glVertex3fv(P018); - glNormal3fv(N001); - glVertex3fv(P001); - glNormal3fv(N019); - glVertex3fv(P019); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N019); - glVertex3fv(P019); - glNormal3fv(N001); - glVertex3fv(P001); - glNormal3fv(N012); - glVertex3fv(P012); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N017); - glVertex3fv(P017); - glNormal3fv(N001); - glVertex3fv(P001); - glNormal3fv(N018); - glVertex3fv(P018); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N001); - glVertex3fv(P001); - glNormal3fv(N017); - glVertex3fv(P017); - glNormal3fv(N016); - glVertex3fv(P016); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N001); - glVertex3fv(P001); - glNormal3fv(N013); - glVertex3fv(P013); - glNormal3fv(N012); - glVertex3fv(P012); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N001); - glVertex3fv(P001); - glNormal3fv(N016); - glVertex3fv(P016); - glNormal3fv(N015); - glVertex3fv(P015); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N001); - glVertex3fv(P001); - glNormal3fv(N014); - glVertex3fv(P014); - glNormal3fv(N013); - glVertex3fv(P013); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N001); - glVertex3fv(P001); - glNormal3fv(N015); - glVertex3fv(P015); - glNormal3fv(N014); - glVertex3fv(P014); - glEnd(); -} - -void -Dolphin004(void) -{ - glBegin(GL_POLYGON); - glNormal3fv(N014); - glVertex3fv(P014); - glNormal3fv(N015); - glVertex3fv(P015); - glNormal3fv(N023); - glVertex3fv(P023); - glNormal3fv(N022); - glVertex3fv(P022); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N015); - glVertex3fv(P015); - glNormal3fv(N016); - glVertex3fv(P016); - glNormal3fv(N024); - glVertex3fv(P024); - glNormal3fv(N023); - glVertex3fv(P023); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N016); - glVertex3fv(P016); - glNormal3fv(N017); - glVertex3fv(P017); - glNormal3fv(N025); - glVertex3fv(P025); - glNormal3fv(N024); - glVertex3fv(P024); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N017); - glVertex3fv(P017); - glNormal3fv(N018); - glVertex3fv(P018); - glNormal3fv(N026); - glVertex3fv(P026); - glNormal3fv(N025); - glVertex3fv(P025); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N013); - glVertex3fv(P013); - glNormal3fv(N014); - glVertex3fv(P014); - glNormal3fv(N022); - glVertex3fv(P022); - glNormal3fv(N021); - glVertex3fv(P021); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N012); - glVertex3fv(P012); - glNormal3fv(N013); - glVertex3fv(P013); - glNormal3fv(N021); - glVertex3fv(P021); - glNormal3fv(N020); - glVertex3fv(P020); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N018); - glVertex3fv(P018); - glNormal3fv(N019); - glVertex3fv(P019); - glNormal3fv(N027); - glVertex3fv(P027); - glNormal3fv(N026); - glVertex3fv(P026); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N019); - glVertex3fv(P019); - glNormal3fv(N012); - glVertex3fv(P012); - glNormal3fv(N020); - glVertex3fv(P020); - glNormal3fv(N027); - glVertex3fv(P027); - glEnd(); -} - -void -Dolphin005(void) -{ - glBegin(GL_POLYGON); - glNormal3fv(N022); - glVertex3fv(P022); - glNormal3fv(N023); - glVertex3fv(P023); - glNormal3fv(N031); - glVertex3fv(P031); - glNormal3fv(N030); - glVertex3fv(P030); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N021); - glVertex3fv(P021); - glNormal3fv(N022); - glVertex3fv(P022); - glNormal3fv(N030); - glVertex3fv(P030); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N021); - glVertex3fv(P021); - glNormal3fv(N030); - glVertex3fv(P030); - glNormal3fv(N029); - glVertex3fv(P029); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N023); - glVertex3fv(P023); - glNormal3fv(N024); - glVertex3fv(P024); - glNormal3fv(N031); - glVertex3fv(P031); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N024); - glVertex3fv(P024); - glNormal3fv(N032); - glVertex3fv(P032); - glNormal3fv(N031); - glVertex3fv(P031); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N024); - glVertex3fv(P024); - glNormal3fv(N025); - glVertex3fv(P025); - glNormal3fv(N032); - glVertex3fv(P032); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N025); - glVertex3fv(P025); - glNormal3fv(N033); - glVertex3fv(P033); - glNormal3fv(N032); - glVertex3fv(P032); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N020); - glVertex3fv(P020); - glNormal3fv(N021); - glVertex3fv(P021); - glNormal3fv(N029); - glVertex3fv(P029); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N020); - glVertex3fv(P020); - glNormal3fv(N029); - glVertex3fv(P029); - glNormal3fv(N028); - glVertex3fv(P028); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N027); - glVertex3fv(P027); - glNormal3fv(N020); - glVertex3fv(P020); - glNormal3fv(N028); - glVertex3fv(P028); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N027); - glVertex3fv(P027); - glNormal3fv(N028); - glVertex3fv(P028); - glNormal3fv(N035); - glVertex3fv(P035); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N025); - glVertex3fv(P025); - glNormal3fv(N026); - glVertex3fv(P026); - glNormal3fv(N033); - glVertex3fv(P033); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N033); - glVertex3fv(P033); - glNormal3fv(N026); - glVertex3fv(P026); - glNormal3fv(N034); - glVertex3fv(P034); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N026); - glVertex3fv(P026); - glNormal3fv(N027); - glVertex3fv(P027); - glNormal3fv(N035); - glVertex3fv(P035); - glNormal3fv(N034); - glVertex3fv(P034); - glEnd(); -} - -void -Dolphin006(void) -{ - glBegin(GL_POLYGON); - glNormal3fv(N092); - glVertex3fv(P092); - glNormal3fv(N093); - glVertex3fv(P093); - glNormal3fv(N094); - glVertex3fv(P094); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N093); - glVertex3fv(P093); - glNormal3fv(N092); - glVertex3fv(P092); - glNormal3fv(N094); - glVertex3fv(P094); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N092); - glVertex3fv(P092); - glNormal3fv(N091); - glVertex3fv(P091); - glNormal3fv(N095); - glVertex3fv(P095); - glNormal3fv(N094); - glVertex3fv(P094); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N091); - glVertex3fv(P091); - glNormal3fv(N092); - glVertex3fv(P092); - glNormal3fv(N094); - glVertex3fv(P094); - glNormal3fv(N095); - glVertex3fv(P095); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N122); - glVertex3fv(P122); - glNormal3fv(N095); - glVertex3fv(P095); - glNormal3fv(N091); - glVertex3fv(P091); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N122); - glVertex3fv(P122); - glNormal3fv(N091); - glVertex3fv(P091); - glNormal3fv(N095); - glVertex3fv(P095); - glEnd(); -} - -void -Dolphin007(void) -{ - glBegin(GL_POLYGON); - glNormal3fv(N030); - glVertex3fv(P030); - glNormal3fv(N031); - glVertex3fv(P031); - glNormal3fv(N039); - glVertex3fv(P039); - glNormal3fv(N038); - glVertex3fv(P038); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N029); - glVertex3fv(P029); - glNormal3fv(N030); - glVertex3fv(P030); - glNormal3fv(N038); - glVertex3fv(P038); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N029); - glVertex3fv(P029); - glNormal3fv(N038); - glVertex3fv(P038); - glNormal3fv(N037); - glVertex3fv(P037); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N028); - glVertex3fv(P028); - glNormal3fv(N029); - glVertex3fv(P029); - glNormal3fv(N037); - glVertex3fv(P037); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N028); - glVertex3fv(P028); - glNormal3fv(N037); - glVertex3fv(P037); - glNormal3fv(N036); - glVertex3fv(P036); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N035); - glVertex3fv(P035); - glNormal3fv(N028); - glVertex3fv(P028); - glNormal3fv(N036); - glVertex3fv(P036); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N035); - glVertex3fv(P035); - glNormal3fv(N036); - glVertex3fv(P036); - glNormal3fv(N043); - glVertex3fv(P043); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N034); - glVertex3fv(P034); - glNormal3fv(N035); - glVertex3fv(P035); - glNormal3fv(N043); - glVertex3fv(P043); - glNormal3fv(N042); - glVertex3fv(P042); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N033); - glVertex3fv(P033); - glNormal3fv(N034); - glVertex3fv(P034); - glNormal3fv(N042); - glVertex3fv(P042); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N033); - glVertex3fv(P033); - glNormal3fv(N042); - glVertex3fv(P042); - glNormal3fv(N041); - glVertex3fv(P041); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N031); - glVertex3fv(P031); - glNormal3fv(N032); - glVertex3fv(P032); - glNormal3fv(N039); - glVertex3fv(P039); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N039); - glVertex3fv(P039); - glNormal3fv(N032); - glVertex3fv(P032); - glNormal3fv(N040); - glVertex3fv(P040); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N032); - glVertex3fv(P032); - glNormal3fv(N033); - glVertex3fv(P033); - glNormal3fv(N040); - glVertex3fv(P040); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N040); - glVertex3fv(P040); - glNormal3fv(N033); - glVertex3fv(P033); - glNormal3fv(N041); - glVertex3fv(P041); - glEnd(); -} - -void -Dolphin008(void) -{ - glBegin(GL_POLYGON); - glNormal3fv(N042); - glVertex3fv(P042); - glNormal3fv(N043); - glVertex3fv(P043); - glNormal3fv(N051); - glVertex3fv(P051); - glNormal3fv(N050); - glVertex3fv(P050); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N043); - glVertex3fv(P043); - glNormal3fv(N036); - glVertex3fv(P036); - glNormal3fv(N051); - glVertex3fv(P051); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N051); - glVertex3fv(P051); - glNormal3fv(N036); - glVertex3fv(P036); - glNormal3fv(N044); - glVertex3fv(P044); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N041); - glVertex3fv(P041); - glNormal3fv(N042); - glVertex3fv(P042); - glNormal3fv(N050); - glVertex3fv(P050); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N041); - glVertex3fv(P041); - glNormal3fv(N050); - glVertex3fv(P050); - glNormal3fv(N049); - glVertex3fv(P049); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N036); - glVertex3fv(P036); - glNormal3fv(N037); - glVertex3fv(P037); - glNormal3fv(N044); - glVertex3fv(P044); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N044); - glVertex3fv(P044); - glNormal3fv(N037); - glVertex3fv(P037); - glNormal3fv(N045); - glVertex3fv(P045); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N040); - glVertex3fv(P040); - glNormal3fv(N041); - glVertex3fv(P041); - glNormal3fv(N049); - glVertex3fv(P049); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N040); - glVertex3fv(P040); - glNormal3fv(N049); - glVertex3fv(P049); - glNormal3fv(N048); - glVertex3fv(P048); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N039); - glVertex3fv(P039); - glNormal3fv(N040); - glVertex3fv(P040); - glNormal3fv(N048); - glVertex3fv(P048); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N039); - glVertex3fv(P039); - glNormal3fv(N048); - glVertex3fv(P048); - glNormal3fv(N047); - glVertex3fv(P047); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N037); - glVertex3fv(P037); - glNormal3fv(N038); - glVertex3fv(P038); - glNormal3fv(N045); - glVertex3fv(P045); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N038); - glVertex3fv(P038); - glNormal3fv(N046); - glVertex3fv(P046); - glNormal3fv(N045); - glVertex3fv(P045); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N038); - glVertex3fv(P038); - glNormal3fv(N039); - glVertex3fv(P039); - glNormal3fv(N047); - glVertex3fv(P047); - glNormal3fv(N046); - glVertex3fv(P046); - glEnd(); -} - -void -Dolphin009(void) -{ - glBegin(GL_POLYGON); - glNormal3fv(N050); - glVertex3fv(P050); - glNormal3fv(N051); - glVertex3fv(P051); - glNormal3fv(N059); - glVertex3fv(P059); - glNormal3fv(N058); - glVertex3fv(P058); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N051); - glVertex3fv(P051); - glNormal3fv(N044); - glVertex3fv(P044); - glNormal3fv(N059); - glVertex3fv(P059); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N059); - glVertex3fv(P059); - glNormal3fv(N044); - glVertex3fv(P044); - glNormal3fv(N052); - glVertex3fv(P052); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N044); - glVertex3fv(P044); - glNormal3fv(N045); - glVertex3fv(P045); - glNormal3fv(N053); - glVertex3fv(P053); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N044); - glVertex3fv(P044); - glNormal3fv(N053); - glVertex3fv(P053); - glNormal3fv(N052); - glVertex3fv(P052); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N049); - glVertex3fv(P049); - glNormal3fv(N050); - glVertex3fv(P050); - glNormal3fv(N058); - glVertex3fv(P058); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N049); - glVertex3fv(P049); - glNormal3fv(N058); - glVertex3fv(P058); - glNormal3fv(N057); - glVertex3fv(P057); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N048); - glVertex3fv(P048); - glNormal3fv(N049); - glVertex3fv(P049); - glNormal3fv(N057); - glVertex3fv(P057); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N048); - glVertex3fv(P048); - glNormal3fv(N057); - glVertex3fv(P057); - glNormal3fv(N056); - glVertex3fv(P056); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N047); - glVertex3fv(P047); - glNormal3fv(N048); - glVertex3fv(P048); - glNormal3fv(N056); - glVertex3fv(P056); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N047); - glVertex3fv(P047); - glNormal3fv(N056); - glVertex3fv(P056); - glNormal3fv(N055); - glVertex3fv(P055); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N045); - glVertex3fv(P045); - glNormal3fv(N046); - glVertex3fv(P046); - glNormal3fv(N053); - glVertex3fv(P053); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N046); - glVertex3fv(P046); - glNormal3fv(N054); - glVertex3fv(P054); - glNormal3fv(N053); - glVertex3fv(P053); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N046); - glVertex3fv(P046); - glNormal3fv(N047); - glVertex3fv(P047); - glNormal3fv(N055); - glVertex3fv(P055); - glNormal3fv(N054); - glVertex3fv(P054); - glEnd(); -} - -void -Dolphin010(void) -{ - glBegin(GL_POLYGON); - glNormal3fv(N080); - glVertex3fv(P080); - glNormal3fv(N081); - glVertex3fv(P081); - glNormal3fv(N085); - glVertex3fv(P085); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N081); - glVertex3fv(P081); - glNormal3fv(N083); - glVertex3fv(P083); - glNormal3fv(N085); - glVertex3fv(P085); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N085); - glVertex3fv(P085); - glNormal3fv(N083); - glVertex3fv(P083); - glNormal3fv(N077); - glVertex3fv(P077); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N083); - glVertex3fv(P083); - glNormal3fv(N087); - glVertex3fv(P087); - glNormal3fv(N077); - glVertex3fv(P077); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N077); - glVertex3fv(P077); - glNormal3fv(N087); - glVertex3fv(P087); - glNormal3fv(N090); - glVertex3fv(P090); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N081); - glVertex3fv(P081); - glNormal3fv(N080); - glVertex3fv(P080); - glNormal3fv(N085); - glVertex3fv(P085); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N083); - glVertex3fv(P083); - glNormal3fv(N081); - glVertex3fv(P081); - glNormal3fv(N085); - glVertex3fv(P085); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N083); - glVertex3fv(P083); - glNormal3fv(N085); - glVertex3fv(P085); - glNormal3fv(N077); - glVertex3fv(P077); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N087); - glVertex3fv(P087); - glNormal3fv(N083); - glVertex3fv(P083); - glNormal3fv(N077); - glVertex3fv(P077); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N087); - glVertex3fv(P087); - glNormal3fv(N077); - glVertex3fv(P077); - glNormal3fv(N090); - glVertex3fv(P090); - glEnd(); -} - -void -Dolphin011(void) -{ - glBegin(GL_POLYGON); - glNormal3fv(N082); - glVertex3fv(P082); - glNormal3fv(N084); - glVertex3fv(P084); - glNormal3fv(N079); - glVertex3fv(P079); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N084); - glVertex3fv(P084); - glNormal3fv(N086); - glVertex3fv(P086); - glNormal3fv(N079); - glVertex3fv(P079); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N079); - glVertex3fv(P079); - glNormal3fv(N086); - glVertex3fv(P086); - glNormal3fv(N078); - glVertex3fv(P078); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N086); - glVertex3fv(P086); - glNormal3fv(N088); - glVertex3fv(P088); - glNormal3fv(N078); - glVertex3fv(P078); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N078); - glVertex3fv(P078); - glNormal3fv(N088); - glVertex3fv(P088); - glNormal3fv(N089); - glVertex3fv(P089); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N088); - glVertex3fv(P088); - glNormal3fv(N086); - glVertex3fv(P086); - glNormal3fv(N089); - glVertex3fv(P089); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N089); - glVertex3fv(P089); - glNormal3fv(N086); - glVertex3fv(P086); - glNormal3fv(N078); - glVertex3fv(P078); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N086); - glVertex3fv(P086); - glNormal3fv(N084); - glVertex3fv(P084); - glNormal3fv(N078); - glVertex3fv(P078); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N078); - glVertex3fv(P078); - glNormal3fv(N084); - glVertex3fv(P084); - glNormal3fv(N079); - glVertex3fv(P079); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N084); - glVertex3fv(P084); - glNormal3fv(N082); - glVertex3fv(P082); - glNormal3fv(N079); - glVertex3fv(P079); - glEnd(); -} - -void -Dolphin012(void) -{ - glBegin(GL_POLYGON); - glNormal3fv(N058); - glVertex3fv(P058); - glNormal3fv(N059); - glVertex3fv(P059); - glNormal3fv(N067); - glVertex3fv(P067); - glNormal3fv(N066); - glVertex3fv(P066); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N059); - glVertex3fv(P059); - glNormal3fv(N052); - glVertex3fv(P052); - glNormal3fv(N060); - glVertex3fv(P060); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N059); - glVertex3fv(P059); - glNormal3fv(N060); - glVertex3fv(P060); - glNormal3fv(N067); - glVertex3fv(P067); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N058); - glVertex3fv(P058); - glNormal3fv(N066); - glVertex3fv(P066); - glNormal3fv(N065); - glVertex3fv(P065); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N058); - glVertex3fv(P058); - glNormal3fv(N065); - glVertex3fv(P065); - glNormal3fv(N057); - glVertex3fv(P057); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N056); - glVertex3fv(P056); - glNormal3fv(N057); - glVertex3fv(P057); - glNormal3fv(N065); - glVertex3fv(P065); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N056); - glVertex3fv(P056); - glNormal3fv(N065); - glVertex3fv(P065); - glNormal3fv(N006); - glVertex3fv(P006); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N056); - glVertex3fv(P056); - glNormal3fv(N006); - glVertex3fv(P006); - glNormal3fv(N063); - glVertex3fv(P063); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N056); - glVertex3fv(P056); - glNormal3fv(N063); - glVertex3fv(P063); - glNormal3fv(N055); - glVertex3fv(P055); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N054); - glVertex3fv(P054); - glNormal3fv(N062); - glVertex3fv(P062); - glNormal3fv(N005); - glVertex3fv(P005); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N054); - glVertex3fv(P054); - glNormal3fv(N005); - glVertex3fv(P005); - glNormal3fv(N053); - glVertex3fv(P053); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N052); - glVertex3fv(P052); - glNormal3fv(N053); - glVertex3fv(P053); - glNormal3fv(N005); - glVertex3fv(P005); - glNormal3fv(N060); - glVertex3fv(P060); - glEnd(); -} - -void -Dolphin013(void) -{ - glBegin(GL_POLYGON); - glNormal3fv(N116); - glVertex3fv(P116); - glNormal3fv(N117); - glVertex3fv(P117); - glNormal3fv(N112); - glVertex3fv(P112); - glNormal3fv(N113); - glVertex3fv(P113); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N114); - glVertex3fv(P114); - glNormal3fv(N113); - glVertex3fv(P113); - glNormal3fv(N112); - glVertex3fv(P112); - glNormal3fv(N115); - glVertex3fv(P115); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N114); - glVertex3fv(P114); - glNormal3fv(N116); - glVertex3fv(P116); - glNormal3fv(N113); - glVertex3fv(P113); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N114); - glVertex3fv(P114); - glNormal3fv(N007); - glVertex3fv(P007); - glNormal3fv(N116); - glVertex3fv(P116); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N007); - glVertex3fv(P007); - glNormal3fv(N002); - glVertex3fv(P002); - glNormal3fv(N116); - glVertex3fv(P116); - glEnd(); - glBegin(GL_POLYGON); - glVertex3fv(P002); - glVertex3fv(P007); - glVertex3fv(P008); - glVertex3fv(P099); - glEnd(); - glBegin(GL_POLYGON); - glVertex3fv(P007); - glVertex3fv(P114); - glVertex3fv(P115); - glVertex3fv(P008); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N117); - glVertex3fv(P117); - glNormal3fv(N099); - glVertex3fv(P099); - glNormal3fv(N008); - glVertex3fv(P008); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N117); - glVertex3fv(P117); - glNormal3fv(N008); - glVertex3fv(P008); - glNormal3fv(N112); - glVertex3fv(P112); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N112); - glVertex3fv(P112); - glNormal3fv(N008); - glVertex3fv(P008); - glNormal3fv(N115); - glVertex3fv(P115); - glEnd(); -} - -void -Dolphin014(void) -{ - glBegin(GL_POLYGON); - glNormal3fv(N111); - glVertex3fv(P111); - glNormal3fv(N110); - glVertex3fv(P110); - glNormal3fv(N102); - glVertex3fv(P102); - glNormal3fv(N121); - glVertex3fv(P121); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N111); - glVertex3fv(P111); - glNormal3fv(N097); - glVertex3fv(P097); - glNormal3fv(N110); - glVertex3fv(P110); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N097); - glVertex3fv(P097); - glNormal3fv(N119); - glVertex3fv(P119); - glNormal3fv(N110); - glVertex3fv(P110); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N097); - glVertex3fv(P097); - glNormal3fv(N099); - glVertex3fv(P099); - glNormal3fv(N119); - glVertex3fv(P119); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N099); - glVertex3fv(P099); - glNormal3fv(N065); - glVertex3fv(P065); - glNormal3fv(N119); - glVertex3fv(P119); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N065); - glVertex3fv(P065); - glNormal3fv(N066); - glVertex3fv(P066); - glNormal3fv(N119); - glVertex3fv(P119); - glEnd(); - glBegin(GL_POLYGON); - glVertex3fv(P098); - glVertex3fv(P097); - glVertex3fv(P111); - glVertex3fv(P121); - glEnd(); - glBegin(GL_POLYGON); - glVertex3fv(P002); - glVertex3fv(P099); - glVertex3fv(P097); - glVertex3fv(P098); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N110); - glVertex3fv(P110); - glNormal3fv(N119); - glVertex3fv(P119); - glNormal3fv(N118); - glVertex3fv(P118); - glNormal3fv(N102); - glVertex3fv(P102); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N119); - glVertex3fv(P119); - glNormal3fv(N066); - glVertex3fv(P066); - glNormal3fv(N067); - glVertex3fv(P067); - glNormal3fv(N118); - glVertex3fv(P118); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N067); - glVertex3fv(P067); - glNormal3fv(N060); - glVertex3fv(P060); - glNormal3fv(N002); - glVertex3fv(P002); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N067); - glVertex3fv(P067); - glNormal3fv(N002); - glVertex3fv(P002); - glNormal3fv(N118); - glVertex3fv(P118); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N118); - glVertex3fv(P118); - glNormal3fv(N002); - glVertex3fv(P002); - glNormal3fv(N098); - glVertex3fv(P098); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N118); - glVertex3fv(P118); - glNormal3fv(N098); - glVertex3fv(P098); - glNormal3fv(N102); - glVertex3fv(P102); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N102); - glVertex3fv(P102); - glNormal3fv(N098); - glVertex3fv(P098); - glNormal3fv(N121); - glVertex3fv(P121); - glEnd(); -} - -void -Dolphin015(void) -{ - glBegin(GL_POLYGON); - glNormal3fv(N055); - glVertex3fv(P055); - glNormal3fv(N003); - glVertex3fv(P003); - glNormal3fv(N054); - glVertex3fv(P054); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N003); - glVertex3fv(P003); - glNormal3fv(N055); - glVertex3fv(P055); - glNormal3fv(N063); - glVertex3fv(P063); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N003); - glVertex3fv(P003); - glNormal3fv(N063); - glVertex3fv(P063); - glNormal3fv(N100); - glVertex3fv(P100); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N003); - glVertex3fv(P003); - glNormal3fv(N100); - glVertex3fv(P100); - glNormal3fv(N054); - glVertex3fv(P054); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N054); - glVertex3fv(P054); - glNormal3fv(N100); - glVertex3fv(P100); - glNormal3fv(N062); - glVertex3fv(P062); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N100); - glVertex3fv(P100); - glNormal3fv(N064); - glVertex3fv(P064); - glNormal3fv(N120); - glVertex3fv(P120); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N100); - glVertex3fv(P100); - glNormal3fv(N063); - glVertex3fv(P063); - glNormal3fv(N064); - glVertex3fv(P064); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N063); - glVertex3fv(P063); - glNormal3fv(N006); - glVertex3fv(P006); - glNormal3fv(N064); - glVertex3fv(P064); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N064); - glVertex3fv(P064); - glNormal3fv(N006); - glVertex3fv(P006); - glNormal3fv(N099); - glVertex3fv(P099); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N064); - glVertex3fv(P064); - glNormal3fv(N099); - glVertex3fv(P099); - glNormal3fv(N117); - glVertex3fv(P117); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N120); - glVertex3fv(P120); - glNormal3fv(N064); - glVertex3fv(P064); - glNormal3fv(N117); - glVertex3fv(P117); - glNormal3fv(N116); - glVertex3fv(P116); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N006); - glVertex3fv(P006); - glNormal3fv(N065); - glVertex3fv(P065); - glNormal3fv(N099); - glVertex3fv(P099); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N062); - glVertex3fv(P062); - glNormal3fv(N100); - glVertex3fv(P100); - glNormal3fv(N120); - glVertex3fv(P120); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N005); - glVertex3fv(P005); - glNormal3fv(N062); - glVertex3fv(P062); - glNormal3fv(N120); - glVertex3fv(P120); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N005); - glVertex3fv(P005); - glNormal3fv(N120); - glVertex3fv(P120); - glNormal3fv(N002); - glVertex3fv(P002); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N002); - glVertex3fv(P002); - glNormal3fv(N120); - glVertex3fv(P120); - glNormal3fv(N116); - glVertex3fv(P116); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N060); - glVertex3fv(P060); - glNormal3fv(N005); - glVertex3fv(P005); - glNormal3fv(N002); - glVertex3fv(P002); - glEnd(); -} - -void -Dolphin016(void) -{ - - glDisable(GL_DEPTH_TEST); - glBegin(GL_POLYGON); - glVertex3fv(P123); - glVertex3fv(P124); - glVertex3fv(P125); - glVertex3fv(P126); - glVertex3fv(P127); - glVertex3fv(P128); - glEnd(); - glBegin(GL_POLYGON); - glVertex3fv(P129); - glVertex3fv(P130); - glVertex3fv(P131); - glVertex3fv(P132); - glVertex3fv(P133); - glVertex3fv(P134); - glEnd(); - glBegin(GL_POLYGON); - glVertex3fv(P103); - glVertex3fv(P105); - glVertex3fv(P108); - glEnd(); - glEnable(GL_DEPTH_TEST); -} - -void -DrawDolphin(fishRec * fish) -{ - float seg0, seg1, seg2, seg3, seg4, seg5, seg6, seg7; - float pitch, thrash, chomp; - - fish->htail = (int) (fish->htail - (int) (10.0 * fish->v)) % 360; - - thrash = 70.0 * fish->v; - - seg0 = 1.0 * thrash * sin((fish->htail) * RRAD); - seg3 = 1.0 * thrash * sin((fish->htail) * RRAD); - seg1 = 2.0 * thrash * sin((fish->htail + 4.0) * RRAD); - seg2 = 3.0 * thrash * sin((fish->htail + 6.0) * RRAD); - seg4 = 4.0 * thrash * sin((fish->htail + 10.0) * RRAD); - seg5 = 4.5 * thrash * sin((fish->htail + 15.0) * RRAD); - seg6 = 5.0 * thrash * sin((fish->htail + 20.0) * RRAD); - seg7 = 6.0 * thrash * sin((fish->htail + 30.0) * RRAD); - - pitch = fish->v * sin((fish->htail + 180.0) * RRAD); - - if (fish->v > 2.0) { - chomp = -(fish->v - 2.0) * 200.0; - } - chomp = 100.0; - - P012[1] = iP012[1] + seg5; - P013[1] = iP013[1] + seg5; - P014[1] = iP014[1] + seg5; - P015[1] = iP015[1] + seg5; - P016[1] = iP016[1] + seg5; - P017[1] = iP017[1] + seg5; - P018[1] = iP018[1] + seg5; - P019[1] = iP019[1] + seg5; - - P020[1] = iP020[1] + seg4; - P021[1] = iP021[1] + seg4; - P022[1] = iP022[1] + seg4; - P023[1] = iP023[1] + seg4; - P024[1] = iP024[1] + seg4; - P025[1] = iP025[1] + seg4; - P026[1] = iP026[1] + seg4; - P027[1] = iP027[1] + seg4; - - P028[1] = iP028[1] + seg2; - P029[1] = iP029[1] + seg2; - P030[1] = iP030[1] + seg2; - P031[1] = iP031[1] + seg2; - P032[1] = iP032[1] + seg2; - P033[1] = iP033[1] + seg2; - P034[1] = iP034[1] + seg2; - P035[1] = iP035[1] + seg2; - - P036[1] = iP036[1] + seg1; - P037[1] = iP037[1] + seg1; - P038[1] = iP038[1] + seg1; - P039[1] = iP039[1] + seg1; - P040[1] = iP040[1] + seg1; - P041[1] = iP041[1] + seg1; - P042[1] = iP042[1] + seg1; - P043[1] = iP043[1] + seg1; - - P044[1] = iP044[1] + seg0; - P045[1] = iP045[1] + seg0; - P046[1] = iP046[1] + seg0; - P047[1] = iP047[1] + seg0; - P048[1] = iP048[1] + seg0; - P049[1] = iP049[1] + seg0; - P050[1] = iP050[1] + seg0; - P051[1] = iP051[1] + seg0; - - P009[1] = iP009[1] + seg6; - P010[1] = iP010[1] + seg6; - P075[1] = iP075[1] + seg6; - P076[1] = iP076[1] + seg6; - - P001[1] = iP001[1] + seg7; - P011[1] = iP011[1] + seg7; - P068[1] = iP068[1] + seg7; - P069[1] = iP069[1] + seg7; - P070[1] = iP070[1] + seg7; - P071[1] = iP071[1] + seg7; - P072[1] = iP072[1] + seg7; - P073[1] = iP073[1] + seg7; - P074[1] = iP074[1] + seg7; - - P091[1] = iP091[1] + seg3; - P092[1] = iP092[1] + seg3; - P093[1] = iP093[1] + seg3; - P094[1] = iP094[1] + seg3; - P095[1] = iP095[1] + seg3; - P122[1] = iP122[1] + seg3 * 1.5; - - P097[1] = iP097[1] + chomp; - P098[1] = iP098[1] + chomp; - P102[1] = iP102[1] + chomp; - P110[1] = iP110[1] + chomp; - P111[1] = iP111[1] + chomp; - P121[1] = iP121[1] + chomp; - P118[1] = iP118[1] + chomp; - P119[1] = iP119[1] + chomp; - - glPushMatrix(); - - glRotatef(pitch, 1.0, 0.0, 0.0); - - glTranslatef(0.0, 0.0, 7000.0); - - glRotatef(180.0, 0.0, 1.0, 0.0); - - glEnable(GL_CULL_FACE); - Dolphin014(); - Dolphin010(); - Dolphin009(); - Dolphin012(); - Dolphin013(); - Dolphin006(); - Dolphin002(); - Dolphin001(); - Dolphin003(); - Dolphin015(); - Dolphin004(); - Dolphin005(); - Dolphin007(); - Dolphin008(); - Dolphin011(); - Dolphin016(); - glDisable(GL_CULL_FACE); - - glPopMatrix(); -} diff --git a/lib/glut-3.7.6/progs/demos/atlantis/shark.c b/lib/glut-3.7.6/progs/demos/atlantis/shark.c deleted file mode 100644 index 0ec499f66..000000000 --- a/lib/glut-3.7.6/progs/demos/atlantis/shark.c +++ /dev/null @@ -1,1308 +0,0 @@ -/** - * (c) Copyright 1993, 1994, 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 -#include -#include "atlantis.h" -/* *INDENT-OFF* */ -static float N002[3] = {0.000077 ,-0.020611 ,0.999788}; -static float N003[3] = {0.961425 ,0.258729 ,-0.093390}; -static float N004[3] = {0.510811 ,-0.769633 ,-0.383063}; -static float N005[3] = {0.400123 ,0.855734 ,-0.328055}; -static float N006[3] = {-0.770715 ,0.610204 ,-0.183440}; -static float N007[3] = {-0.915597 ,-0.373345 ,-0.149316}; -static float N008[3] = {-0.972788 ,0.208921 ,-0.100179}; -static float N009[3] = {-0.939713 ,-0.312268 ,-0.139383}; -static float N010[3] = {-0.624138 ,-0.741047 ,-0.247589}; -static float N011[3] = {0.591434 ,-0.768401 ,-0.244471}; -static float N012[3] = {0.935152 ,-0.328495 ,-0.132598}; -static float N013[3] = {0.997102 ,0.074243 ,-0.016593}; -static float N014[3] = {0.969995 ,0.241712 ,-0.026186}; -static float N015[3] = {0.844539 ,0.502628 ,-0.184714}; -static float N016[3] = {-0.906608 ,0.386308 ,-0.169787}; -static float N017[3] = {-0.970016 ,0.241698 ,-0.025516}; -static float N018[3] = {-0.998652 ,0.050493 ,-0.012045}; -static float N019[3] = {-0.942685 ,-0.333051 ,-0.020556}; -static float N020[3] = {-0.660944 ,-0.750276 ,0.015480}; -static float N021[3] = {0.503549 ,-0.862908 ,-0.042749}; -static float N022[3] = {0.953202 ,-0.302092 ,-0.012089}; -static float N023[3] = {0.998738 ,0.023574 ,0.044344}; -static float N024[3] = {0.979297 ,0.193272 ,0.060202}; -static float N025[3] = {0.798300 ,0.464885 ,0.382883}; -static float N026[3] = {-0.756590 ,0.452403 ,0.472126}; -static float N027[3] = {-0.953855 ,0.293003 ,0.065651}; -static float N028[3] = {-0.998033 ,0.040292 ,0.048028}; -static float N029[3] = {-0.977079 ,-0.204288 ,0.059858}; -static float N030[3] = {-0.729117 ,-0.675304 ,0.111140}; -static float N031[3] = {0.598361 ,-0.792753 ,0.116221}; -static float N032[3] = {0.965192 ,-0.252991 ,0.066332}; -static float N033[3] = {0.998201 ,-0.002790 ,0.059892}; -static float N034[3] = {0.978657 ,0.193135 ,0.070207}; -static float N035[3] = {0.718815 ,0.680392 ,0.142733}; -static float N036[3] = {-0.383096 ,0.906212 ,0.178936}; -static float N037[3] = {-0.952831 ,0.292590 ,0.080647}; -static float N038[3] = {-0.997680 ,0.032417 ,0.059861}; -static float N039[3] = {-0.982629 ,-0.169881 ,0.074700}; -static float N040[3] = {-0.695424 ,-0.703466 ,0.146700}; -static float N041[3] = {0.359323 ,-0.915531 ,0.180805}; -static float N042[3] = {0.943356 ,-0.319387 ,0.089842}; -static float N043[3] = {0.998272 ,-0.032435 ,0.048993}; -static float N044[3] = {0.978997 ,0.193205 ,0.065084}; -static float N045[3] = {0.872144 ,0.470094 ,-0.135565}; -static float N046[3] = {-0.664282 ,0.737945 ,-0.119027}; -static float N047[3] = {-0.954508 ,0.288570 ,0.075107}; -static float N048[3] = {-0.998273 ,0.032406 ,0.048993}; -static float N049[3] = {-0.979908 ,-0.193579 ,0.048038}; -static float N050[3] = {-0.858736 ,-0.507202 ,-0.072938}; -static float N051[3] = {0.643545 ,-0.763887 ,-0.048237}; -static float N052[3] = {0.955580 ,-0.288954 ,0.058068}; -static float N058[3] = {0.000050 ,0.793007 ,-0.609213}; -static float N059[3] = {0.913510 ,0.235418 ,-0.331779}; -static float N060[3] = {-0.807970 ,0.495000 ,-0.319625}; -static float N061[3] = {0.000000 ,0.784687 ,-0.619892}; -static float N062[3] = {0.000000 ,-1.000000 ,0.000000}; -static float N063[3] = {0.000000 ,1.000000 ,0.000000}; -static float N064[3] = {0.000000 ,1.000000 ,0.000000}; -static float N065[3] = {0.000000 ,1.000000 ,0.000000}; -static float N066[3] = {-0.055784 ,0.257059 ,0.964784}; -static float N069[3] = {-0.000505 ,-0.929775 ,-0.368127}; -static float N070[3] = {0.000000 ,1.000000 ,0.000000}; -static float P002[3] = {0.00, -36.59, 5687.72}; -static float P003[3] = {90.00, 114.73, 724.38}; -static float P004[3] = {58.24, -146.84, 262.35}; -static float P005[3] = {27.81, 231.52, 510.43}; -static float P006[3] = {-27.81, 230.43, 509.76}; -static float P007[3] = {-46.09, -146.83, 265.84}; -static float P008[3] = {-90.00, 103.84, 718.53}; -static float P009[3] = {-131.10, -165.92, 834.85}; -static float P010[3] = {-27.81, -285.31, 500.00}; -static float P011[3] = {27.81, -285.32, 500.00}; -static float P012[3] = {147.96, -170.89, 845.50}; -static float P013[3] = {180.00, 0.00, 2000.00}; -static float P014[3] = {145.62, 352.67, 2000.00}; -static float P015[3] = {55.62, 570.63, 2000.00}; -static float P016[3] = {-55.62, 570.64, 2000.00}; -static float P017[3] = {-145.62, 352.68, 2000.00}; -static float P018[3] = {-180.00, 0.01, 2000.00}; -static float P019[3] = {-178.20, -352.66, 2001.61}; -static float P020[3] = {-55.63, -570.63, 2000.00}; -static float P021[3] = {55.62, -570.64, 2000.00}; -static float P022[3] = {179.91, -352.69, 1998.39}; -static float P023[3] = {150.00, 0.00, 3000.00}; -static float P024[3] = {121.35, 293.89, 3000.00}; -static float P025[3] = {46.35, 502.93, 2883.09}; -static float P026[3] = {-46.35, 497.45, 2877.24}; -static float P027[3] = {-121.35, 293.90, 3000.00}; -static float P028[3] = {-150.00, 0.00, 3000.00}; -static float P029[3] = {-152.21, -304.84, 2858.68}; -static float P030[3] = {-46.36, -475.52, 3000.00}; -static float P031[3] = {46.35, -475.53, 3000.00}; -static float P032[3] = {155.64, -304.87, 2863.50}; -static float P033[3] = {90.00, 0.00, 4000.00}; -static float P034[3] = {72.81, 176.33, 4000.00}; -static float P035[3] = {27.81, 285.32, 4000.00}; -static float P036[3] = {-27.81, 285.32, 4000.00}; -static float P037[3] = {-72.81, 176.34, 4000.00}; -static float P038[3] = {-90.00, 0.00, 4000.00}; -static float P039[3] = {-72.81, -176.33, 4000.00}; -static float P040[3] = {-27.81, -285.31, 4000.00}; -static float P041[3] = {27.81, -285.32, 4000.00}; -static float P042[3] = {72.81, -176.34, 4000.00}; -static float P043[3] = {30.00, 0.00, 5000.00}; -static float P044[3] = {24.27, 58.78, 5000.00}; -static float P045[3] = {9.27, 95.11, 5000.00}; -static float P046[3] = {-9.27, 95.11, 5000.00}; -static float P047[3] = {-24.27, 58.78, 5000.00}; -static float P048[3] = {-30.00, 0.00, 5000.00}; -static float P049[3] = {-24.27, -58.78, 5000.00}; -static float P050[3] = {-9.27, -95.10, 5000.00}; -static float P051[3] = {9.27, -95.11, 5000.00}; -static float P052[3] = {24.27, -58.78, 5000.00}; -static float P058[3] = {0.00, 1212.72, 2703.08}; -static float P059[3] = {50.36, 0.00, 108.14}; -static float P060[3] = {-22.18, 0.00, 108.14}; -static float P061[3] = {0.00, 1181.61, 6344.65}; -static float P062[3] = {516.45, -887.08, 2535.45}; -static float P063[3] = {-545.69, -879.31, 2555.63}; -static float P064[3] = {618.89, -1005.64, 2988.32}; -static float P065[3] = {-635.37, -1014.79, 2938.68}; -static float P066[3] = {0.00, 1374.43, 3064.18}; -static float P069[3] = {0.00, -418.25, 5765.04}; -static float P070[3] = {0.00, 1266.91, 6629.60}; -static float P071[3] = {-139.12, -124.96, 997.98}; -static float P072[3] = {-139.24, -110.18, 1020.68}; -static float P073[3] = {-137.33, -94.52, 1022.63}; -static float P074[3] = {-137.03, -79.91, 996.89}; -static float P075[3] = {-135.21, -91.48, 969.14}; -static float P076[3] = {-135.39, -110.87, 968.76}; -static float P077[3] = {150.23, -78.44, 995.53}; -static float P078[3] = {152.79, -92.76, 1018.46}; -static float P079[3] = {154.19, -110.20, 1020.55}; -static float P080[3] = {151.33, -124.15, 993.77}; -static float P081[3] = {150.49, -111.19, 969.86}; -static float P082[3] = {150.79, -92.41, 969.70}; -static float iP002[3] = {0.00, -36.59, 5687.72}; -static float iP004[3] = {58.24, -146.84, 262.35}; -static float iP007[3] = {-46.09, -146.83, 265.84}; -static float iP010[3] = {-27.81, -285.31, 500.00}; -static float iP011[3] = {27.81, -285.32, 500.00}; -static float iP023[3] = {150.00, 0.00, 3000.00}; -static float iP024[3] = {121.35, 293.89, 3000.00}; -static float iP025[3] = {46.35, 502.93, 2883.09}; -static float iP026[3] = {-46.35, 497.45, 2877.24}; -static float iP027[3] = {-121.35, 293.90, 3000.00}; -static float iP028[3] = {-150.00, 0.00, 3000.00}; -static float iP029[3] = {-121.35, -304.84, 2853.86}; -static float iP030[3] = {-46.36, -475.52, 3000.00}; -static float iP031[3] = {46.35, -475.53, 3000.00}; -static float iP032[3] = {121.35, -304.87, 2853.86}; -static float iP033[3] = {90.00, 0.00, 4000.00}; -static float iP034[3] = {72.81, 176.33, 4000.00}; -static float iP035[3] = {27.81, 285.32, 4000.00}; -static float iP036[3] = {-27.81, 285.32, 4000.00}; -static float iP037[3] = {-72.81, 176.34, 4000.00}; -static float iP038[3] = {-90.00, 0.00, 4000.00}; -static float iP039[3] = {-72.81, -176.33, 4000.00}; -static float iP040[3] = {-27.81, -285.31, 4000.00}; -static float iP041[3] = {27.81, -285.32, 4000.00}; -static float iP042[3] = {72.81, -176.34, 4000.00}; -static float iP043[3] = {30.00, 0.00, 5000.00}; -static float iP044[3] = {24.27, 58.78, 5000.00}; -static float iP045[3] = {9.27, 95.11, 5000.00}; -static float iP046[3] = {-9.27, 95.11, 5000.00}; -static float iP047[3] = {-24.27, 58.78, 5000.00}; -static float iP048[3] = {-30.00, 0.00, 5000.00}; -static float iP049[3] = {-24.27, -58.78, 5000.00}; -static float iP050[3] = {-9.27, -95.10, 5000.00}; -static float iP051[3] = {9.27, -95.11, 5000.00}; -static float iP052[3] = {24.27, -58.78, 5000.00}; -static float iP061[3] = {0.00, 1181.61, 6344.65}; -static float iP069[3] = {0.00, -418.25, 5765.04}; -static float iP070[3] = {0.00, 1266.91, 6629.60}; -/* *INDENT-ON* */ - -void -Fish001(void) -{ - glBegin(GL_POLYGON); - glNormal3fv(N005); - glVertex3fv(P005); - glNormal3fv(N059); - glVertex3fv(P059); - glNormal3fv(N060); - glVertex3fv(P060); - glNormal3fv(N006); - glVertex3fv(P006); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N015); - glVertex3fv(P015); - glNormal3fv(N005); - glVertex3fv(P005); - glNormal3fv(N006); - glVertex3fv(P006); - glNormal3fv(N016); - glVertex3fv(P016); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N006); - glVertex3fv(P006); - glNormal3fv(N060); - glVertex3fv(P060); - glNormal3fv(N008); - glVertex3fv(P008); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N016); - glVertex3fv(P016); - glNormal3fv(N006); - glVertex3fv(P006); - glNormal3fv(N008); - glVertex3fv(P008); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N016); - glVertex3fv(P016); - glNormal3fv(N008); - glVertex3fv(P008); - glNormal3fv(N017); - glVertex3fv(P017); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N017); - glVertex3fv(P017); - glNormal3fv(N008); - glVertex3fv(P008); - glNormal3fv(N018); - glVertex3fv(P018); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N008); - glVertex3fv(P008); - glNormal3fv(N009); - glVertex3fv(P009); - glNormal3fv(N018); - glVertex3fv(P018); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N008); - glVertex3fv(P008); - glNormal3fv(N060); - glVertex3fv(P060); - glNormal3fv(N009); - glVertex3fv(P009); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N007); - glVertex3fv(P007); - glNormal3fv(N010); - glVertex3fv(P010); - glNormal3fv(N009); - glVertex3fv(P009); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N009); - glVertex3fv(P009); - glNormal3fv(N019); - glVertex3fv(P019); - glNormal3fv(N018); - glVertex3fv(P018); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N009); - glVertex3fv(P009); - glNormal3fv(N010); - glVertex3fv(P010); - glNormal3fv(N019); - glVertex3fv(P019); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N010); - glVertex3fv(P010); - glNormal3fv(N020); - glVertex3fv(P020); - glNormal3fv(N019); - glVertex3fv(P019); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N010); - glVertex3fv(P010); - glNormal3fv(N011); - glVertex3fv(P011); - glNormal3fv(N021); - glVertex3fv(P021); - glNormal3fv(N020); - glVertex3fv(P020); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N004); - glVertex3fv(P004); - glNormal3fv(N011); - glVertex3fv(P011); - glNormal3fv(N010); - glVertex3fv(P010); - glNormal3fv(N007); - glVertex3fv(P007); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N004); - glVertex3fv(P004); - glNormal3fv(N012); - glVertex3fv(P012); - glNormal3fv(N011); - glVertex3fv(P011); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N012); - glVertex3fv(P012); - glNormal3fv(N022); - glVertex3fv(P022); - glNormal3fv(N011); - glVertex3fv(P011); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N011); - glVertex3fv(P011); - glNormal3fv(N022); - glVertex3fv(P022); - glNormal3fv(N021); - glVertex3fv(P021); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N059); - glVertex3fv(P059); - glNormal3fv(N005); - glVertex3fv(P005); - glNormal3fv(N015); - glVertex3fv(P015); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N015); - glVertex3fv(P015); - glNormal3fv(N014); - glVertex3fv(P014); - glNormal3fv(N003); - glVertex3fv(P003); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N015); - glVertex3fv(P015); - glNormal3fv(N003); - glVertex3fv(P003); - glNormal3fv(N059); - glVertex3fv(P059); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N014); - glVertex3fv(P014); - glNormal3fv(N013); - glVertex3fv(P013); - glNormal3fv(N003); - glVertex3fv(P003); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N003); - glVertex3fv(P003); - glNormal3fv(N012); - glVertex3fv(P012); - glNormal3fv(N059); - glVertex3fv(P059); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N013); - glVertex3fv(P013); - glNormal3fv(N012); - glVertex3fv(P012); - glNormal3fv(N003); - glVertex3fv(P003); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N013); - glVertex3fv(P013); - glNormal3fv(N022); - glVertex3fv(P022); - glNormal3fv(N012); - glVertex3fv(P012); - glEnd(); - glBegin(GL_POLYGON); - glVertex3fv(P071); - glVertex3fv(P072); - glVertex3fv(P073); - glVertex3fv(P074); - glVertex3fv(P075); - glVertex3fv(P076); - glEnd(); - glBegin(GL_POLYGON); - glVertex3fv(P077); - glVertex3fv(P078); - glVertex3fv(P079); - glVertex3fv(P080); - glVertex3fv(P081); - glVertex3fv(P082); - glEnd(); -} - -void -Fish002(void) -{ - glBegin(GL_POLYGON); - glNormal3fv(N013); - glVertex3fv(P013); - glNormal3fv(N014); - glVertex3fv(P014); - glNormal3fv(N024); - glVertex3fv(P024); - glNormal3fv(N023); - glVertex3fv(P023); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N014); - glVertex3fv(P014); - glNormal3fv(N015); - glVertex3fv(P015); - glNormal3fv(N025); - glVertex3fv(P025); - glNormal3fv(N024); - glVertex3fv(P024); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N016); - glVertex3fv(P016); - glNormal3fv(N017); - glVertex3fv(P017); - glNormal3fv(N027); - glVertex3fv(P027); - glNormal3fv(N026); - glVertex3fv(P026); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N017); - glVertex3fv(P017); - glNormal3fv(N018); - glVertex3fv(P018); - glNormal3fv(N028); - glVertex3fv(P028); - glNormal3fv(N027); - glVertex3fv(P027); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N020); - glVertex3fv(P020); - glNormal3fv(N021); - glVertex3fv(P021); - glNormal3fv(N031); - glVertex3fv(P031); - glNormal3fv(N030); - glVertex3fv(P030); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N013); - glVertex3fv(P013); - glNormal3fv(N023); - glVertex3fv(P023); - glNormal3fv(N022); - glVertex3fv(P022); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N022); - glVertex3fv(P022); - glNormal3fv(N023); - glVertex3fv(P023); - glNormal3fv(N032); - glVertex3fv(P032); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N022); - glVertex3fv(P022); - glNormal3fv(N032); - glVertex3fv(P032); - glNormal3fv(N031); - glVertex3fv(P031); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N022); - glVertex3fv(P022); - glNormal3fv(N031); - glVertex3fv(P031); - glNormal3fv(N021); - glVertex3fv(P021); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N018); - glVertex3fv(P018); - glNormal3fv(N019); - glVertex3fv(P019); - glNormal3fv(N029); - glVertex3fv(P029); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N018); - glVertex3fv(P018); - glNormal3fv(N029); - glVertex3fv(P029); - glNormal3fv(N028); - glVertex3fv(P028); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N019); - glVertex3fv(P019); - glNormal3fv(N020); - glVertex3fv(P020); - glNormal3fv(N030); - glVertex3fv(P030); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N019); - glVertex3fv(P019); - glNormal3fv(N030); - glVertex3fv(P030); - glNormal3fv(N029); - glVertex3fv(P029); - glEnd(); -} - -void -Fish003(void) -{ - glBegin(GL_POLYGON); - glNormal3fv(N032); - glVertex3fv(P032); - glNormal3fv(N023); - glVertex3fv(P023); - glNormal3fv(N033); - glVertex3fv(P033); - glNormal3fv(N042); - glVertex3fv(P042); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N031); - glVertex3fv(P031); - glNormal3fv(N032); - glVertex3fv(P032); - glNormal3fv(N042); - glVertex3fv(P042); - glNormal3fv(N041); - glVertex3fv(P041); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N023); - glVertex3fv(P023); - glNormal3fv(N024); - glVertex3fv(P024); - glNormal3fv(N034); - glVertex3fv(P034); - glNormal3fv(N033); - glVertex3fv(P033); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N024); - glVertex3fv(P024); - glNormal3fv(N025); - glVertex3fv(P025); - glNormal3fv(N035); - glVertex3fv(P035); - glNormal3fv(N034); - glVertex3fv(P034); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N030); - glVertex3fv(P030); - glNormal3fv(N031); - glVertex3fv(P031); - glNormal3fv(N041); - glVertex3fv(P041); - glNormal3fv(N040); - glVertex3fv(P040); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N025); - glVertex3fv(P025); - glNormal3fv(N026); - glVertex3fv(P026); - glNormal3fv(N036); - glVertex3fv(P036); - glNormal3fv(N035); - glVertex3fv(P035); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N026); - glVertex3fv(P026); - glNormal3fv(N027); - glVertex3fv(P027); - glNormal3fv(N037); - glVertex3fv(P037); - glNormal3fv(N036); - glVertex3fv(P036); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N027); - glVertex3fv(P027); - glNormal3fv(N028); - glVertex3fv(P028); - glNormal3fv(N038); - glVertex3fv(P038); - glNormal3fv(N037); - glVertex3fv(P037); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N028); - glVertex3fv(P028); - glNormal3fv(N029); - glVertex3fv(P029); - glNormal3fv(N039); - glVertex3fv(P039); - glNormal3fv(N038); - glVertex3fv(P038); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N029); - glVertex3fv(P029); - glNormal3fv(N030); - glVertex3fv(P030); - glNormal3fv(N040); - glVertex3fv(P040); - glNormal3fv(N039); - glVertex3fv(P039); - glEnd(); -} - -void -Fish004(void) -{ - glBegin(GL_POLYGON); - glNormal3fv(N040); - glVertex3fv(P040); - glNormal3fv(N041); - glVertex3fv(P041); - glNormal3fv(N051); - glVertex3fv(P051); - glNormal3fv(N050); - glVertex3fv(P050); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N041); - glVertex3fv(P041); - glNormal3fv(N042); - glVertex3fv(P042); - glNormal3fv(N052); - glVertex3fv(P052); - glNormal3fv(N051); - glVertex3fv(P051); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N042); - glVertex3fv(P042); - glNormal3fv(N033); - glVertex3fv(P033); - glNormal3fv(N043); - glVertex3fv(P043); - glNormal3fv(N052); - glVertex3fv(P052); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N033); - glVertex3fv(P033); - glNormal3fv(N034); - glVertex3fv(P034); - glNormal3fv(N044); - glVertex3fv(P044); - glNormal3fv(N043); - glVertex3fv(P043); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N034); - glVertex3fv(P034); - glNormal3fv(N035); - glVertex3fv(P035); - glNormal3fv(N045); - glVertex3fv(P045); - glNormal3fv(N044); - glVertex3fv(P044); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N035); - glVertex3fv(P035); - glNormal3fv(N036); - glVertex3fv(P036); - glNormal3fv(N046); - glVertex3fv(P046); - glNormal3fv(N045); - glVertex3fv(P045); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N036); - glVertex3fv(P036); - glNormal3fv(N037); - glVertex3fv(P037); - glNormal3fv(N047); - glVertex3fv(P047); - glNormal3fv(N046); - glVertex3fv(P046); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N037); - glVertex3fv(P037); - glNormal3fv(N038); - glVertex3fv(P038); - glNormal3fv(N048); - glVertex3fv(P048); - glNormal3fv(N047); - glVertex3fv(P047); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N038); - glVertex3fv(P038); - glNormal3fv(N039); - glVertex3fv(P039); - glNormal3fv(N049); - glVertex3fv(P049); - glNormal3fv(N048); - glVertex3fv(P048); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N039); - glVertex3fv(P039); - glNormal3fv(N040); - glVertex3fv(P040); - glNormal3fv(N050); - glVertex3fv(P050); - glNormal3fv(N049); - glVertex3fv(P049); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N070); - glVertex3fv(P070); - glNormal3fv(N061); - glVertex3fv(P061); - glNormal3fv(N002); - glVertex3fv(P002); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N061); - glVertex3fv(P061); - glNormal3fv(N046); - glVertex3fv(P046); - glNormal3fv(N002); - glVertex3fv(P002); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N045); - glVertex3fv(P045); - glNormal3fv(N046); - glVertex3fv(P046); - glNormal3fv(N061); - glVertex3fv(P061); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N002); - glVertex3fv(P002); - glNormal3fv(N061); - glVertex3fv(P061); - glNormal3fv(N070); - glVertex3fv(P070); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N002); - glVertex3fv(P002); - glNormal3fv(N045); - glVertex3fv(P045); - glNormal3fv(N061); - glVertex3fv(P061); - glEnd(); -} - -void -Fish005(void) -{ - glBegin(GL_POLYGON); - glNormal3fv(N002); - glVertex3fv(P002); - glNormal3fv(N044); - glVertex3fv(P044); - glNormal3fv(N045); - glVertex3fv(P045); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N002); - glVertex3fv(P002); - glNormal3fv(N043); - glVertex3fv(P043); - glNormal3fv(N044); - glVertex3fv(P044); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N002); - glVertex3fv(P002); - glNormal3fv(N052); - glVertex3fv(P052); - glNormal3fv(N043); - glVertex3fv(P043); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N002); - glVertex3fv(P002); - glNormal3fv(N051); - glVertex3fv(P051); - glNormal3fv(N052); - glVertex3fv(P052); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N002); - glVertex3fv(P002); - glNormal3fv(N046); - glVertex3fv(P046); - glNormal3fv(N047); - glVertex3fv(P047); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N002); - glVertex3fv(P002); - glNormal3fv(N047); - glVertex3fv(P047); - glNormal3fv(N048); - glVertex3fv(P048); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N002); - glVertex3fv(P002); - glNormal3fv(N048); - glVertex3fv(P048); - glNormal3fv(N049); - glVertex3fv(P049); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N002); - glVertex3fv(P002); - glNormal3fv(N049); - glVertex3fv(P049); - glNormal3fv(N050); - glVertex3fv(P050); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N050); - glVertex3fv(P050); - glNormal3fv(N051); - glVertex3fv(P051); - glNormal3fv(N069); - glVertex3fv(P069); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N051); - glVertex3fv(P051); - glNormal3fv(N002); - glVertex3fv(P002); - glNormal3fv(N069); - glVertex3fv(P069); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N050); - glVertex3fv(P050); - glNormal3fv(N069); - glVertex3fv(P069); - glNormal3fv(N002); - glVertex3fv(P002); - glEnd(); -} - -void -Fish006(void) -{ - glBegin(GL_POLYGON); - glNormal3fv(N066); - glVertex3fv(P066); - glNormal3fv(N016); - glVertex3fv(P016); - glNormal3fv(N026); - glVertex3fv(P026); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N015); - glVertex3fv(P015); - glNormal3fv(N066); - glVertex3fv(P066); - glNormal3fv(N025); - glVertex3fv(P025); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N025); - glVertex3fv(P025); - glNormal3fv(N066); - glVertex3fv(P066); - glNormal3fv(N026); - glVertex3fv(P026); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N066); - glVertex3fv(P066); - glNormal3fv(N058); - glVertex3fv(P058); - glNormal3fv(N016); - glVertex3fv(P016); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N015); - glVertex3fv(P015); - glNormal3fv(N058); - glVertex3fv(P058); - glNormal3fv(N066); - glVertex3fv(P066); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N058); - glVertex3fv(P058); - glNormal3fv(N015); - glVertex3fv(P015); - glNormal3fv(N016); - glVertex3fv(P016); - glEnd(); -} - -void -Fish007(void) -{ - glBegin(GL_POLYGON); - glNormal3fv(N062); - glVertex3fv(P062); - glNormal3fv(N022); - glVertex3fv(P022); - glNormal3fv(N032); - glVertex3fv(P032); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N062); - glVertex3fv(P062); - glNormal3fv(N032); - glVertex3fv(P032); - glNormal3fv(N064); - glVertex3fv(P064); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N022); - glVertex3fv(P022); - glNormal3fv(N062); - glVertex3fv(P062); - glNormal3fv(N032); - glVertex3fv(P032); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N062); - glVertex3fv(P062); - glNormal3fv(N064); - glVertex3fv(P064); - glNormal3fv(N032); - glVertex3fv(P032); - glEnd(); -} - -void -Fish008(void) -{ - glBegin(GL_POLYGON); - glNormal3fv(N063); - glVertex3fv(P063); - glNormal3fv(N019); - glVertex3fv(P019); - glNormal3fv(N029); - glVertex3fv(P029); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N019); - glVertex3fv(P019); - glNormal3fv(N063); - glVertex3fv(P063); - glNormal3fv(N029); - glVertex3fv(P029); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N063); - glVertex3fv(P063); - glNormal3fv(N029); - glVertex3fv(P029); - glNormal3fv(N065); - glVertex3fv(P065); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N063); - glVertex3fv(P063); - glNormal3fv(N065); - glVertex3fv(P065); - glNormal3fv(N029); - glVertex3fv(P029); - glEnd(); -} - -void -Fish009(void) -{ - glBegin(GL_POLYGON); - glVertex3fv(P059); - glVertex3fv(P012); - glVertex3fv(P009); - glVertex3fv(P060); - glEnd(); - glBegin(GL_POLYGON); - glVertex3fv(P012); - glVertex3fv(P004); - glVertex3fv(P007); - glVertex3fv(P009); - glEnd(); -} - -void -Fish_1(void) -{ - Fish004(); - Fish005(); - Fish003(); - Fish007(); - Fish006(); - Fish002(); - Fish008(); - Fish009(); - Fish001(); -} - -void -Fish_2(void) -{ - Fish005(); - Fish004(); - Fish003(); - Fish008(); - Fish006(); - Fish002(); - Fish007(); - Fish009(); - Fish001(); -} - -void -Fish_3(void) -{ - Fish005(); - Fish004(); - Fish007(); - Fish003(); - Fish002(); - Fish008(); - Fish009(); - Fish001(); - Fish006(); -} - -void -Fish_4(void) -{ - Fish005(); - Fish004(); - Fish008(); - Fish003(); - Fish002(); - Fish007(); - Fish009(); - Fish001(); - Fish006(); -} - -void -Fish_5(void) -{ - Fish009(); - Fish006(); - Fish007(); - Fish001(); - Fish002(); - Fish003(); - Fish008(); - Fish004(); - Fish005(); -} - -void -Fish_6(void) -{ - Fish009(); - Fish006(); - Fish008(); - Fish001(); - Fish002(); - Fish007(); - Fish003(); - Fish004(); - Fish005(); -} - -void -Fish_7(void) -{ - Fish009(); - Fish001(); - Fish007(); - Fish005(); - Fish002(); - Fish008(); - Fish003(); - Fish004(); - Fish006(); -} - -void -Fish_8(void) -{ - Fish009(); - Fish008(); - Fish001(); - Fish002(); - Fish007(); - Fish003(); - Fish005(); - Fish004(); - Fish006(); -} - -void -DrawShark(fishRec * fish) -{ - float mat[4][4]; - int n; - float seg1, seg2, seg3, seg4, segup; - float thrash, chomp; - - fish->htail = (int) (fish->htail - (int) (5.0 * fish->v)) % 360; - - thrash = 50.0 * fish->v; - - seg1 = 0.6 * thrash * sin(fish->htail * RRAD); - seg2 = 1.8 * thrash * sin((fish->htail + 45.0) * RRAD); - seg3 = 3.0 * thrash * sin((fish->htail + 90.0) * RRAD); - seg4 = 4.0 * thrash * sin((fish->htail + 110.0) * RRAD); - - chomp = 0.0; - if (fish->v > 2.0) { - chomp = -(fish->v - 2.0) * 200.0; - } - P004[1] = iP004[1] + chomp; - P007[1] = iP007[1] + chomp; - P010[1] = iP010[1] + chomp; - P011[1] = iP011[1] + chomp; - - P023[0] = iP023[0] + seg1; - P024[0] = iP024[0] + seg1; - P025[0] = iP025[0] + seg1; - P026[0] = iP026[0] + seg1; - P027[0] = iP027[0] + seg1; - P028[0] = iP028[0] + seg1; - P029[0] = iP029[0] + seg1; - P030[0] = iP030[0] + seg1; - P031[0] = iP031[0] + seg1; - P032[0] = iP032[0] + seg1; - P033[0] = iP033[0] + seg2; - P034[0] = iP034[0] + seg2; - P035[0] = iP035[0] + seg2; - P036[0] = iP036[0] + seg2; - P037[0] = iP037[0] + seg2; - P038[0] = iP038[0] + seg2; - P039[0] = iP039[0] + seg2; - P040[0] = iP040[0] + seg2; - P041[0] = iP041[0] + seg2; - P042[0] = iP042[0] + seg2; - P043[0] = iP043[0] + seg3; - P044[0] = iP044[0] + seg3; - P045[0] = iP045[0] + seg3; - P046[0] = iP046[0] + seg3; - P047[0] = iP047[0] + seg3; - P048[0] = iP048[0] + seg3; - P049[0] = iP049[0] + seg3; - P050[0] = iP050[0] + seg3; - P051[0] = iP051[0] + seg3; - P052[0] = iP052[0] + seg3; - P002[0] = iP002[0] + seg4; - P061[0] = iP061[0] + seg4; - P069[0] = iP069[0] + seg4; - P070[0] = iP070[0] + seg4; - - fish->vtail += ((fish->dtheta - fish->vtail) * 0.1); - - if (fish->vtail > 0.5) { - fish->vtail = 0.5; - } else if (fish->vtail < -0.5) { - fish->vtail = -0.5; - } - segup = thrash * fish->vtail; - - P023[1] = iP023[1] + segup; - P024[1] = iP024[1] + segup; - P025[1] = iP025[1] + segup; - P026[1] = iP026[1] + segup; - P027[1] = iP027[1] + segup; - P028[1] = iP028[1] + segup; - P029[1] = iP029[1] + segup; - P030[1] = iP030[1] + segup; - P031[1] = iP031[1] + segup; - P032[1] = iP032[1] + segup; - P033[1] = iP033[1] + segup * 5.0; - P034[1] = iP034[1] + segup * 5.0; - P035[1] = iP035[1] + segup * 5.0; - P036[1] = iP036[1] + segup * 5.0; - P037[1] = iP037[1] + segup * 5.0; - P038[1] = iP038[1] + segup * 5.0; - P039[1] = iP039[1] + segup * 5.0; - P040[1] = iP040[1] + segup * 5.0; - P041[1] = iP041[1] + segup * 5.0; - P042[1] = iP042[1] + segup * 5.0; - P043[1] = iP043[1] + segup * 12.0; - P044[1] = iP044[1] + segup * 12.0; - P045[1] = iP045[1] + segup * 12.0; - P046[1] = iP046[1] + segup * 12.0; - P047[1] = iP047[1] + segup * 12.0; - P048[1] = iP048[1] + segup * 12.0; - P049[1] = iP049[1] + segup * 12.0; - P050[1] = iP050[1] + segup * 12.0; - P051[1] = iP051[1] + segup * 12.0; - P052[1] = iP052[1] + segup * 12.0; - P002[1] = iP002[1] + segup * 17.0; - P061[1] = iP061[1] + segup * 17.0; - P069[1] = iP069[1] + segup * 17.0; - P070[1] = iP070[1] + segup * 17.0; - - glPushMatrix(); - - glTranslatef(0.0, 0.0, -3000.0); - - glGetFloatv(GL_MODELVIEW_MATRIX, &mat[0][0]); - n = 0; - if (mat[0][2] >= 0.0) { - n += 1; - } - if (mat[1][2] >= 0.0) { - n += 2; - } - if (mat[2][2] >= 0.0) { - n += 4; - } - glScalef(2.0, 1.0, 1.0); - - glEnable(GL_CULL_FACE); - switch (n) { - case 0: - Fish_1(); - break; - case 1: - Fish_2(); - break; - case 2: - Fish_3(); - break; - case 3: - Fish_4(); - break; - case 4: - Fish_5(); - break; - case 5: - Fish_6(); - break; - case 6: - Fish_7(); - break; - case 7: - Fish_8(); - break; - } - glDisable(GL_CULL_FACE); - - glPopMatrix(); -} diff --git a/lib/glut-3.7.6/progs/demos/atlantis/swim.c b/lib/glut-3.7.6/progs/demos/atlantis/swim.c deleted file mode 100644 index 021bb0a67..000000000 --- a/lib/glut-3.7.6/progs/demos/atlantis/swim.c +++ /dev/null @@ -1,188 +0,0 @@ -/** - * (c) Copyright 1993, 1994, 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 -#include /* For rand(). */ -#include -#include "atlantis.h" - -void -FishTransform(fishRec * fish) -{ - - glTranslatef(fish->y, fish->z, -fish->x); - glRotatef(-fish->psi, 0.0, 1.0, 0.0); - glRotatef(fish->theta, 1.0, 0.0, 0.0); - glRotatef(-fish->phi, 0.0, 0.0, 1.0); -} - -void -WhalePilot(fishRec * fish) -{ - - fish->phi = -20.0; - fish->theta = 0.0; - fish->psi -= 0.5; - - fish->x += WHALESPEED * fish->v * cos(fish->psi / RAD) * cos(fish->theta / RAD); - fish->y += WHALESPEED * fish->v * sin(fish->psi / RAD) * cos(fish->theta / RAD); - fish->z += WHALESPEED * fish->v * sin(fish->theta / RAD); -} - -void -SharkPilot(fishRec * fish) -{ - static int sign = 1; - float X, Y, Z, tpsi, ttheta, thetal; - - fish->xt = 60000.0; - fish->yt = 0.0; - fish->zt = 0.0; - - X = fish->xt - fish->x; - Y = fish->yt - fish->y; - Z = fish->zt - fish->z; - - thetal = fish->theta; - - ttheta = RAD * atan(Z / (sqrt(X * X + Y * Y))); - - if (ttheta > fish->theta + 0.25) { - fish->theta += 0.5; - } else if (ttheta < fish->theta - 0.25) { - fish->theta -= 0.5; - } - if (fish->theta > 90.0) { - fish->theta = 90.0; - } - if (fish->theta < -90.0) { - fish->theta = -90.0; - } - fish->dtheta = fish->theta - thetal; - - tpsi = RAD * atan2(Y, X); - - fish->attack = 0; - - if (fabs(tpsi - fish->psi) < 10.0) { - fish->attack = 1; - } else if (fabs(tpsi - fish->psi) < 45.0) { - if (fish->psi > tpsi) { - fish->psi -= 0.5; - if (fish->psi < -180.0) { - fish->psi += 360.0; - } - } else if (fish->psi < tpsi) { - fish->psi += 0.5; - if (fish->psi > 180.0) { - fish->psi -= 360.0; - } - } - } else { - if (rand() % 100 > 98) { - sign = 1 - sign; - } - fish->psi += sign; - if (fish->psi > 180.0) { - fish->psi -= 360.0; - } - if (fish->psi < -180.0) { - fish->psi += 360.0; - } - } - - if (fish->attack) { - if (fish->v < 1.1) { - fish->spurt = 1; - } - if (fish->spurt) { - fish->v += 0.2; - } - if (fish->v > 5.0) { - fish->spurt = 0; - } - if ((fish->v > 1.0) && (!fish->spurt)) { - fish->v -= 0.2; - } - } else { - if (!(rand() % 400) && (!fish->spurt)) { - fish->spurt = 1; - } - if (fish->spurt) { - fish->v += 0.05; - } - if (fish->v > 3.0) { - fish->spurt = 0; - } - if ((fish->v > 1.0) && (!fish->spurt)) { - fish->v -= 0.05; - } - } - - fish->x += SHARKSPEED * fish->v * cos(fish->psi / RAD) * cos(fish->theta / RAD); - fish->y += SHARKSPEED * fish->v * sin(fish->psi / RAD) * cos(fish->theta / RAD); - fish->z += SHARKSPEED * fish->v * sin(fish->theta / RAD); -} - -void -SharkMiss(int i) -{ - int j; - float avoid, thetal; - float X, Y, Z, R; - - for (j = 0; j < NUM_SHARKS; j++) { - if (j != i) { - X = sharks[j].x - sharks[i].x; - Y = sharks[j].y - sharks[i].y; - Z = sharks[j].z - sharks[i].z; - - R = sqrt(X * X + Y * Y + Z * Z); - - avoid = 1.0; - thetal = sharks[i].theta; - - if (R < SHARKSIZE) { - if (Z > 0.0) { - sharks[i].theta -= avoid; - } else { - sharks[i].theta += avoid; - } - } - sharks[i].dtheta += (sharks[i].theta - thetal); - } - } -} diff --git a/lib/glut-3.7.6/progs/demos/atlantis/whale.c b/lib/glut-3.7.6/progs/demos/atlantis/whale.c deleted file mode 100644 index b53e286c2..000000000 --- a/lib/glut-3.7.6/progs/demos/atlantis/whale.c +++ /dev/null @@ -1,1798 +0,0 @@ -/** - * (c) Copyright 1993, 1994, 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 -#include -#include "atlantis.h" -/* *INDENT-OFF* */ -static float N001[3] = {0.019249 ,0.011340 ,-0.999750}; -static float N002[3] = {-0.132579 ,0.954547 ,0.266952}; -static float N003[3] = {-0.196061 ,0.980392 ,-0.019778}; -static float N004[3] = {0.695461 ,0.604704 ,0.388158}; -static float N005[3] = {0.870600 ,0.425754 ,0.246557}; -static float N006[3] = {-0.881191 ,0.392012 ,0.264251}; -static float N008[3] = {-0.341437 ,0.887477 ,0.309523}; -static float N009[3] = {0.124035 ,-0.992278 ,0.000000}; -static float N010[3] = {0.242536 ,0.000000 ,-0.970143}; -static float N011[3] = {0.588172 ,0.000000 ,0.808736}; -static float N012[3] = {0.929824 ,-0.340623 ,-0.139298}; -static float N013[3] = {0.954183 ,0.267108 ,-0.134865}; -static float N014[3] = {0.495127 ,0.855436 ,-0.151914}; -static float N015[3] = {-0.390199 ,0.906569 ,-0.160867}; -static float N016[3] = {-0.923605 ,0.354581 ,-0.145692}; -static float N017[3] = {-0.955796 ,-0.260667 ,-0.136036}; -static float N018[3] = {-0.501283 ,-0.853462 ,-0.142540}; -static float N019[3] = {0.405300 ,-0.901974 ,-0.148913}; -static float N020[3] = {0.909913 ,-0.392746 ,-0.133451}; -static float N021[3] = {0.936494 ,0.331147 ,-0.115414}; -static float N022[3] = {0.600131 ,0.793724 ,-0.099222}; -static float N023[3] = {-0.231556 ,0.968361 ,-0.093053}; -static float N024[3] = {-0.844369 ,0.525330 ,-0.105211}; -static float N025[3] = {-0.982725 ,-0.136329 ,-0.125164}; -static float N026[3] = {-0.560844 ,-0.822654 ,-0.093241}; -static float N027[3] = {0.263884 ,-0.959981 ,-0.093817}; -static float N028[3] = {0.842057 ,-0.525192 ,-0.122938}; -static float N029[3] = {0.921620 ,0.367565 ,-0.124546}; -static float N030[3] = {0.613927 ,0.784109 ,-0.090918}; -static float N031[3] = {-0.448754 ,0.888261 ,-0.098037}; -static float N032[3] = {-0.891865 ,0.434376 ,-0.126077}; -static float N033[3] = {-0.881447 ,-0.448017 ,-0.149437}; -static float N034[3] = {-0.345647 ,-0.922057 ,-0.174183}; -static float N035[3] = {0.307998 ,-0.941371 ,-0.137688}; -static float N036[3] = {0.806316 ,-0.574647 ,-0.140124}; -static float N037[3] = {0.961346 ,0.233646 ,-0.145681}; -static float N038[3] = {0.488451 ,0.865586 ,-0.110351}; -static float N039[3] = {-0.374290 ,0.921953 ,-0.099553}; -static float N040[3] = {-0.928504 ,0.344533 ,-0.138485}; -static float N041[3] = {-0.918419 ,-0.371792 ,-0.135189}; -static float N042[3] = {-0.520666 ,-0.833704 ,-0.183968}; -static float N043[3] = {0.339204 ,-0.920273 ,-0.195036}; -static float N044[3] = {0.921475 ,-0.387382 ,-0.028636}; -static float N045[3] = {0.842465 ,0.533335 ,-0.076204}; -static float N046[3] = {0.380110 ,0.924939 ,0.002073}; -static float N047[3] = {-0.276128 ,0.961073 ,-0.009579}; -static float N048[3] = {-0.879684 ,0.473001 ,-0.049250}; -static float N049[3] = {-0.947184 ,-0.317614 ,-0.044321}; -static float N050[3] = {-0.642059 ,-0.764933 ,-0.051363}; -static float N051[3] = {0.466794 ,-0.880921 ,-0.077990}; -static float N052[3] = {0.898509 ,-0.432277 ,0.076279}; -static float N053[3] = {0.938985 ,0.328141 ,0.103109}; -static float N054[3] = {0.442420 ,0.895745 ,0.043647}; -static float N055[3] = {-0.255163 ,0.966723 ,0.018407}; -static float N056[3] = {-0.833769 ,0.540650 ,0.111924}; -static float N057[3] = {-0.953653 ,-0.289939 ,0.080507}; -static float N058[3] = {-0.672357 ,-0.730524 ,0.119461}; -static float N059[3] = {0.522249 ,-0.846652 ,0.102157}; -static float N060[3] = {0.885868 ,-0.427631 ,0.179914}; -static float N062[3] = {0.648942 ,0.743116 ,0.163255}; -static float N063[3] = {-0.578967 ,0.807730 ,0.111219}; -static float N065[3] = {-0.909864 ,-0.352202 ,0.219321}; -static float N066[3] = {-0.502541 ,-0.818090 ,0.279610}; -static float N067[3] = {0.322919 ,-0.915358 ,0.240504}; -static float N068[3] = {0.242536 ,0.000000 ,-0.970143}; -static float N069[3] = {0.000000 ,1.000000 ,0.000000}; -static float N070[3] = {0.000000 ,1.000000 ,0.000000}; -static float N071[3] = {0.000000 ,1.000000 ,0.000000}; -static float N072[3] = {0.000000 ,1.000000 ,0.000000}; -static float N073[3] = {0.000000 ,1.000000 ,0.000000}; -static float N074[3] = {0.000000 ,1.000000 ,0.000000}; -static float N075[3] = {0.031220 ,0.999025 ,-0.031220}; -static float N076[3] = {0.000000 ,1.000000 ,0.000000}; -static float N077[3] = {0.446821 ,0.893642 ,0.041889}; -static float N078[3] = {0.863035 ,-0.100980 ,0.494949}; -static float N079[3] = {0.585597 ,-0.808215 ,0.062174}; -static float N080[3] = {0.000000 ,1.000000 ,0.000000}; -static float N081[3] = {1.000000 ,0.000000 ,0.000000}; -static float N082[3] = {0.000000 ,1.000000 ,0.000000}; -static float N083[3] = {-1.000000 ,0.000000 ,0.000000}; -static float N084[3] = {-0.478893 ,0.837129 ,-0.264343}; -static float N085[3] = {0.000000 ,1.000000 ,0.000000}; -static float N086[3] = {0.763909 ,0.539455 ,-0.354163}; -static float N087[3] = {0.446821 ,0.893642 ,0.041889}; -static float N088[3] = {0.385134 ,-0.908288 ,0.163352}; -static float N089[3] = {-0.605952 ,0.779253 ,-0.159961}; -static float N090[3] = {0.000000 ,1.000000 ,0.000000}; -static float N091[3] = {0.000000 ,1.000000 ,0.000000}; -static float N092[3] = {0.000000 ,1.000000 ,0.000000}; -static float N093[3] = {0.000000 ,1.000000 ,0.000000}; -static float N094[3] = {1.000000 ,0.000000 ,0.000000}; -static float N095[3] = {-1.000000 ,0.000000 ,0.000000}; -static float N096[3] = {0.644444 ,-0.621516 ,0.445433}; -static float N097[3] = {-0.760896 ,-0.474416 ,0.442681}; -static float N098[3] = {0.636888 ,-0.464314 ,0.615456}; -static float N099[3] = {-0.710295 ,0.647038 ,0.277168}; -static float N100[3] = {0.009604 ,0.993655 ,0.112063}; -static float iP001[3] = {18.74, 13.19, 3.76}; -static float P001[3] = {18.74, 13.19, 3.76}; -static float P002[3] = {0.00, 390.42, 10292.57}; -static float P003[3] = {55.80, 622.31, 8254.35}; -static float P004[3] = {20.80, 247.66, 10652.13}; -static float P005[3] = {487.51, 198.05, 9350.78}; -static float P006[3] = {-457.61, 199.04, 9353.01}; -static float P008[3] = {-34.67, 247.64, 10663.71}; -static float iP009[3] = {97.46, 67.63, 593.82}; -static float iP010[3] = {-84.33, 67.63, 588.18}; -static float iP011[3] = {118.69, 8.98, -66.91}; -static float P009[3] = {97.46, 67.63, 593.82}; -static float P010[3] = {-84.33, 67.63, 588.18}; -static float P011[3] = {118.69, 8.98, -66.91}; -static float iP012[3] = {156.48, -31.95, 924.54}; -static float iP013[3] = {162.00, 110.22, 924.54}; -static float iP014[3] = {88.16, 221.65, 924.54}; -static float iP015[3] = {-65.21, 231.16, 924.54}; -static float iP016[3] = {-156.48, 121.97, 924.54}; -static float iP017[3] = {-162.00, -23.93, 924.54}; -static float iP018[3] = {-88.16, -139.10, 924.54}; -static float iP019[3] = {65.21, -148.61, 924.54}; -static float iP020[3] = {246.87, -98.73, 1783.04}; -static float iP021[3] = {253.17, 127.76, 1783.04}; -static float iP022[3] = {132.34, 270.77, 1783.04}; -static float iP023[3] = {-97.88, 285.04, 1783.04}; -static float iP024[3] = {-222.97, 139.80, 1783.04}; -static float iP025[3] = {-225.29, -86.68, 1783.04}; -static float iP026[3] = {-108.44, -224.15, 1783.04}; -static float iP027[3] = {97.88, -221.56, 1783.04}; -static float iP028[3] = {410.55, -200.66, 3213.87}; -static float iP029[3] = {432.19, 148.42, 3213.87}; -static float iP030[3] = {200.66, 410.55, 3213.87}; -static float iP031[3] = {-148.42, 432.19, 3213.87}; -static float iP032[3] = {-407.48, 171.88, 3213.87}; -static float iP033[3] = {-432.19, -148.42, 3213.87}; -static float iP034[3] = {-148.88, -309.74, 3213.87}; -static float iP035[3] = {156.38, -320.17, 3213.87}; -static float iP036[3] = {523.39, -303.81, 4424.57}; -static float iP037[3] = {574.66, 276.84, 4424.57}; -static float iP038[3] = {243.05, 492.50, 4424.57}; -static float iP039[3] = {-191.23, 520.13, 4424.57}; -static float iP040[3] = {-523.39, 304.01, 4424.57}; -static float iP041[3] = {-574.66, -231.83, 4424.57}; -static float iP042[3] = {-266.95, -578.17, 4424.57}; -static float iP043[3] = {211.14, -579.67, 4424.57}; -static float iP044[3] = {680.57, -370.27, 5943.46}; -static float iP045[3] = {834.01, 363.09, 5943.46}; -static float iP046[3] = {371.29, 614.13, 5943.46}; -static float iP047[3] = {-291.43, 621.86, 5943.46}; -static float iP048[3] = {-784.13, 362.60, 5943.46}; -static float iP049[3] = {-743.29, -325.82, 5943.46}; -static float iP050[3] = {-383.24, -804.77, 5943.46}; -static float iP051[3] = {283.47, -846.09, 5943.46}; -static float P012[3] = {156.48, -31.95, 924.54}; -static float P013[3] = {162.00, 110.22, 924.54}; -static float P014[3] = {88.16, 221.65, 924.54}; -static float P015[3] = {-65.21, 231.16, 924.54}; -static float P016[3] = {-156.48, 121.97, 924.54}; -static float P017[3] = {-162.00, -23.93, 924.54}; -static float P018[3] = {-88.16, -139.10, 924.54}; -static float P019[3] = {65.21, -148.61, 924.54}; -static float P020[3] = {246.87, -98.73, 1783.04}; -static float P021[3] = {253.17, 127.76, 1783.04}; -static float P022[3] = {132.34, 270.77, 1783.04}; -static float P023[3] = {-97.88, 285.04, 1783.04}; -static float P024[3] = {-222.97, 139.80, 1783.04}; -static float P025[3] = {-225.29, -86.68, 1783.04}; -static float P026[3] = {-108.44, -224.15, 1783.04}; -static float P027[3] = {97.88, -221.56, 1783.04}; -static float P028[3] = {410.55, -200.66, 3213.87}; -static float P029[3] = {432.19, 148.42, 3213.87}; -static float P030[3] = {200.66, 410.55, 3213.87}; -static float P031[3] = {-148.42, 432.19, 3213.87}; -static float P032[3] = {-407.48, 171.88, 3213.87}; -static float P033[3] = {-432.19, -148.42, 3213.87}; -static float P034[3] = {-148.88, -309.74, 3213.87}; -static float P035[3] = {156.38, -320.17, 3213.87}; -static float P036[3] = {523.39, -303.81, 4424.57}; -static float P037[3] = {574.66, 276.84, 4424.57}; -static float P038[3] = {243.05, 492.50, 4424.57}; -static float P039[3] = {-191.23, 520.13, 4424.57}; -static float P040[3] = {-523.39, 304.01, 4424.57}; -static float P041[3] = {-574.66, -231.83, 4424.57}; -static float P042[3] = {-266.95, -578.17, 4424.57}; -static float P043[3] = {211.14, -579.67, 4424.57}; -static float P044[3] = {680.57, -370.27, 5943.46}; -static float P045[3] = {834.01, 363.09, 5943.46}; -static float P046[3] = {371.29, 614.13, 5943.46}; -static float P047[3] = {-291.43, 621.86, 5943.46}; -static float P048[3] = {-784.13, 362.60, 5943.46}; -static float P049[3] = {-743.29, -325.82, 5943.46}; -static float P050[3] = {-383.24, -804.77, 5943.46}; -static float P051[3] = {283.47, -846.09, 5943.46}; -static float P052[3] = {599.09, -332.24, 7902.59}; -static float P053[3] = {735.48, 306.26, 7911.92}; -static float P054[3] = {321.55, 558.53, 7902.59}; -static float P055[3] = {-260.54, 559.84, 7902.59}; -static float P056[3] = {-698.66, 320.83, 7902.59}; -static float P057[3] = {-643.29, -299.16, 7902.59}; -static float P058[3] = {-341.47, -719.30, 7902.59}; -static float P059[3] = {252.57, -756.12, 7902.59}; -static float P060[3] = {458.39, -265.31, 9355.44}; -static float P062[3] = {224.04, 438.98, 9364.77}; -static float P063[3] = {-165.71, 441.27, 9355.44}; -static float P065[3] = {-473.99, -219.71, 9355.44}; -static float P066[3] = {-211.97, -479.87, 9355.44}; -static float P067[3] = {192.86, -504.03, 9355.44}; -static float iP068[3] = {-112.44, 9.25, -64.42}; -static float iP069[3] = {1155.63, 0.00, -182.46}; -static float iP070[3] = {-1143.13, 0.00, -181.54}; -static float iP071[3] = {1424.23, 0.00, -322.09}; -static float iP072[3] = {-1368.01, 0.00, -310.38}; -static float iP073[3] = {1255.57, 2.31, 114.05}; -static float iP074[3] = {-1149.38, 0.00, 117.12}; -static float iP075[3] = {718.36, 0.00, 433.36}; -static float iP076[3] = {-655.90, 0.00, 433.36}; -static float P068[3] = {-112.44, 9.25, -64.42}; -static float P069[3] = {1155.63, 0.00, -182.46}; -static float P070[3] = {-1143.13, 0.00, -181.54}; -static float P071[3] = {1424.23, 0.00, -322.09}; -static float P072[3] = {-1368.01, 0.00, -310.38}; -static float P073[3] = {1255.57, 2.31, 114.05}; -static float P074[3] = {-1149.38, 0.00, 117.12}; -static float P075[3] = {718.36, 0.00, 433.36}; -static float P076[3] = {-655.90, 0.00, 433.36}; -static float P077[3] = {1058.00, -2.66, 7923.51}; -static float P078[3] = {-1016.51, -15.47, 7902.87}; -static float P079[3] = {-1363.99, -484.50, 7593.38}; -static float P080[3] = {1478.09, -861.47, 7098.12}; -static float P081[3] = {1338.06, -284.68, 7024.15}; -static float P082[3] = {-1545.51, -860.64, 7106.60}; -static float P083[3] = {1063.19, -70.46, 7466.60}; -static float P084[3] = {-1369.18, -288.11, 7015.34}; -static float P085[3] = {1348.44, -482.50, 7591.41}; -static float P086[3] = {-1015.45, -96.80, 7474.86}; -static float P087[3] = {731.04, 148.38, 7682.58}; -static float P088[3] = {-697.03, 151.82, 7668.81}; -static float P089[3] = {-686.82, 157.09, 7922.29}; -static float P090[3] = {724.73, 147.75, 7931.39}; -static float iP091[3] = {0.00, 327.10, 2346.55}; -static float iP092[3] = {0.00, 552.28, 2311.31}; -static float iP093[3] = {0.00, 721.16, 2166.41}; -static float iP094[3] = {0.00, 693.42, 2388.80}; -static float iP095[3] = {0.00, 389.44, 2859.97}; -static float P091[3] = {0.00, 327.10, 2346.55}; -static float P092[3] = {0.00, 552.28, 2311.31}; -static float P093[3] = {0.00, 721.16, 2166.41}; -static float P094[3] = {0.00, 693.42, 2388.80}; -static float P095[3] = {0.00, 389.44, 2859.97}; -static float iP096[3] = {222.02, -183.67, 10266.89}; -static float iP097[3] = {-128.90, -182.70, 10266.89}; -static float iP098[3] = {41.04, 88.31, 10659.36}; -static float iP099[3] = {-48.73, 88.30, 10659.36}; -static float P096[3] = {222.02, -183.67, 10266.89}; -static float P097[3] = {-128.90, -182.70, 10266.89}; -static float P098[3] = {41.04, 88.31, 10659.36}; -static float P099[3] = {-48.73, 88.30, 10659.36}; -static float P100[3] = {0.00, 603.42, 9340.68}; -static float P104[3] = {-9.86, 567.62, 7858.65}; -static float P105[3] = {31.96, 565.27, 7908.46}; -static float P106[3] = {22.75, 568.13, 7782.83}; -static float P107[3] = {58.93, 568.42, 7775.94}; -static float P108[3] = {55.91, 565.59, 7905.86}; -static float P109[3] = {99.21, 566.00, 7858.65}; -static float P110[3] = {-498.83, 148.14, 9135.10}; -static float P111[3] = {-495.46, 133.24, 9158.48}; -static float P112[3] = {-490.82, 146.23, 9182.76}; -static float P113[3] = {-489.55, 174.11, 9183.66}; -static float P114[3] = {-492.92, 189.00, 9160.28}; -static float P115[3] = {-497.56, 176.02, 9136.00}; -static float P116[3] = {526.54, 169.68, 9137.70}; -static float P117[3] = {523.49, 184.85, 9161.42}; -static float P118[3] = {518.56, 171.78, 9186.06}; -static float P119[3] = {516.68, 143.53, 9186.98}; -static float P120[3] = {519.73, 128.36, 9163.26}; -static float P121[3] = {524.66, 141.43, 9138.62}; -/* *INDENT-ON* */ - -void -Whale001(void) -{ - - glBegin(GL_POLYGON); - glNormal3fv(N001); - glVertex3fv(P001); - glNormal3fv(N068); - glVertex3fv(P068); - glNormal3fv(N010); - glVertex3fv(P010); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N068); - glVertex3fv(P068); - glNormal3fv(N076); - glVertex3fv(P076); - glNormal3fv(N010); - glVertex3fv(P010); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N068); - glVertex3fv(P068); - glNormal3fv(N070); - glVertex3fv(P070); - glNormal3fv(N076); - glVertex3fv(P076); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N076); - glVertex3fv(P076); - glNormal3fv(N070); - glVertex3fv(P070); - glNormal3fv(N074); - glVertex3fv(P074); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N070); - glVertex3fv(P070); - glNormal3fv(N072); - glVertex3fv(P072); - glNormal3fv(N074); - glVertex3fv(P074); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N072); - glVertex3fv(P072); - glNormal3fv(N070); - glVertex3fv(P070); - glNormal3fv(N074); - glVertex3fv(P074); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N074); - glVertex3fv(P074); - glNormal3fv(N070); - glVertex3fv(P070); - glNormal3fv(N076); - glVertex3fv(P076); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N070); - glVertex3fv(P070); - glNormal3fv(N068); - glVertex3fv(P068); - glNormal3fv(N076); - glVertex3fv(P076); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N076); - glVertex3fv(P076); - glNormal3fv(N068); - glVertex3fv(P068); - glNormal3fv(N010); - glVertex3fv(P010); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N068); - glVertex3fv(P068); - glNormal3fv(N001); - glVertex3fv(P001); - glNormal3fv(N010); - glVertex3fv(P010); - glEnd(); -} - -void -Whale002(void) -{ - glBegin(GL_POLYGON); - glNormal3fv(N011); - glVertex3fv(P011); - glNormal3fv(N001); - glVertex3fv(P001); - glNormal3fv(N009); - glVertex3fv(P009); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N075); - glVertex3fv(P075); - glNormal3fv(N011); - glVertex3fv(P011); - glNormal3fv(N009); - glVertex3fv(P009); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N069); - glVertex3fv(P069); - glNormal3fv(N011); - glVertex3fv(P011); - glNormal3fv(N075); - glVertex3fv(P075); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N069); - glVertex3fv(P069); - glNormal3fv(N075); - glVertex3fv(P075); - glNormal3fv(N073); - glVertex3fv(P073); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N071); - glVertex3fv(P071); - glNormal3fv(N069); - glVertex3fv(P069); - glNormal3fv(N073); - glVertex3fv(P073); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N001); - glVertex3fv(P001); - glNormal3fv(N011); - glVertex3fv(P011); - glNormal3fv(N009); - glVertex3fv(P009); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N009); - glVertex3fv(P009); - glNormal3fv(N011); - glVertex3fv(P011); - glNormal3fv(N075); - glVertex3fv(P075); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N011); - glVertex3fv(P011); - glNormal3fv(N069); - glVertex3fv(P069); - glNormal3fv(N075); - glVertex3fv(P075); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N069); - glVertex3fv(P069); - glNormal3fv(N073); - glVertex3fv(P073); - glNormal3fv(N075); - glVertex3fv(P075); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N069); - glVertex3fv(P069); - glNormal3fv(N071); - glVertex3fv(P071); - glNormal3fv(N073); - glVertex3fv(P073); - glEnd(); -} - -void -Whale003(void) -{ - glBegin(GL_POLYGON); - glNormal3fv(N018); - glVertex3fv(P018); - glNormal3fv(N001); - glVertex3fv(P001); - glNormal3fv(N019); - glVertex3fv(P019); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N019); - glVertex3fv(P019); - glNormal3fv(N001); - glVertex3fv(P001); - glNormal3fv(N012); - glVertex3fv(P012); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N017); - glVertex3fv(P017); - glNormal3fv(N001); - glVertex3fv(P001); - glNormal3fv(N018); - glVertex3fv(P018); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N001); - glVertex3fv(P001); - glNormal3fv(N017); - glVertex3fv(P017); - glNormal3fv(N016); - glVertex3fv(P016); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N001); - glVertex3fv(P001); - glNormal3fv(N013); - glVertex3fv(P013); - glNormal3fv(N012); - glVertex3fv(P012); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N001); - glVertex3fv(P001); - glNormal3fv(N016); - glVertex3fv(P016); - glNormal3fv(N015); - glVertex3fv(P015); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N001); - glVertex3fv(P001); - glNormal3fv(N014); - glVertex3fv(P014); - glNormal3fv(N013); - glVertex3fv(P013); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N001); - glVertex3fv(P001); - glNormal3fv(N015); - glVertex3fv(P015); - glNormal3fv(N014); - glVertex3fv(P014); - glEnd(); -} - -void -Whale004(void) -{ - glBegin(GL_POLYGON); - glNormal3fv(N014); - glVertex3fv(P014); - glNormal3fv(N015); - glVertex3fv(P015); - glNormal3fv(N023); - glVertex3fv(P023); - glNormal3fv(N022); - glVertex3fv(P022); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N015); - glVertex3fv(P015); - glNormal3fv(N016); - glVertex3fv(P016); - glNormal3fv(N024); - glVertex3fv(P024); - glNormal3fv(N023); - glVertex3fv(P023); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N016); - glVertex3fv(P016); - glNormal3fv(N017); - glVertex3fv(P017); - glNormal3fv(N025); - glVertex3fv(P025); - glNormal3fv(N024); - glVertex3fv(P024); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N017); - glVertex3fv(P017); - glNormal3fv(N018); - glVertex3fv(P018); - glNormal3fv(N026); - glVertex3fv(P026); - glNormal3fv(N025); - glVertex3fv(P025); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N013); - glVertex3fv(P013); - glNormal3fv(N014); - glVertex3fv(P014); - glNormal3fv(N022); - glVertex3fv(P022); - glNormal3fv(N021); - glVertex3fv(P021); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N012); - glVertex3fv(P012); - glNormal3fv(N013); - glVertex3fv(P013); - glNormal3fv(N021); - glVertex3fv(P021); - glNormal3fv(N020); - glVertex3fv(P020); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N018); - glVertex3fv(P018); - glNormal3fv(N019); - glVertex3fv(P019); - glNormal3fv(N027); - glVertex3fv(P027); - glNormal3fv(N026); - glVertex3fv(P026); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N019); - glVertex3fv(P019); - glNormal3fv(N012); - glVertex3fv(P012); - glNormal3fv(N020); - glVertex3fv(P020); - glNormal3fv(N027); - glVertex3fv(P027); - glEnd(); -} - -void -Whale005(void) -{ - glBegin(GL_POLYGON); - glNormal3fv(N022); - glVertex3fv(P022); - glNormal3fv(N023); - glVertex3fv(P023); - glNormal3fv(N031); - glVertex3fv(P031); - glNormal3fv(N030); - glVertex3fv(P030); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N021); - glVertex3fv(P021); - glNormal3fv(N022); - glVertex3fv(P022); - glNormal3fv(N030); - glVertex3fv(P030); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N021); - glVertex3fv(P021); - glNormal3fv(N030); - glVertex3fv(P030); - glNormal3fv(N029); - glVertex3fv(P029); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N023); - glVertex3fv(P023); - glNormal3fv(N024); - glVertex3fv(P024); - glNormal3fv(N031); - glVertex3fv(P031); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N024); - glVertex3fv(P024); - glNormal3fv(N032); - glVertex3fv(P032); - glNormal3fv(N031); - glVertex3fv(P031); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N024); - glVertex3fv(P024); - glNormal3fv(N025); - glVertex3fv(P025); - glNormal3fv(N032); - glVertex3fv(P032); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N025); - glVertex3fv(P025); - glNormal3fv(N033); - glVertex3fv(P033); - glNormal3fv(N032); - glVertex3fv(P032); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N020); - glVertex3fv(P020); - glNormal3fv(N021); - glVertex3fv(P021); - glNormal3fv(N029); - glVertex3fv(P029); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N020); - glVertex3fv(P020); - glNormal3fv(N029); - glVertex3fv(P029); - glNormal3fv(N028); - glVertex3fv(P028); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N027); - glVertex3fv(P027); - glNormal3fv(N020); - glVertex3fv(P020); - glNormal3fv(N028); - glVertex3fv(P028); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N027); - glVertex3fv(P027); - glNormal3fv(N028); - glVertex3fv(P028); - glNormal3fv(N035); - glVertex3fv(P035); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N025); - glVertex3fv(P025); - glNormal3fv(N026); - glVertex3fv(P026); - glNormal3fv(N033); - glVertex3fv(P033); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N033); - glVertex3fv(P033); - glNormal3fv(N026); - glVertex3fv(P026); - glNormal3fv(N034); - glVertex3fv(P034); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N026); - glVertex3fv(P026); - glNormal3fv(N027); - glVertex3fv(P027); - glNormal3fv(N035); - glVertex3fv(P035); - glNormal3fv(N034); - glVertex3fv(P034); - glEnd(); -} - -void -Whale006(void) -{ - glBegin(GL_POLYGON); - glNormal3fv(N092); - glVertex3fv(P092); - glNormal3fv(N093); - glVertex3fv(P093); - glNormal3fv(N094); - glVertex3fv(P094); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N093); - glVertex3fv(P093); - glNormal3fv(N092); - glVertex3fv(P092); - glNormal3fv(N094); - glVertex3fv(P094); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N092); - glVertex3fv(P092); - glNormal3fv(N091); - glVertex3fv(P091); - glNormal3fv(N095); - glVertex3fv(P095); - glNormal3fv(N094); - glVertex3fv(P094); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N091); - glVertex3fv(P091); - glNormal3fv(N092); - glVertex3fv(P092); - glNormal3fv(N094); - glVertex3fv(P094); - glNormal3fv(N095); - glVertex3fv(P095); - glEnd(); -} - -void -Whale007(void) -{ - glBegin(GL_POLYGON); - glNormal3fv(N030); - glVertex3fv(P030); - glNormal3fv(N031); - glVertex3fv(P031); - glNormal3fv(N039); - glVertex3fv(P039); - glNormal3fv(N038); - glVertex3fv(P038); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N029); - glVertex3fv(P029); - glNormal3fv(N030); - glVertex3fv(P030); - glNormal3fv(N038); - glVertex3fv(P038); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N029); - glVertex3fv(P029); - glNormal3fv(N038); - glVertex3fv(P038); - glNormal3fv(N037); - glVertex3fv(P037); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N028); - glVertex3fv(P028); - glNormal3fv(N029); - glVertex3fv(P029); - glNormal3fv(N037); - glVertex3fv(P037); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N028); - glVertex3fv(P028); - glNormal3fv(N037); - glVertex3fv(P037); - glNormal3fv(N036); - glVertex3fv(P036); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N035); - glVertex3fv(P035); - glNormal3fv(N028); - glVertex3fv(P028); - glNormal3fv(N036); - glVertex3fv(P036); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N035); - glVertex3fv(P035); - glNormal3fv(N036); - glVertex3fv(P036); - glNormal3fv(N043); - glVertex3fv(P043); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N034); - glVertex3fv(P034); - glNormal3fv(N035); - glVertex3fv(P035); - glNormal3fv(N043); - glVertex3fv(P043); - glNormal3fv(N042); - glVertex3fv(P042); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N033); - glVertex3fv(P033); - glNormal3fv(N034); - glVertex3fv(P034); - glNormal3fv(N042); - glVertex3fv(P042); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N033); - glVertex3fv(P033); - glNormal3fv(N042); - glVertex3fv(P042); - glNormal3fv(N041); - glVertex3fv(P041); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N031); - glVertex3fv(P031); - glNormal3fv(N032); - glVertex3fv(P032); - glNormal3fv(N039); - glVertex3fv(P039); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N039); - glVertex3fv(P039); - glNormal3fv(N032); - glVertex3fv(P032); - glNormal3fv(N040); - glVertex3fv(P040); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N032); - glVertex3fv(P032); - glNormal3fv(N033); - glVertex3fv(P033); - glNormal3fv(N040); - glVertex3fv(P040); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N040); - glVertex3fv(P040); - glNormal3fv(N033); - glVertex3fv(P033); - glNormal3fv(N041); - glVertex3fv(P041); - glEnd(); -} - -void -Whale008(void) -{ - glBegin(GL_POLYGON); - glNormal3fv(N042); - glVertex3fv(P042); - glNormal3fv(N043); - glVertex3fv(P043); - glNormal3fv(N051); - glVertex3fv(P051); - glNormal3fv(N050); - glVertex3fv(P050); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N043); - glVertex3fv(P043); - glNormal3fv(N036); - glVertex3fv(P036); - glNormal3fv(N051); - glVertex3fv(P051); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N051); - glVertex3fv(P051); - glNormal3fv(N036); - glVertex3fv(P036); - glNormal3fv(N044); - glVertex3fv(P044); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N041); - glVertex3fv(P041); - glNormal3fv(N042); - glVertex3fv(P042); - glNormal3fv(N050); - glVertex3fv(P050); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N041); - glVertex3fv(P041); - glNormal3fv(N050); - glVertex3fv(P050); - glNormal3fv(N049); - glVertex3fv(P049); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N036); - glVertex3fv(P036); - glNormal3fv(N037); - glVertex3fv(P037); - glNormal3fv(N044); - glVertex3fv(P044); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N044); - glVertex3fv(P044); - glNormal3fv(N037); - glVertex3fv(P037); - glNormal3fv(N045); - glVertex3fv(P045); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N040); - glVertex3fv(P040); - glNormal3fv(N041); - glVertex3fv(P041); - glNormal3fv(N049); - glVertex3fv(P049); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N040); - glVertex3fv(P040); - glNormal3fv(N049); - glVertex3fv(P049); - glNormal3fv(N048); - glVertex3fv(P048); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N039); - glVertex3fv(P039); - glNormal3fv(N040); - glVertex3fv(P040); - glNormal3fv(N048); - glVertex3fv(P048); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N039); - glVertex3fv(P039); - glNormal3fv(N048); - glVertex3fv(P048); - glNormal3fv(N047); - glVertex3fv(P047); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N037); - glVertex3fv(P037); - glNormal3fv(N038); - glVertex3fv(P038); - glNormal3fv(N045); - glVertex3fv(P045); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N038); - glVertex3fv(P038); - glNormal3fv(N046); - glVertex3fv(P046); - glNormal3fv(N045); - glVertex3fv(P045); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N038); - glVertex3fv(P038); - glNormal3fv(N039); - glVertex3fv(P039); - glNormal3fv(N047); - glVertex3fv(P047); - glNormal3fv(N046); - glVertex3fv(P046); - glEnd(); -} - -void -Whale009(void) -{ - glBegin(GL_POLYGON); - glNormal3fv(N050); - glVertex3fv(P050); - glNormal3fv(N051); - glVertex3fv(P051); - glNormal3fv(N059); - glVertex3fv(P059); - glNormal3fv(N058); - glVertex3fv(P058); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N051); - glVertex3fv(P051); - glNormal3fv(N044); - glVertex3fv(P044); - glNormal3fv(N059); - glVertex3fv(P059); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N059); - glVertex3fv(P059); - glNormal3fv(N044); - glVertex3fv(P044); - glNormal3fv(N052); - glVertex3fv(P052); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N044); - glVertex3fv(P044); - glNormal3fv(N045); - glVertex3fv(P045); - glNormal3fv(N053); - glVertex3fv(P053); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N044); - glVertex3fv(P044); - glNormal3fv(N053); - glVertex3fv(P053); - glNormal3fv(N052); - glVertex3fv(P052); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N049); - glVertex3fv(P049); - glNormal3fv(N050); - glVertex3fv(P050); - glNormal3fv(N058); - glVertex3fv(P058); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N049); - glVertex3fv(P049); - glNormal3fv(N058); - glVertex3fv(P058); - glNormal3fv(N057); - glVertex3fv(P057); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N048); - glVertex3fv(P048); - glNormal3fv(N049); - glVertex3fv(P049); - glNormal3fv(N057); - glVertex3fv(P057); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N048); - glVertex3fv(P048); - glNormal3fv(N057); - glVertex3fv(P057); - glNormal3fv(N056); - glVertex3fv(P056); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N047); - glVertex3fv(P047); - glNormal3fv(N048); - glVertex3fv(P048); - glNormal3fv(N056); - glVertex3fv(P056); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N047); - glVertex3fv(P047); - glNormal3fv(N056); - glVertex3fv(P056); - glNormal3fv(N055); - glVertex3fv(P055); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N045); - glVertex3fv(P045); - glNormal3fv(N046); - glVertex3fv(P046); - glNormal3fv(N053); - glVertex3fv(P053); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N046); - glVertex3fv(P046); - glNormal3fv(N054); - glVertex3fv(P054); - glNormal3fv(N053); - glVertex3fv(P053); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N046); - glVertex3fv(P046); - glNormal3fv(N047); - glVertex3fv(P047); - glNormal3fv(N055); - glVertex3fv(P055); - glNormal3fv(N054); - glVertex3fv(P054); - glEnd(); -} - -void -Whale010(void) -{ - glBegin(GL_POLYGON); - glNormal3fv(N080); - glVertex3fv(P080); - glNormal3fv(N081); - glVertex3fv(P081); - glNormal3fv(N085); - glVertex3fv(P085); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N081); - glVertex3fv(P081); - glNormal3fv(N083); - glVertex3fv(P083); - glNormal3fv(N085); - glVertex3fv(P085); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N085); - glVertex3fv(P085); - glNormal3fv(N083); - glVertex3fv(P083); - glNormal3fv(N077); - glVertex3fv(P077); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N083); - glVertex3fv(P083); - glNormal3fv(N087); - glVertex3fv(P087); - glNormal3fv(N077); - glVertex3fv(P077); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N077); - glVertex3fv(P077); - glNormal3fv(N087); - glVertex3fv(P087); - glNormal3fv(N090); - glVertex3fv(P090); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N081); - glVertex3fv(P081); - glNormal3fv(N080); - glVertex3fv(P080); - glNormal3fv(N085); - glVertex3fv(P085); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N083); - glVertex3fv(P083); - glNormal3fv(N081); - glVertex3fv(P081); - glNormal3fv(N085); - glVertex3fv(P085); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N083); - glVertex3fv(P083); - glNormal3fv(N085); - glVertex3fv(P085); - glNormal3fv(N077); - glVertex3fv(P077); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N087); - glVertex3fv(P087); - glNormal3fv(N083); - glVertex3fv(P083); - glNormal3fv(N077); - glVertex3fv(P077); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N087); - glVertex3fv(P087); - glNormal3fv(N077); - glVertex3fv(P077); - glNormal3fv(N090); - glVertex3fv(P090); - glEnd(); -} - -void -Whale011(void) -{ - glBegin(GL_POLYGON); - glNormal3fv(N082); - glVertex3fv(P082); - glNormal3fv(N084); - glVertex3fv(P084); - glNormal3fv(N079); - glVertex3fv(P079); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N084); - glVertex3fv(P084); - glNormal3fv(N086); - glVertex3fv(P086); - glNormal3fv(N079); - glVertex3fv(P079); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N079); - glVertex3fv(P079); - glNormal3fv(N086); - glVertex3fv(P086); - glNormal3fv(N078); - glVertex3fv(P078); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N086); - glVertex3fv(P086); - glNormal3fv(N088); - glVertex3fv(P088); - glNormal3fv(N078); - glVertex3fv(P078); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N078); - glVertex3fv(P078); - glNormal3fv(N088); - glVertex3fv(P088); - glNormal3fv(N089); - glVertex3fv(P089); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N088); - glVertex3fv(P088); - glNormal3fv(N086); - glVertex3fv(P086); - glNormal3fv(N089); - glVertex3fv(P089); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N089); - glVertex3fv(P089); - glNormal3fv(N086); - glVertex3fv(P086); - glNormal3fv(N078); - glVertex3fv(P078); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N086); - glVertex3fv(P086); - glNormal3fv(N084); - glVertex3fv(P084); - glNormal3fv(N078); - glVertex3fv(P078); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N078); - glVertex3fv(P078); - glNormal3fv(N084); - glVertex3fv(P084); - glNormal3fv(N079); - glVertex3fv(P079); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N084); - glVertex3fv(P084); - glNormal3fv(N082); - glVertex3fv(P082); - glNormal3fv(N079); - glVertex3fv(P079); - glEnd(); -} - -void -Whale012(void) -{ - glBegin(GL_POLYGON); - glNormal3fv(N058); - glVertex3fv(P058); - glNormal3fv(N059); - glVertex3fv(P059); - glNormal3fv(N067); - glVertex3fv(P067); - glNormal3fv(N066); - glVertex3fv(P066); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N059); - glVertex3fv(P059); - glNormal3fv(N052); - glVertex3fv(P052); - glNormal3fv(N060); - glVertex3fv(P060); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N059); - glVertex3fv(P059); - glNormal3fv(N060); - glVertex3fv(P060); - glNormal3fv(N067); - glVertex3fv(P067); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N058); - glVertex3fv(P058); - glNormal3fv(N066); - glVertex3fv(P066); - glNormal3fv(N065); - glVertex3fv(P065); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N058); - glVertex3fv(P058); - glNormal3fv(N065); - glVertex3fv(P065); - glNormal3fv(N057); - glVertex3fv(P057); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N056); - glVertex3fv(P056); - glNormal3fv(N057); - glVertex3fv(P057); - glNormal3fv(N065); - glVertex3fv(P065); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N056); - glVertex3fv(P056); - glNormal3fv(N065); - glVertex3fv(P065); - glNormal3fv(N006); - glVertex3fv(P006); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N056); - glVertex3fv(P056); - glNormal3fv(N006); - glVertex3fv(P006); - glNormal3fv(N063); - glVertex3fv(P063); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N056); - glVertex3fv(P056); - glNormal3fv(N063); - glVertex3fv(P063); - glNormal3fv(N055); - glVertex3fv(P055); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N054); - glVertex3fv(P054); - glNormal3fv(N062); - glVertex3fv(P062); - glNormal3fv(N005); - glVertex3fv(P005); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N054); - glVertex3fv(P054); - glNormal3fv(N005); - glVertex3fv(P005); - glNormal3fv(N053); - glVertex3fv(P053); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N053); - glVertex3fv(P053); - glNormal3fv(N005); - glVertex3fv(P005); - glNormal3fv(N060); - glVertex3fv(P060); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N053); - glVertex3fv(P053); - glNormal3fv(N060); - glVertex3fv(P060); - glNormal3fv(N052); - glVertex3fv(P052); - glEnd(); -} - -void -Whale013(void) -{ - glBegin(GL_POLYGON); - glNormal3fv(N066); - glVertex3fv(P066); - glNormal3fv(N067); - glVertex3fv(P067); - glNormal3fv(N096); - glVertex3fv(P096); - glNormal3fv(N097); - glVertex3fv(P097); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N097); - glVertex3fv(P097); - glNormal3fv(N096); - glVertex3fv(P096); - glNormal3fv(N098); - glVertex3fv(P098); - glNormal3fv(N099); - glVertex3fv(P099); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N065); - glVertex3fv(P065); - glNormal3fv(N066); - glVertex3fv(P066); - glNormal3fv(N097); - glVertex3fv(P097); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N067); - glVertex3fv(P067); - glNormal3fv(N060); - glVertex3fv(P060); - glNormal3fv(N096); - glVertex3fv(P096); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N060); - glVertex3fv(P060); - glNormal3fv(N005); - glVertex3fv(P005); - glNormal3fv(N096); - glVertex3fv(P096); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N096); - glVertex3fv(P096); - glNormal3fv(N005); - glVertex3fv(P005); - glNormal3fv(N098); - glVertex3fv(P098); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N006); - glVertex3fv(P006); - glNormal3fv(N065); - glVertex3fv(P065); - glNormal3fv(N097); - glVertex3fv(P097); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N006); - glVertex3fv(P006); - glNormal3fv(N097); - glVertex3fv(P097); - glNormal3fv(N099); - glVertex3fv(P099); - glEnd(); - glBegin(GL_POLYGON); - glVertex3fv(P005); - glVertex3fv(P006); - glVertex3fv(P099); - glVertex3fv(P098); - glEnd(); -} - -void -Whale014(void) -{ - glBegin(GL_POLYGON); - glNormal3fv(N062); - glVertex3fv(P062); - glNormal3fv(N004); - glVertex3fv(P004); - glNormal3fv(N005); - glVertex3fv(P005); - glEnd(); - glBegin(GL_POLYGON); - glVertex3fv(P006); - glVertex3fv(P005); - glVertex3fv(P004); - glVertex3fv(P008); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N063); - glVertex3fv(P063); - glNormal3fv(N006); - glVertex3fv(P006); - glNormal3fv(N002); - glVertex3fv(P002); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N002); - glVertex3fv(P002); - glNormal3fv(N006); - glVertex3fv(P006); - glNormal3fv(N008); - glVertex3fv(P008); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N002); - glVertex3fv(P002); - glNormal3fv(N008); - glVertex3fv(P008); - glNormal3fv(N004); - glVertex3fv(P004); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N062); - glVertex3fv(P062); - glNormal3fv(N002); - glVertex3fv(P002); - glNormal3fv(N004); - glVertex3fv(P004); - glEnd(); -} - -void -Whale015(void) -{ - glBegin(GL_POLYGON); - glNormal3fv(N055); - glVertex3fv(P055); - glNormal3fv(N003); - glVertex3fv(P003); - glNormal3fv(N054); - glVertex3fv(P054); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N003); - glVertex3fv(P003); - glNormal3fv(N055); - glVertex3fv(P055); - glNormal3fv(N063); - glVertex3fv(P063); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N003); - glVertex3fv(P003); - glNormal3fv(N063); - glVertex3fv(P063); - glNormal3fv(N100); - glVertex3fv(P100); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N003); - glVertex3fv(P003); - glNormal3fv(N100); - glVertex3fv(P100); - glNormal3fv(N054); - glVertex3fv(P054); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N054); - glVertex3fv(P054); - glNormal3fv(N100); - glVertex3fv(P100); - glNormal3fv(N062); - glVertex3fv(P062); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N100); - glVertex3fv(P100); - glNormal3fv(N063); - glVertex3fv(P063); - glNormal3fv(N002); - glVertex3fv(P002); - glEnd(); - glBegin(GL_POLYGON); - glNormal3fv(N100); - glVertex3fv(P100); - glNormal3fv(N002); - glVertex3fv(P002); - glNormal3fv(N062); - glVertex3fv(P062); - glEnd(); -} - -void -Whale016(void) -{ - glBegin(GL_POLYGON); - glVertex3fv(P104); - glVertex3fv(P105); - glVertex3fv(P106); - glEnd(); - glBegin(GL_POLYGON); - glVertex3fv(P107); - glVertex3fv(P108); - glVertex3fv(P109); - glEnd(); - glBegin(GL_POLYGON); - glVertex3fv(P110); - glVertex3fv(P111); - glVertex3fv(P112); - glVertex3fv(P113); - glVertex3fv(P114); - glVertex3fv(P115); - glEnd(); - glBegin(GL_POLYGON); - glVertex3fv(P116); - glVertex3fv(P117); - glVertex3fv(P118); - glVertex3fv(P119); - glVertex3fv(P120); - glVertex3fv(P121); - glEnd(); -} - -void -DrawWhale(fishRec * fish) -{ - float seg0, seg1, seg2, seg3, seg4, seg5, seg6, seg7; - float pitch, thrash, chomp; - - fish->htail = (int) (fish->htail - (int) (5.0 * fish->v)) % 360; - - thrash = 70.0 * fish->v; - - seg0 = 1.5 * thrash * sin((fish->htail) * RRAD); - seg1 = 2.5 * thrash * sin((fish->htail + 10.0) * RRAD); - seg2 = 3.7 * thrash * sin((fish->htail + 15.0) * RRAD); - seg3 = 4.8 * thrash * sin((fish->htail + 23.0) * RRAD); - seg4 = 6.0 * thrash * sin((fish->htail + 28.0) * RRAD); - seg5 = 6.5 * thrash * sin((fish->htail + 35.0) * RRAD); - seg6 = 6.5 * thrash * sin((fish->htail + 40.0) * RRAD); - seg7 = 6.5 * thrash * sin((fish->htail + 55.0) * RRAD); - - pitch = fish->v * sin((fish->htail - 160.0) * RRAD); - - chomp = 0.0; - if (fish->v > 2.0) { - chomp = -(fish->v - 2.0) * 200.0; - } - P012[1] = iP012[1] + seg5; - P013[1] = iP013[1] + seg5; - P014[1] = iP014[1] + seg5; - P015[1] = iP015[1] + seg5; - P016[1] = iP016[1] + seg5; - P017[1] = iP017[1] + seg5; - P018[1] = iP018[1] + seg5; - P019[1] = iP019[1] + seg5; - - P020[1] = iP020[1] + seg4; - P021[1] = iP021[1] + seg4; - P022[1] = iP022[1] + seg4; - P023[1] = iP023[1] + seg4; - P024[1] = iP024[1] + seg4; - P025[1] = iP025[1] + seg4; - P026[1] = iP026[1] + seg4; - P027[1] = iP027[1] + seg4; - - P028[1] = iP028[1] + seg2; - P029[1] = iP029[1] + seg2; - P030[1] = iP030[1] + seg2; - P031[1] = iP031[1] + seg2; - P032[1] = iP032[1] + seg2; - P033[1] = iP033[1] + seg2; - P034[1] = iP034[1] + seg2; - P035[1] = iP035[1] + seg2; - - P036[1] = iP036[1] + seg1; - P037[1] = iP037[1] + seg1; - P038[1] = iP038[1] + seg1; - P039[1] = iP039[1] + seg1; - P040[1] = iP040[1] + seg1; - P041[1] = iP041[1] + seg1; - P042[1] = iP042[1] + seg1; - P043[1] = iP043[1] + seg1; - - P044[1] = iP044[1] + seg0; - P045[1] = iP045[1] + seg0; - P046[1] = iP046[1] + seg0; - P047[1] = iP047[1] + seg0; - P048[1] = iP048[1] + seg0; - P049[1] = iP049[1] + seg0; - P050[1] = iP050[1] + seg0; - P051[1] = iP051[1] + seg0; - - P009[1] = iP009[1] + seg6; - P010[1] = iP010[1] + seg6; - P075[1] = iP075[1] + seg6; - P076[1] = iP076[1] + seg6; - - P001[1] = iP001[1] + seg7; - P011[1] = iP011[1] + seg7; - P068[1] = iP068[1] + seg7; - P069[1] = iP069[1] + seg7; - P070[1] = iP070[1] + seg7; - P071[1] = iP071[1] + seg7; - P072[1] = iP072[1] + seg7; - P073[1] = iP073[1] + seg7; - P074[1] = iP074[1] + seg7; - - P091[1] = iP091[1] + seg3 * 1.1; - P092[1] = iP092[1] + seg3; - P093[1] = iP093[1] + seg3; - P094[1] = iP094[1] + seg3; - P095[1] = iP095[1] + seg3 * 0.9; - - P099[1] = iP099[1] + chomp; - P098[1] = iP098[1] + chomp; - P097[1] = iP097[1] + chomp; - P096[1] = iP096[1] + chomp; - - glPushMatrix(); - - glRotatef(pitch, 1.0, 0.0, 0.0); - - glTranslatef(0.0, 0.0, 8000.0); - - glRotatef(180.0, 0.0, 1.0, 0.0); - - glScalef(3.0, 3.0, 3.0); - - glEnable(GL_CULL_FACE); - - Whale001(); - Whale002(); - Whale003(); - Whale004(); - Whale005(); - Whale006(); - Whale007(); - Whale008(); - Whale009(); - Whale010(); - Whale011(); - Whale012(); - Whale013(); - Whale014(); - Whale015(); - Whale016(); - - glDisable(GL_CULL_FACE); - - glPopMatrix(); -} diff --git a/lib/glut-3.7.6/progs/demos/bluepony/Imakefile b/lib/glut-3.7.6/progs/demos/bluepony/Imakefile deleted file mode 100644 index 51c04fa63..000000000 --- a/lib/glut-3.7.6/progs/demos/bluepony/Imakefile +++ /dev/null @@ -1,16 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1997. */ - -#include "../../../Glut.cf" - -TARGETS = bluepony - -SRCS = bluepony.c readtex.c - -OBJS = bluepony.o readtex.o - -AllTarget($(TARGETS)) - -NormalGlutProgramTarget(bluepony,$(OBJS)) - -DependTarget() diff --git a/lib/glut-3.7.6/progs/demos/bluepony/bluepony.c b/lib/glut-3.7.6/progs/demos/bluepony/bluepony.c deleted file mode 100644 index 6c692e8a8..000000000 --- a/lib/glut-3.7.6/progs/demos/bluepony/bluepony.c +++ /dev/null @@ -1,507 +0,0 @@ -/* pony.c */ - -/* - * By Brian Paul, written July 31, 1997 for Mark. - */ - -#include -#include -#include -#include -#include -#include "readtex.h" - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -/************************ Pony-specific code *********************************/ - -static float BodyDepth = 0.216; - -static GLfloat BodyVerts[][2] = -{ - {-0.993334, 0.344444}, - {-0.72, 0.462964}, - {-0.58, -0.411113}, - {-0.406667, -0.692593}, - {0.733334, -0.633334}, - {0.846666, -0.225926}, - {0.873335, -0.55926}, - {0.879998, -0.988888}, - {0.933332, -0.974074}, - {0.953334, -0.537037}, - {0.906667, -0.0777776}, - {0.806666, 0.0333334}, - {-0.26, 0.0111111}, - {-0.406667, 0.27037}, - {-0.54, 0.781481}, - {-0.673333, 1.00371}, - {-0.653332, 0.803704}, - {-1.05333, 0.44815} -}; - -static float LegDepth = 0.144; - -static float FrontLegPos[3] = -{-0.36, -0.324, 0.108}; -static GLfloat FrontLegVerts[][2] = -{ - {-0.23, -0.113481}, - {-0.123333, -0.528296}, - {-0.0926752, -0.728103}, - {-0.0766667, -1.232}, - {0.0233333, -1.232}, - {0.0433332, -0.743111}, - {0.0366667, -0.424593}, - {0.0699998, -0.157926}, - {0.116667, 0.049482}, - {-0.0166667, 0.197629}, - {-0.196667, 0.13837} -}; - -static float BackLegPos[3] = -{0.684, -0.324, 0.108}; -static GLfloat BackLegVerts[][2] = -{ - {-0.24, -0.195556}, - {-0.0933332, -0.41037}, - {-0.04, -0.684445}, - {-0.113333, -1.26222}, - {0, -1.26222}, - {0.1, -0.677037}, - {0.213333, -0.121482}, - {0.153333, 0.108148}, - {-0.0533333, 0.211853}, - {-0.26, 0.063702} -}; - -static float ManeDepth = 0.288; -static GLfloat ManeVerts[][2] = -{ - {-0.512667, 0.578519}, - {-0.419333, 0.267407}, - {-0.299333, -0.00666719}, - {-0.239333, -0.0140724}, - {-0.226, 0.0896296}, - {-0.319333, 0.422963}, - {-0.532667, 0.741481} -}; - -static float EyePos[3] = -{-0.702, 0.648, 0.1116}; -static float EyeSize = 0.025; - -/* Display lists */ -static GLuint Body = 0, FrontLeg = 0, BackLeg = 0, Mane = 0; - -/* Generate an extruded, capped part from a 2-D polyline. */ -static void -ExtrudePart(int n, GLfloat v[][2], float depth) -{ - static GLUtriangulatorObj *tobj = NULL; - int i; - float z0 = 0.5 * depth; - float z1 = -0.5 * depth; - GLdouble vertex[3]; - - if (tobj == NULL) { - tobj = gluNewTess(); /* create and initialize a GLU polygon * * - tesselation object */ - gluTessCallback(tobj, GLU_BEGIN, glBegin); - gluTessCallback(tobj, GLU_VERTEX, glVertex2fv); /* semi-tricky */ - gluTessCallback(tobj, GLU_END, glEnd); - } - /* +Z face */ - glPushMatrix(); - glTranslatef(0.0, 0.0, z0); - glNormal3f(0.0, 0.0, 1.0); - gluBeginPolygon(tobj); - for (i = 0; i < n; i++) { - vertex[0] = v[i][0]; - vertex[1] = v[i][1]; - vertex[2] = 0.0; - gluTessVertex(tobj, vertex, v[i]); - } - gluEndPolygon(tobj); - glPopMatrix(); - - /* -Z face */ - glFrontFace(GL_CW); - glPushMatrix(); - glTranslatef(0.0, 0.0, z1); - glNormal3f(0.0, 0.0, -1.0); - gluBeginPolygon(tobj); - for (i = 0; i < n; i++) { - vertex[0] = v[i][0]; - vertex[1] = v[i][1]; - vertex[2] = z1; - gluTessVertex(tobj, vertex, v[i]); - } - gluEndPolygon(tobj); - glPopMatrix(); - - glFrontFace(GL_CCW); - /* edge polygons */ - glBegin(GL_TRIANGLE_STRIP); - for (i = 0; i <= n; i++) { - float x = v[i % n][0]; - float y = v[i % n][1]; - float dx = v[(i + 1) % n][0] - x; - float dy = v[(i + 1) % n][1] - y; - glVertex3f(x, y, z0); - glVertex3f(x, y, z1); - glNormal3f(dy, -dx, 0.0); - } - glEnd(); - -} - -/* - * Build the four display lists which make up the pony. - */ -static void -MakePony(void) -{ - static GLfloat blue[4] = - {0.1, 0.1, 1.0, 1.0}; - static GLfloat black[4] = - {0.0, 0.0, 0.0, 1.0}; - static GLfloat pink[4] = - {1.0, 0.5, 0.5, 1.0}; - - Body = glGenLists(1); - glNewList(Body, GL_COMPILE); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, blue); - ExtrudePart(sizeof(BodyVerts) / sizeof(GLfloat) / 2, BodyVerts, BodyDepth); - - /* eyes */ - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, black); - glNormal3f(0.0, 0.0, 1.0); - glBegin(GL_POLYGON); - glVertex3f(EyePos[0] - EyeSize, EyePos[1] - EyeSize, EyePos[2]); - glVertex3f(EyePos[0] + EyeSize, EyePos[1] - EyeSize, EyePos[2]); - glVertex3f(EyePos[0] + EyeSize, EyePos[1] + EyeSize, EyePos[2]); - glVertex3f(EyePos[0] - EyeSize, EyePos[1] + EyeSize, EyePos[2]); - glEnd(); - glNormal3f(0.0, 0.0, -1.0); - glBegin(GL_POLYGON); - glVertex3f(EyePos[0] - EyeSize, EyePos[1] + EyeSize, -EyePos[2]); - glVertex3f(EyePos[0] + EyeSize, EyePos[1] + EyeSize, -EyePos[2]); - glVertex3f(EyePos[0] + EyeSize, EyePos[1] - EyeSize, -EyePos[2]); - glVertex3f(EyePos[0] - EyeSize, EyePos[1] - EyeSize, -EyePos[2]); - glEnd(); - glEndList(); - - Mane = glGenLists(1); - glNewList(Mane, GL_COMPILE); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, pink); - ExtrudePart(sizeof(ManeVerts) / sizeof(GLfloat) / 2, ManeVerts, ManeDepth); - glEndList(); - - FrontLeg = glGenLists(1); - glNewList(FrontLeg, GL_COMPILE); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, blue); - ExtrudePart(sizeof(FrontLegVerts) / sizeof(GLfloat) / 2, - FrontLegVerts, LegDepth); - glEndList(); - - BackLeg = glGenLists(1); - glNewList(BackLeg, GL_COMPILE); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, blue); - ExtrudePart(sizeof(BackLegVerts) / sizeof(GLfloat) / 2, - BackLegVerts, LegDepth); - glEndList(); -} - -/* - * Draw the pony. legAngle should be in [-15,15] or so. - * The pony display lists will be constructed the first time this is called. - */ -static void -DrawPony(float legAngle) -{ - if (!Body) { - MakePony(); - } - assert(Body); - - /* BODY */ - glCallList(Body); - - /* MANE */ - glCallList(Mane); - - /* FRONT +Z LEG */ - glPushMatrix(); - glTranslatef(FrontLegPos[0], FrontLegPos[1], FrontLegPos[2]); - glRotatef(legAngle, 0.0, 0.0, 1.0); - glCallList(FrontLeg); - glPopMatrix(); - - /* FRONT -Z LEG */ - glPushMatrix(); - glTranslatef(FrontLegPos[0], FrontLegPos[1], -FrontLegPos[2]); - glRotatef(-legAngle, 0.0, 0.0, 1.0); - glCallList(FrontLeg); - glPopMatrix(); - - /* BACK +Z LEG */ - glPushMatrix(); - glTranslatef(BackLegPos[0], BackLegPos[1], BackLegPos[2]); - glRotatef(-legAngle, 0.0, 0.0, 1.0); - glCallList(BackLeg); - glPopMatrix(); - - /* BACK -Z LEG */ - glPushMatrix(); - glTranslatef(BackLegPos[0], BackLegPos[1], -BackLegPos[2]); - glRotatef(legAngle, 0.0, 0.0, 1.0); - glCallList(BackLeg); - glPopMatrix(); -} - -/************************* end of pony code **********************************/ - -static float Speed = 2.0; - -static float LegAngleStep = 0.75; -static float LegMaxAngle = 15.0; -static float LegAngle = 0.0, LegDeltaAngle = 0.5; - -static float WalkAngle = -90.0, DeltaWalkAngle = 0.225; -static float WalkRadius = 4.0; - -static float Xrot = 0, Yrot = 30.0; - -static GLboolean AnimFlag = GL_TRUE; - -static void -Idle(void) -{ - /* update animation vars */ - LegAngle += LegDeltaAngle * Speed; - if (LegAngle > LegMaxAngle) { - LegDeltaAngle = -LegAngleStep; - } else if (LegAngle < -LegMaxAngle) { - LegDeltaAngle = LegAngleStep; - } - WalkAngle += DeltaWalkAngle * Speed; - - glutPostRedisplay(); -} - -static void -DrawGround(void) -{ - static GLuint ground = 0; - - if (ground == 0) { - const int rows = 20, columns = 20; - float sizeA = 1.25, sizeB = 0.2; - float x, z; - int i, j; - GLfloat mat[2][4] = - { - {0.0, 0.6, 0.0, 1.0}, - {0.1, 0.8, 0.1, 1.0} - }; - - ground = glGenLists(1); - glNewList(ground, GL_COMPILE); - - glNormal3f(0.0, 1.0, 0.0); - - x = -(columns * (sizeA + sizeB)) / 4; - for (i = 0; i <= rows; i++) { - float size = (i & 1) ? sizeA : sizeB; - z = -(rows * (sizeA + sizeB)) / 4; - glBegin(GL_QUAD_STRIP); - for (j = 0; j <= columns; j++) { - /* glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, mat[(i+j)%2]); */ - glColor4fv(mat[(i + j) % 2]); - glVertex3f(x + size, 0.0, z); - glVertex3f(x, 0.0, z); - if (j & 1) - z += sizeA; - else - z += sizeB; - } - glEnd(); - x += size; - } - - glEndList(); - } - glCallList(ground); -} - -static void -DrawLogo(void) -{ - glEnable(GL_TEXTURE_2D); - glShadeModel(GL_SMOOTH); - glBegin(GL_POLYGON); - glColor3f(1, 0, 0); - glTexCoord2f(0, 0); - glVertex2f(-1.0, -0.5); - glColor3f(0, 1, 0); - glTexCoord2f(1, 0); - glVertex2f(1.0, -0.5); - glColor3f(0, 0, 1); - glTexCoord2f(1, 1); - glVertex2f(1.0, 0.5); - glColor3f(1, 1, 0); - glTexCoord2f(0, 1); - glVertex2f(-1.0, 0.5); - glEnd(); - glDisable(GL_TEXTURE_2D); - glShadeModel(GL_FLAT); -} - -static void -Display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - /* viewing */ - glPushMatrix(); - glRotatef(Xrot, 1.0, 0.0, 0.0); - glRotatef(Yrot, 0.0, 1.0, 0.0); - - /* ground */ - glDisable(GL_LIGHTING); - glPushMatrix(); - glTranslatef(0.0, -1.6, 0.0); - DrawGround(); - glPopMatrix(); - - /* logo */ - glPushMatrix(); - glScalef(2.5, 2.5, 2.5); - DrawLogo(); - glPopMatrix(); - - /* pony */ - { - float xPos, zPos; - xPos = WalkRadius * cos(WalkAngle * M_PI / 180.0); - zPos = WalkRadius * sin(WalkAngle * M_PI / 180.0); - glEnable(GL_LIGHTING); - glPushMatrix(); - glTranslatef(xPos, 0.0, zPos); - glRotatef(-WalkAngle + 90.0, 0.0, 1.0, 0.0); - DrawPony(LegAngle); - glPopMatrix(); - } - - glPopMatrix(); - glutSwapBuffers(); -} - -static void -Reshape(int width, int height) -{ - float ar; - glViewport(0, 0, width, height); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - ar = (float) width / (float) height; - glFrustum(-ar, ar, -1.0, 1.0, 2.0, 100.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(0.0, 0.0, -23.0 / 2.5); -} - -/* ARGSUSED1 */ -static void -Key(unsigned char key, int x, int y) -{ - switch (key) { - case 27: - exit(0); - break; - case ' ': - AnimFlag = !AnimFlag; - if (AnimFlag) { - glutIdleFunc(Idle); - } else { - glutIdleFunc(NULL); - } - break; - } - glutPostRedisplay(); -} - -/* ARGSUSED1 */ -static void -SpecialKey(int key, int x, int y) -{ - float step = 2.0; - switch (key) { - case GLUT_KEY_UP: - Xrot += step; - break; - case GLUT_KEY_DOWN: - Xrot -= step; - break; - case GLUT_KEY_LEFT: - Yrot -= step; - break; - case GLUT_KEY_RIGHT: - Yrot += step; - break; - } - glutPostRedisplay(); -} - -static void -Init(void) -{ - GLfloat lightPos[4] = - {1.0, 10.0, 10.0, 0.0}; - glClearColor(0.5, 0.8, 0.99, 1.0); - glEnable(GL_DEPTH_TEST); - glEnable(GL_NORMALIZE); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glLightfv(GL_LIGHT0, GL_POSITION, lightPos); - glShadeModel(GL_FLAT); - - LoadRGBMipmaps("logo.bw", 1); -} - -static void -vis(int visible) -{ - if (visible == GLUT_VISIBLE) { - if (AnimFlag) - glutIdleFunc(Idle); - } else { - if (AnimFlag) - glutIdleFunc(NULL); - } -} - -int -main(int argc, char *argv[]) -{ - glutInit(&argc, argv); - glutInitWindowSize(640, 480); - - glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); - - glutCreateWindow("Blue Pony"); - - Init(); - - glutReshapeFunc(Reshape); - glutKeyboardFunc(Key); - glutSpecialFunc(SpecialKey); - glutDisplayFunc(Display); - glutVisibilityFunc(vis); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/demos/bluepony/bluepony.dsp b/lib/glut-3.7.6/progs/demos/bluepony/bluepony.dsp deleted file mode 100644 index 74d5f0c96..000000000 --- a/lib/glut-3.7.6/progs/demos/bluepony/bluepony.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="bluepony" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=bluepony - 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 "bluepony.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 "bluepony.mak" CFG="bluepony - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "bluepony - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "bluepony - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "bluepony - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "bluepony - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "bluepony - Win32 Release" -# Name "bluepony - Win32 Debug" -# Begin Source File - -SOURCE=.\bluepony.c -# End Source File -# Begin Source File - -SOURCE=.\readtex.c -# End Source File -# Begin Source File - -SOURCE=.\readtex.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/demos/bluepony/logo.bw b/lib/glut-3.7.6/progs/demos/bluepony/logo.bw deleted file mode 100644 index e7d1fd13e27781e4efe02a20f0d37244d4b1bee8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16401 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 b*|OuOEnH@?6{$nm3WHeuoBIfdyY0ULUIA(I diff --git a/lib/glut-3.7.6/progs/demos/bluepony/readtex.c b/lib/glut-3.7.6/progs/demos/bluepony/readtex.c deleted file mode 100644 index 2898538c1..000000000 --- a/lib/glut-3.7.6/progs/demos/bluepony/readtex.c +++ /dev/null @@ -1,307 +0,0 @@ -/* readtex.c */ - -/* - * Read an SGI .rgb image file and generate a mipmap texture set. - * Much of this code was borrowed from SGI's tk OpenGL toolkit. - */ - -#include -#include -#include -#include - -#include "readtex.h" - -#ifndef SEEK_SET -#define SEEK_SET 0 -#endif - -/* RGB Image Structure */ - -typedef struct _TK_RGBImageRec { - GLint sizeX, sizeY; - GLint components; - unsigned char *data; -} TK_RGBImageRec; - -/******************************************************************************/ - -typedef struct _rawImageRec { - unsigned short imagic; - unsigned short type; - unsigned short dim; - unsigned short sizeX, sizeY, sizeZ; - unsigned long min, max; - unsigned long wasteBytes; - char name[80]; - unsigned long colorMap; - FILE *file; - unsigned char *tmp, *tmpR, *tmpG, *tmpB, *tmpA; - unsigned long rleEnd; - GLuint *rowStart; - GLint *rowSize; -} rawImageRec; - -/******************************************************************************/ - -static void -ConvertShort(unsigned short *array, size_t length) -{ - unsigned short b1, b2; - unsigned char *ptr; - - ptr = (unsigned char *) array; - while (length--) { - b1 = *ptr++; - b2 = *ptr++; - *array++ = (b1 << 8) | (b2); - } -} - -static void -ConvertLong(GLuint * array, size_t length) -{ - unsigned long b1, b2, b3, b4; - unsigned char *ptr; - - ptr = (unsigned char *) array; - while (length--) { - b1 = *ptr++; - b2 = *ptr++; - b3 = *ptr++; - b4 = *ptr++; - *array++ = (b1 << 24) | (b2 << 16) | (b3 << 8) | (b4); - } -} - -static rawImageRec * -RawImageOpen(const char *fileName) -{ - union { - int testWord; - char testByte[4]; - } endianTest; - rawImageRec *raw; - GLenum swapFlag; - int x; - - endianTest.testWord = 1; - if (endianTest.testByte[0] == 1) { - swapFlag = GL_TRUE; - } else { - swapFlag = GL_FALSE; - } - - raw = (rawImageRec *) malloc(sizeof(rawImageRec)); - if (raw == NULL) { - fprintf(stderr, "Out of memory!\n"); - return NULL; - } - if ((raw->file = fopen(fileName, "rb")) == NULL) { - perror(fileName); - return NULL; - } - fread(raw, 1, 12, raw->file); - - if (swapFlag) { - ConvertShort(&raw->imagic, 6); - } - raw->tmp = (unsigned char *) malloc(raw->sizeX * 256); - if (raw->tmp == NULL) { - fprintf(stderr, "Out of memory!\n"); - return NULL; - } - raw->tmpR = (unsigned char *) malloc(raw->sizeX * 256); - if (raw->tmpR == NULL) { - fprintf(stderr, "Out of memory!\n"); - return NULL; - } - if (raw->sizeZ > 1) { - raw->tmpG = (unsigned char *) malloc(raw->sizeX * 256); - raw->tmpB = (unsigned char *) malloc(raw->sizeX * 256); - if (raw->tmpG == NULL || raw->tmpB == NULL) { - fprintf(stderr, "Out of memory!\n"); - return NULL; - } - if (raw->sizeZ == 4) { - raw->tmpA = (unsigned char *) malloc(raw->sizeX * 256); - if (raw->tmpA == NULL) { - fprintf(stderr, "Out of memory!\n"); - return NULL; - } - } - } - if ((raw->type & 0xFF00) == 0x0100) { - x = raw->sizeY * raw->sizeZ * sizeof(GLuint); - raw->rowStart = (GLuint *) malloc(x); - raw->rowSize = (GLint *) malloc(x); - if (raw->rowStart == NULL || raw->rowSize == NULL) { - fprintf(stderr, "Out of memory!\n"); - return NULL; - } - raw->rleEnd = 512 + (2 * x); - fseek(raw->file, 512, SEEK_SET); - fread(raw->rowStart, 1, x, raw->file); - fread(raw->rowSize, 1, x, raw->file); - if (swapFlag) { - ConvertLong(raw->rowStart, x / sizeof(GLuint)); - ConvertLong((GLuint *) raw->rowSize, x / sizeof(GLint)); - } - } - return raw; -} - -static void -RawImageClose(rawImageRec * raw) -{ - - fclose(raw->file); - free(raw->tmp); - free(raw->tmpR); - free(raw->tmpG); - free(raw->tmpB); - if (raw->sizeZ > 3) { - free(raw->tmpA); - } - free(raw); -} - -static void -RawImageGetRow(rawImageRec * raw, unsigned char *buf, int y, int z) -{ - unsigned char *iPtr, *oPtr, pixel; - int count; - - if ((raw->type & 0xFF00) == 0x0100) { - fseek(raw->file, (long) raw->rowStart[y + z * raw->sizeY], SEEK_SET); - fread(raw->tmp, 1, (size_t) raw->rowSize[y + z * raw->sizeY], - raw->file); - - iPtr = raw->tmp; - oPtr = buf; - for (;;) { - pixel = *iPtr++; - count = (int) (pixel & 0x7F); - if (!count) { - return; - } - if (pixel & 0x80) { - while (count--) { - *oPtr++ = *iPtr++; - } - } else { - pixel = *iPtr++; - while (count--) { - *oPtr++ = pixel; - } - } - } - } else { - fseek(raw->file, 512 + (y * raw->sizeX) + (z * raw->sizeX * raw->sizeY), - SEEK_SET); - fread(buf, 1, raw->sizeX, raw->file); - } -} - -static void -RawImageGetData(rawImageRec * raw, TK_RGBImageRec * final) -{ - unsigned char *ptr; - int i, j; - - final->data = (unsigned char *) malloc((raw->sizeX + 1) * (raw->sizeY + 1) * 4); - if (final->data == NULL) { - fprintf(stderr, "Out of memory!\n"); - } - ptr = final->data; - for (i = 0; i < (int) (raw->sizeY); i++) { - RawImageGetRow(raw, raw->tmpR, i, 0); - if (raw->sizeZ > 1) { - RawImageGetRow(raw, raw->tmpG, i, 1); - RawImageGetRow(raw, raw->tmpB, i, 2); - if (raw->sizeZ > 3) { - RawImageGetRow(raw, raw->tmpA, i, 3); - } - } - for (j = 0; j < (int) (raw->sizeX); j++) { - *ptr++ = *(raw->tmpR + j); - if (raw->sizeZ > 1) { - *ptr++ = *(raw->tmpG + j); - *ptr++ = *(raw->tmpB + j); - if (raw->sizeZ > 3) { - *ptr++ = *(raw->tmpA + j); - } - } - } - } -} - -static TK_RGBImageRec * -tkRGBImageLoad(const char *fileName) -{ - rawImageRec *raw; - TK_RGBImageRec *final; - - raw = RawImageOpen(fileName); - final = (TK_RGBImageRec *) malloc(sizeof(TK_RGBImageRec)); - if (final == NULL) { - fprintf(stderr, "Out of memory!\n"); - return NULL; - } - final->sizeX = raw->sizeX; - final->sizeY = raw->sizeY; - final->components = raw->sizeZ; - RawImageGetData(raw, final); - RawImageClose(raw); - return final; -} - -static void -FreeImage(TK_RGBImageRec * image) -{ - free(image->data); - free(image); -} - -/* - * Load an SGI .rgb file and generate a set of 2-D mipmaps from it. - * Input: imageFile - name of .rgb to read - * intFormat - internal texture format to use, or number of components - * Return: GL_TRUE if success, GL_FALSE if error. - */ -GLboolean -LoadRGBMipmaps(const char *imageFile, GLint intFormat) -{ - GLint error; - GLenum format; - TK_RGBImageRec *image; - - image = tkRGBImageLoad(imageFile); - if (!image) { - return GL_FALSE; - } - if (image->components == 3) { - format = GL_RGB; - } else if (image->components == 4) { - format = GL_RGBA; - } else if (image->components == 1) { - format = GL_LUMINANCE; - intFormat = 1; - } else { - /* not implemented */ - fprintf(stderr, - "Error in LoadRGBMipmaps %d-component images not implemented\n", - image->components); - return GL_FALSE; - } - - error = gluBuild2DMipmaps(GL_TEXTURE_2D, - intFormat, - image->sizeX, image->sizeY, - format, - GL_UNSIGNED_BYTE, - image->data); - - FreeImage(image); - return error ? GL_FALSE : GL_TRUE; -} diff --git a/lib/glut-3.7.6/progs/demos/bluepony/readtex.h b/lib/glut-3.7.6/progs/demos/bluepony/readtex.h deleted file mode 100644 index 1c0015b0f..000000000 --- a/lib/glut-3.7.6/progs/demos/bluepony/readtex.h +++ /dev/null @@ -1,10 +0,0 @@ -/* readtex.h */ - -#ifndef READTEX_H -#define READTEX_H - -#include - -extern GLboolean LoadRGBMipmaps(const char *imageFile, GLint intFormat); - -#endif diff --git a/lib/glut-3.7.6/progs/demos/bounce/Imakefile b/lib/glut-3.7.6/progs/demos/bounce/Imakefile deleted file mode 100644 index 45151d3cf..000000000 --- a/lib/glut-3.7.6/progs/demos/bounce/Imakefile +++ /dev/null @@ -1,24 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1994. */ - -#include "../../../Glut.cf" - -TARGETS = bounce - -SRCS = bounce.c glui.c tb.c trackball.c - -AllTarget($(TARGETS)) - -NormalGlutProgramTarget(bounce,bounce.o glui.o tb.o trackball.o) - -LinkFile(trackball.c, ../../examples/trackball.c) -LinkFile(trackball.h, ../../examples/trackball.h) - -trackball.o: trackball.h -tb.o: tb.h trackball.h -bounce.o: tb.h glui.c glui.h - -/* some old imake configs do setup "make depend" dependencies on linked files */ -depend:: trackball.c trackball.h tb.c tb.h - -DependTarget() diff --git a/lib/glut-3.7.6/progs/demos/bounce/bounce.c b/lib/glut-3.7.6/progs/demos/bounce/bounce.c deleted file mode 100644 index ac8747e41..000000000 --- a/lib/glut-3.7.6/progs/demos/bounce/bounce.c +++ /dev/null @@ -1,943 +0,0 @@ - -/************************************************************************** - * * - * Copyright (C) 1988, 1989, 1990, Silicon Graphics, Inc. * - * * - * These coded instructions, statements, and computer programs contain * - * unpublished proprietary information of Silicon Graphics, Inc., and * - * are protected by Federal copyright law. They may not be disclosed * - * to third parties or copied or duplicated in any form, in whole or * - * in part, without the prior written consent of Silicon Graphics, Inc. * - * * - **************************************************************************/ - -/* - * foo $Revision: 1.4 $ - */ -#include -#include -#include -#include -#include -#include -#include - -#include "tb.h" -#include "glui.h" - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -#define UDIV 12 -#define VDIV 12 - -#define WALLGRIDMAX 32 -#define EYEZ 3.3 - -#define TOTALBALLS 3 - -#define R 0 -#define G 1 -#define B 2 - -#define X 0 -#define Y 1 -#define Z 2 -#define W 3 - -int wallgrid = 8; /* sqrt of the number of quads in a wall */ -float fatt = 1.0; - -int freeze = GL_FALSE; -int spin = GL_FALSE; -int spinning = GL_FALSE; -int objecton = GL_FALSE; -int normson = GL_FALSE; -int lighton[3] = {GL_TRUE, GL_TRUE, GL_TRUE}; - -int window; /* main window id */ - -GLboolean performance = GL_FALSE; /* performance indicator */ - -struct { - float p[3]; - float d[3]; - unsigned char color[3]; -} balls[TOTALBALLS]; - -float ballobj[UDIV+1][VDIV+1][4]; -float wallobj[WALLGRIDMAX+1][WALLGRIDMAX+1][4]; -float wallnorms[WALLGRIDMAX+1][WALLGRIDMAX+1][3]; -float wallnorm[3] = { 0.0, 0.0, -1.0 }; - -int orx, ory; - -float ballscale; -float ballsize; - -int DELTAX, DELTAY; - -int lflag = 0; - -float newpos[] = { 0.0, 0.0, 0.0, 1.0 }; - -GLfloat light_Ka[] = { 0.3, 0.3, 0.3, 1.0 }; /* ambient */ -GLfloat light_Ks[] = { 0.0, 0.0, 0.0, 1.0 }; /* specular */ - -GLfloat light0_Ka[] = { 0.0, 0.0, 0.0, 1.0 }; /* ambient */ -GLfloat light0_Kd[] = { 1.0, 0.1, 0.1, 1.0 }; /* diffuse */ -GLfloat light0_pos[] = { 0.0, 0.0, 0.0, 1.0 }; /* position */ - -GLfloat light1_Ka[] = { 0.0, 0.0, 0.0, 1.0 }; /* ambient */ -GLfloat light1_Kd[] = { 0.1, 1.0, 0.1, 1.0 }; /* diffuse */ -GLfloat light1_pos[] = { 0.0, 0.0, 0.0, 1.0 }; /* position */ - -GLfloat light2_Ka[] = { 0.0, 0.0, 0.0, 1.0 }; /* ambient */ -GLfloat light2_Kd[] = { 0.1, 0.1, 1.0, 1.0 }; /* diffuse */ -GLfloat light2_pos[] = { 0.0, 0.0, 0.0, 1.0 }; /* position */ - -GLfloat attenuation[] = { 1.0, 3.0 }; - -GLfloat plane_Ka[] = { 0.0, 0.0, 0.0, 1.0 }; /* ambient */ -GLfloat plane_Kd[] = { 0.4, 0.4, 0.4, 1.0 }; /* diffuse */ -GLfloat plane_Ks[] = { 1.0, 1.0, 1.0, 1.0 }; /* specular */ -GLfloat plane_Ke[] = { 0.0, 0.0, 0.0, 1.0 }; /* emission */ -GLfloat plane_Se = 30.0; /* shininess */ - -GLfloat wall_Ka[] = { 0.1, 0.1, 0.1, 1.0 }; /* ambient */ -GLfloat wall_Kd[] = { 0.8, 0.8, 0.8, 1.0 }; /* diffuse */ -GLfloat wall_Ks[] = { 1.0, 1.0, 1.0, 1.0 }; /* specular */ -GLfloat wall_Ke[] = { 0.0, 0.0, 0.0, 1.0 }; /* emission */ -GLfloat wall_Se = 20.0; /* shininess */ - -GLuint wall_material, plane_material; /* material display lists */ - -char ofile[80]; - - -/************************************************************/ -/* XXX - The following is an excerpt from spin.h from spin */ -/************************************************************/ - -#define POLYGON 1 -#define LINES 2 -#define TRANSPERENT 3 -#define DISPLAY 4 -#define LMATERIAL 5 - -#define FASTMAGIC 0x5423 - -typedef struct fastobj { - int npoints; - int colors; - int type; - int material; - int display; - int ablend; - GLint *data; -} fastobj; - -/* - * Wrappers to do either lines or polygons - */ -#define PolyOrLine() if (lflag == LINES) { \ - glBegin(GL_LINE_LOOP); \ - } else { \ - glBegin(GL_POLYGON); \ - } - -#define EndPolyOrLine() if (lflag == LINES) { \ - glEnd(); \ - } else { \ - glEnd(); \ - } - -/************************* end of spin.h excerpt *************************/ - - -fastobj *obj = NULL; - -/* - - general purpose text routine. draws a string according to the - format in a stroke font at x, y after scaling it by the scale - specified. x, y and scale are all in window-space [i.e., pixels] - with origin at the lower-left. - -*/ - -void -text(GLuint x, GLuint y, GLfloat scale, char* format, ...) -{ - va_list args; - char buffer[255], *p; - GLfloat font_scale = 119.05 + 33.33; - - va_start(args, format); - vsprintf(buffer, format, args); - va_end(args); - - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - gluOrtho2D(0, glutGet(GLUT_WINDOW_WIDTH), 0, glutGet(GLUT_WINDOW_HEIGHT)); - - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); - - glPushAttrib(GL_ENABLE_BIT); - glDisable(GL_LIGHTING); - glDisable(GL_TEXTURE_2D); - glEnable(GL_DEPTH_TEST); - glEnable(GL_LINE_SMOOTH); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE); - glTranslatef(x, y, 0.0); - - glScalef(scale/font_scale, scale/font_scale, scale/font_scale); - - for(p = buffer; *p; p++) - glutStrokeCharacter(GLUT_STROKE_ROMAN, *p); - - glPopAttrib(); - - glPopMatrix(); - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); -} - -float -frand(void) -{ - return 2.0*(rand()/32768.0 - .5); -} - - -void -resetballs(void) -{ - register short i; - - balls[0].color[R] = 255; - balls[0].color[G] = 64; - balls[0].color[B] = 64; - balls[1].color[R] = 64; - balls[1].color[G] = 255; - balls[1].color[B] = 64; - balls[2].color[R] = 64; - balls[2].color[G] = 64; - balls[2].color[B] = 255; - for (i = 0; i < TOTALBALLS; i++) { - balls[i].p[0] = 0.0; - balls[i].p[1] = 0.0; - balls[i].p[2] = 0.0; - balls[i].d[0] = .1*frand(); - balls[i].d[1] = .1*frand(); - balls[i].d[2] = .1*frand(); - } -} - - -void -drawface(void) -{ - register int i,j; - - glNormal3fv(wallnorm); - for (i=0; i < wallgrid; i++) { - glBegin(GL_TRIANGLE_STRIP); - for (j=0; j <= wallgrid; j++) { - glVertex3fv(wallobj[i][j]); - glVertex3fv(wallobj[i+1][j]); - } - glEnd(); - } -} - - -void -drawnorms(void) -{ - register int i,j; - - glDisable(GL_LIGHTING); - glColor3ub(255, 255, 0); - for (i=0; i <= wallgrid; i++) { - for (j=0; j <= wallgrid; j++) { - glBegin(GL_LINES); - glVertex3fv(wallobj[i][j]); - glVertex3fv(wallnorms[i][j]); - glEnd(); - } - } - glEnable(GL_LIGHTING); -} - - -void -drawbox(void) -{ - glPushMatrix(); - -/* drawface(); */ - glRotatef(90.0, 0.0, 1.0, 0.0); - drawface(); - if (normson) drawnorms(); - glRotatef(90.0, 0.0, 1.0, 0.0); - drawface(); - if (normson) drawnorms(); - glRotatef(90.0, 0.0, 1.0, 0.0); -/* drawface(); */ - glRotatef(-90.0, 1.0, 0.0, 0.0); - drawface(); - if (normson) drawnorms(); - glRotatef(180.0, 1.0, 0.0, 0.0); -/* drawface(); */ - glPopMatrix(); -} - - -void -drawfastobj(fastobj *obj) -{ - register GLint *p, *end; - register int npolys; - - p = obj->data; - end = p + 8 * obj->npoints; - - if(obj->colors) { - npolys = obj->npoints/4; - while(npolys--) { - PolyOrLine(); - glColor3iv(p); - glVertex3fv((float *)p+4); - glColor3iv(p+8); - glVertex3fv((float *)p+12); - glColor3iv(p+16); - glVertex3fv((float *)p+20); - glColor3iv(p+24); - glVertex3fv((float *)p+28); - EndPolyOrLine(); - p += 32; - } - } else { - while ( p < end) { - PolyOrLine(); - glNormal3fv((float *)p); - glVertex3fv((float *)p+4); - glNormal3fv((float *)p+8); - glVertex3fv((float *)p+12); - glNormal3fv((float *)p+16); - glVertex3fv((float *)p+20); - glNormal3fv((float *)p+24); - glVertex3fv((float *)p+28); - EndPolyOrLine(); - p += 32; - } - } -} - -void -drawball(void) -{ - register int i,j; - - for (i=0; i < UDIV; i++) { - for (j=0; j < VDIV; j++) { - glBegin(GL_POLYGON); - glVertex4fv( ballobj[i][j] ); - glVertex4fv( ballobj[i+1][j] ); - glVertex4fv( ballobj[i+1][j+1] ); - glVertex4fv( ballobj[i][j+1] ); - glEnd(); - } - } -} - - - -void -drawimage(void) -{ - register short i; - static int start, end, last; - - glutSetWindow(window); - - if (performance) - start = glutGet(GLUT_ELAPSED_TIME); - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glPushMatrix(); - tbMatrix(); - - for (i=0; i < TOTALBALLS; i++) { - newpos[0] = balls[i].p[0]; - newpos[1] = balls[i].p[1]; - newpos[2] = balls[i].p[2]; - glLightfv(GL_LIGHT0 + i, GL_POSITION, newpos); - } - - glCallList(wall_material); - glEnable(GL_LIGHTING); - drawbox(); - - glEnable(GL_DEPTH_TEST); - - if (objecton) - { - glCallList(plane_material); - glPushMatrix(); - glScalef(1.5, 1.5, 1.5); - glRotatef(180.0, 0.0, 0.0, 1.0); - if (spin) - { - orx += 50; - ory += 50; - } - glRotatef(orx/10.0, 1.0, 0.0, 0.0); - glRotatef(ory/10.0, 0.0, 1.0, 0.0); - drawfastobj(obj); - glPopMatrix(); - } - - glDisable(GL_LIGHTING); - - for (i=0; i < TOTALBALLS; i++) { - if (lighton[i]) - { - glPushMatrix(); - glTranslatef(balls[i].p[0],balls[i].p[1],balls[i].p[2]); - glColor3ubv(balls[i].color); - drawball(); - glPopMatrix(); - } - } - - glColor3f(1.0, 1.0, 1.0); - if (performance) { - if (end - last == 0) { - text(10, 73, 20, "unknown fps"); - } else { - text(10, 73, 20, "%.0f fps", 1.0 / ((end - last) / 1000.0)); - } - last = start; - } - text(10, 43, 14, "Attenuation [%.2f]", fatt); - text(10, 13, 14, "Tesselation [%3d]", wallgrid); - - - glPopMatrix(); - glutSwapBuffers(); - - if (performance) - end = glutGet(GLUT_ELAPSED_TIME); -} - - -void -initobjects(void) -{ - register float u,v,du,dv; - register short i,j; - - du = 2.0*M_PI/UDIV; - dv = M_PI/VDIV; - - u = 0.; - for (i=0; i <= UDIV; i++) { - v = 0.; - for (j=0; j <= VDIV; j++) { - ballobj[i][j][X] = ballsize*cos(u)*sin(v); - ballobj[i][j][Y] = ballsize*sin(u)*sin(v); - ballobj[i][j][Z] = ballsize*cos(v); - ballobj[i][j][W] = 1.0; - v += dv; - } - u += du; - } - - for (i=0; i <= wallgrid; i++) { - for (j=0; j <= wallgrid; j++) { - wallobj[i][j][X] = -1.0 + 2.0*i/wallgrid; - wallobj[i][j][Y] = -1.0 + 2.0*j/wallgrid; - wallobj[i][j][Z] = 1.0; - wallobj[i][j][W] = 1.0; - } - } - - for (i=0; i <= wallgrid; i++) { - for (j=0; j <= wallgrid; j++) { - wallnorms[i][j][X] = wallobj[i][j][X] + wallnorm[X]*0.1; - wallnorms[i][j][Y] = wallobj[i][j][Y] + wallnorm[Y]*0.1; - wallnorms[i][j][Z] = wallobj[i][j][Z] + wallnorm[Z]*0.1; - } - } -} - -int MOUSEX, MOUSEY; - -static void -mouse(int button, int state, int x, int y) -{ - MOUSEX = x; - MOUSEY = y; - tbMouse(button, state, x, y); -} - -static void -motion(int x, int y) -{ - DELTAX -= MOUSEX - x; - DELTAY += MOUSEY - y; - MOUSEX = x; - MOUSEY = y; - tbMotion(x, y); -} - -/* ARGSUSED1 */ -void -keyboard(unsigned char key, int x, int y) -{ - switch(key) { - case 27: /* ESC */ - exit(0); - break; - - case '+': - wallgrid++; - if (wallgrid > WALLGRIDMAX) - wallgrid = WALLGRIDMAX; - initobjects(); - break; - - case '-': - wallgrid--; - if (wallgrid < 1) - wallgrid = 1; - initobjects(); - break; - } -} - -void -initialize(void) -{ - glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE); - window = glutCreateWindow("bounce"); - - initobjects(); - - srand(glutGet(GLUT_ELAPSED_TIME)); - - glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE); - glLightModelfv(GL_LIGHT_MODEL_AMBIENT, light_Ka); - - plane_material = glGenLists(1); - glNewList(plane_material, GL_COMPILE); - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, plane_Ka); - glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, plane_Kd); - glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, plane_Ks); - glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, plane_Ke); - glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, plane_Se); - glEndList(); - - wall_material = glGenLists(1); - glNewList(wall_material, GL_COMPILE); - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, wall_Ka); - glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, wall_Kd); - glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, wall_Ks); - glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, wall_Ke); - glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, wall_Se); - glEndList(); - - glLightfv(GL_LIGHT0, GL_AMBIENT, light0_Ka); - glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_Kd); - glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, attenuation[0]); - glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, attenuation[1]); - /* OpenGL's light0 has different specular properties than the rest - of the lights.... */ - glLightfv(GL_LIGHT0, GL_SPECULAR, light_Ks); - - glLightfv(GL_LIGHT1, GL_AMBIENT, light1_Ka); - glLightfv(GL_LIGHT1, GL_DIFFUSE, light1_Kd); - glLightf(GL_LIGHT1, GL_CONSTANT_ATTENUATION, attenuation[0]); - glLightf(GL_LIGHT1, GL_LINEAR_ATTENUATION, attenuation[1]); - - glLightfv(GL_LIGHT2, GL_AMBIENT, light2_Ka); - glLightfv(GL_LIGHT2, GL_DIFFUSE, light2_Kd); - glLightf(GL_LIGHT2, GL_CONSTANT_ATTENUATION, attenuation[0]); - glLightf(GL_LIGHT2, GL_LINEAR_ATTENUATION, attenuation[1]); - - glutMotionFunc(motion); - glutMouseFunc(mouse); - glutKeyboardFunc(keyboard); -} - - -void -calcball(void) -{ - register short i,j; - - for (j=0; j < TOTALBALLS; j++) { - for (i=0; i < 3; i++) { - balls[j].p[i] += balls[j].d[i]; - if (fabs(balls[j].p[i]) > ballscale) { - balls[j].p[i] = (balls[j].p[i] > 0.0) ? - ballscale : -ballscale; - balls[j].d[i] = -balls[j].d[i]; - } - } - } -} - -static void menu(int value); -static void idle(void); - -static void -make_menu(void) -{ - static int main_menu = 0; - - if (main_menu) - glutDestroyMenu(main_menu); - - main_menu = glutCreateMenu(menu); - glutAddMenuEntry("bounce", 0); - glutAddMenuEntry("", 0); - if (lighton[0]) - glutAddMenuEntry("red light off", 1); - else - glutAddMenuEntry("red light on", 1); - if (lighton[1]) - glutAddMenuEntry("green light off", 2); - else - glutAddMenuEntry("green light on", 2); - if (lighton[2]) - glutAddMenuEntry("blue light off", 3); - else - glutAddMenuEntry("blue light on", 3); - - if (freeze) - glutAddMenuEntry("unfreeze lights", 4); - else - glutAddMenuEntry("freeze lights", 4); - - if (normson) - glutAddMenuEntry("normals off", 7); - else - glutAddMenuEntry("normals on", 7); - - if (performance) - glutAddMenuEntry("frame rate off", 8); - else - glutAddMenuEntry("frame rate on", 8); - - if (obj) - { - if (objecton) - glutAddMenuEntry("object off", 5); - else - glutAddMenuEntry("object on", 5); - if (spin) - glutAddMenuEntry("object spin off", 6); - else - glutAddMenuEntry("object spin on", 6); - } - - glutAddMenuEntry("", 0); - glutAddMenuEntry("exit", 9); - - glutAttachMenu(GLUT_RIGHT_BUTTON); -} - -static void -menu(int value) -{ - switch(value) { - case 1: - if ((lighton[0] = !lighton[0])) - glEnable(GL_LIGHT0); - else - glDisable(GL_LIGHT0); - break; - case 2: - if ((lighton[1] = !lighton[1])) - glEnable(GL_LIGHT1); - else - glDisable(GL_LIGHT1); - break; - case 3: - if ((lighton[2] = !lighton[2])) - glEnable(GL_LIGHT2); - else - glDisable(GL_LIGHT2); - break; - case 4: - freeze = !freeze; - if (!freeze || spinning) { - glutIdleFunc(idle); - } else { - glutIdleFunc(NULL); - } - break; - case 5: - if (obj) - objecton = !objecton; - else - exit(1); - break; - case 6: - spin = !spin; - break; - case 7: - normson = !normson; - break; - case 8: - performance = !performance; - break; - case 9: - exit(0); - break; - } - glutPostWindowRedisplay(window); - make_menu(); -} - -/**********************************************************/ -/* XXX - The following is a clone of fastobj.c from spin */ -/**********************************************************/ - - -fastobj* -readfastobj(char *name) -{ - FILE *inf; - fastobj *obj; - int i; - int nlongs; - int magic; - GLint *ip; - char filename[512]; - - inf = fopen(name,"r"); - if(!inf) { - sprintf(filename,"%s",name); - inf = fopen(filename,"r"); - if(!inf) { - fprintf(stderr,"readfast: can't open input file %s\n",name); - exit(1); - } - } - fread(&magic,sizeof(int),1,inf); - if(magic != FASTMAGIC) { - fprintf(stderr,"readfast: bad magic in object file\n"); - fclose(inf); - exit(1); - } - obj = (fastobj *)malloc(sizeof(fastobj)); - fread(&obj->npoints,sizeof(int),1,inf); - fread(&obj->colors,sizeof(int),1,inf); - - /* - * Insure that the data is quad-word aligned and begins on a page - * boundary. This shields us from the performance loss which occurs - * whenever we try to fetch data which straddles a page boundary (the OS - * has to map in the next virtual page and re-start the DMA transfer). - */ - nlongs = 8 * obj->npoints; - obj->data = (GLint *) malloc(nlongs*sizeof(int) + 4096); - obj->data = (GLint *) (((int)(obj->data)) + 0xfff); - obj->data = (GLint *) (((int)(obj->data)) & 0xfffff000); - - /* XXX Careful, sizeof(GLint) could change from implementation - to implementation making this file format implementation - dependent. -mjk */ - for (i = 0, ip = obj->data; i < nlongs/4; i++, ip += 4) - fread(ip, 3 * sizeof(GLint), 1, inf); - fclose(inf); - return obj; -} - - -/* - * objmaxpoint - * - * find the vertex farthest from the origin, - * so we can set the near and far clipping planes tightly. - */ - -#define MAXVERT(v) if ( (len = sqrt( (*(v)) * (*(v)) + \ - (*(v+1)) * (*(v+1)) + \ - (*(v+2)) * (*(v+2)) )) > max) \ - max = len; - -float -objmaxpoint(obj) -fastobj *obj; -{ - register float *p, *end; - register int npolys; - register float len; - register float max = 0.0; - - p = (float *) (obj->data); - - if (obj->colors) { - npolys = obj->npoints/4; - while(npolys--) { - MAXVERT(p+4); - MAXVERT(p+12); - MAXVERT(p+20); - MAXVERT(p+28); - p += 32; - } - } else { - end = p + 8 * obj->npoints; - while ( p < end) { - MAXVERT(p+4); - MAXVERT(p+12); - MAXVERT(p+20); - MAXVERT(p+28); - p += 32; - } - } - - return max; -} - -static void -idle(void) -{ - assert(!freeze || spinning); - if (!freeze) { - calcball(); - } - if (spinning) { - tbStepAnimation(); - } - glutPostWindowRedisplay(window); -} - -/* When not visible, stop animating. Restart when visible again. */ -static void -visible(int vis) -{ - if (vis == GLUT_VISIBLE) { - if (!freeze || spinning) - glutIdleFunc(idle); - } else { - if (!freeze || spinning) - glutIdleFunc(NULL); - } -} - -static void -reshape(int width, int height) -{ - glViewport(0, 0, width, height); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(60.0, (float)width/height, EYEZ-2.0, EYEZ+2.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(0.0, 0.25, -EYEZ); - - tbReshape(width, height); - gluiReshape(width, height); -} - -void -update_fatt(float value) -{ - fatt = 5 * value; - glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, fatt); - glLightf(GL_LIGHT1, GL_CONSTANT_ATTENUATION, fatt); - glLightf(GL_LIGHT2, GL_CONSTANT_ATTENUATION, fatt); - glutPostWindowRedisplay(window); -} - -void -update_grid(float value) -{ - wallgrid = WALLGRIDMAX*value; - if (wallgrid < 1) - wallgrid = 1; - initobjects(); - glutPostWindowRedisplay(window); -} - -void -spinChange(int state) -{ - spinning = state; - if (spinning || !freeze) { - glutIdleFunc(idle); - } else { - glutIdleFunc(NULL); - } -} - -int -main(int argc, char **argv) -{ - glutInitWindowSize(512, 512); - glutInitWindowPosition(64, 64); - glutInit(&argc, argv); - - if (argc > 1) - { - int i; - - for (i=0; argv[1][i] != '/' && argv[1][i] != '\0'; i++); - if (argv[1][i] != '/') - { - strcpy(ofile, "/usr/demos/data/models/"); - strcat(ofile, argv[1]); - } - else - strcpy(ofile, argv[1]); - - if (obj = readfastobj(ofile)) - objecton = GL_TRUE; - } - - ballsize = .04; - ballscale = 1.0 - ballsize; - - initialize(); - - make_menu(); - - resetballs(); - - /* Use local lights for the box */ - glEnable(GL_LIGHT0); - glEnable(GL_LIGHT1); - glEnable(GL_LIGHT2); - - make_menu(); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - glutDisplayFunc(drawimage); - glutReshapeFunc(reshape); - glutVisibilityFunc(visible); - - gluiHorizontalSlider(window, 130, -10, -10, 20, - (float)wallgrid/WALLGRIDMAX, update_grid); - gluiHorizontalSlider(window, 130, -40, -10, 20, fatt/5.0, update_fatt); - - tbInit(GLUT_LEFT_BUTTON); - tbAnimate(1); - tbAnimateFunc(spinChange); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/demos/bounce/bounce.dsp b/lib/glut-3.7.6/progs/demos/bounce/bounce.dsp deleted file mode 100644 index a5531005e..000000000 --- a/lib/glut-3.7.6/progs/demos/bounce/bounce.dsp +++ /dev/null @@ -1,112 +0,0 @@ -# Microsoft Developer Studio Project File - Name="bounce" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=bounce - 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 "bounce.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 "bounce.mak" CFG="bounce - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "bounce - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "bounce - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "bounce - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "bounce - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "bounce - Win32 Release" -# Name "bounce - Win32 Debug" -# Begin Source File - -SOURCE=.\bounce.c -# End Source File -# Begin Source File - -SOURCE=.\glui.c -# End Source File -# Begin Source File - -SOURCE=.\glui.h -# End Source File -# Begin Source File - -SOURCE=.\tb.c -# End Source File -# Begin Source File - -SOURCE=.\tb.h -# End Source File -# Begin Source File - -SOURCE=.\trackball.c -# End Source File -# Begin Source File - -SOURCE=.\trackball.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/demos/bounce/glui.c b/lib/glut-3.7.6/progs/demos/bounce/glui.c deleted file mode 100644 index b29aba72f..000000000 --- a/lib/glut-3.7.6/progs/demos/bounce/glui.c +++ /dev/null @@ -1,509 +0,0 @@ - -/* - glui.c - Nate Robins, 1997. - - OpenGL based user interface. - - */ - -#include -#include -#include - -#define GLUI_BORDER 3 -#define GLUI_KNOB 40 - -#define GLUI_RAISED 1 -#define GLUI_SUNKEN 0 - -#define GLUI_HORIZONTAL 0 -#define GLUI_VERTICAL 1 - -#define GLUI_LESS -1 -#define GLUI_HIT 0 -#define GLUI_MORE 1 - -#define GLUI_HILITE 0.15 - -typedef struct _GLUIslider { - int type; /* vertical/horizontal */ - int parent; /* parent of this slider */ - int window; /* this sliders window */ - int win_x; /* slider window x (parent relative) */ - int win_y; /* slider window y (parent relative) */ - int win_w; /* slider window width */ - int win_h; /* slider window height */ - int length; /* length of the slider in pixels */ - int knob; /* position of the knob in pixels */ - int lit; /* currently lit? */ - void (*update)(float); /* callback for updating (returns %) */ - struct _GLUIslider* next; -} GLUIslider; - -static GLUIslider* _gluiSliders = NULL; -static GLUIslider* _gluiHit = NULL; - -static GLUIslider* -_gluiCurrentSlider(void) -{ - GLUIslider* slider = _gluiSliders; - int window = glutGetWindow(); - - while(slider) { - if (slider->window == window) - break; - slider = slider->next; - } - - if (!slider) - printf("glui: _gluiCurrentSlider() failed!\n"); - - return slider; -} - -static void -_gluiEmboss(int raised, int lit, int x, int y, int width, int height) -{ - int i; - float c; - - for (i = 0; i < GLUI_BORDER; i++) { - c = (float)i / (GLUI_BORDER * 5) + (lit ? GLUI_HILITE : 0.0); - if (raised) - glColor3f(0.275+c, 0.2+c, 0.2+c); - else - glColor3f(0.875-c, 0.8-c, 0.8-c); - glBegin(GL_LINE_STRIP); - glVertex2f(x+i+1, y+i); - glVertex2f(x+width-i-1, y+i); - glVertex2f(x+width-i-1, y+height-i); - glEnd(); - } - - for (i = 0; i < GLUI_BORDER; i++) { - c = (float)i / (GLUI_BORDER * 5); - if (raised) - glColor3f(0.875-c, 0.8-c, 0.8-c); - else - glColor3f(0.275+c, 0.2+c, 0.2+c); - glBegin(GL_LINE_STRIP); - glVertex2f(x+i, y+i); - glVertex2f(x+i, y+height-i-1); - glVertex2f(x+width-i-1, y+height-i-1); - glEnd(); - } - - c = lit ? GLUI_HILITE : 0.0; - - if (raised) - glColor3f(0.575+c, 0.5+c, 0.5+c); - else - glColor3f(0.475+c, 0.3+c, 0.3+c); - glRectf(x+i, y+i, x+width-i, y+height-i); -} - -static void -_gluiDisplay(void) -{ - int lit; - GLUIslider* slider = _gluiCurrentSlider(); - - lit = slider->lit ? GLUI_HILITE : 0.0; - - glClear(GL_COLOR_BUFFER_BIT); - if (slider->type == GLUI_HORIZONTAL) { - _gluiEmboss(GLUI_SUNKEN, 0, /* never lit */ - 0, 0, slider->length, slider->win_h); - _gluiEmboss(GLUI_RAISED, slider->lit, - slider->knob - GLUI_KNOB/2, GLUI_BORDER, - GLUI_KNOB + GLUI_BORDER, slider->win_h - GLUI_BORDER*2); - /* XXX why is it GLUI_KNOB+GLUI_BORDER ? */ - glColor3f(0.975+lit, 0.9+lit, 0.9+lit); - glBegin(GL_LINES); - glVertex2f(slider->knob-2, GLUI_BORDER*2-1); - glVertex2f(slider->knob-2, slider->win_h-GLUI_BORDER*2+1); - glVertex2f(slider->knob+1, GLUI_BORDER*2-1); - glVertex2f(slider->knob+1, slider->win_h-GLUI_BORDER*2+1); - glVertex2f(slider->knob+4, GLUI_BORDER*2-1); - glVertex2f(slider->knob+4, slider->win_h-GLUI_BORDER*2+1); - glEnd(); - glColor3f(0.175+lit, 0.1+lit, 0.1+lit); - glBegin(GL_LINES); - glVertex2f(slider->knob-3, GLUI_BORDER*2-1); - glVertex2f(slider->knob-3, slider->win_h-GLUI_BORDER*2+1); - glVertex2f(slider->knob+0, GLUI_BORDER*2-1); - glVertex2f(slider->knob+0, slider->win_h-GLUI_BORDER*2+1); - glVertex2f(slider->knob+3, GLUI_BORDER*2-1); - glVertex2f(slider->knob+3, slider->win_h-GLUI_BORDER*2+1); - glEnd(); - } else { - _gluiEmboss(GLUI_SUNKEN, 0, /* never lit */ - 0, 0, slider->win_w, slider->length); - _gluiEmboss(GLUI_RAISED, slider->lit, - GLUI_BORDER, slider->knob - GLUI_KNOB/2, - slider->win_w - GLUI_BORDER*2, GLUI_KNOB + GLUI_BORDER); - /* XXX why is it GLUI_KNOB+GLUI_BORDER ? */ - glColor3f(0.175+lit, 0.1+lit, 0.1+lit); - glBegin(GL_LINES); - glVertex2f(GLUI_BORDER*2-1, slider->knob-2); - glVertex2f(slider->win_w-GLUI_BORDER*2+1, slider->knob-2); - glVertex2f(GLUI_BORDER*2-1, slider->knob+1); - glVertex2f(slider->win_w-GLUI_BORDER*2+1, slider->knob+1); - glVertex2f(GLUI_BORDER*2-1, slider->knob+4); - glVertex2f(slider->win_w-GLUI_BORDER*2+1, slider->knob+4); - glEnd(); - glColor3f(0.975+lit, 0.9+lit, 0.9+lit); - glBegin(GL_LINES); - glVertex2f(GLUI_BORDER*2-1, slider->knob-3); - glVertex2f(slider->win_w-GLUI_BORDER*2+1, slider->knob-3); - glVertex2f(GLUI_BORDER*2-1, slider->knob+0); - glVertex2f(slider->win_w-GLUI_BORDER*2+1, slider->knob+0); - glVertex2f(GLUI_BORDER*2-1, slider->knob+3); - glVertex2f(slider->win_w-GLUI_BORDER*2+1, slider->knob+3); - glEnd(); - } - - glutSwapBuffers(); -} - -static int -_gluiHitKnob(GLUIslider* slider, int x, int y) -{ - if (slider->type == GLUI_HORIZONTAL) { - /* we know that we don't have to test the y coordinate because - the mouse came down in the window (this means that they can - hit the borders and still move the knob, but that's okay). - */ - if (x > slider->knob - GLUI_KNOB/2 && x < slider->knob + GLUI_KNOB/2) - return GLUI_HIT; - else if (x < slider->knob) - return GLUI_LESS; - else - return GLUI_MORE; - } else { - /* we know that we don't have to test the x coordinate because - the mouse came down in the window (this means that they can - hit the borders and still move the knob, but that's okay). - */ - if (y > slider->knob - GLUI_KNOB/2 && y < slider->knob + GLUI_KNOB/2) - return GLUI_HIT; - else if (y < slider->knob) - return GLUI_LESS; - else - return GLUI_MORE; - } -} - -static void -_gluiConstrainKnob(GLUIslider* slider) -{ - if (slider->knob > slider->length - GLUI_BORDER*2 - GLUI_KNOB/2) - slider->knob = slider->length - GLUI_BORDER*2 - GLUI_KNOB/2; - else if (slider->knob < GLUI_BORDER + GLUI_KNOB/2) - slider->knob = GLUI_BORDER + GLUI_KNOB/2; -} - - -static float -_gluiKnobPercent(GLUIslider* slider) -{ - return (float)(slider->knob - GLUI_KNOB/2 - GLUI_BORDER) / - (slider->length - GLUI_BORDER*3 - GLUI_KNOB); -} - -static int -_gluiKnobPosition(GLUIslider* slider, float percent) -{ - return GLUI_BORDER + GLUI_KNOB/2 + percent * - (slider->length - GLUI_BORDER*3 - GLUI_KNOB); -} - -static int _gluiX; -static int _gluiY; -static int _gluiMouseDown; - -static void -_gluiTimer(int value) -{ - GLUIslider* slider = (GLUIslider*)value; - float percent; - - percent = _gluiKnobPercent(slider); - - if (_gluiMouseDown != 0 && percent > 0.0 && percent < 1.0) { - if (_gluiMouseDown == GLUI_LESS) { - slider->knob -= slider->length / 25.0; - _gluiConstrainKnob(slider); - } else { - slider->knob += slider->length / 25.0; - _gluiConstrainKnob(slider); - } - glutSetWindow(slider->window); - glutPostRedisplay(); - slider->update(_gluiKnobPercent(slider)); - glutTimerFunc(20, _gluiTimer, (int)slider); - } -} - -static void -_gluiConvertY(GLUIslider* slider, int* y) -{ - if (slider->win_h < 0) { - glutSetWindow(slider->parent); - *y = glutGet(GLUT_WINDOW_HEIGHT) + slider->win_h - slider->win_y - *y; - glutSetWindow(slider->window); - } else { - *y = slider->win_h - *y; - } -} - -/* ARGSUSED */ -static void -_gluiMouse(int button, int state, int x, int y) -{ - GLUIslider* slider = _gluiCurrentSlider(); - int side; - - _gluiConvertY(slider, &y); - - _gluiX = x; - _gluiY = y; - _gluiHit = NULL; - _gluiMouseDown = GL_FALSE; - - if (state == GLUT_DOWN) { - side = _gluiHitKnob(slider, x, y); - if (side == GLUI_HIT) { - _gluiHit = slider; - } else if (side == GLUI_LESS) { - slider->knob -= slider->length / 25.0; - _gluiConstrainKnob(slider); - } else { - slider->knob += slider->length / 25.0; - _gluiConstrainKnob(slider); - } - glutPostRedisplay(); - slider->update(_gluiKnobPercent(slider)); - _gluiMouseDown = side; - if (side != 0) { - glutTimerFunc(500, _gluiTimer, (int)slider); - } - } else { - slider->lit = GL_FALSE; - } -} - -static void -_gluiMotion(int x, int y) -{ - GLUIslider* slider = _gluiHit; - - if (slider) { - _gluiConvertY(slider, &y); - - if (slider->type == GLUI_HORIZONTAL) { - /* clamp the incoming old position, or else the knob will - possibly "jump" due to the false delta. */ - if (_gluiX < GLUI_BORDER+1) - _gluiX = GLUI_BORDER+1; - if (_gluiX > slider->length - GLUI_BORDER*2) - _gluiX = slider->length - GLUI_BORDER*2; - /* we don't want to take any action if the mouse pointer - has moved passed the extents of the slider. */ - if (x > GLUI_BORDER && x < slider->length - GLUI_BORDER*2) { - slider->knob -= _gluiX - x; - _gluiX = x; - } - } else { - /* clamp the incoming old position, or else the knob will - possibly "jump" due to the false delta. */ - if (_gluiY < GLUI_BORDER+1) - _gluiY = GLUI_BORDER+1; - if (_gluiY > slider->length - GLUI_BORDER*2) - _gluiY = slider->length - GLUI_BORDER*2; - /* we don't want to take any action if the mouse pointer - has moved passed the extents of the slider. */ - if (y > GLUI_BORDER && y < slider->length - GLUI_BORDER*2) { - slider->knob -= _gluiY - y; - _gluiY = y; - } - } - _gluiConstrainKnob(slider); - - /* post a display _before_ updating the user, so that the knob - won't lag behind. */ - glutPostRedisplay(); - - /* make sure to set the parent window current, otherwise if - there is OpenGL state being changed in the update callback, - it will be done to the sliders context! */ - glutSetWindow(slider->parent); - slider->update(_gluiKnobPercent(slider)); - } -} - -static void -_gluiPassive(int x, int y) -{ - GLUIslider* slider = _gluiCurrentSlider(); - - _gluiConvertY(slider, &y); - - if (_gluiHitKnob(slider, x, y) == 0) - slider->lit = GL_TRUE; - else - slider->lit = GL_FALSE; - - glutPostRedisplay(); -} - -/* ARGSUSED */ -static void -_gluiEntry(int state) -{ - GLUIslider* slider = _gluiCurrentSlider(); - - /* set the lit flag to false whether we are coming or going - because if we are doing either, we can't be on top of the knob! */ - slider->lit = GL_FALSE; - glutPostRedisplay(); -} - -void -gluiReshape(int width, int height) -{ - float percent; - int x, y, w, h; - GLUIslider* slider = _gluiSliders; - - while (slider) { - /* we need to get the width and height of the parent, so set - it current. */ - glutSetWindow(slider->parent); - - /* all this mumbo jumbo takes care of the negative arguments - to attach the slider to different sides of the window. */ - x = slider->win_x; - if (x < 0) - x = width - slider->win_w + x + 1; - y = slider->win_y; - if (y < 0) - y = height - slider->win_h + y + 1; - w = slider->win_w; - if (w < 0) - w = glutGet(GLUT_WINDOW_WIDTH) + slider->win_w - slider->win_x; - h = slider->win_h; - if (h < 0) - h = glutGet(GLUT_WINDOW_HEIGHT) + slider->win_h - slider->win_y; - - glutSetWindow(slider->window); - glutPositionWindow(x, y); - glutReshapeWindow(w, h); - - percent = _gluiKnobPercent(slider); - - if (slider->type == GLUI_HORIZONTAL) - slider->length = w; - else - slider->length = h; - - slider->knob = _gluiKnobPosition(slider, percent); - - _gluiConstrainKnob(slider); - - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluOrtho2D(0, w, 0, h); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - slider = slider->next; - } -} - - - -int -gluiVerticalSlider(int parent, int x, int y, int width, int height, - float percent, void (*update)(float)) -{ - GLUIslider* slider = (GLUIslider*)malloc(sizeof(GLUIslider)); - slider->next = _gluiSliders; - _gluiSliders = slider; - - slider->type = GLUI_VERTICAL; - slider->parent = parent; - slider->window = glutCreateSubWindow(parent, x, y, width, height); - slider->win_x = x; - slider->win_y = y; - slider->win_w = width; - slider->win_h = height; - slider->update = update; - slider->lit = GL_FALSE; - -/* glutSetCursor(GLUT_CURSOR_LEFT_RIGHT); */ - glutDisplayFunc(_gluiDisplay); - glutEntryFunc(_gluiEntry); - glutMouseFunc(_gluiMouse); - glutMotionFunc(_gluiMotion); - glutPassiveMotionFunc(_gluiPassive); - - glDisable(GL_LIGHTING); - glDisable(GL_DEPTH_TEST); - - slider->length = height; - if (height < 0) { - glutSetWindow(parent); - slider->length = glutGet(GLUT_WINDOW_HEIGHT) + height - slider->win_y; - } - - slider->knob = _gluiKnobPosition(slider, percent); - _gluiConstrainKnob(slider); - - return slider->window; -} - - -/* On a horizontal slider, the height must be non-negative. */ - -int -gluiHorizontalSlider(int parent, int x, int y, int width, int height, - float percent, void (*update)(float)) -{ - GLUIslider* slider = (GLUIslider*)malloc(sizeof(GLUIslider)); - slider->next = _gluiSliders; - _gluiSliders = slider; - - slider->type = GLUI_HORIZONTAL; - slider->parent = parent; - slider->window = glutCreateSubWindow(parent, x, y, width, height); - slider->win_x = x; - slider->win_y = y; - slider->win_w = width; - slider->win_h = height; - slider->update = update; - slider->lit = GL_FALSE; - -/* glutSetCursor(GLUT_CURSOR_LEFT_RIGHT); */ - glutDisplayFunc(_gluiDisplay); - glutEntryFunc(_gluiEntry); - glutMouseFunc(_gluiMouse); - glutMotionFunc(_gluiMotion); - glutPassiveMotionFunc(_gluiPassive); - - glDisable(GL_LIGHTING); - glDisable(GL_DEPTH_TEST); - - slider->length = width; - if (width < 0) { - glutSetWindow(parent); - slider->length = glutGet(GLUT_WINDOW_WIDTH) + width - slider->win_x; - } - - slider->knob = _gluiKnobPosition(slider, percent); - _gluiConstrainKnob(slider); - - return slider->window; -} diff --git a/lib/glut-3.7.6/progs/demos/bounce/glui.h b/lib/glut-3.7.6/progs/demos/bounce/glui.h deleted file mode 100644 index 24770f3ac..000000000 --- a/lib/glut-3.7.6/progs/demos/bounce/glui.h +++ /dev/null @@ -1,18 +0,0 @@ -/* - glui.h - Nate Robins, 1997. - - OpenGL based user interface. - - */ - -int -gluiHorizontalSlider(int parent, int x, int y, int width, int height, - float percent, void (*update)(float)); - -int -gluiVerticalSlider(int parent, int x, int y, int width, int height, - float percent, void (*update)(float)); - -void -gluiReshape(int width, int height); diff --git a/lib/glut-3.7.6/progs/demos/bounce/tb.c b/lib/glut-3.7.6/progs/demos/bounce/tb.c deleted file mode 100644 index 73bbc9c52..000000000 --- a/lib/glut-3.7.6/progs/demos/bounce/tb.c +++ /dev/null @@ -1,147 +0,0 @@ -/* - * Simple trackball-like motion adapted (ripped off) from projtex.c - * (written by David Yu and David Blythe). See the SIGGRAPH '96 - * Advanced OpenGL course notes. - */ - - -/* includes */ -#include -#include -#include -#include "tb.h" -#include "trackball.h" - -/* globals */ -static GLuint tb_lasttime; - -float curquat[4]; -float lastquat[4]; -int beginx, beginy; - -static GLuint tb_width; -static GLuint tb_height; - -static GLint tb_button = -1; -static GLboolean tb_tracking = GL_FALSE; -static GLboolean tb_animate = GL_TRUE; - -void -tbStepAnimation(void) -{ - add_quats(lastquat, curquat, curquat); -} - -void -_tbAnimate(void) -{ - tbStepAnimation(); - glutPostRedisplay(); -} - -static void -defaultAnimateFunc(int animate) -{ - if (animate) { - glutIdleFunc(_tbAnimate); - } else { - glutIdleFunc(0); - } -} - -void (*animateFunc)(int animate) = defaultAnimateFunc; - -void -_tbStartMotion(int x, int y, int time) -{ - assert(tb_button != -1); - - animateFunc(0); - tb_tracking = GL_TRUE; - tb_lasttime = time; - beginx = x; - beginy = y; -} - -void -_tbStopMotion(unsigned time) -{ - assert(tb_button != -1); - - tb_tracking = GL_FALSE; - - if (time == tb_lasttime && tb_animate) { - animateFunc(1); - } else { - if (tb_animate) { - animateFunc(0); - } - } -} - -void -tbAnimate(GLboolean animate) -{ - tb_animate = animate; -} - -void -tbInit(GLuint button) -{ - tb_button = button; - trackball(curquat, 0.0, 0.0, 0.0, 0.0); -} - -void -tbMatrix(void) -{ - GLfloat m[4][4]; - - assert(tb_button != -1); - build_rotmatrix(m, curquat); - glMultMatrixf(&m[0][0]); -} - -void -tbReshape(int width, int height) -{ - assert(tb_button != -1); - - tb_width = width; - tb_height = height; -} - -void -tbMouse(int button, int state, int x, int y) -{ - assert(tb_button != -1); - - if (state == GLUT_DOWN && button == tb_button) - _tbStartMotion(x, y, glutGet(GLUT_ELAPSED_TIME)); - else if (state == GLUT_UP && button == tb_button) - _tbStopMotion(glutGet(GLUT_ELAPSED_TIME)); -} - -void -tbMotion(int x, int y) -{ - if (tb_tracking) { - trackball(lastquat, - (2.0 * beginx - tb_width) / tb_width, - (tb_height - 2.0 * beginy) / tb_height, - (2.0 * x - tb_width) / tb_width, - (tb_height - 2.0 * y) / tb_height - ); - beginx = x; - beginy = y; - tb_animate = 1; - tb_lasttime = glutGet(GLUT_ELAPSED_TIME); - tbStepAnimation(); - } -} - -void -tbAnimateFunc(void (*func)(int animate)) -{ - animateFunc = func; -} diff --git a/lib/glut-3.7.6/progs/demos/bounce/tb.h b/lib/glut-3.7.6/progs/demos/bounce/tb.h deleted file mode 100644 index c999bd583..000000000 --- a/lib/glut-3.7.6/progs/demos/bounce/tb.h +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Simple trackball-like motion adapted (ripped off) from projtex.c - * (written by David Yu and David Blythe). See the SIGGRAPH '96 - * Advanced OpenGL course notes. - * - * - * Usage: - * - * o call tbInit() in before any other tb call - * o call tbReshape() from the reshape callback - * o call tbMatrix() to get the trackball matrix rotation - * o call tbStartMotion() to begin trackball movememt - * o call tbStopMotion() to stop trackball movememt - * o call tbMotion() from the motion callback - * o call tbAnimate(GL_TRUE) if you want the trackball to continue - * spinning after the mouse button has been released - * o call tbAnimate(GL_FALSE) if you want the trackball to stop - * spinning after the mouse button has been released - * - * Typical setup: - * - * - void - init(void) - { - tbInit(GLUT_MIDDLE_BUTTON); - tbAnimate(GL_TRUE); - . . . - } - - void - reshape(int width, int height) - { - tbReshape(width, height); - . . . - } - - void - display(void) - { - glPushMatrix(); - - tbMatrix(); - . . . draw the scene . . . - - glPopMatrix(); - } - - void - mouse(int button, int state, int x, int y) - { - tbMouse(button, state, x, y); - . . . - } - - void - motion(int x, int y) - { - tbMotion(x, y); - . . . - } - - int - main(int argc, char** argv) - { - . . . - init(); - glutReshapeFunc(reshape); - glutDisplayFunc(display); - glutMouseFunc(mouse); - glutMotionFunc(motion); - . . . - } - * - * */ - - -/* functions */ -extern void tbInit(GLuint button); -extern void tbMatrix(void); -extern void tbReshape(int width, int height); -extern void tbMouse(int button, int state, int x, int y); -extern void tbMotion(int x, int y); -extern void tbAnimate(GLboolean animate); -extern void tbAnimateFunc(void (*func)(int animate)); -extern void tbStepAnimation(void); diff --git a/lib/glut-3.7.6/progs/demos/bounce/trackball.c b/lib/glut-3.7.6/progs/demos/bounce/trackball.c deleted file mode 100644 index cce919b5a..000000000 --- a/lib/glut-3.7.6/progs/demos/bounce/trackball.c +++ /dev/null @@ -1,346 +0,0 @@ -#include -/* - * (c) Copyright 1993, 1994, 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. - */ -/* - * Trackball code: - * - * Implementation of a virtual trackball. - * Implemented by Gavin Bell, lots of ideas from Thant Tessman and - * the August '88 issue of Siggraph's "Computer Graphics," pp. 121-129. - * - * Vector manip code: - * - * Original code from: - * David M. Ciemiewicz, Mark Grossman, Henry Moreton, and Paul Haeberli - * - * Much mucking with by: - * Gavin Bell - */ -#if defined(_WIN32) -#pragma warning (disable:4244) /* disable bogus conversion warnings */ -#endif -#include -#include "trackball.h" - -/* - * This size should really be based on the distance from the center of - * rotation to the point on the object underneath the mouse. That - * point would then track the mouse as closely as possible. This is a - * simple example, though, so that is left as an Exercise for the - * Programmer. - */ -#define TRACKBALLSIZE (0.8f) - -/* - * Local function prototypes (not defined in trackball.h) - */ -static float tb_project_to_sphere(float, float, float); -static void normalize_quat(float [4]); - -void -vzero(float *v) -{ - v[0] = 0.0; - v[1] = 0.0; - v[2] = 0.0; -} - -void -vset(float *v, float x, float y, float z) -{ - v[0] = x; - v[1] = y; - v[2] = z; -} - -void -vsub(const float *src1, const float *src2, float *dst) -{ - dst[0] = src1[0] - src2[0]; - dst[1] = src1[1] - src2[1]; - dst[2] = src1[2] - src2[2]; -} - -void -vcopy(const float *v1, float *v2) -{ - register int i; - for (i = 0 ; i < 3 ; i++) - v2[i] = v1[i]; -} - -void -vcross(const float *v1, const float *v2, float *cross) -{ - float temp[3]; - - temp[0] = (v1[1] * v2[2]) - (v1[2] * v2[1]); - temp[1] = (v1[2] * v2[0]) - (v1[0] * v2[2]); - temp[2] = (v1[0] * v2[1]) - (v1[1] * v2[0]); - vcopy(temp, cross); -} - -float -vlength(const float *v) -{ - return sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]); -} - -void -vscale(float *v, float div) -{ - v[0] *= div; - v[1] *= div; - v[2] *= div; -} - -void -vnormal(float *v) -{ - vscale(v,1.0/vlength(v)); -} - -float -vdot(const float *v1, const float *v2) -{ - return v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2]; -} - -void -vadd(const float *src1, const float *src2, float *dst) -{ - dst[0] = src1[0] + src2[0]; - dst[1] = src1[1] + src2[1]; - dst[2] = src1[2] + src2[2]; -} - -/* - * Ok, simulate a track-ball. Project the points onto the virtual - * trackball, then figure out the axis of rotation, which is the cross - * product of P1 P2 and O P1 (O is the center of the ball, 0,0,0) - * Note: This is a deformed trackball-- is a trackball in the center, - * but is deformed into a hyperbolic sheet of rotation away from the - * center. This particular function was chosen after trying out - * several variations. - * - * It is assumed that the arguments to this routine are in the range - * (-1.0 ... 1.0) - */ -void -trackball(float q[4], float p1x, float p1y, float p2x, float p2y) -{ - float a[3]; /* Axis of rotation */ - float phi; /* how much to rotate about axis */ - float p1[3], p2[3], d[3]; - float t; - - if (p1x == p2x && p1y == p2y) { - /* Zero rotation */ - vzero(q); - q[3] = 1.0; - return; - } - - /* - * First, figure out z-coordinates for projection of P1 and P2 to - * deformed sphere - */ - vset(p1,p1x,p1y,tb_project_to_sphere(TRACKBALLSIZE,p1x,p1y)); - vset(p2,p2x,p2y,tb_project_to_sphere(TRACKBALLSIZE,p2x,p2y)); - - /* - * Now, we want the cross product of P1 and P2 - */ - vcross(p2,p1,a); - - /* - * Figure out how much to rotate around that axis. - */ - vsub(p1,p2,d); - t = vlength(d) / (2.0*TRACKBALLSIZE); - - /* - * Avoid problems with out-of-control values... - */ - if (t > 1.0) t = 1.0; - if (t < -1.0) t = -1.0; - phi = 2.0 * asin(t); - - axis_to_quat(a,phi,q); -} - -/* - * Given an axis and angle, compute quaternion. - */ -void -axis_to_quat(float a[3], float phi, float q[4]) -{ - vnormal(a); - vcopy(a,q); - vscale(q,sin(phi/2.0)); - q[3] = cos(phi/2.0); -} - -/* - * Project an x,y pair onto a sphere of radius r OR a hyperbolic sheet - * if we are away from the center of the sphere. - */ -static float -tb_project_to_sphere(float r, float x, float y) -{ - float d, t, z; - - d = sqrt(x*x + y*y); - if (d < r * 0.70710678118654752440) { /* Inside sphere */ - z = sqrt(r*r - d*d); - } else { /* On hyperbola */ - t = r / 1.41421356237309504880; - z = t*t / d; - } - return z; -} - -/* - * Given two rotations, e1 and e2, expressed as quaternion rotations, - * figure out the equivalent single rotation and stuff it into dest. - * - * This routine also normalizes the result every RENORMCOUNT times it is - * called, to keep error from creeping in. - * - * NOTE: This routine is written so that q1 or q2 may be the same - * as dest (or each other). - */ - -#define RENORMCOUNT 97 - -void -negate_quat(float q[4], float nq[4]) -{ - nq[0] = -q[0]; - nq[1] = -q[1]; - nq[2] = -q[2]; - nq[3] = q[3]; -} - -void -add_quats(float q1[4], float q2[4], float dest[4]) -{ - static int count=0; - float t1[4], t2[4], t3[4]; - float tf[4]; - -#if 0 -printf("q1 = %f %f %f %f\n", q1[0], q1[1], q1[2], q1[3]); -printf("q2 = %f %f %f %f\n", q2[0], q2[1], q2[2], q2[3]); -#endif - - vcopy(q1,t1); - vscale(t1,q2[3]); - - vcopy(q2,t2); - vscale(t2,q1[3]); - - vcross(q2,q1,t3); - vadd(t1,t2,tf); - vadd(t3,tf,tf); - tf[3] = q1[3] * q2[3] - vdot(q1,q2); - -#if 0 -printf("tf = %f %f %f %f\n", tf[0], tf[1], tf[2], tf[3]); -#endif - - dest[0] = tf[0]; - dest[1] = tf[1]; - dest[2] = tf[2]; - dest[3] = tf[3]; - - if (++count > RENORMCOUNT) { - count = 0; - normalize_quat(dest); - } -} - -/* - * Quaternions always obey: a^2 + b^2 + c^2 + d^2 = 1.0 - * If they don't add up to 1.0, dividing by their magnitued will - * renormalize them. - * - * Note: See the following for more information on quaternions: - * - * - Shoemake, K., Animating rotation with quaternion curves, Computer - * Graphics 19, No 3 (Proc. SIGGRAPH'85), 245-254, 1985. - * - Pletinckx, D., Quaternion calculus as a basic tool in computer - * graphics, The Visual Computer 5, 2-13, 1989. - */ -static void -normalize_quat(float q[4]) -{ - int i; - float mag; - - mag = sqrt(q[0]*q[0] + q[1]*q[1] + q[2]*q[2] + q[3]*q[3]); - for (i = 0; i < 4; i++) q[i] /= mag; -} - -/* - * Build a rotation matrix, given a quaternion rotation. - * - */ -void -build_rotmatrix(float m[4][4], float q[4]) -{ - m[0][0] = 1.0 - 2.0 * (q[1] * q[1] + q[2] * q[2]); - m[0][1] = 2.0 * (q[0] * q[1] - q[2] * q[3]); - m[0][2] = 2.0 * (q[2] * q[0] + q[1] * q[3]); - m[0][3] = 0.0; - - m[1][0] = 2.0 * (q[0] * q[1] + q[2] * q[3]); - m[1][1]= 1.0 - 2.0 * (q[2] * q[2] + q[0] * q[0]); - m[1][2] = 2.0 * (q[1] * q[2] - q[0] * q[3]); - m[1][3] = 0.0; - - m[2][0] = 2.0 * (q[2] * q[0] - q[1] * q[3]); - m[2][1] = 2.0 * (q[1] * q[2] + q[0] * q[3]); - m[2][2] = 1.0 - 2.0 * (q[1] * q[1] + q[0] * q[0]); - m[2][3] = 0.0; - - m[3][0] = 0.0; - m[3][1] = 0.0; - m[3][2] = 0.0; - m[3][3] = 1.0; -} - diff --git a/lib/glut-3.7.6/progs/demos/bounce/trackball.h b/lib/glut-3.7.6/progs/demos/bounce/trackball.h deleted file mode 100644 index 61a1d8c35..000000000 --- a/lib/glut-3.7.6/progs/demos/bounce/trackball.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - * (c) Copyright 1993, 1994, 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. - */ -/* - * trackball.h - * A virtual trackball implementation - * Written by Gavin Bell for Silicon Graphics, November 1988. - */ - -/* - * Pass the x and y coordinates of the last and current positions of - * the mouse, scaled so they are from (-1.0 ... 1.0). - * - * The resulting rotation is returned as a quaternion rotation in the - * first paramater. - */ -void -trackball(float q[4], float p1x, float p1y, float p2x, float p2y); - -void -negate_quat(float *q, float *qn); - -/* - * Given two quaternions, add them together to get a third quaternion. - * Adding quaternions to get a compound rotation is analagous to adding - * translations to get a compound translation. When incrementally - * adding rotations, the first argument here should be the new - * rotation, the second and third the total rotation (which will be - * over-written with the resulting new total rotation). - */ -void -add_quats(float *q1, float *q2, float *dest); - -/* - * A useful function, builds a rotation matrix in Matrix based on - * given quaternion. - */ -void -build_rotmatrix(float m[4][4], float q[4]); - -/* - * This function computes a quaternion based on an axis (defined by - * the given vector) and an angle about which to rotate. The angle is - * expressed in radians. The result is put into the third argument. - */ -void -axis_to_quat(float a[3], float phi, float q[4]); - diff --git a/lib/glut-3.7.6/progs/demos/chess/Imakefile b/lib/glut-3.7.6/progs/demos/chess/Imakefile deleted file mode 100644 index ffe65cd2b..000000000 --- a/lib/glut-3.7.6/progs/demos/chess/Imakefile +++ /dev/null @@ -1,16 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1997. */ - -#include "../../../Glut.cf" - -TARGETS = chess - -SRCS = chess.c main.c animate.c pathplan.c texture.c - -OBJS = chess.o main.o animate.o pathplan.o texture.o - -AllTarget($(TARGETS)) - -NormalGlutProgramTarget(chess,$(OBJS)) - -DependTarget() diff --git a/lib/glut-3.7.6/progs/demos/chess/animate.c b/lib/glut-3.7.6/progs/demos/chess/animate.c deleted file mode 100644 index 2375d15d3..000000000 --- a/lib/glut-3.7.6/progs/demos/chess/animate.c +++ /dev/null @@ -1,131 +0,0 @@ -/* - * animate.c - part of the chess demo in the glut distribution. - * - * (C) Henk Kok (kok@wins.uva.nl) - * - * This file can be freely copied, changed, redistributed, etc. as long as - * this copyright notice stays intact. - */ - -#include -#include -#include -#include "chess.h" - -#define MOVE_FRAC 8 - -int frac; -int stage; -int piece; -int piece2; -int X, Y, NX, NY, XD, YD; -GLfloat CX1, CY1; -GLfloat CX2, CY2, CZ2; - -FILE *inpf = NULL; - -extern int path[10][10]; -extern int board[10][10]; -extern int cycle[10][10], cyclem, cycle2; -extern int stunt[10][10], stuntm, stunt2; - -void read_move(void) -{ - char buf[256]; - - if (!inpf) - inpf = fopen("chess.inp", "r"); - - if (!inpf) - { - fprintf(stderr, "Could not open file chess.inp for reading.\n"); - exit(1); - } - - if (feof(inpf)) - return; - - fgets(buf, 200, inpf); - - CX1 = NX = X = buf[0]-'a'+1; - CY1 = NY = Y = buf[1]-'0'; - CX2 = XD = buf[2]-'a'+1; - CY2 = YD = buf[3]-'0'; - - piece = board[X][Y]; - piece2 = board[XD][YD]; - board[X][Y] = 0; - board[XD][YD] = 0; - solve_path(X, Y, XD, YD); - stage = 0; - frac = 0; - cyclem = cycle[X][Y]; - cycle2 = cycle[XD][YD]; - stuntm = stunt[X][Y]; - stunt2 = stunt[XD][YD]; - switch(path[X][Y]) - { - case NORTH: NY--; break; - case SOUTH: NY++; break; - case WEST: NX--; break; - case EAST: NX++; break; - case NORTHWEST: NX--; NY--; break; - case NORTHEAST: NX++; NY--; break; - case SOUTHWEST: NX--; NY++; break; - case SOUTHEAST: NX++; NY++; break; - } - if (NY == YD && NX == XD) - stage = 1; -} - -void proceed(void) -{ - frac ++; - if (stage == 1) - { - if (piece2 && frac <= MOVE_FRAC * 2) - { - CZ2 = -((GLfloat) frac)/MOVE_FRAC/1.8; - return; - } - frac = 0; - piece2 = 0; - stage ++; - return; - } - else if (stage == 3) - return; - else - CZ2 = 0.0; - - if (frac >= MOVE_FRAC) - { - frac = 0; - X = NX; - Y = NY; - if (NX == XD && NY == YD) - { - board[XD][YD] = piece; - cycle[XD][YD] = cyclem; - stunt[XD][YD] = stuntm; - piece = 0; - read_move(); - return; - } - switch(path[X][Y]) - { - case NORTH: NY--; break; - case SOUTH: NY++; break; - case WEST: NX--; break; - case EAST: NX++; break; - case NORTHWEST: NX--; NY--; break; - case NORTHEAST: NX++; NY--; break; - case SOUTHWEST: NX--; NY++; break; - case SOUTHEAST: NX++; NY++; break; - } - if (NX == XD && NY == YD) - stage ++; - } - CX1 = ((GLfloat) (X*(MOVE_FRAC-frac) + NX*frac))/ MOVE_FRAC; - CY1 = ((GLfloat) (Y*(MOVE_FRAC-frac) + NY*frac))/ MOVE_FRAC; -} diff --git a/lib/glut-3.7.6/progs/demos/chess/chess.c b/lib/glut-3.7.6/progs/demos/chess/chess.c deleted file mode 100644 index 87aee6524..000000000 --- a/lib/glut-3.7.6/progs/demos/chess/chess.c +++ /dev/null @@ -1,995 +0,0 @@ -/* - * chess.c - part of the chess demo in the glut distribution. - * - * (C) Henk Kok (kok@wins.uva.nl) - * - * This file can be freely copied, changed, redistributed, etc. as long as - * this copyright notice stays intact. - */ - -#include -#include -#include -#include -#include "chess.h" - -#if 0 -/* Uncomment to debug various scenarios. */ -#undef GL_VERSION_1_1 -#undef GL_EXT_texture_object -#undef GL_EXT_texture -#endif - -#ifndef GL_VERSION_1_1 - -#if defined(GL_EXT_texture_object) && defined(GL_EXT_texture) -#define glGenTextures glGenTexturesEXT -#define glBindTexture glBindTextureEXT -#else -#define USE_DISPLAY_LISTS -#endif - -#endif - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -int texturing = 0; -int reflection = 0; -int chaos = 0; -int chaosPieces = 0; -int animating = 1; -static GLuint texName[3]; - -extern int path[10][10], piece, piece2; - -extern GLfloat CX1, CY1, CX2, CY2, CZ2; - -#define WIT 0 -#define ZWART 16 - -int board[10][10]; - -GLubyte white_square[TXSX][TXSY][3]; -GLubyte black_square[TXSX][TXSY][3]; -GLubyte wood[TXSX][TXSY][3]; - -extern GLfloat lightpos[]; - -GLfloat buf[256], phase; -GLfloat transl[48]; -int list[48]; - -GLfloat width[144], height[144]; -GLfloat bwidth, bheight; - -int cycle[10][10], cyclem, cycle2; -int stunt[10][10], stuntm, stunt2; - -GLfloat blackamb[4] = { 0.2, 0.1, 0.1, 0.5 }; -GLfloat blackdif[4] = { 0.2, 0.1, 0.0, 0.5 }; -GLfloat blackspec[4] = { 0.5, 0.5, 0.5, 0.5 }; - -GLfloat whiteamb[4] = { 0.7, 0.7, 0.4, 0.5 }; -GLfloat whitedif[4] = { 0.8, 0.7, 0.4, 0.5 }; -GLfloat whitespec[4] = { 0.8, 0.7, 0.4, 0.5 }; - -GLfloat copperamb[4] = { 0.24, 0.2, 0.07, 1.0 }; -GLfloat copperdif[4] = { 0.75, 0.61, 0.22, 1.0 }; -GLfloat copperspec[4] = { 0.32, 0.25, 0.17, 1.0 }; - -GLfloat darkamb[4] = { 0.10, 0.10, 0.10, 1.0 }; -GLfloat darkdif[4] = { 0.6, 0.6, 0.6, 1.0 }; -GLfloat darkspec[4] = { 0.25, 0.25, 0.25, 1.0 }; - -GLdouble ClipPlane[4] = { 0.0, 1.0, 0.0, 0.0 }; - -void white_texture(void) -{ - glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, whitedif); - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, whiteamb); - glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, whitespec); - glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 40.0); -} - -void black_texture(void) -{ - glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, blackdif); - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, blackamb); - glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, blackspec); - glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 40.0); -} - -void copper_texture(void) -{ - glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, copperdif); - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, copperamb); - glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, copperspec); - glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 40.0); -} - -void dark_texture(void) -{ - glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, darkdif); - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, darkamb); - glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, darkspec); - glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 40.0); -} - -void border_texture(void) -{ - glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, copperdif); - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, copperamb); - glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, copperspec); - glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 90.0); -} - -void init_textures(void) -{ -#if !defined(USE_DISPLAY_LISTS) - glGenTextures(3, texName); -#else - texName[0] = 1000; - texName[1] = 1001; - texName[2] = 1002; -#endif - GenerateTextures(); - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - -#if !defined(USE_DISPLAY_LISTS) - glBindTexture(GL_TEXTURE_2D, texName[0]); -#else - glNewList(texName[0], GL_COMPILE); -#endif - glTexImage2D(GL_TEXTURE_2D, 0, 3, TXSX, TXSY, 0, GL_RGB, - GL_UNSIGNED_BYTE, &wood[0][0][0]); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); -#if defined(USE_DISPLAY_LISTS) - glEndList(); -#endif - -#if !defined(USE_DISPLAY_LISTS) - glBindTexture(GL_TEXTURE_2D, texName[1]); -#else - glNewList(texName[1], GL_COMPILE); -#endif - glTexImage2D(GL_TEXTURE_2D, 0, 3, TXSX, TXSY, 0, GL_RGB, - GL_UNSIGNED_BYTE, &white_square[0][0][0]); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); -#if defined(USE_DISPLAY_LISTS) - glEndList(); -#endif - -#if !defined(USE_DISPLAY_LISTS) - glBindTexture(GL_TEXTURE_2D, texName[2]); -#else - glNewList(texName[2], GL_COMPILE); -#endif - glTexImage2D(GL_TEXTURE_2D, 0, 3, TXSX, TXSY, 0, GL_RGB, - GL_UNSIGNED_BYTE, &black_square[0][0][0]); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); -#if defined(USE_DISPLAY_LISTS) - glEndList(); -#endif -} - -void do_border(void) -{ - glPushMatrix(); - glTranslatef(-0.5, 0.0, -0.5); - if (texturing) - { -#if !defined(USE_DISPLAY_LISTS) - glBindTexture(GL_TEXTURE_2D, texName[0]); -#else - glCallList(texName[0]); -#endif - glEnable(GL_TEXTURE_2D); - } else - border_texture(); - - glBegin(GL_QUADS); - glNormal3f(0.0, 1.0, 0.0); - glTexCoord2f(0.0, 0.0); glVertex3f(0.0, 0.08, 0.0); - glTexCoord2f(0.6, 0.0); glVertex3f(8.0, 0.08, 0.0); - glTexCoord2f(0.6, 0.6); glVertex3f(8.5, 0.08, -0.5); - glTexCoord2f(0.0, 0.6); glVertex3f(-0.5, 0.08, -0.5); - - glTexCoord2f(0.0, 0.0); glVertex3f(8.0, 0.08, 0.0); - glTexCoord2f(0.6, 0.0); glVertex3f(8.0, 0.08, 8.0); - glTexCoord2f(0.6, 0.6); glVertex3f(8.5, 0.08, 8.5); - glTexCoord2f(0.0, 0.6); glVertex3f(8.5, 0.08, -0.5); - - glTexCoord2f(0.0, 0.0); glVertex3f(8.0, 0.08, 8.0); - glTexCoord2f(0.6, 0.0); glVertex3f(0.0, 0.08, 8.0); - glTexCoord2f(0.6, 0.6); glVertex3f(-0.5, 0.08, 8.5); - glTexCoord2f(0.0, 0.6); glVertex3f(8.5, 0.08, 8.5); - - glTexCoord2f(0.0, 0.0); glVertex3f(0.0, 0.08, 8.0); - glTexCoord2f(0.6, 0.0); glVertex3f(0.0, 0.08, 0.0); - glTexCoord2f(0.6, 0.6); glVertex3f(-0.5, 0.08, -0.5); - glTexCoord2f(0.0, 0.6); glVertex3f(-0.5, 0.08, 8.5); - glEnd(); - - glBegin(GL_QUADS); - glNormal3f(0.0, 0.0, 1.0); - glTexCoord2f(0.0, 0.0); glVertex3f(0.0, 0.08, 0.0); - glTexCoord2f(0.6, 0.0); glVertex3f(8.0, 0.08, 0.0); - glTexCoord2f(0.6, 0.6); glVertex3f(8.0, -0.08, 0.0); - glTexCoord2f(0.0, 0.6); glVertex3f(0.0, -0.08, 0.0); - - glNormal3f(0.0, 1.0, 0.0); - glTexCoord2f(0.0, 0.0); glVertex3f(8.0, 0.08, 0.0); - glTexCoord2f(0.6, 0.0); glVertex3f(8.0, 0.08, 8.0); - glTexCoord2f(0.6, 0.6); glVertex3f(8.0, -0.08, 8.0); - glTexCoord2f(0.0, 0.6); glVertex3f(8.0, -0.08, 0.0); - - glNormal3f(0.0, 0.0, 1.0); - glTexCoord2f(0.0, 0.0); glVertex3f(8.0, 0.08, 8.0); - glTexCoord2f(0.6, 0.0); glVertex3f(0.0, 0.08, 8.0); - glTexCoord2f(0.6, 0.6); glVertex3f(0.0, -0.08, 8.0); - glTexCoord2f(0.0, 0.6); glVertex3f(8.0, -0.08, 8.0); - - glNormal3f(0.0, 1.0, 0.0); - glTexCoord2f(0.0, 0.0); glVertex3f(0.0, 0.08, 8.0); - glTexCoord2f(0.6, 0.0); glVertex3f(0.0, 0.08, 0.0); - glTexCoord2f(0.6, 0.6); glVertex3f(0.0, -0.08, 0.0); - glTexCoord2f(0.0, 0.6); glVertex3f(0.0, -0.08, 8.0); - glEnd(); - - glBegin(GL_QUADS); - glNormal3f(0.0, 0.0, 1.0); - glTexCoord2f(0.0, 0.0); glVertex3f(-0.5, 0.08, -0.5); - glTexCoord2f(0.6, 0.0); glVertex3f(8.5, 0.08, -0.5); - glTexCoord2f(0.6, 0.6); glVertex3f(8.5, -0.08, -0.5); - glTexCoord2f(0.0, 0.6); glVertex3f(-0.5, -0.08, -0.5); - - glNormal3f(0.0, 1.0, 0.0); - glTexCoord2f(0.0, 0.0); glVertex3f(8.5, 0.08, -0.5); - glTexCoord2f(0.6, 0.0); glVertex3f(8.5, 0.08, 8.5); - glTexCoord2f(0.6, 0.6); glVertex3f(8.5, -0.08, 8.5); - glTexCoord2f(0.0, 0.6); glVertex3f(8.5, -0.08, -0.5); - - glNormal3f(0.0, 0.0, 1.0); - glTexCoord2f(0.0, 0.0); glVertex3f(8.5, 0.08, 8.5); - glTexCoord2f(0.6, 0.0); glVertex3f(-0.5, 0.08, 8.5); - glTexCoord2f(0.6, 0.6); glVertex3f(-0.5, -0.08, 8.5); - glTexCoord2f(0.0, 0.6); glVertex3f(8.5, -0.08, 8.5); - - glNormal3f(0.0, 1.0, 0.0); - glTexCoord2f(0.0, 0.0); glVertex3f(-0.5, 0.08, 8.5); - glTexCoord2f(0.6, 0.0); glVertex3f(-0.5, 0.08, -0.5); - glTexCoord2f(0.6, 0.6); glVertex3f(-0.5, -0.08, -0.5); - glTexCoord2f(0.0, 0.6); glVertex3f(-0.5, -0.08, 8.5); - glEnd(); - - if (texturing) - glDisable(GL_TEXTURE_2D); - - glPopMatrix(); -} - -void do_vlakje(void) -{ - glColor4f(1.0, 1.0, 1.0, 1.0); - glDisable(GL_LIGHTING); - glPushMatrix(); - glTranslatef(-0.5, 0.0, -0.5); - glBegin(GL_QUADS); - glVertex3f(0.0, 0.0, 0.0); - glVertex3f(8.0, 0.0, 0.0); - glVertex3f(8.0, 0.0, 8.0); - glVertex3f(0.0, 0.0, 8.0); - glEnd(); - glPopMatrix(); - glEnable(GL_LIGHTING); -} - -void do_board(void) -{ - int x,y; - - glPushMatrix(); - glTranslatef(-0.5, 0.0, -0.5); - white_texture(); - if (texturing) - { -#if !defined(USE_DISPLAY_LISTS) - glBindTexture(GL_TEXTURE_2D, texName[1]); -#else - glCallList(texName[1]); -#endif - glEnable(GL_TEXTURE_2D); - } - - glBegin(GL_QUADS); - glNormal3f(0.0, 1.0, 0.0); - for (x=0;x<8;x++) - { - for (y=x%2;y<8;y+=2) - { - glTexCoord2f(0.2*x, 0.2*y); glVertex3f(x, 0, y); - glTexCoord2f(0.17+0.2*x, 0.2*y); glVertex3f(x+1, 0, y); - glTexCoord2f(0.17+0.2*x, 0.17+0.2*y); glVertex3f(x+1, 0, y+1); - glTexCoord2f(0.2*x, 0.17+0.2*y); glVertex3f(x, 0, y+1); - } - } - glEnd(); - if (texturing) - { - glDisable(GL_TEXTURE_2D); - -#if !defined(USE_DISPLAY_LISTS) - glBindTexture(GL_TEXTURE_2D, texName[2]); -#else - glCallList(texName[2]); -#endif - glEnable(GL_TEXTURE_2D); - } else - black_texture(); - - glBegin(GL_QUADS); - glNormal3f(0.0, 1.0, 0.0); - for (x=0;x<8;x++) - { - for (y=1-(x%2);y<8;y+=2) - { - glTexCoord2f(0.2*x, 0.2*y); glVertex3f(x, 0, y); - glTexCoord2f(0.17+0.2*x, 0.2*y); glVertex3f(x+1, 0, y); - glTexCoord2f(0.17+0.2*x, 0.17+0.2*y); glVertex3f(x+1, 0, y+1); - glTexCoord2f(0.2*x, 0.17+0.2*y); glVertex3f(x, 0, y+1); - } - } - glEnd(); - if (texturing) - glDisable(GL_TEXTURE_2D); - glPopMatrix(); -} - -void do_solid(GLfloat *f, int sz, GLfloat width) -{ - GLfloat nx, ny, s; - GLfloat length; - int i,j; - - for (i=0;i bwidth) - bwidth = buf[i]; -*/ - if (buf[i+1] > bheight) - bheight = buf[i+1]; - } - - glBegin(GL_QUAD_STRIP); - for (i=2;i bwidth) - bwidth = buf[i]; - if (buf[i+1] > bheight) - bheight = buf[i+1]; - } - - for (i=2;i= 0) - (*cl)++; - if (*cl < 0 && ((rand()%300) < 4) && chaos) - { - chaosPieces++; - *cl = 0; - *st = rand() % 6; - } - if (*cl >= 48) { - chaosPieces--; - if (chaosPieces == 0 && !chaos) { - if (!animating && (speed == 0)) - glutIdleFunc(NULL); - } - *cl = -1; - } - - if (*cl < 0) - { - glPushMatrix(); - glTranslatef(x - 1.0, ((x==CX2 && y==CY2)?CZ2:0.0), 8.0 - y); - if (color == ZWART && pc == PAARD) - glRotatef(180.0, 0.0, 1.0, 0.0); - glScalef(1.2, 1.2, 1.2); - glCallList(pc+list[0]); - glPopMatrix(); - return; - } - - glPushMatrix(); - switch (*st) - { - case 0: - glTranslatef(x - 1.0, transl[(*cl)>=0?*cl:0] + - ((x==CX2 && y==CY2)?CZ2:0.0), 8.0 - y); - if (color == ZWART && pc == PAARD) - glRotatef(180.0, 0.0, 1.0, 0.0); - glScalef(1.2, 1.2, 1.2); - glCallList(list[(*cl)>=0?*cl:0]+pc); - break; - case 1: - case 2: - glTranslatef(x - 1.0, transl[(*cl)>=0?*cl:0] + - ((x==CX2 && y==CY2)?CZ2:0.0), 8.0 - y); - if (color == ZWART && pc == PAARD) - glRotatef(180.0, 0.0, 1.0, 0.0); - if ((*cl > 16) && (*cl < 32)) - { - glTranslatef(0.0, height[list[*cl]+pc]/2, 0.0); - if (*st == 1) - glRotatef(((*cl)-16) * 22.5, 1.0, 0.0, 0.0); - else - glRotatef(-((*cl)-16) * 22.5, 1.0, 0.0, 0.0); - glTranslatef(0.0, -height[list[*cl]+pc]/2, 0.0); - } - glScalef(1.2, 1.2, 1.2); - glCallList(list[*cl]+pc); - break; - case 3: - glTranslatef(x - 1.0, ((x==CX2 && y==CY2)?CZ2:0.0), 8.0 - y); - if (color == ZWART && pc == PAARD) - glRotatef(180.0, 0.0, 1.0, 0.0); - a = ((GLfloat) (*cl)) * M_PI / 12; - s = sin(a); - glRotatef(15*s, 0.0, 0.0, 1.0); - glTranslatef(0.0, width[list[0]+pc]*s*s, 0.0); - glScalef(1.2, 1.2, 1.2); - glCallList(list[0] + pc); - break; - default: - glTranslatef(x - 1.0, ((x==CX2 && y==CY2)?CZ2:0.0), 8.0 - y); - if (color == ZWART && pc == PAARD) - glRotatef(180.0, 0.0, 1.0, 0.0); - a = ((GLfloat) (*cl)) * M_PI / 12; - s = sin(a); - glRotatef(15*s, 0.0, 0.0, 1.0); - glRotatef((*cl) * 30, 0.0, 1.0, 0.0); - glTranslatef(0.0, width[list[0]+pc]*s*s, 0.0); - glScalef(1.2, 1.2, 1.2); - glCallList(list[0]+pc); - break; - } - glPopMatrix(); -} - -void do_pieces(void) -{ - int i,j; - - copper_texture(); - for (i=0;i<10;i++) - { - for (j=0;j<10;j++) - { - if (board[i][j]&16 || !(board[i][j]&15)) - continue; - do_piece(board[i][j]&15, i, j, &stunt[i][j], &cycle[i][j], WIT); - } - } - - if ((piece&16) == WIT && piece > 0) - { - glPushMatrix(); - glTranslatef(0.0, 0.2, 0.0); - do_piece(piece&15, CX1, CY1, &stuntm, &cyclem, WIT); - glPopMatrix(); - } - - if ((piece2&16) == WIT && piece2 > 0) - do_piece(piece2&15, CX2, CY1, &stunt2, &cycle2, WIT); - - dark_texture(); - for (i=0;i<10;i++) - { - for (j=0;j<10;j++) - { - if (!(board[i][j]&16) || !board[i][j]) - continue; - do_piece(board[i][j]&15, i, j, &stunt[i][j], &cycle[i][j], ZWART); - } - } - - if ((piece&16) == ZWART && piece > 0) - { - glPushMatrix(); - glTranslatef(0.0, 0.2, 0.0); - do_piece(piece&15, CX1, CY1, &stuntm, &cyclem, ZWART); - glPopMatrix(); - } - - if ((piece2&16) == ZWART && piece2 > 0) - do_piece(piece2&15, CX2, CY2, &stunt2, &cycle2, ZWART); -} - -void do_display(void) -{ - glDisable(GL_DEPTH_TEST); - /* glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); */ - if (reflection) { - glEnable(GL_STENCIL_TEST); - glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE); - glStencilFunc(GL_ALWAYS, 1, 0xffffffff); - } - do_vlakje(); - glEnable(GL_DEPTH_TEST); - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - - if (reflection) - { - glStencilFunc(GL_EQUAL, 1, 0xffffffff); - glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); - - glPushMatrix(); - glScalef(1.0, -1.0, 1.0); - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - glClipPlane(GL_CLIP_PLANE1, ClipPlane); - glEnable(GL_CLIP_PLANE1); - do_pieces(); - glPopMatrix(); - glDisable(GL_CLIP_PLANE1); - glDisable(GL_STENCIL_TEST); - - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - } - -/* - * Also without texturing I want to blend, to keep the contrast of the board - * consistent. - */ - - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - - do_board(); - - glDisable(GL_BLEND); - - do_border(); - - glClipPlane(GL_CLIP_PLANE1, ClipPlane); - glEnable(GL_CLIP_PLANE1); - do_pieces(); - glDisable(GL_CLIP_PLANE1); -} diff --git a/lib/glut-3.7.6/progs/demos/chess/chess.dsp b/lib/glut-3.7.6/progs/demos/chess/chess.dsp deleted file mode 100644 index 0657d0c5f..000000000 --- a/lib/glut-3.7.6/progs/demos/chess/chess.dsp +++ /dev/null @@ -1,108 +0,0 @@ -# Microsoft Developer Studio Project File - Name="chess" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=chess - 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 "chess.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 "chess.mak" CFG="chess - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "chess - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "chess - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "chess - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "chess - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "chess - Win32 Release" -# Name "chess - Win32 Debug" -# Begin Source File - -SOURCE=.\animate.c -# End Source File -# Begin Source File - -SOURCE=.\chess.c -# End Source File -# Begin Source File - -SOURCE=.\chess.h -# End Source File -# Begin Source File - -SOURCE=.\main.c -# End Source File -# Begin Source File - -SOURCE=.\pathplan.c -# End Source File -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/demos/chess/chess.h b/lib/glut-3.7.6/progs/demos/chess/chess.h deleted file mode 100644 index 4347d132c..000000000 --- a/lib/glut-3.7.6/progs/demos/chess/chess.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * chess.h - part of the chess demo in the glut distribution. - * - * (C) Henk Kok (kok@wins.uva.nl) - * - * This file can be freely copied, changed, redistributed, etc. as long as - * this copyright notice stays intact. - */ - -#define PION 1 -#define TOREN 2 -#define PAARD 3 -#define LOPER 4 -#define KONING 5 -#define DAME 6 - -#define NORTH 1 -#define SOUTH 2 -#define EAST 3 -#define WEST 4 -#define NORTHWEST 5 -#define NORTHEAST 6 -#define SOUTHWEST 7 -#define SOUTHEAST 8 - -#define ACC 8 -#define TXSX 128 -#define TXSY 128 - -extern void GenerateTextures(void); -extern void read_move(void); -extern int solve_path(int x1, int y1, int x2, int y2); -extern void proceed(void); -extern void init(void); -extern void do_display(void); -extern void init_lists(void); diff --git a/lib/glut-3.7.6/progs/demos/chess/chess.inp b/lib/glut-3.7.6/progs/demos/chess/chess.inp deleted file mode 100644 index f4e91be52..000000000 --- a/lib/glut-3.7.6/progs/demos/chess/chess.inp +++ /dev/null @@ -1,62 +0,0 @@ -d2d4 -g8f6 -c2c4 -g7g6 -b1c3 -f8g7 -e2e4 -d7d6 -f2f3 -e8g8 -h8f8 -c1e3 -c7c6 -f1d3 -a7a6 -g1e2 -b7b5 -e1g1 -h1f1 -b8d7 -a1c1 -e7e5 -a2a3 -e5d4 -e2d4 -c8b7 -c4b5 -c6b5 -f1e1 -d7e5 -d3f1 -f8e8 -e3f2 -d6d5 -e4d5 -f6d5 -c3d5 -d8d5 -a3a4 -g7h6 -c1a1 -e5c4 -a4b5 -a6b5 -a1a8 -e8a8 -d1b3 -b7c6 -f1d3 -c4d6 -b3d5 -c6d5 -d4b5 -d6b5 -d3b5 -h6g7 -b2b4 -g7c3 -e1d1 -d5b3 -d1b1 -b3a2 diff --git a/lib/glut-3.7.6/progs/demos/chess/main.c b/lib/glut-3.7.6/progs/demos/chess/main.c deleted file mode 100644 index fa0bc7db4..000000000 --- a/lib/glut-3.7.6/progs/demos/chess/main.c +++ /dev/null @@ -1,200 +0,0 @@ -/* - * main.c - part of the chess demo in the glut distribution. - * - * (C) Henk Kok (kok@wins.uva.nl) - * - * This file can be freely copied, changed, redistributed, etc. as long as - * this copyright notice stays intact. - */ - -#include -#include -#include - -#include "chess.h" - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -#define M_TEXTURING 1 -#define M_REFLECTION 2 -#define M_CHAOS 3 -#define M_ANIMATION 4 - -extern int reflection, texturing, animating, chaos; - -GLfloat lightpos[4] = { 2.0, 1.0, 1.0, 0.0 }; -GLfloat lightamb[4] = { 1.0, 1.0, 1.0, 1.0 }; -GLfloat lightdif[4] = { 1.0, 1.0, 1.0, 1.0 }; - -float angle = 0.0, a2 = 45.0; -int speed = 0; -GLfloat px = -3.5, py = -16.5, pz = 9.5; - -void SetCamera(void) -{ - gluLookAt(0.0,2.0,2.0, 0.0,2.0,0.0, 0.0,1.0,0.0); - glRotatef(a2, 1.0, 0.0, 0.0); - glRotatef(angle, 0.0, 1.0, 0.0); - glTranslatef(px, -pz, py); - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); -} - -void display(void) -{ - glLoadIdentity(); - SetCamera(); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); - do_display(); - glutSwapBuffers(); -} - -void myinit(void) -{ - glShadeModel (GL_SMOOTH); - glFrontFace(GL_CCW); - glEnable(GL_DEPTH_TEST); - - glLoadIdentity(); - glClearColor(0.0, 0.0, 0.0, 1.0); - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - glLightfv(GL_LIGHT0, GL_AMBIENT, lightamb); - glLightfv(GL_LIGHT0, GL_DIFFUSE, lightdif); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - init_lists(); -} - -void Animate(void) -{ - px -= speed * 0.02 * sin(angle*M_PI/180); - py += speed * 0.02 * cos(angle*M_PI/180); - if (animating) - proceed(); - glutPostRedisplay(); -} - -extern int chaosPieces; - -/* ARGSUSED1 */ -void parsekey(unsigned char key, int x, int y) -{ - switch (key) - { - case 27: exit(0); - case 13: speed = 0; break; - case 'a': a2 += 5; break; - case 'z': a2 -= 5; break; - case 'A': pz += 0.5; break; - case 'Z': pz -= 0.5; break; - default: - return; - } - glutPostRedisplay(); - if (animating || (chaosPieces > 0) || (speed != 0)) - glutIdleFunc(Animate); - else - glutIdleFunc(NULL); -} - -/* ARGSUSED1 */ -void parsekey_special(int key, int x, int y) -{ - switch (key) - { - case GLUT_KEY_UP: speed += 1; break; - case GLUT_KEY_DOWN: speed -= 1; break; - case GLUT_KEY_RIGHT: angle += 5; break; - case GLUT_KEY_LEFT: angle -= 5; break; - case GLUT_KEY_HOME: - angle = 0.0, a2 = 45.0; - speed = 0; - px = -3.5, py = -16.5, pz = 9.5; - break; - default: - return; - } - glutPostRedisplay(); - if (animating || (chaosPieces > 0) || (speed != 0)) - glutIdleFunc(Animate); - else - glutIdleFunc(NULL); -} - -void handle_main_menu(int item) -{ - switch(item) { - case M_REFLECTION: - reflection = !reflection; - glutPostRedisplay(); - break; - case M_TEXTURING: - texturing = !texturing; - glutPostRedisplay(); - break; - case M_ANIMATION: - animating = !animating; - if (animating || (chaosPieces > 0) || (speed != 0)) - glutIdleFunc(Animate); - else - glutIdleFunc(NULL); - break; - case M_CHAOS: - chaos = !chaos; - if (animating || chaos || (speed != 0)) - glutIdleFunc(Animate); - break; - } -} - -void -Visible(int visible) -{ - if (visible == GLUT_VISIBLE) { - if (animating || (chaosPieces > 0) || (speed != 0)) - glutIdleFunc(Animate); - } else { - glutIdleFunc(NULL); - } -} - -void myReshape(int w, int h) -{ - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glFrustum (-0.1, 0.1, -0.1, 0.1, 0.3, 200.0); - glMatrixMode (GL_MODELVIEW); - glViewport(0, 0, w, h); - glLoadIdentity(); - SetCamera(); -} - -int main(int argc, char *argv[]) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_DEPTH | GLUT_RGB | GLUT_DOUBLE | GLUT_MULTISAMPLE | GLUT_STENCIL); - glutCreateWindow("Chess"); - glutDisplayFunc(display); - glutInitWindowPosition(200, 0); - glutInitWindowSize(300, 300); - glutKeyboardFunc(parsekey); - glutSpecialFunc(parsekey_special); - glutReshapeFunc(myReshape); - glutVisibilityFunc(Visible); - myinit(); - - glutCreateMenu(handle_main_menu); - glutAddMenuEntry("Toggle texturing", M_TEXTURING); - glutAddMenuEntry("Toggle reflection", M_REFLECTION); - glutAddMenuEntry("-----------------", -1); - glutAddMenuEntry("Toggle animation", M_ANIMATION); - glutAddMenuEntry("Toggle CHAOS!", M_CHAOS); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - glutSwapBuffers(); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/demos/chess/pathplan.c b/lib/glut-3.7.6/progs/demos/chess/pathplan.c deleted file mode 100644 index 8feeb4406..000000000 --- a/lib/glut-3.7.6/progs/demos/chess/pathplan.c +++ /dev/null @@ -1,85 +0,0 @@ -/* - * pathplan.c - part of the chess demo in the glut distribution. - * - * (C) Henk Kok (kok@wins.uva.nl) - * - * This file can be freely copied, changed, redistributed, etc. as long as - * this copyright notice stays intact. - */ - -#include "chess.h" - -extern int board[10][10]; - -int path[10][10]; -int hops[10][10]; - -int steps; -int cur_hops; - -void init_board(void) -{ - int i,j; - for (i=0;i<10;i++) - { - for(j=0;j<10;j++) - { - hops[i][j] = 0; - path[i][j] = (board[i][j]?-1:0); - } - } -} - -void test_exit(int i, int j, int dir) -{ - if (i<0 || i>9 || j<0 || j>9) - return; - if (path[i][j]) - return; - steps ++; - path[i][j] = dir; - hops[i][j] = cur_hops + 1; -} - -int solve_path(int x1, int y1, int x2, int y2) -{ - int i,j; - init_board(); - path[x2][y2] = 9; - hops[x2][y2] = 1; - path[x1][y1] = 0; - cur_hops = 1; - for (;;) - { - steps = 0; - for (i=0;i<10;i++) - { - for (j=0;j<10;j++) - { - if (hops[i][j] != cur_hops) - continue; - test_exit(i, j-1, SOUTH); - test_exit(i, j+1, NORTH); - test_exit(i-1, j, EAST); - test_exit(i+1, j, WEST); - } - } - for (i=0;i<10;i++) - { - for (j=0;j<10;j++) - { - if (hops[i][j] != cur_hops) - continue; - test_exit(i-1, j-1, SOUTHEAST); - test_exit(i+1, j-1, SOUTHWEST); - test_exit(i-1, j+1, NORTHEAST); - test_exit(i+1, j+1, NORTHWEST); - } - } - cur_hops++; - if (path[x1][y1]) - return 1; - if (steps == 0) - return 0; - } -} diff --git a/lib/glut-3.7.6/progs/demos/chess/texture.c b/lib/glut-3.7.6/progs/demos/chess/texture.c deleted file mode 100644 index 4c78a0eb1..000000000 --- a/lib/glut-3.7.6/progs/demos/chess/texture.c +++ /dev/null @@ -1,203 +0,0 @@ -/* - * chess.c - part of the chess demo in the glut distribution. - * - * (C) Henk Kok (kok@wins.uva.nl) - * - * This file can be freely copied, changed, redistributed, etc. as long as - * this copyright notice stays intact. - */ - -/* - * Marble texture - shamelessly ripped from siggraph92_C23.shar - */ - -#include -#include -#include -#include -#include "chess.h" - -#define DOT(a,b) (a[0] * b[0] + a[1] * b[1] + a[2] * b[2]) - -#define B 256 - -static int p[B + B + 2]; -static GLfloat g[B + B + 2][3]; -static int start = 1; - -#define setup(i,b0,b1,r0,r1) \ - t = vec[i] + 10000.; \ - b0 = ((int)t) & (B-1); \ - b1 = (b0+1) & (B-1); \ - r0 = t - (int)t; \ - r1 = r0 - 1.; - -GLfloat noise3(GLfloat vec[3]) -{ - int bx0, bx1, by0, by1, bz0, bz1, b00, b10, b01, b11; - GLfloat rx0, rx1, ry0, ry1, rz0, rz1, *q, sx, sy, sz, a, b, c, d, t, u, v; - register int i, j; - - if (start) { - start = 0; - init(); - } - - setup(0, bx0,bx1, rx0,rx1); - setup(1, by0,by1, ry0,ry1); - setup(2, bz0,bz1, rz0,rz1); - - i = p[ bx0 ]; - j = p[ bx1 ]; - - b00 = p[ i + by0 ]; - b10 = p[ j + by0 ]; - b01 = p[ i + by1 ]; - b11 = p[ j + by1 ]; -#define at(rx,ry,rz) ( rx * q[0] + ry * q[1] + rz * q[2] ) - -#define surve(t) ( t * t * (3. - 2. * t) ) - -#define lerp(t, a, b) ( a + t * (b - a) ) - - sx = surve(rx0); - sy = surve(ry0); - sz = surve(rz0); - - - q = g[ b00 + bz0 ] ; u = at(rx0,ry0,rz0); - q = g[ b10 + bz0 ] ; v = at(rx1,ry0,rz0); - a = lerp(sx, u, v); - - q = g[ b01 + bz0 ] ; u = at(rx0,ry1,rz0); - q = g[ b11 + bz0 ] ; v = at(rx1,ry1,rz0); - b = lerp(sx, u, v); - - c = lerp(sy, a, b); /* interpolate in y at lo x */ - - q = g[ b00 + bz1 ] ; u = at(rx0,ry0,rz1); - q = g[ b10 + bz1 ] ; v = at(rx1,ry0,rz1); - a = lerp(sx, u, v); - - q = g[ b01 + bz1 ] ; u = at(rx0,ry1,rz1); - q = g[ b11 + bz1 ] ; v = at(rx1,ry1,rz1); - b = lerp(sx, u, v); - - d = lerp(sy, a, b); /* interpolate in y at hi x */ - - return 1.5 * lerp(sz, c, d); /* interpolate in z */ -} - -void -init(void) -{ - int i, j, k; - GLfloat v[3], s; - -/* Create an array of random gradient vectors uniformly on the unit sphere */ - - srand(1); - for (i = 0 ; i < B ; i++) { - do { /* Choose uniformly in a cube */ - for (j=0 ; j<3 ; j++) - v[j] = (GLfloat)((rand() % (B + B)) - B) / B; - s = DOT(v,v); - } while (s > 1.0); /* If not in sphere try again */ - s = sqrt(s); - for (j = 0 ; j < 3 ; j++) /* Else normalize */ - g[i][j] = v[j] / s; - } - -/* Create a pseudorandom permutation of [1..B] */ - - for (i = 0 ; i < B ; i++) - p[i] = i; - for (i = B ; i > 0 ; i -= 2) { - k = p[i]; - p[i] = p[j = rand() % B]; - p[j] = k; - } - -/* Extend g and p arrays to allow for faster indexing */ - - for (i = 0 ; i < B + 2 ; i++) { - p[B + i] = p[i]; - for (j = 0 ; j < 3 ; j++) - g[B + i][j] = g[i][j]; - } -} - -GLfloat turbulence(GLfloat x, GLfloat y, GLfloat z, GLfloat lofreq, GLfloat hifreq) -{ - GLfloat freq, t, p[3]; - - p[0] = x + 123.456; - p[1] = y; - p[2] = z; - - t = 0; - for (freq = lofreq ; freq < hifreq ; freq *= 2.) { - t += fabs(noise3(p)) / freq; - p[0] *= 2.; - p[1] *= 2.; - p[2] *= 2.; - } - return t - 0.3; /* readjust to make mean value = 0.0 */ -} - -GLfloat marble(GLfloat x, GLfloat y, GLfloat z) -{ - GLfloat m; - m = turbulence(x, y, z, 0.3, 400.0); - if (m > 1.0) - m = 1.0; - if (m < 0.0) - m = 0.0; - return m; -} - -extern GLubyte white_square[TXSX][TXSY][3]; -extern GLubyte black_square[TXSX][TXSY][3]; -extern GLubyte wood[TXSX][TXSY][3]; - -void GenerateTextures(void) -{ - int i,j,k; - GLfloat x,y,t,w,b; - for (i=0;i 1.0) - t = 1.0; - - wood[i][j][0] = (0.6*t)*255; - wood[i][j][1] = (0.4*t)*255; - wood[i][j][2] = (0.5-0.4*t)*255; - - x = ((GLfloat) i)/20.0; - y = ((GLfloat) j)/20.0; - t = marble(x, y, 0.0); - - t = 0.2 + t; - if (t > 1.0) - t = 1.0; - - w = t; - b = 0.8 -t; - if (b < 0.0 ) - b = 0.0; - - for (k=0;k<3;k++) - { - white_square[i][j][k] = w*255; - black_square[i][TXSY-j][k] = b*255; - } - } - } -} diff --git a/lib/glut-3.7.6/progs/demos/geoface/Imakefile b/lib/glut-3.7.6/progs/demos/geoface/Imakefile deleted file mode 100644 index 30214a6ca..000000000 --- a/lib/glut-3.7.6/progs/demos/geoface/Imakefile +++ /dev/null @@ -1,15 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1997. */ - -#include "../../../Glut.cf" - -TARGETS = geoface - -SRCS = display.c fileio.c main.c make_face.c muscle.c -OBJS = display.o fileio.o main.o make_face.o muscle.o - -AllTarget($(TARGETS)) - -NormalGlutProgramTarget(geoface,$(OBJS)) - -DependTarget() diff --git a/lib/glut-3.7.6/progs/demos/geoface/README b/lib/glut-3.7.6/progs/demos/geoface/README deleted file mode 100644 index 329c5ac4f..000000000 --- a/lib/glut-3.7.6/progs/demos/geoface/README +++ /dev/null @@ -1,32 +0,0 @@ - -The geoface example in this directory is a modified version of the code -presented in Appendix 1 of Frederic I Parke and Keith Waters's most -interesting book "Computer Facial Animation" (A.K. Peters, ISBN -1-56881-014-8). Information about the book can be found at: - - http://www.research.digital.com/CRL/personal/waters/book.html - -From the book's Preface: - - This book is about computer facial models, computer generated facial - images, and facial animation. In particular it concerns the - principles of creating face models and the manipulation or control of - computer generated facial attributes. In addition, various sections - in the book describe and explain the development of specific computer - facial animation techniques over the past twenty years, as well as - those expected in the near future. - -The original Appendix 1 code (using the aux library) can be found at: - - http://www.research.digital.com/CRL/books/facebook/appendix1/appendix1.html - -I've improved the code to add menus, better mouse motion handling, -arrow key support, and less terminal output. - -DEC has a program called DECface that looks even more involved: - - http://www.research.digital.com/CRL/projects/DECface/DECface.html - -If the example here intrigues you, you'll definitely want the book. - -- Mark Kilgard diff --git a/lib/glut-3.7.6/progs/demos/geoface/display.c b/lib/glut-3.7.6/progs/demos/geoface/display.c deleted file mode 100644 index 223d6fc9c..000000000 --- a/lib/glut-3.7.6/progs/demos/geoface/display.c +++ /dev/null @@ -1,313 +0,0 @@ -/* ========================================================================== - DISPLAY_C -============================================================================= - - FUNCTION NAMES - - void paint_muscles -- displays the muscles. - void paint_polyline -- paint the polyline. - paint_polygons -- display the polygons. - calculate_polygon_vertex_normal -- calculate the vertex norms. - calc_normal -- calculate a normal. - - C SPECIFICATIONS - - void paint_muscles ( HEAD *face ) - void paint_polyline ( HEAD *face ) - paint_polygons ( HEAD *face, int type, int normals ) - calculate_polygon_vertex_normal ( HEAD *face ) - calc_normal ( float *p1, float *p2, float *p3, - float *norm ) - - DESCRIPTION - - This module is responsible for displaying the face geometry. - This module comes as is with no warranties. - - HISTORY - 16-Dec-94 Keith Waters (waters) at DEC's Cambridge Research Lab - Created. - -============================================================================ */ - -#include /* C header for any math functions */ -#include /* C header for standard I/O */ -#include /* For String compare */ -#include -#ifndef _WIN32 -#include -#include -#endif -#include /* OpenGl headers */ - -#include "head.h" /* local header for the face */ - -void calc_normal ( float *p1, float *p2, float *p3, float *norm ); - -/* ========================================================================= */ -/* paint_muscles */ -/* ========================================================================= */ -/* -** Displays the face muscles. -** -*/ - -#define PAINT_MUSCLES_DEBUG 0 -void paint_muscles ( HEAD *face ) -{ - int i,j; - float v1[3], v2[3] ; - - glLineWidth ( 3.0 ) ; - glColor3f ( 100.0, 200.0, 200.0 ) ; - - for ( i=0; inmuscles; i++ ) { - - for (j=0; j<3; j++) { - v1[j] = face->muscle[i]->head[j] ; - v2[j] = face->muscle[i]->tail[j] ; - } - -#if PAINT_MUSCLES_DEBUG - fprintf (stderr, "head x: %f y: %f z: %f\n", v1[0], v1[1], v1[2] ) ; - fprintf (stderr, "tail x: %f y: %f z: %f\n\n", v2[0], v2[1], v2[2] ) ; -#endif - - glBegin ( GL_LINE_STRIP ) ; - glVertex3f ( v1[0], v1[1], v1[2] ) ; - glVertex3f ( v2[0], v2[1], v2[2] ) ; - glEnd ( ) ; - } - glLineWidth ( 1.0 ) ; -} - -/* ========================================================================= */ -/* paint_polyline */ -/* ========================================================================= */ -/* -** Displays the polyline. -** -*/ - -void paint_polyline ( HEAD *face ) -{ - int i,j,cnt ; - float v1[3] ; - static float r ; - - glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ) ; - glLineWidth ( 1.0 ) ; - glColor3f ( 100.0, 100.0, 0.0 ) ; - - glPushMatrix ( ) ; - glRotatef ( r, 1.0, 1.0, 1.0 ) ; - - glBegin ( GL_LINE_STRIP ) ; - for (cnt=0, i=0; inpolylinenodes; i++ ) { - - for (j=0; j<3; j++, cnt++) - v1[j] = face->polyline[cnt] ; - -#if PAINT_POLYLINE_DEBUG - printf ("x: %f y: %f z: %f\n", v1[0], v1[1], v1[2] ) ; -#endif - - glVertex3f ( v1[0], v1[1], v1[2] ) ; - } - - glEnd ( ) ; - - glPopMatrix ( ) ; - glFlush ( ) ; - -} - - -/* ========================================================================= */ -/* paint_polygons */ -/* ========================================================================= */ -/* -** Paints the polygons of the face. -** Type indicates if they are to be -** drawn (type=0), -** flat shaded (type=1), -** smooth shaded (type=2). -*/ - -void paint_polygons ( HEAD *face, int type, int normals ) -{ - int i, j ; - float v1[3], v2[3], v3[3] ; - float norm1[3], norm2[3], norm3[3] ; - float vn1[3], vn2[3], vn3[3] ; - - glLineWidth ( 2.0 ) ; - - for (i=0; inpolygons; i++ ) - { - for (j=0; j<3; j++) { - v1[j] = face->polygon[i]->vertex[0]->xyz[j] ; - v2[j] = face->polygon[i]->vertex[1]->xyz[j] ; - v3[j] = face->polygon[i]->vertex[2]->xyz[j] ; - } - - if ( type == 0 ) { - - for (j=0; j<3; j++) { - norm1[j] = face->polygon[i]->vertex[0]->norm[j] ; - norm2[j] = face->polygon[i]->vertex[1]->norm[j] ; - norm3[j] = face->polygon[i]->vertex[2]->norm[j] ; - } - glBegin ( GL_LINE_LOOP ) ; { - glNormal3f ( norm1[0], norm1[1], norm1[2] ) ; - glVertex3f ( v1[0], v1[1], v1[2] ) ; - glNormal3f ( norm2[0], norm2[1], norm2[2] ) ; - glVertex3f ( v2[0], v2[1], v2[2] ) ; - glNormal3f ( norm3[0], norm3[1], norm3[2] ) ; - glVertex3f ( v3[0], v3[1], v3[2] ) ; - } glEnd ( ) ; - - } /* end if drawn */ - - if ( type == 1 ) { - - for (j=0; j<3; j++) { - norm1[j] = face->polygon[i]->vertex[0]->norm[j] ; - norm2[j] = face->polygon[i]->vertex[1]->norm[j] ; - norm3[j] = face->polygon[i]->vertex[2]->norm[j] ; - } - glBegin ( GL_TRIANGLES ) ; { - glNormal3f ( norm1[0], norm1[1], norm1[2] ) ; - glVertex3f ( v1[0], v1[1], v1[2] ) ; - glNormal3f ( norm2[0], norm2[1], norm2[2] ) ; - glVertex3f ( v2[0], v2[1], v2[2] ) ; - glNormal3f ( norm3[0], norm3[1], norm3[2] ) ; - glVertex3f ( v3[0], v3[1], v3[2] ) ; - } glEnd ( ) ; - - } /* end if drawn */ - - - else if ( type == 1) { - for (j=0; j<3; j++) { - norm1[j] = face->polygon[i]->vertex[0]->norm[j] ; - norm2[j] = face->polygon[i]->vertex[1]->norm[j] ; - norm3[j] = face->polygon[i]->vertex[2]->norm[j] ; - } - } /* end if flat */ - - else if ( type == 2 ) { - - averaged_vertex_normals ( face, i, norm1, norm2, norm3 ) ; - - } /* end if smoothed */ - - if ( type ) { - - glBegin ( GL_TRIANGLES ) ; { - glNormal3f ( norm1[0], norm1[1], norm1[2] ) ; - glVertex3f ( v1[0], v1[1], v1[2] ) ; - glNormal3f ( norm2[0], norm2[1], norm2[2] ) ; - glVertex3f ( v2[0], v2[1], v2[2] ) ; - glNormal3f ( norm3[0], norm3[1], norm3[2] ) ; - glVertex3f ( v3[0], v3[1], v3[2] ) ; - } glEnd ( ) ; - } /* endif painted */ - - if ( normals ) { - for (j=0; j<3; j++) { - vn1[j] = face->polygon[i]->vertex[0]->xyz[j] + norm1[j] ; - vn2[j] = face->polygon[i]->vertex[1]->xyz[j] + norm2[j] ; - vn3[j] = face->polygon[i]->vertex[2]->xyz[j] + norm3[j] ; - } - - glBegin ( GL_LINE_STRIP ) ; { - glVertex3f ( v1[0], v1[1], v1[2] ) ; - glVertex3f ( vn1[0], vn1[1], vn1[2] ) ; - } glEnd ( ) ; - - - glBegin ( GL_LINES ) ; { - glVertex3f ( v2[0], v2[1], v2[2] ) ; - glVertex3f ( vn2[0], vn2[1], vn2[2] ) ; - } glEnd ( ) ; - - - glBegin ( GL_LINES ) ; { - glVertex3f ( v3[0], v3[1], v3[2] ) ; - glVertex3f ( vn3[0], vn3[1], vn3[2] ) ; - } glEnd ( ) ; - - } - } - glLineWidth ( 1.0 ) ; -} - -/* ========================================================================= */ -/* calculate_polygon_vertex_normal. */ -/* ========================================================================= */ -/* -** As it says. -*/ - -void -calculate_polygon_vertex_normal ( HEAD *face ) -{ - int i,j,k ; - float p1[3], p2[3], p3[3] ; - float norm[3] ; - for (i=0; inpolygons; i++ ) - { - for (j=0; j<3; j++) - p1[j] = face->polygon[i]->vertex[0]->xyz[j] ; - for (j=0; j<3; j++) - p2[j] = face->polygon[i]->vertex[1]->xyz[j] ; - for (j=0; j<3; j++) - p3[j] = face->polygon[i]->vertex[2]->xyz[j] ; - - calc_normal ( p1, p2, p3, norm ) ; - - for (j=0; j<3; j++) - for (k=0; k<3; k++) - face->polygon[i]->vertex[j]->norm[k] = norm[k] ; - } -} - -/* ========================================================================= */ -/* calc_normal. */ -/* ========================================================================= */ -/* -** Calculates the normal vector from three vertices. -*/ -void -calc_normal ( float *p1, float *p2, float *p3, float *norm ) -{ - float coa, cob, coc ; - float px1, py1, pz1 ; - float px2, py2, pz2 ; - float px3, py3, pz3 ; - - float absvec ; - - px1 = p1[0] ; - py1 = p1[1] ; - pz1 = p1[2] ; - - px2 = p2[0] ; - py2 = p2[1] ; - pz2 = p2[2] ; - - px3 = p3[0] ; - py3 = p3[1] ; - pz3 = p3[2] ; - - coa = -(py1 * (pz2-pz3) + py2*(pz3-pz1) + py3*(pz1-pz2)) ; - cob = -(pz1 * (px2-px3) + pz2*(px3-px1) + pz3*(px1-px2)) ; - coc = -(px1 * (py2-py3) + px2*(py3-py1) + px3*(py1-py2)) ; - - absvec = sqrt ((double) ((coa*coa) + (cob*cob) + (coc*coc))) ; - - norm[0] = coa/absvec ; - norm[1] = cob/absvec ; - norm[2] = coc/absvec ; -} diff --git a/lib/glut-3.7.6/progs/demos/geoface/faceline.dat b/lib/glut-3.7.6/progs/demos/geoface/faceline.dat deleted file mode 100644 index 0a4a26dc0..000000000 --- a/lib/glut-3.7.6/progs/demos/geoface/faceline.dat +++ /dev/null @@ -1,257 +0,0 @@ -256 - 0.000 -2.280 8.875 - 0.000 -2.456 8.980 - 0.000 -2.701 9.005 - -0.509 -2.230 8.865 - -0.577 -2.414 8.962 - -0.585 -2.670 8.987 - -1.027 -2.201 8.544 - -1.135 -2.372 8.658 - -1.182 -2.556 8.657 - -1.570 -2.221 8.025 - -1.805 -2.354 8.037 - -1.151 -3.134 8.433 - -0.565 -3.181 8.583 - 0.000 -3.216 8.631 - 0.000 -3.545 8.640 - -0.582 -3.517 8.557 - -1.158 -3.443 8.329 - -1.999 -2.568 7.895 - -2.121 -2.222 7.917 - -2.395 -2.073 7.692 - -2.213 -2.797 7.639 - -1.358 -3.775 8.198 - -0.837 -3.880 8.520 - -0.590 -3.910 8.645 - 0.000 -3.914 8.646 - 0.000 -4.564 8.583 - -0.700 -4.532 8.584 - -1.058 -4.461 8.459 - -1.579 -4.290 8.085 - -1.995 -3.660 7.538 - -2.572 -2.969 7.100 - -2.746 -1.859 7.124 - -2.990 -1.690 6.640 - -2.751 -3.033 6.688 - -2.147 -4.156 7.145 - -1.620 -4.770 7.945 - -1.081 -4.944 8.281 - -0.699 -4.994 8.360 - 0.000 -5.021 8.360 - 0.000 -5.412 7.852 - -0.602 -5.444 7.853 - -0.990 -5.418 7.854 - -1.597 -5.169 7.416 - -2.342 -4.202 6.524 - -3.374 -1.344 5.866 - -3.118 -3.043 5.708 - -2.559 -4.377 5.351 - -1.600 -5.205 6.353 - -0.945 -5.501 6.834 - -0.542 -5.601 7.067 - 0.000 -5.636 7.068 - -3.232 -3.283 3.861 - -3.686 -2.281 4.257 - -3.797 -0.831 4.703 - -4.136 -0.236 3.398 - -4.093 -1.041 3.153 - -3.959 -1.660 2.889 - -4.295 0.021 2.170 - -3.485 -2.252 2.286 - -2.740 -3.866 3.388 - -2.315 -4.570 4.819 - -0.966 -5.443 4.589 - -0.556 -5.511 4.589 - 0.000 -5.553 4.589 - 0.000 -7.061 3.726 - -0.436 -6.971 3.553 - -0.926 -6.872 3.196 - -2.414 -4.428 2.801 - -3.120 -3.336 1.701 - -3.204 -2.934 1.002 - -3.120 -5.511 0.149 - -3.119 -5.510 0.702 - -2.343 -6.297 1.993 - -2.389 -6.885 1.708 - -1.053 -8.199 2.359 - -0.336 -8.622 2.554 - 0.000 -8.714 2.559 - 0.000 -2.278 8.878 - 0.000 -2.064 9.078 - 0.000 -1.830 9.119 - -0.484 -1.720 9.116 - -0.512 -2.003 9.070 - -0.521 -2.231 8.876 - -1.170 -1.928 9.000 - -1.083 -2.093 8.703 - -1.032 -2.198 8.549 - -1.773 -2.057 8.299 - -1.572 -2.217 8.022 - -2.039 -1.735 8.072 - -1.285 -1.456 8.655 - -0.456 -1.314 8.986 - 0.000 -1.461 8.920 - 0.000 -0.710 8.876 - -0.237 -0.648 8.971 - -0.446 -0.648 8.971 - -1.316 -0.911 8.428 - -2.206 -1.333 7.855 - -2.274 -1.067 7.654 - -1.276 -0.534 8.239 - -0.753 -0.441 8.580 - -0.534 -0.074 8.714 - -0.191 -0.056 9.150 - -0.171 -0.426 9.051 - 0.000 -0.441 9.053 - 0.000 -0.232 9.570 - -0.168 -0.224 9.570 - -0.560 0.058 9.376 - -0.767 0.046 9.042 - -0.843 -0.128 8.806 - -0.978 -0.276 8.684 - -1.091 -0.204 8.513 - -0.905 -0.325 8.292 - -1.320 -0.188 8.010 - -0.895 0.194 8.202 - -1.002 0.217 8.462 - -1.077 0.307 8.703 - -1.017 0.325 8.904 - -0.900 0.099 9.033 - -0.574 0.252 9.485 - -0.118 -0.099 9.722 - 0.000 -0.098 9.723 - 0.000 0.512 9.855 - -0.158 0.508 9.820 - -0.587 0.550 9.557 - -0.660 0.776 9.277 - -0.242 1.137 9.532 - -0.208 0.854 9.713 - 0.000 0.862 9.749 - 0.000 1.192 9.559 - 0.000 1.445 9.385 - -0.250 1.387 9.361 - -0.495 1.190 9.132 - -0.526 1.443 8.894 - -0.284 1.740 9.158 - 0.000 1.817 9.200 - 0.000 2.180 8.995 - -0.322 2.100 8.927 - -0.667 1.571 8.598 - -1.312 0.849 8.093 - -2.093 0.282 7.775 - -2.327 -0.805 7.560 - -3.108 -0.078 7.267 - -3.182 0.649 7.412 - -3.805 0.868 6.790 - -4.108 1.022 5.942 - -4.360 1.772 4.387 - -4.187 2.611 4.596 - -4.028 1.464 6.118 - -3.708 2.236 6.211 - -3.359 1.693 6.896 - -2.876 1.352 7.271 - -2.100 1.207 7.559 - -1.337 1.263 8.027 - -1.270 1.664 7.809 - -0.723 2.023 8.332 - -0.357 2.487 8.669 - 0.000 2.608 8.699 - 0.000 2.909 8.460 - -0.392 2.825 8.420 - -0.623 2.411 8.173 - -0.853 2.189 7.760 - -1.119 2.259 7.352 - -1.460 1.887 7.332 - -2.095 1.531 7.388 - -2.765 1.605 7.294 - -3.156 1.949 6.974 - -3.399 2.397 6.443 - -3.657 2.603 6.413 - -3.904 2.477 5.990 - -4.092 1.936 5.653 - -3.994 2.776 5.641 - -4.121 3.106 4.611 - -4.105 3.756 4.772 - -3.883 2.972 6.298 - -3.928 4.609 5.060 - -3.866 3.453 6.724 - -3.788 3.260 6.846 - -3.556 2.930 6.956 - -3.201 2.669 6.903 - -3.001 2.353 7.274 - -2.571 2.177 7.578 - -2.113 2.147 7.561 - -1.602 2.246 7.687 - -1.210 2.404 7.438 - -0.967 2.609 7.023 - -0.638 2.684 7.661 - -0.584 3.052 8.055 - -0.431 3.211 8.189 - 0.000 3.262 8.208 - 0.000 3.664 8.101 - -0.487 3.639 8.101 - -0.760 3.420 7.947 - -0.829 3.210 7.554 - -1.006 2.963 7.129 - -1.309 3.290 7.370 - -1.772 3.474 7.615 - -2.268 3.493 7.824 - -2.704 3.315 7.781 - -3.129 3.065 7.391 - -3.421 3.337 7.438 - -3.624 3.650 7.348 - -3.730 3.872 7.238 - -3.285 4.274 7.783 - -2.569 4.558 8.182 - -1.841 4.676 8.353 - -1.067 4.327 8.469 - -1.150 4.072 8.222 - -1.853 4.265 8.296 - -2.509 4.191 8.259 - -3.195 3.970 7.895 - -2.963 3.637 7.879 - -2.381 3.830 8.100 - -1.782 3.850 8.071 - -1.227 3.657 8.072 - -0.450 4.377 8.175 - -0.991 4.862 8.093 - -1.731 5.054 7.962 - -2.474 4.937 7.775 - -3.170 4.658 7.356 - -3.605 4.334 6.861 - -3.890 3.957 6.326 - -3.941 3.197 5.815 - -3.590 5.230 6.286 - -3.102 5.495 6.831 - -2.330 5.690 7.264 - -1.576 5.648 7.632 - -0.888 5.445 7.804 - -0.406 5.084 7.869 - 0.000 4.670 7.912 - 0.000 6.172 7.196 - -0.354 6.247 7.229 - -0.746 6.328 7.263 - -1.426 6.432 7.212 - -2.244 6.373 6.969 - -3.105 6.092 6.495 - -3.639 5.648 5.945 - -3.562 6.154 5.544 - -3.109 6.630 5.986 - -2.176 7.198 6.426 - -1.281 7.365 6.600 - -0.547 7.488 6.717 - -0.286 7.510 6.750 - 0.000 7.522 6.764 - -0.973 2.625 7.123 - -1.041 2.870 7.229 - -1.295 3.155 7.470 - -1.693 3.288 7.715 - -2.196 3.267 7.924 - -2.545 3.146 7.881 - -2.856 2.944 7.491 - -3.091 2.634 7.003 - -2.846 2.481 7.474 - -2.383 2.398 7.878 - -2.012 2.370 7.961 - -1.574 2.388 7.987 - -1.197 2.479 7.638 diff --git a/lib/glut-3.7.6/progs/demos/geoface/fileio.c b/lib/glut-3.7.6/progs/demos/geoface/fileio.c deleted file mode 100644 index c1f95e35e..000000000 --- a/lib/glut-3.7.6/progs/demos/geoface/fileio.c +++ /dev/null @@ -1,289 +0,0 @@ -/* ========================================================================== - FILEIO_C -============================================================================= - - FUNCTION NAMES - - read_polygon_indices -- reads the polygon indices file. - read_polygon_line -- read the face polyline. - read_muscles -- reads the face muscles. - read_expression_vectors -- reads a vector of expressions. - add_muscle_to_face -- add a muscle to the face. - - C SPECIFICATIONS - - read_polygon_indices ( FileName, face ) - read_polygon_line ( FileName, face ) - read_muscles ( FileName, face ) - read_expression_vectors ( FileName, face ) - add_muscle_to_face ( m, face ) - - DESCRIPTION - - This module is responsible for reading the face data files. - This module comes as is with no warranties. - - SIDE EFFECTS - Unknown. - - HISTORY - Created 16-Dec-94 Keith Waters at DEC's Cambridge Research Lab. - Modified 22-Nov-96 Sing Bing Kang (sbk@crl.dec.com) - modified function read_expression_vectors() to allocate - memory to face->expression (done once) - -============================================================================ */ - -#include /* C header for any math functions */ -#include /* C header for standard I/O */ -#include /* For String compare */ -#include -#ifndef _WIN32 -#include -#include -#endif - -/* - * from /usr/include/sys/types.h - * Just in case TRUE and FALSE are not defined - */ - -#ifndef TRUE -#define TRUE 1 -#endif - -#ifndef FALSE -#define FALSE 0 -#endif - - -#include "head.h" /* local header for the face data structure */ -#include "memory.h" - -void add_muscle_to_face ( MUSCLE *m , HEAD *face ); - -/* ========================================================================= */ -/* read_polygon_indices */ -/* ========================================================================= */ -/* -** Read in the face data file (x,y,z) -** -*/ - -void -read_polygon_indices ( char *FileName, HEAD *face ) - { - FILE *InFile ; - int i, ii ; - - /* - * Check the FileName. - */ - if (( InFile = fopen ( FileName, "r" )) == 0 ) { - fprintf ( stderr, "can't open input file: %s\n", FileName ) ; - exit(-1) ; - } - - fscanf ( InFile,"%d", &face->npindices ) ; - - /* - * Allocate some memory. - */ - face->indexlist = ( int * ) malloc ( face->npindices*4 * sizeof ( int )) ; - - for( i=0, ii=0; inpindices; i++, ii+=4 ) - fscanf(InFile,"%d%d%d%d", - &face->indexlist[ii], &face->indexlist[ii+1], - &face->indexlist[ii+2], &face->indexlist[ii+3] ) ; - - fclose( InFile ) ; - - } - -/* ========================================================================= */ -/* read_polygon_line */ -/* ========================================================================= */ -/* -** Read in the face data file (x,y,z) -** -*/ - -void -read_polygon_line ( char *FileName, HEAD *face ) -{ - FILE *InFile ; - int i, ii ; - - /* - * Check the FileName. - */ - if (( InFile = fopen ( FileName, "r" )) == 0 ) { - fprintf ( stderr, "can't open input file: %s\n", FileName ) ; - exit(-1) ; - } - - fscanf ( InFile, "%d", &face->npolylinenodes ) ; - - /* - * Allocate some memory. - */ - face->polyline = ( float * ) malloc ( face->npolylinenodes*3 * sizeof ( float )) ; - - for ( i=0, ii=0; inpolylinenodes; i++, ii+=3 ) { - - fscanf ( InFile,"%f%f%f", - &face->polyline[ii], - &face->polyline[ii+1], - &face->polyline[ii+2] ) ; - } - - fclose ( InFile ) ; - -} - -/* ============================================================= - read_muscles ( FileName, face ) - ========================================================== */ -/* -** This function reads in the muscles. -** -*/ - -void -read_muscles ( char *FileName, HEAD *face ) -{ - FILE *Infile; - int i, nm ; - MUSCLE *m ; - - /* - * Open the file to be read. - */ - if((Infile = fopen(FileName,"r")) == 0) { - fprintf(stderr,"Opening error on file:%10s\n", FileName) ; - exit(0); - } - fscanf ( Infile, "%d", &nm ) ; - - for ( i=0; i < nm; i++ ) { - - m = _new ( MUSCLE ) ; - - fscanf (Infile, "%s %f %f %f %f %f %f %f %f %f %f", - &(*m->name), - &m->head[0], &m->head[1], &m->head[2], - &m->tail[0], &m->tail[1], &m->tail[2], - &m->fs, &m->fe, &m->zone, &m->clampv ) ; - - m->active = FALSE ; - m->mstat = 0.0 ; - - if (verbose) { - fprintf(stderr,"%s: %d\n========================\nhx: %2.2f hy: %2.2f hz: %2.2f\ntx: %2.2f ty: %2.2f tz: %2.2f\n fall start: %2.2f\n fall end: %2.2f\n zone: %2.2f\n clampv: %2.2f mstat: %2.2f\n\n", - m->name, i, - m->head[0], - m->head[1], - m->head[2], - m->tail[0], - m->tail[1], - m->tail[2], - m->fs, - m->fe, - m->zone, - m->clampv, - m->mstat ) ; - } - - add_muscle_to_face ( m, face ) ; - - } - - fclose(Infile) ; -} - - -/* ========================================================================= */ -/* read_expression_vectors */ -/* ========================================================================= */ -/* sbk - added allocated var - 11/22/96 */ - -/* -** Read in the expression vectors. -*/ -void -read_expression_vectors ( char *FileName, HEAD *face ) -{ - FILE *InFile ; - int i, k ; - EXPRESSION *e ; - static int allocated = 0; - - /* - * Check the FileName. - */ - if (( InFile = fopen ( FileName, "r" )) == 0 ) { -#if 0 /* Silently ignore the lack of expression vectors. I never got the file. -mjk */ - fprintf ( stderr, "can't open input file: %s\n", FileName ) ; -#endif - face->expression = NULL; - return; - } - - fscanf ( InFile, "%d", &face->nexpressions ) ; - fprintf( stderr, "Number of expressions = %d\n", face->nexpressions ) ; - - /* - * Allocate some memory. - */ - if (!allocated) - face->expression = (EXPRESSION **)malloc( face->nexpressions* - sizeof(EXPRESSION *) ); - - for ( i=0; inexpressions; i++) { - if (allocated) - e = face->expression[i]; - else - e = face->expression[i] = _new(EXPRESSION) ; - - fscanf ( InFile, "%s\n", &(*e->name) ) ; - - fprintf ( stderr, "%s\n", e->name ) ; - - for ( k=0; k < 17; k++) { - - fscanf ( InFile,(k==16) ? "%f\n" : "%f ", &e->m[k]) ; - fprintf (stderr,"%2.2f ", e->m[k] ) ; - } - fprintf (stderr, "\n") ; - } - - fclose ( InFile ) ; - - allocated = 1; -} - -/* =============================================================== - add_muscle_to_face ( m, face ) - =============================================================== */ -/* -** adds a muscle to the face muscle list. -** -*/ - -void -add_muscle_to_face ( MUSCLE *m , HEAD *face ) -{ - int nn ; - - if(face->nmuscles == 0) - face->muscle = _new_array(MUSCLE *, 50) ; - else if(face->nmuscles % 50 == 0) - face->muscle = _resize_array(face->muscle,MUSCLE *,face->nmuscles+50) ; - - nn = face->nmuscles ; - face->muscle[nn] = m ; - - face->nmuscles++ ; - -} - diff --git a/lib/glut-3.7.6/progs/demos/geoface/geoface.dsp b/lib/glut-3.7.6/progs/demos/geoface/geoface.dsp deleted file mode 100644 index c1c8a7d9d..000000000 --- a/lib/glut-3.7.6/progs/demos/geoface/geoface.dsp +++ /dev/null @@ -1,112 +0,0 @@ -# Microsoft Developer Studio Project File - Name="geoface" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=geoface - 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 "geoface.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 "geoface.mak" CFG="geoface - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "geoface - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "geoface - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "geoface - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "geoface - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "geoface - Win32 Release" -# Name "geoface - Win32 Debug" -# Begin Source File - -SOURCE=.\display.c -# End Source File -# Begin Source File - -SOURCE=.\fileio.c -# End Source File -# Begin Source File - -SOURCE=.\head.h -# End Source File -# Begin Source File - -SOURCE=.\main.c -# End Source File -# Begin Source File - -SOURCE=.\make_face.c -# End Source File -# Begin Source File - -SOURCE=.\memory.h -# End Source File -# Begin Source File - -SOURCE=.\muscle.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/demos/geoface/head.h b/lib/glut-3.7.6/progs/demos/geoface/head.h deleted file mode 100644 index 8b02cf8ed..000000000 --- a/lib/glut-3.7.6/progs/demos/geoface/head.h +++ /dev/null @@ -1,101 +0,0 @@ -typedef struct TAG { - - int poly ; /* an index to a tagged polygon */ - int vert ; /* an index to the tagged vertex */ - -} TAG ; - -typedef struct EXPRESSION { - - char name[80] ; /* name of the expression */ - float m[20] ; /* an expression vector */ - float bias ; /* an bias control for the muscles */ - -} EXPRESSION ; - - -typedef struct MUSCLE { - - int active ; /* activity switch for the muscle */ - float head[3] ; /* head of the muscle vector */ - float tail[3] ; /* tail of the muscle vector */ - float zone, /* zone of influence */ - fs, fe, mval ; /* zone, start, end, contraction */ - char name[80] ; /* name of the muscle */ - float clampv ; /* clamping value */ - float mstat ; /* current contraction value */ - -} MUSCLE ; - - -typedef struct VERTEX { - - float xyz[3] ; /* x,y,z of the vertex (modified) */ - float nxyz[3] ; /* x,y,z of the vertex (never modified) */ - int np ; /* number of polygons associated with node */ - int plist[30] ; /* list of polygons associated with node */ - float norm[3] ; /* polygon vertex normal */ - -} VERTEX ; - - -typedef struct POLYGON { - - VERTEX *vertex[3] ; /* pointer to an array of three vertices */ - -} POLYGON ; - - -typedef struct HEAD { - - int npindices ; /* number of polygon indices */ - int *indexlist ; /* integer index list of size npindices*4 */ - - int npolylinenodes ; /* number of nodes in the poly line */ - float *polyline ; /* xyz nodes in the poly line */ - - int npolygons ; /* total number of polygons */ - POLYGON **polygon ; /* pointer to the polygon list */ - - int neyelidtags ; /* number of eyelid tags */ - TAG **eyelidtag ; /* pointer to the eyelid tags */ - float eyelidang ; /* rotation of the eyelids */ - - int njawtags ; /* number of jaw tags */ - TAG **jawtag ; /* pointer to the eyelid tags */ - float jawang ; /* rotation of the jaw */ - - int nmuscles ; /* number of muscles in the face */ - MUSCLE **muscle ; /* pointer to the muscle list */ - - int nexpressions ; /* number of expressions in the */ - EXPRESSION **expression ; /* point to an expression vector */ - -} HEAD ; - -/* main.c */ -extern int verbose; - -/* make_face.c */ -HEAD *create_face ( char *, char * ) ; -void averaged_vertex_normals ( HEAD *face, int p, - float *n1, float *n2, float *n3 ) ; -void face_reset ( HEAD *face ); -void expressions ( HEAD *face, int e ); -void data_struct ( HEAD *face ); - -/* display.c */ -void paint_polyline ( HEAD *face ) ; -void paint_polygons ( HEAD *face, int type, int normals ) ; -void calculate_polygon_vertex_normal ( HEAD *face ); -void paint_muscles ( HEAD *face ); - -/* muscle.c */ -void activate_muscle (HEAD *face, float *vt, float *vh, float fstart, float fin, float ang, float val); - -/* fileio.c */ -void read_polygon_indices ( char *FileName, HEAD *face ); -void read_polygon_line ( char *FileName , HEAD *face ); -void read_muscles ( char *FileName , HEAD *face ); -void read_expression_vectors ( char *FileName , HEAD *face ); - diff --git a/lib/glut-3.7.6/progs/demos/geoface/index.dat b/lib/glut-3.7.6/progs/demos/geoface/index.dat deleted file mode 100644 index 8eafd7f49..000000000 --- a/lib/glut-3.7.6/progs/demos/geoface/index.dat +++ /dev/null @@ -1,239 +0,0 @@ -238 -1 2 5 4 -2 3 6 5 -7 4 5 8 -8 5 6 9 -1000 11 8 9 -10 7 8 11 -6 3 14 13 -9 6 13 12 -1000 11 9 12 -11 12 17 18 -12 13 16 17 -13 14 15 16 -16 15 25 24 -1000 16 24 23 -17 16 23 22 -18 17 22 21 -1000 19 11 18 -20 19 18 21 -24 25 26 27 -23 24 27 28 -22 23 28 29 -21 22 29 30 -32 20 21 31 -31 21 30 35 -35 30 29 36 -29 28 37 36 -28 27 38 37 -27 26 39 38 -38 39 40 41 -37 38 41 42 -36 37 42 43 -35 36 43 44 -34 31 35 44 -33 32 31 34 -45 33 34 46 -46 34 44 47 -47 44 43 48 -48 43 42 49 -42 41 50 49 -41 40 51 50 -50 51 64 63 -49 50 63 62 -48 49 62 61 -1000 47 48 61 -63 64 65 66 -66 65 77 76 -67 66 76 75 -62 63 66 67 -73 67 75 74 -68 62 67 73 -60 61 62 68 -52 47 61 60 -53 46 47 52 -54 45 46 53 -55 54 53 56 -1000 58 55 56 -1000 58 56 57 -56 53 52 57 -1000 58 57 59 -57 52 60 59 -58 59 69 70 -59 60 68 69 -70 69 72 71 -69 68 73 72 -1000 72 73 74 -1000 58 146 55 -146 145 54 55 -145 144 45 54 -1000 144 142 45 -142 141 33 45 -141 98 32 33 -98 97 20 32 -97 89 19 20 -1000 89 87 19 -1000 19 87 11 -87 88 10 11 -87 85 86 88 -1000 87 84 85 -84 81 82 85 -85 82 83 86 -81 80 79 82 -82 79 78 83 -89 90 84 87 -90 91 81 84 -91 92 80 81 -94 93 92 91 -1000 95 94 91 -96 95 91 90 -97 96 90 89 -98 99 96 97 -99 100 95 96 -100 101 102 95 -102 103 94 95 -103 104 93 94 -106 105 104 103 -1000 102 106 103 -1000 107 106 102 -1000 109 101 100 -1000 110 109 100 -111 110 100 112 -111 117 118 110 -110 118 108 109 -118 119 107 109 -119 120 106 107 -120 121 105 106 -123 122 121 120 -124 123 120 119 -117 124 119 118 -115 116 117 111 -113 112 100 99 -141 113 99 98 -114 115 111 112 -1000 114 112 113 -116 125 124 117 -1000 124 127 123 -127 128 122 123 -126 129 128 127 -125 126 127 124 -131 130 129 126 -132 131 126 125 -115 132 125 116 -134 135 130 131 -133 134 131 132 -133 132 115 114 -139 114 113 140 -140 113 141 142 -1000 143 140 142 -1000 144 143 142 -1000 148 144 145 -170 148 145 146 -1000 147 170 146 -147 171 169 170 -169 149 148 170 -149 150 144 148 -150 151 143 144 -151 152 140 143 -152 153 139 140 -1000 153 138 139 -139 138 133 114 -1000 153 138 139 -138 137 134 133 -137 136 135 134 -156 157 136 137 -155 156 137 138 -154 155 138 153 -1000 152 154 153 -159 158 157 156 -160 159 156 155 -161 160 155 154 -163 162 161 154 -164 163 154 152 -165 164 152 151 -166 165 151 150 -167 166 150 149 -169 168 167 149 -171 174 168 169 -174 177 178 168 -168 178 179 167 -179 180 166 167 -180 181 165 166 -181 182 164 165 -182 183 163 164 -183 184 162 163 -1000 184 185 162 -185 186 161 162 -186 187 160 161 -187 188 159 160 -188 189 158 159 -191 190 189 188 -192 191 188 187 -193 192 187 186 -194 193 186 185 -214 193 194 195 -214 207 192 193 -208 207 214 213 -213 214 195 196 -212 213 196 197 -211 212 197 198 -200 211 198 199 -178 200 199 179 -177 201 200 178 -201 210 211 200 -210 209 212 211 -209 208 213 212 -206 191 192 207 -205 206 207 208 -204 205 208 209 -203 204 209 210 -202 203 210 201 -176 202 201 177 -1000 174 176 177 -1000 191 215 190 -215 228 229 190 -228 231 230 229 -231 242 243 230 -232 241 242 231 -232 231 228 227 -227 228 215 216 -216 215 191 206 -217 216 206 205 -226 227 216 217 -233 232 227 226 -240 241 232 233 -239 240 233 234 -234 233 226 225 -225 226 217 218 -218 217 205 204 -219 218 204 203 -224 225 218 219 -235 234 225 224 -238 239 234 235 -237 238 235 236 -236 235 224 223 -223 224 219 220 -221 220 202 176 -220 219 203 202 -1000 175 237 236 -1000 175 236 223 -175 223 220 221 -222 221 176 174 -1000 222 174 171 -175 221 222 173 -173 222 171 172 -1000 172 171 147 -147 171 169 170 -244 245 194 185 -245 246 195 194 -246 247 196 195 -247 248 197 196 -248 249 198 197 -249 250 199 198 -250 251 179 199 -179 251 252 180 -181 180 252 253 -182 181 253 254 -183 182 254 255 -184 183 255 256 -185 184 256 244 diff --git a/lib/glut-3.7.6/progs/demos/geoface/main.c b/lib/glut-3.7.6/progs/demos/geoface/main.c deleted file mode 100644 index 8545fdfc8..000000000 --- a/lib/glut-3.7.6/progs/demos/geoface/main.c +++ /dev/null @@ -1,572 +0,0 @@ -/* aux2glut conversion Copyright (c) Mark J. Kilgard, 1997 */ - -/* ========================================================================== - MAIN_C -============================================================================= - - FUNCTION NAMES - - movelight -- moves the light source. - rotatexface -- rotates the face about the X axis. - rotateyface -- rotates the face about the Y axis. - myinit -- local initialization. - faceinit -- glutInit(&argc, argv); initialize the face data. - display -- display functions. - myReshape -- window respahe callback. - error_exit -- error function. - usage -- usage function. - GLenum Key -- keyboard mappings. - main -- main program. - - - C SPECIFICATIONS - - void movelight ( int x, int y ) - void rotatexface ( int x, int y ) - void rotateyface ( int x, int y ) - void myinit ( void ) - faceinit ( void ) - void display ( void ) - void myReshape ( GLsizei w, GLsizei h ) - void error_exit ( char *error_message ) - void usage ( char *name ) - static GLenum Key ( int key, GLenum mask ) - void main ( int argc, char** argv ) - - DESCRIPTION - - This module is where everything starts. This module comes as is - with no warranties. - - SIDE EFFECTS - Unknown. - - HISTORY - Created 16-Dec-94 Keith Waters at DEC's Cambridge Research Lab. - Modified 22-Nov-96 Sing Bing Kang (sbk@crl.dec.com) - Added function print_mesg to print out all the keyboard commands - Added the following functionalities: - rereading the expression file - changing the expression (based on the expression file) - quitting the program with 'q' or 'Q' in addition to 'Esc' - -============================================================================ */ - -#include -#include -#include -#include - -#include "memory.h" /* Local memory allocation macros */ -/*#include "window.h" Local window header */ -#include "head.h" /* Local head data structure */ - -int verbose = 0; - -void print_mesg(void); - -int DRAW_MODE = 2 ; - -HEAD *face ; - -static int spinxlight = 0 ; -static int spinylight = 0 ; -static int spinxface = 0 ; -static int spinyface = 0 ; - - -/* ========================================================================= */ -/* motion */ -/* ========================================================================= */ -/* -** Rotate the face and light about. -*/ - -int rotate = 0, movelight = 0, origx, origy; - -void motion ( int x, int y ) -{ - if (rotate) { - spinyface = ( spinyface + (x - origx) ) % 360 ; - spinxface = ( spinxface + (y - origy) ) % 360 ; - origx = x; - origy = y; - glutPostRedisplay(); - } - if (movelight) { - spinylight = ( spinylight + (x - origx ) ) % 360 ; - spinxlight = ( spinxlight + (y - origy ) ) % 360 ; - origx = x; - origy = y; - glutPostRedisplay(); - } -} - -void -mouse(int button, int state, int x, int y) -{ - switch(button) { - case GLUT_LEFT_BUTTON: - if (state == GLUT_DOWN) { - origx = x; - origy = y; - rotate = 1; - } else { - rotate = 0; - } - break; - case GLUT_MIDDLE_BUTTON: - if (state == GLUT_DOWN) { - origx = x; - origy = y; - movelight = 1; - } else { - movelight = 0; - } - break; - } -} - - -/* ========================================================================= */ -/* myinit */ -/* ========================================================================= */ -/* -** Do the lighting thing. -*/ - -void myinit ( void ) -{ - glEnable ( GL_LIGHTING ) ; - glEnable ( GL_LIGHT0 ) ; - glDepthFunc ( GL_LEQUAL ) ; - glEnable ( GL_DEPTH_TEST ) ; -} - - -/* ========================================================================= */ -/* faceinit */ -/* ========================================================================= */ -/* -** Read in the datafiles and glutInit(&argc, argv); initialize the face data structures. -*/ - -void -faceinit ( void ) -{ - face = create_face ( "index.dat", "faceline.dat") ; - read_muscles ("muscle.dat", face ) ; - read_expression_vectors ("expression-vectors.dat", face ) ; - data_struct ( face ) ; -} - -void -read_expressions(void) -{ - read_expression_vectors ("expression-vectors.dat", face ) ; -} - -/* ========================================================================= */ -/* display */ -/* ========================================================================= */ -/* -** Here's were all the display action takes place. -*/ - -void display ( void ) -{ - GLfloat position [] = { 30.0, 70.0, 100.0, 1.0 } ; - - glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ) ; - - glPushMatrix ( ) ; - - glTranslatef ( 0.0, 0.0, -30.0 ) ; - - glRotated ( (GLdouble) spinxface, 1.0, 0.0, 0.0 ) ; - glRotated ( (GLdouble) spinyface, 0.0, 1.0, 0.0 ) ; - - glPushMatrix ( ) ; - glRotated ( (GLdouble) spinxlight, 1.0, 0.0, 0.0 ) ; - glRotated ( (GLdouble) spinylight, 0.0, 1.0, 0.0 ) ; - glLightfv ( GL_LIGHT0, GL_POSITION, position ) ; - - glTranslated ( 0.0, 0.0, 50.0 ) ; - glDisable ( GL_LIGHTING ) ; - glColor3f ( 0.0, 1.0, 1.0 ) ; - glutWireCube ( 0.1 ) ; - glEnable ( GL_LIGHTING ) ; - glPopMatrix ( ) ; - - calculate_polygon_vertex_normal ( face ) ; - - paint_polygons ( face, DRAW_MODE, 0 ) ; - - if ( DRAW_MODE == 0 ) - paint_muscles ( face ) ; - - glPopMatrix(); - - glutSwapBuffers(); -} - - -/* ========================================================================= */ -/* myReshape */ -/* ========================================================================= */ -/* -** What to do of the window is modified. -*/ - -void myReshape ( GLsizei w, GLsizei h ) -{ - glViewport ( 0,0,w,h ) ; - glMatrixMode ( GL_PROJECTION ) ; - glLoadIdentity( ) ; - gluPerspective( 40.0, (GLfloat) w/(GLfloat) h, 1.0, 100.0 ) ; - glMatrixMode ( GL_MODELVIEW ) ; -} - - -/* ========================================================================= */ -/* error_exit */ -/* ========================================================================= */ -/* -** Problems! -*/ - -void error_exit( char *error_message ) -{ - fprintf ( stderr, "%s\n", error_message ) ; - exit( 1 ) ; -} - - -/* ========================================================================= */ -/* usage */ -/* ========================================================================= */ -/* -** At startup provide usage modes. -*/ - -void usage( char *name ) -{ - fprintf( stderr, "\n%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s\n", - "usage: ", name, " [options]\n\n", - " Options:\n", - " -display displayname specify an X server connection\n", - " -geometry geometry specify window geometry in pixels\n", - " -rgba ask for rgba visual\n", - " -index ask for color index visual\n", - " -doublebuffer ask for double buffered visual\n", - " -singlebuffer ask for single buffered visual\n", - " -accum ask for accumulation buffer\n", - " -alpha ask for alpha buffer\n", - " -depth ask for depth buffer\n", - " -stencil ask for stencil buffer\n", - " -aux nauxbuf specify number of aux buffers\n", - " -level planes specify planes (0=main,>0=overlay,<0=underlay\n", - " -transparent ask for transparent overlay\n", - " -opaque ask for opaque overlay\n" - ); - - exit( 1); -} - -/* ========================================================================= */ -/* Key */ -/* ========================================================================= */ -/* -** Actions on a key press. -*/ - -static int m = 0, e = 0; - -/* ARGSUSED1 */ -static void Key ( unsigned char key, int x, int y ) -{ - char title[512]; - - switch ( key ) { - case 27 : - case 'q' : - case 'Q' : - exit (0) ; - - case 'r' : - case 'R' : - printf ("Rereading expression file\n"); - read_expressions(); - e = 0; /* reset the expression count variable */ - glutPostRedisplay(); - break; - - case 'a' : - printf ("increment muscle: %s\n", face->muscle[m]->name ) ; - - /* set the muscle activation */ - face->muscle[m]->mstat += 0.1 ; - - activate_muscle ( face, - face->muscle[m]->head, - face->muscle[m]->tail, - face->muscle[m]->fs, - face->muscle[m]->fe, - face->muscle[m]->zone, - 0.1 ) ; - glutPostRedisplay(); - break; - - case 'A' : - printf ("decrement muscle: %s\n", face->muscle[m]->name ) ; - face->muscle[m]->mstat -= 0.1 ; - - activate_muscle ( face, - face->muscle[m]->head, - face->muscle[m]->tail, - face->muscle[m]->fs, - face->muscle[m]->fe, - face->muscle[m]->zone, - -0.1 ) ; - glutPostRedisplay(); - break; - - case 'b' : - DRAW_MODE++ ; - - if ( DRAW_MODE >= 3 ) DRAW_MODE = 0 ; - printf ("draw mode: %d\n", DRAW_MODE ) ; - glutPostRedisplay(); - break; - - case 'c' : - face_reset ( face ) ; - glutPostRedisplay(); - break; - - case 'n' : - m++ ; - if ( m >= face->nmuscles ) m = 0 ; - sprintf(title, "geoface (%s)", face->muscle[m]->name); - glutSetWindowTitle(title); - break; - - case 'e' : - if (face->expression) { - face_reset ( face ) ; - expressions ( face, e ) ; - - e++ ; - if ( e >= face->nexpressions ) e = 0 ; - glutPostRedisplay(); - } - break; - - case 'h' : - - print_mesg(); - - } -} - -/* ARGSUSED1 */ -void -special(int key, int x, int y) -{ - char title[512]; - - switch(key) { - case GLUT_KEY_RIGHT: - m++ ; - if ( m >= face->nmuscles ) m = 0 ; - sprintf(title, "geoface (%s)", face->muscle[m]->name); - glutSetWindowTitle(title); - break; - case GLUT_KEY_LEFT: - m-- ; - if ( m < 0 ) m = face->nmuscles - 1 ; - sprintf(title, "geoface (%s)", face->muscle[m]->name); - glutSetWindowTitle(title); - break; - case GLUT_KEY_UP: - face->muscle[m]->mstat += 0.1 ; - - activate_muscle ( face, - face->muscle[m]->head, - face->muscle[m]->tail, - face->muscle[m]->fs, - face->muscle[m]->fe, - face->muscle[m]->zone, - 0.1 ) ; - glutPostRedisplay(); - break; - case GLUT_KEY_DOWN: - face->muscle[m]->mstat -= 0.1 ; - - activate_muscle ( face, - face->muscle[m]->head, - face->muscle[m]->tail, - face->muscle[m]->fs, - face->muscle[m]->fe, - face->muscle[m]->zone, - -0.1 ) ; - glutPostRedisplay(); - break; - } -} - - -/* ========================================================================= * - * print_mesg - * Written by: Sing Bing Kang (sbk@crl.dec.com) - * Date: 11/22/96 - * ========================================================================= */ -/* -** Prints out help message -*/ -void -print_mesg(void) -{ -fprintf(stderr,"\n"); -fprintf(stderr,"a: draw mode (to `pull' the current facial muscle)\n"); -fprintf(stderr,"A: draw mode (to `contract' current facial muscle)\n"); -fprintf(stderr,"c: face reset\n"); -fprintf(stderr,"n: next muscle (to select another facial muscle to manipulate)\n"); -fprintf(stderr,"e: next expression\n"); -fprintf(stderr,"b: to change draw mode: wireframe->polygonal patches->smooth surface\n"); -fprintf(stderr,"r,R: reread the expression file (../face-data/expression-vectors.dat)\n (Note: this resets the expression sequence to the beginning)\n"); -fprintf(stderr,"q,Q,Esc: quit\n"); -fprintf(stderr,"h: outputs this message\n"); -fprintf(stderr,"\n"); -} - -void -muscle_select(int value) -{ - char title[512]; - - /* Select muscle. */ - m = value; - sprintf(title, "geoface (%s)", face->muscle[m]->name); - glutSetWindowTitle(title); -} - -void -main_menu_select(int value) -{ - char title[512]; - - switch(value) { - case 1: - face_reset ( face ) ; - glutPostRedisplay(); - break; - case 2: - print_mesg(); - break; - case 3: - face->muscle[m]->mstat += 0.25 ; - activate_muscle ( face, - face->muscle[m]->head, - face->muscle[m]->tail, - face->muscle[m]->fs, - face->muscle[m]->fe, - face->muscle[m]->zone, - +0.25 ) ; - glutPostRedisplay(); - break; - case 4: - face->muscle[m]->mstat -= 0.25 ; - activate_muscle ( face, - face->muscle[m]->head, - face->muscle[m]->tail, - face->muscle[m]->fs, - face->muscle[m]->fe, - face->muscle[m]->zone, - -0.25 ) ; - glutPostRedisplay(); - break; - case 5: - m++ ; - if ( m >= face->nmuscles ) m = 0 ; - sprintf(title, "geoface (%s)", face->muscle[m]->name); - glutSetWindowTitle(title); - break; - case 666: - exit(0); - break; - } -} - -void -draw_mode_select(int value) -{ - DRAW_MODE = value; - glutPostRedisplay(); -} - -void -make_menus(void) -{ - int i, j, muscle_menu, draw_mode_menu; - char *entry; - - muscle_menu = glutCreateMenu(muscle_select); - for (i=0; inmuscles; i++) { - entry = face->muscle[i]->name; - for(j=(int) strlen(entry)-1; j>=0; j--) { - if (entry[j] == '_') entry[j] = ' '; - } - glutAddMenuEntry(entry, i); - } - draw_mode_menu = glutCreateMenu(draw_mode_select); - glutAddMenuEntry("Wireframe", 0); - glutAddMenuEntry("Polygonal patches", 1); - glutAddMenuEntry("Smooth surface", 2); - glutCreateMenu(main_menu_select); - glutAddMenuEntry("Pull muscle up", 3); - glutAddMenuEntry("Pull muscle down", 4); - glutAddMenuEntry("Next muscle", 5); - glutAddSubMenu("Select muscle", muscle_menu); - glutAddSubMenu("Draw mode", draw_mode_menu); - glutAddMenuEntry("Face reset", 1); - glutAddMenuEntry("Print help", 2); - glutAddMenuEntry("Quit", 666); - glutAttachMenu(GLUT_RIGHT_BUTTON); -} - -/* ========================================================================= */ -/* main */ -/* ========================================================================= */ -/* -** All the initialization and action takes place here. -*/ - -int main ( int argc, char** argv ) -{ - int i; - - glutInitWindowSize ( 400, 600 ) ; - glutInit(&argc, argv); - for(i=1; i /* C header for any math functions */ -#include /* C header for standard I/O */ -#include /* For String compare */ -#include -#ifndef _WIN32 -#include -#include -#endif - -#include "memory.h" /* Local memory allocation macros */ -#include "head.h" /* local header for the face */ - -void reflect_polygon ( POLYGON *poly, HEAD *face ); -void add_polygon_to_face ( POLYGON *p, HEAD *face ); -void make_face ( HEAD *face ); - -/* ========================================================================= */ -/* face_reset */ -/* ========================================================================= */ -/* -** Resets the geometry of the face to neutral. -** -*/ - -void face_reset ( HEAD *face ) -{ - int i,j,k ; - - - for ( i=0; inpolygons; i++ ) { - - for ( j=0; j<3; j++ ) { - - for ( k=0; k<3; k++ ) { - face->polygon[i]->vertex[j]->xyz[k] = - face->polygon[i]->vertex[j]->nxyz[k] ; - } - } - } -} - - -/* ========================================================================= - expressions - Written by: Sing Bing Kang - Date: 11/22/96 - ========================================================================= */ -/* -** Produces the facial expressions as indicated by the muscle contraction -** vector -** -*/ - -void -expressions ( HEAD *face, int e ) -{ - int m; - - fprintf( stderr, "Expression: %s\n", face->expression[e]->name ); - - for (m=0; mnmuscles; m++) { - float m_val = face->expression[e]->m[m], - m_diff = m_val - face->muscle[m]->mstat; - - face->muscle[m]->mstat = m_val; - activate_muscle ( face, - face->muscle[m]->head, - face->muscle[m]->tail, - face->muscle[m]->fs, - face->muscle[m]->fe, - face->muscle[m]->zone, - m_diff ) ; - } - -} - -/* ========================================================================= */ -/* create_face */ -/* ========================================================================= */ -/* -** create the default structures for the face and retrun a pointer. -** -*/ - -HEAD *create_face ( char *f1, char *f2 ) -{ - HEAD *h ; - - h = _new ( HEAD ) ; - - h->npolygons = 0 ; - h->npindices = 0 ; - h->npolylinenodes = 0 ; - h->nmuscles = 0 ; - - read_polygon_indices ( f1, h ) ; - read_polygon_line ( f2, h ) ; - - make_face ( h ) ; - - return ( h ) ; - -} - -/* ========================================================================= */ -/* make_face */ -/* ========================================================================= */ -/* -** makes the face from the two input files. -** -*/ - -void -make_face ( HEAD *face ) -{ - POLYGON *p ; - int i, ii, j, k, - p1, p2, p3, p4 ; - int parray[4] ; - - for ( i=0, ii=0; i < face->npindices; i++,ii+=4 ) { - - p1 = face->indexlist[ii] -1 ; - p2 = face->indexlist[ii+1] -1 ; - p3 = face->indexlist[ii+2] -1 ; - p4 = face->indexlist[ii+3] -1 ; - - for (j=0; j<4; j++) - parray[j] = face->indexlist[ii+j] -1; - - if ( p1 == 999 ) { - - p = _new ( POLYGON ) ; - for (j=0; j<3; j++) { - p->vertex[j] = _new ( VERTEX ) ; - p->vertex[j]->np = 0 ; - } - - for (j=0; j<3; j++) - p->vertex[0]->nxyz[j] = - p->vertex[0]->xyz[j] = face->polyline[ p2*3 + j ] ; - - for (j=0; j<3; j++) - p->vertex[1]->nxyz[j] = - p->vertex[1]->xyz[j] = face->polyline[ p3*3 + j ] ; - - for (j=0; j<3; j++) - p->vertex[2]->nxyz[j] = - p->vertex[2]->xyz[j] = face->polyline[ p4*3 + j ] ; - - add_polygon_to_face ( p, face ) ; - reflect_polygon ( p, face ) ; - } - else { - p = _new ( POLYGON ) ; - for (j=0; j<3; j++) { - p->vertex[j] = _new ( VERTEX ) ; - p->vertex[j]->np = 0 ; - } - - for (k=0; k<3; k++) { - for (j=0; j<3; j++) - p->vertex[k]->nxyz[j] = - p->vertex[k]->xyz[j] = face->polyline[ parray[k]*3 + j ] ; - } - - add_polygon_to_face ( p, face ) ; - reflect_polygon ( p, face ) ; - - p = _new ( POLYGON ) ; - for (j=0; j<3; j++) { - p->vertex[j] = _new ( VERTEX ) ; - p->vertex[j]->np = 0 ; - } - - for (j=0; j<3; j++) - p->vertex[0]->nxyz[j] = - p->vertex[0]->xyz[j] = face->polyline[ p1*3 + j ] ; - - for (j=0; j<3; j++) - p->vertex[1]->nxyz[j] = - p->vertex[1]->xyz[j] = face->polyline[ p3*3 + j ] ; - - for (j=0; j<3; j++) - p->vertex[2]->nxyz[j] = - p->vertex[2]->xyz[j] = face->polyline[ p4*3 + j ] ; - - add_polygon_to_face ( p, face ) ; - reflect_polygon ( p, face ) ; - } - } - -} - -/* ========================================================================= */ -/* add_polygon_to_face */ -/* ========================================================================= */ -/* -** add a polygon to the face structure. -** -*/ - -void -add_polygon_to_face ( POLYGON *p, HEAD *face ) -{ - int nn ; - - if(face->npolygons == 0) - face->polygon = _new_array(POLYGON *, 500) ; - else if(face->npolygons % 500 == 0) - face->polygon = _resize_array(face->polygon,POLYGON *,face->npolygons+500) ; - - nn = face->npolygons ; - face->polygon[nn] = p ; - - face->npolygons++ ; - -} - - -/* ========================================================================= */ -/* reflect_polygon */ -/* ========================================================================= */ -/* -** Reflects all the polygons in the half-face and adds them to -** the data structure. -** -*/ - -void -reflect_polygon ( POLYGON *poly, HEAD *face ) -{ - POLYGON *newp ; - float temp[3] ; - int i, j ; - - /* - * Allocate memory for the new polygon. - */ - newp = _new ( POLYGON ) ; - for (j=0; j<3; j++) { - newp->vertex[j] = _new ( VERTEX ) ; - newp->vertex[j]->np = 0 ; - } - - /* - * Load the old polygon values. - */ - for (i=0; i<3; i++) - for (j=0; j<3; j++) - newp->vertex[i]->nxyz[j] = - newp->vertex[i]->xyz[j] = poly->vertex[i]->xyz[j] ; - - /* - * flip the X component. - */ - for (i=0; i<3; i++) - newp->vertex[i]->nxyz[0] = - newp->vertex[i]->xyz[0] = -newp->vertex[i]->xyz[0] ; - - /* - * Re-order the vertices, flip 0 and 1. - */ - for (j=0; j<3; j++) - temp[j] = newp->vertex[0]->xyz[j] ; - - for (j=0; j<3; j++) - newp->vertex[0]->nxyz[j] = - newp->vertex[0]->xyz[j] = newp->vertex[1]->xyz[j]; - - for (j=0; j<3; j++) - newp->vertex[1]->nxyz[j] = - newp->vertex[1]->xyz[j] = temp[j] ; - - add_polygon_to_face ( newp, face ) ; - -} - -/* ========================================================================= */ -/* averaged_vertex_normals */ -/* ========================================================================= */ -/* -** Caculates the averaged polygon normal. -*/ - -void averaged_vertex_normals ( HEAD *face, int p, float *n1, float *n2, float *n3 ) -{ - int i,j,np, pt ; - float norm[3] ; - - - for (i=0; i<3; i++) - norm[i] = 0.0 ; - - np = face->polygon[p]->vertex[0]->np ; - - for ( i=0; ipolygon[p]->vertex[0]->plist[i] ; - - for ( j=0; j<3; j++) { - norm[j] += face->polygon[pt]->vertex[0]->norm[j] ; - } - } - - for (i=0; i<3; i++) - norm[i] = norm[i] / (float)np ; - - for (i=0; i<3; i++) - n1[i] = norm[i] ; - - for (i=0; i<3; i++) - norm[i] = 0.0 ; - - np = face->polygon[p]->vertex[1]->np ; - - for ( i=0; ipolygon[p]->vertex[1]->plist[i] ; - - for ( j=0; j<3; j++) { - norm[j] += face->polygon[pt]->vertex[1]->norm[j] ; - } - } - - for (i=0; i<3; i++) - norm[i] = norm[i] / (float) np ; - - for (i=0; i<3; i++) - n2[i] = norm[i] ; - - for (i=0; i<3; i++) - norm[i] = 0.0 ; - - np = face->polygon[p]->vertex[2]->np ; - - for ( i=0; ipolygon[p]->vertex[2]->plist[i] ; - - for ( j=0; j<3; j++) { - norm[j] += face->polygon[pt]->vertex[2]->norm[j] ; - } - } - - for (i=0; i<3; i++) - norm[i] = norm[i]/ (float) np ; - - for (i=0; i<3; i++) - n3[i] = norm[i] ; - -} - -/* ========================================================================= */ -/* data_struct */ -/* ========================================================================= */ -/* -** Create a new data structure for the polygons. -** -*/ -#define DATA_STRUCT_DEBUG 0 - -void -data_struct ( HEAD *face ) -{ - int i,j, n ; - int flag, cptr ; - float x1,y1,z1, x2, y2, z2, x3, y3, z3 ; - float tx1, ty1, tz1, tx2, ty2, tz2, tx3, ty3, tz3 ; - - for (i=0; inpolygons; i++ ){ - - x1 = face->polygon[i]->vertex[0]->xyz[0] ; - y1 = face->polygon[i]->vertex[0]->xyz[1] ; - z1 = face->polygon[i]->vertex[0]->xyz[2] ; - - x2 = face->polygon[i]->vertex[1]->xyz[0] ; - y2 = face->polygon[i]->vertex[1]->xyz[1] ; - z2 = face->polygon[i]->vertex[1]->xyz[2] ; - - x3 = face->polygon[i]->vertex[2]->xyz[0] ; - y3 = face->polygon[i]->vertex[2]->xyz[1] ; - z3 = face->polygon[i]->vertex[2]->xyz[2] ; -#if DATA_STRUCT_DEBUG - fprintf (stderr,"BASE polygon: %d\n", i) ; - fprintf (stderr,"x1: %f y1: %f z1: %f\n", x1,y1,z1) ; - fprintf (stderr,"x1: %f y1: %f z1: %f\n", x2,y2,z2) ; - fprintf (stderr,"x1: %f y1: %f z1: %f\n", x3,y3,z3) ; -#endif - j = 0 ; - flag = 0 ; - while ( !flag && - jnpolygons ) { - - tx1 = face->polygon[j]->vertex[0]->xyz[0] ; - ty1 = face->polygon[j]->vertex[0]->xyz[1] ; - tz1 = face->polygon[j]->vertex[0]->xyz[2] ; - - tx2 = face->polygon[j]->vertex[1]->xyz[0] ; - ty2 = face->polygon[j]->vertex[1]->xyz[1] ; - tz2 = face->polygon[j]->vertex[1]->xyz[2] ; - - tx3 = face->polygon[j]->vertex[2]->xyz[0] ; - ty3 = face->polygon[j]->vertex[2]->xyz[1] ; - tz3 = face->polygon[j]->vertex[2]->xyz[2] ; -#if DATA_STRUCT_DEBUG - fprintf (stderr, "COMPARED TO polygon: %d\n", j) ; - fprintf (stderr,"tx1: %f ty1: %f tz1: %f\n", tx1,ty1,tz1) ; - fprintf (stderr,"tx1: %f ty1: %f tz1: %f\n", tx2,ty2,tz2) ; - fprintf (stderr,"tx1: %f ty1: %f tz1: %f\n", tx3,ty3,tz3) ; -#endif - if ( (x1 == tx1 && y1 == ty1 && z1 == tz1) || - (x1 == tx2 && y1 == ty2 && z1 == tz2) || - (x1 == tx3 && y1 == ty3 && z1 == tz3)) { - cptr = j ; -#if DATA_STRUCT_DEBUG - fprintf (stderr,"found a vertex match on polygon: %d and %d\n", i,j); -#endif - n = face->polygon[i]->vertex[0]->np ; - face->polygon[i]->vertex[0]->plist[n] = cptr ; - face->polygon[i]->vertex[0]->np++ ; -#if DATA_STRUCT_DEBUG - fprintf (stderr,"loaded: %d onto polygon: %d vertex[0]\n", cptr, i) ; - fprintf (stderr,"total on vertex: %d\n", face->polygon[i]->vertex[0]->np); -#endif - } - j++ ; - - } /* end while */ - - - j = 0 ; - flag = 0 ; - while ( !flag && - jnpolygons ) { - tx1 = face->polygon[j]->vertex[0]->xyz[0] ; - ty1 = face->polygon[j]->vertex[0]->xyz[1] ; - tz1 = face->polygon[j]->vertex[0]->xyz[2] ; - - tx2 = face->polygon[j]->vertex[1]->xyz[0] ; - ty2 = face->polygon[j]->vertex[1]->xyz[1] ; - tz2 = face->polygon[j]->vertex[1]->xyz[2] ; - - tx3 = face->polygon[j]->vertex[2]->xyz[0] ; - ty3 = face->polygon[j]->vertex[2]->xyz[1] ; - tz3 = face->polygon[j]->vertex[2]->xyz[2] ; - - if ( (x2 == tx1 && y2 == ty1 && z2 == tz1) || - (x2 == tx2 && y2 == ty2 && z2 == tz2) || - (x2 == tx3 && y2 == ty3 && z2 == tz3)) { - cptr = j ; - - n = face->polygon[i]->vertex[1]->np ; - face->polygon[i]->vertex[1]->plist[n] = j ; - face->polygon[i]->vertex[1]->np++ ; - - } - j++ ; - - } /* end while */ - - j = 0 ; - flag = 0 ; - while ( !flag && - jnpolygons ) { - tx1 = face->polygon[j]->vertex[0]->xyz[0] ; - ty1 = face->polygon[j]->vertex[0]->xyz[1] ; - tz1 = face->polygon[j]->vertex[0]->xyz[2] ; - - tx2 = face->polygon[j]->vertex[1]->xyz[0] ; - ty2 = face->polygon[j]->vertex[1]->xyz[1] ; - tz2 = face->polygon[j]->vertex[1]->xyz[2] ; - - tx3 = face->polygon[j]->vertex[2]->xyz[0] ; - ty3 = face->polygon[j]->vertex[2]->xyz[1] ; - tz3 = face->polygon[j]->vertex[2]->xyz[2] ; - - if ( x3 == tx1 && y3 == ty1 && z3 == tz1 || - x3 == tx2 && y3 == ty2 && z3 == tz2 || - x3 == tx3 && y3 == ty3 && z3 == tz3) { - cptr = j ; - - n = face->polygon[i]->vertex[2]->np ; - face->polygon[i]->vertex[2]->plist[n] = cptr ; - face->polygon[i]->vertex[2]->np++ ; - - } - j++ ; - - } /* end while */ - } /* end for i */ -} diff --git a/lib/glut-3.7.6/progs/demos/geoface/memory.h b/lib/glut-3.7.6/progs/demos/geoface/memory.h deleted file mode 100644 index 07c24f147..000000000 --- a/lib/glut-3.7.6/progs/demos/geoface/memory.h +++ /dev/null @@ -1,29 +0,0 @@ -/* ========================================================================== - MEMORY_H -============================================================================= - - AUTHOR: Keith Waters - DATE : Tue Jan 7 10:16:52 EST 1992 - - SYNOPSIS - Memory macros. - - DESCRIPTION - Simple memory macros for allocation. - -============================================================================ */ - - -#ifndef MEMORY_H -#define MEMORY_H - - -#define _new(t) ((t*)malloc(sizeof(t))) -#define _new_array(t, n) ((t*)malloc(sizeof(t) * (n))) -#define _resize_array(a, t, n) ((t*)realloc((a), sizeof(t) * (n))) -#define _size_array(a,t,n0,n1) a = (n0 == 0 ? _new_array(t,n1) : \ - _resize_array(a,t,n1)) -#define _delete(object) ((void)(((object)!=NULL) ? \ - free((char*)(object)),(object)=NULL : 0)) -#endif /* _MEMORY_H */ - diff --git a/lib/glut-3.7.6/progs/demos/geoface/muscle.c b/lib/glut-3.7.6/progs/demos/geoface/muscle.c deleted file mode 100644 index d00eea2c6..000000000 --- a/lib/glut-3.7.6/progs/demos/geoface/muscle.c +++ /dev/null @@ -1,213 +0,0 @@ -/* ========================================================================== - MUSCLE_C -============================================================================= - - FUNCTION NAMES - - float VecLen -- calculates a vector length. - float CosAng -- compute the cosine angle between two vectors. - activate_muscle -- activate a muscle. - act_muscles -- activate muscles. - reset_muscles -- reset all the muscles. - - C SPECIFICATIONS - - float VecLen ( float *v ) - float CosAng ( float *v1, float *v2 ) - activate_muscle ( HEAD *face, float *vt, float *vh, - float fstart, float fin, float ang, float val ) - act_muscles ( HEAD *face ) - reset_muscles ( HEAD *face ) - - DESCRIPTION - - This module is where all the muscle action takes place. This module - comes as is with no warranties. - - SIDE EFFECTS - Unknown. - - HISTORY - Created 16-Dec-94 Keith Waters at DEC's Cambridge Research Lab. - -============================================================================ */ - -#include -#include -#include "head.h" - -#ifdef _WIN32 -#pragma warning (disable:4244) /* Disable bogus conversion warnings. */ -#pragma warning (disable:4305) /* VC++ 5.0 version of above warning. */ -#endif - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif -#define DTOR(deg) ((deg)*0.017453292) /* degrees to radians */ -#define RTOD(rad) ((rad)*57.29577951) /* radians to degrees */ -#define RADF 180.0 / M_PI - - -/* ======================================================================== */ -/* float VecLen ( vec ) */ -/* ======================================================================== */ -/* -** Caculates the length of the vector. -*/ - -float VecLen ( float *v ) -{ - return (float) sqrt(v[0]*v[0] + v[1]*v[1] + v[2]*v[2]); -} - -/* ======================================================================== */ -/* float CosAng ( v1, v2 ) */ -/* ======================================================================== */ -/* -** Rotates the facial muscles 90.0 degrees. -*/ - -float CosAng ( float *v1, float *v2 ) -{ - float ang, a,b ; - - a = VecLen ( v1 ) ; - b = VecLen ( v2 ) ; - - ang = ((v1[0]*v2[0]) + (v1[1]*v2[1] ) + (v1[2]*v2[2])) / (a*b) ; - - return ( ang ) ; -} - -/* ======================================================================== */ -/* activate_muscle ( face, vt, vh, fstart, fin, ang, val ) */ -/* ======================================================================== */ -/* -** activate the muscle. -*/ - -void -activate_muscle (HEAD *face, float *vt, float *vh, float fstart, float fin, float ang, float val) -{ - float newp[3], va[3], vb[3] ; - int i,j,k,l ; - float valen, vblen ; - float cosa, cosv, dif, tot, percent, thet, newv, the, radf ; - - radf = 180.0/ M_PI ; - the = ang / radf ; ; - thet = cos ( the ) ; - - cosa = 0.0 ; - - /* find the length of the muscle */ - for (i=0; i<3; i++) - va[i] = vt[i] - vh[i] ; - valen = VecLen ( va ) ; - - /* loop for all polygons */ - for (i=0; inpolygons; i++) { - - /* loop for all vertices */ - for (j=0; j<3; j++) { - - /* find the length of the muscle head to the mesh node */ - for (k=0; k<3; k++) - vb[k] = face->polygon[i]->vertex[j]->xyz[k] - vh[k] ; - vblen = VecLen ( vb ) ; - - if ( valen > 0.0 && vblen > 0.0) { - cosa = CosAng ( va, vb ) ; - - if ( cosa >= thet ) { - if ( vblen <= fin ) { - cosv = val * ( 1.0 - (cosa/thet) ) ; - - if ( vblen >= fstart && vblen <= fin) { - dif = vblen - fstart ; - tot = fin - fstart ; - percent = dif/tot ; - newv = cos ( DTOR(percent*90.0) ) ; - - for ( l=0; l<3; l++) - newp[l] = (vb[l] * cosv) * newv ; - } - else { - for ( l=0; l<3; l++) - newp[l] = vb[l] * cosv ; - - } /* endif vblen>fin */ - - for (l=0; l<3; l++) - face->polygon[i]->vertex[j]->xyz[l] += newp[l] ; - - } /* endif vblen>fin */ - } /* endif cosa>thet */ - } /* endif mlen&&tlen */ - } /* end for j vertices */ - } /* end for i polygon */ -} - -/* ======================================================================== */ -/* act_muscles ( face ) */ -/* ======================================================================== */ -/* -** activate the muscles -*/ - -void -act_muscles ( HEAD *face ) -{ - int i ; - - /* - * Loop all the muscles. - */ - for (i=0; inmuscles; i++) { - - /* - * Check to see if the muscle is active. - */ - if (face->muscle[i]->active) { - - activate_muscle ( face, face->muscle[i]->head, - face->muscle[i]->tail, - face->muscle[i]->fs, - face->muscle[i]->fe, - face->muscle[i]->zone, - face->muscle[i]->mval ) ; - - /* - * Reset the muscle activity. - */ - face->muscle[i]->active = 1 ; - - } - } -} - -/* ======================================================================== */ -/* reset_muscles ( face ) */ -/* ======================================================================== */ -/* -** Resets the muscles of the face. This is achieved by reversing -** the muscle contraction. -*/ - -void -reset_muscles ( HEAD *face ) -{ - int i,j,k ; - - for ( i=0; inpolygons; i++ ) { - for ( j=0; j<3; j++ ) { - - for ( k=0; k<3; k++ ) - face->polygon[i]->vertex[j]->xyz[k] = - face->polygon[i]->vertex[j]->nxyz[k] ; - - } /* end for j */ - } /* end for i */ -} diff --git a/lib/glut-3.7.6/progs/demos/geoface/muscle.dat b/lib/glut-3.7.6/progs/demos/geoface/muscle.dat deleted file mode 100644 index 45e4dde07..000000000 --- a/lib/glut-3.7.6/progs/demos/geoface/muscle.dat +++ /dev/null @@ -1,91 +0,0 @@ -18 - -L_Zygomatic_Major --1.5700 -2.2210 7.8200 --3.8050 0.8680 6.6000 - 0.1 4.8 45.0 1.0 - -R_Zygomatic_Major -1.5700 -2.2210 7.8200 -3.8050 0.8680 6.6000 -0.1 4.8 45.0 1.0 - -L_Angular_Depressor --1.5700 -2.2210 8.0250 --2.5590 -4.2770 5.3510 - 0.3 4.5 65.0 1.0 - -R_Angular_Depressor -1.5700 -2.2210 8.0250 -2.5590 -4.2770 5.3510 -0.3 4.5 65.0 1.0 - -Left_Frontalis_Inner --0.4870 3.6390 8.1010 --0.3540 6.2470 7.2290 - 0.1 3.6 35.0 4.0 - -Right_Frontalis_Inner -0.4870 3.6390 8.1010 -0.3540 6.2470 7.2290 -0.1 3.6 35.0 4.0 - -Left_Frontalis_Major --2.3810 3.8300 8.0000 --2.2440 6.3630 6.9690 -0.1 3.7 65.0 0.5 - -Right_Frontalis_Major -2.3810 3.8300 8.0000 -2.2440 6.3630 6.9690 -0.1 3.7 65.0 0.5 - -Left_Frontalis_Outer --3.0950 3.9700 7.8950 --3.6390 5.6480 5.9450 -0.1 3.5 45.0 2.5 - -Right_Frontalis_Outer -3.0950 3.9700 7.8950 -3.6390 5.6480 5.9450 -0.1 3.5 45.0 2.5 - -Left_Labi_Nasi --1.7760 -0.8340 8.2390 --1.5600 1.8870 7.3320 - 0.1 5.2 35.0 3.0 - -Right_Labi_Nasi -1.7760 -0.8340 8.2390 -1.5600 1.8870 7.3320 -0.1 5.2 35.0 3.0 - -Left_Inner_Labi_Nasi --1.0020 0.2170 8.4620 --0.6380 2.0840 7.6610 -0.1 4.5 35.0 1.0 - -Right_Inner_Labi_Nasi -1.0020 0.2170 8.4620 -0.6380 2.0840 7.6610 -0.1 4.5 35.0 1.0 - -Left_Lateral_Corigator --1.1700 4.6580 7.3560 - 0.0000 3.2620 8.2080 - 0.5 3.0 45.0 3.0 - -Right_Lateral_Corigator -1.1700 4.6580 7.3560 -0.0000 3.2620 8.2080 -0.5 3.0 45.0 3.0 - -Left_Secondary_Frontalis --0.5840 3.0520 8.0550 --0.9910 4.8620 8.0930 -0.1 4.8 45.0 1.0 - -Right_Secondary_Frontalis -0.5840 3.0520 8.0550 -0.9910 4.8620 8.0930 -0.1 4.8 45.0 1.0 diff --git a/lib/glut-3.7.6/progs/demos/glflare/Flare1.bw b/lib/glut-3.7.6/progs/demos/glflare/Flare1.bw deleted file mode 100644 index 6ccd9cce283478930b2a6130991538ede713780b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12222 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 E1MFalUjP6A diff --git a/lib/glut-3.7.6/progs/demos/glflare/Flare2.bw b/lib/glut-3.7.6/progs/demos/glflare/Flare2.bw deleted file mode 100644 index 6a1940d59731aff64b8ac54b4cbfd0561ca34a6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6648 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 diff --git a/lib/glut-3.7.6/progs/demos/glflare/Flare3.bw b/lib/glut-3.7.6/progs/demos/glflare/Flare3.bw deleted file mode 100644 index 563b6f80f0d4b7bf7bc79f6ef5d84d82545b3827..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12856 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 diff --git a/lib/glut-3.7.6/progs/demos/glflare/Flare4.bw b/lib/glut-3.7.6/progs/demos/glflare/Flare4.bw deleted file mode 100644 index 513557d0dcdf32f768eda9a43bb570acde5a20e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5683 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 be@5pXV(c;YYG@z#Y6w3fe1u;Ce3t(JU0WGX diff --git a/lib/glut-3.7.6/progs/demos/glflare/Flare5.bw b/lib/glut-3.7.6/progs/demos/glflare/Flare5.bw deleted file mode 100644 index 65dca1b7de1efdde2694cadef135cc31f2834351..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11099 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 N&cL@cEyV*>{|QCd1wH@( diff --git a/lib/glut-3.7.6/progs/demos/glflare/Flare6.bw b/lib/glut-3.7.6/progs/demos/glflare/Flare6.bw deleted file mode 100644 index 8612cb3514ec2b7b738f60f4adf39c077d0d7cf1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10540 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 ZZu}=A*C0%!9}^+iWDGydj|>jWe*nL(4BG$z diff --git a/lib/glut-3.7.6/progs/demos/glflare/Shine0.bw b/lib/glut-3.7.6/progs/demos/glflare/Shine0.bw deleted file mode 100644 index 2a1182580f272bbf697ea9b7d5158c5cd94a92fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5756 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

x6^Y=~)k?li8a zS!AQ1@}W1=QXqAs!J45p$Ks}~F!|wW^e7yS@7K}PljD1iZwdkO&y+*0z8nd1kvw!1 z@>!%crE!-rjhu-|2hknS7V{)?l|&zf6i9DyxRA~wG&BzKyRPAOu<77*xb1AB9N9)> zb31SmP^cwba@$u9s5!d3n{KP-=@j`MrZvaM?Q3(|6Pmh+LpX-?IyOb$g|^eQT%ZzY zQWRPRP(j&J`=-BlJ>w(SQ2V$sz3Faod6}VC1#Uem(AqJ}jb>e3I2h6b+~OKoBVoFd z&;0jlC`4;Hi`DR31#iP@!O&4(!xYTwp-0{TR|}V?K+WSar#xJF3`@9*!a?x`H@ef) zz0sb7%K~k9iZ4KZED21jh;5B%<|1G|;|3<-9jLf4Cl;8xKHUWuI%Ozvn{%-*`f>Qe zb#vi#&frQF2UvjmjjI{%lwe?=d|!8Pon80f03bA9adccUubTynv@WIL#cTxsXFzYZ zHaA=JFL)K6%Zwx^Zzz>$;mu2()?N3E`GWAr3pamu!pPWkG}pS9h${5E=c`Kxs4ze(bdWmCkrWvuS{V=xD?y_bqG5$- zZb2GpB{a%rcY8g)xbNofGRG#lIW|g0+MrBgga%ni6K#YBS%LxcFw%->gkM(j%YcP6 z(!T5iznWbi0STh;=MA5JS2HzVeO2}S`F&sQbKiaLIr0JWIsEq=IsJEHhF8~az4{x! z_giOE|7$}LdzpV5->Y$vTvz+VzVu@C(e za0mEnLM~nbu=e6#5ON9kyz~peo50@@Vp{-o**JqeCS>u4fjH0qs;@}R>%Rm|UbpUsFu+I4!&;z~${4MZZ0QPXEzzHEsMSueE*%Ai?0Q)W}0B2u< zotI$CrJo0I@1e4O>a1=xTXTs*@ij0Uhb!FkBlv+)|nXE5{6KAZ76 z@H~KXlOF|Oe*!xboPUO&!uSdRyO2);KMUYKM4yf3yP1Cl_-O$5oqdM?XEHyBF#_Nl z5(2Qp`?5wiY(+i;{My+FpAy(@w${j2fnNm7dNZ2+jBaxtv)8kI%z0h`J^_3T_%XoT z=NUeN&*ok~1eiO12zdDn=I$>6#tt`u4+6-6nH?`BoX?-OLpGC7TrQj9-ozR&%KFPxwLLg^gY_B{H^Om6nAR66}uphdFHxpl=Xg>QVa z#Tcd>hh8Sz*1ww*!nth3VA^M5N{Pjp*lcc_F>t}Q?@LVL^Vy`sFsXcLlWocv9OUBz z=a>uvg-OOKCO=NLgfOcEb!qlHy!UZ(*Ark28Tc1TMqQVkPD+8WmO+3?CS7_qDdAU4 zQb-DqBOtJxOG#)+2N%c=<-VYpebLQolOn!fgrF-qV*+a$VmWYRYL@UYE!#y{ z&EXjCP}q!vrwbO=+{PNA1apLAV@(_ik%kK-^V38^y~RC&aJd5+*Z3X>q_$;>&P!Ox zmE=M?m&g~~C{}I_ykJqdlSf&V7s)%k1m_uhb168b7PYy{3Ut$KEO0>)C@D((B6*vI zNg(qSG{>+YsAWNsu?0@2=yb{%T*h~n*>)phLSu4w$BNUdyKm~d^ z#vnZS(xD(a4ks~=&kLl%!__$S5rdz%EMg_udUKx@#8*hrZi8l-jw8WjjE!`dtff&| zN#r?aIPOgo9^B>dV#BGVt5Lw`NEdb@)vVF%n8=|?x6X+jB(dZwNt0+f&9WK}9pFxk zA}MZ>J2o!I5&jLP)3p`t&XKReH$m2H?QvORBJWf|->a!F%C(K!S}kwq>v2J6I0i-Z z-zIk$uEvoP4OULq)6gxFecQ1`z13;sv^3mnctj?(P(_X1X5Q*_TD2&wmZhLCn&8~B zctLJ)uwTOt(ri5xMbd%S*7E!9vJQBy6Em4+D?!rfce}j@-PT$hhf3I}8ypk>!!?j7 zs>IP{HK<;1W)Y(5t6cCn>$l^$s+-NgOI!6Y?H`RE4iCD`S{iG~P=q)sP{WT%Xe5rW zK!tCyu)dc^Ffo;0SRdT47t(jyHI=km$@*YAeKHz!oAuSO#69B$L!<@1iQ|8Zf$~5? zgoW9Ddj-bvWMzFg?9}r{GmhKsS~i%TOdk)rt$G}AX6Orj!Yz{7aAZMjf}FqMs4{|z zuu4AYr7i)Ltq-5{8{Jm6+U_=6Lnt^J_3}guYY|*hK$1eoRZzr5LvW%Xzu_UZxUZpx zRobHiXi+*F9FIHwR=(TsbRJDlP9}%FEb{0@vcnKVyvT4CEW2vrklME4Glb_i4FQ#u zl1PZ4Qc<$n9`#dKgss8J(}z$s81zTSCnwWkI}O-8Xt@CH;+|I!cc7I~Lm$`38>bpU zuZT5<+SsE4T1^y|bQnfy=TSeEVQX|eJsKPg4u_AAPp0GUM%5G?%Yi1uQK=wzJi{w6 z@D1`BtUgoc73G$I;r`tA{2(Zoby$sSyZyudYLp)xA5TZ)qbHM-N}v8AdKQD z)PX9Q1i59pupCSdXH!DK8U?voDylF0CE@T=fV7Ki^{h9Z^lRCplau48PYWmSOvVST zq*9Gn*Ej05)kymwR|^&II(gfuLN#!}?85VWu*iJyb{T4xm#b0Q><*ty`g?<^b@Jxq zVQ071+}+!SXTv};6f}qY2@dl9a#z6kekD%V>$O^%Bv=px4?+%7_y1A;q@05yLhz z;B{6Cvb$@vDWV(3r<}A`yVJ+Xa8QPH95jX7upA+vf?pMGkwR(NMp6_*g{lUYB zqwxfxbv&IeoHQn*{(d`4is7c73yKOxm6-?1K)nX{71<_5t9;3%0P^0HDpv*ty@vz} zqBu$Gd2_GR>GrzqcK5--qw&+pV}#md?&RL|>GY`I+{kK?nuo9E{}a_0k=O;OM}BN` zf#5-FB@60a5bAPJ(K@be6zZ?HIuCl?R-@T{^muYyIB8A~hlk^SD~&?K`|NpR88l?b z3sdz?aHAv@kr#*;6HS$hE|RT@^o1TWhgHM+e*+grr`+Bg8I{- z3IZ$#Wt!8c$(NgjvI3h3k z<+867Iy`}EeZ|#lo$=&hJ&dz<)|-qUJQ$51BvOWH-dII_f+fwt8zp4TDeqq=2n4pp z-8r#kSZ8NO6LX}){N;LgG(K2UL6S7n_ITK7cODM!uW%;Am0F4ljzYCXv8Lgfgr*iA zhF3_D7TIeY-Hs_pxaXFOqV#oiXmNdi^thi0Psia#k`3>78d;||*pI=IN=Heo%f4$t zBM0lCtb)x^s4s(zigfGDY1}P>UeBRa!**$VbkvKvqe2wbc&*>+uC3+m&Oys?K3CqqX_W$;k)Yr#yN2Qit7WtbOL z?q%}2V`f;8w!5uF7D(Gd^TwHoA`-W2x|S@nC{LuWt!V+T=I9s%vmLnKWwX}&4NxyS z5@^U<^#~2Xd$^owLn2M$PNL%^aYZfD=uzSlL&b**;o9iYF)+l>Z4?>oNGu*CwJZ%0 zV()>8LF!>7p(4_iI4KjIrQ8nU3WsxFw;XhJhV@OUx?u>k32$Htl*DN*DLV_~UDK9@ zAtP}&G(A{kIV*KdZNIAE|2NR5V^h;MBkn9b=x>?_hi#({-sLJw7Ook z3G)NA(+E%_ZpaCX(Ws-9u7*&2iF_H&+iaPOI;)|23nMDIz6=GOjhY%PdzqA3ilK2m*uv zX$whkPwyv`LRv_iV8?=ukgRywdThqFcbJPe2)OB9WiPf#sYDQR@Rae}tj%!+#a}YG z$zk}8TAbuz1BoXkBSOF{84nbW1(lql)qDX~XGpg^OtArYl;DYF-i02D1AJ(6(~v?6 z&NNc1=qP4yW{zOS<60v1wy8rgZR(O`-G)$N+EfqvW3YY=zo{ri1;V3JlHg8~Sxn#_UH_0kqC%zgedmvBnS#p7_MF zJ~|T&0tnhjlFhRT>CK_I`?DVzx=twnzF%_&om}5fA^4-Q{x&Pkin(pZ$%K zSMS?pg0@I4{? zm%wj>O(D**-?P6Az6kz7h;ttXZGg;ke+m9mh~TF|5B!x7=dsKAUjsM6o)AB*!Dqo8 zfSw;p!Bz0LLVWlf$iW|he-=VM2|fe91pWs6yAT(!?S&@zEr1Rez603vh5r&_2Hj_{ z$;{7zPXorx{0>+GD_{)_z#HI?!CT;K;2YpC06NWV0rZ|>y_vrQe-Hi?EE$!P6(#7r9~!@nawX2K+d9 z>E!woTz?YaEAcbHf}aBJox3)G8}Giq46wP#0KON$aPo|u$Mf78Zr;lPe~!nxF~0g3+Nb28i5ln7PIW9ZL|>%P`PXf2gus8n(qH3FQ(C*3f@(>hejZAGbRex?8L zo3VAFV$DK)3-x%K|0I&cvUeVw6{`)aMV!Q1yV*LbA=qt1yL|@k#}})uRwxq2u)<2D z-L3;ST6!q;v{-iIq&y@3(9beoCMMQwR>pjkiaT_217AXM>7N#>D$9gUY#i6bt2zlp zppY0u%70pj7?-f(WiJd*i$6#hSvNLu7D==dgfy)KA~tqo=i19Y*1_c%#)e%4GF~of?gF$yk1bhZ4_?hfj!AkEY;0 zXeMNBU2o(@3298AnB(g@>Ud7;=kZh`nZSxTT5Eqw4BBngNK@m9q!B4=0#6%7Fg!0R zPbFbZ)cmVqh^He@+?4IMwjG;@&>Ce^?A6e|=S@0m;K>)n8rqSIo(w`I*&cIr-mW*x zh7!icCQE#6wUi-_u6*pwtb|#yn}ywofFzNp#Ow7uvw5c>A`F#T8QCPnG~-FiMaGL_ zMJ9DAyr`zXsv->Jc|yu&-foty#BVfB+KM7uSIWf!lBG{imM)VX72m)%Qb-*qS{dUU zsdbijTD@kd(`GZTYfErAGfQF_!%1SW<}Z6Q;!jnBsVXsvHiqE$k|fXP=DId)wpzJO ztWBH+e4<(6{tMzN;$;||b|#u8sI0**#Cy$rISi#q^UhqaQ?IvjHrz}NyZ2wDs>IyF+6wAo0lR?5!i3q?Om(#~9wr&-gOFu)ignemvo=8=byRultl ztq82wqi9(d#cLQ!=_IMwsW(_KNnAO&6f|nZ8@+1KtJ3+w($;#n7;bFz z%T5z>CBculnJdf;F!_YJ<>E-j#%R(_+OpRh4oB+?{q^D2us7Jcv(YQEEN$u^rOJsv zBTR`wjVVo|kpzThX30jC^@gL(oz3BBYkO;BZF^_CkEU5uQ)HhKBVR^Zn=Efx+t9Ja zaf#HO_3hpLyYKGYy|;a5dw*}#FXv`c?aEmYcoVKz5k^moZ+k>kVzQ#_phlXPWyhwA z+Xu%-hX;rEci%lc+}T*_&ZSBQ_%4)qO;WKZ$wJ!PbKX-46DLA%Tu(7LRG{1tH_`}2EGqlcuZVJ8G^#)pC?`;&}_Tt4L64U{%~V7 z9Bl4S9KUsR^x*j5oi)5_o9$Ubx^A<)onr0OHmuPq^r?)KYvk4_z5Iocbo^(MN%U(T0{)zac(uh(5D=Q2~%6}xo8F1nH%eqWBU zDalw?gN?1-gQNYu{e%1a$Qd5q-P*(n;K_1t3HclQq;;J?Y^R}c5^?Y%u*%$p4s zsU=sbgG2%`_>}mv?^E%!PJxZOMV@7|c|JcF-PyUf|L*S5LIJ&*wFRTuz zP9d$lCYMz$yn+ZtySN-Cjhg+siQ;BEFRJxnRi+C&NZ1^r)85hk?OvAV-TubL0By#_ zRnp(cjGC;-HTvMU0_Ts0QNA=;*2=oW{=$6ItQ;I4@8gHDEBCkiv$0Cr#O7MB)6k*s zxWh?pJ|n(E2}%;<%9kHw9Ag*yi=9rU(pxU2?sN-McCbleY;>(JWFyA~-6D;p>u67k zYZMj)xT^OC9!hC3Wv@uvx%N8SM@M%@8{HzSm8;$U==SFAK?f?-mxj(kJSQY}=SRZ9hF-MoKy-x{qNWB1YlwJ_8JQ z^el_e4L@D1M%_*|M}utVO2jmKn?@*XBGNvkU2FJE1ihf4D2O={sDvS*S8wVGctW$P zhGn+U&IzN;2;Ve9)wIer)`+$jLzRpqp)ZOn0lW)m_a&r7z=njj$)vc|NUMHTWJQ+3 zf|@oEA*7XUVz@Al0?d~{IW)CbK@*&fAsRA{D2NpVk);0<&$fHRvPhu}km5QV9v-WN zPV1~9QM@LuvK@TD|C&6GCeTLDNzsaEs$fdtqy1u1XwE@^+*jeqqX->a$F}ZVBQfGtPu1(% z^~y)Z1TB&vlt_EFdLIplD* zLP7x5KPA?su_S#xrNP5l(16$M046R1_Ij4Ea>SWPO;{WX>WM*2$M59iCvwK#i73Zp ztaelfzIg88etAk9zgJUYwO%)QCnNnQI7_%$v^uz_<5jXA`{&Tg_nGj*LrX(11A0W7 z8K$5zN0RZm$?tsjWQA%s! zzDjXMps0)wAn;<2F8F3z-00gv3ZC)?TRCjujFZQLlNeNEW&Co z4@2U@`OKXNly-I4jg%z!4T4n?Z4i9UdK~!1M`71FIew8d9Np-lZWyT($N(3dfnK?+ z9G?;R9{6VnOU)Sy5_MS^<1+`V;ZO?oGp-u>3hsNmivU~NaRFpDu9)9opC$ESJUb!S3zxucn{O~-?0GW#g;o Nas7b*C*ps_{|_Qt8btsA diff --git a/lib/glut-3.7.6/progs/demos/glflare/Shine3.bw b/lib/glut-3.7.6/progs/demos/glflare/Shine3.bw deleted file mode 100644 index cac1866e62e97757325eb7030907d0e19e57dd8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6258 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 diff --git a/lib/glut-3.7.6/progs/demos/glflare/Shine6.bw b/lib/glut-3.7.6/progs/demos/glflare/Shine6.bw deleted file mode 100644 index decca9efefdef5078776fad535431de0faa3d8f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5806 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 F{{j5<94r6; diff --git a/lib/glut-3.7.6/progs/demos/glflare/Shine7.bw b/lib/glut-3.7.6/progs/demos/glflare/Shine7.bw deleted file mode 100644 index 91f51226476b6c7351d9e60fd482919aed0964da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6152 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 diff --git a/lib/glut-3.7.6/progs/demos/glflare/Shine8.bw b/lib/glut-3.7.6/progs/demos/glflare/Shine8.bw deleted file mode 100644 index b17eb331f3465a13ebc7fdc828ecb049b81b7665..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5930 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 diff --git a/lib/glut-3.7.6/progs/demos/glflare/Shine9.bw b/lib/glut-3.7.6/progs/demos/glflare/Shine9.bw deleted file mode 100644 index ef9c7efed8e649a0554bdbf8a108284b2ff478e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5913 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 X!P>>h$?zF%XE28M`2QyUPx1c?aAQF^ diff --git a/lib/glut-3.7.6/progs/demos/glflare/glflare.c b/lib/glut-3.7.6/progs/demos/glflare/glflare.c deleted file mode 100644 index c98f09832..000000000 --- a/lib/glut-3.7.6/progs/demos/glflare/glflare.c +++ /dev/null @@ -1,331 +0,0 @@ - -/* This source code is based on Direct3D-based code written by Stephen - Coy of Microsoft. All credit for the original implementation of the - idea should go to Stephen. While I referenced Stephen's code during - the writing of my code, my code was completely written by me from - scratch. The algorithms are basically the same to ease critical - comparison of the OpenGL and Direct3D versions. */ - -/* The image files used by this program are derived from images - developed by Microsoft. */ - -#include -#include -#include -#include -#include - -#if !defined(GL_VERSION_1_1) -/* Assume the texture object extension is supported. */ -#define glBindTexture(A,B) glBindTextureEXT(A,B) -#endif - -#include "loadlum.h" - -GLfloat red[3] = {1.0, 0.0, 0.0}; -GLfloat green[3] = {0.0, 1.0, 0.0}; -GLfloat blue[3] = {0.0, 0.0, 1.0}; -GLfloat from[3] = {0.0, 0.0, 20.0}; -GLfloat at[3] = {0.0, 0.0, 0.0}; -GLfloat near_clip = 1.0; -int useMipmaps = 0, verbose = 0; -GLuint logoTex, flareTex[6], shineTex[10]; - -typedef struct t_flare { - int type; /* flare texture index, 0..5 */ - float scale; - float loc; /* postion on axis */ - GLfloat color[3]; -} Flare; - -Flare -set_flare(int type, float location, float scale, GLfloat color[3], float colorScale) -{ - Flare ret; - - ret.type = type; - ret.loc = location; - ret.scale = scale; - ret.color[0] = color[0] * colorScale; - ret.color[1] = color[1] * colorScale; - ret.color[2] = color[2] * colorScale; - return ret; -} - -Flare flare[20]; -int num_flares = 0; -static float tic = 0.0; -float position[3]; -int shine_tic = 0; - -void -init_flares(void) -{ - /* Shines */ - flare[0] = set_flare(-1, 1.0, 0.3, blue, 1.0); - flare[1] = set_flare(-1, 1.0, 0.2, green, 1.0); - flare[2] = set_flare(-1, 1.0, 0.25, red, 1.0); - - /* Flares, ordered to eliminate redundant texture binds */ - flare[3] = set_flare(1, 0.5, 0.2f, red, 0.3); - flare[4] = set_flare(2, 1.3, 0.04f, red, 0.6); - flare[5] = set_flare(3, 1.0, 0.1f, red, 0.4); - flare[6] = set_flare(3, 0.2, 0.05f, red, 0.3); - flare[7] = set_flare(0, 0.0, 0.04f, red, 0.3); - flare[8] = set_flare(5, -0.25, 0.07f, red, 0.5); - flare[9] = set_flare(5, -0.4, 0.02f, red, 0.6); - flare[10] = set_flare(5, -0.6, 0.04f, red, 0.4); - flare[11] = set_flare(5, -1.0, 0.03f, red, 0.2); - num_flares = 12; -} - -#include "vec3d.c" /* Simple 3D vector math routines. */ - -void -DoFlares(GLfloat from[3], GLfloat at[3], GLfloat light[3], GLfloat near_clip) -{ - GLfloat view_dir[3], tmp[3], light_dir[3], position[3], dx[3], dy[3], - center[3], axis[3], sx[3], sy[3], dot, global_scale = 1.5; - GLuint bound_to = 0; - int i; - - /* view_dir = normalize(at-from) */ - vdiff(view_dir, at, from); - vnorm(view_dir); - - /* center = from + near_clip * view_dir */ - vscale(tmp, view_dir, near_clip); - vadd(center, from, tmp); - - /* light_dir = normalize(light-from) */ - vdiff(light_dir, light, from); - vnorm(light_dir); - - /* light = from + dot(light,view_dir)*near_clip*light_dir */ - dot = vdot(light_dir, view_dir); - vscale(tmp, light_dir, near_clip / dot); - vadd(light, from, light_dir); - - /* axis = light - center */ - vdiff(axis, light, center); - vcopy(dx, axis); - - /* dx = normalize(axis) */ - vnorm(dx); - - /* dy = cross(dx,view_dir) */ - vcross(dy, dx, view_dir); - - glDisable(GL_DEPTH_TEST); - glDisable(GL_DITHER); - glEnable(GL_BLEND); - glBlendFunc(GL_ONE, GL_ONE); - - for (i = 0; i < num_flares; i++) { - vscale(sx, dx, flare[i].scale * global_scale); - vscale(sy, dy, flare[i].scale * global_scale); - - glColor3fv(flare[i].color); - /* Note logic below to eliminate duplicate texture binds. */ - if (flare[i].type < 0) { - if (bound_to) - glEnd(); - glBindTexture(GL_TEXTURE_2D, shineTex[shine_tic]); - bound_to = shineTex[shine_tic]; - shine_tic = (shine_tic + 1) % 10; - glBegin(GL_QUADS); - } else { - if (bound_to != flareTex[flare[i].type]) { - glEnd(); - glBindTexture(GL_TEXTURE_2D, flareTex[flare[i].type]); - bound_to = flareTex[flare[i].type]; - glBegin(GL_QUADS); - } - } - - /* position = center + flare[i].loc * axis */ - vscale(tmp, axis, flare[i].loc); - vadd(position, center, tmp); - - glTexCoord2f(0.0, 0.0); - vadd(tmp, position, sx); - vadd(tmp, tmp, sy); - glVertex3fv(tmp); - - glTexCoord2f(1.0, 0.0); - vdiff(tmp, position, sx); - vadd(tmp, tmp, sy); - glVertex3fv(tmp); - - glTexCoord2f(1.0, 1.0); - vdiff(tmp, position, sx); - vdiff(tmp, tmp, sy); - glVertex3fv(tmp); - - glTexCoord2f(0.0, 1.0); - vadd(tmp, position, sx); - vdiff(tmp, tmp, sy); - glVertex3fv(tmp); - } - glEnd(); -} - -void -DoBackground(void) -{ - glEnable(GL_DITHER); - glDisable(GL_BLEND); - glBindTexture(GL_TEXTURE_2D, logoTex); - - glBegin(GL_QUADS); - glColor3f(0.0, 0.0, 1.0); - glTexCoord2f(0.075, 0.1); - glVertex3f(-11.0, -7.0, 0.0); - - glColor3f(0.8, 0.8, 1.0); - glTexCoord2f(1.0, 0.1); - glVertex3f(11.0, -7.0, 0.0); - - glColor3f(0.0, 0.0, 1.0); - glTexCoord2f(1.0, 0.9); - glVertex3f(11.0, 7.0, 0.0); - - glColor3f(0.0, 0.5, 1.0); - glTexCoord2f(0.075, 0.9); - glVertex3f(-11.0, 7.0, 0.0); - glEnd(); -} - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - position[0] = sin(tic * 0.73) * 6; - position[1] = 4.0 + 8.0 * sin(tic * 0.678); - position[2] = sin(tic * 0.895) * 6; - DoBackground(); - DoFlares(from, at, position, near_clip); - - glutSwapBuffers(); -} - -void -idle(void) -{ - tic += 0.08f; - glutPostRedisplay(); -} - -void -visible(int vis) -{ - if (vis == GLUT_VISIBLE) - glutIdleFunc(idle); - else - glutIdleFunc(NULL); -} - -void -setup_texture(char *filename, GLuint texobj, - GLenum minFilter, GLenum maxFilter) -{ - unsigned char *buf; - int width, height, components; - - glBindTexture(GL_TEXTURE_2D, texobj); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, minFilter); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, maxFilter); - if (verbose) - printf("Loading %s:", filename); - buf = load_luminance(filename, &width, &height, &components); - if (verbose) - printf(" %dx%dx%d\n", width, height, components); - if (useMipmaps) - gluBuild2DMipmaps(GL_TEXTURE_2D, 1, width, height, - GL_LUMINANCE, GL_UNSIGNED_BYTE, buf); - else - glTexImage2D(GL_TEXTURE_2D, 0, 1, width, height, 0, - GL_LUMINANCE, GL_UNSIGNED_BYTE, buf); - free(buf); -} - -void -load_textures(void) -{ - char filename[256]; - GLenum minFilter, maxFilter; - int id = 1, i; - - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - - if (useMipmaps) { - minFilter = GL_LINEAR_MIPMAP_LINEAR; - maxFilter = GL_LINEAR; - } else { - minFilter = GL_LINEAR; - maxFilter = GL_LINEAR; - } - logoTex = id; - setup_texture("OpenGL.bw", logoTex, minFilter, maxFilter); - id++; - - if (!useMipmaps) { - minFilter = GL_NEAREST; - maxFilter = GL_NEAREST; - } - for (i = 0; i < 10; i++) { - shineTex[i] = id; - sprintf(filename, "Shine%d.bw", i); - setup_texture(filename, shineTex[i], minFilter, maxFilter); - id++; - } - for (i = 0; i < 6; i++) { - flareTex[i] = id; - sprintf(filename, "Flare%d.bw", i + 1); - setup_texture(filename, flareTex[i], minFilter, maxFilter); - id++; - } -} - -int -main(int argc, char **argv) -{ - int i; - - glutInit(&argc, argv); - for (i=1; i -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=glflare - 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 "glflare.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 "glflare.mak" CFG="glflare - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "glflare - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "glflare - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "glflare - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "glflare - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "glflare - Win32 Release" -# Name "glflare - Win32 Debug" -# Begin Source File - -SOURCE=.\glflare.c -# End Source File -# Begin Source File - -SOURCE=.\loadlum.c -# End Source File -# Begin Source File - -SOURCE=.\loadlum.h -# End Source File -# Begin Source File - -SOURCE=.\vec3d.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/demos/glflare/loadlum.c b/lib/glut-3.7.6/progs/demos/glflare/loadlum.c deleted file mode 100644 index e3a4676e9..000000000 --- a/lib/glut-3.7.6/progs/demos/glflare/loadlum.c +++ /dev/null @@ -1,182 +0,0 @@ - -/* texture.c - by David Blythe, SGI */ - -/* load_luminace is a simplistic routine for reading an SGI .bw image file. */ - -#include -#include -#include - -#include "loadlum.h" - -typedef struct _ImageRec { - unsigned short imagic; - unsigned short type; - unsigned short dim; - unsigned short xsize, ysize, zsize; - unsigned int min, max; - unsigned int wasteBytes; - char name[80]; - unsigned long colorMap; - FILE *file; - unsigned char *tmp; - unsigned long rleEnd; - unsigned int *rowStart; - int *rowSize; -} ImageRec; - -static void -ConvertShort(unsigned short *array, unsigned int length) -{ - unsigned short b1, b2; - unsigned char *ptr; - - ptr = (unsigned char *) array; - while (length--) { - b1 = *ptr++; - b2 = *ptr++; - *array++ = (b1 << 8) | (b2); - } -} - -static void -ConvertUint(unsigned *array, unsigned int length) -{ - unsigned int b1, b2, b3, b4; - unsigned char *ptr; - - ptr = (unsigned char *) array; - while (length--) { - b1 = *ptr++; - b2 = *ptr++; - b3 = *ptr++; - b4 = *ptr++; - *array++ = (b1 << 24) | (b2 << 16) | (b3 << 8) | (b4); - } -} - -static ImageRec * -ImageOpen(char *fileName) -{ - union { - int testWord; - char testByte[4]; - } endianTest; - ImageRec *image; - int swapFlag, x; - - endianTest.testWord = 1; - if (endianTest.testByte[0] == 1) - swapFlag = 1; - else - swapFlag = 0; - - image = (ImageRec *) malloc(sizeof(ImageRec)); - if (image == NULL) { - fprintf(stderr, "Out of memory!\n"); - exit(1); - } - if ((image->file = fopen(fileName, "rb")) == NULL) { - perror(fileName); - exit(1); - } - fread(image, 1, 12, image->file); - - if (swapFlag) - ConvertShort(&image->imagic, 6); - image->tmp = (unsigned char *) malloc(image->xsize * 256); - if (image->tmp == NULL) { - fprintf(stderr, "Out of memory!\n"); - exit(1); - } - if ((image->type & 0xFF00) == 0x0100) { - x = image->ysize * image->zsize * (int) sizeof(unsigned); - image->rowStart = (unsigned *) malloc(x); - image->rowSize = (int *) malloc(x); - if (image->rowStart == NULL || image->rowSize == NULL) { - fprintf(stderr, "Out of memory!\n"); - exit(1); - } - image->rleEnd = 512 + (2 * x); - fseek(image->file, 512, SEEK_SET); - fread(image->rowStart, 1, x, image->file); - fread(image->rowSize, 1, x, image->file); - if (swapFlag) { - ConvertUint(image->rowStart, x / (int) sizeof(unsigned)); - ConvertUint((unsigned *) image->rowSize, x / (int) sizeof(int)); - } - } - return image; -} - -static void -ImageClose(ImageRec * image) -{ - fclose(image->file); - free(image->tmp); - free(image); -} - -static void -ImageGetRow(ImageRec * image, unsigned char *buf, int y, int z) -{ - unsigned char *iPtr, *oPtr, pixel; - int count; - - if ((image->type & 0xFF00) == 0x0100) { - fseek(image->file, (long) image->rowStart[y + z * image->ysize], SEEK_SET); - fread(image->tmp, 1, (unsigned int) image->rowSize[y + z * image->ysize], - image->file); - iPtr = image->tmp; - oPtr = buf; - for (;;) { - pixel = *iPtr++; - count = (int) (pixel & 0x7F); - if (!count) - return; - if (pixel & 0x80) { - while (count--) - *oPtr++ = *iPtr++; - } else { - pixel = *iPtr++; - while (count--) - *oPtr++ = pixel; - } - } - } else { - fseek(image->file, 512 + (y * image->xsize) + (z * image->xsize * image->ysize), - SEEK_SET); - fread(buf, 1, image->xsize, image->file); - } -} - -unsigned char * -load_luminance(char *name, int *width, int *height, int *components) -{ - unsigned char *base, *lptr; - ImageRec *image; - int y; - - image = ImageOpen(name); - - if (!image) - return NULL; - if (image->zsize != 1) - return NULL; - - *width = image->xsize; - *height = image->ysize; - *components = image->zsize; - - base = (unsigned char *) - malloc(image->xsize * image->ysize * sizeof(unsigned char)); - if (!base) - return NULL; - lptr = base; - for (y = 0; y < image->ysize; y++) { - ImageGetRow(image, lptr, y, 0); - lptr += image->xsize; - } - ImageClose(image); - return base; -} diff --git a/lib/glut-3.7.6/progs/demos/glflare/loadlum.h b/lib/glut-3.7.6/progs/demos/glflare/loadlum.h deleted file mode 100644 index 9c825f26d..000000000 --- a/lib/glut-3.7.6/progs/demos/glflare/loadlum.h +++ /dev/null @@ -1,11 +0,0 @@ - -/* texture.h - by David Blythe, SGI */ - -/* Simple SGI .bw image file loader routine. */ - -extern unsigned char * load_luminance( - char *name, - int *width, - int *height, - int *components); - diff --git a/lib/glut-3.7.6/progs/demos/glflare/vec3d.c b/lib/glut-3.7.6/progs/demos/glflare/vec3d.c deleted file mode 100644 index af52f98bc..000000000 --- a/lib/glut-3.7.6/progs/demos/glflare/vec3d.c +++ /dev/null @@ -1,73 +0,0 @@ - -/* 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. */ - -/* Simple 3D vector routines. This file is meant to be included in - a .c file, hence all the routines are defined statically. A - good C compiler should be able to automatically inline all - these routines. */ - -#include - -static void -vnorm(float vec[3]) -{ - float len; - - len = (float)sqrt(vec[0] * vec[0] + vec[1] * vec[1] + vec[2] * vec[2]); - vec[0] = vec[0] / len; - vec[1] = vec[1] / len; - vec[2] = vec[2] / len; -} - -static float -vdot(float a[3], float b[3]) -{ - return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; -} - -static void -vdiff(float dst[3], float a[3], float b[3]) -{ - dst[0] = a[0] - b[0]; - dst[1] = a[1] - b[1]; - dst[2] = a[2] - b[2]; -} - -static void -vadd(float dst[3], float a[3], float b[3]) -{ - dst[0] = a[0] + b[0]; - dst[1] = a[1] + b[1]; - dst[2] = a[2] + b[2]; -} - -static void -vcopy(float dst[3], float src[3]) -{ - dst[0] = src[0]; - dst[1] = src[1]; - dst[2] = src[2]; -} - -static void -vscale(float dst[3], float src[3], float scale) -{ - dst[0] = src[0] * scale; - dst[1] = src[1] * scale; - dst[2] = src[2] * scale; -} - -static void -vcross(float cross[3], const float v1[3], const float v2[3]) -{ - float tmp[3]; - - tmp[0] = (v1[1] * v2[2]) - (v1[2] * v2[1]); - tmp[1] = (v1[2] * v2[0]) - (v1[0] * v2[2]); - tmp[2] = (v1[0] * v2[1]) - (v1[1] * v2[0]); - vcopy(cross, tmp); -} diff --git a/lib/glut-3.7.6/progs/demos/gliq/Imakefile b/lib/glut-3.7.6/progs/demos/gliq/Imakefile deleted file mode 100644 index f3feaad94..000000000 --- a/lib/glut-3.7.6/progs/demos/gliq/Imakefile +++ /dev/null @@ -1,29 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1994. */ - -#include "../../../Glut.cf" - -TARGETS = gliq - -SRCS = board.c game.c gliq.c pick.c score.c tb.c trackball.c - -AllTarget($(TARGETS)) - -NormalGlutProgramTarget(gliq,board.o game.o gliq.o pick.o score.o tb.o trackball.o) - -LinkFile(trackball.c, ../../examples/trackball.c) -LinkFile(trackball.h, ../../examples/trackball.h) - -trackball.o: trackball.h -tb.o: trackball.h -gliq.h: trackball.h -board.c: gliq.h -game.c: gliq.h -gliq.c: gliq.h -pick.c: gliq.h -score.c: gliq.h - -/* some old imake configs do setup "make depend" dependencies on linked files */ -depend:: trackball.c trackball.h tb.c tb.h - -DependTarget() diff --git a/lib/glut-3.7.6/progs/demos/gliq/board.c b/lib/glut-3.7.6/progs/demos/gliq/board.c deleted file mode 100644 index c6c77f1c3..000000000 --- a/lib/glut-3.7.6/progs/demos/gliq/board.c +++ /dev/null @@ -1,343 +0,0 @@ -/* - * CS 453 - Final project : An OpenGL version of the pegboard game IQ - * Due : June 5, 1997 - * Author : Kiri Wagstaff - * - * File : board.c - * Description : Contains the board readin and selection functions. - * - * - */ - -#include "gliq.h" - -/* functions */ -void selectboard(void); -void readboards(void); -void drawboard(void); -void drawpegs(void); /* Draw all the pegs */ -void drawpeg(void); /* Draw one peg */ -void displaybuttons(void); - -/* globals */ -int numboards, curboard; -int*** boards; -int filled[BOARDSIZE][BOARDSIZE]; /* Current state of the pegs */ - -/* Define the board */ -GLfloat vertices[8*3] = { - -5.0,0.0,5.0, - 5.0,0.0,5.0, - 5.0,0.5,5.0, - -5.0,0.5,5.0, - -5.0,0.0,-5.0, - 5.0,0.0,-5.0, - 5.0,0.5,-5.0, - -5.0,0.5,-5.0 -}; - -GLuint faces[6*4] = { - 0,1,2,3, /*front*/ - 0,3,7,4, /*left*/ - 0,4,5,1, /*bottom*/ - 1,5,6,2, /*right*/ - 3,2,6,7, /*top*/ - 4,7,6,5 /*back*/ -}; - -GLfloat normals[6*3] = { - 0.0, 0.0, 1.0, - -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, -}; - - -void selectboard(void) -{ - int height=glutGet(GLUT_WINDOW_HEIGHT); - int width=glutGet(GLUT_WINDOW_WIDTH); - static float spin=0.0; - - /* Eventually make it spin */ - /* Display the buttons */ - displaybuttons(); - /* Draw the quit button */ - drawquit(7.0, 9.0, 0.4, 1.0); - /* Quit */ - glColor3f(1.0, 1.0, 1.0); /* white */ - /* text(0.78*width, 0.89*height, 0.1*height, "Quit"); */ - /* Select message */ - glColor3f(0.0, 1.0, 0.0); - text(0.3*width, 0.9*height, 0.07*height, "Select a board"); - - /* Draw the total # of pegs */ - glPushMatrix(); - glColor3f(1.0, 1.0, 0.0); /* yellow */ - glTranslatef(-7.8, 8.8, 0.0); - drawpeg(); - text(0.1*width, 0.9*height, 0.07*height, ": %02d", totalpegs); - glPopMatrix(); - - /* do the trackball rotation. */ - glPushMatrix(); - /* tbMatrix(); */ - glRotatef(45.0, 1.0, 0.0, 0.0); - glRotatef(spin, 0.0, 1.0, 0.0); - drawboard(); - drawpegs(); - glPopMatrix(); - spin++; -} - -void readboards(void) -{ - int i, j, hole; - FILE* fp; - - /* Read in the boards */ - fp = fopen("boards.txt", "r"); - if (!fp) - { - printf("Could not open boards.txt, exiting.\n"); - exit(1); - } - fscanf(fp, "%d", &numboards); - boards = (int***)malloc(numboards*sizeof(int**)); - for (i=0; i0) && (filled[i-1][j]==FULL) && (filled[i-2][j]==EMPTY)) - return 1; - else if ((i+20) && (filled[i][j-1]==FULL) && (filled[i][j-2]==EMPTY)) - return 1; - else if ((j+2=numboards) - curboard = 0; - /* Set up filled array */ - for (i=0; i minpegs)) - { - curstate = HIGHSC; - numentered = 0; - written = 0; - glutKeyboardFunc(keyscores); - glutIdleFunc(idlescore); - break; - } - curstate = SELBOARD; - glutIdleFunc(idle); - totalpegs = 0; - for (i=0; i -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=gliq - 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 "gliq.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 "gliq.mak" CFG="gliq - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "gliq - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "gliq - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "gliq - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "gliq - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "gliq - Win32 Release" -# Name "gliq - Win32 Debug" -# Begin Source File - -SOURCE=.\board.c -# End Source File -# Begin Source File - -SOURCE=.\game.c -# End Source File -# Begin Source File - -SOURCE=.\gliq.c -# End Source File -# Begin Source File - -SOURCE=.\gliq.h -# End Source File -# Begin Source File - -SOURCE=.\pick.c -# End Source File -# Begin Source File - -SOURCE=.\score.c -# End Source File -# Begin Source File - -SOURCE=.\trackball.c -# End Source File -# Begin Source File - -SOURCE=.\trackball.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/demos/gliq/gliq.h b/lib/glut-3.7.6/progs/demos/gliq/gliq.h deleted file mode 100644 index fa30f48d4..000000000 --- a/lib/glut-3.7.6/progs/demos/gliq/gliq.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * CS 453 - Final project : An OpenGL version of the pegboard game IQ - * Due : June 5, 1997 - * Author : Kiri Wagstaff - * - * File : gliq.h - * Description : Main header file - * - */ - -#ifndef GLIQ_H -#define GLIQ_H - -#include -#include -#include -#include -#include "trackball.h" - -/* defines */ -#define BOARDSIZE 9 /* on a side, total of 81 holes */ -#define SELECT_BUFFER 256 - -/* enums */ -enum {UNUSED, EMPTY, FULL, CANMOVE, CANTMOVE}; /* for each hole */ -enum {SELBOARD, PLAY, HIGHSC, VIEWSCORES}; /* current state */ -enum {NONE, LEFTARR=100, SELECT, RIGHTARR, QUIT}; /* board selection */ - -/* from gliq.c */ -extern int curstate; -extern int lastpicked; -extern int pegs; -extern int totalpegs; -extern void display(void); - -/* from board.c */ -extern int*** boards; -extern int curboard; -extern int numboards; -extern int filled[BOARDSIZE][BOARDSIZE]; -extern void selectboard(void); -extern void readboards(void); -extern void drawboard(void); -extern void drawpegs(void); -extern void drawpeg(void); -extern void displaybuttons(void); - -/* from game.c */ -extern int playdone; -extern void playgame(void); -extern int legalmove(void); -extern int canmove(int peg); -extern int movesexist(void); -extern void drawquit(float x, float y, float r1, float r2); - -/* from score.c */ -extern int minscore; -extern int minpegs; -extern int numentered; -extern int written; -extern void highscore(void); -extern void readscores(void); -extern void showhighscores(void); -extern void keyscores(unsigned char key, int x, int y); -extern void idlescore(void); - -/* from pick.c */ -extern int picked; -extern GLuint select_buffer[]; -extern GLboolean selection; -extern GLuint pick(int x, int y); -extern void passive(int x, int y); -extern void text(GLfloat x, GLfloat y, GLfloat scale, char *format, ...); - -#endif diff --git a/lib/glut-3.7.6/progs/demos/gliq/pick.c b/lib/glut-3.7.6/progs/demos/gliq/pick.c deleted file mode 100644 index b72f41906..000000000 --- a/lib/glut-3.7.6/progs/demos/gliq/pick.c +++ /dev/null @@ -1,171 +0,0 @@ -/* - * CS 453 - Final project : An OpenGL version of the pegboard game IQ - * Due : June 5, 1997 - * Author : Kiri Wagstaff - * - * File : pick.c - * Description : Routines for picking ability. MANY thanks to Nate - * Robins since all of this code is his. I couldn't - * have done it without him. :) - * - */ - -#include -#include "gliq.h" - -int picked=0; /* Which piece has been selected? */ -GLuint select_buffer[SELECT_BUFFER]; -GLboolean selection = GL_FALSE; - -GLuint pick(int x, int y); -void passive(int x, int y); - -GLuint pick(int x, int y) -{ - GLuint i, hits, num_names, picked; - GLuint* p; - GLboolean save; - GLuint depth = (GLuint)-1; - GLint viewport[4]; - int height = glutGet(GLUT_WINDOW_HEIGHT); - int width = glutGet(GLUT_WINDOW_WIDTH); - - /* fill in the current viewport parameters */ - viewport[0] = 0; - viewport[1] = 0; - viewport[2] = width; - viewport[3] = height; - - /* set the render mode to selection */ - glRenderMode(GL_SELECT); - selection = GL_TRUE; - glInitNames(); - glPushName(0); - - /* setup a picking matrix and render into selection buffer */ - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - - glLoadIdentity(); - gluPickMatrix(x, viewport[3] - y, 5.0, 5.0, viewport); - gluPerspective(60.0, (GLfloat)viewport[3]/(GLfloat)viewport[2], 1.0, 128.0); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(0.0, -2.0, -15.0); - - switch(curstate) - { - case SELBOARD: - /* Draw the quit button */ - drawquit(7.0, 9.0, 0.4, 1.0); - displaybuttons(); - break; - case PLAY: - /* Draw the quit button */ - drawquit(7.0, 9.0, 0.4, 1.0); - glPushMatrix(); - glRotatef(45.0, 1.0, 0.0, 0.0); - tbMatrix(); - drawpegs(); - glPopMatrix(); - break; - case HIGHSC: - break; - case VIEWSCORES: - break; - default: - printf("Unknown state %d, exiting.\n", curstate); - exit(1); - } - - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - - hits = glRenderMode(GL_RENDER); - - selection = GL_FALSE; - - p = select_buffer; - picked = 0; - for (i = 0; i < hits; i++) { - save = GL_FALSE; - num_names = *p; /* number of names in this hit */ - p++; - - if (*p <= depth) { /* check the 1st depth value */ - depth = *p; - save = GL_TRUE; - } - p++; - if (*p <= depth) { /* check the 2nd depth value */ - depth = *p; - save = GL_TRUE; - } - p++; - - if (save) - picked = *p; - - p += num_names; /* skip over the rest of the names */ - } - - return picked; -} - -void passive(int x, int y) -{ - picked = pick(x,y); - glutPostRedisplay(); -} - -/* text: general purpose text routine. draws a string according to - * format in a stroke font at x, y after scaling it by the scale - * specified (scale is in window-space (lower-left origin) pixels). - * - * x - position in x (in window-space) - * y - position in y (in window-space) - * scale - scale in pixels - * format - as in printf() - */ -void -text(GLfloat x, GLfloat y, GLfloat scale, char* format, ...) -{ - va_list args; - char buffer[255], *p; - GLfloat font_scale = 119.05 + 33.33; - - va_start(args, format); - vsprintf(buffer, format, args); - va_end(args); - - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - gluOrtho2D(0, glutGet(GLUT_WINDOW_WIDTH), 0, glutGet(GLUT_WINDOW_HEIGHT)); - - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); - - glPushAttrib(GL_ENABLE_BIT); - glDisable(GL_LIGHTING); - glDisable(GL_TEXTURE_2D); - glDisable(GL_DEPTH_TEST); - glTranslatef(x, y, 0.0); - - glScalef(scale/font_scale, scale/font_scale, scale/font_scale); - - for(p = buffer; *p; p++) - glutStrokeCharacter(GLUT_STROKE_ROMAN, *p); - - glPopAttrib(); - - glPopMatrix(); - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); -} - - diff --git a/lib/glut-3.7.6/progs/demos/gliq/score.c b/lib/glut-3.7.6/progs/demos/gliq/score.c deleted file mode 100644 index e3b347d67..000000000 --- a/lib/glut-3.7.6/progs/demos/gliq/score.c +++ /dev/null @@ -1,277 +0,0 @@ -/* - * CS 453 - Final project : An OpenGL version of the pegboard game IQ - * Due : June 5, 1997 - * Author : Kiri Wagstaff - * - * File : score.c - * Description : Maintains and adds to highscores. - * - */ - -#include "gliq.h" - -int scores[10]; -int totpegs[10]; -char inits[10][4]; -int minscore=0; -int minpegs=100; -char newinits[3]; -int numentered=0; -int written=0; -float color1=1.0, color2=1.0, color3=0.0; -int lasthigh=-1; - -void highscore(void); -void readscores(void); -void showhighscores(void); -void keyscores(unsigned char key, int x, int y); - -void highscore(void) -{ - int i, j; - int width = glutGet(GLUT_WINDOW_WIDTH); - int height = glutGet(GLUT_WINDOW_HEIGHT); - FILE* fp; - - /* Prompt for initials */ - glColor3f(1.0, 1.0, 0.0); /* yellow */ - text(0.08*width, 0.85*height, 0.1*height, "CONGRATULATIONS!"); - glColor3f(1.0, 0.0, 0.0); /* red */ - text(0.05*width, 0.7*height, 0.07*height, "You made it into the top 10!"); - glColor3f(1.0, 1.0, 0.0); /* yellow */ - text(0.2*width, 0.55*height, 0.07*height, "%02d remaining of %02d", - pegs, totalpegs); - glColor3f(0.0, 0.0, 1.0); /* blue */ - text(0.13*width, 0.4*height, 0.07*height, "Please enter your initials:"); - - /* Display what's been entered */ - glColor3f(color1, color2, color3); - for (i=0; itotpegs[i]))) - break; - for (j=9; j>i; j--) - { - if (scores[j-1]==-1 || scores[j-1]==0) - continue; -#if 0 -// printf("compare : "); -// printf(" %s %02d %02d\n", inits[j], scores[j], totpegs[j]); -#endif - scores[j] = scores[j-1]; - totpegs[j] = totpegs[j-1]; - inits[j][0] = inits[j-1][0]; - inits[j][1] = inits[j-1][1]; - inits[j][2] = inits[j-1][2]; - inits[j][3] = inits[j-1][3]; -#if 0 -// printf("with : "); -// printf(" %s %02d %02d\n", inits[j], scores[j], totpegs[j]); -#endif - } -#if 0 -// printf("Storing in index %d\n", i); -#endif - lasthigh=i; - scores[i] = pegs; - totpegs[i] = totalpegs; - inits[i][0] = newinits[0]; - inits[i][1] = newinits[1]; - inits[i][2] = newinits[2]; - inits[i][3] = 0; - - /* get the new min */ - for (j=9; j>0; j--) - if (scores[j]==-1 || scores[j]==0) - continue; - else - { - minscore = scores[j]; - minpegs = totpegs[j]; - break; - } -#if 0 -// printf("New minscore %d, minpegs %d\n", minscore, minpegs); -#endif - fp = fopen("scores.txt", "w"); - if (!fp) - { - printf("Could not open scores.txt, exiting.\n"); - exit(1); - } - for (i=0; i<10; i++) - if (scores[i]!=-1 && scores[i]!=0) - fprintf(fp, "%02d %02d %s\n", scores[i], totpegs[i], inits[i]); - else - break; - written=1; - } - -} - -void readscores(void) -{ - int i; - FILE* fp; - - newinits[0] = 0; - newinits[1] = 0; - newinits[2] = 0; - - /* Read in the current high scores */ - fp = fopen("scores.txt", "r"); - if (!fp) - { - printf("Could not open scores.txt, exiting.\n"); - exit(1); - } - for (i=0; i<10; i++) - { - /* Pegs remaining */ - if ((fscanf(fp, "%d", &(scores[i])))!=1) - { - scores[i] = -1; - break; - } - /* Total pegs */ - if ((fscanf(fp, "%d", &(totpegs[i])))!=1) - { - totpegs[i] = -1; - break; - } - fscanf(fp, "%s", inits[i]); -#if 0 -// printf("read %s\n", inits[i]); -#endif - } - if (i>0) - { - minscore = scores[i-1]; - minpegs = totpegs[i-1]; - } - - if (i<10) - { - minscore=100; - minpegs=0; - } -#if 0 -// printf("Minscore is %d, minpegs is %d\n", minscore, minpegs); -#endif -} - -void showhighscores(void) -{ - int i; - int width = glutGet(GLUT_WINDOW_WIDTH); - int height = glutGet(GLUT_WINDOW_HEIGHT); - - /* Display the current highs */ - glColor3f(1.0, 1.0, 0.0); /* yellow */ - text(0.15*width, 0.9*height, 0.07*height, "Initials Score Out of"); - for (i=0; i<10; i++) - { - if (i>=1) - glColor3f(1.0, 0.0, 0.0); /* red */ - else if (i>=5) - glColor3f(0.0, 0.0, 1.0); /* blue */ - if (scores[i]>0) - { - if (i==lasthigh) - glColor3f(color1, color2, color3); - text(0.15*width, (8.0-0.65*i)/10.0*height, 0.05*height, - " %s", inits[i]); - text(0.48*width, (8.0-0.65*i)/10.0*height, 0.05*height, - "%02d", scores[i]); - text(0.75*width, (8.0-0.65*i)/10.0*height, 0.05*height, - "%02d", totpegs[i]); - } - } - glColor3f(color1, color2, color3); - text(0.15*width, 0.1*height, 0.07*height, "Click to continue..."); - -} - -/* ARGSUSED1 */ -void keyscores(unsigned char key, int x, int y) -{ -#if 0 - if (key == '\r') /*return*/ { - - } else if (key == '\b') /*backspace*/ { - } -#endif - if (numentered>=3) - return; - newinits[numentered] = key; - numentered++; -#if 0 -// printf("Read a %c\n", key); -#endif - glutPostRedisplay(); -} - -void idlescore(void) -{ - static int hscolor=0; - - switch(hscolor) - { - case 0: - color1=1.0; - color2=0.0; - color3=0.0; - hscolor++; - break; - case 1: - color1=0.5; - color2=0.5; - color3=0.0; - hscolor++; - break; - case 2: - color1=1.0; - color2=1.0; - color3=0.0; - hscolor++; - break; - case 3: - color1=0.0; - color2=1.0; - color3=0.0; - hscolor++; - break; - case 4: - color1=0.0; - color2=0.0; - color3=1.0; - hscolor++; - break; - case 5: - color1=1.0; - color2=0.0; - color3=1.0; - hscolor=0; - break; - } - - if (curstate==HIGHSC) - highscore(); - else if (curstate==VIEWSCORES) - showhighscores(); - else - { - printf("Unknown state %d, exiting\n", curstate); - exit(1); - } - - glutPostRedisplay(); -} diff --git a/lib/glut-3.7.6/progs/demos/gliq/tb.c b/lib/glut-3.7.6/progs/demos/gliq/tb.c deleted file mode 100644 index d0b175e8c..000000000 --- a/lib/glut-3.7.6/progs/demos/gliq/tb.c +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Simple trackball-like motion adapted (ripped off) from projtex.c - * (written by David Yu and David Blythe). See the SIGGRAPH '96 - * Advanced OpenGL course notes. - */ - - -/* includes */ -#include -#include /* SunOS 5.6 multithreaded assert() needs . Lame. */ -#include -#include -#include "trackball.h" - -/* globals */ -static GLuint tb_lasttime; - -float curquat[4]; -float lastquat[4]; -int beginx, beginy; - -static GLuint tb_width; -static GLuint tb_height; - -static GLint tb_button = -1; -static GLboolean tb_tracking = GL_FALSE; -static GLboolean tb_animate = GL_TRUE; - -static void -_tbAnimate(void) -{ - add_quats(lastquat, curquat, curquat); - glutPostRedisplay(); -} - -void -_tbStartMotion(int x, int y, int time) -{ - assert(tb_button != -1); - - glutIdleFunc(0); - tb_tracking = GL_TRUE; - tb_lasttime = time; - beginx = x; - beginy = y; -} - -void -_tbStopMotion(unsigned time) -{ - assert(tb_button != -1); - - tb_tracking = GL_FALSE; - - if (time == tb_lasttime && tb_animate) { - glutIdleFunc(_tbAnimate); - } else { - if (tb_animate) { - glutIdleFunc(0); - } - } -} - -void -tbAnimate(GLboolean animate) -{ - tb_animate = animate; -} - -void -tbInit(GLuint button) -{ - tb_button = button; - trackball(curquat, 0.0, 0.0, 0.0, 0.0); -} - -void -tbMatrix(void) -{ - GLfloat m[4][4]; - - assert(tb_button != -1); - build_rotmatrix(m, curquat); - glMultMatrixf(&m[0][0]); -} - -void -tbReshape(int width, int height) -{ - assert(tb_button != -1); - - tb_width = width; - tb_height = height; -} - -void -tbMouse(int button, int state, int x, int y) -{ - assert(tb_button != -1); - - if (state == GLUT_DOWN && button == tb_button) - _tbStartMotion(x, y, glutGet(GLUT_ELAPSED_TIME)); - else if (state == GLUT_UP && button == tb_button) - _tbStopMotion(glutGet(GLUT_ELAPSED_TIME)); -} - -void -tbMotion(int x, int y) -{ - if (tb_tracking) { - trackball(lastquat, - (2.0 * beginx - tb_width) / tb_width, - (tb_height - 2.0 * beginy) / tb_height, - (2.0 * x - tb_width) / tb_width, - (tb_height - 2.0 * y) / tb_height - ); - beginx = x; - beginy = y; - tb_animate = 1; - tb_lasttime = glutGet(GLUT_ELAPSED_TIME); - _tbAnimate(); - } -} diff --git a/lib/glut-3.7.6/progs/demos/gliq/tb.h b/lib/glut-3.7.6/progs/demos/gliq/tb.h deleted file mode 100644 index e4205fb43..000000000 --- a/lib/glut-3.7.6/progs/demos/gliq/tb.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Simple trackball-like motion adapted (ripped off) from projtex.c - * (written by David Yu and David Blythe). See the SIGGRAPH '96 - * Advanced OpenGL course notes. - * - * - * Usage: - * - * o call tbInit() in before any other tb call - * o call tbReshape() from the reshape callback - * o call tbMatrix() to get the trackball matrix rotation - * o call tbStartMotion() to begin trackball movememt - * o call tbStopMotion() to stop trackball movememt - * o call tbMotion() from the motion callback - * o call tbAnimate(GL_TRUE) if you want the trackball to continue - * spinning after the mouse button has been released - * o call tbAnimate(GL_FALSE) if you want the trackball to stop - * spinning after the mouse button has been released - * - * Typical setup: - * - * - void - init(void) - { - tbInit(GLUT_MIDDLE_BUTTON); - tbAnimate(GL_TRUE); - . . . - } - - void - reshape(int width, int height) - { - tbReshape(width, height); - . . . - } - - void - display(void) - { - glPushMatrix(); - - tbMatrix(); - . . . draw the scene . . . - - glPopMatrix(); - } - - void - mouse(int button, int state, int x, int y) - { - tbMouse(button, state, x, y); - . . . - } - - void - motion(int x, int y) - { - tbMotion(x, y); - . . . - } - - int - main(int argc, char** argv) - { - . . . - init(); - glutReshapeFunc(reshape); - glutDisplayFunc(display); - glutMouseFunc(mouse); - glutMotionFunc(motion); - . . . - } - * - * */ - - -/* functions */ -void -tbInit(GLuint button); - -void -tbMatrix(void); - -void -tbReshape(int width, int height); - -void -tbMouse(int button, int state, int x, int y); - -void -tbMotion(int x, int y); - -void -tbAnimate(GLboolean animate); diff --git a/lib/glut-3.7.6/progs/demos/gliq/trackball.c b/lib/glut-3.7.6/progs/demos/gliq/trackball.c deleted file mode 100644 index c2501e8f4..000000000 --- a/lib/glut-3.7.6/progs/demos/gliq/trackball.c +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Simple trackball-like motion adapted (ripped off) from projtex.c - * (written by David Yu and David Blythe). See the SIGGRAPH '96 - * Advanced OpenGL course notes. - */ - - -/* includes */ -#include -#include -#include -#include "trackball.h" - - -/* globals */ -static GLuint tb_lasttime; -static GLfloat tb_lastposition[3]; - -static GLfloat tb_angle = 0.0; -static GLfloat tb_axis[3]; -static GLfloat tb_transform[4][4]; - -static GLuint tb_width; -static GLuint tb_height; - -static GLint tb_button = -1; -static GLboolean tb_tracking = GL_FALSE; -static GLboolean tb_animate = GL_TRUE; - - -/* functions */ -static void -_tbPointToVector(int x, int y, int width, int height, float v[3]) -{ - float d, a; - - /* project x, y onto a hemi-sphere centered within width, height. */ - v[0] = (2.0 * x - width) / width; - v[1] = (height - 2.0 * y) / height; - d = sqrt(v[0] * v[0] + v[1] * v[1]); - v[2] = cos((3.14159265 / 2.0) * ((d < 1.0) ? d : 1.0)); - a = 1.0 / sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]); - v[0] *= a; - v[1] *= a; - v[2] *= a; -} - -static void -_tbAnimate(void) -{ - glutPostRedisplay(); -} - -void -_tbStartMotion(int x, int y, int button, int time) -{ - assert(tb_button != -1); - - tb_tracking = GL_TRUE; - tb_lasttime = time; - _tbPointToVector(x, y, tb_width, tb_height, tb_lastposition); -} - -void -_tbStopMotion(int button, unsigned time) -{ - assert(tb_button != -1); - - tb_tracking = GL_FALSE; - - if (time == tb_lasttime && tb_animate) { - glutIdleFunc(_tbAnimate); - } else { - tb_angle = 0.0; - if (tb_animate) - glutIdleFunc(0); - } -} - -void -tbAnimate(GLboolean animate) -{ - tb_animate = animate; -} - -void -tbInit(GLuint button) -{ - tb_button = button; - tb_angle = 0.0; - - /* put the identity in the trackball transform */ - glPushMatrix(); - glLoadIdentity(); - glGetFloatv(GL_MODELVIEW_MATRIX, (GLfloat *)tb_transform); - glPopMatrix(); -} - -void -tbMatrix() -{ - assert(tb_button != -1); - - glPushMatrix(); - glLoadIdentity(); - glRotatef(tb_angle, tb_axis[0], tb_axis[1], tb_axis[2]); - glMultMatrixf((GLfloat *)tb_transform); - glGetFloatv(GL_MODELVIEW_MATRIX, (GLfloat *)tb_transform); - glPopMatrix(); - - glMultMatrixf((GLfloat *)tb_transform); -} - -void -tbReshape(int width, int height) -{ - assert(tb_button != -1); - - tb_width = width; - tb_height = height; -} - -void -tbMouse(int button, int state, int x, int y) -{ - assert(tb_button != -1); - - if (state == GLUT_DOWN && button == tb_button) - _tbStartMotion(x, y, button, glutGet(GLUT_ELAPSED_TIME)); - else if (state == GLUT_UP && button == tb_button) - _tbStopMotion(button, glutGet(GLUT_ELAPSED_TIME)); -} - -void -tbMotion(int x, int y) -{ - GLfloat current_position[3], dx, dy, dz; - - assert(tb_button != -1); - - if (tb_tracking == GL_FALSE) - return; - - _tbPointToVector(x, y, tb_width, tb_height, current_position); - - /* calculate the angle to rotate by (directly proportional to the - length of the mouse movement */ - dx = current_position[0] - tb_lastposition[0]; - dy = current_position[1] - tb_lastposition[1]; - dz = current_position[2] - tb_lastposition[2]; - tb_angle = 90.0 * sqrt(dx * dx + dy * dy + dz * dz); - - /* calculate the axis of rotation (cross product) */ - tb_axis[0] = tb_lastposition[1] * current_position[2] - - tb_lastposition[2] * current_position[1]; - tb_axis[1] = tb_lastposition[2] * current_position[0] - - tb_lastposition[0] * current_position[2]; - tb_axis[2] = tb_lastposition[0] * current_position[1] - - tb_lastposition[1] * current_position[0]; - - /* reset for next time */ - tb_lasttime = glutGet(GLUT_ELAPSED_TIME); - tb_lastposition[0] = current_position[0]; - tb_lastposition[1] = current_position[1]; - tb_lastposition[2] = current_position[2]; - - /* remember to draw new position */ - glutPostRedisplay(); -} diff --git a/lib/glut-3.7.6/progs/demos/gliq/trackball.h b/lib/glut-3.7.6/progs/demos/gliq/trackball.h deleted file mode 100644 index de0f00c6b..000000000 --- a/lib/glut-3.7.6/progs/demos/gliq/trackball.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Simple trackball-like motion adapted (ripped off) from projtex.c - * (written by David Yu and David Blythe). See the SIGGRAPH '96 - * Advanced OpenGL course notes. - * - * - * Usage: - * - * o call tbInit() in before any other tb call - * o call tbReshape() from the reshape callback - * o call tbMatrix() to get the trackball matrix rotation - * o call tbStartMotion() to begin trackball movememt - * o call tbStopMotion() to stop trackball movememt - * o call tbMotion() from the motion callback - * o call tbAnimate(GL_TRUE) if you want the trackball to continue - * spinning after the mouse button has been released - * o call tbAnimate(GL_FALSE) if you want the trackball to stop - * spinning after the mouse button has been released - * - * Typical setup: - * - * - void - init(void) - { - tbInit(GLUT_MIDDLE_BUTTON); - tbAnimate(GL_TRUE); - . . . - } - - void - reshape(int width, int height) - { - tbReshape(width, height); - . . . - } - - void - display(void) - { - glPushMatrix(); - - tbMatrix(); - . . . draw the scene . . . - - glPopMatrix(); - } - - void - mouse(int button, int state, int x, int y) - { - tbMouse(button, state, x, y); - . . . - } - - void - motion(int x, int y) - { - tbMotion(x, y); - . . . - } - - int - main(int argc, char** argv) - { - . . . - init(); - glutReshapeFunc(reshape); - glutDisplayFunc(display); - glutMouseFunc(mouse); - glutMotionFunc(motion); - . . . - } - * - * */ - - -/* functions */ -void -tbInit(GLuint button); - -void -tbMatrix(void); - -void -tbReshape(int width, int height); - -void -tbMouse(int button, int state, int x, int y); - -void -tbMotion(int x, int y); - -void -tbAnimate(GLboolean animate); diff --git a/lib/glut-3.7.6/progs/demos/glutmech/Imakefile b/lib/glut-3.7.6/progs/demos/glutmech/Imakefile deleted file mode 100644 index 7b6bac3dd..000000000 --- a/lib/glut-3.7.6/progs/demos/glutmech/Imakefile +++ /dev/null @@ -1,15 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1996. */ - -#include "../../../Glut.cf" - -TARGETS = glutmech - -SRCS = glutmech.c -OBJS = glutmech.o - -AllTarget($(TARGETS)) - -NormalGlutProgramTarget(glutmech,$(OBJS)) - -DependTarget() diff --git a/lib/glut-3.7.6/progs/demos/glutmech/glutmech.c b/lib/glut-3.7.6/progs/demos/glutmech/glutmech.c deleted file mode 100644 index 5b0193a24..000000000 --- a/lib/glut-3.7.6/progs/demos/glutmech/glutmech.c +++ /dev/null @@ -1,1764 +0,0 @@ - -/** -* program : glutmech V1.1 -* author : Simon Parkinson-Bates. -* E-mail : sapb@yallara.cs.rmit.edu.au -* Copyright Simon Parkinson-Bates. -* "source if freely avaliable to anyone to copy as long as they -* acknowledge me in their work." -* -* Funtional features -* ------------------ -* * online menu system avaliable by pressing left mouse button -* * online cascading help system avaliable, providing information on -* the several key strokes and what they do. -* * animation sequence coded which makes the mech walk through an -* environment. Shadows will soon be added to make it look -* more realistic. -* * menu control to view mech in wireframe or sold mode. -* * various key strokes avaliable to control idependently the mechs -* many joints. -* * various key strokes avaliable to view mech and environment from -* different angles -* * various key strokes avaliable to alter positioning of the single -* light source. -* -* -* Program features -* ---------------- -* * uses double buffering -* * uses display lists -* * uses glut to manage windows, callbacks, and online menu. -* * uses glpolygonfill() to maintain colors in wireframe and solid -* mode. -* -**/ - -/* start of compilation conditions */ -#define SPHERE -#define COLOR -#define LIGHT -#define TORSO -#define HIP -#define SHOULDER -#define UPPER_ARM -#define LOWER_ARM -#define ROCKET_POD -#define UPPER_LEG -#define LOWER_LEG -#define NO_NORM -#define ANIMATION -#define DRAW_MECH -#define DRAW_ENVIRO -#define MOVE_LIGHT -/* end of compilation conditions */ - -/* start various header files needed */ -#include -#include -#define GLUT -#define GLUT_KEY -#define GLUT_SPEC -#include -/* end of header files */ - -/* start of display list definitions */ -#define SOLID_MECH_TORSO 1 -#define SOLID_MECH_HIP 2 -#define SOLID_MECH_SHOULDER 3 -#define SOLID_MECH_UPPER_ARM 4 -#define SOLID_MECH_FOREARM 5 -#define SOLID_MECH_UPPER_LEG 6 -#define SOLID_MECH_FOOT 7 -#define SOLID_MECH_ROCKET 8 -#define SOLID_MECH_VULCAN 9 -#define SOLID_ENVIRO 10 -/* end of display list definitions */ - -/* start of motion rate variables */ -#define ANKLE_RATE 3 -#define HEEL_RATE 3 -#define ROTATE_RATE 10 -#define TILT_RATE 10 -#define ELBOW_RATE 2 -#define SHOULDER_RATE 5 -#define LAT_RATE 5 -#define CANNON_RATE 40 -#define UPPER_LEG_RATE 3 -#define UPPER_LEG_RATE_GROIN 10 -#define LIGHT_TURN_RATE 10 -#define VIEW_TURN_RATE 10 -/* end of motion rate variables */ - -/* start of motion variables */ - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -GLUquadricObj *qobj; - -char leg = 0; - -int shoulder1 = 0, shoulder2 = 0, shoulder3 = 0, shoulder4 = 0, lat1 = 20, lat2 = 20, - elbow1 = 0, elbow2 = 0, pivot = 0, tilt = 10, ankle1 = 0, ankle2 = 0, heel1 = 0, - heel2 = 0, hip11 = 0, hip12 = 10, hip21 = 0, hip22 = 10, fire = 0, solid_part = 0, - anim = 0, turn = 0, turn1 = 0, lightturn = 0, lightturn1 = 0; - -float elevation = 0.0, distance = 0.0, frame = 3.0 - /* foot1v[] = {} foot2v[] = {} */ ; - -/* end of motion variables */ - -/* start of material definitions */ -#ifdef LIGHT -GLfloat mat_specular[] = -{0.628281, 0.555802, 0.366065, 1.0}; -GLfloat mat_ambient[] = -{0.24725, 0.1995, 0.0745, 1.0}; -GLfloat mat_diffuse[] = -{0.75164, 0.60648, 0.22648, 1.0}; -GLfloat mat_shininess[] = -{128.0 * 0.4}; - -GLfloat mat_specular2[] = -{0.508273, 0.508273, 0.508373}; -GLfloat mat_ambient2[] = -{0.19225, 0.19225, 0.19225}; -GLfloat mat_diffuse2[] = -{0.50754, 0.50754, 0.50754}; -GLfloat mat_shininess2[] = -{128.0 * 0.6}; - -GLfloat mat_specular3[] = -{0.296648, 0.296648, 0.296648}; -GLfloat mat_ambient3[] = -{0.25, 0.20725, 0.20725}; -GLfloat mat_diffuse3[] = -{1, 0.829, 0.829}; -GLfloat mat_shininess3[] = -{128.0 * 0.088}; - -GLfloat mat_specular4[] = -{0.633, 0.727811, 0.633}; -GLfloat mat_ambient4[] = -{0.0215, 0.1745, 0.0215}; -GLfloat mat_diffuse4[] = -{0.07568, 0.61424, 0.07568}; -GLfloat mat_shininess4[] = -{128 * 0.6}; - -GLfloat mat_specular5[] = -{0.60, 0.60, 0.50}; -GLfloat mat_ambient5[] = -{0.0, 0.0, 0.0}; -GLfloat mat_diffuse5[] = -{0.5, 0.5, 0.0}; -GLfloat mat_shininess5[] = -{128.0 * 0.25}; - -#endif -/* end of material definitions */ - -/* start of the body motion functions */ -void -Heel1Add(void) -{ - heel1 = (heel1 + HEEL_RATE) % 360; -} - -void -Heel1Subtract(void) -{ - heel1 = (heel1 - HEEL_RATE) % 360; -} - -void -Heel2Add(void) -{ - heel2 = (heel2 + HEEL_RATE) % 360; -} - -void -Heel2Subtract(void) -{ - heel2 = (heel2 - HEEL_RATE) % 360; -} - -void -Ankle1Add(void) -{ - ankle1 = (ankle1 + ANKLE_RATE) % 360; -} - -void -Ankle1Subtract(void) -{ - ankle1 = (ankle1 - ANKLE_RATE) % 360; -} - -void -Ankle2Add(void) -{ - ankle2 = (ankle2 + ANKLE_RATE) % 360; -} - -void -Ankle2Subtract(void) -{ - ankle2 = (ankle2 - ANKLE_RATE) % 360; -} - -void -RotateAdd(void) -{ - pivot = (pivot + ROTATE_RATE) % 360; -} - -void -RotateSubtract(void) -{ - pivot = (pivot - ROTATE_RATE) % 360; -} - -void -MechTiltSubtract(void) -{ - tilt = (tilt - TILT_RATE) % 360; -} - -void -MechTiltAdd(void) -{ - tilt = (tilt + TILT_RATE) % 360; -} - -void -elbow1Add(void) -{ - elbow1 = (elbow1 + ELBOW_RATE) % 360; -} - -void -elbow1Subtract(void) -{ - elbow1 = (elbow1 - ELBOW_RATE) % 360; -} - -void -elbow2Add(void) -{ - elbow2 = (elbow2 + ELBOW_RATE) % 360; -} - -void -elbow2Subtract(void) -{ - elbow2 = (elbow2 - ELBOW_RATE) % 360; -} - -void -shoulder1Add(void) -{ - shoulder1 = (shoulder1 + SHOULDER_RATE) % 360; -} - -void -shoulder1Subtract(void) -{ - shoulder1 = (shoulder1 - SHOULDER_RATE) % 360; -} - -void -shoulder2Add(void) -{ - shoulder2 = (shoulder2 + SHOULDER_RATE) % 360; -} - -void -shoulder2Subtract(void) -{ - shoulder2 = (shoulder2 - SHOULDER_RATE) % 360; -} - -void -shoulder3Add(void) -{ - shoulder3 = (shoulder3 + SHOULDER_RATE) % 360; -} - -void -shoulder3Subtract(void) -{ - shoulder3 = (shoulder3 - SHOULDER_RATE) % 360; -} - -void -shoulder4Add(void) -{ - shoulder4 = (shoulder4 + SHOULDER_RATE) % 360; -} - -void -shoulder4Subtract(void) -{ - shoulder4 = (shoulder4 - SHOULDER_RATE) % 360; -} - -void -lat1Raise(void) -{ - lat1 = (lat1 + LAT_RATE) % 360; -} - -void -lat1Lower(void) -{ - lat1 = (lat1 - LAT_RATE) % 360; -} - -void -lat2Raise(void) -{ - lat2 = (lat2 + LAT_RATE) % 360; -} - -void -lat2Lower(void) -{ - lat2 = (lat2 - LAT_RATE) % 360; -} - -void -FireCannon(void) -{ - fire = (fire + CANNON_RATE) % 360; -} - -void -RaiseLeg1Forward(void) -{ - hip11 = (hip11 + UPPER_LEG_RATE) % 360; -} - -void -LowerLeg1Backwards(void) -{ - hip11 = (hip11 - UPPER_LEG_RATE) % 360; -} - -void -RaiseLeg1Outwards(void) -{ - hip12 = (hip12 + UPPER_LEG_RATE_GROIN) % 360; -} - -void -LowerLeg1Inwards(void) -{ - hip12 = (hip12 - UPPER_LEG_RATE_GROIN) % 360; -} - -void -RaiseLeg2Forward(void) -{ - hip21 = (hip21 + UPPER_LEG_RATE) % 360; -} - -void -LowerLeg2Backwards(void) -{ - hip21 = (hip21 - UPPER_LEG_RATE) % 360; -} - -void -RaiseLeg2Outwards(void) -{ - hip22 = (hip22 + UPPER_LEG_RATE_GROIN) % 360; -} - -void -LowerLeg2Inwards(void) -{ - hip22 = (hip22 - UPPER_LEG_RATE_GROIN) % 360; -} - -/* end of body motion functions */ - -/* start of light source position functions */ -void -TurnRight(void) -{ - turn = (turn - VIEW_TURN_RATE) % 360; -} - -void -TurnLeft(void) -{ - turn = (turn + VIEW_TURN_RATE) % 360; -} - -void -TurnForwards(void) -{ - turn1 = (turn1 - VIEW_TURN_RATE) % 360; -} - -void -TurnBackwards(void) -{ - turn1 = (turn1 + VIEW_TURN_RATE) % 360; -} - -void -LightTurnRight(void) -{ - lightturn = (lightturn + LIGHT_TURN_RATE) % 360; -} - -void -LightTurnLeft(void) -{ - lightturn = (lightturn - LIGHT_TURN_RATE) % 360; -} - -void -LightForwards(void) -{ - lightturn1 = (lightturn1 + LIGHT_TURN_RATE) % 360; -} - -void -LightBackwards(void) -{ - lightturn1 = (lightturn1 - LIGHT_TURN_RATE) % 360; -} - -/* end of light source position functions */ - -/* start of geometric shape functions */ -void -Box(float width, float height, float depth, char solid) -{ - char i, j = 0; - float x = width / 2.0, y = height / 2.0, z = depth / 2.0; - - for (i = 0; i < 4; i++) { - glRotatef(90.0, 0.0, 0.0, 1.0); - if (j) { - if (!solid) - glBegin(GL_LINE_LOOP); - else - glBegin(GL_QUADS); - glNormal3f(-1.0, 0.0, 0.0); - glVertex3f(-x, y, z); - glVertex3f(-x, -y, z); - glVertex3f(-x, -y, -z); - glVertex3f(-x, y, -z); - glEnd(); - if (solid) { - glBegin(GL_TRIANGLES); - glNormal3f(0.0, 0.0, 1.0); - glVertex3f(0.0, 0.0, z); - glVertex3f(-x, y, z); - glVertex3f(-x, -y, z); - glNormal3f(0.0, 0.0, -1.0); - glVertex3f(0.0, 0.0, -z); - glVertex3f(-x, -y, -z); - glVertex3f(-x, y, -z); - glEnd(); - } - j = 0; - } else { - if (!solid) - glBegin(GL_LINE_LOOP); - else - glBegin(GL_QUADS); - glNormal3f(-1.0, 0.0, 0.0); - glVertex3f(-y, x, z); - glVertex3f(-y, -x, z); - glVertex3f(-y, -x, -z); - glVertex3f(-y, x, -z); - glEnd(); - if (solid) { - glBegin(GL_TRIANGLES); - glNormal3f(0.0, 0.0, 1.0); - glVertex3f(0.0, 0.0, z); - glVertex3f(-y, x, z); - glVertex3f(-y, -x, z); - glNormal3f(0.0, 0.0, -1.0); - glVertex3f(0.0, 0.0, -z); - glVertex3f(-y, -x, -z); - glVertex3f(-y, x, -z); - glEnd(); - } - j = 1; - } - } -} - -void -Octagon(float side, float height, char solid) -{ - char j; - float x = sin(0.785398163) * side, y = side / 2.0, z = height / 2.0, c; - - c = x + y; - for (j = 0; j < 8; j++) { - glTranslatef(-c, 0.0, 0.0); - if (!solid) - glBegin(GL_LINE_LOOP); - else - glBegin(GL_QUADS); - glNormal3f(-1.0, 0.0, 0.0); - glVertex3f(0.0, -y, z); - glVertex3f(0.0, y, z); - glVertex3f(0.0, y, -z); - glVertex3f(0.0, -y, -z); - glEnd(); - glTranslatef(c, 0.0, 0.0); - if (solid) { - glBegin(GL_TRIANGLES); - glNormal3f(0.0, 0.0, 1.0); - glVertex3f(0.0, 0.0, z); - glVertex3f(-c, -y, z); - glVertex3f(-c, y, z); - glNormal3f(0.0, 0.0, -1.0); - glVertex3f(0.0, 0.0, -z); - glVertex3f(-c, y, -z); - glVertex3f(-c, -y, -z); - glEnd(); - } - glRotatef(45.0, 0.0, 0.0, 1.0); - } -} - -/* end of geometric shape functions */ -#ifdef NORM -void -Normalize(float v[3]) -{ - GLfloat d = sqrt(v[1] * v[1] + v[2] * v[2] + v[3] * v[3]); - - if (d == 0.0) { - printf("zero length vector"); - return; - } - v[1] /= d; - v[2] /= d; - v[3] /= d; -} - -void -NormXprod(float v1[3], float v2[3], float v[3], float out[3]) -{ - GLint i, j; - GLfloat length; - - out[0] = v1[1] * v2[2] - v1[2] * v2[1]; - out[1] = v1[2] * v2[0] - v1[0] * v2[2]; - out[2] = v1[0] * v2[1] - v1[1] * v2[0]; - Normalize(out); -} - -#endif - -void -SetMaterial(GLfloat spec[], GLfloat amb[], GLfloat diff[], GLfloat shin[]) -{ - - glMaterialfv(GL_FRONT, GL_SPECULAR, spec); - glMaterialfv(GL_FRONT, GL_SHININESS, shin); - glMaterialfv(GL_FRONT, GL_AMBIENT, amb); - glMaterialfv(GL_FRONT, GL_DIFFUSE, diff); -} - -void -MechTorso(char solid) -{ - glNewList(SOLID_MECH_TORSO, GL_COMPILE); -#ifdef LIGHT - SetMaterial(mat_specular, mat_ambient, mat_diffuse, mat_shininess); -#endif - glColor3f(1.0, 1.0, 0.0); - Box(1.0, 1.0, 3.0, solid); - glTranslatef(0.75, 0.0, 0.0); -#ifdef LIGHT - SetMaterial(mat_specular2, mat_ambient2, mat_diffuse2, mat_shininess2); -#endif - glColor3f(0.5, 0.5, 0.5); - Box(0.5, 0.6, 2.0, solid); - glTranslatef(-1.5, 0.0, 0.0); - Box(0.5, 0.6, 2.0, solid); - glTranslatef(0.75, 0.0, 0.0); - glEndList(); -} - -void -MechHip(char solid) -{ - int i; - - glNewList(SOLID_MECH_HIP, GL_COMPILE); -#ifdef LIGHT - SetMaterial(mat_specular, mat_ambient, mat_diffuse, mat_shininess); -#endif - glColor3f(1.0, 1.0, 0.0); - Octagon(0.7, 0.5, solid); -#ifdef SPHERE - for (i = 0; i < 2; i++) { - if (i) - glScalef(-1.0, 1.0, 1.0); - glTranslatef(1.0, 0.0, 0.0); -#ifdef LIGHT - SetMaterial(mat_specular2, mat_ambient2, mat_diffuse2, mat_shininess2); -#endif - glColor3f(0.5, 0.5, 0.5); - if (!solid) - gluQuadricDrawStyle(qobj, GLU_LINE); - gluSphere(qobj, 0.2, 16, 16); - glTranslatef(-1.0, 0.0, 0.0); - } - glScalef(-1.0, 1.0, 1.0); -#endif - glEndList(); -} - -void -Shoulder(char solid) -{ - glNewList(SOLID_MECH_SHOULDER, GL_COMPILE); -#ifdef LIGHT - SetMaterial(mat_specular, mat_ambient, mat_diffuse, mat_shininess); -#endif - glColor3f(1.0, 1.0, 0.0); - Box(1.0, 0.5, 0.5, solid); - glTranslatef(0.9, 0.0, 0.0); -#ifdef LIGHT - SetMaterial(mat_specular2, mat_ambient2, mat_diffuse2, mat_shininess2); -#endif - glColor3f(0.5, 0.5, 0.5); -#ifdef SPHERE - if (!solid) - gluQuadricDrawStyle(qobj, GLU_LINE); - gluSphere(qobj, 0.6, 16, 16); -#endif - glTranslatef(-0.9, 0.0, 0.0); - glEndList(); -} - -void -UpperArm(char solid) -{ - int i; - - glNewList(SOLID_MECH_UPPER_ARM, GL_COMPILE); -#ifdef LIGHT - SetMaterial(mat_specular, mat_ambient, mat_diffuse, mat_shininess); -#endif - glColor3f(1.0, 1.0, 0.0); - Box(1.0, 2.0, 1.0, solid); - glTranslatef(0.0, -0.95, 0.0); - glRotatef(90.0, 1.0, 0.0, 0.0); -#ifdef LIGHT - SetMaterial(mat_specular2, mat_ambient2, mat_diffuse2, mat_shininess2); -#endif - glColor3f(0.5, 0.5, 0.5); - if (!solid) - gluQuadricDrawStyle(qobj, GLU_LINE); - gluCylinder(qobj, 0.4, 0.4, 1.5, 16, 10); -#ifdef LIGHT - SetMaterial(mat_specular, mat_ambient, mat_diffuse, mat_shininess); -#endif - glColor3f(1.0, 1.0, 0.0); - glRotatef(-90.0, 1.0, 0.0, 0.0); - glTranslatef(-0.4, -1.85, 0.0); - glRotatef(90.0, 0.0, 1.0, 0.0); - for (i = 0; i < 2; i++) { - if (!solid) - gluQuadricDrawStyle(qobj, GLU_LINE); - if (i) - gluCylinder(qobj, 0.5, 0.5, 0.8, 16, 10); - else - gluCylinder(qobj, 0.2, 0.2, 0.8, 16, 10); - } - for (i = 0; i < 2; i++) { - if (i) - glScalef(-1.0, 1.0, 1.0); - if (!solid) - gluQuadricDrawStyle(qobj, GLU_LINE); - if (i) - glTranslatef(0.0, 0.0, 0.8); - gluDisk(qobj, 0.2, 0.5, 16, 10); - if (i) - glTranslatef(0.0, 0.0, -0.8); - } - glScalef(-1.0, 1.0, 1.0); - glRotatef(-90.0, 0.0, 1.0, 0.0); - glTranslatef(0.4, 2.9, 0.0); - glEndList(); -} - -void -VulcanGun(char solid) -{ - int i; - - glNewList(SOLID_MECH_VULCAN, GL_COMPILE); - -#ifdef LIGHT - SetMaterial(mat_specular2, mat_ambient2, mat_diffuse2, mat_shininess2); -#endif - glColor3f(0.5, 0.5, 0.5); - - if (!solid) { - gluQuadricDrawStyle(qobj, GLU_LINE); - } - gluCylinder(qobj, 0.5, 0.5, 0.5, 16, 10); - glTranslatef(0.0, 0.0, 0.5); - gluDisk(qobj, 0.0, 0.5, 16, 10); - - for (i = 0; i < 5; i++) { - glRotatef(72.0, 0.0, 0.0, 1.0); - glTranslatef(0.0, 0.3, 0.0); - if (!solid) { - gluQuadricDrawStyle(qobj, GLU_LINE); - } - gluCylinder(qobj, 0.15, 0.15, 2.0, 16, 10); - gluCylinder(qobj, 0.06, 0.06, 2.0, 16, 10); - glTranslatef(0.0, 0.0, 2.0); - gluDisk(qobj, 0.1, 0.15, 16, 10); - gluCylinder(qobj, 0.1, 0.1, 0.1, 16, 5); - glTranslatef(0.0, 0.0, 0.1); - gluDisk(qobj, 0.06, 0.1, 16, 5); - glTranslatef(0.0, -0.3, -2.1); - } - glEndList(); -} - -void -ForeArm(char solid) -{ - char i; - - glNewList(SOLID_MECH_FOREARM, GL_COMPILE); -#ifdef LIGHT - SetMaterial(mat_specular, mat_ambient, mat_diffuse, mat_shininess); -#endif - glColor3f(1.0, 1.0, 0.0); - for (i = 0; i < 5; i++) { - glTranslatef(0.0, -0.1, -0.15); - Box(0.6, 0.8, 0.2, solid); - glTranslatef(0.0, 0.1, -0.15); - Box(0.4, 0.6, 0.1, solid); - } - glTranslatef(0.0, 0.0, 2.45); - Box(1.0, 1.0, 2.0, solid); - glTranslatef(0.0, 0.0, -1.0); - glEndList(); -} - -void -UpperLeg(char solid) -{ - int i; - - glNewList(SOLID_MECH_UPPER_LEG, GL_COMPILE); -#ifdef LIGHT - SetMaterial(mat_specular, mat_ambient, mat_diffuse, mat_shininess); -#endif - glColor3f(1.0, 1.0, 0.0); - if (!solid) { - gluQuadricDrawStyle(qobj, GLU_LINE); - } - glTranslatef(0.0, -1.0, 0.0); - Box(0.4, 1.0, 0.7, solid); - glTranslatef(0.0, -0.65, 0.0); - for (i = 0; i < 5; i++) { - Box(1.2, 0.3, 1.2, solid); - glTranslatef(0.0, -0.2, 0.0); - Box(1.0, 0.1, 1.0, solid); - glTranslatef(0.0, -0.2, 0.0); - } - glTranslatef(0.0, -0.15, -0.4); - Box(2.0, 0.5, 2.0, solid); - glTranslatef(0.0, -0.3, -0.2); - glRotatef(90.0, 1.0, 0.0, 0.0); -#ifdef LIGHT - SetMaterial(mat_specular2, mat_ambient2, mat_diffuse2, mat_shininess2); -#endif - glColor3f(0.5, 0.5, 0.5); - gluCylinder(qobj, 0.6, 0.6, 3.0, 16, 10); -#ifdef LIGHT - SetMaterial(mat_specular, mat_ambient, mat_diffuse, mat_shininess); -#endif - glColor3f(1.0, 1.0, 0.0); - glRotatef(-90.0, 1.0, 0.0, 0.0); - glTranslatef(0.0, -1.5, 1.0); - Box(1.5, 3.0, 0.5, solid); - glTranslatef(0.0, -1.75, -0.8); - Box(2.0, 0.5, 2.0, solid); - glTranslatef(0.0, -0.9, -0.85); -#ifdef LIGHT - SetMaterial(mat_specular2, mat_ambient2, mat_diffuse2, mat_shininess2); -#endif - glColor3f(0.5, 0.5, 0.5); - gluCylinder(qobj, 0.8, 0.8, 1.8, 16, 10); - for (i = 0; i < 2; i++) { - if (i) - glScalef(-1.0, 1.0, 1.0); - if (!solid) - gluQuadricDrawStyle(qobj, GLU_LINE); - if (i) - glTranslatef(0.0, 0.0, 1.8); - gluDisk(qobj, 0.0, 0.8, 16, 10); - if (i) - glTranslatef(0.0, 0.0, -1.8); - } - glScalef(-1.0, 1.0, 1.0); - glEndList(); -} - -void -Foot(char solid) -{ - - glNewList(SOLID_MECH_FOOT, GL_COMPILE); -#ifdef LIGHT - SetMaterial(mat_specular2, mat_ambient2, mat_diffuse2, mat_shininess2); -#endif - glColor3f(0.5, 0.5, 0.5); - glRotatef(90.0, 1.0, 0.0, 0.0); - Octagon(1.5, 0.6, solid); - glRotatef(-90.0, 1.0, 0.0, 0.0); - glEndList(); -} - -void -LowerLeg(char solid) -{ - float k, l; - -#ifdef LIGHT - SetMaterial(mat_specular, mat_ambient, mat_diffuse, mat_shininess); -#endif - glColor3f(1.0, 1.0, 0.0); - for (k = 0.0; k < 2.0; k++) { - for (l = 0.0; l < 2.0; l++) { - glPushMatrix(); - glTranslatef(k, 0.0, l); -#ifdef LIGHT - SetMaterial(mat_specular, mat_ambient, mat_diffuse, mat_shininess); -#endif - glColor3f(1.0, 1.0, 0.0); - Box(1.0, 0.5, 1.0, solid); - glTranslatef(0.0, -0.45, 0.0); -#ifdef LIGHT - SetMaterial(mat_specular2, mat_ambient2, mat_diffuse2, mat_shininess2); -#endif - glColor3f(0.5, 0.5, 0.5); -#ifdef SPHERE - if (!solid) - glutWireSphere(0.2, 16, 10); - else - glutSolidSphere(0.2, 16, 10); -#endif - if (leg) - glRotatef((GLfloat) heel1, 1.0, 0.0, 0.0); - else - glRotatef((GLfloat) heel2, 1.0, 0.0, 0.0); - /* glTranslatef(0.0, -0.2, 0.0); */ - glTranslatef(0.0, -1.7, 0.0); -#ifdef LIGHT - SetMaterial(mat_specular, mat_ambient, mat_diffuse, mat_shininess); -#endif - glColor3f(1.0, 1.0, 0.0); - Box(0.25, 3.0, 0.25, solid); - glTranslatef(0.0, -1.7, 0.0); -#ifdef LIGHT - SetMaterial(mat_specular2, mat_ambient2, mat_diffuse2, mat_shininess2); -#endif - glColor3f(0.5, 0.5, 0.5); -#ifdef SPHERE - if (!solid) - glutWireSphere(0.2, 16, 10); - else - glutSolidSphere(0.2, 16, 10); -#endif - if (leg) - glRotatef((GLfloat) - heel1, 1.0, 0.0, 0.0); - else - glRotatef((GLfloat) - heel2, 1.0, 0.0, 0.0); - glTranslatef(0.0, -0.45, 0.0); -#ifdef LIGHT - SetMaterial(mat_specular, mat_ambient, mat_diffuse, mat_shininess); -#endif - glColor3f(1.0, 1.0, 0.0); - Box(1.0, 0.5, 1.0, solid); - if (!k && !l) { - int j; - - glTranslatef(-0.4, -0.8, 0.5); - if (leg) - glRotatef((GLfloat) ankle1, 1.0, 0.0, 0.0); - else - glRotatef((GLfloat) ankle2, 1.0, 0.0, 0.0); - glRotatef(90.0, 0.0, 1.0, 0.0); - if (!solid) - gluQuadricDrawStyle(qobj, GLU_LINE); - gluCylinder(qobj, 0.8, 0.8, 1.8, 16, 10); - for (j = 0; j < 2; j++) { - if (!solid) - gluQuadricDrawStyle(qobj, GLU_LINE); - if (j) { - glScalef(-1.0, 1.0, 1.0); - glTranslatef(0.0, 0.0, 1.8); - } - gluDisk(qobj, 0.0, 0.8, 16, 10); - if (j) - glTranslatef(0.0, 0.0, -1.8); - } - glScalef(-1.0, 1.0, 1.0); - glRotatef(-90.0, 0.0, 1.0, 0.0); - glTranslatef(0.95, -0.8, 0.0); - glCallList(SOLID_MECH_FOOT); - } - glPopMatrix(); - } - } -} - -void -RocketPod(char solid) -{ - - int i, j, k = 0; - - glNewList(SOLID_MECH_ROCKET, GL_COMPILE); -#ifdef LIGHT - SetMaterial(mat_specular2, mat_ambient2, mat_diffuse2, mat_shininess2); -#endif - glColor3f(0.5, 0.5, 0.5); - glScalef(0.4, 0.4, 0.4); - glRotatef(45.0, 0.0, 0.0, 1.0); - glTranslatef(1.0, 0.0, 0.0); - Box(2.0, 0.5, 3.0, solid); - glTranslatef(1.0, 0.0, 0.0); - glRotatef(45.0, 0.0, 0.0, 1.0); - glTranslatef(0.5, 0.0, 0.0); - Box(1.2, 0.5, 3.0, solid); - glTranslatef(2.1, 0.0, 0.0); - glRotatef(-90.0, 0.0, 0.0, 1.0); -#ifdef LIGHT - SetMaterial(mat_specular, mat_ambient, mat_diffuse, mat_shininess); -#endif - glColor3f(1.0, 1.0, 0.0); - Box(2.0, 3.0, 4.0, solid); - glTranslatef(-0.5, -1.0, 1.3); - for (i = 0; i < 2; i++) { - for (j = 0; j < 3; j++) { - if (!solid) { - gluQuadricDrawStyle(qobj, GLU_LINE); - } - glTranslatef(i, j, 0.6); -#ifdef LIGHT - SetMaterial(mat_specular3, mat_ambient3, mat_diffuse3, mat_shininess3); -#endif - glColor3f(1.0, 1.0, 1.0); - gluCylinder(qobj, 0.4, 0.4, 0.3, 16, 10); - glTranslatef(0.0, 0.0, 0.3); -#ifdef LIGHT - SetMaterial(mat_specular4, mat_ambient4, mat_diffuse4, mat_shininess4); -#endif - glColor3f(0.0, 1.0, 0.0); - gluCylinder(qobj, 0.4, 0.0, 0.5, 16, 10); - k++; - glTranslatef(-i, -j, -0.9); - } - } - glEndList(); -} - -void -Enviro(char solid) -{ - - int i, j; - - glNewList(SOLID_ENVIRO, GL_COMPILE); - SetMaterial(mat_specular4, mat_ambient4, mat_diffuse4, mat_shininess4); - glColor3f(0.0, 1.0, 0.0); - Box(20.0, 0.5, 30.0, solid); - SetMaterial(mat_specular4, mat_ambient3, mat_diffuse2, mat_shininess); - glColor3f(0.6, 0.6, 0.6); - glTranslatef(0.0, 0.0, -10.0); - for (j = 0; j < 6; j++) { - for (i = 0; i < 2; i++) { - if (i) - glScalef(-1.0, 1.0, 1.0); - glTranslatef(10.0, 4.0, 0.0); - Box(4.0, 8.0, 2.0, solid); - glTranslatef(0.0, -1.0, -3.0); - Box(4.0, 6.0, 2.0, solid); - glTranslatef(-10.0, -3.0, 3.0); - } - glScalef(-1.0, 1.0, 1.0); - glTranslatef(0.0, 0.0, 5.0); - } - glEndList(); -} - -void -Toggle(void) -{ - if (solid_part) - solid_part = 0; - else - solid_part = 1; -} - -void -disable(void) -{ - glDisable(GL_LIGHTING); - glDisable(GL_DEPTH_TEST); - glDisable(GL_NORMALIZE); - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); -} - -void -lighting(void) -{ - - GLfloat position[] = - {0.0, 0.0, 2.0, 1.0}; - -#ifdef MOVE_LIGHT - glRotatef((GLfloat) lightturn1, 1.0, 0.0, 0.0); - glRotatef((GLfloat) lightturn, 0.0, 1.0, 0.0); - glRotatef(0.0, 1.0, 0.0, 0.0); -#endif - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_NORMALIZE); - glDepthFunc(GL_LESS); - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - - glLightfv(GL_LIGHT0, GL_POSITION, position); - glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 80.0); - - glTranslatef(0.0, 0.0, 2.0); - glDisable(GL_LIGHTING); - Box(0.1, 0.1, 0.1, 0); - glEnable(GL_LIGHTING); -} - -void -DrawMech(void) -{ - int i, j; - - glScalef(0.5, 0.5, 0.5); - glPushMatrix(); - glTranslatef(0.0, -0.75, 0.0); - glRotatef((GLfloat) tilt, 1.0, 0.0, 0.0); - - glRotatef(90.0, 1.0, 0.0, 0.0); -#ifdef HIP - glCallList(SOLID_MECH_HIP); -#endif - glRotatef(-90.0, 1.0, 0.0, 0.0); - - glTranslatef(0.0, 0.75, 0.0); - glPushMatrix(); - glRotatef((GLfloat) pivot, 0.0, 1.0, 0.0); - glPushMatrix(); -#ifdef TORSO - glCallList(SOLID_MECH_TORSO); -#endif - glPopMatrix(); - glPushMatrix(); - glTranslatef(0.5, 0.5, 0.0); -#ifdef ROCKET_POD - glCallList(SOLID_MECH_ROCKET); -#endif - glPopMatrix(); - for (i = 0; i < 2; i++) { - glPushMatrix(); - if (i) - glScalef(-1.0, 1.0, 1.0); - glTranslatef(1.5, 0.0, 0.0); -#ifdef SHOULDER - glCallList(SOLID_MECH_SHOULDER); -#endif - glTranslatef(0.9, 0.0, 0.0); - if (i) { - glRotatef((GLfloat) lat1, 0.0, 0.0, 1.0); - glRotatef((GLfloat) shoulder1, 1.0, 0.0, 0.0); - glRotatef((GLfloat) shoulder3, 0.0, 1.0, 0.0); - } else { - glRotatef((GLfloat) lat2, 0.0, 0.0, 1.0); - glRotatef((GLfloat) shoulder2, 1.0, 0.0, 0.0); - glRotatef((GLfloat) shoulder4, 0.0, 1.0, 0.0); - } - glTranslatef(0.0, -1.4, 0.0); -#ifdef UPPER_ARM - glCallList(SOLID_MECH_UPPER_ARM); -#endif - glTranslatef(0.0, -2.9, 0.0); - if (i) - glRotatef((GLfloat) elbow1, 1.0, 0.0, 0.0); - else - glRotatef((GLfloat) elbow2, 1.0, 0.0, 0.0); - glTranslatef(0.0, -0.9, -0.2); -#ifdef LOWER_ARM - glCallList(SOLID_MECH_FOREARM); - glPushMatrix(); - glTranslatef(0.0, 0.0, 2.0); - glRotatef((GLfloat) fire, 0.0, 0.0, 1.0); - glCallList(SOLID_MECH_VULCAN); - glPopMatrix(); -#endif - glPopMatrix(); - } - glPopMatrix(); - - glPopMatrix(); - - for (j = 0; j < 2; j++) { - glPushMatrix(); - if (j) { - glScalef(-0.5, 0.5, 0.5); - leg = 1; - } else { - glScalef(0.5, 0.5, 0.5); - leg = 0; - } - glTranslatef(2.0, -1.5, 0.0); - if (j) { - glRotatef((GLfloat) hip11, 1.0, 0.0, 0.0); - glRotatef((GLfloat) hip12, 0.0, 0.0, 1.0); - } else { - glRotatef((GLfloat) hip21, 1.0, 0.0, 0.0); - glRotatef((GLfloat) hip22, 0.0, 0.0, 1.0); - } - glTranslatef(0.0, 0.3, 0.0); -#ifdef UPPER_LEG - glPushMatrix(); - glCallList(SOLID_MECH_UPPER_LEG); - glPopMatrix(); -#endif - glTranslatef(0.0, -8.3, -0.4); - if (j) - glRotatef((GLfloat) - hip12, 0.0, 0.0, 1.0); - else - glRotatef((GLfloat) - hip22, 0.0, 0.0, 1.0); - glTranslatef(-0.5, -0.85, -0.5); -#ifdef LOWER_LEG - LowerLeg(1); -#endif - glPopMatrix(); - } -} - -void -display(void) -{ - glClearColor(0.0, 0.0, 0.0, 0.0); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glEnable(GL_DEPTH_TEST); - - glPushMatrix(); - glRotatef((GLfloat) turn, 0.0, 1.0, 0.0); - glRotatef((GLfloat) turn1, 1.0, 0.0, 0.0); -#ifdef LIGHT - if (solid_part) { - glPushMatrix(); - lighting(); - glPopMatrix(); - } else - disable(); -#endif -#ifdef DRAW_MECH - glPushMatrix(); - glTranslatef(0.0, elevation, 0.0); - DrawMech(); - glPopMatrix(); -#endif -#ifdef DRAW_ENVIRO - glPushMatrix(); - if (distance >= 20.136) - distance = 0.0; - glTranslatef(0.0, -5.0, -distance); - glCallList(SOLID_ENVIRO); - glTranslatef(0.0, 0.0, 10.0); - glCallList(SOLID_ENVIRO); - glPopMatrix(); -#endif - glPopMatrix(); - glFlush(); - glutSwapBuffers(); -} - -void -myinit(void) -{ - char i = 1; - - qobj = gluNewQuadric(); -#ifdef LIGHT - SetMaterial(mat_specular2, mat_ambient2, mat_diffuse2, mat_shininess2); -#endif - glEnable(GL_DEPTH_TEST); - MechTorso(i); - MechHip(i); - Shoulder(i); - RocketPod(i); - UpperArm(i); - ForeArm(i); - UpperLeg(i); - Foot(i); - VulcanGun(i); - Enviro(i); -} - -void -myReshape(int w, int h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(65.0, (GLfloat) w / (GLfloat) h, 1.0, 20.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(0.0, 1.2, -5.5); /* viewing transform */ -} - -#ifdef ANIMATION -void -animation_walk(void) -{ - float angle; - static int step; - - if (step == 0 || step == 2) { - /* for(frame=3.0; frame<=21.0; frame=frame+3.0){ */ - if (frame >= 0.0 && frame <= 21.0) { - if (frame == 0.0) - frame = 3.0; - angle = (180 / M_PI) * (acos(((cos((M_PI / 180) * frame) * 2.043) + 1.1625) / 3.2059)); - if (frame > 0) { - elevation = -(3.2055 - (cos((M_PI / 180) * angle) * 3.2055)); - } else - elevation = 0.0; - if (step == 0) { - hip11 = -(frame * 1.7); - if (1.7 * frame > 15) - heel1 = frame * 1.7; - heel2 = 0; - ankle1 = frame * 1.7; - if (frame > 0) - hip21 = angle; - else - hip21 = 0; - ankle2 = -hip21; - shoulder1 = frame * 1.5; - shoulder2 = -frame * 1.5; - elbow1 = frame; - elbow2 = -frame; - } else { - hip21 = -(frame * 1.7); - if (1.7 * frame > 15) - heel2 = frame * 1.7; - heel1 = 0; - ankle2 = frame * 1.7; - if (frame > 0) - hip11 = angle; - else - hip11 = 0; - ankle1 = -hip11; - shoulder1 = -frame * 1.5; - shoulder2 = frame * 1.5; - elbow1 = -frame; - elbow2 = frame; - } - if (frame == 21) - step++; - if (frame < 21) - frame = frame + 3.0; - } - } - if (step == 1 || step == 3) { - /* for(x=21.0; x>=0.0; x=x-3.0){ */ - if (frame <= 21.0 && frame >= 0.0) { - angle = (180 / M_PI) * (acos(((cos((M_PI / 180) * frame) * 2.043) + 1.1625) / 3.2029)); - if (frame > 0) - elevation = -(3.2055 - (cos((M_PI / 180) * angle) * 3.2055)); - else - elevation = 0.0; - if (step == 1) { - elbow2 = hip11 = -frame; - elbow1 = heel1 = frame; - heel2 = 15; - ankle1 = frame; - if (frame > 0) - hip21 = angle; - else - hip21 = 0; - ankle2 = -hip21; - shoulder1 = 1.5 * frame; - shoulder2 = -frame * 1.5; - } else { - elbow1 = hip21 = -frame; - elbow2 = heel2 = frame; - heel1 = 15; - ankle2 = frame; - if (frame > 0) - hip11 = angle; - else - hip11 = 0; - ankle1 = -hip11; - shoulder1 = -frame * 1.5; - shoulder2 = frame * 1.5; - } - if (frame == 0.0) - step++; - if (frame > 0) - frame = frame - 3.0; - } - } - if (step == 4) - step = 0; - distance += 0.1678; - glutPostRedisplay(); -} - -void -animation(void) -{ - animation_walk(); -} - -#endif - -#ifdef GLUT -#ifdef GLUT_KEY -/* ARGSUSED1 */ -void -keyboard(unsigned char key, int x, int y) -{ - - int i = 0; - - switch (key) { - /* start arm control functions */ - case 'q':{ - shoulder2Subtract(); - i++; - } - break; - case 'a':{ - shoulder2Add(); - i++; - } - break; - case 'w':{ - shoulder1Subtract(); - i++; - } - break; - case 's':{ - shoulder1Add(); - i++; - } - break; - case '2':{ - shoulder3Add(); - i++; - } - break; - case '1':{ - shoulder4Add(); - i++; - } - break; - case '4':{ - shoulder3Subtract(); - i++; - } - break; - case '3':{ - shoulder4Subtract(); - i++; - } - break; - - case 'z':{ - lat2Raise(); - i++; - } - break; - case 'Z':{ - lat2Lower(); - i++; - } - break; - case 'x':{ - lat1Raise(); - i++; - } - break; - case 'X':{ - lat1Lower(); - i++; - } - break; - - case 'A':{ - elbow2Add(); - i++; - } - break; - case 'Q':{ - elbow2Subtract(); - i++; - } - break; - case 'S':{ - elbow1Add(); - i++; - } - break; - case 'W':{ - elbow1Subtract(); - i++; - } - break; - /* end of arm control functions */ - - /* start of torso control functions */ - case 'd':{ - RotateAdd(); - i++; - } - break; - case 'g':{ - RotateSubtract(); - i++; - } - break; - case 'r':{ - MechTiltAdd(); - i++; - } - break; - case 'f':{ - MechTiltSubtract(); - i++; - } - break; - /* end of torso control functions */ - - /* start of leg control functions */ - case 'h':{ - RaiseLeg2Forward(); - i++; - } - break; - case 'y':{ - LowerLeg2Backwards(); - i++; - } - break; - case 'Y':{ - RaiseLeg2Outwards(); - i++; - } - break; - case 'H':{ - LowerLeg2Inwards(); - i++; - } - break; - - case 'j':{ - RaiseLeg1Forward(); - i++; - } - break; - case 'u':{ - LowerLeg1Backwards(); - i++; - } - break; - case 'U':{ - RaiseLeg1Outwards(); - i++; - } - break; - case 'J':{ - LowerLeg1Inwards(); - i++; - } - break; - - case 'N':{ - Heel2Add(); - i++; - } - break; - case 'n':{ - Heel2Subtract(); - i++; - } - break; - case 'M':{ - Heel1Add(); - i++; - } - break; - case 'm':{ - Heel1Subtract(); - i++; - } - break; - - case 'k':{ - Ankle2Add(); - i++; - } - break; - case 'K':{ - Ankle2Subtract(); - i++; - } - break; - case 'l':{ - Ankle1Add(); - i++; - } - break; - case 'L':{ - Ankle1Subtract(); - i++; - } - break; - /* end of leg control functions */ - - /* start of light source position functions */ - case 'p':{ - LightTurnRight(); - i++; - } - break; - case 'i':{ - LightTurnLeft(); - i++; - } - break; - case 'o':{ - LightForwards(); - i++; - } - break; - case '9':{ - LightBackwards(); - i++; - } - break; - /* end of light source position functions */ - } - if (i) - glutPostRedisplay(); -} - -#endif - -#ifdef GLUT_SPEC -/* ARGSUSED1 */ -void -special(int key, int x, int y) -{ - - int i = 0; - - switch (key) { - /* start of view position functions */ - case GLUT_KEY_RIGHT:{ - TurnRight(); - i++; - } - break; - case GLUT_KEY_LEFT:{ - TurnLeft(); - i++; - } - break; - case GLUT_KEY_DOWN:{ - TurnForwards(); - i++; - } - break; - case GLUT_KEY_UP:{ - TurnBackwards(); - i++; - } - break; - /* end of view postions functions */ - /* start of miseclleneous functions */ - case GLUT_KEY_PAGE_UP:{ - FireCannon(); - i++; - } - break; - /* end of miscelleneous functions */ - } - if (i) - glutPostRedisplay(); -} - -#endif -#endif -void -menu_select(int mode) -{ - switch (mode) { -#ifdef ANIMATION - case 1: - glutIdleFunc(animation); - break; -#endif - case 2: - glutIdleFunc(NULL); - break; - case 3: - Toggle(); - glutPostRedisplay(); - break; - case 4: - exit(EXIT_SUCCESS); - } -} - -/* ARGSUSED */ -void -null_select(int mode) -{ -} - -void -glutMenu(void) -{ - - int glut_menu[13]; - - glut_menu[5] = glutCreateMenu(null_select); - glutAddMenuEntry("forward : q,w", 0); - glutAddMenuEntry("backwards : a,s", 0); - glutAddMenuEntry("outwards : z,x", 0); - glutAddMenuEntry("inwards : Z,X", 0); - - glut_menu[6] = glutCreateMenu(null_select); - glutAddMenuEntry("upwards : Q,W", 0); - glutAddMenuEntry("downwards : A,S", 0); - glutAddMenuEntry("outwards : 1,2", 0); - glutAddMenuEntry("inwards : 3,4", 0); - - glut_menu[1] = glutCreateMenu(null_select); - glutAddMenuEntry(" : Page_up", 0); - - glut_menu[8] = glutCreateMenu(null_select); - glutAddMenuEntry("forward : y,u", 0); - glutAddMenuEntry("backwards : h.j", 0); - glutAddMenuEntry("outwards : Y,U", 0); - glutAddMenuEntry("inwards : H,J", 0); - - glut_menu[9] = glutCreateMenu(null_select); - glutAddMenuEntry("forward : n,m", 0); - glutAddMenuEntry("backwards : N,M", 0); - - glut_menu[9] = glutCreateMenu(null_select); - glutAddMenuEntry("forward : n,m", 0); - glutAddMenuEntry("backwards : N,M", 0); - - glut_menu[10] = glutCreateMenu(null_select); - glutAddMenuEntry("toes up : K,L", 0); - glutAddMenuEntry("toes down : k,l", 0); - - glut_menu[11] = glutCreateMenu(null_select); - glutAddMenuEntry("right : right arrow", 0); - glutAddMenuEntry("left : left arrow", 0); - glutAddMenuEntry("down : up arrow", 0); - glutAddMenuEntry("up : down arrow", 0); - - glut_menu[12] = glutCreateMenu(null_select); - glutAddMenuEntry("right : p", 0); - glutAddMenuEntry("left : i", 0); - glutAddMenuEntry("up : 9", 0); - glutAddMenuEntry("down : o", 0); - - glut_menu[4] = glutCreateMenu(NULL); - glutAddSubMenu("at the shoulders? ", glut_menu[5]); - glutAddSubMenu("at the elbows?", glut_menu[6]); - - glut_menu[7] = glutCreateMenu(NULL); - glutAddSubMenu("at the hip? ", glut_menu[8]); - glutAddSubMenu("at the knees?", glut_menu[9]); - glutAddSubMenu("at the ankles? ", glut_menu[10]); - - glut_menu[2] = glutCreateMenu(null_select); - glutAddMenuEntry("turn left : d", 0); - glutAddMenuEntry("turn right : g", 0); - - glut_menu[3] = glutCreateMenu(null_select); - glutAddMenuEntry("tilt backwards : f", 0); - glutAddMenuEntry("tilt forwards : r", 0); - - glut_menu[0] = glutCreateMenu(NULL); - glutAddSubMenu("move the arms.. ", glut_menu[4]); - glutAddSubMenu("fire the vulcan guns?", glut_menu[1]); - glutAddSubMenu("move the legs.. ", glut_menu[7]); - glutAddSubMenu("move the torso?", glut_menu[2]); - glutAddSubMenu("move the hip?", glut_menu[3]); - glutAddSubMenu("rotate the scene..", glut_menu[11]); -#ifdef MOVE_LIGHT - glutAddSubMenu("rotate the light source..", glut_menu[12]); -#endif - - glutCreateMenu(menu_select); -#ifdef ANIMATION - glutAddMenuEntry("Start Walk", 1); - glutAddMenuEntry("Stop Walk", 2); -#endif - glutAddMenuEntry("Toggle Wireframe", 3); - glutAddSubMenu("How do I ..", glut_menu[0]); - glutAddMenuEntry("Quit", 4); - glutAttachMenu(GLUT_LEFT_BUTTON); - glutAttachMenu(GLUT_RIGHT_BUTTON); -} - -int -main(int argc, char **argv) -{ -#ifdef GLUT - /* start of glut windowing and control functions */ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); - glutInitWindowSize(800, 600); - glutCreateWindow("glutmech: Vulcan Gunner"); - myinit(); - glutDisplayFunc(display); - glutReshapeFunc(myReshape); -#ifdef GLUT_KEY - glutKeyboardFunc(keyboard); -#endif -#ifdef GLUT_SPEC - glutSpecialFunc(special); -#endif - glutMenu(); - glutMainLoop(); - /* end of glut windowing and control functions */ -#endif - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/demos/glutmech/glutmech.dsp b/lib/glut-3.7.6/progs/demos/glutmech/glutmech.dsp deleted file mode 100644 index b068151fd..000000000 --- a/lib/glut-3.7.6/progs/demos/glutmech/glutmech.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="glutmech" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=glutmech - 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 "glutmech.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 "glutmech.mak" CFG="glutmech - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "glutmech - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "glutmech - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "glutmech - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "glutmech - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "glutmech - Win32 Release" -# Name "glutmech - Win32 Debug" -# Begin Source File - -SOURCE=.\glutmech.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/demos/ideas/Imakefile b/lib/glut-3.7.6/progs/demos/ideas/Imakefile deleted file mode 100644 index 8d203a5a4..000000000 --- a/lib/glut-3.7.6/progs/demos/ideas/Imakefile +++ /dev/null @@ -1,20 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1994. */ - -#include "../../../Glut.cf" - -TARGETS = ideas - -SRCS = a.c b.c d.c draw_holder.c draw_lamp.c draw_logo.c \ - draw_logo_line.c draw_logo_shadow.c e.c f.c h.c i.c ideas.c m.c n.c \ - o.c p.c r.c s.c t.c w.c - -OBJS = a.o b.o d.o draw_holder.o draw_lamp.o draw_logo.o \ - draw_logo_line.o draw_logo_shadow.o e.o f.o h.o i.o ideas.o m.o n.o \ - o.o p.o r.o s.o t.o w.o - -AllTarget($(TARGETS)) - -NormalGlutProgramTarget(ideas,$(OBJS)) - -DependTarget() diff --git a/lib/glut-3.7.6/progs/demos/ideas/a.c b/lib/glut-3.7.6/progs/demos/ideas/a.c deleted file mode 100644 index f568c38b7..000000000 --- a/lib/glut-3.7.6/progs/demos/ideas/a.c +++ /dev/null @@ -1,194 +0,0 @@ -/* - * (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 - -static float a_data[][2] = { - {5.618949, 10.261048}, - {5.322348, 9.438848}, - {5.124614, 10.030832}, - {4.860968, 9.488181}, - {4.811534, 9.932169}, - {3.938208, 9.438848}, - {3.658084, 9.685509}, - {2.784758, 8.994862}, - {2.801236, 9.175745}, - {1.960865, 8.172662}, - {1.186406, 7.761562}, - {1.252317, 6.561151}, - {0.576725, 6.610483}, - {0.939238, 5.525180}, - {0.164779, 4.883864}, - {0.840371, 4.818089}, - {0.230690, 3.963001}, - {0.939238, 4.242549}, - {0.609681, 3.255909}, - {1.268795, 3.963001}, - {1.021627, 3.075026}, - {1.861998, 4.045221}, - {1.829042, 3.535457}, - {2.817714, 4.818089}, - {3.163749, 4.998972}, - {3.971164, 6.643371}, - {4.267765, 6.725591}, - {4.663234, 7.630010}, - - {5.404737, 9.734840}, - {4.646756, 9.669065}, - {5.108136, 8.731757}, - {4.679712, 8.600205}, - {4.926879, 7.564234}, - {4.366632, 6.692703}, - {4.663234, 5.344296}, - {3.888774, 4.850976}, - {4.630278, 4.094553}, - {3.954686, 3.963001}, - {4.828012, 3.798561}, - {4.168898, 3.321686}, - {5.157569, 3.864337}, - {4.514933, 3.091470}, - {5.553038, 4.045221}, - {5.305870, 3.634121}, - {5.932029, 4.176773}, - -}; - -void draw_a(void) { - - glBegin(GL_TRIANGLE_STRIP); - glVertex2fv(a_data[0]); - glVertex2fv(a_data[1]); - glVertex2fv(a_data[2]); - glVertex2fv(a_data[3]); - glVertex2fv(a_data[4]); - glVertex2fv(a_data[5]); - glVertex2fv(a_data[6]); - glVertex2fv(a_data[7]); - glVertex2fv(a_data[8]); - glVertex2fv(a_data[9]); - glVertex2fv(a_data[10]); - glVertex2fv(a_data[11]); - glVertex2fv(a_data[12]); - glVertex2fv(a_data[13]); - glVertex2fv(a_data[14]); - glVertex2fv(a_data[15]); - glVertex2fv(a_data[16]); - glVertex2fv(a_data[17]); - glVertex2fv(a_data[18]); - glVertex2fv(a_data[19]); - glVertex2fv(a_data[20]); - glVertex2fv(a_data[21]); - glVertex2fv(a_data[22]); - glVertex2fv(a_data[23]); - glVertex2fv(a_data[24]); - glVertex2fv(a_data[25]); - glVertex2fv(a_data[26]); - glVertex2fv(a_data[27]); - glEnd(); - - glBegin(GL_TRIANGLE_STRIP); - glVertex2fv(a_data[28]); - glVertex2fv(a_data[29]); - glVertex2fv(a_data[30]); - glVertex2fv(a_data[31]); - glVertex2fv(a_data[32]); - glVertex2fv(a_data[33]); - glVertex2fv(a_data[34]); - glVertex2fv(a_data[35]); - glVertex2fv(a_data[36]); - glVertex2fv(a_data[37]); - glVertex2fv(a_data[38]); - glVertex2fv(a_data[39]); - glVertex2fv(a_data[40]); - glVertex2fv(a_data[41]); - glVertex2fv(a_data[42]); - glVertex2fv(a_data[43]); - glVertex2fv(a_data[44]); - glEnd(); - - glBegin(GL_LINE_STRIP); - glVertex2fv(a_data[0]); - glVertex2fv(a_data[2]); - glVertex2fv(a_data[4]); - glVertex2fv(a_data[6]); - glVertex2fv(a_data[8]); - glVertex2fv(a_data[10]); - glVertex2fv(a_data[12]); - glVertex2fv(a_data[14]); - glVertex2fv(a_data[16]); - glVertex2fv(a_data[18]); - glVertex2fv(a_data[20]); - glVertex2fv(a_data[22]); - glVertex2fv(a_data[24]); - glVertex2fv(a_data[26]); - glVertex2fv(a_data[27]); - glVertex2fv(a_data[25]); - glVertex2fv(a_data[23]); - glVertex2fv(a_data[21]); - glVertex2fv(a_data[19]); - glVertex2fv(a_data[17]); - glVertex2fv(a_data[15]); - glVertex2fv(a_data[13]); - glVertex2fv(a_data[11]); - glVertex2fv(a_data[9]); - glVertex2fv(a_data[7]); - glVertex2fv(a_data[5]); - glVertex2fv(a_data[3]); - glVertex2fv(a_data[1]); - glEnd(); - - glBegin(GL_LINE_STRIP); - glVertex2fv(a_data[28]); - glVertex2fv(a_data[30]); - glVertex2fv(a_data[32]); - glVertex2fv(a_data[34]); - glVertex2fv(a_data[36]); - glVertex2fv(a_data[38]); - glVertex2fv(a_data[40]); - glVertex2fv(a_data[42]); - glVertex2fv(a_data[44]); - glVertex2fv(a_data[43]); - glVertex2fv(a_data[41]); - glVertex2fv(a_data[39]); - glVertex2fv(a_data[37]); - glVertex2fv(a_data[35]); - glVertex2fv(a_data[33]); - glVertex2fv(a_data[31]); - glVertex2fv(a_data[29]); - glEnd(); - -} - diff --git a/lib/glut-3.7.6/progs/demos/ideas/b.c b/lib/glut-3.7.6/progs/demos/ideas/b.c deleted file mode 100644 index 1a26c7006..000000000 --- a/lib/glut-3.7.6/progs/demos/ideas/b.c +++ /dev/null @@ -1,146 +0,0 @@ -/* - * (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 - -float b_data[][2] = { - {1.437827, 15.482255}, - {3.711599, 15.716075}, - {2.658307, 15.315240}, - {3.477534, 15.081420}, - {2.741902, 14.997912}, - {2.006270, 7.983298}, - {0.234065, 3.139875}, - {1.103448, 4.192067}, - {1.538140, 3.139875}, - {1.404389, 3.958246}, - {2.374086, 3.306889}, - {2.792058, 3.807933}, - {3.243469, 3.691023}, - {3.544410, 4.158664}, - {4.497388, 4.776618}, - {3.979101, 4.759916}, - {4.815047, 5.227557}, - {4.413793, 5.979123}, - {5.400209, 6.864301}, - {4.497388, 8.133612}, - {5.667712, 8.734864}, - {4.263323, 9.002088}, - {5.416928, 9.686848}, - {4.012539, 9.219207}, - {4.898642, 10.020877}, - {3.494253, 9.118998}, - {3.745037, 9.620042}, - {2.775340, 8.684760}, - {2.708464, 8.835073}, - {1.805643, 7.382046}, - {1.688610, 7.582463}, - -}; - -void draw_b(void) { - - glBegin(GL_TRIANGLE_STRIP); - glVertex2fv(b_data[0]); - glVertex2fv(b_data[1]); - glVertex2fv(b_data[2]); - glVertex2fv(b_data[3]); - glVertex2fv(b_data[4]); - glVertex2fv(b_data[5]); - glVertex2fv(b_data[6]); - glVertex2fv(b_data[7]); - glVertex2fv(b_data[8]); - glVertex2fv(b_data[9]); - glVertex2fv(b_data[10]); - glVertex2fv(b_data[11]); - glVertex2fv(b_data[12]); - glVertex2fv(b_data[13]); - glVertex2fv(b_data[14]); - glVertex2fv(b_data[15]); - glVertex2fv(b_data[16]); - glVertex2fv(b_data[17]); - glVertex2fv(b_data[18]); - glVertex2fv(b_data[19]); - glVertex2fv(b_data[20]); - glVertex2fv(b_data[21]); - glVertex2fv(b_data[22]); - glVertex2fv(b_data[23]); - glVertex2fv(b_data[24]); - glVertex2fv(b_data[25]); - glVertex2fv(b_data[26]); - glVertex2fv(b_data[27]); - glVertex2fv(b_data[28]); - glVertex2fv(b_data[29]); - glVertex2fv(b_data[30]); - glEnd(); - - glBegin(GL_LINE_STRIP); - glVertex2fv(b_data[0]); - glVertex2fv(b_data[2]); - glVertex2fv(b_data[4]); - glVertex2fv(b_data[6]); - glVertex2fv(b_data[8]); - glVertex2fv(b_data[10]); - glVertex2fv(b_data[12]); - glVertex2fv(b_data[14]); - glVertex2fv(b_data[16]); - glVertex2fv(b_data[18]); - glVertex2fv(b_data[20]); - glVertex2fv(b_data[22]); - glVertex2fv(b_data[24]); - glVertex2fv(b_data[26]); - glVertex2fv(b_data[28]); - glVertex2fv(b_data[30]); - glVertex2fv(b_data[29]); - glVertex2fv(b_data[27]); - glVertex2fv(b_data[25]); - glVertex2fv(b_data[23]); - glVertex2fv(b_data[21]); - glVertex2fv(b_data[19]); - glVertex2fv(b_data[17]); - glVertex2fv(b_data[15]); - glVertex2fv(b_data[13]); - glVertex2fv(b_data[11]); - glVertex2fv(b_data[9]); - glVertex2fv(b_data[7]); - glVertex2fv(b_data[5]); - glVertex2fv(b_data[3]); - glVertex2fv(b_data[1]); - glVertex2fv(b_data[0]); - glEnd(); - -} - diff --git a/lib/glut-3.7.6/progs/demos/ideas/d.c b/lib/glut-3.7.6/progs/demos/ideas/d.c deleted file mode 100644 index 591628359..000000000 --- a/lib/glut-3.7.6/progs/demos/ideas/d.c +++ /dev/null @@ -1,154 +0,0 @@ -/* - * (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 - -float d_data[][2] = { - {4.714579, 9.987679}, - {2.841889, 9.429158}, - {2.825462, 9.166325}, - {1.856263, 8.722793}, - {2.004107, 8.000000}, - {0.969199, 7.605750}, - {1.494866, 6.636550}, - {0.607803, 6.028748}, - {1.527721, 4.960986}, - {0.772074, 4.254620}, - {1.774127, 4.139630}, - {1.445585, 3.186858}, - {2.266940, 3.843942}, - {2.250513, 3.022587}, - {2.776181, 3.843942}, - {3.137577, 3.383984}, - {3.351129, 4.008214}, - {3.909651, 4.451746}, - {4.090349, 4.960986}, - {4.862423, 5.946612}, - {4.763860, 6.652977}, - {5.388090, 7.572895}, - {4.862423, 8.492813}, - {5.618070, 9.921971}, - {4.698152, 10.940452}, - {5.338809, 12.303902}, - {4.238193, 12.960985}, - {4.451746, 14.554415}, - {3.581109, 14.291581}, - {3.613963, 15.342916}, - {2.677618, 15.145790}, - {2.480493, 15.540041}, - {2.036961, 15.211499}, - {1.281314, 15.112936}, - -}; - -void draw_d(void) { - - glBegin(GL_TRIANGLE_STRIP); - glVertex2fv(d_data[0]); - glVertex2fv(d_data[1]); - glVertex2fv(d_data[2]); - glVertex2fv(d_data[3]); - glVertex2fv(d_data[4]); - glVertex2fv(d_data[5]); - glVertex2fv(d_data[6]); - glVertex2fv(d_data[7]); - glVertex2fv(d_data[8]); - glVertex2fv(d_data[9]); - glVertex2fv(d_data[10]); - glVertex2fv(d_data[11]); - glVertex2fv(d_data[12]); - glVertex2fv(d_data[13]); - glVertex2fv(d_data[14]); - glVertex2fv(d_data[15]); - glVertex2fv(d_data[16]); - glVertex2fv(d_data[17]); - glVertex2fv(d_data[18]); - glVertex2fv(d_data[19]); - glVertex2fv(d_data[20]); - glVertex2fv(d_data[21]); - glVertex2fv(d_data[22]); - glVertex2fv(d_data[23]); - glVertex2fv(d_data[24]); - glVertex2fv(d_data[25]); - glVertex2fv(d_data[26]); - glVertex2fv(d_data[27]); - glVertex2fv(d_data[28]); - glVertex2fv(d_data[29]); - glVertex2fv(d_data[30]); - glVertex2fv(d_data[31]); - glVertex2fv(d_data[32]); - glVertex2fv(d_data[33]); - glEnd(); - - glBegin(GL_LINE_STRIP); - glVertex2fv(d_data[0]); - glVertex2fv(d_data[2]); - glVertex2fv(d_data[4]); - glVertex2fv(d_data[6]); - glVertex2fv(d_data[8]); - glVertex2fv(d_data[10]); - glVertex2fv(d_data[12]); - glVertex2fv(d_data[14]); - glVertex2fv(d_data[16]); - glVertex2fv(d_data[18]); - glVertex2fv(d_data[20]); - glVertex2fv(d_data[22]); - glVertex2fv(d_data[24]); - glVertex2fv(d_data[26]); - glVertex2fv(d_data[28]); - glVertex2fv(d_data[30]); - glVertex2fv(d_data[32]); - glVertex2fv(d_data[33]); - glVertex2fv(d_data[31]); - glVertex2fv(d_data[29]); - glVertex2fv(d_data[27]); - glVertex2fv(d_data[25]); - glVertex2fv(d_data[23]); - glVertex2fv(d_data[21]); - glVertex2fv(d_data[19]); - glVertex2fv(d_data[17]); - glVertex2fv(d_data[15]); - glVertex2fv(d_data[13]); - glVertex2fv(d_data[11]); - glVertex2fv(d_data[9]); - glVertex2fv(d_data[7]); - glVertex2fv(d_data[5]); - glVertex2fv(d_data[3]); - glVertex2fv(d_data[1]); - glEnd(); - -} - diff --git a/lib/glut-3.7.6/progs/demos/ideas/draw_holder.c b/lib/glut-3.7.6/progs/demos/ideas/draw_holder.c deleted file mode 100644 index 2ed004328..000000000 --- a/lib/glut-3.7.6/progs/demos/ideas/draw_holder.c +++ /dev/null @@ -1,1358 +0,0 @@ -/* - * (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 - -#include "objects.h" - -float bn[5][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}, -}; - -float bp[4][8][3] = { - { - {-14.000000, -14.000000, 0.000000}, - {-14.000000, -14.000000, 4.000000}, - {-14.000000, 14.000000, 0.000000}, - {-14.000000, 14.000000, 4.000000}, - {14.000000, 14.000000, 0.000000}, - {14.000000, 14.000000, 4.000000}, - {14.000000, -14.000000, 0.000000}, - {14.000000, -14.000000, 4.000000}, - }, - { - {-12.000000, -12.000000, 4.000000}, - {-12.000000, -12.000000, 8.000000}, - {-12.000000, 12.000000, 4.000000}, - {-12.000000, 12.000000, 8.000000}, - {12.000000, 12.000000, 4.000000}, - {12.000000, 12.000000, 8.000000}, - {12.000000, -12.000000, 4.000000}, - {12.000000, -12.000000, 8.000000}, - }, - { - {-10.000000, -10.000000, 8.000000}, - {-10.000000, -10.000000, 12.000000}, - {-10.000000, 10.000000, 8.000000}, - {-10.000000, 10.000000, 12.000000}, - {10.000000, 10.000000, 8.000000}, - {10.000000, 10.000000, 12.000000}, - {10.000000, -10.000000, 8.000000}, - {10.000000, -10.000000, 12.000000}, - }, - { - {-8.000000, -8.000000, 12.000000}, - {-8.000000, -8.000000, 8.000000}, - {-8.000000, 8.000000, 12.000000}, - {-8.000000, 8.000000, 8.000000}, - {8.000000, 8.000000, 12.000000}, - {8.000000, 8.000000, 8.000000}, - {8.000000, -8.000000, 12.000000}, - {8.000000, -8.000000, 8.000000}, - }, -}; - -float tp[12][21][3] = { - { - {10.000000, 0.000000, 1.000000}, - {9.510565, -3.090170, 1.000000}, - {8.090170, -5.877852, 1.000000}, - {5.877852, -8.090170, 1.000000}, - {3.090170, -9.510565, 1.000000}, - {0.000000, -10.000000, 1.000000}, - {-3.090170, -9.510565, 1.000000}, - {-5.877852, -8.090170, 1.000000}, - {-8.090170, -5.877852, 1.000000}, - {-9.510565, -3.090170, 1.000000}, - {-10.000000, 0.000000, 1.000000}, - {-9.510565, 3.090170, 1.000000}, - {-8.090170, 5.877852, 1.000000}, - {-5.877852, 8.090170, 1.000000}, - {-3.090170, 9.510565, 1.000000}, - {0.000000, 10.000000, 1.000000}, - {3.090170, 9.510565, 1.000000}, - {5.877852, 8.090170, 1.000000}, - {8.090170, 5.877852, 1.000000}, - {9.510565, 3.090170, 1.000000}, - {10.000000, 0.000000, 1.000000}, - }, - - { - {10.540641, 0.000000, 0.841254}, - {10.024745, -3.257237, 0.841254}, - {8.527557, -6.195633, 0.841254}, - {6.195633, -8.527557, 0.841254}, - {3.257237, -10.024745, 0.841254}, - {0.000000, -10.540641, 0.841254}, - {-3.257237, -10.024745, 0.841254}, - {-6.195633, -8.527557, 0.841254}, - {-8.527557, -6.195633, 0.841254}, - {-10.024745, -3.257237, 0.841254}, - {-10.540641, 0.000000, 0.841254}, - {-10.024745, 3.257237, 0.841254}, - {-8.527557, 6.195633, 0.841254}, - {-6.195633, 8.527557, 0.841254}, - {-3.257237, 10.024745, 0.841254}, - {0.000000, 10.540641, 0.841254}, - {3.257237, 10.024745, 0.841254}, - {6.195633, 8.527557, 0.841254}, - {8.527557, 6.195633, 0.841254}, - {10.024745, 3.257237, 0.841254}, - {10.540641, 0.000000, 0.841254}, - }, - - { - {10.909632, 0.000000, 0.415415}, - {10.375676, -3.371262, 0.415415}, - {8.826077, -6.412521, 0.415415}, - {6.412521, -8.826077, 0.415415}, - {3.371262, -10.375676, 0.415415}, - {0.000000, -10.909632, 0.415415}, - {-3.371262, -10.375676, 0.415415}, - {-6.412521, -8.826077, 0.415415}, - {-8.826077, -6.412521, 0.415415}, - {-10.375676, -3.371262, 0.415415}, - {-10.909632, 0.000000, 0.415415}, - {-10.375676, 3.371262, 0.415415}, - {-8.826077, 6.412521, 0.415415}, - {-6.412521, 8.826077, 0.415415}, - {-3.371262, 10.375676, 0.415415}, - {0.000000, 10.909632, 0.415415}, - {3.371262, 10.375676, 0.415415}, - {6.412521, 8.826077, 0.415415}, - {8.826077, 6.412521, 0.415415}, - {10.375676, 3.371262, 0.415415}, - {10.909632, 0.000000, 0.415415}, - }, - - { - {10.989821, 0.000000, -0.142315}, - {10.451941, -3.396042, -0.142315}, - {8.890952, -6.459655, -0.142315}, - {6.459655, -8.890952, -0.142315}, - {3.396042, -10.451941, -0.142315}, - {0.000000, -10.989821, -0.142315}, - {-3.396042, -10.451941, -0.142315}, - {-6.459655, -8.890952, -0.142315}, - {-8.890952, -6.459655, -0.142315}, - {-10.451941, -3.396042, -0.142315}, - {-10.989821, 0.000000, -0.142315}, - {-10.451941, 3.396042, -0.142315}, - {-8.890952, 6.459655, -0.142315}, - {-6.459655, 8.890952, -0.142315}, - {-3.396042, 10.451941, -0.142315}, - {0.000000, 10.989821, -0.142315}, - {3.396042, 10.451941, -0.142315}, - {6.459655, 8.890952, -0.142315}, - {8.890952, 6.459655, -0.142315}, - {10.451941, 3.396042, -0.142315}, - {10.989821, 0.000000, -0.142315}, - }, - - { - {10.755750, 0.000000, -0.654861}, - {10.229325, -3.323709, -0.654861}, - {8.701584, -6.322071, -0.654861}, - {6.322071, -8.701584, -0.654861}, - {3.323709, -10.229325, -0.654861}, - {0.000000, -10.755750, -0.654861}, - {-3.323709, -10.229325, -0.654861}, - {-6.322071, -8.701584, -0.654861}, - {-8.701584, -6.322071, -0.654861}, - {-10.229325, -3.323709, -0.654861}, - {-10.755750, 0.000000, -0.654861}, - {-10.229325, 3.323709, -0.654861}, - {-8.701584, 6.322071, -0.654861}, - {-6.322071, 8.701584, -0.654861}, - {-3.323709, 10.229325, -0.654861}, - {0.000000, 10.755750, -0.654861}, - {3.323709, 10.229325, -0.654861}, - {6.322071, 8.701584, -0.654861}, - {8.701584, 6.322071, -0.654861}, - {10.229325, 3.323709, -0.654861}, - {10.755750, 0.000000, -0.654861}, - }, - - { - {10.281733, 0.000000, -0.959493}, - {9.778509, -3.177230, -0.959493}, - {8.318096, -6.043451, -0.959493}, - {6.043451, -8.318096, -0.959493}, - {3.177230, -9.778509, -0.959493}, - {0.000000, -10.281733, -0.959493}, - {-3.177230, -9.778509, -0.959493}, - {-6.043451, -8.318096, -0.959493}, - {-8.318096, -6.043451, -0.959493}, - {-9.778509, -3.177230, -0.959493}, - {-10.281733, 0.000000, -0.959493}, - {-9.778509, 3.177230, -0.959493}, - {-8.318096, 6.043451, -0.959493}, - {-6.043451, 8.318096, -0.959493}, - {-3.177230, 9.778509, -0.959493}, - {0.000000, 10.281733, -0.959493}, - {3.177230, 9.778509, -0.959493}, - {6.043451, 8.318096, -0.959493}, - {8.318096, 6.043451, -0.959493}, - {9.778509, 3.177230, -0.959493}, - {10.281733, 0.000000, -0.959493}, - }, - - { - {9.718267, 0.000000, -0.959493}, - {9.242621, -3.003110, -0.959493}, - {7.862244, -5.712255, -0.959493}, - {5.712255, -7.862244, -0.959493}, - {3.003110, -9.242621, -0.959493}, - {0.000000, -9.718267, -0.959493}, - {-3.003110, -9.242621, -0.959493}, - {-5.712255, -7.862244, -0.959493}, - {-7.862244, -5.712255, -0.959493}, - {-9.242621, -3.003110, -0.959493}, - {-9.718267, 0.000000, -0.959493}, - {-9.242621, 3.003110, -0.959493}, - {-7.862244, 5.712255, -0.959493}, - {-5.712255, 7.862244, -0.959493}, - {-3.003110, 9.242621, -0.959493}, - {0.000000, 9.718267, -0.959493}, - {3.003110, 9.242621, -0.959493}, - {5.712255, 7.862244, -0.959493}, - {7.862244, 5.712255, -0.959493}, - {9.242621, 3.003110, -0.959493}, - {9.718267, 0.000000, -0.959493}, - }, - - { - {9.244250, 0.000000, -0.654861}, - {8.791805, -2.856631, -0.654861}, - {7.478756, -5.433634, -0.654861}, - {5.433634, -7.478756, -0.654861}, - {2.856631, -8.791805, -0.654861}, - {0.000000, -9.244250, -0.654861}, - {-2.856631, -8.791805, -0.654861}, - {-5.433634, -7.478756, -0.654861}, - {-7.478756, -5.433634, -0.654861}, - {-8.791805, -2.856631, -0.654861}, - {-9.244250, 0.000000, -0.654861}, - {-8.791805, 2.856631, -0.654861}, - {-7.478756, 5.433634, -0.654861}, - {-5.433634, 7.478756, -0.654861}, - {-2.856631, 8.791805, -0.654861}, - {0.000000, 9.244250, -0.654861}, - {2.856631, 8.791805, -0.654861}, - {5.433634, 7.478756, -0.654861}, - {7.478756, 5.433634, -0.654861}, - {8.791805, 2.856631, -0.654861}, - {9.244250, 0.000000, -0.654861}, - }, - - { - {9.010179, 0.000000, -0.142315}, - {8.569189, -2.784298, -0.142315}, - {7.289388, -5.296050, -0.142315}, - {5.296050, -7.289388, -0.142315}, - {2.784298, -8.569189, -0.142315}, - {0.000000, -9.010179, -0.142315}, - {-2.784298, -8.569189, -0.142315}, - {-5.296050, -7.289388, -0.142315}, - {-7.289388, -5.296050, -0.142315}, - {-8.569189, -2.784298, -0.142315}, - {-9.010179, 0.000000, -0.142315}, - {-8.569189, 2.784298, -0.142315}, - {-7.289388, 5.296050, -0.142315}, - {-5.296050, 7.289388, -0.142315}, - {-2.784298, 8.569189, -0.142315}, - {0.000000, 9.010179, -0.142315}, - {2.784298, 8.569189, -0.142315}, - {5.296050, 7.289388, -0.142315}, - {7.289388, 5.296050, -0.142315}, - {8.569189, 2.784298, -0.142315}, - {9.010179, 0.000000, -0.142315}, - }, - - { - {9.090367, 0.000000, 0.415414}, - {8.645453, -2.809078, 0.415414}, - {7.354262, -5.343184, 0.415414}, - {5.343184, -7.354262, 0.415414}, - {2.809078, -8.645453, 0.415414}, - {0.000000, -9.090367, 0.415414}, - {-2.809078, -8.645453, 0.415414}, - {-5.343184, -7.354262, 0.415414}, - {-7.354262, -5.343184, 0.415414}, - {-8.645453, -2.809078, 0.415414}, - {-9.090367, 0.000000, 0.415414}, - {-8.645453, 2.809078, 0.415414}, - {-7.354262, 5.343184, 0.415414}, - {-5.343184, 7.354262, 0.415414}, - {-2.809078, 8.645453, 0.415414}, - {0.000000, 9.090367, 0.415414}, - {2.809078, 8.645453, 0.415414}, - {5.343184, 7.354262, 0.415414}, - {7.354262, 5.343184, 0.415414}, - {8.645453, 2.809078, 0.415414}, - {9.090367, 0.000000, 0.415414}, - }, - - { - {9.459358, 0.000000, 0.841253}, - {8.996385, -2.923103, 0.841253}, - {7.652781, -5.560071, 0.841253}, - {5.560071, -7.652781, 0.841253}, - {2.923103, -8.996385, 0.841253}, - {0.000000, -9.459358, 0.841253}, - {-2.923103, -8.996385, 0.841253}, - {-5.560071, -7.652781, 0.841253}, - {-7.652781, -5.560071, 0.841253}, - {-8.996385, -2.923103, 0.841253}, - {-9.459358, 0.000000, 0.841253}, - {-8.996385, 2.923103, 0.841253}, - {-7.652781, 5.560071, 0.841253}, - {-5.560071, 7.652781, 0.841253}, - {-2.923103, 8.996385, 0.841253}, - {0.000000, 9.459358, 0.841253}, - {2.923103, 8.996385, 0.841253}, - {5.560071, 7.652781, 0.841253}, - {7.652781, 5.560071, 0.841253}, - {8.996385, 2.923103, 0.841253}, - {9.459358, 0.000000, 0.841253}, - }, - - { - {9.999999, 0.000000, 1.000000}, - {9.510564, -3.090170, 1.000000}, - {8.090169, -5.877852, 1.000000}, - {5.877852, -8.090169, 1.000000}, - {3.090170, -9.510564, 1.000000}, - {0.000000, -9.999999, 1.000000}, - {-3.090170, -9.510564, 1.000000}, - {-5.877852, -8.090169, 1.000000}, - {-8.090169, -5.877852, 1.000000}, - {-9.510564, -3.090170, 1.000000}, - {-9.999999, 0.000000, 1.000000}, - {-9.510564, 3.090170, 1.000000}, - {-8.090169, 5.877852, 1.000000}, - {-5.877852, 8.090169, 1.000000}, - {-3.090170, 9.510564, 1.000000}, - {0.000000, 9.999999, 1.000000}, - {3.090170, 9.510564, 1.000000}, - {5.877852, 8.090169, 1.000000}, - {8.090169, 5.877852, 1.000000}, - {9.510564, 3.090170, 1.000000}, - {9.999999, 0.000000, 1.000000}, - }, - -}; - -float tn[12][21][3] = { - { - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - }, - - { - {0.540641, 0.000000, 0.841254}, - {0.514180, -0.167067, 0.841254}, - {0.437388, -0.317781, 0.841254}, - {0.317781, -0.437388, 0.841254}, - {0.167067, -0.514180, 0.841254}, - {0.000000, -0.540641, 0.841254}, - {-0.167067, -0.514180, 0.841254}, - {-0.317781, -0.437388, 0.841254}, - {-0.437388, -0.317781, 0.841254}, - {-0.514180, -0.167067, 0.841254}, - {-0.540641, 0.000000, 0.841254}, - {-0.514180, 0.167067, 0.841254}, - {-0.437388, 0.317781, 0.841254}, - {-0.317781, 0.437388, 0.841254}, - {-0.167067, 0.514180, 0.841254}, - {0.000000, 0.540641, 0.841254}, - {0.167067, 0.514180, 0.841254}, - {0.317781, 0.437388, 0.841254}, - {0.437388, 0.317781, 0.841254}, - {0.514180, 0.167067, 0.841254}, - {0.540641, 0.000000, 0.841254}, - }, - - { - {0.909632, 0.000000, 0.415415}, - {0.865111, -0.281092, 0.415415}, - {0.735908, -0.534668, 0.415415}, - {0.534668, -0.735908, 0.415415}, - {0.281092, -0.865111, 0.415415}, - {0.000000, -0.909632, 0.415415}, - {-0.281092, -0.865111, 0.415415}, - {-0.534668, -0.735908, 0.415415}, - {-0.735908, -0.534668, 0.415415}, - {-0.865111, -0.281092, 0.415415}, - {-0.909632, 0.000000, 0.415415}, - {-0.865111, 0.281092, 0.415415}, - {-0.735908, 0.534668, 0.415415}, - {-0.534668, 0.735908, 0.415415}, - {-0.281092, 0.865111, 0.415415}, - {0.000000, 0.909632, 0.415415}, - {0.281092, 0.865111, 0.415415}, - {0.534668, 0.735908, 0.415415}, - {0.735908, 0.534668, 0.415415}, - {0.865111, 0.281092, 0.415415}, - {0.909632, 0.000000, 0.415415}, - }, - - { - {0.989821, 0.000000, -0.142315}, - {0.941376, -0.305872, -0.142315}, - {0.800782, -0.581802, -0.142315}, - {0.581802, -0.800782, -0.142315}, - {0.305872, -0.941376, -0.142315}, - {0.000000, -0.989821, -0.142315}, - {-0.305872, -0.941376, -0.142315}, - {-0.581802, -0.800782, -0.142315}, - {-0.800782, -0.581802, -0.142315}, - {-0.941376, -0.305872, -0.142315}, - {-0.989821, 0.000000, -0.142315}, - {-0.941376, 0.305872, -0.142315}, - {-0.800782, 0.581802, -0.142315}, - {-0.581802, 0.800782, -0.142315}, - {-0.305872, 0.941376, -0.142315}, - {0.000000, 0.989821, -0.142315}, - {0.305872, 0.941376, -0.142315}, - {0.581802, 0.800782, -0.142315}, - {0.800782, 0.581802, -0.142315}, - {0.941376, 0.305872, -0.142315}, - {0.989821, 0.000000, -0.142315}, - }, - - { - {0.755750, 0.000000, -0.654861}, - {0.718761, -0.233539, -0.654861}, - {0.611414, -0.444218, -0.654861}, - {0.444218, -0.611414, -0.654861}, - {0.233539, -0.718761, -0.654861}, - {0.000000, -0.755750, -0.654861}, - {-0.233539, -0.718761, -0.654861}, - {-0.444218, -0.611414, -0.654861}, - {-0.611414, -0.444218, -0.654861}, - {-0.718761, -0.233539, -0.654861}, - {-0.755750, 0.000000, -0.654861}, - {-0.718761, 0.233539, -0.654861}, - {-0.611414, 0.444218, -0.654861}, - {-0.444218, 0.611414, -0.654861}, - {-0.233539, 0.718761, -0.654861}, - {0.000000, 0.755750, -0.654861}, - {0.233539, 0.718761, -0.654861}, - {0.444218, 0.611414, -0.654861}, - {0.611414, 0.444218, -0.654861}, - {0.718761, 0.233539, -0.654861}, - {0.755750, 0.000000, -0.654861}, - }, - - { - {0.281733, 0.000000, -0.959493}, - {0.267944, -0.087060, -0.959493}, - {0.227927, -0.165598, -0.959493}, - {0.165598, -0.227927, -0.959493}, - {0.087060, -0.267944, -0.959493}, - {0.000000, -0.281733, -0.959493}, - {-0.087060, -0.267944, -0.959493}, - {-0.165598, -0.227927, -0.959493}, - {-0.227927, -0.165598, -0.959493}, - {-0.267944, -0.087060, -0.959493}, - {-0.281733, 0.000000, -0.959493}, - {-0.267944, 0.087060, -0.959493}, - {-0.227927, 0.165598, -0.959493}, - {-0.165598, 0.227927, -0.959493}, - {-0.087060, 0.267944, -0.959493}, - {0.000000, 0.281733, -0.959493}, - {0.087060, 0.267944, -0.959493}, - {0.165598, 0.227927, -0.959493}, - {0.227927, 0.165598, -0.959493}, - {0.267944, 0.087060, -0.959493}, - {0.281733, 0.000000, -0.959493}, - }, - - { - {-0.281732, 0.000000, -0.959493}, - {-0.267943, 0.087060, -0.959493}, - {-0.227926, 0.165598, -0.959493}, - {-0.165598, 0.227926, -0.959493}, - {-0.087060, 0.267943, -0.959493}, - {0.000000, 0.281732, -0.959493}, - {0.087060, 0.267943, -0.959493}, - {0.165598, 0.227926, -0.959493}, - {0.227926, 0.165598, -0.959493}, - {0.267943, 0.087060, -0.959493}, - {0.281732, 0.000000, -0.959493}, - {0.267943, -0.087060, -0.959493}, - {0.227926, -0.165598, -0.959493}, - {0.165598, -0.227926, -0.959493}, - {0.087060, -0.267943, -0.959493}, - {0.000000, -0.281732, -0.959493}, - {-0.087060, -0.267943, -0.959493}, - {-0.165598, -0.227926, -0.959493}, - {-0.227926, -0.165598, -0.959493}, - {-0.267943, -0.087060, -0.959493}, - {-0.281732, 0.000000, -0.959493}, - }, - - { - {-0.755749, 0.000000, -0.654861}, - {-0.718760, 0.233539, -0.654861}, - {-0.611414, 0.444218, -0.654861}, - {-0.444218, 0.611414, -0.654861}, - {-0.233539, 0.718760, -0.654861}, - {0.000000, 0.755749, -0.654861}, - {0.233539, 0.718760, -0.654861}, - {0.444218, 0.611414, -0.654861}, - {0.611414, 0.444218, -0.654861}, - {0.718760, 0.233539, -0.654861}, - {0.755749, 0.000000, -0.654861}, - {0.718760, -0.233539, -0.654861}, - {0.611414, -0.444218, -0.654861}, - {0.444218, -0.611414, -0.654861}, - {0.233539, -0.718760, -0.654861}, - {0.000000, -0.755749, -0.654861}, - {-0.233539, -0.718760, -0.654861}, - {-0.444218, -0.611414, -0.654861}, - {-0.611414, -0.444218, -0.654861}, - {-0.718760, -0.233539, -0.654861}, - {-0.755749, 0.000000, -0.654861}, - }, - - { - {-0.989821, 0.000000, -0.142315}, - {-0.941376, 0.305872, -0.142315}, - {-0.800782, 0.581802, -0.142315}, - {-0.581802, 0.800782, -0.142315}, - {-0.305872, 0.941376, -0.142315}, - {0.000000, 0.989821, -0.142315}, - {0.305872, 0.941376, -0.142315}, - {0.581802, 0.800782, -0.142315}, - {0.800782, 0.581802, -0.142315}, - {0.941376, 0.305872, -0.142315}, - {0.989821, 0.000000, -0.142315}, - {0.941376, -0.305872, -0.142315}, - {0.800782, -0.581802, -0.142315}, - {0.581802, -0.800782, -0.142315}, - {0.305872, -0.941376, -0.142315}, - {0.000000, -0.989821, -0.142315}, - {-0.305872, -0.941376, -0.142315}, - {-0.581802, -0.800782, -0.142315}, - {-0.800782, -0.581802, -0.142315}, - {-0.941376, -0.305872, -0.142315}, - {-0.989821, 0.000000, -0.142315}, - }, - - { - {-0.909632, 0.000000, 0.415414}, - {-0.865112, 0.281092, 0.415414}, - {-0.735908, 0.534668, 0.415414}, - {-0.534668, 0.735908, 0.415414}, - {-0.281092, 0.865112, 0.415414}, - {0.000000, 0.909632, 0.415414}, - {0.281092, 0.865112, 0.415414}, - {0.534668, 0.735908, 0.415414}, - {0.735908, 0.534668, 0.415414}, - {0.865112, 0.281092, 0.415414}, - {0.909632, 0.000000, 0.415414}, - {0.865112, -0.281092, 0.415414}, - {0.735908, -0.534668, 0.415414}, - {0.534668, -0.735908, 0.415414}, - {0.281092, -0.865112, 0.415414}, - {0.000000, -0.909632, 0.415414}, - {-0.281092, -0.865112, 0.415414}, - {-0.534668, -0.735908, 0.415414}, - {-0.735908, -0.534668, 0.415414}, - {-0.865112, -0.281092, 0.415414}, - {-0.909632, 0.000000, 0.415414}, - }, - - { - {-0.540642, 0.000000, 0.841253}, - {-0.514181, 0.167067, 0.841253}, - {-0.437388, 0.317781, 0.841253}, - {-0.317781, 0.437388, 0.841253}, - {-0.167067, 0.514181, 0.841253}, - {0.000000, 0.540642, 0.841253}, - {0.167067, 0.514181, 0.841253}, - {0.317781, 0.437388, 0.841253}, - {0.437388, 0.317781, 0.841253}, - {0.514181, 0.167067, 0.841253}, - {0.540642, 0.000000, 0.841253}, - {0.514181, -0.167067, 0.841253}, - {0.437388, -0.317781, 0.841253}, - {0.317781, -0.437388, 0.841253}, - {0.167067, -0.514181, 0.841253}, - {0.000000, -0.540642, 0.841253}, - {-0.167067, -0.514181, 0.841253}, - {-0.317781, -0.437388, 0.841253}, - {-0.437388, -0.317781, 0.841253}, - {-0.514181, -0.167067, 0.841253}, - {-0.540642, 0.000000, 0.841253}, - }, - - { - {-0.000001, 0.000000, 1.000000}, - {-0.000001, 0.000000, 1.000000}, - {-0.000001, 0.000001, 1.000000}, - {-0.000001, 0.000001, 1.000000}, - {0.000000, 0.000001, 1.000000}, - {0.000000, 0.000001, 1.000000}, - {0.000000, 0.000001, 1.000000}, - {0.000001, 0.000001, 1.000000}, - {0.000001, 0.000001, 1.000000}, - {0.000001, 0.000000, 1.000000}, - {0.000001, 0.000000, 1.000000}, - {0.000001, 0.000000, 1.000000}, - {0.000001, -0.000001, 1.000000}, - {0.000001, -0.000001, 1.000000}, - {0.000000, -0.000001, 1.000000}, - {0.000000, -0.000001, 1.000000}, - {0.000000, -0.000001, 1.000000}, - {-0.000001, -0.000001, 1.000000}, - {-0.000001, -0.000001, 1.000000}, - {-0.000001, 0.000000, 1.000000}, - {-0.000001, 0.000000, 1.000000}, - }, - -}; - -void draw_base(void) { - - glCallList( MAT_HOLDER_BASE); - - glBegin(GL_POLYGON); - glNormal3fv(bn[0]); - glVertex3fv(bp[0][0]); - glVertex3fv(bp[0][1]); - glVertex3fv(bp[0][3]); - glVertex3fv(bp[0][2]); - glEnd(); - - glBegin(GL_POLYGON); - glNormal3fv(bn[1]); - glVertex3fv(bp[0][2]); - glVertex3fv(bp[0][3]); - glVertex3fv(bp[0][5]); - glVertex3fv(bp[0][4]); - glEnd(); - - glBegin(GL_POLYGON); - glNormal3fv(bn[2]); - glVertex3fv(bp[0][4]); - glVertex3fv(bp[0][5]); - glVertex3fv(bp[0][7]); - glVertex3fv(bp[0][6]); - glEnd(); - - glBegin(GL_POLYGON); - glNormal3fv(bn[3]); - glVertex3fv(bp[0][6]); - glVertex3fv(bp[0][7]); - glVertex3fv(bp[0][1]); - glVertex3fv(bp[0][0]); - glEnd(); - glBegin(GL_TRIANGLE_STRIP); - glNormal3fv(bn[4]); - glVertex3fv(bp[0][1]); - glVertex3fv(bp[1][0]); - glVertex3fv(bp[0][3]); - glVertex3fv(bp[1][2]); - glVertex3fv(bp[0][5]); - glVertex3fv(bp[1][4]); - glVertex3fv(bp[0][7]); - glVertex3fv(bp[1][6]); - glVertex3fv(bp[0][1]); - glVertex3fv(bp[1][0]); - glEnd(); - - glBegin(GL_POLYGON); - glNormal3fv(bn[0]); - glVertex3fv(bp[1][0]); - glVertex3fv(bp[1][1]); - glVertex3fv(bp[1][3]); - glVertex3fv(bp[1][2]); - glEnd(); - - glBegin(GL_POLYGON); - glNormal3fv(bn[1]); - glVertex3fv(bp[1][2]); - glVertex3fv(bp[1][3]); - glVertex3fv(bp[1][5]); - glVertex3fv(bp[1][4]); - glEnd(); - - glBegin(GL_POLYGON); - glNormal3fv(bn[2]); - glVertex3fv(bp[1][4]); - glVertex3fv(bp[1][5]); - glVertex3fv(bp[1][7]); - glVertex3fv(bp[1][6]); - glEnd(); - - glBegin(GL_POLYGON); - glNormal3fv(bn[3]); - glVertex3fv(bp[1][6]); - glVertex3fv(bp[1][7]); - glVertex3fv(bp[1][1]); - glVertex3fv(bp[1][0]); - glEnd(); - glBegin(GL_TRIANGLE_STRIP); - glNormal3fv(bn[4]); - glVertex3fv(bp[1][1]); - glVertex3fv(bp[2][0]); - glVertex3fv(bp[1][3]); - glVertex3fv(bp[2][2]); - glVertex3fv(bp[1][5]); - glVertex3fv(bp[2][4]); - glVertex3fv(bp[1][7]); - glVertex3fv(bp[2][6]); - glVertex3fv(bp[1][1]); - glVertex3fv(bp[2][0]); - glEnd(); - - glBegin(GL_POLYGON); - glNormal3fv(bn[0]); - glVertex3fv(bp[2][0]); - glVertex3fv(bp[2][1]); - glVertex3fv(bp[2][3]); - glVertex3fv(bp[2][2]); - glEnd(); - - glBegin(GL_POLYGON); - glNormal3fv(bn[1]); - glVertex3fv(bp[2][2]); - glVertex3fv(bp[2][3]); - glVertex3fv(bp[2][5]); - glVertex3fv(bp[2][4]); - glEnd(); - - glBegin(GL_POLYGON); - glNormal3fv(bn[2]); - glVertex3fv(bp[2][4]); - glVertex3fv(bp[2][5]); - glVertex3fv(bp[2][7]); - glVertex3fv(bp[2][6]); - glEnd(); - - glBegin(GL_POLYGON); - glNormal3fv(bn[3]); - glVertex3fv(bp[2][6]); - glVertex3fv(bp[2][7]); - glVertex3fv(bp[2][1]); - glVertex3fv(bp[2][0]); - glEnd(); - glBegin(GL_TRIANGLE_STRIP); - glNormal3fv(bn[4]); - glVertex3fv(bp[2][1]); - glVertex3fv(bp[3][0]); - glVertex3fv(bp[2][3]); - glVertex3fv(bp[3][2]); - glVertex3fv(bp[2][5]); - glVertex3fv(bp[3][4]); - glVertex3fv(bp[2][7]); - glVertex3fv(bp[3][6]); - glVertex3fv(bp[2][1]); - glVertex3fv(bp[3][0]); - glEnd(); - - glBegin(GL_POLYGON); - glNormal3fv(bn[2]); - glVertex3fv(bp[3][0]); - glVertex3fv(bp[3][1]); - glVertex3fv(bp[3][3]); - glVertex3fv(bp[3][2]); - glEnd(); - - glBegin(GL_POLYGON); - glNormal3fv(bn[3]); - glVertex3fv(bp[3][2]); - glVertex3fv(bp[3][3]); - glVertex3fv(bp[3][5]); - glVertex3fv(bp[3][4]); - glEnd(); - - glBegin(GL_POLYGON); - glNormal3fv(bn[0]); - glVertex3fv(bp[3][4]); - glVertex3fv(bp[3][5]); - glVertex3fv(bp[3][7]); - glVertex3fv(bp[3][6]); - glEnd(); - - glBegin(GL_POLYGON); - glNormal3fv(bn[1]); - glVertex3fv(bp[3][6]); - glVertex3fv(bp[3][7]); - glVertex3fv(bp[3][1]); - glVertex3fv(bp[3][0]); - glEnd(); - - glBegin(GL_POLYGON); - glNormal3fv(bn[4]); - glVertex3fv(bp[3][1]); - glVertex3fv(bp[3][3]); - glVertex3fv(bp[3][5]); - glVertex3fv(bp[3][7]); - glEnd(); -} - -void draw_torus(void) { - - glCallList( MAT_HOLDER_RINGS); - - glBegin(GL_TRIANGLE_STRIP); - glNormal3fv(tn[0][0]); glVertex3fv(tp[0][0]); - glNormal3fv(tn[1][0]); glVertex3fv(tp[1][0]); - glNormal3fv(tn[0][1]); glVertex3fv(tp[0][1]); - glNormal3fv(tn[1][1]); glVertex3fv(tp[1][1]); - glNormal3fv(tn[0][2]); glVertex3fv(tp[0][2]); - glNormal3fv(tn[1][2]); glVertex3fv(tp[1][2]); - glNormal3fv(tn[0][3]); glVertex3fv(tp[0][3]); - glNormal3fv(tn[1][3]); glVertex3fv(tp[1][3]); - glNormal3fv(tn[0][4]); glVertex3fv(tp[0][4]); - glNormal3fv(tn[1][4]); glVertex3fv(tp[1][4]); - glNormal3fv(tn[0][5]); glVertex3fv(tp[0][5]); - glNormal3fv(tn[1][5]); glVertex3fv(tp[1][5]); - glNormal3fv(tn[0][6]); glVertex3fv(tp[0][6]); - glNormal3fv(tn[1][6]); glVertex3fv(tp[1][6]); - glNormal3fv(tn[0][7]); glVertex3fv(tp[0][7]); - glNormal3fv(tn[1][7]); glVertex3fv(tp[1][7]); - glNormal3fv(tn[0][8]); glVertex3fv(tp[0][8]); - glNormal3fv(tn[1][8]); glVertex3fv(tp[1][8]); - glNormal3fv(tn[0][9]); glVertex3fv(tp[0][9]); - glNormal3fv(tn[1][9]); glVertex3fv(tp[1][9]); - glNormal3fv(tn[0][10]); glVertex3fv(tp[0][10]); - glNormal3fv(tn[1][10]); glVertex3fv(tp[1][10]); - glNormal3fv(tn[0][11]); glVertex3fv(tp[0][11]); - glNormal3fv(tn[1][11]); glVertex3fv(tp[1][11]); - glNormal3fv(tn[0][12]); glVertex3fv(tp[0][12]); - glNormal3fv(tn[1][12]); glVertex3fv(tp[1][12]); - glNormal3fv(tn[0][13]); glVertex3fv(tp[0][13]); - glNormal3fv(tn[1][13]); glVertex3fv(tp[1][13]); - glNormal3fv(tn[0][14]); glVertex3fv(tp[0][14]); - glNormal3fv(tn[1][14]); glVertex3fv(tp[1][14]); - glNormal3fv(tn[0][15]); glVertex3fv(tp[0][15]); - glNormal3fv(tn[1][15]); glVertex3fv(tp[1][15]); - glNormal3fv(tn[0][16]); glVertex3fv(tp[0][16]); - glNormal3fv(tn[1][16]); glVertex3fv(tp[1][16]); - glNormal3fv(tn[0][17]); glVertex3fv(tp[0][17]); - glNormal3fv(tn[1][17]); glVertex3fv(tp[1][17]); - glNormal3fv(tn[0][18]); glVertex3fv(tp[0][18]); - glNormal3fv(tn[1][18]); glVertex3fv(tp[1][18]); - glNormal3fv(tn[0][19]); glVertex3fv(tp[0][19]); - glNormal3fv(tn[1][19]); glVertex3fv(tp[1][19]); - glNormal3fv(tn[0][20]); glVertex3fv(tp[0][20]); - glNormal3fv(tn[1][20]); glVertex3fv(tp[1][20]); - glEnd(); - glBegin(GL_TRIANGLE_STRIP); - glNormal3fv(tn[1][0]); glVertex3fv(tp[1][0]); - glNormal3fv(tn[2][0]); glVertex3fv(tp[2][0]); - glNormal3fv(tn[1][1]); glVertex3fv(tp[1][1]); - glNormal3fv(tn[2][1]); glVertex3fv(tp[2][1]); - glNormal3fv(tn[1][2]); glVertex3fv(tp[1][2]); - glNormal3fv(tn[2][2]); glVertex3fv(tp[2][2]); - glNormal3fv(tn[1][3]); glVertex3fv(tp[1][3]); - glNormal3fv(tn[2][3]); glVertex3fv(tp[2][3]); - glNormal3fv(tn[1][4]); glVertex3fv(tp[1][4]); - glNormal3fv(tn[2][4]); glVertex3fv(tp[2][4]); - glNormal3fv(tn[1][5]); glVertex3fv(tp[1][5]); - glNormal3fv(tn[2][5]); glVertex3fv(tp[2][5]); - glNormal3fv(tn[1][6]); glVertex3fv(tp[1][6]); - glNormal3fv(tn[2][6]); glVertex3fv(tp[2][6]); - glNormal3fv(tn[1][7]); glVertex3fv(tp[1][7]); - glNormal3fv(tn[2][7]); glVertex3fv(tp[2][7]); - glNormal3fv(tn[1][8]); glVertex3fv(tp[1][8]); - glNormal3fv(tn[2][8]); glVertex3fv(tp[2][8]); - glNormal3fv(tn[1][9]); glVertex3fv(tp[1][9]); - glNormal3fv(tn[2][9]); glVertex3fv(tp[2][9]); - glNormal3fv(tn[1][10]); glVertex3fv(tp[1][10]); - glNormal3fv(tn[2][10]); glVertex3fv(tp[2][10]); - glNormal3fv(tn[1][11]); glVertex3fv(tp[1][11]); - glNormal3fv(tn[2][11]); glVertex3fv(tp[2][11]); - glNormal3fv(tn[1][12]); glVertex3fv(tp[1][12]); - glNormal3fv(tn[2][12]); glVertex3fv(tp[2][12]); - glNormal3fv(tn[1][13]); glVertex3fv(tp[1][13]); - glNormal3fv(tn[2][13]); glVertex3fv(tp[2][13]); - glNormal3fv(tn[1][14]); glVertex3fv(tp[1][14]); - glNormal3fv(tn[2][14]); glVertex3fv(tp[2][14]); - glNormal3fv(tn[1][15]); glVertex3fv(tp[1][15]); - glNormal3fv(tn[2][15]); glVertex3fv(tp[2][15]); - glNormal3fv(tn[1][16]); glVertex3fv(tp[1][16]); - glNormal3fv(tn[2][16]); glVertex3fv(tp[2][16]); - glNormal3fv(tn[1][17]); glVertex3fv(tp[1][17]); - glNormal3fv(tn[2][17]); glVertex3fv(tp[2][17]); - glNormal3fv(tn[1][18]); glVertex3fv(tp[1][18]); - glNormal3fv(tn[2][18]); glVertex3fv(tp[2][18]); - glNormal3fv(tn[1][19]); glVertex3fv(tp[1][19]); - glNormal3fv(tn[2][19]); glVertex3fv(tp[2][19]); - glNormal3fv(tn[1][20]); glVertex3fv(tp[1][20]); - glNormal3fv(tn[2][20]); glVertex3fv(tp[2][20]); - glEnd(); - glBegin(GL_TRIANGLE_STRIP); - glNormal3fv(tn[2][0]); glVertex3fv(tp[2][0]); - glNormal3fv(tn[3][0]); glVertex3fv(tp[3][0]); - glNormal3fv(tn[2][1]); glVertex3fv(tp[2][1]); - glNormal3fv(tn[3][1]); glVertex3fv(tp[3][1]); - glNormal3fv(tn[2][2]); glVertex3fv(tp[2][2]); - glNormal3fv(tn[3][2]); glVertex3fv(tp[3][2]); - glNormal3fv(tn[2][3]); glVertex3fv(tp[2][3]); - glNormal3fv(tn[3][3]); glVertex3fv(tp[3][3]); - glNormal3fv(tn[2][4]); glVertex3fv(tp[2][4]); - glNormal3fv(tn[3][4]); glVertex3fv(tp[3][4]); - glNormal3fv(tn[2][5]); glVertex3fv(tp[2][5]); - glNormal3fv(tn[3][5]); glVertex3fv(tp[3][5]); - glNormal3fv(tn[2][6]); glVertex3fv(tp[2][6]); - glNormal3fv(tn[3][6]); glVertex3fv(tp[3][6]); - glNormal3fv(tn[2][7]); glVertex3fv(tp[2][7]); - glNormal3fv(tn[3][7]); glVertex3fv(tp[3][7]); - glNormal3fv(tn[2][8]); glVertex3fv(tp[2][8]); - glNormal3fv(tn[3][8]); glVertex3fv(tp[3][8]); - glNormal3fv(tn[2][9]); glVertex3fv(tp[2][9]); - glNormal3fv(tn[3][9]); glVertex3fv(tp[3][9]); - glNormal3fv(tn[2][10]); glVertex3fv(tp[2][10]); - glNormal3fv(tn[3][10]); glVertex3fv(tp[3][10]); - glNormal3fv(tn[2][11]); glVertex3fv(tp[2][11]); - glNormal3fv(tn[3][11]); glVertex3fv(tp[3][11]); - glNormal3fv(tn[2][12]); glVertex3fv(tp[2][12]); - glNormal3fv(tn[3][12]); glVertex3fv(tp[3][12]); - glNormal3fv(tn[2][13]); glVertex3fv(tp[2][13]); - glNormal3fv(tn[3][13]); glVertex3fv(tp[3][13]); - glNormal3fv(tn[2][14]); glVertex3fv(tp[2][14]); - glNormal3fv(tn[3][14]); glVertex3fv(tp[3][14]); - glNormal3fv(tn[2][15]); glVertex3fv(tp[2][15]); - glNormal3fv(tn[3][15]); glVertex3fv(tp[3][15]); - glNormal3fv(tn[2][16]); glVertex3fv(tp[2][16]); - glNormal3fv(tn[3][16]); glVertex3fv(tp[3][16]); - glNormal3fv(tn[2][17]); glVertex3fv(tp[2][17]); - glNormal3fv(tn[3][17]); glVertex3fv(tp[3][17]); - glNormal3fv(tn[2][18]); glVertex3fv(tp[2][18]); - glNormal3fv(tn[3][18]); glVertex3fv(tp[3][18]); - glNormal3fv(tn[2][19]); glVertex3fv(tp[2][19]); - glNormal3fv(tn[3][19]); glVertex3fv(tp[3][19]); - glNormal3fv(tn[2][20]); glVertex3fv(tp[2][20]); - glNormal3fv(tn[3][20]); glVertex3fv(tp[3][20]); - glEnd(); - glBegin(GL_TRIANGLE_STRIP); - glNormal3fv(tn[3][0]); glVertex3fv(tp[3][0]); - glNormal3fv(tn[4][0]); glVertex3fv(tp[4][0]); - glNormal3fv(tn[3][1]); glVertex3fv(tp[3][1]); - glNormal3fv(tn[4][1]); glVertex3fv(tp[4][1]); - glNormal3fv(tn[3][2]); glVertex3fv(tp[3][2]); - glNormal3fv(tn[4][2]); glVertex3fv(tp[4][2]); - glNormal3fv(tn[3][3]); glVertex3fv(tp[3][3]); - glNormal3fv(tn[4][3]); glVertex3fv(tp[4][3]); - glNormal3fv(tn[3][4]); glVertex3fv(tp[3][4]); - glNormal3fv(tn[4][4]); glVertex3fv(tp[4][4]); - glNormal3fv(tn[3][5]); glVertex3fv(tp[3][5]); - glNormal3fv(tn[4][5]); glVertex3fv(tp[4][5]); - glNormal3fv(tn[3][6]); glVertex3fv(tp[3][6]); - glNormal3fv(tn[4][6]); glVertex3fv(tp[4][6]); - glNormal3fv(tn[3][7]); glVertex3fv(tp[3][7]); - glNormal3fv(tn[4][7]); glVertex3fv(tp[4][7]); - glNormal3fv(tn[3][8]); glVertex3fv(tp[3][8]); - glNormal3fv(tn[4][8]); glVertex3fv(tp[4][8]); - glNormal3fv(tn[3][9]); glVertex3fv(tp[3][9]); - glNormal3fv(tn[4][9]); glVertex3fv(tp[4][9]); - glNormal3fv(tn[3][10]); glVertex3fv(tp[3][10]); - glNormal3fv(tn[4][10]); glVertex3fv(tp[4][10]); - glNormal3fv(tn[3][11]); glVertex3fv(tp[3][11]); - glNormal3fv(tn[4][11]); glVertex3fv(tp[4][11]); - glNormal3fv(tn[3][12]); glVertex3fv(tp[3][12]); - glNormal3fv(tn[4][12]); glVertex3fv(tp[4][12]); - glNormal3fv(tn[3][13]); glVertex3fv(tp[3][13]); - glNormal3fv(tn[4][13]); glVertex3fv(tp[4][13]); - glNormal3fv(tn[3][14]); glVertex3fv(tp[3][14]); - glNormal3fv(tn[4][14]); glVertex3fv(tp[4][14]); - glNormal3fv(tn[3][15]); glVertex3fv(tp[3][15]); - glNormal3fv(tn[4][15]); glVertex3fv(tp[4][15]); - glNormal3fv(tn[3][16]); glVertex3fv(tp[3][16]); - glNormal3fv(tn[4][16]); glVertex3fv(tp[4][16]); - glNormal3fv(tn[3][17]); glVertex3fv(tp[3][17]); - glNormal3fv(tn[4][17]); glVertex3fv(tp[4][17]); - glNormal3fv(tn[3][18]); glVertex3fv(tp[3][18]); - glNormal3fv(tn[4][18]); glVertex3fv(tp[4][18]); - glNormal3fv(tn[3][19]); glVertex3fv(tp[3][19]); - glNormal3fv(tn[4][19]); glVertex3fv(tp[4][19]); - glNormal3fv(tn[3][20]); glVertex3fv(tp[3][20]); - glNormal3fv(tn[4][20]); glVertex3fv(tp[4][20]); - glEnd(); - glBegin(GL_TRIANGLE_STRIP); - glNormal3fv(tn[4][0]); glVertex3fv(tp[4][0]); - glNormal3fv(tn[5][0]); glVertex3fv(tp[5][0]); - glNormal3fv(tn[4][1]); glVertex3fv(tp[4][1]); - glNormal3fv(tn[5][1]); glVertex3fv(tp[5][1]); - glNormal3fv(tn[4][2]); glVertex3fv(tp[4][2]); - glNormal3fv(tn[5][2]); glVertex3fv(tp[5][2]); - glNormal3fv(tn[4][3]); glVertex3fv(tp[4][3]); - glNormal3fv(tn[5][3]); glVertex3fv(tp[5][3]); - glNormal3fv(tn[4][4]); glVertex3fv(tp[4][4]); - glNormal3fv(tn[5][4]); glVertex3fv(tp[5][4]); - glNormal3fv(tn[4][5]); glVertex3fv(tp[4][5]); - glNormal3fv(tn[5][5]); glVertex3fv(tp[5][5]); - glNormal3fv(tn[4][6]); glVertex3fv(tp[4][6]); - glNormal3fv(tn[5][6]); glVertex3fv(tp[5][6]); - glNormal3fv(tn[4][7]); glVertex3fv(tp[4][7]); - glNormal3fv(tn[5][7]); glVertex3fv(tp[5][7]); - glNormal3fv(tn[4][8]); glVertex3fv(tp[4][8]); - glNormal3fv(tn[5][8]); glVertex3fv(tp[5][8]); - glNormal3fv(tn[4][9]); glVertex3fv(tp[4][9]); - glNormal3fv(tn[5][9]); glVertex3fv(tp[5][9]); - glNormal3fv(tn[4][10]); glVertex3fv(tp[4][10]); - glNormal3fv(tn[5][10]); glVertex3fv(tp[5][10]); - glNormal3fv(tn[4][11]); glVertex3fv(tp[4][11]); - glNormal3fv(tn[5][11]); glVertex3fv(tp[5][11]); - glNormal3fv(tn[4][12]); glVertex3fv(tp[4][12]); - glNormal3fv(tn[5][12]); glVertex3fv(tp[5][12]); - glNormal3fv(tn[4][13]); glVertex3fv(tp[4][13]); - glNormal3fv(tn[5][13]); glVertex3fv(tp[5][13]); - glNormal3fv(tn[4][14]); glVertex3fv(tp[4][14]); - glNormal3fv(tn[5][14]); glVertex3fv(tp[5][14]); - glNormal3fv(tn[4][15]); glVertex3fv(tp[4][15]); - glNormal3fv(tn[5][15]); glVertex3fv(tp[5][15]); - glNormal3fv(tn[4][16]); glVertex3fv(tp[4][16]); - glNormal3fv(tn[5][16]); glVertex3fv(tp[5][16]); - glNormal3fv(tn[4][17]); glVertex3fv(tp[4][17]); - glNormal3fv(tn[5][17]); glVertex3fv(tp[5][17]); - glNormal3fv(tn[4][18]); glVertex3fv(tp[4][18]); - glNormal3fv(tn[5][18]); glVertex3fv(tp[5][18]); - glNormal3fv(tn[4][19]); glVertex3fv(tp[4][19]); - glNormal3fv(tn[5][19]); glVertex3fv(tp[5][19]); - glNormal3fv(tn[4][20]); glVertex3fv(tp[4][20]); - glNormal3fv(tn[5][20]); glVertex3fv(tp[5][20]); - glEnd(); - glBegin(GL_TRIANGLE_STRIP); - glNormal3fv(tn[5][0]); glVertex3fv(tp[5][0]); - glNormal3fv(tn[6][0]); glVertex3fv(tp[6][0]); - glNormal3fv(tn[5][1]); glVertex3fv(tp[5][1]); - glNormal3fv(tn[6][1]); glVertex3fv(tp[6][1]); - glNormal3fv(tn[5][2]); glVertex3fv(tp[5][2]); - glNormal3fv(tn[6][2]); glVertex3fv(tp[6][2]); - glNormal3fv(tn[5][3]); glVertex3fv(tp[5][3]); - glNormal3fv(tn[6][3]); glVertex3fv(tp[6][3]); - glNormal3fv(tn[5][4]); glVertex3fv(tp[5][4]); - glNormal3fv(tn[6][4]); glVertex3fv(tp[6][4]); - glNormal3fv(tn[5][5]); glVertex3fv(tp[5][5]); - glNormal3fv(tn[6][5]); glVertex3fv(tp[6][5]); - glNormal3fv(tn[5][6]); glVertex3fv(tp[5][6]); - glNormal3fv(tn[6][6]); glVertex3fv(tp[6][6]); - glNormal3fv(tn[5][7]); glVertex3fv(tp[5][7]); - glNormal3fv(tn[6][7]); glVertex3fv(tp[6][7]); - glNormal3fv(tn[5][8]); glVertex3fv(tp[5][8]); - glNormal3fv(tn[6][8]); glVertex3fv(tp[6][8]); - glNormal3fv(tn[5][9]); glVertex3fv(tp[5][9]); - glNormal3fv(tn[6][9]); glVertex3fv(tp[6][9]); - glNormal3fv(tn[5][10]); glVertex3fv(tp[5][10]); - glNormal3fv(tn[6][10]); glVertex3fv(tp[6][10]); - glNormal3fv(tn[5][11]); glVertex3fv(tp[5][11]); - glNormal3fv(tn[6][11]); glVertex3fv(tp[6][11]); - glNormal3fv(tn[5][12]); glVertex3fv(tp[5][12]); - glNormal3fv(tn[6][12]); glVertex3fv(tp[6][12]); - glNormal3fv(tn[5][13]); glVertex3fv(tp[5][13]); - glNormal3fv(tn[6][13]); glVertex3fv(tp[6][13]); - glNormal3fv(tn[5][14]); glVertex3fv(tp[5][14]); - glNormal3fv(tn[6][14]); glVertex3fv(tp[6][14]); - glNormal3fv(tn[5][15]); glVertex3fv(tp[5][15]); - glNormal3fv(tn[6][15]); glVertex3fv(tp[6][15]); - glNormal3fv(tn[5][16]); glVertex3fv(tp[5][16]); - glNormal3fv(tn[6][16]); glVertex3fv(tp[6][16]); - glNormal3fv(tn[5][17]); glVertex3fv(tp[5][17]); - glNormal3fv(tn[6][17]); glVertex3fv(tp[6][17]); - glNormal3fv(tn[5][18]); glVertex3fv(tp[5][18]); - glNormal3fv(tn[6][18]); glVertex3fv(tp[6][18]); - glNormal3fv(tn[5][19]); glVertex3fv(tp[5][19]); - glNormal3fv(tn[6][19]); glVertex3fv(tp[6][19]); - glNormal3fv(tn[5][20]); glVertex3fv(tp[5][20]); - glNormal3fv(tn[6][20]); glVertex3fv(tp[6][20]); - glEnd(); - glBegin(GL_TRIANGLE_STRIP); - glNormal3fv(tn[6][0]); glVertex3fv(tp[6][0]); - glNormal3fv(tn[7][0]); glVertex3fv(tp[7][0]); - glNormal3fv(tn[6][1]); glVertex3fv(tp[6][1]); - glNormal3fv(tn[7][1]); glVertex3fv(tp[7][1]); - glNormal3fv(tn[6][2]); glVertex3fv(tp[6][2]); - glNormal3fv(tn[7][2]); glVertex3fv(tp[7][2]); - glNormal3fv(tn[6][3]); glVertex3fv(tp[6][3]); - glNormal3fv(tn[7][3]); glVertex3fv(tp[7][3]); - glNormal3fv(tn[6][4]); glVertex3fv(tp[6][4]); - glNormal3fv(tn[7][4]); glVertex3fv(tp[7][4]); - glNormal3fv(tn[6][5]); glVertex3fv(tp[6][5]); - glNormal3fv(tn[7][5]); glVertex3fv(tp[7][5]); - glNormal3fv(tn[6][6]); glVertex3fv(tp[6][6]); - glNormal3fv(tn[7][6]); glVertex3fv(tp[7][6]); - glNormal3fv(tn[6][7]); glVertex3fv(tp[6][7]); - glNormal3fv(tn[7][7]); glVertex3fv(tp[7][7]); - glNormal3fv(tn[6][8]); glVertex3fv(tp[6][8]); - glNormal3fv(tn[7][8]); glVertex3fv(tp[7][8]); - glNormal3fv(tn[6][9]); glVertex3fv(tp[6][9]); - glNormal3fv(tn[7][9]); glVertex3fv(tp[7][9]); - glNormal3fv(tn[6][10]); glVertex3fv(tp[6][10]); - glNormal3fv(tn[7][10]); glVertex3fv(tp[7][10]); - glNormal3fv(tn[6][11]); glVertex3fv(tp[6][11]); - glNormal3fv(tn[7][11]); glVertex3fv(tp[7][11]); - glNormal3fv(tn[6][12]); glVertex3fv(tp[6][12]); - glNormal3fv(tn[7][12]); glVertex3fv(tp[7][12]); - glNormal3fv(tn[6][13]); glVertex3fv(tp[6][13]); - glNormal3fv(tn[7][13]); glVertex3fv(tp[7][13]); - glNormal3fv(tn[6][14]); glVertex3fv(tp[6][14]); - glNormal3fv(tn[7][14]); glVertex3fv(tp[7][14]); - glNormal3fv(tn[6][15]); glVertex3fv(tp[6][15]); - glNormal3fv(tn[7][15]); glVertex3fv(tp[7][15]); - glNormal3fv(tn[6][16]); glVertex3fv(tp[6][16]); - glNormal3fv(tn[7][16]); glVertex3fv(tp[7][16]); - glNormal3fv(tn[6][17]); glVertex3fv(tp[6][17]); - glNormal3fv(tn[7][17]); glVertex3fv(tp[7][17]); - glNormal3fv(tn[6][18]); glVertex3fv(tp[6][18]); - glNormal3fv(tn[7][18]); glVertex3fv(tp[7][18]); - glNormal3fv(tn[6][19]); glVertex3fv(tp[6][19]); - glNormal3fv(tn[7][19]); glVertex3fv(tp[7][19]); - glNormal3fv(tn[6][20]); glVertex3fv(tp[6][20]); - glNormal3fv(tn[7][20]); glVertex3fv(tp[7][20]); - glEnd(); - glBegin(GL_TRIANGLE_STRIP); - glNormal3fv(tn[7][0]); glVertex3fv(tp[7][0]); - glNormal3fv(tn[8][0]); glVertex3fv(tp[8][0]); - glNormal3fv(tn[7][1]); glVertex3fv(tp[7][1]); - glNormal3fv(tn[8][1]); glVertex3fv(tp[8][1]); - glNormal3fv(tn[7][2]); glVertex3fv(tp[7][2]); - glNormal3fv(tn[8][2]); glVertex3fv(tp[8][2]); - glNormal3fv(tn[7][3]); glVertex3fv(tp[7][3]); - glNormal3fv(tn[8][3]); glVertex3fv(tp[8][3]); - glNormal3fv(tn[7][4]); glVertex3fv(tp[7][4]); - glNormal3fv(tn[8][4]); glVertex3fv(tp[8][4]); - glNormal3fv(tn[7][5]); glVertex3fv(tp[7][5]); - glNormal3fv(tn[8][5]); glVertex3fv(tp[8][5]); - glNormal3fv(tn[7][6]); glVertex3fv(tp[7][6]); - glNormal3fv(tn[8][6]); glVertex3fv(tp[8][6]); - glNormal3fv(tn[7][7]); glVertex3fv(tp[7][7]); - glNormal3fv(tn[8][7]); glVertex3fv(tp[8][7]); - glNormal3fv(tn[7][8]); glVertex3fv(tp[7][8]); - glNormal3fv(tn[8][8]); glVertex3fv(tp[8][8]); - glNormal3fv(tn[7][9]); glVertex3fv(tp[7][9]); - glNormal3fv(tn[8][9]); glVertex3fv(tp[8][9]); - glNormal3fv(tn[7][10]); glVertex3fv(tp[7][10]); - glNormal3fv(tn[8][10]); glVertex3fv(tp[8][10]); - glNormal3fv(tn[7][11]); glVertex3fv(tp[7][11]); - glNormal3fv(tn[8][11]); glVertex3fv(tp[8][11]); - glNormal3fv(tn[7][12]); glVertex3fv(tp[7][12]); - glNormal3fv(tn[8][12]); glVertex3fv(tp[8][12]); - glNormal3fv(tn[7][13]); glVertex3fv(tp[7][13]); - glNormal3fv(tn[8][13]); glVertex3fv(tp[8][13]); - glNormal3fv(tn[7][14]); glVertex3fv(tp[7][14]); - glNormal3fv(tn[8][14]); glVertex3fv(tp[8][14]); - glNormal3fv(tn[7][15]); glVertex3fv(tp[7][15]); - glNormal3fv(tn[8][15]); glVertex3fv(tp[8][15]); - glNormal3fv(tn[7][16]); glVertex3fv(tp[7][16]); - glNormal3fv(tn[8][16]); glVertex3fv(tp[8][16]); - glNormal3fv(tn[7][17]); glVertex3fv(tp[7][17]); - glNormal3fv(tn[8][17]); glVertex3fv(tp[8][17]); - glNormal3fv(tn[7][18]); glVertex3fv(tp[7][18]); - glNormal3fv(tn[8][18]); glVertex3fv(tp[8][18]); - glNormal3fv(tn[7][19]); glVertex3fv(tp[7][19]); - glNormal3fv(tn[8][19]); glVertex3fv(tp[8][19]); - glNormal3fv(tn[7][20]); glVertex3fv(tp[7][20]); - glNormal3fv(tn[8][20]); glVertex3fv(tp[8][20]); - glEnd(); - glBegin(GL_TRIANGLE_STRIP); - glNormal3fv(tn[8][0]); glVertex3fv(tp[8][0]); - glNormal3fv(tn[9][0]); glVertex3fv(tp[9][0]); - glNormal3fv(tn[8][1]); glVertex3fv(tp[8][1]); - glNormal3fv(tn[9][1]); glVertex3fv(tp[9][1]); - glNormal3fv(tn[8][2]); glVertex3fv(tp[8][2]); - glNormal3fv(tn[9][2]); glVertex3fv(tp[9][2]); - glNormal3fv(tn[8][3]); glVertex3fv(tp[8][3]); - glNormal3fv(tn[9][3]); glVertex3fv(tp[9][3]); - glNormal3fv(tn[8][4]); glVertex3fv(tp[8][4]); - glNormal3fv(tn[9][4]); glVertex3fv(tp[9][4]); - glNormal3fv(tn[8][5]); glVertex3fv(tp[8][5]); - glNormal3fv(tn[9][5]); glVertex3fv(tp[9][5]); - glNormal3fv(tn[8][6]); glVertex3fv(tp[8][6]); - glNormal3fv(tn[9][6]); glVertex3fv(tp[9][6]); - glNormal3fv(tn[8][7]); glVertex3fv(tp[8][7]); - glNormal3fv(tn[9][7]); glVertex3fv(tp[9][7]); - glNormal3fv(tn[8][8]); glVertex3fv(tp[8][8]); - glNormal3fv(tn[9][8]); glVertex3fv(tp[9][8]); - glNormal3fv(tn[8][9]); glVertex3fv(tp[8][9]); - glNormal3fv(tn[9][9]); glVertex3fv(tp[9][9]); - glNormal3fv(tn[8][10]); glVertex3fv(tp[8][10]); - glNormal3fv(tn[9][10]); glVertex3fv(tp[9][10]); - glNormal3fv(tn[8][11]); glVertex3fv(tp[8][11]); - glNormal3fv(tn[9][11]); glVertex3fv(tp[9][11]); - glNormal3fv(tn[8][12]); glVertex3fv(tp[8][12]); - glNormal3fv(tn[9][12]); glVertex3fv(tp[9][12]); - glNormal3fv(tn[8][13]); glVertex3fv(tp[8][13]); - glNormal3fv(tn[9][13]); glVertex3fv(tp[9][13]); - glNormal3fv(tn[8][14]); glVertex3fv(tp[8][14]); - glNormal3fv(tn[9][14]); glVertex3fv(tp[9][14]); - glNormal3fv(tn[8][15]); glVertex3fv(tp[8][15]); - glNormal3fv(tn[9][15]); glVertex3fv(tp[9][15]); - glNormal3fv(tn[8][16]); glVertex3fv(tp[8][16]); - glNormal3fv(tn[9][16]); glVertex3fv(tp[9][16]); - glNormal3fv(tn[8][17]); glVertex3fv(tp[8][17]); - glNormal3fv(tn[9][17]); glVertex3fv(tp[9][17]); - glNormal3fv(tn[8][18]); glVertex3fv(tp[8][18]); - glNormal3fv(tn[9][18]); glVertex3fv(tp[9][18]); - glNormal3fv(tn[8][19]); glVertex3fv(tp[8][19]); - glNormal3fv(tn[9][19]); glVertex3fv(tp[9][19]); - glNormal3fv(tn[8][20]); glVertex3fv(tp[8][20]); - glNormal3fv(tn[9][20]); glVertex3fv(tp[9][20]); - glEnd(); - glBegin(GL_TRIANGLE_STRIP); - glNormal3fv(tn[9][0]); glVertex3fv(tp[9][0]); - glNormal3fv(tn[10][0]); glVertex3fv(tp[10][0]); - glNormal3fv(tn[9][1]); glVertex3fv(tp[9][1]); - glNormal3fv(tn[10][1]); glVertex3fv(tp[10][1]); - glNormal3fv(tn[9][2]); glVertex3fv(tp[9][2]); - glNormal3fv(tn[10][2]); glVertex3fv(tp[10][2]); - glNormal3fv(tn[9][3]); glVertex3fv(tp[9][3]); - glNormal3fv(tn[10][3]); glVertex3fv(tp[10][3]); - glNormal3fv(tn[9][4]); glVertex3fv(tp[9][4]); - glNormal3fv(tn[10][4]); glVertex3fv(tp[10][4]); - glNormal3fv(tn[9][5]); glVertex3fv(tp[9][5]); - glNormal3fv(tn[10][5]); glVertex3fv(tp[10][5]); - glNormal3fv(tn[9][6]); glVertex3fv(tp[9][6]); - glNormal3fv(tn[10][6]); glVertex3fv(tp[10][6]); - glNormal3fv(tn[9][7]); glVertex3fv(tp[9][7]); - glNormal3fv(tn[10][7]); glVertex3fv(tp[10][7]); - glNormal3fv(tn[9][8]); glVertex3fv(tp[9][8]); - glNormal3fv(tn[10][8]); glVertex3fv(tp[10][8]); - glNormal3fv(tn[9][9]); glVertex3fv(tp[9][9]); - glNormal3fv(tn[10][9]); glVertex3fv(tp[10][9]); - glNormal3fv(tn[9][10]); glVertex3fv(tp[9][10]); - glNormal3fv(tn[10][10]); glVertex3fv(tp[10][10]); - glNormal3fv(tn[9][11]); glVertex3fv(tp[9][11]); - glNormal3fv(tn[10][11]); glVertex3fv(tp[10][11]); - glNormal3fv(tn[9][12]); glVertex3fv(tp[9][12]); - glNormal3fv(tn[10][12]); glVertex3fv(tp[10][12]); - glNormal3fv(tn[9][13]); glVertex3fv(tp[9][13]); - glNormal3fv(tn[10][13]); glVertex3fv(tp[10][13]); - glNormal3fv(tn[9][14]); glVertex3fv(tp[9][14]); - glNormal3fv(tn[10][14]); glVertex3fv(tp[10][14]); - glNormal3fv(tn[9][15]); glVertex3fv(tp[9][15]); - glNormal3fv(tn[10][15]); glVertex3fv(tp[10][15]); - glNormal3fv(tn[9][16]); glVertex3fv(tp[9][16]); - glNormal3fv(tn[10][16]); glVertex3fv(tp[10][16]); - glNormal3fv(tn[9][17]); glVertex3fv(tp[9][17]); - glNormal3fv(tn[10][17]); glVertex3fv(tp[10][17]); - glNormal3fv(tn[9][18]); glVertex3fv(tp[9][18]); - glNormal3fv(tn[10][18]); glVertex3fv(tp[10][18]); - glNormal3fv(tn[9][19]); glVertex3fv(tp[9][19]); - glNormal3fv(tn[10][19]); glVertex3fv(tp[10][19]); - glNormal3fv(tn[9][20]); glVertex3fv(tp[9][20]); - glNormal3fv(tn[10][20]); glVertex3fv(tp[10][20]); - glEnd(); - glBegin(GL_TRIANGLE_STRIP); - glNormal3fv(tn[10][0]); glVertex3fv(tp[10][0]); - glNormal3fv(tn[11][0]); glVertex3fv(tp[11][0]); - glNormal3fv(tn[10][1]); glVertex3fv(tp[10][1]); - glNormal3fv(tn[11][1]); glVertex3fv(tp[11][1]); - glNormal3fv(tn[10][2]); glVertex3fv(tp[10][2]); - glNormal3fv(tn[11][2]); glVertex3fv(tp[11][2]); - glNormal3fv(tn[10][3]); glVertex3fv(tp[10][3]); - glNormal3fv(tn[11][3]); glVertex3fv(tp[11][3]); - glNormal3fv(tn[10][4]); glVertex3fv(tp[10][4]); - glNormal3fv(tn[11][4]); glVertex3fv(tp[11][4]); - glNormal3fv(tn[10][5]); glVertex3fv(tp[10][5]); - glNormal3fv(tn[11][5]); glVertex3fv(tp[11][5]); - glNormal3fv(tn[10][6]); glVertex3fv(tp[10][6]); - glNormal3fv(tn[11][6]); glVertex3fv(tp[11][6]); - glNormal3fv(tn[10][7]); glVertex3fv(tp[10][7]); - glNormal3fv(tn[11][7]); glVertex3fv(tp[11][7]); - glNormal3fv(tn[10][8]); glVertex3fv(tp[10][8]); - glNormal3fv(tn[11][8]); glVertex3fv(tp[11][8]); - glNormal3fv(tn[10][9]); glVertex3fv(tp[10][9]); - glNormal3fv(tn[11][9]); glVertex3fv(tp[11][9]); - glNormal3fv(tn[10][10]); glVertex3fv(tp[10][10]); - glNormal3fv(tn[11][10]); glVertex3fv(tp[11][10]); - glNormal3fv(tn[10][11]); glVertex3fv(tp[10][11]); - glNormal3fv(tn[11][11]); glVertex3fv(tp[11][11]); - glNormal3fv(tn[10][12]); glVertex3fv(tp[10][12]); - glNormal3fv(tn[11][12]); glVertex3fv(tp[11][12]); - glNormal3fv(tn[10][13]); glVertex3fv(tp[10][13]); - glNormal3fv(tn[11][13]); glVertex3fv(tp[11][13]); - glNormal3fv(tn[10][14]); glVertex3fv(tp[10][14]); - glNormal3fv(tn[11][14]); glVertex3fv(tp[11][14]); - glNormal3fv(tn[10][15]); glVertex3fv(tp[10][15]); - glNormal3fv(tn[11][15]); glVertex3fv(tp[11][15]); - glNormal3fv(tn[10][16]); glVertex3fv(tp[10][16]); - glNormal3fv(tn[11][16]); glVertex3fv(tp[11][16]); - glNormal3fv(tn[10][17]); glVertex3fv(tp[10][17]); - glNormal3fv(tn[11][17]); glVertex3fv(tp[11][17]); - glNormal3fv(tn[10][18]); glVertex3fv(tp[10][18]); - glNormal3fv(tn[11][18]); glVertex3fv(tp[11][18]); - glNormal3fv(tn[10][19]); glVertex3fv(tp[10][19]); - glNormal3fv(tn[11][19]); glVertex3fv(tp[11][19]); - glNormal3fv(tn[10][20]); glVertex3fv(tp[10][20]); - glNormal3fv(tn[11][20]); glVertex3fv(tp[11][20]); - glEnd(); -} - -void draw_holder(void) { - - glCallList( MAT_HOLDER_RINGS); - - glPushMatrix(); - draw_base(); - glTranslatef(0.0, 0.0, 20.000000); - draw_torus(); - glTranslatef(0.0, 0.0, 5.000000); - draw_torus(); - glTranslatef(0.0, 0.0, 5.000000); - draw_torus(); - glPopMatrix(); -} - diff --git a/lib/glut-3.7.6/progs/demos/ideas/draw_lamp.c b/lib/glut-3.7.6/progs/demos/ideas/draw_lamp.c deleted file mode 100644 index 70e5b96a9..000000000 --- a/lib/glut-3.7.6/progs/demos/ideas/draw_lamp.c +++ /dev/null @@ -1,826 +0,0 @@ -/* - * (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 - -#include "objects.h" -/* -#define glNormal3fv(v) \ -{ \ - printf("%g, %g, %g --> %.10f\n", \ - v[0], v[1], v[2], v[0]*v[0] + v[1]*v[1] + v[2]*v[2]); \ - glNormal3fv(v); \ -} -*/ -float hp[6][13][3] = { - - { - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - }, - { - {0.438371, 0.000000, 0.898794}, - {0.379641, 0.219186, 0.898794}, - {0.219186, 0.379641, 0.898794}, - {0.000000, 0.438371, 0.898794}, - {-0.219186, 0.379641, 0.898794}, - {-0.379641, 0.219186, 0.898794}, - {-0.438371, 0.000000, 0.898794}, - {-0.379641, -0.219186, 0.898794}, - {-0.219186, -0.379641, 0.898794}, - {0.000000, -0.438371, 0.898794}, - {0.219186, -0.379641, 0.898794}, - {0.379641, -0.219186, 0.898794}, - {0.438371, 0.000000, 0.898794}, - }, - { - {0.788011, 0.000000, 0.615662}, - {0.682437, 0.394005, 0.615662}, - {0.394005, 0.682437, 0.615662}, - {0.000000, 0.788011, 0.615662}, - {-0.394005, 0.682437, 0.615662}, - {-0.682437, 0.394005, 0.615662}, - {-0.788011, 0.000000, 0.615662}, - {-0.682437, -0.394005, 0.615662}, - {-0.394005, -0.682437, 0.615662}, - {0.000000, -0.788011, 0.615662}, - {0.394005, -0.682437, 0.615662}, - {0.682437, -0.394005, 0.615662}, - {0.788011, 0.000000, 0.615662}, - }, - { - {0.978148, 0.000000, 0.207912}, - {0.847101, 0.489074, 0.207912}, - {0.489074, 0.847101, 0.207912}, - {0.000000, 0.978148, 0.207912}, - {-0.489074, 0.847101, 0.207912}, - {-0.847101, 0.489074, 0.207912}, - {-0.978148, 0.000000, 0.207912}, - {-0.847101, -0.489074, 0.207912}, - {-0.489074, -0.847101, 0.207912}, - {0.000000, -0.978148, 0.207912}, - {0.489074, -0.847101, 0.207912}, - {0.847101, -0.489074, 0.207912}, - {0.978148, 0.000000, 0.207912}, - }, - { - {0.970296, 0.000000, -0.241922}, - {0.840301, 0.485148, -0.241922}, - {0.485148, 0.840301, -0.241922}, - {0.000000, 0.970296, -0.241922}, - {-0.485148, 0.840301, -0.241922}, - {-0.840301, 0.485148, -0.241922}, - {-0.970296, 0.000000, -0.241922}, - {-0.840301, -0.485148, -0.241922}, - {-0.485148, -0.840301, -0.241922}, - {0.000000, -0.970296, -0.241922}, - {0.485148, -0.840301, -0.241922}, - {0.840301, -0.485148, -0.241922}, - {0.970296, 0.000000, -0.241922}, - }, - { - {0.766044, 0.000000, -0.642788}, - {0.663414, 0.383022, -0.642788}, - {0.383022, 0.663414, -0.642788}, - {0.000000, 0.766044, -0.642788}, - {-0.383022, 0.663414, -0.642788}, - {-0.663414, 0.383022, -0.642788}, - {-0.766044, 0.000000, -0.642788}, - {-0.663414, -0.383022, -0.642788}, - {-0.383022, -0.663414, -0.642788}, - {0.000000, -0.766044, -0.642788}, - {0.383022, -0.663414, -0.642788}, - {0.663414, -0.383022, -0.642788}, - {0.766044, 0.000000, -0.642788}, - }, -}; - -float ltp[9][25][3] = { - { - {10.000000, 0.000000, 1.000000}, - {9.659258, -2.588191, 1.000000}, - {8.660254, -5.000000, 1.000000}, - {7.071068, -7.071068, 1.000000}, - {5.000000, -8.660254, 1.000000}, - {2.588191, -9.659258, 1.000000}, - {0.000000, -10.000000, 1.000000}, - {-2.588191, -9.659258, 1.000000}, - {-5.000000, -8.660254, 1.000000}, - {-7.071068, -7.071068, 1.000000}, - {-8.660254, -5.000000, 1.000000}, - {-9.659258, -2.588191, 1.000000}, - {-10.000000, 0.000000, 1.000000}, - {-9.659258, 2.588191, 1.000000}, - {-8.660254, 5.000000, 1.000000}, - {-7.071068, 7.071068, 1.000000}, - {-5.000000, 8.660254, 1.000000}, - {-2.588191, 9.659258, 1.000000}, - {0.000000, 10.000000, 1.000000}, - {2.588191, 9.659258, 1.000000}, - {5.000000, 8.660254, 1.000000}, - {7.071068, 7.071068, 1.000000}, - {8.660254, 5.000000, 1.000000}, - {9.659258, 2.588191, 1.000000}, - {10.000000, 0.000000, 1.000000}, - }, - - { - {10.707107, 0.000000, 0.707107}, - {10.342271, -2.771203, 0.707107}, - {9.272627, -5.353553, 0.707107}, - {7.571068, -7.571068, 0.707107}, - {5.353553, -9.272627, 0.707107}, - {2.771203, -10.342271, 0.707107}, - {0.000000, -10.707107, 0.707107}, - {-2.771203, -10.342271, 0.707107}, - {-5.353553, -9.272627, 0.707107}, - {-7.571068, -7.571068, 0.707107}, - {-9.272627, -5.353553, 0.707107}, - {-10.342271, -2.771203, 0.707107}, - {-10.707107, 0.000000, 0.707107}, - {-10.342271, 2.771203, 0.707107}, - {-9.272627, 5.353553, 0.707107}, - {-7.571068, 7.571068, 0.707107}, - {-5.353553, 9.272627, 0.707107}, - {-2.771203, 10.342271, 0.707107}, - {0.000000, 10.707107, 0.707107}, - {2.771203, 10.342271, 0.707107}, - {5.353553, 9.272627, 0.707107}, - {7.571068, 7.571068, 0.707107}, - {9.272627, 5.353553, 0.707107}, - {10.342271, 2.771203, 0.707107}, - {10.707107, 0.000000, 0.707107}, - }, - - { - {11.000000, 0.000000, 0.000000}, - {10.625184, -2.847009, 0.000000}, - {9.526279, -5.500000, 0.000000}, - {7.778174, -7.778174, 0.000000}, - {5.500000, -9.526279, 0.000000}, - {2.847009, -10.625184, 0.000000}, - {0.000000, -11.000000, 0.000000}, - {-2.847009, -10.625184, 0.000000}, - {-5.500000, -9.526279, 0.000000}, - {-7.778174, -7.778174, 0.000000}, - {-9.526279, -5.500000, 0.000000}, - {-10.625184, -2.847009, 0.000000}, - {-11.000000, 0.000000, 0.000000}, - {-10.625184, 2.847009, 0.000000}, - {-9.526279, 5.500000, 0.000000}, - {-7.778174, 7.778174, 0.000000}, - {-5.500000, 9.526279, 0.000000}, - {-2.847009, 10.625184, 0.000000}, - {0.000000, 11.000000, 0.000000}, - {2.847009, 10.625184, 0.000000}, - {5.500000, 9.526279, 0.000000}, - {7.778174, 7.778174, 0.000000}, - {9.526279, 5.500000, 0.000000}, - {10.625184, 2.847009, 0.000000}, - {11.000000, 0.000000, 0.000000}, - }, - - { - {10.707107, 0.000000, -0.707107}, - {10.342271, -2.771203, -0.707107}, - {9.272627, -5.353553, -0.707107}, - {7.571068, -7.571068, -0.707107}, - {5.353553, -9.272627, -0.707107}, - {2.771203, -10.342271, -0.707107}, - {0.000000, -10.707107, -0.707107}, - {-2.771203, -10.342271, -0.707107}, - {-5.353553, -9.272627, -0.707107}, - {-7.571068, -7.571068, -0.707107}, - {-9.272627, -5.353553, -0.707107}, - {-10.342271, -2.771203, -0.707107}, - {-10.707107, 0.000000, -0.707107}, - {-10.342271, 2.771203, -0.707107}, - {-9.272627, 5.353553, -0.707107}, - {-7.571068, 7.571068, -0.707107}, - {-5.353553, 9.272627, -0.707107}, - {-2.771203, 10.342271, -0.707107}, - {0.000000, 10.707107, -0.707107}, - {2.771203, 10.342271, -0.707107}, - {5.353553, 9.272627, -0.707107}, - {7.571068, 7.571068, -0.707107}, - {9.272627, 5.353553, -0.707107}, - {10.342271, 2.771203, -0.707107}, - {10.707107, 0.000000, -0.707107}, - }, - - { - {10.000000, 0.000000, -1.000000}, - {9.659258, -2.588191, -1.000000}, - {8.660254, -5.000000, -1.000000}, - {7.071068, -7.071068, -1.000000}, - {5.000000, -8.660254, -1.000000}, - {2.588191, -9.659258, -1.000000}, - {0.000000, -10.000000, -1.000000}, - {-2.588191, -9.659258, -1.000000}, - {-5.000000, -8.660254, -1.000000}, - {-7.071068, -7.071068, -1.000000}, - {-8.660254, -5.000000, -1.000000}, - {-9.659258, -2.588191, -1.000000}, - {-10.000000, 0.000000, -1.000000}, - {-9.659258, 2.588191, -1.000000}, - {-8.660254, 5.000000, -1.000000}, - {-7.071068, 7.071068, -1.000000}, - {-5.000000, 8.660254, -1.000000}, - {-2.588191, 9.659258, -1.000000}, - {0.000000, 10.000000, -1.000000}, - {2.588191, 9.659258, -1.000000}, - {5.000000, 8.660254, -1.000000}, - {7.071068, 7.071068, -1.000000}, - {8.660254, 5.000000, -1.000000}, - {9.659258, 2.588191, -1.000000}, - {10.000000, 0.000000, -1.000000}, - }, - - { - {9.292893, 0.000000, -0.707107}, - {8.976246, -2.405178, -0.707107}, - {8.047881, -4.646447, -0.707107}, - {6.571068, -6.571068, -0.707107}, - {4.646447, -8.047881, -0.707107}, - {2.405178, -8.976246, -0.707107}, - {0.000000, -9.292893, -0.707107}, - {-2.405178, -8.976246, -0.707107}, - {-4.646447, -8.047881, -0.707107}, - {-6.571068, -6.571068, -0.707107}, - {-8.047881, -4.646447, -0.707107}, - {-8.976246, -2.405178, -0.707107}, - {-9.292893, 0.000000, -0.707107}, - {-8.976246, 2.405178, -0.707107}, - {-8.047881, 4.646447, -0.707107}, - {-6.571068, 6.571068, -0.707107}, - {-4.646447, 8.047881, -0.707107}, - {-2.405178, 8.976246, -0.707107}, - {0.000000, 9.292893, -0.707107}, - {2.405178, 8.976246, -0.707107}, - {4.646447, 8.047881, -0.707107}, - {6.571068, 6.571068, -0.707107}, - {8.047881, 4.646447, -0.707107}, - {8.976246, 2.405178, -0.707107}, - {9.292893, 0.000000, -0.707107}, - }, - - { - {9.000000, 0.000000, 0.000000}, - {8.693333, -2.329371, 0.000000}, - {7.794229, -4.500000, 0.000000}, - {6.363961, -6.363961, 0.000000}, - {4.500000, -7.794229, 0.000000}, - {2.329371, -8.693333, 0.000000}, - {0.000000, -9.000000, 0.000000}, - {-2.329371, -8.693333, 0.000000}, - {-4.500000, -7.794229, 0.000000}, - {-6.363961, -6.363961, 0.000000}, - {-7.794229, -4.500000, 0.000000}, - {-8.693333, -2.329371, 0.000000}, - {-9.000000, 0.000000, 0.000000}, - {-8.693333, 2.329371, 0.000000}, - {-7.794229, 4.500000, 0.000000}, - {-6.363961, 6.363961, 0.000000}, - {-4.500000, 7.794229, 0.000000}, - {-2.329371, 8.693333, 0.000000}, - {0.000000, 9.000000, 0.000000}, - {2.329371, 8.693333, 0.000000}, - {4.500000, 7.794229, 0.000000}, - {6.363961, 6.363961, 0.000000}, - {7.794229, 4.500000, 0.000000}, - {8.693333, 2.329371, 0.000000}, - {9.000000, 0.000000, 0.000000}, - }, - - { - {9.292893, 0.000000, 0.707107}, - {8.976246, -2.405178, 0.707107}, - {8.047881, -4.646447, 0.707107}, - {6.571068, -6.571068, 0.707107}, - {4.646447, -8.047881, 0.707107}, - {2.405178, -8.976246, 0.707107}, - {0.000000, -9.292893, 0.707107}, - {-2.405178, -8.976246, 0.707107}, - {-4.646447, -8.047881, 0.707107}, - {-6.571068, -6.571068, 0.707107}, - {-8.047881, -4.646447, 0.707107}, - {-8.976246, -2.405178, 0.707107}, - {-9.292893, 0.000000, 0.707107}, - {-8.976246, 2.405178, 0.707107}, - {-8.047881, 4.646447, 0.707107}, - {-6.571068, 6.571068, 0.707107}, - {-4.646447, 8.047881, 0.707107}, - {-2.405178, 8.976246, 0.707107}, - {0.000000, 9.292893, 0.707107}, - {2.405178, 8.976246, 0.707107}, - {4.646447, 8.047881, 0.707107}, - {6.571068, 6.571068, 0.707107}, - {8.047881, 4.646447, 0.707107}, - {8.976246, 2.405178, 0.707107}, - {9.292893, 0.000000, 0.707107}, - }, - - { - {10.000000, 0.000000, 1.000000}, - {9.659258, -2.588191, 1.000000}, - {8.660254, -5.000000, 1.000000}, - {7.071068, -7.071068, 1.000000}, - {5.000000, -8.660254, 1.000000}, - {2.588191, -9.659258, 1.000000}, - {0.000000, -10.000000, 1.000000}, - {-2.588191, -9.659258, 1.000000}, - {-5.000000, -8.660254, 1.000000}, - {-7.071068, -7.071068, 1.000000}, - {-8.660254, -5.000000, 1.000000}, - {-9.659258, -2.588191, 1.000000}, - {-10.000000, 0.000000, 1.000000}, - {-9.659258, 2.588191, 1.000000}, - {-8.660254, 5.000000, 1.000000}, - {-7.071068, 7.071068, 1.000000}, - {-5.000000, 8.660254, 1.000000}, - {-2.588191, 9.659258, 1.000000}, - {0.000000, 10.000000, 1.000000}, - {2.588191, 9.659258, 1.000000}, - {5.000000, 8.660254, 1.000000}, - {7.071068, 7.071068, 1.000000}, - {8.660254, 5.000000, 1.000000}, - {9.659258, 2.588191, 1.000000}, - {10.000000, 0.000000, 1.000000}, - }, - -}; - -float ltn[9][25][3] = { - { - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - }, - - { - {0.707107, 0.000000, 0.707107}, - {0.683013, -0.183013, 0.707107}, - {0.612372, -0.353553, 0.707107}, - {0.500000, -0.500000, 0.707107}, - {0.353553, -0.612372, 0.707107}, - {0.183013, -0.683013, 0.707107}, - {0.000000, -0.707107, 0.707107}, - {-0.183013, -0.683013, 0.707107}, - {-0.353553, -0.612372, 0.707107}, - {-0.500000, -0.500000, 0.707107}, - {-0.612372, -0.353553, 0.707107}, - {-0.683013, -0.183013, 0.707107}, - {-0.707107, 0.000000, 0.707107}, - {-0.683013, 0.183013, 0.707107}, - {-0.612372, 0.353553, 0.707107}, - {-0.500000, 0.500000, 0.707107}, - {-0.353553, 0.612372, 0.707107}, - {-0.183013, 0.683013, 0.707107}, - {0.000000, 0.707107, 0.707107}, - {0.183013, 0.683013, 0.707107}, - {0.353553, 0.612372, 0.707107}, - {0.500000, 0.500000, 0.707107}, - {0.612372, 0.353553, 0.707107}, - {0.683013, 0.183013, 0.707107}, - {0.707107, 0.000000, 0.707107}, - }, - - { - {1.000000, 0.000000, 0.000000}, - {0.965926, -0.258819, 0.000000}, - {0.866025, -0.500000, 0.000000}, - {0.707107, -0.707107, 0.000000}, - {0.500000, -0.866025, 0.000000}, - {0.258819, -0.965926, 0.000000}, - {0.000000, -1.000000, 0.000000}, - {-0.258819, -0.965926, 0.000000}, - {-0.500000, -0.866025, 0.000000}, - {-0.707107, -0.707107, 0.000000}, - {-0.866025, -0.500000, 0.000000}, - {-0.965926, -0.258819, 0.000000}, - {-1.000000, 0.000000, 0.000000}, - {-0.965926, 0.258819, 0.000000}, - {-0.866025, 0.500000, 0.000000}, - {-0.707107, 0.707107, 0.000000}, - {-0.500000, 0.866025, 0.000000}, - {-0.258819, 0.965926, 0.000000}, - {0.000000, 1.000000, 0.000000}, - {0.258819, 0.965926, 0.000000}, - {0.500000, 0.866025, 0.000000}, - {0.707107, 0.707107, 0.000000}, - {0.866025, 0.500000, 0.000000}, - {0.965926, 0.258819, 0.000000}, - {1.000000, 0.000000, 0.000000}, - }, - - { - {0.707107, 0.000000, -0.707107}, - {0.683013, -0.183013, -0.707107}, - {0.612372, -0.353553, -0.707107}, - {0.500000, -0.500000, -0.707107}, - {0.353553, -0.612372, -0.707107}, - {0.183013, -0.683013, -0.707107}, - {0.000000, -0.707107, -0.707107}, - {-0.183013, -0.683013, -0.707107}, - {-0.353553, -0.612372, -0.707107}, - {-0.500000, -0.500000, -0.707107}, - {-0.612372, -0.353553, -0.707107}, - {-0.683013, -0.183013, -0.707107}, - {-0.707107, 0.000000, -0.707107}, - {-0.683013, 0.183013, -0.707107}, - {-0.612372, 0.353553, -0.707107}, - {-0.500000, 0.500000, -0.707107}, - {-0.353553, 0.612372, -0.707107}, - {-0.183013, 0.683013, -0.707107}, - {0.000000, 0.707107, -0.707107}, - {0.183013, 0.683013, -0.707107}, - {0.353553, 0.612372, -0.707107}, - {0.500000, 0.500000, -0.707107}, - {0.612372, 0.353553, -0.707107}, - {0.683013, 0.183013, -0.707107}, - {0.707107, 0.000000, -0.707107}, - }, - - { - {0.000000, 0.000000, -1.000000}, - {0.000000, 0.000000, -1.000000}, - {0.000000, 0.000000, -1.000000}, - {0.000000, 0.000000, -1.000000}, - {0.000000, 0.000000, -1.000000}, - {0.000000, 0.000000, -1.000000}, - {0.000000, 0.000000, -1.000000}, - {0.000000, 0.000000, -1.000000}, - {0.000000, 0.000000, -1.000000}, - {0.000000, 0.000000, -1.000000}, - {0.000000, 0.000000, -1.000000}, - {0.000000, 0.000000, -1.000000}, - {0.000000, 0.000000, -1.000000}, - {0.000000, 0.000000, -1.000000}, - {0.000000, 0.000000, -1.000000}, - {0.000000, 0.000000, -1.000000}, - {0.000000, 0.000000, -1.000000}, - {0.000000, 0.000000, -1.000000}, - {0.000000, 0.000000, -1.000000}, - {0.000000, 0.000000, -1.000000}, - {0.000000, 0.000000, -1.000000}, - {0.000000, 0.000000, -1.000000}, - {0.000000, 0.000000, -1.000000}, - {0.000000, 0.000000, -1.000000}, - {0.000000, 0.000000, -1.000000}, - }, - - { - {-0.707107, 0.000000, -0.707107}, - {-0.683013, 0.183013, -0.707107}, - {-0.612372, 0.353553, -0.707107}, - {-0.500000, 0.500000, -0.707107}, - {-0.353553, 0.612372, -0.707107}, - {-0.183013, 0.683013, -0.707107}, - {0.000000, 0.707107, -0.707107}, - {0.183013, 0.683013, -0.707107}, - {0.353553, 0.612372, -0.707107}, - {0.500000, 0.500000, -0.707107}, - {0.612372, 0.353553, -0.707107}, - {0.683013, 0.183013, -0.707107}, - {0.707107, 0.000000, -0.707107}, - {0.683013, -0.183013, -0.707107}, - {0.612372, -0.353553, -0.707107}, - {0.500000, -0.500000, -0.707107}, - {0.353553, -0.612372, -0.707107}, - {0.183013, -0.683013, -0.707107}, - {0.000000, -0.707107, -0.707107}, - {-0.183013, -0.683013, -0.707107}, - {-0.353553, -0.612372, -0.707107}, - {-0.500000, -0.500000, -0.707107}, - {-0.612372, -0.353553, -0.707107}, - {-0.683013, -0.183013, -0.707107}, - {-0.707107, 0.000000, -0.707107}, - }, - - { - {-1.000000, 0.000000, 0.000000}, - {-0.965926, 0.258819, 0.000000}, - {-0.866025, 0.500000, 0.000000}, - {-0.707107, 0.707107, 0.000000}, - {-0.500000, 0.866025, 0.000000}, - {-0.258819, 0.965926, 0.000000}, - {0.000000, 1.000000, 0.000000}, - {0.258819, 0.965926, 0.000000}, - {0.500000, 0.866025, 0.000000}, - {0.707107, 0.707107, 0.000000}, - {0.866025, 0.500000, 0.000000}, - {0.965926, 0.258819, 0.000000}, - {1.000000, 0.000000, 0.000000}, - {0.965926, -0.258819, 0.000000}, - {0.866025, -0.500000, 0.000000}, - {0.707107, -0.707107, 0.000000}, - {0.500000, -0.866025, 0.000000}, - {0.258819, -0.965926, 0.000000}, - {0.000000, -1.000000, 0.000000}, - {-0.258819, -0.965926, 0.000000}, - {-0.500000, -0.866025, 0.000000}, - {-0.707107, -0.707107, 0.000000}, - {-0.866025, -0.500000, 0.000000}, - {-0.965926, -0.258819, 0.000000}, - {-1.000000, 0.000000, 0.000000}, - }, - - { - {-0.707107, 0.000000, 0.707107}, - {-0.683013, 0.183013, 0.707107}, - {-0.612372, 0.353553, 0.707107}, - {-0.500000, 0.500000, 0.707107}, - {-0.353553, 0.612372, 0.707107}, - {-0.183013, 0.683013, 0.707107}, - {0.000000, 0.707107, 0.707107}, - {0.183013, 0.683013, 0.707107}, - {0.353553, 0.612372, 0.707107}, - {0.500000, 0.500000, 0.707107}, - {0.612372, 0.353553, 0.707107}, - {0.683013, 0.183013, 0.707107}, - {0.707107, 0.000000, 0.707107}, - {0.683013, -0.183013, 0.707107}, - {0.612372, -0.353553, 0.707107}, - {0.500000, -0.500000, 0.707107}, - {0.353553, -0.612372, 0.707107}, - {0.183013, -0.683013, 0.707107}, - {0.000000, -0.707107, 0.707107}, - {-0.183013, -0.683013, 0.707107}, - {-0.353553, -0.612372, 0.707107}, - {-0.500000, -0.500000, 0.707107}, - {-0.612372, -0.353553, 0.707107}, - {-0.683013, -0.183013, 0.707107}, - {-0.707107, 0.000000, 0.707107}, - }, - - { - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - {0.000000, 0.000000, 1.000000}, - }, - -}; - -void draw_hemisphere(void) { - - glCallList(MAT_HEMISPHERE); - glEnable(GL_LIGHTING); - - /* CF damn! */ - /* glEnable(GL_NORMALIZE); */ - - glBegin(GL_TRIANGLE_STRIP); - glNormal3fv(hp[0][0]); glVertex3fv(hp[0][0]); - glNormal3fv(hp[1][0]); glVertex3fv(hp[1][0]); - glNormal3fv(hp[0][1]); glVertex3fv(hp[0][1]); - glNormal3fv(hp[1][1]); glVertex3fv(hp[1][1]); - glNormal3fv(hp[0][2]); glVertex3fv(hp[0][2]); - glNormal3fv(hp[1][2]); glVertex3fv(hp[1][2]); - glNormal3fv(hp[0][3]); glVertex3fv(hp[0][3]); - glNormal3fv(hp[1][3]); glVertex3fv(hp[1][3]); - glNormal3fv(hp[0][4]); glVertex3fv(hp[0][4]); - glNormal3fv(hp[1][4]); glVertex3fv(hp[1][4]); - glNormal3fv(hp[0][5]); glVertex3fv(hp[0][5]); - glNormal3fv(hp[1][5]); glVertex3fv(hp[1][5]); - glNormal3fv(hp[0][6]); glVertex3fv(hp[0][6]); - glNormal3fv(hp[1][6]); glVertex3fv(hp[1][6]); - glNormal3fv(hp[0][7]); glVertex3fv(hp[0][7]); - glNormal3fv(hp[1][7]); glVertex3fv(hp[1][7]); - glNormal3fv(hp[0][8]); glVertex3fv(hp[0][8]); - glNormal3fv(hp[1][8]); glVertex3fv(hp[1][8]); - glNormal3fv(hp[0][9]); glVertex3fv(hp[0][9]); - glNormal3fv(hp[1][9]); glVertex3fv(hp[1][9]); - glNormal3fv(hp[0][10]); glVertex3fv(hp[0][10]); - glNormal3fv(hp[1][10]); glVertex3fv(hp[1][10]); - glNormal3fv(hp[0][11]); glVertex3fv(hp[0][11]); - glNormal3fv(hp[1][11]); glVertex3fv(hp[1][11]); - glNormal3fv(hp[0][12]); glVertex3fv(hp[0][12]); - glNormal3fv(hp[1][12]); glVertex3fv(hp[1][12]); - glEnd(); - - glBegin(GL_TRIANGLE_STRIP); - glNormal3fv(hp[1][0]); glVertex3fv(hp[1][0]); - glNormal3fv(hp[2][0]); glVertex3fv(hp[2][0]); - glNormal3fv(hp[1][1]); glVertex3fv(hp[1][1]); - glNormal3fv(hp[2][1]); glVertex3fv(hp[2][1]); - glNormal3fv(hp[1][2]); glVertex3fv(hp[1][2]); - glNormal3fv(hp[2][2]); glVertex3fv(hp[2][2]); - glNormal3fv(hp[1][3]); glVertex3fv(hp[1][3]); - glNormal3fv(hp[2][3]); glVertex3fv(hp[2][3]); - glNormal3fv(hp[1][4]); glVertex3fv(hp[1][4]); - glNormal3fv(hp[2][4]); glVertex3fv(hp[2][4]); - glNormal3fv(hp[1][5]); glVertex3fv(hp[1][5]); - glNormal3fv(hp[2][5]); glVertex3fv(hp[2][5]); - glNormal3fv(hp[1][6]); glVertex3fv(hp[1][6]); - glNormal3fv(hp[2][6]); glVertex3fv(hp[2][6]); - glNormal3fv(hp[1][7]); glVertex3fv(hp[1][7]); - glNormal3fv(hp[2][7]); glVertex3fv(hp[2][7]); - glNormal3fv(hp[1][8]); glVertex3fv(hp[1][8]); - glNormal3fv(hp[2][8]); glVertex3fv(hp[2][8]); - glNormal3fv(hp[1][9]); glVertex3fv(hp[1][9]); - glNormal3fv(hp[2][9]); glVertex3fv(hp[2][9]); - glNormal3fv(hp[1][10]); glVertex3fv(hp[1][10]); - glNormal3fv(hp[2][10]); glVertex3fv(hp[2][10]); - glNormal3fv(hp[1][11]); glVertex3fv(hp[1][11]); - glNormal3fv(hp[2][11]); glVertex3fv(hp[2][11]); - glNormal3fv(hp[1][12]); glVertex3fv(hp[1][12]); - glNormal3fv(hp[2][12]); glVertex3fv(hp[2][12]); - glEnd(); - - glBegin(GL_TRIANGLE_STRIP); - glNormal3fv(hp[2][0]); glVertex3fv(hp[2][0]); - glNormal3fv(hp[3][0]); glVertex3fv(hp[3][0]); - glNormal3fv(hp[2][1]); glVertex3fv(hp[2][1]); - glNormal3fv(hp[3][1]); glVertex3fv(hp[3][1]); - glNormal3fv(hp[2][2]); glVertex3fv(hp[2][2]); - glNormal3fv(hp[3][2]); glVertex3fv(hp[3][2]); - glNormal3fv(hp[2][3]); glVertex3fv(hp[2][3]); - glNormal3fv(hp[3][3]); glVertex3fv(hp[3][3]); - glNormal3fv(hp[2][4]); glVertex3fv(hp[2][4]); - glNormal3fv(hp[3][4]); glVertex3fv(hp[3][4]); - glNormal3fv(hp[2][5]); glVertex3fv(hp[2][5]); - glNormal3fv(hp[3][5]); glVertex3fv(hp[3][5]); - glNormal3fv(hp[2][6]); glVertex3fv(hp[2][6]); - glNormal3fv(hp[3][6]); glVertex3fv(hp[3][6]); - glNormal3fv(hp[2][7]); glVertex3fv(hp[2][7]); - glNormal3fv(hp[3][7]); glVertex3fv(hp[3][7]); - glNormal3fv(hp[2][8]); glVertex3fv(hp[2][8]); - glNormal3fv(hp[3][8]); glVertex3fv(hp[3][8]); - glNormal3fv(hp[2][9]); glVertex3fv(hp[2][9]); - glNormal3fv(hp[3][9]); glVertex3fv(hp[3][9]); - glNormal3fv(hp[2][10]); glVertex3fv(hp[2][10]); - glNormal3fv(hp[3][10]); glVertex3fv(hp[3][10]); - glNormal3fv(hp[2][11]); glVertex3fv(hp[2][11]); - glNormal3fv(hp[3][11]); glVertex3fv(hp[3][11]); - glNormal3fv(hp[2][12]); glVertex3fv(hp[2][12]); - glNormal3fv(hp[3][12]); glVertex3fv(hp[3][12]); - glEnd(); - - glBegin(GL_TRIANGLE_STRIP); - glNormal3fv(hp[3][0]); glVertex3fv(hp[3][0]); - glNormal3fv(hp[4][0]); glVertex3fv(hp[4][0]); - glNormal3fv(hp[3][1]); glVertex3fv(hp[3][1]); - glNormal3fv(hp[4][1]); glVertex3fv(hp[4][1]); - glNormal3fv(hp[3][2]); glVertex3fv(hp[3][2]); - glNormal3fv(hp[4][2]); glVertex3fv(hp[4][2]); - glNormal3fv(hp[3][3]); glVertex3fv(hp[3][3]); - glNormal3fv(hp[4][3]); glVertex3fv(hp[4][3]); - glNormal3fv(hp[3][4]); glVertex3fv(hp[3][4]); - glNormal3fv(hp[4][4]); glVertex3fv(hp[4][4]); - glNormal3fv(hp[3][5]); glVertex3fv(hp[3][5]); - glNormal3fv(hp[4][5]); glVertex3fv(hp[4][5]); - glNormal3fv(hp[3][6]); glVertex3fv(hp[3][6]); - glNormal3fv(hp[4][6]); glVertex3fv(hp[4][6]); - glNormal3fv(hp[3][7]); glVertex3fv(hp[3][7]); - glNormal3fv(hp[4][7]); glVertex3fv(hp[4][7]); - glNormal3fv(hp[3][8]); glVertex3fv(hp[3][8]); - glNormal3fv(hp[4][8]); glVertex3fv(hp[4][8]); - glNormal3fv(hp[3][9]); glVertex3fv(hp[3][9]); - glNormal3fv(hp[4][9]); glVertex3fv(hp[4][9]); - glNormal3fv(hp[3][10]); glVertex3fv(hp[3][10]); - glNormal3fv(hp[4][10]); glVertex3fv(hp[4][10]); - glNormal3fv(hp[3][11]); glVertex3fv(hp[3][11]); - glNormal3fv(hp[4][11]); glVertex3fv(hp[4][11]); - glNormal3fv(hp[3][12]); glVertex3fv(hp[3][12]); - glNormal3fv(hp[4][12]); glVertex3fv(hp[4][12]); - glEnd(); - - glBegin(GL_TRIANGLE_STRIP); - glNormal3fv(hp[4][0]); glVertex3fv(hp[4][0]); - glNormal3fv(hp[5][0]); glVertex3fv(hp[5][0]); - glNormal3fv(hp[4][1]); glVertex3fv(hp[4][1]); - glNormal3fv(hp[5][1]); glVertex3fv(hp[5][1]); - glNormal3fv(hp[4][2]); glVertex3fv(hp[4][2]); - glNormal3fv(hp[5][2]); glVertex3fv(hp[5][2]); - glNormal3fv(hp[4][3]); glVertex3fv(hp[4][3]); - glNormal3fv(hp[5][3]); glVertex3fv(hp[5][3]); - glNormal3fv(hp[4][4]); glVertex3fv(hp[4][4]); - glNormal3fv(hp[5][4]); glVertex3fv(hp[5][4]); - glNormal3fv(hp[4][5]); glVertex3fv(hp[4][5]); - glNormal3fv(hp[5][5]); glVertex3fv(hp[5][5]); - glNormal3fv(hp[4][6]); glVertex3fv(hp[4][6]); - glNormal3fv(hp[5][6]); glVertex3fv(hp[5][6]); - glNormal3fv(hp[4][7]); glVertex3fv(hp[4][7]); - glNormal3fv(hp[5][7]); glVertex3fv(hp[5][7]); - glNormal3fv(hp[4][8]); glVertex3fv(hp[4][8]); - glNormal3fv(hp[5][8]); glVertex3fv(hp[5][8]); - glNormal3fv(hp[4][9]); glVertex3fv(hp[4][9]); - glNormal3fv(hp[5][9]); glVertex3fv(hp[5][9]); - glNormal3fv(hp[4][10]); glVertex3fv(hp[4][10]); - glNormal3fv(hp[5][10]); glVertex3fv(hp[5][10]); - glNormal3fv(hp[4][11]); glVertex3fv(hp[4][11]); - glNormal3fv(hp[5][11]); glVertex3fv(hp[5][11]); - glNormal3fv(hp[4][12]); glVertex3fv(hp[4][12]); - glNormal3fv(hp[5][12]); glVertex3fv(hp[5][12]); - glEnd(); - - glDisable(GL_LIGHTING); - glColor3ub(255, 255, 255); - glBegin(GL_POLYGON); - glVertex3fv(hp[5][0]); - glVertex3fv(hp[5][1]); - glVertex3fv(hp[5][2]); - glVertex3fv(hp[5][3]); - glVertex3fv(hp[5][4]); - glVertex3fv(hp[5][5]); - glVertex3fv(hp[5][6]); - glVertex3fv(hp[5][7]); - glVertex3fv(hp[5][8]); - glVertex3fv(hp[5][9]); - glVertex3fv(hp[5][10]); - glVertex3fv(hp[5][11]); - glEnd(); - - /* CF damn! */ - /* glDisable(GL_NORMALIZE); */ - -} - diff --git a/lib/glut-3.7.6/progs/demos/ideas/draw_logo.c b/lib/glut-3.7.6/progs/demos/ideas/draw_logo.c deleted file mode 100644 index 6bf90fec2..000000000 --- a/lib/glut-3.7.6/progs/demos/ideas/draw_logo.c +++ /dev/null @@ -1,524 +0,0 @@ -/* - * (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 - -#include "objects.h" - -static float scp[18][3] = { - {1.000000, 0.000000, 0.000000}, {1.000000, 0.000000, 5.000000}, - {0.707107, 0.707107, 0.000000}, {0.707107, 0.707107, 5.000000}, - {0.000000, 1.000000, 0.000000}, {0.000000, 1.000000, 5.000000}, - {-0.707107, 0.707107, 0.000000}, {-0.707107, 0.707107, 5.000000}, - {-1.000000, 0.000000, 0.000000}, {-1.000000, 0.000000, 5.000000}, - {-0.707107, -0.707107, 0.000000}, {-0.707107, -0.707107, 5.000000}, - {0.000000, -1.000000, 0.000000}, {0.000000, -1.000000, 5.000000}, - {0.707107, -0.707107, 0.000000}, {0.707107, -0.707107, 5.000000}, - {1.000000, 0.000000, 0.000000}, {1.000000, 0.000000, 5.000000}, -}; - -static float dcp[18][3] = { - {1.000000, 0.000000, 0.000000}, {1.000000, 0.000000, 7.000000}, - {0.707107, 0.707107, 0.000000}, {0.707107, 0.707107, 7.000000}, - {0.000000, 1.000000, 0.000000}, {0.000000, 1.000000, 7.000000}, - {-0.707107, 0.707107, 0.000000}, {-0.707107, 0.707107, 7.000000}, - {-1.000000, 0.000000, 0.000000}, {-1.000000, 0.000000, 7.000000}, - {-0.707107, -0.707107, 0.000000}, {-0.707107, -0.707107, 7.000000}, - {0.000000, -1.000000, 0.000000}, {0.000000, -1.000000, 7.000000}, - {0.707107, -0.707107, 0.000000}, {0.707107, -0.707107, 7.000000}, - {1.000000, 0.000000, 0.000000}, {1.000000, 0.000000, 7.000000}, -}; - -static float ep[7][9][3] = { - { - {1.000000, 0.000000, 0.000000}, - {0.707107, 0.707107, 0.000000}, - {0.000000, 1.000000, 0.000000}, - {-0.707107, 0.707107, 0.000000}, - {-1.000000, 0.000000, 0.000000}, - {-0.707107, -0.707107, 0.000000}, - {0.000000, -1.000000, 0.000000}, - {0.707107, -0.707107, 0.000000}, - {1.000000, 0.000000, 0.000000}, - }, - - { - {1.000000, 0.034074, 0.258819}, - {0.707107, 0.717087, 0.075806}, - {0.000000, 1.000000, 0.000000}, - {-0.707107, 0.717087, 0.075806}, - {-1.000000, 0.034074, 0.258819}, - {-0.707107, -0.648939, 0.441832}, - {0.000000, -0.931852, 0.517638}, - {0.707107, -0.648939, 0.441832}, - {1.000000, 0.034074, 0.258819}, - }, - - { - {1.000000, 0.133975, 0.500000}, - {0.707107, 0.746347, 0.146447}, - {0.000000, 1.000000, 0.000000}, - {-0.707107, 0.746347, 0.146447}, - {-1.000000, 0.133975, 0.500000}, - {-0.707107, -0.478398, 0.853553}, - {0.000000, -0.732051, 1.000000}, - {0.707107, -0.478398, 0.853553}, - {1.000000, 0.133975, 0.500000}, - }, - - { - {1.000000, 0.292893, 0.707107}, - {0.707107, 0.792893, 0.207107}, - {0.000000, 1.000000, 0.000000}, - {-0.707107, 0.792893, 0.207107}, - {-1.000000, 0.292893, 0.707107}, - {-0.707107, -0.207107, 1.207107}, - {0.000000, -0.414214, 1.414214}, - {0.707107, -0.207107, 1.207107}, - {1.000000, 0.292893, 0.707107}, - }, - - { - {1.000000, 0.500000, 0.866025}, - {0.707107, 0.853553, 0.253653}, - {0.000000, 1.000000, 0.000000}, - {-0.707107, 0.853553, 0.253653}, - {-1.000000, 0.500000, 0.866025}, - {-0.707107, 0.146447, 1.478398}, - {0.000000, 0.000000, 1.732051}, - {0.707107, 0.146447, 1.478398}, - {1.000000, 0.500000, 0.866025}, - }, - - { - {1.000000, 0.741181, 0.965926}, - {0.707107, 0.924194, 0.282913}, - {0.000000, 1.000000, 0.000000}, - {-0.707107, 0.924194, 0.282913}, - {-1.000000, 0.741181, 0.965926}, - {-0.707107, 0.558168, 1.648939}, - {0.000000, 0.482362, 1.931852}, - {0.707107, 0.558168, 1.648939}, - {1.000000, 0.741181, 0.965926}, - }, - - { - {1.000000, 1.000000, 1.000000}, - {0.707107, 1.000000, 0.292893}, - {0.000000, 1.000000, 0.000000}, - {-0.707107, 1.000000, 0.292893}, - {-1.000000, 1.000000, 1.000000}, - {-0.707107, 1.000000, 1.707107}, - {0.000000, 1.000000, 2.000000}, - {0.707107, 1.000000, 1.707107}, - {1.000000, 1.000000, 1.000000}, - }, - -}; - -static float en[7][9][3] = { - { - {1.000000, 0.000000, 0.000000}, - {0.707107, 0.707107, 0.000000}, - {0.000000, 1.000000, 0.000000}, - {-0.707107, 0.707107, 0.000000}, - {-1.000000, 0.000000, 0.000000}, - {-0.707107, -0.707107, 0.000000}, - {0.000000, -1.000000, 0.000000}, - {0.707107, -0.707107, 0.000000}, - {1.000000, 0.000000, 0.000000}, - }, - - { - {1.000000, 0.000000, 0.000000}, - {0.707107, 0.683013, -0.183013}, - {0.000000, 0.965926, -0.258819}, - {-0.707107, 0.683013, -0.183013}, - {-1.000000, 0.000000, 0.000000}, - {-0.707107, -0.683013, 0.183013}, - {0.000000, -0.965926, 0.258819}, - {0.707107, -0.683013, 0.183013}, - {1.000000, 0.000000, 0.000000}, - }, - - { - {1.000000, 0.000000, 0.000000}, - {0.707107, 0.612372, -0.353553}, - {0.000000, 0.866025, -0.500000}, - {-0.707107, 0.612372, -0.353553}, - {-1.000000, 0.000000, 0.000000}, - {-0.707107, -0.612372, 0.353553}, - {0.000000, -0.866025, 0.500000}, - {0.707107, -0.612372, 0.353553}, - {1.000000, 0.000000, 0.000000}, - }, - - { - {1.000000, 0.000000, 0.000000}, - {0.707107, 0.500000, -0.500000}, - {0.000000, 0.707107, -0.707107}, - {-0.707107, 0.500000, -0.500000}, - {-1.000000, 0.000000, 0.000000}, - {-0.707107, -0.500000, 0.500000}, - {0.000000, -0.707107, 0.707107}, - {0.707107, -0.500000, 0.500000}, - {1.000000, 0.000000, 0.000000}, - }, - - { - {1.000000, 0.000000, 0.000000}, - {0.707107, 0.353553, -0.612372}, - {0.000000, 0.500000, -0.866025}, - {-0.707107, 0.353553, -0.612372}, - {-1.000000, 0.000000, 0.000000}, - {-0.707107, -0.353553, 0.612372}, - {0.000000, -0.500000, 0.866025}, - {0.707107, -0.353553, 0.612372}, - {1.000000, 0.000000, 0.000000}, - }, - - { - {1.000000, 0.000000, 0.000000}, - {0.707107, 0.183013, -0.683013}, - {0.000000, 0.258819, -0.965926}, - {-0.707107, 0.183013, -0.683013}, - {-1.000000, 0.000000, 0.000000}, - {-0.707107, -0.183013, 0.683013}, - {0.000000, -0.258819, 0.965926}, - {0.707107, -0.183013, 0.683013}, - {1.000000, 0.000000, 0.000000}, - }, - - { - {1.000000, 0.000000, 0.000000}, - {0.707107, 0.000000, -0.707107}, - {0.000000, 0.000000, -1.000000}, - {-0.707107, 0.000000, -0.707107}, - {-1.000000, 0.000000, 0.000000}, - {-0.707107, 0.000000, 0.707107}, - {0.000000, 0.000000, 1.000000}, - {0.707107, 0.000000, 0.707107}, - {1.000000, 0.000000, 0.000000}, - }, - -}; - -static void draw_single_cylinder(void) { - - glBegin(GL_TRIANGLE_STRIP); - glNormal3fv(scp[0]); glVertex3fv(scp[0]); - glNormal3fv(scp[0]); glVertex3fv(scp[1]); - glNormal3fv(scp[2]); glVertex3fv(scp[2]); - glNormal3fv(scp[2]); glVertex3fv(scp[3]); - glNormal3fv(scp[4]); glVertex3fv(scp[4]); - glNormal3fv(scp[4]); glVertex3fv(scp[5]); - glNormal3fv(scp[6]); glVertex3fv(scp[6]); - glNormal3fv(scp[6]); glVertex3fv(scp[7]); - glNormal3fv(scp[8]); glVertex3fv(scp[8]); - glNormal3fv(scp[8]); glVertex3fv(scp[9]); - glNormal3fv(scp[10]); glVertex3fv(scp[10]); - glNormal3fv(scp[10]); glVertex3fv(scp[11]); - glNormal3fv(scp[12]); glVertex3fv(scp[12]); - glNormal3fv(scp[12]); glVertex3fv(scp[13]); - glNormal3fv(scp[14]); glVertex3fv(scp[14]); - glNormal3fv(scp[14]); glVertex3fv(scp[15]); - glNormal3fv(scp[16]); glVertex3fv(scp[16]); - glNormal3fv(scp[16]); glVertex3fv(scp[17]); - glEnd(); -} - -static void draw_double_cylinder(void) { - - glEnable(GL_NORMALIZE); - - glBegin(GL_TRIANGLE_STRIP); - glNormal3fv(dcp[0]); glVertex3fv(dcp[0]); - glNormal3fv(dcp[0]); - glVertex3fv(dcp[1]); - glNormal3fv(dcp[2]); glVertex3fv(dcp[2]); - glNormal3fv(dcp[2]); - glVertex3fv(dcp[3]); - glNormal3fv(dcp[4]); glVertex3fv(dcp[4]); - glNormal3fv(dcp[4]); - glVertex3fv(dcp[5]); - glNormal3fv(dcp[6]); glVertex3fv(dcp[6]); - glNormal3fv(dcp[6]); - glVertex3fv(dcp[7]); - glNormal3fv(dcp[8]); glVertex3fv(dcp[8]); - glNormal3fv(dcp[8]); - glVertex3fv(dcp[9]); - glNormal3fv(dcp[10]); glVertex3fv(dcp[10]); - glNormal3fv(dcp[10]); - glVertex3fv(dcp[11]); - glNormal3fv(dcp[12]); glVertex3fv(dcp[12]); - glNormal3fv(dcp[12]); - glVertex3fv(dcp[13]); - glNormal3fv(dcp[14]); glVertex3fv(dcp[14]); - glNormal3fv(dcp[14]); - glVertex3fv(dcp[15]); - glNormal3fv(dcp[16]); glVertex3fv(dcp[16]); - glNormal3fv(dcp[16]); - glVertex3fv(dcp[17]); - glEnd(); -} - -static void draw_elbow(void) { - - glBegin(GL_TRIANGLE_STRIP); - glNormal3fv(en[0][0]); glVertex3fv(ep[0][0]); - glNormal3fv(en[1][0]); glVertex3fv(ep[1][0]); - glNormal3fv(en[0][1]); glVertex3fv(ep[0][1]); - glNormal3fv(en[1][1]); glVertex3fv(ep[1][1]); - glNormal3fv(en[0][2]); glVertex3fv(ep[0][2]); - glNormal3fv(en[1][2]); glVertex3fv(ep[1][2]); - glNormal3fv(en[0][3]); glVertex3fv(ep[0][3]); - glNormal3fv(en[1][3]); glVertex3fv(ep[1][3]); - glNormal3fv(en[0][4]); glVertex3fv(ep[0][4]); - glNormal3fv(en[1][4]); glVertex3fv(ep[1][4]); - glNormal3fv(en[0][5]); glVertex3fv(ep[0][5]); - glNormal3fv(en[1][5]); glVertex3fv(ep[1][5]); - glNormal3fv(en[0][6]); glVertex3fv(ep[0][6]); - glNormal3fv(en[1][6]); glVertex3fv(ep[1][6]); - glNormal3fv(en[0][7]); glVertex3fv(ep[0][7]); - glNormal3fv(en[1][7]); glVertex3fv(ep[1][7]); - glNormal3fv(en[0][8]); glVertex3fv(ep[0][8]); - glNormal3fv(en[1][8]); glVertex3fv(ep[1][8]); - glEnd(); - glBegin(GL_TRIANGLE_STRIP); - glNormal3fv(en[1][0]); glVertex3fv(ep[1][0]); - glNormal3fv(en[2][0]); glVertex3fv(ep[2][0]); - glNormal3fv(en[1][1]); glVertex3fv(ep[1][1]); - glNormal3fv(en[2][1]); glVertex3fv(ep[2][1]); - glNormal3fv(en[1][2]); glVertex3fv(ep[1][2]); - glNormal3fv(en[2][2]); glVertex3fv(ep[2][2]); - glNormal3fv(en[1][3]); glVertex3fv(ep[1][3]); - glNormal3fv(en[2][3]); glVertex3fv(ep[2][3]); - glNormal3fv(en[1][4]); glVertex3fv(ep[1][4]); - glNormal3fv(en[2][4]); glVertex3fv(ep[2][4]); - glNormal3fv(en[1][5]); glVertex3fv(ep[1][5]); - glNormal3fv(en[2][5]); glVertex3fv(ep[2][5]); - glNormal3fv(en[1][6]); glVertex3fv(ep[1][6]); - glNormal3fv(en[2][6]); glVertex3fv(ep[2][6]); - glNormal3fv(en[1][7]); glVertex3fv(ep[1][7]); - glNormal3fv(en[2][7]); glVertex3fv(ep[2][7]); - glNormal3fv(en[1][8]); glVertex3fv(ep[1][8]); - glNormal3fv(en[2][8]); glVertex3fv(ep[2][8]); - glEnd(); - glBegin(GL_TRIANGLE_STRIP); - glNormal3fv(en[2][0]); glVertex3fv(ep[2][0]); - glNormal3fv(en[3][0]); glVertex3fv(ep[3][0]); - glNormal3fv(en[2][1]); glVertex3fv(ep[2][1]); - glNormal3fv(en[3][1]); glVertex3fv(ep[3][1]); - glNormal3fv(en[2][2]); glVertex3fv(ep[2][2]); - glNormal3fv(en[3][2]); glVertex3fv(ep[3][2]); - glNormal3fv(en[2][3]); glVertex3fv(ep[2][3]); - glNormal3fv(en[3][3]); glVertex3fv(ep[3][3]); - glNormal3fv(en[2][4]); glVertex3fv(ep[2][4]); - glNormal3fv(en[3][4]); glVertex3fv(ep[3][4]); - glNormal3fv(en[2][5]); glVertex3fv(ep[2][5]); - glNormal3fv(en[3][5]); glVertex3fv(ep[3][5]); - glNormal3fv(en[2][6]); glVertex3fv(ep[2][6]); - glNormal3fv(en[3][6]); glVertex3fv(ep[3][6]); - glNormal3fv(en[2][7]); glVertex3fv(ep[2][7]); - glNormal3fv(en[3][7]); glVertex3fv(ep[3][7]); - glNormal3fv(en[2][8]); glVertex3fv(ep[2][8]); - glNormal3fv(en[3][8]); glVertex3fv(ep[3][8]); - glEnd(); - glBegin(GL_TRIANGLE_STRIP); - glNormal3fv(en[3][0]); glVertex3fv(ep[3][0]); - glNormal3fv(en[4][0]); glVertex3fv(ep[4][0]); - glNormal3fv(en[3][1]); glVertex3fv(ep[3][1]); - glNormal3fv(en[4][1]); glVertex3fv(ep[4][1]); - glNormal3fv(en[3][2]); glVertex3fv(ep[3][2]); - glNormal3fv(en[4][2]); glVertex3fv(ep[4][2]); - glNormal3fv(en[3][3]); glVertex3fv(ep[3][3]); - glNormal3fv(en[4][3]); glVertex3fv(ep[4][3]); - glNormal3fv(en[3][4]); glVertex3fv(ep[3][4]); - glNormal3fv(en[4][4]); glVertex3fv(ep[4][4]); - glNormal3fv(en[3][5]); glVertex3fv(ep[3][5]); - glNormal3fv(en[4][5]); glVertex3fv(ep[4][5]); - glNormal3fv(en[3][6]); glVertex3fv(ep[3][6]); - glNormal3fv(en[4][6]); glVertex3fv(ep[4][6]); - glNormal3fv(en[3][7]); glVertex3fv(ep[3][7]); - glNormal3fv(en[4][7]); glVertex3fv(ep[4][7]); - glNormal3fv(en[3][8]); glVertex3fv(ep[3][8]); - glNormal3fv(en[4][8]); glVertex3fv(ep[4][8]); - glEnd(); - glBegin(GL_TRIANGLE_STRIP); - glNormal3fv(en[4][0]); glVertex3fv(ep[4][0]); - glNormal3fv(en[5][0]); glVertex3fv(ep[5][0]); - glNormal3fv(en[4][1]); glVertex3fv(ep[4][1]); - glNormal3fv(en[5][1]); glVertex3fv(ep[5][1]); - glNormal3fv(en[4][2]); glVertex3fv(ep[4][2]); - glNormal3fv(en[5][2]); glVertex3fv(ep[5][2]); - glNormal3fv(en[4][3]); glVertex3fv(ep[4][3]); - glNormal3fv(en[5][3]); glVertex3fv(ep[5][3]); - glNormal3fv(en[4][4]); glVertex3fv(ep[4][4]); - glNormal3fv(en[5][4]); glVertex3fv(ep[5][4]); - glNormal3fv(en[4][5]); glVertex3fv(ep[4][5]); - glNormal3fv(en[5][5]); glVertex3fv(ep[5][5]); - glNormal3fv(en[4][6]); glVertex3fv(ep[4][6]); - glNormal3fv(en[5][6]); glVertex3fv(ep[5][6]); - glNormal3fv(en[4][7]); glVertex3fv(ep[4][7]); - glNormal3fv(en[5][7]); glVertex3fv(ep[5][7]); - glNormal3fv(en[4][8]); glVertex3fv(ep[4][8]); - glNormal3fv(en[5][8]); glVertex3fv(ep[5][8]); - glEnd(); - glBegin(GL_TRIANGLE_STRIP); - glNormal3fv(en[5][0]); glVertex3fv(ep[5][0]); - glNormal3fv(en[6][0]); glVertex3fv(ep[6][0]); - glNormal3fv(en[5][1]); glVertex3fv(ep[5][1]); - glNormal3fv(en[6][1]); glVertex3fv(ep[6][1]); - glNormal3fv(en[5][2]); glVertex3fv(ep[5][2]); - glNormal3fv(en[6][2]); glVertex3fv(ep[6][2]); - glNormal3fv(en[5][3]); glVertex3fv(ep[5][3]); - glNormal3fv(en[6][3]); glVertex3fv(ep[6][3]); - glNormal3fv(en[5][4]); glVertex3fv(ep[5][4]); - glNormal3fv(en[6][4]); glVertex3fv(ep[6][4]); - glNormal3fv(en[5][5]); glVertex3fv(ep[5][5]); - glNormal3fv(en[6][5]); glVertex3fv(ep[6][5]); - glNormal3fv(en[5][6]); glVertex3fv(ep[5][6]); - glNormal3fv(en[6][6]); glVertex3fv(ep[6][6]); - glNormal3fv(en[5][7]); glVertex3fv(ep[5][7]); - glNormal3fv(en[6][7]); glVertex3fv(ep[6][7]); - glNormal3fv(en[5][8]); glVertex3fv(ep[5][8]); - glNormal3fv(en[6][8]); glVertex3fv(ep[6][8]); - glEnd(); -} - -static void bend_forward(void) { - - glTranslatef(0.0, 1.000000, 0.0); - glRotatef (0.1 * (900), 1.0, 0.0, 0.0); - glTranslatef(0.0, -1.000000, 0.0); -} - -static void bend_left(void) { - glRotatef (0.1 * (-900), 0.0, 0.0, 1.0); - glTranslatef(0.0, 1.000000, 0.0); - glRotatef (0.1 * (900), 1.0, 0.0, 0.0); - glTranslatef(0.0, -1.000000, 0.0); -} - -static void bend_right(void) { - glRotatef (0.1 * (900), 0.0, 0.0, 1.0); - glTranslatef(0.0, 1.000000, 0.0); - glRotatef (0.1 * (900), 1.0, 0.0, 0.0); - glTranslatef(0.0, -1.000000, 0.0); -} - -void draw_logo(void) { - - glCallList( MAT_LOGO); - - glTranslatef(5.500000, -3.500000, 4.500000); - - glTranslatef(0.0, 0.0, -7.000000); - draw_double_cylinder(); - bend_forward(); - draw_elbow(); - glTranslatef(0.0, 0.0, -7.000000); - draw_double_cylinder(); - bend_forward(); - draw_elbow(); - glTranslatef(0.0, 0.0, -5.000000); - draw_single_cylinder(); - bend_right(); - draw_elbow(); - glTranslatef(0.0, 0.0, -7.000000); - draw_double_cylinder(); - bend_forward(); - draw_elbow(); - glTranslatef(0.0, 0.0, -7.000000); - draw_double_cylinder(); - bend_forward(); - draw_elbow(); - glTranslatef(0.0, 0.0, -5.000000); - draw_single_cylinder(); - bend_left(); - draw_elbow(); - glTranslatef(0.0, 0.0, -7.000000); - draw_double_cylinder(); - bend_forward(); - draw_elbow(); - glTranslatef(0.0, 0.0, -7.000000); - draw_double_cylinder(); - bend_forward(); - draw_elbow(); - glTranslatef(0.0, 0.0, -5.000000); - draw_single_cylinder(); - bend_right(); - draw_elbow(); - glTranslatef(0.0, 0.0, -7.000000); - draw_double_cylinder(); - bend_forward(); - draw_elbow(); - glTranslatef(0.0, 0.0, -7.000000); - draw_double_cylinder(); - bend_forward(); - draw_elbow(); - glTranslatef(0.0, 0.0, -5.000000); - draw_single_cylinder(); - bend_left(); - draw_elbow(); - glTranslatef(0.0, 0.0, -7.000000); - draw_double_cylinder(); - bend_forward(); - draw_elbow(); - glTranslatef(0.0, 0.0, -7.000000); - draw_double_cylinder(); - bend_forward(); - draw_elbow(); - glTranslatef(0.0, 0.0, -5.000000); - draw_single_cylinder(); - bend_right(); - draw_elbow(); - glTranslatef(0.0, 0.0, -7.000000); - draw_double_cylinder(); - bend_forward(); - draw_elbow(); - glTranslatef(0.0, 0.0, -7.000000); - draw_double_cylinder(); - bend_forward(); - draw_elbow(); - glTranslatef(0.0, 0.0, -5.000000); - draw_single_cylinder(); - bend_left(); - draw_elbow(); - - glDisable(GL_NORMALIZE); -} - diff --git a/lib/glut-3.7.6/progs/demos/ideas/draw_logo_line.c b/lib/glut-3.7.6/progs/demos/ideas/draw_logo_line.c deleted file mode 100644 index 906a21733..000000000 --- a/lib/glut-3.7.6/progs/demos/ideas/draw_logo_line.c +++ /dev/null @@ -1,378 +0,0 @@ -/* - * (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 - -#include "objects.h" - -float scp[14][3] = { - {1.000000, 0.000000, 0.000000}, {1.000000, 0.000000, 5.000000}, - {0.500000, 0.866025, 0.000000}, {0.500000, 0.866025, 5.000000}, - {-0.500000, 0.866025, 0.000000}, {-0.500000, 0.866025, 5.000000}, - {-1.000000, 0.000000, 0.000000}, {-1.000000, 0.000000, 5.000000}, - {-0.500000, -0.866025, 0.000000}, {-0.500000, -0.866025, 5.000000}, - {0.500000, -0.866025, 0.000000}, {0.500000, -0.866025, 5.000000}, - {1.000000, 0.000000, 0.000000}, {1.000000, 0.000000, 5.000000}, -}; - -float dcp[14][3] = { - {1.000000, 0.000000, 0.000000}, {1.000000, 0.000000, 7.000000}, - {0.500000, 0.866025, 0.000000}, {0.500000, 0.866025, 7.000000}, - {-0.500000, 0.866025, 0.000000}, {-0.500000, 0.866025, 7.000000}, - {-1.000000, 0.000000, 0.000000}, {-1.000000, 0.000000, 7.000000}, - {-0.500000, -0.866025, 0.000000}, {-0.500000, -0.866025, 7.000000}, - {0.500000, -0.866025, 0.000000}, {0.500000, -0.866025, 7.000000}, - {1.000000, 0.000000, 0.000000}, {1.000000, 0.000000, 7.000000}, -}; - -float ep[7][7][3] = { - { - {1.000000, 0.000000, 0.000000}, - {0.500000, 0.866025, 0.000000}, - {-0.500000, 0.866025, 0.000000}, - {-1.000000, 0.000000, 0.000000}, - {-0.500000, -0.866025, 0.000000}, - {0.500000, -0.866025, 0.000000}, - {1.000000, 0.000000, 0.000000}, - }, - - { - {1.000000, 0.034074, 0.258819}, - {0.500000, 0.870590, 0.034675}, - {-0.500000, 0.870590, 0.034675}, - {-1.000000, 0.034074, 0.258819}, - {-0.500000, -0.802442, 0.482963}, - {0.500000, -0.802442, 0.482963}, - {1.000000, 0.034074, 0.258819}, - }, - - { - {1.000000, 0.133975, 0.500000}, - {0.500000, 0.883975, 0.066987}, - {-0.500000, 0.883975, 0.066987}, - {-1.000000, 0.133975, 0.500000}, - {-0.500000, -0.616025, 0.933013}, - {0.500000, -0.616025, 0.933013}, - {1.000000, 0.133975, 0.500000}, - }, - - { - {1.000000, 0.292893, 0.707107}, - {0.500000, 0.905266, 0.094734}, - {-0.500000, 0.905266, 0.094734}, - {-1.000000, 0.292893, 0.707107}, - {-0.500000, -0.319479, 1.319479}, - {0.500000, -0.319479, 1.319479}, - {1.000000, 0.292893, 0.707107}, - }, - - { - {1.000000, 0.500000, 0.866025}, - {0.500000, 0.933013, 0.116025}, - {-0.500000, 0.933013, 0.116025}, - {-1.000000, 0.500000, 0.866025}, - {-0.500000, 0.066987, 1.616025}, - {0.500000, 0.066987, 1.616025}, - {1.000000, 0.500000, 0.866025}, - }, - - { - {1.000000, 0.741181, 0.965926}, - {0.500000, 0.965325, 0.129410}, - {-0.500000, 0.965325, 0.129410}, - {-1.000000, 0.741181, 0.965926}, - {-0.500000, 0.517037, 1.802442}, - {0.500000, 0.517037, 1.802442}, - {1.000000, 0.741181, 0.965926}, - }, - - { - {1.000000, 1.000000, 1.000000}, - {0.500000, 1.000000, 0.133975}, - {-0.500000, 1.000000, 0.133975}, - {-1.000000, 1.000000, 1.000000}, - {-0.500000, 1.000000, 1.866025}, - {0.500000, 1.000000, 1.866025}, - {1.000000, 1.000000, 1.000000}, - }, - -}; - -void draw_single_cylinder(void) { - - glBegin(GL_LINE_STRIP); -glVertex3fv(scp[0]); -glVertex3fv(scp[1]); -glVertex3fv(scp[2]); -glVertex3fv(scp[3]); -glVertex3fv(scp[4]); -glVertex3fv(scp[5]); -glVertex3fv(scp[6]); -glVertex3fv(scp[7]); -glVertex3fv(scp[8]); -glVertex3fv(scp[9]); -glVertex3fv(scp[10]); -glVertex3fv(scp[11]); -glVertex3fv(scp[12]); -glVertex3fv(scp[13]); - glEnd(); -} - -void draw_double_cylinder(void) { - - glBegin(GL_LINE_STRIP); -glVertex3fv(dcp[0]); -glVertex3fv(dcp[1]); -glVertex3fv(dcp[2]); -glVertex3fv(dcp[3]); -glVertex3fv(dcp[4]); -glVertex3fv(dcp[5]); -glVertex3fv(dcp[6]); -glVertex3fv(dcp[7]); -glVertex3fv(dcp[8]); -glVertex3fv(dcp[9]); -glVertex3fv(dcp[10]); -glVertex3fv(dcp[11]); -glVertex3fv(dcp[12]); -glVertex3fv(dcp[13]); - glEnd(); -} - -void draw_elbow(void) { - - glBegin(GL_LINE_STRIP); - glVertex3fv(ep[0][0]); - glVertex3fv(ep[1][0]); - glVertex3fv(ep[0][1]); - glVertex3fv(ep[1][1]); - glVertex3fv(ep[0][2]); - glVertex3fv(ep[1][2]); - glVertex3fv(ep[0][3]); - glVertex3fv(ep[1][3]); - glVertex3fv(ep[0][4]); - glVertex3fv(ep[1][4]); - glVertex3fv(ep[0][5]); - glVertex3fv(ep[1][5]); - glVertex3fv(ep[0][6]); - glVertex3fv(ep[1][6]); - glEnd(); - - glBegin(GL_LINE_STRIP); - glVertex3fv(ep[1][0]); - glVertex3fv(ep[2][0]); - glVertex3fv(ep[1][1]); - glVertex3fv(ep[2][1]); - glVertex3fv(ep[1][2]); - glVertex3fv(ep[2][2]); - glVertex3fv(ep[1][3]); - glVertex3fv(ep[2][3]); - glVertex3fv(ep[1][4]); - glVertex3fv(ep[2][4]); - glVertex3fv(ep[1][5]); - glVertex3fv(ep[2][5]); - glVertex3fv(ep[1][6]); - glVertex3fv(ep[2][6]); - glEnd(); - - glBegin(GL_LINE_STRIP); - glVertex3fv(ep[2][0]); - glVertex3fv(ep[3][0]); - glVertex3fv(ep[2][1]); - glVertex3fv(ep[3][1]); - glVertex3fv(ep[2][2]); - glVertex3fv(ep[3][2]); - glVertex3fv(ep[2][3]); - glVertex3fv(ep[3][3]); - glVertex3fv(ep[2][4]); - glVertex3fv(ep[3][4]); - glVertex3fv(ep[2][5]); - glVertex3fv(ep[3][5]); - glVertex3fv(ep[2][6]); - glVertex3fv(ep[3][6]); - glEnd(); - - glBegin(GL_LINE_STRIP); - glVertex3fv(ep[3][0]); - glVertex3fv(ep[4][0]); - glVertex3fv(ep[3][1]); - glVertex3fv(ep[4][1]); - glVertex3fv(ep[3][2]); - glVertex3fv(ep[4][2]); - glVertex3fv(ep[3][3]); - glVertex3fv(ep[4][3]); - glVertex3fv(ep[3][4]); - glVertex3fv(ep[4][4]); - glVertex3fv(ep[3][5]); - glVertex3fv(ep[4][5]); - glVertex3fv(ep[3][6]); - glVertex3fv(ep[4][6]); - glEnd(); - - glBegin(GL_LINE_STRIP); - glVertex3fv(ep[4][0]); - glVertex3fv(ep[5][0]); - glVertex3fv(ep[4][1]); - glVertex3fv(ep[5][1]); - glVertex3fv(ep[4][2]); - glVertex3fv(ep[5][2]); - glVertex3fv(ep[4][3]); - glVertex3fv(ep[5][3]); - glVertex3fv(ep[4][4]); - glVertex3fv(ep[5][4]); - glVertex3fv(ep[4][5]); - glVertex3fv(ep[5][5]); - glVertex3fv(ep[4][6]); - glVertex3fv(ep[5][6]); - glEnd(); - - glBegin(GL_LINE_STRIP); - glVertex3fv(ep[5][0]); - glVertex3fv(ep[6][0]); - glVertex3fv(ep[5][1]); - glVertex3fv(ep[6][1]); - glVertex3fv(ep[5][2]); - glVertex3fv(ep[6][2]); - glVertex3fv(ep[5][3]); - glVertex3fv(ep[6][3]); - glVertex3fv(ep[5][4]); - glVertex3fv(ep[6][4]); - glVertex3fv(ep[5][5]); - glVertex3fv(ep[6][5]); - glVertex3fv(ep[5][6]); - glVertex3fv(ep[6][6]); - glEnd(); -} - -void bend_forward(void) { - glTranslatef(0.0, 1.000000, 0.0); - glRotatef (0.1 * (900), 1.0, 0.0, 0.0); - glTranslatef(0.0, -1.000000, 0.0); -} - -void bend_left(void) { - glRotatef (0.1 * (-900), 0.0, 0.0, 1.0); - glTranslatef(0.0, 1.000000, 0.0); - glRotatef (0.1 * (900), 1.0, 0.0, 0.0); - glTranslatef(0.0, -1.000000, 0.0); -} - -void bend_right(void) { - glRotatef (0.1 * (900), 0.0, 0.0, 1.0); - glTranslatef(0.0, 1.000000, 0.0); - glRotatef (0.1 * (900), 1.0, 0.0, 0.0); - glTranslatef(0.0, -1.000000, 0.0); -} - -void draw_logo_line(void) { - - glCallList( MAT_LOGO); - - glTranslatef(5.500000, -3.500000, 4.500000); - - glTranslatef(0.0, 0.0, -7.000000); - draw_double_cylinder(); - bend_forward(); - draw_elbow(); - glTranslatef(0.0, 0.0, -7.000000); - draw_double_cylinder(); - bend_forward(); - draw_elbow(); - glTranslatef(0.0, 0.0, -5.000000); - draw_single_cylinder(); - bend_right(); - draw_elbow(); - glTranslatef(0.0, 0.0, -7.000000); - draw_double_cylinder(); - bend_forward(); - draw_elbow(); - glTranslatef(0.0, 0.0, -7.000000); - draw_double_cylinder(); - bend_forward(); - draw_elbow(); - glTranslatef(0.0, 0.0, -5.000000); - draw_single_cylinder(); - bend_left(); - draw_elbow(); - glTranslatef(0.0, 0.0, -7.000000); - draw_double_cylinder(); - bend_forward(); - draw_elbow(); - glTranslatef(0.0, 0.0, -7.000000); - draw_double_cylinder(); - bend_forward(); - draw_elbow(); - glTranslatef(0.0, 0.0, -5.000000); - draw_single_cylinder(); - bend_right(); - draw_elbow(); - glTranslatef(0.0, 0.0, -7.000000); - draw_double_cylinder(); - bend_forward(); - draw_elbow(); - glTranslatef(0.0, 0.0, -7.000000); - draw_double_cylinder(); - bend_forward(); - draw_elbow(); - glTranslatef(0.0, 0.0, -5.000000); - draw_single_cylinder(); - bend_left(); - draw_elbow(); - glTranslatef(0.0, 0.0, -7.000000); - draw_double_cylinder(); - bend_forward(); - draw_elbow(); - glTranslatef(0.0, 0.0, -7.000000); - draw_double_cylinder(); - bend_forward(); - draw_elbow(); - glTranslatef(0.0, 0.0, -5.000000); - draw_single_cylinder(); - bend_right(); - draw_elbow(); - glTranslatef(0.0, 0.0, -7.000000); - draw_double_cylinder(); - bend_forward(); - draw_elbow(); - glTranslatef(0.0, 0.0, -7.000000); - draw_double_cylinder(); - bend_forward(); - draw_elbow(); - glTranslatef(0.0, 0.0, -5.000000); - draw_single_cylinder(); - bend_left(); - draw_elbow(); -} - diff --git a/lib/glut-3.7.6/progs/demos/ideas/draw_logo_shadow.c b/lib/glut-3.7.6/progs/demos/ideas/draw_logo_shadow.c deleted file mode 100644 index 976da3085..000000000 --- a/lib/glut-3.7.6/progs/demos/ideas/draw_logo_shadow.c +++ /dev/null @@ -1,488 +0,0 @@ -/* - * (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 - -#include "objects.h" - -static float scp[18][3] = { - {1.000000, 0.000000, 0.000000}, {1.000000, 0.000000, 5.000000}, - {0.707107, 0.707107, 0.000000}, {0.707107, 0.707107, 5.000000}, - {0.000000, 1.000000, 0.000000}, {0.000000, 1.000000, 5.000000}, - {-0.707107, 0.707107, 0.000000}, {-0.707107, 0.707107, 5.000000}, - {-1.000000, 0.000000, 0.000000}, {-1.000000, 0.000000, 5.000000}, - {-0.707107, -0.707107, 0.000000}, {-0.707107, -0.707107, 5.000000}, - {0.000000, -1.000000, 0.000000}, {0.000000, -1.000000, 5.000000}, - {0.707107, -0.707107, 0.000000}, {0.707107, -0.707107, 5.000000}, - {1.000000, 0.000000, 0.000000}, {1.000000, 0.000000, 5.000000}, -}; - -static float dcp[18][3] = { - {1.000000, 0.000000, 0.000000}, {1.000000, 0.000000, 7.000000}, - {0.707107, 0.707107, 0.000000}, {0.707107, 0.707107, 7.000000}, - {0.000000, 1.000000, 0.000000}, {0.000000, 1.000000, 7.000000}, - {-0.707107, 0.707107, 0.000000}, {-0.707107, 0.707107, 7.000000}, - {-1.000000, 0.000000, 0.000000}, {-1.000000, 0.000000, 7.000000}, - {-0.707107, -0.707107, 0.000000}, {-0.707107, -0.707107, 7.000000}, - {0.000000, -1.000000, 0.000000}, {0.000000, -1.000000, 7.000000}, - {0.707107, -0.707107, 0.000000}, {0.707107, -0.707107, 7.000000}, - {1.000000, 0.000000, 0.000000}, {1.000000, 0.000000, 7.000000}, -}; - -static float ep[9][9][3] = { - { - {1.000000, 0.000000, 0.000000}, - {0.707107, 0.707107, 0.000000}, - {0.000000, 1.000000, 0.000000}, - {-0.707107, 0.707107, 0.000000}, - {-1.000000, 0.000000, 0.000000}, - {-0.707107, -0.707107, 0.000000}, - {0.000000, -1.000000, 0.000000}, - {0.707107, -0.707107, 0.000000}, - {1.000000, 0.000000, 0.000000}, - }, - - { - {1.000000, 0.019215, 0.195090}, - {0.707107, 0.712735, 0.057141}, - {0.000000, 1.000000, 0.000000}, - {-0.707107, 0.712735, 0.057141}, - {-1.000000, 0.019215, 0.195090}, - {-0.707107, -0.674305, 0.333040}, - {0.000000, -0.961571, 0.390181}, - {0.707107, -0.674305, 0.333040}, - {1.000000, 0.019215, 0.195090}, - }, - - { - {1.000000, 0.076120, 0.382683}, - {0.707107, 0.729402, 0.112085}, - {0.000000, 1.000000, 0.000000}, - {-0.707107, 0.729402, 0.112085}, - {-1.000000, 0.076120, 0.382683}, - {-0.707107, -0.577161, 0.653282}, - {0.000000, -0.847759, 0.765367}, - {0.707107, -0.577161, 0.653282}, - {1.000000, 0.076120, 0.382683}, - }, - - { - {1.000000, 0.168530, 0.555570}, - {0.707107, 0.756468, 0.162723}, - {0.000000, 1.000000, 0.000000}, - {-0.707107, 0.756468, 0.162723}, - {-1.000000, 0.168530, 0.555570}, - {-0.707107, -0.419407, 0.948418}, - {0.000000, -0.662939, 1.111140}, - {0.707107, -0.419407, 0.948418}, - {1.000000, 0.168530, 0.555570}, - }, - - { - {1.000000, 0.292893, 0.707107}, - {0.707107, 0.792893, 0.207107}, - {0.000000, 1.000000, 0.000000}, - {-0.707107, 0.792893, 0.207107}, - {-1.000000, 0.292893, 0.707107}, - {-0.707107, -0.207107, 1.207107}, - {0.000000, -0.414214, 1.414214}, - {0.707107, -0.207107, 1.207107}, - {1.000000, 0.292893, 0.707107}, - }, - - { - {1.000000, 0.444430, 0.831470}, - {0.707107, 0.837277, 0.243532}, - {0.000000, 1.000000, 0.000000}, - {-0.707107, 0.837277, 0.243532}, - {-1.000000, 0.444430, 0.831470}, - {-0.707107, 0.051582, 1.419407}, - {0.000000, -0.111140, 1.662939}, - {0.707107, 0.051582, 1.419407}, - {1.000000, 0.444430, 0.831470}, - }, - - { - {1.000000, 0.617317, 0.923880}, - {0.707107, 0.887915, 0.270598}, - {0.000000, 1.000000, 0.000000}, - {-0.707107, 0.887915, 0.270598}, - {-1.000000, 0.617317, 0.923880}, - {-0.707107, 0.346719, 1.577161}, - {0.000000, 0.234633, 1.847759}, - {0.707107, 0.346719, 1.577161}, - {1.000000, 0.617317, 0.923880}, - }, - - { - {1.000000, 0.804910, 0.980785}, - {0.707107, 0.942859, 0.287265}, - {0.000000, 1.000000, 0.000000}, - {-0.707107, 0.942859, 0.287265}, - {-1.000000, 0.804910, 0.980785}, - {-0.707107, 0.666960, 1.674305}, - {0.000000, 0.609819, 1.961571}, - {0.707107, 0.666960, 1.674305}, - {1.000000, 0.804910, 0.980785}, - }, - - { - {1.000000, 1.000000, 1.000000}, - {0.707107, 1.000000, 0.292893}, - {0.000000, 1.000000, 0.000000}, - {-0.707107, 1.000000, 0.292893}, - {-1.000000, 1.000000, 1.000000}, - {-0.707107, 1.000000, 1.707107}, - {0.000000, 1.000000, 2.000000}, - {0.707107, 1.000000, 1.707107}, - {1.000000, 1.000000, 1.000000}, - }, - -}; - -static void draw_single_cylinder(void) { - - glBegin(GL_TRIANGLE_STRIP); - glVertex3fv(scp[0]); - glVertex3fv(scp[1]); - glVertex3fv(scp[2]); - glVertex3fv(scp[3]); - glVertex3fv(scp[4]); - glVertex3fv(scp[5]); - glVertex3fv(scp[6]); - glVertex3fv(scp[7]); - glVertex3fv(scp[8]); - glVertex3fv(scp[9]); - glVertex3fv(scp[10]); - glVertex3fv(scp[11]); - glVertex3fv(scp[12]); - glVertex3fv(scp[13]); - glVertex3fv(scp[14]); - glVertex3fv(scp[15]); - glVertex3fv(scp[16]); - glVertex3fv(scp[17]); - glEnd(); -} - -static void draw_double_cylinder(void) { - - glBegin(GL_TRIANGLE_STRIP); - glVertex3fv(dcp[0]); - glVertex3fv(dcp[1]); - glVertex3fv(dcp[2]); - glVertex3fv(dcp[3]); - glVertex3fv(dcp[4]); - glVertex3fv(dcp[5]); - glVertex3fv(dcp[6]); - glVertex3fv(dcp[7]); - glVertex3fv(dcp[8]); - glVertex3fv(dcp[9]); - glVertex3fv(dcp[10]); - glVertex3fv(dcp[11]); - glVertex3fv(dcp[12]); - glVertex3fv(dcp[13]); - glVertex3fv(dcp[14]); - glVertex3fv(dcp[15]); - glVertex3fv(dcp[16]); - glVertex3fv(dcp[17]); - glEnd(); -} - -static void draw_elbow(void) { - - glBegin(GL_TRIANGLE_STRIP); - glVertex3fv(ep[0][0]); - glVertex3fv(ep[1][0]); - glVertex3fv(ep[0][1]); - glVertex3fv(ep[1][1]); - glVertex3fv(ep[0][2]); - glVertex3fv(ep[1][2]); - glVertex3fv(ep[0][3]); - glVertex3fv(ep[1][3]); - glVertex3fv(ep[0][4]); - glVertex3fv(ep[1][4]); - glVertex3fv(ep[0][5]); - glVertex3fv(ep[1][5]); - glVertex3fv(ep[0][6]); - glVertex3fv(ep[1][6]); - glVertex3fv(ep[0][7]); - glVertex3fv(ep[1][7]); - glVertex3fv(ep[0][8]); - glVertex3fv(ep[1][8]); - glEnd(); - glBegin(GL_TRIANGLE_STRIP); - glVertex3fv(ep[1][0]); - glVertex3fv(ep[2][0]); - glVertex3fv(ep[1][1]); - glVertex3fv(ep[2][1]); - glVertex3fv(ep[1][2]); - glVertex3fv(ep[2][2]); - glVertex3fv(ep[1][3]); - glVertex3fv(ep[2][3]); - glVertex3fv(ep[1][4]); - glVertex3fv(ep[2][4]); - glVertex3fv(ep[1][5]); - glVertex3fv(ep[2][5]); - glVertex3fv(ep[1][6]); - glVertex3fv(ep[2][6]); - glVertex3fv(ep[1][7]); - glVertex3fv(ep[2][7]); - glVertex3fv(ep[1][8]); - glVertex3fv(ep[2][8]); - glEnd(); - glBegin(GL_TRIANGLE_STRIP); - glVertex3fv(ep[2][0]); - glVertex3fv(ep[3][0]); - glVertex3fv(ep[2][1]); - glVertex3fv(ep[3][1]); - glVertex3fv(ep[2][2]); - glVertex3fv(ep[3][2]); - glVertex3fv(ep[2][3]); - glVertex3fv(ep[3][3]); - glVertex3fv(ep[2][4]); - glVertex3fv(ep[3][4]); - glVertex3fv(ep[2][5]); - glVertex3fv(ep[3][5]); - glVertex3fv(ep[2][6]); - glVertex3fv(ep[3][6]); - glVertex3fv(ep[2][7]); - glVertex3fv(ep[3][7]); - glVertex3fv(ep[2][8]); - glVertex3fv(ep[3][8]); - glEnd(); - glBegin(GL_TRIANGLE_STRIP); - glVertex3fv(ep[3][0]); - glVertex3fv(ep[4][0]); - glVertex3fv(ep[3][1]); - glVertex3fv(ep[4][1]); - glVertex3fv(ep[3][2]); - glVertex3fv(ep[4][2]); - glVertex3fv(ep[3][3]); - glVertex3fv(ep[4][3]); - glVertex3fv(ep[3][4]); - glVertex3fv(ep[4][4]); - glVertex3fv(ep[3][5]); - glVertex3fv(ep[4][5]); - glVertex3fv(ep[3][6]); - glVertex3fv(ep[4][6]); - glVertex3fv(ep[3][7]); - glVertex3fv(ep[4][7]); - glVertex3fv(ep[3][8]); - glVertex3fv(ep[4][8]); - glEnd(); - glBegin(GL_TRIANGLE_STRIP); - glVertex3fv(ep[4][0]); - glVertex3fv(ep[5][0]); - glVertex3fv(ep[4][1]); - glVertex3fv(ep[5][1]); - glVertex3fv(ep[4][2]); - glVertex3fv(ep[5][2]); - glVertex3fv(ep[4][3]); - glVertex3fv(ep[5][3]); - glVertex3fv(ep[4][4]); - glVertex3fv(ep[5][4]); - glVertex3fv(ep[4][5]); - glVertex3fv(ep[5][5]); - glVertex3fv(ep[4][6]); - glVertex3fv(ep[5][6]); - glVertex3fv(ep[4][7]); - glVertex3fv(ep[5][7]); - glVertex3fv(ep[4][8]); - glVertex3fv(ep[5][8]); - glEnd(); - glBegin(GL_TRIANGLE_STRIP); - glVertex3fv(ep[5][0]); - glVertex3fv(ep[6][0]); - glVertex3fv(ep[5][1]); - glVertex3fv(ep[6][1]); - glVertex3fv(ep[5][2]); - glVertex3fv(ep[6][2]); - glVertex3fv(ep[5][3]); - glVertex3fv(ep[6][3]); - glVertex3fv(ep[5][4]); - glVertex3fv(ep[6][4]); - glVertex3fv(ep[5][5]); - glVertex3fv(ep[6][5]); - glVertex3fv(ep[5][6]); - glVertex3fv(ep[6][6]); - glVertex3fv(ep[5][7]); - glVertex3fv(ep[6][7]); - glVertex3fv(ep[5][8]); - glVertex3fv(ep[6][8]); - glEnd(); - glBegin(GL_TRIANGLE_STRIP); - glVertex3fv(ep[6][0]); - glVertex3fv(ep[7][0]); - glVertex3fv(ep[6][1]); - glVertex3fv(ep[7][1]); - glVertex3fv(ep[6][2]); - glVertex3fv(ep[7][2]); - glVertex3fv(ep[6][3]); - glVertex3fv(ep[7][3]); - glVertex3fv(ep[6][4]); - glVertex3fv(ep[7][4]); - glVertex3fv(ep[6][5]); - glVertex3fv(ep[7][5]); - glVertex3fv(ep[6][6]); - glVertex3fv(ep[7][6]); - glVertex3fv(ep[6][7]); - glVertex3fv(ep[7][7]); - glVertex3fv(ep[6][8]); - glVertex3fv(ep[7][8]); - glEnd(); - glBegin(GL_TRIANGLE_STRIP); - glVertex3fv(ep[7][0]); - glVertex3fv(ep[8][0]); - glVertex3fv(ep[7][1]); - glVertex3fv(ep[8][1]); - glVertex3fv(ep[7][2]); - glVertex3fv(ep[8][2]); - glVertex3fv(ep[7][3]); - glVertex3fv(ep[8][3]); - glVertex3fv(ep[7][4]); - glVertex3fv(ep[8][4]); - glVertex3fv(ep[7][5]); - glVertex3fv(ep[8][5]); - glVertex3fv(ep[7][6]); - glVertex3fv(ep[8][6]); - glVertex3fv(ep[7][7]); - glVertex3fv(ep[8][7]); - glVertex3fv(ep[7][8]); - glVertex3fv(ep[8][8]); - glEnd(); -} - -static void bend_forward(void) { - - glTranslatef(0.0, 1.000000, 0.0); - glRotatef (0.1 * (900), 1.0, 0.0, 0.0); - glTranslatef(0.0, -1.000000, 0.0); -} - -static void bend_left(void) { - - glRotatef (0.1 * (-900), 0.0, 0.0, 1.0); - glTranslatef(0.0, 1.000000, 0.0); - glRotatef (0.1 * (900), 1.0, 0.0, 0.0); - glTranslatef(0.0, -1.000000, 0.0); -} - -static void bend_right(void) { - - glRotatef (0.1 * (900), 0.0, 0.0, 1.0); - glTranslatef(0.0, 1.000000, 0.0); - glRotatef (0.1 * (900), 1.0, 0.0, 0.0); - glTranslatef(0.0, -1.000000, 0.0); -} - -void draw_logo_shadow(void) { - - glTranslatef(5.500000, -3.500000, 4.500000); - - glTranslatef(0.0, 0.0, -7.000000); - draw_double_cylinder(); - bend_forward(); - draw_elbow(); - glTranslatef(0.0, 0.0, -7.000000); - draw_double_cylinder(); - bend_forward(); - draw_elbow(); - glTranslatef(0.0, 0.0, -5.000000); - draw_single_cylinder(); - bend_right(); - draw_elbow(); - glTranslatef(0.0, 0.0, -7.000000); - draw_double_cylinder(); - bend_forward(); - draw_elbow(); - glTranslatef(0.0, 0.0, -7.000000); - draw_double_cylinder(); - bend_forward(); - draw_elbow(); - glTranslatef(0.0, 0.0, -5.000000); - draw_single_cylinder(); - bend_left(); - draw_elbow(); - glTranslatef(0.0, 0.0, -7.000000); - draw_double_cylinder(); - bend_forward(); - draw_elbow(); - glTranslatef(0.0, 0.0, -7.000000); - draw_double_cylinder(); - bend_forward(); - draw_elbow(); - glTranslatef(0.0, 0.0, -5.000000); - draw_single_cylinder(); - bend_right(); - draw_elbow(); - glTranslatef(0.0, 0.0, -7.000000); - draw_double_cylinder(); - bend_forward(); - draw_elbow(); - glTranslatef(0.0, 0.0, -7.000000); - draw_double_cylinder(); - bend_forward(); - draw_elbow(); - glTranslatef(0.0, 0.0, -5.000000); - draw_single_cylinder(); - bend_left(); - draw_elbow(); - glTranslatef(0.0, 0.0, -7.000000); - draw_double_cylinder(); - bend_forward(); - draw_elbow(); - glTranslatef(0.0, 0.0, -7.000000); - draw_double_cylinder(); - bend_forward(); - draw_elbow(); - glTranslatef(0.0, 0.0, -5.000000); - draw_single_cylinder(); - bend_right(); - draw_elbow(); - glTranslatef(0.0, 0.0, -7.000000); - draw_double_cylinder(); - bend_forward(); - draw_elbow(); - glTranslatef(0.0, 0.0, -7.000000); - draw_double_cylinder(); - bend_forward(); - draw_elbow(); - glTranslatef(0.0, 0.0, -5.000000); - draw_single_cylinder(); - bend_left(); - draw_elbow(); -} - diff --git a/lib/glut-3.7.6/progs/demos/ideas/e.c b/lib/glut-3.7.6/progs/demos/ideas/e.c deleted file mode 100644 index 9f6b667e6..000000000 --- a/lib/glut-3.7.6/progs/demos/ideas/e.c +++ /dev/null @@ -1,151 +0,0 @@ -/* - * (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 - -float e_data[][2] = { - {1.095436, 6.190871}, - {2.107884, 6.970954}, - {2.556017, 7.020747}, - {3.020747, 7.867220}, - {3.518672, 8.033195}, - {3.269710, 8.531120}, - {4.165975, 8.929461}, - {3.302905, 9.062241}, - {4.331950, 9.626556}, - {3.286307, 9.344398}, - {4.116183, 9.958507}, - {3.004149, 9.510373}, - {3.518672, 9.991701}, - {2.705394, 9.493776}, - {2.091286, 9.311203}, - {2.041494, 9.062241}, - {1.178423, 8.514523}, - {1.443983, 8.165976}, - {0.481328, 7.535270}, - {1.045643, 6.904564}, - {0.149378, 6.091286}, - {1.095436, 5.410789}, - {0.464730, 4.232365}, - {1.377593, 4.497925}, - {1.261411, 3.136930}, - {1.925311, 3.950207}, - {2.240664, 3.037344}, - {2.589212, 3.834025}, - {3.087137, 3.269710}, - {3.236515, 3.867220}, - {3.684647, 3.867220}, - {3.867220, 4.448133}, - {4.398340, 5.128631}, - -}; - -void draw_e(void) { - - glBegin(GL_TRIANGLE_STRIP); - glVertex2fv(e_data[0]); - glVertex2fv(e_data[1]); - glVertex2fv(e_data[2]); - glVertex2fv(e_data[3]); - glVertex2fv(e_data[4]); - glVertex2fv(e_data[5]); - glVertex2fv(e_data[6]); - glVertex2fv(e_data[7]); - glVertex2fv(e_data[8]); - glVertex2fv(e_data[9]); - glVertex2fv(e_data[10]); - glVertex2fv(e_data[11]); - glVertex2fv(e_data[12]); - glVertex2fv(e_data[13]); - glVertex2fv(e_data[14]); - glVertex2fv(e_data[15]); - glVertex2fv(e_data[16]); - glVertex2fv(e_data[17]); - glVertex2fv(e_data[18]); - glVertex2fv(e_data[19]); - glVertex2fv(e_data[20]); - glVertex2fv(e_data[21]); - glVertex2fv(e_data[22]); - glVertex2fv(e_data[23]); - glVertex2fv(e_data[24]); - glVertex2fv(e_data[25]); - glVertex2fv(e_data[26]); - glVertex2fv(e_data[27]); - glVertex2fv(e_data[28]); - glVertex2fv(e_data[29]); - glVertex2fv(e_data[30]); - glVertex2fv(e_data[31]); - glVertex2fv(e_data[32]); - glEnd(); - - glBegin(GL_LINE_STRIP); - glVertex2fv(e_data[0]); - glVertex2fv(e_data[2]); - glVertex2fv(e_data[4]); - glVertex2fv(e_data[6]); - glVertex2fv(e_data[8]); - glVertex2fv(e_data[10]); - glVertex2fv(e_data[12]); - glVertex2fv(e_data[14]); - glVertex2fv(e_data[16]); - glVertex2fv(e_data[18]); - glVertex2fv(e_data[20]); - glVertex2fv(e_data[22]); - glVertex2fv(e_data[24]); - glVertex2fv(e_data[26]); - glVertex2fv(e_data[28]); - glVertex2fv(e_data[30]); - glVertex2fv(e_data[32]); - glVertex2fv(e_data[31]); - glVertex2fv(e_data[29]); - glVertex2fv(e_data[27]); - glVertex2fv(e_data[25]); - glVertex2fv(e_data[23]); - glVertex2fv(e_data[21]); - glVertex2fv(e_data[19]); - glVertex2fv(e_data[17]); - glVertex2fv(e_data[15]); - glVertex2fv(e_data[13]); - glVertex2fv(e_data[11]); - glVertex2fv(e_data[9]); - glVertex2fv(e_data[7]); - glVertex2fv(e_data[5]); - glVertex2fv(e_data[3]); - glVertex2fv(e_data[1]); - glEnd(); - -} - diff --git a/lib/glut-3.7.6/progs/demos/ideas/f.c b/lib/glut-3.7.6/progs/demos/ideas/f.c deleted file mode 100644 index 63bb886eb..000000000 --- a/lib/glut-3.7.6/progs/demos/ideas/f.c +++ /dev/null @@ -1,175 +0,0 @@ -/* - * (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 - -float f_data[][2] = { - {0.157570-3.0, 0.105155-2.0}, - {1.820803-3.0, 0.736082-2.0}, - {2.030896-3.0, 0.525773-2.0}, - {2.731205-3.0, 1.507216-2.0}, - {2.906282-3.0, 1.139175-2.0}, - {3.378991-3.0, 2.611340-2.0}, - {4.009269-3.0, 3.014433-2.0}, - {4.429454-3.0, 5.730928-2.0}, - {5.042224-3.0, 5.783505-2.0}, - {5.269825-3.0, 10.252578-2.0}, - {6.092688-3.0, 10.708247-2.0}, - {5.917611-3.0, 12.758763-2.0}, - {6.915551-3.0, 13.635052-2.0}, - {6.565396-3.0, 14.388659-2.0}, - {7.370752-3.0, 14.686598-2.0}, - {7.003089-3.0, 15.159794-2.0}, - {7.720906-3.0, 15.300000-2.0}, - {7.633368-3.0, 15.668041-2.0}, - {8.403708-3.0, 15.930928-2.0}, - {9.401648-3.0, 16.596907-2.0}, - {9.261586-3.0, 16.211340-2.0}, - {9.874356-3.0, 16.719587-2.0}, - {10.136972-3.0, 16.228867-2.0}, - {10.469619-3.0, 16.789690-2.0}, - {10.854789-3.0, 16.228867-2.0}, - {11.064881-3.0, 16.667011-2.0}, - {11.169928-3.0, 16.369072-2.0}, - - {3.956746-3.0, 10.988660-2.0}, - {5.147271-3.0, 11.479382-2.0}, - {5.654995-3.0, 11.006186-2.0}, - {5.812564-3.0, 11.970103-2.0}, - {6.127703-3.0, 11.023711-2.0}, - {6.495366-3.0, 11.461856-2.0}, - {7.230690-3.0, 11.006186-2.0}, - {7.318229-3.0, 11.321650-2.0}, - {7.983522-3.0, 11.198969-2.0}, - {8.106076-3.0, 11.426805-2.0}, - {8.613800-3.0, 11.584537-2.0}, - -}; - -void draw_f(void) { - - glBegin(GL_TRIANGLE_STRIP); - glVertex2fv(f_data[0]); - glVertex2fv(f_data[1]); - glVertex2fv(f_data[2]); - glVertex2fv(f_data[3]); - glVertex2fv(f_data[4]); - glVertex2fv(f_data[5]); - glVertex2fv(f_data[6]); - glVertex2fv(f_data[7]); - glVertex2fv(f_data[8]); - glVertex2fv(f_data[9]); - glVertex2fv(f_data[10]); - glVertex2fv(f_data[11]); - glVertex2fv(f_data[12]); - glVertex2fv(f_data[13]); - glVertex2fv(f_data[14]); - glVertex2fv(f_data[15]); - glVertex2fv(f_data[16]); - glVertex2fv(f_data[17]); - glVertex2fv(f_data[18]); - glVertex2fv(f_data[19]); - glVertex2fv(f_data[20]); - glVertex2fv(f_data[21]); - glVertex2fv(f_data[22]); - glVertex2fv(f_data[23]); - glVertex2fv(f_data[24]); - glVertex2fv(f_data[25]); - glVertex2fv(f_data[26]); - glEnd(); - - glBegin(GL_TRIANGLE_STRIP); - glVertex2fv(f_data[27]); - glVertex2fv(f_data[28]); - glVertex2fv(f_data[29]); - glVertex2fv(f_data[30]); - glVertex2fv(f_data[31]); - glVertex2fv(f_data[32]); - glVertex2fv(f_data[33]); - glVertex2fv(f_data[34]); - glVertex2fv(f_data[35]); - glVertex2fv(f_data[36]); - glVertex2fv(f_data[37]); - glEnd(); - - glBegin(GL_LINE_STRIP); - glVertex2fv(f_data[0]); - glVertex2fv(f_data[2]); - glVertex2fv(f_data[4]); - glVertex2fv(f_data[6]); - glVertex2fv(f_data[8]); - glVertex2fv(f_data[10]); - glVertex2fv(f_data[12]); - glVertex2fv(f_data[14]); - glVertex2fv(f_data[16]); - glVertex2fv(f_data[18]); - glVertex2fv(f_data[20]); - glVertex2fv(f_data[22]); - glVertex2fv(f_data[24]); - glVertex2fv(f_data[26]); - glVertex2fv(f_data[25]); - glVertex2fv(f_data[23]); - glVertex2fv(f_data[21]); - glVertex2fv(f_data[19]); - glVertex2fv(f_data[17]); - glVertex2fv(f_data[15]); - glVertex2fv(f_data[13]); - glVertex2fv(f_data[11]); - glVertex2fv(f_data[9]); - glVertex2fv(f_data[7]); - glVertex2fv(f_data[5]); - glVertex2fv(f_data[3]); - glVertex2fv(f_data[1]); - glVertex2fv(f_data[0]); - glEnd(); - - glBegin(GL_LINE_STRIP); - glVertex2fv(f_data[27]); - glVertex2fv(f_data[29]); - glVertex2fv(f_data[31]); - glVertex2fv(f_data[33]); - glVertex2fv(f_data[35]); - glVertex2fv(f_data[37]); - glVertex2fv(f_data[36]); - glVertex2fv(f_data[34]); - glVertex2fv(f_data[32]); - glVertex2fv(f_data[30]); - glVertex2fv(f_data[28]); - glVertex2fv(f_data[27]); - glEnd(); - -} - diff --git a/lib/glut-3.7.6/progs/demos/ideas/h.c b/lib/glut-3.7.6/progs/demos/ideas/h.c deleted file mode 100644 index 07c20bc98..000000000 --- a/lib/glut-3.7.6/progs/demos/ideas/h.c +++ /dev/null @@ -1,187 +0,0 @@ -/* - * (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 - -float h_data[][2] = { - {1.462963, 17.499485-3.0}, - {3.259259, 17.851700-3.0}, - {2.074074, 17.351185-3.0}, - {3.037037, 17.073120-3.0}, - {2.277778, 17.054583-3.0}, - {2.814815, 15.775489-3.0}, - {2.018518, 14.737384-3.0}, - {2.203704, 12.142121-3.0}, - {1.296296, 10.158600-3.0}, - {1.259259, 7.674562-3.0}, - {0.666667, 6.933059-3.0}, - {0.685185, 5.728116-3.0}, - {0.314815, 5.653965-3.0}, - {0.444444, 5.227601-3.0}, - {0.074074, 5.097837-3.0}, - - {1.611111, 9.824923-3.0}, - {1.333333, 8.527291-3.0}, - {2.240741, 10.937179-3.0}, - {2.500000, 10.992791-3.0}, - {2.888889, 11.771370-3.0}, - {3.314815, 11.845520-3.0}, - {3.462963, 12.253347-3.0}, - {3.740741, 12.067971-3.0}, - {4.500000, 12.846550-3.0}, - {4.148148, 12.030896-3.0}, - {5.185185, 12.883625-3.0}, - {4.296296, 11.771370-3.0}, - {5.351852, 12.420185-3.0}, - {4.333333, 11.196705-3.0}, - {5.129630, 10.955716-3.0}, - {4.129630, 9.583934-3.0}, - {4.203704, 7.192585-3.0}, - {3.518518, 6.414006-3.0}, - {4.129630, 6.469619-3.0}, - {3.537037, 5.765191-3.0}, - {4.296296, 6.061792-3.0}, - {3.851852, 5.171988-3.0}, - {4.722222, 5.802266-3.0}, - {4.277778, 5.060762-3.0}, - {5.314815, 5.894954-3.0}, - {5.148148, 5.431514-3.0}, - {5.777778, 6.098867-3.0}, - -}; - -void draw_h(void) { - - glBegin(GL_TRIANGLE_STRIP); - glVertex2fv(h_data[0]); - glVertex2fv(h_data[1]); - glVertex2fv(h_data[2]); - glVertex2fv(h_data[3]); - glVertex2fv(h_data[4]); - glVertex2fv(h_data[5]); - glVertex2fv(h_data[6]); - glVertex2fv(h_data[7]); - glVertex2fv(h_data[8]); - glVertex2fv(h_data[9]); - glVertex2fv(h_data[10]); - glVertex2fv(h_data[11]); - glVertex2fv(h_data[12]); - glVertex2fv(h_data[13]); - glVertex2fv(h_data[14]); - glEnd(); - - glBegin(GL_TRIANGLE_STRIP); - glVertex2fv(h_data[15]); - glVertex2fv(h_data[16]); - glVertex2fv(h_data[17]); - glVertex2fv(h_data[18]); - glVertex2fv(h_data[19]); - glVertex2fv(h_data[20]); - glVertex2fv(h_data[21]); - glVertex2fv(h_data[22]); - glVertex2fv(h_data[23]); - glVertex2fv(h_data[24]); - glVertex2fv(h_data[25]); - glVertex2fv(h_data[26]); - glVertex2fv(h_data[27]); - glVertex2fv(h_data[28]); - glVertex2fv(h_data[29]); - glVertex2fv(h_data[30]); - glVertex2fv(h_data[31]); - glVertex2fv(h_data[32]); - glVertex2fv(h_data[33]); - glVertex2fv(h_data[34]); - glVertex2fv(h_data[35]); - glVertex2fv(h_data[36]); - glVertex2fv(h_data[37]); - glVertex2fv(h_data[38]); - glVertex2fv(h_data[39]); - glVertex2fv(h_data[40]); - glVertex2fv(h_data[41]); - glEnd(); - - glBegin(GL_LINE_STRIP); - glVertex2fv(h_data[0]); - glVertex2fv(h_data[2]); - glVertex2fv(h_data[4]); - glVertex2fv(h_data[6]); - glVertex2fv(h_data[8]); - glVertex2fv(h_data[10]); - glVertex2fv(h_data[12]); - glVertex2fv(h_data[14]); - glVertex2fv(h_data[13]); - glVertex2fv(h_data[11]); - glVertex2fv(h_data[9]); - glVertex2fv(h_data[7]); - glVertex2fv(h_data[5]); - glVertex2fv(h_data[3]); - glVertex2fv(h_data[1]); - glVertex2fv(h_data[0]); - glEnd(); - - glBegin(GL_LINE_STRIP); - glVertex2fv(h_data[15]); - glVertex2fv(h_data[17]); - glVertex2fv(h_data[19]); - glVertex2fv(h_data[21]); - glVertex2fv(h_data[23]); - glVertex2fv(h_data[25]); - glVertex2fv(h_data[27]); - glVertex2fv(h_data[29]); - glVertex2fv(h_data[31]); - glVertex2fv(h_data[33]); - glVertex2fv(h_data[35]); - glVertex2fv(h_data[37]); - glVertex2fv(h_data[39]); - glVertex2fv(h_data[41]); - glVertex2fv(h_data[40]); - glVertex2fv(h_data[38]); - glVertex2fv(h_data[36]); - glVertex2fv(h_data[34]); - glVertex2fv(h_data[32]); - glVertex2fv(h_data[30]); - glVertex2fv(h_data[28]); - glVertex2fv(h_data[26]); - glVertex2fv(h_data[24]); - glVertex2fv(h_data[22]); - glVertex2fv(h_data[20]); - glVertex2fv(h_data[18]); - glVertex2fv(h_data[16]); - glVertex2fv(h_data[15]); - glEnd(); - -} - diff --git a/lib/glut-3.7.6/progs/demos/ideas/i.c b/lib/glut-3.7.6/progs/demos/ideas/i.c deleted file mode 100644 index 209c2614c..000000000 --- a/lib/glut-3.7.6/progs/demos/ideas/i.c +++ /dev/null @@ -1,132 +0,0 @@ -/* - * (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 - -float i_data[][2] = { - {0.548767, 9.414791}, - {2.795284, 9.757771}, - {1.457663, 9.311897}, - {2.503751, 9.157557}, - {1.714898, 8.986067}, - {2.109325, 7.785638}, - {1.286174, 7.013934}, - {1.800643, 6.070740}, - {0.994641, 5.161843}, - {1.783494, 4.767417}, - {0.943194, 4.167202}, - {1.852090, 4.304394}, - {1.063237, 3.549839}, - {2.023580, 3.978564}, - {1.406217, 3.172562}, - {2.315113, 3.875670}, - {2.006431, 3.018221}, - {2.812433, 3.944266}, - {2.726688, 3.429796}, - {3.258307, 4.132905}, - - {1.989282, 10.923902}, - {2.778135, 12.295820}, - {2.966774, 11.678456}, - {3.687031, 12.947481}, - -}; - - -void draw_i(void) { - - glBegin(GL_TRIANGLE_STRIP); - glVertex2fv(i_data[0]); - glVertex2fv(i_data[1]); - glVertex2fv(i_data[2]); - glVertex2fv(i_data[3]); - glVertex2fv(i_data[4]); - glVertex2fv(i_data[5]); - glVertex2fv(i_data[6]); - glVertex2fv(i_data[7]); - glVertex2fv(i_data[8]); - glVertex2fv(i_data[9]); - glVertex2fv(i_data[10]); - glVertex2fv(i_data[11]); - glVertex2fv(i_data[12]); - glVertex2fv(i_data[13]); - glVertex2fv(i_data[14]); - glVertex2fv(i_data[15]); - glVertex2fv(i_data[16]); - glVertex2fv(i_data[17]); - glVertex2fv(i_data[18]); - glVertex2fv(i_data[19]); - glEnd(); - - glBegin(GL_TRIANGLE_STRIP); - glVertex2fv(i_data[20]); - glVertex2fv(i_data[21]); - glVertex2fv(i_data[22]); - glVertex2fv(i_data[23]); - glEnd(); - - glBegin(GL_LINE_STRIP); - glVertex2fv(i_data[0]); - glVertex2fv(i_data[2]); - glVertex2fv(i_data[4]); - glVertex2fv(i_data[6]); - glVertex2fv(i_data[8]); - glVertex2fv(i_data[10]); - glVertex2fv(i_data[12]); - glVertex2fv(i_data[14]); - glVertex2fv(i_data[16]); - glVertex2fv(i_data[18]); - glVertex2fv(i_data[19]); - glVertex2fv(i_data[17]); - glVertex2fv(i_data[15]); - glVertex2fv(i_data[13]); - glVertex2fv(i_data[11]); - glVertex2fv(i_data[9]); - glVertex2fv(i_data[7]); - glVertex2fv(i_data[5]); - glVertex2fv(i_data[3]); - glVertex2fv(i_data[1]); - glEnd(); - - glBegin(GL_LINE_STRIP); - glVertex2fv(i_data[20]); - glVertex2fv(i_data[22]); - glVertex2fv(i_data[23]); - glVertex2fv(i_data[21]); - glEnd(); - -} - diff --git a/lib/glut-3.7.6/progs/demos/ideas/ideas.c b/lib/glut-3.7.6/progs/demos/ideas/ideas.c deleted file mode 100644 index ae54438f2..000000000 --- a/lib/glut-3.7.6/progs/demos/ideas/ideas.c +++ /dev/null @@ -1,1056 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1995. */ - -/* - * (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 -#ifdef _WIN32 -#include -#include -#include -#define gettimeofday(_x, _y) \ -{ \ - struct timeb _t; \ - ftime(&_t); \ - (_x)->tv_sec = _t.time; \ - (_x)->tv_usec = _t.millitm * 1000; \ -} -#else -#include -#endif -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif -#include -#include -#include "objects.h" -#include - -#define X 0 -#define Y 1 -#define Z 2 - -#ifndef TRUE -#define TRUE 1 -#endif -#ifndef FALSE -#define FALSE 0 -#endif - -#define DEG *M_PI/180.0 -#define RAD *180.0/M_PI - -float move_speed; /* Spline distance per second */ - -int multisample = 0; /* Antialias polygons? */ -int doublebuffer = 1; /* Doublebuffer? */ - - -#define SPEED_SLOW 0.2 /* Spline distances per second */ -#define SPEED_MEDIUM 0.4 -#define SPEED_FAST 0.7 -#define SPEED_SUPER_FAST 1.0 - -#define O_NOMS 7 -#define O_4MS 8 -#define O_8MS 9 -#define O_16MS 10 - -static int RGBA_SB_attributes = GLUT_SINGLE | GLUT_RGBA | GLUT_DEPTH | GLUT_MULTISAMPLE; - -static int RGBA_DB_attributes = GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_MULTISAMPLE; - -float light1_ambient[] = { 0.0,0.0,0.0,1.0 }; -float light1_lcolor[] = { 1.0,1.0,1.0,1.0 }; -float light1_position[] = { 0.0,1.0,0.0,0.0 }; - -float light2_ambient[] = { 0.0,0.0,0.0,1.0 }; -float light2_lcolor[] = { 0.3,0.3,0.5,1.0 }; -float light2_position[] = { -1.0,0.0,0.0,0.0 }; - -float light3_ambient[] = { 0.2,0.2,0.2,1.0 }; -float light3_lcolor[] = { 0.2,0.2,0.2,1.0 }; -float light3_position[] = { 0.0,-1.0,0.0,0.0 }; - -float lmodel_LVW[] = { 0.0 }; -float lmodel_ambient[] = { 0.3,0.3,0.3,1.0 }; -float lmodel_TWO[] = { GL_TRUE }; - -float mat_logo_ambient[] = {0.1, 0.1, 0.1, 1.0}; -float mat_logo_diffuse[] = {0.5, 0.4, 0.7, 1.0}; -float mat_logo_specular[] = {1.0, 1.0, 1.0, 1.0}; -float mat_logo_shininess[] = {30.0}; - -float mat_holder_base_ambient[] = {0.0, 0.0, 0.0, 1.0}; -float mat_holder_base_diffuse[] = {0.6, 0.6, 0.6, 1.0}; -float mat_holder_base_specular[] = {0.8, 0.8, 0.8, 1.0}; -float mat_holder_base_shininess[] = {30.0}; - -float mat_holder_rings_ambient[] = { 0.0,0.0,0.0,1.0 }; -float mat_holder_rings_diffuse[] = { 0.9,0.8,0.0,1.0 }; -float mat_holder_rings_specular[] = { 1.0,1.0,1.0,1.0 }; -float mat_holder_rings_shininess[] = { 30.0 }; - -float mat_hemisphere_ambient[] = {0.0, 0.0, 0.0,1.0 }; -float mat_hemisphere_diffuse[] = {1.0, 0.2, 0.2,1.0 }; -float mat_hemisphere_specular[] = {0.5, 0.5, 0.5,1.0 }; -float mat_hemisphere_shininess[] = {20.0}; - -GLubyte stipple[32*32]; - -typedef float vector[3]; -typedef float vector4[4]; -typedef vector parameter[4]; - -/* - * Function definitions - */ -static void initialize(void); -static void resize_window(int w, int h); -static void build_table(void); -static parameter *calc_spline_params(vector *ctl_pts, int n); -static void calc_spline(vector v, parameter *params, float current_time); -static void normalize(vector v); -static float dot(vector v1, vector v2); -void draw_table(void); -void draw_logo_shadow(void); -void draw_hemisphere(void); -void draw_logo(void); -void draw_under_table(void); -void draw_i(void); -void draw_d(void); -void draw_e(void); -void draw_a(void); -void draw_s(void); -void draw_n(void); -void draw_m(void); -void draw_o(void); -void draw_t(void); - -int post_idle = 0; -static void idle(void); -static void do_post_idle(void); -static void display(void); -static void mouse(int b, int s, int x, int y); -static void keyboard(unsigned char c, int x, int y); -static void vis(int); - -static void init_materials(void) { - int x, y; - - /* Stipple pattern */ - for (y = 0; y < 32; y++) - for (x = 0; x < 4; x++) - stipple[y * 4 + x] = (y % 2) ? 0xaa : 0x55; - - glNewList(MAT_LOGO, GL_COMPILE); - glMaterialfv(GL_FRONT, GL_AMBIENT, mat_logo_ambient); - glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_logo_diffuse); - glMaterialfv(GL_FRONT, GL_SPECULAR, mat_logo_specular); - glMaterialfv(GL_FRONT, GL_SHININESS, mat_logo_shininess); - glEndList(); - - glNewList( MAT_HOLDER_BASE, GL_COMPILE); - glMaterialfv(GL_FRONT, GL_AMBIENT, mat_holder_base_ambient); - glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_holder_base_diffuse); - glMaterialfv(GL_FRONT, GL_SPECULAR, mat_holder_base_specular); - glMaterialfv(GL_FRONT, GL_SHININESS, mat_holder_base_shininess); - glEndList(); - - glNewList(MAT_HOLDER_RINGS, GL_COMPILE); - glMaterialfv(GL_FRONT, GL_AMBIENT, mat_holder_rings_ambient); - glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_holder_rings_diffuse); - glMaterialfv(GL_FRONT, GL_SPECULAR, mat_holder_rings_specular); - glMaterialfv(GL_FRONT, GL_SHININESS, mat_holder_rings_shininess); - glEndList(); - - glNewList(MAT_HEMISPHERE, GL_COMPILE); - glMaterialfv(GL_FRONT, GL_AMBIENT, mat_hemisphere_ambient); - glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_hemisphere_diffuse); - glMaterialfv(GL_FRONT, GL_SPECULAR, mat_hemisphere_specular); - glMaterialfv(GL_FRONT, GL_SHININESS, mat_hemisphere_shininess); - glEndList(); - -} - -void init_lights(void) { - static float ambient[] = { 0.1, 0.1, 0.1, 1.0 }; - static float diffuse[] = { 0.5, 1.0, 1.0, 1.0 }; - static float position[] = { 90.0, 90.0, 150.0, 0.0 }; - - glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); - glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); - glLightfv(GL_LIGHT0, GL_POSITION, position); - - glLightfv (GL_LIGHT1, GL_AMBIENT, light1_ambient); - glLightfv (GL_LIGHT1, GL_SPECULAR, light1_lcolor); - glLightfv (GL_LIGHT1, GL_DIFFUSE, light1_lcolor); - glLightfv (GL_LIGHT1, GL_POSITION, light1_position); - - glLightfv (GL_LIGHT2, GL_AMBIENT, light2_ambient); - glLightfv (GL_LIGHT2, GL_SPECULAR, light2_lcolor); - glLightfv (GL_LIGHT2, GL_DIFFUSE, light2_lcolor); - glLightfv (GL_LIGHT2, GL_POSITION, light2_position); - - glLightfv (GL_LIGHT3, GL_AMBIENT, light3_ambient); - glLightfv (GL_LIGHT3, GL_SPECULAR, light3_lcolor); - glLightfv (GL_LIGHT3, GL_DIFFUSE, light3_lcolor); - glLightfv (GL_LIGHT3, GL_POSITION, light3_position); - - glLightModelfv (GL_LIGHT_MODEL_LOCAL_VIEWER, lmodel_LVW); - glLightModelfv (GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); -} - -short dev, val; - -float current_time=0.0; -float hold_time=0.0; /* Used when auto-running */ - -float tmplight[] = { - GL_POSITION, 0.0, 0.0, 0.0, 0.0, -}; - -GLfloat tv[4][4] = { - {1.0, 0.0, 0.0, 0.0}, - {0.0, 1.0, 0.0, -1.0}, - {0.0, 0.0, 1.0, 0.0}, - {0.0, 0.0, 0.0, 0.0}, -}; - -#define TABLERES 12 - -float pcr, pcg, pcb, pca; - -vector table_points[TABLERES+1][TABLERES+1]; -GLubyte tablecolors[TABLERES+1][TABLERES+1]; - -vector paper_points[4] = { - {-0.8, 0.0, 0.4}, - {-0.2, 0.0, -1.4}, - {1.0, 0.0, -1.0}, - {0.4, 0.0, 0.8}, -}; - -float dot(vector, vector); - -#define TIME 15 -#define START_TIME 0.6 - -vector light_pos_ctl[] = { - - {0.0, 1.8, 0.0}, - {0.0, 1.8, 0.0}, - {0.0, 1.6, 0.0}, - - {0.0, 1.6, 0.0}, - {0.0, 1.6, 0.0}, - {0.0, 1.6, 0.0}, - {0.0, 1.4, 0.0}, - - {0.0, 1.3, 0.0}, - {-0.2, 1.5, 2.0}, - {0.8, 1.5, -0.4}, - {-0.8, 1.5, -0.4}, - - {0.8, 2.0, 1.0}, - {1.8, 5.0, -1.8}, - {8.0, 10.0, -4.0}, - {8.0, 10.0, -4.0}, - {8.0, 10.0, -4.0}, -}; - -vector logo_pos_ctl[] = { - - {0.0, -0.5, 0.0}, - - {0.0, -0.5, 0.0}, - {0.0, -0.5, 0.0}, - - {0.0, -0.5, 0.0}, - {0.0, -0.5, 0.0}, - {0.0, -0.5, 0.0}, - {0.0, 0.0, 0.0}, - - {0.0, 0.6, 0.0}, - {0.0, 0.75, 0.0}, - {0.0, 0.8, 0.0}, - {0.0, 0.8, 0.0}, - - {0.0, 0.5, 0.0}, - {0.0, 0.5, 0.0}, - {0.0, 0.5, 0.0}, - {0.0, 0.5, 0.0}, - {0.0, 0.5, 0.0}, -}; - - -vector logo_rot_ctl[] = { - - {0.0, 0.0, -18.4}, - - {0.0, 0.0, -18.4}, - {0.0, 0.0, -18.4}, - - {0.0, 0.0, -18.4}, - {0.0, 0.0, -18.4}, - {0.0, 0.0, -18.4}, - {0.0, 0.0, -18.4}, - {0.0, 0.0, -18.4}, - -/* {90.0, 0.0, -90.0}, - {180.0, 180.0, 90.0}, */ - {240.0, 360.0, 180.0}, - {90.0, 180.0, 90.0}, - - {11.9, 0.0, -18.4}, - {11.9, 0.0, -18.4}, - {11.9, 0.0, -18.4}, - {11.9, 0.0, -18.4}, - {11.9, 0.0, -18.4}, -}; - - -vector view_from_ctl[] = { - - {-1.0, 1.0, -4.0}, - - {-1.0, -3.0, -4.0}, /* 0 */ - {-3.0, 1.0, -3.0}, /* 1 */ - - {-1.8, 2.0, 5.4}, /* 2 */ - {-0.4, 2.0, 1.2}, /* 3 */ - {-0.2, 1.5, 0.6}, /* 4 */ - {-0.2, 1.2, 0.6}, /* 5 */ - - {-0.8, 1.0, 2.4}, /* 6 */ - {-1.0, 2.0, 3.0}, /* 7 */ - {0.0, 4.0, 3.6}, /* 8 */ - {-0.8, 4.0, 1.2}, /* 9 */ - - {-0.2, 3.0, 0.6}, /* 10 */ - {-0.1, 2.0, 0.3}, /* 11 */ - {-0.1, 2.0, 0.3}, /* 12 */ - {-0.1, 2.0, 0.3}, /* 13 */ - {-0.1, 2.0, 0.3}, /* 13 */ - - -}; - -vector view_to_ctl[] = { - - {-1.0, 1.0, 0.0}, - - {-1.0, -3.0, 0.0}, - {-1.0, 1.0, 0.0}, - - {0.1, 0.0, -0.3}, - {0.1, 0.0, -0.3}, - {0.1, 0.0, -0.3}, - {0.0, 0.2, 0.0}, - - {0.0, 0.6, 0.0}, - {0.0, 0.8, 0.0}, - {0.0, 0.8, 0.0}, - {0.0, 0.8, 0.0}, - - {0.0, 0.8, 0.0}, - {0.0, 0.8, 0.0}, - {0.0, 0.8, 0.0}, - {0.0, 0.8, 0.0}, - {0.0, 0.8, 0.0}, - -}; - - -vector view_from, view_to, logo_pos, logo_rot; -vector4 light_pos; - -parameter *view_from_spline, *view_to_spline, - *light_pos_spline, *logo_pos_spline, - *logo_rot_spline; - -double a3, a4; - -void ideas_usage(void) -{ - fprintf(stderr, "Usage: ideas [-a] [-m] [-d] -s{1-4}\n"); - fprintf(stderr, "Press ESC to quit, 1-4 to control speed, any other key\n"); - fprintf(stderr, "to pause.\n"); -} - - int auto_run; /* If set, then automatically run forever */ - float new_speed; /* Set new animation speed? */ - int timejerk; /* Set to indicate time jerked! (menu pulled down) */ - int paused = 0; /* Paused? */ - int right = 0; /* Draw right eye? */ - int resetclock; /* Reset the clock? */ - float timeoffset; /* Used to compute timing */ - struct timeval start; - -int main(int argc, char **argv) -{ - int i; - - glutInit(&argc, argv); - - auto_run = 0; /* Don't automatically run forever */ - /* .4 spline distance per second by default */ - move_speed = SPEED_MEDIUM; - new_speed = SPEED_MEDIUM; - timeoffset = START_TIME; - - for (i = 1; i < argc; i++) { - if (argv[i][0] != '-') { - break; - } - - switch(argv[i][1]) { - case 'a': /* Keep running forever */ - auto_run = 1; - break; - case 'm': /* Multisample */ - multisample = 1; - break; - case 'd': /* Single buffer */ - doublebuffer = 0; - break; - case 's': - switch(argv[i][2]) { - case '1': - move_speed = new_speed = SPEED_SLOW; - break; - case '2': - move_speed = new_speed = SPEED_MEDIUM; - break; - case '3': - move_speed = new_speed = SPEED_FAST; - break; - case '4': - move_speed = new_speed = SPEED_SUPER_FAST; - break; - } - break; - default: - ideas_usage(); - break; - } - } - - initialize(); - - current_time = timeoffset; - resetclock = 1; - timejerk = 0; - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} - -static void idle(void) -{ - if ((current_time) > (TIME*1.0)-3.0) { - if (auto_run) { - hold_time += current_time - (TIME - 3.001); - if (hold_time > 3.0) { /* 3 second hold */ - hold_time = 0.0; - resetclock = 1; - } - } else { - if(!resetclock) glutIdleFunc(NULL); - } - current_time = (TIME*1.0)-3.001; - } else { - post_idle = 1; - } - glutPostRedisplay(); -} - -/* ARGSUSED2 */ -static void -mouse(int b, int s, int x, int y) -{ - if(b == GLUT_LEFT_BUTTON && s == GLUT_DOWN) { - resetclock = 1; - paused = 0; - glutIdleFunc(idle); - } -} - -/* ARGSUSED1 */ -static void -keyboard(unsigned char c, int x, int y) -{ - switch(c) { - case 27: - exit(0); - break; - case '1': - new_speed = SPEED_SLOW; - break; - case '2': - new_speed = SPEED_MEDIUM; - break; - case '3': - new_speed = SPEED_FAST; - break; - case '4': - new_speed = SPEED_SUPER_FAST; - break; - default: - if (paused) timejerk = 1; - paused = ~paused; - if(paused) { - glutIdleFunc(NULL); - } else { - glutIdleFunc(idle); - } - } -} - -static void -vis(int visible) -{ - if (visible == GLUT_VISIBLE) { - if(!paused) glutIdleFunc(idle); - do_post_idle(); - } else { - if(!paused) glutIdleFunc(NULL); - } -} - -static void display(void) -{ - float x, y, z, c; - - calc_spline(view_from, view_from_spline, current_time); - calc_spline(view_to, view_to_spline, current_time); - calc_spline(light_pos, light_pos_spline, current_time); - light_pos[3] = 0.0; - calc_spline(logo_pos, logo_pos_spline, current_time); - calc_spline(logo_rot, logo_rot_spline, current_time); - - tmplight[1] = light_pos[X] - logo_pos[X]; - tmplight[2] = light_pos[Y] - logo_pos[Y]; - tmplight[3] = light_pos[Z] - logo_pos[Z]; - - glNewList(LIGHT_TMP, GL_COMPILE); - glMaterialf(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, * tmplight); - glEndList(); - - tv[0][0] = tv[1][1] = tv[2][2] = light_pos[Y]; - - glColor3ub(0, 0, 0); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - /* - * SHADOW - */ - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - gluLookAt(view_from[X], view_from[Y], view_from[Z], - view_to[X], view_to[Y], view_to[Z], - 0.0, 1.0, 0.0); - - if (view_from[Y] > 0.0) draw_table(); - - glEnable(GL_CULL_FACE); - glDisable(GL_DEPTH_TEST); - - if (logo_pos[Y] < 0.0) { - - if (logo_pos[Y]>-0.33) { - /* We're emerging from the table */ - c = 1.0 - (logo_pos[Y]) / -0.33; - pca /= 4.0; - glColor3ub((GLubyte)(128.0*(1.0-c)*0.5 + 255.0*pca*c), - (GLubyte)(102.0*(1.0-c)*0.5 + 255.0*pca*c), - (GLubyte)(179.0*(1.0-c)*0.5 + 200.0*pca*c)); - } else { - /* Still under table */ - glColor3ub(128/2, 102/2, 179/2); - } - - glPushMatrix(); - glScalef(0.04, 0.0, 0.04); - glRotatef(0.1 * (-900), 1.0, 0.0, 0.0); - glRotatef(0.1 * ((int)(10.0*logo_rot[Z])), 0.0, 0.0, 1.0); - glRotatef(0.1 * ((int)(10.0*logo_rot[Y])), 0.0, 1.0, 0.0); - glRotatef(0.1 * ((int)(10.0*logo_rot[X])), 1.0, 0.0, 0.0); - glRotatef(0.1 * (353), 1.0, 0.0, 0.0); - glRotatef(0.1 * (450), 0.0, 1.0, 0.0); - draw_logo_shadow(); - glPopMatrix(); - } - - if (logo_pos[Y] > 0.0) { - glPushMatrix(); - if (logo_pos[Y]<0.33) { - pca /= 4.0; - c = 1.0 - (logo_pos[Y])/0.33; - glColor3ub((GLubyte)(255.0*pca*c), - (GLubyte)(255.0*pca*c), - (GLubyte)(200.0*pca*c)); - } else { - glColor3ub(0, 0, 0); - } - - glTranslatef(light_pos[X], light_pos[Y], light_pos[Z]); - glMultMatrixf(&tv[0][0]); - glTranslatef(-light_pos[X]+logo_pos[X], - -light_pos[Y]+logo_pos[Y], - -light_pos[Z]+logo_pos[Z]); - glScalef(0.04, 0.04, 0.04); - glRotatef (0.1 * (-900), 1.0, 0.0, 0.0); - glRotatef (0.1 * ((int)(10.0*logo_rot[Z])), 0.0, 0.0, 1.0); - glRotatef (0.1 * ((int)(10.0*logo_rot[Y])), 0.0, 1.0, 0.0); - glRotatef (0.1 * ((int)(10.0*logo_rot[X])), 1.0, 0.0, 0.0); - glRotatef (0.1 * (353), 1.0, 0.0, 0.0); - glRotatef (0.1 * (450), 0.0, 1.0, 0.0); - - - glEnable(GL_POLYGON_STIPPLE); - glPolygonStipple(stipple); - draw_logo_shadow(); - glDisable(GL_POLYGON_STIPPLE); - glPopMatrix(); - } - /* - * DONE SHADOW - */ - - - glEnable(GL_DEPTH_TEST); - glDisable(GL_CULL_FACE); - glEnable(GL_LIGHTING); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(.1*(450), 5.0/4.0, 0.5, 20.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - gluLookAt(view_from[X], view_from[Y], view_from[Z], - view_to[X], view_to[Y], view_to[Z], - 0.0, 1.0, 0.0); - - glCallList( MAT_HOLDER_RINGS); - - glPushMatrix(); - glTranslatef(light_pos[X], light_pos[Y], light_pos[Z]); - glScalef(0.1, 0.1, 0.1); - - x = light_pos[X] - logo_pos[X]; - y = light_pos[Y] - logo_pos[Y]; - z = light_pos[Z] - logo_pos[Z]; - - if (x!=0.0) { - a3 = -atan2(z, x)*10.0 RAD; - } else a3 = 0.0; - - a4 = -atan2(sqrt(x*x + z*z), y)*10.0 RAD; - - glRotatef (0.1 * ((int)a3), 0.0, 1.0, 0.0); - glRotatef (0.1 * ((int)a4), 0.0, 0.0, 1.0); - glRotatef (0.1 * (-900), 1.0, 0.0, 0.0); - - glEnable(GL_LIGHT2); - glEnable(GL_LIGHT3); - glCallList(MAT_HEMISPHERE); - glEnable(GL_NORMALIZE); - draw_hemisphere(); - glDisable(GL_NORMALIZE); - glPopMatrix(); - - glDisable(GL_LIGHT2); - glDisable(GL_LIGHT3); - glEnable(GL_LIGHT1); - glLightfv(GL_LIGHT1, GL_POSITION, light_pos); - - if (logo_pos[Y] > -0.33) { - - glCallList(MAT_LOGO); - - glPushMatrix(); - glTranslatef(logo_pos[X], logo_pos[Y], logo_pos[Z]); - glScalef(0.04, 0.04, 0.04); - glRotatef (0.1 * (-900), 1.0, 0.0, 0.0); - glRotatef (0.1 * ((int)(10.0*logo_rot[Z])), 0.0, 0.0, 1.0); - glRotatef (0.1 * ((int)(10.0*logo_rot[Y])), 0.0, 1.0, 0.0); - glRotatef (0.1 * ((int)(10.0*logo_rot[X])), 1.0, 0.0, 0.0); - glRotatef (0.1 * (353), 1.0, 0.0, 0.0); - glRotatef (0.1 * (450), 0.0, 1.0, 0.0); - glEnable(GL_LIGHTING); - draw_logo(); - glPopMatrix(); - } - - if (view_from[Y] < 0.0) draw_under_table(); - - glutSwapBuffers(); - - if(post_idle) do_post_idle(); -} - -static void do_post_idle(void) -{ - struct timeval current; - float timediff; - - /* Time jerked -- adjust clock appropriately */ - if (timejerk) { - timejerk = 0; - timeoffset = current_time; - gettimeofday(&start, NULL); - } - - /* Reset our timer */ - if (resetclock) { - resetclock = 0; - paused = 0; - timeoffset = START_TIME; - gettimeofday(&start, NULL); - } - - /* Compute new time */ - gettimeofday(¤t, NULL); - timediff = (current.tv_sec - start.tv_sec) + - ((double) (current.tv_usec - start.tv_usec)) / 1000000.0; - if (!paused) { - current_time = timediff * move_speed + timeoffset; - } - - /* Adjust to new speed */ - if (new_speed != move_speed) { - move_speed = new_speed; - timeoffset = current_time; - gettimeofday(&start, NULL); - } - post_idle = 0; -} - -static void resize_window(int w, int h) -{ - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective (45.0, 5.0/4.0, 0.5, 20.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glViewport(0, 0, w, h); -} - -static void initialize(void) -{ - int attr; - - attr = doublebuffer ? RGBA_DB_attributes : RGBA_SB_attributes; - glutInitDisplayMode(attr); - glutInitWindowSize(640, 480); - glutCreateWindow("Ideas"); - - if (multisample) glEnable(GL_POLYGON_SMOOTH); - - init_lights(); - init_materials(); - - build_table(); - - view_from_spline = calc_spline_params(view_from_ctl, TIME); - view_to_spline = calc_spline_params(view_to_ctl, TIME); - light_pos_spline = calc_spline_params(light_pos_ctl, TIME); - logo_pos_spline = calc_spline_params(logo_pos_ctl, TIME); - logo_rot_spline = calc_spline_params(logo_rot_ctl, TIME); - - glutReshapeFunc(resize_window); - glutDisplayFunc(display); - glutMouseFunc(mouse); - glutKeyboardFunc(keyboard); - glutVisibilityFunc(vis); - - glMatrixMode(GL_MODELVIEW); -} - - -static void build_table(void) -{ - float i, j; - - for (j=0.0; j<=TABLERES*1.0; j+=1.0) { - for (i=0.0; i<=TABLERES*1.0; i+=1.0) { - table_points[(int)j][(int)i][Z] = (i-TABLERES*1.0/2.0)/2.0; - table_points[(int)j][(int)i][X] = (j-TABLERES*1.0/2.0)/2.0; - table_points[(int)j][(int)i][Y] = 0.0; - } - } -} - - -void draw_table(void) -{ - float c; - int i, j; - int k, l; - float ov[3], lv[3]; - - glDisable(GL_DEPTH_TEST); - glDisable(GL_LIGHTING); - - ov[X] = light_pos[X]-logo_pos[X]; - ov[Y] = light_pos[Y]-logo_pos[Y]; - ov[Z] = light_pos[Z]-logo_pos[Z]; - - normalize(ov); - - for (j=0; j<=TABLERES; j++) { - for (i=0; i<=TABLERES; i++) { - lv[X] = light_pos[X] - table_points[j][i][X]; - lv[Y] = light_pos[Y] - table_points[j][i][Y]; - lv[Z] = light_pos[Z] - table_points[j][i][Z]; - normalize(lv); - if ((c = dot(lv, ov))<0.0) c = 0.0; - c = c * c * c * lv[Y] * 255.0; - /* fade */ - if ((current_time>TIME-5.0) && (current_time-0.33 && logo_pos[Y]<0.33) { - glEnable(GL_DEPTH_TEST); - } - - pca = 0.0; - glBegin(GL_POLYGON); - for (i=0; i<4; i++) { - lv[X] = light_pos[X] - paper_points[i][X]; - lv[Y] = light_pos[Y] - paper_points[i][Y]; - lv[Z] = light_pos[Z] - paper_points[i][Z]; - normalize(lv); - if ((c = dot(lv, ov))<0.0) c = 0.0; - c = c * c * c * lv[Y]; - /* fade */ - if ((current_time>TIME-5.0) && (current_timeTIME*1.0-5.0) { - c = (current_time-(TIME*1.0-5.0))/2.0; - glColor3ub((GLubyte)(c*255.0), (GLubyte)(c*255.0), (GLubyte)(c*255.0)); - } else glColor3ub(0, 0, 0); - - glDisable(GL_DEPTH_TEST); - - draw_i(); - glTranslatef(3.0, 0.0, 0.0); - - draw_d(); - glTranslatef(6.0, 0.0, 0.0); - - draw_e(); - glTranslatef(5.0, 0.0, 0.0); - - draw_a(); - glTranslatef(6.0, 0.0, 0.0); - - draw_s(); - glTranslatef(10.0, 0.0, 0.0); - - draw_i(); - glTranslatef(3.0, 0.0, 0.0); - - draw_n(); - glTranslatef(-31.0, -13.0, 0.0); - - draw_m(); - glTranslatef(10.0, 0.0, 0.0); - - draw_o(); - glTranslatef(5.0, 0.0, 0.0); - - draw_t(); - glTranslatef(4.0, 0.0, 0.0); - - draw_i(); - glTranslatef(3.5, 0.0, 0.0); - - draw_o(); - glTranslatef(5.0, 0.0, 0.0); - - draw_n(); - - glPopMatrix(); - -} - - - -void draw_under_table(void) -{ - int k, l; - - glDisable(GL_DEPTH_TEST); - - - glColor3ub(0, 0, 0); - - for (l=0; l= (TIME - 3)) { - ti = TIME - 4; - } - - for (i=0; i<3; i++) { - v[i] = params[ti][3][i] + - params[ti][2][i] * t + - params[ti][1][i] * t * t + - params[ti][0][i] * t * t * t; - } - -} - -static parameter *calc_spline_params(vector *ctl_pts, int n) -{ - - int i, j; - parameter *params; - - if (n<4) { - fprintf(stderr, - "calc_spline_params: not enough control points\n"); - return (NULL); - } - - params = (parameter *)malloc(sizeof(parameter) * (n-3)); - - for (i=0; i -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=ideas - 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 "ideas.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 "ideas.mak" CFG="ideas - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "ideas - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "ideas - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "ideas - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "ideas - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "ideas - Win32 Release" -# Name "ideas - Win32 Debug" -# Begin Source File - -SOURCE=.\a.c -# End Source File -# Begin Source File - -SOURCE=.\b.c -# End Source File -# Begin Source File - -SOURCE=.\d.c -# End Source File -# Begin Source File - -SOURCE=.\draw_holder.c -# End Source File -# Begin Source File - -SOURCE=.\draw_lamp.c -# End Source File -# Begin Source File - -SOURCE=.\draw_logo.c -# End Source File -# Begin Source File - -SOURCE=.\draw_logo_line.c -# End Source File -# Begin Source File - -SOURCE=.\draw_logo_shadow.c -# End Source File -# Begin Source File - -SOURCE=.\e.c -# End Source File -# Begin Source File - -SOURCE=.\f.c -# End Source File -# Begin Source File - -SOURCE=.\h.c -# End Source File -# Begin Source File - -SOURCE=.\i.c -# End Source File -# Begin Source File - -SOURCE=.\ideas.c -# End Source File -# Begin Source File - -SOURCE=.\m.c -# End Source File -# Begin Source File - -SOURCE=.\n.c -# End Source File -# Begin Source File - -SOURCE=.\o.c -# End Source File -# Begin Source File - -SOURCE=.\objects.h -# End Source File -# Begin Source File - -SOURCE=.\p.c -# End Source File -# Begin Source File - -SOURCE=.\r.c -# End Source File -# Begin Source File - -SOURCE=.\s.c -# End Source File -# Begin Source File - -SOURCE=.\t.c -# End Source File -# Begin Source File - -SOURCE=.\w.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/demos/ideas/m.c b/lib/glut-3.7.6/progs/demos/ideas/m.c deleted file mode 100644 index 1ce138fa1..000000000 --- a/lib/glut-3.7.6/progs/demos/ideas/m.c +++ /dev/null @@ -1,228 +0,0 @@ -/* - * (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 - -float m_data[][2] = { - {0.590769, 9.449335}, - {2.116923, 9.842375}, - {1.362051, 9.383828}, - {2.527179, 9.825998}, - {1.591795, 9.072672}, - {2.789744, 9.514841}, - {1.690256, 8.663255}, - {2.658462, 8.335722}, - {1.575385, 7.222108}, - {2.067692, 6.255886}, - {0.918974, 4.028659}, - {1.050256, 3.013306}, - {0.705641, 3.013306}, - - {2.018461, 6.386899}, - {1.788718, 5.617196}, - {2.921026, 7.991812}, - {3.167180, 8.008188}, - {3.544615, 8.827022}, - {3.872821, 8.843398}, - {4.414359, 9.547595}, - {4.447179, 9.056294}, - {5.120000, 9.891504}, - {4.841026, 8.843398}, - {5.825641, 9.809621}, - {5.005128, 8.040941}, - {5.989744, 8.761515}, - {4.906667, 6.714432}, - {5.595897, 7.123848}, - {3.987692, 2.996929}, - {4.348718, 2.996929}, - - {5.218462, 5.977482}, - {5.251282, 6.354146}, - {6.449231, 7.893552}, - {6.400000, 8.221085}, - {7.302564, 8.843398}, - {7.351795, 9.334698}, - {7.827693, 9.154554}, - {8.008205, 9.842375}, - {8.139487, 9.121801}, - {8.795897, 9.973388}, - {8.402051, 8.728762}, - {9.337436, 9.531218}, - {8.402051, 8.040941}, - {9.288205, 8.433982}, - {7.745641, 5.813715}, - {8.320000, 5.928352}, - {7.286154, 4.012282}, - {7.991795, 4.126919}, - {7.499487, 3.357216}, - {8.533334, 3.766633}, - {8.123077, 3.062436}, - {8.927179, 3.832139}, - {8.910769, 3.340839}, - {9.550769, 4.126919}, - -}; - -void draw_m(void) { - - glBegin(GL_LINE_STRIP); - glVertex2fv(m_data[0]); - glVertex2fv(m_data[2]); - glVertex2fv(m_data[4]); - glVertex2fv(m_data[6]); - glVertex2fv(m_data[8]); - glVertex2fv(m_data[10]); - glVertex2fv(m_data[12]); - glVertex2fv(m_data[11]); - glVertex2fv(m_data[9]); - glVertex2fv(m_data[7]); - glVertex2fv(m_data[5]); - glVertex2fv(m_data[3]); - glVertex2fv(m_data[1]); - glEnd(); - - glBegin(GL_LINE_STRIP); - glVertex2fv(m_data[14]); - glVertex2fv(m_data[16]); - glVertex2fv(m_data[18]); - glVertex2fv(m_data[20]); - glVertex2fv(m_data[22]); - glVertex2fv(m_data[24]); - glVertex2fv(m_data[26]); - glVertex2fv(m_data[28]); - glVertex2fv(m_data[29]); - glVertex2fv(m_data[27]); - glVertex2fv(m_data[25]); - glVertex2fv(m_data[23]); - glVertex2fv(m_data[21]); - glVertex2fv(m_data[19]); - glVertex2fv(m_data[17]); - glVertex2fv(m_data[15]); - glVertex2fv(m_data[13]); - glEnd(); - - glBegin(GL_LINE_STRIP); - glVertex2fv(m_data[30]); - glVertex2fv(m_data[32]); - glVertex2fv(m_data[34]); - glVertex2fv(m_data[36]); - glVertex2fv(m_data[38]); - glVertex2fv(m_data[40]); - glVertex2fv(m_data[42]); - glVertex2fv(m_data[44]); - glVertex2fv(m_data[46]); - glVertex2fv(m_data[48]); - glVertex2fv(m_data[50]); - glVertex2fv(m_data[52]); - glVertex2fv(m_data[53]); - glVertex2fv(m_data[51]); - glVertex2fv(m_data[49]); - glVertex2fv(m_data[47]); - glVertex2fv(m_data[45]); - glVertex2fv(m_data[43]); - glVertex2fv(m_data[41]); - glVertex2fv(m_data[39]); - glVertex2fv(m_data[37]); - glVertex2fv(m_data[35]); - glVertex2fv(m_data[33]); - glVertex2fv(m_data[31]); - glEnd(); - - glBegin(GL_TRIANGLE_STRIP); - glVertex2fv(m_data[0]); - glVertex2fv(m_data[1]); - glVertex2fv(m_data[2]); - glVertex2fv(m_data[3]); - glVertex2fv(m_data[4]); - glVertex2fv(m_data[5]); - glVertex2fv(m_data[6]); - glVertex2fv(m_data[7]); - glVertex2fv(m_data[8]); - glVertex2fv(m_data[9]); - glVertex2fv(m_data[10]); - glVertex2fv(m_data[11]); - glVertex2fv(m_data[12]); - glEnd(); - - glBegin(GL_TRIANGLE_STRIP); - glVertex2fv(m_data[13]); - glVertex2fv(m_data[14]); - glVertex2fv(m_data[15]); - glVertex2fv(m_data[16]); - glVertex2fv(m_data[17]); - glVertex2fv(m_data[18]); - glVertex2fv(m_data[19]); - glVertex2fv(m_data[20]); - glVertex2fv(m_data[21]); - glVertex2fv(m_data[22]); - glVertex2fv(m_data[23]); - glVertex2fv(m_data[24]); - glVertex2fv(m_data[25]); - glVertex2fv(m_data[26]); - glVertex2fv(m_data[27]); - glVertex2fv(m_data[28]); - glVertex2fv(m_data[29]); - glEnd(); - - glBegin(GL_TRIANGLE_STRIP); - glVertex2fv(m_data[30]); - glVertex2fv(m_data[31]); - glVertex2fv(m_data[32]); - glVertex2fv(m_data[33]); - glVertex2fv(m_data[34]); - glVertex2fv(m_data[35]); - glVertex2fv(m_data[36]); - glVertex2fv(m_data[37]); - glVertex2fv(m_data[38]); - glVertex2fv(m_data[39]); - glVertex2fv(m_data[40]); - glVertex2fv(m_data[41]); - glVertex2fv(m_data[42]); - glVertex2fv(m_data[43]); - glVertex2fv(m_data[44]); - glVertex2fv(m_data[45]); - glVertex2fv(m_data[46]); - glVertex2fv(m_data[47]); - glVertex2fv(m_data[48]); - glVertex2fv(m_data[49]); - glVertex2fv(m_data[50]); - glVertex2fv(m_data[51]); - glVertex2fv(m_data[52]); - glVertex2fv(m_data[53]); - glEnd(); - -} - diff --git a/lib/glut-3.7.6/progs/demos/ideas/n.c b/lib/glut-3.7.6/progs/demos/ideas/n.c deleted file mode 100644 index 65ef1104f..000000000 --- a/lib/glut-3.7.6/progs/demos/ideas/n.c +++ /dev/null @@ -1,161 +0,0 @@ -/* - * (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 - -float n_data[][2] = { - {1.009307, 9.444788}, - {2.548087, 9.742002}, - {1.737332, 9.213622}, - {2.994829, 9.659443}, - {1.985522, 8.751290}, - {3.127198, 9.180598}, - {1.935884, 7.975232}, - {2.481903, 6.571723}, - {1.472596, 5.019608}, - {1.439504, 2.988648}, - {1.025853, 2.988648}, - - {2.283350, 6.059855}, - {2.035160, 5.366357}, - {3.292658, 7.711042}, - {3.540848, 7.744066}, - {4.384695, 9.031992}, - {4.699069, 8.916409}, - {5.609100, 9.808049}, - {5.145812, 8.982456}, - {6.155119, 9.791537}, - {5.410548, 8.635707}, - {6.337125, 9.312694}, - {5.360910, 7.991744}, - {6.088935, 8.090816}, - {4.947259, 5.977296}, - {5.261634, 4.804954}, - {4.616339, 4.028896}, - {5.211996, 3.962848}, - {4.732162, 3.318886}, - {5.559462, 3.814241}, - {5.228542, 3.038184}, - {5.940021, 3.814241}, - {5.906929, 3.335397}, - {6.684591, 4.094943}, - -}; - -void draw_n(void) { - - glBegin(GL_TRIANGLE_STRIP); - glVertex2fv(n_data[0]); - glVertex2fv(n_data[1]); - glVertex2fv(n_data[2]); - glVertex2fv(n_data[3]); - glVertex2fv(n_data[4]); - glVertex2fv(n_data[5]); - glVertex2fv(n_data[6]); - glVertex2fv(n_data[7]); - glVertex2fv(n_data[8]); - glVertex2fv(n_data[9]); - glVertex2fv(n_data[10]); - glEnd(); - - glBegin(GL_TRIANGLE_STRIP); - glVertex2fv(n_data[11]); - glVertex2fv(n_data[12]); - glVertex2fv(n_data[13]); - glVertex2fv(n_data[14]); - glVertex2fv(n_data[15]); - glVertex2fv(n_data[16]); - glVertex2fv(n_data[17]); - glVertex2fv(n_data[18]); - glVertex2fv(n_data[19]); - glVertex2fv(n_data[20]); - glVertex2fv(n_data[21]); - glVertex2fv(n_data[22]); - glVertex2fv(n_data[23]); - glVertex2fv(n_data[24]); - glVertex2fv(n_data[25]); - glVertex2fv(n_data[26]); - glVertex2fv(n_data[27]); - glVertex2fv(n_data[28]); - glVertex2fv(n_data[29]); - glVertex2fv(n_data[30]); - glVertex2fv(n_data[31]); - glVertex2fv(n_data[32]); - glVertex2fv(n_data[33]); - glEnd(); - - glBegin(GL_LINE_STRIP); - glVertex2fv(n_data[0]); - glVertex2fv(n_data[2]); - glVertex2fv(n_data[4]); - glVertex2fv(n_data[6]); - glVertex2fv(n_data[8]); - glVertex2fv(n_data[10]); - glVertex2fv(n_data[9]); - glVertex2fv(n_data[7]); - glVertex2fv(n_data[5]); - glVertex2fv(n_data[3]); - glVertex2fv(n_data[1]); - glEnd(); - - glBegin(GL_LINE_STRIP); - glVertex2fv(n_data[12]); - glVertex2fv(n_data[14]); - glVertex2fv(n_data[16]); - glVertex2fv(n_data[18]); - glVertex2fv(n_data[20]); - glVertex2fv(n_data[22]); - glVertex2fv(n_data[24]); - glVertex2fv(n_data[26]); - glVertex2fv(n_data[28]); - glVertex2fv(n_data[30]); - glVertex2fv(n_data[32]); - glVertex2fv(n_data[33]); - glVertex2fv(n_data[31]); - glVertex2fv(n_data[29]); - glVertex2fv(n_data[27]); - glVertex2fv(n_data[25]); - glVertex2fv(n_data[23]); - glVertex2fv(n_data[21]); - glVertex2fv(n_data[19]); - glVertex2fv(n_data[17]); - glVertex2fv(n_data[15]); - glVertex2fv(n_data[13]); - glVertex2fv(n_data[11]); - glEnd(); - -} - diff --git a/lib/glut-3.7.6/progs/demos/ideas/o.c b/lib/glut-3.7.6/progs/demos/ideas/o.c deleted file mode 100644 index b442355ad..000000000 --- a/lib/glut-3.7.6/progs/demos/ideas/o.c +++ /dev/null @@ -1,151 +0,0 @@ -/* - * (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 - -float o_data[][2] = { - {2.975610, 9.603255}, - {2.878049, 9.342828}, - {2.292683, 9.131231}, - {2.048780, 8.691760}, - {1.707317, 8.528993}, - {1.658537, 7.731434}, - {0.878049, 7.047813}, - {1.349594, 5.550356}, - {0.569106, 5.029501}, - {1.528455, 4.443540}, - {0.991870, 3.434385}, - {1.967480, 3.955239}, - {1.772358, 2.994914}, - {2.422764, 3.825025}, - {2.829268, 3.092574}, - {3.154472, 3.971516}, - {3.512195, 3.727365}, - {3.772358, 4.264496}, - {4.130081, 4.524924}, - {4.162601, 4.996948}, - {4.699187, 5.403866}, - {4.471545, 6.461852}, - {5.219512, 7.243133}, - {4.439024, 8.105799}, - {5.235772, 8.756866}, - {4.065041, 8.870804}, - {4.991870, 9.391658}, - {3.853658, 9.228891}, - {4.390244, 9.912513}, - {3.463415, 9.407935}, - {3.674797, 9.912513}, - {2.829268, 9.342828}, - {2.959350, 9.603255}, - -}; - -void draw_o(void) { - - glBegin(GL_TRIANGLE_STRIP); - glVertex2fv(o_data[0]); - glVertex2fv(o_data[1]); - glVertex2fv(o_data[2]); - glVertex2fv(o_data[3]); - glVertex2fv(o_data[4]); - glVertex2fv(o_data[5]); - glVertex2fv(o_data[6]); - glVertex2fv(o_data[7]); - glVertex2fv(o_data[8]); - glVertex2fv(o_data[9]); - glVertex2fv(o_data[10]); - glVertex2fv(o_data[11]); - glVertex2fv(o_data[12]); - glVertex2fv(o_data[13]); - glVertex2fv(o_data[14]); - glVertex2fv(o_data[15]); - glVertex2fv(o_data[16]); - glVertex2fv(o_data[17]); - glVertex2fv(o_data[18]); - glVertex2fv(o_data[19]); - glVertex2fv(o_data[20]); - glVertex2fv(o_data[21]); - glVertex2fv(o_data[22]); - glVertex2fv(o_data[23]); - glVertex2fv(o_data[24]); - glVertex2fv(o_data[25]); - glVertex2fv(o_data[26]); - glVertex2fv(o_data[27]); - glVertex2fv(o_data[28]); - glVertex2fv(o_data[29]); - glVertex2fv(o_data[30]); - glVertex2fv(o_data[31]); - glVertex2fv(o_data[32]); - glEnd(); - - glBegin(GL_LINE_STRIP); - glVertex2fv(o_data[0]); - glVertex2fv(o_data[2]); - glVertex2fv(o_data[4]); - glVertex2fv(o_data[6]); - glVertex2fv(o_data[8]); - glVertex2fv(o_data[10]); - glVertex2fv(o_data[12]); - glVertex2fv(o_data[14]); - glVertex2fv(o_data[16]); - glVertex2fv(o_data[18]); - glVertex2fv(o_data[20]); - glVertex2fv(o_data[22]); - glVertex2fv(o_data[24]); - glVertex2fv(o_data[26]); - glVertex2fv(o_data[28]); - glVertex2fv(o_data[30]); - glVertex2fv(o_data[32]); - glVertex2fv(o_data[31]); - glVertex2fv(o_data[29]); - glVertex2fv(o_data[27]); - glVertex2fv(o_data[25]); - glVertex2fv(o_data[23]); - glVertex2fv(o_data[21]); - glVertex2fv(o_data[19]); - glVertex2fv(o_data[17]); - glVertex2fv(o_data[15]); - glVertex2fv(o_data[13]); - glVertex2fv(o_data[11]); - glVertex2fv(o_data[9]); - glVertex2fv(o_data[7]); - glVertex2fv(o_data[5]); - glVertex2fv(o_data[3]); - glVertex2fv(o_data[1]); - glEnd(); - -} - diff --git a/lib/glut-3.7.6/progs/demos/ideas/objects.h b/lib/glut-3.7.6/progs/demos/ideas/objects.h deleted file mode 100644 index 85e6bdc47..000000000 --- a/lib/glut-3.7.6/progs/demos/ideas/objects.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * (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. - */ - -#define MAT_LOGO 1 - -#define MAT_PENCIL_ERASER 2 -#define MAT_PENCIL_END 3 -#define MAT_PENCIL_PAINT 4 -#define MAT_PENCIL_WOOD 5 -#define MAT_PENCIL_TIP 6 - -#define MAT_HOLDER_BASE 7 -#define MAT_HOLDER_RINGS 8 - -#define MAT_HEMISPHERE 9 - -#define LIGHT_TMP 10 - -extern float idmat[4][4]; -extern float light1[]; -extern float light2[]; -extern float light3[]; -extern float lmodel[]; -extern float mat_logo[]; -extern float mat_holder_base[]; -extern float mat_holder_rings[]; -extern float mat_hemisphere[]; diff --git a/lib/glut-3.7.6/progs/demos/ideas/p.c b/lib/glut-3.7.6/progs/demos/ideas/p.c deleted file mode 100644 index 035d760ed..000000000 --- a/lib/glut-3.7.6/progs/demos/ideas/p.c +++ /dev/null @@ -1,184 +0,0 @@ -/* - * (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 - -float p_data[][2] = { - {1.987500, 11.437500-3.0}, - {2.606250, 11.662500-3.0}, - {2.887500, 12.150000-3.0}, - {3.037500, 11.943750-3.0}, - {3.618750, 12.956250-3.0}, - {2.793750, 10.256250-3.0}, - {3.037500, 8.775000-3.0}, - {2.418750, 8.006250-3.0}, - {2.381250, 3.656250-3.0}, - {1.518750, 2.756250-3.0}, - {1.856250, 1.687500-3.0}, - {0.975000, 1.087500-3.0}, - {1.087500, 0.393750-3.0}, - {0.600000, 0.431250-3.0}, - {0.018750, 0.037500-3.0}, - - {3.093750, 9.787500-3.0}, - {3.037500, 9.412500-3.0}, - {4.050000, 11.231250-3.0}, - {4.331250, 11.175000-3.0}, - {5.100000, 12.187500-3.0}, - {5.137500, 11.906250-3.0}, - {5.831250, 12.712500-3.0}, - {5.643750, 12.000000-3.0}, - {6.656250, 12.731250-3.0}, - {5.962500, 11.831250-3.0}, - {6.956250, 12.393750-3.0}, - {6.112500, 11.512500-3.0}, - {7.012500, 11.512500-3.0}, - {6.093750, 10.575000-3.0}, - {6.787500, 9.993750-3.0}, - {5.868750, 9.412500-3.0}, - {6.018750, 7.950000-3.0}, - {5.193750, 7.256250-3.0}, - {5.043750, 6.318750-3.0}, - {4.068750, 5.775000-3.0}, - {3.881250, 5.418750-3.0}, - {3.337500, 5.606250-3.0}, - {3.093750, 5.193750-3.0}, - {2.868750, 5.793750-3.0}, - {2.493750, 5.512500-3.0}, - {2.643750, 6.675000-3.0}, - -}; - -void draw_p(void) { - - glBegin(GL_TRIANGLE_STRIP); - glVertex2fv(p_data[0]); - glVertex2fv(p_data[1]); - glVertex2fv(p_data[2]); - glVertex2fv(p_data[3]); - glVertex2fv(p_data[4]); - glVertex2fv(p_data[5]); - glVertex2fv(p_data[6]); - glVertex2fv(p_data[7]); - glVertex2fv(p_data[8]); - glVertex2fv(p_data[9]); - glVertex2fv(p_data[10]); - glVertex2fv(p_data[11]); - glVertex2fv(p_data[12]); - glVertex2fv(p_data[13]); - glVertex2fv(p_data[14]); - glEnd(); - - glBegin(GL_TRIANGLE_STRIP); - glVertex2fv(p_data[15]); - glVertex2fv(p_data[16]); - glVertex2fv(p_data[17]); - glVertex2fv(p_data[18]); - glVertex2fv(p_data[19]); - glVertex2fv(p_data[20]); - glVertex2fv(p_data[21]); - glVertex2fv(p_data[22]); - glVertex2fv(p_data[23]); - glVertex2fv(p_data[24]); - glVertex2fv(p_data[25]); - glVertex2fv(p_data[26]); - glVertex2fv(p_data[27]); - glVertex2fv(p_data[28]); - glVertex2fv(p_data[29]); - glVertex2fv(p_data[30]); - glVertex2fv(p_data[31]); - glVertex2fv(p_data[32]); - glVertex2fv(p_data[33]); - glVertex2fv(p_data[34]); - glVertex2fv(p_data[35]); - glVertex2fv(p_data[36]); - glVertex2fv(p_data[37]); - glVertex2fv(p_data[38]); - glVertex2fv(p_data[39]); - glVertex2fv(p_data[40]); - glEnd(); - - glBegin(GL_LINE_STRIP); - glVertex2fv(p_data[0]); - glVertex2fv(p_data[2]); - glVertex2fv(p_data[4]); - glVertex2fv(p_data[6]); - glVertex2fv(p_data[8]); - glVertex2fv(p_data[10]); - glVertex2fv(p_data[12]); - glVertex2fv(p_data[14]); - glVertex2fv(p_data[13]); - glVertex2fv(p_data[11]); - glVertex2fv(p_data[9]); - glVertex2fv(p_data[7]); - glVertex2fv(p_data[5]); - glVertex2fv(p_data[3]); - glVertex2fv(p_data[1]); - glVertex2fv(p_data[0]); - glEnd(); - - glBegin(GL_LINE_STRIP); - glVertex2fv(p_data[15]); - glVertex2fv(p_data[17]); - glVertex2fv(p_data[19]); - glVertex2fv(p_data[21]); - glVertex2fv(p_data[23]); - glVertex2fv(p_data[25]); - glVertex2fv(p_data[27]); - glVertex2fv(p_data[29]); - glVertex2fv(p_data[31]); - glVertex2fv(p_data[33]); - glVertex2fv(p_data[35]); - glVertex2fv(p_data[37]); - glVertex2fv(p_data[39]); - glVertex2fv(p_data[40]); - glVertex2fv(p_data[38]); - glVertex2fv(p_data[36]); - glVertex2fv(p_data[34]); - glVertex2fv(p_data[32]); - glVertex2fv(p_data[30]); - glVertex2fv(p_data[28]); - glVertex2fv(p_data[26]); - glVertex2fv(p_data[24]); - glVertex2fv(p_data[22]); - glVertex2fv(p_data[20]); - glVertex2fv(p_data[18]); - glVertex2fv(p_data[16]); - glVertex2fv(p_data[15]); - glEnd(); - -} - diff --git a/lib/glut-3.7.6/progs/demos/ideas/r.c b/lib/glut-3.7.6/progs/demos/ideas/r.c deleted file mode 100644 index 4e8f57fc6..000000000 --- a/lib/glut-3.7.6/progs/demos/ideas/r.c +++ /dev/null @@ -1,139 +0,0 @@ -/* - * (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 - -float r_data[][2] = { - {0.018462, 12.344969-3.0}, - {0.775385, 12.677618-3.0}, - {0.812308, 12.344969-3.0}, - {1.421538, 12.899384-3.0}, - {1.126154, 12.123203-3.0}, - {1.864615, 12.825462-3.0}, - {1.181538, 11.716633-3.0}, - {2.030769, 12.603696-3.0}, - {1.089231, 10.700206-3.0}, - {1.495385, 9.351130-3.0}, - {0.516923, 7.355236-3.0}, - {0.756923, 6.375770-3.0}, - {0.129231, 5.119096-3.0}, - {0.461538, 5.322382-3.0}, - - {1.680000, 10.663244-3.0}, - {1.550769, 9.942505-3.0}, - {2.160000, 11.383984-3.0}, - {2.400000, 11.531828-3.0}, - {2.640000, 12.086243-3.0}, - {2.916923, 12.086243-3.0}, - {3.341538, 12.806981-3.0}, - {3.526154, 12.160164-3.0}, - {4.043077, 12.954825-3.0}, - {4.209231, 12.308008-3.0}, - {4.504615, 12.880903-3.0}, - {4.541538, 12.622176-3.0}, - -}; - -void draw_r(void) { - - glBegin(GL_TRIANGLE_STRIP); - glVertex2fv(r_data[0]); - glVertex2fv(r_data[1]); - glVertex2fv(r_data[2]); - glVertex2fv(r_data[3]); - glVertex2fv(r_data[4]); - glVertex2fv(r_data[5]); - glVertex2fv(r_data[6]); - glVertex2fv(r_data[7]); - glVertex2fv(r_data[8]); - glVertex2fv(r_data[9]); - glVertex2fv(r_data[10]); - glVertex2fv(r_data[11]); - glVertex2fv(r_data[12]); - glVertex2fv(r_data[13]); - glEnd(); - - glBegin(GL_TRIANGLE_STRIP); - glVertex2fv(r_data[14]); - glVertex2fv(r_data[15]); - glVertex2fv(r_data[16]); - glVertex2fv(r_data[17]); - glVertex2fv(r_data[18]); - glVertex2fv(r_data[19]); - glVertex2fv(r_data[20]); - glVertex2fv(r_data[21]); - glVertex2fv(r_data[22]); - glVertex2fv(r_data[23]); - glVertex2fv(r_data[24]); - glVertex2fv(r_data[25]); - glEnd(); - - glBegin(GL_LINE_STRIP); - glVertex2fv(r_data[0]); - glVertex2fv(r_data[2]); - glVertex2fv(r_data[4]); - glVertex2fv(r_data[6]); - glVertex2fv(r_data[8]); - glVertex2fv(r_data[10]); - glVertex2fv(r_data[12]); - glVertex2fv(r_data[13]); - glVertex2fv(r_data[11]); - glVertex2fv(r_data[9]); - glVertex2fv(r_data[7]); - glVertex2fv(r_data[5]); - glVertex2fv(r_data[3]); - glVertex2fv(r_data[1]); - glVertex2fv(r_data[0]); - glEnd(); - - glBegin(GL_LINE_STRIP); - glVertex2fv(r_data[14]); - glVertex2fv(r_data[16]); - glVertex2fv(r_data[18]); - glVertex2fv(r_data[20]); - glVertex2fv(r_data[22]); - glVertex2fv(r_data[24]); - glVertex2fv(r_data[25]); - glVertex2fv(r_data[23]); - glVertex2fv(r_data[21]); - glVertex2fv(r_data[19]); - glVertex2fv(r_data[17]); - glVertex2fv(r_data[15]); - glVertex2fv(r_data[14]); - glEnd(); - -} - diff --git a/lib/glut-3.7.6/progs/demos/ideas/s.c b/lib/glut-3.7.6/progs/demos/ideas/s.c deleted file mode 100644 index 988ead6a2..000000000 --- a/lib/glut-3.7.6/progs/demos/ideas/s.c +++ /dev/null @@ -1,142 +0,0 @@ -/* - * (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 - -float s_data[][2] = { - {0.860393, 5.283798}, - {0.529473, 3.550052}, - {0.992761, 4.491228}, - {0.910031, 3.368421}, - {1.240951, 3.830753}, - {1.456050, 3.104231}, - {1.935884, 3.517028}, - {2.002068, 2.988648}, - {2.763185, 3.533540}, - {3.061013, 3.120743}, - {3.391934, 3.748194}, - {4.053774, 3.632611}, - {3.822130, 4.540764}, - {4.550155, 4.590299}, - {3.656670, 5.465428}, - {4.517063, 5.713106}, - {3.276112, 5.894737}, - {3.921407, 6.538700}, - {2.299896, 6.736842}, - {3.044467, 7.430341}, - {1.886246, 7.496388}, - {2.581179, 8.222910}, - {1.902792, 8.751290}, - {2.680455, 8.883385}, - {2.283350, 9.312694}, - {3.358842, 9.609907}, - {3.507756, 9.907121}, - {4.285419, 9.758514}, - {5.112720, 9.973168}, - {4.748707, 9.593395}, - -}; - -void draw_s(void) { - - glBegin(GL_TRIANGLE_STRIP); - glVertex2fv(s_data[0]); - glVertex2fv(s_data[1]); - glVertex2fv(s_data[2]); - glVertex2fv(s_data[3]); - glVertex2fv(s_data[4]); - glVertex2fv(s_data[5]); - glVertex2fv(s_data[6]); - glVertex2fv(s_data[7]); - glVertex2fv(s_data[8]); - glVertex2fv(s_data[9]); - glVertex2fv(s_data[10]); - glVertex2fv(s_data[11]); - glVertex2fv(s_data[12]); - glVertex2fv(s_data[13]); - glVertex2fv(s_data[14]); - glVertex2fv(s_data[15]); - glVertex2fv(s_data[16]); - glVertex2fv(s_data[17]); - glVertex2fv(s_data[18]); - glVertex2fv(s_data[19]); - glVertex2fv(s_data[20]); - glVertex2fv(s_data[21]); - glVertex2fv(s_data[22]); - glVertex2fv(s_data[23]); - glVertex2fv(s_data[24]); - glVertex2fv(s_data[25]); - glVertex2fv(s_data[26]); - glVertex2fv(s_data[27]); - glVertex2fv(s_data[28]); - glVertex2fv(s_data[29]); - glEnd(); - - glBegin(GL_LINE_STRIP); - glVertex2fv(s_data[0]); - glVertex2fv(s_data[2]); - glVertex2fv(s_data[4]); - glVertex2fv(s_data[6]); - glVertex2fv(s_data[8]); - glVertex2fv(s_data[10]); - glVertex2fv(s_data[12]); - glVertex2fv(s_data[14]); - glVertex2fv(s_data[16]); - glVertex2fv(s_data[18]); - glVertex2fv(s_data[20]); - glVertex2fv(s_data[22]); - glVertex2fv(s_data[24]); - glVertex2fv(s_data[26]); - glVertex2fv(s_data[28]); - glVertex2fv(s_data[29]); - glVertex2fv(s_data[27]); - glVertex2fv(s_data[25]); - glVertex2fv(s_data[23]); - glVertex2fv(s_data[21]); - glVertex2fv(s_data[19]); - glVertex2fv(s_data[17]); - glVertex2fv(s_data[15]); - glVertex2fv(s_data[13]); - glVertex2fv(s_data[11]); - glVertex2fv(s_data[9]); - glVertex2fv(s_data[7]); - glVertex2fv(s_data[5]); - glVertex2fv(s_data[3]); - glVertex2fv(s_data[1]); - glEnd(); - -} - diff --git a/lib/glut-3.7.6/progs/demos/ideas/t.c b/lib/glut-3.7.6/progs/demos/ideas/t.c deleted file mode 100644 index 31140d146..000000000 --- a/lib/glut-3.7.6/progs/demos/ideas/t.c +++ /dev/null @@ -1,165 +0,0 @@ -/* - * (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 - -float t_data[][2] = { - {2.986667, 14.034801}, - {2.445128, 10.088024}, - {1.788718, 9.236438}, - {2.264615, 7.664279}, - {1.165128, 5.666326}, - {2.034872, 4.945752}, - {1.132308, 3.766633}, - {2.182564, 3.570113}, - {1.411282, 2.309109}, - {2.510769, 2.341863}, - {2.149744, 1.048106}, - {3.364103, 1.375640}, - {3.167180, 0.327533}, - {4.381538, 0.736950}, - {5.005128, 0.032753}, - {5.612308, 0.638690}, - {6.235898, 0.540430}, - {7.187692, 1.162743}, - - {1.985641, 9.039918}, - {2.133333, 10.186285}, - {1.509744, 9.023541}, - {1.608205, 9.662231}, - {1.050256, 9.023541}, - {1.050256, 9.334698}, - {0.196923, 9.007165}, - - {2.363077, 9.711361}, - {2.264615, 9.023541}, - {3.282051, 9.563972}, - {3.446154, 9.023541}, - {4.069744, 9.531218}, - {4.299487, 9.236438}, - {4.644103, 9.613101}, - {5.251282, 9.875128}, - -}; - -void draw_t(void) { - - glBegin(GL_TRIANGLE_STRIP); - glVertex2fv(t_data[0]); - glVertex2fv(t_data[1]); - glVertex2fv(t_data[2]); - glVertex2fv(t_data[3]); - glVertex2fv(t_data[4]); - glVertex2fv(t_data[5]); - glVertex2fv(t_data[6]); - glVertex2fv(t_data[7]); - glVertex2fv(t_data[8]); - glVertex2fv(t_data[9]); - glVertex2fv(t_data[10]); - glVertex2fv(t_data[11]); - glVertex2fv(t_data[12]); - glVertex2fv(t_data[13]); - glVertex2fv(t_data[14]); - glVertex2fv(t_data[15]); - glVertex2fv(t_data[16]); - glVertex2fv(t_data[17]); - glEnd(); - - glBegin(GL_TRIANGLE_STRIP); - glVertex2fv(t_data[18]); - glVertex2fv(t_data[19]); - glVertex2fv(t_data[20]); - glVertex2fv(t_data[21]); - glVertex2fv(t_data[22]); - glVertex2fv(t_data[23]); - glVertex2fv(t_data[24]); - glEnd(); - - glBegin(GL_TRIANGLE_STRIP); - glVertex2fv(t_data[25]); - glVertex2fv(t_data[26]); - glVertex2fv(t_data[27]); - glVertex2fv(t_data[28]); - glVertex2fv(t_data[29]); - glVertex2fv(t_data[30]); - glVertex2fv(t_data[31]); - glVertex2fv(t_data[32]); - glEnd(); - - glBegin(GL_LINE_STRIP); - glVertex2fv(t_data[0]); - glVertex2fv(t_data[2]); - glVertex2fv(t_data[4]); - glVertex2fv(t_data[6]); - glVertex2fv(t_data[8]); - glVertex2fv(t_data[10]); - glVertex2fv(t_data[12]); - glVertex2fv(t_data[14]); - glVertex2fv(t_data[16]); - glVertex2fv(t_data[17]); - glVertex2fv(t_data[15]); - glVertex2fv(t_data[13]); - glVertex2fv(t_data[11]); - glVertex2fv(t_data[9]); - glVertex2fv(t_data[7]); - glVertex2fv(t_data[5]); - glVertex2fv(t_data[3]); - glVertex2fv(t_data[1]); - glEnd(); - - glBegin(GL_LINE_STRIP); - glVertex2fv(t_data[18]); - glVertex2fv(t_data[20]); - glVertex2fv(t_data[22]); - glVertex2fv(t_data[24]); - glVertex2fv(t_data[23]); - glVertex2fv(t_data[21]); - glVertex2fv(t_data[19]); - glEnd(); - - glBegin(GL_LINE_STRIP); - glVertex2fv(t_data[26]); - glVertex2fv(t_data[28]); - glVertex2fv(t_data[30]); - glVertex2fv(t_data[32]); - glVertex2fv(t_data[31]); - glVertex2fv(t_data[29]); - glVertex2fv(t_data[27]); - glVertex2fv(t_data[25]); - glEnd(); - -} - diff --git a/lib/glut-3.7.6/progs/demos/ideas/w.c b/lib/glut-3.7.6/progs/demos/ideas/w.c deleted file mode 100644 index f0637cc40..000000000 --- a/lib/glut-3.7.6/progs/demos/ideas/w.c +++ /dev/null @@ -1,245 +0,0 @@ -/* - * (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 - -float w_data[][2] = { - {2.400000, 12.899384-3.0}, - {1.624615, 12.344969-3.0}, - {1.513846, 11.790554-3.0}, - {0.812308, 11.310061-3.0}, - {1.292308, 10.570842-3.0}, - {0.387692, 9.554415-3.0}, - {1.163077, 8.907598-3.0}, - {0.443077, 8.427105-3.0}, - {1.236923, 7.983573-3.0}, - {0.627692, 6.911705-3.0}, - {1.218462, 6.874743-3.0}, - {0.701538, 5.765914-3.0}, - {1.089231, 5.858316-3.0}, - {0.590769, 5.082136-3.0}, - - {0.904615, 5.636550-3.0}, - {1.070769, 6.227926-3.0}, - {1.716923, 6.708419-3.0}, - {1.993846, 7.577002-3.0}, - {2.603077, 7.780287-3.0}, - {2.621538, 8.408625-3.0}, - {3.138462, 8.630390-3.0}, - {3.193846, 9.314168-3.0}, - {4.080000, 10.995893-3.0}, - {4.209231, 11.550308-3.0}, - - {4.689231, 12.954825-3.0}, - {4.209231, 11.809035-3.0}, - {4.615385, 12.030801-3.0}, - {4.006154, 10.552361-3.0}, - {4.633846, 10.995893-3.0}, - {4.080000, 9.887064-3.0}, - {4.966154, 9.850102-3.0}, - {4.375385, 8.981520-3.0}, - {5.409231, 8.889117-3.0}, - {4.744616, 7.946612-3.0}, - {5.704616, 7.687885-3.0}, - {5.058462, 7.041068-3.0}, - {5.889231, 6.135524-3.0}, - {5.427692, 5.599589-3.0}, - {5.501538, 5.026694-3.0}, - - {5.630769, 5.414784-3.0}, - {5.741539, 5.987679-3.0}, - {6.203077, 6.264887-3.0}, - {6.572308, 7.281314-3.0}, - {7.347692, 7.817248-3.0}, - {7.255384, 9.221766-3.0}, - {7.993846, 9.166325-3.0}, - {7.458462, 11.032854-3.0}, - {8.603077, 11.550308-3.0}, - {7.403077, 11.975359-3.0}, - {8.510769, 12.511293-3.0}, - {7.070769, 12.326488-3.0}, - {7.956923, 12.936345-3.0}, - {6.590769, 12.308008-3.0}, - {7.236923, 12.954825-3.0}, - {6.000000, 12.012321-3.0}, - {6.461538, 12.511293-3.0}, - -}; - -void draw_w(void) { - - glBegin(GL_TRIANGLE_STRIP); - glVertex2fv(w_data[0]); - glVertex2fv(w_data[1]); - glVertex2fv(w_data[2]); - glVertex2fv(w_data[3]); - glVertex2fv(w_data[4]); - glVertex2fv(w_data[5]); - glVertex2fv(w_data[6]); - glVertex2fv(w_data[7]); - glVertex2fv(w_data[8]); - glVertex2fv(w_data[9]); - glVertex2fv(w_data[10]); - glVertex2fv(w_data[11]); - glVertex2fv(w_data[12]); - glVertex2fv(w_data[13]); - glEnd(); - - glBegin(GL_TRIANGLE_STRIP); - glVertex2fv(w_data[14]); - glVertex2fv(w_data[15]); - glVertex2fv(w_data[16]); - glVertex2fv(w_data[17]); - glVertex2fv(w_data[18]); - glVertex2fv(w_data[19]); - glVertex2fv(w_data[20]); - glVertex2fv(w_data[21]); - glVertex2fv(w_data[22]); - glVertex2fv(w_data[23]); - glEnd(); - - glBegin(GL_TRIANGLE_STRIP); - glVertex2fv(w_data[24]); - glVertex2fv(w_data[25]); - glVertex2fv(w_data[26]); - glVertex2fv(w_data[27]); - glVertex2fv(w_data[28]); - glVertex2fv(w_data[29]); - glVertex2fv(w_data[30]); - glVertex2fv(w_data[31]); - glVertex2fv(w_data[32]); - glVertex2fv(w_data[33]); - glVertex2fv(w_data[34]); - glVertex2fv(w_data[35]); - glVertex2fv(w_data[36]); - glVertex2fv(w_data[37]); - glVertex2fv(w_data[38]); - glEnd(); - - glBegin(GL_TRIANGLE_STRIP); - glVertex2fv(w_data[39]); - glVertex2fv(w_data[40]); - glVertex2fv(w_data[41]); - glVertex2fv(w_data[42]); - glVertex2fv(w_data[43]); - glVertex2fv(w_data[44]); - glVertex2fv(w_data[45]); - glVertex2fv(w_data[46]); - glVertex2fv(w_data[47]); - glVertex2fv(w_data[48]); - glVertex2fv(w_data[49]); - glVertex2fv(w_data[50]); - glVertex2fv(w_data[51]); - glVertex2fv(w_data[52]); - glVertex2fv(w_data[53]); - glVertex2fv(w_data[54]); - glVertex2fv(w_data[55]); - glEnd(); - - glBegin(GL_LINE_STRIP); - glVertex2fv(w_data[0]); - glVertex2fv(w_data[2]); - glVertex2fv(w_data[4]); - glVertex2fv(w_data[6]); - glVertex2fv(w_data[8]); - glVertex2fv(w_data[10]); - glVertex2fv(w_data[12]); - glVertex2fv(w_data[13]); - glVertex2fv(w_data[11]); - glVertex2fv(w_data[9]); - glVertex2fv(w_data[7]); - glVertex2fv(w_data[5]); - glVertex2fv(w_data[3]); - glVertex2fv(w_data[1]); - glVertex2fv(w_data[0]); - glEnd(); - - glBegin(GL_LINE_STRIP); - glVertex2fv(w_data[14]); - glVertex2fv(w_data[16]); - glVertex2fv(w_data[18]); - glVertex2fv(w_data[20]); - glVertex2fv(w_data[22]); - glVertex2fv(w_data[23]); - glVertex2fv(w_data[21]); - glVertex2fv(w_data[19]); - glVertex2fv(w_data[17]); - glVertex2fv(w_data[15]); - glVertex2fv(w_data[14]); - glEnd(); - - glBegin(GL_LINE_STRIP); - glVertex2fv(w_data[24]); - glVertex2fv(w_data[26]); - glVertex2fv(w_data[28]); - glVertex2fv(w_data[30]); - glVertex2fv(w_data[32]); - glVertex2fv(w_data[34]); - glVertex2fv(w_data[36]); - glVertex2fv(w_data[38]); - glVertex2fv(w_data[37]); - glVertex2fv(w_data[35]); - glVertex2fv(w_data[33]); - glVertex2fv(w_data[31]); - glVertex2fv(w_data[29]); - glVertex2fv(w_data[27]); - glVertex2fv(w_data[25]); - glVertex2fv(w_data[24]); - glEnd(); - - glBegin(GL_LINE_STRIP); - glVertex2fv(w_data[39]); - glVertex2fv(w_data[41]); - glVertex2fv(w_data[43]); - glVertex2fv(w_data[45]); - glVertex2fv(w_data[47]); - glVertex2fv(w_data[49]); - glVertex2fv(w_data[51]); - glVertex2fv(w_data[53]); - glVertex2fv(w_data[55]); - glVertex2fv(w_data[54]); - glVertex2fv(w_data[52]); - glVertex2fv(w_data[50]); - glVertex2fv(w_data[48]); - glVertex2fv(w_data[46]); - glVertex2fv(w_data[44]); - glVertex2fv(w_data[42]); - glVertex2fv(w_data[40]); - glVertex2fv(w_data[39]); - glEnd(); - -} - diff --git a/lib/glut-3.7.6/progs/demos/lorenz/Imakefile b/lib/glut-3.7.6/progs/demos/lorenz/Imakefile deleted file mode 100644 index 4c9c2d779..000000000 --- a/lib/glut-3.7.6/progs/demos/lorenz/Imakefile +++ /dev/null @@ -1,15 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1996. */ - -#include "../../../Glut.cf" - -TARGETS = lorenz - -SRCS = lorenz.c -OBJS = lorenz.o - -AllTarget($(TARGETS)) - -NormalGlutProgramTarget(lorenz,$(OBJS)) - -DependTarget() diff --git a/lib/glut-3.7.6/progs/demos/lorenz/lorenz.c b/lib/glut-3.7.6/progs/demos/lorenz/lorenz.c deleted file mode 100644 index 0bbd5567f..000000000 --- a/lib/glut-3.7.6/progs/demos/lorenz/lorenz.c +++ /dev/null @@ -1,644 +0,0 @@ -/* - * Lorenz Attractor Demo - * - * Adapted from code originally written for the 4D60GT by - * Aaron T. Ferrucci (aaronf@cse.ucsc.edu), 7/3/92. - * - * Description: - * - * This program shows some particles stuck in a Lorenz attractor (the parameters - * used are r=28, b=8/3, sigma=10). The eye is attracted to the red particle, - * with a force directly proportionate to distance. A command line - * puts the whole mess inside a box made of hexagons. I think this helps to - * maintain the illusion of 3 dimensions, but it can slow things down. - * Other options allow you to play with the redraw rate and the number of new - * lines per redraw. So you can customize it to the speed of your machine. - * - * For general info on Lorenz attractors I recommend "An Introduction to - * the Lorenz Equations", IEEE Transactions on Circuits and Systems, August '83. - * - * Bugs: hidden surface removal doesn't apply to hexagons, and - * works poorly on lines when they are too close together. - * - * Notes on OpenGL port: - * - * The timer functions do not exist in OpenGL, so the drawing occurs in a - * continuous loop, controlled by step, stop and go input from the keyboard. - * Perhaps system function could be called to control timing. - * - */ - -#include -#include -#include -#include -#include -#include - -float -random_float(void) -{ - return (float)rand()/RAND_MAX; -} - -void -seed_random_float(long seed) -{ - srand(seed); -} - -static GLuint asphere; - -#define POINTMASK 511 -#define G (0.002) /* eyept to red sphere gravity */ -#define LG (0.3) -#define CUBESIDE (120.) -#define CUBESCALE (23.) -#define CUBEOFFX (-4.) -#define CUBEOFFY (0.) -#define CUBEOFFZ (57.) -#define FALSE 0 -#define TRUE 1 - -/* globals */ -float sigma = 10., r = 28., b = 8./3., dt = 0.003; -int rp = 0, bp = 0, gp = 0, yp = 0, mp = 0; -long xmax, ymax, zmax, zmin; -float rv[POINTMASK+1][3], /* red points */ - bv[POINTMASK+1][3], /* blue points */ - gv[POINTMASK+1][3], /* green points */ - yv[POINTMASK+1][3], /* yellow points */ - mv[POINTMASK+1][3]; /* magenta points */ - -int lpf; /* number of new lines per frame */ - -float eyex[3], /* eye location */ - eyev[3], /* eye velocity */ - eyel[3]; /* lookat point location */ -GLint fovy = 600; -float dx, dy, dz; -GLUquadricObj *quadObj; - -float cubeoffx = CUBEOFFX; -float cubeoffy = CUBEOFFY; -float cubeoffz = CUBEOFFZ; -float farplane = 80.; - -int animate = 1; - -/* option flags */ -GLboolean hexflag, /* hexagons? */ - sflag, - fflag, - wflag, - gflag, - debug; - -/* option values */ -short hexbright; /* brightness for hexagon color */ -int speed, /* speed (number of new line segs per redraw) */ - frame; /* frame rate (actually noise value for TIMER0) */ -float a = 0, - da; /* hexagon rotational velocity (.1 degree/redraw) */ -float gravity; - -/* function declarations */ -void init_3d(void); -void init_graphics(void); -void draw_hexcube(void); -void draw_hexplane(void); -void draw_hexagon(void); -void move_eye(void); -void redraw(void); -void next_line(float v[][3], int *p); -void parse_args(int argc, char **argv); -void print_usage(char*); -void print_info(void); -void sphdraw(float args[4]); -void setPerspective(int angle, float aspect, float zNear, float zFar); - - -static void Reshape(int width, int height) -{ - - glViewport(0,0,width,height); - glClear(GL_COLOR_BUFFER_BIT); - xmax = width; - ymax = height; -} - -/* ARGSUSED1 */ -static void Key(unsigned char key, int x, int y) -{ - - switch (key) { - case 'g': - animate = 1; - glutPostRedisplay(); - break; - case 's': - animate = 0; - glutPostRedisplay(); - break; - case 27: - gluDeleteQuadric(quadObj); - exit(0); - } -} - -static void Draw(void) -{ - int i; - - if (animate) { - i = speed; - while (i--) { - next_line(rv, &rp); - next_line(bv, &bp); - next_line(gv, &gp); - next_line(yv, &yp); - next_line(mv, &mp); - } - glPushMatrix(); - move_eye(); - redraw(); - glPopMatrix(); - } -} - -int main(int argc, char **argv) -{ - glutInitWindowSize(600, 600); - - glutInit(&argc, argv); - - parse_args(argc, argv); - - glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); - - glutCreateWindow("Lorenz Attractors"); - - init_3d(); - init_graphics(); - - /* draw the first POINTMASK points in each color */ - while(rp < POINTMASK) { - next_line(rv, &rp); - next_line(bv, &bp); - next_line(gv, &gp); - next_line(yv, &yp); - next_line(mv, &mp); - } - - eyex[0] = eyex[1] = eyex[2] = 0.; - eyel[0] = rv[rp][0]; - eyel[1] = rv[rp][1]; - eyel[2] = rv[rp][2]; - - glPushMatrix(); - move_eye(); - redraw(); - glPopMatrix(); - - glutReshapeFunc(Reshape); - glutKeyboardFunc(Key); - glutIdleFunc(Draw); - glutDisplayFunc(Draw); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} - -/* compute the next point on the path according to Lorenz' equations. */ -void next_line(float v[][3], int *p) -{ - - dx = sigma * (v[*p][1] - v[*p][0]) * dt; - dy = (r*v[*p][0] - v[*p][1] + v[*p][0]*v[*p][2]) * dt; - dz = (v[*p][0] *v[*p][1] + b*v[*p][2]) * dt; - - v[(*p + 1) & POINTMASK][0] = v[*p][0] + dx; - v[(*p + 1) & POINTMASK][1] = v[*p][1] + dy; - v[(*p + 1) & POINTMASK][2] = v[*p][2] - dz; - *p = (*p + 1) & POINTMASK; -} - -void drawLines(int index, float array[POINTMASK][3]) -{ - int p; - int i; - -#define LINE_STEP 4 - - p = (index+1)&POINTMASK; - i = LINE_STEP-(p % LINE_STEP); - if (i == LINE_STEP) i=0; - glBegin(GL_LINE_STRIP); - /* draw points in order from oldest to newest */ - while(p != index) { - if (i == 0) { - glVertex3fv(array[p]); - i = LINE_STEP; - } - i--; - p = (p+1) & POINTMASK; - } - glVertex3fv(array[index]); - glEnd(); -} - -void redraw(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - if(hexflag) - draw_hexcube(); - - glColor3f(1.0, 0.0, 0.0); - drawLines(rp, rv); - sphdraw(rv[rp]); - - glColor3f(0.0, 0.0, 1.0); - drawLines(bp, bv); - sphdraw(bv[bp]); - - glColor3f(0.0, 1.0, 0.0); - drawLines(gp, gv); - sphdraw(gv[gp]); - - glColor3f(1.0, 0.0, 1.0); - drawLines(yp, yv); - sphdraw(yv[yp]); - - glColor3f(0.0, 1.0, 1.0); - drawLines(mp, mv); - sphdraw(mv[mp]); - - glutSwapBuffers(); -} - -void move_eye(void) -{ - /* first move the eye */ - eyev[0] += gravity * (rv[rp][0] - eyex[0]); - eyev[1] += gravity * (rv[rp][1] - eyex[1]); - eyev[2] += gravity * (rv[rp][2] - eyex[2]); - - /* adjust position using new velocity */ - eyex[0] += eyev[0] * dt; - eyex[1] += eyev[1] * dt; - eyex[2] += eyev[2] * dt; - - /* move the lookat point */ - /* it catches up to the red point if it's moving slowly enough */ - eyel[0] += LG * (rv[rp][0] - eyel[0]); - eyel[1] += LG * (rv[rp][1] - eyel[1]); - eyel[2] += LG * (rv[rp][2] - eyel[2]); - - /* change view */ - gluLookAt(eyex[0], eyex[1], eyex[2], eyel[0], eyel[1], eyel[2], - 0, 1, 0); -} - -void draw_hexcube(void) -{ - - a += da; - if(a >= 720.) /* depends on slowest rotation factor */ - a = 0.; - - /* draw hexplanes, without changing z-values */ - glDepthMask(GL_FALSE); - glDisable(GL_DEPTH_TEST); - - /* x-y plane */ - glColor3f(0.2, 0.2, 0.6); - glPushMatrix(); - glTranslatef(cubeoffx, cubeoffy, cubeoffz); - glScalef(CUBESCALE, CUBESCALE, CUBESCALE); - draw_hexplane(); - glPopMatrix(); - - /* x-y plane, translated */ - glPushMatrix(); - glTranslatef(cubeoffx, cubeoffy, cubeoffz - 2*CUBESIDE); - glScalef(CUBESCALE, CUBESCALE, CUBESCALE); - draw_hexplane(); - glPopMatrix(); - - glColor3f(0.6, 0.2, 0.2); - /* x-z plane, translate low */ - glPushMatrix(); - glRotatef(90, 1.0, 0.0, 0.0); - glTranslatef(cubeoffx, cubeoffz - CUBESIDE, -cubeoffy + CUBESIDE); - glScalef(CUBESCALE, CUBESCALE, CUBESCALE); - draw_hexplane(); - glPopMatrix(); - - /* x-z plane, translate high */ - glPushMatrix(); - glRotatef(90, 1.0, 0.0, 0.0); - glTranslatef(cubeoffx, cubeoffz - CUBESIDE, -cubeoffy - CUBESIDE); - glScalef(CUBESCALE, CUBESCALE, CUBESCALE); - draw_hexplane(); - glPopMatrix(); - - glColor3f(0.2, 0.6, 0.2); - /* y-z plane, translate low */ - glPushMatrix(); - glRotatef(90, 0.0, 1.0, 0.0); - glTranslatef(-cubeoffz + CUBESIDE, cubeoffy, cubeoffx + CUBESIDE); - glScalef(CUBESCALE, CUBESCALE, CUBESCALE); - draw_hexplane(); - glPopMatrix(); - - /* y-z plane, translate high */ - glPushMatrix(); - glRotatef (90, 0.0, 1.0, 0.0); - glTranslatef(-cubeoffz + CUBESIDE, cubeoffy, cubeoffx - CUBESIDE); - glScalef(CUBESCALE, CUBESCALE, CUBESCALE); - draw_hexplane(); - glPopMatrix(); - - glFlush(); - glDepthMask(GL_TRUE); - glEnable(GL_DEPTH_TEST); -} - -float hex_data[8][3] = { - {0., 0., 0.}, - {1.155, 0., 0.}, - {0.577, 1., 0.}, - {-0.577, 1., 0.}, - {-1.155, 0., 0.}, - {-0.577, -1., 0.}, - {0.577, -1., 0.}, - {1.155, 0., 0.}, -}; - -/* draws a hexagon 2 units across, in the x-y plane, */ -/* centered at <0, 0, 0> */ - -void draw_hexagon(void) -{ - if(wflag) { - glPushMatrix(); - glRotatef(a, 0.0, 0.0, 1.0); - } - - glBegin(GL_TRIANGLE_FAN); - glVertex3fv(hex_data[0]); - glVertex3fv(hex_data[1]); - glVertex3fv(hex_data[2]); - glVertex3fv(hex_data[3]); - glVertex3fv(hex_data[4]); - glVertex3fv(hex_data[5]); - glVertex3fv(hex_data[6]); - glVertex3fv(hex_data[7]); - glEnd(); - - if(wflag) - glPopMatrix(); -} - -void tmp_draw_hexplane(void) -{ - glRectf(-2.0, -2.0, 2.0, 2.0); -} - -/* draw 7 hexagons */ -void draw_hexplane(void) -{ - if(wflag) { - glPushMatrix(); - glRotatef(-0.5*a, 0.0, 0.0, 1.0); - } - - /* center , <0, 0, 0> */ - draw_hexagon(); - - /* 12 o'clock, <0, 4, 0> */ - glTranslatef(0., 4., 0.); - draw_hexagon(); - - /* 10 o'clock, <-3.464, 2, 0> */ - glTranslatef(-3.464, -2., 0.); - draw_hexagon(); - - /* 8 o'clock, <-3.464, -2, 0> */ - glTranslatef(0., -4., 0.); - draw_hexagon(); - - /* 6 o'clock, <0, -4, 0> */ - glTranslatef(3.464, -2., 0.); - draw_hexagon(); - - /* 4 o'clock, <3.464, -2, 0> */ - glTranslatef(3.464, 2., 0.); - draw_hexagon(); - - /* 2 o'clock, <3.464, 2, 0> */ - glTranslatef(0., 4., 0.); - draw_hexagon(); - - if(wflag) - glPopMatrix(); -} - -void sphdraw(float args[3]) -{ - glPushMatrix(); - glTranslatef(args[0], args[1], args[2]); - glCallList(asphere); - glPopMatrix(); -} - -void setPerspective(int angle, float aspect, float zNear, float zFar) -{ - glPushAttrib(GL_TRANSFORM_BIT); - glMatrixMode(GL_PROJECTION); - gluPerspective(angle * 0.1, aspect, zNear, zFar); - glPopAttrib(); -} - -/* initialize global 3-vectors */ -void init_3d(void) -{ - (void)seed_random_float((long)time((time_t*)NULL)); - - /* initialize colored points */ - rv[0][0] = (float)random_float() * 10.; - rv[0][1] = (float)random_float() * 10.; - rv[0][2] = (float)random_float() * 10. - 10.; - - bv[0][0] = rv[0][0] + (float)random_float()*5.; - bv[0][1] = rv[0][1] + (float)random_float()*5.; - bv[0][0] = rv[0][2] + (float)random_float()*5.; - - gv[0][0] = rv[0][0] + (float)random_float()*5.; - gv[0][1] = rv[0][1] + (float)random_float()*5.; - gv[0][0] = rv[0][2] + (float)random_float()*5.; - - yv[0][0] = rv[0][0] + (float)random_float()*5.; - yv[0][1] = rv[0][1] + (float)random_float()*5.; - yv[0][0] = rv[0][2] + (float)random_float()*5.; - - mv[0][0] = rv[0][0] + (float)random_float()*5.; - mv[0][1] = rv[0][1] + (float)random_float()*5.; - mv[0][0] = rv[0][2] + (float)random_float()*5.; - - /* initialize eye velocity */ - eyev[0] = eyev[1] = eyev[2] = 0.; -} - - -void init_graphics(void) -{ - int width = 600; - int height = 600; - - xmax = width; - ymax = height; - glDrawBuffer(GL_BACK); - glEnable(GL_DEPTH_TEST); - glClearColor(0.0, 0.0, 0.0, 0.0); - glClearDepth(1.0); - - glEnable(GL_CULL_FACE); - glCullFace(GL_BACK); - - glViewport(0, 0, xmax, ymax); - setPerspective(fovy, (float)xmax/(float)ymax, 0.01, farplane); - quadObj = gluNewQuadric(); - gluQuadricNormals(quadObj, GLU_NONE); - asphere = glGenLists(1); - glNewList(asphere, GL_COMPILE); - gluSphere(quadObj, 0.3, 12, 8); - glEndList(); -} - -#define USAGE "usage message: this space for rent\n" -void parse_args(int argc, char **argv) -{ - hexflag = sflag = fflag = wflag = gflag = debug = FALSE; - - while (--argc) { - if (strcmp("-X", argv[argc]) == 0) { - debug = TRUE; - } else if (strcmp("-h", argv[argc]) == 0) { - print_usage(argv[0]); - exit(1); - } else if (strcmp("-i", argv[argc]) == 0) { - print_info(); - exit(1); - } else if (strcmp("-x", argv[argc]) == 0) { - hexflag = TRUE; - farplane = 300.; - } else if (strcmp("-s", argv[argc]) == 0) { - sflag = TRUE; - if (argv[argc+1]) - speed = atoi(argv[argc+1]); - else { - printf("%s: -s option requires an argument.\n", argv[0]); - exit(1); - } - } else if (strcmp("-f", argv[argc]) == 0) { - fflag = TRUE; - if (argv[argc+1]) - frame = atoi(argv[argc+1]); - else { - printf("%s: -f option requires an argument.\n", argv[0]); - exit(1); - } - if(frame < 0) { - fprintf(stderr, "Try a small positive value for \n"); - fprintf(stderr, "'f'; this is the number of vertical "); - fprintf(stderr, "retraces per redraw\n"); - fprintf(stderr, "Try %s -h for help\n", argv[0]); - exit(1); - } - } else if (strcmp("-w", argv[argc]) == 0) { - wflag = TRUE; - if (argv[argc+1]) - da = atof(argv[argc+1]); - else { - printf("%s: -w option requires an argument.\n", argv[0]); - exit(1); - } - if(da > 10.) { - fprintf(stderr, "That's a large rotational velocity ('w')"); - fprintf(stderr, " but you asked for it\n"); - } - break; - } else if (strcmp("-g", argv[argc]) == 0) { - gflag = TRUE; - if (argv[argc+1]) - gravity = atof(argv[argc+1]); - else { - printf("%s: -g option requires an argument.\n", argv[0]); - exit(1); - } - if(gravity <= 0) { - fprintf(stderr, "Gravity ('g') should be positive\n"); - fprintf(stderr, "Try %s -h for help\n", argv[0]); - } - } else if (strcmp("-?", argv[argc]) == 0) { - fprintf(stderr, USAGE); - } - } - - /* set up default values */ - if(!sflag) - speed = 3; - if(!fflag) - frame = 2; - if(!wflag) - da = 0.; - if(!gflag) - gravity = G; -} - -void print_usage(char *program) -{ -printf("\nUsage: %s [-h] [-i] [-x] [-s speed]", program); -printf(" [-w rot_v] [-g gravity]\n\n"); -printf("-h Print this message.\n"); -printf("-i Print information about the demo.\n"); -printf("-x Enclose the particles in a box made of hexagons.\n"); -printf("-s speed Sets the number of new line segments per redraw \n"); -printf(" interval per line. Default value: 3.\n"); - -/*** The X port does not currently include a timer, so this feature is disabled. -printf("-f framenoise Sets the number of vertical retraces per redraw\n"); -printf(" interval. Example: -f 2 specifies one redraw per\n"); -printf(" 2 vertical retraces, or 30 frames per second.\n"); -printf(" Default value: 2.\n"); -************/ - -printf("-w rot_v Spins the hexagons on their centers, and the sides\n"); -printf(" of the box on their centers. Hexagons spin at the\n"); -printf(" rate rot_v degrees per redraw, and box sides spin\n"); -printf(" at -rot_v/2 degrees per redraw.\n"); -printf("-g gravity Sets the strength of the attraction of the eye to\n"); -printf(" the red particle. Actually, it's not gravity since\n"); -printf(" the attraction is proportionate to distance.\n"); -printf(" Default value: 0.002. Try large values!\n"); -/* input added for GLX port */ -printf(" Executions control: \n"); -printf(" step through single frames\n"); -printf(" g begin continuous frames\n"); -printf(" s stop continuous frames\n"); - -} - -void print_info(void) -{ -printf("\nLORENZ ATTRACTOR DEMO\n\n"); -printf("This program shows some particles stuck in a Lorenz attractor (the \n"); -printf("parameters used are r=28, b=8/3, sigma=10). The eye is attracted to \n"); -printf("the red particle, with a force directly proportional to distance. \n"); -printf("A command line argument puts the particles inside a box made of hexagons, \n"); -printf("helping to maintain the sense of 3 dimensions, but it can slow things down.\n"); -printf("Other options allow you to play with the redraw rate and gravity.\n\n"); - -printf("Try lorenz -h for the usage message.\n"); -} diff --git a/lib/glut-3.7.6/progs/demos/lorenz/lorenz.dsp b/lib/glut-3.7.6/progs/demos/lorenz/lorenz.dsp deleted file mode 100644 index e5eb290c4..000000000 --- a/lib/glut-3.7.6/progs/demos/lorenz/lorenz.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="lorenz" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=lorenz - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "lorenz.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "lorenz.mak" CFG="lorenz - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "lorenz - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "lorenz - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "lorenz - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "lorenz - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "lorenz - Win32 Release" -# Name "lorenz - Win32 Debug" -# Begin Source File - -SOURCE=.\lorenz.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/demos/newave/Imakefile b/lib/glut-3.7.6/progs/demos/newave/Imakefile deleted file mode 100644 index 12d04471d..000000000 --- a/lib/glut-3.7.6/progs/demos/newave/Imakefile +++ /dev/null @@ -1,16 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1998. */ - -#include "../../../Glut.cf" - -TARGETS = newave - -SRCS = newave.c texture.c - -OBJS = newave.o texture.o - -AllTarget($(TARGETS)) - -NormalGlutProgramTarget(newave,$(OBJS)) - -DependTarget() diff --git a/lib/glut-3.7.6/progs/demos/newave/newave.c b/lib/glut-3.7.6/progs/demos/newave/newave.c deleted file mode 100644 index 802b6ebe6..000000000 --- a/lib/glut-3.7.6/progs/demos/newave/newave.c +++ /dev/null @@ -1,890 +0,0 @@ -/* - - Newave - Ported from the original IrisGL SGI demo - (see https://www.sgi.com/toolbox/src/) - - I've ported an old IrisGL demo, newave, to OpenGL and GLUT. - This port has a couple of new features compared to the - "ancient" GL demo: - - * environment mapping (very cool!) - * texture mapping - * line antialiasing (needs some work) - * better wave propagation - - I haven't implemented the mesh editing found in the old demo. - - By default the program loads "texmap.rgb" and "spheremap.rgb" - if no filenames are given as command line arguments. - Specify the texture map as the first argument and the sphere - map as the second argument. - - Left mouse rotates the scene, middle mouse or +/- keys zoom, - right mouse for menu. - - Erik Larsen - cayman@sprintmail.com - -*/ - -#include -#include -#include -#include "texture.h" - -#if defined(GL_EXT_texture_object) && !defined(GL_VERSION_1_1) -#define glBindTexture(A,B) glBindTextureEXT(A,B) -#define glGenTextures(A,B) glGenTexturesEXT(A,B) -#endif -#if defined(GL_EXT_polygon_offset) && !defined(GL_VERSION_1_1) -#define glPolygonOffset(A,B) glPolygonOffsetEXT(A,B) -/* OpenGL 1.1's polygon offset can be different for each - polygon mode primitive type. The EXT extension has - only one offset. */ -#define GL_POLYGON_OFFSET_FILL GL_POLYGON_OFFSET_EXT -#endif - -typedef int bool; -#define true 1 -#define false 0 - -/* Grid */ -#define MAXGRID 63 -enum {WIREFRAME, HIDDENLINE, FLATSHADED, SMOOTHSHADED, TEXTURED}; -enum {FULLSCREEN, FACENORMALS, ANTIALIAS, ENVMAP}; -enum {WEAK, NORMAL, STRONG}; -enum {SMALL, MEDIUM, LARGE, XLARGE}; -enum {CURRENT, FLAT, SPIKE, DIAGONALWALL, SIDEWALL, HOLE, - MIDDLEBLOCK, DIAGONALBLOCK, CORNERBLOCK, HILL, HILLFOUR}; -int displayMode = WIREFRAME; -int resetMode = DIAGONALBLOCK; -int grid = 17; -float dt = 0.004; -float force[MAXGRID][MAXGRID], - veloc[MAXGRID][MAXGRID], - posit[MAXGRID][MAXGRID], - vertNorms[MAXGRID][MAXGRID][3], - faceNorms[2][MAXGRID][MAXGRID][3], - faceNormSegs[2][2][MAXGRID][MAXGRID][3]; -bool waving = false, editing = false, - drawFaceNorms = false, antialias = false, - envMap = false; -#define SQRTOFTWOINV 1.0 / 1.414213562 - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -int texWidth, texHeight; -GLubyte *texData; -char *texFilename1 = "texmap.rgb", *texFilename2 = "spheremap.rgb"; -GLuint texId1, texId2; -float texCoords[MAXGRID][MAXGRID][2]; - -/* Viewing */ -float sphi=90.0, stheta=45.0; -float sdepth = 5.0/4.0 * MAXGRID; -float zNear=15.0, zFar=100.0; -float aspect = 5.0/4.0; -long xsize, ysize; -int downX, downY; -bool leftButton = false, middleButton = false; -int i,j; -GLfloat lightPosition[] = { 0.0, 0.0, 1.0, 1.0}; -int displayMenu, otherMenu, speedMenu, sizeMenu, - resetMenu, mainMenu; - -void getforce(void) -{ - float d; - - for(i=0;i 0) - { - add( avg, avg, faceNorms[0][i-1][j] ); - add( avg, avg, faceNorms[1][i-1][j] ); - } - /* Left & above */ - if (j > 0 && i < grid-1) - { - add( avg, avg, faceNorms[0][i][j-1] ); - add( avg, avg, faceNorms[1][i][j-1] ); - } - /* Left & below */ - if (j > 0 && i > 0) - { - add( avg, avg, faceNorms[1][i-1][j-1] ); - } - - /* Normalize */ - norm( avg ); - copy( vertNorms[i][j], avg ); - } - } -} - - -void getFaceNormSegs(void) -{ - float center0[3], center1[3], normSeg0[3], normSeg1[3]; - float geom0[3], geom1[3], geom2[3], geom3[3]; - for (i = 0; i < grid - 1; ++i) - { - for (j = 0; j < grid - 1; ++j) - { - geom0[0] = i; geom0[1] = j; geom0[2] = posit[i][j]; - geom1[0] = i; geom1[1] = j+1; geom1[2] = posit[i][j+1]; - geom2[0] = i+1; geom2[1] = j; geom2[2] = posit[i+1][j]; - geom3[0] = i+1; geom3[1] = j+1; geom3[2] = posit[i+1][j+1]; - - /* find center of triangle face by averaging three vertices */ - add( center0, geom2, geom0 ); - add( center0, center0, geom1 ); - scalDiv( center0, 3.0 ); - - add( center1, geom2, geom1 ); - add( center1, center1, geom3 ); - scalDiv( center1, 3.0 ); - - /* translate normal to center of triangle face to get normal segment */ - add( normSeg0, center0, faceNorms[0][i][j] ); - add( normSeg1, center1, faceNorms[1][i][j] ); - - copy( faceNormSegs[0][0][i][j], center0 ); - copy( faceNormSegs[1][0][i][j], center1 ); - - copy( faceNormSegs[0][1][i][j], normSeg0 ); - copy( faceNormSegs[1][1][i][j], normSeg1 ); - } - } -} - -void getTexCoords(void) -{ - for (i = 0; i < grid; ++i) - { - for (j = 0; j < grid; ++j) - { - texCoords[i][j][0] = (float)j/(float)(grid-1); - texCoords[i][j][1] = (float)i/(float)(grid-1); - } - } -} - - -void wave(void) -{ - if (waving) - { - getforce(); - getvelocity(); - getposition(); - glutPostRedisplay(); - } -} - -void go(void) -{ - waving = true; - editing = false; - glutIdleFunc(wave); -} - -void stop(void) -{ - waving = false; - glutIdleFunc(NULL); -} - -void edit(void) -{ - stop(); - editing = true; -} - -void reverse(void) -{ - for(i=1;i<(grid-1);i++) - for(j=1;j<(grid-1);j++) - veloc[i][j]= -veloc[i][j]; - - if (!waving) - go(); -} - -void reset(int value) -{ - if (waving) - stop(); - - if (value != CURRENT) - resetMode = value; - for(i=0;i grid/3 && j > grid/3)&&(i < grid*2/3 && j < grid*2/3))) ? grid/4 : 0.0; - break; - case DIAGONALWALL: - posit[i][j]= (((grid-i)-j<3) && ((grid-i)-j>0)) ? grid/6 : 0.0; - break; - case SIDEWALL: - posit[i][j]= (i==1) ? grid/4 : 0.0; - break; - case DIAGONALBLOCK: - posit[i][j]= ((grid-i)-j<3) ? grid/6 : 0.0; - break; - case MIDDLEBLOCK: - posit[i][j]= ((i > grid/3 && j > grid/3)&&(i < grid*2/3 && j < grid*2/3)) ? grid/4 : 0.0; - break; - case CORNERBLOCK: - posit[i][j]= ((i > grid*3/4 && j > grid*3/4)) ? grid/4 : 0.0; - break; - case HILL: - posit[i][j]= - (sin(M_PI * ((float)i/(float)grid)) + - sin(M_PI * ((float)j/(float)grid)))* grid/6.0; - break; - case HILLFOUR: - posit[i][j]= - (sin(M_PI*2 * ((float)i/(float)grid)) + - sin(M_PI*2 * ((float)j/(float)grid)))* grid/6.0; - break; - } - if (i==0||j==0||i==grid-1||j==grid-1) posit[i][j]=0.0; - } - glutPostRedisplay(); -} - -void setSize(int value) -{ - int prevGrid = grid; - switch(value) - { - case SMALL : grid = MAXGRID/4; break; - case MEDIUM: grid = MAXGRID/2; break; - case LARGE : grid = MAXGRID/1.5; break; - case XLARGE : grid = MAXGRID; break; - } - if (prevGrid > grid) - { - reset(resetMode); - } - zNear= grid/10.0; - zFar= grid*3.0; - sdepth = 5.0/4.0 * grid; - getTexCoords(); - glutPostRedisplay(); -} - -void setSpeed(int value) -{ - switch(value) - { - case WEAK : dt = 0.001; break; - case NORMAL: dt = 0.004; break; - case STRONG: dt = 0.008; break; - } -} - -void setDisplay(int value) -{ - displayMode = value; - switch(value) - { - case WIREFRAME : - glShadeModel(GL_FLAT); - glDisable(GL_LIGHTING); - break; - case HIDDENLINE: - glShadeModel(GL_FLAT); - glDisable(GL_LIGHTING); - break; - case FLATSHADED : - glShadeModel(GL_FLAT); - glEnable(GL_LIGHTING); - break; - case SMOOTHSHADED: - glShadeModel(GL_SMOOTH); - glEnable(GL_LIGHTING); - break; - case TEXTURED: - glShadeModel(GL_SMOOTH); - glEnable(GL_LIGHTING); - break; - } - glutPostRedisplay(); -} - -void setOther(int value) -{ - switch (value) - { - case FULLSCREEN: - glutFullScreen(); - break; - case FACENORMALS: - drawFaceNorms = !drawFaceNorms; - break; - case ANTIALIAS: - antialias = !antialias; - if (antialias) - { - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glEnable(GL_LINE_SMOOTH); - glLineWidth(1.5); - } - else - { - glDisable(GL_BLEND); - glDisable(GL_LINE_SMOOTH); - glLineWidth(1.0); - } - break; - case ENVMAP: - envMap = !envMap; - if (envMap) - { - glBindTexture(GL_TEXTURE_2D, texId2); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); - glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); - glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); - glEnable(GL_TEXTURE_GEN_S); - glEnable(GL_TEXTURE_GEN_T); - } - else - { - glBindTexture(GL_TEXTURE_2D, texId1); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - glDisable(GL_TEXTURE_GEN_S); - glDisable(GL_TEXTURE_GEN_T); - } - break; - } - glutPostRedisplay(); -} - -void setMain(int value) -{ - switch(value) - { - case 1: edit(); break; - case 2: go(); break; /* set idle func to something */ - case 3: stop(); break; /* set idle func to null */ - case 4: reverse(); break; - case 5: exit(0); break; - } -} - - -void drawFaceNormals(void) -{ - glColor3f(1.0,1.0,1.0); - for (i = 0; i < grid - 1; ++i) - { - for (j = 0; j < grid - 1; ++j) - { - glBegin(GL_LINES); - glVertex3fv(faceNormSegs[0][0][i][j]); - glVertex3fv(faceNormSegs[0][1][i][j]); - glEnd(); - - glBegin(GL_LINES); - glVertex3fv(faceNormSegs[1][0][i][j]); - glVertex3fv(faceNormSegs[1][1][i][j]); - glEnd(); - } - } -} - -void drawSmoothShaded(void) -{ - glColor3f(0.8f, 0.2f, 0.8f); - for (i = 0; i < grid - 1; ++i) - { - glBegin(GL_TRIANGLE_STRIP); - for (j = 0; j < grid; ++j) - { - glNormal3fv( vertNorms[i][j] ); - glVertex3f( i, j, posit[i][j] ); - glNormal3fv( vertNorms[i+1][j] ); - glVertex3f( i+1, j, posit[i+1][j] ); - } - glEnd(); - } -} - -void drawWireframe(void) -{ - glColor3f(1.0, 1.0, 1.0); - - for(i=0;i 1 && argv[1] != 0) - texFilename1 = argv[1]; - if (argc > 2 && argv[2] != 0) - texFilename2 = argv[2]; - glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_LEQUAL); - glClearColor(0.0, 0.0, 0.0, 0.0); - glPolygonOffset(1.0, 1.0); - glEnable(GL_CULL_FACE); - glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); - glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST); - glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); - glEnable(GL_COLOR_MATERIAL); - glColorMaterial(GL_FRONT, GL_DIFFUSE); - glLightfv (GL_LIGHT0, GL_POSITION, lightPosition); - glEnable(GL_LIGHT0); - loadImageTexture(); - - setSize(MEDIUM); - setSpeed(NORMAL); - setDisplay(TEXTURED); - setOther(ENVMAP); - reset(HILLFOUR); - - glutReshapeFunc(reshape); - glutDisplayFunc(display); - glutVisibilityFunc(visibility); - - glutKeyboardFunc(keyboard); - glutMouseFunc(mouse); - glutMotionFunc(motion); - - displayMenu = glutCreateMenu(setDisplay); - glutAddMenuEntry("Wireframe", WIREFRAME); - glutAddMenuEntry("Hidden Line", HIDDENLINE); - glutAddMenuEntry("Flat Shaded", FLATSHADED); - glutAddMenuEntry("Smooth Shaded", SMOOTHSHADED); - glutAddMenuEntry("Textured", TEXTURED); - - otherMenu = glutCreateMenu(setOther); - glutAddMenuEntry("Full Screen", FULLSCREEN); - glutAddMenuEntry("Face Normals", FACENORMALS); - glutAddMenuEntry("Antialias", ANTIALIAS); - glutAddMenuEntry("Environment Map", ENVMAP); - - speedMenu = glutCreateMenu(setSpeed); - glutAddMenuEntry("Weak", WEAK); - glutAddMenuEntry("Normal", NORMAL); - glutAddMenuEntry("Strong", STRONG); - - sizeMenu = glutCreateMenu(setSize); - glutAddMenuEntry("Small", SMALL); - glutAddMenuEntry("Medium", MEDIUM); - glutAddMenuEntry("Large", LARGE); - glutAddMenuEntry("Extra Large", XLARGE); - - resetMenu = glutCreateMenu(reset); - glutAddMenuEntry("Current", CURRENT); - glutAddMenuEntry("Spike", SPIKE); - glutAddMenuEntry("Hole", HOLE); - glutAddMenuEntry("Diagonal Wall", DIAGONALWALL); - glutAddMenuEntry("Side Wall", SIDEWALL); - glutAddMenuEntry("Middle Block", MIDDLEBLOCK); - glutAddMenuEntry("Diagonal Block", DIAGONALBLOCK); - glutAddMenuEntry("Corner Block", CORNERBLOCK); - glutAddMenuEntry("Hill", HILL); - glutAddMenuEntry("Hill Four", HILLFOUR); - - mainMenu = glutCreateMenu(setMain); - glutAddMenuEntry("Go", 2); - glutAddMenuEntry("Stop", 3); - glutAddMenuEntry("Reverse", 4); - glutAddSubMenu("Display", displayMenu); - glutAddSubMenu("Reset", resetMenu); - glutAddSubMenu("Size", sizeMenu); - glutAddSubMenu("Speed", speedMenu); - glutAddSubMenu("Other", otherMenu); - glutAddMenuEntry("Exit", 5); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} - - diff --git a/lib/glut-3.7.6/progs/demos/newave/newave.dsp b/lib/glut-3.7.6/progs/demos/newave/newave.dsp deleted file mode 100644 index 6aaf00471..000000000 --- a/lib/glut-3.7.6/progs/demos/newave/newave.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="newave" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=newave - 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 "newave.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 "newave.mak" CFG="newave - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "newave - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "newave - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "newave - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "newave - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "newave - Win32 Release" -# Name "newave - Win32 Debug" -# Begin Source File - -SOURCE=.\newave.c -# End Source File -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# Begin Source File - -SOURCE=.\texture.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/demos/newave/spheremap.rgb b/lib/glut-3.7.6/progs/demos/newave/spheremap.rgb deleted file mode 100644 index 87665fb5dbe374cd8fc6d83dc0372ac9cc0d4444..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143414 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 z%0Dj5;2xAEJT^?s9KX5e>zx)GJQxHLWO`aP+$r@X-KU-#YFXdmY?z%Y0o4o5L@;~- zTuGN(+ov%JV zyLoQ;^g?t{y08plPu@Z0%#FAAH(LHyOC>5x+r_u8uc{1}h5^9@I<&igc;Uq2<#U_Q zyz}q7S5BQgdE(fi{ku1>SvEaBw0u=lMO95hb9-k@ttzw|jTV!`GuEz9>h*GfxJ+m+ zf@BG;Z=fO5eG@YcwwARWlh2(S4rt~00kU={yeV*JTO8Z}efI4G6QpjEB;kU1!TO6Y z9{%_4@=o}Mcw@<8~PmX$;mo8Ipr}SSdT=W#@3-@4-X`vI5bqG zRciqtvuVwtHrTn>#LJ_#Ej^>t7{G4gC7e2S;^fme&+XZ|aqaTy$I`+-sH_y(IMu?R_?OJi>@@!mc7(7C~_lY%r@y^OZ~}lxZM04M)F{U}-cO ztFCYE9vB{9vTEJNZ9BK_IeP5ip6%NufoYc0;N z7%i5H^F&fXUcOGqR%@gzXj76?&+*z;%({yQSI2kXJ~`}DDOEz5LSxW#;hmt~P=De6 z&Nr@XCUpTQa)CCm_vzQp-+Q@bPzI2I5H_h0Iu`5HzJY_!?({Dn3+NZE9+Z>Q9%l*Q zdkJuaP!|-k`S2)}*hkw}UcC0){HC=FvEkc+nT$sxvFf(L$z|)d&#!53sB7z(+Q z&RyF!ZCE|s3S@Oj(B*W8BSF8n&~7p65iY@`1OQd2srpMw!PRklOK>N2Os!tOdE2gC z2aoNY0B*0PXU&&;cg!uH9BhwQ;3d@I#^~%FTDo%mo?FkKU){POUn&+Vgt>f=QOwa< z%rKeE0U=W}w0hDIoLKDLbNxV{SE<4Kma8mQA=J1f{XMV!bKlFCc9I%#hCWUz-}c;l z^Kag*cZp!H1Y;I01kCd^DqrvXGbdtWi!03iYZsa`GdP9aRRv~?fh{lug>;2ar_`DU zhPHn2#hpE?h6A21s7p51#mmCc%GUmg*>&6ZZK}1~^KBh_j~$xdw|m>BwM(1e&<;~K zy&(_*Il>94a-Hfi+`4fsLVCOq#HG@pNe^2}y}qb*$?8qpcJJML`1rO)yT{?E+O&Vi z+GPv-nq!eLRzhQ2XLpw?xM1zEckX|*Z+yg#0+~ln7Zt&N%xE>+tCm#qK|Y&Y)1i(| z4wN2!W>0UCQUm`{nbu}iVmt7>L-%i8dw=fbvriCZj}t2nT>I$A^)H8Q0!kKB4cM?! zBIawfMP2L9o@wZssdu)mo-E3uSX+nV4oGK8xawjh!`=`obej9NY~FEbCSX=^B=vng zZCDCrWi?G*gQH8=Za=WTw$NrW*KIv<;^5(ZJGQJ})>*)YXCRoMe!PVu!cv-e3w+o{ zX<_p0EW+&=G-~UA+xL zw$fIya@Wpn+ZNhj)>QAvF$8sdvDs#}RSdP6sjQMEt6NMpOY2(Cp4rglQEU0QiVRi@ zVecYv41am{;=kr@?k9!NrhZH+JaXcb3kTktvkEA*9OQf^Vlilqo{rVWPc;RXv=l^U z7MJm|^cB$}8>mSZnaq~Y@PL8maS!fa6|m@l1>kV17xc6?)WSAu--)9~mW|JB-nT05 z_gZXKb0^Q8JGE>1s`V>}d_0~+0iQR2w6p}e`9{jSvh{od~BTUiw^t{r^)tlE%@4s^C!pT)J zn>A3e>-yHQ*7(THJ1@O(bmveN5hQzISq{HGp0Mx8WW*OLma^GJ1{wUg3|Kp*B?6YH zZfc>!(>oO!K6-p(hsUG=#{m>plLD4kTuuMcncE-D9auvG9UE_fy>r(qFZA@*C^-P_ zi1ik;5zG&@wWxc~f!(tOJp%!K`@&YEFt;cSD_Vom?B-J)a)zh`Fxbh1>vXwN6P#tK zs#Yl1#|EDI*MsjqdAb$a^!-;(#G^$8(e~->XWxEv&z99oh9eTLR3MNQbj)s9H#-Et zw_5sGkjoVUA7KqouG~Ans>dzEX~|Q>7R;{Ovh&rqPwida6@%w)#lhR7P~z{n@UL$l zd~|iBqN<_2O_v2H2c0fgwfe~7rm6u&~Ap|PWX<@V{Z!H$-(v!8!_c`gn*WMd^C zxh7j7;&_gqm>H_9E*9n*gY0wx%m^%YcfgRVEbbZ#o8se*;n~$I#_K$0rA7lnkV(U1 z(zDsBijwgUUzj^LK%zW(3(2i#Z+yC^BJAWqeK;4#2SGQ~SqdZd9pj5jeIxa@g6@uT zhelgo0tahxPHMKZKY~O)-mqfJ>1S#HivsK`o9=9=2aBqxcwk9ck-xHIa&FiDUAuN} z*}Qgc^~Sw>m-aW5`C-(jRFQ$)~ z02q`u_OC?pwRX*#ExYG;@15T{H`!iYQq;J-)93StW3}}@2IMYa{=jR#c5d5rZIxLq zEEx>3G8iJ2!R9N&0a4!3oo}fh@l`LG=&X;r>{^15XE7;r@jG*^{>aKtug;xsCK0sQ zO%Q%PefYz@WcTJg_~)@<>7A5+*J>*cRn+uOHX3@G^A)wNmHvETX~d+?qovXd`W7`R zjgI)j!)M>RGa+E0v&^Jt+2yWhTi=*)$-Krj@m?-`w4wSD*IeTNS0 zo8Pu_(d6u8Uya}EKmwpMIEn*h9i29;TiCraB@=i4acI|2ozp67TD-uOlS1LE%^|7mJaM(G_yn^DA%^x2==0Y{(F@#v>cD%jDWV4De z78ZQh3c$kkmH3Op0@QMsBgA{^1y5`YEBX+gFsbzZkg&S*CPYhfc z*~*5+HDRA!uhwg{`R@FpP_!&i-o9Y=1h#*3@5th@{?_X9@?c4H<;~Z>`2NcmR>W;) zDep0C6`5SI$y&1Xr7yp~_s)&EXrK&auC~F6MGJ@8M`qUSogJ>PAUOKofb^5D~ua+@=Dq&iVGb^r9`dwz)zvTABsit zO|I$TftpyTBwk+~^_t8QvB@1@bn?{$-T4}c41qj)D^T%}sBQmG+mSm*SJt|8VynyM zi-H3c23fRk;ZmQ;SylztJ+t28F``IiaugPqH~IJ&36O|f)AHH&iZY+u$}3v5Xndf~ zNK4C6+5`$OgaY*X%09onw>u7;aP3$HsOK;klIFrZMXJ%5r=Q(8Lx6m+4APeEJTahx z-8d|HMPN5OOCs^f!=rwfK-ac=9o-F9K_OvEpC@Nz(gd!WzR{_fHW5dlbC%Y&4Oa<7 z!F)cdoxUJQv8Z_~6y_qG)@btt0#=1sY$~aZ)kNK{l2E{UKqIVhte^sR@D50tBl{=xc@m|F%M(k~j-uMCo-04R zy%NMwcUi<5=?bbP;CAP;C^Qkk=i$1+g-e!1g&Id`bN@hZi&<(&kH_bR%q_g(jmYn{&QK`1=z~JH-|sQY~E{}XoP{q(-T8A zrBD-)0nT7`SnWb(u-#`Wjkv95*P1uJzpj__jp3$kLEk>)qs;Q}^ zxz-EUMw!-GQc_&(4MG9|%KT+TR-{F0vhK0LlJ7)J5%uVi!zv+O%Y-!%lZpNr>@1#0 zut9walKeOmwF1JPlnx_Aw3n4Cy*F;Nc?*$S5dPT^1hE!_))Om>mZ3CT90(NX6&jnh zxTd+e5daLUu3=`;NH1&`ni~TmYFduMYT`LgSG5_Q8B;-ZT6Z^ZgfITP#LWxRgDK2kZ{o1eJ9`Zso#ZutXR5ZF32D2b7g>u^^OGAfkdJUMJQT6!~C-5Jm~0v3&u2q$*)7h$NJ#TmU0%(Rhks(I|rH z^s_J;fom+&A^=;5K-gpb5j@!ROolP{iH{ko?pz+aZK^;yf)g|Jb&ksr=DWOs>dNMU z0irMo!a9DPCtr^rDkDd)mX`*KgJaVRd)oUtySkd=E^bOH-=yWankrRx!hTLuwDHS7 zUR_*Q?zJdoWWg4dUdmSwUl;|_6XU;~6hA&?&K2lQAXKX~Mqjjb+b6&O*X2sRLT$|V zm_4l#tyGnrnxzREH8;`vqpogt3#uxNJDoXgkR zb$ID|y|1)&`@jDD>z_k5WOfDEGIen?kC~Rv&kt7h9k~Ad%ZDa<$EF6o`Pkf6dp_h4 z+)igvFjn8*zi`!#ooi;7&2C!W(^wG(3{N5A2@Oht!Uo4+cod_}L?dS&$jIRG2&p3= zRfyTg@Ka$Tnw0rByqR%L!R3pU=Tr(*22mbYVk-28V@+L4H_Xf~UpGI$dJ^94Mvs=%UBsx2m8q-Ezf4Gt(!E}kD7UN{y-1q9?{1X*^QqZnao`+}w0jvw1Qf8g-JgWH#kch;0a5&)J! zDkYD{f@?2~h4%o11Z*_uH6W;A>;ys{WD@c^2;C(mZvyWXR&MZHI|pxjcg_M;h)Ip!lAxB=PurS`5*HQ0hcN>C57i{ z@JR|>HmyqS+4$hEhu_aPm-$Rq4A7LX;_z&fbA+@&Qo`S~BbUkqT&3Nv)1ao}2{v!} z;?cuj_5^h}f9!UZtv;g4ph%F)_a8lU<>ljtE{}Bg4a77`xRgP(2Fz-Q#syP%e^18?FHnodicYx+JM_;M;K{0N^^z5oy-5D z2=iM?{n2V6Ph{}wH9EV;>8)M+$$vlk^G2Ob0koPbFE3DK&&?xD-`ZD9p8EH@ul-}F zIv(|E6^48q?XUqa43t;3j;=j=>D<}Nx8M5WyWhU~^v;=W%Lbb(N*qRw5hir-sz`(5 z=uWVz2-${Y$iWjFH!M5C^CBr3yjFZ2I$fFYtp1JYucl{ll}4?x0F~JVD|Vl`^ZEDx z_5G)B-oAGB?4{$YhuW&6fkNvOw->unsq>Y`<3lgM{n6JK7q1(2JFI#h-&S496Kb_e zx!h9q!e0;n{%%K2v7^wc(-={K$P@WaLDg%5$TwJ%Yp#a-JqxaPqGN{Zvp+sKL{3^`p9;}Ib3cPT~DGX`^Tz=<4T{1E7 zhvfcEN|sROD1sP-H&9f$_InKcZm&-L6fM>ZTfa`4RaZ+-$lJNUyrdi2+~ubx`jQ{jhXnvgI!CB{z80^t>7+=L}g ztoO8p|0RI4L`#b3cBI0L5!!_CX=boQCOh;+x>p{5dDG~QSAKc;=uy(&A7Rz}^yzC? z4{hGCd3jen=qWH^E9%t}A^LSrPhj`0%ey;$b|`lkj3qT@I#lH{vU0U$)1Sbu^UK+o zKkCUZ$S={0#Qfm7CTN60+V8Gmd7D5eR(T+(WYcS57Vulp&Q1QXMPyz4X(=l)uT3?*8@TKVLYz zZP~Kv1#R&_QK8!gZ~zvR(dsZ4v~@N_UBof2*O|-f%UmWl{L^@bx~-r7@#yc*7M4Y# z9v2$xz{B$@_oxURn1uJKQZW(%lb!+bvDFGefcJX*5-!Pk=-OVhMWaXtI3e0JL`yL zBgI99!2-B53I~_ao{aG>*|X8ZkxEU_6beL}Ye$~{;O!gd_x5@Vqm8`~KtRV1=aU*4 zhS{vLlv;D8@S5`%yHpyBCBL|$uBoMWYU}(n|N7(aCyz(|`{biPzyIj=sm+VJ!*-KS zfj&MHS1pYYh`?P$PQoxj20#6kF{XM&%dhylw-kfM` zE(<_R${>{SoQv&bj59Uiea)JBHk?e0OZ}zg&F$UWPCa||D+rqV5w(dFf)H~l{F368gJ^by# zXKy`sbn`^LztC<1xC##Ixv*$}pboAZTs9ahpyIe}&wv4f94ieX!8sguF8W7mq|yGm ziOol@z4_ULU;ZK%@##l@efQQghxc#WuzIXD7W8@T3ix>)CDUU;^0+Wn$DH$~L zgmuKJgvmwx4BrEC!Xv025RxpJh@x|O94^}6C~F2QTbJ%Se(kjn?tS~)UyuI$@!mV= z>TlY7>$}%xI^y9X;J>8`Ir4r=j;X*IiCE|YB;Mvg2z|Nw=APk2E4LrHc>Dd&?tlN? zbDJjH>nfUjkj>(RhO$8*PfK{5T)U9VS14?;YKW=rx%9>TukOA7;?u`=uALs~g*;$c zs3cIRRV&$aQ^$OZ*{-J0J&GAj5Ya8|YQ9E#Lx8avgZ&(6g@ zE)0}}$|?bu9GPCT{peG7?%wO2bN#hXzWMR@caCkF z8ES1PR4PRLl6cCKAwMQ*ngC-|8_PPzX15=@^T*%6eDUV9XZLSjHrCf#S6No#^A;hw zR0`xWLxIa=)UlEoXy%9*6t-Ng))!YnCuU@PA@GKq_8dHPaQEg7v%R(PD54*mUWv{q zkC~0&Hyb+QsYu3f|Ng%;od)bRLJz%z2+~DBlnw$y3JE3j zVgXdJi;9Bc5fo7o!CnysQ4ncTz31IG?s#{+-`d_g&Ot(w{e7#$W|wefa$!H*Xx?v3B8%as7(36T$F= zOo$+8bMT*zDHZNmGP~25nG4rEw(sJt>%W|MbMKCI%Vtl8!lzd^uKB8pqEx~cO%zvF zmL_TO;m$~eT{K!v=4Kan1uZac!o+DaX3d(n_>mj2sC*2@iA;8$~0EyGQq7KlZ_2@HX;@riHmM&d9=fRmX zrca(Ye$?PT^@Ulf3^(jp5!g>PYIk;NWn~dvyrQXsiYj<2>w6CvcF&~Q%hx=%cmMHU zuHU|L;PJJKW=-gtn-%wUo@IxjO)veIyu;{FI3ray_<<#BcRhFNufNWJ_0IE;w?8^} z>OI5y!{geirm}*_K**O>2oqMoX;Nqc@vvI}uCmB{)ztMF0vph{iIXNxm@wu3>EnP9 zb*-tO7ce-aco^HmXo59gr=>|*+TSDeK~*$G`pi~!Lrh+ePKPJh1WejV`*Z4b1eI}@ zUJV29xqsT!$rC3}o+!x7hW4qesm?3N!u~e8BXK{4w+??sNhOps;q2T}Y<+Miy|{X& z&RM?hiRa$_;{5gNpFIE6>P0h#Rpij_cv=t9%EBQ1WgVUe`&?1|ltpcOUVHD{)eGMp zeRcQ7#)Z?zjTiubvWPX4Gs_Od$(V5CSd2I*8jBc8GYga*E2z;kB%VFZDSKeeT0 z(Tw|O*Ir+fa(j}Xlyl;4K=3Y)&u*hFQW%;WyVD!asVaqX4>rC*LqS3kWp1eLM3@u8 zz?=;F$Op+_Se;~Y%to5;i2cP8#mW-yJgQrSJLtoyu^5QyiHs>}4n^>%NP^6Dc{Pc- zx`yGSMlso;$Z}`GGaagu0$pt~d&3U7igvAFtjU-pQe;5#oUWXjZhZ$18$V-V)8^f; zpZMzP&a$5a<)hF#q&p!%T&&U=PI#jH|UpXn=hzkBld;p3m4e0$Hf)L#&w-dg-*-9S)dP7q%%Z$-jB5;Fc0*@PnAtHurC$?{O;0tm~<`tBd zSJrgv)i7wtkYRxAy5Rs)Kv@_CN_Zz3d>(R_Xm7Qo||ia~Q2oH|7!foPuOBucR78G(2Ibs%~&E z7s5Z72!)Y+dQMndQCDVonKUYGBjA69s)cYB)SOD~70A`-yuz0Xd)bM*VK-rBNcY`5C%OmD+L_;Hx&HPfV2G^4h6!^7>beewJ0!$-b8zJKSs zWe-jmRueK={HcO0R{~U9Dj9Uraw<1NC)4?Sv}drpz^WI+tzDGFP$;VG4rzGr`fj8S zsw)Vj#c2&?wFtIAw3N9SHg5rbOSDTTSin^_VOu;>$;Yk)`2doBf#n6clE?u|t zjpJV(eeZ{}pYK~cZ(#qr%w%jz01|E!mTXCPpk)o+?rVDH`0p1#fBV=chxTrKboPkK zpxG9T#q)}@?C~NDDzat%Ofgru)m?C2I6VFcdGOLoQXCoCB~?|Odh`-#%}&)qB`0HH zoL;vd!c|ykY)}Jn@rZt-sulccrm_R}1H~nsO|Jz(==Hm;cB)0h6;x5xxeKOJpYF5; zC`n}`vWQ${mlo1g#BMbioL&#B%{T%M4{XV!69Ntkk`J&2y#cxa+2}^jsi3?xm4$$&@Ncsb zU%S<4qToj-88WkI^T7uSi&8dEUTIFi8}d7yfwC!0+h2MAgSU?V_Sf0>wlARDd1kC| znlIhs?6@p%e0FwbX_s+p_kVTm#_4xoKXPDa+dWxsPax=X#d5M}s_M)s!mA5gt%0as zrt^B87K0fIgFu2Ta&}g6O~!xIJ;Fs+zibDi?Zoqrbx^wKX(*C`e}K<#ouQ5{jIx z6?#CO%oq>QA~+)}zbMB`pV{1;u+tZ!_9Ho=ZRf$m`;Yv3{o1#$ubEO?nVk#`>kFe9 zP3BIRr<4a0ITigDKlRatTUWn3u*WdfGcvtalaYxQ=4Hi0W}^oh3%3{I z8MB@08WOBIFs7GwsqfaKM^8ncjliwD*9*>nu*NJwGD8(_hK+}^H2+HKZk!5B6Q6V_ zoL7Bby3SCp6N$y+2>`O$>}6SHbw`Y#?!6lt`u6VKt4GiJ`mV)Uu#=Y*31$%r-7OA} zM-*~b(I#(X$U@^bZsAi5nH&u&Bn#-GA zl}9$TvTI$}-u0ck^k^6}ZvLcu$Mx>qv0CKP3ejJQSTrV@poFQrqxi_{0rkUNy;pty zU;yyC=T0|6>QdLG9ID*B3hq*pZB$OVz4YZ!8?8Rz zqDAnCp{`-GgCYz}RraW5o1S_8)l--5+&ulx=J9pK0J^7jOE(<+UN^L}E0SH=f5G!# zT)A`m!h3t4-r6*8Fcn=y$Ba6ii7s=dPyw@y_{gCu9bke?CUKksq4MJFRAF6xbxqHK z!=^Otedm+UKRtTriG^djc2E@UqU`~dM9IuVJTB%*bs@=KKI|mp>GvxFe}?|q$IPtk z9P(>|+`6>WxWzm6A3grbvG-qHe&4YEy}*>z7UraiN`m5}b{OH@Uh-KGr$&-_g#}?W zAq9y#qZP1>Jv`*$rX5c``@!!w?_56l{QUk^Ss{0yVaD_<&&#qWh1~J{y0NSO^~=q> zH-9;}bKC00Q|d!bp(J%CDSIg2cvUOKZnKFt;?7s=%Y^+%R+RM`zEU z{pIveXMQ>N?UBbvb)a8O9(=|0tx+U5XJn*j8Va(ZRE&xCLW*cpJdu&9Nd78%+vMct z^52SkAN%l!pME}l`lp}Ip8w&)J(K&^qIN5=i}F|@FUFRQ3@Q|KI!`#3Q;-utHw2s( zGbkFHi*ok+7p~gA^UZTN@7_B1&bqO61u<9PflLUhZPHmq-$5RKW?93-FMRRm-MiPn zdSUD8r4Np;bXnlY1&8DgMFK9f7gTpN`ZlP)^q|AhTTb4wsMqJyZim!s^I5IxC5}X4kGg za_XZ)FTC*7(=WdEuaiGsICpSS&&skYLSRLibYAk!tSezWs(d=~x=xkSTv zJswf%y$>#3wdI8`uid$G<;!OuYN*Hz*y{&qn4n$yZ`UXYwsY%7w;n!s>+aoapX_d3 zI(OR00=l14=?VBPN;g8gKbsIl(1RKWWx-W$_fig$otIr&Tv9dWt+T(Lczx&k#^sCV z%$+@F)wVGo>{V8DdfD?4sjigi^0EuI{sl1%R+Qnb~{KdYlYnxXx$N94+Pnf#= z#SfnBo)w~%o-^QgyZk;6sVk5PqRE*+W8jEd!AE)nUXTA=zy)A5nAz>|51xBu>clCO z3$18uY+k+frBlCr*4DEiH!mkYgBd!=8$cPzsq^}y$?Sv+8I8nHxDMg?8d8JqdtmPJ z4e$TTE?xa%_pF8v32$gX816>;O5xU{$FnYefO_3FEq}*f70ka2^hsJ zs84S+5%M4q;8UWUdY1#yFz^G9KL#`?mDhXk4`02tYxBmfk3F&TiS;cD9-K0D$`|>ASr}v~* zC8viW-6;8jBD>h<&a4>r$V)#m`8yX6tbTa>@FD%`VxatNPOCit!=5|rgxoY97S+bE z?U=B?{PAcokSH8^==29qtljj~8^^ypd*Qe9zkG4%$)-h{4nG6T&lLzkP>E>@aNs7A z`A_mqIM>3bR#}4qrzcvw^FaIJM<09lyR+xd|9m;bnM_Vd@*wIBR&DaC}5kR5_+VtngFB$q@Yu}=P0%g*yn zwVgyos&wA5H`cVjeB$iIKmNRW_42ushjy=NYCrtV?yh+Wzta=JyC91N4Y|`Bj7B|L z1uhSD3l1aPp(b6hvc7k}k<%aD^UdwMckf&{ylz^3PSBIrQFO+3OE+!ZGCk3PKJ)f| zaTS5Qd2-u=@q?)2C}mAFVCF4Q+Xr1a0Cp@ZQ&d?=xjeZEL;huWsk z4nF?sH@}`ee^IQ=FQ2@=t$EpoV<(rCW-%*D>jQ8SrcXFM?VRMx6m;^%UIa9$)B8#~ zckMoK{KD;@-B8?JbM>>`3kDWPT*dXKbeHkHifEzN6E7dxc;JkX#;Zr$=a22(g;WB( zxdat45Nu?sk0|VcAf^5o_Zovc=(Aa2IEdy9JM`u5rAwM0JNV7TiGGc! zFMR#R_Qoa4cb<4}bPk|Lm&N9xA+Z)|gjOu%w+RRo>?MRGL_E}2RMD}n&*<6hN3Ptx z`}d7A`<4$ck9z{WGerM%kMx3^gpoJZb=sB>F5F^f=k~SC9NN7K@JCQf>Jp%hXb&Ve zcoqKF7$qETW|Gz>GfVD|RIK^*$m;nER_-`*=G@r}e_Z?(uCe1^o_?WkMOks&t*~KI z6R)HC?xf(15`+hESm5G2Y<73Nq`acnp3`5SIQPf--~RaH!nw0Q9NxBk{`^fxK3P*4 z@&#ZLGuk{}lZMWUUZ0N}U9@bH>lBt<^tMz7X)jmPZRm{V*UzIpZvFoL#)-8_pQm$$ zg8uSexWIFAoW6oS4?XkkW%2XxUu>Sz(1}P~DnJz2Y=(W5bKzhTK85!cCgk+M5H1XE ze<<2<-SLAhb01o=^_|ma&Yb=A{KZS>zy0Zl7yDONmBhVD$7(aousB7;YZTf;gr>OL zI50M1SDr*^bye?ne*3pe7tfzN`}3I}j_i2kp@&u;{P58#EH*!2J-xy1p$n|i^OBdh z!_kW%>Mdrr%AJ*8T-LeoeUCo--A(S~%ir#u)4L$(DH~++N|H}{&QhIlhC2*j`sPp9 zIDVJEdghTaJ*tU5B|`?KUJnPOOl|ji)t-N2{gUV*0DJAx{lDGiKi8vINNctW#rnkt+mB?e_CDm2kAO854GrwHC^!xd9 zr$2pd!@QYu+V+3)cvU0_e!=aqh)faCb+^i+@ILE+{*$s>$k_wjp~aQm$1HjLvuk(% zzH|MTH&+fTi@4%_y)^J;I?u}z-Gk0}r+eFvUAlSu?>iSh*fMuixAHtn6$5Ywif97I z$LmqKKX&3k+6eoKNE3?|j+HNY?W1QKAD+8(>%ot{IwS1l&o&IELrF$vuLq z@_HOjrMnH_pcl?`xR~Wn>iq<1^2@u9Sg`r%#oKpp-}vLh%@eB=j#%#;8jMSRNceLL z{m$(AnY+KacH<65?d|pl2X!t19S{xJAeU4ap=@+3U9Tf3PLI=|))?sbz|>$tiRBI5 zb?nHV_Kj;cJ+=RXFMj;_)Q&No=m3=;@t_!-o5lVJQ%c8#P=5H~Hict9Q}sk(&Mof* z#Qehb6GS@`PNzi!;Vd-cobR!#3yU6>V* zpk?S5gad(XFDzLbI9sz;sYiQ3T8g_%CM~0E{JPhU96S8Mr=Nd&`imE5_Ul}hmtUIn zITW_rc1#Kp$rssIv;s3?kD!LNp-FwolEU2b&i&@U@zv??KR@x_k@wy|*gmlXM!jIm zz+ghJ(Sg;34Jhh2aLE{h7>?b~1(#J=-7u|n@8?(9pquCSFYK4+^A(k-1CkV!F6g@! zdICj5R=)N7%^SDxT>N-X<9$8L^D}W8A+|6(co=iBVzokFu2m|zb+OScW(PQ1p%+rU zX0~m7Y1hWx>mKYyxFkQD?xAjeo1_F-I{_2Gs!%k-{i)C#6xS398cf9`s8_112F`1H zde>8LJTYg+pkk_%QKp<7GgD?dO4^C?BCEotcI>hk1UpbTBd@aegcVPJc;U|NziwQ3 zr)gM8(33IB6Qt5adOB-B$QLgk)&Aj?TQ_dqI(vBg(lK?Vq_qQBj%^VJhIJ61ha8=r2`WLB(+@ix5W!p*JG0V(vyb_v!tuRBE`hg*TwIy)Nz~ zcRVX210R~Xlmlm@&@-2e23i6)CM^O$CBQ}KFcZxRYa=VCu*qH&FBsVw>Z^dzKs?2=UxcBU z0$hkRkkq8N#ZD|vV0*nWTBXJU;ea1=B}OGW*0am3G=3`3pYRqN^d_BLPKu1^72zzT z4p}oh!wG(q4-kjv`i&>E2(CaagM*I@V8XEiDnYWwawtHXJ%u1(QM&`N%)(A1AKCWW z4>xZ8b?dJ$w@&C3^M$K|^dOePP`vtUBmV5}vtK-Y^XBy%SHFFA{lh~#6=j48gW(Gi zPJ`vfU=VcO0-?;sA@)UK|B8^6h1e*10>&c(7~)ttd}s}basDC4NuL!1oQrIUkSx*Q zm}^I;xA-DH2SX#+k!CI@m;)!Pc{{#I`jDkFC;$gF+dh(mcNl|I1z9@Zx(lvD_C}xMtAJ6aDf5xgk9|F|8 zb^GU+7Y`p3^XFH{qmmSpUNx2%29vc7j~uvo_x4{`eti3h=4lNzWD$jn!PUl_1w%7L z-2zL;@-~rCV1u{W$mwG}i474lfTneN>8-3gqu zlio~#lspU`tInvqr12b##g%-x$xU={IHRme;<##MrMMTRyl*6k8b*l9VCs)8%A@;spa& zynprXotu}wer@xzsRKF{5^@j?u>`~`P5LPopGPaS?K*?UqJ`bj0M;0#XWC!@a11{z zDa~{_1^a`5@k#YcQd$gspZEvfrrPd6el&X2Dw=`Ztx@B!s!g7>h=SDqA1DHyWJN-k zKp9?a0RvyQY2V2|2;5vgx?)gaMl`$JnjuM<(vOyyClt*Y*!2Eo7X8o9UtA9qx^qz` z>0!~%TG;JrKucO|g!^uzTY=4oQsAx!iDGU6g{*!;oRlO{2tyZgoXgHE0j^#v0>`6jjw!l>82Qa zQ~!c+FzPpEN>WnVWk?aa%;~%Q=wo4&oE?)iRC6VP+lCokDY_6UB5? zQrX~OSG4gf=`%_QU^iNgP%h?2QKtcumTr9gn`^i4-2L<2l>><#CJWR_Ny?I*GN;IA zrn)XU%z*D)`R2_{izYR6E=fl4h{RHhhPbj7jQDB(s4-_uZaRS=utI400{hxz$E6pO zQmsjEc6!D56z4*rY7*K-q1sIpLSeL5H z4k&$jvxtB+G9smX11ihv_X{pkaRS9(Z7QXaj_(Xvsa#2`Eo5Q^CQ@@+zq8|_wm`W_ z?32M}5=l(HAwG-ZHwOK7{#MDGP`fP6Q(`kQM19oV*7cvTVB;I#Uc37rcQ3xTs7r1< zP*7ybmZTKO*l<=Tk<)GV{@?EY{r6wLeel?l2?M*9=O%(+@t8ahYUDXev14*Mo`(%y zVR5MvfD`9S0UCnWiTP+%E5-7zU<{kk2z)I-<9e&`Q{2Qox~ z98nuA&Oj`utm}Y@iywRM95IZ$XJ4LMn;Y}zW}8!zlq2neLD3t{tG)l(UvQXj|9AO1#Q;_k0I z@2|~`=4C|`Ig*sea05PiaEx02m55qg{_^?82Zr~=H;MS2VpVBz1TcsI7|u0$R)RdL z^hLwowlWL`D?rNv8ppb(VKwsgd`L*57`GUOlBPrH-@~63m%VZgjUcRGB1PjBrECvE zh77T=E?*>BL?OWaE1&&}xYyq|zT7sdg5unM{ya&_msYEj`TnfR;cHG_SNy&0#t*No zn=__&#}e8`y6LxuNyBp#@^)DCZ5|Jm++xcaN*jNuYC1e2|V+0tiXN4ixku*gljqAQAF%x0KgATz9Nw{TT%X!<7_~%%jDy2iwT`_yybEKX;QI zzWCnK!4*kw+$1ZIq(bRwV@9DnSlDyUGr~E&b>Y+JS|$%7l}=GHV}Rs~ZVat*t&=>1 zkv57-S&JaZrYjO-K?P{Q@TvvoQ4r!aVRzBr;Q&i3hCoco<8$K|hy_g-BCv=&^$7fgX{C)T84~N#z9!BHHoLD*y zlWvwyl+5Kt(~I2@r78?ZtK#K4RznLUu!-JH3`!?^MU7qtVIeji9458OWD0UhYI=-$ zsQrx}dH&xwKHogKOBNY3o2E#TN~D*31#VZQWaP>>h$!E^{riWz7me>%2O=?wHE2d( zupw|d!2Ku^fILdlLvWuWah{oC@(Ya1pm z+kH%AyKevfR?Dceki%JID3PR6=|x*C)9KCbHT$I>(ZzSJe(^%%B zN@c>zH0e0ID-k;JYR)!L`4--XwWVhpm^@}9lV6E`U_39OHnEmXzzT#V11>97TvI=6 zdegqo{~)w={RbjnDX*O*h>SsWkX}^yGF{F{htcbfo&W3ho$EipyLHj{zP06rS?Q{8 zY%MdME2RDieY224UeyE*Ce6ZDq`zb&3cjT48+R*1T!D;=KQBOm&qpmdQ%EQ&m;#n! z{Nioz{PfqIJAa+~VEx!~sJ$}m@($2^5VFED1|!pB{+<)(uiw6X`Ri9!O&`>)rX*J! z6Ecoip0q3DRh&*np^_RAI6Fh({r2=f_!j?Ap_@6D7)(aOCH@HY>DAqb-@p3RuP)uX zedEIMCuelc_Bj*z9(kE0RZ7olV-aV#Xjt>VPG7!u^TxU3yO-YEtF{7?Yz%$8e5_Hl zhKdQQB}6}mWoFBtXRTEt`b9#I@{_EBiZ1;pF5CIZ`D-`-`tzrET6^b*oR-`SMTL09 zi!w9VRd=lF-Ys8Tx_t%nAaAISQM3#R4ro7g8+SG*3EqN^k27bT)*(uTbt&O z>QMuRS8(R?4iOJR`)YWFj9Fk@GO+Yzfh|pp)f0#S`L5|PV(z8`-%wO?>(=l4=GJHV zY#|CYswJt0cbGzj0Y|uK$dWfN-nheJp4!(oZCDRVyXk|-MSz7W>{f0vA&ufKqG~q% z7ABH*3WOZwb*SkveCDdxzqoMg&Yhd*4zB236k_uO`i_#+iMNDeUWY4DI=ubhAGi61 zi=RH-Hgjap&OqQ|ILTzAgu^E+wiPs2TY>I;fv^zP4^D^E6Nn}Y%RBcTIjiZ#PcLG- z-??&Z#h?x`x6|V=C^|_}XK5deIRYM=J5f4#^U2E$;l^*L_N|$HZ$Ai?lTw=0}N$MiK zs12AyUT>m$!qzXYV;vD?4-3pI1= z@=yD>Ju-P{PYzEKJRk2unWTLNvrlYz?{juEn~=`n1=f^Bbp zcjeaIJ9jR9uzEC5Pm48}ZHCKL>Q2i%J$Q9*M#bdE-u@MJa{J0p@9kO5;&rVo0InPs zI7yMy#P#~e4^X9*? zNw?J9Cm&%ON`^-a1R>&wGuyBNhy)Qy=L~n_a zkYy1>Ym~p%Hw+v1(25QFKK}mF<-cy$^aMitjMRedF?pY*3X9`{*ENoUoJ zTJ^%WS8m+6dhwTUKH9%?&63#@M-S@LrMfgfl@cLoU{MYtP$JC6I*Kp`=olKLX5@&9 zj@|=DjGMk_(^Id0{OvCni4|S_?L^ze&IJ*-&2Dz-^|A&@8X&D#sa-J>De7QO$1%+> z|D?F_)%7cvFa7+<;TLx`&!2eDus%Jy)mE1k=4K>f!4M2DV2b_0aFmieYH6!F*7fQ; zcnqWk>-W9$$(cVW1iOCY_frQq+}9;L9L~*m*gOiw07)7oox_?6M8G-)L&>r+OE-UX z_D|v`cW+<2a_*ZWukUSNIB)jk;RE2HpjRWfyn>wk(vnKbNvWq9IrjcX8aM2G<(*T% z{Ki#?k9_sqp=}Qi?wAU=1MYZsE+sC5Bx$I$Rj&8u1_QA2lQpiNy7J|Ze*Np_ZN;6V zXx>Ywzde5BwY|I6Jv?XL1NV&?Ieg@>(PO91e0bTmJ-c6j=fkf~U%GbV=4}qwt?NI3 z`SSYlb$QW95H>=G6|ZEdB#of^vfh{#^F>M{zF;D^+muJ1IPm4Ai()``@7%t5{o1uZ zNC|#(>cj^pPJR6G7oUHB=I4voc<61_ovpX8pZoIYGt2I4Czo^laneaZ`tOFNjBiWCF-3`}0LvfcjoZnjjrkD2*<^E0{rSk9!^@ z3qguxc1}*W9v%BsbR5*XS7&OC@-mY_uZMuX(Wtisz4@8B0V`dHCrHv%X}ze%ae$pR zvP~xX&1zTBo4Exy4>hXNZbWN496pQJqqQ3`Z;i?+lJo$5;^a!b%E%9Y(4eIQA9?=3M<+i#_~uLd_dNc= zzAbB-RxcmZ&?mPp3*S*GJ~4&HZ01m`s&3e_B{SD-*}HMh&iDTH?wbd`IC<>#cmMUy zCr3Yc`=x`=p4_`^#rAm*w@jEiXnK`D>Jo#yPufA$$CMZ~cGjXL_bzT+IO^e-9(!!( zJFo89tJtx(earIpC)$@iwrR(cuk3sIz{_tvvAS*RjE5h1cGbcqE%(*MMR%$3VvCNM z3T91Ny6B-zD`#wZal^~|)-T_M^J@JfGE}hZ_j9a<2t>y78 zTes}rxaHAR56z!Db7=3BZJdyu&lJX@f%gtyykY9BHT#bJc=Fh;d6UOh#ESebM<63V zzW_93c7jw~JeFIWS5{b75V85udY$WsELpYXt!-9JGv%h5W+KpD=XY( z(6si)w{Cj<>+gSh|M`|l#d$#(?+a@i`rS7k&YDpJhxBLPI|!(6ZO^_#hAKzzq;Y(| zj(M43pEs-1ob`L&J%8?pPhM+W(lV(}z(CId&gE%9^Mkh?dH0#4KVLq3a@)N_a?!!= zjLc5Mr_P=|eabyUr~sqLr?enLT=Ni2<%*+U-wWFP3HQ&OHGM#NGE9M&EjDP@x{t42 z{PMNu-dXkVf;zL3b15{7($js}voE}S{NlHVpIkT~+lGtk$}aCv-k~GN?Wzh4_lT$w z1CvJ@Lfk)uaPV7#aoQXel~>img;Y^el;0s!uT-0}CpSI*=~sWAd1u4c2M2aA3C%J< zdO{m5n>T;!>u>IRxqW<11Ye9hnvf)kZI{Bkkz_KqIEW9S_KB8o&%K5%EJ7MYU5V0J z?by5mWNWuu>GDSC+2|~+p1kpmH=cQ7*X9R$dQ>RM23q-Q;*)nSS=uyjWPM@G&2I|N zSo~4QTk)JkK!-rXwsd@kt6YtR3P6Nl4c94Ar#A6dI_M)JO!OTVz8~Beu4q-?!AsXp zX`6FTLL>BkA0#>0VP4~ciS;EpSvdhK?p)fG;$2wOFJbS{@Xii(Wqwy0ua6i$a`<41 zSVs&VKByijaEFW#KrY%;uiR9)NRrH;(WaR@fqr8u}w700D1J=x) z*1KaWnpG5~E361nD6x1&2SS<*mv$U--_-fbnp@YbXdGl%spj=5+LzL5xu+G6&{0?C3N6Ib^ODtbs#z4VweHg@9lx)el)c%s6*5Z(?h z7%w|4vsTImf4j+r(lONQ0eRoW)A^jbE$Fp8nUYY7ae zUrTsIDIM1LT()`Jmd%^nTbmwPIDY|Uq*L!7-@jXzZnYijKnc`#?%27$TdyJaO_@4r z#+=2AA6eG8Zqt^{TXt+|s-_9CLbgL#XToI^wJCHnbNixYqh=I&gn3yJXdXm(C^DwT~ki&srt z@W{MzBPT!f@Vtfd=Pg*;(zbqc`&ci{w^t%)G`FT^M6c01j3#F|)qir*Cc}X4%=cBf zb0-%1DH)<4Dk-&D z8&!pq#&wC<^+paVaUD4bwj;JKQ^}<17?mZQsVK{NE_sl z2Nw2Adg+o)oR(L)Sx`&OfKiLqwC{cA#Hlaedu~t5?DD9Si_#l`BfHDs!8P&BM9N1H z+!XCNcJa<5AD;UB)5Ck#tXVo{V6{c&CK#}iz@w(sfuHDtcu!Uv)4TO=&DKBgdq|5#bUMOO}kR*tOxX1z!6GK@m)2^$z!gJL z694EJg3XxYsx7*3r_qbI?R(>m7dFj*pnHUD3f`4!9TqxnwL<_50{}7zDWJX-s#b#| zW5}b619E)o3aQmtwQyn?y~T;Nl1!7y0@50#RrG5|8*<4jsBM?6RT`rsT3ecz4E33n z^iF13cyB9yJKm^S8I;zirJdugcNaads!mQwpiF90hbJ%ZAGB)GW-BFGL~50Z@-%|Z z3Ymp}7^4{pr-qn{h{Mqb68+9E5y<596YvX+XdLX35x?jlwJEziJ+s`U7pwv+<*@BH zr{i#iY2TY{CxWk(+Gxk<$a|zIt|8V^Dz#c>Y?z+OE(zh3%a;D{FKMjV_uSuL5pkhn z#_gH@T#tYWWhjoTd>OqK*Yh_YAjs#hn*BgrRxILo8&oB0cXV^pQXUAIk%0O#SlZU> zJ=j?yOvigSRmcdn6-pZ{{Ws6crvQ7tZMDShl=6`HlkT(&(O0DR=(0_ z+4&Cp+pX)8=Z30C2xLpE%;PpLz9*>{@jOolAAgC^*)lkf))3+q4|aBmqWW5827h$? z8zYQlJF=u!)rcKKt4a)LvbD;bhA44pkU2JW9%^QUv{vOv1KwnrJ!24Rw8~V$+TPF1 zwvg9JO0AAz>&IsMMT~T<%GWUy{vDatwDM3wO9uCG$($GV8US8%R-IpP4GmqLjB4rhMGNauc zu8#3Co)MHbXv0n#co|8_>5QVEeHl_oaGFF2@lFaU3$y{u8#RrGC3&o4Jm3IiN$w|A zzxf^~SC z@9!a^p-$F!FUYZRgNhGq;V{|@%epocundx-aAE)D^VNJJBDJW?=JYKWpFjo%RTM?j z!iDz24$`E`x{a!eTX=~qlG}Srof0=MnF26Nh>vx8yhmm}^0r!?s;?-GVs`y=<;kq+56jXTMnq$j z&g_ix+FpfVc~{BpiOD4N`HQaKPN)7aFx(y%K+lD`YL9s@&v&L zL(w7;c9i~yW3~_HGVqXvpr2K-TL1E2av(?Y9 z2c%8Lsq6DiC@RW>l0KWyr)B9a;w2twlR_Jb2Lnl($)aDZxl@K4K(_h$exKD9j&x4n zl8PB@;I@P5shRkZ#$_?YG7$?t;wWnxrU%^T!=A`r)!R$Yc6xS~m6**=onkQa#0bSy zEak%?X_H)SH5xJt*ar&D-F;V=2%w`^+AJ$vJt3i2A{2(4GMm|lW*o={XejkCT4~uk z2wPEOQ=4*fP@{6CE;zK+m;U4?^TIjVU~frd*>mg~(Y&xfc>HNyDe5j@8z{?n7>fR<(R7rLB8 z0&KAU=z|ltmkGSITiO`fIjh)gQPDu!9PyaKxmx1k8r?F^z)GD#D{a*0#LWH(-B;v* zolDm?+4z`C+N62l$su+CT)L>m9yS_sLUOWFDwi4o3X>mD*;E?VJ6@tU1{_9opi1Ky z(cV?y>YXe{hnHq$m<-f9)A`h_Hi!A;Cb_|gU_|+_-ps=`X#xhd#iO&iu=Fk2t*Z*< zPVwQ5zO@@G0r4r_0TuiwY8{_#=C)SIQ*5$Yh`v0Nuk6^pYNnpzI#7^F(O~C_^uAsl z@+jmsTmOx1J|5^`h6|5O44Mpbca}~D7az6jVhh<6nRuc&d`eOq1`b!FQZMJfaMQazvzIa-?PvgkP1lNanmmFJADKiE1 zYKyJ(nOy^w)Ct+84aQY#8el%s_}qM)-_%Ov&XnmzQ8Q408|g%j9239Q;C0F5!Etd5 zs?ayeFPFKKR-F(aeg&gOr6Zln>hc;5cQ&pqLgmr|8|k%erIy#(xR)z;FE0+c3|=pm z6n9N}_2>%CP#bB%?m#inXIf^eiep-}$^1p=6S;=(H_EhJqZ|_P*!1I7EQ#M|aEA() zK0a7y6UC$(WYLvx4odp%wkWnL2a4ISfN3?El2$5(){==_6rJp>(n__~A^y$Ar#FvF z9?4Vagh8lO8gi{xe^$@-gB9#0&t9i(KD3}X*d4 z4day6lyu(yR0+?pNbB7zUY$`9fbQDPO~IjLsNCa4=pB>KPqQQ3?<&@d%%UgYGs%ni zIaa2Q@I2ZkTx_=ns|LQY&|(pl;_DUtKiW_nbDDFqKrIj}U;+v;AO_H;%c`r&@tHO9 zYHU(9WB?VlNgV@Yj4TWWwc1`tH^XGXhC_o%Fp9^;pE*9-52&&f-LBWN*dqTY$*_E_ zl|y>cUq{U(SA&?2m2?}@)rIjY6czWhl9k3pFh;Yju&EDz|0Pl2Z6Xdm=DW=atJhA| zJE;$JBUep<*eM0;i>gzWG(R!7A51;}rT<0WRpFY|OI)jalS zw!>{pK6Y-jGEE53?t9^baX!1-4tm+(Qe$9q7J0=#a^MnQs8~H#L&HXZ_NX~{a?_xQ zntkTwkwKe|zgeqAD9O&T#^RU7ZGn-7Y>^p~+SN`YT`_=G*$16?*~dGLxCLXs-d%6< zdm^5I&0`jVrbM|*O=>nS!kOlpK(TY8<;kWO<`rmUoskM{;ex%3eVphP()3g~2yLe_ zixFe~V8F{vPMbgMv4?E6&wMssVNAa%@ZwKP<95H>o8h)O7*2X2nspJ2QWoYx=`3b? zd9+fqHd+x@ca@qo(b9wxO)eIgcZqNU_J&O9&W6fIEKa)&g8i&`fcWn46MLh)$sn~W z@BM9O7hBLBP9@AHHKWvatPY!Sjs*Tl=!-@`iguK0`gXCg&LC;ho703)%56x2G1;|D zrDw@3=5SuQH)tAo2G}%hK`K2EpNf3J|#2qmR?IZJbFK@_EqZiPD93HVjoB~W) zp|r`)-h=W{DmflvOF70$(vQMbQ^p(W21Iy7yNoJ|+|ulTKeP4R?r{1&>-v28@?d+| zm!IR&7@0+@DqdJUw9E+OW?T9-m^~af5hiF+8{MgpHp)M|{E14dRN)-ANto;_*gHT} z#MlJf0PnD9U`1Yx$F-}B>Il_7b0NEuk@R-r>#Y<{~Mm1}0{bS_6+h|6qwn%gk2uE)=i`CbB;2Skk2M_wAt8ii7MhI6`Ju(lz(M z4_#PnUfHgF?!r@b;XXD)$Z82dceWanyR%KMFza|M&*F_hWC*PY*;6C^`f%;cd4-zM zY(vQdGkQk!oHDWWYlX|4&fonrSFKqov)A5}z*cEjy2-+tj9oK2ZT)SB@t+rm-uR9Vn1F!#;Fe%{I&s3-lnudh34rc=GAz{aJx7K@|X z)UHXZ8Kjt4SJXQJE~S#mvUzD8$YC2V?zMkn#jJyf!L><(!i%kC&BbkCvSoG|nrpCN zns4NkVm?}QN=v=Ba@DzJ3)+a6d-i?0Ak$_8>tl@PnNfvnwUvp|3BxKfJaH@XA%eyN zuE1)bpOrd!F^dj5Wd*M*NH20T^<@I#&heNx-|OX;f|$Xm zRXQw@w%-r=d9wzH-@soFPqbMyDx=9>j8+!9J$8SO8Pn?XBEf_~hz;-N)dbPRE^~hw z*b7-E$5)6QY3?S52FMI}B7YMgW9GQT4AZVB-l7reRiSPY=YsW+=@OAhUiSxQ44V-W z>%kRJPTy&j#%iDX?iVAlmKfCrRoj=()Kcn3^e!VW)5mLSLSzt(24`g; zCQAHdInC?VjO`HeM|_AX4`nPWwFA%@tI(ng<6q#IuM_%Dgq#4B>Pcj;G@=gHk!(&U z)W|jH^eRIug`(*Mv_jiVm{yMW&qV`NF>K^!6Ze}lJrOy=u}kKP`T~{Xn%A|K2vh@Iwxdqn4>(!wQD74n%9s9~Rz0#xJWqtDN z^>qO%L=DC=mxhB30IB<;6?urdGgBj!XbaaiqN$Nq>q>0I2@)2Q%88ml3c%ekA}T)A z=C(8;3?nzFbWLL53SA?(43)WA)P%qcqcW|c=#Jjsp{Wu~ZEE3=7vP)(J)xm^?vP(DCW88`&S)-0e0)RU}pK@sA{ zRsW|<%F@Enfk05KYHd#gxCDN{2%?UMt(NIbL6ame?5EcVTTlRcSTqA$;v+gD>4#3t z)~nEj#(>8{rMtgVUV^=4qA`qrYbt+1;c?*N&I#A1T5B^nCR92$zCU^qy{TR0R5^977e z)Y*&5FDr8v#P|FMje!5vCN~5K9U2|HsOg`L5Vzs0UTPvKUk*{jm(0wflnnrh zD8#ecl-4$Z>VWfJkbt+EeGb%wxGaenr*9@9R=c&nh?&evCL!yvFrT5R!*+#6*L$GJ?C7#|_2J_c zT+{@kcc^DvI?y&h*KYRAiV(*y4g>kn^~{8<3T7oH;1<2jMs*kO6t5=D!?|bIT4es&)3dm{clZ}KU@E90NzPLC zJg?E7H@D^ab0e_RncCBa?dOlSO%BHVKiYvV1S7z zXF6o0C%UYaURG%I)L^Fzu;?o12_$J^91k-!+Ho;6Mvo+lb{IB`!raL86o%K)Yod}C zvaqL|@Ro)3d z;m^*FaKcs+-Xi>nfrg4FSfjQ%O`NVhB- z0nSp|jY;1;PpN~c{IED&Rigv}Nm&mJBICWi^!C8Wl}EqZW%_4=l|Ov(>7%s)hofJA zvs%|s=i}%F2Rd086&=oOELD>*^mGJ0g-wB-*^B|<#4*}K5<>_eHFQuygi|HuWqFyH zDscY*DMMYbO=|NBDkc?{W>IxZJ(a?^TIf3FN1dC}yoMEmJ;4`(Twf8`8qLV7s41a# zNR%m~9f9Vkk(yO9qtj&)+lVCwW}M+@fy*kig6lwLvHK$8YI2Xr!8-K!9%52EYWte) zp`NQgJM~ssdY0R#{q)_5m1RLkcu=lc4UG7j^mv20org{v-lsA@ z3vzV|pnZWj+|^JAfVUF(Pa79q6G|UrV>QZDpsCqSrQ;AY6&3SBFudVpUV_ik(lnCD zDk$$e{GNezc`+DZAe8`i!sz7$1++3v%FRebjLC+5?oQ?gnS-i!f}a6~N0jTV`8|3% z!^Ka2b>{Qc|1@pdo_Xl(jUQK1x>H}|*PFWcw4z~Z=8?i`*5{T7RA~S=&pas8xj>BC z9a`dYLSO}z5nc5fMh)l$Z$>s8%zjGMeZjoGb;$s;q}Z0)2bAPG>MEHRg^eZ>7_3blL{oe^h-gi0B#YYJVBM%x#y7nol8=J28NHDFy1sUG0Bt;E$)q&oLy>G zMym3e!H%qDowy+lwRJi}X4L@7XO^D&>%@^<8MoWh>`sf-^F2Wj0|~5yVu&nuJZIKuFcJS`mlQmn;T7*|V-n^fAq*pEm8z;NyyQZJk;a z4aRa{QikUBAN|SQLE@PLYiveH;RFO!m?KQl7Yq7R6eQ+9@Mv9vyOT#`@U$EVFRE&L zb{2&cUIE@*%QdgDBd3HX#SA$^4yj3-Q|)7d)_W&l0IFlP9-Xg4udHO=)YJd|^_w0< zfW-t=v%dWC-(U8jmwLBqvo=)bVSh^o<`8rVdeBbLmAJvqOG_JKtO`Kg@3%y?!b1m|C7$$&MJi=vVG z!G36&ESSt|h1m!tij5*j>N`Jxn=Vi_IB?cjTX(_KBzD=7LA6YS&7WN z9QX%|%gamQI8GJjW=BLD3@fY#LV=1SwlE~MZTz6ttuH!{sio}u ztVsCnVpw|^93!+Og#Bh8*IlKuMEo(G!P_mjd~UzhcW!>a&(AEMBhmfr7yof_`h)8W zGpgJ=W5k!`HXFwbB`mFkMh>CSYUKp@{u?7lh=^R9AJno5c3+bAVRRDeP*FzP%F2q8 zyi_3!Ssr2Q#4EdW8(NnW%bVWO1s5e`dudO=K`Rgs)T>rAbfca`gc1vJyCSx*1GwrZ zW<|5R46Uy#qlU?5L+cb2ARiS~m6c`Xk5`lx=0j4JOnB{}skOdBR1c$JJI&HwworI9 zCc7QgZ)%tznotHZO*&U`cF~$O6E6P87yByHTPhp!@pu3Jamub;`O&ahlL=>Vz~OtK zE2r4x5-~Z#U_9@?IhQI_7Y?%Dq_-IDP&tI)>?e56RDzjMqycbMP^y8yWgDf^?#l?JW3|6_q~#7?&lZ&efXXeFO|A&dRt6xO2L7 zY^_~wksd=0;cN@@TnlNFE1n4nMV#hXCCak@KvfiHxjZ=uZ_KJOIem%Yy*;*^vK*W* zi(6C&(vJdxljQi|S_rYI;L@p#pdYYf_)(e)%cL^;bIWoZ?q2t@+!mcV;*I7zoY^I1 z73^$TS&3*b>Gwx65-vPM$YE5$6Gk z{nsz29!~c>-YYpbo%-$X?IV9YQVuDit#_hFRgR-VZ{~B_OlzMy~t2tN|4tDUmGuhA%isBt?Yf%my`DEksJOmNa zg%5c2X6adiK5`QwB!$&ZOi*7ntHP68RTt|)S+k@3@b42J`}eKWYh?m0@x0`F_LEyz z9)0NcN1d%YZD3Tvh)y}-(g%haHF*Ut2c3%ZiZ4+Z6i}adSYjPo(Ss9sm^n()m zA~#29q}*^`buclc+Uw|?WsbTPO0Q4jNGL2IWY|nSVId`7Sftk!A*Uu7Rw}#^Yi@U^ ztK*;yUuAY6yQHGBG#AR25?T-E=Or`fN|fuS7+#@iVp3vO;#vdys+8*;g=GeP&$%_B z{7(IIhK9kgbv$-^ZsYa;^Yzm*ub7oAzVowx|1oFff1T_Iubii{WN2kkW!AJYzTCbE zyFsDxLNY=U-jepSMC8rj3@ef^WGC|qa&ilb3QO`bX(-dBF3+48lAr3MdkN&?HYjQuhZxMpQY~rYwGOZCWf65 zLiXN!lSN1%3qsg?FF`;AR77zrD&pSTI;wTG?on-Rt!?doyIy%W{g$Z z+mSKF$3OY^@}#TxpYuQvFqLO5){7)8hhA6URPkxaJOLXuc0ziKIT5o$BCCmm@SIes zl!IzS7VJ`5oe)A*@em8?$r4YwTZ}fRkVcM8Alm1PQ=xT?#wF4{LLCRQ2jZ@cVWEF; zA~qE}GJ%2H4#&p~5rx5|r10f>x7VGnMB)c5qCyGj906vq$Y4@po=DP`+mcZ^F@#KD zGL)I+TBV06kXg&pxge;ey3hRmp9vT5etn5F37PW|a{ZxC|Gm8S+rLf*7!>%Y*`f;Q zp~+?TiYyZ^ks?$|QpoYN^b!w^7V{+TRRW|;WGc0i*zE~aSyo+*lb(#FQ<=~rFv}r? zfD{-3;UQR#!^U+68H+*4o}nv4=Q6OBR+7?~#O;IbLoDfFQhcf!Lnb;S3600(w9Lwa zYJAJ5FFuHmC0g7=0iFrrB;o1_o z;S3&NBsykd995TF7gVWfNepdmPy*oPh=BMXKbMX&O@YcQf!_5Ql{B?a# zIfF*{0+yIrloU2EXKbMiADwQLQ)B7r8DT3l`WWb9ZHC+uA^L;{zDglsLGVA7i^=fP zL^+{Mh?!3k3%*uVB8OW-v5S%sKv$1p`~8sJp!p(9d01NOWlG+Tn7+h)q=(aorN6g)I>-J0+Q6stZEf zH-#QKd-Klwr*D6@lQbQl^0?`d=YP8S)KB+so{yx_xGKB97*5xz44QXRF&`*bwoOif zqzp$V=ZNu|z~Cg)p{_3S^)47JHVc62!;K$_D2$0EQdjqCqjKY#1%>{VaGfd zA0M4JY&oEV36>@rQ?Xbt8ba8n7YObOA?Jn`9@2a=fenUdSOS}s$P=TO$5BN*V$DY;yQ8Tvyp&;{WLbq1zZg^~r-6fzJ+F=RS~ zun1Zzfj}h15r5*wqtlJTAC)|+R7fO1(k*6x9O`^1<_keIC&ebPjdBjm6xm5EM@83Q z$G~h4@GV3aG$G~$jR4w0ZjC}4ya%bgV#UG1JtrGhlWiC_Nxd*5qc zULYMHRmD8nvVGyFZ+?9L-j$6~rlR+mSNe?hSzftNuZyVZoS+@r9mMP?PQr$qLOcZs z8KiJ1LP&9ZfkhMSYH!FD(3lDkGNC(`mPk(2WxJGSzb7|?g0;q?4~OF+0Ss1j5a~2x ztw1UQ;RdcnEF_?a!vd1_W01|E7Zw|HD9Ii5=eSInK6zYhQYr*~;pd>_rU;`A?VS;= zk}HTq)`7?fU{Oq(glH%xF=R;yx_c7o?hqFo0JTvnclEl>18<%0R50a_eDl}6ORs&g zjkF5L$S14!KJnQLAO3Uw>Ux~$D=)v+Z}x9;fqWYnva%(u)m&stxIGku1XI~$rj&xj zDhU|@GIU&05sNMkc6YQ^=pZhOVvb2=nt1VXx)6_P%`Gi3P>8w6N;0?tJ(DkceIW%rEZ@_$M9IarnZTAtOgRu8N0-3{J2#hk^zO z8P5o5e7qSJO+XLgMOvOLGO@d(E}c)s+$4pO#0sl0tz@Qf)9ucXgwUYD-9WI3McWB% zv?OBIy);=N6f01=t&LB^WSnS)BT5mtgQJL3varkL;8TI}B1@y3Byc)m2Pm}Hj~m}t zrRJL?I6;sK5Pjj(cqrmjIF;j46b=BN@feTcSNCc-rbW#%2`~NR^ibbh-#uBt7SH|Q zr#n|Je()G+E2%H$%<%esmp=OO&#UiD;&ZE?x%K|QxC2KlTy9#VOHWt#RA9+K3zFC_ z5wN}#p(=sMFc)F}9YxSWWte0sPxn+$?dlrqh4`Yz}T9zr+GFXr13iVLQimb`G>< zTgt5u#lQd<$E`*1H;AYtGEMHr8{sv^@QZuZ40R`(-)!62z0K1;zICROCm#Cv+Mm~+ zy|jlkLTZaSHFMRTQ$O6j^YLq~e17TaJ8vx8{PZI_K8J3u(^2)4N`!d!fV|?l_#jF^ z91!t`Ogag02hJnBNqoGitG>Itr@5`&qf+Mh&4FB(C(6MCM)enK&2FWX&`BY%C_qys z5_@?~H$SB2LAjqL(3Zi%79F2*!vD`-~}uu~s^luY2;@4J$tU`?+$yVDPp7 z{`t%K=k|~`llo&$^{?9V+P8n*x_qomAgDNg>-ED|Uf-$Vvl;T{%oKBfL>e2D%!wz7 z?SO5gPi)4Kfe(kH7dB(WF+hRlq0t4QHnp>+BAne2(q$ER0tFoWNGz8b%Qi}R`26^A zBXNvWgs2@vXCV=6Ss)%ouvP$aJvNR-&;{`5j>H1k3yck(%~YPo$WCN(aTXnEvxn?21WZxUNZ@vEX4lI9p%y+#@_CEXJ?K`h62ns|K_Wu6*bH9DD(kK$J zr1d_gXL>{w8WKUz5rOOvIceX$U z+Uqf=qP!>CvH%Iwfrwo~qKG(n?sni~k`nRw!pxAP5zu16p`al8kcg9N$rz>p2xKI} zX&{Y}4q}|dNcVc985!fok6pO9k&T2mp2i8jj_Z4BR8M(p5Zi zoG>AVEQ-uNU!VHefj&F@83CIC*%c(Ub}nu+Pk|*i%3&qzFe?k_r*7UyY=)q zKTkaM`0v-gzWdW+qZkUPCNn2GKgy$UMKUC_EW&^=mI=NCN+;-tCUPvEY(qR*ViVK2 z=?b)YN%8ub>)H!Di!wuQn;Q5A9Nt*xFi|KEM&r*P<^F=OB?Lj(Y*cqW@FizWQrS$Rw*R0H@D^T_Z2j^4lhe7k^a z8~5A~zdZNy1=32=te7uW%suk#i{HJ!qCmq|Y<};r2Ma`StS;aR^K*0{93Vt-lH%R1MP5%{mehbaOW-lk zU`ULOIh81WSRBP7E1~eEHmeE7KUDCRtTw3-sT6W(gpgDLwicp2KNbJ-D#CS&UY_pv zcng~|6H@s22!J~q^76R+yqbIoGb=yOFHTly6JZKMCJ`Qy_=pKf@wCjTvmL_d+$b{@ z!(+M1y5#ogg9m?qyjI3m*YCY@^VO&Kqwrf0vuqfzJ>|TSz6B#3u2y z2&Px!`8WiK0vR`w9LItvk0`rgR=YGIO@e_)LOdg@vP5mJZLP8LgC+Ty%mlTbqPOdj zOA$988B0PuGk5liVrj{uBCbd!mnk*40^|p4{y29)$&r?=c;V9*pV?0u2K9K|wv`7i zy#Cn>{Q)ssvE#&V*k?CRw7c#hj%|NCN>=hm^Z{*p}aN9I4la(n#Uy2 z1gQx3W7tLm1F@P+=ciy>#M3BgU$SLJa2x;xq^9yrCR@;(hK?DH&8Eds9g|x0^fVE$ zAXp?fTH8=j)zsWj94xOY4yME3)e^{aCB_gp3wJA?mc+?hxOJSoVo82P3&PKv4Xz| z&|8M7tvPu<6?&O4Ya;UuQjUnpijR%sFwwTB#8UW1Jr5X^G!{3F2ObEWE@n#%(%4vd zl#;31>_~3wY*PYKv(!|;BpD7dVXVm}VhEX6RNqt*4(Eh(OB)-@{ct4<7ZpU^goXDG zV((Dc$-L4{`)8|*N18p2QG+Hk;$M0P*Wl*qRZ12=Z`!k$&p)|_w1BiGX5FHRtDb!E z^Vi$GJeF+Lg+Iv;&fi{M&|G9QH_nK*%*|0x*}JWYoy;Y=Fht546X$?lg9mebX;Din z$ZeRM`s*7@(13;P7>&#rrLgVb5J6EBr^Ogv_pH2hvl6^ejWdx9>rAm3EFb8_r?8m3 zR5bpTDh>@UF)TJfcGw6^lUyuklM~&Br1&J2(NZ)p4zLU|grx!Bpjo+8;9W3z#~CZe z(sN;7W_6dgwiZg!_6(Fp!|8iKPr**W!$1{KIW4;$o2H2_Y%LsYbXkfT^0(qqU-QR> zrBWu>H}S16FFv)N)Q_Wo-IO^iPoBQ^LA8;`lFU2#2cCvIJ9Em)Y^K)PMRjxYlx-VU zl`@IL8YOZ9HH8#wvguAW5=5Bv< zzYf_V)-UL)q%sII zSmHU3P35E|Ch~wIN`eZJ+@1yU2tX{!aq*nGS(+5UxBzm;q)1ZPHnt)ZE+{B!>1@lF zr!kdbpN^+N!37)vDwHpd%CkaFS3-_1-DQ2h}e8p#aB0;K0S{# zn=}$LI%EFqXFk9CeTR(A&$yO zBaKmWMLxiw#n#fc&hD{o9gS7Rk-Tyxu+Ct)rLfpk<;F90LPA;?+kzAe`i_K$3LBpu z0`RH$F+yl8E(ri1i0eHK^;l@M5vUl5=0F4z&qFGQBc!vF(GTE>`4A-~dQ`wJC$Vz& zZPBK{0Tu`sa@=d0s)C}js-}+a_U_KHr52II9CnD)n5^ zFRAKi@!5LTw-zrcP4C;hwmvmM9yCIy14|q;MkD6h!U2~(P+6TD3TOMwI)EVxG;#R+ zq&Ozya_S|3j%ljT~7Z=7wm|06RiX{gY74 zroePfu1kYsUNTy*3`{SHeUJGfh2MN;l^u97Lhcb)Qdgjq$l$Z=&y9F1Dznq=-W&%{ zVFX^6iA^NX1+Rq5<3%uR_Y5PFbklyW3&2q4gtg(5(= z(7B++rmn`lPXTQnokj{ZmUf4LVBl|n!C*?I5EaFxlyOrCK}=K~gcKelV^W!(MFrdv z^t8AHdzntegI*nAnaZNtlG38wJUd^n1(Ay<-8q;67c%;>mDvo@UgFstskjQjn@`u>2L)&Y%+;$)HsVvo5yvumC4~=!QlfLqbT)Y{0H1dDm{t9 zvSf&WzIb>A5@?Y17faJ9bfm!0IK}RNsBZlbGLH4flK(|l15f)ylW*(-_~$YO$!R=# za+*xeCbY=$L-6fPq6(b`4h7K&omfm7J%t#YL#hX_tSE198`n}&=+@gfK-KeTV<>8G zktUv3F|@YaSh2Wr+U{;=WEIx#htw7GS?Bm!yC3`d z=K%ws#qkYaxjXvc&OujYqa$g@Kf$G!_M7w}eL`Asz((iG+=4zQK+Kq8m&(Fz(6FRfvmULMQ?v0X+1u zip4G`gFJz60f9_}2}){0nvzL~yQlC)Ofbq4KLLpW+MalwWI}BLA(0v`;N$-xT^gUP zsGcx+>XiDbs6WI2+LullL(ygzE8|(^!)tRj)x#AVk52PCYAZ7~+7D9HmbzNhikzSg3|zK?sACU5Htrsb(T^fTuzV%mZ#vS-~`SjGp;ci93eAJtX0XR z8kl4NN2xNZ;56g*y4*EkF7(itFsh^J+a~w*^)xgfDudpOxDk`A^yWxnIrZxv$+0!f zE7^i+MF#X9R6$`uE!EM{S#bhcsEipDe=5tzhd2JI8f(g_5%ve(zOe=VNUu#2c zNe(os!qL3E@`m>Ded8xgtS|GKe3j9hV5ZxF*|**de|jx|M{;1qVNc5;5T8Ks5b!xJ zpTO+OVinI5=9gA$I!3YX>_DVG%bZ=)IC;V(ydDsiMFqJYrz2ciSKpe+1=w7K86?9w zaawP8$Jpk&vRr_c4wIA8Fq>kwZ`~1cx6dm(aBgnEsMcE6+`fPRpPx1xSPX4t+go3s zIX0ctOUjRVA~a$CnWOJs?u_WuSjM&g{p^z;KbUXO%M8Jp&z`MaG|?N{v}Lvi_dO|Q zlp3tAYijSBFn;1BH_W-9uc?qrGMk&~$_ui+Sw(e??S0ecFI%&5)AluUr?gHP8k#@Y z)6v>cS6x~Z$qi-u-06g&s~T|fhcc!}2Z1Y85}rg>AUohrn^#y|URB%N*xoyJ*8GK2 z;0e8I=ax6?(l)AD;L8YlG9K`8^BQ&$q<_2XOph|H@rnR#jP9QIy{i6|;rFpJaGU z?uN$3n&NPFXyB1Oi@Q5}r_NitE_VB?8#gXrzIM%`X%i=Owl>t1mlWpb2D1nmM7J*- z4ccIh2p1NMzaTHejbAWW&W#onSJpN)c6LvmKD=uE>XjQdZ6R+xws!gOU|(m)$evC8 zx&Cl*ZF57t%k0U3WS@{FDeNjMuBoc3tSEO84TA&%7h+qmZb`^LeMajmFU<}a z!d=TYonNnIF-QQdKuM))z(m1_M;|r@r|1 zO!LnG^VJbK`XqeqV% zdFskfpFh58WbX9-UOWZ0mBo3v0e`?3obvR`s|p|i4nxV}JujS|9`ptL!Q4o3MNMma zZ(slPc_SxOn_vP8SI)z^A&d%}$>_#a51`GE6dG5dKdT|ld zF^5z$mK}Qe*dO~_roiJ_qyt(FM&<^UHr)UG$6H#K)a$e7&TEA7$0!bXh%clhvvn$r zZHO6+yFOiSb{GY6fMBz0tICUT5wi0u+b7OhxOC&LM;|+Q7_y1S&z(N7ZNsW13#U)& z>uRm3C@abj`Li<}u7a8@Fl6|UT-F5}@-iHrEPpt^sH~!9?D)RPGZrjawPE|7BPWj? zJ9_kqgL`)$-MMM`!Z{P$tD@QdNM2!CRb9Yja>xW0mr3Uw>tz$^6P=;aB1?kW{1eDY z$tgv1hf4Gn3!B$|^!(I-8dzOO1A5$A36~`roO0^+(f9TaWAdzzIYjRp-u=?fUtgHJ zPRC*kG~O(?-3&aBI%oR%kGJP6Xt8)^54EBAAB~Goq6?&=RG~%>Y$`CKEMu+Pnp;^1 zL$+XcepN+zNq%m&FI3#pJ7d9$%{$gF7+Jn{)Aj@VwyfQ>e&w=-)BAeHHCL4t!gxF2 z%dlGvDiutWVRI^0s5M5j1J>0!xlyF}%^ls*k z7Yz0`7Y4JSrC3s4SydDXL;{&(o5K!oy%lPR(Dh8S>P2+1ln((wBua7o<^}US*4Bkp z2S2_zJ4db7Yk}&@^6G>fwtZ*cg`1DQb8-V|D!`wkX)_;t;@ zoyMTa894RszTBzf(zP=dPf$R!jmid|MWcYbu$M(e^_Ip|SLF5XJ9T1iPgi|iU2RoW zSwYC_@ki^r2IjBWw0&MlBvM+{yY;{>sM)PtwrFa3I5*(QH0rHc1YX&sRmvrzQHVLh zkX@nF8tv}PET6?-vS(!a!&Uu@maSO5Y16I)+j^@j$_lIJKLV%bfzI08tPEc$zqGo# zroO(leZu^6Pwnf=Emi}r4f%Q|q%oOtwMr@!04)@+nJ_#}Befxhj>gqJ`qaC7Ke^UjZQ*ca_Fy>E0o0~Z8=n05t7j{E zC;4;}mQS@LCNS+KKBHQtWC%?GE`_INrm;l%B{Sc@_S}N53cJ0wp{BYdihG=uQ#p3x ztYw>aEDk_mS699D(B3WE)~{N+aInZA2KNoT5LXuQ9$Gk`^4EjHgo;8c(;96KkIyY5 z3vZw*HkD5sTDo%W*3Ekktt!z$o;z#tuFcEl^tG0Sy>4$HuNW7h&h9AdUitRVA1L2s+jBJk79SHl~Hlx~P4E1ce_;hpY)I4L$l0k1uvZ<=p zXH=;aJdP$)N>RGxe2yT}-M?U6pIyPHNh-!RRu|_5y_vZc&Ev*TTeN=XkYA|~OLLbU z+P7u<#ubYf3|45Vs3BkzY9}5CG-i<(jRJEIn_aO~rMEggJ|}cY35Pme)$|36mTi1w z^WG;`N2Fr8!Z&~C`h|mC<60|18Qx%CAyU!`5lyJcn!0S!Ku@WNB~&?-6iq@A3u2I z+>!6L2DP{fEAfuWhrRX%eRU zGVNfN0K3l{WdTM4VP-Hy5ErtXLhyeu;k7l*TrkkRbo3W_qJ%2q#EB!dO6PD!8aTr5O3H9q+uj^7-{1HL{j;{8YecN4gfA zu;%cwX}J@t%^3rOl`@o00h30lP?}6aU1l2aQhbpnII|Y;Typ9iD%I0mTbh^KylBgr zOV6I}3KcZZIkGfpkxJb?JNEB6Fw!)*Xile>kx0lA^Xyq!ndz{85(t16MtccL+e!m0 zV6)Tt=%1t{&@#H`ES%o7?9lFgy9YcHk;$>*?84TfK+A~>&pf?#QBydtq_!msbb!}8&`I(BT0}`jK=WyY`^f*^pRe>lE)XBvqCw!J~yDO;R)+^?OEh(tg~sFCe@h5 zY*)5LOSI!nY^s5mM1?zuEi%|4NMVU!MwYCutSrjOYCQUXH~+YLxXhiEUHRl5uUjv3 z{vph|`;T7cJ_^S2DmUqOv_T zeKTgyxb)J>#pCl`GL_T4<;4b{$5pZK%isR^=0r<&PElpG0W6(VfiQ*FJ~Q8@lmLRr zHKy=wkR(=V%vmn3#9BLPtj69nHoAQ8zV$s}kInA(=H`U5j9~J}?DH3|`}CdRRl_6# zeK;CJpFZcQk4M@kc;RI%(fe=}@NB2M1Jx5pRxijX8S9mWyBo920)sbQ2f=s_ErF4t zqEbP3@)iuvRHmTEk4}#`zbqQc4lg->_0tWFC6%omQ&!9`FO6jQJy|&|r=M#p4rJJ6 zG|(EDwy{%}uN#`$Td4#$XOv(9f=Vkb>KdH0dfBY;8SGSgN~+wF87%6%bfO_I;0go_ z%j@Q@?(Jx;EbH2H^_%AwhqJ5ODz>LDRHT;wrsR^#HOOgp_N(0B>-hJ z%~@6)^11B3&Mt4dJ6t_+;o5EM)~;Q-d^Utvmo9CLWZMjIm1Z+-ef@2V&dv#kbLB7> zxQI>y;UXamxx>RJN5)N=tY^V3R;IUPM>~g?OrJJm&eHXp*KXXhW6D>p=Dv(oDR@pV9 z-q28@lULS6!){)NM<$>H815K1Py%qJEYLao?7nIys5+x)dO13}!kKo1N@;?WzTFjV zo-}=6&axF-wr}0EeEzZplO{D)sG#Y_cIo1S2nnRlWb{ zh2F+YxlqilnA+{e2${~8yBs`l)oLphs^TV7^*P|U&P{YG+}XL=sIP~5TXM6Vj!;3wpDu&Dt3d5*U43kJjxddIM7#wu z1zO~wRqz8tN0#^aRJ=5`S(Tn0DG0l8rZ@Eu`*k)Qmn$PE@}R#9_MOprC% zEV`_vJOcb=t#K5mhu_&rzEV_6XF^DI%#cv$nfuYNwn^=V=_FXlX#m_tiSmZDv;} zknMGYWM~hB;5eeunr%j%91aB;_Dr8ir7@Ze{4_Qpww}OHaTsuf##{yVI^@{DA-)dd zcqs#Ic=TXtT)oMtRT|Mi^Jrzrr42T#7OYQe(4USsa(n&3pv!7WH7vO!$96UgnX1<4thco+i5j93fdRYQn_qsBVy7-V+j=su~=r#v{)S`1Lz?-E%D3jD=f+h=j7yt zLV3}UQ>XXjS;acYzeoHT8g`nyf69b$QJ2x|yaS zR2sd}u2Xs~5+0YwNBk$u8_`hLr4eR`=yt@!?8ikQW<@j^E)T33!8c*UcAY0l4`{S@ zlR>A|Xvw-OHkUV2QQuHsQ&V46T2xpZ^`#q)>E?7lIugE2lbByJYf^hdNjQ)jwgIS{ zDpV;LN`J9h>i{j(;$QRA{i|yS`l_QItJ$bCx~)oc?UIAahrIH8wD~)mZ3+W!ui56z z$gS*}w&%P1w@*Y7d~{ZuJea5DN#(3~a+)q9R9sw8T2$TD-(gdO0O@eJJQ-S<-W|*< zDTTvJ$N28ab7pon)|W?MkET^CRWgOjq!HWfLQKJs0sqhSC!VTh0T>MYCmR3oA~gVB=armn%6le&Sttt%@j$_uy+3bi}K<#43K@5b6O zFuu05vY@yq?13C`97`@{X!64{GfEq+IkNq?2VZTO3TqLM0|Zis$E31$ADacK08r|G zjH`cQic_Zbcr9=W$O_eU%{u<;=)bQurmMkjcWA6dF1S=s;*uqBr>pJi8();u*gdHb zkC6tO(qhvZGP1+rf~uDBlc&!aUblH<#=zYE=Bk2_#{#h!xl9jtl}wy@)HuotVC3Us z_DNF=vp;3b=T=T4iseCxVJvj_Y8+A0ge zp)9viW5#2u)u@%~U|(-zZt27sJ@w&?bP*ByI6P~C&ET*g4%?buxcA`3;h7T}auJp+ zmdp&D!ancP1i&|;f$>yi`E;jL?Fk}f&J2d?+NPhp{$TXGxtTh|M~6|C>z6>|KAxer zxC`d*I&ge(eMMVOi=Hew3Er~KWJaDH$g3FJJAKirtp^|9wPnMG9cyOx)R#uGY@l2T zv=Rni%^+y@vB|@Pir3=Q|E+lm)|^0n=+K@JoBR`oFH{C-5>g#x6BM>AOdcjoTd`yP zhON5~AKt!p(e&Qt$|&K)VK(BRgV2t|(A3*rQM=;I>4QtEGAv3uVrQDnn=3Klm{e*q z7ytC&!JRWRyPI+YUZ>NOm!Xterf&D39>$_?Xt(Y1DHP7!Y_w=1xpi$bPu~J~U`NEL zQR{6Mi7U?tEGI>z)MrnB?9uI8Hf?Nd9@mz^hh4i!sy3J`c2A_dxqEQoro-pYpE-T* z+?g{6HY^z!2WvBjQO;LL;0pkDXfg&u$>4B7yau|g7-_`}$KtDBA;$xSDa^nKLxVJ- zk}uN{Hd{?z7$GbXfFzWEkL_%#8d|qu&w+!p zvkibj$Hmf(c}}6(YEY{Ukw>wHJ7;H(tIvsKWqN$M4!PVjYXb`?$Jm(f>BpWbRVkb~ zVZ^EYXie*^Q@=iVaPL^T4IFfXL88lZ^AZwSGKHpS?(~f(myhgkDy^)`22mR&l0u`= zIsApSnMaLGd-Y#?g@dQOgs zgLE9?8ek1@2TAyzFd?Bbr8-#bWfwH`%v-bP+o;{qeQAnYL!tq2EVk41X*eagAN8IE7rpkgsxT%DER+&0~ z*J`N9W5GKT+7H(&6$WoE1sp9TqTWqi*ejQ6J>|urXi0rpb?-iGiP5iShIBGGbEYKo z{dN($>=LQ9zIyeKx3BK-8}N{_+0tw!nEM)=4^BmMww`|B;wvA1`SYFoJBUyb$8OU+;}3 zJlJ{n^XIqCY%26;SVe>d9)K{2$pm7M1nG-K2p<2#tHI6_PNkUgrZU8~41Yo6^sN`Z zxi=dB;Lzxu8(&|3`ONV{>jz<`=rqEgTxv12SloD05(Ah zW=l*(Bi~|$HxKkw)z_C7Mk*t)&NZx`L5THWg{02)xni9zR9^(2n~sL@y8w`U>enrG z4k;@IVT6{RYZ4J69s;?)dEMbjFu(!12KI~)CKD@+_N=1LC7U|^*Z)p_u=SsB zjxC>DUl6oP`D}2~P=*t-LNZvm018H&yYRr|ODv(HhKa+EU;QWP!PBFE-?;k5>D^m4 zjdVc%#0bj_iG-U5r(hVmsd{&9oa|Sj$s!Pl?YTOnG)YvZ#M!*_2Km9p-*0$@LxqP`OttB zYVX?#C@d06ICn4rrdF6j_2cJnI`tX;(PQ_1ynJ!*>ZNnK>vGW%w&)OUKzau)iN$w- zw*a+6?g5@OE1G4~LZFPR$m)OcCT`L7wO#F9Ee*9*l`f-3TDRW;ZD5Z1Z`0EI{m`PhB2uqnWb5`a0NVa5Ox(Ll?T zkw>5XniYZI!4_EX?Y-DptWU_{8>f1W{rcYaO<+tCz`|z2C z)qsmM)mN27b3#r5icdC&$76`nB}sIt#%wcbxqPWoZ^dl5taav=126tON_nvU{%=<< z>{~s(HsCZVAia|cktjIAA$$-I6)R>paXkDl^9KNv#^Q>VMrWXD#>#ycKmGka<-r@H zzr1i@+hAKo6loN+iugR81@8o6l*lSc<3UmaC9u#F3g?$p)ihP)hieu*b>+ujfBSmP zjG1Vl)zt=!CRz4KCh!iB;e6e;wo$0Jd27bDcK6Sozwp$%-+cD^;U!aM&YIEFT3ePE z4EU6U0v8x}G;LcAgQ756O?sV}A=2ng=*^V1PhGX|$&cl$z;6f{Y=y~cbLZ6ek1XGO@cCTvK7kqhD6IUE~`t7g({0D(_@93ScUOf27ilK=$Iqr0; zMaiZM(G}5Z1SzFY9G{}0#WD}F1lCMnAh)Qlvwvvi&iyBzdFQKd-`Kl&<)Z05ZS5s? zi(K403(}xi+?%A(NQTH{3wL!-oV8@b#^-*#dHvdzH_kn_X8zRi4MmZl*W*-yP{>T9 zm=~@aDCQ=zFnC}?VTG@;+P%3gkG}cDvP~!7`|kGr_y>FL-}>RBOQ&|v>#8ltb{G_5 z9#C!YS-@nRIKW73a9JL1$k?s0Y=Y$vEEOHTf`$o0yH36G$xpZbjeqdw{k#A7?x}6d zcD`|>J>s>eYXxZ#8srFs>_k>^Z(px91wa@kTjj(!CsNcnVcPsP`=5O6qi=8A{Qj9O z>zB{&?Hw1enM9VUh2RcAEcXU~Q=L$k?yjFYW$y5X!|&g_`{(s9-+borO$(+?Xez}r$ThE{-tHTvmgN6zfIy`)gRF=r-@Pyl*{_WW%BRkH%a}B%+MACom{PM-?&m7(~ zqpPMc05K;%t_-1|@K7Od44D(N7s(0AObis0Qb8^h$P7*tvR%_RJ^>@kpKt$*v--_{ zZhrgTGrN}#Kl9tAwj7VcBxVsHCFlvok?yOr5u4P&Ke|E?Pltay;YRa6dTPutp&UH&F!hYNL693Dp$oziJh9*)ZFFF| z-_o;q=ZWXuhmq{P`}gns^!Xd7cP^bh_tEDUm1NnCNFLI7U}mzC;@Jvi|B*TwgjX1B z>?SAX!BtHYW-Q)(=@N;$g=@`sR`zAl?=m6%-N`hlUf z+mF3^{q`@vUVHcA$wyYsn%G)d6wGu%YeT?dB&YBTwzLBPM2n>hFh8dw9RQ#vP%&}h zq-k@PZhic@_rCbymmj|Q_N{(cR{89Dxmdtv5C!D_)(S6->u^(md?~&I(=ZMk zYjv=&E~}p~W9jab&%bl!n;(Dv`RmIsJidAP+^Lf$POJ{3t9VQ_;5dAVkP%0h3KU&C z3%Rsp22()TCwc;fRjm`}EZ=_Y;(OoxcH{1imyhmPH#B{0&}EidW|$sIT3=6`Q7F>d zJ;hTOZrXF~#q0O)-u&V6i)VJNp4B_Hx*+I7xfX&6+f>rWkL6lMjGMAn7fQL> zte_OqG)#^{50x`-u&^5bv#WQVe)016zu&(9?Q(Gglr;hC1y>WhTXH!`;m|<37GRLCfiA-LLY?@%&Jj|XEQb~7_ zvpkHl#PNvxOW0t;fDWIWD^?iXaL#S+?3=TG*JDRdojJb$k+ma3gFWLgoDKj3z++JW z>tJzs)G<`KRA#X#_#EI?MQS|(l?WA7xArYqx9i07AN+i8bo7(+r}k|b?#uVs6zb^) zG$Eh_|2umiAkaIq>gH{J?CiyN?>@MH^XjFOdo~QCvMmk+^k&klRU%kQqF-+^D8L0F zH2(nxO`vl4T)90XR8-l3dop*yveg?ltX;iwUT;ec;Rkd5i%9}rqj^6$Ltuv2pS~A#KSBk+Xv0SyB%c9W*N>tl4 zsA9&_(o!h^&(L@xi5_`M0aEhz@e>F7r_Gu-G_|9p0W*$FCw#3TGm9Hc^!E^vkYdLy z#tP%X5C*XhfNGQv*Af$;%Pz*Dh!~!gTi!5sT>sGAIWq_PCrxN?tf?#n$Vo32^Qf>6 zp+E}*RCN5j%AgRXAxn~Dm8NufHka0S4UTMj?96|@y)*jnw{O4t)c*C;%d%`LReuE` z?@x*Onc3!)8#5#AD^LS`_|@&vyVoy2b71SzS>qcjqS;uaN{J>bR>@V#*f3Fq04LO< zDF`LdP?iG^VDUtXN~>#IIy*YMdOK<>%1VnvnN~e2Qy~v7I*Ek!Igr1J549+W+eoNU z{6x66#6qx|O598cVafr5@Pv!Y$|~x5`o?#4Vh~YXR-Bh^ zR|>=`hcBlHEsy%9wzleMUQP(jCc7RYpj=d0gi+W-J^&U;JgVTa;7q}9B9X;mdL7@5 z#R@=&K&uO{$pM{SZnV36p>QOUU)|c)+)!IlS`_rzVT`QMLx~#5`Zx-V2gab{0%w59 zr6Z4$$wjnODXtUH5503%Y&&%E^XtFe{_gwF{&Qx>f|?w=Mo=1rS~V;@{z+-_$PE6{ z$?J~1@#T#lKEL+$SFfMky=o5Dn-{Q(QWF!B1yaa)rolyx0to@gPQ(Lb4Kh3Sl3XL; zBOSG7<(5=bR#YON4|y|O*lv0ix&egJ2-ZP7sIUkk7D*g5#4?fcA)`f(`!oI|oL!OG zQj_tL$RQ*upnVC%Qw~6iRpk}sMPaW^Ck35T53hL&wn#jM3T1~RCYw%0-wRTB60~M1 z2`M6TcBHhiXZGqxkG}f#k3W3zb9DWb3cpciC}u&ZFeTs7z^*IK&$J@+aD_^xj*F$?l@cg4P~n-7WXA4K!+9qK-B8S=Qu&r} z)!4q->mNJ!-nH*O{_4)n&tEvOxUJl&7uPjHIR`8KF?FgJVHVrQ6Yhj9#9}G8YP7VbR6CXlmo;~JgtxzQR}5#01=fYUpO~6Qb8HiVt0A60)Q+LX9$}IMv6cw z$6SiIT6lmUt|O4~A@st;<^t?Oj=$$~(`drXx=D+6p8d~PpMLb)=)XU|b#nFivDrFF zS%|Rqp~Za39%nIFN*V?qed*d?5B|RP(bW&1du&;EM8;vWcr3O;r=TSXBw{X7v1Gb{ z2kJXPwSWXUPyw)_6Nr^E5s#-(%cN+&dox|cd8AQFh>%3cv6Cs}q$N;HYuuCAdhYl6wwE(~3izEsR?o2jUW~SQ&+OS#yegnb{pRX0A5|28_DT%nB z2|NMzFy`43DL;uO*DKjf9*2o8UH7ubE`E6R^0$9K`1`vT_YO2gO$x`L=%M4%*Cbn) z#$d}EyY%cQAmQD-`reh-k8K=h;&XV&;{*yBSb|i6M8r;`B_`5Ya7xCNh1N6{n!?rs zEy$B$j)7Sx)JyGdH!1;4rBo1&hN2WSCF#%zA4$PsN={k?YU*+nqPUlkD1q+Vk2p7y zLB@d?H}r@(05wTqt7xzwPj_cHt&j*cVnU*k5W7>$!HXc@A`l0-qbzzt0&uSaiI5hX z%mVfg*&>g_H;&(U?2V7!{{jSyTc4g?+gjw*ikoX7gazBH?eqbk*x)Oly8k~v{qx}d z?^piw#_6r|gM|3}CAL`fP@;(<5DQsQwoXWawg#*zu-gb*j8wS-jaRk{!b>7l4LnYI{UhuE|)pxg|XbZGKp2yC*Z z6MC6$r!(DVv07w2v6wHH(edzNi8w^T)Q*Fi8RD!!%mWEA0m|Sa2(Gg@Lf@QiXI_8( zgWpCU{QJ|}`=(ZVjpE$de2AW=#(YDvw?R2Kw{6)|xB?IE|M>Qc=O0_yVdA3;Mn{

~8I2opIbp3I554>fDY+yU)G!%EgP1_eV3G76oLufoT@W;5Li1ga~?Y zNJK3_rL(b#nTQRz_KG*}$AV-=_gMvF08by52dU{ z-E6=fiQjC7EO+6PAARxNH(y`7_QQ>9FK#U{%f$+fl+BU~kXK>)kGF;OD=8)x@)~?0 zU@_<|ptlW9SSpjr&lwome)RkYXzZ`L_x1UuZDEs8G{XRgy|kE*$u+eCrK4=>qyPQw zJ}$!b*N*L3Kd;-%r4s=IE^fZ z9@`6q`rgB*U%B*1yMj$-4nyobZG?~nC&M{o1)fZNQqcN{ukfIz;g2uzw-EPbvb2*Q zzx4c*J9eyGy=BMo*T1@Xq-#V9P3LiufN+Fahkm^A!q%aQEhrKT@=7NR9eiT4 z4W~y6nYxuAu^}ZOo?c=y_dgsGBv4;R4F)lLLN^@8hk3@yLnC8LqeV#U&=%PF`tSd* zrt1!9>gwV*ye#%!Nk|AYi~zF1#S#^8f(lX<0e7`px2;-+C<%xPIKT>3so#Z|Oba3C{&zw_+(hf2)j-E;3f_uR98PxmLl+EjoO@E#IzU{c&%B7SyG zC}p&CM3$mCy6fmoZ6hWvTC@4{v-f*Je&^jU*W?WHaneq6=HVVoxS$v$8z;}-(%6P* z(~hoNhpY6<=4J$;f{vmqmS{9@VP$FxiyHjENx#K~O!*O@%NnaxLkm5gu+5zSHV3F4OW2gDfjv|sh1eqeyLuN9HdgEyQ7yl06O*D*a0%nsLVBAT<;RTZR)u2S=q-6az}Xb z@(;I`gA;)H%uQ?^kq`yL7lo6!*}$M?m>*1A-=a(BHZRPclASYcMsE7(gh3I5#((nZ zOeGTM0I^|=*+?OfrF)Pr!(WP!^Ek(dIYUWDcNvHYbM=avk5Z!}kW-hQ#Z5b&Gbwxi zmY@Gz-wzk79V!f9wY-}i7}N|I?7&L4u|Q`#guh5aTWH4QE?8N%`IpP+$`IWNVy}OkaMg6}xxY@Z`ky`~|ZnCVC*p0lA%sK{>#G2fq?>)JUx)bTvYW zF}AU{GPiQlZvFG%s+l=67q8h^y}P<>dG46R_|#SUVOC~nTxf}+EiyPZAt*(5H0d>1 z9_$7DB^RaewZpDS*tU8^{Lr-7D@!+S+qQAt@>$bnesbv2ws0qFBpTbmP{*=>U1+~? z@u3|k63WrJnOGYHdL(4dSWvL-)KmC7^@b;BDrUy|E3~7{c&Jvr5P4!X$*cPvg%&fT%j%iKhYo(Saaco!ni#}tKm2pku}u0+WEb1{&rrRHAw6$aow1>#*Lml zW6Amhe}U!nZ<^{?j0kd5XJ`H)+h!Xq5c} z6xJB`3LMQQC_6$?Cm9UzP~p0;#9=Y9wDT|ep(-miV|MYEce|kIi`5E2fx)8M|mC#u>GdP1s+SnN@u1etV|@+Q!{O>*r>So%GqcPrU5VIu`97O^I*G z>Oi+o8#ACJ0;#~(1_rk&B!ElQu+bCWFRDBLFKtlIgOi(b`g_U)he!a#>%jDOBQ*-Y zxVfKQYzOmQ>3ec|%Zl95!(xMFbdh0|(R-HC+Kfz4E?g>&3t5MqBxm^A>#I&hy;ds4L(4Ah`xiS%^xrmGaDzj8OJN; z=zhC@>)|WN?Vj8F*5sy*$Z9x}A%~U=32bRbo;?8W;gDOy`iAApS#KiK1dQw4Z}70u z*~_+m{}iO_4Q&^8E*k154XP@5Q=+eUqQW)%XiGfNv^zv=AjX}fu|?Sii1m*r}Nlfd)n zT!6A=6fA>fAt;QY%^l~hybl|StWIjp*uuk>=YCkGyJ^|%f7zX3$E+@YyYZI{Zy({AA)Ko+_V61 znOo%4P2c~Guh(~6-d8d!H8vv5PmVbWP1jK~IDwed-=nw}(T&9n&OLauF(u`kV-4BE z5>v9b-@4!YtnEM zboM}Ncgy{kooy}mE^V7Ke8{l(>yEvz!iA3hutF5R!{-H!ieDXaO&Up{v#keZ&VHd0 z@ndHf?`y(N==&a>E_pB9U6wGI1Aw&?(;Ee9oju~`Z2#?*LHPFk%Zv4&Odbwrrx%>g zWNg!`IC!<71wsvgvl2cDUc($E2Y#iCJ4OUv0W|_tER#r@vgiRO;ufa6-=% zaRJY9g_sNGwT7HcV8C67VIaaGv4GO%Iq&zYzr#cDu=)CxtH1ArBM+Zs30QAHx7);d z$h0Frs=tXD*Bjb@s$MjH2x=4EoKf?SbO`jWfWd{=LJZ=@GDCk0Oo=n8!BFbCU+!F( z5<4Wb?BvbctsTAa)HEL&uXa*6Sz<~$?2@Dq{NTE&Uq>c!MhsTd!RCVSb z%t+sP^T6^Hf0^4j1%Od8CA~nCqEG~<7ao7qCw#lD_u)6?^HXDk(39TL6y7aFqY=f# z1_@0MVnSwUZG+W=?F_TT!Y#MK=yDd-7FG5X;!Vx)fFtji&+9L#g zF(F~T7&AFQlR=h^@5(<~?=|1NbLHszX`|wXj9dEU;cQQ9UOvN`z|#_RoiP!bZo?=R z=IBXACcLo&Qpba0Q$N`J%>z0{y?>w5jSG>vjtMaWX1ff)d%>YHMgQEb=i4#UpSx}! zDV;uY0J0

iT;)eo{J%?UFEf&%!qI1iLaOLIY%{h-og4f)e@Cgv<$yYu9wI~VdI zoNeu$Y;l{2#id|4a2fC11kd42Rh!xX4#+t)|NPC%C-;>t&YhT%v-;ERg((W$Kc?kS z+wpFs0>NX%cfNrBZ&7ZB9-c;Mu%SS^|L76Z%Z@hD9b|a+^QP=5m2*^tG4Sr?OlSUH zq}(&^{asCOgm3p6UR>O_ZtAc|KQ(}*(1}Sz_8@T>-V4VNbzuX>(tLT-E3D9YQgMbgAKopQPI3ki*A{1;V_n%br^R-`39{qgh z?!9#@hAORT1c)xI4>}BE{dwd^Z~(9%H<^MAO9v;!Tq1_&7Jczs8y%Id>$~R1x+}u_ zOXPsjVmh-CAu{h_E52y%CNbUGShq4WK3tdB#F%DfNJ%zQv^9;jC0+ zH!K|bjbEC#O}}dG^6~!2*Z~j-%rdYNSIB!F1^Gyof!7LMtc$=bLa_;FSpj?vWmx7S z-MZ49y6m(l7t*shlR{b>PP&UQ`4H0O7mczHv5Y2CM2?(XyhDdfTD7~e6)dIeYCiZ; zlDD((EV+U)7pBurQYnK+=N~72tLVD-?T)2sF~J@P`UB5}KjK1T9mG4bpzwCW=a%k) z5JBY%BBJ&P(IOfNxGCxh1Em~r(2!W*3oJa2IY02#9A$3(295iu_PcvnYrWy|@uKt~xm!P_ z5kCn%r|?p$0y6Xv0NmSihBwzwZd*8}zt&BTwo5n<(1}R)UYlq z2P`OvGV+(_0xa{5;!+J%4Me*&Nh9waV>;*16+fO-Q22+3Eh z4JX-6r(1k}^vH=$ZjAiTr>6hSZPFe=t0}xyw z739)p2utV^p?Q!`pA(fLQ-%KyxC2n~q~*l=mp9N+3qgt^DR{J3o=vzgNzRRw`mOoRTpW(+d-l6dv)jcU`54)b%~Tc(80nN|ZOc zssrc*3qpqurU%`&w7xVGvE)-RX99Z`N*cC;-!(K41}p+t4^MHzGNK$31{tOJ2d9Fo z2D_lyqdD*G$9+x-QwU$s^#Ji)NTWzNKFJ74dpPR+Rsb2;QSKd;JiX-LZ_mguHFVzE zwJgb98Kw}a7<0wZj&^tP8MCbRFDU;NJ%2auFP)PT;SGln6fR;?k~6fu2ug$YLjIn{ zWl(Br3F`%i95$FSPJR(ICOjq-6!9Vndj4AaC1OFG?f*VXVPayxu-uS9*frR_sDBVj z3VF^GuBFllS|w2hnKER%LYjGnr%W&2_bY#-Utg|UJY6FTiRD}wQ!|}qOt_17^t}2T zI4hew@1EUToHHC9SK*e#`*AeE43x=O$S=I8g7j3(h`a`*4)I3=qvN(kxC_EpPy&+q zd@cG5K@y{UaFU=1_GPXHjC=;VWN6aVHWg~g(&@fu=6_zxk zsP2dRAWheObI;KDy!$XLo$~U)9*R9P>4)<0-Lh$-H5*6Xp z6zn6iF$)}G-eX~c1_AU5$~Li-F~YR`Er$QZb&!X+y-d-~i5ofC(qriklH` zZv-icd@ww8GkOs?tNOp`;v<#@8)E0;9g#A9UBl@+xUh8HE&CS@_fxtnt=))jy})*G zfXX*v$)N|}rHzIcH%@)NZe~h^#>EaI0j$F1VHvPs?{3$PU_%&MBtsf_P)4wa%a(u5s?~{Clcv6 zcp!;M1Z6xGVru+^m?ef1Zz94mBcTa#IG+zD6cvDIDK9yNqR;;$SO513~OfArm5`D*ElVeL^`k}KMKpugYj?Kc^ zgS?@^@tIqPA3+8PVAY7llDs5N!f(M|G!nvzC4%P=M-a!A&>71ydpMx1P^uc4l2cTB z;%Yky5Tw<9nBeK+1#C2s>cw;xAzn)FfphE0@3pC~{jU=>pX81jq;(}yk;@`Pw_sXY z{7@p`%*{9>a|@yabcsL`mIc&`kZDIjEa+6|D~t|(z;2cR7L+5sb{7t|iV{sJ;s*L!#0!ol7y+6bu^k*F6~2g?;+(b>CicXMwm z4IRzj))eH99;8(xj7dqSc$bLf6Ny!bff`H9X}vHuu_O&HKp+vLaU|U63yDBai7#Wvc2XYifW0^*qf%#aL0MFN{(n81VY=;}XkRCYnlH#hiuv8QFvfuT{9ysF34SG1N?VLBRXIl)(5Tht*sy^aN0nq zSg;12-GMNLZ}UMlL;?K;(h>Xw$@pRou4sCG6DCB{Kq%BmWNl?es4t9?Zg=vbV9uk7HUo~?OA!`rsbS2A>5M$IDzB)l%FF21xY5x4_fK_2b0@@wcq_=^ zE))q0usQ&!#=1)2?Vvf+&Li~w0c?bG=%Wg!t^{O)HlD~3cRR>3+N>G3=Qwi0u5 zw7_QtcohfwXwwk}vr~A5#7~&JcGr)Ox`@8^i&dFumk=Ce?ZcQatW|_g-9j@;8()GO zHuXGd+*3S1V@Q~f61X?UlwXDEN`XZLHxO3j-I1ncLLQwM2phcQFTf&+|9_ith#wci zc)%n4k`^OYf>R7=4hf|y^UMGn)Y?&{364*nuWLBpN@D-z_hlKO>YxBG&X+Mi@FAym zQEEr7I!0c^&3(@=9jaI|Ik|rTa_4ao(&a~~GkO8+bQm4@giBx@UXIli!QX_frl0vO zCMXD?XOQ7d+{Fpjl3{OdioV7)kxD!Vu?wLnbJO-8_TJJ>2mWXy?WOn0sgIKbT{Rgh zfgfX9rjrJSy95mX=*VLn-wMO4tH-KV=8lOCM)U_RQ*0exMlUQeg1UqZZGNsuI5fi0 zmiR`DKbBZG{>maI;;0aYa$B%*?|v0B546G0tMu#_Gb(5KmZR@9!rli5mZkX1?Yx~i ze!s{ORKo!u(v3n2WJ-^og7jIDw!@2>IpWNfCks?281n z0L2R@R!SdnNI(Z3rC$Bzyr8hKadh%6p#v_JwX<#_;}HfHGTCcmv0$81e^>DeRXymH|Y0Vfvg1;2<^NP1LHt zTO-_6a9P^R+ye&;&6u<9i%b8K^z3`~)8?GPZt~C}rh$wFVXtjmeG~!X@=iU%ao^GR z`p)sqi>9K0RpaV}Ms?7BNjiz3u0p(+vjRwJYnq!q{Rjef@N7u2JKAo9%z$=|3Z_w0 zS8hFio%B(C@1tXD#svXn&|VtESTNHmBV{s8{KC4+xZt;U|J}H=Xzuu-QCh$ilR8R= z6)q`=ZWM79K#FPjzs-^5jRXPm8DKN%wzXHd`$s0E%_*)w|92+_(!IXYusG4v(J9hA z7`CV30Rp++gHD&!js$9_MN^u@pQU7S?Fk7#N-W-n^3i=bwUYN(>#h4$O@6 zk=cg$aS`;^5`k5qud7So*wx2c`PF}Q_xsxXc^S0NE))i((?mCbU=U$FKs+O|^^SWy zAucA&UR(eDt(Oo|B|T40=cNU!>@{B2!brxVAvJ@hcsQ%WGfOW#!vj@4?YB7kGNt75~pRde{cDHwPwla@qtUs&g ztlT5j&YFY|Ykz-5LC&tHFbY@Xqz#J-fB{W4BBZGq8ASokk|&uoZNSNU21X7UJMH5w zUtar{mZPuz&(EeO`k)t$+H3%01KEBfca73f-YM@VE(cR#$(0v6UaA=h5LsqXLz7z9ZD!V8&uuiHX`8$dbXSc}H5H5^m}1{^$Cs z+WZCSL!*K;s4)jV4Mp$hmMsMIGED4ztPor(4KN*Hq*1lK+|>ugh!f@%)qZ^mHE+Cx zJ&`{y#MRy%U2)_g+KM8_{?)ZJ^`%R4#>PkX)2J25Y=%1k zQ6OlVWL_J|SS=}Mv>liZKOdAy_yk16r{*pz-g)Lm8(fj49oHL{jg5e7-XqvX5XaaM zRw^_HUW+<(WZqHaCU9?SdSBlA^=Nhe?8&2JFekOl36QZ6-nl^!)jtEve%5AO8MG1^0vh|#utEZELA}B6* z>+kJgk?nom?KjTtsaQ29b3{ydpbuKQIoiVQz~=&TB1(^ zUADgdiQrvlE}S1Y%3={ID_?klbQJ=*)`@1}DH zwiPa&o|&51KSb*Z zlu8i4{QF1k%-A3mlF1Ss#mS7NutNf|w=ZfrH1iux)_ex=G6l;-4WZssZYFDoTV;9x@fRs8s+1vH<(VahjI#`QVdo!{o zp|j(_NUgt*JDSufU4X{yhQv2*KlExyLC*Hf1*=Q9HJrF~^UL-(FPtd^!9W-Z*KbatIujtC$MnF)XcPz zDM{2CFm^b)uB1=No{c>C^18iWpZoLn(^nmR_@#0~_w$QKisz{RX^c%km7|%Z*3(fLpj3JW z4M<;Iari<@2bJ_x;q|?5+FrkY*82FtgU1gaJ^APPOH_tnYzZ7d&swe=-@GC#CcqyE zK5BbUwUs!Xv5BloER@p27{r-mC{Y1CeVEFavy@C`Y$`y0g#cet z%Ut~4fi2rP;UW)+h#D{;ebU&>q?ByHV4$EVCOpE|6WLVYB1;>YJj^fD%~ob=B$&$B zbf9^Q#O7lA03W%TldIC!mV^q#3c{!ax(?~X$A2uGoz%8K*|7u8vzeuMI%9K4g%FxS ncXPFbchJ@i36mZXN{MrDWUx#Y0;p7_v(mvG9n~O2W;6Cbm2vce diff --git a/lib/glut-3.7.6/progs/demos/newave/texmap.rgb b/lib/glut-3.7.6/progs/demos/newave/texmap.rgb deleted file mode 100644 index 9d41d5efdad836fb38016eea34e357aac9ff7468..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810169 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 z 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 Ob+^YMz;nTM<^KWPGpBC= diff --git a/lib/glut-3.7.6/progs/demos/newave/texture.c b/lib/glut-3.7.6/progs/demos/newave/texture.c deleted file mode 100644 index a72bf58b7..000000000 --- a/lib/glut-3.7.6/progs/demos/newave/texture.c +++ /dev/null @@ -1,283 +0,0 @@ - -/* texture.c - by David Blythe, SGI */ - -/* read_texture is a simplistic routine for reading an SGI .rgb image file. */ - -#include -#include -#include -#include - -void -bwtorgba(unsigned char *b,unsigned char *l,int n) { - while(n--) { - l[0] = *b; - l[1] = *b; - l[2] = *b; - l[3] = 0xff; - l += 4; b++; - } -} - -void -rgbtorgba(unsigned char *r,unsigned char *g,unsigned char *b,unsigned char *l,int n) { - while(n--) { - l[0] = r[0]; - l[1] = g[0]; - l[2] = b[0]; - l[3] = 0xff; - l += 4; r++; g++; b++; - } -} - -void -rgbatorgba(unsigned char *r,unsigned char *g,unsigned char *b,unsigned char *a,unsigned char *l,int n) { - while(n--) { - l[0] = r[0]; - l[1] = g[0]; - l[2] = b[0]; - l[3] = a[0]; - l += 4; r++; g++; b++; a++; - } -} - -typedef struct _ImageRec { - unsigned short imagic; - unsigned short type; - unsigned short dim; - unsigned short xsize, ysize, zsize; - unsigned int min, max; - unsigned int wasteBytes; - char name[80]; - unsigned long colorMap; - FILE *file; - unsigned char *tmp, *tmpR, *tmpG, *tmpB; - unsigned long rleEnd; - unsigned int *rowStart; - int *rowSize; -} ImageRec; - -static void -ConvertShort(unsigned short *array, unsigned int length) { - unsigned short b1, b2; - unsigned char *ptr; - - ptr = (unsigned char *)array; - while (length--) { - b1 = *ptr++; - b2 = *ptr++; - *array++ = (b1 << 8) | (b2); - } -} - -static void -ConvertUint(unsigned *array, unsigned int length) { - unsigned int b1, b2, b3, b4; - unsigned char *ptr; - - ptr = (unsigned char *)array; - while (length--) { - b1 = *ptr++; - b2 = *ptr++; - b3 = *ptr++; - b4 = *ptr++; - *array++ = (b1 << 24) | (b2 << 16) | (b3 << 8) | (b4); - } -} - -static ImageRec *ImageOpen(char *fileName) -{ - union { - int testWord; - char testByte[4]; - } endianTest; - ImageRec *image; - int swapFlag; - int x; - - endianTest.testWord = 1; - if (endianTest.testByte[0] == 1) { - swapFlag = 1; - } else { - swapFlag = 0; - } - - image = (ImageRec *)malloc(sizeof(ImageRec)); - if (image == NULL) { - fprintf(stderr, "Out of memory!\n"); - exit(1); - } - if ((image->file = fopen(fileName, "rb")) == NULL) { - perror(fileName); - exit(1); - } - - fread(image, 1, 12, image->file); - - if (swapFlag) { - ConvertShort(&image->imagic, 6); - } - - image->tmp = (unsigned char *)malloc(image->xsize*256); - image->tmpR = (unsigned char *)malloc(image->xsize*256); - image->tmpG = (unsigned char *)malloc(image->xsize*256); - image->tmpB = (unsigned char *)malloc(image->xsize*256); - if (image->tmp == NULL || image->tmpR == NULL || image->tmpG == NULL || - image->tmpB == NULL) { - fprintf(stderr, "Out of memory!\n"); - exit(1); - } - - if ((image->type & 0xFF00) == 0x0100) { - x = image->ysize * image->zsize * (int) sizeof(unsigned); - image->rowStart = (unsigned *)malloc(x); - image->rowSize = (int *)malloc(x); - if (image->rowStart == NULL || image->rowSize == NULL) { - fprintf(stderr, "Out of memory!\n"); - exit(1); - } - image->rleEnd = 512 + (2 * x); - fseek(image->file, 512, SEEK_SET); - fread(image->rowStart, 1, x, image->file); - fread(image->rowSize, 1, x, image->file); - if (swapFlag) { - ConvertUint(image->rowStart, x/(int) sizeof(unsigned)); - ConvertUint((unsigned *)image->rowSize, x/(int) sizeof(int)); - } - } - return image; -} - -static void -ImageClose(ImageRec *image) { - fclose(image->file); - free(image->tmp); - free(image->tmpR); - free(image->tmpG); - free(image->tmpB); - free(image); -} - -static void -ImageGetRow(ImageRec *image, unsigned char *buf, int y, int z) { - unsigned char *iPtr, *oPtr, pixel; - int count; - - if ((image->type & 0xFF00) == 0x0100) { - fseek(image->file, (long) image->rowStart[y+z*image->ysize], SEEK_SET); - fread(image->tmp, 1, (unsigned int)image->rowSize[y+z*image->ysize], - image->file); - - iPtr = image->tmp; - oPtr = buf; - for (;;) { - pixel = *iPtr++; - count = (int)(pixel & 0x7F); - if (!count) { - return; - } - if (pixel & 0x80) { - while (count--) { - *oPtr++ = *iPtr++; - } - } else { - pixel = *iPtr++; - while (count--) { - *oPtr++ = pixel; - } - } - } - } else { - fseek(image->file, 512+(y*image->xsize)+(z*image->xsize*image->ysize), - SEEK_SET); - fread(buf, 1, image->xsize, image->file); - } -} - -unsigned * -read_texture(char *name, int *width, int *height, int *components) { - unsigned *base, *lptr; - unsigned char *rbuf, *gbuf, *bbuf, *abuf; - ImageRec *image; - int y; - - image = ImageOpen(name); - - if(!image) - return NULL; - (*width)=image->xsize; - (*height)=image->ysize; - (*components)=image->zsize; - base = (unsigned *)malloc(image->xsize*image->ysize*sizeof(unsigned)); - rbuf = (unsigned char *)malloc(image->xsize*sizeof(unsigned char)); - gbuf = (unsigned char *)malloc(image->xsize*sizeof(unsigned char)); - bbuf = (unsigned char *)malloc(image->xsize*sizeof(unsigned char)); - abuf = (unsigned char *)malloc(image->xsize*sizeof(unsigned char)); - if(!base || !rbuf || !gbuf || !bbuf) - return NULL; - lptr = base; - for(y=0; yysize; y++) { - if(image->zsize>=4) { - ImageGetRow(image,rbuf,y,0); - ImageGetRow(image,gbuf,y,1); - ImageGetRow(image,bbuf,y,2); - ImageGetRow(image,abuf,y,3); - rgbatorgba(rbuf,gbuf,bbuf,abuf,(unsigned char *)lptr,image->xsize); - lptr += image->xsize; - } else if(image->zsize==3) { - ImageGetRow(image,rbuf,y,0); - ImageGetRow(image,gbuf,y,1); - ImageGetRow(image,bbuf,y,2); - rgbtorgba(rbuf,gbuf,bbuf,(unsigned char *)lptr,image->xsize); - lptr += image->xsize; - } else { - ImageGetRow(image,rbuf,y,0); - bwtorgba(rbuf,(unsigned char *)lptr,image->xsize); - lptr += image->xsize; - } - } - ImageClose(image); - free(rbuf); - free(gbuf); - free(bbuf); - free(abuf); - - return (unsigned *) base; -} - -void imgLoad(char *filenameIn, int borderIn, GLfloat borderColorIn[4], - int *wOut, int *hOut, GLubyte ** imgOut) -{ - int border = borderIn; - int width, height; - int w, h; - GLubyte *image, *img, *p; - int i, j, components; - - image = (GLubyte *) read_texture(filenameIn, &width, &height, &components); - w = width + 2 * border; - h = height + 2 * border; - img = (GLubyte *) calloc(w * h, 4 * sizeof(unsigned char)); - - p = img; - for (j = -border; j < height + border; ++j) { - for (i = -border; i < width + border; ++i) { - if (0 <= j && j <= height - 1 && 0 <= i && i <= width - 1) { - p[0] = image[4 * (j * width + i) + 0]; - p[1] = image[4 * (j * width + i) + 1]; - p[2] = image[4 * (j * width + i) + 2]; - p[3] = 0xff; - } else { - p[0] = borderColorIn[0] * 0xff; - p[1] = borderColorIn[1] * 0xff; - p[2] = borderColorIn[2] * 0xff; - p[3] = borderColorIn[3] * 0xff; - } - p += 4; - } - } - free(image); - *wOut = w; - *hOut = h; - *imgOut = img; -} diff --git a/lib/glut-3.7.6/progs/demos/newave/texture.h b/lib/glut-3.7.6/progs/demos/newave/texture.h deleted file mode 100644 index d2b8c025a..000000000 --- a/lib/glut-3.7.6/progs/demos/newave/texture.h +++ /dev/null @@ -1,11 +0,0 @@ - -/* texture.h - by David Blythe, SGI */ - -/* Simple SGI .rgb image file loader routine. */ -unsigned * -read_texture(char *name, int *width, int *height, int *components); - -extern void imgLoad(char *filenameIn, - int borderIn, GLfloat borderColorIn[4], - int *wOut, int *hOut, GLubyte ** imgOut); - diff --git a/lib/glut-3.7.6/progs/demos/opengl_logo/Imakefile b/lib/glut-3.7.6/progs/demos/opengl_logo/Imakefile deleted file mode 100644 index ac0c51d86..000000000 --- a/lib/glut-3.7.6/progs/demos/opengl_logo/Imakefile +++ /dev/null @@ -1,16 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1997. */ - -#include "../../../Glut.cf" - -TARGETS = opengl_logo - -SRCS = opengl_logo.c def_logo.c - -OBJS = opengl_logo.o def_logo.o - -AllTarget($(TARGETS)) - -NormalGlutProgramTarget(opengl_logo,$(OBJS)) - -DependTarget() diff --git a/lib/glut-3.7.6/progs/demos/opengl_logo/def_logo.c b/lib/glut-3.7.6/progs/demos/opengl_logo/def_logo.c deleted file mode 100644 index 41b9e201a..000000000 --- a/lib/glut-3.7.6/progs/demos/opengl_logo/def_logo.c +++ /dev/null @@ -1,622 +0,0 @@ -/* - * Def_logo.c - * - * This file is part of the openGL-logo demo. - * (c) Henk Kok (kok@wins.uva.nl) - * - * Copying, redistributing, etc is permitted as long as this copyright - * notice and the Dutch variable names :) stay in tact. - */ - -#include -#include -#include - -/* some math.h's don't define M_PI */ -#ifndef M_PI -#define M_PI 3.14159265359 -#endif - -#define ACC 8 -#define ACC2 16 -#define ACC3 48 -#define ACC4 24 -#define THLD 0.6 -#define THLD2 0.8 - -extern int angle, rotating; -extern float progress; - -GLfloat TRANS[7][3]; -GLfloat ROTAXIS[7][3]; -GLfloat ROT[7]; - -GLfloat char_El[ACC3+1][ACC][3]; -GLfloat normal_El[ACC3+1][ACC][3]; - -GLfloat char_O[ACC4][ACC][3]; -GLfloat normal_O[ACC4][ACC][3]; - -GLfloat char_P[ACC2][ACC][3]; -GLfloat normal_P[ACC2][ACC][3]; - -GLfloat char_G[ACC4][ACC][3]; -GLfloat normal_G[ACC4][ACC][3]; - -GLfloat accSIN[ACC], accCOS[ACC]; - -GLfloat difmat4[4] = { 0.425, 0.570, 0.664, 1.0 }; -GLfloat difamb4[4] = { 0.425, 0.570, 0.664, 1.0 }; -GLfloat matspec4[4] = { 0.174, 0.174, 0.174, 1.0 }; - -int rnd(int i) -{ - return rand()%i; -} - -void groen_texture(void) -{ - glMaterialfv(GL_FRONT, GL_DIFFUSE, difmat4); - glMaterialfv(GL_FRONT, GL_AMBIENT, difamb4); - glMaterialfv(GL_FRONT, GL_SPECULAR, matspec4); - glMaterialf(GL_FRONT, GL_SHININESS, 35.0); -} - -void def_O(void) -{ - float a, s, c, ln; - int i,j,k,l,m,n; - float dx, dy; - float dx1, dx2, dy1, dy2, dz1, dz2; - GLfloat center_O[ACC4+4][3]; - GLfloat width_O[ACC4+4]; - for (i=0;i1.01?0.8:0)) + 0.8; - center_O[i][2] = 0.0; - width_O[i] = 0.6; - } -/* I should be able to generalise this. oh well */ - for (i=0;iTHLD?THLD:s)); - } - } - for (i=0;i1.01?0.7:0)) + 0.7; - center_P[i][2] = 0.0; - width_P[i] = 0.5; - } - - for (i=0;iTHLD?THLD:s)); - } - } - for (i=0;iTHLD2?THLD2:s)); - } - } - for (i=0;i1.01?0.8:0)) + 0.8; - center_G[i][2] = 0.0; - width_G[i] = 0.9; - if (i>ACC4*3/4) - width_G[i] = 0.9 - ((i-ACC4*3/4)*0.9)/ACC; - } - for (i=0;iTHLD?THLD:s)); - } - } - for (i=0;i=ACC) - k = 0; - glBegin(GL_QUAD_STRIP); - for (j=0;j=ACC) - k = 0; - glBegin(GL_QUAD_STRIP); - for (j=0;j=ACC) - k = 0; - glBegin(GL_QUAD_STRIP); - glNormal3f(normal_P[0][k][0], normal_P[0][k][1], normal_P[0][k][2]); - glVertex3f(char_P[0][k][0], char_P[0][k][1]+0.0, char_P[0][k][2]); - glNormal3f(normal_P[0][i][0], normal_P[0][i][1], normal_P[0][i][2]); - glVertex3f(char_P[0][i][0], char_P[0][i][1]+0.0, char_P[0][i][2]); - for (j=1;j=ACC) - k = 0; - glBegin(GL_QUAD_STRIP); - for (j=0;j<=ACC3;j++) - { - glNormal3f(normal_El[j][k][0], normal_El[j][k][1], normal_El[j][k][2]); - glVertex3f(char_El[j][k][0], char_El[j][k][1], char_El[j][k][2]); - glNormal3f(normal_El[j][i][0], normal_El[j][i][1], normal_El[j][i][2]); - glVertex3f(char_El[j][i][0], char_El[j][i][1], char_El[j][i][2]); - } - glEnd(); - } -} - -void draw_N(void) -{ - int i,j,k; - for (i=0;i=ACC) - k = 0; - glBegin(GL_QUAD_STRIP); - for (j=0;j<=ACC2/2;j++) - { - glNormal3f(normal_P[j][k][0], normal_P[j][k][1], normal_P[j][k][2]); - glVertex3f(char_P[j][k][0], char_P[j][k][1], char_P[j][k][2]); - glNormal3f(normal_P[j][i][0], normal_P[j][i][1], normal_P[j][i][2]); - glVertex3f(char_P[j][i][0], char_P[j][i][1], char_P[j][i][2]); - } - glEnd(); - } - - j = 0; - glBegin(GL_QUAD_STRIP); - for (i=0;i=ACC) - k = 0; - glBegin(GL_QUAD_STRIP); - glNormal3f(normal_G[0][k][0], normal_G[0][k][1], normal_G[0][k][2]); - glVertex3f(char_G[0][k][0], char_G[0][k][1]+1.2, char_G[0][k][2]); - glNormal3f(normal_G[0][i][0], normal_G[0][i][1], normal_G[0][i][2]); - glVertex3f(char_G[0][i][0], char_G[0][i][1]+1.2, char_G[0][i][2]); - for (j=1;j=0;i--) - glVertex3f(5.6, 0.9+0.9*accSIN[i], 0.9*accCOS[i]); - glVertex3f(5.6, 0.9+0.9*accSIN[ACC-1], 0.9*accCOS[ACC-1]); - glEnd(); -} - -void draw_part(int i) -{ - glPushMatrix(); - glTranslatef(TRANS[i][0]*progress, TRANS[i][1]*progress, TRANS[i][2]*progress); - glRotatef(ROT[i]*progress, ROTAXIS[i][0], ROTAXIS[i][1], ROTAXIS[i][2]); - switch(i) - { - case 0: draw_El(); break; - case 1: draw_O(); break; - case 2: draw_P(); break; - case 3: draw_E(); break; - case 4: draw_N(); break; - case 5: draw_G(); break; - case 6: draw_L(); break; - } - glPopMatrix(); -} - -void draw_logo(void) -{ - groen_texture(); - glEnable(GL_CULL_FACE); - glTranslatef(-2.8, 0.0, 0.0); - - draw_part(0); - glTranslatef(-12.0, 4.3, 0.0); - draw_part(1); - glTranslatef(7.3, 0.0, 0.0); - draw_part(2); - glTranslatef(5.4, 0.0, 0.0); - draw_part(3); - glTranslatef(5.4, 0.0, 0.0); - draw_part(4); - glTranslatef(7.4, 0.0, 0.0); - draw_part(5); - glTranslatef(6.8, 0.0, 0.0); - draw_part(6); -} diff --git a/lib/glut-3.7.6/progs/demos/opengl_logo/opengl_logo.c b/lib/glut-3.7.6/progs/demos/opengl_logo/opengl_logo.c deleted file mode 100644 index 1672858d6..000000000 --- a/lib/glut-3.7.6/progs/demos/opengl_logo/opengl_logo.c +++ /dev/null @@ -1,133 +0,0 @@ -/* - * Main.c - * - * This file is part of the openGL-logo demo. - * (c) Henk Kok (kok@wins.uva.nl) - * - * Copying, redistributing, etc is permitted as long as this copyright - * notice and the Dutch variable names :) stay in tact. - */ - -#include -#include -#include -#include - -GLfloat lightpos[4] = { 1.0, 1.0, 1.0, 0.0 }; -GLfloat lightamb[4] = { 0.3, 0.3, 0.3, 1.0 }; -GLfloat lightdif[4] = { 0.8, 0.8, 0.8, 1.0 }; -float speed=0, progress = 1; -void SetCamera(void); - -extern void randomize(void); -extern void def_logo(void); -extern void draw_logo(void); - -void do_display (void) -{ - SetCamera(); - draw_logo(); - glFlush(); - glutSwapBuffers(); -} - -void display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - do_display(); -} - -void myinit (void) -{ - glShadeModel (GL_SMOOTH); - glEnable(GL_DEPTH_TEST); - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - glLightfv(GL_LIGHT0, GL_AMBIENT, lightamb); - glLightfv(GL_LIGHT0, GL_DIFFUSE, lightdif); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glColor3f(1.0, 1.0, 1.0); - glClearColor(0.0, 0.0, 0.0, 1.0); - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - glEnable(GL_NORMALIZE); - def_logo(); - glCullFace(GL_BACK); - glEnable(GL_CULL_FACE); -} - -/* ARGSUSED1 */ -void parsekey(unsigned char key, int x, int y) -{ - switch (key) - { - case 27: exit(0); break; - case 13: break; - case ' ': progress = 1; randomize(); break; - } -} - -/* ARGSUSED1 */ -void parsekey_special(int key, int x, int y) -{ - switch (key) - { - case GLUT_KEY_UP: break; - case GLUT_KEY_DOWN: break; - case GLUT_KEY_RIGHT: break; - case GLUT_KEY_LEFT: break; - } -} - -void Animate(void) -{ - speed = -0.95*speed + progress*0.05; - if (progress > 0.0 && speed < 0.0003) - speed = 0.0003; - if (speed > 0.01) - speed = 0.01; - progress = progress - speed; - if (progress < 0.0) - { - progress = 0.0; - speed = 0; - } - glutPostRedisplay(); -} - -void myReshape(int w, int h) -{ - glMatrixMode (GL_MODELVIEW); - glViewport (0, 0, w, h); - glLoadIdentity(); - SetCamera(); -} - -void SetCamera(void) -{ - glMatrixMode (GL_PROJECTION); - glLoadIdentity (); - glFrustum (-0.1333, 0.1333, -0.1, 0.1, 0.2, 150.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - gluLookAt(0,1.5,2, 0,1.5,0, 0,1,0); - glTranslatef(0.0, -8.0, -45.0); - glRotatef(-progress*720, 0.0, 1.0, 0.0); -} - -int main(int argc, char *argv[]) -{ - glutInitDisplayMode(GLUT_DEPTH | GLUT_RGB | GLUT_DOUBLE | GLUT_MULTISAMPLE); - glutInitWindowPosition(200, 0); - glutInitWindowSize(640, 480); - glutCreateWindow("Rotating OpenGL Logo"); - glutDisplayFunc(display); - glutKeyboardFunc(parsekey); - glutSpecialFunc(parsekey_special); - glutReshapeFunc(myReshape); - glutIdleFunc(Animate); - randomize(); - myinit(); - glutSwapBuffers(); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/demos/opengl_logo/opengl_logo.dsp b/lib/glut-3.7.6/progs/demos/opengl_logo/opengl_logo.dsp deleted file mode 100644 index c5b130d50..000000000 --- a/lib/glut-3.7.6/progs/demos/opengl_logo/opengl_logo.dsp +++ /dev/null @@ -1,92 +0,0 @@ -# Microsoft Developer Studio Project File - Name="opengl_logo" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=opengl_logo - 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 "opengl_logo.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 "opengl_logo.mak" CFG="opengl_logo - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "opengl_logo - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "opengl_logo - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "opengl_logo - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "opengl_logo - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "opengl_logo - Win32 Release" -# Name "opengl_logo - Win32 Debug" -# Begin Source File - -SOURCE=.\def_logo.c -# End Source File -# Begin Source File - -SOURCE=.\opengl_logo.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/demos/particle/Imakefile b/lib/glut-3.7.6/progs/demos/particle/Imakefile deleted file mode 100644 index 92614a7cb..000000000 --- a/lib/glut-3.7.6/progs/demos/particle/Imakefile +++ /dev/null @@ -1,15 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1998. */ - -#include "../../../Glut.cf" - -TARGETS = particle - -SRCS = particle.c -OBJS = particle.o - -AllTarget($(TARGETS)) - -NormalGlutProgramTarget(particle,$(OBJS)) - -DependTarget() diff --git a/lib/glut-3.7.6/progs/demos/particle/particle.c b/lib/glut-3.7.6/progs/demos/particle/particle.c deleted file mode 100644 index 6dacc6327..000000000 --- a/lib/glut-3.7.6/progs/demos/particle/particle.c +++ /dev/null @@ -1,728 +0,0 @@ -/* - particle.c - Nate Robins, 1998 - - An example of a simple particle system. - - */ - - -#include -#include -#include -#include -#include - - -#ifdef _WIN32 -#define drand48() ((float)rand()/RAND_MAX) -#endif - - -/* #define SCREEN_SAVER_MODE */ - -#define PS_GRAVITY -9.8 -#define PS_WATERFALL 0 -#define PS_FOUNTAIN 1 - - -typedef struct { - float x, y, z; - float radius; -} PSsphere; - -typedef struct { - float position[3]; /* current position */ - float previous[3]; /* previous position */ - float velocity[3]; /* velocity (magnitude & direction) */ - float dampening; /* % of energy lost on collision */ - int alive; /* is this particle alive? */ -} PSparticle; - - -PSparticle* particles = NULL; -#define NUM_SPHERES 3 -PSsphere spheres[NUM_SPHERES] = { /* position of spheres */ - { -0.1, 0.6, 0, 0.4 }, - { -0.7, 1.4, 0, 0.25 }, - { 0.1, 1.5, 0.1, 0.3 }, -}; -int num_particles = 10000; -int type = PS_WATERFALL; -int points = 1; -int draw_spheres = 1; -int frame_rate = 1; -float frame_time = 0; -float flow = 500; -float slow_down = 1; - -float spin_x = 0; -float spin_y = 0; -int point_size = 4; - - -/* timedelta: returns the number of seconds that have elapsed since - the previous call to the function. */ -#if defined(_WIN32) -#include -#else -#include -#include -#include -#include -#endif -#ifndef CLK_TCK -#define CLK_TCK 1000 -#endif -float -timedelta(void) -{ - static long begin = 0; - static long finish, difference; - -#if defined(_WIN32) - static struct timeb tb; - ftime(&tb); - finish = tb.time*1000+tb.millitm; -#else - static struct tms tb; - finish = times(&tb); -#endif - - difference = finish - begin; - begin = finish; - - return (float)difference/(float)CLK_TCK; -} - - -/* text: draws a string of text with an 18 point helvetica bitmap font - at position (x,y) in window space (bottom left corner is (0,0). */ -void -text(int x, int y, char* s) -{ - int lines; - char* p; - - glDisable(GL_DEPTH_TEST); - glDisable(GL_FOG); - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - glOrtho(0, glutGet(GLUT_WINDOW_WIDTH), - 0, glutGet(GLUT_WINDOW_HEIGHT), -1, 1); - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); - glColor3ub(0, 0, 0); - glRasterPos2i(x+1, y-1); - for(p = s, lines = 0; *p; p++) { - if (*p == '\n') { - lines++; - glRasterPos2i(x+1, y-1-(lines*18)); - } - glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18, *p); - } - glColor3ub(128, 0, 255); - glRasterPos2i(x, y); - for(p = s, lines = 0; *p; p++) { - if (*p == '\n') { - lines++; - glRasterPos2i(x, y-(lines*18)); - } - glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18, *p); - } - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); - glEnable(GL_FOG); - glEnable(GL_DEPTH_TEST); -} - - -int -fequal(float a, float b) -{ - float epsilon = 0.1; - float f = a - b; - - if (f < epsilon && f > -epsilon) - return 1; - else - return 0; -} - - -void -psTimeStep(PSparticle* p, float dt) -{ - if (p->alive == 0) - return; - - p->velocity[0] += 0; - p->velocity[1] += PS_GRAVITY*dt; - p->velocity[2] += 0; - - p->previous[0] = p->position[0]; - p->previous[1] = p->position[1]; - p->previous[2] = p->position[2]; - - p->position[0] += p->velocity[0]*dt; - p->position[1] += p->velocity[1]*dt; - p->position[2] += p->velocity[2]*dt; -} - - -void -psNewParticle(PSparticle* p, float dt) -{ - if (type == PS_WATERFALL) { - p->velocity[0] = -2*(drand48()-0.0); - p->velocity[1] = 0; - p->velocity[2] = 0.5*(drand48()-0.0); - p->position[0] = 0; - p->position[1] = 2; - p->position[2] = 0; - p->previous[0] = p->position[0]; - p->previous[1] = p->position[1]; - p->previous[2] = p->position[2]; - p->dampening = 0.45*drand48(); - p->alive = 1; - } else if (type == PS_FOUNTAIN) { - p->velocity[0] = 2*(drand48()-0.5); - p->velocity[1] = 5; - p->velocity[2] = 2*(drand48()-0.5); - p->position[0] = -0.1; - p->position[1] = 0.9; - p->position[2] = 0; - p->previous[0] = p->position[0]; - p->previous[1] = p->position[1]; - p->previous[2] = p->position[2]; - p->dampening = 0.35*drand48(); - p->alive = 1; - } - - psTimeStep(p, 2*dt*drand48()); -} - - -/* psBounce: the particle has gone past (or exactly hit) the ground - plane, so calculate the time at which the particle actually - intersected the ground plane (s). essentially, this just rolls - back time to when the particle hit the ground plane, then starts - time again from then. - - - - o A (previous position) - | | \ - | s \ o (position it _should_ be at) - - t | \ / | t - s - | - ------X-------- - - | \ - - o B (new position) - - A + V*s = 0 or s = -A/V - - to calculate where the particle should be: - - A + V*t + V*(t-s)*d - - where d is a damping factor which accounts for the loss - of energy due to the bounce. */ -void -psBounce(PSparticle* p, float dt) -{ - float s; - - if (p->alive == 0) - return; - - /* since we know it is the ground plane, we only need to - calculate s for a single dimension. */ - s = -p->previous[1]/p->velocity[1]; - - p->position[0] = (p->previous[0] + p->velocity[0] * s + - p->velocity[0] * (dt-s) * p->dampening); - p->position[1] = -p->velocity[1] * (dt-s) * p->dampening; /* reflect */ - p->position[2] = (p->previous[2] + p->velocity[2] * s + - p->velocity[2] * (dt-s) * p->dampening); - - /* damp the reflected velocity (since the particle hit something, - it lost some energy) */ - p->velocity[0] *= p->dampening; - p->velocity[1] *= -p->dampening; /* reflect */ - p->velocity[2] *= p->dampening; -} - -void -psCollideSphere(PSparticle* p, PSsphere* s) -{ - float vx = p->position[0] - s->x; - float vy = p->position[1] - s->y; - float vz = p->position[2] - s->z; - float distance; - - if (p->alive == 0) - return; - - distance = sqrt(vx*vx + vy*vy + vz*vz); - - if (distance < s->radius) { -#if 0 - vx /= distance; vy /= distance; vz /= distance; - d = 2*(-vx*p->velocity[0] + -vy*p->velocity[1] + -vz*p->velocity[2]); - p->velocity[0] += vx*d*2; - p->velocity[1] += vy*d*2; - p->velocity[2] += vz*d*2; - d = sqrt(p->velocity[0]*p->velocity[0] + - p->velocity[1]*p->velocity[1] + - p->velocity[2]*p->velocity[2]); - p->velocity[0] /= d; - p->velocity[1] /= d; - p->velocity[2] /= d; -#else - p->position[0] = s->x+(vx/distance)*s->radius; - p->position[1] = s->y+(vy/distance)*s->radius; - p->position[2] = s->z+(vz/distance)*s->radius; - p->previous[0] = p->position[0]; - p->previous[1] = p->position[1]; - p->previous[2] = p->position[2]; - p->velocity[0] = vx/distance; - p->velocity[1] = vy/distance; - p->velocity[2] = vz/distance; -#endif - } -} - - -void -reshape(int width, int height) -{ - float black[] = { 0, 0, 0, 0 }; - - glViewport(0, 0, width, height); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(60, (float)width/height, 0.1, 1000); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - gluLookAt(0, 1, 3, 0, 1, 0, 0, 1, 0); - glFogfv(GL_FOG_COLOR, black); - glFogf(GL_FOG_START, 2.5); - glFogf(GL_FOG_END, 4); - glEnable(GL_FOG); - glFogi(GL_FOG_MODE, GL_LINEAR); - glPointSize(point_size); - glEnable(GL_POINT_SMOOTH); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glEnable(GL_COLOR_MATERIAL); - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHT0); - - timedelta(); -} - - -void -display(void) -{ - static int i; - static float c; - static int j = 0; - static char s[32]; - static int frames = 0; - - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - glPushMatrix(); - - glRotatef(spin_y, 1, 0, 0); - glRotatef(spin_x, 0, 1, 0); - - glEnable(GL_LIGHTING); - if (draw_spheres) { - for (i = 0; i < draw_spheres; i++) { - glPushMatrix(); - glTranslatef(spheres[i].x, spheres[i].y, spheres[i].z); - glColor3ub(0, 255, 128); - glutSolidSphere(spheres[i].radius, 16, 16); - glPopMatrix(); - } - } - glDisable(GL_LIGHTING); - - glBegin(GL_QUADS); - glColor3ub(0, 128, 255); - glVertex3f(-2, 0, -2); - glVertex3f(-2, 0, 2); - glVertex3f(2, 0, 2); - glVertex3f(2, 0, -2); - glEnd(); - - if (points) { - glBegin(GL_POINTS); - - for (i = 0; i < num_particles; i++) { - if (particles[i].alive == 0) - continue; - c = particles[i].position[1]/2.1*255; - glColor3ub(c, 128+c*0.5, 255); - glVertex3fv(particles[i].position); - } - glEnd(); - } else { - glBegin(GL_LINES); - for (i = 0; i < num_particles; i++) { - if (particles[i].alive == 0) - continue; - c = particles[i].previous[1]/2.1*255; - glColor4ub(c, 128+c*0.5, 255, 32); - glVertex3fv(particles[i].previous); - c = particles[i].position[1]/2.1*255; - glColor4ub(c, 128+c*0.5, 255, 196); - glVertex3fv(particles[i].position); - } - glEnd(); - } - - /* spit out frame rate. */ - if (frame_rate) { - frames++; - if (frames > 7) { - sprintf(s, "%g fps", (float)7/frame_time); - frame_time = 0; - frames = 0; - } - text(5, 5, s); - } - - glPopMatrix(); - glutSwapBuffers(); -} - -void -idle(void) -{ - static int i, j; - static int living = 0; /* index to end of live particles */ - static float dt; - static float last = 0; - - dt = timedelta(); - frame_time += dt; - -#if 1 - /* slow the simulation if we can't keep the frame rate up around - 10 fps */ - if (dt > 0.1) { - slow_down = 1.0/(100*dt); - } else if (dt < 0.1) { - slow_down = 1; - } -#endif - - dt *= slow_down; - - /* resurrect a few particles */ - for (i = 0; i < flow*dt; i++) { - psNewParticle(&particles[living], dt); - living++; - if (living >= num_particles) - living = 0; - } - - for (i = 0; i < num_particles; i++) { - psTimeStep(&particles[i], dt); - - /* collision with sphere? */ - if (draw_spheres) { - for (j = 0; j < draw_spheres; j++) { - psCollideSphere(&particles[i], &spheres[j]); - } - } - - /* collision with ground? */ - if (particles[i].position[1] <= 0) { - psBounce(&particles[i], dt); - } - - /* dead particle? */ - if (particles[i].position[1] < 0.1 && - fequal(particles[i].velocity[1], 0)) { - particles[i].alive = 0; - } - } - - glutPostRedisplay(); -} - -void -visible(int state) -{ - if (state == GLUT_VISIBLE) - glutIdleFunc(idle); - else - glutIdleFunc(NULL); -} - -void -bail(int code) -{ - free(particles); - exit(code); -} - -#ifdef SCREEN_SAVER_MODE -void -ss_keyboard(char key, int x, int y) -{ - bail(0); -} - -void -ss_mouse(int button, int state, int x, int y) -{ - bail(0); -} - -void -ss_passive(int x, int y) -{ - static int been_here = 0; - - /* for some reason, GLUT sends an initial passive motion callback - when a window is initialized, so this would immediately - terminate the program. to get around this, see if we've been - here before. (actually if we've been here twice.) */ - - if (been_here > 1) - bail(0); - been_here++; -} - -#else - -void -keyboard(unsigned char key, int x, int y) -{ - static int fullscreen = 0; - static int old_x = 50; - static int old_y = 50; - static int old_width = 512; - static int old_height = 512; - static int s = 0; - - switch (key) { - case 27: - bail(0); - break; - - case 't': - if (type == PS_WATERFALL) - type = PS_FOUNTAIN; - else if (type == PS_FOUNTAIN) - type = PS_WATERFALL; - break; - - case 's': - draw_spheres++; - if (draw_spheres > NUM_SPHERES) - draw_spheres = 0; - break; - - case 'S': - printf("PSsphere spheres[NUM_SPHERES] = {/* position of spheres */\n"); - for (s = 0; s < NUM_SPHERES; s++) { - printf(" { %g, %g, %g, %g },\n", - spheres[s].x, spheres[s].y, - spheres[s].z, spheres[s].radius); - } - printf("};\n"); - break; - - case 'l': - points = !points; - break; - - case 'P': - point_size++; - glPointSize(point_size); - break; - - case 'p': - point_size--; - if (point_size < 1) - point_size = 1; - glPointSize(point_size); - break; - - case '+': - flow += 100; - if (flow > num_particles) - flow = num_particles; - printf("%g particles/second\n", flow); - break; - - case '-': - flow -= 100; - if (flow < 0) - flow = 0; - printf("%g particles/second\n", flow); - break; - - case '#': - frame_rate = !frame_rate; - break; - - case '~': - fullscreen = !fullscreen; - if (fullscreen) { - old_x = glutGet(GLUT_WINDOW_X); - old_y = glutGet(GLUT_WINDOW_Y); - old_width = glutGet(GLUT_WINDOW_WIDTH); - old_height = glutGet(GLUT_WINDOW_HEIGHT); - glutFullScreen(); - } else { - glutReshapeWindow(old_width, old_height); - glutPositionWindow(old_x, old_y); - } - break; - - case '!': - s++; - if (s >= NUM_SPHERES) - s = 0; - break; - - case '4': - spheres[s].x -= 0.05; - break; - - case '6': - spheres[s].x += 0.05; - break; - - case '2': - spheres[s].y -= 0.05; - break; - - case '8': - spheres[s].y += 0.05; - break; - - case '7': - spheres[s].z -= 0.05; - break; - - case '3': - spheres[s].z += 0.05; - break; - - case '9': - spheres[s].radius += 0.05; - break; - - case '1': - spheres[s].radius -= 0.05; - break; - - } -} - -void -menu(int item) -{ - keyboard((unsigned char)item, 0, 0); -} - -void -menustate(int state) -{ - /* hook up a fake time delta to avoid jumping when menu comes up */ - if (state == GLUT_MENU_NOT_IN_USE) - timedelta(); -} -#endif - -int old_x, old_y; - -void -mouse(int button, int state, int x, int y) -{ - old_x = x; - old_y = y; - - glutPostRedisplay(); -} - -void -motion(int x, int y) -{ - spin_x = x - old_x; - spin_y = y - old_y; - - glutPostRedisplay(); -} - -int -main(int argc, char** argv) -{ - glutInitDisplayMode(GLUT_RGB|GLUT_DEPTH|GLUT_DOUBLE); - glutInitWindowPosition(0, 0); - glutInitWindowSize(640, 480); - glutInit(&argc, argv); - - glutCreateWindow("Particles"); - glutDisplayFunc(display); - glutReshapeFunc(reshape); -#ifdef SCREEN_SAVER_MODE - glutPassiveMotionFunc(ss_passive); - glutKeyboardFunc(ss_keyboard); - glutMouseFunc(ss_mouse); - glutSetCursor(GLUT_CURSOR_NONE); - glutFullScreen(); -#else - glutMotionFunc(motion); - glutMouseFunc(mouse); - glutKeyboardFunc(keyboard); -#endif - - glutMenuStateFunc(menustate); - glutCreateMenu(menu); - glutAddMenuEntry("Particle", 0); - glutAddMenuEntry("", 0); - glutAddMenuEntry("[f] Fog on/off", 'f'); - glutAddMenuEntry("[t] Spray type", 't'); - glutAddMenuEntry("[s] Collision spheres", 's'); - glutAddMenuEntry("[-] Less flow", '-'); - glutAddMenuEntry("[+] More flow", '+'); - glutAddMenuEntry("[p] Smaller points", 'p'); - glutAddMenuEntry("[P] Larger points", 'P'); - glutAddMenuEntry("[l] Toggle points/lines", 'l'); - glutAddMenuEntry("[#] Toggle framerate on/off", '#'); - glutAddMenuEntry("[~] Toggle fullscreen on/off", '~'); - glutAddMenuEntry("", 0); - glutAddMenuEntry("Use the numeric keypad to move the spheres", 0); - glutAddMenuEntry("[!] Change active sphere", 0); - glutAddMenuEntry("", 0); - glutAddMenuEntry("[Esc] Quit", 27); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - if (argc > 1) { - if (strcmp(argv[1], "-h") == 0) { - fprintf(stderr, "%s [particles] [flow] [speed%]\n", argv[0]); - exit(0); - } - sscanf(argv[1], "%d", &num_particles); - if (argc > 2) - sscanf(argv[2], "%f", &flow); - if (argc > 3) - sscanf(argv[3], "%f", &slow_down); - } - - particles = (PSparticle*)malloc(sizeof(PSparticle) * num_particles); - - glutVisibilityFunc(visible); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/demos/particle/particle.dsp b/lib/glut-3.7.6/progs/demos/particle/particle.dsp deleted file mode 100644 index fb943011d..000000000 --- a/lib/glut-3.7.6/progs/demos/particle/particle.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="particle" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=particle - 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 "particle.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 "particle.mak" CFG="particle - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "particle - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "particle - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "particle - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "particle - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "particle - Win32 Release" -# Name "particle - Win32 Debug" -# Begin Source File - -SOURCE=.\particle.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/demos/rollercoaster/Imakefile b/lib/glut-3.7.6/progs/demos/rollercoaster/Imakefile deleted file mode 100644 index 353780caa..000000000 --- a/lib/glut-3.7.6/progs/demos/rollercoaster/Imakefile +++ /dev/null @@ -1,16 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1997. */ - -#include "../../../Glut.cf" - -TARGETS = rc - -SRCS = defrc.c matrix.c rc.c - -OBJS = defrc.o matrix.o rc.o - -AllTarget($(TARGETS)) - -NormalGlutProgramTarget(rc,$(OBJS)) - -DependTarget() diff --git a/lib/glut-3.7.6/progs/demos/rollercoaster/defrc.c b/lib/glut-3.7.6/progs/demos/rollercoaster/defrc.c deleted file mode 100644 index 4d9415229..000000000 --- a/lib/glut-3.7.6/progs/demos/rollercoaster/defrc.c +++ /dev/null @@ -1,305 +0,0 @@ -#include -#include -#include -#include -#include "matrix.h" - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -typedef struct parameter -{ - double value; - double speed; - int steps; -} Parameter; - -Matrix pos; -Parameter roll, alignment, heading, pitch; -double tot_al = 0.0; -int tot = 0; - -#define MAX 10000 - -extern GLfloat x[MAX], y[MAX], z[MAX]; -extern GLfloat dx[MAX], dy[MAX], dz[MAX]; -extern GLfloat hd[MAX], al[MAX], pt[MAX], rl[MAX]; -extern GLfloat strips[27][MAX][3], normal[24][MAX][3]; -extern int opt[MAX]; -extern GLfloat bnormal[2][MAX][3]; -extern GLfloat r1[MAX], r2[MAX], r3[MAX]; - -void update_parameters(void); -void update_parameter(Parameter *p); -void init_parameter(Parameter *p); - -Vector strips_tmp[27], normal_tmp[27]; - -void calculate_rc(void) -{ - FILE *in; - int i, j; - char cmd[256]; - double a; - Vector v; - Matrix tmp, t2; -#if 0 - GLfloat nx, ny, nz, ac; -#endif - - printf("Reading RC parameters.\n"); -/* - out = fopen("rc.in", "w"); - if (!out) - { - fprintf(stderr, "Failed to open file 'rc.in' for writing.\n"); - exit(1); - } -*/ - - in = fopen("rc.def", "r"); - if (!in) - { - fprintf(stderr, "Failed to open file 'rc.def'.\n"); - exit(1); - } - - init_parameter(&roll); - init_parameter(&pitch); - init_parameter(&heading); - init_parameter(&alignment); - - init_matrix(&pos); - pos.index[3][2] = 0; - - for (i=0;i<27;i++) - { - init_vector(&normal_tmp[i]); - init_vector(&strips_tmp[i]); - } - - for (i=0;i<8;i++) - { - strips_tmp[i].index[2] = 1.0; - strips_tmp[i+8].index[2] = -1.0; - strips_tmp[i+16].index[1] = -1.0; - } - - for (i=0;i<3;i++) - { - for (j=0;j<8;j++) - { - normal_tmp[i*8+j].index[2] = cos(j*M_PI/4); - normal_tmp[i*8+j].index[1] = sin(j*M_PI/4); - strips_tmp[i*8+j].index[2] += cos(j*M_PI/4)/(i==2?2:4); - strips_tmp[i*8+j].index[1] += sin(j*M_PI/4)/(i==2?2:4); - } - strips_tmp[24].index[2] = 1.0; - strips_tmp[25].index[2] = -1.0; - strips_tmp[26].index[1] = -1.0; - } - - while (!feof(in)) - { - for (i=0;i<256;i++) - { - int ch; - - ch = fgetc(in); - if ((ch == '\n') || (ch == EOF)) - { - cmd[i] = 0; - break; - } - cmd[i] = ch; - } - if (cmd[0] == '#') - continue; - else if (!cmd[0]) - continue; - else if (sscanf(cmd, "pitch %lf %d", &a, &i)) - { - pitch.speed = (a - pitch.value)/i; - pitch.steps = i; - } - else if (sscanf(cmd, "alignment %lf %d", &a, &i)) - { - alignment.speed = (a - alignment.value)/i; - alignment.steps = i; - } - else if (sscanf(cmd, "heading %lf %d", &a, &i)) - { - heading.speed = (a - heading.value)/i; - heading.steps = i; - } - else if (sscanf(cmd, "roll %lf %d", &a, &i)) - { - roll.speed = (a - roll.value)/i; - roll.steps = i; - } - else if (sscanf(cmd, "wait %d", &i)) - { - for (;i>=0;i--) - { - update_parameters(); - - init_vector(&v); - v.index[0] = 0.15; - multiply_matrix_vector(&pos, &v); - for (j=0;j<3;j++) - pos.index[3][j] = v.index[j]; - - rotate_x(-roll.value*M_PI/(180*50), &pos); - rotate_y(-heading.value*M_PI/(180*50), &pos); - rotate_z(-pitch.value*M_PI/(180*50), &pos); - - x[tot] = v.index[0]; - y[tot] = v.index[1]; - z[tot] = v.index[2]; - al[tot] = alignment.value/50.0; - rl[tot] = roll.value/50.0; - hd[tot] = heading.value/50.0; - pt[tot] = pitch.value/50.0; - opt[tot] = 100*fabs(rl[tot] - al[tot]) + 100*fabs(hd[tot])+ - 100*fabs(pt[tot]); - - copy_matrix(&tmp, &pos); - init_vector(&v); - v.index[1] = 1; - tot_al += alignment.value*M_PI/180/50; - rotate_x(-tot_al, &tmp); - multiply_matrix_vector(&tmp, &v); - dx[tot] = v.index[0] - tmp.index[3][0]; - dy[tot] = v.index[1] - tmp.index[3][1]; - dz[tot] = v.index[2] - tmp.index[3][2]; - - copy_matrix(&tmp, &pos); - tot_al += alignment.value*M_PI/180/50; - rotate_x(-tot_al, &tmp); - copy_matrix(&t2, &tmp); - for (j=0;j<27;j++) - { - copy_vector(&v, &strips_tmp[j]); - multiply_matrix_vector(&t2, &v); - - strips[j][tot][0] = v.index[0]; - strips[j][tot][1] = v.index[1]; - strips[j][tot][2] = v.index[2]; - - copy_vector(&v, &normal_tmp[j]); - multiply_matrix_vector(&t2, &v); - - normal[j][tot][0] = v.index[0] - t2.index[3][0]; - normal[j][tot][1] = v.index[1] - t2.index[3][1]; - normal[j][tot][2] = v.index[2] - t2.index[3][2]; - } - init_vector(&v); - v.index[0] = -1.0; - v.index[1] = -1.5; - multiply_matrix_vector(&pos, &v); - bnormal[0][tot][0] = v.index[0] - pos.index[3][0]; - bnormal[0][tot][1] = v.index[1] - pos.index[3][1]; - bnormal[0][tot][2] = v.index[2] - pos.index[3][2]; - - init_vector(&v); - v.index[2] = -1.0; - v.index[1] = 1.5; - multiply_matrix_vector(&pos, &v); - bnormal[0][tot][0] = v.index[0] - pos.index[3][0]; - bnormal[0][tot][1] = v.index[1] - pos.index[3][1]; - bnormal[0][tot][2] = v.index[2] - pos.index[3][2]; - -#if 0 - copy_matrix(&tmp, &pos); - tmp.index[3][0] = 0.0; - tmp.index[3][1] = 0.0; - tmp.index[3][2] = 0.0; - - init_vector(&v); - v.index[0] = 1.0; - multiply_matrix_vector(&tmp, &v); - - nx = v.index[0]; - ny = v.index[1]; - nz = v.index[2]; - - ac = sqrt(nx*nx+nz*nz); - - if (ac == 0.0) - r1[tot] = 0.0; - else if (nx > 0) - r1[tot] = asin(nz/ac); - else - r1[tot] = M_PI-asin(nz/ac); - - r2[tot] = asin(ny); - - rotate_y(-r1[tot], &tmp); - rotate_z(-r2[tot], &tmp); - - init_vector(&v); - v.index[1] = 1.0; - multiply_matrix_vector(&tmp, &v); - nx = v.index[0]; - ny = v.index[1]; - nz = v.index[2]; - - ac = sqrt(nz*nz+ny*ny); /* this *should* be 1 */ - - if (ac == 0.0) - r3[tot] = 0.0; - else if (nz > 0) - r3[tot] = M_PI-asin(ny/ac); - else - r3[tot] = asin(ny/ac); -#endif - - copy_matrix(&tmp, &pos); - rotate_x(-tot_al, &tmp); - if (tmp.index[0][0] == 0.0 && tmp.index[0][1] == 0.0) { - r1[tot] = atan2(- tmp.index[1][0], - tmp.index[2][0]); - r2[tot] = 0.5 * M_PI; - r3[tot] = 0.0; - } else { - r1[tot] = atan2(tmp.index[1][2], tmp.index[2][2]); - r2[tot] = asin(tmp.index[0][2]); - r3[tot] = atan2(tmp.index[0][1], tmp.index[0][0]); - } - -#if 0 - printf("R: %f, %f, %f.\n", r1[tot], r2[tot], r3[tot]); -#endif - tot ++; - } - } - else - fprintf(stderr, "Not understood: %s\n", cmd); - } - printf("Done.\nTotal of %d parts\n", tot); - printf("Ended at %f, %f, %f\n", x[tot-1], y[tot-1], z[tot-1]); -} - -void update_parameters(void) -{ - update_parameter(&roll); - update_parameter(&pitch); - update_parameter(&heading); - update_parameter(&alignment); -} - -void update_parameter(Parameter *p) -{ - if (!p->steps) - return; - p->steps--; - p->value += p->speed; -} - -void init_parameter(Parameter *p) -{ - p->value = 0; - p->speed = 0; - p->steps = 10; -} diff --git a/lib/glut-3.7.6/progs/demos/rollercoaster/matrix.c b/lib/glut-3.7.6/progs/demos/rollercoaster/matrix.c deleted file mode 100644 index 5dcc7ca97..000000000 --- a/lib/glut-3.7.6/progs/demos/rollercoaster/matrix.c +++ /dev/null @@ -1,113 +0,0 @@ -#include "matrix.h" -#include "math.h" - -void init_matrix(Matrix *m) -{ - int i,j; - for (i=0;i<4;i++) - for (j=0;j<4;j++) - m->index[i][j] = (i==j?1:0); -} - -void init_vector(Vector *v) -{ - int i; - for (i=0;i<3;i++) - v->index[i] = 0; - v->index[3] = 1; -} - -void copy_vector(Vector *v1, Vector *v2) -{ - int i; - for (i=0;i<4;i++) - v1->index[i] = v2->index[i]; -} - -void copy_matrix(Matrix *m1, Matrix *m2) -{ - int i,j; - for (i=0;i<4;i++) - for (j=0;j<4;j++) - m1->index[i][j] = m2->index[i][j]; -} - -void multiply_vector_matrix(Matrix *m, Vector *v) -{ - int i,j; - Vector t; - for (i=0;i<4;i++) - { - t.index[i] = 0; - for (j=0;j<4;j++) - t.index[i] += m->index[i][j] * v->index[j]; - } - copy_vector(v, &t); -} - -void multiply_matrix_vector(Matrix *m, Vector *v) -{ - int i,j; - Vector t; - for (i=0;i<4;i++) - { - t.index[i] = 0; - for (j=0;j<4;j++) - t.index[i] += m->index[j][i] * v->index[j]; - } - copy_vector(v, &t); -} - -void multiply_matrix(Matrix *m2, Matrix *m1) -{ - int i,j,k; - Matrix m; - for (i=0;i<4;i++) - { - for (j=0;j<4;j++) - { - m.index[i][j] = 0; - for (k=0;k<4;k++) - m.index[i][j] += m1->index[i][k]* m2->index[k][j]; - } - } - copy_matrix(m2, &m); -} - -void rotate_x(double angle, Matrix *m) -{ - Matrix r; - double c = cos(angle), s = sin(angle); - init_matrix(&r); - r.index[1][1] = c; - r.index[1][2] = s; - r.index[2][1] = -s; - r.index[2][2] = c; - multiply_matrix(m, &r); -} - -void rotate_y(double angle, Matrix *m) -{ - Matrix r; - double c = cos(angle), s = sin(angle); - init_matrix(&r); - r.index[0][0] = c; - r.index[0][2] = -s; - r.index[2][0] = s; - r.index[2][2] = c; - multiply_matrix(m, &r); -} - -void rotate_z(double angle, Matrix *m) -{ - Matrix r; - double c = cos(angle), s = sin(angle); - init_matrix(&r); - r.index[0][0] = c; - r.index[0][1] = s; - r.index[1][0] = -s; - r.index[1][1] = c; - multiply_matrix(m, &r); -} - -void mcount() {} diff --git a/lib/glut-3.7.6/progs/demos/rollercoaster/matrix.h b/lib/glut-3.7.6/progs/demos/rollercoaster/matrix.h deleted file mode 100644 index c685b16bb..000000000 --- a/lib/glut-3.7.6/progs/demos/rollercoaster/matrix.h +++ /dev/null @@ -1,18 +0,0 @@ -typedef struct matrix { - double index[4][4]; -} Matrix; - -typedef struct vector { - double index[4]; -} Vector; - -void init_matrix(Matrix *m); -void init_vector(Vector *v); -void copy_vector(Vector *v1, Vector *v2); -void copy_matrix(Matrix *m1, Matrix *m2); -void multiply_vector_matrix(Matrix *m, Vector *v); -void multiply_matrix_vector(Matrix *m, Vector *v); -void multiply_matrix(Matrix *m1, Matrix *m2); -void rotate_x(double angle, Matrix *m); -void rotate_y(double angle, Matrix *m); -void rotate_z(double angle, Matrix *m); diff --git a/lib/glut-3.7.6/progs/demos/rollercoaster/rc.c b/lib/glut-3.7.6/progs/demos/rollercoaster/rc.c deleted file mode 100644 index d6aa26463..000000000 --- a/lib/glut-3.7.6/progs/demos/rollercoaster/rc.c +++ /dev/null @@ -1,703 +0,0 @@ -#include -#include -#include -#include -double floor(double o); -#define ACC 48 - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -#define FOG -#define FOG_D 0.1 -#define DIST 30 - -#define MESA_BUGGED - -int rr=0; -int frame = 0; - -GLfloat difmat1[4] = { 1.0, 0.4, 0.4, 1.0 }; -GLfloat difamb1[4] = { 1.0, 0.4, 0.4, 1.0 }; -GLfloat difmat2[4] = { 0.6, 0.6, 0.6, 1.0 }; -GLfloat difamb2[4] = { 0.6, 0.6, 0.6, 1.0 }; -GLfloat difmat3[4] = { 1.0, 1.0, 1.0, 1.0 }; -GLfloat difamb3[4] = { 1.0, 1.0, 1.0, 1.0 }; -GLfloat difmat4[4] = { 0.5, 0.5, 1.0, 1.0 }; -GLfloat difamb4[4] = { 0.5, 0.5, 1.0, 1.0 }; -GLfloat difmat5[4] = { 1.0, 1.0, 0.5, 1.0 }; -GLfloat difamb5[4] = { 1.0, 1.0, 0.5, 1.0 }; -GLfloat matspec1[4] = { 1.0, 1.0, 1.0, 0.0 }; -GLfloat matspec2[4] = { 0.774, 0.774, 0.774, 1.0 }; -GLfloat matspec4[4] = { 0.5, 0.5, 1.0, 1.0 }; -GLfloat dif_zwart[4] = { 0.3, 0.3, 0.3, 1.0 }; -GLfloat amb_zwart[4] = { 0.4, 0.4, 0.4, 1.0 }; -GLfloat spc_zwart[4] = { 0.4, 0.4, 0.4, 1.0 }; -GLfloat dif_copper[4] = { 0.5, 0.3, 0.1, 1.0 }; -GLfloat amb_copper[4] = { 0.2, 0.1, 0.0, 1.0 }; -GLfloat spc_copper[4] = { 0.3, 0.1, 0.1, 1.0 }; -GLfloat fogcol[4] = { 1.0, 1.0, 1.0, 1.0 }; -GLfloat hishin[1] = { 100.0 }; -GLfloat loshin[1] = { 5.0 }; -GLfloat lightpos[4] = { 1.0, 1.0, 1.0, 0.0 }; -GLfloat lightamb[4] = { 0.2, 0.2, 0.2, 1.0 }; -GLfloat lightdif[4] = { 0.8, 0.8, 0.8, 1.0 }; - -GLubyte texture[32][32][3]; -GLubyte sky[32][32][3]; - -#if defined(_WIN32) -#define drand48() (((float) rand())/((float) RAND_MAX)) -#endif - -int rnd(int i) -{ - return (int) ((double) drand48()*i); -} - -void make_texture(void) -{ - int i,j; - GLubyte r, g, b; - for (i=0;i<32;i++) - { - for (j=0;j<32;j++) - { - r = 100 + rnd(156); - g = 100 + rnd(156); - b = (b+g)/2 - rnd(100); - texture[i][j][0] = r/2; - texture[i][j][1] = g/2; - texture[i][j][2] = b/2; - r = rnd(100); - b = rnd(100)+156; - sky[i][j][1] = sky[i][j][0] = r; - sky[i][j][2] = b; - } - } -} - -#define MAX 10000 -extern int tot; -float plaatje = 0.0; -float speed = 0; -int angle = 0; -float angle2 = 0; -float angle3 = 0; - -GLfloat x[MAX], y[MAX], z[MAX]; -GLfloat dx[MAX], dy[MAX], dz[MAX]; -GLfloat al[MAX], rl[MAX], hd[MAX], pt[MAX]; -GLfloat strips[27][MAX][3], normal[27][MAX][3], bnormal[2][MAX][3]; -GLdouble cum_al = 0.0, view_al = 0.0; -int opt[MAX]; -GLfloat r1[MAX], r2[MAX], r3[MAX]; - -void copper_texture(void) -{ - glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, dif_copper); - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, amb_copper); - glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, spc_copper); - glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 13); -} - -void groen_texture(void) -{ - glMaterialfv(GL_FRONT, GL_DIFFUSE, difmat4); - glMaterialfv(GL_FRONT, GL_AMBIENT, difamb4); - glMaterialfv(GL_FRONT, GL_SPECULAR, matspec4); - glMaterialf(GL_FRONT, GL_SHININESS, 5.0); -} - -void rood_texture(void) -{ - glMaterialfv(GL_FRONT, GL_DIFFUSE, difmat1); - glMaterialfv(GL_FRONT, GL_AMBIENT, difamb1); - glMaterialfv(GL_FRONT, GL_SPECULAR, matspec1); - glMaterialf(GL_FRONT, GL_SHININESS, 0.1*128); -} - -void metaal_texture(void) -{ - glMaterialfv(GL_FRONT, GL_DIFFUSE, difmat2); - glMaterialfv(GL_FRONT, GL_AMBIENT, difamb2); - glMaterialfv(GL_FRONT, GL_SPECULAR, matspec2); - glMaterialf(GL_FRONT, GL_SHININESS, 0.6*128.0); -} - -void wit_texture(void) -{ - glMaterialfv(GL_FRONT, GL_DIFFUSE, difmat3); - glMaterialfv(GL_FRONT, GL_AMBIENT, difamb3); - glMaterialfv(GL_FRONT, GL_SPECULAR, matspec1); - glMaterialf(GL_FRONT, GL_SHININESS, 0.8*128.0); -} - -void geel_texture(void) -{ - glMaterialfv(GL_FRONT, GL_DIFFUSE, difmat5); - glMaterialfv(GL_FRONT, GL_AMBIENT, difamb5); - glMaterialfv(GL_FRONT, GL_SPECULAR, matspec1); - glMaterialf(GL_FRONT, GL_SHININESS, 0.8*128.0); -} - -void zwart_texture(void) -{ - glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, dif_zwart); - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, amb_zwart); - glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, spc_zwart); - glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 90); -} - -#define VERTEX(I,J) glNormal3fv(normal[I][J]); glVertex3fv(strips[I][J]); - -void do_display (void) -{ - int i,j,s,t, tmp; - cum_al = 0.0; - - metaal_texture(); - - for (s=0;s<24;s += 2) - { - t = s+2; - if (!(t&7)) - t=t-8; - - if (s == 16) - rood_texture(); - glBegin(GL_QUADS); - for (i=0;i 4000 || (!(j%(3*DIST)))) - break; - - if (j>=tot) - j = 0; - - rr++; - VERTEX(s, j); - VERTEX(s, i); - VERTEX(t, i); - VERTEX(t, j); - if (!j) - break; - } - glEnd(); - } - printf("Split up to %d parts.\n", rr); - rood_texture(); - for (i=0;i= tot) - plaatje2 -= tot; - display_cart(plaatje2); - - plaatje2 = plaatje + 20; - if (plaatje2 >= tot) - plaatje2 -= tot; - display_cart(plaatje2); - - plaatje2 = plaatje - 20; - if (plaatje2 < 0) - plaatje2 += tot; - display_wheel(plaatje2); - - glFlush(); - glutSwapBuffers(); - glPopMatrix(); -} - -void myinit (void) { - glShadeModel (GL_SMOOTH); - glFrontFace(GL_CCW); - glEnable(GL_DEPTH_TEST); - - glClearColor(fogcol[0], fogcol[1], fogcol[2], fogcol[3]); - glLightfv(GL_LIGHT0, GL_POSITION, lightpos); - glLightfv(GL_LIGHT0, GL_AMBIENT, lightamb); - glLightfv(GL_LIGHT0, GL_DIFFUSE, lightdif); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glColor3f(1.0, 1.0, 1.0); - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - -#ifdef FOG -/* fog */ - glEnable(GL_FOG); - glFogi(GL_FOG_MODE, GL_LINEAR); - glFogfv(GL_FOG_COLOR, fogcol); - glFogf(GL_FOG_DENSITY, 0.01); - glFogf(GL_FOG_START, 0.01); - glFogf(GL_FOG_END, 55.0); - glHint(GL_FOG_HINT, GL_NICEST); -#endif - - make_texture(); - init_wheel(); - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); -/* - glTexImage2D(GL_TEXTURE_2D, 0, 3, 32, 32, 0, GL_RGB, GL_UNSIGNED_BYTE, - &texture[0][0][0]); -*/ - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); -} - -/* ARGSUSED1 */ -void parsekey(unsigned char key, int x, int y) -{ - switch (key) - { - case 27: exit(0); - case 13: speed = 0; break; - } -} - -/* ARGSUSED1 */ -void parsekey_special(int key, int x, int y) -{ - switch (key) - { - case GLUT_KEY_UP: speed ++; break; - case GLUT_KEY_DOWN: speed --; break; - case GLUT_KEY_RIGHT: angle ++; break; - case GLUT_KEY_LEFT: angle --; break; - } -} - -void SetCamera(void) -{ - float plaatje2; - int l,l2; - l = plaatje; - plaatje2 = plaatje + 10; - - if (plaatje2 >= tot) - plaatje2 -= tot; - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glFrustum (-0.1, 0.1, -0.1, 0.1, 0.1, 550.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - -#if 1 - glTranslated(0.0, +0.4, 0.0); - glRotated(angle*5.0, 0.0, 1.0, 0.0); - glTranslatef(0.0, 0.0, -6.5-2*sin(angle2)-sin(angle3)); - glRotatef(45 - 35*cos(angle3), 1.0, 0.0, 0.0); - glRotatef(-100*sin(angle3), 0.0, 1.0, 0.0); -#else - glRotatef(100*sin(angle3), 0.0, 1.0, 0.0); - glRotatef(-45 + 35*cos(angle3), 1.0, 0.0, 0.0); - glTranslatef(0.0, 0.0, +6+2*sin(angle2)+sin(angle3)); - glRotated(-angle*5.0, 0.0, 1.0, 0.0); - glTranslated(0.0, -0.4, 0.0); -#endif - - l2 = plaatje2; - glTranslatef(-0.15*(plaatje-l), 0.0, 0.0); - - gluLookAt(x[l], y[l], z[l], - x[l2], y[l2], z[l2], - dx[l], dy[l], dz[l]); -} - -void Animate(void) -{ - int l1; - - l1 = plaatje; - speed += (y[l1] - y[l1+4])*2-0.005; - - speed -= (fabs(rl[l1]-al[l1]) + fabs(pt[l1]) + fabs(hd[l1])) * speed/200; - - if (frame > 450) - speed -= 0.2208; - - if (speed < 0) - speed = 0; - - if (frame < 10) - speed = 0; - - if (frame == 10) - speed = 4.5; - - if (frame > 155 && frame < 195) - speed = 7.72; - - plaatje += speed; - - if (plaatje >= tot) { - plaatje = tot - 1; - glutIdleFunc(NULL); - return; - } - - if (plaatje < 0) - plaatje += tot; - - SetCamera(); - - angle2 = frame*4*M_PI/503; - angle3 = frame*6*M_PI/503; - - glutPostRedisplay(); - frame++; -} - -void myReshape(int w, int h) -{ - SetCamera(); - glViewport (0, 0, w, h); -} - -int main(int argc, char *argv[]) -{ - int sz; - extern void calculate_rc(void); - - calculate_rc(); - printf("tot = %d\n", tot); - if (argc > 1) - sz = atoi(argv[1]); - else - sz = 200; - glutInitDisplayMode(GLUT_DEPTH | GLUT_RGBA | GLUT_DOUBLE | GLUT_MULTISAMPLE); - glutInitWindowPosition(200, 0); - glutInitWindowSize(sz, sz); - glutCreateWindow("Roller coaster"); - glNewList(1, GL_COMPILE); - do_display(); - glEndList(); - glutDisplayFunc(display); - glutKeyboardFunc(parsekey); - glutSpecialFunc(parsekey_special); - glutReshapeFunc(myReshape); - glutIdleFunc(Animate); - myinit(); - glutSwapBuffers(); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/demos/rollercoaster/rc.def b/lib/glut-3.7.6/progs/demos/rollercoaster/rc.def deleted file mode 100644 index 1126a330a..000000000 --- a/lib/glut-3.7.6/progs/demos/rollercoaster/rc.def +++ /dev/null @@ -1,217 +0,0 @@ -# eerste (hele flauwe) helling -pitch 16 10 -wait 10 -# weer recht zetten -pitch 0 10 -wait 100 -pitch -16 10 -wait 10 -pitch 0 10 -wait 10 - -# eerste bocht (rechts): -# begin indraaien -alignment 40 30 -wait 20 -# begin bocht -heading -45 10 -wait 10 -# einde indraaien -alignment 0 30 -wait 79 -# begin uitdraaien -alignment -10 30 -wait 10 -# einde bocht -heading 0 10 -wait 20 -# einde uitdraaien -alignment 0 10 -wait 160 - -# tweede bocht (rechts): -# begin indraaien -alignment 10 10 -wait 20 -# begin bocht -heading -45 10 -wait 10 -# einde indraaien -alignment 0 30 -wait 79 -# begin uitdraaien -alignment -40 30 -wait 10 -# einde bocht -heading 0 10 -wait 20 -# einde uitdraaien -alignment 0 30 -wait 50 - -# begin stijging -pitch -45 10 -wait 50 -# stabiel stijging -pitch 0 10 -wait 250 -# einde stijging -pitch 45 10 -wait 50 -# stabiel -pitch 0 10 -# alignment voor de bocht die gaat komen. -wait 30 -roll 20 30 -wait 30 - -# nu gaat het gebeuren! -# in een bocht naar rechts naar beneden storten. -# roll 0 30 -heading -52 20 -alignment 6 40 -wait 40 -alignment 0 40 -wait 120 -heading 0 20 -roll 10 40 -alignment -11 40 -wait 40 -roll 0 40 -heading 0 30 -alignment 0 40 -wait 80 - -# loop 1!!!! -pitch -45 50 -roll -10 50 -wait 440 - -# einde van de loop -pitch -20 50 -wait 100 - -# loop 2!!!! -pitch -45 50 -wait 150 - -# voorbereiding bocht in looping 2 -roll -32 20 -wait 100 -roll 0 20 - -heading 0 40 -wait 80 - -pitch 0 50 -heading 0 30 -roll -18 40 -alignment 25 40 -wait 50 - -pitch 10 20 -roll 0 40 -alignment 0 40 -wait 50 -pitch 0 20 -wait 30 - -heading -45 20 -alignment -25 40 -roll -15 40 -wait 50 -alignment 0 40 -roll 0 40 -wait 49 -heading 0 20 -wait 20 -pitch -20 30 -wait 30 -pitch 0 30 -heading -74 20 -wait 99 -# einde bocht - -heading 0 20 -roll -42 40 -pitch 20 20 -wait 30 -pitch 0 20 -wait 20 -roll -40 40 -heading -40 40 -pitch -40 40 -wait 250 -heading 0 40 -roll 0 40 -alignment -40 10 -wait 20 -alignment 0 10 -wait 80 -pitch 0 40 -# scherpe bocht na schroef -heading 90 40 -wait 100 -heading 0 40 -alignment 40 10 -roll -65 10 -pitch 15 20 -wait 20 -alignment 0 10 -roll 0 10 -pitch 0 20 -heading 37 10 -wait 10 -heading 0 10 -wait 30 -pitch -60 10 -wait 50 -pitch 0 10 -wait 60 -heading 20 10 -wait 30 -heading 0 10 -wait 10 -alignment 40 10 -wait 40 -alignment 0 10 -heading -50 10 -wait 200 -heading 0 10 -wait 10 -alignment -40 40 -wait 40 -alignment 0 40 -wait 79 -roll -13 10 -pitch -13.113200 10 -wait 10 -roll 0 10 -pitch 0 10 -wait 10 -wait 70 -alignment 40 40 -wait 19 -#laatste bocht! -heading -36.2 20 -wait 20 -alignment 0 40 -wait 24 -heading 0 20 -wait 20 -wait 10 -heading -44.4373 20 -wait 134 -heading 0 20 -wait 20 -alignment -40 40 -wait 40 -alignment 0 40 -pitch -5 10 -wait 10 -pitch 0 10 -wait 29 -pitch 5 10 -wait 10 -pitch 0 18 -wait 115 diff --git a/lib/glut-3.7.6/progs/demos/rollercoaster/rollercoaster.dsp b/lib/glut-3.7.6/progs/demos/rollercoaster/rollercoaster.dsp deleted file mode 100644 index 5c36b6d35..000000000 --- a/lib/glut-3.7.6/progs/demos/rollercoaster/rollercoaster.dsp +++ /dev/null @@ -1,100 +0,0 @@ -# Microsoft Developer Studio Project File - Name="rollercoaster" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=rollercoaster - 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 "rollercoaster.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 "rollercoaster.mak" CFG="rollercoaster - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "rollercoaster - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "rollercoaster - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "rollercoaster - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "rollercoaster - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "rollercoaster - Win32 Release" -# Name "rollercoaster - Win32 Debug" -# Begin Source File - -SOURCE=.\defrc.c -# End Source File -# Begin Source File - -SOURCE=.\matrix.c -# End Source File -# Begin Source File - -SOURCE=.\matrix.h -# End Source File -# Begin Source File - -SOURCE=.\rc.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/demos/skyfly/Imakefile b/lib/glut-3.7.6/progs/demos/skyfly/Imakefile deleted file mode 100644 index 375918ea3..000000000 --- a/lib/glut-3.7.6/progs/demos/skyfly/Imakefile +++ /dev/null @@ -1,14 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1994, 1997. */ - -#include "../../../Glut.cf" - -TARGETS = skyfly - -SRCS = database.c fly.c gm_main.c image.c perfdraw.c skyfly.c - -AllTarget($(TARGETS)) - -NormalGlutProgramTarget(skyfly,database.o fly.o gm_main.o image.o perfdraw.o skyfly.o) - -DependTarget() diff --git a/lib/glut-3.7.6/progs/demos/skyfly/clouds.bw b/lib/glut-3.7.6/progs/demos/skyfly/clouds.bw deleted file mode 100644 index c62c1dc02bb0f877444416c6be7dd0272ec9c08b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16625 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 diff --git a/lib/glut-3.7.6/progs/demos/skyfly/database.c b/lib/glut-3.7.6/progs/demos/skyfly/database.c deleted file mode 100644 index 3d4c76c75..000000000 --- a/lib/glut-3.7.6/progs/demos/skyfly/database.c +++ /dev/null @@ -1,522 +0,0 @@ - -/* - * database.c $Revision: 1.2 $ - */ - -#include -#include -#include -#include "skyfly.h" - -#if defined(_WIN32) -#pragma warning (disable:4244) /* disable bogus conversion warnings */ -#pragma warning (disable:4305) /* VC++ 5.0 version of above warning. */ -#endif - -#define cosf(a) cos((float)a) -#define sinf(a) sin((float)a) -#define sqrtf(a) sqrt((float)a) -#define expf(a) exp((float)a) - -static void create_terrain(void); -static void erode_terrain(void); -static void color_terrain(void); -static void init_cells(void); -static void put_cell(float *source, perfobj_t *pobj); -static void put_paper_plane(float *source, perfobj_t *pobj); -static void put_texture_bind(int bind, perfobj_t *pobj); - -int clouds; -static float paper_plane_vertexes[] = { -/*Nx Ny Nz Vx Vy Vz */ -/* ---------------------------- Top view of plane, middle streached open */ - 0.2, 0., .98, -.10, 0, .02,/* vertex #'s 4 (.48,0,-.06) */ - 0., 0., 1., -.36, .20, -.04,/* . */ - 0., 0., 1., .36, .01, 0,/* ... */ - 0., 0.,-1., -.32, .02, 0,/* . +X */ - 0., 1., 0., .48, 0, -.06,/* 2 . 6,8 ^ */ - 0., 1., 0., -.30, 0, -.12,/* . . . | */ - 0.,-1., 0., .36, -.01, 0,/* .. . .. | */ - 0.,-1., 0., -.32, -.02, 0,/* . . . | */ - 0., 0.,-1., .36, -.01, 0,/* . . . . . +Y<-----* */ - 0., 0.,-1., -.36, -.20, -.04,/* . . . for this picture */ - -0.2, 0., .98, -.10, 0, .02,/* . . . . . coord system rot. */ - -0.2, 0., -.98, -.10, 0, .02,/* . . . 90 degrees */ - 0., 0., -1., -.36, .20, -.04,/* . . . . . */ - 0., 0., -1., .36, .01, 0,/* . # . # marks */ - 0., 0., 1., -.32, .02, 0,/* . . . . . (0,0) origin */ - 0., -1., 0., .48, 0, -.06,/* . . . (z=0 at top */ - 0., -1., 0., -.30, 0, -.12,/* . 0 . 10 . of plane) */ - 0.,1., 0., .36, -.01, 0,/* . . . . . */ - 0.,1., 0., -.32, -.02, 0,/* . . . . . . . */ - 0., 0.,1., .36, -.01, 0,/* . . . . . */ - 0., 0.,1., -.36, -.20, -.04,/* 1.......3.5.7.......9 */ - 0.2, 0., -.98, -.10, 0, .02,/* (-.36,.2,-.04) */ -}; - -#define SIZE 400 - -float *A; - -void init_paper_planes(void) -{ - perfobj_t *pobj; - - /* - * create various perf-objs for planes - */ - pobj = &(SharedData->paper_plane_obj); - pobj->flags = SharedData->paper_plane_flags; - pobj->vdata = (float *) SharedData->paper_plane_verts; - put_paper_plane(paper_plane_vertexes, pobj); - - pobj = &(SharedData->paper_plane_start_obj); - pobj->flags = SharedData->paper_plane_start_flags; - *(pobj->flags) = PD_PAPER_PLANE_MODE; - *(pobj->flags + 1) = PLANES_START; - *(pobj->flags + 2) = PD_END; - - pobj = &(SharedData->paper_plane_2ndpass_obj); - pobj->flags = SharedData->paper_plane_2ndpass_flags; - *(pobj->flags) = PD_PAPER_PLANE_MODE; - *(pobj->flags + 1) = PLANES_SECOND_PASS; - *(pobj->flags + 2) = PD_END; - - pobj = &(SharedData->paper_plane_end_obj); - pobj->flags = SharedData->paper_plane_end_flags; - *(pobj->flags) = PD_PAPER_PLANE_MODE; - *(pobj->flags + 1) = PLANES_END; - *(pobj->flags + 2) = PD_END; -} - - -/* - * create perfobj from static definition of plane geometry above - */ - -static void put_paper_plane(float *source, perfobj_t *pobj) -{ - int j; - perfobj_vert_t *pdataptr =(perfobj_vert_t *) pobj->vdata; - unsigned int *flagsptr = pobj->flags; - float *sp = source; - - *flagsptr++ = PD_DRAW_PAPER_PLANE; - - for (j = 0; j < 22; j++) { - putn3fdata(sp + 0, pdataptr); - putv3fdata(sp + 3, pdataptr); - - sp += 6; - pdataptr++; - } - *flagsptr++ = PD_END; - -} - -static void put_texture_bind(int bind, perfobj_t *pobj) -{ - unsigned int *flagsptr = pobj->flags; - - *flagsptr++ = PD_TEXTURE_BIND; - *flagsptr++ = bind; - - *flagsptr++ = PD_END; - -} - -static void put_clouds_vert(float s, float t, float x, float y, float z, - perfobj_vert_t *pdataptr) -{ - float D[5]; - D[0] = s; - D[1] = t; - D[2] = x; - D[3] = y; - D[4] = z; - putt2fdata(D, pdataptr); - putv3fdata(D + 2, pdataptr); -} - -float S[SIZE][SIZE]; -float T[SIZE][SIZE]; -float C[SIZE][SIZE][3]; -int M[SIZE][SIZE]; - -void init_terrain(void) -{ - GridDim = CellDim * NumCells; - XYScale = (float)GRID_RANGE / (float)GridDim; - CellSize = (float)GRID_RANGE / (float)NumCells; - - create_terrain(); - erode_terrain(); - color_terrain(); - init_cells(); -} - -#define SKY 50. - -void init_clouds(void) -{ - perfobj_t *pobj; - perfobj_vert_t *pdataptr; - - clouds = 0; - pobj = &(SharedData->clouds_texture_obj); - pobj->flags = SharedData->clouds_texture_flags; - put_texture_bind(2,pobj); - - pobj = &(SharedData->clouds_obj); - pobj->flags = SharedData->clouds_flags; - pobj->vdata = (float *)SharedData->clouds_verts; - *(pobj->flags+ 0) = PD_DRAW_CLOUDS; - *(pobj->flags+ 1) = PD_END; - - pdataptr =(perfobj_vert_t *) pobj->vdata; - - put_clouds_vert(0.,0., -SKY, -SKY, SKY_HIGH,pdataptr); - pdataptr++; - put_clouds_vert(24.,0., SKY+GRID_RANGE, -SKY, SKY_HIGH,pdataptr); - pdataptr++; - put_clouds_vert(24.,24., SKY+GRID_RANGE, SKY+GRID_RANGE, SKY_HIGH,pdataptr); - pdataptr++; - put_clouds_vert(0.,24., -SKY, SKY+GRID_RANGE, SKY_HIGH,pdataptr); -} - -static void create_terrain(void) -{ - int r, c, i, x1, y1, x2, y2; - int hillsize; - - hillsize = GRID_RANGE / 12; - - A = (float*)calloc(GridDim * GridDim, sizeof(float)); - - /* - * initialize elevation to zero, except band down middle - * where make a maximum height 'hill' that will later be - * inverted to make the negative elevation 'canyon' - */ - - for (r = 0; r < GridDim; r++) - for (c = 0; c < GridDim; c++) - if(r>=(GridDim/2-2-IRND(2)) && r<=(GridDim/2+2+IRND(2))) - A[r * GridDim + c] = 1.0; - else - A[r * GridDim + c] = 0.0; - - /* - * create random sinusoidal hills that add on top - * of each other - */ - for (i = 1; i <= 10*GridDim; i++) { - - /* randomly position hill */ - x1 = IRND(GridDim - hillsize); - x2 = x1 + hillsize/ 8 + IRND(hillsize-hillsize/ 8); - y1 = IRND(GridDim - hillsize); - y2 = y1 + hillsize/ 8 + IRND(hillsize-hillsize/ 8); - - if((x1<=GridDim/2-4 && x2>=GridDim/2-4) || - (x1<=GridDim/2+4 && x2>=GridDim/2+4)) - { - x1 = IRND(2)-2 + GridDim/2; - x2 = x1 + IRND(GridDim/2 - x1 + 2); - } - - /* make a sinusoidal hill */ - for (r = x1; r < x2; r++) - for (c = y1; c < y2; c++) { - A[r * GridDim + c] +=.35 * - (sinf(M_PI * (float) (r - x1) / (float) (x2 - x1)) * - (sinf(M_PI * (float) (c - y1) / (float) (y2 - y1)))); - } - } - - /* clamp the elevation of the terrain */ - for (r = 1; r < GridDim; r++) - for (c = 1; c < GridDim; c++) { - A[r * GridDim + c] = MIN(A[r * GridDim + c], .95); - A[r * GridDim + c] = MAX(A[r * GridDim + c], 0.); - } - -} - -#define NUM_DROPS 80 - -static void erode_terrain(void) -{ - float x, y, xv, yv, dx, dy; - float cut, min, take; - int nm; - int t, xi, yi, xo, yo, done; - int ii, jj, r, c; - - for (nm = 1; nm < NUM_DROPS*GridDim; nm++) { - - /* find a random position to start the 'rain drop' */ - x = (float) (IRND(GridDim)); - y = (float) (IRND(GridDim)); - - /* Clamp x and y to be inside grid */ - x = MIN(MAX(2., x), (float)GridDim-2.); - y = MIN(MAX(2., y), (float)GridDim-2.); - - done = 0; - yv = xv = 0.; - - t = 0; - cut = .3; - - while (!done) { - xi = (int) x; - yi = (int) y; - - min = 90.; - - if (xi != xo || yi != yo) { - cut *=.99; - - /* gradient */ - dx = (A[(xi + 1)*GridDim + yi] - A[(xi - 1) * GridDim + yi]); - dy = (A[xi * GridDim + yi + 1] - A[xi * GridDim + yi - 1]); - - - /* find lowest neighbor */ - for (ii = -1; ii <= 1; ii++) - for (jj = -1; jj <= 1; jj++) - if (A[(xi + ii)*GridDim + yi + jj] < min) - min = A[(xi + ii)*GridDim + yi + jj]; - - /* evaporate drop if sitting on my old location */ - if (M[xi][yi] == nm) - done = 1; - M[xi][yi] = nm; - - /* cave in neighbors by .3 */ - for (ii = -1; ii <= 1; ii++) - for (jj = -1; jj <= 1; jj++) { - take =.3 * cut * (A[(xi + ii)*GridDim + yi + jj]-min); - A[(xi + ii)*GridDim + yi + jj] -= take; - } - - /* take away from this cell by .7 */ - take = (A[xi*GridDim + yi] - min) *.7 * cut; - A[xi*GridDim + yi] -= take; - - } - xo = xi; - yo = yi; - - /* move drop using kinematic motion*/ - xv = xv - dx -.8 * xv; - yv = yv - dy -.8 * yv; - - x += xv; - y += yv; - - /* - * make sure can't move by more that 1.0 - * in any direction - */ - - xv = MAX(xv, -1); - yv = MAX(yv, -1); - xv = MIN(xv, 1); - yv = MIN(yv, 1); - - /* check to see if need a new drop */ - /* ie ran of world, got stuck, or at 'sea level' */ - if (x < 1.|| x > GridDim - 1.|| y < 1.|| y > GridDim - 1. - || t++ > 2000 - || cut <.01) - done = 1; - - if (A[xi*GridDim + yi] < 0.0001) { - A[xi*GridDim + yi] = 0.; - done = 1; - } - } /* while (!done) with this drop */ - } /* next drop */ - - /* - * invert the pseudo hill int the pseudo canyon - */ - - for (r = 0; r < GridDim; r++) - for (c = 0; c < GridDim; c++) - if(r>=GridDim/2-4 && r<=GridDim/2+4) - A[r * GridDim + c] = MAX((-3.2 * A[r * GridDim + c]), -1.8); -} - -static void color_terrain(void) -{ - float N[3], D, alt, maxelev = -1.; - int x, y; - - for (x = 0; x < GridDim; x++) - for (y = 0; y < GridDim; y++) - maxelev = MAX(maxelev, A[x * GridDim + y]); - - for (x = 1; x < GridDim - 1; x++) - for (y = 1; y < GridDim - 1; y++) { - alt = A[x * GridDim + y] * 1.5; - /* randomly perterb to get a mottling effect */ - alt += IRND(100) / 400. -.125; - alt = MIN(alt, 1.0); - if (alt < -.11) { - C[x][y][0] = 0.6; /* soil/rock in canyon */ - C[x][y][1] = 0.5; - C[x][y][2] = 0.2; - } else if (alt < .000001) { - C[x][y][0] = 0.0; /* dark, jungle lowlands */ - C[x][y][1] = 0.2; - C[x][y][2] = 0.05; - } else if (alt <.90) { - C[x][y][0] = alt*.25; /* green to redish hillsides */ - C[x][y][1] = (1.0 - alt) *.4 + .1; - C[x][y][2] = 0.1; - } else { - C[x][y][0] = alt; - C[x][y][1] = alt; /* incresingly white snow */ - C[x][y][2] = alt; - } - - /* compute normal to terrain */ - - N[0] = A[(x - 1)*GridDim + y] - A[(x + 1)*GridDim + y]; - N[1] = A[x*GridDim + y - 1] - A[x*GridDim + y + 1]; - N[2] = 2.0 / ScaleZ; - - D = 1.0 / sqrtf(N[0] * N[0] + N[1] * N[1] + N[2] * N[2]); - - N[0] *= D; - N[1] *= D; - N[2] *= D; - - /* perform diffuse lighting of terrain */ - - D = N[0] * LX + N[1] * LY + N[2] * LZ; - D *= 1.2; - - if(!IRND(4)) D *= .5; - - D = MAX(D,0); - - /* darken terrain on shaded side */ - C[x][y][0] *= D; - C[x][y][1] *= D; - C[x][y][2] *= D; - - S[x][y] = (float) (x) / (float)CellDim; - T[x][y] = (float) (y) / (float)CellDim; - - } -} - -/* - * create perobj to hold a cell of terrain - * for a 5x5 terrain cell, there will be 5 - * tmeshes each with 10 triangles (12 vertexes) - * this means looking past my cell to neighbors - * to stitch things together. To keep data contigious, - * vertexes are repeated in tmeshes, not shared. - */ - -static void init_cells(void) -{ - int x, y, xx, yy, world_x, world_y; - int pntr, index, sstart, tstart; - float *D; - perfobj_t *pobj; - - D = (float*)calloc(CellDim *(CellDim + 1) * - 2 * FLOATS_PER_VERT_PAIR, sizeof(float)); - - pobj = &(SharedData->terrain_texture_obj); - pobj->flags = SharedData->terrain_texture_flags; - - put_texture_bind(1, pobj); - - for (x = 0; x < NumCells; x++) - for (y = 0; y < NumCells; y++) { - index = x*NumCells+y; - SharedData->terrain_cells[index].flags = - SharedData->terrain_cell_flags[index]; - - SharedData->terrain_cells[index].vdata = - (float *) SharedData->terrain_cell_verts[index]; - - pntr = 0; - - /* - * Guarantee S,T to be within range 0-8 for tmesh strip using - * 256x256 sized texture. This avoids texture index clipping - * in pipe. - */ - sstart = (int)S[x*CellDim][y*CellDim]; - tstart = (int)T[x*CellDim][y*CellDim]; - - for (xx = 0; xx < CellDim; xx++) - for (yy = 0; yy < CellDim + 1; yy++) { - - /* init a perfobj */ - - world_x = MIN(x * CellDim + xx, GridDim-2); - world_y = MIN(y * CellDim + yy, GridDim-2); - - D[pntr + 0] = S[world_x][world_y] - sstart; - D[pntr + 1] = T[world_x][world_y] - tstart; - D[pntr + 2] = C[world_x][world_y][0]; - D[pntr + 3] = C[world_x][world_y][1]; - D[pntr + 4] = C[world_x][world_y][2]; - D[pntr + 5] = (float)world_x * XYScale; - D[pntr + 6] = (float)world_y * XYScale; - D[pntr + 7] = A[world_x*GridDim + world_y]*ScaleZ; - - - D[pntr + 8] = S[world_x + 1][world_y] - sstart; - D[pntr + 9] = T[world_x + 1][world_y] - tstart; - D[pntr + 10] = C[world_x + 1][world_y][0]; - D[pntr + 11] = C[world_x + 1][world_y][1]; - D[pntr + 12] = C[world_x + 1][world_y][2]; - D[pntr + 13] = (float)(world_x+1) * XYScale; - D[pntr + 14] = (float)world_y * XYScale; - D[pntr + 15] = A[(world_x+1)*GridDim + world_y] * ScaleZ; - - pntr += FLOATS_PER_VERT_PAIR; - - } /* for each cell */ - put_cell(D, &(SharedData->terrain_cells[index])); - - } /* for all cells in world */ - - free(D); -} - -static void put_cell(float *source, perfobj_t *pobj) -{ - int i, j; - perfobj_vert_t *pdataptr =(perfobj_vert_t *) pobj->vdata; - unsigned int *flagsptr = pobj->flags; - float *sp = source; - - /* For all tmesh strips in cell */ - for (i = 0; i < CellDim; i++) { - *flagsptr++ = PD_DRAW_TERRAIN_CELL; - *flagsptr++ = (unsigned long) pdataptr; - - /* For all verts in tmesh strip */ - for (j = 0; j < (CellDim + 1) * 2; j++) { - putt2fdata(sp, pdataptr); - putc3fdata(sp + 2, pdataptr); - putv3fdata(sp + 5, pdataptr); - - sp += 8; - pdataptr++; - } - } - *flagsptr++ = PD_END; -} - diff --git a/lib/glut-3.7.6/progs/demos/skyfly/fly.c b/lib/glut-3.7.6/progs/demos/skyfly/fly.c deleted file mode 100644 index 35d3a6b22..000000000 --- a/lib/glut-3.7.6/progs/demos/skyfly/fly.c +++ /dev/null @@ -1,282 +0,0 @@ - -/* - * fly.c $Revision: 1.2 $ - */ - -#include "stdio.h" -#include "math.h" -#include "skyfly.h" - -#if defined(_WIN32) -#pragma warning (disable:4244) /* disable bogus conversion warnings */ -#pragma warning (disable:4305) /* VC++ 5.0 version of above warning. */ -#endif - -#define cosf(a) cos((float)a) -#define sinf(a) sin((float)a) -#define sqrtf(a) sqrt((float)a) -#define expf(a) exp((float)a) - -typedef struct paper_plane_struct { - float Pturn_rate; - float PX, PY, PZ, PZv; - float Pazimuth; - float Proll; - int Pcount, Pdirection; -} paper_plane; - -static paper_plane flock[NUM_PLANES]; -static float X, Y, Z, Azimuth, Speed; -static int Keyboard_mode; - -extern float *A; -extern int Wxorg, Wyorg; - -static float terrain_height(float x, float y); - -int Xgetbutton(int b); -int Xgetvaluator(int v); - -void init_positions(void) -{ - int i; - - X = GRID_RANGE / 2.; - Y = GRID_RANGE / 2.; - Z = 1.5; - - /* - * randomly position the planes near center of world - * take MAX of height above terrain and 0, so planes - * don't fall into canyon. Canyon has negative elevation - */ - - for (i = 0; i < NUM_PLANES; i++) { - flock[i].PX = (float) IRND(20) + GRID_RANGE / 2 - 10; - flock[i].PY = (float) IRND(20) + GRID_RANGE / 2 - 10; - flock[i].PZ = MAX(terrain_height(flock[i].PX, flock[i].PY),0.) + - 2.*(float)i/NUM_PLANES+.3; - flock[i].Pazimuth = ((float)IRND(256) / 128.) * M_PI; - } - Speed = 0.1f; - Azimuth = M_PI / 2.; - -#if 0 -// if (Init_pos) { -// X = Init_x; -// Y = Init_y; -// Z = Init_z; -// Azimuth = Init_azimuth; -// Keyboard_mode = 1; -// } -#endif -} - -int _frame = 0; - -void fly(perfobj_t *viewer_pos) -{ - float terrain_z, xpos, ypos, xcntr, ycntr; - float delta_speed = .003; - -/* if (++_frame == 1000) { - _frame = 0; - init_positions(); - }*/ - - xcntr = Wxsize / 2; - ycntr = Wysize / 2; - - if (Xgetbutton(RKEY)) - init_positions(); - - if (Xgetbutton(SPACEKEY)) { - Keyboard_mode = !Keyboard_mode; - } - - if (Keyboard_mode) { - - /* - * step-at-a-time debugging mode - */ - - if (Keyboard_mode && Xgetbutton(LEFTARROWKEY)) { - Azimuth -= 0.025; - } - if (Keyboard_mode && Xgetbutton(RIGHTARROWKEY)) { - Azimuth += 0.025; - } - if (Keyboard_mode && Xgetbutton(UPARROWKEY)) { - X += cosf(-Azimuth + M_PI / 2.) * 0.025; - Y += sinf(-Azimuth + M_PI / 2.) * 0.025; - } - if (Keyboard_mode && Xgetbutton(DOWNARROWKEY)) { - X -= cosf(-Azimuth + M_PI / 2.) * 0.025; - Y -= sinf(-Azimuth + M_PI / 2.) * 0.025; - } - if (Keyboard_mode && Xgetbutton(PAGEUPKEY)) { - Z += 0.025; - } - if (Keyboard_mode && Xgetbutton(PAGEDOWNKEY)) { - Z -= 0.025; - } - - } else { - - /* - * simple, mouse-driven flight model - */ - - if (Xgetbutton(LEFTMOUSE) && Speed < .3) - Speed += delta_speed; - if (Xgetbutton(RIGHTMOUSE) && Speed > -.3) - Speed -= delta_speed; - if (Xgetbutton(MIDDLEMOUSE)) - Speed = Speed*.8; - - xpos = (Xgetvaluator(MOUSEX)-xcntr) / ((float)Wxsize*14.); - ypos = (Xgetvaluator(MOUSEY)-ycntr) / ((float)Wysize*.5); - - /* - * move in direction of view - */ - - Azimuth += xpos; - X += cosf(-Azimuth + M_PI / 2.) * Speed; - Y += sinf(-Azimuth + M_PI / 2.) * Speed; - Z -= ypos * Speed; - } - - /* - * keep from getting too close to terrain - */ - - terrain_z = terrain_height(X, Y); - if (Z < terrain_z +.4) - Z = terrain_z +.4; - - X = MAX(X, 1.); - X = MIN(X, GRID_RANGE); - Y = MAX(Y, 1.); - Y = MIN(Y, GRID_RANGE); - Z = MIN(Z, 20.); - - *((float *) viewer_pos->vdata + 0) = X; - *((float *) viewer_pos->vdata + 1) = Y; - *((float *) viewer_pos->vdata + 2) = Z; - *((float *) viewer_pos->vdata + 3) = Azimuth; -} - -void fly_paper_planes(perfobj_t *paper_plane_pos) -{ - int i; - float speed = .08; - float terrain_z; - - /* - * slow planes down in cyclops mode since - * frame rate is doubled - */ - - for (i = 0; i < NUM_PLANES; i++) { - /* - * If plane is not turning, one chance in 50 of - * starting a turn - */ - if (flock[i].Pcount == 0 && IRND(50) == 1) { - /* initiate a roll */ - /* roll for a random period */ - flock[i].Pcount = IRND(100); - /* random turn rate */ - flock[i].Pturn_rate = IRND(100) / 10000.; - flock[i].Pdirection = IRND(3) - 1; - } - if (flock[i].Pcount > 0) { - /* continue rolling */ - flock[i].Proll += flock[i].Pdirection * flock[i].Pturn_rate; - flock[i].Pcount--; - } else - /* damp amount of roll when turn complete */ - flock[i].Proll *=.95; - - /* turn as a function of roll */ - flock[i].Pazimuth -= flock[i].Proll *.05; - - /* follow terrain elevation */ - terrain_z=terrain_height(flock[i].PX,flock[i].PY); - - /* use a "spring-mass-damp" system of terrain follow */ - flock[i].PZv = flock[i].PZv - - .01 * (flock[i].PZ - (MAX(terrain_z,0.) + - 2.*(float)i/NUM_PLANES+.3)) - flock[i].PZv *.04; - - /* U-turn if fly off world!! */ - if (flock[i].PX < 1 || flock[i].PX > GRID_RANGE - 2 || flock[i].PY < 1 || flock[i].PY > GRID_RANGE - 2) - flock[i].Pazimuth += M_PI; - - /* move planes */ - flock[i].PX += cosf(flock[i].Pazimuth) * speed; - flock[i].PY += sinf(flock[i].Pazimuth) * speed; - flock[i].PZ += flock[i].PZv; - - } - - for (i = 0; i < NUM_PLANES; i++) { - *((float *) paper_plane_pos[i].vdata + 0) = flock[i].PX; - *((float *) paper_plane_pos[i].vdata + 1) = flock[i].PY; - *((float *) paper_plane_pos[i].vdata + 2) = flock[i].PZ; - *((float *) paper_plane_pos[i].vdata + 3) = flock[i].Pazimuth * RAD_TO_DEG; - *((float *) paper_plane_pos[i].vdata + 4) = flock[i].PZv * (-500.); - *((float *) paper_plane_pos[i].vdata + 5) = flock[i].Proll *RAD_TO_DEG; - } -} - -/* compute height above terrain */ -static float terrain_height(float x, float y) -{ - - float dx, dy; - float z00, z01, z10, z11; - float dzx1, dzx2, z1, z2; - int xi, yi; - - x /= XYScale; - y /= XYScale; - xi = MIN((int)x, GridDim-2); - yi = MIN((int)y, GridDim-2); - dx = x - xi; - dy = y - yi; - - /* - View looking straight down onto terrain - - <--dx--> - - z00----z1-------z10 (terrain elevations) - | | | - ^ | Z at(x,y) | - | | | | - dy | | | - | | | | - | | | | - V z00----z2-------z10 - (xi,yi) - - Z= height returned - - */ - - z00 = A[xi * GridDim + yi]; - z10 = A[(xi + 1) * GridDim + yi]; - z01 = A[xi * GridDim + yi + 1]; - z11 = A[(xi + 1) * GridDim + yi + 1]; - - dzx1 = z10 - z00; - dzx2 = z11 - z01; - - z1 = z00 + dzx1 * dx; - z2 = z01 + dzx2 * dx; - - return (ScaleZ*((1.0 - dy) * z1 + dy * z2)); -} - diff --git a/lib/glut-3.7.6/progs/demos/skyfly/gm_main.c b/lib/glut-3.7.6/progs/demos/skyfly/gm_main.c deleted file mode 100644 index a74c8f0bf..000000000 --- a/lib/glut-3.7.6/progs/demos/skyfly/gm_main.c +++ /dev/null @@ -1,341 +0,0 @@ - -#include -#include -#include -#include - -#include "skyfly.h" - -void init_misc(void); -void init_skyfly(void); -void sim_singlechannel(void); -void cull_proc(void); -void draw_proc(void); - -#define SKY_R 0.23f -#define SKY_G 0.35f -#define SKY_B 0.78f - -#define TERR_DARK_R 0.27f -#define TERR_DARK_G 0.18f -#define TERR_DARK_B 0.00f - -#define TERR_LITE_R 0.24f -#define TERR_LITE_G 0.53f -#define TERR_LITE_B 0.05f - -typedef struct { - unsigned char red; - unsigned char green; - unsigned char blue; -} palette_t; - -palette_t pal[256]; -static int buttons[BUTCOUNT] = { 0 }; -static int mouse_x, mouse_y; - -GLboolean show_timer = GL_FALSE; -GLboolean fullscreen = GL_FALSE; - -int Xgetbutton(int button) -{ - int b; - if (button < 0 || button >= BUTCOUNT) - return -1; - b = buttons[button]; - if (button < LEFTMOUSE) - buttons[button] = 0; - return b; -} - -int Xgetvaluator(int val) -{ - switch (val) { - case MOUSEX: - return mouse_x; - case MOUSEY: - return mouse_y; - default: - return -1; - } -} - -void setPaletteIndex(int i, GLfloat r, GLfloat g, GLfloat b) -{ - pal[i].red = (255.0F * r); - pal[i].green = (255.0F * g); - pal[i].blue = (255.0F * b); -} - -void init_cmap(void) -{ - int ii, jj, color; - GLfloat r0, g0, b0, r1, g1, b1; - - /* Set up color map */ - color = 10; - memset(pal,0,sizeof(pal)); - - /* Sky colors */ - sky_base = color; - r0 = SKY_R; r1 = 1.0f; - g0 = SKY_G; g1 = 1.0f; - b0 = SKY_B; b1 = 1.0f; - for (ii = 0; ii < SKY_COLORS; ii++) { - GLfloat p, r, g, b; - p = (GLfloat) ii / (SKY_COLORS-1); - r = r0 + p * (r1 - r0); - g = g0 + p * (g1 - g0); - b = b0 + p * (b1 - b0); - for (jj = 0; jj < FOG_LEVELS; jj++) { - GLfloat fp, fr, fg, fb; - fp = (FOG_LEVELS > 1) ? (GLfloat) jj / (FOG_LEVELS-1) : 0.0f; - fr = r + fp * (fog_params[0] - r); - fg = g + fp * (fog_params[1] - g); - fb = b + fp * (fog_params[2] - b); - setPaletteIndex(sky_base + (ii*FOG_LEVELS) + jj, fr, fg, fb); - } - } - color += (SKY_COLORS * FOG_LEVELS); - - /* Terrain colors */ - terr_base = color; - r0 = TERR_DARK_R; r1 = TERR_LITE_R; - g0 = TERR_DARK_G; g1 = TERR_LITE_G; - b0 = TERR_DARK_B; b1 = TERR_LITE_B; - for (ii = 0; ii < TERR_COLORS; ii++) { - GLfloat p, r, g, b; - p = (GLfloat) ii / (TERR_COLORS-1); - r = r0 + p * (r1 - r0); - g = g0 + p * (g1 - g0); - b = b0 + p * (b1 - b0); - for (jj = 0; jj < FOG_LEVELS; jj++) { - GLfloat fp, fr, fg, fb; - fp = (FOG_LEVELS > 1) ? (GLfloat) jj / (FOG_LEVELS-1) : 0.0f; - fr = r + fp * (fog_params[0] - r); - fg = g + fp * (fog_params[1] - g); - fb = b + fp * (fog_params[2] - b); - setPaletteIndex(terr_base + (ii*FOG_LEVELS) + jj, fr, fg, fb); - } - } - color += (TERR_COLORS * FOG_LEVELS); - - /* Plane colors */ - plane_colors[0] = color; - plane_colors[1] = color + (PLANE_COLORS/2); - plane_colors[2] = color + (PLANE_COLORS-1); - r0 = 0.4; r1 = 0.8; - g0 = 0.4; g1 = 0.8; - b0 = 0.1; b1 = 0.1; - for (ii = 0; ii < PLANE_COLORS; ii++) { - GLfloat p, r, g, b; - p = (GLfloat) ii / (PLANE_COLORS); - r = r0 + p * (r1 - r0); - g = g0 + p * (g1 - g0); - b = b0 + p * (b1 - b0); - setPaletteIndex(plane_colors[0] + ii, r, g, b); - } - color += PLANE_COLORS; -#if 0 - GM_setPalette(pal,256,0); - GM_realizePalette(256,0,true); -#endif -} - -void draw(void); - -void gameLogic(void) -{ - sim_singlechannel(); - draw(); -} - -/* When not visible, stop animating. Restart when visible again. */ -static void -visible(int vis) -{ - if (vis == GLUT_VISIBLE) { - glutIdleFunc(gameLogic); - } else { - glutIdleFunc(NULL); - } -} - -int lastCount; /* Timer count for last fps update */ -int frameCount; /* Number of frames for timing */ -int fpsRate; /* Current frames per second rate */ - -void draw(void) -{ - int newCount; - char buf[20]; - int i, len; - - /* Draw the frame */ - cull_proc(); - draw_proc(); - - /* Update the frames per second count if we have gone past at least - a quarter of a second since the last update. */ - newCount = glutGet(GLUT_ELAPSED_TIME); - frameCount++; - if ((newCount - lastCount) > 1000) { - fpsRate = (int) ((10000.0f / (newCount - lastCount)) * frameCount); - lastCount = newCount; - frameCount = 0; - } - if (show_timer) { - sprintf(buf,"%3d.%d fps", fpsRate / 10, fpsRate % 10); - glPushAttrib(GL_ENABLE_BIT | GL_CURRENT_BIT); - glDisable(GL_LIGHTING); - glDisable(GL_TEXTURE_2D); - glDisable(GL_DEPTH_TEST); - glDisable(GL_FOG); - glDisable(GL_BLEND); - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - glOrtho(0, Wxsize, 0, Wysize, -1, 1); - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); - - glColor3f(1.0f, 1.0f, 0.0f); - glRasterPos2i(10, 10); - len = strlen(buf); - for (i = 0; i < len; i++) - glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, buf[i]); - - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); - glPopAttrib(); - } - - glutSwapBuffers(); -} - -void -reshape(int width, int height) -{ - Wxsize = width; - Wysize = height; - - mouse_x = Wxsize/2; - mouse_y = Wysize/2; - - glViewport(0, 0, width, height); -} - -/* ARGSUSED1 */ -void -keyboard(unsigned char c, int x, int y) -{ - switch (c) { - case 0x1B: - exit(0); - break; - case 'r': - buttons[RKEY] = 1; - break; - case '.': - buttons[PERIODKEY] = 1; - break; - case ' ': - buttons[SPACEKEY] = 1; - break; - case 'f': - set_fog(!fog); - break; - case 'd': - set_dither(!dither); - break; - case 't': - show_timer = !show_timer; - break; - } -} - -void mouse(int button, int state, int x, int y) -{ - mouse_x = x; - mouse_y = y; - switch (button) { - case GLUT_LEFT_BUTTON: - buttons[LEFTMOUSE] = (state == GLUT_DOWN); - break; - case GLUT_MIDDLE_BUTTON: - buttons[MIDDLEMOUSE] = (state == GLUT_DOWN); - break; - case GLUT_RIGHT_BUTTON: - buttons[RIGHTMOUSE] = (state == GLUT_DOWN); - break; - } -} - -void motion(int x, int y) -{ - mouse_x = x; - mouse_y = y; -} - - -/* ARGSUSED1 */ -void special(int key, int x, int y) -{ - switch (key) { - case GLUT_KEY_LEFT: - buttons[LEFTARROWKEY] = 1; - break; - case GLUT_KEY_UP: - buttons[UPARROWKEY] = 1; - break; - case GLUT_KEY_RIGHT: - buttons[RIGHTARROWKEY] = 1; - break; - case GLUT_KEY_DOWN: - buttons[DOWNARROWKEY] = 1; - break; - case GLUT_KEY_PAGE_UP: - buttons[PAGEUPKEY] = 1; - break; - case GLUT_KEY_PAGE_DOWN: - buttons[PAGEDOWNKEY] = 1; - break; - } -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - - if (argc > 1 && !strcmp(argv[1], "-f")) - fullscreen = GL_TRUE; - - glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH | GLUT_MULTISAMPLE); - if (fullscreen) { - glutGameModeString("640x480:16@60"); - glutEnterGameMode(); - } else { - glutInitWindowSize(400, 400); - glutCreateWindow("GLUT-based OpenGL skyfly"); - } - glutDisplayFunc(draw); - glutReshapeFunc(reshape); - glutVisibilityFunc(visible); - glutKeyboardFunc(keyboard); - glutMouseFunc(mouse); - glutMotionFunc(motion); - glutPassiveMotionFunc(motion); - glutSpecialFunc(special); - - init_misc(); - if (!rgbmode) - init_cmap(); - init_skyfly(); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/demos/skyfly/image.c b/lib/glut-3.7.6/progs/demos/skyfly/image.c deleted file mode 100644 index b4448399d..000000000 --- a/lib/glut-3.7.6/progs/demos/skyfly/image.c +++ /dev/null @@ -1,33 +0,0 @@ -#include "stdio.h" -#include "stdlib.h" -#include "string.h" - -unsigned char * read_bwimage(char *name, int *w, int *h) -{ - unsigned char *image; - FILE *image_in; - int components; - - if ( (image_in = fopen(name, "rb")) == NULL) { - return 0; - } - - if (strncmp("terrain", name, 7) == 0) { - *w = 256; - *h = 256; - } else if (strncmp("clouds", name, 6) == 0) { - *w = 128; - *h = 128; - } - components = 1; - - if (components != 1) - return 0; - - image = (unsigned char *)malloc(sizeof(unsigned char) * *w * *h); - - fread(image, sizeof image[0], *w * *h, image_in); - fclose(image_in); - return image; -} - diff --git a/lib/glut-3.7.6/progs/demos/skyfly/perfdraw.c b/lib/glut-3.7.6/progs/demos/skyfly/perfdraw.c deleted file mode 100644 index 5dc4bb9f5..000000000 --- a/lib/glut-3.7.6/progs/demos/skyfly/perfdraw.c +++ /dev/null @@ -1,331 +0,0 @@ - -/* - * perfdraw.c - $Revision: 1.4 $ - */ - -#include -#include -#include -#include "skyfly.h" - -#if !defined(GL_VERSION_1_1) -#if defined(GL_EXT_texture_object) -#define glBindTexture(A,B) glBindTextureEXT(A,B) -#define glGenTextures(A,B) glGenTexturesEXT(A,B) -#define glDeleteTextures(A,B) glDeleteTexturesEXT(A,B) -#else -#define glBindTexture(A,B) -#define glGenTextures(A,B) -#define glDeleteTextures(A,B) -#endif -#endif - -/* static routine decls */ - -extern int clouds; -static void drawlitmesh_11(float *objdata); -static void drawcolrtexmesh_10(float *objdata); -static void drawclouds(float *objdata); - -void drawperfobj(perfobj_t *perfobj) -{ - float *vdata_ptr =(float *) perfobj->vdata; - extern void texenv(int), lightpos(void); - - unsigned int *flagsptr = perfobj->flags; - float *dp; - - for (;;) { - switch (*flagsptr) { - /* - * A paper plane is a single tmesh folded on itself so the orientations - * of some triangles in the mesh are incorrect with respect to - * their normals. This is solved by drawing the tmesh twice; - * first draw only backfaces, then only frontfaces. - */ - case PD_DRAW_PAPER_PLANE: - flagsptr += 1; - glCullFace(GL_FRONT); - drawlitmesh_11(vdata_ptr); - glCullFace(GL_BACK); - drawlitmesh_11((float *)((perfobj_vert_t *) vdata_ptr + 11)); - glPopMatrix(); - break; - - case PD_DRAW_TERRAIN_CELL: - dp = *(float **) (flagsptr + 1); - flagsptr += 2; - drawcolrtexmesh_10(dp); - break; - - case PD_DRAW_CLOUDS: - if (rgbmode) { -#if 0 - glColor3ub(0x30, 0x40, 0xb0); -#else - glColor3f(1.0f, 1.0f, 1.0f); -#endif - } - glDisable(GL_CULL_FACE); - glDisable(GL_DEPTH_TEST); - /*texenv(2);*/ - drawclouds(vdata_ptr); - glEnable(GL_DEPTH_TEST); - glEnable(GL_CULL_FACE); - flagsptr += 1; - break; - - case PD_PAPER_PLANE_MODE: - switch (*(flagsptr + 1)) { - case PLANES_START: - glShadeModel(GL_FLAT); - glEnable(GL_LIGHTING); - glDisable(GL_TEXTURE_2D); - if (fog && !rgbmode) - glDisable(GL_FOG); - break; - case PLANES_END: - glShadeModel(GL_SMOOTH); - glDisable(GL_LIGHTING); - if (fog && !rgbmode && FOG_LEVELS > 1) - glEnable(GL_FOG); - break; - } - flagsptr += 2; - break; - - case PD_PAPER_PLANE_POS: /* contains the pushmatrix */ - glPushMatrix(); - glTranslatef(*(vdata_ptr), *(vdata_ptr + 1), *(vdata_ptr + 2)); - glRotatef(*(vdata_ptr + 3), 0.0, 0.0, 1.0); - glRotatef(*(vdata_ptr + 4), 0.0, 1.0, 0.0); - glRotatef(*(vdata_ptr + 5), 1.0, 0.0, 0.0); - flagsptr += 1; - break; - - case PD_VIEWER_POS: - glLoadIdentity(); - glRotatef(-90., 1.0, 0., 0.); - glRotatef(*(vdata_ptr + 3) * RAD_TO_DEG, 0.0, 0.0, 1.0); /* yaw */ - lightpos(); - glTranslatef(-*(vdata_ptr), -*(vdata_ptr + 1), -*(vdata_ptr + 2)); - flagsptr += 1; - break; - - case PD_TEXTURE_BIND: - glBindTexture(GL_TEXTURE_2D, *(flagsptr + 1)); - texenv(*(flagsptr + 1)); - glEnable(GL_TEXTURE_2D); - flagsptr += 2; - break; - - case PD_END: - return; - - default: - fprintf(stderr, "Bad PD primitive %d\n", *flagsptr); - flagsptr++; - break; - } - } -} - -/* - * Notice how the following routines unwind loops and pre-compute indexes - * at compile time. This is crucial in obtaining the maximum data transfer - * from cpu to the graphics pipe. - */ -static void drawlitmesh_11(float *op) -{ - glBegin(GL_TRIANGLE_STRIP); - /* one */ - glNormal3fv((op + PD_V_NORMAL)); - glVertex3fv((op + PD_V_POINT)); - /* two */ - glNormal3fv((op + (PD_V_SIZE + PD_V_NORMAL))); - glVertex3fv((op + (PD_V_SIZE + PD_V_POINT))); - /* three */ - glNormal3fv((op + (2 * PD_V_SIZE + PD_V_NORMAL))); - glVertex3fv((op + (2 * PD_V_SIZE + PD_V_POINT))); - /* four */ - glNormal3fv((op + (3 * PD_V_SIZE + PD_V_NORMAL))); - glVertex3fv((op + (3 * PD_V_SIZE + PD_V_POINT))); - /* five */ - glNormal3fv((op + (4 * PD_V_SIZE + PD_V_NORMAL))); - glVertex3fv((op + (4 * PD_V_SIZE + PD_V_POINT))); - /* six */ - glNormal3fv((op + (5 * PD_V_SIZE + PD_V_NORMAL))); - glVertex3fv((op + (5 * PD_V_SIZE + PD_V_POINT))); - /* seven */ - glNormal3fv((op + (6 * PD_V_SIZE + PD_V_NORMAL))); - glVertex3fv((op + (6 * PD_V_SIZE + PD_V_POINT))); - /* eight */ - glNormal3fv((op + (7 * PD_V_SIZE + PD_V_NORMAL))); - glVertex3fv((op + (7 * PD_V_SIZE + PD_V_POINT))); - /* nine */ - glNormal3fv((op + (8 * PD_V_SIZE + PD_V_NORMAL))); - glVertex3fv((op + (8 * PD_V_SIZE + PD_V_POINT))); - /* ten */ - glNormal3fv((op + (9 * PD_V_SIZE + PD_V_NORMAL))); - glVertex3fv((op + (9 * PD_V_SIZE + PD_V_POINT))); - /* eleven */ - glNormal3fv((op + (10 * PD_V_SIZE + PD_V_NORMAL))); - glVertex3fv((op + (10 * PD_V_SIZE + PD_V_POINT))); - - glEnd(); - -} - -static void drawcolrtexmesh_10(float *op) -{ - glBegin(GL_TRIANGLE_STRIP); - /* one */ - glTexCoord2fv((op + PD_V_TEX)); - glColor3fv((op + PD_V_COLOR)); - glVertex3fv((op + PD_V_POINT)); - /* two */ - glTexCoord2fv((op + (PD_V_SIZE + PD_V_TEX))); - glColor3fv((op + (PD_V_SIZE + PD_V_COLOR))); - glVertex3fv((op + (PD_V_SIZE + PD_V_POINT))); - /* three */ - glTexCoord2fv((op + (2 * PD_V_SIZE + PD_V_TEX))); - glColor3fv((op + (2 * PD_V_SIZE + PD_V_COLOR))); - glVertex3fv((op + (2 * PD_V_SIZE + PD_V_POINT))); - /* four */ - glTexCoord2fv((op + (3 * PD_V_SIZE + PD_V_TEX))); - glColor3fv((op + (3 * PD_V_SIZE + PD_V_COLOR))); - glVertex3fv((op + (3 * PD_V_SIZE + PD_V_POINT))); - /* five */ - glTexCoord2fv((op + (4 * PD_V_SIZE + PD_V_TEX))); - glColor3fv((op + (4 * PD_V_SIZE + PD_V_COLOR))); - glVertex3fv((op + (4 * PD_V_SIZE + PD_V_POINT))); - /* six */ - glTexCoord2fv((op + (5 * PD_V_SIZE + PD_V_TEX))); - glColor3fv((op + (5 * PD_V_SIZE + PD_V_COLOR))); - glVertex3fv((op + (5 * PD_V_SIZE + PD_V_POINT))); - /* seven */ - glTexCoord2fv((op + (6 * PD_V_SIZE + PD_V_TEX))); - glColor3fv((op + (6 * PD_V_SIZE + PD_V_COLOR))); - glVertex3fv((op + (6 * PD_V_SIZE + PD_V_POINT))); - /* eight */ - glTexCoord2fv((op + (7 * PD_V_SIZE + PD_V_TEX))); - glColor3fv((op + (7 * PD_V_SIZE + PD_V_COLOR))); - glVertex3fv((op + (7 * PD_V_SIZE + PD_V_POINT))); - /* nine */ - glTexCoord2fv((op + (8 * PD_V_SIZE + PD_V_TEX))); - glColor3fv((op + (8 * PD_V_SIZE + PD_V_COLOR))); - glVertex3fv((op + (8 * PD_V_SIZE + PD_V_POINT))); - /* ten */ - glTexCoord2fv((op + (9 * PD_V_SIZE + PD_V_TEX))); - glColor3fv((op + (9 * PD_V_SIZE + PD_V_COLOR))); - glVertex3fv((op + (9 * PD_V_SIZE + PD_V_POINT))); - - glEnd(); -} - -static void drawclouds(float *op) -{ -#define SKY_STRIPS 24 - - /* Break into quad strips so cheap fog works better */ - if (0 == clouds) { - - GLfloat *vc0, *vc1, *vc2; - GLfloat *tc0, *tc1, *tc2; - GLfloat sky_s0, sky_s1, sky_t0, sky_t1; - GLfloat sky_x0, sky_x1, sky_y0, sky_y1, sky_z; - int ii, jj; - GLfloat s0, s1, t0, t1; - GLfloat x0, x1, y0, y1, z0; - - vc0 = op + PD_V_POINT; - vc1 = op + PD_V_POINT + PD_V_SIZE; - vc2 = op + PD_V_POINT + PD_V_SIZE * 2; - - tc0 = op + PD_V_TEX; - tc1 = op + PD_V_TEX + PD_V_SIZE; - tc2 = op + PD_V_TEX + PD_V_SIZE * 2; - - sky_s0 = tc0[0]; - sky_s1 = tc1[0]; - sky_t0 = tc0[1]; - sky_t1 = tc2[1]; - - sky_x0 = vc0[0]; - sky_x1 = vc1[0]; - sky_y0 = vc0[1]; - sky_y1 = vc2[1]; - sky_z = vc0[2]; - - clouds = glGenLists(1); - - glNewList(clouds, GL_COMPILE); - - s1 = (1.0f / SKY_STRIPS) * (sky_s1 - sky_s0); - t1 = (1.0f / SKY_STRIPS) * (sky_t1 - sky_t0); - x1 = (1.0f / SKY_STRIPS) * (sky_x1 - sky_x0); - y1 = (1.0f / SKY_STRIPS) * (sky_y1 - sky_y0); - - z0 = sky_z; - s0 = sky_s0; - x0 = sky_x0; - - for (ii = 0; ii < SKY_STRIPS; ii++, s0 += s1, x0 += x1) { - - t0 = sky_t0; - y0 = sky_y0; - - glBegin(GL_QUAD_STRIP); - - glTexCoord2f(s0, t0); - glVertex3f(x0, y0, z0); - - glTexCoord2f(s0 + s1, t0); - glVertex3f(x0 + x1, y0, z0); - - for (jj = 0; jj < SKY_STRIPS; jj++, t0 += t1, y0 += y1) { - - glTexCoord2f(s0 + s1, t0 + t1); - glVertex3f(x0 + x1, y0 + y1, z0); - - glTexCoord2f(s0, t0 + t1); - glVertex3f(x0, y0 + y1, z0); - } - - glEnd(); - - } - - glEndList(); - } - - glCallList(clouds); -} - -void putv3fdata(float *v, perfobj_vert_t *ptr) -{ - ptr->vert[0] = v[0]; - ptr->vert[1] = v[1]; - ptr->vert[2] = v[2]; -} - -void putc3fdata(float *c, perfobj_vert_t *ptr) -{ - ptr->color[0] = c[0]; - ptr->color[1] = c[1]; - ptr->color[2] = c[2]; -} - -void putn3fdata(float *n, perfobj_vert_t *ptr) -{ - ptr->normal[0] = n[0]; - ptr->normal[1] = n[1]; - ptr->normal[2] = n[2]; -} - -void putt2fdata(float *t, perfobj_vert_t *ptr) -{ - ptr->texture[0] = t[0]; - ptr->texture[1] = t[1]; -} - diff --git a/lib/glut-3.7.6/progs/demos/skyfly/random.c b/lib/glut-3.7.6/progs/demos/skyfly/random.c deleted file mode 100644 index 7c8ee43aa..000000000 --- a/lib/glut-3.7.6/progs/demos/skyfly/random.c +++ /dev/null @@ -1,376 +0,0 @@ -/* - * Copyright (c) 1983 Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms are permitted - * provided that the above copyright notice and this paragraph are - * duplicated in all such forms and that any documentation, - * advertising materials, and other materials related to such - * distribution and use acknowledge that the software was developed - * by the University of California, Berkeley. The name of the - * University may not be used to endorse or promote products derived - * from this software without specific prior written permission. - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifdef __STDC__ - #pragma weak initstate = _initstate - #pragma weak random = _random - #pragma weak setstate = _setstate - #pragma weak srandom = _srandom -#endif -/*#include "synonyms.h"*/ - -#if defined(LIBC_SCCS) && !defined(lint) -static char sccsid[] = "@(#)random.c 5.5 (Berkeley) 7/6/88"; -#endif /* LIBC_SCCS and not lint */ - -#include -#include /* for prototyping */ - -#undef random -long random(void); - -/* - * random.c: - * An improved random number generation package. In addition to the standard - * rand()/srand() like interface, this package also has a special state info - * interface. The initstate() routine is called with a seed, an array of - * bytes, and a count of how many bytes are being passed in; this array is then - * initialized to contain information for random number generation with that - * much state information. Good sizes for the amount of state information are - * 32, 64, 128, and 256 bytes. The state can be switched by calling the - * setstate() routine with the same array as was initiallized with initstate(). - * By default, the package runs with 128 bytes of state information and - * generates far better random numbers than a linear congruential generator. - * If the amount of state information is less than 32 bytes, a simple linear - * congruential R.N.G. is used. - * Internally, the state information is treated as an array of longs; the - * zeroeth element of the array is the type of R.N.G. being used (small - * integer); the remainder of the array is the state information for the - * R.N.G. Thus, 32 bytes of state information will give 7 longs worth of - * state information, which will allow a degree seven polynomial. (Note: the - * zeroeth word of state information also has some other information stored - * in it -- see setstate() for details). - * The random number generation technique is a linear feedback shift register - * approach, employing trinomials (since there are fewer terms to sum up that - * way). In this approach, the least significant bit of all the numbers in - * the state table will act as a linear feedback shift register, and will have - * period 2^deg - 1 (where deg is the degree of the polynomial being used, - * assuming that the polynomial is irreducible and primitive). The higher - * order bits will have longer periods, since their values are also influenced - * by pseudo-random carries out of the lower bits. The total period of the - * generator is approximately deg*(2**deg - 1); thus doubling the amount of - * state information has a vast influence on the period of the generator. - * Note: the deg*(2**deg - 1) is an approximation only good for large deg, - * when the period of the shift register is the dominant factor. With deg - * equal to seven, the period is actually much longer than the 7*(2**7 - 1) - * predicted by this formula. - */ - - - -/* - * For each of the currently supported random number generators, we have a - * break value on the amount of state information (you need at least this - * many bytes of state info to support this random number generator), a degree - * for the polynomial (actually a trinomial) that the R.N.G. is based on, and - * the separation between the two lower order coefficients of the trinomial. - */ - -#define TYPE_0 0 /* linear congruential */ -#define BREAK_0 8 -#define DEG_0 0 -#define SEP_0 0 - -#define TYPE_1 1 /* x**7 + x**3 + 1 */ -#define BREAK_1 32 -#define DEG_1 7 -#define SEP_1 3 - -#define TYPE_2 2 /* x**15 + x + 1 */ -#define BREAK_2 64 -#define DEG_2 15 -#define SEP_2 1 - -#define TYPE_3 3 /* x**31 + x**3 + 1 */ -#define BREAK_3 128 -#define DEG_3 31 -#define SEP_3 3 - -#define TYPE_4 4 /* x**63 + x + 1 */ -#define BREAK_4 256 -#define DEG_4 63 -#define SEP_4 1 - - -/* - * Array versions of the above information to make code run faster -- relies - * on fact that TYPE_i == i. - */ - -#define MAX_TYPES 5 /* max number of types above */ - -static const int degrees[ MAX_TYPES ] = { DEG_0, DEG_1, DEG_2, - DEG_3, DEG_4 }; - -static const int seps[ MAX_TYPES ] = { SEP_0, SEP_1, SEP_2, - SEP_3, SEP_4 }; - - - -/* - * Initially, everything is set up as if from : - * initstate( 1, &randtbl, 128 ); - * Note that this initialization takes advantage of the fact that srandom() - * advances the front and rear pointers 10*rand_deg times, and hence the - * rear pointer which starts at 0 will also end up at zero; thus the zeroeth - * element of the state information, which contains info about the current - * position of the rear pointer is just - * MAX_TYPES*(rptr - state) + TYPE_3 == TYPE_3. - */ - -static long randtbl[ DEG_3 + 1 ] = { TYPE_3, - 0x9a319039, 0x32d9c024, 0x9b663182, 0x5da1f342, - 0xde3b81e0, 0xdf0a6fb5, 0xf103bc02, 0x48f340fb, - 0x7449e56b, 0xbeb1dbb0, 0xab5c5918, 0x946554fd, - 0x8c2e680f, 0xeb3d799f, 0xb11ee0b7, 0x2d436b86, - 0xda672e2a, 0x1588ca88, 0xe369735d, 0x904f35f7, - 0xd7158fd6, 0x6fa6f051, 0x616e6b96, 0xac94efdc, - 0x36413f93, 0xc622c298, 0xf5a42ab8, 0x8a88d77b, - 0xf5ad9d0e, 0x8999220b, 0x27fb47b9 }; - -/* - * fptr and rptr are two pointers into the state info, a front and a rear - * pointer. These two pointers are always rand_sep places aparts, as they cycle - * cyclically through the state information. (Yes, this does mean we could get - * away with just one pointer, but the code for random() is more efficient this - * way). The pointers are left positioned as they would be from the call - * initstate( 1, randtbl, 128 ) - * (The position of the rear pointer, rptr, is really 0 (as explained above - * in the initialization of randtbl) because the state table pointer is set - * to point to randtbl[1] (as explained below). - */ - -static long *fptr = &randtbl[ SEP_3 + 1 ]; -static long *rptr = &randtbl[ 1 ]; - - - -/* - * The following things are the pointer to the state information table, - * the type of the current generator, the degree of the current polynomial - * being used, and the separation between the two pointers. - * Note that for efficiency of random(), we remember the first location of - * the state information, not the zeroeth. Hence it is valid to access - * state[-1], which is used to store the type of the R.N.G. - * Also, we remember the last location, since this is more efficient than - * indexing every time to find the address of the last element to see if - * the front and rear pointers have wrapped. - */ - -static long *state = &randtbl[ 1 ]; - -static int rand_type = TYPE_3; -static int rand_deg = DEG_3; -static int rand_sep = SEP_3; - -static long *end_ptr = &randtbl[ DEG_3 + 1 ]; - - - -/* - * srandom: - * Initialize the random number generator based on the given seed. If the - * type is the trivial no-state-information type, just remember the seed. - * Otherwise, initializes state[] based on the given "seed" via a linear - * congruential generator. Then, the pointers are set to known locations - * that are exactly rand_sep places apart. Lastly, it cycles the state - * information a given number of times to get rid of any initial dependencies - * introduced by the L.C.R.N.G. - * Note that the initialization of randtbl[] for default usage relies on - * values produced by this routine. - */ - -void -srandom( x ) - unsigned x; -{ - register int i; - - if( rand_type == TYPE_0 ) { - state[ 0 ] = (long) x; - } - else { - state[ 0 ] = (long) x; - for( i = 1; i < rand_deg; i++ ) { - state[i] = 1103515245*state[i - 1] + 12345; - } - fptr = &state[ rand_sep ]; - rptr = &state[ 0 ]; - for( i = 0; i < 10*rand_deg; i++ ) random(); - } -} - - - -/* - * initstate: - * Initialize the state information in the given array of n bytes for - * future random number generation. Based on the number of bytes we - * are given, and the break values for the different R.N.G.'s, we choose - * the best (largest) one we can and set things up for it. srandom() is - * then called to initialize the state information. - * Note that on return from srandom(), we set state[-1] to be the type - * multiplexed with the current value of the rear pointer; this is so - * successive calls to initstate() won't lose this information and will - * be able to restart with setstate(). - * Note: the first thing we do is save the current state, if any, just like - * setstate() so that it doesn't matter when initstate is called. - * Returns a pointer to the old state. - */ - -char * -initstate( seed, arg_state, n ) - - unsigned seed; /* seed for R. N. G. */ - char *arg_state; /* pointer to state array */ - size_t n; /* # bytes of state info */ -{ - register char *ostate = (char *)( &state[ -1 ] ); - - if( rand_type == TYPE_0 ) state[ -1 ] = rand_type; - else state[ -1 ] = MAX_TYPES*(rptr - state) + rand_type; - if( n < BREAK_1 ) { - if( n < BREAK_0 ) { - fprintf( stderr, "initstate: not enough state (%d bytes) with which to do jack; ignored.\n", n ); - return 0; - } - rand_type = TYPE_0; - rand_deg = DEG_0; - rand_sep = SEP_0; - } - else { - if( n < BREAK_2 ) { - rand_type = TYPE_1; - rand_deg = DEG_1; - rand_sep = SEP_1; - } - else { - if( n < BREAK_3 ) { - rand_type = TYPE_2; - rand_deg = DEG_2; - rand_sep = SEP_2; - } - else { - if( n < BREAK_4 ) { - rand_type = TYPE_3; - rand_deg = DEG_3; - rand_sep = SEP_3; - } - else { - rand_type = TYPE_4; - rand_deg = DEG_4; - rand_sep = SEP_4; - } - } - } - } - state = &( ( (long *)arg_state )[1] ); /* first location */ - end_ptr = &state[ rand_deg ]; /* must set end_ptr before srandom */ - srandom( seed ); - if( rand_type == TYPE_0 ) state[ -1 ] = rand_type; - else state[ -1 ] = MAX_TYPES*(rptr - state) + rand_type; - return( ostate ); -} - - - -/* - * setstate: - * Restore the state from the given state array. - * Note: it is important that we also remember the locations of the pointers - * in the current state information, and restore the locations of the pointers - * from the old state information. This is done by multiplexing the pointer - * location into the zeroeth word of the state information. - * Note that due to the order in which things are done, it is OK to call - * setstate() with the same state as the current state. - * Returns a pointer to the old state information. - */ - -char * -setstate( arg_state ) - - const char *arg_state; -{ - register long *new_state = (long *)arg_state; - register int type = (int)new_state[0]%MAX_TYPES; - register int rear = (int)new_state[0]/MAX_TYPES; - char *ostate = (char *)( &state[ -1 ] ); - - if( rand_type == TYPE_0 ) state[ -1 ] = rand_type; - else state[ -1 ] = MAX_TYPES*(rptr - state) + rand_type; - switch( type ) { - case TYPE_0: - case TYPE_1: - case TYPE_2: - case TYPE_3: - case TYPE_4: - rand_type = type; - rand_deg = degrees[ type ]; - rand_sep = seps[ type ]; - break; - - default: - fprintf( stderr, "setstate: state info has been munged; not changed.\n" ); - } - state = &new_state[ 1 ]; - if( rand_type != TYPE_0 ) { - rptr = &state[ rear ]; - fptr = &state[ (rear + rand_sep)%rand_deg ]; - } - end_ptr = &state[ rand_deg ]; /* set end_ptr too */ - return( ostate ); -} - - - -/* - * random: - * If we are using the trivial TYPE_0 R.N.G., just do the old linear - * congruential bit. Otherwise, we do our fancy trinomial stuff, which is the - * same in all ther other cases due to all the global variables that have been - * set up. The basic operation is to add the number at the rear pointer into - * the one at the front pointer. Then both pointers are advanced to the next - * location cyclically in the table. The value returned is the sum generated, - * reduced to 31 bits by throwing away the "least random" low bit. - * Note: the code takes advantage of the fact that both the front and - * rear pointers can't wrap on the same call by not testing the rear - * pointer if the front one has wrapped. - * Returns a 31-bit random number. - */ - -long -random(void) -{ - long i; - - if( rand_type == TYPE_0 ) { - i = state[0] = ( state[0]*1103515245 + 12345 )&0x7fffffff; - } - else { - *fptr += *rptr; - i = (*fptr >> 1)&0x7fffffff; /* chucking least random bit */ - if( ++fptr >= end_ptr ) { - fptr = state; - ++rptr; - } - else { - if( ++rptr >= end_ptr ) rptr = state; - } - } - return( i ); -} - diff --git a/lib/glut-3.7.6/progs/demos/skyfly/skyfly.c b/lib/glut-3.7.6/progs/demos/skyfly/skyfly.c deleted file mode 100644 index 8143cd3dd..000000000 --- a/lib/glut-3.7.6/progs/demos/skyfly/skyfly.c +++ /dev/null @@ -1,777 +0,0 @@ - -/* - * skyfly.c $Revision: 1.5 $ - */ - -#include -#include -#include -#include -#include -#include -#include -#include "skyfly.h" - -#if !defined(GL_VERSION_1_1) -#if defined(GL_EXT_texture_object) -#define glBindTexture(A,B) glBindTextureEXT(A,B) -#define glGenTextures(A,B) glGenTexturesEXT(A,B) -#define glDeleteTextures(A,B) glDeleteTexturesEXT(A,B) -#else -#define glBindTexture(A,B) -#define glGenTextures(A,B) -#define glDeleteTextures(A,B) -#endif -#if defined(GL_EXT_texture) -#define GL_RGB5 GL_RGB5_EXT -#else -#define GL_RGB5 GL_RGB -#endif -#endif - -#define ERR_WARNING 0x1 -#define ERR_FATAL 0x2 -#define ERR_SYSERR 0x4 - -#define AMALLOC(a, type, num, func) { \ - if((int)(a = (type*)malloc(sizeof(type)*(num))) <= 0) \ - err_msg(ERR_FATAL, func, "amalloc failed"); \ -} - -float ScaleZ = 2.3; /* Terrain height scale factor */ -int CellDim = 4; /* Terrain cell is CellDim X Celldim quads */ -int NumCells = 36; /* Terrain grid is NumCells X NumCells cells */ -int GridDim; /* Terrain grid is GridDim X GridDim quads */ -float XYScale; /* Conversion from world-space to grid index */ -float CellSize; /* World-space size of cell */ - -int Init_pos; /* if true, set initial position and kbd mode */ -float Init_x, Init_y, Init_z, Init_azimuth; -int rgbmode = GL_TRUE; - -/* Color index ramp info */ -int sky_base, terr_base; -int plane_colors[3]; - -/* - * Data that changes from frame to frame needs to be double-buffered because - * two processes may be working on two different frames at the same time. - */ -typedef struct buffered_data_struct { - - /* objects */ - perfobj_t paper_plane_pos_obj[NUM_PLANES]; - perfobj_t viewer_pos_obj; - - /* flags */ - unsigned int paper_plane_pos_flags[2]; - unsigned int viewer_pos_flags[2]; - - /* data */ - float paper_plane_position[NUM_PLANES][6]; - float viewer_position[4]; - -} buffered_data; - -/* - * This is the per-pipe data structure which holds pipe id, semaphores, - * and variable data buffers. Both gfxpipe and buffer structures live in - * shared memory so the sim can communicate with its forked children. - */ -typedef struct gfxpipe_data_struct { - int gfxpipenum; - buffered_data **buffers; - -} gfxpipe_data; - -static gfxpipe_data *gfxpipe; /* A processes' gfxpipe struct */ -static gfxpipe_data *gfxpipes[1]; /* Maximum of 1 graphics pipe */ -static int num_pipes; -float fog_params[4]; /* Fog and clear color */ -static float fog_density = 0.025*2; -float far_cull = 31.; /* Far clip distance from eye */ -int mipmap = 0; -static int texmode = GL_NEAREST; - -static int threecomp = 1; - -int dither = GL_TRUE, fog = GL_TRUE; -int Wxsize = 320, Wysize = 240; /* Default to 320x240 window */ - -/* - * All non-variable data like geometry is stored in shared memory. This way - * forked processes avoid duplicating data unnecessarily. - */ -shared_data *SharedData; - -/* //////////////////////////////////////////////////////////////////////// */ - -void sim_proc(void); -void sim_cyclops(void); -void sim_dualchannel(void); -void sim_singlechannel(void); -void cull_proc(void); -void draw_proc(void); -void sim_exit(void); -void init_misc(void); -void init_shmem(void); -void init_terrain(void); -void init_clouds(void); -void init_paper_planes(void); -void init_positions(void); -void init_gfxpipes(void); -void init_gl(int gfxpipenum); -void err_msg(int type, char* func, char* error); -void fly(perfobj_t *viewer_pos); -void fly_paper_planes(perfobj_t *paper_plane_pos); -float terrain_height(void); - -void init_skyfly(void) -{ - init_shmem(); - init_gfxpipes(); - init_clouds(); - init_terrain(); - init_paper_planes(); - init_positions(); - - gfxpipe = gfxpipes[0]; - init_gl(gfxpipe->gfxpipenum); -} - -/* - * This is a single-channel version of the dual-channel simulation - * described above. - */ -void sim_singlechannel(void) -{ - buffered_data **buffered = gfxpipes[0]->buffers; - - fly(&(buffered[0]->viewer_pos_obj)); - fly_paper_planes(buffered[0]->paper_plane_pos_obj); -} - -/*-------------------------------------- Cull ------------------------------*/ - -/* - * The cull and draw processes operate in a classic producer/consumer, - * write/read configuration using a ring buffer. The ring consists of pointers - * to perfobj's instead of actual geometric data. This is important because - * you want to minimize the amount of data 'shared' between two processes that - * run on different processors in order to reduce cache invalidations. - * enter_in_ring and get_from_ring spin on ring full and ring empty - * conditions respectively. - * Since cull/draw are shared group processes(sproc), the ring buffer is - * in the virtual address space of both processes and shared memory is not - * necessary. -*/ - -#define RING_SIZE 1000 /* Size of ring */ - -typedef struct render_ring_struct { - volatile unsigned int head, tail; - perfobj_t **ring; -} render_ring; - -render_ring ringbuffer; - -void enter_in_ring(perfobj_t *perfobj); -perfobj_t* get_from_ring(void); - -void cull_proc(void) -{ - - static struct cull { - perfobj_t **cells; - perfobj_t viewer_pos_obj[2]; - unsigned int viewer_pos_flags[4]; - float viewer_position[2][4]; - float fovx, side, farr, epsilon, plane_epsilon; - } cull; - - static int init = 0; - - if (!init) { - int x, y; - - cull.fovx = FOV *(float) Wxsize /(float) Wysize; - cull.side = far_cull / cosf(cull.fovx / 2.); - cull.farr = 2.* cull.side * sinf(cull.fovx / 2.); - cull.epsilon = sqrtf(2.) * CellSize / 2.; - cull.plane_epsilon = .5; - - cull.cells = (perfobj_t **) malloc(NumCells * NumCells * sizeof(perfobj_t *)); - for (x = 0; x < NumCells; x++) - for (y = 0; y < NumCells; y++) - cull.cells[x * NumCells + y] = - &(SharedData->terrain_cells[x * NumCells + y]); - - ringbuffer.ring = malloc(RING_SIZE * sizeof(perfobj_t *)); - ringbuffer.head = ringbuffer.tail = 0; - - cull.viewer_pos_obj[0].flags = cull.viewer_pos_flags; - cull.viewer_pos_obj[0].vdata = cull.viewer_position[0]; - cull.viewer_pos_obj[1].flags = cull.viewer_pos_flags; - cull.viewer_pos_obj[1].vdata = cull.viewer_position[1]; - - *(cull.viewer_pos_flags) = PD_VIEWER_POS; - *(cull.viewer_pos_flags + 1) = PD_END; - init = 1; - } - - { - float *viewer; - float vX, vY, vazimuth, px, py; - float left_area, right_area; - float left_dx, left_dy, right_dx, right_dy; - float ax, ay, bx, by, cx, cy; - float minx, maxx, miny, maxy; - int i, buffer = 0; - int x, y, x0, y0, x1, y1; - perfobj_t *viewer_pos, *paper_plane_pos; - buffered_data *buffered; - perfobj_t *terrain_texture = &(SharedData->terrain_texture_obj); - perfobj_t *paper_plane = &(SharedData->paper_plane_obj); - perfobj_t *paper_plane_start = &(SharedData->paper_plane_start_obj); - perfobj_t *paper_plane_end = &(SharedData->paper_plane_end_obj); - perfobj_t *clouds_texture = &(SharedData->clouds_texture_obj); - perfobj_t *clouds = &(SharedData->clouds_obj); - - buffered = gfxpipe->buffers[buffer]; - - viewer_pos = &(buffered->viewer_pos_obj); - paper_plane_pos = buffered->paper_plane_pos_obj; - - vX = *((float *) viewer_pos->vdata + 0); - vY = *((float *) viewer_pos->vdata + 1); - vazimuth = *((float *) viewer_pos->vdata + 3); - - viewer = cull.viewer_position[buffer]; - - viewer[0] = vX; - viewer[1] = vY; - viewer[2] = *((float *) viewer_pos->vdata + 2); - viewer[3] = vazimuth; - - /* - * Begin cull to viewing frustrum - */ - ax = (vX - sinf(-vazimuth + cull.fovx *.5) * cull.side); - ay = (vY + cosf(-vazimuth + cull.fovx *.5) * cull.side); - bx = vX; - by = vY; - cx = (vX + sinf(vazimuth + cull.fovx *.5) * cull.side); - cy = (vY + cosf(vazimuth + cull.fovx *.5) * cull.side); - - minx = MIN(MIN(ax, bx), cx); - miny = MIN(MIN(ay, by), cy); - maxx = MAX(MAX(ax, bx), cx); - maxy = MAX(MAX(ay, by), cy); - - x0 = MAX((int) (minx / CellSize), 0); - x1 = MIN((int) (maxx / CellSize) + 1, NumCells); - y0 = MAX((int) (miny / CellSize), 0); - y1 = MIN((int) (maxy / CellSize) + 1, NumCells); - - left_dx = ax - bx; - left_dy = ay - by; - right_dx = cx - bx; - right_dy = cy - by; - - enter_in_ring(&cull.viewer_pos_obj[buffer]); - - if (viewer[2] -cull.epsilon * cull.side)) { - enter_in_ring(cull.cells[x * NumCells + y]); - } - } - } - - enter_in_ring(paper_plane_start); - /* - * Add visible planes to ring buffer - */ - for (i = 0; i < NUM_PLANES; i++) { - - px = *((float *) paper_plane_pos[i].vdata + 0); - py = *((float *) paper_plane_pos[i].vdata + 1); - left_area = left_dx * (py - by) - left_dy * (px - bx); - right_area = right_dx * (py - by) - right_dy * (px - bx); - - if (left_area < cull.plane_epsilon * cull.side && right_area > -cull.plane_epsilon * cull.side) { - enter_in_ring(&paper_plane_pos[i]); - enter_in_ring(paper_plane); - } - } - - enter_in_ring(paper_plane_end); - - if (viewer[2]>SKY_HIGH) { - /* draw clouds after everything else */ - enter_in_ring(clouds_texture); - enter_in_ring(clouds); - } - - enter_in_ring((perfobj_t *) 0); /* 0 indicates end of frame */ - - buffer = !buffer; - } -} - -void enter_in_ring(perfobj_t *perfobj) -{ - while (ringbuffer.head == RING_SIZE+ringbuffer.tail-1) {} - ringbuffer.ring[ringbuffer.head % RING_SIZE] = perfobj; - ringbuffer.head++; -} - -perfobj_t* get_from_ring(void) -{ - static perfobj_t *pobj; - - while(ringbuffer.tail == ringbuffer.head) {} - pobj = ringbuffer.ring[ringbuffer.tail % RING_SIZE]; - ringbuffer.tail++; - return pobj; -} - -/*-------------------------------------- Draw ------------------------------*/ - -void draw_proc(void) -{ - perfobj_t *too_draw; - - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - - while ((too_draw = get_from_ring())) { - drawperfobj(too_draw); - } -} - - -/*------------------------------- Init -----------------------------------*/ - -void init_texture_and_lighting(void); -void init_buffered_data(buffered_data *buffered); - -void init_misc(void) -{ - float density; - - threecomp = rgbmode; - - /* - * Compute fog and clear color to be linear interpolation between blue - * and white. - */ - density = 1.- expf(-5.5 * fog_density * fog_density * - far_cull * far_cull); - density = MAX(MIN(density, 1.), 0.); - - fog_params[0] = .23 + density *.57; - fog_params[1] = .35 + density *.45; - fog_params[2] = .78 + density *.22; - fog_params[3] = 1.0f; -} - -void init_shmem(void) -{ - int i; - unsigned int *flagsptr; - perfobj_vert_t *vertsptr; - int nflags, nverts; - - AMALLOC(SharedData, shared_data, 1, "init_shmem"); - AMALLOC(SharedData->terrain_cells, perfobj_t, - NumCells * NumCells, "init_shmem"); - AMALLOC(SharedData->terrain_cell_flags, unsigned int *, - NumCells * NumCells, "init_shmem"); - AMALLOC(SharedData->terrain_cell_verts, perfobj_vert_t *, - NumCells * NumCells, "init_shmem"); - - /* - * Allocate the flags and vertices of all terrain cells in 2 big chunks - * to improve data locality and consequently, cache hits - */ - nflags = 2 * CellDim + 1; - AMALLOC(flagsptr, unsigned int, nflags * NumCells * NumCells, "init_shmem"); - nverts = (CellDim + 1) * 2 * CellDim; - AMALLOC(vertsptr, perfobj_vert_t, nverts * NumCells * NumCells, "init_shmem"); - - for (i = 0; i < NumCells * NumCells; i++) { - SharedData->terrain_cell_flags[i] = flagsptr; - flagsptr += nflags; - SharedData->terrain_cell_verts[i] = vertsptr; - vertsptr += nverts; - } -} - -/* - * Initialize gfxpipe data structures. There is one set of semaphores - * per pipe. - */ -void init_gfxpipes(void) -{ - int i, j; - - num_pipes = 1; - - for (i = 0; i < num_pipes; i++) { - - AMALLOC(gfxpipes[i], gfxpipe_data, 1, "initgfxpipes"); - AMALLOC(gfxpipes[i]->buffers, buffered_data *, NBUFFERS, - "init_gfxpipes"); - gfxpipes[i]->gfxpipenum = i; - } - - for (j = 0; j < NBUFFERS; j++) { - AMALLOC(gfxpipes[0]->buffers[j], buffered_data, 1, - "init_gfxpipes"); - init_buffered_data(gfxpipes[0]->buffers[j]); - } -} - -void init_buffered_data(buffered_data *buffered) -{ - int i; - perfobj_t *pobj; - - pobj = &(buffered->viewer_pos_obj); - pobj->flags = buffered->viewer_pos_flags; - pobj->vdata = buffered->viewer_position; - - *(buffered->viewer_pos_flags) = PD_VIEWER_POS; - *(buffered->viewer_pos_flags + 1) = PD_END; - - for (i = 0; i < NUM_PLANES; i++) { - pobj = &(buffered->paper_plane_pos_obj[i]); - pobj->flags = buffered->paper_plane_pos_flags; - pobj->vdata = buffered->paper_plane_position[i]; - } - *(buffered->paper_plane_pos_flags) = PD_PAPER_PLANE_POS; - *(buffered->paper_plane_pos_flags + 1) = PD_END; -} - -/* ARGSUSED */ -void init_gl(int gfxpipenum) -{ - glDrawBuffer(GL_BACK); - glClear(GL_COLOR_BUFFER_BIT); - if (!rgbmode) - glIndexi(0); - - set_fog(fog); - - glEnable(GL_CULL_FACE); - glEnable(GL_DEPTH_TEST); - - set_dither(dither); - - glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST ); - - init_texture_and_lighting(); - - glMatrixMode(GL_PROJECTION); - gluPerspective(FOV * RAD_TO_DEG, (float)Wxsize/(float)Wysize, - .1, far_cull *.95); - glMatrixMode(GL_MODELVIEW); - glHint(GL_FOG_HINT, GL_FASTEST); - glFogi(GL_FOG_MODE, GL_EXP2); - glFogf(GL_FOG_DENSITY, fog_density); - - if (rgbmode) { - glFogfv(GL_FOG_COLOR, fog_params); - if (fog && fog_density > 0) - glEnable(GL_FOG); - } else if (FOG_LEVELS > 1) { - glFogi(GL_FOG_INDEX, FOG_LEVELS-1); - if (fog) - glEnable(GL_FOG); - } -} - -unsigned char* read_bwimage(char *name, int *w, int *h); - -void init_texture_and_lighting(void) -{ - - unsigned char *bwimage256, *bwimage128; - int w, h; - - if(!(bwimage256 = (unsigned char*) read_bwimage("terrain.bw", &w, &h))) - if(!(bwimage256 = (unsigned char *) - read_bwimage("/usr/demos/data/textures/terrain.bw", &w, &h))) - err_msg(ERR_FATAL, "init_texture_and_lighting()", - "Can't open terrain.bw"); - - if(w != 256 || h != 256) - err_msg(ERR_FATAL, "init_texture_and_lighting()", - "terrain.bw must be 256x256"); - - if (!(bwimage128 = (unsigned char *) read_bwimage("clouds.bw", &w, &h))) - if (!(bwimage128 = (unsigned char *) - read_bwimage("/usr/demos/data/textures/clouds.bw", &w, &h))) - err_msg(ERR_FATAL, "init_misc()", "Can't open clouds.bw"); - - if (w != 128 || h != 128) - err_msg(ERR_FATAL, "init_misc()", "clouds.bw must be 128x128"); - - if (mipmap) - texmode = GL_LINEAR_MIPMAP_LINEAR; - else - texmode = GL_NEAREST; - - if (!threecomp) { - /* - * 1 and 2-component textures offer the highest performance on SkyWriter - * so they are the most recommended. - */ - glBindTexture(GL_TEXTURE_2D, 1); - if (!mipmap) - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, texmode); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, texmode); - if (mipmap) - gluBuild2DMipmaps(GL_TEXTURE_2D, /*0,*/ 1, 256, 256, /*0,*/ GL_LUMINANCE, GL_UNSIGNED_BYTE, bwimage256); - else if (rgbmode) - glTexImage2D(GL_TEXTURE_2D, 0, 1, 256, 256, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, bwimage256); - else { -#define TXSIZE 128 - GLubyte buf[TXSIZE*TXSIZE]; - int ii; - gluScaleImage(GL_LUMINANCE, 256, 256, GL_UNSIGNED_BYTE, bwimage256, - TXSIZE, TXSIZE, GL_UNSIGNED_BYTE, buf); - for (ii = 0; ii < TXSIZE*TXSIZE; ii++) { - buf[ii] = terr_base + - FOG_LEVELS * (buf[ii] >> (8-TERR_BITS)); - } -#ifdef GL_COLOR_INDEX8_EXT /* Requires SGI_index_texture and EXT_paletted_texture */ - glTexImage2D(GL_TEXTURE_2D, 0, GL_COLOR_INDEX8_EXT, TXSIZE, TXSIZE, - 0, GL_COLOR_INDEX, GL_UNSIGNED_BYTE, buf); -#endif -#undef TXSIZE - } - - glBindTexture(GL_TEXTURE_2D, 2); - if (!mipmap) - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, texmode); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, texmode); - if (mipmap) - gluBuild2DMipmaps(GL_TEXTURE_2D, /*0,*/ 1, 128, 128, /*0,*/ GL_LUMINANCE, GL_UNSIGNED_BYTE, bwimage128); - else if (rgbmode) - glTexImage2D(GL_TEXTURE_2D, 0, 1, 128, 128, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, bwimage128); - else { -#define TXSIZE 64 - GLubyte buf[TXSIZE*TXSIZE]; - int ii; - gluScaleImage(GL_LUMINANCE, 128, 128, GL_UNSIGNED_BYTE, bwimage128, - TXSIZE, TXSIZE, GL_UNSIGNED_BYTE, buf); - for (ii = 0; ii < TXSIZE*TXSIZE; ii++) { - buf[ii] = sky_base + - FOG_LEVELS * (buf[ii] >> (8-SKY_BITS)); - } -#ifdef GL_COLOR_INDEX8_EXT /* Requires SGI_index_texture and EXT_paletted_texture */ - glTexImage2D(GL_TEXTURE_2D, 0, GL_COLOR_INDEX8_EXT, TXSIZE, TXSIZE, - 0, GL_COLOR_INDEX, GL_UNSIGNED_BYTE, buf); -#endif -#undef TXSIZE - } - } else { - float r0, r1, g0, g1, b0, b1; - int i; - unsigned char *t256 = (unsigned char *)malloc(256*256*3); - - /* terrain */ - r0 = 0.40f; r1 = 0.30f; - g0 = 0.30f; g1 = 0.70f; - b0 = 0.15f; b1 = 0.10f; - - for(i = 0; i < 256*256; i++) { - float t = bwimage256[i] / 255.0f; - t256[3*i+0] = (unsigned char) (255.0f * (r0 + t*t * (r1-r0))); - t256[3*i+1] = (unsigned char) (255.0f * (g0 + t * (g1-g0))); - t256[3*i+2] = (unsigned char) (255.0f * (b0 + t*t * (b1-b0))); - } - glBindTexture(GL_TEXTURE_2D, 1); - if (!mipmap) - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, texmode); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, texmode); - if (mipmap) - gluBuild2DMipmaps(GL_TEXTURE_2D, /*0,*/ 3, 256, 256, /*0,*/ GL_RGB, GL_UNSIGNED_BYTE, t256); - else - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB5, 256, 256, 0, GL_RGB, GL_UNSIGNED_BYTE, t256); - - - /* sky without fog */ - r0 = 0.23; r1 = 1.0f; - g0 = 0.35; g1 = 1.0f; - b0 = 0.78; b1 = 1.0f; - for(i = 0; i < 128*128; i++) { - float t = bwimage128[i] / 255.0f; - t256[3*i+0] = (unsigned char) (255.0f * (r0 + t * (r1-r0))); - t256[3*i+1] = (unsigned char) (255.0f * (g0 + t * (g1-g0))); - t256[3*i+2] = (unsigned char) (255.0f * (b0 + t * (b1-b0))); - } - glBindTexture(GL_TEXTURE_2D, 2); - if (!mipmap) - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, texmode); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, texmode); - if (mipmap) - gluBuild2DMipmaps(GL_TEXTURE_2D, /*0,*/ 3, 128, 128, /*0,*/ GL_RGB, GL_UNSIGNED_BYTE, t256); - else - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB5, 128, 128, 0, GL_RGB, GL_UNSIGNED_BYTE, t256); - - /* sky with fog */ - r0 = fog_params[0]; r1 = 1.0f; - g0 = fog_params[1]; g1 = 1.0f; - b0 = fog_params[2]; b1 = 1.0f; - for(i = 0; i < 128*128; i++) { - float t = bwimage128[i] / 255.0f; - t256[3*i+0] = (unsigned char) (255.0f * (r0 + t * (r1-r0))); - t256[3*i+1] = (unsigned char) (255.0f * (g0 + t * (g1-g0))); - t256[3*i+2] = (unsigned char) (255.0f * (b0 + t * (b1-b0))); - } - glBindTexture(GL_TEXTURE_2D, 3); - if (!mipmap) - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, texmode); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, texmode); - if (mipmap) - gluBuild2DMipmaps(GL_TEXTURE_2D, /*0,*/ 3, 128, 128, /*0,*/ GL_RGB, GL_UNSIGNED_BYTE, t256); - else - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB5, 128, 128, 0, GL_RGB, GL_UNSIGNED_BYTE, t256); - free(t256); - } - - free(bwimage256); - free(bwimage128); - - /* both textures use BLEND environment */ - if (rgbmode) { - if (threecomp) { - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - } - else { - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_BLEND); - } - } else if (FOG_LEVELS > 1) { - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_ADD); - } else { - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); - } - - { - GLfloat position[] = { LX, LY, LZ, 0., }; - GLfloat one[] = { 1.0, 1.0, 1.0, 1.0 }; - - if (rgbmode) - glLightfv(GL_LIGHT0, GL_AMBIENT, one); - glLightfv(GL_LIGHT0, GL_POSITION, position); - glLightfv(GL_LIGHT0, GL_DIFFUSE, one); - glLightfv(GL_LIGHT0, GL_SPECULAR, one); - } - - if (rgbmode) { - GLfloat ambient[] = { 0.3, 0.3, 0.1, 0.0 }; - GLfloat diffuse[] = { 0.7, 0.7, 0.1, 0.0 }; - GLfloat zero[] = { 0.0, 0.0, 0.0, 0.0 }; - - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, ambient); - glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diffuse); - glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, zero); - } else { - glMaterialiv(GL_FRONT_AND_BACK, GL_COLOR_INDEXES, plane_colors); - } - - { - glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, 0); - glEnable(GL_LIGHT0); - } -} - -void lightpos(void) -{ - GLfloat position[] = { LX, LY, LZ, 0., }; - glLightfv(GL_LIGHT0, GL_POSITION, position); -} - -void texenv(int env) -{ - GLfloat colors[3][4] = { { 0., 0., 0., 0., }, - { .1, .1, .1, 0., }, /* terrain */ - { 1., 1., 1., 0., }, }; /* sky */ - glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, colors[env]); -} - -/*-------------------------------- Utility ---------------------------------*/ - -void err_msg(int type, char* func, char* error) -{ - char msg[512]; - - if (type & ERR_WARNING) { - fprintf(stderr, "Warning: "); - sprintf(msg, "Warning: %s", error); - } - else if (type & ERR_FATAL) { - fprintf(stderr, "FATAL: "); - sprintf(msg, "FATAL: %s", error); - } - - fprintf(stderr, "%s: %s\n", func, error); - if (type & ERR_SYSERR) { - perror("perror() = "); - fprintf(stderr, "errno = %d\n", errno); - } - fflush(stderr); - - if (type & ERR_FATAL) { - exit(-1); - } -} - -void set_fog(int enable) -{ - fog = enable; - if (fog) { - glEnable(GL_FOG); - if (rgbmode) - glClearColor(fog_params[0], fog_params[1], fog_params[2], 1.0); - else { - glClearIndex(sky_base + FOG_LEVELS - 1); - } - } else { - glDisable(GL_FOG); - if (rgbmode) - glClearColor(0.23, 0.35, 0.78, 1.0); - else { - glClearIndex(sky_base); - } - } -} - -void set_dither(int enable) -{ - dither = enable; - if (dither) { - glEnable(GL_DITHER); - } else { - glDisable(GL_DITHER); - } -} - diff --git a/lib/glut-3.7.6/progs/demos/skyfly/skyfly.dsp b/lib/glut-3.7.6/progs/demos/skyfly/skyfly.dsp deleted file mode 100644 index 9e0e07b3f..000000000 --- a/lib/glut-3.7.6/progs/demos/skyfly/skyfly.dsp +++ /dev/null @@ -1,116 +0,0 @@ -# Microsoft Developer Studio Project File - Name="skyfly" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=skyfly - 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 "skyfly.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 "skyfly.mak" CFG="skyfly - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "skyfly - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "skyfly - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "skyfly - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "skyfly - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "skyfly - Win32 Release" -# Name "skyfly - Win32 Debug" -# Begin Source File - -SOURCE=.\database.c -# End Source File -# Begin Source File - -SOURCE=.\fly.c -# End Source File -# Begin Source File - -SOURCE=.\gm_main.c -# End Source File -# Begin Source File - -SOURCE=.\image.c -# End Source File -# Begin Source File - -SOURCE=.\perfdraw.c -# End Source File -# Begin Source File - -SOURCE=.\random.c -# End Source File -# Begin Source File - -SOURCE=.\skyfly.c -# End Source File -# Begin Source File - -SOURCE=.\skyfly.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/demos/skyfly/skyfly.h b/lib/glut-3.7.6/progs/demos/skyfly/skyfly.h deleted file mode 100644 index 9ccc41341..000000000 --- a/lib/glut-3.7.6/progs/demos/skyfly/skyfly.h +++ /dev/null @@ -1,206 +0,0 @@ -/* - * skyfly.h $Revision: 1.3 $ -*/ - -#ifdef _WIN32 -#pragma warning(disable : 4244) -#endif - -/* buttons */ -#define ESCKEY 0 -#define RKEY 1 -#define PERIODKEY 2 -#define SPACEKEY 3 - -#define DOWNARROWKEY 4 -#define UPARROWKEY 5 -#define LEFTARROWKEY 6 -#define RIGHTARROWKEY 7 - -#define PAGEDOWNKEY 8 -#define PAGEUPKEY 9 - -#define LEFTMOUSE 10 -#define MIDDLEMOUSE 11 -#define RIGHTMOUSE 12 -#define BUTCOUNT 13 - -/* valuators */ -#define MOUSEX 0 -#define MOUSEY 1 -#define VALCOUNT 2 - -#ifdef _WIN32 -#undef random -extern long random(void); -#else -/* random is defined in stdlib.h, return type varies depending on headers*/ -#endif - -#undef MIN -#undef MAX -#define MIN(a,b) (((a)<(b)) ? (a) : (b)) -#define MAX(a,b) (((a)>(b)) ? (a) : (b)) -#define RAD_TO_DEG (180/M_PI) -#define IRND(x) ((int)((float)(x) * ((float)random()/(float)0x7fffffff))) -#define M_PI 3.14159265358979323846 - -#define NUM_PLANES 20 -#define GRID_RANGE 200 /* 200 kilometers */ -#define FOV (M_PI / 4.) /* 45 degrees */ - -/* - * Light vector -*/ -#define LX 0.0 -#define LY 0.707 -#define LZ 0.707 - -#define FLOATS_PER_VERT_PAIR 16 - -#define NBUFFERS 2 - -#define SKY_CYCLOPS 0 -#define SKY_DUALCHANNEL 1 -#define SKY_SINGLECHANNEL 2 - -/* - * perfobj flags -*/ -#define PD_TEXTURE_BIND 0 -#define PD_DRAW_PAPER_PLANE 1 -#define PD_DRAW_TERRAIN_CELL 2 -#define PD_PAPER_PLANE_MODE 3 -#define PD_PAPER_PLANE_POS 4 -#define PD_VIEWER_POS 5 -#define PD_DRAW_CLOUDS 6 -#define PD_END 0x3fff - -#define PLANES_START 0 -#define PLANES_SECOND_PASS 1 -#define PLANES_END 2 - -/* - * Offsets to data in perfobj_vert_t -*/ -#define PD_V_POINT 0 -#define PD_V_CPACK 3 -#define PD_V_NORMAL 4 -#define PD_V_COLOR 8 -#define PD_V_TEX 12 -#define PD_V_SIZE 16 - -/* - * Padding ensures that vertex data remains quad-word aligned within struct -*/ -typedef struct perfobj_vert_t { - float vert[3]; - unsigned long vpad; - - float normal[3]; - unsigned long npad; - - float color[3]; - unsigned long cpad; - - float texture[2]; - unsigned long tpad[2]; -} perfobj_vert_t; - -/* - * A perfobj is a structure designed for fast rendering. Flags are separated - * from vertex data to improve cacheing behavior. Typically the flags are - * tokens which determine the drawing operation to perform and the vdata are - * perfobj_vert_t's or other floating point data. -*/ -typedef struct perfobj_t { - unsigned int *flags; - float *vdata; -} perfobj_t; - -extern void drawperfobj( perfobj_t *perfptr ); - -extern void putv3fdata( float *source, perfobj_vert_t *vertptr ); -extern void putn3fdata( float *source, perfobj_vert_t *vertptr ); -extern void putc3fdata( float *source, perfobj_vert_t *vertptr ); -extern void putt2fdata( float *source, perfobj_vert_t *vertptr ); - -/* - * This is the structure which contains the database. It is amalloc'ed - * in shared memory so that forked processes can access it. Notice how - * the flags and vertex data are separated to improve cacheing behavior. -*/ -typedef struct shared_data_struct { - /* objects */ - perfobj_t paper_plane_obj; - perfobj_t paper_plane_start_obj; - perfobj_t paper_plane_2ndpass_obj; - perfobj_t paper_plane_end_obj; - perfobj_t terrain_texture_obj; - perfobj_t *terrain_cells; - perfobj_t clouds_texture_obj; - perfobj_t clouds_obj; - - /* flags */ - unsigned int paper_plane_flags[2]; - unsigned int paper_plane_start_flags[3]; - unsigned int paper_plane_2ndpass_flags[3]; - unsigned int paper_plane_end_flags[3]; - unsigned int terrain_texture_flags[3]; - unsigned int **terrain_cell_flags; - unsigned int clouds_texture_flags[3]; - unsigned int clouds_flags[2]; - - /* data */ - perfobj_vert_t paper_plane_verts[22]; - perfobj_vert_t **terrain_cell_verts; - perfobj_vert_t clouds_verts[4]; - -} shared_data; - -/* - * See skyfly.c for comments -*/ -extern shared_data *SharedData; -extern float ScaleZ; -extern int CellDim; -extern int NumCells; -extern int GridDim; -extern float FarCull; -extern float XYScale, CellSize; -extern int Wxsize, Wysize; - -extern int Init_pos; -extern float Init_x, Init_y, Init_z, Init_azimuth; - -extern float far_cull; -extern int rgbmode; -extern float fog_params[4]; -extern int dither, fog; -extern int mipmap; - -/* Color index ramp info */ -extern int sky_base, terr_base; -extern int plane_colors[3]; - -#define SKY_BITS 4 -#define SKY_COLORS (1 << SKY_BITS) - -#define TERR_BITS 4 -#define TERR_COLORS (1 << TERR_BITS) - -#define PLANE_BITS 4 -#define PLANE_COLORS (1 << PLANE_BITS) - -#define FOG_LEVELS 6 - -#define SKY_HIGH 5.0f - -extern void set_fog(int enable); -extern void set_dither(int enable); - -#define cosf(a) cos((float)a) -#define sinf(a) sin((float)a) -#define sqrtf(a) sqrt((float)a) -#define expf(a) exp((float)a) - diff --git a/lib/glut-3.7.6/progs/demos/skyfly/terrain.bw b/lib/glut-3.7.6/progs/demos/skyfly/terrain.bw deleted file mode 100644 index 64de86f66..000000000 --- a/lib/glut-3.7.6/progs/demos/skyfly/terrain.bw +++ /dev/null @@ -1,42 +0,0 @@ -FFt{i²´·žéæÌËȵ°lôŸ}$#t¼èŠÇÂq]ñgp½;1V{úC¸¢¡·> 9.69?_dIR4.177/75+400/*/&*($51/-Pßô\ð#&((.8[Q)'13G\HCAD;K[O#g÷Ö‚æéZ¹„ùr{v]Fº¶_*-+2=B5JYY`AAKF[ip{xÜë@CTUv°éfxÈú@q{äjôž½Ûìoyqså|ìüéçànS:4A6:Ÿ«ŽžÿœœÞ¨ÞŸ±ôºú{þºS 5LÞìl(^èâ{tjâr+.&ùêmŸwbóüèåÝÐø÷ýÊǹüa8xP5~XêñvéëÁ­†°àÝýÍ ÷F_]o‰†Þ¾øe¹Ãþ蛾èqxYW3é‡Æ…‹â+6>3(HZX<=JWQN:)<9+7512+.)((%%&/3%.+,2+%!'28, Pü}e5%-)'.49K\NOBG<6HM-1¹Žž|u›tŸäãµþåhFF=61>:]oLâÜ`;EIJPmî°²¼¶j½ÝsóýÜ[ÿ‹¯êtâxbã²|iìþ|oZMKkfO_aGnxb.çùÈ۴öü»›ß÷ÿŸÜ²îê­ï[BF_P#ZïXX{CFD$74f¥Àbl´Ýwï²u`mv®·åÛDz¿Â¹²Zxeâzy÷’vP÷¼ç¯ùÿee©tI|ãÒŠù®Ïy<¹íPkdigvàì½L¶Žyà¡Ô^0_scUoü·t6!372=K;'&0,(?)$-+-66/7ŸœAð+.'+/CVja7;335>0;..+-/,-344- --ܦR!(!%+,7Ec^=C;>V[I1Súœyt¹½€Âl!4XXB68;9BOdxŸ{YYVJhçéêvçûú­}âøv±”©]ifŸåoèh}ÿä}}óž§îO>61%:-N\H7>îæ­Û Ïæì۞µø­ûœÝûÝôñd:Nž¼±;JßÞãK446Npxº´²jÛÝ]&^Èå[Päñ¦Ð·««pzæñlnãuwµøåžüôø÷ܹt_åœÔó q›i±úóÑÊÌ€°°}åpâïšÌ†Ïûë[1uÞg`àÁÙCGzcEmp#!+äÜQ*&õ%*'-45?LUC;JQR8@fd¹Ç»ñbâÖÝ/8E19<>BINmvVhèåhTRcëý¦¼›¼xS»ífÅ…ëëma­Æàpsom±Ÿãês{¦¼ÈÜqFNVYQT^3s·µê¿¬¿þëôø´ºôüäûžœœœtwhäæ›BrŸs9+30?bsë®Ýq`óåKð4nq^u½ÛºžÖæbŸ§¾Èåe½þÞ†äsñ÷ËÕê¼ùxb’¡ºÊ¼çÝ_¦ÕÉ ËÏåó®yrµÓÿƒª²þvåÿëž­ëTêâìSFéíK;A=G3JE;G=;?32',400+3ObmCSŸäuI%*$!3CKOLKD?>ML6Hꎑ«êN|©tGUC:B32>;O`àu[~ïzfcf~¦¸ž›©ÜµßGj÷w»ŒôèåkžÇ²žãWzþêêàm﮹¼ž}XS__NZçu|®¿­«Ñ¨µ¶¼¼©©øÿ½²µ¼ßêQvp=íÛ2 -]ôv2)01:G~íìçàRHtQð$@à|S{¹ºÈíä®îóêè꧟êëœÕ€¨œçøÛü¦œçq÷«Ð‚¼¬Þ«ÎÄ£‘əчجÁüoîùÝé®»Ž¿ûô_äpg?izh^pU>J0+<.26A70MQÜéýæF*YAõNT õ$+9E<7>=LkTa°¾åJíøf_jPIZcþ¹mQNžìèãîyv|yèÛ{lãóty¹ïúPqúퟲžúݸÈꈻntîž¼çYìÁ›û›ïûêtL<]C*óÃÀÕÉÙÅÉϸµ¦©´µ°_98©Y EãyhV930`±î_2[udlM"".1 9kmRdº‹ˆïÜy®íëýÖØΉljÎÇÍÐÊ¡•Ì ¤•Î¢ˆ‹”öÚ——––ö£‰üÈ°xiwô‡¨°¼Ý©ñk_éoGacZlwú©ŸøªªêH37DGRfeJE>4WGVM_lë­X0`^3!Lûz3 #::19C<[_@xôtyÇë9MRWhY\îînã{þôÝêèvgyâï»åSäë}jé¾úøçkxŸ›¬¯ïÞ¹ûدâvâèÛ·ýú}°žÞÜô||±l-&"ZèôÕ… ‚Ճ׾¸æ´´æ°åg#Z)J°çàsE42FXhw[7R`hN!E415( xr\©•”Ýû¾Ç¥Ç¡š‰Œš¬’‰‰™ÍɌΠ‹¤¢ö¤ÌŒ””“ö”ö–Ä£•tåèVTä°Ûº´žœµú²|?aâsV3f´„¬¿§µýi<OûœcBsàâ}nüés8(+4[ºßÅ‘òÎÐΗ¡ŒÎ¢Š‚‹†¥ ÙΕ׈¢•¢Ú“£ÎÊš„‚öòÚÚ”Ú“–ö‚zéÞhnÜèsäzé°åþí™imzEEmúÒõ´»µµc@k`]Xk{y{àóXWNQI@C>897-PèÞ¹Û¶¸­Að$%8QK6Hlªþ’ÿº½å}órUloç²¹ÛߺÈêŸquwluñ÷Ne{å{¿´|éµæ÷fC}ÁÏy-ïšÕþcf{¹ŽÜúÛ›Û{àêpä­ñé. -871ݾ¯­«‡…ÂÍÓÏÍÀ‹µõ1UkkíªLY\:DŸüeoT½wåŸk@46MjÞëìí÷waiznzú­œ­›Ÿ÷ûg^âìw~¬pH\{{º€®°²ý¿ôj?u›÷EêØìnA`쪹uôùøìŸíàå÷îÛ±c.3374)KŹ…ƒÌ¥×éÀÏY FI~¢‘o½ùÿbå®Üµäsk°ø½rCíÂÞmB==0mñ…ºžÌŠ¬¼ÔŸ°¯¬!;G<<4{ëøâ$5&"œ’¿«Ëµ÷§™¿ºÝø•}"":L2;Rs[|²rMUID~©ê2N>:;#%18!FFGx}*½¡Š•Œ¡ØØʃ¤‹…™ÔËჄÔÖ‘…¢ÓŽÍŃ£öÚ—…cÇ“–£ŒÖñôÏ•á½£¡ÇÑÏus¨Ãìž¿ñ»›ÍÀ|Rrçµþ|xz­¸ëEEIbkbWHL\ptwwóxL64:HDP<@3+53/*/56?72;M÷ãkbqþâmã|isÿêßwé«ÝúÀå@Lxï¦Ëãú÷úÒµ}rüýºkg{½Uî÷ÕíUzÛæú{/HÈþã{~óähTl\>F2?.U`Jêè-hłׇ•á„™™ËΈŠ‡ÔÔ™ËØÔ‘ ƒÇ€Ð€×ØÓ’ÆÎòÚÜŠ¡£òò—£ÄÄ–Æ¿ò””ÏñÁíÍ·uR_ZTWQkŸ§ã`}žû»Ñ’ªm>Wcf\WNx½âu\UYV\oyxv[>;KH3L_@7@:2093;0;?>CWjcTwqVUjsFrÈç|쪾¯­/GRZWmgrjpiltwWf¼ãåµ×žé­4[W›orâêsëìÿº­Üy[éüçœ{Èírxû¾®÷ºv(kýÙýÞϯÞêqt{X[o}qVgHQ<(#=, 鮦ŒÏœý¦»žêþ°|.DkOx²}MW|q~=9RdsYTuç~wX=R]MDYfjb^W@;K@HKYarqjXuì²þ~S÷œfz§ê~9ecD;\jbXbã칶±â{WÜz´Þó%rÆÙÍ˵è:{ulÜܲøÈÝþuHpïžwktèéêz?).zªª‚«ñÜêuã¹Þ¸¼âzJm붾aVäìL4_óT9MVSR^}Q66AfãhjóH1í¤‘Ìƒá ØÌÕÖÔá Ò™…á•ÚáÑÆÏÓÐÒÆÆÖÕÉáÌýì®ØÒéãúàäœË•ŒÖ­Ø‘öڴ”–£¢ånëcAuà@úü=TgTfWo÷viÈ®sv]JÜ¢Úí;?IHNN`lZJT1y^GjcjYB]fVSENBMS]ZKYJ>1?Mn¹ÜäqÛŸ­¬Ý°~ûù{wâfQURVENP^yë½nàdpu{­º°l`®Ðüþûà{|äìúªÜºªý­t22M|º²miàúÜwJ1/&>ݎ̵æßäzþ½žùïr|y½s'IhZEEFNY]RTX_N\[IMQARbkâî_;šÙ ‡ …Š†ÖÊÓÖšÖÌÕ‘“…šÑÊÕÓÖ×ÉÑÑÆÕ·îÁ²8V´´àÛûï›È×Ìþwü½vÈ¢ô™„×–€StìüKT/]vêoUMUO`ëvRî÷yqxTS»‹”‘rDYBûî²êÿéó©o412BQCOIãÈí^RKIK\þi}Ýê@5AEhhlóZB1-5BUSNZLLdfeœ¶±t++')8*756莾÷±­Ûïyänzç½vUmpWurX[aWN6hgZ«ÊS ÿ­ÃÑñ±ú¹¶Üt›Ç®îí²à(1>éwAé{ku°ž~2",Kï¼…™¿±fãºîÿür»ì¦¸êe|â[je2BLUNMiefXGBKKdh`DS;|ôÑ‘ŒÌË™Íə᠅ჇÓЙÒÓÉÉÕÖ’ÓØÐÖÀÀÀ¶¬ø©²±©¶®¦Ž ÕÝãÞÜÝí|zX.BLD5DTR²ñÉ°Rhtà½óëåíåä^àóVQd==ÿéZêôäM?⾈ΌÓþ_SJ[[XàÛ~``9C?,6vô®®ëXSacsc`êß¼©÷ü垧|Vmâ¹çéúaKu^]_l^kâtìÀ²íÛ«ÇÏÑÀ´ùž½lÿÅæ¼ï{k][àžç°Ürâ|m|ïG;?=/9kôÁ¨’¶å^aZ{ŸíßÛzâ¦ôt/@]ZNUciìçQ>QgOBCI@G=HL}ÝÍŠŒŠ„ŠŠˆ×Ï™ÌÔÑÉÉÉÉÕÍ¥ÇËᆥәǀЂ™Ø‰¢¢¶ìû ¶Üä¶L /úÒÙ¼ügI_W`Z,4/4èüÜ‘”Âc2ûùuFâÈôFCE7GiRK½ù¯Šb­¶PâýÅùãïÞÞéç춛Zhÿçph[MTYE6i¹Øàí¾éM2HNSIWvüñ°ëçÞ€ñ{RVwàtéâ@[]\`_RjêþŸ´µ§ý«ÖÔÓÅÍùºà`îšîºë~`^N^ä±ëqwŸ¼ªíxNM89N6`¶ƒ Õ¿­Bxvyܽ²äxï¹¹ÞXUOBNT]]lkIY`XNM@=CG>N~›ªùMTzT%>2.K²¾Ý¯‘âo>q;{gClrîSqP3væø­ï½¬…¹í©×¡Ñøÿ±¯ôÝŸÞ]GLFONAESXi]CïŨdfù‡·ó7C.@ME:Nµý°íü«½u\oQjüz>Y`aX\ü¼¹²÷ÇÐÅÉšÂûüqv§ÂóÞôÝlU]cóLDlyݦ¹lâîy^;OH"u·ƒÙÁÜlÜ~cyàÛûçïêÿŸûúkOFWXZheYN[bPQN@DOOK[;Eë´Éጇ †Ì  ÌØØšÕÒÖÓÓ†ÏÏ‚…ÌÌ‘„ÊÙ᪾ΊÜÿãx²êÝê"Rmüº½íTüµàï™®%@[*08>O%'÷ééŠÀêNTcîy>@H{|=0CãîO8àBæêúÓŸ}é¼Ê¯ÛåÞ‹ÃÝì^I4\çnXWC?ApìR[÷Ãÿdœ†Àºþa[GIPJ0éžÜêŸÝý»þêtkwÝleSjiXûù›¶¾ýÁŽÂ´¶¿»Ýžsi›ë󱬺âQ`qìþuRoâãçt;_±s]adT8føôàúª½s\pïøûþÜüÿ±Ýtlm`]ffpë÷n>=AXœÂx±‡þ²»p+ $$*$!:G9(=°›T2?KE5OíuŸôÞªç-j>7);'&A:S½ä±ÖÕ¼êxO\Xjïê½}ÜÁ§íNZVçv~úvKô¾å{éóézVCORSMdsâ±È|h¹Ò]DW²·ÿeí·Àñ©¦±´Àҫ޻ݸ°çîÞ½fþœ±­}qYgçlóÿã±ûuv}qíëm>zç½èh;KVKCH;GDGfoZ2+09I\k^}ri~óåé´ÆëïÑ\^H\y°©xkß›÷ý°÷ªéogibii_Yijv½ê…üdKà›­§¼¯¦¹¶·ÖËÁÁ­ëÿµ­þêûãóiÝçG]bfàoIQièzvlfíîv{xUUB9AOü¶Þû}hn|_Fjäèûú{m`Qaj`Mlóãäãunqjooqéÿ}uaTVÝÌÆ™¡×ÅÕÕÔÊÊÇÓÊÑŠ“áØ¡„ÌÙƒ‡ÕìУÚÊÃÙ»ñ}rçü{rtZ²ïqüæü(SzU}i=E/)-3*/2.1aôp'7QH4J6)3(&'7<6CTCFJ@KF>KUzhBHHJxþpYggíåªâyïåþÿbYé­¼íyŸ»é²€ôŸÛÞmèêþÿwnsV_`lî¼®ÞèeÆÒ¹Þ®Àƺý‡ÐÝëñ†¥ô®¸æ»çÛàmz|WkÛþü|NGovJ22.2GD@JI49UHCXIP[UFFJC?R]rìè~àfëÿäüú~jyâßl`ax}_Ÿùêk_ç¦ëè}­¾®~cóìúgbrytrsŸ©j}ûÁΚ×Ò®¼ø§¦äªßœ†Þlà›æ®ïôùª|àìKTþûóvþàTrlVxqiå²±ÝîTB]]WR}­’Ðù¸ý›êv[{²Ý°~LKaYií{ãüïŸþóhcM[v_dWVnàÞÁšØÑš ÌÏ̙ӈ†¤¢ŒÙ¡¤¤ö…†Ú¡‹‰‹§ôgpø¾ÝÒ‘®½ëhub_WOVaqsoX7%;KaI>*03AD8:C7=T?9EVFAQZF?JG?F@KK@?SUZs¹ôäéé^tnoyrob_i~›îeXuûã⛲ú÷©ú\WhèëogzwzhvÝÝïüïؚǀ¸±ï©÷ëÿ¹Èî°Ê´âî­¨ú¹¶Ûé~g;:Ov½wzcClì~oV~°Üº±ï}]ihI`ë€À¹ye½ìè~]YmêyÜÞèêêäâyrvREve}^hqåôÏ¥†Ö€¥ËÒəؤΓŒ‘‘‹ö‹ö‹Ù¤Ù Ñ†Þ»ÙƒšØ†¤«²²éÿnûfdUQZWóÛìÜ·%&ID?RYM653504;@92614OWCH3HfS9?D@?B@cúbç»ñ€ìâžâÿþmþ±P\½èg^hqÛ›{ioy½ßºœí~±îßþQ2Tn_`efjsÞô²ªÿåùÓÉÒÒÕÖÑÁ„ÃøÒ¹ÿü}{Ÿ±÷ß}pójgw@Clèëäí}ERóç~Vwüüäîîÿ÷ãaeää¿Ç¸ø¯ªäVUNXþ›jku\u÷åqwëçifäãëiâSTâ÷ß™Í×áÖÍχÖК„¢““‰†¢”Œ“ˆÍšÂ¨©‰šÜ¦ŠÎˆÓÕ˼{éà|{fHfkQN[róÿø:?@98+28.3;//40AB=:E=54,258@@<9HNXD?RBM@|­ÿœÀñÿïå²²yܹvôãëéu½sxtàhlÿë`fséúçìèìÛ¼›íßûyoèë|yg_WKFd­øµ¦ßØ…Ò„ˆØÌ„¾›œ±¶Üú÷Þ¯äîízpvñ€ÛqIgnzúœœûvú¼}q}Z{ååvuèÝÝçe]Zlâvïô×Ô±óëdJK>TTyt{pvYl~o_p`Gq`NRwpr~ÞЃáÊË Ñ™™„“•¢Š‘‚¡ÎÎ΋ÌÐýʵµª¯§Àú¶¤ŒØ¡Ö›¼ólŸé{\`ãdEACeXZCI=6EEH;6F1%2@LJEOUOIGDY\|Û®ªÿ»ÏýãDbþâïퟟÞí½Ý{eç|WVmkvnp|ÿ±þäî÷ô÷û®­Ý}{~zsrp^]Mhþݛѩ»ÞñÀñ€¶¦øœÈ›÷°ÏÈóäž»xXþᬹêYopmúýÓÖ›xîâóz{äàf|ïüÛûfJVQN34Tå®Ô»lm|k}wàv{óäëÜêzm_]RciSè{h]zt{z÷ÍáÊÉÕš¥ÕÔ•¢¢“‚„‡¡ˆÎ‡ÃÁÆ·¥×¤ƒæ˵½Æ–ö––ý÷êlÜ›žŸâsJ/3P>wûîN\BPTET`E?=AH]hK&FêÅ’çyuÛÛú¶·¦ž°åãÿúètsïÿêàþy^onû®¨ÒÆÑÕÒÊÑÊÐÙˆ¤”‹‡‹š®æŸÿ¹ô´Ã™÷Õ…™’ÖÂÖö—•¤ ƒûwç}ž­x½þQSGb±îcFe`[N>?B=DSfPXCIho}zdGGUL\þ´žfeWBccKé©uHå²êjH?}wbú°mstþ{âÜÜÛ}xhy|ãìêãë±²Ûû÷›ýÝܧ¼­ß½ã}g^Vv²Ýì¸ÖÌšÇЃ¡‘ÇÝí}ëjïßèy»Ïíwëâçüü©çêÛâ@Lþªý¶ª¦é~àà}Ûúêëø¼oBI8Tíþ^@IQHulM_{tXzº§²û²²¹÷åíéyuåžþëê|íë›ÀÆÇŽ¥ÉÕÓÅÖ­üîóßÈ­âó²Þýýñ»ùÈÁûvlgâéruYã4r¹|\LHTG:@9@J?:2GG5=cp?$9LYó¹ôël1wÿœýóŸ¸ëSVSKt±V9<8RHDPAY_SREC@JXQWUjklfpåmij[er]PY_P6;3S䟨ů¹÷ïã~ãoú²çûdMN]IÝucœ·Öˠμ™…´Ûüþôûzãçóyä°ëïë^IY_câÛ›ªÂùÃ’™´xYãÛà÷É×›ëJ=VUQNM^XNUeå{½üô­Ü±íëìçìþééíàëúâ÷§ÂÇ¥ÆÇ€ÉÏ«žµ¶«ªµëíÈ«æñ´¼ýæ·©¯Ð¾¦óTiçÝå÷v?NTT69C77D:;=JRQBY@Qç}^kèäcP[E2F?x’ülåÛÝîÛó/Hq~<,9769:JA9BBEPKEDRSZKD@:DJRRNZq[ben]__Yh`BEjmeR9*,PQåžôܱްþ°üôÜqík`LHBnîFÿø­ßÿýòÐæ›®µÈ¹»æµ°êàuéêåxçî^GKUM]û·§Þ¶¯¿ˆÖú~ÿÝß›¶žk}JCT`SPRXTTXhþžûôŸ›úÝÛéåêêîïüéç¹ÿó¹ÝóìýÒÑÓÒ€ŠÙÔ¸Ž¦¹ž©ø°ŸøŽ¸¼¼ªªù¯œÇô´úoä¹ïnrf==DCCB>?F;;Z\RYAG]mrå¼¾Åvhd>IŽ•î>O÷©Ûê}_YOE3E4=:5AE=?;5OTA>MRSfSAMMFA>@=?2CkZÿû™‚¼ÛÝ{[YMºÎ‰Ð¸`-'í¿|4ckGHBCF=G98?GEB?;@DKC>ENH]UEA@LZb`U^hiyéåhRBENjh^{åîíjëxgÝ®ÜÜßþûúŸúâžzkbvTA;`åW9KqÞÔѧ¾ù¦¼©©ìÿÝÿä~çäãíþóséî[FQPTQkçvwÛßätü߱ſx­®>U´¿±JGRZRMU[[Npìß»ôôß›²ÛÜ÷þäxäãéèéåé±¹±Þ¯ÉÒÕ’ŽÇÃÍ€ý·§µúâàüœñ´Ð‘ÒÆùµ®|jJSúæüOyLUDVYAJHFLVOB28KRfAà©rÉÍ·÷tsäxRfvíšôÓûmMIüÆ÷D7Y:C@DF;QH<=8AD:=E@EEK<;MRYWGDNURZWebk~ycMDFGD<526Góú~úÖ¾¨y}åvjjR]ST{‡Áúx¶…‘ÐÉ»`0A=GDQLQ8;6;F:>HCAHBCAMOWcLMTPKQX`hkL9DmèÝ~ijxâóóçädHnéëÜ›ôÝ÷÷ßÜûãú©xkïé`X^T<:Läq{ý²Þô­«­÷Þ»Þ}uó÷Ÿüêê{oäÿZ=HGIDJr~\bRD[jâvU0L~gâÿsq½êINKJTRVWRU✻œºž¹Üúüïÿëí÷þçãâþëîÂÑùœ²º’¶ÞÞÝ寯›¦ñÜóVo¹±55;?FLP<+?NZëK>:8>C=D_b;wµ¦²pg²ìÝÜpHúßíåpgnan†‚²}}8r¾ØÕÆ„h8VA6;TEG6579?=GDHMhgZZs_@YósywG9Gv±RHhMNFIUa`VWlãè¹ô°Ü¹ß¹Ÿíîï齟²êêü½ççí©©œÈôãœÝÛüª¶ìþú趾êé²eAbn[qß­ù¾zm`PWAD/A~ïÝÿ{oë}®Œšx=BLkyß²ûŸudWPWeyVGIKJGE?;7@I@DHL?EMQOPQOJMMXXVmb}ïÿâfE;>AA;ECUPE;]óœ®ÈžíìÞô²Û±½í›®îŸþÞœþh16<=^X›¦±íåë챩­ÜÞûîúŸüüåü¼žlBHLodLQNWNF:t·ýpH_{TSSU^fepîo1w´±Ya[[eaPC6BVDFKNNSJM^`RPRQ]TWYjuSgcaOD9152@84[IQ`vä½Ûñ·žŸß­Ûܺ²›»¦îå­÷ÿ²|ODC{[/íµ­›Ûêü›ÜêÿßµÜã~û¹Üýœd8GE^þçmm\^fëèóyh~éäïrí_WdaQEKahg]ddâûíïûèíéúû½çíéåíŸywã|âëÝž©Þ½°»¦æ­­žôíyü¯€à}雸ŒÇ±?9BJNKGIJJ>FSDYUPQTRNKGOI9Hn¹²ÜNWTU`[Wl{EaÛ­»ìQeÀ·ÍôàQEUG?CMF9-D|sp[R[U\bJDMFDIIMUGRfh[UVSUV]VWmv[F><>77EHAOhàyvéì½åé­µßøÛ²²­©ù­úúêºæ©nAlu=è«´œ©ºßô®¦œô­ºâó}ûôÞÜí`_z]eéu{u[I_àãô±h}ª_YXZTTWLP\e`GNâ±éëéíêîàâïï÷ïîìçàçâwêãì÷÷îô¦ñ¨Ò’øúí±ütë»ÞíßÑÐôá¡­à\EN[WCZóódNZckWWls[gh][XnµÎ°­Xyuz|fiTEPZú´°bUü°‡Àéh988GKIGDDE?A9@g`SWR\kirWHIIGLMQKO=GUNVTZTSQWXR@919LOb°œvrëíåbwïÿè즺ú¹œ¹±Þ¦±ÜÜíì°°qZ]m>.ÈÉ®›°Ý»›°œŽñ½nk{°ô»­åQcàeNäçàé½VJ_L[ûûho±âvïàY[^aYXitVIgŸüççy||vläíûß÷ïïàóãç½èúèóçú¹ŽË¯«Žæ¶ôãkQâÿìëþ¯‚„šØÒÍĘ̈h*½Ü²²êäۻȭÛÀ¨ê}sàüß®®éDRXG\ó_nz÷}nbo~a|ºŸ~~ãêVLYWTR\us{ú²ï}üextvâìîäï¹÷dtçèv~éäâì°ÿÛű{{åxó`LQìùÓ¡ˆ‚Èb}ûÁüad}ndbESdXuÿëät{åñŸrrfbea_YbésmêlE\VL9ì¿ûúÈ´€¶¦èû^URQKFBFSPLODJFLNT{xXQ\^mpe`KRVRIPMXVNX^VZQYejlû°E;A;::KlUzàäiozfwª÷þÞ´Ž´ž›þ~wznjþ·¦í½±úXE;휹ŸêéééÝ›°É×ÿlkäïúº¼ó?QMRqXYohty}xcqà|óûÞxâkU_RU]gu}ûßúéä›°hadjããç½sróãhhpoyêâãâë}âì®{ux÷°Üºãxxú¦è}Üübuz>î͵ÿnV]YYp|{iãìlp[bqìãmk_\\bmSóÞìj_cZZKC5uÝßz\®žëà¹hR[SDGDUf?HPMC;ACDOb^Zj^fvygz|mTLIFVUWe^TT]\lA71.1eà½ëó|{è¹›þü›Ðìøºéngw~ó|ß¾ñtéñ~DQO÷»ùÈ©žœ®Þ©²Ý²üÝÞ÷ßì8:C3DzåN}jWbqȼۜéMCmçQfsSJïÁ¬¹ø¬´»È±ï²évosàã}sg^iqhZUW^jvíàjzüÜÿ}|èrÿÜꮧxì}yãgI;CDTzyàkûûÜäQgss}zz}v{]do^kqóxhukWjc^_Ts]jeLVuT.;E=HMOSMILRWVTXORJFIEKJWQB:HG:CRSVTW`{ŸsãïÿuUPXadXcf`\k`Zhls\N`P,)EXB9Uf|çèäãþ±›®›†Ð’ùø»žpvâ}½ååûÜKwýþJELþüœ¨µ¬¬ží·’Þc{äàó[5FHKEU~ëeiffOgÝñÛþê^}qVR\\n¬Â¿Àè⦪Èܽ²]aäuzäynme_XW[RRXjóé|uzãxåït]i¹À±vêca^tc^sxwsâ²à›{ìzà±¹}z¸ÿxo}§ŽÈì|ämjea}|S]qpic\ì®ü]D@@:BHODIONOO[IQU]WPLFVXAFLM\RB:IDDPUOO`]Uo½t{sp}l]\URZahacadknuzjhéü`:?6JNYjuçëìïè÷¯À¯Ž¾Ö·¿¾Ápb||üÿzí|FúÛCHN^orî©îå¯È¯’¶°qzsaltK8G:EThãìwZDICLàŸ±äèíP]ZMVa÷¦ª»üt{yep|¶|HmoqqugfeSQUZSU[bàíïre{uŸ~uûÝÀÜVZcN{Ûê~û±±¦øîã÷rjdé´ýµÑŽè{ܱ©ø¹žëyvkYOMYlutslVZµÂr6MTHGGKKMAHYPSPTWRXRNNOMBKOK[Y[H=HLHGQY_`^WZ_^g]__owi_^iZnbrOLON_Q@e~}yewh^g{|à½êþÿŸ¹Í€·¥ÅÁ¾Ã’èefå÷íxfsåQSêcESUic`°}úþ¿ØÍ´²é{en|àS8LCGJILNSMKQQXV[VKLADDJPQSa_R?HIBFEMGZ_PKL_nYXUgvmlzsivszU@DEE=?;=Pbdzbboêóu}ã½²²Ÿ«ŽÂÉ·ØÇ’¯ýçfâè~{gZäãERSIK^n_R妩œ¸ŽùŽ’À¦þ{jpmçéR8JK;]fåçé\c½´ÆÀ¬¯¸¨¯Ûóoqsjwþn5&JNajwhswnS_`KZ|wSYUZtkghdsëž©ßߎ¼~Qwvg_nxãmCERXU_YZh\]YneI[±ÂþxXs°þÝÅÁ©ÁÂæ›ß¼ßåñüûâêëç½çú®¨©ÛßÎ̾žëÈýÝßÈ©ëßíª}~§ROSUHN[MQKQTWHFN\WTÜïDOI=MMDQLNQLVMHKLHS_VXfab`\_`_kuà|wó½ìïútqãûþäçä{ìí}y|åèìçݯ®¯€€¯¬¹ztìÿçpZldXrëh[Giµ…šªâdo²Òɒ;›âp}rcsí°²ã^G66ICByä^bloj][NZ_Zlszm_黼߰ü±«ÇîÜȺ¹»©ñ­ãQZ_^h[qm]mUg·‹Ç¸¦ïu}}þÝôÞìÿçã²þÞºïï¹Ûܲüäã}zj[\9JI=~µªäzûî{þèsÜxFrR@NXRUODEMQSPCIWPFEIMKEGKTVO°üDQ>:IMOPNNWQLJNUPOPj`RZc_fjhi[Xn|u{ókZWxþïuûÞŸ|xàãþÿâzäå}èyåûµ¶¯¨¬µ›¹Ÿ}q²æÿHkbjèìcUGQÛÑÖ¼²jxïÔ…ØÛpbt½wkaiíâAE@JM?6Säu\urkrr]|ä|Qoyîê}ÛȦŸÿþÛ§ª®Þú¶Èú±œß²Ý­àZ\]^]waOårWý×y^{vç}oYlóëêé½½½î±é¹ìîíÞœþ¦÷ägT[3%4*-#,AD'$2,3Ki°ãoW^OBPQJTQGLNVVCEO[E:NPJHFILTSs}GYCCEGNUUQRRGR^VPRWeaY\c_^ongfdsyxó|_ZRâ²þ½ûßþwiäâ½ëãó½å~|x|ãê¦ùª¼ª¶¦ºùæÝàîþvSbmhî›xD9@Ÿ¶»Ümåߨý¯¿ºUdéåiL=UYVTNWJ?RaVS^r|z~àtŸ©÷anå}}û©žžÿú©æíûêâܺÿ½êééúß°pZYMmè`^ëyHú¸~Vpxçàgil^ãüþþè½î°©¼œ¹ÜÿªßÜÜܪû`}nPMNBW=5;<:DܪÜîàgfyû©ëþüéípTv}[KE9GYYSQJ@dkTMeèìþîããüžëkhå{eí›ë{û¼ù÷Þëì›ïzããëÛûì°ãY^küíÿøç=R}±åilä{hjlSèÛìܹú÷¼¿¹Ü»´êbg|ìÝ­²›­þrSYog½ßîru]A;6Tûëq^RP@HRCN_QNJNUBJFACNSTIBKDGTagWVW^P;?EMMOVQOSWWUZX[ZSanmmroyklwwâ{|wqduèuiêé~âvle_gltnr}y|ç¦ñ®­±íûß¾¯©´«ÞLgdç­žVJ1]ýÈúþÿqVuoíëuïåäóTR^UKLNNOTYLVBE]\T赸µ­ÿ›¶ýßÿs_pã°œï|ãå·É±´Üúßìàçç~ãêóïíbåø„…þVefjn|yâvjgegÛñºô°›ì¹±²ÝûèÝñüóï÷ªøûvë°ÜÿzåþÞôÜîîûO9:4ã›|]WRDT[OPYPKfKLCNFBBAQQKMDLKMNN\U^Y\HFCIUJUWJVPU]_`^bdmzwuäy}xu}}â{~âêíólewwoã~wmlgefhvzä½åë~œ·Í§ª¸µÈñæÞê›Û~UfYëÜœaC2s®»´ùíó|óÿ÷ŸúÿçêäaKWaPQW^ZTV]SMMTVdãã¹´´¼Èª¸Þúäm[íûàû½r²ôí©›úûtvqsrþ÷ìÈswýÆÆÃûwszpttârqhkdk^Y±¦ºu±¹èm÷çób뛟¹°ß§­xpftŸô›©ž±êÿú];7/ã¹fb\YHUbTNUYJOONJBMLJPQUYNKPUPMNZ`PSZYTUSSPS]UPd^\]b]hsóufk{|à~}âä½ëåéì²íb`]bwyslfb\gw|íû÷ÿ~仨ùœ¦ñ·À¹Þ¼®®yZH}Þ»}C0Rîíâ²ñª°{±±²è{ìãäíhSb`V]d\UvkPMN9Wî㞦¹ÈÜô©Þ¹÷ãq\_x}få¹²Ÿàâàjâçx{óç~âýù§Ã¸~ë~óâtj|ç{uxÝ{hk^SDO÷ªyPv÷óC\øô`g°ÿï²ô»ûéyazèøïž´Ü­œŸyD861\wi\R[UVX_VV]oïh46=_f\OP`kfWOMPSTW]IY\OIEMOQV`[NPc]mZZdowttsxzu~½xãâàéíèŸÜxSXm~wri\V]kad}êêäl嶛ÞÛ¼´´°ŸÜ¹®«§½nXîÈâA$R¶žeqºÃªøÜç릲éyãçàcPWV_VPimTX@:ú殲۹¹¶ñ±©»»ÞëÝçgWgóbUpâí»þì}}íçäêêx~óžÐÀèi{zr~ó~óº´î²¼ý¦žïçrTçªþXK:fèßìããxäî~ž®J¸°Ew§·vD@VpqjXMNOKGß²wpbs¶È²µªœ¥…ÊÂÞ^º¶sè²plóã}{tßÝæ±Y~Ýàlã~uä½ã{khÿwmïîxóâz~xvóàååâkó~ngfoyxrgbR[dslmiãÝîfhz`r®¼ÈœôªÈ©­üèÿÿÛuóèÿÝb+eÜsUqz›®ìwi`j½^tú÷~kçãzoo½ôúånüx}ºÞ÷ôÈ»°îŸ­Û²û¹ŒÃì|keX]STXbh^hëìåûþúë÷ûåãï~~íèú²èÞ¥¶¼ù´ý¾©Ýüœ»åzXTI3A?BZܸ›êïçsacr^KȺhÞ¸±dWSV^\XXVPJRBxîûåha{ksù¬Ï¤Ì¬Êªç¾•‚¤ãñ«§~à›®wþ¿ß|våêlâ|ó~rag]kãäå~xtm|~}{ózà}uuh_hfounakYelvmpnà°ïS}ê\WåéœôúܹžàMLf|\é÷ÞïN5ÛÀë9+8÷«ݲêwŸ{°½vtâìŸêsè²ä_c~èîèäÞ±°º»ºûûûÛêí±øÙÂài{osãm_idd[v¹î_êäë½½ëÛë~즒§©î¬§®µÈµ¾»{î¼Æ¹±ìãO8C>]èÝùþsó}tâyLFZyqîyovo^XW^RPUOIPDZ}©ÝbQo{mŸäæÎÔ™‹Ö°¹ÕÕ¡žë€Ö’ÁfpÞ{ä¹äﯞ|z|}nxwp½ÿyY`}üàwéztzlwàyzz}âjghm|^afsekgowu~ryçûèKâcZ{u~ݼ±ÿ­ÈÈ°èv87C@UŸû\4žÔøãGAtë°Ÿ®Ü°ïpîÞâçÿ}úþíï°ë|zèÛŸÞøߟôô­ßÞ°žüþüŸ±¹Ÿqyig~âshgi_\÷þiìè{àó䵸ÛÛÜ€Ó¸§´üŸ¿ññ»æ«¸üž¬ôú®ýñ¸®xA8RêÿœìZi½ptètTOWmYMVbhpkdcSWTWOENO[­œm=jéçåïÈÁÙŒŒÌ±¤éƶ¨´ú`O±ÞÝû|nÿís}óähfbdóíìróvpsuqroxóà~}ãàó{uftxvvgdfxnhqwy|~~½äï{Rm½l_íyeèôôÝž¶ý»âGUWqóîÿŸ´œzÛ”ø¦‘Å‹ˆªÊŒáÖ¥§²téóéï쟟ëéïŸêüjäþåÿàal{cbjrqoäâ~å}ã|yxzgm÷ëSfvjnqtî½çéé½ypm[lßÜWixSzÛÞߺýß½¹Ÿ^xnXPLžž»·©¶ºÝç`óïëëâyvçwahvri{~m[{°©û°íéô¹í|jzâwt}ypkq}w}yeanwoou~ú¶À¨íµ©®¸Û®À槻üœæýýå츻ûÿý‘Ùñÿ››ß´›obVbârro~ìtOeUbXT^WUNPTZW\c]]GRBFIHCNGCGOCGPc»ÇáÛwânj±¾É®œÛ±¶œ©ä»ûMY_WQZ^UUR\TRbhkhabjuvàâè~}å}zìy®«½nfjü{g`mrtx|çìçwjZR]WŸ¿žãëë`?DDLMUÿ­zåór{²ÛGW{mtìåg÷÷âþ®}EWLR^gãjo~¹µ®›~kvssàüë~ê½óêabeZdb_XUUU`RHUemxuéy¸È¹÷±¶«æýù¬ÕÓÇ檲\k½ttÜÿíîéíîÒèyz±æ¥×ÿ¨Žÿwäãätok{½éblbd±°nZbt\NUTWPZe`NMG?DC;E>CLNVBMMGè¿Á›»¹x}žù¼Ý÷µ§º¶ÃšÛIUPV\^\VUX[[V^[Ubqi^xnvpäââ½åçãwz]pï©Ÿsïhmtyymt~êíãgLSY`MnÈæ°çåwB:9PSIb»ãl]óü}\\Xcod⪟찦ÛSRXKXV]a]ë›ß®¨ªèlmodc~½v}²ªóMYjabfb]`TTQIQVX__jj`ëȶ¦¶ýæ·«¦ªæ§¨Ï„Ö´ª±±Ýeporéïíþ÷úëôƪžßû¬Ù×ÅîvSwåäàpUgsþílfZJViSEZJJTTRPZTaPGQKK@?HDJFIPOF@A?eìûÞ»~[²©¿ÈÅù©¨®rKb[TXT]T\\``U^VLbuxkstuit}ìèçssxi[w®©ôîcktãym{âèí{cNPZVPS²ªûûßí[VlMSJW|û½anéeG\_^rt^²ñ±ïºžoL_ZW[`TWq±ª±~í®±{qneTghlíÛœì]^olhkb\XRGMSTU[_YWcZ骞®È®ª´¶ñªµ«’ÑÃÂñ±›ûê÷ìëÿþû÷Ÿûz­Ú¨æÂâ½±¼™šº{ìåU^vo]kXêë霶®A8Ca[TWFLX]_`LQPKKGBCLHIMMKKG8:P\Sì®üçú¹Ÿì§Ç»›sb]a[SYSUUZc]kW[_[bjnkpxrhbk½½àã}xtvî°Ÿ­»î]m}{im}ãéêäsPRQQd\©Á›²¸È^IlTOSRFoàmzëuQOb[cmN[îèq±ãRcYUa^VtݜȺéizçíäiflolz±êéþi]hkfe_N;ANQXN\g^aQTg²ùž¹ôœñøÈžœÇŽÀ’ÃÕÜßÜøüçãïíÛ»½}еüíuì¯ÏÛqï~{îpvs~e]crüæÛ±ÞÜôN1WZQQZ_kXMNLNGIF?MMPOJNGKIFJENü­îfu꟯ÖÔûRZ`][`WY\\S`U^ibjk`W\erpiihcsvyäç}yí±ràëþàSpåo`w½ïéåíwOLQ]ndŸ¸®°Òè=?TPTMHQakß÷}óaLdvZ=5iÈ©yqld_WdbEVŸÈÞݸ°½n}änrãyåè½ëó_`fcZIOXWZVaWpedlh[Yãôß¹ßÝÝÞ¼¶Èßœ´¬ŽÇÏŒ¤ƒÐ®¿¦ý¹ìãkz›œ½í¿Âž÷›®ôí`Xh]~ÜruhpoW^[Xfgtèüñôh}V\Z;H^d]LNVJILALGOMVPDKMI;@NCDXèï~fvåñýÝøŸàZLTURVUXU^UX\]^`]VW\jh_yqiisqmz{tqß°Yuàë½^zà_eçîúäêë~^Z_\cZkî›îž±T;?SYNZXN[ûçïvK[qå½M[æý~Rgv[@@GBDZÜt_b^^béû°žçc\SX]VZ[PW_WUXR[Zegfpaqeefnllsxy}yópàè½ó÷àmóìudYkthprgcYZWRPjU<àègÜÿ^BSMXTXV_SS`[ZZC@_ûíqs¦údmââí±ïâþœš§È¹ûôïëü½Ü°é~àëüçêxqäjMZeZ]^]eWbbmzvnukgyêžž²ÛÝßÈÀý›»©²ÿüì|yÕ¶JEK鯻écQÞ¥µ¦·Íƒø°ÈÇ·½U[dabRãæÂÁ²d]c^Xdohkú¯jaYe[eí^2HCGJST\ZOLYZRC:A>=FY½ZYX[^k[WkísGOMYi]TRTVdNKPVWbmhlvmkcamqtt{ãóxÛümx½ü~âxå|TGZcjrók`xe[VTQFéü[jreþ{wnYERTZUTTU]X]Qbvl§›kiû›véîî»ãä||þ§œó^hå|ûÞÿüíw½è±ëåóaX[YZ^Z`_^X_\c÷åêôŸéëܶºÞÞ±¹¼À¥À²­ßߺºéäþÿªüaZP°ÀßI@tµ´Ô϶¿†ØÕß½Üyhóg_g_YbnîîZRf`e{wbf]levxfnCSgGKACPJWNaULV\UEBF@=GOwwfçÿlistobofTY]lfQR]VVM[XKQhrm_dgh^mvbozâ}ä½ú¹âw½uwäâhUVOP[kg÷¹sncRUTKYÞøçXKV]RëîTGK^YKMV`VYin›¼þüüks~tkôýœ»àä`sëÀéyu]hàvì¼æ½²ôüìèîã}w\Ycd^nV[\iZ^mvŸë}Û÷zu麦›Þ­»¼œ»ÁÏ®²žÞÜÞÛì÷æ÷êvcyaLbX;E]±¼À¨ÜÝô’Ç»óç}mjxqghsk`Z^ehmmèÞ~bij^YdvmàtRcbAKHBEPV`YOISQB?IA;OPfèSŸ»íngdb^e`Xhfa_RMHGZVV[]b`c\]krrs|{dswu|éï÷|y~ììdVZRO^hokì¼sdZUSXP]h½â__`vezûMXRY\]`_YZ]gÿ›ÿ\dm`ü°sç¾¼ûáÛyïâûaß­jhz{ÿµ¦zëÿœÿpçà½bOUT[g`]hcphoyqq|~~}s}ÿÈôßÛ¦­þûÈøœÝÛž»²Þ­ôú»{Zçë[YYVN_xí¿¬§ïãókf}ê}W^gfrnnszzz|âéxlà|cf|óq[íì~ï±oaaHG=CAOXXPTMVRAGKBCRO[âfQcsaiovtjVZaex\WWWRjfoz{zqkxwsxxâà}w~}óçèìâpwh~ÛqZ_\PZfmi]qïl_\WYQW_HES^]]ëìC±cT_[TW[cg]]täéXS]ëÿàk÷ù’°~Ü­ÿjï}ewsa^ow{ìݺççàíû½úÿychgb`\W]`^b_êwemyä~½Üçx­øžºÜûô¦œìú®µ¼›œ›¦üüÞçocdåâd^_^Njéÿ«§ûàzåxãwqvsrxqv~þ°ÿèàv}}{|l|Û~\|ràÿžé_bWBECBGPSKMSLMJCAFDKJ_rûó[fnc{îàwstrxâïçàRàã\Zãþë{vå½ãzyããî½àã½êém}sqãïjji]^^lqf^s~hg`SY]htaLPWRZyìGçíUZ`_]ck^Y_iàäT_ܶûYGÛÉÏü{¼²çû÷é}uikâàäèxvîêÿî±þêäudt{id\_`^bc|œçû°íåè°°}­ôœ»­Ýû¶¶­û÷©¿ùÜÛ»æëÛºíiqwuhek_dcnéïyüœî½xô°utvrfm}k{wóÝß›ëkgw÷­}vnaxs]snvtvoy{cGIEDDJMRMSOPRMOGCKJ\Zë¹ecurwçîëuåéóukwlç’ËìbWs÷¦þky|zãtçëì~ääååbix{åxvto`a`fo^grànobR_tnYSWWKQ]lvOUêgQ_aUgèws½tqçcwøœx<äÑÏí]½êitàâu½}lyûß¹Üîpeäéûêëíãàxqìíeadhccagó±tv­œyå~oãvóqû¦¹›Û»»ºÝüú®ù›Ý¹¦½ô¶Û²ég`ctm[`Zaqüxçåsëç|zonrvpu{oìä}÷ÿœ²rnnqrk[tg\gnsokhq|êìsSINPADNWXPRRNORECHV[Obôèlhvyuü°ã¬²»èmNëùéjú¹ófçÿkztussàâ|}ãà~zmuz}soh^[\bfc_h{zäcerfXKBRTRSRgW½^JegPLlhkíéí½þvÿçå½ìÝƸxNOn`c|Ýüœïhcþºûxóà|tàìêûììåäày}þÿâûçeaiejdXgâoXlmjuksfü¦ž›°Þ¹±±üà繪È´»§­éìw_[hcNU\g_xsgküÝkoàtmrtyrlüûïÿéíåfnfrhokrrotumijhqyàäëaLJOG=G[VOMPLIRHHLQ_T\›î]_oâwã¾×‚€®Þ©½Dræ»oyîlRqjmwwnndzàusrãxââãw|½q`^YUU\ol`djüp{atbD[pTN^XYiUàÝ[F``u›žê½êåyàpp\zç°¥ƒ´ôrE\nsmú¶µâksîþshgx{û÷îí²úççãytt|ã}èüilnklbaonxçt{ã{óåíß›¹Û¹›²üÛüçs~°åž¸¸¼øÞwy÷ãdhgrvmû~uunjjë÷óè½souytdfzííäwhbhgkmqrsdkoidkhlmtosçã|UNTQCISROLORSMMHJMR]a|ÿêézüùΉѡ˰¦°HAùvcì°wskXãxXcãtjqvvâ~tãììóxàl^UUVWZlpgnyÛzhkqmROktUSYW^ièê¼ûTaawœ®ìmnrþÿ­Mhÿ¶»¦´¯ÐÁ÷xnnžìzXmŸ½bkxmrà²ûí²÷ÿêê}{yqmilitiqmiunuvzüÿâóéêäú›îè|²Þܱíéå|lqdrµ´ºÈ¸®éÿŸêçéêàtóàíztiîÛÿ½àuhnnidlbqwf_grlhSegnbb]ldggfhuxoãçdUKIHPMSNOXSSPROESGbb^²Ûè̅ÉߊҪ|PrŽ¦ó~Üøéþzwéàekzpjk~à~|yóïäçzsj[YW\ebhpu{åÿxlq]TH]aNQRUc½»«Üÿ^W_`gxoYRwþã]`yûî¶üøÉùùú¯ôßç]K`àlYenuvííëÿü°úûââà{u{àspqmkpkouuóîçxz{xyãèž°yéqãí÷±vyå~kp]R忶§ÌÙ¬ïìÛþíåïåtäíâíëÝ›û~sàwspokoibexh`lnife_]ea_]bxkgkjbhlfjrywWJISQHSWRSOPPQLITLWbZå¹±²©«Ž¬ùþ´ÖÂûü­‚Ÿyîúó}¶èïêxiróxifwyqwqàv{åóq^XW]chhpvzóäåoskZMbxTEQZv©·Ï¿üVbqkVHMS|ôâYdèâéwœôw궒¹ó­ßìé½çtVg`S_cjwàízëîç±°ûâ½ózóótjmqpvqfswã÷üó}åëóx}«þã÷þãÿí÷}zîvgp][K›»©”—¤ñíÿóxÝ»þ°œï÷ܹž›Üïsvóxkjcs`hnf\cmihemqc^co`xxafoncddgkgm`UQOKOPXTHQRQGIJQVVdU`±ª°ä¹¿€Žœ¸©¦‚ÌÔ…µóÜxqîäàtfW|ïkdoywhqu|owàïucaaegcpsv~ãàåxna_QdwkQPbhvÝ­­úîcbpvcVfyúßäâݹôÛŸî_hûëclëŸhoûïãìègbebfpë½óêþåþîëê~xxpiogkyåsrrààçÿþëêÿú°ë²¾²çìÜüŸ½~{nån[pdYPQå¨É•öÕúë뜲ãßýœÜéôæ¸ùºàp}hlwVg\muohibjwwkhgXgxq{g]hm_crbYcqk~yTaUMYTUVSPMOGSIORYYTYj÷°ü®×Á­ù¶¾Èü®§Ûë»øêineapdwày{}àógatvä}{úleffdfcps}íåx|zdYZPJLLNOarqr›½îûþsWjìp|»¦ßçwüñÁ¦WvwyûÝŸçãÝêâéâÜîú²aandnéÛèëïþå½è½ïâuuvrhtrnà÷zzê÷þúì±ûîì°·ªüÿè÷±úósâx}r^gaU]CaÊžßχ¬­ôçéþú±âyî¹ñ¯ºìvuhyÿp]Y^fwpilrzxoll\\ausb[ciaiwsjefoàÿ^lcUZZYVYLDNOSOPPVXX_Tpûôº’Íþëèû­åžúûût|²àomwrkks}~~{uó~pväïí{hoj_X\c~çìþó}xod`STQTOTb]elRjoìüÛþt~zblûékàíܦlJþéû»©È€øÕÒ†™’ôžý­½o~ÿßßÿ°åìîÿäèêüüé|âógeqr½êß÷ìãþ±çÝÛìû±ýæºÞ¹îìܱëþôzxvbgbWYJàžóô€È°©øzëûçãîxl_ç°éçrssevãqcW]mtlkhqgehpfa\aoiX_a_cbà¼~_k{~f[bSR\YYXRLLIHOHIT]_Z[Vtúúª§ßél}è²ëÿüââê|cå°½k}|npmdWZkilþ±ä|çüq`tqe^V`yêîä}èxj`b_YZXWmybfdHa|îî±ûïëb\]ayc䮫¶ìÜèV`½½ïÿçû¦¯áÏŽ¾ñœ±úé½¹ñÛå²çäßÞíåüééÜŸ½xnltå­ê¦¹äãêî­©©Û©ô¼¯¾Áô÷Ÿœ»ºîÿìbaX\`[IÞø²î°ÝžëìçüŸîìäxèœÜq}äã{vìäxpsjgrsknsruiqgjn``egjba^]|íuro~rp_c_YVZeQVPFPLSSUVQ``ZR_vè²ý¶ôè¹èçì¹÷uxíåiê²|mlln`TR]ZTZr{upxëìüvcjjiXXk{éêèéàvgZ\eåüãóåtVjoMS}±»ÜíìsQTZg}Üœ÷wQq_g©¯üíüânþ€æùÝ}{½ÿÛ°÷íÞÛxå°²ú­›ú±¹œèw|ãôñý©ÝÿÞâÝÈžæø¾ù ̊¦ñ©®ñ¸Á¬ÆÇ´rg]jb\R}¨Ÿ¶¯þÿÞvàîüàyàßžqXoãäuutt`gwvu½äh]cgpqaedqXadkiV_VbwkèäpiqâlW\[SW[^XLHLGHDRTTU^c_bZZŸ÷àŸº¸xjíüxë½bfS\wdZUU[[YUckdbbkpãíüêkZidTbr}èíév|pk`S[cltiPHOb_ZP\éwzÜŸoLQtdXŸ­üâÞÈçCbiWkí¦þíÞ|l}qäí½ëçàí÷²ûñÓÈúûãܶÜÜûºŸsüvx~±¼´­ÛÀµ§æ¼®ÇÓšÂÍךŽ®ý¨¶Æ|agbnÞÞhüžŸÜ®§úïÜݽäé½âã}hhiit|ÿîóâypzàupsmq⦴TKTNS_[mmij[nqqèÞ÷íâãäl^\VZ[`]RJKONKTOTTV`ihcXiüçïû¦¸ü{êû~{íú{pãn`]ibdiVachh\ijm{kûÿŸbYnmptr|}ãëuugg[ZaZQXZ[XFYmSWb`]ìíüêP\úœ{Pêk½¹qm^÷éxà­©{jwÛë÷÷ÛþûûŸräž¹æ©ïsÝ´Ÿèܸ·ž¬ßtêºýñÀ¦¶ñµ¸¯´¼ý€Ì«ÂÁ¼µøºµÐÂÜ’Ïãki^àøúYkÝ­º»Üëäây{óuzàwvsthueé÷½­ïsxi_`alnbêå`Zxr^T_mngkrvstwyvå~âœè`fYXd^VTOTPSOLTVQUWTfjf]Uk½º¦Û÷ä}ibt~eûnmoe^hgfgaW`pmXbd\âãœzZqxppkkwàëó{{l\\XSTSTQUX_]`RiZUmmñÜR|Âì>hbsp9âߟìªïïé{÷¸¶ÿœ­Ÿëã|릻ýÃÆÀŽæéúœßÞ´§¼È®ªþ¶¯¹­¨ù´ùµ·¬¶ø¬Ñ¢¥Â¨ýŸ¹®ßÞ¦À´¸ý`Ÿmlcwà[㛲¹Þ÷±»Ûoåx}vãuóèxå|fwvèî÷²àfjjgcP_u\Ekoqã}m]Unpdops||yçü¦ÿ÷¹g_caa`ZZVNROVVXKVSOQbupb_\l­È²ëâ}êä~àufNXm_[\][demaivmrebclxäÁëeqztlhr}èäyã|jaTZSUNNV^[TX^YamerV¹²fåÛ²ãNP^]Zú÷ìiiåàXcv~±Ûã²¼¬¨Þ~겞¶€ŽÍ·’Ž¾žÜ¼¯Ð€µ®º§¯¸Üî¦Âùñ¸¸´¼ø·Ó‹ÍŒùœÜÛ¿ùæÊ’¿¬V€ªo^hieîïßœó㺺ìózpäzpsãtouz|yvpêüûv[]qw_[oܲOVmlxweqretjujóäó~Ý›êî|[bkc^ccVXXNSQKN[SQXclnf]dYZà©üŸþäì¹äÿmegeacRRQ_hi`_fjlvcó{p¦ßulhbksyxyâ{êzaZ]^PVWOfb`b_aZg_ot[nºôú­ÿyMâcjݶªèHcâóeEgiã¹ëø’€ñµ®Ý¬¿ÅÁ¥Á’ÏÁ§çžÓÔ´µ¨žžø©©ôÞ¼¿«µ¸æªÏ„ŒË¼Ü欭æ·ÝÅśͯùñaqklà›ßÝœ¹Üïÿéàzä½äyxyvv|åàóhncvqdvzä±ì~äÝñZVZqsjofcfnrrytuw|~û¹¹÷ÝwfiifecbZXRVSRQKNPN[efj_\chhúºŸÞþäîúêèykŸœ`_Z_Z[alnrifwsxo{Ÿuijlyzzyrurywf[bZWbSZddg_agae^xokasÝ÷|jeXda»®ë|°ä]oywêâqarÿœ¾¬«´°®¾ÅÆÒÉÓÉÍÍÀÑÆϾ©¼ŽÇŽÁ涞®·¶÷¦§¦ý¿¾¿ý¼“ˆ†¡¥Áýùß»¿¾§Ç¬ÈÇ»ùûcxiro޼ܒ·~å}vŸîê|ãân}î±éèéZmv¬éuQt¼¶ã¦vkluà59WyjŽáH9â»þyo½©ya``EG4m¬µµøœo]íú¹­ÛüþëgVFie[e}à]Vt90ãlOitl\l}Z+=\Ǹ¾辧µªÝݱso½ONjOdNrtFµ¦ûà°bUie_fh\pâ}êzWUf_TcUMQizbT~ãlhv}zyvówSatàë°²›º»íXXt}r`FIYbzÿ­´®²ëªƒ…™××™ÐÏÑÔÉÐÇ€ÍÆŽ’ÂŽÂÅǧùÇÃÂÁÁ¨¨ÀŽ€ÇÏÑÉÒÓÒ§Áßžæ»®ýßžÁ€«Ý¬¶bý¼Lt¨’ŨRWcT÷z[ >¶Émé€÷S9åýFE)GVeOteKjÞvi±´ãaL:Á»êñ챱ﱟÛܺ¶ºZ6N›jPtwdjYTkmeìycp{vkor\R:p¥Ï¬¸¾«¾¬ùú««SL{«a-Vi5ª´›yrëßxeUT^`egf|ì|_]le[^ZVA[cT_åå}rtã|{àh`Zsìê½íäó÷¸ÜLPZuq\ACT^c\~ÜßÝë~ë… Õ™ÊÓ¥¥¥¥ÑÑϬ€’’ÃÅÍÀ’’€ÂÀÂŽŽ’’ÆÇÅÏÒ¥ÒÒɬøÁ¾º›Ü¦·¼¿]i©Üy껾©ªµ¯gåµÁ€¿ÈýwThk8[Z&Lníôçîâ\1 -Rez²yU3knnݺ¯¿u][ªùæMø¨Üç²ÞÜßÛÛ»÷[7k§N%qþ]fm_g~nâpltórrtq]7$&çÉͬÂÁ¨¾Èý¼V8fn>Cäµ< ,¶¦rçuoºª½]NQdp|ewâlixhXcfhS8RYN]â|}~}}glzóé½x{tXóÜyJ[FRGPI=BMXEAg÷°m_yáÌØÕÊÒÔ™ÑÒ¥ÑÑ€’€€ÃÍ’€Ç€¿€ÃÃÃÅæÂÉÏ€ÀÃÅŬ¼€æ¼÷ì4CM@hpp»«ý¶¨GFs´´’ÅŽ€ùßêyShh±Ë¼JV]è;#r¬®å}`[{©zr«µ²¬±VBÞªéutì¹›žóCDi:ãt'UÜoV|ÿ»ão{lnóåîî{k:#$pÉÍÂÀŽŽÂÀÁ§w(ArU1õDmåêå휱åkbWcynkrlilejmhf\@H[^_xàâèåà|vâä||½èovkCuŸv-:-6>P_VJGNO>?tÛz`cÿ áËËØÊÔÑÓÒÒÑÍÆÇÆÀÅÀŀÃÆÆÆÆÅÇÇ€Ž¿È»¶Èª»ªý¿Á¿ô›årc2X_êRC`ç¼ÈÞªf,c·Â¹ŸÑ3j®jñÞ0 Q%^ØæPChäNZyåì¹ÛävãzPX窷žÂÂøGa­Üvn﮼V<%E°NBc"y´üv{ìîsxàfV]­´À²«Â¾ßý¾ø›½q©ÈNY#}¼Å€ÆŽ¾Æ¨ÿ»ùeÝ´íý¶›È»½ôtfht°êpí}dfgtàtPPLYHRaGGfkóãèèêÿîéåoU:rôßë~oUKMLZìûÿ½{rl~ëôôã{äèèç{Ã…á×ÓÊ×Õ™Ôʙҥ¥ÐÏÏÅÆɥϧµÈȶªžÞœ¼®æ§§·µª©¦¼¶©žw©Çó;r¼Þ{©¿ÁÏæŸÁÉTõRëñ›[ii{™¼CݵD]_Cçï;"4i_hEyÞ»stzK8[qýÒÏfÆôúü¾¿ßŸµ«®caìC·zhKa¯ïLK@\ꫨÒ´©ùüUõBcfgõ - ;â¥Ã¬¿ÅÁdZïtéãé¹›oÞ­e`iã~ãtäçsg]{éhD_LWOHVLixvìåååoxè½èvZI)<çÛôãOTxuperg{pcKlÞþåž°yyuåêìxÜ …ËÕ×ØÕÖÊÊÊ™ÒÑÑÐÉÏÏÉÒ¥ÍÀñùýÈù´æý¯ù¸·ùÁµññø¼›·¬¬ÉÇDݲN/k·’ÐÅñÐÇj)Mät~µ´ÍÇÀ«bl²Ê=Zzëù´åMHPzrågPlIFªÃÒ¼A§cXܶ¾¬Ü²¦ªø½/^!\¨­±[¹’œŸ­µ¨ÀbhÇÅ«ñ®aK`H_g]ÑÍó›¾Û¦ÁÀ¨§®ùÝâûøø©þrôÛ½UMjèï}xurjtz\MTMHJ][[Rl~çíåw\Vó~zjD424$qóîí1MÜ}xjQg{Zddåí?oúÞåä½þîꛃ áØËØØÕ×ÖÕ™Ô™ÑÆ¥ÉÆÉÉÇÐÐÅÁ©»¼æ´´¶ùµ¾´«´æùýÃÁ’ÇÂÈîªÛÁ´È©ÂÅ©¸~Vóàgâ÷þÅÊgýÔ¸ég_[F@èŹwãíTK>DRSWwøÛ®Òœ¼Ñ]F:^üœ±ºñ°ÜùžÝyeâÀ«¯œ½pô»®€’¾w=BngnYBè|ãg꥾ÝÞ¾ÿXëÀ«¾¨ù¯·þÝ®àvÝœüs]PäâyåzbpìwJ`KJ7;däëyp}xy{gV}èïåY6EVN4uêxr&5ëmqS,FSZÿëçû~Tfå·¼±ì²Ÿï²…ƒ…áËËØ×Ø××™™ÓÒÒÒÐÇÃÐÒÐÍÏÍƾ©®¬Àµñææñ®µ¼’ÍÇǧ¯«ýÂÍùÍż›ŽnSWº¿ÁÃä$MvÜíÔÐÂÁù0\ÂÏÁSF7,ThlZ@Mè÷Ý’ÆÆyøÆm*un°ç¹®÷ëºT6¨«ÁŽëDãoSúãZ- <7?nÿT Aã»O  PåýÈgÀž¬ø{²çŸ­üží°ópa~~éà_Z_}àsjàíx\VVPILp÷g]fUMbhO_êåãèsìþi+LoeY7&Kg_/ 1?%VvFNqxikݾœÝô­©êÆ  ÌÌÌÖÐØÕ×Ê™ÔÓ¥ÉÉ¥ÏÃÇÏÃÅ’øæ««ù·ù·ù¸ñø¶¯ø€¹fOOè»`üÆÁ’Ñl:¨ø±Æ¥Íl ?¶»è^G»Ñɵ¿¥A°Ñ¯·ïYh>WT"Odxsû§î¼ô§XJVÿÃÁÞžº›¯¬ûrÂý=u€’ÀÃqµÈRIB à¹?ìß,}/t§ÇX;TEgë)e`{¾ýݱ°º}ßùlM%UH7AU÷vcjrqââvca{zpi_ZQP]gkZIRw]5JXxëäàåóàîçp@/(5lèk@(+YwP&1õ-,gžªÜ÷²®ØÍÕÌÏ×á×ÖšËÖØ××ÓÔÕÕՙɻ|øÊÑÏÐÇÀ«µ²ãavùaMês°®€Å¨€¯ý¨ºŽÐÉv¦üÇÅÇä>I(0ä͵ǙôÞÀɥƀé|ßR2ÿ¥ãIIYl_C'7aÍÖÁ\Ã}Ht^À€®_LÞ´øª`/[ê4€ŽäuhIUj[fº:)åt:ìrStžýíf`TY| Ac;sƾ¦ª®Þ¶§ñ®ßÿ·øè©æ´œûrf`dYp~q\zcWLAWZPjV^>HJ:eçåézd|½qw½ïŸ°V"1dçP05ju_-2"&Z½ípWUyèÇá«Ó…ËÔØ×ÕÖª¾×ØÒtôÕÔƨœoÉÊÓÐЀ«Í’ýþïzUv÷îȺº­¾¬ŽÏÑùY©ÍìHvÃÞÏ™¸­§Ç®]P#[æéRGçÐæ·ùÃÉÀ€riíy+;]cOJ`bQI'H¼ÈŽ×·Lêtilhjž§±æÀ¿¿S-_i­ãüñ[YdCeaãŸÁÑqu×Æë}néîhh©§œµ€ŽVr½e8’xcÂÏûLAo`W¶çNú¼ÇÅ’¿ÇÒN!%/2w€ÂÁºº­ª›Û»«¾¦›§È¹ócnidd[fzkYWYfcIBXP<=@Efà{zewèég;6K>z±ê²ÝäD>}^2)^kkcB8)0ð - - nótnl?^íî­¬€¯¯š®ŸÓá ;] Dvèwg|üÓÖ×ÕÕÑýÐÖÑÂùý®«À¿ÇÑÆ’ÉÑÇ͸͵Ɵ^ìä½m[ýµÅÅñâpŸ¥Å¯Ž¶tÔЧ¦SKCEìÜHSr}ßÃÜxjs²bT^\àóPPlap´ºoRÜÜ_ 0WãpGT}~8@Z$*½€ô²tí²ñífãu* - a¾Ãñæ’Àµñü¦ß¼½²îyyhor]]o^PJTcOI[XD?;âàëykccgWD9& (këzqOGjèÅÓý®s[kTAêÐҧƻ}q7ð;WgwâdVx®§Â™™ÔÔÒÇÐŬèÁ­ÑÉÇ¥¥ÈæVzÔϬÁ«å¼€½09Mç浨ã-€ÆÆæ~k|ìûÀj+HJÿ¨u/9T½îïq[h^u{'_Ûtf²Ÿrñ¯f`uw ''d^]x\qëteÈ´X@EACJWVH7>LTA-1=àxTrâääëzwëïíèë±îóy|ÿ­ÝúÿàéÜîà÷Üþëäo?4+V®­êŸûêùÔÙÙÌ™ÒÇÔËÇ¿ÒÇÑ€ÀŽšÔý«¼±ýûïî}ù÷æ¿ÑÓ¥ÑÔÕ›@ßÒ¥ÔÒÇÑÖÍ÷í©µdVv[Vý¸¨À¾âž­ºÉжl`RhOá wigOg2%N _ê÷ëè꯫óÈþÀ€·¯ÇÈÐÒ·_óØÝú®ÿdÛ¾’÷OVôþpTžÛUEtJ/EA"-G-iR'kÒÁãÖ¼MÝ´déëóã_`a\c~Ÿþ±êghTM_`SIS>+KuF1>Eë~Zx~eaultè{vhtíü½Ÿ°ìéꜦ۟½ïóâ²÷ê÷åe_Q,^Þ|mäúÝКá„ÙËÔÑÃÓ™™™ÒÍÏÁ¶ÐÌ¥¨¶¼´·¿ŸÆÇÑÑÑ™ÔÒÔ׺9ÓÕǾÆϥɟñÔ`\Z/Bçî´ÒÊÉǧjqÀ®NLuArvÓnÝ×O)n5$.-#8DTbô°ôÈù¼ªÐÖÇÑÆøŽùŽ«ü´ÑÉÏ®©Ãê{°í·ÅÐi W{yÒWÒÈTŸÞzlð,9*L% 7z<t©þ¥¥æûzrë°í½lcdfaTWtú°âWUjvl]G7:Tïpsr~©è{íxSf|våîzxr²ôèäÿ­¸´ä¶žÞŸàc|ä½±ìo17qsisìäiyçßš ËÙÙƒË×ÔÐÏÔšÔÉ¥ÓƦÓËÒÇÁ­ß¸€§Ž¾¿ÒÔÕšÊZ8Õ¨è~syù¸´§ÿÑžeN?orÒÝû¶Íèí¹ÅšÀN!ìè'2ir3œçù|1Rñ½¦À¸œ¸_L`vϨqdTÂÿ§ü»Ò¶(ø€¶œ½°[UCTkÔǵ€ÂàÍÍÏG ! õ,# 9>*hWmìGDã5ð!jüÀ:FÜ­ÃïDjÐÁ²ŽûÞæ­îÑÒÍÈ»v+EëÒøÑLRæ»/ õç­SjBìþa\x^VoýÊÇZpaUf[Z[qú±ÿ{aäï;9P©øú{`QGLF7OOFcãüééãîìORqe\~îëëúéßÜïíî¹›ucrìßå›ôzþuraAw±l9wÝxçî}VXbцš×ÕÊ áƒËØÐÓÕÔÌš™Ï¯ÂÕÊš™¼ýÜ÷}måµÑßÛЫy`x¨Á}ýéw?lïã·Õ¥ÁÉÅàdÒÇ¥Àµ¾ñ¿ù_fÂ¥Ãv&fWîŸ÷oxÏ¥}c[pëÝàîôC:;ë¼íxsnZSdlgfp½kãïYeyj`]H>B|½ääÈîÞ°½÷±±®êennwþÞälÔ¸ÅÛü½þóIQ|åóçààât̆Ìá…ƒ…áƒÌÌËÂæ’ÔÔÓ™ÑÓ×ØÊʾ«ÀÅìäzžÉ¸¿¯çŸô»ÏÌŽ×X´´ry¾«©’¨tÂiÏ¥`ÑæǼ=SÔ¨šßÁÏc0`ø€h^X@Suךëõ<Žâ&ç|AfU =j^°ÏÍŽÁÆÂaHÓÔÍÏÒÕÅÀ¨›µÐÒÉfQ’Ò¬ÆÍÏœny,  -I°æ~aOwE -\º¿äЭh°æ¬°tpvgûaïFB,6caYfh\YtH"LZfOuw1,6>0$1&4\P3<Ÿ¯©|{ÿíªÀrK²ttt[ÿÖÌÌÅ°¼¼µ®xVjÿuånÉ„ÐჅ ÌËššË˵ÇÃÀ€ÓËË™¿ù¥Ð~h|piìÃk{¹ÿ™ÔÕÀÀǯîì·ÊÊʬ±Ñ€»ó¶Ï¬¶¯Â¯êL`Ž¬ýlNÓÁçcåéâ\[­îOC/00'WÌå°©S ððo«çé!½P9ŽzþÏÍœã¼VC¥Ò¨ÉÒÒ¥§uãQ:pfyzAÔÐ¥ÑÉs-ð -Dè·¼ûÜú^p''|¬¶äXLÛÛUUcíf^g]°­&.F;7?(:hq4)60&%.- (íéruëÿ÷´ä'ovp²ÞØÙ ÌÒÅžãÿåß×ßlåyàä±où̯™ … áášØÊØ™¥ÉÓ™ÒÐ¥ÓÖËÌÉøÿ Q^EoñdPݶršÖ˧¾¥íbàÃøך´ø×Á’É¥Á±tgnt¦Æt?WßåZôç{ÂÔœuíf0D+%Mêº8Y-R÷UW½åQÞ\I{ÅÔgsÓÒÇûÇ»ÍÉÓÓÑ«d¸ÐÉ…ÊèsQëʬ¨Ñê2$'_äV}ÿž¸ôžV?WHA$ túãïÞêYhÈóìÞiQe?Zûî8849=56C?:Gcg+-/:]a]9㹺ŸY69FIK.$,B4JãÝúìÛf[㻇ך…Š„€¼åœ½ãËš»²ääô¹ÿš‘Öš áˆ‘…ááØ¥ÖÏÒÕÇÊÊÕËËñê;\VKÖ¯¹åbçÅÔái}{nvë`ãåý͵ºüåÏØ™½ÒœxúñÜçßøþ¶æ±ÁÓÏÒÊÔÒ¶øì\5r#÷Þ8B3EŽ°T_|lljMw¿xj»©øÆÕÓÏÒËÈD­¨¼ŽÖ¯èiÉÀ¨Ô¼3Z›Üåž{x¶æV $#6+izviSzçwãîcaürXeWätI%+1&09?9+1K^S`auyLD*5WuÈôèéoesîf=1=:?yžßÝÞ_‚ˆ‚„Ç׆ŠÔ’ùª®í±Ó׎´ù´¿¶†Šƒƒ†šÕƒ„… „Ùš××ÕřӥәÕÌËåz+ìûKo·æ§ßtEq§¾€ÏÔÛîe&(QZsdot|gÍ¥§¼säÛÞàv¶¶êxó°e>ÏÊÈÖÖÔÑ™¿ÔÖÉ¥º¯ÆîxwäñÅÆýÂÑ’·ûk_[o[&[€¥ÑÀÇÇÓÑз_üØɪ®×ùñt+yÆ™šT=rledyîþ%5GuèŸþótdnlPëôm[ZpìwGR>mpu_DID0-*2FUeqääàfTM@7.k²žÛ½óQkèzZQQ9h­ª¬žìù‘Š…Ùáá‘ØÒÖ»éíì÷ªùÏÔÕÔÊኑ„‘Ë×Ì……ÌØÙËÊ€ÁÓ¯¸Â¿ÇÇ°±âwßÑÿy¿Òŵwa`Þ·¿«×}½úGB T=_üDZqbtª°›’ý¯æéàóg?eÓ›¶Ê¯§™Òøµ×ŨÑÁµÑÒõ¸×ÕÍ¥ÒÑй±ªžéo]ÝÑÅÐÉŽ¯¿¥©Wâl½¥væ¥pFnɲîµýnZC õe+jÞê9=K=yçÁ…  €~úªàpyåk`M{oko}xse[bRH>7@JhXIyëólrL089KGTlçÞ°^4{çwtpWuÜ°¾Ì×Á×ÅÊ˃……žƒ†ÃØášÁÏÉÓÒËË ×̇‡†‘ƒÌ…  ØʆƒÇ¦ÀØ¥ÃÆÉÓÿ¹Žôü¨®uvûŽ’¸·÷jJeçÝÛºdYvToULþ÷ç^Olþ}ârRÐôÕÞå~ê*o¸µœÃеw晀̀šºã×íÀпʿµ¨¯ñ¼ÉÊž§¯¨¸Â¥·r÷©¥ÑÀ¬«¨yïý¿uaeu\^nÓdݾngûH õ"9õ²h  -Ÿ¸ãØ’´¶žîqãê_nzþŸëvruttdJ?DVMVT[^FmãuaWQN9.IO-Aþu=AO;PgUh½´œ»ÒÏÆÓØá ‡†ƒÙÙ‡„ØŠ‚ŠÙŠ„ÉÂÑšÙ  ‚ŠŠ‡ƒËš…ƒËÖ„‡áÑÀÉÕ× ÌËš¬wºçu²°RNèŸÛßÈçUXcZVw›h#"yíb™áÙ€èéžÔíaÉŪÁxzæXâ¯ê¹™Ê÷ñáÒá÷S¿×ÕšÑÕšªäÀÑÑÐÿ¬ñœ¦æ¯ÈçÿåýÍÑѾ«ÂÝû¥øÑjKôÊÖôO@¯ØÓƒƒûw*)6NZL - -  [Dàßœûéh\ÿÜkpêíìëyokmjM@HCO[`E5CWMrscK[]- (1! (G:+" ;1BZîÃÀÊÓÇË‚‚‘‡ˆ‚‚‡‡Ø„ن‘‡„ÖŽùáƒÙƒ„‡‡ƒƒËš…á×…† ƒØÖ¯¿ÓؙȷÒóV{êì¼ëiž¬ŽÃ¼zsÿvtŽŸ­~jíÒQ{~P²s±ÁÔÒsq¿Â¬éÁã°«Ãü>v»zþ¨Ê×Ó’Ï¿»™›ø µDãÒá …¥øËšžøÍØÓÅ«§¸ñ浸Ž¿Ð¬ÛCäžâªÇÆ^-ÍÕ€ÉÐ¥Ó½ ½®{ÿ›¾Üžø=&GO  Aú­ëüÛvafûØŸjÞóàâ~ykqpK>EISM^kQ72YctwL(!.-*%%&1&/0*60:;Cû×ÌÕƒ‡‚‡‘‚ˆ‚‡‘áÖ‡ÙÙ„ƒƒ…šæ|íˇ̅†‡‘‡…¥Ìƒ×ÖËË …ÊǬ¨€ÍØÅÖÌr.u®¬ÒÿÕÊšÉ×Â`TûËת¦ÊÊƃxeÑÔvZU®«k1uƽ^±­¸§¿æ™¸YfÆ××ÕÑŨ¾§øŸÆǨ¨¶¸Õºx¼ÕÒÕ¯ÏÑÒÔ¥ÃÉÊ€ÅÓ™’ãék1eا^?Oìɾ«×¦Q7å{7BcQpx6  8aE -õféG,Uzîuä»ñâs¥nm}~kodTbPAU[Xkw]_otvoG6/  )!&(.A1(.,%-052[¸Ó…‚Š‡‚‚ˆˆ‰ˆ‡‘‘ׇ‡ÙƒÙÙƒÌÕÿ^ó„™Ñ‡†‘† Å™†áØšÖË„„¨Âš™Ê™™ ËÿE÷Í›ñ€ššÊÖùªÅ­Uder¬´oTwÑîÊÖýÓÏßÿºàuüû|môçÀ¾·ÀØï[·ÔÇ’×µ·ç­½±ÇÍÒÏín¹«¨Çظ_r´Õ€ùÊ×ÖÕÏÅ¥¬œºÒšÑ;uÛœýdVâm_€ßßÓóºr+zCNüK>G@7,. R,+`Ûº°u_{owsàn}l]fgvrgRNOBPóêekêxoäo=$.&+2CFD1?<"+UZWQd°¹¸  „‡Š‡‡‘ŠŠÙ‡°Éˆ‘††ƒ† Ø™îlíÉËÙ‚‚ŠáË …á˾ˑê«¿ÊÇÆÑؾ¬ÒôþÕËÖ«à«š’ÒšØoMÜšáØÏêxÉÕÿê’Çß~g꬛Uå¶î¬Á¬ÃÌñWçØ¿Þ¦ÂøŸ§×’¶ªÒÕîk±žý€ÇÑÉ›Ýñ¾ñ»Å™ÇÓ€·¾ç\qžÖy}\àf IqsÀ¸ÔbÊìnÒqgr\s½šµ_%;2/$*BA0 ElyBPaìÛøm Uà1ntva5MA<;LfYV_VDKpK=>dþjãûi>2ObftãyS6(%'7YFXW[ï½ã­¥¥‡‰‰ˆˆˆ‰‡ÌÁ’ˆ†Ù„ƒ…Ô˃só®ÞÇ‚ˆ‚ ¥«šáÕÀÇ×gÛæ’…ÓÀ·µ’«våÌÕÔÈ­ñϬí¨Ì×qxך״boär·kuýµØÔsAã§0TØÉÇƯæÖM<»Õ«¾ÍËÀªæœÞÜýù¬Ô™§»¸ùÒ×ÖÊ¿¥¥ìz¦ÀÖËÃz~xznILqoFg)Aw`Ü’ÁÂvê.CµÖÊÖúë¥ÁÃù6ëq,)u8TC  %ftu4 =yàÜßd9WQdde05XUc}~p]f\DYg_63B0UWi}âystdP<2H=)1J53*#4@`îâ~©æË;ÒËËÌš¸²×ŠƒËÌê°¸¶ówú¼ÿ¨Ù‡‚ŠƒÖÁÃÍÌÖÔ…µßÌÌÊáÅý«¨ÃìêÊ…  Øá™ÅŸêîþ½øzRãËÌ¥ê²sµªùš™àÞýMMÛsH¶¾ÂÍŽÀ¶ZV¶Í¿¿¯ÜZc>812Z½u92TàÏ×ÑšCPçÕƒ«ùšµlݾôÿxx?Nàì2 G?)nZ(vÛ `XëO).kwm´ÓÒì[îôžô,>&81/iìN'àukíþ^!6AD4biwbbkvspóâfbjVetëG-.+7P\brymåóoQ7>FOKVY[?4TcgäíyúÛÿ¹™ÍÜúêíójH\]#T Àù¦ªù›ì±®ÅƦ……ƒÙ …ƨÁ·¯áÆû¦ÑÔ×רñÅ’ihÉÖ…ÌÒÏØëqGbfHM%Zû«ÇÏ’Ò¦ßìnWP@=üë oͨ€¨èLd°ÅÖ™ÁuG^taD#Nnb`°çÇ×­ÝÛÞ°Psƒ¾zÛ›§»bnM][7Ÿüq\*8‡ZvêÝ°ú.µ™ÓÞiüº-qµx2#õ 2'PR;½HMK>C<7N9=TTaM?ió{gp|njehgMFk3074Rfuÿâcqºèó|8'//FE9;^k@5q÷Û¦œîä·ÌÜݯšËÝãÜ›Euƒ ÊšÐ’À­ÛëxrÜÖ€ÏÍѨƒ‘Ê× æ}¿¶Èÿ¥ǨÏÀÅd:­‘áËÍÈzûüíªýÍÜhl_"Rfp«ÏÂýžÜlQPB½ŸTaø¿Ç™š…ùp7B÷¿÷c¦ÁÒÂù«ÈQ_g(qå×ʹ¼­»¦j^ì°êoüåxí ,3??$ 9æ’ÇÒk±ÒרÑáÕÅxR¸ñeÿYâ}ß_ -/$ -'4'þQ! .+%,2:M_S^PHràq^kxklg~y`"óO(.'Tï÷Þåtï¬ìèg6,=FF@BVLDA5^qo¯µ»øÓп¿¨È¹ÿÜü©UãÊá…ƒËÓ’±úç⨬ÕÔµ’‘Xì…Ë·ôÀè¿ÓØÌ„Ã4NØÌ š€Žïîl`ŸÌ׺ï¯ëï»Å¼€ÓÌÖºkrŸ­ÕÔfpÇŽÑÖÓïѬíZ6p¼žûââV4LcN)Câ\'sàru=ð , 4G,õ  -.I)B,ð - A} šÁ=Qä¥Å’ÌšçIYoäpd {! .15|X#,*39CxósX\mj\Tpâukcãtk)Lf=3%9ÿßíî½â®~vNkY$+8;8SQ:3Dãàÿ¾ü|鸪É×ÐËÔªÈ|V_UµƒáËØ…‘ ¥œãó¬¥ÆÁŽÈÞ˸ÛÏÙšñ««¸ÆÕÓÊÒ؆ o2gµšØƒÌØþ@]ve€ÇÁОeþºնœÒ’«ŽÒ™ÈóuÒé\hgúwü¯­Anu½ççgWT;F<+OT+HJ  -õ"õ54)d|Oð   ð\܃¾ô¹ýѯÌj0q©eAQ_nlq[ ð$! _O#!*+.@39Uj|qv_k{`VâóbLçvàz(nN6;7[m6R›óÝåyIaûh-(952>Aàüâüþ¬·ß †‘ÓáÙŽÒëzf6눈…Ö„ŠˆÙšÍäüÖ…ÐÒÆzÁ§¶  ÕÍÏÀÅÕ… šÖ…Ò™ñ<^ËÏ¥ƒØ„¸5åzdÏ¥ÃˬoVàšÔþÓ¦…×ô¿ÒÓžtœÛ_oì¼äero^&Br[iè)92-1 ð$2* -#PR-#õ(?P.  õð u»áÃ)e…ÕÊ’R=°ÈªbbN;4ÿ¼Uõõð #-!#*($49769KAx};_½c3qyQ9iyrû:täP90:O8*ó|ÿ®äP=÷ÝsAAE>m½ç߲̄ØÒÍ…†ÑÔƒÊÃÖø½-MÜ؃̑†ÙÌቅÀ·¸Í ƒ«¿ØÊÔÔÖÌѬÀã…ÙÖôÅ˃ËF6¾ÌŽÆƒáƒ®´Ûè¬Ѓ’îàkñíÒµÞÉ맙Y¶}#bioåZeIJ`fF-ZQ]tkYc=187+-#1!##,"*7õ /$("#)'õ+ëpbVâhj;`za=F_=`vzŸpt÷~E65HE7Båž¼¹\<óŸ{tgB16[xz~Ýô‡‘ѾÁÃÒ×ÕÅÒ§f d‡‡†Š ÊÕƒŠŠŠÒ¯Ž«Ö‚ ÓÖ…Õ†ÁPzá·E´…† ?KÆж« Ù‚ÔÇÊŽÒÏË×ø¶k½wáù´Êb{xb3,XA\ìíz^p[_\KFIbwh5$#Fc|CGObb_i\S@F9,AVyhîüW&+)*/LDAbVFN=)8;206{r?  $`ÿj*1:d½µ’k%(ð(.al -%)!.o™Œ÷I>{Fo­üc{å鹨ô±dúzqpeNbkà›í©ú^`eu½nsçzóîÞüé°×†š™ÑኂÖÉÊ¥ÆÔ„…À~oôšáššÌ……Ö’š šáÙáµ­ÿ»«ÖŠ·bP© ×Ôá×|s™ÊÐáÌÐÁ€Óš××ɶñ{2NøÖØÿQJOu÷E><&Zã²)óÏôJK)DVZ>IdkZS@*!3m|Y000'"<.DxuKamT5L,GJ9?++'ð69 -  -.'v¡Ð8 $%ðõ õ.-uo&0# SÂÍŸX=dA'iª{!?bíïžšv»ÌƯºzâîeorawÇæߎtlzju~r|úϹœè¼‚ÔÓÔ¥šŠÉ«ÌÅŽŽ‰ŽN±ËÊÕÉÆჵ҄†Á‚‚Žøªœïþ«ýšË{cmÉ„ÕÍÌÝ|ÙϨÇÕÌÌÖ´ÑÌÌʹ¾iüŠÙÙ.(qïúY*FC`sþêV$ï­P:gbjrC5RINBHR*;JC(Jj#)%"0FBfaa^j½b7'% #3!  YOSr' õÝæ9 $"  ,r{9ð#,(*R:D4]mF@ääS "L±t’‚¥†¯rBiu|çF|ËÛÛ¶ótçvg{w¯¥ÏäÒ€¨šÓ¯ÍƦ¾„ ™Éƒâ,Iª¥ÀÉÏ „ŽËƒÆ·ØÙا¿Á·øçu^ÁË´Þk|ØրϪ©Ë’¸ÂÒËá Ç§ƒÙ×æÀПæˇ±yy±ìg6Xegâçåw]à DíbEfíâ{ä]"/hnV`n$;UkTKc+$@CLk]&+:`p9)VjI*ethc7P6!" >T2)a| ;l^8 ' -±©kX1Mó6ð2>-=jQz¦¸v++"sÙ ÷ûÜsVMH÷vèÖÞ¹¦zëãfcyxw»©¨Ê»ú›ÂæÞžÝÔñ~y×ÆÕºíA |ÆÃÉ™šÙ†Ò™ ƒ „ÙᎩݨ Á|ºÛ¬ÀØñïÁÉ¿€ÇÀ¸þ´Ø ƒ‘᧩ÿmvãâ{ïqÇüþ}FKiUhw^?8 J:opOdsptY7J][))5]akéV1Poú¶lX+0PcQGEõlm*!7Nipí­Ö¾ÿ»b|ó-  K) #, \,õ$õëc!#õOů»D}»^õ/:008BR"!õq×Àþœh4@Kci& ±ÜNk­Ýêeó¹èÙž·›csycYiv~ßìÒ¾ëéû¦æô~}ãÞÜh]èɾ…Öšµc N®šÔÑÑ ƒØÌÙ̆‚‡Ù…ÒÅ ˆŠŠÅPRáˆÃŽ§ÝÞ·ÑÔ¸»kÞ’Ìˈ…`Hglwv°YF0m\èe3FI\C/>B]lP:CîrOj{k5[t~WGð0Eüçm_2XúšÇÞÞkBe;_UJ/R÷{õ2,cºÝgkài±ÿuzg0V|(!  bf !"!õï·à+}ŸÿA7?5.68y|i/ -kåuû°`')'1&OsZã®ãê¯d<âú­á÷ZbääW:sœÍª§»êó身§¦±ç½éŸô¹ÊÒᆇÕnð(ã»ÒÑÏÕ¥ÅÙáËÇÌ…ÖÒ…‡Å‰†½-HÆ¥»¬¨¦Ü¾šÓùdí±èüŽÓÃìÞ¸ñ›Èp_@fn8c[-"C^dGN40eZ;3DJ7;hpä5&*5\}çU*këÝÈÏôóMB9h:uó~zd_f^4;8!?`Wãüíàÿí}ûÛHq"38"!"&ðõõ3i-'"&i½a|ur¼iCD2/?@DpûíU5woaŽ¬Eú{(su{ºúsßúOC䜜†ètq©»nQ󷎽ûéßÜxÿþãß©àzüúü¼ÐœÒ‘‘íÂ5!`ïÃÆÒÖ’ˆ«ùÁÊ™ÕÒ·¹Éª‘†‚†€¨Éɬ·¾Ãʶàdo¨ªúª¹Þý繺Ý|qh:k^Yiü°cZyÿè~_SV$cc3.&)P`F(4I!)R3ð8B.Xddÿaüt]#;>T0êâxÇØÈpiʯàBfmÃs4+09@8FqÛ÷]è¬kà‹ëz+ +&.#Uÿqh÷ÞŸîô÷hÿþÒ´©ëã÷|Rxµ·Ÿ±üìôèvsw{ïž½~žÓÈ캽fé‘t j븎ÊÅ„ÙÖʃŠŠšÒÅÁ¬¬øÔÃÙ¿«¿¾ù¬¿¬’üA\ËÔÂåglxf~¾ü7)Qcç½èïßúÛª®œü½r7GW@E!>óóx`#*VR%°° aID!|ïÿ{,4vzo-AVå|nCxæ{gènÌžVyóf5/s¦ûÀÂëÉš¸Þi! -(,%$"ð:5**'0Yl%"Ü©7+42?;67{²ý„}9­‚´}W?õ!ùôaz±øïæÓvþú¨ƒÜ~sºÈ^k­œ»úÞ±ü|oiëþú½­¸â¶îþžîü¦›ƒY&fìÜÀÍÌŒ‚Öׂ‰ Š‰ÙáÊ´À·¿À¨Ö¯›æÂÉͨÂôÛ…¨ÀÓüYPSstuÿ:?óadß½åéééôô÷î÷»Ÿz-17"4G(4E8IpZH -aƒ¶?éªÞg¬å+$#ü´oa|oÛÀócèùåqnŸœ®þóëþ°üúºïu|}äŸçìñôœÿ›¦àßýžôëÕ¦êåî°®ÉøæÔ‘¿ʃÊÙ‰‡‡‘䪒ÃÖ¥·µ¬¦­ÃÉ·’’¸ßÅ€ÝáënhF*Fjëeåä½éïüŸíqSWâÛŸÛ~^?F!8à»êäãëàûslv[bÞÿ0cŸ½zè{UIfqW\\$3^D/D;(5>/UŸg$.<*5qå±äóß×Õ†‘µSð !(KN¹÷ãgmZçÊjUêN -Vp<(9.yãb{¦þ6Fk/D<-"6;' !!(.)$.,!;ô5,3@qœûN*íýÃ|Ê©ÞjàÁÉÜsvX\VoÜnvØÒÏÊÈ›¹ï{þžélQäü­œ­s`~ói|éû²å~§ûßêû±ßͱó_éËØ‹Š‚‹‹ §æË‘™ÒÏÇ sÜÌË…ƒÉ`óƒÍÀ¨’¿îs:RUcŸ­²íåþèìêïîVYgs|sI$\ìúçêk'B>KZQDSC++8GRdLQ7AþibãKK>kébjz_X¼Ž×áÓø¶a2L¼wxþšÇucuËê66=090(- $#GR-#y¨p%+33($(õð# '(,)%$%*$üç<2 ð >O%ð$B]&Wãå_'H²g19@TZh]â››s05värzlgYF11EHâÂŃ„Ÿ|aU:N܃ýþ€Ö…æc *;$=Aõ(1'A]L=3#")%+ 0$ð$-(#.7_þú²4))õõõ- AHD=H=PF6?_»àüOgÊÌÓšØýihm3Q-Ḩë÷Óq^& (L}Y:ZZ?<1B#8Na6 &(*-( #!)múúþioâ)åvK& õ()+=:4AIF.*A-/AGtŽÖ¿øéú¾§†„¬çÞØÃÁ´È­xóåd}ÛêqlùÝ~ÇØÐÃÁÛS0rÅý¾šÙˆ‚ÖÆáÌšÓÍوᦿŽÒ™ƒ‚Ï¥Ãëîñ¸oxir÷›ýúâxàï{5$,8Täó{LFkë{ìhpóK;hWhN1.96.T^S;BCJCnCBN@tôíxmcJK½íSó…ËóÐÍèÂͬԃ̺Øne¬…Ùš¼Ý÷­„ …¾QonzCmH295A4E' &/6&.7E\jpqbkãqW<8MFLOaÿ§áÊÆżèû›ÝÀ†‡ÊÆÓ§»éÞpsôû²jvv]¹Â~§¿Ô׸°O4m¦Þ»Ê‡Œ‹Š§Ö‡‚‰‚ˆ‡áѥњˆ‡…šÍ ­bÜ«pç}§Å›ïèâ½ëåP>^tãÝåihzwîp›û~=7Maãå[CF2B<}raJ<>I8(=ji?÷¹H_VWyœlkÒã|†Å[éÖµÍԈƇŸKrjû¼ÅÆ‘¥ñ{hÏšÊÏ™áÙXíà:93RXxy}T_qYwãxn^h\M\V]SFjy궨Ȓ¯¸¬Üê{|é²ÏÇÉЧ»Ûu­wN®»âTv®~ç±vÔ¯¾Ý«²<-ìñúøLJŒ‘¨Ô¡ˆ‚‚Š‡ˆ ÁÏá„„‚ÉÙ¤ ó¸ÒÖ±{›Þéìíïo;6Loã±ûddãz­tqó±ÝêYf~x}x;1`(RUQl4N~G;cI4pn\kN/%2_:>8sV{xUÛÙš¼Ðë¨Ãá…Ö  …Õ§´ëã¸ÕÀá×þWe㙑¿ÒÆWN?!+"+15A."=^PnzI:b]*& %-1.'"'pwEB~›dð&?U|±ÝäxUz]BSQaxq\WUDHjjZZ2?Z>xã÷H%'#/*,$&.$6P4+02,2"7CILqyafpT?7.2.#23M>\÷ÂÂÁÀ›°°ôãfix½»¬©Þþìì½GDéAjíõqäìR_œÂЫÐÝVc­ÐÇÔÙšÍÍÉÇÒ‰ˆ¡ƒ‰‹Œ¡Ù˄¨¨†ˆŒ¦‰É›€¸îóãÜ»øt_mÒÎg[svu7XRq÷ëµpìþtjp@>|ôÞtvZ@?a_àümji7Ic2<ý¸^çW¹©œšÔº›©o_^xóÛ}îÅÓ»ú›bdN±Ü/`µ½{áÞOçÈléÇÇætVEzsoâêiCAXk_B9 J@").$$8K)'",'01629`4'6;cxhSL?&F3#!!'6'RIHX⟬„…Ʀô§ÁÅàZZlzŸ´ºýœýPDrN4VUvmUçüå›z¾¶¼Ž]}®Ã’¥ÖÐÅ¿É Š‰‘Ø‹ŒÎØ„‡ÀÑ׋‹Ñ×ÿþ²çèççããh{{ldå{rrof6?E1)äúçmtÛïuXI5=\nmiwpBí›ãsWC_^M^sj]›â qÝÂÖÒÊz6ŸÌ†¯eûL^õpž§ÜÜÞvtC..6½ê̓ñzüÅìM°Æqkª™‡‰ˆnFyîë~zëT#.BKd,!;$01)%ðM~-$0" .'!-1.2sj:-(&3'õ%:ð>;EOH+>[F;Qÿ¿Éƨ¿’ÍÒ®uXxàÞªÝÝÈoW1uM]üžþuyŸ Ôèz°þy¦§e½¬ÁÀË‘ŽýæÀ¥ÍÂ¥‚ˆ‚Τ‚†‡Ïኅ¤…€Å­Ç·üÿèäàOH2,. 50ML:aYâv<@EÛçíïÛwY}nKrP9TyeelkhH1AKMUTîãaMóåÙ‹ƒ’ÃÐÏʃÒá’ÇÓ_g.õ ðN=F[=QܯϚRþƒ€9&Rvâîluâ}ëÉÙ‰ªX°‡ƒ§l]î3!226Þþ;24#('3H!1-#"#$01.650rk~k*/(#3?GEDZjSG@LMIfë¶Í¿æ´ûô’€ˆÁF8;¦ªy™ûþoiUsݱþ½y›Ô¿þü¹úçäû¼¸Ç‘Ѩ«»¯§»ªÍ„¡¡‹¤‹‰ ¥Ò¥ÀÙ Ž€Ýô¥éulluqfU@AQCKFDJ,;~R_C<ièœä°è`ï²gVUCTsy5H9HhUpTHG5Q{n~„ˆ‡ŠŠš€ÇÔР Ñ†×ŠÍyŸ}äüL/`´Åá ¸ŽÂþŽÉÊ¥Ùâ=h²¬¼ì_®ßÀÓ…†h8s¿Ôìi¤ÈQR`KRW1iK" '5-80/ $"+%##d­Í×Õ¯l\èï­´´åìÏÒÃÜœàtüz簾В™ƒ¿Ð¬ý¼œžµ¯øÑ¡„†ƒÊÖÖÆÒÏ’¸›ûž¦ìk[_T[uwwxliaW^UcpD/ð-EP"0oûûvvgr°ilíþQXk{czä`9X\WW!ãܺ̌ґ‰…ÙÙ…‘ ÇÙ ‡ƒ¾Æ×Öš¡ÒTè‚áÐf»zÃÃÅ·À„ÉÖy CkZþüàúÒ†wœ®{akb½rg±}HB_=)UfE,5,* 8+-'0"!ðQl@??)_nfä^  õ&R[@cW@9D2+99D8KclÜÏöܺñ®ûÝý¯´ô­\l­šÆÖÉA-wqåþÇÑÃ’ïrâ¹n¬µ¿¥ÔÔÇý¯ù±èﲟíéšÔÂÑÔÖÓŽÇÁŽÃ­îìú°éíûÝ­¼î°ëú­ïocvl7$g16"?jé±åå±¹êXvugA.4mOF`?6wcl{`Ý…ŠÀ>¦†‚¡‰ƒÅƒƒ™ÃÒ‘ÉØ…ÐÒñjýÙÃœÂïE¾zsÉØÆáËšÁôq䀴¯Ðƒ„‘ÁÒo{íéy[8Oqn½yJ@pW5SJ*+#&2-@K3*&)&[¶X,8›hp"L]: #;7:~`_qQ4)7&-aàéï´Ö¦çåŸÝ±ßã÷þ›ÈÜ»Ýè›þÝÊÖn63k{ê¹ÀÊÖÇžsê¶÷󒯨ÉÆÍɾñêÿûîêퟒÓÒØÓÔ™¯¾¿Æžè÷°ÞôÈ«ºôüüråžäoÝ¿æ­ÿç{með0(I7e²®Ÿ¹»ó@h]H.Þrj_97Frs@giÞÿÓƒ‘Ũ…¡Ôu¿ˆ×ÕÜ„áÙÇ„‚ÕŽ±mƇ\Wæ™ôohþиù¿Ö »«‚©þ¾°µ‚µrñ’|lžlVAE*_æÜsbcRG8#1</6? $6/E`>Bàœ¦yãZ 2+/ 7W.HgX0%%*E4C\híü¶ÖžéëÜ·©ïãøûܶ›¶¹wg{~tœ×ñ±âK`ÿ÷uå¯ù¼xMóÃ}VÛÃÅÐÔÉÉÏ¥«ùŽºŸôÛþúô­´Á‡‰ÌÌ™À¾Ýú±©«€Ã¨ïllàí{ú²t/°ûã}dìùhNO">MZ°Ê´¾ÈóTVW:ôwUIKAqã6Tݬ Ì…ÙÙƒ‘‰Œ…©ƒákâ¾áÙƒƒ¬ØÙƒšþdñ¨Tå­ïÁghª¾Ü®Ûè¬Ø¹ûß`18fwpsÂÜá„mw„·x[KfL(kà[wrP*%9=+*6(+&7G1+-'[{íý²púú`pd_@4? - '8<&.1-$=LA8vôÏÁûžßþ›ú`j½êþºüÿüåbàßp禹êâíôÞ÷ýûw¦é^oÛ¦w|ëï濾¿ÌÌô©¾º²ÜŸÈñ¬ ƒ …ÊÍÊ׭ﮧÉÖ…±OZj}ë{ô²ã~;iljàvy.ngJ!QîjG°«ª‘kWPC]E=-]kcWh®ÙËš†ƒ„‘‘‚áϠ׶ûç¥ô¨ÀùÃņ‘‰§{¨ƒË‘™ŸÙ›So›¶Æ¼üžÊ²ÇjQè^ojúš€Ž±››óºÕë_s}MðZŸÿà÷~7.$Rv.5E8N89+",+N÷aR°uê}­îÿâÛ};[5!Dc)6/$!6>SK\ÞɜߺþŸíèqlûûŸ©ëxîÜä^fý~îÜrhí¨žmíÍüwž°k­éùÁ«Å€€µ¦·ÏšÝ÷´Èûí÷¦ñ¦øÀ™„‡Ùá؃†¬¹ÆÉÖ´¾›]ó½pov»ë½øÛ?$+jœG:joeaxîP7èñšÇ|DJuWS/:Büuemq© …Ì‘ƒ‘ˆ‚Ëùcuªâ¦ªï¬›Ñ¿¨ÒÒҎتûºÅ„‰Óqqkôûž¹ÉøÙËsq߅ᥡ¸o胦àbúÙ¥¹Žøebâc3tiD«B#/]ft10R<,/B>nœÈ½Tvr²î›ÿÝ:2?,(Rå,)/(&.)9WUY°ýݯ¼°÷åè½zžœª¦÷Ý{il~±óvfcy®§óz›¦ÁÈìà´ÝÛ¥‡‘ÌØÌÆ·Ž¸æ›­ýÞíãÿ›¼ñ·ÀË¡ˆÖƒ†Ù…Á’’ÂÀ½åœüݲ°ûqÜéfÝžO24Q½|>I]äWKè±`d­·årIUao½B@wiþçùÙ„‘ „†‡Ù±¶²Ûœú¥Ã ‹ÊƆƒÂèúiàídZlóûjNï¶ø¹ÞßßíãÈÇÌÙÙŠƒtÖ±÷í½Ø¥Å„Ͽŵ||Ÿi=dO>ÿëI%0.œ±''@9,C7LÛê仺çUÜàuqïãwf!*%"2GH, .(1$ -01H漮ïìÿëz±üå©ÔŽ¿¾îcnsÝeuh9p~ÿÇÈàô‡Çâéî÷®Ñ¥À’€€ÅÇ«ý››±¯²ê½ÿÝùŽÂ…‹¡ƒÖ ƒÖÏÓ¦¹Ûªœí§œïຽé~~êàn!`9 Ypq`bnênXuzëpfNftNXx3pÓ¾…‰‚†‚ƦÞ̓‰Ì¸øÑ‘ˆˆˆ«ùƒ†§é¥üâýÜp`ïÇ°·Ù±·É¸ù»Y]쥃í×Çkhçn×¥¥ŽÂŽ…‚…¤¾gôbijnikUÝ8%¹x21C4,C)AmYUúÃ/heckWhfh|f+'($+F/-' --(#:à®ýæœôüôŸ÷|±µóÿÉÞú§·žpï®~þaBsnvØÊqøÁçpsçªÀÊ’°­ÂñœÛ²Ÿñ­üíþ²ºýš‹‹‘šËÙÕÓӥǾýø­µÈüýü¼yþ›xm}rpï°`Jp5,9]~geIlr0^âa]yx<,DP8W½Ò†ˆ†‚Ïzì|ç¨ÀÙ‡™Ê„ ƒ‡Õ ÀŽƒ¥×¥€…Ðá†Ø‘Á®È¯š‚„’‡|s}ðV»r.nWe­Z܃ÛÁ¿æ¦þ{­g7;[tyv¥‡å04,'12,-CS1sÛùœþûîàè鲸œ¹ª½lܹîúãäxW3\{åý…ÆÝÛù÷ûï¹½¼ÀÕÇžôÜÝô±¦°Ý÷ìë÷ž¾Æ‘‰ÙÌááÙÖÍÁ¾ÏɲíæÅÀ·î¹y|éçêsP8]­gÁë<Epj½yizxc[shäK15@=,|œ’„†ÙÂǯk €ØÐÆÕ‰‰‚‡Æš„‘‘Š‡É‡ƒ€„‘ƒÓØÆi²oýËá’Á½Dü¼Nõ*>&%žµíÛï{ªÔÍÂÆ€ºå&W¹ämVB`{pXuž¦ùç!)+/)/ki2Mn3:9(:'7wóe÷©Ÿû©ßxoVEFäºyzí|Q%).(9=Xïœà~èžúñ÷žúï}äûd\[e]_Zçm6eêù®ÀœåÉ¡‚ˆ‘Ñ«Ž¾¨ÃºÝ²¹ôûéì±Ýœ¹œ®§Ø‹¡Ì„„á×ïæÍÆ­¦Å¨Ü°|±~çþåûÿjbklqüy`C-Om²èm}½mPKcL573;.6÷†„ ¥Ùƨ  þÀ¥„‡ˆ‘†á¶Ó‚ב†×ÇÔÙÙ‰†ÖÓÐ¥™ŸLÿÙÂâlãA[猡]*<8]n1:pdwÿþ’Áñ¨ùâ;k}fT>?]÷›t>LH|ªâ10-;'QsD-]t2;58F-3bré­x²Ãç\txovvgóg\nã›óMKE:Ykí¸ýÈú±ùÀ¶¹ÿÞ¯±}îÿA.;$Dó²Éä4&xø¼©žÛéj⠥ÈŒÑЙÌØ…šÝúìlypãž´ž¶»‚¤Œ„‚ …¥Â’ÍÅÍÝúô½ìíîÞä|ßÿéûâ÷÷ztgçó;RºN'=VuëäãwL_zL#<8!)óþ»Ñ ‡Š‘áøÒÇÇ×Ò‘Š ÓÔá‘ÿ¼ÍÒ…‘ ÍÓÓЬ¨×…ËÊjNâœhˆ•åR:UàA*2Nð6¦âjà9CvãLhpfeþ™ú÷Þid±êE84V,]>2&H\6'4;=Rnhrïvcçýúãóvúàru½ünjäÛ²ussêŸÈ¥’Ʀ}èÝÂœåŸÈžß±²óþC*HDꬰLq¦…¼Ÿñ›~t¼«Á¥ Ç€ Ò¿ÐŽÝÛåmvtû»´«¯ñÂŒ‚†‡†ˆŠÔÑÒÒÃÞ·û÷¸²ÿﱜþ|úÿÿû{aa`PD=,4?k½A6êãqj3-9+,Xh ))?ræ†áÍШùÇÖÔŽÓÒÖ†ƒ Ù‡ šÌšÂ€†…ƒÊÕÖÉÍÔÂÀÇÇŽ’ÉÓ¸Þ‡‡žš™Ý½såЭ.>,-(묰kA4Kibj}›ÈçpÛ¬Ÿpîä?=uG%C2*'01.1=Amçcmq`Yxïü°½Ý·ÿz~{~o[}÷ߪñ¦ùÖýüô¦ä[yžººÜñ¦ûû»žÝ^D\lóúfp½î¾Û÷¦ÿQ|¦¸Á’µÁ¾ýÒ€Ážï›àó{}¼®ô¨«ý‘Œ‚‚ˆ‡¡ŠØÍÂÇÁßœýÈîÿ|œœÿì{ïüujwwjê?,4:nßJ59féf$4RH,)-G0ê‚Ô¯¿§ÕÐÐÅÅÔÔ؆Ԫñ¸¿™Ì†„ÌÓÕÒ’´©ÞÆÏŽ¶´Ã¥ÊúôryŸñxEn½°E*0'93#JÁÿT"SO7P@L`0.Hasóïæ²í†ÇéN.T0=+*34,*20(5@mè|epxkyvç²äwacY:èôý¼ôß°¬™ëüêéxXNì§Ë…þ|²ÿ`°ã7\~wªåYnku°ÛìZ觴¯€€¿ÃŽ¹¬¬ÞªûßâëtóÁ´®´Üþ™ˆš‚‘‰„ÒÁ­È´®È’ªª«©îÿôÿ}ï°ëuk}ݽmT]ð.ówT&b±y  0 "(?GªËŽÁÏÓÉÆÒÔÉÔÕÒÆ×ÏÍÙÕÉÆÒ‘×ÓÖÔ™ÀŽŽ€ÔØÑÉÐÆ’ÃÒñGâü»Š·FKvWzx:5$-/FTB~âe[fmT]ü¹°oVer:Pw>$ãË×¹V5/'@C0152& <.H8?iàî\k²ÝèêúozhVZ^²±ß½¹øÞ¸ÌDZâhpholVUyÝǾ¼Û÷÷q)9i|¹±èyåàéÀ©ûražÜ¹ª¥Ï¿Ÿ±ª²ÜºŸèåÀ¬øº¹ÇšÔˆËØ‚¥ÆŽ’©Þ©´ºçÿø©±­üú÷íœþâäofzìvâû~2wÜg=­ž;GnIC(ëǬåMóó?çiFOWÿ¶™…Ë¥ÆÇÅÐÏÒÓˇ×ÑáÌÔƒËÓÌÑ× ûRfü½¼¿bß‘…è%g{ookû¡•Óä²y7ÿD*äºüã»ÿêô§üÈä>3/,)%5-1,()%õ 3!&RUJA\ú1,=%"LWëÝÿîèêÝœÛþü~hçxBu±ŸäyÿøµrHSyüÿ½XHû´ÛŸúl!qZkvÿÛÈ®ý¯¯»»§Â¦ýæÓŽÍÇ™áÖÆÐÐø®¦²›Þ»ß®ž­º~â럨žì°}ú¬Þ±x{ão½ßïàëäuÝéî}oèü~àplîºßyq6&qlcîþâT3#('~^qŸª‚¡‡ ×ØÑÇÏ™üäíq‘áÔÐ{b®}:¹çh6õõõ(jŽƒÞâ‘ÇÉÅŠ“¸x蟈ö΢¢‡¯À[Uä^/vR#>bÝݺŽîbG)$/=C/-*,53.7GF*:C/+5qA =3DWD}­Ýxpè~½ÔÈ{ózÜë[Keiiê­±›rQFßéwê÷pvéïÝžëD:UUYyÿ±»ÈÈ·¸¼º¯ÐŽÀÁ¿¿Í̈Ù˙ԭ»ýíÛôªœ´œ©ÿú÷盾ޞ±ã±žþåç÷íç¹èWäóã¦mg|wrsb~êbh~ìú´b%3LNpȪkTãçh)#%&;D?5<1o챉‡ÐÕÍÂǶvêxr¸æº…Խ͢ýʞîP4yíju枀ƒÍ¬†…ÅúÔ’¨“•¡¤¢©vœN=+>@EV?'5P{믱@W34"1440/79"qT!%7DEL;&2#(0:jD&;<[F9zœÜc4`wjíÉuOãèqp@7LN|þì»elwºètxpVMlïïÿvYagMD[½üúÞ®¼æ¯È®’ťŬ¬™¡‹Ù ‡¥§ºþ´ºïⰺȪµÃ´î÷­ûßµ»ú±éžßßãéí~ßycxãäwYkzlMe}âkJ_{²Œ¹ï_(60"|î)]Ûó,õõDRL!.5Ü‹ ƒ™Ç’®bn|hqípsÍ¥ÍËÈîy±¾‡‹ˆø©¨Æ´¹ÿÞ„™É„ ®¤Œœ‚Ú•“‡y-?75-=G@lT*03Hä§ú,W>8! '3-.8BdÛ^ð/26@=1EA0H 7c)KDGS%mÜæªêkXl»ª]qjKW>6FFI]þ»a8uô÷âbZpnåÜçvKLzc=3MxîŸïº´¬ñ¦ÁÏÊÅ€ʄ¡šÈ©©½Þ¦Ûëì÷ߺ«ÜîŸ÷úœæ›îÛ鹺çmäÿqåÛw\épuhlhk[nulnfeo›„ÙÿU/ #&I€¦ûe6TCð=4@> $íÝ° ƒÓÇr/?coQUâêÈé±ô²±‘̾ŽËÉÏ¥èsãҨÉ‘«Ûí†×¯‹ö¢Àt6-AWZLHHIYO<9/@{ž÷?D9;* (.,5=GnSC%0<-$>4"LI6Q"8W"4GG5!}íí ûF^,Iüâhu{s:<_75ûßYEéèvW~©¼±zmsv[a\M\Zs䟭¶ø«æ»ÃÏÃŽ™šÔ‚¤Œá¨ŽÅŸì»Ÿôž±üìÝ»¦±ß÷œýã»’ÜûÞ²°}yì°èhìüD½óuiyãl[lsmpvtej}±ùp\843+úÀôâzvþâ}t3*:* 0秄¨±Q /'(,;K{|ýŠÚ•Êíо¿¥Åïj~t÷ÃÓÙÙü篂΢•‚Ìq-@JPWHKB.4GE1,APvœm1J7%$%-=CEi<= IC-) 3?$'.N\9 4- Zçè]e®®åq}6VwóüÝïKAoD9âëzKFqwViãûªé23g~ãNbpm]ìÿôȧýø·ùÂÇÁÉ„ƒ…¤¤†Ì™á ñÝÆôïÛ²ÞçÿÜ­ýæ±¹Ÿb߬ž¶Þ¹ôlì»ãzåíísq~tåwÿubw}ä~phEhþßl~waK*ð²À°¹ãäÛñúc<,) Z­ï·›^+5.3/&YgYÙÊ¢ˆz™‘×Æ’ºÞ¿¶©­ƒËÑØÓÞŠ”Úö•ŠÌº_=?@1+X]7+ð.Q:Je¼§Üg½#'-=!_3,=daE!(#í¥šÐɎʈŒŒ«§Œ¬­ëlÊ¡“Ì¡—×ëœXR²ˆ†Ì½|µƒ¶ûÔ |!!M_';R67D$73>i6$IG,62+;H;>CP-1-'+%ì浄ÈûïÞñ«¸ôÛŸ±t=âV>40,EJUaRZpq¹]Ràót}wëä]gwã°ß›ß¨§€¿»Â‘ŠÔÒጊΡÊÏÆý´æ¸Ã϶ºÇÕíthèœß¨®­çwž§¼©å²{ÛâåôâvpŸŸt9Gfã^|Rê­²ìmzŸ°ãkŸôíhܪcHXB.-õ#QcQ1y©bð#A53C0AV4"`¹ÃÇÒÉ…‰Õpd™ÙÂçxtᤂÀ»‘€NÞØÅWž¿úÛ’ý¾ƒëRHp{7OJUA=-&ILI?:Qio|qdqë’ì|npíxw{pt빟°î¦Ê’À´¥„ÑŽÉ؈ˆ‡¤†Ìš¯¿ÀùÀ©¶ñÞéýspž¦¾Ô¾¼ž°ÞýâÐxwú²íí±íéãuääP:vYq~`w°÷½qk{si~¦žŸê«²Dbd(&-7- ( EO~i,!%%ð 9@$5<29*K·¼€¯™ˆƒ€Âá‹ËÖÖ›tèÔáظÙÊߧæ]E^ÝÉ‘„´þ÷çŸ{¬Ò¸Õ€éF5J>7B/=Idï÷v-õ,!8M6xV@4*(L@í¦Þùïû±Ü~|åâì¹ÞþÛÞêN@VOdVTyêék{ªq|Ujyyztyêå~Ÿ°ì²¸ÓÔ×ÑÅ©»‚ÍÅÓá…Ì¡ƒÙ ÆÁ¸€¸ø·¦²®ÃÈ|åꮀžúªœëÜåï€Èz`ïºé|°åhzœ²EMNMûhJjóìûx[rAÝôrhfâPvp)ð(.)/.55.')0'02!3!õõ õ0/-:$5m~iw›²¦Ù†‚¡„ˆÑrq®á”šÏÙœksU,rÒɈÕ»x^S*g‘„é~ø„Ê€ô[X%7jV)"ð'' $õ$"õFPŒ‹ˆúq«øvœ‡‹Óø„à_­Ù‡¢rYlz°½~ô¡ÎùkzÝņ¿¨ÀŸV;J=2k÷í½? 2IIQW.õ %'1*$E5)!(&.80J<(õ&. BHD*)  I݈•ŠÂ‰‹Ò­×Â÷úèæ¬ÿ~fI+C.1CEHEJ>3@M3^dAXhGELJtMs²­þZ;zsiG-6MA ->¶ì "0E2TûlDAM}ä|mXäÞ²mYE2;30DMMqj[Z<,*4NbmhYQLGWíªFméQ4EN/0ã¾ÌŽºÜ°ï{÷áÕªœïûøù±¼€¦Þæ°éݨ«±uU}ôÞ½þ›åüôüîìÈV4dB]ÜVE0#,89)HS1IzïîS)3kµÂ_D3"&#*()#=8(*#'8720HHB<,)$yª´B (%-?< t¼€ƒáˆÎšâÁû~gþ_29-ALITN7/>8 *+R93Q^TKLgóÝôzxaNäàè{;;aOW’¦n('$?H(Cçuhp<'Xè|mêî½y|_43/=20Tbyp??>>BTehaTNKGDçµÛNiYKI^N/`ž©žÇø°àE&Sâ›ÜþíäÛ¶´ññøß©¯¸Ÿ÷þåÞp.FsëܲûúíìÜÆžßê~KH'$:=7'(@L5 (<5'O3HXlàco~!õ #(",)+,/91)&;75+#,=T/,-%('&õa½žD %$%0,"+zºá”¤‡îéšÝU`{îÀ»10GELLBI^G%SqïtB?ABPsû|@~½úèi|íóìI\›W$SZ8’¼tïH+AG=*Kx±úG,@Wnlóär|Ý÷h='*29QNZljWPXNT\cbSJWf_mû¦mriFMsT2Qççv÷©ÞºÞv -h¦÷þÝî춧»´°¶ñçúÛèM>~®|wÈ»´±tóq¾¥ójºž,.5)("*?dW#]kzâ^=@GHMYêfq|å÷óü1 CicXlxmkobhfywdSO}fzã{oàïo>^\9*K~sdX÷칫»~6(㮶¸œîœ›ëßݯœãíÊÿàžüóm>CNmêyÜÛÈ­i.nº«µß½0110. yú1,oâûã|o*.Sy*  $%%53*+8?@443)5*"'";,0/%E=$!*"<5%!#& $!½Úö”ÓÚ¢Øÿ²ïô‘ºnMosRr†Š¡Öþož83PJ+mߪ«éÛŸ½kûq*-pa6ãâ6 êÀ±}ÿs7^ïÿsdbFEYPL4]ïVLNOãTú™ïómc|nB÷ën»Ú¦u_dB8M?;=8)@:&0dèç|rèübKnósOJBADB9içìís8óèã÷À¦yroI9DBDH:58;:H`|wEl½ÿºsyŸó/')Ls~h"jzré÷OZQ;+0çžßÃÏ®Þêù®®Ü|èë²Å·ã½x}`FCX°¨Ã±úŸ¬¡ÎDZ©[*,2A7';W_EcpyçßÌÞ!  - -3G?(1,3<)$0,.051( 1>+&'4& 83õ!-2,#"!+$2JFñ¡Ì†„šÓwC­…‘ˆÒ’­¦«íycMl²ºï¬ã9C®Û:`úÞÝJ1½¦S+4qÞZ0$OY#A°±[9RâíkRwmwþlNWvókg~í½>566:?tçåv`a=A4-6B@D>;xãoìO\ºã~omþë/ð).._ëa$SfuêëljW%)$äȬ™zÍ™×±^üŸ½Ò±ÚÝ}ÿp3qß¹žàÿìŤŒŠž& ð:A(9wþjMîýÙ™»P% - -  'G.,-!&).0/70756E.(()34*'+T@$&#*3$ )% #4^Zu’¢ŠŠáÐÔšÊÍÒÌÁÿW®÷I?\IyÜêâa Vœ±âäìz@2=K4.<;e›è;7;N@'CsãgEjjszà{úþåó½þüyéÜçã=QZ@3:eìüm8D]sa?64-,5-j½|èó-{§ìf_}ÝZ4/,SgN_zãì°çqiPF6îÁ¼ßÿqï¬Ýé®îãþÀ‹ûú½èpk56jþ퟼Ž·ÒÖšÜ  -&&WçP?ããþ™Ãx:@,  96-@C;323.+)6/'15-%/1)-2//4FA8*'))#*)&$ !%<ëîㄒҌʚÙÖù÷à¦í1&}ªãêïQe÷åUjqX0àžêìsSGD:75)*9eúôK1JC;:nå[L^›pEfyÿûéååèúô¦ôçîÿåHE>9C\âèãäëgF[M;@86/Cíÿ~úŸ]îçw\kê~Q1;J12^m|íéx{ú°eTQT0@úúÝžíëÞÿçôû}å÷ÑÔ›þsó÷²lL9dèêø€­þ¬Š©1"db+>\U~·ˆ•÷/8EDCo_# &7::A?:D7ÕÛþìéóþÛêouë»Õüomj{íäZ4.TbªŽ°žÐÃweH<  1_z`[Fâê‘ô#A?2UtdL1:E>6936[^D26.O|RCH130?0%,*.436*%,+"*52-'0+%*$&)$#!-^b~¾Š­¦¯Ÿ²~zã/F:3E¼’͈þ.v»ßîF<61#EèZ;q`;*4F5;TtrP[NYyŸüm<]vwè­­ÿåB((D^lvì÷ŸúíêtjxéåD9197WÛß¹©àãÞ²ìn]bmxçêãtGEs`agÜNuüÛégY^Cð*{Š¸Å²âåàuëÛeûÇÙ±àQ]taMD*$G½Ü{Ü€ÿOsO_íxaVujr½êŸÞšÛx<år0?äUIþÞ}BU*#->43AEGFCHUODnìN7:C1!/+&29..0,&&212(.)$&! ! ,,9iÆ´t|XQólEI^GB:ÌéŸÝo').:A915D:14/:W=Kx>FgS/,Q]66jz|I_JGäéäâ?>î±þÿèè±ìYhóVtÝÜîäy|qZT|çYIMJ=oÝ›ž¸êeé›üäd`hm}~çèfNjW7LüqMOzüüóoiK79+®ØÐæçèrZêÓ»]oí‹ÎàëâéçW:7<8n²øí_UmCJÝƪôÜûçw}›²ä¶Á·Ûzq2èôN&àáýP6CP2=OIGJ94Opnvo~M44.0.(&16618,&*/-0-*3.(&"!! *("+/PúbLq*0âã6,K@BE#rკíñ«l_ä>=9JPDU?*(9YP=Gî²b@:7ERCbäWB9LFlàRT½ãSV{}ââçóÛådc[íÈ­ÿçm[ga=P_RMNKHÿµ®ýž÷é¹Ý÷âXdjwzà°ÛoaY+Dnâ_6Ky}rc[U\R õsË¿û}ï²­èó¹ìbh쨯¶ãt4/10Tþµ~)n~hvê­scï»ÈèjßÜ[}î·¤ïv_ãxK"5®Øë÷fm}|M7?8DI736GrÛŸ[/UJE2=0%/<772*+-/%11*0(#&&! #*"//5bV\ël']G2?H8;•‰ávó¡×žÿ9FEBI8ad5%5:>.?¹îbK94984`vN_dqóóX79^äêL0VyåítóæßR7hï­íçé_<>6.'69<5,<úæùº²þ²íœ¨››äpfkx{úºãP<3A`ä],Yå½XN½zdp½¸žçmfa_J@L=,! $(-1KF47zæú|éŸlzžô»¹ë|w}îô±|2=@KdTF8Gîíg[NQN+1?Û›jmxy®çXßÊ¿sR~­gfÈìgfA \ No newline at end of file diff --git a/lib/glut-3.7.6/progs/demos/smooth/Imakefile b/lib/glut-3.7.6/progs/demos/smooth/Imakefile deleted file mode 100644 index f600ec5cd..000000000 --- a/lib/glut-3.7.6/progs/demos/smooth/Imakefile +++ /dev/null @@ -1,23 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1994. */ - -#include "../../../Glut.cf" - -TARGETS = smooth - -SRCS = glm.c gltx.c smooth.c trackball.c gltb.c - -AllTarget($(TARGETS)) - -NormalGlutProgramTarget(smooth,glm.o gltx.o smooth.o gltb.o trackball.o) - -LinkFile(trackball.c, ../../examples/trackball.c) -LinkFile(trackball.h, ../../examples/trackball.h) - -trackball.o: trackball.h -gltb.o: trackball.h gltb.h - -/* some old imake configs do setup "make depend" dependencies on linked files */ -depend:: trackball.c trackball.h - -DependTarget() diff --git a/lib/glut-3.7.6/progs/demos/smooth/data/dolphins.mtl b/lib/glut-3.7.6/progs/demos/smooth/data/dolphins.mtl deleted file mode 100644 index dffbc4c3e..000000000 --- a/lib/glut-3.7.6/progs/demos/smooth/data/dolphins.mtl +++ /dev/null @@ -1,25 +0,0 @@ -# -# dolphins.mtl -# - -newmtl dolph01 -Ka 0.4000 0.4000 0.4000 -Kd 0.0000 0.2000 1.0000 -Ks 0.5000 0.5000 0.5000 -illum 2 -Ns 60.0000 - -newmtl dolph02 -Ka 0.4000 0.4000 0.4000 -Kd 0.0000 0.5000 1.0000 -Ks 0.7000 0.7000 0.7000 -illum 2 -Ns 65.8900 - -newmtl dolph03 -Ka 0.4000 0.4000 0.4000 -Kd 0.0000 0.7000 0.8000 -Ks 0.7000 0.7000 0.7000 -illum 2 -Ns 60.0000 - diff --git a/lib/glut-3.7.6/progs/demos/smooth/data/dolphins.obj b/lib/glut-3.7.6/progs/demos/smooth/data/dolphins.obj deleted file mode 100644 index 4486db54a..000000000 --- a/lib/glut-3.7.6/progs/demos/smooth/data/dolphins.obj +++ /dev/null @@ -1,2562 +0,0 @@ -# -# dolphins.obj -# - -mtllib dolphins.mtl - -v 45.72071 330.25390 8.39974 -v 40.21416 331.03907 0.00044 -v 80.09274 366.99179 0.00049 -v 87.96514 365.67971 6.30254 -v 114.20649 383.52171 0.00051 -v 117.62613 380.38111 3.67843 -v 146.74990 385.88759 0.00051 -v 148.58885 381.42449 1.31257 -v 165.37711 380.89767 0.00051 -v 147.27679 320.28422 10.23868 -v 146.74990 338.91150 0.00045 -v 157.77332 313.19702 0.00042 -v 106.33408 328.41489 12.06732 -v 121.82061 350.46181 6.30252 -v 132.84405 362.52868 3.67840 -v -131.15011 228.43952 0.00030 -v -136.65667 220.30884 7.87270 -v -141.90492 216.37264 0.00029 -v -113.03945 244.71122 0.00032 -v -116.97564 238.15086 14.43306 -v -91.51947 259.67088 5.50690 -v -86.53981 264.65052 0.00035 -v -51.37228 289.05293 0.00038 -v -52.42606 282.76113 18.89621 -v -90.47601 257.56326 14.43308 -v -7.28888 310.31460 0.00041 -v -8.07406 304.79768 23.09072 -v 42.56968 314.77767 25.45659 -v 102.66650 313.19699 27.55383 -v 160.65574 300.86148 20.99348 -v 229.15186 263.60703 12.06724 -v 230.46392 267.80155 0.00036 -v 272.45006 231.59057 0.00031 -v 264.57769 222.13744 15.21821 -v 291.07729 207.18816 0.00027 -v 280.83906 194.32577 12.33576 -v 303.93970 182.51719 0.00024 -v 294.22832 170.70854 8.13091 -v 310.23142 161.78238 0.00021 -v 304.45626 154.17856 9.96985 -v 306.29522 142.36997 0.00019 -v 302.10075 146.30616 7.61432 -v -93.10016 251.00291 23.09065 -v -76.30155 249.69085 33.85580 -v -45.86573 268.32843 30.96308 -v -7.54716 285.38528 33.06035 -v 42.56968 296.40868 36.99656 -v 94.79409 295.09661 35.16793 -v 157.24643 286.95562 29.39275 -v 225.73222 256.51979 18.89618 -v -88.36845 236.31187 37.79199 -v -98.86499 237.88221 32.80200 -v -106.73739 230.53671 28.33889 -v -123.53598 212.95297 21.52026 -v -138.22700 198.26196 10.49680 -v -86.01293 226.07361 36.99647 -v -97.29464 230.53671 32.01682 -v -140.06595 190.38956 14.43299 -v -132.97872 180.41989 15.48677 -v -160.53216 156.53408 7.61433 -v -165.78043 158.89993 7.61433 -v -170.77039 154.96376 4.19469 -v -172.08247 156.53409 0.00021 -v -147.68009 189.07750 0.00025 -v -144.78734 191.44335 5.24852 -v -107.53290 216.37259 31.48990 -v -99.91876 224.50328 31.74819 -v -106.47911 213.47982 31.74818 -v -120.38496 208.75849 27.29541 -v -116.97564 203.25193 26.76851 -v -129.04254 176.48371 16.79883 -v -153.97182 155.49061 8.65779 -v -110.15703 191.95989 26.76849 -v -100.97256 207.70466 35.68438 -v -77.35534 199.57399 35.95298 -v -107.53290 186.19505 28.33884 -v -95.72428 213.22155 35.95300 -v -93.61672 222.66433 35.68440 -v -79.45258 211.64086 39.88919 -v -127.47219 171.23543 18.89606 -v -150.03562 152.59789 11.28192 -v -103.32808 163.88990 17.58399 -v -89.68052 194.32575 32.80194 -v -66.59019 173.59094 23.09055 -v -121.43874 163.09442 10.49676 -v -126.94529 167.55751 17.84227 -v -37.19782 195.63778 44.61055 -v -35.36918 185.39953 36.21124 -v -74.98949 212.69467 41.72816 -v -34.05711 226.86912 50.91264 -v -69.74123 231.06362 41.45957 -v -68.68743 244.44260 37.79200 -v -37.46643 251.27152 44.08373 -v -4.92302 261.24114 47.76166 -v 7.41247 235.25806 52.74129 -v 47.29105 263.60700 49.60063 -v 52.53932 244.18429 52.74130 -v 96.89134 268.85527 47.76167 -v 98.98858 244.44257 50.64406 -v 154.62229 262.55319 45.39581 -v 154.09541 234.74152 46.18095 -v 215.76257 236.83879 34.11406 -v 205.26603 213.74846 29.39266 -v 252.24218 211.12432 24.14439 -v 237.02426 190.64784 22.56368 -v 270.61114 186.19508 14.43299 -v 259.58771 174.90302 14.69125 -v 282.94662 169.13821 10.23848 -v 271.92318 162.05098 11.02365 -v 297.63764 150.24233 18.89604 -v 2.94937 201.41293 42.51332 -v 54.12000 209.01676 38.83541 -v 93.21341 211.12429 39.36230 -v 143.07198 208.50021 32.01679 -v 194.51120 194.58403 17.84231 -v 229.15186 173.85958 9.96988 -v 250.66149 165.20201 7.34573 -v 272.45006 147.61822 5.77536 -v 282.15113 139.21894 12.33568 -v -8.07406 169.65467 76.10014 -v -8.85923 166.77226 73.73428 -v 14.75798 181.20500 66.65739 -v 39.16037 165.46018 79.77805 -v 24.46935 162.57778 83.44563 -v 3.47627 165.20192 82.66047 -v 50.44208 195.37956 0.00026 -v 5.57351 185.14130 0.00025 -v 140.71645 197.20818 0.00026 -v 197.92052 190.13131 0.00025 -v 246.99390 162.57788 0.00022 -v 272.18148 145.52101 0.00019 -v -61.86882 170.96685 0.00023 -v -25.91609 178.32267 0.00024 -v -95.19739 160.99718 0.00021 -v -118.54599 160.99718 0.00021 -v -144.27079 148.14512 0.00020 -v -147.41148 149.45722 8.13088 -v -163.68318 139.74583 0.00019 -v -161.32765 142.10135 4.72157 -v 309.97315 87.52131 89.47898 -v 294.75522 115.07473 75.57317 -v 308.66107 96.44751 65.34521 -v 307.34903 120.85000 9.96981 -v 301.57384 135.54098 17.05706 -v 305.76831 129.24929 0.00017 -v 312.07040 111.66552 6.03359 -v 308.13420 119.01103 0.00016 -v 295.79866 147.61820 24.92948 -v -168.14628 149.45723 3.93640 -v -168.67317 149.71550 0.00020 -v -166.30732 144.20894 4.99018 -v -168.14628 143.41344 0.00019 -v 24.72763 161.26570 81.87529 -v 3.99283 162.30918 80.82150 -v 156.46125 360.43143 0.00048 -v 168.52814 372.50862 0.00049 -v 95.05237 199.04716 0.00026 -v 226.00085 173.07441 0.00023 -v 282.41971 136.59482 0.00018 -v 292.91627 113.23576 75.57317 -v 287.66799 128.72234 54.05321 -v 290.81902 131.87335 54.05322 -v 310.23142 104.57829 22.30528 -v -89.94912 262.55324 0.00035 -v 87.96514 365.67971 -6.30157 -v 45.72071 330.25390 -8.39886 -v 117.62613 380.38111 -3.67742 -v 148.58885 381.42449 -1.31156 -v 147.27679 320.28422 -10.23783 -v 121.82061 350.46181 -6.30159 -v 106.33408 328.41495 -12.06645 -v 132.84405 362.52868 -3.67744 -v -136.65667 220.30887 -7.87211 -v -116.97564 238.15089 -14.43243 -v -91.51947 259.67088 -5.50621 -v -90.47601 257.56332 -14.43240 -v -52.42606 282.76119 -18.89546 -v -8.07406 304.79774 -23.08992 -v 42.56968 314.77773 -25.45575 -v 102.66650 313.19705 -27.55300 -v 160.65574 300.86154 -20.99268 -v 229.15186 263.60708 -12.06654 -v 264.57769 222.13747 -15.21762 -v 280.83906 194.32580 -12.33524 -v 294.22832 170.70857 -8.13046 -v 304.45626 154.17859 -9.96944 -v 302.10075 146.30619 -7.61393 -v -93.10016 251.00297 -23.08999 -v -76.30155 249.69094 -33.85514 -v -45.86573 268.32849 -30.96237 -v -7.54716 285.38534 -33.05959 -v 42.56968 296.40880 -36.99577 -v 94.79409 295.09673 -35.16715 -v 157.24643 286.95568 -29.39199 -v 225.73222 256.51985 -18.89550 -v -98.86499 237.88230 -32.80137 -v -88.36845 236.31196 -37.79136 -v -106.73739 230.53680 -28.33828 -v -123.53598 212.95303 -21.51969 -v -138.22700 198.26199 -10.49628 -v -97.29464 230.53680 -32.01621 -v -86.01293 226.07370 -36.99587 -v -140.06595 190.38959 -14.43249 -v -165.78043 158.89996 -7.61391 -v -160.53216 156.53411 -7.61392 -v -132.97872 180.41992 -15.48629 -v -144.78734 191.44335 -5.24802 -v -170.77039 154.96376 -4.19428 -v -106.47911 213.47991 -31.74761 -v -99.91876 224.50337 -31.74760 -v -107.53290 216.37268 -31.48933 -v -120.38496 208.75855 -27.29486 -v -116.97564 203.25199 -26.76797 -v -153.97182 155.49064 -8.65737 -v -129.04254 176.48374 -16.79836 -v -110.15703 191.95995 -26.76798 -v -100.97256 207.70475 -35.68383 -v -107.53290 186.19514 -28.33834 -v -77.35534 199.57408 -35.95245 -v -95.72428 213.22164 -35.95243 -v -93.61672 222.66442 -35.68381 -v -79.45258 211.64098 -39.88864 -v -150.03562 152.59792 -11.28151 -v -127.47219 171.23549 -18.89561 -v -89.68052 194.32583 -32.80143 -v -103.32808 163.88996 -17.58355 -v -66.59019 173.59100 -23.09009 -v -126.94529 167.55757 -17.84183 -v -121.43874 163.09445 -10.49632 -v -35.36918 185.39962 -36.21075 -v -37.19782 195.63790 -44.61003 -v -34.05711 226.86927 -50.91204 -v -74.98949 212.69479 -41.72759 -v -69.74123 231.06374 -41.45896 -v -68.68743 244.44269 -37.79135 -v -37.46643 251.27164 -44.08306 -v 7.41247 235.25821 -52.74066 -v -4.92302 261.24126 -47.76097 -v 52.53932 244.18443 -52.74065 -v 47.29105 263.60711 -49.59993 -v 98.98858 244.44272 -50.64341 -v 96.89134 268.85539 -47.76096 -v 154.09541 234.74164 -46.18033 -v 154.62229 262.55330 -45.39511 -v 205.26603 213.74854 -29.39209 -v 215.76257 236.83888 -34.11344 -v 237.02426 190.64790 -22.56317 -v 252.24218 211.12438 -24.14383 -v 259.58771 174.90305 -14.69079 -v 270.61114 186.19511 -14.43249 -v 271.92318 162.05101 -11.02322 -v 282.94662 169.13824 -10.23803 -v 297.63764 150.24239 -18.89564 -v 2.94937 201.41305 -42.51278 -v 54.12000 209.01684 -38.83485 -v 93.21341 211.12441 -39.36174 -v 143.07198 208.50030 -32.01624 -v 194.51120 194.58409 -17.84179 -v 229.15186 173.85961 -9.96941 -v 250.66149 165.20204 -7.34529 -v 272.45006 147.61825 -5.77497 -v 282.15113 139.21897 -12.33531 -v -8.85923 166.77247 -73.73383 -v -8.07406 169.65488 -76.09969 -v 14.75798 181.20518 -66.65691 -v 39.16037 165.46039 -79.77761 -v 3.47627 165.20213 -82.66003 -v 24.46935 162.57799 -83.44520 -v -147.41148 149.45725 -8.13049 -v -161.32765 142.10135 -4.72119 -v 308.66107 96.44769 -65.34496 -v 294.75522 115.07493 -75.57287 -v 309.97315 87.52155 -89.47874 -v 301.57384 135.54104 -17.05669 -v 307.34903 120.85003 -9.96948 -v 312.07040 111.66553 -6.03330 -v 295.79866 147.61826 -24.92908 -v -168.14628 149.45723 -3.93600 -v -166.30732 144.20894 -4.98980 -v 3.99283 162.30939 -80.82107 -v 24.72763 161.26591 -81.87485 -v 290.81902 131.87350 -54.05287 -v 287.66799 128.72249 -54.05287 -v 292.91627 113.23596 -75.57287 -v 310.23142 104.57835 -22.30501 -v -202.71629 4.05145 8.39930 -v -208.22284 4.83661 0.00001 -v -168.34426 40.78934 0.00005 -v -160.47184 39.47725 6.30211 -v -134.23049 57.31926 0.00008 -v -130.81086 54.17865 3.67799 -v -101.68710 59.68516 0.00008 -v -99.84814 55.22205 1.31214 -v -83.05987 54.69522 0.00007 -v -101.16021 -5.91822 10.23825 -v -101.68710 12.70904 0.00002 -v -90.66367 -13.00542 -0.00002 -v -142.10290 2.21245 12.06689 -v -126.61637 24.25935 6.30209 -v -115.59293 36.32624 3.67797 -v -380.28240 -74.08581 -0.00010 -v -386.44332 -81.73260 7.87230 -v -391.99954 -85.22066 -0.00011 -v -360.88654 -59.36971 -0.00008 -v -365.35245 -65.58160 14.43265 -v -338.20167 -46.24349 5.50649 -v -332.82676 -41.69326 -0.00006 -v -295.75926 -20.28685 -0.00003 -v -297.33047 -26.46976 18.89580 -v -337.33633 -48.43026 14.43268 -v -250.06667 -2.74869 -0.00000 -v -251.30594 -8.18160 23.09031 -v -205.86731 -11.42478 25.45616 -v -145.77049 -13.00546 27.55340 -v -87.78126 -25.34096 20.99304 -v -31.09289 -37.63949 12.06684 -v -31.39079 -33.25778 -0.00004 -v 10.99649 -46.55334 -0.00006 -v 10.31595 -58.67256 15.21784 -v 36.43377 -55.44978 -0.00007 -v 37.37618 -71.75347 12.33540 -v 60.69592 -65.00439 -0.00009 -v 62.59307 -80.13814 8.13058 -v 79.92756 -74.19450 -0.00010 -v 82.04545 -83.51736 9.96953 -v 92.79140 -89.36668 -0.00012 -v 86.68838 -90.33798 7.61400 -v -340.49472 -54.75075 23.09025 -v -323.86243 -57.44941 33.85540 -v -291.98778 -41.39616 30.96267 -v -252.38836 -27.57101 33.05993 -v -205.86731 -29.79374 36.99613 -v -153.64291 -31.10582 35.16750 -v -91.19055 -39.24683 29.39232 -v -31.44574 -45.48701 18.89578 -v -336.99578 -69.78319 37.79158 -v -347.32625 -67.34903 32.80159 -v -355.77983 -74.01739 28.33849 -v -373.97680 -90.14968 21.51985 -v -389.83390 -103.57370 10.49640 -v -335.49613 -80.18133 36.99606 -v -346.36956 -74.79933 32.01641 -v -392.31846 -111.26679 14.43259 -v -386.08119 -121.78911 15.48637 -v -415.51796 -143.31122 7.61393 -v -420.55216 -140.51889 7.61394 -v -425.85102 -144.02835 4.19429 -v -427.02854 -142.35474 -0.00019 -v -400.01512 -111.94383 -0.00015 -v -396.93633 -109.82565 5.24812 -v -357.74559 -88.06700 31.48950 -v -349.48429 -80.59475 31.74779 -v -356.93491 -91.03709 31.74778 -v -371.18396 -94.59070 27.29501 -v -368.24235 -100.36067 26.76811 -v -382.48444 -126.03772 16.79843 -v -409.06647 -144.89436 8.65739 -v -362.38220 -112.17857 26.76809 -v -351.92552 -97.24841 35.68397 -v -329.06270 -107.30685 35.95257 -v -360.24451 -118.14089 28.33843 -v -346.23843 -92.18507 35.95259 -v -343.35616 -82.94926 35.68399 -v -330.15350 -95.10776 39.88879 -v -381.35409 -131.39801 18.89566 -v -405.38335 -148.10310 11.28152 -v -357.90116 -140.71764 17.58358 -v -341.78013 -111.51647 32.80153 -v -320.48610 -134.09211 23.09014 -v -376.01548 -140.01067 10.49635 -v -381.13356 -135.10692 17.84187 -v -289.36905 -114.55493 44.61014 -v -288.39448 -124.90944 36.21083 -v -325.61845 -94.42715 41.72775 -v -283.65293 -83.69093 50.91223 -v -318.86712 -76.55590 41.45916 -v -316.70907 -63.31014 37.79159 -v -285.02977 -59.09002 44.08332 -v -251.77258 -51.84949 47.76125 -v -241.63106 -78.76479 52.74087 -v -201.14596 -62.59543 49.60020 -v -195.89767 -82.01815 52.74087 -v -151.54566 -57.34718 47.76124 -v -149.44842 -81.75988 50.64363 -v -93.81470 -63.64924 45.39538 -v -94.34158 -91.46092 46.18052 -v -33.03974 -67.44740 34.11366 -v -34.37822 -92.76628 29.39225 -v 6.69442 -74.46204 24.14401 -v 4.52149 -99.81760 22.56329 -v 34.88636 -84.45007 14.43263 -v 33.12358 -100.13976 14.69089 -v 55.54843 -89.20217 10.23814 -v 51.90705 -101.96728 11.02330 -v 80.40079 -91.35308 18.89572 -v -248.88150 -112.12412 42.51290 -v -194.31700 -117.18569 38.83497 -v -155.22359 -115.07814 39.36186 -v -105.36502 -117.70225 32.01636 -v -37.87756 -114.48038 17.84190 -v 6.23831 -118.28458 9.96949 -v 31.53467 -113.31566 7.34536 -v 62.82552 -112.05474 5.77501 -v 77.33899 -110.58293 12.33535 -v -262.49689 -128.20391 76.09975 -v -263.51810 -130.05745 73.73388 -v -238.78682 -121.85273 66.65698 -v -215.77203 -133.54595 79.77765 -v -230.65132 -134.63925 83.44524 -v -251.35499 -131.76502 82.66008 -v -197.99490 -130.82288 -0.00017 -v -247.61380 -128.55718 -0.00017 -v -107.72054 -128.99427 -0.00017 -v -32.68514 -117.44504 -0.00016 -v 29.86724 -117.64511 -0.00016 -v 64.17918 -113.73506 -0.00015 -v -315.99826 -137.09818 -0.00018 -v -279.55988 -132.74477 -0.00018 -v -350.03796 -144.27370 -0.00019 -v -373.30633 -142.34023 -0.00019 -v -400.00701 -153.01794 -0.00020 -v -403.02831 -151.45029 8.13048 -v -420.04830 -159.78089 -0.00021 -v -417.50577 -157.62852 4.72117 -v 145.17573 -114.86977 89.47871 -v 107.78645 -115.14030 75.57286 -v 135.51375 -112.07570 65.34494 -v 111.95905 -100.84556 9.96951 -v 95.16476 -97.36089 17.05675 -v 103.48855 -97.52264 -0.00013 -v 123.55499 -101.41847 6.03331 -v 114.15189 -101.14615 -0.00013 -v 81.14748 -94.47977 24.92915 -v -423.69190 -149.73328 3.93600 -v -424.19559 -149.43224 -0.00020 -v -422.29384 -155.11581 4.98978 -v -424.19240 -155.75629 -0.00021 -v -230.50253 -135.51663 81.87489 -v -251.07977 -133.69650 80.82110 -v -91.97574 34.22897 0.00005 -v -79.90885 46.30619 0.00006 -v -153.38463 -127.15527 -0.00017 -v 3.59861 -120.57324 -0.00016 -v 79.65890 -112.11184 -0.00015 -v 107.98807 -117.79920 75.57286 -v 90.36504 -112.97680 54.05289 -v 90.20912 -108.43933 54.05290 -v 128.88226 -106.66257 22.30500 -v -336.39801 -43.50104 -0.00006 -v -160.47184 39.47726 -6.30200 -v -202.71629 4.05147 -8.39929 -v -130.81086 54.17866 -3.67785 -v -99.84814 55.22205 -1.31199 -v -101.16021 -5.91820 -10.23826 -v -126.61637 24.25937 -6.30202 -v -142.10290 2.21249 -12.06688 -v -115.59293 36.32625 -3.67787 -v -386.44332 -81.73259 -7.87251 -v -365.35245 -65.58155 -14.43283 -v -338.20167 -46.24347 -5.50661 -v -337.33633 -48.43023 -14.43281 -v -297.33047 -26.46971 -18.89587 -v -251.30594 -8.18154 -23.09033 -v -205.86731 -11.42471 -25.45619 -v -145.77049 -13.00539 -27.55343 -v -87.78126 -25.34090 -20.99311 -v -31.09289 -37.63946 -12.06694 -v 10.31595 -58.67252 -15.21799 -v 37.37618 -71.75344 -12.33559 -v 62.59307 -80.13812 -8.13079 -v 82.04545 -83.51733 -9.96976 -v 86.68838 -90.33796 -7.61424 -v -340.49472 -54.75069 -23.09039 -v -323.86243 -57.44932 -33.85555 -v -291.98778 -41.39608 -30.96278 -v -252.38836 -27.57092 -33.06000 -v -205.86731 -29.79364 -36.99621 -v -153.64291 -31.10573 -35.16758 -v -91.19055 -39.24676 -29.39243 -v -31.44574 -45.48696 -18.89590 -v -347.32625 -67.34894 -32.80177 -v -336.99578 -69.78308 -37.79177 -v -355.77983 -74.01732 -28.33869 -v -373.97680 -90.14962 -21.52009 -v -389.83390 -103.57367 -10.49668 -v -346.36956 -74.79924 -32.01661 -v -335.49613 -80.18123 -36.99628 -v -392.31846 -111.26675 -14.43289 -v -420.55216 -140.51886 -7.61431 -v -415.51796 -143.31119 -7.61431 -v -386.08119 -121.78906 -15.48669 -v -396.93633 -109.82563 -5.24842 -v -425.85102 -144.02835 -4.19467 -v -356.93491 -91.03701 -31.74802 -v -349.48429 -80.59466 -31.74800 -v -357.74559 -88.06691 -31.48973 -v -371.18396 -94.59063 -27.29526 -v -368.24235 -100.36059 -26.76837 -v -409.06647 -144.89433 -8.65777 -v -382.48444 -126.03769 -16.79876 -v -362.38220 -112.17850 -26.76839 -v -351.92552 -97.24832 -35.68423 -v -360.24451 -118.14082 -28.33875 -v -329.06270 -107.30676 -35.95285 -v -346.23843 -92.18498 -35.95284 -v -343.35616 -82.94917 -35.68421 -v -330.15350 -95.10765 -39.88904 -v -405.38335 -148.10307 -11.28191 -v -381.35409 -131.39795 -18.89601 -v -341.78013 -111.51638 -32.80183 -v -357.90116 -140.71758 -17.58396 -v -320.48610 -134.09205 -23.09050 -v -381.13356 -135.10686 -17.84223 -v -376.01548 -140.01064 -10.49672 -v -288.39448 -124.90935 -36.21116 -v -289.36905 -114.55481 -44.61044 -v -283.65293 -83.69079 -50.91245 -v -325.61845 -94.42704 -41.72800 -v -318.86712 -76.55580 -41.45936 -v -316.70907 -63.31003 -37.79176 -v -285.02977 -59.08990 -44.08347 -v -241.63106 -78.76465 -52.74108 -v -251.77258 -51.84936 -47.76138 -v -195.89767 -82.01802 -52.74108 -v -201.14596 -62.59530 -49.60036 -v -149.44842 -81.75974 -50.64384 -v -151.54566 -57.34705 -47.76139 -v -94.34158 -91.46080 -46.18076 -v -93.81470 -63.64912 -45.39555 -v -34.37822 -92.76621 -29.39250 -v -33.03974 -67.44731 -34.11384 -v 4.52149 -99.81754 -22.56356 -v 6.69442 -74.46198 -24.14421 -v 33.12358 -100.13971 -14.69116 -v 34.88636 -84.45003 -14.43285 -v 51.90705 -101.96725 -11.02357 -v 55.54843 -89.20214 -10.23838 -v 80.40079 -91.35304 -18.89596 -v -248.88150 -112.12400 -42.51320 -v -194.31700 -117.18559 -38.83529 -v -155.22359 -115.07803 -39.36217 -v -105.36502 -117.70216 -32.01667 -v -37.87756 -114.48033 -17.84220 -v 6.23831 -118.28455 -9.96980 -v 31.53467 -113.31564 -7.34566 -v 62.82552 -112.05472 -5.77531 -v 77.33899 -110.58290 -12.33565 -v -263.51810 -130.05725 -73.73422 -v -262.49689 -128.20370 -76.10009 -v -238.78682 -121.85255 -66.65731 -v -215.77203 -133.54574 -79.77801 -v -251.35499 -131.76481 -82.66042 -v -230.65132 -134.63904 -83.44559 -v -403.02831 -151.45026 -8.13089 -v -417.50577 -157.62852 -4.72159 -v 135.51375 -112.07552 -65.34524 -v 107.78645 -115.14011 -75.57318 -v 145.17573 -114.86953 -89.47901 -v 95.16476 -97.36085 -17.05700 -v 111.95905 -100.84553 -9.96978 -v 123.55499 -101.41846 -6.03358 -v 81.14748 -94.47971 -24.92940 -v -423.69190 -149.73328 -3.93640 -v -422.29384 -155.11581 -4.99019 -v -251.07977 -133.69629 -80.82146 -v -230.50253 -135.51642 -81.87525 -v 90.20912 -108.43918 -54.05319 -v 90.36504 -112.97665 -54.05319 -v 107.98807 -117.79901 -75.57318 -v 128.88226 -106.66251 -22.30529 -v 93.99940 -251.01325 8.39896 -v 88.49286 -250.22811 -0.00033 -v 128.37143 -214.27538 -0.00028 -v 136.24384 -215.58747 6.30177 -v 162.48520 -197.74546 -0.00026 -v 165.90483 -200.88606 3.67765 -v 195.02860 -195.37956 -0.00026 -v 196.86754 -199.84266 1.31180 -v 213.65581 -200.36949 -0.00027 -v 195.55548 -260.98293 10.23791 -v 195.02860 -242.35567 -0.00032 -v 206.05202 -268.07013 -0.00036 -v 154.61278 -252.85226 12.06655 -v 170.09930 -230.80537 6.30175 -v 181.12274 -218.73847 3.67763 -v -81.06457 -300.66425 -0.00040 -v -88.78847 -306.67168 7.87200 -v -95.01029 -308.72506 -0.00041 -v -59.30696 -290.47790 -0.00039 -v -64.86207 -295.63197 14.43235 -v -35.26598 -281.90029 5.50618 -v -29.40112 -278.35038 -0.00037 -v 8.45369 -262.68244 -0.00035 -v 6.19893 -268.61122 18.89548 -v -34.83292 -284.20424 14.43236 -v 52.39871 -249.89958 -0.00033 -v 50.84696 -255.21874 23.08998 -v 90.84838 -266.48948 25.45582 -v 150.94519 -268.07016 27.55306 -v 208.93443 -280.40567 20.99271 -v 258.30457 -283.44262 12.06651 -v 257.31510 -279.18223 -0.00037 -v 294.19634 -281.39371 -0.00037 -v 298.14175 -292.82492 15.21753 -v 317.46763 -279.18425 -0.00037 -v 326.18260 -292.81196 12.33511 -v 340.31105 -274.64417 -0.00036 -v 350.63425 -285.51456 8.13031 -v 359.25335 -269.80183 -0.00036 -v 366.83893 -275.15960 9.96928 -v 378.09575 -271.42754 -0.00036 -v 374.67644 -276.66983 7.61376 -v -38.96789 -289.85876 23.08994 -v -23.49540 -295.37284 33.85508 -v 9.33527 -284.09457 30.96235 -v 48.31438 -274.45754 33.05960 -v 90.84838 -284.85847 36.99579 -v 143.07278 -286.17054 35.16716 -v 205.52513 -294.31152 29.39198 -v 259.39310 -291.21229 18.89545 -v -38.31227 -305.27192 37.79127 -v -47.87081 -300.96841 32.80129 -v -57.36535 -305.85158 28.33818 -v -78.57035 -317.73791 21.51955 -v -97.36509 -327.05557 10.49611 -v -38.71889 -315.76946 36.99575 -v -48.36608 -308.46316 32.01610 -v -101.73644 -333.89530 14.43230 -v -98.06335 -345.64888 15.48607 -v -133.70489 -358.57388 7.61365 -v -138.05124 -354.43836 7.61365 -v -144.47005 -356.23577 4.19401 -v -145.17748 -354.28199 -0.00047 -v -109.58333 -332.58528 -0.00044 -v -105.97645 -331.33015 5.24783 -v -62.15228 -319.20549 31.48919 -v -52.53142 -313.54681 31.74748 -v -61.96433 -322.27916 31.74747 -v -76.81173 -322.69251 27.29471 -v -75.17189 -328.97359 26.76780 -v -95.44338 -350.65499 16.79813 -v -127.52579 -361.92381 8.65710 -v -71.87407 -341.79482 26.76779 -v -58.25461 -329.38397 35.68367 -v -37.14569 -343.61330 35.95226 -v -70.99153 -348.08293 28.33813 -v -51.58934 -325.54856 35.95228 -v -46.96583 -317.03731 35.68368 -v -36.08085 -331.41154 39.88848 -v -95.58270 -356.13570 18.89536 -v -124.60607 -366.03838 11.28123 -v -73.45205 -370.64976 17.58328 -v -50.85280 -345.38397 32.80123 -v -32.99331 -371.50303 23.08983 -v -92.14051 -365.79731 10.49605 -v -96.25251 -359.79119 17.84157 -v 2.43018 -356.97418 44.60982 -v 2.05272 -367.36822 36.21050 -v -31.41700 -331.53304 41.72743 -v 12.21421 -327.09467 50.91191 -v -21.73452 -315.03382 41.45885 -v -17.52141 -302.29929 37.79127 -v 13.85211 -302.50973 44.08299 -v 46.92536 -298.70307 47.76092 -v 54.81669 -326.33492 52.74054 -v 95.56974 -317.66015 49.59986 -v 100.81802 -337.08286 52.74053 -v 145.17002 -312.41187 47.76090 -v 147.26728 -336.82460 50.64329 -v 202.90099 -318.71393 45.39504 -v 202.37410 -346.52561 46.18018 -v 261.93878 -313.06806 34.11333 -v 265.35967 -338.19771 29.39193 -v 300.93679 -308.74965 24.14370 -v 308.59086 -333.04185 22.56298 -v 330.49938 -304.99727 14.43234 -v 336.97408 -319.41187 14.69060 -v 350.53504 -297.09294 10.23786 -v 355.05557 -309.63799 11.02302 -v 370.95693 -281.99202 18.89546 -v 44.70988 -359.00652 42.51257 -v 102.39870 -372.25041 38.83464 -v 141.49211 -370.14285 39.36153 -v 191.35067 -372.76694 32.01602 -v 265.51765 -360.24252 17.84157 -v 317.93487 -349.25774 9.96918 -v 342.35424 -331.59325 7.34507 -v 370.84159 -310.07600 5.77475 -v 381.84530 -298.11019 12.33510 -v 28.89168 -361.85995 76.09944 -v 27.61571 -363.59668 73.73357 -v 54.47518 -357.65219 66.65667 -v 78.15071 -370.73794 79.77734 -v 62.17428 -370.98047 83.44492 -v 40.34184 -366.48944 82.65977 -v 98.72077 -385.88759 -0.00051 -v 44.60053 -375.48837 -0.00050 -v 188.99515 -384.05898 -0.00051 -v 272.35380 -362.03855 -0.00048 -v 342.95446 -336.27528 -0.00045 -v 373.10812 -310.36770 -0.00041 -v -28.78862 -375.23565 -0.00050 -v 10.33007 -376.28388 -0.00050 -v -65.97063 -375.81852 -0.00050 -v -89.87661 -368.71034 -0.00049 -v -120.35207 -372.25127 -0.00049 -v -123.07309 -369.91337 8.13019 -v -143.09712 -373.04825 -0.00049 -v -139.83206 -371.73662 4.72088 -v 427.02854 -240.19788 89.47854 -v 407.08911 -275.63509 75.57265 -v 420.25936 -248.23506 65.34476 -v 398.57063 -263.36142 9.96930 -v 385.39526 -274.98233 17.05651 -v 390.89349 -268.38532 -0.00036 -v 405.53746 -253.59112 6.03311 -v 400.08771 -261.65968 -0.00035 -v 373.62060 -283.69701 24.92890 -v -143.93197 -362.34054 3.93572 -v -144.36097 -361.90197 -0.00048 -v -144.06516 -367.91119 4.98950 -v -146.21551 -367.95524 -0.00049 -v 62.27292 -371.86587 81.87458 -v 40.45544 -368.43809 80.82079 -v 204.73994 -220.83575 -0.00029 -v 216.80684 -208.75852 -0.00028 -v 143.33108 -382.21997 -0.00051 -v 315.91809 -352.56323 -0.00047 -v 384.73922 -297.38295 -0.00039 -v 409.30533 -277.05216 75.57265 -v 393.46552 -289.30265 54.05266 -v 390.02597 -286.38589 54.05266 -v 412.52294 -251.64774 22.30481 -v -33.08011 -279.51699 -0.00037 -v 136.24384 -215.58744 -6.30234 -v 93.99940 -251.01325 -8.39963 -v 165.90483 -200.88606 -3.67819 -v 196.86754 -199.84266 -1.31233 -v 195.55548 -260.98293 -10.23860 -v 170.09930 -230.80534 -6.30236 -v 154.61278 -252.85220 -12.06722 -v 181.12274 -218.73847 -3.67821 -v -88.78847 -306.67168 -7.87281 -v -64.86207 -295.63192 -14.43313 -v -35.26598 -281.90029 -5.50692 -v -34.83292 -284.20419 -14.43312 -v 6.19893 -268.61116 -18.89619 -v 50.84696 -255.21868 -23.09066 -v 90.84838 -266.48942 -25.45653 -v 150.94519 -268.07010 -27.55377 -v 208.93443 -280.40561 -20.99345 -v 258.30457 -283.44256 -12.06726 -v 298.14175 -292.82486 -15.21830 -v 326.18260 -292.81190 -12.33589 -v 350.63425 -285.51456 -8.13106 -v 366.83893 -275.15960 -9.97001 -v 374.67644 -276.66983 -7.61449 -v -38.96789 -289.85870 -23.09070 -v -23.49540 -295.37272 -33.85586 -v 9.33527 -284.09451 -30.96310 -v 48.31438 -274.45748 -33.06033 -v 90.84838 -284.85835 -36.99654 -v 143.07278 -286.17042 -35.16792 -v 205.52513 -294.31146 -29.39277 -v 259.39310 -291.21223 -18.89622 -v -47.87081 -300.96835 -32.80208 -v -38.31227 -305.27180 -37.79208 -v -57.36535 -305.85152 -28.33899 -v -78.57035 -317.73785 -21.52039 -v -97.36509 -327.05557 -10.49697 -v -48.36608 -308.46310 -32.01692 -v -38.71889 -315.76934 -36.99658 -v -101.73644 -333.89524 -14.43318 -v -138.05124 -354.43836 -7.61459 -v -133.70489 -358.57388 -7.61460 -v -98.06335 -345.64883 -15.48699 -v -105.97645 -331.33015 -5.24871 -v -144.47005 -356.23577 -4.19496 -v -61.96433 -322.27910 -31.74832 -v -52.53142 -313.54675 -31.74831 -v -62.15228 -319.20543 -31.49004 -v -76.81173 -322.69245 -27.29556 -v -75.17189 -328.97353 -26.76868 -v -127.52579 -361.92381 -8.65806 -v -95.44338 -350.65493 -16.79906 -v -71.87407 -341.79476 -26.76869 -v -58.25461 -329.38385 -35.68454 -v -70.99153 -348.08287 -28.33905 -v -37.14569 -343.61318 -35.95317 -v -51.58934 -325.54844 -35.95315 -v -46.96583 -317.03719 -35.68452 -v -36.08085 -331.41142 -39.88935 -v -124.60607 -366.03832 -11.28220 -v -95.58270 -356.13564 -18.89631 -v -50.85280 -345.38391 -32.80214 -v -73.45205 -370.64970 -17.58426 -v -32.99331 -371.50297 -23.09081 -v -96.25251 -359.79113 -17.84253 -v -92.14051 -365.79731 -10.49702 -v 2.05272 -367.36810 -36.21148 -v 2.43018 -356.97407 -44.61076 -v 12.21421 -327.09455 -50.91278 -v -31.41700 -331.53293 -41.72831 -v -21.73452 -315.03370 -41.45968 -v -17.52141 -302.29917 -37.79208 -v 13.85211 -302.50961 -44.08380 -v 54.81669 -326.33480 -52.74141 -v 46.92536 -298.70296 -47.76171 -v 100.81802 -337.08274 -52.74142 -v 95.56974 -317.66003 -49.60070 -v 147.26728 -336.82448 -50.64418 -v 145.17002 -312.41176 -47.76173 -v 202.37410 -346.52549 -46.18110 -v 202.90099 -318.71381 -45.39589 -v 265.35967 -338.19765 -29.39282 -v 261.93878 -313.06794 -34.11417 -v 308.59086 -333.04179 -22.56387 -v 300.93679 -308.74959 -24.14452 -v 336.97408 -319.41181 -14.69145 -v 330.49938 -304.99721 -14.43315 -v 355.05557 -309.63799 -11.02384 -v 350.53504 -297.09294 -10.23865 -v 370.95693 -281.99196 -18.89621 -v 44.70988 -359.00640 -42.51353 -v 102.39870 -372.25029 -38.83563 -v 141.49211 -370.14273 -39.36251 -v 191.35067 -372.76688 -32.01701 -v 265.51765 -360.24246 -17.84253 -v 317.93487 -349.25774 -9.97011 -v 342.35424 -331.59325 -7.34595 -v 370.84159 -310.07600 -5.77557 -v 381.84530 -298.11013 -12.33589 -v 27.61571 -363.59650 -73.73454 -v 28.89168 -361.85977 -76.10039 -v 54.47518 -357.65201 -66.65763 -v 78.15071 -370.73770 -79.77832 -v 40.34184 -366.48920 -82.66073 -v 62.17428 -370.98023 -83.44591 -v -123.07309 -369.91337 -8.13118 -v -139.83206 -371.73662 -4.72187 -v 420.25936 -248.23488 -65.34541 -v 407.08911 -275.63491 -75.57338 -v 427.02854 -240.19764 -89.47918 -v 385.39526 -274.98227 -17.05724 -v 398.57063 -263.36142 -9.96999 -v 405.53746 -253.59112 -6.03378 -v 373.62060 -283.69695 -24.92966 -v -143.93197 -362.34054 -3.93668 -v -144.06516 -367.91119 -4.99048 -v 40.45544 -368.43786 -80.82177 -v 62.27292 -371.86563 -81.87556 -v 390.02597 -286.38577 -54.05342 -v 393.46552 -289.30253 -54.05343 -v 409.30533 -277.05199 -75.57338 -v 412.52294 -251.64768 -22.30548 - -g dolph01 -usemtl dolph01 -f 3 2 1 -f 1 4 3 -f 5 3 4 -f 4 6 5 -f 7 5 6 -f 6 8 7 -f 9 7 8 -f 12 11 10 -f 4 1 13 -f 13 14 4 -f 6 4 14 -f 14 15 6 -f 8 6 15 -f 18 17 16 -f 19 16 17 -f 17 20 19 -f 23 22 21 -f 21 24 23 -f 24 21 25 -f 26 23 24 -f 24 27 26 -f 2 26 27 -f 27 1 2 -f 28 1 27 -f 13 1 28 -f 28 29 13 -f 10 13 29 -f 29 30 10 -f 12 10 30 -f 12 30 31 -f 31 32 12 -f 33 32 31 -f 31 34 33 -f 35 33 34 -f 34 36 35 -f 37 35 36 -f 36 38 37 -f 39 37 38 -f 38 40 39 -f 41 39 40 -f 40 42 41 -f 25 20 43 -f 25 43 44 -f 25 44 45 -f 45 24 25 -f 27 24 45 -f 45 46 27 -f 28 27 46 -f 46 47 28 -f 29 28 47 -f 47 48 29 -f 30 29 48 -f 48 49 30 -f 31 30 49 -f 49 50 31 -f 34 31 50 -f 52 51 44 -f 44 43 52 -f 53 52 43 -f 43 20 53 -f 54 53 20 -f 20 17 54 -f 55 54 17 -f 57 56 51 -f 51 52 57 -f 53 57 52 -f 55 58 54 -f 61 60 59 -f 59 58 61 -f 64 63 62 -f 62 65 64 -f 65 55 17 -f 17 18 65 -f 64 65 18 -f 67 53 66 -f 66 68 67 -f 53 54 69 -f 69 66 53 -f 68 66 69 -f 69 70 68 -f 70 69 58 -f 58 59 70 -f 71 59 60 -f 60 72 71 -f 70 59 71 -f 71 73 70 -f 74 68 70 -f 75 74 73 -f 73 76 75 -f 58 55 65 -f 67 68 77 -f 78 67 77 -f 56 78 77 -f 79 56 77 -f 74 79 77 -f 68 74 77 -f 72 81 80 -f 80 71 72 -f 71 80 76 -f 76 73 71 -f 83 76 82 -f 82 75 83 -f 75 82 84 -f 85 82 76 -f 76 86 85 -f 87 75 84 -f 84 88 87 -f 89 75 87 -f 87 90 89 -f 89 79 75 -f 56 79 89 -f 89 91 56 -f 44 51 56 -f 56 92 44 -f 92 56 91 -f 93 91 89 -f 89 90 93 -f 94 93 90 -f 90 95 94 -f 96 94 95 -f 95 97 96 -f 98 96 97 -f 97 99 98 -f 100 98 99 -f 99 101 100 -f 102 100 101 -f 101 103 102 -f 104 102 103 -f 103 105 104 -f 106 104 105 -f 105 107 106 -f 108 106 107 -f 107 109 108 -f 92 91 93 -f 45 92 93 -f 44 92 45 -f 46 45 93 -f 93 94 46 -f 47 46 94 -f 94 96 47 -f 48 47 96 -f 96 98 48 -f 49 48 98 -f 98 100 49 -f 50 49 100 -f 100 102 50 -f 34 50 102 -f 102 104 34 -f 36 34 104 -f 104 106 36 -f 38 36 106 -f 106 108 38 -f 40 38 108 -f 108 110 40 -f 42 40 110 -f 95 90 87 -f 87 111 95 -f 97 95 111 -f 111 112 97 -f 99 97 112 -f 112 113 99 -f 101 99 113 -f 113 114 101 -f 103 101 114 -f 114 115 103 -f 105 103 115 -f 115 116 105 -f 107 105 116 -f 116 117 107 -f 109 107 117 -f 117 118 109 -f 119 109 118 -f 120 87 88 -f 88 121 120 -f 111 87 120 -f 120 122 111 -f 123 122 120 -f 120 124 123 -f 124 120 125 -f 126 112 111 -f 111 127 126 -f 115 114 128 -f 128 129 115 -f 118 117 130 -f 130 131 118 -f 88 84 132 -f 132 133 88 -f 111 88 133 -f 133 127 111 -f 84 82 134 -f 134 132 84 -f 82 85 135 -f 135 134 82 -f 85 137 136 -f 136 135 85 -f 85 86 137 -f 139 138 136 -f 136 137 139 -f 142 141 140 -f 42 144 143 -f 143 145 42 -f 145 143 146 -f 146 147 145 -f 148 110 108 -f 108 109 148 -f 119 148 109 -f 61 58 65 -f 65 62 61 -f 150 149 62 -f 62 63 150 -f 61 62 149 -f 149 60 61 -f 76 80 86 -f 81 137 86 -f 86 80 81 -f 137 81 139 -f 151 139 81 -f 81 72 151 -f 149 151 72 -f 72 60 149 -f 138 139 151 -f 151 152 138 -f 149 150 152 -f 152 151 149 -f 57 53 67 -f 78 56 57 -f 75 79 74 -f 58 69 54 -f 67 78 57 -f 154 153 124 -f 124 125 154 -f 125 120 121 -f 121 154 125 -f 123 124 153 -f 122 121 88 -f 88 111 122 -f 123 153 154 -f 154 122 123 -f 122 154 121 -f 11 14 13 -f 13 10 11 -f 11 155 15 -f 15 14 11 -f 155 156 9 -f 9 15 155 -f 15 9 8 -f 114 113 157 -f 157 128 114 -f 157 113 112 -f 112 126 157 -f 130 117 116 -f 116 158 130 -f 129 158 116 -f 116 115 129 -f 118 131 159 -f 159 119 118 -f 161 160 141 -f 141 162 161 -f 162 148 119 -f 119 161 162 -f 140 141 160 -f 42 145 41 -f 119 159 147 -f 147 146 163 -f 163 119 147 -f 119 163 161 -f 163 142 160 -f 160 161 163 -f 160 142 140 -f 141 142 163 -f 163 162 141 -f 163 146 143 -f 143 162 163 -f 162 143 144 -f 162 144 148 -f 144 42 110 -f 110 148 144 -f 22 164 21 -f 20 21 164 -f 164 19 20 -f 20 25 21 -f 2 3 165 -f 165 166 2 -f 3 5 167 -f 167 165 3 -f 5 7 168 -f 168 167 5 -f 168 7 9 -f 169 11 12 -f 166 165 170 -f 170 171 166 -f 165 167 172 -f 172 170 165 -f 172 167 168 -f 16 173 18 -f 16 19 174 -f 174 173 16 -f 175 22 23 -f 23 176 175 -f 176 23 177 -f 23 26 178 -f 178 177 23 -f 26 2 166 -f 166 178 26 -f 178 166 179 -f 166 171 180 -f 180 179 166 -f 171 169 181 -f 181 180 171 -f 181 169 12 -f 181 12 32 -f 32 182 181 -f 32 33 183 -f 183 182 32 -f 33 35 184 -f 184 183 33 -f 35 37 185 -f 185 184 35 -f 37 39 186 -f 186 185 37 -f 39 41 187 -f 187 186 39 -f 188 174 176 -f 189 188 176 -f 189 176 177 -f 177 190 189 -f 177 178 191 -f 191 190 177 -f 178 179 192 -f 192 191 178 -f 179 180 193 -f 193 192 179 -f 180 181 194 -f 194 193 180 -f 181 182 195 -f 195 194 181 -f 195 182 183 -f 197 196 188 -f 188 189 197 -f 196 198 174 -f 174 188 196 -f 174 198 199 -f 199 173 174 -f 173 199 200 -f 202 201 196 -f 196 197 202 -f 196 201 198 -f 199 203 200 -f 205 204 203 -f 203 206 205 -f 63 64 207 -f 207 208 63 -f 200 207 18 -f 18 173 200 -f 18 207 64 -f 198 210 209 -f 209 211 198 -f 199 198 211 -f 211 212 199 -f 211 209 213 -f 213 212 211 -f 212 213 206 -f 206 203 212 -f 206 215 214 -f 214 205 206 -f 206 213 216 -f 216 215 206 -f 213 209 217 -f 217 219 218 -f 218 216 217 -f 207 200 203 -f 220 209 210 -f 220 210 221 -f 220 221 202 -f 220 202 222 -f 220 222 217 -f 220 217 209 -f 223 214 215 -f 215 224 223 -f 224 215 216 -f 216 218 224 -f 226 218 225 -f 225 227 226 -f 227 225 219 -f 226 229 228 -f 228 218 226 -f 219 231 230 -f 230 227 219 -f 219 233 232 -f 232 231 219 -f 219 222 233 -f 222 202 234 -f 234 233 222 -f 202 197 189 -f 189 234 202 -f 234 189 235 -f 234 236 232 -f 232 233 234 -f 236 238 237 -f 237 232 236 -f 238 240 239 -f 239 237 238 -f 240 242 241 -f 241 239 240 -f 242 244 243 -f 243 241 242 -f 244 246 245 -f 245 243 244 -f 246 248 247 -f 247 245 246 -f 248 250 249 -f 249 247 248 -f 250 252 251 -f 251 249 250 -f 236 234 235 -f 236 235 190 -f 190 235 189 -f 190 191 238 -f 238 236 190 -f 191 192 240 -f 240 238 191 -f 192 193 242 -f 242 240 192 -f 193 194 244 -f 244 242 193 -f 194 195 246 -f 246 244 194 -f 195 183 248 -f 248 246 195 -f 183 184 250 -f 250 248 183 -f 184 185 252 -f 252 250 184 -f 185 186 253 -f 253 252 185 -f 253 186 187 -f 232 237 254 -f 254 231 232 -f 237 239 255 -f 255 254 237 -f 239 241 256 -f 256 255 239 -f 241 243 257 -f 257 256 241 -f 243 245 258 -f 258 257 243 -f 245 247 259 -f 259 258 245 -f 247 249 260 -f 260 259 247 -f 249 251 261 -f 261 260 249 -f 261 251 262 -f 231 264 263 -f 263 230 231 -f 231 254 265 -f 265 264 231 -f 264 265 266 -f 266 267 264 -f 267 266 268 -f 255 126 127 -f 127 254 255 -f 257 258 129 -f 129 128 257 -f 260 261 131 -f 131 130 260 -f 227 230 133 -f 133 132 227 -f 230 254 127 -f 127 133 230 -f 226 227 132 -f 132 134 226 -f 229 226 134 -f 134 135 229 -f 269 229 135 -f 135 136 269 -f 269 228 229 -f 138 270 269 -f 269 136 138 -f 273 272 271 -f 274 187 145 -f 145 275 274 -f 275 145 147 -f 147 276 275 -f 253 277 251 -f 251 252 253 -f 251 277 262 -f 203 204 208 -f 208 207 203 -f 278 150 63 -f 63 208 278 -f 208 204 205 -f 205 278 208 -f 228 224 218 -f 269 223 224 -f 224 228 269 -f 270 223 269 -f 270 279 214 -f 214 223 270 -f 279 278 205 -f 205 214 279 -f 270 138 152 -f 152 279 270 -f 150 278 279 -f 279 152 150 -f 210 198 201 -f 201 202 221 -f 217 222 219 -f 199 212 203 -f 201 221 210 -f 281 280 267 -f 267 268 281 -f 264 267 280 -f 280 263 264 -f 281 268 266 -f 263 265 254 -f 254 230 263 -f 280 281 266 -f 266 263 280 -f 263 266 265 -f 170 11 169 -f 169 171 170 -f 155 11 170 -f 170 172 155 -f 9 156 155 -f 155 168 9 -f 168 155 172 -f 256 257 128 -f 128 157 256 -f 256 157 126 -f 126 255 256 -f 260 130 158 -f 158 259 260 -f 158 129 258 -f 258 259 158 -f 131 261 262 -f 262 159 131 -f 284 283 282 -f 282 272 284 -f 277 282 283 -f 283 262 277 -f 284 272 273 -f 41 145 187 -f 147 159 262 -f 285 276 147 -f 147 283 285 -f 283 147 262 -f 271 285 283 -f 283 284 271 -f 273 271 284 -f 271 272 282 -f 282 285 271 -f 276 285 282 -f 282 275 276 -f 274 275 282 -f 277 274 282 -f 187 274 277 -f 277 253 187 -f 175 164 22 -f 175 174 19 -f 19 164 175 -f 175 176 174 -f 217 216 213 -f 70 73 74 - -g dolph02 -usemtl dolph02 -f 288 287 286 -f 286 289 288 -f 290 288 289 -f 289 291 290 -f 292 290 291 -f 291 293 292 -f 294 292 293 -f 297 296 295 -f 289 286 298 -f 298 299 289 -f 291 289 299 -f 299 300 291 -f 293 291 300 -f 303 302 301 -f 304 301 302 -f 302 305 304 -f 308 307 306 -f 306 309 308 -f 309 306 310 -f 311 308 309 -f 309 312 311 -f 287 311 312 -f 312 286 287 -f 313 286 312 -f 298 286 313 -f 313 314 298 -f 295 298 314 -f 314 315 295 -f 297 295 315 -f 297 315 316 -f 316 317 297 -f 318 317 316 -f 316 319 318 -f 320 318 319 -f 319 321 320 -f 322 320 321 -f 321 323 322 -f 324 322 323 -f 323 325 324 -f 326 324 325 -f 325 327 326 -f 310 305 328 -f 310 328 329 -f 310 329 330 -f 330 309 310 -f 312 309 330 -f 330 331 312 -f 313 312 331 -f 331 332 313 -f 314 313 332 -f 332 333 314 -f 315 314 333 -f 333 334 315 -f 316 315 334 -f 334 335 316 -f 319 316 335 -f 337 336 329 -f 329 328 337 -f 338 337 328 -f 328 305 338 -f 339 338 305 -f 305 302 339 -f 340 339 302 -f 342 341 336 -f 336 337 342 -f 338 342 337 -f 340 343 339 -f 346 345 344 -f 344 343 346 -f 349 348 347 -f 347 350 349 -f 350 340 302 -f 302 303 350 -f 349 350 303 -f 352 338 351 -f 351 353 352 -f 338 339 354 -f 354 351 338 -f 353 351 354 -f 354 355 353 -f 355 354 343 -f 343 344 355 -f 356 344 345 -f 345 357 356 -f 355 344 356 -f 356 358 355 -f 359 353 355 -f 360 359 358 -f 358 361 360 -f 343 340 350 -f 352 353 362 -f 363 352 362 -f 341 363 362 -f 364 341 362 -f 359 364 362 -f 353 359 362 -f 357 366 365 -f 365 356 357 -f 356 365 361 -f 361 358 356 -f 368 361 367 -f 367 360 368 -f 360 367 369 -f 370 367 361 -f 361 371 370 -f 372 360 369 -f 369 373 372 -f 374 360 372 -f 372 375 374 -f 374 364 360 -f 341 364 374 -f 374 376 341 -f 329 336 341 -f 341 377 329 -f 377 341 376 -f 378 376 374 -f 374 375 378 -f 379 378 375 -f 375 380 379 -f 381 379 380 -f 380 382 381 -f 383 381 382 -f 382 384 383 -f 385 383 384 -f 384 386 385 -f 387 385 386 -f 386 388 387 -f 389 387 388 -f 388 390 389 -f 391 389 390 -f 390 392 391 -f 393 391 392 -f 392 394 393 -f 377 376 378 -f 330 377 378 -f 329 377 330 -f 331 330 378 -f 378 379 331 -f 332 331 379 -f 379 381 332 -f 333 332 381 -f 381 383 333 -f 334 333 383 -f 383 385 334 -f 335 334 385 -f 385 387 335 -f 319 335 387 -f 387 389 319 -f 321 319 389 -f 389 391 321 -f 323 321 391 -f 391 393 323 -f 325 323 393 -f 393 395 325 -f 327 325 395 -f 380 375 372 -f 372 396 380 -f 382 380 396 -f 396 397 382 -f 384 382 397 -f 397 398 384 -f 386 384 398 -f 398 399 386 -f 388 386 399 -f 399 400 388 -f 390 388 400 -f 400 401 390 -f 392 390 401 -f 401 402 392 -f 394 392 402 -f 402 403 394 -f 404 394 403 -f 405 372 373 -f 373 406 405 -f 396 372 405 -f 405 407 396 -f 408 407 405 -f 405 409 408 -f 409 405 410 -f 411 397 396 -f 396 412 411 -f 400 399 413 -f 413 414 400 -f 403 402 415 -f 415 416 403 -f 373 369 417 -f 417 418 373 -f 396 373 418 -f 418 412 396 -f 369 367 419 -f 419 417 369 -f 367 370 420 -f 420 419 367 -f 370 422 421 -f 421 420 370 -f 370 371 422 -f 424 423 421 -f 421 422 424 -f 427 426 425 -f 327 429 428 -f 428 430 327 -f 430 428 431 -f 431 432 430 -f 433 395 393 -f 393 394 433 -f 404 433 394 -f 346 343 350 -f 350 347 346 -f 435 434 347 -f 347 348 435 -f 346 347 434 -f 434 345 346 -f 361 365 371 -f 366 422 371 -f 371 365 366 -f 422 366 424 -f 436 424 366 -f 366 357 436 -f 434 436 357 -f 357 345 434 -f 423 424 436 -f 436 437 423 -f 434 435 437 -f 437 436 434 -f 342 338 352 -f 363 341 342 -f 360 364 359 -f 343 354 339 -f 352 363 342 -f 439 438 409 -f 409 410 439 -f 410 405 406 -f 406 439 410 -f 408 409 438 -f 407 406 373 -f 373 396 407 -f 408 438 439 -f 439 407 408 -f 407 439 406 -f 296 299 298 -f 298 295 296 -f 296 440 300 -f 300 299 296 -f 440 441 294 -f 294 300 440 -f 300 294 293 -f 399 398 442 -f 442 413 399 -f 442 398 397 -f 397 411 442 -f 415 402 401 -f 401 443 415 -f 414 443 401 -f 401 400 414 -f 403 416 444 -f 444 404 403 -f 446 445 426 -f 426 447 446 -f 447 433 404 -f 404 446 447 -f 425 426 445 -f 327 430 326 -f 404 444 432 -f 432 431 448 -f 448 404 432 -f 404 448 446 -f 448 427 445 -f 445 446 448 -f 445 427 425 -f 426 427 448 -f 448 447 426 -f 448 431 428 -f 428 447 448 -f 447 428 429 -f 447 429 433 -f 429 327 395 -f 395 433 429 -f 307 449 306 -f 305 306 449 -f 449 304 305 -f 305 310 306 -f 287 288 450 -f 450 451 287 -f 288 290 452 -f 452 450 288 -f 290 292 453 -f 453 452 290 -f 453 292 294 -f 454 296 297 -f 451 450 455 -f 455 456 451 -f 450 452 457 -f 457 455 450 -f 457 452 453 -f 301 458 303 -f 301 304 459 -f 459 458 301 -f 460 307 308 -f 308 461 460 -f 461 308 462 -f 308 311 463 -f 463 462 308 -f 311 287 451 -f 451 463 311 -f 463 451 464 -f 451 456 465 -f 465 464 451 -f 456 454 466 -f 466 465 456 -f 466 454 297 -f 466 297 317 -f 317 467 466 -f 317 318 468 -f 468 467 317 -f 318 320 469 -f 469 468 318 -f 320 322 470 -f 470 469 320 -f 322 324 471 -f 471 470 322 -f 324 326 472 -f 472 471 324 -f 473 459 461 -f 474 473 461 -f 474 461 462 -f 462 475 474 -f 462 463 476 -f 476 475 462 -f 463 464 477 -f 477 476 463 -f 464 465 478 -f 478 477 464 -f 465 466 479 -f 479 478 465 -f 466 467 480 -f 480 479 466 -f 480 467 468 -f 482 481 473 -f 473 474 482 -f 481 483 459 -f 459 473 481 -f 459 483 484 -f 484 458 459 -f 458 484 485 -f 487 486 481 -f 481 482 487 -f 481 486 483 -f 484 488 485 -f 490 489 488 -f 488 491 490 -f 348 349 492 -f 492 493 348 -f 485 492 303 -f 303 458 485 -f 303 492 349 -f 483 495 494 -f 494 496 483 -f 484 483 496 -f 496 497 484 -f 496 494 498 -f 498 497 496 -f 497 498 491 -f 491 488 497 -f 491 500 499 -f 499 490 491 -f 491 498 501 -f 501 500 491 -f 498 494 502 -f 502 504 503 -f 503 501 502 -f 492 485 488 -f 505 494 495 -f 505 495 506 -f 505 506 487 -f 505 487 507 -f 505 507 502 -f 505 502 494 -f 508 499 500 -f 500 509 508 -f 509 500 501 -f 501 503 509 -f 511 503 510 -f 510 512 511 -f 512 510 504 -f 511 514 513 -f 513 503 511 -f 504 516 515 -f 515 512 504 -f 504 518 517 -f 517 516 504 -f 504 507 518 -f 507 487 519 -f 519 518 507 -f 487 482 474 -f 474 519 487 -f 519 474 520 -f 519 521 517 -f 517 518 519 -f 521 523 522 -f 522 517 521 -f 523 525 524 -f 524 522 523 -f 525 527 526 -f 526 524 525 -f 527 529 528 -f 528 526 527 -f 529 531 530 -f 530 528 529 -f 531 533 532 -f 532 530 531 -f 533 535 534 -f 534 532 533 -f 535 537 536 -f 536 534 535 -f 521 519 520 -f 521 520 475 -f 475 520 474 -f 475 476 523 -f 523 521 475 -f 476 477 525 -f 525 523 476 -f 477 478 527 -f 527 525 477 -f 478 479 529 -f 529 527 478 -f 479 480 531 -f 531 529 479 -f 480 468 533 -f 533 531 480 -f 468 469 535 -f 535 533 468 -f 469 470 537 -f 537 535 469 -f 470 471 538 -f 538 537 470 -f 538 471 472 -f 517 522 539 -f 539 516 517 -f 522 524 540 -f 540 539 522 -f 524 526 541 -f 541 540 524 -f 526 528 542 -f 542 541 526 -f 528 530 543 -f 543 542 528 -f 530 532 544 -f 544 543 530 -f 532 534 545 -f 545 544 532 -f 534 536 546 -f 546 545 534 -f 546 536 547 -f 516 549 548 -f 548 515 516 -f 516 539 550 -f 550 549 516 -f 549 550 551 -f 551 552 549 -f 552 551 553 -f 540 411 412 -f 412 539 540 -f 542 543 414 -f 414 413 542 -f 545 546 416 -f 416 415 545 -f 512 515 418 -f 418 417 512 -f 515 539 412 -f 412 418 515 -f 511 512 417 -f 417 419 511 -f 514 511 419 -f 419 420 514 -f 554 514 420 -f 420 421 554 -f 554 513 514 -f 423 555 554 -f 554 421 423 -f 558 557 556 -f 559 472 430 -f 430 560 559 -f 560 430 432 -f 432 561 560 -f 538 562 536 -f 536 537 538 -f 536 562 547 -f 488 489 493 -f 493 492 488 -f 563 435 348 -f 348 493 563 -f 493 489 490 -f 490 563 493 -f 513 509 503 -f 554 508 509 -f 509 513 554 -f 555 508 554 -f 555 564 499 -f 499 508 555 -f 564 563 490 -f 490 499 564 -f 555 423 437 -f 437 564 555 -f 435 563 564 -f 564 437 435 -f 495 483 486 -f 486 487 506 -f 502 507 504 -f 484 497 488 -f 486 506 495 -f 566 565 552 -f 552 553 566 -f 549 552 565 -f 565 548 549 -f 566 553 551 -f 548 550 539 -f 539 515 548 -f 565 566 551 -f 551 548 565 -f 548 551 550 -f 455 296 454 -f 454 456 455 -f 440 296 455 -f 455 457 440 -f 294 441 440 -f 440 453 294 -f 453 440 457 -f 541 542 413 -f 413 442 541 -f 541 442 411 -f 411 540 541 -f 545 415 443 -f 443 544 545 -f 443 414 543 -f 543 544 443 -f 416 546 547 -f 547 444 416 -f 569 568 567 -f 567 557 569 -f 562 567 568 -f 568 547 562 -f 569 557 558 -f 326 430 472 -f 432 444 547 -f 570 561 432 -f 432 568 570 -f 568 432 547 -f 556 570 568 -f 568 569 556 -f 558 556 569 -f 556 557 567 -f 567 570 556 -f 561 570 567 -f 567 560 561 -f 559 560 567 -f 562 559 567 -f 472 559 562 -f 562 538 472 -f 460 449 307 -f 460 459 304 -f 304 449 460 -f 460 461 459 -f 502 501 498 -f 355 358 359 - -g dolph03 -usemtl dolph03 -f 573 572 571 -f 571 574 573 -f 575 573 574 -f 574 576 575 -f 577 575 576 -f 576 578 577 -f 579 577 578 -f 582 581 580 -f 574 571 583 -f 583 584 574 -f 576 574 584 -f 584 585 576 -f 578 576 585 -f 588 587 586 -f 589 586 587 -f 587 590 589 -f 593 592 591 -f 591 594 593 -f 594 591 595 -f 596 593 594 -f 594 597 596 -f 572 596 597 -f 597 571 572 -f 598 571 597 -f 583 571 598 -f 598 599 583 -f 580 583 599 -f 599 600 580 -f 582 580 600 -f 582 600 601 -f 601 602 582 -f 603 602 601 -f 601 604 603 -f 605 603 604 -f 604 606 605 -f 607 605 606 -f 606 608 607 -f 609 607 608 -f 608 610 609 -f 611 609 610 -f 610 612 611 -f 595 590 613 -f 595 613 614 -f 595 614 615 -f 615 594 595 -f 597 594 615 -f 615 616 597 -f 598 597 616 -f 616 617 598 -f 599 598 617 -f 617 618 599 -f 600 599 618 -f 618 619 600 -f 601 600 619 -f 619 620 601 -f 604 601 620 -f 622 621 614 -f 614 613 622 -f 623 622 613 -f 613 590 623 -f 624 623 590 -f 590 587 624 -f 625 624 587 -f 627 626 621 -f 621 622 627 -f 623 627 622 -f 625 628 624 -f 631 630 629 -f 629 628 631 -f 634 633 632 -f 632 635 634 -f 635 625 587 -f 587 588 635 -f 634 635 588 -f 637 623 636 -f 636 638 637 -f 623 624 639 -f 639 636 623 -f 638 636 639 -f 639 640 638 -f 640 639 628 -f 628 629 640 -f 641 629 630 -f 630 642 641 -f 640 629 641 -f 641 643 640 -f 644 638 640 -f 645 644 643 -f 643 646 645 -f 628 625 635 -f 637 638 647 -f 648 637 647 -f 626 648 647 -f 649 626 647 -f 644 649 647 -f 638 644 647 -f 642 651 650 -f 650 641 642 -f 641 650 646 -f 646 643 641 -f 653 646 652 -f 652 645 653 -f 645 652 654 -f 655 652 646 -f 646 656 655 -f 657 645 654 -f 654 658 657 -f 659 645 657 -f 657 660 659 -f 659 649 645 -f 626 649 659 -f 659 661 626 -f 614 621 626 -f 626 662 614 -f 662 626 661 -f 663 661 659 -f 659 660 663 -f 664 663 660 -f 660 665 664 -f 666 664 665 -f 665 667 666 -f 668 666 667 -f 667 669 668 -f 670 668 669 -f 669 671 670 -f 672 670 671 -f 671 673 672 -f 674 672 673 -f 673 675 674 -f 676 674 675 -f 675 677 676 -f 678 676 677 -f 677 679 678 -f 662 661 663 -f 615 662 663 -f 614 662 615 -f 616 615 663 -f 663 664 616 -f 617 616 664 -f 664 666 617 -f 618 617 666 -f 666 668 618 -f 619 618 668 -f 668 670 619 -f 620 619 670 -f 670 672 620 -f 604 620 672 -f 672 674 604 -f 606 604 674 -f 674 676 606 -f 608 606 676 -f 676 678 608 -f 610 608 678 -f 678 680 610 -f 612 610 680 -f 665 660 657 -f 657 681 665 -f 667 665 681 -f 681 682 667 -f 669 667 682 -f 682 683 669 -f 671 669 683 -f 683 684 671 -f 673 671 684 -f 684 685 673 -f 675 673 685 -f 685 686 675 -f 677 675 686 -f 686 687 677 -f 679 677 687 -f 687 688 679 -f 689 679 688 -f 690 657 658 -f 658 691 690 -f 681 657 690 -f 690 692 681 -f 693 692 690 -f 690 694 693 -f 694 690 695 -f 696 682 681 -f 681 697 696 -f 685 684 698 -f 698 699 685 -f 688 687 700 -f 700 701 688 -f 658 654 702 -f 702 703 658 -f 681 658 703 -f 703 697 681 -f 654 652 704 -f 704 702 654 -f 652 655 705 -f 705 704 652 -f 655 707 706 -f 706 705 655 -f 655 656 707 -f 709 708 706 -f 706 707 709 -f 712 711 710 -f 612 714 713 -f 713 715 612 -f 715 713 716 -f 716 717 715 -f 718 680 678 -f 678 679 718 -f 689 718 679 -f 631 628 635 -f 635 632 631 -f 720 719 632 -f 632 633 720 -f 631 632 719 -f 719 630 631 -f 646 650 656 -f 651 707 656 -f 656 650 651 -f 707 651 709 -f 721 709 651 -f 651 642 721 -f 719 721 642 -f 642 630 719 -f 708 709 721 -f 721 722 708 -f 719 720 722 -f 722 721 719 -f 627 623 637 -f 648 626 627 -f 645 649 644 -f 628 639 624 -f 637 648 627 -f 724 723 694 -f 694 695 724 -f 695 690 691 -f 691 724 695 -f 693 694 723 -f 692 691 658 -f 658 681 692 -f 693 723 724 -f 724 692 693 -f 692 724 691 -f 581 584 583 -f 583 580 581 -f 581 725 585 -f 585 584 581 -f 725 726 579 -f 579 585 725 -f 585 579 578 -f 684 683 727 -f 727 698 684 -f 727 683 682 -f 682 696 727 -f 700 687 686 -f 686 728 700 -f 699 728 686 -f 686 685 699 -f 688 701 729 -f 729 689 688 -f 731 730 711 -f 711 732 731 -f 732 718 689 -f 689 731 732 -f 710 711 730 -f 612 715 611 -f 689 729 717 -f 717 716 733 -f 733 689 717 -f 689 733 731 -f 733 712 730 -f 730 731 733 -f 730 712 710 -f 711 712 733 -f 733 732 711 -f 733 716 713 -f 713 732 733 -f 732 713 714 -f 732 714 718 -f 714 612 680 -f 680 718 714 -f 592 734 591 -f 590 591 734 -f 734 589 590 -f 590 595 591 -f 572 573 735 -f 735 736 572 -f 573 575 737 -f 737 735 573 -f 575 577 738 -f 738 737 575 -f 738 577 579 -f 739 581 582 -f 736 735 740 -f 740 741 736 -f 735 737 742 -f 742 740 735 -f 742 737 738 -f 586 743 588 -f 586 589 744 -f 744 743 586 -f 745 592 593 -f 593 746 745 -f 746 593 747 -f 593 596 748 -f 748 747 593 -f 596 572 736 -f 736 748 596 -f 748 736 749 -f 736 741 750 -f 750 749 736 -f 741 739 751 -f 751 750 741 -f 751 739 582 -f 751 582 602 -f 602 752 751 -f 602 603 753 -f 753 752 602 -f 603 605 754 -f 754 753 603 -f 605 607 755 -f 755 754 605 -f 607 609 756 -f 756 755 607 -f 609 611 757 -f 757 756 609 -f 758 744 746 -f 759 758 746 -f 759 746 747 -f 747 760 759 -f 747 748 761 -f 761 760 747 -f 748 749 762 -f 762 761 748 -f 749 750 763 -f 763 762 749 -f 750 751 764 -f 764 763 750 -f 751 752 765 -f 765 764 751 -f 765 752 753 -f 767 766 758 -f 758 759 767 -f 766 768 744 -f 744 758 766 -f 744 768 769 -f 769 743 744 -f 743 769 770 -f 772 771 766 -f 766 767 772 -f 766 771 768 -f 769 773 770 -f 775 774 773 -f 773 776 775 -f 633 634 777 -f 777 778 633 -f 770 777 588 -f 588 743 770 -f 588 777 634 -f 768 780 779 -f 779 781 768 -f 769 768 781 -f 781 782 769 -f 781 779 783 -f 783 782 781 -f 782 783 776 -f 776 773 782 -f 776 785 784 -f 784 775 776 -f 776 783 786 -f 786 785 776 -f 783 779 787 -f 787 789 788 -f 788 786 787 -f 777 770 773 -f 790 779 780 -f 790 780 791 -f 790 791 772 -f 790 772 792 -f 790 792 787 -f 790 787 779 -f 793 784 785 -f 785 794 793 -f 794 785 786 -f 786 788 794 -f 796 788 795 -f 795 797 796 -f 797 795 789 -f 796 799 798 -f 798 788 796 -f 789 801 800 -f 800 797 789 -f 789 803 802 -f 802 801 789 -f 789 792 803 -f 792 772 804 -f 804 803 792 -f 772 767 759 -f 759 804 772 -f 804 759 805 -f 804 806 802 -f 802 803 804 -f 806 808 807 -f 807 802 806 -f 808 810 809 -f 809 807 808 -f 810 812 811 -f 811 809 810 -f 812 814 813 -f 813 811 812 -f 814 816 815 -f 815 813 814 -f 816 818 817 -f 817 815 816 -f 818 820 819 -f 819 817 818 -f 820 822 821 -f 821 819 820 -f 806 804 805 -f 806 805 760 -f 760 805 759 -f 760 761 808 -f 808 806 760 -f 761 762 810 -f 810 808 761 -f 762 763 812 -f 812 810 762 -f 763 764 814 -f 814 812 763 -f 764 765 816 -f 816 814 764 -f 765 753 818 -f 818 816 765 -f 753 754 820 -f 820 818 753 -f 754 755 822 -f 822 820 754 -f 755 756 823 -f 823 822 755 -f 823 756 757 -f 802 807 824 -f 824 801 802 -f 807 809 825 -f 825 824 807 -f 809 811 826 -f 826 825 809 -f 811 813 827 -f 827 826 811 -f 813 815 828 -f 828 827 813 -f 815 817 829 -f 829 828 815 -f 817 819 830 -f 830 829 817 -f 819 821 831 -f 831 830 819 -f 831 821 832 -f 801 834 833 -f 833 800 801 -f 801 824 835 -f 835 834 801 -f 834 835 836 -f 836 837 834 -f 837 836 838 -f 825 696 697 -f 697 824 825 -f 827 828 699 -f 699 698 827 -f 830 831 701 -f 701 700 830 -f 797 800 703 -f 703 702 797 -f 800 824 697 -f 697 703 800 -f 796 797 702 -f 702 704 796 -f 799 796 704 -f 704 705 799 -f 839 799 705 -f 705 706 839 -f 839 798 799 -f 708 840 839 -f 839 706 708 -f 843 842 841 -f 844 757 715 -f 715 845 844 -f 845 715 717 -f 717 846 845 -f 823 847 821 -f 821 822 823 -f 821 847 832 -f 773 774 778 -f 778 777 773 -f 848 720 633 -f 633 778 848 -f 778 774 775 -f 775 848 778 -f 798 794 788 -f 839 793 794 -f 794 798 839 -f 840 793 839 -f 840 849 784 -f 784 793 840 -f 849 848 775 -f 775 784 849 -f 840 708 722 -f 722 849 840 -f 720 848 849 -f 849 722 720 -f 780 768 771 -f 771 772 791 -f 787 792 789 -f 769 782 773 -f 771 791 780 -f 851 850 837 -f 837 838 851 -f 834 837 850 -f 850 833 834 -f 851 838 836 -f 833 835 824 -f 824 800 833 -f 850 851 836 -f 836 833 850 -f 833 836 835 -f 740 581 739 -f 739 741 740 -f 725 581 740 -f 740 742 725 -f 579 726 725 -f 725 738 579 -f 738 725 742 -f 826 827 698 -f 698 727 826 -f 826 727 696 -f 696 825 826 -f 830 700 728 -f 728 829 830 -f 728 699 828 -f 828 829 728 -f 701 831 832 -f 832 729 701 -f 854 853 852 -f 852 842 854 -f 847 852 853 -f 853 832 847 -f 854 842 843 -f 611 715 757 -f 717 729 832 -f 855 846 717 -f 717 853 855 -f 853 717 832 -f 841 855 853 -f 853 854 841 -f 843 841 854 -f 841 842 852 -f 852 855 841 -f 846 855 852 -f 852 845 846 -f 844 845 852 -f 847 844 852 -f 757 844 847 -f 847 823 757 -f 745 734 592 -f 745 744 589 -f 589 734 745 -f 745 746 744 -f 787 786 783 -f 640 643 644 diff --git a/lib/glut-3.7.6/progs/demos/smooth/dirent32.h b/lib/glut-3.7.6/progs/demos/smooth/dirent32.h deleted file mode 100644 index 02608c4b3..000000000 --- a/lib/glut-3.7.6/progs/demos/smooth/dirent32.h +++ /dev/null @@ -1,96 +0,0 @@ -/* - - Win32 lacks unix dirent support. But, we can fake it. Many - thanks to Dave Lubrik (lubrik@jaka.ece.uiuc.edu) who found and - fixed many bugs in the original code. - - */ - - -#ifndef _WIN32 -#include -#else - -#include - - - -struct dirent { - char d_name[MAX_PATH]; -}; - -typedef struct { - WIN32_FIND_DATA wfd; - HANDLE hFind; - struct dirent de; -} DIR; - - -static DIR * -opendir(char *pSpec) -{ - DIR *pDir = malloc(sizeof(DIR)); - char pathnamespec[MAX_PATH]; - int l; /* length of directory specifier */ - char c; /* last char of directory specifier */ - - /* Given a directory pathname in pSpec, add \ (if necessary) and * - to yield a globbable expression describing all the files in that - directory */ - strcpy(pathnamespec, pSpec); - - /* Add a \ to separate the directory name from the filename-wildcard - "*", unless it already ends in a \ (don't create \\ sequences), - or it is a drivespec (since "C:*" differs in meaning from "C:\*") */ - if (((l = strlen(pSpec)) > 0) && ((c = pSpec[l-1]) != '\\') && (c != ':')) - strcat(pathnamespec, "\\"); - - /* Add the filename wildcard "*" */ - strcat(pathnamespec,"*"); - - /* Find files matching that expression (all the files in that - directory) */ - pDir->hFind = FindFirstFile(pathnamespec, &pDir->wfd); - - return pDir; -} - - -/* closedir takes a pointer to a DIR structure created by opendir, and - frees up resources allocated by opendir. Call it when done with a - directory. */ -static void -closedir(DIR * pDir) -{ - FindClose(pDir->hFind); /* Release system resources */ - free(pDir); /* release memory */ -} - -/* readdir is used to iterate through the files in a directory. It - takes a pointer to a DIR structure created by opendir, and each - time it is called it returns the name of another file in the - directory passed to opendir. Returns: a pointer to a dirent - structure, containing the file name. NULL if there are no more - files in the directory. */ -static struct dirent * -readdir(DIR *pDir) -{ - /* The previous call to opendir or readdir has already found the next - file (using FindFirstFile or FindNextFile respectively). Return - that file name to the caller, and silently find the next one. */ - - if (*(pDir->wfd.cFileName)) { /* If we haven't exhausted the files */ - strcpy(pDir->de.d_name, pDir->wfd.cFileName); /* copy name */ - - if (!FindNextFile(pDir->hFind, &pDir->wfd)) /* get next */ - *(pDir->wfd.cFileName) = 0; - /* if no more, zero next filename, so that next time through, - we don't even try. */ - - return &pDir->de; /* return dirent struct w/filename */ - } - - return NULL; /* No more files to find. */ -} - -#endif diff --git a/lib/glut-3.7.6/progs/demos/smooth/glm.c b/lib/glut-3.7.6/progs/demos/smooth/glm.c deleted file mode 100644 index 7cd33c5fe..000000000 --- a/lib/glut-3.7.6/progs/demos/smooth/glm.c +++ /dev/null @@ -1,1837 +0,0 @@ -/* - glm.c - Nate Robins, 1997 - ndr@pobox.com, http://www.pobox.com/~ndr/ - - Wavefront OBJ model file format reader/writer/manipulator. - - Includes routines for generating smooth normals with - preservation of edges, welding redundant vertices & texture - coordinate generation (spheremap and planar projections) + more. - - */ - - -#include -#include -#include -#include -#include -#include "glm.h" - - -#define T(x) (model->triangles[(x)]) - - -/* _GLMnode: general purpose node - */ -typedef struct _GLMnode { - GLuint index; - GLboolean averaged; - struct _GLMnode* next; -} GLMnode; - - -/* glmMax: returns the maximum of two floats */ -static GLfloat -glmMax(GLfloat a, GLfloat b) -{ - if (b > a) - return b; - return a; -} - -/* glmAbs: returns the absolute value of a float */ -static GLfloat -glmAbs(GLfloat f) -{ - if (f < 0) - return -f; - return f; -} - -/* glmDot: compute the dot product of two vectors - * - * u - array of 3 GLfloats (GLfloat u[3]) - * v - array of 3 GLfloats (GLfloat v[3]) - */ -static GLfloat -glmDot(GLfloat* u, GLfloat* v) -{ - assert(u); assert(v); - - return u[0]*v[0] + u[1]*v[1] + u[2]*v[2]; -} - -/* glmCross: compute the cross product of two vectors - * - * u - array of 3 GLfloats (GLfloat u[3]) - * v - array of 3 GLfloats (GLfloat v[3]) - * n - array of 3 GLfloats (GLfloat n[3]) to return the cross product in - */ -static GLvoid -glmCross(GLfloat* u, GLfloat* v, GLfloat* n) -{ - assert(u); assert(v); assert(n); - - n[0] = u[1]*v[2] - u[2]*v[1]; - n[1] = u[2]*v[0] - u[0]*v[2]; - n[2] = u[0]*v[1] - u[1]*v[0]; -} - -/* glmNormalize: normalize a vector - * - * v - array of 3 GLfloats (GLfloat v[3]) to be normalized - */ -static GLvoid -glmNormalize(GLfloat* v) -{ - GLfloat l; - - assert(v); - - l = (GLfloat)sqrt(v[0]*v[0] + v[1]*v[1] + v[2]*v[2]); - v[0] /= l; - v[1] /= l; - v[2] /= l; -} - -/* glmEqual: compares two vectors and returns GL_TRUE if they are - * equal (within a certain threshold) or GL_FALSE if not. An epsilon - * that works fairly well is 0.000001. - * - * u - array of 3 GLfloats (GLfloat u[3]) - * v - array of 3 GLfloats (GLfloat v[3]) - */ -static GLboolean -glmEqual(GLfloat* u, GLfloat* v, GLfloat epsilon) -{ - if (glmAbs(u[0] - v[0]) < epsilon && - glmAbs(u[1] - v[1]) < epsilon && - glmAbs(u[2] - v[2]) < epsilon) - { - return GL_TRUE; - } - return GL_FALSE; -} - -/* glmWeldVectors: eliminate (weld) vectors that are within an - * epsilon of each other. - * - * vectors - array of GLfloat[3]'s to be welded - * numvectors - number of GLfloat[3]'s in vectors - * epsilon - maximum difference between vectors - * - */ -GLfloat* -glmWeldVectors(GLfloat* vectors, GLuint* numvectors, GLfloat epsilon) -{ - GLfloat* copies; - GLuint copied; - GLuint i, j; - - copies = (GLfloat*)malloc(sizeof(GLfloat) * 3 * (*numvectors + 1)); - memcpy(copies, vectors, (sizeof(GLfloat) * 3 * (*numvectors + 1))); - - copied = 1; - for (i = 1; i <= *numvectors; i++) { - for (j = 1; j <= copied; j++) { - if (glmEqual(&vectors[3 * i], &copies[3 * j], epsilon)) { - goto duplicate; - } - } - - /* must not be any duplicates -- add to the copies array */ - copies[3 * copied + 0] = vectors[3 * i + 0]; - copies[3 * copied + 1] = vectors[3 * i + 1]; - copies[3 * copied + 2] = vectors[3 * i + 2]; - j = copied; /* pass this along for below */ - copied++; - - duplicate: - /* set the first component of this vector to point at the correct - index into the new copies array */ - vectors[3 * i + 0] = (GLfloat)j; - } - - *numvectors = copied-1; - return copies; -} - -/* glmFindGroup: Find a group in the model - */ -GLMgroup* -glmFindGroup(GLMmodel* model, char* name) -{ - GLMgroup* group; - - assert(model); - - group = model->groups; - while(group) { - if (!strcmp(name, group->name)) - break; - group = group->next; - } - - return group; -} - -/* glmAddGroup: Add a group to the model - */ -GLMgroup* -glmAddGroup(GLMmodel* model, char* name) -{ - GLMgroup* group; - - group = glmFindGroup(model, name); - if (!group) { - group = (GLMgroup*)malloc(sizeof(GLMgroup)); - group->name = strdup(name); - group->material = 0; - group->numtriangles = 0; - group->triangles = NULL; - group->next = model->groups; - model->groups = group; - model->numgroups++; - } - - return group; -} - -/* glmFindGroup: Find a material in the model - */ -GLuint -glmFindMaterial(GLMmodel* model, char* name) -{ - GLuint i; - - /* XXX doing a linear search on a string key'd list is pretty lame, - but it works and is fast enough for now. */ - for (i = 0; i < model->nummaterials; i++) { - if (!strcmp(model->materials[i].name, name)) - goto found; - } - - /* didn't find the name, so print a warning and return the default - material (0). */ - printf("glmFindMaterial(): can't find material \"%s\".\n", name); - i = 0; - -found: - return i; -} - - -/* glmDirName: return the directory given a path - * - * path - filesystem path - * - * NOTE: the return value should be free'd. - */ -static char* -glmDirName(char* path) -{ - char* dir; - char* s; - - dir = strdup(path); - - s = strrchr(dir, '/'); - if (s) - s[1] = '\0'; - else - dir[0] = '\0'; - - return dir; -} - - -/* glmReadMTL: read a wavefront material library file - * - * model - properly initialized GLMmodel structure - * name - name of the material library - */ -static GLvoid -glmReadMTL(GLMmodel* model, char* name) -{ - FILE* file; - char* dir; - char* filename; - char buf[128]; - GLuint nummaterials, i; - - dir = glmDirName(model->pathname); - filename = (char*)malloc(sizeof(char) * (strlen(dir) + strlen(name) + 1)); - strcpy(filename, dir); - strcat(filename, name); - free(dir); - - file = fopen(filename, "r"); - if (!file) { - fprintf(stderr, "glmReadMTL() failed: can't open material file \"%s\".\n", - filename); - exit(1); - } - free(filename); - - /* count the number of materials in the file */ - nummaterials = 1; - while(fscanf(file, "%s", buf) != EOF) { - switch(buf[0]) { - case '#': /* comment */ - /* eat up rest of line */ - fgets(buf, sizeof(buf), file); - break; - case 'n': /* newmtl */ - fgets(buf, sizeof(buf), file); - nummaterials++; - sscanf(buf, "%s %s", buf, buf); - break; - default: - /* eat up rest of line */ - fgets(buf, sizeof(buf), file); - break; - } - } - - rewind(file); - - model->materials = (GLMmaterial*)malloc(sizeof(GLMmaterial) * nummaterials); - model->nummaterials = nummaterials; - - /* set the default material */ - for (i = 0; i < nummaterials; i++) { - model->materials[i].name = NULL; - model->materials[i].shininess = 65.0; - model->materials[i].diffuse[0] = 0.8; - model->materials[i].diffuse[1] = 0.8; - model->materials[i].diffuse[2] = 0.8; - model->materials[i].diffuse[3] = 1.0; - model->materials[i].ambient[0] = 0.2; - model->materials[i].ambient[1] = 0.2; - model->materials[i].ambient[2] = 0.2; - model->materials[i].ambient[3] = 1.0; - model->materials[i].specular[0] = 0.0; - model->materials[i].specular[1] = 0.0; - model->materials[i].specular[2] = 0.0; - model->materials[i].specular[3] = 1.0; - } - model->materials[0].name = strdup("default"); - - /* now, read in the data */ - nummaterials = 0; - while(fscanf(file, "%s", buf) != EOF) { - switch(buf[0]) { - case '#': /* comment */ - /* eat up rest of line */ - fgets(buf, sizeof(buf), file); - break; - case 'n': /* newmtl */ - fgets(buf, sizeof(buf), file); - sscanf(buf, "%s %s", buf, buf); - nummaterials++; - model->materials[nummaterials].name = strdup(buf); - break; - case 'N': - fscanf(file, "%f", &model->materials[nummaterials].shininess); - /* wavefront shininess is from [0, 1000], so scale for OpenGL */ - model->materials[nummaterials].shininess /= 1000.0; - model->materials[nummaterials].shininess *= 128.0; - break; - case 'K': - switch(buf[1]) { - case 'd': - fscanf(file, "%f %f %f", - &model->materials[nummaterials].diffuse[0], - &model->materials[nummaterials].diffuse[1], - &model->materials[nummaterials].diffuse[2]); - break; - case 's': - fscanf(file, "%f %f %f", - &model->materials[nummaterials].specular[0], - &model->materials[nummaterials].specular[1], - &model->materials[nummaterials].specular[2]); - break; - case 'a': - fscanf(file, "%f %f %f", - &model->materials[nummaterials].ambient[0], - &model->materials[nummaterials].ambient[1], - &model->materials[nummaterials].ambient[2]); - break; - default: - /* eat up rest of line */ - fgets(buf, sizeof(buf), file); - break; - } - break; - default: - /* eat up rest of line */ - fgets(buf, sizeof(buf), file); - break; - } - } -} - -/* glmWriteMTL: write a wavefront material library file - * - * model - properly initialized GLMmodel structure - * modelpath - pathname of the model being written - * mtllibname - name of the material library to be written - */ -static GLvoid -glmWriteMTL(GLMmodel* model, char* modelpath, char* mtllibname) -{ - FILE* file; - char* dir; - char* filename; - GLMmaterial* material; - GLuint i; - - dir = glmDirName(modelpath); - filename = (char*)malloc(sizeof(char) * (strlen(dir)+strlen(mtllibname))); - strcpy(filename, dir); - strcat(filename, mtllibname); - free(dir); - - /* open the file */ - file = fopen(filename, "w"); - if (!file) { - fprintf(stderr, "glmWriteMTL() failed: can't open file \"%s\".\n", - filename); - exit(1); - } - free(filename); - - /* spit out a header */ - fprintf(file, "# \n"); - fprintf(file, "# Wavefront MTL generated by GLM library\n"); - fprintf(file, "# \n"); - fprintf(file, "# GLM library\n"); - fprintf(file, "# Nate Robins\n"); - fprintf(file, "# ndr@pobox.com\n"); - fprintf(file, "# http://www.pobox.com/~ndr\n"); - fprintf(file, "# \n\n"); - - for (i = 0; i < model->nummaterials; i++) { - material = &model->materials[i]; - fprintf(file, "newmtl %s\n", material->name); - fprintf(file, "Ka %f %f %f\n", - material->ambient[0], material->ambient[1], material->ambient[2]); - fprintf(file, "Kd %f %f %f\n", - material->diffuse[0], material->diffuse[1], material->diffuse[2]); - fprintf(file, "Ks %f %f %f\n", - material->specular[0],material->specular[1],material->specular[2]); - fprintf(file, "Ns %f\n", material->shininess / 128.0 * 1000.0); - fprintf(file, "\n"); - } -} - - -/* glmFirstPass: first pass at a Wavefront OBJ file that gets all the - * statistics of the model (such as #vertices, #normals, etc) - * - * model - properly initialized GLMmodel structure - * file - (fopen'd) file descriptor - */ -static GLvoid -glmFirstPass(GLMmodel* model, FILE* file) -{ - GLuint numvertices; /* number of vertices in model */ - GLuint numnormals; /* number of normals in model */ - GLuint numtexcoords; /* number of texcoords in model */ - GLuint numtriangles; /* number of triangles in model */ - GLMgroup* group; /* current group */ - unsigned v, n, t; - char buf[128]; - - /* make a default group */ - group = glmAddGroup(model, "default"); - - numvertices = numnormals = numtexcoords = numtriangles = 0; - while(fscanf(file, "%s", buf) != EOF) { - switch(buf[0]) { - case '#': /* comment */ - /* eat up rest of line */ - fgets(buf, sizeof(buf), file); - break; - case 'v': /* v, vn, vt */ - switch(buf[1]) { - case '\0': /* vertex */ - /* eat up rest of line */ - fgets(buf, sizeof(buf), file); - numvertices++; - break; - case 'n': /* normal */ - /* eat up rest of line */ - fgets(buf, sizeof(buf), file); - numnormals++; - break; - case 't': /* texcoord */ - /* eat up rest of line */ - fgets(buf, sizeof(buf), file); - numtexcoords++; - break; - default: - printf("glmFirstPass(): Unknown token \"%s\".\n", buf); - exit(1); - break; - } - break; - case 'm': - fgets(buf, sizeof(buf), file); - sscanf(buf, "%s %s", buf, buf); - model->mtllibname = strdup(buf); - glmReadMTL(model, buf); - break; - case 'u': - /* eat up rest of line */ - fgets(buf, sizeof(buf), file); - break; - case 'g': /* group */ - /* eat up rest of line */ - fgets(buf, sizeof(buf), file); -#if SINGLE_STRING_GROUP_NAMES - sscanf(buf, "%s", buf); -#else - buf[strlen(buf)-1] = '\0'; /* nuke '\n' */ -#endif - group = glmAddGroup(model, buf); - break; - case 'f': /* face */ - v = n = t = 0; - fscanf(file, "%s", buf); - /* can be one of %d, %d//%d, %d/%d, %d/%d/%d %d//%d */ - if (strstr(buf, "//")) { - /* v//n */ - sscanf(buf, "%d//%d", &v, &n); - fscanf(file, "%d//%d", &v, &n); - fscanf(file, "%d//%d", &v, &n); - numtriangles++; - group->numtriangles++; - while(fscanf(file, "%d//%d", &v, &n) > 0) { - numtriangles++; - group->numtriangles++; - } - } else if (sscanf(buf, "%d/%d/%d", &v, &t, &n) == 3) { - /* v/t/n */ - fscanf(file, "%d/%d/%d", &v, &t, &n); - fscanf(file, "%d/%d/%d", &v, &t, &n); - numtriangles++; - group->numtriangles++; - while(fscanf(file, "%d/%d/%d", &v, &t, &n) > 0) { - numtriangles++; - group->numtriangles++; - } - } else if (sscanf(buf, "%d/%d", &v, &t) == 2) { - /* v/t */ - fscanf(file, "%d/%d", &v, &t); - fscanf(file, "%d/%d", &v, &t); - numtriangles++; - group->numtriangles++; - while(fscanf(file, "%d/%d", &v, &t) > 0) { - numtriangles++; - group->numtriangles++; - } - } else { - /* v */ - fscanf(file, "%d", &v); - fscanf(file, "%d", &v); - numtriangles++; - group->numtriangles++; - while(fscanf(file, "%d", &v) > 0) { - numtriangles++; - group->numtriangles++; - } - } - break; - - default: - /* eat up rest of line */ - fgets(buf, sizeof(buf), file); - break; - } - } - - /* set the stats in the model structure */ - model->numvertices = numvertices; - model->numnormals = numnormals; - model->numtexcoords = numtexcoords; - model->numtriangles = numtriangles; - - /* allocate memory for the triangles in each group */ - group = model->groups; - while(group) { - group->triangles = (GLuint*)malloc(sizeof(GLuint) * group->numtriangles); - group->numtriangles = 0; - group = group->next; - } -} - -/* glmSecondPass: second pass at a Wavefront OBJ file that gets all - * the data. - * - * model - properly initialized GLMmodel structure - * file - (fopen'd) file descriptor - */ -static GLvoid -glmSecondPass(GLMmodel* model, FILE* file) -{ - GLuint numvertices; /* number of vertices in model */ - GLuint numnormals; /* number of normals in model */ - GLuint numtexcoords; /* number of texcoords in model */ - GLuint numtriangles; /* number of triangles in model */ - GLfloat* vertices; /* array of vertices */ - GLfloat* normals; /* array of normals */ - GLfloat* texcoords; /* array of texture coordinates */ - GLMgroup* group; /* current group pointer */ - GLuint material; /* current material */ - GLuint v, n, t; - char buf[128]; - - /* set the pointer shortcuts */ - vertices = model->vertices; - normals = model->normals; - texcoords = model->texcoords; - group = model->groups; - - /* on the second pass through the file, read all the data into the - allocated arrays */ - numvertices = numnormals = numtexcoords = 1; - numtriangles = 0; - material = 0; - while(fscanf(file, "%s", buf) != EOF) { - switch(buf[0]) { - case '#': /* comment */ - /* eat up rest of line */ - fgets(buf, sizeof(buf), file); - break; - case 'v': /* v, vn, vt */ - switch(buf[1]) { - case '\0': /* vertex */ - fscanf(file, "%f %f %f", - &vertices[3 * numvertices + 0], - &vertices[3 * numvertices + 1], - &vertices[3 * numvertices + 2]); - numvertices++; - break; - case 'n': /* normal */ - fscanf(file, "%f %f %f", - &normals[3 * numnormals + 0], - &normals[3 * numnormals + 1], - &normals[3 * numnormals + 2]); - numnormals++; - break; - case 't': /* texcoord */ - fscanf(file, "%f %f", - &texcoords[2 * numtexcoords + 0], - &texcoords[2 * numtexcoords + 1]); - numtexcoords++; - break; - } - break; - case 'u': - fgets(buf, sizeof(buf), file); - sscanf(buf, "%s %s", buf, buf); - group->material = material = glmFindMaterial(model, buf); - break; - case 'g': /* group */ - /* eat up rest of line */ - fgets(buf, sizeof(buf), file); -#if SINGLE_STRING_GROUP_NAMES - sscanf(buf, "%s", buf); -#else - buf[strlen(buf)-1] = '\0'; /* nuke '\n' */ -#endif - group = glmFindGroup(model, buf); - group->material = material; - break; - case 'f': /* face */ - v = n = t = 0; - fscanf(file, "%s", buf); - /* can be one of %d, %d//%d, %d/%d, %d/%d/%d %d//%d */ - if (strstr(buf, "//")) { - /* v//n */ - sscanf(buf, "%d//%d", &v, &n); - T(numtriangles).vindices[0] = v; - T(numtriangles).nindices[0] = n; - fscanf(file, "%d//%d", &v, &n); - T(numtriangles).vindices[1] = v; - T(numtriangles).nindices[1] = n; - fscanf(file, "%d//%d", &v, &n); - T(numtriangles).vindices[2] = v; - T(numtriangles).nindices[2] = n; - group->triangles[group->numtriangles++] = numtriangles; - numtriangles++; - while(fscanf(file, "%d//%d", &v, &n) > 0) { - T(numtriangles).vindices[0] = T(numtriangles-1).vindices[0]; - T(numtriangles).nindices[0] = T(numtriangles-1).nindices[0]; - T(numtriangles).vindices[1] = T(numtriangles-1).vindices[2]; - T(numtriangles).nindices[1] = T(numtriangles-1).nindices[2]; - T(numtriangles).vindices[2] = v; - T(numtriangles).nindices[2] = n; - group->triangles[group->numtriangles++] = numtriangles; - numtriangles++; - } - } else if (sscanf(buf, "%d/%d/%d", &v, &t, &n) == 3) { - /* v/t/n */ - T(numtriangles).vindices[0] = v; - T(numtriangles).tindices[0] = t; - T(numtriangles).nindices[0] = n; - fscanf(file, "%d/%d/%d", &v, &t, &n); - T(numtriangles).vindices[1] = v; - T(numtriangles).tindices[1] = t; - T(numtriangles).nindices[1] = n; - fscanf(file, "%d/%d/%d", &v, &t, &n); - T(numtriangles).vindices[2] = v; - T(numtriangles).tindices[2] = t; - T(numtriangles).nindices[2] = n; - group->triangles[group->numtriangles++] = numtriangles; - numtriangles++; - while(fscanf(file, "%d/%d/%d", &v, &t, &n) > 0) { - T(numtriangles).vindices[0] = T(numtriangles-1).vindices[0]; - T(numtriangles).tindices[0] = T(numtriangles-1).tindices[0]; - T(numtriangles).nindices[0] = T(numtriangles-1).nindices[0]; - T(numtriangles).vindices[1] = T(numtriangles-1).vindices[2]; - T(numtriangles).tindices[1] = T(numtriangles-1).tindices[2]; - T(numtriangles).nindices[1] = T(numtriangles-1).nindices[2]; - T(numtriangles).vindices[2] = v; - T(numtriangles).tindices[2] = t; - T(numtriangles).nindices[2] = n; - group->triangles[group->numtriangles++] = numtriangles; - numtriangles++; - } - } else if (sscanf(buf, "%d/%d", &v, &t) == 2) { - /* v/t */ - T(numtriangles).vindices[0] = v; - T(numtriangles).tindices[0] = t; - fscanf(file, "%d/%d", &v, &t); - T(numtriangles).vindices[1] = v; - T(numtriangles).tindices[1] = t; - fscanf(file, "%d/%d", &v, &t); - T(numtriangles).vindices[2] = v; - T(numtriangles).tindices[2] = t; - group->triangles[group->numtriangles++] = numtriangles; - numtriangles++; - while(fscanf(file, "%d/%d", &v, &t) > 0) { - T(numtriangles).vindices[0] = T(numtriangles-1).vindices[0]; - T(numtriangles).tindices[0] = T(numtriangles-1).tindices[0]; - T(numtriangles).vindices[1] = T(numtriangles-1).vindices[2]; - T(numtriangles).tindices[1] = T(numtriangles-1).tindices[2]; - T(numtriangles).vindices[2] = v; - T(numtriangles).tindices[2] = t; - group->triangles[group->numtriangles++] = numtriangles; - numtriangles++; - } - } else { - /* v */ - sscanf(buf, "%d", &v); - T(numtriangles).vindices[0] = v; - fscanf(file, "%d", &v); - T(numtriangles).vindices[1] = v; - fscanf(file, "%d", &v); - T(numtriangles).vindices[2] = v; - group->triangles[group->numtriangles++] = numtriangles; - numtriangles++; - while(fscanf(file, "%d", &v) > 0) { - T(numtriangles).vindices[0] = T(numtriangles-1).vindices[0]; - T(numtriangles).vindices[1] = T(numtriangles-1).vindices[2]; - T(numtriangles).vindices[2] = v; - group->triangles[group->numtriangles++] = numtriangles; - numtriangles++; - } - } - break; - - default: - /* eat up rest of line */ - fgets(buf, sizeof(buf), file); - break; - } - } - -#if 0 - /* announce the memory requirements */ - printf(" Memory: %d bytes\n", - numvertices * 3*sizeof(GLfloat) + - numnormals * 3*sizeof(GLfloat) * (numnormals ? 1 : 0) + - numtexcoords * 3*sizeof(GLfloat) * (numtexcoords ? 1 : 0) + - numtriangles * sizeof(GLMtriangle)); -#endif -} - - - - -/* glmUnitize: "unitize" a model by translating it to the origin and - * scaling it to fit in a unit cube around the origin (-1 to 1 in all - * dimensions). - * Returns the scalefactor used. - * - * model - properly initialized GLMmodel structure - */ -GLfloat -glmUnitize(GLMmodel* model) -{ - GLuint i; - GLfloat maxx, minx, maxy, miny, maxz, minz; - GLfloat cx, cy, cz, w, h, d; - GLfloat scale; - - assert(model); - assert(model->vertices); - - /* get the max/mins */ - maxx = minx = model->vertices[3 + 0]; - maxy = miny = model->vertices[3 + 1]; - maxz = minz = model->vertices[3 + 2]; - for (i = 1; i <= model->numvertices; i++) { - if (maxx < model->vertices[3 * i + 0]) - maxx = model->vertices[3 * i + 0]; - if (minx > model->vertices[3 * i + 0]) - minx = model->vertices[3 * i + 0]; - - if (maxy < model->vertices[3 * i + 1]) - maxy = model->vertices[3 * i + 1]; - if (miny > model->vertices[3 * i + 1]) - miny = model->vertices[3 * i + 1]; - - if (maxz < model->vertices[3 * i + 2]) - maxz = model->vertices[3 * i + 2]; - if (minz > model->vertices[3 * i + 2]) - minz = model->vertices[3 * i + 2]; - } - - /* calculate model width, height, and depth */ - w = glmAbs(maxx) + glmAbs(minx); - h = glmAbs(maxy) + glmAbs(miny); - d = glmAbs(maxz) + glmAbs(minz); - - /* calculate center of the model */ - cx = (maxx + minx) / 2.0; - cy = (maxy + miny) / 2.0; - cz = (maxz + minz) / 2.0; - - /* calculate unitizing scale factor */ - scale = 2.0 / glmMax(glmMax(w, h), d); - - /* translate around center then scale */ - for (i = 1; i <= model->numvertices; i++) { - model->vertices[3 * i + 0] -= cx; - model->vertices[3 * i + 1] -= cy; - model->vertices[3 * i + 2] -= cz; - model->vertices[3 * i + 0] *= scale; - model->vertices[3 * i + 1] *= scale; - model->vertices[3 * i + 2] *= scale; - } - - return scale; -} - -/* glmDimensions: Calculates the dimensions (width, height, depth) of - * a model. - * - * model - initialized GLMmodel structure - * dimensions - array of 3 GLfloats (GLfloat dimensions[3]) - */ -GLvoid -glmDimensions(GLMmodel* model, GLfloat* dimensions) -{ - GLuint i; - GLfloat maxx, minx, maxy, miny, maxz, minz; - - assert(model); - assert(model->vertices); - assert(dimensions); - - /* get the max/mins */ - maxx = minx = model->vertices[3 + 0]; - maxy = miny = model->vertices[3 + 1]; - maxz = minz = model->vertices[3 + 2]; - for (i = 1; i <= model->numvertices; i++) { - if (maxx < model->vertices[3 * i + 0]) - maxx = model->vertices[3 * i + 0]; - if (minx > model->vertices[3 * i + 0]) - minx = model->vertices[3 * i + 0]; - - if (maxy < model->vertices[3 * i + 1]) - maxy = model->vertices[3 * i + 1]; - if (miny > model->vertices[3 * i + 1]) - miny = model->vertices[3 * i + 1]; - - if (maxz < model->vertices[3 * i + 2]) - maxz = model->vertices[3 * i + 2]; - if (minz > model->vertices[3 * i + 2]) - minz = model->vertices[3 * i + 2]; - } - - /* calculate model width, height, and depth */ - dimensions[0] = glmAbs(maxx) + glmAbs(minx); - dimensions[1] = glmAbs(maxy) + glmAbs(miny); - dimensions[2] = glmAbs(maxz) + glmAbs(minz); -} - -/* glmScale: Scales a model by a given amount. - * - * model - properly initialized GLMmodel structure - * scale - scalefactor (0.5 = half as large, 2.0 = twice as large) - */ -GLvoid -glmScale(GLMmodel* model, GLfloat scale) -{ - GLuint i; - - for (i = 1; i <= model->numvertices; i++) { - model->vertices[3 * i + 0] *= scale; - model->vertices[3 * i + 1] *= scale; - model->vertices[3 * i + 2] *= scale; - } -} - -/* glmReverseWinding: Reverse the polygon winding for all polygons in - * this model. Default winding is counter-clockwise. Also changes - * the direction of the normals. - * - * model - properly initialized GLMmodel structure - */ -GLvoid -glmReverseWinding(GLMmodel* model) -{ - GLuint i, swap; - - assert(model); - - for (i = 0; i < model->numtriangles; i++) { - swap = T(i).vindices[0]; - T(i).vindices[0] = T(i).vindices[2]; - T(i).vindices[2] = swap; - - if (model->numnormals) { - swap = T(i).nindices[0]; - T(i).nindices[0] = T(i).nindices[2]; - T(i).nindices[2] = swap; - } - - if (model->numtexcoords) { - swap = T(i).tindices[0]; - T(i).tindices[0] = T(i).tindices[2]; - T(i).tindices[2] = swap; - } - } - - /* reverse facet normals */ - for (i = 1; i <= model->numfacetnorms; i++) { - model->facetnorms[3 * i + 0] = -model->facetnorms[3 * i + 0]; - model->facetnorms[3 * i + 1] = -model->facetnorms[3 * i + 1]; - model->facetnorms[3 * i + 2] = -model->facetnorms[3 * i + 2]; - } - - /* reverse vertex normals */ - for (i = 1; i <= model->numnormals; i++) { - model->normals[3 * i + 0] = -model->normals[3 * i + 0]; - model->normals[3 * i + 1] = -model->normals[3 * i + 1]; - model->normals[3 * i + 2] = -model->normals[3 * i + 2]; - } -} - -/* glmFacetNormals: Generates facet normals for a model (by taking the - * cross product of the two vectors derived from the sides of each - * triangle). Assumes a counter-clockwise winding. - * - * model - initialized GLMmodel structure - */ -GLvoid -glmFacetNormals(GLMmodel* model) -{ - GLuint i; - GLfloat u[3]; - GLfloat v[3]; - - assert(model); - assert(model->vertices); - - /* clobber any old facetnormals */ - if (model->facetnorms) - free(model->facetnorms); - - /* allocate memory for the new facet normals */ - model->numfacetnorms = model->numtriangles; - model->facetnorms = (GLfloat*)malloc(sizeof(GLfloat) * - 3 * (model->numfacetnorms + 1)); - - for (i = 0; i < model->numtriangles; i++) { - model->triangles[i].findex = i+1; - - u[0] = model->vertices[3 * T(i).vindices[1] + 0] - - model->vertices[3 * T(i).vindices[0] + 0]; - u[1] = model->vertices[3 * T(i).vindices[1] + 1] - - model->vertices[3 * T(i).vindices[0] + 1]; - u[2] = model->vertices[3 * T(i).vindices[1] + 2] - - model->vertices[3 * T(i).vindices[0] + 2]; - - v[0] = model->vertices[3 * T(i).vindices[2] + 0] - - model->vertices[3 * T(i).vindices[0] + 0]; - v[1] = model->vertices[3 * T(i).vindices[2] + 1] - - model->vertices[3 * T(i).vindices[0] + 1]; - v[2] = model->vertices[3 * T(i).vindices[2] + 2] - - model->vertices[3 * T(i).vindices[0] + 2]; - - glmCross(u, v, &model->facetnorms[3 * (i+1)]); - glmNormalize(&model->facetnorms[3 * (i+1)]); - } -} - -/* glmVertexNormals: Generates smooth vertex normals for a model. - * First builds a list of all the triangles each vertex is in. Then - * loops through each vertex in the the list averaging all the facet - * normals of the triangles each vertex is in. Finally, sets the - * normal index in the triangle for the vertex to the generated smooth - * normal. If the dot product of a facet normal and the facet normal - * associated with the first triangle in the list of triangles the - * current vertex is in is greater than the cosine of the angle - * parameter to the function, that facet normal is not added into the - * average normal calculation and the corresponding vertex is given - * the facet normal. This tends to preserve hard edges. The angle to - * use depends on the model, but 90 degrees is usually a good start. - * - * model - initialized GLMmodel structure - * angle - maximum angle (in degrees) to smooth across - */ -GLvoid -glmVertexNormals(GLMmodel* model, GLfloat angle) -{ - GLMnode* node; - GLMnode* tail; - GLMnode** members; - GLfloat* normals; - GLuint numnormals; - GLfloat average[3]; - GLfloat dot, cos_angle; - GLuint i, avg; - - assert(model); - assert(model->facetnorms); - - /* calculate the cosine of the angle (in degrees) */ - cos_angle = cos(angle * M_PI / 180.0); - - /* nuke any previous normals */ - if (model->normals) - free(model->normals); - - /* allocate space for new normals */ - model->numnormals = model->numtriangles * 3; /* 3 normals per triangle */ - model->normals = (GLfloat*)malloc(sizeof(GLfloat)* 3* (model->numnormals+1)); - - /* allocate a structure that will hold a linked list of triangle - indices for each vertex */ - members = (GLMnode**)malloc(sizeof(GLMnode*) * (model->numvertices + 1)); - for (i = 1; i <= model->numvertices; i++) - members[i] = NULL; - - /* for every triangle, create a node for each vertex in it */ - for (i = 0; i < model->numtriangles; i++) { - node = (GLMnode*)malloc(sizeof(GLMnode)); - node->index = i; - node->next = members[T(i).vindices[0]]; - members[T(i).vindices[0]] = node; - - node = (GLMnode*)malloc(sizeof(GLMnode)); - node->index = i; - node->next = members[T(i).vindices[1]]; - members[T(i).vindices[1]] = node; - - node = (GLMnode*)malloc(sizeof(GLMnode)); - node->index = i; - node->next = members[T(i).vindices[2]]; - members[T(i).vindices[2]] = node; - } - - /* calculate the average normal for each vertex */ - numnormals = 1; - for (i = 1; i <= model->numvertices; i++) { - /* calculate an average normal for this vertex by averaging the - facet normal of every triangle this vertex is in */ - node = members[i]; - if (!node) - fprintf(stderr, "glmVertexNormals(): vertex w/o a triangle\n"); - average[0] = 0.0; average[1] = 0.0; average[2] = 0.0; - avg = 0; - while (node) { - /* only average if the dot product of the angle between the two - facet normals is greater than the cosine of the threshold - angle -- or, said another way, the angle between the two - facet normals is less than (or equal to) the threshold angle */ - dot = glmDot(&model->facetnorms[3 * T(node->index).findex], - &model->facetnorms[3 * T(members[i]->index).findex]); - if (dot > cos_angle) { - node->averaged = GL_TRUE; - average[0] += model->facetnorms[3 * T(node->index).findex + 0]; - average[1] += model->facetnorms[3 * T(node->index).findex + 1]; - average[2] += model->facetnorms[3 * T(node->index).findex + 2]; - avg = 1; /* we averaged at least one normal! */ - } else { - node->averaged = GL_FALSE; - } - node = node->next; - } - - if (avg) { - /* normalize the averaged normal */ - glmNormalize(average); - - /* add the normal to the vertex normals list */ - model->normals[3 * numnormals + 0] = average[0]; - model->normals[3 * numnormals + 1] = average[1]; - model->normals[3 * numnormals + 2] = average[2]; - avg = numnormals; - numnormals++; - } - - /* set the normal of this vertex in each triangle it is in */ - node = members[i]; - while (node) { - if (node->averaged) { - /* if this node was averaged, use the average normal */ - if (T(node->index).vindices[0] == i) - T(node->index).nindices[0] = avg; - else if (T(node->index).vindices[1] == i) - T(node->index).nindices[1] = avg; - else if (T(node->index).vindices[2] == i) - T(node->index).nindices[2] = avg; - } else { - /* if this node wasn't averaged, use the facet normal */ - model->normals[3 * numnormals + 0] = - model->facetnorms[3 * T(node->index).findex + 0]; - model->normals[3 * numnormals + 1] = - model->facetnorms[3 * T(node->index).findex + 1]; - model->normals[3 * numnormals + 2] = - model->facetnorms[3 * T(node->index).findex + 2]; - if (T(node->index).vindices[0] == i) - T(node->index).nindices[0] = numnormals; - else if (T(node->index).vindices[1] == i) - T(node->index).nindices[1] = numnormals; - else if (T(node->index).vindices[2] == i) - T(node->index).nindices[2] = numnormals; - numnormals++; - } - node = node->next; - } - } - - model->numnormals = numnormals - 1; - - /* free the member information */ - for (i = 1; i <= model->numvertices; i++) { - node = members[i]; - while (node) { - tail = node; - node = node->next; - free(tail); - } - } - free(members); - - /* pack the normals array (we previously allocated the maximum - number of normals that could possibly be created (numtriangles * - 3), so get rid of some of them (usually alot unless none of the - facet normals were averaged)) */ - normals = model->normals; - model->normals = (GLfloat*)malloc(sizeof(GLfloat)* 3* (model->numnormals+1)); - for (i = 1; i <= model->numnormals; i++) { - model->normals[3 * i + 0] = normals[3 * i + 0]; - model->normals[3 * i + 1] = normals[3 * i + 1]; - model->normals[3 * i + 2] = normals[3 * i + 2]; - } - free(normals); -} - - -/* glmLinearTexture: Generates texture coordinates according to a - * linear projection of the texture map. It generates these by - * linearly mapping the vertices onto a square. - * - * model - pointer to initialized GLMmodel structure - */ -GLvoid -glmLinearTexture(GLMmodel* model) -{ - GLMgroup *group; - GLfloat dimensions[3]; - GLfloat x, y, scalefactor; - GLuint i; - - assert(model); - - if (model->texcoords) - free(model->texcoords); - model->numtexcoords = model->numvertices; - model->texcoords=(GLfloat*)malloc(sizeof(GLfloat)*2*(model->numtexcoords+1)); - - glmDimensions(model, dimensions); - scalefactor = 2.0 / - glmAbs(glmMax(glmMax(dimensions[0], dimensions[1]), dimensions[2])); - - /* do the calculations */ - for(i = 1; i <= model->numvertices; i++) { - x = model->vertices[3 * i + 0] * scalefactor; - y = model->vertices[3 * i + 2] * scalefactor; - model->texcoords[2 * i + 0] = (x + 1.0) / 2.0; - model->texcoords[2 * i + 1] = (y + 1.0) / 2.0; - } - - /* go through and put texture coordinate indices in all the triangles */ - group = model->groups; - while(group) { - for(i = 0; i < group->numtriangles; i++) { - T(group->triangles[i]).tindices[0] = T(group->triangles[i]).vindices[0]; - T(group->triangles[i]).tindices[1] = T(group->triangles[i]).vindices[1]; - T(group->triangles[i]).tindices[2] = T(group->triangles[i]).vindices[2]; - } - group = group->next; - } - -#if 0 - printf("glmLinearTexture(): generated %d linear texture coordinates\n", - model->numtexcoords); -#endif -} - -/* glmSpheremapTexture: Generates texture coordinates according to a - * spherical projection of the texture map. Sometimes referred to as - * spheremap, or reflection map texture coordinates. It generates - * these by using the normal to calculate where that vertex would map - * onto a sphere. Since it is impossible to map something flat - * perfectly onto something spherical, there is distortion at the - * poles. This particular implementation causes the poles along the X - * axis to be distorted. - * - * model - pointer to initialized GLMmodel structure - */ -GLvoid -glmSpheremapTexture(GLMmodel* model) -{ - GLMgroup* group; - GLfloat theta, phi, rho, x, y, z, r; - GLuint i; - - assert(model); - assert(model->normals); - - if (model->texcoords) - free(model->texcoords); - model->numtexcoords = model->numnormals; - model->texcoords=(GLfloat*)malloc(sizeof(GLfloat)*2*(model->numtexcoords+1)); - - for (i = 1; i <= model->numnormals; i++) { - z = model->normals[3 * i + 0]; /* re-arrange for pole distortion */ - y = model->normals[3 * i + 1]; - x = model->normals[3 * i + 2]; - r = sqrt((x * x) + (y * y)); - rho = sqrt((r * r) + (z * z)); - - if(r == 0.0) { - theta = 0.0; - phi = 0.0; - } else { - if(z == 0.0) - phi = 3.14159265 / 2.0; - else - phi = acos(z / rho); - - if(y == 0.0) - theta = 3.141592365 / 2.0; - else - theta = asin(y / r) + (3.14159265 / 2.0); - } - - model->texcoords[2 * i + 0] = theta / 3.14159265; - model->texcoords[2 * i + 1] = phi / 3.14159265; - } - - /* go through and put texcoord indices in all the triangles */ - group = model->groups; - while(group) { - for (i = 0; i < group->numtriangles; i++) { - T(group->triangles[i]).tindices[0] = T(group->triangles[i]).nindices[0]; - T(group->triangles[i]).tindices[1] = T(group->triangles[i]).nindices[1]; - T(group->triangles[i]).tindices[2] = T(group->triangles[i]).nindices[2]; - } - group = group->next; - } -} - -/* glmDelete: Deletes a GLMmodel structure. - * - * model - initialized GLMmodel structure - */ -GLvoid -glmDelete(GLMmodel* model) -{ - GLMgroup* group; - GLuint i; - - assert(model); - - if (model->pathname) free(model->pathname); - if (model->mtllibname) free(model->mtllibname); - if (model->vertices) free(model->vertices); - if (model->normals) free(model->normals); - if (model->texcoords) free(model->texcoords); - if (model->facetnorms) free(model->facetnorms); - if (model->triangles) free(model->triangles); - if (model->materials) { - for (i = 0; i < model->nummaterials; i++) - free(model->materials[i].name); - } - free(model->materials); - while(model->groups) { - group = model->groups; - model->groups = model->groups->next; - free(group->name); - free(group->triangles); - free(group); - } - - free(model); -} - -/* glmReadOBJ: Reads a model description from a Wavefront .OBJ file. - * Returns a pointer to the created object which should be free'd with - * glmDelete(). - * - * filename - name of the file containing the Wavefront .OBJ format data. - */ -GLMmodel* -glmReadOBJ(char* filename) -{ - GLMmodel* model; - FILE* file; - - /* open the file */ - file = fopen(filename, "r"); - if (!file) { - fprintf(stderr, "glmReadOBJ() failed: can't open data file \"%s\".\n", - filename); - exit(1); - } - - /* allocate a new model */ - model = (GLMmodel*)malloc(sizeof(GLMmodel)); - model->pathname = strdup(filename); - model->mtllibname = NULL; - model->numvertices = 0; - model->vertices = NULL; - model->numnormals = 0; - model->normals = NULL; - model->numtexcoords = 0; - model->texcoords = NULL; - model->numfacetnorms = 0; - model->facetnorms = NULL; - model->numtriangles = 0; - model->triangles = NULL; - model->nummaterials = 0; - model->materials = NULL; - model->numgroups = 0; - model->groups = NULL; - model->position[0] = 0.0; - model->position[1] = 0.0; - model->position[2] = 0.0; - - /* make a first pass through the file to get a count of the number - of vertices, normals, texcoords & triangles */ - glmFirstPass(model, file); - - /* allocate memory */ - model->vertices = (GLfloat*)malloc(sizeof(GLfloat) * - 3 * (model->numvertices + 1)); - model->triangles = (GLMtriangle*)malloc(sizeof(GLMtriangle) * - model->numtriangles); - if (model->numnormals) { - model->normals = (GLfloat*)malloc(sizeof(GLfloat) * - 3 * (model->numnormals + 1)); - } - if (model->numtexcoords) { - model->texcoords = (GLfloat*)malloc(sizeof(GLfloat) * - 2 * (model->numtexcoords + 1)); - } - - /* rewind to beginning of file and read in the data this pass */ - rewind(file); - - glmSecondPass(model, file); - - /* close the file */ - fclose(file); - - return model; -} - -/* glmWriteOBJ: Writes a model description in Wavefront .OBJ format to - * a file. - * - * model - initialized GLMmodel structure - * filename - name of the file to write the Wavefront .OBJ format data to - * mode - a bitwise or of values describing what is written to the file - * GLM_NONE - render with only vertices - * GLM_FLAT - render with facet normals - * GLM_SMOOTH - render with vertex normals - * GLM_TEXTURE - render with texture coords - * GLM_COLOR - render with colors (color material) - * GLM_MATERIAL - render with materials - * GLM_COLOR and GLM_MATERIAL should not both be specified. - * GLM_FLAT and GLM_SMOOTH should not both be specified. - */ -GLvoid -glmWriteOBJ(GLMmodel* model, char* filename, GLuint mode) -{ - GLuint i; - FILE* file; - GLMgroup* group; - - assert(model); - - /* do a bit of warning */ - if (mode & GLM_FLAT && !model->facetnorms) { - printf("glmWriteOBJ() warning: flat normal output requested " - "with no facet normals defined.\n"); - mode &= ~GLM_FLAT; - } - if (mode & GLM_SMOOTH && !model->normals) { - printf("glmWriteOBJ() warning: smooth normal output requested " - "with no normals defined.\n"); - mode &= ~GLM_SMOOTH; - } - if (mode & GLM_TEXTURE && !model->texcoords) { - printf("glmWriteOBJ() warning: texture coordinate output requested " - "with no texture coordinates defined.\n"); - mode &= ~GLM_TEXTURE; - } - if (mode & GLM_FLAT && mode & GLM_SMOOTH) { - printf("glmWriteOBJ() warning: flat normal output requested " - "and smooth normal output requested (using smooth).\n"); - mode &= ~GLM_FLAT; - } - if (mode & GLM_COLOR && !model->materials) { - printf("glmWriteOBJ() warning: color output requested " - "with no colors (materials) defined.\n"); - mode &= ~GLM_COLOR; - } - if (mode & GLM_MATERIAL && !model->materials) { - printf("glmWriteOBJ() warning: material output requested " - "with no materials defined.\n"); - mode &= ~GLM_MATERIAL; - } - if (mode & GLM_COLOR && mode & GLM_MATERIAL) { - printf("glmDraw() warning: color and material output requested " - "outputting only materials.\n"); - mode &= ~GLM_COLOR; - } - - - /* open the file */ - file = fopen(filename, "w"); - if (!file) { - fprintf(stderr, "glmWriteOBJ() failed: can't open file \"%s\" to write.\n", - filename); - exit(1); - } - - /* spit out a header */ - fprintf(file, "# \n"); - fprintf(file, "# Wavefront OBJ generated by GLM library\n"); - fprintf(file, "# \n"); - fprintf(file, "# GLM library\n"); - fprintf(file, "# Nate Robins\n"); - fprintf(file, "# ndr@pobox.com\n"); - fprintf(file, "# http://www.pobox.com/~ndr\n"); - fprintf(file, "# \n"); - - if (mode & GLM_MATERIAL && model->mtllibname) { - fprintf(file, "\nmtllib %s\n\n", model->mtllibname); - glmWriteMTL(model, filename, model->mtllibname); - } - - /* spit out the vertices */ - fprintf(file, "\n"); - fprintf(file, "# %d vertices\n", model->numvertices); - for (i = 1; i <= model->numvertices; i++) { - fprintf(file, "v %f %f %f\n", - model->vertices[3 * i + 0], - model->vertices[3 * i + 1], - model->vertices[3 * i + 2]); - } - - /* spit out the smooth/flat normals */ - if (mode & GLM_SMOOTH) { - fprintf(file, "\n"); - fprintf(file, "# %d normals\n", model->numnormals); - for (i = 1; i <= model->numnormals; i++) { - fprintf(file, "vn %f %f %f\n", - model->normals[3 * i + 0], - model->normals[3 * i + 1], - model->normals[3 * i + 2]); - } - } else if (mode & GLM_FLAT) { - fprintf(file, "\n"); - fprintf(file, "# %d normals\n", model->numfacetnorms); - for (i = 1; i <= model->numnormals; i++) { - fprintf(file, "vn %f %f %f\n", - model->facetnorms[3 * i + 0], - model->facetnorms[3 * i + 1], - model->facetnorms[3 * i + 2]); - } - } - - /* spit out the texture coordinates */ - if (mode & GLM_TEXTURE) { - fprintf(file, "\n"); - fprintf(file, "# %d texcoords\n", model->texcoords); - for (i = 1; i <= model->numtexcoords; i++) { - fprintf(file, "vt %f %f\n", - model->texcoords[2 * i + 0], - model->texcoords[2 * i + 1]); - } - } - - fprintf(file, "\n"); - fprintf(file, "# %d groups\n", model->numgroups); - fprintf(file, "# %d faces (triangles)\n", model->numtriangles); - fprintf(file, "\n"); - - group = model->groups; - while(group) { - fprintf(file, "g %s\n", group->name); - if (mode & GLM_MATERIAL) - fprintf(file, "usemtl %s\n", model->materials[group->material].name); - for (i = 0; i < group->numtriangles; i++) { - if (mode & GLM_SMOOTH && mode & GLM_TEXTURE) { - fprintf(file, "f %d/%d/%d %d/%d/%d %d/%d/%d\n", - T(group->triangles[i]).vindices[0], - T(group->triangles[i]).nindices[0], - T(group->triangles[i]).tindices[0], - T(group->triangles[i]).vindices[1], - T(group->triangles[i]).nindices[1], - T(group->triangles[i]).tindices[1], - T(group->triangles[i]).vindices[2], - T(group->triangles[i]).nindices[2], - T(group->triangles[i]).tindices[2]); - } else if (mode & GLM_FLAT && mode & GLM_TEXTURE) { - fprintf(file, "f %d/%d %d/%d %d/%d\n", - T(group->triangles[i]).vindices[0], - T(group->triangles[i]).findex, - T(group->triangles[i]).vindices[1], - T(group->triangles[i]).findex, - T(group->triangles[i]).vindices[2], - T(group->triangles[i]).findex); - } else if (mode & GLM_TEXTURE) { - fprintf(file, "f %d/%d %d/%d %d/%d\n", - T(group->triangles[i]).vindices[0], - T(group->triangles[i]).tindices[0], - T(group->triangles[i]).vindices[1], - T(group->triangles[i]).tindices[1], - T(group->triangles[i]).vindices[2], - T(group->triangles[i]).tindices[2]); - } else if (mode & GLM_SMOOTH) { - fprintf(file, "f %d//%d %d//%d %d//%d\n", - T(group->triangles[i]).vindices[0], - T(group->triangles[i]).nindices[0], - T(group->triangles[i]).vindices[1], - T(group->triangles[i]).nindices[1], - T(group->triangles[i]).vindices[2], - T(group->triangles[i]).nindices[2]); - } else if (mode & GLM_FLAT) { - fprintf(file, "f %d//%d %d//%d %d//%d\n", - T(group->triangles[i]).vindices[0], - T(group->triangles[i]).findex, - T(group->triangles[i]).vindices[1], - T(group->triangles[i]).findex, - T(group->triangles[i]).vindices[2], - T(group->triangles[i]).findex); - } else { - fprintf(file, "f %d %d %d\n", - T(group->triangles[i]).vindices[0], - T(group->triangles[i]).vindices[1], - T(group->triangles[i]).vindices[2]); - } - } - fprintf(file, "\n"); - group = group->next; - } - - fclose(file); -} - -/* glmDraw: Renders the model to the current OpenGL context using the - * mode specified. - * - * model - initialized GLMmodel structure - * mode - a bitwise OR of values describing what is to be rendered. - * GLM_NONE - render with only vertices - * GLM_FLAT - render with facet normals - * GLM_SMOOTH - render with vertex normals - * GLM_TEXTURE - render with texture coords - * GLM_COLOR - render with colors (color material) - * GLM_MATERIAL - render with materials - * GLM_COLOR and GLM_MATERIAL should not both be specified. - * GLM_FLAT and GLM_SMOOTH should not both be specified. - */ -GLvoid -glmDraw(GLMmodel* model, GLuint mode) -{ - static GLuint i; - static GLMgroup* group; - static GLMtriangle* triangle; - static GLMmaterial* material; - - assert(model); - assert(model->vertices); - - /* do a bit of warning */ - if (mode & GLM_FLAT && !model->facetnorms) { - printf("glmDraw() warning: flat render mode requested " - "with no facet normals defined.\n"); - mode &= ~GLM_FLAT; - } - if (mode & GLM_SMOOTH && !model->normals) { - printf("glmDraw() warning: smooth render mode requested " - "with no normals defined.\n"); - mode &= ~GLM_SMOOTH; - } - if (mode & GLM_TEXTURE && !model->texcoords) { - printf("glmDraw() warning: texture render mode requested " - "with no texture coordinates defined.\n"); - mode &= ~GLM_TEXTURE; - } - if (mode & GLM_FLAT && mode & GLM_SMOOTH) { - printf("glmDraw() warning: flat render mode requested " - "and smooth render mode requested (using smooth).\n"); - mode &= ~GLM_FLAT; - } - if (mode & GLM_COLOR && !model->materials) { - printf("glmDraw() warning: color render mode requested " - "with no materials defined.\n"); - mode &= ~GLM_COLOR; - } - if (mode & GLM_MATERIAL && !model->materials) { - printf("glmDraw() warning: material render mode requested " - "with no materials defined.\n"); - mode &= ~GLM_MATERIAL; - } - if (mode & GLM_COLOR && mode & GLM_MATERIAL) { - printf("glmDraw() warning: color and material render mode requested " - "using only material mode.\n"); - mode &= ~GLM_COLOR; - } - if (mode & GLM_COLOR) - glEnable(GL_COLOR_MATERIAL); - else if (mode & GLM_MATERIAL) - glDisable(GL_COLOR_MATERIAL); - - /* perhaps this loop should be unrolled into material, color, flat, - smooth, etc. loops? since most cpu's have good branch prediction - schemes (and these branches will always go one way), probably - wouldn't gain too much? */ - - group = model->groups; - while (group) { - if (mode & GLM_MATERIAL) { - material = &model->materials[group->material]; - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, material->ambient); - glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, material->diffuse); - glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, material->specular); - glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, material->shininess); - } - - if (mode & GLM_COLOR) { - material = &model->materials[group->material]; - glColor3fv(material->diffuse); - } - - glBegin(GL_TRIANGLES); - for (i = 0; i < group->numtriangles; i++) { - triangle = &T(group->triangles[i]); - - if (mode & GLM_FLAT) - glNormal3fv(&model->facetnorms[3 * triangle->findex]); - - if (mode & GLM_SMOOTH) - glNormal3fv(&model->normals[3 * triangle->nindices[0]]); - if (mode & GLM_TEXTURE) - glTexCoord2fv(&model->texcoords[2 * triangle->tindices[0]]); - glVertex3fv(&model->vertices[3 * triangle->vindices[0]]); - - if (mode & GLM_SMOOTH) - glNormal3fv(&model->normals[3 * triangle->nindices[1]]); - if (mode & GLM_TEXTURE) - glTexCoord2fv(&model->texcoords[2 * triangle->tindices[1]]); - glVertex3fv(&model->vertices[3 * triangle->vindices[1]]); - - if (mode & GLM_SMOOTH) - glNormal3fv(&model->normals[3 * triangle->nindices[2]]); - if (mode & GLM_TEXTURE) - glTexCoord2fv(&model->texcoords[2 * triangle->tindices[2]]); - glVertex3fv(&model->vertices[3 * triangle->vindices[2]]); - - } - glEnd(); - - group = group->next; - } -} - -/* glmList: Generates and returns a display list for the model using - * the mode specified. - * - * model - initialized GLMmodel structure - * mode - a bitwise OR of values describing what is to be rendered. - * GLM_NONE - render with only vertices - * GLM_FLAT - render with facet normals - * GLM_SMOOTH - render with vertex normals - * GLM_TEXTURE - render with texture coords - * GLM_COLOR - render with colors (color material) - * GLM_MATERIAL - render with materials - * GLM_COLOR and GLM_MATERIAL should not both be specified. - * GLM_FLAT and GLM_SMOOTH should not both be specified. */ -GLuint -glmList(GLMmodel* model, GLuint mode) -{ - GLuint list; - - list = glGenLists(1); - glNewList(list, GL_COMPILE); - glmDraw(model, mode); - glEndList(); - - return list; -} - -/* glmWeld: eliminate (weld) vectors that are within an epsilon of - * each other. - * - * model - initialized GLMmodel structure - * epsilon - maximum difference between vertices - * ( 0.00001 is a good start for a unitized model) - * - */ -GLuint -glmWeld(GLMmodel* model, GLfloat epsilon) -{ - GLfloat* vectors; - GLfloat* copies; - GLuint numvectors; - GLuint i, welded; - - /* vertices */ - numvectors = model->numvertices; - vectors = model->vertices; - copies = glmWeldVectors(vectors, &numvectors, epsilon); - welded = model->numvertices - numvectors - 1; - - for (i = 0; i < model->numtriangles; i++) { - T(i).vindices[0] = (GLuint)vectors[3 * T(i).vindices[0] + 0]; - T(i).vindices[1] = (GLuint)vectors[3 * T(i).vindices[1] + 0]; - T(i).vindices[2] = (GLuint)vectors[3 * T(i).vindices[2] + 0]; - } - - /* free space for old vertices */ - free(vectors); - - /* allocate space for the new vertices */ - model->numvertices = numvectors; - model->vertices = (GLfloat*)malloc(sizeof(GLfloat) * - 3 * (model->numvertices + 1)); - - /* copy the optimized vertices into the actual vertex list */ - for (i = 1; i <= model->numvertices; i++) { - model->vertices[3 * i + 0] = copies[3 * i + 0]; - model->vertices[3 * i + 1] = copies[3 * i + 1]; - model->vertices[3 * i + 2] = copies[3 * i + 2]; - } - - free(copies); - - return welded; -} - - -#if 0 - /* normals */ - if (model->numnormals) { - numvectors = model->numnormals; - vectors = model->normals; - copies = glmOptimizeVectors(vectors, &numvectors); - - printf("glmOptimize(): %d redundant normals.\n", - model->numnormals - numvectors); - - for (i = 0; i < model->numtriangles; i++) { - T(i).nindices[0] = (GLuint)vectors[3 * T(i).nindices[0] + 0]; - T(i).nindices[1] = (GLuint)vectors[3 * T(i).nindices[1] + 0]; - T(i).nindices[2] = (GLuint)vectors[3 * T(i).nindices[2] + 0]; - } - - /* free space for old normals */ - free(vectors); - - /* allocate space for the new normals */ - model->numnormals = numvectors; - model->normals = (GLfloat*)malloc(sizeof(GLfloat) * - 3 * (model->numnormals + 1)); - - /* copy the optimized vertices into the actual vertex list */ - for (i = 1; i <= model->numnormals; i++) { - model->normals[3 * i + 0] = copies[3 * i + 0]; - model->normals[3 * i + 1] = copies[3 * i + 1]; - model->normals[3 * i + 2] = copies[3 * i + 2]; - } - - free(copies); - } - - /* texcoords */ - if (model->numtexcoords) { - numvectors = model->numtexcoords; - vectors = model->texcoords; - copies = glmOptimizeVectors(vectors, &numvectors); - - printf("glmOptimize(): %d redundant texcoords.\n", - model->numtexcoords - numvectors); - - for (i = 0; i < model->numtriangles; i++) { - for (j = 0; j < 3; j++) { - T(i).tindices[j] = (GLuint)vectors[3 * T(i).tindices[j] + 0]; - } - } - - /* free space for old texcoords */ - free(vectors); - - /* allocate space for the new texcoords */ - model->numtexcoords = numvectors; - model->texcoords = (GLfloat*)malloc(sizeof(GLfloat) * - 2 * (model->numtexcoords + 1)); - - /* copy the optimized vertices into the actual vertex list */ - for (i = 1; i <= model->numtexcoords; i++) { - model->texcoords[2 * i + 0] = copies[2 * i + 0]; - model->texcoords[2 * i + 1] = copies[2 * i + 1]; - } - - free(copies); - } -#endif - -#if 0 - /* look for unused vertices */ - /* look for unused normals */ - /* look for unused texcoords */ - for (i = 1; i <= model->numvertices; i++) { - for (j = 0; j < model->numtriangles; i++) { - if (T(j).vindices[0] == i || - T(j).vindices[1] == i || - T(j).vindices[1] == i) - break; - } - } -#endif diff --git a/lib/glut-3.7.6/progs/demos/smooth/glm.h b/lib/glut-3.7.6/progs/demos/smooth/glm.h deleted file mode 100644 index bd31b98b1..000000000 --- a/lib/glut-3.7.6/progs/demos/smooth/glm.h +++ /dev/null @@ -1,247 +0,0 @@ -/* - glm.h - Nate Robins, 1997 - ndr@pobox.com, http://www.pobox.com/~ndr/ - - Wavefront OBJ model file format reader/writer/manipulator. - - Includes routines for generating smooth normals with - preservation of edges, welding redundant vertices & texture - coordinate generation (spheremap and planar projections) + more. - - */ - - -#include - - -#ifndef M_PI -#define M_PI 3.14159265 -#endif - -#define GLM_NONE (0) /* render with only vertices */ -#define GLM_FLAT (1 << 0) /* render with facet normals */ -#define GLM_SMOOTH (1 << 1) /* render with vertex normals */ -#define GLM_TEXTURE (1 << 2) /* render with texture coords */ -#define GLM_COLOR (1 << 3) /* render with colors */ -#define GLM_MATERIAL (1 << 4) /* render with materials */ - - -/* GLMmaterial: Structure that defines a material in a model. - */ -typedef struct _GLMmaterial -{ - char* name; /* name of material */ - GLfloat diffuse[4]; /* diffuse component */ - GLfloat ambient[4]; /* ambient component */ - GLfloat specular[4]; /* specular component */ - GLfloat emmissive[4]; /* emmissive component */ - GLfloat shininess; /* specular exponent */ -} GLMmaterial; - -/* GLMtriangle: Structure that defines a triangle in a model. - */ -typedef struct _GLMtriangle { - GLuint vindices[3]; /* array of triangle vertex indices */ - GLuint nindices[3]; /* array of triangle normal indices */ - GLuint tindices[3]; /* array of triangle texcoord indices*/ - GLuint findex; /* index of triangle facet normal */ -} GLMtriangle; - -/* GLMgroup: Structure that defines a group in a model. - */ -typedef struct _GLMgroup { - char* name; /* name of this group */ - GLuint numtriangles; /* number of triangles in this group */ - GLuint* triangles; /* array of triangle indices */ - GLuint material; /* index to material for group */ - struct _GLMgroup* next; /* pointer to next group in model */ -} GLMgroup; - -/* GLMmodel: Structure that defines a model. - */ -typedef struct _GLMmodel { - char* pathname; /* path to this model */ - char* mtllibname; /* name of the material library */ - - GLuint numvertices; /* number of vertices in model */ - GLfloat* vertices; /* array of vertices */ - - GLuint numnormals; /* number of normals in model */ - GLfloat* normals; /* array of normals */ - - GLuint numtexcoords; /* number of texcoords in model */ - GLfloat* texcoords; /* array of texture coordinates */ - - GLuint numfacetnorms; /* number of facetnorms in model */ - GLfloat* facetnorms; /* array of facetnorms */ - - GLuint numtriangles; /* number of triangles in model */ - GLMtriangle* triangles; /* array of triangles */ - - GLuint nummaterials; /* number of materials in model */ - GLMmaterial* materials; /* array of materials */ - - GLuint numgroups; /* number of groups in model */ - GLMgroup* groups; /* linked list of groups */ - - GLfloat position[3]; /* position of the model */ - -} GLMmodel; - - -/* glmUnitize: "unitize" a model by translating it to the origin and - * scaling it to fit in a unit cube around the origin. Returns the - * scalefactor used. - * - * model - properly initialized GLMmodel structure - */ -GLfloat -glmUnitize(GLMmodel* model); - -/* glmDimensions: Calculates the dimensions (width, height, depth) of - * a model. - * - * model - initialized GLMmodel structure - * dimensions - array of 3 GLfloats (GLfloat dimensions[3]) - */ -GLvoid -glmDimensions(GLMmodel* model, GLfloat* dimensions); - -/* glmScale: Scales a model by a given amount. - * - * model - properly initialized GLMmodel structure - * scale - scalefactor (0.5 = half as large, 2.0 = twice as large) - */ -GLvoid -glmScale(GLMmodel* model, GLfloat scale); - -/* glmReverseWinding: Reverse the polygon winding for all polygons in - * this model. Default winding is counter-clockwise. Also changes - * the direction of the normals. - * - * model - properly initialized GLMmodel structure - */ -GLvoid -glmReverseWinding(GLMmodel* model); - -/* glmFacetNormals: Generates facet normals for a model (by taking the - * cross product of the two vectors derived from the sides of each - * triangle). Assumes a counter-clockwise winding. - * - * model - initialized GLMmodel structure - */ -GLvoid -glmFacetNormals(GLMmodel* model); - -/* glmVertexNormals: Generates smooth vertex normals for a model. - * First builds a list of all the triangles each vertex is in. Then - * loops through each vertex in the the list averaging all the facet - * normals of the triangles each vertex is in. Finally, sets the - * normal index in the triangle for the vertex to the generated smooth - * normal. If the dot product of a facet normal and the facet normal - * associated with the first triangle in the list of triangles the - * current vertex is in is greater than the cosine of the angle - * parameter to the function, that facet normal is not added into the - * average normal calculation and the corresponding vertex is given - * the facet normal. This tends to preserve hard edges. The angle to - * use depends on the model, but 90 degrees is usually a good start. - * - * model - initialized GLMmodel structure - * angle - maximum angle (in degrees) to smooth across - */ -GLvoid -glmVertexNormals(GLMmodel* model, GLfloat angle); - -/* glmLinearTexture: Generates texture coordinates according to a - * linear projection of the texture map. It generates these by - * linearly mapping the vertices onto a square. - * - * model - pointer to initialized GLMmodel structure - */ -GLvoid -glmLinearTexture(GLMmodel* model); - -/* glmSpheremapTexture: Generates texture coordinates according to a - * spherical projection of the texture map. Sometimes referred to as - * spheremap, or reflection map texture coordinates. It generates - * these by using the normal to calculate where that vertex would map - * onto a sphere. Since it is impossible to map something flat - * perfectly onto something spherical, there is distortion at the - * poles. This particular implementation causes the poles along the X - * axis to be distorted. - * - * model - pointer to initialized GLMmodel structure - */ -GLvoid -glmSpheremapTexture(GLMmodel* model); - -/* glmDelete: Deletes a GLMmodel structure. - * - * model - initialized GLMmodel structure - */ -GLvoid -glmDelete(GLMmodel* model); - -/* glmReadOBJ: Reads a model description from a Wavefront .OBJ file. - * Returns a pointer to the created object which should be free'd with - * glmDelete(). - * - * filename - name of the file containing the Wavefront .OBJ format data. - */ -GLMmodel* -glmReadOBJ(char* filename); - -/* glmWriteOBJ: Writes a model description in Wavefront .OBJ format to - * a file. - * - * model - initialized GLMmodel structure - * filename - name of the file to write the Wavefront .OBJ format data to - * mode - a bitwise or of values describing what is written to the file - * GLM_NONE - write only vertices - * GLM_FLAT - write facet normals - * GLM_SMOOTH - write vertex normals - * GLM_TEXTURE - write texture coords - * GLM_FLAT and GLM_SMOOTH should not both be specified. - */ -GLvoid -glmWriteOBJ(GLMmodel* model, char* filename, GLuint mode); - -/* glmDraw: Renders the model to the current OpenGL context using the - * mode specified. - * - * model - initialized GLMmodel structure - * mode - a bitwise OR of values describing what is to be rendered. - * GLM_NONE - render with only vertices - * GLM_FLAT - render with facet normals - * GLM_SMOOTH - render with vertex normals - * GLM_TEXTURE - render with texture coords - * GLM_FLAT and GLM_SMOOTH should not both be specified. - */ -GLvoid -glmDraw(GLMmodel* model, GLuint mode); - -/* glmList: Generates and returns a display list for the model using - * the mode specified. - * - * model - initialized GLMmodel structure - * mode - a bitwise OR of values describing what is to be rendered. - * GLM_NONE - render with only vertices - * GLM_FLAT - render with facet normals - * GLM_SMOOTH - render with vertex normals - * GLM_TEXTURE - render with texture coords - * GLM_FLAT and GLM_SMOOTH should not both be specified. - */ -GLuint -glmList(GLMmodel* model, GLuint mode); - -/* glmWeld: eliminate (weld) vectors that are within an epsilon of - * each other. - * - * model - initialized GLMmodel structure - * epsilon - maximum difference between vertices - * ( 0.00001 is a good start for a unitized model) - * - */ -GLuint -glmWeld(GLMmodel* model, GLfloat epsilon); diff --git a/lib/glut-3.7.6/progs/demos/smooth/gltb.c b/lib/glut-3.7.6/progs/demos/smooth/gltb.c deleted file mode 100644 index f66637013..000000000 --- a/lib/glut-3.7.6/progs/demos/smooth/gltb.c +++ /dev/null @@ -1,173 +0,0 @@ -/* - * Simple trackball-like motion adapted (ripped off) from projtex.c - * (written by David Yu and David Blythe). See the SIGGRAPH '96 - * Advanced OpenGL course notes. - */ - - -#include -#include -#include -#include -#include "gltb.h" - - -#define GLTB_TIME_EPSILON 10 - - -static GLuint gltb_lasttime; -static GLfloat gltb_lastposition[3]; - -static GLfloat gltb_angle = 0.0; -static GLfloat gltb_axis[3]; -static GLfloat gltb_transform[4][4]; - -static GLuint gltb_width; -static GLuint gltb_height; - -static GLint gltb_button = -1; -static GLboolean gltb_tracking = GL_FALSE; -static GLboolean gltb_animate = GL_TRUE; - - -static void -_gltbPointToVector(int x, int y, int width, int height, float v[3]) -{ - float d, a; - - /* project x, y onto a hemi-sphere centered within width, height. */ - v[0] = (2.0 * x - width) / width; - v[1] = (height - 2.0 * y) / height; - d = sqrt(v[0] * v[0] + v[1] * v[1]); - v[2] = cos((3.14159265 / 2.0) * ((d < 1.0) ? d : 1.0)); - a = 1.0 / sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]); - v[0] *= a; - v[1] *= a; - v[2] *= a; -} - -static void -_gltbAnimate(void) -{ - glutPostRedisplay(); -} - -void -_gltbStartMotion(int x, int y, int button, int time) -{ - assert(gltb_button != -1); - - gltb_tracking = GL_TRUE; - gltb_lasttime = time; - _gltbPointToVector(x, y, gltb_width, gltb_height, gltb_lastposition); -} - -void -_gltbStopMotion(int button, unsigned time) -{ - assert(gltb_button != -1); - - gltb_tracking = GL_FALSE; - - if (time - gltb_lasttime < GLTB_TIME_EPSILON && gltb_animate) { - glutIdleFunc(_gltbAnimate); - } else { - gltb_angle = 0; - if (gltb_animate) - glutIdleFunc(0); - } -} - -void -gltbAnimate(GLboolean animate) -{ - gltb_animate = animate; -} - -void -gltbInit(GLuint button) -{ - gltb_button = button; - gltb_angle = 0.0; - - /* put the identity in the trackball transform */ - glPushMatrix(); - glLoadIdentity(); - glGetFloatv(GL_MODELVIEW_MATRIX, (GLfloat*)gltb_transform); - glPopMatrix(); -} - -void -gltbMatrix(void) -{ - assert(gltb_button != -1); - - glPushMatrix(); - glLoadIdentity(); - glRotatef(gltb_angle, gltb_axis[0], gltb_axis[1], gltb_axis[2]); - glMultMatrixf((GLfloat*)gltb_transform); - glGetFloatv(GL_MODELVIEW_MATRIX, (GLfloat*)gltb_transform); - glPopMatrix(); - - glMultMatrixf((GLfloat*)gltb_transform); -} - -void -gltbReshape(int width, int height) -{ - assert(gltb_button != -1); - - gltb_width = width; - gltb_height = height; -} - -void -gltbMouse(int button, int state, int x, int y) -{ - assert(gltb_button != -1); - - if (state == GLUT_DOWN && button == gltb_button) - _gltbStartMotion(x, y, button, glutGet(GLUT_ELAPSED_TIME)); - else if (state == GLUT_UP && button == gltb_button) - _gltbStopMotion(button, glutGet(GLUT_ELAPSED_TIME)); -} - -void -gltbMotion(int x, int y) -{ - GLfloat current_position[3], dx, dy, dz; - - assert(gltb_button != -1); - - if (gltb_tracking == GL_FALSE) - return; - - _gltbPointToVector(x, y, gltb_width, gltb_height, current_position); - - /* calculate the angle to rotate by (directly proportional to the - length of the mouse movement) */ - dx = current_position[0] - gltb_lastposition[0]; - dy = current_position[1] - gltb_lastposition[1]; - dz = current_position[2] - gltb_lastposition[2]; - gltb_angle = 90.0 * sqrt(dx * dx + dy * dy + dz * dz); - - /* calculate the axis of rotation (cross product) */ - gltb_axis[0] = gltb_lastposition[1] * current_position[2] - - gltb_lastposition[2] * current_position[1]; - gltb_axis[1] = gltb_lastposition[2] * current_position[0] - - gltb_lastposition[0] * current_position[2]; - gltb_axis[2] = gltb_lastposition[0] * current_position[1] - - gltb_lastposition[1] * current_position[0]; - - /* XXX - constrain motion */ - gltb_axis[2] = 0; - - /* reset for next time */ - gltb_lasttime = glutGet(GLUT_ELAPSED_TIME); - gltb_lastposition[0] = current_position[0]; - gltb_lastposition[1] = current_position[1]; - gltb_lastposition[2] = current_position[2]; - - /* remember to draw new position */ - glutPostRedisplay(); -} diff --git a/lib/glut-3.7.6/progs/demos/smooth/gltb.h b/lib/glut-3.7.6/progs/demos/smooth/gltb.h deleted file mode 100644 index 01666eb1e..000000000 --- a/lib/glut-3.7.6/progs/demos/smooth/gltb.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Simple trackball-like motion adapted (ripped off) from projtex.c - * (written by David Yu and David Blythe). See the SIGGRAPH '96 - * Advanced OpenGL course notes. - * - * - * Usage: - * - * o call gltbInit() in before any other gltb call - * o call gltbReshape() from the reshape callback - * o call gltbMatrix() to get the trackball matrix rotation - * o call gltbStartMotion() to begin trackball movememt - * o call gltbStopMotion() to stop trackball movememt - * o call gltbMotion() from the motion callback - * o call gltbAnimate(GL_TRUE) if you want the trackball to continue - * spinning after the mouse button has been released - * o call gltbAnimate(GL_FALSE) if you want the trackball to stop - * spinning after the mouse button has been released - * - * Typical setup: - * - * - void - init(void) - { - gltbInit(GLUT_MIDDLE_BUTTON); - gltbAnimate(GL_TRUE); - . . . - } - - void - reshape(int width, int height) - { - gltbReshape(width, height); - . . . - } - - void - display(void) - { - glPushMatrix(); - - gltbMatrix(); - . . . draw the scene . . . - - glPopMatrix(); - } - - void - mouse(int button, int state, int x, int y) - { - gltbMouse(button, state, x, y); - . . . - } - - void - motion(int x, int y) - { - gltbMotion(x, y); - . . . - } - - int - main(int argc, char** argv) - { - . . . - init(); - glutReshapeFunc(reshape); - glutDisplayFunc(display); - glutMouseFunc(mouse); - glutMotionFunc(motion); - . . . - } - * - * */ - - -/* functions */ -void -gltbInit(GLuint button); - -void -gltbMatrix(void); - -void -gltbReshape(int width, int height); - -void -gltbMouse(int button, int state, int x, int y); - -void -gltbMotion(int x, int y); - -void -gltbAnimate(GLboolean animate); diff --git a/lib/glut-3.7.6/progs/demos/smooth/gltx.c b/lib/glut-3.7.6/progs/demos/smooth/gltx.c deleted file mode 100644 index 047f0d12d..000000000 --- a/lib/glut-3.7.6/progs/demos/smooth/gltx.c +++ /dev/null @@ -1,240 +0,0 @@ -/* - * Simple SGI .rgb (IRIS RGB) image file reader ripped off from - * texture.c (written by David Blythe). See the SIGGRAPH '96 - * Advanced OpenGL course notes. - */ - - -/* includes */ -#include -#include -#include -#include -#include "gltx.h" - - -/* private typedefs */ -typedef struct _rawImageRec { - unsigned short imagic; - unsigned short type; - unsigned short dim; - unsigned short sizeX, sizeY, sizeZ; - unsigned long min, max; - unsigned long wasteBytes; - char name[80]; - unsigned long colorMap; - FILE *file; - unsigned char *tmp, *tmpR, *tmpG, *tmpB; - unsigned long rleEnd; - GLuint *rowStart; - GLint *rowSize; -} rawImageRec; - - -/* private functions */ -static void ConvertShort(unsigned short *array, unsigned int length) -{ - unsigned short b1, b2; - unsigned char *ptr; - - ptr = (unsigned char *)array; - while (length--) { - b1 = *ptr++; - b2 = *ptr++; - *array++ = (b1 << 8) | (b2); - } -} - -static void ConvertLong(GLuint *array, unsigned int length) -{ - unsigned long b1, b2, b3, b4; - unsigned char *ptr; - - ptr = (unsigned char *)array; - while (length--) { - b1 = *ptr++; - b2 = *ptr++; - b3 = *ptr++; - b4 = *ptr++; - *array++ = (b1 << 24) | (b2 << 16) | (b3 << 8) | (b4); - } -} - -static rawImageRec *RawImageOpen(char *fileName) -{ - union { - int testWord; - char testByte[4]; - } endianTest; - rawImageRec *raw; - GLenum swapFlag; - int x; - - endianTest.testWord = 1; - if (endianTest.testByte[0] == 1) { - swapFlag = GL_TRUE; - } else { - swapFlag = GL_FALSE; - } - - raw = (rawImageRec *)malloc(sizeof(rawImageRec)); - if (raw == NULL) { - return NULL; - } - if ((raw->file = fopen(fileName, "rb")) == NULL) { - return NULL; - } - - fread(raw, 1, 12, raw->file); - - if (swapFlag) { - ConvertShort(&raw->imagic, 6); - } - - raw->tmp = (unsigned char *)malloc(raw->sizeX*256); - raw->tmpR = (unsigned char *)malloc(raw->sizeX*256); - raw->tmpG = (unsigned char *)malloc(raw->sizeX*256); - raw->tmpB = (unsigned char *)malloc(raw->sizeX*256); - if (raw->tmp == NULL || raw->tmpR == NULL || raw->tmpG == NULL || - raw->tmpB == NULL) { - return NULL; - } - - if ((raw->type & 0xFF00) == 0x0100) { - x = raw->sizeY * raw->sizeZ * sizeof(GLuint); - raw->rowStart = (GLuint *)malloc(x); - raw->rowSize = (GLint *)malloc(x); - if (raw->rowStart == NULL || raw->rowSize == NULL) { - return NULL; - } - raw->rleEnd = 512 + (2 * x); - fseek(raw->file, 512, SEEK_SET); - fread(raw->rowStart, 1, x, raw->file); - fread(raw->rowSize, 1, x, raw->file); - if (swapFlag) { - ConvertLong(raw->rowStart, x/sizeof(GLuint)); - ConvertLong((GLuint *)raw->rowSize, x/sizeof(GLint)); - } - } - return raw; -} - -static void RawImageClose(rawImageRec *raw) -{ - - fclose(raw->file); - free(raw->tmp); - free(raw->tmpR); - free(raw->tmpG); - free(raw->tmpB); - - free(raw); -} - -static void RawImageGetRow(rawImageRec *raw, unsigned char *buf, int y, int z) -{ - unsigned char *iPtr, *oPtr, pixel; - int count; - - if ((raw->type & 0xFF00) == 0x0100) { - fseek(raw->file, (long) raw->rowStart[y+z*raw->sizeY], SEEK_SET); - fread(raw->tmp, 1, (unsigned int)raw->rowSize[y+z*raw->sizeY], - raw->file); - - iPtr = raw->tmp; - oPtr = buf; - for (;;) { - pixel = *iPtr++; - count = (int)(pixel & 0x7F); - if (!count) { - return; - } - if (pixel & 0x80) { - while (count--) { - *oPtr++ = *iPtr++; - } - } else { - pixel = *iPtr++; - while (count--) { - *oPtr++ = pixel; - } - } - } - } else { - fseek(raw->file, 512+(y*raw->sizeX)+(z*raw->sizeX*raw->sizeY), - SEEK_SET); - fread(buf, 1, raw->sizeX, raw->file); - } -} - -static void -RawImageGetData(rawImageRec *raw, GLTXimage *image) -{ - unsigned char *ptr; - int i, j; - - image->data = (unsigned char *)malloc((raw->sizeX+1)*(raw->sizeY+1)*4); - if (image->data == NULL) { - return; - } - - ptr = image->data; - for (i = 0; i < raw->sizeY; i++) { - RawImageGetRow(raw, raw->tmpR, i, 0); - RawImageGetRow(raw, raw->tmpG, i, 1); - RawImageGetRow(raw, raw->tmpB, i, 2); - for (j = 0; j < raw->sizeX; j++) { - *ptr++ = *(raw->tmpR + j); - *ptr++ = *(raw->tmpG + j); - *ptr++ = *(raw->tmpB + j); - } - } -} - - - -/* public functions */ - -/* gltxDelete: Deletes a texture image - * - * image - properly initialized GLTXimage structure - */ -void -gltxDelete(GLTXimage* image) -{ - assert(image); - - free(image->data); - free(image); -} - -/* gltxReadRGB: Reads and returns data from an IRIS RGB image file. - * - * filename - name of the IRIS RGB file to read data from - */ -GLTXimage* -gltxReadRGB(char *filename) -{ - rawImageRec *raw; - GLTXimage* image; - - raw = RawImageOpen(filename); - if(!raw) { - fprintf(stderr, "gltxReadRGB() failed: can't open image file \"%s\".\n", - filename); - return NULL; - } - image = (GLTXimage*)malloc(sizeof(GLTXimage)); - if (image == NULL) { - fprintf(stderr, "gltxReadRGB() failed: insufficient memory.\n"); - return NULL; - } - - image->width = raw->sizeX; - image->height = raw->sizeY; - image->components = raw->sizeZ; - RawImageGetData(raw, image); - RawImageClose(raw); - - return image; -} diff --git a/lib/glut-3.7.6/progs/demos/smooth/gltx.h b/lib/glut-3.7.6/progs/demos/smooth/gltx.h deleted file mode 100644 index 3dc4bb303..000000000 --- a/lib/glut-3.7.6/progs/demos/smooth/gltx.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Simple SGI .rgb (IRIS RGB) image file reader ripped off from - * texture.c (written by David Blythe). See the SIGGRAPH '96 - * Advanced OpenGL course notes. - */ - - -/* includes */ -#include - - -/* typedefs */ - -/* GLTXimage: Structure containing a texture image */ -typedef struct { - GLuint width; /* width of image */ - GLuint height; /* height of image */ - GLuint components; /* number of components in image */ - GLubyte* data; /* image data */ -} GLTXimage; - - -/* gltxDelete: Deletes a texture image - * - * image - properly initialized GLTXimage structure - */ -void -gltxDelete(GLTXimage* image); - -/* gltxReadRGB: Reads and returns data from an IRIS RGB image file. - * - * name - name of the IRIS RGB file to read data from - */ -GLTXimage* -gltxReadRGB(char *name); diff --git a/lib/glut-3.7.6/progs/demos/smooth/smooth.c b/lib/glut-3.7.6/progs/demos/smooth/smooth.c deleted file mode 100644 index 7a918cb94..000000000 --- a/lib/glut-3.7.6/progs/demos/smooth/smooth.c +++ /dev/null @@ -1,574 +0,0 @@ -/* - smooth.c - Nate Robins, 1998 - - Model viewer program. Exercises the glm library. - */ - - -#include -#include -#include -#include -#include -#include -#include "gltb.h" -#include "glm.h" -#include "dirent32.h" - -#define DATA_DIR "data/" - -char* model_file = NULL; /* name of the obect file */ -GLuint model_list = 0; /* display list for object */ -GLMmodel* model; /* glm model data structure */ -GLfloat scale; /* original scale factor */ -GLfloat smoothing_angle = 90.0; /* smoothing angle */ -GLfloat weld_distance = 0.00001; /* epsilon for welding vertices */ -GLboolean facet_normal = GL_FALSE; /* draw with facet normal? */ -GLboolean bounding_box = GL_FALSE; /* bounding box on? */ -GLboolean performance = GL_FALSE; /* performance counter on? */ -GLboolean stats = GL_FALSE; /* statistics on? */ -GLuint material_mode = 0; /* 0=none, 1=color, 2=material */ -GLint entries = 0; /* entries in model menu */ -GLdouble pan_x = 0.0; -GLdouble pan_y = 0.0; -GLdouble pan_z = 0.0; - -#if defined(_WIN32) -#include -#else -#include -#include -#include -#include -#endif -#ifndef CLK_TCK -#define CLK_TCK 1000 -#endif -float -elapsed(void) -{ - static long begin = 0; - static long finish, difference; - -#if defined(_WIN32) - static struct timeb tb; - ftime(&tb); - finish = tb.time*1000+tb.millitm; -#else - static struct tms tb; - finish = times(&tb); -#endif - - difference = finish - begin; - begin = finish; - - return (float)difference/(float)CLK_TCK; -} - -void -shadowtext(int x, int y, char* s) -{ - int lines; - char* p; - - glDisable(GL_DEPTH_TEST); - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - glOrtho(0, glutGet(GLUT_WINDOW_WIDTH), - 0, glutGet(GLUT_WINDOW_HEIGHT), -1, 1); - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); - glColor3ub(0, 0, 0); - glRasterPos2i(x+1, y-1); - for(p = s, lines = 0; *p; p++) { - if (*p == '\n') { - lines++; - glRasterPos2i(x+1, y-1-(lines*18)); - } - glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18, *p); - } - glColor3ub(0, 128, 255); - glRasterPos2i(x, y); - for(p = s, lines = 0; *p; p++) { - if (*p == '\n') { - lines++; - glRasterPos2i(x, y-(lines*18)); - } - glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18, *p); - } - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); - glEnable(GL_DEPTH_TEST); -} - -void -lists(void) -{ - GLfloat ambient[] = { 0.2, 0.2, 0.2, 1.0 }; - GLfloat diffuse[] = { 0.8, 0.8, 0.8, 1.0 }; - GLfloat specular[] = { 0.0, 0.0, 0.0, 1.0 }; - GLfloat shininess = 65.0; - - glMaterialfv(GL_FRONT, GL_AMBIENT, ambient); - glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuse); - glMaterialfv(GL_FRONT, GL_SPECULAR, specular); - glMaterialf(GL_FRONT, GL_SHININESS, shininess); - - if (model_list) - glDeleteLists(model_list, 1); - - /* generate a list */ - if (material_mode == 0) { - if (facet_normal) - model_list = glmList(model, GLM_FLAT); - else - model_list = glmList(model, GLM_SMOOTH); - } else if (material_mode == 1) { - if (facet_normal) - model_list = glmList(model, GLM_FLAT | GLM_COLOR); - else - model_list = glmList(model, GLM_SMOOTH | GLM_COLOR); - } else if (material_mode == 2) { - if (facet_normal) - model_list = glmList(model, GLM_FLAT | GLM_MATERIAL); - else - model_list = glmList(model, GLM_SMOOTH | GLM_MATERIAL); - } -} - -void -init(void) -{ - gltbInit(GLUT_LEFT_BUTTON); - - /* read in the model */ - model = glmReadOBJ(model_file); - scale = glmUnitize(model); - glmFacetNormals(model); - glmVertexNormals(model, smoothing_angle); - - if (model->nummaterials > 0) - material_mode = 2; - - /* create new display lists */ - lists(); - - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); - - glEnable(GL_DEPTH_TEST); - - glEnable(GL_CULL_FACE); -} - -void -reshape(int width, int height) -{ - gltbReshape(width, height); - - glViewport(0, 0, width, height); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(60.0, (GLfloat)height / (GLfloat)width, 1.0, 128.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(0.0, 0.0, -3.0); -} - -#define NUM_FRAMES 5 -void -display(void) -{ - static char s[256], t[32]; - static char* p; - static int frames = 0; - - glClearColor(1.0, 1.0, 1.0, 1.0); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glPushMatrix(); - - glTranslatef(pan_x, pan_y, 0.0); - - gltbMatrix(); - -#if 0 /* glmDraw() performance test */ - if (material_mode == 0) { - if (facet_normal) - glmDraw(model, GLM_FLAT); - else - glmDraw(model, GLM_SMOOTH); - } else if (material_mode == 1) { - if (facet_normal) - glmDraw(model, GLM_FLAT | GLM_COLOR); - else - glmDraw(model, GLM_SMOOTH | GLM_COLOR); - } else if (material_mode == 2) { - if (facet_normal) - glmDraw(model, GLM_FLAT | GLM_MATERIAL); - else - glmDraw(model, GLM_SMOOTH | GLM_MATERIAL); - } -#else - glCallList(model_list); -#endif - - glDisable(GL_LIGHTING); - if (bounding_box) { - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glEnable(GL_BLEND); - glEnable(GL_CULL_FACE); - glColor4f(1.0, 0.0, 0.0, 0.25); - glutSolidCube(2.0); - glDisable(GL_BLEND); - } - - glPopMatrix(); - - if (stats) { - /* XXX - this could be done a _whole lot_ faster... */ - int height = glutGet(GLUT_WINDOW_HEIGHT); - glColor3ub(0, 0, 0); - sprintf(s, "%s\n%d vertices\n%d triangles\n%d normals\n" - "%d texcoords\n%d groups\n%d materials", - model->pathname, model->numvertices, model->numtriangles, - model->numnormals, model->numtexcoords, model->numgroups, - model->nummaterials); - shadowtext(5, height-(5+18*1), s); - } - - /* spit out frame rate. */ - frames++; - if (frames > NUM_FRAMES) { - sprintf(t, "%g fps", frames/elapsed()); - frames = 0; - } - if (performance) { - shadowtext(5, 5, t); - } - - glutSwapBuffers(); - glEnable(GL_LIGHTING); -} - -void -keyboard(unsigned char key, int x, int y) -{ - GLint params[2]; - - switch (key) { - case 'h': - printf("help\n\n"); - printf("w - Toggle wireframe/filled\n"); - printf("c - Toggle culling\n"); - printf("n - Toggle facet/smooth normal\n"); - printf("b - Toggle bounding box\n"); - printf("r - Reverse polygon winding\n"); - printf("m - Toggle color/material/none mode\n"); - printf("p - Toggle performance indicator\n"); - printf("s/S - Scale model smaller/larger\n"); - printf("t - Show model stats\n"); - printf("o - Weld vertices in model\n"); - printf("+/- - Increase/decrease smoothing angle\n"); - printf("W - Write model to file (out.obj)\n"); - printf("q/escape - Quit\n\n"); - break; - - case 't': - stats = !stats; - break; - - case 'p': - performance = !performance; - break; - - case 'm': - material_mode++; - if (material_mode > 2) - material_mode = 0; - printf("material_mode = %d\n", material_mode); - lists(); - break; - - case 'd': - glmDelete(model); - init(); - lists(); - break; - - case 'w': - glGetIntegerv(GL_POLYGON_MODE, params); - if (params[0] == GL_FILL) - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - else - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - break; - - case 'c': - if (glIsEnabled(GL_CULL_FACE)) - glDisable(GL_CULL_FACE); - else - glEnable(GL_CULL_FACE); - break; - - case 'b': - bounding_box = !bounding_box; - break; - - case 'n': - facet_normal = !facet_normal; - lists(); - break; - - case 'r': - glmReverseWinding(model); - lists(); - break; - - case 's': - glmScale(model, 0.8); - lists(); - break; - - case 'S': - glmScale(model, 1.25); - lists(); - break; - - case 'o': - printf("Welded %d\n", glmWeld(model, weld_distance)); - glmVertexNormals(model, smoothing_angle); - lists(); - break; - - case 'O': - weld_distance += 0.01; - printf("Weld distance: %.2f\n", weld_distance); - glmWeld(model, weld_distance); - glmFacetNormals(model); - glmVertexNormals(model, smoothing_angle); - lists(); - break; - - case '-': - smoothing_angle -= 1.0; - printf("Smoothing angle: %.1f\n", smoothing_angle); - glmVertexNormals(model, smoothing_angle); - lists(); - break; - - case '+': - smoothing_angle += 1.0; - printf("Smoothing angle: %.1f\n", smoothing_angle); - glmVertexNormals(model, smoothing_angle); - lists(); - break; - - case 'W': - glmScale(model, 1.0/scale); - glmWriteOBJ(model, "out.obj", GLM_SMOOTH | GLM_MATERIAL); - break; - - case 'R': - { - GLuint i; - GLfloat swap; - for (i = 1; i <= model->numvertices; i++) { - swap = model->vertices[3 * i + 1]; - model->vertices[3 * i + 1] = model->vertices[3 * i + 2]; - model->vertices[3 * i + 2] = -swap; - } - glmFacetNormals(model); - lists(); - break; - } - - case 27: - exit(0); - break; - } - - glutPostRedisplay(); -} - -void -menu(int item) -{ - int i = 0; - DIR* dirp; - char* name; - struct dirent* direntp; - - if (item > 0) { - keyboard((unsigned char)item, 0, 0); - } else { - dirp = opendir(DATA_DIR); - while ((direntp = readdir(dirp)) != NULL) { - if (strstr(direntp->d_name, ".obj")) { - i++; - if (i == -item) - break; - } - } - if (!direntp) - return; - name = (char*)malloc(strlen(direntp->d_name) + strlen(DATA_DIR) + 1); - strcpy(name, DATA_DIR); - strcat(name, direntp->d_name); - model = glmReadOBJ(name); - scale = glmUnitize(model); - glmFacetNormals(model); - glmVertexNormals(model, smoothing_angle); - - if (model->nummaterials > 0) - material_mode = 2; - else - material_mode = 0; - - lists(); - free(name); - - glutPostRedisplay(); - } -} - -static GLint mouse_state; -static GLint mouse_button; - -void -mouse(int button, int state, int x, int y) -{ - GLdouble model[4*4]; - GLdouble proj[4*4]; - GLint view[4]; - - /* fix for two-button mice -- left mouse + shift = middle mouse */ - if (button == GLUT_LEFT_BUTTON && glutGetModifiers() & GLUT_ACTIVE_SHIFT) - button = GLUT_MIDDLE_BUTTON; - - gltbMouse(button, state, x, y); - - mouse_state = state; - mouse_button = button; - - if (state == GLUT_DOWN && button == GLUT_MIDDLE_BUTTON) { - glGetDoublev(GL_MODELVIEW_MATRIX, model); - glGetDoublev(GL_PROJECTION_MATRIX, proj); - glGetIntegerv(GL_VIEWPORT, view); - gluProject((GLdouble)x, (GLdouble)y, 0.0, - model, proj, view, - &pan_x, &pan_y, &pan_z); - gluUnProject((GLdouble)x, (GLdouble)y, pan_z, - model, proj, view, - &pan_x, &pan_y, &pan_z); - pan_y = -pan_y; - } - - glutPostRedisplay(); -} - -void -motion(int x, int y) -{ - GLdouble model[4*4]; - GLdouble proj[4*4]; - GLint view[4]; - - gltbMotion(x, y); - - if (mouse_state == GLUT_DOWN && mouse_button == GLUT_MIDDLE_BUTTON) { - glGetDoublev(GL_MODELVIEW_MATRIX, model); - glGetDoublev(GL_PROJECTION_MATRIX, proj); - glGetIntegerv(GL_VIEWPORT, view); - gluProject((GLdouble)x, (GLdouble)y, 0.0, - model, proj, view, - &pan_x, &pan_y, &pan_z); - gluUnProject((GLdouble)x, (GLdouble)y, pan_z, - model, proj, view, - &pan_x, &pan_y, &pan_z); - pan_y = -pan_y; - } - - glutPostRedisplay(); -} - -int -main(int argc, char** argv) -{ - int buffering = GLUT_DOUBLE; - struct dirent* direntp; - DIR* dirp; - int models; - - glutInitWindowSize(512, 512); - glutInit(&argc, argv); - - while (--argc) { - if (strcmp(argv[argc], "-sb") == 0) - buffering = GLUT_SINGLE; - else - model_file = argv[argc]; - } - - if (!model_file) { - model_file = "data/dolphins.obj"; - } - - glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | buffering); - glutCreateWindow("Smooth"); - - glutReshapeFunc(reshape); - glutDisplayFunc(display); - glutKeyboardFunc(keyboard); - glutMouseFunc(mouse); - glutMotionFunc(motion); - - models = glutCreateMenu(menu); - dirp = opendir(DATA_DIR); - if (!dirp) { - fprintf(stderr, "%s: can't open data directory.\n", argv[0]); - } else { - while ((direntp = readdir(dirp)) != NULL) { - if (strstr(direntp->d_name, ".obj")) { - entries++; - glutAddMenuEntry(direntp->d_name, -entries); - } - } - closedir(dirp); - } - - glutCreateMenu(menu); - glutAddMenuEntry("Smooth", 0); - glutAddMenuEntry("", 0); - glutAddSubMenu("Models", models); - glutAddMenuEntry("", 0); - glutAddMenuEntry("[w] Toggle wireframe/filled", 'w'); - glutAddMenuEntry("[c] Toggle culling on/off", 'c'); - glutAddMenuEntry("[n] Toggle face/smooth normals", 'n'); - glutAddMenuEntry("[b] Toggle bounding box on/off", 'b'); - glutAddMenuEntry("[p] Toggle frame rate on/off", 'p'); - glutAddMenuEntry("[t] Toggle model statistics", 't'); - glutAddMenuEntry("[m] Toggle color/material/none mode", 'm'); - glutAddMenuEntry("[r] Reverse polygon winding", 'r'); - glutAddMenuEntry("[s] Scale model smaller", 's'); - glutAddMenuEntry("[S] Scale model larger", 'S'); - glutAddMenuEntry("[o] Weld redundant vertices", 'o'); - glutAddMenuEntry("[+] Increase smoothing angle", '+'); - glutAddMenuEntry("[-] Decrease smoothing angle", '-'); - glutAddMenuEntry("[W] Write model to file (out.obj)", 'W'); - glutAddMenuEntry("", 0); - glutAddMenuEntry("[Esc] Quit", 27); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - init(); - - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/demos/smooth/smooth.dsp b/lib/glut-3.7.6/progs/demos/smooth/smooth.dsp deleted file mode 100644 index 6344049ee..000000000 --- a/lib/glut-3.7.6/progs/demos/smooth/smooth.dsp +++ /dev/null @@ -1,126 +0,0 @@ -# Microsoft Developer Studio Project File - Name="smooth" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=smooth - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "smooth.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "smooth.mak" CFG="smooth - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "smooth - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "smooth - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "smooth - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glut32.lib glu32.lib opengl32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "smooth - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glut32.lib glu32.lib opengl32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "smooth - Win32 Release" -# Name "smooth - Win32 Debug" -# Begin Source File - -SOURCE=.\dirent32.h -# End Source File -# Begin Source File - -SOURCE=.\glm.c -# End Source File -# Begin Source File - -SOURCE=.\glm.h -# End Source File -# Begin Source File - -SOURCE=.\gltb.c -# End Source File -# Begin Source File - -SOURCE=.\gltb.h -# End Source File -# Begin Source File - -SOURCE=.\gltx.c -# End Source File -# Begin Source File - -SOURCE=.\gltx.h -# End Source File -# Begin Source File - -SOURCE=.\smooth.c -# End Source File -# Begin Source File - -SOURCE=.\trackball.c -# End Source File -# Begin Source File - -SOURCE=.\trackball.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/demos/smooth/trackball.c b/lib/glut-3.7.6/progs/demos/smooth/trackball.c deleted file mode 100644 index c2501e8f4..000000000 --- a/lib/glut-3.7.6/progs/demos/smooth/trackball.c +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Simple trackball-like motion adapted (ripped off) from projtex.c - * (written by David Yu and David Blythe). See the SIGGRAPH '96 - * Advanced OpenGL course notes. - */ - - -/* includes */ -#include -#include -#include -#include "trackball.h" - - -/* globals */ -static GLuint tb_lasttime; -static GLfloat tb_lastposition[3]; - -static GLfloat tb_angle = 0.0; -static GLfloat tb_axis[3]; -static GLfloat tb_transform[4][4]; - -static GLuint tb_width; -static GLuint tb_height; - -static GLint tb_button = -1; -static GLboolean tb_tracking = GL_FALSE; -static GLboolean tb_animate = GL_TRUE; - - -/* functions */ -static void -_tbPointToVector(int x, int y, int width, int height, float v[3]) -{ - float d, a; - - /* project x, y onto a hemi-sphere centered within width, height. */ - v[0] = (2.0 * x - width) / width; - v[1] = (height - 2.0 * y) / height; - d = sqrt(v[0] * v[0] + v[1] * v[1]); - v[2] = cos((3.14159265 / 2.0) * ((d < 1.0) ? d : 1.0)); - a = 1.0 / sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]); - v[0] *= a; - v[1] *= a; - v[2] *= a; -} - -static void -_tbAnimate(void) -{ - glutPostRedisplay(); -} - -void -_tbStartMotion(int x, int y, int button, int time) -{ - assert(tb_button != -1); - - tb_tracking = GL_TRUE; - tb_lasttime = time; - _tbPointToVector(x, y, tb_width, tb_height, tb_lastposition); -} - -void -_tbStopMotion(int button, unsigned time) -{ - assert(tb_button != -1); - - tb_tracking = GL_FALSE; - - if (time == tb_lasttime && tb_animate) { - glutIdleFunc(_tbAnimate); - } else { - tb_angle = 0.0; - if (tb_animate) - glutIdleFunc(0); - } -} - -void -tbAnimate(GLboolean animate) -{ - tb_animate = animate; -} - -void -tbInit(GLuint button) -{ - tb_button = button; - tb_angle = 0.0; - - /* put the identity in the trackball transform */ - glPushMatrix(); - glLoadIdentity(); - glGetFloatv(GL_MODELVIEW_MATRIX, (GLfloat *)tb_transform); - glPopMatrix(); -} - -void -tbMatrix() -{ - assert(tb_button != -1); - - glPushMatrix(); - glLoadIdentity(); - glRotatef(tb_angle, tb_axis[0], tb_axis[1], tb_axis[2]); - glMultMatrixf((GLfloat *)tb_transform); - glGetFloatv(GL_MODELVIEW_MATRIX, (GLfloat *)tb_transform); - glPopMatrix(); - - glMultMatrixf((GLfloat *)tb_transform); -} - -void -tbReshape(int width, int height) -{ - assert(tb_button != -1); - - tb_width = width; - tb_height = height; -} - -void -tbMouse(int button, int state, int x, int y) -{ - assert(tb_button != -1); - - if (state == GLUT_DOWN && button == tb_button) - _tbStartMotion(x, y, button, glutGet(GLUT_ELAPSED_TIME)); - else if (state == GLUT_UP && button == tb_button) - _tbStopMotion(button, glutGet(GLUT_ELAPSED_TIME)); -} - -void -tbMotion(int x, int y) -{ - GLfloat current_position[3], dx, dy, dz; - - assert(tb_button != -1); - - if (tb_tracking == GL_FALSE) - return; - - _tbPointToVector(x, y, tb_width, tb_height, current_position); - - /* calculate the angle to rotate by (directly proportional to the - length of the mouse movement */ - dx = current_position[0] - tb_lastposition[0]; - dy = current_position[1] - tb_lastposition[1]; - dz = current_position[2] - tb_lastposition[2]; - tb_angle = 90.0 * sqrt(dx * dx + dy * dy + dz * dz); - - /* calculate the axis of rotation (cross product) */ - tb_axis[0] = tb_lastposition[1] * current_position[2] - - tb_lastposition[2] * current_position[1]; - tb_axis[1] = tb_lastposition[2] * current_position[0] - - tb_lastposition[0] * current_position[2]; - tb_axis[2] = tb_lastposition[0] * current_position[1] - - tb_lastposition[1] * current_position[0]; - - /* reset for next time */ - tb_lasttime = glutGet(GLUT_ELAPSED_TIME); - tb_lastposition[0] = current_position[0]; - tb_lastposition[1] = current_position[1]; - tb_lastposition[2] = current_position[2]; - - /* remember to draw new position */ - glutPostRedisplay(); -} diff --git a/lib/glut-3.7.6/progs/demos/smooth/trackball.h b/lib/glut-3.7.6/progs/demos/smooth/trackball.h deleted file mode 100644 index de0f00c6b..000000000 --- a/lib/glut-3.7.6/progs/demos/smooth/trackball.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Simple trackball-like motion adapted (ripped off) from projtex.c - * (written by David Yu and David Blythe). See the SIGGRAPH '96 - * Advanced OpenGL course notes. - * - * - * Usage: - * - * o call tbInit() in before any other tb call - * o call tbReshape() from the reshape callback - * o call tbMatrix() to get the trackball matrix rotation - * o call tbStartMotion() to begin trackball movememt - * o call tbStopMotion() to stop trackball movememt - * o call tbMotion() from the motion callback - * o call tbAnimate(GL_TRUE) if you want the trackball to continue - * spinning after the mouse button has been released - * o call tbAnimate(GL_FALSE) if you want the trackball to stop - * spinning after the mouse button has been released - * - * Typical setup: - * - * - void - init(void) - { - tbInit(GLUT_MIDDLE_BUTTON); - tbAnimate(GL_TRUE); - . . . - } - - void - reshape(int width, int height) - { - tbReshape(width, height); - . . . - } - - void - display(void) - { - glPushMatrix(); - - tbMatrix(); - . . . draw the scene . . . - - glPopMatrix(); - } - - void - mouse(int button, int state, int x, int y) - { - tbMouse(button, state, x, y); - . . . - } - - void - motion(int x, int y) - { - tbMotion(x, y); - . . . - } - - int - main(int argc, char** argv) - { - . . . - init(); - glutReshapeFunc(reshape); - glutDisplayFunc(display); - glutMouseFunc(mouse); - glutMotionFunc(motion); - . . . - } - * - * */ - - -/* functions */ -void -tbInit(GLuint button); - -void -tbMatrix(void); - -void -tbReshape(int width, int height); - -void -tbMouse(int button, int state, int x, int y); - -void -tbMotion(int x, int y); - -void -tbAnimate(GLboolean animate); diff --git a/lib/glut-3.7.6/progs/demos/sunlight/Imakefile b/lib/glut-3.7.6/progs/demos/sunlight/Imakefile deleted file mode 100644 index 9b5d15868..000000000 --- a/lib/glut-3.7.6/progs/demos/sunlight/Imakefile +++ /dev/null @@ -1,15 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1998. */ - -#include "../../../Glut.cf" - -TARGETS = sunlight - -SRCS = sunlight.c -OBJS = sunlight.o - -AllTarget($(TARGETS)) - -NormalGlutProgramTarget(sunlight,$(OBJS)) - -DependTarget() diff --git a/lib/glut-3.7.6/progs/demos/sunlight/globe.raw b/lib/glut-3.7.6/progs/demos/sunlight/globe.raw deleted file mode 100644 index 7ac4dc6f4b319f0646b223ff8e2795c7bfe825e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 196612 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

    IVT_{f#3gcLoXI?n+(?d$&0 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 z zUk*6@7o>oJpI89}{Bu?elL+7+AZKea)%-vd3(AvyG1%Y)q=0{>+!(Q;QowT?PXEJ~ zSW~ZjiP-O~QsxEVCn7-gA+&uVO@e5ChB_Yqy#8kw(~mCF|J6{Q#6?qG?^e3C2qT&T z0<}*ecFDwc?5B+QBk9>oJGZ#xZi6T$YOGT&s%xs)$wskWZB>(rupKCB7#G!nnz9$; zpREN<3i$W=hxn&IFZZibwGYlux+c<}n&4j~(*5;m{`XIYj_=febSL-S{mj?z1irfE z1Lptu%hc~aOZ?$c?yGk_(EtDWbvJm?e|(i(m~$`8S{F_#XOCEB_iC=cDw{uU$3_zA zm~8HVcJ7dRen$DtXX!^DI=*=l|IHU2-#u!d*(dqzUEi7^>CQ>7)hEE-5NkI1w@$SC zU6PRw+3~~9xnsf8Gyacnc7A?0@!(eI#!>U^PR+@K=GA#UT9hEkfyY0u|Ls;~G-gp) zHO{awnX^VRQgoJxq*}2VU(b-moz&-s9DM_ZHdlI?w!_{RcgMZRdDEI&t$sOj9^n5+ z3XsvKRoPl~wpIiB&ls9zcC9li6e`+EU=9=Gmqd_x{a;c-HdHDaoV>1swi=RR0$l z!c@<5IA;nU{|J=`+B1X_R9-+R>YlM0NRp*Na2|Y^qe5jF21hB4_k7p6K<3sE!`Q4it1eC9z@t)YCIyWC2pD@k7l7O|#t9{@f zbO@bEQgKOFyVRA^D(tmBp9q`lxig}4M%CG^>CW3SBaTFuGnLYL5*Aw`q3KEb(^i0A zZD@oE;POeW&U(G89?73NyU6GiS=^0?0{f5-8j_$66yAvPdj0Y$q_mNaC?(6ie;f75j2$W^YD)!_J#O|Vlf)^7fyS(PuOSn8m^t~nmy*6*<*V9RS(?$*H3%j zScpHp*Y)?`WdGy0nP1=U_|={G!&{m6ZVt{JalZD7V_`0Idbj+{KEVf9Z8ztgySK_N z%-Cjji7uU1E?hD``q1=mPY1quoPB&h^U3?6;U3k7b>hKQN|g2>#}ykv?ijOd-{RcA z+q-qGa(*^+Vb1&3_3qcsdQTs5VL_QcY(F;ZUA59WJ{l{j5*Fhh^9rFcn6$(~a_qR| zh>1Ef`b^viPkuNe&2?%z1~pwn*4{Plt^rdhWp(>?mH>K+EqD19R+q$RZFV|a43-9q zQ|$Ch(a%Aut+9C;J^nU-TyG7C^sZ*3M`H+xJt;IEjKB(RXlksj!v2rN%D*r#h`{ss zFJ}An8g>Ct#ABP`p8|d{De=ef&qEy(4*yj){v^(jIl7Bf!sWGS5&ZM`r%ISxBN*X% z0sgV6J(NGp4YAsR-LK>}G0N4kAA}?zud3HDza=jPxF2!`tOJWtoupY|5n1(B^`wC( z(byGE;GZHNn13Gs9NKX|lrn)?{Y?B9R)OdBKat`h{a;^c`}Mu zA6+xwdd)t$UUPUtaC6@G)@wEx1>gQM^TosL7r$(O`uWhuA0)259+^93-L%J9Rqun* z)c|HI`_|0qSOXnO@)4o_Tploe^sg&bCKt9v| zfrPuKTORhQ9iF;C8r>A-33QWgSEe%3u3i-?G&{N-?W4BNA+5LFV6Ym|!pIRtdS^56 zFI3gR3+fECTG408P;GIw$_+IpzZiYGU`HS{jJBm(PYYrM_K2cUhTemUx>}h~O42wH zK!08eD7Igq|4IJ#qP0s5UK$GkM41TCjF(_wAz-k_5fGw(G{F)ECl>`T zD1Asw045PMjz9n_z!SJAV*Rc=paOht_Xk`drusJQl>&NAvPnbtyAf`MlVW1 zLmBw(6>7TxffbowDD|SSnlKy!ehONOTjp6J90r3VVB^j!oJ(p9l{EqErNYkBBe@w& z@N6-O;xW%($(^BcN`#1heg4S6&+eJc={ig8U-BCgpBo15v!+V@yQlfLFC{mw)}B0; zot|=T+hpCiRtoUHb~^C*ZvL~o1M|l$=TAjW?D6Ax>DB0pKHY_k8|o?)Ka6OQ*a$Hz?AB88nj8 zn@ujSqAS_9ZQMG!#k6m`YC3!JR1k)3n^=X7bU}D(tCiS$ z6t!2&DwINrc3{voy4t*MP>XU)XQ~zNh7tfce-hp5-n_PJ(9zXx>=-s?2h7oKr#}@@ zTl7eH(3+a94zb!IFk1z7k3ws2H95K4-UcT&;sV&l+7dRP zE*s{sLZ^XsSyhXl+QLf#$Aya2d%^hS(jZzy7E3k7ub}Owd)pKZi^_1oGLSq=-wW$CVhkLkt4B zDkpZ3@%w}5mIg8OCLC_R#1T-UVS+tK`ZhQ+W^9H09R8VzF<=A0$P2Bi2Fr5E?7@<9 zZ&fXVZamxJ@Q*WCGWhf4qvtmcNe_l z>kU)8{f7_Q_e~lP?(%Nmpt*BB`TlkH*_qJ%Omr6cX-D1Ddjkt+GrxGN@9OL6iH-63 zeS$wd@_%{Ldvu5X)w9m4=k@pB_I`N7@!)oR{%2i(SD&%H-;^EHXM4@q*ge~2 zH`$upQH|CvQ0W^K+B%1$4LL%3ON+zbW^)M@`WCCR)#ed71L#@QqOvp~K!%8bAuLCa zYiz{n$+=+#W1nAWOPH1@hk+r?kjx3fkKmsz3XAwJM7W;AKfqsB3STI+Q!)4#y`zjy z{1E>TgcstUXjiUenApe|fIS62ENEg514|tKNlcbNj$Fp$pREPxol8r4nO}$|p&?7h zSypQp=u1^s_^Rt%(EM;9xC6>yob-u8yMFB0E|JshwIcoh9R49VQdIz7>g8HTeN(KW z8sz5%_~)UHXZiW_lONz8cUVvt%mLZyN5t6TEdnxp3L~)mI~*KkmHqUUL4N>%k}CeLJfLJGCXv`ek)m zSJbM}wXGSI@7!TLKkJ>{D|_`gd`kYC7eZ~aB~7)KWo4Qr<*HD~Q7u%hog5oj>l)2F z@|(l!w#EilhMaC$G9%bI8E~hR{dw_0i7k{ zl6mCDxM^uAwm?E6kR5}%?uljw5yH<%=n&QL1^&;40B{nbN;nU%{|Ulbw$C&AANVgV z!TUUqe_V_~{weDAp??|EY-H_z;h<`b5FsWSMEg;7N5q8KzsxQm#aT?rb84T;NI?XU z4#6!1EChgu5CJ;KT7Z}I55%e}kVC7rhm545Urd1>0%&w*2uL+ismcrePia*FoB%N6 zR21hv$c{OV?#fYoVr7+|2ErEAKD~xepl2rJ4T-@^uw9f3R8a5CPGMw{{WAEW$b{nm zncs@n{80Ynhr&Jr6~;R^y?ZuACf2)mY&RV}6gWEN+_%fQV~69|0so2Pp@TbJQ@foz zx2R^PZFg^VuN~?c&Ueoo$&3%TJiYDu=uQ2l8O@Gy^_5v83SQoO)Azw!{^>o!-+!C? z^j_@dn~4XXbbj%$eQL_%j*C$c)Pm-wKB>zt+p*bxaKGu|tYv18<>Ddp``5#_uk>Jt zOXzu2!IadQ9HDgA%1p;9L$b>p&Do;;(t)+k-acJVk1mmsPfj|gr{gfF*W@+ry*fvb zRIc7ij$M6iev#SUtTi-gEG=4FlfqDsdVeegdUK=M zRZo_KXft*`)wo-c9bxq;Eis)v;V{QF)#3Inx zY1SJNC(V~$G5q4S;LXeK>zBaI)aZkuG^_g8XId4efi<3iRo>xMf!-lw z?}&GBrGvOPdksS?)#F?BM~()E*2veak%cn?Y`276Ey5Xnvd7fF%I@-s{XUf^q6w!Q z8#ix|DC)+ytaNyl7Q4h?ZPhshW{*Io2hD0y8yZa3T9dO;WvJEI8{844+DXb`v~GOTJi17` z3El%NuU3x+4P(7AnpeOpf9l~W!oQoiiS(%53q$wf{LjQc#DQ1@|Fr(+B8&y)z^xQS zLaF{IHeIEuLXtl|nO-|+PDW&VcX)SAm=Ej?Z{2D=u+z7237+}b?1}KPLykR@?)Pr5 z{M)y~q_**bb^f5{(G}ypH|;krM!h~8a{F&z4^B0MpjlM?H^RE z9`kS9+?nZ>MPq?nzoNg#ylyPGa-+Yy-!z=}!0kW2)j2V4UAtAfbC)I7(HzW3kpI~+ zV)3TsscwbcZ*XF7-;nX~!<&yjxp#Pa=i9fgo2`nC8z!`7soAH)T3~Xw8WFWuR$46r zxQ6T=nb}*fwb!VfZ7Oq{&TmEUyHLAcA90gDErM=r%ZNerf2p~$RF9vOM#KvEXGQMB z?fG-@|BU`$lnzczs8LM*KK$!V z_RmfD=!zuGzOXisFgoJMLQx@~ z+!53{6Y6M}1=|BvmXmBBu%=R!64#K3Gx0A~kwi6PyusjN8{D%JutojP)IMcC_*_E! z7YFn36xIbM=Dhgh2cZZj_leIU&yvg^@E;f>%p$<=!`LG;e%Y1k$_im5nnX|g(ed^T zqsoIjBj=8%X7?x5oJ8<4u2kI{4^=)SYWS#A;9N zk-vV*aOF&5e4A8%2owFzXw{M1SUbFu3tJJSP?Y)1u@6OHC+|j_Uacic}2RN-A z)bH4!zIERGkr|%_~m$e}pK9F||t+cLLWy-H{qpRDBmDa9q zb$5@Zcf>S0D(~#K?${h188wHK;>|mJTPEGp$9zL8Ou0Tyx>G-zw+A9xxH@}Qt-AL5 z$-&Xs)UJKgQ=2Z#Z~y3n%ll^z=5pcr`72+2^90N%)r~E_YK=~b!6fl|r4EnK9Bf57 zB#a18!Ug3o*GsH^8#)8p{D0l>Zb~1SC9L zP&?17dSdVv2oJXku+7tpw#udF$w&MI{@H5&{|Wy??6Pvhy0snoUe~cH z?<;$)uk3fKfDus@=5B`chlt!ii$RQCMU_Sb#7Q|+p#kCoBZ&>$*tpqUHxz< zb*>r7X-$>km~!3ts=k5VxpSwlUVFWBFo?ZPjjk4ns@dgj)4>bm79jb-;1%ec3Ykga z%jwM)4L0(F7s#8om^^0W>r&){0udyG`BOqdAWDS-*=uCZSUN8PoC!ex3l8d(?Q{6& z0ng*V_zZo+AHzTUIP!@^v;Du(|NOp4L|xNuPuVH}{G$(BM>bbmXYK8db#+>!DGSmF zgHe^i3!RyO8CZwgm(>=RJG&+WS^(`}@U{n+y}<#tq}%&JiEje%GMZ9&Tw*YP@ziOl+f1 zbN9jh?sOm&5A2y*yM9At>lTMGskb;(PFLf)ZQ0-c=Ibw>JZc||zJ2Sm9lFRS@%yDl zTfJ0U>x*FnjY?QwqJB)KA%O;k5FzF3FR$9S1#c|OIYj*fnLq%kgP`( zGOBcXHK~v`nNoSvDwqbzZkN;V_M{y$tE039xvc(%QinNgQ@T|8n5vpoKJv;Ru;(cd znXtQJgpEl7JBc&gLxclBgcu_tM~>CwJ92}PANo5K&hSss3IAGLLtjqwf+}rI_3C_o zYV}Iv{z*ivBIov7AKmWw=9BKP?k1mp)c5^w*8K6Cf$zWU{qBD1!<(Vm{d$ycT|JRL zKjWR7&AoFy_wJp6Z@(UW_j>GuH&d6+SZ}@EJu}n!*3Ho7&C;>e&I>24ljHUkdEMSI z@xm$1XK(vIzTy4oP2d$(QoqT2gfeD4N*&jxyU#ZC|a)l*`N_*pay+`3n z=+O{9ls2^Kgyx9F7qjaV5z?#!E=O?B51rc~A3Q*wx^bh6n&k)WZe2rS~CfSfH2KNJ6)1eH`9`_ujvy}=Fnz^Q$~>$50w?0oXh zz|;HrzkW6G?Zctpf7SWdZ}Pu;l=6tfyONhrg?CMcx2%;5N(biPTH>`^ew7YXDttBK>yLD~GRs;$yL2baNPi6hixYn6cxUy<*r_Sir zYdlU%R%mV4DjYg}RDew$u_c@)EdM$9FKB)i{3442um9PKM!pWG%sKSp=Pif;&jw$B ze_r`x!aIVP1TC+1`VH3MPFudmy=znOozv+r?hc=ya=g9J`?ue2{N{fC+h2A4>FfOO zzwEku)plpWkIc`*lfe^v0(E7LrD%^?-SFr^^3rL`^&5$IZs&GvcVn}gC8D6FXQDp3 z>g7`5`i=bu#}sojfw^ObcVBbec|CORmcM7X{=i=Qa8^AwVp_L4w0S(Zeyw$4OK{~% zaqo~R8rNsC@{wWB=5eGL*>c!HGUe#$F?43Ns|T&VR4ke_MLQJJ(_=R;uRV5nDiOCH zoZ32dFgKd_ugUuzCP`nXS7nf_pU9~!W}B=3*ujaZnXOYhh9e0h(t%vAHmj}96BHvr zfFJ@~+19WIJ3yhJ$(=TYI{b#9QKr_pvKb^oW6vqTn4x+}x!xIY^7zLu&oIw459TE$ zSQ=>YBamN4G}6C@f8z9`e{?~oaVZds4=cGdyhPwB_Aldw01^f!+gg$A=gcq&M! z7XTv@8s~zu7jwj$$iS<}Yb%@`-In!ZiIEQ1nn7ngX-xFQbRH>^W=#RP#xL{-bXYDs zM?9g7#hcXyI*qod&J@vL-*yrd3rh7tx!S2x$FVV%!tAq=wr}Ld82=}C$ns9{LF|Uv ztzypIGi5vE;UeuJCO~1(wkidQDEwR;`0=xI-(vB4?uGE+70h8GM5UG1J>&jOqqedB zj&nykW~L(Z)1jHk_{Dw6_b%oB^knU$d+BeUbbt3SH+$0l`X%S?%_da-Hq=*_*O|*} z9m^_O-nR zBH6C!7%-!QIs#QEW{<90-ErdBSR$ev9+Qk{{bXxq8(3 z+N+22Bhg^kX7$!$lLEJ2;qB=Y?qR^dJ1{sA4CCKl#6JN!X!(!fAEohB7D(P^ZLLSF z(DiqjLP1SO(mCAg^@a7;5PF3RG)}1@q|ipC@pdB?;*M@xxYO=w*Sa$rYf`I=%e4`c zC8H7tTWnF8)}^$j)TTg-Ii{*?mJ!`cVE>Hg=l>u6UmyY%&c;R`eoy?u_?qOKR$9k~ zQwO)X*XA7CN28|>c3nE$dHr|JRQOzyEI4$ph94XL}tAWkZ#= ztlnN;XQ{07*Ea^6n;TmjYSCsBd#P8{!!A=+wzw-IEC<1e1GZrbELd~j&~PmA(H_VF>_)Xv@`Q-g#3#?Fjw zd{h6Xyk*1Y&7Gae(E**sr3t`m?G~Cn>Udmjvep~St=Q?q;AnFNWX@o-GpbiPVJ=6?+T(D{p{UPb!92>;l4(bb!e_jT9?dUV-NTQFpB26Tb; z7d(8PyzoH`hc-(`$~7e z)3|So?Ty*s&6%EsnZV4n=E8LF(n-(6w%k`w`tRKtL23kPiQH_hXx7yVJm}k8f*Y%` zR5p3A5LDM&D{7Djt1qcWzgg$f2FJ2`HSpi26RcjLy>u#gX~uf{lJ=w9;agW$?cJ$6 zxJ@uLqB^pxd+U|}Y}zo6d^6xcWxe-JAQiIrf_$Me)D*|KP}z7$um8b-?+-%*KHc=w{-UU!cpz2-qy*( zXWOH~aJ$;&SKB>Oja{kLRv;Y?O@ZM5kHi(;puz5IMhOh+!qg$1FQK<4tTF@Zg~If| zuC6(P_Ux$QNpyNzv3kT!CYPGQ9`O4C{%t(|@oUpa!6N>ji2_jkLo}F-;9p}-A;=U( zHGJlTePJ+=(?66DUH%L|;X%UwbRHO-ERZcEi2i?euv}0dr}jxXJjqOMk?1rQluN6} zRycdJ#$3vt>9G4#u65ft=zYq}P}&q!**cWqJn3F@G;8#A>3v;xM^@qJFz6CeX+Wz_ zO4Mly>;ki2*`{rhTbsa|RPH9T(~cB~0tF(g06e`Im|!scOfGic`|^~fL({2 zD^~gu((1~B=O`0t&0yZSej>ARb3BreMw2>ERN?V!u3nzLb?x}@aB#<#?j0MF8%LGv z*SN>l1h?HU-8uh6lU#+ct!zb`Qn_GJi-)Dqli!SHOmh2(w#)`gf%LID8_q z@v%dUv_^NtZ1L+uIjc3KLn0h0_v50vx|({s!qO(ydC{o`mBL0(qs@1%KgFBPl~nZ%hF0Zm`9WtgChy95A}NE?D)c1nYP+&$MW4*trVO`w z`*faeWqi~Q*xS+?e~;CcRvD5?L%Y$GkxF7>Y$s}pN?}rI+|3GGi#Z}OCgpmYj{+Xx ze})BdXs36}=KnJO@%0(JF(JNa#sdqB2>V%z@sF(lQNlK}BeZ*s8jamf?KA9HZys+q z>>G>E9n9UB&%SZNeDhrB=39!YIs@oE2E+gI8Ve&r*u%88u|+MHlsB4D^@*J>ODau5 z=z|__qre>PHJm$Uzd3K6KCHX;y6eC$?fqM^z7fsgy_x(Dsfpz`R6^|@pXl6H1Y=GUwUBS3ce#8@n9 zoH?>#-_HKI*-iaD%9W$8j+_BSzP&5Du)9Yzq0V;u6G?d>=JB^%f)PDxhy6jd*CP+c zWZ0_P8#TbW4Xy4BX}xJ9O7_su1Hfh(ZrC;09u-RHP65l8XZap3n0sB)rkI2V(Og;enWw)fIu-W|cdkamV%D=rG@7iKq0Poz6_JBivyz z!nGf?wvTq(lX_K1WXnhceFk5TF4Cca3)I_=eK zv~U6aDad;=^3U-o+yhcv>Z_ewI=TfyokihsIeq;eNww&kse9zR*^zlQ!)5kqm zFOV+%rS+bdkt3Sr1GZFTc_|w$glje`I33WkbJz-TLUriui_Y@vb3bcTO|dV;Sr< zj122XM>I%Gni_ZY4>(dm$W;TqxJowAr?; z%S`4yQ#*naoxVgS%kA#LF8T%PS+LOVWD zjCon3J{S(5MRQ4=cqFYqFzLKF9n&dv$8U)+|||H*~e7P zR&RH2?aX}G*$=a``(c1tVD`iQ8T)%9DA}2nRb4Y!-~|y11}T#9d!F|>e^0yRKRN5H zY{qZi&VBvm)5G2D_D$j7uDP>kzW-JA@nd~!Lj(~V!law)0xBQS8n(3p0=kN6POW#S zgWCzPRm2Q`IU5*k>35c?!3_h$&UUsm48BA=Kq?i;<-+J1NZ?+Vc_hV9vV|cvNZ*6G zE?rbGDFeVGv3(o=u<#>{9%lGtm5Xr2aWcSS=m=bG1O(OJ#Xpe+dwq=mvC*OGcJPmz zb%p<{x4KkrALE}O;eQzaq~O!33nc|_@G;580n*NF+Z0l4Z=+l3s#{xDvu}{PkxE)G zfTb{qf}gdG)l@49{HOYCc2$5BSZiWwTg$eL+LocT!&D_K^MX6oPBk~h4 z>(fFunH81|VZFp3HQj@~{8oiN%7{0+q0gVC|MttwPfmm{?}_Jo`ueIk7_^@b)Nn|d z6w23vz20{GU{AllUpg6d?(R#6``Ym!_WDKQ;zfLWOITUX-o95VmH5-g-QRxu+3uan zo6oARKTE%T+kF4N^7*^+;i2ANWqQlP<{EEhgRM&NW;?vSNk4g<-|NR~R~o$EG~jt}lWV8fc$$yUj%S@ZJr0 zvcNy_ZApiVK%)H z79&PKU{s<^I!bkyFxWbvdjrNIpA~1keneo1n12-8anR^kKK3s#)X(H|lEm&uUxye% z-#7Dc#<|A+*2B~Ql*|$o^%zNWkVi)Z$Qusd4R4MzlD!+<8>{ivuKMj~iLcMitQndZ zDUMCn=Ee)tGo{(Z+Vp&Bb|FtXm*>lytM$RX!rV+?VwP+HNFN9M?%i%iGSlOc%$#R# zCm(nOHWG^;tfo))qSi+l%nq{iSaP(c?V~mpuLT*N1G@nq<18Vt*=7 z`^VpOyL*ubchyJ7%H6xnqay{?&X4Y^`#aS6v-SPkiRb5Q)vAOF=UUzO_Eq`mMe6nE ziNF1}@%~rsFTTpZe35#5l6?4B?RGgN@*dnRJsu>mZ5?99$G%j`M%Vk){!Q-UF#TkZ zL>2>u8BZRV_isv@%d(aBpm(5X1wkk(S*UG`VoEOt&EPhn0pBW#NXacudu&R^5BeV> z0D~~fS>PZY8zH|xye$&^C(+IiH4^rp*cylxgzeyC6A1Q?v+%5Qf%7N1FXYS+_8;#o zm;Z&724Q`4%@F^%;0piFjs6(_wjhxDfAT)|-5*{C&rp&o1Z zQq{7#JGhOoCzA=IC%V|G3+aejjmDaEtfQnmX11NIY-mH0TeYRl^^A)VuZxWdad{-z{PLHm_BW31X&9Mtbk9Kd<-r5}?4f#g zs6IRIoj>iB8|>%r9{lq2{kyy7qm%fX&r3i3dHvnn*f;O%FoDo+2Cl7>bMwKGvbiGM z-II2<)%_dlr%%#nceV2q_5399cwaj|(4QQ~UY^DVd&WE zCCl&zBQrCy7bGbQ=-NPiwYkwRj?Kqy%jc5efz&yWU0`G)S}2oh2VCi(@xK@UwhJ(n z3&$M*Hi)EL;{W3V`@fL7)BjQY$B7qg;~)D4M8F0QaVV~hX=)=HwV3*9ue?&qHkEoW z+iJy! z{ykpJ!T*G-IXPd46_iRA9Q>C{R<977U7|)JS(^6mVdi^j^6CBPyXR`YqTX58Hao`7 zig5d8^3xsZ)qUywwtVqm`O7bEwM(gu8;xqF)5xWMBd++n-^nV9-l_tg2P9}B|O8QVN?ECk|!kUMTC z(Z~TllC$Fg@b*cVK+bu)f_kV|op-o4jfj05>D_o$$Mm9Ji$TNht$rSnic&kC$w{59 zzGBf2pI&gqK&&emH98F!prKlAGqbE{HAZZQlzvbKJLMV^ZA9e~Ll>6RZh)^TD1noT zY{+y`YJiCcz$Qf4&XGJCMtf|a+CQN4If(|a_e6s5OZ=0sW1k#;K{DQm?3?zozc~5s zB%F1%hzK};4v|knzRq%}+G2SP@yRhv)VG@b7;9<>z~U^Ow&~_cQNa)y^IX7jKhaep&kBON^(l zJwH|6ejb1GMP{=h9pBU+?M2TAgmLuzIP>5@e0r98@=(4wH_z{@gLUb_rh0!xJlJ6G zZkXF$GD@IQ3|E>uI$|;w7|~JX6*3Y*BO5}!94O^%gCDgJwq|w&VNx0yQLGyJ!nCVI zfP;426oPyb{Lx5M$G%PEDT4D4UNCG__`i-IjE^OqV-!i^UK9Q7+-`F4!PNQQ@kjV4 z*AsYugn#FlDEuM*hq~0+0vuUz-XS6-q?{11NX_kX{Z_oyOQ;sN+EM6h|7V`i)|F`AwlNAo_xf49*anD>Y431j;i#>kk^TFf$zjIZS(BKG-SU*ig6D(wSTYiGX&2 z-)yFOS$((7KVHu^>Wj^ea$`+#W$s=R>eihduvfi#TL3;E-l1L%XmAI8{xbRS*tj?` zPEYw}#gAM-xfMhr?2E4tKL6rjr=xc&zO8L_a6^Vle|R4_kL_)7w{MmZFFidq;X9l^ z5?`GgPflVd4|E(44q3ea^Hc5kj&OQU*xeA1_jGUyo!sU3b~Kb*zyt!bPy&5n$lc@= zQV5Z7#d4u!mP%zq*bB%OK#Y8#k(m0#A{tKxLg|qa3Af2X=EwLa@P=P}iGN!gf588x zAPl{LkMNJ%N8H%q?Y_M4-$nkF-gCmC1on7;0u=`yHf9_JYonc9cBS^OHUb-3d!&qXg^4O1y8TBGP%h%JZ1$xv8x`*|;|2^av4Xe0?pl6<$l zTYZFo=ggn0|MA6bH{Y>#?1(Pe1^y8KPSy`wz{D7WLOH~LlBt}bMDjVYmXyPgtIExr zrk|3okGU$V3g#27t|k|j!gF&fnI(5^u~IO%JNjl<25H+jU)(awxruOjnq8gkymp80`ciSEmft~Mve*MLn4$g{aCo1rNZ-;w+FaB(x zJ=v4t4xA5C2#4NY6;ft!b<>I$LsluOq!!t9kk{Sl5deuwJRRaSo8b-fIEY%dMPO0_ zwYzHx?BB4ChKaC`@lO!`vHrIM{+F;H?gE#}A5w6o|4Egaz0nLe4o471v7tC|o?&wt z*%WO242=ZmGUuA16kMuGknms;8F6+Z+XVo|h?=#H5HHVLy^K*~%PVQU$dlW*tgYNi zAxqxfXr(PPSrqTwKgd_h(CTu7Qp!wzg%dlBx-9S=PHOnrnh5-d8ndCAM{6W8sex;7 zLd88lN4s>5>auLzgSxmtEEwhkh=@v75FvL5|MtfqldQ3v&vSK*13O0sJQD#YGJg4` zt`2}_ARj6n@OBRH2-^m`ts@r>+OIAnS59Q6#?uqmtz6YW{*={3QJ<{?{lxeE)QO6 zI}gR30~JHZ-d+%f-Y3V#!$axxL3(gU+}n{(j#HQ*cK#q!%(933&0qZF#@R{jWKcM~ zk->JeyQ$w?QP1`>Pxp~Hh`)KNU7Q)u9xAWT<1l+R`_#)b`QR3RGSIIsNsB?_4BGjxPf9PPWTNopbvDc*oEE@Q7!JUI1=c%GORlfPVnk!M3vz zK(cK7gV2T)j{(e=*e15q6*ioME1|f&W@uCp1#9bG+Kfqg&RSNJH8I^zp$;V5mNOMa zGec^eudZ|{fy>vE51+kYiy=gKP}nb5Ii*L5Et;;gID^PPQ=uXijp;;$xIQ_@nsrWV z_>H_4ro`)BI-2(flHq7>DWcLrEuYJ~UfBlb*-~3~Jb0_obzi+&KDqcJk zU!AD0&y81Sv9tT;r)OrNs~l{aM>`TWg2Da7LzG55vid#c@OJrV(B9q6?rjPPD-90S zCkL^!Lj{E#7vOa{#3rIWI*2{Ir<@*32Y2Mb-Pq}oesf zlL)!ARiLs3Y=Sa6`-&A!jeFCUjz2L+FJJSah#EA}z#d5ij0$c~u--K5J%x>@Koc|s znC+Ngl;sJerAe`M6pWidjjs)}zw3g+Y+X&+e zKmAGVXeV}OTe-JWKDd|ZuBdyv`q^Rf#Yy_$rgn;#91+2JbXz&Ur#%^{&mS2udrt4G zrw7X5wsf$|Jbn;6xdTTSLL}bb6mEBz`)l&OHEwG=h0>r(KHP6A*&K%+dE|w`rmLau zH%-A1N|yw*VVX(Imq)xs1#=^!1nDf3OvVGg7%2<1;fiO;x^#7&KmVxy2lAnmF7ZzY zV<&QCfcur;*zXCrI`1%)CR-wghRsI`-=VF;H3Z>~hP0thKEnr};zMwWpboCV0%=!C zSA^WUTG&c!O|G}zx_f@OeY0=Gm;?NFmT>y=LM%{BKA@KfQDU;S<8xBp8^+uWUq=boN(KY1ZMxz9h^(VpHhzkIEq?K4j> zw)>U!`IqUhzmVUY$&dE+yW8UVv32uC2A#rhUZr2ZG+sS1U!EvWj)jYXaeN>?8Sto} zI7ce&kh|5VZf-IMD}kdO;p`q9ZRPAR{diwFy(QmU=1#V>!Kw%^81pr9C8k>qBHfIt zxtKvW!KSDM5_vwIU&KHqR`jIHm_&~l9ku{*d{oU^XwYWtb};pm5z-xl@Fv{4EBrgS zwaXp|`5|rup2A5yUWI`E9Qf;ve9LIDCwMA|1m;@IST0 z7y9Y;S|#0;Vr3B|56M#M^=D6;-MpC)*S5AJ@rA?l`_YUao-9`hp~)+d7T89BZ82Oo z6t0Pp3KuCw2S+Mpp3 z?4{!=I#-j6jpW!ggh`@b!I{pT&wPPWbJa`0kPZ?AUz$OnG}@eD+#- z_p|Ely}%crXI`D7?WM5YU%z-!dio@f$zrcwD4)NM!}Gm3SDzirYyFu{&-eJeJ$M9C zl-TXv*nU5{TxAYd#k=e5*=_ydo_uykeQ}rq`0uvq!HRfi%S0ZelnJz|RIe$h61}w+ z-zm7(S6B%p`xd{{PeXci@C;KE^*zUc!vv|C6zRS*4o&wu(aWu2@(r z@M(4T=oYFVa%Jn*;C3(`pfXVgA&@GHKWU}T_>E|!Mn%D!QDwcAP`JV|4UX>!e4WE( z^B8ww71bE%umUKCM0c1!LggNMKat>_@$=|$149l<9O7Lyqz6GBn5>0ME2>eFk~KQ0|jGyKPip1DO zf3&k!+}X|EUKe+IQgw?t-qoHTr`=|3yztOfd>AsA)3=@X-&&u2fsG)ynBYBD{r(*Z ztnB9xIpF#Hf&AjB@$w?}`7871U#6NnD}V8qagfyE&$kyc%H$p#r*GX(z#=+7QQp4H zym^v$T9MZDp`-p59Ui+wy}g?r2Rs-P9hg zh$m|@3YNMJ^K{UH@?Wn+5E$RpfWJEkQ~F5$p4Q1clLMNFDCvk8IpoMns@|Qw(me3giB-QQu__x z)A0^Il9VgWi4Wr}e3(lJ4SffEZ08IP96><8TfD_2+X~bgpQVKos}~G36!kWnV6ens zceTY(m>yCLN!5_iiRvwoJa7~Y{#sZlb5tu7$^`>?CX5}S7&SU_5f!18^uj_=s_?AE zvn3xU-$mn?6ucxfyuJh~t(PJkhj)|HQL`qZe}HDKn6?`7VmyIDDh;qEG*Hku78-;C zpLY1kZK@*Ycf%uoCNxm3O^714{r;PaJ$eAfqLfBmRR16 z)$a0qD?(RzJ}(zLl|;QBO+?Vz#%H6kZa&s3qQC<^&Z!owSW%-MRZ8J}S5z}RnAt`q z0}~-iDg=ED4KMimj1NT%$0+9SOZWGZPmeR_N6C%b$;@hJwEW;Y+uGP~eD#aso1dni zT`1_aDQ&3-gTl*4`ln~=+t;zTFZIt}#ou1U-d^aRKG!pA2FOot?h4ry{ga<$P4SaY zKd;$GX~f4(!#+3?3|Bf0mrDCo3O1QC-`IAMR0)=L;Txe z3jFEp8V=eClK&+Bf$A&F{~-RaitDcM@1SeeEv7oEkPAl?O0bx4A}VIsWYsWBTu5C4 z)jwDAC^aqy>!`({{tZY7SxZe_ zqEKNXMIW6HN3&tIK1(HhLB$2;89oOBHFhn8kK`2ikxC(qni|3$ zcH>YF*gp$FxbxFp>I$MUzK4G(_CJk(z#ibg!oNErme-WZEv#DX|Bk%c51Ed zB5j0)66F>b#9~cr^pb04vP-MQ0LVG9HK2L~Q&jMaRdb@2;2PaTJiD;DkpN@HT+n~- z&^q2q@2}~5TQscklY2_P?SJty8ENL&+RDNG(l5R#yu8q!KNUWE7km1){qn*Z?6Bt# z*vA7AeAMq=CEi}dU;_Q*)6AQEfkyd>RAe5DG^tEBRbC za&VCU?DegeCq>PeKmx8%3vTVC250qKH;igE)NKj z!YGnPXM+>7+>8q>j&S|p3&2fSr1D|LQt6z3iSx7Z0J30|<-rgoxfB;HDxRRyW%a{Av)*ju~PWKJOGjAV=uyD$q`Ljdm;!JsY zE`T`k;b8~^2ryji`G9(HX28gQd91v7u3S8U{f{ud4j16foA?($Nxi->&rYRJFS6$k zM}_^r)1ueAM!#>g*^+ij>f8vJrqL3JERq+RqlOdyc{HLKY| z$wWyc=pgd-EXHIwx9Lj%Bdp=*YTMxX*Y&>*a!3CcakFqMF?$7zyouxC+OFRa*f!@s zA-1)jf(s0UI|kU5AY7XFmo_sl_=qwBpVpQI^rY+PV`UT3gXB{^hgG_lRD{*&P;0{&9I9f z!hCU_DWLvS=F%*ep+KS~mb`r45AYzJ%H<^83UE?jVgi`QMU0f2Xfmnr6rhM$y^uU@~}m>)QX!c7TZwMtJvmvlE}+}KPn>Ry=p$F7sIiFKVPHb zxg}I=rn0_znXR?MD6LuPvg_+=zDY0VR5W3o?rVdAeEUEamaTnfmNRK0gvp?sLzc#y)+Ses*qLJWD=(8b5tx^lp}V zH`(@vzJHj1@pAj(+3JIXYO84)#^m4q^=lAR_B)bQ34^tx))i@EsZwU%zCHN%{W)5O zD;e)@KZ?q|n=58GG`3L<-CB_cJ0*C*IN2&2E4kpUx?HrPsSIT`Da1mVm_M5EY_!aD zMVubvF^?6EpO^TDMKlb^0B^Id99-ioOkN!Tt3Wcg44fg4jsb7$d3#7Av1uLr51+CT zK73~<3v35}oHI@c=<3a{4x9oT{ORa_e4a~Nnrs2KEu>D*#pHB6mQiFYiSQc83AS1aPPEKtK% zdJ-wsNNQX~?Tn7d4(zYs?fhv!!pZ&b!#@!OvS9EG@$aOJfq%Crjlw+i{)1z)zOSUV zwA2k=Y6Oz&g5EbOwD{ZdO6t&D!Do=s9veV-RkGem5yZbNy z=CfW)+ig+%eFeRc$pYr<$-T1nFaP#ucMexFc{VRCwzIx`mTT677^PQ4UaS(Hk1V`< zw~sM!lcUjGNh@`RWn{Vf0pm19o%-+d7d5`y^z6)D9t7YF`Pdu~W&m*Wg?R zFU;NxegOZM=p|uKB*N?#0P@bm5a^}x@4S!W*y0g?evE%0AMZ2N|G?WU$iA4-1viLI z7z8>j35-=-mSs)4u~A`CA-T$$jfh$ch{Z5h53vj8xz&0p9YtxW%yPM=xY3K97K*Uye{I)z3vHM});C8EMm$ z*+3Z~7RF$if~Zhx*j=2&XnPyvc>JCS5Nqepz&|mKzN`N~#y_5d$prkP;2*>2MF?Z5 zn7^SH_6%*AHv7@oia-_FbYDe*pFk=)6lB2?YXV|f7=mopK!}IZsU@QkP^(@%CM$lU z5=^$j*+#Im!lMc(R$NkRu5=-qDAH&-UuiSlUUcV%IJn2{-{COT_a;j5Z?L_VXQLNB z+@nqo>5E6o`GItHUqs&O`3YL!)y=+ZFklAvnWO!9uS4J2Wu89P5f^&)+`M=mdva!? z=K1EmAm0+zY$1>W#`wxGkstc)tf4LXyv?Z(PCtO%rA1GFKZzkSd z+=RD#t0z`XcPU4K9aoP9YkB48pWo>=G3lP$Zi>rQSHoh~x(P5|X0md&A~O8aYELk- z!t{8w+RT_~V!L8FDjkr+!Q2#y#?QHP4j}DE(nN-Z+%dtwQ&WvUiQ_!nK`>R_h7}hgf#_(|-I466`OAnRN!lxl}SNW}*R+0{)jcuUM23Q%#z&u@N^2 znTh_t9vc5~1iwrx+nicRg7y}w;CrzDNE}EO4C|vas2(A+0GyZD_7Cw3U{4Y$7*7-L zfaJfNEg(+{AyDBtS;R1ITJa$E8^|e4 zA(&kjPz0sbBUEP5Xhzh!hc7I#)g`R~a@webDS?$xrsnT#@XI%3t>|V-C+CY@ zs@sf8F}BrbR{P=oeR^xtcjp$fwG!(0{M}A)y}S7Iu7tYfPmi_JyVR41%Hv1M;52E* zC(n-fXQ$%DvouQDUYw^+AM&t#j*oO$K^Nz-*H05~-()&Hx>b)pf4;fAQq1HMFD~}h zS3@AY!W;omeg4buzS-<%9}adoh05dvjF>^s`_q%^S3fyk=_s8BRY=fK?O z2!wWTjM(80@EkSn$O{pfQ5Az`oR{Mf_5bALWD@xWSORzzU~IqEHmmR^mxJJO(pea= z?uf?K8603!zzb30xUi6R2IK+%&OdcN0I`1-ld+mnS#R}sI(n6na|VLjVpc(MTA|)8 zcJsL|81ekzJVXm5on<0cI9!dARi;CAKL-whW;kGI@B%yuA)FT|m6*hlRG7;NY=Nip z7?vuqX*p^I#kAyCgQzj!Vun=U-AWKqCX`Z#C9heG)T^mhHkCIL8}ZuIh%h%TbD)qy zlk#OU*Mam8K7MCwATz#!cEWCCpC7UwkzLi<2#CT5<}vu5M1Dwd-DCm3o>Juej0i_P z7|}g!J99H_?TF!mUu#E`s|frC5W=PN0lE>P3%*!OP@5riKnSg%+F6q8yil5>ic3Oi zLC-D;X)0YuF*$xipH*@5=~=$uPF9yvRbQ?fEjKA8Nr9-L-V8U}kxaq0v(0TR)8O2w zHAS?*AFc-}_U)(XjlSpnF|)PH9v#OXKhm&G zptkd5Ab=^c)d-cd!S`S7uJj`CKEPBd#Us2C^akdV=2AZ6=cBAu4{z<{tUBrZ{nh&$ zD;>Jor0P{U5qF`GLrq0{jU=BnhlZX#xY#7(&lqukd8$% zEeXV2SM~ok@`v`n?Yin{6T_y8(VsR%KUm-n-~mXo5nRq11}5j{Q49bkJ>=J9+pQ+= z=By!`++-Zeoapn*b=@u@CLIcwXK--k6yW_a3mDr038!CfQuvQJ9$QR60|#_5oMD4% zM5~5@f4I7h^_HHLl^he4L&+W!?=uMdAo$Oeec`4T%bR6F&1g{3QT&g{XQVS1st0{B zCR7dw)F74ehfoL{W1|+IDT|p-ZN|f+vYJl&gHm+TybvEYE;8JH{^CbR7CZ4oi!xsR@ZyD0l-HuUYICaK0lM6K8id))t{fl zUp_XmBMk1V8$IpLEg@46L406Gp|BtLPgyQZ!RvOsn9(VjGZ$aox_?~3b|9+r&rgdl z&Ps;9P^*Q(g*7(m3Whuw`x~Yw&5V2NhW_^LgD-w|n9BLT{(Sedi}kIYjnAKNx5_GB zetxsITzqj6j&Q6NhJ(yyX0sh|MJ%;8 zg!T0xET8pFxlr;n>K=rNVwI(ADR_I6+S>_cGv4!~@a`sq>U~r}pBxEC_mt!NDE{<< zkie=2`^z+{uaSp3JOEz`b9~@0RRX1E&?@^n4JljX!E?KPE7x5$+ja5jd8?3*!1GOH zsZ80Qt)YK;w!fBq`T8J}yri2jAG=|PEQOF46+mZa?kW-uy%{XGGf+7Qlb_Wgd5rA`B zWQLj_s@Oh>M>00$`j{~~0gK(l0lz5$u`D(|u$WGcl~L6RVUJZqsiN)=W3w)d&F8dQU9QHcG8b)m z)Qek?ahc zU5a&FOmL&g5X zyUf`!dwS1k^ujA!Orjd9bUcj>zK4KnHBf1WFeY_lm8-P8Vv3To9y8%iWpO?TvWWE? z+D6Z1rozRtH!98rX)ng!Vfg9lR+(c#jpA+e3Ykm@oi9?{^WdoU=w1nw>G`}-X&T@B z<31>hiD;eUEI4a|>>L93JLjSl`H3qKkah{DGls~^(; z5DhHA-d6sQfc6cyQqDkHoN3Q$9AT7t^I)vbmXE5?P}YMtm=%vwT4S zv3UqZ3uQkZgLRibDa~`tEX{jjtVh+nWqMBWGRO<$;2`L_C2}&KO(x>8bizX1D?;vgV>_Q^Ed{3Ia#LH|!+ zcO#Jj2mj=oUPg(p4v2+AkpIWR>h0n_{X-QH+5QH1z-I zSn00#$_!VSi>4Q(%0jZ^QR_>oe$eY?F|itq<((b_A30W9$kaTQTBz0s z$?#OY>0Vu9wtA7BHSxiYl22U20P7Csyxf*{ZfYy*TxUI$u6wLjV0(jI-H9x3Mayj$ z_&Fm2x>x-99u<*&cTYNlK{2cb1bsF_O|kltClrtp{u~n4$>~q7O(*Jntt)3NCSRhG zg~h$Q&1SWh&8Gk2%fZ{XkJi>>5AGz)^g^d=QRX5_pf~nva>@gpX%?IF?&SC^Y4*83 ztCD_p$M&{so?-l4;Xk5CFP`0Ay&0pmP_|SeRyR@pI!NRY>jvy`{4xGPHQ<;lxWBdy zGlVobIc~ar1q|i@T@R$=`Z%b5hUN|IB`jMs9E<4E^0_pD9MOQSg^FC#zBkK@C4n(G zIqQi?6ra+C7++r35%5IwBN%RB>V#5(2zAI+LnRUe`ybh&^M2pD6b6QSv9TdC)`cSUZk5Opq9nWB&uyjv&|u z4{;W3oM)Yrcop0MoFUe}z2=t6A;SPY@+^F=*|b`SWUIW(MaqGo|B1)-K?P%B1!B5xhN|7IONK!E{u>9$^pvqpB&%ZZsbUG0mFZnRVjrHkP-Ost|CWq7>dvKn-{8(dzF2dN1; z9*ByIuzcVJb1G~Ymz;3%3E$2^acw(^0oi6U!0@Ac`}LPEx@QlX&2F}vr?QFY;|E>b z#P?sEzk74=*Izw*b8%y5&HVLO`*D*Qost)3?MS9G|B;w9GAw^U)Tw8 zT?^HTQK+dQ{>LXvqrT#_q_X+`gsVL#A58|=uT2!@g2`)>WjU8KkoL+FYhS`#xtbS5 z`gG2#wh%(_k~L5MA)-UALaob4@1Sl)0F%xW-{t2=)l2 zxF}mQv9>Q?b60Eb^$iKsg_VZX>#?1tA2%zJWT8NE#b~_g&8&pYB4SNTW-bEi66{1q z(I+I`@Nh95Ovw3j6+Z^P8}Sf0JdLyqbAG)MkD2!&Neve0LljOF{pfZCW#Y->HMFs` zYEq}2cyzyO>XEbay>GwXdH$qxdcJaU*81Yp^fu- z3~_JqNDlrG{|@*G{wHnpRJ$!{xS@()4F@vR9Pgh7F>qxe$}FkCvBY88peF+P*yv7hz4AbvHVa5MtF+F1>&mB_2KFP33(; z%q_)yW}IwKQDG^W_j3xNa>7IsAvI4*HPT+KumnLUmFPxC2!>`q{p{xJ7dM_gUd`)) zU;k?GkH2|#{HV!9T-)u^x8Go%@a}JZ^_j>mR9fokZj#dwg7|=cTMD3NNuC$$`nYW0 zg_y|4`0)Ji|Lr$QTI5oGw}*_?!(=h?TJrK?aX-aIRoU|OHEc6!m>y7vPpqSMN(F+*-Izu zFy|6g!qx|~C(4zBK`T_d8I!64=sl6x<#RfvDMpu9nly!CS9%eY4l}xYPU6@)wPaF} zl1p!@ z7daaN-t)tPg)?c*(uqVPI_2?=jpWFv`f+0aAV7pQK7lTkp0RBHXmXu0;!;g(cWOSS zJvN^moA0>%1z6hES{$*#Y=MG4mvfOw#^W^>xI$E^@ewPCZXhtGA_}CG=IO*dq(H4A zBQ`ITCxuMNX!yk1g2xYF#xQX+8oZoXQJ{`AY8(?K_r zh*w$-C8d7#&B@KJ%DYeZ1AG`6Lqs@9tbRhXM`mBvIg^Me5rmNuK~L$4g7o&y!`_-T zHwO}`VIGR0-Nrw_Z!g=4_#ym5g$~Ud5(Py&cI^73f|^NIDY=8_Hj3$)0tr3Y+X2}T zY;A8Ve2ql@9sEy7gsE~dv~}-JL<^&e`C2wr)ajg#FfH&4+qiwnuMfNnYk@2qs)ptg3-ht587Ue{M^l@$(MGaB(TgC7)!>O-A5Ys@ z#q@cH%SeZf;e{6UMi3Oz*+6i?UrVHC7M6-hD<3mJL76hiobi#-j01i=0{?jY82<#} zQ^;iu@efp!h$z&B?Hc?c{%!F8Dg2L)=f8k=rVu`PtZ zrhKcJz9F_)qmgh2vZ!kPWUBhf^&F`1yk54}QA-WlEO-&*ges1v=b+NXl839#yYz7? zw;+|hYRSb}E+IXsl@VKA6pKN@T4b#ms;~&IFed9GQe(O0)S_T`l=`gR^o6q1Y$6P_ z!-!HUJ~WM@bxtmTg3k-?afkq^yC@QOLu*nh%&Kw({;5_FqA{eK6+RiFwOQ2X6B?7$ zVj?$}EMajN2%LleJkerJMOc4DJ6p`r)IRY0MqpuRnaWb9$67H5m*Y6ZCMu z6G6gSjmP&6v-^8lMV~K}lfVDX#mUo+@o9MyY>?v$8ezyHW3oxQ$~I=~MA&$C!6W;1 z)BMd;Diz~9F-2j+y;QuIHpQTvO_}w)WgGeBkMWPP z1hNZ|jld53d{_UY+1CEDKY)Kkf$a4i{qKmw2jxF*{dhD3hO78;0#yP`JcU3gkdJ?d z$EooO*6184AhxbeXFr*5uI}V>Wd$`M zSWKZirW8Wlm@O`*>v5ReKrCRdHv>|28k}HadERJyAQ5sE)=pS0&jbHaYax=H1pdvm zE0}Ys4Voz}3dLDuAt5PR-NlrawB|hi5tVciv%iKyBRB#Ai1?71iq$c#87{C3mVcrf zNOxRX5y4VX%hQ4? zl3&*5V#^AfoP(pGl>K7L$0?z|{r%7X`S*Xt$N5YrWyFGi^Zp%IL98AmPDoVASXcH8 zB*GB{?8VbFIb?G8cJq`xi{hUv7r;S2z<((S_LO;KezB+6mb`5OkrV(HF$@slnMjOG z$RWl8m?KX-j3=K z7(Zx2Ve+s-X}Lx#O);8{BCQk6QPB(+?`x>`M^8txm4?#M>N?-0xb*;@Wm?=KiX2LG zuoMVakn}{U8?U2wp`96@PQWF%6+Y3=HpO}Z)d)!B;e#a&uxO|P#T4UeR^nwGu zPPja>l`SQKy(#eu`NZrWC02^F3qZ-^jHBd{@WOjKyTGMALqx+___YChawP&{*eo2% z>j@$Sc$1+aL_$gA&EW`7PnR+1{F9M*yqx-E7PAXcAVka_V)=|0mqPvOcG76pMrIpJ zY@MdndTTAwiYIXKLh<@+YhY5pNcNYNgoxT5fh6>Ho#h5(H12n&X87v*C3Xc z&^A0{Bi`j;CL;h*ZnZ;QI*G`^QP>NgMX&#Q;R-iuV5GP z@gNcnC;^p_m`*H72`{Fz89Bd@^e4+p@k&I=M>8dL@MtYxQc&F|Vhc+#nBx<#(rUp= z^4c}|#izHTas;m`)Wm~>`r8*fuv~+w_@b2b$Kw%$UhuLDj1td_+dFLp1mUUA_X%?v}J_I^PIr;^HtAHqLQj$czz>HtHUGvku!5 zVO^P+rN?K|j0__gvJjt~iT!wTn2Z=1hhndzz2)<7ez|r3-k8S^DtT8Ox#3FNI(R3*BQaRdL+0*4kDOuK+} z6fs)F{rMsM+foq6P#dpL$*GDN_A4Q|tfyO&md$2I#!!HooN=X5{7EVnh{NlwKaPKh z_MeUa4*~*Df#l1GBVb2_F7ZEEgok_WT6$`l*!&;ke`35g?M?D&U%(2bK;PMpi7g#j z5@hjYfsRVz#9ZzAboIyM*4z@PAoH z@FVhrstKVyZMI?ghp56l;zh9YwN}t9xH#kptfhFt4@wPm)`&S*Di=gewN&&&g1Gz= zBnWnqQuT9r4+H`FAKBzo%U|dQ@Ca{0FL|h#E7=SXS+l}M)g$GX^o$>5Ca7%|VI5`t zNE6@@P5}(Ic*zg9rP$>Z#IMpEoAh(B0A_xPm7q{TMXL`DAizJUJTTJ}WgciB*g3qh zy;E*)8DNU|Z~yr>hl36Xvi{BA{}RRC$l|TvC?7spfxoca%)4DOwgw0PKN^$Wi{iVV zK5excet&XdR-G7Sd+V!k5U$#1{sjIP-5EAqnOHOhCBvsBG0D$(S&){bYSugzPSo-f z?m};`&!XDTM`25vXZmxlC|3Vg8AK&M(V(+xywdlILdXF4X{7AET2LsUwlfOz2EMJ) z*5p<+QVh_T+qi-hSXAn=;S>d`lcl0R&<&vMKUi1_v|XreMns4$N6`_3Ji-Ev(Ladx zfb9Xo3xn;0{d8pJ59)Z7E&X`ba?MH5@YhE(Shfg! zAOB9}gJVr4GkAI~9C&v(uD54Mue)QZNUWn}2rT!nQF&MZG z>aSi@t1krWoB z#37x8g+J%lrn$lbn{%-_H{w)qmg$U`XnA7|HzG@TXB=P`h_xcIY7nlsQJt5|EIQPP5$_6w>Pp0Ah;!o-4`0Q@7Miltd_ileaWz+!_y7Fgzu(v}Fd^~ooytG|?pL2Z-}?INlmGgE{_kJE z9lXYH<6C`<$#C#bE1N(_y%hfE-+jY`F^@yDQu5AjEuGz%nh}OhG0J^suy>P~IZPT@ zGWcQb@Frm|`D9#MVkO4pq4v4BBxPg-+rvgADA6G2sdjS+N3&_(%vUKnk?D5DhVuN2 z_a`r3-+g>RsrvcLUt*9M`WaBWu2ngd=mYb}bD>-x%}rXH^t$RzNo|H>?KqnRrFk;Z zG*I*#ZStsji?n=^dT1^hawq-KibVI^t^^adcsijOdI{xfj{Yb6)X+*N@gKs6LtJ1O zV40+1#zZEr#S$W4&L9S=!%ZNT+cazyr_^Vt|35a-CnhbZ<&htw{=eyUmqey|WA_~b zJ0ENt+teY}4pL(XI!%&dIY7~VBsFitv=<`(LvzT^2#kR&F;ARar~b`O3Lx_Z{}&70 z@#9nVVxxeJMx+_l*JyM-C|wSvo|#^{(k2rDMrSMIzIVvy2<3{1tOKb)YEsi)Gju>bjtCu+bl=dn}3BQPsL4b`U=f2`q=>jADj zi{AWLeG$e_47WAo70e}Y`@ph-=GQVo-SV)pCCyrbBLI&$S@$F8l<5T0%`k$fQ21tr zK?w&Us|Zqo-y6k{;4TJn8R&7ey!!Y-9~Bgm8u+jO`5%7s_h0<}pZ@AU{`>d4+l9BE z9e?@h-v9LNo4^07pT2pu`oI1AU;W*;zZzYnel*3Q9=qSog}5wca6dWUf#=$5s+S31PLrIKjFJ+Ts6?j1 zCiG;>T-#gAHqz&>UdK%3#l@5M)`pu3+`7LLuQTy{Hr`<)NhmfA(N3`v2KdD)16DV9 zzHClMJwLj+jk<`9{@R2*6QJ;H5XERkFH;Y@60RB9p%UMU;Xy~0Dbf&m`R`s3+nxc@lP6O?6mKnfq!@eSNIZke1B`>vnqf*}F z%nTQ#LiILZ?|@ZOh+E!lk1nl8VSHi~8l8rZ5T@aXSxdpBi!MwvnFSd+xRgtZFJdws zqNWIVDtZ7_No-+C&AW^;jc9)eBL!Ka4A- z5R`I$wZf6w#pHrn#n#}~KxB6(`QU!z_y6*<|M$QB^MCnIzk4=lef{Rv;X(iIpov1S zh{!dYN-B=}YWkml`&a+;KmYpv{XY7I5h$LUhqBCX?yRybtr;|^bOJ@2;hV>&dMSnq zMt>sI*;@0k{=uuCrc2fTkFYoYX>#w@hy7{)U_wGd2qATR`Q%Xg+yFP2U*0ru>Z*uzD-BJU$fzRNp#bT=nbKH>e#I2^Qr7Q;>%tj1(aWT}R zXYedc^nWquPB_)Y2db)w`jSS9CLpEit3d#(kW@{$BkQCL*nT=9rqfAZb zh%!nQP=LhwB?k=(l&C>!8sUTmh-hq{oGrFmOft33uhwdcO6jn9aPX*<2BDHnJirwv zZ61JUs_f0mR;Di?Li>s|`wM+JRLAaz?LWWo{qgP7w|{Kof5`-IJPm{bXo7_okO)7S zL{8zkRM>!JWZ)UQH9l|Jbh_B zvq~f_6{<;WpMU}hc*vGUmbDrhGHi1dN(RD)Je*S#T!}net*g^og*GMKYN1)NdRWegb~S57BAY_iY*MG~KaFIP z{vShRIZP7s2g9KvRI6|j8cbw?KR}~PK%V5Aoy`)xj4G*@nr+8VU*r%xI@oB^#!g^I5-9y1Fyuc_ym($*?slte3wge=NR0tz5 z_=8~ANKs%_eO?~3q+DHF0YHXRUV-iyxjn5CHJn~6Ax!(RQ34?F|H1z8tpg3+@ue4g zyF1^%?&8|p`+}MMg5n>A2FxB;IvgMiN(X`z1&FkNJOQ5#As~hS{L}dH-@)vW=hW3Y z{;mDz=bI6gxDvIg$;{P}<8NSn$O60?X}P6IzQ2UXD6ya@L(MBP2_cwYPN6kWgf)~p zp^`2&b1^r8U1`wIaR&*zM+W=%d$bB2)vUpIH5J;4pn_v?fT}M+Yk-`XkfA6pZqVik zw3R$f4UC6ltP-gy8hsEZQ7pc1M4R49@O0b)C899=z2 zUx>_KY^ekXkEH;Qd?2mv4`2)pV(x1@5j) z$p+CB90{#jpf_^ZLaM>d@|xLtB`;u?ZzQfCAMJ}@JS8W@E+-K%YrS>?Jqo|o>?Ra$ z!W^>u9a{5G|4(+)^2MbUz@pjYDZoH+sWr3CvG0JZxRQ38G>b zp3Kjb2e9)|wy&%zuTTt<5CSs^Vky}G#RHHUl(WQlQwNwOppOVEDHmGbuV1rnf3@Kf?nc>88WF6n;QVLl@ zNPybRVo1KI9c)rS&sbj z<$S$ySt~F|S<1UNr{`}?jt^TpLRP=R;8PlcdTm&vX|{Rc)-sXmkaMp!fW*mt%Bhyt ze$ace1sPclzhqIe3VC!HvThbB&R~||&O@;oftD&3S9ADBr>5Cj7L1m#b9p2WidiS6 zp|His29&9=x&>N2d>dEnp<$E{gnYWTf#+aJ!!(=@d=?n!F0Q6XFzapPDgxEj(prRu zMm-Nso?@%5w>5zIR%>pgnL(D|H%d@_s4+53m9s?wD)#?!`MkU=P7TAPk!h3?iOuE3 zR#b$u>@rbVJ~bns3t0exLhtZ8^#+y6j14Rdo!tbw)czdclc~&v>~@jvnk)qJHK?q$ zvVpH(c0PW5`{m1rZ-4CWefzxdcthnrgZGeh@qZ@vWFR0f6yT|0F`$}t4R)wH2;>^4 zvAv*_2_@(3OjSC`$8p1x^dl@kZU1-$9p~I!Gwh%IR<<@f*MQ}ZYO94Dm~ue%f zR=Y@V7vrYqmf^Ga;BUe9Sj6ROI?ZF17)&x4q*!XKER&Wo7!j{lZMF$HOuI|jVrQF; zOtp<(rKkqa1PWkk1x;;W>kJ&3o-U9c5UU#bk~%7{T%|^?PRj3_>@2CI7Q8{VmMPJJ ztOeRjy~4>tYXIa25d`<_RK1mg`AQV3Y-C58N=WueUDYTS&Potv7lYbCoc;{6?H zhEU8V%HTm8p=|)nE0x#6)D| zE5#~;;7MdcLJc7oRxO(i%jYTuc#afEXcRzi!4`6eZEUnH1X?bJs!$Q*Tx*;hrBk4G zG9lyz^;)4rh-^pd6$)*tI)Q*g5M}j@1|Q95}Owp$Uo!m(&=RV!e^XM(+QmXsIea$7sT^Ex$GFb-JvifI|^7A{m=w zulgija*9Dj-6e+bm_6) z8N&Ea+WzrK=J~0|wDIFH{jEIE@PG~>1f;sp83n=Yl4ifhEb%KDRvyND;I3@}g}>F5 zgS}v7j!K?X?Gzfk>Uvgr9j{pHA@mMb2AJ)6%K8I*Y|sc3-hkE|QrVq41(+Tor^2CT zTa^^(Ef6x6+9)xbcp@oFqpg)gW>#9qm(&nOXzHWoQfo3X2@PGUtA_BbRWAU3qSR9` zyT(UE&@&hUsuoR5Q;ketiH$9w%qbllbipuF0MHVN5c&mxKoLX)>QcOjgomps$F~p{ zVE+(e)p?jIcO73_FTpso5ojk(>TZB!K_kBrKlAj7gVDbBb4R=HT|0rzGD8Dc|3|Sn z2yh1A=P}y_u}~}!G#Xh_f^IdlO*W3rBD0tzcAWs1+bFXmxo0uP54F23nt-EWD&{#c z(%#)-4chT{i$h8XXc@d3TeC**RcNhhi>DwKMeRz}Fd z#GvyrxR5 z1$?znA%VcHrxDq#Jj6nJjHv;-j@i&iwb?8O3b-_elw?L_kq{Ps|9yGlN}95`PN~yi z*j=quLHde364;@cQ^3;MZF%_=xb9TP>PMp%&ogtBt?vG!3hVCYx1V>nzkS~M^ZV|n zuR9-q|7~IQImjoaWxCW6K)V@OD~W%mt{?s%O>lmrN-oziInsbRj2nnx?eGTwGIG-R z)Bc~d{A{u!z==Q&{__o~bD_;G)MXX71bxk11EWGhN0>v?$`T~NAImLO<`$b_&7c`D zWeva?Py;ql^7JOMPfgbKg^+vYH)+E@tsPF!Z%_j6@avg&qeQEqYOHjNN(h;8t(vdZ ziWE{NtV^vVd7f%Loz1J%DC)Fos#3*-{Ju=gF{_!FWCT|S8Lv{y)fu^b5gSX#fRuvd zBhxeZ`ck2;29OSVyO5zE1B9&xXe#OUbrlE!WMfW)%C}lzsZfXLu>aJ;FDho%0DU7{ z28A_s5NfLFRXB8AK4X0L;FG1x)5qKU+f#5C4jUnL85NVmeJZKctF#79R-;rM z(&!yBwO=cM9+gR^Z#ZCdXuU#)DV+@9V=XNca#=Q1j>T1`I=Ya`X7c1TrAY+wVer`) zaxKqDLxm38riesTp%6la*y>BlkJ$Ja*i?F%idGIy+yE&mB>(atUFsGvbPW=xm`aEW zs>%xL1stgeEi;8xgp!J-tIMaBs+?T>K&3}XQ`TT2Sko*6+lOnWgD|PGLMN0j)QQvq zmdMFahA}<>eQc%Kpj0ZfbQ-`bti{phmy%t8@?tfqRdPV0(YY;pwTLfM>GVtqk(pB` z(hB+_`q;5Cpk7!x3bX$!5U48-xNU8xUE1L<-`@WDb^F`i>#yHFeA@l6`|0iOr{A{T z?Qm5m%BimWB6UHj3}gQ3iXa^b@Q8_cqp=gR>bUAFR8*nOAopcw08$`1MKJXr7oMlC zl(qkOp8ggNLaG?iWak-ks~iT0P}y!|*=c-7g+0X3yO>@dxE~D)2Sw@OBBM4n0pDXP zbYg)>n~@`su?UYg;uNT|3Yaw&%!(qZP3g7qZC0tyqh%Wirb1llQnHLHwnj$t7}!Q2 zZAzY8%u;En1VO4!ahMepT77i`wG6z{dWn^&HWC~Mw#rH?+*HZh?0J2`GXNJ3@WbEA%)P8-6qxQ zMLHeb=h7Q>JRE9Zl{PKkVI)jyj@6*@X*nK3;}om>N;R&aS{pW*9E3LFc85HMpxLCu z%%#*CwE7)bJ#A<&Dh2xy%F=L&WHJD}B0FD);LaAyq&hi6%w>p}^^7{HTB5evu&z<# z7a$O*Y${AOqCpJN5=awMWi*Lf!nIQ+HnAe0s1{Oh<=DvPy$qZE~wPBHq2F zWiB zBWAgk0;`l~COA%o&?XhS6kNPwQ80B1 zra}hc1&&co!@@7KjG3QXsUmb1HP@l#hzX%cSf$so%{rz|NrC+{g$>XuQD9@KtWIfU zYq2k0MYkXVHiR7O_yp5r&QGW|OW-uk#V)is@#9-6d1`bwt>p?+jWkQk_xe zc4}HG4=6JWfgFNVX86ng)fgecE@r7rK&S)?n^JC)5_&1(pgSCt>P2!J7g$_tS1WpU zOi*&5T4oax7BPCh7~^deHlUD4gkJZ1+L>OaplzK3CzF!2h#N(1KtP=;qs0?oK3CLa|<^39>OJ3?K+P{~Dc0 zq0}n%TF5vUR4S_xsR-E)11xDZ8Ym5djQtGEd|}8`CFexCTYi1>apv09dWHb=J1|kQ zef&53ucbOv9EViW^!3}v|N76p@83xK-~IIa*YCgYeR==+%g5c_?d_eN&0pV?l@pLT z!YN2yDjWf_C_p1P!!g)Xg*LZU#aJpbR?KaRkUQ;>=dcqbVtvNQz+mi_s@{6dQq zj06sgZL5_A#R5;QI>4~CiR~=}i9=#K)(-GTL2Ibjsx>Z++a+~6bsC@9*%|HxBde%D zW>a+TN3*X`pb*;aa+_0WQSiCsS&%9M28mN4a>~Vs2sQ=Bq+}}P6hcbVVY!C9PK`yH zIyI)QkODcek3*->s3Iw;IS(dT(L-?lBhjKwLvQNnQT_11AKY2 z)#|glf(E5uWAG^TL5<%*I0IPjZEb1NJ6wd@E;rbf0XowMh8t`i$uK$G@fT|mAFfRs z(kt`^nNq7_AvO^yrDl4T2ikT!mqm;*S z3IHONRY6mWUs%M)h&mcrES0c^rlRRoQj?62eR(z+qyr9=3#begKtDK#vKm%ip$6pD z;yk|5)g+T@1ah58t5iwp2CbAOCb(iTNeIkO|D``VQ|TlBOO`UfL|2fbx3&#^{q|<> z>)Y>t?)>qO-A{YJ!T*2%bN9>F4>$#TpAie*Z#>`5DUy~|VtPnaOcE-jzre|ZNdg7P z6oUeX>j(b%SCN~OLl(KX(l$>%l5~iF+JEX>WTuprYr9;i2juhw2uqvS|K zwR(4}(#%%5gfboWh{;@bxmjZlSe+(?!D|XAcxp^YQfibSY~VKm>CuPExn5LILJEdw z7BWSArBS0OD&tw@ZZ*&1;`iiMSA3LV;#Wppuyj_PIVIx+6@6t}OBO$|mu9;uLD+Sl&T ztHoLa2W2mz;{xP|f|gMuM>6kFi_I#D-K;``LygTL29Z-Eap?3N4u@GGwMuOciG?R{ z_>nJ|JgsJbKw%@~j?6+?#L;e%*qTi?^woo=c6?a4)&FY$$bSG5q9Z01cx_6Pl2AZq z0h2ZOW2K;g(yDbPso5>p8Rbx3#h8QMrzFfAB~VDY0Wk%)`j>oRBTG}yAdnu}f=*M= zrO>G$e#?|7HExT-ERotdItSUa+_#@vQpql@tjG8&rog}s5`YC-$1E)48N6haai#-IgoXl^4-Yp{b03XV62Pgo3uRH?^@j=frW#gYb&luBW$Ahcj0 z5ZuKwcI03`&>^yQ3pblflHYKVjj&Y8hXH>?js01&eWm>E_pf(8Z2$i0{iiSQzJ7a8 z+W#NF|M8E#fBeViuitjReg8Cjg zCVJ?0HP34l=?PPAW_?~B-EK3&$=l>CsZ?hW3k*7z%P2G|sYV6MrR925LZem+SEEtW zp?^YWSM#-OLd{dC#aK9{($?$rb>vx4V$`<=6le(egAR)McYKMh777E)=o8aeaY>sW|!H_LZ^)|85qd( zJqEE|FC|+6Cb`?F2wF5=gTi4{BIoxR)eeI$KZ}`}#mdcKX6(oMJkh@WbeY8QOBRn^ zD=*9AgA|`Nl_QaHonRE819hODO%)k25~XyD zifdT;Wn8c|FmzB<3=)WpPNUS+&`Qg=6;`J4U!vmJ(` zf%jnk9Zz!dNk#;0HLKK{neWUl_h**4D2?J0hOEi!RVaNvci66UxHWzmPf=OUlL*z> zMGgdu%t8}BvW#rlIcfjoWL!R`6{INZNP;@%@-W9#gn55*FbcDT2P$PkmJ&PBGBTO) zb>Pib)=BKZ8^8yO{G{ToweH_+GOK@Fx7cS}yir`8FXpDU=44uGM96 zYc*=2!Kt;YWwKU{+pE$@cur_Opd16w6GoVak#HzK=SmCmB)GtV#OPms4oM!ydvM3d z>wslnE@;E30?1lmf4&y+H@C!)TMUg>Y?3w^R2C*$h!#Dx%k;($@RO<=F!?DjDmG)_ zk-XvQX~6<*YTQ7LS5Q!pufq!!@Nv~rj7W@8R$xpFhaxkdh0a=jsUR<>p{j~jTg7KJ zDAA%aV1XmxBP)+^DD)vQPa&OdB+tFn$%_ewkGpKc$PkHin@AC(cVV%w#X zZcF?8_J^&{U*6&R^7Z}Rx9xA=cK_?YzW(DMdw>4<87a{2-n;LA?0)<9``-7xwd9V? z+!pD-bSC~z?>*hv;Di~I)|&!+(*7J@rY{UULjU$}_Md72=a8bf=@&8oOZLK2vyc!D z$}Tcw6nRkyXBOMC5nM`*Wp!eMt%XLdlM3WkwZ^U^q#}StDBO&>1?G%wa=tQMccdN( z@>^gzrY?LC`_cFYX*@@`KZjdxy!{c0#nH$;nlw}o`AsiTR1jKZU68bWLw>54B z8!^-%Cd&lOq+x*CL^Non6g>eXuL1Rf0uY}D5^YK;WKZPe_AczT$DDp0vy4R)W9*Bq zsO6bUxh9@aE=KnXf+|KcM-Cs$=gE0Om(na|(11}r|@jQ1D~(Y!+3G<8k}58QYx5JcLOSpd_OV1%&ffSKe%s)z6>>x%q;wmm~ksmYJ+~GO>AY*z5(Atzl_vFAgM2@p+DTxI;z617FfZkQL=Kg>KsZjGH2=m zgaf^xo}v}-?I0A2I1V+_OfalUs0&oVRxNUtQ7u4PZdS4MDu!9hGiaf6g<>ra3cXPE zhlq+oUvIP2s7ySIrO~7l>oq)dt|5Nt_Hg}9R;0seQPNsMGL?z#Gzn^I^q9cai49m# z2n0SOyEeb50U)+ZXL4$+Zk37Bz!geVewC6_$Ah*NnleTC&=w~5eBlXvJG?y<=CiZF zbyT33-Ion^3POMw-QEHuei-}85|c~8a&cQo7rn0lO9s!`Tjngy*W5jGZ4+yB)wz7? zU=2Tp`CpiBRw2JZ6dJklDiFO3hmSi3C&>eTAcW09W@D%v)SR4fa&IxRM%)oZ|XyvC+gY1GiWD=8*}G8B3X3fNY{ zhSn+~np|csD8$|(GJa{5JQcxLC`AG(VNi-h3X$9hM4Qxsj2`Szsx(}Yg~4|qGeNKb zw2rhSw+QNR@U7nB)=MEK+G`!~OBf5H*id-s0#x3}-#e*NR)AAjur`R6X| zA5}1%KaRjx9E3lAfBkOnUgCv>trju00jnD=0JL#`8hqOS<1rl$Qu{ARpa1g|6cw0o z{Wt%ghwmaU(jXTiGqgg|{xKJvnQz{oYlL76w!`Bf{E`dTq=&)pN6rIjlmZ+UEiT;u zl;=-t^O7IOUpF5r0dgd$Sj?iT*Y3-v!Tu48p<_TklJ-wxS@=xL5AgNSs#Fq2owcfr z?$r2L^)e+FD2TeDu$oV&01k2}m==OzS8~-NhF&IjX#`fS*oQ8gifz+!tpwYo;ajW{ ztlE(&7)Cu?t6^AdLLR|)Sp`lr1sS`;z>0VkUK1DA-r1ys$W_?y*2onV)jWQqqPW3< z&mDFJu@L}z`-)Wiib2Z=ShWs|&Y%Ma0zwI3@8t-KYa@k~oyh2rTHu#QAj5nI9%+Js zYI4axKf2aEnQS_m z2%JbZkFJHHtKq{dUE_&Er#G7i=bi1>x{f8hV=Lj~kGrOxcn7ZA+plPXX9;sm?K~;c zMKJlc=m07Z zB^h)MM(lNJDKJnPi(OGuE74i5T%J*Dd^s@qzmbs16Z(VvpPu|8M-+3jRnUK{W_1zH z6Hi{gL(RLhyYpf9x7|G)f%iMVZ-4m;AoL?VKT2TK!r%VD9LJKsQ%{>T5bl6X5j zG{s{(!8H}o%{WS^g46yVKL2M5^z#)MfBJy@d?g(+(vLWyKP0p8ZwsB7Mc&LJHwxjb z0t=1+9y9VxWGpB!fhm-oum9`PWy8G`>Crn*1>CgH{}Fs~1kyYW*gUh=Xlyjn8)W;) z0uU-^5UU{vz<*xwDm zr6tfx!1gYilI1q={g_!JC^jY2DHk~PsNB^uiIm3^n9W9@C2j*Z>@o%{@+PyS)kS!8 z>bg2kc1{B-ajnq+vH?fgBjOwPXA83rcyj7mtA)qt%BgbYMVj_Pp=_E)edpfR z{pI)fAG|()<=MfLkEh~q+fKi3p4w_Xx#5Z~1;^JsqYs-Vo-|D+{f8g923OrfE54ye zfq@5+(Y2xDiJ__Ww%A&DbfxY16W_>^dvH0%XDTmL{gYL5fgH0)X#SF#ka^P5LNO8m=vabh$fGM{424RF!jrE6=ST$> zy}+#%n#43T-9TA2%1|bAOfs&65V{DZQzh|fa3Ty=wX!I`Qp#28WO6x6Ra96Od}ggcS3H6fG}Sr#sUqIajZq<{M|Z`sw{OK9J1d37NX%T*C!_ z_o6^Q<{f+xPwXu|c@3v(bDTj_cxMHU+wMeJzaZy z<;>E|Omgbf^2F(ftrLmP^P8>5H=1I}rt!x;=Qf*SYh9-|;rs(*kG!Law#kji>5abA z$?*%D!RWFt`e=0e`O(vxy+_yjkFSMB9=44o4xfMSjXsLazV1Bx%r~_)cx9_;YQuAE z!xdXsA6(QAE}3zTjwIaC2Q)=2r&y1q6nPy-WCwxKq*duPcCE^ctr(#0K*B3KpN-5G zi55x^n0;k6GJMki1GS*kVK=I+vO5P)fyR2GzyI?N;M$GpbK^!(O?r`tCcpDaJyN&foVi{E~G`s&r@ z_HVy||L|q^^Os$+3iysL!0&(l$5+z+zwRO&d?ru9hux2Ri;H)A+Qzz@hS{9f{DL3( zf7<^4&hWu2$oBtN`!|vl&;oOAfi=6(no;OT`F~edfdQWXfA{|g0jU%Su*3iK|9{y( z(qMVT0f~g`mT*FOS+u{~KRz0As;*FpCz!Y-9T#A?JW>N0Z^LJonZv`+A>oT$u0)`- zNLWT8-74l-BpgHpF|*oh5&|-{%9SiCr>2tPGHPJ(dI^I^sjv`Kjgq}DpC;pxntOo$ zfW$&wgsck5BZl-?L9&~$D+DB4EDvIj(=;;X1+jLtnxRmGI{38tbWc5Zp<>XR!A zFPEOaKXvA6XKOgxJMdy_=hf@qH}Sze-hTPw!>#zE`3Fy4zuMZ|d_8ybQFQoj_rOBr z;N95N%IuA&<7X4msV4)IiQbtvP2(?`k3DUheAYL;)p|VHIrX&Z_&OYT@YqJz)Mo3k z_10r6hfXJ3PHy&|`85)I>N~h>iOh$_*E)|S+a?l|7dL#7yYBI1`1DI$p{W;1;b)pe)u!j^B~zR+^!7jpKNlaWKq+egR!L4P-!PmWr{0 z=cM1$oRx`*FqjZ}*?=N{4xy0V9u;Vc@PquH6mugp{~~Qcu|d@|GkyEX)y1dqBzF>9 zD=%IzZM;gp`S9TBi`C6n4>z_DN1wfZ^ZNbH_Rc%h!|!%>_P&1nw1+HcZ}0Q&+Z`0e z-~Q`A|A^n(vRg(O+?Jmf4!57ae!hbI2ZYZw=QEx2;PK~oArO)Nok0Q0%(LQx|IaS@ z;r|f=$WxFDoYROa3n@?@@HZqsXg8;dFC_dp_^HJl=_(A*Q?)Qzf{|0+K>86rMh6dfcC z1r;3(CFS8PkelpqKnjGX8r4(E;GD#It+d)@Q&D|JrA4WCn?q7&_2Jm8UK7-+9VgD+ z-hTc4(7@57v6=quS;I%oA>=|8*}J-pb}b7So2 z(v`Vir)HiVpMm#I;PM}N(lW7*D|9r`d~)3%ON1t#HpQN}qbs4KNoU`ZYdC>i$Um~$ zG?r)?O?Do8+7ey!L=)}jH`}LQcT8`!pWf)a_^bE$M(E5-d+c%e+{>0To4&~n$I&Oj zsZD+Nyln7c)5-Og3%_QU0uEKcpX|@W7(Ny-2_@p7PSPZrl0w}h1KUPFXY zC+E;Dxy8KV5;2Er_2``-STgu7kI9gq&G(1g*tQ1UTWi2!^f;7O<`}X0F|NMd{U%#O?{`&v^ zfBzYY+^%MOQSuZ+u`p%%KMnimla&4cz=#S8Ot?tqa|$)e$uYqB;|Sn_VW;gM)h-zV z3QVcYpS1t9@sswS2g^qZpvlUE&nICAG6WO?&?f6&e3_~RfNubZOF4UrxK4GZgnlr3Zq3#2Vc<0fpsSB%-gEx%s8Ar#GtLKiX^^P;L819}sbm-2piIq@j z))%-IZi#nx-tf3D1VXdnv1HScb=UA($H`3u0+hflQ_0BmX4mvq$EnTGu_S_mXZRs3 zzjZ9>jjjZbtTi8b(sbxiZ|qqIy#3{^@bq*4$@Re0)3)iC9p_*9rZ%0E$%->u?sI@dA3p4T|Ni;&-ro2BSbVaR zeEG@ezaAM~uc<~xr$`(8zj}Dm{!^zCZ}|D$^b>&pDa$8)dv?nCr;h;aA2lzWf7<^8 z?MWYjtUQvYh(sNIt`yXxCJ(}2;Pb!Q|4;vq92@XB;%s$c9lAvdqSd79))@M$>q5DO zWcw_AUjB{!r?f6%|72d8hiPjhMS{#cZh3`_PLayQ*v$ioo*+bOG{>B3VUxGhZZns*<}@+Nv^sIkVl|9ydkinZ}b8%`v8axm)I%Z+C&O;?SZMyGC_xxRJc>ZY}I#@TUGABx*M zZaKT}`ugvL25z_Y-|Zck>yE?+hvuWv2i-mMNQ7EC%Y7v28cVuH z5^X0p;rSzHHvLD}0(+r&oG*jnf0Q<#0n)Osk2%6HAtcdsRy^bM_;BX>MU zlg-mx?h_lqGh4374bKVW|C`>4P3P3Q<5z1Jh)#}*3LVQe; z#xlYw57*bqP5fX zyVY19%i_3$!Ek37jH6IE7(FtIA)u*KlXn*$&=>|FrEv1FD>OdH1s^5QK@LheZK1ZA z?r6NJ=W_q(T=eYv@tNeg>&fYx>oap3vx}Q|60hf1-^?YpFWud^x3RPG{I}KTuQ%R& z*nIc?)jL#CpPy}ieE#n1#`f;o%l9jr@0QlL6I-8_pS>T5#Tn`ejcX>eNDJi|%=7+b z(*Hi&L3F@DNFRZpCk6OF>HG^F!1-bD$iSg_B^CvLLFtt5+?TC{x5tDgDOjD4EFHsQ zuz%9$lWw1EHKs1uf2!(9eVGahB>qEUgJkxef_hTjF62U_c5C`Ve*~kib#-cNphR>? z=Rf2@K(~~f^#AcTJRxfVRL!YCkbWeOKn|yA`$W)OLk3fqB?GlZSshtxdno}5-5a# zhfnM)R{VlSBz9Kj$WRpE9%kgSs}9H^0|6I=`;0wh)u4?F172;bh-Jil6QR=ASD|P^ z0}zu{{v)yIk?}4DN7~-q-O|}SeB{tt;_j2=+D zsiZz6;6#M#Lqijbr>;DmxUh2ST5{^*@`;(1lQXMRR}$y0ub-VwT)Mq^awc)+TJq}M zmy3_zUAez8yS#ZX@jAZz{MO3LJC9z^Kl*iLa|hSri)s7+@rIxIe;(RfhP*;sMXgP3>KSB^wkNXl{Eo$ zJ+exhQ2UUz66Ak#Agt}0bkDc6-DvNKx3=Br=$LQsS@yNh`P%1U z>K(CU_nFPe)J6|N!01}@NHQFK0{agSuZ4zIVgCoGo;MAwjh^3%o_^lcd*6R(H88wn z>zMbCtTZ2e(i(fxJ@q^^kqn*PLKfsZ`)l*`i_Y^~kqcXalN*7_geSUW8HoQCn3;%&?ACub)i%*Yh^Z=%1PoDsrL(R8#>yB#dQq~ zhQB>Hw=n;7FWoL%M{8Fg=)un?aaSOCdGfMqi^do| zb@kb`2isTgZqCd(Z^K z=VsSVU4A?>zd0R$cKPm$`0}g8#P);a2egatCEqV3w$I#r89aE;g&JoBz*; zd=SYq{8#(`*(}2`!5h;4KP%ga`5LEd+NJk*h7UTNk)GyGDWS_RrR~p=R@FQ5(58oE zYoQvWN&nXVe*}UQ`Q$G%CS_eohyO4B|DUk{VWI$Gg={YWuzwQykyX_EU;IBtN{bGN zI))~#DxE~-3Hf_+a=H1%{QNvVs@lRzqEy%&j?T43ZwI^1bq>ySk6v%?kGDr}OwT@? znqIQC$0hb@k!8l-^?+x%z|l;XaYqX%hf2yK8AaA#a*d^p2PM`E*0x1po_h0ie{5}d z>d~=tkEY|BvFRtRhZZBT<)-Lj=jd|pp@rC~)uF==28I@5vDKE=>yfUxfr0tSW6MMR zxBL3$!_BjJCDL=Nr{{L0^A;R?M=a5bEBeIXzpl5Ow>8iD4=w}`KM9SmdxzJWqK|z; zYp$V3T_=*!3(s4l$>Z_2Jx7zFfu-2Y=J?D;@8t5qQ;!DECI_dU`iCCsTIboe3%d4& z;MgPo=&E=8aq!g3meX5-$!C_4b=}~KDY{}ilJLY5){a?6 z1!!cxuAs!6kwY#Tz%hXf!ZAUwADU?R(%aJM2s?(3be)`zt!=zMG&b0Kun)XAe~Z7P z)kkI1Po9ZxJWFo9ef11YkBy|y>$raXCY2(BE)Wt1xVU}4Fk;gyv2!aYE-jz9NM`<1 zGl_Gv>!)TDr>;Ia6HlCo^e?ZY5`KuOl2>y8Z0pt&NG9wV8!q zZ$5a1=&e!Bg? zzk=r^n3D%l4l~KtC?=JMv-YtSB6DE{y{T=&py|~cA}&vVb4!QY*PE3?R=y^)DZ|wBP~jE;B~})Jzg;5Qm&FDJ6oMFd8|K7kDK6wicpVo$6s)DTIl5a0W;hD>{>*YR%L0Wa zN1j)z&n%J%ebcS6JCX65L&sO)WUk$PHaW90zw&PO&eNNBlEbn1x%i8vC+}|FeS2nR zqkrN_YxJQe7_7osnC(0xj45!OMY` zo36n%fAn!+IAQHaKWnM&*m}#+4fnu`vuDZEvgqnWhI8Kwe%oxM=9PYaU#-46Zq& zNkjjVwf~Xt@MG)HvhC0caHN*wj{`^7&Ap4>k%Yp3Q>ve}HpO-BvjTavsKN_27cvJ- zlmMSZp^CmXxQlfRsjt1cXQXQ&dPoJnK}nrlXK29I+;D4QMKwz*)Z272wYs?_aOLX7 zC+n|Yyx3b_MJn_ne*IEWUR}MYTNk|AGk&i>wu;+z{?^9Sm9>eBE4a>HU!T75^z^mF zh4=<6ALYQ6JDV5do6|RvGjq=`%|E|9zljT9Ub;oTJ~Ov@_3qZp{EPY3_xGNDnt%Lm zZt3@M|Ek<@p`gx16Q2dQ5c5QcK0k~cSM{6h^kVw2svaQ{3+D7iwTBA%M=SWFRg7Tz$RMAG zC(keDVi_DVSUhIsaWE@~E&#qPFBc+Sh~yEKwb!U`&dZ`?mW1-FtQiHgta5FBjZdg= znV7!XIXoNee{ghq>FkBa7q4%ey|@;eTpAx=8jr19yz=bW@s-~Gc(6BqaN_Bq$>*H| zce@U+grf_g=t}SLH(9?o}kHm$7Od$bzg zc)GZ{w^JbJJ9=>4f{Td?^Pm)1^Sc|5!D z3K8Md<&6^;Vd`7w;~OyYso5tm{wsH0;4I88yuNnl*9-B@3-OmTw|_lz_4(PGZvjE5 zEXPEKDTU=Wo46>^oMI_Q6avpr|4&u{|IYr?c@gqka_lAF0{{O@jtvI~NpDHM6;HAt z7Fs|eqR0gDvQ;G*@PX=Afi|-k#jFNG+&CcQ6O#OsCcLQtbAj^=QdX+3L=tgP1mVa4 zY{zqK^MOfc7x61;#^Pe4B!^VCM|%a`D1?Ipf}`aOUrr;D+1OFk;3%wV&8_t916i)z z53&tF%Z!phepRc^J*#zGE~gCASv?K1qm}&OY-&ff# z@5JMtiMx^UC6ud!vBwv#ZAGUZ4Ig`WWGXRwbR~N9e&3;mk;$ct@n<)$J)ezlo;knP z(mx;QizD$qIrrwor9|uDh4v#WZ3mY^owx1X_nHo^1P2zHhL`$Iu0>C+^qgJkKbtsm zY9Z3M)Z8`K);`F$0ibk2k!y=LFONBx*813^tR3RcHN4!UvFui4L4nDYQE_S z-?I2;J>j@BH0KCicLZ<3`0dSci~okN?VfjF1%N+1HheW)G&;p?~ZkOYU{B_ zB!U`ChDKL_CPhwew4F#I`|6ln!?(hdWWEIGDHvO8n_BNYz0p3o**ft&a^_Xbo=xv+=$O!xj202NIgZIUxvxyLo7*4=g{4*u_v*!Nn_KL**n%C3?7+! zeDrK`^wiqqmBi_rn`BkH>tG~fD;dtd4FKAAhv-Yn_~E<0e?J_EjhFRumUXK@k_QjGmFG*u_gux zPj;>?51p@ETSh*TA}atTY!JplK!-G=Sdsybda-q1z7>LvD3|u-sxnHQIkkbD@(_N3 zoEmpYT`O#LU!DQiFQCa4IdUu9`DM0@VsNU>0%EYNp(VdsUrBAJiMz#yL8a-0Ido0$ zo6)(ZO#btPBPO?>0`M+1OwmM#MV8ZI#ROG!h$bC%gs;0hZ^PyK`WH;y^S-{t(9nH{ zZ^q(0>vUfm6C@7{1wYcs_Osp?P&|dTsd3>Y=G8&C#W{L$J5y){zGz zXVxZWHbzc^lk*7aN6)e4@W?{Af1&-*y|#`ykMBy);KJzP#Yp?jZX`TyH`{-*;Q(w=b zeehv;c(vzvV&K%qi7PK+mtTd)AN5Qn+b5p3PvAH_?>g}WxX_8~FUBstIC}Z{`Nem0 zD?69xpU0QBFWq`Od}^}~hjHrh!HGw`<4d5`g`y9d#vh_a0J7Q{OSVoX1~0ydoO{-D z;pO1$R{zY)p=+;tFKr%){}!A7FgpM4@U5Nhb8p(FwxaQO;X_M=>w?;UnX4PAp$AbW zW6%|ZMzAItn8H9?$HC~(t>p(z0XK+1w-)CUPgX9@oPF^;Ieui=WY!%V?mIYkD7%1y z>3EX+ie7)Q95^-9{3QKNG3_`~Q#0#W$L*(XS! zy2n;pdhZdI6LjT;2Gv*rYottgR%E^a$fcwhn2#1e92qs*5F{M}#$SL{W!fT=t4v^3 zA22S=XaK;ht#7Jh4P=yu_Z9mx%3BVw2Xnbod3A#rX4#*w!?iEpmQOoUD>{}}-?gvA zu@4luYQNNU&K$nuAp1KD-pCw?yYBFu1N2?*jL~(??zw7lT(Y^ZIDNDJaNHBR9t>UX zh|Gpsfd0+5blhogyAg@p?C8AW@lSib*P5DU&CUz>A$s4eB@`zuJaij~2N|7@B<=mn z=z#(fv9#WFx8Cq}-8M8|4Ytqe4JT}tX%{L}%V~$@oZWoZZJl;mroE0CmvzSPy6SRW z*4bwHhRcLA4#tkiG0V4JQP{8AeAlert19~y!g5(^y{vKJ#mhS9jIZfd@9w0_h_2!n@NaR*)_*zHnb)16smTS$Snf{)+Ui|Ih>;Aw@i~nXg6nDF4 ztZi}JPv_ur=wPCCViSxA-}r|A$T~=IJtsFWFTB0A@?rko_U)Cu8!NvdRL!pJjZAMH zI*Xzp5xerN@A%5ir8f&}J2w`$ugq^Fmx!-^ICkmr?7a`M3mc)amC^Ib+4~=HU=N>L zj*PFijV>LzyoD49g|H*~&^eL-O~^m?%sZa6A6ajndf|<&H=WpYj;(uR&%#r$hUR{o zT-k};+n!u_-E-q**X0-eH@1)7dp&slWi-A$vGBXvI1VA?oP1MZnYxD7lwaW3x1YN& zgO!o5-j~72$!4QRvu_^@n#F2suLs1dfVj|3jfDm3#tScsbgq5_JyxC{%FF~L-*miy2Fvsp7JDGh zlT}EPkikQPdxs(%Bn@HzW#x{-%I+HeX$f&or<-v&W?NboV6lK@;hTS{k@LsbAZn#^{!^~`f zE0)34P;4W3bQSG;v@Bi65`klh@YHh`IQBHwV9(4SS9r)!ym6^;EG(`lt?+UU8gcV5?-FZtTyYTreF%VmFCJlwa` ze&|8u@PnRcqVw<~Og%g@kE>-A{LK5_gZEsKd3*a@Q^$RO7zV$HD-gOe*nbOW;o$K7 zmZq!Cp(~M&_y{6S_-aS%+s@D}d>sCRk3ysCZO1nKhd08b z8<7(mL+7_HF73?Re|vj%_rl!k%Xi@qnBPEI+++g`?Tx$W7qH_ zM|7oqay`($Xzy8ak3I%`>YrHeJOjLR10O-l$?ed@>)?r3{>hiV<1g?54c~Zsa^b`A zrR|~XuZ}Lf8@sbTI=_AB=2q{;t?rqvz7xr|(T8l^_yPXN0sfKV#?H*fzO1@%aeZq} zMIf`pR9I`QqIOpC4zm@^F*?f` zU3pc3oKgd(3v)|!WL{nB&Mmg)R(NyEeFep?qCyuQk!j$+$YmbS0+??R%_?ow#a;EWFC)^vs;~KH-p{xU7^K5#}d*` zzz(LCMR)s>v*SJvg1`L%4gyLuV`$#id>z3Qr$X#1x-Z6O3eQ3#Z zXvH<2K#$Th_|Ou$?H|0?I`P=mzhH^nK{wMryy85vgbdShc)98D%Ku-&mG!obX4$v- z2ZP2u75ZV`x?gJ0jhRLdrUun$RCl2^RHu?4@hS^ixr&sih2EWbNn%^pMp6{DP;z8j zv0W)=sW^^gSqo)Jv}G&qt}bBy${ePE4+KTg5=EYK?z#87pT$INI%BYjGb;AZ7q3!V zrvbUm#7}+kQ#Sq7SI)N?2Dd! z@?HF|6R}&POCuv2!u)G6np=7^ztIdJhmF+{JJ`h+zNMFcbCkZG$bK`K`{IsrcT}FR zXTQEDef~}KkAK-1natiAl`(FQ$Tmc-V8uZf34U+k@$uaH@$}<&_;dgAYi8-lEglfl zNA{rA-e7}hg!XCwF5FaDw31x(Inb2O(c6B134^6_KDKCO!NH=>r%#7=IbR7|KVM#$ zJ|fs%2U`g|KBXTXqxb{M4Xf{2JzdGvi$7jTm|XbYEW8?|ca3L1-s~UW6n`)iyXPCF zE_!BiKXj|zpI+B*wqFm*uY0*eLn<5K#X|aQRkJ9tk?%b!oJR|1aBB&@h1m-2nW>hH z4dpFT>2S0bO4Q+rQarY|2&fU%2oQ~E$R1P zEd1{C2Os^$%E3SWB>b!2dOrHkz;FMw@Na*N{OiX7i2twuApYvVAN9npXN>E@^R_Wm@MgAKSnRdx}U8xg0UFFkyTDs*t|IFRfJQNtm=42j2{ z$SZRCm%2Q#{wGwNy(WWH)-`TqEk!EpkJ%SNp8T9jyb*N@4~6FO1Ht!6fk?R?4WE!d`H!mW8iJH-0S z-+l4qmaXvdC&9mtYIn%Jd+ZP6!VxG8=Z_o#2E#4x-z5w8z2*B(9pj6;(wI#holJju zH-77W>a&sDXWz!hU4<#4gh2=ggul#&D+nb%m@e)qAv|*n6<45Qlqwb5IVF*&ET>W`LK3`QkJmweHUKF1jN7a8G9Gknx7we_-t;#S~=pCK? zAKFk0FD};g)A@`sqZoX&w!Yn6&^n7+d%e(HlB%&nb9(J)EmeK`!(jjQb@^!cvi@@- zUxWV-ufO&^ez~fl*Y3ygR&_-;h^-T9t4gG*pdk@GUERBSy#GFWG>rc6kH`DN^~0;# zl9f#?m0)`=A^yCKM_hFS_6x7>dUu`v{X0&5l+bT^3N~T?o>Lof=0>@_uSZi;OmW;< znm~fa!s{Mepg4!OXimqUVo_TIV42|sHVaucbLmRj2@b7rU7j|yvHh~YUOmT-O zN{=ylJ6#!P%C^AwSSAdQ;bbZ!o}K@l+6HUBa^%K5+wjk~?Ink&faijJ-oNi5a)kHL z&6T-Og%88b9H1^Cij~Of3od8OMSH%bcT8#!(T22i>DR9O>G!1EBjR13b}48Bzcvs{ z*FnwjDJGjbr=;_6et>Q(PH6=aEle-^)Fz#(3rY*Oj!B+*6BY#!R)kbNAU9{#j;OW+ ziML_ZB0?zB3aL<%Q+}%&meA93>X*+rsS5n_QXSKjA-TpUYgF_Nm#Bdw=!c{>Ptg*C zz=3mwSlv1vJ$7xp!Q?(8z2)ZLAmO!pb%N0O)fcYWm&DR@67#AEMl*;0mA4c8{usA| zwj50F+WZHTOxa17zr8Pgekb|)effXBj{fCuiU0UA{@FL1cWk=NTbyv~z&!9z31v>K zIN7p&LV>dyxf>lDjgOBdT#kanu6W!zY`xAb-nBb5FOdTod8RaeKaPQv1o?>Dr2*tl zm*QuNj5hFHT61H&ySd$qm(3>y zV>Z=%l<6kRS8HkuD+N&e2}L{Pa@DJ%E{mx>#PQT=Ak*ZOGtU-Un;?U2)T1b=?nzXwaGz{Y$vUJDkDE!> z=tLERj8%EL8BDhY)tFbiehFF3sr%s@Y{^8OPq!nfrVww;s@*wsz@{*7-U$~j#nM3B z9{AH8A>S3!=V7hKB-;K=KbXA`au>X2qCW&3vw^G`())hZ>YkPUM$!qTe znQNbN#mWOhy5Ms|E_=;qul>1UP`7qM`5Rj5g|tgX>PED_UpDAulS(vT+Ua-$rV-t? z-b52^=Wy}>e^9jsFpnD&(F|~8rqB&%&Ldg}UG8GW5Yo+n)DR?Vg5IJ)(xL+fpR6NN z;2^tI=i)8A1ndzJ*jNqv4^miMNHsak?5|fRXAUeAK7Ht%d2WXjn|bY+KBC0eZW8+N zj0{=2?dEnV@z6#Vp$u+M(c>*m*wiVvK5oyA+H!Yoiksgf0|!*#8Q4Mbdo;7d3eToI zIld#ty>5Cy`eVJn9A zDX)e>VoKee!ynFy2P{_>BM07mRkrM-c5s!H^XXQ)cQ=UWnZf? zQV*g>#@h46AtsUWpyx{_z!^-Nv}EuZ1Fd(QYyfZW=t(G5i^#RLa{qDJL@-*=(1v&F zSK3zekJi}eDTB#~=$SiOv%CSCy|-!@?pV#a{&os3H&KUS@WyJc=sQ>ipWJ|`{?gqV z%yrQpMM+Ig?F94ZGg>bs17>G_waKR&ezoP3+UW7{%jZGK2&%nEx);$*3wY_iAYF1& z*RS-kFKUD7>{VDF1eGof35zus`M#hJq1C*0!zhgfICWlU$Z!AWfvZHE&2Yzp|j%J7!?Vw|I=~8U?$5d4)}Kk-?k|1hJ`Y+SJI_I(tWg!!7@df+=kV$ zO)9`PGF--+3-M*By?Y|%aiAonknSu;=|QeECsueGB+A14yB%^kQdz`A*j9^wR9lve zhn53xDNhHBQvGqh{a79c?_$_Ggpz*{$j$tpmHVhR%oW3+>?VYpNOB z?rA@m+V|bWPFva=0RKywGv)gm-;*l2Ru6orprVNskvbIXZs^06j5(*6|1_)P;(Hl$t< zf#)a+0jt2R$DT&j5km;>V1AZiizvclhb4tWLd+vq0XYq74*?E%d!|FejJ2P=(S?#W6&NuR{HMNPJpNEP?gjuOE zE4OCQ&l#_K7fy&3OzN2{=`I@QK#k=L{;K{kU5`E;tmb<&$>v(FKO-6FBeKuEb}qi9 z*Xm-*bS+^*twFBVVICr>IvVW&`-jjU)DvKMqIfRnbj-@p9_|e0OYafrQT&NyuW>(p z$*!Q9f_iC1b`>t-5?+GS&ap3KdXb#TBm0m{K^gdv17r2~Z&tl%=-U5R{c@s*Gw{QZb z3_0x|a6zPW&7`kjb=VBpJwOQX=Wl|=_t1ZTei+jK&S?Wa3;)ycr4ibo{05=`emi0i z20|o`&~Pl0fnoxFENmDq9x4qAK>2}x5CLytN6g{+JNTJlrGZ<7A7Y)5w%&rn#5uTo z-~yLwfiKX17)87b3xom@{Ew)0@ZfM9_Q|@RR`(-5%DUlLRPIZ3m{qHVl6~;TJAKGR z4mqqAM@mZ-kby$3flt?@GJZE^8%vFjN{(@9d@MOWF1cJ;xOx=rk-+-da**E*aK!*s zfO{t$lEWrVj>O#)(!^-oZPy_0U;%s%KF}I=g>-55@sxc+a!sWvPl5L8_(m{@c51XI zOE@zK2QHgzIVD10N*l|Xv5;v#%9}v!x^66{n^?~qEuSw*r_1RUsy8UAFl#mV^9A)h zs$V@Sm=O7Cxw?iKtEd4d@18!oO;@m9ejc}OvmS}J#Y9)wY7#3|*HYE7XtmGX;-0xy zPDdjzzNRZ+K`3#$m~A~Nn)r_so|y_O9$_^Z7c)@d;Zl}ZA)fk_UPQlfMzNIaVsZNh zvjC$09)SR!IhZpAFpuXLs$Yq?SlpI`C|UuFLz-@;Fs`FA{rhmMn_PMa45_{w2%| zFbU93PRN9}0A+?br@i@r?w_Ffm4Hzo8DZ~ZmgzR>t?URyYQUh>l#bwUQRS1?3PML&qSrSQs^QUr1s49ytz>t ztZE%Jh4Rtr+b`Fq~MxP^?BKZ=mnsG zusyItYL}Kw=p-3~0q%3D9tJ@Efda6#SkZ&k2Lm!%^-FkmO*YwvF@`;WW&-o5mOvr# z&|!}eL7?+ce!v^}LF_;fnbFNq-pWtKTo2#}Z01Y2nC_fDnAI-;e!N6F37VitJ69Zn zgTOrSkIUoIeO@(#`Ae7<=sZ9R{0liVR2YQwSNPc3?f0|{FLVRjAJE=&>1$522C`sF z{59~!N&x_SfBrp}9fAwt;?2wswnM}YRLLy!1E&G0|6qhH_obc-=`Ma9u8mUw-HQ)I zKmdZ&H|>1ZDSJhR%?t) zNC(D769@!TQ<~eBMmX?{OEjvNj*QP$aE_(MzS|tRpBNigz3!rYOtOIp6AIKDcE~oK z!~ji*DRpu*iMRmRPmCm{urnotX!uwhaZbs2%j3}S)hv+*{@qgw*hhJ@-q82|55dK5 A5dZ)H diff --git a/lib/glut-3.7.6/progs/demos/sunlight/sunlight.c b/lib/glut-3.7.6/progs/demos/sunlight/sunlight.c deleted file mode 100644 index 3804c3ecc..000000000 --- a/lib/glut-3.7.6/progs/demos/sunlight/sunlight.c +++ /dev/null @@ -1,531 +0,0 @@ -/* sunlight.c - * - * To compile: - * cc -o sunlight sunlight.c -lglut -lGLU -lGL -lXmu -lXext -lX11 -lm - * - * Usage: sunlight - * - * Requires: globe.raw - * - * This program demonstrates the sun lighting the earth, displayed - * either as a globe or a flat map. The time of day and day of year - * can be adjusted interactively, and the globe can be viewed from - * any angle. - * - * The lighting is done using OpenGL's lighting. The flat map is - * lighted by using the normals of globe. This is a rather unique - * use of normals, making a flat surface lit as if it were round. - * - * The left mouse adjusts the globe orientation, the time of day, or - * the time of year. The right mouse activates a menu. - * - * Chris Schoeneman - 9/6/98 - * crs23@bigfoot.com - * http://www.bigfoot.com/~crs23/ - * - */ - -#include -#include -#include -#include - -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -/* menu constants */ -#define MENU_SHOW_GLOBE 1 -#define MENU_SHOW_MAP 2 -#define MENU_ADJUST_GLOBE 3 -#define MENU_ADJUST_DAY 4 -#define MENU_ADJUST_TIME 5 -#define MENU_QUIT 6 - -static int mapMode = 0; -static int adjustMode = 0; -static GLdouble aspectRatio = 1.0; -static double timeOfDay = 0.0; -static double timeOfYear = 0.0; - -/* - * sun direction functions - */ - -static const double radPerDeg = M_PI / 180.0; -static const double radPerHour = M_PI / 12.0; -static const double siderealHoursPerHour = 1.002737908; -static const double epoch = 2415020.0; - -static double getGreenwichSideral(double julianDay) -{ - double jdMidnight; - double dayFraction; - double T; /* time (fractions of a century) */ - double greenwichMidnight; - - /* true position requires sidereal time of midnight at prime meridian. - get midnight of given julian day (midnight has decimal of .5). */ - jdMidnight = floor(julianDay); - if (julianDay - jdMidnight >= 0.5) jdMidnight += 0.5; - else jdMidnight -= 0.5; - - T = (jdMidnight - epoch) / 36525.0; - - /* get fraction of a day */ - dayFraction = (julianDay - jdMidnight) * 24.0; - - /* get Greenwich midnight sidereal time (in hours) */ - greenwichMidnight = - fmod((0.00002581 * T + 2400.051262) * T + 6.6460656, 24.0); - - /* return Greenwich sidereal time */ - return radPerHour * (greenwichMidnight + dayFraction * siderealHoursPerHour); -} - -static void getTruePosition(double julianDay, - float latitude, float longitude, - double sx, double sy, double sz, - float pos[3]) -{ - double tx, ty, tz; - double localSidereal; - - /* convert to radians */ - latitude *= radPerDeg; - longitude *= radPerDeg; - - /* get local sidereal time */ - localSidereal = getGreenwichSideral(julianDay) - longitude; - - /* rotate around polar axis (y-axis) by local sidereal time */ - tx = sx * cos(localSidereal) - sz * sin(localSidereal); - ty = sy; - tz = sz * cos(localSidereal) + sx * sin(localSidereal); - - /* rotate by latitude to local position */ - pos[0] = (float)tx; - pos[1] = (float)(ty * cos(latitude) - tz * sin(latitude)); - pos[2] = (float)(tz * cos(latitude) + ty * sin(latitude)); -} - -static void getSunDirection(double julianDay, float latitude, - float longitude, float pos[3]) -{ - double C; - double T; /* time (fractions of a century) */ - double sx, sy, sz; /* sun direction */ - double obliquity; /* earth's tilt */ - double meanAnomaly; - double geometricMeanLongitude; - double trueLongitude; - - T = (julianDay - epoch) / 36525.0; - - obliquity = radPerDeg * - (23.452294 + (-0.0130125 + (-0.00000164 + - 0.000000503 * T) * T) * T); - - meanAnomaly = radPerDeg * (358.47583 + - ((0.0000033 * T + 0.000150) * T + 35999.04975) * T); - - geometricMeanLongitude = radPerDeg * - ((0.0003025 * T + 36000.76892) * T + 279.69668); - - C = radPerDeg * - (sin(meanAnomaly) * (1.919460 - (0.004789 + 0.000014 * T) * T) + - sin(2.0 * meanAnomaly) * (0.020094 - 0.0001 * T) + - sin(3.0 * meanAnomaly) * 0.000293); - - trueLongitude = geometricMeanLongitude + C; - - /* position of sun if earth didn't rotate: */ - sx = sin(trueLongitude) * cos(obliquity); - sy = sin(trueLongitude) * sin(obliquity); - sz = cos(trueLongitude); - - /* get true position */ - getTruePosition(julianDay, latitude, longitude, sx, sy, sz, pos); -} - -/* - * globe/map calculation - */ - -#define LAT_GRID 20 -#define LON_GRID 40 -static GLfloat sphere[LAT_GRID + 1][LON_GRID + 1][3]; -static GLfloat map[LAT_GRID + 1][LON_GRID + 1][2]; -static GLfloat uv[LAT_GRID + 1][LON_GRID + 1][2]; - -static void initSphere(void) -{ - int lat, lon; - - for (lat = 0; lat <= LAT_GRID; lat++) { - const float y = (float)-cos(M_PI * (double)lat / (double)LAT_GRID); - const float r = (float)sin(M_PI * (double)lat / (double)LAT_GRID); - for (lon = 0; lon <= LON_GRID; lon++) { - sphere[lat][lon][0] = r * (float)sin(-M_PI + 2.0 * M_PI * - (double)lon / (double)LON_GRID); - sphere[lat][lon][1] = y; - sphere[lat][lon][2] = r * (float)cos(-M_PI + 2.0 * M_PI * - (double)lon / (double)LON_GRID); - } - } -} - -static void initMap(void) -{ - int lat, lon; - - for (lat = 0; lat <= LAT_GRID; lat++) { - const float y = 1.0f * ((float)lat / (float)LAT_GRID - 0.5f); - for (lon = 0; lon <= LON_GRID; lon++) { - map[lat][lon][0] = 2.0f * ((float)lon / (float)LON_GRID - 0.5f); - map[lat][lon][1] = y; - } - } -} - -static int isPowerOfTwo(int x) -{ - if (x <= 0) return 0; - while ((x & 1) == 0) x >>= 1; - return x == 1; -} - -static void initTexture(const char* filename) -{ - FILE* imageFile; - int lat, lon; - unsigned char buffer[4]; - unsigned char* image; - int dx, dy; - - /* initialize texture coordinates */ - for (lat = 0; lat <= LAT_GRID; lat++) { - const float y = (float)lat / (float)LAT_GRID; - for (lon = 0; lon <= LON_GRID; lon++) { - uv[lat][lon][0] = (float)lon / (float)LON_GRID; - uv[lat][lon][1] = y; - } - } - - /* open image file */ - imageFile = fopen(filename, "rb"); - if (!imageFile) { - fprintf(stderr, "cannot open image file %s for reading\n", filename); - exit(1); - } - - /* read image size */ - fread(buffer, 1, 4, imageFile); - dx = (int)((buffer[0] << 8) | buffer[1]); - dy = (int)((buffer[2] << 8) | buffer[3]); - if (!isPowerOfTwo(dx) || !isPowerOfTwo(dy)) { - fprintf(stderr, "image %s has an illegal size: %dx%d\n", filename, dx, dy); - exit(1); - } - - /* read image */ - image = (unsigned char*)malloc(3 * dx * dy * sizeof(unsigned char)); - fread(image, 3 * dx, dy, imageFile); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexImage2D(GL_TEXTURE_2D, 0, 3, dx, dy, 0, - GL_RGB, GL_UNSIGNED_BYTE, image); - - /* tidy up */ - free(image); - fclose(imageFile); -} - -/* - * misc OpenGL stuff - */ - -static const GLfloat sunColor[] = { 1.0f, 1.0f, 1.0f, 1.0f }; -static GLfloat sunDirection[4] = { 0.0f, 0.0f, 1.0f, 0.0f }; -static const GLfloat surfaceColor[] = { 0.8f, 0.8f, 0.8f, 1.0f }; - -static void initProjection(void) -{ - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - - if (mapMode) { - /* orthographic for map */ - if (aspectRatio < 2.0) - glOrtho(-1.0, 1.0, -1.0 / aspectRatio, 1.0 / aspectRatio, 2.0, 4.0); - else - glOrtho(-0.5 * aspectRatio, 0.5 * aspectRatio, -0.5, 0.5, 2.0, 4.0); - } - - else { - /* prespective for globe */ - gluPerspective(40.0, aspectRatio, 1.0, 5.0); - } - - glMatrixMode(GL_MODELVIEW); -} - -static void initSunlight(void) -{ - getSunDirection(epoch + timeOfDay + 365.0 * timeOfYear, - 0.0f, 0.0f, sunDirection); - - glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, 1); - glLightfv(GL_LIGHT0, GL_DIFFUSE, sunColor); - glLightfv(GL_LIGHT0, GL_POSITION, sunDirection); - glEnable(GL_LIGHT0); - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, surfaceColor); -} - -/* - * glut callbacks - */ - -static GLfloat angle = 0; /* in degrees */ -static GLfloat angle2 = 0; /* in degrees */ -static int moving = 0, startx, starty; - -static void reshapeCB(GLsizei w, GLsizei h) -{ - aspectRatio = (GLdouble)w / (GLdouble)h; - glViewport(0, 0, w, h); - initProjection(); - glutPostRedisplay(); -} - -static void redrawCB(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - - glPushMatrix(); - - /* Perform scene rotations based on user mouse input. */ - if (!mapMode) { - glRotatef(angle2, 1.0f, 0.0f, 0.0f); - glRotatef(angle, 0.0f, 1.0f, 0.0f); - } - - glLightfv(GL_LIGHT0, GL_POSITION, sunDirection); - - if (mapMode) { - /* use the normals for a sphere on a flat surface to get - * the lighting as if we unwrapped a lighted sphere. */ - - int lat, lon; - for (lat = 0; lat < LAT_GRID; lat++) { - glBegin(GL_TRIANGLE_STRIP); - - for (lon = 0; lon <= LON_GRID; lon++) { - glTexCoord2fv(uv[lat + 1][lon]); - glNormal3fv(sphere[lat + 1][lon]); - glVertex2fv(map[lat + 1][lon]); - - glTexCoord2fv(uv[lat][lon]); - glNormal3fv(sphere[lat][lon]); - glVertex2fv(map[lat][lon]); - } - - glEnd(); - } - } - - else { - /* draw a sphere */ - int lat, lon; - for (lat = 0; lat < LAT_GRID; lat++) { - glBegin(GL_TRIANGLE_STRIP); - - for (lon = 0; lon <= LON_GRID; lon++) { - glTexCoord2fv(uv[lat + 1][lon]); - glNormal3fv(sphere[lat + 1][lon]); - glVertex3fv(sphere[lat + 1][lon]); - - glTexCoord2fv(uv[lat][lon]); - glNormal3fv(sphere[lat][lon]); - glVertex3fv(sphere[lat][lon]); - } - - glEnd(); - } - } - - glPopMatrix(); - - glutSwapBuffers(); -} - -static void mouseCB(int button, int state, int x, int y) -{ - if (button == GLUT_LEFT_BUTTON) { - if (state == GLUT_DOWN) { - moving = 1; - startx = x; - starty = y; - } - else if (state == GLUT_UP) { - moving = 0; - } - } -} - -static void motionCB(int x, int y) -{ - if (moving) { - switch (adjustMode) { - case 0: - /* move globe */ - if (!mapMode) { - angle = angle + (x - startx); - angle2 = angle2 + (y - starty); - glutPostRedisplay(); - } - break; - - case 1: - /* change day of year */ - timeOfYear = timeOfYear + (y - starty) / 365.0; - while (timeOfYear < 0) timeOfYear += 1.0; - while (timeOfYear >= 1.0) timeOfYear -= 1.0; - getSunDirection(epoch + timeOfDay + 365.0 * timeOfYear, - 0.0f, 0.0f, sunDirection); - glutPostRedisplay(); - break; - - case 2: - /* change time of day (by 4 minute increments (24 hrs / 360)) */ - timeOfDay = timeOfDay + (y - starty) / 360.0; - while (timeOfDay < 0) timeOfDay += 1.0; - while (timeOfDay >= 1.0) timeOfDay -= 1.0; - getSunDirection(epoch + timeOfDay + 365.0 * timeOfYear, - 0.0f, 0.0f, sunDirection); - glutPostRedisplay(); - break; - } - - startx = x; - starty = y; - } -} - -static void keyCB(unsigned char c, int x, int y) -{ - if (c == 27) { - exit(0); - } - glutPostRedisplay(); -} - - -/* - * menu handling - */ - -static void handleMenu(int value) -{ - switch (value) { - default: - break; - - case MENU_SHOW_GLOBE: - mapMode = 0; - initProjection(); - glutPostRedisplay(); - glutChangeToMenuEntry(2, "Show Globe *", MENU_SHOW_GLOBE); - glutChangeToMenuEntry(3, "Show Map", MENU_SHOW_MAP); - break; - - case MENU_SHOW_MAP: - mapMode = 1; - initProjection(); - glutPostRedisplay(); - glutChangeToMenuEntry(2, "Show Globe", MENU_SHOW_GLOBE); - glutChangeToMenuEntry(3, "Show Map *", MENU_SHOW_MAP); - break; - - case MENU_ADJUST_GLOBE: - adjustMode = 0; - glutChangeToMenuEntry(4, "Adjust Globe *", MENU_ADJUST_GLOBE); - glutChangeToMenuEntry(5, "Adjust Day", MENU_ADJUST_DAY); - glutChangeToMenuEntry(6, "Adjust Time", MENU_ADJUST_TIME); - break; - - case MENU_ADJUST_DAY: - adjustMode = 1; - glutChangeToMenuEntry(4, "Adjust Globe", MENU_ADJUST_GLOBE); - glutChangeToMenuEntry(5, "Adjust Day *", MENU_ADJUST_DAY); - glutChangeToMenuEntry(6, "Adjust Time", MENU_ADJUST_TIME); - break; - - case MENU_ADJUST_TIME: - adjustMode = 2; - glutChangeToMenuEntry(4, "Adjust Globe", MENU_ADJUST_GLOBE); - glutChangeToMenuEntry(5, "Adjust Day", MENU_ADJUST_DAY); - glutChangeToMenuEntry(6, "Adjust Time *", MENU_ADJUST_TIME); - break; - - case MENU_QUIT: - exit(0); - } -} - -/* - * main - */ - -int main(int argc, char** argv) -{ - /* - * initialize GLUT and open a window - */ - glutInit(&argc, argv); - glutInitWindowSize(512, 512); - glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); - glutCreateWindow("Sunlight"); - glutDisplayFunc(redrawCB); - glutReshapeFunc(reshapeCB); - glutMouseFunc(mouseCB); - glutMotionFunc(motionCB); - glutKeyboardFunc(keyCB); - - /* - * make the menu - */ - glutCreateMenu(handleMenu); - glutAddMenuEntry("SUNLIGHT", 0); - glutAddMenuEntry("Show Globe *", MENU_SHOW_GLOBE); - glutAddMenuEntry("Show Map", MENU_SHOW_MAP); - glutAddMenuEntry("Adjust Globe *", MENU_ADJUST_GLOBE); - glutAddMenuEntry("Adjust Day", MENU_ADJUST_DAY); - glutAddMenuEntry("Adjust Time", MENU_ADJUST_TIME); - glutAddMenuEntry("Quit", MENU_QUIT); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - /* - * initialize GL - */ - initProjection(); - gluLookAt(0.0, 0.0, 3.0, - 0.0, 0.0, 0.0, - 0.0, 1.0, 0.0); - initSunlight(); - glEnable(GL_LIGHTING); - glEnable(GL_CULL_FACE); - glEnable(GL_TEXTURE_2D); - - /* - * initialize data structures - */ - initSphere(); - initMap(); - initTexture("globe.raw"); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/demos/sunlight/sunlight.dsp b/lib/glut-3.7.6/progs/demos/sunlight/sunlight.dsp deleted file mode 100644 index 1c247ebc0..000000000 --- a/lib/glut-3.7.6/progs/demos/sunlight/sunlight.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="sunlight" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=sunlight - 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 "sunlight.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 "sunlight.mak" CFG="sunlight - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "sunlight - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "sunlight - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "sunlight - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "sunlight - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "sunlight - Win32 Release" -# Name "sunlight - Win32 Debug" -# Begin Source File - -SOURCE=.\sunlight.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/demos/sysview/README b/lib/glut-3.7.6/progs/demos/sysview/README deleted file mode 100644 index 9e39faa59..000000000 --- a/lib/glut-3.7.6/progs/demos/sysview/README +++ /dev/null @@ -1,27 +0,0 @@ - -This is a nice 3D system monitor written with GLUT. The operating -system dependent code for querying system statistics is only for IRIX, -but maybe someone could adapt the code to work on other operating -systems. - -Be warned that on a multiprocessor SGI systems, some of the -measurements go "off the chart". The program was written on a single -processor machine so the top of the chart is 100% of one processor. - -- Mark - -Javier writes: -> I am sending attached a very simple program that uses OpenGL and GLUT. -> As you will see it resembles a little bit the gr_osview SGI application. -> I hope you find it useful to be included as a contribution to GLUT -> distribution. -> -> Keep on working with GLUT, it is a great starting point for OpenGL -> users. -> -> Greetings from Spain! -> -> -- -> Javier Velasco -> fjvelasco@sfe.indra.es -> fjvelasco@sinix.net diff --git a/lib/glut-3.7.6/progs/demos/sysview/sysview.c b/lib/glut-3.7.6/progs/demos/sysview/sysview.c deleted file mode 100644 index 67df7f357..000000000 --- a/lib/glut-3.7.6/progs/demos/sysview/sysview.c +++ /dev/null @@ -1,442 +0,0 @@ - -/* - * Systems statistics viewing application - * (C) Javier Velasco '97 (almost '98) - * fjvelasco@sinix.net - * - * This application was developed on an INDIGO2 Extreme and makes use of - * a SGI system call (sginap) that sleeps the process for a given number of - * clock ticks. For other UNIX systems, this call should be substituted for - * another proper call. - * The default number of ticks between samples is 20. This can be changed - * through the mouse right button menu. - * - */ -#include -#include -#include -#include -#include -#include -#include -#include - -/* GL includes */ -#include -#include -#include - -#include -#include - - -/* - * Macros - */ -#define GRID 0x22 -#define ZGRID 0x23 -#define XGRID 0x24 -#define YGRID 0x25 - -float lastx=0; /* mouse track */ -float lasty=0; - -void *font1 = GLUT_BITMAP_9_BY_15; /* used fonts */ -void *font2 = GLUT_BITMAP_8_BY_13; - -long nPeriod=20; /* default sampling rate in ticks */ -GLsizei nWidth, nHeight; /* current window size */ -GLboolean bMotion=False; - -struct sysinfo SysInfo, LastSysInfo; /* system information */ - -/* - * Mouse motion track - */ -void MouseMove(int x, int y) -{ - if(bMotion) - { - lastx = x; - lasty = y; - glutPostRedisplay(); - } -} - -/* - * 3D Perspective projection setup - */ -void Make3DLook(void) -{ - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(45.0, 4.0/3.0, 0.0, 500.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -/* - * 2D Orthographic projections setup - */ -void Make2DLook(void) -{ - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluOrtho2D(0, nWidth, nHeight, 0); - glMatrixMode(GL_MODELVIEW); -} - -/* - * Toggle line antialias - */ -void ToggleAAlias(void) -{ - if(glIsEnabled(GL_LINE_SMOOTH)) - { - glDisable(GL_LINE_SMOOTH); - glDisable(GL_BLEND); - } - else - { - glEnable(GL_LINE_SMOOTH); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glHint(GL_LINE_SMOOTH_HINT, GL_DONT_CARE); - } -} - - -/* - * Draw a string - */ -void glPuts(GLint x, GLint y, char *string, void *font) -{ - int len, i; - - glRasterPos2i(x, y); - len = (int) strlen(string); - for (i = 0; i < len; i++) { - glutBitmapCharacter(font, string[i]); - } -} - -/* - * Draw the 3d grid - */ -void DrawGrid(void) -{ - glCallList(GRID); -} - -/* - * Display the legend - */ -void Legend(void) -{ - glPuts(5, 40, "User", font2); - glPushMatrix(); - glPushAttrib(GL_CURRENT_BIT); - glTranslatef(10.0, 50.0, 0.0); - glColor3f(0.0, 0.0, 1.0); - glRecti(0, 0, 20, 20); - glPopAttrib(); - glPopMatrix(); - - glPuts(5, 90, "Kernel", font2); - glPushMatrix(); - glPushAttrib(GL_CURRENT_BIT); - glTranslatef(10.0, 100.0, 0.0); - glColor3f(1.0, 0.0, 0.0); - glRecti(0, 0, 20, 20); - glPopAttrib(); - glPopMatrix(); - - glPuts(5, 140, "Intr", font2); - glPushMatrix(); - glPushAttrib(GL_CURRENT_BIT); - glTranslatef(10.0, 150.0, 0.0); - glColor3f(1.0, 1.0, 0.0); - glRecti(0, 0, 20, 20); - glPopAttrib(); - glPopMatrix(); - - glPuts(5, 190, "Idle", font2); - glPushMatrix(); - glPushAttrib(GL_CURRENT_BIT); - glTranslatef(10.0, 200.0, 0.0); - glColor3f(0.0, 1.0, 0.0); - glRecti(0, 0, 20, 20); - glPopAttrib(); - glPopMatrix(); - - glPuts(5, 240, "Wait", font2); - glPushMatrix(); - glPushAttrib(GL_CURRENT_BIT); - glTranslatef(10.0, 250.0, 0.0); - glColor3f(0.0, 1.0, 1.0); - glRecti(0, 0, 20, 20); - glPopAttrib(); - glPopMatrix(); - - glPuts(nWidth-30, nHeight-30, "0", font1); - glPuts(nWidth-45, 45, "100", font1); -} - - - -/* - * Construct the grid display list - */ -void MakeGrid(void) -{ - int i; - - /* let's divide the grid in three pieces */ - glNewList(ZGRID, GL_COMPILE_AND_EXECUTE); - glBegin(GL_LINES); - for(i=0;i<=30;i+=3) - { - glVertex2d(i, 0); - glVertex2d(i, 30); - glVertex2d(0, i); - glVertex2d(30, i); - } - glEnd(); - glEndList(); - - - glNewList(XGRID, GL_COMPILE_AND_EXECUTE); - glPushMatrix(); - glRotatef(90.0, 1.0, 0.0, 0.0); - glBegin(GL_LINES); - for(i=0;i<=6;i+=3) - { - glVertex2d(0, i); - glVertex2d(30, i); - } - for(i=0;i<=30;i+=3) - { - glVertex2d(i, 0); - glVertex2d(i, 6); - } - glEnd(); - glPopMatrix(); - glEndList(); - - glNewList(YGRID, GL_COMPILE_AND_EXECUTE); - glPushMatrix(); - glRotatef(-90.0, 0.0, 1.0, 0.0); - glBegin(GL_LINES); - for(i=0;i<=30;i+=3) - { - glVertex2d(0, i); - glVertex2d(6, i); - } - for(i=0;i<=6;i+=3) - { - glVertex2d(i, 0); - glVertex2d(i, 30); - } - glEnd(); - glPopMatrix(); - glEndList(); - - /* now call them all */ - glNewList(GRID, GL_COMPILE_AND_EXECUTE); - glLineWidth(2.0); - glColor3f(0.7, 0.7, 0.7); - glCallList(ZGRID); - glCallList(XGRID); - glCallList(YGRID); - glLineWidth(1.0); - glEndList(); -} - -/* - * System statistics collection routine - */ -void ComputeStatistics(void) -{ - memcpy(&LastSysInfo, &SysInfo, sizeof(SysInfo)); - sysmp(MP_SAGET, MPSA_SINFO, &SysInfo, sizeof(SysInfo)); - sginap(nPeriod); - glutPostRedisplay(); -} - -/* - * Draw a coloured cube for each one of the monitored parameters - */ -void Draw3DStatistics(void) -{ - GLdouble fSize; - - glPushMatrix(); - glTranslatef(0.0, 0.0, 1.5); - /* Time in user mode */ - glPushMatrix(); - fSize = SysInfo.cpu[CPU_USER] - LastSysInfo.cpu[CPU_USER] ; - fSize = fSize*30/nPeriod; - glTranslatef(3.0, fSize/2, 0.0); - glScalef(6.0, fSize, 3.0); - glColor3f(0.0, 0.0, 1.0); - glutSolidCube(1.0); - glColor3f(0.0, 0.0, 0.0); - glutWireCube(1.0); - glPopMatrix(); - - /* Time in kernel mode */ - glPushMatrix(); - fSize = SysInfo.cpu[CPU_KERNEL] - LastSysInfo.cpu[CPU_KERNEL] ; - fSize = fSize*30/nPeriod; - glTranslatef(9.0, fSize/2, 0.0); - glScalef(6.0, fSize, 3.0); - glColor3f(1.0, 0.0, 0.0); - glutSolidCube(1.0); - glColor3f(0.0, 0.0, 0.0); - glutWireCube(1.0); - glPopMatrix(); - - /* Time in interrupt mode */ - glPushMatrix(); - fSize = SysInfo.cpu[CPU_INTR] - LastSysInfo.cpu[CPU_INTR] ; - fSize = fSize*30/nPeriod; - glTranslatef(15.0, fSize/2, 0.0); - glScalef(6.0, fSize, 3.0); - glColor3f(1.0, 1.0, 0.0); - glutSolidCube(1.0); - glColor3f(0.0, 0.0, 0.0); - glutWireCube(1.0); - glPopMatrix(); - - /* Time in idle */ - glPushMatrix(); - fSize = SysInfo.cpu[CPU_IDLE] - LastSysInfo.cpu[CPU_IDLE] ; - fSize = fSize*30/nPeriod; - glTranslatef(21.0, fSize/2, 0.0); - glScalef(6.0, fSize, 3.0); - glColor3f(0.0, 1.0, 0.0); - glutSolidCube(1.0); - glColor3f(0.0, 0.0, 0.0); - glutWireCube(1.0); - glPopMatrix(); - - /* Time in wait mode */ - glPushMatrix(); - fSize = SysInfo.cpu[CPU_WAIT] - LastSysInfo.cpu[CPU_WAIT] ; - fSize = fSize*30/nPeriod; - glTranslatef(27.0, fSize/2, 0.0); - glScalef(6.0, fSize, 3.0); - glColor3f(0.0, 1.0, 1.0); - glutSolidCube(1.0); - glColor3f(0.0, 0.0, 0.0); - glutWireCube(1.0); - glPopMatrix(); - - glPopMatrix(); -} - - -/* - * Resize routine - */ -void Resize3DWindow(int newWidth, int newHeight) -{ - glViewport(0, 0, (GLint)newWidth, (GLint)newHeight); - nWidth = newWidth; - nHeight = newHeight; - Make3DLook(); - glClear(GL_COLOR_BUFFER_BIT); -} - - -/* - * Display routine - */ -void Doit3D(void) -{ - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - Make2DLook(); - glColor3f(1.0, 1.0, 0.0); - glPuts(15, 15, "CPU Activity", font1); - Legend(); - Make3DLook(); - glPushMatrix(); - glTranslatef(-15.0, -15.0, -50.0); - glRotatef (lastx, 0.0, 1.0, 0.0); - glRotatef (lasty, 1.0, 0.0, 0.0); - DrawGrid(); - Draw3DStatistics(); - glFlush(); - glPopMatrix(); - glutSwapBuffers(); -} - -/* - * Menus routines - */ -void SelectSampleRate(int pick) -{ - nPeriod = pick; -} - -void MainMenu(int pick) -{ - switch(pick) - { - case 0: - bMotion = !bMotion; - break; - case 1: - ToggleAAlias(); - break; - case 2: - exit(0); - break; - } -} - -/* - * Menu creation - */ -void SetUpMenu(void) -{ - int SampleMenu; - - SampleMenu = glutCreateMenu(SelectSampleRate); - glutAddMenuEntry("1", 1); - glutAddMenuEntry("5", 5); - glutAddMenuEntry("10", 10); - glutAddMenuEntry("20", 20); - glutCreateMenu(MainMenu); - glutAddMenuEntry("Mouse Motion", 0); - glutAddMenuEntry("Line antialias", 1); - glutAddSubMenu("Sample rate", SampleMenu); - glutAddMenuEntry("Quit", 2); - glutAttachMenu(GLUT_RIGHT_BUTTON); - -} - -/* - * MAIN STUFF - */ -int main(int argc, char **argv) -{ - GLenum type; - - type = GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH; - glutInit(&argc, argv); - glutInitDisplayMode(type); - glutCreateWindow(argv[0]); - SetUpMenu(); - - MakeGrid(); - - glutReshapeFunc(Resize3DWindow); - glutDisplayFunc(Doit3D); - glutMotionFunc(MouseMove); - glutIdleFunc(ComputeStatistics); - glutMainLoop(); - return(0); -} - diff --git a/lib/glut-3.7.6/progs/demos/sysview/sysview.dsp b/lib/glut-3.7.6/progs/demos/sysview/sysview.dsp deleted file mode 100644 index 82c4febec..000000000 --- a/lib/glut-3.7.6/progs/demos/sysview/sysview.dsp +++ /dev/null @@ -1,89 +0,0 @@ -# Microsoft Developer Studio Project File - Name="sysview" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=sysview - 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 "sysview.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 "sysview.mak" CFG="sysview - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "sysview - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "sysview - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "sysview - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "sysview - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "sysview - Win32 Release" -# Name "sysview - Win32 Debug" -# Begin Source File - -SOURCE=.\sysview.c -# PROP Exclude_From_Build 1 -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/demos/underwater/Imakefile b/lib/glut-3.7.6/progs/demos/underwater/Imakefile deleted file mode 100644 index 08002c3ca..000000000 --- a/lib/glut-3.7.6/progs/demos/underwater/Imakefile +++ /dev/null @@ -1,16 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1997. */ - -#include "../../../Glut.cf" - -TARGETS = underwater - -SRCS = underwater.c texload.c dino.c - -OBJS = underwater.o texload.o dino.o - -AllTarget($(TARGETS)) - -NormalGlutProgramTarget(underwater,$(OBJS)) - -DependTarget() diff --git a/lib/glut-3.7.6/progs/demos/underwater/caust00.bw b/lib/glut-3.7.6/progs/demos/underwater/caust00.bw deleted file mode 100644 index ebd44bc2c475e3e9c0fc812cc9672eebfa9381b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5337 zcmeHKNl;tqdcC*7d3i}sNq1Ei$s((4vdbcyEYdH@s=NK#J-luYZ5s?`l#oC|^Q}rUW`PDk5+EbyLCmvljKP5IwoTjE*ccCBM(N6(Pky25Radf0c9H7TozFjg-*?WB z-a%31J>)a^qX>e04)_ItRMGyvs*rj)cly8i%ZIjdzkmHx(vQ(0$seyjz5OvdNdFj3 zasKrA|DXR~&Oknp=l?rE37AEY6CVP;0oVYy5#-PQ7H|RJ13W~K-~0oh0uTqhM36uK zCjbl32goAGZ$ATIfN2Ezi{Api02ly^2=bSI12_lp1Ayy&;Cdgp-fso$Ajk**3;?bV zfa`;|2=d{-0ia(WLcczOetiV}`p61cMUapG4p0CH0X7iiul^B010(?l2=dqe0uTen z5ag5J0H7bA=m0km?2E=g|JUXP^Do_3`uE{Tz<3bH`uv z{O-Sb=lK0&{^RT8<7dC(JidQ?{B@hT`~MTy@i)iEYnn);#J zYYQXESh&IGH0#t#nN)`1TAk5k&=Tr=m0e?tOubH%uf_u!u}CB(Y`&125TP|_ITETY zucR`i*5u08*2+jr$ZIoc6;dIW#bWbBa$IY)7zjKcv#U(OiPxFEt6n*qR#{17i3o?& zgrOXihNNm}bf!=nzPg>>e>9b-cj$2`k5x^pqEf3_e5uA@wV8Cd0>jj{mRtMj+aavF zwD97^!poFenckp5r6>nU@i{yZ?i=1nlbM~RPQMu_nDmO$(#s_kRSbbbZ*#jGR)bz| z4UcVPwt98UvI}QU|8V-;h0PLnU9dSCY48WzrXKAdt_G#lOJ~0O=G3Wge>i`+T7aQAszh)?XY#e*J|Oe6#Iv!m zMFkWU#f5nnLj@(2T8Y7bWpHAAczEv4))BcqY3G%l|NiS!Cr^I$^&fsLr3;`NY6Ler zL*1);nM__bNj{s1IdyUYgHn2_;Nr!C5^Al)8XH-D^z7NzZaS0Az8*HSOMm>ssjt5L z^5j?F{7_I{3)4X$3TNZMy}c8p|Lwurcw0lAUL|BuN-h-^7M0VvN>A^~t2B&}B=fT7 z*Q0iR#l`PW{r-#3KR-J#uOQ*m6DmRaTM+yiF}(vw%_ntNP8i z-=8g}tI?2cjkxFKNeNVTG7X78u4Wh)@M6oO(DOXfTbuaEu~a*WLm4gu`RXm6lT(! zc`|#&YmjlOsT5i*WQRk;rjig@PNYs0sPOry|3mFxq#g|LUDK%V) z#v1Ir3CWoykM55&+Z1eC`Q@UbQW_7pI&{)nI-S8c_ivK#Wsp>#-$W34v%_K5NLbX; z;-aGB(h3?=sIfknJKn-@HRKuPo|rV5=KSQg>z@mUMQxCjs9??>B{uuBj88x zp`A!d%w=(fn9lBUIt(gdEsX*}RZgLCdPAsnP zLd5PaqjA)Ncvv;nwOl!2_xb}a8zC36Yij7U8n(n3U);;j`pC@YT&rElt}20{oI77o z%2d{mJ$gf?Ge^&+f~XGC-9x8V)$rtcXRx`sDN^sTYL#+{SWeWnF7813`pER-iDsKh zz^J%<>B5DAq6(I(d3hhw=FMuSQ-cbj>cp$4v|5469Ec^mdV70%I@=oS1ND)_^!fpr zNoUgOqt`3_K@%=!(<{sJE*r|}Ld)P*mL#|5!UjwL)vp#wRae6*681>4e`sucYWCXf z^yI|U(%KHJD0%Q={n4X4<54HnQ~`%sO{LOn1=^;SbcWoX3E*Nr8?8kdh=$GKixoz9 ztamhjGBGhVH90jqe{buM%w}FKkEKQ?M!Nzgm0Thb2?cz0!z^oFoYgxS9;&+WrgDgzn-+N0!QI%%UJ#-D} z@tJT8!!42i8_UxPmx^0WDKD?A=EwWgsl!p(mN_!Q+`2YC~}(#bQ7u;)TBFxiwWeeWEhNmhR=%fq+ga$L+1tw`Mv62JBtN+8H%;29w3%^LRq3#?!g5 zxwG@;;3zK>&hFg2;?#;cHI$0-va(7#2M^9Yx!dd4VwlDr?eA~(8ZZ&cg^a~(Ynd!I zm&3|q;v9*wY5onFJwZmYhj%-iY6*u~MX9K$tOSv?_x=3hcDqxDLn1_4V?KjI#DQcp zad<+Zh|gt$lvHz7{;4;4St&?yB>k}4qm%G!8B{8TN{3=*Zdu-Wb+e_;pwXGV;U>RD zB@u8?Hp)XxQiV#1fyb$WmRK^^#BN?Tn)5B|{cb|eXVo$pFifsUVQpP_mEIU{sx#_L zj{0yzoemQUxF`?i(?pmpX1!7b93VNE|LV~@j?BiOM+5D!SR8>+iV@a8&+Q%Z@NQ4N z-DI$OgCJo#Oe_$gGVnVlZ#drQ(aYG?RWt@)8@~_Zh?3-+*^o}cu4OQ}LZ#N;&^~ti z`5{!j>v4}sZ?L-jUZG9I(K zn#q$J0^JK6I~fSc%;tEr)1Wn2>~#){UaiIn1L{N@k;X?m`$SM;LsXOdaWAAH9CtA;(Q88<>v3{c*J4U8SLS~ zTMyS(=f+2eIs*E495n*mGq3@jfV!N`?k*&KR)bc9V{(ZU!ws%DI)gq#^0R$MKM%Ep z0`<)uL(}6uZB3y_Q^;w6l>)&MYyG`Hy?nX(^cl!)dSfQ;F%rt0S!VOZgsTJ8@dzPu zj^*vnt&yJOmAuYGqA6gvSZq$G-Kd0O&F0H=;2~4piAbz}@kRP*V=Cb`D#Z{?Fj1I2 zf!+bPA%$`FWnL^#4|I1VqCv0SNZ@LX-eA(HF);8l+~{ub+tf0VRO1|amO0wI-sXHK z#1wD?Lv7txRwHaB6qsC=FLx@{gwANOyWBpH zRaskEbRN9MWxC?Zi@dD%$rY271u;!$OU-B$9Yfl>8r?>%me6Toy;Yb(fhknDN|oa< zIeo!MG-#DG$_vh&K7FpBoL6@nIQDOawZhz-axps^L;I0b+zr(PLKauS_duZ5=4JxN z)r83%Zt3i4b>p?=1!sRaefDAr(>QYk!MZ)}BSg7EqYHwO>_<$|I*m*yg!+Xkp$CM) zlIMs*6u;xhNx*Qkkxwc5@l1|`q3H(Gl}X=8y0j{l#@f&i0XB)Gl3uMmr(O!BMyoSe zo&Hd`-U;iA6Gm64XLk8!uNz~O6`VVJzM!mDo!kPOpLsOW8V{S4 zkSJ26)@XNl>SG;!eXR{vEsm*ljzGus-L?5E76HAqu%NKGlA}#-K*aB?493GCtE;b$ z&_nbklDgSu(_j(_IB{ovbE1EGarNe4*hVPin8xC18Cm-I-gL8GRP#=;gyzntS@Q6~ za9bqOGIV!8OQLTfOjGkor%r`ItFCb8#Nxx3`@2uC#_a?qkt($IU~+P4ZFw|o6tQcn znS7;ZaFZloTx$t>8(OBGg6^YPbO$kXHCQ#6T&^|+I_4g2!R*%dVRFH-c#Q?^?3hq56t-jlCtSw%PWy-tfADsy+E5?9GP-nsWg1PQ0YoR_aXEZ}RAUK^ zKF*xT#?zaV5sOBV+ejPi?uM40>6Lq{^OHk^F$bq z4N_1A1`;nVEh(>hXXwWtALfj7Ci`ZwJLJsmd`)Jn4M^gBvv)Ulk227L9!lB%`qI_0 z{`QawW204Q1>(9?SX5G3BTzXL(`(OPZtoxLzj-*<-Q=ya<=gXZ8mF%*IXHJ4s&PIT z6=HAWr(4%X+XFgr4O)Q~BQ1r6mo8T@1lszZYj;+c7H+Ms-kj=dsfW$C)nT{WY!;)% zTIcaMcTKInf^CmJbNJ%!^~v$E;jRV)aFhdw2ezpt6qeK)9ba0U9qJtz9O!BZ`yD2u pPG`(FOAUEimkzv@JKDVrJ|(;NU??6AMp`?PVY7^dQqWT5KLKRkSY-eJ diff --git a/lib/glut-3.7.6/progs/demos/underwater/caust01.bw b/lib/glut-3.7.6/progs/demos/underwater/caust01.bw deleted file mode 100644 index df532cf374eeda24fb761eff9f6bbf938db9849d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5368 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 Y!gJ}~Od=ADwso`zZE_|cfhy#`0s4}8761SM diff --git a/lib/glut-3.7.6/progs/demos/underwater/caust02.bw b/lib/glut-3.7.6/progs/demos/underwater/caust02.bw deleted file mode 100644 index ca82771dbf3fd933a1185ee75a31788a3ae23e64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5362 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 diff --git a/lib/glut-3.7.6/progs/demos/underwater/caust03.bw b/lib/glut-3.7.6/progs/demos/underwater/caust03.bw deleted file mode 100644 index 18dad2910e69a1b0723ed8cfb60223dcf7fa0495..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5358 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 GApZfvOOQ(d diff --git a/lib/glut-3.7.6/progs/demos/underwater/caust04.bw b/lib/glut-3.7.6/progs/demos/underwater/caust04.bw deleted file mode 100644 index 76eb706dacaf6819ead9c79e38f5544f74f1b9a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5357 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 diff --git a/lib/glut-3.7.6/progs/demos/underwater/caust05.bw b/lib/glut-3.7.6/progs/demos/underwater/caust05.bw deleted file mode 100644 index 2e0214a18a15a6f95f86f1305077c50b2b6e85ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5365 zcmeHLM^IyHcD{G$aTw2=dA8rm3)>5?ys$Ukxyp9g-gx89YrhWA4I&4DKu827l(U3# zKmkce2uVmFkwnlX$0o-H1kEEfO+z=S8-cER%11SRuBoYdQ{^gqXGve_O26*;&wu`N z&iDO7cTg1h3Gz?yL=gn}7Vs+oQbGF53PO27`tpDC@d)NhKmPGIjed;|vw!{ho6ldP zvC6MetnN3*|Nr{`G6Ijl_@jRXhyn8m^3$&Yj{zn?96^5XF93M}FW?+Oe*bR))qozr z1A_d)-vgL{Q3UzJp9203AO|cX$j`n3JOx+*2MF>s!}Sk#e(atf#(&rQ zZ{PddpMTfA|C6!*wu>=pYguA_U~G9jXxFLaQVFMqR9aM!Usy(NP4>`wShN~wU$uB$99$R!Z+iYsU` z=g`vXxZfaQP%4PTYKFu$cXqVUZBgj9jY_XtvRE}VJol0+yEWbaU3mD}hHnWag zR*;+X@?}l|u~yjBJHIj&G)w7}@^Vr&UFwZ8tySA!|T+7vU&To!;wVb-DvZ69FT_7`} zF4TiyUVle)`rr;v9FDZ=Wn5a?Mt0Wo%ojO@l`K{J^xDc;&@AIOuvlDW>+t++uT{dN z5DW7PODk*HaKpiM|$Xnf=B0Z*mA;1^5%t$Hc1z6xTRlapIOtl`^Y zyC*06>vLlmHaa=KbAG-Zb2Teoj{A^B07I3Y3P5A*93a9&m62 z$CDoq*C%`0EDA2Ix&n5ADRobuB@*wpSNGq;{i!dh)aA5C!>z3-$|q!}1D0QgQcw

    9PjF!IEODQ>elyjs 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 D8ttT? diff --git a/lib/glut-3.7.6/progs/demos/underwater/caust06.bw b/lib/glut-3.7.6/progs/demos/underwater/caust06.bw deleted file mode 100644 index e589b057419d602f8808dd2ab8e15a434005be2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5355 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 diff --git a/lib/glut-3.7.6/progs/demos/underwater/caust07.bw b/lib/glut-3.7.6/progs/demos/underwater/caust07.bw deleted file mode 100644 index 058080b31334af6195686915b8f858064d4a30ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5357 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 diff --git a/lib/glut-3.7.6/progs/demos/underwater/caust09.bw b/lib/glut-3.7.6/progs/demos/underwater/caust09.bw deleted file mode 100644 index ab62dec5c855132c4f9551227e34da825352625c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5364 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 YHh*xw@uAVKl>j5n;_^hW5?ITB17(Z5F#rGn diff --git a/lib/glut-3.7.6/progs/demos/underwater/caust10.bw b/lib/glut-3.7.6/progs/demos/underwater/caust10.bw deleted file mode 100644 index ee54fb2c07a920bfa8c222e500aae87babc12333..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5367 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 diff --git a/lib/glut-3.7.6/progs/demos/underwater/caust11.bw b/lib/glut-3.7.6/progs/demos/underwater/caust11.bw deleted file mode 100644 index 7c40b6488e9ab3e91d79a398757990d8832843a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5365 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 diff --git a/lib/glut-3.7.6/progs/demos/underwater/caust15.bw b/lib/glut-3.7.6/progs/demos/underwater/caust15.bw deleted file mode 100644 index 73b40bcf5a432eca32f9027b13ebb05b53ba3b15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5372 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 PA_SY1)X)GEVJ7rnWOVFu diff --git a/lib/glut-3.7.6/progs/demos/underwater/caust16.bw b/lib/glut-3.7.6/progs/demos/underwater/caust16.bw deleted file mode 100644 index b7f16ee3ba4ec041b62fcaec53ae4e0d888c8888..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5370 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 diff --git a/lib/glut-3.7.6/progs/demos/underwater/caust17.bw b/lib/glut-3.7.6/progs/demos/underwater/caust17.bw deleted file mode 100644 index c871fa525dc9d3c75184aee9ea5e2208ba1a7c9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5373 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 diff --git a/lib/glut-3.7.6/progs/demos/underwater/caust18.bw b/lib/glut-3.7.6/progs/demos/underwater/caust18.bw deleted file mode 100644 index 115f175b88900f4d5bca83cab1085ae548c81986..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5356 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 diff --git a/lib/glut-3.7.6/progs/demos/underwater/caust20.bw b/lib/glut-3.7.6/progs/demos/underwater/caust20.bw deleted file mode 100644 index 69b9bae7998bf195ca51c9e58db1f051d34fa073..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5366 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 XWT%IYo}%uDTz4%M9u(_bIv)D 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 O9M1Nbgg^oOOz~g1K-Mk* diff --git a/lib/glut-3.7.6/progs/demos/underwater/caust25.bw b/lib/glut-3.7.6/progs/demos/underwater/caust25.bw deleted file mode 100644 index 785c686f788a9a7488f95e81a4dccc01502241b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5353 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 diff --git a/lib/glut-3.7.6/progs/demos/underwater/caust27.bw b/lib/glut-3.7.6/progs/demos/underwater/caust27.bw deleted file mode 100644 index f9d7cf20007f09f13a0c53029707ea9f595e3ed3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5357 zcmeH~M{pZie#X0(+O@r2+vDB2__i*eeDTF6U+i_La?Px)(N56Ju4bf>L`oEMKt>}r zaw9Y{8aWUkBBPkeW*SmVpqPW0L{TI~N)#!H0YC#PKWO(bc9plvF8gMZzaofcfA97C z|KImMz>i@V`T_I{@C`!{^bz140II0`dBv^rqWsJM&96&fto+wMd|&hfxL^3&zdt{IF zr#iqa1pVwoz*hh#U;~0a{7V36?hhm2;lZ>2UV!fJz5ZX_|Ih!8`~Ih6 zwtA7vzFz51`19Ao9;;diGvFGCWH31*l_k_QvwwDWxX>N4n{b2PWHp&BHp1ogI0=JR ztyE$fqdnBKoz9(3M+_1K5uys*WYCCV4$Oc^o$(>XQ}4288(n_0TBTHBYD}ZS z^)`poL0F7BomOkGx*8^4Wim^3az>|`DfRDbE~Kl z5d#e+q_hW{zFT~rqOt`!`O6`%R?I^RcwwPXB$Y^2dIRAJ#Twgtheqai&a&D47FG4F zuRi_NCs(e1_SMbeT0X3V^^h#lliYrlE}+`7x$IVpMJeEL5P=XyB@&qe)0*sohR%`c z#f_(j=Tt7U78aG>{Nn1B%a?)3_1hH)tbz&1HnM(no=#I#E}Kiu)@eito6SRIGI@b2 zfN5~EC)z!>y8Ghf^;w3ZPUn35lAG7AUjFFg%a^Zyd83#OtKlGo?xn#~;OR_`N*@i_ zwj~m9@38FjjNt*T1@Q`Qwj% zdG(7MB?34EuRCB z;U+7u1+&#kE}ucUEN%;KpF*2mk( z@ujuZnc?<$UB18#4_bUm`n|8OeRlQgr=MTHhs5B0m;%p2y&P`}_@aGlN1Lr$R^|H+ zWC?*tsIh%`W_5El+1nVfTX3~TZ}CMVb{XyNjbC58_SN-5x@8eg=QZALbh}MD0}-3t z+3YlM%ZqN`x^uUz29cWsEyHu0&$ea<8vRxrlcA_gu5*RM4mtgP;mw=3i&>`R8JvN$ z5cx2u5sQR!+|$3Y)o10E7Jd88jcq0T{9^PXq-T#LCmbJrE^h3VtVsCr?9f<+w0fAxm8rol)L*^U#H*hPPF>X7%D*6 zbUK?aGsn6*>aCbeX>53Wk;#DdAfYI)w(NdMc@2Vj`xmF`<+Qsuzy8hFHw()cGVkOI zDwjT(Y73avD38S~pzAqet-oh-q$?3=8Qr6D=j(7Yj6-DAy`npX_sW?PbMr*9#lWd3 zy!p+ITX!otn#PS3*vTggeG!{l%45-MX>_&-b9F5}*;rcII!>of=Hsvi=0eVr!rR~8 zE-J0zVZniiJw64yqPVE2xPqgsOP&^FJ-Lgg;|(?qih#bMGr3~5vuE?<^z}mmvR?8IVBD1e4Dnn&cCyVVajhMqKpc@#71osZ?rE*jz zwKvh|)QVvyTn>@Ng`k*)#br#1G0@!Ap72`rTAevGw0)k-W-0KK-tGe$2#ZE%viS;2 zZ1yCb&18?J;)Ghv1#Vgik!8hq3-1=)FQ;P~S1Y4+W_Y$^pNl06y= zfO#-$=`0?qbw1cggZI+w?Ji(eeBh=uNW!QtD=jF|R?q}$A`oxw`R>uvlk-bd5Nx7_ zx%Jmn_U&v$C*&}}g7OvS;P8GnM`bUTnru3yTmqx85F!We8O!!W#_5 zyOQfir>6%qQN2_wvvz?NdDd!`A#5fa5hyJ2X)v=~_G0_HhB{B65pIDSAaWpPmT^Jd zIH=Z2xZDoH8-FnTXsXW->ciryLR(aBx5F;uv6)PcKtVJ-IswJXq+hL!kmTqRya}&B zS~rq z<82!mXbpLTU9*Rv!nqvKcngtTL6ZU%qbgINrK`nnQcFds95mS@Wxj1_Xufd}b=`v$di9+XX8A{HMx7T}Z z7Q4Tpt1(I%^e%R(fk=;-R!N)qmaTOiVERAVaK zndqNhUY&V3*wfzDH#YltVIbintTsnoqN62b;8m3r-7T#VT6^ZEVj3=;#uREjO?_lX zBOHZ8K*MA-SzXbdvAKoCh2^!4Cws5no~6(ClHDOUVI!P=j~(My72hc;V`8D{t?`hW zOQSLPO0zrYa}hsqK%~(M{;Q#DbbNGlZ0hmh1qDuuY`)QlqE3@eqcNI{YNY1=z0xY4 zrDt<*GNR=(nJj_aV72NsYG6Qm$behC_09cb$>HAiw*KjTAW@KwfHvIh@)=d2Tyji< z37J)uHEb-DeDQoDqL=V^LWxSN1CTIsT zrWW&g0+B+e*Pt8@PwDF2dbKkSJVPpxt8}1TV%CZ|SD9+o@X*|=GuK`omM4B1zZN5!Bd4M4h|PO17;1V zthsLB*#&UF^k%n@Fd8i`f3Utj9CX{vxLONa;V4Azr*aotWZ16PY1A?ipIK8?%aYp3 zXQwZc4TMfEK@|pn*X;i5vxBi1VbI}Lw?7!H^SkmX$?Ap^@GwMPP}J^Fh`==%ro|-S zbOJ6RHnlxTfxPV1%Y=LZs%0z=QE#?;;xL(a!d&)vtj-`4 zi@?^^sZb81wgzZ4EuEY`8xHDGV8m>mRBLv)T{g2GH#sA%9S`ckhX6IEvv^wIN%%R? zIA4n5LNcx0SkMae4sVNH2015JWpOI5>xA69z`_+iX4XUn|OO;v^;jr65?ZA@ePik6i zO$~4z1<|>iPG?S&AzZ>oxH5AyyaK<0$elJd1BAHScZw@{8h>NL3(}uTt1%h*(J z+-=dQK)$>d3FJqJGksWO#xq0EXB;QCyZ zcWCYDTz}M~SD{=c4IJSdvBv5P*ZV9wrBtD_H_V+<>77oKh)u7hBTDbgIZ)`!Z8jRj zpaJMynXP^O^_%Aly%9SmM(8zFHMMM1W6Sqb$YnEG-O-`lO!oDJ2W8fjSJoox#7+U2 zLhjXA$RL+W6&gp!>S+cz*L-)-AmcM@tHCg+#-8XJBHLp1LEyHFZ*u94CLPGNCFRu! z-g%S*Q_vjmB-`o;li5)}@HBlXm&hE=KX9qRL(mx@E@`Zh*1n-3vZtFITX~VrrWZmO ztGc4RiXnB5oMz!HoQBjReH|^4I$wR$$dikLTw|8XQ7@8>4jszpB7D$dR)4I$XLuqx zzp|4*RMV>wEf+K_Lx{&_4xYms@H`YJ?7&L=p=NU7Rp#A0aG>PgWuJ{UICPj?u25lM z0RqvEfvM%Kqcl~J)loZb4h0|Kqqx62Io%63ya$R3#8S*)_a(X??VW-9-{o@PbK3fF zgU@a<8qG$Fm2kMi9S@iG&VQ8EzL{%u;2J$q-!(j#u)W+ib3A@AQ*n@TnVkVCH0=Y-{f9ADtLV*yJ#h|6pEGQNt3b zOrCi6=-l%9)|00@`}@0_GYh$H__S2p9>2^0J zfaxI8`tvaoks00b?%~Nt6JsMo!y^wTCx`obIyzb#BR-p1TcF0wu2Ad1!{s9omkKB> zOP!s(*qUf@D7kPgh}Mbs8gi4bsef!{W~{%xxiQ}OpuM%RG0~8Shw~b0wMuKY`(sUm XPYTl7ROaGfXY29GR9~Fde*;tk9l!;G{OR8VLSO_ze*JUcGJpY72=ZsY z2EGEEz#4+Q4|{qa_VhmN34y);B(R>JeD9}z?_Yo7cXC?)o!&pg`#F9}_kZ&J+~4`H zv~p|vPu~xg-YKu1Quir}|s#L!sJ$-|O`_oK7#iFyUC9%C6O!+|kj^R64od z@6{>g7-9AL?6?SJpcI6xuA;If8dvLsS0|^t%Y%&pm&0l{5rjcU7;GN5%c9p}DwPH| zx*8wtr_(R*T7}fg$|@#bsWa$gC=aD0B!|P7>0HeduP?Icr#bPp9e3@Ejw0mj-p}NMdftj6DYNJJ2ng8{byw8tL2og#WHz&ZLQt2F#Tx)dJHg)z7J$Sr+n95u{_Hv7_eev1H zAAS7kXIH+yQN{udEu!)@4?WpSq|$lWj?}BW4vkEZ+Xt7;pfk8ana1dEjz3yh-#)rX zr!yxHZ0y3TS3ddR@&_M${OOgeg;Y2X0#S56czKdczME+{or@4Mu|Oyki$ww!lf{Kq zSnB$xUhJMFQmJ%0`DWP8Df;fpCm-frR($x;=U?Ynf`Sc^F6^c9(yh54Nxh9ZRRRu| zFIB3Qa*0GFR%k4Nu8C*6iA>_+^k8r2#h_bM`u&%me)yZb%kmFD`)xi2Rid?s_%tsQ z%VrX17wOb`R4-yP**qzxBM3dN(HL#P_R+Pyvt(lb_2TT~xw+wxy88Av|Nij@moI++ z>$pWnjpzVEX42VgYIl8g>tuf>sOHhBRHi_VTOAI&-R2Ls4lV7RobIg740klOcE)1O zc2U`lFF*STPUEvHSBu4HE4m39+05C>NZ-Kp+S)yzl0_*iqcC_fodwD~)YvonWb5#7 zdw#Gj&$TzDakY%V-iI)0zG0wqQ*p_GqEsA*?PfC@8!` zVTsgcPoyJ0_xj*)Z|z}U)MM7E6)LSQ5beH>Wpusq55ClZ}#eCJQl68 zqLRv0c{}6n9$YTdM`lh^DRd7VLr4LwtfZuZCe+pqPsJ>}vYXew{r2j${9>xaF?5uL zr@r~1)uWek7}XW!WfZ2w)Oc@VptGf8bUTqwZK5&Mijb6|f?KyrDme;w@7Q2aK`Xv- z?YnE=-@3z4g%{I5{E$uUOm+G6687&jD(NC^cx-j;*|V*)Z1!xW12v#R#B=BN%^Nq1 z%IH#4^Wad6Ra{+i`_}E-#Z;N+-eD#$>&+Z3$Go_N%cND5l~*&xc=*xI@kKI~N$yS7 z8&FZsfl6{3;3pzopnc$Oty#{dR)Mi80u%di8sG=#&q*&XOBF@5F`T4g&gQv1bV*MSB0UM#y8r0UyrA{9=+b}5)rJ@zEjH27O3ya}NDJ;Q`zW$-10dipI;mQGYK>B3o;2b(})T*T6#tv&cE0>N#vzN+0*s= z@sVfA^ud@^#BTGA9;Xf-1aJw5PGfRJDpT;@UK(uoVzJqZt1%4KqBzp-Hp=;MUa(Aq%jK`} zN80*F7dH0ZJZ?5AL=vKDF>yLyM@V@rCPyIAx|*hs@-pi5#nV{GZg%+45L%CrJrT1~ z%w==Ln8oAvIIMQ3KiC`_=@02dEILc+n*@!BK?2Um;(m_`?SV=f*JPxByi>WmxPtdCq(JRZTGT%(%e6db1W;5wbwn*dZc>MPGGuk+h*r9>bQDG9Sd%C0Ocr^*8h=cki?jL)Rg7;F(< z(=)U7bYWp-=PYrNNaba6Ej!Wb(n+NA^cj+K;y8jBDLSqPN#uXANX7sg>OwW#X z*SXCQ2WlIe!fvBpXYn`p5BEik+{)sDg5q)((K$P$*pM$bd4nit*&W7&3-X=d3x4&)nZSHwP z`bcl|d2yK#roKq7mI=5#0p=avIa-Z}t(ZcA=}m-M1lTufiO8$=;Y=k62 z18W_JoldvUV<%K% z4uc8jAw)=D@3W)5<=%ivqfz4oEZS)Hbq_JuVIOu2^Ymn96B@W39!* zK9|$tbbGx{o0U*W84$eQ{-rt?;t9RKQ4y(;>H4!>OuO}QKv>Tm5$Ry;mu|~I1r_&pBDk+~zsbUE6 zhWW#t`3@JXSHPF+?V;ALSbtmC=Wz!@e!s^?fX87t;ch}F&~1cFrH^N#R*hV)z;sZ! z0`M6+UlV$;y}KF@7?mOp3*1qohaFf<&YEER-Hw)!i%{p%H|}mjm(U9cKc`D=W;r|o z$e%hLCSlR4Xd-RR;PQ(ngJF|O$YL;AY_32ok}5HyH#$5&Ki*XX+I*o{WoZN_K0(Oy z=XV{s!AfNbAp8?*0ob-!<7yjzIM!Wf&S}tKt}$6)=3H-%1NTzXc{3`q8PYKVPR1jMX0Z7?Wl#zl18nP%OGIOKAK8OI3F|l-b&AFfk@3A$>P3f91_P6$u;1Iy%RoMVGZN4% zWN^vy_ADHwQptm*-dcl9K&Mb3?aTD;=-vMAsLx@xx+C$m^UU!>pPWsvrgD_Q$0u1d zo7=|oX&7l%i^&n}Sw8!niykes+tp$gt(p#Hi`&B;{e5@aqv86_k;Q{ldZ*7SX40q( zsj+$SB#mC6M+n~95D8fA4ri!yc0Ze!X-;P|JEL_bHJ{C3^Ti4na1C8O@!=tIcyet& znNIHyI^;qgUyOTtmR_x)k5CfPYP4EhYqGl=;wz_l*%lb#+2l%3(5#Y*#WDp(m|gxz zCpj@Uzp{0d1hYS#sxx6q%;1U+PL8&sUet&*!Zl4O)tDTSez=8!zz^AUYImv&A|;6H z^hS%#;c4g@n}2bbf|;dDZ4E_&K3`o+Y_KnEfJ-D7@j?eMAm3SoUE?oKpoF1%k|*mE zy-h*4!(qE*!E6p+v~TM5Njm#(2EW*t9UZwpF*ed$XMjWud6q0HDXV4)RVIJ?(EPKF zH*XJ)jt|~Gn;DI_)rV?p+;)q>V6=IoebeiE7imbcnQZD{dvp8c;%J*o!9pw0VuUO# zE~%vRl;&XP@T1x3sj1n=OH1>!_Xm4Bn<9}~kHeyed%eXI=^UDR3F#JAnLaysyZvHe zq{%L0qGf0SLKZ+8p+l&ykBv`HjSt0odwOGW5=<%@35RN2b~F5k0mI=`>$@ipGO2VX V`S!{9$msA;ENWM>(Q>p9`43DBnC1Wg diff --git a/lib/glut-3.7.6/progs/demos/underwater/caust29.bw b/lib/glut-3.7.6/progs/demos/underwater/caust29.bw deleted file mode 100644 index bd9149d9d6ca6b9d03641a5c9f2e87ab0109e510..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5352 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 O`;rlxln!Q;BL5A>RA@E; diff --git a/lib/glut-3.7.6/progs/demos/underwater/caust31.bw b/lib/glut-3.7.6/progs/demos/underwater/caust31.bw deleted file mode 100644 index 85670091255eb3367aef1f4e258550fb14d61338..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5353 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 diff --git a/lib/glut-3.7.6/progs/demos/underwater/dino.c b/lib/glut-3.7.6/progs/demos/underwater/dino.c deleted file mode 100644 index 0064b2a49..000000000 --- a/lib/glut-3.7.6/progs/demos/underwater/dino.c +++ /dev/null @@ -1,129 +0,0 @@ - -/* 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 -#include /* for sqrt() */ -#include - -#include "dino.h" - -typedef enum { - RESERVED, BODY_SIDE, BODY_EDGE, BODY_WHOLE, ARM_SIDE, ARM_EDGE, ARM_WHOLE, - LEG_SIDE, LEG_EDGE, LEG_WHOLE, EYE_SIDE, EYE_EDGE, EYE_WHOLE, DINOSAUR -} displayLists; - -/* *INDENT-OFF* */ -static GLfloat body[][2] = { {0, 3}, {1, 1}, {5, 1}, {8, 4}, {10, 4}, {11, 5}, - {11, 11.5}, {13, 12}, {13, 13}, {10, 13.5}, {13, 14}, {13, 15}, {11, 16}, - {8, 16}, {7, 15}, {7, 13}, {8, 12}, {7, 11}, {6, 6}, {4, 3}, {3, 2}, - {1, 2} }; -static GLfloat arm[][2] = { {8, 10}, {9, 9}, {10, 9}, {13, 8}, {14, 9}, {16, 9}, - {15, 9.5}, {16, 10}, {15, 10}, {15.5, 11}, {14.5, 10}, {14, 11}, {14, 10}, - {13, 9}, {11, 11}, {9, 11} }; -static GLfloat leg[][2] = { {8, 6}, {8, 4}, {9, 3}, {9, 2}, {8, 1}, {8, 0.5}, {9, 0}, - {12, 0}, {10, 1}, {10, 2}, {12, 4}, {11, 6}, {10, 7}, {9, 7} }; -static GLfloat eye[][2] = { {8.75, 15}, {9, 14.7}, {9.6, 14.7}, {10.1, 15}, - {9.6, 15.25}, {9, 15.25} }; -static GLfloat skinColor[] = {0.1, 1.0, 0.1, 1.0}, eyeColor[] = {1.0, 0.2, 0.2, 1.0}; -/* *INDENT-ON* */ - -static void -extrudeSolidFromPolygon(GLfloat data[][2], unsigned int dataSize, - GLdouble thickness, GLuint side, GLuint edge, GLuint whole) -{ - static GLUtriangulatorObj *tobj = NULL; - GLdouble vertex[3], dx, dy, len; - int i; - int count = (int) (dataSize / (2 * sizeof(GLfloat))); - - if (tobj == NULL) { - tobj = gluNewTess(); /* create and initialize a GLU - polygon tesselation object */ - gluTessCallback(tobj, GLU_BEGIN, glBegin); - gluTessCallback(tobj, GLU_VERTEX, glVertex2fv); /* semi-tricky */ - gluTessCallback(tobj, GLU_END, glEnd); - } - glNewList(side, GL_COMPILE); - glShadeModel(GL_SMOOTH); /* smooth minimizes seeing - tessellation */ - gluBeginPolygon(tobj); - for (i = 0; i < count; i++) { - vertex[0] = data[i][0]; - vertex[1] = data[i][1]; - vertex[2] = 0; - gluTessVertex(tobj, vertex, data[i]); - } - gluEndPolygon(tobj); - glEndList(); - glNewList(edge, GL_COMPILE); - glShadeModel(GL_FLAT); /* flat shade keeps angular hands - from being "smoothed" */ - glBegin(GL_QUAD_STRIP); - for (i = 0; i <= count; i++) { - /* mod function handles closing the edge */ - glVertex3f(data[i % count][0], data[i % count][1], 0.0); - glVertex3f(data[i % count][0], data[i % count][1], thickness); - /* Calculate a unit normal by dividing by Euclidean - distance. We * could be lazy and use - glEnable(GL_NORMALIZE) so we could pass in * arbitrary - normals for a very slight performance hit. */ - dx = data[(i + 1) % count][1] - data[i % count][1]; - dy = data[i % count][0] - data[(i + 1) % count][0]; - len = sqrt(dx * dx + dy * dy); - glNormal3f(dx / len, dy / len, 0.0); - } - glEnd(); - glEndList(); - glNewList(whole, GL_COMPILE); - glFrontFace(GL_CW); - glCallList(edge); - glNormal3f(0.0, 0.0, -1.0); /* constant normal for side */ - glCallList(side); - glPushMatrix(); - glTranslatef(0.0, 0.0, thickness); - glFrontFace(GL_CCW); - glNormal3f(0.0, 0.0, 1.0); /* opposite normal for other side */ - glCallList(side); - glPopMatrix(); - glEndList(); -} - -int -makeDinosaur(void) -{ - GLfloat bodyWidth = 3.0; - - extrudeSolidFromPolygon(body, sizeof(body), bodyWidth, - BODY_SIDE, BODY_EDGE, BODY_WHOLE); - extrudeSolidFromPolygon(arm, sizeof(arm), bodyWidth / 4, - ARM_SIDE, ARM_EDGE, ARM_WHOLE); - extrudeSolidFromPolygon(leg, sizeof(leg), bodyWidth / 2, - LEG_SIDE, LEG_EDGE, LEG_WHOLE); - extrudeSolidFromPolygon(eye, sizeof(eye), bodyWidth + 0.2, - EYE_SIDE, EYE_EDGE, EYE_WHOLE); - glNewList(DINOSAUR, GL_COMPILE); - glPushMatrix(); - glTranslatef(-8, -8, -bodyWidth / 2); - glMaterialfv(GL_FRONT, GL_DIFFUSE, skinColor); - glCallList(BODY_WHOLE); - glPushMatrix(); - glTranslatef(0.0, 0.0, bodyWidth); - glCallList(ARM_WHOLE); - glCallList(LEG_WHOLE); - glTranslatef(0.0, 0.0, -bodyWidth - bodyWidth / 4); - glCallList(ARM_WHOLE); - glTranslatef(0.0, 0.0, -bodyWidth / 4); - glCallList(LEG_WHOLE); - glTranslatef(0.0, 0.0, bodyWidth / 2 - 0.1); - glMaterialfv(GL_FRONT, GL_DIFFUSE, eyeColor); - glCallList(EYE_WHOLE); - glPopMatrix(); - glPopMatrix(); - glEndList(); - return DINOSAUR; -} - diff --git a/lib/glut-3.7.6/progs/demos/underwater/dino.h b/lib/glut-3.7.6/progs/demos/underwater/dino.h deleted file mode 100644 index 6585ff8c8..000000000 --- a/lib/glut-3.7.6/progs/demos/underwater/dino.h +++ /dev/null @@ -1,9 +0,0 @@ - -/* 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. */ - -extern int makeDinosaur(void); - diff --git a/lib/glut-3.7.6/progs/demos/underwater/floor.rgb b/lib/glut-3.7.6/progs/demos/underwater/floor.rgb deleted file mode 100644 index af34bf6170ae6120c738aea7928308e3aabad773..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54270 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 diff --git a/lib/glut-3.7.6/progs/demos/underwater/texload.c b/lib/glut-3.7.6/progs/demos/underwater/texload.c deleted file mode 100644 index 3fb8441b6..000000000 --- a/lib/glut-3.7.6/progs/demos/underwater/texload.c +++ /dev/null @@ -1,253 +0,0 @@ - -/* texture.c - by David Blythe, SGI */ - -/* texload is a simplistic routine for reading an SGI .rgb image file. */ - -#include -#include -#include - -#include "texload.h" - -typedef struct _ImageRec { - unsigned short imagic; - unsigned short type; - unsigned short dim; - unsigned short xsize, ysize, zsize; - unsigned int min, max; - unsigned int wasteBytes; - char name[80]; - unsigned long colorMap; - FILE *file; - unsigned char *tmp; - unsigned long rleEnd; - unsigned int *rowStart; - int *rowSize; -} ImageRec; - -void -rgbtorgb(unsigned char *r,unsigned char *g,unsigned char *b,unsigned char *l,int n) { - while(n--) { - l[0] = r[0]; - l[1] = g[0]; - l[2] = b[0]; - l += 3; r++; g++; b++; - } -} - -static void -ConvertShort(unsigned short *array, unsigned int length) { - unsigned short b1, b2; - unsigned char *ptr; - - ptr = (unsigned char *)array; - while (length--) { - b1 = *ptr++; - b2 = *ptr++; - *array++ = (b1 << 8) | (b2); - } -} - -static void -ConvertUint(unsigned *array, unsigned int length) { - unsigned int b1, b2, b3, b4; - unsigned char *ptr; - - ptr = (unsigned char *)array; - while (length--) { - b1 = *ptr++; - b2 = *ptr++; - b3 = *ptr++; - b4 = *ptr++; - *array++ = (b1 << 24) | (b2 << 16) | (b3 << 8) | (b4); - } -} - -static ImageRec *ImageOpen(char *fileName) -{ - union { - int testWord; - char testByte[4]; - } endianTest; - ImageRec *image; - int swapFlag; - int x; - - endianTest.testWord = 1; - if (endianTest.testByte[0] == 1) { - swapFlag = 1; - } else { - swapFlag = 0; - } - - image = (ImageRec *)malloc(sizeof(ImageRec)); - if (image == NULL) { - fprintf(stderr, "Out of memory!\n"); - exit(1); - } - if ((image->file = fopen(fileName, "rb")) == NULL) { - return NULL; - } - - fread(image, 1, 12, image->file); - - if (swapFlag) { - ConvertShort(&image->imagic, 6); - } - - image->tmp = (unsigned char *)malloc(image->xsize*256); - if (image->tmp == NULL) { - fprintf(stderr, "\nOut of memory!\n"); - exit(1); - } - - if ((image->type & 0xFF00) == 0x0100) { - x = image->ysize * image->zsize * (int) sizeof(unsigned); - image->rowStart = (unsigned *)malloc(x); - image->rowSize = (int *)malloc(x); - if (image->rowStart == NULL || image->rowSize == NULL) { - fprintf(stderr, "\nOut of memory!\n"); - exit(1); - } - image->rleEnd = 512 + (2 * x); - fseek(image->file, 512, SEEK_SET); - fread(image->rowStart, 1, x, image->file); - fread(image->rowSize, 1, x, image->file); - if (swapFlag) { - ConvertUint(image->rowStart, x/(int) sizeof(unsigned)); - ConvertUint((unsigned *)image->rowSize, x/(int) sizeof(int)); - } - } - return image; -} - -static void -ImageClose(ImageRec *image) { - fclose(image->file); - free(image->tmp); - free(image); -} - -static void -ImageGetRow(ImageRec *image, unsigned char *buf, int y, int z) { - unsigned char *iPtr, *oPtr, pixel; - int count; - - if ((image->type & 0xFF00) == 0x0100) { - fseek(image->file, (long) image->rowStart[y+z*image->ysize], SEEK_SET); - fread(image->tmp, 1, (unsigned int)image->rowSize[y+z*image->ysize], - image->file); - - iPtr = image->tmp; - oPtr = buf; - for (;;) { - pixel = *iPtr++; - count = (int)(pixel & 0x7F); - if (!count) { - return; - } - if (pixel & 0x80) { - while (count--) { - *oPtr++ = *iPtr++; - } - } else { - pixel = *iPtr++; - while (count--) { - *oPtr++ = pixel; - } - } - } - } else { - fseek(image->file, 512+(y*image->xsize)+(z*image->xsize*image->ysize), - SEEK_SET); - fread(buf, 1, image->xsize, image->file); - } -} - -GLubyte * -read_alpha_texture(char *name, int *width, int *height) -{ - unsigned char *base, *lptr; - ImageRec *image; - int y; - - image = ImageOpen(name); - if(!image) { - return NULL; - } - - (*width)=image->xsize; - (*height)=image->ysize; - if (image->zsize != 1) { - ImageClose(image); - return NULL; - } - - base = (unsigned char *)malloc(image->xsize*image->ysize*sizeof(unsigned char)); - lptr = base; - for(y=0; yysize; y++) { - ImageGetRow(image,lptr,y,0); - lptr += image->xsize; - } - ImageClose(image); - - return (unsigned char *) base; -} - -GLubyte * -read_rgb_texture(char *name, int *width, int *height) -{ - unsigned char *base, *ptr; - unsigned char *rbuf, *gbuf, *bbuf, *abuf; - ImageRec *image; - int y; - - image = ImageOpen(name); - - if(!image) - return NULL; - (*width)=image->xsize; - (*height)=image->ysize; - if (image->zsize != 3 && image->zsize != 4) { - ImageClose(image); - return NULL; - } - - base = (unsigned char*)malloc(image->xsize*image->ysize*sizeof(unsigned int)*3); - rbuf = (unsigned char *)malloc(image->xsize*sizeof(unsigned char)); - gbuf = (unsigned char *)malloc(image->xsize*sizeof(unsigned char)); - bbuf = (unsigned char *)malloc(image->xsize*sizeof(unsigned char)); - abuf = (unsigned char *)malloc(image->xsize*sizeof(unsigned char)); - if(!base || !rbuf || !gbuf || !bbuf || !abuf) { - if (base) free(base); - if (rbuf) free(rbuf); - if (gbuf) free(gbuf); - if (bbuf) free(bbuf); - if (abuf) free(abuf); - return NULL; - } - ptr = base; - for(y=0; yysize; y++) { - if(image->zsize == 4) { - ImageGetRow(image,rbuf,y,0); - ImageGetRow(image,gbuf,y,1); - ImageGetRow(image,bbuf,y,2); - ImageGetRow(image,abuf,y,3); /* Discard. */ - rgbtorgb(rbuf,gbuf,bbuf,ptr,image->xsize); - ptr += (image->xsize * 3); - } else { - ImageGetRow(image,rbuf,y,0); - ImageGetRow(image,gbuf,y,1); - ImageGetRow(image,bbuf,y,2); - rgbtorgb(rbuf,gbuf,bbuf,ptr,image->xsize); - ptr += (image->xsize * 3); - } - } - ImageClose(image); - free(rbuf); - free(gbuf); - free(bbuf); - free(abuf); - - return (GLubyte *) base; -} diff --git a/lib/glut-3.7.6/progs/demos/underwater/texload.h b/lib/glut-3.7.6/progs/demos/underwater/texload.h deleted file mode 100644 index 1d1d7c56f..000000000 --- a/lib/glut-3.7.6/progs/demos/underwater/texload.h +++ /dev/null @@ -1,12 +0,0 @@ - -/* 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 - -extern GLubyte *read_alpha_texture(char *name, int *width, int *height); -extern GLubyte * read_rgb_texture(char *name, int *width, int *height); - diff --git a/lib/glut-3.7.6/progs/demos/underwater/underwater.c b/lib/glut-3.7.6/progs/demos/underwater/underwater.c deleted file mode 100644 index b10db5800..000000000 --- a/lib/glut-3.7.6/progs/demos/underwater/underwater.c +++ /dev/null @@ -1,633 +0,0 @@ - -/* 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. */ - -/* X compile line: cc -o underwater underwater.c texload.c dino.c -lglut -lGLU -lGL -lXmu -lXext -lX11 -lm */ - -/* This code compiles and works with any of 1) OpenGL 1.0 with no - texture extensions, 2) OpenGL 1.0 with texture extensions, or 3) - OpenGL 1.1. */ - -#include -#include -#include -#include -#include - -#include "texload.h" -#include "dino.h" - -#if 0 /* For debugging different OpenGL versions. */ -#undef GL_VERSION_1_1 -#undef GL_EXT_texture_object -#endif - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -/* Texture object compatibility. */ -#if defined(GL_VERSION_1_1) -#define TEXTURE_OBJECT 1 -#elif defined(GL_EXT_texture_object) -#define TEXTURE_OBJECT 1 -#define glBindTexture(A,B) glBindTextureEXT(A,B) -#define glGenTextures(A,B) glGenTexturesEXT(A,B) -#define glDeleteTextures(A,B) glDeleteTexturesEXT(A,B) -#ifndef GL_REPLACE -#define GL_REPLACE GL_REPLACE_EXT -#endif -#else -/* Define to nothing; but HaveTexObj will not be true in this case. */ -#define glBindTexture(A,B) -#define glGenTextures(A,B) -#define glDeleteTextures(A,B) -#endif - -#define NUM_PATTERNS 32 -#define FLOOR_FILE "floor.rgb" - -enum { - PASS_NORMAL, PASS_CAUSTIC -}; - -enum { - M_POSITIONAL, M_DIRECTIONAL, M_GREENISH_LIGHT, M_WHITE_LIGHT, - M_NO_CAUSTICS, M_WITH_CAUSTICS, M_SWITCH_MODEL, - M_INCREASE_RIPPLE_SIZE, M_DECREASE_RIPPLE_SIZE -}; - -enum { - MODEL_SPHERE, MODEL_CUBE, MODEL_DINO -}; - -static GLboolean HaveTexObj = GL_FALSE; -static int object = MODEL_SPHERE; -static int reportSpeed = 0; -static int dinoDisplayList; -static GLfloat causticScale = 1.0; -static int fullscreen = 0; - -static GLfloat lightPosition[4]; -/* XXX Diffuse light color component > 1.0 to brighten caustics. */ -static GLfloat lightDiffuseColor[] = {1.0, 1.5, 1.0, 1.0}; /* XXX Green = 1.5 */ -static GLfloat defaultDiffuseMaterial[] = {0.8, 0.8, 0.8, 1.0}; - -static int directionalLight = 1; -static int showCaustics = 1, causticMotion = 1; -static int useMipmaps = 1; -static int currentCaustic = 0; -static int causticIncrement = 1; - -static float lightAngle = 0.0, lightHeight = 20; -static GLfloat angle = -150; /* in degrees */ -static GLfloat angle2 = 30; /* in degrees */ - -static int moving = 0, startx, starty; -static int lightMoving = 0, lightStartX, lightStartY; - -static GLfloat floorVertices[4][3] = { - { -20.0, 0.0, 20.0 }, - { 20.0, 0.0, 20.0 }, - { 20.0, 0.0, -20.0 }, - { -20.0, 0.0, -20.0 }, -}; - -void -drawLightLocation(void) -{ - glPushMatrix(); - glDisable(GL_LIGHTING); - glDisable(GL_TEXTURE_2D); - glColor3f(1.0, 1.0, 0.0); - if (directionalLight) { - /* Draw an arrowhead. */ - glDisable(GL_CULL_FACE); - glTranslatef(lightPosition[0], lightPosition[1], lightPosition[2]); - glRotatef(lightAngle * -180.0 / M_PI, 0, 1, 0); - glRotatef(atan(lightHeight/12) * 180.0 / M_PI, 0, 0, 1); - glBegin(GL_TRIANGLE_FAN); - glVertex3f(0, 0, 0); - glVertex3f(2, 1, 1); - glVertex3f(2, -1, 1); - glVertex3f(2, -1, -1); - glVertex3f(2, 1, -1); - glVertex3f(2, 1, 1); - glEnd(); - /* Draw a white line from light direction. */ - glColor3f(1.0, 1.0, 1.0); - glBegin(GL_LINES); - glVertex3f(0, 0, 0); - glVertex3f(5, 0, 0); - glEnd(); - glEnable(GL_CULL_FACE); - } else { - /* Draw a yellow ball at the light source. */ - glTranslatef(lightPosition[0], lightPosition[1], lightPosition[2]); - glutSolidSphere(1.0, 5, 5); - } - glEnable(GL_TEXTURE_2D); - glEnable(GL_LIGHTING); - glPopMatrix(); -} - -/* Draw a floor (possibly textured). */ -static void -drawFloor(int pass) -{ - if (pass == PASS_NORMAL) { - if (HaveTexObj) - glBindTexture(GL_TEXTURE_2D, 100); - else - glCallList(100); - } - - /* The glTexCoord2f calls get ignored when in texture generation - mode (ie, when modulating in caustics). */ - - glBegin(GL_QUADS); - glNormal3f(0.0, 1.0, 0.0); - glTexCoord2f(0.0, 0.0); - glVertex3fv(floorVertices[0]); - glTexCoord2f(0.0, 2.0); - glVertex3fv(floorVertices[1]); - glTexCoord2f(2.0, 2.0); - glVertex3fv(floorVertices[2]); - glTexCoord2f(2.0, 0.0); - glVertex3fv(floorVertices[3]); - glEnd(); -} - -void -drawObject(int pass) -{ - if (pass == PASS_NORMAL) { - /* The objects are not textured (they could be if someone - wanted them to be) so disable texture in the normal pass. In - the caustic pass, we want to avoid disabling texture though. */ - glDisable(GL_TEXTURE_2D); - } - - glPushMatrix(); - - /* If object is dino, put feet on the floor. */ - glTranslatef(0.0, object == MODEL_DINO ? 8.0 : 12.0, 0.0); - - switch (object) { - case MODEL_SPHERE: - glutSolidSphere(6.0, 12, 12); - break; - case MODEL_CUBE: - glutSolidCube(7.0); - break; - case MODEL_DINO: - glCallList(dinoDisplayList); - glMaterialfv(GL_FRONT, GL_DIFFUSE, defaultDiffuseMaterial); - break; - } - glPopMatrix(); - - if (pass == PASS_NORMAL) { - glEnable(GL_TEXTURE_2D); - } -} - -void -drawScene(int pass) -{ - /* The 0.03 in the Y column is just to shift the texture coordinates - a little based on Y (depth in the water) so that vertical faces - (like on the cube) do not get totally vertical caustics. */ - GLfloat sPlane[4] = { 0.05, 0.03, 0.0, 0.0 }; - GLfloat tPlane[4] = { 0.0, 0.03, 0.05, 0.0 }; - - /* The causticScale determines how large the caustic "ripples" will - be. See the "Increate/Decrease ripple size" menu options. */ - - sPlane[0] = 0.05 * causticScale; - sPlane[1] = 0.03 * causticScale; - - tPlane[1] = 0.03 * causticScale; - tPlane[2] = 0.05 * causticScale; - - if (pass == PASS_CAUSTIC) { - /* Set current color to "white" and disable lighting - to emulate OpenGL 1.1's GL_REPLACE texture environment. */ - glColor3f(1.0, 1.0, 1.0); - glDisable(GL_LIGHTING); - - /* Generate the S & T coordinates for the caustic textures - from the object coordinates. */ - - glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - glTexGenfv(GL_S, GL_OBJECT_PLANE, sPlane); - glTexGenfv(GL_T, GL_OBJECT_PLANE, tPlane); - glEnable(GL_TEXTURE_GEN_S); - glEnable(GL_TEXTURE_GEN_T); - - if (HaveTexObj) { - glBindTexture(GL_TEXTURE_2D, currentCaustic+1); - } else { - glCallList(currentCaustic+101); - } - } - - drawFloor(pass); - drawObject(pass); - - if (pass == PASS_CAUSTIC) { - glEnable(GL_LIGHTING); - glDisable(GL_TEXTURE_GEN_S); - glDisable(GL_TEXTURE_GEN_T); - } -} - -void -display(void) -{ - int startTime, endTime; - - /* Simplistic benchmarking. Be careful about results. */ - if (reportSpeed) { - startTime = glutGet(GLUT_ELAPSED_TIME); - } - - /* Clear depth and color buffer. */ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - /* Reposition the light source. */ - lightPosition[0] = 12*cos(lightAngle); - lightPosition[1] = lightHeight; - lightPosition[2] = 12*sin(lightAngle); - if (directionalLight) { - lightPosition[3] = 0.0; - } else { - lightPosition[3] = 1.0; - } - - glPushMatrix(); - /* Perform scene rotations based on user mouse input. */ - glRotatef(angle2, 1.0, 0.0, 0.0); - glRotatef(angle, 0.0, 1.0, 0.0); - - /* Position the light again, after viewing rotation. */ - glLightfv(GL_LIGHT0, GL_POSITION, lightPosition); - - /* Draw the light location. */ - drawLightLocation(); - - /* Normal pass rendering the scene (caustics get added - after this pass). */ - drawScene(PASS_NORMAL); - - if (showCaustics) { - /* Disable depth buffer update and exactly match depth - buffer values for slightly faster rendering. */ - glDepthMask(GL_FALSE); - glDepthFunc(GL_EQUAL); - - /* Multiply the source color (from the caustic luminance - texture) with the previous color from the normal pass. The - caustics are modulated into the scene. */ - glBlendFunc(GL_ZERO, GL_SRC_COLOR); - glEnable(GL_BLEND); - - drawScene(PASS_CAUSTIC); - - /* Restore fragment operations to normal. */ - glDepthMask(GL_TRUE); - glDepthFunc(GL_LESS); - glDisable(GL_BLEND); - } - glPopMatrix(); - - glutSwapBuffers(); - - if (reportSpeed) { - glFinish(); - endTime = glutGet(GLUT_ELAPSED_TIME); - printf("Speed %.3g frames/sec (%d ms)\n", 1000.0/(endTime-startTime), endTime-startTime); - fflush(stdout); - } -} - -void reshape(int w, int h) -{ - glViewport(0, 0, (GLsizei) w, (GLsizei) h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(40.0, /* field of view in degree */ - (GLfloat) w/(GLfloat) h, /* aspect ratio */ - 20.0, /* Z near */ - 100.0); /* Z far */ - glMatrixMode(GL_MODELVIEW); -} - -void -idle(void) -{ - /* Advance the caustic pattern. */ - currentCaustic = (currentCaustic + causticIncrement) % NUM_PATTERNS; - glutPostRedisplay(); -} - -void -updateIdleFunc(void) -{ - /* Must be both displaying the caustic patterns and have the - caustics in rippling motion to need an idle callback. */ - if (showCaustics && causticMotion) { - glutIdleFunc(idle); - } else { - glutIdleFunc(NULL); - } -} - -void -visible(int vis) -{ - /* Stop the animation when the window is not visible. */ - if (vis == GLUT_VISIBLE) - updateIdleFunc(); - else - glutIdleFunc(NULL); -} - -/* ARGSUSED2 */ -static void -mouse(int button, int state, int x, int y) -{ - /* Rotate the scene with the left mouse button. */ - if (button == GLUT_LEFT_BUTTON) { - if (state == GLUT_DOWN) { - moving = 1; - startx = x; - starty = y; - } - if (state == GLUT_UP) { - moving = 0; - } - } - /* Rotate the light position with the middle mouse button. */ - if (button == GLUT_MIDDLE_BUTTON) { - if (state == GLUT_DOWN) { - lightMoving = 1; - lightStartX = x; - lightStartY = y; - } - if (state == GLUT_UP) { - lightMoving = 0; - } - } -} - -/* ARGSUSED1 */ -static void -motion(int x, int y) -{ - if (moving) { - angle = angle + (x - startx); - angle2 = angle2 + (y - starty); - startx = x; - starty = y; - glutPostRedisplay(); - } - if (lightMoving) { - lightAngle += (x - lightStartX)/40.0; - lightHeight += (lightStartY - y)/20.0; - lightStartX = x; - lightStartY = y; - glutPostRedisplay(); - } -} - -/* ARGSUSED1 */ -static void -keyboard(unsigned char c, int x, int y) -{ - switch (c) { - case 27: /* Escape quits. */ - exit(0); - break; - case 'R': /* Simplistic benchmarking. */ - case 'r': - reportSpeed = !reportSpeed; - break; - case ' ': /* Spacebar toggles caustic rippling motion. */ - causticMotion = !causticMotion; - updateIdleFunc(); - break; - } -} - -void -menuSelect(int value) -{ - switch (value) { - case M_POSITIONAL: - directionalLight = 0; - break; - case M_DIRECTIONAL: - directionalLight = 1; - break; - case M_GREENISH_LIGHT: - lightDiffuseColor[0] = 1.0; - lightDiffuseColor[1] = 1.5; /* XXX Green = 1.5 */ - lightDiffuseColor[2] = 1.0; - glLightfv(GL_LIGHT0, GL_DIFFUSE, lightDiffuseColor); - break; - case M_WHITE_LIGHT: - lightDiffuseColor[0] = 1.5; /* XXX Red = 1.5 */ - lightDiffuseColor[1] = 1.5; /* XXX Green = 1.5 */ - lightDiffuseColor[2] = 1.5; /* XXX Blue = 1.5 */ - glLightfv(GL_LIGHT0, GL_DIFFUSE, lightDiffuseColor); - break; - case M_WITH_CAUSTICS: - showCaustics = 1; - updateIdleFunc(); - break; - case M_NO_CAUSTICS: - showCaustics = 0; - updateIdleFunc(); - break; - case M_SWITCH_MODEL: - object = (object + 1) % 3; - break; - case M_INCREASE_RIPPLE_SIZE: - causticScale /= 1.5; - break; - case M_DECREASE_RIPPLE_SIZE: - causticScale *= 1.5; - break; - } - glutPostRedisplay(); -} - -int -main(int argc, char **argv) -{ - int width, height; - int i; - GLubyte *imageData; - - glutInit(&argc, argv); - for (i=1; i -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=underwater - 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 "underwater.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 "underwater.mak" CFG="underwater - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "underwater - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "underwater - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "underwater - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "underwater - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "underwater - Win32 Release" -# Name "underwater - Win32 Debug" -# Begin Source File - -SOURCE=.\dino.c -# End Source File -# Begin Source File - -SOURCE=.\dino.h -# End Source File -# Begin Source File - -SOURCE=.\texload.c -# End Source File -# Begin Source File - -SOURCE=.\texload.h -# End Source File -# Begin Source File - -SOURCE=.\underwater.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/demos/walker/Imakefile b/lib/glut-3.7.6/progs/demos/walker/Imakefile deleted file mode 100644 index 22594c9b0..000000000 --- a/lib/glut-3.7.6/progs/demos/walker/Imakefile +++ /dev/null @@ -1,15 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1994. */ - -#include "../../../Glut.cf" - -TARGETS = walker - -SRCS = models.c walker.c walkviewer.c -OBJS = models.o walker.o walkviewer.o - -AllTarget($(TARGETS)) - -NormalGlutProgramTarget(walker,$(OBJS)) - -DependTarget() diff --git a/lib/glut-3.7.6/progs/demos/walker/Impossible.cset b/lib/glut-3.7.6/progs/demos/walker/Impossible.cset deleted file mode 100644 index 2bbe14bec..000000000 --- a/lib/glut-3.7.6/progs/demos/walker/Impossible.cset +++ /dev/null @@ -1,17 +0,0 @@ -5 -0 -7 -0.000000 0.087891 0.314453 0.416016 0.582031 0.798828 1.000000 -90.000000 32.378052 -477.987793 -252.987793 -31.646343 -416.707306 -652.682922 -10 -0.000000 0.126953 0.273438 0.330078 0.361328 0.687500 0.769531 0.845703 0.876953 1.000000 --39.146336 -35.487804 -305.304871 12.073175 270.000000 265.426819 115.426834 270.000000 -29.085360 -40.975601 -13 -0.000000 0.085938 0.248047 0.308594 0.365234 0.457812 0.507812 0.587891 0.730469 0.802734 0.865234 0.917969 1.000000 -0.000000 -30.182919 -30.182919 0.914639 0.914639 0.000000 0.000000 32.012203 34.756104 0.000000 -21.036575 -22.865843 0.000000 -7 -0.000000 0.199219 0.025391 0.496094 0.980469 0.755859 1.000000 -0.000000 -8.414616 587.012207 590.670776 596.158569 13.536610 0.000000 -7 -0.000000 0.291016 0.250000 0.457031 0.599609 1.000000 1.000000 -10.609768 810.000000 5.121963 -79.939011 -89.999992 460.609741 11.524401 diff --git a/lib/glut-3.7.6/progs/demos/walker/MrFlex.cset b/lib/glut-3.7.6/progs/demos/walker/MrFlex.cset deleted file mode 100644 index d31d10014..000000000 --- a/lib/glut-3.7.6/progs/demos/walker/MrFlex.cset +++ /dev/null @@ -1,17 +0,0 @@ -5 -0 -7 -0.000000 0.073308 0.289062 0.501953 0.657895 0.854369 1.000000 -0.000000 45.182926 57.987804 0.365853 -55.426830 -53.597565 0.000000 -10 -0.000000 0.136719 0.207031 0.283203 0.462891 0.695489 0.817669 0.875940 0.916016 1.000000 --39.146336 -40.975601 -25.426826 -0.731707 78.841469 87.987808 2.926832 -40.060970 -49.207314 -40.975601 -4 -0.000000 0.212891 0.755859 1.000000 --89.634132 1.829277 -0.914623 -85.975601 -7 -0.000000 0.205374 0.362764 0.510557 0.650672 0.886756 1.000000 -0.000000 -44.999977 -62.378021 0.731733 60.182949 56.524414 0.000000 -10 -0.000000 0.080614 0.307102 0.325188 0.447368 0.584586 0.639098 0.680451 0.781955 1.000000 -47.195133 64.573181 49.024403 10.609768 -59.817059 -36.036572 -0.365843 29.817087 87.439034 46.280499 diff --git a/lib/glut-3.7.6/progs/demos/walker/Ouch.cset b/lib/glut-3.7.6/progs/demos/walker/Ouch.cset deleted file mode 100644 index e199a9145..000000000 --- a/lib/glut-3.7.6/progs/demos/walker/Ouch.cset +++ /dev/null @@ -1,17 +0,0 @@ -5 -0 -10 -0.000000 0.054688 0.123047 0.253906 0.332031 0.482422 0.501953 0.742188 0.828125 1.000000 -0.000000 90.000000 90.000000 74.451218 90.000000 90.000000 0.365853 -373.719513 -45.365852 0.000000 -10 -0.000000 0.136719 0.250000 0.318359 0.421875 0.646484 0.761719 0.816406 0.916016 1.000000 --39.146336 -40.975601 -29.999992 -1.646340 79.756104 59.634148 -4.390240 -20.853649 -49.207314 -40.975601 -7 -0.000000 0.072266 0.205078 0.246094 0.460938 0.652344 1.000000 -0.000000 450.000000 424.390259 110.111908 -450.000000 -438.109802 0.000000 -7 -0.000000 0.107422 0.330078 0.449219 0.544922 0.839844 1.000000 -0.000000 -234.329239 -264.512146 461.707336 591.585388 -232.499969 0.000000 -4 -0.000000 0.187500 0.023438 1.000000 -10.609768 -89.999992 261.219513 11.524401 diff --git a/lib/glut-3.7.6/progs/demos/walker/README b/lib/glut-3.7.6/progs/demos/walker/README deleted file mode 100644 index 0f115e017..000000000 --- a/lib/glut-3.7.6/progs/demos/walker/README +++ /dev/null @@ -1,119 +0,0 @@ - -last updated 11/2/95 - -BACKGROUND ----------- - -Walker is a program I wrote with Kanishka Agarwal for our final project -in our graphics class while we were at Harvey Mudd College. I did most -of the viewing, UI, and internals, while Kanishka concentrated on the model. -We both came up with different .cset (curve set) files which make the guy -do various things. We spent dozens of minutes marching around the graphics -lab trying to figure out just how people walk. It was not a rigorous effort. - -The program is for modeling human(oid) motion with forward kinetics. -Forward kinetics basically means it does nothing cool for you with respect -to how people really move, how articulated linkages move, or how gravity -works. You must specify the angular displacement of each joint at each -point in time. Also, our model only has 5 joints. AND each joint only -has one degree of freedom. - -Okay, so enough about why it sucks; it is cool because you can put together -some neat little animation sequences and it is fun to play with the curves -and see immediate feedback. Plus you can spin the guy around really fast -while he's running: if that's not the sign of a quality graphics program -I don't know what is. And it illustrates how to do an app in GLUT with -simultaneous 2D and 3D displays/interfaces. - -INSTRUCTIONS ------------- - -Basically you've got two windows. One shows the guy; one shows the rotation -curves. You know SGI demos: just click around with all three mouse buttons -on anything that looks interesting and you'll figure it out. - -MORE INSTRUCTIONS ------------------ - -All I can think of to add are keyboard commands. I have not used the program -myself it several months and can't really remember how to use it. But it -was easy I remember that. Here are keyboard commands you might have missed: - -In 3D window, viewer keys: - 0-9 and +/- to change speed when in FLYING MODE - (Careful use of flying mode and you can pretend the guy actually - is moving as he's flailing his legs. Or, edit the program so it'll - take another curve which isn't a rotation but a displacement. - For BONUS POINTS: Have the program compute this based on the - rotation curves of the three leg joints.) -In 3D window, walker keys: - f, F: step forward 1, 5 time step(s) - b, B: step backward 1, 5 time step(s) - spacebar: step forward one time step -In 2D (curves) window: - same as 3D window walker keys plus: - 1-5: edit curve #1-5 - d: stop edit curves - -Remember, each of the three buttons in each window does something. I think. -There are pop-up menus, I know that much. - -POINTERS --------- - -We researched a number of sources before writing this, but I think our main -reference was this book: - Advanced Animation and Rendering Techniques - Theory and Practice - Alan Watt, Mark Watt - Addison-Wesley (ACM Press) 1992 -Whatever else we read we probably got from a citation in that book. - -But hey if it's on paper it's probably out of date, right? No, but -try these anyway: - http://www.cc.gatech.edu/gvu/animation/ - http://robotics.stanford.edu/users/kuffner/human.html - http://market.net/literary/mkp/pages/1554/index.html - -DIRECTORY LISTING ------------------ - 483 May 15 04:05 Makefile - - 324 May 15 04:03 walker.h -28346 May 15 03:59 walker.c - most everything, callbacks for both windows - (except AGV for the model window) - -17601 May 15 04:00 models.c - models, wireframe, solid rectangles, and - cylinders/spheres. Colors could use a little - work! And you could plug in a totally -different - model and make that work too. - - 3435 May 12 16:19 walkviewer.h -13095 May 12 16:19 walkviewer.c - basically AGV (a GLUT viewer) - - 928 May 12 16:19 walking.cset - curves we did... - 809 May 12 16:19 running.cset - 762 May 12 16:19 bound.cset - 978 May 12 16:19 moonwalk.cset - 1177 May 12 16:19 dunk.cset - 1236 May 12 16:19 reverse_dunk.cset - 924 May 12 16:19 kick.cset - 882 May 12 16:19 Impossible.cset - 754 May 12 16:19 MrFlex.cset - 767 May 12 16:19 Ouch.cset - -AUTHORS -------- -Kanishka Agarwal - whereabouts unknown - (to me anyway, but I could track him down if need be) -Philip Winston - pwinston@hmc.edu - http://www.cs.hmc.edu/~pwinston/ - Email me your .cset files! (unless they're worse than ours) - Also email me if you modify the program substantially or - play with it as a means of procrastination. I'm just - curious. -Ran Libeskind-Hadas - hadas@cs.hmc.edu - http://www.cs.hmc.edu/~hadas/ - (He didn't write any code, but he taught the class. - Plus he's a cool guy.) - diff --git a/lib/glut-3.7.6/progs/demos/walker/bound.cset b/lib/glut-3.7.6/progs/demos/walker/bound.cset deleted file mode 100644 index 61ef2af2f..000000000 --- a/lib/glut-3.7.6/progs/demos/walker/bound.cset +++ /dev/null @@ -1,17 +0,0 @@ -5 -0 -7 -0.000000 0.087891 0.416016 0.501953 0.574219 0.958254 1.000000 -0.000000 32.378052 26.890245 0.365853 -31.646343 -52.682919 0.000000 -7 -0.000000 0.377609 0.333966 0.603416 0.776091 0.884250 1.000000 --45.548779 42.256100 -94.024384 -41.890236 13.902442 -35.487804 -46.463413 -10 -0.000000 0.085938 0.225806 0.297913 0.398482 0.455408 0.525617 0.910816 0.888046 1.000000 --8.231699 -30.182919 -47.560974 -13.719510 39.329273 36.585373 22.865858 -116.158531 8.231715 -12.804866 -7 -0.000000 0.253906 0.300781 0.466797 0.867188 0.792969 1.000000 -22.682949 -97.134117 45.548805 23.597588 -66.036568 38.231731 24.512220 -7 -0.000000 0.322581 0.250474 0.493359 0.802657 0.643264 1.000000 -51.768307 131.341476 -44.268284 43.536598 118.536598 -57.987793 46.280499 diff --git a/lib/glut-3.7.6/progs/demos/walker/dunk.cset b/lib/glut-3.7.6/progs/demos/walker/dunk.cset deleted file mode 100644 index ac8e2754d..000000000 --- a/lib/glut-3.7.6/progs/demos/walker/dunk.cset +++ /dev/null @@ -1,17 +0,0 @@ -5 -1 -13 -0.000000 0.003731 0.250000 0.313433 0.421642 0.475746 0.621269 0.700190 0.802239 0.833955 0.854478 0.988615 1.000000 -25.975613 -31.646343 -46.280487 -20.670734 90.000000 88.170731 3.109758 -41.707321 7.682930 18.658541 30.548784 53.414635 28.719511 -13 -0.000000 0.050373 0.203358 0.345149 0.481973 0.432836 0.548387 0.609108 0.701493 0.750000 0.863806 0.874763 1.000000 --51.036579 109.024391 -135.182922 -72.073166 -44.634148 -6.219506 -5.304873 -8.963406 -23.597561 -28.170727 -24.512194 -143.414627 -55.609745 -10 -0.000000 0.018018 0.138672 0.376471 0.472656 0.386194 0.569030 0.597015 0.946869 1.000000 -24.695131 -79.573158 -57.621941 -65.853653 -60.365849 99.695129 -55.792671 -97.865845 82.317078 26.524397 -10 -0.000000 0.037109 0.044922 0.271484 0.378906 0.335821 0.470149 0.929791 0.673624 1.000000 -39.146362 63.841484 215.670746 195.548798 187.317093 94.939049 99.512215 250.426849 15.365876 32.743923 -13 -0.000000 0.259766 0.152344 0.348881 0.382463 0.386719 0.464844 0.542910 0.588060 0.743833 0.833017 0.921875 1.000000 -27.073183 11.524401 156.951233 103.902451 -21.402430 16.097572 4.207329 15.182940 22.071266 37.134159 212.743912 32.560989 27.987816 diff --git a/lib/glut-3.7.6/progs/demos/walker/kick.cset b/lib/glut-3.7.6/progs/demos/walker/kick.cset deleted file mode 100644 index d0dfc8474..000000000 --- a/lib/glut-3.7.6/progs/demos/walker/kick.cset +++ /dev/null @@ -1,17 +0,0 @@ -5 -0 -10 -0.000000 0.064453 0.201172 0.297656 0.365234 0.357422 0.458984 0.466797 0.855446 1.000000 --13.353657 -230.121948 84.512192 76.280487 68.048782 65.304878 0.000000 -12.439023 1.280487 -6.951213 -13 -0.000000 0.023438 0.109375 0.173828 0.218750 0.210938 0.320312 0.372277 0.433663 0.533203 0.556641 0.660156 1.000000 -0.000000 -72.073166 -95.853653 -30.656534 -25.426826 -2.560973 2.012198 -20.853649 -18.109749 -7.134140 -0.731707 -3.475606 0.000000 -4 -0.000000 0.200000 0.800000 1.000000 -0.000000 0.000000 0.000000 0.000000 -13 -0.000000 0.031683 0.178218 0.283168 0.378218 0.423828 0.552475 0.659406 0.639604 0.776238 0.855446 0.835938 1.000000 -3.475633 67.500023 96.768318 -46.829247 -77.926811 132.439041 -44.999977 -83.414612 53.780510 53.780510 50.121975 -2.012172 0.731733 -7 -0.000000 0.105469 0.251953 0.501953 0.625000 0.800781 1.000000 -0.000000 121.280495 101.158546 -1.280476 50.853668 92.012207 0.000000 diff --git a/lib/glut-3.7.6/progs/demos/walker/models.c b/lib/glut-3.7.6/progs/demos/walker/models.c deleted file mode 100644 index 3c2c84c9c..000000000 --- a/lib/glut-3.7.6/progs/demos/walker/models.c +++ /dev/null @@ -1,691 +0,0 @@ -#include -#include -#include -#include - -#include "walker.h" - - - /* for cube models */ -#define UPPER_LEG_SIZE_C 0.45 -#define LOWER_LEG_SIZE_C 0.45 -#define UPPER_ARM_SIZE_C 0.4 -#define LOWER_ARM_SIZE_C 0.4 -#define FOOT_SIZE_C 0.2 -#define HEAD_SIZE_C 0.25 -#define TORSO_HEIGHT_C 0.8 -#define TORSO_WIDTH_C 0.5 -#define LEG_GIRTH_C 0.1 -#define ARM_GIRTH_C 0.05 - - /* for cylinder models */ -#define UPPER_LEG_SIZE 0.5 -#define LOWER_LEG_SIZE 0.5 -#define LEG_GIRTH 0.08 -#define UPPER_LEG_GIRTH 0.1 -#define UPPER_LEG_TAPER 0.8 -#define LOWER_LEG_TAPER 0.8 -#define LOWER_LEG_GIRTH 0.07 - -#define UPPER_ARM_SIZE 0.45 -#define LOWER_ARM_SIZE 0.45 -#define ARM_GIRTH 0.05 -#define UPPER_ARM_GIRTH 0.05 -#define LOWER_ARM_GIRTH 0.04 -#define UPPER_ARM_TAPER 0.8 -#define LOWER_ARM_TAPER 0.8 - -#define HIP_JOINT_SIZE 0.1 -#define KNEE_JOINT_SIZE 0.09 -#define SHOULDER_JOINT_SIZE 0.05 -#define ELBOW_JOINT_SIZE 0.045 - -#define HEAD_SIZE 0.2 -#define FOOT_SIZE 0.15 - -#define TORSO_HEIGHT 0.8 -#define TORSO_WIDTH 0.35 -#define TORSO_TAPER 0.7 - -#define STACKS 10 -#define SLICES 10 - -#define NUM_BODY_PARTS 7 - - -#define LEFT 0 -#define RIGHT 1 -#define SOLID 1 -#define WIRE 0 - - - -void DrawTheGuy_WC(void); -void DrawTheGuy_SC(void); -void draw_head_C(int solid); -void draw_torso_C(int solid); -void draw_leg_C(int which, int solid); -void draw_arm_C(int which, int solid); - -void StoreTheGuy_SL(void); -void DrawTheGuy_SL(void); -void draw_head_SL(void); -void draw_torso_SL(void); -void draw_leg_SL(int which); -void draw_arm_SL(int which); -void store_head_SL(void); -void store_torso_SL(void); -void store_uleg_SL(void); -void store_lleg_SL(void); -void store_foot_SL(void); -void store_uarm_SL(void); -void store_larm_SL(void); - -void StoreTheGuy_SL2(void); -void DrawTheGuy_SL2(void); -void draw_head_SL2(void); -void draw_torso_SL2(void); -void draw_leg_SL2(int which); -void draw_arm_SL2(int which); -void store_head_SL2(void); -void store_torso_SL2(void); -void store_uleg_SL2(void); -void store_lleg_SL2(void); -void store_foot_SL2(void); -void store_uarm_SL2(void); -void store_larm_SL2(void); - -/**************************************************************/ -void DrawTheGuy_WC(void) -{ - draw_head_C(WIRE); - draw_torso_C(WIRE); - draw_leg_C(LEFT, WIRE); - draw_leg_C(RIGHT, WIRE); - draw_arm_C(LEFT, WIRE); - draw_arm_C(RIGHT, WIRE); -} - -/**************************************************************/ -void DrawTheGuy_SC(void) -{ - GLfloat head_diffuse[] = { 0.7, 0.7, 0.0, 1.0 }; - GLfloat torso_diffuse[] = { 0.0, 0.7, 0.7, 1.0 }; - GLfloat leg_diffuse[] = { 0.7, 0.0, 0.7, 1.0 }; - GLfloat arm_diffuse[] = { 0.7, 0.4, 0.4, 1.0 }; - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, head_diffuse); - draw_head_C(SOLID); - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, torso_diffuse); - draw_torso_C(SOLID); - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, leg_diffuse); - draw_leg_C(LEFT, SOLID); - draw_leg_C(RIGHT, SOLID); - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, arm_diffuse); - draw_arm_C(LEFT, SOLID); - draw_arm_C(RIGHT, SOLID); -} - - - -/**********************************************************/ -void draw_head_C(int solid) -{ - glPushMatrix(); - glColor3f(1.0, 1.0, 0.0); - glTranslatef(0.0, TORSO_HEIGHT_C+(HEAD_SIZE_C/1.5), 0.0); - glScalef(HEAD_SIZE_C, HEAD_SIZE_C, LEG_GIRTH_C); - if (solid) - glutSolidCube(1.0); - else - glutWireCube(1.0); - glPopMatrix(); -} - -/**********************************************************/ -void draw_torso_C(int solid) -{ - glPushMatrix(); - glColor3f(0.0, 1.0, 1.0); - glTranslatef(0.0, TORSO_HEIGHT_C/2.0, 0.0); - glScalef(TORSO_WIDTH_C, TORSO_HEIGHT_C, LEG_GIRTH_C); - if (solid) - glutSolidCube(1.0); - else - glutWireCube(1.0); - glPopMatrix(); -} - -/**********************************************************/ -void draw_leg_C(int which, int solid) -{ - glPushMatrix(); - if (which == 0) - glTranslatef(TORSO_WIDTH_C/4.0, 0.0, 0.0); - else glTranslatef(-TORSO_WIDTH_C/4.0, 0.0, 0.0); - /* Upper leg: rotates about the x axis only */ - glColor3f(1.0, 0.0, 0.0); - glRotatef(Walk_cycle[which][0][Step],1.0, 0.0, 0.0); - glPushMatrix(); - glTranslatef(0.0, -UPPER_LEG_SIZE_C/2.0, 0.0); - glScalef(LEG_GIRTH_C, UPPER_LEG_SIZE_C, LEG_GIRTH_C); - if (solid) - glutSolidCube(1.0); - else - glutWireCube(1.0); - glPopMatrix(); - - /* Lower leg: rotates about the x axis only */ - glColor3f(0.0, 1.0, 0.0); - glTranslatef(0.0, -(UPPER_LEG_SIZE_C+LOWER_LEG_SIZE_C)/2.0, 0.0); - glRotatef(Walk_cycle[which][1][Step], 1.0, 0.0, 0.0); - glPushMatrix(); - glTranslatef(0.0, -LOWER_LEG_SIZE_C/2.0, 0.0); - glScalef(LEG_GIRTH_C, LOWER_LEG_SIZE_C, LEG_GIRTH_C); - if (solid) - glutSolidCube(1.0); - else - glutWireCube(1.0); - glPopMatrix(); - - /* Foot: rotates about the x axis only */ - glColor3f(0.0, 0.0, 1.0); - - glTranslatef(0.0, -(UPPER_LEG_SIZE_C+LOWER_LEG_SIZE_C+LEG_GIRTH_C)/2.0, 0.0); - glRotatef(Walk_cycle[which][2][Step], 1.0, 0.0, 0.0); - glPushMatrix(); - glTranslatef(0.0, -LEG_GIRTH_C/2.0, -FOOT_SIZE_C/4.0); - glScalef(LEG_GIRTH_C, LEG_GIRTH_C, FOOT_SIZE_C); - if (solid) - glutSolidCube(1.0); - else - glutWireCube(1.0); - glPopMatrix(); - - glPopMatrix(); -} - -/*********************************************************************/ -void draw_arm_C(int which, int solid) -{ - int arm_which; - - if (which == 1) - arm_which = 1; - else arm_which = 0; - - glPushMatrix(); - glTranslatef(0.0, TORSO_HEIGHT_C, 0.0); - if (which == 0) - glTranslatef(TORSO_WIDTH_C/1.5, 0.0, 0.0); - else glTranslatef(-TORSO_WIDTH_C/1.5, 0.0, 0.0); - /* Upper leg: rotates about the x axis only */ - glColor3f(1.0, 0.0, 0.0); - glRotatef(Walk_cycle[arm_which][3][Step],1.0, 0.0, 0.0); - glPushMatrix(); - glTranslatef(0.0, -UPPER_ARM_SIZE_C/2.0, 0.0); - glScalef(ARM_GIRTH_C, UPPER_ARM_SIZE_C, ARM_GIRTH_C); - if (solid) - glutSolidCube(1.0); - else - glutWireCube(1.0); - glPopMatrix(); - - /* Lower leg: rotates about the x axis only */ - glColor3f(0.0, 1.0, 0.0); - glTranslatef(0.0, -(UPPER_ARM_SIZE_C+LOWER_ARM_SIZE_C)/2.0, 0.0); - glRotatef(Walk_cycle[arm_which][4][Step], 1.0, 0.0, 0.0); - glPushMatrix(); - glTranslatef(0.0, -LOWER_ARM_SIZE_C/2.0, 0.0); - glScalef(ARM_GIRTH_C, LOWER_ARM_SIZE_C, ARM_GIRTH_C); - if (solid) - glutSolidCube(1.0); - else - glutWireCube(1.0); - glPopMatrix(); - - glPopMatrix(); -} - - - - -GLUquadricObj *quadObj; -GLuint body_lists; - -/**************************************************************/ -void StoreTheGuy_SL(void) -{ - quadObj = gluNewQuadric(); - - body_lists = glGenLists(NUM_BODY_PARTS); - - glNewList(body_lists, GL_COMPILE); - store_head_SL(); - glEndList(); - - glNewList(body_lists+1, GL_COMPILE); - store_torso_SL(); - glEndList(); - - glNewList(body_lists+2, GL_COMPILE); - store_uleg_SL(); - glEndList(); - - glNewList(body_lists+3, GL_COMPILE); - store_lleg_SL(); - glEndList(); - - glNewList(body_lists+4, GL_COMPILE); - store_foot_SL(); - glEndList(); - - glNewList(body_lists+5, GL_COMPILE); - store_uarm_SL(); - glEndList(); - - glNewList(body_lists+6, GL_COMPILE); - store_larm_SL(); - glEndList(); - -} - -/**********************************************************/ -void store_head_SL(void) -{ - glPushMatrix(); - glTranslatef(0.0, TORSO_HEIGHT+HEAD_SIZE, 0.0); - glScalef(HEAD_SIZE, HEAD_SIZE, LEG_GIRTH); - glutSolidSphere(1.0, SLICES, STACKS); - glPopMatrix(); -} - -/**********************************************************/ -void store_torso_SL(void) -{ - glPushMatrix(); - glScalef(TORSO_WIDTH, TORSO_HEIGHT, LEG_GIRTH); - glRotatef(-90.0, 1.0, 0.0, 0.0); - gluCylinder(quadObj, TORSO_TAPER, 1.0, 1.0, SLICES, STACKS); - glPopMatrix(); -} - -/**************************************************************/ -void store_uleg_SL(void) -{ - glPushMatrix(); - glScalef(LEG_GIRTH, UPPER_LEG_SIZE, LEG_GIRTH); - glRotatef(90.0, 1.0, 0.0, 0.0); - gluCylinder(quadObj, 1.0, 1.0, 1.0, SLICES, STACKS); - glPopMatrix(); -} - -/**************************************************************/ -void store_lleg_SL(void) -{ - glPushMatrix(); - glScalef(LEG_GIRTH, LOWER_LEG_SIZE, LEG_GIRTH); - glRotatef(90.0, 1.0, 0.0, 0.0); - gluCylinder(quadObj, 1.0, 1.0, 1.0, SLICES, STACKS); - glPopMatrix(); -} - -/**************************************************************/ -void store_foot_SL(void) -{ - glPushMatrix(); - glTranslatef(0.0, 0.0, -FOOT_SIZE/2.0); - glScalef(LEG_GIRTH, LEG_GIRTH, FOOT_SIZE); - glRotatef(90.0, 1.0, 0.0, 0.0); - gluCylinder(quadObj, 1.0, 1.0, 1.0, SLICES, STACKS); - glPopMatrix(); -} - -/**************************************************************/ -void store_uarm_SL(void) -{ - glPushMatrix(); - glScalef(ARM_GIRTH, UPPER_ARM_SIZE, ARM_GIRTH); - glRotatef(90.0, 1.0, 0.0, 0.0); - gluCylinder(quadObj, 1.0, 1.0, 1.0, SLICES, STACKS); - glPopMatrix(); -} - -/**************************************************************/ -void store_larm_SL(void) -{ - glPushMatrix(); - glScalef(ARM_GIRTH, LOWER_ARM_SIZE, ARM_GIRTH); - glRotatef(90.0, 1.0, 0.0, 0.0); - gluCylinder(quadObj, 1.0, 1.0, 1.0, SLICES, STACKS); - glPopMatrix(); -} - -/**************************************************************/ -void DrawTheGuy_SL(void) -{ - GLfloat head_diffuse[] = { 0.7, 0.7, 0.0, 1.0 }; - GLfloat torso_diffuse[] = { 0.0, 0.7, 0.7, 1.0 }; - GLfloat leg_diffuse[] = { 0.7, 0.0, 0.7, 1.0 }; - GLfloat arm_diffuse[] = { 0.7, 0.4, 0.4, 1.0 }; - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, head_diffuse); - draw_head_SL(); - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, torso_diffuse); - draw_torso_SL(); - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, leg_diffuse); - draw_leg_SL(0); - draw_leg_SL(1); - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, arm_diffuse); - draw_arm_SL(0); - draw_arm_SL(1); - -} - -/**********************************************************/ -void draw_head_SL(void) -{ - glPushMatrix(); - glCallList(body_lists); - glPopMatrix(); -} - -/**********************************************************/ -void draw_torso_SL(void) -{ - glPushMatrix(); - glCallList(body_lists+1); - glPopMatrix(); -} - -/**********************************************************/ -void draw_leg_SL(int which) -{ - glPushMatrix(); - if (which == 0) - glTranslatef(TORSO_TAPER*TORSO_WIDTH/2.0, 0.0, 0.0); - else glTranslatef(-TORSO_TAPER*TORSO_WIDTH/2.0, 0.0, 0.0); - /* Upper leg: rotates about the x axis only */ - glRotatef(Walk_cycle[which][0][Step],1.0, 0.0, 0.0); - glPushMatrix(); - glCallList(body_lists+2); - glPopMatrix(); - - /* Lower leg: rotates about the x axis only */ - glTranslatef(0.0, -(UPPER_LEG_SIZE+LOWER_LEG_SIZE)/2.0, 0.0); - glRotatef(Walk_cycle[which][1][Step], 1.0, 0.0, 0.0); - glPushMatrix(); - glCallList(body_lists+3); - glPopMatrix(); - - /* Foot: rotates about the x axis only */ - glTranslatef(0.0, -(UPPER_LEG_SIZE+LOWER_LEG_SIZE+LEG_GIRTH)/2.0, 0.0); - glRotatef(Walk_cycle[which][2][Step], 1.0, 0.0, 0.0); - glPushMatrix(); - glCallList(body_lists+4); - glPopMatrix(); - - glPopMatrix(); -} - -/*********************************************************************/ -void draw_arm_SL(int which) -{ - int arm_which; - - if (which == 1) - arm_which = 1; - else arm_which = 0; - - glPushMatrix(); - glTranslatef(0.0, TORSO_HEIGHT, 0.0); - if (which == 0) - glTranslatef(TORSO_WIDTH, 0.0, 0.0); - else glTranslatef(-TORSO_WIDTH, 0.0, 0.0); - /* Upper leg: rotates about the x axis only */ - glRotatef(Walk_cycle[arm_which][3][Step],1.0, 0.0, 0.0); - glPushMatrix(); - glCallList(body_lists+5); - glPopMatrix(); - - /* Lower leg: rotates about the x axis only */ - glTranslatef(0.0, -(UPPER_ARM_SIZE+LOWER_ARM_SIZE)/2.0, 0.0); - glRotatef(Walk_cycle[arm_which][4][Step], 1.0, 0.0, 0.0); - glPushMatrix(); - glCallList(body_lists+6); - glPopMatrix(); - - glPopMatrix(); -} - - - -GLUquadricObj *quadObj2; -GLuint body_lists2; - -/**************************************************************/ -void StoreTheGuy_SL2(void) -{ - quadObj2 = gluNewQuadric(); - - body_lists2 = glGenLists(NUM_BODY_PARTS); - - glNewList(body_lists2, GL_COMPILE); - store_head_SL2(); - glEndList(); - - glNewList(body_lists2+1, GL_COMPILE); - store_torso_SL2(); - glEndList(); - - glNewList(body_lists2+2, GL_COMPILE); - store_uleg_SL2(); - glEndList(); - - glNewList(body_lists2+3, GL_COMPILE); - store_lleg_SL2(); - glEndList(); - - glNewList(body_lists2+4, GL_COMPILE); - store_foot_SL2(); - glEndList(); - - glNewList(body_lists2+5, GL_COMPILE); - store_uarm_SL2(); - glEndList(); - - glNewList(body_lists2+6, GL_COMPILE); - store_larm_SL2(); - glEndList(); - -} - -/**********************************************************/ -void store_head_SL2(void) -{ - glPushMatrix(); - glTranslatef(0.0, TORSO_HEIGHT+HEAD_SIZE, 0.0); - glScalef(HEAD_SIZE, HEAD_SIZE, UPPER_LEG_GIRTH); - glutSolidSphere(1.0, SLICES, STACKS); - glPopMatrix(); -} - -/**********************************************************/ -void store_torso_SL2(void) -{ - glPushMatrix(); - glScalef(TORSO_WIDTH, TORSO_HEIGHT, UPPER_LEG_GIRTH); - glRotatef(-90.0, 1.0, 0.0, 0.0); - gluCylinder(quadObj2, TORSO_TAPER, 1.0, 1.0, SLICES, STACKS); - glPopMatrix(); -} - -/**************************************************************/ -void store_uleg_SL2(void) -{ - glPushMatrix(); - glTranslatef(0.0, -(HIP_JOINT_SIZE+UPPER_LEG_SIZE), 0.0); - glutSolidSphere(KNEE_JOINT_SIZE, SLICES, STACKS); - glPopMatrix(); - glTranslatef(0.0, -HIP_JOINT_SIZE, 0.0); - glutSolidSphere(HIP_JOINT_SIZE, SLICES, STACKS); - glPushMatrix(); - glScalef(UPPER_LEG_GIRTH, UPPER_LEG_SIZE, UPPER_LEG_GIRTH); - glRotatef(90.0, 1.0, 0.0, 0.0); - gluCylinder(quadObj2, 1.0, UPPER_LEG_TAPER, 1.0, SLICES, STACKS); - glPopMatrix(); -} - -/**************************************************************/ -void store_lleg_SL2(void) -{ - glPushMatrix(); - glScalef(LOWER_LEG_GIRTH, LOWER_LEG_SIZE, LOWER_LEG_GIRTH); - glRotatef(90.0, 1.0, 0.0, 0.0); - gluCylinder(quadObj2, 1.0, LOWER_LEG_TAPER, 1.0, SLICES, STACKS); - glPopMatrix(); -} - -/**************************************************************/ -void store_foot_SL2(void) -{ - glPushMatrix(); - glTranslatef(0.0, 0.0, -FOOT_SIZE/2.0); - glScalef(LOWER_LEG_GIRTH, LOWER_LEG_GIRTH, FOOT_SIZE); - glRotatef(90.0, 1.0, 0.0, 0.0); - gluCylinder(quadObj2, 1.0, 1.0, 1.0, SLICES, STACKS); - glPopMatrix(); -} - -/**************************************************************/ -void store_uarm_SL2(void) -{ - glPushMatrix(); - glTranslatef(0.0, -(SHOULDER_JOINT_SIZE+UPPER_ARM_SIZE), 0.0); - glutSolidSphere(ELBOW_JOINT_SIZE, SLICES, STACKS); - glPopMatrix(); - glTranslatef(0.0, -SHOULDER_JOINT_SIZE, 0.0); - glutSolidSphere(SHOULDER_JOINT_SIZE, SLICES, STACKS); - glPushMatrix(); - glScalef(UPPER_ARM_GIRTH, UPPER_ARM_SIZE, UPPER_ARM_GIRTH); - glRotatef(90.0, 1.0, 0.0, 0.0); - gluCylinder(quadObj2, 1.0, UPPER_ARM_TAPER, 1.0, SLICES, STACKS); - glPopMatrix(); -} - -/**************************************************************/ -void store_larm_SL2(void) -{ - glPushMatrix(); - glScalef(LOWER_ARM_GIRTH, LOWER_ARM_SIZE, LOWER_ARM_GIRTH); - glRotatef(90.0, 1.0, 0.0, 0.0); - gluCylinder(quadObj2, 1.0, LOWER_ARM_TAPER, 1.0, SLICES, STACKS); - glPopMatrix(); -} - -/**************************************************************/ -void DrawTheGuy_SL2(void) -{ - GLfloat head_diffuse[] = { 0.7, 0.7, 0.0, 1.0 }; - GLfloat torso_diffuse[] = { 0.0, 0.7, 0.7, 1.0 }; - GLfloat leg_diffuse[] = { 0.7, 0.0, 0.7, 1.0 }; - GLfloat arm_diffuse[] = { 0.7, 0.4, 0.4, 1.0 }; - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, head_diffuse); - draw_head_SL2(); - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, torso_diffuse); - draw_torso_SL2(); - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, leg_diffuse); - draw_leg_SL2(0); - draw_leg_SL2(1); - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, arm_diffuse); - draw_arm_SL2(0); - draw_arm_SL2(1); - -} - -/**********************************************************/ -void draw_head_SL2(void) -{ - glPushMatrix(); - glCallList(body_lists2); - glPopMatrix(); -} - -/**********************************************************/ -void draw_torso_SL2(void) -{ - glPushMatrix(); - glCallList(body_lists2+1); - glPopMatrix(); -} - -/**********************************************************/ -void draw_leg_SL2(int which) -{ - glPushMatrix(); - if (which == 0) - glTranslatef(TORSO_TAPER*TORSO_WIDTH/2.0, 0.0, 0.0); - else glTranslatef(-TORSO_TAPER*TORSO_WIDTH/2.0, 0.0, 0.0); - /* UPPER leg: rotates about the x axis only */ - glRotatef(Walk_cycle[which][0][Step],1.0, 0.0, 0.0); - glPushMatrix(); - glCallList(body_lists2+2); - glPopMatrix(); - - /* LOWER leg: rotates about the x axis only */ - glTranslatef(0.0, -(UPPER_LEG_SIZE+KNEE_JOINT_SIZE), 0.0); - glRotatef(Walk_cycle[which][1][Step], 1.0, 0.0, 0.0); - glPushMatrix(); - glCallList(body_lists2+3); - glPopMatrix(); - - /* Foot: rotates about the x axis only */ - glTranslatef(0.0, -(UPPER_LEG_SIZE+LOWER_LEG_SIZE+LOWER_LEG_GIRTH)/2.0, 0.0); - glRotatef(Walk_cycle[which][2][Step], 1.0, 0.0, 0.0); - glPushMatrix(); - glCallList(body_lists2+4); - glPopMatrix(); - - glPopMatrix(); -} - -/*********************************************************************/ -void draw_arm_SL2(int which) -{ - int arm_which; - - if (which == 1) - arm_which = 1; - else arm_which = 0; - - glPushMatrix(); - glTranslatef(0.0, TORSO_HEIGHT, 0.0); - if (which == 0) - glTranslatef(TORSO_WIDTH, 0.0, 0.0); - else glTranslatef(-TORSO_WIDTH, 0.0, 0.0); - /* UPPER leg: rotates about the x axis only */ - glRotatef(Walk_cycle[arm_which][3][Step],1.0, 0.0, 0.0); - glPushMatrix(); - glCallList(body_lists2+5); - glPopMatrix(); - - /* LOWER leg: rotates about the x axis only */ - glTranslatef(0.0, -(UPPER_ARM_SIZE+ELBOW_JOINT_SIZE), 0.0); - glRotatef(Walk_cycle[arm_which][4][Step], 1.0, 0.0, 0.0); - glPushMatrix(); - glCallList(body_lists2+6); - glPopMatrix(); - - glPopMatrix(); -} - diff --git a/lib/glut-3.7.6/progs/demos/walker/moonwalk.cset b/lib/glut-3.7.6/progs/demos/walker/moonwalk.cset deleted file mode 100644 index ee621aa3d..000000000 --- a/lib/glut-3.7.6/progs/demos/walker/moonwalk.cset +++ /dev/null @@ -1,17 +0,0 @@ -5 -0 -13 -0.000000 0.074148 0.179704 0.384778 0.431641 0.488372 0.570312 0.591797 0.744141 0.800781 0.830078 0.923848 1.000000 -36.951221 43.353661 -45.095142 -26.067659 -17.012190 -31.775906 -5.121946 5.853658 -5.121946 5.853658 21.402439 38.780487 37.865856 -10 -0.000000 0.048096 0.250000 0.298828 0.341797 0.726562 0.763672 0.821643 0.887776 1.000000 --69.329269 -71.158531 -29.999992 -8.963406 3.841465 0.182932 -8.963406 -28.170727 -72.073166 -72.073166 -10 -0.000000 0.212891 0.242485 0.324649 0.374649 0.402806 0.488978 0.625251 0.755859 1.000000 --21.951210 1.829277 23.780493 22.865858 10.557125 6.402444 7.317082 2.743911 -0.914623 -20.121943 -7 -0.000000 0.206413 0.360721 0.510557 0.635271 0.861723 1.000000 -0.000000 -39.512169 -34.939003 0.731733 14.451243 10.792705 0.000000 -10 -0.000000 0.046092 0.264529 0.318637 0.460922 0.545090 0.639098 0.699399 0.801603 1.000000 -40.792694 47.195133 29.817087 0.548791 5.121963 2.378063 -0.365843 19.756111 51.768307 46.280499 diff --git a/lib/glut-3.7.6/progs/demos/walker/reverse_dunk.cset b/lib/glut-3.7.6/progs/demos/walker/reverse_dunk.cset deleted file mode 100644 index 2862cc07d..000000000 --- a/lib/glut-3.7.6/progs/demos/walker/reverse_dunk.cset +++ /dev/null @@ -1,17 +0,0 @@ -5 -1 -16 -0.000000 0.016453 0.087751 0.137112 0.224863 0.303474 0.340037 0.393053 0.396709 0.446069 0.528336 0.586837 0.712980 0.775137 0.972973 1.000000 -25.975613 -6.951213 -1.463413 11.967102 21.402439 11.341463 51.585369 74.451218 80.853661 81.768295 66.219513 -39.878044 -8.780490 32.378052 52.500000 28.719511 -13 -0.000000 0.036563 0.113346 0.173675 0.382084 0.261860 0.416216 0.449715 0.715625 0.765625 0.890090 0.953153 1.000000 --51.036579 67.865860 -70.243896 -23.597561 -14.451217 -163.536606 -77.560966 46.829273 -42.016987 -52.290615 -91.280487 -110.487808 -55.609745 -10 -0.000000 0.018018 0.138672 0.376471 0.472656 0.402344 0.578125 0.626953 0.849609 1.000000 -24.695131 -79.573158 -57.621941 -65.853653 -60.365849 74.085373 -2.878372 -23.780476 89.634155 26.524397 -10 -0.000000 0.037109 0.090090 0.147748 0.279297 0.284685 0.425781 0.559415 0.586837 1.000000 -39.146362 63.841484 199.207336 156.219528 67.500023 194.634171 190.061005 191.890259 -59.634121 32.743923 -13 -0.000000 0.054054 0.099099 0.122523 0.192793 0.243243 0.304505 0.394595 0.414414 0.482883 0.612500 0.921875 1.000000 -27.073183 12.439039 22.500011 20.670744 175.243912 19.756111 14.268306 145.060989 105.731720 112.134155 97.228935 32.560989 27.987816 diff --git a/lib/glut-3.7.6/progs/demos/walker/running.cset b/lib/glut-3.7.6/progs/demos/walker/running.cset deleted file mode 100644 index d4e519d3d..000000000 --- a/lib/glut-3.7.6/progs/demos/walker/running.cset +++ /dev/null @@ -1,17 +0,0 @@ -5 -0 -7 -0.000000 0.100990 0.352475 0.496094 0.621094 0.896484 1.000000 -0.000000 72.621948 80.853661 -0.548780 -55.426830 -54.512196 0.000000 -7 -0.000000 0.154455 0.198020 0.374257 0.546875 0.641584 1.000000 --88.536575 -90.365852 -10.792684 -11.707316 -12.621950 -88.536575 -97.682922 -13 -0.000000 0.085938 0.089844 0.273438 0.367188 0.314453 0.457031 0.527344 0.558594 0.617188 0.697266 0.917969 1.000000 -0.000000 -30.182919 -27.439020 9.146349 9.146349 13.719521 14.634153 6.402444 55.792690 10.975616 -25.609753 -22.865843 0.000000 -7 -0.000000 0.077228 0.304951 0.466797 0.689109 0.831683 1.000000 -0.000000 -39.512169 -58.719490 0.000000 58.353680 45.548805 0.000000 -7 -0.000000 0.164356 0.217822 0.499010 0.924752 0.853465 1.000000 -27.073183 28.902449 81.036598 87.439034 98.414642 28.902449 28.902449 diff --git a/lib/glut-3.7.6/progs/demos/walker/walk_backwards.cset b/lib/glut-3.7.6/progs/demos/walker/walk_backwards.cset deleted file mode 100644 index 4c178ded3..000000000 --- a/lib/glut-3.7.6/progs/demos/walker/walk_backwards.cset +++ /dev/null @@ -1,17 +0,0 @@ -5 -0 -7 -0.000000 0.036053 0.225806 0.496994 0.537074 0.728653 1.000000 -0.365853 -3.292680 -50.853653 0.365853 5.853658 30.548784 -0.548780 -10 -0.000000 0.087287 0.220114 0.275142 0.294118 0.665331 0.770398 0.895636 0.941176 1.000000 --43.665245 -62.733047 -29.085360 -9.878039 0.182932 0.182932 -5.529653 -11.250000 -24.597456 -40.805080 -10 -0.000000 0.208729 0.246679 0.314991 0.339658 0.402806 0.488978 0.625251 0.755859 1.000000 --21.951210 -30.182919 -10.060966 14.300852 28.601704 6.402444 7.317082 2.743911 -0.914623 -20.121943 -7 -0.000000 0.206413 0.360721 0.510557 0.635271 0.861723 1.000000 -0.000000 -39.512169 -34.939003 0.731733 14.451243 10.792705 0.000000 -10 -0.000000 0.046092 0.264529 0.318637 0.460922 0.545090 0.639098 0.699399 0.801603 1.000000 -40.792694 47.195133 29.817087 0.548791 5.121963 2.378063 -0.365843 19.756111 51.768307 46.280499 diff --git a/lib/glut-3.7.6/progs/demos/walker/walker.c b/lib/glut-3.7.6/progs/demos/walker/walker.c deleted file mode 100644 index 4f33ed178..000000000 --- a/lib/glut-3.7.6/progs/demos/walker/walker.c +++ /dev/null @@ -1,1112 +0,0 @@ -#include -#include -#include -#include -#include -#ifdef _WIN32 -#include "win32_dirent.h" -/* Have to #undef LoadMenu or else Microsoft VC++ won't allow us to - redefine it. */ -#undef LoadMenu -#else -#include -#endif -#include - -#include "walker.h" - - - -#define MAX(x,y) ((x) > (y) ? (x) : (y)) -#define MIN(x,y) ((x) < (y) ? (x) : (y)) - -#define CYCLE_SIZE 100 -#define CYCLE_STEP 1.0/CYCLE_SIZE -#define OVERSAMPLE 10 - -#define MAX_CPOINTS 34 /* 2 end point ones and 10 in the middle */ - -#define MAX_CSETNAMELEN 25 - -#define NUM_JOINTS 5 - -#define CSET_EXT ".cset" -#define CSET_EXTLEN 5 - -#include "walkviewer.h" - - -typedef enum { CMENU_QUIT, CMENU_CURVE, CMENU_HORIZ, CMENU_RESET, - CMENU_WALK, CMENU_DONEEDIT, CMENU_SAVE, CMENU_LOAD, - CMENU_MIRROR - } CurveMenuChoices; - -typedef enum { WIRECUBE, SOLIDCUBE, CYLINDER1, CYLINDER2 } ModelTypes; - -int GuyModel = SOLIDCUBE; - -/***************************************************************/ -/*************************** GLOBALS ***************************/ -/***************************************************************/ - -GLuint HorizontalList, AxesList, /* Display lists */ - CurveLists, ControlPtsLists; /* Firsts of groups of display lists */ - -int CurveAsPoints = 0, /* Display curve as points? */ - DrawHorizontals = 0, /* Draw horizontal lines? */ - EditingCurve = -1; /* Editing what curve, -1 means none */ - -int CurveWindow, /* Glut window id's to two top level windows */ - GuyWindow; - -int MirrorLegs = 0; - -int CurveMenu = -1, - CurveEditMenu = -1, - StepSizeMenu = -1, - LoadMenu = -1, - SaveMenu = -1; - -char *CSetNames[MAX_CSETNAMELEN]; - -int CurrentCurve = -1; /* Curve loaded, index to CSetNames */ - -GLfloat Walk_cycle[2][NUM_JOINTS][CYCLE_SIZE]; /* array of computed angles */ - -int Step = CYCLE_SIZE/2; /* Position in cycle, start in middle */ - -float fStep = CYCLE_SIZE/2; /* floating point for non-integer steping */ -float IncStep = 1.0; - -typedef struct ControlPts { - int numpoints; - float xcoords[MAX_CPOINTS]; - float angles[MAX_CPOINTS]; -} tControlPts; - -tControlPts RotCurve[NUM_JOINTS]; /* series of cntrl points for ea joint */ - -int Walking = 0, /* Guy is walking? */ - ViewPerspective = 1, /* Perspective or orthographic views */ - DrawAxes = 0; /* Draw axes for alignment */ - -int CurveWWidth, /* Dimensions of curve window */ - CurveWHeight; - -int CurveDownBtn = -1, /* mouse stuff, for editing curves */ - WasWalking, - CurvePickedPoint = -1, - CurveLastX, - CurveLastY; - -int CurveWindowVisible = 1; - - - /* prototypes */ -void RedisplayBoth(void); -void IncrementStep(void); -void CurveCPointDrag(void); -void CurveHandleMenu(int value); -void StopWalking(void); -void CurveHandleEditMenu(int curve); -void ComputeCSetAndMakeLists(void); -int MakeLoadAndSaveMenus(void); -void CurveMenuInit(void); -void SetWindowTitles(char *csetname); - -/***************************************************************/ -/**************************** BEZIER ***************************/ -/***************************************************************/ - - /* Matrix times a vector dest = m*v */ -void MultMV(float m[3][4], float v[4], float dest[3]) -{ - int i, j; - - for (i = 0; i < 3; i++) { - dest[i] = 0; - for (j = 0; j < 4; j++) - dest[i] += m[i][j] * v[j]; - } -} - - /* Matrix multiplication, dest = m1*m2 */ -void MultM(float m1[3][4], float m2[4][4], float dest[3][4]) -{ - int i, j, k; - - for (i = 0; i < 3; i++) - for (j = 0; j < 4; j++) { - dest[i][j] = 0; - for (k = 0; k < 4; k++) - dest[i][j] += (m1[i][k] * m2[k][j]); - } -} - -void ComputeCurve(int joint) -{ - float prod[3][4], tm[4], pos[3]; - float t = 0, tinc = (float)CYCLE_STEP/OVERSAMPLE; - int ctlpoint, i; - float BBasis[4][4] = {{-1, 3, -3, 1}, {3, -6, 3, 0}, - {-3, 3, 0, 0}, {1, 0, 0, 0}}; - int lastindex, newindex; - - float pointset[3][4]; - for (i = 0; i < 4; i++) /* z's are always zero, only 2-d */ - pointset[2][i] = 0; - - lastindex = -1; - for(ctlpoint = 0; ctlpoint < RotCurve[joint].numpoints; ctlpoint += 3) { - t = 0; - for (i = 0; i < 4; i++) - pointset[0][i] = RotCurve[joint].xcoords[ctlpoint + i]; - for (i = 0; i < 4; i++) - pointset[1][i] = RotCurve[joint].angles[ctlpoint + i]; - - MultM(pointset, BBasis, prod); - - while (t <= 1) { - tm[0] = t*t*t; - tm[1] = t*t; - tm[2] = t; - tm[3] = 1; - MultMV(prod, tm, pos); - newindex = (int)(pos[0]*(CYCLE_SIZE-1)); - if ((int)(newindex > lastindex)) { /* go at least one */ - Walk_cycle[0][joint][newindex] = pos[1]; - lastindex++; - } - t += tinc; - } - } - - for (i = 0; i < CYCLE_SIZE; i++) { /* copy to other leg, out-o-phase */ - if (MirrorLegs) - Walk_cycle[1][joint][i] = - Walk_cycle[0][joint][i]; - else - Walk_cycle[1][joint][i] = - Walk_cycle[0][joint][(i+(CYCLE_SIZE/2))%CYCLE_SIZE]; - } -} - -/***************************************************************/ -/************************* CURVE I/O ***************************/ -/***************************************************************/ - -void FlatCSet(void) -{ - int joint; - - for (joint = 0; joint < NUM_JOINTS; joint++) { - RotCurve[joint].numpoints = 4; - RotCurve[joint].xcoords[0] = 0.0; - RotCurve[joint].angles[0] = 0.0; - RotCurve[joint].xcoords[1] = 0.2; - RotCurve[joint].angles[1] = 0.0; - RotCurve[joint].xcoords[2] = 0.8; - RotCurve[joint].angles[2] = 0.0; - RotCurve[joint].xcoords[3] = 1.0; - RotCurve[joint].angles[3] = 0.0; - } -} - -int ReadCSetFromFile(char *filename) -{ - FILE *infile = fopen(filename, "r"); - int numjoints, numpoints, joint, point, mirrorlegs; - float value; - - if (infile == NULL) - goto abort; - - if (!fscanf(infile, " %d", &numjoints) || numjoints != NUM_JOINTS) - goto abort; - - if (!fscanf(infile, " %d", &mirrorlegs) || (mirrorlegs != 0 && - mirrorlegs != 1)) - goto abort; - - MirrorLegs = mirrorlegs; - - for (joint = 0; joint < NUM_JOINTS; joint++) { - if (!fscanf(infile, " %d", &numpoints) || numpoints < 4 || - numpoints > MAX_CPOINTS) - goto abort; - RotCurve[joint].numpoints = numpoints; - for (point = 0; point < numpoints; point++) { - if (!fscanf(infile, " %f", &value)) - goto abort; - RotCurve[joint].xcoords[point] = value; - } - for (point = 0; point < numpoints; point++) { - if (!fscanf(infile, " %f", &value)) - goto abort; - RotCurve[joint].angles[point] = value; - } - } - - fclose(infile); - return 0; - - abort: - fclose(infile); - fprintf(stderr, "Something went wrong while reading file %s\n", filename); - FlatCSet(); - return -1; -} - -void WriteCSetToFile(char *filename) -{ - FILE *outfile = fopen(filename, "w+"); - int joint, point; - - if (outfile == NULL) { - fprintf(stderr, "Error: could not create file %s\n", filename); - return; - } - - fprintf(outfile, "%d\n", NUM_JOINTS); - - fprintf(outfile, "%d\n", MirrorLegs); - - for (joint = 0; joint < NUM_JOINTS; joint++) { - - fprintf(outfile, "%d\n", RotCurve[joint].numpoints); - - for (point = 0; point < RotCurve[joint].numpoints; point++) { - fprintf(outfile, "%f ", RotCurve[joint].xcoords[point]); - } - fprintf(outfile, "\n"); - - for (point = 0; point < RotCurve[joint].numpoints; point++) { - fprintf(outfile, "%f ", RotCurve[joint].angles[point]); - } - fprintf(outfile, "\n"); - } - - fclose(outfile); -} - -void HandleLoadMenu(int cset) -{ - char filename[MAX_CSETNAMELEN + CSET_EXTLEN + 1]; - - if (cset == -1) { - MakeLoadAndSaveMenus(); - CurveMenuInit(); - } else { - (void)strcpy(filename, CSetNames[cset]); - (void)strcat(filename, CSET_EXT); - if (ReadCSetFromFile(filename) == 0) { - glutSetMenu(SaveMenu); - glutChangeToMenuEntry(1, CSetNames[cset], cset); - ComputeCSetAndMakeLists(); - SetWindowTitles(CSetNames[cset]); - RedisplayBoth(); - } - } -} - -void HandleSaveMenu(int cset) -{ - char filename[MAX_CSETNAMELEN + CSET_EXTLEN + 1]; - - (void)strcpy(filename, CSetNames[cset]); - (void)strcat(filename, CSET_EXT); - WriteCSetToFile(filename); - ComputeCSetAndMakeLists(); - RedisplayBoth(); -} - -int MakeLoadAndSaveMenus(void) -{ - DIR *dirp = opendir("."); - struct dirent *direntp; - int csetnum = 0; - char *newcsetname; - - if (LoadMenu != -1) - glutDestroyMenu(LoadMenu); - if (SaveMenu != -1) - glutDestroyMenu(SaveMenu); - - SaveMenu = glutCreateMenu(HandleSaveMenu); - LoadMenu = glutCreateMenu(HandleLoadMenu); - - if (dirp == NULL) { - fprintf(stderr, "Error opening current dir in MakeLoadAndSaveMenus\n"); - return(0); - } - - while ((direntp = readdir(dirp)) != NULL) { - char *ext = direntp->d_name + (strlen(direntp->d_name) - CSET_EXTLEN); - if (!strcmp(ext, CSET_EXT)) { - newcsetname = malloc(strlen(direntp->d_name) - CSET_EXTLEN + 1); - strncpy(newcsetname, direntp->d_name, - strlen(direntp->d_name) - CSET_EXTLEN); - newcsetname[strlen(direntp->d_name) - CSET_EXTLEN] = 0; - CSetNames[csetnum] = newcsetname; - glutAddMenuEntry(newcsetname, csetnum++); - } - } - closedir(dirp); - glutSetMenu(LoadMenu); - glutAddMenuEntry("-> Rescan Directory <-", -1); - glutSetMenu(SaveMenu); - CSetNames[csetnum] = "NewCurve0"; - glutAddMenuEntry("NewCurve0", csetnum++); - CSetNames[csetnum] = "NewCurve1"; - glutAddMenuEntry("NewCurve1", csetnum++); - CSetNames[csetnum] = "NewCurve2"; - glutAddMenuEntry("NewCurve2", csetnum++); - - return (csetnum - 2); /* just indicate curves in Load menu */ -} - - -/***************************************************************/ -/********************* DISPLAY LISTS ***************************/ -/***************************************************************/ - - -void MakeCurveList(int joint) -{ - int i; - - glNewList(CurveLists+joint, GL_COMPILE); - glColor3f(1, 1, 1); - for (i = 0; i < CYCLE_SIZE; i++) { - glVertex3f((GLfloat)i/CYCLE_SIZE, Walk_cycle[0][joint][i]/180, 0); - } - glEndList(); -} - -void MakeCPointList(int joint) -{ - int point; - - glNewList(ControlPtsLists+joint, GL_COMPILE); - - glColor3f(0, 0.4, 0); - glBegin(GL_LINE_STRIP); - for (point = 0; point < RotCurve[joint].numpoints; point++) { - if (!((point-2) % 3)) { - glEnd(); - glBegin(GL_LINE_STRIP); - } - glVertex3f(RotCurve[joint].xcoords[point], - (RotCurve[joint].angles[point])/180.0, 0.0); - } - glEnd(); - - glBegin(GL_POINTS); - for (point = 0; point < RotCurve[joint].numpoints; point++) { - if (point % 3) - glColor3f(0, 0.7, 0); - else - glColor3f(0.7, 0.0, 0); - glVertex3f(RotCurve[joint].xcoords[point], - (RotCurve[joint].angles[point])/180, 0); - } - glEnd(); - - glEndList(); -} - -void MakeJointLists(int joint) -{ - MakeCurveList(joint); - MakeCPointList(joint); -} - - -void ComputeCSetAndMakeLists(void) -{ - int joint; - - for(joint = 0; joint < NUM_JOINTS; joint++) { - ComputeCurve(joint); - MakeJointLists(joint); - } -} - -void MakeLists(void) -{ - HorizontalList = glGenLists(1); - glNewList(HorizontalList, GL_COMPILE); - { - float line1 = 25.0/180, - line2 = 35.0/180, - line3 = 45.0/180; - glColor3f(0, 0, 0.7); - glPushAttrib(GL_ENABLE_BIT); - glEnable(GL_LINE_STIPPLE); - glBegin(GL_LINES); - glVertex3f(0, 0, 0.5); - glVertex3f(1, 0, 0.5); - glVertex3f(0, line1, 0.5); glVertex3f(1, line1, 0.5); - glVertex3f(0, -line1, 0.5); glVertex3f(1, -line1, 0.5); - glVertex3f(0, line2, 0.5); glVertex3f(1, line2, 0.5); - glVertex3f(0, -line2, 0.5); glVertex3f(1, -line2, 0.5); - glVertex3f(0, line3, 0.5); glVertex3f(1, line3, 0.5); - glVertex3f(0, -line3, 0.5); glVertex3f(1, -line3, 0.5); - glEnd(); - glPopAttrib(); - } - glEndList(); - - - CurveLists = glGenLists(NUM_JOINTS); - assert(CurveLists != 0); - - ControlPtsLists = glGenLists(NUM_JOINTS); - assert(ControlPtsLists != 0); - - ComputeCSetAndMakeLists(); -} - -/***************************************************************/ -/********************* curve WINDOW ****************************/ -/***************************************************************/ - -void CurveReshape(int w, int h) -{ - glViewport(0,0,w,h); - CurveWWidth = w; - CurveWHeight = h; - glFlush(); -} - -void CurveDisplay(void) -{ - int joint, otherlegstep; - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glPushMatrix(); - glTranslatef(0, 0.5, 0); - - for (joint = NUM_JOINTS-1; joint >= 0; joint--) { - - if (DrawHorizontals) - glCallList(HorizontalList); - - (CurveAsPoints) ? - glBegin(GL_POINTS) : - glBegin(GL_LINE_STRIP); - glCallList(CurveLists+joint); - glEnd(); - - if (joint == EditingCurve) { - glPointSize(5.0); - glCallList(ControlPtsLists+EditingCurve); - glPointSize(1.0); - } - glTranslatef(0, 1, 0); - } - - glPopMatrix(); - - otherlegstep = (Step+50) % CYCLE_SIZE; - /* draw vertical line */ - glColor3f(1, 1, 1); - glBegin(GL_LINES); - glVertex3f((GLfloat)Step/CYCLE_SIZE, 0, 0); - glVertex3f((GLfloat)Step/CYCLE_SIZE, NUM_JOINTS, 0); - if (!MirrorLegs) { - glVertex3f((GLfloat)otherlegstep/CYCLE_SIZE, 0, 0); - glVertex3f((GLfloat)otherlegstep/CYCLE_SIZE, NUM_JOINTS, 0); - } - glEnd(); - - glFlush(); - glutSwapBuffers(); -} - - -void CurveGLInit(void) -{ - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho(0,1,0,NUM_JOINTS,1,-1); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - glLineStipple(1, 0x00FF); - - glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_LEQUAL); - - - glFlush(); - -} - - -/* ARGSUSED2 */ -void CurveHandleButton(int button, int state, int x, int y) -{ - if (button == GLUT_RIGHT_BUTTON ) - return; - - if (state == GLUT_DOWN && CurveDownBtn == -1) { - if (button == GLUT_MIDDLE_BUTTON) - CurveHandleMenu(CMENU_WALK); - else - fStep = Step = (int)((float)x/glutGet(GLUT_WINDOW_WIDTH) * CYCLE_SIZE); - - CurveDownBtn = button; - - WasWalking = Walking; - StopWalking(); - RedisplayBoth(); - } else if (button == CurveDownBtn) { - CurveDownBtn = -1; - if (WasWalking) { - Walking = 1; - agvSetAllowIdle(0); - glutIdleFunc(IncrementStep); - } - } -} - -float CurveEditConstrain(float fx) -{ - if (CurvePickedPoint == 0) - fx = 0; - else if (CurvePickedPoint == RotCurve[EditingCurve].numpoints-1) - fx = 1; - else if (!(CurvePickedPoint % 3)) { /* is a pivot */ - fx = MAX(fx, RotCurve[EditingCurve].xcoords[CurvePickedPoint-1]); - fx = MIN(fx, RotCurve[EditingCurve].xcoords[CurvePickedPoint+1]); - fx = MAX(fx, RotCurve[EditingCurve].xcoords[CurvePickedPoint-3]); - fx = MIN(fx, RotCurve[EditingCurve].xcoords[CurvePickedPoint+3]); - } else if (!((CurvePickedPoint - 1) % 3)) { /* is right slope */ - fx = MAX(fx, RotCurve[EditingCurve].xcoords[CurvePickedPoint-1]); - } else { - fx = MIN(fx, RotCurve[EditingCurve].xcoords[CurvePickedPoint+1]); - } - return fx; -} - -void RemovePoint(int pt) -{ - int i; - - for (i = pt - 1; i < RotCurve[EditingCurve].numpoints; i++) { - RotCurve[EditingCurve].xcoords[i] = RotCurve[EditingCurve].xcoords[i+3]; - RotCurve[EditingCurve].angles[i] = RotCurve[EditingCurve].angles[i+3]; - } - RotCurve[EditingCurve].numpoints -= 3; -} - -void AddPoint(float fx) -{ - int i, j; - - if (fx < 0.05 || fx > 0.95 || RotCurve[EditingCurve].numpoints + 3 >= - MAX_CPOINTS) - return; - - for (i = 3; i < RotCurve[EditingCurve].numpoints; i += 3) { - if (fx < RotCurve[EditingCurve].xcoords[i]) { - for (j = RotCurve[EditingCurve].numpoints + 2; j > i + 1; j--) { - RotCurve[EditingCurve].xcoords[j] = - RotCurve[EditingCurve].xcoords[j-3]; - RotCurve[EditingCurve].angles[j] = - RotCurve[EditingCurve].angles[j-3]; - } - RotCurve[EditingCurve].xcoords[i] = fx; - RotCurve[EditingCurve].angles[i] = - Walk_cycle[0][EditingCurve][(int)(fx*CYCLE_SIZE)]; - RotCurve[EditingCurve].xcoords[i-1] = fx - 0.05; - RotCurve[EditingCurve].angles[i-1] = - Walk_cycle[0][EditingCurve][(int)((fx-0.05)*CYCLE_SIZE)]; - RotCurve[EditingCurve].xcoords[i+1] = fx + 0.05; - RotCurve[EditingCurve].angles[i+1] = - Walk_cycle[0][EditingCurve][(int)((fx+0.05)*CYCLE_SIZE)]; - RotCurve[EditingCurve].numpoints += 3; - break; - } - } -} - - -void CurveEditHandleButton(int button, int state, int x, int y) -{ - float fx, fy; - int point; - - fy = -(((float)y - ((float)CurveWHeight/NUM_JOINTS * EditingCurve)) / - ((float)CurveWHeight/NUM_JOINTS) - 0.5) * 180.0, - fx = (float)x/CurveWWidth; - - if (state == GLUT_DOWN && button == GLUT_LEFT_BUTTON && - CurveDownBtn == -1) { - CurvePickedPoint = -1; - - for (point = 0; point < RotCurve[EditingCurve].numpoints; point++) { - if (fabs(RotCurve[EditingCurve].xcoords[point] - fx) < 0.01 && - fabs(RotCurve[EditingCurve].angles[point] - fy) < 4) { - CurvePickedPoint = point; - CurveLastX = x; - CurveLastY = y; - glutIdleFunc(CurveCPointDrag); - break; - } - } - if (CurvePickedPoint == -1) - CurveHandleButton(button, state, x, y); - CurveDownBtn = button; - - - } else if (state == GLUT_DOWN && button == GLUT_MIDDLE_BUTTON && - CurveDownBtn == -1) { - - for (point = 3; point < RotCurve[EditingCurve].numpoints - 1; point += 3) { - if (fabs(RotCurve[EditingCurve].xcoords[point] - fx) < 0.01 && - fabs(RotCurve[EditingCurve].angles[point] - fy) < 4) { - break; - } - } - if (point >= 3 && point < RotCurve[EditingCurve].numpoints - 1) - RemovePoint(point); - else if (fabs(Walk_cycle[0][EditingCurve][(int)(fx*CYCLE_SIZE)] - fy) < 4) - AddPoint(fx); - ComputeCurve(EditingCurve); - MakeJointLists(EditingCurve); - RedisplayBoth(); - - } else if (button == GLUT_LEFT_BUTTON && button == CurveDownBtn) { - - y = MAX(y, 0); y = MIN(y, CurveWHeight); - x = MAX(x, 0); x = MIN(x, CurveWWidth); - fy = -(((float)y - ((float)CurveWHeight/NUM_JOINTS * EditingCurve)) / - ((float)CurveWHeight/NUM_JOINTS) - 0.5) * 180.0, - fx = (float)x/CurveWWidth; - CurveDownBtn = -1; - if (CurvePickedPoint != -1) { - fx = CurveEditConstrain(fx); - RotCurve[EditingCurve].xcoords[CurvePickedPoint] = fx; - RotCurve[EditingCurve].angles[CurvePickedPoint] = fy; - ComputeCurve(EditingCurve); - MakeJointLists(EditingCurve); - glutIdleFunc(NULL); - RedisplayBoth(); - } - } -} - - -void CurveHandleMotion(int x, int y) -{ - if (CurvePickedPoint == -1) { - - if (CurveDownBtn == GLUT_LEFT_BUTTON || CurveDownBtn == - GLUT_MIDDLE_BUTTON) { - Step = (int)((float)x/glutGet(GLUT_WINDOW_WIDTH) * CYCLE_SIZE) - % CYCLE_SIZE; - if (Step < 0) - Step = CYCLE_SIZE + Step; - fStep = Step; - - RedisplayBoth(); - } - } else { - y = MAX(y, 0); y = MIN(y, CurveWHeight); - x = MAX(x, 0); x = MIN(x, CurveWWidth); - CurveLastX = x; - CurveLastY = y; - } -} - -void CurveCPointDrag(void) -{ - float fx, fy; - - if (CurveDownBtn == GLUT_LEFT_BUTTON && CurvePickedPoint != -1) { - fy = -(((float)CurveLastY - - ((float)CurveWHeight/NUM_JOINTS * EditingCurve)) / - ((float)CurveWHeight/NUM_JOINTS) - 0.5) * 180.0, - fx = (float)CurveLastX/CurveWWidth; - - fx = CurveEditConstrain(fx); - RotCurve[EditingCurve].xcoords[CurvePickedPoint] = fx; - RotCurve[EditingCurve].angles[CurvePickedPoint] = fy; - ComputeCurve(EditingCurve); - MakeJointLists(EditingCurve); - RedisplayBoth(); - } -} - -/* ARGSUSED1 */ -void CurveHandleKeys(unsigned char key, int x, int y) -{ - if (key > '0' && key < '9') - CurveHandleEditMenu((key-'0')-1); - else if (key == 'd') - CurveHandleMenu(CMENU_DONEEDIT); - else { - switch(key) { - case 'f': - case ' ': Step++; - StopWalking(); break; - case 'F': Step += 5; - StopWalking(); break; - case 'b': Step--; - StopWalking(); break; - case 'B': Step -= 5; - StopWalking(); break; - } - Step %= CYCLE_SIZE; - if (Step < 0) - Step = CYCLE_SIZE + Step; - fStep = Step; - RedisplayBoth(); - } -} - -void CurveHandleEditMenu(int curve) -{ - if (curve >= NUM_JOINTS) - return; - if (EditingCurve == -1) { - WasWalking = Walking; - Walking = 0; - agvSetAllowIdle(0); /* don't allow spinning, just slows us down */ - glutIdleFunc(NULL); - glutMouseFunc(CurveEditHandleButton); - } - EditingCurve = curve; - glutPostRedisplay(); -} - -void CurveHandleSZMenu(int size) -{ - IncStep = (float)size/100; -} - -void CurveHandleMenu(int value) -{ - switch (value) { - case CMENU_QUIT: - exit(0); - break; - case CMENU_CURVE: - CurveAsPoints = !CurveAsPoints; - glutPostRedisplay(); - break; - case CMENU_HORIZ: - DrawHorizontals = !DrawHorizontals; - glutPostRedisplay(); - break; - case CMENU_WALK: - if (EditingCurve != -1) - break; - Walking = !Walking; - if (Walking) { - agvSetAllowIdle(0); - glutIdleFunc(IncrementStep); - } else { - agvSetAllowIdle(1); - } - break; - case CMENU_DONEEDIT: - glutMouseFunc(CurveHandleButton); - EditingCurve = -1; - CurvePickedPoint = -1; - Walking = WasWalking; - if (Walking) - glutIdleFunc(IncrementStep); - else - agvSetAllowIdle(1); - glutPostRedisplay(); - break; - case CMENU_RESET: - FlatCSet(); - ComputeCSetAndMakeLists(); - glutPostRedisplay(); - break; - case CMENU_MIRROR: - MirrorLegs = !MirrorLegs; - ComputeCSetAndMakeLists(); - glutPostRedisplay(); - } -} - -void CurveMenuInit(void) -{ - int i; - char label[3]; - - if (CurveEditMenu != -1) { - glutDestroyMenu(CurveEditMenu); - glutDestroyMenu(CurveMenu); - glutDestroyMenu(StepSizeMenu); - } - - CurveEditMenu = glutCreateMenu(CurveHandleEditMenu); - for (i = 0; i < NUM_JOINTS; i++) { - sprintf(label, " %d ", i+1); - glutAddMenuEntry(label, i); - } - StepSizeMenu = glutCreateMenu(CurveHandleSZMenu); - glutAddMenuEntry("0.25", 25); - glutAddMenuEntry("0.5", 50); - glutAddMenuEntry("1.0", 100); - glutAddMenuEntry("2.0", 200); - glutAddMenuEntry("3.0", 300); - glutAddMenuEntry("5.0", 500); - CurveMenu = glutCreateMenu(CurveHandleMenu); - glutAddSubMenu("Load Curve Set", LoadMenu); - glutAddSubMenu("Save As Curve Set", SaveMenu); - glutAddSubMenu("Edit Curve", CurveEditMenu); - glutAddMenuEntry("Done Editing", CMENU_DONEEDIT); - glutAddMenuEntry("Flatten Curve Set", CMENU_RESET); - glutAddMenuEntry("Toggle mirrored", CMENU_MIRROR); - glutAddSubMenu("Step size", StepSizeMenu); - glutAddMenuEntry("Toggle dotted", CMENU_CURVE); - glutAddMenuEntry("Toggle horizontals", CMENU_HORIZ); - glutAddMenuEntry("Toggle walking", CMENU_WALK); - glutAddMenuEntry("Quit", CMENU_QUIT); - glutSetWindow(CurveWindow); - glutAttachMenu(GLUT_RIGHT_BUTTON); -} - -void CurveVisible(int v) -{ - if (v == GLUT_VISIBLE) - CurveWindowVisible = 1; - else - CurveWindowVisible = 0; -} - -/***************************************************************/ -/*********************** GUY WINDOW ****************************/ -/***************************************************************/ - -void GuyDisplay(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glFlush(); - - glLoadIdentity(); - - agvViewTransform(); - - if (DrawAxes) - glCallList(AxesList); - - switch(GuyModel) { - case WIRECUBE: DrawTheGuy_WC(); break; - case SOLIDCUBE: DrawTheGuy_SC(); break; - case CYLINDER1: DrawTheGuy_SL(); break; - case CYLINDER2: DrawTheGuy_SL2(); break; - } - - glutSwapBuffers(); - glFlush(); -} - -void GuyReshape(int w, int h) -{ - glViewport(0,0,w,h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - if (ViewPerspective) - gluPerspective(60.0, (GLdouble)w/h, 0.01, 100); - else - glOrtho(-1.2, 1.2, -1.2, 1.2, 0.1, 100); - glMatrixMode(GL_MODELVIEW); - glFlush(); -} - - -void GuyGLInit(void) -{ - GLfloat mat_ambient[] = { 1.0, 1.0, 1.0, 1.0 }; - GLfloat light_position[] = { 0.3, 0.5, 0.8, 0.0 }; - GLfloat lm_ambient[] = { 0.2, 0.2, 0.2, 1.0 }; - - glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); - glLightfv(GL_LIGHT0, GL_POSITION, light_position); - glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lm_ambient); - - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glDepthFunc(GL_LESS); - glEnable(GL_DEPTH_TEST); - glEnable(GL_NORMALIZE); - glShadeModel(GL_SMOOTH); - /* Cylinder stuff */ - StoreTheGuy_SL(); - StoreTheGuy_SL2(); -} - -void GuyHandleKeys(unsigned char key, int x, int y) -{ - switch(key) { - case 'f': - case ' ': Step++; - StopWalking(); break; - case 'F': Step += 5; - StopWalking(); break; - case 'b': Step--; - StopWalking(); break; - case 'B': Step -= 5; - StopWalking(); break; - } - Step %= CYCLE_SIZE; - if (Step < 0) - Step = CYCLE_SIZE + Step; - agvHandleKeys(key, x, y); - RedisplayBoth(); -} - -typedef enum { GMENU_QUIT, GMENU_CURVE, GMENU_HORIZ, - GMENU_AXES, GMENU_PERSP } GuyMenuChoices; - - -void GuyModelHandleMenu(int model) -{ - GuyModel = model; - if (model == WIRECUBE) - glDisable(GL_LIGHTING); - else - glEnable(GL_LIGHTING); - glutPostRedisplay(); -} - -void GuyHandleMenu(int value) -{ - switch (value) { - case GMENU_QUIT: - exit(0); - break; - case GMENU_AXES: - DrawAxes = !DrawAxes; - glutPostRedisplay(); - break; - case GMENU_PERSP: - ViewPerspective = !ViewPerspective; - GuyReshape(glutGet(GLUT_WINDOW_WIDTH), glutGet(GLUT_WINDOW_HEIGHT)); - glutPostRedisplay(); - break; - } -} - -void GuyMenuInit(void) -{ - int sub2, sub1 = glutCreateMenu(agvSwitchMoveMode); - glutAddMenuEntry("Flying move", FLYING); - glutAddMenuEntry("Polar move", POLAR); - sub2 = glutCreateMenu(GuyModelHandleMenu); - glutAddMenuEntry("Wire cubes", WIRECUBE); - glutAddMenuEntry("Solid cubes", SOLIDCUBE); - glutAddMenuEntry("Cylinder 1", CYLINDER1); - glutAddMenuEntry("Cylinder 2", CYLINDER2); - glutCreateMenu(GuyHandleMenu); - glutAddSubMenu("Viewing", sub1); - glutAddSubMenu("Model", sub2); - glutAddMenuEntry("Toggle Axes", GMENU_AXES); - glutAddMenuEntry("Toggle Perspective View", GMENU_PERSP); - glutAddMenuEntry("Quit", GMENU_QUIT); - glutSetWindow(GuyWindow); - glutAttachMenu(GLUT_RIGHT_BUTTON); -} - -/***************************************************************/ -/********************* BOTH WINDOWS ****************************/ -/***************************************************************/ - -void RedisplayBoth(void) -{ - glutPostWindowRedisplay(GuyWindow); - if (CurveWindowVisible) { - glutPostWindowRedisplay(CurveWindow); - } -} - -void IncrementStep(void) -{ - fStep = fmod(fStep + IncStep, CYCLE_SIZE); - Step = (int)fStep; - if (agvMoving) - agvMove(); - RedisplayBoth(); -} - -void StopWalking(void) -{ - if (Walking) { - Walking = 0; - agvSetAllowIdle(1); - } -} - -void SetWindowTitles(char *csetname) -{ - char windowtitle[MAX_CSETNAMELEN + 20]; - - strcpy(windowtitle, "Rotation Curves: "); - strcat(windowtitle, csetname); - glutSetWindow(CurveWindow); - glutSetWindowTitle(windowtitle); - - strcpy(windowtitle, "The Guy: "); - strcat(windowtitle, csetname); - glutSetWindow(GuyWindow); - glutSetWindowTitle(windowtitle); -} - -/***************************************************************/ -/***************************** MAIN ****************************/ -/***************************************************************/ - -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - - glutInitWindowSize(512, 512); - glutInitWindowPosition(700, 250); - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); - GuyWindow = glutCreateWindow("The Guy:"); - agvInit(!Walking); - AxesList = glGenLists(1); - agvMakeAxesList(AxesList); - GuyGLInit(); - GuyMenuInit(); - glutDisplayFunc(GuyDisplay); - glutReshapeFunc(GuyReshape); - glutKeyboardFunc(GuyHandleKeys); - - glutInitWindowSize(512, 1024); - glutInitWindowPosition(100, 0); - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); - CurveWindow = glutCreateWindow("Rotation Curves:"); - CurveGLInit(); - glutDisplayFunc(CurveDisplay); - glutReshapeFunc(CurveReshape); - glutMouseFunc(CurveHandleButton); - glutMotionFunc(CurveHandleMotion); - glutKeyboardFunc(CurveHandleKeys); - glutVisibilityFunc(CurveVisible); - - FlatCSet(); - MakeLists(); - - if (MakeLoadAndSaveMenus() > 0) /* read first curve if there was one */ - HandleLoadMenu(0); - - CurveMenuInit(); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} - - - - diff --git a/lib/glut-3.7.6/progs/demos/walker/walker.dsp b/lib/glut-3.7.6/progs/demos/walker/walker.dsp deleted file mode 100644 index 747fae37d..000000000 --- a/lib/glut-3.7.6/progs/demos/walker/walker.dsp +++ /dev/null @@ -1,108 +0,0 @@ -# Microsoft Developer Studio Project File - Name="walker" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=walker - 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 "walker.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 "walker.mak" CFG="walker - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "walker - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "walker - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "walker - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "walker - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "walker - Win32 Release" -# Name "walker - Win32 Debug" -# Begin Source File - -SOURCE=.\models.c -# End Source File -# Begin Source File - -SOURCE=.\walker.c -# End Source File -# Begin Source File - -SOURCE=.\walker.h -# End Source File -# Begin Source File - -SOURCE=.\walkviewer.c -# End Source File -# Begin Source File - -SOURCE=.\walkviewer.h -# End Source File -# Begin Source File - -SOURCE=.\win32_dirent.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/demos/walker/walker.h b/lib/glut-3.7.6/progs/demos/walker/walker.h deleted file mode 100644 index 049c6fed0..000000000 --- a/lib/glut-3.7.6/progs/demos/walker/walker.h +++ /dev/null @@ -1,13 +0,0 @@ -#define CYCLE_SIZE 100 -#define CYCLE_STEP 1.0/CYCLE_SIZE - -extern GLfloat Walk_cycle[2][5][CYCLE_SIZE]; - -extern int Step; - -extern void DrawTheGuy_WC(void); -extern void DrawTheGuy_SC(void); -extern void DrawTheGuy_SL(void); -extern void DrawTheGuy_SL2(void); -extern void StoreTheGuy_SL(void); -extern void StoreTheGuy_SL2(void); diff --git a/lib/glut-3.7.6/progs/demos/walker/walking.cset b/lib/glut-3.7.6/progs/demos/walker/walking.cset deleted file mode 100644 index 403b7ea98..000000000 --- a/lib/glut-3.7.6/progs/demos/walker/walking.cset +++ /dev/null @@ -1,17 +0,0 @@ -5 -0 -7 -0.000000 0.078125 0.300781 0.496094 0.644531 0.917969 1.000000 -0.000000 37.865856 29.634146 -0.548780 -29.817066 -45.365852 0.000000 -13 -0.000000 0.087891 0.152344 0.244141 0.343750 0.355469 0.466797 0.541016 0.599609 0.697266 0.816406 0.916016 1.000000 --39.146336 -46.463413 -14.451217 -5.304873 -3.475606 -33.658535 -18.109749 -8.963406 -8.963406 -8.048773 -20.853649 -49.207314 -40.975601 -13 -0.000000 0.085938 0.089844 0.273438 0.339844 0.314453 0.496094 0.619141 0.716797 0.769531 0.816406 0.917969 1.000000 -0.000000 -30.182919 -27.439020 9.146349 -28.353653 13.719521 11.890248 35.670742 49.390251 0.914639 -28.353653 -22.865843 0.000000 -7 -0.000000 0.072266 0.292969 0.466797 0.644531 0.828125 1.000000 -0.000000 -19.390215 -22.134125 0.000000 24.512220 19.024414 0.000000 -7 -0.000000 0.189453 0.322266 0.480469 0.699219 0.761719 1.000000 -10.609768 -24.146330 17.926840 16.097572 16.097572 54.512207 11.524401 diff --git a/lib/glut-3.7.6/progs/demos/walker/walkviewer.c b/lib/glut-3.7.6/progs/demos/walker/walkviewer.c deleted file mode 100644 index 09778cfde..000000000 --- a/lib/glut-3.7.6/progs/demos/walker/walkviewer.c +++ /dev/null @@ -1,493 +0,0 @@ -/* - * walkviewer.c [from agviewer.c (version 1.0)] - * - * AGV: a glut viewer. Routines for viewing a 3d scene w/ glut - * - * See agv_example.c and agviewer.h comments within for more info. - * - * I welcome any feedback or improved versions! - * - * Philip Winston - 4/11/95 - * pwinston@hmc.edu - * http://www.cs.hmc.edu/people/pwinston - */ - -#include -#include -#include -#include - -#include "walkviewer.h" - -/***************************************************************/ -/************************** SETTINGS ***************************/ -/***************************************************************/ - - /* Initial polar movement settings */ -#define INIT_POLAR_AZ 0.0 -#define INIT_POLAR_EL 30.0 -#define INIT_DIST 3.0 -#define INIT_AZ_SPIN 0.5 -#define INIT_EL_SPIN 0.0 - - /* Initial flying movement settings */ -#define INIT_EX 0.0 -#define INIT_EY -2.0 -#define INIT_EZ -2.0 -#define INIT_MOVE 0.01 -#define MINMOVE 0.001 - - /* Start in this mode */ -#define INIT_MODE POLAR - - /* Controls: */ - - /* map 0-9 to an EyeMove value when number key is hit in FLYING mode */ -#define SPEEDFUNCTION(x) ((x)*(x)*0.001) - - /* Multiply EyeMove by (1+-MOVEFRACTION) when +/- hit in FLYING mode */ -#define MOVEFRACTION 0.25 - - /* What to multiply number of pixels mouse moved by to get rotation amount */ -#define EL_SENS 0.5 -#define AZ_SENS 0.5 - - /* What to multiply number of pixels mouse moved by for movement amounts */ -#define DIST_SENS 0.01 -#define E_SENS 0.01 - - /* Minimum spin to allow in polar (lower forced to zero) */ -#define MIN_AZSPIN 0.1 -#define MIN_ELSPIN 0.1 - - /* Factors used in computing dAz and dEl (which determine AzSpin, ElSpin) */ -#define SLOW_DAZ 0.90 -#define SLOW_DEL 0.90 -#define PREV_DAZ 0.80 -#define PREV_DEL 0.80 -#define CUR_DAZ 0.20 -#define CUR_DEL 0.20 - -/***************************************************************/ -/************************** GLOBALS ****************************/ -/***************************************************************/ - -int MoveMode = INIT_MODE; /* FLYING or POLAR mode? */ - -GLfloat Ex = INIT_EX, /* flying parameters */ - Ey = INIT_EY, - Ez = INIT_EZ, - EyeMove = INIT_MOVE, - - EyeDist = INIT_DIST, /* polar params */ - AzSpin = INIT_AZ_SPIN, - ElSpin = INIT_EL_SPIN, - - EyeAz = INIT_POLAR_AZ, /* used by both */ - EyeEl = INIT_POLAR_EL; - -int agvMoving; /* Currently moving? */ - -int downx, downy, /* for tracking mouse position */ - lastx, lasty, - downb = -1; /* and button status */ - -GLfloat downDist, downEl, downAz, /* for saving state of things */ - downEx, downEy, downEz, /* when button is pressed */ - downEyeMove; - -GLfloat dAz, dEl, lastAz, lastEl; /* to calculate spinning w/ polar motion */ -int AdjustingAzEl = 0; - -int AllowIdle, RedisplayWindow; - /* If AllowIdle is 1 it means AGV will install its own idle which - * will update the viewpoint as needed and send glutPostRedisplay() to the - * window RedisplayWindow which was set in agvInit(). AllowIdle of 0 - * means AGV won't install an idle funciton, and something like - * "if (agvMoving) agvMove()" should exist at the end of the running - * idle function. - */ - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif -#define MAX(x,y) (((x) > (y)) ? (x) : (y)) -#define TORAD(x) ((M_PI/180.0)*(x)) -#define TODEG(x) ((180.0/M_PI)*(x)) - -/***************************************************************/ -/************************ PROTOTYPES ***************************/ -/***************************************************************/ - - /* - * these are functions meant for internal use only - * the other prototypes are in agviewer.h - */ - -void PolarLookFrom(GLfloat dist, GLfloat elevation, GLfloat azimuth); -void FlyLookFrom(GLfloat x, GLfloat y, GLfloat z, GLfloat az, GLfloat el); -int ConstrainEl(void); -void MoveOn(int v); -void SetMove(float newmove); -void normalize(GLfloat v[3]); -void ncrossprod(float v1[3], float v2[3], float cp[3]); - - -/***************************************************************/ -/************************ agvInit ******************************/ -/***************************************************************/ - -void agvInit(int window) -{ - glutMouseFunc(agvHandleButton); - glutMotionFunc(agvHandleMotion); - glutKeyboardFunc(agvHandleKeys); - RedisplayWindow = glutGetWindow(); - agvSetAllowIdle(window); -} - -/***************************************************************/ -/************************ VIEWPOINT STUFF **********************/ -/***************************************************************/ - - /* - * viewing transformation modified from page 90 of red book - */ -void PolarLookFrom(GLfloat dist, GLfloat elevation, GLfloat azimuth) -{ - glTranslatef(0, 0, -dist); - glRotatef(elevation, 1, 0, 0); - glRotatef(azimuth, 0, 1, 0); - -} - - /* - * I took the idea of tracking eye position in absolute - * coords and direction looking in Polar form from denis - */ -void FlyLookFrom(GLfloat x, GLfloat y, GLfloat z, GLfloat az, GLfloat el) -{ - float lookat[3], perp[3], up[3]; - - lookat[0] = sin(TORAD(az))*cos(TORAD(el)); - lookat[1] = sin(TORAD(el)); - lookat[2] = -cos(TORAD(az))*cos(TORAD(el)); - normalize(lookat); - perp[0] = lookat[2]; - perp[1] = 0; - perp[2] = -lookat[0]; - normalize(perp); - ncrossprod(lookat, perp, up); - gluLookAt(x, y, z, - x+lookat[0], y+lookat[1], z+lookat[2], - up[0], up[1], up[2]); -} - - /* - * Call viewing transformation based on movement mode - */ -void agvViewTransform(void) -{ - switch (MoveMode) { - case FLYING: - FlyLookFrom(Ex, Ey, Ez, EyeAz, EyeEl); - break; - case POLAR: - PolarLookFrom(EyeDist, EyeEl, EyeAz); - break; - } -} - - /* - * keep them vertical; I think this makes a lot of things easier, - * but maybe it wouldn't be too hard to adapt things to let you go - * upside down - */ -int ConstrainEl(void) -{ - if (EyeEl <= -90) { - EyeEl = -89.99; - return 1; - } else if (EyeEl >= 90) { - EyeEl = 89.99; - return 1; - } - return 0; -} - - /* - * Idle Function - moves eyeposition - */ -void agvMove(void) -{ - - switch (MoveMode) { - case FLYING: - Ex += EyeMove*sin(TORAD(EyeAz))*cos(TORAD(EyeEl)); - Ey += EyeMove*sin(TORAD(EyeEl)); - Ez -= EyeMove*cos(TORAD(EyeAz))*cos(TORAD(EyeEl)); - break; - - case POLAR: - EyeEl += ElSpin; - EyeAz += AzSpin; - if (ConstrainEl()) { /* weird spin thing to make things look */ - ElSpin = -ElSpin; /* look better when you are kept from going */ - /* upside down while spinning - Isn't great */ - if (fabs(ElSpin) > fabs(AzSpin)) - AzSpin = fabs(ElSpin) * ((AzSpin > 0) ? 1 : -1); - } - break; - } - - if (AdjustingAzEl) { - dAz *= SLOW_DAZ; - dEl *= SLOW_DEL; - } - - if (AllowIdle) { - glutPostWindowRedisplay(RedisplayWindow); - } -} - - - /* - * Don't install agvMove as idle unless we will be updating the view - * and we've been given a RedisplayWindow - */ -void MoveOn(int v) -{ - if (v && ((MoveMode == FLYING && EyeMove != 0) || - (MoveMode == POLAR && - (AzSpin != 0 || ElSpin != 0 || AdjustingAzEl)))) { - agvMoving = 1; - if (AllowIdle) - glutIdleFunc(agvMove); - } else { - agvMoving = 0; - if (AllowIdle) - glutIdleFunc(NULL); - } -} - - /* - * set new redisplay window. If <= 0 it means we are not to install - * an idle function and will rely on whoever does install one to - * put statement like "if (agvMoving) agvMove();" at end of it - */ -void agvSetAllowIdle(int allowidle) -{ - if ((AllowIdle = allowidle)) - MoveOn(1); -} - - - /* - * when moving to flying we stay in the same spot, moving to polar we - * reset since we have to be looking at the origin (though a pivot from - * current position to look at origin might be cooler) - */ -void agvSwitchMoveMode(int move) -{ - switch (move) { - case FLYING: - Ex = -EyeDist*sin(TORAD(EyeAz))*cos(TORAD(EyeEl)); - Ey = EyeDist*sin(TORAD(EyeEl)); - Ez = EyeDist*(cos(TORAD(EyeAz))*cos(TORAD(EyeEl))); - EyeAz = EyeAz; - EyeEl = -EyeEl; - EyeMove = INIT_MOVE; - break; - case POLAR: - EyeDist = INIT_DIST; - EyeAz = INIT_POLAR_AZ; - EyeEl = INIT_POLAR_EL; - AzSpin = INIT_AZ_SPIN; - ElSpin = INIT_EL_SPIN; - break; - } - MoveMode = move; - MoveOn(1); - glutPostRedisplay(); -} - -/***************************************************************/ -/******************* MOUSE HANDLING ***********************/ -/***************************************************************/ - -void agvHandleButton(int button, int state, int x, int y) -{ - if (state == GLUT_DOWN && downb == -1) { - lastx = downx = x; - lasty = downy = y; - downb = button; - - switch (button) { - case GLUT_LEFT_BUTTON: - lastEl = downEl = EyeEl; - lastAz = downAz = EyeAz; - AzSpin = ElSpin = dAz = dEl = 0; - AdjustingAzEl = 1; - MoveOn(1); - break; - - case GLUT_MIDDLE_BUTTON: - downDist = EyeDist; - downEx = Ex; - downEy = Ey; - downEz = Ez; - downEyeMove = EyeMove; - EyeMove = 0; - } - - } else if (state == GLUT_UP && button == downb) { - - downb = -1; - - switch (button) { - case GLUT_LEFT_BUTTON: - if (MoveMode != FLYING) { - AzSpin = -dAz; - if (AzSpin < MIN_AZSPIN && AzSpin > -MIN_AZSPIN) - AzSpin = 0; - ElSpin = -dEl; - if (ElSpin < MIN_ELSPIN && ElSpin > -MIN_ELSPIN) - ElSpin = 0; - } - AdjustingAzEl = 0; - MoveOn(1); - break; - - case GLUT_MIDDLE_BUTTON: - EyeMove = downEyeMove; - } - } -} - - /* - * change EyeEl and EyeAz and position when mouse is moved w/ button down - */ -void agvHandleMotion(int x, int y) -{ - int deltax = x - downx, deltay = y - downy; - - switch (downb) { - case GLUT_LEFT_BUTTON: - EyeEl = downEl + EL_SENS * ((MoveMode == FLYING) ? -deltay : deltay); - ConstrainEl(); - EyeAz = downAz + AZ_SENS * deltax; - dAz = PREV_DAZ*dAz + CUR_DAZ*(lastAz - EyeAz); - dEl = PREV_DEL*dEl + CUR_DEL*(lastEl - EyeEl); - lastAz = EyeAz; - lastEl = EyeEl; - break; - case GLUT_MIDDLE_BUTTON: - EyeDist = downDist + DIST_SENS*deltay; - Ex = downEx - E_SENS*deltay*sin(TORAD(EyeAz))*cos(TORAD(EyeEl)); - Ey = downEy - E_SENS*deltay*sin(TORAD(EyeEl)); - Ez = downEz + E_SENS*deltay*cos(TORAD(EyeAz))*cos(TORAD(EyeEl)); - break; - } - glutPostRedisplay(); -} - -/***************************************************************/ -/********************* KEYBOARD HANDLING ***********************/ -/***************************************************************/ - - /* - * set EyeMove (current speed) for FLYING mode - */ -void SetMove(float newmove) -{ - if (newmove > MINMOVE) { - EyeMove = newmove; - MoveOn(1); - } else { - EyeMove = 0; - MoveOn(0); - } -} - - /* - * 0->9 set speed, +/- adjust current speed -- in FLYING mode - */ -/* ARGSUSED1 */ -void agvHandleKeys(unsigned char key, int x, int y) -{ - if (MoveMode != FLYING) - return; - - if (key >= '0' && key <= '9') - SetMove(SPEEDFUNCTION((key-'0'))); - else - switch(key) { - case '+': - if (EyeMove == 0) - SetMove(MINMOVE); - else - SetMove(EyeMove *= (1 + MOVEFRACTION)); - break; - case '-': - SetMove(EyeMove *= (1 - MOVEFRACTION)); - break; - } -} - -/***************************************************************/ -/*********************** VECTOR STUFF **************************/ -/***************************************************************/ - - /* normalizes v */ -void normalize(GLfloat v[3]) -{ - GLfloat d = sqrt(v[0]*v[0] + v[1]*v[1] + v[2]*v[2]); - - if (d == 0) - fprintf(stderr, "Zero length vector in normalize\n"); - else - v[0] /= d; v[1] /= d; v[2] /= d; -} - - /* calculates a normalized crossproduct to v1, v2 */ -void ncrossprod(float v1[3], float v2[3], float cp[3]) -{ - cp[0] = v1[1]*v2[2] - v1[2]*v2[1]; - cp[1] = v1[2]*v2[0] - v1[0]*v2[2]; - cp[2] = v1[0]*v2[1] - v1[1]*v2[0]; - normalize(cp); -} - -/***************************************************************/ -/**************************** AXES *****************************/ -/***************************************************************/ - - - /* draw axes -- was helpful to debug/design things */ -void agvMakeAxesList(int displaylistnum) -{ - int i,j; - GLfloat axes_ambuse[] = { 0.5, 0.0, 0.0, 1.0 }; - glNewList(displaylistnum, GL_COMPILE); - glPushAttrib(GL_LIGHTING_BIT); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, axes_ambuse); - glBegin(GL_LINES); - glVertex3f(15, 0, 0); glVertex3f(-15, 0, 0); - glVertex3f(0, 15, 0); glVertex3f(0, -15, 0); - glVertex3f(0, 0, 15); glVertex3f(0, 0, -15); - glEnd(); - for (i = 0; i < 3; i++) { - glPushMatrix(); - glTranslatef(-10*(i==0), -10*(i==1), -10*(i==2)); - for (j = 0; j < 21; j++) { - glutSolidCube(0.1); - glTranslatef(i==0, i==1, i==2); - } - glPopMatrix(); - } - glPopAttrib(); - glEndList(); -} - - diff --git a/lib/glut-3.7.6/progs/demos/walker/walkviewer.h b/lib/glut-3.7.6/progs/demos/walker/walkviewer.h deleted file mode 100644 index 92842a97d..000000000 --- a/lib/glut-3.7.6/progs/demos/walker/walkviewer.h +++ /dev/null @@ -1,104 +0,0 @@ -/* - * walkviewer.c [from agviewer.c (version 1.0)] - * - * AGV: a glut viewer. Routines for viewing a 3d scene w/ glut - * - * The two view movement modes are POLAR and FLYING. Both move the eye, NOT - * THE OBJECT. You can never be upside down or twisted (roll) in either mode. - * - * A nice addition would be an examiner type trackball mode where you are - * moving the object and so could see it from any angle. Also less restricted - * flying and polar modes (fly upside down, do rolls, etc.). - * - * Controls for Polar are just left and middle buttons -- for flying it's - * those plus 0-9 number keys and +/- for speed adjustment. - * - * See agv_example.c and agviewer.c for more info. Probably want to make - * a copy of these and then edit for each program. This isn't meant to be - * a library, just something to graft onto your own programs. - * - * I welcome any feedback or improved versions. - * - * Philip Winston - 4/11/95 - * pwinston@hmc.edu - * http://www.cs.hmc.edu/people/pwinston - */ - - - /* - * Call agvInit() with glut's current window set to the window in - * which you want to run the viewer. Right after creating it is fine. It - * will remember that window for possible later use (see below) and - * registers mouse, motion, and keyboard handlers for that window (see below). - * - * allowidle is 1 or 0 depnding on whether you will let AGV install - * and uninstall an idle function. 0 means you will not let it (because - * you will be having your own idle function). In this case it is your - * responsibility to put a statement like: - * - * if (agvMoving) - * agvMove(); - * - * at the end of your idle function, to let AGV update the viewpoint if it - * is moving. - * - * If allowidle is 1 it means AGV will install its own idle which - * will update the viewpoint as needed and send glutPostRedisplay() to the - * window which was current when agvInit() was called. - * - * agvSetIdleAllow changes this value so you can let AGV install its idle - * when your idle isn't installed. - * - */ -void agvInit(int allowidle); -void agvSetAllowIdle(int allowidle); - - - /* - * Set which movement mode you are in. - */ -typedef enum { FLYING, POLAR } MovementType; -void agvSwitchMoveMode(int move); - - /* - * agvViewTransform basically does the appropriate gluLookAt() for the - * current position. So call it in your display on the projection matrix - */ -void agvViewTransform(void); - - /* - * agvMoving will be set by AGV according to whether it needs you to call - * agvMove() at the end of your idle function. You only need these if - * you aren't allowing AGV to do its own idle. - * (Don't change the value of agvMoving) - */ -extern int agvMoving; -void agvMove(void); - - /* - * These are the routines AGV registers to deal with mouse and keyboard input. - * Keyboard input only matters in flying mode, and then only to set speed. - * Mouse input only uses left two buttons in both modes. - * These are all registered with agvInit(), but you could register - * something else which called these, or reregister these as needed - */ -void agvHandleButton(int button, int state, int x, int y); -void agvHandleMotion(int x, int y); -void agvHandleKeys(unsigned char key, int x, int y); - - /* - * Just an extra routine which makes an x-y-z axes (about 10x10x10) - * which is nice for aligning things and debugging. Pass it an available - * displaylist number. - */ -void agvMakeAxesList(int displaylist); - - - - - - - - - - diff --git a/lib/glut-3.7.6/progs/demos/walker/win32_dirent.h b/lib/glut-3.7.6/progs/demos/walker/win32_dirent.h deleted file mode 100644 index 222e97400..000000000 --- a/lib/glut-3.7.6/progs/demos/walker/win32_dirent.h +++ /dev/null @@ -1,51 +0,0 @@ -#ifndef __win32_dirent__ -#define __win32_dirent__ - -/* For Win32 that lacks Unix direct support. */ - -#include -#include - -struct dirent { - char d_name[MAX_PATH]; -}; - -typedef struct { - WIN32_FIND_DATA wfd; - HANDLE hFind; - struct dirent de; -} DIR; - -static DIR * -opendir(char *pSpec) -{ - DIR *pDir = malloc(sizeof(DIR)); - /* XXX Windows 95 has problems opening up "." though Windows NT does this - fine? Open "*" instead of "." to be safe. -mjk */ - pDir->hFind = FindFirstFile(strcmp(pSpec, ".") ? pSpec : "*", - &pDir->wfd); - return pDir; -} - -static void -closedir(DIR * pDir) -{ - FindClose(pDir); - free(pDir); -} - -static struct dirent * -readdir(DIR *pDir) -{ - if (pDir->hFind) { - strcpy(pDir->de.d_name, pDir->wfd.cFileName); - if (!FindNextFile(pDir->hFind, &pDir->wfd)) - pDir->hFind = NULL; - return &pDir->de; - } - return NULL; -} - -#define fclose(f) { if (f!=NULL) fclose(f); } - -#endif /* __win32_dirent__ */ diff --git a/lib/glut-3.7.6/progs/demos/yacme/Editor.c b/lib/glut-3.7.6/progs/demos/yacme/Editor.c deleted file mode 100644 index 2f3bfcdad..000000000 --- a/lib/glut-3.7.6/progs/demos/yacme/Editor.c +++ /dev/null @@ -1,1372 +0,0 @@ -/*===========================================================================* - * - * YACME - * Yet Another ColorMap Editor - * - * Patrick BOUCHAUD - 1993 - * SGI Switzerland - * - * Converted to OpenGL using GLUT - * - *===========================================================================*/ - -#include -#include -#include -#include -#include - -#include "mallocbis.h" - -/* For portability... */ -#undef fsqrt -#define fsqrt(_a) sqrt(_a) - -#define SUP(a,b) ( ((a)>(b)) ? (a) : (b) ) -#define INF(a,b) ( ((a)<(b)) ? (a) : (b) ) -#define ABS(a) ( ((a)<0) ? -(a) : (a) ) -#define POINT 1 -#define CURVE 2 -#define LEFT_TAN 3 -#define RIGHT_TAN 4 -#define MANUAL 1 -#define CONTINUOUS 2 - -#define CONSTANT 1 -#define LINEAR 2 -#define POLYNOMIAL 3 - -#define TabCmpnt(c,n) TabCmpnt[(n)*4+(c)] - -#define MAXNDX (dimlut-1) - -#define WINHEIGHT 381 -#define WINWIDTH 318 - -#define LUTRATIO ((float)MAXNDX/255.) - -#define LEFT LUTRATIO*(-5.) -#define RIGHT LUTRATIO*(260.) -#define BOTTOM LUTRATIO*(-5.) -#define TOP LUTRATIO*(315.) -#define TANLEN LUTRATIO*(25.) - -typedef float Matrix[4][4]; - -typedef struct { - float x0, y0, - x1, y1; -} Tangente; - -typedef struct UserPointStruct { - - float x, y; - Tangente tg; - int mode; - float polynome[4]; - struct UserPointStruct *next, *last; - -} UserPoint; - -void ResetCMap(void); -void ApplyCMap(void); -void YACME_makeMenu(void); -extern void invertmat(float from[4][4], float to[4][4]); - -static UserPoint *FreePointList = NULL; -#define newPoint( point ) newItem( point, FreePointList, UserPoint ) -#define freePoint( point ) freeItem( point, FreePointList ) - -typedef struct { - int type, - cmpnt, - ndx; - - UserPoint *upoint; -} PickObject; - -struct { - int leftdown, middledown, rightdown; -} mouse; - -void YACME_pick( int mx, int my, PickObject *obj ); -void YACME_update( int cmpnt, UserPoint *upoint ); -int YACME_get( unsigned long *table ); - -void DeletePoint( int cmpnt, UserPoint *upoint ); -int MovePoint( int, int ); -int MoveTangente( int, int, int ); -int InsertPoint( PickObject *obj ); - -void GetPolynome( int mode, - float a0, float b0, float t0, - float a1, float b1, float t1, - float coeff[4] ); -void OrthoTransform( int mx, int my, float *x, float *y ); -float Polynome4( float x, float *polynome ); - -static int DrawCurve[4] = { 1, 1, 1, 1, }, - modifiedCurve[4] = { 1, 1, 1, 1 }, - YACME_refresh = MANUAL, - curCmpnt = 0, curType = 0, - Mousex, Mousey; - -static float *TabCmpnt; -static int YACME_switch_menu = 0, - YACME_mode_menu, YACME_edit_menu; -static int YACME_win = 0, W, H , update = 0; -static UserPoint *userPoint[4], *userPointSvg[4], *curPoint = NULL; - -static void Redraw( void ); -static void Reshape( int, int ); -static void Mouse( int, int, int, int ); -static void Motion( int, int ); -static void Key( unsigned char, int, int ); -static void Special( int, int, int ); -static void YACME_menuFunc( int ); - -typedef void (*CallBack)(void); -static CallBack newmapCB, applyCB; -static int dimlut; - -/*---------------------------------------------------------------------------* - * YACME_init - *---------------------------------------------------------------------------*/ -void -YACME_init( - int x, int y, int w, int h, - int dim, float **list, - CallBack newmapFunc, CallBack applyFunc) -{ - int i, j; - UserPoint *userpoint; - - if (YACME_win) return; - - dimlut = dim; - newmapCB = newmapFunc; - applyCB = applyFunc; - - if (*list==NULL) - { - *list = TabCmpnt = (float *) malloc( 4*dimlut*sizeof(float) ); - for (i=0; i<4; i++) - { - newPoint( userPoint[i] ); - userpoint = userPoint[i]; - userpoint->mode = POLYNOMIAL; - userpoint->x = 0.; - userpoint->y = 0.; - userpoint->last = NULL; - userpoint->tg.x0 = 0.; - userpoint->tg.y0 = 0.; - userpoint->tg.x1 = TANLEN; - userpoint->tg.y1 = 0.; - - newPoint( userpoint->next ); - userpoint = userpoint->next; - userpoint->mode = POLYNOMIAL; - userpoint->x = (float)MAXNDX; - userpoint->y = (float)MAXNDX; - userpoint->last = userPoint[i]; - userpoint->next = NULL; - userpoint->tg.x0 = (float)(MAXNDX-TANLEN); - userpoint->tg.y0 = (float)MAXNDX; - userpoint->tg.x1 = (float)MAXNDX; - userpoint->tg.y1 = (float)MAXNDX; - } - } - else - { - UserPoint *upoint[4], *lastupoint[4]={0,0,0,0}; - - TabCmpnt = *list; - for (i=0; inext ); - upoint[j] = upoint[j]->next; - } - upoint[j]->next = NULL; - upoint[j]->last = lastupoint[j]; - upoint[j]->mode = LINEAR; - upoint[j]->x = (float)i; - upoint[j]->y = (float)MAXNDX*TabCmpnt(j,i); - if (i==0) - { - upoint[j]->tg.x0 = 0.; - upoint[j]->tg.y0 = 0.; - upoint[j]->tg.x1 = TANLEN; - upoint[j]->tg.y1 = 0.; - } - else - { - float slope = upoint[j]->y - upoint[j]->last->y, - dx = TANLEN/fsqrt(slope*slope + 1), - dy = slope*dx; - upoint[j]->tg.x0 = upoint[j]->x - dx; - upoint[j]->tg.y0 = upoint[j]->y - dy; - upoint[j]->tg.x1 = upoint[j]->x + dx; - upoint[j]->tg.y1 = upoint[j]->y + dy; - } - - lastupoint[j] = upoint[j]; - } - } - } - -/* - TabComponents update - -------------------- -*/ - for (i=0; i<4; i++) - { - for (userpoint=userPoint[i]; userpoint!=NULL; userpoint=userpoint->next) - YACME_update( i, userpoint ); - } - ApplyCMap(); - - if (!YACME_win) - { - glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE ); - glutInitWindowPosition( x, y ); - glutInitWindowSize( w, h ); - YACME_win = glutCreateWindow( "LUT editor" ); - glutDisplayFunc( Redraw ); - glutReshapeFunc( Reshape ); - glutMouseFunc( Mouse ); - glutMotionFunc( Motion ); - glutPassiveMotionFunc( Motion ); - glutSpecialFunc( Special ); - glutKeyboardFunc( Key ); - - glMatrixMode( GL_PROJECTION ); - glLoadIdentity(); - glOrtho( LEFT, RIGHT, BOTTOM, TOP, -1., 1. ); - - glClearColor( 0.66, 0.66, 0.66, 1. ); - glClear( GL_COLOR_BUFFER_BIT ); - glShadeModel( GL_FLAT ); - glutSwapBuffers(); - - YACME_makeMenu(); - } -} - -/*---------------------------------------------------------------------------* - * Key - *---------------------------------------------------------------------------*/ -/* ARGSUSED1 */ -static void -Key( unsigned char key, int x, int y ) -{ - UserPoint *previousPoint; - switch (key) - { - case 27: /* Escape */ - exit(0); - break; - - case 127: /* BackSpace */ - case 8: /* Delete */ - if (!curPoint) return; - previousPoint = (curPoint->last ? curPoint->last : userPoint[curCmpnt]); - DeletePoint( curCmpnt, curPoint ); - modifiedCurve[curCmpnt] = 1; - update = 1; - curPoint = previousPoint; - break; - } - glutPostRedisplay(); -} - -/*---------------------------------------------------------------------------* - * Special - *---------------------------------------------------------------------------*/ -/* ARGSUSED1 */ -static void -Special( int key, int xx, int yy ) -{ - int x, y, minx, maxx; - float dx, dy; - if (curPoint == NULL ) return; - if (curPoint->next == NULL) return; - if (curPoint->last == NULL) return; - - x = (int)curPoint->x; - y = (int)curPoint->y; - - minx = (int)curPoint->last->x; minx++; - maxx = (int)curPoint->next->x; maxx--; - - switch (key) - { - case GLUT_KEY_LEFT: - if (x > minx) x--; - break; - - case GLUT_KEY_RIGHT: - if (x < maxx) x++; - break; - - case GLUT_KEY_UP: - if (y < MAXNDX) y++; - break; - - case GLUT_KEY_DOWN: - if (y > 0) y--; - break; - } - - dx = (float)x - curPoint->x; - curPoint->x += dx; - curPoint->tg.x0 += dx; - curPoint->tg.x1 += dx; - - dy = (float)y - curPoint->y; - curPoint->y = y; - curPoint->tg.y0 += dy; - curPoint->tg.y1 += dy; - - update = 1; - glutPostRedisplay(); -} - -/*---------------------------------------------------------------------------* - * Reshape - *---------------------------------------------------------------------------*/ -static void -Reshape( int w, int h ) -{ - glViewport( 0, 0, w, h ); - W = w; - H = h; - glutPostRedisplay(); -} - -/*---------------------------------------------------------------------------* - * Mouse - *---------------------------------------------------------------------------*/ -static void -Mouse( int button, int state, int x, int y ) -{ - PickObject object; - - y = H-y; - switch (button) - { - case GLUT_RIGHT_BUTTON: - mouse.rightdown = (state==GLUT_DOWN); - break; - - case GLUT_MIDDLE_BUTTON: - mouse.middledown = (state==GLUT_DOWN); - break; - - case GLUT_LEFT_BUTTON: - mouse.leftdown = (state==GLUT_DOWN); - if (mouse.leftdown) - { - YACME_pick( x, y, &object ); - curType = object.type; - switch ( object.type ) - { - case CURVE: - if ((curType = InsertPoint( &object ) != 0)) - { - curPoint = object.upoint; - curCmpnt = object.cmpnt; - } - else curPoint = NULL; - break; - - case POINT: - case LEFT_TAN: - case RIGHT_TAN: - curPoint = object.upoint; - curCmpnt = object.cmpnt; - break; - - default: - curPoint = NULL; - } - break; - } - } - glutPostRedisplay(); -} - -/*---------------------------------------------------------------------------* - * Motion - *---------------------------------------------------------------------------*/ -static void -Motion( int x, int y ) -{ - Mousex = x; - Mousey = H-y; - if (mouse.leftdown) - { - switch (curType) - { - case POINT: - update = MovePoint( Mousex, Mousey ); - break; - - case LEFT_TAN: - update = MoveTangente( -1, Mousex, Mousey ); - break; - - case RIGHT_TAN: - update = MoveTangente( 1, Mousex, Mousey ); - break; - } - } - glutPostRedisplay(); -} - -/*---------------------------------------------------------------------------* - * YACME_makeMenu - *---------------------------------------------------------------------------*/ - -#define CONTINUOUS_ITEM 5 -#define MANUAL_ITEM 4 -#define APPLY_ITEM 3 -#define RESET_ITEM 2 -#define CLOSE_ITEM 1 - -#define RED_ITEM 10 -#define GREEN_ITEM 11 -#define BLUE_ITEM 12 -#define ALPHA_ITEM 13 - -#define CONSTANT_ITEM 22 -#define LINEAR_ITEM 21 -#define POLYNOM_ITEM 20 - -#define EDIT_RED_ITEM 30 -#define EDIT_GREEN_ITEM 31 -#define EDIT_BLUE_ITEM 32 -#define EDIT_ALPHA_ITEM 33 - -void -YACME_makeMenu(void) -{ - YACME_edit_menu = glutCreateMenu( YACME_menuFunc ); - glutAddMenuEntry( "red", EDIT_RED_ITEM ); - glutAddMenuEntry( "green", EDIT_GREEN_ITEM ); - glutAddMenuEntry( "blue", EDIT_BLUE_ITEM ); - glutAddMenuEntry( "alpha", EDIT_ALPHA_ITEM ); - - YACME_mode_menu = glutCreateMenu( YACME_menuFunc ); - glutAddMenuEntry( "Constant ", CONSTANT_ITEM ); - glutAddMenuEntry( "Linear ", LINEAR_ITEM ); - glutAddMenuEntry( "Polynomial", POLYNOM_ITEM ); - - YACME_switch_menu = glutCreateMenu( YACME_menuFunc ); - glutAddMenuEntry( "Red on", RED_ITEM ); - glutAddMenuEntry( "Green on", GREEN_ITEM ); - glutAddMenuEntry( "Blue on", BLUE_ITEM ); - glutAddMenuEntry( "Alpha on", ALPHA_ITEM ); - - glutCreateMenu( YACME_menuFunc ); - glutAddMenuEntry( "Manual ", MANUAL_ITEM ); - glutAddMenuEntry( "Apply", APPLY_ITEM ); - glutAddMenuEntry( "Reset", RESET_ITEM ); - glutAddMenuEntry( "Close", CLOSE_ITEM ); - glutAddSubMenu( "Mode... ", YACME_mode_menu ); - glutAddSubMenu( "Switch... ", YACME_switch_menu ); - glutAddSubMenu( "Edit... ", YACME_edit_menu ); - - glutAttachMenu( GLUT_RIGHT_BUTTON ); -} - -/*---------------------------------------------------------------------------* - * YACME_menuFunc - *---------------------------------------------------------------------------*/ -static void -YACME_menuFunc( int item ) -{ - switch( item ) - { - case CLOSE_ITEM: - break; - - case RESET_ITEM: - if (applyCB) (*applyCB)(); - else if (newmapCB) (*newmapCB)(); - ResetCMap(); - curPoint = NULL; - break; - - case APPLY_ITEM: - if (applyCB) (*applyCB)(); - else if (newmapCB) (*newmapCB)(); - ApplyCMap(); - break; - - case MANUAL_ITEM: /* switch to continuous */ - glutChangeToMenuEntry( 1, "Continuous", CONTINUOUS_ITEM ); - YACME_refresh = CONTINUOUS; - break; - - case CONTINUOUS_ITEM: /* switch to manual */ - glutChangeToMenuEntry( 1, "Manual ", MANUAL_ITEM ); - if (newmapCB) (*newmapCB)(); - ApplyCMap(); - YACME_refresh = MANUAL; - break; - - case RED_ITEM: - DrawCurve[0] = !DrawCurve[0]; - if (DrawCurve[0]) - glutChangeToMenuEntry( 1, "Red on", RED_ITEM ); - else - glutChangeToMenuEntry( 1, "Red off", RED_ITEM ); - curPoint = NULL; - break; - - case GREEN_ITEM: - DrawCurve[1] = !DrawCurve[1]; - if (DrawCurve[1]) - glutChangeToMenuEntry( 2, "Green on", GREEN_ITEM ); - else - glutChangeToMenuEntry( 2, "Green off", GREEN_ITEM ); - curPoint = NULL; - break; - - case BLUE_ITEM: - DrawCurve[2] = !DrawCurve[2]; - if (DrawCurve[2]) - glutChangeToMenuEntry( 3, "Blue on", BLUE_ITEM ); - else - glutChangeToMenuEntry( 3, "Blue off", BLUE_ITEM ); - curPoint = NULL; - break; - - case ALPHA_ITEM: - DrawCurve[3] = !DrawCurve[3]; - if (DrawCurve[3]) - glutChangeToMenuEntry( 4, "Alpha on", ALPHA_ITEM ); - else - glutChangeToMenuEntry( 4, "Alpha off", ALPHA_ITEM ); - curPoint = NULL; - break; - - case CONSTANT_ITEM: - if (curPoint != NULL) - { - update = 1; - curPoint->mode = CONSTANT; - } - break; - - case LINEAR_ITEM: - if (curPoint != NULL) - { - update = 1; - curPoint->mode = LINEAR; - } - break; - - case POLYNOM_ITEM: - if (curPoint != NULL) - { - update = 1; - curPoint->mode = POLYNOMIAL; - } - break; - - case EDIT_RED_ITEM: - case EDIT_GREEN_ITEM: - case EDIT_BLUE_ITEM: - case EDIT_ALPHA_ITEM: - curCmpnt = item-30; - curPoint = userPoint[curCmpnt]; - break; - } - glutPostRedisplay(); -} - -/*---------------------------------------------------------------------------* - * output - *---------------------------------------------------------------------------*/ -static void -output( float x, float y, char *string ) -{ - int len, i; - - glRasterPos2f(x, y); - len = (int) strlen(string); - for (i = 0; i < len; i++) - { - glutBitmapCharacter(GLUT_BITMAP_8_BY_13, string[i]); - } -} - -/*---------------------------------------------------------------------------* - * Redraw - *---------------------------------------------------------------------------*/ -static void -Redraw( void ) -{ - int i, j, ndx, cmpnt, priority[4]; - Tangente *tg; - UserPoint *upoint; - char string[256]; - - if (update) - { - modifiedCurve[curCmpnt] = 1; - YACME_update( curCmpnt, curPoint ); - if ( newmapCB && (YACME_refresh == CONTINUOUS)) - (*newmapCB)(); - update = 0; - } - - glClear( GL_COLOR_BUFFER_BIT ); - -/* - Barettes representant la table des couleurs - ------------------------------------------- -*/ - glBegin( GL_TRIANGLE_STRIP ); - glColor3f(TabCmpnt(0,0), TabCmpnt(1,0), TabCmpnt(2,0)); - glVertex2f( 0., 270.*LUTRATIO ); - glVertex2f( 0., 310.*LUTRATIO ); - glVertex2f( .5, 270.*LUTRATIO ); - glVertex2f( .5, 310.*LUTRATIO ); - glEnd(); - for ( i=1; ix-DIMPOINT, upoint->y-DIMPOINT ); - glVertex2f( upoint->x-DIMPOINT, upoint->y+DIMPOINT ); - glVertex2f( upoint->x+DIMPOINT, upoint->y-DIMPOINT ); - glVertex2f( upoint->x+DIMPOINT, upoint->y+DIMPOINT ); - glEnd(); -/* - Tangente - -------- -*/ - tg = &upoint->tg; - if (upoint->last ? upoint->last->mode == POLYNOMIAL : 0) - { - glBegin( GL_LINES ); - glVertex2f( tg->x0, tg->y0 ); - glVertex2f( upoint->x, upoint->y ); - glEnd(); - glBegin( GL_LINE_LOOP ); - glVertex2f( tg->x0-DIMPOINT, tg->y0-DIMPOINT ); - glVertex2f( tg->x0-DIMPOINT, tg->y0+DIMPOINT ); - glVertex2f( tg->x0+DIMPOINT, tg->y0+DIMPOINT ); - glVertex2f( tg->x0+DIMPOINT, tg->y0-DIMPOINT ); - glEnd(); - } - if (upoint->mode == POLYNOMIAL) - { - glBegin( GL_LINES ); - glVertex2f( upoint->x, upoint->y ); - glVertex2f( tg->x1, tg->y1 ); - glEnd(); - glBegin( GL_LINE_LOOP ); - glVertex2f( tg->x1-DIMPOINT, tg->y1-DIMPOINT ); - glVertex2f( tg->x1-DIMPOINT, tg->y1+DIMPOINT ); - glVertex2f( tg->x1+DIMPOINT, tg->y1+DIMPOINT ); - glVertex2f( tg->x1+DIMPOINT, tg->y1-DIMPOINT ); - glEnd(); - } - - } while ( (upoint=upoint->next) != NULL ); - -/* - Highlight current point - ----------------------- -*/ - ndx = curPoint->x; - h = curPoint->y; - switch (curCmpnt) - { - case 3: glColor3f(1.,1.,1.); break; - case 2: glColor3f(0.,0.,1.); break; - case 1: glColor3f(0.,1.,0.); break; - case 0: glColor3f(1.,0.,0.); break; - } - glBegin( GL_LINE_LOOP ); - glVertex2f( (float)ndx-2.*DIMPOINT, h-2.*DIMPOINT ); - glVertex2f( (float)ndx-2.*DIMPOINT, h+2.*DIMPOINT ); - glVertex2f( (float)ndx+2.*DIMPOINT, h+2.*DIMPOINT ); - glVertex2f( (float)ndx+2.*DIMPOINT, h-2.*DIMPOINT ); - glEnd(); - } - else - { - float x, y; - OrthoTransform( Mousex, Mousey, &x, &y ); - ndx = (int) SUP( INF(x,(float)MAXNDX), 0 ); - } - -/* - Coordinates text string - ----------------------- -*/ - glColor3f( 0., 0., 0. ); - sprintf( string, - "%.5d: rgba %.3f %.3f %.3f %.3f", - ndx, - TabCmpnt(0,ndx), - TabCmpnt(1,ndx), - TabCmpnt(2,ndx), - TabCmpnt(3,ndx) - ); - output( LUTRATIO, 257.*LUTRATIO, string ); - - glutSwapBuffers(); -} - -/*---------------------------------------------------------------------------* - * YACME_pick - *---------------------------------------------------------------------------*/ -void -YACME_pick( int mousex, int mousey, PickObject *obj ) -{ - int cmpnt, i, priority[4]; - float x, y, val; - Tangente *tg; - UserPoint *upoint; - float pickrad; - - obj->type = -1; - OrthoTransform( mousex, mousey, &x, &y ); - -/* - On travaille en priorite sur les objets definis par l'utilisateur - ----------------------------------------------------------------- -*/ - for ( i=0; i=0; i--, cmpnt=priority[i] ) if ( DrawCurve[cmpnt] ) { - - upoint = userPoint[cmpnt]; - while ( upoint != NULL ) { -/* - On cherche le POINT -*/ - if ( ABS(y-upoint->y) < pickrad && ABS(x-upoint->x) < pickrad ) { - obj->upoint = upoint; - obj->cmpnt = cmpnt; - obj->type = POINT; - return; - } -/* - On cherche la demi-tangente GAUCHE -*/ - tg = &upoint->tg; - if ( ABS(x-tg->x0) < pickrad && ABS(y-tg->y0) < pickrad ) { - obj->upoint = upoint; - obj->cmpnt = cmpnt; - obj->type = LEFT_TAN; - return; - } -/* - On cherche la demi-tangente DROITE -*/ - if ( ABS(x-tg->x1) < pickrad && ABS(y-tg->y1) < pickrad ) { - obj->upoint = upoint; - obj->cmpnt = cmpnt; - obj->type = RIGHT_TAN; - return; - } - upoint = upoint->next; - } -/* - Puis on cherche les coordonnees sur la CURVE - (On considere la precision suffisante pour le picking suivant l'axe X) - Remarque : on ne sort pas en ce cas, car la priorite est sur les objets - utilisateurs. -*/ - upoint = userPoint[cmpnt]; - while ( upoint->next->x < x ) { - upoint = upoint->next; - if ( upoint->next == NULL ) return; - } - - val = INF( SUP( Polynome4(x,upoint->polynome), 0.), (float)MAXNDX ); - if ( ABS(y-val) < pickrad ) { - obj->cmpnt = cmpnt; - obj->ndx = ((x-(int)x)<.5) ? (int)x : (int)x+1; - obj->type = CURVE; - return; - } - - } -} - -/*---------------------------------------------------------------------------* - * YACME_update - *---------------------------------------------------------------------------*/ -void -YACME_update( int cmpnt, UserPoint *upoint ) -{ - int i; - float val, t0, t1; - Tangente *tg; - - tg = &upoint->tg; - if ( tg->x1 != tg->x0 ) { - t0 = (tg->y1-tg->y0) / (tg->x1-tg->x0); - } else { - t0 = (tg->y1-tg->y0)*10000.; - } - - TabCmpnt(cmpnt,(int) upoint->x) = upoint->y/(float)MAXNDX; - if ( upoint->last != NULL ) { - - tg = &upoint->last->tg; - if ( tg->x1 != tg->x0 ) { - t1 = (tg->y1-tg->y0) / (tg->x1-tg->x0); - } else { - t1 = (tg->y1-tg->y0)*10000.; - } - - GetPolynome( - upoint->last->mode, - upoint->last->x, - upoint->last->y, - t1, - upoint->x, - upoint->y, - t0, - upoint->last->polynome - ); - - for ( i=1+(int) upoint->last->x; i<(int) upoint->x; i++ ) { - val = Polynome4((float) i, upoint->last->polynome)/(float)MAXNDX; - TabCmpnt(cmpnt,i) = INF( SUP(val,0.), 1. ); - } - } - - if ( upoint->next != NULL ) { - - tg = &upoint->next->tg; - if ( tg->x1 != tg->x0 ) { - t1 = (tg->y1-tg->y0) / (tg->x1-tg->x0); - } else { - t1 = (tg->y1-tg->y0)*10000.; - } - - GetPolynome( - upoint->mode, - upoint->x, - upoint->y, - t0, - upoint->next->x, - upoint->next->y, - t1, - upoint->polynome - ); - - for ( i=1+(int) upoint->x; i<(int) upoint->next->x; i++ ) { - val = Polynome4( (float) i, upoint->polynome )/(float)MAXNDX; - TabCmpnt(cmpnt,i) = INF( SUP(val,0.), 1. ); - } - TabCmpnt(cmpnt,(int) upoint->next->x) = upoint->next->y/(float)MAXNDX; - } -} - -/*---------------------------------------------------------------------------* - * freePointList - *---------------------------------------------------------------------------*/ -static void -freePointList( UserPoint *upoint ) -{ - while (upoint != NULL) - { - UserPoint *unext = upoint->next; - freePoint( upoint ); - upoint = unext; - } -} - -/*---------------------------------------------------------------------------* - * clonePointList - *---------------------------------------------------------------------------*/ -static UserPoint * -clonePointList( UserPoint *base ) -{ - UserPoint *clone, *upoint; - - if (base == NULL) return NULL; - - newPoint( clone ); - upoint = clone; - - memcpy( upoint, base, sizeof(UserPoint) ); - upoint->last = NULL; - upoint->next = NULL; - - while (base->next != NULL) - { - base = base->next; - newPoint( upoint->next ); - memcpy( upoint->next, base, sizeof(UserPoint) ); - upoint->next->last = upoint; - upoint->next->next = NULL; - upoint = upoint->next; - } - - return clone; -} - -/*---------------------------------------------------------------------------* - * ApplyCMap - *---------------------------------------------------------------------------*/ -void -ApplyCMap(void) -{ - int i; - - for (i=0; i<4; i++) if ( modifiedCurve[i] ) - { - freePointList( userPointSvg[i] ); - userPointSvg[i] = clonePointList( userPoint[i] ); - modifiedCurve[i] = 0; - } -} - -/*---------------------------------------------------------------------------* - * ResetCMap - *---------------------------------------------------------------------------*/ -void -ResetCMap(void) -{ - int i; - UserPoint *upoint; - - for (i=0; i<4; i++) if ( modifiedCurve[i] ) - { - freePointList( userPoint[i] ); - userPoint[i] = clonePointList( userPointSvg[i] ); - modifiedCurve[i] = 0; - - for (upoint=userPoint[i]; upoint!=NULL; upoint=upoint->next ) - YACME_update( i, upoint ); - } -} - -/*---------------------------------------------------------------------------* - * InsertPoint - *---------------------------------------------------------------------------*/ -int -InsertPoint( PickObject *obj ) -{ - float dx, dy, slope, coeff[4]; - int i; - Tangente *tg; - UserPoint *upoint, *userpoint; - - upoint = userPoint[obj->cmpnt]; - while ( (int) upoint->next->x <= obj->ndx ) { - upoint = upoint->next; - if ( upoint->next == NULL ) return 0; - } - if ( (int) upoint->x == obj->ndx ) { - obj->upoint = upoint; - return POINT; - } - - newPoint( userpoint ); - - userpoint->x = (float) obj->ndx; - userpoint->y = Polynome4( obj->ndx, upoint->polynome ); - userpoint->y = SUP( INF(userpoint->y, (float)MAXNDX), 0. ); - userpoint->mode = upoint->mode; - for ( i=0; i<4; i++ ) { - userpoint->polynome[i] = upoint->polynome[i]; - } - userpoint->next = upoint->next; - userpoint->last = upoint; - upoint->next = userpoint; - userpoint->next->last = userpoint; - -/* - calcul de slope = P'(index) - --------------------------- -*/ - - if ( userpoint->y == (float)MAXNDX || userpoint->y == 0. ) { - dx = 25.; - dy = 0.; - } else { - coeff[0] = userpoint->polynome[0]*3.; - coeff[1] = userpoint->polynome[1]*2.; - coeff[2] = userpoint->polynome[2]; - slope = coeff[0]; - for (i=1; i<3; i++) { - slope *= (float) obj->ndx; - slope += coeff[i]; - } -/* - Rappel : - cos( arctg(x) ) = 1/sqr( 1 + x^2 ); - sin( arctg(x) ) = |x|/sqr( 1 + x^2 ); -*/ - dx = 25. / fsqrt( slope*slope + 1. ); - dy = dx*slope; - } - dx *= LUTRATIO; - dy *= LUTRATIO; - - tg = &userpoint->tg; - tg->x0 = userpoint->x - dx; - tg->x1 = userpoint->x + dx; - tg->y0 = userpoint->y - dy; - tg->y1 = userpoint->y + dy; - - obj->upoint = userpoint; - return POINT; -} - -/*---------------------------------------------------------------------------* - * DeletePoint - *---------------------------------------------------------------------------*/ -void -DeletePoint( int cmpnt, UserPoint *upoint ) -{ - if ( upoint == NULL || upoint->last == NULL || upoint->next == NULL ) - return; - upoint->last->next = upoint->next; - upoint->next->last = upoint->last; - YACME_update( cmpnt, upoint->last ); - freePoint( upoint ); -} - -/*---------------------------------------------------------------------------* - * MovePoint - *---------------------------------------------------------------------------*/ -int -MovePoint( int mousex, int mousey ) -{ - float x, y, dx, dy, minx, maxx; - - OrthoTransform( mousex, mousey, &x, &y ); - - y = SUP( INF(y,(float)MAXNDX), 0. ); - x = ((x-(int)x)<.5) ? (float)(int)x : (float)(int)(x+1); - y = ((y-(int)y)<.5) ? (float)(int)y : (float)(int)(y+1); - if ( curPoint->next != NULL && curPoint->last!= NULL ) - { - minx = curPoint->last->x + 1.; - maxx = curPoint->next->x - 1.; - x = SUP( INF(x, maxx), minx ); - - dx = (float)x - curPoint->x; - curPoint->x = (float) x; - curPoint->tg.x0 += (float) dx; - curPoint->tg.x1 += (float) dx; - } - dy = (float)y - curPoint->y; - curPoint->y = (float)y; - curPoint->tg.y0 += (float) dy; - curPoint->tg.y1 += (float) dy; - - return 1; -} - -/*---------------------------------------------------------------------------* - * MoveTangente - *---------------------------------------------------------------------------*/ -int -MoveTangente( int sens, int mousex, int mousey ) -{ - float x, y, dx, dy, slope; - Tangente *tg; - - OrthoTransform( mousex, mousey, &x, &y ); - - if ( sens == -1 ) - { - x = INF(x, curPoint->x); - } - else - { - x = SUP(x, curPoint->x); - } - if ( x != curPoint->x ) - { - slope = (curPoint->y - y); - slope /= (curPoint->x - x); - dx = 25. / fsqrt( slope*slope + 1. ); - dy = dx*slope; - } - else - { - dx = 0.; - dy = (curPoint->y < y) ? sens*25. : -sens*25.; - } - - dx *= LUTRATIO; - dy *= LUTRATIO; - - tg = &curPoint->tg; - tg->x0 = curPoint->x; - tg->y0 = curPoint->y; - if ( curPoint->last != NULL ) { - tg->x0 -= dx; - tg->y0 -= dy; - } - tg->x1 = curPoint->x; - tg->y1 = curPoint->y; - if ( curPoint->next != NULL ) - { - tg->x1 += dx; - tg->y1 += dy; - } - - return 1; -} - -/*---------------------------------------------------------------------------* - * GetPolynome - *---------------------------------------------------------------------------*/ -/* - we want a polynom P(x) = Ax^3 + Bx^2 + Cx + D - so that : P(a0) = b0, P'(a0) = t0, P(a1) = b1, P'(a1) = t1 - i.e. - - | a0^3 a0^2 a0 1 | |A| |b0| - | a1^3 a1^2 a1 1 | |B| = |b1| - | 3a0^2 2a0 1 0 | |C| |t0| - | 3a1^2 2a1 1 0 | |D| |t1| -*/ -void -GetPolynome( - int mode, - float a0, float b0, float t0, - float a1, float b1, float t1, - float coeff[4] ) -{ - Matrix mat, INV_mat; - int i; - float val; - - switch (mode) - { - case CONSTANT: -/* we want P(x) = b0 */ - coeff[0] = 0.; - coeff[1] = 0.; - coeff[2] = 0.; - coeff[3] = b0; - break; - - case LINEAR: -/* - we want P(x) = b0 + (x-a0)/(a1-a0)*(b1-b0) - i.e. P(x) = x*[(b1-b0)/(a1-a0)] + b0 - a0*[(b1-b0)/(a1-a0)] -*/ - val = (b1-b0)/(a1-a0); - coeff[0] = 0.; - coeff[1] = 0.; - coeff[2] = val; - coeff[3] = b0 - a0*val; - break; - - case POLYNOMIAL: -/* - we want a polynom P(x) = Ax^3 + Bx^2 + Cx + D - so that : P(a0) = b0, P'(a0) = t0, P(a1) = b1, P'(a1) = t1 - i.e. - - | a0^3 a0^2 a0 1 | |A| |b0| - | a1^3 a1^2 a1 1 | |B| = |b1| - | 3a0^2 2a0 1 0 | |C| |t0| - | 3a1^2 2a1 1 0 | |D| |t1| -*/ - val = 1.; - for (i=3; i>=0; i--) - { - mat[0][i] = val; - val *= a0; - } - - val = 1.; - for (i=3; i>=0; i--) - { - mat[1][i] = val; - val *= a1; - } - - mat[2][3] = 0.; - mat[2][2] = 1.; - mat[2][1] = 2.*a0; - mat[2][0] = 3.*a0*a0; - - mat[3][3] = 0.; - mat[3][2] = 1.; - mat[3][1] = 2.*a1; - mat[3][0] = 3.*a1*a1; - - invertmat( mat, INV_mat ); - - for (i=0; i<4; i++) - coeff[i] = INV_mat[i][0]*b0 + - INV_mat[i][1]*b1 + - INV_mat[i][2]*t0 + - INV_mat[i][3]*t1; - break; - } -} - -/*---------------------------------------------------------------------------* - * OrthoTransform - *---------------------------------------------------------------------------*/ -void -OrthoTransform( int mx, int my, float *x, float *y ) -{ - float xf, yf; - - xf = (float) mx; - xf /= (float) W; - xf *= (float) (RIGHT - LEFT); - xf += (float) LEFT; - - yf = (float) my; - yf /= (float) H; - yf *= (float) (TOP - BOTTOM); - yf += (float) BOTTOM; - - *x = xf; - *y = yf; -} - -/*---------------------------------------------------------------------------* - * Polynome4 - *---------------------------------------------------------------------------*/ -float -Polynome4( float x, float *coeff ) -{ - int j; - float val = coeff[0]; - - for (j=1; j<4; j++) { - val *= x; - val += coeff[j]; - } - - return val; -} - -/*---------------------------------------------------------------------------* - * MAIN - *---------------------------------------------------------------------------*/ -#ifdef YACME_DBG -#include "RGBA.h" -int -main( int argc, char *argv[] ) -{ - glutInit( &argc, argv ); - - YACME_init( - 0, 0, WINWIDTH, WINHEIGHT, - 256, (float**)RGBA, - NULL, NULL - ); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} -#endif - diff --git a/lib/glut-3.7.6/progs/demos/yacme/Imakefile b/lib/glut-3.7.6/progs/demos/yacme/Imakefile deleted file mode 100644 index e89f13d14..000000000 --- a/lib/glut-3.7.6/progs/demos/yacme/Imakefile +++ /dev/null @@ -1,17 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1994. */ - -#include "../../../Glut.cf" - -TARGETS = yacme - -SRCS = Editor.c invertmat.c -OBJS = Editor.o invertmat.o - -DEFINES = -DYACME_DBG - -AllTarget($(TARGETS)) - -NormalGlutProgramTarget(yacme,$(OBJS)) - -DependTarget() diff --git a/lib/glut-3.7.6/progs/demos/yacme/RGBA.h b/lib/glut-3.7.6/progs/demos/yacme/RGBA.h deleted file mode 100644 index b80ab0115..000000000 --- a/lib/glut-3.7.6/progs/demos/yacme/RGBA.h +++ /dev/null @@ -1,268 +0,0 @@ - -/* - Initially default system lookup table - ------------------------------------- -*/ -static struct -{ - float r, g, b, a; -} -RGBA[256] = -{ - { 0.000000, 0.000000, 0.000000, 0.000000 }, - { 1.000000, 0.000000, 0.000000, 1.000000 }, - { 0.000000, 1.000000, 0.000000, 1.000000 }, - { 1.000000, 1.000000, 0.000000, 1.000000 }, - { 0.000000, 0.000000, 1.000000, 1.000000 }, - { 1.000000, 0.000000, 1.000000, 1.000000 }, - { 0.000000, 1.000000, 1.000000, 1.000000 }, - { 1.000000, 1.000000, 1.000000, 1.000000 }, - { 0.333333, 0.333333, 0.333333, 1.000000 }, - { 0.776471, 0.443137, 0.443137, 1.000000 }, - { 0.443137, 0.776471, 0.443137, 1.000000 }, - { 0.556863, 0.556863, 0.219608, 1.000000 }, - { 0.443137, 0.443137, 0.776471, 1.000000 }, - { 0.556863, 0.219608, 0.556863, 1.000000 }, - { 0.219608, 0.556863, 0.556863, 1.000000 }, - { 0.666667, 0.666667, 0.666667, 1.000000 }, - { 0.000000, 0.000000, 0.000000, 1.000000 }, - { 0.000000, 0.000000, 0.000000, 1.000000 }, - { 0.000000, 0.000000, 0.000000, 1.000000 }, - { 0.000000, 0.000000, 0.000000, 1.000000 }, - { 0.000000, 0.000000, 0.000000, 1.000000 }, - { 0.000000, 0.000000, 0.000000, 1.000000 }, - { 0.000000, 0.000000, 0.000000, 1.000000 }, - { 0.000000, 0.000000, 0.000000, 1.000000 }, - { 0.000000, 0.000000, 0.000000, 1.000000 }, - { 0.000000, 0.000000, 0.000000, 1.000000 }, - { 0.000000, 0.000000, 0.000000, 1.000000 }, - { 0.000000, 0.000000, 0.000000, 1.000000 }, - { 0.000000, 0.000000, 0.000000, 1.000000 }, - { 0.000000, 0.000000, 0.000000, 1.000000 }, - { 0.000000, 0.000000, 0.000000, 1.000000 }, - { 0.000000, 0.000000, 0.000000, 1.000000 }, - { 0.039216, 0.039216, 0.039216, 1.000000 }, - { 0.078431, 0.078431, 0.078431, 1.000000 }, - { 0.117647, 0.117647, 0.117647, 1.000000 }, - { 0.156863, 0.156863, 0.156863, 1.000000 }, - { 0.200000, 0.200000, 0.200000, 1.000000 }, - { 0.239216, 0.239216, 0.239216, 1.000000 }, - { 0.278431, 0.278431, 0.278431, 1.000000 }, - { 0.317647, 0.317647, 0.317647, 1.000000 }, - { 0.356863, 0.356863, 0.356863, 1.000000 }, - { 0.400000, 0.400000, 0.400000, 1.000000 }, - { 0.439216, 0.439216, 0.439216, 1.000000 }, - { 0.478431, 0.478431, 0.478431, 1.000000 }, - { 0.517647, 0.517647, 0.517647, 1.000000 }, - { 0.556863, 0.556863, 0.556863, 1.000000 }, - { 0.600000, 0.600000, 0.600000, 1.000000 }, - { 0.639216, 0.639216, 0.639216, 1.000000 }, - { 0.678431, 0.678431, 0.678431, 1.000000 }, - { 0.717647, 0.717647, 0.717647, 1.000000 }, - { 0.756863, 0.756863, 0.756863, 1.000000 }, - { 0.800000, 0.800000, 0.800000, 1.000000 }, - { 0.839216, 0.839216, 0.839216, 1.000000 }, - { 0.878431, 0.878431, 0.878431, 1.000000 }, - { 0.917647, 0.917647, 0.917647, 1.000000 }, - { 0.956863, 0.956863, 0.956863, 1.000000 }, - { 0.000000, 0.000000, 0.000000, 1.000000 }, - { 0.000000, 0.141176, 0.000000, 1.000000 }, - { 0.000000, 0.282353, 0.000000, 1.000000 }, - { 0.000000, 0.427451, 0.000000, 1.000000 }, - { 0.000000, 0.568627, 0.000000, 1.000000 }, - { 0.000000, 0.713726, 0.000000, 1.000000 }, - { 0.000000, 0.854902, 0.000000, 1.000000 }, - { 0.000000, 1.000000, 0.000000, 1.000000 }, - { 0.247059, 0.000000, 0.000000, 1.000000 }, - { 0.247059, 0.141176, 0.000000, 1.000000 }, - { 0.247059, 0.282353, 0.000000, 1.000000 }, - { 0.247059, 0.427451, 0.000000, 1.000000 }, - { 0.247059, 0.568627, 0.000000, 1.000000 }, - { 0.247059, 0.713726, 0.000000, 1.000000 }, - { 0.247059, 0.854902, 0.000000, 1.000000 }, - { 0.247059, 1.000000, 0.000000, 1.000000 }, - { 0.498039, 0.000000, 0.000000, 1.000000 }, - { 0.498039, 0.141176, 0.000000, 1.000000 }, - { 0.498039, 0.282353, 0.000000, 1.000000 }, - { 0.498039, 0.427451, 0.000000, 1.000000 }, - { 0.498039, 0.568627, 0.000000, 1.000000 }, - { 0.498039, 0.713726, 0.000000, 1.000000 }, - { 0.498039, 0.854902, 0.000000, 1.000000 }, - { 0.498039, 1.000000, 0.000000, 1.000000 }, - { 0.749020, 0.000000, 0.000000, 1.000000 }, - { 0.749020, 0.141176, 0.000000, 1.000000 }, - { 0.749020, 0.282353, 0.000000, 1.000000 }, - { 0.749020, 0.427451, 0.000000, 1.000000 }, - { 0.749020, 0.568627, 0.000000, 1.000000 }, - { 0.749020, 0.713726, 0.000000, 1.000000 }, - { 0.749020, 0.854902, 0.000000, 1.000000 }, - { 0.749020, 1.000000, 0.000000, 1.000000 }, - { 1.000000, 0.000000, 0.000000, 1.000000 }, - { 1.000000, 0.141176, 0.000000, 1.000000 }, - { 1.000000, 0.282353, 0.000000, 1.000000 }, - { 1.000000, 0.427451, 0.000000, 1.000000 }, - { 1.000000, 0.568627, 0.000000, 1.000000 }, - { 1.000000, 0.713726, 0.000000, 1.000000 }, - { 1.000000, 0.854902, 0.000000, 1.000000 }, - { 1.000000, 1.000000, 0.000000, 1.000000 }, - { 0.000000, 0.000000, 0.247059, 1.000000 }, - { 0.000000, 0.141176, 0.247059, 1.000000 }, - { 0.000000, 0.282353, 0.247059, 1.000000 }, - { 0.000000, 0.427451, 0.247059, 1.000000 }, - { 0.000000, 0.568627, 0.247059, 1.000000 }, - { 0.000000, 0.713726, 0.247059, 1.000000 }, - { 0.000000, 0.854902, 0.247059, 1.000000 }, - { 0.000000, 1.000000, 0.247059, 1.000000 }, - { 0.247059, 0.000000, 0.247059, 1.000000 }, - { 0.247059, 0.141176, 0.247059, 1.000000 }, - { 0.247059, 0.282353, 0.247059, 1.000000 }, - { 0.247059, 0.427451, 0.247059, 1.000000 }, - { 0.247059, 0.568627, 0.247059, 1.000000 }, - { 0.247059, 0.713726, 0.247059, 1.000000 }, - { 0.247059, 0.854902, 0.247059, 1.000000 }, - { 0.247059, 1.000000, 0.247059, 1.000000 }, - { 0.498039, 0.000000, 0.247059, 1.000000 }, - { 0.498039, 0.141176, 0.247059, 1.000000 }, - { 0.498039, 0.282353, 0.247059, 1.000000 }, - { 0.498039, 0.427451, 0.247059, 1.000000 }, - { 0.498039, 0.568627, 0.247059, 1.000000 }, - { 0.498039, 0.713726, 0.247059, 1.000000 }, - { 0.498039, 0.854902, 0.247059, 1.000000 }, - { 0.498039, 1.000000, 0.247059, 1.000000 }, - { 0.749020, 0.000000, 0.247059, 1.000000 }, - { 0.749020, 0.141176, 0.247059, 1.000000 }, - { 0.749020, 0.282353, 0.247059, 1.000000 }, - { 0.749020, 0.427451, 0.247059, 1.000000 }, - { 0.749020, 0.568627, 0.247059, 1.000000 }, - { 0.749020, 0.713726, 0.247059, 1.000000 }, - { 0.749020, 0.854902, 0.247059, 1.000000 }, - { 0.749020, 1.000000, 0.247059, 1.000000 }, - { 1.000000, 0.000000, 0.247059, 1.000000 }, - { 1.000000, 0.141176, 0.247059, 1.000000 }, - { 1.000000, 0.282353, 0.247059, 1.000000 }, - { 1.000000, 0.427451, 0.247059, 1.000000 }, - { 1.000000, 0.568627, 0.247059, 1.000000 }, - { 1.000000, 0.713726, 0.247059, 1.000000 }, - { 1.000000, 0.854902, 0.247059, 1.000000 }, - { 1.000000, 1.000000, 0.247059, 1.000000 }, - { 0.000000, 0.000000, 0.498039, 1.000000 }, - { 0.000000, 0.141176, 0.498039, 1.000000 }, - { 0.000000, 0.282353, 0.498039, 1.000000 }, - { 0.000000, 0.427451, 0.498039, 1.000000 }, - { 0.000000, 0.568627, 0.498039, 1.000000 }, - { 0.000000, 0.713726, 0.498039, 1.000000 }, - { 0.000000, 0.854902, 0.498039, 1.000000 }, - { 0.000000, 1.000000, 0.498039, 1.000000 }, - { 0.247059, 0.000000, 0.498039, 1.000000 }, - { 0.247059, 0.141176, 0.498039, 1.000000 }, - { 0.247059, 0.282353, 0.498039, 1.000000 }, - { 0.247059, 0.427451, 0.498039, 1.000000 }, - { 0.247059, 0.568627, 0.498039, 1.000000 }, - { 0.247059, 0.713726, 0.498039, 1.000000 }, - { 0.247059, 0.854902, 0.498039, 1.000000 }, - { 0.247059, 1.000000, 0.498039, 1.000000 }, - { 0.498039, 0.000000, 0.498039, 1.000000 }, - { 0.498039, 0.141176, 0.498039, 1.000000 }, - { 0.498039, 0.282353, 0.498039, 1.000000 }, - { 0.498039, 0.427451, 0.498039, 1.000000 }, - { 0.498039, 0.568627, 0.498039, 1.000000 }, - { 0.498039, 0.713726, 0.498039, 1.000000 }, - { 0.498039, 0.854902, 0.498039, 1.000000 }, - { 0.498039, 1.000000, 0.498039, 1.000000 }, - { 0.749020, 0.000000, 0.498039, 1.000000 }, - { 0.749020, 0.141176, 0.498039, 1.000000 }, - { 0.749020, 0.282353, 0.498039, 1.000000 }, - { 0.749020, 0.427451, 0.498039, 1.000000 }, - { 0.749020, 0.568627, 0.498039, 1.000000 }, - { 0.749020, 0.713726, 0.498039, 1.000000 }, - { 0.749020, 0.854902, 0.498039, 1.000000 }, - { 0.749020, 1.000000, 0.498039, 1.000000 }, - { 1.000000, 0.000000, 0.498039, 1.000000 }, - { 1.000000, 0.141176, 0.498039, 1.000000 }, - { 1.000000, 0.282353, 0.498039, 1.000000 }, - { 1.000000, 0.427451, 0.498039, 1.000000 }, - { 1.000000, 0.568627, 0.498039, 1.000000 }, - { 1.000000, 0.713726, 0.498039, 1.000000 }, - { 1.000000, 0.854902, 0.498039, 1.000000 }, - { 1.000000, 1.000000, 0.498039, 1.000000 }, - { 0.000000, 0.000000, 0.749020, 1.000000 }, - { 0.000000, 0.141176, 0.749020, 1.000000 }, - { 0.000000, 0.282353, 0.749020, 1.000000 }, - { 0.000000, 0.427451, 0.749020, 1.000000 }, - { 0.000000, 0.568627, 0.749020, 1.000000 }, - { 0.000000, 0.713726, 0.749020, 1.000000 }, - { 0.000000, 0.854902, 0.749020, 1.000000 }, - { 0.000000, 1.000000, 0.749020, 1.000000 }, - { 0.247059, 0.000000, 0.749020, 1.000000 }, - { 0.247059, 0.141176, 0.749020, 1.000000 }, - { 0.247059, 0.282353, 0.749020, 1.000000 }, - { 0.247059, 0.427451, 0.749020, 1.000000 }, - { 0.247059, 0.568627, 0.749020, 1.000000 }, - { 0.247059, 0.713726, 0.749020, 1.000000 }, - { 0.247059, 0.854902, 0.749020, 1.000000 }, - { 0.247059, 1.000000, 0.749020, 1.000000 }, - { 0.498039, 0.000000, 0.749020, 1.000000 }, - { 0.498039, 0.141176, 0.749020, 1.000000 }, - { 0.498039, 0.282353, 0.749020, 1.000000 }, - { 0.498039, 0.427451, 0.749020, 1.000000 }, - { 0.498039, 0.568627, 0.749020, 1.000000 }, - { 0.498039, 0.713726, 0.749020, 1.000000 }, - { 0.498039, 0.854902, 0.749020, 1.000000 }, - { 0.498039, 1.000000, 0.749020, 1.000000 }, - { 0.749020, 0.000000, 0.749020, 1.000000 }, - { 0.749020, 0.141176, 0.749020, 1.000000 }, - { 0.749020, 0.282353, 0.749020, 1.000000 }, - { 0.749020, 0.427451, 0.749020, 1.000000 }, - { 0.749020, 0.568627, 0.749020, 1.000000 }, - { 0.749020, 0.713726, 0.749020, 1.000000 }, - { 0.749020, 0.854902, 0.749020, 1.000000 }, - { 0.749020, 1.000000, 0.749020, 1.000000 }, - { 1.000000, 0.000000, 0.749020, 1.000000 }, - { 1.000000, 0.141176, 0.749020, 1.000000 }, - { 1.000000, 0.282353, 0.749020, 1.000000 }, - { 1.000000, 0.427451, 0.749020, 1.000000 }, - { 1.000000, 0.568627, 0.749020, 1.000000 }, - { 1.000000, 0.713726, 0.749020, 1.000000 }, - { 1.000000, 0.854902, 0.749020, 1.000000 }, - { 1.000000, 1.000000, 0.749020, 1.000000 }, - { 0.000000, 0.000000, 1.000000, 1.000000 }, - { 0.000000, 0.141176, 1.000000, 1.000000 }, - { 0.000000, 0.282353, 1.000000, 1.000000 }, - { 0.000000, 0.427451, 1.000000, 1.000000 }, - { 0.000000, 0.568627, 1.000000, 1.000000 }, - { 0.000000, 0.713726, 1.000000, 1.000000 }, - { 0.000000, 0.854902, 1.000000, 1.000000 }, - { 0.000000, 1.000000, 1.000000, 1.000000 }, - { 0.247059, 0.000000, 1.000000, 1.000000 }, - { 0.247059, 0.141176, 1.000000, 1.000000 }, - { 0.247059, 0.282353, 1.000000, 1.000000 }, - { 0.247059, 0.427451, 1.000000, 1.000000 }, - { 0.247059, 0.568627, 1.000000, 1.000000 }, - { 0.247059, 0.713726, 1.000000, 1.000000 }, - { 0.247059, 0.854902, 1.000000, 1.000000 }, - { 0.247059, 1.000000, 1.000000, 1.000000 }, - { 0.498039, 0.000000, 1.000000, 1.000000 }, - { 0.498039, 0.141176, 1.000000, 1.000000 }, - { 0.498039, 0.282353, 1.000000, 1.000000 }, - { 0.498039, 0.427451, 1.000000, 1.000000 }, - { 0.498039, 0.568627, 1.000000, 1.000000 }, - { 0.498039, 0.713726, 1.000000, 1.000000 }, - { 0.498039, 0.854902, 1.000000, 1.000000 }, - { 0.498039, 1.000000, 1.000000, 1.000000 }, - { 0.749020, 0.000000, 1.000000, 1.000000 }, - { 0.749020, 0.141176, 1.000000, 1.000000 }, - { 0.749020, 0.282353, 1.000000, 1.000000 }, - { 0.749020, 0.427451, 1.000000, 1.000000 }, - { 0.749020, 0.568627, 1.000000, 1.000000 }, - { 0.749020, 0.713726, 1.000000, 1.000000 }, - { 0.749020, 0.854902, 1.000000, 1.000000 }, - { 0.749020, 1.000000, 1.000000, 1.000000 }, - { 1.000000, 0.000000, 1.000000, 1.000000 }, - { 1.000000, 0.141176, 1.000000, 1.000000 }, - { 1.000000, 0.282353, 1.000000, 1.000000 }, - { 1.000000, 0.427451, 1.000000, 1.000000 }, - { 1.000000, 0.568627, 1.000000, 1.000000 }, - { 1.000000, 0.713726, 1.000000, 1.000000 }, - { 1.000000, 0.854902, 1.000000, 1.000000 }, - { 1.000000, 1.000000, 1.000000, 1.000000 } -}; diff --git a/lib/glut-3.7.6/progs/demos/yacme/invertmat.c b/lib/glut-3.7.6/progs/demos/yacme/invertmat.c deleted file mode 100644 index 8f984c60c..000000000 --- a/lib/glut-3.7.6/progs/demos/yacme/invertmat.c +++ /dev/null @@ -1,212 +0,0 @@ -/* - * matrix - - * Some utilities for working with matricies. - * - * Paul Haeberli - 1985 - */ -#include - -void -invertmat(float from[4][4], float to[4][4]) -{ - float wtemp[4][8]; - float m0,m1,m2,m3,s; - float *r0,*r1,*r2,*r3, *rtemp; - - r0 = wtemp[0]; - r1 = wtemp[1]; - r2 = wtemp[2]; - r3 = wtemp[3]; - r0[0] = from[0][0]; /* build up [A][I] */ - r0[1] = from[0][1]; - r0[2] = from[0][2]; - r0[3] = from[0][3]; - r0[4] = 1.0; - r0[5] = 0.0; - r0[6] = 0.0; - r0[7] = 0.0; - r1[0] = from[1][0]; - r1[1] = from[1][1]; - r1[2] = from[1][2]; - r1[3] = from[1][3]; - r1[4] = 0.0; - r1[5] = 1.0; - r1[6] = 0.0; - r1[7] = 0.0; - r2[0] = from[2][0]; - r2[1] = from[2][1]; - r2[2] = from[2][2]; - r2[3] = from[2][3]; - r2[4] = 0.0; - r2[5] = 0.0; - r2[6] = 1.0; - r2[7] = 0.0; - r3[0] = from[3][0]; - r3[1] = from[3][1]; - r3[2] = from[3][2]; - r3[3] = from[3][3]; - r3[4] = 0.0; - r3[5] = 0.0; - r3[6] = 0.0; - r3[7] = 1.0; - - if (r0[0] == 0.0) { /* swap rows if needed */ - if (r1[0] == 0.0) { - if (r2[0] == 0.0) { - if (r3[0] == 0.0) goto singular; - rtemp = r0; r0 = r3; r3 = rtemp; - } - else {rtemp = r0; r0 = r2; r2 = rtemp;} - } - else {rtemp = r0; r0 = r1; r1 = rtemp;} - } - m1 = r1[0]/r0[0]; /* eliminate first variable */ - m2 = r2[0]/r0[0]; - m3 = r3[0]/r0[0]; - s = r0[1]; - r1[1] = r1[1] - m1 * s; - r2[1] = r2[1] - m2 * s; - r3[1] = r3[1] - m3 * s; - s = r0[2]; - r1[2] = r1[2] - m1 * s; - r2[2] = r2[2] - m2 * s; - r3[2] = r3[2] - m3 * s; - s = r0[3]; - r1[3] = r1[3] - m1 * s; - r2[3] = r2[3] - m2 * s; - r3[3] = r3[3] - m3 * s; - s = r0[4]; - if (s != 0.0) { - r1[4] = r1[4] - m1 * s; - r2[4] = r2[4] - m2 * s; - r3[4] = r3[4] - m3 * s; - } - s = r0[5]; - if (s != 0.0) { - r1[5] = r1[5] - m1 * s; - r2[5] = r2[5] - m2 * s; - r3[5] = r3[5] - m3 * s; - } - s = r0[6]; - if (s != 0.0) { - r1[6] = r1[6] - m1 * s; - r2[6] = r2[6] - m2 * s; - r3[6] = r3[6] - m3 * s; - } - s = r0[7]; - if (s != 0.0) { - r1[7] = r1[7] - m1 * s; - r2[7] = r2[7] - m2 * s; - r3[7] = r3[7] - m3 * s; - } - - if (r1[1] == 0.0) { /* swap rows if needed */ - if (r2[1] == 0.0) { - if (r3[1] == 0.0) goto singular; - rtemp = r1; r1 = r3; r3 = rtemp; - } - else {rtemp = r1; r1 = r2; r2 = rtemp;} - } - m2 = r2[1]/r1[1]; /* eliminate second variable */ - m3 = r3[1]/r1[1]; - r2[2] = r2[2] - m2 * r1[2]; - r3[2] = r3[2] - m3 * r1[2]; - r3[3] = r3[3] - m3 * r1[3]; - r2[3] = r2[3] - m2 * r1[3]; - s = r1[4]; - if (s != 0.0) { - r2[4] = r2[4] - m2 * s; - r3[4] = r3[4] - m3 * s; - } - s = r1[5]; - if (s != 0.0) { - r2[5] = r2[5] - m2 * s; - r3[5] = r3[5] - m3 * s; - } - s = r1[6]; - if (s != 0.0) { - r2[6] = r2[6] - m2 * s; - r3[6] = r3[6] - m3 * s; - } - s = r1[7]; - if (s != 0.0) { - r2[7] = r2[7] - m2 * s; - r3[7] = r3[7] - m3 * s; - } - - if (r2[2] == 0.0) { /* swap last 2 rows if needed */ - if (r3[2] == 0.0) goto singular; - rtemp = r2; r2 = r3; r3 = rtemp; - } - m3 = r3[2]/r2[2]; /* eliminate third variable */ - r3[3] = r3[3] - m3 * r2[3]; - r3[4] = r3[4] - m3 * r2[4]; - r3[5] = r3[5] - m3 * r2[5]; - r3[6] = r3[6] - m3 * r2[6]; - r3[7] = r3[7] - m3 * r2[7]; - - if (r3[3] == 0.0) goto singular; - s = 1.0f/r3[3]; /* now back substitute row 3 */ - r3[4] = r3[4] * s; - r3[5] = r3[5] * s; - r3[6] = r3[6] * s; - r3[7] = r3[7] * s; - - m2 = r2[3]; /* now back substitute row 2 */ - s = 1.0f/r2[2]; - r2[4] = s * (r2[4] - r3[4] * m2); - r2[5] = s * (r2[5] - r3[5] * m2); - r2[6] = s * (r2[6] - r3[6] * m2); - r2[7] = s * (r2[7] - r3[7] * m2); - m1 = r1[3]; - r1[4] = (r1[4] - r3[4] * m1); - r1[5] = (r1[5] - r3[5] * m1); - r1[6] = (r1[6] - r3[6] * m1); - r1[7] = (r1[7] - r3[7] * m1); - m0 = r0[3]; - r0[4] = (r0[4] - r3[4] * m0); - r0[5] = (r0[5] - r3[5] * m0); - r0[6] = (r0[6] - r3[6] * m0); - r0[7] = (r0[7] - r3[7] * m0); - - m1 = r1[2]; /* now back substitute row 1 */ - s = 1.0f/r1[1]; - r1[4] = s * (r1[4] - r2[4] * m1); - r1[5] = s * (r1[5] - r2[5] * m1); - r1[6] = s * (r1[6] - r2[6] * m1); - r1[7] = s * (r1[7] - r2[7] * m1); - m0 = r0[2]; - r0[4] = (r0[4] - r2[4] * m0); - r0[5] = (r0[5] - r2[5] * m0); - r0[6] = (r0[6] - r2[6] * m0); - r0[7] = (r0[7] - r2[7] * m0); - - m0 = r0[1]; /* now back substitute row 0 */ - s = 1.0f/r0[0]; - r0[4] = s * (r0[4] - r1[4] * m0); - r0[5] = s * (r0[5] - r1[5] * m0); - r0[6] = s * (r0[6] - r1[6] * m0); - r0[7] = s * (r0[7] - r1[7] * m0); - - to[0][0] = r0[4]; /* copy results back */ - to[0][1] = r0[5]; - to[0][2] = r0[6]; - to[0][3] = r0[7]; - to[1][0] = r1[4]; - to[1][1] = r1[5]; - to[1][2] = r1[6]; - to[1][3] = r1[7]; - to[2][0] = r2[4]; - to[2][1] = r2[5]; - to[2][2] = r2[6]; - to[2][3] = r2[7]; - to[3][0] = r3[4]; - to[3][1] = r3[5]; - to[3][2] = r3[6]; - to[3][3] = r3[7]; - return; - -singular: - fprintf(stderr,"invertmat: singular matrix\n"); - return; -} diff --git a/lib/glut-3.7.6/progs/demos/yacme/mallocbis.h b/lib/glut-3.7.6/progs/demos/yacme/mallocbis.h deleted file mode 100644 index 6106e71dd..000000000 --- a/lib/glut-3.7.6/progs/demos/yacme/mallocbis.h +++ /dev/null @@ -1,13 +0,0 @@ - -#define newItem(item,list,type)\ - if (list == NULL)\ - item = (type *) malloc(sizeof(type));\ - else\ - {\ - item = list;\ - list = list->next;\ - } - -#define freeItem(item,list)\ - item->next = list;\ - list = item; diff --git a/lib/glut-3.7.6/progs/demos/yacme/yacme.dsp b/lib/glut-3.7.6/progs/demos/yacme/yacme.dsp deleted file mode 100644 index 1b7dcf1f8..000000000 --- a/lib/glut-3.7.6/progs/demos/yacme/yacme.dsp +++ /dev/null @@ -1,100 +0,0 @@ -# Microsoft Developer Studio Project File - Name="yacme" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=yacme - 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 "yacme.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 "yacme.mak" CFG="yacme - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "yacme - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "yacme - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "yacme - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "YACME_DBG" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "yacme - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "YACME_DBG" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "yacme - Win32 Release" -# Name "yacme - Win32 Debug" -# Begin Source File - -SOURCE=.\Editor.c -# End Source File -# Begin Source File - -SOURCE=.\invertmat.c -# End Source File -# Begin Source File - -SOURCE=.\mallocbis.h -# End Source File -# Begin Source File - -SOURCE=.\RGBA.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples.dsw b/lib/glut-3.7.6/progs/examples.dsw deleted file mode 100644 index b8b4638ef..000000000 --- a/lib/glut-3.7.6/progs/examples.dsw +++ /dev/null @@ -1,839 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "_all"=".\examples\_all.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name abgr - End Project Dependency - Begin Project Dependency - Project_Dep_Name bitfont - End Project Dependency - Begin Project Dependency - Project_Dep_Name blender - End Project Dependency - Begin Project Dependency - Project_Dep_Name circlefit - End Project Dependency - Begin Project Dependency - Project_Dep_Name cube - End Project Dependency - Begin Project Dependency - Project_Dep_Name dials - End Project Dependency - Begin Project Dependency - Project_Dep_Name dials2 - End Project Dependency - Begin Project Dependency - Project_Dep_Name dinoball - End Project Dependency - Begin Project Dependency - Project_Dep_Name dinodraw - End Project Dependency - Begin Project Dependency - Project_Dep_Name dinoshade - End Project Dependency - Begin Project Dependency - Project_Dep_Name dinospin - End Project Dependency - Begin Project Dependency - Project_Dep_Name editgrid - End Project Dependency - Begin Project Dependency - Project_Dep_Name evaltest - End Project Dependency - Begin Project Dependency - Project_Dep_Name fogtst - End Project Dependency - Begin Project Dependency - Project_Dep_Name fontdemo - End Project Dependency - Begin Project Dependency - Project_Dep_Name glpuzzle - End Project Dependency - Begin Project Dependency - Project_Dep_Name glutdino - End Project Dependency - Begin Project Dependency - Project_Dep_Name glutplane - End Project Dependency - Begin Project Dependency - Project_Dep_Name halomagic - End Project Dependency - Begin Project Dependency - Project_Dep_Name highlight - End Project Dependency - Begin Project Dependency - Project_Dep_Name lightlab - End Project Dependency - Begin Project Dependency - Project_Dep_Name luminance16 - End Project Dependency - Begin Project Dependency - Project_Dep_Name mjksift - End Project Dependency - Begin Project Dependency - Project_Dep_Name mjkwarp - End Project Dependency - Begin Project Dependency - Project_Dep_Name molehill - End Project Dependency - Begin Project Dependency - Project_Dep_Name movelight - End Project Dependency - Begin Project Dependency - Project_Dep_Name oclip - End Project Dependency - Begin Project Dependency - Project_Dep_Name ohidden - End Project Dependency - Begin Project Dependency - Project_Dep_Name olight - End Project Dependency - Begin Project Dependency - Project_Dep_Name olympic - End Project Dependency - Begin Project Dependency - Project_Dep_Name origami - End Project Dependency - Begin Project Dependency - Project_Dep_Name oversphere - End Project Dependency - Begin Project Dependency - Project_Dep_Name reflectdino - End Project Dependency - Begin Project Dependency - Project_Dep_Name rendereps - End Project Dependency - Begin Project Dependency - Project_Dep_Name resolution - End Project Dependency - Begin Project Dependency - Project_Dep_Name sb2db - End Project Dependency - Begin Project Dependency - Project_Dep_Name scene - End Project Dependency - Begin Project Dependency - Project_Dep_Name screendoor - End Project Dependency - Begin Project Dependency - Project_Dep_Name scube - End Project Dependency - Begin Project Dependency - Project_Dep_Name simple - End Project Dependency - Begin Project Dependency - Project_Dep_Name sphere - End Project Dependency - Begin Project Dependency - Project_Dep_Name sphere2 - End Project Dependency - Begin Project Dependency - Project_Dep_Name splatlogo - End Project Dependency - Begin Project Dependency - Project_Dep_Name spots - End Project Dependency - Begin Project Dependency - Project_Dep_Name stars - End Project Dependency - Begin Project Dependency - Project_Dep_Name stenciltst - End Project Dependency - Begin Project Dependency - Project_Dep_Name stereo - End Project Dependency - Begin Project Dependency - Project_Dep_Name stroke - End Project Dependency - Begin Project Dependency - Project_Dep_Name subwin - End Project Dependency - Begin Project Dependency - Project_Dep_Name surfgrid - End Project Dependency - Begin Project Dependency - Project_Dep_Name texenv - End Project Dependency - Begin Project Dependency - Project_Dep_Name trippy - End Project Dependency - Begin Project Dependency - Project_Dep_Name triselect - End Project Dependency - Begin Project Dependency - Project_Dep_Name zoomdino - End Project Dependency -}}} - -############################################################################### - -Project: "abgr"=".\examples\abgr.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "bitfont"=".\examples\bitfont.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "blender"=".\examples\blender.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "circlefit"=".\examples\circlefit.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "cube"=".\examples\cube.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "dials"=".\examples\dials.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "dials2"=".\examples\dials2.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "dinoball"=".\examples\dinoball.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "dinodraw"=".\examples\dinodraw.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "dinoshade"=".\examples\dinoshade.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "dinospin"=".\examples\dinospin.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "editgrid"=".\examples\editgrid.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "evaltest"=".\examples\evaltest.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "fogtst"=".\examples\fogtst.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "fontdemo"=".\examples\fontdemo.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "glpuzzle"=".\examples\glpuzzle.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "glutdino"=".\examples\glutdino.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "glutplane"=".\examples\glutplane.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "halomagic"=".\examples\halomagic.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "highlight"=".\examples\highlight.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "lightlab"=".\examples\lightlab.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "luminance16"=".\examples\luminance16.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "mjksift"=".\examples\mjksift.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "mjkwarp"=".\examples\mjkwarp.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "molehill"=".\examples\molehill.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "movelight"=".\examples\movelight.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "oclip"=".\examples\oclip.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "ohidden"=".\examples\ohidden.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "olight"=".\examples\olight.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "olympic"=".\examples\olympic.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "origami"=".\examples\origami.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "oversphere"=".\examples\oversphere.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "reflectdino"=".\examples\reflectdino.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "rendereps"=".\examples\rendereps.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "resolution"=".\examples\resolution.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "sb2db"=".\examples\sb2db.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "scene"=".\examples\scene.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "screendoor"=".\examples\screendoor.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "scube"=".\examples\scube.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "simple"=".\examples\simple.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "sphere"=".\examples\sphere.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "sphere2"=".\examples\sphere2.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "splatlogo"=".\examples\splatlogo.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "spots"=".\examples\spots.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "stars"=".\examples\stars.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "stenciltst"=".\examples\stenciltst.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "stereo"=".\examples\stereo.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "stroke"=".\examples\stroke.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "subwin"=".\examples\subwin.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "surfgrid"=".\examples\surfgrid.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "texenv"=".\examples\texenv.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "trippy"=".\examples\trippy.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "triselect"=".\examples\triselect.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "zoomdino"=".\examples\zoomdino.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/lib/glut-3.7.6/progs/examples/Imakefile b/lib/glut-3.7.6/progs/examples/Imakefile deleted file mode 100644 index d8b2cde74..000000000 --- a/lib/glut-3.7.6/progs/examples/Imakefile +++ /dev/null @@ -1,105 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1994. */ - -#include "../../Glut.cf" - -TARGETS = sphere scene movelight glutplane \ - stroke olympic glutdino dinospin \ - mjkwarp highlight subwin origami sphere2 lightlab \ - bitfont dinoball glpuzzle blender dials stereo \ - oclip ohidden olight scube spots \ - abgr stars stenciltst surfgrid texenv triselect fogtst dials2 \ - molehill zoomdino splatlogo oversphere fontdemo evaltest sb2db \ - screendoor simple cube reflectdino rendereps dinoshade halomagic \ - trippy mjksift circlefit editgrid dinodraw resolution - -SRCS = bitfont.c blender.c dials.c dinoball.c dinospin.c glpuzzle.c \ - glutdino.c glutplane.c highlight.c lightlab.c mjkwarp.c movelight.c \ - oclip.c ohidden.c olight.c olympic.c origami.c scene.c scube.c sphere.c \ - sphere2.c spots.c stereo.c stroke.c subwin.c trackball.c \ - abgr.c stars.c stenciltst.c surfgrid.c texenv.c triselect.c fogtst.c dials2.c \ - molehill.c splatlogo.c oversphere.c fontdemo.c evaltest.c sb2db.c \ - screendoor.c simple.c cube.c reflectdino.c rendereps.c dinoshade.c \ - halomagic.c trippy.c mjksift.c circlefit.c editgrid.c dinodraw.c \ - resolution.c - -AllTarget($(TARGETS)) - -SimpleGlutProgramTarget(abgr) -SimpleGlutProgramTarget(bitfont) -SimpleGlutProgramTarget(blender) -SimpleGlutProgramTarget(circlefit) -SimpleGlutProgramTarget(cube) -SimpleGlutProgramTarget(dials) -SimpleGlutProgramTarget(dials2) -SimpleGlutProgramTarget(dinoball) -SimpleGlutProgramTarget(dinoshade) -SimpleGlutProgramTarget(editgrid) -SimpleGlutProgramTarget(evaltest) -SimpleGlutProgramTarget(fontdemo) -SimpleGlutProgramTarget(fogtst) -SimpleGlutProgramTarget(glutdino) -SimpleGlutProgramTarget(glutplane) -SimpleGlutProgramTarget(halomagic) -SimpleGlutProgramTarget(highlight) -SimpleGlutProgramTarget(lightlab) -SimpleGlutProgramTarget(molehill) -SimpleGlutProgramTarget(movelight) -SimpleGlutProgramTarget(oclip) -SimpleGlutProgramTarget(ohidden) -SimpleGlutProgramTarget(olight) -SimpleGlutProgramTarget(olympic) -SimpleGlutProgramTarget(origami) -SimpleGlutProgramTarget(oversphere) -SimpleGlutProgramTarget(reflectdino) -SimpleGlutProgramTarget(rendereps) -SimpleGlutProgramTarget(resolution) -SimpleGlutProgramTarget(sb2db) -SimpleGlutProgramTarget(scene) -SimpleGlutProgramTarget(screendoor) -SimpleGlutProgramTarget(scube) -SimpleGlutProgramTarget(simple) -SimpleGlutProgramTarget(sphere) -SimpleGlutProgramTarget(sphere2) -SimpleGlutProgramTarget(spots) -SimpleGlutProgramTarget(stars) -SimpleGlutProgramTarget(stenciltst) -SimpleGlutProgramTarget(stereo) -SimpleGlutProgramTarget(stroke) -SimpleGlutProgramTarget(subwin) -SimpleGlutProgramTarget(surfgrid) -SimpleGlutProgramTarget(teapots) -SimpleGlutProgramTarget(texenv) -SimpleGlutProgramTarget(trippy) -SimpleGlutProgramTarget(triselect) -SimpleGlutProgramTarget(zoomdino) - -NormalGlutProgramTarget(dinodraw,dinodraw.o trackball.o) -NormalGlutProgramTarget(dinospin,dinospin.o trackball.o) -NormalGlutProgramTarget(glpuzzle,glpuzzle.o trackball.o) -NormalGlutProgramTarget(splatlogo,splatlogo.o logo.o) -NormalGlutProgramTarget(mjkwarp,mjkwarp.o mjkimage.o) -NormalGlutProgramTarget(mjksift,mjksift.o mjkimage.o) - -logo.o : logo.c.Z - $(RM) $@ - zcat logo.c.Z > logo.c - $(CC) -c $(CFLAGS) logo.c - $(RM) logo.c - -logo.c.Z : - test -e $@ || gzip -c logo.c > $@ - -mjkimage.o : mjkimage.c.Z - $(RM) $@ - zcat mjkimage.c.Z > mjkimage.c - $(CC) -c $(CFLAGS) mjkimage.c - $(RM) mjkimage.c - -mjkimage.c.Z : - test -e $@ || gzip -c mjkimage.c > $@ - -clean:: - $(RM) render.eps - -DependTarget() diff --git a/lib/glut-3.7.6/progs/examples/_all.dsp b/lib/glut-3.7.6/progs/examples/_all.dsp deleted file mode 100644 index 6a4421548..000000000 --- a/lib/glut-3.7.6/progs/examples/_all.dsp +++ /dev/null @@ -1,63 +0,0 @@ -# Microsoft Developer Studio Project File - Name="_all" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Generic Project" 0x010a - -CFG=_all - 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 "_all.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 "_all.mak" CFG="_all - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "_all - Win32 Release" (based on "Win32 (x86) Generic Project") -!MESSAGE "_all - Win32 Debug" (based on "Win32 (x86) Generic Project") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -MTL=midl.exe - -!IF "$(CFG)" == "_all - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" - -!ELSEIF "$(CFG)" == "_all - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "_all___Win32_Debug" -# PROP BASE Intermediate_Dir "_all___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" - -!ENDIF - -# Begin Target - -# Name "_all - Win32 Release" -# Name "_all - Win32 Debug" -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/abgr.c b/lib/glut-3.7.6/progs/examples/abgr.c deleted file mode 100644 index 476bf01e8..000000000 --- a/lib/glut-3.7.6/progs/examples/abgr.c +++ /dev/null @@ -1,217 +0,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. - */ - -/* abgr.c - Demonstrates the use of the extension EXT_abgr. - - The same image data is used for both ABGR and RGBA formats - in glDrawPixels and glTexImage2D. The left side uses ABGR, - the right side RGBA. The top polygon demonstrates use of texture, - and the bottom image is drawn with glDrawPixels. - - Note that the textures are defined as 3 component, so the alpha - value is not used in applying the DECAL environment. */ - -#include -#include -#include -#include - -GLenum doubleBuffer; -GLubyte ubImage[65536]; - -static void -Init(void) -{ - int j; - GLubyte *img; - GLsizei imgWidth = 128; - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(60.0, 1.0, 0.1, 1000.0); - glMatrixMode(GL_MODELVIEW); - glDisable(GL_DITHER); - - /* Create image */ - img = ubImage; - for (j = 0; j < 32 * imgWidth; j++) { - *img++ = 0xff; - *img++ = 0x00; - *img++ = 0x00; - *img++ = 0xff; - } - for (j = 0; j < 32 * imgWidth; j++) { - *img++ = 0xff; - *img++ = 0x00; - *img++ = 0xff; - *img++ = 0x00; - } - for (j = 0; j < 32 * imgWidth; j++) { - *img++ = 0xff; - *img++ = 0xff; - *img++ = 0x00; - *img++ = 0x00; - } - for (j = 0; j < 32 * imgWidth; j++) { - *img++ = 0x00; - *img++ = 0xff; - *img++ = 0x00; - *img++ = 0xff; - } -} - -/* ARGSUSED1 */ -static void -Key(unsigned char key, int x, int y) -{ - switch (key) { - case 27: - exit(0); - } -} - -void -TexFunc(void) -{ - glEnable(GL_TEXTURE_2D); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); - -#if GL_EXT_abgr - glTexImage2D(GL_TEXTURE_2D, 0, 3, 128, 128, 0, GL_ABGR_EXT, - GL_UNSIGNED_BYTE, ubImage); - - glBegin(GL_POLYGON); - glTexCoord2f(1.0, 1.0); - glVertex3f(-0.2, 0.8, -100.0); - glTexCoord2f(0.0, 1.0); - glVertex3f(-0.8, 0.8, -2.0); - glTexCoord2f(0.0, 0.0); - glVertex3f(-0.8, 0.2, -2.0); - glTexCoord2f(1.0, 0.0); - glVertex3f(-0.2, 0.2, -100.0); - glEnd(); -#endif - - glTexImage2D(GL_TEXTURE_2D, 0, 3, 128, 128, 0, GL_RGBA, - GL_UNSIGNED_BYTE, ubImage); - - glBegin(GL_POLYGON); - glTexCoord2f(1.0, 1.0); - glVertex3f(0.8, 0.8, -2.0); - glTexCoord2f(0.0, 1.0); - glVertex3f(0.2, 0.8, -100.0); - glTexCoord2f(0.0, 0.0); - glVertex3f(0.2, 0.2, -100.0); - glTexCoord2f(1.0, 0.0); - glVertex3f(0.8, 0.2, -2.0); - glEnd(); - - glDisable(GL_TEXTURE_2D); -} - -static void -Draw(void) -{ - - glClearColor(0.0, 0.0, 0.0, 1.0); - glClear(GL_COLOR_BUFFER_BIT); - -#if GL_EXT_abgr - glRasterPos3f(-0.8, -0.8, -1.5); - glDrawPixels(128, 128, GL_ABGR_EXT, GL_UNSIGNED_BYTE, ubImage); -#endif - - glRasterPos3f(0.2, -0.8, -1.5); - glDrawPixels(128, 128, GL_RGBA, GL_UNSIGNED_BYTE, ubImage); - - TexFunc(); - - if (doubleBuffer) { - glutSwapBuffers(); - } else { - glFlush(); - } -} - -static void -Args(int argc, char **argv) -{ - GLint i; - - doubleBuffer = GL_TRUE; - - for (i = 1; i < argc; i++) { - if (strcmp(argv[i], "-sb") == 0) { - doubleBuffer = GL_FALSE; - } else if (strcmp(argv[i], "-db") == 0) { - doubleBuffer = GL_TRUE; - } - } -} - -int -main(int argc, char **argv) -{ - GLenum type; - - glutInit(&argc, argv); - Args(argc, argv); - - type = GLUT_RGB; - type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; - glutInitDisplayMode(type); - glutCreateWindow("ABGR extension"); - if (!glutExtensionSupported("GL_EXT_abgr")) { - printf("Couldn't find abgr extension.\n"); - exit(0); - } -#if !GL_EXT_abgr - printf("WARNING: client-side OpenGL has no ABGR extension support!\n"); - printf(" Drawing only RGBA (and not ABGR) images and textures.\n"); -#endif - Init(); - glutKeyboardFunc(Key); - glutDisplayFunc(Draw); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/examples/abgr.dsp b/lib/glut-3.7.6/progs/examples/abgr.dsp deleted file mode 100644 index f2abc4ff9..000000000 --- a/lib/glut-3.7.6/progs/examples/abgr.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="abgr" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=abgr - 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 "abgr.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 "abgr.mak" CFG="abgr - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "abgr - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "abgr - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "abgr - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "abgr - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "abgr - Win32 Release" -# Name "abgr - Win32 Debug" -# Begin Source File - -SOURCE=.\abgr.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/bitfont.c b/lib/glut-3.7.6/progs/examples/bitfont.c deleted file mode 100644 index c198ca4a1..000000000 --- a/lib/glut-3.7.6/progs/examples/bitfont.c +++ /dev/null @@ -1,130 +0,0 @@ - -/* 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 -#include - -void *font = GLUT_BITMAP_TIMES_ROMAN_24; -void *fonts[] = -{ - GLUT_BITMAP_9_BY_15, - GLUT_BITMAP_TIMES_ROMAN_10, - GLUT_BITMAP_TIMES_ROMAN_24 -}; -char defaultMessage[] = "GLUT means OpenGL."; -char *message = defaultMessage; - -void -selectFont(int newfont) -{ - font = fonts[newfont]; - glutPostRedisplay(); -} - -void -selectMessage(int msg) -{ - switch (msg) { - case 1: - message = "abcdefghijklmnop"; - break; - case 2: - message = "ABCDEFGHIJKLMNOP"; - break; - } -} - -void -selectColor(int color) -{ - switch (color) { - case 1: - glColor3f(0.0, 1.0, 0.0); - break; - case 2: - glColor3f(1.0, 0.0, 0.0); - break; - case 3: - glColor3f(1.0, 1.0, 1.0); - break; - } - glutPostRedisplay(); -} - -void -tick(void) -{ - glutPostRedisplay(); -} - -void -output(int x, int y, char *string) -{ - int len, i; - - glRasterPos2f(x, y); - len = (int) strlen(string); - for (i = 0; i < len; i++) { - glutBitmapCharacter(font, string[i]); - } -} - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - output(0, 24, "This is written in a GLUT bitmap font."); - output(100, 100, message); - output(50, 145, "(positioned in pixels with upper-left origin)"); - glutSwapBuffers(); -} - -void -reshape(int w, int h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluOrtho2D(0, w, h, 0); - glMatrixMode(GL_MODELVIEW); -} - -int -main(int argc, char **argv) -{ - int i, msg_submenu, color_submenu; - - glutInit(&argc, argv); - for (i = 1; i < argc; i++) { - if (!strcmp(argv[i], "-mono")) { - font = GLUT_BITMAP_9_BY_15; - } - } - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); - glutInitWindowSize(500, 150); - glutCreateWindow("GLUT bitmap font example"); - glClearColor(0.0, 0.0, 0.0, 1.0); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glutIdleFunc(tick); - msg_submenu = glutCreateMenu(selectMessage); - glutAddMenuEntry("abc", 1); - glutAddMenuEntry("ABC", 2); - color_submenu = glutCreateMenu(selectColor); - glutAddMenuEntry("Green", 1); - glutAddMenuEntry("Red", 2); - glutAddMenuEntry("White", 3); - glutCreateMenu(selectFont); - glutAddMenuEntry("9 by 15", 0); - glutAddMenuEntry("Times Roman 10", 1); - glutAddMenuEntry("Times Roman 24", 2); - glutAddSubMenu("Messages", msg_submenu); - glutAddSubMenu("Color", color_submenu); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/examples/bitfont.dsp b/lib/glut-3.7.6/progs/examples/bitfont.dsp deleted file mode 100644 index f91882358..000000000 --- a/lib/glut-3.7.6/progs/examples/bitfont.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="bitfont" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=bitfont - 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 "bitfont.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 "bitfont.mak" CFG="bitfont - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "bitfont - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "bitfont - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "bitfont - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "bitfont - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "bitfont - Win32 Release" -# Name "bitfont - Win32 Debug" -# Begin Source File - -SOURCE=.\bitfont.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/blender.c b/lib/glut-3.7.6/progs/examples/blender.c deleted file mode 100644 index e9bbca142..000000000 --- a/lib/glut-3.7.6/progs/examples/blender.c +++ /dev/null @@ -1,161 +0,0 @@ - -/* 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. */ - -/* blender renders two spinning icosahedrons (red and green). - The blending factors for the two icosahedrons vary sinusoidally - and slightly out of phase. blender also renders two lines of - text in a stroke font: one line antialiased, the other not. */ - -#include -#include -#include - -GLfloat light0_ambient[] = -{0.2, 0.2, 0.2, 1.0}; -GLfloat light0_diffuse[] = -{0.0, 0.0, 0.0, 1.0}; -GLfloat light1_diffuse[] = -{1.0, 0.0, 0.0, 1.0}; -GLfloat light1_position[] = -{1.0, 1.0, 1.0, 0.0}; -GLfloat light2_diffuse[] = -{0.0, 1.0, 0.0, 1.0}; -GLfloat light2_position[] = -{-1.0, -1.0, 1.0, 0.0}; -float s = 0.0; -GLfloat angle1 = 0.0, angle2 = 0.0; - -void -output(GLfloat x, GLfloat y, char *text) -{ - char *p; - - glPushMatrix(); - glTranslatef(x, y, 0); - for (p = text; *p; p++) - glutStrokeCharacter(GLUT_STROKE_ROMAN, *p); - glPopMatrix(); -} - -void -display(void) -{ - static GLfloat amb[] = - {0.4, 0.4, 0.4, 0.0}; - static GLfloat dif[] = - {1.0, 1.0, 1.0, 0.0}; - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glEnable(GL_LIGHT1); - glDisable(GL_LIGHT2); - amb[3] = dif[3] = cos(s) / 2.0 + 0.5; - glMaterialfv(GL_FRONT, GL_AMBIENT, amb); - glMaterialfv(GL_FRONT, GL_DIFFUSE, dif); - - glPushMatrix(); - glTranslatef(-0.3, -0.3, 0.0); - glRotatef(angle1, 1.0, 5.0, 0.0); - glCallList(1); /* render ico display list */ - glPopMatrix(); - - glClear(GL_DEPTH_BUFFER_BIT); - glEnable(GL_LIGHT2); - glDisable(GL_LIGHT1); - amb[3] = dif[3] = 0.5 - cos(s * .95) / 2.0; - glMaterialfv(GL_FRONT, GL_AMBIENT, amb); - glMaterialfv(GL_FRONT, GL_DIFFUSE, dif); - - glPushMatrix(); - glTranslatef(0.3, 0.3, 0.0); - glRotatef(angle2, 1.0, 0.0, 5.0); - glCallList(1); /* render ico display list */ - glPopMatrix(); - - glPushAttrib(GL_ENABLE_BIT); - glDisable(GL_DEPTH_TEST); - glDisable(GL_LIGHTING); - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - gluOrtho2D(0, 1500, 0, 1500); - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); - /* Rotate text slightly to help show jaggies. */ - glRotatef(4, 0.0, 0.0, 1.0); - output(200, 225, "This is antialiased."); - glDisable(GL_LINE_SMOOTH); - glDisable(GL_BLEND); - output(160, 100, "This text is not."); - glPopMatrix(); - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glPopAttrib(); - glMatrixMode(GL_MODELVIEW); - - glutSwapBuffers(); -} - -void -idle(void) -{ - angle1 = (GLfloat) fmod(angle1 + 0.8, 360.0); - angle2 = (GLfloat) fmod(angle2 + 1.1, 360.0); - s += 0.05; - glutPostRedisplay(); -} - -void -visible(int vis) -{ - if (vis == GLUT_VISIBLE) - glutIdleFunc(idle); - else - glutIdleFunc(NULL); -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); - glutCreateWindow("blender"); - glutDisplayFunc(display); - glutVisibilityFunc(visible); - - glNewList(1, GL_COMPILE); /* create ico display list */ - glutSolidIcosahedron(); - glEndList(); - - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glLightfv(GL_LIGHT0, GL_AMBIENT, light0_ambient); - glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_diffuse); - glLightfv(GL_LIGHT1, GL_DIFFUSE, light1_diffuse); - glLightfv(GL_LIGHT1, GL_POSITION, light1_position); - glLightfv(GL_LIGHT2, GL_DIFFUSE, light2_diffuse); - glLightfv(GL_LIGHT2, GL_POSITION, light2_position); - glEnable(GL_DEPTH_TEST); - glEnable(GL_CULL_FACE); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glEnable(GL_LINE_SMOOTH); - glLineWidth(2.0); - - glMatrixMode(GL_PROJECTION); - gluPerspective( /* field of view in degree */ 40.0, - /* aspect ratio */ 1.0, - /* Z near */ 1.0, /* Z far */ 10.0); - glMatrixMode(GL_MODELVIEW); - gluLookAt(0.0, 0.0, 5.0, /* eye is at (0,0,5) */ - 0.0, 0.0, 0.0, /* center is at (0,0,0) */ - 0.0, 1.0, 0.); /* up is in positive Y direction */ - glTranslatef(0.0, 0.6, -1.0); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/examples/blender.dsp b/lib/glut-3.7.6/progs/examples/blender.dsp deleted file mode 100644 index 4d3bfcf68..000000000 --- a/lib/glut-3.7.6/progs/examples/blender.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="blender" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=blender - 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 "blender.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 "blender.mak" CFG="blender - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "blender - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "blender - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "blender - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "blender - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "blender - Win32 Release" -# Name "blender - Win32 Debug" -# Begin Source File - -SOURCE=.\blender.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/circlefit.c b/lib/glut-3.7.6/progs/examples/circlefit.c deleted file mode 100644 index e6fa8050e..000000000 --- a/lib/glut-3.7.6/progs/examples/circlefit.c +++ /dev/null @@ -1,277 +0,0 @@ - -/* 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. */ - -/* This is a small interactive demo of Dave Eberly's algorithm - that fits a circle boundary to a set of 2D points. */ - -#include -#include -#include -#include - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -typedef struct { - double x, y; -} Point2; - -/**************************************************************************** - Least squares fit of circle to set of points. - by Dave Eberly (eberly@cs.unc.edu or eberly@ndl.com) - ftp://ftp.cs.unc.edu/pub/users/eberly/magic/circfit.c - --------------------------------------------------------------------------- - Input: (x_i,y_i), 1 <= i <= N, where N >= 3 and not all points - are collinear - Output: circle center (a,b) and radius r - - Energy function to be minimized is - - E(a,b,r) = sum_{i=1}^N (L_i-r)^2 - - where L_i = |(x_i-a,y_i-b)|, the length of the specified vector. - Taking partial derivatives and setting equal to zero yield the - three nonlinear equations - - E_r = 0: r = Average(L_i) - E_a = 0: a = Average(x_i) + r * Average(dL_i/da) - E_b = 0: b = Average(y_i) + r * Average(dL_i/db) - - Replacing r in the last two equations yields - - a = Average(x_i) + Average(L_i) * Average(dL_i/da) = F(a,b) - b = Average(y_i) + Average(L_i) * Average(dL_i/db) = G(a,b) - - which can possibly be solved by fixed point iteration as - - a_{n+1} = F(a_n,b_n), b_{n+a} = G(a_n,b_n) - - with initial guess a_0 = Average(x_i) and b_0 = Average(y_i). - Derivative calculations show that - - dL_i/da = (a-x_i)/L_i, dL_i/db = (b-y_i)/L_i. - - --------------------------------------------------------------------------- - WARNING. I have not analyzed the convergence properties of the fixed - point iteration scheme. In a few experiments it seems to converge - just fine, but I do not guarantee convergence in all cases. - ****************************************************************************/ - -int -CircleFit(int N, Point2 * P, double *pa, double *pb, double *pr) -{ - /* user-selected parameters */ - const int maxIterations = 256; - const double tolerance = 1e-06; - - double a, b, r; - - /* compute the average of the data points */ - int i, j; - double xAvr = 0.0; - double yAvr = 0.0; - - for (i = 0; i < N; i++) { - xAvr += P[i].x; - yAvr += P[i].y; - } - xAvr /= N; - yAvr /= N; - - /* initial guess */ - a = xAvr; - b = yAvr; - - for (j = 0; j < maxIterations; j++) { - /* update the iterates */ - double a0 = a; - double b0 = b; - - /* compute average L, dL/da, dL/db */ - double LAvr = 0.0; - double LaAvr = 0.0; - double LbAvr = 0.0; - - for (i = 0; i < N; i++) { - double dx = P[i].x - a; - double dy = P[i].y - b; - double L = sqrt(dx * dx + dy * dy); - if (fabs(L) > tolerance) { - LAvr += L; - LaAvr -= dx / L; - LbAvr -= dy / L; - } - } - LAvr /= N; - LaAvr /= N; - LbAvr /= N; - - a = xAvr + LAvr * LaAvr; - b = yAvr + LAvr * LbAvr; - r = LAvr; - - if (fabs(a - a0) <= tolerance && fabs(b - b0) <= tolerance) - break; - } - - *pa = a; - *pb = b; - *pr = r; - - return (j < maxIterations ? j : -1); -} - -enum { - M_SHOW_CIRCLE, M_CIRCLE_INFO, M_RESET_POINTS, M_QUIT -}; - -#define MAX_POINTS 100 - -int num = 0; -Point2 list[MAX_POINTS]; -int circleFitNeedsRecalc = 0; -int showCircle = 1; -int circleInfo = 0; -int windowHeight; -double a, b, r = 0.0; /* X, Y, and radius of best fit circle. - */ - -void -drawCircle(float x, float y, float r) -{ - double angle; - - glPushMatrix(); - glTranslatef(x, y, 0); - glBegin(GL_TRIANGLE_FAN); - glVertex2f(0, 0); - for (angle = 0.0; angle <= 2 * M_PI; angle += M_PI / 24) { - glVertex2f(r * cos(angle), r * sin(angle)); - } - glEnd(); - glPopMatrix(); -} - -void -display(void) -{ - int i; - - if (circleFitNeedsRecalc) { - int rc; - - rc = CircleFit(num, list, &a, &b, &r); - if (rc == -1) { - fprintf(stderr, "circlefit: Problem fitting points to a circle encountered.\n"); - } else { - if (circleInfo) { - printf("%g @ (%g,%g)\n", r, a, b); - } - } - circleFitNeedsRecalc = 0; - } - glClear(GL_COLOR_BUFFER_BIT); - - if (showCircle && r > 0.0) { - glColor3ub(0xbb, 0xbb, 0xdd); - drawCircle(a, b, r); - } - glColor3ub(0, 100, 0); - glBegin(GL_POINTS); - for (i = 0; i < num; i++) { - glVertex2d(list[i].x, list[i].y); - } - glEnd(); - glutSwapBuffers(); -} - -void -reshape(int w, int h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluOrtho2D(0, w, 0, h); - glMatrixMode(GL_MODELVIEW); - windowHeight = h; -} - -void -addPoint(double x, double y) -{ - if (num + 1 >= MAX_POINTS) { - fprintf(stderr, "circlefit: limited to only %d points\n", MAX_POINTS); - return; - } - list[num].x = x; - list[num].y = y; - num++; - circleFitNeedsRecalc = 1; - glutPostRedisplay(); -} - -void -mouse(int button, int state, int x, int y) -{ - if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) { - addPoint(x, windowHeight - y); - } -} - -void -menu(int value) -{ - switch (value) { - case M_SHOW_CIRCLE: - showCircle = !showCircle; - break; - case M_CIRCLE_INFO: - circleInfo = !circleInfo; - break; - case M_RESET_POINTS: - num = 0; - r = 0.0; - break; - case M_QUIT: - exit(0); - } - glutPostRedisplay(); -} - -int -main(int argc, char **argv) -{ - glutInitWindowSize(400, 400); - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); - glutCreateWindow("Least squares fit of circle to set of points"); - - printf("\n"); - printf("Least squares fit of circle to set of points\n"); - printf("--------------------------------------------\n"); - printf("Click left mouse button to position points. The\n"); - printf("program then shows the circle whose boundary best\n"); - printf("fits the set of points specified. Try clicking\n"); - printf("points in a near circle.\n"); - printf("\n"); - - glClearColor(125.0 / 256.0, 158.0 / 256.0, 192.0 / 256.0, 1.0); - glPointSize(3.0); - glutReshapeFunc(reshape); - glutMouseFunc(mouse); - glutDisplayFunc(display); - glutCreateMenu(menu); - glutAddMenuEntry("Show/hide circle", M_SHOW_CIRCLE); - glutAddMenuEntry("Toggle info printing", M_CIRCLE_INFO); - glutAddMenuEntry("Reset points", M_RESET_POINTS); - glutAddMenuEntry("Quit", M_QUIT); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/examples/circlefit.dsp b/lib/glut-3.7.6/progs/examples/circlefit.dsp deleted file mode 100644 index d087f8d48..000000000 --- a/lib/glut-3.7.6/progs/examples/circlefit.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="circlefit" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=circlefit - 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 "circlefit.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 "circlefit.mak" CFG="circlefit - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "circlefit - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "circlefit - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "circlefit - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "circlefit - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "circlefit - Win32 Release" -# Name "circlefit - Win32 Debug" -# Begin Source File - -SOURCE=.\circlefit.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/cube.c b/lib/glut-3.7.6/progs/examples/cube.c deleted file mode 100644 index 80ec44f1d..000000000 --- a/lib/glut-3.7.6/progs/examples/cube.c +++ /dev/null @@ -1,93 +0,0 @@ - -/* 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. */ - -/* This program was requested by Patrick Earl; hopefully someone else - will write the equivalent Direct3D immediate mode program. */ - -#include - -GLfloat light_diffuse[] = {1.0, 0.0, 0.0, 1.0}; /* Red diffuse light. */ -GLfloat light_position[] = {1.0, 1.0, 1.0, 0.0}; /* Infinite light location. */ -GLfloat n[6][3] = { /* Normals for the 6 faces of a cube. */ - {-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} }; -GLint faces[6][4] = { /* Vertex indices for the 6 faces of a cube. */ - {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]; /* Will be filled in with X,Y,Z vertexes. */ - -void -drawBox(void) -{ - int i; - - for (i = 0; i < 6; i++) { - glBegin(GL_QUADS); - 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(); - } -} - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - drawBox(); - glutSwapBuffers(); -} - -void -init(void) -{ - /* Setup cube vertex data. */ - v[0][0] = v[1][0] = v[2][0] = v[3][0] = -1; - v[4][0] = v[5][0] = v[6][0] = v[7][0] = 1; - v[0][1] = v[1][1] = v[4][1] = v[5][1] = -1; - v[2][1] = v[3][1] = v[6][1] = v[7][1] = 1; - v[0][2] = v[3][2] = v[4][2] = v[7][2] = 1; - v[1][2] = v[2][2] = v[5][2] = v[6][2] = -1; - - /* Enable a single OpenGL light. */ - glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); - glLightfv(GL_LIGHT0, GL_POSITION, light_position); - glEnable(GL_LIGHT0); - glEnable(GL_LIGHTING); - - /* Use depth buffering for hidden surface elimination. */ - glEnable(GL_DEPTH_TEST); - - /* Setup the view of the cube. */ - glMatrixMode(GL_PROJECTION); - gluPerspective( /* field of view in degree */ 40.0, - /* aspect ratio */ 1.0, - /* Z near */ 1.0, /* Z far */ 10.0); - glMatrixMode(GL_MODELVIEW); - gluLookAt(0.0, 0.0, 5.0, /* eye is at (0,0,5) */ - 0.0, 0.0, 0.0, /* center is at (0,0,0) */ - 0.0, 1.0, 0.); /* up is in positive Y direction */ - - /* Adjust cube position to be asthetic angle. */ - glTranslatef(0.0, 0.0, -1.0); - glRotatef(60, 1.0, 0.0, 0.0); - glRotatef(-20, 0.0, 0.0, 1.0); -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); - glutCreateWindow("red 3D lighted cube"); - glutDisplayFunc(display); - init(); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/examples/cube.dsp b/lib/glut-3.7.6/progs/examples/cube.dsp deleted file mode 100644 index 9cfb01bd1..000000000 --- a/lib/glut-3.7.6/progs/examples/cube.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="cube" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=cube - 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 "cube.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 "cube.mak" CFG="cube - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "cube - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "cube - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "cube - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "cube - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "cube - Win32 Release" -# Name "cube - Win32 Debug" -# Begin Source File - -SOURCE=.\cube.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/dials.c b/lib/glut-3.7.6/progs/examples/dials.c deleted file mode 100644 index 57f7783b0..000000000 --- a/lib/glut-3.7.6/progs/examples/dials.c +++ /dev/null @@ -1,145 +0,0 @@ - -/* 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 -#include -#include -#include -#include - -int *dials, *buttons; -int numdials, numbuttons; -int dw, bw; - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -void -drawCircle(int x, int y, int r, int dir) -{ - float angle; - - glPushMatrix(); - glTranslatef(x,y,0); - glBegin(GL_TRIANGLE_FAN); - glVertex2f(0,0); - for(angle = 2*M_PI; angle >= 0; angle -= M_PI/12) { - glVertex2f(r*cos(angle),r*sin(angle)); - } - glEnd(); - glColor3f(0,0,1); - glBegin(GL_LINES); - glVertex2f(0,0); - glVertex2f(r*cos(dir*M_PI/180),r*sin(dir*M_PI/180)); - glEnd(); - glPopMatrix(); -} - -void -displayDials(void) -{ - int i; - - glClear(GL_COLOR_BUFFER_BIT); - for(i=0;i -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=dials - 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 "dials.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 "dials.mak" CFG="dials - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "dials - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "dials - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "dials - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "dials - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "dials - Win32 Release" -# Name "dials - Win32 Debug" -# Begin Source File - -SOURCE=.\dials.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/dials2.c b/lib/glut-3.7.6/progs/examples/dials2.c deleted file mode 100644 index 0c3e0c3d7..000000000 --- a/lib/glut-3.7.6/progs/examples/dials2.c +++ /dev/null @@ -1,140 +0,0 @@ - -/* 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 -#include -#include -#include -#include - -#define NUM_DIALS 8 -#define NUM_BUTTONS 32 - -int *dials, *buttons; - -#undef PI /* Some systems may have this defined. */ -#define PI 3.14159265358979323846 - -void -drawCircle(int x, int y, int r, int dir) -{ - float angle; - - glPushMatrix(); - glTranslatef(x,y,0); - glBegin(GL_TRIANGLE_FAN); - glVertex2f(0,0); - for(angle = 2*PI; angle >= 0; angle -= PI/12) { - glVertex2f(r*cos(angle),r*sin(angle)); - } - glEnd(); - glColor3f(0,0,1); - glBegin(GL_LINES); - glVertex2f(0,0); - glVertex2f(r*cos(dir*PI/180),r*sin(dir*PI/180)); - glEnd(); - glPopMatrix(); -} - -void -displayDials(void) -{ - int i; - - for(i=0;i 0 && dial <= NUM_DIALS) { - dials[dial - 1] = value % 360; - glutPostRedisplay(); - } -} - -void -dobutton(int button, int state) -{ - if(button > 0 && button <= NUM_BUTTONS) { - buttons[button-1] = (state == GLUT_DOWN); - glutPostRedisplay(); - } -} - -int -main(int argc, char **argv) -{ - int width, height; - glutInit(&argc, argv); - dials = (int*) calloc(NUM_DIALS, sizeof(int)); - buttons = (int*) calloc(NUM_BUTTONS, sizeof(int)); - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); - width = 240 + 240; - height = 100*((NUM_DIALS+1)/2) + 20; - if(height < 240) height = 240; - glutInitWindowSize(width, height); - glutCreateWindow("GLUT dials & buttons"); - glClearColor(0.5, 0.5, 0.5, 1.0); - glLineWidth(3.0); - glutDialsFunc(dodial); - glutButtonBoxFunc(dobutton); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glutInitWindowSize(240, 240); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/examples/dials2.dsp b/lib/glut-3.7.6/progs/examples/dials2.dsp deleted file mode 100644 index 06eb1bf9a..000000000 --- a/lib/glut-3.7.6/progs/examples/dials2.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="dials2" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=dials2 - 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 "dials2.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 "dials2.mak" CFG="dials2 - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "dials2 - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "dials2 - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "dials2 - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "dials2 - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "dials2 - Win32 Release" -# Name "dials2 - Win32 Debug" -# Begin Source File - -SOURCE=.\dials2.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/dinoball.c b/lib/glut-3.7.6/progs/examples/dinoball.c deleted file mode 100644 index 697def047..000000000 --- a/lib/glut-3.7.6/progs/examples/dinoball.c +++ /dev/null @@ -1,332 +0,0 @@ - -/* 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 -#include -#include -#include /* for cos(), sin(), and sqrt() */ -#include - -typedef enum { - RESERVED, BODY_SIDE, BODY_EDGE, BODY_WHOLE, ARM_SIDE, ARM_EDGE, ARM_WHOLE, - LEG_SIDE, LEG_EDGE, LEG_WHOLE, EYE_SIDE, EYE_EDGE, EYE_WHOLE, DINOSAUR -} displayLists; - -GLfloat angle = -150; /* in degrees */ -GLfloat xloc = 0, yloc = 0, zloc = 0; -int moving, begin; -int W = 300, H = 300; -GLdouble bodyWidth = 3.0; -int newModel = 1; -/* *INDENT-OFF* */ -GLfloat body[][2] = { {0, 3}, {1, 1}, {5, 1}, {8, 4}, {10, 4}, {11, 5}, - {11, 11.5}, {13, 12}, {13, 13}, {10, 13.5}, {13, 14}, {13, 15}, {11, 16}, - {8, 16}, {7, 15}, {7, 13}, {8, 12}, {7, 11}, {6, 6}, {4, 3}, {3, 2}, - {1, 2} }; -GLfloat arm[][2] = { {8, 10}, {9, 9}, {10, 9}, {13, 8}, {14, 9}, {16, 9}, - {15, 9.5}, {16, 10}, {15, 10}, {15.5, 11}, {14.5, 10}, {14, 11}, {14, 10}, - {13, 9}, {11, 11}, {9, 11} }; -GLfloat leg[][2] = { {8, 6}, {8, 4}, {9, 3}, {9, 2}, {8, 1}, {8, 0.5}, {9, 0}, - {12, 0}, {10, 1}, {10, 2}, {12, 4}, {11, 6}, {10, 7}, {9, 7} }; -GLfloat eye[][2] = { {8.75, 15}, {9, 14.7}, {9.6, 14.7}, {10.1, 15}, - {9.6, 15.25}, {9, 15.25} }; -GLfloat lightZeroPosition[] = {10.0, 4.0, 10.0, 1.0}; -GLfloat lightZeroColor[] = {0.8, 1.0, 0.8, 1.0}; /* green-tinted */ -GLfloat lightOnePosition[] = {-1.0, -2.0, 1.0, 0.0}; -GLfloat lightOneColor[] = {0.6, 0.3, 0.2, 1.0}; /* red-tinted */ -GLfloat skinColor[] = {0.1, 1.0, 0.1, 1.0}, eyeColor[] = {1.0, 0.2, 0.2, 1.0}; -/* *INDENT-ON* */ - -void -extrudeSolidFromPolygon(GLfloat data[][2], unsigned int dataSize, - GLdouble thickness, GLuint side, GLuint edge, GLuint whole) -{ - static GLUtriangulatorObj *tobj = NULL; - GLdouble vertex[3], dx, dy, len; - int i; - int count = dataSize / (int) (2 * sizeof(GLfloat)); - - if (tobj == NULL) { - tobj = gluNewTess(); /* create and initialize a GLU - polygon tesselation object */ - gluTessCallback(tobj, GLU_BEGIN, glBegin); - gluTessCallback(tobj, GLU_VERTEX, glVertex2fv); /* semi-tricky */ - gluTessCallback(tobj, GLU_END, glEnd); - } - glNewList(side, GL_COMPILE); - glShadeModel(GL_SMOOTH); /* smooth minimizes seeing - tessellation */ - gluBeginPolygon(tobj); - for (i = 0; i < count; i++) { - vertex[0] = data[i][0]; - vertex[1] = data[i][1]; - vertex[2] = 0; - gluTessVertex(tobj, vertex, data[i]); - } - gluEndPolygon(tobj); - glEndList(); - glNewList(edge, GL_COMPILE); - glShadeModel(GL_FLAT); /* flat shade keeps angular hands - from being "smoothed" */ - glBegin(GL_QUAD_STRIP); - for (i = 0; i <= count; i++) { - /* mod function handles closing the edge */ - glVertex3f(data[i % count][0], data[i % count][1], 0.0); - glVertex3f(data[i % count][0], data[i % count][1], thickness); - /* Calculate a unit normal by dividing by Euclidean - distance. We * could be lazy and use - glEnable(GL_NORMALIZE) so we could pass in * arbitrary - normals for a very slight performance hit. */ - dx = data[(i + 1) % count][1] - data[i % count][1]; - dy = data[i % count][0] - data[(i + 1) % count][0]; - len = sqrt(dx * dx + dy * dy); - glNormal3f(dx / len, dy / len, 0.0); - } - glEnd(); - glEndList(); - glNewList(whole, GL_COMPILE); - glFrontFace(GL_CW); - glCallList(edge); - glNormal3f(0.0, 0.0, -1.0); /* constant normal for side */ - glCallList(side); - glPushMatrix(); - glTranslatef(0.0, 0.0, thickness); - glFrontFace(GL_CCW); - glNormal3f(0.0, 0.0, 1.0); /* opposite normal for other side */ - glCallList(side); - glPopMatrix(); - glEndList(); -} - -void -makeDinosaur(void) -{ - extrudeSolidFromPolygon(body, sizeof(body), bodyWidth, - BODY_SIDE, BODY_EDGE, BODY_WHOLE); - extrudeSolidFromPolygon(arm, sizeof(arm), bodyWidth / 4, - ARM_SIDE, ARM_EDGE, ARM_WHOLE); - extrudeSolidFromPolygon(leg, sizeof(leg), bodyWidth / 2, - LEG_SIDE, LEG_EDGE, LEG_WHOLE); - extrudeSolidFromPolygon(eye, sizeof(eye), bodyWidth + 0.2, - EYE_SIDE, EYE_EDGE, EYE_WHOLE); - glNewList(DINOSAUR, GL_COMPILE); - glMaterialfv(GL_FRONT, GL_DIFFUSE, skinColor); - glCallList(BODY_WHOLE); - glPushMatrix(); - glTranslatef(0.0, 0.0, bodyWidth); - glCallList(ARM_WHOLE); - glCallList(LEG_WHOLE); - glTranslatef(0.0, 0.0, -bodyWidth - bodyWidth / 4); - glCallList(ARM_WHOLE); - glTranslatef(0.0, 0.0, -bodyWidth / 4); - glCallList(LEG_WHOLE); - glTranslatef(0.0, 0.0, bodyWidth / 2 - 0.1); - glMaterialfv(GL_FRONT, GL_DIFFUSE, eyeColor); - glCallList(EYE_WHOLE); - glPopMatrix(); - glEndList(); -} - -void -recalcModelView(void) -{ - glPopMatrix(); - glPushMatrix(); - glTranslatef(xloc, yloc, zloc); - glRotatef(angle, 0.0, 1.0, 0.0); - glTranslatef(-8, -8, -bodyWidth / 2); - newModel = 0; -} - -void -redraw(void) -{ - if (newModel) - recalcModelView(); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glCallList(DINOSAUR); - glutSwapBuffers(); -} - -/* ARGSUSED3 */ -void -mouse(int button, int state, int x, int y) -{ - if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) { - moving = 1; - begin = x; - } - if (button == GLUT_LEFT_BUTTON && state == GLUT_UP) { - moving = 0; - } -} - -/* ARGSUSED1 */ -void -motion(int x, int y) -{ - if (moving) { - angle = angle + (x - begin); - begin = x; - newModel = 1; - glutPostRedisplay(); - } -} - -void -tablet(int x, int y) -{ - xloc = ((GLfloat) x) / 500 - 4; - yloc = ((GLfloat) y) / 1000 - 2; - newModel = 1; - glutPostRedisplay(); -} - -int xt = 1, yt = 1, zt = 1, xr = 1; - -void -translate(int x, int y, int z) -{ - GLfloat newz; - - if (xt) - xloc += ((GLfloat) x) / 100; - if (yt) - yloc += ((GLfloat) y) / 100; - if (zt) { - newz = zloc - ((GLfloat) z) / 100; - if (newz > -60.0 && newz < 13.0) - zloc = newz; - } - newModel = 1; - glutPostRedisplay(); -} - -/* ARGSUSED1 */ -void -rotate(int x, int y, int z) -{ - if (xr) { - angle += x / 2.0; - newModel = 1; - glutPostRedisplay(); - } -} - -void -button(int button, int state) -{ - if (state == GLUT_DOWN) { - switch (button) { - case 1: - xt = yt = zt = xr = 1; - break; - case 5: - xt = 1; - yt = zt = xr = 0; - break; - case 6: - yt = 1; - xt = zt = xr = 0; - break; - case 7: - zt = 1; - xt = yt = xr = 0; - break; - case 8: - xr = 1; - xt = yt = zt = 0; - break; - case 9: - xloc = yloc = zloc = 0; - newModel = 1; - glutPostRedisplay(); - break; - } - } -} - -void -dials(int dial, int value) -{ - if (dial == 0) { - angle = value / 10.0; - newModel = 1; - glutPostRedisplay(); - } -} - -GLboolean lightZeroSwitch = GL_TRUE, lightOneSwitch = GL_TRUE; - -void -controlLights(int value) -{ - switch (value) { - case 1: - lightZeroSwitch = !lightZeroSwitch; - if (lightZeroSwitch) { - glEnable(GL_LIGHT0); - } else { - glDisable(GL_LIGHT0); - } - break; - case 2: - lightOneSwitch = !lightOneSwitch; - if (lightOneSwitch) { - glEnable(GL_LIGHT1); - } else { - glDisable(GL_LIGHT1); - } - break; - } - glutPostRedisplay(); -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH | GLUT_MULTISAMPLE); - glutCreateWindow("dinoball (Spaceball demo)"); - glutDisplayFunc(redraw); - glutMouseFunc(mouse); - glutMotionFunc(motion); - glutTabletMotionFunc(tablet); - glutSpaceballMotionFunc(translate); - glutSpaceballRotateFunc(rotate); - glutSpaceballButtonFunc(button); - glutDialsFunc(dials); - glutCreateMenu(controlLights); - glutAddMenuEntry("Toggle right light", 1); - glutAddMenuEntry("Toggle left light", 2); - glutAttachMenu(GLUT_RIGHT_BUTTON); - makeDinosaur(); - glEnable(GL_CULL_FACE); - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - glMatrixMode(GL_PROJECTION); - gluPerspective( /* field of view in degree */ 40.0, - /* aspect ratio */ 1.0, - /* Z near */ 1.0, /* Z far */ 100.0); - glMatrixMode(GL_MODELVIEW); - gluLookAt(0.0, 0.0, 30.0, /* eye is at (0,0,30) */ - 0.0, 0.0, 0.0, /* center is at (0,0,0) */ - 0.0, 1.0, 0.); /* up is in positive Y direction */ - glPushMatrix(); /* dummy push so we can pop on model - recalc */ - glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, 1); - glLightfv(GL_LIGHT0, GL_POSITION, lightZeroPosition); - glLightfv(GL_LIGHT0, GL_DIFFUSE, lightZeroColor); - glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 0.1); - glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 0.05); - glLightfv(GL_LIGHT1, GL_POSITION, lightOnePosition); - glLightfv(GL_LIGHT1, GL_DIFFUSE, lightOneColor); - glEnable(GL_LIGHT0); - glEnable(GL_LIGHT1); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/examples/dinoball.dsp b/lib/glut-3.7.6/progs/examples/dinoball.dsp deleted file mode 100644 index 3391849df..000000000 --- a/lib/glut-3.7.6/progs/examples/dinoball.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="dinoball" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=dinoball - 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 "dinoball.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 "dinoball.mak" CFG="dinoball - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "dinoball - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "dinoball - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "dinoball - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "dinoball - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "dinoball - Win32 Release" -# Name "dinoball - Win32 Debug" -# Begin Source File - -SOURCE=.\dinoball.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/dinodraw.c b/lib/glut-3.7.6/progs/examples/dinodraw.c deleted file mode 100644 index a7ba3e4b9..000000000 --- a/lib/glut-3.7.6/progs/examples/dinodraw.c +++ /dev/null @@ -1,420 +0,0 @@ -/* - * Dinodraw.c - * - * Copyright (c) James Bowman 1998, - * parts (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. */ - -/* Modified version of Mark J. Kilgard's dinospin that demontrates use of - * stencil buffer to interactively view overdraw. - */ - -#include -#include -#include -#include /* for cos(), sin(), and sqrt() */ -#include -#include "trackball.h" - -typedef enum { - RESERVED, BODY_SIDE, BODY_EDGE, BODY_WHOLE, ARM_SIDE, ARM_EDGE, ARM_WHOLE, - LEG_SIDE, LEG_EDGE, LEG_WHOLE, EYE_SIDE, EYE_EDGE, EYE_WHOLE, DINOSAUR -} displayLists; - -GLfloat angle = -150; /* in degrees */ -GLboolean doubleBuffer = GL_TRUE, iconic = GL_FALSE, keepAspect = GL_FALSE; -int spinning = 0, moving = 0; -int beginx, beginy; -int W = 300, H = 300; -float curquat[4]; -float lastquat[4]; -GLdouble bodyWidth = 2.0; -int newModel = 1; -int scaling; -float scalefactor = 1.0; -/* *INDENT-OFF* */ -GLfloat body[][2] = { {0, 3}, {1, 1}, {5, 1}, {8, 4}, {10, 4}, {11, 5}, - {11, 11.5}, {13, 12}, {13, 13}, {10, 13.5}, {13, 14}, {13, 15}, {11, 16}, - {8, 16}, {7, 15}, {7, 13}, {8, 12}, {7, 11}, {6, 6}, {4, 3}, {3, 2}, - {1, 2} }; -GLfloat arm[][2] = { {8, 10}, {9, 9}, {10, 9}, {13, 8}, {14, 9}, {16, 9}, - {15, 9.5}, {16, 10}, {15, 10}, {15.5, 11}, {14.5, 10}, {14, 11}, {14, 10}, - {13, 9}, {11, 11}, {9, 11} }; -GLfloat leg[][2] = { {8, 6}, {8, 4}, {9, 3}, {9, 2}, {8, 1}, {8, 0.5}, {9, 0}, - {12, 0}, {10, 1}, {10, 2}, {12, 4}, {11, 6}, {10, 7}, {9, 7} }; -GLfloat eye[][2] = { {8.75, 15}, {9, 14.7}, {9.6, 14.7}, {10.1, 15}, - {9.6, 15.25}, {9, 15.25} }; -GLfloat lightZeroPosition[] = {10.0, 4.0, 10.0, 1.0}; -GLfloat lightZeroColor[] = {0.8, 1.0, 0.8, 1.0}; /* green-tinted */ -GLfloat lightOnePosition[] = {-1.0, -2.0, 1.0, 0.0}; -GLfloat lightOneColor[] = {0.6, 0.3, 0.2, 1.0}; /* red-tinted */ -GLfloat skinColor[] = {0.1, 1.0, 0.1, 1.0}, eyeColor[] = {1.0, 0.2, 0.2, 1.0}; -/* *INDENT-ON* */ - -void -extrudeSolidFromPolygon(GLfloat data[][2], unsigned int dataSize, - GLdouble thickness, GLuint side, GLuint edge, GLuint whole) -{ - static GLUtriangulatorObj *tobj = NULL; - GLdouble vertex[3], dx, dy, len; - int i; - int count = dataSize / (2 * sizeof(GLfloat)); - - if (tobj == NULL) { - tobj = gluNewTess(); /* create and initialize a GLU - polygon * * tesselation object */ - gluTessCallback(tobj, GLU_BEGIN, glBegin); - gluTessCallback(tobj, GLU_VERTEX, glVertex2fv); /* semi-tricky - - */ - gluTessCallback(tobj, GLU_END, glEnd); - } - glNewList(side, GL_COMPILE); - glShadeModel(GL_SMOOTH); /* smooth minimizes seeing - tessellation */ - gluBeginPolygon(tobj); - for (i = 0; i < count; i++) { - vertex[0] = data[i][0]; - vertex[1] = data[i][1]; - vertex[2] = 0; - gluTessVertex(tobj, vertex, data[i]); - } - gluEndPolygon(tobj); - glEndList(); - glNewList(edge, GL_COMPILE); - glShadeModel(GL_FLAT); /* flat shade keeps angular hands - from being * * "smoothed" */ - glBegin(GL_QUAD_STRIP); - for (i = 0; i <= count; i++) { - /* mod function handles closing the edge */ - glVertex3f(data[i % count][0], data[i % count][1], 0.0); - glVertex3f(data[i % count][0], data[i % count][1], thickness); - /* Calculate a unit normal by dividing by Euclidean - distance. We * could be lazy and use - glEnable(GL_NORMALIZE) so we could pass in * arbitrary - normals for a very slight performance hit. */ - dx = data[(i + 1) % count][1] - data[i % count][1]; - dy = data[i % count][0] - data[(i + 1) % count][0]; - len = sqrt(dx * dx + dy * dy); - glNormal3f(dx / len, dy / len, 0.0); - } - glEnd(); - glEndList(); - glNewList(whole, GL_COMPILE); - glFrontFace(GL_CW); - glCallList(edge); - glNormal3f(0.0, 0.0, -1.0); /* constant normal for side */ - glCallList(side); - glPushMatrix(); - glTranslatef(0.0, 0.0, thickness); - glFrontFace(GL_CCW); - glNormal3f(0.0, 0.0, 1.0); /* opposite normal for other side - - */ - glCallList(side); - glPopMatrix(); - glEndList(); -} - -void -makeDinosaur(void) -{ - GLfloat bodyWidth = 3.0; - - extrudeSolidFromPolygon(body, sizeof(body), bodyWidth, - BODY_SIDE, BODY_EDGE, BODY_WHOLE); - extrudeSolidFromPolygon(arm, sizeof(arm), bodyWidth / 4, - ARM_SIDE, ARM_EDGE, ARM_WHOLE); - extrudeSolidFromPolygon(leg, sizeof(leg), bodyWidth / 2, - LEG_SIDE, LEG_EDGE, LEG_WHOLE); - extrudeSolidFromPolygon(eye, sizeof(eye), bodyWidth + 0.2, - EYE_SIDE, EYE_EDGE, EYE_WHOLE); - glNewList(DINOSAUR, GL_COMPILE); - glMaterialfv(GL_FRONT, GL_DIFFUSE, skinColor); - glCallList(BODY_WHOLE); - glPushMatrix(); - glTranslatef(0.0, 0.0, bodyWidth); - glCallList(ARM_WHOLE); - glCallList(LEG_WHOLE); - glTranslatef(0.0, 0.0, -bodyWidth - bodyWidth / 4); - glCallList(ARM_WHOLE); - glTranslatef(0.0, 0.0, -bodyWidth / 4); - glCallList(LEG_WHOLE); - glTranslatef(0.0, 0.0, bodyWidth / 2 - 0.1); - glMaterialfv(GL_FRONT, GL_DIFFUSE, eyeColor); - glCallList(EYE_WHOLE); - glPopMatrix(); - glEndList(); -} - -void -recalcModelView(void) -{ - GLfloat m[4][4]; - - glPopMatrix(); - glPushMatrix(); - build_rotmatrix(m, curquat); - glMultMatrixf(&m[0][0]); - glScalef(scalefactor, scalefactor, scalefactor); - glTranslatef(-8, -8, -bodyWidth / 2); - newModel = 0; -} - -void -showMessage(GLfloat x, GLfloat y, GLfloat z, char *message) -{ - glPushMatrix(); - glDisable(GL_LIGHTING); - glTranslatef(x, y, z); - glScalef(.02, .02, .02); - while (*message) { - glutStrokeCharacter(GLUT_STROKE_ROMAN, *message); - message++; - } - glEnable(GL_LIGHTING); - glPopMatrix(); -} - -void -redraw(void) -{ - if (newModel) - recalcModelView(); - - glClear(GL_COLOR_BUFFER_BIT | - GL_DEPTH_BUFFER_BIT | - GL_STENCIL_BUFFER_BIT); - - /* Draw the real scene in the left viewport... */ - glViewport(0, 0, W / 2, H); - - glDisable(GL_STENCIL_TEST); - glCallList(DINOSAUR); - showMessage(2, 7.1, 4.1, "Spin me."); - - /* ...and the overdraw indicator in the right viewport */ - glViewport(W / 2, 0, W / 2, H); - - /* First draw the scene again, this time without color updates, - * just counting pixels drawn in the stencil buffer. - */ - glEnable(GL_STENCIL_TEST); - glStencilFunc(GL_ALWAYS, 0, 0); - glStencilOp(GL_KEEP, GL_INCR, GL_INCR); - glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); - glCallList(DINOSAUR); - showMessage(2, 7.1, 4.1, "Spin me."); - - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - glDisable(GL_LIGHTING); - glDisable(GL_DEPTH_TEST); - - glColor3f(1.0f, 1.0f, 1.0f); - glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); - - /* Copy bit 0 into the blue plane */ - glColorMask(GL_FALSE, GL_FALSE, GL_TRUE, GL_FALSE); - glStencilFunc(GL_NOTEQUAL, 0, 0xf8 | 0x01); - glRectf(-1.0f, -1.0f, 1.0f, 1.0f); - - /* Copy bit 1 into the red plane */ - glColorMask(GL_TRUE, GL_FALSE, GL_FALSE, GL_FALSE); - glStencilFunc(GL_NOTEQUAL, 0, 0xf8 | 0x02); - glRectf(-1.0f, -1.0f, 1.0f, 1.0f); - - /* Copy bit 2 into the green plane */ - glColorMask(GL_FALSE, GL_TRUE, GL_FALSE, GL_FALSE); - glStencilFunc(GL_NOTEQUAL, 0, 0xf8 | 0x04); - glRectf(-1.0f, -1.0f, 1.0f, 1.0f); - - /* Note that anything greater than 7 will have one of bits 3-7 set, - * hence will be drawn on all three planes by the mask with 0xf8 above. - * So anything overdrawn 7 or more times will be drawn in white. - */ - - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); - - glutSwapBuffers(); -} - -void -myReshape(int w, int h) -{ - glViewport(0, 0, w / 2, h); - W = w; - H = h; -} - -void -mouse(int button, int state, int x, int y) -{ - if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) { - spinning = 0; - glutIdleFunc(NULL); - moving = 1; - beginx = x; - beginy = y; - if (glutGetModifiers() & GLUT_ACTIVE_SHIFT) { - scaling = 1; - } else { - scaling = 0; - } - } - if (button == GLUT_LEFT_BUTTON && state == GLUT_UP) { - moving = 0; - } -} - -void -animate(void) -{ - add_quats(lastquat, curquat, curquat); - newModel = 1; - glutPostRedisplay(); -} - -void -motion(int x, int y) -{ - if (scaling) { - scalefactor = scalefactor * (1.0 + (((float) (beginy - y)) / H)); - beginx = x; - beginy = y; - newModel = 1; - glutPostRedisplay(); - return; - } - if (moving) { - trackball(lastquat, - (2.0 * beginx - W) / W, - (H - 2.0 * beginy) / H, - (2.0 * x - W) / W, - (H - 2.0 * y) / H - ); - beginx = x; - beginy = y; - spinning = 1; - glutIdleFunc(animate); - } -} - -GLboolean lightZeroSwitch = GL_TRUE, lightOneSwitch = GL_TRUE; - -void -controlLights(int value) -{ - switch (value) { - case 1: - lightZeroSwitch = !lightZeroSwitch; - if (lightZeroSwitch) { - glEnable(GL_LIGHT0); - } else { - glDisable(GL_LIGHT0); - } - break; - case 2: - lightOneSwitch = !lightOneSwitch; - if (lightOneSwitch) { - glEnable(GL_LIGHT1); - } else { - glDisable(GL_LIGHT1); - } - break; -#ifdef GL_MULTISAMPLE_SGIS - case 3: - if (glIsEnabled(GL_MULTISAMPLE_SGIS)) { - glDisable(GL_MULTISAMPLE_SGIS); - } else { - glEnable(GL_MULTISAMPLE_SGIS); - } - break; -#endif - case 4: - glutFullScreen(); - break; - case 5: - exit(0); - break; - } - glutPostRedisplay(); -} - -void -vis(int visible) -{ - if (visible == GLUT_VISIBLE) { - if (spinning) - glutIdleFunc(animate); - } else { - if (spinning) - glutIdleFunc(NULL); - } -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH | GLUT_STENCIL); - trackball(curquat, 0.0, 0.0, 0.0, 0.0); - glutInitWindowSize(600, 300); - glutCreateWindow("dinodraw"); - glutDisplayFunc(redraw); - glutReshapeFunc(myReshape); - glutVisibilityFunc(vis); - glutMouseFunc(mouse); - glutMotionFunc(motion); - glutCreateMenu(controlLights); - glutAddMenuEntry("Toggle right light", 1); - glutAddMenuEntry("Toggle left light", 2); - if (glutGet(GLUT_WINDOW_NUM_SAMPLES) > 0) { - glutAddMenuEntry("Toggle multisampling", 3); - glutSetWindowTitle("dinospin (multisample capable)"); - } - glutAddMenuEntry("Full screen", 4); - glutAddMenuEntry("Quit", 5); - glutAttachMenu(GLUT_RIGHT_BUTTON); - makeDinosaur(); - glEnable(GL_CULL_FACE); - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - glMatrixMode(GL_PROJECTION); - gluPerspective( /* field of view in degree */ 40.0, - /* aspect ratio */ 1.0, - /* Z near */ 1.0, /* Z far */ 40.0); - glMatrixMode(GL_MODELVIEW); - gluLookAt(0.0, 0.0, 30.0, /* eye is at (0,0,30) */ - 0.0, 0.0, 0.0, /* center is at (0,0,0) */ - 0.0, 1.0, 0.); /* up is in positive Y direction */ - glPushMatrix(); /* dummy push so we can pop on model - recalc */ - glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, 1); - glLightfv(GL_LIGHT0, GL_POSITION, lightZeroPosition); - glLightfv(GL_LIGHT0, GL_DIFFUSE, lightZeroColor); - glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 0.1); - glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 0.05); - glLightfv(GL_LIGHT1, GL_POSITION, lightOnePosition); - glLightfv(GL_LIGHT1, GL_DIFFUSE, lightOneColor); - glEnable(GL_LIGHT0); - glEnable(GL_LIGHT1); - glLineWidth(2.0); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} - diff --git a/lib/glut-3.7.6/progs/examples/dinodraw.dsp b/lib/glut-3.7.6/progs/examples/dinodraw.dsp deleted file mode 100644 index f20e018ba..000000000 --- a/lib/glut-3.7.6/progs/examples/dinodraw.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="dinodraw" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=dinodraw - 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 "dinodraw.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 "dinodraw.mak" CFG="dinodraw - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "dinodraw - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "dinodraw - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "dinodraw - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "dinodraw - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "dinodraw - Win32 Release" -# Name "dinodraw - Win32 Debug" -# Begin Source File - -SOURCE=.\dinodraw.c -# End Source File -# Begin Source File - -SOURCE=.\trackball.c -# End Source File -# Begin Source File - -SOURCE=.\trackball.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/dinoshade.c b/lib/glut-3.7.6/progs/examples/dinoshade.c deleted file mode 100644 index b8b0183d4..000000000 --- a/lib/glut-3.7.6/progs/examples/dinoshade.c +++ /dev/null @@ -1,891 +0,0 @@ - -/* 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. */ - -/* Example for PC game developers to show how to *combine* texturing, - reflections, and projected shadows all in real-time with OpenGL. - Robust reflections use stenciling. Robust projected shadows - use both stenciling and polygon offset. PC game programmers - should realize that neither stenciling nor polygon offset are - supported by Direct3D, so these real-time rendering algorithms - are only really viable with OpenGL. - - The program has modes for disabling the stenciling and polygon - offset uses. It is worth running this example with these features - toggled off so you can see the sort of artifacts that result. - - Notice that the floor texturing, reflections, and shadowing - all co-exist properly. */ - -/* When you run this program: Left mouse button controls the - view. Middle mouse button controls light position (left & - right rotates light around dino; up & down moves light - position up and down). Right mouse button pops up menu. */ - -/* Check out the comments in the "redraw" routine to see how the - reflection blending and surface stenciling is done. You can - also see in "redraw" how the projected shadows are rendered, - including the use of stenciling and polygon offset. */ - -/* This program is derived from glutdino.c */ - -/* Compile: cc -o dinoshade dinoshade.c -lglut -lGLU -lGL -lXmu -lXext -lX11 -lm */ - -#include -#include -#include -#include /* for cos(), sin(), and sqrt() */ -#include /* OpenGL Utility Toolkit header */ - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -/* Variable controlling various rendering modes. */ -static int stencilReflection = 1, stencilShadow = 1, offsetShadow = 1; -static int renderShadow = 1, renderDinosaur = 1, renderReflection = 1; -static int linearFiltering = 0, useMipmaps = 0, useTexture = 1; -static int reportSpeed = 0; -static int animation = 1; -static GLboolean lightSwitch = GL_TRUE; -static int directionalLight = 1; -static int forceExtension = 0; - -/* Time varying or user-controled variables. */ -static float jump = 0.0; -static float lightAngle = 0.0, lightHeight = 20; -GLfloat angle = -150; /* in degrees */ -GLfloat angle2 = 30; /* in degrees */ - -int moving, startx, starty; -int lightMoving = 0, lightStartX, lightStartY; - -enum { - MISSING, EXTENSION, ONE_DOT_ONE -}; -int polygonOffsetVersion; - -static GLdouble bodyWidth = 3.0; -/* *INDENT-OFF* */ -static GLfloat body[][2] = { {0, 3}, {1, 1}, {5, 1}, {8, 4}, {10, 4}, {11, 5}, - {11, 11.5}, {13, 12}, {13, 13}, {10, 13.5}, {13, 14}, {13, 15}, {11, 16}, - {8, 16}, {7, 15}, {7, 13}, {8, 12}, {7, 11}, {6, 6}, {4, 3}, {3, 2}, - {1, 2} }; -static GLfloat arm[][2] = { {8, 10}, {9, 9}, {10, 9}, {13, 8}, {14, 9}, {16, 9}, - {15, 9.5}, {16, 10}, {15, 10}, {15.5, 11}, {14.5, 10}, {14, 11}, {14, 10}, - {13, 9}, {11, 11}, {9, 11} }; -static GLfloat leg[][2] = { {8, 6}, {8, 4}, {9, 3}, {9, 2}, {8, 1}, {8, 0.5}, {9, 0}, - {12, 0}, {10, 1}, {10, 2}, {12, 4}, {11, 6}, {10, 7}, {9, 7} }; -static GLfloat eye[][2] = { {8.75, 15}, {9, 14.7}, {9.6, 14.7}, {10.1, 15}, - {9.6, 15.25}, {9, 15.25} }; -static GLfloat lightPosition[4]; -static GLfloat lightColor[] = {0.8, 1.0, 0.8, 1.0}; /* green-tinted */ -static GLfloat skinColor[] = {0.1, 1.0, 0.1, 1.0}, eyeColor[] = {1.0, 0.2, 0.2, 1.0}; -/* *INDENT-ON* */ - -/* Nice floor texture tiling pattern. */ -static char *circles[] = { - "....xxxx........", - "..xxxxxxxx......", - ".xxxxxxxxxx.....", - ".xxx....xxx.....", - "xxx......xxx....", - "xxx......xxx....", - "xxx......xxx....", - "xxx......xxx....", - ".xxx....xxx.....", - ".xxxxxxxxxx.....", - "..xxxxxxxx......", - "....xxxx........", - "................", - "................", - "................", - "................", -}; - -static void -makeFloorTexture(void) -{ - GLubyte floorTexture[16][16][3]; - GLubyte *loc; - int s, t; - - /* Setup RGB image for the texture. */ - loc = (GLubyte*) floorTexture; - for (t = 0; t < 16; t++) { - for (s = 0; s < 16; s++) { - if (circles[t][s] == 'x') { - /* Nice green. */ - loc[0] = 0x1f; - loc[1] = 0x8f; - loc[2] = 0x1f; - } else { - /* Light gray. */ - loc[0] = 0xaa; - loc[1] = 0xaa; - loc[2] = 0xaa; - } - loc += 3; - } - } - - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - - if (useMipmaps) { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, - GL_LINEAR_MIPMAP_LINEAR); - gluBuild2DMipmaps(GL_TEXTURE_2D, 3, 16, 16, - GL_RGB, GL_UNSIGNED_BYTE, floorTexture); - } else { - if (linearFiltering) { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - } else { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - } - glTexImage2D(GL_TEXTURE_2D, 0, 3, 16, 16, 0, - GL_RGB, GL_UNSIGNED_BYTE, floorTexture); - } -} - -enum { - X, Y, Z, W -}; -enum { - A, B, C, D -}; - -/* Create a matrix that will project the desired shadow. */ -void -shadowMatrix(GLfloat shadowMat[4][4], - GLfloat groundplane[4], - GLfloat lightpos[4]) -{ - GLfloat dot; - - /* Find dot product between light position vector and ground plane normal. */ - dot = groundplane[X] * lightpos[X] + - groundplane[Y] * lightpos[Y] + - groundplane[Z] * lightpos[Z] + - groundplane[W] * lightpos[W]; - - shadowMat[0][0] = dot - lightpos[X] * groundplane[X]; - shadowMat[1][0] = 0.f - lightpos[X] * groundplane[Y]; - shadowMat[2][0] = 0.f - lightpos[X] * groundplane[Z]; - shadowMat[3][0] = 0.f - lightpos[X] * groundplane[W]; - - shadowMat[X][1] = 0.f - lightpos[Y] * groundplane[X]; - shadowMat[1][1] = dot - lightpos[Y] * groundplane[Y]; - shadowMat[2][1] = 0.f - lightpos[Y] * groundplane[Z]; - shadowMat[3][1] = 0.f - lightpos[Y] * groundplane[W]; - - shadowMat[X][2] = 0.f - lightpos[Z] * groundplane[X]; - shadowMat[1][2] = 0.f - lightpos[Z] * groundplane[Y]; - shadowMat[2][2] = dot - lightpos[Z] * groundplane[Z]; - shadowMat[3][2] = 0.f - lightpos[Z] * groundplane[W]; - - shadowMat[X][3] = 0.f - lightpos[W] * groundplane[X]; - shadowMat[1][3] = 0.f - lightpos[W] * groundplane[Y]; - shadowMat[2][3] = 0.f - lightpos[W] * groundplane[Z]; - shadowMat[3][3] = dot - lightpos[W] * groundplane[W]; - -} - -/* Find the plane equation given 3 points. */ -void -findPlane(GLfloat plane[4], - GLfloat v0[3], GLfloat v1[3], GLfloat v2[3]) -{ - GLfloat vec0[3], vec1[3]; - - /* Need 2 vectors to find cross product. */ - vec0[X] = v1[X] - v0[X]; - vec0[Y] = v1[Y] - v0[Y]; - vec0[Z] = v1[Z] - v0[Z]; - - vec1[X] = v2[X] - v0[X]; - vec1[Y] = v2[Y] - v0[Y]; - vec1[Z] = v2[Z] - v0[Z]; - - /* find cross product to get A, B, and C of plane equation */ - plane[A] = vec0[Y] * vec1[Z] - vec0[Z] * vec1[Y]; - plane[B] = -(vec0[X] * vec1[Z] - vec0[Z] * vec1[X]); - plane[C] = vec0[X] * vec1[Y] - vec0[Y] * vec1[X]; - - plane[D] = -(plane[A] * v0[X] + plane[B] * v0[Y] + plane[C] * v0[Z]); -} - -void -extrudeSolidFromPolygon(GLfloat data[][2], unsigned int dataSize, - GLdouble thickness, GLuint side, GLuint edge, GLuint whole) -{ - static GLUtriangulatorObj *tobj = NULL; - GLdouble vertex[3], dx, dy, len; - int i; - int count = (int) (dataSize / (2 * sizeof(GLfloat))); - - if (tobj == NULL) { - tobj = gluNewTess(); /* create and initialize a GLU - polygon tesselation object */ - gluTessCallback(tobj, GLU_BEGIN, glBegin); - gluTessCallback(tobj, GLU_VERTEX, glVertex2fv); /* semi-tricky */ - gluTessCallback(tobj, GLU_END, glEnd); - } - glNewList(side, GL_COMPILE); - glShadeModel(GL_SMOOTH); /* smooth minimizes seeing - tessellation */ - gluBeginPolygon(tobj); - for (i = 0; i < count; i++) { - vertex[0] = data[i][0]; - vertex[1] = data[i][1]; - vertex[2] = 0; - gluTessVertex(tobj, vertex, data[i]); - } - gluEndPolygon(tobj); - glEndList(); - glNewList(edge, GL_COMPILE); - glShadeModel(GL_FLAT); /* flat shade keeps angular hands - from being "smoothed" */ - glBegin(GL_QUAD_STRIP); - for (i = 0; i <= count; i++) { - /* mod function handles closing the edge */ - glVertex3f(data[i % count][0], data[i % count][1], 0.0); - glVertex3f(data[i % count][0], data[i % count][1], thickness); - /* Calculate a unit normal by dividing by Euclidean - distance. We * could be lazy and use - glEnable(GL_NORMALIZE) so we could pass in * arbitrary - normals for a very slight performance hit. */ - dx = data[(i + 1) % count][1] - data[i % count][1]; - dy = data[i % count][0] - data[(i + 1) % count][0]; - len = sqrt(dx * dx + dy * dy); - glNormal3f(dx / len, dy / len, 0.0); - } - glEnd(); - glEndList(); - glNewList(whole, GL_COMPILE); - glFrontFace(GL_CW); - glCallList(edge); - glNormal3f(0.0, 0.0, -1.0); /* constant normal for side */ - glCallList(side); - glPushMatrix(); - glTranslatef(0.0, 0.0, thickness); - glFrontFace(GL_CCW); - glNormal3f(0.0, 0.0, 1.0); /* opposite normal for other side */ - glCallList(side); - glPopMatrix(); - glEndList(); -} - -/* Enumerants for refering to display lists. */ -typedef enum { - RESERVED, BODY_SIDE, BODY_EDGE, BODY_WHOLE, ARM_SIDE, ARM_EDGE, ARM_WHOLE, - LEG_SIDE, LEG_EDGE, LEG_WHOLE, EYE_SIDE, EYE_EDGE, EYE_WHOLE -} displayLists; - -static void -makeDinosaur(void) -{ - extrudeSolidFromPolygon(body, sizeof(body), bodyWidth, - BODY_SIDE, BODY_EDGE, BODY_WHOLE); - extrudeSolidFromPolygon(arm, sizeof(arm), bodyWidth / 4, - ARM_SIDE, ARM_EDGE, ARM_WHOLE); - extrudeSolidFromPolygon(leg, sizeof(leg), bodyWidth / 2, - LEG_SIDE, LEG_EDGE, LEG_WHOLE); - extrudeSolidFromPolygon(eye, sizeof(eye), bodyWidth + 0.2, - EYE_SIDE, EYE_EDGE, EYE_WHOLE); -} - -static void -drawDinosaur(void) - -{ - glPushMatrix(); - /* Translate the dinosaur to be at (0,8,0). */ - glTranslatef(-8, 0, -bodyWidth / 2); - glTranslatef(0.0, jump, 0.0); - glMaterialfv(GL_FRONT, GL_DIFFUSE, skinColor); - glCallList(BODY_WHOLE); - glTranslatef(0.0, 0.0, bodyWidth); - glCallList(ARM_WHOLE); - glCallList(LEG_WHOLE); - glTranslatef(0.0, 0.0, -bodyWidth - bodyWidth / 4); - glCallList(ARM_WHOLE); - glTranslatef(0.0, 0.0, -bodyWidth / 4); - glCallList(LEG_WHOLE); - glTranslatef(0.0, 0.0, bodyWidth / 2 - 0.1); - glMaterialfv(GL_FRONT, GL_DIFFUSE, eyeColor); - glCallList(EYE_WHOLE); - glPopMatrix(); -} - -static GLfloat floorVertices[4][3] = { - { -20.0, 0.0, 20.0 }, - { 20.0, 0.0, 20.0 }, - { 20.0, 0.0, -20.0 }, - { -20.0, 0.0, -20.0 }, -}; - -/* Draw a floor (possibly textured). */ -static void -drawFloor(void) -{ - glDisable(GL_LIGHTING); - - if (useTexture) { - glEnable(GL_TEXTURE_2D); - } - - glBegin(GL_QUADS); - glTexCoord2f(0.0, 0.0); - glVertex3fv(floorVertices[0]); - glTexCoord2f(0.0, 16.0); - glVertex3fv(floorVertices[1]); - glTexCoord2f(16.0, 16.0); - glVertex3fv(floorVertices[2]); - glTexCoord2f(16.0, 0.0); - glVertex3fv(floorVertices[3]); - glEnd(); - - if (useTexture) { - glDisable(GL_TEXTURE_2D); - } - - glEnable(GL_LIGHTING); -} - -static GLfloat floorPlane[4]; -static GLfloat floorShadow[4][4]; - -static void -redraw(void) -{ - int start, end; - - if (reportSpeed) { - start = glutGet(GLUT_ELAPSED_TIME); - } - - /* Clear; default stencil clears to zero. */ - if ((stencilReflection && renderReflection) || (stencilShadow && renderShadow)) { - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); - } else { - /* Avoid clearing stencil when not using it. */ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - } - - /* Reposition the light source. */ - lightPosition[0] = 12*cos(lightAngle); - lightPosition[1] = lightHeight; - lightPosition[2] = 12*sin(lightAngle); - if (directionalLight) { - lightPosition[3] = 0.0; - } else { - lightPosition[3] = 1.0; - } - - shadowMatrix(floorShadow, floorPlane, lightPosition); - - glPushMatrix(); - /* Perform scene rotations based on user mouse input. */ - glRotatef(angle2, 1.0, 0.0, 0.0); - glRotatef(angle, 0.0, 1.0, 0.0); - - /* Tell GL new light source position. */ - glLightfv(GL_LIGHT0, GL_POSITION, lightPosition); - - if (renderReflection) { - if (stencilReflection) { - /* We can eliminate the visual "artifact" of seeing the "flipped" - dinosaur underneath the floor by using stencil. The idea is - draw the floor without color or depth update but so that - a stencil value of one is where the floor will be. Later when - rendering the dinosaur reflection, we will only update pixels - with a stencil value of 1 to make sure the reflection only - lives on the floor, not below the floor. */ - - /* Don't update color or depth. */ - glDisable(GL_DEPTH_TEST); - glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); - - /* Draw 1 into the stencil buffer. */ - glEnable(GL_STENCIL_TEST); - glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE); - glStencilFunc(GL_ALWAYS, 1, 0xffffffff); - - /* Now render floor; floor pixels just get their stencil set to 1. */ - drawFloor(); - - /* Re-enable update of color and depth. */ - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - glEnable(GL_DEPTH_TEST); - - /* Now, only render where stencil is set to 1. */ - glStencilFunc(GL_EQUAL, 1, 0xffffffff); /* draw if ==1 */ - glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); - } - - glPushMatrix(); - - /* The critical reflection step: Reflect dinosaur through the floor - (the Y=0 plane) to make a relection. */ - glScalef(1.0, -1.0, 1.0); - - /* Reflect the light position. */ - glLightfv(GL_LIGHT0, GL_POSITION, lightPosition); - - /* To avoid our normals getting reversed and hence botched lighting - on the reflection, turn on normalize. */ - glEnable(GL_NORMALIZE); - glCullFace(GL_FRONT); - - /* Draw the reflected dinosaur. */ - drawDinosaur(); - - /* Disable noramlize again and re-enable back face culling. */ - glDisable(GL_NORMALIZE); - glCullFace(GL_BACK); - - glPopMatrix(); - - /* Switch back to the unreflected light position. */ - glLightfv(GL_LIGHT0, GL_POSITION, lightPosition); - - if (stencilReflection) { - glDisable(GL_STENCIL_TEST); - } - } - - /* Back face culling will get used to only draw either the top or the - bottom floor. This let's us get a floor with two distinct - appearances. The top floor surface is reflective and kind of red. - The bottom floor surface is not reflective and blue. */ - - /* Draw "bottom" of floor in blue. */ - glFrontFace(GL_CW); /* Switch face orientation. */ - glColor4f(0.1, 0.1, 0.7, 1.0); - drawFloor(); - glFrontFace(GL_CCW); - - if (renderShadow) { - if (stencilShadow) { - /* Draw the floor with stencil value 3. This helps us only - draw the shadow once per floor pixel (and only on the - floor pixels). */ - glEnable(GL_STENCIL_TEST); - glStencilFunc(GL_ALWAYS, 3, 0xffffffff); - glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); - } - } - - /* Draw "top" of floor. Use blending to blend in reflection. */ - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glColor4f(0.7, 0.0, 0.0, 0.3); - glColor4f(1.0, 1.0, 1.0, 0.3); - drawFloor(); - glDisable(GL_BLEND); - - if (renderDinosaur) { - /* Draw "actual" dinosaur, not its reflection. */ - drawDinosaur(); - } - - if (renderShadow) { - - /* Render the projected shadow. */ - - if (stencilShadow) { - - /* Now, only render where stencil is set above 2 (ie, 3 where - the top floor is). Update stencil with 2 where the shadow - gets drawn so we don't redraw (and accidently reblend) the - shadow). */ - glStencilFunc(GL_LESS, 2, 0xffffffff); /* draw if ==1 */ - glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE); - } - - /* To eliminate depth buffer artifacts, we use polygon offset - to raise the depth of the projected shadow slightly so - that it does not depth buffer alias with the floor. */ - if (offsetShadow) { - switch (polygonOffsetVersion) { - case EXTENSION: -#ifdef GL_EXT_polygon_offset - glEnable(GL_POLYGON_OFFSET_EXT); - break; -#endif -#ifdef GL_VERSION_1_1 - case ONE_DOT_ONE: - glEnable(GL_POLYGON_OFFSET_FILL); - break; -#endif - case MISSING: - /* Oh well. */ - break; - } - } - - /* Render 50% black shadow color on top of whatever the - floor appareance is. */ - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glDisable(GL_LIGHTING); /* Force the 50% black. */ - glColor4f(0.0, 0.0, 0.0, 0.5); - - glPushMatrix(); - /* Project the shadow. */ - glMultMatrixf((GLfloat *) floorShadow); - drawDinosaur(); - glPopMatrix(); - - glDisable(GL_BLEND); - glEnable(GL_LIGHTING); - - if (offsetShadow) { - switch (polygonOffsetVersion) { -#ifdef GL_EXT_polygon_offset - case EXTENSION: - glDisable(GL_POLYGON_OFFSET_EXT); - break; -#endif -#ifdef GL_VERSION_1_1 - case ONE_DOT_ONE: - glDisable(GL_POLYGON_OFFSET_FILL); - break; -#endif - case MISSING: - /* Oh well. */ - break; - } - } - if (stencilShadow) { - glDisable(GL_STENCIL_TEST); - } - } - - glPushMatrix(); - glDisable(GL_LIGHTING); - glColor3f(1.0, 1.0, 0.0); - if (directionalLight) { - /* Draw an arrowhead. */ - glDisable(GL_CULL_FACE); - glTranslatef(lightPosition[0], lightPosition[1], lightPosition[2]); - glRotatef(lightAngle * -180.0 / M_PI, 0, 1, 0); - glRotatef(atan(lightHeight/12) * 180.0 / M_PI, 0, 0, 1); - glBegin(GL_TRIANGLE_FAN); - glVertex3f(0, 0, 0); - glVertex3f(2, 1, 1); - glVertex3f(2, -1, 1); - glVertex3f(2, -1, -1); - glVertex3f(2, 1, -1); - glVertex3f(2, 1, 1); - glEnd(); - /* Draw a white line from light direction. */ - glColor3f(1.0, 1.0, 1.0); - glBegin(GL_LINES); - glVertex3f(0, 0, 0); - glVertex3f(5, 0, 0); - glEnd(); - glEnable(GL_CULL_FACE); - } else { - /* Draw a yellow ball at the light source. */ - glTranslatef(lightPosition[0], lightPosition[1], lightPosition[2]); - glutSolidSphere(1.0, 5, 5); - } - glEnable(GL_LIGHTING); - glPopMatrix(); - - glPopMatrix(); - - if (reportSpeed) { - glFinish(); - end = glutGet(GLUT_ELAPSED_TIME); - printf("Speed %.3g frames/sec (%d ms)\n", 1000.0/(end-start), end-start); - } - - glutSwapBuffers(); -} - -/* ARGSUSED2 */ -static void -mouse(int button, int state, int x, int y) -{ - if (button == GLUT_LEFT_BUTTON) { - if (state == GLUT_DOWN) { - moving = 1; - startx = x; - starty = y; - } - if (state == GLUT_UP) { - moving = 0; - } - } - if (button == GLUT_MIDDLE_BUTTON) { - if (state == GLUT_DOWN) { - lightMoving = 1; - lightStartX = x; - lightStartY = y; - } - if (state == GLUT_UP) { - lightMoving = 0; - } - } -} - -/* ARGSUSED1 */ -static void -motion(int x, int y) -{ - if (moving) { - angle = angle + (x - startx); - angle2 = angle2 + (y - starty); - startx = x; - starty = y; - glutPostRedisplay(); - } - if (lightMoving) { - lightAngle += (x - lightStartX)/40.0; - lightHeight += (lightStartY - y)/20.0; - lightStartX = x; - lightStartY = y; - glutPostRedisplay(); - } -} - -/* Advance time varying state when idle callback registered. */ -static void -idle(void) -{ - static float time = 0.0; - - time = glutGet(GLUT_ELAPSED_TIME) / 500.0; - - jump = 4.0 * fabs(sin(time)*0.5); - if (!lightMoving) { - lightAngle += 0.03; - } - glutPostRedisplay(); -} - -enum { - M_NONE, M_MOTION, M_LIGHT, M_TEXTURE, M_SHADOWS, M_REFLECTION, M_DINOSAUR, - M_STENCIL_REFLECTION, M_STENCIL_SHADOW, M_OFFSET_SHADOW, - M_POSITIONAL, M_DIRECTIONAL, M_PERFORMANCE -}; - -static void -controlLights(int value) -{ - switch (value) { - case M_NONE: - return; - case M_MOTION: - animation = 1 - animation; - if (animation) { - glutIdleFunc(idle); - } else { - glutIdleFunc(NULL); - } - break; - case M_LIGHT: - lightSwitch = !lightSwitch; - if (lightSwitch) { - glEnable(GL_LIGHT0); - } else { - glDisable(GL_LIGHT0); - } - break; - case M_TEXTURE: - useTexture = !useTexture; - break; - case M_SHADOWS: - renderShadow = 1 - renderShadow; - break; - case M_REFLECTION: - renderReflection = 1 - renderReflection; - break; - case M_DINOSAUR: - renderDinosaur = 1 - renderDinosaur; - break; - case M_STENCIL_REFLECTION: - stencilReflection = 1 - stencilReflection; - break; - case M_STENCIL_SHADOW: - stencilShadow = 1 - stencilShadow; - break; - case M_OFFSET_SHADOW: - offsetShadow = 1 - offsetShadow; - break; - case M_POSITIONAL: - directionalLight = 0; - break; - case M_DIRECTIONAL: - directionalLight = 1; - break; - case M_PERFORMANCE: - reportSpeed = 1 - reportSpeed; - break; - } - glutPostRedisplay(); -} - -/* When not visible, stop animating. Restart when visible again. */ -static void -visible(int vis) -{ - if (vis == GLUT_VISIBLE) { - if (animation) - glutIdleFunc(idle); - } else { - if (!animation) - glutIdleFunc(NULL); - } -} - -/* Press any key to redraw; good when motion stopped and - performance reporting on. */ -/* ARGSUSED */ -static void -key(unsigned char c, int x, int y) -{ - if (c == 27) { - exit(0); /* IRIS GLism, Escape quits. */ - } - glutPostRedisplay(); -} - -/* Press any key to redraw; good when motion stopped and - performance reporting on. */ -/* ARGSUSED */ -static void -special(int k, int x, int y) -{ - glutPostRedisplay(); -} - -static int -supportsOneDotOne(void) -{ - const char *version; - int major, minor; - - version = (char *) glGetString(GL_VERSION); - if (sscanf(version, "%d.%d", &major, &minor) == 2) - return major >= 1 && minor >= 1; - return 0; /* OpenGL version string malformed! */ -} - -int -main(int argc, char **argv) -{ - int i; - - glutInit(&argc, argv); - - for (i=1; i=2 rgb double depth"); -#endif - - glutCreateWindow("Shadowy Leapin' Lizards"); - - if (glutGet(GLUT_WINDOW_STENCIL_SIZE) <= 1) { - printf("dinoshade: Sorry, I need at least 2 bits of stencil.\n"); - exit(1); - } - - /* Register GLUT callbacks. */ - glutDisplayFunc(redraw); - glutMouseFunc(mouse); - glutMotionFunc(motion); - glutVisibilityFunc(visible); - glutKeyboardFunc(key); - glutSpecialFunc(special); - - glutCreateMenu(controlLights); - - glutAddMenuEntry("Toggle motion", M_MOTION); - glutAddMenuEntry("-----------------------", M_NONE); - glutAddMenuEntry("Toggle light", M_LIGHT); - glutAddMenuEntry("Toggle texture", M_TEXTURE); - glutAddMenuEntry("Toggle shadows", M_SHADOWS); - glutAddMenuEntry("Toggle reflection", M_REFLECTION); - glutAddMenuEntry("Toggle dinosaur", M_DINOSAUR); - glutAddMenuEntry("-----------------------", M_NONE); - glutAddMenuEntry("Toggle reflection stenciling", M_STENCIL_REFLECTION); - glutAddMenuEntry("Toggle shadow stenciling", M_STENCIL_SHADOW); - glutAddMenuEntry("Toggle shadow offset", M_OFFSET_SHADOW); - glutAddMenuEntry("----------------------", M_NONE); - glutAddMenuEntry("Positional light", M_POSITIONAL); - glutAddMenuEntry("Directional light", M_DIRECTIONAL); - glutAddMenuEntry("-----------------------", M_NONE); - glutAddMenuEntry("Toggle performance", M_PERFORMANCE); - glutAttachMenu(GLUT_RIGHT_BUTTON); - makeDinosaur(); - -#ifdef GL_VERSION_1_1 - if (supportsOneDotOne() && !forceExtension) { - polygonOffsetVersion = ONE_DOT_ONE; - glPolygonOffset(-2.0, -9.0); - } else -#endif - { -#ifdef GL_EXT_polygon_offset - /* check for the polygon offset extension */ - if (glutExtensionSupported("GL_EXT_polygon_offset")) { - polygonOffsetVersion = EXTENSION; - glPolygonOffsetEXT(-2.0, -0.002); - } else -#endif - { - polygonOffsetVersion = MISSING; - printf("\ndinoshine: Missing polygon offset.\n"); - printf(" Expect shadow depth aliasing artifacts.\n\n"); - } - } - - glEnable(GL_CULL_FACE); - glEnable(GL_DEPTH_TEST); - glEnable(GL_TEXTURE_2D); - glLineWidth(3.0); - - glMatrixMode(GL_PROJECTION); - gluPerspective( /* field of view in degree */ 40.0, - /* aspect ratio */ 1.0, - /* Z near */ 20.0, /* Z far */ 100.0); - glMatrixMode(GL_MODELVIEW); - gluLookAt(0.0, 8.0, 60.0, /* eye is at (0,8,60) */ - 0.0, 8.0, 0.0, /* center is at (0,8,0) */ - 0.0, 1.0, 0.); /* up is in postivie Y direction */ - - glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, 1); - glLightfv(GL_LIGHT0, GL_DIFFUSE, lightColor); - glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 0.1); - glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 0.05); - glEnable(GL_LIGHT0); - glEnable(GL_LIGHTING); - - makeFloorTexture(); - - /* Setup floor plane for projected shadow calculations. */ - findPlane(floorPlane, floorVertices[1], floorVertices[2], floorVertices[3]); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/examples/dinoshade.dsp b/lib/glut-3.7.6/progs/examples/dinoshade.dsp deleted file mode 100644 index 0082bac12..000000000 --- a/lib/glut-3.7.6/progs/examples/dinoshade.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="dinoshade" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=dinoshade - 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 "dinoshade.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 "dinoshade.mak" CFG="dinoshade - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "dinoshade - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "dinoshade - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "dinoshade - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "dinoshade - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "dinoshade - Win32 Release" -# Name "dinoshade - Win32 Debug" -# Begin Source File - -SOURCE=.\dinoshade.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/dinospin.c b/lib/glut-3.7.6/progs/examples/dinospin.c deleted file mode 100644 index 2be3b6c6e..000000000 --- a/lib/glut-3.7.6/progs/examples/dinospin.c +++ /dev/null @@ -1,352 +0,0 @@ - -/* 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. */ - -/* New GLUT 3.0 glutGetModifiers() functionality used to make Shift-Left - mouse scale the dinosaur's size. */ - -#include -#include -#include -#include /* for cos(), sin(), and sqrt() */ -#include -#include "trackball.h" - -typedef enum { - RESERVED, BODY_SIDE, BODY_EDGE, BODY_WHOLE, ARM_SIDE, ARM_EDGE, ARM_WHOLE, - LEG_SIDE, LEG_EDGE, LEG_WHOLE, EYE_SIDE, EYE_EDGE, EYE_WHOLE, DINOSAUR -} displayLists; - -int spinning = 0, moving = 0; -int beginx, beginy; -int W = 300, H = 300; -float curquat[4]; -float lastquat[4]; -GLdouble bodyWidth = 3.0; -int newModel = 1; -int scaling; -float scalefactor = 1.0; -/* *INDENT-OFF* */ -GLfloat body[][2] = { {0, 3}, {1, 1}, {5, 1}, {8, 4}, {10, 4}, {11, 5}, - {11, 11.5}, {13, 12}, {13, 13}, {10, 13.5}, {13, 14}, {13, 15}, {11, 16}, - {8, 16}, {7, 15}, {7, 13}, {8, 12}, {7, 11}, {6, 6}, {4, 3}, {3, 2}, - {1, 2} }; -GLfloat arm[][2] = { {8, 10}, {9, 9}, {10, 9}, {13, 8}, {14, 9}, {16, 9}, - {15, 9.5}, {16, 10}, {15, 10}, {15.5, 11}, {14.5, 10}, {14, 11}, {14, 10}, - {13, 9}, {11, 11}, {9, 11} }; -GLfloat leg[][2] = { {8, 6}, {8, 4}, {9, 3}, {9, 2}, {8, 1}, {8, 0.5}, {9, 0}, - {12, 0}, {10, 1}, {10, 2}, {12, 4}, {11, 6}, {10, 7}, {9, 7} }; -GLfloat eye[][2] = { {8.75, 15}, {9, 14.7}, {9.6, 14.7}, {10.1, 15}, - {9.6, 15.25}, {9, 15.25} }; -GLfloat lightZeroPosition[] = {10.0, 4.0, 10.0, 1.0}; -GLfloat lightZeroColor[] = {0.8, 1.0, 0.8, 1.0}; /* green-tinted */ -GLfloat lightOnePosition[] = {-1.0, -2.0, 1.0, 0.0}; -GLfloat lightOneColor[] = {0.6, 0.3, 0.2, 1.0}; /* red-tinted */ -GLfloat skinColor[] = {0.1, 1.0, 0.1, 1.0}, eyeColor[] = {1.0, 0.2, 0.2, 1.0}; -/* *INDENT-ON* */ - -void -extrudeSolidFromPolygon(GLfloat data[][2], unsigned int dataSize, - GLdouble thickness, GLuint side, GLuint edge, GLuint whole) -{ - static GLUtriangulatorObj *tobj = NULL; - GLdouble vertex[3], dx, dy, len; - int i; - int count = (int) (dataSize / (2 * sizeof(GLfloat))); - - if (tobj == NULL) { - tobj = gluNewTess(); /* create and initialize a GLU - polygon tesselation object */ - gluTessCallback(tobj, GLU_BEGIN, glBegin); - gluTessCallback(tobj, GLU_VERTEX, glVertex2fv); /* semi-tricky - - */ - gluTessCallback(tobj, GLU_END, glEnd); - } - glNewList(side, GL_COMPILE); - glShadeModel(GL_SMOOTH); /* smooth minimizes seeing - tessellation */ - gluBeginPolygon(tobj); - for (i = 0; i < count; i++) { - vertex[0] = data[i][0]; - vertex[1] = data[i][1]; - vertex[2] = 0; - gluTessVertex(tobj, vertex, data[i]); - } - gluEndPolygon(tobj); - glEndList(); - glNewList(edge, GL_COMPILE); - glShadeModel(GL_FLAT); /* flat shade keeps angular hands - from being * * "smoothed" */ - glBegin(GL_QUAD_STRIP); - for (i = 0; i <= count; i++) { - /* mod function handles closing the edge */ - glVertex3f(data[i % count][0], data[i % count][1], 0.0); - glVertex3f(data[i % count][0], data[i % count][1], thickness); - /* Calculate a unit normal by dividing by Euclidean - distance. We * could be lazy and use - glEnable(GL_NORMALIZE) so we could pass in * arbitrary - normals for a very slight performance hit. */ - dx = data[(i + 1) % count][1] - data[i % count][1]; - dy = data[i % count][0] - data[(i + 1) % count][0]; - len = sqrt(dx * dx + dy * dy); - glNormal3f(dx / len, dy / len, 0.0); - } - glEnd(); - glEndList(); - glNewList(whole, GL_COMPILE); - glFrontFace(GL_CW); - glCallList(edge); - glNormal3f(0.0, 0.0, -1.0); /* constant normal for side */ - glCallList(side); - glPushMatrix(); - glTranslatef(0.0, 0.0, thickness); - glFrontFace(GL_CCW); - glNormal3f(0.0, 0.0, 1.0); /* opposite normal for other side - - */ - glCallList(side); - glPopMatrix(); - glEndList(); -} - -void -makeDinosaur(void) -{ - extrudeSolidFromPolygon(body, sizeof(body), bodyWidth, - BODY_SIDE, BODY_EDGE, BODY_WHOLE); - extrudeSolidFromPolygon(arm, sizeof(arm), bodyWidth / 4, - ARM_SIDE, ARM_EDGE, ARM_WHOLE); - extrudeSolidFromPolygon(leg, sizeof(leg), bodyWidth / 2, - LEG_SIDE, LEG_EDGE, LEG_WHOLE); - extrudeSolidFromPolygon(eye, sizeof(eye), bodyWidth + 0.2, - EYE_SIDE, EYE_EDGE, EYE_WHOLE); - glNewList(DINOSAUR, GL_COMPILE); - glMaterialfv(GL_FRONT, GL_DIFFUSE, skinColor); - glCallList(BODY_WHOLE); - glPushMatrix(); - glTranslatef(0.0, 0.0, bodyWidth); - glCallList(ARM_WHOLE); - glCallList(LEG_WHOLE); - glTranslatef(0.0, 0.0, -bodyWidth - bodyWidth / 4); - glCallList(ARM_WHOLE); - glTranslatef(0.0, 0.0, -bodyWidth / 4); - glCallList(LEG_WHOLE); - glTranslatef(0.0, 0.0, bodyWidth / 2 - 0.1); - glMaterialfv(GL_FRONT, GL_DIFFUSE, eyeColor); - glCallList(EYE_WHOLE); - glPopMatrix(); - glEndList(); -} - -void -recalcModelView(void) -{ - GLfloat m[4][4]; - - glPopMatrix(); - glPushMatrix(); - build_rotmatrix(m, curquat); - glMultMatrixf(&m[0][0]); - if (scalefactor == 1.0) { - glDisable(GL_NORMALIZE); - } else { - glEnable(GL_NORMALIZE); - } - glScalef(scalefactor, scalefactor, scalefactor); - glTranslatef(-8, -8, -bodyWidth / 2); - newModel = 0; -} - -void -showMessage(GLfloat x, GLfloat y, GLfloat z, char *message) -{ - glPushMatrix(); - glDisable(GL_LIGHTING); - glTranslatef(x, y, z); - glScalef(.02, .02, .02); - while (*message) { - glutStrokeCharacter(GLUT_STROKE_ROMAN, *message); - message++; - } - glEnable(GL_LIGHTING); - glPopMatrix(); -} - -void -redraw(void) -{ - if (newModel) - recalcModelView(); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glCallList(DINOSAUR); - showMessage(2, 7.1, 4.1, "Spin me."); - glutSwapBuffers(); -} - -void -myReshape(int w, int h) -{ - glViewport(0, 0, w, h); - W = w; - H = h; -} - -void -mouse(int button, int state, int x, int y) -{ - if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) { - spinning = 0; - glutIdleFunc(NULL); - moving = 1; - beginx = x; - beginy = y; - if (glutGetModifiers() & GLUT_ACTIVE_SHIFT) { - scaling = 1; - } else { - scaling = 0; - } - } - if (button == GLUT_LEFT_BUTTON && state == GLUT_UP) { - moving = 0; - } -} - -void -animate(void) -{ - add_quats(lastquat, curquat, curquat); - newModel = 1; - glutPostRedisplay(); -} - -void -motion(int x, int y) -{ - if (scaling) { - scalefactor = scalefactor * (1.0 + (((float) (beginy - y)) / H)); - beginx = x; - beginy = y; - newModel = 1; - glutPostRedisplay(); - return; - } - if (moving) { - trackball(lastquat, - (2.0 * beginx - W) / W, - (H - 2.0 * beginy) / H, - (2.0 * x - W) / W, - (H - 2.0 * y) / H - ); - beginx = x; - beginy = y; - spinning = 1; - glutIdleFunc(animate); - } -} - -GLboolean lightZeroSwitch = GL_TRUE, lightOneSwitch = GL_TRUE; - -void -controlLights(int value) -{ - switch (value) { - case 1: - lightZeroSwitch = !lightZeroSwitch; - if (lightZeroSwitch) { - glEnable(GL_LIGHT0); - } else { - glDisable(GL_LIGHT0); - } - break; - case 2: - lightOneSwitch = !lightOneSwitch; - if (lightOneSwitch) { - glEnable(GL_LIGHT1); - } else { - glDisable(GL_LIGHT1); - } - break; -#ifdef GL_MULTISAMPLE_SGIS - case 3: - if (glIsEnabled(GL_MULTISAMPLE_SGIS)) { - glDisable(GL_MULTISAMPLE_SGIS); - } else { - glEnable(GL_MULTISAMPLE_SGIS); - } - break; -#endif - case 4: - glutFullScreen(); - break; - case 5: - exit(0); - break; - } - glutPostRedisplay(); -} - -void -vis(int visible) -{ - if (visible == GLUT_VISIBLE) { - if (spinning) - glutIdleFunc(animate); - } else { - if (spinning) - glutIdleFunc(NULL); - } -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH | GLUT_MULTISAMPLE); - trackball(curquat, 0.0, 0.0, 0.0, 0.0); - glutCreateWindow("dinospin"); - glutDisplayFunc(redraw); - glutReshapeFunc(myReshape); - glutVisibilityFunc(vis); - glutMouseFunc(mouse); - glutMotionFunc(motion); - glutCreateMenu(controlLights); - glutAddMenuEntry("Toggle right light", 1); - glutAddMenuEntry("Toggle left light", 2); - if (glutGet(GLUT_WINDOW_NUM_SAMPLES) > 0) { - glutAddMenuEntry("Toggle multisampling", 3); - glutSetWindowTitle("dinospin (multisample capable)"); - } - glutAddMenuEntry("Full screen", 4); - glutAddMenuEntry("Quit", 5); - glutAttachMenu(GLUT_RIGHT_BUTTON); - makeDinosaur(); - glEnable(GL_CULL_FACE); - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - glMatrixMode(GL_PROJECTION); - gluPerspective( /* field of view in degree */ 40.0, - /* aspect ratio */ 1.0, - /* Z near */ 1.0, /* Z far */ 40.0); - glMatrixMode(GL_MODELVIEW); - gluLookAt(0.0, 0.0, 30.0, /* eye is at (0,0,30) */ - 0.0, 0.0, 0.0, /* center is at (0,0,0) */ - 0.0, 1.0, 0.); /* up is in positive Y direction */ - glPushMatrix(); /* dummy push so we can pop on model - recalc */ - glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, 1); - glLightfv(GL_LIGHT0, GL_POSITION, lightZeroPosition); - glLightfv(GL_LIGHT0, GL_DIFFUSE, lightZeroColor); - glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 0.1); - glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 0.05); - glLightfv(GL_LIGHT1, GL_POSITION, lightOnePosition); - glLightfv(GL_LIGHT1, GL_DIFFUSE, lightOneColor); - glEnable(GL_LIGHT0); - glEnable(GL_LIGHT1); - glLineWidth(2.0); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/examples/dinospin.dsp b/lib/glut-3.7.6/progs/examples/dinospin.dsp deleted file mode 100644 index 96b458bdc..000000000 --- a/lib/glut-3.7.6/progs/examples/dinospin.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="dinospin" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=dinospin - 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 "dinospin.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 "dinospin.mak" CFG="dinospin - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "dinospin - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "dinospin - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "dinospin - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "dinospin - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "dinospin - Win32 Release" -# Name "dinospin - Win32 Debug" -# Begin Source File - -SOURCE=.\dinospin.c -# End Source File -# Begin Source File - -SOURCE=.\trackball.c -# End Source File -# Begin Source File - -SOURCE=.\trackball.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/editgrid.c b/lib/glut-3.7.6/progs/examples/editgrid.c deleted file mode 100644 index c0b90705c..000000000 --- a/lib/glut-3.7.6/progs/examples/editgrid.c +++ /dev/null @@ -1,314 +0,0 @@ - -/* 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. */ - -/* editgrid demonstrates how a simple 2nd order grid mesh or a more - complex 4th order grid mesh can rendered with OpenGL evaluators. - The control points for either grid can be interactively moved in 2D - by selecting and moving with the left mouse button. Antialising can - also be enabled from the pop-up menu. */ - -/* Compile: cc -o editgrid editgrid.c -lglut -lGLU -lGL -lXmu -lXext -lX11 -lm */ - -#include -#include -#include - -int antialiasing = 0; -int gridSize = 20; -GLuint selectedPoint = (GLuint) ~0; -int winWidth, winHeight; -GLuint selectBuffer[64]; -GLdouble modelMatrix[16], projMatrix[16]; -GLint viewport[4]; - -/* Simple 2nd order initial grid. 4 points (2 by 2). */ -GLfloat grid2x2[2][2][3] = -{ - { - {-2.0, -2.0, 0.0}, - {2.0, -2.0, 0.0}}, - { - {-2.0, 2.0, 0.0}, - {2.0, 2.0, 0.0}} -}; - -/* More complex 4nd order initial grid. 16 points (4 by 4). */ -GLfloat grid4x4[4][4][3] = -{ - { - {-2.0, -2.0, 0.0}, - {-0.5, -2.0, 0.0}, - {0.5, -2.0, 0.0}, - {2.0, -2.0, 0.0}}, - { - {-2.0, -0.5, 0.0}, - {-0.5, -0.5, 0.0}, - {0.5, -0.5, 0.0}, - {2.0, -0.5, 0.0}}, - { - {-2.0, 0.5, 0.0}, - {-0.5, 0.5, 0.0}, - {0.5, 0.5, 0.0}, - {2.0, 0.5, 0.0}}, - { - {-2.0, 2.0, 0.0}, - {-0.5, 2.0, 0.0}, - {0.5, 2.0, 0.0}, - {2.0, 2.0, 0.0}} -}; -GLfloat *grid = &grid4x4[0][0][0]; -int uSize = 4; -int vSize = 4; - -void -setupMesh(void) -{ - glEnable(GL_MAP2_VERTEX_3); - glMapGrid2f(gridSize, 0.0, 1.0, gridSize, 0.0, 1.0); -} - -void -evaluateGrid(void) -{ - glColor3f(1.0, 1.0, 1.0); - glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, uSize, 0, 1, uSize * 3, vSize, grid); - glEvalMesh2(GL_LINE, 0, gridSize, 0, gridSize); -} - -void -drawControlPoints(void) -{ - int i; - - glColor3f(1.0, 1.0, 0.0); - glPointSize(5.0); - glBegin(GL_POINTS); - for (i = 0; i < uSize * vSize; i++) { - glVertex3fv(&grid[i * 3]); - } - glEnd(); -} - -void -selectControlPoints(void) -{ - int i; - - for (i = 0; i < uSize * vSize; i++) { - glLoadName(i); - glBegin(GL_POINTS); - glVertex3fv(&grid[i * 3]); - glEnd(); - } -} - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - evaluateGrid(); - drawControlPoints(); - glutSwapBuffers(); -} - -void -ortho(void) -{ - if (winWidth <= winHeight) - glOrtho(-4.0, 4.0, -4.0 * (GLfloat) winHeight / (GLfloat) winWidth, - 4.0 * (GLfloat) winHeight / (GLfloat) winWidth, -4.0, 4.0); - else - glOrtho(-4.0 * (GLfloat) winWidth / (GLfloat) winHeight, - 4.0 * (GLfloat) winWidth / (GLfloat) winHeight, -4.0, 4.0, -4.0, 4.0); -} - -GLuint -pick(int x, int y) -{ - int hits; - - (void) glRenderMode(GL_SELECT); - glInitNames(); - glPushName(~0); - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - gluPickMatrix(x, winHeight - y, 8.0, 8.0, viewport); - ortho(); - glMatrixMode(GL_MODELVIEW); - selectControlPoints(); - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - hits = glRenderMode(GL_RENDER); - if (hits) { -#ifdef DEBUG - { - unsigned int i; - GLint names; - GLuint *ptr; - - printf("hits = %d\n", hits); - ptr = (GLuint *) selectBuffer; - for (i = 0; i < hits; i++) { /* for each hit */ - int j; - - names = *ptr; - printf("number of names for hit = %d\n", *ptr); - ptr++; - printf(" z1 is %g;", (float) *ptr / 0xffffffff); - ptr++; - printf(" z2 is %g\n", (float) *ptr / 0xffffffff); - ptr++; - printf(" the name is "); - for (j = 0; j < names; j++) { /* For each name. */ - printf("%d ", *ptr); - ptr++; - } - printf("\n"); - } - } -#endif - return selectBuffer[3]; - } else { - return ~0; - } -} - -void -reshape(int w, int h) -{ - glViewport(0, 0, w, h); - winWidth = w; - winHeight = h; - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - ortho(); - glGetDoublev(GL_PROJECTION_MATRIX, projMatrix); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glGetDoublev(GL_MODELVIEW_MATRIX, modelMatrix); - viewport[0] = 0; - viewport[1] = 0; - viewport[2] = winWidth; - viewport[3] = winHeight; -} - -void -mouse(int button, int state, int x, int y) -{ - if (button == GLUT_LEFT_BUTTON) { - if (state == GLUT_DOWN) { - selectedPoint = pick(x, y); - } else { - selectedPoint = -1; - } - } -} - -void -motion(int x, int y) -{ - GLdouble objx, objy, objz; - - if (selectedPoint != ~0) { - gluUnProject(x, winHeight - y, 0.95, - modelMatrix, projMatrix, viewport, - &objx, &objy, &objz); - grid[selectedPoint * 3 + 0] = objx; - grid[selectedPoint * 3 + 1] = objy; - glutPostRedisplay(); - } -} - -/* ARGSUSED1 */ -static void -keyboard(unsigned char key, int x, int y) -{ - switch (key) { - case 27: - exit(0); - } -} - -enum { - M_2ND_ORDER_GRID, M_4TH_ORDER_GRID, M_INCREASE_GRID, M_DECREASE_GRID, M_TOGGLE_ANTIALIASING, M_QUIT -}; - -void -menu(int value) -{ - switch (value) { - case M_2ND_ORDER_GRID: - grid = &grid2x2[0][0][0]; - uSize = 2; - vSize = 2; - setupMesh(); - break; - case M_4TH_ORDER_GRID: - grid = &grid4x4[0][0][0]; - uSize = 4; - vSize = 4; - setupMesh(); - break; - case M_INCREASE_GRID: - gridSize += 2; - setupMesh(); - break; - case M_DECREASE_GRID: - gridSize -= 2; - if (gridSize < 2) { - gridSize = 2; - } - setupMesh(); - break; - case M_TOGGLE_ANTIALIASING: - if (antialiasing) { - antialiasing = 0; - glDisable(GL_BLEND); - glDisable(GL_LINE_SMOOTH); - glDisable(GL_POINT_SMOOTH); - } else { - antialiasing = 1; - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glEnable(GL_BLEND); - glEnable(GL_LINE_SMOOTH); - glEnable(GL_POINT_SMOOTH); - } - break; - case M_QUIT: - exit(0); - break; - } - glutPostRedisplay(); -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); - glutCreateWindow("editgrid"); - glutReshapeFunc(reshape); - glutDisplayFunc(display); - glutMouseFunc(mouse); - glutKeyboardFunc(keyboard); - glutMotionFunc(motion); - glutCreateMenu(menu); - glutAddMenuEntry("2nd order grid", M_2ND_ORDER_GRID); - glutAddMenuEntry("4nd order grid", M_4TH_ORDER_GRID); - glutAddMenuEntry("Increase grid sizing by 2", M_INCREASE_GRID); - glutAddMenuEntry("Decrease grid sizing by 2", M_DECREASE_GRID); - glutAddMenuEntry("Toggle antialiasing", M_TOGGLE_ANTIALIASING); - glutAddMenuEntry("Quit", M_QUIT); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glSelectBuffer(sizeof(selectBuffer), selectBuffer); - setupMesh(); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/examples/editgrid.dsp b/lib/glut-3.7.6/progs/examples/editgrid.dsp deleted file mode 100644 index a0f718469..000000000 --- a/lib/glut-3.7.6/progs/examples/editgrid.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="editgrid" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=editgrid - 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 "editgrid.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 "editgrid.mak" CFG="editgrid - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "editgrid - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "editgrid - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "editgrid - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "editgrid - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "editgrid - Win32 Release" -# Name "editgrid - Win32 Debug" -# Begin Source File - -SOURCE=.\editgrid.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/evaltest.c b/lib/glut-3.7.6/progs/examples/evaltest.c deleted file mode 100644 index a079f3c67..000000000 --- a/lib/glut-3.7.6/progs/examples/evaltest.c +++ /dev/null @@ -1,507 +0,0 @@ - -/* 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. */ - -/* This program was originally written by someone else (Simon Hui?); - I just added a bit more GLUT stuff to it. */ - -#include -#include -#include -#include -#include - -#define VORDER 10 -#define CORDER 10 -#define TORDER 3 - -#define VMAJOR_ORDER 2 -#define VMINOR_ORDER 3 - -#define CMAJOR_ORDER 2 -#define CMINOR_ORDER 2 - -#define TMAJOR_ORDER 2 -#define TMINOR_ORDER 2 - -#define VDIM 4 -#define CDIM 4 -#define TDIM 2 - -#define ONE_D 1 -#define TWO_D 2 - -#define EVAL 3 -#define MESH 4 - -GLenum doubleBuffer; - -float rotX = 0.0, rotY = 0.0, translateZ = -1.0; - -GLenum arrayType = ONE_D; -GLenum colorType = GL_FALSE; -GLenum textureType = GL_FALSE; -GLenum polygonFilled = GL_FALSE; -GLenum lighting = GL_FALSE; -GLenum mapPoint = GL_FALSE; -GLenum mapType = EVAL; - -double point1[10 * 4] = -{ - -0.5, 0.0, 0.0, 1.0, - -0.4, 0.5, 0.0, 1.0, - -0.3, -0.5, 0.0, 1.0, - -0.2, 0.5, 0.0, 1.0, - -0.1, -0.5, 0.0, 1.0, - 0.0, 0.5, 0.0, 1.0, - 0.1, -0.5, 0.0, 1.0, - 0.2, 0.5, 0.0, 1.0, - 0.3, -0.5, 0.0, 1.0, - 0.4, 0.0, 0.0, 1.0, -}; -double cpoint1[10 * 4] = -{ - 0.0, 0.0, 1.0, 1.0, - 0.3, 0.0, 0.7, 1.0, - 0.6, 0.0, 0.3, 1.0, - 1.0, 0.0, 0.0, 1.0, - 1.0, 0.3, 0.0, 1.0, - 1.0, 0.6, 0.0, 1.0, - 1.0, 1.0, 0.0, 1.0, - 1.0, 1.0, 0.5, 1.0, - 1.0, 1.0, 1.0, 1.0, -}; -double tpoint1[11 * 4] = -{ - 0.0, 0.0, 0.0, 1.0, - 0.0, 0.1, 0.0, 1.0, - 0.0, 0.2, 0.0, 1.0, - 0.0, 0.3, 0.0, 1.0, - 0.0, 0.4, 0.0, 1.0, - 0.0, 0.5, 0.0, 1.0, - 0.0, 0.6, 0.0, 1.0, - 0.0, 0.7, 0.0, 1.0, - 0.0, 0.8, 0.0, 1.0, - 0.0, 0.9, 0.0, 1.0, -}; -double point2[2 * 3 * 4] = -{ - -0.5, -0.5, 0.5, 1.0, - 0.0, 1.0, 0.5, 1.0, - 0.5, -0.5, 0.5, 1.0, - -0.5, 0.5, -0.5, 1.0, - 0.0, -1.0, -0.5, 1.0, - 0.5, 0.5, -0.5, 1.0, -}; -double cpoint2[2 * 2 * 4] = -{ - 0.0, 0.0, 0.0, 1.0, - 0.0, 0.0, 1.0, 1.0, - 0.0, 1.0, 0.0, 1.0, - 1.0, 1.0, 1.0, 1.0, -}; -double tpoint2[2 * 2 * 2] = -{ - 0.0, 0.0, 0.0, 1.0, - 1.0, 0.0, 1.0, 1.0, -}; -float textureImage[4 * 2 * 4] = -{ - 1.0, 1.0, 1.0, 1.0, - 1.0, 0.0, 0.0, 1.0, - 1.0, 0.0, 0.0, 1.0, - 1.0, 1.0, 1.0, 1.0, - 1.0, 1.0, 1.0, 1.0, - 1.0, 0.0, 0.0, 1.0, - 1.0, 0.0, 0.0, 1.0, - 1.0, 1.0, 1.0, 1.0, -}; - -static void -Init(void) -{ - static float ambient[] = - {0.1, 0.1, 0.1, 1.0}; - static float diffuse[] = - {1.0, 1.0, 1.0, 1.0}; - static float position[] = - {0.0, 0.0, -150.0, 0.0}; - static float front_mat_diffuse[] = - {1.0, 0.2, 1.0, 1.0}; - static float back_mat_diffuse[] = - {1.0, 1.0, 0.2, 1.0}; - static float lmodel_ambient[] = - {1.0, 1.0, 1.0, 1.0}; - static float lmodel_twoside[] = - {GL_TRUE}; - static float decal[] = - {GL_DECAL}; - static float repeat[] = - {GL_REPEAT}; - static float nr[] = - {GL_NEAREST}; - - glFrontFace(GL_CCW); - - glEnable(GL_DEPTH_TEST); - - glMap1d(GL_MAP1_VERTEX_4, 0.0, 1.0, VDIM, VORDER, point1); - glMap1d(GL_MAP1_COLOR_4, 0.0, 1.0, CDIM, CORDER, cpoint1); - - glMap2d(GL_MAP2_VERTEX_4, 0.0, 1.0, VMINOR_ORDER * VDIM, VMAJOR_ORDER, 0.0, - 1.0, VDIM, VMINOR_ORDER, point2); - glMap2d(GL_MAP2_COLOR_4, 0.0, 1.0, CMINOR_ORDER * CDIM, CMAJOR_ORDER, 0.0, - 1.0, CDIM, CMINOR_ORDER, cpoint2); - glMap2d(GL_MAP2_TEXTURE_COORD_2, 0.0, 1.0, TMINOR_ORDER * TDIM, - TMAJOR_ORDER, 0.0, 1.0, TDIM, TMINOR_ORDER, tpoint2); - - glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); - glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); - glLightfv(GL_LIGHT0, GL_POSITION, position); - - glMaterialfv(GL_FRONT, GL_DIFFUSE, front_mat_diffuse); - glMaterialfv(GL_BACK, GL_DIFFUSE, back_mat_diffuse); - - glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); - glLightModelfv(GL_LIGHT_MODEL_TWO_SIDE, lmodel_twoside); - - glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, decal); - glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, repeat); - glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, repeat); - glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, nr); - glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, nr); - glTexImage2D(GL_TEXTURE_2D, 0, 4, 2, 4, 0, GL_RGBA, GL_FLOAT, - (GLvoid *) textureImage); -} - -static void -DrawPoints1(void) -{ - GLint i; - - glColor3f(0.0, 1.0, 0.0); - glPointSize(2); - glBegin(GL_POINTS); - for (i = 0; i < VORDER; i++) { - glVertex4dv(&point1[i * 4]); - } - glEnd(); -} - -static void -DrawPoints2(void) -{ - GLint i, j; - - glColor3f(1.0, 0.0, 1.0); - glPointSize(2); - glBegin(GL_POINTS); - for (i = 0; i < VMAJOR_ORDER; i++) { - for (j = 0; j < VMINOR_ORDER; j++) { - glVertex4dv(&point2[i * 4 * VMINOR_ORDER + j * 4]); - } - } - glEnd(); -} - -static void -DrawMapEval1(float du) -{ - float u; - - glColor3f(1.0, 0.0, 0.0); - glBegin(GL_LINE_STRIP); - for (u = 0.0; u < 1.0; u += du) { - glEvalCoord1d(u); - } - glEvalCoord1d(1.0); - glEnd(); -} - -static void -DrawMapEval2(float du, float dv) -{ - float u, v, tmp; - - glColor3f(1.0, 0.0, 0.0); - for (v = 0.0; v < 1.0; v += dv) { - glBegin(GL_QUAD_STRIP); - for (u = 0.0; u <= 1.0; u += du) { - glEvalCoord2d(u, v); - tmp = (v + dv < 1.0) ? (v + dv) : 1.0; - glEvalCoord2d(u, tmp); - } - glEvalCoord2d(1.0, v); - glEvalCoord2d(1.0, v + dv); - glEnd(); - } -} - -static void -RenderEval(void) -{ - - if (colorType) { - glEnable(GL_MAP1_COLOR_4); - glEnable(GL_MAP2_COLOR_4); - } else { - glDisable(GL_MAP1_COLOR_4); - glDisable(GL_MAP2_COLOR_4); - } - - if (textureType) { - glEnable(GL_TEXTURE_2D); - glEnable(GL_MAP2_TEXTURE_COORD_2); - } else { - glDisable(GL_TEXTURE_2D); - glDisable(GL_MAP2_TEXTURE_COORD_2); - } - - if (polygonFilled) { - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - } else { - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - } - - glShadeModel(GL_SMOOTH); - - switch (mapType) { - case EVAL: - switch (arrayType) { - case ONE_D: - glDisable(GL_MAP2_VERTEX_4); - glEnable(GL_MAP1_VERTEX_4); - DrawPoints1(); - DrawMapEval1(0.1 / VORDER); - break; - case TWO_D: - glDisable(GL_MAP1_VERTEX_4); - glEnable(GL_MAP2_VERTEX_4); - DrawPoints2(); - DrawMapEval2(0.1 / VMAJOR_ORDER, 0.1 / VMINOR_ORDER); - break; - } - break; - case MESH: - switch (arrayType) { - case ONE_D: - DrawPoints1(); - glDisable(GL_MAP2_VERTEX_4); - glEnable(GL_MAP1_VERTEX_4); - glColor3f(0.0, 0.0, 1.0); - glMapGrid1d(40, 0.0, 1.0); - if (mapPoint) { - glPointSize(2); - glEvalMesh1(GL_POINT, 0, 40); - } else { - glEvalMesh1(GL_LINE, 0, 40); - } - break; - case TWO_D: - DrawPoints2(); - glDisable(GL_MAP1_VERTEX_4); - glEnable(GL_MAP2_VERTEX_4); - glColor3f(0.0, 0.0, 1.0); - glMapGrid2d(20, 0.0, 1.0, 20, 0.0, 1.0); - if (mapPoint) { - glPointSize(2); - glEvalMesh2(GL_POINT, 0, 20, 0, 20); - } else if (polygonFilled) { - glEvalMesh2(GL_FILL, 0, 20, 0, 20); - } else { - glEvalMesh2(GL_LINE, 0, 20, 0, 20); - } - break; - default:; - /* Mesa makes GLenum be a C "enum" and gcc will warn if - all the cases of an enum are not tested in a switch - statement. Add default case to supress the error. */ - } - break; - } -} - -static void -Reshape(int width, int height) -{ - - glViewport(0, 0, width, height); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 10.0); - glMatrixMode(GL_MODELVIEW); -} - -/* ARGSUSED1 */ -static void -Key(unsigned char key, int x, int y) -{ - switch (key) { - case '1': - arrayType = ONE_D; - glDisable(GL_AUTO_NORMAL); - glutPostRedisplay(); - break; - case '2': - arrayType = TWO_D; - glEnable(GL_AUTO_NORMAL); - glutPostRedisplay(); - break; - case '3': - mapType = EVAL; - glutPostRedisplay(); - break; - case '4': - mapType = MESH; - glutPostRedisplay(); - break; - case '5': - polygonFilled = !polygonFilled; - glutPostRedisplay(); - break; - case '6': - mapPoint = !mapPoint; - glutPostRedisplay(); - break; - case '7': - colorType = !colorType; - glutPostRedisplay(); - break; - case '8': - textureType = !textureType; - glutPostRedisplay(); - break; - case '9': - lighting = !lighting; - if (lighting) { - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - if (arrayType == TWO_D) { - glEnable(GL_AUTO_NORMAL); - } else { - glDisable(GL_AUTO_NORMAL); - } - } else { - glDisable(GL_LIGHTING); - glDisable(GL_LIGHT0); - glDisable(GL_AUTO_NORMAL); - } - glutPostRedisplay(); - break; - case 27: /* Escape key. */ - exit(0); - } -} - -static void -Menu(int value) -{ - /* Menu items have key values assigned to them. Just pass - this value to the key routine. */ - Key((unsigned char) value, 0, 0); -} - -/* ARGSUSED1 */ -static void -SpecialKey(int key, int x, int y) -{ - - switch (key) { - case GLUT_KEY_LEFT: - rotY -= 30; - glutPostRedisplay(); - break; - case GLUT_KEY_RIGHT: - rotY += 30; - glutPostRedisplay(); - break; - case GLUT_KEY_UP: - rotX -= 30; - glutPostRedisplay(); - break; - case GLUT_KEY_DOWN: - rotX += 30; - glutPostRedisplay(); - break; - } -} - -static void -Draw(void) -{ - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glPushMatrix(); - - glTranslatef(0.0, 0.0, translateZ); - glRotatef(rotX, 1, 0, 0); - glRotatef(rotY, 0, 1, 0); - RenderEval(); - - glPopMatrix(); - - if (doubleBuffer) { - glutSwapBuffers(); - } else { - glFlush(); - } -} - -static void -Args(int argc, char **argv) -{ - GLint i; - - doubleBuffer = GL_FALSE; - - for (i = 1; i < argc; i++) { - if (strcmp(argv[i], "-sb") == 0) { - doubleBuffer = GL_FALSE; - } else if (strcmp(argv[i], "-db") == 0) { - doubleBuffer = GL_TRUE; - } - } -} - -int -main(int argc, char **argv) -{ - GLenum type; - - glutInit(&argc, argv); - Args(argc, argv); - - type = GLUT_RGB | GLUT_DEPTH; - type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; - glutInitDisplayMode(type); - glutInitWindowSize(300, 300); - glutCreateWindow("Evaluator Test"); - - glutCreateMenu(Menu); - glutAddMenuEntry("One dimensional", '1'); - glutAddMenuEntry("Two dimensional", '2'); - glutAddMenuEntry("Eval map type", '3'); - glutAddMenuEntry("Mesh map type", '4'); - glutAddMenuEntry("Toggle filled", '5'); - glutAddMenuEntry("Toggle map point", '6'); - glutAddMenuEntry("Toggle color", '7'); - glutAddMenuEntry("Toggle texture", '8'); - glutAddMenuEntry("Toggle lighting", '9'); - glutAddMenuEntry("Quit", 27); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutAttachMenu(GLUT_LEFT_BUTTON); - - Init(); - - glutReshapeFunc(Reshape); - glutKeyboardFunc(Key); - glutSpecialFunc(SpecialKey); - glutDisplayFunc(Draw); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/examples/evaltest.dsp b/lib/glut-3.7.6/progs/examples/evaltest.dsp deleted file mode 100644 index 7b12ae166..000000000 --- a/lib/glut-3.7.6/progs/examples/evaltest.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="evaltest" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=evaltest - 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 "evaltest.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 "evaltest.mak" CFG="evaltest - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "evaltest - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "evaltest - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "evaltest - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "evaltest - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "evaltest - Win32 Release" -# Name "evaltest - Win32 Debug" -# Begin Source File - -SOURCE=.\evaltest.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/fogtst.c b/lib/glut-3.7.6/progs/examples/fogtst.c deleted file mode 100644 index 76768db7c..000000000 --- a/lib/glut-3.7.6/progs/examples/fogtst.c +++ /dev/null @@ -1,261 +0,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 -#include -#include -#include - -GLenum doubleBuffer; -double plane[4] = { - 1.0, 0.0, -1.0, 0.0 -}; -float rotX = 5.0, rotY = -5.0, zTranslate = -65.0; -float fogDensity = 0.02; -GLint cubeList = 1; - -float scp[18][3] = { - {1.000000, 0.000000, 0.000000}, - {1.000000, 0.000000, 5.000000}, - {0.707107, 0.707107, 0.000000}, - {0.707107, 0.707107, 5.000000}, - {0.000000, 1.000000, 0.000000}, - {0.000000, 1.000000, 5.000000}, - {-0.707107, 0.707107, 0.000000}, - {-0.707107, 0.707107, 5.000000}, - {-1.000000, 0.000000, 0.000000}, - {-1.000000, 0.000000, 5.000000}, - {-0.707107, -0.707107, 0.000000}, - {-0.707107, -0.707107, 5.000000}, - {0.000000, -1.000000, 0.000000}, - {0.000000, -1.000000, 5.000000}, - {0.707107, -0.707107, 0.000000}, - {0.707107, -0.707107, 5.000000}, - {1.000000, 0.000000, 0.000000}, - {1.000000, 0.000000, 5.000000}, -}; - -static float ambient[] = {0.1, 0.1, 0.1, 1.0}; -static float diffuse[] = {1.0, 1.0, 1.0, 1.0}; -static float position[] = {90.0, 90.0, 0.0, 0.0}; -static float front_mat_shininess[] = {30.0}; -static float front_mat_specular[] = {0.0, 0.0, 0.0, 1.0}; -static float front_mat_diffuse[] = {0.0, 1.0, 0.0, 1.0}; -static float back_mat_shininess[] = {50.0}; -static float back_mat_specular[] = {0.0, 0.0, 1.0, 1.0}; -static float back_mat_diffuse[] = {1.0, 0.0, 0.0, 1.0}; -static float lmodel_ambient[] = {0.0, 0.0, 0.0, 1.0}; -static float fog_color[] = {0.8, 0.8, 0.8, 1.0}; - -/* ARGSUSED1 */ -static void - Key(unsigned char key, int x, int y) -{ - switch (key) { - case 'd': - fogDensity *= 1.10; - glFogf(GL_FOG_DENSITY, fogDensity); - glutPostRedisplay(); - break; - case 'D': - fogDensity /= 1.10; - glFogf(GL_FOG_DENSITY, fogDensity); - glutPostRedisplay(); - break; - case 27: - exit(0); - } -} - -/* ARGSUSED1 */ -static void - SpecialKey(int key, int x, int y) -{ - switch (key) { - case GLUT_KEY_UP: - rotX -= 5; - glutPostRedisplay(); - break; - case GLUT_KEY_DOWN: - rotX += 5; - glutPostRedisplay(); - break; - case GLUT_KEY_LEFT: - rotY -= 5; - glutPostRedisplay(); - break; - case GLUT_KEY_RIGHT: - rotY += 5; - glutPostRedisplay(); - break; - } -} - -static void - Draw(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glPushMatrix(); - - glTranslatef(0, 0, zTranslate); - /* XXX hooky dual axis rotation! */ - glRotatef(rotY, 0, 1, 0); - glRotatef(rotX, 1, 0, 0); - glScalef(1.0, 1.0, 10.0); - - glCallList(cubeList); - - glPopMatrix(); - - if (doubleBuffer) { - glutSwapBuffers(); - } else { - glFlush(); - } -} - -static void - Args(int argc, char **argv) -{ - GLint i; - doubleBuffer = GL_TRUE; - - for (i = 1; i < argc; i++) { - if (strcmp(argv[i], "-sb") == 0) { - doubleBuffer = GL_FALSE; - } else if (strcmp(argv[i], "-db") == 0) { - doubleBuffer = GL_TRUE; - } - } -} - -int - main(int argc, char **argv) -{ - GLenum type; - - glutInit(&argc, argv); - Args(argc, argv); - - type = GLUT_RGB | GLUT_DEPTH; - type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; - glutInitDisplayMode(type); - glutInitWindowSize(300, 300); - glutCreateWindow("Fog Test"); - - glFrontFace(GL_CW); - - glEnable(GL_DEPTH_TEST); - - glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); - glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); - glLightfv(GL_LIGHT0, GL_POSITION, position); - glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); - glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - - glMaterialfv(GL_FRONT, GL_SHININESS, front_mat_shininess); - glMaterialfv(GL_FRONT, GL_SPECULAR, front_mat_specular); - glMaterialfv(GL_FRONT, GL_DIFFUSE, front_mat_diffuse); - glMaterialfv(GL_BACK, GL_SHININESS, back_mat_shininess); - glMaterialfv(GL_BACK, GL_SPECULAR, back_mat_specular); - glMaterialfv(GL_BACK, GL_DIFFUSE, back_mat_diffuse); - - glEnable(GL_FOG); - glFogi(GL_FOG_MODE, GL_EXP); - glFogf(GL_FOG_DENSITY, fogDensity); - glFogfv(GL_FOG_COLOR, fog_color); - glClearColor(0.8, 0.8, 0.8, 1.0); - /* *INDENT-OFF* */ - glNewList(cubeList, GL_COMPILE); - glBegin(GL_TRIANGLE_STRIP); - glNormal3fv(scp[0]); - glVertex3fv(scp[0]); - glNormal3fv(scp[0]); - glVertex3fv(scp[1]); - glNormal3fv(scp[2]); - glVertex3fv(scp[2]); - glNormal3fv(scp[2]); - glVertex3fv(scp[3]); - glNormal3fv(scp[4]); - glVertex3fv(scp[4]); - glNormal3fv(scp[4]); - glVertex3fv(scp[5]); - glNormal3fv(scp[6]); - glVertex3fv(scp[6]); - glNormal3fv(scp[6]); - glVertex3fv(scp[7]); - glNormal3fv(scp[8]); - glVertex3fv(scp[8]); - glNormal3fv(scp[8]); - glVertex3fv(scp[9]); - glNormal3fv(scp[10]); - glVertex3fv(scp[10]); - glNormal3fv(scp[10]); - glVertex3fv(scp[11]); - glNormal3fv(scp[12]); - glVertex3fv(scp[12]); - glNormal3fv(scp[12]); - glVertex3fv(scp[13]); - glNormal3fv(scp[14]); - glVertex3fv(scp[14]); - glNormal3fv(scp[14]); - glVertex3fv(scp[15]); - glNormal3fv(scp[16]); - glVertex3fv(scp[16]); - glNormal3fv(scp[16]); - glVertex3fv(scp[17]); - glEnd(); - glEndList(); - /* *INDENT-ON* */ - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(45.0, 1.0, 1.0, 200.0); - glMatrixMode(GL_MODELVIEW); - - glutKeyboardFunc(Key); - glutSpecialFunc(SpecialKey); - glutDisplayFunc(Draw); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/examples/fogtst.dsp b/lib/glut-3.7.6/progs/examples/fogtst.dsp deleted file mode 100644 index 974d26fb9..000000000 --- a/lib/glut-3.7.6/progs/examples/fogtst.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="fogtst" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=fogtst - 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 "fogtst.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 "fogtst.mak" CFG="fogtst - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "fogtst - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "fogtst - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "fogtst - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "fogtst - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "fogtst - Win32 Release" -# Name "fogtst - Win32 Debug" -# Begin Source File - -SOURCE=.\fogtst.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/fontdemo.c b/lib/glut-3.7.6/progs/examples/fontdemo.c deleted file mode 100644 index 88480a576..000000000 --- a/lib/glut-3.7.6/progs/examples/fontdemo.c +++ /dev/null @@ -1,102 +0,0 @@ - -/* 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 -#include -#include -#include - -void -bitmap_output(int x, int y, char *string, void *font) -{ - int len, i; - - glRasterPos2f(x, y); - len = (int) strlen(string); - for (i = 0; i < len; i++) { - glutBitmapCharacter(font, string[i]); - } -} - -void -stroke_output(GLfloat x, GLfloat y, char *format,...) -{ - va_list args; - char buffer[200], *p; - - va_start(args, format); - vsprintf(buffer, format, args); - va_end(args); - glPushMatrix(); - glTranslatef(x, y, 0); - glScalef(0.005, 0.005, 0.005); - for (p = buffer; *p; p++) - glutStrokeCharacter(GLUT_STROKE_ROMAN, *p); - glPopMatrix(); -} - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - bitmap_output(40, 35, "This is written in a GLUT bitmap font.", - GLUT_BITMAP_TIMES_ROMAN_24); - bitmap_output(30, 210, "More bitmap text is a fixed 9 by 15 font.", - GLUT_BITMAP_9_BY_15); - bitmap_output(70, 240, " Helvetica is yet another bitmap font.", - GLUT_BITMAP_HELVETICA_18); - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - gluPerspective(40.0, 1.0, 0.1, 20.0); - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - gluLookAt(0.0, 0.0, 4.0, /* eye is at (0,0,30) */ - 0.0, 0.0, 0.0, /* center is at (0,0,0) */ - 0.0, 1.0, 0.); /* up is in postivie Y direction */ - glPushMatrix(); - glTranslatef(0, 0, -4); - glRotatef(50, 0, 1, 0); - stroke_output(-2.5, 1.1, " This is written in a"); - stroke_output(-2.5, 0, " GLUT stroke font."); - stroke_output(-2.5, -1.1, "using 3D perspective."); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glFlush(); -} - -void -reshape(int w, int h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluOrtho2D(0, w, 0, h); - glScalef(1, -1, 1); - glTranslatef(0, -h, 0); - glMatrixMode(GL_MODELVIEW); -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); - glutInitWindowSize(465, 250); - glutCreateWindow("GLUT bitmap & stroke font example"); - glClearColor(1.0, 1.0, 1.0, 1.0); - glColor3f(0, 0, 0); - glLineWidth(3.0); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/examples/fontdemo.dsp b/lib/glut-3.7.6/progs/examples/fontdemo.dsp deleted file mode 100644 index 4233c5f11..000000000 --- a/lib/glut-3.7.6/progs/examples/fontdemo.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="fontdemo" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=fontdemo - 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 "fontdemo.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 "fontdemo.mak" CFG="fontdemo - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "fontdemo - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "fontdemo - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "fontdemo - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "fontdemo - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "fontdemo - Win32 Release" -# Name "fontdemo - Win32 Debug" -# Begin Source File - -SOURCE=.\fontdemo.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/glpuzzle.c b/lib/glut-3.7.6/progs/examples/glpuzzle.c deleted file mode 100644 index b0c3f3629..000000000 --- a/lib/glut-3.7.6/progs/examples/glpuzzle.c +++ /dev/null @@ -1,1439 +0,0 @@ - -/* glpuzzle - written by Kevin Smith (kpsmith@engr.sgi.com) */ - -#include -#include -#include -#include -#include -#include -#include -#include "trackball.h" - -#define WIDTH 4 -#define HEIGHT 5 -#define PIECES 10 -#define OFFSETX -2 -#define OFFSETY -2.5 -#define OFFSETZ -0.5 - -typedef unsigned char Config[HEIGHT][WIDTH]; - -struct puzzle { - struct puzzle *backptr; - struct puzzle *solnptr; - Config pieces; - struct puzzle *next; - unsigned hashvalue; -}; - -#define HASHSIZE 10691 - -struct puzzlelist { - struct puzzle *puzzle; - struct puzzlelist *next; -}; - -static char convert[PIECES + 1] = -{0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 4}; - -static unsigned char colors[PIECES + 1][3] = -{ - {0, 0, 0}, - {255, 255, 127}, - {255, 255, 127}, - {255, 255, 127}, - {255, 255, 127}, - {255, 127, 255}, - {255, 127, 255}, - {255, 127, 255}, - {255, 127, 255}, - {255, 127, 127}, - {255, 255, 255}, -}; - -void changeState(void); - -static struct puzzle *hashtable[HASHSIZE]; -static struct puzzle *startPuzzle; -static struct puzzlelist *puzzles; -static struct puzzlelist *lastentry; - -int curX, curY, visible; - -#define MOVE_SPEED 0.2 -static unsigned char movingPiece; -static float move_x, move_y; -static float curquat[4]; -static int doubleBuffer = 1; -static int depth = 1; - -static char xsize[PIECES + 1] = -{0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2}; -static char ysize[PIECES + 1] = -{0, 1, 1, 1, 1, 2, 2, 2, 2, 1, 2}; -static float zsize[PIECES + 1] = -{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.6}; - -static Config startConfig = -{ - {8, 10, 10, 7}, - {8, 10, 10, 7}, - {6, 9, 9, 5}, - {6, 4, 3, 5}, - {2, 0, 0, 1} -}; - -static Config thePuzzle = -{ - {8, 10, 10, 7}, - {8, 10, 10, 7}, - {6, 9, 9, 5}, - {6, 4, 3, 5}, - {2, 0, 0, 1} -}; - -static int xadds[4] = -{-1, 0, 1, 0}; -static int yadds[4] = -{0, -1, 0, 1}; - -static int W = 400, H = 300; -static GLint viewport[4]; - -#define srandom srand -#define random() (rand() >> 2) - -unsigned -hash(Config config) -{ - int i, j, value; - - value = 0; - for (i = 0; i < HEIGHT; i++) { - for (j = 0; j < WIDTH; j++) { - value = value + convert[config[i][j]]; - value *= 6; - } - } - return (value); -} - -int -solution(Config config) -{ - if (config[4][1] == 10 && config[4][2] == 10) - return (1); - return (0); -} - -float boxcoords[][3] = -{ - {0.2, 0.2, 0.9}, - {0.8, 0.2, 0.9}, - {0.8, 0.8, 0.9}, - {0.2, 0.8, 0.9}, - {0.2, 0.1, 0.8}, - {0.8, 0.1, 0.8}, - {0.9, 0.2, 0.8}, - {0.9, 0.8, 0.8}, - {0.8, 0.9, 0.8}, - {0.2, 0.9, 0.8}, - {0.1, 0.8, 0.8}, - {0.1, 0.2, 0.8}, - {0.2, 0.1, 0.2}, - {0.8, 0.1, 0.2}, - {0.9, 0.2, 0.2}, - {0.9, 0.8, 0.2}, - {0.8, 0.9, 0.2}, - {0.2, 0.9, 0.2}, - {0.1, 0.8, 0.2}, - {0.1, 0.2, 0.2}, - {0.2, 0.2, 0.1}, - {0.8, 0.2, 0.1}, - {0.8, 0.8, 0.1}, - {0.2, 0.8, 0.1}, -}; - -float boxnormals[][3] = -{ - {0, 0, 1}, /* 0 */ - {0, 1, 0}, - {1, 0, 0}, - {0, 0, -1}, - {0, -1, 0}, - {-1, 0, 0}, - {0.7071, 0.7071, 0.0000}, /* 6 */ - {0.7071, -0.7071, 0.0000}, - {-0.7071, 0.7071, 0.0000}, - {-0.7071, -0.7071, 0.0000}, - {0.7071, 0.0000, 0.7071}, /* 10 */ - {0.7071, 0.0000, -0.7071}, - {-0.7071, 0.0000, 0.7071}, - {-0.7071, 0.0000, -0.7071}, - {0.0000, 0.7071, 0.7071}, /* 14 */ - {0.0000, 0.7071, -0.7071}, - {0.0000, -0.7071, 0.7071}, - {0.0000, -0.7071, -0.7071}, - {0.5774, 0.5774, 0.5774}, /* 18 */ - {0.5774, 0.5774, -0.5774}, - {0.5774, -0.5774, 0.5774}, - {0.5774, -0.5774, -0.5774}, - {-0.5774, 0.5774, 0.5774}, - {-0.5774, 0.5774, -0.5774}, - {-0.5774, -0.5774, 0.5774}, - {-0.5774, -0.5774, -0.5774}, -}; - -int boxfaces[][4] = -{ - {0, 1, 2, 3}, /* 0 */ - {9, 8, 16, 17}, - {6, 14, 15, 7}, - {20, 23, 22, 21}, - {12, 13, 5, 4}, - {19, 11, 10, 18}, - {7, 15, 16, 8}, /* 6 */ - {13, 14, 6, 5}, - {18, 10, 9, 17}, - {19, 12, 4, 11}, - {1, 6, 7, 2}, /* 10 */ - {14, 21, 22, 15}, - {11, 0, 3, 10}, - {20, 19, 18, 23}, - {3, 2, 8, 9}, /* 14 */ - {17, 16, 22, 23}, - {4, 5, 1, 0}, - {20, 21, 13, 12}, - {2, 7, 8, -1}, /* 18 */ - {16, 15, 22, -1}, - {5, 6, 1, -1}, - {13, 21, 14, -1}, - {10, 3, 9, -1}, - {18, 17, 23, -1}, - {11, 4, 0, -1}, - {20, 12, 19, -1}, -}; - -#define NBOXFACES (sizeof(boxfaces)/sizeof(boxfaces[0])) - -/* Draw a box. Bevel as desired. */ -void -drawBox(int piece, float xoff, float yoff) -{ - int xlen, ylen; - int i, k; - float x, y, z; - float zlen; - float *v; - - xlen = xsize[piece]; - ylen = ysize[piece]; - zlen = zsize[piece]; - - glColor3ubv(colors[piece]); - glBegin(GL_QUADS); - for (i = 0; i < 18; i++) { - glNormal3fv(boxnormals[i]); - for (k = 0; k < 4; k++) { - if (boxfaces[i][k] == -1) - continue; - v = boxcoords[boxfaces[i][k]]; - x = v[0] + OFFSETX; - if (v[0] > 0.5) - x += xlen - 1; - y = v[1] + OFFSETY; - if (v[1] > 0.5) - y += ylen - 1; - z = v[2] + OFFSETZ; - if (v[2] > 0.5) - z += zlen - 1; - glVertex3f(xoff + x, yoff + y, z); - } - } - glEnd(); - glBegin(GL_TRIANGLES); - for (i = 18; i < NBOXFACES; i++) { - glNormal3fv(boxnormals[i]); - for (k = 0; k < 3; k++) { - if (boxfaces[i][k] == -1) - continue; - v = boxcoords[boxfaces[i][k]]; - x = v[0] + OFFSETX; - if (v[0] > 0.5) - x += xlen - 1; - y = v[1] + OFFSETY; - if (v[1] > 0.5) - y += ylen - 1; - z = v[2] + OFFSETZ; - if (v[2] > 0.5) - z += zlen - 1; - glVertex3f(xoff + x, yoff + y, z); - } - } - glEnd(); -} - -float containercoords[][3] = -{ - {-0.1, -0.1, 1.0}, - {-0.1, -0.1, -0.1}, - {4.1, -0.1, -0.1}, - {4.1, -0.1, 1.0}, - {1.0, -0.1, 0.6}, /* 4 */ - {3.0, -0.1, 0.6}, - {1.0, -0.1, 0.0}, - {3.0, -0.1, 0.0}, - {1.0, 0.0, 0.0}, /* 8 */ - {3.0, 0.0, 0.0}, - {3.0, 0.0, 0.6}, - {1.0, 0.0, 0.6}, - {0.0, 0.0, 1.0}, /* 12 */ - {4.0, 0.0, 1.0}, - {4.0, 0.0, 0.0}, - {0.0, 0.0, 0.0}, - {0.0, 5.0, 0.0}, /* 16 */ - {0.0, 5.0, 1.0}, - {4.0, 5.0, 1.0}, - {4.0, 5.0, 0.0}, - {-0.1, 5.1, -0.1}, /* 20 */ - {4.1, 5.1, -0.1}, - {4.1, 5.1, 1.0}, - {-0.1, 5.1, 1.0}, -}; - -float containernormals[][3] = -{ - {0, -1, 0}, - {0, -1, 0}, - {0, -1, 0}, - {0, -1, 0}, - {0, -1, 0}, - {0, 1, 0}, - {0, 1, 0}, - {0, 1, 0}, - {1, 0, 0}, - {1, 0, 0}, - {1, 0, 0}, - {-1, 0, 0}, - {-1, 0, 0}, - {-1, 0, 0}, - {0, 1, 0}, - {0, 0, -1}, - {0, 0, -1}, - {0, 0, 1}, - {0, 0, 1}, - {0, 0, 1}, - {0, 0, 1}, - {0, 0, 1}, - {0, 0, 1}, - {0, 0, 1}, -}; - -int containerfaces[][4] = -{ - {1, 6, 4, 0}, - {0, 4, 5, 3}, - {1, 2, 7, 6}, - {7, 2, 3, 5}, - {16, 19, 18, 17}, - - {23, 22, 21, 20}, - {12, 11, 8, 15}, - {10, 13, 14, 9}, - - {15, 16, 17, 12}, - {2, 21, 22, 3}, - {6, 8, 11, 4}, - - {1, 0, 23, 20}, - {14, 13, 18, 19}, - {9, 7, 5, 10}, - - {12, 13, 10, 11}, - - {1, 20, 21, 2}, - {4, 11, 10, 5}, - - {15, 8, 19, 16}, - {19, 8, 9, 14}, - {8, 6, 7, 9}, - {0, 3, 13, 12}, - {13, 3, 22, 18}, - {18, 22, 23, 17}, - {17, 23, 0, 12}, -}; - -#define NCONTFACES (sizeof(containerfaces)/sizeof(containerfaces[0])) - -/* Draw the container */ -void -drawContainer(void) -{ - int i, k; - float *v; - - /* Y is reversed here because the model has it reversed */ - - /* Arbitrary bright wood-like color */ - glColor3ub(209, 103, 23); - glBegin(GL_QUADS); - for (i = 0; i < NCONTFACES; i++) { - v = containernormals[i]; - glNormal3f(v[0], -v[1], v[2]); - for (k = 3; k >= 0; k--) { - v = containercoords[containerfaces[i][k]]; - glVertex3f(v[0] + OFFSETX, -(v[1] + OFFSETY), v[2] + OFFSETZ); - } - } - glEnd(); -} - -void -drawAll(void) -{ - int i, j; - int piece; - char done[PIECES + 1]; - float m[4][4]; - - build_rotmatrix(m, curquat); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(0, 0, -10); - glMultMatrixf(&(m[0][0])); - glRotatef(180, 0, 0, 1); - - if (depth) { - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - } else { - glClear(GL_COLOR_BUFFER_BIT); - } - for (i = 1; i <= PIECES; i++) { - done[i] = 0; - } - glLoadName(0); - drawContainer(); - for (i = 0; i < HEIGHT; i++) { - for (j = 0; j < WIDTH; j++) { - piece = thePuzzle[i][j]; - if (piece == 0) - continue; - if (done[piece]) - continue; - done[piece] = 1; - glLoadName(piece); - if (piece == movingPiece) { - drawBox(piece, move_x, move_y); - } else { - drawBox(piece, j, i); - } - } - } -} - -void -redraw(void) -{ - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(45, 1.0, 0.1, 100.0); - - drawAll(); - - if (doubleBuffer) - glutSwapBuffers(); - else - glFinish(); -} - -void -solidifyChain(struct puzzle *puzzle) -{ - int i; - char buf[256]; - - i = 0; - while (puzzle->backptr) { - i++; - puzzle->backptr->solnptr = puzzle; - puzzle = puzzle->backptr; - } - sprintf(buf, "%d moves to complete!", i); - glutSetWindowTitle(buf); -} - -int -addConfig(Config config, struct puzzle *back) -{ - unsigned hashvalue; - struct puzzle *newpiece; - struct puzzlelist *newlistentry; - - hashvalue = hash(config); - - newpiece = hashtable[hashvalue % HASHSIZE]; - while (newpiece != NULL) { - if (newpiece->hashvalue == hashvalue) { - int i, j; - - for (i = 0; i < WIDTH; i++) { - for (j = 0; j < HEIGHT; j++) { - if (convert[config[j][i]] != - convert[newpiece->pieces[j][i]]) - goto nomatch; - } - } - return 0; - } - nomatch: - newpiece = newpiece->next; - } - - newpiece = (struct puzzle *) malloc(sizeof(struct puzzle)); - newpiece->next = hashtable[hashvalue % HASHSIZE]; - newpiece->hashvalue = hashvalue; - memcpy(newpiece->pieces, config, HEIGHT * WIDTH); - newpiece->backptr = back; - newpiece->solnptr = NULL; - hashtable[hashvalue % HASHSIZE] = newpiece; - - newlistentry = (struct puzzlelist *) malloc(sizeof(struct puzzlelist)); - newlistentry->puzzle = newpiece; - newlistentry->next = NULL; - - if (lastentry) { - lastentry->next = newlistentry; - } else { - puzzles = newlistentry; - } - lastentry = newlistentry; - - if (back == NULL) { - startPuzzle = newpiece; - } - if (solution(config)) { - solidifyChain(newpiece); - return 1; - } - return 0; -} - -/* Checks if a space can move */ -int -canmove0(Config pieces, int x, int y, int dir, Config newpieces) -{ - char piece; - int xadd, yadd; - int l, m; - - xadd = xadds[dir]; - yadd = yadds[dir]; - - if (x + xadd < 0 || x + xadd >= WIDTH || - y + yadd < 0 || y + yadd >= HEIGHT) - return 0; - piece = pieces[y + yadd][x + xadd]; - if (piece == 0) - return 0; - memcpy(newpieces, pieces, HEIGHT * WIDTH); - for (l = 0; l < WIDTH; l++) { - for (m = 0; m < HEIGHT; m++) { - if (newpieces[m][l] == piece) - newpieces[m][l] = 0; - } - } - xadd = -xadd; - yadd = -yadd; - for (l = 0; l < WIDTH; l++) { - for (m = 0; m < HEIGHT; m++) { - if (pieces[m][l] == piece) { - int newx, newy; - - newx = l + xadd; - newy = m + yadd; - if (newx < 0 || newx >= WIDTH || - newy < 0 || newy >= HEIGHT) - return 0; - if (newpieces[newy][newx] != 0) - return 0; - newpieces[newy][newx] = piece; - } - } - } - return 1; -} - -/* Checks if a piece can move */ -int -canmove(Config pieces, int x, int y, int dir, Config newpieces) -{ - int xadd, yadd; - - xadd = xadds[dir]; - yadd = yadds[dir]; - - if (x + xadd < 0 || x + xadd >= WIDTH || - y + yadd < 0 || y + yadd >= HEIGHT) - return 0; - if (pieces[y + yadd][x + xadd] == pieces[y][x]) { - return canmove(pieces, x + xadd, y + yadd, dir, newpieces); - } - if (pieces[y + yadd][x + xadd] != 0) - return 0; - return canmove0(pieces, x + xadd, y + yadd, (dir + 2) % 4, newpieces); -} - -int -generateNewConfigs(struct puzzle *puzzle) -{ - int i, j, k; - Config pieces; - Config newpieces; - - memcpy(pieces, puzzle->pieces, HEIGHT * WIDTH); - for (i = 0; i < WIDTH; i++) { - for (j = 0; j < HEIGHT; j++) { - if (pieces[j][i] == 0) { - for (k = 0; k < 4; k++) { - if (canmove0(pieces, i, j, k, newpieces)) { - if (addConfig(newpieces, puzzle)) - return 1; - } - } - } - } - } - return 0; -} - -void -freeSolutions(void) -{ - struct puzzlelist *nextpuz; - struct puzzle *puzzle, *next; - int i; - - while (puzzles) { - nextpuz = puzzles->next; - free((char *) puzzles); - puzzles = nextpuz; - } - lastentry = NULL; - for (i = 0; i < HASHSIZE; i++) { - puzzle = hashtable[i]; - hashtable[i] = NULL; - while (puzzle) { - next = puzzle->next; - free((char *) puzzle); - puzzle = next; - } - } - startPuzzle = NULL; -} - -int -continueSolving(void) -{ - struct puzzle *nextpuz; - int i, j; - int movedPiece; - int movedir; - int fromx, fromy; - int tox, toy; - - if (startPuzzle == NULL) - return 0; - if (startPuzzle->solnptr == NULL) { - freeSolutions(); - return 0; - } - nextpuz = startPuzzle->solnptr; - movedPiece = 0; - movedir = 0; - for (i = 0; i < HEIGHT; i++) { - for (j = 0; j < WIDTH; j++) { - if (startPuzzle->pieces[i][j] != nextpuz->pieces[i][j]) { - if (startPuzzle->pieces[i][j]) { - movedPiece = startPuzzle->pieces[i][j]; - fromx = j; - fromy = i; - if (i < HEIGHT - 1 && nextpuz->pieces[i + 1][j] == movedPiece) { - movedir = 3; - } else { - movedir = 2; - } - goto found_piece; - } else { - movedPiece = nextpuz->pieces[i][j]; - if (i < HEIGHT - 1 && - startPuzzle->pieces[i + 1][j] == movedPiece) { - fromx = j; - fromy = i + 1; - movedir = 1; - } else { - fromx = j + 1; - fromy = i; - movedir = 0; - } - goto found_piece; - } - } - } - } - glutSetWindowTitle("What! No change?"); - freeSolutions(); - return 0; - -found_piece: - if (!movingPiece) { - movingPiece = movedPiece; - move_x = fromx; - move_y = fromy; - } - move_x += xadds[movedir] * MOVE_SPEED; - move_y += yadds[movedir] * MOVE_SPEED; - - tox = fromx + xadds[movedir]; - toy = fromy + yadds[movedir]; - - if (move_x > tox - MOVE_SPEED / 2 && move_x < tox + MOVE_SPEED / 2 && - move_y > toy - MOVE_SPEED / 2 && move_y < toy + MOVE_SPEED / 2) { - startPuzzle = nextpuz; - movingPiece = 0; - } - memcpy(thePuzzle, startPuzzle->pieces, HEIGHT * WIDTH); - changeState(); - return 1; -} - -int -solvePuzzle(void) -{ - struct puzzlelist *nextpuz; - char buf[256]; - int i; - - if (solution(thePuzzle)) { - glutSetWindowTitle("Puzzle already solved!"); - return 0; - } - addConfig(thePuzzle, NULL); - i = 0; - - while (puzzles) { - i++; - if (generateNewConfigs(puzzles->puzzle)) - break; - nextpuz = puzzles->next; - free((char *) puzzles); - puzzles = nextpuz; - } - if (puzzles == NULL) { - freeSolutions(); - sprintf(buf, "I can't solve it! (%d positions examined)", i); - glutSetWindowTitle(buf); - return 1; - } - return 1; -} - -int -selectPiece(int mousex, int mousey) -{ - long hits; - GLuint selectBuf[1024]; - GLuint closest; - GLuint dist; - - glSelectBuffer(1024, selectBuf); - (void) glRenderMode(GL_SELECT); - glInitNames(); - - /* Because LoadName() won't work with no names on the stack */ - glPushName(-1); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPickMatrix(mousex, H - mousey, 4, 4, viewport); - gluPerspective(45, 1.0, 0.1, 100.0); - - drawAll(); - - hits = glRenderMode(GL_RENDER); - if (hits <= 0) { - return 0; - } - closest = 0; - dist = 4294967295U; - while (hits) { - if (selectBuf[(hits - 1) * 4 + 1] < dist) { - dist = selectBuf[(hits - 1) * 4 + 1]; - closest = selectBuf[(hits - 1) * 4 + 3]; - } - hits--; - } - return closest; -} - -void -nukePiece(int piece) -{ - int i, j; - - for (i = 0; i < HEIGHT; i++) { - for (j = 0; j < WIDTH; j++) { - if (thePuzzle[i][j] == piece) { - thePuzzle[i][j] = 0; - } - } - } -} - -void -multMatrices(const GLfloat a[16], const GLfloat b[16], GLfloat r[16]) -{ - int i, j; - - for (i = 0; i < 4; i++) { - for (j = 0; j < 4; j++) { - r[i * 4 + j] = - a[i * 4 + 0] * b[0 * 4 + j] + - a[i * 4 + 1] * b[1 * 4 + j] + - a[i * 4 + 2] * b[2 * 4 + j] + - a[i * 4 + 3] * b[3 * 4 + j]; - } - } -} - -void -makeIdentity(GLfloat m[16]) -{ - m[0 + 4 * 0] = 1; - m[0 + 4 * 1] = 0; - m[0 + 4 * 2] = 0; - m[0 + 4 * 3] = 0; - m[1 + 4 * 0] = 0; - m[1 + 4 * 1] = 1; - m[1 + 4 * 2] = 0; - m[1 + 4 * 3] = 0; - m[2 + 4 * 0] = 0; - m[2 + 4 * 1] = 0; - m[2 + 4 * 2] = 1; - m[2 + 4 * 3] = 0; - m[3 + 4 * 0] = 0; - m[3 + 4 * 1] = 0; - m[3 + 4 * 2] = 0; - m[3 + 4 * 3] = 1; -} - -/* - ** inverse = invert(src) - */ -int -invertMatrix(const GLfloat src[16], GLfloat inverse[16]) -{ - int i, j, k, swap; - double t; - GLfloat temp[4][4]; - - for (i = 0; i < 4; i++) { - for (j = 0; j < 4; j++) { - temp[i][j] = src[i * 4 + j]; - } - } - makeIdentity(inverse); - - for (i = 0; i < 4; i++) { - /* - ** Look for largest element in column */ - swap = i; - for (j = i + 1; j < 4; j++) { - if (fabs(temp[j][i]) > fabs(temp[i][i])) { - swap = j; - } - } - - if (swap != i) { - /* - ** Swap rows. */ - for (k = 0; k < 4; k++) { - t = temp[i][k]; - temp[i][k] = temp[swap][k]; - temp[swap][k] = t; - - t = inverse[i * 4 + k]; - inverse[i * 4 + k] = inverse[swap * 4 + k]; - inverse[swap * 4 + k] = t; - } - } - if (temp[i][i] == 0) { - /* - ** No non-zero pivot. The matrix is singular, which - shouldn't ** happen. This means the user gave us a - bad matrix. */ - return 0; - } - t = temp[i][i]; - for (k = 0; k < 4; k++) { - temp[i][k] /= t; - inverse[i * 4 + k] /= t; - } - for (j = 0; j < 4; j++) { - if (j != i) { - t = temp[j][i]; - for (k = 0; k < 4; k++) { - temp[j][k] -= temp[i][k] * t; - inverse[j * 4 + k] -= inverse[i * 4 + k] * t; - } - } - } - } - return 1; -} - -/* - ** This is a screwball function. What it does is the following: - ** Given screen x and y coordinates, compute the corresponding object space - ** x and y coordinates given that the object space z is 0.9 + OFFSETZ. - ** Since the tops of (most) pieces are at z = 0.9 + OFFSETZ, we use that - ** number. - */ -int -computeCoords(int piece, int mousex, int mousey, - GLfloat * selx, GLfloat * sely) -{ - GLfloat modelMatrix[16]; - GLfloat projMatrix[16]; - GLfloat finalMatrix[16]; - GLfloat in[4]; - GLfloat a, b, c, d; - GLfloat top, bot; - GLfloat z; - GLfloat w; - GLfloat height; - - if (piece == 0) - return 0; - height = zsize[piece] - 0.1 + OFFSETZ; - - glGetFloatv(GL_PROJECTION_MATRIX, projMatrix); - glGetFloatv(GL_MODELVIEW_MATRIX, modelMatrix); - multMatrices(modelMatrix, projMatrix, finalMatrix); - if (!invertMatrix(finalMatrix, finalMatrix)) - return 0; - - in[0] = (2.0 * (mousex - viewport[0]) / viewport[2]) - 1; - in[1] = (2.0 * ((H - mousey) - viewport[1]) / viewport[3]) - 1; - - a = in[0] * finalMatrix[0 * 4 + 2] + - in[1] * finalMatrix[1 * 4 + 2] + - finalMatrix[3 * 4 + 2]; - b = finalMatrix[2 * 4 + 2]; - c = in[0] * finalMatrix[0 * 4 + 3] + - in[1] * finalMatrix[1 * 4 + 3] + - finalMatrix[3 * 4 + 3]; - d = finalMatrix[2 * 4 + 3]; - - /* - ** Ok, now we need to solve for z: ** (a + b z) / (c + d - - z) = height. ** ("height" is the height in object space we - - want to solve z for) ** ** ==> a + b z = height c + - height d z ** bz - height d z = height c - a ** z = - (height c - a) / (b - height d) */ - top = height * c - a; - bot = b - height * d; - if (bot == 0.0) - return 0; - - z = top / bot; - - /* - ** Ok, no problem. ** Now we solve for x and y. We know - that w = c + d z, so we compute it. */ - w = c + d * z; - - /* - ** Now for x and y: */ - *selx = (in[0] * finalMatrix[0 * 4 + 0] + - in[1] * finalMatrix[1 * 4 + 0] + - z * finalMatrix[2 * 4 + 0] + - finalMatrix[3 * 4 + 0]) / w - OFFSETX; - *sely = (in[0] * finalMatrix[0 * 4 + 1] + - in[1] * finalMatrix[1 * 4 + 1] + - z * finalMatrix[2 * 4 + 1] + - finalMatrix[3 * 4 + 1]) / w - OFFSETY; - return 1; -} - -static int selected; -static int selectx, selecty; -static float selstartx, selstarty; - -void -grabPiece(int piece, float selx, float sely) -{ - int hit; - - selectx = selx; - selecty = sely; - if (selectx < 0 || selecty < 0 || selectx >= WIDTH || selecty >= HEIGHT) { - return; - } - hit = thePuzzle[selecty][selectx]; - if (hit != piece) - return; - if (hit) { - movingPiece = hit; - while (selectx > 0 && thePuzzle[selecty][selectx - 1] == movingPiece) { - selectx--; - } - while (selecty > 0 && thePuzzle[selecty - 1][selectx] == movingPiece) { - selecty--; - } - move_x = selectx; - move_y = selecty; - selected = 1; - selstartx = selx; - selstarty = sely; - } else { - selected = 0; - } - changeState(); -} - -void -moveSelection(float selx, float sely) -{ - float deltax, deltay; - int dir; - Config newpieces; - - if (!selected) - return; - deltax = selx - selstartx; - deltay = sely - selstarty; - - if (fabs(deltax) > fabs(deltay)) { - deltay = 0; - if (deltax > 0) { - if (deltax > 1) - deltax = 1; - dir = 2; - } else { - if (deltax < -1) - deltax = -1; - dir = 0; - } - } else { - deltax = 0; - if (deltay > 0) { - if (deltay > 1) - deltay = 1; - dir = 3; - } else { - if (deltay < -1) - deltay = -1; - dir = 1; - } - } - if (canmove(thePuzzle, selectx, selecty, dir, newpieces)) { - move_x = deltax + selectx; - move_y = deltay + selecty; - if (deltax > 0.5) { - memcpy(thePuzzle, newpieces, HEIGHT * WIDTH); - selectx++; - selstartx++; - } else if (deltax < -0.5) { - memcpy(thePuzzle, newpieces, HEIGHT * WIDTH); - selectx--; - selstartx--; - } else if (deltay > 0.5) { - memcpy(thePuzzle, newpieces, HEIGHT * WIDTH); - selecty++; - selstarty++; - } else if (deltay < -0.5) { - memcpy(thePuzzle, newpieces, HEIGHT * WIDTH); - selecty--; - selstarty--; - } - } else { - if (deltay > 0 && thePuzzle[selecty][selectx] == 10 && - selectx == 1 && selecty == 3) { - /* Allow visual movement of solution piece outside of the - - box */ - move_x = selectx; - move_y = sely - selstarty + selecty; - } else { - move_x = selectx; - move_y = selecty; - } - } -} - -void -dropSelection(void) -{ - if (!selected) - return; - movingPiece = 0; - selected = 0; - changeState(); -} - -static int left_mouse, middle_mouse; -static int mousex, mousey; -static int solving; -static int spinning; -static float lastquat[4]; -static int sel_piece; - -static void -Reshape(int width, int height) -{ - - W = width; - H = height; - glViewport(0, 0, W, H); - glGetIntegerv(GL_VIEWPORT, viewport); -} - -void -toggleSolve(void) -{ - if (solving) { - freeSolutions(); - solving = 0; - glutChangeToMenuEntry(1, "Solving", 1); - glutSetWindowTitle("glpuzzle"); - movingPiece = 0; - } else { - glutChangeToMenuEntry(1, "Stop solving", 1); - glutSetWindowTitle("Solving..."); - if (solvePuzzle()) { - solving = 1; - } - } - changeState(); - glutPostRedisplay(); -} - -void reset(void) -{ - if (solving) { - freeSolutions(); - solving = 0; - glutChangeToMenuEntry(1, "Solving", 1); - movingPiece = 0; - changeState(); - } - glutSetWindowTitle("glpuzzle"); - memcpy(thePuzzle, startConfig, HEIGHT * WIDTH); - glutPostRedisplay(); -} - -void -keyboard(unsigned char c, int x, int y) -{ - int piece; - - switch (c) { - case 27: - exit(0); - break; - case 'D': - case 'd': - if (solving) { - freeSolutions(); - solving = 0; - glutChangeToMenuEntry(1, "Solving", 1); - glutSetWindowTitle("glpuzzle"); - movingPiece = 0; - changeState(); - } - piece = selectPiece(x, y); - if (piece) { - nukePiece(piece); - } - glutPostRedisplay(); - break; - case 'R': - case 'r': - reset(); - break; - case 'S': - case 's': - toggleSolve(); - break; - case 'b': - case 'B': - depth = 1 - depth; - if (depth) { - glEnable(GL_DEPTH_TEST); - } else { - glDisable(GL_DEPTH_TEST); - } - glutPostRedisplay(); - break; - default: - break; - } -} - -void -motion(int x, int y) -{ - float selx, sely; - - if (middle_mouse && !left_mouse) { - if (mousex != x || mousey != y) { - trackball(lastquat, - (2.0*mousex - W) / W, - (H - 2.0*mousey) / H, - (2.0*x - W) / W, - (H - 2.0*y) / H); - spinning = 1; - } else { - spinning = 0; - } - changeState(); - } else { - computeCoords(sel_piece, x, y, &selx, &sely); - moveSelection(selx, sely); - } - mousex = x; - mousey = y; - glutPostRedisplay(); -} - -void -mouse(int b, int s, int x, int y) -{ - float selx, sely; - - mousex = x; - mousey = y; - curX = x; - curY = y; - if (s == GLUT_DOWN) { - switch (b) { - case GLUT_LEFT_BUTTON: - if (solving) { - freeSolutions(); - solving = 0; - glutChangeToMenuEntry(1, "Solving", 1); - glutSetWindowTitle("glpuzzle"); - movingPiece = 0; - } - left_mouse = GL_TRUE; - sel_piece = selectPiece(mousex, mousey); - if (computeCoords(sel_piece, mousex, mousey, &selx, &sely)) { - grabPiece(sel_piece, selx, sely); - } - glutPostRedisplay(); - break; - case GLUT_MIDDLE_BUTTON: - middle_mouse = GL_TRUE; - glutPostRedisplay(); - break; - } - } else { - switch (b) { - case GLUT_LEFT_BUTTON: - left_mouse = GL_FALSE; - dropSelection(); - glutPostRedisplay(); - break; - case GLUT_MIDDLE_BUTTON: - middle_mouse = GL_FALSE; - glutPostRedisplay(); - break; - } - } - motion(x, y); -} - -void -animate(void) -{ - if (spinning) { - add_quats(lastquat, curquat, curquat); - } - glutPostRedisplay(); - if (solving) { - if (!continueSolving()) { - solving = 0; - glutChangeToMenuEntry(1, "Solving", 1); - glutSetWindowTitle("glpuzzle"); - } - } - if (!solving && !spinning && !visible) { - glutIdleFunc(NULL); - } -} - -void -changeState(void) -{ - if (visible) { - if (!solving && !spinning) { - glutIdleFunc(NULL); - } else { - glutIdleFunc(animate); - } - } else { - glutIdleFunc(NULL); - } -} - -void -init(void) -{ - static float lmodel_ambient[] = - {0.0, 0.0, 0.0, 0.0}; - static float lmodel_twoside[] = - {GL_FALSE}; - static float lmodel_local[] = - {GL_FALSE}; - static float light0_ambient[] = - {0.1, 0.1, 0.1, 1.0}; - static float light0_diffuse[] = - {1.0, 1.0, 1.0, 0.0}; - static float light0_position[] = - {0.8660254, 0.5, 1, 0}; - static float light0_specular[] = - {0.0, 0.0, 0.0, 0.0}; - static float bevel_mat_ambient[] = - {0.0, 0.0, 0.0, 1.0}; - static float bevel_mat_shininess[] = - {40.0}; - static float bevel_mat_specular[] = - {0.0, 0.0, 0.0, 0.0}; - static float bevel_mat_diffuse[] = - {1.0, 0.0, 0.0, 0.0}; - - glEnable(GL_CULL_FACE); - glCullFace(GL_BACK); - glEnable(GL_DEPTH_TEST); - glClearDepth(1.0); - - glClearColor(0.5, 0.5, 0.5, 0.0); - glLightfv(GL_LIGHT0, GL_AMBIENT, light0_ambient); - glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_diffuse); - glLightfv(GL_LIGHT0, GL_SPECULAR, light0_specular); - glLightfv(GL_LIGHT0, GL_POSITION, light0_position); - glEnable(GL_LIGHT0); - - glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, lmodel_local); - glLightModelfv(GL_LIGHT_MODEL_TWO_SIDE, lmodel_twoside); - glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); - glEnable(GL_LIGHTING); - - glMaterialfv(GL_FRONT, GL_AMBIENT, bevel_mat_ambient); - glMaterialfv(GL_FRONT, GL_SHININESS, bevel_mat_shininess); - glMaterialfv(GL_FRONT, GL_SPECULAR, bevel_mat_specular); - glMaterialfv(GL_FRONT, GL_DIFFUSE, bevel_mat_diffuse); - - glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE); - glEnable(GL_COLOR_MATERIAL); - glShadeModel(GL_FLAT); - - trackball(curquat, 0.0, 0.0, 0.0, 0.0); - srandom(time(NULL)); -} - -static void -Usage(void) -{ - printf("Usage: puzzle [-s]\n"); - printf(" -s: Run in single buffered mode\n"); - exit(-1); -} - -void -visibility(int v) -{ - if (v == GLUT_VISIBLE) { - visible = 1; - } else { - visible = 0; - } - changeState(); -} - -void -menu(int choice) -{ - switch(choice) { - case 1: - toggleSolve(); - break; - case 2: - reset(); - break; - case 3: - exit(0); - break; - } -} - -int -main(int argc, char **argv) -{ - long i; - - glutInit(&argc, argv); - for (i = 1; i < argc; i++) { - if (argv[i][0] == '-') { - switch (argv[i][1]) { - case 's': - doubleBuffer = 0; - break; - default: - Usage(); - } - } else { - Usage(); - } - } - - glutInitWindowSize(W, H); - if (doubleBuffer) { - glutInitDisplayMode(GLUT_DEPTH | GLUT_RGB | GLUT_DOUBLE | GLUT_MULTISAMPLE); - } else { - glutInitDisplayMode(GLUT_DEPTH | GLUT_RGB | GLUT_SINGLE | GLUT_MULTISAMPLE); - } - - glutCreateWindow("glpuzzle"); - - init(); - - glGetIntegerv(GL_VIEWPORT, viewport); - - printf("\n"); - printf("r Reset puzzle\n"); - printf("s Solve puzzle (may take a few seconds to compute)\n"); - printf("d Destroy a piece - makes the puzzle easier\n"); - printf("b Toggles the depth buffer on and off\n"); - printf("\n"); - printf("Left mouse moves pieces\n"); - printf("Middle mouse spins the puzzle\n"); - printf("Right mouse has menu\n"); - - glutReshapeFunc(Reshape); - glutDisplayFunc(redraw); - glutKeyboardFunc(keyboard); - glutMotionFunc(motion); - glutMouseFunc(mouse); - glutVisibilityFunc(visibility); - glutCreateMenu(menu); - glutAddMenuEntry("Solve", 1); - glutAddMenuEntry("Reset", 2); - glutAddMenuEntry("Quit", 3); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/examples/glpuzzle.dsp b/lib/glut-3.7.6/progs/examples/glpuzzle.dsp deleted file mode 100644 index a9c2a3c17..000000000 --- a/lib/glut-3.7.6/progs/examples/glpuzzle.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="glpuzzle" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=glpuzzle - 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 "glpuzzle.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 "glpuzzle.mak" CFG="glpuzzle - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "glpuzzle - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "glpuzzle - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "glpuzzle - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "glpuzzle - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "glpuzzle - Win32 Release" -# Name "glpuzzle - Win32 Debug" -# Begin Source File - -SOURCE=.\glpuzzle.c -# End Source File -# Begin Source File - -SOURCE=.\trackball.c -# End Source File -# Begin Source File - -SOURCE=.\trackball.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/glutdino.c b/lib/glut-3.7.6/progs/examples/glutdino.c deleted file mode 100644 index f324750cd..000000000 --- a/lib/glut-3.7.6/progs/examples/glutdino.c +++ /dev/null @@ -1,244 +0,0 @@ - -/* 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 -#include -#include -#include /* for cos(), sin(), and sqrt() */ -#include - -typedef enum { - RESERVED, BODY_SIDE, BODY_EDGE, BODY_WHOLE, ARM_SIDE, ARM_EDGE, ARM_WHOLE, - LEG_SIDE, LEG_EDGE, LEG_WHOLE, EYE_SIDE, EYE_EDGE, EYE_WHOLE, DINOSAUR -} displayLists; - -GLfloat angle = -150; /* in degrees */ -int moving, begin; -int W = 300, H = 300; -GLdouble bodyWidth = 2.0; -int newModel = 1; -/* *INDENT-OFF* */ -GLfloat body[][2] = { {0, 3}, {1, 1}, {5, 1}, {8, 4}, {10, 4}, {11, 5}, - {11, 11.5}, {13, 12}, {13, 13}, {10, 13.5}, {13, 14}, {13, 15}, {11, 16}, - {8, 16}, {7, 15}, {7, 13}, {8, 12}, {7, 11}, {6, 6}, {4, 3}, {3, 2}, - {1, 2} }; -GLfloat arm[][2] = { {8, 10}, {9, 9}, {10, 9}, {13, 8}, {14, 9}, {16, 9}, - {15, 9.5}, {16, 10}, {15, 10}, {15.5, 11}, {14.5, 10}, {14, 11}, {14, 10}, - {13, 9}, {11, 11}, {9, 11} }; -GLfloat leg[][2] = { {8, 6}, {8, 4}, {9, 3}, {9, 2}, {8, 1}, {8, 0.5}, {9, 0}, - {12, 0}, {10, 1}, {10, 2}, {12, 4}, {11, 6}, {10, 7}, {9, 7} }; -GLfloat eye[][2] = { {8.75, 15}, {9, 14.7}, {9.6, 14.7}, {10.1, 15}, - {9.6, 15.25}, {9, 15.25} }; -GLfloat lightZeroPosition[] = {10.0, 4.0, 10.0, 1.0}; -GLfloat lightZeroColor[] = {0.8, 1.0, 0.8, 1.0}; /* green-tinted */ -GLfloat lightOnePosition[] = {-1.0, -2.0, 1.0, 0.0}; -GLfloat lightOneColor[] = {0.6, 0.3, 0.2, 1.0}; /* red-tinted */ -GLfloat skinColor[] = {0.1, 1.0, 0.1, 1.0}, eyeColor[] = {1.0, 0.2, 0.2, 1.0}; -/* *INDENT-ON* */ - -void -extrudeSolidFromPolygon(GLfloat data[][2], unsigned int dataSize, - GLdouble thickness, GLuint side, GLuint edge, GLuint whole) -{ - static GLUtriangulatorObj *tobj = NULL; - GLdouble vertex[3], dx, dy, len; - int i; - int count = dataSize / (int) (2 * sizeof(GLfloat)); - - if (tobj == NULL) { - tobj = gluNewTess(); /* create and initialize a GLU - polygon tesselation object */ - gluTessCallback(tobj, GLU_BEGIN, glBegin); - gluTessCallback(tobj, GLU_VERTEX, glVertex2fv); /* semi-tricky */ - gluTessCallback(tobj, GLU_END, glEnd); - } - glNewList(side, GL_COMPILE); - glShadeModel(GL_SMOOTH); /* smooth minimizes seeing - tessellation */ - gluBeginPolygon(tobj); - for (i = 0; i < count; i++) { - vertex[0] = data[i][0]; - vertex[1] = data[i][1]; - vertex[2] = 0; - gluTessVertex(tobj, vertex, data[i]); - } - gluEndPolygon(tobj); - glEndList(); - glNewList(edge, GL_COMPILE); - glShadeModel(GL_FLAT); /* flat shade keeps angular hands - from being "smoothed" */ - glBegin(GL_QUAD_STRIP); - for (i = 0; i <= count; i++) { - /* mod function handles closing the edge */ - glVertex3f(data[i % count][0], data[i % count][1], 0.0); - glVertex3f(data[i % count][0], data[i % count][1], thickness); - /* Calculate a unit normal by dividing by Euclidean - distance. We * could be lazy and use - glEnable(GL_NORMALIZE) so we could pass in * arbitrary - normals for a very slight performance hit. */ - dx = data[(i + 1) % count][1] - data[i % count][1]; - dy = data[i % count][0] - data[(i + 1) % count][0]; - len = sqrt(dx * dx + dy * dy); - glNormal3f(dx / len, dy / len, 0.0); - } - glEnd(); - glEndList(); - glNewList(whole, GL_COMPILE); - glFrontFace(GL_CW); - glCallList(edge); - glNormal3f(0.0, 0.0, -1.0); /* constant normal for side */ - glCallList(side); - glPushMatrix(); - glTranslatef(0.0, 0.0, thickness); - glFrontFace(GL_CCW); - glNormal3f(0.0, 0.0, 1.0); /* opposite normal for other side */ - glCallList(side); - glPopMatrix(); - glEndList(); -} - -void -makeDinosaur(void) -{ - GLfloat bodyWidth = 3.0; - - extrudeSolidFromPolygon(body, sizeof(body), bodyWidth, - BODY_SIDE, BODY_EDGE, BODY_WHOLE); - extrudeSolidFromPolygon(arm, sizeof(arm), bodyWidth / 4, - ARM_SIDE, ARM_EDGE, ARM_WHOLE); - extrudeSolidFromPolygon(leg, sizeof(leg), bodyWidth / 2, - LEG_SIDE, LEG_EDGE, LEG_WHOLE); - extrudeSolidFromPolygon(eye, sizeof(eye), bodyWidth + 0.2, - EYE_SIDE, EYE_EDGE, EYE_WHOLE); - glNewList(DINOSAUR, GL_COMPILE); - glMaterialfv(GL_FRONT, GL_DIFFUSE, skinColor); - glCallList(BODY_WHOLE); - glPushMatrix(); - glTranslatef(0.0, 0.0, bodyWidth); - glCallList(ARM_WHOLE); - glCallList(LEG_WHOLE); - glTranslatef(0.0, 0.0, -bodyWidth - bodyWidth / 4); - glCallList(ARM_WHOLE); - glTranslatef(0.0, 0.0, -bodyWidth / 4); - glCallList(LEG_WHOLE); - glTranslatef(0.0, 0.0, bodyWidth / 2 - 0.1); - glMaterialfv(GL_FRONT, GL_DIFFUSE, eyeColor); - glCallList(EYE_WHOLE); - glPopMatrix(); - glEndList(); -} - -void -recalcModelView(void) -{ - glPopMatrix(); - glPushMatrix(); - glRotatef(angle, 0.0, 1.0, 0.0); - glTranslatef(-8, -8, -bodyWidth / 2); - newModel = 0; -} - -void -redraw(void) -{ - if (newModel) - recalcModelView(); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glCallList(DINOSAUR); - glutSwapBuffers(); -} - -/* ARGSUSED2 */ -void -mouse(int button, int state, int x, int y) -{ - if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) { - moving = 1; - begin = x; - } - if (button == GLUT_LEFT_BUTTON && state == GLUT_UP) { - moving = 0; - } -} - -/* ARGSUSED1 */ -void -motion(int x, int y) -{ - if (moving) { - angle = angle + (x - begin); - begin = x; - newModel = 1; - glutPostRedisplay(); - } -} - -GLboolean lightZeroSwitch = GL_TRUE, lightOneSwitch = GL_TRUE; - -void -controlLights(int value) -{ - switch (value) { - case 1: - lightZeroSwitch = !lightZeroSwitch; - if (lightZeroSwitch) { - glEnable(GL_LIGHT0); - } else { - glDisable(GL_LIGHT0); - } - break; - case 2: - lightOneSwitch = !lightOneSwitch; - if (lightOneSwitch) { - glEnable(GL_LIGHT1); - } else { - glDisable(GL_LIGHT1); - } - break; - } - glutPostRedisplay(); -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); - glutCreateWindow("glutdino"); - glutDisplayFunc(redraw); - glutMouseFunc(mouse); - glutMotionFunc(motion); - glutCreateMenu(controlLights); - glutAddMenuEntry("Toggle right light", 1); - glutAddMenuEntry("Toggle left light", 2); - glutAttachMenu(GLUT_RIGHT_BUTTON); - makeDinosaur(); - glEnable(GL_CULL_FACE); - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - glMatrixMode(GL_PROJECTION); - gluPerspective( /* field of view in degree */ 40.0, - /* aspect ratio */ 1.0, - /* Z near */ 1.0, /* Z far */ 40.0); - glMatrixMode(GL_MODELVIEW); - gluLookAt(0.0, 0.0, 30.0, /* eye is at (0,0,30) */ - 0.0, 0.0, 0.0, /* center is at (0,0,0) */ - 0.0, 1.0, 0.); /* up is in postivie Y direction */ - glPushMatrix(); /* dummy push so we can pop on model - recalc */ - glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, 1); - glLightfv(GL_LIGHT0, GL_POSITION, lightZeroPosition); - glLightfv(GL_LIGHT0, GL_DIFFUSE, lightZeroColor); - glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 0.1); - glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 0.05); - glLightfv(GL_LIGHT1, GL_POSITION, lightOnePosition); - glLightfv(GL_LIGHT1, GL_DIFFUSE, lightOneColor); - glEnable(GL_LIGHT0); - glEnable(GL_LIGHT1); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/examples/glutdino.dsp b/lib/glut-3.7.6/progs/examples/glutdino.dsp deleted file mode 100644 index 69b1981dd..000000000 --- a/lib/glut-3.7.6/progs/examples/glutdino.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="glutdino" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=glutdino - 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 "glutdino.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 "glutdino.mak" CFG="glutdino - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "glutdino - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "glutdino - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "glutdino - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "glutdino - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "glutdino - Win32 Release" -# Name "glutdino - Win32 Debug" -# Begin Source File - -SOURCE=.\glutdino.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/glutplane.c b/lib/glut-3.7.6/progs/examples/glutplane.c deleted file mode 100644 index 4b299507e..000000000 --- a/lib/glut-3.7.6/progs/examples/glutplane.c +++ /dev/null @@ -1,270 +0,0 @@ - -/* 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 -#include -#ifndef _WIN32 -#include -#else -#include /* for getpid */ -#define random rand -#define srandom srand -#endif -#include -#include - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif -#ifndef M_PI_2 -#define M_PI_2 1.57079632679489661923 -#endif - -GLboolean moving = GL_FALSE; - -#define MAX_PLANES 15 - -struct { - float speed; /* zero speed means not flying */ - GLfloat red, green, blue; - float theta; - float x, y, z, angle; -} planes[MAX_PLANES]; - -#define v3f glVertex3f /* v3f was the short IRIS GL name for - glVertex3f */ - -void -draw(void) -{ - GLfloat red, green, blue; - int i; - - glClear(GL_DEPTH_BUFFER_BIT); - /* paint black to blue smooth shaded polygon for background */ - glDisable(GL_DEPTH_TEST); - glShadeModel(GL_SMOOTH); - glBegin(GL_POLYGON); - glColor3f(0.0, 0.0, 0.0); - v3f(-20, 20, -19); - v3f(20, 20, -19); - glColor3f(0.0, 0.0, 1.0); - v3f(20, -20, -19); - v3f(-20, -20, -19); - glEnd(); - /* paint planes */ - glEnable(GL_DEPTH_TEST); - glShadeModel(GL_FLAT); - for (i = 0; i < MAX_PLANES; i++) - if (planes[i].speed != 0.0) { - glPushMatrix(); - glTranslatef(planes[i].x, planes[i].y, planes[i].z); - glRotatef(290.0, 1.0, 0.0, 0.0); - glRotatef(planes[i].angle, 0.0, 0.0, 1.0); - glScalef(1.0 / 3.0, 1.0 / 4.0, 1.0 / 4.0); - glTranslatef(0.0, -4.0, -1.5); - glBegin(GL_TRIANGLE_STRIP); - /* left wing */ - v3f(-7.0, 0.0, 2.0); - v3f(-1.0, 0.0, 3.0); - glColor3f(red = planes[i].red, green = planes[i].green, - blue = planes[i].blue); - v3f(-1.0, 7.0, 3.0); - /* left side */ - glColor3f(0.6 * red, 0.6 * green, 0.6 * blue); - v3f(0.0, 0.0, 0.0); - v3f(0.0, 8.0, 0.0); - /* right side */ - v3f(1.0, 0.0, 3.0); - v3f(1.0, 7.0, 3.0); - /* final tip of right wing */ - glColor3f(red, green, blue); - v3f(7.0, 0.0, 2.0); - glEnd(); - glPopMatrix(); - } - glutSwapBuffers(); -} - -void -tick_per_plane(int i) -{ - float theta = planes[i].theta += planes[i].speed; - planes[i].z = -9 + 4 * cos(theta); - planes[i].x = 4 * sin(2 * theta); - planes[i].y = sin(theta / 3.4) * 3; - planes[i].angle = ((atan(2.0) + M_PI_2) * sin(theta) - M_PI_2) * 180 / M_PI; - if (planes[i].speed < 0.0) - planes[i].angle += 180; -} - -void -add_plane(void) -{ - int i; - - for (i = 0; i < MAX_PLANES; i++) - if (planes[i].speed == 0) { - -#define SET_COLOR(r,g,b) \ - planes[i].red=r; planes[i].green=g; planes[i].blue=b; - - switch (random() % 6) { - case 0: - SET_COLOR(1.0, 0.0, 0.0); /* red */ - break; - case 1: - SET_COLOR(1.0, 1.0, 1.0); /* white */ - break; - case 2: - SET_COLOR(0.0, 1.0, 0.0); /* green */ - break; - case 3: - SET_COLOR(1.0, 0.0, 1.0); /* magenta */ - break; - case 4: - SET_COLOR(1.0, 1.0, 0.0); /* yellow */ - break; - case 5: - SET_COLOR(0.0, 1.0, 1.0); /* cyan */ - break; - } - planes[i].speed = ((float) (random() % 20)) * 0.001 + 0.02; - if (random() & 0x1) - planes[i].speed *= -1; - planes[i].theta = ((float) (random() % 257)) * 0.1111; - tick_per_plane(i); - if (!moving) - glutPostRedisplay(); - return; - } -} - -void -remove_plane(void) -{ - int i; - - for (i = MAX_PLANES - 1; i >= 0; i--) - if (planes[i].speed != 0) { - planes[i].speed = 0; - if (!moving) - glutPostRedisplay(); - return; - } -} - -void -tick(void) -{ - int i; - - for (i = 0; i < MAX_PLANES; i++) - if (planes[i].speed != 0.0) - tick_per_plane(i); -} - -void -animate(void) -{ - tick(); - glutPostRedisplay(); -} - -void -visible(int state) -{ - if (state == GLUT_VISIBLE) { - if (moving) - glutIdleFunc(animate); - } else { - if (moving) - glutIdleFunc(NULL); - } -} - -/* ARGSUSED1 */ -void -keyboard(unsigned char ch, int x, int y) -{ - switch (ch) { - case ' ': - if (!moving) { - tick(); - glutPostRedisplay(); - } - break; - case 27: /* ESC */ - exit(0); - break; - } -} - -#define ADD_PLANE 1 -#define REMOVE_PLANE 2 -#define MOTION_ON 3 -#define MOTION_OFF 4 -#define QUIT 5 - -void -menu(int item) -{ - switch (item) { - case ADD_PLANE: - add_plane(); - break; - case REMOVE_PLANE: - remove_plane(); - break; - case MOTION_ON: - moving = GL_TRUE; - glutChangeToMenuEntry(3, "Motion off", MOTION_OFF); - glutIdleFunc(animate); - break; - case MOTION_OFF: - moving = GL_FALSE; - glutChangeToMenuEntry(3, "Motion", MOTION_ON); - glutIdleFunc(NULL); - break; - case QUIT: - exit(0); - break; - } -} - -int -main(int argc, char *argv[]) -{ - glutInit(&argc, argv); - /* use multisampling if available */ - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH | GLUT_MULTISAMPLE); - glutCreateWindow("glutplane"); - glutDisplayFunc(draw); - glutKeyboardFunc(keyboard); - glutVisibilityFunc(visible); - glutCreateMenu(menu); - glutAddMenuEntry("Add plane", ADD_PLANE); - glutAddMenuEntry("Remove plane", REMOVE_PLANE); - glutAddMenuEntry("Motion", MOTION_ON); - glutAddMenuEntry("Quit", QUIT); - glutAttachMenu(GLUT_RIGHT_BUTTON); - /* setup OpenGL state */ - glClearDepth(1.0); - glClearColor(0.0, 0.0, 0.0, 0.0); - glMatrixMode(GL_PROJECTION); - glFrustum(-1.0, 1.0, -1.0, 1.0, 1.0, 20); - glMatrixMode(GL_MODELVIEW); - /* add three initial random planes */ - srandom(getpid()); - add_plane(); - add_plane(); - add_plane(); - /* start event processing */ - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/examples/glutplane.dsp b/lib/glut-3.7.6/progs/examples/glutplane.dsp deleted file mode 100644 index f6d2e1318..000000000 --- a/lib/glut-3.7.6/progs/examples/glutplane.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="glutplane" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=glutplane - 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 "glutplane.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 "glutplane.mak" CFG="glutplane - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "glutplane - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "glutplane - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "glutplane - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "glutplane - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "glutplane - Win32 Release" -# Name "glutplane - Win32 Debug" -# Begin Source File - -SOURCE=.\glutplane.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/gouraudtriangle.ps b/lib/glut-3.7.6/progs/examples/gouraudtriangle.ps deleted file mode 100644 index 332162df5..000000000 --- a/lib/glut-3.7.6/progs/examples/gouraudtriangle.ps +++ /dev/null @@ -1,109 +0,0 @@ -%!PS -% this code is free -% Frederic Delhoume (delhoume@ilog.fr) - -/bd{bind def}bind def - -% use small threshold to have a smooth shading -/threshold .1 def - -/triangle % [x1 x2 x3 y1 y2 y3] [i1 i2 i3] -{ - aload pop setrgbcolor - aload pop - 5 3 roll % x1 y1 y2 y3 x2 x3 - 4 2 roll % x1 y1 x2 x3 y2 y3 - 3 2 roll % x1 y1 x2 y2 y3 x3 - exch moveto lineto lineto closepath fill -} bd - -/computediff1 % i31 i21 i11 -> true/false -{ - 2 copy sub abs threshold ge % |i21-i11| > threshold - {pop pop pop true} - { - exch 2 index sub abs threshold ge % |i21-i31| > threshold - { pop pop true} - { - sub abs threshold ge % |i11-i31| > threshold - } ifelse - } ifelse -} bd - -/computediff3 % [i11 i12 i13] [i21 i22 i23] [i31 i32 i33] -> true/false -{ - 3 copy 0 get 3 1 roll 0 get 3 1 roll 0 get computediff1 - {true} - { - 3 copy 1 get 3 1 roll 1 get 3 1 roll 1 get computediff1 - {true} - { - 3 copy 2 get 3 1 roll 2 get 3 1 roll 2 get computediff1 - } ifelse - } ifelse -} bd - -/middlecolor % [ar ag ab] [br bg bb] -> cr cg cb -{ - aload pop 4 -1 roll aload pop - 4 -1 roll add 2 div 5 1 roll 3 -1 roll add 2 div 3 1 roll - add 2 div 3 1 roll exch 3 array astore -} bd - -/gouraudtriangle % [x1 x2 x3 y1 y2 y3] [i11 i12 i13] [i21 i22 i23] [i31 i32 i33] -{ - computediff3 - { - % [x1 x2 x3 y1 y2 y3] [i11 i12 i13] [i21 i22 i23] [i31 i32 i33] - 4 -1 roll % [i11 i12 i13] [i21 i22 i23] [i31 i32 i33] [x1 x2 x3 y1 y2 y3] - % first is x2x3y2y3 - aload 7 1 roll - 6 -1 roll pop 3 -1 roll pop - add 2 div 3 1 roll add 2 div exch % [x1 x2 x3 y1 y2 y3] mx23 my23 - % second is x1x3y1y3 - 3 -1 roll aload 7 1 roll exch pop 4 -1 roll pop - add 2 div 3 1 roll add 2 div exch - % third is x1x2y1y2 - 3 -1 roll aload 7 1 roll pop 3 -1 roll pop - add 2 div 3 1 roll add 2 div exch - 7 3 roll % [x1 x2 x3 y1 y2 y3] ax ay bx by cx cy - 10 -3 roll dup 3 index middlecolor % 1-3 - 4 1 roll 2 copy middlecolor % 2-3 - 4 1 roll 3 copy pop middlecolor 4 1 roll % 1-2 - 13 -1 roll aload pop - % ax ay bx by cx cy cc cb ca cx1 cx2 cx3 x1 x2 x3 y1 y2 y3 - % now it's time to build the triangles - % first is ax1c - 17 index 6 index 15 index 19 index 6 index 17 index 6 array astore - 10 index 10 index 14 index gouraudtriangle - % second is ax2b - 17 index 5 index 17 index 19 index 5 index 19 index 6 array astore - 10 index 9 index 13 index gouraudtriangle - % third is cbx3 - 13 index 16 index 5 index 15 index 18 index 5 index 6 array astore - 12 index 12 index 9 index gouraudtriangle - % fourth is abc - 17 index 16 index 15 index 19 index 18 index 17 index 6 array astore - 10 index 12 index 14 index gouraudtriangle - 18 {pop} repeat - } - { - aload pop 5 3 roll aload pop 7 3 roll aload pop 9 3 roll - 4 index 6 index 4 index add add 3 div - 10 1 roll 7 index 5 index 3 index add add 3 div - 10 1 roll 6 index 4 index 2 index add add 3 div - 10 1 roll 9 {pop} repeat - 3 array astore triangle - } ifelse -} bd - -%% here is an nice example -[200 200 300 500 350 300] [1 1 0] [0 1 0] [0 1 1] gouraudtriangle -[200 300 300 500 300 425] [1 1 0] [0 1 1] [1 1 1] gouraudtriangle - -[300 400 400 300 350 500] [0 1 1] [0 0 1] [1 0 1] gouraudtriangle -[300 400 300 300 500 425] [0 1 1] [1 0 1] [1 1 1] gouraudtriangle - -[300 300 400 550 425 500] [1 0 0] [1 1 1] [1 0 1] gouraudtriangle -[200 300 300 500 425 550] [1 1 0] [1 1 1] [1 0 0] gouraudtriangle -showpage diff --git a/lib/glut-3.7.6/progs/examples/halomagic.c b/lib/glut-3.7.6/progs/examples/halomagic.c deleted file mode 100644 index e1597e1ce..000000000 --- a/lib/glut-3.7.6/progs/examples/halomagic.c +++ /dev/null @@ -1,1094 +0,0 @@ - -/* 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. */ - -/* dinoshade.c with an added "magic halo" effect when you hit the - space bar. You can use an overlaid or blended halo (blending is - slower). */ - -/* Example for PC game developers to show how to *combine* texturing, - reflections, and projected shadows all in real-time with OpenGL. - Robust reflections use stenciling. Robust projected shadows - use both stenciling and polygon offset. PC game programmers - should realize that neither stenciling nor polygon offset are - supported by Direct3D, so these real-time rendering algorithms - are only really viable with OpenGL. - - The program has modes for disabling the stenciling and polygon - offset uses. It is worth running this example with these features - toggled off so you can see the sort of artifacts that result. - - Notice that the floor texturing, reflections, and shadowing - all co-exist properly. */ - -/* When you run this program: Left mouse button controls the - view. Middle mouse button controls light position (left & - right rotates light around dino; up & down moves light - position up and down). Right mouse button pops up menu. */ - -/* Check out the comments in the "redraw" routine to see how the - reflection blending and surface stenciling is done. You can - also see in "redraw" how the projected shadows are rendered, - including the use of stenciling and polygon offset. */ - -/* This program is derived from glutdino.c */ - -/* Compile: cc -o halomagic halomagic.c -lglut -lGLU -lGL -lXmu -lXext -lX11 -lm */ - -#include -#include -#include -#include /* for cos(), sin(), and sqrt() */ -#include /* OpenGL Utility Toolkit header */ - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -/* Variable controlling various rendering modes. */ -static int stencilReflection = 1, stencilShadow = 1, offsetShadow = 1; -static int renderShadow = 0, renderDinosaur = 1, renderReflection = 0; -static int linearFiltering = 0, useMipmaps = 0, useTexture = 0; -static int reportSpeed = 0; -static int animation = 0; -static GLboolean lightSwitch = GL_TRUE; -static int directionalLight = 1; -static int forceExtension = 0; -static int haloMagic = 0, blendedHalo = 0; -static GLfloat haloScale = 1.0, haloTime = 0.0; - -/* Time varying or user-controled variables. */ -static float jump = 0.0; -static float lightAngle = 0.0, lightHeight = 20; -GLfloat angle = -150; /* in degrees */ -GLfloat angle2 = 30; /* in degrees */ - -int moving, startx, starty; -int lightMoving = 0, lightStartX, lightStartY; - -enum { - MISSING, EXTENSION, ONE_DOT_ONE -}; -int polygonOffsetVersion; - -static GLdouble bodyWidth = 3.0; -/* *INDENT-OFF* */ -static GLfloat body[][2] = { {0, 3}, {1, 1}, {5, 1}, {8, 4}, {10, 4}, {11, 5}, - {11, 11.5}, {13, 12}, {13, 13}, {10, 13.5}, {13, 14}, {13, 15}, {11, 16}, - {8, 16}, {7, 15}, {7, 13}, {8, 12}, {7, 11}, {6, 6}, {4, 3}, {3, 2}, - {1, 2} }; -static GLfloat arm[][2] = { {8, 10}, {9, 9}, {10, 9}, {13, 8}, {14, 9}, {16, 9}, - {15, 9.5}, {16, 10}, {15, 10}, {15.5, 11}, {14.5, 10}, {14, 11}, {14, 10}, - {13, 9}, {11, 11}, {9, 11} }; -static GLfloat leg[][2] = { {8, 6}, {8, 4}, {9, 3}, {9, 2}, {8, 1}, {8, 0.5}, {9, 0}, - {12, 0}, {10, 1}, {10, 2}, {12, 4}, {11, 6}, {10, 7}, {9, 7} }; -static GLfloat eye[][2] = { {8.75, 15}, {9, 14.7}, {9.6, 14.7}, {10.1, 15}, - {9.6, 15.25}, {9, 15.25} }; -static GLfloat lightPosition[4]; -static GLfloat lightColor[] = {0.8, 1.0, 0.8, 1.0}; /* green-tinted */ -static GLfloat skinColor[] = {0.1, 1.0, 0.1, 1.0}, eyeColor[] = {1.0, 0.2, 0.2, 1.0}; -/* *INDENT-ON* */ - -/* Nice floor texture tiling pattern. */ -static char *circles[] = { - "....xxxx........", - "..xxxxxxxx......", - ".xxxxxxxxxx.....", - ".xxx....xxx.....", - "xxx......xxx....", - "xxx......xxx....", - "xxx......xxx....", - "xxx......xxx....", - ".xxx....xxx.....", - ".xxxxxxxxxx.....", - "..xxxxxxxx......", - "....xxxx........", - "................", - "................", - "................", - "................", -}; - -static void -makeFloorTexture(void) -{ - GLubyte floorTexture[16][16][3]; - GLubyte *loc; - int s, t; - - /* Setup RGB image for the texture. */ - loc = (GLubyte*) floorTexture; - for (t = 0; t < 16; t++) { - for (s = 0; s < 16; s++) { - if (circles[t][s] == 'x') { - /* Nice blue. */ - loc[0] = 0x1f; - loc[1] = 0x1f; - loc[2] = 0x8f; - } else { - /* Light gray. */ - loc[0] = 0xca; - loc[1] = 0xca; - loc[2] = 0xca; - } - loc += 3; - } - } - - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - - if (useMipmaps) { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, - GL_LINEAR_MIPMAP_LINEAR); - gluBuild2DMipmaps(GL_TEXTURE_2D, 3, 16, 16, - GL_RGB, GL_UNSIGNED_BYTE, floorTexture); - } else { - if (linearFiltering) { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - } else { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - } - glTexImage2D(GL_TEXTURE_2D, 0, 3, 16, 16, 0, - GL_RGB, GL_UNSIGNED_BYTE, floorTexture); - } -} - -enum { - X, Y, Z, W -}; -enum { - A, B, C, D -}; - -/* Create a matrix that will project the desired shadow. */ -void -shadowMatrix(GLfloat shadowMat[4][4], - GLfloat groundplane[4], - GLfloat lightpos[4]) -{ - GLfloat dot; - - /* Find dot product between light position vector and ground plane normal. */ - dot = groundplane[X] * lightpos[X] + - groundplane[Y] * lightpos[Y] + - groundplane[Z] * lightpos[Z] + - groundplane[W] * lightpos[W]; - - shadowMat[0][0] = dot - lightpos[X] * groundplane[X]; - shadowMat[1][0] = 0.f - lightpos[X] * groundplane[Y]; - shadowMat[2][0] = 0.f - lightpos[X] * groundplane[Z]; - shadowMat[3][0] = 0.f - lightpos[X] * groundplane[W]; - - shadowMat[X][1] = 0.f - lightpos[Y] * groundplane[X]; - shadowMat[1][1] = dot - lightpos[Y] * groundplane[Y]; - shadowMat[2][1] = 0.f - lightpos[Y] * groundplane[Z]; - shadowMat[3][1] = 0.f - lightpos[Y] * groundplane[W]; - - shadowMat[X][2] = 0.f - lightpos[Z] * groundplane[X]; - shadowMat[1][2] = 0.f - lightpos[Z] * groundplane[Y]; - shadowMat[2][2] = dot - lightpos[Z] * groundplane[Z]; - shadowMat[3][2] = 0.f - lightpos[Z] * groundplane[W]; - - shadowMat[X][3] = 0.f - lightpos[W] * groundplane[X]; - shadowMat[1][3] = 0.f - lightpos[W] * groundplane[Y]; - shadowMat[2][3] = 0.f - lightpos[W] * groundplane[Z]; - shadowMat[3][3] = dot - lightpos[W] * groundplane[W]; - -} - -/* Find the plane equation given 3 points. */ -void -findPlane(GLfloat plane[4], - GLfloat v0[3], GLfloat v1[3], GLfloat v2[3]) -{ - GLfloat vec0[3], vec1[3]; - - /* Need 2 vectors to find cross product. */ - vec0[X] = v1[X] - v0[X]; - vec0[Y] = v1[Y] - v0[Y]; - vec0[Z] = v1[Z] - v0[Z]; - - vec1[X] = v2[X] - v0[X]; - vec1[Y] = v2[Y] - v0[Y]; - vec1[Z] = v2[Z] - v0[Z]; - - /* find cross product to get A, B, and C of plane equation */ - plane[A] = vec0[Y] * vec1[Z] - vec0[Z] * vec1[Y]; - plane[B] = -(vec0[X] * vec1[Z] - vec0[Z] * vec1[X]); - plane[C] = vec0[X] * vec1[Y] - vec0[Y] * vec1[X]; - - plane[D] = -(plane[A] * v0[X] + plane[B] * v0[Y] + plane[C] * v0[Z]); -} - -void -extrudeSolidFromPolygon(GLfloat data[][2], unsigned int dataSize, - GLdouble thickness, GLuint side, GLuint edge, GLuint whole) -{ - static GLUtriangulatorObj *tobj = NULL; - GLdouble vertex[3], dx, dy, len; - int i; - int count = dataSize / (int) (2 * sizeof(GLfloat)); - - if (tobj == NULL) { - tobj = gluNewTess(); /* create and initialize a GLU - polygon tesselation object */ - gluTessCallback(tobj, GLU_BEGIN, glBegin); - gluTessCallback(tobj, GLU_VERTEX, glVertex2fv); /* semi-tricky */ - gluTessCallback(tobj, GLU_END, glEnd); - } - glNewList(side, GL_COMPILE); - glShadeModel(GL_SMOOTH); /* smooth minimizes seeing - tessellation */ - gluBeginPolygon(tobj); - for (i = 0; i < count; i++) { - vertex[0] = data[i][0]; - vertex[1] = data[i][1]; - vertex[2] = 0; - gluTessVertex(tobj, vertex, data[i]); - } - gluEndPolygon(tobj); - glEndList(); - glNewList(edge, GL_COMPILE); - glShadeModel(GL_FLAT); /* flat shade keeps angular hands - from being "smoothed" */ - glBegin(GL_QUAD_STRIP); - for (i = 0; i <= count; i++) { - /* mod function handles closing the edge */ - glVertex3f(data[i % count][0], data[i % count][1], 0.0); - glVertex3f(data[i % count][0], data[i % count][1], thickness); - /* Calculate a unit normal by dividing by Euclidean - distance. We * could be lazy and use - glEnable(GL_NORMALIZE) so we could pass in * arbitrary - normals for a very slight performance hit. */ - dx = data[(i + 1) % count][1] - data[i % count][1]; - dy = data[i % count][0] - data[(i + 1) % count][0]; - len = sqrt(dx * dx + dy * dy); - glNormal3f(dx / len, dy / len, 0.0); - } - glEnd(); - glEndList(); - glNewList(whole, GL_COMPILE); - glFrontFace(GL_CW); - glCallList(edge); - glNormal3f(0.0, 0.0, -1.0); /* constant normal for side */ - glCallList(side); - glPushMatrix(); - glTranslatef(0.0, 0.0, thickness); - glFrontFace(GL_CCW); - glNormal3f(0.0, 0.0, 1.0); /* opposite normal for other side */ - glCallList(side); - glPopMatrix(); - glEndList(); -} - -/* Enumerants for refering to display lists. */ -typedef enum { - RESERVED, BODY_SIDE, BODY_EDGE, BODY_WHOLE, ARM_SIDE, ARM_EDGE, ARM_WHOLE, - LEG_SIDE, LEG_EDGE, LEG_WHOLE, EYE_SIDE, EYE_EDGE, EYE_WHOLE -} displayLists; - -static void -makeDinosaur(void) -{ - extrudeSolidFromPolygon(body, sizeof(body), bodyWidth, - BODY_SIDE, BODY_EDGE, BODY_WHOLE); - extrudeSolidFromPolygon(arm, sizeof(arm), bodyWidth / 4, - ARM_SIDE, ARM_EDGE, ARM_WHOLE); - extrudeSolidFromPolygon(leg, sizeof(leg), bodyWidth / 2, - LEG_SIDE, LEG_EDGE, LEG_WHOLE); - extrudeSolidFromPolygon(eye, sizeof(eye), bodyWidth + 0.2, - EYE_SIDE, EYE_EDGE, EYE_WHOLE); -} - -static void -drawDinosaur(void) - -{ - glPushMatrix(); - /* Translate the dinosaur to be at (0,8,0). */ - glTranslatef(-8, -8, -bodyWidth / 2); - glTranslatef(0.0, jump, 0.0); - glMaterialfv(GL_FRONT, GL_DIFFUSE, skinColor); - glCallList(BODY_WHOLE); - glTranslatef(0.0, 0.0, bodyWidth); - glCallList(ARM_WHOLE); - glCallList(LEG_WHOLE); - glTranslatef(0.0, 0.0, -bodyWidth - bodyWidth / 4); - glCallList(ARM_WHOLE); - glTranslatef(0.0, 0.0, -bodyWidth / 4); - glCallList(LEG_WHOLE); - glTranslatef(0.0, 0.0, bodyWidth / 2 - 0.1); - glMaterialfv(GL_FRONT, GL_DIFFUSE, eyeColor); - glCallList(EYE_WHOLE); - glPopMatrix(); -} - -enum { - MOD_DINO, MOD_SPHERE, MOD_CUBE, MOD_ICO -}; - -static int currentModel = MOD_DINO; - -static GLfloat blueMaterial[] = {0.0, 0.2, 1.0, 1.0}, - redMaterial[] = {0.6, 0.1, 0.0, 1.0}, - purpleMaterial[] = {0.3, 0.0, 0.3, 1.0}, - greenMaterial[] = {1.0, 0.2, 0.0, 1.0}; - -static void -drawModel(void) -{ - switch(currentModel) { - case MOD_DINO: - drawDinosaur(); - break; - case MOD_SPHERE: - glMaterialfv(GL_FRONT, GL_DIFFUSE, blueMaterial); - glutSolidSphere(6.0, 15, 15); - break; - case MOD_CUBE: - glMaterialfv(GL_FRONT, GL_DIFFUSE, redMaterial); - glutSolidCube(6.0); - break; - case MOD_ICO: - glMaterialfv(GL_FRONT, GL_DIFFUSE, purpleMaterial); - glPushMatrix(); - glEnable(GL_NORMALIZE); - glScalef(7.0, 7.0, 7.0); - glutSolidIcosahedron(); - glDisable(GL_NORMALIZE); - glPopMatrix(); - break; - } -} - -static void -drawBox(GLfloat xsize, GLfloat ysize, GLfloat zsize) -{ - 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] = -xsize / 2; - v[4][0] = v[5][0] = v[6][0] = v[7][0] = xsize / 2; - v[0][1] = v[1][1] = v[4][1] = v[5][1] = -ysize / 2; - v[2][1] = v[3][1] = v[6][1] = v[7][1] = ysize / 2; - v[0][2] = v[3][2] = v[4][2] = v[7][2] = -zsize / 2; - v[1][2] = v[2][2] = v[5][2] = v[6][2] = zsize / 2; - - for (i = 0; i < 6; i++) { - glBegin(GL_QUADS); - 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(); - } -} - -static void -drawPillar(void) -{ - glEnable(GL_NORMALIZE); - glMaterialfv(GL_FRONT, GL_DIFFUSE, greenMaterial); - glPushMatrix(); - glTranslatef(8.0, 4.01, 8.0); - drawBox(2.0, 8.0, 2.0); - glutSolidCube(2.0); - glPopMatrix(); - glDisable(GL_NORMALIZE); -} - -static GLfloat floorVertices[4][3] = { - { -20.0, 0.0, 20.0 }, - { 20.0, 0.0, 20.0 }, - { 20.0, 0.0, -20.0 }, - { -20.0, 0.0, -20.0 }, -}; - -/* Draw a floor (possibly textured). */ -static void -drawFloor(void) -{ - glDisable(GL_LIGHTING); - - if (useTexture) { - glEnable(GL_TEXTURE_2D); - } - - glBegin(GL_QUADS); - glTexCoord2f(0.0, 0.0); - glVertex3fv(floorVertices[0]); - glTexCoord2f(0.0, 16.0); - glVertex3fv(floorVertices[1]); - glTexCoord2f(16.0, 16.0); - glVertex3fv(floorVertices[2]); - glTexCoord2f(16.0, 0.0); - glVertex3fv(floorVertices[3]); - glEnd(); - - if (useTexture) { - glDisable(GL_TEXTURE_2D); - } - - glEnable(GL_LIGHTING); -} - -static GLfloat floorPlane[4]; -static GLfloat floorShadow[4][4]; - -static void -redraw(void) -{ - int start, end; - - if (reportSpeed) { - start = glutGet(GLUT_ELAPSED_TIME); - } - - /* Clear; default stencil clears to zero. */ - if ((stencilReflection && renderReflection) || (stencilShadow && renderShadow) || (haloScale > 1.0)) { - glStencilMask(0xffffffff); - glClearStencil(0x4); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); - } else { - /* Avoid clearing stencil when not using it. */ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - } - - /* Reposition the light source. */ - lightPosition[0] = 15*cos(lightAngle); - lightPosition[1] = lightHeight; - lightPosition[2] = 15*sin(lightAngle); - if (directionalLight) { - lightPosition[3] = 0.0; - } else { - lightPosition[3] = 1.0; - } - - shadowMatrix(floorShadow, floorPlane, lightPosition); - - glPushMatrix(); - /* Perform scene rotations based on user mouse input. */ - glRotatef(angle2, 1.0, 0.0, 0.0); - glRotatef(angle, 0.0, 1.0, 0.0); - - /* Tell GL new light source position. */ - glLightfv(GL_LIGHT0, GL_POSITION, lightPosition); - - if (renderReflection) { - if (stencilReflection) { - /* We can eliminate the visual "artifact" of seeing the "flipped" - model underneath the floor by using stencil. The idea is - draw the floor without color or depth update but so that - a stencil value of one is where the floor will be. Later when - rendering the model reflection, we will only update pixels - with a stencil value of 1 to make sure the reflection only - lives on the floor, not below the floor. */ - - /* Don't update color or depth. */ - glDisable(GL_DEPTH_TEST); - glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); - - /* Draw 1 into the stencil buffer. */ - glEnable(GL_STENCIL_TEST); - glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); - glStencilFunc(GL_ALWAYS, 1, 0x1); - glStencilMask(0x1); - - /* Now render floor; floor pixels just get their stencil set to 1. */ - drawFloor(); - - /* Re-enable update of color and depth. */ - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - glEnable(GL_DEPTH_TEST); - - /* Now, only render where stencil is set to 1. */ - glStencilFunc(GL_EQUAL, 1, 0x1); /* draw if ==1 */ - glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); - } - - glPushMatrix(); - - /* The critical reflection step: Reflect 3D model through the floor - (the Y=0 plane) to make a relection. */ - glScalef(1.0, -1.0, 1.0); - - /* Reflect the light position. */ - glLightfv(GL_LIGHT0, GL_POSITION, lightPosition); - - /* To avoid our normals getting reversed and hence botched lighting - on the reflection, turn on normalize. */ - glEnable(GL_NORMALIZE); - glCullFace(GL_FRONT); - - /* Draw the reflected model. */ - glPushMatrix(); - glTranslatef(0, 8.01, 0); - drawModel(); - glPopMatrix(); - drawPillar(); - - /* Disable noramlize again and re-enable back face culling. */ - glDisable(GL_NORMALIZE); - glCullFace(GL_BACK); - - glPopMatrix(); - - /* Switch back to the unreflected light position. */ - glLightfv(GL_LIGHT0, GL_POSITION, lightPosition); - - if (stencilReflection) { - glDisable(GL_STENCIL_TEST); - } - } - - /* Back face culling will get used to only draw either the top or the - bottom floor. This let's us get a floor with two distinct - appearances. The top floor surface is reflective and kind of red. - The bottom floor surface is not reflective and blue. */ - - /* Draw "bottom" of floor in blue. */ - glFrontFace(GL_CW); /* Switch face orientation. */ - glColor4f(0.1, 0.1, 0.7, 1.0); - drawFloor(); - glFrontFace(GL_CCW); - - if (renderShadow && stencilShadow) { - /* Draw the floor with stencil value 2. This helps us only - draw the shadow once per floor pixel (and only on the - floor pixels). */ - glEnable(GL_STENCIL_TEST); - glStencilFunc(GL_ALWAYS, 0x2, 0x2); - glStencilMask(0x2); - glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); - } - - /* Draw "top" of floor. Use blending to blend in reflection. */ - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glColor4f(1.0, 1.0, 1.0, 0.3); - drawFloor(); - glDisable(GL_BLEND); - - if (renderShadow && stencilShadow) { - glDisable(GL_STENCIL_TEST); - } - - if (renderDinosaur) { - drawPillar(); - - if (haloScale > 1.0) { - /* If halo effect is enabled, draw the model with its stencil set to 6 - (arbitary value); later, we'll make sure not to update pixels tagged - as 6. */ - glEnable(GL_STENCIL_TEST); - glStencilFunc(GL_ALWAYS, 0x0, 0x4); - glStencilMask(0x4); - glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); - } - - /* Draw "actual" dinosaur (or other model), not its reflection. */ - glPushMatrix(); - glTranslatef(0, 8.01, 0); - drawModel(); - glPopMatrix(); - } - - /* Begin shadow render. */ - if (renderShadow) { - - /* Render the projected shadow. */ - - if (stencilShadow) { - - /* Now, only render where stencil is set above 5 (ie, 6 where - the top floor is). Update stencil with 2 where the shadow - gets drawn so we don't redraw (and accidently reblend) the - shadow). */ - glEnable(GL_STENCIL_TEST); - glStencilFunc(GL_NOTEQUAL, 0x0, 0x2); - glStencilMask(0x2); - glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); - } - - /* To eliminate depth buffer artifacts, we use polygon offset - to raise the depth of the projected shadow slightly so - that it does not depth buffer alias with the floor. */ - if (offsetShadow) { - switch (polygonOffsetVersion) { - case EXTENSION: -#ifdef GL_EXT_polygon_offset - glEnable(GL_POLYGON_OFFSET_EXT); - break; -#endif -#ifdef GL_VERSION_1_1 - case ONE_DOT_ONE: - glEnable(GL_POLYGON_OFFSET_FILL); - break; -#endif - case MISSING: - /* Oh well. */ - break; - } - } - - /* Render 50% black shadow color on top of whatever the - floor appareance is. */ - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glDisable(GL_LIGHTING); /* Force the 50% black. */ - glColor4f(0.0, 0.0, 0.0, 0.5); - - glPushMatrix(); - /* Project the shadow. */ - glMultMatrixf((GLfloat *) floorShadow); - glPushMatrix(); - glTranslatef(0, 8.01, 0); - drawModel(); - glPopMatrix(); - drawPillar(); - glPopMatrix(); - - glDisable(GL_BLEND); - glEnable(GL_LIGHTING); - - if (offsetShadow) { - switch (polygonOffsetVersion) { -#ifdef GL_EXT_polygon_offset - case EXTENSION: - glDisable(GL_POLYGON_OFFSET_EXT); - break; -#endif -#ifdef GL_VERSION_1_1 - case ONE_DOT_ONE: - glDisable(GL_POLYGON_OFFSET_FILL); - break; -#endif - case MISSING: - /* Oh well. */ - break; - } - } - if (stencilShadow) { - glDisable(GL_STENCIL_TEST); - } - } /* End shadow render. */ - - /* Begin light source location render. */ - glPushMatrix(); - glDisable(GL_LIGHTING); - glColor3f(1.0, 1.0, 0.0); - if (directionalLight) { - /* Draw an arrowhead. */ - glDisable(GL_CULL_FACE); - glTranslatef(lightPosition[0], lightPosition[1], lightPosition[2]); - glRotatef(lightAngle * -180.0 / M_PI, 0, 1, 0); - glRotatef(atan(lightHeight/12) * 180.0 / M_PI, 0, 0, 1); - glBegin(GL_TRIANGLE_FAN); - glVertex3f(0, 0, 0); - glVertex3f(2, 1, 1); - glVertex3f(2, -1, 1); - glVertex3f(2, -1, -1); - glVertex3f(2, 1, -1); - glVertex3f(2, 1, 1); - glEnd(); - /* Draw a white line from light direction. */ - glColor3f(1.0, 1.0, 1.0); - glBegin(GL_LINES); - glVertex3f(0.1, 0, 0); - glVertex3f(5, 0, 0); - glEnd(); - glEnable(GL_CULL_FACE); - } else { - /* Draw a yellow ball at the light source. */ - glTranslatef(lightPosition[0], lightPosition[1], lightPosition[2]); - glutSolidSphere(1.0, 5, 5); - } - glEnable(GL_LIGHTING); - glPopMatrix(); - /* End light source location render. */ - - /* Add a halo effect around the 3D model. */ - if (haloScale > 1.0) { - - glDisable(GL_LIGHTING); - - if (blendedHalo) { - /* If we are doing a nice blended halo, enable blending and - make sure we only blend a halo pixel once and that we do - not draw to pixels tagged as 6 (where the model is). */ - glEnable(GL_BLEND); - glEnable(GL_STENCIL_TEST); - glColor4f(0.8, 0.8, 0.0, 0.3); /* 30% sorta yellow. */ - glStencilFunc(GL_EQUAL, 0x4, 0x4); - glStencilMask(0x4); - glStencilOp(GL_KEEP, GL_KEEP, GL_INVERT); - } else { - /* Be cheap; no blending. Just draw yellow halo but not updating - pixels where the model is. We don't update stencil at all. */ - glDisable(GL_BLEND); - glEnable(GL_STENCIL_TEST); - glColor3f(0.5, 0.5, 0.0); /* Half yellow. */ - glStencilFunc(GL_EQUAL, 0x4, 0x4); - glStencilMask(0x4); - glStencilOp(GL_KEEP, GL_KEEP, GL_INVERT); - } - - glPushMatrix(); - glTranslatef(0, 8.01, 0); - glScalef(haloScale, haloScale, haloScale); - drawModel(); - glPopMatrix(); - - if (blendedHalo) { - glDisable(GL_BLEND); - } - glDisable(GL_STENCIL_TEST); - glEnable(GL_LIGHTING); - } - /* End halo effect render. */ - - glPopMatrix(); - - if (reportSpeed) { - glFinish(); - end = glutGet(GLUT_ELAPSED_TIME); - printf("Speed %.3g frames/sec (%d ms)\n", 1000.0/(end-start), end-start); - } - - glutSwapBuffers(); -} - -/* ARGSUSED2 */ -static void -mouse(int button, int state, int x, int y) -{ - if (button == GLUT_LEFT_BUTTON) { - if (state == GLUT_DOWN) { - moving = 1; - startx = x; - starty = y; - } - if (state == GLUT_UP) { - moving = 0; - } - } - if (button == GLUT_MIDDLE_BUTTON) { - if (state == GLUT_DOWN) { - lightMoving = 1; - lightStartX = x; - lightStartY = y; - } - if (state == GLUT_UP) { - lightMoving = 0; - } - } -} - -/* ARGSUSED1 */ -static void -motion(int x, int y) -{ - if (moving) { - angle = angle + (x - startx); - angle2 = angle2 + (y - starty); - startx = x; - starty = y; - glutPostRedisplay(); - } - if (lightMoving) { - lightAngle += (x - lightStartX)/40.0; - lightHeight += (lightStartY - y)/20.0; - lightStartX = x; - lightStartY = y; - glutPostRedisplay(); - } -} - -static const float maxHalo[] = { 0.2, 0.35, 0.3, 0.5 }; - -/* Advance time varying state when idle callback registered. */ -static void -idle(void) -{ - static float time = 0.0; - - if (animation) { - time = glutGet(GLUT_ELAPSED_TIME) / 500.0; - - jump = 4.0 * fabs(sin(time)*0.8); - if (!lightMoving) { - lightAngle += 0.03; - } - } - if (haloMagic) { - haloTime += 0.1; - haloScale = 1.0 + maxHalo[currentModel] * sin(haloTime); - if (haloScale <= 1.0) { - haloMagic = 0; - if (!animation) { - glutIdleFunc(NULL); - } - } - } - glutPostRedisplay(); -} - -enum { - M_NONE, M_BLENDED_HALO, M_SHOW_HALO, M_SWITCH_MODEL, M_MOTION, M_LIGHT, - M_TEXTURE, M_SHADOWS, M_REFLECTION, M_DINOSAUR, - M_STENCIL_REFLECTION, M_STENCIL_SHADOW, M_OFFSET_SHADOW, - M_POSITIONAL, M_DIRECTIONAL, M_PERFORMANCE -}; - -static void -controlLights(int value) -{ - switch (value) { - case M_NONE: - return; - case M_SWITCH_MODEL: - currentModel = (currentModel + 1) % 4; - break; - case M_SHOW_HALO: - haloScale = 1.0 + maxHalo[currentModel]; - break; - case M_BLENDED_HALO: - blendedHalo = 1 - blendedHalo; - break; - case M_MOTION: - animation = 1 - animation; - if (animation || haloMagic) { - glutIdleFunc(idle); - } else { - glutIdleFunc(NULL); - } - break; - case M_LIGHT: - lightSwitch = !lightSwitch; - if (lightSwitch) { - glEnable(GL_LIGHT0); - } else { - glDisable(GL_LIGHT0); - } - break; - case M_TEXTURE: - useTexture = !useTexture; - break; - case M_SHADOWS: - renderShadow = 1 - renderShadow; - break; - case M_REFLECTION: - renderReflection = 1 - renderReflection; - break; - case M_DINOSAUR: - renderDinosaur = 1 - renderDinosaur; - break; - case M_STENCIL_REFLECTION: - stencilReflection = 1 - stencilReflection; - break; - case M_STENCIL_SHADOW: - stencilShadow = 1 - stencilShadow; - break; - case M_OFFSET_SHADOW: - offsetShadow = 1 - offsetShadow; - break; - case M_POSITIONAL: - directionalLight = 0; - break; - case M_DIRECTIONAL: - directionalLight = 1; - break; - case M_PERFORMANCE: - reportSpeed = 1 - reportSpeed; - break; - } - glutPostRedisplay(); -} - -/* When not visible, stop animating. Restart when visible again. */ -static void -visible(int vis) -{ - if (vis == GLUT_VISIBLE) { - if (animation || haloMagic) - glutIdleFunc(idle); - } else { - if (!animation && !haloMagic) - glutIdleFunc(NULL); - } -} - -/* Press any key to redraw; good when motion stopped and - performance reporting on. */ -/* ARGSUSED */ -static void -key(unsigned char c, int x, int y) -{ - if (c == 27) { - exit(0); /* IRIS GLism, Escape quits. */ - } - if (c == ' ') { - haloMagic = 1; - haloTime = 0.0; - glutIdleFunc(idle); - } - glutPostRedisplay(); -} - -/* Press any key to redraw; good when motion stopped and - performance reporting on. */ -/* ARGSUSED */ -static void -special(int k, int x, int y) -{ - glutPostRedisplay(); -} - -static int -supportsOneDotOne(void) -{ - const char *version; - int major, minor; - - version = (char *) glGetString(GL_VERSION); - if (sscanf(version, "%d.%d", &major, &minor) == 2) - return major >= 1 && minor >= 1; - return 0; /* OpenGL version string malformed! */ -} - -int -main(int argc, char **argv) -{ - int i; - - glutInit(&argc, argv); - - for (i=1; i -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=halomagic - 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 "halomagic.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 "halomagic.mak" CFG="halomagic - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "halomagic - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "halomagic - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "halomagic - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "halomagic - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "halomagic - Win32 Release" -# Name "halomagic - Win32 Debug" -# Begin Source File - -SOURCE=.\halomagic.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/highlight.c b/lib/glut-3.7.6/progs/examples/highlight.c deleted file mode 100644 index a2dd3bf55..000000000 --- a/lib/glut-3.7.6/progs/examples/highlight.c +++ /dev/null @@ -1,405 +0,0 @@ - -/* 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. */ - -/** - * (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. - */ -/* - * scene.c - * This program demonstrates the use of the GL lighting model. - * Objects are drawn using a grey material characteristic. - * A single light source illuminates the objects. - */ -#include -#include -#include -#include - -#define BUFSIZE 512 - -#define TORUS 1 -#define TETRAHEDRON 2 -#define ICOSAHEDRON 3 - -GLuint selectBuf[BUFSIZE]; - -int W = 500, H = 500; -GLfloat x, y; -int locating = 0; -GLuint theObject = 0; -int menu_inuse = 0; -int mouse_state = 0; - -char *objectNames[] = -{"Nothing", "Torus", "Tetrahedron", "Icosahedron"}; - -void -output(GLfloat x, GLfloat y, char *format,...) -{ - va_list args; - char buffer[200], *p; - - va_start(args, format); - vsprintf(buffer, format, args); - va_end(args); - glPushMatrix(); - glTranslatef(x, y, 0); - for (p = buffer; *p; p++) - glutStrokeCharacter(GLUT_STROKE_ROMAN, *p); - glPopMatrix(); -} - -/* Initialize material property and light source. */ -void -myinit(void) -{ - GLfloat light_ambient[] = - {0.2, 0.2, 0.2, 1.0}; - GLfloat light_diffuse[] = - {1.0, 1.0, 1.0, 1.0}; - GLfloat light_specular[] = - {1.0, 1.0, 1.0, 1.0}; - GLfloat light_position[] = - {1.0, 1.0, 1.0, 0.0}; - - glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); - glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); - glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); - glLightfv(GL_LIGHT0, GL_POSITION, light_position); - - glEnable(GL_LIGHT0); - glDepthFunc(GL_LESS); - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - - glSelectBuffer(BUFSIZE, selectBuf); - - glNewList(TORUS, GL_COMPILE); - glutSolidTorus(0.275, 0.85, 10, 15); - glEndList(); - glNewList(TETRAHEDRON, GL_COMPILE); - glutSolidTetrahedron(); - glEndList(); - glNewList(ICOSAHEDRON, GL_COMPILE); - glutSolidIcosahedron(); - glEndList(); -} - -void -highlightBegin(void) -{ - static GLfloat red[4] = - {1.0, 0.0, 0.0, 1.0}; - - glPushAttrib(GL_LIGHTING_BIT | GL_CURRENT_BIT); - glMaterialfv(GL_FRONT, GL_DIFFUSE, red); - glColor3f(1.0, 0.0, 0.0); -} - -void -highlightEnd(void) -{ - glPopAttrib(); -} - -void -draw(void) -{ - glPushMatrix(); - glScalef(1.3, 1.3, 1.3); - glRotatef(20.0, 1.0, 0.0, 0.0); - - glLoadName(2); - glPushMatrix(); - if (theObject == 2) - highlightBegin(); - glTranslatef(-0.75, -0.5, 0.0); - glRotatef(270.0, 1.0, 0.0, 0.0); - glCallList(TETRAHEDRON); - if (theObject == 2) - highlightEnd(); - glPopMatrix(); - - glLoadName(1); - glPushMatrix(); - if (theObject == 1) - highlightBegin(); - glTranslatef(-0.75, 0.5, 0.0); - glRotatef(90.0, 1.0, 0.0, 0.0); - glCallList(TORUS); - if (theObject == 1) - highlightEnd(); - glPopMatrix(); - - glLoadName(3); - glPushMatrix(); - if (theObject == 3) - highlightBegin(); - glTranslatef(0.75, 0.0, -1.0); - glCallList(ICOSAHEDRON); - if (theObject == 3) - highlightEnd(); - glPopMatrix(); - - glPopMatrix(); -} - -void -myortho(void) -{ - if (W <= H) - glOrtho(-2.5, 2.5, -2.5 * (GLfloat) H / (GLfloat) W, - 2.5 * (GLfloat) H / (GLfloat) W, -10.0, 10.0); - else - glOrtho(-2.5 * (GLfloat) W / (GLfloat) H, - 2.5 * (GLfloat) W / (GLfloat) H, -2.5, 2.5, -10.0, 10.0); -} - -/* processHits() prints out the contents of the - * selection array. - */ -void -processHits(GLint hits, GLuint buffer[]) -{ - GLuint depth = (GLuint) ~0; - unsigned int getThisName; - GLint i; - GLuint names, *ptr; - GLuint newObject; - - ptr = (GLuint *) buffer; - newObject = 0; - for (i = 0; i < hits; i++) { /* for each hit */ - getThisName = 0; - names = *ptr; - ptr++; /* skip # name */ - if (*ptr <= depth) { - depth = *ptr; - getThisName = 1; - } - ptr++; /* skip z1 */ - if (*ptr <= depth) { - depth = *ptr; - getThisName = 1; - } - ptr++; /* skip z2 */ - - if (getThisName) - newObject = *ptr; - ptr += names; /* skip the names list */ - } - if (theObject != newObject) { - theObject = newObject; - glutPostRedisplay(); - } -} - -/* ARGSUSED */ -void -locate(int value) -{ - GLint viewport[4]; - GLint hits; - - if (locating) { - if (mouse_state == GLUT_ENTERED) { - (void) glRenderMode(GL_SELECT); - glInitNames(); - glPushName(-1); - - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - viewport[0] = 0; - viewport[1] = 0; - viewport[2] = W; - viewport[3] = H; - gluPickMatrix(x, H - y, 5.0, 5.0, viewport); - myortho(); - glMatrixMode(GL_MODELVIEW); - draw(); - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - hits = glRenderMode(GL_RENDER); - } else { - hits = 0; - } - processHits(hits, selectBuf); - } - locating = 0; -} - -void -passive(int newx, int newy) -{ - x = newx; - y = newy; - if (!locating) { - locating = 1; - glutTimerFunc(1, locate, 0); - } -} - -void -entry(int state) -{ - mouse_state = state; - if (!menu_inuse) { - if (state == GLUT_LEFT) { - if (theObject != 0) { - theObject = 0; - glutPostRedisplay(); - } - } - } -} - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - draw(); - - glPushAttrib(GL_ENABLE_BIT); - glDisable(GL_DEPTH_TEST); - glDisable(GL_LIGHTING); - glDisable(GL_LINE_SMOOTH); - - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - gluOrtho2D(0, 3000, 0, 3000); - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); - output(80, 2800, "Automatically names object under mouse."); - output(80, 100, "Located: %s.", objectNames[theObject]); - glPopMatrix(); - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopAttrib(); - - glutSwapBuffers(); -} - -void -myReshape(int w, int h) -{ - W = w; - H = h; - glViewport(0, 0, W, H); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - myortho(); - glMatrixMode(GL_MODELVIEW); -} - -void -polygon_mode(int value) -{ - switch (value) { - case 1: - glEnable(GL_LIGHTING); - glDisable(GL_BLEND); - glEnable(GL_DEPTH_TEST); - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - break; - case 2: - glDisable(GL_LIGHTING); - glColor3f(1.0, 1.0, 1.0); - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - glEnable(GL_LINE_SMOOTH); - glEnable(GL_BLEND); - glDisable(GL_DEPTH_TEST); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - break; - } - glutPostRedisplay(); -} - -void -mstatus(int status, int newx, int newy) -{ - if (status == GLUT_MENU_NOT_IN_USE) { - menu_inuse = 0; - passive(newx, newy); - } else { - menu_inuse = 1; - } -} - -void -main_menu(int value) -{ - if (value == 666) - exit(0); -} - -/* Main Loop - * Open window with initial window size, title bar, - * RGBA display mode, and handle input events. - */ -int -main(int argc, char **argv) -{ - int submenu; - - glutInit(&argc, argv); - glutInitWindowSize(W, H); - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); - glutCreateWindow(argv[0]); - myinit(); - glutReshapeFunc(myReshape); - glutDisplayFunc(display); - submenu = glutCreateMenu(polygon_mode); - glutAddMenuEntry("Filled", 1); - glutAddMenuEntry("Outline", 2); - glutCreateMenu(main_menu); - glutAddMenuEntry("Quit", 666); - glutAddSubMenu("Polygon mode", submenu); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutPassiveMotionFunc(passive); - glutEntryFunc(entry); - glutMenuStatusFunc(mstatus); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/examples/highlight.dsp b/lib/glut-3.7.6/progs/examples/highlight.dsp deleted file mode 100644 index c9a90691f..000000000 --- a/lib/glut-3.7.6/progs/examples/highlight.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="highlight" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=highlight - 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 "highlight.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 "highlight.mak" CFG="highlight - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "highlight - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "highlight - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "highlight - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "highlight - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "highlight - Win32 Release" -# Name "highlight - Win32 Debug" -# Begin Source File - -SOURCE=.\highlight.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/lightlab.c b/lib/glut-3.7.6/progs/examples/lightlab.c deleted file mode 100644 index 95f330f82..000000000 --- a/lib/glut-3.7.6/progs/examples/lightlab.c +++ /dev/null @@ -1,284 +0,0 @@ - -/* 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 -#include -#include -#include - -enum { - BRASS, RED_PLASTIC, EMERALD, SLATE -} MaterialType; -enum { - TORUS_MATERIAL = 1, TEAPOT_MATERIAL = 2, ICO_MATERIAL = 3 -} MaterialDisplayList; -enum { - LIGHT_OFF, LIGHT_RED, LIGHT_WHITE, LIGHT_GREEN -} LightValues; - -GLfloat red_light[] = -{1.0, 0.0, 0.0, 1.0}, green_light[] = -{0.0, 1.0, 0.0, 1.0}, white_light[] = -{1.0, 1.0, 1.0, 1.0}; -GLfloat left_light_position[] = -{-1.0, 0.0, 1.0, 0.0}, right_light_position[] = -{1.0, 0.0, 1.0, 0.0}; -GLfloat brass_ambient[] = -{0.33, 0.22, 0.03, 1.0}, brass_diffuse[] = -{0.78, 0.57, 0.11, 1.0}, brass_specular[] = -{0.99, 0.91, 0.81, 1.0}, brass_shininess = 27.8; -GLfloat red_plastic_ambient[] = -{0.0, 0.0, 0.0}, red_plastic_diffuse[] = -{0.5, 0.0, 0.0}, red_plastic_specular[] = -{0.7, 0.6, 0.6}, red_plastic_shininess = 32.0; -GLfloat emerald_ambient[] = -{0.0215, 0.1745, 0.0215}, emerald_diffuse[] = -{0.07568, 0.61424, 0.07568}, emerald_specular[] = -{0.633, 0.727811, 0.633}, emerald_shininess = 76.8; -GLfloat slate_ambient[] = -{0.02, 0.02, 0.02}, slate_diffuse[] = -{0.02, 0.01, 0.01}, slate_specular[] = -{0.4, 0.4, 0.4}, slate_shininess = .78125; -int shade_model = GL_SMOOTH; -char *left_light, *right_light; -char *ico_material, *teapot_material, *torus_material; - -void -output(GLfloat x, GLfloat y, char *format,...) -{ - va_list args; - char buffer[200], *p; - - va_start(args, format); - vsprintf(buffer, format, args); - va_end(args); - glPushMatrix(); - glTranslatef(x, y, 0); - for (p = buffer; *p; p++) - glutStrokeCharacter(GLUT_STROKE_ROMAN, *p); - glPopMatrix(); -} - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glScalef(1.3, 1.3, 1.3); - glRotatef(20.0, 1.0, 0.0, 0.0); - glPushMatrix(); - glTranslatef(-0.65, 0.7, 0.0); - glRotatef(90.0, 1.0, 0.0, 0.0); - glCallList(TORUS_MATERIAL); - glutSolidTorus(0.275, 0.85, 10, 15); - glPopMatrix(); - glPushMatrix(); - glTranslatef(-0.75, -0.8, 0.0); - glCallList(TEAPOT_MATERIAL); - glutSolidTeapot(0.7); - glPopMatrix(); - glPushMatrix(); - glTranslatef(1.0, 0.0, -1.0); - glCallList(ICO_MATERIAL); - glutSolidIcosahedron(); - glPopMatrix(); - glPopMatrix(); - glPushAttrib(GL_ENABLE_BIT); - glDisable(GL_DEPTH_TEST); - glDisable(GL_LIGHTING); - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - gluOrtho2D(0, 3000, 0, 3000); - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); - output(80, 2800, "Torus: %s", torus_material); - output(80, 2650, "Icosahedron: %s", ico_material); - output(80, 2500, "Teapot: %s", teapot_material); - output(80, 250, "Left light: %s", left_light); - output(1700, 250, "Right light: %s", right_light); - output(850, 100, "Shade model: %s", - shade_model == GL_SMOOTH ? "smooth" : "flat"); - glPopMatrix(); - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glPopAttrib(); - glutSwapBuffers(); -} - -void -light_select(GLenum which, int value, char **label) -{ - glEnable(which); - switch (value) { - case LIGHT_OFF: - *label = "off"; - glDisable(which); - break; - case LIGHT_RED: - *label = "red"; - glLightfv(which, GL_DIFFUSE, red_light); - break; - case LIGHT_WHITE: - *label = "white"; - glLightfv(which, GL_DIFFUSE, white_light); - break; - case LIGHT_GREEN: - *label = "green"; - glLightfv(which, GL_DIFFUSE, green_light); - break; - } - glutPostRedisplay(); -} - -void -left_light_select(int value) -{ - light_select(GL_LIGHT0, value, &left_light); -} - -void -right_light_select(int value) -{ - light_select(GL_LIGHT1, value, &right_light); -} - -void -material(int dlist, GLfloat * ambient, GLfloat * diffuse, - GLfloat * specular, GLfloat shininess) -{ - glNewList(dlist, GL_COMPILE); - glMaterialfv(GL_FRONT, GL_AMBIENT, ambient); - glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuse); - glMaterialfv(GL_FRONT, GL_SPECULAR, specular); - glMaterialf(GL_FRONT, GL_SHININESS, shininess); - glEndList(); -} - -char * -material_select(int object, int value) -{ - glutPostRedisplay(); - switch (value) { - case BRASS: - material(object, brass_ambient, - brass_diffuse, brass_specular, brass_shininess); - return "brass"; - case RED_PLASTIC: - material(object, red_plastic_ambient, red_plastic_diffuse, - red_plastic_specular, red_plastic_shininess); - return "red plastic"; - case EMERALD: - material(object, emerald_ambient, emerald_diffuse, - emerald_specular, emerald_shininess); - return "emerald"; - case SLATE: - material(object, slate_ambient, slate_diffuse, - slate_specular, slate_shininess); - return "slate"; - } - return NULL; /* avoid bogus warning! */ -} - -void -torus_select(int value) -{ - torus_material = material_select(TORUS_MATERIAL, value); -} - -void -teapot_select(int value) -{ - teapot_material = material_select(TEAPOT_MATERIAL, value); -} - -void -ico_select(int value) -{ - ico_material = material_select(ICO_MATERIAL, value); -} - -void -main_menu_select(int value) -{ - if (value == 666) - exit(0); - glShadeModel(shade_model = value); - glutPostRedisplay(); -} - -int -main(int argc, char **argv) -{ - int left_light_m, right_light_m, torus_m, teapot_m, ico_m; - - glutInitWindowSize(400, 400); - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); - glutCreateWindow("Lighting Laboratory"); - glutDisplayFunc(display); - -#define LIGHT_MENU_ENTRIES() \ - glutAddMenuEntry("Disable", LIGHT_OFF); \ - glutAddMenuEntry("Red", LIGHT_RED); \ - glutAddMenuEntry("White", LIGHT_WHITE); \ - glutAddMenuEntry("Green", LIGHT_GREEN); -#define MATERIAL_MENU_ENTRIES() \ - glutAddMenuEntry("Brass", BRASS); \ - glutAddMenuEntry("Red plastic", RED_PLASTIC); \ - glutAddMenuEntry("Emerald", EMERALD); \ - glutAddMenuEntry("Slate", SLATE); - - left_light_m = glutCreateMenu(left_light_select); - LIGHT_MENU_ENTRIES(); - right_light_m = glutCreateMenu(right_light_select); - LIGHT_MENU_ENTRIES(); - torus_m = glutCreateMenu(torus_select); - MATERIAL_MENU_ENTRIES(); - teapot_m = glutCreateMenu(teapot_select); - MATERIAL_MENU_ENTRIES(); - ico_m = glutCreateMenu(ico_select); - MATERIAL_MENU_ENTRIES(); - - glutCreateMenu(main_menu_select); - glutAddMenuEntry("Smooth shading", GL_SMOOTH); - glutAddMenuEntry("Flat shading", GL_FLAT); - glutAddSubMenu("Left light", left_light_m); - glutAddSubMenu("Right light", right_light_m); - glutAddSubMenu("Torus", torus_m); - glutAddSubMenu("Teapot", teapot_m); - glutAddSubMenu("Icosahedron", ico_m); - glutAddMenuEntry("Quit", 666); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - glLightfv(GL_LIGHT0, GL_POSITION, left_light_position); - glLightfv(GL_LIGHT0, GL_SPECULAR, white_light); - glLightfv(GL_LIGHT1, GL_POSITION, right_light_position); - glLightfv(GL_LIGHT1, GL_SPECULAR, white_light); - left_light_select(LIGHT_RED); - right_light_select(LIGHT_GREEN); - torus_select(RED_PLASTIC); - teapot_select(BRASS); - ico_select(EMERALD); - glEnable(GL_LIGHTING); - glEnable(GL_DEPTH_TEST); - glEnable(GL_NORMALIZE); - glLineWidth(1.0); - glMatrixMode(GL_PROJECTION); - gluPerspective( /* degrees field of view */ 50.0, - /* aspect ratio */ 1.0, /* Z near */ 1.0, /* Z far */ 10.0); - glMatrixMode(GL_MODELVIEW); - gluLookAt(0.0, 0.0, 5.0, /* eye is at (0,0,5) */ - 0.0, 0.0, 0.0, /* center is at (0,0,0) */ - 0.0, 1.0, 0.); /* up is in positive Y direction */ - glTranslatef(0.0, 0.0, -1.0); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/examples/lightlab.dsp b/lib/glut-3.7.6/progs/examples/lightlab.dsp deleted file mode 100644 index 97c2d190a..000000000 --- a/lib/glut-3.7.6/progs/examples/lightlab.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="lightlab" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=lightlab - 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 "lightlab.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 "lightlab.mak" CFG="lightlab - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "lightlab - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "lightlab - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "lightlab - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "lightlab - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "lightlab - Win32 Release" -# Name "lightlab - Win32 Debug" -# Begin Source File - -SOURCE=.\lightlab.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/logo.c b/lib/glut-3.7.6/progs/examples/logo.c deleted file mode 100644 index 5061101d1..000000000 --- a/lib/glut-3.7.6/progs/examples/logo.c +++ /dev/null @@ -1,89 +0,0 @@ -int logo_width = 317; -int logo_height = 85; -unsigned char logo_image[107780] = { -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,254,254,255, 241,241,241,255, 226,226,226,255, 222,222,222,255, 187,187,187,255, 189,189,189,255, 193,193,193,255, 197,197,197,255, 220,220,220,255, 225,225,225,255, 225,225,225,255, 230,230,230,255, 244,244,244,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 253,253,253,255, 233,233,233,255, 196,196,196,255, 148,148,148,255, 130,130,130,255, 90,90,90,255, 46,46,46,255, 41,41,41,255, 28,28,28,255, 30,30,30,255, 31,31,31,255, 33,33,33,255, 40,40,40,255, 42,42,42,255, 41,41,41,255, 57,57,57,255, 99,99,99,255, 136,136,136,255, 165,165,165,255, 215,215,215,255, 232,232,232,255, 252,252,252,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 253,253,253,255, 237,237,237,255, 226,226,226,255, 198,198,198,255, 167,167,167,255, 162,162,162,255, 165,165,165,255, 189,189,189,255, 224,224,224,255, 225,225,225,255, 226,226,226,255, 231,231,231,255, 239,239,239,255, 254,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,254,254,255, 248,248,248,255, 254,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 249,249,249,255, 208,208,208,255, 135,135,135,255, 69,68,68,255, 36,33,33,255, 19,15,15,255, 20,13,13,255, 20,11,11,255, 28,15,15,255, 33,15,15,255, 35,17,17,255, 30,15,15,255, 28,14,14,255, 22,11,11,255, 23,13,13,255, 17,10,10,255, 14,12,12,255, 10,10,10,255, 11,11,11,255, 11,11,11,255, 22,22,22,255, 38,38,38,255, 63,63,63,255, 127,127,127,255, 184,184,184,255, 235,235,235,255, 252,252,252,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 244,244,244,255, 219,219,219,255, 167,167,167,255, 135,135,135,255, 126,126,126,255, 77,77,77,255, 45,45,45,255, 32,32,32,255, 24,24,23,255, 20,20,20,255, 22,22,22,255, 29,29,29,255, 42,42,42,255, 41,41,41,255, 43,43,43,255, 61,61,61,255, 84,84,84,255, 136,136,136,255, 173,173,173,255, 224,224,224,255, 238,238,238,255, 254,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 250,250,250,255, 240,240,240,255, 235,235,235,255, 234,234,234,255, 226,226,226,255, 225,225,225,255, 225,225,225,255, 225,225,225,255, 220,220,220,255, 193,193,193,255, 165,165,165,255, 165,165,165,255, 148,148,148,255, 134,134,134,255, 133,133,133,255, 133,133,133,255, 133,133,133,255, 130,130,130,255, 127,127,127,255, 237,237,237,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 252,252,252,255, 209,209,209,255, 142,142,142,255, 117,115,115,255, 56,47,47,255, 43,17,17,255, 68,20,20,255, 88,23,23,255, 91,26,26,255, 107,30,30,255, 124,34,34,255, 134,36,36,255, 146,41,41,255, 152,42,42,255, 146,41,41,255, 135,35,35,255, 126,34,34,255, 117,33,33,255, 103,29,29,255, 90,27,27,255, 70,26,26,255, 46,20,20,255, 34,18,18,255, 23,13,13,255, 15,12,12,255, 10,10,10,255, 12,12,12,255, 30,30,30,255, 72,72,72,255, 124,124,124,255, 151,151,151,255, 221,221,221,255, 252,252,252,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 252,252,252,255, 231,231,231,255, 191,191,191,255, 136,136,136,255, 100,100,100,255, 46,46,44,255, 25,25,22,255, 20,20,13,255, 24,24,10,255, 30,30,12,255, 37,36,10,255, 42,41,14,255, 54,53,14,255, 60,56,17,255, 48,47,13,255, 46,46,15,255, 31,31,13,255, 23,23,12,255, 19,19,10,255, 19,18,13,255, 14,13,10,255, 14,14,14,255, 24,24,24,255, 48,48,48,255, 83,83,83,255, 128,128,128,255, 141,141,141,255, 201,201,201,255, 247,247,247,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,254,254,255, 246,246,246,255, 239,239,239,255, 235,235,235,255, 233,233,233,255, 226,226,226,255, 225,225,225,255, 225,225,225,255, 225,225,225,255, 221,221,221,255, 196,196,196,255, 179,179,179,255, 162,162,162,255, 147,147,147,255, 133,133,133,255, 134,134,134,255, 133,133,133,255, 134,134,134,255, 133,133,133,255, 134,134,134,255, 133,133,133,255, 133,133,133,255, 133,133,133,255, 117,117,117,255, 87,87,87,255, 73,73,73,255, 67,67,67,255, 44,44,44,255, 44,43,44,255, 43,41,43,255, 46,43,46,255, 42,40,42,255, 35,32,35,255, 25,22,25,255, 28,24,28,255, 22,17,22,255, 20,13,20,255, 21,12,21,255, 27,15,27,255, 27,15,27,255, 28,15,28,255, 41,35,41,255, 191,191,191,255, 254,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 239,238,238,255, 165,160,160,255, 60,50,50,255, 44,17,17,255, 68,19,19,255, 102,28,28,255, 139,33,33,255, 181,45,45,255, 207,54,54,255, 215,57,57,255, 218,59,59,255, 233,66,66,255, 239,71,71,255, 243,72,72,255, 244,73,73,255, 241,72,72,255, 236,69,69,255, 235,69,69,255, 231,68,68,255, 227,68,68,255, 219,64,64,255, 195,56,56,255, 167,48,48,255, 143,44,44,255, 116,37,37,255, 78,25,25,255, 41,18,18,255, 22,13,13,255, 14,13,13,255, 10,10,10,255, 11,11,11,255, 16,16,16,255, 61,61,61,255, 177,177,177,255, 241,241,241,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 228,228,228,255, 149,149,148,255, 63,63,63,255, 35,35,32,255, 21,21,11,255, 40,38,14,255, 57,55,14,255, 74,71,17,255, 96,93,18,255, 106,101,18,255, 121,116,21,255, 142,134,22,255, 146,141,24,255, 170,162,27,255, 185,176,30,255, 170,159,30,255, 159,151,27,255, 132,126,24,255, 113,109,21,255, 107,104,21,255, 101,97,21,255, 80,73,18,255, 46,44,15,255, 34,34,16,255, 16,16,10,255, 15,15,13,255, 11,11,10,255, 14,14,14,255, 39,39,39,255, 109,109,109,255, 166,166,166,255, 231,231,231,255, 254,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,252,255,255, 227,214,227,255, 176,175,176,255, 165,165,165,255, 157,157,157,255, 136,136,136,255, 133,133,133,255, 134,134,134,255, 133,133,133,255, 130,130,130,255, 106,106,106,255, 84,84,84,255, 72,72,72,255, 67,67,67,255, 46,46,46,255, 41,41,41,255, 43,43,43,255, 41,41,41,255, 42,42,42,255, 34,32,34,255, 29,27,29,255, 22,20,22,255, 19,17,19,255, 14,11,14,255, 17,13,17,255, 17,12,17,255, 20,14,20,255, 18,12,18,255, 25,15,25,255, 28,15,28,255, 29,17,29,255, 34,17,34,255, 35,19,39,255, 40,20,41,255, 43,23,47,255, 50,22,52,255, 52,23,55,255, 58,25,60,255, 65,27,67,255, 70,28,71,255, 70,28,74,255, 82,32,84,255, 89,36,94,255, 97,36,101,255, 102,39,106,255, 113,40,115,255, 113,42,116,255, 121,43,123,255, 123,44,126,255, 123,45,126,255, 64,31,65,255, 110,106,110,255, 241,241,241,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 249,248,248,255, 192,184,184,255, 106,91,91,255, 58,28,28,255, 98,22,22,255, 148,31,31,255, 179,44,44,255, 205,52,52,255, 230,63,63,255, 248,74,74,255, 250,81,81,255, 253,87,87,255, 252,88,88,255, 253,89,89,255, 252,92,92,255, 254,97,97,255, 253,96,96,255, 254,98,98,255, 253,96,96,255, 254,98,98,255, 253,96,96,255, 254,98,98,255, 252,93,93,255, 250,87,87,255, 245,80,80,255, 238,74,74,255, 222,67,67,255, 197,56,56,255, 150,41,41,255, 101,34,34,255, 65,24,24,255, 32,17,17,255, 14,11,11,255, 13,12,12,255, 11,11,11,255, 32,32,32,255, 94,94,94,255, 183,183,183,255, 241,241,241,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 245,244,243,255, 197,196,190,255, 80,80,74,255, 33,31,18,255, 49,44,14,255, 72,66,17,255, 103,97,17,255, 132,128,23,255, 160,151,26,255, 181,172,28,255, 208,200,33,255, 215,205,34,255, 220,213,35,255, 233,227,39,255, 238,233,41,255, 243,241,41,255, 246,245,44,255, 245,242,45,255, 240,235,41,255, 229,224,39,255, 226,221,38,255, 223,219,38,255, 215,212,35,255, 195,190,32,255, 165,160,27,255, 138,135,26,255, 93,91,20,255, 70,69,18,255, 47,47,16,255, 26,26,11,255, 15,15,13,255, 10,10,10,255, 23,23,23,255, 71,71,71,255, 157,157,157,255, 228,228,228,255, 250,250,250,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,233,254,255, 212,88,212,255, 78,30,78,255, 27,24,27,255, 22,19,22,255, 16,13,16,255, 15,11,15,255, 19,13,19,255, 18,12,18,255, 21,13,21,255, 25,12,25,255, 28,15,28,255, 27,15,28,255, 32,17,33,255, 38,18,38,255, 42,19,43,255, 48,20,48,255, 52,23,55,255, 56,24,58,255, 64,25,67,255, 70,26,70,255, 70,26,74,255, 80,30,82,255, 89,35,91,255, 95,36,97,255, 102,39,104,255, 110,42,114,255, 110,42,115,255, 116,43,120,255, 127,47,131,255, 134,49,138,255, 147,53,151,255, 154,58,158,255, 165,58,166,255, 167,64,175,255, 176,63,183,255, 177,64,182,255, 180,65,185,255, 188,69,189,255, 197,75,199,255, 200,78,205,255, 209,78,212,255, 216,81,221,255, 222,84,226,255, 223,84,227,255, 226,85,229,255, 225,86,229,255, 227,88,230,255, 232,94,235,255, 217,83,220,255, 102,39,107,255, 58,48,58,255, 224,224,224,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 235,231,231,255, 145,125,125,255, 80,38,38,255, 89,20,20,255, 143,31,31,255, 196,45,45,255, 235,61,61,255, 246,69,69,255, 251,80,80,255, 254,86,86,255, 255,93,93,255, 254,100,100,255, 255,101,101,255, 254,102,102,255, 255,101,101,255, 254,102,102,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,102,102,255, 255,101,101,255, 254,100,100,255, 255,96,96,255, 254,94,94,255, 250,87,87,255, 241,73,73,255, 217,65,65,255, 181,53,53,255, 133,39,39,255, 80,26,26,255, 42,21,21,255, 16,14,14,255, 10,10,10,255, 12,12,12,255, 29,29,29,255, 109,109,109,255, 223,223,223,255, 254,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 253,253,253,255, 217,217,210,255, 126,121,104,255, 60,57,34,255, 53,51,13,255, 100,94,17,255, 148,136,23,255, 173,165,27,255, 205,196,30,255, 228,222,34,255, 238,230,40,255, 248,244,43,255, 253,251,47,255, 254,253,50,255, 253,253,50,255, 254,254,51,255, 254,254,52,255, 255,255,53,255, 254,254,55,255, 255,255,54,255, 254,254,55,255, 255,255,53,255, 254,254,51,255, 255,255,51,255, 253,253,50,255, 251,251,47,255, 247,246,44,255, 235,235,41,255, 215,211,38,255, 184,179,33,255, 155,148,29,255, 121,115,24,255, 66,65,18,255, 33,33,17,255, 18,17,13,255, 12,12,11,255, 20,20,20,255, 63,63,63,255, 150,150,150,255, 231,231,231,255, 253,253,253,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,230,255,255, 252,77,252,255, 201,50,203,255, 105,45,109,255, 89,35,94,255, 93,34,97,255, 100,37,103,255, 112,39,114,255, 113,42,116,255, 115,41,118,255, 126,46,132,255, 139,49,139,255, 142,53,148,255, 152,58,156,255, 164,62,166,255, 166,63,172,255, 174,64,177,255, 177,66,182,255, 179,68,186,255, 188,73,192,255, 197,73,199,255, 200,77,208,255, 211,80,215,255, 217,84,221,255, 225,85,226,255, 224,86,227,255, 227,86,229,255, 225,89,229,255, 229,94,233,255, 236,97,238,255, 240,100,242,255, 240,101,244,255, 247,106,247,255, 249,106,249,255, 250,108,251,255, 250,107,251,255, 250,108,251,255, 250,108,251,255, 252,113,252,255, 253,115,253,255, 253,114,253,255, 253,118,253,255, 254,120,254,255, 254,120,254,255, 255,120,255,255, 254,120,254,255, 255,120,255,255, 254,122,254,255, 255,124,255,255, 245,103,246,255, 150,55,157,255, 55,33,56,255, 183,181,183,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 236,231,231,255, 137,100,100,255, 97,23,23,255, 148,31,31,255, 194,45,45,255, 228,60,60,255, 246,75,75,255, 254,88,88,255, 253,92,92,255, 254,99,99,255, 253,100,100,255, 254,101,101,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,102,102,255, 253,98,98,255, 254,90,90,255, 248,83,83,255, 232,70,70,255, 193,56,56,255, 134,41,41,255, 66,24,24,255, 25,14,14,255, 11,10,10,255, 11,11,11,255, 16,16,16,255, 73,73,73,255, 200,200,200,255, 253,253,253,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 249,249,247,255, 179,175,159,255, 92,90,57,255, 66,61,14,255, 95,90,12,255, 146,139,19,255, 196,186,28,255, 228,219,34,255, 241,237,40,255, 250,248,44,255, 253,252,50,255, 253,253,51,255, 254,254,52,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 253,253,55,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,54,255, 254,254,52,255, 252,252,53,255, 248,247,47,255, 244,242,44,255, 224,220,40,255, 182,176,34,255, 130,124,29,255, 85,78,20,255, 40,37,13,255, 19,19,13,255, 11,11,10,255, 22,22,22,255, 77,77,77,255, 197,197,197,255, 250,250,250,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,240,254,255, 253,98,253,255, 252,68,253,255, 231,105,232,255, 217,96,222,255, 223,86,226,255, 223,86,227,255, 226,89,229,255, 228,94,232,255, 230,97,235,255, 235,100,240,255, 240,101,241,255, 240,104,243,255, 244,106,245,255, 248,108,248,255, 247,108,248,255, 249,109,250,255, 247,112,248,255, 249,112,250,255, 250,116,251,255, 252,116,252,255, 251,119,251,255, 253,120,253,255, 253,121,253,255, 254,121,254,255, 253,121,253,255, 254,122,254,255, 253,124,253,255, 254,126,254,255, 253,125,253,255, 254,125,254,255, 253,126,253,255, 254,127,254,255, 253,126,253,255, 254,126,254,255, 253,126,253,255, 254,127,254,255, 253,127,253,255, 254,126,254,255, 253,128,253,255, 254,127,254,255, 253,127,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 251,115,251,255, 193,72,196,255, 68,29,69,255, 124,118,124,255, 249,249,249,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 253,252,252,255, 204,185,185,255, 142,91,91,255, 136,28,28,255, 196,43,43,255, 233,62,62,255, 250,75,75,255, 254,84,84,255, 254,96,96,255, 255,100,100,255, 254,102,102,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,103,103,255, 254,104,104,255, 255,106,106,255, 254,103,103,255, 255,104,104,255, 254,103,103,255, 255,103,103,255, 254,103,103,255, 255,103,103,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,101,101,255, 254,96,96,255, 249,88,88,255, 229,71,71,255, 186,55,55,255, 118,34,34,255, 60,23,23,255, 22,12,12,255, 13,12,12,255, 11,11,11,255, 60,60,60,255, 147,147,147,255, 230,230,230,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 247,247,247,255, 238,238,238,255, 235,235,235,255, 227,227,227,255, 226,226,226,255, 225,225,225,255, 224,224,224,255, 200,200,200,255, 193,193,193,255, 227,227,227,255, 239,239,239,255, 253,253,253,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 243,243,238,255, 174,171,144,255, 87,82,25,255, 107,104,14,255, 161,150,21,255, 199,187,26,255, 228,221,32,255, 246,242,43,255, 253,252,47,255, 254,254,51,255, 254,254,56,255, 254,254,56,255, 254,254,58,255, 255,255,55,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,55,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,54,255, 254,254,54,255, 254,254,51,255, 247,246,47,255, 227,224,44,255, 200,196,35,255, 151,150,27,255, 97,94,22,255, 58,51,18,255, 22,20,13,255, 15,14,14,255, 44,44,44,255, 124,124,124,255, 208,208,208,255, 253,253,253,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,242,255,255, 254,98,254,255, 255,68,255,255, 254,124,254,255, 255,140,255,255, 254,127,254,255, 255,124,255,255, 254,125,254,255, 255,126,255,255, 254,125,254,255, 255,126,255,255, 254,126,254,255, 255,127,255,255, 254,126,254,255, 255,126,255,255, 254,127,254,255, 255,127,255,255, 254,127,254,255, 255,127,255,255, 254,127,254,255, 255,127,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,123,254,255, 226,89,227,255, 113,43,116,255, 78,64,78,255, 228,228,228,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 253,252,252,255, 201,175,175,255, 121,45,45,255, 156,30,30,255, 221,49,49,255, 248,71,71,255, 254,86,86,255, 253,93,93,255, 254,100,100,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,104,104,255, 253,105,105,255, 254,106,106,255, 253,109,109,255, 254,112,112,255, 253,110,110,255, 254,112,112,255, 253,110,110,255, 254,113,113,255, 253,113,113,255, 254,112,112,255, 253,110,110,255, 254,104,104,255, 253,105,105,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,101,101,255, 254,96,96,255, 250,88,88,255, 229,70,70,255, 174,51,51,255, 105,34,34,255, 37,17,17,255, 14,12,12,255, 10,10,10,255, 20,20,20,255, 106,106,106,255, 230,230,230,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 244,246,244,255, 235,236,235,255, 251,251,251,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 239,239,239,255, 180,180,180,255, 110,110,110,255, 81,81,81,255, 71,71,71,255, 49,49,49,255, 43,43,43,255, 41,41,41,255, 42,42,42,255, 33,33,33,255, 31,31,31,255, 51,51,51,255, 83,83,83,255, 127,127,127,255, 155,155,155,255, 196,196,196,255, 238,238,238,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 234,233,223,255, 146,144,98,255, 100,93,22,255, 134,127,14,255, 204,196,23,255, 242,236,34,255, 250,246,42,255, 252,252,47,255, 254,254,53,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 252,252,53,255, 245,245,45,255, 216,212,40,255, 169,159,30,255, 103,95,22,255, 36,35,13,255, 16,16,12,255, 12,12,12,255, 61,61,61,255, 161,161,161,255, 242,242,242,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,242,254,255, 253,99,253,255, 254,62,254,255, 253,124,253,255, 254,142,254,255, 253,133,253,255, 254,132,254,255, 253,130,253,255, 254,130,254,255, 253,129,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,129,254,255, 253,129,253,255, 254,129,254,255, 253,128,253,255, 254,129,254,255, 253,128,253,255, 254,128,254,255, 253,129,253,255, 254,129,254,255, 253,128,253,255, 254,128,254,255, 253,129,253,255, 254,129,254,255, 253,129,253,255, 254,128,254,255, 253,129,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,126,253,255, 246,103,247,255, 168,60,171,255, 71,46,71,255, 198,196,198,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,253,253,255, 208,178,178,255, 135,45,45,255, 177,30,30,255, 228,54,54,255, 249,75,75,255, 254,89,89,255, 255,97,97,255, 254,102,102,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,102,102,255, 255,101,101,255, 254,98,98,255, 255,96,96,255, 254,96,96,255, 255,94,94,255, 254,99,99,255, 255,104,104,255, 254,109,109,255, 255,113,113,255, 254,114,114,255, 255,118,118,255, 254,119,119,255, 255,112,112,255, 254,108,108,255, 255,104,104,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,101,101,255, 254,91,91,255, 246,78,78,255, 204,61,61,255, 119,38,38,255, 47,18,18,255, 15,13,13,255, 10,10,10,255, 20,20,20,255, 107,107,107,255, 234,234,234,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,254,254,255, 168,185,168,255, 73,80,73,255, 139,139,139,255, 216,216,216,255, 242,242,242,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 239,239,241,255, 179,178,185,255, 90,90,95,255, 30,30,34,255, 14,12,19,255, 18,15,25,255, 15,14,22,255, 18,18,25,255, 15,15,23,255, 18,18,25,255, 15,15,23,255, 18,18,22,255, 13,12,18,255, 13,13,16,255, 10,10,10,255, 12,12,12,255, 18,18,18,255, 34,34,34,255, 94,94,94,255, 196,196,196,255, 240,240,240,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 242,241,234,255, 160,154,103,255, 106,99,16,255, 145,135,14,255, 209,199,24,255, 243,239,36,255, 254,253,46,255, 254,254,50,255, 254,254,56,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 255,255,55,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,55,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,54,255, 253,253,51,255, 243,240,46,255, 210,205,36,255, 137,131,25,255, 64,58,16,255, 20,20,13,255, 10,10,10,255, 28,28,28,255, 125,125,125,255, 237,237,237,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,243,255,255, 254,100,254,255, 255,58,255,255, 254,120,254,255, 255,136,255,255, 254,141,254,255, 255,142,255,255, 254,143,254,255, 255,142,255,255, 254,140,254,255, 255,133,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,129,254,255, 255,132,255,255, 254,135,254,255, 255,135,255,255, 254,135,254,255, 255,135,255,255, 254,135,254,255, 255,135,255,255, 254,136,254,255, 255,135,255,255, 254,139,254,255, 255,137,255,255, 254,139,254,255, 255,137,255,255, 254,139,254,255, 255,139,255,255, 254,140,254,255, 255,137,255,255, 254,134,254,255, 255,132,255,255, 254,129,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 253,115,253,255, 211,80,213,255, 91,43,92,255, 155,150,155,255, 254,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 236,223,223,255, 157,67,67,255, 183,30,30,255, 239,54,54,255, 251,76,76,255, 254,91,91,255, 253,97,97,255, 254,102,102,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,101,101,255, 254,97,97,255, 253,90,90,255, 254,84,84,255, 253,71,71,255, 253,64,64,255, 249,60,60,255, 252,56,56,255, 253,59,59,255, 254,66,66,255, 253,73,73,255, 254,82,82,255, 253,86,86,255, 254,99,99,255, 253,115,115,255, 254,117,117,255, 253,118,118,255, 254,117,117,255, 253,111,111,255, 254,104,104,255, 253,105,105,255, 254,103,103,255, 253,104,104,255, 254,102,102,255, 253,97,97,255, 249,87,87,255, 207,61,61,255, 121,39,39,255, 47,21,21,255, 15,13,13,255, 10,10,10,255, 25,25,25,255, 158,158,158,255, 251,251,251,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 238,247,237,255, 93,160,93,255, 15,32,15,255, 17,18,17,255, 49,49,49,255, 96,96,96,255, 163,163,163,255, 216,216,216,255, 242,242,242,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 239,239,242,255, 179,179,189,255, 90,89,107,255, 31,28,47,255, 16,16,39,255, 27,25,61,255, 38,36,86,255, 39,35,90,255, 39,33,84,255, 41,39,91,255, 43,41,96,255, 42,41,95,255, 42,41,97,255, 44,41,93,255, 40,36,79,255, 30,30,59,255, 23,23,37,255, 14,14,23,255, 14,14,15,255, 11,11,11,255, 15,15,15,255, 40,40,40,255, 90,90,90,255, 179,179,179,255, 248,248,248,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 250,250,246,255, 182,176,128,255, 125,117,23,255, 162,152,14,255, 216,209,23,255, 246,242,34,255, 253,252,47,255, 253,253,51,255, 254,254,53,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,58,255, 253,253,59,255, 254,254,59,255, 253,253,60,255, 254,254,60,255, 253,253,60,255, 254,254,60,255, 253,253,60,255, 254,254,60,255, 253,253,58,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 251,250,50,255, 227,226,41,255, 167,159,28,255, 85,82,18,255, 37,35,16,255, 14,14,10,255, 18,18,18,255, 102,102,102,255, 207,207,207,255, 253,253,253,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,252,255,255, 255,120,255,255, 254,51,254,255, 253,89,253,255, 254,104,254,255, 253,114,253,255, 254,126,254,255, 253,134,253,255, 254,145,254,255, 253,150,253,255, 254,147,254,255, 253,133,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,127,254,255, 253,122,253,255, 254,118,254,255, 253,122,253,255, 254,129,254,255, 253,127,253,255, 254,129,254,255, 253,130,253,255, 254,130,254,255, 253,127,253,255, 254,130,254,255, 253,132,253,255, 254,131,254,255, 253,134,253,255, 254,133,254,255, 253,133,253,255, 254,134,254,255, 253,136,253,255, 254,139,254,255, 253,142,253,255, 254,143,254,255, 253,147,253,255, 254,146,254,255, 253,140,253,255, 254,133,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,123,254,255, 238,96,239,255, 130,47,130,255, 101,88,101,255, 240,240,240,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 245,238,238,255, 183,115,115,255, 189,34,34,255, 242,57,57,255, 254,79,79,255, 254,93,93,255, 255,100,100,255, 254,102,102,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,102,102,255, 255,98,98,255, 254,87,87,255, 255,78,78,255, 254,67,67,255, 243,55,55,255, 229,37,37,255, 216,33,33,255, 221,54,54,255, 247,114,114,255, 254,138,138,255, 255,127,127,255, 254,113,113,255, 255,116,116,255, 254,85,85,255, 255,74,74,255, 254,81,81,255, 255,102,102,255, 254,118,118,255, 255,124,124,255, 254,122,122,255, 255,111,111,255, 254,104,104,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,102,102,255, 255,98,98,255, 250,87,87,255, 210,61,61,255, 130,40,40,255, 52,21,21,255, 15,13,13,255, 11,11,11,255, 49,49,49,255, 184,184,184,255, 253,253,253,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,254,254,255, 182,221,177,255, 74,197,65,255, 56,113,51,255, 24,35,23,255, 16,20,16,255, 11,13,11,255, 22,22,22,255, 49,49,49,255, 96,96,96,255, 183,183,183,255, 234,234,234,255, 251,251,251,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,254,254,255, 201,199,209,255, 92,90,116,255, 32,32,58,255, 19,17,57,255, 28,27,75,255, 39,36,108,255, 58,54,142,255, 75,72,175,255, 77,76,181,255, 77,71,176,255, 77,75,180,255, 82,79,190,255, 86,81,191,255, 86,83,193,255, 88,83,195,255, 81,77,181,255, 69,65,151,255, 60,56,129,255, 48,45,97,255, 36,34,66,255, 24,23,35,255, 12,12,14,255, 12,12,12,255, 10,10,10,255, 40,40,40,255, 164,164,164,255, 248,248,248,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,254,253,255, 206,204,167,255, 134,126,27,255, 173,163,15,255, 231,222,25,255, 249,244,39,255, 254,254,46,255, 254,254,53,255, 254,254,58,255, 254,254,55,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 255,255,55,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,55,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,59,255, 254,254,58,255, 255,255,56,255, 254,254,59,255, 255,255,56,255, 254,254,58,255, 255,255,62,255, 254,254,60,255, 255,255,63,255, 254,254,63,255, 255,255,64,255, 254,254,63,255, 255,255,60,255, 254,254,59,255, 255,255,56,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,55,255, 254,254,56,255, 254,254,51,255, 237,236,44,255, 199,193,34,255, 138,129,27,255, 60,56,16,255, 17,17,11,255, 14,14,14,255, 68,68,68,255, 202,202,202,255, 253,253,253,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,254,255,255, 255,187,255,255, 255,126,255,255, 254,88,254,255, 255,73,255,255, 254,62,254,255, 255,72,255,255, 254,89,254,255, 255,116,255,255, 254,144,254,255, 255,154,255,255, 254,139,254,255, 255,129,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,126,255,255, 253,113,253,255, 238,87,239,255, 232,85,233,255, 247,97,248,255, 254,96,254,255, 255,96,255,255, 254,95,254,255, 255,94,255,255, 254,94,254,255, 255,93,255,255, 254,90,254,255, 255,88,255,255, 254,90,254,255, 255,87,255,255, 254,88,254,255, 255,91,255,255, 254,97,254,255, 255,108,255,255, 254,116,254,255, 255,127,255,255, 254,135,254,255, 255,147,255,255, 254,152,254,255, 255,147,255,255, 254,134,254,255, 255,129,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,126,255,255, 250,111,250,255, 166,60,170,255, 71,50,72,255, 224,223,224,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 250,245,245,255, 194,130,130,255, 181,38,38,255, 241,54,54,255, 253,80,80,255, 254,96,96,255, 253,103,103,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,100,100,255, 253,94,94,255, 254,84,84,255, 250,69,69,255, 235,49,49,255, 199,35,35,255, 175,38,38,255, 196,99,99,255, 221,155,155,255, 245,218,218,255, 254,247,247,255, 0,0,0,0, 255,250,250,255, 255,244,244,255, 255,244,244,255, 255,229,229,255, 255,197,197,255, 255,155,155,255, 255,116,116,255, 253,86,86,255, 254,105,105,255, 253,120,120,255, 254,122,122,255, 253,112,112,255, 254,108,108,255, 253,105,105,255, 254,103,103,255, 253,104,104,255, 254,102,102,255, 253,100,100,255, 251,88,88,255, 219,64,64,255, 139,40,40,255, 47,20,20,255, 14,13,13,255, 11,11,11,255, 62,62,62,255, 202,202,202,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 238,247,237,255, 104,197,101,255, 97,235,90,255, 124,226,116,255, 84,164,82,255, 57,115,53,255, 39,78,38,255, 27,46,24,255, 18,27,18,255, 11,14,11,255, 30,31,30,255, 71,71,71,255, 121,121,121,255, 149,149,149,255, 212,212,212,255, 240,240,240,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 248,248,250,255, 171,169,187,255, 59,58,97,255, 27,24,88,255, 37,36,111,255, 52,46,141,255, 68,62,164,255, 83,78,197,255, 98,92,217,255, 114,109,238,255, 120,114,246,255, 120,112,246,255, 119,116,243,255, 122,114,245,255, 123,116,245,255, 124,120,249,255, 126,118,246,255, 123,114,243,255, 118,108,237,255, 110,99,224,255, 95,88,202,255, 82,80,179,255, 66,60,135,255, 42,37,81,255, 21,21,39,255, 14,14,17,255, 10,10,10,255, 39,39,39,255, 129,129,129,255, 221,221,221,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 253,253,251,255, 212,208,169,255, 153,147,58,255, 167,157,15,255, 232,223,26,255, 251,250,42,255, 253,253,50,255, 253,253,53,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 253,253,55,255, 254,254,55,255, 253,253,53,255, 254,254,51,255, 253,253,48,255, 254,254,43,255, 253,252,44,255, 254,254,39,255, 253,253,39,255, 254,254,43,255, 253,253,45,255, 254,254,49,255, 253,253,54,255, 254,254,58,255, 253,253,59,255, 254,254,62,255, 253,253,65,255, 254,254,62,255, 253,253,61,255, 254,254,60,255, 253,253,57,255, 254,254,55,255, 253,253,56,255, 254,254,56,255, 253,253,54,255, 251,250,47,255, 233,229,43,255, 168,160,29,255, 80,76,18,255, 19,19,11,255, 14,14,14,255, 62,62,62,255, 188,188,188,255, 253,253,253,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,250,255,255, 255,234,255,255, 255,221,255,255, 255,170,255,255, 254,125,254,255, 253,51,253,255, 254,72,254,255, 253,124,253,255, 254,148,254,255, 253,139,253,255, 254,129,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,125,254,255, 249,105,249,255, 205,69,207,255, 124,39,130,255, 131,38,137,255, 223,78,229,255, 251,101,252,255, 253,122,253,255, 254,127,254,255, 253,122,253,255, 255,125,255,255, 255,146,255,255, 255,148,255,255, 255,149,255,255, 255,148,255,255, 255,149,255,255, 254,135,254,255, 253,121,253,255, 254,94,254,255, 253,82,253,255, 254,72,254,255, 253,83,253,255, 254,114,254,255, 253,134,253,255, 254,147,254,255, 253,150,253,255, 254,144,254,255, 253,134,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 252,123,252,255, 206,80,212,255, 85,40,87,255, 170,169,170,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,254,254,255, 221,181,181,255, 184,46,46,255, 231,50,50,255, 254,79,79,255, 254,96,96,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,99,99,255, 255,90,90,255, 254,79,79,255, 246,58,58,255, 209,38,38,255, 148,21,21,255, 119,38,38,255, 197,161,161,255, 248,242,242,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,254,254,255, 255,225,225,255, 254,148,148,255, 255,77,77,255, 254,96,96,255, 255,120,120,255, 254,123,123,255, 255,114,114,255, 254,104,104,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,101,101,255, 252,88,88,255, 215,64,64,255, 118,37,37,255, 34,17,17,255, 14,13,13,255, 12,12,12,255, 88,88,88,255, 233,233,233,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 187,223,184,255, 72,204,66,255, 124,253,115,255, 149,254,141,255, 137,249,131,255, 121,237,115,255, 103,209,96,255, 84,168,76,255, 61,125,58,255, 38,76,37,255, 26,43,23,255, 17,24,17,255, 12,13,11,255, 17,17,17,255, 39,39,39,255, 87,87,87,255, 148,148,148,255, 215,215,215,255, 242,242,242,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 253,253,254,255, 189,189,205,255, 46,44,93,255, 32,27,110,255, 59,52,170,255, 78,76,199,255, 97,86,224,255, 108,103,239,255, 119,113,250,255, 127,123,253,255, 135,127,254,255, 136,130,254,255, 137,128,254,255, 138,131,254,255, 138,129,254,255, 137,130,254,255, 138,129,254,255, 138,131,254,255, 138,129,254,255, 137,130,254,255, 135,127,254,255, 133,123,253,255, 124,120,250,255, 113,102,231,255, 89,82,189,255, 62,59,134,255, 42,40,78,255, 19,17,24,255, 10,10,10,255, 17,17,17,255, 89,89,89,255, 220,220,220,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 233,231,207,255, 155,147,46,255, 161,148,14,255, 228,217,25,255, 253,252,41,255, 254,254,50,255, 254,254,54,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,55,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 255,255,55,255, 254,254,58,255, 255,255,56,255, 254,254,55,255, 255,255,52,255, 254,254,48,255, 255,255,43,255, 253,251,37,255, 247,244,29,255, 244,237,31,255, 246,239,46,255, 252,243,62,255, 255,252,101,255, 254,254,105,255, 255,255,105,255, 254,254,83,255, 255,255,54,255, 254,254,45,255, 255,255,39,255, 254,254,45,255, 255,255,52,255, 254,254,61,255, 255,255,64,255, 254,254,67,255, 255,255,66,255, 254,254,60,255, 255,255,56,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,54,255, 254,254,52,255, 244,243,44,255, 182,175,29,255, 87,83,19,255, 28,28,13,255, 12,12,12,255, 45,45,45,255, 155,155,155,255, 241,241,241,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,224,255,255, 254,66,254,255, 255,52,255,255, 254,108,254,255, 255,144,255,255, 254,143,254,255, 255,132,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,126,255,255, 251,108,251,255, 202,73,209,255, 92,31,97,255, 54,37,56,255, 202,184,204,255, 254,236,254,255, 254,243,254,255, 255,245,255,255, 254,244,254,255, 255,247,255,255, 255,254,255,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,250,255,255, 254,244,254,255, 255,232,255,255, 254,223,254,255, 255,169,255,255, 254,85,254,255, 255,59,255,255, 254,84,254,255, 255,116,255,255, 254,146,254,255, 255,155,255,255, 254,147,254,255, 255,134,255,255, 254,128,254,255, 255,128,255,255, 254,126,254,255, 236,102,240,255, 113,44,117,255, 121,115,122,255, 248,248,248,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 245,230,230,255, 195,83,83,255, 232,44,44,255, 251,70,70,255, 254,91,91,255, 253,103,103,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,100,100,255, 253,92,92,255, 254,76,76,255, 245,59,59,255, 196,35,35,255, 115,19,19,255, 98,43,43,255, 186,164,164,255, 252,250,250,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,246,246,255, 255,186,186,255, 253,100,100,255, 254,97,97,255, 253,121,121,255, 254,119,119,255, 253,111,111,255, 254,104,104,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,98,98,255, 248,84,84,255, 192,58,58,255, 85,30,30,255, 24,14,14,255, 13,12,12,255, 22,22,22,255, 157,157,157,255, 253,253,253,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 249,252,249,255, 137,208,136,255, 88,225,80,255, 142,254,132,255, 155,253,145,255, 147,254,139,255, 143,253,135,255, 142,252,132,255, 135,246,122,255, 116,229,111,255, 98,205,95,255, 77,156,72,255, 54,111,53,255, 39,74,37,255, 24,34,23,255, 16,19,16,255, 11,11,11,255, 17,17,17,255, 48,48,48,255, 95,95,95,255, 161,161,161,255, 217,217,217,255, 251,251,251,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 218,217,229,255, 66,64,120,255, 30,28,114,255, 59,53,170,255, 91,86,225,255, 111,109,247,255, 126,117,252,255, 130,125,253,255, 135,127,254,255, 138,129,253,255, 138,130,254,255, 138,129,253,255, 138,131,254,255, 138,129,253,255, 138,130,254,255, 138,129,253,255, 138,131,254,255, 138,129,253,255, 138,130,254,255, 138,129,253,255, 138,130,254,255, 138,129,253,255, 137,131,254,255, 135,125,252,255, 125,116,248,255, 103,98,221,255, 77,73,169,255, 45,40,87,255, 17,17,24,255, 10,10,10,255, 17,17,17,255, 89,89,89,255, 219,219,219,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 248,246,238,255, 186,177,101,255, 157,148,18,255, 209,202,24,255, 250,248,36,255, 254,253,48,255, 253,253,54,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 253,253,55,255, 254,254,53,255, 253,253,48,255, 254,253,38,255, 247,245,33,255, 230,226,27,255, 218,213,41,255, 227,223,102,255, 242,236,159,255, 251,247,212,255, 254,252,229,255, 255,254,243,255, 255,255,244,255, 255,255,244,255, 255,255,237,255, 255,255,220,255, 255,255,185,255, 254,254,120,255, 253,253,70,255, 254,254,36,255, 253,253,39,255, 254,254,50,255, 253,253,63,255, 254,254,67,255, 253,253,67,255, 254,254,62,255, 253,253,57,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 253,253,56,255, 254,254,53,255, 242,240,44,255, 186,179,29,255, 103,102,21,255, 30,30,13,255, 12,12,12,255, 26,26,26,255, 151,151,151,255, 250,250,250,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,230,254,255, 253,77,253,255, 254,43,254,255, 253,96,253,255, 254,136,254,255, 253,146,253,255, 254,136,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,127,254,255, 250,111,251,255, 207,77,213,255, 92,31,99,255, 55,37,57,255, 201,200,201,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,253,255,255, 255,215,255,255, 254,129,254,255, 253,63,253,255, 254,72,254,255, 253,115,253,255, 254,147,254,255, 253,155,253,255, 254,147,254,255, 253,134,253,255, 254,128,254,255, 253,128,253,255, 250,115,251,255, 158,60,162,255, 76,61,78,255, 212,212,212,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 222,163,163,255, 215,43,43,255, 253,66,66,255, 254,87,87,255, 255,97,97,255, 254,102,102,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,102,102,255, 255,96,96,255, 254,79,79,255, 242,53,53,255, 193,35,35,255, 109,17,17,255, 94,53,53,255, 204,191,191,255, 251,250,250,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,253,253,255, 254,182,182,255, 255,84,84,255, 254,113,113,255, 255,123,123,255, 254,116,116,255, 255,104,104,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,102,102,255, 254,96,96,255, 240,75,75,255, 158,46,46,255, 58,22,22,255, 19,11,11,255, 13,12,12,255, 74,74,74,255, 233,233,233,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 234,250,233,255, 106,220,100,255, 118,249,107,255, 164,255,154,255, 172,254,161,255, 163,255,155,255, 152,254,144,255, 147,255,137,255, 145,254,135,255, 143,255,135,255, 138,253,132,255, 130,243,121,255, 115,225,108,255, 98,199,93,255, 75,150,70,255, 51,97,50,255, 32,58,32,255, 23,33,23,255, 16,19,16,255, 11,12,11,255, 21,21,21,255, 52,52,52,255, 123,123,123,255, 181,181,181,255, 229,229,229,255, 251,251,251,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 243,243,248,255, 124,121,168,255, 35,29,119,255, 58,56,178,255, 90,82,219,255, 118,110,249,255, 133,124,254,255, 136,128,254,255, 137,131,254,255, 138,129,254,255, 138,131,254,255, 138,129,254,255, 138,131,254,255, 138,129,254,255, 138,131,254,255, 138,129,254,255, 138,130,254,255, 138,129,254,255, 138,131,254,255, 138,129,254,255, 138,131,254,255, 138,129,254,255, 138,131,254,255, 138,129,254,255, 138,131,254,255, 137,127,254,255, 128,123,252,255, 112,103,230,255, 80,73,171,255, 47,43,87,255, 19,17,27,255, 10,10,12,255, 16,16,16,255, 88,88,88,255, 219,219,219,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,254,252,255, 216,213,161,255, 166,152,28,255, 209,196,23,255, 246,241,33,255, 254,254,44,255, 254,254,52,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,55,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 255,255,53,255, 254,254,49,255, 255,254,43,255, 251,249,34,255, 228,221,23,255, 199,192,45,255, 205,202,118,255, 237,234,201,255, 252,251,243,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,255,248,255, 254,254,226,255, 255,255,154,255, 254,254,69,255, 255,255,33,255, 254,254,45,255, 255,255,62,255, 254,254,66,255, 255,255,68,255, 254,254,63,255, 255,255,60,255, 254,254,59,255, 255,255,55,255, 254,254,58,255, 255,255,54,255, 254,254,52,255, 248,247,44,255, 206,203,32,255, 106,105,22,255, 30,30,13,255, 13,13,12,255, 46,46,46,255, 198,198,198,255, 253,253,253,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,235,255,255, 254,88,254,255, 255,37,255,255, 254,89,254,255, 255,132,255,255, 254,143,254,255, 255,136,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,126,255,255, 254,112,254,255, 222,78,223,255, 107,37,108,255, 48,31,51,255, 179,178,180,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,244,255,255, 254,175,254,255, 255,63,255,255, 254,74,254,255, 255,119,255,255, 254,147,254,255, 255,155,255,255, 254,144,254,255, 255,129,255,255, 254,128,254,255, 254,121,254,255, 203,82,209,255, 70,35,75,255, 153,149,153,255, 254,254,254,255, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 252,245,245,255, 220,110,110,255, 243,53,53,255, 254,85,85,255, 253,99,99,255, 254,102,102,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,98,98,255, 254,82,82,255, 237,60,60,255, 180,35,35,255, 109,19,19,255, 77,32,32,255, 181,166,166,255, 252,252,252,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,239,239,255, 255,116,116,255, 253,94,94,255, 254,120,120,255, 253,121,121,255, 254,108,108,255, 253,105,105,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,101,101,255, 252,90,90,255, 219,63,63,255, 109,34,34,255, 35,14,14,255, 14,10,10,255, 27,27,27,255, 176,176,176,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 250,255,250,255, 204,253,201,255, 134,253,121,255, 139,254,128,255, 168,253,156,255, 179,254,166,255, 174,253,159,255, 160,254,147,255, 147,253,136,255, 145,254,136,255, 145,253,136,255, 144,254,135,255, 143,253,134,255, 138,251,132,255, 126,239,119,255, 112,217,102,255, 90,186,85,255, 75,149,70,255, 49,94,48,255, 28,52,27,255, 20,28,20,255, 16,19,16,255, 11,11,11,255, 28,28,28,255, 56,56,56,255, 131,131,131,255, 188,188,188,255, 239,239,239,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 246,246,250,255, 164,161,199,255, 42,37,128,255, 60,48,178,255, 91,82,226,255, 113,104,244,255, 132,122,253,255, 138,128,253,255, 138,131,254,255, 138,129,253,255, 138,131,254,255, 138,129,253,255, 138,130,254,255, 138,129,253,255, 138,131,254,255, 138,129,253,255, 138,130,254,255, 138,129,253,255, 138,131,254,255, 138,129,253,255, 138,130,254,255, 138,129,253,255, 138,130,254,255, 138,129,253,255, 138,131,254,255, 138,129,253,255, 138,130,254,255, 138,129,253,255, 136,123,252,255, 116,103,230,255, 81,73,171,255, 46,40,93,255, 18,18,34,255, 10,10,13,255, 17,17,17,255, 97,97,97,255, 231,231,231,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 241,238,218,255, 177,168,56,255, 197,183,18,255, 247,242,31,255, 253,253,40,255, 253,253,50,255, 254,254,58,255, 253,253,57,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 253,253,54,255, 254,254,48,255, 250,250,38,255, 232,225,29,255, 193,184,26,255, 178,170,76,255, 224,223,191,255, 251,251,247,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,255,253,255, 255,255,221,255, 254,254,122,255, 253,253,43,255, 254,254,41,255, 253,253,55,255, 254,254,65,255, 253,253,68,255, 254,254,66,255, 253,253,61,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,53,255, 249,249,45,255, 206,200,34,255, 101,99,21,255, 28,28,13,255, 15,15,14,255, 73,73,73,255, 220,220,220,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,242,254,255, 253,101,253,255, 254,37,254,255, 253,89,253,255, 254,132,254,255, 253,143,253,255, 254,136,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,127,254,255, 253,115,253,255, 221,78,227,255, 107,38,113,255, 46,29,46,255, 172,170,172,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,248,255,255, 254,155,254,255, 253,59,253,255, 254,83,254,255, 253,129,253,255, 254,150,254,255, 253,152,253,255, 254,134,254,255, 253,128,253,255, 254,126,254,255, 234,100,236,255, 108,41,111,255, 101,91,101,255, 240,240,240,255, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 254,253,253,255, 235,186,186,255, 222,53,53,255, 253,70,70,255, 255,96,96,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,102,102,255, 255,99,99,255, 254,89,89,255, 245,68,68,255, 189,41,41,255, 100,17,17,255, 62,19,19,255, 146,126,126,255, 247,246,246,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,254,254,255, 255,177,177,255, 254,80,80,255, 255,106,106,255, 254,119,119,255, 255,113,113,255, 254,104,104,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,98,98,255, 245,76,76,255, 172,48,48,255, 79,24,24,255, 22,14,14,255, 12,11,11,255, 94,94,94,255, 239,239,239,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,255,254,255, 225,254,223,255, 146,254,138,255, 131,252,115,255, 156,254,142,255, 177,254,164,255, 170,255,158,255, 153,254,143,255, 146,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 144,254,135,255, 142,254,133,255, 137,251,128,255, 126,240,119,255, 108,215,103,255, 86,179,82,255, 72,142,67,255, 50,96,49,255, 30,57,30,255, 17,29,17,255, 16,20,16,255, 15,17,15,255, 32,33,31,255, 88,90,88,255, 185,185,185,255, 254,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 252,252,254,255, 170,169,209,255, 48,44,140,255, 50,40,169,255, 92,78,225,255, 116,109,246,255, 129,125,254,255, 138,127,254,255, 138,130,254,255, 138,129,254,255, 138,131,254,255, 138,129,254,255, 138,131,254,255, 138,129,254,255, 138,131,254,255, 138,129,254,255, 138,131,254,255, 138,129,254,255, 138,130,254,255, 139,129,254,255, 139,132,254,255, 139,129,254,255, 139,132,254,255, 140,129,254,255, 139,132,254,255, 138,129,254,255, 138,131,254,255, 138,129,254,255, 138,131,254,255, 138,128,254,255, 136,123,253,255, 116,105,230,255, 81,74,175,255, 49,45,107,255, 23,23,43,255, 12,12,13,255, 21,21,21,255, 125,125,125,255, 247,247,247,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 253,253,249,255, 215,208,140,255, 183,171,21,255, 238,230,25,255, 254,254,39,255, 254,254,48,255, 254,254,56,255, 254,254,57,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,55,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,55,255, 254,254,52,255, 254,254,48,255, 249,247,37,255, 218,213,31,255, 168,162,51,255, 184,181,137,255, 240,239,230,255, 254,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,255,244,255, 254,254,176,255, 255,255,75,255, 254,254,42,255, 255,255,53,255, 254,254,63,255, 255,255,67,255, 254,254,66,255, 255,255,60,255, 254,254,59,255, 255,255,56,255, 254,254,58,255, 255,255,55,255, 254,254,56,255, 248,247,45,255, 187,180,29,255, 99,94,21,255, 30,28,13,255, 18,18,16,255, 123,123,123,255, 237,237,237,255, 254,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,248,255,255, 254,114,254,255, 255,37,255,255, 254,88,254,255, 255,131,255,255, 254,144,254,255, 255,138,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,127,255,255, 254,116,254,255, 222,78,226,255, 113,39,118,255, 46,21,46,255, 153,148,153,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,241,255,255, 254,122,254,255, 255,57,255,255, 254,97,254,255, 255,138,255,255, 254,153,254,255, 255,147,255,255, 254,134,254,255, 255,129,255,255, 250,116,250,255, 164,66,168,255, 87,67,88,255, 223,223,223,255, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 249,233,233,255, 208,74,74,255, 240,51,51,255, 253,85,85,255, 254,104,104,255, 253,105,105,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,99,99,255, 254,91,91,255, 250,73,73,255, 212,49,49,255, 123,27,27,255, 56,13,13,255, 94,68,68,255, 228,225,225,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,229,229,255, 253,88,88,255, 254,93,93,255, 253,119,119,255, 254,116,116,255, 253,106,106,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,103,103,255, 253,94,94,255, 222,65,65,255, 140,40,40,255, 47,17,17,255, 15,12,12,255, 24,24,24,255, 148,148,148,255, 253,253,253,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,255,254,255, 231,251,230,255, 101,215,91,255, 99,241,83,255, 147,253,134,255, 163,254,154,255, 152,253,147,255, 145,254,138,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 144,254,135,255, 141,251,134,255, 137,250,131,255, 133,243,121,255, 114,225,110,255, 96,202,93,255, 75,153,70,255, 56,113,53,255, 41,80,35,255, 25,47,17,255, 52,63,51,255, 194,195,194,255, 254,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 229,228,241,255, 79,71,167,255, 49,43,178,255, 88,79,230,255, 122,112,249,255, 136,127,253,255, 139,132,253,255, 138,130,254,255, 138,129,253,255, 138,131,254,255, 138,129,253,255, 138,131,254,255, 138,129,253,255, 138,130,254,255, 138,129,253,255, 138,131,254,255, 139,129,253,255, 139,131,254,255, 142,129,253,255, 143,133,254,255, 144,135,253,255, 146,136,254,255, 148,141,253,255, 152,141,254,255, 147,140,253,255, 144,137,254,255, 143,132,253,255, 139,132,254,255, 138,129,253,255, 138,130,254,255, 138,128,253,255, 136,124,252,255, 119,108,238,255, 89,82,197,255, 54,49,113,255, 19,19,30,255, 10,10,10,255, 35,35,35,255, 182,182,182,255, 254,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,254,253,255, 229,227,173,255, 187,179,38,255, 218,207,20,255, 251,250,39,255, 253,253,48,255, 254,254,56,255, 253,253,57,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 253,253,51,255, 253,253,41,255, 241,236,35,255, 192,181,22,255, 144,141,58,255, 214,213,192,255, 251,251,250,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,255,253,255, 255,255,227,255, 255,255,132,255, 254,254,41,255, 253,253,41,255, 254,254,57,255, 253,253,65,255, 254,254,66,255, 253,253,57,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 253,253,56,255, 254,254,53,255, 245,242,44,255, 203,194,32,255, 106,98,21,255, 31,30,13,255, 28,28,27,255, 112,112,112,255, 239,239,239,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,254,255,255, 255,127,255,255, 254,36,254,255, 253,81,253,255, 254,130,254,255, 253,143,253,255, 254,136,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,119,253,255, 221,78,227,255, 115,40,122,255, 47,21,47,255, 151,144,151,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,225,255,255, 254,95,254,255, 253,53,253,255, 254,98,254,255, 253,140,253,255, 254,150,254,255, 253,135,253,255, 254,130,254,255, 252,125,252,255, 229,104,230,255, 138,64,138,255, 185,172,185,255, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 240,193,193,255, 223,50,50,255, 251,70,70,255, 254,97,97,255, 255,108,108,255, 254,104,104,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,97,97,255, 253,80,80,255, 233,62,62,255, 158,35,35,255, 71,16,16,255, 62,30,30,255, 173,159,159,255, 253,253,253,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,245,245,255, 254,121,121,255, 255,76,76,255, 254,108,108,255, 255,115,115,255, 254,107,107,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,98,98,255, 246,78,78,255, 190,53,53,255, 81,25,25,255, 25,12,12,255, 14,11,11,255, 83,83,83,255, 241,241,241,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 213,236,212,255, 66,181,64,255, 86,233,78,255, 137,254,128,255, 158,255,145,255, 150,254,141,255, 145,255,137,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 146,255,137,255, 145,254,137,255, 146,255,137,255, 146,254,136,255, 143,255,135,255, 138,253,132,255, 130,243,120,255, 109,224,99,255, 73,161,62,255, 34,71,23,255, 107,118,104,255, 250,250,250,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 189,189,223,255, 50,42,167,255, 74,65,223,255, 114,107,253,255, 136,128,254,255, 142,133,254,255, 138,131,254,255, 138,129,254,255, 138,130,254,255, 138,129,254,255, 138,131,254,255, 138,129,254,255, 138,131,254,255, 138,129,254,255, 138,131,254,255, 138,129,254,255, 140,131,254,255, 142,131,254,255, 139,130,254,255, 137,129,254,255, 137,130,254,255, 143,133,254,255, 148,138,254,255, 154,146,254,255, 159,149,254,255, 160,151,254,255, 158,148,254,255, 151,143,254,255, 143,134,254,255, 139,129,254,255, 138,130,254,255, 138,129,254,255, 134,124,254,255, 118,108,238,255, 76,73,170,255, 32,32,68,255, 13,13,17,255, 11,11,11,255, 91,91,91,255, 238,238,238,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 253,252,244,255, 208,203,89,255, 199,187,15,255, 243,237,30,255, 254,254,48,255, 254,254,56,255, 254,254,57,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,55,255, 254,254,58,255, 254,254,56,255, 254,254,56,255, 254,254,54,255, 254,253,48,255, 240,236,34,255, 191,180,20,255, 129,124,50,255, 208,208,193,255, 254,254,253,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,254,233,255, 241,235,82,255, 239,233,21,255, 252,251,44,255, 254,254,61,255, 255,255,64,255, 254,254,59,255, 255,255,56,255, 254,254,58,255, 255,255,55,255, 254,254,58,255, 255,255,54,255, 254,254,51,255, 249,248,44,255, 188,182,29,255, 82,78,19,255, 17,17,10,255, 29,29,28,255, 175,175,175,255, 253,253,253,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,254,255,255, 255,127,255,255, 255,36,255,255, 254,80,254,255, 255,127,255,255, 254,144,254,255, 255,139,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,119,254,255, 222,79,227,255, 116,42,123,255, 46,21,47,255, 150,144,150,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,254,255,255, 255,208,255,255, 254,81,254,255, 255,62,255,255, 254,106,254,255, 255,108,255,255, 254,98,254,255, 255,100,255,255, 254,100,254,255, 255,105,255,255, 241,130,241,255, 235,200,235,255, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 253,246,246,255, 228,115,115,255, 243,51,51,255, 254,84,84,255, 253,104,104,255, 254,107,107,255, 253,105,105,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,100,100,255, 253,90,90,255, 243,67,67,255, 197,46,46,255, 99,22,22,255, 53,16,16,255, 139,120,120,255, 248,246,246,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,254,254,255, 253,157,157,255, 254,62,62,255, 253,103,103,255, 254,116,116,255, 253,110,110,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,102,102,255, 252,87,87,255, 225,63,63,255, 124,36,36,255, 39,16,16,255, 16,10,10,255, 48,48,48,255, 219,219,219,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 249,252,249,255, 138,204,134,255, 58,197,51,255, 103,248,98,255, 141,253,134,255, 152,254,147,255, 147,253,138,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 150,254,138,255, 153,253,143,255, 157,254,147,255, 156,253,149,255, 151,254,142,255, 148,253,141,255, 135,253,128,255, 105,231,96,255, 54,133,49,255, 34,57,30,255, 178,185,177,255, 254,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 251,251,253,255, 144,144,204,255, 48,46,184,255, 93,83,241,255, 127,118,254,255, 142,132,253,255, 140,131,254,255, 138,129,253,255, 138,130,254,255, 138,129,253,255, 138,131,254,255, 138,129,253,255, 138,131,254,255, 138,129,253,255, 138,130,254,255, 138,127,253,255, 135,125,254,255, 128,120,253,255, 124,113,253,255, 116,108,252,255, 106,96,251,255, 100,93,249,255, 105,95,250,255, 110,99,250,255, 125,114,253,255, 145,132,253,255, 153,144,254,255, 164,153,253,255, 167,154,254,255, 160,146,253,255, 148,138,254,255, 139,131,253,255, 138,131,254,255, 136,129,253,255, 130,123,251,255, 101,93,214,255, 56,51,120,255, 21,20,38,255, 12,12,15,255, 30,30,30,255, 179,179,179,255, 254,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 241,237,194,255, 202,190,32,255, 226,214,21,255, 251,251,39,255, 254,254,52,255, 253,253,56,255, 254,254,58,255, 253,253,57,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 253,253,56,255, 254,254,56,255, 253,253,55,255, 254,254,50,255, 246,244,36,255, 192,186,21,255, 113,108,21,255, 175,173,150,255, 252,252,251,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,255,254,255, 242,239,189,255, 213,198,38,255, 224,213,17,255, 251,248,34,255, 253,253,50,255, 254,254,59,255, 253,253,57,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 253,253,56,255, 254,254,56,255, 253,253,54,255, 254,254,51,255, 237,234,41,255, 156,150,28,255, 52,49,16,255, 17,17,10,255, 96,96,92,255, 243,243,243,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,254,255,255, 255,127,255,255, 254,34,254,255, 253,74,253,255, 254,124,254,255, 253,144,253,255, 254,139,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,119,253,255, 226,84,232,255, 129,46,135,255, 50,21,51,255, 151,144,151,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,252,255,255, 255,205,255,255, 254,93,254,255, 253,116,253,255, 255,151,255,255, 255,153,255,255, 255,188,255,255, 255,225,255,255, 255,232,255,255, 255,245,255,255, 255,254,255,255, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 250,231,231,255, 234,73,73,255, 252,66,66,255, 255,95,95,255, 254,105,105,255, 255,103,103,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,97,97,255, 252,81,81,255, 223,53,53,255, 149,32,32,255, 62,16,16,255, 66,39,39,255, 206,198,198,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,158,158,255, 255,54,54,255, 254,101,101,255, 255,114,114,255, 254,108,108,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,95,95,255, 243,76,76,255, 163,46,46,255, 56,20,20,255, 16,12,12,255, 25,25,25,255, 192,192,192,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 234,246,234,255, 81,183,77,255, 75,226,70,255, 120,254,112,255, 150,254,138,255, 151,255,143,255, 145,254,137,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 143,255,134,255, 139,254,128,255, 137,251,126,255, 144,252,131,255, 161,255,150,255, 166,254,155,255, 167,255,157,255, 164,254,153,255, 139,248,131,255, 91,199,79,255, 37,90,34,255, 67,81,66,255, 227,229,227,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 245,245,250,255, 98,94,187,255, 63,61,211,255, 104,100,251,255, 135,127,254,255, 144,133,254,255, 140,129,254,255, 138,131,254,255, 138,129,254,255, 138,130,254,255, 138,129,254,255, 138,131,254,255, 138,129,254,255, 138,131,254,255, 136,127,254,255, 132,120,254,255, 116,109,251,255, 101,93,246,255, 91,75,233,255, 74,63,220,255, 58,52,208,255, 69,62,210,255, 77,68,223,255, 97,86,236,255, 94,82,247,255, 96,88,253,255, 106,96,254,255, 134,119,254,255, 164,148,254,255, 171,155,254,255, 164,155,254,255, 151,144,254,255, 142,131,254,255, 138,131,254,255, 135,128,254,255, 120,111,241,255, 78,74,175,255, 39,37,80,255, 15,15,26,255, 14,14,16,255, 105,105,105,255, 250,250,250,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,254,251,255, 226,216,118,255, 221,205,19,255, 249,243,26,255, 254,254,43,255, 254,254,53,255, 254,254,58,255, 254,254,57,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,55,255, 254,254,58,255, 254,254,55,255, 254,254,50,255, 254,251,39,255, 214,207,28,255, 117,114,22,255, 135,134,101,255, 240,240,236,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 250,250,236,255, 216,206,87,255, 213,199,17,255, 239,233,24,255, 254,253,43,255, 254,254,55,255, 255,255,59,255, 254,254,59,255, 255,255,56,255, 254,254,58,255, 255,255,55,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,55,255, 253,253,49,255, 218,215,36,255, 112,107,21,255, 36,34,15,255, 75,74,70,255, 238,238,238,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,254,255,255, 255,127,255,255, 255,33,255,255, 254,71,254,255, 255,124,255,255, 254,145,254,255, 255,139,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,119,254,255, 228,88,233,255, 136,47,141,255, 53,21,54,255, 146,140,146,255, 254,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,252,255,255, 255,234,255,255, 254,240,254,255, 255,254,255,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 250,219,219,255, 239,66,66,255, 253,79,79,255, 254,104,104,255, 253,108,108,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,96,96,255, 244,70,70,255, 189,44,44,255, 103,25,25,255, 48,13,13,255, 119,105,105,255, 247,247,247,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 253,169,169,255, 254,55,55,255, 253,96,96,255, 254,112,112,255, 253,110,110,255, 254,104,104,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,98,98,255, 249,81,81,255, 185,52,52,255, 70,25,25,255, 18,11,11,255, 21,20,20,255, 156,156,156,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,254,254,255, 179,218,178,255, 63,188,59,255, 100,245,91,255, 134,254,123,255, 153,253,141,255, 150,254,138,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 144,253,134,255, 134,254,128,255, 117,249,112,255, 97,223,91,255, 92,216,84,255, 119,244,109,255, 134,252,120,255, 143,253,131,255, 153,253,141,255, 147,248,139,255, 89,178,79,255, 29,63,27,255, 135,146,135,255, 251,251,251,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 218,218,239,255, 71,63,186,255, 82,73,230,255, 118,113,253,255, 139,132,254,255, 143,133,253,255, 138,131,254,255, 138,129,253,255, 138,130,254,255, 138,129,253,255, 138,131,254,255, 138,129,253,255, 138,131,254,255, 133,127,253,255, 126,118,252,255, 110,102,246,255, 88,81,220,255, 58,55,185,255, 46,39,150,255, 68,62,157,255, 136,135,198,255, 212,210,238,255, 227,226,248,255, 234,233,252,255, 222,220,253,255, 188,185,254,255, 150,142,255,255, 110,99,253,255, 126,111,254,255, 156,145,253,255, 170,159,254,255, 168,157,253,255, 151,141,254,255, 139,131,253,255, 138,131,254,255, 128,124,252,255, 98,95,219,255, 58,57,129,255, 26,25,52,255, 12,12,18,255, 74,74,74,255, 239,239,239,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 253,252,239,255, 225,214,79,255, 238,228,18,255, 253,252,37,255, 253,253,50,255, 254,254,58,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 253,253,56,255, 254,254,52,255, 252,250,40,255, 228,218,33,255, 140,135,19,255, 108,108,65,255, 226,226,221,255, 254,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,253,251,255, 228,221,154,255, 200,190,26,255, 233,224,22,255, 252,251,34,255, 254,254,49,255, 253,253,59,255, 254,254,59,255, 253,253,57,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,53,255, 248,247,42,255, 171,162,25,255, 69,63,16,255, 69,69,55,255, 236,236,235,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,254,255,255, 255,140,255,255, 254,36,254,255, 253,70,253,255, 254,123,254,255, 253,146,253,255, 254,139,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,120,253,255, 228,90,233,255, 133,47,141,255, 52,21,56,255, 122,115,122,255, 247,247,247,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 246,174,174,255, 248,63,63,255, 254,90,90,255, 255,106,106,255, 254,105,105,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,98,98,255, 254,82,82,255, 230,59,59,255, 143,33,33,255, 65,16,16,255, 48,19,19,255, 170,160,160,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,179,179,255, 255,54,54,255, 254,90,90,255, 255,110,110,255, 254,110,110,255, 255,104,104,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,101,101,255, 253,87,87,255, 207,60,60,255, 95,30,30,255, 30,14,14,255, 15,11,11,255, 112,112,112,255, 253,252,252,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 243,250,243,255, 101,188,97,255, 73,213,64,255, 123,252,109,255, 145,255,135,255, 152,254,144,255, 147,255,138,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 144,255,136,255, 139,254,131,255, 120,247,112,255, 91,215,87,255, 61,161,56,255, 32,97,31,255, 68,156,67,255, 137,247,130,255, 135,249,126,255, 111,251,99,255, 112,251,104,255, 96,208,85,255, 66,100,64,255, 210,214,210,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,254,255,255, 171,170,222,255, 54,45,198,255, 105,92,244,255, 135,123,254,255, 144,135,254,255, 140,132,254,255, 138,129,254,255, 138,131,254,255, 138,129,254,255, 138,130,254,255, 138,129,254,255, 138,131,254,255, 134,127,254,255, 122,117,252,255, 103,95,240,255, 77,71,201,255, 46,43,136,255, 37,35,93,255, 135,135,164,255, 221,221,232,255, 250,250,252,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 252,251,255,255, 223,221,254,255, 140,131,254,255, 108,96,254,255, 146,130,254,255, 167,154,254,255, 165,155,254,255, 146,140,254,255, 139,131,254,255, 137,130,254,255, 120,114,244,255, 76,76,170,255, 38,38,77,255, 16,16,18,255, 52,52,52,255, 220,220,220,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 250,247,207,255, 229,217,41,255, 248,243,25,255, 254,254,45,255, 254,254,56,255, 254,254,59,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,55,255, 254,254,52,255, 253,252,46,255, 233,225,34,255, 159,151,20,255, 96,92,40,255, 203,203,193,255, 253,253,253,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 240,237,207,255, 196,182,49,255, 215,206,20,255, 249,247,32,255, 254,254,46,255, 255,255,55,255, 254,254,59,255, 255,255,56,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,55,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,56,255, 254,254,53,255, 250,245,42,255, 181,173,29,255, 80,79,18,255, 111,111,89,255, 244,244,242,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,155,255,255, 255,39,255,255, 254,69,254,255, 255,120,255,255, 254,144,254,255, 255,139,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,120,254,255, 231,91,235,255, 139,47,148,255, 56,21,61,255, 118,111,121,255, 247,246,247,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 255,254,254,255, 246,144,144,255, 252,63,63,255, 253,96,96,255, 254,106,106,255, 253,106,106,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,96,96,255, 250,73,73,255, 199,48,48,255, 98,24,24,255, 47,14,14,255, 85,66,66,255, 230,227,227,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 253,161,161,255, 253,45,45,255, 253,92,92,255, 254,113,113,255, 253,109,109,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,102,102,255, 253,94,94,255, 228,66,66,255, 126,33,33,255, 39,16,16,255, 18,12,12,255, 91,86,86,255, 242,241,241,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 212,234,212,255, 70,183,66,255, 93,238,83,255, 133,253,123,255, 150,254,137,255, 151,253,140,255, 145,254,137,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 144,254,136,255, 132,252,122,255, 103,225,94,255, 69,170,62,255, 39,102,34,255, 26,53,26,255, 138,154,138,255, 244,252,244,255, 243,254,242,255, 231,254,229,255, 229,254,228,255, 220,250,219,255, 213,235,213,255, 250,251,250,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 248,247,252,255, 117,114,207,255, 65,59,219,255, 119,107,253,255, 143,133,253,255, 147,136,254,255, 140,131,253,255, 138,131,254,255, 138,129,253,255, 138,130,254,255, 138,129,253,255, 138,131,254,255, 138,128,253,255, 132,120,253,255, 108,98,243,255, 81,72,207,255, 49,48,146,255, 26,25,77,255, 123,122,140,255, 245,245,247,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 231,230,255,255, 123,117,253,255, 106,92,254,255, 151,140,253,255, 169,160,254,255, 161,151,253,255, 148,136,254,255, 138,128,254,255, 131,121,249,255, 92,87,203,255, 48,46,103,255, 17,17,24,255, 32,32,32,255, 200,200,200,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,255,253,255, 246,240,159,255, 235,222,26,255, 251,250,33,255, 254,254,50,255, 253,253,60,255, 254,254,60,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 253,253,51,255, 249,242,37,255, 188,176,23,255, 99,97,19,255, 130,129,105,255, 248,248,247,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 244,244,227,255, 197,190,89,255, 189,177,17,255, 235,231,25,255, 253,253,39,255, 253,253,49,255, 254,254,59,255, 253,253,57,255, 254,254,55,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 252,250,50,255, 229,218,36,255, 127,119,21,255, 71,70,39,255, 197,197,191,255, 254,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,155,255,255, 254,38,254,255, 253,64,253,255, 254,119,254,255, 253,145,253,255, 254,139,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,120,253,255, 238,91,239,255, 153,53,159,255, 60,24,64,255, 119,111,119,255, 246,246,246,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 253,242,242,255, 246,108,108,255, 254,71,71,255, 254,104,104,255, 255,109,109,255, 254,104,104,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,100,100,255, 254,92,92,255, 238,65,65,255, 160,37,37,255, 68,16,16,255, 37,12,12,255, 126,114,114,255, 250,250,250,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 251,157,157,255, 251,46,46,255, 254,93,93,255, 255,110,110,255, 254,105,105,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,97,97,255, 238,71,71,255, 148,38,38,255, 52,16,16,255, 23,10,10,255, 88,83,83,255, 240,238,238,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 249,252,249,255, 135,199,134,255, 59,190,52,255, 113,250,102,255, 142,254,133,255, 150,255,141,255, 148,254,138,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 143,255,133,255, 121,249,117,255, 86,198,80,255, 50,119,45,255, 23,63,23,255, 88,103,88,255, 231,234,231,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 241,241,250,255, 89,85,206,255, 80,77,237,255, 129,120,254,255, 150,138,254,255, 145,136,254,255, 138,131,254,255, 138,129,254,255, 138,131,254,255, 138,129,254,255, 138,130,254,255, 138,129,254,255, 135,130,254,255, 119,113,250,255, 90,83,216,255, 57,50,155,255, 32,25,86,255, 61,59,83,255, 220,219,224,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,254,255,255, 207,205,254,255, 103,95,254,255, 114,104,254,255, 162,148,254,255, 169,157,254,255, 157,144,254,255, 139,133,254,255, 133,125,253,255, 103,93,220,255, 56,54,131,255, 19,19,39,255, 18,18,21,255, 189,189,189,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,254,250,255, 247,233,97,255, 249,236,21,255, 254,253,39,255, 254,254,50,255, 254,254,60,255, 254,254,57,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,54,255, 252,250,48,255, 223,213,34,255, 128,120,19,255, 80,78,35,255, 202,200,192,255, 254,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 253,253,250,255, 206,202,127,255, 174,163,22,255, 215,204,21,255, 252,249,39,255, 255,255,48,255, 254,254,55,255, 255,255,57,255, 254,254,58,255, 255,255,55,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,55,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,52,255, 246,241,39,255, 177,169,25,255, 86,83,33,255, 158,156,146,255, 248,248,247,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,158,255,255, 255,38,255,255, 254,60,254,255, 255,113,255,255, 254,140,254,255, 255,140,255,255, 254,130,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,120,254,255, 239,91,239,255, 155,52,159,255, 62,23,64,255, 105,97,105,255, 243,242,243,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 253,231,231,255, 246,81,81,255, 254,82,82,255, 253,108,108,255, 254,112,112,255, 253,106,106,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,99,99,255, 253,84,84,255, 226,57,57,255, 124,30,30,255, 50,14,14,255, 44,22,22,255, 179,170,170,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,251,251,255, 249,141,141,255, 252,50,50,255, 253,93,93,255, 254,112,112,255, 253,108,108,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,98,98,255, 241,72,72,255, 157,44,44,255, 56,17,17,255, 26,12,12,255, 88,83,83,255, 240,239,239,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 234,245,233,255, 80,180,78,255, 80,220,70,255, 128,253,116,255, 150,253,141,255, 150,254,141,255, 145,253,137,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 144,253,136,255, 137,253,130,255, 106,232,102,255, 64,153,57,255, 28,67,25,255, 74,90,74,255, 216,219,216,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 224,224,245,255, 82,76,216,255, 98,87,248,255, 138,129,254,255, 150,142,253,255, 143,135,254,255, 138,129,253,255, 138,131,254,255, 138,129,253,255, 138,130,254,255, 138,129,253,255, 138,130,254,255, 132,121,253,255, 107,100,238,255, 70,66,182,255, 37,34,103,255, 23,20,51,255, 131,130,144,255, 252,252,253,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 251,250,255,255, 193,190,255,255, 100,95,253,255, 131,120,254,255, 167,153,253,255, 165,154,254,255, 147,139,254,255, 138,133,253,255, 120,114,238,255, 74,71,162,255, 26,25,54,255, 19,19,24,255, 171,171,171,255, 254,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,253,241,255, 250,237,82,255, 251,245,29,255, 253,253,48,255, 254,254,56,255, 253,253,62,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 253,253,52,255, 241,237,38,255, 177,167,25,255, 77,71,16,255, 123,122,100,255, 245,244,243,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 236,232,206,255, 175,163,48,255, 183,172,15,255, 239,233,29,255, 253,253,47,255, 254,254,52,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 253,253,56,255, 254,254,55,255, 253,253,53,255, 253,252,46,255, 216,208,34,255, 116,109,20,255, 118,117,91,255, 240,240,239,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,182,255,255, 254,43,254,255, 253,58,253,255, 254,110,254,255, 253,141,253,255, 254,141,254,255, 253,130,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,122,253,255, 245,98,245,255, 168,61,172,255, 69,27,72,255, 90,78,91,255, 239,238,239,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 254,227,227,255, 251,76,76,255, 255,91,91,255, 254,109,109,255, 255,110,110,255, 254,104,104,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,97,97,255, 251,76,76,255, 201,48,48,255, 96,26,26,255, 36,14,14,255, 62,44,44,255, 222,218,218,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 253,243,243,255, 242,106,106,255, 252,56,56,255, 254,96,96,255, 255,110,110,255, 254,105,105,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,97,97,255, 241,72,72,255, 159,41,41,255, 60,16,16,255, 28,10,10,255, 88,83,83,255, 240,238,238,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 249,252,249,255, 153,204,147,255, 62,184,54,255, 100,246,97,255, 137,255,132,255, 151,254,144,255, 149,255,140,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 144,254,133,255, 128,247,115,255, 85,195,76,255, 43,100,37,255, 58,77,58,255, 190,194,190,255, 254,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 211,210,242,255, 76,68,220,255, 105,95,252,255, 143,135,254,255, 150,142,254,255, 144,134,254,255, 138,131,254,255, 138,129,254,255, 138,131,254,255, 138,129,254,255, 138,130,254,255, 134,127,254,255, 121,115,251,255, 90,84,213,255, 53,47,138,255, 22,19,65,255, 50,50,68,255, 212,212,216,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 251,250,255,255, 185,181,254,255, 110,99,254,255, 144,136,254,255, 165,154,254,255, 152,146,254,255, 141,130,254,255, 130,119,252,255, 104,93,220,255, 47,39,112,255, 31,29,44,255, 164,164,164,255, 253,253,253,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,253,224,255, 250,243,61,255, 252,251,31,255, 254,254,50,255, 254,254,60,255, 254,254,60,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,54,255, 253,253,48,255, 218,211,33,255, 121,108,19,255, 80,77,45,255, 201,201,194,255, 254,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 245,243,231,255, 187,174,89,255, 168,154,17,255, 216,204,22,255, 252,250,36,255, 254,254,52,255, 255,255,55,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,55,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,55,255, 254,254,58,255, 255,255,54,255, 254,252,48,255, 243,236,37,255, 170,162,24,255, 91,85,39,255, 189,189,183,255, 254,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,190,255,255, 255,43,255,255, 254,55,254,255, 255,109,255,255, 254,140,254,255, 255,143,255,255, 254,131,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,122,254,255, 249,101,249,255, 174,61,178,255, 73,28,76,255, 85,76,85,255, 238,238,238,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 255,228,228,255, 253,79,79,255, 254,92,92,255, 253,111,111,255, 254,110,110,255, 253,106,106,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,102,102,255, 254,90,90,255, 245,70,70,255, 167,42,42,255, 66,18,18,255, 32,12,12,255, 105,92,92,255, 243,242,242,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 251,228,228,255, 239,67,67,255, 254,64,64,255, 253,102,102,255, 254,112,112,255, 253,106,106,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,98,98,255, 240,72,72,255, 156,40,40,255, 62,17,17,255, 31,12,12,255, 89,83,83,255, 240,239,239,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 224,238,223,255, 71,168,65,255, 70,207,60,255, 121,250,112,255, 147,254,137,255, 150,253,141,255, 145,254,138,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 144,254,136,255, 136,253,130,255, 105,225,101,255, 52,127,49,255, 24,45,23,255, 91,95,91,255, 155,155,155,255, 213,213,213,255, 229,229,229,255, 236,236,236,255, 251,251,251,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 201,200,240,255, 69,64,222,255, 112,102,251,255, 149,137,254,255, 150,143,253,255, 140,135,254,255, 138,129,253,255, 138,131,254,255, 138,129,253,255, 138,130,254,255, 138,128,253,255, 132,123,253,255, 107,99,238,255, 69,62,170,255, 31,29,82,255, 18,17,43,255, 132,132,142,255, 250,250,250,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 248,247,255,255, 165,160,255,255, 103,93,253,255, 137,128,253,255, 117,111,250,255, 99,86,242,255, 89,80,230,255, 94,85,219,255, 137,129,211,255, 178,177,206,255, 240,240,241,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,253,214,255, 251,244,50,255, 251,251,31,255, 253,253,50,255, 254,254,60,255, 253,253,60,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 253,253,51,255, 244,241,37,255, 168,159,21,255, 77,68,20,255, 174,173,161,255, 250,250,250,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 240,240,238,255, 239,239,238,255, 254,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 253,253,250,255, 199,191,139,255, 156,142,24,255, 203,194,19,255, 246,241,32,255, 254,254,47,255, 253,253,55,255, 254,254,55,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 253,253,56,255, 254,254,52,255, 245,243,38,255, 195,190,29,255, 104,99,24,255, 155,150,135,255, 247,247,246,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,213,255,255, 254,49,254,255, 253,54,253,255, 254,110,254,255, 253,141,253,255, 254,142,254,255, 253,130,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,123,253,255, 249,102,249,255, 173,62,178,255, 75,28,78,255, 63,53,63,255, 232,232,232,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 255,228,228,255, 254,82,82,255, 255,99,99,255, 254,114,114,255, 255,110,110,255, 254,104,104,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,97,97,255, 255,81,81,255, 230,60,60,255, 135,33,33,255, 53,15,15,255, 33,11,11,255, 135,126,126,255, 253,253,253,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 245,184,184,255, 240,51,51,255, 255,71,71,255, 254,103,103,255, 255,111,111,255, 254,104,104,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,98,98,255, 243,75,75,255, 158,42,42,255, 59,17,17,255, 30,10,10,255, 89,83,83,255, 240,238,238,255, 0,0,0,0, 0,0,0,0, 254,254,254,255, 175,216,172,255, 57,177,46,255, 93,237,81,255, 134,254,123,255, 149,255,141,255, 148,254,138,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 143,254,133,255, 120,247,114,255, 78,178,71,255, 27,58,27,255, 11,14,11,255, 12,12,12,255, 19,19,19,255, 38,38,38,255, 53,53,53,255, 76,76,76,255, 137,137,137,255, 224,224,224,255, 253,253,253,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 201,199,242,255, 70,65,223,255, 118,105,252,255, 153,139,254,255, 152,142,254,255, 143,134,254,255, 138,131,254,255, 138,129,254,255, 138,131,254,255, 138,129,254,255, 137,130,254,255, 121,118,253,255, 90,82,208,255, 43,39,104,255, 16,15,33,255, 15,12,24,255, 76,76,78,255, 133,133,133,255, 143,143,143,255, 164,164,164,255, 182,182,182,255, 224,224,224,255, 228,228,228,255, 235,235,235,255, 241,241,241,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 236,235,255,255, 137,132,253,255, 95,86,235,255, 108,101,221,255, 147,144,223,255, 198,197,237,255, 229,227,244,255, 250,249,253,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,253,214,255, 254,246,51,255, 254,251,34,255, 254,254,52,255, 254,254,63,255, 254,254,60,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,54,255, 252,252,48,255, 221,217,35,255, 124,113,19,255, 76,74,47,255, 218,218,214,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 246,245,235,255, 148,143,98,255, 89,88,82,255, 130,130,130,255, 150,150,150,255, 188,188,188,255, 223,223,223,255, 203,202,181,255, 137,126,44,255, 167,152,16,255, 238,234,29,255, 254,254,40,255, 255,255,51,255, 254,254,58,255, 255,255,55,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,55,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,55,255, 254,254,54,255, 254,252,47,255, 221,214,32,255, 136,130,20,255, 93,90,53,255, 222,221,218,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,217,255,255, 255,50,255,255, 254,52,254,255, 255,108,255,255, 254,139,254,255, 255,143,255,255, 254,132,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,124,254,255, 249,102,249,255, 174,61,179,255, 78,28,82,255, 59,47,61,255, 231,230,231,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 255,228,228,255, 253,85,85,255, 254,101,101,255, 253,114,114,255, 254,110,110,255, 253,106,106,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,97,97,255, 252,75,75,255, 218,55,55,255, 103,30,30,255, 39,15,15,255, 40,23,23,255, 174,166,166,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 241,158,158,255, 243,48,48,255, 254,81,81,255, 253,104,104,255, 254,110,110,255, 253,106,106,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,99,99,255, 246,75,75,255, 156,41,41,255, 58,16,16,255, 32,12,12,255, 94,86,86,255, 242,241,241,255, 0,0,0,0, 0,0,0,0, 242,249,242,255, 101,185,97,255, 67,208,58,255, 110,250,102,255, 141,253,135,255, 148,254,141,255, 145,253,138,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 144,253,136,255, 136,251,129,255, 100,220,95,255, 50,117,46,255, 26,52,26,255, 22,35,22,255, 13,22,13,255, 14,19,14,255, 10,13,10,255, 12,13,12,255, 10,10,10,255, 18,18,18,255, 77,77,77,255, 162,162,162,255, 223,223,223,255, 251,251,251,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 201,201,245,255, 74,70,230,255, 123,112,252,255, 153,141,254,255, 152,144,253,255, 140,134,254,255, 138,129,253,255, 138,131,254,255, 138,129,253,255, 138,130,254,255, 133,128,253,255, 112,109,242,255, 67,66,161,255, 26,25,56,255, 16,15,24,255, 15,15,19,255, 12,12,15,255, 14,14,16,255, 14,14,15,255, 22,22,22,255, 26,26,26,255, 43,43,43,255, 51,51,51,255, 71,71,71,255, 92,92,92,255, 131,131,131,255, 143,143,143,255, 161,161,161,255, 185,185,185,255, 224,224,224,255, 229,229,229,255, 235,235,235,255, 241,241,241,255, 254,254,255,255, 235,235,253,255, 209,208,242,255, 235,235,246,255, 252,252,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,253,212,255, 253,248,48,255, 254,251,36,255, 253,253,51,255, 254,254,63,255, 253,253,60,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,52,255, 250,246,40,255, 200,192,33,255, 92,85,17,255, 92,92,71,255, 241,241,239,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,255,254,255, 215,211,156,255, 153,146,25,255, 51,51,13,255, 12,12,12,255, 16,16,16,255, 30,30,30,255, 41,41,41,255, 58,55,32,255, 114,99,13,255, 200,186,24,255, 248,246,39,255, 253,253,48,255, 254,254,53,255, 253,253,56,255, 254,254,55,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 253,252,51,255, 241,233,38,255, 162,158,23,255, 80,78,22,255, 157,157,139,255, 251,251,250,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,217,255,255, 254,50,254,255, 253,51,253,255, 254,104,254,255, 253,136,253,255, 254,142,254,255, 253,132,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,126,253,255, 249,103,249,255, 181,62,183,255, 85,28,86,255, 59,49,60,255, 231,231,231,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 255,228,228,255, 254,83,83,255, 255,101,101,255, 254,116,116,255, 255,111,111,255, 254,104,104,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,96,96,255, 250,72,72,255, 205,51,51,255, 95,27,27,255, 33,13,13,255, 46,32,32,255, 197,192,192,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 253,247,247,255, 234,121,121,255, 248,52,52,255, 255,86,86,255, 254,104,104,255, 255,108,108,255, 254,104,104,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,102,102,255, 255,97,97,255, 245,71,71,255, 157,39,39,255, 58,16,16,255, 33,11,11,255, 118,111,111,255, 252,252,252,255, 0,0,0,0, 0,0,0,0, 211,232,211,255, 69,180,65,255, 86,238,78,255, 124,255,113,255, 149,254,137,255, 150,255,142,255, 145,254,137,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 144,254,135,255, 122,241,112,255, 69,157,60,255, 46,103,42,255, 62,137,58,255, 54,117,54,255, 43,92,42,255, 36,74,36,255, 26,49,26,255, 20,33,20,255, 16,21,16,255, 10,11,10,255, 12,12,12,255, 22,22,22,255, 56,56,56,255, 156,156,156,255, 243,243,243,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 201,201,246,255, 81,74,238,255, 125,116,254,255, 156,144,254,255, 152,146,254,255, 143,131,254,255, 138,131,254,255, 138,129,254,255, 138,131,254,255, 138,129,254,255, 133,127,251,255, 103,100,230,255, 82,78,186,255, 66,65,149,255, 62,55,131,255, 54,50,115,255, 49,47,103,255, 42,39,86,255, 35,34,68,255, 29,29,57,255, 26,26,47,255, 21,21,36,255, 17,17,28,255, 14,12,20,255, 15,15,18,255, 11,11,13,255, 16,16,17,255, 20,20,20,255, 29,29,29,255, 41,41,41,255, 53,53,53,255, 72,72,72,255, 90,90,90,255, 132,132,132,255, 142,142,142,255, 164,164,164,255, 181,181,181,255, 224,224,224,255, 228,228,228,255, 241,241,241,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,254,201,255, 254,254,35,255, 254,254,36,255, 254,254,56,255, 254,254,63,255, 254,254,60,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,253,51,255, 240,230,36,255, 157,152,22,255, 64,61,15,255, 152,152,143,255, 252,252,251,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 241,239,219,255, 181,171,66,255, 209,198,24,255, 132,131,26,255, 37,32,14,255, 26,25,13,255, 14,14,10,255, 13,13,12,255, 21,21,10,255, 125,117,16,255, 229,220,32,255, 253,252,47,255, 254,254,53,255, 255,255,56,255, 254,254,58,255, 255,255,55,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,55,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,54,255, 252,251,46,255, 209,200,34,255, 112,108,23,255, 120,118,95,255, 235,235,232,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,217,255,255, 255,50,255,255, 254,46,254,255, 255,101,255,255, 254,135,254,255, 255,143,255,255, 254,133,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,125,254,255, 250,102,250,255, 191,61,191,255, 96,31,96,255, 63,50,63,255, 231,230,231,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 255,228,228,255, 253,86,86,255, 254,103,103,255, 253,116,116,255, 254,112,112,255, 253,106,106,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,97,97,255, 246,72,72,255, 184,47,47,255, 79,26,26,255, 31,14,14,255, 74,67,67,255, 230,228,228,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 249,228,228,255, 227,67,67,255, 249,61,61,255, 254,91,91,255, 253,108,108,255, 254,104,104,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,100,100,255, 254,90,90,255, 238,62,62,255, 143,37,37,255, 51,16,16,255, 38,20,20,255, 162,153,153,255, 254,254,254,255, 0,0,0,0, 252,253,252,255, 151,204,150,255, 58,187,49,255, 108,248,99,255, 137,254,126,255, 149,253,141,255, 148,254,138,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 141,252,131,255, 103,221,99,255, 74,163,67,255, 90,196,83,255, 106,226,101,255, 101,212,94,255, 93,197,86,255, 82,177,74,255, 67,141,62,255, 56,118,55,255, 40,75,40,255, 23,32,21,255, 12,13,12,255, 12,12,12,255, 10,10,10,255, 27,27,27,255, 125,125,125,255, 232,232,232,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 213,213,248,255, 85,79,238,255, 121,112,253,255, 154,147,254,255, 155,149,253,255, 143,135,254,255, 138,129,253,255, 138,131,254,255, 138,129,253,255, 138,130,254,255, 135,128,252,255, 129,122,250,255, 128,120,248,255, 124,118,245,255, 118,112,237,255, 115,106,233,255, 109,102,225,255, 103,96,215,255, 94,87,197,255, 87,83,190,255, 81,76,176,255, 74,67,159,255, 62,57,135,255, 58,51,125,255, 53,47,108,255, 42,41,88,255, 36,36,69,255, 32,32,62,255, 24,24,48,255, 21,20,39,255, 19,15,30,255, 16,15,22,255, 12,12,16,255, 14,14,16,255, 14,14,15,255, 22,22,22,255, 26,26,26,255, 42,42,42,255, 51,51,53,255, 127,126,132,255, 251,250,251,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,254,214,255, 253,253,52,255, 254,254,34,255, 253,253,55,255, 254,254,64,255, 253,253,60,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,55,255, 253,250,49,255, 212,202,34,255, 119,113,19,255, 53,51,25,255, 188,188,183,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 247,245,235,255, 192,186,98,255, 183,173,20,255, 242,238,32,255, 219,217,39,255, 152,144,28,255, 124,117,24,255, 84,81,18,255, 49,48,13,255, 52,51,15,255, 146,143,24,255, 242,239,35,255, 254,254,49,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 253,253,56,255, 254,254,55,255, 253,253,55,255, 254,254,51,255, 240,235,37,255, 164,155,22,255, 101,97,56,255, 219,218,214,255, 254,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,218,255,255, 254,52,254,255, 253,45,253,255, 254,97,254,255, 253,133,253,255, 254,144,254,255, 253,138,253,255, 254,129,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,126,253,255, 251,103,251,255, 194,63,196,255, 99,32,100,255, 61,50,63,255, 228,228,228,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 255,229,229,255, 254,89,89,255, 255,102,102,255, 254,116,116,255, 255,111,111,255, 254,104,104,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,95,95,255, 243,67,67,255, 163,43,43,255, 64,18,18,255, 29,12,12,255, 98,93,93,255, 243,242,242,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,253,253,255, 234,167,167,255, 231,48,48,255, 254,75,75,255, 255,99,99,255, 254,110,110,255, 255,104,104,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,99,99,255, 255,86,86,255, 229,59,59,255, 123,31,31,255, 45,15,15,255, 41,25,25,255, 196,192,192,255, 0,0,0,0, 0,0,0,0, 236,246,235,255, 94,185,93,255, 78,222,72,255, 126,254,113,255, 146,255,136,255, 149,254,141,255, 145,255,137,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 144,255,136,255, 136,252,127,255, 118,235,112,255, 129,244,117,255, 137,253,126,255, 137,254,130,255, 137,252,128,255, 133,248,125,255, 129,243,115,255, 120,234,110,255, 106,215,96,255, 84,179,80,255, 65,130,59,255, 41,77,39,255, 21,36,19,255, 14,16,14,255, 10,10,10,255, 21,21,21,255, 95,95,95,255, 187,187,187,255, 250,250,250,255, 0,0,0,0, 0,0,0,0, 241,240,253,255, 104,96,242,255, 116,102,253,255, 156,144,254,255, 158,150,254,255, 146,135,254,255, 138,131,254,255, 138,129,254,255, 138,131,254,255, 138,129,254,255, 138,130,254,255, 138,129,254,255, 138,131,254,255, 138,129,254,255, 137,131,254,255, 137,128,254,255, 137,129,254,255, 134,127,254,255, 134,124,252,255, 132,124,252,255, 129,120,250,255, 128,117,246,255, 122,115,240,255, 117,110,236,255, 116,107,230,255, 106,104,220,255, 100,95,206,255, 97,92,199,255, 90,86,189,255, 79,75,169,255, 73,68,159,255, 67,64,147,255, 60,58,127,255, 54,48,110,255, 47,43,99,255, 41,37,81,255, 35,34,72,255, 25,25,56,255, 18,18,36,255, 119,117,133,255, 251,251,251,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,254,232,255, 254,254,73,255, 254,254,34,255, 254,254,54,255, 254,254,63,255, 254,254,60,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,55,255, 252,248,49,255, 196,183,31,255, 94,89,18,255, 60,60,40,255, 209,209,207,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,254,252,255, 213,209,153,255, 170,158,25,255, 224,216,24,255, 253,253,40,255, 253,253,50,255, 245,244,46,255, 234,232,44,255, 215,211,40,255, 186,183,30,255, 176,171,30,255, 212,205,35,255, 250,247,45,255, 255,255,52,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,55,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,55,255, 254,254,58,255, 255,255,54,255, 254,253,50,255, 247,244,41,255, 204,197,33,255, 114,109,35,255, 175,175,161,255, 251,251,250,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,227,255,255, 255,72,255,255, 254,42,254,255, 255,94,255,255, 254,132,254,255, 255,143,255,255, 254,136,254,255, 255,129,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,125,254,255, 250,104,251,255, 191,64,196,255, 102,33,104,255, 54,41,55,255, 208,207,208,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 255,236,236,255, 253,108,108,255, 254,102,102,255, 253,118,118,255, 254,114,114,255, 253,106,106,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 252,90,90,255, 230,63,63,255, 152,39,39,255, 57,15,15,255, 23,10,10,255, 101,99,99,255, 244,244,244,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 250,238,238,255, 216,82,82,255, 246,51,51,255, 253,84,84,255, 254,104,104,255, 253,107,107,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,97,97,255, 251,82,82,255, 213,53,53,255, 105,25,25,255, 37,14,14,255, 71,58,58,255, 227,225,225,255, 0,0,0,0, 254,254,254,255, 180,217,174,255, 62,185,54,255, 99,245,95,255, 139,253,127,255, 152,254,138,255, 150,253,138,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 143,253,134,255, 143,254,135,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,135,255, 143,253,135,255, 139,252,132,255, 129,247,123,255, 114,227,106,255, 90,185,83,255, 61,124,56,255, 36,62,34,255, 17,20,15,255, 10,10,10,255, 15,15,15,255, 43,43,43,255, 173,173,173,255, 254,254,254,255, 0,0,0,0, 247,247,254,255, 128,119,249,255, 104,96,252,255, 153,143,254,255, 162,150,253,255, 150,135,254,255, 138,129,253,255, 138,131,254,255, 138,129,253,255, 138,130,254,255, 139,129,253,255, 143,135,254,255, 144,134,253,255, 140,134,254,255, 140,130,253,255, 139,132,254,255, 139,130,253,255, 138,132,254,255, 138,129,253,255, 138,130,254,255, 138,129,253,255, 138,131,254,255, 138,129,253,255, 138,130,254,255, 138,129,253,255, 137,130,254,255, 137,128,253,255, 137,129,253,255, 134,127,252,255, 132,124,251,255, 129,124,249,255, 126,120,248,255, 123,116,241,255, 122,111,237,255, 115,107,232,255, 110,100,223,255, 86,83,200,255, 47,47,124,255, 46,46,69,255, 191,191,198,255, 254,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,255,248,255, 255,255,91,255, 254,254,32,255, 253,253,52,255, 254,254,63,255, 253,253,64,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,54,255, 249,247,48,255, 183,176,34,255, 82,81,18,255, 63,63,51,255, 220,220,220,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 238,235,214,255, 178,168,56,255, 203,190,17,255, 249,246,34,255, 253,253,51,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,54,255, 252,252,47,255, 250,249,50,255, 252,251,50,255, 253,252,52,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 253,253,56,255, 254,254,53,255, 250,249,43,255, 224,214,34,255, 138,131,21,255, 125,123,90,255, 241,241,239,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,229,255,255, 254,76,254,255, 253,42,253,255, 254,92,254,255, 253,132,253,255, 254,144,254,255, 253,139,253,255, 254,129,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,126,253,255, 251,106,251,255, 201,69,201,255, 108,36,108,255, 55,40,55,255, 204,204,204,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 255,249,249,255, 254,136,136,255, 255,93,93,255, 254,118,118,255, 255,114,114,255, 254,104,104,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 253,91,91,255, 225,61,61,255, 135,36,36,255, 50,16,16,255, 19,11,11,255, 97,93,93,255, 243,243,243,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,253,253,255, 237,194,194,255, 215,51,51,255, 251,64,64,255, 254,94,94,255, 255,105,105,255, 254,104,104,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,95,95,255, 248,75,75,255, 191,45,45,255, 85,18,18,255, 35,12,12,255, 111,96,96,255, 248,248,248,255, 0,0,0,0, 237,246,236,255, 95,179,92,255, 67,205,56,255, 114,251,111,255, 145,254,135,255, 151,255,141,255, 148,254,137,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,137,255, 146,255,137,255, 146,254,137,255, 146,255,137,255, 148,254,137,255, 147,255,140,255, 147,254,137,255, 146,255,137,255, 145,254,136,255, 144,255,136,255, 143,254,135,255, 139,254,133,255, 127,246,120,255, 99,203,92,255, 75,150,69,255, 40,72,38,255, 17,24,15,255, 10,12,10,255, 12,12,12,255, 72,72,72,255, 233,233,233,255, 0,0,0,0, 251,251,255,255, 155,151,253,255, 94,90,252,255, 150,138,254,255, 165,152,254,255, 152,143,254,255, 139,132,254,255, 138,129,254,255, 138,131,254,255, 138,128,254,255, 133,123,251,255, 122,112,223,255, 141,132,238,255, 149,140,254,255, 150,141,254,255, 149,141,254,255, 148,140,254,255, 148,139,254,255, 147,140,254,255, 146,134,254,255, 144,137,254,255, 143,134,254,255, 140,134,254,255, 140,129,254,255, 139,132,254,255, 139,129,254,255, 139,132,254,255, 138,129,254,255, 138,131,254,255, 138,129,254,255, 138,131,254,255, 138,129,254,255, 137,130,254,255, 138,129,254,255, 137,129,254,255, 129,120,252,255, 89,83,210,255, 37,35,103,255, 77,76,94,255, 239,238,240,255, 242,237,237,255, 233,233,233,255, 245,245,245,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,255,251,255, 255,255,112,255, 254,254,32,255, 254,254,50,255, 254,254,64,255, 254,254,65,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,52,255, 244,239,39,255, 166,160,28,255, 69,65,17,255, 60,59,49,255, 220,220,220,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,255,254,255, 235,230,195,255, 215,207,71,255, 244,240,34,255, 254,254,45,255, 254,254,62,255, 255,255,65,255, 254,254,60,255, 255,255,57,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,55,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,55,255, 254,254,55,255, 255,254,50,255, 238,235,36,255, 172,161,23,255, 95,91,33,255, 192,192,182,255, 254,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,229,255,255, 255,76,255,255, 254,38,254,255, 255,90,255,255, 254,131,254,255, 255,144,255,255, 254,139,254,255, 255,129,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,126,254,255, 252,108,252,255, 205,71,205,255, 108,38,109,255, 55,40,58,255, 204,203,205,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 253,167,167,255, 254,88,88,255, 253,115,115,255, 254,117,117,255, 253,109,109,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 251,93,93,255, 229,65,65,255, 146,40,40,255, 51,15,15,255, 17,10,10,255, 64,63,63,255, 215,215,215,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 249,239,239,255, 203,85,85,255, 229,40,40,255, 254,76,76,255, 253,102,102,255, 254,106,106,255, 253,106,106,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,101,101,255, 253,90,90,255, 248,69,69,255, 181,41,41,255, 76,16,16,255, 37,11,11,255, 130,118,118,255, 254,254,254,255, 254,254,254,255, 177,215,174,255, 54,167,46,255, 90,234,81,255, 131,254,123,255, 149,253,141,255, 149,254,138,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,138,255, 151,254,140,255, 152,253,143,255, 153,254,144,255, 159,253,147,255, 159,254,149,255, 159,253,149,255, 158,254,147,255, 151,253,142,255, 147,254,137,255, 145,253,136,255, 144,254,136,255, 142,253,135,255, 130,247,123,255, 109,222,102,255, 75,162,72,255, 40,78,38,255, 16,21,15,255, 10,10,10,255, 23,23,23,255, 166,166,166,255, 254,254,254,255, 254,254,255,255, 191,191,254,255, 88,84,253,255, 143,131,254,255, 165,154,253,255, 156,151,254,255, 143,133,253,255, 138,131,254,255, 138,129,253,255, 138,130,254,255, 129,123,250,255, 94,90,208,255, 77,72,158,255, 85,80,183,255, 105,91,221,255, 112,100,227,255, 130,120,243,255, 139,127,252,255, 140,131,253,255, 142,133,254,255, 148,140,253,255, 150,139,254,255, 154,140,253,255, 151,138,254,255, 150,139,253,255, 147,137,254,255, 144,133,253,255, 138,131,254,255, 138,129,253,255, 138,130,254,255, 138,129,253,255, 138,130,254,255, 138,129,253,255, 138,131,254,255, 134,127,253,255, 119,113,247,255, 76,68,187,255, 29,24,80,255, 95,94,109,255, 248,243,243,255, 180,113,113,255, 73,66,66,255, 104,104,104,255, 133,133,133,255, 157,157,157,255, 180,180,180,255, 224,224,224,255, 228,228,228,255, 240,240,240,255, 254,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,255,252,255, 255,255,145,255, 254,254,29,255, 253,253,49,255, 254,254,63,255, 253,253,64,255, 254,254,59,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,52,255, 237,232,36,255, 153,141,22,255, 57,52,16,255, 57,56,49,255, 217,217,216,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,255,253,255, 255,255,226,255, 255,255,156,255, 254,254,80,255, 253,253,58,255, 254,254,60,255, 253,253,63,255, 254,254,65,255, 253,253,61,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 253,253,52,255, 250,248,39,255, 203,194,27,255, 106,100,19,255, 133,132,106,255, 244,244,242,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,235,255,255, 254,88,254,255, 253,35,253,255, 254,82,254,255, 253,128,253,255, 254,144,254,255, 253,139,253,255, 254,129,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,126,253,255, 254,112,254,255, 214,79,217,255, 116,42,122,255, 51,34,53,255, 189,189,189,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 254,213,213,255, 255,94,94,255, 254,111,111,255, 255,118,118,255, 254,108,108,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,96,96,255, 234,69,69,255, 157,42,42,255, 58,16,16,255, 16,11,11,255, 32,29,29,255, 184,184,184,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,254,254,255, 230,189,189,255, 195,40,40,255, 245,51,51,255, 255,90,90,255, 254,105,105,255, 255,105,105,255, 254,104,104,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,98,98,255, 254,83,83,255, 235,62,62,255, 147,34,34,255, 61,16,16,255, 73,56,56,255, 204,201,201,255, 0,0,0,0, 242,248,242,255, 98,175,94,255, 55,183,47,255, 108,248,102,255, 141,255,133,255, 151,254,140,255, 149,255,138,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 143,255,132,255, 139,254,130,255, 142,255,131,255, 143,254,131,255, 147,255,138,255, 154,254,143,255, 162,255,149,255, 166,254,154,255, 171,255,159,255, 170,254,158,255, 159,255,151,255, 147,254,142,255, 145,255,136,255, 144,254,136,255, 143,254,135,255, 137,252,127,255, 113,226,103,255, 71,147,67,255, 30,51,29,255, 14,17,14,255, 11,12,11,255, 75,75,75,255, 233,233,233,255, 0,0,0,0, 232,231,255,255, 108,98,254,255, 126,116,254,255, 161,152,254,255, 165,156,254,255, 147,139,254,255, 138,131,254,255, 138,131,254,255, 138,129,254,255, 134,127,253,255, 107,97,229,255, 67,59,147,255, 32,29,63,255, 23,21,45,255, 25,21,52,255, 106,103,148,255, 180,177,245,255, 172,166,254,255, 168,165,253,255, 158,155,253,255, 129,120,246,255, 104,91,239,255, 116,102,248,255, 131,119,254,255, 140,132,254,255, 140,131,254,255, 138,129,254,255, 138,131,254,255, 138,129,254,255, 138,131,254,255, 138,129,254,255, 138,130,254,255, 138,128,254,255, 132,120,254,255, 108,100,241,255, 64,58,164,255, 29,25,69,255, 149,149,163,255, 252,242,242,255, 220,82,82,255, 68,18,18,255, 17,13,13,255, 11,10,10,255, 20,20,20,255, 26,26,26,255, 42,42,42,255, 51,51,51,255, 88,88,88,255, 132,132,132,255, 142,142,142,255, 166,166,166,255, 207,207,207,255, 229,229,229,255, 236,236,236,255, 250,250,250,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,255,254,255, 255,255,181,255, 254,254,33,255, 254,254,46,255, 254,254,61,255, 254,254,63,255, 254,254,60,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,52,255, 241,239,39,255, 161,152,27,255, 62,61,18,255, 34,34,25,255, 186,186,186,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,255,253,255, 255,255,226,255, 254,254,141,255, 255,255,62,255, 254,254,49,255, 255,255,62,255, 254,254,67,255, 255,255,62,255, 254,254,59,255, 255,255,56,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,55,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,54,255, 254,252,48,255, 226,216,35,255, 137,129,20,255, 103,100,60,255, 209,209,202,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,242,255,255, 255,100,255,255, 254,33,254,255, 255,83,255,255, 254,128,254,255, 255,144,255,255, 254,139,254,255, 255,129,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,126,254,255, 255,113,255,255, 220,80,224,255, 123,44,128,255, 47,27,50,255, 175,173,175,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 255,234,234,255, 255,104,104,255, 253,105,105,255, 254,118,118,255, 253,112,112,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,96,96,255, 237,70,70,255, 169,45,45,255, 62,16,16,255, 16,10,10,255, 17,17,17,255, 140,140,140,255, 254,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 246,235,235,255, 200,90,90,255, 224,34,34,255, 251,69,69,255, 254,97,97,255, 253,105,105,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,97,97,255, 248,72,72,255, 202,48,48,255, 106,26,26,255, 51,19,19,255, 155,141,141,255, 253,253,253,255, 0,0,0,0, 201,228,201,255, 63,170,59,255, 82,222,69,255, 124,251,113,255, 149,254,137,255, 150,253,140,255, 145,254,137,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 144,254,134,255, 138,253,130,255, 125,248,111,255, 102,231,98,255, 92,221,85,255, 92,231,80,255, 93,239,84,255, 99,242,88,255, 115,251,102,255, 128,253,112,255, 146,254,136,255, 170,253,158,255, 176,254,166,255, 162,253,158,255, 148,254,141,255, 145,253,136,255, 145,254,136,255, 145,253,135,255, 136,250,125,255, 99,204,92,255, 55,107,53,255, 25,41,25,255, 14,15,14,255, 21,21,21,255, 160,160,160,255, 252,252,252,255, 252,252,255,255, 170,166,253,255, 104,94,254,255, 146,137,253,255, 167,154,254,255, 158,146,253,255, 139,135,254,255, 138,129,253,255, 138,130,254,255, 135,128,253,255, 121,111,242,255, 87,80,192,255, 43,42,94,255, 17,17,25,255, 12,12,12,255, 38,38,38,255, 119,119,119,255, 147,147,147,255, 130,130,133,255, 123,123,141,255, 87,85,158,255, 54,48,176,255, 85,78,227,255, 122,111,251,255, 138,130,254,255, 140,129,253,255, 138,131,254,255, 138,129,253,255, 138,130,254,255, 138,129,253,255, 138,130,254,255, 138,129,253,255, 137,130,254,255, 124,115,252,255, 95,88,223,255, 50,46,131,255, 29,29,60,255, 188,188,196,255, 252,215,215,255, 238,63,63,255, 190,56,56,255, 117,38,38,255, 90,28,28,255, 74,24,24,255, 60,24,24,255, 41,17,17,255, 35,18,18,255, 22,14,14,255, 18,14,14,255, 17,14,14,255, 24,23,23,255, 36,36,36,255, 52,52,52,255, 74,74,74,255, 116,116,116,255, 134,134,134,255, 133,133,133,255, 142,142,142,255, 163,163,163,255, 207,207,207,255, 228,228,228,255, 235,235,235,255, 249,249,249,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,255,231,255, 254,254,76,255, 253,253,34,255, 254,254,51,255, 253,253,64,255, 254,254,62,255, 253,253,57,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,53,255, 246,244,43,255, 172,164,30,255, 74,72,18,255, 22,22,15,255, 148,148,148,255, 252,252,252,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,255,246,255, 255,255,199,255, 255,255,139,255, 254,254,82,255, 253,253,56,255, 254,254,60,255, 253,253,63,255, 254,254,62,255, 253,253,60,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,53,255, 235,229,39,255, 153,142,23,255, 59,55,16,255, 91,91,82,255, 206,206,206,255, 253,253,253,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,249,255,255, 254,126,254,255, 253,37,253,255, 254,80,254,255, 253,128,253,255, 254,144,254,255, 253,139,253,255, 254,129,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,126,253,255, 254,114,254,255, 218,80,223,255, 124,44,129,255, 45,23,49,255, 162,159,163,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 255,249,249,255, 255,147,147,255, 254,93,93,255, 255,117,117,255, 254,119,119,255, 255,108,108,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,96,96,255, 244,75,75,255, 182,48,48,255, 79,22,22,255, 22,13,13,255, 11,10,10,255, 81,81,81,255, 237,237,237,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,252,252,255, 213,159,159,255, 201,37,37,255, 250,59,59,255, 254,86,86,255, 255,104,104,255, 254,104,104,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,99,99,255, 254,83,83,255, 236,58,58,255, 162,35,35,255, 72,17,17,255, 64,35,35,255, 216,210,210,255, 0,0,0,0, 248,252,248,255, 130,197,129,255, 62,197,54,255, 104,247,93,255, 137,254,127,255, 149,255,141,255, 148,254,138,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 144,255,133,255, 131,253,120,255, 100,227,92,255, 62,165,58,255, 31,108,30,255, 43,111,38,255, 130,204,123,255, 161,237,157,255, 172,250,167,255, 152,254,145,255, 127,255,117,255, 142,254,128,255, 171,255,161,255, 178,254,169,255, 161,255,156,255, 147,254,138,255, 145,255,136,255, 145,254,136,255, 142,254,134,255, 121,239,115,255, 80,169,74,255, 44,89,41,255, 17,29,17,255, 12,15,12,255, 62,62,62,255, 204,204,204,255, 254,254,254,255, 229,229,254,255, 109,102,254,255, 123,111,254,255, 165,151,254,255, 167,154,254,255, 148,141,254,255, 139,133,254,255, 138,129,254,255, 138,130,254,255, 130,124,253,255, 105,102,229,255, 62,60,144,255, 25,24,48,255, 12,12,13,255, 12,12,12,255, 11,11,11,255, 16,16,18,255, 10,10,12,255, 15,15,32,255, 36,32,120,255, 77,71,213,255, 112,108,251,255, 135,124,254,255, 140,128,254,255, 138,131,254,255, 138,129,254,255, 138,131,254,255, 138,129,254,255, 138,131,254,255, 138,129,254,255, 138,130,254,255, 134,126,254,255, 113,108,247,255, 80,75,203,255, 38,35,107,255, 57,57,78,255, 220,220,223,255, 249,189,189,255, 245,48,48,255, 252,89,89,255, 241,92,93,255, 232,78,78,255, 218,68,68,255, 202,60,60,255, 181,54,54,255, 160,49,49,255, 141,43,43,255, 116,37,37,255, 91,29,29,255, 72,23,23,255, 53,23,23,255, 37,16,16,255, 28,16,16,255, 18,11,11,255, 17,14,14,255, 12,10,10,255, 14,14,14,255, 20,20,20,255, 36,36,36,255, 50,50,50,255, 73,73,73,255, 117,117,117,255, 134,134,134,255, 158,158,158,255, 206,206,206,255, 226,226,226,255, 232,232,232,255, 245,245,245,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,255,252,255, 254,254,146,255, 254,254,31,255, 254,254,47,255, 254,254,64,255, 254,254,66,255, 254,254,60,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,56,255, 249,248,48,255, 193,183,34,255, 90,85,19,255, 22,22,11,255, 82,82,82,255, 239,239,239,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,255,253,255, 255,255,227,255, 254,254,157,255, 255,255,80,255, 254,254,50,255, 255,255,60,255, 254,254,65,255, 255,255,63,255, 254,254,62,255, 255,255,56,255, 254,254,58,255, 255,255,55,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,52,255, 224,221,37,255, 114,107,21,255, 31,31,11,255, 16,16,14,255, 74,74,74,255, 221,221,221,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,155,255,255, 254,39,254,255, 255,78,255,255, 254,127,254,255, 255,144,255,255, 254,139,254,255, 255,129,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,119,255,255, 221,81,226,255, 129,44,134,255, 42,16,42,255, 148,143,148,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 255,214,214,255, 253,93,93,255, 254,103,103,255, 253,121,121,255, 254,116,116,255, 253,108,108,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,98,98,255, 251,83,83,255, 209,56,56,255, 99,29,29,255, 25,14,14,255, 12,11,11,255, 34,34,34,255, 200,200,200,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,254,254,255, 224,200,200,255, 169,55,55,255, 228,44,44,255, 254,76,76,255, 253,95,95,255, 254,104,104,255, 253,105,105,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,97,97,255, 253,74,74,255, 215,49,49,255, 132,30,30,255, 57,17,17,255, 116,101,101,255, 245,244,244,255, 0,0,0,0, 233,244,232,255, 79,172,71,255, 82,220,71,255, 121,254,112,255, 142,253,137,255, 148,254,141,255, 145,253,137,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 144,253,136,255, 137,253,130,255, 118,246,109,255, 85,206,78,255, 46,125,43,255, 24,58,22,255, 125,138,124,255, 243,243,243,255, 0,0,0,0, 0,0,0,0, 251,255,251,255, 216,255,212,255, 124,253,110,255, 145,254,132,255, 172,253,161,255, 173,254,164,255, 154,253,145,255, 145,254,136,255, 145,253,136,255, 144,254,136,255, 136,251,128,255, 104,215,96,255, 67,141,60,255, 29,60,28,255, 12,18,12,255, 17,17,17,255, 105,105,105,255, 242,242,242,255, 251,251,255,255, 162,156,255,255, 98,83,253,255, 143,133,254,255, 169,157,253,255, 161,153,254,255, 146,139,253,255, 139,131,254,255, 138,129,253,255, 137,131,253,255, 123,118,247,255, 91,83,198,255, 54,50,117,255, 30,29,56,255, 21,18,30,255, 17,17,22,255, 16,15,27,255, 22,19,43,255, 29,28,74,255, 61,53,155,255, 99,93,233,255, 127,118,254,255, 137,128,253,255, 138,130,254,255, 138,129,253,255, 138,131,254,255, 138,129,253,255, 138,130,254,255, 138,129,253,255, 138,130,254,255, 138,128,253,255, 133,120,253,255, 102,97,236,255, 69,63,185,255, 32,27,88,255, 85,85,102,255, 246,243,244,255, 245,154,154,255, 247,56,56,255, 254,97,97,255, 254,109,112,255, 254,103,104,255, 253,99,100,255, 252,97,98,255, 251,93,93,255, 249,89,89,255, 245,83,83,255, 237,77,77,255, 222,70,70,255, 210,64,64,255, 193,59,59,255, 166,49,49,255, 147,43,43,255, 127,38,38,255, 99,33,35,255, 80,29,29,255, 55,22,22,255, 43,19,19,255, 31,14,14,255, 22,15,15,255, 15,11,11,255, 16,13,13,255, 10,10,10,255, 20,20,20,255, 35,35,35,255, 44,44,44,255, 64,64,64,255, 101,101,101,255, 133,133,133,255, 152,152,152,255, 182,182,182,255, 223,223,223,255, 228,228,228,255, 238,238,238,255, 252,252,252,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,254,205,255, 253,253,46,255, 254,254,38,255, 253,253,63,255, 254,254,66,255, 253,253,63,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,55,255, 252,252,50,255, 217,208,37,255, 123,116,23,255, 28,27,13,255, 27,27,27,255, 184,184,184,255, 254,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,255,253,255, 255,255,227,255, 255,255,157,255, 254,254,82,255, 253,253,58,255, 254,254,60,255, 253,253,64,255, 254,254,62,255, 253,253,60,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,54,255, 247,246,44,255, 197,188,32,255, 89,87,19,255, 21,21,10,255, 16,16,16,255, 124,124,124,255, 242,242,242,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,155,254,255, 253,41,253,255, 254,76,254,255, 253,124,253,255, 254,144,254,255, 253,139,253,255, 254,129,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,119,254,255, 221,81,224,255, 136,47,143,255, 43,20,45,255, 149,144,149,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 255,248,248,255, 254,153,153,255, 255,93,93,255, 254,120,120,255, 255,119,119,255, 254,109,109,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,101,101,255, 254,90,90,255, 229,63,63,255, 125,35,35,255, 32,15,15,255, 11,10,10,255, 16,16,16,255, 122,122,122,255, 246,246,246,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,253,253,255, 235,223,223,255, 164,88,88,255, 186,31,31,255, 249,61,61,255, 255,89,89,255, 254,101,101,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,100,100,255, 254,89,89,255, 248,66,66,255, 180,37,37,255, 94,18,18,255, 62,31,31,255, 196,187,187,255, 0,0,0,0, 254,254,254,255, 177,216,173,255, 61,180,51,255, 98,240,91,255, 132,255,123,255, 150,254,138,255, 150,255,138,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 143,254,135,255, 131,253,119,255, 102,230,95,255, 69,171,62,255, 32,89,31,255, 37,60,36,255, 205,212,205,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 252,255,252,255, 179,254,176,255, 115,255,106,255, 158,254,143,255, 177,255,163,255, 162,254,151,255, 147,255,138,255, 145,254,136,255, 145,255,136,255, 143,254,135,255, 124,243,118,255, 89,192,85,255, 51,100,46,255, 20,30,20,255, 11,12,11,255, 38,38,38,255, 189,189,189,255, 254,254,254,255, 235,233,255,255, 143,135,254,255, 113,99,254,255, 157,146,254,255, 169,159,254,255, 160,151,254,255, 146,134,254,255, 139,132,254,255, 138,129,254,255, 136,127,254,255, 120,109,240,255, 90,89,200,255, 65,62,144,255, 58,51,115,255, 44,40,93,255, 45,42,99,255, 51,49,119,255, 61,59,148,255, 87,83,204,255, 117,111,243,255, 133,127,254,255, 137,131,254,255, 138,129,254,255, 138,131,254,255, 138,129,254,255, 138,131,254,255, 138,129,254,255, 138,131,254,255, 138,129,254,255, 135,130,254,255, 119,114,250,255, 92,84,223,255, 61,53,161,255, 26,24,72,255, 110,109,125,255, 248,230,230,255, 242,90,90,255, 250,60,60,255, 254,103,103,255, 254,113,113,255, 254,111,113,255, 254,105,109,255, 254,103,104,255, 254,102,103,255, 254,101,103,255, 254,101,103,255, 254,100,100,255, 254,99,99,255, 254,96,96,255, 253,95,95,255, 250,90,90,255, 247,86,86,255, 240,83,83,255, 228,74,75,255, 217,66,66,255, 202,60,61,255, 179,53,54,255, 156,45,45,255, 130,40,40,255, 120,43,43,255, 94,31,31,255, 69,25,25,255, 46,20,20,255, 37,19,19,255, 26,14,14,255, 20,14,14,255, 14,11,11,255, 13,12,12,255, 16,16,16,255, 28,28,28,255, 41,41,41,255, 51,51,51,255, 81,81,81,255, 124,124,124,255, 142,142,142,255, 162,162,162,255, 206,206,206,255, 227,227,227,255, 235,235,235,255, 244,244,244,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,254,240,255, 254,254,87,255, 254,254,33,255, 254,254,55,255, 254,254,65,255, 254,254,62,255, 254,254,59,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,54,255, 239,236,44,255, 160,157,29,255, 50,46,16,255, 16,16,13,255, 86,86,86,255, 215,215,215,255, 254,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,255,253,255, 255,255,227,255, 254,254,137,255, 255,255,57,255, 254,254,52,255, 255,255,61,255, 254,254,67,255, 255,255,62,255, 254,254,59,255, 255,255,56,255, 254,254,58,255, 255,255,55,255, 254,254,56,255, 248,246,45,255, 187,183,28,255, 78,73,16,255, 18,18,11,255, 32,32,32,255, 185,185,185,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,171,255,255, 254,41,254,255, 255,73,255,255, 254,121,254,255, 255,143,255,255, 254,139,254,255, 255,129,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,119,255,255, 223,81,228,255, 139,48,146,255, 43,17,44,255, 146,143,146,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,229,229,255, 255,107,107,255, 253,110,110,255, 254,122,122,255, 253,115,115,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,98,98,255, 243,76,76,255, 167,45,45,255, 56,19,19,255, 15,11,11,255, 10,10,10,255, 36,36,36,255, 182,182,182,255, 252,252,252,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,254,254,255, 225,212,212,255, 141,76,76,255, 152,27,27,255, 230,47,47,255, 252,77,77,255, 254,96,96,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,102,102,255, 254,97,97,255, 252,81,81,255, 231,57,57,255, 139,31,31,255, 66,15,15,255, 105,83,83,255, 240,238,238,255, 0,0,0,0, 242,248,242,255, 98,177,94,255, 66,201,56,255, 114,249,108,255, 141,254,134,255, 150,253,141,255, 148,254,137,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 144,254,136,255, 139,253,132,255, 120,242,110,255, 86,201,79,255, 49,136,46,255, 21,61,20,255, 95,109,95,255, 242,243,242,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 224,253,219,255, 106,249,99,255, 133,253,123,255, 169,254,154,255, 168,253,154,255, 152,254,138,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 137,253,129,255, 112,232,105,255, 69,150,66,255, 33,62,33,255, 15,20,15,255, 14,16,14,255, 132,132,132,255, 253,253,253,255, 254,254,255,255, 229,228,255,255, 126,118,255,255, 126,111,253,255, 167,151,254,255, 170,159,253,255, 160,152,254,255, 146,140,253,255, 139,133,254,255, 138,129,253,255, 136,129,253,255, 124,120,245,255, 113,103,230,255, 100,95,216,255, 89,85,198,255, 91,86,202,255, 98,93,215,255, 102,96,223,255, 116,111,243,255, 131,125,252,255, 136,130,254,255, 138,129,253,255, 138,130,254,255, 138,129,253,255, 138,131,254,255, 138,129,253,255, 138,130,254,255, 138,129,253,255, 137,130,254,255, 130,118,253,255, 103,97,234,255, 72,64,183,255, 40,39,119,255, 41,41,73,255, 183,183,193,255, 251,211,211,255, 246,62,62,255, 253,64,64,255, 254,102,102,255, 254,117,117,255, 254,123,123,255, 254,122,123,255, 254,111,111,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,103,103,255, 254,102,103,255, 254,102,103,255, 254,99,100,255, 253,98,99,255, 252,95,98,255, 250,94,95,255, 246,82,82,255, 213,63,63,255, 230,91,91,255, 226,80,80,255, 211,66,66,255, 183,55,55,255, 162,50,50,255, 148,43,43,255, 121,37,37,255, 93,29,29,255, 75,24,24,255, 56,22,22,255, 39,16,16,255, 28,16,16,255, 19,12,12,255, 18,14,14,255, 13,11,11,255, 15,14,14,255, 20,20,20,255, 36,36,36,255, 49,49,49,255, 72,72,72,255, 101,101,101,255, 134,134,134,255, 216,216,216,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,255,253,255, 255,255,179,255, 254,254,53,255, 253,253,46,255, 254,254,62,255, 253,253,66,255, 254,254,62,255, 253,253,57,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 252,251,51,255, 204,200,36,255, 89,85,19,255, 19,18,10,255, 15,15,15,255, 104,104,104,255, 241,241,241,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 241,241,240,255, 202,201,193,255, 176,175,170,255, 235,235,225,255, 254,254,206,255, 255,255,132,255, 254,254,55,255, 253,253,54,255, 254,254,62,255, 253,253,63,255, 254,254,62,255, 253,253,58,255, 254,254,55,255, 253,253,56,255, 254,254,54,255, 243,242,44,255, 183,180,29,255, 117,112,22,255, 89,87,60,255, 220,220,219,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,186,254,255, 253,45,253,255, 254,70,254,255, 253,123,253,255, 254,144,254,255, 253,139,253,255, 254,129,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,119,254,255, 230,87,232,255, 152,53,158,255, 50,22,50,255, 148,144,148,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,249,249,255, 255,167,167,255, 254,100,100,255, 255,120,120,255, 254,121,121,255, 255,108,108,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,100,100,255, 253,89,89,255, 220,65,65,255, 118,35,35,255, 32,13,13,255, 13,12,12,255, 11,11,11,255, 55,55,55,255, 182,182,182,255, 242,242,242,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 253,252,252,255, 200,186,186,255, 127,76,76,255, 139,23,23,255, 211,43,43,255, 252,73,73,255, 254,94,94,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,97,97,255, 255,85,85,255, 244,63,63,255, 178,36,36,255, 84,18,18,255, 66,30,30,255, 179,166,166,255, 254,254,254,255, 0,0,0,0, 210,231,210,255, 69,172,64,255, 85,232,81,255, 129,254,121,255, 145,255,139,255, 148,254,138,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 143,255,134,255, 132,253,124,255, 105,228,96,255, 70,168,66,255, 36,98,35,255, 33,56,31,255, 183,187,181,255, 254,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 239,252,238,255, 105,237,94,255, 115,252,106,255, 158,255,149,255, 166,254,152,255, 152,255,141,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 144,255,135,255, 129,250,124,255, 88,197,88,255, 47,93,45,255, 18,28,16,255, 14,17,14,255, 112,112,112,255, 253,253,253,255, 0,0,0,0, 254,254,255,255, 213,210,255,255, 129,121,254,255, 129,116,254,255, 151,141,254,255, 166,156,254,255, 163,156,254,255, 154,145,254,255, 145,137,254,255, 139,131,254,255, 137,131,254,255, 135,127,254,255, 131,123,253,255, 128,121,251,255, 129,121,252,255, 130,124,253,255, 133,125,254,255, 135,127,254,255, 137,131,254,255, 138,129,254,255, 138,131,254,255, 138,129,254,255, 138,131,254,255, 138,129,254,255, 138,131,254,255, 138,129,254,255, 136,130,254,255, 129,119,253,255, 109,100,243,255, 75,69,202,255, 41,39,124,255, 53,52,94,255, 155,155,170,255, 247,247,248,255, 254,247,247,255, 254,190,190,255, 254,141,141,255, 254,88,88,255, 254,87,87,255, 254,106,106,255, 254,120,120,255, 254,122,122,255, 254,110,110,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,103,104,255, 254,107,108,255, 254,104,109,255, 254,107,109,255, 253,86,87,255, 223,66,66,255, 248,103,103,255, 254,107,107,255, 254,100,100,255, 252,95,95,255, 250,92,92,255, 245,85,87,255, 238,81,83,255, 225,75,75,255, 217,70,70,255, 201,65,65,255, 181,57,58,255, 163,50,50,255, 147,44,44,255, 126,40,40,255, 112,36,36,255, 81,29,29,255, 73,27,27,255, 54,22,22,255, 41,19,19,255, 27,14,14,255, 22,15,15,255, 29,18,18,255, 184,180,180,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,255,251,255, 254,254,148,255, 254,254,42,255, 254,254,50,255, 254,254,63,255, 254,254,66,255, 254,254,61,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,54,255, 254,254,52,255, 238,234,43,255, 153,151,27,255, 54,52,16,255, 14,14,10,255, 27,27,27,255, 118,118,118,255, 212,212,212,255, 254,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 230,230,229,255, 165,164,159,255, 102,102,88,255, 63,61,32,255, 58,53,25,255, 88,87,85,255, 160,160,160,255, 230,230,220,255, 253,253,194,255, 254,254,138,255, 255,255,86,255, 254,254,54,255, 255,255,60,255, 254,254,64,255, 255,255,63,255, 254,254,62,255, 255,255,56,255, 254,253,50,255, 231,220,35,255, 170,162,51,255, 209,207,187,255, 253,253,253,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,190,255,255, 254,44,254,255, 255,69,255,255, 254,120,254,255, 255,143,255,255, 254,139,254,255, 255,129,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,120,255,255, 233,89,234,255, 157,56,163,255, 52,23,53,255, 132,127,132,255, 251,251,251,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,235,235,255, 253,122,122,255, 254,102,102,255, 253,120,120,255, 254,119,119,255, 253,111,111,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,98,98,255, 248,82,82,255, 186,55,55,255, 80,28,28,255, 21,14,14,255, 12,11,11,255, 11,11,11,255, 34,34,34,255, 98,98,98,255, 187,187,187,255, 242,242,242,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 252,252,252,255, 229,226,226,255, 175,163,163,255, 92,45,45,255, 135,24,24,255, 214,44,44,255, 247,66,66,255, 254,88,88,255, 253,101,101,255, 254,102,102,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,102,102,255, 253,88,88,255, 250,70,70,255, 215,47,47,255, 117,23,23,255, 66,26,26,255, 158,141,141,255, 250,249,249,255, 0,0,0,0, 246,250,245,255, 132,192,130,255, 64,195,57,255, 111,251,103,255, 141,253,132,255, 148,254,140,255, 145,253,138,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 141,254,132,255, 121,248,114,255, 86,197,80,255, 51,124,44,255, 24,63,20,255, 69,84,68,255, 230,232,230,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 242,252,241,255, 101,229,91,255, 104,250,96,255, 151,254,141,255, 164,253,150,255, 152,254,139,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 136,252,132,255, 98,214,97,255, 55,112,49,255, 19,37,18,255, 10,15,10,255, 97,98,97,255, 252,252,252,255, 0,0,0,0, 0,0,0,0, 254,254,255,255, 227,226,255,255, 149,141,255,255, 118,104,253,255, 143,127,254,255, 168,152,253,255, 170,159,254,255, 160,151,253,255, 147,139,254,255, 140,131,253,255, 139,131,254,255, 138,129,253,255, 138,131,254,255, 138,129,253,255, 138,130,254,255, 138,129,253,255, 138,131,254,255, 138,129,253,255, 138,130,254,255, 138,129,253,255, 138,130,254,255, 138,129,253,255, 138,131,254,255, 138,129,253,255, 137,130,254,255, 129,120,253,255, 112,105,248,255, 80,73,219,255, 45,41,144,255, 66,66,114,255, 180,177,192,255, 250,250,251,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,250,250,255, 255,189,189,255, 254,71,71,255, 254,58,58,255, 254,99,99,255, 254,118,118,255, 254,113,113,255, 254,104,105,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,102,102,255, 254,101,101,255, 254,109,111,255, 254,109,112,255, 254,112,113,255, 252,97,98,255, 230,75,75,255, 252,111,111,255, 254,114,114,255, 254,111,111,255, 254,105,105,255, 254,104,104,255, 254,103,104,255, 254,102,103,255, 254,102,103,255, 254,100,100,255, 254,99,100,255, 253,96,99,255, 250,94,95,255, 249,90,90,255, 244,86,86,255, 238,80,80,255, 225,73,73,255, 216,66,66,255, 196,60,60,255, 171,52,52,255, 153,42,42,255, 107,31,31,255, 71,47,47,255, 210,209,209,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,255,239,255, 255,255,91,255, 254,254,37,255, 253,253,59,255, 254,254,65,255, 253,253,66,255, 254,254,59,255, 253,253,57,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 252,252,52,255, 221,218,36,255, 126,119,25,255, 34,34,16,255, 11,11,10,255, 14,14,14,255, 74,74,74,255, 172,172,172,255, 244,244,244,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 229,229,229,255, 160,160,157,255, 80,80,73,255, 42,37,20,255, 57,55,10,255, 101,97,14,255, 115,110,19,255, 24,24,13,255, 20,20,20,255, 76,76,76,255, 199,199,199,255, 250,250,247,255, 255,255,228,255, 255,255,159,255, 254,254,81,255, 253,253,55,255, 254,254,61,255, 253,253,64,255, 254,254,59,255, 245,238,38,255, 171,159,26,255, 178,176,138,255, 251,251,250,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,213,254,255, 253,51,253,255, 254,65,254,255, 253,116,253,255, 254,140,254,255, 253,139,253,255, 254,129,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,119,254,255, 232,89,233,255, 159,56,166,255, 56,23,57,255, 115,110,115,255, 246,246,246,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,254,254,255, 254,216,216,255, 255,111,111,255, 254,104,104,255, 255,124,124,255, 254,119,119,255, 255,108,108,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,101,101,255, 254,91,91,255, 238,73,73,255, 161,46,46,255, 79,26,26,255, 21,13,13,255, 12,12,12,255, 10,10,10,255, 12,12,12,255, 31,31,31,255, 111,111,111,255, 203,203,203,255, 225,225,225,255, 230,230,230,255, 235,235,235,255, 235,235,235,255, 231,231,231,255, 217,217,217,255, 142,138,138,255, 66,54,54,255, 63,29,29,255, 125,25,25,255, 212,44,44,255, 247,63,63,255, 254,80,80,255, 255,97,97,255, 254,102,102,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,102,102,255, 255,97,97,255, 254,79,79,255, 239,56,56,255, 166,32,32,255, 78,21,21,255, 137,116,116,255, 241,238,238,255, 0,0,0,0, 0,0,0,0, 203,227,202,255, 62,160,57,255, 81,219,67,255, 127,254,113,255, 147,254,137,255, 150,255,140,255, 145,254,137,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 144,254,136,255, 136,254,131,255, 108,236,104,255, 71,167,63,255, 36,84,31,255, 22,46,21,255, 138,148,138,255, 252,252,252,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 227,246,226,255, 90,221,83,255, 106,252,95,255, 151,255,139,255, 162,254,148,255, 150,255,141,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 140,253,132,255, 107,222,97,255, 63,127,54,255, 21,44,19,255, 13,18,13,255, 83,87,83,255, 243,243,243,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,254,255,255, 244,243,255,255, 188,182,254,255, 108,96,254,255, 129,113,254,255, 160,146,254,255, 166,154,254,255, 160,156,254,255, 153,146,254,255, 148,139,254,255, 144,137,254,255, 140,132,254,255, 139,132,254,255, 138,129,254,255, 138,130,254,255, 138,129,254,255, 138,131,254,255, 139,129,254,255, 139,132,254,255, 139,129,254,255, 139,132,254,255, 141,129,254,255, 137,130,254,255, 132,120,254,255, 115,103,251,255, 87,79,232,255, 54,43,173,255, 58,55,123,255, 187,187,203,255, 253,253,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,246,246,255, 252,85,85,255, 253,48,48,255, 254,96,96,255, 254,114,116,255, 254,111,115,255, 254,104,106,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,103,255, 254,96,98,255, 251,81,82,255, 251,86,87,255, 254,92,92,255, 254,90,91,255, 254,86,87,255, 245,88,88,255, 254,116,116,255, 254,124,125,255, 254,121,123,255, 254,114,114,255, 254,109,109,255, 254,103,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,103,104,255, 254,102,104,255, 254,101,103,255, 254,100,102,255, 254,100,100,255, 254,99,99,255, 253,94,95,255, 251,89,90,255, 232,66,66,255, 137,34,34,255, 91,66,66,255, 235,234,234,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,255,254,255, 255,255,185,255, 254,254,49,255, 254,254,48,255, 254,254,63,255, 254,254,67,255, 254,254,62,255, 254,254,60,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,54,255, 250,250,45,255, 204,197,36,255, 112,105,26,255, 49,46,16,255, 15,15,10,255, 14,14,14,255, 32,32,32,255, 141,141,141,255, 232,232,232,255, 254,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 253,253,253,255, 226,226,226,255, 158,158,158,255, 76,75,74,255, 27,27,19,255, 37,35,13,255, 89,84,12,255, 148,140,18,255, 194,188,25,255, 208,205,31,255, 84,83,19,255, 26,24,16,255, 14,14,13,255, 45,45,45,255, 151,151,151,255, 243,243,243,255, 255,255,253,255, 255,255,222,255, 254,254,128,255, 255,255,61,255, 254,254,50,255, 254,253,57,255, 205,196,34,255, 162,159,106,255, 231,231,225,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,217,255,255, 254,48,254,255, 255,58,255,255, 254,111,254,255, 255,136,255,255, 254,138,254,255, 255,129,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,120,255,255, 236,89,237,255, 160,57,164,255, 57,25,57,255, 115,110,115,255, 246,246,246,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,253,253,255, 255,183,183,255, 253,103,103,255, 254,115,115,255, 253,126,126,255, 254,117,117,255, 253,110,110,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,101,101,255, 252,92,92,255, 233,70,70,255, 178,52,52,255, 91,32,32,255, 41,19,19,255, 17,12,12,255, 10,10,10,255, 11,11,11,255, 16,16,16,255, 35,35,35,255, 41,41,41,255, 57,57,57,255, 73,73,73,255, 72,72,72,255, 59,59,59,255, 42,40,40,255, 28,15,15,255, 57,16,16,255, 122,26,26,255, 204,45,45,255, 245,65,65,255, 254,82,82,255, 253,95,95,255, 254,102,102,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,97,97,255, 254,83,83,255, 246,62,62,255, 207,41,41,255, 109,19,19,255, 98,65,65,255, 225,219,219,255, 0,0,0,0, 0,0,0,0, 248,251,248,255, 132,188,130,255, 48,170,42,255, 99,239,88,255, 137,254,126,255, 149,253,139,255, 148,254,138,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 143,253,133,255, 126,251,119,255, 94,212,85,255, 56,132,50,255, 23,54,21,255, 36,54,35,255, 206,211,206,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 197,234,197,255, 70,212,65,255, 107,251,97,255, 150,254,138,255, 158,253,148,255, 149,254,139,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 139,252,132,255, 111,223,103,255, 64,140,59,255, 25,50,23,255, 14,20,13,255, 75,76,75,255, 236,236,236,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 250,249,255,255, 195,193,255,255, 122,114,253,255, 116,103,254,255, 143,131,253,255, 162,152,254,255, 163,155,253,255, 162,153,254,255, 159,149,253,255, 153,144,254,255, 147,141,253,255, 144,136,254,255, 143,133,253,255, 143,136,254,255, 143,132,253,255, 142,134,254,255, 144,134,253,255, 143,133,254,255, 138,132,253,255, 133,125,253,255, 121,113,252,255, 108,94,248,255, 86,75,233,255, 56,52,189,255, 51,43,134,255, 167,165,190,255, 250,250,251,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 253,225,225,255, 245,64,64,255, 253,52,52,255, 254,92,94,255, 254,113,113,255, 254,111,111,255, 254,104,105,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,102,103,255, 254,94,96,255, 250,79,83,255, 221,56,57,255, 202,43,43,255, 241,56,57,255, 252,69,69,255, 252,95,95,255, 254,89,89,255, 254,83,83,255, 254,102,103,255, 254,118,119,255, 254,125,125,255, 254,118,118,255, 254,105,105,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 253,104,104,255, 254,104,104,255, 253,104,104,255, 254,104,105,255, 253,104,105,255, 254,105,105,255, 253,104,105,255, 253,97,98,255, 226,66,67,255, 114,30,31,255, 94,74,74,255, 245,245,245,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,255,247,255, 254,254,131,255, 253,253,37,255, 254,254,50,255, 253,253,64,255, 254,254,66,255, 253,253,64,255, 254,254,59,255, 253,253,57,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 253,253,53,255, 248,247,45,255, 211,202,37,255, 142,135,28,255, 64,59,19,255, 16,16,12,255, 12,12,12,255, 21,21,21,255, 72,72,72,255, 138,138,138,255, 201,201,201,255, 232,232,232,255, 246,246,246,255, 244,244,244,255, 236,236,236,255, 233,233,233,255, 225,225,225,255, 192,192,192,255, 130,130,130,255, 64,64,64,255, 23,23,20,255, 30,27,10,255, 66,64,14,255, 120,115,18,255, 180,174,26,255, 225,221,34,255, 247,246,43,255, 248,247,45,255, 196,189,35,255, 127,116,27,255, 61,59,16,255, 18,18,11,255, 35,35,33,255, 188,188,188,255, 0,0,0,0, 0,0,0,0, 255,255,245,255, 255,255,202,255, 255,255,124,255, 252,251,57,255, 184,180,73,255, 228,228,221,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,217,254,255, 247,50,250,255, 251,58,252,255, 253,109,253,255, 254,136,254,255, 253,139,253,255, 254,130,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,120,254,255, 239,93,241,255, 166,58,173,255, 60,23,60,255, 101,96,101,255, 242,242,242,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,249,249,255, 254,178,178,255, 255,100,100,255, 254,120,120,255, 255,125,125,255, 254,119,119,255, 255,108,108,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,101,101,255, 254,90,90,255, 244,75,75,255, 202,60,60,255, 138,40,40,255, 81,25,25,255, 45,20,20,255, 19,11,11,255, 13,12,12,255, 10,10,10,255, 13,12,12,255, 11,10,10,255, 14,12,12,255, 13,10,10,255, 22,13,13,255, 44,14,14,255, 94,23,23,255, 155,34,34,255, 206,49,49,255, 247,66,66,255, 254,87,87,255, 255,96,96,255, 254,102,102,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,102,102,255, 255,99,99,255, 254,83,83,255, 251,66,66,255, 218,46,46,255, 144,27,27,255, 83,33,33,255, 188,173,173,255, 253,253,253,255, 0,0,0,0, 0,0,0,0, 232,243,231,255, 77,165,71,255, 64,198,58,255, 114,250,106,255, 142,255,135,255, 148,254,140,255, 145,255,137,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 144,255,136,255, 137,254,130,255, 115,242,107,255, 77,180,70,255, 40,97,36,255, 17,41,17,255, 96,108,96,255, 242,243,242,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,255,254,255, 170,222,167,255, 64,211,60,255, 111,253,102,255, 148,255,136,255, 154,254,148,255, 146,255,138,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 141,254,132,255, 112,234,107,255, 67,156,67,255, 29,60,29,255, 14,24,14,255, 60,65,60,255, 227,227,227,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,254,255,255, 227,226,254,255, 142,139,254,255, 108,100,254,255, 121,107,254,255, 137,123,254,255, 147,139,254,255, 153,143,254,255, 158,147,254,255, 160,147,254,255, 159,143,254,255, 152,143,254,255, 151,142,254,255, 149,138,254,255, 146,138,254,255, 146,134,254,255, 137,128,254,255, 124,113,254,255, 108,98,251,255, 87,77,236,255, 64,56,203,255, 62,58,172,255, 94,92,164,255, 167,165,195,255, 247,247,249,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 252,196,196,255, 244,39,39,255, 254,54,57,255, 254,96,99,255, 254,111,111,255, 254,108,111,255, 254,104,106,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,100,100,255, 254,87,88,255, 242,68,69,255, 163,38,38,255, 89,22,22,255, 180,122,125,255, 252,222,222,255, 254,234,234,255, 254,222,222,255, 254,138,140,255, 254,68,71,255, 254,89,89,255, 254,117,117,255, 254,120,120,255, 254,109,111,255, 254,103,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,103,104,255, 254,102,104,255, 254,102,104,255, 254,101,105,255, 254,104,109,255, 254,109,109,255, 254,109,109,255, 254,102,102,255, 208,60,62,255, 93,22,23,255, 108,93,93,255, 247,246,246,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,254,227,255, 254,254,89,255, 254,254,39,255, 254,254,53,255, 254,254,64,255, 254,254,67,255, 254,254,62,255, 254,254,60,255, 254,254,56,255, 254,254,58,255, 254,254,55,255, 254,254,58,255, 254,254,54,255, 252,251,45,255, 228,227,40,255, 162,158,29,255, 76,73,21,255, 22,21,13,255, 14,14,13,255, 10,10,10,255, 14,14,14,255, 33,33,33,255, 61,61,61,255, 107,107,107,255, 100,100,100,255, 75,75,75,255, 66,66,66,255, 43,43,43,255, 31,31,31,255, 14,13,11,255, 28,28,13,255, 58,58,12,255, 108,103,17,255, 156,150,22,255, 204,195,27,255, 238,235,39,255, 253,253,44,255, 254,254,51,255, 255,255,52,255, 252,250,50,255, 236,231,44,255, 187,186,30,255, 116,114,22,255, 103,100,61,255, 224,224,221,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,255,244,255, 254,254,198,255, 243,243,200,255, 253,253,253,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 250,217,251,255, 227,47,238,255, 246,54,250,255, 254,107,254,255, 255,134,255,255, 254,138,254,255, 255,129,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,123,255,255, 247,100,247,255, 174,60,176,255, 60,23,60,255, 49,45,49,255, 142,142,142,255, 197,197,197,255, 230,230,230,255, 246,246,246,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,242,242,255, 255,155,155,255, 253,103,103,255, 254,117,117,255, 253,125,125,255, 254,119,119,255, 253,111,111,255, 254,104,104,255, 253,105,105,255, 254,103,103,255, 253,104,104,255, 254,102,102,255, 253,96,96,255, 251,88,88,255, 232,72,72,255, 193,57,57,255, 149,41,41,255, 90,28,28,255, 53,22,22,255, 52,21,21,255, 57,23,23,255, 61,23,23,255, 61,22,22,255, 68,20,20,255, 94,26,26,255, 143,33,33,255, 193,47,47,255, 234,63,63,255, 246,78,78,255, 254,88,88,255, 253,95,95,255, 254,101,101,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,97,97,255, 254,88,88,255, 249,69,69,255, 226,47,47,255, 152,29,29,255, 97,31,31,255, 157,135,135,255, 247,244,244,255, 0,0,0,0, 0,0,0,0, 254,254,254,255, 173,215,173,255, 57,176,51,255, 90,233,82,255, 130,252,119,255, 148,254,137,255, 148,253,138,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 143,254,133,255, 132,252,118,255, 102,222,98,255, 60,143,57,255, 25,69,24,255, 29,48,29,255, 182,186,182,255, 254,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 244,251,244,255, 107,197,102,255, 74,227,68,255, 122,253,111,255, 153,254,137,255, 152,253,146,255, 145,254,138,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 144,253,133,255, 121,243,113,255, 78,172,74,255, 34,70,34,255, 14,31,14,255, 47,52,47,255, 216,216,216,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 243,243,255,255, 197,195,255,255, 152,145,255,255, 113,99,253,255, 110,103,252,255, 117,108,252,255, 123,111,253,255, 138,123,253,255, 139,127,254,255, 131,122,253,255, 127,118,253,255, 126,113,252,255, 121,110,251,255, 114,106,249,255, 104,94,246,255, 88,75,238,255, 80,71,221,255, 79,72,195,255, 136,136,198,255, 210,210,229,255, 239,239,244,255, 254,254,255,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 249,182,182,255, 242,34,35,255, 253,63,66,255, 254,99,100,255, 254,113,114,255, 254,106,107,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,101,101,255, 253,85,85,255, 227,60,60,255, 128,31,31,255, 53,22,22,255, 191,183,183,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,208,209,255, 253,56,62,255, 253,68,72,255, 254,107,108,255, 254,117,117,255, 254,106,110,255, 254,104,105,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 253,104,104,255, 254,104,104,255, 253,101,101,255, 253,91,91,255, 250,90,91,255, 253,97,97,255, 253,94,94,255, 253,92,92,255, 221,71,71,255, 105,27,27,255, 157,141,141,255, 251,251,251,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,255,254,255, 255,255,227,255, 254,254,123,255, 253,253,45,255, 254,254,52,255, 253,253,64,255, 254,254,66,255, 253,253,64,255, 254,254,60,255, 253,253,57,255, 254,254,55,255, 253,253,56,255, 254,254,56,255, 253,253,53,255, 252,252,51,255, 236,233,43,255, 180,173,32,255, 113,104,24,255, 63,61,17,255, 33,31,14,255, 18,17,11,255, 16,16,12,255, 14,14,10,255, 13,13,13,255, 12,12,10,255, 15,15,12,255, 15,15,10,255, 22,21,13,255, 30,28,10,255, 51,47,15,255, 98,94,18,255, 149,141,20,255, 199,189,28,255, 231,224,34,255, 249,246,40,255, 253,252,49,255, 254,254,53,255, 253,253,56,255, 254,254,56,255, 253,253,55,255, 254,254,51,255, 243,241,41,255, 186,179,38,255, 204,200,168,255, 253,253,253,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 246,246,246,255, 227,227,227,255, 173,173,173,255, 135,115,136,255, 165,30,175,255, 232,54,237,255, 252,106,252,255, 254,133,254,255, 253,137,253,255, 254,129,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,124,254,255, 249,99,249,255, 188,65,188,255, 68,26,68,255, 15,10,15,255, 17,17,17,255, 32,32,32,255, 57,57,57,255, 107,107,107,255, 148,148,148,255, 176,176,176,255, 242,242,242,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,241,241,255, 254,165,165,255, 255,94,94,255, 254,104,104,255, 255,120,120,255, 254,121,121,255, 255,113,113,255, 254,108,108,255, 255,104,104,255, 254,103,103,255, 255,102,102,255, 254,102,102,255, 255,101,101,255, 254,99,99,255, 250,91,91,255, 242,79,79,255, 217,68,68,255, 197,59,59,255, 198,57,57,255, 193,55,55,255, 186,54,54,255, 187,52,52,255, 194,52,52,255, 209,61,61,255, 238,72,72,255, 250,80,80,255, 254,90,90,255, 254,96,96,255, 255,100,100,255, 254,102,102,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,102,102,255, 255,97,97,255, 254,82,82,255, 250,65,65,255, 218,45,45,255, 142,22,22,255, 115,62,62,255, 186,164,164,255, 238,238,236,255, 228,229,228,255, 233,233,233,255, 240,240,240,255, 240,246,240,255, 96,173,94,255, 67,201,60,255, 113,248,101,255, 143,254,129,255, 149,255,140,255, 145,254,137,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 144,254,136,255, 135,254,128,255, 116,243,107,255, 81,182,75,255, 42,96,40,255, 18,42,18,255, 76,86,76,255, 230,231,230,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 215,235,215,255, 74,186,67,255, 94,239,81,255, 132,254,119,255, 153,255,141,255, 151,254,138,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,135,255, 128,248,121,255, 81,180,79,255, 35,79,33,255, 15,33,15,255, 26,37,26,255, 202,205,202,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 251,251,255,255, 233,231,254,255, 228,227,254,255, 196,190,254,255, 146,142,250,255, 104,97,248,255, 97,86,246,255, 89,82,241,255, 86,78,237,255, 93,85,233,255, 109,101,233,255, 112,106,229,255, 128,123,228,255, 150,145,223,255, 199,197,236,255, 229,228,242,255, 249,249,252,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,251,251,255, 244,140,140,255, 245,40,43,255, 254,75,75,255, 254,102,102,255, 254,111,114,255, 254,105,105,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,99,99,255, 253,78,78,255, 212,53,53,255, 104,23,23,255, 74,48,48,255, 219,216,216,255, 0,0,0,0, 0,0,0,0, 255,254,254,255, 252,179,179,255, 248,41,46,255, 253,65,68,255, 254,105,105,255, 254,116,117,255, 254,109,112,255, 254,103,105,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,103,104,255, 254,102,104,255, 254,94,94,255, 245,72,72,255, 194,49,49,255, 189,45,45,255, 241,65,65,255, 250,85,85,255, 252,139,139,255, 229,140,140,255, 235,212,212,255, 255,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,254,236,255, 254,254,127,255, 254,254,41,255, 254,254,50,255, 254,254,63,255, 254,254,67,255, 254,254,65,255, 254,254,60,255, 254,254,55,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,56,255, 247,245,47,255, 228,225,42,255, 199,192,34,255, 153,143,27,255, 107,103,21,255, 89,85,21,255, 76,69,18,255, 57,53,17,255, 62,61,17,255, 71,69,18,255, 83,79,17,255, 109,101,21,255, 138,130,22,255, 165,159,26,255, 207,200,31,255, 234,228,38,255, 250,248,44,255, 253,252,50,255, 254,254,52,255, 254,254,57,255, 255,255,56,255, 254,254,58,255, 255,255,56,255, 254,254,52,255, 254,251,43,255, 209,199,33,255, 184,180,127,255, 245,245,242,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,254,255,255, 232,230,232,255, 162,162,162,255, 105,105,105,255, 48,48,48,255, 24,24,24,255, 19,13,19,255, 63,15,68,255, 183,48,187,255, 249,101,249,255, 255,129,255,255, 254,134,254,255, 255,129,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,126,255,255, 254,112,254,255, 220,82,220,255, 108,41,109,255, 36,18,37,255, 33,16,33,255, 25,16,27,255, 15,11,15,255, 16,13,16,255, 17,15,17,255, 46,46,46,255, 205,205,205,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,248,248,255, 255,190,190,255, 253,115,115,255, 254,101,101,255, 253,121,121,255, 254,125,125,255, 253,122,122,255, 254,115,115,255, 253,110,110,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,102,102,255, 253,101,101,255, 253,96,96,255, 251,89,89,255, 252,87,87,255, 250,85,85,255, 250,87,87,255, 249,87,87,255, 251,85,85,255, 251,88,88,255, 254,93,93,255, 253,99,99,255, 254,101,101,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,101,101,255, 253,96,96,255, 254,82,82,255, 251,64,64,255, 225,42,42,255, 152,27,27,255, 140,82,82,255, 216,204,204,255, 252,252,251,255, 173,195,172,255, 53,62,52,255, 67,67,67,255, 88,88,88,255, 121,133,120,255, 60,158,52,255, 87,227,78,255, 125,254,113,255, 145,253,136,255, 148,254,138,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 143,253,134,255, 128,250,120,255, 100,220,92,255, 62,150,61,255, 28,66,28,255, 32,49,32,255, 181,185,181,255, 252,252,252,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 249,252,249,255, 138,196,137,255, 56,188,48,255, 105,249,98,255, 138,253,132,255, 149,254,144,255, 148,253,138,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 144,253,134,255, 126,247,120,255, 81,184,80,255, 39,87,36,255, 16,33,16,255, 49,57,49,255, 218,219,218,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 251,251,254,255, 232,231,253,255, 228,226,252,255, 227,226,251,255, 227,226,250,255, 230,229,249,255, 236,235,250,255, 238,238,250,255, 245,245,252,255, 252,252,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,248,248,255, 243,103,103,255, 246,47,47,255, 254,82,82,255, 254,105,105,255, 254,113,113,255, 254,106,106,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,99,99,255, 251,71,71,255, 194,46,48,255, 83,18,20,255, 96,77,77,255, 245,244,244,255, 0,0,0,0, 0,0,0,0, 255,251,251,255, 248,125,125,255, 245,30,32,255, 252,67,68,255, 254,102,102,255, 254,114,114,255, 254,106,107,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 253,104,104,255, 254,101,101,255, 253,86,86,255, 218,58,58,255, 119,30,30,255, 63,20,20,255, 193,159,159,255, 253,230,230,255, 255,251,251,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,255,237,255, 254,254,124,255, 253,253,40,255, 254,254,50,255, 253,253,64,255, 254,254,67,255, 253,253,67,255, 254,254,61,255, 253,253,57,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,53,255, 251,251,50,255, 241,239,44,255, 220,219,39,255, 204,199,35,255, 187,174,29,255, 176,165,28,255, 182,174,31,255, 190,182,33,255, 197,188,31,255, 212,204,34,255, 226,222,39,255, 243,238,42,255, 251,247,44,255, 253,252,50,255, 254,254,53,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 252,251,50,255, 232,220,35,255, 169,162,69,255, 230,230,222,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,239,254,255, 168,101,168,255, 38,21,38,255, 15,12,15,255, 21,10,21,255, 44,15,45,255, 71,24,74,255, 112,35,114,255, 190,56,193,255, 248,95,249,255, 254,123,254,255, 253,131,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,127,254,255, 253,123,253,255, 248,104,248,255, 196,74,200,255, 142,52,151,255, 131,49,136,255, 107,41,116,255, 93,35,95,255, 83,34,84,255, 60,27,60,255, 57,41,57,255, 199,198,199,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,254,254,255, 254,219,219,255, 255,122,122,255, 254,100,100,255, 255,115,115,255, 254,122,122,255, 255,125,125,255, 254,119,119,255, 255,108,108,255, 254,104,104,255, 255,103,103,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,101,101,255, 254,102,102,255, 255,101,101,255, 254,102,102,255, 255,101,101,255, 254,101,101,255, 255,100,100,255, 254,102,102,255, 255,101,101,255, 254,102,102,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,103,103,255, 255,102,102,255, 254,99,99,255, 255,94,94,255, 254,78,78,255, 249,63,63,255, 220,41,41,255, 159,24,24,255, 149,84,84,255, 232,221,221,255, 0,0,0,0, 236,246,235,255, 94,167,90,255, 16,35,15,255, 12,12,12,255, 10,10,10,255, 14,23,13,255, 48,150,47,255, 102,245,99,255, 133,255,126,255, 148,254,137,255, 145,255,138,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 140,254,132,255, 116,244,112,255, 84,188,75,255, 47,111,44,255, 17,44,17,255, 85,96,85,255, 242,242,242,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,254,254,255, 207,225,207,255, 66,156,64,255, 73,209,64,255, 119,254,112,255, 143,254,137,255, 149,255,143,255, 145,254,137,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 141,254,132,255, 117,240,111,255, 77,174,74,255, 34,80,34,255, 14,33,14,255, 84,93,84,255, 244,244,244,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,244,244,255, 242,82,82,255, 249,50,50,255, 254,85,85,255, 254,107,107,255, 254,110,111,255, 254,104,105,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,103,255, 254,96,96,255, 245,68,70,255, 169,41,43,255, 67,19,19,255, 118,100,100,255, 250,249,249,255, 0,0,0,0, 0,0,0,0, 255,248,248,255, 245,93,93,255, 247,33,34,255, 254,74,75,255, 254,106,106,255, 254,114,114,255, 254,105,109,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,103,104,255, 254,100,102,255, 253,82,82,255, 194,51,51,255, 84,22,22,255, 52,29,29,255, 197,193,193,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,254,236,255, 254,254,134,255, 254,254,57,255, 254,254,47,255, 254,254,58,255, 254,254,66,255, 254,254,67,255, 254,254,61,255, 254,254,60,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 254,254,56,255, 254,254,58,255, 255,255,54,255, 254,254,54,255, 254,254,51,255, 252,252,50,255, 251,249,47,255, 247,244,45,255, 250,247,47,255, 252,250,47,255, 252,251,50,255, 253,252,50,255, 254,253,51,255, 254,254,52,255, 255,255,53,255, 254,254,56,255, 255,255,56,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,53,255, 242,238,38,255, 172,161,48,255, 207,204,180,255, 253,253,253,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,240,255,255, 240,94,240,255, 171,34,171,255, 91,36,91,255, 92,29,98,255, 136,42,141,255, 162,54,167,255, 200,71,204,255, 231,83,233,255, 253,107,253,255, 255,126,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,127,255,255, 254,127,254,255, 255,122,255,255, 251,108,252,255, 242,98,243,255, 229,86,233,255, 218,82,222,255, 214,80,218,255, 203,77,206,255, 167,59,167,255, 87,42,87,255, 178,176,178,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,254,254,255, 255,233,233,255, 253,157,157,255, 254,100,100,255, 253,97,97,255, 254,112,112,255, 253,121,121,255, 254,119,119,255, 253,117,117,255, 254,113,113,255, 253,110,110,255, 254,104,104,255, 253,105,105,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,103,103,255, 253,104,104,255, 254,104,104,255, 253,105,105,255, 254,104,104,255, 253,104,104,255, 254,98,98,255, 253,85,85,255, 254,73,73,255, 245,53,53,255, 204,35,35,255, 153,36,36,255, 162,102,102,255, 234,221,221,255, 0,0,0,0, 253,254,253,255, 177,216,171,255, 67,183,57,255, 42,90,37,255, 20,27,20,255, 19,25,19,255, 14,21,14,255, 53,129,50,255, 113,239,108,255, 139,254,133,255, 148,253,138,255, 145,254,137,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 144,254,136,255, 134,252,127,255, 104,224,94,255, 68,154,62,255, 37,79,33,255, 22,37,22,255, 143,147,143,255, 254,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 236,242,235,255, 97,155,92,255, 46,149,37,255, 88,228,80,255, 133,253,120,255, 146,253,139,255, 148,254,138,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 141,253,132,255, 113,235,103,255, 66,153,64,255, 27,64,27,255, 15,32,15,255, 106,111,106,255, 252,252,252,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 252,218,218,255, 243,60,60,255, 251,57,58,255, 254,88,89,255, 254,108,109,255, 254,105,110,255, 254,104,106,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,100,100,255, 253,87,87,255, 234,61,61,255, 151,35,35,255, 62,22,22,255, 163,149,149,255, 253,252,252,255, 0,0,0,0, 0,0,0,0, 253,236,236,255, 243,76,76,255, 252,39,40,255, 254,81,83,255, 254,105,107,255, 254,113,113,255, 254,105,106,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 253,104,104,255, 254,99,99,255, 248,76,76,255, 178,47,47,255, 69,19,19,255, 73,54,54,255, 225,223,223,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,255,246,255, 254,254,187,255, 253,253,74,255, 254,254,43,255, 253,253,54,255, 254,254,63,255, 253,253,65,255, 254,254,65,255, 253,253,61,255, 254,254,60,255, 253,253,57,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 253,253,53,255, 254,254,53,255, 253,253,56,255, 254,254,56,255, 253,253,55,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 253,251,49,255, 199,194,34,255, 188,184,143,255, 249,249,247,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,248,255,255, 255,113,255,255, 252,48,252,255, 224,90,224,255, 204,82,209,255, 225,83,229,255, 239,94,242,255, 249,104,249,255, 253,111,254,255, 253,122,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,128,254,255, 253,128,253,255, 254,127,254,255, 253,126,253,255, 254,124,254,255, 253,120,253,255, 254,120,254,255, 253,120,253,255, 252,111,252,255, 198,70,199,255, 94,41,94,255, 174,172,174,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,248,248,255, 255,213,213,255, 254,145,145,255, 255,102,102,255, 254,102,102,255, 255,116,116,255, 254,121,121,255, 255,123,123,255, 254,118,118,255, 255,112,112,255, 254,109,109,255, 255,107,107,255, 254,104,104,255, 255,104,104,255, 254,103,103,255, 255,103,103,255, 254,103,103,255, 255,103,103,255, 254,103,103,255, 255,103,103,255, 254,103,103,255, 255,103,103,255, 254,103,103,255, 255,103,103,255, 254,103,103,255, 255,103,103,255, 254,103,103,255, 255,104,104,255, 254,101,101,255, 255,99,99,255, 254,90,90,255, 254,77,77,255, 250,62,62,255, 235,44,44,255, 195,43,43,255, 177,88,88,255, 217,183,183,255, 246,241,241,255, 0,0,0,0, 0,0,0,0, 213,233,213,255, 86,183,85,255, 88,227,82,255, 98,189,89,255, 63,123,60,255, 54,109,52,255, 43,86,43,255, 67,141,63,255, 121,242,113,255, 142,255,134,255, 148,254,137,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 143,255,133,255, 122,249,115,255, 82,192,79,255, 49,109,45,255, 21,49,21,255, 38,50,38,255, 207,211,207,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 244,246,244,255, 139,175,136,255, 37,120,28,255, 64,181,50,255, 107,246,98,255, 137,254,129,255, 148,254,140,255, 145,255,138,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 135,253,128,255, 109,226,97,255, 62,141,60,255, 21,55,21,255, 21,37,21,255, 160,166,160,255, 254,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 249,195,195,255, 241,40,40,255, 254,64,66,255, 254,96,100,255, 254,110,111,255, 254,107,109,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,99,102,255, 252,82,84,255, 216,54,54,255, 125,31,32,255, 53,24,25,255, 191,183,183,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 252,210,210,255, 241,49,49,255, 250,45,45,255, 254,84,85,255, 254,108,108,255, 254,108,111,255, 254,104,106,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,101,101,255, 254,96,96,255, 242,69,69,255, 155,39,39,255, 57,18,18,255, 86,72,72,255, 243,242,242,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,254,252,255, 254,254,225,255, 254,254,127,255, 254,254,57,255, 254,254,50,255, 254,254,54,255, 254,254,63,255, 254,254,67,255, 254,254,67,255, 254,254,61,255, 254,254,59,255, 254,254,59,255, 255,255,55,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,55,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,55,255, 254,252,50,255, 228,223,38,255, 183,178,101,255, 240,240,234,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,254,255,255, 255,123,255,255, 255,44,255,255, 254,107,254,255, 253,134,253,255, 254,126,254,255, 255,124,255,255, 254,123,254,255, 255,126,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,128,254,255, 255,128,255,255, 254,129,254,255, 255,128,255,255, 254,129,254,255, 255,129,255,255, 254,129,254,255, 255,129,255,255, 254,129,254,255, 255,129,255,255, 254,128,254,255, 255,129,255,255, 254,129,254,255, 253,120,253,255, 197,71,200,255, 97,41,97,255, 175,172,175,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,248,248,255, 255,214,214,255, 253,146,146,255, 254,93,93,255, 253,88,88,255, 254,96,96,255, 253,108,108,255, 254,114,114,255, 253,118,118,255, 254,118,118,255, 253,115,115,255, 254,115,115,255, 253,112,112,255, 254,110,110,255, 253,110,110,255, 254,110,110,255, 253,111,111,255, 254,110,110,255, 253,109,109,255, 254,109,109,255, 253,109,109,255, 254,109,109,255, 253,105,105,255, 254,104,104,255, 253,101,101,255, 254,93,93,255, 253,82,82,255, 254,71,71,255, 248,56,56,255, 229,41,41,255, 202,43,43,255, 196,89,89,255, 224,183,183,255, 246,237,237,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 248,252,248,255, 133,199,130,255, 67,204,60,255, 122,251,111,255, 142,248,131,255, 122,233,117,255, 114,226,106,255, 103,209,95,255, 102,209,96,255, 130,247,121,255, 142,254,135,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 144,253,136,255, 137,254,131,255, 110,233,100,255, 63,146,59,255, 32,64,31,255, 15,32,15,255, 80,85,80,255, 237,238,237,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 250,251,250,255, 172,191,170,255, 43,111,37,255, 56,161,43,255, 94,223,80,255, 126,251,114,255, 142,254,134,255, 148,253,138,255, 145,254,137,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,134,255, 128,251,121,255, 92,210,85,255, 51,122,48,255, 19,45,17,255, 31,44,31,255, 200,204,200,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,253,253,255, 247,164,164,255, 241,38,38,255, 253,74,74,255, 254,102,102,255, 254,111,114,255, 254,105,106,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,99,100,255, 250,79,81,255, 199,48,51,255, 98,22,26,255, 72,49,52,255, 219,216,217,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 250,194,194,255, 239,33,33,255, 250,52,56,255, 254,92,94,255, 254,113,113,255, 254,109,110,255, 254,104,105,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 253,102,102,255, 254,93,93,255, 236,65,65,255, 136,34,34,255, 45,16,16,255, 106,94,94,255, 248,247,247,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,255,243,255, 255,255,206,255, 254,254,126,255, 253,253,52,255, 254,254,48,255, 253,253,56,255, 254,254,62,255, 253,253,63,255, 254,254,63,255, 253,253,64,255, 254,254,60,255, 253,253,61,255, 254,254,60,255, 253,253,57,255, 254,254,55,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,51,255, 239,235,36,255, 173,167,60,255, 224,223,208,255, 254,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,254,255,255, 255,129,255,255, 254,40,254,255, 253,101,253,255, 254,141,254,255, 253,139,253,255, 254,129,254,255, 253,129,253,255, 254,129,254,255, 253,129,253,255, 254,130,254,255, 253,129,253,255, 254,129,254,255, 253,129,253,255, 254,129,254,255, 253,130,253,255, 254,132,254,255, 253,134,253,255, 254,135,254,255, 253,135,253,255, 254,135,254,255, 253,135,253,255, 254,134,254,255, 253,134,253,255, 254,134,254,255, 253,134,253,255, 254,134,254,255, 253,135,253,255, 254,129,254,255, 211,89,211,255, 103,45,103,255, 175,172,175,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,248,248,255, 255,217,217,255, 254,172,172,255, 255,128,128,255, 254,94,94,255, 255,88,88,255, 254,95,95,255, 255,101,101,255, 254,106,106,255, 255,109,109,255, 254,112,112,255, 255,112,112,255, 254,112,112,255, 255,110,110,255, 254,111,111,255, 255,109,109,255, 254,108,108,255, 255,105,105,255, 254,102,102,255, 255,100,100,255, 254,92,92,255, 255,84,84,255, 254,78,78,255, 253,65,65,255, 245,45,45,255, 231,46,46,255, 216,58,58,255, 212,111,111,255, 227,183,183,255, 248,237,237,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 215,234,215,255, 81,190,72,255, 102,241,89,255, 144,254,131,255, 151,255,142,255, 144,254,137,255, 142,254,133,255, 140,253,129,255, 137,253,127,255, 142,254,132,255, 144,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 144,254,136,255, 136,254,131,255, 97,214,95,255, 52,114,49,255, 22,41,21,255, 12,18,12,255, 37,38,37,255, 146,146,146,255, 234,234,234,255, 0,0,0,0, 0,0,0,0, 254,254,254,255, 236,237,236,255, 154,167,153,255, 51,95,49,255, 40,128,36,255, 78,203,72,255, 112,243,104,255, 137,254,128,255, 145,255,138,255, 145,254,137,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 144,255,133,255, 128,251,117,255, 88,203,81,255, 45,109,44,255, 17,38,17,255, 70,83,70,255, 232,234,232,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,249,249,255, 241,118,118,255, 244,41,41,255, 254,82,82,255, 254,104,104,255, 254,113,114,255, 254,104,106,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,97,99,255, 244,71,71,255, 172,41,42,255, 81,19,20,255, 96,77,77,255, 245,244,244,255, 0,0,0,0, 0,0,0,0, 255,254,254,255, 248,173,173,255, 241,32,32,255, 253,62,63,255, 254,99,99,255, 254,111,111,255, 254,106,106,255, 254,103,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,100,100,255, 254,86,86,255, 222,58,58,255, 113,31,31,255, 45,21,21,255, 156,148,148,255, 252,251,251,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,254,243,255, 254,254,193,255, 254,254,111,255, 254,254,57,255, 254,254,47,255, 254,254,50,255, 254,254,57,255, 254,254,62,255, 255,255,64,255, 254,254,66,255, 255,255,64,255, 254,254,60,255, 255,255,59,255, 254,254,59,255, 255,255,60,255, 254,254,59,255, 255,255,56,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 255,255,56,255, 254,254,52,255, 250,247,39,255, 191,183,30,255, 188,185,146,255, 251,251,251,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,254,255,255, 255,150,255,255, 255,43,255,255, 254,97,254,255, 255,138,255,255, 254,138,254,255, 255,134,255,255, 254,133,254,255, 255,132,255,255, 254,133,254,255, 255,131,255,255, 254,130,254,255, 255,131,255,255, 254,127,254,255, 255,127,255,255, 254,127,254,255, 255,125,255,255, 254,123,254,255, 255,121,255,255, 254,118,254,255, 255,118,255,255, 254,117,254,255, 255,110,255,255, 254,107,254,255, 255,104,255,255, 254,113,254,255, 255,116,255,255, 254,115,254,255, 255,110,255,255, 247,106,247,255, 169,79,169,255, 181,171,181,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,254,254,255, 255,245,245,255, 255,213,213,255, 255,145,145,255, 253,124,124,255, 254,84,84,255, 253,79,79,255, 254,78,78,255, 253,75,75,255, 254,82,82,255, 253,86,86,255, 254,86,86,255, 253,83,83,255, 254,81,81,255, 253,83,83,255, 254,77,77,255, 253,71,71,255, 252,62,62,255, 250,55,55,255, 247,51,51,255, 243,56,56,255, 236,63,63,255, 232,114,114,255, 238,178,178,255, 245,222,222,255, 252,246,246,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 229,244,229,255, 136,229,130,255, 136,253,124,255, 168,253,156,255, 171,254,157,255, 156,253,143,255, 147,254,137,255, 145,253,136,255, 145,254,135,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 137,253,131,255, 103,216,99,255, 58,126,57,255, 22,44,22,255, 13,16,13,255, 10,10,10,255, 23,23,23,255, 90,90,90,255, 192,192,192,255, 225,225,225,255, 187,190,187,255, 86,96,86,255, 28,56,28,255, 31,97,30,255, 65,174,58,255, 102,237,93,255, 127,253,118,255, 142,253,136,255, 147,254,137,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 136,254,131,255, 118,245,111,255, 81,185,74,255, 37,94,35,255, 16,36,15,255, 95,106,95,255, 250,250,250,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,246,246,255, 238,87,87,255, 248,44,46,255, 254,83,85,255, 254,103,104,255, 254,109,113,255, 254,104,105,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,95,95,255, 238,65,65,255, 146,36,36,255, 62,19,19,255, 115,100,100,255, 249,249,249,255, 0,0,0,0, 0,0,0,0, 255,251,251,255, 241,126,126,255, 243,36,36,255, 253,68,68,255, 254,101,101,255, 254,113,113,255, 254,106,106,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 253,101,102,255, 252,83,83,255, 202,54,54,255, 90,24,24,255, 72,52,52,255, 216,214,214,255, 255,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,255,243,255, 255,255,206,255, 254,254,152,255, 253,253,77,255, 254,254,43,255, 253,253,44,255, 254,254,51,255, 253,253,56,255, 254,254,62,255, 253,253,63,255, 254,254,63,255, 253,253,63,255, 254,254,64,255, 253,253,64,255, 254,254,60,255, 253,253,60,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 252,249,50,255, 208,201,31,255, 170,165,96,255, 239,239,235,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,254,255,255, 255,154,255,255, 254,41,254,255, 253,82,253,255, 254,110,254,255, 253,117,253,255, 254,117,254,255, 253,112,253,255, 254,109,254,255, 253,116,253,255, 254,112,254,255, 253,108,253,255, 254,104,254,255, 253,97,253,255, 254,110,254,255, 253,125,253,255, 254,144,254,255, 253,140,253,255, 255,145,255,255, 255,164,255,255, 255,166,255,255, 255,163,255,255, 255,156,255,255, 255,154,255,255, 255,155,255,255, 255,177,255,255, 255,196,255,255, 255,205,255,255, 255,203,255,255, 255,219,255,255, 247,228,247,255, 243,240,243,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,250,250,255, 254,243,243,255, 255,224,224,255, 254,202,202,255, 255,175,175,255, 254,144,144,255, 255,126,126,255, 254,118,118,255, 255,97,97,255, 254,89,89,255, 255,67,67,255, 254,66,66,255, 252,65,65,255, 250,97,97,255, 248,124,124,255, 248,140,140,255, 246,163,163,255, 247,202,202,255, 250,226,226,255, 253,246,246,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,255,254,255, 233,254,232,255, 181,255,173,255, 157,254,144,255, 170,255,158,255, 172,254,158,255, 161,255,150,255, 148,254,141,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,137,255, 145,254,136,255, 142,254,134,255, 121,238,114,255, 83,173,75,255, 43,88,42,255, 23,40,22,255, 13,15,13,255, 10,10,10,255, 13,13,13,255, 31,31,31,255, 42,42,42,255, 30,34,30,255, 16,37,16,255, 30,91,29,255, 60,164,58,255, 93,221,85,255, 122,252,110,255, 139,255,128,255, 145,254,135,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 144,254,133,255, 132,253,119,255, 107,230,100,255, 71,165,63,255, 32,78,30,255, 28,46,28,255, 141,151,141,255, 253,253,253,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 252,233,233,255, 235,70,70,255, 250,47,51,255, 254,89,92,255, 254,107,108,255, 254,108,110,255, 254,102,106,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,101,101,255, 254,89,89,255, 229,62,62,255, 124,33,33,255, 54,19,19,255, 157,149,149,255, 252,252,252,255, 0,0,0,0, 0,0,0,0, 255,248,248,255, 238,94,94,255, 247,40,40,255, 254,74,74,255, 254,101,104,255, 254,111,111,255, 254,105,105,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,95,99,255, 253,78,78,255, 192,48,48,255, 77,19,19,255, 84,64,64,255, 236,235,235,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,254,252,255, 254,254,226,255, 254,254,155,255, 254,254,101,255, 255,255,59,255, 254,254,49,255, 255,255,42,255, 254,254,49,255, 255,255,51,255, 254,254,55,255, 255,255,58,255, 254,254,62,255, 255,255,64,255, 254,254,66,255, 255,255,60,255, 254,254,59,255, 255,255,56,255, 254,254,58,255, 255,255,56,255, 254,254,58,255, 254,254,51,255, 230,225,36,255, 151,146,51,255, 207,206,189,255, 254,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,254,255,255, 255,204,255,255, 255,145,255,255, 254,150,254,255, 255,167,255,255, 254,196,254,255, 255,205,255,255, 254,203,254,255, 255,207,255,255, 254,228,254,255, 255,230,255,255, 254,229,254,255, 255,228,255,255, 254,227,254,255, 255,232,255,255, 254,237,254,255, 255,244,255,255, 254,244,254,255, 255,247,255,255, 255,254,255,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,254,254,255, 255,247,247,255, 255,243,243,255, 255,236,236,255, 255,233,233,255, 255,226,226,255, 255,225,225,255, 254,226,226,255, 254,238,238,255, 255,250,250,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 247,255,246,255, 200,253,195,255, 158,254,149,255, 168,253,156,255, 177,254,164,255, 161,253,153,255, 149,254,139,255, 146,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,138,255, 145,253,139,255, 145,254,136,255, 138,250,130,255, 111,222,104,255, 84,175,78,255, 57,117,53,255, 28,50,28,255, 16,19,16,255, 11,13,11,255, 14,16,14,255, 12,20,12,255, 20,45,18,255, 35,92,30,255, 62,152,54,255, 92,213,88,255, 119,246,112,255, 136,253,126,255, 141,254,135,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 144,254,136,255, 138,253,131,255, 118,243,109,255, 88,200,79,255, 48,125,45,255, 23,57,22,255, 115,125,115,255, 241,243,241,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 249,205,205,255, 234,47,47,255, 252,61,62,255, 254,96,100,255, 254,110,113,255, 254,107,110,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,101,101,255, 252,84,84,255, 209,55,55,255, 102,23,23,255, 52,22,22,255, 191,183,183,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 253,228,228,255, 239,68,68,255, 247,47,47,255, 254,81,81,255, 254,106,107,255, 254,110,113,255, 254,106,106,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,102,103,255, 253,95,96,255, 246,69,71,255, 166,41,41,255, 61,18,18,255, 96,83,83,255, 247,246,246,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,255,253,255, 255,255,242,255, 255,255,220,255, 255,255,185,255, 254,254,120,255, 253,253,87,255, 254,254,59,255, 253,253,59,255, 254,254,55,255, 253,253,48,255, 254,254,55,255, 253,253,65,255, 254,254,65,255, 253,253,57,255, 254,254,56,255, 253,253,56,255, 254,254,55,255, 253,253,54,255, 247,246,40,255, 186,182,44,255, 204,204,178,255, 251,251,250,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 251,254,251,255, 220,255,216,255, 158,254,147,255, 156,255,142,255, 170,254,160,255, 172,255,156,255, 159,254,144,255, 147,255,138,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 148,255,138,255, 152,254,145,255, 147,255,138,255, 145,254,135,255, 138,251,132,255, 124,244,121,255, 106,220,99,255, 75,157,71,255, 46,91,45,255, 38,73,37,255, 38,76,37,255, 42,94,41,255, 57,132,52,255, 76,174,68,255, 101,221,96,255, 127,247,116,255, 140,254,129,255, 144,254,135,255, 144,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 143,255,133,255, 129,251,118,255, 94,218,88,255, 66,157,58,255, 32,81,26,255, 67,87,66,255, 219,221,219,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 247,188,188,255, 234,35,35,255, 253,66,68,255, 254,100,102,255, 254,111,111,255, 254,105,106,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,99,99,255, 252,80,80,255, 189,47,47,255, 73,19,19,255, 72,48,48,255, 220,216,216,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 249,201,201,255, 236,40,40,255, 251,53,53,255, 254,89,89,255, 254,108,108,255, 254,109,110,255, 254,104,105,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,100,102,255, 254,86,87,255, 241,66,67,255, 147,37,37,255, 56,20,20,255, 149,138,138,255, 251,251,251,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,255,248,255, 254,254,236,255, 255,255,225,255, 254,254,219,255, 255,255,161,255, 254,254,33,255, 255,255,44,255, 254,254,63,255, 255,255,64,255, 254,254,60,255, 255,255,56,255, 254,254,58,255, 255,255,53,255, 253,252,46,255, 204,199,35,255, 183,180,129,255, 248,248,246,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,255,254,255, 228,255,227,255, 154,255,144,255, 145,253,134,255, 170,254,157,255, 173,253,160,255, 160,254,151,255, 148,253,142,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 144,253,133,255, 146,254,137,255, 160,253,155,255, 152,254,140,255, 145,253,136,255, 145,254,136,255, 143,253,135,255, 137,251,125,255, 114,228,110,255, 92,193,88,255, 87,182,82,255, 83,180,79,255, 83,183,80,255, 102,216,95,255, 113,233,103,255, 128,250,119,255, 142,253,133,255, 144,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 144,253,134,255, 134,253,129,255, 110,241,107,255, 75,185,68,255, 44,113,39,255, 34,63,31,255, 166,175,165,255, 254,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,253,253,255, 241,164,164,255, 234,39,39,255, 253,73,73,255, 254,102,102,255, 254,113,113,255, 254,106,106,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,103,104,255, 254,100,101,255, 246,73,73,255, 163,39,39,255, 60,18,18,255, 93,77,77,255, 245,244,244,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 247,187,187,255, 234,34,34,255, 252,62,62,255, 254,97,97,255, 254,110,111,255, 254,105,106,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,100,100,255, 253,82,83,255, 235,59,61,255, 130,32,32,255, 49,18,18,255, 181,174,174,255, 255,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,254,215,255, 253,253,49,255, 254,254,34,255, 253,253,58,255, 254,254,63,255, 253,253,64,255, 254,254,60,255, 253,253,56,255, 253,253,50,255, 227,223,36,255, 163,158,70,255, 230,230,223,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,255,254,255, 237,255,236,255, 169,254,166,255, 144,255,135,255, 168,254,155,255, 175,255,160,255, 163,254,157,255, 150,255,143,255, 146,254,136,255, 144,255,136,255, 137,254,131,255, 130,246,122,255, 168,251,157,255, 160,255,151,255, 147,254,138,255, 145,255,136,255, 145,254,136,255, 145,255,135,255, 140,253,134,255, 135,250,125,255, 128,246,121,255, 124,246,118,255, 124,245,117,255, 130,252,124,255, 138,254,131,255, 142,255,131,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 142,254,133,255, 124,251,117,255, 91,221,90,255, 55,151,51,255, 27,78,26,255, 93,109,92,255, 241,241,240,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,247,247,255, 236,117,117,255, 243,42,43,255, 254,78,79,255, 254,105,106,255, 254,110,111,255, 254,105,105,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,94,97,255, 239,66,68,255, 140,35,36,255, 46,17,17,255, 112,100,100,255, 249,249,249,255, 0,0,0,0, 0,0,0,0, 255,252,252,255, 242,143,143,255, 237,36,36,255, 253,71,71,255, 254,99,99,255, 254,110,113,255, 254,105,106,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,100,102,255, 253,80,81,255, 217,51,51,255, 105,26,26,255, 54,30,30,255, 198,193,193,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,255,244,255, 254,254,120,255, 255,255,38,255, 254,254,48,255, 255,255,62,255, 254,254,66,255, 255,255,67,255, 254,254,55,255, 240,237,36,255, 173,161,41,255, 205,202,180,255, 253,253,253,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 245,255,244,255, 187,255,180,255, 146,253,135,255, 158,254,147,255, 172,253,163,255, 165,254,157,255, 151,253,143,255, 145,254,137,255, 131,251,125,255, 114,230,108,255, 168,244,156,255, 174,254,162,255, 155,253,144,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,135,255, 144,253,135,255, 144,254,135,255, 143,253,135,255, 143,254,135,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 144,253,136,255, 141,254,133,255, 135,253,128,255, 111,242,103,255, 71,192,71,255, 37,108,34,255, 36,69,36,255, 181,192,181,255, 254,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 250,218,218,255, 229,62,62,255, 245,44,49,255, 254,82,86,255, 254,106,108,255, 254,108,110,255, 254,106,106,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,102,104,255, 253,94,95,255, 233,62,63,255, 117,28,29,255, 43,17,17,255, 156,149,149,255, 252,252,252,255, 0,0,0,0, 0,0,0,0, 255,250,250,255, 237,107,107,255, 241,40,41,255, 253,79,79,255, 254,102,102,255, 254,110,111,255, 254,105,105,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,99,100,255, 247,74,77,255, 202,49,50,255, 92,22,22,255, 76,54,54,255, 225,224,224,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,255,234,255, 254,254,156,255, 253,253,104,255, 254,254,63,255, 253,253,52,255, 254,254,60,255, 248,246,52,255, 188,181,29,255, 168,164,120,255, 246,246,244,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 249,255,249,255, 192,254,188,255, 135,255,123,255, 158,254,146,255, 174,255,163,255, 166,254,157,255, 157,255,150,255, 128,243,120,255, 89,194,79,255, 154,236,141,255, 180,255,168,255, 169,254,159,255, 152,255,144,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 143,254,133,255, 133,254,123,255, 120,250,106,255, 92,223,81,255, 50,149,48,255, 31,75,29,255, 133,147,131,255, 247,247,247,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,254,254,255, 241,233,233,255, 225,225,225,255, 226,226,226,255, 223,174,174,255, 223,36,36,255, 247,51,52,255, 254,92,93,255, 254,109,110,255, 254,109,109,255, 254,104,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,101,103,255, 252,86,87,255, 211,54,54,255, 93,23,23,255, 45,22,22,255, 189,183,183,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,246,246,255, 232,85,85,255, 245,43,46,255, 254,81,82,255, 254,102,102,255, 254,110,113,255, 254,105,106,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,97,99,255, 241,69,69,255, 181,44,44,255, 77,18,18,255, 89,72,72,255, 243,242,242,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,255,253,255, 254,254,241,255, 255,255,195,255, 254,254,136,255, 255,255,80,255, 237,235,44,255, 178,175,100,255, 240,240,235,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 250,255,250,255, 216,255,214,255, 153,253,147,255, 144,254,130,255, 162,253,148,255, 156,254,145,255, 136,242,123,255, 77,164,65,255, 112,202,101,255, 161,252,151,255, 176,253,166,255, 170,254,159,255, 154,253,144,255, 147,254,137,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 145,253,136,255, 145,254,136,255, 144,253,136,255, 141,254,132,255, 132,252,120,255, 111,241,100,255, 88,214,76,255, 55,157,49,255, 44,104,44,255, 140,158,139,255, 237,239,237,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 251,223,223,255, 170,77,78,255, 48,41,42,255, 43,43,43,255, 69,34,34,255, 177,23,23,255, 248,59,59,255, 254,98,98,255, 254,110,110,255, 254,105,106,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,100,100,255, 249,81,81,255, 189,48,48,255, 73,19,19,255, 39,23,23,255, 164,161,161,255, 248,248,248,255, 0,0,0,0, 0,0,0,0, 249,219,219,255, 230,59,59,255, 248,51,51,255, 254,88,88,255, 254,105,105,255, 254,110,110,255, 254,104,105,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,102,104,255, 254,90,91,255, 236,64,64,255, 152,36,36,255, 63,20,20,255, 123,106,106,255, 249,248,248,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,255,253,255, 255,255,227,255, 242,242,162,255, 232,232,206,255, 254,254,254,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,255,254,255, 229,254,227,255, 154,255,149,255, 122,253,113,255, 116,251,106,255, 109,247,99,255, 111,214,103,255, 124,200,117,255, 131,250,119,255, 161,254,147,255, 179,255,166,255, 174,254,161,255, 161,255,154,255, 151,254,144,255, 147,255,137,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,136,255, 145,255,136,255, 145,254,137,255, 145,255,136,255, 143,254,133,255, 132,252,119,255, 108,239,99,255, 79,206,67,255, 49,147,40,255, 56,111,54,255, 168,183,168,255, 247,249,247,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,254,254,255, 247,178,179,255, 198,29,32,255, 54,18,20,255, 17,11,11,255, 24,14,14,255, 96,23,23,255, 234,67,67,255, 254,101,101,255, 254,110,110,255, 254,104,106,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,99,101,255, 246,78,79,255, 158,42,45,255, 42,18,18,255, 14,12,12,255, 39,39,39,255, 155,155,155,255, 243,243,243,255, 254,254,254,255, 236,184,184,255, 214,32,32,255, 249,57,57,255, 254,93,93,255, 254,108,108,255, 254,106,106,255, 254,103,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,100,101,255, 254,83,84,255, 222,55,55,255, 133,34,34,255, 53,22,22,255, 168,161,161,255, 253,253,253,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 245,255,245,255, 230,254,229,255, 230,254,228,255, 230,253,228,255, 236,253,236,255, 242,254,241,255, 190,255,185,255, 133,253,120,255, 161,254,146,255, 179,253,163,255, 179,254,166,255, 172,253,159,255, 160,254,147,255, 148,253,142,255, 146,254,137,255, 145,253,137,255, 146,254,137,255, 146,253,136,255, 145,254,136,255, 146,253,137,255, 146,254,137,255, 146,253,137,255, 146,254,137,255, 144,253,138,255, 146,254,133,255, 133,253,122,255, 112,246,101,255, 75,205,65,255, 46,144,40,255, 84,137,80,255, 196,210,195,255, 250,251,250,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,249,249,255, 242,122,122,255, 239,43,43,255, 161,53,53,255, 96,32,32,255, 90,30,30,255, 99,30,30,255, 198,60,60,255, 253,99,99,255, 254,106,106,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,99,100,255, 238,73,75,255, 144,43,47,255, 48,20,21,255, 14,11,11,255, 12,12,12,255, 32,32,32,255, 110,110,110,255, 173,172,172,255, 159,87,87,255, 205,31,31,255, 251,65,65,255, 254,95,95,255, 254,109,109,255, 254,106,106,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,102,102,255, 253,82,82,255, 208,52,52,255, 113,29,29,255, 51,21,21,255, 189,182,182,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 249,255,249,255, 190,254,186,255, 131,255,123,255, 138,254,127,255, 159,255,147,255, 172,254,162,255, 174,255,159,255, 166,254,154,255, 159,255,152,255, 157,254,149,255, 157,255,146,255, 153,254,143,255, 150,255,141,255, 153,254,140,255, 152,255,143,255, 152,254,142,255, 148,255,135,255, 134,254,125,255, 123,254,113,255, 106,249,97,255, 76,215,68,255, 55,153,46,255, 123,167,122,255, 223,232,222,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 253,241,241,255, 244,85,85,255, 252,58,58,255, 245,91,91,255, 224,75,75,255, 212,62,62,255, 206,58,58,255, 224,65,65,255, 252,94,94,255, 254,104,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,101,103,255, 253,91,92,255, 221,67,68,255, 133,41,42,255, 48,20,20,255, 15,11,11,255, 12,12,12,255, 13,13,13,255, 26,25,25,255, 65,16,16,255, 194,35,35,255, 251,73,73,255, 254,100,100,255, 254,108,108,255, 254,105,105,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,100,100,255, 251,77,77,255, 193,47,47,255, 92,20,20,255, 70,45,45,255, 216,213,213,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 251,255,251,255, 222,255,222,255, 166,253,158,255, 130,254,117,255, 139,253,124,255, 160,254,143,255, 167,253,152,255, 165,254,155,255, 162,253,152,255, 159,254,148,255, 159,253,148,255, 156,254,147,255, 155,253,145,255, 145,254,136,255, 138,253,125,255, 123,252,110,255, 103,242,91,255, 79,223,71,255, 64,197,59,255, 69,163,60,255, 154,192,151,255, 244,247,244,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 248,199,199,255, 238,50,50,255, 253,70,71,255, 254,102,104,255, 253,101,102,255, 252,93,94,255, 251,89,89,255, 251,90,90,255, 253,99,100,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,103,103,255, 251,91,91,255, 217,65,65,255, 135,42,42,255, 66,26,26,255, 29,13,13,255, 17,12,12,255, 17,10,10,255, 68,19,19,255, 198,43,43,255, 251,80,80,255, 254,101,101,255, 254,106,107,255, 254,106,106,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,102,103,255, 253,93,93,255, 243,68,68,255, 160,37,37,255, 70,19,19,255, 128,111,111,255, 246,246,246,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 251,254,250,255, 222,255,220,255, 180,254,172,255, 154,253,145,255, 131,251,118,255, 131,252,120,255, 125,251,117,255, 117,252,107,255, 122,251,114,255, 126,253,116,255, 122,254,112,255, 105,244,95,255, 92,232,83,255, 90,217,83,255, 118,216,115,255, 148,212,144,255, 158,206,154,255, 216,232,214,255, 249,251,249,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,252,252,255, 244,152,152,255, 245,49,51,255, 254,86,87,255, 254,111,111,255, 254,110,112,255, 254,103,104,255, 254,101,103,255, 254,101,103,255, 254,102,103,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,101,101,255, 254,105,105,255, 254,103,104,255, 254,101,103,255, 252,92,92,255, 223,71,71,255, 188,57,57,255, 140,42,42,255, 98,30,30,255, 105,32,32,255, 150,39,39,255, 228,59,59,255, 254,83,84,255, 254,100,100,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,101,103,255, 254,86,86,255, 222,57,57,255, 123,27,27,255, 63,23,23,255, 189,180,180,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,255,254,255, 242,254,241,255, 229,254,227,255, 212,254,210,255, 189,249,187,255, 158,246,154,255, 157,246,154,255, 143,246,138,255, 129,244,124,255, 138,230,131,255, 174,230,171,255, 217,241,216,255, 241,249,241,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,251,251,255, 248,146,148,255, 251,72,74,255, 254,95,96,255, 254,118,118,255, 254,119,120,255, 254,112,115,255, 254,108,110,255, 254,105,105,255, 254,104,105,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,103,104,255, 247,91,91,255, 247,109,109,255, 254,108,108,255, 254,104,104,255, 254,103,103,255, 253,95,95,255, 251,89,89,255, 240,77,77,255, 220,65,65,255, 227,68,68,255, 239,73,73,255, 251,81,81,255, 254,94,98,255, 254,103,103,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,100,100,255, 250,78,78,255, 206,49,49,255, 95,22,22,255, 91,64,64,255, 233,230,230,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,255,254,255, 247,253,247,255, 243,252,243,255, 248,253,248,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,240,241,255, 254,184,185,255, 254,120,120,255, 254,98,98,255, 254,106,108,255, 254,115,119,255, 254,117,122,255, 254,114,114,255, 254,110,112,255, 254,103,105,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,101,103,255, 237,79,79,255, 220,89,89,255, 253,120,120,255, 254,111,111,255, 254,103,104,255, 254,102,103,255, 254,101,101,255, 254,99,99,255, 253,94,95,255, 254,95,96,255, 254,97,97,255, 254,100,100,255, 254,102,103,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,101,101,255, 254,90,93,255, 248,70,70,255, 176,39,39,255, 78,25,25,255, 150,131,131,255, 251,250,250,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,252,252,255, 255,239,239,255, 254,183,183,255, 254,97,97,255, 254,89,92,255, 254,106,106,255, 254,116,117,255, 254,118,120,255, 254,112,113,255, 254,108,108,255, 254,105,105,255, 254,104,105,255, 254,104,104,255, 254,104,104,255, 254,100,100,255, 227,69,69,255, 154,47,47,255, 240,106,107,255, 254,119,121,255, 254,105,105,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,103,104,255, 254,103,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,102,104,255, 254,98,100,255, 254,83,84,255, 238,59,59,255, 141,30,30,255, 98,63,63,255, 229,225,225,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,251,251,255, 254,222,222,255, 254,154,155,255, 254,95,95,255, 254,88,89,255, 254,105,108,255, 254,115,117,255, 254,117,117,255, 254,114,114,255, 254,111,112,255, 254,103,105,255, 254,102,104,255, 254,99,101,255, 224,67,67,255, 115,30,31,255, 222,87,88,255, 254,122,123,255, 254,113,113,255, 254,105,105,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,102,104,255, 254,99,101,255, 254,86,87,255, 251,70,70,255, 208,46,46,255, 108,29,29,255, 156,133,133,255, 251,250,250,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,251,251,255, 255,222,222,255, 255,165,166,255, 255,126,127,255, 254,91,92,255, 254,98,99,255, 254,110,110,255, 254,116,116,255, 254,112,114,255, 254,109,110,255, 254,106,106,255, 223,70,70,255, 98,25,26,255, 200,56,58,255, 253,115,115,255, 254,123,123,255, 254,115,115,255, 254,111,111,255, 254,105,105,255, 254,104,105,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,104,104,255, 254,101,102,255, 253,88,89,255, 246,73,73,255, 217,50,50,255, 145,36,36,255, 162,129,129,255, 244,242,242,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,234,234,255, 254,166,168,255, 254,112,113,255, 254,78,78,255, 254,95,95,255, 254,111,112,255, 254,113,114,255, 254,111,111,255, 232,84,85,255, 115,32,32,255, 166,36,36,255, 252,87,88,255, 254,116,117,255, 254,123,123,255, 254,123,123,255, 254,115,115,255, 254,111,112,255, 254,104,106,255, 254,103,105,255, 254,103,105,255, 254,103,105,255, 254,103,105,255, 254,103,105,255, 254,103,105,255, 254,104,104,255, 254,103,103,255, 254,96,98,255, 251,74,76,255, 216,47,47,255, 151,35,36,255, 172,130,131,255, 245,242,242,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,252,252,255, 255,231,231,255, 254,152,152,255, 254,92,92,255, 254,79,79,255, 254,87,87,255, 254,82,82,255, 250,77,82,255, 215,71,72,255, 199,109,110,255, 251,117,120,255, 254,80,87,255, 254,102,106,255, 254,118,118,255, 254,121,121,255, 254,120,120,255, 254,117,117,255, 254,112,112,255, 254,110,110,255, 254,110,110,255, 254,109,110,255, 254,107,110,255, 254,104,109,255, 254,99,101,255, 254,88,88,255, 253,77,77,255, 236,52,52,255, 173,46,46,255, 185,138,139,255, 246,242,242,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,251,251,255, 254,223,223,255, 254,154,154,255, 254,132,132,255, 254,155,155,255, 254,197,198,255, 254,227,227,255, 254,244,244,255, 254,234,234,255, 254,155,156,255, 254,89,92,255, 254,84,85,255, 254,97,97,255, 254,107,107,255, 254,113,113,255, 254,113,113,255, 254,112,112,255, 254,106,110,255, 254,105,106,255, 254,102,103,255, 254,92,96,255, 254,76,77,255, 246,59,59,255, 232,49,49,255, 198,62,62,255, 203,153,153,255, 249,246,246,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,252,252,255, 255,249,249,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,250,250,255, 255,209,209,255, 255,157,157,255, 254,116,116,255, 254,84,84,255, 254,81,82,255, 254,85,88,255, 254,87,89,255, 254,82,86,255, 254,76,77,255, 253,72,72,255, 251,61,62,255, 236,63,63,255, 224,102,102,255, 223,155,155,255, 238,218,218,255, 252,248,248,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 255,252,252,255, 254,239,239,255, 254,205,205,255, 254,163,163,255, 253,133,134,255, 253,124,125,255, 253,122,122,255, 252,117,117,255, 250,137,137,255, 247,151,151,255, 247,208,208,255, 252,241,241,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 254,247,247,255, 254,243,243,255, 254,244,244,255, 254,243,243,255, 254,251,251,255, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -}; diff --git a/lib/glut-3.7.6/progs/examples/luminance16.c b/lib/glut-3.7.6/progs/examples/luminance16.c deleted file mode 100644 index a5b8bad38..000000000 --- a/lib/glut-3.7.6/progs/examples/luminance16.c +++ /dev/null @@ -1,154 +0,0 @@ - -/* 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. */ - -/* molehill uses the GLU NURBS routines to draw some nice surfaces. */ - -#include - -GLfloat mat_red_diffuse[] = { 0.7, 0.0, 0.1, 1.0 }; -GLfloat mat_green_diffuse[] = { 0.0, 0.7, 0.1, 1.0 }; -GLfloat mat_blue_diffuse[] = { 0.0, 0.1, 0.7, 1.0 }; -GLfloat mat_yellow_diffuse[] = { 0.7, 0.8, 0.1, 1.0 }; -GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; -GLfloat mat_shininess[] = { 100.0 }; -GLfloat knots[8] = { 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0 }; -GLfloat pts1[4][4][3], pts2[4][4][3]; -GLfloat pts3[4][4][3], pts4[4][4][3]; -GLUnurbsObj *nurb; -int u, v; - -static void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glCallList(1); - glFlush(); -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitDisplayString("luminance depth"); - glutCreateWindow("molehill"); - glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); - glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_DEPTH_TEST); - glEnable(GL_AUTO_NORMAL); - glEnable(GL_NORMALIZE); - nurb = gluNewNurbsRenderer(); - gluNurbsProperty(nurb, GLU_SAMPLING_TOLERANCE, 25.0); - gluNurbsProperty(nurb, GLU_DISPLAY_MODE, GLU_FILL); - - /* Build control points for NURBS mole hills. */ - for(u=0; u<4; u++) { - for(v=0; v<4; v++) { - /* Red. */ - pts1[u][v][0] = 2.0*((GLfloat)u); - pts1[u][v][1] = 2.0*((GLfloat)v); - if((u==1 || u == 2) && (v == 1 || v == 2)) - /* Stretch up middle. */ - pts1[u][v][2] = 6.0; - else - pts1[u][v][2] = 0.0; - - /* Green. */ - pts2[u][v][0] = 2.0*((GLfloat)u - 3.0); - pts2[u][v][1] = 2.0*((GLfloat)v - 3.0); - if((u==1 || u == 2) && (v == 1 || v == 2)) - if(u == 1 && v == 1) - /* Pull hard on single middle square. */ - pts2[u][v][2] = 15.0; - else - /* Push down on other middle squares. */ - pts2[u][v][2] = -2.0; - else - pts2[u][v][2] = 0.0; - - /* Blue. */ - pts3[u][v][0] = 2.0*((GLfloat)u - 3.0); - pts3[u][v][1] = 2.0*((GLfloat)v); - if((u==1 || u == 2) && (v == 1 || v == 2)) - if(u == 1 && v == 2) - /* Pull up on single middple square. */ - pts3[u][v][2] = 11.0; - else - /* Pull up slightly on other middle squares. */ - pts3[u][v][2] = 2.0; - else - pts3[u][v][2] = 0.0; - - /* Yellow. */ - pts4[u][v][0] = 2.0*((GLfloat)u); - pts4[u][v][1] = 2.0*((GLfloat)v - 3.0); - if((u==1 || u == 2 || u == 3) && (v == 1 || v == 2)) - if(v == 1) - /* Push down front middle and right squares. */ - pts4[u][v][2] = -2.0; - else - /* Pull up back middle and right squares. */ - pts4[u][v][2] = 5.0; - else - pts4[u][v][2] = 0.0; - } - } - /* Stretch up red's far right corner. */ - pts1[3][3][2] = 6; - /* Pull down green's near left corner a little. */ - pts2[0][0][2] = -2; - /* Turn up meeting of four corners. */ - pts1[0][0][2] = 1; - pts2[3][3][2] = 1; - pts3[3][0][2] = 1; - pts4[0][3][2] = 1; - - glMatrixMode(GL_PROJECTION); - gluPerspective(55.0, 1.0, 2.0, 24.0); - glMatrixMode(GL_MODELVIEW); - glTranslatef(0.0, 0.0, -15.0); - glRotatef(330.0, 1.0, 0.0, 0.0); - - glNewList(1, GL_COMPILE); - /* Render red hill. */ - glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_red_diffuse); - gluBeginSurface(nurb); - gluNurbsSurface(nurb, 8, knots, 8, knots, - 4 * 3, 3, &pts1[0][0][0], - 4, 4, GL_MAP2_VERTEX_3); - gluEndSurface(nurb); - - /* Render green hill. */ - glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_green_diffuse); - gluBeginSurface(nurb); - gluNurbsSurface(nurb, 8, knots, 8, knots, - 4 * 3, 3, &pts2[0][0][0], - 4, 4, GL_MAP2_VERTEX_3); - gluEndSurface(nurb); - - /* Render blue hill. */ - glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_blue_diffuse); - gluBeginSurface(nurb); - gluNurbsSurface(nurb, 8, knots, 8, knots, - 4 * 3, 3, &pts3[0][0][0], - 4, 4, GL_MAP2_VERTEX_3); - gluEndSurface(nurb); - - /* Render yellow hill. */ - glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_yellow_diffuse); - gluBeginSurface(nurb); - gluNurbsSurface(nurb, 8, knots, 8, knots, - 4 * 3, 3, &pts4[0][0][0], - 4, 4, GL_MAP2_VERTEX_3); - gluEndSurface(nurb); - glEndList(); - - glutDisplayFunc(display); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/examples/luminance16.dsp b/lib/glut-3.7.6/progs/examples/luminance16.dsp deleted file mode 100644 index 82b50905c..000000000 --- a/lib/glut-3.7.6/progs/examples/luminance16.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="luminance16" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=luminance16 - 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 "luminance16.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 "luminance16.mak" CFG="luminance16 - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "luminance16 - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "luminance16 - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "luminance16 - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "luminance16 - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "luminance16 - Win32 Release" -# Name "luminance16 - Win32 Debug" -# Begin Source File - -SOURCE=.\luminance16.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/mjkimage.c b/lib/glut-3.7.6/progs/examples/mjkimage.c deleted file mode 100644 index 038e089a7..000000000 --- a/lib/glut-3.7.6/progs/examples/mjkimage.c +++ /dev/null @@ -1,13244 +0,0 @@ -const int mjk_depth = 3; -const int mjk_height = 256; -const int mjk_width = 256; -const unsigned char mjk_image[]={ -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,184,185,184, -184,185,184,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,179,179,176,177,166,115, -208,175,109,217,183,134,200,189,152,182,202,162,175,216, -173,172,228,189,169,236,202,166,241,211,163,246,216,162, -249,222,159,249,222,155,250,220,152,250,218,151,249,217, -150,247,217,148,243,219,142,242,217,138,242,216,136,242, -215,137,242,215,138,241,215,139,241,214,139,241,214,139, -241,214,140,240,216,141,242,217,140,242,216,140,241,216, -142,240,217,142,239,217,145,241,217,146,241,217,145,241, -217,146,243,217,143,242,217,143,244,217,145,244,217,144, -245,217,144,246,218,141,245,218,141,246,217,143,245,217, -141,243,217,140,242,217,139,240,215,137,237,214,139,236, -214,140,237,215,141,239,214,147,243,216,149,246,219,149, -246,219,148,245,218,148,245,218,148,244,217,147,244,217, -148,244,218,148,246,218,146,247,218,143,248,217,141,247, -216,141,247,216,143,246,216,140,244,216,140,244,216,138, -246,216,137,245,215,136,244,215,131,241,213,133,229,215, -142,230,202,156,246,199,158,250,207,151,252,214,137,248, -212,126,239,209,118,225,209,117,213,206,122,205,192,130, -199,173,138,197,156,143,202,149,144,205,143,147,207,144, -147,209,148,144,213,154,145,217,159,145,222,163,146,225, -168,145,231,179,145,235,188,145,238,194,144,240,199,143, -240,204,144,241,210,141,242,215,140,244,215,140,244,215, -142,244,216,144,245,216,145,246,217,144,249,217,143,247, -217,118,230,213,34,170,198,1,98,115,3,79,72,21,76,61, -33,66,62,33,56,65,26,48,63,17,44,54,13,44,46,15,44,45, -16,45,43,19,46,40,22,46,36,23,47,35,24,48,34,23,48,34, -25,48,38,25,47,42,24,47,38,24,48,38,24,48,38,23,47,40, -24,46,43,29,44,44,67,37,73,178,113,114,245,194,143,232, -239,174,197,254,203,183,255,210,171,255,220,156,254,220, -149,251,217,143,249,216,140,247,215,139,245,215,136,242, -215,133,240,215,132,239,215,130,239,213,131,237,212,132, -237,206,135,239,204,136,236,209,138,238,209,140,241,210, -143,244,216,145,244,216,152,247,217,168,254,218,173,255, -219,166,255,215,156,255,209,146,255,204,137,255,201,131, -255,199,126,255,209,134,255,213,148,255,216,157,255,219, -162,255,220,162,255,221,163,255,222,165,255,223,168,255, -224,168,255,224,167,255,222,167,255,222,163,255,222,165, -255,223,166,255,224,161,255,223,160,255,222,159,255,222, -159,255,222,163,255,222,162,255,222,161,255,222,159,255, -221,158,255,220,157,255,220,158,255,220,159,255,221,160, -255,221,159,255,221,160,255,221,161,255,221,161,255,222, -161,255,222,159,255,220,157,255,219,156,254,219,155,254, -220,153,254,219,152,252,218,148,251,218,148,251,218,149, -250,219,148,250,218,147,251,218,147,252,218,148,251,218, -149,252,218,146,251,217,146,249,217,146,248,218,147,248, -218,146,247,217,146,247,218,149,249,218,149,248,218,148, -247,217,150,247,218,148,249,218,143,246,218,139,243,217, -136,241,216,135,240,214,136,240,211,139,242,209,142,245, -210,145,245,216,144,245,218,141,245,218,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,182,182,181,182,169,158,194, -177,122,195,197,86,178,215,68,166,223,90,160,235,106,159, -241,139,157,245,173,155,246,200,155,249,222,152,250,238, -150,250,249,146,248,254,145,247,255,147,245,255,151,249, -255,147,249,255,141,247,255,135,243,255,133,238,255,136, -236,255,136,237,255,136,237,255,135,237,255,136,239,254, -137,239,251,136,238,252,136,237,254,140,238,255,140,237, -254,142,238,255,142,239,255,142,239,255,142,238,255,141, -239,255,140,240,255,141,241,255,141,243,253,139,244,255, -138,244,255,137,243,255,140,242,255,139,240,255,138,239, -255,136,236,255,133,233,255,134,231,255,136,231,255,139, -235,255,143,238,255,146,243,255,145,244,255,144,242,255, -144,242,255,144,243,255,143,244,255,143,243,255,145,245, -255,142,245,255,139,245,255,136,244,255,135,243,255,137, -242,255,137,242,255,137,243,255,135,243,255,133,241,255, -131,238,255,123,231,255,130,230,218,146,237,221,155,245, -240,153,246,253,141,244,255,125,238,255,112,227,252,107, -218,232,111,212,203,119,208,179,129,207,155,138,207,152, -142,210,153,142,210,154,146,213,157,145,215,167,145,219, -175,146,222,189,146,224,203,147,229,213,144,233,224,142, -234,233,142,236,243,142,237,251,141,237,254,142,239,255, -140,240,255,136,240,255,137,240,255,139,240,255,139,241, -255,137,240,255,138,246,255,138,246,255,131,246,255,92, -227,246,9,124,221,1,81,167,29,85,123,62,103,85,70,109, -46,60,101,17,43,87,6,29,73,15,20,58,29,17,49,42,18,44, -52,19,41,59,19,40,60,21,41,59,19,41,57,18,41,56,20,42, -54,20,41,53,19,42,51,19,43,49,19,43,45,22,46,36,35,56, -14,115,94,0,232,186,84,255,222,157,225,244,198,191,255, -222,176,255,233,166,255,251,152,254,255,144,251,255,140, -250,255,137,246,255,136,244,255,135,242,255,132,239,255, -131,236,255,126,233,255,128,230,255,128,230,255,130,231, -255,133,231,255,134,233,249,134,233,249,136,236,252,137, -237,253,143,241,255,155,249,255,164,255,255,163,255,251, -154,255,246,143,255,242,134,255,239,128,255,237,126,255, -234,128,255,244,141,255,255,151,255,255,157,255,255,158, -255,255,159,255,255,163,255,252,166,255,251,165,255,249, -164,255,250,162,255,251,160,255,251,163,255,254,162,255, -254,157,255,255,157,255,255,155,255,255,155,255,255,159, -255,255,159,255,255,158,255,255,155,255,255,154,255,255, -152,255,255,151,255,255,151,255,255,153,255,255,155,255, -255,155,255,255,154,255,255,156,255,255,157,255,255,155, -255,255,154,255,255,153,255,255,152,255,255,149,255,255, -147,252,255,144,251,255,143,249,255,145,249,255,145,249, -255,144,250,255,143,250,255,144,250,255,144,249,255,141, -248,255,141,247,255,142,248,255,143,249,255,143,249,255, -142,248,255,145,248,255,146,246,255,145,245,255,147,246, -255,145,247,255,141,243,255,138,239,255,134,234,255,133, -233,255,133,234,253,134,237,249,137,239,252,141,241,254, -142,244,255,139,243,255,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,184,184,184,179,180,167,178,181, -140,183,185,110,186,189,106,188,193,109,197,200,130,203, -208,165,193,214,191,179,226,215,169,234,232,163,238,245, -158,240,254,151,240,255,146,239,255,154,246,255,155,247, -255,151,250,255,144,249,255,140,244,255,137,239,255,134, -237,255,132,237,255,130,236,255,133,238,252,139,238,250, -138,238,252,136,237,254,136,237,254,136,238,253,137,239, -254,137,239,253,137,238,255,137,238,255,137,238,255,138, -238,255,141,241,255,139,243,252,139,243,254,136,242,255, -134,242,255,133,241,255,133,240,255,134,238,255,132,236, -255,130,234,255,131,233,255,133,230,255,137,232,252,144, -235,253,147,239,254,149,241,255,145,242,255,143,242,255, -141,240,255,140,242,255,140,242,255,144,242,255,143,244, -255,139,242,255,138,242,255,136,240,255,136,241,255,134, -239,255,134,240,255,134,241,255,129,239,255,125,235,255, -122,224,255,135,226,216,147,240,221,149,246,237,144,246, -250,129,240,254,119,223,255,118,209,248,121,201,226,125, -197,200,131,198,177,138,201,156,141,204,151,144,208,153, -143,211,154,146,214,157,143,219,168,141,223,174,141,227, -189,140,228,203,139,232,213,137,236,222,135,239,231,134, -240,241,132,239,248,134,239,254,137,240,255,137,239,255, -135,241,255,134,240,255,134,238,255,137,237,255,134,238, -255,139,239,255,142,242,255,142,244,255,132,237,255,57, -173,254,2,121,189,2,109,120,40,125,88,75,132,60,88,138, -46,89,133,41,73,114,56,44,91,59,29,79,68,31,66,75,30, -54,77,26,50,74,22,47,69,18,44,62,16,39,57,14,40,53,17, -39,52,20,38,50,22,37,48,26,38,45,45,37,39,121,46,34, -204,149,54,243,234,120,214,255,162,192,255,199,173,255, -222,162,255,233,155,255,250,143,254,255,140,250,255,140, -250,255,137,247,255,135,243,255,133,241,255,130,239,255, -129,237,255,127,234,255,127,230,255,125,229,255,125,230, -255,126,231,253,132,229,246,132,229,246,134,231,247,134, -231,247,137,235,248,144,242,255,154,252,250,166,255,250, -167,255,245,162,255,241,152,255,239,144,255,237,138,255, -233,128,255,239,133,255,255,145,255,255,158,255,255,159, -255,255,161,255,255,162,255,253,162,255,251,161,255,251, -159,255,250,157,255,250,156,255,251,158,255,252,158,255, -253,154,255,255,155,255,255,157,255,255,157,255,255,160, -255,255,162,255,255,159,255,255,157,255,255,151,255,255, -150,255,255,149,255,255,150,255,255,153,255,255,153,255, -255,154,255,255,154,255,255,154,255,255,155,255,255,151, -255,255,149,255,255,151,255,255,152,254,255,147,254,255, -145,253,255,143,251,255,142,249,255,145,249,255,145,249, -255,145,248,255,145,248,255,145,247,255,146,246,255,143, -244,255,142,244,255,142,248,255,142,249,255,143,247,255, -142,246,255,142,248,255,143,248,255,141,246,255,144,245, -255,142,246,255,137,245,255,133,241,255,129,237,255,128, -234,255,129,233,252,134,237,248,135,238,249,139,241,253, -141,242,254,145,240,255,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -184,184,184,184,182,180,180,178,177,170,178,179,151,188, -200,120,187,226,77,174,239,110,164,243,155,159,245,189, -156,246,214,149,244,228,145,243,239,152,244,255,155,250, -255,153,254,255,147,253,255,146,251,255,143,248,255,140, -246,255,138,244,255,135,240,255,136,237,255,140,236,255, -139,236,255,137,236,255,136,236,255,138,238,255,138,237, -255,138,237,255,139,238,255,138,237,255,139,238,255,140, -241,255,140,240,255,139,243,255,139,242,255,137,242,255, -134,240,255,133,241,255,133,240,255,134,239,255,133,238, -255,132,236,255,131,235,252,133,233,249,137,233,246,144, -237,246,147,239,248,149,239,255,145,242,255,142,241,255, -142,240,255,142,242,255,140,242,255,145,243,255,143,243, -255,140,242,255,137,241,255,138,241,255,137,240,255,135, -239,255,136,240,255,135,242,255,129,239,255,124,233,255, -123,231,226,140,231,223,150,240,240,148,241,254,141,238, -255,123,233,255,111,221,234,113,212,206,119,207,182,126, -206,162,135,207,151,143,208,154,145,207,156,149,211,165, -148,213,170,151,216,179,148,221,191,147,224,205,146,226, -222,145,228,234,144,233,239,141,235,251,137,237,253,134, -239,253,134,240,254,135,239,255,137,239,255,138,241,255, -134,240,255,135,242,255,135,240,255,138,239,255,135,239, -255,139,240,254,144,246,254,145,249,255,141,248,255,109, -238,255,29,165,234,1,105,177,39,114,147,79,127,111,95, -136,95,102,135,114,95,132,102,71,118,89,53,106,83,57,97, -78,57,89,73,51,82,73,45,74,68,37,67,55,31,61,39,21,51, -38,19,44,40,21,41,42,25,42,36,30,49,20,61,66,2,184, -127,6,252,202,104,250,234,168,215,249,201,193,255,215, -173,255,226,161,255,244,154,255,255,145,255,255,142,252, -255,140,249,255,139,248,255,137,246,255,134,242,255,131, -240,255,129,237,255,128,234,255,128,232,255,127,232,255, -126,232,255,126,232,247,132,230,240,134,232,242,134,232, -246,134,231,248,135,232,248,139,236,253,147,243,255,158, -253,255,167,255,254,162,255,251,152,255,244,144,255,240, -139,255,236,128,255,250,131,255,255,144,255,255,157,255, -255,159,255,255,162,255,251,163,255,245,164,255,242,163, -255,239,160,255,241,157,255,246,155,255,250,158,255,255, -156,255,255,152,255,255,155,255,255,157,255,255,158,255, -255,161,255,255,162,255,254,160,255,251,158,255,255,153, -255,255,151,255,255,150,255,255,151,255,255,153,255,255, -154,255,255,153,255,255,154,255,255,155,255,255,156,255, -255,153,255,255,151,255,255,151,255,255,153,255,255,150, -255,255,147,254,255,145,254,255,143,252,255,146,251,255, -144,249,255,144,249,255,144,249,255,145,248,255,145,246, -255,144,246,255,144,246,255,143,246,255,142,247,255,144, -245,255,143,245,255,143,247,255,143,247,255,142,247,255, -145,247,255,144,247,255,139,247,255,134,244,255,130,240, -255,129,237,255,132,236,253,134,237,249,137,240,245,139, -243,243,143,245,246,148,244,252,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,182,182, -179,178,180,162,186,188,123,213,203,113,206,208,143,190, -218,175,175,227,202,161,233,222,153,236,238,148,239,250, -151,246,252,153,250,255,152,250,255,148,248,255,146,247, -255,150,248,255,151,248,255,144,244,255,139,242,255,136, -241,255,133,240,255,131,238,255,132,238,255,134,238,255, -135,238,255,135,238,255,134,237,255,135,237,255,134,237, -255,138,240,255,139,240,255,135,240,253,136,241,255,135, -238,255,134,237,255,135,237,255,136,237,255,136,236,255, -134,234,254,132,234,253,130,235,251,131,233,249,133,233, -245,140,236,244,146,239,248,148,239,255,141,242,255,140, -243,255,140,242,255,139,241,255,139,241,255,142,242,255, -140,243,255,138,241,255,137,240,255,137,239,255,138,238, -255,136,239,255,136,240,255,135,238,255,128,234,255,118, -227,254,134,223,220,140,234,225,142,242,240,135,241,253, -126,235,255,119,220,252,119,208,225,122,202,198,127,201, -178,133,203,161,139,209,154,142,209,156,143,211,160,143, -217,170,141,219,174,142,222,183,139,228,197,139,230,210, -140,231,225,138,231,235,137,234,240,136,234,251,134,235, -252,134,235,251,136,235,253,137,233,253,138,232,255,136, -234,255,134,235,255,135,236,255,136,237,255,137,237,255, -136,237,255,139,238,253,146,243,252,148,248,255,147,248, -255,142,246,255,90,204,254,27,145,216,22,131,158,61,147, -123,92,147,101,94,134,110,84,136,100,73,129,96,60,119, -93,52,112,88,54,102,79,51,96,80,47,89,76,42,83,66,43, -80,57,32,67,54,25,57,51,25,49,48,38,43,37,79,47,21, -159,94,21,231,207,50,226,246,129,208,252,177,189,255,204, -181,255,218,166,255,229,156,255,245,150,255,255,147,255, -255,145,252,255,142,250,255,138,249,255,137,247,255,135, -244,255,134,241,255,132,239,255,126,237,255,124,235,255, -123,233,255,122,230,255,122,231,246,124,231,240,127,232, -241,128,233,244,127,232,244,132,232,244,133,232,246,137, -237,248,144,245,249,158,255,252,167,255,251,167,255,246, -157,255,240,152,255,237,139,255,250,133,254,255,144,255, -255,157,255,255,160,255,255,163,255,252,164,255,246,164, -255,241,164,255,239,160,255,243,156,255,247,154,255,251, -154,255,254,155,255,255,155,255,255,155,255,255,157,255, -255,158,255,255,157,255,255,158,255,254,159,255,252,155, -255,255,149,255,255,148,255,255,149,255,255,149,255,255, -152,255,255,151,255,255,154,255,255,155,255,255,156,255, -255,156,255,255,155,255,255,152,255,255,151,255,255,152, -255,255,149,254,255,148,254,255,147,252,255,146,251,255, -149,249,255,148,249,255,147,248,255,145,248,255,143,247, -255,143,246,255,143,245,255,142,244,255,144,244,255,145, -245,255,145,243,255,146,244,255,145,244,255,145,244,255, -146,245,255,150,246,255,146,246,255,140,245,255,135,242, -255,130,238,255,128,236,255,129,235,253,134,235,248,136, -238,245,140,242,245,142,244,246,146,243,251,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,183,182,179,187,179,151,203, -199,122,196,216,115,182,230,128,166,238,154,156,240,188, -148,241,211,148,244,225,151,249,238,151,249,247,149,249, -254,145,248,255,149,247,255,154,251,255,153,253,255,149, -251,255,145,250,255,138,246,255,135,242,255,135,240,255, -135,238,255,135,238,255,135,237,255,136,239,255,135,238, -255,134,237,255,136,238,254,137,239,255,135,238,255,136, -237,255,136,236,255,136,236,255,136,236,255,135,234,255, -135,234,255,135,234,255,133,234,255,131,234,254,132,233, -250,134,233,244,140,236,243,145,239,243,149,242,250,143, -242,255,139,241,255,139,241,255,138,241,255,139,240,255, -142,242,255,141,243,255,139,242,255,138,240,255,138,240, -255,139,241,255,136,239,255,135,238,255,133,235,255,125, -230,255,116,226,248,143,227,219,144,236,234,140,239,249, -131,236,255,118,225,249,116,214,219,120,208,189,128,206, -170,136,208,163,140,209,160,143,210,162,147,211,172,147, -216,172,146,220,181,145,222,189,145,226,197,142,230,207, -141,231,216,141,232,227,139,232,235,137,233,240,135,234, -244,134,233,248,133,233,248,133,231,245,134,231,244,137, -232,246,136,234,244,134,235,246,135,235,248,135,236,249, -136,236,252,137,238,247,141,240,247,146,244,253,148,248, -255,150,252,255,149,251,255,129,242,255,84,204,251,36, -151,216,64,157,195,106,166,148,118,164,111,102,157,91,87, -143,81,75,132,83,62,120,93,63,107,100,62,103,93,57,97, -83,50,90,70,47,83,65,39,73,69,34,64,63,38,62,35,63,67, -14,145,106,9,242,173,44,243,232,125,219,247,179,198,253, -214,183,255,232,174,255,243,160,255,249,153,255,255,149, -255,255,147,255,255,146,253,255,145,252,255,141,251,255, -139,249,255,138,246,255,136,243,255,134,243,255,127,239, -255,126,237,255,125,233,255,124,231,255,124,230,255,126, -232,247,127,233,242,128,234,240,127,233,236,130,233,232, -132,235,234,133,236,241,138,239,247,150,248,251,165,255, -253,170,255,250,161,255,242,157,255,239,149,255,239,139, -254,244,142,253,255,157,255,255,160,255,255,164,255,255, -164,255,249,166,255,245,164,255,241,160,255,240,157,255, -242,155,255,247,156,255,251,155,255,251,155,255,255,157, -255,255,157,255,255,157,255,255,158,255,255,159,255,255, -159,255,255,157,255,255,153,255,255,150,255,255,151,255, -255,151,255,255,151,255,255,152,255,255,154,255,255,155, -255,255,155,255,255,156,255,255,154,255,255,153,255,255, -152,255,255,152,254,255,150,255,255,149,255,255,148,253, -255,148,250,255,150,250,255,150,250,255,150,250,255,147, -249,255,145,249,255,143,248,255,142,247,255,142,247,255, -144,246,255,145,246,255,146,244,255,146,244,255,145,245, -255,146,245,255,147,245,255,151,246,255,148,248,255,140, -246,255,135,243,255,132,240,255,129,236,255,130,234,254, -135,234,251,137,237,249,141,240,250,143,243,251,148,244, -253,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -183,183,182,181,181,154,191,194,133,198,206,125,199,213, -129,190,220,158,168,228,188,159,232,210,157,238,228,152, -242,240,150,243,251,147,245,254,150,247,255,154,250,255, -155,252,255,155,253,255,154,253,255,149,253,255,145,250, -255,140,245,255,139,242,255,135,238,255,133,238,255,135, -238,255,135,237,255,134,236,255,137,236,253,138,235,254, -135,234,255,136,234,255,135,233,255,137,233,255,137,234, -255,136,233,255,135,234,255,134,234,255,133,233,255,133, -233,255,133,232,251,134,232,245,140,235,242,145,239,243, -148,240,250,143,240,255,140,240,255,140,241,255,139,240, -255,140,239,255,142,240,255,143,242,255,141,241,255,139, -239,255,140,239,255,141,240,255,138,238,255,136,237,255, -132,233,255,122,226,255,126,221,240,144,230,223,144,236, -238,137,235,251,124,225,251,119,214,238,123,207,201,128, -206,176,133,207,165,137,209,162,140,212,165,142,214,173, -143,213,185,142,218,184,144,222,194,143,222,201,143,224, -209,142,226,216,138,230,223,137,231,234,134,231,239,134, -231,240,135,229,241,135,228,244,133,227,243,133,228,241, -133,229,240,133,230,239,133,232,235,132,234,240,132,234, -244,133,233,246,136,232,246,138,235,241,140,240,244,144, -244,252,145,247,254,149,249,255,151,250,255,143,247,255, -119,231,255,67,180,248,59,161,217,93,171,162,127,184,122, -130,185,115,120,171,99,108,157,92,92,139,98,82,122,108, -75,113,95,69,106,83,63,101,72,57,97,68,42,87,76,44,73, -61,63,69,28,126,112,19,198,175,44,226,226,107,212,242, -183,193,248,214,180,252,236,170,255,248,160,255,252,154, -255,255,148,255,255,146,255,255,144,254,255,147,252,255, -148,252,255,145,252,255,143,251,255,140,249,255,138,247, -255,136,245,255,130,240,255,127,238,255,126,235,255,126, -232,255,127,230,255,126,230,248,126,231,243,127,231,240, -128,231,236,130,232,236,130,234,234,132,234,238,135,235, -243,142,241,247,156,252,249,170,255,249,170,255,245,160, -255,241,154,255,238,141,255,242,130,252,255,147,254,255, -154,255,255,161,255,255,163,255,252,166,255,249,166,255, -243,165,255,239,162,255,241,158,255,244,158,255,247,160, -255,251,159,255,255,159,255,255,158,255,255,157,255,255, -159,255,255,161,255,255,162,255,255,159,255,255,155,255, -255,153,255,255,152,255,255,151,255,255,151,255,255,151, -255,255,152,255,255,153,255,255,155,255,255,156,255,255, -156,255,255,155,255,255,154,255,255,153,255,255,150,255, -255,150,253,255,151,251,255,150,249,255,152,250,255,151, -249,255,150,250,255,148,249,255,146,247,255,145,246,255, -144,245,255,145,246,255,146,246,255,145,247,255,146,247, -255,145,247,255,143,247,255,144,246,255,146,247,255,148, -246,255,144,247,255,141,247,255,137,243,255,134,239,255, -133,236,255,133,234,254,135,233,251,137,236,249,141,240, -250,144,241,252,148,242,253,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,184,184,183,183,183, -181,185,185,174,193,190,155,203,201,142,186,218,139,172, -227,166,161,234,194,153,237,215,150,238,232,147,242,245, -150,246,248,154,250,250,157,253,253,158,254,255,155,253, -255,151,254,255,148,254,255,147,252,255,146,250,255,143, -247,255,135,242,255,134,240,255,133,237,255,133,235,255, -137,235,255,138,232,255,135,233,255,134,234,255,133,233, -255,138,231,253,139,233,253,138,234,253,138,235,254,135, -233,255,134,231,255,135,231,255,135,231,252,135,230,248, -139,232,244,146,236,244,149,238,249,145,237,254,142,238, -255,141,240,255,140,238,255,141,237,255,142,240,255,141, -241,255,140,240,255,139,239,255,139,239,255,140,240,255, -138,237,255,132,236,255,124,231,254,119,225,243,136,224, -223,143,234,223,137,236,241,130,232,249,118,217,236,120, -208,215,129,206,186,134,208,175,137,211,171,139,213,172, -141,215,177,142,217,185,142,218,191,140,220,194,143,224, -203,142,225,211,143,226,221,140,228,227,137,230,232,135, -229,239,133,227,239,133,226,237,135,225,241,136,225,240, -136,226,239,136,227,241,135,228,241,134,229,238,134,231, -233,131,232,239,130,231,242,131,230,242,138,231,240,140, -235,242,139,239,246,140,243,253,140,245,255,144,248,255, -143,247,255,138,246,255,129,240,255,102,215,250,75,183, -212,91,184,168,122,193,146,127,195,142,126,190,129,125, -188,123,122,179,124,110,163,119,96,150,96,91,138,68,87, -127,43,82,119,41,57,106,71,79,85,41,123,99,21,201,176, -76,219,220,121,202,241,170,182,249,216,174,253,237,166, -254,250,158,254,255,154,254,255,149,255,255,145,254,255, -145,254,255,145,253,255,148,251,255,150,251,255,148,251, -255,146,250,255,143,250,255,140,248,255,138,247,255,134, -242,255,129,240,255,129,238,255,129,235,255,127,234,255, -127,231,255,126,231,251,128,230,248,129,231,245,129,231, -245,129,231,240,130,232,239,134,233,244,137,235,248,145, -241,253,162,252,254,172,255,251,161,255,246,154,255,242, -142,255,245,125,254,255,138,250,255,147,254,255,157,255, -255,162,255,255,164,255,254,169,255,247,168,255,242,166, -255,242,162,255,243,161,255,245,162,255,248,162,255,252, -161,255,255,159,255,255,158,255,255,159,255,255,157,255, -255,161,255,255,159,255,255,155,255,255,152,255,255,151, -255,255,151,255,255,152,255,255,152,255,255,153,255,255, -154,255,255,156,255,255,157,255,255,156,255,255,156,255, -255,155,255,255,153,255,255,150,255,255,150,253,255,151, -253,255,151,251,255,152,251,255,150,251,255,150,251,255, -149,250,255,147,247,255,146,245,255,146,245,255,149,246, -255,150,246,255,149,246,255,146,247,255,146,247,255,145, -246,255,146,247,255,147,248,255,146,247,255,145,249,255, -143,247,255,140,245,255,135,241,255,132,238,255,131,236, -255,134,235,255,136,236,255,144,239,253,149,241,251,151, -242,255,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,182, -182,179,182,182,157,186,203,127,186,213,127,180,225,135, -170,230,164,162,235,194,152,237,224,151,241,233,155,246, -243,159,252,251,162,254,254,159,254,255,154,253,255,150, -252,255,150,251,255,150,252,255,150,253,255,143,248,255, -141,245,255,139,241,255,137,238,255,136,237,255,137,235, -255,134,234,255,134,233,255,132,231,254,138,230,253,140, -233,253,139,234,253,139,234,254,138,233,255,136,232,255, -136,231,255,136,231,254,136,232,251,140,232,248,145,235, -249,149,238,250,149,239,255,143,238,255,140,239,255,138, -238,255,140,237,255,141,240,255,141,241,255,140,240,255, -140,240,255,139,239,255,138,240,255,135,237,255,129,234, -255,121,228,253,120,224,242,139,228,215,142,234,229,132, -231,249,123,222,236,118,212,208,125,210,188,134,210,173, -137,211,170,139,213,172,140,214,175,141,215,179,143,218, -183,142,219,189,142,221,193,143,224,200,142,227,209,144, -227,218,140,228,227,138,228,232,137,228,232,135,226,230, -136,225,230,137,226,231,136,226,228,137,227,229,136,227, -232,135,227,237,134,228,239,134,229,234,132,230,235,133, -230,234,134,231,233,140,232,235,141,234,245,139,237,250, -138,239,253,137,240,254,137,241,254,136,239,255,131,235, -255,124,230,255,109,214,250,95,192,236,97,177,223,106, -164,217,105,160,183,108,160,159,108,159,144,108,157,134, -107,150,134,106,151,120,117,154,94,133,160,68,137,155,48, -100,129,70,128,124,28,187,165,55,221,209,118,212,227,169, -189,237,209,172,244,234,167,249,248,161,251,255,154,250, -255,150,250,255,146,252,255,145,252,255,146,252,255,146, -251,255,145,249,255,148,250,255,148,250,255,146,251,255, -144,251,255,142,250,255,140,248,255,138,245,255,133,241, -255,132,239,255,131,238,255,130,237,255,127,233,255,128, -233,255,130,232,255,130,232,254,130,231,253,131,231,252, -131,231,249,132,231,248,134,231,248,138,235,252,150,245, -254,166,255,254,163,255,252,159,255,245,150,255,244,134, -255,247,132,244,255,141,248,255,150,253,255,157,255,255, -163,255,255,169,255,253,168,255,248,168,255,246,165,255, -244,163,255,243,162,255,244,161,255,248,158,255,254,158, -255,255,160,255,255,161,255,255,158,255,255,162,255,255, -161,255,255,156,255,255,154,255,255,155,255,255,152,255, -255,152,255,255,154,255,255,155,255,255,156,255,255,157, -255,255,157,255,255,157,255,255,157,255,255,155,255,255, -153,255,255,151,255,255,151,255,255,151,255,255,152,253, -255,151,252,255,147,252,255,148,251,255,149,250,255,148, -249,255,147,247,255,147,246,255,149,246,255,151,248,255, -151,249,255,147,247,255,147,246,255,146,247,255,147,248, -255,147,248,255,149,249,255,149,249,255,147,247,255,144, -246,255,137,243,255,134,241,255,132,237,255,133,234,255, -136,236,255,145,241,253,149,243,252,150,242,254,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,184,184, -183,184,184,177,185,184,167,194,190,152,202,199,147,194, -210,165,176,222,196,165,230,211,163,236,226,163,242,240, -163,246,249,159,249,253,154,249,254,150,249,255,150,251, -255,149,251,255,147,251,255,147,249,255,153,249,255,153, -248,255,145,243,255,139,240,254,136,237,255,134,234,255, -134,231,255,131,229,255,133,232,255,134,233,255,134,235, -255,135,236,255,132,235,255,130,234,255,131,234,254,133, -231,254,137,230,248,137,231,246,138,235,248,142,240,250, -143,240,253,140,239,254,140,238,255,140,237,254,142,237, -255,140,238,255,139,240,255,139,240,255,139,238,255,136, -238,255,132,240,255,126,237,255,123,232,255,121,222,251, -127,219,242,140,229,221,133,232,231,125,222,242,122,210, -223,128,204,197,134,205,179,137,210,173,137,213,172,138, -214,174,140,215,177,141,216,180,144,218,183,143,218,191, -144,219,193,144,223,202,142,224,209,143,225,214,137,226, -225,134,224,229,134,224,226,135,225,225,136,223,224,135, -225,224,135,225,223,136,226,225,133,227,228,131,228,233, -129,226,233,130,225,228,132,224,227,135,225,226,137,226, -227,139,230,228,139,229,237,139,230,241,138,231,248,135, -230,249,132,229,251,117,229,254,100,220,254,87,203,251, -77,178,231,72,151,209,69,121,190,70,91,170,77,86,135,84, -86,110,88,87,97,90,90,90,86,88,93,84,87,83,93,94,67, -116,116,61,142,140,67,147,144,92,161,165,63,188,204,80, -194,225,119,183,233,161,172,239,203,159,244,230,153,247, -244,147,248,255,141,247,255,144,244,255,143,247,255,145, -248,255,144,249,255,143,250,255,145,249,255,146,249,255, -145,249,255,144,249,255,142,250,255,140,249,255,139,248, -255,137,246,255,134,243,255,133,240,255,132,239,255,131, -237,255,128,235,255,127,235,255,128,234,255,130,232,254, -131,232,254,131,232,255,131,231,253,131,231,252,131,231, -249,133,233,249,141,238,251,154,250,252,168,255,253,168, -255,247,163,255,245,151,255,246,136,241,255,137,242,255, -145,245,255,154,251,255,159,255,255,168,255,255,169,255, -249,170,255,247,169,255,245,169,255,245,165,255,244,161, -255,247,155,255,253,154,255,255,155,255,255,155,255,255, -156,255,255,158,255,255,158,255,255,155,255,255,154,255, -255,156,254,255,155,255,255,155,255,255,155,255,255,156, -255,255,157,255,255,159,255,255,159,255,255,160,255,255, -160,255,255,157,255,255,154,254,255,153,253,255,153,254, -255,153,255,255,153,255,255,151,253,255,150,251,255,152, -250,255,151,250,255,150,249,255,149,248,255,148,248,255, -151,247,255,152,248,255,151,248,255,150,246,255,150,245, -255,148,246,255,148,246,255,148,245,255,151,247,255,149, -248,255,144,247,255,144,246,255,141,242,255,139,239,255, -136,237,255,134,235,255,137,236,254,142,239,253,144,242, -253,146,242,255,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,184,184,184,184,185,184,184,185, -184,184,185,184,184,185,184,184,185,184,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,183, -182,178,185,182,151,185,198,131,174,219,129,165,234,129, -162,242,156,161,246,187,160,247,214,158,250,237,154,251, -250,151,251,255,149,251,255,147,250,255,145,249,255,147, -250,255,155,253,255,159,255,255,154,254,255,151,253,255, -144,247,255,139,241,255,137,235,255,136,233,255,137,236, -255,135,235,255,135,235,255,135,236,255,131,234,255,131, -234,255,130,233,255,132,229,254,138,231,251,139,232,248, -137,235,246,140,240,238,144,243,249,139,241,253,139,238, -255,141,236,255,142,234,255,140,236,255,138,238,255,138, -238,255,139,238,255,137,239,255,131,239,255,125,235,255, -119,227,255,120,223,241,130,225,227,139,228,229,128,225, -243,120,221,209,121,213,183,130,211,168,137,210,169,141, -215,176,140,216,183,140,216,188,142,216,189,144,217,191, -146,218,197,146,217,208,146,219,204,146,223,210,144,224, -218,144,224,226,137,225,226,134,224,227,134,224,223,133, -223,220,136,221,225,136,225,231,135,224,227,135,226,225, -131,225,223,128,226,223,127,225,220,128,226,206,132,227, -207,136,227,214,135,226,217,134,228,213,136,226,225,136, -229,220,133,226,232,125,217,252,115,203,252,83,190,252, -49,170,218,26,147,170,20,128,133,27,114,111,42,100,97, -61,89,82,73,85,81,79,81,76,84,82,76,84,81,76,80,79,74, -77,76,71,77,73,64,83,74,65,94,83,77,132,125,94,157,155, -96,179,189,100,187,217,107,180,231,125,171,239,165,158, -243,211,149,242,235,143,244,252,137,244,255,142,245,255, -142,246,255,142,246,255,143,249,255,141,250,255,143,248, -255,145,249,255,145,249,255,145,249,255,144,249,255,142, -249,255,141,249,255,138,245,255,136,243,255,136,242,255, -135,241,255,136,240,255,132,240,255,131,238,255,132,234, -255,135,233,255,136,236,255,135,235,255,134,233,255,135, -234,255,134,233,255,134,233,255,138,234,255,146,240,255, -161,254,255,168,255,255,165,255,253,157,255,242,145,252, -255,143,249,255,144,243,255,150,243,255,155,248,255,166, -255,255,168,255,255,170,255,255,171,255,251,170,255,245, -168,255,243,162,255,244,158,255,248,155,255,255,153,255, -255,156,255,255,156,255,255,157,255,255,158,255,255,156, -255,255,157,255,255,157,255,255,157,255,255,157,255,255, -156,255,255,156,255,255,158,255,255,160,255,255,161,255, -255,163,255,255,162,255,255,156,255,255,155,255,255,156, -255,255,155,255,255,154,255,255,153,255,255,152,254,255, -153,253,255,155,253,255,153,251,255,150,249,255,150,250, -255,148,249,255,153,249,255,155,249,255,154,249,255,153, -247,255,153,246,255,151,246,255,150,246,255,150,246,255, -154,247,255,150,248,255,146,249,255,144,247,255,143,244, -255,140,241,255,139,240,255,136,238,254,139,239,253,145, -242,253,146,243,254,147,244,255,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,184, -185,184,183,185,183,182,185,182,182,185,183,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,184,184,182,182,182,179,178,184, -168,178,192,143,195,200,149,204,210,180,192,220,206,177, -231,230,166,237,246,159,241,254,154,244,255,150,244,255, -150,242,255,152,247,255,159,252,255,162,254,255,158,255, -255,155,255,255,153,253,255,146,250,255,142,244,255,135, -238,255,134,237,255,132,235,255,133,234,255,135,235,255, -133,232,255,132,230,255,134,228,255,136,226,254,137,229, -249,138,231,247,138,233,244,145,236,236,147,238,247,142, -238,252,138,238,255,135,236,255,135,235,255,138,236,255, -140,237,255,141,238,255,139,237,255,136,235,255,131,233, -255,125,229,255,120,223,255,123,219,240,129,224,226,130, -226,224,129,212,235,130,203,201,134,204,181,139,210,170, -141,212,171,142,214,175,141,216,183,138,215,187,137,216, -188,139,218,189,143,219,196,139,219,206,139,224,204,136, -224,208,134,225,215,132,223,221,132,220,220,132,218,222, -132,216,217,133,217,216,135,216,220,136,215,224,136,215, -221,136,215,219,136,214,217,136,210,215,137,208,211,139, -212,200,137,216,202,137,218,209,135,217,211,140,217,208, -131,217,217,116,219,208,102,216,214,84,192,222,75,144, -232,73,99,198,71,82,167,72,77,140,76,78,121,76,78,105, -75,78,94,76,80,82,76,78,77,77,78,73,79,78,72,80,77,72, -80,75,71,77,75,69,77,74,65,80,73,63,82,73,66,95,89,57, -116,114,54,147,143,58,191,182,85,213,198,114,215,205,158, -189,214,203,174,218,227,161,221,242,155,226,251,150,231, -255,144,234,255,143,238,255,145,242,255,145,243,255,147, -244,255,146,247,255,145,246,255,146,246,255,145,247,255, -143,248,255,142,248,255,142,245,255,140,243,255,137,243, -255,134,244,255,133,243,255,135,242,255,133,240,255,133, -238,255,132,236,255,133,238,255,135,236,255,136,237,255, -136,237,255,133,236,255,131,235,254,131,235,255,133,237, -255,145,247,255,166,255,254,171,255,252,169,255,244,152, -255,255,151,253,255,149,249,255,145,244,255,147,246,255, -154,251,255,159,255,255,165,255,255,169,255,250,171,255, -245,170,255,242,164,255,244,160,255,248,156,255,255,154, -255,255,156,255,255,157,255,255,159,255,255,161,255,255, -159,255,255,156,255,255,153,255,255,155,255,255,157,255, -255,157,255,255,157,255,255,158,255,255,156,255,255,157, -255,255,156,255,255,156,255,255,155,255,255,158,255,255, -158,255,255,156,255,255,152,255,255,152,255,255,151,253, -255,152,254,255,152,255,255,150,252,255,149,250,255,151, -250,255,151,251,255,151,251,255,150,250,255,149,248,255, -148,247,255,153,246,255,150,248,255,149,248,255,149,248, -255,150,249,255,150,250,255,148,248,255,146,246,255,145, -245,255,139,242,255,136,240,255,136,239,255,138,242,254, -140,244,252,142,243,252,149,244,255,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,184,185,184,183,185,184,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,182,183,182,178,178,173,185,193,147,182,226,94, -172,244,121,162,249,162,156,250,199,151,248,226,147,245, -243,149,245,255,151,249,255,158,253,255,161,255,255,158, -255,255,154,255,255,153,254,255,150,255,255,148,253,255, -144,249,255,140,246,255,136,239,255,134,235,255,135,235, -255,133,233,255,132,232,255,135,232,255,138,230,254,139, -232,248,139,234,250,139,233,247,146,237,238,147,240,248, -143,240,254,139,239,255,135,236,255,136,236,255,138,237, -255,140,238,255,140,238,255,138,236,255,137,237,255,132, -235,255,125,230,255,122,228,254,126,223,238,131,225,230, -126,221,231,125,214,205,132,209,185,140,212,181,144,213, -180,146,215,185,144,215,186,143,217,187,142,219,190,141, -219,194,141,218,195,144,221,195,141,222,203,141,225,212, -137,226,212,133,226,206,131,225,202,132,223,205,133,223, -200,134,222,196,132,222,191,133,220,189,135,221,191,134, -220,190,133,218,187,133,218,183,135,218,178,137,217,174, -139,218,172,137,222,179,135,222,186,132,219,190,136,213, -207,121,199,243,94,184,242,61,163,210,25,132,153,27,111, -113,49,96,90,62,92,78,69,90,70,75,89,68,75,86,68,74, -82,71,72,79,69,73,78,66,75,78,65,76,77,64,78,78,60,79, -80,50,79,80,54,83,82,55,87,83,55,87,82,56,89,82,56,92, -83,66,108,91,80,146,123,105,184,163,116,201,200,108,180, -225,100,166,230,129,156,232,161,149,234,188,145,235,211, -140,238,228,140,241,239,142,243,247,143,245,253,144,245, -255,145,247,255,144,246,255,146,247,255,145,249,255,142, -248,255,141,249,255,142,249,255,141,249,255,140,249,255, -136,247,255,135,246,255,136,244,255,135,244,255,136,243, -255,136,241,255,135,240,255,137,241,255,138,241,255,139, -241,255,136,240,255,135,240,255,135,238,255,134,236,255, -139,238,255,159,252,255,170,255,255,170,255,250,157,255, -248,154,255,253,152,255,254,150,255,255,149,253,255,155, -254,255,157,255,255,162,255,255,169,255,255,170,255,251, -169,255,246,164,255,243,159,255,245,154,255,252,154,255, -255,155,255,255,158,255,255,160,255,255,161,255,253,158, -255,251,155,255,255,155,255,255,156,255,255,158,255,255, -157,255,255,158,255,255,157,255,255,155,255,255,156,255, -255,156,255,255,156,255,255,155,255,255,157,255,255,158, -255,255,156,255,255,152,254,255,151,254,255,152,253,255, -153,253,255,152,254,255,150,252,255,151,251,255,152,252, -255,151,252,255,151,252,255,151,252,255,150,251,255,149, -250,255,154,250,255,150,249,255,149,249,255,149,250,255, -150,251,255,149,250,255,147,249,255,147,249,255,146,248, -255,141,245,255,138,242,255,139,241,255,140,242,255,140, -242,255,142,241,255,149,241,255,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,184,185,184,184,185,184, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,181,183,177,179,185,128,206, -196,131,210,204,162,200,216,194,186,225,223,170,230,241, -159,234,252,157,241,253,158,250,255,157,254,255,155,253, -255,154,253,255,153,253,255,151,254,255,151,253,255,148, -249,255,149,250,255,141,246,255,132,240,255,128,237,255, -125,234,255,124,233,255,128,234,255,130,231,254,134,232, -247,138,233,249,136,232,244,141,237,235,143,240,247,137, -240,252,134,239,254,132,236,254,134,235,255,136,236,255, -136,236,255,136,236,255,134,234,255,134,233,255,133,231, -255,125,225,255,125,220,250,128,222,237,129,221,226,125, -213,224,131,208,203,133,210,186,134,213,180,135,216,178, -138,216,182,137,216,183,137,216,183,139,217,186,139,216, -190,141,216,191,142,220,192,138,221,199,136,220,206,137, -219,206,135,218,201,134,216,199,139,214,200,137,213,194, -138,212,190,137,211,185,140,209,183,141,209,185,140,208, -184,139,207,182,138,207,177,137,208,172,138,209,169,143, -208,167,142,209,172,133,208,174,117,209,176,90,202,180, -79,154,194,71,112,181,66,86,159,66,74,132,72,73,107,76, -77,90,76,80,78,77,84,70,77,84,66,75,81,65,72,77,67,68, -76,65,71,74,62,71,73,61,72,73,61,74,75,58,80,79,50,82, -81,55,84,81,55,87,83,55,89,84,58,90,85,59,87,83,66,87, -82,68,95,92,65,120,117,60,160,156,61,197,185,81,206,194, -121,200,202,156,182,209,183,170,214,206,155,222,222,148, -226,231,147,231,239,146,237,248,147,241,254,147,243,255, -144,244,255,144,245,255,144,246,255,143,246,255,142,247, -255,143,249,255,142,249,255,141,247,255,140,245,255,139, -245,255,137,243,255,137,243,255,138,243,255,136,242,255, -135,241,255,136,243,255,136,244,255,138,244,255,138,243, -255,138,243,255,137,241,255,133,237,255,134,237,255,145, -249,255,156,255,253,162,255,249,157,255,250,154,255,253, -157,255,255,158,255,255,155,253,255,152,253,255,153,253, -255,158,255,255,164,255,254,167,255,251,168,255,246,165, -255,243,159,255,245,154,255,251,152,255,255,154,255,255, -157,255,255,164,255,255,165,255,254,162,255,252,156,255, -254,154,255,255,155,255,255,157,255,255,155,255,255,155, -255,255,155,255,255,154,255,255,154,255,255,154,255,255, -154,255,255,153,255,255,155,255,255,155,255,255,155,255, -255,150,254,255,148,254,255,151,254,255,152,253,255,151, -251,255,150,250,255,151,250,255,151,251,255,150,252,255, -150,253,255,149,251,255,147,250,255,148,251,255,149,250, -255,147,250,255,145,249,255,146,251,255,146,251,255,145, -251,255,144,249,255,145,249,255,145,248,255,144,245,255, -142,241,255,143,239,255,143,240,255,143,239,255,143,240, -255,145,240,255,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,182,180,174,190,192, -135,192,221,111,182,240,106,168,248,136,157,246,177,154, -245,218,152,247,235,151,249,249,151,250,255,152,252,253, -152,253,255,150,254,255,149,253,255,149,252,255,151,254, -255,146,254,255,140,251,255,136,247,255,129,238,255,127, -235,255,129,232,255,133,233,255,136,233,253,140,236,254, -138,234,252,141,234,252,142,239,252,138,240,253,134,239, -254,132,237,255,134,236,255,136,237,254,136,238,254,135, -237,254,134,236,253,134,236,251,134,235,249,125,228,251, -125,226,229,129,225,227,127,221,221,124,217,204,135,216, -188,138,217,189,140,218,192,140,218,192,141,217,190,140, -217,191,140,217,189,141,218,188,141,218,188,143,218,191, -144,220,198,138,222,195,136,222,193,134,220,192,134,218, -191,132,217,190,136,214,185,136,215,181,137,215,176,136, -214,170,139,212,170,138,212,161,137,211,155,137,211,155, -138,211,158,138,212,160,138,211,162,141,206,174,137,197, -202,120,181,222,88,161,216,42,139,180,32,112,124,41,97, -95,53,90,81,63,86,72,73,84,66,77,84,68,77,83,70,75,82, -69,75,81,68,73,78,65,70,76,66,65,73,63,68,73,55,70,74, -55,71,75,54,74,75,54,79,77,56,80,79,53,84,81,55,88,84, -59,90,85,60,93,87,62,91,88,60,90,88,57,91,88,57,96,89, -62,116,100,82,158,130,112,185,172,107,192,205,96,178,223, -93,168,230,122,154,232,178,147,232,201,144,234,216,142, -238,226,143,240,238,144,243,248,143,247,253,143,249,255, -143,248,255,143,248,255,143,248,255,143,248,255,142,248, -255,142,248,255,142,247,255,141,246,255,139,246,255,139, -245,255,139,245,255,137,244,255,136,243,255,137,243,255, -138,244,255,140,246,255,141,247,255,141,247,255,139,244, -255,136,241,255,136,239,255,139,241,255,148,248,255,156, -255,255,156,255,255,153,255,255,158,255,255,162,255,254, -162,255,249,157,255,244,156,255,241,159,255,241,163,255, -243,166,255,242,167,255,240,166,255,238,159,255,241,154, -255,249,152,255,255,154,255,255,156,255,255,164,255,255, -167,255,255,162,255,252,158,255,255,154,255,255,154,255, -255,156,255,255,155,255,255,154,255,255,155,255,255,154, -255,255,154,255,255,154,255,255,154,255,255,153,255,255, -154,255,255,155,255,255,154,255,255,151,254,255,149,254, -255,151,253,255,152,253,255,151,251,255,150,249,255,151, -251,255,151,252,255,150,252,255,150,252,255,148,251,255, -147,250,255,149,251,255,149,251,255,146,250,255,145,251, -255,146,252,255,146,252,255,145,251,255,144,250,255,145, -249,255,145,248,255,144,245,255,144,244,255,145,244,255, -145,244,255,144,242,255,143,242,255,145,242,255,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,184,185,184,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,178,180,170,182,184,129,210,199, -121,224,206,136,208,212,177,179,222,213,166,230,229,158, -236,242,152,239,248,152,245,250,154,247,255,152,248,255, -153,249,255,151,250,255,153,253,255,151,252,255,148,251, -255,145,250,255,138,243,255,132,238,255,127,235,255,125, -236,255,129,238,254,133,238,253,131,236,251,129,236,250, -139,238,249,137,237,251,135,236,254,133,234,255,133,232, -255,133,234,251,133,234,251,131,233,252,129,234,252,129, -235,250,132,234,247,122,225,250,124,222,227,128,223,225, -126,218,218,132,215,204,130,220,187,133,221,189,135,221, -190,133,219,188,132,218,187,134,216,187,133,215,185,135, -215,185,136,216,186,137,218,190,135,218,193,134,219,191, -134,216,189,134,214,187,134,212,186,137,209,186,138,209, -181,138,208,177,138,207,170,137,207,163,137,204,163,139, -202,155,139,203,151,140,205,153,138,206,157,134,207,158, -127,209,158,105,205,161,88,180,167,69,133,166,64,97,163, -65,75,151,71,72,118,73,74,94,74,77,80,75,77,71,80,78, -66,79,80,66,78,79,68,77,78,68,75,77,65,73,74,63,74,71, -65,75,68,63,75,70,56,78,74,57,78,75,56,80,76,57,81,78, -56,82,80,54,85,82,55,86,82,57,88,84,59,90,88,60,90,89, -61,92,89,59,93,89,58,91,88,60,92,88,66,102,98,71,136, -130,59,183,170,67,206,189,80,211,199,117,186,209,174,168, -216,197,157,221,212,152,225,221,150,228,232,148,234,242, -147,239,248,147,243,253,145,245,255,144,245,255,144,246, -255,143,246,255,142,246,255,141,246,255,140,246,255,138, -244,255,138,245,255,139,244,255,138,243,255,136,243,255, -139,242,255,138,242,255,139,243,255,139,244,255,139,246, -255,141,248,255,141,247,255,139,243,255,135,241,255,133, -239,255,136,243,255,144,251,255,151,252,255,147,252,255, -155,254,255,165,255,255,167,255,251,163,255,249,161,255, -247,161,255,245,163,255,244,166,255,243,165,255,240,161, -255,238,158,255,242,154,255,250,150,255,255,149,254,255, -154,255,255,158,255,255,160,255,254,160,255,253,153,255, -255,150,255,255,151,255,255,153,255,255,153,255,255,152, -255,255,152,255,255,150,255,255,151,255,255,152,255,255, -153,255,255,153,255,255,152,255,255,151,255,255,150,254, -255,148,251,255,148,250,255,150,252,255,150,252,255,149, -251,255,146,248,255,149,250,255,151,251,255,152,250,255, -150,249,255,149,250,255,147,249,255,147,250,255,146,250, -255,143,249,255,144,248,255,144,248,255,147,250,255,144, -251,255,143,249,255,143,247,255,142,247,255,140,246,255, -140,245,255,142,244,255,142,244,255,141,242,255,142,242, -255,144,242,255,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,183,178,196,189,150,202,219,105,179, -234,111,165,237,151,158,241,190,149,243,219,147,242,239, -150,244,251,150,249,250,152,251,255,152,253,255,153,254, -255,152,254,255,149,254,255,145,253,255,142,252,255,138, -250,255,133,245,255,130,239,255,131,239,255,135,239,255, -133,237,255,131,234,255,140,237,255,139,238,255,137,239, -255,136,237,255,135,235,255,133,234,255,132,234,253,133, -236,253,129,235,251,128,235,249,131,234,245,123,230,233, -127,225,224,129,225,220,129,222,210,137,222,200,136,223, -208,136,220,211,138,219,211,137,219,207,135,218,202,135, -216,198,136,217,192,137,218,189,140,221,189,138,221,188, -136,221,190,133,218,188,132,217,186,134,216,185,134,213, -182,137,210,183,138,212,173,137,212,168,137,210,164,136, -209,158,136,208,146,141,207,147,142,207,153,143,207,163, -140,204,177,132,195,197,112,178,213,69,151,196,41,126, -154,35,104,113,46,94,87,60,87,75,72,83,72,75,82,70,76, -82,67,76,79,65,81,78,69,80,81,65,78,80,64,77,80,63,75, -78,59,75,78,56,77,77,53,79,76,56,80,76,54,83,79,57,83, -81,55,84,83,51,84,81,62,85,83,63,87,84,61,89,85,59,91, -86,65,92,90,65,92,91,64,94,90,64,95,91,65,93,90,62,92, -90,58,91,89,55,106,92,66,144,116,96,182,152,113,200,192, -91,183,225,85,169,232,127,158,231,165,150,229,195,148, -228,216,145,233,229,145,238,235,145,243,241,145,247,247, -145,249,251,145,249,254,143,249,255,143,248,255,143,248, -255,141,247,255,141,247,255,140,246,255,140,246,255,140, -245,255,136,244,255,140,242,255,139,243,255,140,245,255, -141,247,255,141,248,255,143,251,255,144,251,255,143,250, -255,140,248,255,137,244,255,136,243,255,139,243,255,147, -249,255,146,251,255,154,255,255,166,255,254,167,255,246, -164,255,241,163,255,238,164,255,236,165,255,235,166,255, -235,166,255,235,161,255,236,158,255,242,154,255,255,150, -255,255,149,254,255,153,255,255,159,255,255,160,255,255, -160,255,255,155,255,255,152,255,255,152,255,255,153,255, -255,154,255,255,154,255,255,152,255,255,149,255,255,150, -255,255,152,255,255,152,255,255,152,254,255,150,254,255, -149,253,255,149,252,255,148,251,255,149,250,255,150,250, -255,150,251,255,149,251,255,147,249,255,150,251,255,152, -251,255,153,251,255,151,251,255,150,251,255,148,251,255, -147,252,255,146,252,255,143,249,255,144,249,255,146,250, -255,148,251,255,144,250,255,142,248,255,143,248,255,142, -247,255,141,246,255,141,245,255,143,245,255,144,246,255, -143,246,255,143,246,255,144,245,255,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -182,184,188,151,211,194,131,210,198,161,199,205,188,181, -217,212,162,226,233,151,232,244,150,238,243,152,244,252, -151,247,255,153,251,254,155,252,255,153,250,255,150,250, -255,147,250,255,145,250,255,145,248,255,145,239,255,136, -240,255,133,240,255,131,239,255,128,234,255,133,237,254, -136,238,255,135,237,255,132,237,254,130,236,255,131,234, -255,132,233,252,133,233,252,131,230,249,129,228,246,127, -226,240,127,224,232,129,222,222,129,220,217,130,221,210, -133,225,200,134,223,206,131,221,209,130,220,208,131,218, -204,132,216,199,133,214,196,135,213,190,136,214,186,136, -216,184,135,218,183,134,217,185,134,215,185,133,212,184, -133,210,181,134,209,179,136,205,178,135,204,168,134,206, -163,137,203,161,139,200,155,140,203,145,140,204,147,135, -208,151,124,209,156,106,200,159,83,173,159,66,133,162,63, -91,156,66,81,135,71,78,111,74,80,90,77,81,79,79,83,72, -77,81,69,76,80,65,76,80,64,76,78,67,77,79,62,76,81,63, -75,81,62,76,80,60,78,80,56,82,81,55,80,79,58,83,79,56, -86,81,59,86,83,58,87,87,55,83,85,64,83,84,63,85,86,62, -88,88,61,89,86,65,92,87,64,94,88,63,97,90,66,96,89,65, -96,89,63,97,90,61,98,90,58,93,90,60,96,94,65,119,118, -66,158,160,48,216,184,68,214,198,120,197,208,162,172,214, -192,156,220,214,148,225,224,145,230,228,145,235,235,146, -240,241,147,244,248,148,245,254,146,245,255,144,249,255, -143,248,255,140,247,255,139,248,255,138,247,255,137,247, -255,137,247,255,137,246,255,136,243,255,138,243,255,138, -243,255,140,246,255,141,247,255,143,248,255,147,251,255, -148,252,255,146,252,255,140,249,255,135,244,255,134,241, -255,145,247,255,146,250,255,151,253,255,162,255,251,167, -255,246,166,255,241,166,255,238,166,255,236,165,255,235, -163,255,235,163,255,235,159,255,235,151,255,241,146,255, -253,145,255,255,146,254,255,150,255,255,157,255,255,159, -255,255,156,255,255,155,255,254,150,255,255,152,255,255, -152,255,255,153,255,255,155,255,255,154,255,255,152,255, -255,153,255,255,152,255,255,150,255,255,149,254,255,147, -252,255,146,252,255,146,250,255,145,249,255,147,250,255, -147,249,255,146,251,255,146,251,255,145,250,255,146,251, -255,147,251,255,148,252,255,146,251,255,145,251,255,142, -250,255,146,251,255,144,252,255,143,249,255,141,249,255, -142,251,255,145,252,255,140,249,255,139,248,255,141,248, -255,141,246,255,140,244,255,140,242,255,143,243,255,144, -245,255,146,246,255,143,245,255,142,245,255,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,184,184,184,188,178,173,195,190,146,193,211, -121,180,228,105,162,236,145,151,240,194,147,242,208,148, -245,225,148,248,239,151,248,253,153,249,255,153,250,255, -152,251,255,148,250,255,146,251,255,147,251,255,154,253, -255,146,253,255,137,248,254,134,243,255,131,238,255,133, -236,255,136,237,255,138,240,255,134,240,255,133,239,255, -132,236,255,132,234,255,134,232,255,132,230,255,129,227, -253,127,225,249,127,224,240,132,226,227,133,226,218,134, -226,214,135,226,212,136,224,211,133,224,209,132,223,205, -132,222,197,134,220,192,136,219,191,137,218,183,140,220, -180,138,220,179,136,221,178,133,220,174,132,218,172,133, -216,171,133,215,170,133,211,165,135,210,153,134,207,151, -132,207,143,135,207,136,140,207,136,141,206,146,141,203, -162,132,194,191,110,180,203,68,149,177,39,124,142,31,106, -105,54,96,83,65,94,74,73,90,74,75,85,76,78,83,76,79, -83,67,78,82,67,78,82,67,77,81,64,77,79,66,79,81,64,75, -82,59,74,80,57,76,81,58,80,82,56,84,83,54,82,82,55,86, -82,56,89,83,61,89,85,64,89,87,65,86,89,62,86,88,63,85, -87,65,87,86,65,90,88,63,92,87,67,93,86,71,95,87,72,97, -89,68,97,90,64,99,91,62,101,92,61,97,95,58,95,95,60, -99,96,63,116,105,77,183,131,116,199,189,77,195,223,81, -174,235,108,158,235,157,148,232,199,143,232,212,143,235, -222,143,238,231,143,241,239,147,246,248,147,249,253,144, -252,255,142,250,255,141,251,255,140,251,255,141,251,255, -139,251,255,139,250,255,137,248,255,137,246,255,140,244, -255,140,245,255,140,246,255,141,247,255,144,249,255,147, -251,255,148,254,255,148,255,255,144,255,255,139,251,255, -139,247,255,147,247,255,147,253,255,152,253,255,161,255, -255,166,255,253,165,255,245,166,255,240,166,255,238,164, -255,236,163,255,235,163,255,237,160,255,243,153,255,250, -148,255,255,146,255,255,146,255,255,150,255,255,157,255, -255,159,255,255,156,255,253,155,255,251,151,255,255,151, -255,255,153,255,255,154,255,255,154,255,255,155,255,255, -154,255,255,153,255,255,153,255,255,150,255,255,147,255, -255,146,253,255,147,254,255,147,253,255,146,253,255,146, -254,255,147,253,255,146,254,255,145,253,255,144,252,255, -146,253,255,147,252,255,147,252,255,149,255,255,147,255, -255,144,254,255,147,252,255,144,250,255,143,250,255,141, -251,255,142,251,255,145,253,255,140,250,255,138,249,255, -141,249,255,142,249,255,142,248,255,143,248,254,146,248, -255,147,249,255,146,249,255,145,250,254,144,248,255,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,181,183,172, -185,188,148,200,198,133,216,195,153,192,205,188,172,220, -202,161,231,219,155,237,235,155,239,248,155,243,254,154, -244,255,152,245,255,151,248,255,147,249,255,146,250,255, -154,255,255,153,255,255,150,254,255,145,251,255,138,245, -255,133,241,255,131,241,255,130,241,255,131,241,255,133, -239,255,132,238,255,130,237,255,128,236,255,125,232,254, -122,227,250,120,223,245,123,218,235,127,227,226,129,228, -218,128,228,213,127,227,210,128,224,209,130,221,207,130, -219,202,131,216,194,135,215,189,137,214,188,135,214,179, -136,217,177,135,217,176,133,215,173,134,214,170,135,210, -168,136,207,166,137,205,165,134,203,160,133,204,149,131, -200,145,135,200,139,138,200,133,135,205,134,127,206,142, -115,197,149,98,165,161,79,125,157,64,92,139,67,83,124, -74,82,104,82,85,85,81,85,74,81,84,72,79,81,74,79,78, -73,78,82,66,77,81,66,76,80,65,73,80,62,75,79,65,74,81, -62,75,80,58,77,79,58,78,79,57,79,80,54,81,82,52,79,82, -54,80,83,55,83,83,59,84,84,62,88,86,64,86,89,62,87,87, -63,91,86,66,92,85,66,93,87,63,92,89,68,92,89,72,92,88, -71,94,89,67,94,91,63,97,93,62,98,93,61,100,96,60,100, -96,62,99,94,62,104,94,65,108,106,74,151,151,36,201,184, -58,223,200,102,205,209,155,176,217,199,156,221,209,147, -225,217,143,230,226,143,234,234,143,239,242,142,244,249, -144,247,252,146,246,255,146,245,255,147,247,255,140,250, -255,143,249,255,142,250,255,138,249,255,135,247,255,134, -246,255,135,245,255,138,247,255,139,246,255,142,247,255, -145,249,255,148,250,255,151,253,255,153,255,255,147,252, -255,141,249,255,139,250,255,142,254,255,147,254,255,155, -255,255,164,255,252,165,255,245,165,255,240,166,255,238, -165,255,236,164,255,235,160,255,236,155,255,241,152,255, -247,149,255,253,148,255,255,150,255,255,152,255,255,157, -255,255,161,255,255,160,255,253,157,255,250,153,255,255, -154,255,255,156,255,255,154,255,255,154,255,255,153,255, -255,151,255,255,149,255,255,146,255,255,144,255,255,148, -254,255,146,250,255,146,251,255,146,252,255,145,252,255, -149,254,255,148,251,255,149,251,255,148,250,255,148,250, -255,149,250,255,147,250,255,144,252,255,144,253,255,144, -252,255,146,252,255,146,251,255,142,250,255,143,248,255, -146,249,255,146,249,255,146,249,255,142,247,255,141,249, -255,141,251,255,141,251,255,142,251,255,144,251,255,144, -250,255,142,248,255,144,251,255,144,251,254,145,249,255, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,184,184,184,183,181,174,196,185,164,191,211,125,176, -231,110,162,240,130,153,244,164,153,245,190,152,246,218, -151,247,229,152,250,236,151,252,243,149,253,249,148,253, -254,153,253,255,154,255,255,153,255,255,150,255,255,145, -254,255,141,251,255,138,250,255,135,247,255,133,243,255, -134,240,255,133,238,255,131,237,255,129,236,255,129,234, -255,126,231,255,123,225,250,129,226,228,130,229,226,132, -230,226,131,230,224,129,227,223,129,223,218,131,222,205, -132,222,195,133,219,188,136,219,187,139,218,182,139,218, -180,138,218,180,136,217,179,134,214,177,134,213,173,136, -211,170,137,209,166,138,207,163,135,205,156,135,205,145, -136,204,142,141,204,147,144,202,165,130,194,186,104,176, -204,72,145,175,57,118,134,54,100,103,65,95,90,73,91,80, -78,88,75,82,87,67,81,86,65,81,84,65,81,84,64,82,83,69, -77,80,67,77,81,61,77,81,63,73,80,62,74,78,62,75,80,64, -75,78,63,77,78,64,77,77,66,79,78,67,79,79,67,77,78,68, -79,81,68,83,83,64,84,85,58,89,88,59,86,88,64,88,89,64, -92,90,61,94,91,56,97,92,57,95,93,61,93,92,56,94,92,55, -96,93,57,96,93,59,98,94,61,101,96,62,102,97,64,104,99, -66,104,98,63,107,99,58,100,97,66,115,103,64,159,128,85, -207,176,106,204,216,80,180,231,134,162,233,165,151,233, -189,143,232,210,141,233,227,142,237,238,139,240,244,141, -244,244,144,247,248,146,247,251,148,249,254,139,250,255, -144,251,255,144,251,255,141,251,255,138,250,255,136,247, -255,136,245,255,137,245,255,138,245,255,141,246,255,144, -248,255,147,249,255,151,251,255,154,254,255,151,254,255, -147,254,255,144,254,255,145,254,255,148,255,255,153,255, -255,164,255,255,166,255,248,166,255,243,166,255,240,165, -255,237,164,255,235,160,255,240,155,255,250,152,255,254, -150,255,255,149,255,255,151,254,255,152,254,255,159,255, -255,163,255,255,162,255,254,159,255,247,153,255,248,154, -255,250,156,255,254,154,255,255,155,255,255,155,255,255, -152,255,255,149,255,255,146,255,255,144,253,255,147,252, -255,147,251,255,147,252,255,147,253,255,147,253,255,149, -253,255,150,251,255,151,253,255,151,253,255,149,251,255, -149,251,255,150,253,255,146,254,255,145,254,255,146,253, -255,147,253,255,148,253,255,143,251,255,146,251,255,149, -253,255,149,254,255,149,254,253,147,253,243,147,253,242, -147,253,239,147,253,237,148,253,237,150,253,237,151,253, -235,152,253,242,151,254,244,151,254,248,153,255,253,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,184,184,181,183,186,167,188,195, -132,198,208,120,194,214,146,186,222,172,172,232,203,162, -236,219,158,240,229,156,244,239,153,247,246,150,249,252, -150,252,254,152,254,255,154,255,255,151,255,255,151,254, -255,148,254,255,148,254,255,146,253,255,139,248,255,136, -243,255,137,240,255,134,239,255,132,238,255,128,234,255, -124,231,255,120,224,251,132,224,228,136,225,227,136,227, -227,131,225,225,129,223,224,129,220,217,131,219,202,133, -219,192,134,217,186,135,215,184,136,216,181,136,217,179, -136,216,180,134,214,180,134,212,178,136,212,174,136,208, -170,135,206,166,134,203,160,135,201,152,138,203,143,139, -206,144,133,207,156,120,197,177,95,167,185,67,126,175,59, -100,138,63,90,106,73,90,90,78,89,80,79,87,73,80,86,71, -82,85,65,82,83,63,81,83,64,79,82,63,80,79,64,76,79,63, -76,78,59,76,79,61,74,78,63,75,76,64,75,76,64,74,76,63, -74,76,64,74,75,64,74,76,64,74,77,64,73,78,65,75,79,67, -79,80,66,81,83,61,84,85,62,84,85,65,85,87,66,87,88,61, -89,91,56,94,91,56,93,93,58,93,94,56,95,94,56,95,94,58, -97,94,61,98,93,63,100,94,64,101,97,66,104,98,67,105,99, -64,109,101,60,105,99,62,104,97,62,115,105,69,146,136,70, -193,187,50,212,205,110,196,215,152,178,221,184,161,222, -206,149,223,221,144,229,232,140,232,238,140,237,238,143, -242,245,143,245,249,146,247,252,144,247,255,145,249,255, -145,250,255,145,248,255,143,247,255,142,246,255,140,245, -255,138,244,255,138,243,255,142,245,255,145,247,255,145, -247,255,149,250,255,153,254,255,154,255,255,150,255,255, -146,255,255,146,255,255,146,255,255,148,255,255,161,255, -255,165,255,249,164,255,244,163,255,240,163,255,238,163, -255,237,160,255,241,153,255,251,148,255,255,146,255,255, -146,254,255,150,253,255,153,252,255,160,255,255,163,255, -255,162,255,252,162,255,248,155,255,250,154,255,251,155, -255,254,155,255,255,153,255,255,152,255,255,152,255,255, -148,255,255,144,253,255,146,252,255,149,250,255,148,250, -255,150,252,255,151,253,255,151,253,255,151,253,255,153, -253,255,152,253,255,151,254,255,150,254,255,151,254,255, -152,254,255,152,254,255,151,253,255,152,253,255,152,254, -255,154,252,253,153,252,252,153,255,249,155,255,248,154, -255,247,155,255,247,160,255,244,161,255,241,162,255,240, -162,255,238,160,255,237,160,255,237,161,255,237,158,255, -241,158,255,246,155,255,248,152,255,252,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,180,181,174,182,181, -150,190,192,142,191,211,127,181,229,128,169,238,149,161, -242,179,157,245,205,152,246,225,149,247,241,147,249,250, -148,250,254,152,254,255,151,254,255,151,253,255,149,253, -255,150,253,255,152,254,255,148,254,255,144,250,255,144, -248,255,140,246,255,136,242,255,130,237,255,124,232,255, -121,225,253,131,223,241,134,224,237,134,225,237,131,223, -233,129,220,227,130,217,212,131,217,200,134,216,190,137, -215,185,138,214,185,137,215,185,136,214,179,136,214,178, -135,213,179,135,212,177,135,211,173,137,208,168,136,204, -164,138,202,156,143,204,150,144,206,151,133,204,170,107, -193,188,82,165,183,57,122,151,60,99,116,71,93,95,77,91, -82,80,90,75,83,90,71,81,86,67,79,84,68,82,81,68,84,82, -67,80,81,64,78,80,63,80,78,66,75,77,64,75,76,62,75,76, -63,72,74,63,71,73,63,73,73,68,74,73,67,74,73,65,75,75, -64,75,76,62,76,77,62,75,76,63,75,77,67,76,76,65,78,78, -63,82,80,65,85,82,66,84,83,65,87,86,63,89,87,61,91,88, -62,91,90,63,92,92,62,95,94,62,95,94,61,96,94,60,99,95, -60,99,95,59,100,96,62,102,97,65,104,98,65,108,100,65, -110,104,60,109,103,62,107,102,62,114,108,60,149,133,67, -201,175,94,205,208,118,190,221,142,172,225,168,156,227, -193,147,230,214,141,232,232,140,235,237,143,239,245,142, -242,250,144,243,254,143,244,255,144,247,255,145,248,255, -145,249,255,145,248,255,143,248,255,142,247,255,140,245, -255,139,243,255,142,245,255,144,245,255,144,246,255,146, -249,255,151,253,255,154,255,255,152,255,255,151,255,255, -149,255,255,148,255,255,149,255,255,160,255,255,163,255, -253,164,255,250,163,255,247,162,255,245,162,255,243,160, -255,246,152,255,255,148,255,255,147,254,255,146,254,255, -149,254,255,155,254,255,160,255,255,163,255,252,164,255, -247,162,255,248,156,255,254,154,255,255,154,255,255,154, -255,255,152,255,255,149,255,255,150,255,255,148,254,255, -144,252,255,145,250,255,151,251,255,150,252,255,151,253, -255,153,254,255,154,255,254,154,255,250,155,255,245,156, -255,243,158,254,242,158,253,240,160,253,241,161,254,241, -160,254,241,160,254,242,161,255,243,160,255,243,162,255, -243,163,255,242,161,255,239,162,255,238,161,255,237,160, -255,236,162,255,235,162,255,235,162,255,235,162,255,235, -161,255,235,160,255,238,158,255,243,156,255,248,154,255, -250,152,255,251,147,255,251,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,180,182, -174,178,184,152,182,199,126,187,215,118,185,223,136,179, -228,164,170,233,195,163,238,221,155,242,241,153,245,249, -152,248,255,151,250,255,151,251,255,152,251,255,152,252, -255,153,253,255,151,254,255,148,252,255,148,253,255,146, -250,255,143,247,255,140,244,255,136,240,255,128,232,255, -124,226,253,127,227,251,130,226,244,128,222,229,129,219, -218,132,218,203,132,217,194,135,215,187,139,215,181,141, -214,182,139,213,184,138,213,180,138,213,177,137,212,176, -136,211,173,135,209,171,136,205,163,138,204,154,141,204, -149,141,207,150,135,204,161,106,180,208,73,149,186,56, -118,142,59,102,106,75,98,86,81,95,77,83,92,73,83,90,71, -85,88,70,84,85,69,83,82,71,81,80,73,81,81,67,80,82,66, -77,79,64,77,76,67,75,75,68,75,76,64,75,77,63,74,76,62, -72,75,62,72,73,65,73,73,64,74,74,63,73,75,61,73,76,59, -75,76,58,76,76,62,76,78,61,77,79,60,81,80,59,85,81,61, -87,84,62,87,86,62,87,86,62,89,87,62,90,88,65,91,89,68, -91,91,64,94,94,61,95,94,59,97,94,58,101,96,58,102,98, -57,102,98,66,103,98,69,106,97,68,107,99,68,111,103,60, -111,104,65,111,105,63,112,106,61,115,106,74,148,135,78, -183,181,75,201,213,95,195,223,126,178,226,161,161,228, -196,146,229,223,142,232,230,144,236,238,144,239,246,146, -239,253,143,242,255,144,244,255,145,245,255,147,245,255, -148,248,255,145,248,255,143,247,255,141,246,255,141,245, -255,141,244,255,142,245,255,143,247,255,143,248,255,146, -250,255,150,254,255,153,255,255,154,255,255,153,255,255, -152,255,255,150,254,255,156,254,255,162,255,255,165,255, -253,166,255,253,164,255,251,163,255,251,159,255,251,152, -255,255,149,253,255,150,252,255,150,253,255,152,255,255, -154,255,255,161,255,255,164,255,253,164,255,248,161,255, -247,155,255,254,152,255,255,152,255,255,153,255,255,150, -255,255,148,255,255,148,253,255,147,253,255,146,251,255, -146,251,255,152,252,255,154,254,255,155,255,254,157,255, -248,156,255,245,156,255,242,154,255,237,157,255,235,160, -255,235,163,255,235,163,255,235,162,255,235,161,255,235, -160,255,235,158,255,235,157,255,235,156,255,235,158,255, -235,158,255,235,158,255,235,158,255,235,157,255,235,160, -255,235,159,255,235,159,255,236,159,255,238,157,255,241, -155,255,246,153,253,249,148,253,251,145,252,253,139,252, -255,131,245,255,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,184,184, -184,183,183,180,182,183,161,189,189,146,193,199,149,191, -209,163,181,220,178,167,231,196,160,237,210,157,242,229, -153,244,241,151,247,249,152,249,253,150,251,253,150,251, -254,150,253,255,147,251,255,146,251,255,145,250,255,143, -247,255,144,245,255,144,244,255,137,239,255,118,231,255, -121,226,255,123,223,241,123,221,224,127,217,209,131,216, -193,134,214,188,135,213,183,136,213,179,138,211,179,138, -212,183,139,211,181,139,210,179,138,209,176,136,207,173, -136,205,169,139,203,159,142,205,154,139,206,157,123,205, -164,92,196,176,64,140,187,62,105,144,72,93,113,81,93,93, -87,92,83,87,91,76,86,90,74,84,87,71,84,85,68,84,84,68, -83,81,72,75,79,73,79,80,65,81,80,66,76,78,66,74,75,67, -74,75,67,72,76,62,71,77,60,71,77,59,71,73,59,71,72,59, -71,72,59,71,72,58,71,73,57,72,75,55,75,76,56,75,75,61, -75,77,58,77,80,58,79,80,57,81,82,59,82,83,59,84,86,60, -88,85,60,90,85,61,91,87,64,93,89,66,91,89,61,93,90,59, -95,90,59,100,92,61,102,92,62,103,96,61,102,95,67,105, -97,70,106,97,68,107,98,66,110,101,60,110,103,66,111,104, -65,114,107,65,113,106,71,114,109,66,142,133,56,187,172, -77,216,204,111,209,215,138,185,223,173,157,225,209,145, -226,219,144,230,231,144,232,241,144,233,252,143,235,253, -144,240,255,146,241,255,144,243,255,146,245,255,145,247, -255,142,247,255,141,246,255,140,245,255,140,244,255,141, -244,255,142,245,255,144,245,255,146,247,255,150,251,255, -154,253,255,156,254,255,156,255,255,154,255,255,151,254, -255,154,253,254,162,255,255,164,255,255,164,255,255,163, -255,255,162,255,255,159,255,255,151,254,255,148,252,255, -150,251,255,152,252,255,154,253,255,158,255,255,159,255, -254,162,255,253,163,255,248,160,255,247,155,255,254,152, -255,255,152,255,255,151,255,255,150,255,255,150,254,255, -148,252,255,146,254,255,145,251,255,149,251,254,159,251, -251,163,252,250,164,255,250,161,255,245,155,255,241,151, -255,238,148,255,237,148,255,235,149,255,235,149,255,235, -148,255,235,148,255,235,148,255,235,147,255,235,149,255, -235,150,255,235,150,255,235,154,255,235,155,255,235,158, -255,235,158,255,235,158,255,235,158,255,239,156,255,241, -154,255,242,151,255,244,148,254,246,144,251,247,136,245, -247,128,242,246,114,238,247,93,226,250,72,205,243,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,183,183,181,181,184,168,181,191,154,180,202,149, -174,216,138,170,226,149,165,237,172,157,242,199,152,244, -221,152,248,236,150,250,247,150,250,254,149,251,255,147, -251,255,145,250,255,143,248,255,142,245,255,145,246,255, -146,245,255,139,240,255,118,229,255,122,225,255,124,223, -243,123,220,224,128,218,207,131,214,195,135,214,189,138, -215,185,138,215,180,139,214,177,138,214,177,138,211,179, -139,210,180,138,209,177,137,208,170,136,207,159,142,207, -147,142,207,162,133,198,198,97,173,214,49,141,193,48,117, -124,64,103,99,79,98,86,85,95,79,88,91,76,87,92,68,85, -89,66,84,87,67,85,87,69,85,84,70,83,82,73,74,79,68,78, -80,58,80,81,56,76,80,57,74,77,63,73,75,68,69,76,68,70, -75,66,69,75,60,71,74,61,71,73,61,71,72,61,71,72,61,71, -72,60,72,73,62,74,73,67,74,73,71,73,75,68,75,77,67,77, -78,63,79,79,62,81,81,65,84,85,63,89,84,63,94,86,64,95, -88,65,95,90,66,94,90,65,94,89,65,96,88,65,99,90,65, -101,92,64,102,94,56,104,97,60,105,98,58,106,100,56,110, -101,62,112,103,66,112,104,66,113,105,69,115,106,74,117, -107,78,117,108,71,120,106,75,140,121,82,189,172,107,208, -209,106,199,230,111,171,231,167,154,229,197,146,229,221, -142,230,232,143,231,243,142,234,243,142,238,250,142,240, -255,142,244,255,145,247,255,144,249,255,143,249,255,143, -248,255,141,246,255,140,243,255,141,242,255,141,243,255, -145,245,255,147,245,255,149,248,255,153,251,255,156,254, -255,157,255,255,155,255,255,150,254,255,155,254,255,162, -255,255,162,255,255,162,255,255,162,255,255,160,255,255, -157,255,255,150,253,255,147,251,255,150,251,255,154,254, -255,157,255,255,162,255,255,161,255,255,163,255,247,163, -255,241,160,255,238,157,255,245,154,255,252,153,255,254, -151,255,255,152,255,255,153,255,255,150,253,255,147,254, -253,150,255,244,155,255,240,166,255,241,168,255,238,163, -255,236,157,255,235,149,255,235,146,255,235,146,255,235, -146,255,235,147,255,235,146,255,235,146,255,235,146,255, -235,147,255,235,147,255,235,149,255,235,151,255,235,152, -255,235,155,255,235,156,255,235,158,255,238,158,255,242, -157,255,248,154,255,252,151,254,254,148,253,253,145,242, -247,145,234,241,144,217,234,134,205,227,138,194,213,147, -182,201,138,175,187,132,166,174,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,184,184,183,181,184,172,180,186,156,184,193, -158,189,201,168,188,209,184,175,222,203,161,232,222,158, -238,238,154,242,251,149,245,253,148,244,254,146,244,255, -144,243,255,143,242,255,144,245,255,141,243,255,137,239, -255,117,227,255,119,224,254,120,220,240,122,216,220,127, -214,205,133,211,197,136,211,190,138,211,183,140,211,179, -141,211,175,142,212,177,139,213,181,138,211,181,140,207, -176,142,203,168,144,204,158,143,210,151,116,214,165,81, -182,181,57,135,184,64,98,168,80,96,116,84,95,97,87,94, -85,88,92,76,86,89,72,88,91,66,87,90,66,85,87,66,83,85, -68,81,83,70,81,81,72,76,79,69,76,81,58,77,81,55,75,79, -55,74,75,61,75,71,68,71,71,69,71,70,65,71,71,59,70,70, -58,68,70,59,66,71,59,67,71,60,69,72,61,71,73,63,72,72, -67,72,70,70,73,72,67,75,73,65,78,75,62,78,78,63,81,79, -66,83,80,61,88,83,63,91,85,63,93,87,65,92,90,66,90,91, -66,91,92,67,92,91,65,93,92,65,95,94,63,100,97,57,102, -96,60,104,99,59,105,102,57,109,101,62,107,103,65,110, -107,66,115,107,71,116,105,74,119,105,78,119,109,72,120, -108,76,122,108,70,141,126,67,186,168,77,223,204,100,216, -212,158,191,217,191,168,220,215,152,223,228,143,225,238, -139,232,239,140,235,246,140,237,252,139,239,253,143,243, -255,144,244,255,145,246,255,144,247,255,141,245,255,141, -244,255,141,241,255,142,243,255,143,244,255,145,244,255, -147,245,255,150,249,255,156,253,255,157,255,255,155,255, -255,151,254,255,151,255,255,152,255,255,152,255,255,153, -255,255,154,255,255,154,255,255,152,255,255,144,254,255, -145,251,255,149,251,255,153,253,255,160,255,255,165,255, -254,163,255,254,165,255,248,168,255,242,165,255,238,158, -255,244,155,255,252,152,255,254,151,255,255,154,254,255, -158,251,254,162,248,254,161,255,254,158,255,250,152,255, -243,149,255,240,145,255,237,142,255,235,142,255,235,141, -255,235,141,255,235,141,255,235,143,255,235,146,255,235, -147,255,235,148,255,235,149,255,235,152,255,235,152,255, -235,151,255,235,152,255,235,156,255,236,155,255,236,154, -255,236,150,255,239,147,255,243,143,254,247,131,253,253, -124,245,246,120,236,238,123,220,229,141,196,212,157,182, -201,169,176,192,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,184,184,182,182,184,181,183,186,177,182,196, -159,176,217,126,161,235,148,153,238,180,149,245,207,145, -247,225,145,246,240,144,245,250,142,243,254,141,242,255, -141,242,255,139,241,255,136,241,255,118,231,255,120,227, -245,121,223,230,124,218,217,129,217,201,135,213,199,138, -214,186,139,214,175,141,214,169,143,212,180,144,212,188, -139,211,186,136,208,176,139,207,166,144,206,161,149,206, -171,141,196,208,92,174,227,44,139,177,35,121,123,61,108, -97,80,102,79,85,100,77,88,98,73,88,93,70,86,89,71,86, -88,68,86,87,68,85,86,70,82,84,68,81,84,64,81,84,58,77, -81,66,76,80,65,76,77,63,73,75,61,73,73,65,74,70,67,70, -70,66,70,68,69,69,67,68,69,67,68,68,70,62,66,71,59,65, -70,58,67,70,59,69,71,61,70,71,65,72,71,66,72,71,65,75, -73,67,79,75,68,76,75,72,80,79,59,82,80,59,87,82,59,89, -83,61,90,84,62,91,89,67,90,91,65,90,92,64,92,92,63,94, -93,63,96,94,63,98,93,61,103,97,61,105,100,62,104,101, -60,109,101,62,107,103,68,110,106,71,114,106,70,116,106, -71,120,106,78,120,108,83,121,109,76,123,109,71,128,110, -74,146,117,92,189,159,122,209,214,101,195,235,116,174, -239,146,156,236,186,146,232,223,139,231,242,139,234,239, -140,237,244,138,239,249,141,241,255,143,243,255,144,246, -255,144,248,255,142,247,255,142,244,255,143,243,255,143, -243,255,143,243,255,144,243,255,146,243,255,148,247,255, -154,251,255,158,254,255,157,255,255,153,255,255,152,253, -255,151,255,255,150,255,255,152,255,255,152,255,255,153, -255,255,151,254,255,142,251,255,145,251,255,149,251,255, -153,253,255,162,255,255,166,255,254,164,255,254,165,255, -251,168,255,247,165,255,241,159,255,241,156,255,242,154, -255,241,152,255,236,156,255,234,164,255,236,171,255,237, -165,255,235,158,255,235,152,255,235,149,255,235,145,255, -235,142,255,235,142,255,235,141,255,235,141,255,235,141, -255,235,143,255,235,146,255,235,147,255,235,148,255,235, -149,255,235,152,255,235,152,255,235,151,255,240,152,255, -251,156,255,255,152,254,254,149,254,254,145,251,253,139, -239,251,134,229,246,130,215,238,121,202,228,128,188,211, -160,182,185,184,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,181,184,178,182,190,150,195,199, -158,187,205,178,178,214,197,166,226,218,160,230,235,153, -231,245,147,232,251,142,232,254,140,232,255,140,232,253, -142,231,252,128,222,255,124,220,242,126,217,228,127,213, -214,132,213,199,133,210,195,133,208,180,137,210,172,142, -213,169,143,212,178,140,210,184,137,206,180,136,203,171, -139,205,163,138,209,159,124,208,161,73,187,173,60,126, -179,66,98,156,79,93,122,84,93,97,88,95,78,90,93,73,90, -91,68,91,90,67,87,86,69,85,87,66,84,87,67,83,85,67,80, -82,65,77,82,60,76,84,57,75,79,64,74,77,62,74,76,62,71, -75,60,68,74,64,66,72,65,67,69,64,67,69,67,63,67,65,66, -66,65,67,68,59,66,69,58,65,68,57,65,68,57,66,69,59,67, -69,61,69,69,62,69,69,61,71,71,63,73,73,63,72,72,67,76, -75,55,79,78,56,82,80,56,83,81,58,85,83,60,88,84,62,91, -86,61,94,88,61,94,89,60,95,90,60,97,91,61,101,92,61, -103,96,60,107,98,62,108,99,61,106,101,62,107,102,67,105, -104,68,109,106,67,111,107,68,112,107,74,115,106,78,116, -106,72,120,109,70,123,111,73,122,110,77,134,124,77,184, -174,62,232,199,104,231,213,149,201,219,191,171,222,226, -147,226,241,145,226,236,145,231,241,143,234,246,143,238, -254,145,237,255,143,239,255,144,242,255,145,244,255,145, -243,255,143,243,255,139,245,255,141,245,255,141,245,255, -140,245,255,143,248,255,151,251,255,154,254,255,155,255, -255,153,254,255,145,251,255,143,252,255,144,252,255,147, -253,255,149,255,255,149,255,255,148,252,255,148,248,255, -151,251,255,151,251,255,153,255,255,159,255,255,161,255, -254,161,255,253,163,255,249,167,255,244,170,255,240,167, -255,243,158,255,244,153,255,245,150,255,244,148,255,242, -147,255,240,145,255,238,142,255,236,139,255,235,136,255, -235,134,255,235,137,255,235,137,255,235,141,255,235,146, -255,235,148,255,235,153,255,235,155,255,235,157,255,235, -160,255,235,162,255,235,162,255,235,162,255,235,159,255, -235,153,255,237,147,255,245,137,252,250,124,252,252,113, -246,246,127,227,228,133,202,218,129,179,216,148,165,206, -169,174,188,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,182,185,164,182,201,143,177,217,133,165, -231,146,157,238,169,151,237,204,145,236,220,141,236,228, -138,235,233,138,234,234,141,234,236,129,229,240,125,225, -227,126,221,216,127,217,205,133,215,197,134,215,182,136, -214,171,140,213,172,142,213,177,142,212,177,138,211,173, -135,209,161,138,208,159,142,207,176,135,195,206,104,170, -227,34,139,162,42,118,113,64,110,93,79,102,81,83,98,73, -88,94,75,90,93,72,91,92,73,91,90,73,88,88,67,85,87,67, -83,86,66,83,85,67,80,82,68,78,81,71,76,80,74,74,78,68, -76,78,65,75,77,64,73,76,62,68,74,59,66,72,58,67,71,59, -67,69,64,62,66,65,64,65,64,65,66,60,64,66,58,64,66,57, -65,68,55,66,69,54,66,70,54,68,70,54,68,70,51,71,72,55, -72,73,54,73,75,54,76,76,54,77,77,52,81,79,55,83,81,57, -84,83,61,88,84,68,91,85,66,94,88,65,94,89,63,95,91,63, -97,92,63,101,92,65,102,94,65,105,95,64,107,97,64,105, -100,62,106,100,64,106,104,63,109,105,65,110,106,67,112, -108,70,115,109,65,117,109,66,120,110,68,123,112,69,125, -115,70,125,114,71,148,124,93,198,157,116,223,212,123,202, -238,117,176,242,163,151,238,212,148,232,231,146,232,246, -142,233,253,141,235,255,143,236,255,142,239,255,142,241, -255,144,244,255,145,245,255,144,245,255,139,244,255,141, -244,255,142,246,255,141,247,255,144,248,255,151,253,255, -153,255,255,155,255,255,154,255,255,145,251,255,141,250, -255,143,250,255,147,253,255,148,255,255,147,255,252,145, -254,244,147,253,239,152,254,242,153,254,242,155,255,243, -159,255,242,161,255,240,161,255,237,163,255,235,168,255, -235,171,255,236,167,255,235,162,255,235,157,255,235,153, -255,235,149,255,235,148,255,235,145,255,235,142,255,235, -139,255,235,136,255,235,134,255,235,137,255,235,137,255, -235,141,255,235,145,255,235,147,255,235,152,255,235,154, -255,235,157,255,237,160,255,241,161,255,245,162,255,251, -160,255,255,154,252,255,148,245,253,146,233,244,149,213, -224,142,205,218,152,191,201,184,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,175,185, -157,182,194,141,193,201,150,184,215,167,168,222,202,156, -224,217,149,226,225,145,227,230,142,228,232,139,229,232, -128,222,234,126,219,223,127,217,212,128,213,202,129,210, -192,135,210,178,136,211,168,138,213,171,136,212,173,136, -210,171,141,204,168,141,202,158,136,208,158,120,208,167, -87,180,176,58,133,182,66,96,149,78,98,115,88,99,96,90, -95,81,91,94,74,88,93,73,87,91,69,86,90,69,84,87,67,86, -84,63,84,83,64,81,82,64,80,82,65,78,80,67,76,78,70,75, -77,70,74,76,66,70,77,62,70,76,61,70,74,60,67,73,60,65, -72,59,64,71,58,63,68,62,62,64,62,62,64,61,64,64,57,63, -64,56,63,64,55,64,66,53,64,66,51,65,67,51,65,67,52,67, -68,51,68,70,53,68,71,51,70,73,52,71,74,51,72,78,51,74, -79,52,77,79,53,82,80,58,85,81,66,87,83,64,91,87,62,94, -89,61,94,88,60,96,90,62,96,92,63,99,94,63,103,95,63, -104,98,61,105,99,60,105,98,62,108,99,60,111,102,63,109, -104,65,109,104,66,110,109,63,114,110,65,117,110,66,121, -112,66,125,115,67,128,115,69,130,113,77,143,132,74,205, -180,91,239,206,110,227,218,167,186,227,219,165,230,236, -151,232,248,142,232,253,139,233,255,140,237,255,138,239, -255,138,240,255,139,242,255,142,243,255,144,244,255,144, -243,255,142,243,255,142,245,255,141,246,255,144,247,255, -151,252,255,154,255,255,155,255,255,154,255,255,145,251, -255,151,242,255,154,241,255,156,244,255,156,249,255,154, -252,254,151,252,252,147,253,249,145,255,249,147,255,249, -149,255,248,153,255,246,151,255,245,147,255,240,144,255, -238,141,255,237,137,255,236,139,255,235,136,255,235,135, -255,235,135,255,235,136,255,235,137,255,235,140,255,235, -139,255,235,141,255,235,144,255,235,148,255,235,153,255, -235,154,255,235,157,255,235,159,255,235,161,255,235,160, -255,235,157,255,235,153,255,236,148,255,238,141,254,240, -128,254,244,113,252,249,121,238,240,150,201,212,184,185, -186,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,184,190,143,181,220,108,167, -237,118,156,238,150,150,237,177,145,235,195,142,234,208, -141,232,220,132,226,228,129,223,216,130,220,206,131,216, -195,131,214,184,137,214,174,139,213,175,139,214,179,136, -213,172,135,212,160,141,209,149,146,206,168,139,201,204, -101,173,214,54,138,184,36,119,127,66,110,90,78,105,82, -87,101,75,91,98,70,91,95,69,86,94,65,87,93,60,86,91, -61,84,87,61,86,85,64,84,83,69,82,82,71,81,82,69,78,80, -65,76,79,62,75,79,60,74,79,58,69,77,60,69,75,62,68,74, -62,66,72,64,64,70,65,63,68,63,62,68,59,64,67,55,63,66, -57,64,65,55,64,65,55,65,66,57,66,67,58,65,67,57,66,67, -57,65,67,53,67,69,51,69,70,54,68,71,56,70,71,58,71,73, -59,72,76,56,74,77,58,76,77,58,81,79,59,84,82,61,86,83, -62,90,85,61,93,89,59,95,91,57,98,94,56,96,95,57,99,97, -57,103,97,58,104,98,57,104,100,56,106,99,63,110,101,64, -113,105,67,112,106,68,111,105,69,110,107,73,113,109,68, -118,111,67,122,112,70,125,113,72,128,115,72,130,116,68, -129,117,71,169,136,95,219,181,117,222,231,83,188,245,152, -170,245,194,155,243,221,145,240,237,141,238,252,141,237, -255,138,239,255,137,239,255,139,241,255,142,243,255,144, -244,255,145,245,255,143,246,255,142,248,255,141,248,255, -143,248,255,151,252,255,154,255,255,157,255,255,155,255, -253,144,255,242,156,255,235,162,255,233,165,255,234,168, -255,236,164,255,235,159,255,235,155,255,235,152,255,235, -154,255,235,155,255,235,155,255,235,152,255,235,148,255, -235,144,255,235,141,255,235,137,255,235,139,255,235,137, -255,235,135,255,235,135,255,235,135,255,235,137,255,235, -139,255,235,138,255,235,140,255,235,142,255,235,146,255, -235,152,255,235,154,255,235,156,255,236,158,255,238,160, -255,243,159,255,252,156,254,255,151,250,254,139,244,253, -130,237,252,112,221,246,123,194,215,183,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,174, -190,115,196,202,126,197,211,147,183,215,174,171,219,194, -160,222,207,152,222,218,140,216,224,133,215,213,131,213, -203,131,210,192,136,208,182,139,210,171,139,212,173,140, -208,174,139,203,166,142,202,157,140,209,150,123,214,164, -101,194,183,63,132,172,62,101,162,78,95,127,87,101,91, -89,97,81,91,95,73,90,95,67,89,93,66,88,92,63,85,91,57, -86,89,58,86,87,60,82,86,63,81,82,67,79,80,68,77,79,66, -76,77,62,76,77,59,77,78,59,73,78,56,70,74,57,69,73,58, -68,72,60,67,70,62,63,69,63,62,67,61,64,67,58,63,68,55, -60,67,56,62,65,55,61,66,55,60,67,56,60,67,56,60,67,55, -60,68,55,60,69,52,62,70,49,64,71,52,63,70,54,66,71,55, -66,72,56,67,75,53,70,78,56,71,78,56,73,79,56,78,80,59, -79,82,59,82,84,58,87,89,57,90,91,55,93,94,54,93,97,56, -95,97,56,98,96,55,99,97,53,104,98,54,105,100,63,107, -102,63,111,103,65,112,103,66,112,103,67,114,101,70,115, -104,65,119,109,65,120,110,66,123,110,68,127,110,68,128, -114,65,130,114,69,133,118,70,169,151,78,234,197,65,234, -219,153,203,231,198,180,236,226,162,237,241,150,236,254, -141,236,255,138,237,255,139,239,255,139,240,255,140,243, -255,140,244,255,140,244,255,143,246,255,143,247,255,143, -247,255,143,246,255,151,251,254,156,255,255,158,255,255, -158,255,254,165,255,250,165,255,245,160,255,241,154,255, -239,148,255,236,143,255,235,139,255,235,135,255,235,138, -255,235,142,255,235,145,255,235,145,255,235,140,255,235, -136,255,235,135,255,235,134,255,235,134,255,235,136,255, -235,136,255,235,138,255,235,141,255,235,144,255,235,149, -255,235,155,255,235,157,255,235,160,255,235,161,255,235, -161,255,235,163,255,235,159,255,235,153,254,236,146,254, -237,140,253,238,124,254,248,123,249,250,118,236,251,126, -196,232,149,176,204,168,179,189,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,184,184,185,179,185,193,152,179,223,107,169, -234,114,159,235,135,153,233,164,142,227,189,134,222,191, -132,217,188,132,214,181,138,213,173,141,213,169,140,213, -168,139,211,161,141,209,152,145,209,148,145,206,192,111, -188,217,69,152,190,44,118,134,58,111,101,82,107,87,86, -100,84,88,97,74,91,96,70,89,94,66,88,93,62,87,92,62, -85,89,67,85,87,66,86,85,66,82,84,68,79,80,67,77,79,67, -76,78,67,77,78,66,76,76,63,76,77,60,72,76,59,70,74,59, -68,72,58,67,71,57,66,70,57,62,69,55,62,69,51,64,69,50, -62,69,51,58,67,53,62,65,58,61,66,53,59,67,50,59,67,50, -58,65,54,59,66,59,58,67,58,60,66,54,62,68,54,62,69,52, -64,68,52,64,72,50,65,74,51,67,76,51,68,76,52,70,78,54, -75,78,55,78,82,54,81,84,54,85,86,55,89,90,54,90,92,53, -90,94,55,94,96,54,97,96,52,100,98,53,104,99,57,104,101, -56,104,100,59,109,102,60,111,103,59,112,103,61,114,102, -65,114,103,64,116,104,65,118,107,66,122,108,67,126,109, -68,124,110,68,129,113,72,130,114,70,146,121,82,206,147, -131,222,221,77,201,242,139,182,246,185,167,247,219,155, -245,238,145,245,252,141,242,255,140,242,255,139,241,255, -139,243,255,140,244,255,141,245,255,142,247,255,143,248, -255,143,248,255,143,248,255,150,250,255,155,255,254,158, -255,255,160,255,253,169,255,248,165,255,242,160,255,238, -154,255,236,148,255,235,143,255,235,139,255,235,135,255, -235,138,255,235,142,255,235,145,255,235,145,255,235,139, -255,235,135,255,235,135,255,235,134,255,235,134,255,235, -135,255,235,135,255,235,137,255,236,140,255,236,143,255, -237,148,255,237,154,255,237,157,255,237,159,255,238,162, -255,239,162,255,241,163,254,254,160,251,252,153,248,251, -147,243,247,135,230,242,111,215,234,110,189,217,144,180, -187,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,184,185,182,178,189, -148,184,200,123,195,206,132,197,203,164,177,202,188,158, -203,189,148,204,186,144,203,180,144,205,171,141,208,167, -140,207,166,138,206,158,138,205,151,141,210,149,107,211, -179,80,161,188,61,110,162,67,99,132,77,101,102,86,103, -85,86,96,81,91,94,73,93,93,69,92,92,64,91,92,61,86,89, -61,83,87,64,81,86,63,80,85,62,81,79,64,78,78,64,76,78, -66,75,77,66,74,76,64,73,75,61,72,76,57,69,77,57,69,73, -58,68,72,58,64,70,56,64,70,56,66,68,55,65,68,51,65,68, -49,64,69,50,62,66,52,60,64,56,59,65,52,60,67,50,60,67, -51,58,65,53,57,64,57,57,64,56,61,67,55,63,67,53,64,68, -51,66,67,51,66,69,48,66,71,49,69,73,49,70,72,49,72,73, -50,79,75,53,78,77,51,80,81,51,83,84,51,88,86,49,93,88, -48,93,88,51,95,93,51,99,96,50,100,97,51,102,98,54,108, -100,55,105,100,58,105,101,57,107,103,56,108,104,59,107, -102,62,112,102,61,116,104,63,119,106,65,122,108,66,123, -108,67,123,108,68,125,111,71,130,115,71,132,114,74,139, -125,95,212,189,52,234,213,133,218,225,185,188,235,219, -168,240,239,155,242,253,148,241,255,143,241,255,139,240, -255,137,241,255,137,243,255,138,246,255,139,246,255,141, -247,255,142,248,255,141,249,255,144,251,254,150,255,252, -154,255,254,157,255,251,167,255,246,164,255,241,157,255, -238,150,255,236,144,255,235,141,255,235,141,255,235,143, -255,235,148,255,235,152,255,235,152,255,235,151,255,235, -148,255,235,145,255,235,146,255,235,149,255,235,152,255, -235,156,255,235,158,255,235,158,255,235,156,255,235,155, -255,235,156,255,236,157,255,236,157,255,236,155,255,236, -150,253,236,143,251,234,136,247,241,138,238,239,141,220, -231,131,191,225,141,171,203,165,171,187,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,184, -185,184,173,178,156,174,180,126,186,198,123,175,215,99, -159,221,94,149,219,107,146,215,125,146,214,135,142,213, -142,140,211,146,140,210,147,142,207,163,140,198,202,80, -170,223,49,130,163,54,112,116,70,110,96,79,106,85,84, -101,81,84,96,72,89,93,68,92,91,70,89,88,70,88,86,74, -85,87,63,82,87,57,80,86,60,76,81,58,79,79,54,77,77,61, -75,77,63,75,77,63,75,77,62,74,77,60,72,76,60,67,73,63, -69,73,58,68,73,53,64,72,51,63,69,57,67,69,55,66,68,57, -66,68,57,64,68,54,62,67,48,60,65,56,59,65,56,59,65,53, -59,66,51,57,66,49,57,66,50,57,66,49,58,65,49,62,66,52, -63,65,52,65,66,52,65,67,53,64,69,48,66,70,46,68,70,47, -72,72,48,77,73,51,77,76,53,79,79,53,82,82,54,86,82,56, -90,83,60,92,85,59,93,88,56,97,93,61,98,93,61,101,95, -56,105,95,62,104,98,64,106,100,66,107,101,67,107,101,69, -107,101,66,111,100,62,115,103,61,119,106,62,122,108,64, -124,110,66,125,110,68,127,114,69,131,116,72,133,116,72, -129,119,67,175,131,118,212,194,91,215,234,122,188,244, -166,169,247,203,158,249,234,151,248,246,146,246,252,142, -245,254,139,244,255,138,244,255,137,244,255,139,246,255, -142,247,255,142,247,255,141,247,255,145,250,255,150,255, -255,153,255,255,157,255,255,169,255,249,164,255,243,157, -255,240,150,255,238,144,255,236,141,255,235,141,255,235, -143,255,235,148,255,235,152,255,235,152,255,235,151,255, -235,147,255,235,144,255,235,145,255,237,148,255,242,152, -255,252,155,255,254,157,255,254,157,255,254,152,255,254, -151,255,254,152,255,254,154,254,253,154,253,253,147,249, -250,143,241,246,134,225,240,132,201,228,135,184,200,159, -180,183,178,183,183,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,184,184,183,173,178,165,153,173,119,161,190, -87,181,197,90,177,199,102,165,201,120,158,204,130,147, -208,139,144,206,143,143,208,147,134,209,166,93,196,197, -60,129,188,58,103,143,74,103,112,84,102,93,88,99,82,92, -97,79,91,95,72,89,91,67,88,90,68,84,88,68,82,85,72,81, -84,61,80,85,57,79,84,60,76,81,60,77,81,57,78,77,62,76, -76,62,75,76,62,75,77,62,75,75,60,76,75,62,68,74,63,67, -73,58,67,74,55,66,74,54,62,72,58,65,72,56,63,73,60,63, -72,60,62,71,57,61,71,51,60,69,59,60,68,58,60,67,55,60, -68,52,60,69,52,60,69,52,59,68,52,58,68,52,57,69,52,57, -69,51,58,69,51,60,68,52,59,69,46,61,73,46,62,74,47,65, -74,48,68,77,50,70,78,51,72,78,52,77,80,53,80,82,55,81, -83,60,81,87,57,84,90,54,89,92,57,92,91,58,98,93,55, -103,94,62,103,95,62,103,98,64,102,98,65,100,97,67,105, -97,63,110,98,61,114,101,61,118,105,63,121,107,65,125, -107,68,124,108,69,127,109,67,128,111,70,128,114,71,130, -119,69,131,115,96,176,161,57,223,209,103,224,224,157,194, -235,201,171,240,232,161,243,245,154,244,252,147,244,254, -143,244,255,141,244,255,140,243,255,139,244,255,140,245, -255,141,246,255,141,245,255,145,248,255,151,254,255,154, -255,255,157,255,254,166,255,248,168,255,244,165,255,240, -162,255,238,158,255,236,155,255,235,155,255,235,157,255, -235,159,255,235,161,255,235,160,255,235,160,255,235,157, -255,235,154,255,235,151,255,238,150,255,242,148,255,249, -146,255,254,146,254,254,143,253,253,141,252,252,138,252, -252,139,248,250,140,238,249,137,224,243,145,198,217,155, -182,195,158,173,192,172,176,184,184,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,177,181,173,145,165,111,169, -178,84,180,198,93,170,203,106,161,207,118,147,208,134, -148,209,139,144,208,165,121,196,193,54,158,199,49,116, -128,67,109,98,80,108,85,87,105,79,90,101,74,91,98,72, -90,95,71,89,92,66,87,90,66,83,89,64,80,86,64,79,84,63, -78,81,65,78,82,67,76,81,65,76,78,65,78,77,63,75,75,59, -73,73,56,74,74,56,76,74,57,78,75,57,70,76,53,69,76,51, -68,77,54,67,76,55,63,75,58,67,75,62,64,75,62,63,75,60, -63,74,54,64,75,56,63,73,58,64,72,57,64,72,55,65,73,53, -64,73,53,64,72,56,63,71,61,60,70,64,60,71,64,60,71,58, -60,72,53,63,72,50,61,72,46,62,74,46,63,75,46,66,75,50, -67,77,51,67,77,54,70,77,54,76,80,54,78,81,53,80,82,57, -80,84,60,82,87,59,88,89,58,91,90,57,94,89,60,100,91, -57,101,94,55,101,97,60,100,97,63,99,93,71,104,94,63, -109,96,58,113,100,58,118,105,61,120,107,63,124,109,66, -124,110,65,126,110,64,129,113,70,129,116,72,130,118,69, -128,117,72,144,126,68,193,172,76,227,221,103,202,241,156, -175,243,209,164,245,228,158,247,241,152,246,250,146,245, -254,142,244,255,143,244,255,141,245,255,141,245,255,142, -246,255,142,246,255,145,247,255,151,254,255,154,255,255, -155,255,255,167,255,249,167,255,245,166,255,241,164,255, -238,161,255,237,159,255,237,158,255,239,160,255,240,163, -255,238,164,255,236,162,255,236,162,255,239,158,255,249, -152,255,249,148,255,252,145,255,255,143,255,255,142,253, -254,139,250,252,136,242,247,126,233,243,117,220,238,128, -198,218,151,182,193,160,178,184,184,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,169,176,159,161,173,110, -176,192,94,172,201,100,160,205,118,152,205,133,150,208, -142,131,207,179,89,175,192,47,125,163,64,105,111,80,105, -90,87,105,81,88,102,75,89,99,72,90,97,70,86,92,72,86, -90,65,86,90,66,82,88,64,79,85,64,75,84,63,73,81,68,74, -81,69,73,81,67,73,78,67,74,76,62,73,75,60,73,74,57,74, -74,55,74,75,55,73,78,55,73,79,53,71,80,54,68,80,57,67, -79,58,64,78,58,68,76,63,65,75,64,65,75,61,67,76,57,68, -74,56,71,73,58,69,72,57,67,73,56,66,75,55,66,75,55,66, -74,57,61,72,59,59,69,61,63,71,63,64,71,60,66,72,55,68, -74,50,65,75,49,67,76,49,67,78,49,68,78,52,66,79,50,66, -78,53,68,78,52,71,80,51,73,80,51,77,82,57,80,82,60,81, -83,61,87,86,61,87,87,60,88,86,63,94,91,51,98,94,52, -100,95,56,100,94,57,97,90,63,100,92,54,104,96,51,109, -100,54,113,103,56,116,104,57,120,109,60,123,111,61,124, -109,61,129,113,68,129,113,68,132,115,66,128,115,68,128, -115,72,157,141,55,214,199,79,230,225,132,193,234,197,174, -238,221,166,241,237,158,243,249,151,243,254,147,242,255, -146,243,255,143,242,255,143,244,255,143,245,255,142,245, -255,143,246,255,151,254,255,154,255,255,154,255,254,166, -255,248,166,255,244,165,255,239,165,255,238,163,255,237, -161,255,239,161,255,242,160,255,242,161,255,240,162,255, -239,159,255,241,156,255,245,148,255,255,143,255,255,139, -254,255,134,251,254,131,243,252,130,225,247,131,202,221, -149,187,201,152,177,190,162,175,184,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,170,178,148,172,190,101,175, -200,100,162,204,123,156,204,134,148,207,155,115,196,195, -58,146,182,57,112,132,77,105,101,87,104,86,92,103,79,92, -100,73,91,96,70,89,93,71,84,88,72,87,87,69,85,86,68, -81,84,68,79,83,69,77,82,71,74,80,69,74,79,69,76,80,70, -74,76,68,76,77,62,75,78,58,75,78,55,76,79,54,74,79,55, -71,79,60,71,79,59,70,80,60,67,79,61,68,80,63,70,80,60, -69,77,65,67,76,67,68,75,67,70,75,64,72,75,60,75,75,62, -74,74,59,73,75,58,72,76,58,71,76,58,71,75,60,66,73,59, -67,71,57,69,73,60,70,73,61,73,72,60,70,73,55,69,76,54, -70,78,54,71,78,54,72,79,56,70,82,53,69,81,54,70,80,54, -71,80,54,73,81,54,75,81,55,78,81,57,80,82,60,82,84,62, -83,84,61,87,84,60,94,89,51,94,93,54,96,93,56,98,93,58, -95,90,60,98,92,55,101,95,55,103,97,57,108,100,60,112, -103,64,117,106,67,121,108,67,124,110,66,127,110,70,129, -110,71,131,113,70,130,116,72,130,118,73,135,123,62,176, -159,71,238,202,93,208,234,166,183,237,203,170,239,226, -163,242,240,157,243,248,151,242,253,146,243,255,144,245, -255,144,244,255,144,245,255,144,244,255,143,246,255,152, -252,255,155,254,255,157,255,255,170,255,253,170,255,245, -167,255,240,165,255,239,163,255,241,160,255,244,160,255, -249,161,255,249,159,255,247,156,255,247,152,255,250,144, -252,253,134,248,251,120,246,251,103,243,252,81,227,250, -90,190,215,133,169,189,184,184,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,172,177,152,173,188,98,177,199,97,162,205,113, -158,209,120,141,203,170,100,177,190,49,127,155,63,112, -114,82,107,93,89,104,85,92,101,78,92,97,72,91,95,71,89, -91,73,84,87,66,84,85,69,82,82,69,79,82,66,79,82,64,79, -81,70,78,81,62,77,80,61,76,78,60,77,76,62,77,78,59,76, -79,54,76,80,51,78,83,55,75,80,60,71,78,68,72,78,64,73, -80,59,71,80,58,69,80,56,72,79,56,68,78,60,69,77,56,71, -77,57,74,77,57,76,77,55,77,78,56,77,78,52,79,80,52,79, -81,53,78,81,53,77,79,54,75,77,56,77,77,55,74,75,59,72, -74,62,76,74,64,75,76,65,74,78,62,75,78,61,75,78,57,74, -78,57,74,82,53,73,84,52,72,83,52,72,82,51,74,82,49,76, -82,47,75,80,56,77,82,61,80,83,60,82,84,56,88,86,56,92, -88,57,91,91,58,92,91,59,95,92,63,95,91,69,97,92,61,97, -94,59,99,96,60,102,98,61,107,101,64,113,103,68,119,105, -70,121,108,70,125,111,69,127,112,67,129,114,67,129,115, -73,131,116,73,131,116,74,149,130,64,211,178,50,219,231, -114,196,238,166,175,238,203,166,241,228,160,243,244,154, -244,254,146,245,255,143,245,255,143,244,255,142,243,255, -142,243,255,143,245,255,151,252,255,155,254,255,158,255, -255,170,255,254,168,255,246,166,255,244,165,255,245,162, -255,248,160,255,251,160,254,253,158,253,252,152,252,252, -146,251,252,136,243,248,129,227,246,119,201,238,90,186, -229,123,175,196,140,168,175,183,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,184,185,184,167,172,142,177,184, -96,179,196,94,164,201,105,160,205,117,117,198,174,80,156, -171,60,113,137,75,106,108,86,103,90,91,101,83,91,98,76, -91,98,72,89,95,70,85,90,70,85,89,64,78,86,67,76,85,68, -74,82,64,77,79,58,78,79,65,75,80,59,74,81,58,74,81,57, -75,79,58,74,81,58,75,83,55,76,85,55,77,86,59,72,82,62, -68,79,67,73,76,62,78,77,59,78,78,58,76,78,55,78,77,56, -73,75,58,79,74,51,84,75,53,83,77,54,82,80,55,81,81,55, -79,82,53,79,84,54,81,86,55,83,87,55,83,87,57,81,86,59, -80,84,57,80,80,61,78,76,63,78,76,63,77,75,67,76,78,64, -77,79,63,78,79,60,76,80,61,78,83,53,78,84,52,78,84,52, -76,83,52,76,83,51,78,83,53,75,81,58,72,80,59,77,82,59, -80,83,55,82,84,57,82,88,57,87,89,56,90,89,57,90,89,59, -90,88,65,96,90,58,98,93,58,99,95,59,99,97,60,102,97, -61,109,100,64,116,102,67,119,106,71,120,111,67,121,113, -63,126,112,64,126,113,70,126,114,68,127,117,69,130,122, -54,157,150,36,231,200,86,222,224,149,196,231,192,175,235, -220,165,239,241,157,240,252,147,242,255,145,242,255,146, -243,255,142,243,255,138,243,255,138,244,255,145,251,255, -150,253,255,155,255,255,163,255,254,161,255,247,159,255, -246,157,255,248,155,254,249,153,252,250,151,250,250,143, -245,247,120,239,242,105,227,234,96,204,227,148,176,198, -167,171,190,168,174,184,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -171,174,154,177,185,107,181,197,89,168,201,107,160,202, -134,104,180,200,65,139,168,62,116,119,76,108,99,87,103, -85,91,101,76,92,99,74,91,96,75,88,92,74,85,89,70,85, -89,63,78,88,64,75,85,62,74,84,60,79,82,60,82,84,63,79, -84,62,76,84,63,74,82,58,77,82,50,78,86,57,78,86,61,79, -87,66,77,85,68,73,83,67,69,79,63,74,76,65,80,79,61,84, -83,60,83,82,58,83,81,57,78,80,55,87,80,51,94,85,50,93, -87,50,90,88,58,89,88,60,86,88,64,83,87,60,85,89,55,87, -90,54,87,90,60,84,88,65,83,86,59,86,85,61,86,83,63,85, -82,64,82,81,62,79,82,61,82,83,60,83,86,59,78,83,62,80, -85,52,83,88,52,84,89,55,81,86,59,80,84,63,82,85,64,81, -87,55,77,88,47,77,84,52,78,82,61,82,84,62,81,87,61,86, -86,64,91,89,65,92,91,62,90,88,64,95,90,59,100,94,59, -102,97,62,99,95,60,98,93,59,106,96,62,115,101,64,117, -104,71,117,106,75,118,107,76,125,109,75,125,112,76,127, -116,67,126,119,67,126,118,68,136,121,79,205,175,47,220, -223,105,202,239,158,179,239,195,167,241,224,160,244,239, -150,245,250,148,244,255,148,245,255,144,245,255,139,243, -255,139,243,255,144,251,255,150,254,251,156,255,247,163, -255,247,161,255,250,158,254,252,156,252,252,153,247,247, -155,238,242,154,225,236,139,207,226,134,186,208,148,175, -194,177,182,184,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,173,178,163,173,184,110,183, -192,91,171,197,109,143,201,128,93,161,184,66,120,156,73, -107,117,81,102,97,91,98,83,91,98,75,88,99,73,83,94,72, -82,90,71,83,88,69,80,89,62,75,83,60,77,82,60,77,82,59, -77,82,60,80,82,61,78,83,61,80,81,63,82,79,60,85,86,55, -88,86,61,84,86,64,82,86,68,80,84,69,79,81,67,82,78,66, -81,77,67,86,79,63,91,80,60,94,79,58,95,79,59,96,81,60, -100,83,57,104,85,54,106,87,54,103,87,62,103,87,64,101, -85,67,99,81,61,101,84,56,102,87,56,102,86,62,101,85,69, -97,86,64,93,85,64,90,83,64,89,82,64,92,79,63,92,79,63, -90,82,61,90,84,60,90,83,65,88,88,57,87,90,54,85,90,56, -80,86,58,77,85,62,77,86,62,81,88,55,82,90,49,79,87,54, -79,82,61,79,83,60,80,83,58,83,86,64,86,87,62,89,88,60, -90,85,63,94,89,59,97,93,57,101,95,60,99,94,59,99,93, -59,102,96,61,109,100,62,112,101,69,113,102,72,117,104, -74,124,106,73,126,107,74,130,113,67,132,116,67,130,116, -69,131,118,76,159,154,18,212,201,88,224,225,155,200,229, -195,177,233,221,165,240,238,156,242,250,148,240,255,147, -242,255,145,241,255,142,240,255,137,241,255,143,247,255, -151,251,249,159,255,246,160,255,246,151,252,246,142,248, -246,132,240,239,123,231,231,120,219,223,150,188,202,176, -181,190,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -175,176,168,171,181,119,183,195,85,173,202,93,137,189, -154,81,155,151,61,123,121,72,111,96,82,106,85,91,99,81, -90,97,81,84,94,78,81,91,75,81,89,72,82,87,72,78,84,75, -77,84,68,78,84,63,78,84,58,78,85,53,82,85,56,81,89,52, -83,88,47,89,91,49,89,92,57,90,91,56,87,92,56,84,92,55, -80,89,52,82,88,53,86,86,55,84,84,54,88,83,56,92,83,53, -97,86,50,101,88,51,101,90,48,105,91,50,108,92,51,107, -90,51,105,91,55,107,93,63,106,93,64,106,91,65,107,90, -66,106,92,62,105,93,57,106,92,64,102,94,65,98,91,64,94, -89,61,93,89,51,98,90,49,98,88,61,94,87,68,91,85,69,92, -87,67,91,91,61,88,91,58,86,90,61,81,86,63,80,88,67,80, -88,66,83,89,63,84,91,58,86,94,60,83,90,56,82,87,55,82, -85,65,85,89,61,89,89,61,90,89,61,93,89,62,96,92,63,97, -92,63,99,94,64,102,95,66,101,94,64,103,96,65,109,98,64, -112,100,67,112,102,66,116,105,65,124,108,63,125,109,62, -127,108,73,129,111,78,130,114,77,131,117,73,143,121,73, -189,177,68,216,227,105,201,241,149,176,240,192,163,241, -228,155,242,245,149,241,255,147,243,255,145,243,255,142, -243,255,136,241,255,140,243,255,150,244,254,158,246,252, -157,240,248,151,229,242,147,216,231,148,201,213,154,184, -200,173,182,188,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,178,181,175,173,176,120, -192,186,90,183,192,96,124,183,144,87,138,142,76,112,119, -82,105,96,88,101,85,90,100,79,87,96,77,84,92,75,82,89, -73,82,87,70,81,86,70,75,82,72,77,84,68,78,84,63,80,84, -59,81,86,55,87,85,58,89,87,53,90,92,51,93,95,52,94,94, -58,95,94,58,93,91,57,92,88,56,91,88,56,92,88,57,91,87, -58,92,85,58,97,83,61,100,84,58,106,87,55,113,88,56,114, -92,53,116,93,57,114,94,57,112,95,58,113,95,62,114,95, -67,111,95,68,108,95,69,106,94,68,107,94,64,111,96,62, -108,94,67,107,92,66,104,89,66,103,87,65,109,87,58,114, -91,57,112,92,69,108,89,74,102,87,74,99,87,71,99,86,63, -100,88,61,98,87,65,89,82,65,85,83,67,85,85,66,91,86, -64,98,88,61,100,90,62,95,91,59,92,89,59,87,85,65,87, -87,60,89,89,60,90,89,60,91,88,60,87,91,60,90,93,62,94, -95,63,96,94,62,98,94,62,99,95,62,102,98,60,105,101,64, -109,100,64,115,102,63,119,108,60,119,112,60,123,110,71, -124,110,74,127,112,73,130,115,70,131,121,68,176,146,43, -227,199,90,232,227,151,199,228,193,174,232,227,161,237, -244,151,240,254,145,240,255,143,241,255,140,243,255,131, -239,255,128,243,252,122,244,245,115,240,240,119,229,232, -126,191,222,154,173,199,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,182,183,181,171,174,128,191,186,94, -183,192,96,116,167,168,82,133,129,74,114,101,82,107,83, -88,103,74,88,99,71,85,96,65,83,94,61,83,92,61,82,90, -63,81,87,65,76,86,66,78,87,59,79,86,58,82,88,56,84,90, -50,89,92,44,92,92,51,93,94,57,94,94,58,95,95,57,97,95, -63,96,94,58,95,94,54,94,92,51,95,93,54,95,93,60,97,91, -61,103,92,60,108,94,61,111,92,58,116,93,60,117,94,63, -119,96,69,118,98,71,115,97,70,115,95,73,117,97,79,115, -98,81,112,98,80,109,96,75,112,98,72,114,98,71,109,95, -73,110,95,72,107,93,67,107,92,64,114,92,64,119,95,67, -116,99,64,112,97,66,106,94,67,102,92,64,104,93,65,105, -93,66,102,93,67,95,90,65,90,90,64,88,90,63,94,91,59, -101,94,56,104,98,58,98,95,56,95,93,62,92,93,60,91,92, -59,91,92,59,91,91,57,93,92,55,87,91,57,87,91,59,91,92, -60,95,94,58,98,95,59,100,95,64,101,96,68,103,98,66,109, -100,67,116,103,68,119,107,68,119,111,61,125,115,60,127, -116,61,128,116,60,131,117,56,132,122,65,164,126,60,209, -177,80,230,232,110,202,241,140,176,241,195,162,242,225, -151,243,240,145,242,251,144,243,255,141,242,254,136,235, -250,133,217,241,119,203,232,135,185,203,162,179,186,173, -180,181,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,184,185,184,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,183,183,182,168,172,127,186,183,91,177, -188,91,95,163,155,75,125,121,76,110,99,82,106,82,86,103, -73,88,98,69,86,94,63,85,93,61,83,92,62,80,88,62,79,86, -65,75,84,66,79,86,60,83,86,58,86,86,56,91,89,52,93,96, -47,93,96,53,95,94,57,97,92,58,104,95,60,105,93,64,102, -91,58,102,92,55,102,92,55,104,94,59,103,93,63,105,92, -65,107,94,64,113,95,63,116,95,62,117,96,62,124,93,64, -121,95,68,121,96,71,119,98,74,116,97,75,117,98,78,117, -97,81,117,96,81,117,96,79,118,97,75,119,97,73,118,93, -75,119,94,74,118,92,71,120,93,70,123,94,69,123,96,68, -122,99,66,121,99,70,115,97,72,115,96,72,116,96,72,110, -98,71,106,98,72,102,96,72,102,94,73,101,92,71,99,94,64, -99,96,57,104,99,59,101,97,59,96,96,65,91,98,64,91,96, -62,91,95,62,89,95,60,92,95,57,89,93,59,88,91,61,88,90, -58,92,93,56,97,94,58,101,94,64,101,95,68,103,96,66,109, -99,67,112,101,66,114,105,66,119,108,61,125,114,61,129, -115,62,130,116,61,131,119,57,131,120,64,139,128,50,177, -155,54,238,210,101,232,224,143,195,230,196,168,237,224, -155,239,239,147,239,249,145,239,252,144,235,250,135,223, -240,111,190,220,142,170,194,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,184,185,183,164,168,129,183,175,110,174, -183,98,86,150,165,70,120,118,76,110,98,81,105,84,84,102, -74,86,97,67,86,95,64,85,93,63,83,92,61,82,91,59,82,91, -59,76,88,56,79,88,55,84,90,53,89,93,51,95,96,52,94,98, -56,93,98,54,95,96,56,98,95,55,105,96,56,107,97,59,104, -96,53,104,96,51,105,97,51,106,100,50,107,102,50,110,101, -57,109,98,59,114,97,64,120,97,69,120,98,72,128,98,61, -126,102,71,127,102,78,125,103,82,120,100,84,120,101,80, -118,99,78,118,98,77,120,100,78,121,100,78,121,99,76,121, -99,72,123,101,69,123,99,70,125,100,71,128,102,66,125, -100,67,124,101,72,123,101,75,119,102,73,121,105,71,123, -105,67,118,108,68,111,106,69,105,101,69,106,101,72,106, -100,72,102,97,76,103,99,70,103,97,71,103,98,74,99,100, -66,93,98,69,93,100,64,94,100,65,92,98,66,94,96,67,92, -95,68,90,93,62,89,92,60,90,91,59,96,93,59,101,95,61, -100,96,63,101,94,65,108,98,66,111,101,63,112,104,64,118, -107,63,124,113,63,129,115,62,129,116,61,130,116,64,131, -119,68,135,121,64,162,140,52,223,199,80,231,232,115,196, -239,167,168,238,220,156,241,236,147,240,245,146,238,249, -149,231,240,146,201,221,180,184,186,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,182,185,182,183,185,183, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,177,181, -165,166,179,99,169,180,88,75,145,158,68,117,116,77,109, -97,81,103,83,84,99,71,84,98,66,83,96,63,83,93,60,83, -91,59,84,89,58,85,88,58,85,87,58,85,87,58,87,90,55,89, -95,52,92,98,51,91,98,53,94,97,52,98,95,56,101,93,55, -107,94,56,111,96,61,115,97,58,118,98,57,117,97,55,119, -99,55,120,101,54,119,100,60,118,99,62,115,98,64,115,98, -67,120,96,69,129,100,61,126,103,71,123,102,76,122,101, -79,121,98,82,120,98,76,120,97,77,121,95,76,125,95,75, -126,93,74,127,95,76,127,98,73,131,100,72,135,102,76,136, -102,77,134,107,71,127,107,72,125,102,73,127,100,77,129, -101,76,135,104,74,131,107,70,127,108,70,125,108,74,120, -104,76,114,103,74,109,102,73,107,95,77,109,97,72,108,95, -74,106,95,75,108,97,68,100,97,72,98,98,67,98,98,67,97, -98,67,99,96,68,95,96,70,89,94,62,88,94,60,87,91,58,90, -92,56,94,94,57,96,94,61,100,93,64,103,95,62,107,99,61, -111,103,63,114,104,61,117,109,58,123,112,57,125,113,57, -127,114,62,131,115,65,132,119,61,149,127,39,212,182,64, -240,221,110,214,231,168,171,234,217,159,237,233,147,234, -241,144,231,241,155,219,228,137,198,207,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,180,183,179,181,185,181,182,184,182,183,184, -183,184,185,184,184,185,184,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,184,184,183,164,170,128,165,184,46,72,146,138,68, -119,103,77,110,91,80,104,81,84,98,75,83,96,73,81,93,68, -83,92,63,83,92,56,85,92,51,86,91,48,87,94,35,90,98,40, -93,100,50,91,98,57,93,97,60,92,97,64,93,95,55,98,96, -58,104,96,61,108,95,52,111,95,63,115,96,60,119,100,59, -122,102,59,123,103,66,123,102,72,122,103,64,122,105,63, -119,103,68,115,98,71,120,94,81,128,97,67,124,98,80,121, -99,83,120,99,78,121,99,78,119,97,78,116,94,73,119,94, -68,124,96,66,125,95,66,127,95,74,126,95,88,132,98,87, -137,103,83,139,106,79,136,107,90,130,110,78,130,109,74, -133,108,74,133,107,72,137,108,68,134,110,78,131,113,74, -128,114,71,125,112,73,118,109,77,111,103,79,110,98,81, -111,99,74,111,99,74,111,101,77,113,101,80,101,99,71,99, -98,68,101,100,71,99,100,69,102,100,62,99,101,64,94,99, -61,91,97,58,90,95,58,89,92,59,94,93,64,98,94,64,102, -96,60,105,98,56,106,100,53,111,102,63,115,107,61,118, -110,56,124,113,57,127,114,60,128,115,62,131,115,65,133, -119,67,147,122,53,196,161,68,235,216,101,215,240,135,173, -238,205,159,240,219,148,232,232,148,224,233,162,208,216, -158,185,196,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,181,184,181,180,184,180,182, -184,182,183,185,183,184,185,184,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,166,162, -147,228,136,30,113,118,133,95,102,100,93,100,89,92,96, -81,89,94,74,86,91,71,79,89,65,79,90,60,84,93,56,86,91, -51,90,92,49,94,97,40,89,105,43,88,101,49,86,97,55,88, -96,57,93,92,62,97,94,55,101,95,59,103,93,58,116,95,55, -115,95,63,114,95,59,118,100,57,122,105,60,121,104,64, -119,102,70,129,101,64,130,105,65,125,103,69,118,101,73, -113,96,80,121,97,63,111,96,73,111,94,76,118,93,73,120, -89,71,118,90,73,116,90,69,119,92,66,124,96,66,128,96, -67,129,95,74,121,91,83,123,91,78,133,95,77,140,98,74, -140,98,86,137,108,78,135,111,75,134,112,75,133,111,72, -134,113,69,131,110,77,131,111,72,135,114,72,132,111,74, -126,107,78,120,102,82,116,98,83,116,100,75,113,101,75, -110,100,76,110,99,77,111,97,74,108,99,70,107,100,72,104, -99,70,105,101,63,101,100,64,96,99,62,94,98,61,93,97,61, -92,95,62,93,94,65,94,95,63,99,95,58,103,98,56,104,100, -53,111,99,61,111,107,60,117,108,54,122,113,56,124,115, -58,127,116,62,125,117,65,129,117,64,138,123,50,170,153, -53,223,205,88,232,231,135,180,233,204,163,233,215,153, -226,227,151,214,219,154,200,201,183,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,184,185,184,183,185,183,184,185,184,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,180,180,178,217,135,61,113,116, -126,94,101,96,93,99,85,93,98,77,89,94,73,87,93,68,81, -92,63,79,90,55,84,93,53,89,95,50,95,97,50,98,100,56, -90,101,63,87,98,61,87,97,58,89,96,58,96,96,50,100,96, -51,102,96,54,104,94,51,116,96,53,117,97,69,118,99,70, -120,101,70,119,100,71,115,97,70,115,96,70,127,99,66,128, -102,73,124,101,73,117,100,69,113,99,62,121,96,68,108,91, -83,103,84,74,111,84,63,119,87,63,118,89,71,116,87,74, -117,87,75,121,90,76,126,93,75,126,93,75,118,88,79,120, -87,79,130,91,75,138,96,72,140,101,69,137,107,70,136,111, -74,135,112,75,135,112,74,134,111,74,131,110,72,132,112, -70,134,112,69,132,111,67,129,110,67,123,106,68,118,102, -76,118,103,69,115,103,72,110,100,74,109,99,73,114,100, -68,110,99,73,107,99,73,104,98,70,102,98,72,104,104,63, -100,103,67,97,101,67,95,99,64,95,98,64,96,97,67,96,96, -64,101,96,63,104,99,58,105,101,54,113,101,58,112,107,58, -119,108,56,123,113,60,124,114,61,130,116,65,126,116,66, -130,116,67,139,121,64,162,141,64,213,195,78,231,234,104, -183,237,187,166,232,204,155,220,221,152,200,214,168,184, -193,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,184,185,184,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,180, -180,179,169,150,47,95,121,112,87,107,89,88,102,82,87,98, -75,84,95,74,82,95,69,80,93,63,81,92,57,87,96,54,91,99, -51,92,102,51,91,100,54,85,96,58,85,95,59,88,94,56,92, -93,55,99,96,53,102,96,54,104,95,54,105,95,53,111,96,55, -109,97,70,108,94,66,110,96,65,109,94,65,107,92,65,109, -92,65,114,93,61,114,94,64,113,92,64,111,92,61,112,93, -59,111,92,64,103,82,78,101,76,70,111,83,64,115,89,66, -118,89,71,114,87,75,112,86,76,113,86,74,114,87,71,114, -87,70,111,81,72,112,79,69,123,88,69,130,94,66,135,98, -64,138,101,68,138,105,72,136,106,72,134,105,71,136,103, -72,133,104,72,134,106,71,138,109,71,140,109,70,137,108, -67,133,107,70,120,103,79,120,101,71,119,101,73,112,97, -73,111,96,72,121,98,65,114,100,71,110,100,70,108,100,69, -101,97,71,103,103,59,101,103,64,97,101,64,97,102,65,96, -100,65,95,98,68,93,97,64,94,97,63,99,99,57,102,101,53, -106,103,55,108,104,54,116,107,54,121,110,56,123,112,58, -128,114,62,128,113,66,130,116,66,134,119,61,155,136,58, -210,185,67,239,227,97,190,230,181,171,229,201,152,211, -213,138,181,195,179,182,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,184,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,184,185,184, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,177,180,169,136,145,61,85,123,103,83, -108,83,87,104,78,86,99,74,82,94,72,80,92,70,81,91,63, -84,92,58,90,97,58,92,99,58,92,99,59,88,97,56,84,93,57, -84,91,60,88,90,62,94,90,58,96,92,56,97,92,55,102,93, -55,105,94,55,109,94,60,105,92,67,102,88,62,103,89,62, -104,90,64,103,88,66,103,87,68,105,87,67,105,88,67,106, -87,66,105,87,63,104,87,65,102,87,69,100,84,71,101,82, -69,104,85,69,102,83,69,111,87,69,109,88,71,105,85,70, -104,83,72,105,83,75,104,81,76,106,79,72,111,80,59,119, -87,61,123,91,60,128,96,56,130,98,63,130,99,65,128,99, -66,128,99,66,132,101,61,131,104,72,131,104,73,136,105, -72,140,107,71,143,110,75,137,111,81,119,105,85,120,102, -75,118,100,79,112,95,80,109,92,79,120,96,58,116,102,64, -112,101,66,110,100,70,106,98,70,103,99,61,104,103,64, -101,105,64,97,103,60,97,104,60,96,102,62,93,100,62,92, -98,64,95,98,62,99,100,58,102,102,58,107,102,58,112,104, -56,119,109,59,123,113,60,127,115,61,127,116,58,128,119, -58,133,122,56,152,135,53,206,179,62,241,223,93,195,231, -175,172,222,198,146,202,217,152,176,189,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,184,185,184,185,185,185, -184,185,184,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,184, -134,167,136,76,120,116,77,107,96,83,102,84,84,97,73,83, -92,70,83,89,66,86,91,59,90,95,58,92,97,59,90,96,60,89, -96,63,85,94,60,81,90,62,83,88,64,85,86,63,89,88,59,90, -88,54,90,88,58,95,89,61,98,90,62,99,87,62,99,86,66,97, -86,62,97,86,61,96,85,63,94,82,65,93,81,67,92,82,67,90, -82,69,93,81,69,95,81,68,96,80,70,93,76,77,92,78,73,93, -78,74,89,76,73,90,76,71,98,79,72,96,80,73,92,77,73,89, -74,73,88,72,74,86,70,72,94,72,64,106,79,56,111,83,59, -112,86,62,117,90,62,117,92,67,119,94,65,121,94,69,121, -95,69,124,101,64,126,104,68,126,103,70,129,103,69,135, -106,71,136,108,73,131,107,74,119,100,76,120,99,73,116, -97,77,110,92,79,110,90,75,116,96,60,120,101,68,117,100, -72,113,98,74,109,97,72,106,97,69,106,101,68,103,103,66, -99,105,62,98,105,61,97,104,63,93,101,63,88,98,63,90,98, -63,95,99,60,101,100,59,107,101,61,110,104,60,116,107,59, -120,108,58,125,112,61,128,116,58,128,118,61,132,120,60, -149,132,55,203,174,60,242,219,91,198,229,173,171,220,195, -137,187,200,184,184,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,184,184,184,184,185,184,185,185,185,183,185, -183,183,185,184,184,185,184,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,133,178,168,66, -123,124,68,108,100,75,101,85,80,96,74,82,92,68,84,91, -61,87,94,59,90,97,60,90,96,61,86,94,61,83,93,62,80,90, -62,77,87,62,80,85,63,80,85,63,80,87,61,87,84,56,85,84, -62,87,82,65,87,82,65,90,82,63,87,81,69,87,80,65,90,82, -64,90,81,65,88,78,65,87,77,68,81,76,69,79,74,68,81,73, -67,82,72,67,85,72,73,83,69,77,81,69,71,82,69,72,80,69, -73,78,69,72,81,72,73,80,73,74,78,70,73,77,67,71,76,64, -67,76,63,62,85,65,57,92,72,56,97,76,60,99,79,63,101, -82,66,104,82,70,106,85,68,107,87,70,107,88,70,111,90, -71,116,95,70,116,96,71,117,96,69,121,99,69,123,102,68, -123,101,67,120,97,69,114,96,69,113,94,75,111,93,76,116, -92,71,111,95,66,117,96,64,118,98,69,113,98,71,108,98, -72,105,97,65,104,98,62,104,101,62,103,104,63,101,105,63, -101,105,64,96,104,64,90,99,63,90,98,62,93,98,60,101, -100,58,108,102,55,109,105,53,115,108,54,122,111,55,125, -112,60,129,117,60,128,119,63,128,121,61,146,132,57,200, -171,59,243,218,91,198,227,172,168,214,192,148,177,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -184,184,184,179,185,180,183,185,183,183,185,183,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,120,171,194,66,120,138,66, -106,109,75,101,90,79,96,76,83,93,71,85,95,62,87,95,61, -89,95,62,89,95,60,86,93,58,82,90,59,80,87,59,80,87,58, -83,85,61,82,83,64,78,80,68,87,81,60,86,84,58,86,81,56, -86,80,57,87,79,56,83,79,61,82,77,58,84,78,58,85,77,59, -85,76,61,85,75,63,76,72,67,76,71,67,77,69,69,73,65,69, -74,63,73,72,63,61,72,63,61,73,63,63,71,62,63,69,63,65, -69,64,68,68,63,65,68,62,62,70,63,62,71,62,61,73,61,61, -78,60,65,80,63,68,84,66,72,86,69,71,86,69,75,93,70,68, -93,73,69,93,76,65,93,77,64,100,79,71,103,82,79,105,84, -76,109,87,72,113,91,71,115,94,72,115,92,74,113,91,79, -112,94,70,109,91,73,107,89,75,116,91,73,113,95,65,114, -94,61,118,98,69,114,98,75,105,95,74,105,97,63,105,99, -62,106,102,65,104,103,65,103,105,62,104,107,62,99,105, -69,95,101,68,92,99,65,93,98,61,99,98,61,109,102,58,111, -104,60,116,108,58,123,111,58,127,113,61,129,118,57,129, -121,62,130,123,61,144,132,54,198,170,57,242,218,91,196, -227,176,161,207,203,165,177,184,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,180,184,181,178,185,179,181,185,182, -184,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,177,187, -182,84,166,198,62,120,141,66,105,111,71,101,90,77,99,77, -81,94,71,87,93,63,89,93,62,89,92,62,88,92,59,86,91,57, -84,88,58,82,87,58,81,86,56,82,85,60,82,83,62,86,78,67, -87,82,60,90,83,57,90,83,57,89,81,58,88,80,57,86,78,59, -85,77,56,84,78,56,81,76,55,80,75,57,81,74,59,75,72,65, -74,69,66,71,67,68,66,65,69,63,62,71,64,62,59,63,61,59, -61,58,60,58,57,58,59,57,59,57,56,61,57,56,59,58,56,57, -58,56,57,60,56,58,63,56,59,63,57,61,64,57,63,70,59,67, -71,59,65,72,59,67,75,61,59,76,65,62,80,65,57,85,68,57, -86,70,62,89,73,70,92,74,68,97,78,65,103,85,66,104,87, -66,105,89,70,103,85,75,108,87,67,107,86,70,105,83,70, -108,85,67,113,92,61,116,96,64,115,99,70,106,95,72,97, -92,71,102,94,63,103,95,62,106,98,64,107,101,65,104,102, -61,105,106,63,105,104,71,99,103,69,92,100,64,90,101,60, -94,100,60,105,102,59,108,105,63,114,106,59,119,111,58, -124,112,61,128,117,58,132,121,64,132,122,62,145,131,53, -197,170,56,239,216,90,188,224,175,147,201,194,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,179,185, -179,182,185,182,184,186,184,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,180,187,179,153,187,168,78,155,205,60,118,139,65, -105,111,71,102,86,75,99,65,80,96,54,88,95,55,89,93,59, -88,90,63,87,89,66,85,89,66,83,86,64,80,83,62,81,85,58, -80,85,53,80,84,51,87,82,58,87,84,53,90,84,52,93,86,57, -92,85,59,90,80,67,88,78,68,87,76,69,86,76,72,83,74,72, -82,73,72,81,72,73,72,67,71,70,62,73,66,60,72,60,58,69, -58,57,67,58,56,59,57,55,60,56,53,60,52,51,57,52,49,56, -50,48,60,50,48,61,52,49,61,52,49,57,52,49,54,56,50,54, -55,51,52,57,51,53,61,49,59,64,50,63,66,53,61,71,56,56, -70,58,58,75,59,58,79,61,57,81,63,59,81,66,62,85,67,61, -90,71,59,95,76,59,97,79,61,96,80,67,98,79,75,105,82, -76,108,86,73,105,84,63,106,84,63,108,85,67,111,92,60, -111,96,65,106,97,68,99,96,65,100,92,61,101,91,65,103, -93,67,105,99,67,103,100,65,102,101,65,105,104,68,101, -106,65,97,106,63,92,103,61,94,100,66,103,99,60,108,105, -64,114,106,64,116,108,62,122,110,60,128,115,70,130,117, -67,132,121,63,144,131,54,197,171,58,236,215,96,183,216, -180,164,185,189,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,179,185,179,181,185,181,184,186,184,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,177,189,175,148,182,164, -76,145,201,62,114,137,65,99,108,75,96,84,83,96,67,85, -97,57,85,96,55,84,91,57,83,87,60,83,87,63,81,85,62,80, -84,62,80,82,61,84,82,57,87,83,54,87,83,54,86,82,57,87, -84,54,91,85,54,95,86,57,92,86,60,88,81,65,87,82,68,86, -80,69,84,76,70,83,73,69,81,71,69,78,69,69,72,66,69,67, -61,70,62,58,68,58,56,65,56,53,63,57,54,57,53,53,57,52, -52,57,50,51,56,50,50,54,50,47,58,49,46,58,49,46,56,49, -47,54,49,48,51,49,49,51,50,50,50,50,50,50,53,48,55,55, -48,56,57,50,55,63,55,51,65,57,53,67,59,53,68,62,51,68, -64,54,71,64,55,77,65,55,84,68,54,91,73,54,96,74,56,96, -75,62,90,74,67,88,78,66,100,83,66,105,84,62,106,84,63, -107,83,64,109,89,58,109,93,63,106,95,66,104,94,66,103, -93,63,100,91,63,99,90,62,103,95,64,105,97,63,106,99,64, -103,103,65,100,105,63,99,104,62,96,102,60,93,99,63,99, -101,59,107,105,62,111,106,62,115,107,59,119,109,57,126, -113,67,127,116,64,132,119,61,148,129,54,199,173,61,225, -215,96,167,206,172,171,182,184,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,184, -185,184,177,185,177,180,185,182,184,186,184,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,177,186, -182,138,176,170,58,145,148,53,112,98,65,106,74,76,102, -63,83,99,59,84,96,56,84,92,65,83,88,67,82,85,66,80,83, -65,80,82,66,80,81,70,81,82,62,84,81,65,89,83,63,89,84, -59,88,84,63,87,83,63,92,85,60,95,86,62,91,84,60,87,83, -56,86,83,57,85,81,57,84,78,62,83,74,68,81,71,72,78,67, -73,69,62,71,64,59,66,61,57,62,58,57,58,56,55,53,57,55, -50,53,55,45,52,54,42,50,52,38,48,50,38,49,49,40,48,49, -39,48,49,40,48,49,40,48,50,38,48,51,38,48,49,42,48,49, -40,52,50,41,53,49,43,55,50,48,62,54,47,63,55,45,65,58, -47,66,61,47,66,62,48,69,61,50,74,62,48,82,66,49,91,72, -53,95,75,53,97,78,56,89,76,60,85,73,65,94,77,62,102, -82,54,106,85,54,108,86,59,110,90,62,109,93,67,105,94, -67,104,94,64,103,93,67,100,92,64,98,92,58,100,94,55, -103,97,54,105,101,57,103,104,56,101,105,61,99,105,65,96, -102,64,93,99,69,99,99,65,105,104,58,110,107,54,114,108, -52,119,110,58,127,115,60,128,120,59,131,122,53,150,134, -49,202,177,66,222,210,120,165,186,192,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,179,185,180,180,185,180,183,185,184,184, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,167,175,171,124,142,139,93,106,137,84,94,96, -84,94,73,86,96,63,85,96,57,86,95,57,84,93,65,80,89,66, -79,85,65,79,82,64,79,80,65,79,79,67,81,82,61,81,81,63, -87,82,61,91,84,59,95,80,64,94,79,62,96,81,58,98,82,60, -96,82,60,95,80,57,93,79,58,90,79,58,87,78,63,81,73,67, -76,69,69,70,67,68,64,61,67,63,56,63,64,54,60,65,53,58, -66,53,56,66,53,53,65,51,50,66,50,48,67,49,46,68,46,45, -70,44,47,69,43,46,69,42,45,69,42,45,69,43,44,68,43,43, -63,42,45,63,43,42,65,43,43,65,43,44,65,44,48,67,46,44, -67,50,43,68,53,43,67,56,44,68,56,44,73,60,50,75,62,48, -78,66,47,83,72,49,87,76,50,93,79,53,94,76,60,89,72,65, -92,75,60,99,82,53,103,86,54,101,88,58,100,93,60,101,93, -63,98,91,63,100,92,61,97,91,63,97,91,62,97,92,58,98, -94,54,100,98,55,102,100,56,102,101,55,99,103,60,99,103, -63,100,102,65,97,98,70,93,100,63,101,104,56,109,105,52, -115,106,50,119,107,55,126,113,57,128,115,55,134,118,51, -153,133,49,198,182,69,198,214,120,161,184,182,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,180,184,181,178,185,178,182,185,183,184,185, -184,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,153,164,153,98,126,81,82,110,55,82, -100,53,84,98,55,86,98,55,85,96,54,85,94,57,83,92,64, -80,90,65,81,87,63,83,86,62,82,84,62,81,82,63,82,83,56, -81,83,53,88,85,53,91,86,53,97,85,56,96,84,53,98,84,54, -99,85,54,97,85,54,97,84,56,96,83,62,92,81,69,89,77,75, -82,72,76,75,67,75,68,63,71,63,61,57,63,60,52,67,61,50, -70,61,54,73,60,61,73,60,59,72,58,55,73,58,55,74,57,53, -78,57,49,79,56,49,79,56,47,80,57,46,81,57,47,80,56,51, -78,55,56,73,54,55,72,54,54,72,52,55,73,52,57,73,52,58, -72,52,53,69,53,50,69,54,51,67,55,49,68,55,50,73,59,54, -75,61,53,78,65,53,81,69,53,85,73,55,91,75,57,95,79,51, -92,80,50,95,82,50,100,84,48,102,87,49,101,90,55,100,91, -61,99,91,62,97,90,59,97,89,59,94,89,59,94,91,56,96,93, -56,97,94,56,98,95,57,100,99,58,102,102,56,97,103,58,97, -102,63,100,105,65,101,106,59,94,102,67,99,103,59,108, -104,58,114,105,58,119,106,56,126,111,63,130,115,63,135, -119,51,156,137,49,202,184,88,191,201,150,165,178,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,184,185,185,185,185, -185,185,185,185,178,185,179,181,185,182,184,185,184,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,182,183,183,181,181,181, -185,185,185,184,184,184,146,148,140,99,99,63,93,94,50, -92,92,54,89,94,55,89,93,54,89,94,54,85,91,55,84,88,62, -81,85,62,80,84,60,81,85,60,80,82,58,82,79,60,86,77,54, -90,79,51,95,83,53,97,84,54,99,83,56,99,84,55,100,85, -56,100,85,56,100,85,56,99,84,58,94,85,63,86,82,68,80, -78,72,74,71,73,69,64,72,69,59,70,74,59,61,79,62,59,82, -65,58,81,64,60,80,60,64,82,56,62,85,55,59,87,54,58,87, -54,57,90,55,53,90,56,54,89,55,50,91,55,49,93,58,52,91, -58,56,89,57,62,90,57,63,89,56,62,89,54,63,88,53,65,87, -53,66,87,55,61,85,56,58,85,56,58,85,56,56,85,56,57,81, -55,56,77,59,53,75,63,51,77,67,51,82,71,54,88,73,54,90, -78,49,92,81,50,94,84,49,96,86,46,98,89,47,96,91,52,98, -90,59,96,90,58,94,90,56,91,88,57,88,86,56,89,90,55,91, -92,54,92,90,52,97,92,53,101,94,54,104,98,53,104,98,57, -101,97,60,100,101,63,105,105,61,97,101,69,93,102,59,99, -104,57,105,105,54,114,107,53,124,108,60,128,112,60,139, -115,49,162,138,52,193,191,86,159,188,131,165,174,181,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,184,184,184,185,185,185,185,185, -185,178,185,179,180,185,180,183,185,184,184,185,184,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -166,170,167,142,149,135,112,119,84,94,95,51,93,93,59,94, -94,60,90,94,58,89,94,57,88,94,57,84,91,58,83,88,62,81, -85,60,80,85,59,80,84,59,80,82,60,83,81,59,89,81,56,93, -85,51,99,89,53,99,89,50,103,88,52,105,90,61,104,90,54, -104,90,55,105,90,59,101,86,64,93,83,69,85,82,67,78,79, -62,73,75,59,72,72,59,75,70,63,81,67,70,84,66,68,84,64, -68,83,64,67,81,61,64,83,58,58,88,58,59,92,60,63,93,61, -63,97,63,63,95,61,66,94,60,66,97,62,65,98,64,63,96,64, -64,95,63,68,95,63,69,94,61,71,94,61,71,94,60,72,93,59, -75,91,59,65,89,60,75,88,59,75,89,59,69,90,61,63,88,62, -63,82,64,59,77,63,60,75,63,64,80,66,66,88,72,62,90,76, -60,94,81,58,96,86,55,98,87,56,99,87,66,97,89,66,98,91, -58,97,91,60,94,89,64,92,86,69,88,87,58,87,86,61,88,87, -59,91,89,54,96,91,54,101,92,60,102,94,59,103,96,60,101, -98,58,99,101,57,104,104,59,100,105,67,96,104,64,100,103, -62,106,104,61,113,103,62,126,111,59,130,115,58,139,120, -35,169,147,50,194,181,143,146,159,178,182,183,183,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,179,185,179,182,185,182,184,185,184,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -142,146,141,98,102,73,93,95,50,93,94,51,94,90,60,95,92, -59,89,94,57,86,94,55,83,94,54,85,89,57,85,86,62,83,84, -60,84,84,59,83,81,59,83,80,60,84,80,60,86,83,57,94,86, -52,103,88,54,106,88,52,107,89,53,106,89,61,103,91,54, -103,94,55,101,92,59,97,87,63,90,83,67,85,77,63,84,73, -60,85,72,60,85,70,62,85,68,66,82,65,69,86,61,65,90,58, -66,92,56,67,94,57,68,95,58,64,100,61,67,101,62,68,98, -63,66,99,65,64,103,65,72,103,64,72,105,65,69,109,67,69, -112,67,72,111,64,76,111,65,77,108,66,81,107,64,79,106, -63,80,103,61,83,100,63,72,97,59,80,91,58,77,87,58,69, -90,60,64,94,62,66,94,62,63,95,63,68,91,59,69,88,61,66, -89,68,60,92,73,58,95,80,56,100,86,55,101,87,58,97,86, -66,98,85,65,98,89,57,98,91,60,93,89,64,87,86,66,87,84, -55,82,85,58,78,83,52,82,86,48,86,88,49,90,90,55,95,93, -55,97,96,57,100,98,57,101,98,55,98,101,54,97,100,62,94, -100,62,95,102,60,99,104,58,107,105,60,116,112,55,121, -117,53,135,120,32,166,150,51,156,172,128,127,155,166,182, -184,184,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,181,185,182,180,185,180,183,185,184,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,174,176,174, -142,151,142,104,118,81,89,96,50,93,96,54,92,93,53,95, -93,53,95,92,61,89,93,58,85,92,58,79,88,57,84,86,63,85, -84,64,85,84,64,84,84,61,84,84,58,85,84,55,85,84,53,85, -84,53,93,88,46,104,91,47,109,91,51,109,90,60,106,87,70, -105,91,65,103,91,65,98,87,65,95,83,69,89,81,71,87,78, -69,88,76,70,88,73,71,86,68,74,84,64,78,79,62,71,86,62, -58,91,62,54,95,62,55,98,62,64,100,64,64,105,66,67,108, -69,70,105,71,70,104,70,69,108,70,71,110,71,70,112,72, -69,114,72,68,119,75,71,120,74,72,118,75,66,113,75,64, -114,76,65,113,74,67,111,73,72,107,72,75,104,68,78,99, -68,76,92,66,69,92,62,72,95,61,74,95,62,73,97,64,74,98, -67,73,93,66,67,88,67,65,90,67,76,92,74,70,99,84,63, -102,89,54,97,89,53,98,88,54,100,91,60,99,93,61,95,92, -61,89,89,65,88,84,58,84,86,62,80,84,63,81,82,65,85,82, -67,89,86,69,93,88,69,96,92,67,101,96,67,101,96,64,96, -97,63,96,97,65,94,100,66,94,100,66,97,102,61,108,110, -45,117,114,50,121,117,50,135,115,49,161,139,80,131,145, -106,136,161,147,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,181,185,181,182,185,182,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,150,157,149,93,106,89,87,93,48,88,95,47,89,95, -52,90,94,53,90,94,54,88,95,60,84,94,57,85,92,57,84,89, -58,84,87,63,83,86,63,82,85,64,84,85,62,86,85,59,89,84, -57,95,85,57,98,84,57,106,88,51,110,90,50,112,92,54,111, -90,62,107,86,68,104,87,63,103,87,63,99,83,63,96,77,65, -94,76,68,92,75,68,92,74,70,91,72,72,87,66,72,87,61,75, -89,59,71,96,62,60,101,65,58,101,66,60,101,66,67,106,67, -68,106,67,68,108,69,69,108,69,69,111,71,72,113,72,73, -112,74,71,112,76,70,111,77,69,112,78,71,114,78,73,118, -77,67,116,76,67,115,77,68,114,76,70,113,75,74,111,73, -77,109,70,79,107,67,77,106,66,73,105,63,76,102,64,78, -97,63,75,96,64,73,95,65,71,97,68,70,98,68,70,95,63,73, -92,68,66,98,79,60,99,85,52,101,86,54,103,88,56,101,87, -58,100,87,57,100,87,58,95,86,63,92,85,59,91,86,64,88, -86,66,84,84,66,84,83,67,87,82,66,89,85,64,90,89,62,95, -94,63,96,94,59,97,94,60,95,95,63,91,96,62,93,95,63,96, -97,57,107,106,44,120,110,48,119,116,48,117,122,51,118, -130,69,122,136,104,178,179,178,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,183,185,183,181,185,181,183, -185,183,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -179,181,179,164,169,164,118,132,110,87,102,59,91,97,50, -89,96,49,90,96,51,91,95,50,91,96,53,89,97,55,86,96,55, -87,93,53,87,92,53,88,90,57,87,89,59,86,87,64,85,84,64, -88,84,62,91,84,60,95,85,63,100,86,64,106,87,65,111,90, -66,112,92,64,112,90,66,108,88,68,105,88,66,103,87,61, -102,86,57,101,84,60,98,80,61,95,77,63,94,75,68,91,71, -69,91,69,69,94,67,66,97,65,63,105,69,60,110,71,61,109, -71,62,110,71,71,112,73,56,112,74,59,115,75,61,116,76, -62,120,78,65,120,78,69,119,79,75,117,79,80,113,77,82, -112,76,84,114,78,79,121,83,55,120,81,63,120,82,69,120, -82,67,121,84,70,119,81,69,116,76,74,114,74,76,114,72, -75,114,70,74,111,72,79,106,70,75,102,69,74,99,69,72,99, -71,70,100,71,68,103,72,68,98,74,64,96,74,65,97,78,68, -99,81,71,101,84,74,102,89,64,102,89,58,101,89,54,99,90, -54,96,89,55,94,90,54,90,89,56,86,87,60,84,84,64,90,86, -66,92,90,55,91,91,57,95,96,56,98,98,53,99,99,55,98,99, -58,91,97,58,92,95,58,94,96,57,101,100,58,119,110,44, -121,117,49,113,117,67,106,115,94,149,154,149,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,184,185,184,181, -185,181,183,185,183,183,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,184,184,184,168,173,166,132,143,125,95,109, -76,91,102,54,90,97,49,92,94,49,95,94,51,95,94,51,95, -94,55,93,94,57,93,93,56,92,92,56,92,92,55,96,90,59,96, -88,63,92,86,66,88,84,64,87,83,62,88,81,61,90,82,64,92, -83,66,98,83,67,105,85,65,109,87,62,112,87,64,110,87,73, -105,86,70,105,86,64,107,87,59,104,83,63,100,81,66,96, -76,68,94,72,70,94,69,71,99,69,71,103,69,65,105,69,63, -109,69,61,119,73,64,121,74,65,117,72,74,125,78,55,125, -82,58,126,84,63,126,87,69,129,89,80,126,86,78,120,84, -83,115,82,88,108,77,90,105,74,91,111,75,85,131,87,60, -130,89,72,131,90,73,130,88,67,132,86,71,134,88,72,130, -84,79,125,80,81,122,79,80,125,77,79,116,75,79,111,74, -77,108,74,77,100,71,74,98,70,72,99,71,71,100,72,72,104, -75,69,100,74,67,96,75,68,93,77,68,91,77,70,101,85,64, -105,87,61,104,88,58,104,87,57,100,89,58,99,89,56,98,89, -58,95,87,60,90,83,62,91,85,63,96,90,56,93,87,57,95,92, -57,96,96,54,98,97,55,96,97,60,93,96,60,89,94,57,89,93, -55,95,94,57,109,107,38,117,112,45,114,115,70,102,112,95, -169,170,169,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,184,185,184,183,185,183,183,185,183,184,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,182,183,181,154,161, -153,115,126,101,97,109,67,91,103,54,92,97,54,93,96,54, -96,96,58,96,95,58,97,95,57,97,94,63,96,95,62,95,95,64, -93,91,63,97,88,65,100,88,72,96,88,74,90,87,72,86,85, -68,85,82,68,87,80,72,87,76,75,91,76,66,100,79,62,109, -83,60,114,85,61,111,86,75,103,84,73,103,82,68,106,83, -65,104,80,68,101,77,71,97,73,70,97,71,71,99,71,71,103, -72,69,107,73,65,109,71,66,110,73,64,120,80,67,123,81, -66,122,81,69,129,89,70,128,96,74,126,99,80,122,98,81, -121,92,79,116,89,79,112,88,86,105,84,91,96,77,90,90,70, -86,97,71,81,121,83,66,122,90,73,125,93,73,126,93,69, -130,91,67,132,96,75,136,98,78,131,95,77,123,91,72,127, -89,72,119,86,73,113,81,72,108,77,74,104,73,76,103,72, -77,102,71,77,99,71,75,104,76,71,105,79,68,100,78,61,95, -77,60,92,77,63,97,80,60,102,85,62,102,85,62,102,86,64, -100,86,62,100,86,59,102,89,61,100,89,62,94,85,58,93,85, -59,94,86,58,94,87,58,95,90,58,95,93,55,97,95,58,96,95, -61,94,95,59,91,94,57,89,92,54,93,93,54,99,99,47,111, -108,48,112,117,72,99,110,98,174,174,174,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,184,185, -184,184,185,184,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,184,185,184,183, -183,183,170,174,170,135,147,129,106,121,86,98,108,61,94, -102,52,95,99,56,94,99,57,96,98,60,97,96,58,101,98,54, -102,98,67,100,99,64,99,97,63,97,93,61,99,90,65,100,91, -71,94,89,73,89,86,71,86,84,68,83,81,65,84,78,67,85,74, -64,93,77,45,101,78,46,108,80,57,114,85,60,107,86,68, -100,83,73,101,80,70,102,80,68,101,79,69,99,75,69,98,74, -67,98,74,68,98,73,70,100,72,73,104,72,76,105,72,78,108, -77,73,112,79,76,115,82,84,118,83,89,111,81,95,106,83, -100,100,81,101,96,79,94,104,81,86,96,76,90,90,73,93,84, -69,94,78,64,91,74,60,85,79,62,81,96,69,74,95,72,72,98, -73,75,103,76,78,111,81,75,109,83,84,115,85,81,119,89, -84,118,90,83,124,90,84,120,88,79,117,85,74,114,82,74, -110,78,73,109,77,71,107,77,67,102,76,71,101,75,72,105, -78,72,104,79,64,102,79,59,97,80,61,98,80,62,101,81,61, -100,84,58,101,84,60,103,85,57,103,86,57,102,88,59,100, -91,60,94,89,59,91,86,59,91,85,62,92,88,63,95,92,60,95, -94,58,96,94,62,96,95,62,96,96,61,94,96,61,90,94,58,91, -93,54,91,93,59,103,102,47,110,114,68,101,114,97,169,172, -171,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,184,185,184,184,185,184,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,182,183,182,173,177,174,152,161,151,122,134,112,100, -113,77,90,100,56,96,98,54,99,98,55,98,97,56,98,95,56, -100,96,55,107,97,55,107,95,63,103,98,60,105,98,61,104, -96,63,102,92,66,97,92,71,91,86,69,88,81,67,88,79,65, -88,76,62,88,75,62,91,73,59,104,80,44,107,79,47,107,80, -56,110,83,60,97,84,68,89,80,74,86,77,71,86,76,67,89, -75,67,87,75,67,86,74,65,86,75,67,84,75,70,80,72,72,81, -73,78,81,74,81,86,77,75,81,72,73,76,68,78,72,64,80,70, -61,83,67,58,84,66,56,85,65,55,82,69,56,78,69,58,82,64, -53,83,59,48,82,54,43,78,53,41,74,58,43,73,68,51,67,73, -57,70,73,58,72,75,61,73,79,65,71,79,64,75,79,65,70,86, -68,73,94,72,76,101,77,78,105,81,78,110,82,73,112,83,71, -109,81,68,108,82,66,105,84,64,95,80,70,92,76,71,95,76, -70,98,77,66,103,80,59,101,78,61,102,80,65,103,81,61, -104,83,57,105,84,57,104,87,54,103,88,54,102,88,55,100, -89,58,96,87,58,91,85,58,87,85,60,87,87,62,91,90,60,94, -91,59,98,91,64,99,93,64,99,93,66,97,94,66,93,92,62,93, -92,58,89,92,60,92,95,45,98,107,64,95,109,92,159,165, -161,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,184,185,184,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,180,182,180,161,170,161,136,149,131,110,126,92,94, -108,69,92,101,59,99,101,57,102,101,56,100,99,54,100,97, -56,103,98,57,110,100,59,112,100,64,108,102,65,108,99,66, -108,99,70,105,94,74,96,90,72,90,84,70,89,81,70,90,79, -71,90,78,69,90,76,66,93,73,64,102,75,68,106,77,72,108, -80,75,107,79,85,88,74,89,81,69,94,75,64,89,71,61,82, -76,60,82,74,61,72,74,62,70,73,62,71,68,60,67,62,58,59, -59,58,50,57,57,48,58,54,46,57,52,42,53,51,38,51,49,36, -48,46,34,47,45,38,49,44,39,47,42,41,51,40,47,50,41,46, -47,40,42,45,39,40,43,37,38,44,37,38,47,36,38,49,36,41, -52,39,45,53,42,45,53,44,43,55,45,44,57,47,46,60,50,51, -65,51,57,70,52,61,73,53,66,78,57,71,86,60,74,95,67,75, -102,75,77,104,79,77,102,80,78,92,77,75,89,74,75,91,72, -72,95,74,70,101,77,66,102,78,67,102,80,69,105,83,65, -105,85,58,104,82,58,104,88,61,104,89,56,104,90,60,101, -88,65,98,86,68,95,86,67,89,87,65,89,88,62,91,89,59,93, -91,54,97,91,60,100,94,59,99,93,65,98,93,65,95,92,58, -95,94,52,91,94,59,90,92,61,88,95,72,92,107,92,160,162, -161,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -184,185,184,184,185,184,184,185,184,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,184,184, -184,172,177,172,144,157,144,118,137,108,97,116,77,88,104, -61,90,102,57,95,102,55,98,100,53,96,99,52,99,100,58, -102,100,59,106,103,60,114,101,66,109,103,67,108,102,68, -108,99,70,104,93,73,93,89,68,88,85,68,84,80,68,83,79, -68,82,78,67,84,79,67,88,78,66,90,80,70,92,82,72,87,83, -72,77,79,78,61,71,81,57,59,82,57,48,75,59,43,69,61,41, -68,62,45,59,61,45,56,61,43,56,60,42,54,63,43,49,64,45, -40,62,45,38,62,45,38,62,45,35,63,45,33,63,45,33,64,46, -34,66,45,40,65,44,41,65,43,45,64,41,51,65,42,50,65,40, -46,65,38,43,64,37,42,65,36,42,67,35,42,63,36,43,62,35, -44,61,36,42,57,35,37,59,34,37,60,34,37,57,34,40,57,36, -45,57,35,48,61,34,51,60,35,54,61,39,55,63,44,54,68,52, -55,73,57,57,77,62,62,78,67,65,80,70,71,84,70,70,86,71, -66,89,75,62,94,76,64,95,79,66,97,82,61,100,85,56,103, -83,58,103,86,60,102,87,56,103,88,59,99,86,64,94,83,67, -93,84,67,93,85,66,93,85,62,96,87,58,97,87,52,98,87,57, -101,93,57,98,95,64,94,93,63,92,94,57,91,94,49,90,94, -58,89,92,62,86,90,69,89,95,84,158,162,158,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,184,185,184,185, -185,185,184,185,184,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,182,184,182,162,170,161, -132,149,125,103,128,84,88,110,58,90,108,55,93,104,59,96, -101,62,100,101,60,99,102,56,101,102,57,105,104,60,108, -105,62,115,104,63,111,105,64,110,104,68,108,99,70,104, -94,73,96,92,76,88,84,76,84,79,75,82,77,72,80,74,69,79, -73,68,84,72,67,86,72,82,86,70,93,78,66,94,66,61,88,48, -60,49,46,55,30,51,52,25,60,54,27,65,54,35,67,56,38,67, -57,34,69,58,37,72,58,42,74,58,46,76,59,48,74,58,45,74, -57,50,74,57,49,75,57,46,75,57,48,74,56,46,75,56,44,75, -55,46,73,54,47,72,53,44,72,52,43,73,52,39,74,52,39,74, -51,40,76,51,42,78,51,41,73,50,37,73,50,40,72,49,44,69, -49,44,72,50,41,72,49,42,68,50,41,67,50,39,65,49,36,67, -47,40,66,48,39,63,47,37,61,47,34,59,47,32,59,46,33,62, -49,39,64,53,43,67,58,44,76,63,50,81,66,55,83,67,62,90, -70,60,95,80,53,99,84,53,102,86,54,105,86,54,105,88,61, -104,88,62,102,87,61,97,85,59,93,84,59,89,82,60,90,80, -69,95,88,60,99,91,57,101,92,56,103,93,62,103,96,54,99, -97,58,98,98,62,95,96,64,94,94,68,93,96,59,90,94,57,89, -95,61,90,99,70,151,154,148,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,184,185,184,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,181,182,181,145,159,145,114,133,102,96, -112,68,93,108,58,95,107,58,97,104,62,99,102,63,97,104, -60,101,103,58,106,103,59,109,103,60,109,104,62,114,103, -62,113,102,63,113,101,68,108,100,71,101,96,73,97,92,76, -90,85,77,83,78,75,76,74,69,71,71,64,70,69,63,69,70,59, -63,66,68,57,60,72,56,51,72,66,38,70,77,41,49,81,49,42, -84,54,40,85,57,40,86,57,44,85,57,47,85,59,44,86,60,46, -85,59,49,85,58,51,85,59,53,87,59,53,87,58,55,87,58,55, -87,59,52,88,58,55,87,58,54,88,58,52,88,58,54,85,55,53, -87,54,51,91,53,52,93,52,49,97,53,50,99,53,52,101,52, -53,102,51,52,99,52,50,97,52,51,93,50,54,89,50,54,89, -53,51,89,53,52,88,54,52,85,55,50,83,56,48,83,55,53,82, -55,52,82,57,51,81,57,50,80,58,49,76,57,48,73,57,50,71, -57,50,70,56,46,69,57,44,65,59,44,65,60,47,72,65,47,84, -70,40,98,78,46,106,81,51,108,81,51,110,83,59,108,83,59, -106,83,59,101,81,59,98,82,60,95,82,62,92,78,67,96,84, -58,104,90,57,104,91,56,102,91,61,106,96,56,103,96,59, -100,97,62,95,97,65,90,94,66,91,95,59,92,94,57,91,92, -60,98,101,75,146,149,139,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,184,185,184,184,185,184,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,177,181,178,124,145,129,100,121,94,92,111,72, -92,108,61,97,109,57,99,107,55,102,107,61,99,105,66,102, -105,61,107,104,64,110,104,68,110,106,65,116,105,63,114, -104,70,114,101,78,109,100,78,101,97,70,96,92,73,90,86, -71,85,82,70,78,75,70,71,68,71,67,63,72,61,58,71,52,53, -66,45,49,53,46,49,35,69,55,20,94,68,21,101,76,30,103, -80,36,102,80,35,101,80,32,99,78,39,96,74,45,94,71,49, -92,68,52,90,66,54,90,66,55,92,66,53,91,65,52,91,65,55, -91,63,57,92,63,56,92,63,58,93,64,57,94,64,60,92,62,59, -94,61,55,98,65,45,102,67,37,107,70,33,112,73,34,117,76, -38,119,75,41,112,70,43,108,66,58,102,61,66,97,58,68,93, -56,72,94,57,69,92,60,61,89,60,58,87,61,56,89,64,51,89, -65,50,89,66,54,88,66,56,86,66,54,83,66,53,81,67,54,81, -68,54,81,67,54,77,65,55,70,63,52,65,61,45,64,55,49,73, -53,61,88,62,65,101,73,61,106,79,52,109,82,60,108,83,60, -107,85,58,103,85,56,100,85,62,98,85,67,99,89,52,103,91, -58,107,94,62,108,95,65,106,95,69,107,97,66,107,100,64, -104,101,63,97,100,60,92,99,54,92,97,56,91,94,57,93,95, -61,98,102,76,123,129,115,183,183,183,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,184,185,184,183,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,167,173,169,107,133,113,92,112,82,90,107,67, -95,108,62,100,108,59,102,107,58,102,105,62,104,102,67, -106,105,62,108,106,66,106,106,67,109,107,65,112,106,62, -111,106,70,109,103,76,104,96,74,107,91,69,102,88,72,96, -86,72,90,83,74,81,76,73,72,70,73,65,65,73,59,57,69,55, -51,65,58,49,58,69,54,49,85,68,34,101,80,32,108,86,40, -115,89,47,120,92,50,126,93,50,126,91,58,121,88,62,115, -83,65,109,75,65,107,73,67,107,72,67,107,71,65,109,70, -64,106,66,66,104,65,66,105,65,65,107,63,66,111,65,66, -114,65,71,116,62,71,116,63,68,125,67,60,131,72,54,139, -78,55,146,84,59,150,89,63,149,91,66,143,91,72,130,85, -81,116,74,80,109,67,80,104,61,80,98,59,72,104,57,66, -108,57,65,110,57,64,116,58,60,116,61,58,113,61,63,109, -61,63,106,61,61,105,61,60,105,62,62,105,64,62,101,67, -63,98,66,66,96,65,66,98,64,62,83,63,65,71,58,67,63,59, -56,69,70,47,85,79,43,95,82,53,97,85,56,99,87,56,100, -88,57,98,87,62,95,85,66,100,92,54,96,94,58,105,98,64, -110,96,66,111,94,69,110,96,66,107,99,63,105,100,63,101, -98,60,98,98,56,100,95,59,96,93,58,93,92,59,98,99,71, -111,115,97,158,159,155,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,184,185,184,184,185,184,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,180,182,179, -144,162,144,93,125,97,88,112,72,93,111,66,96,109,66,102, -108,69,103,106,69,103,106,67,107,107,63,108,108,58,111, -110,62,111,111,64,111,110,63,112,106,70,110,105,69,108, -103,73,104,97,70,110,95,64,105,92,71,100,91,72,94,89, -71,84,81,66,75,75,64,67,68,64,62,62,62,61,61,55,68,62, -53,78,65,50,91,72,51,106,83,49,112,89,46,119,93,53,125, -96,61,134,100,65,139,106,62,136,107,62,132,104,63,127, -100,64,125,96,66,126,96,69,124,94,64,124,92,60,124,91, -60,122,89,62,122,87,65,121,82,65,124,82,67,127,82,68, -130,80,70,131,81,75,141,86,71,150,90,76,157,95,80,163, -101,80,167,105,75,169,111,74,164,113,82,150,112,75,135, -101,69,127,92,69,120,82,77,108,72,73,112,70,54,119,74, -48,122,77,45,130,80,44,129,81,48,126,83,52,124,83,55, -119,80,54,119,82,56,120,84,56,119,86,52,115,85,64,113, -85,66,112,86,63,117,88,58,103,88,64,90,83,67,76,75,67, -67,63,71,74,56,90,87,66,84,92,75,68,95,82,60,99,86,59, -99,88,58,97,89,57,99,90,58,96,91,66,103,95,61,109,98, -50,111,99,50,112,101,57,107,99,63,106,99,70,104,99,74, -99,97,70,100,95,74,97,93,71,95,94,66,97,98,65,108,113, -85,153,154,148,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -184,185,185,184,185,184,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,178,182,178,128,151, -127,89,120,94,91,112,73,97,110,68,101,109,68,101,106,68, -101,104,67,105,105,68,108,107,64,111,109,60,116,109,63, -117,107,65,116,107,64,113,103,70,112,103,69,111,102,74, -104,96,70,108,96,64,103,94,71,99,90,71,95,88,69,86,81, -65,78,75,65,74,69,67,70,65,66,74,64,62,76,65,59,80,68, -53,86,74,50,100,84,45,108,88,43,112,94,50,115,95,55, -124,97,57,134,102,56,138,105,60,141,106,67,141,105,72, -139,104,76,138,104,79,143,103,76,144,102,72,145,101,74, -146,101,77,146,100,82,144,98,83,142,97,84,141,96,84,138, -93,83,135,92,85,141,96,77,145,101,80,146,103,80,146,105, -75,152,111,72,157,117,72,160,113,79,157,113,78,154,111, -81,145,104,84,135,93,91,130,82,89,131,82,70,140,88,66, -147,94,66,151,100,65,148,102,71,145,103,75,143,102,77, -142,99,77,143,100,78,142,101,77,143,103,73,136,99,82, -132,97,83,127,101,79,124,105,72,120,97,78,111,93,83,101, -86,86,82,73,86,60,58,87,48,60,64,61,67,50,77,75,48,86, -81,49,87,82,47,88,83,48,91,86,51,88,86,59,99,89,55, -113,94,49,118,98,52,116,100,58,110,99,64,106,100,71,101, -98,72,97,96,69,96,94,73,94,93,71,95,93,66,97,96,64, -102,103,75,159,160,157,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,178,181,178, -123,150,119,92,125,86,95,116,78,100,112,72,104,111,71, -104,108,68,103,105,67,106,106,66,110,109,62,114,112,62, -119,113,61,119,111,62,118,109,66,118,109,65,113,105,61, -112,104,65,108,102,65,111,100,59,107,98,71,101,93,71,96, -89,73,88,82,74,82,78,72,77,73,68,74,69,64,79,71,59,82, -72,59,85,73,60,88,75,63,99,80,55,107,86,49,111,92,52, -110,90,55,118,90,58,129,93,70,133,98,69,135,100,66,140, -105,69,140,106,69,139,107,69,145,107,66,148,104,78,150, -106,78,154,110,77,155,111,83,153,110,75,152,112,71,152, -112,73,149,108,78,144,100,89,146,99,86,147,102,85,145, -102,83,144,100,81,147,103,84,148,103,81,155,106,77,155, -110,80,155,111,78,150,112,69,144,111,64,147,103,77,149, -104,66,155,106,65,162,111,69,164,112,75,163,116,88,158, -118,82,154,116,74,154,115,73,156,116,77,153,113,83,153, -109,92,148,110,96,142,107,95,136,108,94,129,108,89,126, -104,79,118,101,84,109,96,83,93,88,78,72,76,75,47,59,66, -52,53,64,66,58,67,75,64,66,79,69,65,83,73,65,86,78,58, -86,82,60,98,86,54,113,94,46,117,98,45,115,99,53,112, -101,59,108,103,60,104,102,60,100,100,65,100,98,71,98,97, -71,99,96,69,100,98,67,97,99,65,160,163,153,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,177,180,176,122,147,119,93,124,86,96,117,79,100, -111,72,103,109,69,104,109,69,102,106,67,106,106,66,114, -107,63,115,111,63,117,111,61,120,112,64,118,111,69,121, -109,67,116,109,65,113,108,68,109,105,67,111,104,61,106, -99,72,98,94,72,95,90,74,91,83,77,90,78,77,89,74,74,83, -73,71,87,73,64,89,75,64,88,76,64,85,79,65,93,81,55, -101,87,48,108,90,50,108,90,54,110,92,56,118,92,64,120, -93,60,123,97,58,125,98,57,130,100,59,136,102,62,137,106, -60,134,101,70,134,104,70,138,110,70,142,107,75,142,109, -69,152,110,68,156,112,73,151,112,79,139,105,87,135,102, -84,136,102,81,136,103,80,132,101,78,133,101,78,133,100, -74,127,106,63,130,102,63,141,107,69,147,110,66,153,113, -67,144,109,79,144,109,67,150,114,67,153,117,67,158,117, -73,156,117,84,154,118,79,153,120,75,149,118,72,144,118, -73,135,113,74,128,109,80,127,106,85,125,102,86,124,103, -86,122,101,82,120,100,73,108,97,77,103,93,79,97,88,79, -84,80,81,75,68,82,66,62,76,62,59,68,64,62,62,67,65,60, -74,68,59,84,73,55,79,79,55,83,83,46,97,94,39,110,100, -41,115,98,51,112,100,58,110,101,60,108,103,63,103,103, -69,98,100,72,95,98,71,95,97,68,97,97,65,96,95,63,149, -150,141,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,173,178,171,119,146,113,93, -123,90,95,116,79,100,112,72,104,111,68,105,110,64,105, -110,60,109,111,58,116,111,49,114,112,54,118,113,54,120, -114,57,120,114,63,124,114,63,123,117,60,119,114,68,113, -108,72,114,107,70,111,105,73,105,101,78,99,95,76,95,89, -69,95,86,67,97,83,69,88,81,60,92,79,55,95,83,53,94,85, -51,90,84,57,98,86,56,103,88,58,107,88,62,108,88,69,108, -86,76,114,85,78,118,89,74,120,92,71,123,93,70,130,96, -71,134,98,72,132,97,83,135,100,80,133,102,74,133,104,70, -139,105,69,137,103,68,147,105,64,153,110,70,151,113,78, -140,108,87,134,102,86,134,100,82,132,100,77,127,97,72, -127,96,71,128,96,73,121,96,69,126,98,63,137,103,66,146, -109,68,152,112,67,145,112,73,146,111,72,150,111,82,150, -109,87,154,111,81,153,112,89,151,113,93,150,114,93,148, -114,92,140,111,90,132,107,89,124,103,85,122,101,81,122, -99,82,121,99,82,121,98,86,120,100,69,108,98,69,102,94, -68,98,91,71,88,85,75,81,77,70,74,73,66,69,69,60,67,67, -55,68,68,49,74,71,44,87,78,46,81,80,59,78,75,58,91,85, -57,107,94,52,117,101,48,115,105,53,114,106,57,112,108, -62,104,104,69,100,103,62,97,101,65,96,98,66,98,99,65, -99,99,63,138,141,119,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,184,185,184,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,162,174,160,103, -138,99,91,120,87,98,114,79,101,110,72,102,109,68,104, -108,63,109,110,62,114,110,59,122,112,50,121,112,55,118, -113,56,116,113,57,119,111,61,123,112,62,125,116,62,124, -115,72,118,110,75,121,108,73,122,106,76,116,101,77,109, -95,74,105,91,71,103,88,68,100,84,67,94,86,64,95,86,59, -104,88,57,107,86,54,106,86,59,110,90,61,111,88,60,111, -89,63,107,89,69,107,87,76,111,86,77,113,90,72,117,94, -70,119,94,68,123,96,67,127,99,70,120,94,78,119,98,74, -123,100,70,128,103,68,131,104,67,132,102,67,136,104,64, -141,107,68,139,108,74,130,103,81,122,100,84,116,96,77, -113,94,72,110,94,68,107,95,68,108,96,70,110,95,69,112, -98,62,122,102,63,130,104,63,138,108,63,140,108,70,141, -108,71,141,107,78,136,103,79,138,106,73,140,108,82,139, -106,85,137,105,86,134,105,86,131,101,84,128,97,80,122, -97,78,121,100,79,116,100,78,113,99,78,112,95,81,115,99, -64,105,98,68,99,94,69,96,90,70,90,83,73,79,78,70,75, -74,67,73,71,63,75,71,59,79,72,53,87,77,49,94,82,47,83, -82,58,75,74,54,85,80,54,106,89,47,120,100,46,116,104, -55,115,106,59,111,104,61,105,100,66,104,101,61,101,99, -64,100,98,65,102,98,65,102,97,61,117,114,85,181,181,181, -184,184,184,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,165,175,162,104,139,96,92,120,77,98,113,73,102, -111,72,103,110,71,105,109,69,108,109,63,115,110,58,125, -111,61,123,113,63,118,112,67,116,112,67,121,113,64,125, -113,70,125,112,74,123,113,77,120,112,74,124,112,67,128, -110,75,124,108,74,118,104,71,112,97,68,111,93,68,108,89, -68,97,86,71,100,86,72,106,87,68,111,91,63,114,94,60, -115,94,67,117,91,67,118,93,68,112,94,66,112,94,69,116, -93,71,118,94,71,119,95,71,118,93,69,119,93,69,121,95, -69,118,93,63,113,92,65,117,95,66,120,95,67,123,95,74, -125,95,76,128,96,72,132,98,73,131,99,79,122,95,89,113, -92,89,108,90,82,107,90,79,103,89,75,98,87,72,98,88,74, -101,89,72,101,89,70,112,93,70,121,96,67,129,100,64,133, -101,69,133,103,71,132,103,73,130,102,70,133,105,61,133, -105,73,132,104,72,130,102,74,126,98,76,127,97,77,131, -100,73,127,100,68,122,100,73,115,98,78,112,99,79,114,99, -73,116,100,66,107,99,74,99,92,79,95,87,78,93,85,66,84, -81,74,79,76,69,78,75,66,79,75,63,83,77,60,90,81,57,98, -87,57,86,86,61,74,76,51,85,81,47,109,92,34,123,103,41, -119,106,56,115,104,62,110,103,64,107,102,62,103,102,58, -100,101,63,99,98,63,100,96,60,103,98,58,110,105,64,142, -142,126,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,162,173,161,104,136,97,96,121,78,99,114, -69,103,111,66,106,109,66,107,108,64,112,108,60,121,112, -58,127,115,65,123,115,68,120,112,71,121,112,73,125,116, -66,127,116,70,122,114,74,122,115,73,123,115,68,126,116, -63,130,113,72,129,110,76,125,106,76,119,100,73,119,97, -74,117,93,76,109,90,79,112,89,78,114,91,74,114,93,67, -116,96,61,120,97,66,122,94,73,122,94,75,119,95,73,116, -94,73,121,94,71,123,97,72,121,98,74,116,94,74,112,91, -73,113,89,70,118,91,60,117,91,69,117,92,70,118,93,69, -119,92,70,116,90,72,120,92,68,123,96,70,122,96,75,112, -93,83,104,90,87,98,86,82,95,85,79,92,84,76,89,81,74, -91,80,74,93,82,70,93,82,70,103,87,71,111,91,69,120,96, -64,122,98,65,122,98,66,120,98,68,120,98,66,128,102,65, -123,101,74,123,99,70,125,100,71,121,96,70,121,94,71,127, -98,70,133,101,64,126,100,73,120,96,77,118,96,76,121,97, -65,119,97,62,114,99,69,106,96,78,96,90,78,96,90,69,93, -85,74,87,82,72,84,80,69,81,79,65,84,82,63,89,84,61,92, -87,61,83,86,65,74,75,54,88,81,48,113,94,37,123,104,45, -119,107,59,116,107,66,111,106,66,108,106,67,103,104,56, -101,103,61,98,100,63,99,99,61,100,99,58,107,107,65,130, -134,114,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,181,183,180,145,164,146,98,129,96,97,123,84,101,117, -70,104,113,66,107,111,67,110,110,64,114,111,61,123,115, -60,128,118,61,126,117,64,127,115,67,127,115,68,129,119, -69,130,119,69,124,118,73,124,115,71,127,116,68,128,114, -67,130,113,72,133,112,78,133,110,79,133,108,78,132,106, -78,127,103,77,123,97,76,123,98,76,123,98,76,119,95,71, -123,94,67,127,100,66,129,98,77,131,98,80,130,98,79,125, -96,77,129,95,74,129,98,75,126,99,79,118,94,80,111,90, -79,108,86,74,114,90,68,114,90,73,111,90,71,110,90,70, -112,92,67,113,91,68,112,92,65,111,94,69,109,93,76,105, -92,80,92,85,83,86,81,80,82,79,78,78,76,75,77,75,73,81, -75,71,83,75,68,86,77,66,94,80,67,100,82,65,111,87,61, -118,94,67,118,93,66,118,95,68,116,95,67,119,93,66,117, -93,71,120,94,72,123,96,74,121,93,72,122,94,71,126,96, -68,134,99,66,125,98,71,124,98,72,124,98,68,128,100,62, -125,102,67,121,103,72,112,100,74,101,93,72,99,89,73,98, -88,70,92,85,70,88,81,68,88,81,66,90,83,63,89,83,59,87, -85,59,81,84,64,80,78,58,95,83,53,116,94,44,126,103,53, -121,105,66,117,106,69,111,107,69,105,106,73,105,106,65, -102,106,66,98,103,65,97,99,64,100,101,64,106,104,68,112, -114,91,172,173,173,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,175,180,174,131,156,129,99,131,95,95,122,80,102,119, -69,105,115,70,106,112,70,109,111,68,115,112,64,123,115, -61,127,117,56,128,119,58,131,121,60,132,122,63,131,120, -69,134,123,66,130,122,71,129,118,69,130,115,64,134,116, -67,134,116,75,135,115,75,138,115,74,141,116,72,141,114, -66,140,113,62,139,110,64,133,108,68,133,108,72,128,102, -73,129,99,80,133,102,72,136,103,77,137,103,75,137,105, -73,134,104,71,136,100,74,134,100,76,128,99,77,120,94,76, -111,88,73,108,86,74,109,84,77,110,87,73,108,87,67,105, -86,63,104,86,63,106,87,67,106,88,74,104,88,81,97,84,82, -90,80,79,82,76,84,75,71,78,72,70,72,68,68,66,68,67,66, -73,69,68,78,71,61,80,74,60,88,77,64,95,79,61,106,84, -57,110,86,73,110,87,65,112,90,66,110,90,67,115,89,66, -118,95,53,119,95,57,121,96,63,121,96,62,124,98,61,129, -100,64,132,100,73,127,101,71,127,103,69,128,102,65,130, -102,68,126,101,84,122,100,79,115,100,72,106,96,66,104, -90,78,102,92,58,96,89,61,91,85,63,94,86,64,94,86,59, -92,87,57,86,84,62,83,84,58,91,88,53,103,92,47,120,98, -48,128,104,56,123,108,65,119,109,66,113,110,64,105,107, -68,105,107,68,103,107,66,100,104,65,97,100,63,99,99,63, -105,102,66,113,112,86,149,156,151,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,184,185,184,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,184,185,183,175,180,173,137,160,135,99,129,93, -100,121,80,104,117,69,106,116,69,106,112,69,111,112,68, -118,114,66,123,115,63,126,118,58,131,121,61,133,121,62, -134,122,63,132,122,68,134,123,65,134,120,66,135,118,66, -137,121,66,137,121,69,133,118,74,135,117,72,139,117,70, -142,116,68,147,117,68,152,117,65,154,113,66,149,113,71, -146,111,73,142,108,77,136,103,81,145,102,72,148,106,77, -147,105,75,144,104,72,138,107,75,136,105,78,132,103,78, -127,101,77,120,96,75,111,91,72,106,88,74,109,82,75,107, -86,72,106,87,68,103,86,64,97,85,61,92,83,64,91,82,71, -88,79,76,83,76,76,79,75,73,72,68,79,68,64,73,68,63,66, -68,64,63,67,63,63,68,63,64,75,65,57,79,67,58,85,72,62, -92,75,60,101,80,56,99,82,69,100,83,60,104,85,60,105,83, -63,109,85,65,118,96,53,118,99,58,116,97,59,119,97,59, -123,100,60,125,101,64,123,99,70,128,99,70,133,102,72, -131,101,67,130,100,71,136,96,83,132,98,81,126,98,75,120, -96,72,115,89,81,107,93,64,104,90,66,101,86,66,103,87, -65,100,86,60,98,89,61,93,87,65,96,85,61,111,90,56,122, -98,52,125,106,55,125,111,61,119,111,65,115,108,63,114, -108,62,107,105,65,104,106,64,105,105,64,105,103,64,100, -100,62,98,99,61,101,101,64,112,110,79,139,141,138,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,184,185,183,185,185,185,185,185,185,155,169, -155,106,132,105,99,120,86,107,118,74,107,117,66,108,115, -63,114,116,65,120,117,68,126,118,70,129,120,65,133,122, -68,137,124,70,139,126,70,136,127,70,138,127,65,139,125, -64,140,124,65,139,124,69,140,124,72,136,121,79,136,117, -78,141,118,75,144,118,70,151,121,72,156,121,73,164,124, -63,159,124,70,154,120,72,150,117,74,147,113,78,156,112, -77,157,115,77,155,113,72,151,113,68,141,110,74,137,107, -80,133,103,87,128,100,86,119,95,75,112,93,73,106,87,78, -113,85,81,109,85,81,106,85,84,102,83,83,95,80,85,88,74, -87,83,73,72,79,71,68,75,69,69,71,66,72,67,63,70,65,60, -67,65,59,66,66,59,66,64,59,63,65,59,59,72,61,55,78,65, -56,83,68,61,88,69,62,98,75,57,96,79,59,99,81,61,103, -83,56,105,84,55,110,84,68,116,89,83,115,93,78,116,95, -70,122,99,69,126,101,72,125,100,75,124,99,74,132,104,64, -140,110,67,137,107,68,135,105,71,143,106,61,137,103,77, -132,101,81,127,101,76,125,100,70,114,97,77,107,92,70, -107,91,67,111,95,66,106,93,59,101,93,57,97,94,55,105, -97,48,122,103,45,135,112,45,135,117,55,130,115,81,117, -111,68,115,109,67,117,110,68,110,109,61,107,109,71,105, -103,73,106,102,74,103,101,70,98,98,65,101,100,67,108, -106,74,153,155,149,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,184,185,185,185,185,185, -185,185,185,185,156,169,155,109,129,104,104,119,86,109, -117,74,112,114,65,116,113,64,121,115,66,123,115,67,129, -116,70,135,119,68,132,120,67,139,123,71,141,125,70,139, -126,71,137,127,66,142,126,66,147,126,69,146,126,73,146, -125,75,143,120,81,141,117,79,140,117,74,144,120,71,147, -124,72,150,126,72,156,128,64,159,124,70,157,122,75,154, -121,79,153,118,83,159,116,80,157,117,78,153,119,75,150, -118,73,143,110,76,142,107,81,133,102,87,126,97,83,124, -97,78,118,93,75,109,87,78,103,85,76,99,86,77,95,84,79, -88,80,76,84,77,78,81,71,80,76,71,67,75,70,65,69,65,64, -62,60,65,63,57,64,61,54,60,61,54,60,62,55,61,62,54,59, -65,54,55,67,59,50,73,60,51,80,65,57,84,68,58,91,73,52, -94,76,56,97,77,57,102,81,54,108,88,58,102,89,68,107,88, -79,110,88,72,114,91,66,120,96,66,127,98,70,135,98,77, -135,100,79,148,105,72,154,110,72,149,107,74,143,107,77, -143,114,68,141,108,82,139,103,86,139,104,83,137,106,79, -130,97,84,122,94,78,121,95,75,122,97,72,119,94,65,118, -95,65,121,95,66,126,102,60,135,111,55,142,117,52,139, -120,60,123,116,79,122,111,70,120,112,71,117,111,69,117, -108,64,113,107,72,106,104,74,102,102,72,101,101,69,96, -99,66,95,101,66,97,104,66,151,155,145,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,184,184, -186,181,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,175,181,173,129,154,121,103,129, -81,104,122,74,109,117,73,114,115,72,119,116,70,122,116, -66,125,118,63,131,121,62,137,123,63,134,124,61,140,125, -72,142,124,79,139,124,79,138,127,69,145,128,68,150,129, -70,149,130,70,150,132,68,147,127,70,147,126,70,148,125, -73,146,122,77,148,122,80,149,122,80,155,123,82,163,127, -78,161,126,82,157,122,85,155,122,79,164,124,70,160,120, -80,157,120,88,151,115,90,147,111,91,142,105,93,133,100, -94,124,94,93,121,90,97,117,87,99,109,83,98,100,77,98, -92,74,94,86,72,87,80,71,77,76,69,70,75,67,62,70,64,60, -68,63,61,64,60,62,59,57,61,58,53,54,59,54,50,60,54,48, -60,55,48,61,55,47,64,56,47,65,56,48,72,60,49,77,63,51, -81,65,50,87,68,49,89,71,53,95,74,52,101,79,56,106,85, -60,100,88,57,104,89,56,110,91,59,116,93,64,119,94,65, -126,98,64,136,102,65,139,106,70,153,112,73,159,115,79, -156,115,80,150,114,83,148,116,81,147,114,90,146,114,82, -145,115,70,141,114,73,137,111,68,132,110,67,127,107,64, -129,108,63,131,112,58,129,112,50,132,112,55,136,115,63, -142,117,71,145,118,74,140,119,76,123,118,71,126,116,72, -124,117,74,119,112,73,120,110,76,116,111,74,110,109,74, -104,105,70,101,103,64,97,100,62,95,99,66,98,102,71,156, -158,150,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,184,185,184,182,186,180,185,185,185,185,185,185, -185,185,185,185,185,185,179,181,178,174,174,168,159,151, -133,137,119,89,127,113,79,121,114,75,117,113,74,119,113, -73,122,114,70,125,116,68,128,118,65,131,120,63,129,123, -62,136,124,62,144,125,73,143,122,77,143,123,78,145,127, -72,148,131,71,150,131,72,150,130,71,149,133,70,146,133, -76,149,131,75,154,130,78,150,125,79,148,122,80,148,123, -79,153,123,78,161,125,75,164,125,81,160,121,85,160,122, -80,162,125,71,157,122,80,153,119,84,150,115,87,145,112, -89,138,109,92,127,105,93,117,100,93,106,91,90,97,85,88, -90,81,87,80,76,87,76,68,83,71,64,74,69,63,66,72,61,62, -70,61,55,66,60,55,63,58,56,57,57,57,54,53,57,58,51,53, -62,51,50,64,52,49,64,52,48,64,52,48,65,53,47,64,54,47, -69,60,46,75,63,48,76,63,47,81,67,45,83,71,49,86,74,49, -91,78,52,95,81,53,98,84,53,102,86,53,106,88,55,112,92, -60,120,95,64,125,95,60,139,101,63,148,103,71,153,109,70, -159,113,75,162,114,80,162,114,86,164,114,85,157,113,94, -153,114,84,154,117,75,151,115,77,155,114,76,150,113,77, -145,112,77,142,114,74,141,117,68,140,122,63,136,124,65, -131,122,67,133,119,70,136,117,70,135,115,71,128,112,71, -125,116,73,124,116,75,122,112,76,120,109,78,116,112,75, -109,110,76,103,106,70,100,103,64,98,99,62,97,96,64,105, -106,77,159,159,154,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,184,185,184,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,184,185,183,183, -186,183,184,185,184,184,185,184,179,185,174,176,183,178, -171,180,177,168,174,173,164,170,166,154,159,155,139,137, -133,129,117,91,127,112,65,125,118,60,121,118,59,119,116, -67,121,116,66,125,118,64,126,117,62,130,121,63,134,124, -63,131,125,65,137,127,62,144,129,65,145,127,65,145,128, -69,150,133,67,151,135,66,153,135,72,155,135,81,151,133, -86,149,136,76,150,133,71,154,132,74,156,132,78,153,129, -79,152,127,78,153,125,75,162,125,79,167,130,78,166,130, -75,165,127,80,165,126,82,159,123,90,155,119,90,151,116, -89,146,112,94,139,109,96,125,101,101,111,90,104,99,80, -104,89,72,99,80,66,94,67,60,85,65,56,78,62,56,66,62, -57,54,67,58,48,67,59,49,64,58,51,61,56,55,55,54,55,54, -53,51,58,54,43,63,56,37,66,57,39,68,58,43,67,56,46,67, -56,49,66,54,59,68,57,57,72,58,57,75,60,58,79,63,56,81, -65,60,85,69,60,89,72,64,92,75,65,96,78,69,100,80,70, -104,85,64,111,90,60,118,95,59,126,97,57,139,103,60,151, -110,60,156,115,59,162,120,62,167,122,67,168,123,77,171, -124,79,165,124,83,162,124,82,162,124,80,158,122,78,161, -122,72,160,125,76,156,125,79,152,124,81,147,122,84,144, -122,86,136,121,79,127,117,73,130,116,71,136,118,69,138, -120,70,136,120,79,130,121,74,126,120,73,125,117,72,125, -116,73,119,116,70,113,115,74,107,110,76,102,105,74,100, -100,74,100,98,75,111,110,85,150,151,143,179,180,181,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,184,185,184,182,186, -182,180,187,177,177,187,173,181,186,177,181,185,176,170, -184,163,150,174,159,141,153,154,134,132,140,136,127,129, -137,123,125,128,110,109,121,98,71,123,103,58,125,113,58, -126,114,60,121,114,67,121,116,67,124,117,65,125,117,64, -132,122,66,138,123,66,140,121,67,140,125,62,142,128,63, -144,129,65,145,130,70,151,133,69,154,134,67,154,135,72, -151,134,77,147,130,81,153,127,73,158,129,71,160,130,74, -159,129,77,156,128,80,155,128,79,157,126,76,154,125,75, -157,126,71,159,128,70,162,126,77,164,124,78,156,122,86, -151,120,88,146,116,88,138,111,91,130,105,89,116,97,95, -97,86,96,78,72,90,68,64,86,64,55,81,57,49,73,54,46,66, -55,47,57,58,50,48,64,52,43,66,55,44,67,54,48,66,53,54, -62,49,54,65,46,51,70,53,46,69,59,42,70,63,44,70,63,48, -70,61,50,69,60,53,64,56,60,61,59,56,63,59,55,65,61,54, -70,62,51,71,64,55,76,65,54,79,68,56,80,69,57,83,72,59, -89,75,61,95,79,55,106,85,53,118,91,55,127,94,55,138, -100,57,145,109,56,153,112,55,161,118,60,164,119,66,167, -119,75,172,121,79,172,122,84,170,123,84,168,124,81,167, -125,80,167,127,75,165,127,77,162,126,80,157,124,82,148, -119,81,143,119,83,138,121,80,134,121,78,134,124,77,134, -125,73,136,125,71,130,119,77,129,119,73,130,119,73,128, -120,74,127,117,74,123,116,71,114,114,74,107,109,75,103, -104,74,101,100,74,101,99,75,111,109,84,147,148,137,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,184,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,183,186, -183,181,186,181,181,186,181,182,185,182,184,185,184,185, -185,185,172,180,178,140,163,160,131,146,137,122,125,107, -121,111,90,122,106,85,119,99,78,122,96,65,128,106,65, -125,112,61,128,116,62,124,119,63,124,120,62,127,122,63, -131,124,63,135,125,64,142,126,69,145,127,74,144,128,73, -146,132,71,148,134,70,149,134,72,152,131,84,153,131,83, -153,134,76,151,137,69,149,135,71,155,131,70,159,132,69, -160,133,66,161,135,67,160,134,74,157,129,85,158,126,85, -155,124,88,158,125,86,159,126,84,163,126,81,164,123,81, -158,123,90,152,120,93,147,116,94,137,109,95,127,99,94, -112,92,98,93,81,95,70,64,81,60,57,71,58,52,62,54,48, -59,53,46,57,54,47,56,58,49,52,65,50,53,65,52,48,65,52, -46,65,55,37,64,58,24,69,59,23,78,64,43,77,67,50,74,67, -51,74,67,51,74,67,50,75,67,49,68,64,46,60,59,51,62,57, -60,62,55,64,66,56,62,66,56,65,70,56,60,71,59,56,72,59, -55,73,60,60,78,62,54,85,67,53,97,73,50,113,85,48,127, -94,46,138,101,47,143,106,48,153,111,56,161,116,65,165, -119,69,170,123,69,175,125,78,174,127,76,173,129,80,171, -128,84,170,128,86,169,128,77,166,127,79,164,128,81,160, -129,81,156,130,80,152,132,82,147,132,82,141,130,82,138, -128,81,135,128,78,138,126,78,134,125,75,132,125,68,132, -124,71,129,123,72,129,122,71,125,118,75,114,115,78,106, -109,75,105,107,74,103,105,73,102,102,76,109,109,86,131, -131,120,182,182,183,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,184,186, -184,180,188,181,181,188,181,185,185,185,185,185,185,184, -185,185,185,185,185,161,179,173,138,147,151,131,131,128, -128,114,101,129,109,91,130,104,86,127,101,81,122,103,70, -120,109,64,122,115,61,126,119,63,126,120,64,126,119,62, -129,118,62,135,121,64,141,124,66,145,126,71,147,125,75, -145,127,72,150,131,72,154,132,73,156,133,75,154,132,85, -155,131,84,156,131,74,159,134,69,158,132,71,156,134,71, -154,134,67,155,136,64,159,136,65,159,132,72,156,126,84, -156,124,84,154,121,86,156,122,84,155,121,80,156,123,77, -160,123,79,157,121,89,150,117,90,141,111,88,135,103,90, -119,97,89,102,88,91,85,75,88,70,61,78,63,56,71,57,55, -63,49,52,59,47,50,57,51,50,56,54,51,51,56,52,50,54,54, -44,62,52,44,72,52,38,82,61,33,85,70,35,82,73,49,78,71, -53,75,69,52,74,69,52,75,69,51,78,70,51,78,69,53,76,63, -60,63,55,62,53,55,61,49,57,57,51,54,58,53,54,53,54,55, -47,55,55,44,56,52,48,59,54,41,65,58,39,76,63,35,97,78, -37,116,89,39,134,98,43,147,105,47,152,110,52,158,116,62, -162,122,68,168,126,69,168,126,79,166,129,74,167,132,79, -163,129,82,166,125,82,166,127,76,165,128,80,161,128,80, -158,130,80,156,131,80,154,130,82,148,130,81,146,126,80, -143,124,79,142,124,78,141,123,77,135,124,74,135,125,69, -134,124,72,132,122,72,133,121,71,125,120,76,120,114,81, -114,109,79,110,106,75,105,103,73,102,103,77,108,108,85, -144,146,133,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,183, -185,184,181,186,182,183,186,184,185,185,185,185,185,185, -178,186,183,167,183,181,134,166,174,126,142,134,129,133, -108,132,121,90,135,116,86,137,111,86,135,110,80,126,108, -75,123,111,73,123,115,69,126,119,65,127,122,63,129,121, -63,133,122,64,140,127,66,143,126,66,147,128,72,151,131, -70,148,131,75,153,134,78,156,135,72,157,137,66,156,137, -71,156,134,74,159,135,76,161,137,73,163,139,75,160,140, -68,159,142,64,160,141,66,162,140,74,163,136,79,161,133, -81,160,130,79,157,126,81,157,123,86,156,119,90,156,119, -92,160,123,81,156,121,80,150,117,84,139,109,85,134,103, -83,118,96,87,101,88,81,86,79,74,76,71,72,68,64,72,60, -57,75,50,50,76,46,46,74,50,46,73,52,44,67,53,45,61,51, -50,44,61,60,13,81,69,18,98,79,39,95,80,48,88,78,59,84, -76,58,82,76,58,82,75,62,82,74,64,84,74,64,84,74,61,88, -78,53,77,74,51,58,62,55,46,50,83,48,44,89,49,46,73,50, -48,62,50,47,54,54,48,50,57,51,49,61,52,43,71,56,41,90, -67,45,111,80,46,131,93,44,146,105,40,154,112,52,159,120, -55,164,127,57,172,130,72,173,131,85,169,131,83,170,134, -84,167,134,80,168,129,71,168,128,76,167,129,79,165,132, -80,158,130,76,156,131,79,155,130,82,148,132,72,149,133, -73,148,131,75,147,130,74,148,132,73,140,129,83,139,127, -86,138,126,84,136,125,80,135,122,80,129,122,87,123,118, -79,119,115,76,113,109,73,107,107,71,103,106,68,108,112, -72,138,144,127,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,184,185,184,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,184,185,184, -181,187,181,184,186,184,185,185,185,185,185,185,184,186, -185,171,183,181,151,172,172,133,145,166,132,124,124,138, -119,99,140,118,89,139,114,86,139,110,85,132,109,79,123, -110,76,122,110,72,124,113,68,124,119,64,124,120,61,126, -123,64,129,124,65,134,126,64,138,128,65,141,128,70,145, -130,68,146,130,74,151,131,76,154,133,70,163,136,67,161, -137,73,163,134,76,163,134,77,162,136,73,161,138,75,161, -141,70,162,142,66,165,142,69,164,139,75,162,135,79,159, -131,80,155,129,77,152,127,80,152,123,85,151,118,87,150, -115,87,152,120,78,147,120,75,144,117,83,132,111,85,124, -105,82,112,93,84,101,85,80,92,79,77,82,71,74,74,65,74, -63,56,75,45,49,74,39,45,71,39,44,68,39,42,60,42,41,54, -63,41,38,80,62,20,95,82,31,98,88,44,97,86,53,97,83,64, -91,80,62,89,80,63,85,77,63,85,76,66,87,76,65,91,75,63, -95,80,56,97,82,62,85,73,69,70,52,89,29,45,83,28,47,66, -34,46,56,41,45,50,46,46,47,52,48,46,61,50,42,71,55,40, -82,63,39,97,75,38,115,89,36,141,101,36,148,108,47,158, -117,53,166,126,57,169,129,70,166,126,78,165,127,79,163, -130,78,162,131,76,160,130,70,157,125,71,153,126,73,152, -126,72,153,125,71,152,124,73,151,124,77,154,128,72,156, -130,74,154,129,76,151,130,75,150,131,73,143,126,83,141, -122,84,137,119,79,133,121,76,136,121,79,128,117,82,122, -118,77,119,116,77,114,109,73,112,105,71,111,103,69,109, -106,67,112,112,81,147,147,152,184,184,184,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,184,185,184,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,184,185, -184,182,187,183,185,185,185,185,185,185,185,185,185,185, -185,185,176,184,181,145,167,161,131,145,140,131,122,104, -139,119,85,145,122,82,143,119,77,143,115,77,134,113,77, -123,111,74,123,112,68,127,118,66,128,123,66,128,124,62, -128,125,64,131,125,68,134,127,69,139,128,71,140,128,75, -144,130,74,145,130,75,149,130,72,155,134,68,164,137,70, -163,138,79,165,137,76,166,137,81,164,137,80,161,137,74, -159,136,76,162,137,78,167,140,82,165,138,81,163,135,82, -159,130,87,155,127,91,151,126,91,151,122,89,149,116,83, -150,113,85,150,116,85,147,119,81,143,116,88,134,111,95, -120,103,90,112,95,76,105,90,75,99,87,73,92,82,65,86,79, -60,78,75,57,58,66,51,48,58,47,45,52,42,49,52,40,57,55, -38,88,66,43,98,79,47,102,87,51,100,89,53,100,89,56,103, -89,49,100,89,49,97,87,54,95,85,59,92,82,60,94,84,59, -100,85,59,103,88,56,104,91,58,99,89,58,93,82,59,46,67, -53,29,49,57,30,40,62,37,38,64,44,39,62,51,44,58,62,50, -46,74,57,38,88,68,39,98,75,41,112,84,46,138,97,50,154, -113,56,163,121,61,165,124,63,167,127,65,164,127,74,162, -127,74,161,127,82,159,126,84,158,126,79,156,125,74,151, -123,77,149,122,79,154,125,82,152,123,77,150,123,73,152, -127,71,155,130,74,155,131,76,153,133,76,152,133,75,147, -129,85,145,127,85,144,127,84,137,123,78,136,121,78,131, -124,67,127,124,72,123,120,76,119,115,76,116,110,74,114, -107,72,110,104,69,105,103,75,107,108,94,140,144,136,184, -184,184,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -184,185,185,182,186,183,185,185,185,185,185,185,185,185, -185,185,185,185,177,183,182,134,160,152,125,134,125,131, -118,99,138,119,89,143,120,83,145,120,78,143,117,78,135, -113,82,126,111,79,124,113,72,126,117,67,126,119,68,131, -124,65,134,127,66,135,126,67,138,127,68,140,127,70,140, -126,74,141,128,72,145,126,74,149,128,73,154,133,71,162, -135,72,161,136,79,161,134,71,165,136,76,165,138,77,167, -137,75,167,136,78,169,138,81,169,140,82,167,140,82,164, -138,85,160,134,91,155,128,91,152,125,88,150,121,88,149, -117,86,148,114,87,147,111,84,144,114,80,139,113,87,127, -107,91,118,102,86,119,93,69,118,91,69,114,89,67,111,88, -64,107,87,62,102,87,63,93,84,63,84,80,61,81,78,59,83, -78,58,91,79,58,97,83,63,98,87,58,101,88,55,103,89,55, -106,89,59,111,91,55,113,93,56,111,94,60,107,91,61,106, -90,63,106,90,65,104,91,64,107,94,59,108,94,60,105,93, -62,102,90,65,89,84,67,73,69,72,61,55,70,55,45,64,56, -43,55,62,48,50,72,56,41,86,66,38,99,77,40,105,83,43, -111,90,47,125,102,48,140,115,55,150,121,61,157,122,65, -164,123,69,158,124,76,155,123,78,150,123,86,145,119,84, -144,117,76,146,119,76,146,118,76,145,117,76,145,118,75, -150,123,75,151,126,72,150,128,71,152,131,73,153,132,73, -154,134,74,155,135,78,153,133,83,149,129,83,148,128,80, -145,126,79,138,124,79,133,126,69,131,123,75,126,119,77, -121,114,75,118,110,75,116,108,74,110,105,69,107,104,71, -104,101,74,115,111,93,154,149,139,184,184,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,184,185,185,181,187,182,181, -187,183,183,185,184,185,185,185,185,185,185,171,181,176, -117,152,137,123,131,115,132,123,104,132,117,97,138,117, -87,145,121,80,145,122,82,138,116,90,126,111,82,123,113, -73,126,119,71,127,121,76,132,124,73,135,126,71,139,128, -69,144,130,68,145,128,67,146,128,73,145,130,72,149,128, -74,151,127,77,155,131,77,163,135,70,160,136,78,161,135, -70,164,138,73,165,138,76,169,138,80,167,138,81,168,140, -79,169,142,79,168,143,82,163,140,84,161,136,87,161,130, -89,158,126,88,157,123,89,152,118,90,145,114,98,146,111, -93,140,111,90,134,110,96,121,102,95,113,96,90,124,95,63, -128,99,58,127,101,58,126,102,58,123,102,60,118,100,63, -110,96,68,105,93,68,99,91,64,95,89,62,98,88,63,98,89, -60,101,90,57,106,90,58,111,92,60,116,94,63,120,97,62, -122,100,67,121,101,70,118,100,69,117,99,68,117,98,69, -114,97,71,116,98,72,116,97,75,111,94,78,105,91,78,100, -87,81,96,86,76,94,82,70,92,78,62,96,78,52,98,80,50, -103,83,49,110,87,49,118,94,50,122,97,49,123,100,54,125, -103,63,129,108,68,138,111,71,148,114,73,158,118,72,155, -119,80,149,118,83,142,115,88,137,111,85,137,110,79,142, -111,82,143,113,79,146,117,78,148,120,76,153,126,75,155, -130,75,153,130,78,153,130,77,156,134,79,156,135,78,155, -134,81,152,134,80,153,133,75,152,132,77,148,131,79,141, -127,76,137,127,73,135,123,80,131,119,81,126,116,78,123, -113,79,119,110,82,111,107,74,108,105,68,107,100,60,117, -103,66,133,116,93,156,149,147,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,184, -185,184,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,183,187,184,185,185,185,185,185, -185,182,185,183,180,185,181,160,179,168,112,149,130,126, -136,109,135,125,100,133,120,92,138,120,89,143,121,86,139, -121,86,134,117,85,125,114,77,124,116,70,126,119,66,129, -123,70,137,127,67,140,129,67,143,130,65,146,132,62,146, -132,61,149,132,70,147,131,73,152,131,67,155,130,71,157, -131,72,166,135,63,164,135,73,163,136,75,165,138,79,166, -136,78,168,135,80,167,138,88,168,140,86,171,142,86,171, -141,86,168,139,82,167,138,77,168,131,81,161,127,89,162, -126,89,155,120,86,142,114,92,145,111,93,136,110,91,130, -108,94,123,103,93,113,96,93,127,97,54,136,106,54,139, -111,58,140,115,59,137,114,57,134,112,61,126,107,66,119, -105,70,110,100,63,106,97,58,108,94,58,112,96,53,113,97, -49,119,98,51,124,101,52,131,105,52,136,109,56,135,109, -65,132,107,71,129,106,70,129,107,67,132,111,66,131,109, -70,128,107,71,124,105,75,117,100,78,108,98,78,105,92,79, -103,91,73,104,89,63,109,91,53,120,96,48,127,100,54,129, -102,54,131,104,54,136,108,55,139,111,58,139,111,65,131, -108,77,125,107,81,134,110,84,142,111,83,146,113,83,144, -112,86,142,114,81,139,110,81,137,107,79,141,111,70,146, -114,73,146,116,78,147,117,77,150,121,72,152,125,67,153, -128,69,152,128,78,154,129,76,159,135,80,158,135,79,156, -134,79,154,133,79,158,134,77,157,133,83,149,129,85,146, -128,84,143,127,78,138,124,80,135,122,80,131,120,78,126, -116,78,120,111,79,112,107,75,110,105,73,122,108,62,135, -111,57,139,110,82,144,122,108,157,156,156,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,183, -185,183,184,185,184,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,184,186,184,185,185,185,185,185, -185,182,185,183,175,185,176,149,175,158,118,148,127,130, -135,106,141,126,96,137,122,89,138,120,90,138,119,90,136, -118,89,127,115,87,124,111,75,127,114,69,130,119,65,132, -122,66,138,127,64,140,130,63,143,131,63,146,132,61,147, -133,61,148,132,66,148,130,68,149,131,62,153,131,69,155, -130,71,162,133,67,166,133,72,167,135,77,169,135,79,171, -137,79,173,137,83,172,138,91,173,137,88,176,137,87,176, -137,85,177,139,83,176,142,80,171,138,87,163,131,93,161, -126,90,162,125,91,154,121,96,145,114,94,137,111,89,133, -107,90,127,101,89,116,91,88,134,97,55,148,108,57,153, -115,61,155,120,61,152,121,59,149,121,64,142,120,68,127, -115,75,119,107,69,120,104,62,124,102,60,131,106,57,129, -109,55,131,110,55,137,112,54,147,115,52,153,117,58,151, -117,68,147,114,72,145,114,70,144,114,65,148,117,64,151, -116,69,145,115,70,141,111,72,134,106,74,123,102,78,118, -96,78,114,94,72,115,94,63,119,97,53,130,104,50,146,110, -53,149,114,56,153,117,59,155,119,62,155,119,65,151,119, -73,137,113,80,120,105,82,127,106,88,133,106,87,133,104, -86,133,102,85,137,106,80,141,108,82,142,106,79,145,110, -71,148,113,72,149,115,77,150,115,73,157,121,70,160,124, -68,162,127,72,161,127,78,164,129,76,164,133,79,161,134, -79,161,135,78,159,134,81,159,136,80,158,136,85,150,133, -85,145,130,86,144,128,82,142,127,84,137,123,81,133,119, -77,131,116,75,125,113,74,115,109,76,113,107,78,132,118, -74,143,120,65,143,115,81,149,123,97,156,145,140,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -184,186,184,184,185,184,184,185,184,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,186,185,182,186,183,185, -185,185,185,185,185,174,185,176,139,172,153,118,149,130, -135,138,114,145,129,102,140,125,92,138,119,93,137,118,93, -135,117,85,122,110,87,124,111,68,128,118,58,130,122,53, -133,124,60,139,129,65,141,131,68,144,133,71,147,133,71, -151,133,70,152,134,69,153,136,71,154,136,71,157,135,71, -159,134,72,163,133,75,164,133,78,167,134,79,171,136,78, -173,138,77,172,138,79,173,139,83,175,138,84,178,139,81, -180,142,78,179,143,78,176,141,84,170,140,78,167,137,77, -166,134,75,165,130,77,157,124,89,150,119,92,142,115,87, -137,110,88,129,102,91,123,96,94,138,98,69,153,111,68, -161,120,70,163,125,70,159,126,67,156,128,68,148,127,68, -133,120,71,127,115,66,131,116,59,139,120,55,146,122,55, -144,125,57,146,124,56,149,125,53,161,128,54,168,132,63, -164,131,68,159,127,71,155,123,70,156,123,69,158,124,67, -162,124,68,154,121,69,153,119,72,148,117,74,137,112,77, -131,109,77,126,108,64,127,107,61,132,109,59,141,115,49, -157,123,43,163,130,45,166,133,50,169,133,60,166,128,69, -159,124,85,141,112,99,119,100,91,123,100,86,130,102,77, -131,101,72,133,101,72,135,104,73,138,105,75,141,107,73, -146,110,71,151,115,66,152,117,65,156,122,65,163,127,66, -165,129,66,166,130,70,165,130,78,167,130,84,166,132,83, -164,137,79,165,139,76,159,135,84,159,136,89,158,136,88, -151,134,82,146,131,83,146,129,81,144,128,81,140,125,79, -136,122,77,135,121,76,130,118,75,119,113,78,116,112,78, -133,120,74,144,123,62,150,125,62,153,128,80,155,140,113, -172,174,174,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,184,186,184,183,187,183,184,186,184,184,185,184, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,184,186,184,183,186, -184,185,185,185,185,185,185,166,183,170,124,165,143,117, -148,129,135,138,115,144,133,105,144,129,96,136,120,93, -131,115,89,131,113,80,123,107,84,122,111,65,128,118,56, -132,124,52,134,125,59,140,126,63,139,131,67,139,134,70, -142,134,70,148,135,71,155,135,72,155,137,75,154,139,74, -155,137,72,156,137,71,160,136,74,165,134,79,166,137,81, -169,139,79,171,139,78,173,138,80,175,136,83,176,135,83, -176,136,79,176,138,75,174,140,75,170,138,80,177,137,75, -172,138,75,166,141,76,159,138,76,155,127,88,154,119,91, -142,117,87,137,113,90,130,104,91,120,96,93,130,100,68, -151,111,68,163,121,72,164,127,72,161,129,70,160,130,70, -154,130,71,147,124,75,142,120,69,145,121,63,153,125,59, -158,129,61,160,132,63,164,134,64,170,137,62,181,139,63, -185,145,74,177,144,79,171,141,82,167,135,81,169,137,82, -167,138,78,161,136,74,163,130,77,165,129,81,163,126,83, -163,119,87,146,122,86,139,121,71,142,119,69,146,115,63, -161,120,55,168,132,50,171,139,49,173,143,55,171,141,62, -167,134,72,161,127,88,131,114,99,114,96,86,116,97,80, -123,101,73,128,104,70,132,100,70,133,102,71,138,105,74, -140,107,72,148,110,71,154,120,68,160,124,71,162,126,69, -162,129,66,166,132,66,170,131,70,170,129,78,167,125,83, -170,129,83,171,132,77,173,134,75,171,135,87,168,132,89, -164,131,87,159,131,84,155,126,84,154,126,79,151,128,80, -148,125,80,143,121,78,140,120,77,134,118,77,124,114,79, -118,112,78,130,116,70,144,123,60,152,127,61,155,124,74, -159,139,113,174,172,174,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,183,186,183,182,186,182,183,186,183, -184,185,184,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,186, -185,185,185,185,185,185,185,179,185,179,147,180,155,110, -156,130,114,144,123,133,137,111,142,130,104,142,129,91, -138,124,86,133,119,82,135,119,67,130,116,79,126,115,69, -129,118,62,134,125,58,137,129,54,143,131,57,142,135,63, -139,134,65,143,135,68,151,137,72,159,138,76,157,138,82, -156,140,81,157,138,80,158,138,79,161,138,72,166,135,78, -167,138,78,170,139,78,172,141,78,175,140,84,178,140,80, -179,140,76,179,141,73,179,143,74,175,142,76,172,141,82, -181,141,88,177,141,90,166,137,88,157,134,87,158,130,92, -160,128,82,147,123,90,138,113,92,131,106,93,123,100,92, -128,96,78,148,108,71,165,124,75,165,128,76,163,131,75, -163,133,68,156,133,67,151,130,72,149,129,67,152,130,60, -159,133,59,165,139,61,168,142,59,172,144,61,179,147,60, -191,153,62,195,157,79,190,159,86,183,154,87,180,149,88, -181,149,89,179,149,90,170,145,86,173,141,80,174,141,76, -174,141,72,179,141,73,159,140,74,150,136,73,153,132,68, -161,132,68,176,134,78,181,142,79,181,145,82,180,145,87, -175,141,87,171,136,86,163,128,97,128,105,128,113,92,98, -117,97,87,121,98,74,125,100,66,132,102,69,136,106,70, -141,109,71,144,112,71,154,117,72,158,124,72,162,128,62, -167,134,61,168,137,64,170,137,72,175,136,83,176,133,94, -173,131,95,173,133,88,174,134,82,175,136,83,172,137,84, -169,137,69,167,139,72,161,136,73,157,133,70,158,133,70, -155,132,79,151,129,86,147,124,88,141,120,83,136,120,79, -126,117,82,119,113,77,133,119,72,145,122,66,150,123,70, -155,122,80,154,128,102,158,153,149,169,170,172,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,183,186,183,181,186,181, -181,186,181,183,186,183,184,185,184,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,178,186,179,142, -178,151,110,141,120,122,129,115,139,125,104,151,120,99, -155,123,89,147,119,85,140,116,82,145,117,71,132,116,81, -124,116,70,126,120,63,133,126,58,138,130,55,145,131,57, -148,134,64,147,136,69,147,136,71,152,139,73,156,137,74, -153,134,78,160,135,80,163,134,81,166,133,79,169,136,74, -173,135,79,178,134,79,178,137,80,178,140,81,176,138,85, -180,141,83,175,143,78,173,144,75,173,143,74,174,141,76, -174,139,83,176,140,85,173,141,88,170,139,91,164,133,91, -159,127,93,160,129,85,151,121,93,145,115,97,135,109,97, -126,100,93,123,98,78,141,106,65,158,118,67,161,122,70, -163,125,70,166,129,67,159,129,68,154,127,71,156,126,68, -160,127,62,170,130,62,174,139,65,177,143,64,185,145,66, -191,152,68,197,164,72,199,172,91,192,172,97,185,172,101, -179,169,102,178,165,101,179,161,101,176,154,98,179,147, -90,185,150,89,183,151,83,184,149,80,171,144,84,165,141, -84,162,140,79,165,142,77,170,144,82,181,143,80,183,144, -82,184,141,86,180,136,87,170,134,86,149,128,93,114,100, -119,113,95,98,123,98,88,130,97,77,138,99,71,147,103,75, -148,102,73,152,105,72,157,110,74,163,117,75,170,124,76, -172,132,69,176,137,68,176,138,70,177,139,77,177,137,85, -172,134,92,171,132,93,176,133,88,177,136,83,173,140,83, -171,136,84,170,138,71,171,139,74,166,134,75,160,134,74, -160,137,75,157,135,82,152,130,87,148,126,90,141,122,84, -135,123,81,125,118,84,123,116,82,134,120,74,144,123,66, -152,123,70,153,123,78,151,119,90,146,122,114,147,145,154, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,183,186,183,179, -187,179,178,187,179,180,186,180,182,185,183,184,185,184, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,179,186, -181,149,175,162,111,141,123,118,127,107,133,120,101,146, -116,95,149,118,79,148,123,69,143,124,62,150,123,70,136, -120,90,126,116,81,126,118,71,133,124,64,137,128,62,145, -130,61,148,134,64,148,137,69,148,138,72,152,139,74,156, -138,71,153,136,69,160,136,79,166,139,80,166,137,72,168, -135,77,171,135,78,177,135,76,180,140,78,178,142,76,177, -142,77,184,146,83,181,147,91,176,144,92,175,143,87,177, -144,83,178,144,83,179,142,90,176,145,85,174,146,81,168, -141,75,165,136,82,165,134,92,156,127,94,149,121,95,137, -113,90,128,105,91,126,100,89,136,98,78,152,110,75,160, -120,73,161,124,69,165,128,72,157,126,73,152,122,77,155, -125,75,161,129,64,174,136,61,177,144,65,179,145,70,187, -149,69,195,159,68,199,166,72,200,174,92,199,179,105,195, -179,119,189,174,128,188,171,130,190,168,129,186,157,140, -188,152,122,192,154,118,191,153,117,192,151,120,180,146, -122,175,148,106,171,145,105,169,141,107,171,139,107,180, -138,100,182,139,99,181,136,96,181,135,102,169,128,116, -143,114,123,114,106,93,119,104,86,127,105,82,133,103,75, -142,105,70,152,112,61,155,114,61,160,118,64,166,123,64, -170,130,55,178,138,60,179,142,62,180,144,64,183,147,68, -182,146,74,180,144,80,176,142,78,178,144,79,180,141,76, -183,144,77,177,146,80,176,141,90,174,143,82,174,141,84, -173,140,89,166,137,92,162,138,85,157,136,80,154,135,81, -151,133,83,144,128,82,138,125,87,128,120,92,124,118,83, -134,120,73,145,123,67,152,123,77,154,125,75,154,126,71, -148,125,82,145,142,142,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,184,186,184,176,188,177,175,189,176,180,188,180, -181,186,181,183,185,183,184,185,184,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,177,185,180,138,173,157,102,137,118,115, -123,104,127,116,95,133,112,86,142,113,73,154,119,70,155, -123,67,143,128,71,128,120,85,124,114,77,127,118,69,132, -125,62,136,127,60,144,131,60,147,134,63,148,135,68,148, -136,71,151,138,74,156,138,73,160,137,73,161,136,81,165, -138,79,168,139,74,168,137,78,167,136,77,170,139,77,175, -140,76,179,139,75,179,140,76,183,144,80,183,143,89,180, -141,91,181,142,90,180,142,84,182,142,84,176,141,89,175, -142,85,177,144,82,177,143,80,173,139,87,167,134,92,158, -129,95,152,122,97,143,113,94,132,106,95,122,102,90,121, -102,75,131,108,66,147,120,67,155,123,65,161,127,67,160, -124,71,148,120,74,150,123,71,160,128,62,175,133,58,179, -140,65,181,143,70,185,146,66,195,154,65,207,161,73,210, -170,92,208,175,105,206,176,121,198,173,130,194,174,133, -194,177,135,187,163,144,185,162,126,186,164,120,183,164, -117,179,159,118,173,151,121,170,151,106,169,149,107,165, -142,106,172,137,105,173,139,98,174,138,95,173,136,93,167, -136,97,146,126,104,120,107,107,124,98,91,128,100,86,138, -102,83,144,101,77,153,103,74,158,115,67,162,120,69,166, -123,71,169,126,68,179,133,62,183,141,65,183,144,66,185, -146,68,186,147,71,188,148,77,186,145,83,184,144,83,182, -145,82,180,146,79,181,147,79,182,147,84,179,143,94,177, -144,85,177,146,88,173,143,91,168,139,95,162,140,88,160, -139,84,158,137,84,153,133,84,149,130,85,143,127,89,128, -121,92,122,118,82,128,119,70,140,123,65,145,123,74,155, -122,74,159,125,74,159,124,89,142,132,137,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,184,185,184,176,190,177,175,191, -177,177,189,178,181,186,181,183,186,184,184,185,184,184, -185,184,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,184,185,184,184,185,184,176,185,180,125,163,161, -98,127,135,112,115,120,123,108,108,128,106,89,140,110,74, -159,125,75,159,126,79,139,116,99,120,109,84,122,114,66, -129,121,64,133,124,65,138,129,61,146,134,61,149,135,64, -150,137,68,150,137,70,153,139,74,159,140,77,164,142,71, -166,144,69,166,141,74,169,140,79,171,141,80,171,142,78, -172,141,80,177,140,83,182,141,84,183,144,83,185,148,82, -185,147,84,185,147,87,185,147,87,185,147,86,186,147,88, -179,144,94,179,147,89,181,147,89,181,146,89,177,143,89, -170,138,93,161,136,86,155,130,81,149,125,78,139,118,82, -126,109,82,121,101,76,125,101,71,142,113,74,152,119,69, -160,125,66,161,128,60,148,123,69,150,123,70,160,127,62, -175,134,57,180,141,63,184,146,69,188,148,74,196,152,78, -206,159,74,208,169,82,204,174,87,202,177,97,199,179,108, -195,179,119,191,176,124,189,173,118,190,170,117,191,169, -123,186,165,126,181,161,126,177,157,115,173,152,119,169, -148,120,165,141,108,171,139,88,172,137,104,172,133,107, -172,131,111,159,124,109,135,113,101,114,103,90,125,101, -74,130,104,74,140,108,69,150,111,62,161,116,63,164,123, -68,170,130,61,174,134,65,177,137,68,187,140,73,189,145, -83,189,147,88,190,148,94,189,146,98,189,146,100,188,145, -100,188,145,102,187,149,101,184,148,99,185,149,100,187, -151,101,187,153,95,183,151,91,181,151,86,177,151,83,174, -149,86,167,145,86,165,144,87,164,143,87,157,138,83,154, -137,82,149,135,83,132,128,83,123,121,79,130,120,75,139, -121,70,145,124,71,159,129,64,164,132,75,163,130,83,145, -136,127,184,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,177,187,178,176,188,178,180,188,180,181,187,182,183, -186,183,183,185,183,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -179,185,181,124,158,156,94,121,128,105,108,111,113,100, -98,130,94,83,140,106,72,150,120,70,144,121,72,123,110, -89,122,95,76,129,108,65,136,116,65,139,120,65,144,125, -61,148,131,61,151,135,65,151,137,69,150,137,71,151,139, -74,150,139,74,154,142,67,163,144,68,163,143,74,162,142, -77,171,138,78,175,137,78,174,142,83,175,144,86,176,145, -85,182,145,84,186,146,81,186,146,82,183,146,83,181,147, -83,182,147,83,186,147,86,182,144,94,184,145,88,184,145, -88,180,144,88,175,142,88,173,135,91,167,133,87,164,131, -84,156,126,83,145,119,85,135,110,85,125,105,79,123,104, -71,133,110,68,142,115,63,151,120,61,154,126,55,144,121, -67,144,121,68,153,125,59,165,133,53,175,140,61,181,142, -67,188,145,73,193,149,76,203,157,73,204,167,78,206,172, -86,208,174,96,205,172,104,204,174,117,197,171,121,194, -170,116,195,167,115,197,163,121,195,158,125,188,153,124, -185,149,112,177,147,118,169,140,116,163,133,102,174,135, -86,166,134,98,158,133,101,150,130,101,137,119,95,127,105, -93,127,97,91,134,100,77,140,101,78,155,109,78,163,115, -71,170,121,71,173,126,75,178,135,69,182,143,74,184,146, -76,189,145,77,189,151,85,192,154,94,191,154,100,186,152, -102,186,154,106,185,154,106,184,151,106,185,153,104,185, -152,102,187,151,102,189,151,102,185,156,96,183,154,92, -180,154,88,177,154,86,174,151,87,172,147,89,170,147,90, -165,144,89,156,138,84,151,138,82,145,137,82,133,129,82, -121,122,78,122,120,72,134,124,70,145,126,74,160,134,68, -160,136,78,160,134,84,151,134,126,172,173,183,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,184,185,185,181,186,182,182,187,182, -183,186,183,184,186,184,185,186,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,179,185,182,126,157,162,91, -116,133,101,104,109,112,100,85,135,104,61,141,108,74,147, -112,86,138,108,90,116,99,91,120,98,47,129,110,55,136, -117,61,140,121,63,146,126,63,151,134,62,154,139,64,156, -142,68,154,141,72,153,141,77,152,141,78,154,142,70,163, -143,73,163,143,75,160,142,71,172,144,69,180,148,62,178, -151,69,177,150,72,176,148,71,182,149,70,187,150,70,186, -149,77,184,147,84,180,145,84,180,145,82,185,147,84,183, -146,93,184,145,87,185,148,87,181,146,87,175,141,94,172, -135,85,170,135,94,167,132,94,160,128,93,148,122,93,139, -117,81,131,114,77,127,109,74,133,111,73,143,115,71,152, -119,70,151,118,79,144,119,77,145,122,71,155,128,62,166, -135,56,176,141,57,183,146,55,191,151,65,197,155,74,203, -159,69,204,167,83,204,169,89,205,171,97,203,171,105,203, -173,118,198,172,128,194,168,132,195,165,127,194,159,121, -195,158,119,189,156,115,186,150,112,178,148,110,170,142, -107,165,136,96,178,141,75,168,138,90,156,130,101,145,122, -104,130,111,94,126,107,81,132,108,69,141,111,63,152,119, -62,167,126,63,176,132,65,182,136,74,183,137,85,186,139, -89,187,145,94,186,146,89,195,150,87,196,158,89,195,157, -95,195,158,101,192,159,102,191,160,102,190,160,101,190, -158,102,189,159,98,191,158,102,191,156,98,193,158,90,189, -160,100,187,157,101,186,157,102,183,157,99,179,155,97, -176,149,101,172,148,99,169,148,96,162,144,93,152,138,90, -146,136,95,136,131,95,123,121,98,123,119,83,136,128,67, -148,135,57,164,142,55,164,143,70,162,139,76,151,139,108, -165,168,173,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,184, -186,184,184,186,184,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,183,185,183,183,186,182,172,181, -177,134,154,163,98,111,132,106,95,105,132,93,88,147,110, -68,134,115,74,125,113,76,119,105,79,120,90,86,124,103, -52,130,115,58,131,119,61,133,123,62,142,126,64,147,133, -61,149,139,62,154,140,67,157,137,70,158,134,73,158,134, -75,158,139,70,161,142,73,163,142,75,162,142,71,163,144, -65,178,148,60,178,150,68,180,148,71,181,148,72,183,151, -69,182,154,69,180,153,76,178,148,81,176,146,82,179,148, -82,183,149,82,179,144,90,178,146,85,179,148,84,178,146, -85,173,139,94,170,140,86,169,136,95,169,131,94,162,126, -93,151,118,93,146,117,82,140,112,80,135,109,77,136,110, -73,140,115,70,144,120,68,141,118,76,141,118,76,144,121, -69,153,128,62,171,135,57,181,140,58,186,149,58,191,154, -66,192,154,71,203,160,69,202,165,78,205,167,86,205,169, -95,203,171,104,204,172,117,204,167,128,196,163,129,193, -159,124,194,158,122,191,157,116,181,156,110,181,147,107, -174,146,106,163,140,102,156,137,92,167,147,74,166,134,86, -154,124,97,141,113,98,133,103,91,140,105,86,150,110,78, -156,114,72,164,119,70,177,132,73,183,139,73,187,142,82, -184,144,92,175,149,92,171,146,89,177,146,86,194,150,89, -197,153,88,197,157,98,195,157,102,195,158,104,197,159, -105,199,157,105,196,157,104,195,159,101,189,156,101,188, -159,100,190,164,93,190,160,100,184,157,101,185,158,104, -184,157,101,178,157,100,173,156,106,168,152,101,167,150, -98,164,147,96,158,143,97,149,138,99,137,130,96,118,120, -98,122,119,84,135,127,65,151,136,56,162,147,55,165,143, -69,167,139,76,157,133,101,145,139,155,184,184,184,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,184,183, -187,180,180,186,179,171,181,175,141,159,157,98,114,117, -108,100,90,142,108,73,150,108,94,124,99,98,108,91,82, -108,94,64,123,101,49,130,111,50,131,116,54,132,121,59, -134,125,60,144,132,52,150,138,56,149,139,57,151,139,56, -157,140,56,161,141,57,162,142,62,161,141,79,163,143,81, -164,143,78,164,142,75,163,142,75,178,146,71,180,150,80, -182,149,80,184,150,76,186,153,75,181,151,83,180,150,86, -180,150,87,181,150,89,181,149,90,183,147,93,180,146,86, -176,144,87,177,145,84,176,145,82,174,141,90,170,138,96, -167,135,89,169,133,85,164,131,83,155,126,84,150,123,74, -145,121,71,143,119,71,141,118,68,142,117,69,144,118,71, -142,119,75,142,119,75,144,121,69,154,129,64,173,137,61, -185,145,60,186,149,61,189,151,63,194,157,64,205,162,68, -206,167,90,206,166,101,207,167,113,202,167,117,200,168, -115,203,170,111,197,167,118,196,165,119,197,162,116,192, -160,111,178,154,106,179,147,92,170,143,97,162,140,94,156, -138,87,162,139,89,163,129,86,155,128,88,145,122,79,140, -116,67,151,122,62,163,128,57,169,132,55,178,139,55,187, -145,69,192,148,82,197,152,86,192,153,100,181,152,109,174, -147,99,177,146,84,196,154,78,200,157,93,200,161,94,197, -161,94,195,160,94,198,161,95,202,162,99,199,161,104,199, -164,105,195,162,107,192,162,107,192,162,111,192,164,98, -189,163,102,189,162,106,190,162,111,184,163,112,174,157, -111,171,155,105,170,152,104,167,150,104,163,148,103,154, -144,100,142,135,99,122,125,96,125,123,82,137,127,68,153, -134,76,163,144,76,164,140,77,166,137,81,158,132,93,137, -133,130,184,184,184,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,184,185,184,183,186,183,181,185,181,175,181,177, -139,155,153,98,107,113,114,102,93,143,110,72,129,103,87, -112,91,90,109,83,77,120,89,64,133,103,52,133,113,54,129, -117,55,130,119,58,132,121,58,146,130,54,154,135,57,156, -136,59,157,136,58,157,137,56,160,140,57,162,140,61,158, -138,76,160,139,77,165,140,75,169,139,75,170,139,75,171, -142,66,173,144,74,174,145,73,177,149,71,180,150,71,181, -148,81,179,148,84,178,148,86,179,150,88,177,148,89,174, -146,92,178,146,86,176,144,89,175,142,85,174,142,82,172, -138,90,164,135,94,161,132,89,163,132,86,161,132,84,155, -127,84,149,127,76,146,124,75,145,122,74,145,122,74,141, -119,71,140,119,73,144,117,75,142,119,74,143,122,68,148, -128,60,160,135,56,172,141,56,184,146,60,193,149,63,200, -154,65,209,163,70,210,166,92,208,166,103,204,167,113,198, -167,118,196,166,114,200,168,110,198,165,115,197,162,117, -188,158,112,181,156,107,177,151,104,174,148,94,167,142, -97,159,134,91,155,131,84,162,131,85,161,128,84,159,125, -85,155,121,78,157,119,71,167,128,69,176,137,66,179,141, -65,182,145,62,190,151,74,191,152,84,192,155,89,185,156, -102,182,153,109,183,150,103,188,152,91,193,160,85,197, -162,98,193,160,93,192,162,95,192,164,98,194,167,101,193, -168,102,192,168,108,197,168,109,192,166,109,189,166,109, -188,164,113,191,167,101,191,170,109,190,168,111,188,166, -111,185,165,111,175,161,115,171,159,108,170,157,108,166, -151,106,163,147,103,156,142,98,143,134,97,128,124,95,128, -124,81,142,131,70,156,132,74,158,140,74,160,136,77,163, -131,79,159,127,89,146,126,126,182,182,184,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,184,186,182, -181,185,180,167,178,172,127,146,145,97,105,109,117,106, -94,144,112,76,124,101,91,108,89,89,116,89,66,133,100,50, -139,109,58,133,113,67,130,118,65,132,121,66,136,123,66, -145,128,70,155,134,70,159,135,70,160,136,72,162,139,73, -165,141,74,166,142,79,161,140,86,160,141,82,166,142,75, -173,146,72,176,146,73,174,145,76,174,145,76,173,143,77, -173,144,79,177,145,88,179,145,89,179,148,88,176,149,86, -175,148,85,172,146,85,170,144,87,175,145,86,176,146,86, -175,143,88,174,140,91,172,139,90,169,140,87,166,138,91, -166,135,91,161,131,88,157,128,86,151,127,85,147,125,78, -148,124,77,148,123,79,144,120,82,141,119,84,146,119,82, -145,121,81,144,121,75,148,126,70,158,131,70,169,136,68, -181,142,69,192,147,70,198,152,72,205,161,76,207,164,84, -209,167,88,209,172,99,204,173,109,198,169,113,199,168, -116,198,167,116,197,165,114,185,156,115,177,152,119,175, -148,121,169,144,113,162,137,107,160,135,102,156,133,93, -162,132,92,162,132,81,161,131,79,163,130,79,170,134,80, -178,140,80,182,144,79,184,148,77,187,151,81,195,157,86, -197,161,89,197,161,97,188,160,98,186,158,93,189,158,93, -194,160,95,192,161,95,197,163,100,194,162,107,194,164, -113,194,167,115,193,168,112,194,170,112,191,169,113,196, -168,112,197,170,117,191,169,119,189,168,121,193,168,118, -192,171,114,189,167,113,188,165,117,186,166,123,177,162, -113,170,159,113,167,156,108,163,151,98,163,149,92,157, -144,90,144,135,89,130,127,89,127,123,79,146,135,77,164, -140,73,152,134,89,151,126,86,155,124,78,158,125,80,146, -124,106,153,159,174,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,184,185,183,176,185,176,146,169,158, -109,130,133,97,99,105,122,105,96,141,111,84,119,100,98, -105,89,91,123,94,61,146,108,41,141,113,60,130,114,62, -131,119,61,135,124,62,140,127,62,146,130,64,153,134,63, -157,137,66,161,141,70,164,142,72,165,143,73,165,144,78, -161,142,83,158,141,81,166,145,78,173,148,74,176,149,78, -175,148,87,176,146,85,175,144,89,172,143,93,172,142,95, -175,142,94,174,144,89,173,145,83,172,145,81,171,145,79, -169,143,77,169,143,79,176,146,82,175,144,86,171,140,86, -170,140,83,169,143,79,165,139,84,165,135,87,162,132,88, -155,128,91,151,125,86,149,124,77,149,125,76,146,122,77, -143,120,80,142,118,84,146,119,78,146,120,78,146,120,74, -148,122,70,157,126,69,167,132,65,175,137,63,187,142,67, -195,149,72,201,159,74,207,162,75,210,165,76,211,172,89, -207,176,104,200,174,116,194,168,121,193,164,116,194,163, -114,186,154,113,178,148,118,170,143,120,170,139,103,163, -137,102,160,135,97,159,134,90,159,133,91,163,132,81,163, -133,78,167,133,78,174,138,79,177,140,80,181,144,82,186, -149,80,187,152,89,194,155,88,200,159,88,199,161,96,193, -160,96,192,162,90,193,163,94,192,163,96,195,163,92,196, -165,98,194,163,111,191,160,114,192,162,112,194,167,111, -193,169,111,189,169,109,193,169,111,195,170,113,193,170, -114,194,168,118,188,168,122,192,167,110,193,167,115,187, -165,120,180,162,120,177,161,110,170,157,109,164,150,99, -165,151,93,162,149,89,155,144,89,144,135,86,130,124,84, -125,119,78,140,131,81,159,136,75,142,125,87,135,119,82, -144,117,70,159,122,72,153,125,101,166,171,180,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,183,185, -183,174,186,174,129,163,150,95,118,123,101,100,100,126, -105,93,136,107,89,116,95,98,104,88,90,129,99,61,154,113, -40,140,114,60,133,115,61,134,120,60,137,123,60,143,129, -61,151,132,61,155,136,62,157,139,65,159,141,68,162,144, -71,163,145,73,163,146,76,161,146,79,167,145,80,172,146, -80,176,148,82,177,148,90,172,147,98,175,146,96,174,145, -98,168,143,97,164,141,96,167,141,98,169,141,92,172,142, -88,172,141,84,173,143,81,173,144,77,169,142,82,174,142, -84,174,142,89,170,139,85,170,138,77,166,140,82,168,139, -85,166,137,87,160,134,88,149,128,92,149,121,83,150,121, -83,149,121,81,145,120,78,142,119,80,140,118,84,145,120, -75,143,123,72,142,121,68,148,125,66,158,127,64,164,132, -63,173,136,61,186,140,64,195,147,70,199,156,74,206,159, -71,210,165,79,210,172,94,206,174,109,199,171,119,192,165, -122,192,162,120,190,159,120,182,149,112,177,145,110,167, -139,111,174,137,87,165,137,91,161,136,87,163,136,85,165, -135,91,170,136,83,172,137,81,175,139,78,179,142,77,180, -142,77,181,142,82,184,147,85,183,148,92,192,150,87,201, -155,82,196,158,91,194,159,99,193,160,92,193,162,97,191, -161,100,196,164,98,197,167,105,195,163,110,193,161,110, -196,165,111,197,170,112,194,172,113,191,171,109,189,170, -108,189,170,107,191,171,109,195,170,113,188,167,118,189, -164,106,191,166,110,184,163,108,182,163,103,177,159,99, -171,156,96,166,153,93,163,151,92,158,149,95,149,142,94, -143,135,85,134,127,84,122,118,79,131,126,85,149,131,76, -143,122,76,129,113,79,135,109,75,152,115,78,159,126,99, -172,174,180,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,184,185,183,176,185,175,139,167,156,92,119, -117,101,103,88,128,110,77,132,109,80,115,96,93,102,88, -87,129,101,57,156,115,37,142,116,60,134,117,61,135,121, -58,139,123,63,143,127,64,154,135,60,159,139,67,160,140, -71,162,143,75,163,145,77,165,146,79,165,145,83,160,143, -82,167,143,80,175,147,81,176,148,83,175,146,96,167,142, -104,168,141,103,168,142,99,165,141,98,160,140,97,159,137, -103,160,134,101,163,133,96,165,134,91,169,136,87,172,139, -85,169,137,88,170,136,87,170,136,93,169,137,94,175,141, -79,168,140,82,168,138,79,167,138,84,159,134,86,148,127, -84,148,121,76,150,120,77,148,118,77,145,119,79,143,119, -84,139,116,87,142,118,83,140,121,75,141,121,72,144,122, -71,156,126,67,163,131,66,172,133,69,183,137,66,195,148, -67,201,156,75,208,159,76,213,167,89,212,173,103,206,173, -112,200,172,116,196,168,117,191,159,129,186,156,127,182, -149,116,174,143,104,164,136,107,174,137,88,167,138,92, -164,136,85,165,136,81,166,136,87,172,137,80,174,139,82, -175,139,79,179,142,75,183,144,74,184,144,76,181,144,78, -183,146,83,192,150,83,200,157,87,196,159,93,194,159,95, -192,159,90,195,163,97,195,164,102,195,166,99,196,167,105, -193,165,107,193,165,107,196,169,108,196,172,109,193,171, -110,191,170,108,190,168,106,189,170,107,186,169,104,187, -167,108,186,165,109,186,162,111,186,162,111,183,162,105, -182,162,101,178,160,100,170,158,103,164,154,100,160,151, -96,153,146,94,146,140,94,144,135,90,135,129,88,121,119, -84,123,121,85,140,127,73,150,128,57,140,122,66,133,107, -75,140,107,87,158,122,88,156,157,169,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,183,185,182,175,185, -175,153,172,162,101,122,120,108,103,85,135,112,76,130, -112,79,108,97,92,97,87,84,122,99,55,152,116,37,148,117, -60,134,119,59,133,122,57,140,126,63,144,129,61,153,137, -57,160,140,64,163,141,69,165,143,73,167,146,78,165,145, -80,163,144,82,156,146,82,160,144,81,165,149,81,169,151, -83,171,145,96,165,140,103,161,138,99,159,136,93,156,135, -91,155,134,90,152,129,97,148,126,95,148,125,89,151,125, -85,156,128,82,161,132,81,162,132,83,162,132,82,158,129, -85,162,130,87,171,136,77,173,137,78,169,137,76,164,138, -82,155,133,83,152,124,79,149,124,75,148,122,75,148,121, -77,147,121,80,146,118,82,146,116,86,142,115,85,141,117, -75,142,115,73,145,118,73,149,125,65,160,130,65,167,132, -69,176,135,66,190,143,64,201,151,70,212,160,75,216,168, -89,213,173,103,205,173,111,200,173,116,197,171,119,182, -161,129,177,154,123,178,151,115,171,143,103,164,135,106, -169,138,92,169,136,91,169,133,86,169,134,82,167,133,82, -168,136,80,171,135,81,174,135,77,182,139,75,188,142,74, -191,144,75,193,147,78,194,149,85,195,153,83,195,158,86, -194,159,94,195,160,92,194,161,90,196,164,97,194,163,99, -193,163,95,194,163,101,193,163,103,193,163,104,195,165, -105,199,167,106,197,166,105,190,167,106,194,165,105,197, -169,106,194,171,105,189,171,109,189,166,110,186,163,113, -183,161,109,182,160,103,178,161,102,176,163,108,168,159, -109,162,152,101,160,148,95,159,143,91,157,140,92,149,135, -91,137,129,89,121,119,83,110,110,74,119,111,66,151,122, -53,165,125,65,150,117,78,135,106,81,156,114,73,143,126, -149,176,176,180,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,184,185, -183,180,186,176,174,186,174,152,172,164,110,129,120,112, -108,83,138,115,74,130,112,81,109,100,85,98,89,81,118,94, -58,150,113,47,152,121,59,136,122,52,137,127,53,142,130, -56,148,134,61,154,137,66,161,140,69,166,143,72,169,146, -78,168,145,82,165,145,85,163,144,87,154,142,91,158,142, -92,160,143,90,162,142,88,166,141,90,163,137,99,160,138, -95,159,137,95,155,134,96,152,130,92,149,127,93,147,126, -91,145,123,91,149,122,95,149,120,92,150,122,83,153,125, -77,156,127,82,158,130,82,162,132,78,170,135,77,173,136, -83,168,137,74,164,137,77,155,134,77,157,131,72,154,128, -78,151,124,79,151,124,79,148,121,75,147,120,74,148,120, -81,144,117,87,142,116,83,141,113,77,146,119,74,151,126, -64,159,129,65,165,131,76,175,133,74,190,141,72,199,149, -74,208,157,72,214,166,81,214,175,98,209,178,113,201,175, -121,198,172,128,183,163,130,177,159,111,177,153,107,174, -145,110,168,137,118,168,133,113,169,135,89,172,136,86, -172,136,84,171,136,78,167,134,83,170,134,81,176,136,81, -181,138,80,187,141,78,192,144,74,193,148,75,197,155,76, -197,157,77,195,158,86,192,155,107,193,158,99,194,159,100, -194,158,107,192,157,114,190,154,119,190,155,113,190,158, -106,191,159,106,192,160,110,194,159,110,196,163,111,188, -164,110,193,163,110,196,167,108,194,170,103,188,171,96, -189,169,98,190,169,104,189,167,107,187,165,107,179,162, -110,176,162,113,168,159,101,163,154,93,162,149,89,160, -143,87,161,142,88,153,139,86,139,131,85,125,122,89,108, -105,87,110,93,104,140,105,80,162,120,62,160,126,72,141, -114,71,153,110,59,144,130,116,170,170,173,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,184,185,184,179,186,173,174,188,167,170,185,171, -145,169,159,106,128,120,108,108,81,129,112,69,126,107,76, -112,94,82,96,87,79,100,94,53,128,118,44,146,122,58,139, -122,53,143,125,54,147,129,58,152,134,62,159,135,67,165, -139,69,163,141,70,162,143,74,160,143,78,158,142,81,158, -141,84,156,138,89,154,138,89,155,138,86,158,138,84,156, -139,85,148,135,92,148,134,89,147,132,88,142,127,88,140, -125,86,143,121,87,142,122,87,141,123,89,137,118,88,134, -113,82,137,115,73,143,118,70,148,119,74,151,124,75,152, -130,72,155,134,71,159,133,76,159,134,69,161,134,74,155, -133,76,154,134,73,148,128,76,144,126,77,141,124,76,140, -122,73,141,121,73,144,121,80,141,118,86,139,116,82,138, -114,77,140,118,71,150,124,63,160,126,64,161,126,72,167, -129,69,184,139,68,202,147,72,210,162,76,219,168,84,221, -174,99,213,178,114,200,178,123,189,172,125,180,157,125, -176,149,105,176,148,104,167,141,106,163,132,113,160,127, -106,161,128,82,168,132,82,169,132,80,173,132,76,173,135, -85,170,137,83,171,139,81,176,141,81,184,143,78,189,148, -76,183,154,76,186,160,75,190,162,78,189,159,86,184,152, -102,188,153,94,190,158,98,190,160,107,186,157,112,184, -154,117,181,150,107,184,154,101,187,157,103,184,153,103, -186,152,103,194,153,103,192,156,106,188,161,108,189,165, -105,190,165,99,195,166,95,195,165,98,190,169,104,188,168, -106,186,165,107,182,162,110,170,155,106,167,151,95,168, -149,91,165,145,87,161,140,85,157,140,86,150,139,85,139, -132,86,127,122,90,109,106,89,94,93,98,119,98,68,150,110, -50,162,125,72,149,117,76,150,109,55,147,117,107,170,170, -172,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,184,185,184,180,188,176,178,187, -173,174,185,179,148,169,167,99,122,115,107,107,78,129, -112,68,126,108,76,115,99,79,98,89,79,96,81,84,121,98, -86,145,122,47,139,123,50,144,127,55,149,131,56,152,135, -56,161,137,63,165,141,63,164,143,71,161,142,76,158,141, -74,157,142,72,156,142,71,156,139,81,153,138,79,156,139, -83,159,140,84,158,141,81,151,138,84,147,133,81,146,132, -80,143,130,76,141,127,75,147,126,79,147,129,80,144,128, -79,139,123,77,137,119,76,140,118,78,143,115,88,146,117, -79,149,120,76,148,124,74,149,127,72,156,128,78,158,129, -83,161,132,81,159,135,80,156,132,89,151,129,86,146,127, -84,142,123,81,141,122,81,143,122,78,144,121,72,142,119, -74,140,119,72,139,117,71,140,118,70,148,120,71,160,127, -63,161,131,49,169,135,50,186,143,59,205,151,67,208,159, -74,214,163,86,219,172,109,213,176,127,199,173,135,185, -165,132,177,155,119,178,150,110,174,145,108,167,139,109, -165,136,102,162,133,93,165,132,84,169,132,85,171,134,85, -175,138,74,177,142,72,175,143,80,173,142,81,178,143,81, -187,147,81,193,152,86,187,155,94,187,157,93,190,158,99, -189,157,101,186,156,97,189,156,91,189,159,93,188,160,95, -184,158,93,182,156,90,183,154,100,185,156,96,185,157,95, -180,152,92,181,149,93,191,152,97,192,158,97,186,160,101, -188,162,105,188,161,103,192,162,96,192,162,101,188,167, -98,186,168,95,186,168,94,183,165,96,175,163,96,170,155, -97,171,151,96,171,151,90,167,149,82,162,146,83,150,139, -91,138,131,92,125,122,86,110,109,84,94,94,98,116,94,68, -148,109,46,162,126,67,148,116,74,149,105,61,148,119,100, -163,163,166,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,182,186,180, -181,186,177,175,184,178,151,172,168,97,120,114,108,107, -77,128,111,67,122,108,75,110,100,78,94,90,79,83,81,78, -98,90,71,138,109,37,144,119,49,146,122,53,152,128,55, -158,135,59,158,139,64,165,141,64,167,141,71,164,139,75, -158,139,74,154,140,70,155,143,71,157,136,80,152,137,79, -150,138,81,151,140,81,157,139,81,154,138,86,147,136,83, -145,135,82,145,134,79,147,133,79,147,133,83,145,131,80, -145,129,81,146,125,82,146,124,83,144,125,84,138,121,87, -134,122,76,138,123,73,139,122,70,142,124,67,148,125,71, -149,127,76,152,131,75,155,134,77,147,129,82,145,124,79, -144,123,80,143,122,80,141,120,79,143,120,76,143,120,71, -137,117,71,140,116,71,140,117,72,140,119,70,142,122,69, -156,125,61,171,131,52,184,138,57,191,142,60,198,148,61, -205,162,75,211,169,87,215,174,106,211,174,123,202,167, -130,194,158,131,187,149,120,180,148,109,172,141,104,165, -134,104,163,131,99,160,131,91,163,131,82,166,133,85,168, -134,83,175,139,74,173,143,71,174,144,80,174,143,83,177, -145,82,182,149,81,188,153,85,187,153,92,186,156,91,183, -155,94,183,154,96,182,153,93,183,153,86,185,156,90,183, -158,92,178,156,90,175,154,86,177,148,94,175,146,85,178, -147,84,182,146,88,184,146,91,187,150,93,188,153,92,187, -152,95,187,154,100,188,155,99,193,157,95,188,159,97,185, -160,93,187,164,93,188,168,94,181,167,98,176,164,99,171, -159,101,167,154,96,169,154,90,169,151,84,165,146,84,152, -138,90,139,131,90,127,123,87,111,113,86,90,98,98,109,95, -64,141,110,43,155,122,62,145,113,70,147,105,60,147,118, -99,165,164,167,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,184,185,184,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,182,186, -180,181,186,177,173,184,181,142,165,172,93,116,127,111, -107,93,134,114,81,126,109,85,111,97,94,95,89,84,82,79, -79,87,77,68,125,89,50,143,117,53,146,123,52,153,130,53, -161,139,57,159,141,58,166,141,71,167,140,79,164,139,81, -158,138,78,153,139,75,151,138,71,157,139,71,154,141,72, -151,142,72,149,141,68,155,140,70,156,142,78,152,144,83, -150,141,82,150,140,82,152,138,87,150,137,82,148,135,81, -149,134,81,154,136,80,155,136,79,151,133,83,144,129,88, -139,125,87,140,123,82,142,124,80,142,122,84,146,119,87, -148,122,86,149,124,82,151,127,80,146,128,82,145,123,81, -144,123,83,142,121,84,140,120,82,142,120,78,144,121,72, -138,119,74,141,119,69,141,118,67,141,120,69,142,121,76, -157,125,60,174,132,59,186,139,61,194,146,63,204,153,70, -207,162,83,208,165,93,209,167,106,203,166,114,196,163, -115,191,160,109,187,154,105,180,149,103,172,143,99,165, -138,91,164,134,87,159,132,86,162,129,83,166,132,90,169, -134,88,177,138,78,172,140,85,173,141,85,177,144,85,179, -146,82,182,149,78,187,153,78,188,154,88,186,154,97,183, -154,98,184,154,94,182,153,88,180,148,94,181,150,95,179, -150,100,174,148,102,171,147,95,172,145,87,173,143,93,176, -142,95,181,144,92,184,147,87,185,148,85,184,149,84,185, -150,91,184,151,91,185,153,89,192,157,88,188,159,94,189, -163,97,190,165,100,189,167,104,185,167,108,178,166,100, -171,161,94,168,156,92,169,153,92,170,150,89,166,147,88, -154,139,93,141,135,88,129,126,86,113,114,92,91,97,111, -109,92,79,139,105,62,153,119,71,145,112,69,149,105,68, -147,119,115,171,169,174,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,184,185,184,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,183,185,183, -180,186,177,178,187,172,163,182,175,111,153,162,76,106, -116,98,104,85,127,116,79,129,109,88,117,94,95,109,88,88, -96,78,84,92,77,71,111,93,49,137,119,53,142,125,52,148, -131,52,154,138,53,158,141,57,162,144,71,159,140,75,154, -138,76,151,140,76,148,138,72,148,137,69,145,139,66,145, -138,67,146,139,68,148,139,67,153,140,70,155,139,75,151, -139,80,146,138,79,142,138,78,142,136,82,145,135,77,146, -134,80,146,133,80,151,136,79,153,136,78,152,133,83,148, -128,87,140,126,86,139,125,82,140,123,81,143,119,84,138, -119,85,138,120,80,141,120,75,145,122,75,150,124,81,147, -122,81,139,121,80,134,118,79,135,118,78,141,118,75,146, -119,71,140,117,74,141,118,69,141,118,68,139,117,68,141, -117,73,157,126,61,169,136,58,180,141,59,190,146,62,202, -152,69,211,160,81,208,164,93,204,167,104,195,162,109,188, -157,108,189,156,106,188,152,104,178,148,103,167,141,95, -162,137,87,161,133,84,160,131,85,159,130,81,160,129,85, -162,130,82,173,137,74,172,136,81,171,136,79,175,137,79, -179,140,78,183,145,76,182,150,75,179,150,81,175,152,90, -174,150,90,172,151,87,169,153,82,165,148,86,164,147,84, -166,144,90,164,137,90,165,136,86,168,137,79,172,138,88, -172,137,89,177,143,88,178,146,84,177,147,80,178,148,83, -181,148,90,179,150,89,176,153,85,176,158,83,180,162,90, -181,164,94,182,165,96,184,164,99,186,159,103,181,159,98, -179,158,95,174,155,92,166,151,88,164,148,84,163,145,86, -151,140,92,142,137,90,128,129,88,106,115,90,80,97,107, -102,91,77,131,104,59,147,116,67,143,111,68,144,105,69, -145,123,116,168,167,174,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,184,185,184,184,185,184,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -181,186,177,174,187,168,152,178,181,98,141,171,81,105, -139,91,90,111,124,107,102,131,113,79,124,108,66,119,107, -56,112,103,60,108,98,62,121,103,55,139,120,59,144,124, -68,147,127,66,151,132,65,157,136,72,160,140,76,159,140, -77,156,139,81,150,136,83,148,136,82,149,136,78,143,134, -72,142,132,76,145,135,77,149,139,74,154,142,71,159,141, -79,153,141,85,147,139,84,141,135,82,139,130,86,141,128, -84,142,128,83,144,129,82,147,130,82,149,132,81,150,132, -82,151,131,83,142,128,79,138,124,83,138,120,83,144,121, -77,140,121,86,138,120,83,141,118,82,146,120,85,149,121, -88,146,120,82,137,118,84,131,114,83,131,113,78,135,112, -74,142,114,73,138,116,71,141,117,73,141,117,70,139,118, -66,142,118,69,157,124,66,168,131,69,178,137,69,189,144, -68,203,152,68,209,159,71,209,167,87,205,169,100,198,166, -103,191,161,104,192,157,108,190,153,111,181,147,120,165, -135,114,161,132,109,161,131,99,161,131,88,160,132,81,161, -134,73,164,135,66,173,138,66,171,136,73,170,135,75,172, -135,71,178,140,70,182,144,77,179,144,88,177,144,98,172, -147,95,169,145,95,167,144,100,162,141,103,160,139,93,159, -139,87,160,136,87,163,134,88,164,133,88,170,137,88,170, -136,84,172,138,83,177,143,86,179,145,86,179,147,86,179, -148,85,184,152,84,186,157,85,181,157,84,177,156,91,178, -157,99,179,159,94,177,158,92,175,154,88,181,154,95,182, -159,100,178,156,93,175,156,94,166,151,90,163,146,87,165, -147,90,154,143,97,146,139,99,132,131,95,107,114,93,78, -93,113,101,90,77,131,104,61,148,117,65,145,113,62,147, -106,62,145,123,116,168,168,172,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,184,185,184,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,181,186,177,173,186,166,144,174,177,105,144,171, -85,113,141,75,90,103,110,105,95,136,112,80,132,114,72, -129,118,66,119,115,69,114,109,70,127,110,61,134,123,60, -138,124,67,142,126,65,148,133,65,150,135,69,147,136,68, -147,138,72,148,139,79,144,135,82,143,135,82,144,136,76, -145,135,72,138,133,74,137,134,72,138,138,68,141,144,64, -147,141,73,143,138,77,142,133,77,140,130,77,138,122,81, -131,122,77,129,122,74,131,122,72,132,122,69,133,121,66, -135,122,67,134,123,68,137,120,70,136,115,74,135,113,77, -139,118,71,138,114,82,137,116,82,137,117,81,137,117,80, -139,115,80,139,116,76,131,116,80,123,113,77,122,112,72, -125,111,65,134,112,65,137,113,67,140,113,67,145,113,67, -148,112,66,148,115,69,158,121,64,168,125,65,179,132,65, -193,141,66,205,149,67,211,158,71,209,168,87,204,172,99, -199,170,104,192,166,106,189,163,108,192,153,110,179,146, -117,166,134,113,160,128,107,159,128,96,160,129,86,159, -131,79,163,132,71,169,134,66,171,139,62,166,136,69,165, -132,71,167,131,66,176,139,68,177,141,72,173,141,84,163, -140,91,165,141,88,161,139,87,154,136,88,152,131,90,153, -131,85,154,132,81,155,133,83,155,133,84,159,132,85,156, -136,80,155,138,76,158,139,75,164,142,78,166,144,79,170, -147,82,172,150,83,174,154,81,177,157,81,178,159,84,177, -156,89,173,149,92,167,151,87,166,155,88,169,159,89,173, -159,97,173,158,97,172,156,92,171,155,92,167,150,91,166, -149,91,165,148,91,152,143,96,141,137,94,134,130,94,112, -111,92,81,91,112,104,89,77,127,103,58,145,115,61,146, -113,60,144,106,59,144,121,117,175,175,177,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,184,185,184,184,185,184,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,184,177,186,172,170,186,158,136,171,175, -102,141,169,83,110,144,71,84,110,108,102,93,138,118,61, -136,118,72,131,117,81,118,111,84,113,107,75,127,113,48, -135,123,65,138,125,62,143,128,64,147,132,67,151,135,68, -146,135,77,145,135,80,146,137,82,144,136,80,143,136,78, -143,135,80,145,130,93,139,130,87,138,132,80,136,134,75, -133,132,78,137,126,84,132,123,80,131,119,80,130,116,78, -131,114,75,125,114,82,122,111,82,123,111,80,123,110,75, -121,107,69,123,108,70,123,108,75,130,109,81,132,108,83, -133,109,82,136,111,80,138,113,83,135,115,78,135,116,74, -136,117,74,140,115,80,140,114,87,131,111,100,121,105,101, -115,100,91,121,102,81,131,107,72,134,111,59,138,111,64, -143,110,69,148,110,71,148,114,68,159,124,58,170,131,56, -183,138,56,196,146,57,208,155,59,214,162,72,211,170,89, -203,171,99,199,170,108,191,165,111,185,159,110,192,151, -112,179,143,119,167,135,111,160,129,100,158,128,92,162, -130,91,158,129,90,161,127,85,167,129,83,170,132,84,165, -132,83,163,127,80,167,127,79,172,131,80,171,132,79,168, -135,80,158,135,78,159,132,86,152,129,82,144,127,75,147, -125,82,154,129,89,153,129,89,155,130,91,153,128,89,155, -127,83,149,127,85,145,123,84,147,122,86,154,126,91,158, -130,92,164,136,95,167,140,97,168,144,88,172,151,76,168, -152,58,167,153,53,171,154,58,173,162,73,173,164,79,173, -164,85,173,159,94,172,160,86,174,161,81,175,162,86,173, -159,89,171,155,91,168,152,92,151,144,93,139,134,104,134, -129,100,113,113,87,81,94,103,106,95,67,128,104,60,143, -110,65,143,108,66,143,103,67,139,120,101,180,180,181,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,184,185,184,185,185,185,184,186, -184,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,176,187,168,166,186,154,128, -164,169,91,131,163,67,97,134,61,73,99,103,96,87,138,114, -59,126,112,66,114,110,71,103,99,71,105,94,65,132,103,42, -139,116,62,136,121,59,143,126,62,146,128,65,148,131,63, -145,128,72,144,127,75,144,127,75,143,128,74,142,127,72, -143,128,75,138,123,85,132,126,81,130,129,75,127,131,70, -125,128,74,124,123,77,121,120,74,121,116,75,121,113,73, -123,116,73,119,112,80,117,110,80,116,110,78,114,112,74, -113,113,70,115,112,69,116,108,72,118,103,74,119,102,76, -117,100,72,118,103,69,124,104,72,127,107,70,131,109,68, -134,113,70,138,110,75,131,108,80,119,106,92,106,100,93, -101,96,84,105,99,74,112,104,64,126,108,55,131,109,60, -135,108,65,139,107,66,147,109,64,158,117,53,172,125,53, -185,135,55,197,141,54,208,147,55,216,159,71,215,164,86, -210,166,99,202,166,107,195,164,111,191,159,112,182,152, -110,169,138,112,163,132,108,157,126,97,151,126,89,158, -124,86,157,123,85,157,122,81,158,123,76,157,124,75,149, -124,72,151,123,73,152,122,71,154,127,71,154,129,70,154, -130,72,151,131,72,141,125,76,143,127,77,142,126,73,139, -121,77,136,119,77,142,120,79,143,120,80,138,117,75,137, -118,70,135,116,73,129,114,73,127,113,73,129,113,74,132, -116,74,132,119,74,133,121,72,139,124,65,151,135,59,163, -147,53,174,152,55,182,153,61,183,158,74,181,161,79,180, -162,86,175,155,92,170,152,80,176,159,81,179,161,86,172, -156,87,168,153,89,165,150,91,156,145,94,139,129,102,132, -128,99,107,113,85,80,92,102,107,93,66,126,99,56,137,109, -62,138,107,63,140,95,62,147,109,93,173,173,175,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,184,185,184,184,185,184,185,185,185,184,186,184, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,176,185,172,170,185,166,133,164, -169,84,124,154,56,86,126,57,68,93,101,93,80,134,108,53, -119,104,70,104,99,75,94,91,65,102,93,51,134,106,36,140, -120,54,137,123,59,141,124,61,145,127,64,144,127,66,143, -127,73,139,123,76,137,122,77,136,121,76,136,122,72,137, -124,65,137,127,61,133,129,62,128,128,64,123,127,65,120, -123,67,122,123,60,124,125,63,125,123,61,128,123,61,129, -124,63,126,121,76,125,121,70,124,122,68,121,120,72,117, -117,76,117,114,79,118,110,76,119,108,74,119,103,76,117, -101,76,115,100,71,116,96,81,119,99,74,123,100,74,125, -102,72,132,105,68,131,111,73,120,110,80,107,102,81,100, -96,79,101,95,81,106,96,79,119,100,66,125,103,65,131,105, -62,137,108,58,149,113,54,162,122,52,176,130,57,189,138, -59,200,144,58,209,149,60,217,159,75,214,163,87,209,167, -100,202,168,111,196,165,115,194,162,116,183,153,117,174, -144,109,166,135,105,159,127,104,150,122,103,155,121,91, -154,120,92,154,119,84,153,120,79,152,118,86,143,118,79, -144,116,79,148,117,81,147,118,81,146,119,83,146,119,86, -143,121,86,137,118,88,136,117,86,135,117,79,133,115,74, -130,111,83,134,111,77,135,111,74,132,111,70,130,111,71, -131,112,66,129,115,65,128,114,65,132,117,66,135,120,68, -134,122,71,135,122,71,139,124,74,148,129,78,153,132,75, -162,135,74,175,143,73,176,149,81,175,156,80,171,156,71, -171,154,67,174,159,70,176,160,74,176,161,79,172,158,81, -169,155,86,166,152,92,153,142,96,139,133,88,131,129,94, -106,110,94,80,91,107,109,95,69,131,104,62,144,113,79, -140,106,81,138,94,60,147,111,67,158,156,164,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,184,185,184,184,185,184,184,186,184,184,186,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,184,177,185,172,174,185,173,152,169,172, -95,125,152,55,78,118,56,62,84,99,87,73,130,104,51,108, -97,68,94,89,69,93,86,59,106,93,45,132,105,33,140,120, -52,137,122,55,136,125,58,137,128,62,134,128,63,129,125, -71,123,122,73,118,118,73,116,116,71,118,117,67,124,120, -60,133,120,56,133,122,60,131,122,62,128,122,62,126,121, -66,134,123,60,136,127,66,138,130,69,136,131,68,134,130, -68,126,124,83,122,119,71,123,120,69,119,117,74,115,114, -80,115,113,83,117,111,75,118,107,72,118,105,76,116,103, -78,119,103,76,114,101,84,117,100,76,117,101,74,116,102, -69,121,104,65,125,107,69,125,107,75,120,104,78,110,96, -77,104,93,79,104,94,79,110,101,65,114,104,62,121,106,61, -131,109,58,146,114,53,169,121,54,180,132,55,191,141,58, -200,147,61,208,154,64,211,165,84,210,167,93,208,169,104, -203,170,116,197,166,119,194,163,118,182,152,118,176,143, -108,165,133,104,151,125,101,144,118,102,144,121,89,141, -119,88,139,118,80,139,119,78,133,116,84,130,112,73,133, -112,74,135,113,75,137,116,76,135,115,76,134,113,79,130, -113,83,128,111,83,126,107,76,128,107,70,130,109,70,131, -107,76,132,107,72,134,111,71,136,113,69,138,116,70,140, -119,66,138,122,68,138,122,69,140,123,69,142,126,71,140, -127,72,138,129,74,138,127,75,138,125,75,140,129,74,147, -135,72,153,140,70,157,142,76,159,143,70,161,148,62,171, -155,61,175,161,69,173,162,72,173,161,77,172,158,80,169, -155,83,163,150,88,150,141,91,142,137,87,131,129,91,105, -107,91,82,88,102,112,94,67,132,103,60,135,113,84,119, -103,87,123,88,59,145,102,63,141,139,154,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -184,185,185,184,186,184,184,186,184,184,185,184,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,184,185,184,178,185,173,172,183,177,149,166,172,89, -118,151,48,73,114,51,60,80,92,83,65,121,99,45,100,89, -69,92,83,59,98,86,58,109,92,49,133,105,28,139,118,54, -138,123,59,135,125,63,132,125,65,129,123,66,123,119,74, -117,115,74,113,112,73,111,110,73,110,108,72,114,107,72, -126,112,69,130,115,70,128,115,64,127,119,61,125,119,63, -133,120,58,134,123,69,133,125,73,129,126,72,122,122,79, -113,115,83,105,105,74,103,102,73,102,100,75,101,101,77, -103,103,76,114,106,65,118,106,54,116,106,58,115,107,66, -122,107,69,119,106,80,121,105,75,119,105,72,115,103,68, -119,102,68,124,105,72,127,108,69,128,110,68,121,105,68, -112,100,71,108,98,74,109,99,68,108,100,67,118,104,65, -129,106,57,146,114,54,175,126,53,188,139,52,198,147,56, -204,152,62,210,158,73,208,163,94,207,164,99,208,168,109, -204,168,117,198,165,118,194,163,115,183,154,116,177,144, -109,164,135,110,148,124,105,140,117,95,142,116,89,137, -114,89,134,113,83,132,113,79,124,110,77,123,108,73,126, -109,75,130,110,78,132,113,80,131,112,79,131,111,80,127, -108,82,125,106,82,123,104,78,127,106,75,130,107,75,134, -109,77,133,109,72,136,113,69,140,117,65,143,120,63,145, -124,62,143,127,62,142,128,64,144,129,67,146,131,68,144, -132,69,138,130,73,138,130,75,140,128,77,140,129,76,140, -129,70,139,128,70,145,131,74,152,137,76,159,146,76,167, -154,73,171,157,73,170,159,74,170,157,75,172,156,78,172, -154,79,166,150,80,155,144,83,147,139,81,134,131,84,108, -111,83,89,95,89,117,97,71,135,107,64,129,113,105,100,92, -112,110,79,66,139,95,65,137,136,155,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,184, -186,184,183,187,183,184,186,184,184,185,184,184,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,184,169,187,169,154,181,176,120,151,167,71,106, -147,40,66,114,48,57,80,88,79,60,118,94,36,98,85,56,95, -87,50,93,88,60,98,88,58,129,100,30,135,116,60,134,121, -58,133,124,64,128,123,68,124,121,72,118,116,77,111,111, -76,107,108,77,100,102,77,97,98,76,99,95,75,108,99,73, -116,105,65,123,109,62,122,113,59,125,114,63,127,119,61, -131,120,72,127,118,77,121,117,80,112,113,84,106,109,83, -95,98,79,88,91,76,89,93,78,91,95,82,92,95,85,100,97, -80,108,101,68,108,101,62,112,103,65,124,105,71,120,103, -90,118,102,77,118,101,75,115,99,72,119,98,66,122,100,70, -126,104,62,130,109,61,128,109,65,120,106,71,111,100,75, -109,96,69,102,94,70,110,98,62,124,104,52,144,110,54,172, -124,47,188,134,53,201,144,59,210,154,68,214,157,79,212, -163,91,208,165,99,205,167,109,200,166,114,196,164,113, -193,161,111,181,155,113,173,146,113,155,131,114,141,119, -110,138,114,97,136,109,98,129,106,84,128,107,76,129,111, -71,129,111,69,125,112,72,124,110,75,124,110,79,126,111, -83,124,110,82,125,109,83,123,109,84,122,106,81,121,105, -80,121,105,77,127,106,69,124,105,73,128,108,66,133,111, -59,141,118,57,146,126,65,150,127,65,153,132,62,154,136, -61,153,137,63,154,138,66,155,139,70,147,138,76,143,136, -77,143,135,77,142,135,76,142,135,74,146,136,72,148,138, -74,150,141,78,149,142,81,156,146,83,164,151,82,164,151, -76,164,150,76,166,149,79,167,147,78,168,148,80,156,142, -83,147,137,78,135,132,81,117,116,78,109,103,79,124,108, -69,135,115,59,121,115,108,85,85,117,102,73,67,132,92,56, -150,147,159,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,184,185,184,182,186,182,183,187,183,183, -186,183,184,185,184,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,184,153,189,161, -116,174,180,76,127,160,46,88,140,31,59,109,44,54,80,82, -74,60,111,88,36,100,85,51,89,88,56,75,82,60,77,80,51, -121,95,22,135,116,59,133,122,56,132,125,64,126,122,72, -123,118,76,114,115,82,105,109,79,96,103,77,88,97,76,81, -91,73,81,88,73,85,84,71,95,91,63,107,99,60,114,104,56, -118,105,58,114,108,59,116,111,68,114,111,73,108,106,73, -107,103,70,105,100,75,93,94,80,79,90,82,67,85,77,60,80, -73,62,74,73,62,73,71,69,79,62,80,85,60,94,91,62,110, -95,63,104,94,72,104,94,67,106,94,71,105,92,70,106,95, -66,112,98,71,117,100,60,124,106,57,122,108,59,116,104, -60,111,99,63,104,98,62,94,91,65,101,95,60,115,101,50, -133,108,49,163,123,40,185,132,49,201,142,58,213,153,67, -215,157,76,214,163,88,211,169,101,206,171,113,197,166, -117,193,162,117,192,160,114,176,152,113,164,141,111,146, -127,113,131,117,112,127,113,102,117,106,101,119,103,79, -124,106,72,125,109,67,129,109,68,128,113,72,125,110,74, -123,109,77,122,110,80,119,110,81,117,110,83,112,109,84, -112,109,79,114,107,75,117,105,72,120,105,65,112,105,68, -117,106,60,125,110,55,133,119,58,132,124,71,136,120,61, -148,127,59,156,137,61,157,143,62,158,146,63,162,148,67, -159,146,76,155,143,78,151,142,77,149,142,76,149,141,78, -150,143,75,147,141,76,144,141,77,140,141,79,144,140,84, -149,140,79,150,141,72,152,143,72,154,144,74,158,144,76, -162,146,79,153,143,81,145,139,79,135,134,81,127,124,79, -136,117,74,131,124,69,136,123,60,117,111,100,78,76,105, -97,69,64,132,90,55,140,134,149,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,183,186,184,180,188, -182,182,187,182,182,186,183,183,185,184,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,184,149,189,162,88,162,199,48,108,167,29,73,136,26, -55,106,43,54,84,74,67,73,102,79,64,95,82,68,79,76,73, -63,68,68,70,71,51,118,94,16,137,119,43,132,121,53,130, -123,66,122,118,71,120,115,77,110,111,82,99,103,78,92,97, -75,82,91,71,74,84,69,68,76,71,68,69,78,73,70,70,85,78, -65,96,86,59,105,91,54,104,93,64,102,95,73,100,95,73,99, -94,67,102,95,60,100,93,78,85,87,102,63,75,101,39,60,78, -35,57,65,40,55,60,40,55,53,43,56,51,49,58,47,60,64,46, -80,72,54,90,86,38,89,83,52,87,81,67,85,78,76,82,77,73, -86,77,71,94,80,68,103,87,68,104,90,60,106,96,49,113, -103,47,104,99,68,92,91,70,96,90,63,111,98,52,130,109, -40,159,122,35,179,131,38,199,142,46,214,155,55,218,163, -69,218,170,91,216,175,110,210,175,121,200,169,122,197, -165,122,196,162,121,179,152,117,166,142,117,143,124,118, -127,113,121,119,107,112,107,98,104,113,99,71,122,106,64, -124,108,65,123,107,70,124,110,79,124,110,81,124,109,84, -119,107,87,115,105,86,109,102,82,104,100,81,103,101,76, -106,100,72,111,102,70,114,103,66,105,100,77,108,99,71, -113,99,71,117,102,76,112,103,84,117,101,67,127,106,59, -136,116,57,139,125,56,150,138,60,161,146,64,162,148,69, -163,150,78,160,148,78,157,145,79,154,142,87,148,139,90, -143,138,89,139,137,92,133,134,92,135,132,92,139,128,89, -142,130,78,145,134,73,151,139,73,155,140,73,158,143,71, -153,145,66,145,141,74,134,133,84,132,130,87,149,130,70, -136,127,72,138,122,80,112,103,96,75,71,85,96,66,64,134, -89,51,129,121,134,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,183,187,183,181,188,181,180,187, -180,183,186,183,184,185,184,184,185,184,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,184,144, -187,159,67,153,190,31,101,159,22,70,132,23,54,105,35,53, -83,54,64,67,66,74,55,59,75,58,54,68,63,48,59,60,64,62, -46,115,87,12,141,118,40,134,119,51,127,121,63,117,119, -70,110,116,75,100,109,77,90,100,73,84,92,70,77,85,67, -73,81,68,65,73,68,50,63,70,48,62,59,54,66,52,66,73,47, -80,80,43,78,83,53,83,77,56,89,76,58,97,80,58,102,90, -59,82,100,82,58,84,97,37,62,89,30,54,74,33,54,66,34, -52,60,33,54,53,37,53,49,41,54,44,44,57,39,46,65,45,82, -80,35,87,83,53,76,80,65,61,72,67,60,66,60,60,65,58,65, -63,54,74,63,48,89,69,45,105,83,44,110,96,45,96,91,64, -89,84,64,95,85,59,107,92,49,126,105,38,160,120,34,181, -131,38,201,141,44,216,154,55,219,165,68,224,168,92,219, -171,110,213,173,120,206,170,123,200,164,120,196,158,117, -179,149,116,159,137,116,132,120,116,112,110,117,107,100, -107,94,94,98,101,99,67,114,106,62,116,108,63,108,106,68, -101,106,73,100,106,74,101,103,77,97,96,76,98,92,75,98, -89,73,96,86,72,96,88,68,98,92,68,95,95,64,90,102,62, -84,99,74,82,98,67,81,97,64,81,94,65,81,88,69,94,96,62, -107,101,53,117,108,49,123,114,47,129,121,46,137,127,49, -146,132,56,149,136,65,152,138,69,150,139,72,141,140,83, -135,139,88,129,136,86,124,132,89,118,125,86,117,118,80, -122,111,75,128,112,64,139,119,63,149,128,67,152,134,68, -151,137,64,150,139,61,141,136,71,128,131,82,118,124,82, -133,124,63,138,122,70,124,124,82,98,98,91,74,65,80,89, -64,62,134,85,46,138,130,142,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,184,185,184,182,186,182,181,187,181, -180,187,181,183,186,183,184,186,184,184,185,184,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,186, -184,142,185,161,61,148,185,24,97,142,18,70,110,22,55,92, -32,49,85,45,50,84,52,52,80,41,52,64,39,52,53,41,53,43, -61,61,29,113,84,16,141,119,35,136,124,42,129,122,61,116, -117,77,108,113,77,97,108,72,90,101,68,86,96,67,80,90, -64,74,84,62,66,76,61,48,63,61,41,52,67,43,50,68,51,52, -65,63,56,65,59,59,70,66,61,42,78,67,35,93,78,45,98,86, -59,74,87,100,45,69,92,29,55,73,27,52,64,27,49,59,28, -45,61,25,43,58,30,45,51,36,48,45,41,52,43,38,55,49,68, -61,50,80,76,46,75,80,57,59,71,61,58,64,57,57,55,87,57, -50,76,65,51,53,85,64,48,101,76,59,98,76,75,82,74,67, -79,75,50,92,85,48,105,90,47,122,98,49,158,118,31,180, -130,38,200,140,50,214,151,56,214,162,51,220,166,78,218, -171,102,212,172,118,205,168,126,198,160,128,196,156,132, -179,147,128,158,132,128,127,114,125,104,101,118,102,96, -96,90,91,95,93,86,90,103,89,80,107,95,73,101,95,75,85, -82,98,79,78,91,77,75,79,76,73,71,82,74,73,85,74,74,85, -74,66,84,75,62,85,76,70,78,72,80,65,66,93,54,66,65,52, -64,57,49,60,56,50,59,57,53,58,58,66,65,49,86,78,44, -103,91,48,112,99,54,118,104,62,123,107,68,132,113,71, -135,116,82,142,125,78,144,132,73,134,129,91,124,124,93, -117,118,104,109,112,104,100,102,91,99,97,81,111,101,59, -123,108,51,135,118,50,147,129,53,149,134,54,147,134,57, -147,133,69,141,135,73,125,126,92,105,105,102,119,99,107, -134,115,81,117,109,118,87,82,104,69,61,75,86,60,63,131, -82,40,148,142,155,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,183,185,183,181,187,182,180,187, -181,183,186,183,184,186,184,184,186,184,184,185,184,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,145, -182,160,75,141,182,42,92,148,32,75,120,21,65,99,14,55, -82,15,50,72,20,46,62,26,45,52,31,46,46,44,47,40,65,59, -29,104,86,12,139,115,31,136,120,40,129,121,60,115,113, -74,106,109,74,96,107,72,89,103,70,86,98,69,83,91,67,79, -85,65,72,78,66,58,66,67,43,54,69,31,48,62,31,50,55,37, -51,51,40,48,55,53,56,32,68,69,30,76,80,38,74,84,47,51, -77,84,30,57,78,23,46,64,24,46,59,20,42,52,14,37,51,12, -35,48,17,38,40,28,43,38,34,45,35,35,46,41,43,53,33,59, -65,31,64,70,46,54,63,54,51,61,51,50,55,82,49,45,68,57, -51,49,72,68,45,73,71,45,70,65,57,70,63,55,80,68,46,94, -80,46,100,88,43,111,97,44,151,115,27,171,129,34,189,139, -44,201,149,48,214,163,52,217,173,82,213,176,104,205,175, -118,196,171,125,190,167,128,183,161,130,166,150,127,143, -135,127,108,114,120,88,100,113,88,92,89,82,84,87,73,82, -79,74,83,65,84,88,59,87,86,64,58,69,77,52,62,69,57,61, -61,63,61,57,67,61,57,68,62,59,71,67,55,74,71,54,67,78, -63,46,70,64,39,54,71,40,54,51,38,58,47,40,57,49,38,53, -48,37,52,48,44,56,35,51,66,22,72,78,26,98,92,42,105, -97,50,103,100,55,103,107,54,107,106,64,119,115,60,123, -120,56,113,115,73,101,110,75,95,102,83,86,92,81,83,85, -72,90,82,66,101,92,49,114,104,45,126,115,45,138,126,49, -143,132,52,143,135,58,138,133,66,134,132,69,111,125,86, -70,98,82,66,86,76,108,102,61,95,100,101,75,75,92,69,58, -71,81,59,59,123,82,36,140,140,150,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,184,186,184,182, -188,182,181,187,181,183,187,183,184,186,184,184,186,184, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,184,152,182,164,85,148,173,52,104,149,41,84,130, -26,68,113,16,54,97,13,46,81,18,43,65,24,42,53,28,42, -47,44,49,35,66,62,22,103,84,16,142,120,20,138,125,32, -132,127,49,119,122,60,110,114,69,99,109,72,91,104,71,87, -100,68,87,97,65,84,93,63,78,86,64,66,78,59,51,68,59, -34,53,60,28,45,66,32,40,74,36,40,64,50,47,58,63,56,53, -68,67,53,66,72,59,42,66,81,26,52,72,22,45,60,22,43,55, -18,40,50,14,37,47,12,35,42,14,36,32,23,38,35,31,40,41, -32,42,45,38,45,40,53,54,43,57,59,56,48,55,60,45,50,60, -43,52,52,50,51,48,61,55,53,64,57,55,63,57,50,65,60,45, -70,66,36,84,73,35,96,83,42,101,88,45,111,95,46,150,114, -23,172,129,33,190,139,43,204,151,54,215,161,59,217,170, -89,212,174,108,205,175,120,198,173,125,190,168,126,183, -160,127,165,150,120,143,135,122,108,112,120,86,95,118,87, -86,108,82,83,94,71,78,88,67,70,80,72,69,78,79,73,76, -59,71,68,49,57,66,50,50,64,56,51,61,64,57,60,67,62,57, -71,67,54,76,72,58,59,67,72,37,56,76,37,53,58,40,50,67, -35,48,66,34,46,62,34,47,54,34,48,45,41,52,38,44,52,40, -58,59,34,90,84,36,102,96,34,101,99,46,94,92,69,95,86, -84,104,89,92,105,90,88,96,90,86,83,84,86,76,80,75,71, -77,64,73,76,54,87,82,45,100,89,51,110,98,48,122,108,49, -134,120,54,140,126,58,142,132,59,139,135,56,134,133,63, -108,120,95,61,82,100,49,64,85,87,76,63,81,86,81,69,72, -68,70,62,53,83,62,45,122,83,23,128,128,135,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,184,186, -184,182,186,182,181,187,181,183,187,183,183,186,183,184, -185,184,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,183,185,183,148,182,159,71,147,168,25,100,136,19, -76,116,18,60,103,16,47,91,17,41,79,20,40,64,26,39,52, -29,41,46,43,49,34,65,62,21,100,82,14,142,116,19,141, -122,32,132,126,49,120,124,62,109,115,71,100,108,72,91, -102,70,86,99,67,86,98,66,86,96,66,83,91,67,78,84,66, -70,76,69,58,62,73,43,48,75,31,40,72,27,39,59,32,43,48, -40,50,39,49,58,38,53,58,43,38,50,68,25,41,63,22,38,55, -22,38,51,22,35,47,22,34,47,22,32,44,19,37,36,19,39,35, -22,40,38,26,39,41,38,39,36,44,52,38,46,54,48,40,49,53, -40,45,53,45,45,48,50,50,47,52,52,47,54,51,46,59,52,46, -67,56,43,72,66,38,82,75,36,90,81,40,98,86,44,114,93, -46,153,113,25,169,131,33,185,140,41,200,149,49,211,163, -58,215,170,87,211,172,106,207,170,118,203,165,122,195, -160,123,182,153,120,167,141,114,144,127,116,113,106,118, -87,90,116,73,84,101,72,81,88,67,75,85,61,67,75,57,62, -66,55,63,59,60,61,63,50,53,65,42,46,59,44,46,53,51,52, -50,58,58,48,65,62,46,65,66,49,47,55,58,33,46,66,39,47, -54,29,46,59,23,40,56,20,37,50,24,36,43,31,39,38,41,44, -33,42,48,35,49,52,25,74,73,22,91,89,24,93,95,39,78,89, -60,66,81,67,65,79,68,70,79,66,71,77,66,64,68,67,63,64, -58,68,62,52,76,64,46,90,71,39,94,85,46,103,93,41,116, -103,43,128,114,49,135,120,52,140,125,53,141,130,53,135, -131,63,99,114,89,47,81,93,33,62,77,54,67,42,57,67,59, -61,62,57,67,58,48,82,58,40,119,79,19,129,125,135,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -184,185,184,183,186,183,182,186,182,182,187,182,183,186, -183,184,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,184,186,183,183,185, -183,182,185,182,171,185,176,138,174,176,49,126,185,8,78, -138,6,60,106,9,52,85,13,47,68,15,43,55,19,41,51,25,41, -42,29,45,32,44,51,35,63,59,31,98,79,24,142,115,23,142, -124,35,134,129,51,120,123,66,108,113,79,99,107,75,92, -103,72,88,100,69,86,98,65,85,96,64,85,94,65,81,91,56, -76,87,53,70,81,48,59,74,43,44,65,40,34,53,44,34,45,52, -35,41,54,38,41,55,43,44,52,33,46,56,22,39,53,17,35,49, -20,36,48,21,35,43,24,37,40,29,41,40,27,44,40,22,41,37, -21,39,34,24,39,30,38,41,27,42,47,45,41,47,50,37,45,47, -39,45,46,46,47,39,48,49,36,50,50,34,53,53,32,61,57,35, -73,62,43,76,68,45,82,73,47,91,80,45,99,88,40,116,98, -35,156,115,31,171,129,45,186,139,47,204,152,56,212,159, -76,213,166,91,207,167,103,201,164,107,198,162,108,192, -159,109,180,152,109,167,142,105,146,129,107,116,110,107, -89,95,106,73,83,103,69,77,92,66,75,79,62,70,70,57,63, -63,51,57,63,52,50,66,48,51,61,43,48,54,42,44,51,45,45, -54,51,48,54,59,55,48,58,57,51,39,46,52,28,43,55,34,43, -46,24,40,51,18,35,43,16,32,40,20,32,37,27,33,37,38,40, -34,39,45,38,45,47,28,65,62,27,85,79,37,86,84,53,71,79, -65,57,69,72,50,59,67,53,58,61,54,57,56,53,56,49,54,55, -41,62,59,30,75,67,25,91,76,30,94,85,46,101,89,44,113, -99,45,125,111,49,132,117,51,139,123,58,140,127,63,133, -126,67,96,108,97,46,76,109,33,58,87,48,58,54,48,56,57, -53,53,51,63,53,43,80,57,33,116,72,28,119,116,121,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,184,185,184,183,186,183,182,187,182,183,185, -184,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,183,186,181,173,187, -170,147,190,158,126,183,151,96,159,150,26,90,159,8,53, -124,11,45,99,15,41,80,20,40,65,22,39,55,24,37,51,30, -39,43,35,45,35,45,51,36,57,59,29,87,79,19,139,110,19, -140,120,31,136,125,50,123,124,67,107,114,80,98,106,74, -91,102,71,85,98,66,83,98,63,81,95,61,82,91,61,86,90, -56,81,89,55,82,87,56,79,82,56,74,77,60,66,70,68,60,62, -76,54,54,74,48,49,68,45,48,60,41,45,62,30,38,58,24,33, -52,22,33,48,20,33,42,19,35,37,20,36,32,19,36,32,21,34, -32,23,33,31,29,35,29,36,42,26,37,44,41,37,42,45,39,39, -45,44,42,46,49,44,39,52,46,38,57,49,37,65,56,40,70,61, -43,72,64,46,75,66,45,80,71,45,89,78,45,102,86,43,122, -97,39,149,117,31,160,131,43,178,141,45,199,154,54,208, -162,74,209,165,87,202,164,98,194,161,101,190,160,102,186, -157,103,177,151,106,157,145,102,139,132,104,115,113,106, -91,96,106,75,81,102,64,74,86,64,71,75,65,68,69,63,62, -66,59,56,66,52,48,66,46,46,56,44,46,52,41,43,50,39,42, -50,41,44,48,47,52,41,47,53,44,32,43,47,22,40,50,27,41, -41,24,36,47,19,34,42,21,31,41,19,31,38,13,40,37,25,44, -32,28,46,34,33,47,24,54,62,22,71,77,30,71,79,43,59,71, -55,46,58,60,38,48,55,40,48,49,43,49,46,50,49,42,60,48, -40,73,55,34,86,70,32,95,82,35,95,87,48,97,91,43,105, -99,41,115,108,42,125,116,47,132,122,54,131,126,58,127, -126,64,84,104,90,35,75,104,29,57,86,41,60,53,37,55,53, -40,53,45,51,52,37,71,56,29,102,75,22,115,116,119,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,184,185,184,183,186,183,182,186,182,184,185, -184,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,182,186,181,165,186, -178,123,168,190,86,144,179,45,112,143,3,75,102,3,54,76, -6,47,59,12,44,47,18,43,41,21,41,40,24,39,41,31,42,37, -36,46,36,44,49,38,55,57,34,85,76,22,140,113,8,141,122, -27,135,124,52,122,121,68,107,117,67,96,105,74,90,99,76, -85,96,73,79,93,67,78,91,63,83,91,63,88,95,54,84,94,54, -86,93,56,86,91,58,83,87,61,77,83,64,74,80,64,71,77,63, -68,75,61,64,72,64,59,69,60,49,63,52,40,56,47,35,51,45, -30,47,43,25,43,43,23,37,47,21,36,48,22,33,46,24,33,43, -29,35,40,36,39,44,34,43,39,36,44,36,43,47,37,49,50,39, -56,54,42,59,56,42,64,57,45,69,60,49,72,63,51,73,65,50, -76,67,49,80,73,44,91,80,43,104,88,41,125,99,43,149,116, -44,158,129,48,173,135,47,195,148,55,202,156,68,206,163, -73,200,164,86,193,161,95,188,158,97,186,158,99,178,153, -100,155,140,112,135,127,109,113,111,107,91,98,102,78,86, -97,63,75,85,63,69,76,64,67,70,65,65,63,63,62,58,58,58, -55,51,54,51,46,49,50,41,44,52,39,41,56,38,38,60,42,41, -63,43,45,57,31,40,54,20,37,56,24,36,51,23,36,44,20,37, -38,26,41,27,30,48,30,21,46,51,25,41,44,27,42,42,33,43, -37,49,53,39,61,61,45,60,62,53,47,55,56,38,48,52,35,46, -47,37,46,38,39,48,29,49,52,21,64,58,18,81,67,27,93,77, -37,98,85,40,98,89,52,100,92,52,104,96,48,113,104,48, -122,111,48,130,119,51,130,124,58,126,123,67,81,100,93, -32,71,106,28,56,85,37,51,68,34,49,61,38,48,52,49,49, -37,71,57,22,100,73,19,115,115,118,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,184, -185,185,184,185,184,182,185,183,184,185,184,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,184,180,187,177,139,189,169,69,148,164, -35,99,140,19,67,108,14,52,89,12,43,72,13,41,56,17,40, -46,22,40,40,25,41,41,24,41,42,28,43,37,34,48,35,40,50, -37,53,55,33,85,74,21,139,109,5,139,119,24,133,121,49, -121,115,65,117,113,70,99,107,76,84,100,74,78,94,69,79, -92,66,83,92,65,84,93,64,87,97,54,89,97,55,91,94,58,89, -91,59,84,88,61,79,84,68,73,84,67,74,80,66,75,79,66,75, -78,71,74,77,70,72,73,66,69,70,66,64,67,67,60,65,68,59, -62,69,52,54,70,46,48,67,44,46,64,45,44,60,46,47,57,50, -49,59,51,50,53,57,52,51,61,55,48,64,57,49,64,57,47,65, -59,46,68,61,49,69,61,50,72,63,51,75,65,51,80,67,50,84, -72,46,95,79,45,109,88,43,121,99,42,141,114,40,150,124, -41,164,132,40,182,144,47,192,153,61,192,164,66,189,165, -81,185,161,90,180,155,92,177,152,91,169,148,93,143,134, -103,125,120,101,108,106,102,92,95,100,80,84,96,68,74,85, -65,68,75,64,65,69,64,64,62,66,62,59,65,61,60,63,58,58, -61,55,59,55,48,60,48,42,61,40,39,62,32,38,59,31,44,52, -29,42,55,22,34,55,20,33,49,24,33,42,24,35,36,32,45,30, -39,53,34,30,40,50,27,36,42,27,37,39,30,40,33,37,48,31, -40,52,31,39,51,38,36,45,46,32,41,46,33,41,43,38,41,35, -49,46,32,64,57,32,75,70,31,85,80,38,91,87,42,94,92,43, -96,96,55,94,95,52,97,96,46,106,103,45,117,112,47,126, -119,51,128,123,58,125,122,67,81,99,92,32,70,107,22,56, -83,27,50,64,28,50,59,33,49,50,48,50,37,76,58,25,95,79, -20,87,91,92,183,183,183,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,184,185,184,184, -185,185,184,185,184,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,184,185,184,177, -188,172,117,170,201,38,115,155,5,74,109,8,58,82,8,49, -66,11,46,57,12,42,48,16,40,43,22,41,41,25,41,41,24,41, -41,28,43,40,34,46,44,39,49,41,53,55,33,84,72,22,138, -108,10,139,118,31,133,122,43,121,117,53,117,112,72,101, -110,77,84,99,81,75,89,81,79,89,80,81,88,73,81,88,71, -83,86,76,83,87,64,86,86,58,85,86,59,81,83,62,77,81,69, -70,81,69,69,75,65,70,74,60,68,72,59,68,73,55,68,72,48, -71,75,48,68,75,49,63,72,50,62,69,55,59,65,53,54,62,48, -53,59,49,54,56,53,54,55,58,56,56,57,57,55,55,60,54,55, -62,54,52,64,57,47,65,59,44,66,60,44,67,61,44,70,63,44, -72,64,41,74,67,38,79,70,37,86,78,32,99,84,40,111,90, -47,120,96,50,138,107,52,149,120,51,161,128,49,181,142, -56,192,152,65,189,158,75,184,159,80,180,156,86,177,151, -94,174,147,97,166,144,99,139,130,103,121,116,98,107,106, -95,92,96,91,81,86,92,69,75,91,66,69,76,65,66,68,63,63, -61,66,63,58,65,61,63,63,59,59,63,58,56,63,58,55,58,55, -53,49,52,49,37,48,42,29,44,41,28,43,50,24,36,53,19,31, -55,23,29,53,23,29,53,23,30,51,23,32,47,22,32,41,22,31, -40,23,32,41,26,34,42,31,39,43,32,41,41,31,41,39,30,41, -36,30,44,28,35,48,26,47,54,31,63,62,36,77,70,44,83,76, -47,89,81,59,92,85,66,96,91,61,95,94,57,93,93,55,96,94, -52,106,102,50,118,112,47,126,120,46,128,123,56,126,124, -65,84,102,90,32,71,102,20,54,81,26,50,60,27,52,49,34, -52,41,50,54,31,81,64,18,99,79,43,84,89,88,182,182,182, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,184,185,184,184,185,184,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,183,186,182,174,187,169,78,162,190,25,99, -137,4,65,101,4,54,77,10,45,63,17,41,55,18,39,49,20,39, -44,23,40,42,25,39,40,28,38,40,31,41,39,35,44,42,38,48, -39,49,54,31,80,73,21,137,107,8,137,119,31,131,121,42, -122,121,56,111,114,70,94,111,75,78,100,80,65,88,77,61, -83,71,63,85,68,65,83,65,66,76,66,73,78,56,74,79,51,70, -77,50,67,73,51,57,69,56,53,66,54,54,64,54,55,63,50,54, -62,50,55,62,46,54,62,40,56,64,40,56,64,42,56,63,45,58, -61,50,56,58,49,52,57,46,48,56,49,43,53,51,42,50,54,44, -50,50,45,51,49,45,49,49,44,49,44,48,53,42,55,55,40,58, -56,39,62,57,40,66,60,41,70,61,38,77,66,38,81,74,40,94, -79,35,104,87,42,110,93,48,120,99,51,133,108,50,141,116, -48,154,127,47,168,135,49,181,142,55,184,146,65,181,151, -74,176,152,83,166,145,87,161,141,90,155,137,91,135,126, -98,123,114,95,112,104,93,100,95,91,89,83,92,75,72,89, -66,69,74,63,67,67,60,65,61,59,65,57,60,61,60,60,59,57, -61,59,55,61,58,55,61,55,54,59,54,54,54,54,51,50,50,51, -45,43,53,39,37,55,35,32,57,31,31,51,25,31,49,24,31,47, -23,31,42,23,32,38,25,33,39,30,34,39,33,35,39,37,38,38, -42,41,38,45,43,39,48,48,40,57,56,39,68,67,45,74,72,48, -81,76,51,89,81,54,87,86,56,88,86,62,86,83,63,90,87,55, -91,91,53,90,92,52,93,92,48,102,98,45,113,107,42,124, -118,45,123,124,55,117,124,62,74,100,87,27,72,103,20,56, -84,26,50,61,30,50,50,33,51,42,41,53,31,65,67,18,80,87, -48,72,83,82,181,182,182,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,181,186,181,170, -186,167,69,152,187,19,89,134,3,62,103,3,50,78,11,45,61, -18,41,53,20,40,49,21,39,47,24,40,45,26,39,41,29,38,38, -31,41,35,36,45,35,38,48,34,49,55,26,80,72,14,138,108, -4,137,118,34,131,121,49,125,123,59,115,119,65,91,108,83, -74,97,86,63,87,81,55,78,75,51,73,68,50,69,61,55,66,52, -60,67,44,64,69,46,62,68,46,60,64,52,49,62,50,46,58,46, -44,55,47,43,51,48,43,50,52,44,49,53,43,49,51,43,49,51, -42,49,50,42,49,49,45,49,50,46,49,51,41,47,50,37,45,50, -32,42,46,33,42,45,35,43,37,36,44,39,38,43,39,41,45,41, -44,48,43,51,51,35,56,54,37,62,57,39,66,59,37,73,62,38, -80,67,42,81,74,43,98,83,37,110,91,41,114,96,45,124,100, -50,134,108,57,139,113,63,148,119,63,162,128,60,177,138, -56,184,147,63,180,150,72,173,148,80,164,142,85,157,136, -87,152,133,92,132,122,101,120,114,97,111,104,94,101,97, -89,92,88,85,80,79,74,71,75,66,67,71,68,62,67,66,60,65, -60,61,64,55,61,64,52,60,62,51,59,59,50,59,57,51,59,57, -52,55,56,49,54,56,47,54,55,48,52,53,44,51,52,44,48,52, -38,42,52,37,42,51,33,41,52,31,42,53,32,44,53,32,50,55, -34,55,59,37,60,63,40,65,68,38,70,72,36,73,75,36,78,79, -41,82,84,44,85,88,44,87,89,45,92,89,52,89,90,62,87,87, -62,87,85,59,89,86,58,87,87,53,88,90,47,94,93,44,104, -100,44,118,109,43,129,122,46,125,126,54,118,122,64,70, -95,88,26,71,105,21,56,86,27,49,65,28,47,56,29,45,51, -32,44,43,52,51,42,61,70,58,41,58,63,120,127,134,180, -180,181,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -184,185,183,178,186,177,166,185,162,74,149,183,22,87,134, -1,59,99,1,49,72,10,44,59,16,42,52,18,41,48,20,40,47, -22,40,45,24,39,40,29,39,36,32,40,34,35,43,31,40,47,32, -51,53,23,85,71,11,135,105,4,135,116,32,130,119,46,127, -120,55,127,119,64,98,108,84,76,95,83,62,84,77,46,71,66, -42,66,61,45,64,53,50,63,48,55,64,43,58,66,44,54,64,43, -52,60,49,44,57,43,43,55,41,42,54,41,39,51,40,37,48,43, -35,47,48,30,45,43,28,44,40,25,43,38,26,43,38,28,43,40, -30,41,42,27,40,41,28,39,40,29,40,38,30,40,38,34,41,32, -35,42,34,37,42,35,41,44,36,44,47,38,55,52,33,61,56,36, -66,58,37,72,63,36,77,67,37,82,70,42,85,75,39,102,86, -39,111,94,44,116,98,48,123,103,49,129,108,58,133,113,63, -142,117,63,154,125,60,166,135,54,174,143,58,174,146,67, -171,145,77,163,140,81,156,136,84,149,132,89,131,119,100, -115,109,98,108,99,90,104,94,82,97,89,79,87,84,74,83,79, -69,77,76,72,66,69,69,62,63,62,58,64,57,52,63,53,50,61, -51,48,58,51,45,54,50,45,53,51,42,54,47,43,54,46,45,54, -47,48,55,45,52,55,45,52,56,47,53,58,47,56,58,45,59,60, -42,61,61,43,62,63,46,63,63,48,65,65,51,67,68,51,70,71, -49,77,76,47,83,79,50,86,82,54,89,86,55,90,90,53,92,91, -51,91,88,56,88,86,62,84,84,63,83,83,62,85,83,60,89,87, -62,93,90,57,99,94,50,107,100,45,121,110,39,135,120,40, -134,123,51,125,119,59,74,91,80,29,66,98,25,54,82,27,50, -64,27,47,54,25,42,49,26,39,42,33,42,38,37,50,38,34,49, -53,107,114,122,177,178,178,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,184,186,183,179,187,178,163,185,159, -70,146,177,19,87,129,1,58,94,0,49,70,9,45,57,16,44,50, -17,42,48,17,41,47,20,41,45,22,40,40,27,41,36,30,42,32, -33,44,28,38,47,31,53,54,23,89,71,9,132,103,5,133,114, -26,130,119,40,130,121,52,131,121,57,109,113,73,84,97,73, -68,86,72,52,74,66,46,68,65,47,64,63,49,63,55,52,61,53, -50,60,50,47,59,44,49,57,41,50,57,40,50,58,41,51,58,40, -50,58,38,43,55,41,36,51,43,31,48,40,29,47,39,28,45,39, -29,45,41,31,44,42,31,41,45,30,39,44,32,38,40,32,39,36, -33,40,38,38,42,35,40,44,39,42,45,39,43,45,37,49,48,34, -58,54,36,64,57,36,71,62,36,79,70,40,81,71,39,87,74,40, -97,83,38,106,92,45,111,97,53,115,101,57,123,108,55,126, -111,58,130,115,62,139,118,62,151,125,60,162,135,54,164, -135,63,168,142,70,167,144,77,160,140,81,154,135,86,146, -129,89,128,115,93,113,102,89,112,96,81,112,93,74,105,89, -79,93,86,77,92,83,70,87,80,73,74,71,71,64,64,70,59,62, -67,50,59,66,45,56,64,42,52,61,37,47,57,35,44,56,31,44, -50,30,43,46,33,45,45,37,46,44,44,48,43,44,50,51,46,52, -48,50,54,47,54,55,45,57,57,46,58,59,47,58,60,46,59,61, -48,61,62,49,63,65,49,68,69,50,76,73,53,81,77,54,84,81, -53,84,84,52,86,86,53,86,85,56,85,83,62,81,82,62,76,78, -56,78,79,53,80,81,57,86,83,54,96,91,49,108,103,44,122, -113,37,135,122,37,131,123,49,122,121,55,73,90,77,29,64, -97,24,52,77,27,49,65,26,47,54,24,41,48,22,37,42,24,38, -37,30,41,30,33,49,46,103,113,115,173,174,175,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,184,185,184,183, -185,183,173,186,170,73,148,178,15,86,126,2,59,94,0,48, -72,7,45,58,16,45,48,19,44,45,19,42,45,18,40,44,20,39, -41,25,40,38,30,41,33,32,44,31,38,48,33,54,54,25,92,74, -5,133,104,3,133,113,24,129,118,39,127,120,44,131,123,52, -123,122,60,103,112,66,82,98,67,64,85,61,54,75,57,50,68, -56,48,66,45,50,65,46,49,64,47,48,63,42,54,65,37,59,66, -39,58,64,40,60,65,41,60,66,43,50,62,49,45,60,42,43,58, -38,41,57,38,39,54,39,38,51,40,39,51,40,39,49,41,36,45, -43,39,44,36,40,48,31,40,49,33,41,50,36,42,49,36,44,49, -34,47,50,33,55,55,30,63,61,34,67,64,33,74,69,36,80,73, -41,84,75,40,93,80,36,105,91,32,111,98,44,113,100,53, -118,105,59,122,110,62,130,117,62,133,120,63,140,122,62, -149,127,57,159,133,50,157,136,72,160,138,79,164,142,86, -161,140,89,154,135,92,145,125,93,131,115,85,120,106,84, -117,100,78,115,98,76,104,93,88,93,89,81,94,87,68,92,84, -67,81,77,67,69,69,70,62,65,74,54,63,72,45,56,65,40,51, -60,36,47,58,33,43,55,31,42,49,28,40,45,29,40,43,30,40, -40,34,42,40,32,42,39,33,44,38,38,46,40,41,48,41,44,48, -42,45,50,46,45,50,46,46,51,46,47,53,47,49,55,48,52,57, -50,59,61,51,65,66,51,70,71,50,70,73,48,72,73,47,73,73, -52,73,74,56,72,74,55,73,75,51,76,78,46,80,82,42,86,84, -40,95,91,39,108,102,37,126,116,36,135,124,38,127,125,54, -119,120,62,66,83,80,26,59,99,25,51,74,26,46,63,24,45, -51,23,41,46,22,38,41,23,37,40,29,40,33,33,49,41,85,97, -95,158,161,161,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,184,185,184,180,186,177,94,156,179, -20,88,128,1,59,93,0,46,71,8,44,56,19,44,48,23,42,43, -23,40,43,21,39,44,21,39,41,26,40,38,30,40,32,31,43,32, -36,47,34,51,55,25,92,74,4,130,105,3,133,113,24,129,117, -38,128,122,45,130,125,53,127,125,58,119,119,66,105,108, -68,89,96,64,80,89,62,73,82,59,69,77,54,64,75,51,60,71, -50,57,69,47,60,69,44,66,70,43,67,67,43,67,68,45,64,68, -48,57,63,53,53,62,47,55,63,43,57,63,43,54,59,41,51,57, -42,49,56,42,48,55,40,47,53,43,50,56,39,51,57,34,51,57, -35,51,55,39,53,53,38,58,54,38,62,57,39,65,62,37,69,62, -35,75,67,35,81,72,38,86,75,41,95,79,42,108,86,42,120, -97,38,125,101,45,130,106,56,131,112,63,129,120,68,135, -120,67,138,122,64,144,123,60,152,127,55,164,133,54,157, -136,72,157,133,78,159,133,82,159,135,87,154,130,87,150, -123,89,146,117,83,131,111,84,124,105,79,117,102,79,100, -96,92,94,91,84,94,87,71,96,85,65,90,81,66,77,73,73,67, -68,77,57,62,71,49,57,66,42,50,60,39,47,57,36,43,55,34, -41,50,31,41,47,32,41,45,32,42,42,31,42,42,32,43,40,31, -42,38,32,41,38,32,42,38,33,42,38,34,43,42,34,44,42,36, -45,42,37,46,42,39,47,43,42,48,44,44,50,44,47,51,42,51, -55,43,55,58,45,61,62,46,67,64,50,64,65,50,64,65,49,65, -65,44,73,69,39,80,78,38,84,79,34,92,83,31,110,99,34, -130,116,36,136,124,39,124,123,55,111,118,64,56,80,79,20, -57,97,24,51,72,27,46,60,24,43,50,22,40,45,20,35,40,21, -35,39,27,38,36,32,43,39,66,74,73,125,129,132,175,177, -177,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,180,184,180,101,159,189,20,84,138,0,54,98,0,46, -73,9,44,56,19,44,50,24,41,42,25,42,40,22,40,41,21,39, -42,26,39,39,31,41,33,31,43,33,36,47,34,52,56,25,95,77, -4,130,103,15,134,112,27,132,119,40,127,120,48,128,123, -56,127,126,57,126,128,53,123,128,49,114,123,44,104,116, -43,96,106,46,87,96,50,80,92,46,72,86,44,66,79,43,65, -75,49,72,79,31,76,78,40,76,79,41,71,78,37,65,75,35,61, -72,39,62,70,35,65,72,30,66,75,23,62,73,17,60,73,18,60, -73,18,60,71,24,62,71,28,63,71,28,62,70,30,65,70,27,69, -70,32,73,70,35,74,70,34,74,72,35,81,75,33,85,79,29,90, -82,28,99,89,34,108,93,40,119,97,44,127,104,38,133,110, -42,142,119,50,142,124,56,134,126,56,139,124,68,140,124, -66,146,125,57,156,131,56,168,135,69,159,137,64,158,134, -68,160,134,75,156,132,77,152,129,82,151,125,91,150,120, -89,137,117,80,131,112,80,122,105,85,104,98,94,101,97,83, -98,88,82,100,89,72,97,87,67,81,76,86,77,76,85,65,68, -79,53,59,67,47,56,55,44,53,47,41,50,44,38,48,41,33,45, -40,35,46,38,35,46,32,35,48,28,36,48,35,35,46,39,35,45, -38,34,44,36,36,46,36,36,47,34,36,48,30,36,48,28,37,49, -30,39,48,35,41,47,39,42,47,36,45,49,35,45,49,38,45,49, -42,50,51,44,58,57,37,59,62,35,60,63,34,64,65,34,70,65, -34,73,70,31,79,74,27,91,83,26,110,99,31,129,115,41,136, -123,52,124,121,61,107,113,73,51,74,81,19,56,94,24,49, -72,25,43,64,23,42,49,20,37,44,19,34,41,19,33,34,24,36, -31,28,39,29,40,51,48,87,96,98,173,174,175,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,183,185,183,165,185, -174,81,139,188,16,77,138,1,50,100,7,42,74,17,43,58,23, -43,51,23,43,42,25,44,41,21,39,40,22,39,42,26,39,39,31, -41,33,33,43,34,39,45,33,58,54,25,100,76,4,126,100,13, -131,111,25,135,118,40,134,121,51,126,124,56,130,123,56, -135,126,54,140,129,54,143,132,58,138,129,61,128,122,66, -117,110,67,110,103,62,100,99,60,89,94,59,85,87,64,98, -91,46,94,92,54,92,88,50,94,86,47,90,85,47,88,82,52,82, -80,47,81,80,39,87,84,33,89,86,31,85,86,33,80,87,32,82, -85,38,86,84,44,87,85,44,84,86,47,94,88,46,98,85,50,98, -84,51,96,84,49,96,84,49,100,91,48,101,95,44,106,98,43, -112,100,45,117,103,48,122,107,50,130,118,46,137,120,48, -142,125,54,144,127,57,149,126,60,145,124,70,145,124,67, -150,130,61,158,139,62,157,140,69,156,137,62,157,135,67, -157,132,73,158,134,79,152,132,84,147,125,91,151,118,89, -144,120,84,141,116,86,133,107,90,120,99,98,115,98,88, -106,94,88,99,90,73,101,93,72,95,81,95,82,77,87,68,70, -81,58,63,70,56,59,60,55,56,52,54,54,50,51,53,47,47,49, -46,49,49,44,51,49,37,49,50,33,47,50,39,44,52,45,45,50, -44,44,49,42,44,50,40,45,49,38,47,50,35,50,53,35,52,53, -38,49,52,40,49,52,45,51,54,43,52,56,41,50,52,41,50,49, -44,51,51,43,58,57,36,60,60,33,64,63,34,66,65,34,65,69, -34,73,72,32,81,76,29,95,83,27,115,98,32,124,113,39,126, -121,48,127,119,60,109,109,71,52,70,78,24,52,92,28,45, -71,23,42,63,25,39,48,21,38,45,16,35,41,20,34,34,22,35, -29,27,38,28,29,42,38,59,72,77,169,171,172,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,181,185,182,143,174, -173,44,118,162,15,78,122,3,55,85,9,48,58,19,47,50,24, -46,41,26,46,42,25,44,45,22,40,42,23,40,39,26,40,35,32, -41,40,35,46,32,42,49,27,61,59,19,101,78,5,127,102,12, -132,112,22,135,118,37,135,123,51,127,125,54,133,127,55, -138,129,60,143,132,61,149,139,61,147,140,58,142,139,59, -135,134,64,130,130,62,120,126,59,108,121,54,103,113,55, -113,111,52,109,114,49,107,109,42,109,108,37,105,106,32, -103,104,39,100,104,43,99,101,45,104,102,49,106,103,51, -102,102,49,94,102,46,97,105,37,104,109,34,106,110,35, -101,108,40,110,108,40,120,115,41,122,117,46,122,117,47, -125,120,49,126,122,53,124,122,53,124,119,52,130,120,56, -134,122,58,137,124,62,139,125,68,144,127,67,146,127,69, -147,128,73,154,128,82,153,132,79,152,133,74,157,135,71, -163,142,69,162,146,67,164,143,81,162,139,75,161,138,71, -160,139,74,155,136,82,149,129,90,157,126,91,150,127,89, -145,124,78,141,122,72,130,117,77,123,113,63,115,109,73, -107,101,76,105,98,78,103,99,70,85,84,77,72,77,72,61,68, -63,58,63,58,62,64,57,62,64,50,58,63,40,55,63,36,59,63, -35,61,63,32,58,64,31,54,60,40,48,60,32,48,58,30,50,61, -31,51,62,30,53,62,32,55,62,32,57,63,35,58,63,37,55,62, -35,55,62,34,55,61,40,56,63,30,55,62,30,56,60,36,57,60, -37,63,64,36,65,69,26,68,72,19,72,76,21,73,80,29,81,82, -26,89,87,19,104,95,19,125,112,33,128,117,45,125,119,56, -126,119,60,106,108,73,49,67,74,22,51,83,27,45,65,22,42, -58,25,40,45,22,39,46,17,35,45,20,33,41,22,34,33,27,37, -32,27,38,41,35,49,62,155,157,161,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,180,185,181,142,169,171,39, -109,155,12,71,119,3,53,87,12,49,61,19,47,51,30,43,42, -31,43,43,28,42,45,26,39,43,29,39,40,32,40,37,29,41,39, -35,45,33,44,49,28,64,60,21,103,79,7,129,102,15,133,112, -24,135,118,37,134,120,49,135,122,56,137,125,55,139,129, -59,140,132,59,145,139,61,150,141,61,155,139,66,151,136, -71,145,135,72,143,132,72,139,126,70,137,119,73,132,120, -65,132,122,65,132,119,61,131,119,56,132,121,56,132,119, -63,127,115,65,123,113,65,121,113,66,119,113,65,119,113, -64,119,111,64,119,115,55,125,120,52,127,124,54,126,124, -63,128,126,61,136,130,59,140,132,64,142,131,66,145,133, -67,146,134,70,144,133,72,143,131,71,143,132,70,142,132, -68,140,132,69,143,129,73,149,133,73,150,134,76,148,135, -77,147,133,82,146,134,79,151,136,77,157,138,74,166,139, -70,172,141,70,168,142,82,162,140,77,162,141,74,163,141, -78,159,135,84,155,128,92,157,125,89,154,124,88,147,123, -79,146,123,76,148,115,83,141,118,75,130,113,82,120,110, -87,111,106,86,109,109,78,101,98,94,84,86,85,75,79,78, -69,72,71,71,70,67,76,69,61,79,68,54,80,69,51,78,69,49, -74,71,45,71,72,43,68,67,50,63,66,44,63,68,44,62,69,43, -67,69,42,65,70,44,62,70,42,60,70,42,59,68,42,59,69,42, -60,68,41,61,62,43,65,66,36,63,65,36,60,64,40,65,62,41, -65,67,38,79,68,31,88,74,29,92,82,34,95,87,45,101,87, -40,107,94,32,114,106,32,124,120,40,123,122,47,122,122, -58,119,124,60,94,109,71,41,69,72,17,52,82,22,46,64,20, -40,56,20,41,44,21,39,46,19,34,44,20,34,42,23,34,33,27, -38,32,28,41,43,24,40,52,124,131,136,182,182,183,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,184,177,184,177,135,171,149,38, -105,165,8,69,118,2,52,91,11,47,72,19,46,51,31,45,41, -32,46,38,27,44,35,27,43,33,29,42,31,33,43,31,30,42,40, -37,47,32,47,52,27,67,64,19,106,83,6,130,104,12,135,111, -30,136,116,44,136,119,55,136,122,59,139,126,60,140,129, -62,141,132,62,143,135,61,150,140,60,158,144,60,157,143, -74,151,143,72,151,142,72,149,140,71,152,138,70,148,140, -73,147,140,67,146,136,68,145,134,69,145,136,71,145,136, -64,142,135,67,139,134,70,136,132,71,134,131,74,135,130, -78,136,134,66,138,135,68,141,137,70,141,139,71,139,140, -71,139,139,68,146,140,73,149,142,77,152,143,74,155,145, -72,154,144,70,152,142,75,151,140,79,150,138,81,148,137, -82,145,134,83,148,135,77,155,138,79,157,140,83,153,139, -83,152,137,83,150,137,77,154,138,78,159,139,77,169,141, -78,175,143,81,171,147,84,168,145,85,167,144,87,167,143, -89,163,139,91,161,135,94,163,133,92,159,133,82,152,130, -82,150,127,84,156,128,79,150,125,97,136,124,74,130,125, -76,122,121,83,113,112,91,113,119,69,102,114,58,91,105, -52,85,97,46,86,95,40,92,95,32,96,96,32,100,96,44,96, -92,51,90,90,52,84,87,52,82,85,54,79,85,50,78,84,49,75, -84,48,81,84,48,79,84,62,74,81,57,70,79,51,66,77,44,64, -75,39,65,75,35,70,77,28,74,77,41,68,73,37,65,73,36,72, -72,41,70,79,18,89,85,12,105,98,16,109,106,21,110,109, -29,118,110,40,126,114,51,131,120,62,129,121,67,124,121, -67,124,121,69,119,119,77,95,108,81,41,67,74,18,52,80, -22,46,61,20,41,54,20,40,45,20,38,44,20,36,43,19,33,41, -22,33,36,25,36,34,26,40,41,25,42,50,91,102,109,166,168, -170,184,184,184,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,184,185,184,178,184,178,132, -171,148,27,108,163,6,70,115,1,58,92,3,49,71,19,47,52, -31,49,44,30,47,39,27,45,36,26,44,34,29,44,33,33,46,33, -33,43,42,42,47,34,53,52,29,73,65,23,107,85,8,130,105, -12,132,114,31,132,118,45,130,119,54,130,124,58,135,125, -58,137,128,58,140,129,59,145,132,58,151,137,58,157,144, -59,155,143,73,155,144,75,158,147,78,158,144,76,160,143, -75,159,145,81,159,147,77,158,147,82,157,145,82,158,143, -83,158,143,78,158,143,82,156,140,84,154,139,85,151,138, -87,149,136,89,151,141,79,150,143,80,148,140,76,149,140, -76,152,139,78,153,140,77,155,139,79,159,140,82,161,141, -79,163,144,76,162,146,78,159,144,81,157,140,83,157,138, -85,155,137,86,150,135,86,151,135,78,155,135,77,162,134, -81,161,132,80,156,132,80,156,133,77,160,134,78,162,137, -78,165,142,78,169,143,79,175,145,85,174,143,87,172,143, -89,170,142,91,166,138,92,164,134,94,162,133,92,165,138, -88,166,137,93,162,134,94,163,133,87,152,126,99,148,128, -82,150,131,88,142,124,94,130,112,97,136,114,77,137,115, -75,134,110,75,127,105,70,127,106,66,132,113,63,128,119, -63,119,116,69,114,109,73,111,104,73,109,102,74,103,102, -75,99,101,69,95,99,67,92,96,63,93,94,61,89,89,72,85, -85,67,84,83,61,84,82,57,81,80,53,82,84,50,87,90,44,88, -87,52,83,80,48,83,82,50,84,82,54,99,90,41,113,103,36, -124,117,40,130,123,45,131,124,52,133,131,62,132,133,68, -129,133,72,124,128,72,121,124,71,119,122,71,112,118,75, -84,108,78,36,66,72,20,50,80,23,45,61,23,40,55,24,40, -45,23,38,44,19,35,42,20,34,42,23,34,38,25,37,34,27,40, -41,30,46,54,84,94,103,154,156,159,180,180,180,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,184,185,184,178,184,179,136,166,184,23,109,196,7,70, -131,2,57,100,4,48,74,20,48,54,32,51,41,31,50,36,27,46, -35,26,44,35,29,45,37,34,46,34,35,47,34,44,51,31,57,59, -24,77,71,17,109,86,14,131,105,20,133,115,32,134,120,40, -133,124,45,131,126,50,137,128,54,139,130,56,140,130,57, -147,134,59,152,137,60,157,143,61,158,148,57,159,151,62, -161,153,67,163,151,67,166,151,70,166,153,77,164,153,74, -163,156,70,163,155,68,164,153,76,164,150,84,164,148,87, -163,149,87,163,150,84,160,149,81,159,149,79,159,149,82, -157,151,78,153,146,79,153,144,85,158,144,85,157,144,83, -158,144,80,161,143,83,165,145,86,166,146,85,162,144,83, -159,143,81,158,142,81,160,142,83,159,142,84,155,141,84, -153,137,84,156,136,82,163,137,78,165,137,78,159,133,89, -157,133,84,160,132,84,162,136,88,163,137,89,167,138,88, -173,143,86,173,144,83,172,145,84,170,145,86,169,143,89, -168,139,92,166,138,87,169,141,90,170,142,90,168,141,87, -169,141,82,159,139,81,159,141,88,159,143,89,153,141,80, -142,135,68,147,133,59,153,139,62,153,139,63,149,135,60, -152,137,67,155,139,76,146,139,78,134,132,84,129,128,76, -131,130,68,130,132,68,123,130,70,118,126,74,114,122,73, -107,115,67,106,112,67,101,109,58,99,106,55,98,105,53,99, -105,51,101,106,53,100,106,57,101,105,59,102,105,56,102, -106,45,103,110,38,105,113,40,122,119,43,133,127,47,142, -137,54,146,141,61,149,142,76,143,140,81,137,137,87,132, -133,89,126,127,85,123,125,77,121,125,71,113,120,73,81, -102,90,34,63,77,19,51,74,23,44,65,22,40,52,23,40,45, -25,40,45,21,37,44,20,34,43,25,37,34,26,39,31,27,41,36, -30,46,46,88,97,104,156,159,162,181,181,181,184,184,184, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -184,186,184,173,186,177,112,172,175,27,94,187,9,65,131, -10,54,101,11,45,74,24,46,54,36,48,40,35,47,35,30,45, -35,27,44,36,29,45,36,34,47,33,36,47,34,43,51,30,60,61, -26,82,74,21,107,87,15,127,106,18,131,115,33,131,120,41, -130,123,45,129,125,49,132,128,52,132,129,53,135,131,55, -139,133,56,142,135,55,147,139,55,159,145,54,166,146,63, -169,148,69,168,150,70,168,152,73,167,153,78,162,154,74, -163,155,68,166,156,70,167,154,79,163,152,86,161,149,87, -161,149,86,163,151,85,162,150,82,164,150,82,161,150,85, -163,150,81,162,147,85,162,144,90,163,143,89,158,146,86, -161,147,84,162,147,87,161,145,85,163,145,82,162,144,81, -158,142,79,156,141,78,156,142,80,156,140,82,156,137,84, -156,136,86,160,134,85,166,138,81,166,142,82,164,135,94, -158,136,87,158,137,87,158,135,87,158,132,84,158,133,81, -173,136,81,176,137,80,177,139,82,179,142,87,175,142,90, -168,139,92,169,137,89,175,138,91,174,140,91,171,141,88, -170,144,84,172,140,87,167,143,94,167,140,92,166,139,85, -163,139,80,171,138,72,174,144,75,171,147,77,167,146,76, -168,148,82,169,147,89,163,146,92,157,138,100,155,138,95, -157,144,87,155,146,87,150,143,88,146,136,92,144,131,92, -139,128,89,134,124,89,136,124,84,135,122,83,133,121,81, -133,124,79,132,121,78,129,118,79,122,118,78,126,117,75, -130,122,67,132,124,59,139,126,63,145,136,63,147,143,63, -151,148,65,153,149,70,150,144,79,143,139,80,137,132,85, -131,125,86,127,122,83,124,121,76,122,122,69,111,117,69, -74,98,85,30,59,73,18,48,72,19,43,63,21,40,50,24,39,44, -25,39,45,23,36,44,20,33,43,26,36,33,27,38,30,31,42,37, -43,53,56,97,104,111,164,166,168,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,184,185,185, -183,186,184,172,185,182,111,160,194,37,96,163,11,68,110, -12,58,84,13,49,65,24,46,48,37,49,39,36,48,37,30,45,37, -28,45,37,31,47,39,34,47,39,37,49,31,44,51,33,59,60,29, -81,73,21,108,89,13,128,105,26,133,116,35,133,122,43,132, -124,52,131,124,57,134,126,64,134,128,67,136,129,68,139, -131,69,142,131,69,146,134,72,157,138,72,165,144,69,171, -150,71,170,152,68,168,153,68,168,154,76,164,156,77,164, -155,75,167,156,75,169,159,75,166,157,82,163,155,79,164, -155,80,165,154,84,166,153,86,169,154,87,165,153,89,165, -150,91,166,150,91,169,150,94,171,150,102,163,149,101,166, -149,100,166,149,102,164,145,101,166,145,98,165,144,96, -161,142,95,157,140,94,157,140,93,158,140,93,159,140,94, -161,140,93,166,141,88,170,140,94,169,141,99,170,144,85, -166,146,85,163,142,89,163,141,85,163,139,81,161,135,84, -171,132,87,178,138,85,179,141,84,178,143,84,177,144,88, -173,144,90,176,143,92,178,145,78,176,144,83,173,143,93, -170,141,96,175,140,103,169,144,96,170,145,88,173,147,86, -171,147,85,179,148,76,181,153,82,180,155,86,175,155,85, -176,156,91,177,156,99,173,157,92,172,157,93,171,157,91, -168,157,90,164,156,92,161,155,98,158,152,93,158,149,92, -153,146,92,150,143,89,154,146,80,156,148,79,154,148,81, -150,144,80,150,143,82,149,142,86,140,138,87,141,135,79, -146,139,82,148,140,86,155,140,99,155,147,78,154,150,80, -155,151,86,155,149,85,150,144,79,141,135,89,134,130,82, -131,127,77,126,123,72,125,123,71,123,123,74,111,115,82, -72,92,101,29,56,85,18,47,76,18,43,60,20,40,49,24,39, -44,25,38,46,23,36,44,21,34,40,26,37,30,28,40,30,30,42, -32,52,61,55,105,112,113,170,171,173,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,184,185,185,177,184,182,115,164,188,48,100,164,16,67, -111,15,55,84,12,48,64,23,45,47,35,49,38,31,48,36,26, -46,36,28,47,37,31,47,38,36,46,39,42,49,33,44,51,33,59, -60,29,79,72,20,105,87,11,126,103,24,130,113,33,133,120, -42,130,123,51,126,124,56,132,125,64,131,126,66,131,128, -66,135,130,67,139,130,67,145,130,68,152,133,67,159,141, -65,167,146,67,171,149,66,173,152,69,173,151,75,173,151, -75,170,153,75,166,154,72,173,155,73,172,155,83,169,154, -81,170,154,82,170,152,85,172,150,86,173,151,85,169,151, -89,167,148,90,171,150,93,173,152,97,171,151,103,170,149, -104,172,148,102,171,148,104,166,145,102,166,142,96,168, -140,95,165,137,95,163,135,95,164,136,94,163,139,96,160, -142,98,158,144,96,164,144,91,165,143,95,160,137,95,166, -140,81,170,142,84,161,140,88,160,139,83,167,143,83,175, -138,91,170,139,89,173,140,84,177,143,84,175,144,84,176, -145,88,175,145,92,167,146,92,171,151,80,171,147,83,167, -141,90,166,139,94,162,140,99,167,140,93,171,141,87,172, -143,83,173,144,84,178,146,74,181,152,82,185,154,87,193, -157,93,186,155,94,173,155,97,172,158,93,174,160,95,174, -159,94,175,157,93,175,157,97,172,155,103,167,154,98,167, -154,101,168,154,105,167,155,105,169,152,90,169,151,87, -167,152,89,163,151,90,160,151,91,157,151,96,153,146,99, -153,146,92,157,148,93,153,146,94,150,143,101,160,149,82, -160,151,84,158,150,86,153,145,82,147,139,74,139,130,86, -136,128,82,133,126,79,128,122,73,128,122,72,126,122,74, -109,114,81,66,91,98,27,56,86,17,46,76,17,43,60,22,39, -49,25,38,44,26,39,47,23,36,44,21,34,40,29,37,31,31,42, -33,31,46,35,43,59,52,98,107,107,162,164,165,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,177,184,182,126,163,184,55,103, -139,17,71,84,15,59,65,12,48,54,23,45,43,37,50,33,35, -50,38,28,46,43,28,45,44,32,46,42,37,47,38,43,51,31,46, -54,27,61,62,25,80,73,21,105,85,20,126,103,24,131,113, -31,134,120,42,133,125,48,130,128,53,134,127,59,132,128, -63,131,128,63,136,130,63,140,132,61,147,134,63,153,137, -61,156,139,61,165,143,67,170,147,75,173,149,78,172,151, -70,174,153,78,172,154,81,167,152,78,171,149,86,172,153, -85,170,155,81,170,154,78,172,155,78,174,155,79,176,155, -81,172,155,86,171,152,93,171,151,92,171,152,87,170,152, -88,170,151,89,171,150,88,172,151,90,168,149,89,168,145, -93,170,144,94,170,144,92,170,145,88,173,148,88,172,150, -90,168,151,93,163,149,94,167,149,89,169,149,87,167,148, -83,171,146,81,174,145,88,166,145,88,166,145,87,169,144, -84,178,142,89,175,144,99,176,141,97,180,145,100,178,146, -103,177,146,103,179,149,100,171,150,88,171,148,87,171, -146,88,171,146,92,170,144,96,163,143,94,168,143,89,173, -144,95,174,143,99,174,146,94,179,145,90,182,150,96,184, -151,92,195,160,93,196,166,96,182,165,102,177,161,118,176, -159,119,176,159,113,179,160,106,180,164,98,177,162,102, -175,164,101,174,162,102,175,163,105,174,163,105,175,158, -98,176,158,98,176,160,98,170,159,94,168,161,94,165,160, -94,162,158,91,162,157,85,166,159,89,160,154,89,154,149, -93,161,149,92,158,147,93,154,145,91,151,142,85,149,141, -79,141,135,79,139,132,80,137,130,78,132,127,72,132,126, -71,128,125,74,108,113,83,63,87,99,24,54,86,17,47,77,18, -43,64,21,38,47,25,39,43,26,40,42,25,38,41,23,37,40,30, -39,29,32,43,33,32,45,43,37,51,55,73,85,86,136,141,141, -175,176,177,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,176,183,182,124,156, -182,54,95,133,26,66,79,24,56,63,17,46,53,24,46,44,39, -50,34,36,50,39,29,46,43,32,46,44,36,46,42,39,48,38,50, -49,32,53,55,30,66,63,28,85,73,25,103,87,24,122,105,25, -132,114,35,139,120,44,138,124,48,140,128,55,136,129,61, -134,128,63,133,127,62,135,127,61,138,128,59,145,131,60, -152,137,60,158,138,63,159,140,66,161,143,72,167,144,74, -175,147,67,172,150,75,172,150,78,175,150,78,175,148,85, -177,151,83,175,152,79,174,153,78,173,153,78,172,154,77, -173,156,79,174,155,85,169,153,89,170,151,88,170,153,84, -172,154,86,174,151,86,173,150,87,174,150,87,174,151,88, -175,150,93,172,149,93,166,150,93,164,151,91,168,152,91, -171,151,92,172,148,95,174,145,92,176,146,87,177,147,85, -176,147,84,174,148,86,172,145,91,174,145,93,175,146,89, -176,149,84,177,148,90,179,147,98,177,145,98,178,146,101, -175,144,101,172,142,100,173,144,96,177,146,88,176,145,88, -176,147,89,173,145,90,169,144,95,169,144,95,171,146,93, -173,147,98,167,144,97,168,146,93,177,149,91,181,151,95, -182,151,91,188,155,89,199,164,94,201,164,102,191,158,118, -179,158,118,176,159,113,179,161,107,183,164,98,179,165, -100,179,166,102,179,165,104,179,164,104,179,164,107,178, -165,104,177,165,102,174,165,99,170,164,96,170,165,96,171, -165,99,170,161,95,169,162,89,170,161,91,168,159,95,164, -154,98,161,149,94,154,147,95,149,143,91,148,139,84,147, -139,78,143,135,78,137,133,78,134,131,76,134,130,73,133, -128,71,128,126,75,104,113,83,60,84,96,26,54,86,20,48, -78,22,43,66,20,39,48,23,40,43,27,41,41,28,40,40,25,40, -42,32,42,30,33,45,35,29,45,42,25,44,47,45,60,61,92, -100,100,138,143,147,174,176,176,184,184,184,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,173,180,179, -105,142,179,43,84,125,22,59,69,26,55,60,20,47,56,23,43, -51,37,48,40,37,50,43,31,46,44,34,47,43,37,47,38,39,48, -34,51,50,32,56,56,32,68,64,31,85,75,28,103,89,25,121, -105,27,132,113,34,138,119,42,138,125,48,139,126,56,134, -129,62,131,128,61,132,128,62,135,128,63,139,130,63,146, -132,63,150,133,68,155,134,65,156,138,66,156,139,63,161, -138,67,172,142,66,172,148,74,172,149,74,176,152,73,176, -152,72,176,153,75,175,154,77,174,154,79,174,154,81,172, -153,84,172,153,87,173,154,78,170,155,75,171,154,78,170, -153,81,172,152,87,178,152,86,179,153,94,179,154,93,178, -156,93,178,154,99,178,157,96,172,157,94,168,155,89,170, -154,87,172,151,86,170,145,84,174,144,79,179,147,81,179, -146,82,178,145,87,175,145,96,176,145,99,176,146,97,176, -146,91,176,148,89,176,148,92,180,147,93,178,144,96,176, -142,97,178,144,99,174,142,95,173,141,92,177,143,81,180, -146,83,183,148,88,182,149,92,178,145,99,173,144,99,173, -144,88,175,147,86,174,150,83,174,149,84,179,152,89,181, -151,90,183,151,90,187,152,91,197,158,97,205,163,102,201, -164,103,186,162,105,180,160,104,181,161,103,187,164,103, -182,164,100,182,165,102,183,167,98,185,169,96,183,168, -103,180,167,106,180,168,103,181,170,101,179,172,101,177, -172,99,175,169,96,175,166,95,174,166,93,174,164,94,172, -162,95,169,156,97,159,149,97,150,143,90,145,138,84,142, -136,78,141,135,74,141,136,72,138,135,70,135,132,68,134, -132,67,132,130,67,126,125,74,99,109,87,58,83,94,27,55, -82,22,49,73,22,43,64,19,37,55,23,40,49,28,41,42,31,42, -37,28,42,39,36,43,29,36,47,39,30,45,46,21,38,43,31,44, -47,47,57,59,75,87,94,139,144,148,176,176,177,184,184, -184,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,171,180, -179,85,129,173,28,70,110,12,51,62,24,53,57,22,47,56,22, -43,53,33,47,43,36,49,45,33,46,44,33,45,41,37,47,39,38, -48,37,46,52,33,58,58,31,69,66,29,82,77,27,102,91,21, -121,104,22,132,112,29,139,120,42,138,124,49,136,126,55, -130,126,62,127,125,62,129,126,62,133,127,61,138,129,59, -145,131,58,148,131,64,148,133,59,153,138,61,155,139,60, -161,137,65,168,141,63,170,148,65,171,149,67,172,151,68, -176,153,68,174,155,77,171,155,80,169,154,78,169,155,80, -167,153,83,167,151,89,174,152,82,174,155,80,175,155,81, -173,153,85,174,151,97,183,153,91,184,156,96,181,156,96, -179,157,97,177,153,105,174,154,105,173,155,98,173,155,91, -177,156,88,179,156,86,177,152,85,174,150,87,174,149,89, -172,146,87,172,146,86,173,145,89,173,144,91,174,146,86, -176,150,87,175,150,88,176,148,87,176,146,88,176,145,91, -177,145,93,177,144,94,174,142,91,174,142,86,180,148,76, -183,150,83,182,149,86,179,147,89,179,142,96,171,141,95, -173,143,83,175,148,77,174,151,75,175,150,83,179,151,86, -181,153,90,184,154,92,187,155,92,189,155,94,191,158,98, -192,163,98,188,164,100,187,160,101,187,161,105,186,163, -110,183,164,107,183,165,106,184,167,100,186,173,99,185, -173,105,181,169,109,181,168,107,182,171,107,181,172,106, -178,171,103,179,169,101,179,168,97,178,167,95,177,167,95, -174,163,97,170,154,104,157,142,95,147,136,88,144,135,85, -140,134,81,138,132,79,137,132,73,139,132,70,139,132,71, -134,130,70,130,128,71,121,124,77,94,107,90,57,82,97,29, -57,84,24,49,74,23,43,65,18,35,55,22,39,49,29,40,41,33, -43,35,33,43,38,41,46,29,38,48,38,31,44,42,22,36,38,26, -38,37,34,43,41,37,50,59,96,103,107,158,161,163,182,182, -182,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,184,185,184,167,179, -177,68,115,169,14,58,104,9,49,63,24,53,58,21,49,56,19, -46,50,29,49,40,34,51,42,33,49,42,34,48,39,37,50,37,39, -50,37,44,54,37,60,61,30,71,69,28,80,79,26,100,92,23, -123,106,21,133,116,33,138,122,46,136,127,53,129,126,54, -129,125,62,128,124,64,130,124,62,135,127,61,141,130,58, -147,133,57,149,133,64,148,136,60,152,137,61,157,138,64, -162,139,69,166,143,67,169,147,63,171,149,67,169,149,70, -174,153,71,171,153,79,169,154,79,167,154,76,168,155,76, -167,153,79,167,151,85,176,152,80,175,156,81,177,156,84, -179,156,89,175,153,98,184,152,87,183,155,91,181,156,94, -179,156,95,178,156,97,174,155,101,172,153,92,176,155,88, -180,158,89,182,161,89,180,161,90,175,159,95,174,157,96, -172,154,92,172,153,86,172,153,88,172,150,91,173,146,85, -174,149,87,172,149,85,172,148,84,177,148,94,173,147,96, -172,146,96,175,146,94,179,150,93,179,151,91,177,153,83, -174,150,85,175,153,88,175,153,90,175,148,97,176,145,96, -172,149,91,174,153,84,176,155,81,173,151,87,179,152,87, -182,157,92,182,158,94,184,159,94,185,160,93,184,160,93, -180,160,93,182,161,97,189,163,104,194,165,107,192,165, -108,184,168,106,183,170,102,183,171,98,184,174,97,184, -175,103,184,175,108,184,174,109,183,174,109,181,173,109, -180,172,109,180,170,109,181,172,102,179,172,99,177,171, -99,172,166,99,169,156,101,162,149,94,151,144,97,145,138, -92,141,133,86,137,128,86,137,130,81,136,130,75,136,131, -75,133,129,73,129,127,74,120,122,79,94,105,90,57,81,96, -31,59,86,25,51,76,22,44,66,19,37,56,21,40,47,28,41,41, -33,43,35,35,45,36,44,49,28,38,49,35,29,44,38,20,36,35, -24,39,34,28,41,35,22,41,47,67,79,83,139,146,147,177, -178,178,184,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,184,185,184,157, -176,172,42,101,166,4,53,107,5,47,70,22,52,56,22,50,46, -21,48,45,30,49,35,36,52,35,36,51,39,33,47,39,37,50,39, -43,53,34,46,54,38,61,63,25,75,75,26,85,84,27,102,94, -28,124,108,33,133,117,38,138,125,48,135,127,57,127,125, -66,129,124,67,129,124,66,131,124,63,137,128,64,143,131, -65,147,133,66,148,132,74,150,136,66,155,138,68,158,138, -70,160,140,72,164,140,72,167,143,67,170,147,66,171,149, -66,174,151,75,172,152,81,170,153,79,170,154,74,173,157, -74,171,155,75,168,152,79,177,154,80,172,156,76,175,156, -79,178,156,82,174,153,88,180,150,93,182,156,92,181,157, -99,177,155,101,178,155,98,175,158,90,174,156,82,178,158, -80,183,162,83,184,163,84,184,164,88,179,162,93,174,157, -97,176,157,97,175,157,93,174,154,97,175,154,95,177,148, -104,176,150,104,172,150,101,172,149,106,175,145,104,172, -145,103,171,143,96,179,149,92,181,151,90,181,152,96,181, -152,104,180,152,106,180,154,105,178,155,101,180,154,101, -184,156,94,182,160,89,180,157,88,182,156,90,181,157,85, -183,153,89,183,154,93,184,157,95,186,159,96,188,163,97, -190,167,99,187,166,102,183,163,107,184,162,106,189,165, -101,194,169,95,186,172,96,185,172,93,187,173,97,187,175, -101,184,177,103,184,176,97,185,177,96,185,177,98,183,175, -99,181,173,101,181,173,102,181,173,97,179,171,95,177,170, -101,172,164,100,173,161,88,163,154,96,153,148,95,145,141, -89,142,136,88,138,131,90,135,129,83,134,130,78,135,132, -74,134,132,71,130,130,70,119,123,75,92,105,86,55,83,89, -32,62,82,25,52,74,22,45,67,19,39,55,20,40,48,26,41,43, -32,42,38,35,46,32,44,50,33,39,50,39,30,44,41,21,38,38, -25,41,37,30,45,36,22,42,41,52,69,74,125,132,136,170, -171,172,183,183,183,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,184,185,185,180,185,181,133, -171,165,23,92,162,0,50,105,0,46,69,18,48,51,28,51,45, -21,45,43,30,45,34,37,48,33,38,50,39,33,46,40,35,49,41, -45,53,35,47,54,37,62,64,25,81,76,27,93,83,28,105,94, -29,123,107,33,137,116,39,142,124,47,139,126,58,128,121, -67,128,121,66,130,122,65,133,123,64,137,125,63,142,127, -63,146,129,66,145,129,71,147,132,63,153,135,66,155,136, -67,157,139,70,160,140,71,162,142,67,163,145,64,165,149, -65,167,148,71,168,145,76,166,145,73,167,149,71,172,153, -73,171,153,75,169,152,81,170,152,80,170,152,76,174,156, -78,177,155,78,177,153,84,174,151,95,175,155,89,176,157, -96,170,155,98,172,152,97,173,155,90,174,157,85,177,159, -83,183,161,83,186,160,83,189,162,87,186,160,94,179,155, -97,175,155,96,177,156,97,184,152,101,179,158,101,176,153, -107,172,152,103,167,154,101,166,152,107,168,143,101,170, -139,97,173,139,90,180,143,87,184,146,87,185,148,96,182, -149,103,178,151,106,178,154,105,178,155,101,181,156,101, -184,158,91,180,157,84,182,157,87,183,153,88,184,154,84, -185,153,90,186,153,93,187,157,96,191,164,100,187,166,97, -187,169,99,187,169,103,181,166,106,178,164,105,177,164, -97,184,166,92,187,170,93,187,170,93,188,170,98,185,171, -101,184,169,100,186,172,93,187,173,92,187,173,93,185,172, -95,182,171,96,182,170,98,180,170,93,175,167,92,177,166, -98,175,160,97,173,161,87,160,154,95,153,146,91,147,140, -88,141,133,85,139,126,85,140,127,82,137,129,76,137,129, -71,138,130,69,133,128,67,120,121,72,90,103,83,55,83,87, -33,62,79,25,52,73,18,45,67,16,39,56,19,39,48,25,40,42, -29,41,37,35,43,30,38,49,33,36,49,39,31,43,41,24,36,36, -29,39,35,35,44,37,35,43,43,59,73,78,122,133,134,167, -170,170,182,183,183,184,184,184,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,183,185,184,175,183,181,123, -164,162,19,95,153,0,53,103,0,44,74,16,46,54,28,51,43, -24,48,45,30,44,45,36,46,42,38,49,41,35,49,40,36,50,39, -46,54,37,50,59,32,62,65,27,83,77,25,97,88,21,108,98, -27,126,111,28,138,116,41,143,123,54,140,126,63,131,124, -65,130,125,59,132,125,59,136,127,60,141,130,60,144,131, -60,148,131,61,146,134,52,149,136,58,155,137,63,158,140, -66,158,140,66,160,143,56,162,144,62,163,144,75,161,142, -83,165,143,86,167,144,84,166,145,80,166,146,78,169,149, -79,170,152,75,169,154,70,170,152,76,170,153,75,172,153, -77,175,153,78,179,156,76,177,154,87,175,155,82,176,160, -82,171,160,81,174,156,91,176,158,92,177,159,93,177,157, -92,182,158,93,186,157,94,186,156,94,184,157,87,183,159, -95,179,158,101,176,155,100,186,156,94,180,157,105,182, -160,103,181,161,109,171,156,113,162,148,113,164,139,96, -169,139,95,174,141,91,182,146,88,187,149,88,185,150,91, -181,151,89,179,156,88,178,158,87,175,155,82,178,156,83, -184,158,82,183,159,99,184,158,101,188,158,98,189,158,93, -190,157,102,191,159,97,193,164,95,193,168,97,192,171,100, -190,171,103,189,172,102,185,173,101,181,168,98,178,165, -95,184,164,103,187,169,95,187,170,90,189,172,94,186,173, -95,185,171,96,187,170,99,188,172,96,189,172,100,186,171, -105,183,169,107,183,169,106,181,166,106,176,167,98,173, -163,91,173,161,87,171,159,85,160,154,96,153,147,89,148, -141,87,142,135,81,142,132,73,141,129,82,138,129,81,136, -128,74,138,130,69,134,129,66,121,123,67,92,106,75,56,86, -76,35,67,64,28,58,56,20,48,59,17,42,50,20,40,47,25,41, -41,29,42,32,36,45,28,39,50,33,37,48,43,31,43,43,25,36, -37,29,39,38,36,44,38,41,50,39,66,81,88,124,133,138,166, -168,169,178,179,180,182,183,182,184,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,184,185,185,181,183,182,155, -167,170,53,107,160,2,51,106,0,43,75,10,43,50,26,48,41, -31,44,45,26,43,43,31,45,39,37,48,40,38,48,41,38,49,40, -43,54,36,52,61,34,67,65,29,83,76,24,100,88,22,115,96, -29,132,110,30,135,118,40,134,124,51,130,127,59,126,125, -65,130,125,60,134,126,61,137,127,61,141,132,62,140,132, -60,142,133,60,146,136,56,147,136,59,151,138,63,153,140, -64,153,140,64,161,140,56,161,144,64,159,144,75,159,140, -81,162,140,82,163,142,81,162,143,77,162,143,75,165,144, -74,167,146,71,169,148,68,168,146,72,168,149,72,169,150, -73,170,151,75,174,156,74,174,154,86,174,153,81,178,155, -80,179,157,83,181,153,91,182,154,93,178,153,90,177,152, -89,179,153,89,182,156,91,179,159,93,181,161,89,180,159, -94,180,156,99,178,152,100,184,153,93,181,151,102,179,156, -99,180,157,106,176,153,110,171,145,112,174,141,102,176, -141,100,177,142,95,181,149,91,182,152,90,181,152,92,178, -152,89,177,152,85,179,155,85,178,157,84,180,157,85,179, -159,81,178,160,99,180,160,102,183,162,100,186,165,98,186, -165,106,182,165,100,183,168,97,186,170,97,188,170,99,191, -169,102,195,170,102,192,169,102,189,168,102,185,167,101, -179,165,103,182,167,93,183,171,91,186,172,95,185,171,96, -182,171,96,179,172,97,178,171,92,180,172,96,177,168,99, -176,163,99,180,162,99,178,160,101,176,160,94,173,158,89, -172,157,85,169,155,83,159,146,90,154,142,86,150,138,86, -143,132,80,137,133,73,136,131,80,134,127,77,133,127,71, -133,129,67,130,128,64,117,122,66,86,106,75,58,85,78,44, -69,70,35,58,61,23,47,61,21,41,51,21,41,48,26,42,42,31, -43,33,37,44,28,41,50,34,35,49,44,28,44,43,25,39,39,30, -41,40,37,45,39,44,53,43,74,88,94,129,138,143,167,169, -170,180,181,181,183,183,183,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,184,185,184,173,180, -175,95,135,167,15,63,118,0,41,87,9,36,69,23,41,55,31, -45,44,28,44,46,29,43,39,36,48,35,39,51,34,38,51,32,42, -52,35,50,57,33,67,66,25,84,77,25,99,87,24,115,98,24, -134,114,24,137,121,36,135,126,49,130,126,60,127,126,63, -130,124,57,135,127,58,139,130,59,143,134,58,143,135,58, -143,134,64,146,133,74,149,136,73,152,139,69,153,140,65, -152,139,63,162,139,58,161,143,65,159,144,64,160,145,61, -162,144,61,163,142,76,162,142,81,162,142,79,165,144,74, -166,145,69,168,148,68,169,148,70,170,151,68,170,151,74, -170,150,82,171,149,87,171,148,90,173,149,88,177,151,90, -177,153,90,180,154,87,180,154,84,177,154,84,177,153,85, -182,155,89,181,155,92,176,153,100,175,152,106,178,156,95, -179,157,93,179,156,94,186,155,91,186,157,99,181,156,106, -179,157,102,176,156,92,172,151,87,179,150,87,182,151,91, -183,150,93,183,151,94,184,152,93,183,153,93,178,150,97, -176,149,93,179,152,98,179,154,96,181,157,86,180,158,84, -176,160,86,177,159,89,180,160,93,183,162,99,185,164,103, -184,166,104,185,168,105,186,168,106,187,168,104,190,168, -103,193,168,104,194,169,110,192,170,108,189,171,103,183, -168,106,182,165,103,184,168,105,184,168,102,184,168,100, -182,169,104,179,171,100,176,168,97,176,167,98,174,163,98, -173,159,100,177,158,101,176,159,89,175,160,83,175,160,84, -172,159,81,168,155,76,159,149,78,156,146,80,153,143,83, -146,138,81,137,133,78,136,132,75,135,129,71,136,130,72, -135,130,74,131,127,76,118,119,84,85,101,98,58,82,95,44, -66,87,35,56,74,24,48,61,24,45,45,24,46,41,26,43,37,31, -43,34,38,46,26,41,50,32,33,49,38,26,43,37,24,39,33,30, -42,32,37,47,32,45,54,37,73,87,89,130,138,142,168,171, -172,182,182,182,184,184,184,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,184,185,184,180,183, -181,124,156,176,33,84,126,0,48,89,0,41,68,8,42,49,22, -45,39,31,45,47,28,43,39,32,46,33,40,50,33,42,50,33,42, -54,35,48,59,33,64,66,24,84,78,26,100,86,25,119,96,24, -131,113,22,137,121,37,135,125,50,128,125,59,127,124,61, -131,124,57,133,126,57,137,128,57,144,133,59,145,134,59, -142,133,64,141,132,72,147,132,70,149,136,67,150,138,63, -155,136,64,156,140,58,153,142,61,156,142,60,158,143,58, -159,143,60,157,146,76,156,144,79,158,142,76,161,143,72, -163,144,67,166,148,67,167,149,70,168,150,67,166,149,72, -165,146,78,166,145,82,166,144,87,169,145,85,172,148,88, -174,150,88,177,152,86,177,152,84,176,151,84,176,149,84, -178,148,84,179,148,88,174,144,92,170,143,97,176,152,93, -178,153,93,178,153,93,180,158,90,181,157,98,172,156,102, -174,154,97,175,151,90,170,152,88,173,155,88,171,156,91, -169,154,92,171,152,91,174,150,90,175,149,90,171,149,94, -177,146,92,176,148,95,171,148,89,182,150,81,185,157,87, -179,158,87,179,158,90,179,159,93,176,160,97,178,161,100, -181,161,100,182,161,100,183,162,100,184,162,97,189,165, -97,189,165,100,191,165,105,191,167,104,189,169,100,181, -167,104,179,162,99,182,164,101,184,165,99,182,165,96,181, -164,98,182,166,98,178,165,96,175,164,96,173,162,97,169, -157,96,167,155,95,170,154,85,173,152,78,176,152,79,173, -151,77,171,152,75,167,150,80,159,147,82,155,144,84,149, -139,83,142,134,81,135,134,76,134,132,72,133,131,71,132, -130,72,128,127,74,116,118,82,83,99,95,58,80,93,37,65, -83,25,55,70,21,47,61,25,43,45,27,43,41,28,44,38,30,44, -33,43,46,27,41,50,32,34,48,38,27,43,37,23,38,32,29,41, -32,36,46,31,43,53,35,74,86,89,134,139,143,173,175,176, -183,184,184,184,185,184,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,184,184,185,184,181,185,183, -144,170,172,44,96,144,2,56,92,3,44,76,8,37,66,20,39, -52,33,47,41,31,46,39,31,45,38,42,52,39,44,53,35,43,54, -37,48,58,34,64,66,23,85,79,24,102,89,23,122,100,23,131, -111,33,137,119,42,136,124,54,128,123,60,127,123,62,134, -126,59,139,130,61,142,132,63,148,135,65,148,136,65,144, -136,65,144,136,64,150,137,65,151,137,65,151,138,63,157, -137,66,158,139,69,155,141,75,156,138,76,161,140,80,161, -140,81,157,144,79,156,144,72,159,144,69,163,145,72,165, -145,76,165,144,81,166,142,89,166,145,84,164,143,85,164, -143,88,165,144,86,167,146,84,171,148,83,173,149,86,173, -150,89,176,150,90,177,150,92,176,148,93,175,146,92,177, -145,91,179,147,91,176,146,91,172,145,95,174,148,92,176, -149,90,180,153,93,181,157,92,181,157,95,172,157,98,172, -151,92,180,155,93,176,156,95,175,155,99,171,152,104,168, -149,104,169,147,100,174,149,94,176,150,86,168,145,87,176, -146,80,175,148,87,170,146,92,182,148,99,185,158,90,182, -161,88,181,162,87,182,163,89,180,165,92,180,161,110,181, -161,105,183,162,100,183,162,97,184,163,95,186,163,93,186, -164,92,187,164,93,188,164,98,187,165,104,180,164,108,181, -163,103,179,163,94,181,163,88,181,166,85,182,166,91,182, -166,97,179,167,96,176,166,94,175,164,93,171,160,92,168, -156,92,169,152,85,173,151,83,179,154,84,177,154,83,174, -154,83,171,153,83,164,152,82,159,149,83,154,145,82,147, -140,82,140,136,93,136,132,84,135,131,76,132,131,71,129, -128,72,117,120,81,85,101,93,56,79,89,36,64,83,24,54,75, -21,46,68,26,45,48,28,44,44,29,44,44,32,45,37,45,49,26, -43,52,33,37,50,41,29,44,41,25,39,36,31,43,35,37,45,34, -48,55,47,82,92,99,143,146,150,178,180,180,184,184,184, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,184,185,184,184,185,184,182,184,182,157,173,176, -58,108,154,6,62,99,5,51,82,7,41,69,11,41,50,23,45,36, -31,46,38,31,45,36,37,50,34,42,52,33,47,50,36,48,55,32, -63,65,20,80,76,20,98,89,21,119,100,22,129,113,33,132, -119,41,132,122,52,129,121,61,129,121,64,136,123,60,140, -127,61,143,130,62,147,133,64,150,134,66,150,134,67,151, -134,66,149,138,66,146,137,63,148,138,63,152,138,66,150, -140,68,153,139,74,153,138,77,152,139,78,152,138,77,152, -138,75,156,140,70,160,143,69,161,145,71,161,143,73,165, -140,78,163,136,84,164,139,78,161,138,79,161,136,82,171, -134,81,175,138,82,173,142,81,174,145,83,174,144,85,176, -142,86,172,143,85,172,142,87,171,141,88,172,143,87,173, -143,86,173,142,87,170,139,91,172,140,87,175,146,89,175, -150,89,176,154,88,176,153,91,171,152,94,171,152,92,172, -154,89,173,151,89,173,149,95,170,146,99,163,141,97,161, -139,92,169,144,88,178,149,85,172,146,90,171,148,80,173, -147,87,173,145,92,176,145,95,180,156,85,186,158,87,186, -161,89,183,166,91,185,166,95,180,157,108,175,156,100,177, -160,96,177,161,93,176,159,89,179,163,89,180,164,90,180, -164,89,182,166,96,180,164,99,179,157,103,179,156,97,179, -157,90,180,161,86,181,164,84,181,163,88,179,164,93,178, -163,93,177,162,92,175,160,90,171,157,90,169,154,91,171, -154,86,173,154,85,174,154,83,174,155,82,174,154,84,170, -153,84,169,151,84,164,149,86,157,146,86,151,143,87,140, -136,94,135,130,83,135,128,74,135,127,71,130,126,71,114, -119,79,81,97,91,52,77,87,35,61,81,27,49,72,21,43,66, -26,43,46,26,45,43,29,45,44,34,46,38,44,53,28,44,51,34, -34,50,41,26,45,41,23,40,36,31,42,34,38,45,34,57,62,54, -104,113,118,159,161,164,182,182,182,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,182,185,182,155,176,167,65,117, -153,10,67,105,7,53,76,11,48,60,12,39,58,21,39,52,29, -42,45,33,46,40,33,46,35,39,49,35,49,52,34,48,53,36,63, -61,31,80,74,30,96,85,28,118,98,30,129,114,29,131,119, -36,132,124,43,132,127,47,132,126,53,139,128,55,144,132, -57,146,134,61,149,134,67,151,134,71,151,134,72,152,134, -74,150,135,82,148,136,77,150,138,72,155,139,77,151,141, -72,153,139,73,155,141,75,154,140,75,153,139,78,155,143, -73,157,141,71,160,142,76,159,140,77,159,140,79,166,141, -80,168,142,78,166,141,80,160,137,82,158,132,80,169,132, -79,174,138,79,172,141,83,173,143,86,174,144,86,176,143, -84,173,144,88,172,142,93,172,140,97,170,138,96,171,140, -93,172,141,89,171,141,86,174,143,87,177,147,92,176,150, -95,176,150,103,177,152,98,174,155,93,173,155,91,171,152, -89,174,151,89,175,152,89,171,150,88,167,148,87,166,146, -85,170,147,85,179,149,86,173,149,86,172,147,89,176,149, -88,177,151,81,180,152,82,179,155,82,187,159,78,191,168, -84,184,167,86,185,164,91,182,162,93,181,161,98,181,162, -102,183,164,105,182,162,105,181,162,105,182,162,103,182, -163,103,181,164,103,179,161,99,179,158,95,178,155,96,181, -159,95,182,162,95,182,163,97,181,162,101,179,165,90,178, -164,92,178,162,98,177,161,101,174,158,99,171,156,94,173, -155,89,175,156,89,178,157,90,176,156,89,175,154,95,172, -154,90,171,153,89,167,152,87,160,149,87,154,145,91,142, -139,91,137,131,85,137,129,79,139,130,78,133,128,79,114, -117,85,82,96,96,52,76,90,33,60,72,27,52,58,21,46,56, -27,44,52,26,44,47,28,46,42,37,49,38,46,53,42,45,52,38, -36,51,47,25,43,45,24,40,40,31,41,37,43,48,38,76,82,67, -126,136,132,170,172,172,184,184,184,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,183,185,183,157,172,165,57,122, -152,7,74,107,3,58,78,11,54,63,18,43,64,18,41,54,20,42, -42,25,46,37,29,48,35,34,49,33,42,51,31,46,50,33,53,60, -25,73,71,25,88,82,22,103,95,22,124,109,23,127,113,30, -130,118,37,131,123,43,132,122,51,136,127,54,141,130,57, -146,133,63,147,134,68,146,134,71,149,133,72,147,134,76, -147,133,83,150,135,78,152,138,73,153,137,75,148,140,69, -150,140,72,153,138,72,156,138,74,155,136,77,156,137,69, -156,140,70,154,140,73,153,139,75,157,141,79,161,142,80, -160,144,78,160,140,79,159,136,82,160,134,82,163,137,80, -171,141,81,171,140,83,173,142,86,174,144,86,176,145,84, -176,145,90,171,143,93,168,138,93,167,133,90,170,134,90, -178,139,90,182,143,91,182,148,92,180,147,93,177,148,95, -176,145,103,168,150,97,171,152,91,172,152,90,170,150,88, -173,150,89,173,149,87,170,148,86,169,146,87,171,146,88, -174,149,88,175,151,87,175,152,89,169,150,91,169,149,87, -171,151,80,172,153,80,177,154,81,177,161,74,181,165,78, -182,164,82,179,163,86,186,161,94,184,159,99,182,160,101, -184,163,105,183,162,106,181,159,104,179,160,101,179,161, -99,176,156,95,179,155,93,184,154,91,179,153,96,180,157, -95,178,158,93,177,157,92,177,156,96,177,160,86,176,163, -90,174,162,96,171,157,96,169,152,94,170,151,91,170,154, -86,173,154,86,174,153,86,174,153,86,171,152,91,176,148, -88,171,150,86,165,151,84,158,148,85,150,143,90,139,136, -89,135,127,82,133,125,77,134,129,77,124,126,75,104,115, -80,68,94,88,43,71,83,31,58,69,27,50,57,28,42,57,33,43, -54,32,43,48,36,44,45,42,50,42,43,55,43,41,56,38,32,49, -45,24,42,45,23,40,40,27,41,36,42,51,39,92,96,86,144, -147,146,175,175,175,184,184,184,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,184,185,184,162,178,165,58,124,178,5, -72,125,8,61,92,10,52,66,22,48,63,22,46,54,21,43,48,25, -43,47,26,44,41,30,45,36,41,49,36,49,54,31,53,59,31,70, -68,29,86,79,25,100,90,28,120,101,32,125,108,39,129,114, -47,130,120,51,133,124,49,138,129,54,143,132,58,148,135, -63,146,134,64,145,134,65,150,136,68,149,139,70,150,140, -71,153,139,78,154,137,81,154,138,78,148,138,76,150,138, -80,154,138,78,156,138,72,156,137,78,157,138,71,156,139, -70,154,141,72,153,140,71,157,142,71,163,145,72,159,145, -74,162,143,75,165,144,77,167,144,74,170,146,74,177,148, -82,177,148,82,178,148,84,179,149,87,181,148,96,181,150, -94,175,148,91,171,144,85,173,143,82,177,143,86,181,142, -95,184,142,104,184,148,100,182,149,95,179,150,92,179,149, -97,168,152,93,170,150,99,173,152,95,171,152,86,172,148, -86,174,150,86,173,150,91,172,148,94,174,148,95,174,148, -90,173,149,87,174,150,86,169,151,85,172,153,84,175,155, -82,175,154,87,180,155,89,178,158,97,179,156,104,180,156, -108,177,156,111,183,155,101,185,159,99,183,160,101,181, -159,104,182,160,105,182,161,101,178,159,103,178,160,98, -177,157,98,179,155,95,186,157,89,184,159,95,183,160,92, -181,162,86,181,163,81,182,164,82,180,162,94,177,163,95, -173,162,93,170,158,91,169,153,92,172,152,98,169,153,92, -174,155,86,176,156,83,177,157,84,173,155,93,181,154,83, -173,153,82,166,151,82,157,148,83,150,143,91,138,133,98, -134,129,69,136,131,63,134,131,72,124,124,80,102,111,89, -62,85,98,37,64,81,30,54,82,27,47,72,32,48,45,36,49,42, -37,51,34,40,52,28,46,56,31,44,56,42,42,55,45,32,49,47, -25,42,47,25,42,45,28,42,38,44,54,42,101,104,91,149,153, -149,177,178,178,184,184,184,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,168,179,167,64,131,182,8,75, -128,8,61,92,13,56,71,17,47,62,20,46,53,22,44,49,22,42, -44,25,44,41,27,46,36,33,49,35,45,54,30,53,57,30,69,67, -28,83,77,22,95,87,24,111,97,25,112,104,32,120,110,41, -132,115,48,141,120,50,148,126,55,149,130,58,150,133,61, -150,135,65,149,135,66,150,136,67,148,138,69,149,140,71, -149,138,76,148,137,78,148,138,76,152,135,75,152,135,79, -152,138,77,155,140,74,157,136,76,157,137,72,154,136,69, -152,136,70,155,140,73,157,142,72,161,145,72,165,144,76, -164,143,77,164,143,76,164,146,75,166,147,75,169,148,81, -174,147,81,174,146,82,172,147,84,173,142,90,177,145,91, -179,148,93,180,148,91,182,149,89,183,150,92,183,149,100, -180,147,104,177,149,99,177,151,95,176,152,93,174,149,96, -172,150,94,172,149,98,171,150,91,172,152,86,176,148,86, -175,149,85,173,151,92,171,150,96,169,150,95,168,151,91, -170,151,87,173,149,86,171,152,86,171,156,85,173,157,83, -172,155,86,171,155,85,169,154,91,172,152,98,176,150,101, -177,152,106,179,155,99,180,157,96,182,158,99,183,156,102, -185,157,103,186,159,102,183,158,103,180,160,98,178,158, -99,179,159,97,181,162,91,181,160,94,175,161,90,175,163, -85,175,165,81,175,165,82,173,163,93,174,164,95,175,163, -94,174,160,93,172,155,93,171,152,95,173,152,91,174,154, -85,174,154,82,173,154,81,170,150,87,169,153,77,170,153, -81,164,152,82,158,149,85,150,142,91,134,129,95,133,128, -69,136,134,65,127,129,68,115,121,75,96,106,84,58,80,94, -39,61,79,30,50,78,26,44,69,35,47,46,39,45,41,38,51,35, -42,54,30,47,57,32,43,57,42,39,58,46,33,49,47,27,42,46, -28,40,44,32,42,39,48,53,43,97,100,88,144,149,145,174, -176,176,184,184,184,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,171,181,175,79,141,169,13,82,122,10, -64,96,11,54,73,18,50,61,21,48,50,23,46,43,24,44,39,26, -45,40,27,44,40,30,45,41,40,47,39,49,52,36,64,61,34,79, -72,33,92,81,34,108,93,22,110,100,38,116,105,40,132,114, -41,142,121,47,148,128,48,149,132,51,151,135,56,153,138, -62,151,138,64,152,138,68,150,139,69,151,141,72,153,141, -78,148,138,77,147,137,75,154,136,77,152,138,72,152,139, -76,151,136,77,154,135,75,158,139,81,157,140,77,156,141, -75,157,142,76,157,143,76,159,144,79,163,143,87,163,144, -83,165,145,81,165,146,79,167,148,80,169,149,86,173,147, -84,174,149,83,171,148,74,175,150,65,180,152,78,182,153, -82,184,155,86,186,156,88,187,157,90,186,157,91,184,156, -100,182,157,102,182,156,101,178,153,98,175,151,95,170, -149,102,172,152,93,172,153,90,171,152,85,179,151,88,179, -156,91,177,157,93,174,155,96,169,151,94,167,149,92,170, -150,92,171,148,97,165,147,98,169,152,98,175,156,95,177, -159,97,173,160,91,170,157,92,172,152,93,176,152,94,176, -152,96,179,156,90,179,156,91,180,157,94,182,158,93,182, -156,92,182,157,94,181,158,97,180,162,91,181,162,92,181, -162,94,180,161,97,180,162,93,178,166,94,177,165,94,176, -164,93,176,164,93,174,165,94,173,164,92,175,164,92,173, -160,88,171,158,84,173,157,82,174,155,89,172,153,90,170, -151,86,170,151,84,172,152,85,170,153,86,169,152,89,165, -151,95,155,145,97,145,137,100,128,125,83,134,129,75,139, -134,83,125,125,83,112,117,84,93,102,83,55,78,84,39,60, -79,28,48,72,28,46,63,36,47,50,41,49,42,38,52,39,44,55, -35,50,60,33,46,61,34,40,59,54,32,49,43,29,45,37,30,44, -32,34,45,25,48,54,27,84,89,68,135,140,139,172,173,173, -184,184,184,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,178,183,179,114,153,168,21,85,121,13,64,93, -19,56,71,20,52,60,25,49,51,28,47,43,30,46,41,31,44,40, -32,44,39,32,44,40,36,46,40,45,52,37,57,60,36,68,68,34, -81,77,35,101,90,21,107,96,35,114,99,34,126,109,33,138, -115,39,148,126,44,150,132,49,150,136,54,151,140,60,151, -141,63,152,140,66,151,140,69,152,141,71,152,139,74,149, -138,75,148,137,76,148,135,78,150,136,73,154,136,76,155, -136,75,156,138,77,159,139,76,159,139,72,159,140,71,161, -142,74,162,143,76,162,142,80,158,140,86,158,142,82,161, -143,79,164,144,76,170,147,75,167,149,80,167,145,77,170, -143,78,173,144,73,177,149,61,182,152,71,184,152,77,187, -154,83,186,154,86,187,158,90,187,161,93,184,157,99,179, -156,97,179,156,98,178,157,97,175,156,94,168,151,96,170, -151,90,173,152,89,175,152,87,179,156,90,175,157,92,174, -158,94,173,157,96,171,154,95,173,153,94,173,153,93,168, -153,95,165,151,100,170,153,98,174,155,92,174,157,94,174, -158,94,171,160,96,172,158,99,170,154,98,170,150,97,173, -152,90,174,155,90,175,156,90,174,155,87,175,157,87,177, -159,89,177,158,94,177,160,86,178,161,85,178,163,88,181, -162,94,177,162,87,178,164,90,179,165,95,179,164,95,178, -164,94,176,163,90,174,162,91,173,161,90,171,160,87,171, -158,83,173,157,84,169,154,86,167,153,86,165,151,82,167, -151,81,170,150,83,166,152,84,160,152,86,155,149,91,145, -143,92,135,131,92,134,122,73,138,127,74,136,130,84,118, -119,84,105,109,83,88,95,80,59,75,81,39,59,77,30,49,68, -33,47,57,41,48,48,41,51,43,41,51,39,46,55,38,51,60,35, -53,58,31,39,57,53,32,48,41,32,45,35,33,44,31,38,46,24, -50,54,24,73,77,51,124,130,128,168,170,172,183,184,184, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -182,183,182,144,167,167,37,96,123,12,62,95,20,56,74,23, -53,60,26,49,48,30,48,45,31,46,42,33,45,38,34,47,36,35, -48,38,39,48,35,43,50,38,51,56,38,60,64,33,70,72,30,88, -83,25,98,90,32,108,97,29,118,106,25,133,114,32,146,125, -40,148,131,47,148,136,55,146,137,58,149,140,61,152,141, -62,148,141,66,149,141,68,149,140,73,147,139,76,145,137, -75,143,134,77,148,132,73,155,135,73,160,138,72,160,139, -74,163,139,74,163,141,73,163,142,72,163,143,71,164,144, -74,165,145,80,161,144,87,160,146,82,162,147,80,164,148, -80,168,148,84,167,147,77,164,143,78,167,142,81,169,143, -77,171,146,70,178,151,73,181,152,77,183,152,81,183,153, -87,181,153,92,179,153,97,180,155,91,178,156,88,173,153, -89,172,153,89,171,155,86,173,154,86,172,152,82,174,151, -85,177,154,88,177,158,89,176,158,94,175,158,97,175,157, -97,175,157,96,176,157,94,177,157,91,172,156,92,172,156, -91,174,157,93,176,160,93,177,160,93,177,159,95,171,159, -103,170,157,106,168,155,102,169,151,98,170,153,87,172, -155,85,173,157,86,174,158,86,176,160,84,177,160,82,175, -158,90,179,160,86,179,160,85,178,160,86,181,159,88,180, -162,86,178,161,92,178,161,94,177,161,93,177,161,92,174, -162,91,172,162,90,169,161,88,167,160,86,168,161,88,170, -158,89,168,155,87,166,154,83,166,152,81,166,153,80,168, -153,81,164,154,77,160,153,79,154,150,84,140,139,83,133, -130,82,138,125,66,137,128,74,129,127,85,108,113,83,96, -104,82,81,93,80,55,75,81,38,60,73,35,55,63,39,52,48, -44,52,40,43,52,46,45,53,42,48,57,45,49,59,45,54,59,38, -39,57,57,32,48,45,32,46,41,33,44,37,39,47,29,50,55,25, -65,71,39,119,126,119,165,168,168,181,181,182,184,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,182,184,182, -152,169,161,43,106,119,7,66,98,11,53,77,21,53,60,27,50, -49,30,48,40,33,48,36,35,48,33,35,49,33,35,48,34,43,50, -34,44,52,39,48,54,40,57,61,36,66,67,30,78,74,34,86,82, -34,98,88,31,112,100,29,126,108,32,138,118,35,143,125,47, -145,130,59,144,132,62,147,136,64,150,137,65,147,135,69, -146,136,74,141,134,80,136,131,83,140,129,77,142,127,78, -146,127,72,153,130,67,158,136,64,162,139,65,164,141,72, -163,142,76,163,143,76,164,144,75,166,146,74,166,147,76, -163,148,79,163,149,73,163,149,74,164,148,77,162,146,87, -165,146,83,160,142,89,161,141,87,164,144,83,165,143,80, -175,149,75,179,150,75,181,152,79,180,152,84,174,148,90, -167,144,98,162,147,95,164,148,93,166,147,89,170,147,87, -169,150,88,172,150,83,174,152,79,175,153,82,172,153,84, -170,154,83,169,152,87,169,152,89,172,154,92,175,156,94, -174,154,92,174,154,94,173,153,97,173,154,91,170,153,91, -170,153,90,174,157,87,177,157,86,166,155,105,161,149,110, -160,145,103,162,146,90,166,146,88,167,148,88,170,150,89, -173,151,87,176,153,83,182,159,81,179,160,82,183,161,87, -183,159,95,180,157,98,183,158,96,179,160,95,177,161,89, -176,161,85,175,161,82,175,160,82,174,162,88,172,162,85, -169,163,85,165,161,84,164,160,84,166,158,82,165,155,81, -163,152,86,165,151,87,165,152,83,166,155,75,166,154,76, -161,153,76,155,150,85,140,139,83,133,128,76,138,129,78, -131,128,92,118,120,95,100,106,87,88,97,84,72,85,83,47, -68,82,35,56,72,37,54,59,41,55,43,48,55,35,45,53,42,49, -57,38,51,61,45,46,59,48,50,60,44,37,57,59,31,49,49,31, -46,46,33,45,42,40,48,33,54,58,25,66,72,37,116,125,112, -166,167,167,182,182,183,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,184,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,183,185,183,156,173,161,44,113, -122,3,72,103,1,55,80,13,52,62,25,51,51,30,49,40,34,51, -37,35,53,36,33,51,33,36,52,34,42,52,33,42,52,35,44,52, -35,53,58,36,66,65,36,78,70,36,83,76,31,90,83,30,101, -92,31,119,101,32,132,113,34,142,121,46,143,125,54,140, -127,55,143,131,57,149,132,61,144,131,67,134,129,75,121, -123,78,115,118,79,120,117,78,128,116,73,136,120,69,145, -125,63,154,131,57,159,136,54,162,140,64,162,139,70,161, -139,72,163,143,73,166,145,73,168,145,73,167,144,73,171, -148,71,170,148,74,167,146,77,162,143,84,156,142,86,160, -141,92,161,141,89,163,142,85,164,142,85,174,143,73,178, -148,74,179,152,79,182,155,86,175,150,91,160,141,98,136, -138,101,135,138,98,149,139,91,165,142,84,167,143,82,167, -148,75,173,150,74,176,152,77,176,153,80,173,153,79,169, -151,86,169,150,88,172,151,90,175,153,92,174,152,91,175, -152,93,171,150,92,167,150,89,169,152,90,170,153,88,170, -156,85,166,155,80,145,149,101,136,137,103,137,130,95,142, -132,85,149,130,83,151,132,79,158,136,80,169,144,83,174, -145,78,182,152,78,182,158,79,183,158,84,178,156,90,174, -155,94,177,154,93,176,158,92,175,159,82,173,160,78,172, -161,77,170,161,81,175,159,84,172,159,81,170,161,82,164, -159,81,164,158,80,167,158,78,166,156,81,164,152,86,163, -149,87,163,150,82,167,154,74,169,154,75,161,154,75,151, -151,85,137,139,84,136,130,71,135,132,82,122,125,92,107, -114,92,93,101,86,82,91,83,67,79,81,45,63,80,35,53,67, -40,53,56,47,56,43,52,57,37,48,56,40,52,62,37,53,63,42, -49,60,46,49,60,47,38,57,59,34,49,49,33,46,46,33,45,42, -42,50,34,56,59,27,66,74,43,116,126,116,167,169,169,183, -183,183,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,183,185,183,158,176,159,48,119,129,5,74,115,0, -51,97,7,43,83,22,44,63,29,45,49,32,48,42,33,51,38,30, -49,34,33,49,38,40,51,41,44,56,35,47,55,34,52,57,37,62, -62,34,77,70,39,82,75,32,86,79,35,92,84,41,108,91,48, -122,101,48,133,111,47,138,121,47,137,125,45,139,127,51, -143,127,66,136,127,62,123,120,67,108,112,70,99,103,80, -97,95,101,108,97,88,118,100,84,129,107,76,142,116,68, -154,128,58,159,135,59,161,138,59,163,141,61,163,143,64, -165,144,70,169,144,77,171,145,78,172,148,76,172,150,75, -170,150,78,167,148,83,155,141,90,158,141,86,162,144,76, -163,144,67,161,142,70,168,139,72,174,147,68,176,152,67, -179,156,75,176,153,84,164,148,93,131,133,93,118,120,106, -131,120,107,148,125,93,160,134,76,163,143,71,169,145,69, -172,147,76,173,147,79,171,151,71,168,149,84,167,147,87, -169,147,88,171,148,85,174,151,84,175,152,83,173,153,77, -170,155,77,171,155,83,171,154,86,168,153,90,163,151,96, -139,143,104,120,121,107,116,109,110,118,106,98,131,112, -75,138,120,66,148,128,60,164,141,63,173,146,64,180,150, -72,179,154,74,182,158,76,179,159,79,175,157,81,178,158, -83,174,159,84,175,160,82,174,160,81,171,159,81,164,155, -88,173,156,85,174,160,86,169,160,86,163,157,81,162,156, -77,167,158,79,167,157,83,166,157,83,165,153,83,165,153, -83,169,155,81,171,159,80,164,157,79,150,150,89,135,138, -84,138,134,59,135,132,84,119,123,83,104,112,82,87,98,79, -74,86,76,61,74,75,42,59,76,35,53,60,42,55,49,51,59,39, -56,61,32,52,62,29,54,64,32,54,65,31,51,64,28,50,62,39, -39,58,56,36,51,44,36,48,43,34,45,39,44,52,34,58,63,27, -65,74,42,112,121,120,164,168,169,182,183,183,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,184,184,183, -165,179,164,54,128,132,2,82,119,0,56,98,0,45,82,12,44, -61,22,45,48,30,46,40,35,48,37,35,47,34,35,47,37,32,48, -38,44,53,34,50,55,35,51,56,36,56,61,32,65,66,34,78,71, -29,87,75,33,88,79,38,87,85,42,109,94,41,118,100,36,126, -108,35,136,117,40,136,118,46,130,116,55,123,122,55,123, -120,65,115,107,68,102,95,75,82,81,89,66,87,73,78,87,67, -93,90,57,110,98,48,128,110,40,147,119,46,155,126,49,161, -133,55,166,139,62,167,138,67,168,139,74,167,142,75,172, -145,74,177,149,76,175,148,77,167,146,81,156,145,91,151, -141,83,157,138,70,165,142,64,161,143,69,153,143,70,162, -145,62,175,152,64,177,151,69,174,149,79,166,145,90,147, -132,93,116,110,98,101,103,89,111,113,76,137,121,62,150, -127,57,155,132,56,158,135,65,156,137,68,159,142,61,157, -139,73,155,136,76,156,135,76,161,136,74,167,139,73,170, -141,74,172,144,70,174,146,72,175,148,79,169,146,79,166, -146,85,165,143,93,153,132,101,119,117,105,82,98,95,81, -95,81,101,100,58,122,107,52,141,115,49,164,130,54,176, -139,59,180,144,66,183,147,69,180,151,71,179,156,76,177, -158,81,176,158,82,169,155,80,167,158,79,167,159,78,170, -157,79,173,149,87,173,154,84,171,156,83,171,155,83,171, -154,81,172,154,79,173,157,80,169,157,83,166,157,82,165, -155,84,162,154,82,163,156,78,162,156,76,159,153,75,147, -147,87,131,134,81,140,134,60,125,130,80,110,118,77,96, -107,77,76,93,73,61,81,69,50,69,69,38,55,73,39,52,61, -48,57,51,55,60,39,61,61,33,61,62,30,56,66,32,56,63,29, -57,61,26,54,59,36,44,59,57,39,51,45,37,48,43,35,44,38, -48,52,34,62,63,27,65,73,39,103,117,114,164,167,168,183, -183,183,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,184,185,184,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,184,185,184,170,180,167,68,136,144,6,85,132,0, -59,107,0,46,83,11,42,64,21,42,46,30,45,42,37,48,45,37, -47,44,37,48,40,32,47,42,42,49,40,51,55,37,52,58,32,55, -58,40,62,64,33,76,69,27,86,75,29,88,80,34,83,79,48,99, -82,48,112,92,43,121,100,41,130,109,45,136,117,48,132, -121,45,120,120,47,119,116,61,123,116,70,116,114,64,96, -109,44,66,86,65,69,71,78,80,69,78,96,74,75,112,81,75, -133,100,54,145,113,47,153,123,51,161,132,57,165,137,62, -169,142,68,170,145,74,175,151,70,178,151,72,176,151,77, -171,150,85,157,147,83,155,141,92,158,136,82,166,141,72, -161,142,72,156,143,81,162,143,69,174,148,71,179,151,80, -177,151,85,171,152,85,154,144,85,125,123,91,96,96,97,99, -89,111,124,95,103,139,113,56,144,115,67,148,120,74,148, -125,74,152,130,74,150,129,79,150,128,81,151,128,78,157, -130,76,163,132,80,165,133,86,166,135,80,169,138,80,172, -144,81,169,145,77,164,145,73,162,141,82,154,140,77,130, -135,83,85,104,84,68,72,110,87,75,87,109,87,68,133,103, -60,158,122,60,172,135,56,178,143,53,183,149,60,183,155, -67,180,157,74,178,159,80,177,160,81,171,157,83,168,158, -84,168,157,88,169,154,87,176,154,80,174,154,85,172,156, -85,173,158,86,176,158,89,175,157,86,174,159,83,171,160, -86,168,159,84,167,158,81,167,160,79,166,158,78,161,153, -84,158,149,88,145,144,90,131,134,81,140,131,68,123,123, -90,107,112,83,93,103,81,74,90,76,59,77,71,48,66,63,39, -58,51,42,57,50,49,60,38,57,65,24,64,67,22,66,69,25,61, -69,46,59,64,41,61,65,31,57,66,29,48,65,49,41,55,40,38, -50,37,39,50,35,52,58,34,64,66,31,65,72,44,102,114,122, -163,167,171,183,183,184,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,184, -184,184,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,184,185,184,174,182,171,81,140, -151,14,90,139,0,61,111,3,47,86,11,42,63,22,42,46,31, -45,42,35,45,42,40,46,44,43,46,41,39,45,42,40,47,37,46, -57,36,51,59,33,55,57,40,61,62,32,70,67,25,79,71,24,87, -75,31,87,72,45,81,76,37,91,87,32,106,98,34,116,103,35, -126,110,38,136,116,42,139,116,51,132,112,64,125,109,66, -127,110,65,133,110,60,109,92,90,67,80,85,53,73,69,64, -75,59,82,77,56,102,93,34,123,106,32,140,114,39,152,121, -46,159,126,51,166,132,60,172,138,69,178,144,66,180,147, -70,177,148,76,176,150,86,169,148,90,156,138,92,146,134, -76,150,137,65,161,137,71,160,134,77,163,136,64,174,143, -66,178,145,74,181,146,83,180,147,86,167,141,89,141,127, -99,104,104,106,81,89,104,84,91,82,109,113,46,128,112,58, -136,113,64,138,115,63,144,116,62,147,117,69,141,120,71, -139,123,69,148,129,72,154,128,73,158,125,77,157,129,72, -161,132,73,168,135,74,169,136,72,167,137,70,160,133,77, -163,138,81,162,132,97,130,108,107,64,80,114,56,75,75,81, -86,56,113,101,49,144,119,51,159,130,48,168,140,49,176, -145,56,179,151,63,181,155,72,177,156,77,178,158,79,177, -157,84,172,156,84,169,157,89,166,155,86,170,156,80,171, -156,84,171,155,83,172,155,84,171,154,84,170,156,83,170, -160,84,169,158,85,165,157,83,165,157,80,168,156,77,168, -154,78,160,150,83,146,149,84,134,140,83,124,130,76,126, -133,64,109,121,83,97,111,78,87,101,77,70,85,72,59,73, -68,51,63,62,44,57,52,45,54,51,57,60,42,65,66,30,66,71, -27,65,74,30,56,71,46,54,69,41,56,70,31,58,66,29,51,67, -51,41,58,43,39,55,41,41,54,38,51,62,36,59,68,30,60,70, -43,105,117,124,165,169,171,183,183,184,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,184,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,178, -182,173,91,145,154,17,95,131,0,66,98,6,52,81,13,44,63, -23,43,48,33,47,42,37,49,38,40,48,34,44,49,31,39,46,39, -41,47,41,44,51,42,49,55,39,56,60,28,60,62,28,68,63,31, -77,67,30,86,74,29,90,78,34,82,77,45,85,75,48,96,80,52, -109,89,53,119,98,48,129,106,41,133,110,48,130,113,49, -126,113,54,126,112,55,135,112,58,121,113,60,83,104,70, -58,80,71,57,66,69,77,69,58,91,74,55,108,83,51,128,96, -49,144,110,49,153,119,46,160,127,46,168,136,50,176,142, -61,179,147,65,177,152,66,175,152,74,171,152,78,161,147, -80,151,132,105,149,123,119,162,135,86,162,132,88,164,133, -78,171,138,71,175,142,70,175,142,72,177,143,77,168,144, -76,146,137,83,114,120,88,89,103,94,84,89,100,96,87,83, -118,94,84,132,107,68,136,115,51,144,118,60,150,124,54, -141,123,54,132,116,59,139,116,74,151,121,84,158,125,80, -153,124,74,156,125,77,165,130,79,169,135,75,168,136,79, -159,133,76,159,133,79,161,135,78,148,136,82,85,113,84, -57,69,112,70,64,95,101,81,65,140,113,51,153,125,39,160, -130,48,170,138,58,177,146,67,177,149,75,175,151,80,177, -156,78,178,159,82,174,161,76,173,161,82,168,158,86,171, -156,90,172,156,90,172,155,88,173,155,87,171,155,85,170, -156,85,168,158,83,168,158,79,163,155,81,164,155,78,167, -155,76,168,154,82,163,152,88,145,143,100,131,133,94,125, -127,88,124,122,94,105,113,91,93,103,87,83,94,83,68,82, -73,59,73,66,52,64,63,43,54,63,46,57,43,61,66,42,67,67, -39,69,71,37,68,72,54,56,70,52,55,69,48,57,69,38,58,69, -16,52,71,38,44,63,36,43,60,31,46,62,28,55,68,28,59,69, -30,65,76,49,115,128,126,172,174,174,183,183,183,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,184,185, -184,179,182,176,107,152,160,30,96,137,14,67,105,9,53,84, -14,48,66,21,45,49,30,48,42,36,51,39,35,50,34,37,52,30, -28,50,38,33,49,39,36,51,39,42,54,36,54,59,27,60,61,27, -63,64,29,68,68,26,76,75,26,85,79,32,81,79,47,79,77,48, -82,78,45,87,83,41,95,93,35,105,104,31,122,104,39,127, -108,46,122,107,49,123,109,51,133,106,55,126,111,59,117, -100,81,87,84,86,56,68,71,54,70,50,70,74,46,83,79,39, -99,89,33,118,102,32,135,113,34,151,120,37,160,128,42, -167,134,52,177,141,59,181,145,62,179,146,71,179,144,78, -175,141,82,158,132,109,137,116,110,163,128,83,163,132,88, -164,133,78,166,140,70,162,145,66,162,148,70,163,145,75, -159,142,74,142,135,82,121,120,91,102,105,100,92,95,106, -108,85,92,85,91,68,101,99,51,131,111,47,142,112,55,147, -122,51,147,124,59,143,120,70,134,113,72,129,115,71,134, -126,69,146,124,72,148,122,72,159,129,74,163,134,71,163, -134,74,161,133,77,156,135,80,159,137,79,162,138,88,142, -118,112,64,82,124,45,69,89,66,76,50,116,106,38,143,119, -31,153,125,42,161,133,51,167,140,60,168,143,69,166,146, -73,169,151,71,175,153,75,174,156,71,176,155,78,174,152, -84,171,153,87,176,153,90,173,152,88,170,152,85,168,153, -84,166,155,83,165,157,83,162,160,79,160,157,81,164,156, -78,166,155,75,163,154,79,157,150,83,141,139,95,128,127, -89,122,121,84,113,117,87,100,106,85,86,97,81,78,88,77, -72,78,72,64,69,66,53,62,63,41,54,62,52,58,45,64,68,44, -66,71,41,73,72,40,61,75,53,58,68,52,56,69,50,57,70,39, -67,68,20,63,68,43,53,62,41,50,59,35,55,62,32,60,67,31, -58,71,33,68,86,62,132,139,139,174,174,177,184,184,184, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,184,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -184,185,183,178,183,177,116,159,154,40,106,120,20,75,93, -12,57,86,15,48,69,22,45,53,31,49,47,38,53,46,35,49,41, -37,50,43,29,50,41,33,51,35,34,49,39,38,48,46,51,52,46, -60,60,32,63,62,34,67,64,35,72,68,38,82,72,43,81,79,45, -79,78,44,83,79,47,87,81,52,88,80,56,95,84,61,117,95, -50,123,101,47,120,102,53,118,100,57,130,101,57,121,101, -70,117,103,63,99,101,70,66,81,67,55,68,70,65,65,57,78, -69,50,91,76,45,107,86,43,123,94,45,142,104,52,155,117, -51,164,128,48,173,136,50,178,139,55,176,142,67,178,145, -64,179,147,69,165,147,73,139,130,58,156,125,54,161,133, -72,165,136,66,170,144,69,165,146,72,161,147,69,162,146, -67,161,139,90,144,136,79,121,120,89,103,104,101,92,97, -91,116,101,58,91,99,66,92,83,69,124,96,72,142,117,27, -147,124,41,147,124,53,148,127,62,147,130,65,134,126,60, -125,119,63,142,114,97,152,127,68,158,130,64,161,131,72, -163,134,68,164,139,71,161,142,75,161,139,84,164,138,96, -153,135,96,85,114,102,52,76,104,58,59,90,104,80,82,137, -103,63,149,118,47,157,126,55,163,134,59,165,139,63,162, -141,68,163,141,82,169,142,97,169,146,89,172,149,80,172, -151,77,168,149,85,173,150,77,173,154,75,172,156,76,169, -156,77,168,157,83,167,158,89,164,160,82,162,157,85,165, -156,81,168,156,79,165,153,84,155,147,84,138,136,89,126, -125,83,119,119,77,109,113,82,97,102,82,82,92,82,72,84, -68,70,81,53,66,77,44,54,67,47,43,58,54,56,66,33,67,74, -35,68,75,36,76,79,29,62,73,66,61,70,53,58,70,53,55,65, -48,69,68,30,66,74,35,57,67,39,53,62,39,59,65,43,61,66, -47,59,65,63,80,87,107,146,148,154,178,178,180,184,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,184,184,184,185,185,185,185,185,185, -185,185,185,184,185,184,184,185,184,185,185,185,185,185, -185,185,185,185,179,183,176,124,155,157,50,106,125,20,81, -97,8,64,91,12,53,72,18,50,55,27,51,47,37,54,48,35,49, -41,35,50,42,41,47,43,40,48,36,38,48,40,37,48,46,43,50, -43,60,58,32,62,63,33,64,65,34,67,67,35,69,72,36,83,73, -41,86,76,44,87,79,48,90,80,53,93,78,58,92,76,57,90,96, -38,118,99,44,120,98,51,109,97,52,105,103,48,114,97,66, -112,99,58,112,97,74,89,82,78,55,69,72,50,66,53,60,69, -44,74,73,38,91,83,37,103,91,35,116,98,38,131,109,36, -149,120,36,162,128,40,169,134,47,173,135,61,178,141,62, -180,146,68,172,145,75,151,135,65,139,127,50,148,132,67, -153,133,60,162,140,63,166,144,71,166,144,70,168,146,71, -157,135,88,148,134,80,124,119,91,98,103,100,91,95,89, -107,102,54,113,102,76,93,93,75,82,92,52,123,115,15,152, -121,38,151,123,53,147,124,59,146,127,61,145,128,63,141, -122,71,127,106,88,135,123,59,148,131,61,156,128,68,167, -128,66,167,132,68,166,135,75,163,136,84,158,136,93,156, -133,97,130,115,122,87,84,123,55,62,91,67,74,64,107,98, -49,141,111,41,148,121,49,156,127,53,164,132,59,165,135, -66,163,132,79,152,132,86,156,136,77,162,142,72,165,147, -71,163,146,79,169,147,74,172,149,71,176,151,74,177,152, -78,173,151,81,168,151,84,164,155,80,161,154,84,163,156, -82,160,156,77,152,153,79,140,147,78,126,134,84,116,123, -79,111,115,71,101,108,72,90,97,74,78,85,76,70,74,63,76, -76,53,74,75,47,59,67,49,45,60,56,62,72,39,69,77,38,69, -77,39,80,80,31,57,75,66,57,73,53,57,71,54,56,66,49,68, -73,33,71,74,37,59,70,42,52,67,43,55,71,47,56,71,49,53, -68,63,80,98,113,144,150,156,177,178,178,184,184,184,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,184,185,184,184,185,184,185,185,185,185,185,185,185, -185,185,179,183,178,123,157,147,56,111,136,24,80,125,13, -67,101,14,56,77,18,49,62,27,50,52,38,56,45,36,52,37, -35,49,43,42,50,38,41,49,35,40,51,36,36,51,33,42,52,30, -59,57,27,63,63,30,65,65,29,69,69,31,69,73,33,80,71,32, -84,77,32,84,80,29,90,86,30,95,88,30,98,88,34,80,84,48, -113,90,56,122,98,58,108,93,61,98,83,90,111,94,49,109, -96,47,109,98,54,97,97,59,63,84,51,51,68,55,57,62,54, -70,65,52,86,73,50,98,82,44,111,91,38,124,100,40,141, -107,45,155,117,50,163,126,46,170,136,39,179,143,56,180, -146,65,175,145,82,157,134,98,145,117,122,154,127,114,155, -125,97,161,131,86,169,143,82,165,140,82,170,141,98,162, -142,78,150,133,88,128,124,93,101,108,92,93,94,101,107, -99,69,116,111,53,105,113,58,86,95,59,113,90,71,148,114, -46,153,126,49,150,128,59,150,130,70,148,129,72,147,131, -64,138,129,37,132,114,74,145,122,76,154,127,54,168,129, -62,171,138,65,170,139,75,167,144,77,159,141,76,158,134, -94,138,129,103,101,110,96,68,80,89,58,59,86,95,75,86, -135,99,63,142,115,46,151,121,49,160,130,50,165,137,54, -165,139,60,152,135,67,152,132,68,160,141,64,164,147,60, -161,145,75,168,146,70,173,149,71,176,150,71,176,151,72, -173,152,73,170,154,77,165,155,82,162,157,82,163,156,83, -159,154,81,148,150,81,134,139,92,120,124,101,112,114,91, -105,107,78,94,97,80,85,89,82,74,80,75,68,72,59,73,74, -48,76,79,46,63,73,46,49,67,51,67,76,48,72,78,49,72,78, -46,82,81,36,55,77,48,58,75,53,57,74,41,58,73,29,71,77, -33,72,76,32,63,76,34,56,72,38,57,72,51,56,67,59,52,64, -72,84,99,117,144,151,155,175,178,178,182,183,183,184,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,181,183,179,137,161,155,65,122,148,18,85,127,22,68, -106,20,57,81,19,51,64,24,49,51,38,57,46,37,53,37,30, -49,42,33,51,35,33,52,33,41,53,37,39,50,34,40,52,28,55, -56,24,63,58,27,66,62,27,69,65,28,73,66,30,76,69,29,81, -74,29,85,79,28,87,83,26,87,86,24,94,90,32,98,78,53,85, -88,43,108,97,52,111,87,61,80,76,83,90,88,38,101,94,41, -109,94,51,108,87,58,102,78,64,63,68,60,53,63,53,57,62, -46,68,67,40,82,75,33,99,85,29,113,93,30,125,101,34,139, -109,37,151,119,34,166,131,30,174,137,49,177,140,59,177, -139,77,161,132,98,132,121,121,159,118,114,160,116,97,163, -121,83,176,135,82,169,133,81,157,132,89,164,140,77,151, -132,90,134,118,93,112,105,95,82,97,100,104,99,69,137, -100,56,140,104,68,114,96,71,88,94,63,118,111,30,140,124, -42,147,125,57,145,122,63,146,124,68,149,126,61,157,134, -45,137,117,79,123,118,63,129,132,44,151,130,52,167,133, -60,168,134,71,171,133,71,174,133,77,167,126,93,160,119, -108,129,106,106,90,91,105,48,66,86,56,75,71,98,95,47, -137,104,39,145,113,40,156,123,44,163,128,47,161,132,54, -153,130,63,151,127,63,157,131,56,167,141,57,164,136,71, -170,139,65,170,142,66,171,145,66,175,148,69,174,148,70, -171,149,75,168,149,80,165,151,80,159,149,78,155,148,75, -149,144,78,133,132,86,114,116,94,102,106,81,95,102,70, -85,94,73,75,85,75,62,76,69,58,70,54,65,73,45,71,79,44, -65,76,48,59,71,58,65,80,51,65,80,49,66,83,46,67,85,34, -64,72,49,59,74,51,59,70,39,64,73,30,61,79,29,65,75,27, -63,77,34,61,76,43,56,74,51,46,73,59,44,76,76,93,111, -122,151,158,161,176,178,178,183,183,183,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,182, -184,181,150,173,142,85,138,126,23,91,118,25,76,81,22,62, -69,22,55,60,26,52,47,38,57,41,39,55,37,31,49,43,31,48, -38,34,51,40,41,53,36,40,51,31,38,48,39,54,54,30,64,60, -25,68,64,29,67,62,32,71,63,34,76,68,31,78,70,36,82,75, -38,86,81,34,85,81,34,89,82,48,102,85,46,81,81,53,97, -84,56,111,90,50,82,87,38,81,73,64,92,82,53,102,87,48, -109,90,47,107,88,48,70,76,67,56,64,64,57,60,57,63,59, -53,75,64,52,89,71,50,103,79,47,116,88,45,131,100,43, -144,110,41,156,117,48,164,124,61,170,131,64,172,136,69, -160,135,81,131,124,102,156,128,43,160,124,60,159,121,72, -170,132,72,168,137,66,155,134,67,158,135,62,150,134,73, -135,122,77,117,113,84,85,101,92,103,96,83,137,103,44, -149,118,51,126,113,66,94,96,88,107,89,82,130,109,64,146, -125,52,149,129,47,149,130,48,148,126,53,154,125,88,149, -134,61,122,116,62,121,116,80,149,125,56,166,133,54,167, -135,62,171,134,64,174,135,66,168,132,71,161,126,82,134, -115,98,96,99,107,55,73,95,52,68,82,84,76,66,129,92,58, -140,107,47,150,117,46,157,122,51,155,126,55,150,126,69, -149,127,60,155,130,55,161,136,55,162,137,62,170,141,64, -170,143,68,169,142,69,172,144,73,172,145,73,169,146,73, -166,147,74,163,148,78,156,146,82,151,141,85,144,136,90, -126,123,92,107,110,88,97,100,81,88,93,77,78,84,82,70, -80,69,59,74,64,56,68,51,64,72,44,68,76,40,67,80,45,65, -80,49,66,81,48,64,80,44,66,82,48,64,78,61,65,75,41,57, -72,55,59,69,45,68,75,43,62,74,60,66,72,54,66,77,50,63, -78,45,57,77,45,55,79,66,70,94,97,122,135,139,164,168, -169,179,179,179,182,182,182,183,183,184,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,181,185,181,164, -177,157,110,158,143,33,105,127,27,79,83,21,68,74,18,59, -64,22,54,49,32,58,42,37,58,40,32,52,46,30,50,40,35,50, -39,44,52,36,44,52,32,35,50,42,50,54,30,57,60,24,61,66, -30,60,66,35,62,65,36,66,68,31,71,70,37,74,70,35,85,80, -35,85,79,34,84,78,47,93,85,48,91,81,54,83,77,48,88,87, -44,96,88,38,71,73,64,74,77,47,88,83,44,97,87,43,97,88, -45,82,77,69,63,65,65,56,61,58,57,60,53,62,63,49,69,66, -44,81,73,38,96,82,36,116,93,35,130,102,32,141,107,40, -150,112,52,156,119,53,159,125,58,154,129,71,133,118,93, -155,120,31,154,125,57,142,117,66,154,127,65,155,130,59, -150,129,62,154,130,57,148,128,67,132,119,75,116,110,83, -103,96,94,100,95,86,122,103,42,147,119,49,144,118,69, -112,100,88,90,89,77,112,99,49,139,117,41,148,124,41,152, -130,48,153,129,59,143,116,82,152,129,57,139,120,66,127, -112,77,137,124,54,156,128,48,163,129,55,168,130,58,170, -132,60,167,130,66,151,128,80,128,118,98,103,102,109,75, -79,101,61,67,82,69,75,64,92,91,55,120,107,42,139,115, -41,146,120,46,148,125,54,147,123,65,147,125,57,151,127, -52,155,132,51,154,138,58,160,143,62,162,144,67,163,145, -71,164,145,72,163,145,72,162,145,71,158,148,73,156,148, -78,148,142,79,141,137,81,131,130,86,118,116,85,101,103, -82,90,95,77,79,89,74,67,80,77,68,74,64,62,68,59,59,64, -47,65,70,41,69,75,38,72,77,42,72,75,45,67,78,45,65,77, -41,68,78,44,66,74,58,64,79,42,56,71,51,61,69,44,70,76, -45,63,74,59,63,73,52,65,76,49,66,78,46,64,82,52,75,93, -83,113,124,128,156,161,164,177,178,179,183,183,183,184, -185,185,184,184,184,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,184,177,184,176,137,172,165, -52,120,145,33,87,104,24,74,91,18,61,76,21,55,64,30,56, -56,38,59,51,37,57,45,33,51,46,36,51,38,43,52,36,43,53, -36,35,52,41,48,54,39,56,61,28,61,67,28,60,68,33,62,66, -43,65,66,42,70,68,41,74,70,37,82,75,35,84,76,36,80,76, -43,83,77,45,91,82,43,80,79,48,76,78,54,88,82,47,73,76, -54,67,71,55,77,72,48,91,82,43,90,83,45,88,82,51,73,74, -57,58,64,55,55,60,51,57,60,47,64,62,44,74,67,34,83,71, -47,103,83,43,120,93,32,132,99,38,144,105,44,150,111,47, -153,118,55,149,123,65,136,121,72,150,114,27,150,122,49, -138,115,56,148,121,60,150,125,59,142,122,62,145,119,70, -141,119,74,129,115,80,114,105,80,107,99,76,98,95,81,114, -97,56,138,111,56,147,121,67,127,111,73,92,89,88,105,90, -65,132,107,56,143,118,54,146,122,56,152,126,62,149,123, -61,142,121,73,143,125,79,133,118,69,125,116,74,149,124, -59,160,128,58,165,130,63,166,131,66,166,131,68,147,129, -78,126,119,94,108,107,97,93,94,89,73,75,73,71,75,72,82, -81,61,107,94,61,134,110,55,143,118,45,143,120,54,145, -123,56,147,123,55,153,126,54,158,131,55,153,134,62,154, -136,68,156,139,73,161,142,76,163,144,73,162,144,68,160, -144,66,156,144,71,154,146,77,147,139,82,138,131,88,124, -122,91,113,113,80,98,101,74,86,94,74,73,86,73,60,76,75, -64,71,61,61,68,56,58,65,46,63,69,39,67,74,38,72,78,40, -74,79,39,61,75,48,65,76,49,70,76,45,69,77,45,63,78,50, -56,71,40,64,73,37,71,80,39,63,77,46,62,74,39,65,78,41, -66,80,50,69,85,72,97,110,114,146,151,157,174,176,177, -182,182,183,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,184, -184,184,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,184,185,184,159,178,174,88,138,155,37,95,115,33,80, -92,26,67,77,23,58,65,30,56,56,42,59,47,47,59,36,37,53, -46,40,53,40,41,52,37,42,54,36,41,54,34,42,51,41,57,58, -28,69,65,26,70,67,30,64,65,37,65,65,37,68,66,35,71,68, -32,77,73,33,81,76,36,80,77,41,80,77,47,82,77,40,82,79, -46,75,74,48,74,74,49,74,76,46,69,71,54,69,68,48,82,77, -44,89,79,42,88,76,44,80,74,54,67,67,55,58,61,50,56,60, -46,61,62,43,73,68,37,72,66,44,83,74,40,102,87,34,122, -93,34,133,100,40,139,105,48,142,111,57,141,114,65,138, -112,68,139,107,38,141,116,54,135,113,58,139,116,58,144, -121,58,140,120,60,129,115,72,128,112,71,122,107,73,111, -99,71,107,97,65,98,96,76,107,97,61,125,107,60,136,115, -68,131,111,78,95,91,97,92,84,74,113,97,61,136,114,60, -141,117,54,147,122,57,151,128,50,132,117,70,139,119,71, -140,117,63,125,114,77,145,119,64,155,127,63,160,130,67, -158,128,68,157,129,71,149,128,76,129,119,92,112,107,94, -103,100,91,79,81,81,69,77,86,83,84,67,94,87,67,116,103, -58,132,115,46,143,119,45,143,122,55,145,126,59,149,130, -57,154,132,56,151,132,63,147,131,68,147,132,70,149,135, -70,153,141,70,157,143,66,160,143,63,157,141,67,151,141, -71,141,132,76,130,124,84,116,116,89,106,107,80,96,99,73, -86,93,73,74,84,71,64,74,68,58,69,55,58,68,53,57,66,45, -59,67,39,65,71,39,70,73,40,71,75,37,59,70,48,64,76,54, -66,76,46,67,76,42,57,73,60,58,69,36,66,76,35,69,81,38, -63,74,40,64,74,42,64,78,46,62,80,57,72,87,82,117,127, -132,165,169,170,181,182,182,184,184,184,185,185,185,184, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,184,184,184,184,185,185,184,184,184,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,184,185,184,173,182,174, -118,152,155,48,107,128,40,84,88,34,73,78,24,61,68,30, -58,57,44,61,46,52,62,38,34,56,46,39,53,41,41,53,39,42, -55,37,48,54,33,38,50,47,53,56,31,67,63,29,72,69,31,64, -66,34,64,64,35,67,65,34,71,67,31,74,71,30,77,74,33,78, -74,39,74,72,43,77,75,41,83,79,43,76,75,41,64,70,47,64, -71,43,65,68,48,65,66,47,70,67,42,85,75,41,89,75,40,82, -73,47,72,69,52,62,63,51,56,59,47,59,59,44,68,64,42,72, -67,41,72,68,38,84,76,40,109,84,42,121,94,40,124,98,48, -127,103,54,127,105,58,126,104,64,123,100,51,128,106,62, -129,108,63,133,110,57,139,114,54,140,117,58,127,113,67, -124,111,68,119,106,69,109,97,66,105,94,64,98,91,72,100, -95,66,115,104,67,128,111,74,119,108,82,102,98,89,91,85, -70,101,87,55,127,106,56,137,110,52,141,114,56,146,122, -56,140,120,62,143,116,54,146,115,52,128,113,66,139,112, -67,151,122,63,155,127,63,154,128,65,150,128,72,150,126, -71,132,118,88,113,106,91,107,103,94,80,86,91,61,79,98, -79,86,71,92,89,60,102,95,49,116,107,45,141,115,43,143, -121,51,141,124,54,141,126,54,144,130,53,144,133,54,145, -132,61,142,129,65,140,130,68,137,130,67,141,134,69,150, -138,72,154,139,66,146,137,68,133,129,69,123,122,73,112, -111,77,102,101,76,96,95,68,87,89,71,74,80,69,69,74,61, -60,70,49,59,67,43,60,65,39,63,66,37,68,67,36,72,70,35, -74,72,33,63,68,34,66,76,42,65,76,40,69,76,36,53,71,55, -62,72,36,67,80,41,62,80,42,66,75,38,67,74,47,60,77,59, -53,75,69,73,90,94,138,145,149,175,177,178,183,184,184, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,184,184,184,185, -185,185,184,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,184,185,184,178,184,176,143,168,153,62,115,147,44,87, -98,39,79,83,27,65,70,31,61,58,41,62,49,49,62,46,35,56, -45,38,53,42,41,54,45,41,54,45,49,54,45,38,51,50,50,54, -35,63,62,29,68,70,30,63,69,33,62,63,39,65,64,35,69,67, -28,73,72,27,75,74,31,74,73,38,72,72,40,71,72,40,78,77, -42,74,75,40,65,71,45,62,69,41,63,67,45,63,65,41,64,62, -38,70,64,45,83,74,34,82,75,38,74,72,48,63,64,51,60,62, -51,60,60,46,64,59,48,71,66,42,74,68,38,77,68,40,93,70, -56,111,87,45,115,92,50,119,97,52,119,100,54,115,98,62, -112,94,60,116,99,65,121,102,62,129,107,59,133,108,59, -133,109,65,129,109,64,125,108,61,120,105,62,111,98,59, -107,94,57,104,93,62,103,95,66,110,98,70,118,104,78,109, -101,85,103,97,75,90,84,74,93,80,63,117,97,58,130,104, -51,134,107,58,136,110,63,138,116,63,134,108,54,139,113, -58,128,111,63,128,104,79,145,116,70,151,123,64,151,125, -62,148,125,68,148,125,76,133,118,85,117,108,82,111,108, -84,85,93,88,66,84,98,86,90,59,97,95,48,105,99,49,109, -100,52,128,104,57,142,119,43,143,126,42,141,126,50,140, -126,56,140,129,56,142,130,57,141,128,67,137,126,70,131, -124,66,127,122,64,131,125,69,142,132,64,138,130,69,126, -122,72,116,113,75,107,106,71,97,96,76,92,91,66,83,86, -70,67,75,68,62,70,55,60,69,39,59,67,33,60,64,33,61,63, -32,65,65,30,68,68,26,67,67,31,64,70,26,65,75,34,63,74, -37,67,75,33,55,73,38,64,76,34,65,80,45,58,75,45,66,77, -25,67,76,41,54,71,62,44,68,78,85,101,110,154,159,161, -180,180,181,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,184,184,184,184,184,184,185,185,185,184,184,184, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,182,185,181,163, -176,167,85,135,157,41,92,103,41,82,84,35,72,73,29,63, -58,37,65,52,47,62,46,44,57,47,35,54,42,41,54,46,45,52, -44,47,53,45,47,51,47,49,53,35,60,61,29,70,68,30,66,69, -35,60,67,41,57,66,33,60,69,27,67,75,29,68,76,33,67,73, -39,66,69,38,66,69,38,77,74,41,78,74,39,68,71,43,62,70, -40,60,68,44,57,65,39,56,64,39,56,60,42,71,69,29,78,74, -36,77,72,46,70,64,48,65,60,47,65,61,45,63,60,47,68,64, -39,76,70,38,79,70,40,75,69,51,85,84,42,101,90,48,107, -93,48,111,96,50,110,94,59,99,87,54,102,90,55,107,93,53, -112,97,50,115,99,51,115,100,57,122,102,58,122,102,57, -117,101,59,111,97,57,109,93,53,108,91,56,108,94,58,114, -100,65,116,103,73,102,98,79,101,96,73,88,87,75,80,79, -59,99,94,53,113,102,48,118,104,53,122,107,57,124,110,59, -118,107,55,122,111,61,128,109,67,112,104,79,131,112,66, -141,120,61,143,121,59,147,122,63,140,121,72,131,112,78, -120,104,76,112,104,80,88,92,88,72,81,94,100,88,53,103, -92,46,107,100,50,107,100,52,112,99,52,117,115,40,135, -124,39,140,124,47,138,121,51,143,124,55,145,127,58,142, -127,66,136,124,68,129,122,64,126,121,62,124,118,60,122, -123,57,120,122,65,114,115,69,104,107,70,95,103,67,82,93, -73,80,87,62,74,84,68,61,73,64,60,66,51,60,65,36,58,66, -35,58,65,35,60,65,34,61,65,29,64,68,27,67,66,32,64,69, -28,67,75,37,64,74,39,64,75,36,67,70,36,68,77,35,64,76, -42,61,71,41,72,78,26,68,77,41,51,69,56,51,71,77,111, -123,130,169,170,173,183,183,183,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,184,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,184,184,184,184, -184,184,184,184,184,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,184,185,184,174,184,174,126,164,151,67,109,125,44,85, -97,42,80,78,31,65,64,37,63,57,50,65,42,46,61,40,37,55, -43,43,56,39,49,57,34,49,56,40,51,53,47,50,52,47,59,58, -40,72,69,36,68,71,36,62,69,45,58,67,42,59,67,40,64,70, -44,67,73,44,67,74,42,67,71,38,64,66,45,74,69,47,78,73, -43,70,73,44,60,66,52,59,67,43,58,67,40,55,64,35,56,63, -31,65,63,33,72,68,39,74,70,43,73,68,44,70,66,43,68,65, -40,65,63,42,68,63,43,76,68,45,80,72,42,78,72,46,75,74, -43,93,82,51,103,89,52,105,90,48,104,87,58,101,91,48, -103,93,47,107,94,50,110,94,51,111,95,53,108,93,54,112, -94,48,115,97,47,110,94,58,105,91,65,107,90,60,105,89, -60,108,95,52,115,102,58,120,108,68,105,105,61,99,95,67, -89,89,72,81,80,67,89,82,68,106,92,66,113,98,55,114,99, -56,115,100,57,112,100,62,116,103,71,124,105,75,108,101, -79,124,106,56,134,114,53,136,116,55,143,118,63,137,120, -68,129,112,65,122,106,72,112,102,88,92,94,102,76,85,89, -102,93,36,105,96,39,108,103,38,107,105,30,113,103,42, -105,104,43,122,111,47,135,119,48,138,122,47,140,121,52, -143,122,71,141,123,72,137,124,74,129,120,75,126,116,77, -124,114,76,113,111,64,107,107,73,107,107,71,100,105,63, -88,98,64,74,85,81,75,81,66,70,82,60,60,73,49,57,65,41, -59,65,32,56,64,36,55,62,36,60,64,37,60,63,35,63,65,34, -69,69,25,64,69,28,66,74,35,64,74,39,63,72,45,71,75,31, -71,77,51,64,74,50,63,72,45,72,74,52,64,69,69,52,69,69, -84,98,100,147,153,155,178,181,181,184,184,184,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,184,184,184,183,183,183,184,184,184,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,183,185,182,159,172,171, -100,140,147,43,95,100,44,83,81,38,69,69,35,65,58,43,70, -44,49,63,44,41,57,46,40,57,39,43,61,34,47,58,41,45,56, -47,44,55,47,55,58,39,72,69,36,77,72,40,68,70,47,60,67, -43,59,68,41,61,69,41,65,70,42,66,71,41,65,72,38,60,65, -43,61,67,40,67,72,38,74,70,43,67,64,52,65,63,42,64,64, -40,59,63,37,56,64,33,60,64,33,64,66,35,67,68,39,67,67, -41,68,66,41,70,65,41,65,64,43,64,63,41,68,68,42,71,72, -39,76,70,44,82,73,44,80,76,42,84,80,38,90,86,39,90,83, -49,92,84,40,96,90,44,101,94,48,104,94,48,105,95,51,101, -93,52,98,96,46,107,96,45,100,92,54,89,88,57,88,89,51, -86,87,50,97,90,45,113,100,55,122,104,66,120,102,65,110, -93,71,88,86,69,74,80,64,76,79,60,92,87,57,105,92,48, -106,92,48,106,95,50,103,93,55,107,95,63,116,97,67,105, -94,74,115,97,47,124,106,44,129,110,48,134,112,56,131, -116,62,122,111,61,116,107,70,106,100,85,90,90,98,80,80, -88,106,91,37,104,91,37,105,97,33,107,104,31,109,105,41, -111,105,48,100,109,38,108,114,36,123,118,39,134,116,46, -131,117,63,132,119,66,134,121,71,128,117,72,118,110,70, -114,111,70,112,111,63,101,101,67,89,97,57,81,97,52,80, -91,56,68,77,73,71,73,59,71,72,54,65,66,46,57,59,38,58, -62,31,58,63,36,54,62,36,54,64,34,55,66,35,56,66,32,64, -67,22,66,68,28,69,71,33,66,70,37,64,69,43,65,80,33,62, -75,46,61,69,45,62,71,44,62,76,49,51,76,68,71,94,91, -131,139,139,170,172,173,183,183,183,184,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,184,184,184,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,183,175,181,176, -131,157,160,72,112,128,50,85,96,44,76,72,37,67,59,42, -64,65,53,67,47,46,63,47,40,57,45,41,57,45,48,59,38,47, -62,30,47,62,29,56,63,27,71,70,27,80,78,25,73,78,34,65, -74,41,61,71,41,62,71,39,64,71,39,67,69,47,64,69,42,60, -66,39,59,64,43,63,65,44,73,71,34,67,66,43,64,63,42,64, -63,44,59,61,42,54,59,41,58,58,45,61,61,38,65,64,37,65, -63,40,67,64,43,71,67,40,66,67,36,63,64,37,68,69,37,69, -70,33,75,69,43,81,71,44,79,74,44,82,76,42,88,81,45,89, -81,52,89,78,45,91,82,49,94,83,51,100,87,53,100,87,51, -96,86,52,91,84,55,100,85,57,97,87,60,88,86,63,85,83, -61,80,80,51,90,78,55,106,89,61,117,98,61,116,98,57,111, -96,63,91,88,75,73,76,72,74,76,66,86,80,57,101,86,50, -103,89,46,102,88,56,99,87,63,101,88,64,111,92,56,103, -93,61,111,92,46,118,97,49,121,99,54,125,102,54,124,106, -63,119,106,58,113,105,61,103,100,66,87,91,73,79,83,69, -104,89,37,104,93,37,101,91,45,103,94,56,105,98,53,106, -96,57,99,102,48,101,100,46,114,103,51,129,108,53,128, -116,49,126,114,52,127,115,56,124,115,56,116,112,53,110, -108,57,107,103,65,99,99,60,82,88,58,75,86,63,75,84,57, -62,72,68,67,71,50,68,69,48,62,63,42,57,58,38,57,58,39, -58,63,38,56,64,34,54,63,32,55,65,37,54,61,38,63,62,39, -67,68,34,68,70,38,66,69,38,65,74,27,63,72,57,59,69,45, -60,70,35,61,72,36,59,73,52,70,88,97,115,128,136,163, -168,168,181,181,181,184,184,184,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,182,185,182,154, -171,172,96,133,143,49,95,99,48,83,78,49,70,66,43,64,66, -51,69,46,52,66,49,46,59,47,42,56,44,47,58,36,55,62,34, -49,63,31,56,65,29,70,69,27,81,76,24,81,78,37,75,75,47, -68,71,45,65,72,42,60,73,40,57,73,46,61,73,44,57,70,40, -54,67,42,55,68,43,67,72,33,62,69,42,59,66,41,58,64,42, -58,61,41,58,58,43,53,57,43,56,60,37,64,64,38,64,62,39, -62,61,39,64,65,37,69,66,38,66,66,39,68,69,38,69,70,34, -66,69,39,71,70,39,78,72,43,76,75,39,77,80,39,80,80,48, -81,78,42,81,80,45,83,82,46,89,86,47,92,87,48,92,86,51, -88,83,53,83,86,51,85,81,52,90,78,57,89,79,59,89,79,56, -83,78,54,82,83,48,89,92,46,96,95,47,96,93,55,84,82,68, -68,70,66,65,72,59,69,77,47,83,85,41,95,89,41,93,85,50, -91,84,58,91,87,57,99,92,50,97,91,59,95,91,39,102,94, -40,107,95,45,112,98,46,109,100,53,109,100,51,109,99,55, -101,93,60,85,84,67,74,79,64,92,89,32,96,95,35,89,91, -40,93,94,53,104,96,52,100,93,54,105,95,48,100,97,44,93, -100,40,102,105,39,115,110,41,113,111,45,110,109,45,110, -110,46,108,107,47,106,103,53,99,97,58,89,94,52,79,87, -55,71,78,55,69,77,50,63,68,64,64,67,45,62,67,43,55,61, -37,53,57,34,52,61,37,54,62,35,54,64,33,51,64,31,53,65, -36,53,63,38,54,63,37,60,71,34,60,71,36,59,72,37,66,77, -31,59,70,53,55,67,42,57,69,33,59,73,35,66,81,61,95, -116,121,151,156,160,177,178,179,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,170,182,174,125,154,155,73,110,125, -55,85,93,55,77,70,48,70,63,52,66,62,55,69,53,49,63,47, -44,59,46,47,56,50,55,61,39,50,63,38,54,62,30,68,67,29, -80,74,31,82,81,33,77,80,37,72,77,42,69,76,47,66,77,51, -60,75,48,63,74,44,59,71,41,56,68,44,54,66,43,64,66,44, -61,68,42,59,65,43,58,62,45,59,60,46,61,60,43,53,58,44, -54,56,40,60,59,38,65,63,37,62,62,34,62,63,38,69,65,40, -67,67,41,70,71,40,69,70,38,67,68,44,70,68,36,75,70,34, -77,75,40,73,75,43,79,79,41,82,79,44,80,78,49,80,78,53, -88,83,59,91,83,58,92,84,56,91,86,52,82,83,60,84,80,53, -92,83,48,92,83,55,91,86,36,84,84,38,82,84,40,82,83,46, -86,79,58,87,79,62,80,78,57,71,76,52,63,71,49,64,69,51, -77,73,58,90,80,51,92,82,52,88,80,55,88,82,60,95,84,62, -94,86,64,94,87,45,98,88,45,103,89,52,107,91,54,104,92, -62,103,90,60,103,90,60,96,87,61,82,80,69,74,75,75,92, -84,53,94,88,51,88,86,50,89,88,53,100,89,55,97,91,50, -102,88,59,99,92,62,89,91,54,95,93,53,108,98,51,108,102, -51,105,102,53,105,101,56,103,98,56,101,96,59,95,90,63, -84,86,62,76,80,61,68,73,57,65,69,57,62,71,45,64,68,47, -61,65,43,53,61,33,54,59,28,51,59,41,53,60,38,54,62,37, -52,63,35,55,68,34,56,69,27,57,70,25,61,73,32,59,71,30, -61,73,37,66,71,52,58,68,45,56,67,43,59,69,38,61,73,43, -77,87,92,122,133,143,167,169,172,182,182,183,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,179,184,180,147,169,172, -92,132,140,49,100,100,44,87,73,49,78,70,43,73,66,56,71, -56,52,67,51,44,63,49,42,59,51,52,61,38,53,60,38,51,62, -28,56,68,24,69,74,27,77,83,31,77,85,40,74,83,47,70,79, -49,70,77,53,72,73,53,70,70,46,63,68,43,61,67,46,58,64, -45,58,64,43,59,65,41,59,62,42,57,62,45,55,60,46,60,59, -43,54,57,44,50,55,39,52,57,35,57,63,34,59,63,34,60,62, -37,64,62,37,67,65,40,69,68,38,68,69,37,64,68,41,67,67, -36,71,69,32,74,72,38,72,72,40,73,73,34,79,77,40,80,75, -47,78,73,50,79,76,52,81,78,51,86,79,51,87,81,47,78,76, -54,78,78,48,81,80,40,79,78,46,87,84,32,91,80,39,91,80, -43,88,81,49,78,77,57,73,74,56,71,72,51,71,72,50,68,69, -51,64,66,51,65,67,50,70,76,41,75,78,43,74,76,47,77,76, -51,82,79,53,84,78,55,88,79,38,94,83,40,95,83,45,98,84, -47,93,84,52,90,86,52,88,85,50,85,83,53,74,75,62,65,70, -68,81,79,46,88,83,46,86,81,45,82,83,46,82,87,44,86,90, -45,81,88,50,86,88,55,88,86,52,85,84,44,94,88,39,95,94, -41,94,96,45,92,93,47,90,92,49,88,90,51,81,84,54,74,78, -54,68,73,53,59,66,48,52,65,48,62,66,40,61,68,45,57,64, -41,55,59,33,58,57,29,51,58,40,48,58,34,50,61,34,51,62, -33,55,65,31,59,68,27,63,70,27,62,73,32,62,68,31,67,71, -40,61,71,51,61,66,46,60,64,44,61,66,36,62,75,45,82, -108,105,141,146,153,176,177,179,184,184,184,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,184,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,184,182,185,182,164,180,171, -115,151,142,63,107,112,49,87,88,54,84,65,46,76,68,59, -74,55,58,73,54,48,66,55,46,60,59,53,60,45,56,61,41,54, -62,44,53,61,39,66,71,28,75,80,41,76,86,35,76,88,31,74, -86,33,73,84,38,75,80,40,74,79,31,68,75,36,64,70,45,59, -64,52,59,61,55,60,64,45,61,65,40,58,64,44,53,58,46,58, -56,45,56,61,39,53,60,33,53,60,32,55,60,33,56,59,36,59, -59,40,63,60,39,66,64,37,67,64,37,68,66,38,62,67,32,65, -64,39,69,67,38,71,69,44,70,69,47,72,71,42,76,74,35,78, -75,38,79,76,40,77,75,39,78,73,44,83,74,54,84,75,53,76, -74,48,75,74,48,77,74,46,76,75,48,84,76,49,89,76,44,93, -80,45,89,83,47,81,80,51,75,75,58,72,71,56,72,71,54,71, -72,52,68,72,48,68,72,45,66,72,37,68,70,42,69,68,43,71, -69,48,76,71,54,79,71,55,82,70,44,87,75,42,90,78,42,94, -79,43,88,78,51,83,78,49,82,78,49,80,78,52,70,74,52,62, -71,51,77,75,44,85,80,41,83,77,46,82,79,57,79,82,57,82, -85,47,77,83,53,78,80,55,83,80,54,81,77,55,88,78,48,88, -81,53,86,81,58,84,80,61,82,79,61,79,78,60,75,74,60,67, -69,58,61,63,54,55,61,52,48,59,51,58,64,26,58,68,36,54, -61,41,54,56,40,59,57,31,53,63,31,48,58,37,48,57,42,50, -59,41,55,65,36,59,68,31,63,68,34,59,70,30,67,73,36,68, -72,41,58,69,45,60,64,47,60,68,30,66,71,40,67,76,69,97, -114,126,158,161,163,182,182,182,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,184,185,184,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,184,185,184,176,183,177, -143,164,160,77,121,123,43,94,91,52,89,67,53,76,72,49, -78,55,61,81,62,58,70,63,45,64,63,48,63,46,49,65,40,53, -65,45,54,63,41,62,71,27,75,78,40,80,80,33,84,84,31,80, -82,32,74,81,35,70,82,37,72,84,32,65,82,37,62,77,49,55, -68,53,47,67,53,60,64,45,60,65,40,62,64,47,56,59,50,48, -60,44,54,61,39,54,62,35,52,61,32,51,60,32,51,60,35,54, -58,39,55,60,36,58,64,34,61,64,35,63,64,36,64,67,32,59, -65,37,61,66,34,67,66,41,69,64,43,71,68,40,75,73,34,76, -73,35,77,73,37,79,77,41,74,75,43,71,72,48,69,72,44,63, -74,41,64,74,42,67,73,41,69,73,44,77,73,44,77,73,37,78, -79,38,80,81,42,85,75,51,78,73,59,71,67,55,68,65,50,68, -67,48,67,68,45,69,71,44,75,73,41,76,68,46,76,63,45,73, -63,47,64,69,48,60,68,46,62,67,34,71,70,33,79,73,35,84, -74,36,79,72,43,78,71,41,78,72,42,74,72,45,70,70,49,64, -67,49,67,74,38,75,78,34,75,77,42,72,76,51,72,77,52,74, -81,39,73,79,48,71,74,48,73,72,46,75,71,49,78,75,41,83, -77,49,82,75,54,76,72,54,74,72,53,72,71,53,65,68,52,60, -63,51,53,58,48,49,57,46,46,55,47,59,60,22,58,63,31,52, -59,38,47,56,36,50,59,30,60,61,33,53,58,41,43,55,40,41, -57,37,50,62,33,59,67,30,56,70,31,57,69,29,61,78,37,54, -75,36,55,68,42,51,65,44,60,72,32,63,84,47,69,95,82, -122,130,140,171,171,175,184,184,184,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,184,185,184,182,185, -182,166,179,166,110,144,138,56,99,124,54,83,105,62,84, -81,53,80,74,61,82,62,65,81,52,51,75,50,49,60,66,50,65, -46,53,65,43,58,66,45,61,65,45,72,78,22,79,82,18,85,86, -23,83,88,23,77,88,26,74,87,36,75,86,43,66,81,48,67,83, -46,62,79,39,47,72,33,60,62,50,61,64,43,63,67,35,64,72, -33,53,68,32,55,61,43,55,61,44,53,59,44,52,58,45,52,58, -45,54,58,43,55,55,52,56,59,42,59,62,38,62,62,41,65,62, -54,61,67,39,60,60,50,64,62,46,70,63,44,70,61,55,71,63, -56,73,65,50,76,70,43,77,75,37,74,75,37,72,74,43,70,72, -49,62,73,43,61,70,41,66,71,41,68,71,42,76,71,42,77,74, -34,73,74,38,71,69,46,80,67,55,75,71,49,69,67,39,68,67, -35,67,68,35,64,66,38,61,62,43,66,60,45,74,65,40,84,70, -44,82,74,43,66,75,33,60,69,42,60,63,34,67,63,36,75,65, -40,79,66,39,75,67,39,74,66,37,75,68,42,71,67,45,65,65, -45,64,66,47,63,66,54,71,70,49,73,73,49,69,73,48,67,71, -48,67,68,50,65,68,49,66,68,44,70,69,39,74,70,41,74,68, -42,76,69,43,79,73,48,74,70,46,70,68,45,67,66,47,62,64, -51,59,60,52,50,52,51,47,50,57,46,50,59,59,56,41,57,61, -38,51,59,38,46,54,39,50,56,42,57,54,43,55,58,45,48,58, -47,41,54,44,50,60,40,61,68,31,56,71,31,60,71,39,54,69, -38,48,68,33,52,65,37,49,66,30,65,76,43,77,90,87,96, -110,124,144,149,155,177,178,179,184,184,184,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -184,185,184,179,185,179,141,168,161,76,133,142,26,110, -112,52,93,83,56,85,78,63,82,62,69,82,54,71,76,57,49, -67,70,47,68,47,53,71,47,56,68,45,58,65,43,66,73,18,73, -82,17,77,85,19,83,89,24,83,88,29,80,86,38,81,83,43,72, -80,48,70,80,45,67,77,39,63,73,39,48,69,51,62,68,44,61, -71,37,56,73,32,59,71,35,52,65,44,47,63,43,47,62,44,46, -59,44,46,57,43,50,60,44,52,53,49,55,58,41,57,61,36,59, -61,39,58,59,49,65,65,39,61,62,50,56,60,43,57,65,41,60, -61,50,60,60,50,59,62,43,61,67,36,67,74,34,68,73,33,69, -69,39,67,67,45,70,70,44,71,68,43,69,66,38,69,66,38,64, -67,37,68,74,31,72,76,40,67,71,46,62,65,48,63,68,43,60, -65,35,60,64,31,62,66,33,60,64,35,56,61,40,51,60,40,54, -64,33,62,69,36,69,70,36,74,73,35,72,68,45,70,67,40,71, -66,40,69,64,38,67,62,33,59,63,31,58,64,31,59,65,36,57, -64,39,53,61,39,56,64,44,61,64,51,63,68,45,69,69,45,71, -68,45,68,68,46,61,64,45,58,62,43,58,61,37,60,64,33,63, -66,36,61,69,38,65,69,40,68,69,42,67,67,42,64,64,40,61, -62,43,54,62,48,52,60,49,42,53,49,38,50,54,39,51,57,55, -58,41,51,59,35,49,57,36,47,54,39,47,58,42,44,54,39,53, -57,43,56,58,49,49,52,45,56,57,39,66,65,30,64,68,31,57, -68,37,52,59,31,57,61,31,54,63,36,57,67,33,64,83,48,86, -99,96,117,127,137,161,163,168,181,182,182,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,184,185,183,174,184,175,137,168, -163,70,128,163,66,98,127,59,86,97,65,84,72,70,84,57,75, -82,60,59,81,48,52,74,51,54,71,51,57,69,44,62,70,40,63, -69,38,70,77,35,74,80,37,78,80,43,82,86,47,81,88,38,82, -84,45,74,80,53,70,79,51,67,76,48,66,74,56,52,75,46,63, -70,45,65,74,53,55,70,45,61,72,37,59,73,39,52,67,46,48, -62,51,48,59,51,46,56,48,47,54,49,52,54,47,52,54,44,54, -56,45,56,58,43,58,60,38,61,61,39,61,64,38,57,62,40,52, -59,40,61,63,39,62,63,46,60,64,40,59,66,33,62,68,31,66, -68,36,69,67,44,67,67,36,65,66,37,69,66,33,71,68,30,73, -69,33,66,68,37,66,69,38,68,71,41,68,72,43,64,69,41,59, -63,49,57,60,48,59,61,44,61,63,41,61,65,38,57,63,35,50, -59,40,49,57,42,55,59,44,62,62,45,68,64,44,68,63,46,68, -64,43,71,67,37,73,69,34,70,65,45,61,64,37,55,62,31,53, -60,33,51,57,39,48,54,46,50,56,52,57,59,51,57,61,54,63, -62,46,70,65,41,66,66,40,56,62,43,56,61,40,56,61,38,57, -61,37,62,65,35,56,64,42,58,63,43,61,63,44,61,62,40,61, -61,37,56,59,40,48,55,51,48,57,43,41,53,37,39,52,37,40, -52,42,54,57,39,50,57,41,48,54,38,48,56,37,47,59,37,45, -58,35,53,61,22,60,66,22,58,65,21,60,64,23,66,67,29,60, -64,37,49,59,44,52,58,34,63,65,30,60,68,44,63,71,36,73, -85,89,103,113,123,141,147,153,173,174,176,184,184,184, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,184,185,184,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,182,185, -183,172,183,178,132,160,172,67,127,152,51,106,115,54,94, -82,60,92,65,66,87,63,68,88,47,61,82,51,57,76,50,58,76, -46,59,73,43,63,74,43,65,77,37,70,82,41,70,79,45,77,85, -47,83,89,38,78,87,45,74,83,54,70,78,50,67,79,51,60,77, -59,63,77,43,57,72,45,63,71,48,63,69,41,62,73,36,64,74, -36,61,71,44,54,64,48,47,60,48,45,58,47,45,55,48,44,54, -46,48,55,43,49,55,43,50,56,42,56,59,39,57,59,41,58,61, -36,58,62,39,52,58,38,50,61,37,60,62,40,59,62,34,58,64, -31,60,66,32,61,64,37,63,62,42,65,65,37,61,65,36,59,66, -30,61,68,25,66,68,27,63,66,36,63,67,35,64,67,38,63,68, -40,61,67,39,57,61,47,52,58,41,54,58,37,58,60,35,60,62, -34,60,62,35,53,57,39,48,54,40,48,55,42,51,59,45,54,63, -44,58,59,38,55,59,37,59,63,33,66,66,33,65,61,41,61,63, -38,56,64,36,53,63,36,49,57,37,45,51,40,45,51,46,48,55, -47,45,56,50,49,58,45,55,63,40,58,63,38,47,60,42,49,62, -39,50,63,39,51,63,39,55,64,37,50,62,42,46,59,40,47,57, -38,50,58,36,51,58,34,51,56,39,45,49,46,42,53,38,39,52, -32,42,54,33,45,55,41,48,60,38,44,57,41,42,54,38,43,56, -35,44,57,31,48,58,31,56,59,14,63,64,13,61,66,16,58,68, -21,55,68,27,46,64,33,39,57,40,53,62,34,71,71,31,69,77, -54,85,97,67,104,116,125,139,145,151,168,170,171,179,181, -181,183,184,184,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,182,185,182,165,180,173,98,152,165, -75,129,140,58,103,110,55,92,83,67,88,57,68,87,59,68,87, -46,65,85,41,60,80,39,62,78,50,65,77,51,66,79,44,67,79, -42,69,79,45,75,82,46,82,88,41,80,89,41,82,88,40,76,81, -44,70,79,54,60,76,57,61,75,49,58,75,50,61,70,47,68,73, -49,61,72,44,59,73,41,61,73,40,60,72,43,50,64,43,45,59, -46,45,56,48,41,53,45,43,53,46,46,56,47,47,56,43,52,57, -38,54,57,38,55,59,34,58,62,37,55,62,39,44,60,38,58,60, -39,59,62,37,57,63,37,56,62,38,60,64,40,63,65,40,62,64, -42,59,64,36,55,65,32,55,67,30,60,66,32,58,65,40,57,66, -42,60,66,40,59,64,36,57,63,40,55,61,44,52,58,39,54,59, -36,60,62,36,61,63,36,59,62,37,54,61,37,49,60,36,46,57, -35,44,58,36,43,57,42,55,58,40,52,59,38,53,59,37,57,60, -38,61,62,41,59,62,41,53,61,36,50,60,35,49,59,36,49,57, -36,51,57,38,49,58,42,46,58,39,48,60,36,50,61,35,56,62, -35,51,62,39,51,63,38,50,62,41,48,61,41,49,61,42,49,60, -47,46,56,42,44,54,38,45,53,38,45,53,42,47,54,46,48,52, -40,39,50,30,38,53,30,42,56,32,47,57,40,43,59,48,39,53, -43,39,54,43,40,56,42,43,55,36,45,54,35,54,57,24,63,65, -25,64,70,30,58,69,35,52,68,42,42,63,44,38,56,40,58,68, -33,82,85,44,101,108,83,125,134,130,151,157,159,170,173, -174,179,180,181,182,182,183,184,184,184,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,184,186,184, -178,186,180,149,173,169,99,147,159,70,119,139,55,98,97, -65,95,68,70,86,63,66,85,53,69,86,46,71,84,44,69,81,52, -64,78,52,66,79,46,72,83,46,70,80,43,74,82,42,82,87,39, -85,91,35,85,90,40,75,82,50,68,80,60,67,80,52,64,76,50, -62,76,52,63,73,51,67,72,48,66,73,43,60,73,42,59,72,39, -62,74,40,61,72,40,56,66,38,53,63,39,46,58,38,41,54,39, -40,54,40,41,55,39,46,58,39,52,59,36,55,61,33,58,63,35, -56,62,34,52,61,31,51,57,39,53,60,41,51,61,40,51,61,40, -52,60,41,57,62,44,57,62,43,59,65,38,59,66,36,57,63,34, -57,61,38,52,61,41,51,61,42,53,62,37,59,63,35,57,60,40, -51,60,44,47,58,40,49,58,39,53,60,40,55,61,41,55,62,39, -50,61,39,48,61,37,48,61,37,46,60,36,45,55,41,45,50,48, -46,55,37,48,56,36,49,56,37,50,57,33,53,61,39,55,63,34, -54,63,32,49,58,29,49,57,28,53,59,32,52,60,34,51,61,32, -55,64,30,56,63,30,58,63,30,57,64,41,56,64,39,55,63,40, -52,61,38,49,60,34,46,57,40,44,53,37,44,52,37,43,52,40, -39,49,42,39,48,43,45,51,39,44,53,30,43,53,28,43,56,30, -48,56,37,36,52,56,37,50,45,39,52,47,37,51,46,42,53,41, -38,52,41,48,57,36,60,66,39,65,72,45,58,69,51,49,65,57, -38,59,51,43,59,44,75,83,50,112,116,81,145,147,128,161, -166,166,177,179,180,182,183,183,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,184,186,184,176,185,178,143, -170,171,94,144,158,56,111,123,45,96,84,75,93,63,62,88, -58,64,84,51,77,85,50,81,87,50,75,84,44,70,81,42,71,82, -44,75,84,45,74,81,40,77,85,38,79,90,37,75,88,44,70,84, -54,67,81,55,72,83,46,68,79,48,63,77,49,62,75,46,65,76, -42,68,76,38,61,75,40,56,71,37,57,70,34,62,71,35,62,70, -32,60,68,33,51,64,34,46,61,35,44,59,37,42,56,39,42,54, -42,48,57,40,51,59,37,53,61,33,54,63,30,59,62,28,54,60, -35,47,59,34,48,59,35,49,57,36,49,55,39,48,56,43,50,59, -44,50,59,42,57,63,42,59,61,38,55,58,39,54,56,37,52,56, -37,54,58,36,58,60,36,60,58,38,52,57,38,47,56,34,46,56, -34,46,55,36,49,58,40,51,59,39,48,57,37,49,55,36,48,55, -36,48,57,38,49,55,42,42,51,46,40,53,38,43,53,37,43,53, -35,49,54,32,49,56,39,50,58,36,53,63,36,52,62,34,52,61, -33,53,60,33,53,61,33,53,65,36,53,65,34,54,64,33,60,64, -32,56,61,39,53,61,38,52,60,39,50,58,38,49,58,33,42,56, -37,42,54,34,43,54,35,42,53,37,40,51,41,37,48,41,33,47, -37,41,50,32,46,53,32,47,57,34,51,56,33,32,50,51,38,48, -39,43,50,39,44,50,38,46,52,35,40,56,39,46,58,35,56,63, -37,62,70,43,56,70,49,44,64,52,40,59,46,56,68,50,103, -109,80,145,145,126,170,171,164,179,181,181,184,184,184, -184,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,181,185,182,173,185,176,138,169,167, -81,130,156,50,102,119,71,93,86,67,94,71,65,85,64,72,83, -62,82,90,48,84,92,43,80,91,42,73,86,44,74,84,50,76,84, -48,78,87,38,78,88,43,74,87,51,73,87,49,70,86,42,71,83, -51,68,80,51,65,82,46,63,79,45,61,76,46,63,75,49,62,77, -45,57,71,43,57,70,39,64,73,36,67,74,36,65,73,43,60,72, -40,54,69,37,52,67,40,48,62,39,46,59,38,46,56,48,48,57, -47,51,60,40,52,61,32,59,63,33,62,68,35,57,68,33,54,64, -33,57,63,36,55,60,37,51,59,38,46,57,35,45,56,39,50,57, -44,54,59,46,55,58,57,61,62,37,58,61,37,58,61,35,60,61, -34,63,60,37,61,65,31,56,64,26,53,62,27,52,60,31,50,57, -35,49,57,38,50,58,35,53,58,41,52,57,41,48,56,39,47,56, -37,45,57,32,40,55,30,40,53,30,41,52,35,45,50,45,49,53, -50,45,52,46,43,52,43,43,54,43,46,55,42,49,56,42,49,57, -41,45,58,37,45,59,34,47,60,33,55,62,37,55,62,40,50,60, -43,48,57,44,47,55,45,45,52,43,38,52,46,39,50,36,42,53, -36,42,53,40,43,54,47,42,54,49,36,51,42,38,47,45,42,48, -49,44,51,43,51,54,32,34,52,32,40,52,36,46,55,36,49,55, -29,49,56,31,46,60,29,48,58,31,57,63,34,63,72,38,56,71, -45,44,64,50,45,65,44,76,88,61,131,134,102,164,164,149, -180,180,178,184,184,184,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,184,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -184,185,184,182,185,184,168,181,181,128,157,173,69,136, -141,60,112,101,63,104,80,63,95,73,57,87,62,63,95,46,80, -95,45,85,95,44,80,92,49,65,82,46,69,86,47,82,90,39,84, -87,42,70,84,48,71,86,48,68,85,42,65,80,49,76,80,53,75, -81,47,74,80,47,67,76,47,60,75,48,64,75,45,61,73,45,56, -69,38,60,71,35,65,74,37,70,72,45,72,72,44,66,73,42,61, -72,44,54,69,43,53,67,42,50,60,51,46,56,46,48,57,37,54, -60,32,57,62,32,56,63,31,58,65,33,60,66,37,58,64,38,56, -62,39,54,62,40,50,63,38,46,58,39,42,53,37,40,52,38,39, -49,48,46,58,32,53,59,34,55,59,32,52,61,30,50,59,32,58, -62,28,62,66,30,65,69,35,61,68,38,55,64,39,52,59,40,50, -60,37,48,57,40,47,58,42,46,61,42,49,61,40,49,59,33,47, -60,32,48,58,33,45,54,37,41,48,44,39,49,47,40,50,44,43, -52,44,45,52,43,43,51,39,45,52,39,49,51,38,52,53,37,54, -56,35,54,58,33,54,58,35,48,60,38,47,59,42,45,57,42,42, -56,42,40,51,43,38,49,45,42,48,36,46,49,35,43,48,38,42, -52,46,38,54,49,35,54,44,33,49,46,35,47,47,38,48,40,45, -53,31,46,53,35,40,52,38,40,51,34,44,54,29,45,55,31,55, -57,29,56,56,32,58,58,31,66,69,37,61,67,44,50,60,50,63, -69,53,103,100,79,149,148,123,173,174,163,182,182,181,184, -184,184,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,184,184,184,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,182,185,182,168,183,175,131,169,153,100,134,155, -83,106,139,71,96,105,61,90,69,59,85,70,75,86,63,84,91, -60,84,96,58,71,89,46,67,84,44,78,83,53,86,88,48,74,90, -42,69,86,43,69,84,49,65,82,44,74,77,53,75,81,45,76,83, -42,72,83,41,62,79,41,66,78,42,63,74,50,59,68,52,57,65, -48,64,71,47,70,74,42,74,77,34,71,80,35,67,81,33,60,78, -31,57,72,44,55,68,42,53,68,29,53,64,27,55,62,32,57,60, -40,57,61,43,56,62,36,58,64,34,62,68,40,60,68,39,57,67, -35,52,64,38,52,65,38,47,60,33,44,58,33,42,55,36,42,53, -33,49,54,30,53,57,31,50,60,27,50,60,26,58,60,40,61,62, -46,62,64,49,61,64,49,57,63,49,55,61,51,52,60,44,52,62, -38,47,60,33,43,59,31,46,59,33,48,61,17,48,62,24,50,62, -27,52,64,28,50,61,34,45,59,33,43,56,33,45,56,37,48,56, -41,49,57,42,51,59,43,55,58,46,58,59,50,60,60,53,59,61, -53,57,60,51,48,58,49,47,57,47,45,59,41,42,57,36,41,54, -36,38,49,45,44,51,36,49,55,27,46,54,22,45,57,33,38,54, -47,32,49,52,31,46,51,34,47,39,38,50,31,44,50,38,43,48, -43,37,48,40,39,51,31,45,55,30,46,54,42,56,58,31,58,60, -29,60,63,27,65,68,31,60,68,36,56,69,45,79,86,57,123, -124,75,160,160,129,177,177,170,183,183,182,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,183,185,184,175,182,180,145,166,175,102,143, -155,71,121,117,60,104,79,50,88,69,59,86,55,69,88,50,78, -91,50,83,92,52,77,86,50,70,83,51,74,89,43,81,91,46,77, -86,48,70,83,51,72,81,47,60,80,49,65,80,42,70,81,40,70, -81,39,66,77,42,64,79,41,63,77,51,60,72,54,57,71,51,56, -74,46,60,76,40,67,78,34,71,81,37,72,85,40,65,82,38,57, -74,46,53,72,43,60,73,36,62,71,36,58,67,37,49,65,41,48, -64,41,50,64,37,53,66,35,52,64,34,56,67,37,60,69,39,64, -66,44,57,66,42,54,64,40,51,63,40,47,59,42,48,57,40,48, -58,34,52,61,35,52,63,32,54,63,31,55,59,38,52,56,38,51, -57,39,52,58,40,51,59,42,49,58,44,50,56,40,51,58,36,54, -62,37,54,60,37,53,60,38,54,68,27,53,67,31,54,66,32,54, -66,33,53,64,38,53,62,40,51,61,41,50,59,42,48,55,41,47, -55,39,46,57,40,46,57,41,46,56,42,46,56,44,45,57,44,47, -57,43,48,54,45,44,53,42,45,52,36,46,52,33,45,52,35,42, -47,45,44,49,33,51,52,26,56,54,26,51,53,34,40,49,46,35, -42,49,31,39,47,34,45,38,34,50,30,34,49,33,34,47,38,35, -45,37,42,50,32,48,57,32,44,56,42,55,65,35,54,66,31,54, -68,29,60,72,31,65,75,43,80,83,62,113,104,83,142,142, -102,163,165,137,177,179,172,184,185,184,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,184,185,184,182,185,183,176,184,178,153,175,166, -117,148,152,85,114,135,60,94,99,60,82,85,68,82,74,76, -85,67,80,87,61,80,90,50,71,89,33,70,82,52,79,87,46,81, -91,42,73,89,37,75,85,44,62,81,54,64,79,44,70,79,47,71, -81,50,68,79,42,64,79,47,64,80,46,66,81,47,62,78,47,58, -74,45,58,73,43,66,74,46,72,81,37,70,82,41,66,81,46,61, -79,45,56,74,47,59,69,47,64,72,42,64,75,35,53,71,34,50, -66,40,50,62,43,52,61,47,53,61,50,52,58,49,54,60,48,59, -61,47,54,61,44,53,62,41,51,63,38,48,61,38,48,56,49,48, -57,40,52,59,42,51,59,41,53,59,36,54,60,37,53,61,31,52, -60,29,51,59,31,48,57,33,46,55,35,47,54,34,48,55,32,51, -57,35,52,58,35,53,59,36,50,59,36,48,60,31,49,59,32,48, -57,34,45,55,35,45,51,38,44,52,44,44,51,47,45,50,47,44, -50,43,42,51,39,42,51,40,41,50,43,41,49,46,40,50,46,42, -50,47,45,49,49,42,48,49,41,45,49,42,44,48,43,47,40,43, -51,33,46,52,33,52,52,32,58,55,32,51,54,33,37,48,39,33, -42,43,31,42,31,34,46,36,32,45,40,33,44,45,34,47,35,36, -46,34,44,51,33,47,56,32,43,55,41,56,67,33,55,66,35,56, -66,38,64,74,42,78,87,48,103,110,63,138,136,92,155,154, -123,164,166,146,180,181,174,184,184,184,184,184,184,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,184,185,184,178,184,183, -160,172,177,115,148,157,74,123,120,51,96,89,46,88,69,52, -90,61,59,87,54,73,91,50,81,91,40,68,81,51,65,85,40,77, -92,41,80,89,40,75,87,45,63,81,54,62,77,41,67,79,44,69, -78,46,70,79,42,68,78,48,67,78,45,70,79,46,70,75,48,68, -72,48,60,71,45,53,73,40,66,78,32,72,79,40,69,77,45,66, -77,45,62,73,49,58,69,47,57,70,39,62,74,36,65,70,42,60, -66,45,56,63,47,50,60,47,45,57,45,46,59,46,47,58,45,47, -59,39,50,58,41,51,58,39,52,60,37,52,58,38,49,53,46,47, -56,38,49,59,41,50,57,39,56,56,35,50,58,31,52,61,29,58, -64,33,61,64,38,58,59,40,54,57,40,50,57,37,45,60,36,46, -61,37,48,62,37,52,61,39,51,60,39,48,62,34,49,61,35,50, -58,37,49,56,40,47,55,44,44,53,46,41,50,46,40,49,45,39, -50,42,40,53,39,40,52,40,37,49,41,35,49,44,37,50,45,41, -50,47,42,48,47,38,46,47,35,44,46,32,43,43,35,45,37,39, -47,29,43,52,33,42,55,31,41,60,29,36,55,27,36,49,38,32, -42,41,29,44,30,35,47,37,33,44,40,33,42,43,37,45,35,40, -46,34,43,49,31,47,52,30,47,52,41,63,62,34,61,63,36,61, -62,38,77,75,49,106,102,74,134,132,98,152,154,121,158, -163,136,168,170,150,178,178,173,183,183,183,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,184,185, -184,179,184,181,156,175,164,119,150,155,83,119,125,61,98, -101,51,83,86,58,81,79,70,81,74,83,86,68,75,90,46,66, -84,52,73,85,55,82,90,52,78,93,39,65,84,48,64,78,51,67, -78,48,70,80,43,71,81,42,70,81,46,66,76,49,66,73,51,72, -75,53,72,75,49,64,74,46,52,68,48,62,68,47,69,71,55,69, -74,55,65,77,41,62,73,46,59,72,35,57,69,39,58,66,42,63, -67,39,64,73,35,59,68,37,55,66,40,48,63,38,43,57,38,44, -54,47,43,52,47,47,53,46,49,53,43,51,57,39,54,61,32,51, -61,29,47,58,31,47,57,36,49,55,36,56,57,32,52,59,31,51, -58,33,55,59,38,60,61,43,63,64,41,62,67,31,57,70,11,49, -68,24,45,62,32,46,60,36,51,59,41,51,58,45,47,60,39,48, -58,38,49,57,38,50,57,41,48,57,37,45,56,38,43,54,37,42, -53,37,40,52,40,40,51,44,40,51,42,37,50,38,34,46,41,33, -44,50,37,43,54,37,42,47,33,41,43,33,42,41,32,42,37,32, -42,33,36,44,32,40,49,30,42,53,37,37,51,43,32,46,40,34, -46,37,33,45,35,30,44,30,35,47,35,33,46,38,33,44,43,36, -45,30,41,47,34,43,49,34,47,51,33,48,54,34,60,60,25,59, -63,26,63,69,16,92,97,36,130,132,79,154,154,120,164,166, -145,166,168,151,170,173,159,179,180,174,184,184,183,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,184,185,184,178,183,181,159,172,176,120,152, -152,83,128,127,59,102,102,48,87,79,51,86,70,63,86,63, -82,89,47,80,82,57,76,81,55,78,87,49,86,92,42,85,83,56, -69,80,54,65,79,47,71,81,44,76,81,46,72,81,47,68,79,53, -62,74,53,64,76,52,70,79,52,71,76,52,58,70,53,46,70,43, -48,71,47,54,70,48,65,74,38,70,66,46,65,70,36,64,69,42, -60,63,42,59,64,38,58,71,31,63,70,39,61,66,42,54,64,40, -48,61,42,43,55,49,41,52,47,38,53,45,40,54,41,41,55,35, -45,59,28,51,61,27,57,58,35,51,56,38,43,57,36,45,59,29, -51,59,30,52,59,33,51,59,36,47,58,35,49,62,34,57,67,27, -70,69,17,66,62,29,60,58,37,54,56,39,50,55,41,44,55,40, -39,58,33,44,61,37,48,61,40,50,60,42,49,61,39,46,60,40, -45,58,40,46,57,41,46,54,43,45,50,46,41,50,42,41,50,40, -37,48,45,30,45,50,22,46,51,25,43,43,26,42,40,30,42,40, -33,43,38,36,44,36,39,47,35,38,51,30,38,54,36,31,47,38, -30,44,39,33,45,37,33,45,37,36,48,36,35,47,36,31,46,38, -30,44,42,33,50,32,37,48,33,42,49,34,49,51,34,50,55,36, -59,57,22,66,61,27,81,74,28,121,116,65,153,152,115,168, -170,151,176,177,167,177,178,171,179,180,174,180,180,179, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,183,185,183,178, -185,179,161,177,169,131,157,152,93,126,129,64,100,98,56, -86,81,60,77,78,78,79,62,84,87,49,78,84,45,76,83,49,83, -86,48,91,93,39,76,93,34,67,81,44,69,75,56,77,79,54,72, -78,52,69,80,50,67,82,48,65,79,45,68,76,49,77,79,57,66, -83,33,50,76,39,46,68,48,49,63,52,60,64,48,72,70,36,66, -70,34,64,69,37,65,68,39,63,68,34,58,70,34,61,69,35,66, -72,38,57,69,33,50,66,35,48,61,44,46,58,46,39,55,42,41, -55,43,42,54,43,43,52,50,50,55,41,57,57,35,55,61,34,45, -59,33,46,57,40,52,56,47,54,58,46,53,60,46,49,58,45,46, -56,42,51,55,41,68,55,52,66,56,47,64,60,43,60,62,37,57, -64,32,48,62,36,41,59,36,40,57,37,42,55,38,48,56,46,49, -56,51,45,55,53,43,53,52,45,53,51,47,53,47,48,54,42,44, -54,36,44,54,36,41,54,37,35,53,38,24,49,42,25,41,52,25, -39,52,32,43,49,38,47,41,42,50,39,45,53,39,43,55,43,39, -53,46,33,48,45,31,45,44,35,46,46,35,46,48,37,46,45,37, -49,42,33,48,41,33,46,52,33,47,48,35,44,42,42,50,28,50, -56,23,52,56,40,61,60,15,73,73,10,107,105,42,147,147, -106,171,171,152,180,181,176,184,184,182,184,184,183,184, -184,184,184,185,184,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,184,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,184,185,184,179,180,180,150, -164,164,93,129,126,58,105,94,43,91,79,52,89,56,68,92, -46,72,88,47,71,82,48,70,88,44,90,90,38,90,93,38,88,90, -58,72,76,61,64,79,50,67,81,54,66,80,49,67,81,47,69,82, -49,67,77,50,66,76,53,71,85,35,65,76,45,55,66,50,47,63, -52,47,66,44,58,70,30,65,71,33,65,69,38,65,65,37,65,66, -34,60,68,33,61,69,34,63,70,35,63,73,37,57,67,39,54,63, -49,49,62,51,44,60,49,43,56,46,38,54,42,32,53,46,44,52, -37,46,56,30,52,61,33,56,61,38,52,56,42,51,55,47,51,56, -44,54,58,45,55,58,47,53,58,46,52,58,45,48,55,47,48,56, -43,48,60,38,48,61,31,50,64,29,59,59,37,50,58,39,50,56, -41,52,54,42,51,52,45,48,53,50,43,53,52,40,52,52,40,52, -50,41,52,46,42,53,41,42,54,34,41,54,34,40,53,36,42,54, -42,41,51,51,35,42,59,30,42,57,28,42,49,35,46,40,43,50, -40,48,50,39,49,51,44,47,52,49,43,51,51,39,50,51,40,51, -52,39,46,53,39,47,48,41,50,46,39,49,45,32,45,52,32,43, -46,35,44,43,43,51,29,53,60,27,50,57,41,72,58,20,99,91, -33,139,139,96,170,171,152,181,183,178,185,185,184,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,184,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,184,185,184,163,174,167,95,133,114, -55,101,95,52,79,91,62,77,92,74,84,78,74,84,56,66,81, -57,87,84,55,88,89,45,86,89,49,78,86,52,65,81,45,66,79, -55,66,80,54,66,80,50,69,81,49,69,81,42,70,83,37,69,81, -43,67,78,46,60,72,49,48,65,48,43,58,57,52,59,44,59,63, -41,63,66,41,65,66,38,65,66,32,61,68,43,61,67,44,64,69, -43,61,70,40,58,69,41,56,66,45,48,64,35,44,63,34,46,61, -40,41,58,42,31,53,36,40,45,52,42,50,42,47,54,37,52,57, -34,55,61,34,51,56,42,50,54,43,53,55,43,54,58,44,53,58, -43,52,59,42,50,59,41,49,56,47,50,61,43,48,61,32,46,58, -34,57,55,45,50,57,46,48,54,45,52,54,46,55,56,47,51,59, -38,46,60,38,44,58,40,44,58,43,44,56,48,45,53,54,44,52, -52,44,56,42,44,57,39,44,57,37,44,58,33,41,56,29,34,50, -39,32,47,42,32,44,36,36,43,31,48,51,36,49,53,38,47,55, -38,44,56,35,42,57,34,42,56,35,43,55,30,41,52,38,41,52, -38,39,51,34,32,48,38,34,47,37,36,49,27,46,53,34,53,57, -40,50,59,30,92,83,15,134,129,76,166,166,147,181,182,177, -184,184,184,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,184,184,184,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,153,170,160,100,128,123,61,96,105,42,82, -91,50,83,73,65,87,58,74,81,59,70,85,53,79,88,43,90,89, -48,84,85,50,66,86,48,70,78,53,72,76,50,70,79,49,66,80, -46,66,81,43,73,84,40,79,80,44,73,79,47,62,76,49,53,71, -51,48,60,56,39,60,42,46,62,38,54,63,38,58,64,34,65,65, -32,57,64,41,55,67,43,57,68,41,58,66,37,56,63,36,54,62, -40,55,63,34,51,61,33,47,59,38,41,58,42,40,56,42,37,45, -49,36,48,39,38,53,36,43,58,33,51,58,33,51,56,43,46,55, -42,46,54,40,50,55,40,54,56,39,55,56,39,52,56,37,48,52, -41,50,56,38,50,60,32,48,59,36,46,56,42,42,57,44,42,55, -44,42,53,43,45,55,43,43,58,38,44,60,40,44,58,41,43,56, -43,40,51,45,38,47,49,36,46,47,38,50,38,38,51,36,39,52, -34,43,56,32,50,57,31,42,52,42,34,47,42,31,46,36,34,49, -32,39,51,33,41,52,35,42,54,35,43,56,34,41,55,32,41,55, -34,42,57,32,40,54,38,37,50,36,37,51,35,36,49,38,38,47, -36,44,53,29,51,57,36,54,55,36,70,63,34,112,112,40,158, -158,127,180,180,173,184,185,184,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,184,184,184, -184,184,184,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,179,183, -179,145,163,147,95,129,104,55,103,78,46,87,75,54,81,75, -72,82,64,69,85,51,70,79,57,84,83,49,91,92,41,66,87,36, -70,80,53,75,82,47,75,85,38,69,83,32,63,80,33,68,79,42, -82,83,44,76,84,37,65,80,37,57,76,41,58,71,49,45,65,41, -45,62,43,49,59,46,53,59,44,64,63,40,59,65,44,52,62,39, -52,61,40,56,61,44,56,61,41,52,61,34,53,59,43,54,61,41, -50,61,38,45,60,35,41,58,33,43,54,42,40,55,37,36,53,33, -34,51,31,42,50,41,44,50,46,41,51,43,40,49,40,44,50,39, -51,54,40,56,58,38,55,58,38,53,56,38,52,57,35,48,57,33, -46,58,32,45,57,38,40,55,38,40,53,40,40,52,39,40,53,33, -36,50,40,37,52,40,40,54,39,39,51,37,38,49,38,37,48,40, -35,47,30,35,47,30,38,49,34,38,48,36,38,49,46,46,53,38, -46,55,32,41,53,31,37,51,34,35,51,38,38,49,41,39,50,39, -41,52,39,40,52,38,40,53,38,40,54,36,40,55,34,41,56,33, -37,51,32,37,51,36,39,52,41,45,55,31,50,61,31,56,65,18, -70,75,15,105,102,38,147,149,100,175,177,167,184,184,183, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,184,184,184,184,184,184,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,178,181,178,142, -162,146,97,132,104,66,103,84,54,88,78,57,84,68,68,88, -55,68,82,57,68,79,46,80,89,45,86,92,40,71,81,55,64,79, -49,70,84,41,73,84,32,73,81,31,68,76,37,67,76,41,70,82, -38,71,82,41,67,78,43,62,70,46,56,69,42,52,65,44,50,62, -46,48,60,42,50,60,38,61,65,33,60,65,34,57,64,39,52,60, -41,53,62,40,52,64,36,43,59,49,48,60,45,51,62,42,52,62, -35,54,61,31,51,58,39,49,58,34,47,59,32,46,56,31,49,51, -31,42,50,37,37,49,36,34,50,35,32,49,35,34,50,34,38,51, -32,40,51,31,41,54,36,42,56,38,41,56,37,44,57,36,43,54, -40,42,54,39,40,52,41,38,51,40,41,52,36,41,50,41,40,49, -39,41,49,36,43,50,34,39,46,34,38,46,35,40,53,28,43,53, -35,47,52,37,43,48,35,34,43,40,33,48,33,41,53,27,43,55, -32,40,53,36,37,50,36,37,48,42,35,48,41,37,50,39,40,52, -36,42,55,35,43,57,34,44,57,35,43,56,33,42,55,35,40,55, -41,37,55,51,53,59,27,58,65,31,75,77,23,113,115,52,149, -149,104,174,175,159,184,184,182,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,184,184,184,184,184,184,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,178,182,178,152, -161,152,111,135,111,80,108,81,67,95,70,63,88,62,69,85, -57,72,86,59,70,83,52,85,89,50,80,89,61,65,82,57,59,75, -49,70,82,50,76,84,49,73,81,48,67,75,45,61,74,45,66,76, -48,68,75,48,68,74,49,60,70,44,55,67,45,54,66,43,51,64, -38,47,60,38,56,62,34,63,68,34,61,68,34,57,67,36,53,65, -36,52,64,38,43,59,43,43,56,40,44,57,38,48,60,39,56,61, -39,54,60,40,52,61,32,50,61,31,49,59,33,57,60,39,53,59, -37,47,57,29,43,56,28,38,54,30,36,53,33,37,52,34,36,52, -33,33,51,35,32,51,38,30,50,39,34,49,40,38,48,42,35,48, -40,34,47,41,31,46,37,35,46,32,39,49,38,39,48,39,39,48, -38,42,50,40,42,50,40,41,51,41,38,52,39,35,50,43,40,51, -41,41,50,36,37,49,35,32,48,32,38,51,35,39,53,40,34,52, -40,35,52,37,42,52,37,36,49,38,33,47,35,38,52,35,42,56, -35,44,58,35,46,57,36,45,57,37,45,58,38,42,57,40,40,56, -43,65,70,29,79,80,28,116,116,60,154,154,114,174,174,159, -183,183,181,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,184,184,184,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,184,184,184,181,183,181, -169,173,166,128,148,117,91,116,70,74,100,57,69,91,58,70, -87,57,72,86,54,77,87,56,75,87,60,71,87,55,67,83,53,63, -77,53,64,77,56,66,79,53,71,81,48,65,77,51,65,75,48,66, -74,45,65,72,46,64,74,47,57,70,44,54,67,41,54,66,39,52, -62,39,50,60,45,54,62,42,62,69,43,60,69,41,55,66,39,52, -65,40,48,61,43,46,58,34,43,56,35,42,56,40,46,57,43,47, -56,43,46,59,36,46,61,32,45,59,31,45,55,44,50,59,39,55, -64,35,56,66,35,51,63,32,48,60,29,48,58,28,44,55,35,39, -53,36,36,51,38,32,50,40,32,48,42,33,46,46,30,45,44,29, -43,42,29,44,37,34,48,32,36,47,35,36,46,30,37,47,28,38, -50,31,39,51,38,39,50,43,32,47,40,28,45,43,32,48,42,38, -51,38,39,52,37,38,50,45,38,50,42,37,50,41,32,51,39,30, -49,42,41,52,34,43,56,37,39,54,36,39,52,34,43,56,32,44, -56,26,46,56,32,47,58,36,49,61,37,48,62,29,56,69,25,81, -87,42,114,114,57,153,154,119,174,175,161,182,182,180,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,182, -183,182,168,174,166,130,149,117,93,122,81,77,102,63,74, -96,59,71,91,53,73,89,53,76,88,55,74,88,51,73,89,53,67, -81,52,63,77,51,62,76,49,60,82,47,63,80,51,63,79,47,64, -76,42,66,73,41,58,71,42,59,68,43,58,67,41,55,64,37,57, -64,40,54,60,42,48,58,37,49,61,37,55,67,42,56,66,40,57, -65,39,50,60,42,48,63,37,46,60,37,43,55,38,38,55,40,39, -55,40,41,55,34,42,57,30,45,58,31,48,54,39,45,55,34,43, -57,32,46,61,34,49,64,35,51,64,33,53,64,33,51,59,38,48, -55,35,44,52,35,41,50,37,38,50,42,36,47,47,33,46,42,35, -45,43,34,45,39,30,46,35,32,47,38,36,48,32,42,51,31,44, -52,32,39,49,35,35,47,40,36,46,38,33,44,38,35,45,38,36, -48,36,40,51,35,38,49,46,38,49,43,39,49,41,37,50,38,33, -49,40,39,51,35,44,55,37,44,55,37,41,54,33,45,58,32,46, -59,28,47,56,31,47,60,36,49,62,35,62,69,32,92,91,48, -122,118,84,152,154,122,174,174,163,182,183,179,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,184,184,184,180,182,179,166,172,163,140,155,134,100, -121,90,90,112,71,83,105,55,79,99,40,81,95,44,79,93,52, -74,90,53,71,87,50,69,85,47,68,84,48,56,78,57,59,76,57, -59,74,51,62,74,50,69,75,52,62,76,43,59,69,36,58,66,43, -57,63,48,58,65,48,60,65,48,55,65,44,51,63,44,50,61,47, -55,63,52,61,67,48,59,70,36,52,70,26,51,67,26,49,63,29, -42,59,34,40,57,32,42,58,33,43,57,32,44,56,32,50,54,37, -50,59,38,45,58,36,41,55,35,39,53,37,40,52,41,44,52,48, -47,54,46,51,58,39,52,60,38,49,59,34,44,58,28,43,57,27, -41,55,32,43,54,38,41,53,39,35,50,40,28,45,39,29,42,41, -35,43,43,39,46,45,36,45,45,33,44,45,35,45,35,38,49,31, -39,50,33,39,52,35,42,52,42,39,50,42,38,49,41,39,50,42, -38,52,39,35,53,30,39,52,32,42,55,35,45,58,37,44,58,37, -44,58,43,45,55,46,52,61,37,50,67,25,57,77,10,90,104, -37,131,134,78,157,157,126,175,176,163,182,182,180,185, -185,184,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,183,184,183,182,182,182,181,182,180, -174,177,173,149,159,144,121,136,109,115,124,87,116,110, -66,109,103,64,95,97,61,84,92,58,78,89,55,71,87,50,67, -88,50,61,80,60,59,76,57,57,74,50,55,74,47,57,73,47,61, -75,42,61,76,41,58,69,46,51,62,46,53,66,47,53,66,46,54, -66,44,57,65,47,53,60,48,49,58,47,48,64,42,52,71,34,57, -71,30,57,68,29,55,66,33,53,63,39,47,60,37,44,58,34,43, -57,32,42,56,31,48,55,37,46,58,36,46,59,37,45,60,39,42, -58,41,36,53,41,35,51,44,36,52,41,38,56,34,44,59,35,48, -59,35,54,60,32,52,58,31,45,54,33,43,55,39,43,57,42,39, -55,44,37,49,45,31,45,44,26,41,39,25,41,37,27,42,40,29, -40,41,31,43,32,35,44,27,41,48,32,42,48,34,43,48,41,40, -53,44,39,52,43,38,51,42,39,51,39,49,53,34,50,55,38,49, -60,41,50,60,40,53,60,42,54,57,47,58,57,53,71,69,49,87, -83,52,110,105,54,135,138,83,157,162,126,172,176,161,181, -182,178,184,184,184,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,184,184,184, -184,184,183,184,184,184,183,183,181,178,180,178,167,172, -166,162,165,153,156,156,116,144,147,89,120,129,63,100, -114,46,84,101,41,77,96,45,71,93,46,65,87,48,63,85,42, -58,79,39,54,75,39,55,72,40,57,68,52,56,67,48,58,70,41, -57,72,34,51,68,29,51,64,40,53,65,44,56,66,45,58,68,43, -54,67,38,46,63,35,45,60,41,52,62,39,58,66,40,57,66,40, -55,63,44,51,64,34,50,63,39,47,61,39,47,60,38,51,59,39, -48,59,43,45,58,40,44,58,37,41,58,34,39,56,36,36,53,39, -33,51,32,34,49,35,36,47,43,40,46,49,49,48,52,51,51,53, -49,57,44,47,59,41,43,58,38,39,56,28,39,54,39,36,53,37, -31,49,34,25,44,33,26,42,36,28,40,38,31,41,36,37,44,40, -43,49,40,44,52,31,45,55,23,41,56,34,42,57,34,42,58,31, -43,60,19,55,66,9,59,72,10,60,76,21,63,78,25,68,82,26, -76,88,29,86,98,41,104,112,46,126,129,70,144,144,101,161, -161,135,173,174,163,181,182,177,183,184,182,185,185,184, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,184,184,184,184,184, -184,184,184,184,184,184,184,182,182,182,181,183,181,182, -181,176,177,177,166,164,164,140,142,140,98,113,108,64,96, -95,54,86,92,55,73,92,56,72,90,52,69,88,52,62,81,49,61, -75,47,55,68,53,47,69,46,48,70,37,54,75,34,61,74,38,53, -68,43,48,67,44,48,67,42,51,68,40,52,67,37,54,65,40,48, -60,43,47,60,37,47,62,33,49,64,34,48,65,39,58,67,40,56, -67,45,53,64,44,48,61,40,48,60,40,48,61,45,48,60,44,48, -59,41,49,58,39,46,55,40,42,52,43,44,51,38,39,48,39,32, -45,41,27,43,42,25,45,40,26,46,40,31,52,34,39,55,35,44, -55,36,49,58,35,51,51,42,45,52,40,40,53,41,35,50,42,31, -46,42,31,43,43,33,44,40,32,47,41,38,51,39,43,53,32,52, -56,28,50,57,39,49,56,36,49,58,34,54,62,27,68,73,23,85, -86,36,91,91,49,98,97,57,108,107,66,119,119,79,132,133, -99,147,149,113,156,160,128,167,170,150,175,177,167,181, -182,178,183,185,183,184,184,184,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,184,184,184,184,184,184,185,185, -184,184,184,184,185,185,184,184,184,184,185,185,184,185, -185,184,183,183,180,175,175,159,149,151,97,121,128,47, -102,117,36,87,112,38,78,103,28,74,97,29,71,92,44,73,86, -60,66,83,58,56,80,51,52,75,45,54,72,43,61,72,47,60,77, -42,54,76,39,52,73,37,53,71,39,54,68,38,57,69,39,53,66, -37,48,62,37,48,61,38,47,62,38,46,62,39,57,65,36,56,68, -39,55,67,38,53,66,39,52,65,44,51,65,45,51,64,43,52,63, -43,54,61,46,53,62,48,48,60,46,51,58,46,48,60,38,41,57, -34,34,55,33,30,53,31,27,49,34,28,46,39,34,48,37,41,51, -34,45,52,36,53,56,32,49,58,33,40,54,37,33,49,41,30,45, -41,32,46,35,36,52,22,37,56,25,41,58,21,47,62,16,59,67, -18,58,67,39,59,64,49,63,70,55,70,76,55,82,86,51,103, -105,49,111,116,54,123,128,65,140,144,91,153,159,119,166, -168,142,174,176,159,177,179,167,180,181,175,183,184,181, -185,185,184,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,184,185,184,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,184,184,182,178,178,165,165,163, -133,159,156,129,158,152,125,150,138,103,119,109,66,85,95, -58,65,94,65,56,97,63,55,96,62,59,92,61,58,83,55,50,79, -49,53,80,42,54,79,42,55,76,42,54,71,41,54,69,41,53,69, -40,48,70,38,46,66,39,46,63,39,46,61,38,47,61,38,51,65, -34,55,63,38,54,62,35,51,60,34,46,63,38,50,64,43,53,63, -42,54,62,43,49,59,41,46,59,42,45,61,42,45,60,42,51,62, -39,52,59,39,51,57,41,49,58,41,48,53,47,45,48,50,40,47, -41,39,51,35,41,53,37,43,58,30,47,59,35,46,56,42,37,49, -43,30,47,43,31,49,37,50,52,29,47,62,34,47,63,28,55,67, -24,66,73,25,66,79,50,59,80,59,63,84,65,75,89,67,96, -100,69,123,120,77,137,138,93,151,154,114,167,167,143,175, -177,163,181,182,173,183,183,180,184,184,182,185,185,183, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,184,185,184,184,185,184,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,184,184, -182,181,181,176,181,181,175,180,180,174,181,180,166,172, -173,128,137,158,64,100,143,39,80,133,39,66,116,40,67, -103,49,72,98,57,63,94,51,60,85,56,57,78,64,57,73,67, -59,71,64,60,72,60,57,70,55,47,66,47,47,63,48,50,64,50, -49,62,44,48,64,33,51,63,36,58,65,40,60,67,41,56,68,37, -47,67,29,45,61,30,47,56,36,50,57,43,48,56,44,43,55,42, -38,53,40,37,52,37,44,53,42,48,52,45,50,53,50,47,53,50, -49,55,43,50,58,36,50,61,38,45,60,39,44,58,39,47,62,38, -50,63,38,53,66,38,48,66,31,38,62,28,38,60,29,62,67,28, -55,71,40,51,68,27,63,77,19,80,90,20,86,104,43,78,100, -61,79,100,73,90,103,77,113,120,75,146,145,104,160,161, -131,171,171,157,179,179,172,183,184,180,185,185,184,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,184,184,184,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,184,185,185, -184,185,185,185,185,185,183,184,184,179,182,180,167,174, -178,152,164,169,135,139,150,109,111,125,88,98,112,83,87, -104,74,71,96,74,62,90,80,50,83,76,39,82,68,36,84,61, -40,82,57,44,76,53,48,67,53,45,63,50,43,62,42,48,64,34, -52,62,38,53,62,38,52,63,37,50,66,33,51,67,29,49,65,33, -44,62,39,41,60,43,42,60,46,41,56,44,42,54,44,44,51,42, -44,52,45,42,52,46,40,50,45,38,49,45,39,54,39,43,57,33, -44,59,35,44,58,38,44,58,39,48,59,36,48,60,35,51,62,32, -56,65,33,60,64,36,63,63,40,68,74,33,65,72,45,71,78,42, -89,96,45,109,117,56,121,129,82,117,124,98,110,122,106, -112,125,106,140,145,113,161,166,141,172,176,162,179,180, -175,184,184,181,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,184,184,184,183,184,184,180,182, -182,174,175,179,154,159,170,121,146,162,99,125,150,66, -105,144,43,94,138,42,80,130,42,57,113,35,44,99,42,42, -85,63,46,73,80,55,72,68,53,70,55,49,68,45,50,63,52,54, -60,57,57,62,56,58,66,51,52,68,40,52,69,32,51,66,38,46, -68,33,42,66,30,42,63,32,41,58,35,42,55,39,46,54,44,49, -57,41,47,59,37,46,60,33,44,59,33,42,61,31,47,60,38,48, -60,45,46,58,47,44,55,50,47,54,52,48,54,50,48,54,46,52, -58,39,60,65,27,71,78,18,79,91,26,92,107,26,104,120,35, -120,131,54,133,141,80,141,152,93,144,156,105,146,160,116, -147,162,121,165,171,144,174,177,164,181,181,176,183,184, -181,184,184,184,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,182,182,184,177,178,181,168,175,177,157,170,173,136, -156,164,111,144,157,99,127,145,81,107,130,66,96,118,73, -81,100,88,58,83,91,45,84,74,43,87,64,42,86,55,41,79, -60,33,75,60,26,76,54,26,74,46,31,75,37,40,77,34,42,72, -39,44,70,34,47,70,34,49,69,38,48,65,42,51,62,46,54,58, -50,49,60,44,51,63,41,54,65,39,61,64,42,67,66,44,58,62, -44,51,62,47,45,61,49,42,56,50,42,57,53,45,59,53,52,64, -54,62,72,53,82,90,57,104,112,64,118,126,78,132,140,82, -145,150,94,147,153,98,149,158,113,158,165,127,164,168, -139,168,172,149,172,174,158,178,179,169,180,182,177,183, -183,181,184,185,183,185,185,184,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,184,184,184,184,184,184,183,184,185, -183,184,184,178,180,183,171,176,180,163,166,175,141,146, -163,104,131,152,73,123,147,69,106,139,67,88,131,54,81, -126,51,79,122,46,76,118,46,62,109,39,46,101,33,39,88, -44,37,76,61,40,70,65,41,67,57,43,65,52,47,67,52,49,67, -50,51,67,47,54,67,44,61,68,46,55,70,36,56,71,35,57,71, -35,64,69,39,74,75,37,69,77,41,64,79,35,53,75,27,56,74, -44,61,77,62,72,88,63,86,100,63,108,119,73,134,141,98, -150,155,114,157,162,126,162,168,131,165,169,134,165,168, -139,163,169,142,170,173,152,175,177,164,179,179,171,180, -180,175,182,182,180,184,184,182,185,185,183,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,184,184,184,180,180,182,173,175,180,157, -171,175,146,165,171,142,161,171,137,160,167,133,156,165, -122,148,157,107,134,149,87,122,139,75,108,124,73,91,105, -76,81,97,76,79,95,69,78,96,66,76,96,64,73,94,61,72,93, -55,69,93,53,71,96,53,79,102,54,83,105,55,84,104,55,82, -103,55,89,105,52,92,107,59,93,108,54,93,110,52,87,104, -60,95,108,79,110,119,88,130,138,101,152,158,123,165,168, -140,171,174,151,174,176,157,175,176,159,175,177,158,174, -176,159,175,175,162,176,177,164,179,182,173,182,183,178, -183,183,181,183,183,182,184,184,183,185,185,184,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,184,184, -184,184,184,182,184,184,181,183,184,180,182,184,177,182, -184,174,180,182,167,174,178,154,167,175,139,160,169,123, -148,160,104,142,157,93,141,155,83,137,153,82,134,150,79, -130,147,75,128,150,75,129,149,76,129,148,80,133,151,86, -135,152,88,137,152,86,133,150,88,136,151,91,138,152,95, -141,152,95,142,156,96,141,154,97,141,153,101,150,158,111, -160,167,130,170,174,148,175,179,163,179,181,170,179,180, -170,179,180,171,180,181,172,179,181,171,180,180,172,179, -181,174,182,183,179,183,183,181,184,184,183,184,184,183, -185,185,183,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,184, -184,184,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,184, -184,182,183,183,180,180,182,172,178,182,165,173,179,159, -174,177,155,173,176,154,170,175,147,168,172,139,163,169, -131,161,169,128,161,169,128,164,171,136,165,170,138,166, -172,140,168,172,142,167,172,143,167,172,145,167,173,146, -168,172,142,166,172,139,166,171,141,168,171,144,172,176, -155,177,178,164,180,181,173,182,182,175,181,182,175,182, -182,176,181,183,177,182,183,178,182,182,179,183,184,179, -183,184,182,184,184,182,184,184,183,184,184,183,185,185, -184,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,184,184,184,184,184,184, -184,184,184,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,184,184,184,182,183,183, -181,183,184,180,182,183,178,181,182,174,179,180,168,176, -179,162,175,178,160,175,179,159,177,179,163,177,180,167, -179,180,169,179,181,169,178,180,169,178,182,168,178,180, -168,176,180,165,175,179,165,177,178,165,177,179,168,180, -181,172,182,183,177,183,183,180,182,184,180,182,183,180, -183,184,181,183,184,180,182,184,182,184,184,182,184,184, -182,184,185,183,184,185,183,185,185,184,185,185,184,185, -185,184,185,185,184,184,185,184,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,184,184,184,184,184,184,184,184, -184,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,184,185, -185,184,185,185,183,185,185,183,184,185,181,181,183,177, -182,182,174,181,182,172,181,182,173,182,183,177,183,183, -178,182,184,178,182,184,177,182,183,178,182,183,178,182, -183,177,181,182,175,180,181,175,180,182,176,182,182,177, -183,183,180,184,185,182,183,184,182,184,185,182,184,184, -182,183,184,182,183,184,181,183,183,183,184,184,183,185, -185,184,185,185,184,185,185,185,185,185,184,185,185,185, -185,185,185,185,185,184,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,184,185,185,183,184,184,183,183,183,183,184,184,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,184,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,184,183,184,182,183,183, -178,182,184,177,182,184,178,183,184,180,184,184,182,184, -185,182,184,184,182,184,184,182,184,184,182,183,184,181, -183,183,180,182,183,179,182,183,179,183,184,179,183,184, -181,184,184,181,185,185,182,184,184,182,183,184,183,183, -184,182,183,183,181,184,184,182,184,184,183,184,184,184, -184,184,184,185,185,184,185,185,185,184,185,184,185,185, -184,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,184, -185,185,183,183,184,182,183,183,182,182,182,184,184,184, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,184,185,185,184,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,182,183,184,180,183, -185,179,183,184,179,183,185,182,184,184,182,184,185,182, -184,184,183,184,184,183,184,185,182,184,184,182,182,184, -179,182,183,179,182,183,179,183,183,178,182,184,179,183, -184,180,183,184,181,184,184,180,182,183,180,182,183,181, -184,184,182,184,184,182,184,184,183,184,185,183,184,185, -184,184,184,184,185,185,184,185,185,184,185,185,184,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,184,184,184, -182,183,183,181,182,182,181,181,181,182,182,182,184,184, -184,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,184,185, -185,184,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,182,183,184,178,183,185,178, -183,184,179,183,185,181,184,184,181,184,185,182,184,184, -183,184,184,183,184,185,182,183,184,181,182,184,179,182, -183,178,182,182,178,182,182,175,180,181,177,182,182,175, -182,183,177,181,183,177,182,182,176,182,183,180,183,183, -181,184,184,182,184,184,182,184,184,183,184,185,183,184, -184,183,183,184,183,184,185,184,185,185,183,185,185,185, -185,185,184,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185,185,185,185,185,185,185,185,185,185,185, -185,185,185,185}; diff --git a/lib/glut-3.7.6/progs/examples/mjksift.c b/lib/glut-3.7.6/progs/examples/mjksift.c deleted file mode 100644 index 6a3e72689..000000000 --- a/lib/glut-3.7.6/progs/examples/mjksift.c +++ /dev/null @@ -1,261 +0,0 @@ - -/* 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. */ - -/* This program uses 3D texture coordinates to introduce - "sifting" effects to warp a static mesh of textured - geometry. The third texture coordinate encodes a shifting - quantity through the mesh. By updating the texture matrix, - the texture coordinates can be shifted based on this - third texture coordinate. You'll notice the face seems - to have local vortexes scattered over the image that - warp the image. While the texture coordinates look dynamic, - they are indeed quite static (frozen in a display list) and - it is just the texture matrix that is changing to shift - the final 2D texture coordinates. */ - -#include -#include -#include -#include /* for cos(), sin(), and sqrt() */ -#include - -extern unsigned char mjk_image[]; -extern int mjk_depth; -extern int mjk_height; -extern int mjk_width; - -float tick1 = 0; -float tick2 = 0; -float angle; -float size = 0.4; -int set_timeout = 0; -int visible = 0; -int sifting = 1; -int scaling = 0; -int interval = 100; - -void -animate(int value) -{ - if (visible) { - if (sifting || scaling) { - if (value) { - if (sifting) { - tick1 += 4 * (interval / 100.0); - angle = ((int) tick1) % 360; - } - if (scaling) { - tick2 += 2 * (interval / 100.0); - size = .7 - .5 * sin(tick2 / 20.0); - } - } - glutPostRedisplay(); - set_timeout = 1; - } - } -} - -/* Setup display list with "frozen" 3D texture coordinates. */ -void -generateTexturedSurface(void) -{ - static GLfloat data[8] = - {0, 1, 0, -1}; - int i, j; - -#define COLS 12 -#define ROWS 12 -#define TILE_TEX_W (1.0/COLS) -#define TILE_TEX_H (1.0/ROWS) - - glNewList(1, GL_COMPILE); - glTranslatef(-COLS / 2.0 + .5, -ROWS / 2.0 + .5, 0); - for (j = 0; j < ROWS; j++) { - glBegin(GL_QUAD_STRIP); - for (i = 0; i < COLS; i++) { - glTexCoord3f(i * TILE_TEX_W, j * TILE_TEX_H, data[(i + j) % 4]); - glVertex2f(i - .5, j - .5); - glTexCoord3f(i * TILE_TEX_W, (j + 1) * TILE_TEX_H, data[(i + j + 1) % 4]); - glVertex2f(i - .5, j + .5); - } - glTexCoord3f((i + 1) * TILE_TEX_W, j * TILE_TEX_H, data[(i + j) % 4]); - glVertex2f(i + .5, j - .5); - glTexCoord3f((i + 1) * TILE_TEX_W, (j + 1) * TILE_TEX_H, data[(i + j + 1) % 4]); - glVertex2f(i + .5, j + .5); - glEnd(); - } - glEndList(); -} - -/* Construct an identity matrix except that the third coordinate - can be used to "sift" the X and Y coordinates. */ -void -makeSift(GLfloat m[16], float xsift, float ysift) -{ - m[0 + 4 * 0] = 1; - m[0 + 4 * 1] = 0; - m[0 + 4 * 2] = xsift; - m[0 + 4 * 3] = 0; - - m[1 + 4 * 0] = 0; - m[1 + 4 * 1] = 1; - m[1 + 4 * 2] = ysift; - m[1 + 4 * 3] = 0; - - m[2 + 4 * 0] = 0; - m[2 + 4 * 1] = 0; - m[2 + 4 * 2] = 1; - m[2 + 4 * 3] = 0; - - m[3 + 4 * 0] = 0; - m[3 + 4 * 1] = 0; - m[3 + 4 * 2] = 0; - m[3 + 4 * 3] = 1; -} - -void -redraw(void) -{ - int begin, end, elapsed; - GLfloat matrix[16]; - - if (set_timeout) { - begin = glutGet(GLUT_ELAPSED_TIME); - } - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glPushMatrix(); - - glScalef(size, size, size); - - glMatrixMode(GL_TEXTURE); - makeSift(matrix, 0.02 * cos(tick1 / 40.0), 0.02 * sin(tick1 / 15.0)); - glLoadMatrixf(matrix); - glMatrixMode(GL_MODELVIEW); - - glCallList(1); - - glPopMatrix(); - glutSwapBuffers(); - if (set_timeout) { - set_timeout = 0; - end = glutGet(GLUT_ELAPSED_TIME); - elapsed = end - begin; - if (elapsed > interval) { - glutTimerFunc(0, animate, 1); - } else { - glutTimerFunc(interval - elapsed, animate, 1); - } - } -} - -int width; -int height; -int depth; -unsigned char *bits; - -void -visibility(int state) -{ - if (state == GLUT_VISIBLE) { - visible = 1; - animate(0); - } else { - visible = 0; - } -} - -void -minify_select(int value) -{ - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, value); - gluBuild2DMipmaps(GL_TEXTURE_2D, depth, width, height, - GL_RGB, GL_UNSIGNED_BYTE, bits); - glutPostRedisplay(); -} - -void -rate_select(int value) -{ - interval = value; -} - -void -menu_select(int value) -{ - switch (value) { - case 1: - sifting = !sifting; - if (sifting) - animate(0); - break; - case 2: - scaling = !scaling; - if (scaling) - animate(0); - break; - case 666: - exit(0); - } -} - -int -main(int argc, char **argv) -{ - int minify_menu, rate_menu; - - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); - glutCreateWindow("mjksift"); - glutDisplayFunc(redraw); - glMatrixMode(GL_PROJECTION); - gluPerspective( /* field of view in degree */ 40.0, - /* aspect ratio */ 1.0, - /* Z near */ 1.0, /* Z far */ 70.0); - glMatrixMode(GL_MODELVIEW); - gluLookAt(0.0, 0.0, 5.0, /* eye is at (0,0,30) */ - 0.0, 0.0, 0.0, /* center is at (0,0,0) */ - 0.0, 1.0, 0.); /* up is in positive Y direction */ - depth = mjk_depth; - width = mjk_width; - height = mjk_height; - bits = mjk_image; - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - gluBuild2DMipmaps(GL_TEXTURE_2D, depth, width, height, - GL_RGB, GL_UNSIGNED_BYTE, bits); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); - glEnable(GL_TEXTURE_2D); - glutVisibilityFunc(visibility); - minify_menu = glutCreateMenu(minify_select); - glutAddMenuEntry("Nearest", GL_NEAREST); - glutAddMenuEntry("Linear", GL_LINEAR); - glutAddMenuEntry("Nearest mipmap nearest", GL_NEAREST_MIPMAP_NEAREST); - glutAddMenuEntry("Linear mipmap nearest", GL_LINEAR_MIPMAP_NEAREST); - glutAddMenuEntry("Nearest mipmap linear", GL_NEAREST_MIPMAP_LINEAR); - glutAddMenuEntry("Linear mipmap linear", GL_LINEAR_MIPMAP_LINEAR); - rate_menu = glutCreateMenu(rate_select); - glutAddMenuEntry(" 2/sec", 500); - glutAddMenuEntry(" 6/sec", 166); - glutAddMenuEntry("10/sec", 100); - glutAddMenuEntry("20/sec", 50); - glutAddMenuEntry("30/sec", 33); - glutAddMenuEntry("60/sec", 16); - glutCreateMenu(menu_select); - glutAddMenuEntry("Toggle sifting", 1); - glutAddMenuEntry("Toggle scaling", 2); - glutAddSubMenu("Minimum frame rate", rate_menu); - glutAddSubMenu("Minify modes", minify_menu); - glutAddMenuEntry("Quit", 666); - glutAttachMenu(GLUT_RIGHT_BUTTON); - menu_select(3); - generateTexturedSurface(); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/examples/mjksift.dsp b/lib/glut-3.7.6/progs/examples/mjksift.dsp deleted file mode 100644 index 1e2fe4d01..000000000 --- a/lib/glut-3.7.6/progs/examples/mjksift.dsp +++ /dev/null @@ -1,92 +0,0 @@ -# Microsoft Developer Studio Project File - Name="mjksift" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=mjksift - 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 "mjksift.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 "mjksift.mak" CFG="mjksift - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "mjksift - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "mjksift - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "mjksift - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "mjksift - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "mjksift - Win32 Release" -# Name "mjksift - Win32 Debug" -# Begin Source File - -SOURCE=.\mjkimage.c -# End Source File -# Begin Source File - -SOURCE=.\mjksift.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/mjkwarp.c b/lib/glut-3.7.6/progs/examples/mjkwarp.c deleted file mode 100644 index 06fc11e13..000000000 --- a/lib/glut-3.7.6/progs/examples/mjkwarp.c +++ /dev/null @@ -1,329 +0,0 @@ - -/* 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 -#include -#include -#include /* for cos(), sin(), and sqrt() */ -#include - -extern unsigned char mjk_image[]; -extern int mjk_depth; -extern int mjk_height; -extern int mjk_width; - -float tick1 = 0; -float tick2 = 0; -float angle; -float size; -int set_timeout = 0; -int visible = 0; -int spinning = 1; -int scaling = 1; -int interval = 100; -#define CUBE 1 -#define SQUARES 2 -#define DRUM 3 -int mode = SQUARES; - -void -animate(int value) -{ - if (visible) { - if (spinning || scaling) { - if (value) { - if (spinning) { - tick1 += 4 * (interval / 100.0); - angle = ((int) tick1) % 360; - } - if (scaling) { - tick2 += 2 * (interval / 100.0); - size = .7 - .5 * sin(tick2 / 20.0); - } - } - glutPostRedisplay(); - set_timeout = 1; - } - } -} - -#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; } - -void -redraw(void) -{ - int begin, end, elapsed; - int i, j; - float amplitude; - - if (set_timeout) { - begin = glutGet(GLUT_ELAPSED_TIME); - } - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glPushMatrix(); - - if (mode != DRUM) { - glScalef(size, size, size); - } - switch (mode) { - case SQUARES: - -#define COLS 6 -#define TILE_TEX_W (1.0/COLS) -#define ROWS 6 -#define TILE_TEX_H (1.0/ROWS) - - glTranslatef(-COLS / 2.0 + .5, -ROWS / 2.0 + .5, 0); - for (i = 0; i < COLS; i++) { - for (j = 0; j < ROWS; j++) { - - glPushMatrix(); - glTranslatef(i, j, 0); - glRotatef(angle, 0, 1, 1); - glBegin(GL_QUADS); - glTexCoord2f(i * TILE_TEX_W, j * TILE_TEX_H); - glVertex2f(-.5, -.5); - glTexCoord2f((i + 1) * TILE_TEX_W, j * TILE_TEX_H); - glVertex2f(.5, -.5); - glTexCoord2f((i + 1) * TILE_TEX_W, (j + 1) * TILE_TEX_H); - glVertex2f(.5, .5); - glTexCoord2f(i * TILE_TEX_W, (j + 1) * TILE_TEX_H); - glVertex2f(-.5, .5); - glEnd(); - glPopMatrix(); - - } - } - break; - case DRUM: - -#undef COLS -#undef TILE_TEX_W -#undef ROWS -#undef TILE_TEX_H -#define COLS 12 -#define TILE_TEX_W (1.0/COLS) -#define ROWS 12 -#define TILE_TEX_H (1.0/ROWS) - - glRotatef(angle, 0, 0, 1); - glTranslatef(-COLS / 2.0 + .5, -ROWS / 2.0 + .5, 0); - amplitude = 0.4 * sin(tick2 / 6.0); - for (i = 0; i < COLS; i++) { - for (j = 0; j < ROWS; j++) { - -#define Z(x,y) (((COLS-(x))*(x) + (ROWS-(y))*(y)) * amplitude) - 28.0 - - glPushMatrix(); - glTranslatef(i, j, 0); - glBegin(GL_QUADS); - glTexCoord2f(i * TILE_TEX_W, j * TILE_TEX_H); - glVertex3f(-.5, -.5, Z(i, j)); - glTexCoord2f((i + 1) * TILE_TEX_W, j * TILE_TEX_H); - glVertex3f(.5, -.5, Z(i + 1, j)); - glTexCoord2f((i + 1) * TILE_TEX_W, (j + 1) * TILE_TEX_H); - glVertex3f(.5, .5, Z(i + 1, j + 1)); - glTexCoord2f(i * TILE_TEX_W, (j + 1) * TILE_TEX_H); - glVertex3f(-.5, .5, Z(i, j + 1)); - glEnd(); - glPopMatrix(); - - } - } - break; - case CUBE: - glRotatef(angle, 0, 1, 0); - glBegin(GL_QUADS); - - /* front */ - glTexCoord2f(0.0, 0.0); - glVertex3f(-1.0, -1.0, 1.0); - glTexCoord2f(1.0, 0.0); - glVertex3f(1.0, -1.0, 1.0); - glTexCoord2f(1.0, 1.0); - glVertex3f(1.0, 1.0, 1.0); - glTexCoord2f(0.0, 1.0); - glVertex3f(-1.0, 1.0, 1.0); - - /* back */ - glTexCoord2f(0.0, 1.0); - glVertex3f(-1.0, 1.0, -1.0); - glTexCoord2f(1.0, 1.0); - glVertex3f(1.0, 1.0, -1.0); - glTexCoord2f(1.0, 0.0); - glVertex3f(1.0, -1.0, -1.0); - glTexCoord2f(0.0, 0.0); - glVertex3f(-1.0, -1.0, -1.0); - - /* left */ - glTexCoord2f(0.0, 0.0); - glVertex3f(-1.0, -1.0, -1.0); - glTexCoord2f(1.0, 0.0); - glVertex3f(-1.0, -1.0, 1.0); - glTexCoord2f(1.0, 1.0); - glVertex3f(-1.0, 1.0, 1.0); - glTexCoord2f(0.0, 1.0); - glVertex3f(-1.0, 1.0, -1.0); - - /* right */ - glTexCoord2f(0.0, 1.0); - glVertex3f(1.0, 1.0, -1.0); - glTexCoord2f(1.0, 1.0); - glVertex3f(1.0, 1.0, 1.0); - glTexCoord2f(1.0, 0.0); - glVertex3f(1.0, -1.0, 1.0); - glTexCoord2f(0.0, 0.0); - glVertex3f(1.0, -1.0, -1.0); - - glEnd(); - } - - glPopMatrix(); - glutSwapBuffers(); - if (set_timeout) { - set_timeout = 0; - end = glutGet(GLUT_ELAPSED_TIME); - elapsed = end - begin; - if (elapsed > interval) { - glutTimerFunc(0, animate, 1); - } else { - glutTimerFunc(interval - elapsed, animate, 1); - } - } -} - -int width; -int height; -int depth; -unsigned char *bits; - -void -visibility(int state) -{ - if (state == GLUT_VISIBLE) { - visible = 1; - animate(0); - } else { - visible = 0; - } -} - -void -minify_select(int value) -{ - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, value); - gluBuild2DMipmaps(GL_TEXTURE_2D, depth, width, height, - GL_RGB, GL_UNSIGNED_BYTE, bits); - glutPostRedisplay(); -} - -void -rate_select(int value) -{ - interval = value; -} - -void -menu_select(int value) -{ - switch (value) { - case 1: - spinning = !spinning; - if (spinning) - animate(0); - break; - case 2: - scaling = !scaling; - if (scaling) - animate(0); - break; - case 3: - mode++; - if (mode > DRUM) - mode = CUBE; - switch (mode) { - case CUBE: - glEnable(GL_CULL_FACE); - glDisable(GL_DEPTH_TEST); - break; - case SQUARES: - glDisable(GL_CULL_FACE); - glDisable(GL_DEPTH_TEST); - break; - case DRUM: - glEnable(GL_DEPTH_TEST); - glDisable(GL_CULL_FACE); - break; - } - glutPostRedisplay(); - break; - case 666: - exit(0); - } -} - -int -main(int argc, char **argv) -{ - int minify_menu, rate_menu; - - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); - glutCreateWindow("mjkwarp"); - glutDisplayFunc(redraw); - glMatrixMode(GL_PROJECTION); - gluPerspective( /* field of view in degree */ 40.0, - /* aspect ratio */ 1.0, - /* Z near */ 1.0, /* Z far */ 70.0); - glMatrixMode(GL_MODELVIEW); - gluLookAt(0.0, 0.0, 5.0, /* eye is at (0,0,30) */ - 0.0, 0.0, 0.0, /* center is at (0,0,0) */ - 0.0, 1.0, 0.); /* up is in positive Y direction */ - depth = mjk_depth; - width = mjk_width; - height = mjk_height; - bits = mjk_image; - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - gluBuild2DMipmaps(GL_TEXTURE_2D, depth, width, height, - GL_RGB, GL_UNSIGNED_BYTE, bits); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); - glEnable(GL_TEXTURE_2D); - glutVisibilityFunc(visibility); - minify_menu = glutCreateMenu(minify_select); - glutAddMenuEntry("Nearest", GL_NEAREST); - glutAddMenuEntry("Linear", GL_LINEAR); - glutAddMenuEntry("Nearest mipmap nearest", GL_NEAREST_MIPMAP_NEAREST); - glutAddMenuEntry("Linear mipmap nearest", GL_LINEAR_MIPMAP_NEAREST); - glutAddMenuEntry("Nearest mipmap linear", GL_NEAREST_MIPMAP_LINEAR); - glutAddMenuEntry("Linear mipmap linear", GL_LINEAR_MIPMAP_LINEAR); - rate_menu = glutCreateMenu(rate_select); - glutAddMenuEntry(" 2/sec", 500); - glutAddMenuEntry(" 6/sec", 166); - glutAddMenuEntry("10/sec", 100); - glutAddMenuEntry("20/sec", 50); - glutAddMenuEntry("30/sec", 33); - glutAddMenuEntry("60/sec", 16); - glutCreateMenu(menu_select); - glutAddMenuEntry("Toggle spinning", 1); - glutAddMenuEntry("Toggle scaling", 2); - glutAddMenuEntry("Switch mode", 3); - glutAddSubMenu("Minimum frame rate", rate_menu); - glutAddSubMenu("Minify modes", minify_menu); - glutAddMenuEntry("Quit", 666); - glutAttachMenu(GLUT_RIGHT_BUTTON); - menu_select(3); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/examples/mjkwarp.dsp b/lib/glut-3.7.6/progs/examples/mjkwarp.dsp deleted file mode 100644 index f3582a979..000000000 --- a/lib/glut-3.7.6/progs/examples/mjkwarp.dsp +++ /dev/null @@ -1,92 +0,0 @@ -# Microsoft Developer Studio Project File - Name="mjkwarp" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=mjkwarp - 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 "mjkwarp.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 "mjkwarp.mak" CFG="mjkwarp - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "mjkwarp - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "mjkwarp - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "mjkwarp - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "mjkwarp - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "mjkwarp - Win32 Release" -# Name "mjkwarp - Win32 Debug" -# Begin Source File - -SOURCE=.\mjkimage.c -# End Source File -# Begin Source File - -SOURCE=.\mjkwarp.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/molehill.c b/lib/glut-3.7.6/progs/examples/molehill.c deleted file mode 100644 index 47c75a613..000000000 --- a/lib/glut-3.7.6/progs/examples/molehill.c +++ /dev/null @@ -1,153 +0,0 @@ - -/* 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. */ - -/* molehill uses the GLU NURBS routines to draw some nice surfaces. */ - -#include - -GLfloat mat_red_diffuse[] = { 0.7, 0.0, 0.1, 1.0 }; -GLfloat mat_green_diffuse[] = { 0.0, 0.7, 0.1, 1.0 }; -GLfloat mat_blue_diffuse[] = { 0.0, 0.1, 0.7, 1.0 }; -GLfloat mat_yellow_diffuse[] = { 0.7, 0.8, 0.1, 1.0 }; -GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; -GLfloat mat_shininess[] = { 100.0 }; -GLfloat knots[8] = { 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0 }; -GLfloat pts1[4][4][3], pts2[4][4][3]; -GLfloat pts3[4][4][3], pts4[4][4][3]; -GLUnurbsObj *nurb; -int u, v; - -static void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glCallList(1); - glFlush(); -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutCreateWindow("molehill"); - glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); - glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_DEPTH_TEST); - glEnable(GL_AUTO_NORMAL); - glEnable(GL_NORMALIZE); - nurb = gluNewNurbsRenderer(); - gluNurbsProperty(nurb, GLU_SAMPLING_TOLERANCE, 25.0); - gluNurbsProperty(nurb, GLU_DISPLAY_MODE, GLU_FILL); - - /* Build control points for NURBS mole hills. */ - for(u=0; u<4; u++) { - for(v=0; v<4; v++) { - /* Red. */ - pts1[u][v][0] = 2.0*((GLfloat)u); - pts1[u][v][1] = 2.0*((GLfloat)v); - if((u==1 || u == 2) && (v == 1 || v == 2)) - /* Stretch up middle. */ - pts1[u][v][2] = 6.0; - else - pts1[u][v][2] = 0.0; - - /* Green. */ - pts2[u][v][0] = 2.0*((GLfloat)u - 3.0); - pts2[u][v][1] = 2.0*((GLfloat)v - 3.0); - if((u==1 || u == 2) && (v == 1 || v == 2)) - if(u == 1 && v == 1) - /* Pull hard on single middle square. */ - pts2[u][v][2] = 15.0; - else - /* Push down on other middle squares. */ - pts2[u][v][2] = -2.0; - else - pts2[u][v][2] = 0.0; - - /* Blue. */ - pts3[u][v][0] = 2.0*((GLfloat)u - 3.0); - pts3[u][v][1] = 2.0*((GLfloat)v); - if((u==1 || u == 2) && (v == 1 || v == 2)) - if(u == 1 && v == 2) - /* Pull up on single middple square. */ - pts3[u][v][2] = 11.0; - else - /* Pull up slightly on other middle squares. */ - pts3[u][v][2] = 2.0; - else - pts3[u][v][2] = 0.0; - - /* Yellow. */ - pts4[u][v][0] = 2.0*((GLfloat)u); - pts4[u][v][1] = 2.0*((GLfloat)v - 3.0); - if((u==1 || u == 2 || u == 3) && (v == 1 || v == 2)) - if(v == 1) - /* Push down front middle and right squares. */ - pts4[u][v][2] = -2.0; - else - /* Pull up back middle and right squares. */ - pts4[u][v][2] = 5.0; - else - pts4[u][v][2] = 0.0; - } - } - /* Stretch up red's far right corner. */ - pts1[3][3][2] = 6; - /* Pull down green's near left corner a little. */ - pts2[0][0][2] = -2; - /* Turn up meeting of four corners. */ - pts1[0][0][2] = 1; - pts2[3][3][2] = 1; - pts3[3][0][2] = 1; - pts4[0][3][2] = 1; - - glMatrixMode(GL_PROJECTION); - gluPerspective(55.0, 1.0, 2.0, 24.0); - glMatrixMode(GL_MODELVIEW); - glTranslatef(0.0, 0.0, -15.0); - glRotatef(330.0, 1.0, 0.0, 0.0); - - glNewList(1, GL_COMPILE); - /* Render red hill. */ - glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_red_diffuse); - gluBeginSurface(nurb); - gluNurbsSurface(nurb, 8, knots, 8, knots, - 4 * 3, 3, &pts1[0][0][0], - 4, 4, GL_MAP2_VERTEX_3); - gluEndSurface(nurb); - - /* Render green hill. */ - glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_green_diffuse); - gluBeginSurface(nurb); - gluNurbsSurface(nurb, 8, knots, 8, knots, - 4 * 3, 3, &pts2[0][0][0], - 4, 4, GL_MAP2_VERTEX_3); - gluEndSurface(nurb); - - /* Render blue hill. */ - glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_blue_diffuse); - gluBeginSurface(nurb); - gluNurbsSurface(nurb, 8, knots, 8, knots, - 4 * 3, 3, &pts3[0][0][0], - 4, 4, GL_MAP2_VERTEX_3); - gluEndSurface(nurb); - - /* Render yellow hill. */ - glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_yellow_diffuse); - gluBeginSurface(nurb); - gluNurbsSurface(nurb, 8, knots, 8, knots, - 4 * 3, 3, &pts4[0][0][0], - 4, 4, GL_MAP2_VERTEX_3); - gluEndSurface(nurb); - glEndList(); - - glutDisplayFunc(display); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/examples/molehill.dsp b/lib/glut-3.7.6/progs/examples/molehill.dsp deleted file mode 100644 index e4707cf62..000000000 --- a/lib/glut-3.7.6/progs/examples/molehill.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="molehill" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=molehill - 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 "molehill.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 "molehill.mak" CFG="molehill - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "molehill - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "molehill - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "molehill - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "molehill - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "molehill - Win32 Release" -# Name "molehill - Win32 Debug" -# Begin Source File - -SOURCE=.\molehill.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/movelight.c b/lib/glut-3.7.6/progs/examples/movelight.c deleted file mode 100644 index e029ab696..000000000 --- a/lib/glut-3.7.6/progs/examples/movelight.c +++ /dev/null @@ -1,289 +0,0 @@ - -/* 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. */ - -/** - * (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. - */ -/** - * movelight.c - * This program demonstrates when to issue lighting and - * transformation commands to render a model with a light - * which is moved by a modeling transformation (rotate or - * translate). The light position is reset after the modeling - * transformation is called. The eye position does not change. - * - * A sphere is drawn using a grey material characteristic. - * A single light source illuminates the object. - * - * Interaction: pressing the left or middle mouse button - * alters the modeling transformation (x rotation) by 30 degrees. - * The scene is then redrawn with the light in a new position. - */ -#include -#include -#include -#include - -#define TORUS 0 -#define TEAPOT 1 -#define DOD 2 -#define TET 3 -#define ISO 4 -#define QUIT 5 - -static int spin = 0; -static int obj = TORUS; -static int begin; - -void -output(GLfloat x, GLfloat y, char *format,...) -{ - va_list args; - char buffer[200], *p; - - va_start(args, format); - vsprintf(buffer, format, args); - va_end(args); - glPushMatrix(); - glTranslatef(x, y, 0); - for (p = buffer; *p; p++) - glutStrokeCharacter(GLUT_STROKE_ROMAN, *p); - glPopMatrix(); -} - -void -menu_select(int item) -{ - if (item == QUIT) - exit(0); - obj = item; - glutPostRedisplay(); -} - -/* ARGSUSED2 */ -void -movelight(int button, int state, int x, int y) -{ - if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) { - begin = x; - } -} - -/* ARGSUSED1 */ -void -motion(int x, int y) -{ - spin = (spin + (x - begin)) % 360; - begin = x; - glutPostRedisplay(); -} - -void -myinit(void) -{ - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - - glDepthFunc(GL_LESS); - glEnable(GL_DEPTH_TEST); -} - -/* Here is where the light position is reset after the modeling - * transformation (glRotated) is called. This places the - * light at a new position in world coordinates. The cube - * represents the position of the light. - */ -void -display(void) -{ - GLfloat position[] = - {0.0, 0.0, 1.5, 1.0}; - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glTranslatef(0.0, 0.0, -5.0); - - glPushMatrix(); - glRotated((GLdouble) spin, 0.0, 1.0, 0.0); - glRotated(0.0, 1.0, 0.0, 0.0); - glLightfv(GL_LIGHT0, GL_POSITION, position); - - glTranslated(0.0, 0.0, 1.5); - glDisable(GL_LIGHTING); - glColor3f(0.0, 1.0, 1.0); - glutWireCube(0.1); - glEnable(GL_LIGHTING); - glPopMatrix(); - - switch (obj) { - case TORUS: - glutSolidTorus(0.275, 0.85, 20, 20); - break; - case TEAPOT: - glutSolidTeapot(1.0); - break; - case DOD: - glPushMatrix(); - glScalef(.5, .5, .5); - glutSolidDodecahedron(); - glPopMatrix(); - break; - case TET: - glutSolidTetrahedron(); - break; - case ISO: - glutSolidIcosahedron(); - break; - } - - glPopMatrix(); - glPushAttrib(GL_ENABLE_BIT); - glDisable(GL_DEPTH_TEST); - glDisable(GL_LIGHTING); - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - gluOrtho2D(0, 3000, 0, 3000); - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); - output(80, 2800, "Welcome to movelight."); - output(80, 2650, "Right mouse button for menu."); - output(80, 400, "Hold down the left mouse button"); - output(80, 250, "and move the mouse horizontally"); - output(80, 100, "to change the light position."); - glPopMatrix(); - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glPopAttrib(); - glutSwapBuffers(); -} - -void -myReshape(int w, int h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(40.0, (GLfloat) w / (GLfloat) h, 1.0, 20.0); - glMatrixMode(GL_MODELVIEW); -} - -void -tmotion(int x, int y) -{ - printf("Tablet motion x = %d, y = %d\n", x, y); -} - -void -tbutton(int b, int s, int x, int y) -{ - printf("b = %d, s = %d, x = %d, y = %d\n", b, s, x, y); -} - -void -smotion(int x, int y, int z) -{ - fprintf(stderr, "Spaceball motion %d %d %d\n", x, y, z); -} - -void -rmotion(int x, int y, int z) -{ - fprintf(stderr, "Spaceball rotate %d %d %d\n", x, y, z); -} - -void -sbutton(int button, int state) -{ - fprintf(stderr, "Spaceball button %d is %s\n", - button, state == GLUT_UP ? "up" : "down"); -} - -void -dials(int dial, int value) -{ - fprintf(stderr, "Dial %d is %d\n", dial, value); - spin = value % 360; - glutPostRedisplay(); -} - -void -buttons(int button, int state) -{ - fprintf(stderr, "Button %d is %s\n", button, - state == GLUT_UP ? "up" : "down"); -} - -/* Main Loop - * Open window with initial window size, title bar, - * RGBA display mode, and handle input events. - */ -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); - glutInitWindowSize(500, 500); - glutCreateWindow(argv[0]); - myinit(); - glutMouseFunc(movelight); - glutMotionFunc(motion); - glutReshapeFunc(myReshape); - glutDisplayFunc(display); - glutTabletMotionFunc(tmotion); - glutTabletButtonFunc(tbutton); - glutSpaceballMotionFunc(smotion); - glutSpaceballRotateFunc(rmotion); - glutSpaceballButtonFunc(sbutton); - glutDialsFunc(dials); - glutButtonBoxFunc(buttons); - glutCreateMenu(menu_select); - glutAddMenuEntry("Torus", TORUS); - glutAddMenuEntry("Teapot", TEAPOT); - glutAddMenuEntry("Dodecahedron", DOD); - glutAddMenuEntry("Tetrahedron", TET); - glutAddMenuEntry("Icosahedron", ISO); - glutAddMenuEntry("Quit", QUIT); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/examples/movelight.dsp b/lib/glut-3.7.6/progs/examples/movelight.dsp deleted file mode 100644 index 514fc5434..000000000 --- a/lib/glut-3.7.6/progs/examples/movelight.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="movelight" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=movelight - 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 "movelight.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 "movelight.mak" CFG="movelight - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "movelight - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "movelight - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "movelight - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "movelight - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "movelight - Win32 Release" -# Name "movelight - Win32 Debug" -# Begin Source File - -SOURCE=.\movelight.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/oclip.c b/lib/glut-3.7.6/progs/examples/oclip.c deleted file mode 100644 index ecd5a3cfa..000000000 --- a/lib/glut-3.7.6/progs/examples/oclip.c +++ /dev/null @@ -1,207 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1994. */ - -/** - * (c) Copyright 1993, 1994, 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. - */ -/*---------------------------------------------------------------------------- - * - * oclip.c : openGL (motif) example showing how to use arbitrary clipping plane. - * - * Author : Yusuf Attarwala - * SGI - Applications - * Date : Mar 93 - * - * note : the main intent of this program is to demo the arbitrary - * clipping functionality, hence the rendering is kept - * simple (wireframe) and only one clipping plane is used. - * - * press left button to move object - * right button to move clipping plane - * - * - *---------------------------------------------------------------------------*/ -#include -#include - -#include - -/* function declarations */ - -void - drawScene(void), setMatrix(void), animateClipPlane(void), animation(void), - resize(int w, int h), keyboard(unsigned char c, int x, int y); - -/* global variables */ - -float ax, ay, az; /* angles for animation */ -GLUquadricObj *quadObj; /* used in drawscene */ -GLdouble planeEqn[] = -{0.707, 0.707, 0.0, 0.0}; /* initial clipping plane eqn */ - -int count = 0; -int clip_count = 0; - -void -menu(int choice) -{ - switch (choice) { - case 1: - count = 90; - glutIdleFunc(animation); - break; - case 2: - animateClipPlane(); - break; - } -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - - quadObj = gluNewQuadric(); /* this will be used in drawScene - */ - glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); - glutCreateWindow("Arbitrary clip plane"); - - ax = 10.0; - ay = -10.0; - az = 0.0; - - glutDisplayFunc(drawScene); - glutReshapeFunc(resize); - glutKeyboardFunc(keyboard); - glutCreateMenu(menu); - glutAddMenuEntry("Rotate", 1); - glutAddMenuEntry("Move clip plane", 2); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} - -void -drawScene(void) -{ - glClearColor(0.0, 0.0, 0.0, 0.0); - glClear(GL_COLOR_BUFFER_BIT); - - glPushMatrix(); - gluQuadricDrawStyle(quadObj, GLU_LINE); - glColor3f(1.0, 1.0, 0.0); - glRotatef(ax, 1.0, 0.0, 0.0); - glRotatef(-ay, 0.0, 1.0, 0.0); - - glClipPlane(GL_CLIP_PLANE0, planeEqn); /* define clipping - plane */ - glEnable(GL_CLIP_PLANE0); /* and enable it */ - - gluCylinder(quadObj, 2.0, 5.0, 10.0, 20, 8); /* draw a cone */ - - glDisable(GL_CLIP_PLANE0); - glPopMatrix(); - - glutSwapBuffers(); -} - -void -setMatrix(void) -{ - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho(-15.0, 15.0, -15.0, 15.0, -10.0, 10.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -void -animation(void) -{ - if (count) { - ax += 5.0; - ay -= 2.0; - az += 5.0; - if (ax >= 360) - ax = 0.0; - if (ay <= -360) - ay = 0.0; - if (az >= 360) - az = 0.0; - glutPostRedisplay(); - count--; - } - if (clip_count) { - static int sign = 1; - - planeEqn[3] += sign * 0.5; - if (planeEqn[3] > 4.0) - sign = -1; - else if (planeEqn[3] < -4.0) - sign = 1; - glutPostRedisplay(); - clip_count--; - } - if (count <= 0 && clip_count <= 0) - glutIdleFunc(NULL); -} - -void -animateClipPlane(void) -{ - clip_count = 5; - glutIdleFunc(animation); -} - -/* ARGSUSED1 */ -void -keyboard(unsigned char c, int x, int y) -{ - switch (c) { - case 27: - exit(0); - break; - default: - break; - } -} - -void -resize(int w, int h) -{ - glViewport(0, 0, w, h); - setMatrix(); -} diff --git a/lib/glut-3.7.6/progs/examples/oclip.dsp b/lib/glut-3.7.6/progs/examples/oclip.dsp deleted file mode 100644 index 98f865a4e..000000000 --- a/lib/glut-3.7.6/progs/examples/oclip.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="oclip" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=oclip - 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 "oclip.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 "oclip.mak" CFG="oclip - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "oclip - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "oclip - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "oclip - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "oclip - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "oclip - Win32 Release" -# Name "oclip - Win32 Debug" -# Begin Source File - -SOURCE=.\oclip.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/ohidden.c b/lib/glut-3.7.6/progs/examples/ohidden.c deleted file mode 100644 index 4f296f056..000000000 --- a/lib/glut-3.7.6/progs/examples/ohidden.c +++ /dev/null @@ -1,263 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1994. */ - -/** - * (c) Copyright 1993, 1994, 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. - */ -/*---------------------------------------------------------------------------- - * - * ohidden.c : openGL (GLUT) example showing how to use stencils - * to draw outlined polygons. - * - * Author : Yusuf Attarwala - * SGI - Applications - * Date : Jul 93 - * - * Update : Mark Kilgard - * Date : Feb 95 - * - * note : the main intent of this program is to demo the stencil - * plane functionality, hence the rendering is kept - * simple (wireframe). - * - *---------------------------------------------------------------------------*/ -#include -#include -#include - -#include - -static int stencilOn = 1; - -/* function declarations */ - -void - drawScene(void), setMatrix(void), animation(void), resize(int w, int h), - keyboard(unsigned char c, int x, int y), menu(int choice), drawWireframe(int face), - drawFilled(int face); - -/* global variables */ - -float ax, ay, az; /* angles for animation */ - -/* coords of a cube */ -static GLfloat cube[8][3] = -{ { 0.0, 0.0, 0.0}, - { 1.0, 0.0, 0.0}, - { 1.0, 0.0, 1.0}, - { 0.0, 0.0, 1.0}, - { 1.0, 1.0, 0.0}, - { 1.0, 1.0, 1.0}, - { 0.0, 1.0, 1.0}, - { 0.0, 1.0, 0.0}}; - -static int faceIndex[6][4] = -{{0, 1, 2, 3}, - {1, 4, 5, 2}, - {4, 7, 6, 5}, - {7, 0, 3, 6}, - {3, 2, 5, 6}, - {7, 4, 1, 0}}; -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - - glutInitWindowSize(400, 400); - glutInitDisplayMode(GLUT_RGB | GLUT_STENCIL | GLUT_DOUBLE | GLUT_DEPTH); - glutCreateWindow("Stenciled hidden surface removal"); - - ax = 10.0; - ay = -10.0; - az = 0.0; - - glutDisplayFunc(drawScene); - glutReshapeFunc(resize); - glutCreateMenu(menu); - glutAddMenuEntry("Motion", 3); - glutAddMenuEntry("Stencil on", 1); - glutAddMenuEntry("Stencil off", 2); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutKeyboardFunc(keyboard); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} - -void -drawWireframe(int face) -{ - int i; - glBegin(GL_LINE_LOOP); - for (i = 0; i < 4; i++) - glVertex3fv((GLfloat *) cube[faceIndex[face][i]]); - glEnd(); -} - -void -drawFilled(int face) -{ - int i; - glBegin(GL_POLYGON); - for (i = 0; i < 4; i++) - glVertex3fv((GLfloat *) cube[faceIndex[face][i]]); - glEnd(); -} - -void -drawScene(void) -{ - - int i; - glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_LEQUAL); - - glClearColor(0.0, 0.0, 0.0, 0.0); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glPushMatrix(); - - glRotatef(ax, 1.0, 0.0, 0.0); - glRotatef(-ay, 0.0, 1.0, 0.0); - - /* all the good stuff follows */ - - if (stencilOn) { - glEnable(GL_STENCIL_TEST); - glClear(GL_STENCIL_BUFFER_BIT); - glStencilMask(1); - glStencilFunc(GL_ALWAYS, 0, 1); - glStencilOp(GL_INVERT, GL_INVERT, GL_INVERT); - } - glColor3f(1.0, 1.0, 0.0); - for (i = 0; i < 6; i++) { - drawWireframe(i); - if (stencilOn) { - glStencilFunc(GL_EQUAL, 0, 1); - glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); - } - glColor3f(0.0, 0.0, 0.0); - drawFilled(i); - - glColor3f(1.0, 1.0, 0.0); - if (stencilOn) { - glStencilFunc(GL_ALWAYS, 0, 1); - glStencilOp(GL_INVERT, GL_INVERT, GL_INVERT); - } - glColor3f(1.0, 1.0, 0.0); - drawWireframe(i); - } - glPopMatrix(); - - if (stencilOn) - glDisable(GL_STENCIL_TEST); - - /* end of good stuff */ - - glutSwapBuffers(); -} - -void -setMatrix(void) -{ - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho(-2.0, 2.0, -2.0, 2.0, -2.0, 2.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -int count = 0; - -void -animation(void) -{ - /* animate the cone */ - - ax += 5.0; - ay -= 2.0; - az += 5.0; - if (ax >= 360) - ax = 0.0; - if (ay <= -360) - ay = 0.0; - if (az >= 360) - az = 0.0; - glutPostRedisplay(); - count++; - if (count >= 60) - glutIdleFunc(NULL); -} - -void -menu(int choice) -{ - switch (choice) { - case 3: - count = 0; - glutIdleFunc(animation); - break; - case 2: - stencilOn = 0; - glutSetWindowTitle("Stencil Disabled"); - glutPostRedisplay(); - break; - case 1: - stencilOn = 1; - glutSetWindowTitle("Stencil Enabled"); - glutPostRedisplay(); - break; - } -} - -/* ARGSUSED1 */ -void -keyboard(unsigned char c, int x, int y) -{ - switch (c) { - case 27: - exit(0); - break; - default: - break; - } -} - -void -resize(int w, int h) -{ - glViewport(0, 0, w, h); - setMatrix(); -} diff --git a/lib/glut-3.7.6/progs/examples/ohidden.dsp b/lib/glut-3.7.6/progs/examples/ohidden.dsp deleted file mode 100644 index 6523300a3..000000000 --- a/lib/glut-3.7.6/progs/examples/ohidden.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="ohidden" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=ohidden - 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 "ohidden.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 "ohidden.mak" CFG="ohidden - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "ohidden - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "ohidden - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "ohidden - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "ohidden - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "ohidden - Win32 Release" -# Name "ohidden - Win32 Debug" -# Begin Source File - -SOURCE=.\ohidden.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/olight.c b/lib/glut-3.7.6/progs/examples/olight.c deleted file mode 100644 index 899b7c22c..000000000 --- a/lib/glut-3.7.6/progs/examples/olight.c +++ /dev/null @@ -1,241 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1994. */ - -/** - * (c) Copyright 1993, 1994, 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. - */ -/*---------------------------------------------------------------------------- - * - * olight.c : openGL (motif) example showing how to do hardware lighting - * including two_sided lighting. - * - * Author : Yusuf Attarwala - * SGI - Applications - * Date : Mar 93 - * - * press left button for animation - * middle button for two sided lighting (default) - * right button for single sided lighting - * - * - *---------------------------------------------------------------------------*/ -#include -#include -#include - -#include - -/* function declarations */ - -void - drawScene(void), setMatrix(void), initLightAndMaterial(void), - animation(void), resize(int w, int h), menu(int choice), keyboard(unsigned char c, int x, int y); - -/* global variables */ - -float ax, ay, az; /* angles for animation */ -GLUquadricObj *quadObj; /* used in drawscene */ -static float lmodel_twoside[] = -{GL_TRUE}; -static float lmodel_oneside[] = -{GL_FALSE}; - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - - quadObj = gluNewQuadric(); /* this will be used in drawScene - */ - glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); - glutCreateWindow("Two-sided lighting"); - - ax = 10.0; - ay = -10.0; - az = 0.0; - - initLightAndMaterial(); - - glutDisplayFunc(drawScene); - glutReshapeFunc(resize); - glutCreateMenu(menu); - glutAddMenuEntry("Motion", 3); - glutAddMenuEntry("Two-sided lighting", 1); - glutAddMenuEntry("One-sided lighting", 2); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutKeyboardFunc(keyboard); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} - -void -drawScene(void) -{ - glClearColor(0.0, 0.0, 0.0, 0.0); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glPushMatrix(); - gluQuadricDrawStyle(quadObj, GLU_FILL); - glColor3f(1.0, 1.0, 0.0); - glRotatef(ax, 1.0, 0.0, 0.0); - glRotatef(-ay, 0.0, 1.0, 0.0); - - gluCylinder(quadObj, 2.0, 5.0, 10.0, 20, 8); /* draw a cone */ - - glPopMatrix(); - - glutSwapBuffers(); -} - -void -setMatrix(void) -{ - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho(-15.0, 15.0, -15.0, 15.0, -10.0, 10.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -int count = 0; - -void -animation(void) -{ - ax += 5.0; - ay -= 2.0; - az += 5.0; - if (ax >= 360) - ax = 0.0; - if (ay <= -360) - ay = 0.0; - if (az >= 360) - az = 0.0; - drawScene(); - count++; - if (count >= 60) - glutIdleFunc(NULL); -} - -/* ARGSUSED1 */ -void -keyboard(unsigned char c, int x, int y) -{ - switch (c) { - case 27: - exit(0); - break; - default: - break; - } -} - -void -menu(int choice) -{ - switch (choice) { - case 3: - count = 0; - glutIdleFunc(animation); - break; - case 2: - glLightModelfv(GL_LIGHT_MODEL_TWO_SIDE, lmodel_oneside); - glutSetWindowTitle("One-sided lighting"); - glutPostRedisplay(); - break; - case 1: - glLightModelfv(GL_LIGHT_MODEL_TWO_SIDE, lmodel_twoside); - glutSetWindowTitle("Two-sided lighting"); - glutPostRedisplay(); - break; - } -} - -void -resize(int w, int h) -{ - glViewport(0, 0, w, h); - setMatrix(); -} - -void -initLightAndMaterial(void) -{ - static float ambient[] = - {0.1, 0.1, 0.1, 1.0}; - static float diffuse[] = - {0.5, 1.0, 1.0, 1.0}; - static float position[] = - {90.0, 90.0, 150.0, 0.0}; - - static float front_mat_shininess[] = - {60.0}; - static float front_mat_specular[] = - {0.2, 0.2, 0.2, 1.0}; - static float front_mat_diffuse[] = - {0.5, 0.5, 0.28, 1.0}; - static float back_mat_shininess[] = - {60.0}; - static float back_mat_specular[] = - {0.5, 0.5, 0.2, 1.0}; - static float back_mat_diffuse[] = - {1.0, 0.9, 0.2, 1.0}; - - static float lmodel_ambient[] = - {1.0, 1.0, 1.0, 1.0}; - - setMatrix(); - glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_LEQUAL); - - glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); - glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); - glLightfv(GL_LIGHT0, GL_POSITION, position); - - glMaterialfv(GL_FRONT, GL_SHININESS, front_mat_shininess); - glMaterialfv(GL_FRONT, GL_SPECULAR, front_mat_specular); - glMaterialfv(GL_FRONT, GL_DIFFUSE, front_mat_diffuse); - glMaterialfv(GL_BACK, GL_SHININESS, back_mat_shininess); - glMaterialfv(GL_BACK, GL_SPECULAR, back_mat_specular); - glMaterialfv(GL_BACK, GL_DIFFUSE, back_mat_diffuse); - - glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); - glLightModelfv(GL_LIGHT_MODEL_TWO_SIDE, lmodel_twoside); - - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glShadeModel(GL_SMOOTH); -} diff --git a/lib/glut-3.7.6/progs/examples/olight.dsp b/lib/glut-3.7.6/progs/examples/olight.dsp deleted file mode 100644 index b33e54375..000000000 --- a/lib/glut-3.7.6/progs/examples/olight.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="olight" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=olight - 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 "olight.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 "olight.mak" CFG="olight - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "olight - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "olight - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "olight - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "olight - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "olight - Win32 Release" -# Name "olight - Win32 Debug" -# Begin Source File - -SOURCE=.\olight.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/olympic.c b/lib/glut-3.7.6/progs/examples/olympic.c deleted file mode 100644 index e5c75f008..000000000 --- a/lib/glut-3.7.6/progs/examples/olympic.c +++ /dev/null @@ -1,412 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1994. */ - -/** - * (c) Copyright 1993, 1994, 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 -#include -#include -#include -#include - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -#ifdef _WIN32 -#define drand48() (((float) rand())/((float) RAND_MAX)) -#define srand48(x) (srand((x))) -#else -extern double drand48(void); -extern void srand48(long seedval); -#endif - -#define XSIZE 100 -#define YSIZE 75 - -#define RINGS 5 -#define BLUERING 0 -#define BLACKRING 1 -#define REDRING 2 -#define YELLOWRING 3 -#define GREENRING 4 - -#define BACKGROUND 8 - -enum { - BLACK = 0, - RED, - GREEN, - YELLOW, - BLUE, - MAGENTA, - CYAN, - WHITE -}; - -typedef short Point[2]; - -GLenum rgb, doubleBuffer, directRender; - -unsigned char rgb_colors[RINGS][3]; -int mapped_colors[RINGS]; -float dests[RINGS][3]; -float offsets[RINGS][3]; -float angs[RINGS]; -float rotAxis[RINGS][3]; -int iters[RINGS]; -GLuint theTorus; - -void -FillTorus(float rc, int numc, float rt, int numt) -{ - int i, j, k; - double s, t; - double x, y, z; - double pi, twopi; - - pi = M_PI; - twopi = 2 * pi; - - for (i = 0; i < numc; i++) { - glBegin(GL_QUAD_STRIP); - for (j = 0; j <= numt; j++) { - for (k = 1; k >= 0; k--) { - s = (i + k) % numc + 0.5; - t = j % numt; - - x = cos(t * twopi / numt) * cos(s * twopi / numc); - y = sin(t * twopi / numt) * cos(s * twopi / numc); - z = sin(s * twopi / numc); - glNormal3f(x, y, z); - - x = (rt + rc * cos(s * twopi / numc)) * cos(t * twopi / numt); - y = (rt + rc * cos(s * twopi / numc)) * sin(t * twopi / numt); - z = rc * sin(s * twopi / numc); - glVertex3f(x, y, z); - } - } - glEnd(); - } -} - -float -Clamp(int iters_left, float t) -{ - - if (iters_left < 3) { - return 0.0; - } - return (iters_left - 2) * t / iters_left; -} - -void -Idle(void) -{ - int i, j; - int more = GL_FALSE; - - for (i = 0; i < RINGS; i++) { - if (iters[i]) { - for (j = 0; j < 3; j++) { - offsets[i][j] = Clamp(iters[i], offsets[i][j]); - } - angs[i] = Clamp(iters[i], angs[i]); - iters[i]--; - more = GL_TRUE; - } - } - if (more) { - glutPostRedisplay(); - } else { - glutIdleFunc(NULL); - } -} - -void -DrawScene(void) -{ - int i; - - glPushMatrix(); - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - gluLookAt(0, 0, 10, 0, 0, 0, 0, 1, 0); - - for (i = 0; i < RINGS; i++) { - if (rgb) { - glColor3ubv(rgb_colors[i]); - } else { - glIndexi(mapped_colors[i]); - } - glPushMatrix(); - glTranslatef(dests[i][0] + offsets[i][0], dests[i][1] + offsets[i][1], - dests[i][2] + offsets[i][2]); - glRotatef(angs[i], rotAxis[i][0], rotAxis[i][1], rotAxis[i][2]); - glCallList(theTorus); - glPopMatrix(); - } - - glPopMatrix(); - if (doubleBuffer) { - glutSwapBuffers(); - } else { - glFlush(); - } -} - -float -MyRand(void) -{ - return 10.0 * (drand48() - 0.5); -} - -void -ReInit(void) -{ - int i; - float deviation; - - deviation = MyRand() / 2; - deviation = deviation * deviation; - for (i = 0; i < RINGS; i++) { - offsets[i][0] = MyRand(); - offsets[i][1] = MyRand(); - offsets[i][2] = MyRand(); - angs[i] = 260.0 * MyRand(); - rotAxis[i][0] = MyRand(); - rotAxis[i][1] = MyRand(); - rotAxis[i][2] = MyRand(); - iters[i] = (deviation * MyRand() + 60.0); - } -} - -void -Init(void) -{ - int i; - float top_y = 1.0; - float bottom_y = 0.0; - float top_z = 0.15; - float bottom_z = 0.69; - float spacing = 2.5; - static float lmodel_ambient[] = - {0.0, 0.0, 0.0, 0.0}; - static float lmodel_twoside[] = - {GL_FALSE}; - static float lmodel_local[] = - {GL_FALSE}; - static float light0_ambient[] = - {0.1, 0.1, 0.1, 1.0}; - static float light0_diffuse[] = - {1.0, 1.0, 1.0, 0.0}; - static float light0_position[] = - {0.8660254, 0.5, 1, 0}; - static float light0_specular[] = - {1.0, 1.0, 1.0, 0.0}; - static float bevel_mat_ambient[] = - {0.0, 0.0, 0.0, 1.0}; - static float bevel_mat_shininess[] = - {40.0}; - static float bevel_mat_specular[] = - {1.0, 1.0, 1.0, 0.0}; - static float bevel_mat_diffuse[] = - {1.0, 0.0, 0.0, 0.0}; - - srand48(0x102342); - ReInit(); - for (i = 0; i < RINGS; i++) { - rgb_colors[i][0] = rgb_colors[i][1] = rgb_colors[i][2] = 0; - } - rgb_colors[BLUERING][2] = 255; - rgb_colors[REDRING][0] = 255; - rgb_colors[GREENRING][1] = 255; - rgb_colors[YELLOWRING][0] = 255; - rgb_colors[YELLOWRING][1] = 255; - mapped_colors[BLUERING] = BLUE; - mapped_colors[REDRING] = RED; - mapped_colors[GREENRING] = GREEN; - mapped_colors[YELLOWRING] = YELLOW; - mapped_colors[BLACKRING] = BLACK; - - dests[BLUERING][0] = -spacing; - dests[BLUERING][1] = top_y; - dests[BLUERING][2] = top_z; - - dests[BLACKRING][0] = 0.0; - dests[BLACKRING][1] = top_y; - dests[BLACKRING][2] = top_z; - - dests[REDRING][0] = spacing; - dests[REDRING][1] = top_y; - dests[REDRING][2] = top_z; - - dests[YELLOWRING][0] = -spacing / 2.0; - dests[YELLOWRING][1] = bottom_y; - dests[YELLOWRING][2] = bottom_z; - - dests[GREENRING][0] = spacing / 2.0; - dests[GREENRING][1] = bottom_y; - dests[GREENRING][2] = bottom_z; - - theTorus = glGenLists(1); - glNewList(theTorus, GL_COMPILE); - FillTorus(0.1, 8, 1.0, 25); - glEndList(); - - glEnable(GL_CULL_FACE); - glCullFace(GL_BACK); - glEnable(GL_DEPTH_TEST); - glClearDepth(1.0); - - if (rgb) { - glClearColor(0.5, 0.5, 0.5, 0.0); - glLightfv(GL_LIGHT0, GL_AMBIENT, light0_ambient); - glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_diffuse); - glLightfv(GL_LIGHT0, GL_SPECULAR, light0_specular); - glLightfv(GL_LIGHT0, GL_POSITION, light0_position); - glEnable(GL_LIGHT0); - - glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, lmodel_local); - glLightModelfv(GL_LIGHT_MODEL_TWO_SIDE, lmodel_twoside); - glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); - glEnable(GL_LIGHTING); - - glMaterialfv(GL_FRONT, GL_AMBIENT, bevel_mat_ambient); - glMaterialfv(GL_FRONT, GL_SHININESS, bevel_mat_shininess); - glMaterialfv(GL_FRONT, GL_SPECULAR, bevel_mat_specular); - glMaterialfv(GL_FRONT, GL_DIFFUSE, bevel_mat_diffuse); - - glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE); - glEnable(GL_COLOR_MATERIAL); - glShadeModel(GL_SMOOTH); - } else { - glClearIndex(BACKGROUND); - glShadeModel(GL_FLAT); - } - - glMatrixMode(GL_PROJECTION); - gluPerspective(45, 1.33, 0.1, 100.0); - glMatrixMode(GL_MODELVIEW); -} - -void -Reshape(int width, int height) -{ - glViewport(0, 0, width, height); -} - -/* ARGSUSED1 */ -void -Key(unsigned char key, int x, int y) -{ - - switch (key) { - case 27: - exit(0); - break; - case ' ': - ReInit(); - glutIdleFunc(Idle); - break; - } -} - -GLenum -Args(int argc, char **argv) -{ - GLint i; - - rgb = GL_TRUE; - doubleBuffer = GL_TRUE; - - for (i = 1; i < argc; i++) { - if (strcmp(argv[i], "-ci") == 0) { - rgb = GL_FALSE; - } else if (strcmp(argv[i], "-rgb") == 0) { - rgb = GL_TRUE; - } else if (strcmp(argv[i], "-sb") == 0) { - doubleBuffer = GL_FALSE; - } else if (strcmp(argv[i], "-db") == 0) { - doubleBuffer = GL_TRUE; - } else { - printf("%s (Bad option).\n", argv[i]); - return GL_FALSE; - } - } - return GL_TRUE; -} - -void -visible(int vis) -{ - if (vis == GLUT_VISIBLE) { - glutIdleFunc(Idle); - } else { - glutIdleFunc(NULL); - } -} - -int -main(int argc, char **argv) -{ - GLenum type; - - glutInitWindowSize(400, 300); - glutInit(&argc, argv); - if (Args(argc, argv) == GL_FALSE) { - exit(1); - } - type = (rgb) ? GLUT_RGB : GLUT_INDEX; - type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; - glutInitDisplayMode(type); - - glutCreateWindow("Olympic"); - - Init(); - - glutReshapeFunc(Reshape); - glutKeyboardFunc(Key); - glutDisplayFunc(DrawScene); - - glutVisibilityFunc(visible); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/examples/olympic.dsp b/lib/glut-3.7.6/progs/examples/olympic.dsp deleted file mode 100644 index 07e63cc73..000000000 --- a/lib/glut-3.7.6/progs/examples/olympic.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="olympic" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=olympic - 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 "olympic.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 "olympic.mak" CFG="olympic - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "olympic - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "olympic - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "olympic - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "olympic - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "olympic - Win32 Release" -# Name "olympic - Win32 Debug" -# Begin Source File - -SOURCE=.\olympic.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/origami.c b/lib/glut-3.7.6/progs/examples/origami.c deleted file mode 100644 index 7da4bc036..000000000 --- a/lib/glut-3.7.6/progs/examples/origami.c +++ /dev/null @@ -1,403 +0,0 @@ - -/* 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 -#include -#include - -/* Uses EXT_polygon_offset extension if available to better - render the fold outlines. */ - -#if GL_EXT_polygon_offset -int polygon_offset; -#endif - -enum { - FLAT, /* completely flat sheet of paper */ - FLAP1, /* left flap being folded in */ - FLAP2, /* right flap being folded int */ - CENTER2, /* right side folded up at center */ - WING2, /* right wing folded down */ - CENTER1, /* left side folded up at center */ - WING1, /* left wing folded down */ - FOLDED /* fully folded paper airplane */ -} States; - -int motion = 1; -int spinning = 1; -int state = FLAT; -int click = 0; -int delay = 0; -int direction; -float flap1_angle = 0; -float flap2_angle = 0; -float center1_angle = 0; -float center2_angle = 0; -float wing1_angle = 0; -float wing2_angle = 0; - -/** - -These correspond to the polygons for the paper sections: - - +----------+----------+ - | /|\ | - | 2 / | \ 3 | - | / | \ | - +------/ | \------+ - | /| | |\ | - | 1 / | | | \ 4 | - | / | | | \ | - | / | | | \ | - | / | 5 | 6 | \ | - |/ | | | \| - + | | | + - | 7 | | | 8 | - | | | | | - | | | | | - | | | | | - | | | | | - | | | | | - | | | | | - +------+---+---+------+ - -*/ - -typedef GLfloat Point[2]; - -Point poly1[] = -{ - {-1, 0}, - {-1 / 3.0, 2 / 3.0}, - {-1, 2 / 3.0} -}; - -Point poly2[] = -{ - {-1, 1}, - {-1, 2 / 3.0}, - {-1 / 3.0, 2 / 3.0}, - {0, 1} -}; - -Point poly3[] = -{ - {0, 1}, - {1, 1}, - {1, 2 / 3.0}, - {1 / 3.0, 2 / 3.0} -}; - -Point poly4[] = -{ - {1 / 3.0, 2 / 3.0}, - {1, 2 / 3.0}, - {1, 0} -}; - -Point poly5[] = -{ - {-1 / 3.0, 2 / 3.0}, - {0, 1}, - {0, -1.5}, - {-1 / 3.0, -1.5} -}; - -Point poly6[] = -{ - {0, 1}, - {1 / 3.0, 2 / 3.0}, - {1 / 3.0, -1.5}, - {0, -1.5} -}; - -Point poly7[] = -{ - {-1, 0}, - {-1 / 3.0, 2 / 3.0}, - {-1 / 3.0, -1.5}, - {-1, -1.5} -}; - -Point poly8[] = -{ - {1, 0}, - {1 / 3.0, 2 / 3.0}, - {1 / 3.0, -1.5}, - {1, -1.5} -}; - -void -polydlist(int dlist, int num, Point points[]) -{ - int i; - - glNewList(dlist, GL_COMPILE); - glBegin(GL_POLYGON); - for (i = 0; i < num; i++) { - glVertex2fv(&points[i][0]); - } - glEnd(); - glEndList(); -} - -void -idle(void) -{ - if (spinning) - click++; - switch (state) { - case FLAT: - delay++; - if (delay >= 80) { - delay = 0; - state = FLAP1; - glutSetWindowTitle("origami (folding)"); - direction = 1; - } - break; - case FLAP1: - flap1_angle += 2 * direction; - if (flap1_angle >= 180) { - state = FLAP2; - } else if (flap1_angle <= 0) { - state = FLAT; - } - break; - case FLAP2: - flap2_angle += 2 * direction; - if (flap2_angle >= 180) { - state = CENTER2; - } else if (flap2_angle <= 0) { - state = FLAP1; - } - break; - case CENTER2: - center2_angle += 2 * direction; - if (center2_angle >= 84) { - state = WING2; - } else if (center2_angle <= 0) { - state = FLAP2; - } - break; - case WING2: - wing2_angle += 2 * direction; - if (wing2_angle >= 84) { - state = CENTER1; - } else if (wing2_angle <= 0) { - state = CENTER2; - } - break; - case CENTER1: - center1_angle += 2 * direction; - if (center1_angle >= 84) { - state = WING1; - } else if (center1_angle <= 0) { - state = WING2; - } - break; - case WING1: - wing1_angle += 2 * direction; - if (wing1_angle >= 84) { - state = FOLDED; - } else if (wing1_angle <= 0) { - state = CENTER1; - } - break; - case FOLDED: - delay++; - if (delay >= 80) { - delay = 0; - glutSetWindowTitle("origami (unfolding)"); - direction = -1; - state = WING1; - } - break; - } - glutPostRedisplay(); -} - -void -draw_folded_plane(void) -{ - /* *INDENT-OFF* */ - glPushMatrix(); - glRotatef(click, 0, 0, 1); - glRotatef(click / 5.0, 0, 1, 0); - glTranslatef(0, .25, 0); - glPushMatrix(); - glRotatef(center1_angle, 0, 1, 0); - glPushMatrix(); - glTranslatef(-.5, .5, 0); - glRotatef(flap1_angle, 1, 1, 0); - glTranslatef(.5, -.5, 0); - glCallList(2); - glPopMatrix(); - glCallList(5); - - glPushMatrix(); - glTranslatef(-1 / 3.0, 0, 0); - glRotatef(-wing1_angle, 0, 1, 0); - glTranslatef(1 / 3.0, 0, 0); - - glCallList(7); - glPushMatrix(); - glTranslatef(-.5, .5, 0); - glRotatef(flap1_angle, 1, 1, 0); - glTranslatef(.5, -.5, 0); - glCallList(1); - glPopMatrix(); - glPopMatrix(); - glPopMatrix(); - - glPushMatrix(); - glRotatef(-center2_angle, 0, 1, 0); - glPushMatrix(); - glTranslatef(.5, .5, 0); - glRotatef(-flap2_angle, -1, 1, 0); - glTranslatef(-.5, -.5, 0); - glCallList(3); - glPopMatrix(); - glCallList(6); - - glPushMatrix(); - glTranslatef(1 / 3.0, 0, 0); - glRotatef(wing2_angle, 0, 1, 0); - glTranslatef(-1 / 3.0, 0, 0); - - glCallList(8); - glPushMatrix(); - glTranslatef(.5, .5, 0); - glRotatef(-flap2_angle, -1, 1, 0); - glTranslatef(-.5, -.5, 0); - glCallList(4); - glPopMatrix(); - glPopMatrix(); - glPopMatrix(); - glPopMatrix(); - /* *INDENT-ON* */ - -} - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - glColor3ub(67, 205, 128); -#if GL_EXT_polygon_offset - if (polygon_offset) { - glPolygonOffsetEXT(0.5, 0.0); - glEnable(GL_POLYGON_OFFSET_EXT); - } -#endif - draw_folded_plane(); - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - glColor3ub(255, 255, 255); -#if GL_EXT_polygon_offset - if (polygon_offset) { - glPolygonOffsetEXT(0.0, 0.0); - /* XXX a bug in the unpatched IRIX 5.3 OpenGL posts - GL_INVALID_ENUM when GL_POLYGON_OFFSET_EXT is disabled; - please ignore it. */ - glDisable(GL_POLYGON_OFFSET_EXT); - } else { - glPushMatrix(); - glTranslatef(0, 0, .05); - } -#else - glPushMatrix(); - glTranslatef(0, 0, .05); -#endif - draw_folded_plane(); -#if GL_EXT_polygon_offset - if (!polygon_offset) { - glPopMatrix(); - } -#else - glPopMatrix(); -#endif - glutSwapBuffers(); -} - -void -visible(int state) -{ - if (state == GLUT_VISIBLE) { - if (motion) - glutIdleFunc(idle); - } else { - glutIdleFunc(NULL); - } -} - -void -menu(int value) -{ - switch (value) { - case 1: - direction = -direction; - if (direction > 0) { - glutSetWindowTitle("origami (folding)"); - } else { - glutSetWindowTitle("origami (unfolding)"); - } - break; - case 2: - motion = 1 - motion; - if (motion) { - glutIdleFunc(idle); - } else { - glutIdleFunc(NULL); - } - break; - case 3: - spinning = 1 - spinning; - break; - case 666: - exit(0); - } -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); - glutCreateWindow("origami"); - glutDisplayFunc(display); - glutVisibilityFunc(visible); - glClearColor(.488, .617, .75, 1.0); - glMatrixMode(GL_PROJECTION); - gluPerspective(40.0, 1.0, 0.1, 10.0); - glMatrixMode(GL_MODELVIEW); - gluLookAt(0, 0, 5.5, - 0, 0, 0, - 0, 1, 0); - glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_LEQUAL); - glLineWidth(2.0); - polydlist(1, sizeof(poly1) / sizeof(Point), poly1); - polydlist(2, sizeof(poly2) / sizeof(Point), poly2); - polydlist(3, sizeof(poly3) / sizeof(Point), poly3); - polydlist(4, sizeof(poly4) / sizeof(Point), poly4); - polydlist(5, sizeof(poly5) / sizeof(Point), poly5); - polydlist(6, sizeof(poly6) / sizeof(Point), poly6); - polydlist(7, sizeof(poly7) / sizeof(Point), poly7); - polydlist(8, sizeof(poly8) / sizeof(Point), poly8); - glutCreateMenu(menu); - glutAddMenuEntry("Reverse direction", 1); - glutAddMenuEntry("Toggle motion", 2); - glutAddMenuEntry("Toggle spinning", 3); - glutAddMenuEntry("Quit", 666); - glutAttachMenu(GLUT_RIGHT_BUTTON); -#if GL_EXT_polygon_offset - polygon_offset = glutExtensionSupported("GL_EXT_polygon_offset"); -#endif - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/examples/origami.dsp b/lib/glut-3.7.6/progs/examples/origami.dsp deleted file mode 100644 index d517c453a..000000000 --- a/lib/glut-3.7.6/progs/examples/origami.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="origami" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=origami - 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 "origami.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 "origami.mak" CFG="origami - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "origami - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "origami - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "origami - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "origami - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "origami - Win32 Release" -# Name "origami - Win32 Debug" -# Begin Source File - -SOURCE=.\origami.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/oversphere.c b/lib/glut-3.7.6/progs/examples/oversphere.c deleted file mode 100644 index e186fdec4..000000000 --- a/lib/glut-3.7.6/progs/examples/oversphere.c +++ /dev/null @@ -1,210 +0,0 @@ - -/* 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 -#include -#include - -#define MAX_SPHERES 50 - -typedef struct { - GLfloat x, y, z; - int detail; - int material; -} SphereInfo; -/* *INDENT-OFF* */ - -GLfloat lightPos[4] = {2.0, 4.0, 2.0, 1.0}; -GLfloat lightDir[4] = {-2.0, -4.0, -2.0, 1.0}; -GLfloat lightAmb[4] = {0.2, 0.2, 0.2, 1.0}; -GLfloat lightDiff[4] = {0.8, 0.8, 0.8, 1.0}; -GLfloat lightSpec[4] = {0.4, 0.4, 0.4, 1.0}; -GLfloat matColor[3][4] = { - {0.5, 0.0, 0.0, 1.0}, - {0.0, 0.5, 0.0, 1.0}, - {0.0, 0.0, 0.5, 1.0}, -}; -/* *INDENT-ON* */ - -GLdouble modelMatrix[16], projMatrix[16]; -GLint viewport[4]; -int width, height; -int opaque, transparent; -SphereInfo sphereInfo[MAX_SPHERES]; -int spheres = 0; -SphereInfo overlaySphere, oldOverlaySphere; - -void -drawSphere(SphereInfo * sphere) -{ - glPushMatrix(); - glTranslatef(sphere->x, sphere->y, sphere->z); - glMaterialfv(GL_FRONT_AND_BACK, - GL_AMBIENT_AND_DIFFUSE, matColor[sphere->material]); - glutSolidSphere(1.0, sphere->detail, sphere->detail); - glPopMatrix(); -} - -void -display(void) -{ - int i; - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - for (i = 0; i < spheres; i++) { - drawSphere(&sphereInfo[i]); - } - glutSwapBuffers(); -} - -void -overlayDisplay(void) -{ - if (glutLayerGet(GLUT_OVERLAY_DAMAGED)) { - /* If damaged, clear the overlay. */ - glClear(GL_COLOR_BUFFER_BIT); - } else { - /* If not damaged, undraw last overlay sphere. */ - glIndexi(transparent); - drawSphere(&oldOverlaySphere); - } - glIndexi(opaque); - drawSphere(&overlaySphere); - /* Single buffered window needs flush. */ - glFlush(); - /* Remember last overaly sphere position for undrawing. */ - oldOverlaySphere = overlaySphere; -} - -void -reshape(int w, int h) -{ - width = w; - height = h; - /* Reshape both layers. */ - glutUseLayer(GLUT_OVERLAY); - glViewport(0, 0, w, h); - glutUseLayer(GLUT_NORMAL); - glViewport(0, 0, w, h); - /* Read back viewport for gluUnProject. */ - glGetIntegerv(GL_VIEWPORT, viewport); -} - -void -mouse(int button, int state, int x, int y) -{ - GLdouble objx, objy, objz; - - gluUnProject(x, height - y, 0.95, - modelMatrix, projMatrix, viewport, - &objx, &objy, &objz); - overlaySphere.x = objx; - overlaySphere.y = objy; - overlaySphere.z = objz; - overlaySphere.material = button; - glutUseLayer(GLUT_OVERLAY); - glutSetColor(opaque, - 2 * matColor[button][0], /* Red. */ - 2 * matColor[button][1], /* Green. */ - 2 * matColor[button][2]); /* Blue. */ - if (state == GLUT_UP) { - glutHideOverlay(); - if (spheres < MAX_SPHERES) { - sphereInfo[spheres] = overlaySphere; - sphereInfo[spheres].detail = 25; /* Fine tesselation. */ - spheres++; - } else { - printf("oversphere: Out of spheres.\n"); - } - glutPostRedisplay(); - } else { - overlaySphere.detail = 10; /* Coarse tesselation. */ - glutShowOverlay(); - glutPostOverlayRedisplay(); - } -} - -void -motion(int x, int y) -{ - GLdouble objx, objy, objz; - - gluUnProject(x, height - y, 0.95, - modelMatrix, projMatrix, viewport, - &objx, &objy, &objz); - overlaySphere.x = objx; - overlaySphere.y = objy; - overlaySphere.z = objz; - glutPostOverlayRedisplay(); -} - -void -setupMatrices(void) -{ - glMatrixMode(GL_PROJECTION); - gluPerspective( /* degrees field of view */ 50.0, - /* aspect ratio */ 1.0, /* Z near */ 1.0, /* Z far */ 10.0); - glMatrixMode(GL_MODELVIEW); - gluLookAt( - 0.0, 0.0, 5.0, /* eye is at (0,0,5) */ - 0.0, 0.0, 0.0, /* center is at (0,0,0) */ - 0.0, 1.0, 0.); /* up is in positive Y direction */ -} - -int -main(int argc, char **argv) -{ - glutInitWindowSize(350, 350); - glutInit(&argc, argv); - - glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); - glutCreateWindow("Overlay Sphere Positioning Demo"); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glutMouseFunc(mouse); - glutMotionFunc(motion); - - glEnable(GL_DEPTH_TEST); - glEnable(GL_CULL_FACE); /* Solid spheres benefit greatly - from back face culling. */ - setupMatrices(); - /* Read back matrices for use by gluUnProject. */ - glGetDoublev(GL_MODELVIEW_MATRIX, modelMatrix); - glGetDoublev(GL_PROJECTION_MATRIX, projMatrix); - - /* Set up lighting. */ - glLightfv(GL_LIGHT0, GL_POSITION, lightPos); - glLightfv(GL_LIGHT0, GL_AMBIENT, lightAmb); - glLightfv(GL_LIGHT0, GL_DIFFUSE, lightDiff); - glLightfv(GL_LIGHT0, GL_SPECULAR, lightSpec); - glEnable(GL_LIGHT0); - glEnable(GL_LIGHTING); - - glutInitDisplayMode(GLUT_INDEX | GLUT_SINGLE); - if (glutLayerGet(GLUT_OVERLAY_POSSIBLE) == 0) { - printf("oversphere: no overlays supported; aborting.\n"); - exit(1); - } - glutEstablishOverlay(); - glutHideOverlay(); - glutOverlayDisplayFunc(overlayDisplay); - - /* Find transparent and opaque index. */ - transparent = glutLayerGet(GLUT_TRANSPARENT_INDEX); - opaque = (transparent + 1) - % glutGet(GLUT_WINDOW_COLORMAP_SIZE); - - /* Draw overlay sphere as an outline. */ - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - /* Make sure overlay clears to transparent. */ - glClearIndex(transparent); - /* Set up overlay matrices same as normal plane. */ - setupMatrices(); - - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/examples/oversphere.dsp b/lib/glut-3.7.6/progs/examples/oversphere.dsp deleted file mode 100644 index fbff291e1..000000000 --- a/lib/glut-3.7.6/progs/examples/oversphere.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="oversphere" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=oversphere - 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 "oversphere.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 "oversphere.mak" CFG="oversphere - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "oversphere - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "oversphere - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "oversphere - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "oversphere - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "oversphere - Win32 Release" -# Name "oversphere - Win32 Debug" -# Begin Source File - -SOURCE=.\oversphere.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/reflectdino.c b/lib/glut-3.7.6/progs/examples/reflectdino.c deleted file mode 100644 index 8111a36cb..000000000 --- a/lib/glut-3.7.6/progs/examples/reflectdino.c +++ /dev/null @@ -1,405 +0,0 @@ - -/* 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. */ - -/* Very simple example of how to achieve reflections on a flat - surface using OpenGL blending. The example has a mode using - OpenGL stenciling to avoid drawing the reflection not on the top of the - floor. Initially, stenciling is not used so if you look (by holding - down the left mouse button and moving) at the dinosaur from "below" - the floor, you'll see a bogus dinosaur and appreciate how the basic - technique works. Enable stenciling with the popup menu and the - bogus dinosaur goes away! Also, notice that OpenGL lighting works - correctly with reflections. */ - -/* Check out the comments in the "redraw" routine to see how the - reflection blending and surface stenciling is done. */ - -/* This program is derived from glutdino.c */ - -/* Compile: cc -o reflectdino reflectdino.c -lglut -lGLU -lGL -lXmu -lXext -lX11 -lm */ - -#include -#include -#include -#include /* for cos(), sin(), and sqrt() */ -#include - -typedef enum { - RESERVED, BODY_SIDE, BODY_EDGE, BODY_WHOLE, ARM_SIDE, ARM_EDGE, ARM_WHOLE, - LEG_SIDE, LEG_EDGE, LEG_WHOLE, EYE_SIDE, EYE_EDGE, EYE_WHOLE -} displayLists; - -GLfloat angle = 20; /* in degrees */ -GLfloat angle2 = 30; /* in degrees */ -int moving, startx, starty; -int W = 300, H = 300; -int useStencil = 0; /* Initially, allow the artifacts. */ -GLdouble bodyWidth = 3.0; -float jump = 0.0; -/* *INDENT-OFF* */ -GLfloat body[][2] = { {0, 3}, {1, 1}, {5, 1}, {8, 4}, {10, 4}, {11, 5}, - {11, 11.5}, {13, 12}, {13, 13}, {10, 13.5}, {13, 14}, {13, 15}, {11, 16}, - {8, 16}, {7, 15}, {7, 13}, {8, 12}, {7, 11}, {6, 6}, {4, 3}, {3, 2}, - {1, 2} }; -GLfloat arm[][2] = { {8, 10}, {9, 9}, {10, 9}, {13, 8}, {14, 9}, {16, 9}, - {15, 9.5}, {16, 10}, {15, 10}, {15.5, 11}, {14.5, 10}, {14, 11}, {14, 10}, - {13, 9}, {11, 11}, {9, 11} }; -GLfloat leg[][2] = { {8, 6}, {8, 4}, {9, 3}, {9, 2}, {8, 1}, {8, 0.5}, {9, 0}, - {12, 0}, {10, 1}, {10, 2}, {12, 4}, {11, 6}, {10, 7}, {9, 7} }; -GLfloat eye[][2] = { {8.75, 15}, {9, 14.7}, {9.6, 14.7}, {10.1, 15}, - {9.6, 15.25}, {9, 15.25} }; -GLfloat lightZeroPosition[] = {10.0, 14.0, 10.0, 1.0}; -GLfloat lightZeroColor[] = {0.8, 1.0, 0.8, 1.0}; /* green-tinted */ -GLfloat lightOnePosition[] = {-1.0, 1.0, 1.0, 0.0}; -GLfloat lightOneColor[] = {0.6, 0.3, 0.2, 1.0}; /* red-tinted */ -GLfloat skinColor[] = {0.1, 1.0, 0.1, 1.0}, eyeColor[] = {1.0, 0.2, 0.2, 1.0}; -/* *INDENT-ON* */ - -void -extrudeSolidFromPolygon(GLfloat data[][2], unsigned int dataSize, - GLdouble thickness, GLuint side, GLuint edge, GLuint whole) -{ - static GLUtriangulatorObj *tobj = NULL; - GLdouble vertex[3], dx, dy, len; - int i; - int count = dataSize / (int) (2 * sizeof(GLfloat)); - - if (tobj == NULL) { - tobj = gluNewTess(); /* create and initialize a GLU - polygon tesselation object */ - gluTessCallback(tobj, GLU_BEGIN, glBegin); - gluTessCallback(tobj, GLU_VERTEX, glVertex2fv); /* semi-tricky */ - gluTessCallback(tobj, GLU_END, glEnd); - } - glNewList(side, GL_COMPILE); - glShadeModel(GL_SMOOTH); /* smooth minimizes seeing - tessellation */ - gluBeginPolygon(tobj); - for (i = 0; i < count; i++) { - vertex[0] = data[i][0]; - vertex[1] = data[i][1]; - vertex[2] = 0; - gluTessVertex(tobj, vertex, data[i]); - } - gluEndPolygon(tobj); - glEndList(); - glNewList(edge, GL_COMPILE); - glShadeModel(GL_FLAT); /* flat shade keeps angular hands - from being "smoothed" */ - glBegin(GL_QUAD_STRIP); - for (i = 0; i <= count; i++) { - /* mod function handles closing the edge */ - glVertex3f(data[i % count][0], data[i % count][1], 0.0); - glVertex3f(data[i % count][0], data[i % count][1], thickness); - /* Calculate a unit normal by dividing by Euclidean - distance. We * could be lazy and use - glEnable(GL_NORMALIZE) so we could pass in * arbitrary - normals for a very slight performance hit. */ - dx = data[(i + 1) % count][1] - data[i % count][1]; - dy = data[i % count][0] - data[(i + 1) % count][0]; - len = sqrt(dx * dx + dy * dy); - glNormal3f(dx / len, dy / len, 0.0); - } - glEnd(); - glEndList(); - glNewList(whole, GL_COMPILE); - glFrontFace(GL_CW); - glCallList(edge); - glNormal3f(0.0, 0.0, -1.0); /* constant normal for side */ - glCallList(side); - glPushMatrix(); - glTranslatef(0.0, 0.0, thickness); - glFrontFace(GL_CCW); - glNormal3f(0.0, 0.0, 1.0); /* opposite normal for other side */ - glCallList(side); - glPopMatrix(); - glEndList(); -} - -void -makeDinosaur(void) -{ - extrudeSolidFromPolygon(body, sizeof(body), bodyWidth, - BODY_SIDE, BODY_EDGE, BODY_WHOLE); - extrudeSolidFromPolygon(arm, sizeof(arm), bodyWidth / 4, - ARM_SIDE, ARM_EDGE, ARM_WHOLE); - extrudeSolidFromPolygon(leg, sizeof(leg), bodyWidth / 2, - LEG_SIDE, LEG_EDGE, LEG_WHOLE); - extrudeSolidFromPolygon(eye, sizeof(eye), bodyWidth + 0.2, - EYE_SIDE, EYE_EDGE, EYE_WHOLE); -} - -void -drawDinosaur(void) -{ - glPushMatrix(); - glTranslatef(0.0, jump, 0.0); - glMaterialfv(GL_FRONT, GL_DIFFUSE, skinColor); - glCallList(BODY_WHOLE); - glPushMatrix(); - glTranslatef(0.0, 0.0, bodyWidth); - glCallList(ARM_WHOLE); - glCallList(LEG_WHOLE); - glTranslatef(0.0, 0.0, -bodyWidth - bodyWidth / 4); - glCallList(ARM_WHOLE); - glTranslatef(0.0, 0.0, -bodyWidth / 4); - glCallList(LEG_WHOLE); - glTranslatef(0.0, 0.0, bodyWidth / 2 - 0.1); - glMaterialfv(GL_FRONT, GL_DIFFUSE, eyeColor); - glCallList(EYE_WHOLE); - glPopMatrix(); - glPopMatrix(); -} - -void -drawFloor(void) -{ - glDisable(GL_LIGHTING); - glBegin(GL_QUADS); - glVertex3f(-18.0, 0.0, 27.0); - glVertex3f(27.0, 0.0, 27.0); - glVertex3f(27.0, 0.0, -18.0); - glVertex3f(-18.0, 0.0, -18.0); - glEnd(); - glEnable(GL_LIGHTING); -} - -void -redraw(void) -{ - if (useStencil) { - /* Clear; default stencil clears to zero. */ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); - } else { - /* Not using stencil; just clear color and depth. */ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - } - - glPushMatrix(); - /* Perform scene rotations based on user mouse input. */ - glRotatef(angle2, 1.0, 0.0, 0.0); - glRotatef(angle, 0.0, 1.0, 0.0); - - /* Translate the dinosaur to be at (0,0,0). */ - glTranslatef(-8, -8, -bodyWidth / 2); - - glLightfv(GL_LIGHT0, GL_POSITION, lightZeroPosition); - glLightfv(GL_LIGHT1, GL_POSITION, lightOnePosition); - - if (useStencil) { - - /* We can eliminate the visual "artifact" of seeing the "flipped" - dinosaur underneath the floor by using stencil. The idea is - draw the floor without color or depth update but so that - a stencil value of one is where the floor will be. Later when - rendering the dinosaur reflection, we will only update pixels - with a stencil value of 1 to make sure the reflection only - lives on the floor, not below the floor. */ - - /* Don't update color or depth. */ - glDisable(GL_DEPTH_TEST); - glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); - - /* Draw 1 into the stencil buffer. */ - glEnable(GL_STENCIL_TEST); - glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE); - glStencilFunc(GL_ALWAYS, 1, 0xffffffff); - - /* Now render floor; floor pixels just get their stencil set to 1. */ - drawFloor(); - - /* Re-enable update of color and depth. */ - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - glEnable(GL_DEPTH_TEST); - - /* Now, only render where stencil is set to 1. */ - glStencilFunc(GL_EQUAL, 1, 0xffffffff); /* draw if ==1 */ - glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); - } - - glPushMatrix(); - - /* The critical reflection step: Reflect dinosaur through the floor - (the Y=0 plane) to make a relection. */ - glScalef(1.0, -1.0, 1.0); - - /* Position lights now in reflected space. */ - glLightfv(GL_LIGHT0, GL_POSITION, lightZeroPosition); - glLightfv(GL_LIGHT1, GL_POSITION, lightOnePosition); - - /* XXX Ugh, unfortunately the back face culling reverses when we reflect - the dinosaur. Easy solution is just disable back face culling for - rendering the reflection. Also, the normals for lighting get screwed - up by the scale; enabled normalize to ensure normals are still - properly normalized despite the scaling. We could have fixed the - dinosaur rendering code, but this is more expedient. */ - glEnable(GL_NORMALIZE); - glCullFace(GL_FRONT); - - /* Draw the reflected dinosaur. */ - drawDinosaur(); - - /* Disable noramlize again and re-enable back face culling. */ - glDisable(GL_NORMALIZE); - glCullFace(GL_BACK); - - glPopMatrix(); - - /* Restore light positions on returned from reflected space. */ - glLightfv(GL_LIGHT0, GL_POSITION, lightZeroPosition); - glLightfv(GL_LIGHT1, GL_POSITION, lightOnePosition); - - - if (useStencil) { - /* Don't want to be using stenciling for drawing the actual dinosaur - (not its reflection) and the floor. */ - glDisable(GL_STENCIL_TEST); - } - - /* Back face culling will get used to only draw either the top or the - bottom floor. This let's us get a floor with two distinct - appearances. The top floor surface is reflective and kind of red. - The bottom floor surface is not reflective and blue. */ - - /* Draw "top" of floor. Use blending to blend in reflection. */ - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glColor4f(0.7, 0.0, 0.0, 0.3); - drawFloor(); - glDisable(GL_BLEND); - - /* Draw "bottom" of floor in blue. */ - glFrontFace(GL_CW); /* Switch face orientation. */ - glColor4f(0.1, 0.1, 0.7, 1.0); - drawFloor(); - glFrontFace(GL_CCW); - - /* Draw "actual" dinosaur, not its reflection. */ - drawDinosaur(); - - glPopMatrix(); - - glutSwapBuffers(); -} - -/* ARGSUSED2 */ -void -mouse(int button, int state, int x, int y) -{ - if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) { - moving = 1; - startx = x; - starty = y; - } - if (button == GLUT_LEFT_BUTTON && state == GLUT_UP) { - moving = 0; - } -} - -/* ARGSUSED1 */ -void -motion(int x, int y) -{ - if (moving) { - angle = angle + (x - startx); - angle2 = angle2 + (y - starty); - startx = x; - starty = y; - glutPostRedisplay(); - } -} - -GLboolean lightZeroSwitch = GL_TRUE, lightOneSwitch = GL_TRUE; - -void -controlLights(int value) -{ - switch (value) { - case 1: - lightZeroSwitch = !lightZeroSwitch; - if (lightZeroSwitch) { - glEnable(GL_LIGHT0); - } else { - glDisable(GL_LIGHT0); - } - break; - case 2: - lightOneSwitch = !lightOneSwitch; - if (lightOneSwitch) { - glEnable(GL_LIGHT1); - } else { - glDisable(GL_LIGHT1); - } - break; - case 3: - useStencil = 1 - useStencil; - break; - } - glutPostRedisplay(); -} - -void -idle(void) -{ - static float time; - - time = glutGet(GLUT_ELAPSED_TIME) / 500.0; - - jump = 3.0 * fabs(sin(time)); - glutPostRedisplay(); -} - -void -visible(int vis) -{ - if (vis == GLUT_VISIBLE) - glutIdleFunc(idle); - else - glutIdleFunc(NULL); -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH | GLUT_STENCIL); - glutCreateWindow("Leapin' Lizards"); - glutDisplayFunc(redraw); - glutMouseFunc(mouse); - glutMotionFunc(motion); - glutVisibilityFunc(visible); - glutCreateMenu(controlLights); - glutAddMenuEntry("Toggle right light", 1); - glutAddMenuEntry("Toggle left light", 2); - glutAddMenuEntry("Toggle stenciling out reflection artifacts", 3); - glutAttachMenu(GLUT_RIGHT_BUTTON); - makeDinosaur(); - glEnable(GL_CULL_FACE); - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - glMatrixMode(GL_PROJECTION); - gluPerspective( /* field of view in degree */ 40.0, - /* aspect ratio */ 1.0, - /* Z near */ 1.0, /* Z far */ 80.0); - glMatrixMode(GL_MODELVIEW); - gluLookAt(0.0, 0.0, 40.0, /* eye is at (0,0,30) */ - 0.0, 0.0, 0.0, /* center is at (0,0,0) */ - 0.0, 1.0, 0.); /* up is in postivie Y direction */ - glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, 1); - glLightfv(GL_LIGHT0, GL_DIFFUSE, lightZeroColor); - glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 0.1); - glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 0.05); - glLightfv(GL_LIGHT1, GL_DIFFUSE, lightOneColor); - glEnable(GL_LIGHT0); - glEnable(GL_LIGHT1); - - glLightfv(GL_LIGHT0, GL_POSITION, lightZeroPosition); - glLightfv(GL_LIGHT1, GL_POSITION, lightOnePosition); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/examples/reflectdino.dsp b/lib/glut-3.7.6/progs/examples/reflectdino.dsp deleted file mode 100644 index d95c59c2e..000000000 --- a/lib/glut-3.7.6/progs/examples/reflectdino.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="reflectdino" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=reflectdino - 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 "reflectdino.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 "reflectdino.mak" CFG="reflectdino - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "reflectdino - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "reflectdino - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "reflectdino - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "reflectdino - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "reflectdino - Win32 Release" -# Name "reflectdino - Win32 Debug" -# Begin Source File - -SOURCE=.\reflectdino.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/rendereps.c b/lib/glut-3.7.6/progs/examples/rendereps.c deleted file mode 100644 index 5e91ce9e5..000000000 --- a/lib/glut-3.7.6/progs/examples/rendereps.c +++ /dev/null @@ -1,709 +0,0 @@ - -/* 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. */ - -/* Example showing how to use OpenGL's feedback mode to capture - transformed vertices and output them as Encapsulated PostScript. - Handles limited hidden surface removal by sorting and does - smooth shading (albeit limited due to PostScript). */ - -/* Compile: cc -o rendereps rendereps.c -lglut -lGLU -lGL -lXmu -lXext -lX11 -lm */ - -#include -#include -#include -#include -#include - -/* OpenGL's GL_3D_COLOR feedback vertex format. */ -typedef struct _Feedback3Dcolor { - GLfloat x; - GLfloat y; - GLfloat z; - GLfloat red; - GLfloat green; - GLfloat blue; - GLfloat alpha; -} Feedback3Dcolor; - -int blackBackground = 0; /* Initially use a white background. */ -int lighting = 0; /* Initially disable lighting. */ -int polygonMode = 1; /* Initially show wireframe. */ -int object = 1; /* Initially show the torus. */ - -GLfloat angle = 0.0; /* Angle of rotation for object. */ -int moving, begin; /* For interactive object rotation. */ -int size = 1; /* Size of lines and points. */ - -/* How many feedback buffer GLfloats each of the three objects need. */ -int objectComplexity[3] = -{6000, 14000, 380000}; /* Teapot requires ~1.5 megabytes for - its feedback results! */ - -/* render gets called both by "display" (in OpenGL render mode) - and by "outputEPS" (in OpenGL feedback mode). */ -void -render(void) -{ - glPushMatrix(); - glRotatef(angle, 0.0, 1.0, 0.0); - switch (object) { - case 0: - glutSolidSphere(1.0, 10, 10); - break; - case 1: - glutSolidTorus(0.5, 1.0, 15, 15); - break; - case 2: - glutSolidTeapot(1.0); - break; - } - glPopMatrix(); -} - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - render(); - glutSwapBuffers(); -} - -void -updateBackground(void) -{ - if (blackBackground) { - /* Clear to black. */ - glClearColor(0.0, 0.0, 0.0, 1.0); - } else { - /* Clear to white. */ - glClearColor(1.0, 1.0, 1.0, 1.0); - } -} - -void -updateLighting(void) -{ - if (lighting) { - glEnable(GL_LIGHTING); - } else { - glDisable(GL_LIGHTING); - } -} - -void -updatePolygonMode(void) -{ - switch (polygonMode) { - case 0: - glPolygonMode(GL_FRONT_AND_BACK, GL_POINT); - break; - case 1: - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - break; - case 2: - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - break; - } -} - -/* Write contents of one vertex to stdout. */ -void -print3DcolorVertex(GLint size, GLint * count, - GLfloat * buffer) -{ - int i; - - printf(" "); - for (i = 0; i < 7; i++) { - printf("%4.2f ", buffer[size - (*count)]); - *count = *count - 1; - } - printf("\n"); -} - -void -printBuffer(GLint size, GLfloat * buffer) -{ - GLint count; - int token, nvertices; - - count = size; - while (count) { - token = buffer[size - count]; - count--; - switch (token) { - case GL_PASS_THROUGH_TOKEN: - printf("GL_PASS_THROUGH_TOKEN\n"); - printf(" %4.2f\n", buffer[size - count]); - count--; - break; - case GL_POINT_TOKEN: - printf("GL_POINT_TOKEN\n"); - print3DcolorVertex(size, &count, buffer); - break; - case GL_LINE_TOKEN: - printf("GL_LINE_TOKEN\n"); - print3DcolorVertex(size, &count, buffer); - print3DcolorVertex(size, &count, buffer); - break; - case GL_LINE_RESET_TOKEN: - printf("GL_LINE_RESET_TOKEN\n"); - print3DcolorVertex(size, &count, buffer); - print3DcolorVertex(size, &count, buffer); - break; - case GL_POLYGON_TOKEN: - printf("GL_POLYGON_TOKEN\n"); - nvertices = buffer[size - count]; - count--; - for (; nvertices > 0; nvertices--) { - print3DcolorVertex(size, &count, buffer); - } - } - } -} - -GLfloat pointSize; - -static char *gouraudtriangleEPS[] = -{ - "/bd{bind def}bind def /triangle { aload pop setrgbcolor aload pop 5 3", - "roll 4 2 roll 3 2 roll exch moveto lineto lineto closepath fill } bd", - "/computediff1 { 2 copy sub abs threshold ge {pop pop pop true} { exch 2", - "index sub abs threshold ge { pop pop true} { sub abs threshold ge } ifelse", - "} ifelse } bd /computediff3 { 3 copy 0 get 3 1 roll 0 get 3 1 roll 0 get", - "computediff1 {true} { 3 copy 1 get 3 1 roll 1 get 3 1 roll 1 get", - "computediff1 {true} { 3 copy 2 get 3 1 roll 2 get 3 1 roll 2 get", - "computediff1 } ifelse } ifelse } bd /middlecolor { aload pop 4 -1 roll", - "aload pop 4 -1 roll add 2 div 5 1 roll 3 -1 roll add 2 div 3 1 roll add 2", - "div 3 1 roll exch 3 array astore } bd /gouraudtriangle { computediff3 { 4", - "-1 roll aload 7 1 roll 6 -1 roll pop 3 -1 roll pop add 2 div 3 1 roll add", - "2 div exch 3 -1 roll aload 7 1 roll exch pop 4 -1 roll pop add 2 div 3 1", - "roll add 2 div exch 3 -1 roll aload 7 1 roll pop 3 -1 roll pop add 2 div 3", - "1 roll add 2 div exch 7 3 roll 10 -3 roll dup 3 index middlecolor 4 1 roll", - "2 copy middlecolor 4 1 roll 3 copy pop middlecolor 4 1 roll 13 -1 roll", - "aload pop 17 index 6 index 15 index 19 index 6 index 17 index 6 array", - "astore 10 index 10 index 14 index gouraudtriangle 17 index 5 index 17", - "index 19 index 5 index 19 index 6 array astore 10 index 9 index 13 index", - "gouraudtriangle 13 index 16 index 5 index 15 index 18 index 5 index 6", - "array astore 12 index 12 index 9 index gouraudtriangle 17 index 16 index", - "15 index 19 index 18 index 17 index 6 array astore 10 index 12 index 14", - "index gouraudtriangle 18 {pop} repeat } { aload pop 5 3 roll aload pop 7 3", - "roll aload pop 9 3 roll 4 index 6 index 4 index add add 3 div 10 1 roll 7", - "index 5 index 3 index add add 3 div 10 1 roll 6 index 4 index 2 index add", - "add 3 div 10 1 roll 9 {pop} repeat 3 array astore triangle } ifelse } bd", - NULL -}; - -GLfloat * -spewPrimitiveEPS(FILE * file, GLfloat * loc) -{ - int token; - int nvertices, i; - GLfloat red, green, blue; - int smooth; - GLfloat dx, dy, dr, dg, db, absR, absG, absB, colormax; - int steps; - Feedback3Dcolor *vertex; - GLfloat xstep, ystep, rstep, gstep, bstep; - GLfloat xnext, ynext, rnext, gnext, bnext, distance; - - token = *loc; - loc++; - switch (token) { - case GL_LINE_RESET_TOKEN: - case GL_LINE_TOKEN: - vertex = (Feedback3Dcolor *) loc; - - dr = vertex[1].red - vertex[0].red; - dg = vertex[1].green - vertex[0].green; - db = vertex[1].blue - vertex[0].blue; - - if (dr != 0 || dg != 0 || db != 0) { - /* Smooth shaded line. */ - dx = vertex[1].x - vertex[0].x; - dy = vertex[1].y - vertex[0].y; - distance = sqrt(dx * dx + dy * dy); - - absR = fabs(dr); - absG = fabs(dg); - absB = fabs(db); - -#define Max(a,b) (((a)>(b))?(a):(b)) - -#define EPS_SMOOTH_LINE_FACTOR 0.06 /* Lower for better smooth - - lines. */ - - colormax = Max(absR, Max(absG, absB)); - steps = Max(1.0, colormax * distance * EPS_SMOOTH_LINE_FACTOR); - - xstep = dx / steps; - ystep = dy / steps; - - rstep = dr / steps; - gstep = dg / steps; - bstep = db / steps; - - xnext = vertex[0].x; - ynext = vertex[0].y; - rnext = vertex[0].red; - gnext = vertex[0].green; - bnext = vertex[0].blue; - - /* Back up half a step; we want the end points to be - exactly the their endpoint colors. */ - xnext -= xstep / 2.0; - ynext -= ystep / 2.0; - rnext -= rstep / 2.0; - gnext -= gstep / 2.0; - bnext -= bstep / 2.0; - } else { - /* Single color line. */ - steps = 0; - } - - fprintf(file, "%g %g %g setrgbcolor\n", - vertex[0].red, vertex[0].green, vertex[0].blue); - fprintf(file, "%g %g moveto\n", vertex[0].x, vertex[0].y); - - for (i = 0; i < steps; i++) { - xnext += xstep; - ynext += ystep; - rnext += rstep; - gnext += gstep; - bnext += bstep; - fprintf(file, "%g %g lineto stroke\n", xnext, ynext); - fprintf(file, "%g %g %g setrgbcolor\n", rnext, gnext, bnext); - fprintf(file, "%g %g moveto\n", xnext, ynext); - } - fprintf(file, "%g %g lineto stroke\n", vertex[1].x, vertex[1].y); - - loc += 14; /* Each vertex element in the feedback - buffer is 7 GLfloats. */ - - break; - case GL_POLYGON_TOKEN: - nvertices = *loc; - loc++; - - vertex = (Feedback3Dcolor *) loc; - - if (nvertices > 0) { - red = vertex[0].red; - green = vertex[0].green; - blue = vertex[0].blue; - smooth = 0; - for (i = 1; i < nvertices; i++) { - if (red != vertex[i].red || green != vertex[i].green || blue != vertex[i].blue) { - smooth = 1; - break; - } - } - if (smooth) { - /* Smooth shaded polygon; varying colors at vetices. */ - /* Break polygon into "nvertices-2" triangle fans. */ - for (i = 0; i < nvertices - 2; i++) { - fprintf(file, "[%g %g %g %g %g %g]", - vertex[0].x, vertex[i + 1].x, vertex[i + 2].x, - vertex[0].y, vertex[i + 1].y, vertex[i + 2].y); - fprintf(file, " [%g %g %g] [%g %g %g] [%g %g %g] gouraudtriangle\n", - vertex[0].red, vertex[0].green, vertex[0].blue, - vertex[i + 1].red, vertex[i + 1].green, vertex[i + 1].blue, - vertex[i + 2].red, vertex[i + 2].green, vertex[i + 2].blue); - } - } else { - /* Flat shaded polygon; all vertex colors the same. */ - fprintf(file, "newpath\n"); - fprintf(file, "%g %g %g setrgbcolor\n", red, green, blue); - - /* Draw a filled triangle. */ - fprintf(file, "%g %g moveto\n", vertex[0].x, vertex[0].y); - for (i = 1; i < nvertices; i++) { - fprintf(file, "%g %g lineto\n", vertex[i].x, vertex[i].y); - } - fprintf(file, "closepath fill\n\n"); - } - } - loc += nvertices * 7; /* Each vertex element in the - feedback buffer is 7 GLfloats. */ - break; - case GL_POINT_TOKEN: - vertex = (Feedback3Dcolor *) loc; - fprintf(file, "%g %g %g setrgbcolor\n", vertex[0].red, vertex[0].green, vertex[0].blue); - fprintf(file, "%g %g %g 0 360 arc fill\n\n", vertex[0].x, vertex[0].y, pointSize / 2.0); - loc += 7; /* Each vertex element in the feedback - buffer is 7 GLfloats. */ - break; - default: - /* XXX Left as an excersie to the reader. */ - printf("Incomplete implementation. Unexpected token (%d).\n", token); - exit(1); - } - return loc; -} - -void -spewUnsortedFeedback(FILE * file, GLint size, GLfloat * buffer) -{ - GLfloat *loc, *end; - - loc = buffer; - end = buffer + size; - while (loc < end) { - loc = spewPrimitiveEPS(file, loc); - } -} - -typedef struct _DepthIndex { - GLfloat *ptr; - GLfloat depth; -} DepthIndex; - -static int -compare(const void *a, const void *b) -{ - DepthIndex *p1 = (DepthIndex *) a; - DepthIndex *p2 = (DepthIndex *) b; - GLfloat diff = p2->depth - p1->depth; - - if (diff > 0.0) { - return 1; - } else if (diff < 0.0) { - return -1; - } else { - return 0; - } -} - -void -spewSortedFeedback(FILE * file, GLint size, GLfloat * buffer) -{ - int token; - GLfloat *loc, *end; - Feedback3Dcolor *vertex; - GLfloat depthSum; - int nprimitives, item; - DepthIndex *prims; - int nvertices, i; - - end = buffer + size; - - /* Count how many primitives there are. */ - nprimitives = 0; - loc = buffer; - while (loc < end) { - token = *loc; - loc++; - switch (token) { - case GL_LINE_TOKEN: - case GL_LINE_RESET_TOKEN: - loc += 14; - nprimitives++; - break; - case GL_POLYGON_TOKEN: - nvertices = *loc; - loc++; - loc += (7 * nvertices); - nprimitives++; - break; - case GL_POINT_TOKEN: - loc += 7; - nprimitives++; - break; - default: - /* XXX Left as an excersie to the reader. */ - printf("Incomplete implementation. Unexpected token (%d).\n", - token); - exit(1); - } - } - - /* Allocate an array of pointers that will point back at - primitives in the feedback buffer. There will be one - entry per primitive. This array is also where we keep the - primitive's average depth. There is one entry per - primitive in the feedback buffer. */ - prims = (DepthIndex *) malloc(sizeof(DepthIndex) * nprimitives); - - item = 0; - loc = buffer; - while (loc < end) { - prims[item].ptr = loc; /* Save this primitive's location. */ - token = *loc; - loc++; - switch (token) { - case GL_LINE_TOKEN: - case GL_LINE_RESET_TOKEN: - vertex = (Feedback3Dcolor *) loc; - depthSum = vertex[0].z + vertex[1].z; - prims[item].depth = depthSum / 2.0; - loc += 14; - break; - case GL_POLYGON_TOKEN: - nvertices = *loc; - loc++; - vertex = (Feedback3Dcolor *) loc; - depthSum = vertex[0].z; - for (i = 1; i < nvertices; i++) { - depthSum += vertex[i].z; - } - prims[item].depth = depthSum / nvertices; - loc += (7 * nvertices); - break; - case GL_POINT_TOKEN: - vertex = (Feedback3Dcolor *) loc; - prims[item].depth = vertex[0].z; - loc += 7; - break; - default: - /* XXX Left as an excersie to the reader. */ - assert(1); - } - item++; - } - assert(item == nprimitives); - - /* Sort the primitives back to front. */ - qsort(prims, nprimitives, sizeof(DepthIndex), compare); - - /* XXX Understand that sorting by a primitives average depth - doesn't allow us to disambiguate some cases like self - intersecting polygons. Handling these cases would require - breaking up the primitives. That's too involved for this - example. Sorting by depth is good enough for lots of - applications. */ - - /* Emit the Encapsulated PostScript for the primitives in - back to front order. */ - for (item = 0; item < nprimitives; item++) { - (void) spewPrimitiveEPS(file, prims[item].ptr); - } - - free(prims); -} - -#define EPS_GOURAUD_THRESHOLD 0.1 /* Lower for better (slower) - - smooth shading. */ - -void -spewWireFrameEPS(FILE * file, int doSort, GLint size, GLfloat * buffer, char *creator) -{ - GLfloat clearColor[4], viewport[4]; - GLfloat lineWidth; - int i; - - /* Read back a bunch of OpenGL state to help make the EPS - consistent with the OpenGL clear color, line width, point - size, and viewport. */ - glGetFloatv(GL_VIEWPORT, viewport); - glGetFloatv(GL_COLOR_CLEAR_VALUE, clearColor); - glGetFloatv(GL_LINE_WIDTH, &lineWidth); - glGetFloatv(GL_POINT_SIZE, &pointSize); - - /* Emit EPS header. */ - fputs("%!PS-Adobe-2.0 EPSF-2.0\n", file); - /* Notice %% for a single % in the fprintf calls. */ - fprintf(file, "%%%%Creator: %s (using OpenGL feedback)\n", creator); - fprintf(file, "%%%%BoundingBox: %g %g %g %g\n", - viewport[0], viewport[1], viewport[2], viewport[3]); - fputs("%%EndComments\n", file); - fputs("\n", file); - fputs("gsave\n", file); - fputs("\n", file); - - /* Output Frederic Delhoume's "gouraudtriangle" PostScript - fragment. */ - fputs("% the gouraudtriangle PostScript fragement below is free\n", file); - fputs("% written by Frederic Delhoume (delhoume@ilog.fr)\n", file); - fprintf(file, "/threshold %g def\n", EPS_GOURAUD_THRESHOLD); - for (i = 0; gouraudtriangleEPS[i]; i++) { - fprintf(file, "%s\n", gouraudtriangleEPS[i]); - } - - fprintf(file, "\n%g setlinewidth\n", lineWidth); - - /* Clear the background like OpenGL had it. */ - fprintf(file, "%g %g %g setrgbcolor\n", - clearColor[0], clearColor[1], clearColor[2]); - fprintf(file, "%g %g %g %g rectfill\n\n", - viewport[0], viewport[1], viewport[2], viewport[3]); - - if (doSort) { - spewSortedFeedback(file, size, buffer); - } else { - spewUnsortedFeedback(file, size, buffer); - } - - /* Emit EPS trailer. */ - fputs("grestore\n\n", file); - fputs("%Add `showpage' to the end of this file to be able to print to a printer.\n", - file); - - fclose(file); -} - -void -outputEPS(int size, int doSort, char *filename) -{ - GLfloat *feedbackBuffer; - GLint returned; - FILE *file; - - feedbackBuffer = calloc(size, sizeof(GLfloat)); - glFeedbackBuffer(size, GL_3D_COLOR, feedbackBuffer); - (void) glRenderMode(GL_FEEDBACK); - render(); - returned = glRenderMode(GL_RENDER); - if (filename) { - file = fopen(filename, "w"); - if (file) { - spewWireFrameEPS(file, doSort, returned, feedbackBuffer, "rendereps"); - } else { - printf("Could not open %s\n", filename); - } - } else { - /* Helps debugging to be able to see the decode feedback - buffer as text. */ - printBuffer(returned, feedbackBuffer); - } - free(feedbackBuffer); -} - -void -choice(int value) -{ - switch (value) { - case 0: - glutSetCursor(GLUT_CURSOR_WAIT); - outputEPS(objectComplexity[object], 1, "render.eps"); - glutSetCursor(GLUT_CURSOR_INHERIT); - break; - case 1: - glutSetCursor(GLUT_CURSOR_WAIT); - outputEPS(objectComplexity[object], 0, "render.eps"); - glutSetCursor(GLUT_CURSOR_INHERIT); - break; - case 2: - /* Try to start GNU "ghostview" to preview the EPS. */ - system("ghostview render.eps &"); - break; - case 3: - glutSetCursor(GLUT_CURSOR_WAIT); - outputEPS(objectComplexity[object], 0, NULL); - glutSetCursor(GLUT_CURSOR_INHERIT); - break; - case 4: - blackBackground = 1 - blackBackground; - updateBackground(); - glutPostRedisplay(); - break; - case 5: - lighting = 1 - lighting; - updateLighting(); - glutPostRedisplay(); - break; - case 6: - polygonMode = (polygonMode + 1) % 3; - updatePolygonMode(); - glutPostRedisplay(); - break; - case 7: - size = (size % 5) + 1; - glLineWidth(size); - glPointSize(size); - glutPostRedisplay(); - break; - case 8: - object = (object + 1) % 3; - glutPostRedisplay(); - break; - case 666: - exit(0); - break; - } -} - -/* ARGSUSED2 */ -void -mouse(int button, int state, int x, int y) -{ - if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) { - moving = 1; - begin = x; - } - if (button == GLUT_LEFT_BUTTON && state == GLUT_UP) { - moving = 0; - } -} - -/* ARGSUSED1 */ -void -motion(int x, int y) -{ - if (moving) { - angle = angle + (x - begin); - begin = x; - glutPostRedisplay(); - } -} - -GLfloat light_diffuse[] = -{0.0, 1.0, 0.0, 1.0}; /* Green light. */ -GLfloat light_position[] = -{1.0, 1.0, 1.0, 0.0}; - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGB); - glutCreateWindow("rendereps"); - glutDisplayFunc(display); - glutMouseFunc(mouse); - glutMotionFunc(motion); - - glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); - glLightfv(GL_LIGHT0, GL_POSITION, light_position); - glEnable(GL_LIGHT0); - - glMatrixMode(GL_PROJECTION); - gluPerspective( /* field of view in degree */ 22.0, - /* aspect ratio */ 1.0, - /* Z near */ 5.0, /* Z far */ 10.0); - glMatrixMode(GL_MODELVIEW); - gluLookAt(0.0, 0.0, 5.0, /* eye is at (0,0,5) */ - 0.0, 0.0, 0.0, /* center is at (0,0,0) */ - 0.0, 1.0, 0.); /* up is in postivie Y direction */ - glTranslatef(0.0, 0.0, -3.0); - - /* Give the object an "interesting" orientation. */ - glRotatef(25, 1.0, 0.0, 0.0); - - glutCreateMenu(choice); - glutAddMenuEntry("Write out Encapsulated PS (sorted)", 0); - glutAddMenuEntry("Write out Encapsulated PS (UNsorted)", 1); - glutAddMenuEntry("Spawn ghostview to view EPS", 2); - glutAddMenuEntry("Display feedback buffer", 3); - glutAddMenuEntry("Toggle black/white background", 4); - glutAddMenuEntry("Toggle lighting", 5); - glutAddMenuEntry("Switch fill mode (line, poly, point)", 6); - glutAddMenuEntry("Switch line/point size", 7); - glutAddMenuEntry("Switch object", 8); - glutAddMenuEntry("Quit", 666); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - updateBackground(); - updateLighting(); - updatePolygonMode(); - - glEnable(GL_DEPTH_TEST); - glColor3f(1.0, 0.0, 0.0); /* Geometry should appear red. */ - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/examples/rendereps.dsp b/lib/glut-3.7.6/progs/examples/rendereps.dsp deleted file mode 100644 index afafd6b02..000000000 --- a/lib/glut-3.7.6/progs/examples/rendereps.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="rendereps" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=rendereps - 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 "rendereps.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 "rendereps.mak" CFG="rendereps - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "rendereps - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "rendereps - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "rendereps - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "rendereps - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "rendereps - Win32 Release" -# Name "rendereps - Win32 Debug" -# Begin Source File - -SOURCE=.\rendereps.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/resolution.c b/lib/glut-3.7.6/progs/examples/resolution.c deleted file mode 100644 index 79728aa18..000000000 --- a/lib/glut-3.7.6/progs/examples/resolution.c +++ /dev/null @@ -1,264 +0,0 @@ - -/* resolution.c */ - -/* by Walter Vannini (walterv@jps.net, waltervannini@hotmail.com) */ - -/* Copyright (c) Walter Vannini, 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 example demonstrates how to use glCopyPixels with glPixelZoom - to zoom up small renderings to fill more pixels. */ - -#include -#include - -void init(void); -void KeyboardFunc(unsigned char key, int x, int y); -void MenuFunc(int value); -void IdleFunc(void); -void ReshapeFunc(int w, int h); -void DisplayFunc(void); - -struct ProgramState -{ - double w; - double h; - double ResolutionX; - double ResolutionY; - int shoulder; - int elbow; - int wrist; - double Rotation; - double RotationIncrement; -}; -struct ProgramState ps; - -void init(void) -{ - glShadeModel (GL_FLAT); - glDisable(GL_DITHER); - glClearColor(0.0, 0.0, 0.0, 1.0); - - ps.Rotation = 0.0; - ps.RotationIncrement = 4.0; - ps.ResolutionX = 1.0; - ps.ResolutionY = 1.0; - ps.shoulder = 0.0; - ps.elbow = 0.0; - ps.wrist = 0.0; -} - -void KeyboardFunc (unsigned char key, int x, int y) -{ - switch (key) - { - case '1': - ps.ResolutionX = 1; - ps.ResolutionY = 1; - glutPostRedisplay(); - break; - case '2': - ps.ResolutionX = 2; - ps.ResolutionY = 2; - glutPostRedisplay(); - break; - case '3': - ps.ResolutionX = 3; - ps.ResolutionY = 3; - glutPostRedisplay(); - break; - case '4': - ps.ResolutionX = 4; - ps.ResolutionY = 4; - glutPostRedisplay(); - break; - case '5': - ps.ResolutionX = 5; - ps.ResolutionY = 5; - glutPostRedisplay(); - break; - case '6': - ps.ResolutionX = 6; - ps.ResolutionY = 6; - glutPostRedisplay(); - break; - case '7': - ps.ResolutionX = 7; - ps.ResolutionY = 7; - glutPostRedisplay(); - break; - case '8': - ps.ResolutionX = 8; - ps.ResolutionY = 8; - glutPostRedisplay(); - break; - case '9': - ps.ResolutionX = 9; - ps.ResolutionY = 9; - glutPostRedisplay(); - break; - case '0': - ps.ResolutionX = 10; - ps.ResolutionY = 10; - glutPostRedisplay(); - break; - case '-': - ps.ResolutionX = 16; - ps.ResolutionY = 16; - glutPostRedisplay(); - break; - case '=': - ps.ResolutionX = 32; - ps.ResolutionY = 32; - glutPostRedisplay(); - break; - case '\\': - ps.ResolutionX = 64; - ps.ResolutionY = 64; - glutPostRedisplay(); - break; - case 'o': - ps.ResolutionX = 1; - ps.ResolutionY = 8; - glutPostRedisplay(); - break; - case 'e': - ps.ResolutionX = 8; - ps.ResolutionY = 1; - glutPostRedisplay(); - break; - case 'q': - case 'Q': - case 27: - exit(0); - break; - default: - break; - } -} - -void MenuFunc(int value) -{ - KeyboardFunc((unsigned char) value, 0, 0); -} - -void IdleFunc(void) -{ - ps.Rotation += ps.RotationIncrement; - ps.shoulder = ps.Rotation; - ps.elbow = ps.Rotation*0.63432; - ps.wrist = ps.Rotation*0.4313543; - glutPostRedisplay(); -} - -void ReshapeFunc (int w, int h) -{ - ps.w =w; - ps.h = h; - glMatrixMode (GL_PROJECTION); - glLoadIdentity (); - gluPerspective(65.0, ps.w/ps.h, 1.0, 20.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef (0.0, 0.0, -5.0); -} - -void DisplayFunc(void) -{ - double ForearmLength= 1.2; - double UpperarmLength =1.0; - double HandLength = 0.5; - glViewport (0.0, 0.0, (GLsizei) (ps.w/ps.ResolutionX), (GLsizei) (ps.h/ps.ResolutionY)); - glMatrixMode(GL_MODELVIEW); - - glClear (GL_COLOR_BUFFER_BIT); - glPushMatrix(); - { - glRotatef (ps.shoulder, 0.0, 0.0, 1.0); - glTranslatef (0.5*UpperarmLength, 0.0, 0.0); - glPushMatrix(); - { - glScalef (UpperarmLength, 0.6, 1.0); - glutWireCube (1.0); - } - glPopMatrix(); - glTranslatef (0.5*UpperarmLength, 0.0, 0.0); - - glRotatef (ps.elbow, 0.0, 0.0, 1.0); - glTranslatef (0.5*ForearmLength, 0.0, 0.0); - glPushMatrix(); - { - glScalef (ForearmLength, 0.4, 1.0); - glutWireCube (1.0); - } - glPopMatrix(); - glTranslatef (0.5*ForearmLength, 0.0, 0.0); - - glRotatef (ps.wrist, 0.0, 0.0, 1.0); - glTranslatef (0.5*HandLength, 0.0, 0.0); - glPushMatrix(); - { - glScalef (HandLength, 0.2, 1.0); - glutWireCube (1.0); - } - glPopMatrix(); - } - glPopMatrix(); - - glPixelZoom(ps.ResolutionX, ps.ResolutionY); - glCopyPixels(0.0,0.0, - (GLsizei) (ps.w/ps.ResolutionX), (GLsizei) (ps.h/ps.ResolutionY), GL_COLOR); - - glutSwapBuffers(); -} - -void -VisibilityFunc(int vis) -{ - if (vis == GLUT_VISIBLE) { - glutIdleFunc(IdleFunc); - } else { - glutIdleFunc(NULL); - } -} - -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB); - ps.h=500; - ps.w=500; - glutInitWindowSize ((int) ps.w, (int) ps.h); - glutInitWindowPosition (100, 100); - glutCreateWindow (argv[0]); - - init (); - glutVisibilityFunc(VisibilityFunc); - glutDisplayFunc(DisplayFunc); - glutReshapeFunc(ReshapeFunc); - glutKeyboardFunc(KeyboardFunc); - glutCreateMenu(MenuFunc); - glutAddMenuEntry("resolution 1x1", '1'); - glutAddMenuEntry("resolution 2x2", '2'); - glutAddMenuEntry("resolution 3x3", '3'); - glutAddMenuEntry("resolution 4x4", '4'); - glutAddMenuEntry("resolution 5x5", '5'); - glutAddMenuEntry("resolution 6x6", '6'); - glutAddMenuEntry("resolution 7x7", '7'); - glutAddMenuEntry("resolution 8x8", '8'); - glutAddMenuEntry("resolution 9x9", '9'); - glutAddMenuEntry("resolution 10x10", '0'); - glutAddMenuEntry("resolution 16x16", '-'); - glutAddMenuEntry("resolution 32x32", '='); - glutAddMenuEntry("resolution 64x64", '\\'); - glutAddMenuEntry("resolution 1x8", 'o'); - glutAddMenuEntry("resolution 8x1", 'e'); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - glutMainLoop(); - return 0; -} - diff --git a/lib/glut-3.7.6/progs/examples/resolution.dsp b/lib/glut-3.7.6/progs/examples/resolution.dsp deleted file mode 100644 index 022f1d198..000000000 --- a/lib/glut-3.7.6/progs/examples/resolution.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="resolution" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=resolution - 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 "resolution.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 "resolution.mak" CFG="resolution - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "resolution - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "resolution - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "resolution - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "resolution - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "resolution - Win32 Release" -# Name "resolution - Win32 Debug" -# Begin Source File - -SOURCE=.\resolution.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/sb2db.c b/lib/glut-3.7.6/progs/examples/sb2db.c deleted file mode 100644 index 2e1589fca..000000000 --- a/lib/glut-3.7.6/progs/examples/sb2db.c +++ /dev/null @@ -1,297 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1994, 1996. */ - -/** - * (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. - */ - -/* sb2db.c - This program demonstrates switching between single buffered - and double buffered windows when using GLUT. Use the pop-up menu to - change the buffering style used. On machine that split the screen's - color resolution in half when double buffering, you should notice better - coloration (less or no dithering) in single buffer mode (but flicker on - redraws, particularly when rotation is toggled on). */ - -/* This program is based on the GLUT scene.c program. */ - -#include -#include - -int sbwin, dbwin; -int angle; - -/* Initialize material property and light source. */ -void -myinit(void) -{ - GLfloat light_ambient[] = - {0.3, 0.3, 0.3, 1.0}; - GLfloat light_diffuse[] = - {6.0, 6.0, 6.0, 1.0}; - GLfloat light_specular[] = - {1.0, 1.0, 1.0, 1.0}; - /* light_position is NOT default value */ - GLfloat light_position[] = - {-1.0, 1.0, 1.0, 0.0}; - - glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); - glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); - glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); - glLightfv(GL_LIGHT0, GL_POSITION, light_position); - - glEnable(GL_LIGHT0); - glDepthFunc(GL_LESS); - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); -} - -void -display(void) -{ - static GLfloat red[] = - {0.8, 0.0, 0.0, 1.0}; - static GLfloat yellow[] = - {0.8, 0.8, 0.0, 1.0}; - static GLfloat green[] = - {0.0, 0.8, 0.0, 1.0}; - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glPushMatrix(); - glRotatef(angle, 1.0, 0.0, 0.0); - glScalef(1.3, 1.3, 1.3); - glRotatef(20.0, 1.0, 0.0, 0.0); - - glPushMatrix(); - glTranslatef(-0.75, 0.5, 0.0); - glRotatef(90.0, 1.0, 0.0, 0.0); - glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, red); - glutSolidTorus(0.275, 0.85, 10, 15); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(-0.75, -0.5, 0.0); - glRotatef(270.0, 1.0, 0.0, 0.0); - glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, yellow); - glutSolidCone(1.0, 1.0, 40, 40); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(0.75, 0.0, -1.0); - glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, green); - glutSolidIcosahedron(); - glPopMatrix(); - - glPopMatrix(); - - if (glutGetWindow() == sbwin) { - glFlush(); - } else { - glutSwapBuffers(); - } -} - -/* Used by both windows, this routine setups the OpenGL context's - projection matrix correctly. Note that we call this routine for - both contexts to keep them in sync after reshapes. */ -void -reshapeOpenGLState(int w, int h) -{ - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - if (w <= h) - glOrtho(-2.5, 2.5, -2.5 * (GLfloat) h / (GLfloat) w, - 2.5 * (GLfloat) h / (GLfloat) w, -10.0, 10.0); - else - glOrtho(-2.5 * (GLfloat) w / (GLfloat) h, - 2.5 * (GLfloat) w / (GLfloat) h, -2.5, 2.5, -10.0, 10.0); - glMatrixMode(GL_MODELVIEW); -} - -/* When the single buffered (ie, the top window) gets resized, we - need to resize the child double buffered window as well. Hence - the glutReshapeWindow on the child. NOTE: You want a separate - resize callback for the double buffered window to set the viewport - since the window's size won't really be changed until the double buffered - gets its dbReshape callback. Otherwise, you could trick OpenGL intop - clipping based on the old window size. */ -void -sbReshape(int w, int h) -{ - glutSetWindow(sbwin); - glViewport(0, 0, w, h); - reshapeOpenGLState(w, h); - glutSetWindow(dbwin); - glutReshapeWindow(w, h); -} - -void -dbReshape(int w, int h) -{ - glViewport(0, 0, w, h); - reshapeOpenGLState(w, h); -} - -void -rotation(void) -{ - angle += 2; - angle = angle % 360; - glutPostRedisplay(); -} - -int animation = 0; /* Are we doing an animated rotation currently? */ - -void -main_menu(int value) -{ - switch (value) { - case 1: - /* Smart toggle rotation ensures we switch to double buffered when - animating and single buffered when not animating. */ - animation = 1 - animation; /* Toggle. */ - if (animation) { - glutIdleFunc(rotation); - glutSetWindow(sbwin); - glutSetWindowTitle("sb2db - double buffer mode"); - glutSetWindow(dbwin); - glutShowWindow(); /* Show the double buffered window. */ - } else { - glutIdleFunc(NULL); - glutSetWindow(sbwin); - glutSetWindowTitle("sb2db - single buffer mode"); - glutSetWindow(dbwin); - glutHideWindow(); /* Hide the double buffered window. */ - } - break; - case 2: - glutSetWindow(dbwin); - glutHideWindow(); /* Hide the double buffered window. */ - glutSetWindow(sbwin); - glutSetWindowTitle("sb2db - single buffer mode"); - break; - case 3: - glutSetWindow(sbwin); - glutSetWindowTitle("sb2db - double buffer mode"); - glutSetWindow(dbwin); - glutShowWindow(); /* Show the double buffered window. */ - break; - case 4: - animation = 1 - animation; /* Toggle. */ - if (animation) - glutIdleFunc(rotation); - else - glutIdleFunc(NULL); - break; - case 666: - exit(0); - break; - } -} - -/* You have to track the visibility of both the single buffered - and double buffered windows together. */ -void -visibility(int state) -{ - static int sbvis = GLUT_NOT_VISIBLE, dbvis = GLUT_NOT_VISIBLE; - int eithervis; - - if (glutGetWindow() == sbwin) { - sbvis = state; - } else { - dbvis = state; - } - eithervis = (sbvis == GLUT_VISIBLE) || (dbvis == GLUT_VISIBLE); - if (eithervis) { - /* Resume rotating idle callback if we become visible and - animation is enabled. */ - if (animation) { - glutIdleFunc(rotation); - } - } else { - /* Disable animation when both windows are not visible. */ - glutIdleFunc(NULL); - } -} - -int -main(int argc, char **argv) -{ - glutInitWindowSize(500, 500); - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_SINGLE); - - /* The top window is single buffered. */ - sbwin = glutCreateWindow(argv[0]); - glutReshapeFunc(sbReshape); - glutDisplayFunc(display); - glutVisibilityFunc(visibility); - myinit(); - - /* The child window is double buffered. We show this window - when displaying double buffered and hide it to show the - single buffered window. */ - glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); - dbwin = glutCreateSubWindow(glutGetWindow(), - 0, 0, glutGet(GLUT_WINDOW_WIDTH), glutGet(GLUT_WINDOW_HEIGHT)); - glutDisplayFunc(display); - glutReshapeFunc(dbReshape); - glutVisibilityFunc(visibility); - - /* Call myinit for both the single buffered window and the - double buffered window. We must mirror the same OpenGL - state in both window's OpenGL contexts. If you make this - program more complicated, remember to keep the window's - context state in sync. */ - myinit(); - - /* Initially hide the double buffered window to start in - single buffered mode. */ - glutHideWindow(); - - glutCreateMenu(main_menu); - glutAddMenuEntry("Smart rotation toggle", 1); - glutAddMenuEntry("Single buffer", 2); - glutAddMenuEntry("Double buffer", 3); - glutAddMenuEntry("Toggle rotation", 4); - glutAddMenuEntry("Quit", 666); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutSetWindow(sbwin); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/examples/sb2db.dsp b/lib/glut-3.7.6/progs/examples/sb2db.dsp deleted file mode 100644 index e857f1de9..000000000 --- a/lib/glut-3.7.6/progs/examples/sb2db.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="sb2db" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=sb2db - 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 "sb2db.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 "sb2db.mak" CFG="sb2db - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "sb2db - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "sb2db - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "sb2db - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "sb2db - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "sb2db - Win32 Release" -# Name "sb2db - Win32 Debug" -# Begin Source File - -SOURCE=.\sb2db.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/scene.c b/lib/glut-3.7.6/progs/examples/scene.c deleted file mode 100644 index 2e5936aed..000000000 --- a/lib/glut-3.7.6/progs/examples/scene.c +++ /dev/null @@ -1,175 +0,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. - */ -/* - * scene.c - * This program demonstrates the use of the GL lighting model. - * Objects are drawn using a grey material characteristic. - * A single light source illuminates the objects. - */ -#include -#include - -/* Initialize material property and light source. - */ -void -myinit(void) -{ - GLfloat light_ambient[] = - {0.0, 0.0, 0.0, 1.0}; - GLfloat light_diffuse[] = - {1.0, 0.0, 0.0, 1.0}; - GLfloat light_specular[] = - {1.0, 1.0, 1.0, 1.0}; -/* light_position is NOT default value */ - GLfloat light_position[] = - {1.0, 1.0, 1.0, 0.0}; - - glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); - glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); - glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); - glLightfv(GL_LIGHT0, GL_POSITION, light_position); - - glEnable(GL_LIGHT0); - glDepthFunc(GL_LESS); - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); -} - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glPushMatrix(); - glScalef(1.3, 1.3, 1.3); - glRotatef(20.0, 1.0, 0.0, 0.0); - - glPushMatrix(); - glTranslatef(-0.75, 0.5, 0.0); - glRotatef(90.0, 1.0, 0.0, 0.0); - glutSolidTorus(0.275, 0.85, 10, 15); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(-0.75, -0.5, 0.0); - glRotatef(270.0, 1.0, 0.0, 0.0); - glutSolidTetrahedron(); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(0.75, 0.0, -1.0); - glutSolidIcosahedron(); - glPopMatrix(); - - glPopMatrix(); - glFlush(); -} - -void -myReshape(int w, int h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - if (w <= h) - glOrtho(-2.5, 2.5, -2.5 * (GLfloat) h / (GLfloat) w, - 2.5 * (GLfloat) h / (GLfloat) w, -10.0, 10.0); - else - glOrtho(-2.5 * (GLfloat) w / (GLfloat) h, - 2.5 * (GLfloat) w / (GLfloat) h, -2.5, 2.5, -10.0, 10.0); - glMatrixMode(GL_MODELVIEW); -} - -void -polygon_mode(int value) -{ - switch (value) { - case 1: - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - glDisable(GL_BLEND); - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - break; - case 2: - glDisable(GL_DEPTH_TEST); - glDisable(GL_LIGHTING); - glColor3f(1.0, 1.0, 1.0); - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - glEnable(GL_LINE_SMOOTH); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - break; - } - glutPostRedisplay(); -} - -void -main_menu(int value) -{ - if (value == 666) - exit(0); -} - -/* Main Loop - * Open window with initial window size, title bar, - * RGBA display mode, and handle input events. - */ -int -main(int argc, char **argv) -{ - int submenu; - - glutInit(&argc, argv); - glutInitWindowPosition(500, 500); - glutInitWindowSize(500, 500); - glutCreateWindow(argv[0]); - myinit(); - glutReshapeFunc(myReshape); - glutDisplayFunc(display); - submenu = glutCreateMenu(polygon_mode); - glutAddMenuEntry("Filled", 1); - glutAddMenuEntry("Outline", 2); - glutCreateMenu(main_menu); - glutAddMenuEntry("Quit", 666); - glutAddSubMenu("Polygon mode", submenu); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/examples/scene.dsp b/lib/glut-3.7.6/progs/examples/scene.dsp deleted file mode 100644 index 7f3d9b096..000000000 --- a/lib/glut-3.7.6/progs/examples/scene.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="scene" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=scene - 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 "scene.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 "scene.mak" CFG="scene - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "scene - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "scene - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "scene - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "scene - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "scene - Win32 Release" -# Name "scene - Win32 Debug" -# Begin Source File - -SOURCE=.\scene.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/screendoor.c b/lib/glut-3.7.6/progs/examples/screendoor.c deleted file mode 100644 index 3ab8c9dc0..000000000 --- a/lib/glut-3.7.6/progs/examples/screendoor.c +++ /dev/null @@ -1,371 +0,0 @@ - -/* 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. */ - -/* screendoor demonstrates "screen door" transparency using - OpenGL's polygon stipple feature. */ - -#include -#include -#include - -#define TORUS 1 -#define TETRAHEDRON 2 -#define ICOSAHEDRON 3 - -/* Screen door transparency stipple patterns, originally generated by - Tim Hall (tjh@world.std.com) based on the 4x4 dither matrix - described in "Computer Graphics Principles and Practice, 2nd ed." in - the "Halftone Approximation" section (13.1.2). Each 4x4 pattern is - replicated over OpenGL's 32x32 pixel stipple pattern. mjk converted - Tim's patterns to be expressed as GLubytes instead of unsigned ints - to avoid byte ordering problems. */ - -#if 0 /* Comment containing C comments. */ - - Example usage: - - /* Assumes default unpack pixel store settings; see glPixelStore */ - - glEnable(GL_POLYGON_STIPPLE); - glPolygonStipple(stippleMask[0]); /* 0% opaqueness */ - glPolygonStipple(stippleMask[8]); /* 50% opaqueness */ - glPolygonStipple(stippleMask[16]); /* 100% opaqueness */ - -#endif - -const GLubyte stippleMask[17][128] = -{ - /* NOTE: 0% opaqueness is faster to set and probably faster to render with: - glDisable(GL_POLYGON_STIPPLE); - glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); */ - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - - {0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - - {0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, - 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, - 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, - 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, - 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, - 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, - 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, - 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00}, - - {0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, - 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, - 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, - 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, - 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, - 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, - 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, - 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00}, - - {0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, - 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, - 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, - 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, - 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, - 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, - 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, - 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00}, - - {0xaa, 0xaa, 0xaa, 0xaa, 0x44, 0x44, 0x44, 0x44, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, - 0xaa, 0xaa, 0xaa, 0xaa, 0x44, 0x44, 0x44, 0x44, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, - 0xaa, 0xaa, 0xaa, 0xaa, 0x44, 0x44, 0x44, 0x44, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, - 0xaa, 0xaa, 0xaa, 0xaa, 0x44, 0x44, 0x44, 0x44, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, - 0xaa, 0xaa, 0xaa, 0xaa, 0x44, 0x44, 0x44, 0x44, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, - 0xaa, 0xaa, 0xaa, 0xaa, 0x44, 0x44, 0x44, 0x44, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, - 0xaa, 0xaa, 0xaa, 0xaa, 0x44, 0x44, 0x44, 0x44, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, - 0xaa, 0xaa, 0xaa, 0xaa, 0x44, 0x44, 0x44, 0x44, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00}, - - {0xaa, 0xaa, 0xaa, 0xaa, 0x44, 0x44, 0x44, 0x44, 0xaa, 0xaa, 0xaa, 0xaa, 0x11, 0x11, 0x11, 0x11, - 0xaa, 0xaa, 0xaa, 0xaa, 0x44, 0x44, 0x44, 0x44, 0xaa, 0xaa, 0xaa, 0xaa, 0x11, 0x11, 0x11, 0x11, - 0xaa, 0xaa, 0xaa, 0xaa, 0x44, 0x44, 0x44, 0x44, 0xaa, 0xaa, 0xaa, 0xaa, 0x11, 0x11, 0x11, 0x11, - 0xaa, 0xaa, 0xaa, 0xaa, 0x44, 0x44, 0x44, 0x44, 0xaa, 0xaa, 0xaa, 0xaa, 0x11, 0x11, 0x11, 0x11, - 0xaa, 0xaa, 0xaa, 0xaa, 0x44, 0x44, 0x44, 0x44, 0xaa, 0xaa, 0xaa, 0xaa, 0x11, 0x11, 0x11, 0x11, - 0xaa, 0xaa, 0xaa, 0xaa, 0x44, 0x44, 0x44, 0x44, 0xaa, 0xaa, 0xaa, 0xaa, 0x11, 0x11, 0x11, 0x11, - 0xaa, 0xaa, 0xaa, 0xaa, 0x44, 0x44, 0x44, 0x44, 0xaa, 0xaa, 0xaa, 0xaa, 0x11, 0x11, 0x11, 0x11, - 0xaa, 0xaa, 0xaa, 0xaa, 0x44, 0x44, 0x44, 0x44, 0xaa, 0xaa, 0xaa, 0xaa, 0x11, 0x11, 0x11, 0x11}, - - {0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x11, 0x11, 0x11, 0x11, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x11, 0x11, 0x11, 0x11, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x11, 0x11, 0x11, 0x11, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x11, 0x11, 0x11, 0x11, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x11, 0x11, 0x11, 0x11, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x11, 0x11, 0x11, 0x11, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x11, 0x11, 0x11, 0x11, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x11, 0x11, 0x11, 0x11}, - - {0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55}, - - {0xee, 0xee, 0xee, 0xee, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xee, 0xee, 0xee, 0xee, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xee, 0xee, 0xee, 0xee, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xee, 0xee, 0xee, 0xee, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xee, 0xee, 0xee, 0xee, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xee, 0xee, 0xee, 0xee, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xee, 0xee, 0xee, 0xee, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xee, 0xee, 0xee, 0xee, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55}, - - {0xee, 0xee, 0xee, 0xee, 0x55, 0x55, 0x55, 0x55, 0xbb, 0xbb, 0xbb, 0xbb, 0x55, 0x55, 0x55, 0x55, - 0xee, 0xee, 0xee, 0xee, 0x55, 0x55, 0x55, 0x55, 0xbb, 0xbb, 0xbb, 0xbb, 0x55, 0x55, 0x55, 0x55, - 0xee, 0xee, 0xee, 0xee, 0x55, 0x55, 0x55, 0x55, 0xbb, 0xbb, 0xbb, 0xbb, 0x55, 0x55, 0x55, 0x55, - 0xee, 0xee, 0xee, 0xee, 0x55, 0x55, 0x55, 0x55, 0xbb, 0xbb, 0xbb, 0xbb, 0x55, 0x55, 0x55, 0x55, - 0xee, 0xee, 0xee, 0xee, 0x55, 0x55, 0x55, 0x55, 0xbb, 0xbb, 0xbb, 0xbb, 0x55, 0x55, 0x55, 0x55, - 0xee, 0xee, 0xee, 0xee, 0x55, 0x55, 0x55, 0x55, 0xbb, 0xbb, 0xbb, 0xbb, 0x55, 0x55, 0x55, 0x55, - 0xee, 0xee, 0xee, 0xee, 0x55, 0x55, 0x55, 0x55, 0xbb, 0xbb, 0xbb, 0xbb, 0x55, 0x55, 0x55, 0x55, - 0xee, 0xee, 0xee, 0xee, 0x55, 0x55, 0x55, 0x55, 0xbb, 0xbb, 0xbb, 0xbb, 0x55, 0x55, 0x55, 0x55}, - - {0xff, 0xff, 0xff, 0xff, 0x55, 0x55, 0x55, 0x55, 0xbb, 0xbb, 0xbb, 0xbb, 0x55, 0x55, 0x55, 0x55, - 0xff, 0xff, 0xff, 0xff, 0x55, 0x55, 0x55, 0x55, 0xbb, 0xbb, 0xbb, 0xbb, 0x55, 0x55, 0x55, 0x55, - 0xff, 0xff, 0xff, 0xff, 0x55, 0x55, 0x55, 0x55, 0xbb, 0xbb, 0xbb, 0xbb, 0x55, 0x55, 0x55, 0x55, - 0xff, 0xff, 0xff, 0xff, 0x55, 0x55, 0x55, 0x55, 0xbb, 0xbb, 0xbb, 0xbb, 0x55, 0x55, 0x55, 0x55, - 0xff, 0xff, 0xff, 0xff, 0x55, 0x55, 0x55, 0x55, 0xbb, 0xbb, 0xbb, 0xbb, 0x55, 0x55, 0x55, 0x55, - 0xff, 0xff, 0xff, 0xff, 0x55, 0x55, 0x55, 0x55, 0xbb, 0xbb, 0xbb, 0xbb, 0x55, 0x55, 0x55, 0x55, - 0xff, 0xff, 0xff, 0xff, 0x55, 0x55, 0x55, 0x55, 0xbb, 0xbb, 0xbb, 0xbb, 0x55, 0x55, 0x55, 0x55, - 0xff, 0xff, 0xff, 0xff, 0x55, 0x55, 0x55, 0x55, 0xbb, 0xbb, 0xbb, 0xbb, 0x55, 0x55, 0x55, 0x55}, - - {0xff, 0xff, 0xff, 0xff, 0x55, 0x55, 0x55, 0x55, 0xff, 0xff, 0xff, 0xff, 0x55, 0x55, 0x55, 0x55, - 0xff, 0xff, 0xff, 0xff, 0x55, 0x55, 0x55, 0x55, 0xff, 0xff, 0xff, 0xff, 0x55, 0x55, 0x55, 0x55, - 0xff, 0xff, 0xff, 0xff, 0x55, 0x55, 0x55, 0x55, 0xff, 0xff, 0xff, 0xff, 0x55, 0x55, 0x55, 0x55, - 0xff, 0xff, 0xff, 0xff, 0x55, 0x55, 0x55, 0x55, 0xff, 0xff, 0xff, 0xff, 0x55, 0x55, 0x55, 0x55, - 0xff, 0xff, 0xff, 0xff, 0x55, 0x55, 0x55, 0x55, 0xff, 0xff, 0xff, 0xff, 0x55, 0x55, 0x55, 0x55, - 0xff, 0xff, 0xff, 0xff, 0x55, 0x55, 0x55, 0x55, 0xff, 0xff, 0xff, 0xff, 0x55, 0x55, 0x55, 0x55, - 0xff, 0xff, 0xff, 0xff, 0x55, 0x55, 0x55, 0x55, 0xff, 0xff, 0xff, 0xff, 0x55, 0x55, 0x55, 0x55, - 0xff, 0xff, 0xff, 0xff, 0x55, 0x55, 0x55, 0x55, 0xff, 0xff, 0xff, 0xff, 0x55, 0x55, 0x55, 0x55}, - - {0xff, 0xff, 0xff, 0xff, 0xdd, 0xdd, 0xdd, 0xdd, 0xff, 0xff, 0xff, 0xff, 0x55, 0x55, 0x55, 0x55, - 0xff, 0xff, 0xff, 0xff, 0xdd, 0xdd, 0xdd, 0xdd, 0xff, 0xff, 0xff, 0xff, 0x55, 0x55, 0x55, 0x55, - 0xff, 0xff, 0xff, 0xff, 0xdd, 0xdd, 0xdd, 0xdd, 0xff, 0xff, 0xff, 0xff, 0x55, 0x55, 0x55, 0x55, - 0xff, 0xff, 0xff, 0xff, 0xdd, 0xdd, 0xdd, 0xdd, 0xff, 0xff, 0xff, 0xff, 0x55, 0x55, 0x55, 0x55, - 0xff, 0xff, 0xff, 0xff, 0xdd, 0xdd, 0xdd, 0xdd, 0xff, 0xff, 0xff, 0xff, 0x55, 0x55, 0x55, 0x55, - 0xff, 0xff, 0xff, 0xff, 0xdd, 0xdd, 0xdd, 0xdd, 0xff, 0xff, 0xff, 0xff, 0x55, 0x55, 0x55, 0x55, - 0xff, 0xff, 0xff, 0xff, 0xdd, 0xdd, 0xdd, 0xdd, 0xff, 0xff, 0xff, 0xff, 0x55, 0x55, 0x55, 0x55, - 0xff, 0xff, 0xff, 0xff, 0xdd, 0xdd, 0xdd, 0xdd, 0xff, 0xff, 0xff, 0xff, 0x55, 0x55, 0x55, 0x55}, - - {0xff, 0xff, 0xff, 0xff, 0xdd, 0xdd, 0xdd, 0xdd, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x77, - 0xff, 0xff, 0xff, 0xff, 0xdd, 0xdd, 0xdd, 0xdd, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x77, - 0xff, 0xff, 0xff, 0xff, 0xdd, 0xdd, 0xdd, 0xdd, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x77, - 0xff, 0xff, 0xff, 0xff, 0xdd, 0xdd, 0xdd, 0xdd, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x77, - 0xff, 0xff, 0xff, 0xff, 0xdd, 0xdd, 0xdd, 0xdd, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x77, - 0xff, 0xff, 0xff, 0xff, 0xdd, 0xdd, 0xdd, 0xdd, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x77, - 0xff, 0xff, 0xff, 0xff, 0xdd, 0xdd, 0xdd, 0xdd, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x77, - 0xff, 0xff, 0xff, 0xff, 0xdd, 0xdd, 0xdd, 0xdd, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x77}, - - {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x77, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x77, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x77, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x77, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x77, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x77, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x77, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x77}, - - /* NOTE: 100% opaqueness is faster to set and probably faster to render with: - glDisable(GL_POLYGON_STIPPLE); */ - {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, - 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, - 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, - 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}, -}; - -GLfloat angle = 20.0; - -int torusStipple = 4, icoStipple = 8, tetraStipple = 16; - -/* Initialize material property and light source. */ -void -myinit(void) -{ - GLfloat light_ambient[] = - {0.2, 0.2, 0.2, 1.0}; - GLfloat light_diffuse[] = - {1.0, 1.0, 1.0, 1.0}; - GLfloat light_specular[] = - {1.0, 1.0, 1.0, 1.0}; - GLfloat light_position[] = - {1.0, 1.0, 1.0, 0.0}; - - glClearColor(0.49, 0.62, 0.75, 0.0); - - glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); - glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); - glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); - glLightfv(GL_LIGHT0, GL_POSITION, light_position); - - glEnable(GL_LIGHT0); - glDepthFunc(GL_LESS); - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - glEnable(GL_CULL_FACE); - glEnable(GL_POLYGON_STIPPLE); - - glNewList(TORUS, GL_COMPILE); - glutSolidTorus(0.275, 0.85, 10, 15); - glEndList(); - glNewList(TETRAHEDRON, GL_COMPILE); - glutSolidTetrahedron(); - glEndList(); - glNewList(ICOSAHEDRON, GL_COMPILE); - glutSolidIcosahedron(); - glEndList(); -} - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glPushMatrix(); - glScalef(1.3, 1.3, 1.3); - glRotatef(angle, 1.0, 0.0, 0.0); - - glPushMatrix(); - glTranslatef(-0.75, -0.5, 0.0); - glRotatef(270.0, 1.0, 0.0, 0.0); - glPolygonStipple(stippleMask[tetraStipple]); - glCallList(TETRAHEDRON); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(-0.75, 0.5, 0.0); - glRotatef(90.0, 1.0, 0.0, 0.0); - glPolygonStipple(stippleMask[torusStipple]); - glCallList(TORUS); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(0.75, 0.0, -1.0); - glPolygonStipple(stippleMask[icoStipple]); - glCallList(ICOSAHEDRON); - glPopMatrix(); - - glPopMatrix(); - - glutSwapBuffers(); -} - -void -reshape(int w, int h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - if (w <= h) - glOrtho(-2.5, 2.5, -2.5 * (GLfloat) h / (GLfloat) w, - 2.5 * (GLfloat) h / (GLfloat) w, -10.0, 10.0); - else - glOrtho(-2.5 * (GLfloat) w / (GLfloat) h, - 2.5 * (GLfloat) w / (GLfloat) h, -2.5, 2.5, -10.0, 10.0); - glMatrixMode(GL_MODELVIEW); -} - -void -torusTransparency(int value) -{ - torusStipple = value; - glutPostRedisplay(); -} - -void -icoTransparency(int value) -{ - icoStipple = value; - glutPostRedisplay(); -} - -void -tetraTransparency(int value) -{ - tetraStipple = value; - glutPostRedisplay(); -} - -void -noop(int value) -{ - switch(value) { - case 1: - angle -= 45; - break; - case 2: - angle += 45; - break; - case 666: - exit(0); - } - glutPostRedisplay(); -} - -void -createTransparencyMenu(void) -{ - char label[20]; - int i; - - for (i = 0; i < 17; i++) { - sprintf(label, "%d%% opaque", i * 100 / 16); - glutAddMenuEntry(label, i); - } -} - -int -main(int argc, char **argv) -{ - int torusMenu, icoMenu, tetraMenu; - - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); - glutCreateWindow("screen door transparency"); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - myinit(); - - torusMenu = glutCreateMenu(torusTransparency); - createTransparencyMenu(); - icoMenu = glutCreateMenu(icoTransparency); - createTransparencyMenu(); - tetraMenu = glutCreateMenu(tetraTransparency); - createTransparencyMenu(); - - glutCreateMenu(noop); - glutAddSubMenu("Torus", torusMenu); - glutAddSubMenu("Icosahedron", icoMenu); - glutAddSubMenu("Tetrahedron", tetraMenu); - glutAddMenuEntry("Rotate up", 1); - glutAddMenuEntry("Rotate down", 2); - glutAddMenuEntry("Quit", 666); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/examples/screendoor.dsp b/lib/glut-3.7.6/progs/examples/screendoor.dsp deleted file mode 100644 index ef9450d91..000000000 --- a/lib/glut-3.7.6/progs/examples/screendoor.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="screendoor" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=screendoor - 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 "screendoor.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 "screendoor.mak" CFG="screendoor - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "screendoor - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "screendoor - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "screendoor - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "screendoor - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "screendoor - Win32 Release" -# Name "screendoor - Win32 Debug" -# Begin Source File - -SOURCE=.\screendoor.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/scube.c b/lib/glut-3.7.6/progs/examples/scube.c deleted file mode 100644 index 5e2633248..000000000 --- a/lib/glut-3.7.6/progs/examples/scube.c +++ /dev/null @@ -1,703 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1994. */ - -/** - * (c) Copyright 1993, 1994, 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. - */ - -/* - * 1992 David G Yu -- Silicon Graphics Computer Systems - */ - -#include -#include -#include -#include -#include - -static int useRGB = 1; -static int useLighting = 1; -static int useFog = 0; -static int useDB = 1; -static int useLogo = 0; -static int useQuads = 1; - -static int tick = -1; -static int moving = 1; - -#define GREY 0 -#define RED 1 -#define GREEN 2 -#define BLUE 3 -#define CYAN 4 -#define MAGENTA 5 -#define YELLOW 6 -#define BLACK 7 - -static float materialColor[8][4] = -{ - {0.8, 0.8, 0.8, 1.0}, - {0.8, 0.0, 0.0, 1.0}, - {0.0, 0.8, 0.0, 1.0}, - {0.0, 0.0, 0.8, 1.0}, - {0.0, 0.8, 0.8, 1.0}, - {0.8, 0.0, 0.8, 1.0}, - {0.8, 0.8, 0.0, 1.0}, - {0.0, 0.0, 0.0, 0.6}, -}; - -static float lightPos[4] = -{2.0, 4.0, 2.0, 1.0}; -#if 0 -static float lightDir[4] = -{-2.0, -4.0, -2.0, 1.0}; -#endif -static float lightAmb[4] = -{0.2, 0.2, 0.2, 1.0}; -static float lightDiff[4] = -{0.8, 0.8, 0.8, 1.0}; -static float lightSpec[4] = -{0.4, 0.4, 0.4, 1.0}; - -static float groundPlane[4] = -{0.0, 1.0, 0.0, 1.499}; -static float backPlane[4] = -{0.0, 0.0, 1.0, 0.899}; - -static float fogColor[4] = -{0.0, 0.0, 0.0, 0.0}; -static float fogIndex[1] = -{0.0}; - -static unsigned char shadowPattern[128] = -{ - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, /* 50% Grey */ - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55 -}; - -static unsigned char sgiPattern[128] = -{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* SGI Logo */ - 0xff, 0xbd, 0xff, 0x83, 0xff, 0x5a, 0xff, 0xef, - 0xfe, 0xdb, 0x7f, 0xef, 0xfd, 0xdb, 0xbf, 0xef, - 0xfb, 0xdb, 0xdf, 0xef, 0xf7, 0xdb, 0xef, 0xef, - 0xfb, 0xdb, 0xdf, 0xef, 0xfd, 0xdb, 0xbf, 0x83, - 0xce, 0xdb, 0x73, 0xff, 0xb7, 0x5a, 0xed, 0xff, - 0xbb, 0xdb, 0xdd, 0xc7, 0xbd, 0xdb, 0xbd, 0xbb, - 0xbe, 0xbd, 0x7d, 0xbb, 0xbf, 0x7e, 0xfd, 0xb3, - 0xbe, 0xe7, 0x7d, 0xbf, 0xbd, 0xdb, 0xbd, 0xbf, - 0xbb, 0xbd, 0xdd, 0xbb, 0xb7, 0x7e, 0xed, 0xc7, - 0xce, 0xdb, 0x73, 0xff, 0xfd, 0xdb, 0xbf, 0xff, - 0xfb, 0xdb, 0xdf, 0x87, 0xf7, 0xdb, 0xef, 0xfb, - 0xf7, 0xdb, 0xef, 0xfb, 0xfb, 0xdb, 0xdf, 0xfb, - 0xfd, 0xdb, 0xbf, 0xc7, 0xfe, 0xdb, 0x7f, 0xbf, - 0xff, 0x5a, 0xff, 0xbf, 0xff, 0xbd, 0xff, 0xc3, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff -}; - -static float cube_vertexes[6][4][4] = -{ - { - {-1.0, -1.0, -1.0, 1.0}, - {-1.0, -1.0, 1.0, 1.0}, - {-1.0, 1.0, 1.0, 1.0}, - {-1.0, 1.0, -1.0, 1.0}}, - - { - {1.0, 1.0, 1.0, 1.0}, - {1.0, -1.0, 1.0, 1.0}, - {1.0, -1.0, -1.0, 1.0}, - {1.0, 1.0, -1.0, 1.0}}, - - { - {-1.0, -1.0, -1.0, 1.0}, - {1.0, -1.0, -1.0, 1.0}, - {1.0, -1.0, 1.0, 1.0}, - {-1.0, -1.0, 1.0, 1.0}}, - - { - {1.0, 1.0, 1.0, 1.0}, - {1.0, 1.0, -1.0, 1.0}, - {-1.0, 1.0, -1.0, 1.0}, - {-1.0, 1.0, 1.0, 1.0}}, - - { - {-1.0, -1.0, -1.0, 1.0}, - {-1.0, 1.0, -1.0, 1.0}, - {1.0, 1.0, -1.0, 1.0}, - {1.0, -1.0, -1.0, 1.0}}, - - { - {1.0, 1.0, 1.0, 1.0}, - {-1.0, 1.0, 1.0, 1.0}, - {-1.0, -1.0, 1.0, 1.0}, - {1.0, -1.0, 1.0, 1.0}} -}; - -static float cube_normals[6][4] = -{ - {-1.0, 0.0, 0.0, 0.0}, - {1.0, 0.0, 0.0, 0.0}, - {0.0, -1.0, 0.0, 0.0}, - {0.0, 1.0, 0.0, 0.0}, - {0.0, 0.0, -1.0, 0.0}, - {0.0, 0.0, 1.0, 0.0} -}; - -static void -usage(void) -{ - printf("\n"); - printf("usage: scube [options]\n"); - printf("\n"); - printf(" display a spinning cube and its shadow\n"); - printf("\n"); - printf(" Options:\n"); - printf(" -geometry window size and location\n"); - printf(" -c toggle color index mode\n"); - printf(" -l toggle lighting\n"); - printf(" -f toggle fog\n"); - printf(" -db toggle double buffering\n"); - printf(" -logo toggle sgi logo for the shadow pattern\n"); - printf(" -quads toggle use of GL_QUADS to draw the checkerboard\n"); - printf("\n"); -#ifndef EXIT_FAILURE /* should be defined by ANSI C - */ -#define EXIT_FAILURE 1 -#endif - exit(EXIT_FAILURE); -} - -void -buildColormap(void) -{ - if (useRGB) { - return; - } else { - int mapSize = 1 << glutGet(GLUT_WINDOW_BUFFER_SIZE); - int rampSize = mapSize / 8; - int entry; - int i; - - for (entry = 0; entry < mapSize; ++entry) { - int hue = entry / rampSize; - GLfloat val = (entry % rampSize) * (1.0 / (rampSize - 1)); - GLfloat red, green, blue; - - red = (hue == 0 || hue == 1 || hue == 5 || hue == 6) ? val : 0; - green = (hue == 0 || hue == 2 || hue == 4 || hue == 6) ? val : 0; - blue = (hue == 0 || hue == 3 || hue == 4 || hue == 5) ? val : 0; - - glutSetColor(entry, red, green, blue); - } - - for (i = 0; i < 8; ++i) { - materialColor[i][0] = i * rampSize + 0.2 * (rampSize - 1); - materialColor[i][1] = i * rampSize + 0.8 * (rampSize - 1); - materialColor[i][2] = i * rampSize + 1.0 * (rampSize - 1); - materialColor[i][3] = 0.0; - } - - fogIndex[0] = -0.2 * (rampSize - 1); - } -} - -static void -setColor(int c) -{ - if (useLighting) { - if (useRGB) { - glMaterialfv(GL_FRONT_AND_BACK, - GL_AMBIENT_AND_DIFFUSE, &materialColor[c][0]); - } else { - glMaterialfv(GL_FRONT_AND_BACK, - GL_COLOR_INDEXES, &materialColor[c][0]); - } - } else { - if (useRGB) { - glColor4fv(&materialColor[c][0]); - } else { - glIndexf(materialColor[c][1]); - } - } -} - -static void -drawCube(int color) -{ - int i; - - setColor(color); - - for (i = 0; i < 6; ++i) { - glNormal3fv(&cube_normals[i][0]); - glBegin(GL_POLYGON); - glVertex4fv(&cube_vertexes[i][0][0]); - glVertex4fv(&cube_vertexes[i][1][0]); - glVertex4fv(&cube_vertexes[i][2][0]); - glVertex4fv(&cube_vertexes[i][3][0]); - glEnd(); - } -} - -static void -drawCheck(int w, int h, int evenColor, int oddColor) -{ - static int initialized = 0; - static int usedLighting = 0; - static GLuint checklist = 0; - - if (!initialized || (usedLighting != useLighting)) { - static float square_normal[4] = - {0.0, 0.0, 1.0, 0.0}; - static float square[4][4]; - int i, j; - - if (!checklist) { - checklist = glGenLists(1); - } - glNewList(checklist, GL_COMPILE_AND_EXECUTE); - - if (useQuads) { - glNormal3fv(square_normal); - glBegin(GL_QUADS); - } - for (j = 0; j < h; ++j) { - for (i = 0; i < w; ++i) { - square[0][0] = -1.0 + 2.0 / w * i; - square[0][1] = -1.0 + 2.0 / h * (j + 1); - square[0][2] = 0.0; - square[0][3] = 1.0; - - square[1][0] = -1.0 + 2.0 / w * i; - square[1][1] = -1.0 + 2.0 / h * j; - square[1][2] = 0.0; - square[1][3] = 1.0; - - square[2][0] = -1.0 + 2.0 / w * (i + 1); - square[2][1] = -1.0 + 2.0 / h * j; - square[2][2] = 0.0; - square[2][3] = 1.0; - - square[3][0] = -1.0 + 2.0 / w * (i + 1); - square[3][1] = -1.0 + 2.0 / h * (j + 1); - square[3][2] = 0.0; - square[3][3] = 1.0; - - if ((i & 1) ^ (j & 1)) { - setColor(oddColor); - } else { - setColor(evenColor); - } - - if (!useQuads) { - glBegin(GL_POLYGON); - } - glVertex4fv(&square[0][0]); - glVertex4fv(&square[1][0]); - glVertex4fv(&square[2][0]); - glVertex4fv(&square[3][0]); - if (!useQuads) { - glEnd(); - } - } - } - - if (useQuads) { - glEnd(); - } - glEndList(); - - initialized = 1; - usedLighting = useLighting; - } else { - glCallList(checklist); - } -} - -static void -myShadowMatrix(float ground[4], float light[4]) -{ - float dot; - float shadowMat[4][4]; - - dot = ground[0] * light[0] + - ground[1] * light[1] + - ground[2] * light[2] + - ground[3] * light[3]; - - shadowMat[0][0] = dot - light[0] * ground[0]; - shadowMat[1][0] = 0.0 - light[0] * ground[1]; - shadowMat[2][0] = 0.0 - light[0] * ground[2]; - shadowMat[3][0] = 0.0 - light[0] * ground[3]; - - shadowMat[0][1] = 0.0 - light[1] * ground[0]; - shadowMat[1][1] = dot - light[1] * ground[1]; - shadowMat[2][1] = 0.0 - light[1] * ground[2]; - shadowMat[3][1] = 0.0 - light[1] * ground[3]; - - shadowMat[0][2] = 0.0 - light[2] * ground[0]; - shadowMat[1][2] = 0.0 - light[2] * ground[1]; - shadowMat[2][2] = dot - light[2] * ground[2]; - shadowMat[3][2] = 0.0 - light[2] * ground[3]; - - shadowMat[0][3] = 0.0 - light[3] * ground[0]; - shadowMat[1][3] = 0.0 - light[3] * ground[1]; - shadowMat[2][3] = 0.0 - light[3] * ground[2]; - shadowMat[3][3] = dot - light[3] * ground[3]; - - glMultMatrixf((const GLfloat *) shadowMat); -} - -static char *windowNameRGBDB = "shadow cube (OpenGL RGB DB)"; -static char *windowNameRGB = "shadow cube (OpenGL RGB)"; -static char *windowNameIndexDB = "shadow cube (OpenGL Index DB)"; -static char *windowNameIndex = "shadow cube (OpenGL Index)"; - -void -idle(void) -{ - tick++; - if (tick >= 120) { - tick = 0; - } - glutPostRedisplay(); -} - -/* ARGSUSED1 */ -void -keyboard(unsigned char ch, int x, int y) -{ - switch (ch) { - case 27: /* escape */ - exit(0); - break; - case 'L': - case 'l': - useLighting = !useLighting; - useLighting ? glEnable(GL_LIGHTING) : - glDisable(GL_LIGHTING); - glutPostRedisplay(); - break; - case 'F': - case 'f': - useFog = !useFog; - useFog ? glEnable(GL_FOG) : glDisable(GL_FOG); - glutPostRedisplay(); - break; - case '1': - glFogf(GL_FOG_MODE, GL_LINEAR); - glutPostRedisplay(); - break; - case '2': - glFogf(GL_FOG_MODE, GL_EXP); - glutPostRedisplay(); - break; - case '3': - glFogf(GL_FOG_MODE, GL_EXP2); - glutPostRedisplay(); - break; - case ' ': - if (!moving) { - idle(); - glutPostRedisplay(); - } - } -} - -void -display(void) -{ - GLfloat cubeXform[4][4]; - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glPushMatrix(); - glTranslatef(0.0, -1.5, 0.0); - glRotatef(-90.0, 1, 0, 0); - glScalef(2.0, 2.0, 2.0); - - drawCheck(6, 6, BLUE, YELLOW); /* draw ground */ - glPopMatrix(); - - glPushMatrix(); - glTranslatef(0.0, 0.0, -0.9); - glScalef(2.0, 2.0, 2.0); - - drawCheck(6, 6, BLUE, YELLOW); /* draw back */ - glPopMatrix(); - - glPushMatrix(); - glTranslatef(0.0, 0.2, 0.0); - glScalef(0.3, 0.3, 0.3); - glRotatef((360.0 / (30 * 1)) * tick, 1, 0, 0); - glRotatef((360.0 / (30 * 2)) * tick, 0, 1, 0); - glRotatef((360.0 / (30 * 4)) * tick, 0, 0, 1); - glScalef(1.0, 2.0, 1.0); - glGetFloatv(GL_MODELVIEW_MATRIX, (GLfloat *) cubeXform); - - drawCube(RED); /* draw cube */ - glPopMatrix(); - - glDepthMask(GL_FALSE); - if (useRGB) { - glEnable(GL_BLEND); - } else { - glEnable(GL_POLYGON_STIPPLE); - } - if (useFog) { - glDisable(GL_FOG); - } - glPushMatrix(); - myShadowMatrix(groundPlane, lightPos); - glTranslatef(0.0, 0.0, 2.0); - glMultMatrixf((const GLfloat *) cubeXform); - - drawCube(BLACK); /* draw ground shadow */ - glPopMatrix(); - - glPushMatrix(); - myShadowMatrix(backPlane, lightPos); - glTranslatef(0.0, 0.0, 2.0); - glMultMatrixf((const GLfloat *) cubeXform); - - drawCube(BLACK); /* draw back shadow */ - glPopMatrix(); - - glDepthMask(GL_TRUE); - if (useRGB) { - glDisable(GL_BLEND); - } else { - glDisable(GL_POLYGON_STIPPLE); - } - if (useFog) { - glEnable(GL_FOG); - } - if (useDB) { - glutSwapBuffers(); - } else { - glFlush(); - } -} - -void -fog_select(int fog) -{ - glFogf(GL_FOG_MODE, fog); - glutPostRedisplay(); -} - -void -menu_select(int mode) -{ - switch (mode) { - case 1: - moving = 1; - glutIdleFunc(idle); - break; - case 2: - moving = 0; - glutIdleFunc(NULL); - break; - case 3: - useFog = !useFog; - useFog ? glEnable(GL_FOG) : glDisable(GL_FOG); - glutPostRedisplay(); - break; - case 4: - useLighting = !useLighting; - useLighting ? glEnable(GL_LIGHTING) : - glDisable(GL_LIGHTING); - glutPostRedisplay(); - break; - case 5: - exit(0); - break; - } -} - -void -visible(int state) -{ - if (state == GLUT_VISIBLE) { - if (moving) - glutIdleFunc(idle); - } else { - if (moving) - glutIdleFunc(NULL); - } -} - -int -main(int argc, char **argv) -{ - int width = 350, height = 350; - int i; - char *name; - int fog_menu; - - glutInitWindowSize(width, height); - glutInit(&argc, argv); - /* process commmand line args */ - for (i = 1; i < argc; ++i) { - if (!strcmp("-c", argv[i])) { - useRGB = !useRGB; - } else if (!strcmp("-l", argv[i])) { - useLighting = !useLighting; - } else if (!strcmp("-f", argv[i])) { - useFog = !useFog; - } else if (!strcmp("-db", argv[i])) { - useDB = !useDB; - } else if (!strcmp("-logo", argv[i])) { - useLogo = !useLogo; - } else if (!strcmp("-quads", argv[i])) { - useQuads = !useQuads; - } else { - usage(); - } - } - - /* choose visual */ - if (useRGB) { - if (useDB) { - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); - name = windowNameRGBDB; - } else { - glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); - name = windowNameRGB; - } - } else { - if (useDB) { - glutInitDisplayMode(GLUT_DOUBLE | GLUT_INDEX | GLUT_DEPTH); - name = windowNameIndexDB; - } else { - glutInitDisplayMode(GLUT_SINGLE | GLUT_INDEX | GLUT_DEPTH); - name = windowNameIndex; - } - } - - glutCreateWindow(name); - - buildColormap(); - - glutKeyboardFunc(keyboard); - glutDisplayFunc(display); - glutVisibilityFunc(visible); - - fog_menu = glutCreateMenu(fog_select); - glutAddMenuEntry("Linear fog", GL_LINEAR); - glutAddMenuEntry("Exp fog", GL_EXP); - glutAddMenuEntry("Exp^2 fog", GL_EXP2); - - glutCreateMenu(menu_select); - glutAddMenuEntry("Start motion", 1); - glutAddMenuEntry("Stop motion", 2); - glutAddMenuEntry("Toggle fog", 3); - glutAddMenuEntry("Toggle lighting", 4); - glutAddSubMenu("Fog type", fog_menu); - glutAddMenuEntry("Quit", 5); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - /* setup context */ - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glFrustum(-1.0, 1.0, -1.0, 1.0, 1.0, 3.0); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(0.0, 0.0, -2.0); - - glEnable(GL_DEPTH_TEST); - - if (useLighting) { - glEnable(GL_LIGHTING); - } - glEnable(GL_LIGHT0); - glLightfv(GL_LIGHT0, GL_POSITION, lightPos); - glLightfv(GL_LIGHT0, GL_AMBIENT, lightAmb); - glLightfv(GL_LIGHT0, GL_DIFFUSE, lightDiff); - glLightfv(GL_LIGHT0, GL_SPECULAR, lightSpec); -#if 0 - glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, lightDir); - glLightf(GL_LIGHT0, GL_SPOT_EXPONENT, 80); - glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 25); -#endif - - glEnable(GL_NORMALIZE); - - if (useFog) { - glEnable(GL_FOG); - } - glFogfv(GL_FOG_COLOR, fogColor); - glFogfv(GL_FOG_INDEX, fogIndex); - glFogf(GL_FOG_MODE, GL_EXP); - glFogf(GL_FOG_DENSITY, 0.5); - glFogf(GL_FOG_START, 1.0); - glFogf(GL_FOG_END, 3.0); - - glEnable(GL_CULL_FACE); - glCullFace(GL_BACK); - - glShadeModel(GL_SMOOTH); - - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - if (useLogo) { - glPolygonStipple((const GLubyte *) sgiPattern); - } else { - glPolygonStipple((const GLubyte *) shadowPattern); - } - - glClearColor(0.0, 0.0, 0.0, 1); - glClearIndex(0); - glClearDepth(1); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/examples/scube.dsp b/lib/glut-3.7.6/progs/examples/scube.dsp deleted file mode 100644 index 5e60450e4..000000000 --- a/lib/glut-3.7.6/progs/examples/scube.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="scube" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=scube - 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 "scube.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 "scube.mak" CFG="scube - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "scube - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "scube - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "scube - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "scube - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "scube - Win32 Release" -# Name "scube - Win32 Debug" -# Begin Source File - -SOURCE=.\scube.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/simple.c b/lib/glut-3.7.6/progs/examples/simple.c deleted file mode 100644 index 58951a358..000000000 --- a/lib/glut-3.7.6/progs/examples/simple.c +++ /dev/null @@ -1,62 +0,0 @@ - -/* 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. */ - -/* This program is a response to a question posed by Gil Colgate - about how lengthy a program is required using - OpenGL compared to using Direct3D immediate mode to "draw a - triangle at screen coordinates 0,0, to 200,200 to 20,200, and I - want it to be blue at the top vertex, red at the left vertex, and - green at the right vertex". I'm not sure how long the Direct3D - program is; Gil has used Direct3D and his guess is "about 3000 - lines of code". */ - -/* X compile line: cc -o simple simple.c -lglut -lGLU -lGL -lXmu -lXext -lX11 -lm */ - -#include - -void -reshape(int w, int h) -{ - /* Because Gil specified "screen coordinates" (presumably with an - upper-left origin), this short bit of code sets up the coordinate - system to correspond to actual window coodrinates. This code - wouldn't be required if you chose a (more typical in 3D) abstract - coordinate system. */ - - glViewport(0, 0, w, h); /* Establish viewing area to cover entire window. */ - glMatrixMode(GL_PROJECTION); /* Start modifying the projection matrix. */ - glLoadIdentity(); /* Reset project matrix. */ - glOrtho(0, w, 0, h, -1, 1); /* Map abstract coords directly to window coords. */ - glScalef(1, -1, 1); /* Invert Y axis so increasing Y goes down. */ - glTranslatef(0, -h, 0); /* Shift origin up to upper-left corner. */ -} - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - glBegin(GL_TRIANGLES); - glColor3f(0.0, 0.0, 1.0); /* blue */ - glVertex2i(0, 0); - glColor3f(0.0, 1.0, 0.0); /* green */ - glVertex2i(200, 200); - glColor3f(1.0, 0.0, 0.0); /* red */ - glVertex2i(20, 200); - glEnd(); - glFlush(); /* Single buffered, so needs a flush. */ -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutCreateWindow("single triangle"); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/examples/simple.dsp b/lib/glut-3.7.6/progs/examples/simple.dsp deleted file mode 100644 index ed3e0e34c..000000000 --- a/lib/glut-3.7.6/progs/examples/simple.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="simple" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=simple - 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 "simple.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 "simple.mak" CFG="simple - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "simple - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "simple - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "simple - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "simple - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "simple - Win32 Release" -# Name "simple - Win32 Debug" -# Begin Source File - -SOURCE=.\simple.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/sphere.c b/lib/glut-3.7.6/progs/examples/sphere.c deleted file mode 100644 index 1e36639d4..000000000 --- a/lib/glut-3.7.6/progs/examples/sphere.c +++ /dev/null @@ -1,302 +0,0 @@ - -/* 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. */ - -/* Don't take this program too seriously. It is just a hack. */ - -#include -#include -#include -#include -#include - -GLfloat light_diffuse[] = -{1.0, 0.0, 0.0, 1.0}; -GLfloat light_position[] = -{1.0, 1.0, 1.0, 0.0}; -GLUquadricObj *qobj; - -int win1, win2, submenu1, submenu2; - -int list = 1; - -float thetime = 0.0; - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - if (glutGetWindow() == win1) { - glCallList(list); /* render sphere display list */ - } else { - glCallList(1); /* render sphere display list */ - } - glutSwapBuffers(); -} - -void -display_win1(void) -{ - glPushMatrix(); - glTranslatef(0.0, 0.0, -1 - 2 * sin(thetime)); - display(); - glPopMatrix(); -} - -void -idle(void) -{ - GLfloat light_position[] = - {1.0, 1.0, 1.0, 0.0}; - - glutSetWindow(win1); - thetime += 0.05; - light_position[1] = 1 + sin(thetime); - glLightfv(GL_LIGHT0, GL_POSITION, light_position); - display_win1(); -} - -/* ARGSUSED */ -void -delayed_stop(int value) -{ - glutIdleFunc(NULL); -} - -void -it(int value) -{ - glutDestroyWindow(glutGetWindow()); - printf("menu selection: win=%d, menu=%d\n", glutGetWindow(), glutGetMenu()); - switch (value) { - case 1: - if (list == 1) { - list = 2; - } else { - list = 1; - } - break; - case 2: - exit(0); - break; - case 3: - glutAddMenuEntry("new entry", value + 9); - break; - case 4: - glutChangeToMenuEntry(1, "toggle it for drawing", 1); - glutChangeToMenuEntry(3, "motion done", 3); - glutIdleFunc(idle); - break; - case 5: - glutIdleFunc(NULL); - break; - case 6: - glutTimerFunc(2000, delayed_stop, 0); - break; - default: - printf("value = %d\n", value); - } -} - -void -init(void) -{ - gluQuadricDrawStyle(qobj, GLU_FILL); - glNewList(1, GL_COMPILE); /* create sphere display list */ - gluSphere(qobj, /* radius */ 1.0, /* slices */ 20, /* stacks - - */ 20); - glEndList(); - gluQuadricDrawStyle(qobj, GLU_LINE); - glNewList(2, GL_COMPILE); /* create sphere display list */ - gluSphere(qobj, /* radius */ 1.0, /* slices */ 20, /* stacks - - */ 20); - glEndList(); - glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); - glLightfv(GL_LIGHT0, GL_POSITION, light_position); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_DEPTH_TEST); - glMatrixMode(GL_PROJECTION); - gluPerspective( /* field of view in degree */ 40.0, - /* aspect ratio */ 1.0, - /* Z near */ 1.0, /* Z far */ 10.0); - glMatrixMode(GL_MODELVIEW); - gluLookAt(0.0, 0.0, 5.0, /* eye is at (0,0,5) */ - 0.0, 0.0, 0.0, /* center is at (0,0,0) */ - 0.0, 1.0, 0.); /* up is in positive Y direction */ - glTranslatef(0.0, 0.0, -1.0); -} - -void -menustate(int inuse) -{ - printf("menu is %s\n", inuse ? "INUSE" : "not in use"); - if (!inuse) { - } -} - -void -keyboard(unsigned char key, int x, int y) -{ - if (isprint(key)) { - printf("key: `%c' %d,%d\n", key, x, y); - } else { - printf("key: 0x%x %d,%d\n", key, x, y); - } -} - -void -special(int key, int x, int y) -{ - char *name; - - switch (key) { - case GLUT_KEY_F1: - name = "F1"; - break; - case GLUT_KEY_F2: - name = "F2"; - break; - case GLUT_KEY_F3: - name = "F3"; - break; - case GLUT_KEY_F4: - name = "F4"; - break; - case GLUT_KEY_F5: - name = "F5"; - break; - case GLUT_KEY_F6: - name = "F6"; - break; - case GLUT_KEY_F7: - name = "F7"; - break; - case GLUT_KEY_F8: - name = "F8"; - break; - case GLUT_KEY_F9: - name = "F9"; - break; - case GLUT_KEY_F10: - name = "F11"; - break; - case GLUT_KEY_F11: - name = "F12"; - break; - case GLUT_KEY_LEFT: - name = "Left"; - break; - case GLUT_KEY_UP: - name = "Up"; - break; - case GLUT_KEY_RIGHT: - name = "Right"; - break; - case GLUT_KEY_DOWN: - name = "Down"; - break; - case GLUT_KEY_PAGE_UP: - name = "Page up"; - break; - case GLUT_KEY_PAGE_DOWN: - name = "Page down"; - break; - case GLUT_KEY_HOME: - name = "Home"; - break; - case GLUT_KEY_END: - name = "End"; - break; - case GLUT_KEY_INSERT: - name = "Insert"; - break; - default: - name = "UNKONW"; - break; - } - printf("special: %s %d,%d\n", name, x, y); -} - -void -mouse(int button, int state, int x, int y) -{ - printf("button: %d %s %d,%d\n", button, state == GLUT_UP ? "UP" : "down", x, y); -} - -void -motion(int x, int y) -{ - printf("motion: %d,%d\n", x, y); -} - -void -visible(int status) -{ - printf("visible: %s\n", status == GLUT_VISIBLE ? "YES" : "no"); -} - -void -enter_leave(int state) -{ - printf("enter/leave %d = %s\n", - glutGetWindow(), - state == GLUT_LEFT ? "left" : "entered"); -} - -int -main(int argc, char **argv) -{ - qobj = gluNewQuadric(); - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); - win1 = glutCreateWindow("sphere"); - glutEntryFunc(enter_leave); - init(); - glutDisplayFunc(display_win1); - glutCreateMenu(it); - glutAddMenuEntry("toggle draw mode", 1); - glutAddMenuEntry("exit", 2); - glutAddMenuEntry("new menu entry", 3); - glutAddMenuEntry("motion", 4); - glutAttachMenu(GLUT_LEFT_BUTTON); - glutCreateMenu(it); - glutAddMenuEntry("yes", 1); - glutAddMenuEntry("no", 2); - glutAttachMenu(GLUT_RIGHT_BUTTON); - win2 = glutCreateWindow("second window"); - glutEntryFunc(enter_leave); - glutKeyboardFunc(keyboard); - glutSpecialFunc(special); - glutMouseFunc(mouse); -#if 0 - glutMotionFunc(motion); -#endif - glutVisibilityFunc(visible); - init(); - light_diffuse[1] = 1; - light_diffuse[2] = 1; - glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); - glutDisplayFunc(display); - submenu1 = glutCreateMenu(it); - glutAddMenuEntry("submenu a", 666); - glutAddMenuEntry("submenu b", 777); - submenu2 = glutCreateMenu(it); - glutAddMenuEntry("submenu 1", 25); - glutAddMenuEntry("submenu 2", 26); - glutAddSubMenu("submenuXXX", submenu1); - glutCreateMenu(it); - glutAddSubMenu("submenu", submenu2); - glutAddMenuEntry("stop motion", 5); - glutAddMenuEntry("delayed stop motion", 6); - glutAddSubMenu("submenu", submenu2); - glutAttachMenu(GLUT_LEFT_BUTTON); - glutMenuStateFunc(menustate); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/examples/sphere.dsp b/lib/glut-3.7.6/progs/examples/sphere.dsp deleted file mode 100644 index d7359b139..000000000 --- a/lib/glut-3.7.6/progs/examples/sphere.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="sphere" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=sphere - 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 "sphere.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 "sphere.mak" CFG="sphere - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "sphere - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "sphere - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "sphere - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "sphere - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "sphere - Win32 Release" -# Name "sphere - Win32 Debug" -# Begin Source File - -SOURCE=.\sphere.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/sphere2.c b/lib/glut-3.7.6/progs/examples/sphere2.c deleted file mode 100644 index 343c697ab..000000000 --- a/lib/glut-3.7.6/progs/examples/sphere2.c +++ /dev/null @@ -1,62 +0,0 @@ - -/* 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 - -GLfloat light_diffuse[] = -{1.0, 0.0, 0.0, 1.0}; -GLfloat light_position[] = -{1.0, 1.0, 1.0, 0.0}; -GLUquadricObj *qobj; - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glCallList(1); /* render sphere display list */ - glutSwapBuffers(); -} - -void -gfxinit(void) -{ - qobj = gluNewQuadric(); - gluQuadricDrawStyle(qobj, GLU_FILL); - glNewList(1, GL_COMPILE); /* create sphere display list */ - gluSphere(qobj, /* radius */ 1.0, /* slices */ 20, - /* stacks */ 20); - glEndList(); - glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); - glLightfv(GL_LIGHT0, GL_POSITION, light_position); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_DEPTH_TEST); - glMatrixMode(GL_PROJECTION); - gluPerspective( /* field of view in degree */ 40.0, - /* aspect ratio */ 1.0, - /* Z near */ 1.0, /* Z far */ 10.0); - glMatrixMode(GL_MODELVIEW); - gluLookAt(0.0, 0.0, 5.0, /* eye is at (0,0,5) */ - 0.0, 0.0, 0.0, /* center is at (0,0,0) */ - 0.0, 1.0, 0.); /* up is in positive Y direction */ - glTranslatef(0.0, 0.0, -1.0); -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); - glutCreateWindow("sphere"); - glutDisplayFunc(display); - gfxinit(); - glutCreateWindow("a second window"); - glutDisplayFunc(display); - gfxinit(); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/examples/sphere2.dsp b/lib/glut-3.7.6/progs/examples/sphere2.dsp deleted file mode 100644 index 5598a0091..000000000 --- a/lib/glut-3.7.6/progs/examples/sphere2.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="sphere2" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=sphere2 - 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 "sphere2.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 "sphere2.mak" CFG="sphere2 - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "sphere2 - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "sphere2 - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "sphere2 - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "sphere2 - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "sphere2 - Win32 Release" -# Name "sphere2 - Win32 Debug" -# Begin Source File - -SOURCE=.\sphere2.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/splatlogo.c b/lib/glut-3.7.6/progs/examples/splatlogo.c deleted file mode 100644 index 57dc64134..000000000 --- a/lib/glut-3.7.6/progs/examples/splatlogo.c +++ /dev/null @@ -1,226 +0,0 @@ - -/* 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 -#include -#include - -#define MAX_SPLATS 100 - -extern int logo_width; -extern int logo_height; -extern unsigned char logo_image[]; - -typedef struct _SplatInfo { - int x, y; - GLboolean alphaTest; - GLfloat xScale, yScale; - GLfloat scale[3]; - GLfloat bias[3]; -} SplatInfo; - -int winHeight; -int numSplats = 0; -SplatInfo splatConfig; -SplatInfo splatList[MAX_SPLATS]; -SplatInfo splatDefault = { - 0, 0, - GL_TRUE, - 1.0, 1.0, - { 1.0, 1.0, 1.0 }, - { 0.0, 0.0, 0.0 } -}; - -void -reshape(int w, int h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluOrtho2D(0, w, 0, h); - glMatrixMode(GL_MODELVIEW); - winHeight = h; -} - -void -renderSplat(SplatInfo *splat) -{ - glRasterPos2i(splat->x, splat->y); - if(splat->yScale >= 0) - glBitmap(0, 0, 0, 0, 0, -logo_height * splat->yScale, 0); - if(splat->xScale < 0) - glBitmap(0, 0, 0, 0, logo_width * -splat->xScale, 0, 0); - glPixelZoom(splat->xScale, splat->yScale); - glPixelTransferf(GL_RED_SCALE, splat->scale[0]); - glPixelTransferf(GL_GREEN_SCALE, splat->scale[1]); - glPixelTransferf(GL_BLUE_SCALE, splat->scale[2]); - glPixelTransferf(GL_RED_BIAS, splat->bias[0]); - glPixelTransferf(GL_GREEN_BIAS, splat->bias[1]); - glPixelTransferf(GL_BLUE_BIAS, splat->bias[2]); - if (splat->alphaTest) - glEnable(GL_ALPHA_TEST); - else - glDisable(GL_ALPHA_TEST); - glDrawPixels(logo_width, logo_height, GL_RGBA, - GL_UNSIGNED_BYTE, logo_image); -} - -void -display(void) -{ - int i; - - glClear(GL_COLOR_BUFFER_BIT); - for (i = 0; i < numSplats; i++) { - renderSplat(&splatList[i]); - } - glFlush(); -} - -void -mouse(int button, int state, int x, int y) -{ - if (button == GLUT_LEFT_BUTTON) { - if (state == GLUT_DOWN) { - if (numSplats < MAX_SPLATS) { - splatConfig.x = x; - splatConfig.y = winHeight - y; - renderSplat(&splatConfig); - splatList[numSplats] = splatConfig; - numSplats++; - } else { - printf("out of splats!\n"); - } - } - } -} - -void -mainSelect(int value) -{ - GLfloat rpos[4]; - GLboolean valid; - - switch(value) { - case 0: - numSplats = 0; - glutPostRedisplay(); - break; - case 1: - splatConfig = splatDefault; - break; - case 2: - splatConfig.xScale *= 1.25; - splatConfig.yScale *= 1.25; - break; - case 3: - splatConfig.xScale *= 0.75; - splatConfig.yScale *= 0.75; - break; - case 4: - splatConfig.xScale *= -1.0; - break; - case 5: - splatConfig.yScale *= -1.0; - break; - case 6: - splatConfig.alphaTest = GL_TRUE; - break; - case 7: - splatConfig.alphaTest = GL_FALSE; - break; - case 411: - glGetFloatv(GL_CURRENT_RASTER_POSITION, rpos); - glGetBooleanv(GL_CURRENT_RASTER_POSITION_VALID, &valid); - printf("Raster position (%g,%g) is %s\n", - rpos[0], rpos[1], valid ? "valid" : "INVALID"); - break; - case 666: - exit(0); - break; - } -} - -void -scaleBiasSelect(int value) -{ - int color = value >> 4; - int option = value & 0xf; - - switch(option) { - case 1: - splatConfig.bias[color] += 0.25; - break; - case 2: - splatConfig.bias[color] -= 0.25; - break; - case 3: - splatConfig.scale[color] *= 2.0; - break; - case 4: - splatConfig.scale[color] *= 0.75; - break; - } -} - -int -glutScaleBiasMenu(int mask) -{ - int menu; - - menu = glutCreateMenu(scaleBiasSelect); - glutAddMenuEntry("+25% bias", mask | 1); - glutAddMenuEntry("-25% bias", mask | 2); - glutAddMenuEntry("+25% scale", mask | 3); - glutAddMenuEntry("-25% scale", mask | 4); - return menu; -} - -int -main(int argc, char *argv[]) -{ - int mainMenu, redMenu, greenMenu, blueMenu; - - glutInitWindowSize(680, 440); - glutInit(&argc, argv); - splatConfig = splatDefault; - - glutCreateWindow("splatlogo"); - - glutReshapeFunc(reshape); - glutDisplayFunc(display); - glutMouseFunc(mouse); - - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - glAlphaFunc(GL_GEQUAL, 0.5); - glDisable(GL_ALPHA_TEST); - glEnable(GL_DITHER); - glClearColor(1.0, 1.0, 1.0, 0.0); - - redMenu = glutScaleBiasMenu(0 << 4); - greenMenu = glutScaleBiasMenu(1 << 4); - blueMenu = glutScaleBiasMenu(2 << 4); - - mainMenu = glutCreateMenu(mainSelect); - glutAddMenuEntry("Reset splays", 0); - glutAddMenuEntry("Reset splat config", 1); - glutAddSubMenu("Red control", redMenu); - glutAddSubMenu("Green control", greenMenu); - glutAddSubMenu("Blue control", blueMenu); - glutAddMenuEntry("+25% zoom", 2); - glutAddMenuEntry("-25% zoom", 3); - glutAddMenuEntry("X flip", 4); - glutAddMenuEntry("Y flip", 5); - glutAddMenuEntry("Enable alpha test", 6); - glutAddMenuEntry("Disable alpha test", 7); - glutSetMenu(mainMenu); - glutAddMenuEntry("Query raster position", 411); - glutAddMenuEntry("Quit", 666); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutMainLoop(); - return 0; /* Never reached; make ANSI C happy. */ -} diff --git a/lib/glut-3.7.6/progs/examples/splatlogo.dsp b/lib/glut-3.7.6/progs/examples/splatlogo.dsp deleted file mode 100644 index e2e121bb4..000000000 --- a/lib/glut-3.7.6/progs/examples/splatlogo.dsp +++ /dev/null @@ -1,92 +0,0 @@ -# Microsoft Developer Studio Project File - Name="splatlogo" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=splatlogo - 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 "splatlogo.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 "splatlogo.mak" CFG="splatlogo - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "splatlogo - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "splatlogo - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "splatlogo - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "splatlogo - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "splatlogo - Win32 Release" -# Name "splatlogo - Win32 Debug" -# Begin Source File - -SOURCE=.\logo.c -# End Source File -# Begin Source File - -SOURCE=.\splatlogo.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/spots.c b/lib/glut-3.7.6/progs/examples/spots.c deleted file mode 100644 index 97a3f04a4..000000000 --- a/lib/glut-3.7.6/progs/examples/spots.c +++ /dev/null @@ -1,350 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1994. */ - -/** - * (c) Copyright 1993, 1994, 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 -#include -#include -#include -#include - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -#define TWO_PI (2*M_PI) - -typedef struct lightRec { - float amb[4]; - float diff[4]; - float spec[4]; - float pos[4]; - float spotDir[3]; - float spotExp; - float spotCutoff; - float atten[3]; - - float trans[3]; - float rot[3]; - float swing[3]; - float arc[3]; - float arcIncr[3]; -} Light; - -static int useSAME_AMB_SPEC = 1; -/* *INDENT-OFF* */ -static float modelAmb[4] = {0.2, 0.2, 0.2, 1.0}; - -static float matAmb[4] = {0.2, 0.2, 0.2, 1.0}; -static float matDiff[4] = {0.8, 0.8, 0.8, 1.0}; -static float matSpec[4] = {0.4, 0.4, 0.4, 1.0}; -static float matEmission[4] = {0.0, 0.0, 0.0, 1.0}; -/* *INDENT-ON* */ - -#define NUM_LIGHTS 3 -static Light spots[] = -{ - { - {0.2, 0.0, 0.0, 1.0}, /* ambient */ - {0.8, 0.0, 0.0, 1.0}, /* diffuse */ - {0.4, 0.0, 0.0, 1.0}, /* specular */ - {0.0, 0.0, 0.0, 1.0}, /* position */ - {0.0, -1.0, 0.0}, /* direction */ - 20.0, - 60.0, /* exponent, cutoff */ - {1.0, 0.0, 0.0}, /* attenuation */ - {0.0, 1.25, 0.0}, /* translation */ - {0.0, 0.0, 0.0}, /* rotation */ - {20.0, 0.0, 40.0}, /* swing */ - {0.0, 0.0, 0.0}, /* arc */ - {TWO_PI / 70.0, 0.0, TWO_PI / 140.0} /* arc increment */ - }, - { - {0.0, 0.2, 0.0, 1.0}, /* ambient */ - {0.0, 0.8, 0.0, 1.0}, /* diffuse */ - {0.0, 0.4, 0.0, 1.0}, /* specular */ - {0.0, 0.0, 0.0, 1.0}, /* position */ - {0.0, -1.0, 0.0}, /* direction */ - 20.0, - 60.0, /* exponent, cutoff */ - {1.0, 0.0, 0.0}, /* attenuation */ - {0.0, 1.25, 0.0}, /* translation */ - {0.0, 0.0, 0.0}, /* rotation */ - {20.0, 0.0, 40.0}, /* swing */ - {0.0, 0.0, 0.0}, /* arc */ - {TWO_PI / 120.0, 0.0, TWO_PI / 60.0} /* arc increment */ - }, - { - {0.0, 0.0, 0.2, 1.0}, /* ambient */ - {0.0, 0.0, 0.8, 1.0}, /* diffuse */ - {0.0, 0.0, 0.4, 1.0}, /* specular */ - {0.0, 0.0, 0.0, 1.0}, /* position */ - {0.0, -1.0, 0.0}, /* direction */ - 20.0, - 60.0, /* exponent, cutoff */ - {1.0, 0.0, 0.0}, /* attenuation */ - {0.0, 1.25, 0.0}, /* translation */ - {0.0, 0.0, 0.0}, /* rotation */ - {20.0, 0.0, 40.0}, /* swing */ - {0.0, 0.0, 0.0}, /* arc */ - {TWO_PI / 50.0, 0.0, TWO_PI / 100.0} /* arc increment */ - } -}; - -static void -usage(char *name) -{ - printf("\n"); - printf("usage: %s [options]\n", name); - printf("\n"); - printf(" Options:\n"); - printf(" -geometry Specify size and position WxH+X+Y\n"); - printf(" -lm Toggle lighting(SPECULAR and AMBIENT are/not same\n"); - printf("\n"); -#ifndef EXIT_FAILURE /* should be defined by ANSI C */ -#define EXIT_FAILURE 1 -#endif - exit(EXIT_FAILURE); -} - -static void -initLights(void) -{ - int k; - - for (k = 0; k < NUM_LIGHTS; ++k) { - int lt = GL_LIGHT0 + k; - Light *light = &spots[k]; - - glEnable(lt); - glLightfv(lt, GL_AMBIENT, light->amb); - glLightfv(lt, GL_DIFFUSE, light->diff); - - if (useSAME_AMB_SPEC) - glLightfv(lt, GL_SPECULAR, light->amb); - else - glLightfv(lt, GL_SPECULAR, light->spec); - - glLightf(lt, GL_SPOT_EXPONENT, light->spotExp); - glLightf(lt, GL_SPOT_CUTOFF, light->spotCutoff); - glLightf(lt, GL_CONSTANT_ATTENUATION, light->atten[0]); - glLightf(lt, GL_LINEAR_ATTENUATION, light->atten[1]); - glLightf(lt, GL_QUADRATIC_ATTENUATION, light->atten[2]); - } -} - -static void -aimLights(void) -{ - int k; - - for (k = 0; k < NUM_LIGHTS; ++k) { - Light *light = &spots[k]; - - light->rot[0] = light->swing[0] * sin(light->arc[0]); - light->arc[0] += light->arcIncr[0]; - if (light->arc[0] > TWO_PI) - light->arc[0] -= TWO_PI; - - light->rot[1] = light->swing[1] * sin(light->arc[1]); - light->arc[1] += light->arcIncr[1]; - if (light->arc[1] > TWO_PI) - light->arc[1] -= TWO_PI; - - light->rot[2] = light->swing[2] * sin(light->arc[2]); - light->arc[2] += light->arcIncr[2]; - if (light->arc[2] > TWO_PI) - light->arc[2] -= TWO_PI; - } -} - -static void -setLights(void) -{ - int k; - - for (k = 0; k < NUM_LIGHTS; ++k) { - int lt = GL_LIGHT0 + k; - Light *light = &spots[k]; - - glPushMatrix(); - glTranslatef(light->trans[0], light->trans[1], light->trans[2]); - glRotatef(light->rot[0], 1, 0, 0); - glRotatef(light->rot[1], 0, 1, 0); - glRotatef(light->rot[2], 0, 0, 1); - glLightfv(lt, GL_POSITION, light->pos); - glLightfv(lt, GL_SPOT_DIRECTION, light->spotDir); - glPopMatrix(); - } -} - -static void -drawLights(void) -{ - int k; - - glDisable(GL_LIGHTING); - for (k = 0; k < NUM_LIGHTS; ++k) { - Light *light = &spots[k]; - - glColor4fv(light->diff); - - glPushMatrix(); - glTranslatef(light->trans[0], light->trans[1], light->trans[2]); - glRotatef(light->rot[0], 1, 0, 0); - glRotatef(light->rot[1], 0, 1, 0); - glRotatef(light->rot[2], 0, 0, 1); - glBegin(GL_LINES); - glVertex3f(light->pos[0], light->pos[1], light->pos[2]); - glVertex3f(light->spotDir[0], light->spotDir[1], light->spotDir[2]); - glEnd(); - glPopMatrix(); - } - glEnable(GL_LIGHTING); -} - -static void -drawPlane(int w, int h) -{ - int i, j; - float dw = 1.0 / w; - float dh = 1.0 / h; - - glNormal3f(0.0, 0.0, 1.0); - for (j = 0; j < h; ++j) { - glBegin(GL_TRIANGLE_STRIP); - for (i = 0; i <= w; ++i) { - glVertex2f(dw * i, dh * (j + 1)); - glVertex2f(dw * i, dh * j); - } - glEnd(); - } -} - -int spin = 0; - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - - glPushMatrix(); - glRotatef(spin, 0, 1, 0); - - aimLights(); - setLights(); - - glPushMatrix(); - glRotatef(-90.0, 1, 0, 0); - glScalef(1.9, 1.9, 1.0); - glTranslatef(-0.5, -0.5, 0.0); - drawPlane(16, 16); - glPopMatrix(); - - drawLights(); - glPopMatrix(); - - glutSwapBuffers(); -} - -void -animate(void) -{ - spin += 0.5; - if (spin > 360.0) - spin -= 360.0; - glutPostRedisplay(); -} - -void -visibility(int state) -{ - if (state == GLUT_VISIBLE) { - glutIdleFunc(animate); - } else { - glutIdleFunc(NULL); - } -} - -int -main(int argc, char **argv) -{ - int i; - - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); - /* process commmand line args */ - for (i = 1; i < argc; ++i) { - if (!strcmp("-lm", argv[i])) { - useSAME_AMB_SPEC = !useSAME_AMB_SPEC; - } else { - usage(argv[0]); - } - } - - glutCreateWindow("GLUT spotlight swing"); - glutDisplayFunc(display); - glutVisibilityFunc(visibility); - - glMatrixMode(GL_PROJECTION); - glFrustum(-1, 1, -1, 1, 2, 6); - - glMatrixMode(GL_MODELVIEW); - glTranslatef(0.0, 0.0, -3.0); - glRotatef(45.0, 1, 0, 0); - - glEnable(GL_LIGHTING); - glEnable(GL_NORMALIZE); - - glLightModelfv(GL_LIGHT_MODEL_AMBIENT, modelAmb); - glLightModelf(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE); - glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE); - - glMaterialfv(GL_FRONT, GL_AMBIENT, matAmb); - glMaterialfv(GL_FRONT, GL_DIFFUSE, matDiff); - glMaterialfv(GL_FRONT, GL_SPECULAR, matSpec); - glMaterialfv(GL_FRONT, GL_EMISSION, matEmission); - glMaterialf(GL_FRONT, GL_SHININESS, 10.0); - - initLights(); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/examples/spots.dsp b/lib/glut-3.7.6/progs/examples/spots.dsp deleted file mode 100644 index b653f28de..000000000 --- a/lib/glut-3.7.6/progs/examples/spots.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="spots" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=spots - 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 "spots.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 "spots.mak" CFG="spots - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "spots - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "spots - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "spots - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "spots - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "spots - Win32 Release" -# Name "spots - Win32 Debug" -# Begin Source File - -SOURCE=.\spots.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/stars.c b/lib/glut-3.7.6/progs/examples/stars.c deleted file mode 100644 index 91521da3b..000000000 --- a/lib/glut-3.7.6/progs/examples/stars.c +++ /dev/null @@ -1,387 +0,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 -#include -#include -#include -#include -#include - -extern void *__glutCurrentWindow; - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -enum { - NORMAL = 0, - WEIRD = 1 -}; - -enum { - STREAK = 0, - CIRCLE = 1 -}; - -#define MAXSTARS 400 -#define MAXPOS 10000 -#define MAXWARP 10 -#define MAXANGLES 6000 - -typedef struct _starRec { - GLint type; - float x[2], y[2], z[2]; - float offsetX, offsetY, offsetR, rotation; -} starRec; - -GLenum doubleBuffer; -GLint windW = 300, windH = 300; - -GLenum flag = NORMAL; -GLint starCount = MAXSTARS / 2; -float speed = 1.0; -GLint nitro = 0; -starRec stars[MAXSTARS]; -float sinTable[MAXANGLES]; - -float -Sin(float angle) -{ - return (sinTable[(int) angle % MAXANGLES]); -} - -float -Cos(float angle) -{ - return (sinTable[((int) angle + (MAXANGLES / 4)) % MAXANGLES]); -} - -void -NewStar(GLint n, GLint d) -{ - if (rand() % 4 == 0) { - stars[n].type = CIRCLE; - } else { - stars[n].type = STREAK; - } - stars[n].x[0] = (float) (rand() % MAXPOS - MAXPOS / 2); - stars[n].y[0] = (float) (rand() % MAXPOS - MAXPOS / 2); - stars[n].z[0] = (float) (rand() % MAXPOS + d); - stars[n].x[1] = stars[n].x[0]; - stars[n].y[1] = stars[n].y[0]; - stars[n].z[1] = stars[n].z[0]; - if (rand() % 4 == 0 && flag == WEIRD) { - stars[n].offsetX = (float) (rand() % 100 - 100 / 2); - stars[n].offsetY = (float) (rand() % 100 - 100 / 2); - stars[n].offsetR = (float) (rand() % 25 - 25 / 2); - } else { - stars[n].offsetX = 0.0; - stars[n].offsetY = 0.0; - stars[n].offsetR = 0.0; - } -} - -void -RotatePoint(float *x, float *y, float rotation) -{ - float tmpX, tmpY; - - tmpX = *x * Cos(rotation) - *y * Sin(rotation); - tmpY = *y * Cos(rotation) + *x * Sin(rotation); - *x = tmpX; - *y = tmpY; -} - -void -MoveStars(void) -{ - float offset; - GLint n; - - offset = speed * 60.0; - - for (n = 0; n < starCount; n++) { - stars[n].x[1] = stars[n].x[0]; - stars[n].y[1] = stars[n].y[0]; - stars[n].z[1] = stars[n].z[0]; - stars[n].x[0] += stars[n].offsetX; - stars[n].y[0] += stars[n].offsetY; - stars[n].z[0] -= offset; - stars[n].rotation += stars[n].offsetR; - if (stars[n].rotation >= MAXANGLES) { - stars[n].rotation = 0.0; - } - } -} - -GLenum -StarPoint(GLint n) -{ - float x0, y0; - - x0 = stars[n].x[0] * windW / stars[n].z[0]; - y0 = stars[n].y[0] * windH / stars[n].z[0]; - RotatePoint(&x0, &y0, stars[n].rotation); - x0 += windW / 2.0; - y0 += windH / 2.0; - - if (x0 >= 0.0 && x0 < windW && y0 >= 0.0 && y0 < windH) { - return GL_TRUE; - } else { - return GL_FALSE; - } -} - -void -ShowStar(GLint n) -{ - float x0, y0, x1, y1, width; - GLint i; - - x0 = stars[n].x[0] * windW / stars[n].z[0]; - y0 = stars[n].y[0] * windH / stars[n].z[0]; - RotatePoint(&x0, &y0, stars[n].rotation); - x0 += windW / 2.0; - y0 += windH / 2.0; - - if (x0 >= 0.0 && x0 < windW && y0 >= 0.0 && y0 < windH) { - if (stars[n].type == STREAK) { - x1 = stars[n].x[1] * windW / stars[n].z[1]; - y1 = stars[n].y[1] * windH / stars[n].z[1]; - RotatePoint(&x1, &y1, stars[n].rotation); - x1 += windW / 2.0; - y1 += windH / 2.0; - - glLineWidth(MAXPOS / 100.0 / stars[n].z[0] + 1.0); - glColor3f(1.0, (MAXWARP - speed) / MAXWARP, (MAXWARP - speed) / MAXWARP); - if (fabs(x0 - x1) < 1.0 && fabs(y0 - y1) < 1.0) { - glBegin(GL_POINTS); - glVertex2f(x0, y0); - glEnd(); - } else { - glBegin(GL_LINES); - glVertex2f(x0, y0); - glVertex2f(x1, y1); - glEnd(); - } - } else { - width = MAXPOS / 10.0 / stars[n].z[0] + 1.0; - glColor3f(1.0, 0.0, 0.0); - glBegin(GL_POLYGON); - for (i = 0; i < 8; i++) { - float x = x0 + width * Cos((float) i * MAXANGLES / 8.0); - float y = y0 + width * Sin((float) i * MAXANGLES / 8.0); - glVertex2f(x, y); - }; - glEnd(); - } - } -} - -void -UpdateStars(void) -{ - GLint n; - - glClear(GL_COLOR_BUFFER_BIT); - - for (n = 0; n < starCount; n++) { - if (stars[n].z[0] > speed || (stars[n].z[0] > 0.0 && speed < MAXWARP)) { - if (StarPoint(n) == GL_FALSE) { - NewStar(n, MAXPOS); - } - } else { - NewStar(n, MAXPOS); - } - } -} - -void -ShowStars(void) -{ - GLint n; - - glClear(GL_COLOR_BUFFER_BIT); - - for (n = 0; n < starCount; n++) { - if (stars[n].z[0] > speed || (stars[n].z[0] > 0.0 && speed < MAXWARP)) { - ShowStar(n); - } - } -} - -static void -Init(void) -{ - float angle; - GLint n; - - srand((unsigned int) time(NULL)); - - for (n = 0; n < MAXSTARS; n++) { - NewStar(n, 100); - } - - angle = 0.0; - for (n = 0; n < MAXANGLES; n++) { - sinTable[n] = sin(angle); - angle += M_PI / (MAXANGLES / 2.0); - } - - glClearColor(0.0, 0.0, 0.0, 0.0); - - glDisable(GL_DITHER); -} - -void -Reshape(int width, int height) -{ - windW = width; - windH = height; - - glViewport(0, 0, windW, windH); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluOrtho2D(-0.5, windW + 0.5, -0.5, windH + 0.5); - glMatrixMode(GL_MODELVIEW); -} - -/* ARGSUSED1 */ -static void -Key(unsigned char key, int x, int y) -{ - switch (key) { - case ' ': - flag = (flag == NORMAL) ? WEIRD : NORMAL; - break; - case 't': - nitro = 1; - break; - case 27: - exit(0); - } -} - -void -Idle(void) -{ - MoveStars(); - UpdateStars(); - if (nitro > 0) { - speed = (float) (nitro / 10) + 1.0; - if (speed > MAXWARP) { - speed = MAXWARP; - } - if (++nitro > MAXWARP * 10) { - nitro = -nitro; - } - } else if (nitro < 0) { - nitro++; - speed = (float) (-nitro / 10) + 1.0; - if (speed > MAXWARP) { - speed = MAXWARP; - } - } - glutPostRedisplay(); -} - -void -Display(void) -{ - ShowStars(); - if (doubleBuffer) { - glutSwapBuffers(); - } else { - glFlush(); - } -} - -void -Visible(int state) -{ - if (state == GLUT_VISIBLE) { - glutIdleFunc(Idle); - } else { - glutIdleFunc(NULL); - } -} - -static void -Args(int argc, char **argv) -{ - GLint i; - - doubleBuffer = GL_TRUE; - - for (i = 1; i < argc; i++) { - if (strcmp(argv[i], "-sb") == 0) { - doubleBuffer = GL_FALSE; - } else if (strcmp(argv[i], "-db") == 0) { - doubleBuffer = GL_TRUE; - } - } -} - -int -main(int argc, char **argv) -{ - GLenum type; - - glutInitWindowSize(windW, windH); - glutInit(&argc, argv); - Args(argc, argv); - - type = GLUT_RGB; - type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; - glutInitDisplayMode(type); - glutCreateWindow("Stars"); - - Init(); - - glutReshapeFunc(Reshape); - glutKeyboardFunc(Key); - glutVisibilityFunc(Visible); - glutDisplayFunc(Display); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/examples/stars.dsp b/lib/glut-3.7.6/progs/examples/stars.dsp deleted file mode 100644 index 63d16c713..000000000 --- a/lib/glut-3.7.6/progs/examples/stars.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="stars" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=stars - 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 "stars.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 "stars.mak" CFG="stars - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "stars - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "stars - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "stars - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "stars - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "stars - Win32 Release" -# Name "stars - Win32 Debug" -# Begin Source File - -SOURCE=.\stars.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/stenciltst.c b/lib/glut-3.7.6/progs/examples/stenciltst.c deleted file mode 100644 index 0abbddf96..000000000 --- a/lib/glut-3.7.6/progs/examples/stenciltst.c +++ /dev/null @@ -1,147 +0,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 -#include -#include -#include - -GLboolean doubleBuffer; - -/* ARGSUSED1 */ -static void -Key(unsigned char key, int x, int y) -{ - switch (key) { - case 27: - exit(0); - } -} - -static void -Draw(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); - - glStencilFunc(GL_ALWAYS, 1, 1); - glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); - - /* red triangle */ - glColor3ub(200, 0, 0); - glBegin(GL_POLYGON); - glVertex3i(-4, -4, 0); - glVertex3i(4, -4, 0); - glVertex3i(0, 4, 0); - glEnd(); - - glStencilFunc(GL_EQUAL, 1, 1); - glStencilOp(GL_INCR, GL_KEEP, GL_DECR); - - /* green square */ - glColor3ub(0, 200, 0); - glBegin(GL_POLYGON); - glVertex3i(3, 3, 0); - glVertex3i(-3, 3, 0); - glVertex3i(-3, -3, 0); - glVertex3i(3, -3, 0); - glEnd(); - - glStencilFunc(GL_EQUAL, 1, 1); - glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); - - /* blue square */ - glColor3ub(0, 0, 200); - glBegin(GL_POLYGON); - glVertex3i(3, 3, 0); - glVertex3i(-3, 3, 0); - glVertex3i(-3, -3, 0); - glVertex3i(3, -3, 0); - glEnd(); - - if (doubleBuffer) { - glutSwapBuffers(); - } else { - glFlush(); - } -} - -static void -Args(int argc, char **argv) -{ - GLint i; - - doubleBuffer = GL_TRUE; - for (i = 1; i < argc; i++) { - if (strcmp(argv[i], "-sb") == 0) { - doubleBuffer = GL_FALSE; - } else if (strcmp(argv[i], "-db") == 0) { - doubleBuffer = GL_TRUE; - } - } -} - -int -main(int argc, char **argv) -{ - GLenum type; - - glutInit(&argc, argv); - Args(argc, argv); - - type = GLUT_RGB | GLUT_STENCIL; - type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; - glutInitDisplayMode(type); - glutCreateWindow("Stencil Test"); - - glClearColor(0.0, 0.0, 0.0, 0.0); - glClearStencil(0); - glStencilMask(1); - glEnable(GL_STENCIL_TEST); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho(-5.0, 5.0, -5.0, 5.0, -5.0, 5.0); - glMatrixMode(GL_MODELVIEW); - - glutKeyboardFunc(Key); - glutDisplayFunc(Draw); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/examples/stenciltst.dsp b/lib/glut-3.7.6/progs/examples/stenciltst.dsp deleted file mode 100644 index e465419c3..000000000 --- a/lib/glut-3.7.6/progs/examples/stenciltst.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="stenciltst" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=stenciltst - 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 "stenciltst.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 "stenciltst.mak" CFG="stenciltst - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "stenciltst - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "stenciltst - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "stenciltst - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "stenciltst - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "stenciltst - Win32 Release" -# Name "stenciltst - Win32 Debug" -# Begin Source File - -SOURCE=.\stenciltst.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/stereo.c b/lib/glut-3.7.6/progs/examples/stereo.c deleted file mode 100644 index a6999d185..000000000 --- a/lib/glut-3.7.6/progs/examples/stereo.c +++ /dev/null @@ -1,33 +0,0 @@ - -/* 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 -#include -#include - -void -display(void) -{ - glDrawBuffer(GL_BACK_LEFT); - glClearColor(1.0, 0.0, 0.0, 1.0); /* red */ - glClear(GL_COLOR_BUFFER_BIT); - glDrawBuffer(GL_BACK_RIGHT); - glClearColor(0.0, 0.0, 1.0, 1.0); /* blue */ - glClear(GL_COLOR_BUFFER_BIT); - glutSwapBuffers(); -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_STEREO); - glutCreateWindow("stereo example"); - glutDisplayFunc(display); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/examples/stereo.dsp b/lib/glut-3.7.6/progs/examples/stereo.dsp deleted file mode 100644 index be196b8b9..000000000 --- a/lib/glut-3.7.6/progs/examples/stereo.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="stereo" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=stereo - 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 "stereo.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 "stereo.mak" CFG="stereo - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "stereo - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "stereo - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "stereo - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "stereo - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "stereo - Win32 Release" -# Name "stereo - Win32 Debug" -# Begin Source File - -SOURCE=.\stereo.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/stroke.c b/lib/glut-3.7.6/progs/examples/stroke.c deleted file mode 100644 index 4a1e7c17a..000000000 --- a/lib/glut-3.7.6/progs/examples/stroke.c +++ /dev/null @@ -1,100 +0,0 @@ - -/* 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 -#include - -void *font = GLUT_STROKE_ROMAN; -void *fonts[] = -{GLUT_STROKE_ROMAN, GLUT_STROKE_MONO_ROMAN}; -char defaultMessage[] = "GLUT means OpenGL."; -char *message = defaultMessage; - -int angle = 0; - -void -selectFont(int newfont) -{ - font = fonts[newfont]; - glutPostRedisplay(); -} - -void -selectMessage(int msg) -{ - switch (msg) { - case 1: - message = "abcdefghijklmnop"; - break; - case 2: - message = "ABCDEFGHIJKLMNOP"; - break; - } -} - -void -tick(void) -{ - angle -= 2; - glutPostRedisplay(); -} - -void -display(void) -{ - int len, i; - - glClear(GL_COLOR_BUFFER_BIT); - glPushMatrix(); - glRotatef(angle, 0.0, 0.0, 1.0); - glTranslatef(-750, 0, 0); - len = (int) strlen(message); - for (i = 0; i < len; i++) { - glutStrokeCharacter(font, message[i]); - } - glPopMatrix(); - glutSwapBuffers(); -} - -int -main(int argc, char **argv) -{ - int i, submenu; - - glutInit(&argc, argv); - for (i = 1; i < argc; i++) { - if (!strcmp(argv[i], "-mono")) { - font = GLUT_STROKE_MONO_ROMAN; - } - } - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); - glutInitWindowSize(600, 600); - glutCreateWindow("anti-aliased stroke font"); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluOrtho2D(0, 2000, 0, 2000); - glMatrixMode(GL_MODELVIEW); - glEnable(GL_LINE_SMOOTH); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glLineWidth(3.0); - glTranslatef(1000, 1000, 0); - glClearColor(0.0, 0.0, 0.0, 1.0); - glColor3f(1.0, 1.0, 1.0); - glutDisplayFunc(display); - glutIdleFunc(tick); - submenu = glutCreateMenu(selectMessage); - glutAddMenuEntry("abc", 1); - glutAddMenuEntry("ABC", 2); - glutCreateMenu(selectFont); - glutAddMenuEntry("Roman", 0); - glutAddMenuEntry("Mono Roman", 1); - glutAddSubMenu("Messages", submenu); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/examples/stroke.dsp b/lib/glut-3.7.6/progs/examples/stroke.dsp deleted file mode 100644 index 97c10adae..000000000 --- a/lib/glut-3.7.6/progs/examples/stroke.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="stroke" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=stroke - 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 "stroke.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 "stroke.mak" CFG="stroke - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "stroke - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "stroke - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "stroke - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "stroke - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "stroke - Win32 Release" -# Name "stroke - Win32 Debug" -# Begin Source File - -SOURCE=.\stroke.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/subwin.c b/lib/glut-3.7.6/progs/examples/subwin.c deleted file mode 100644 index e2e99ebba..000000000 --- a/lib/glut-3.7.6/progs/examples/subwin.c +++ /dev/null @@ -1,88 +0,0 @@ - -/* 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 -#include - -#define GAP 10 - -int main_w, w1, w2, w3, w4; - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - glFlush(); -} - -void -vis(int visState) -{ - printf("VIS: win=%d, v=%d\n", glutGetWindow(), visState); -} - -void -reshape(int w, int h) -{ - int width = 50; - int height = 50; - - glViewport(0, 0, w, h); - if (w > 50) { - width = (w - 3 * GAP) / 2; - } else { - width = 10; - } - if (h > 50) { - height = (h - 3 * GAP) / 2; - } else { - height = 10; - } - glutSetWindow(w1); - glutPositionWindow(GAP, GAP); - glutReshapeWindow(width, height); - glutSetWindow(w2); - glutPositionWindow(GAP + width + GAP, GAP); - glutReshapeWindow(width, height); - glutSetWindow(w3); - glutPositionWindow(GAP, GAP + height + GAP); - glutReshapeWindow(width, height); - glutSetWindow(w4); - glutPositionWindow(GAP + width + GAP, GAP + height + GAP); - glutReshapeWindow(width, height); -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGB); - glutInitWindowSize(210, 210); - main_w = glutCreateWindow("4 subwindows"); - glutDisplayFunc(display); - glutVisibilityFunc(vis); - glutReshapeFunc(reshape); - glClearColor(1.0, 1.0, 1.0, 1.0); - w1 = glutCreateSubWindow(main_w, 10, 10, 90, 90); - glutDisplayFunc(display); - glutVisibilityFunc(vis); - glClearColor(1.0, 0.0, 0.0, 1.0); - w2 = glutCreateSubWindow(main_w, 110, 10, 90, 90); - glutDisplayFunc(display); - glutVisibilityFunc(vis); - glClearColor(0.0, 1.0, 0.0, 1.0); - w3 = glutCreateSubWindow(main_w, 10, 110, 90, 90); - glutDisplayFunc(display); - glutVisibilityFunc(vis); - glClearColor(0.0, 0.0, 1.0, 1.0); - w4 = glutCreateSubWindow(main_w, 110, 110, 90, 90); - glutDisplayFunc(display); - glutVisibilityFunc(vis); - glClearColor(1.0, 1.0, 0.0, 1.0); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/examples/subwin.dsp b/lib/glut-3.7.6/progs/examples/subwin.dsp deleted file mode 100644 index e8e5d542f..000000000 --- a/lib/glut-3.7.6/progs/examples/subwin.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="subwin" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=subwin - 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 "subwin.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 "subwin.mak" CFG="subwin - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "subwin - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "subwin - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "subwin - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "subwin - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "subwin - Win32 Release" -# Name "subwin - Win32 Debug" -# Begin Source File - -SOURCE=.\subwin.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/surfgrid.c b/lib/glut-3.7.6/progs/examples/surfgrid.c deleted file mode 100644 index 4b026a792..000000000 --- a/lib/glut-3.7.6/progs/examples/surfgrid.c +++ /dev/null @@ -1,588 +0,0 @@ -/** - * surfgrid.c - simple test of polygon offset - * - * GLUT distribution version $Revision: 1.8 $ - * - * usage: - * surfgrid [-f] - * - * options: - * -f run on full screen - * - * keys: - * p toggle polygon offset - * F increase polygon offset factor - * f decrease polygon offset factor - * B increase polygon offset bias - * b decrease polygon offset bias - * g toggle grid drawing - * s toggle smooth/flat shading - * n toggle whether to use GL evaluators or GLU nurbs - * u decr number of segments in U direction - * U incr number of segments in U direction - * v decr number of segments in V direction - * V incr number of segments in V direction - * escape quit - */ - -#include -#include -#include -#include -#include - -#define W 600 -#define H 600 - -float z_axis[] = -{0.0, 0.0, 1.0}; - -void -norm(float v[3]) -{ - float r; - - r = sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]); - - v[0] /= r; - v[1] /= r; - v[2] /= r; -} - -void -cross(float v1[3], float v2[3], float result[3]) -{ - result[0] = v1[1] * v2[2] - v1[2] * v2[1]; - result[1] = v1[2] * v2[0] - v1[0] * v2[2]; - result[2] = v1[0] * v2[1] - v1[1] * v2[0]; -} - -float -length(float v[3]) -{ - float r = sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]); - return r; -} - -static int winwidth = W, winheight = H; -GLUnurbsObj *nobj; -GLuint surflist, gridlist; - -int useglunurbs = 0; -int smooth = 1; -GLboolean tracking = GL_FALSE; -int showgrid = 1; -int showsurf = 1; -int fullscreen = 0; -float modelmatrix[16]; -float factor = 0.5; -float bias = 0.002; -int usegments = 4; -int vsegments = 4; - -int spindx, spindy; -int startx, starty; -int curx, cury; -int prevx, prevy; /* to get good deltas using glut */ - -void redraw(void); -void createlists(void); - -/* Control points of the torus in Bezier form. Can be rendered - using OpenGL evaluators. */ -static GLfloat torusbezierpts[] = -{ -/* *INDENT-OFF* */ - 4.0, 0.0, 0.0, 4.0, 2.0, 0.0, 1.0, 2.0, 3.0, 0.0, 1.0, 2.0, - 3.0, 0.0, 1.0, 2.0, 4.0, 0.0, 1.0, 2.0, 8.0, 0.0, 0.0, 4.0, - 8.0, 0.0, 0.0, 4.0, 4.0, 0.0,-1.0, 2.0, 3.0, 0.0,-1.0, 2.0, - 3.0, 0.0,-1.0, 2.0, 2.0, 0.0,-1.0, 2.0, 4.0, 0.0, 0.0, 4.0, - 2.0,-2.0, 0.0, 2.0, 1.0,-1.0, 0.5, 1.0, 1.5,-1.5, 0.5, 1.0, - 1.5,-1.5, 0.5, 1.0, 2.0,-2.0, 0.5, 1.0, 4.0,-4.0, 0.0, 2.0, - 4.0,-4.0, 0.0, 2.0, 2.0,-2.0,-0.5, 1.0, 1.5,-1.5,-0.5, 1.0, - 1.5,-1.5,-0.5, 1.0, 1.0,-1.0,-0.5, 1.0, 2.0,-2.0, 0.0, 2.0, - 0.0,-2.0, 0.0, 2.0, 0.0,-1.0, 0.5, 1.0, 0.0,-1.5, 0.5, 1.0, - 0.0,-1.5, 0.5, 1.0, 0.0,-2.0, 0.5, 1.0, 0.0,-4.0, 0.0, 2.0, - 0.0,-4.0, 0.0, 2.0, 0.0,-2.0,-0.5, 1.0, 0.0,-1.5,-0.5, 1.0, - 0.0,-1.5,-0.5, 1.0, 0.0,-1.0,-0.5, 1.0, 0.0,-2.0, 0.0, 2.0, - 0.0,-2.0, 0.0, 2.0, 0.0,-1.0, 0.5, 1.0, 0.0,-1.5, 0.5, 1.0, - 0.0,-1.5, 0.5, 1.0, 0.0,-2.0, 0.5, 1.0, 0.0,-4.0, 0.0, 2.0, - 0.0,-4.0, 0.0, 2.0, 0.0,-2.0,-0.5, 1.0, 0.0,-1.5,-0.5, 1.0, - 0.0,-1.5,-0.5, 1.0, 0.0,-1.0,-0.5, 1.0, 0.0,-2.0, 0.0, 2.0, - -2.0,-2.0, 0.0, 2.0,-1.0,-1.0, 0.5, 1.0,-1.5,-1.5, 0.5, 1.0, - -1.5,-1.5, 0.5, 1.0,-2.0,-2.0, 0.5, 1.0,-4.0,-4.0, 0.0, 2.0, - -4.0,-4.0, 0.0, 2.0,-2.0,-2.0,-0.5, 1.0,-1.5,-1.5,-0.5, 1.0, - -1.5,-1.5,-0.5, 1.0,-1.0,-1.0,-0.5, 1.0,-2.0,-2.0, 0.0, 2.0, - -4.0, 0.0, 0.0, 4.0,-2.0, 0.0, 1.0, 2.0,-3.0, 0.0, 1.0, 2.0, - -3.0, 0.0, 1.0, 2.0,-4.0, 0.0, 1.0, 2.0,-8.0, 0.0, 0.0, 4.0, - -8.0, 0.0, 0.0, 4.0,-4.0, 0.0,-1.0, 2.0,-3.0, 0.0,-1.0, 2.0, - -3.0, 0.0,-1.0, 2.0,-2.0, 0.0,-1.0, 2.0,-4.0, 0.0, 0.0, 4.0, - -4.0, 0.0, 0.0, 4.0,-2.0, 0.0, 1.0, 2.0,-3.0, 0.0, 1.0, 2.0, - -3.0, 0.0, 1.0, 2.0,-4.0, 0.0, 1.0, 2.0,-8.0, 0.0, 0.0, 4.0, - -8.0, 0.0, 0.0, 4.0,-4.0, 0.0,-1.0, 2.0,-3.0, 0.0,-1.0, 2.0, - -3.0, 0.0,-1.0, 2.0,-2.0, 0.0,-1.0, 2.0,-4.0, 0.0, 0.0, 4.0, - -2.0, 2.0, 0.0, 2.0,-1.0, 1.0, 0.5, 1.0,-1.5, 1.5, 0.5, 1.0, - -1.5, 1.5, 0.5, 1.0,-2.0, 2.0, 0.5, 1.0,-4.0, 4.0, 0.0, 2.0, - -4.0, 4.0, 0.0, 2.0,-2.0, 2.0,-0.5, 1.0,-1.5, 1.5,-0.5, 1.0, - -1.5, 1.5,-0.5, 1.0,-1.0, 1.0,-0.5, 1.0,-2.0, 2.0, 0.0, 2.0, - 0.0, 2.0, 0.0, 2.0, 0.0, 1.0, 0.5, 1.0, 0.0, 1.5, 0.5, 1.0, - 0.0, 1.5, 0.5, 1.0, 0.0, 2.0, 0.5, 1.0, 0.0, 4.0, 0.0, 2.0, - 0.0, 4.0, 0.0, 2.0, 0.0, 2.0,-0.5, 1.0, 0.0, 1.5,-0.5, 1.0, - 0.0, 1.5,-0.5, 1.0, 0.0, 1.0,-0.5, 1.0, 0.0, 2.0, 0.0, 2.0, - 0.0, 2.0, 0.0, 2.0, 0.0, 1.0, 0.5, 1.0, 0.0, 1.5, 0.5, 1.0, - 0.0, 1.5, 0.5, 1.0, 0.0, 2.0, 0.5, 1.0, 0.0, 4.0, 0.0, 2.0, - 0.0, 4.0, 0.0, 2.0, 0.0, 2.0,-0.5, 1.0, 0.0, 1.5,-0.5, 1.0, - 0.0, 1.5,-0.5, 1.0, 0.0, 1.0,-0.5, 1.0, 0.0, 2.0, 0.0, 2.0, - 2.0, 2.0, 0.0, 2.0, 1.0, 1.0, 0.5, 1.0, 1.5, 1.5, 0.5, 1.0, - 1.5, 1.5, 0.5, 1.0, 2.0, 2.0, 0.5, 1.0, 4.0, 4.0, 0.0, 2.0, - 4.0, 4.0, 0.0, 2.0, 2.0, 2.0,-0.5, 1.0, 1.5, 1.5,-0.5, 1.0, - 1.5, 1.5,-0.5, 1.0, 1.0, 1.0,-0.5, 1.0, 2.0, 2.0, 0.0, 2.0, - 4.0, 0.0, 0.0, 4.0, 2.0, 0.0, 1.0, 2.0, 3.0, 0.0, 1.0, 2.0, - 3.0, 0.0, 1.0, 2.0, 4.0, 0.0, 1.0, 2.0, 8.0, 0.0, 0.0, 4.0, - 8.0, 0.0, 0.0, 4.0, 4.0, 0.0,-1.0, 2.0, 3.0, 0.0,-1.0, 2.0, - 3.0, 0.0,-1.0, 2.0, 2.0, 0.0,-1.0, 2.0, 4.0, 0.0, 0.0, 4.0, -/* *INDENT-ON* */ - -}; - -/* Control points of a torus in NURBS form. Can be rendered using - the GLU NURBS routines. */ -static GLfloat torusnurbpts[] = -{ -/* *INDENT-OFF* */ - 4.0, 0.0, 0.0, 4.0, 2.0, 0.0, 1.0, 2.0, 4.0, 0.0, 1.0, 2.0, - 8.0, 0.0, 0.0, 4.0, 4.0, 0.0,-1.0, 2.0, 2.0, 0.0,-1.0, 2.0, - 4.0, 0.0, 0.0, 4.0, 2.0,-2.0, 0.0, 2.0, 1.0,-1.0, 0.5, 1.0, - 2.0,-2.0, 0.5, 1.0, 4.0,-4.0, 0.0, 2.0, 2.0,-2.0,-0.5, 1.0, - 1.0,-1.0,-0.5, 1.0, 2.0,-2.0, 0.0, 2.0,-2.0,-2.0, 0.0, 2.0, - -1.0,-1.0, 0.5, 1.0,-2.0,-2.0, 0.5, 1.0,-4.0,-4.0, 0.0, 2.0, - -2.0,-2.0,-0.5, 1.0,-1.0,-1.0,-0.5, 1.0,-2.0,-2.0, 0.0, 2.0, - -4.0, 0.0, 0.0, 4.0,-2.0, 0.0, 1.0, 2.0,-4.0, 0.0, 1.0, 2.0, - -8.0, 0.0, 0.0, 4.0,-4.0, 0.0,-1.0, 2.0,-2.0, 0.0,-1.0, 2.0, - -4.0, 0.0, 0.0, 4.0,-2.0, 2.0, 0.0, 2.0,-1.0, 1.0, 0.5, 1.0, - -2.0, 2.0, 0.5, 1.0,-4.0, 4.0, 0.0, 2.0,-2.0, 2.0,-0.5, 1.0, - -1.0, 1.0,-0.5, 1.0,-2.0, 2.0, 0.0, 2.0, 2.0, 2.0, 0.0, 2.0, - 1.0, 1.0, 0.5, 1.0, 2.0, 2.0, 0.5, 1.0, 4.0, 4.0, 0.0, 2.0, - 2.0, 2.0,-0.5, 1.0, 1.0, 1.0,-0.5, 1.0, 2.0, 2.0, 0.0, 2.0, - 4.0, 0.0, 0.0, 4.0, 2.0, 0.0, 1.0, 2.0, 4.0, 0.0, 1.0, 2.0, - 8.0, 0.0, 0.0, 4.0, 4.0, 0.0,-1.0, 2.0, 2.0, 0.0,-1.0, 2.0, - 4.0, 0.0, 0.0, 4.0, -/* *INDENT-ON* */ - -}; - -void -move(int x, int y) -{ - prevx = curx; - prevy = cury; - curx = x; - cury = y; - if (curx != startx || cury != starty) { - glutPostRedisplay(); - startx = curx; - starty = cury; - } -} - -void -button(int button, int state, int x, int y) -{ - if (button != GLUT_LEFT_BUTTON) - return; - switch (state) { - case GLUT_DOWN: - prevx = curx = startx = x; - prevy = cury = starty = y; - spindx = 0; - spindy = 0; - tracking = GL_TRUE; - break; - case GLUT_UP: - /* - * If user released the button while moving the mouse, keep - * spinning. - */ - if (x != prevx || y != prevy) { - spindx = x - prevx; - spindy = y - prevy; - } - tracking = GL_FALSE; - break; - } -} - -/* Maintain a square window when resizing */ -void -reshape(int width, int height) -{ - int size; - size = (width < height ? width : height); - glViewport((width - size) / 2, (height - size) / 2, size, size); - glutReshapeWindow(size, size); - glutPostRedisplay(); -} - -void -gridmaterials(void) -{ - static float front_mat_diffuse[] = - {1.0, 1.0, 0.4, 1.0}; - static float front_mat_ambient[] = - {0.1, 0.1, 0.1, 1.0}; - static float back_mat_diffuse[] = - {1.0, 0.0, 0.0, 1.0}; - static float back_mat_ambient[] = - {0.1, 0.1, 0.1, 1.0}; - - glMaterialfv(GL_FRONT, GL_DIFFUSE, front_mat_diffuse); - glMaterialfv(GL_FRONT, GL_AMBIENT, front_mat_ambient); - glMaterialfv(GL_BACK, GL_DIFFUSE, back_mat_diffuse); - glMaterialfv(GL_BACK, GL_AMBIENT, back_mat_ambient); -} - -void -surfacematerials(void) -{ - static float front_mat_diffuse[] = - {0.2, 0.7, 0.4, 1.0}; - static float front_mat_ambient[] = - {0.1, 0.1, 0.1, 1.0}; - static float back_mat_diffuse[] = - {1.0, 1.0, 0.2, 1.0}; - static float back_mat_ambient[] = - {0.1, 0.1, 0.1, 1.0}; - - glMaterialfv(GL_FRONT, GL_DIFFUSE, front_mat_diffuse); - glMaterialfv(GL_FRONT, GL_AMBIENT, front_mat_ambient); - glMaterialfv(GL_BACK, GL_DIFFUSE, back_mat_diffuse); - glMaterialfv(GL_BACK, GL_AMBIENT, back_mat_ambient); -} - -void -init(void) -{ - static float ambient[] = - {0.0, 0.0, 0.0, 1.0}; - static float diffuse[] = - {1.0, 1.0, 1.0, 1.0}; - static float position[] = - {90.0, 90.0, -150.0, 0.0}; - static float lmodel_ambient[] = - {1.0, 1.0, 1.0, 1.0}; - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(40.0, 1.0, 2.0, 200.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glGetFloatv(GL_MODELVIEW_MATRIX, modelmatrix); - - glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); - glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); - glLightfv(GL_LIGHT0, GL_POSITION, position); - glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); - - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_DEPTH_TEST); - glEnable(GL_AUTO_NORMAL); - glFrontFace(GL_CCW); - - glEnable(GL_MAP2_VERTEX_4); - glClearColor(0.25, 0.25, 0.5, 0.0); - -#if GL_EXT_polygon_offset - glPolygonOffsetEXT(factor, bias); - glEnable(GL_POLYGON_OFFSET_EXT); -#endif - - nobj = gluNewNurbsRenderer(); -#ifdef GLU_VERSION_1_1 /* New GLU 1.1 interface. */ - gluNurbsProperty(nobj, GLU_SAMPLING_METHOD, GLU_DOMAIN_DISTANCE); -#endif - - surflist = glGenLists(1); - gridlist = glGenLists(1); - createlists(); -} - -void -drawmesh(void) -{ - int i, j; - float *p; - - int up2p = 4; - int uorder = 3, vorder = 3; - int nu = 4, nv = 4; - int vp2p = up2p * uorder * nu; - - for (j = 0; j < nv; j++) { - for (i = 0; i < nu; i++) { - p = torusbezierpts + (j * vp2p * vorder) + (i * up2p * uorder); -#if GL_EXT_polygon_offset - glPolygonOffsetEXT(factor, bias); -#endif - glMap2f(GL_MAP2_VERTEX_4, 0.0, 1.0, up2p, 3, 0.0, 1.0, vp2p, 3, - (void *) p); - if (showsurf) { - surfacematerials(); - glEvalMesh2(GL_FILL, 0, usegments, 0, vsegments); - } - if (showgrid) { - gridmaterials(); - glEvalMesh2(GL_LINE, 0, usegments, 0, vsegments); - } - } - } -} - -void -redraw(void) -{ - int dx, dy; - float v[3], rot[3]; - float len, ang; - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glColor3f(1, 0, 0); - - if (tracking) { - dx = curx - startx; - dy = cury - starty; - } else { - dx = spindx; - dy = spindy; - } - if (dx || dy) { - dy = -dy; - v[0] = dx; - v[1] = dy; - v[2] = 0; - - len = length(v); - ang = -len / 600 * 360; - norm(v); - cross(v, z_axis, rot); - - /* This is certainly not recommended for programs that care - about performance or numerical stability: we concatenate - the rotation onto the current modelview matrix and read - the matrix back, thus saving ourselves from writing our - own matrix manipulation routines. */ - glLoadIdentity(); - glRotatef(ang, rot[0], rot[1], rot[2]); - glMultMatrixf(modelmatrix); - glGetFloatv(GL_MODELVIEW_MATRIX, modelmatrix); - } - glLoadIdentity(); - glTranslatef(0.0, 0.0, -10.0); - glMultMatrixf(modelmatrix); - - if (useglunurbs) { - if (showsurf) - glCallList(surflist); - if (showgrid) - glCallList(gridlist); - } else { - glMapGrid2f(usegments, 0.0, 1.0, vsegments, 0.0, 1.0); - drawmesh(); - } - - glutSwapBuffers(); -} - -static void -usage(void) -{ - printf("usage: surfgrid [-f]\n"); - exit(-1); -} - -/* what to do when a menu item is selected. This function also handles - keystroke events. */ -void -menu(int item) -{ - switch (item) { - case 'p': -#if GL_EXT_polygon_offset - if (glIsEnabled(GL_POLYGON_OFFSET_EXT)) { - glDisable(GL_POLYGON_OFFSET_EXT); - printf("disabling polygon offset\n"); - } else { - glEnable(GL_POLYGON_OFFSET_EXT); - printf("enabling polygon offset\n"); - } -#endif - break; - case 'F': - factor += 0.1; - printf("factor: %8.4f\n", factor); - break; - case 'f': - factor -= 0.1; - printf("factor: %8.4f\n", factor); - break; - case 'B': - bias += 0.0001; - printf("bias: %8.4f\n", bias); - break; - case 'b': - bias -= 0.0001; - printf("bias: %8.4f\n", bias); - break; - case 'g': - showgrid = !showgrid; - break; - case 'n': - useglunurbs = !useglunurbs; - break; - case 's': - smooth = !smooth; - if (smooth) { - glShadeModel(GL_SMOOTH); - } else { - glShadeModel(GL_FLAT); - } - break; - case 't': - showsurf = !showsurf; - break; - case 'u': - usegments = (usegments < 2 ? 1 : usegments - 1); - createlists(); - break; - case 'U': - usegments++; - createlists(); - break; - case 'v': - vsegments = (vsegments < 2 ? 1 : vsegments - 1); - createlists(); - break; - case 'V': - vsegments++; - createlists(); - break; - case '\033': /* ESC key: quit */ - exit(0); - break; - } - glutPostRedisplay(); -} - -/* ARGSUSED1 */ -void -key(unsigned char key, int x, int y) -{ - menu((int) key); -} - -void -animate(void) -{ - if (!tracking && (spindx != 0 || spindy != 0)) - glutPostRedisplay(); -} - -int -main(int argc, char **argv) -{ - int i; - - glutInit(&argc, argv); /* initialize glut, processing - arguments */ - - for (i = 1; i < argc; i++) { - if (argv[i][0] == '-') { - switch (argv[i][1]) { - case 'f': - fullscreen = 1; - break; - default: - usage(); - break; - } - } else { - usage(); - } - } - - glutInitWindowSize(winwidth, winheight); - glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE); - glutCreateWindow("surfgrid"); - - /* create a menu for the right mouse button */ - glutCreateMenu(menu); -#if GL_EXT_polygon_offset - glutAddMenuEntry("p: toggle polygon offset", 'p'); -#endif - glutAddMenuEntry("F: increase factor", 'F'); - glutAddMenuEntry("f: decrease factor", 'f'); - glutAddMenuEntry("B: increase bias", 'B'); - glutAddMenuEntry("b: decrease bias", 'b'); - glutAddMenuEntry("g: toggle grid", 'g'); - glutAddMenuEntry("s: toggle smooth shading", 's'); - glutAddMenuEntry("t: toggle surface", 't'); - glutAddMenuEntry("n: toggle GL evalutators/GLU nurbs", 'n'); - glutAddMenuEntry("u: decrement u segments", 'u'); - glutAddMenuEntry("U: increment u segments", 'U'); - glutAddMenuEntry("v: decrement v segments", 'v'); - glutAddMenuEntry("V: increment v segments", 'V'); - glutAddMenuEntry(": exit program", '\033'); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - /* set callbacks */ - glutKeyboardFunc(key); - glutDisplayFunc(redraw); - glutReshapeFunc(reshape); - glutMouseFunc(button); - glutMotionFunc(move); - glutIdleFunc(animate); - -#if GL_EXT_polygon_offset - if (!glutExtensionSupported("GL_EXT_polygon_offset")) { - printf("Warning: " - "GL_EXT_polygon_offset not supported on this machine... " - "trying anyway\n"); - } -#else - printf("Warning: not compiled with GL_EXT_polygon_offset support.\n"); -#endif - - init(); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} - -float circleknots[] = -{0.0, 0.0, 0.0, 0.25, 0.50, 0.50, 0.75, 1.0, 1.0, 1.0}; - -void -createlists(void) -{ -#ifdef GLU_VERSION_1_1 /* New GLU 1.1 interface. */ - gluNurbsProperty(nobj, GLU_U_STEP, (usegments - 1) * 4); - gluNurbsProperty(nobj, GLU_V_STEP, (vsegments - 1) * 4); - - gluNurbsProperty(nobj, GLU_DISPLAY_MODE, GLU_FILL); -#endif - glNewList(surflist, GL_COMPILE); - surfacematerials(); - gluBeginSurface(nobj); - gluNurbsSurface(nobj, 10, circleknots, 10, circleknots, - 4, 28, torusnurbpts, 3, 3, GL_MAP2_VERTEX_4); - gluEndSurface(nobj); - glEndList(); - - gluNurbsProperty(nobj, GLU_DISPLAY_MODE, GLU_OUTLINE_POLYGON); - glNewList(gridlist, GL_COMPILE); - gridmaterials(); - gluBeginSurface(nobj); - gluNurbsSurface(nobj, 10, circleknots, 10, circleknots, - 4, 28, torusnurbpts, 3, 3, GL_MAP2_VERTEX_4); - gluEndSurface(nobj); - glEndList(); -} diff --git a/lib/glut-3.7.6/progs/examples/surfgrid.dsp b/lib/glut-3.7.6/progs/examples/surfgrid.dsp deleted file mode 100644 index 373f11f17..000000000 --- a/lib/glut-3.7.6/progs/examples/surfgrid.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="surfgrid" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=surfgrid - 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 "surfgrid.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 "surfgrid.mak" CFG="surfgrid - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "surfgrid - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "surfgrid - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "surfgrid - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "surfgrid - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "surfgrid - Win32 Release" -# Name "surfgrid - Win32 Debug" -# Begin Source File - -SOURCE=.\surfgrid.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/texenv.c b/lib/glut-3.7.6/progs/examples/texenv.c deleted file mode 100644 index 0b811f864..000000000 --- a/lib/glut-3.7.6/progs/examples/texenv.c +++ /dev/null @@ -1,753 +0,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. - */ - -/* Demonstrates texture environment modes and internal image formats. - Requires the GL_EXT_texture extension. */ - -#include -#include -#include -#include - -#undef max -#undef min -#define max(a,b) ((a) >= (b) ? (a) : (b)) -#define min(a,b) ((a) <= (b) ? (a) : (b)) -/* *INDENT-OFF* */ -GLfloat lightCheck[4] = {0.7, 0.7, 0.7, 1.0}; -GLfloat darkCheck[4] = {0.3, 0.3, 0.3, 1.0}; - -GLfloat labelColor0[4] = {1.0, 1.0, 1.0, 1.0}; -GLfloat labelColor1[4] = {1.0, 1.0, 0.4, 1.0}; -GLfloat *labelInfoColor = labelColor0; -GLfloat labelLevelColor0[4] = {0.8, 0.8, 0.1, 1.0}; -GLfloat labelLevelColor1[4] = {0.0, 0.0, 0.0, 1.0}; -/* *INDENT-ON* */ - -GLboolean doubleBuffered = GL_FALSE; -GLboolean drawBackground = GL_FALSE; -GLboolean drawBlended = GL_TRUE; -GLboolean drawSmooth = GL_FALSE; -GLboolean drawTextured = GL_TRUE; -GLboolean displayLevelInfo = GL_FALSE; - -int textureWidth = 64; -int textureHeight = 64; - -int winWidth = 580, winHeight = 720; - -struct formatInfo { - GLenum baseFormat; - GLenum internalFormat; - char *name; -}; - -#define NUM_LUMINANCE_FORMATS \ - (sizeof(luminanceFormats) / sizeof(luminanceFormats[0])) -struct formatInfo luminanceFormats[] = -{ - {GL_LUMINANCE, 1, "LUMINANCE"}, -#if GL_EXT_texture - {GL_LUMINANCE, GL_LUMINANCE4_EXT, "LUMINANCE4"}, - {GL_LUMINANCE, GL_LUMINANCE8_EXT, "LUMINANCE8"}, - {GL_LUMINANCE, GL_LUMINANCE12_EXT, "LUMINANCE12"}, - {GL_LUMINANCE, GL_LUMINANCE16_EXT, "LUMINANCE16"}, -#endif -}; - -#define NUM_ALPHA_FORMATS \ - (sizeof(alphaFormats) / sizeof(alphaFormats[0])) -struct formatInfo alphaFormats[] = -{ - {GL_ALPHA, GL_ALPHA, "ALPHA"}, -#if GL_EXT_texture - {GL_ALPHA, GL_ALPHA4_EXT, "ALPHA4"}, - {GL_ALPHA, GL_ALPHA8_EXT, "ALPHA8"}, - {GL_ALPHA, GL_ALPHA12_EXT, "ALPHA12"}, - {GL_ALPHA, GL_ALPHA16_EXT, "ALPHA16"}, -#endif -}; - -#if GL_EXT_texture -#define NUM_INTENSITY_FORMATS \ - (sizeof(intensityFormats) / sizeof(intensityFormats[0])) -struct formatInfo intensityFormats[] = -{ - {GL_INTENSITY_EXT, GL_INTENSITY_EXT, "INTENSITY"}, - {GL_INTENSITY_EXT, GL_INTENSITY4_EXT, "INTENSITY4"}, - {GL_INTENSITY_EXT, GL_INTENSITY8_EXT, "INTENSITY8"}, - {GL_INTENSITY_EXT, GL_INTENSITY12_EXT, "INTENSITY12"}, - {GL_INTENSITY_EXT, GL_INTENSITY16_EXT, "INTENSITY16"}, -}; -#endif - -#define NUM_LUMINANCE_ALPHA_FORMATS \ - (sizeof(luminanceAlphaFormats) / sizeof(luminanceAlphaFormats[0])) -struct formatInfo luminanceAlphaFormats[] = -{ - {GL_LUMINANCE_ALPHA, 2, "LUMINANCE_ALPHA"}, -#if GL_EXT_texture - {GL_LUMINANCE_ALPHA, GL_LUMINANCE4_ALPHA4_EXT, "LUMINANCE4_ALPHA4"}, - {GL_LUMINANCE_ALPHA, GL_LUMINANCE6_ALPHA2_EXT, "LUMINANCE6_ALPHA2"}, - {GL_LUMINANCE_ALPHA, GL_LUMINANCE8_ALPHA8_EXT, "LUMINANCE8_ALPHA8"}, - {GL_LUMINANCE_ALPHA, GL_LUMINANCE12_ALPHA4_EXT, "LUMINANCE12_ALPHA4"}, - {GL_LUMINANCE_ALPHA, GL_LUMINANCE12_ALPHA12_EXT, "LUMINANCE12_ALPHA12"}, - {GL_LUMINANCE_ALPHA, GL_LUMINANCE16_ALPHA16_EXT, "LUMINANCE16_ALPHA16"}, -#endif -}; - -#define NUM_RGB_FORMATS \ - (sizeof(rgbFormats) / sizeof(rgbFormats[0])) -struct formatInfo rgbFormats[] = -{ - {GL_RGB, 3, "RGB"}, -#if GL_EXT_texture - {GL_RGB, GL_RGB2_EXT, "RGB2"}, - {GL_RGB, GL_RGB4_EXT, "RGB4"}, - {GL_RGB, GL_RGB5_EXT, "RGB5"}, - {GL_RGB, GL_RGB8_EXT, "RGB8"}, - {GL_RGB, GL_RGB10_EXT, "RGB10"}, - {GL_RGB, GL_RGB12_EXT, "RGB12"}, - {GL_RGB, GL_RGB16_EXT, "RGB16"}, -#endif -}; - -#define NUM_RGBA_FORMATS \ - (sizeof(rgbaFormats) / sizeof(rgbaFormats[0])) -struct formatInfo rgbaFormats[] = -{ - {GL_RGBA, 4, "RGBA"}, -#if GL_EXT_texture - {GL_RGBA, GL_RGBA2_EXT, "RGBA2"}, - {GL_RGBA, GL_RGBA4_EXT, "RGBA4"}, - {GL_RGBA, GL_RGBA8_EXT, "RGBA8"}, - {GL_RGBA, GL_RGBA12_EXT, "RGBA12"}, - {GL_RGBA, GL_RGBA16_EXT, "RGBA16"}, - {GL_RGBA, GL_RGB5_A1_EXT, "RGB5_A1"}, - {GL_RGBA, GL_RGB10_A2_EXT, "RGB10_A2"}, -#endif -}; - -struct baseFormatInfo { - struct formatInfo *format; - int current, number; -}; - -#define NUM_BASE_FORMATS \ - (sizeof(baseFormats) / sizeof(baseFormats[0])) -int baseFormat; -struct baseFormatInfo baseFormats[] = -{ - {luminanceFormats, 0, NUM_LUMINANCE_FORMATS}, - {alphaFormats, 0, NUM_ALPHA_FORMATS}, -#if GL_EXT_texture - {intensityFormats, 0, NUM_INTENSITY_FORMATS}, -#endif - {luminanceAlphaFormats, 0, NUM_LUMINANCE_ALPHA_FORMATS}, - {rgbFormats, 0, NUM_RGB_FORMATS}, - {rgbaFormats, 0, NUM_RGBA_FORMATS}, -}; - -#define NUM_ENV_COLORS \ - (sizeof(envColors) / sizeof(envColors[0])) -int envColor; -GLfloat envColors[][4] = -{ - {0.0, 0.0, 0.0, 1.0}, - {1.0, 0.0, 0.0, 1.0}, - {0.0, 1.0, 0.0, 1.0}, - {0.0, 0.0, 1.0, 1.0}, - {1.0, 1.0, 1.0, 1.0}, -}; - -struct envModeInfo { - GLenum mode; - char *name; -}; - -#define NUM_ENV_MODES \ - (sizeof(envModes) / sizeof(envModes[0])) -struct envModeInfo envModes[] = -{ -#if GL_EXT_texture - {GL_REPLACE_EXT, "REPLACE"}, -#endif - {GL_MODULATE, "MODULATE"}, - {GL_BLEND, "BLEND"}, - {GL_DECAL, "DECAL"}, -}; - -void -checkErrors(void) -{ - GLenum error; - while ((error = glGetError()) != GL_NO_ERROR) { - fprintf(stderr, "Error: %s\n", (char *) gluErrorString(error)); - } -} - -static void -drawString(char *string, GLfloat x, GLfloat y, GLfloat color[4]) -{ - glColor4fv(color); - glRasterPos2f(x, y); - while (*string) { - glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_10, *string); - string++; - } -} - -static void -drawStringOutline(char *string, GLfloat x, GLfloat y, - GLfloat color[4], GLfloat outline[4]) -{ - drawString(string, x - 1, y, outline); - drawString(string, x + 1, y, outline); - drawString(string, x, y - 1, outline); - drawString(string, x, y + 1, outline); - drawString(string, x, y, color); -} - -static void -begin2D(int width, int height) -{ - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - glOrtho(0, width, 0, height, -1, 1); - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); -} - -static void -end2D(void) -{ - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); -} - -static void -initialize(void) -{ - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho(-1.5, 1.5, -1.5, 1.5, -1.5, 1.5); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - glShadeModel(GL_FLAT); -} - -/* ARGSUSED1 */ -void -keyboard(unsigned char c, int x, int y) -{ - switch (c) { - case 'c': - envColor = ++envColor % (int) NUM_ENV_COLORS; - break; - case 'g': - drawBackground = !drawBackground; - break; - case 'b': - drawBlended = !drawBlended; - break; - case 's': - drawSmooth = !drawSmooth; - break; - case 't': - drawTextured = !drawTextured; - break; - case 'i': - displayLevelInfo = !displayLevelInfo; - break; - case 27: /* Escape key should force exit. */ - exit(0); - break; - default: - break; - } - glutPostRedisplay(); -} - -/* ARGSUSED1 */ -void -special(int key, int x, int y) -{ - switch (key) { - case GLUT_KEY_DOWN: - if (++baseFormat > NUM_BASE_FORMATS - 1) - baseFormat = 0; - break; - case GLUT_KEY_UP: - if (--baseFormat < 0) - baseFormat = NUM_BASE_FORMATS - 1; - break; - case GLUT_KEY_LEFT: - --baseFormats[baseFormat].current; - if (baseFormats[baseFormat].current < 0) - baseFormats[baseFormat].current = - baseFormats[baseFormat].number - 1; - break; - case GLUT_KEY_RIGHT: - ++baseFormats[baseFormat].current; - if (baseFormats[baseFormat].current > baseFormats[baseFormat].number - 1) - baseFormats[baseFormat].current = 0; - break; - default: - break; - } - glutPostRedisplay(); -} - -void -reshape(int w, int h) -{ - winWidth = w; - winHeight = h; - /* No need to call glViewPort here since "draw" calls it! */ -} - -static void -loadTexture(int width, int height, struct formatInfo *format) -{ - int luminanceSize = 0; - int alphaSize = 0; - int rgbSize = 0; - GLenum textureFormat; - GLubyte *texImage, *p; - int elementsPerGroup, elementSize, groupSize, rowSize; - int i, j; - - switch (format->baseFormat) { - case GL_LUMINANCE: -#if GL_EXT_texture - case GL_INTENSITY_EXT: -#endif - luminanceSize = 1; - textureFormat = GL_LUMINANCE; - break; - case GL_ALPHA: - alphaSize = 1; - textureFormat = GL_ALPHA; - break; - case GL_LUMINANCE_ALPHA: - luminanceSize = 1; - alphaSize = 1; - textureFormat = GL_LUMINANCE_ALPHA; - break; - case GL_RGB: - rgbSize = 3; - textureFormat = GL_RGB; - break; - case GL_RGBA: - rgbSize = 3; - alphaSize = 1; - textureFormat = GL_RGBA; - break; - default: - fprintf(stderr, "bad internal format info\n"); - return; - } - - elementsPerGroup = luminanceSize + alphaSize + rgbSize; - elementSize = sizeof(GLubyte); - groupSize = elementsPerGroup * elementSize; - rowSize = width * groupSize; - - if ((texImage = (GLubyte *) malloc(height * rowSize)) == NULL) { - fprintf(stderr, "texture malloc failed\n"); - return; - } - for (i = 0; i < height; ++i) { - p = texImage + i * rowSize; - for (j = 0; j < width; ++j) { - if (luminanceSize > 0) { - /** - ** +-----+-----+ - ** | | | - ** | W | LG | - ** | | | - ** +-----+-----+ - ** | | | - ** | DG | B | - ** | | | - ** +-----+-----+ - **/ - if (i > height / 2) { - if (j < width / 2) { - p[0] = 0xff; - } else { - p[0] = 0xaa; - } - } else { - if (j < width / 2) { - p[0] = 0x55; - } else { - p[0] = 0x00; - } - } - p += elementSize; - } - if (rgbSize > 0) { - /** - ** +-----+-----+ - ** | | | - ** | R | G | - ** | | | - ** +-----+-----+ - ** | | | - ** | Y | B | - ** | | | - ** +-----+-----+ - **/ - if (i > height / 2) { - if (j < width / 2) { - p[0] = 0xff; - p[1] = 0x00; - p[2] = 0x00; - } else { - p[0] = 0x00; - p[1] = 0xff; - p[2] = 0x00; - } - } else { - if (j < width / 2) { - p[0] = 0xff; - p[1] = 0xff; - p[2] = 0x00; - } else { - p[0] = 0x00; - p[1] = 0x00; - p[2] = 0xff; - } - } - p += 3 * elementSize; - } - if (alphaSize > 0) { - /** - ** +-----------+ - ** | W | - ** | +-----+ | - ** | | | | - ** | | B | | - ** | | | | - ** | +-----+ | - ** | | - ** +-----------+ - **/ - int i2 = i - height / 2; - int j2 = j - width / 2; - int h8 = height / 8; - int w8 = width / 8; - if (-h8 <= i2 && i2 <= h8 && -w8 <= j2 && j2 <= w8) { - p[0] = 0x00; - } else if (-2 * h8 <= i2 && i2 <= 2 * h8 && -2 * w8 <= j2 && j2 <= 2 * w8) { - p[0] = 0x55; - } else if (-3 * h8 <= i2 && i2 <= 3 * h8 && -3 * w8 <= j2 && j2 <= 3 * w8) { - p[0] = 0xaa; - } else { - p[0] = 0xff; - } - p += elementSize; - } - } - } - - glTexImage2D(GL_TEXTURE_2D, 0, - format->internalFormat, width, height, 0, - textureFormat, GL_UNSIGNED_BYTE, texImage); - - free(texImage); -} - -static void -drawCheck(int w, int h, GLfloat lightCheck[4], GLfloat darkCheck[4]) -{ - float dw = 2.0 / w; - float dh = 2.0 / h; - int i, j; - - for (i = 0; i < w; ++i) { - GLfloat x0 = -1.0 + i * dw; - GLfloat x1 = x0 + dw; - - glBegin(GL_QUAD_STRIP); - for (j = 0; j <= h; ++j) { - GLfloat y = -1.0 + j * dh; - - if ((i ^ j) & 1) { - glColor4fv(lightCheck); - } else { - glColor4fv(darkCheck); - } - - glVertex2f(x0, y); - glVertex2f(x1, y); - } - glEnd(); - } -} - -static void -drawSample(int x, int y, int w, int h, - struct formatInfo *format, struct envModeInfo *envMode) -{ - glViewport(x, y, w, h); - glScissor(x, y, w, h); - - glClearColor(0.1, 0.1, 0.1, 1.0); - glClear(GL_COLOR_BUFFER_BIT); - - begin2D(w, h); - drawString(format->name, 10, h - 15, labelInfoColor); - drawString(envMode->name, 10, 5, labelInfoColor); - end2D(); - - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, envMode->mode); - glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, envColors[envColor]); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); - - loadTexture(textureWidth, textureHeight, format); - - if (drawBackground) { - drawCheck(15, 15, lightCheck, darkCheck); - } - if (drawBlended) { - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glEnable(GL_BLEND); - } - if (drawSmooth) { - glShadeModel(GL_SMOOTH); - } - if (drawTextured) { - glEnable(GL_TEXTURE_2D); - } - glBegin(GL_QUADS); - glColor4f(1.0, 0.0, 0.0, 1.0); - glTexCoord2f(0.0, 0.0); - glVertex2f(-0.8, -0.8); - glColor4f(0.0, 1.0, 0.0, 1.0); - glTexCoord2f(1.0, 0.0); - glVertex2f(0.8, -0.8); - glColor4f(0.0, 0.0, 1.0, 1.0); - glTexCoord2f(1.0, 1.0); - glVertex2f(0.8, 0.8); - glColor4f(1.0, 1.0, 1.0, 1.0); - glTexCoord2f(0.0, 1.0); - glVertex2f(-0.8, 0.8); - glEnd(); - - glDisable(GL_BLEND); - glShadeModel(GL_FLAT); - glDisable(GL_TEXTURE_2D); - - if (displayLevelInfo) { - GLint width, height, border, components; -#if GL_EXT_texture - GLint redSize, greenSize, blueSize, alphaSize; - GLint luminanceSize, intensitySize; -#endif - char buf[255]; - - glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, - GL_TEXTURE_WIDTH, &width); - glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, - GL_TEXTURE_HEIGHT, &height); - glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, - GL_TEXTURE_BORDER, &border); - glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, - GL_TEXTURE_COMPONENTS, &components); -#if GL_EXT_texture - glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, - GL_TEXTURE_RED_SIZE_EXT, &redSize); - glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, - GL_TEXTURE_GREEN_SIZE_EXT, &greenSize); - glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, - GL_TEXTURE_BLUE_SIZE_EXT, &blueSize); - glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, - GL_TEXTURE_ALPHA_SIZE_EXT, &alphaSize); - glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, - GL_TEXTURE_LUMINANCE_SIZE_EXT, &luminanceSize); - glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, - GL_TEXTURE_INTENSITY_SIZE_EXT, &intensitySize); -#endif - - begin2D(w, h); - sprintf(buf, "dimensions: %d x %d", width, height); - drawStringOutline(buf, 15, h / 2 + 20, labelLevelColor0, labelLevelColor1); - - sprintf(buf, "border: %d", border); - drawStringOutline(buf, 15, h / 2 + 10, labelLevelColor0, labelLevelColor1); - - sprintf(buf, "components: 0x%04X", components); - drawStringOutline(buf, 15, h / 2, labelLevelColor0, labelLevelColor1); - - sprintf(buf, "sizes:"); - drawStringOutline(buf, 15, h / 2 - 10, labelLevelColor0, labelLevelColor1); - -#if GL_EXT_texture - sprintf(buf, " %d/%d/%d/%d/%d/%d", - redSize, greenSize, blueSize, alphaSize, - luminanceSize, intensitySize); - drawStringOutline(buf, 15, h / 2 - 20, labelLevelColor0, labelLevelColor1); -#endif - end2D(); - } -} - -static void -display(void) -{ - int numX = NUM_ENV_MODES, numY = NUM_BASE_FORMATS; - float xBase = (float) winWidth * 0.01; - float xOffset = (winWidth - xBase) / numX; - float xSize = max(xOffset - xBase, 1); - float yBase = (float) winHeight * 0.01; - float yOffset = (winHeight - yBase) / numY; - float ySize = max(yOffset - yBase, 1); - float x, y; - int i, j; - - glViewport(0, 0, winWidth, winHeight); - glDisable(GL_SCISSOR_TEST); - glClearColor(0.0, 0.0, 0.0, 0.0); - glClear(GL_COLOR_BUFFER_BIT); - glEnable(GL_SCISSOR_TEST); - - x = xBase; - y = (winHeight - 1) - yOffset; - for (i = 0; i < NUM_BASE_FORMATS; ++i) { - struct formatInfo *format; - - if (i == baseFormat) { - labelInfoColor = labelColor1; - } else { - labelInfoColor = labelColor0; - } - - format = &baseFormats[i].format[baseFormats[i].current]; - for (j = 0; j < NUM_ENV_MODES; ++j) { - struct envModeInfo *envMode; - - envMode = &envModes[j]; - drawSample(x, y, xSize, ySize, format, envMode); - x += xOffset; - } - x = xBase; - y -= yOffset; - } - - if (doubleBuffered) { - glutSwapBuffers(); - } else { - glFlush(); - } - - checkErrors(); -} - -static void -usage(char *name) -{ - fprintf(stderr, "\n"); - fprintf(stderr, "usage: %s [ options ]\n", name); - fprintf(stderr, "\n"); - fprintf(stderr, " Tests texture environments and internal formats\n"); - fprintf(stderr, "\n"); - fprintf(stderr, " Options:\n"); - fprintf(stderr, " -sb single buffered\n"); - fprintf(stderr, " -db double buffered\n"); - fprintf(stderr, "\n"); -} - -int -main(int argc, char *argv[]) -{ - int i; - - glutInit(&argc, argv); - for (i = 1; i < argc; ++i) { - if (!strcmp("-sb", argv[i])) { - doubleBuffered = GL_FALSE; - } else if (!strcmp("-db", argv[i])) { - doubleBuffered = GL_TRUE; - } else { - usage(argv[0]); - exit(1); - } - } - -#if !GL_EXT_texture - printf("WARNING: client-side OpenGL implementation lacks\n"); - printf(" the GL_EXT_texture extension!\n"); - printf(" Skipping GL_EXT_texture functionality...\n"); -#endif - - if (doubleBuffered) { - glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); - } else { - glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); - } - - glutInitWindowSize(winWidth, winHeight); - glutCreateWindow("Texture Environment Test"); - - if (!glutExtensionSupported("GL_EXT_texture")) { - fprintf(stderr, "missing extension: GL_EXT_texture\n"); - exit(1); - } - initialize(); - - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glutKeyboardFunc(keyboard); - glutSpecialFunc(special); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/examples/texenv.dsp b/lib/glut-3.7.6/progs/examples/texenv.dsp deleted file mode 100644 index 04331bc1a..000000000 --- a/lib/glut-3.7.6/progs/examples/texenv.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="texenv" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=texenv - 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 "texenv.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 "texenv.mak" CFG="texenv - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "texenv - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "texenv - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "texenv - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "texenv - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "texenv - Win32 Release" -# Name "texenv - Win32 Debug" -# Begin Source File - -SOURCE=.\texenv.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/trackball.c b/lib/glut-3.7.6/progs/examples/trackball.c deleted file mode 100644 index cce919b5a..000000000 --- a/lib/glut-3.7.6/progs/examples/trackball.c +++ /dev/null @@ -1,346 +0,0 @@ -#include -/* - * (c) Copyright 1993, 1994, 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. - */ -/* - * Trackball code: - * - * Implementation of a virtual trackball. - * Implemented by Gavin Bell, lots of ideas from Thant Tessman and - * the August '88 issue of Siggraph's "Computer Graphics," pp. 121-129. - * - * Vector manip code: - * - * Original code from: - * David M. Ciemiewicz, Mark Grossman, Henry Moreton, and Paul Haeberli - * - * Much mucking with by: - * Gavin Bell - */ -#if defined(_WIN32) -#pragma warning (disable:4244) /* disable bogus conversion warnings */ -#endif -#include -#include "trackball.h" - -/* - * This size should really be based on the distance from the center of - * rotation to the point on the object underneath the mouse. That - * point would then track the mouse as closely as possible. This is a - * simple example, though, so that is left as an Exercise for the - * Programmer. - */ -#define TRACKBALLSIZE (0.8f) - -/* - * Local function prototypes (not defined in trackball.h) - */ -static float tb_project_to_sphere(float, float, float); -static void normalize_quat(float [4]); - -void -vzero(float *v) -{ - v[0] = 0.0; - v[1] = 0.0; - v[2] = 0.0; -} - -void -vset(float *v, float x, float y, float z) -{ - v[0] = x; - v[1] = y; - v[2] = z; -} - -void -vsub(const float *src1, const float *src2, float *dst) -{ - dst[0] = src1[0] - src2[0]; - dst[1] = src1[1] - src2[1]; - dst[2] = src1[2] - src2[2]; -} - -void -vcopy(const float *v1, float *v2) -{ - register int i; - for (i = 0 ; i < 3 ; i++) - v2[i] = v1[i]; -} - -void -vcross(const float *v1, const float *v2, float *cross) -{ - float temp[3]; - - temp[0] = (v1[1] * v2[2]) - (v1[2] * v2[1]); - temp[1] = (v1[2] * v2[0]) - (v1[0] * v2[2]); - temp[2] = (v1[0] * v2[1]) - (v1[1] * v2[0]); - vcopy(temp, cross); -} - -float -vlength(const float *v) -{ - return sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]); -} - -void -vscale(float *v, float div) -{ - v[0] *= div; - v[1] *= div; - v[2] *= div; -} - -void -vnormal(float *v) -{ - vscale(v,1.0/vlength(v)); -} - -float -vdot(const float *v1, const float *v2) -{ - return v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2]; -} - -void -vadd(const float *src1, const float *src2, float *dst) -{ - dst[0] = src1[0] + src2[0]; - dst[1] = src1[1] + src2[1]; - dst[2] = src1[2] + src2[2]; -} - -/* - * Ok, simulate a track-ball. Project the points onto the virtual - * trackball, then figure out the axis of rotation, which is the cross - * product of P1 P2 and O P1 (O is the center of the ball, 0,0,0) - * Note: This is a deformed trackball-- is a trackball in the center, - * but is deformed into a hyperbolic sheet of rotation away from the - * center. This particular function was chosen after trying out - * several variations. - * - * It is assumed that the arguments to this routine are in the range - * (-1.0 ... 1.0) - */ -void -trackball(float q[4], float p1x, float p1y, float p2x, float p2y) -{ - float a[3]; /* Axis of rotation */ - float phi; /* how much to rotate about axis */ - float p1[3], p2[3], d[3]; - float t; - - if (p1x == p2x && p1y == p2y) { - /* Zero rotation */ - vzero(q); - q[3] = 1.0; - return; - } - - /* - * First, figure out z-coordinates for projection of P1 and P2 to - * deformed sphere - */ - vset(p1,p1x,p1y,tb_project_to_sphere(TRACKBALLSIZE,p1x,p1y)); - vset(p2,p2x,p2y,tb_project_to_sphere(TRACKBALLSIZE,p2x,p2y)); - - /* - * Now, we want the cross product of P1 and P2 - */ - vcross(p2,p1,a); - - /* - * Figure out how much to rotate around that axis. - */ - vsub(p1,p2,d); - t = vlength(d) / (2.0*TRACKBALLSIZE); - - /* - * Avoid problems with out-of-control values... - */ - if (t > 1.0) t = 1.0; - if (t < -1.0) t = -1.0; - phi = 2.0 * asin(t); - - axis_to_quat(a,phi,q); -} - -/* - * Given an axis and angle, compute quaternion. - */ -void -axis_to_quat(float a[3], float phi, float q[4]) -{ - vnormal(a); - vcopy(a,q); - vscale(q,sin(phi/2.0)); - q[3] = cos(phi/2.0); -} - -/* - * Project an x,y pair onto a sphere of radius r OR a hyperbolic sheet - * if we are away from the center of the sphere. - */ -static float -tb_project_to_sphere(float r, float x, float y) -{ - float d, t, z; - - d = sqrt(x*x + y*y); - if (d < r * 0.70710678118654752440) { /* Inside sphere */ - z = sqrt(r*r - d*d); - } else { /* On hyperbola */ - t = r / 1.41421356237309504880; - z = t*t / d; - } - return z; -} - -/* - * Given two rotations, e1 and e2, expressed as quaternion rotations, - * figure out the equivalent single rotation and stuff it into dest. - * - * This routine also normalizes the result every RENORMCOUNT times it is - * called, to keep error from creeping in. - * - * NOTE: This routine is written so that q1 or q2 may be the same - * as dest (or each other). - */ - -#define RENORMCOUNT 97 - -void -negate_quat(float q[4], float nq[4]) -{ - nq[0] = -q[0]; - nq[1] = -q[1]; - nq[2] = -q[2]; - nq[3] = q[3]; -} - -void -add_quats(float q1[4], float q2[4], float dest[4]) -{ - static int count=0; - float t1[4], t2[4], t3[4]; - float tf[4]; - -#if 0 -printf("q1 = %f %f %f %f\n", q1[0], q1[1], q1[2], q1[3]); -printf("q2 = %f %f %f %f\n", q2[0], q2[1], q2[2], q2[3]); -#endif - - vcopy(q1,t1); - vscale(t1,q2[3]); - - vcopy(q2,t2); - vscale(t2,q1[3]); - - vcross(q2,q1,t3); - vadd(t1,t2,tf); - vadd(t3,tf,tf); - tf[3] = q1[3] * q2[3] - vdot(q1,q2); - -#if 0 -printf("tf = %f %f %f %f\n", tf[0], tf[1], tf[2], tf[3]); -#endif - - dest[0] = tf[0]; - dest[1] = tf[1]; - dest[2] = tf[2]; - dest[3] = tf[3]; - - if (++count > RENORMCOUNT) { - count = 0; - normalize_quat(dest); - } -} - -/* - * Quaternions always obey: a^2 + b^2 + c^2 + d^2 = 1.0 - * If they don't add up to 1.0, dividing by their magnitued will - * renormalize them. - * - * Note: See the following for more information on quaternions: - * - * - Shoemake, K., Animating rotation with quaternion curves, Computer - * Graphics 19, No 3 (Proc. SIGGRAPH'85), 245-254, 1985. - * - Pletinckx, D., Quaternion calculus as a basic tool in computer - * graphics, The Visual Computer 5, 2-13, 1989. - */ -static void -normalize_quat(float q[4]) -{ - int i; - float mag; - - mag = sqrt(q[0]*q[0] + q[1]*q[1] + q[2]*q[2] + q[3]*q[3]); - for (i = 0; i < 4; i++) q[i] /= mag; -} - -/* - * Build a rotation matrix, given a quaternion rotation. - * - */ -void -build_rotmatrix(float m[4][4], float q[4]) -{ - m[0][0] = 1.0 - 2.0 * (q[1] * q[1] + q[2] * q[2]); - m[0][1] = 2.0 * (q[0] * q[1] - q[2] * q[3]); - m[0][2] = 2.0 * (q[2] * q[0] + q[1] * q[3]); - m[0][3] = 0.0; - - m[1][0] = 2.0 * (q[0] * q[1] + q[2] * q[3]); - m[1][1]= 1.0 - 2.0 * (q[2] * q[2] + q[0] * q[0]); - m[1][2] = 2.0 * (q[1] * q[2] - q[0] * q[3]); - m[1][3] = 0.0; - - m[2][0] = 2.0 * (q[2] * q[0] - q[1] * q[3]); - m[2][1] = 2.0 * (q[1] * q[2] + q[0] * q[3]); - m[2][2] = 1.0 - 2.0 * (q[1] * q[1] + q[0] * q[0]); - m[2][3] = 0.0; - - m[3][0] = 0.0; - m[3][1] = 0.0; - m[3][2] = 0.0; - m[3][3] = 1.0; -} - diff --git a/lib/glut-3.7.6/progs/examples/trackball.h b/lib/glut-3.7.6/progs/examples/trackball.h deleted file mode 100644 index 61a1d8c35..000000000 --- a/lib/glut-3.7.6/progs/examples/trackball.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - * (c) Copyright 1993, 1994, 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. - */ -/* - * trackball.h - * A virtual trackball implementation - * Written by Gavin Bell for Silicon Graphics, November 1988. - */ - -/* - * Pass the x and y coordinates of the last and current positions of - * the mouse, scaled so they are from (-1.0 ... 1.0). - * - * The resulting rotation is returned as a quaternion rotation in the - * first paramater. - */ -void -trackball(float q[4], float p1x, float p1y, float p2x, float p2y); - -void -negate_quat(float *q, float *qn); - -/* - * Given two quaternions, add them together to get a third quaternion. - * Adding quaternions to get a compound rotation is analagous to adding - * translations to get a compound translation. When incrementally - * adding rotations, the first argument here should be the new - * rotation, the second and third the total rotation (which will be - * over-written with the resulting new total rotation). - */ -void -add_quats(float *q1, float *q2, float *dest); - -/* - * A useful function, builds a rotation matrix in Matrix based on - * given quaternion. - */ -void -build_rotmatrix(float m[4][4], float q[4]); - -/* - * This function computes a quaternion based on an axis (defined by - * the given vector) and an angle about which to rotate. The angle is - * expressed in radians. The result is put into the third argument. - */ -void -axis_to_quat(float a[3], float phi, float q[4]); - diff --git a/lib/glut-3.7.6/progs/examples/trippy.c b/lib/glut-3.7.6/progs/examples/trippy.c deleted file mode 100644 index 694c4090f..000000000 --- a/lib/glut-3.7.6/progs/examples/trippy.c +++ /dev/null @@ -1,471 +0,0 @@ - -/* - * Texture feedback demo - * Simon Green 6/97 - * si@sgi.com - * - * Compile: - * cc -o feedback feedback.c -lglut -lGLU -lGL -lXmu -lXext -lX11 -lm - * - * Description: - * This is an old effect - it's kind of like pointing a video camera at a TV - * displaying the signal from itself. - * - * It also demonstrates the OpenGL 1.1 glCopyTexImage2D function to copy - * texture data direct from the framebuffer. You'll need a machine with - * reasonably fast texture mapping for it to be fun. - * - * Usage: - * Start it up, hold down the left mouse button and move the mouse up and down - * and left and right slowly. Play with the menus. Enjoy! - * - * Left mouse button - zoom / rotate - * Right mouse button - translate (advanced users only) - * - * Bugs: - * Don't try resizing the window. Don't stare at it for too long. - */ - -#include -#include -#include -#include -#include - -#ifdef GL_VERSION_1_1 - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -#define MAXSIZE 512 /* Set this to your maximum texture size (square) -*/ -#define TEXT_MESSAGE "OpenGL" - -float ang = 2.0; -float scale = 1.05; -float tx = 0.0, ty = 0.0; - -int oldx, oldy; -int lmb = 0; -int mmb = 0; -int autospin = 0; -float atime = 0.0; - -int smooth = 1; -int seedmode = 0; -float seedsize = 0.1; - -int primtype = GL_LINES; -float primsize = 1.0; -int nprims = 10; - -float r, g, b; -float dr, dg, db; -int randomcolours = 0; - - -/* returns a random floating point number between 0.0 and 1.0 */ -float frand(void) { - return (float) (rand() / 32767.0); -} - -void init_colours(float speed) -{ - r = frand(); g = frand(); b = frand(); - dr = frand() / speed; dg = frand() / speed; db = frand() / speed; -} - -void bounce(float *n, float *dn) -{ - *n += *dn; - if (*n > 1.0) { *n = 1.0; *dn = -*dn; } - if (*n < 0.0) { *n = 0.0; *dn = -*dn; } -} - -/* generate pretty colours by bouncing rgb values up and down */ -void set_colour(void) -{ - if (randomcolours) { - glColor3f(frand(), frand(), frand()); - } else { - bounce(&r, &dr); - bounce(&g, &dg); - bounce(&b, &db); - glColor3f(r, g, b); - } -} - - -/* seed pattern with some random primitives in centre of screen */ -void seed(void) -{ - int i; - - glBegin(primtype); - for(i=0; i -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=trippy - 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 "trippy.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 "trippy.mak" CFG="trippy - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "trippy - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "trippy - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "trippy - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "trippy - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "trippy - Win32 Release" -# Name "trippy - Win32 Debug" -# Begin Source File - -SOURCE=.\trippy.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/triselect.c b/lib/glut-3.7.6/progs/examples/triselect.c deleted file mode 100644 index c88150adf..000000000 --- a/lib/glut-3.7.6/progs/examples/triselect.c +++ /dev/null @@ -1,421 +0,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 -#include -#include -#include -#include -#include - -#define MAXOBJS 10000 -#define MAXSELECT 100 -#define MAXFEED 300 -#define SOLID 1 -#define LINE 2 -#define POINT 3 - -GLint windW = 300, windH = 300; - -GLuint selectBuf[MAXSELECT]; -GLfloat feedBuf[MAXFEED]; -GLint vp[4]; -float zRotation = 90.0; -float zoom = 1.0; -GLint objectCount; -GLint numObjects; -struct object { - float v1[2]; - float v2[2]; - float v3[2]; - float color[3]; -} objects[MAXOBJS]; -GLenum linePoly = GL_FALSE; - -static void -InitObjects(GLint num) -{ - GLint i; - float x, y; - - if (num > MAXOBJS) { - num = MAXOBJS; - } - if (num < 1) { - num = 1; - } - objectCount = num; - - srand((unsigned int) time(NULL)); - for (i = 0; i < num; i++) { - x = (rand() % 300) - 150; - y = (rand() % 300) - 150; - - objects[i].v1[0] = x + (rand() % 50) - 25; - objects[i].v2[0] = x + (rand() % 50) - 25; - objects[i].v3[0] = x + (rand() % 50) - 25; - objects[i].v1[1] = y + (rand() % 50) - 25; - objects[i].v2[1] = y + (rand() % 50) - 25; - objects[i].v3[1] = y + (rand() % 50) - 25; - objects[i].color[0] = ((rand() % 100) + 50) / 150.0; - objects[i].color[1] = ((rand() % 100) + 50) / 150.0; - objects[i].color[2] = ((rand() % 100) + 50) / 150.0; - } -} - -static void -Init(void) -{ - numObjects = 10; - InitObjects(numObjects); -} - -static void -Reshape(int width, int height) -{ - windW = width; - windH = height; - glViewport(0, 0, windW, windH); - glGetIntegerv(GL_VIEWPORT, vp); -} - -static void -Render(GLenum mode) -{ - GLint i; - - for (i = 0; i < objectCount; i++) { - if (mode == GL_SELECT) { - glLoadName(i); - } - glColor3fv(objects[i].color); - glBegin(GL_POLYGON); - glVertex2fv(objects[i].v1); - glVertex2fv(objects[i].v2); - glVertex2fv(objects[i].v3); - glEnd(); - } -} - -static GLint -DoSelect(GLint x, GLint y) -{ - GLint hits; - - glSelectBuffer(MAXSELECT, selectBuf); - glRenderMode(GL_SELECT); - glInitNames(); - glPushName(~0); - - glPushMatrix(); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPickMatrix(x, windH - y, 4, 4, vp); - gluOrtho2D(-175, 175, -175, 175); - glMatrixMode(GL_MODELVIEW); - - glClearColor(0.0, 0.0, 0.0, 0.0); - glClear(GL_COLOR_BUFFER_BIT); - - glScalef(zoom, zoom, zoom); - glRotatef(zRotation, 0, 0, 1); - - Render(GL_SELECT); - - glPopMatrix(); - - hits = glRenderMode(GL_RENDER); - if (hits <= 0) { - return -1; - } - return selectBuf[(hits - 1) * 4 + 3]; -} - -static void -RecolorTri(GLint h) -{ - objects[h].color[0] = ((rand() % 100) + 50) / 150.0; - objects[h].color[1] = ((rand() % 100) + 50) / 150.0; - objects[h].color[2] = ((rand() % 100) + 50) / 150.0; -} - -static void -DeleteTri(GLint h) -{ - objects[h] = objects[objectCount - 1]; - objectCount--; -} - -static void -GrowTri(GLint h) -{ - float v[2]; - float *oldV; - GLint i; - - v[0] = objects[h].v1[0] + objects[h].v2[0] + objects[h].v3[0]; - v[1] = objects[h].v1[1] + objects[h].v2[1] + objects[h].v3[1]; - v[0] /= 3; - v[1] /= 3; - - for (i = 0; i < 3; i++) { - switch (i) { - case 0: - oldV = objects[h].v1; - break; - case 1: - oldV = objects[h].v2; - break; - case 2: - oldV = objects[h].v3; - break; - } - oldV[0] = 1.5 * (oldV[0] - v[0]) + v[0]; - oldV[1] = 1.5 * (oldV[1] - v[1]) + v[1]; - } -} - -static void -Mouse(int button, int state, int mouseX, int mouseY) -{ - GLint hit; - - if (state == GLUT_DOWN) { - hit = DoSelect((GLint) mouseX, (GLint) mouseY); - if (hit != -1) { - if (button == GLUT_LEFT_BUTTON) { - RecolorTri(hit); - } else if (button == GLUT_MIDDLE_BUTTON) { - GrowTri(hit); - } else if (button == GLUT_RIGHT_BUTTON) { - DeleteTri(hit); - } - glutPostRedisplay(); - } - } -} - -static void -Draw(void) -{ - glPushMatrix(); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluOrtho2D(-175, 175, -175, 175); - glMatrixMode(GL_MODELVIEW); - glClearColor(0.0, 0.0, 0.0, 0.0); - glClear(GL_COLOR_BUFFER_BIT); - glScalef(zoom, zoom, zoom); - glRotatef(zRotation, 0, 0, 1); - Render(GL_RENDER); - glPopMatrix(); - glutSwapBuffers(); -} - -static void -DumpFeedbackVert(GLint * i, GLint n) -{ - GLint index; - - index = *i; - if (index + 7 > n) { - *i = n; - printf(" ???\n"); - return; - } - printf(" (%g %g %g), color = (%4.2f %4.2f %4.2f)\n", - feedBuf[index], - feedBuf[index + 1], - feedBuf[index + 2], - feedBuf[index + 3], - feedBuf[index + 4], - feedBuf[index + 5]); - index += 7; - *i = index; -} - -static void -DrawFeedback(GLint n) -{ - GLint i; - GLint verts; - - printf("Feedback results (%d floats):\n", n); - for (i = 0; i < n; i++) { - switch ((GLint) feedBuf[i]) { - case GL_POLYGON_TOKEN: - printf("Polygon"); - i++; - if (i < n) { - verts = (GLint) feedBuf[i]; - i++; - printf(": %d vertices", verts); - } else { - verts = 0; - } - printf("\n"); - while (verts) { - DumpFeedbackVert(&i, n); - verts--; - } - i--; - break; - case GL_LINE_TOKEN: - printf("Line:\n"); - i++; - DumpFeedbackVert(&i, n); - DumpFeedbackVert(&i, n); - i--; - break; - case GL_LINE_RESET_TOKEN: - printf("Line Reset:\n"); - i++; - DumpFeedbackVert(&i, n); - DumpFeedbackVert(&i, n); - i--; - break; - default: - printf("%9.2f\n", feedBuf[i]); - break; - } - } - if (i == MAXFEED) { - printf("...\n"); - } - printf("\n"); -} - -static void -DoFeedback(void) -{ - GLint x; - - glFeedbackBuffer(MAXFEED, GL_3D_COLOR, feedBuf); - (void) glRenderMode(GL_FEEDBACK); - - glPushMatrix(); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluOrtho2D(-175, 175, -175, 175); - glMatrixMode(GL_MODELVIEW); - - glClearColor(0.0, 0.0, 0.0, 0.0); - glClear(GL_COLOR_BUFFER_BIT); - - glScalef(zoom, zoom, zoom); - glRotatef(zRotation, 0, 0, 1); - - Render(GL_FEEDBACK); - - glPopMatrix(); - - x = glRenderMode(GL_RENDER); - if (x == -1) { - x = MAXFEED; - } - DrawFeedback((GLint) x); -} - -/* ARGSUSED1 */ -static void -Key(unsigned char key, int x, int y) -{ - - switch (key) { - case 'z': - zoom /= 0.75; - glutPostRedisplay(); - break; - case 'Z': - zoom *= 0.75; - glutPostRedisplay(); - break; - case 'f': - DoFeedback(); - glutPostRedisplay(); - break; - case 'l': - linePoly = !linePoly; - if (linePoly) { - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - } else { - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - } - glutPostRedisplay(); - break; - case 27: - exit(0); - } -} - -/* ARGSUSED1 */ -static void -SpecialKey(int key, int x, int y) -{ - - switch (key) { - case GLUT_KEY_LEFT: - zRotation += 0.5; - glutPostRedisplay(); - break; - case GLUT_KEY_RIGHT: - zRotation -= 0.5; - glutPostRedisplay(); - break; - } -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); - glutCreateWindow("Select Test"); - Init(); - glutReshapeFunc(Reshape); - glutKeyboardFunc(Key); - glutSpecialFunc(SpecialKey); - glutMouseFunc(Mouse); - glutDisplayFunc(Draw); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/examples/triselect.dsp b/lib/glut-3.7.6/progs/examples/triselect.dsp deleted file mode 100644 index eb20fdd68..000000000 --- a/lib/glut-3.7.6/progs/examples/triselect.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="triselect" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=triselect - 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 "triselect.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 "triselect.mak" CFG="triselect - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "triselect - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "triselect - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "triselect - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "triselect - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "triselect - Win32 Release" -# Name "triselect - Win32 Debug" -# Begin Source File - -SOURCE=.\triselect.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/examples/zoomdino.c b/lib/glut-3.7.6/progs/examples/zoomdino.c deleted file mode 100644 index f6f5f39a0..000000000 --- a/lib/glut-3.7.6/progs/examples/zoomdino.c +++ /dev/null @@ -1,464 +0,0 @@ - -/* 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. */ - -/* zoomdino demonstrates GLUT 3.0's new overlay support. Both - rubber-banding the display of a help message use the overlays. */ - -#include -#include -#include -#include /* for cos(), sin(), and sqrt() */ -#include - -typedef enum { - RESERVED, BODY_SIDE, BODY_EDGE, BODY_WHOLE, ARM_SIDE, ARM_EDGE, ARM_WHOLE, - LEG_SIDE, LEG_EDGE, LEG_WHOLE, EYE_SIDE, EYE_EDGE, EYE_WHOLE, DINOSAUR -} displayLists; - -GLfloat angle = -150; /* in degrees */ -int moving, begin; -int W = 300, H = 300; -GLdouble bodyWidth = 3.0; -int newModel = 1; -/* *INDENT-OFF* */ -GLfloat body[][2] = { {0, 3}, {1, 1}, {5, 1}, {8, 4}, {10, 4}, {11, 5}, - {11, 11.5}, {13, 12}, {13, 13}, {10, 13.5}, {13, 14}, {13, 15}, {11, 16}, - {8, 16}, {7, 15}, {7, 13}, {8, 12}, {7, 11}, {6, 6}, {4, 3}, {3, 2}, - {1, 2} }; -GLfloat arm[][2] = { {8, 10}, {9, 9}, {10, 9}, {13, 8}, {14, 9}, {16, 9}, - {15, 9.5}, {16, 10}, {15, 10}, {15.5, 11}, {14.5, 10}, {14, 11}, {14, 10}, - {13, 9}, {11, 11}, {9, 11} }; -GLfloat leg[][2] = { {8, 6}, {8, 4}, {9, 3}, {9, 2}, {8, 1}, {8, 0.5}, {9, 0}, - {12, 0}, {10, 1}, {10, 2}, {12, 4}, {11, 6}, {10, 7}, {9, 7} }; -GLfloat eye[][2] = { {8.75, 15}, {9, 14.7}, {9.6, 14.7}, {10.1, 15}, - {9.6, 15.25}, {9, 15.25} }; -GLfloat lightZeroPosition[] = {10.0, 4.0, 10.0, 1.0}; -GLfloat lightZeroColor[] = {0.8, 1.0, 0.8, 1.0}; /* green-tinted */ -GLfloat lightOnePosition[] = {-1.0, -2.0, 1.0, 0.0}; -GLfloat lightOneColor[] = {0.6, 0.3, 0.2, 1.0}; /* red-tinted */ -GLfloat skinColor[] = {0.1, 1.0, 0.1, 1.0}, eyeColor[] = {1.0, 0.2, 0.2, 1.0}; -int overlaySupport, red, white, transparent, rubberbanding; -int anchorx, anchory, stretchx, stretchy, pstretchx, pstretchy; -float vx, vy, vx2, vy2, vw, vh; -float wx, wy, wx2, wy2, ww, wh; -int fancy, wasFancy, help, clearHelp; -/* *INDENT-ON* */ - -void -extrudeSolidFromPolygon(GLfloat data[][2], unsigned int dataSize, - GLdouble thickness, GLuint side, GLuint edge, GLuint whole) -{ - static GLUtriangulatorObj *tobj = NULL; - GLdouble vertex[3], dx, dy, len; - int i; - int count = dataSize / (int) (2 * sizeof(GLfloat)); - - if (tobj == NULL) { - tobj = gluNewTess(); /* create and initialize a GLU - polygontesselation object */ - gluTessCallback(tobj, GLU_BEGIN, glBegin); - gluTessCallback(tobj, GLU_VERTEX, glVertex2fv); /* semi-tricky - - */ - gluTessCallback(tobj, GLU_END, glEnd); - } - glNewList(side, GL_COMPILE); - glShadeModel(GL_SMOOTH); /* smooth minimizes seeing - tessellation */ - gluBeginPolygon(tobj); - for (i = 0; i < count; i++) { - vertex[0] = data[i][0]; - vertex[1] = data[i][1]; - vertex[2] = 0; - gluTessVertex(tobj, vertex, data[i]); - } - gluEndPolygon(tobj); - glEndList(); - glNewList(edge, GL_COMPILE); - glShadeModel(GL_FLAT); /* flat shade keeps angular hands - from being "smoothed" */ - glBegin(GL_QUAD_STRIP); - for (i = 0; i <= count; i++) { - /* mod function handles closing the edge */ - glVertex3f(data[i % count][0], data[i % count][1], 0.0); - glVertex3f(data[i % count][0], data[i % count][1], thickness); - - /* Calculate a unit normal by dividing by Euclidean - distance. We could be lazy and use - glEnable(GL_NORMALIZE) so we could pass in arbitrary - normals for a very slight performance hit. */ - - dx = data[(i + 1) % count][1] - data[i % count][1]; - dy = data[i % count][0] - data[(i + 1) % count][0]; - len = sqrt(dx * dx + dy * dy); - glNormal3f(dx / len, dy / len, 0.0); - } - glEnd(); - glEndList(); - glNewList(whole, GL_COMPILE); - glFrontFace(GL_CW); - glCallList(edge); - glNormal3f(0.0, 0.0, -1.0); /* constant normal for side */ - glCallList(side); - glPushMatrix(); - glTranslatef(0.0, 0.0, thickness); - glFrontFace(GL_CCW); - glNormal3f(0.0, 0.0, 1.0); /* opposite normal for other side */ - glCallList(side); - glPopMatrix(); - glEndList(); -} - -void -makeDinosaur(void) -{ - extrudeSolidFromPolygon(body, sizeof(body), bodyWidth, - BODY_SIDE, BODY_EDGE, BODY_WHOLE); - extrudeSolidFromPolygon(arm, sizeof(arm), bodyWidth / 4, - ARM_SIDE, ARM_EDGE, ARM_WHOLE); - extrudeSolidFromPolygon(leg, sizeof(leg), bodyWidth / 2, - LEG_SIDE, LEG_EDGE, LEG_WHOLE); - extrudeSolidFromPolygon(eye, sizeof(eye), bodyWidth + 0.2, - EYE_SIDE, EYE_EDGE, EYE_WHOLE); - glNewList(DINOSAUR, GL_COMPILE); - glMaterialfv(GL_FRONT, GL_DIFFUSE, skinColor); - glCallList(BODY_WHOLE); - glPushMatrix(); - glTranslatef(0.0, 0.0, bodyWidth); - glCallList(ARM_WHOLE); - glCallList(LEG_WHOLE); - glTranslatef(0.0, 0.0, -bodyWidth - bodyWidth / 4); - glCallList(ARM_WHOLE); - glTranslatef(0.0, 0.0, -bodyWidth / 4); - glCallList(LEG_WHOLE); - glTranslatef(0.0, 0.0, bodyWidth / 2 - 0.1); - glMaterialfv(GL_FRONT, GL_DIFFUSE, eyeColor); - glCallList(EYE_WHOLE); - glPopMatrix(); - glEndList(); -} - -void -recalcModelView(void) -{ - glPopMatrix(); - glPushMatrix(); - glRotatef(angle, 0.0, 1.0, 0.0); - glTranslatef(-8, -8, -bodyWidth / 2); - newModel = 0; -} - -void -redraw(void) -{ - if (newModel) - recalcModelView(); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glCallList(DINOSAUR); - glutSwapBuffers(); -} - -void -output(int x, int y, char *string) -{ - int len, i; - - glRasterPos2f(x, y); - len = (int) strlen(string); - for (i = 0; i < len; i++) { - glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18, string[i]); - } -} - -char *helpMsg[] = -{ - "Welcome to zoomdino!", - " Left mouse button rotates", - " the dinosaur.", - " Middle mouse button zooms", - " via overlay rubber-banding.", - " Right mouse button shows", - " pop-up menu.", - " To reset view, use \"Reset", - " Projection\".", - "(This message is in the overlays.)", - NULL -}; - -void -redrawOverlay(void) -{ - if (help) { - int i; - - glClear(GL_COLOR_BUFFER_BIT); - glIndexi(white); - for (i = 0; helpMsg[i]; i++) { - output(15, 24 + i * 18, helpMsg[i]); - } - return; - } - if (glutLayerGet(GLUT_OVERLAY_DAMAGED) || clearHelp) { - /* Opps, damage means we need a full clear. */ - glClear(GL_COLOR_BUFFER_BIT); - clearHelp = 0; - wasFancy = 0; - } else { - /* Goody! No damage. Just erase last rubber-band. */ - if (fancy || wasFancy) { - glLineWidth(3.0); - } - glIndexi(transparent); - glBegin(GL_LINE_LOOP); - glVertex2i(anchorx, anchory); - glVertex2i(anchorx, pstretchy); - glVertex2i(pstretchx, pstretchy); - glVertex2i(pstretchx, anchory); - glEnd(); - } - if (wasFancy) { - glLineWidth(1.0); - wasFancy = 0; - } - if (fancy) - glLineWidth(3.0); - glIndexi(red); - glBegin(GL_LINE_LOOP); - glVertex2i(anchorx, anchory); - glVertex2i(anchorx, stretchy); - glVertex2i(stretchx, stretchy); - glVertex2i(stretchx, anchory); - glEnd(); - if (fancy) { - glLineWidth(1.0); - glIndexi(white); - glBegin(GL_LINE_LOOP); - glVertex2i(anchorx, anchory); - glVertex2i(anchorx, stretchy); - glVertex2i(stretchx, stretchy); - glVertex2i(stretchx, anchory); - glEnd(); - } - glFlush(); - - /* Remember last place rubber-banded so the rubber-band can - be erased next redisplay. */ - pstretchx = stretchx; - pstretchy = stretchy; -} - -void -defaultProjection(void) -{ - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - vx = -1.0; - vw = 2.0; - vy = -1.0; - vh = 2.0; - glFrustum(vx, vx + vw, vy, vy + vh, 1.0, 40); - glMatrixMode(GL_MODELVIEW); -} - -void -mouse(int button, int state, int x, int y) -{ - if (button == GLUT_LEFT_BUTTON) { - if (state == GLUT_DOWN) { - glutSetCursor(GLUT_CURSOR_LEFT_RIGHT); - moving = 1; - begin = x; - } else if (state == GLUT_UP) { - glutSetCursor(GLUT_CURSOR_INHERIT); - moving = 0; - } - } - if (overlaySupport && button == GLUT_MIDDLE_BUTTON) { - if (state == GLUT_DOWN) { - help = 0; - clearHelp = 1; - rubberbanding = 1; - anchorx = x; - anchory = y; - stretchx = x; - stretchy = y; - glutShowOverlay(); - } else if (state == GLUT_UP) { - rubberbanding = 0; - glutHideOverlay(); - glutUseLayer(GLUT_NORMAL); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - -#undef max -#undef min -#define max(a,b) ((a) > (b) ? (a) : (b)) -#define min(a,b) ((a) < (b) ? (a) : (b)) - - wx = min(anchorx, stretchx); - wy = min(H - anchory, H - stretchy); - wx2 = max(anchorx, stretchx); - wy2 = max(H - anchory, H - stretchy); - ww = wx2 - wx; - wh = wy2 - wy; - if (ww == 0 || wh == 0) { - glutUseLayer(GLUT_NORMAL); - defaultProjection(); - } else { - - vx2 = wx2 / W * vw + vx; - vx = wx / W * vw + vx; - vy2 = wy2 / H * vh + vy; - vy = wy / H * vh + vy; - vw = vx2 - vx; - vh = vy2 - vy; - - glFrustum(vx, vx + vw, vy, vy + vh, 1.0, 40); - } - glutPostRedisplay(); - glMatrixMode(GL_MODELVIEW); - } - } -} - -void -motion(int x, int y) -{ - if (moving) { - angle = angle + (x - begin); - begin = x; - newModel = 1; - glutPostRedisplay(); - } - if (rubberbanding) { - stretchx = x; - stretchy = y; - glutPostOverlayRedisplay(); - } -} - -void -reshape(int w, int h) -{ - if (overlaySupport) { - glutUseLayer(GLUT_OVERLAY); - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluOrtho2D(0, w, 0, h); - glScalef(1, -1, 1); - glTranslatef(0, -h, 0); - glMatrixMode(GL_MODELVIEW); - glutUseLayer(GLUT_NORMAL); - } - glViewport(0, 0, w, h); - W = w; - H = h; -} - -GLboolean lightZeroSwitch = GL_TRUE, lightOneSwitch = GL_TRUE; - -void -controlLights(int value) -{ - glutUseLayer(GLUT_NORMAL); - switch (value) { - case 1: - lightZeroSwitch = !lightZeroSwitch; - if (lightZeroSwitch) { - glEnable(GL_LIGHT0); - } else { - glDisable(GL_LIGHT0); - } - break; - case 2: - lightOneSwitch = !lightOneSwitch; - if (lightOneSwitch) { - glEnable(GL_LIGHT1); - } else { - glDisable(GL_LIGHT1); - } - break; - case 3: - defaultProjection(); - break; - case 4: - fancy = 1; - break; - case 5: - fancy = 0; - wasFancy = 1; - break; - case 6: - if (!rubberbanding) - help = 1; - glutShowOverlay(); - glutPostOverlayRedisplay(); - break; - } - glutPostRedisplay(); -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); - glutCreateWindow("zoomdino"); - glutDisplayFunc(redraw); - glutMouseFunc(mouse); - glutMotionFunc(motion); - glutCreateMenu(controlLights); - glutAddMenuEntry("Toggle right light", 1); - glutAddMenuEntry("Toggle left light", 2); - glutAttachMenu(GLUT_RIGHT_BUTTON); - makeDinosaur(); - glEnable(GL_CULL_FACE); - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - defaultProjection(); - gluLookAt(0.0, 0.0, 30.0, /* eye is at (0,0,30) */ - 0.0, 0.0, 0.0, /* center is at (0,0,0) */ - 0.0, 1.0, 0.); /* up is in postivie Y direction */ - glPushMatrix(); /* dummy push so we can pop on model - recalc */ - glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, 1); - glLightfv(GL_LIGHT0, GL_POSITION, lightZeroPosition); - glLightfv(GL_LIGHT0, GL_DIFFUSE, lightZeroColor); - glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 0.1); - glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 0.05); - glLightfv(GL_LIGHT1, GL_POSITION, lightOnePosition); - glLightfv(GL_LIGHT1, GL_DIFFUSE, lightOneColor); - glEnable(GL_LIGHT0); - glEnable(GL_LIGHT1); - glutInitDisplayMode(GLUT_SINGLE | GLUT_INDEX); - overlaySupport = glutLayerGet(GLUT_OVERLAY_POSSIBLE); - if (overlaySupport) { - glutEstablishOverlay(); - glutHideOverlay(); - transparent = glutLayerGet(GLUT_TRANSPARENT_INDEX); - glClearIndex(transparent); - red = (transparent + 1) % glutGet(GLUT_WINDOW_COLORMAP_SIZE); - white = (transparent + 2) % glutGet(GLUT_WINDOW_COLORMAP_SIZE); - glutSetColor(red, 1.0, 0.0, 0.0); /* Red. */ - glutSetColor(white, 1.0, 1.0, 1.0); /* White. */ - glutOverlayDisplayFunc(redrawOverlay); - glutReshapeFunc(reshape); - glutSetWindowTitle("zoomdino with rubber-banding"); - glutAddMenuEntry("------------------", 0); - glutAddMenuEntry("Reset projection", 3); - glutAddMenuEntry("------------------", 0); - glutAddMenuEntry("Fancy rubber-banding", 4); - glutAddMenuEntry("Simple rubber-banding", 5); - glutAddMenuEntry("------------------", 0); - glutAddMenuEntry("Show help", 6); - } else { - printf("Sorry, no whizzy zoomdino overlay usage!\n"); - } - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/examples/zoomdino.dsp b/lib/glut-3.7.6/progs/examples/zoomdino.dsp deleted file mode 100644 index 8aa16dfac..000000000 --- a/lib/glut-3.7.6/progs/examples/zoomdino.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="zoomdino" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=zoomdino - 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 "zoomdino.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 "zoomdino.mak" CFG="zoomdino - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "zoomdino - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "zoomdino - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "zoomdino - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "zoomdino - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "zoomdino - Win32 Release" -# Name "zoomdino - Win32 Debug" -# Begin Source File - -SOURCE=.\zoomdino.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/fortran/example.f b/lib/glut-3.7.6/progs/fortran/example.f deleted file mode 100644 index 27b97d0dd..000000000 --- a/lib/glut-3.7.6/progs/fortran/example.f +++ /dev/null @@ -1,114 +0,0 @@ - -C Copyright (c) Mark J. Kilgard, 1994. - -C This program is freely distributable without licensing fees -C and is provided without guarantee or warrantee expressed or -C implied. This program is -not- in the public domain. - -C GLUT Fortran example; touches a reasonable amount of GLUT -C callback functionality. - - subroutine display -#include "GL/fgl.h" - call fglclear(GL_COLOR_BUFFER_BIT) - call fglfinish - end - - subroutine passive(x,y) - integer x,y - print *,'passive motion',x,y - end - - subroutine submenu(value) - integer value - print *,'value is',value - end - - subroutine mainmenu(value) - integer value - print *,'main menu value is',value - end - - subroutine timer(value) - integer value - print *,'timer value',value - end - - subroutine mouse(btn,state,x,y) -#include "GL/fglut.h" - external timer - integer btn,state,x,y - print *,'mouse',btn,state,x,y - call gluttimerfunc(1000,timer,25) - end - - subroutine idle() -#include "GL/fglut.h" - integer count - print *,'idle called' - call glutidlefunc(glutnull) - end - - subroutine keyboard(key,x,y) - external idle - integer key,x,y - print *,'keyboard',key,x,y - call glutidlefunc(idle) - end - - subroutine tablet(x,y) - integer x,y - print *,'tablet motion',x,y - end - - subroutine tbutton(button,state) - integer button,state - print *,'tablet button',button,state - end - - subroutine dials(dial,value) - integer dial,value - print *,'dial movement',dial,value - end - - subroutine box(button,state) - integer button,state - print *,'button box',button,state - end - - program main -#include "GL/fglut.h" - external display - external passive - external submenu - external mainmenu - external mouse - external keyboard - external tablet - external tbutton - external dials - external box - call glutinit - print *,glutcreatewindow('Fortran GLUT program') - call glutdisplayfunc(display) - call glutpassivemotionfunc(passive) - call glutmousefunc(mouse) - call glutkeyboardfunc(keyboard) - call gluttabletmotionfunc(tablet) - call gluttabletbuttonfunc(tbutton) - call glutdialsfunc(dials) - call glutbuttonboxfunc(box) - i = glutcreatemenu(submenu) - call glutaddmenuentry('something', 4) - call glutaddmenuentry('another thing', 5) - j = glutcreatemenu(mainmenu) - call glutaddsubmenu('submenu', i) - call glutaddmenuentry('quit', 666) - call glutattachmenu(2) - print *,'Number of button box buttons:', - 2 glutdeviceget(GLUT_NUM_BUTTON_BOX_BUTTONS) - print *,'Number of dials:',glutdeviceget(GLUT_NUM_DIALS) - print *,'Depth buffer size',glutget(GLUT_WINDOW_DEPTH_SIZE) - call glutmainloop - end - diff --git a/lib/glut-3.7.6/progs/fortran/fbitfont.f b/lib/glut-3.7.6/progs/fortran/fbitfont.f deleted file mode 100644 index 87ca478fe..000000000 --- a/lib/glut-3.7.6/progs/fortran/fbitfont.f +++ /dev/null @@ -1,70 +0,0 @@ - -C Copyright (c) Mark J. Kilgard, 1994. - -C This program is freely distributable without licensing fees -C and is provided without guarantee or warrantee expressed or -C implied. This program is -not- in the public domain. - -C GLUT Fortran example demonstrating use of bitmap fonts. - - subroutine output(x,y,s) - real x,y - character s*(*) - character c -#include "GL/fgl.h" -#include "GL/fglut.h" - -C XXX Stroke and font names must be explicitly declared as -C external instead of relying on "GL/fglut.h" because -C the IRIX Fortran compiler does not know to only -C link in used external data symbols. - external GLUT_BITMAP_TIMES_ROMAN_24 - - call fglrasterpos2f(x,y) - lenc = len(s) - do 10, i=1,lenc - c = s(i:i) - call glutbitmapcharacter(GLUT_BITMAP_TIMES_ROMAN_24, - 2 ichar(c)) -10 continue - end - - subroutine display -#include "GL/fgl.h" -#include "GL/fglut.h" - call fglclear(GL_COLOR_BUFFER_BIT) - call output(0.0,24.0, - 2 'This is written in a GLUT bitmap font.') - call output(100.0,100.0,'ABCDEFGabcdefg') - call output(50.0,145.0, - 2 '(positioned in pixels with upper-left origin)') - end - - subroutine reshape(w,h) - integer w, h -#include "GL/fgl.h" -#include "GL/fglu.h" - call fglviewport(0, 0, w, h) - call fglmatrixmode(GL_PROJECTION) - call fglloadidentity - call fgluortho2d(dble(0.0), dble(w), dble(0.0), dble(h)) - call fglscalef(1.0, -1.0, 1.0) - call fgltranslatef(real(0.0), real(-h), real(0.0)) - call fglmatrixmode(GL_MODELVIEW) - end - - program main -#include "GL/fglut.h" - external display - external reshape - integer win - call glutinitdisplaymode(GLUT_RGB + GLUT_SINGLE) - call glutinitwindowsize(500, 150) - call glutinit - win = glutcreatewindow('Fortran GLUT bitmap A') - call fglclearcolor(0.0, 0.0, 0.0, 1.0) - call glutdisplayfunc(display) - call glutreshapefunc(reshape) - call glutmainloop - end - diff --git a/lib/glut-3.7.6/progs/fortran/fscene.f b/lib/glut-3.7.6/progs/fortran/fscene.f deleted file mode 100644 index 69426e196..000000000 --- a/lib/glut-3.7.6/progs/fortran/fscene.f +++ /dev/null @@ -1,126 +0,0 @@ - -C Copyright (c) Mark J. Kilgard, 1994. - -C This program is freely distributable without licensing fees -C and is provided without guarantee or warrantee expressed or -C implied. This program is -not- in the public domain. - -C GLUT Fortran program to render simple red scene. - - subroutine display -#include "GL/fgl.h" - call fglclear(GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT) - call fglpushmatrix - call fglscalef(1.3, 1.3, 1.3) - call fglrotatef(20.0, 1.0, 0.0, 0.0) - - call fglpushmatrix - call fgltranslatef(-0.75, 0.5, 0.0) - call fglrotatef(90.0, 1.0, 0.0, 0.0) - call glutsolidtorus(dble(0.275), dble(0.85), 10, 15) - call fglpopmatrix - - call fglpushmatrix - call fgltranslatef(-0.75, -0.5, 0.0) - call fglrotatef(270.0, 1.0, 0.0, 0.0) - call glutsolidtetrahedron - call fglpopmatrix - - call fglpushmatrix - call fgltranslatef(0.75, 0.0, -1.0) - call glutsolidicosahedron - call fglpopmatrix - - call fglpopmatrix - call fglflush - end - - subroutine reshape(w,h) -#include "GL/fgl.h" - integer w,h - real wr,hr - real*8 d - call fglviewport(0, 0, w, h) - call fglmatrixmode(GL_PROJECTION) - call fglloadidentity - wr = w - hr = h - d = 1.0 - if ( w .le. h ) then - call fglortho(dble(-2.5), dble(2.5), - 2 dble(-2.5 * hr/wr), dble(2.5 * hr/wr), - 3 dble(-10.0), dble(10.0)) - else - call fglortho(dble(-2.5 * hr/wr), dble(2.5 * hr/wr), - 2 dble(-2.5), dble(2.5), dble(-10.0), dble(10.0)) - end if - call fglmatrixmode(GL_MODELVIEW) - end - - subroutine submenu(value) -#include "GL/fgl.h" - integer value - if ( value .eq. 1 ) then - call fglenable(GL_DEPTH_TEST) - call fglenable(GL_LIGHTING) - call fgldisable(GL_BLEND) - call fglpolygonmode(GL_FRONT_AND_BACK, GL_FILL) - else - call fgldisable(GL_DEPTH_TEST) - call fgldisable(GL_LIGHTING) - call fglcolor3f(1.0, 1.0, 1.0) - call fglpolygonmode(GL_FRONT_AND_BACK, GL_LINE) - call fglenable(GL_LINE_SMOOTH) - call fglenable(GL_BLEND) - call fglblendfunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) - end if - call glutpostredisplay - end - - subroutine mainmenu(value) - integer value - call exit(1) - end - - subroutine myinit -#include "GL/fgl.h" - real lambient(4), ldiffuse(4), lspecular(4), lposition(4) - data lambient /0.0, 0.0, 0.0, 1.0/ - data ldiffuse /1.0, 0.0, 0.0, 1.0/ - data lspecular /1.0, 1.0, 1.0, 1.0/ - data lposition /1.0, 1.0, 1.0, 0.0/ - - call fgllightfv(GL_LIGHT0, GL_AMBIENT, lambient) - call fgllightfv(GL_LIGHT0, GL_DIFFUSE, ldiffuse) - call fgllightfv(GL_LIGHT0, GL_SPECULAR, lspecular) - call fgllightfv(GL_LIGHT0, GL_POSITION, lposition) - call fglenable(GL_LIGHT0) - call fgldepthfunc(GL_LESS) - call fglenable(GL_DEPTH_TEST) - call fglenable(GL_LIGHTING) - end - - program main -#include "GL/fglut.h" - external display - external reshape - external submenu - external mainmenu - integer win, menu - call glutinitwindowposition(500,500) - call glutinitwindowsize(500,500) - call glutinit - win = glutcreatewindow('Fortran GLUT program') - call myinit - call glutdisplayfunc(display) - call glutreshapefunc(reshape) - i = glutcreatemenu(submenu) - call glutaddmenuentry('Filled', 1) - call glutaddmenuentry('Outline', 2) - menu = glutcreatemenu(mainmenu) - call glutaddsubmenu('Polygon mode', i) - call glutaddmenuentry('Quit', 666) - call glutattachmenu(GLUT_RIGHT_BUTTON) - call glutmainloop - end - diff --git a/lib/glut-3.7.6/progs/fortran/sphere.f b/lib/glut-3.7.6/progs/fortran/sphere.f deleted file mode 100644 index f4cd08fdd..000000000 --- a/lib/glut-3.7.6/progs/fortran/sphere.f +++ /dev/null @@ -1,54 +0,0 @@ - -C Copyright (c) Mark J. Kilgard, 1994. - -C This program is freely distributable without licensing fees -C and is provided without guarantee or warrantee expressed or -C implied. This program is -not- in the public domain. - -C GLUT Fortran program to draw red light sphere. - - subroutine display -#include "GL/fgl.h" - call fglclear(GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT) - call fglcalllist(1) - call glutswapbuffers - end - - subroutine gfxinit -#include "GL/fgl.h" - real diffuse(4),pos(4) - data diffuse /1.0, 0.0, 0.0, 1.0/ - data pos /1.0, 1.0, 1.0, 0.0/ - call fglnewlist(1, GL_COMPILE) - call glutsolidsphere(dble(1.0), 20, 20) - call fglendlist - call fgllightfv(GL_LIGHT0, GL_DIFFUSE, diffuse) - call fgllightfv(GL_LIGHT0, GL_POSITION, pos) - call fglenable(GL_LIGHTING) - call fglenable(GL_LIGHT0) - call fglenable(GL_DEPTH_TEST) - call fglmatrixmode(GL_PROJECTION) - call fgluperspective(dble(40.0), dble(1.0), - 2 dble(1.0), dble(10.0)) - call fglmatrixmode(GL_MODELVIEW) - call fglulookat(dble(0.0), dble(0.0), dble(5.0), - 2 dble(0.0), dble(0.0), dble(0.0), - 3 dble(0.0), dble(1.0), dble(1.0)) - call fgltranslatef(0.0, 0.0, -1.0) - end - - program main -#include "GL/fglut.h" - external display - external reshape - external submenu - external mainmenu - integer win - call glutinit - call glutinitdisplaymode(GLUT_DOUBLE+GLUT_RGB+GLUT_DEPTH) - win = glutcreatewindow('Fortran GLUT sphere') - call gfxinit - call glutdisplayfunc(display) - call glutmainloop - end - diff --git a/lib/glut-3.7.6/progs/gameglut.dsw b/lib/glut-3.7.6/progs/gameglut.dsw deleted file mode 100644 index 23566ed25..000000000 --- a/lib/glut-3.7.6/progs/gameglut.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "asteroids"=".\gameglut\asteroids.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/lib/glut-3.7.6/progs/gameglut/Imakefile b/lib/glut-3.7.6/progs/gameglut/Imakefile deleted file mode 100644 index 3f29847b6..000000000 --- a/lib/glut-3.7.6/progs/gameglut/Imakefile +++ /dev/null @@ -1,14 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1997. */ - -#include "../../Glut.cf" - -TARGETS = asteroids - -SRCS = asteroids.c - -AllTarget($(TARGETS)) - -SimpleGlutProgramTarget(asteroids) - -DependTarget() diff --git a/lib/glut-3.7.6/progs/gameglut/asteroids.c b/lib/glut-3.7.6/progs/gameglut/asteroids.c deleted file mode 100644 index 28d67ad8f..000000000 --- a/lib/glut-3.7.6/progs/gameglut/asteroids.c +++ /dev/null @@ -1,441 +0,0 @@ - -/* 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. */ - -#include -#include -#include -#include -#include - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -void initWindow(void); - -float angle = 0.0; -int left, right; -int leftTime, rightTime; -int thrust, thrustTime; -int joyThrust = 0, joyLeft = 0, joyRight = 0; -float x = 20, y = 20, xv, yv, v; -int shield = 0, joyShield = 0, cursor = 1; -int lastTime; -int paused = 0; -int resuming = 1; -int originalWindow = 0, currentWindow; - -typedef struct { - int inuse; - - float x; - float y; - - float v; - float xv; - float yv; - - int expire; -} Bullet; - -#define MAX_BULLETS 10 - -Bullet bullet[MAX_BULLETS]; - -int -allocBullet(void) -{ - int i; - - for (i=0; i bullet[i].expire) { - bullet[i].inuse = 0; - continue; - } - x = bullet[i].x + bullet[i].xv * delta; - y = bullet[i].y + bullet[i].yv * delta; - x = x / 40.0; - bullet[i].x = (x - floor(x))*40.0; - y = y / 40.0; - bullet[i].y = (y - floor(y))*40.0; - } - } -} - -void -shotBullet(void) -{ - int entry; - - entry = allocBullet(); - if (entry >= 0) { - initBullet(entry, glutGet(GLUT_ELAPSED_TIME)); - } -} - -void -drawBullets(void) -{ - int i; - - glBegin(GL_POINTS); - glColor3f(1.0, 0.0, 1.0); - for (i=0; i 300) { - right = 1; - rightTime = glutGet(GLUT_ELAPSED_TIME); - joyRight = 1; - } else { - /* joyRight helps avoid "joystick in neutral" - from continually stopping rotation. */ - if (joyRight) { - right = 0; - joyRight = 0; - } - } -} - -void -initWindow(void) -{ - glutIgnoreKeyRepeat(1); - - glutDisplayFunc(display); - glutVisibilityFunc(visible); - glutKeyboardFunc(key); - glutKeyboardUpFunc(keyup); - glutSpecialFunc(special); - glutSpecialUpFunc(specialup); - glutJoystickFunc(joystick, 100); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho(0, 40, 0, 40, 0, 40); - glMatrixMode(GL_MODELVIEW); - glPointSize(3.0); - - currentWindow = glutGetWindow(); -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); - - if (argc > 1 && !strcmp(argv[1], "-fullscreen")) { - glutGameModeString("640x480:16@60"); - glutEnterGameMode(); - } else { - originalWindow = glutCreateWindow("asteroids"); - } - - initWindow(); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/gameglut/asteroids.dsp b/lib/glut-3.7.6/progs/gameglut/asteroids.dsp deleted file mode 100644 index 857a6aff6..000000000 --- a/lib/glut-3.7.6/progs/gameglut/asteroids.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="asteroids" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=asteroids - 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 "asteroids.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 "asteroids.mak" CFG="asteroids - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "asteroids - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "asteroids - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "asteroids - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "asteroids - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "asteroids - Win32 Release" -# Name "asteroids - Win32 Debug" -# Begin Source File - -SOURCE=.\asteroids.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/gameglut/asteroids.dsw b/lib/glut-3.7.6/progs/gameglut/asteroids.dsw deleted file mode 100644 index 26a602704..000000000 --- a/lib/glut-3.7.6/progs/gameglut/asteroids.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "asteroids"=".\asteroids.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/lib/glut-3.7.6/progs/glc/Imakefile b/lib/glut-3.7.6/progs/glc/Imakefile deleted file mode 100644 index fbef06fc3..000000000 --- a/lib/glut-3.7.6/progs/glc/Imakefile +++ /dev/null @@ -1,14 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1996. */ - -#include "../../Glut.cf" - -TARGETS = glcdemo - -SRCS = glcdemo.c - -AllTarget($(TARGETS)) - -SimpleGlutProgramTarget(glcdemo) - -DependTarget() diff --git a/lib/glut-3.7.6/progs/glc/README b/lib/glut-3.7.6/progs/glc/README deleted file mode 100644 index ae3175bb0..000000000 --- a/lib/glut-3.7.6/progs/glc/README +++ /dev/null @@ -1,15 +0,0 @@ - -GLC is the OpenGL Character Renderer implementation. GLC is a state -machine that provides OpenGL programs with character rendering services -via an application programming interface (API). The specification for -GLC can be found at: - - http://reality.sgi.com/dunwoody/glcspec.ps - -The GLC library is provided with IRIX 6.2 and beyond on SGI -workstations. - -glcdemo.c is a very simple GLC demo showing off rotating texting. - -- Mark Kilgard - July 22, 1997 diff --git a/lib/glut-3.7.6/progs/glc/glcdemo.c b/lib/glut-3.7.6/progs/glc/glcdemo.c deleted file mode 100644 index 1f4b54d9b..000000000 --- a/lib/glut-3.7.6/progs/glc/glcdemo.c +++ /dev/null @@ -1,111 +0,0 @@ - -/* 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 -#include -#include - -int font = 1; -char defaultMessage[] = "GLUT means OpenGL."; -char *message = defaultMessage; - -int angle = 0; - -void -selectFont(int newfont) -{ - font = newfont; - glutPostRedisplay(); -} - -void -selectMessage(int msg) -{ - switch (msg) { - case 1: - message = "abcdefghijklmnop"; - break; - case 2: - message = "ABCDEFGHIJKLMNOP"; - break; - } -} - -void -tick(void) -{ - angle -= 2; - glutPostRedisplay(); -} - -void -display(void) -{ -#if 0 - int len, i; - - glClear(GL_COLOR_BUFFER_BIT); - glPushMatrix(); - glRotatef(angle, 0.0, 0.0, 1.0); - glTranslatef(-750, 0, 0); - len = (int) strlen(message); - for (i = 0; i < len; i++) { - glutStrokeCharacter(font, message[i]); - } - glPopMatrix(); -#else - glPushMatrix(); - glClear(GL_COLOR_BUFFER_BIT); - glcRotate(angle); - glRasterPos2f(100, 100); - glcFont(font); - glcRenderString(message); - glPopMatrix(); -#endif - glutSwapBuffers(); -} - -int -main(int argc, char **argv) -{ - int submenu; - - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); - glutInitWindowSize(600, 600); - glutCreateWindow("GLC font library demo"); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluOrtho2D(0, 2000, 0, 2000); - glMatrixMode(GL_MODELVIEW); - glEnable(GL_LINE_SMOOTH); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glLineWidth(3.0); - glTranslatef(1000, 1000, 0); - glClearColor(0.0, 0.0, 0.0, 1.0); - glColor3f(1.0, 1.0, 1.0); - glutDisplayFunc(display); - glutIdleFunc(tick); - submenu = glutCreateMenu(selectMessage); - glutAddMenuEntry("abc", 1); - glutAddMenuEntry("ABC", 2); - glutCreateMenu(selectFont); - glutAddMenuEntry("Helvetica", 1); - glutAddMenuEntry("Courier", 2); - glutAddMenuEntry("Times", 3); - glutAddSubMenu("Messages", submenu); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glcContext(glcGenContext()); - glcScale(30, 30); - glcNewFontFromFamily(1, "Helvetica"); - glcNewFontFromFamily(2, "Courier"); - glcNewFontFromFamily(3, "Times"); - glcFont(font); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/gle.dsw b/lib/glut-3.7.6/progs/gle.dsw deleted file mode 100644 index c728a2a0e..000000000 --- a/lib/glut-3.7.6/progs/gle.dsw +++ /dev/null @@ -1,365 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "_all"=".\gle\_all.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name candlestick - End Project Dependency - Begin Project Dependency - Project_Dep_Name cone - End Project Dependency - Begin Project Dependency - Project_Dep_Name cylinder - End Project Dependency - Begin Project Dependency - Project_Dep_Name helix - End Project Dependency - Begin Project Dependency - Project_Dep_Name helix2 - End Project Dependency - Begin Project Dependency - Project_Dep_Name helix3 - End Project Dependency - Begin Project Dependency - Project_Dep_Name helix4 - End Project Dependency - Begin Project Dependency - Project_Dep_Name helixtex - End Project Dependency - Begin Project Dependency - Project_Dep_Name horn - End Project Dependency - Begin Project Dependency - Project_Dep_Name joinoffset - End Project Dependency - Begin Project Dependency - Project_Dep_Name martini - End Project Dependency - Begin Project Dependency - Project_Dep_Name screw - End Project Dependency - Begin Project Dependency - Project_Dep_Name taper - End Project Dependency - Begin Project Dependency - Project_Dep_Name texas - End Project Dependency - Begin Project Dependency - Project_Dep_Name transport - End Project Dependency - Begin Project Dependency - Project_Dep_Name twistoid - End Project Dependency - Begin Project Dependency - Project_Dep_Name twoid - End Project Dependency - Begin Project Dependency - Project_Dep_Name gle - End Project Dependency -}}} - -############################################################################### - -Project: "beam"=".\gle\beam.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name gle - End Project Dependency -}}} - -############################################################################### - -Project: "candlestick"=".\gle\candlestick.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name gle - End Project Dependency -}}} - -############################################################################### - -Project: "cone"=".\gle\cone.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name gle - End Project Dependency -}}} - -############################################################################### - -Project: "cylinder"=".\gle\cylinder.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name gle - End Project Dependency -}}} - -############################################################################### - -Project: "gle"="..\lib\gle\gle.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "helix"=".\gle\helix.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name gle - End Project Dependency -}}} - -############################################################################### - -Project: "helix2"=".\gle\helix2.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name gle - End Project Dependency -}}} - -############################################################################### - -Project: "helix3"=".\gle\helix3.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name gle - End Project Dependency -}}} - -############################################################################### - -Project: "helix4"=".\gle\helix4.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name gle - End Project Dependency -}}} - -############################################################################### - -Project: "helixtex"=".\gle\helixtex.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name gle - End Project Dependency -}}} - -############################################################################### - -Project: "horn"=".\gle\horn.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name gle - End Project Dependency -}}} - -############################################################################### - -Project: "joinoffset"=".\gle\joinoffset.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name gle - End Project Dependency -}}} - -############################################################################### - -Project: "martini"=".\gle\martini.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name gle - End Project Dependency -}}} - -############################################################################### - -Project: "screw"=".\gle\screw.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name gle - End Project Dependency -}}} - -############################################################################### - -Project: "taper"=".\gle\taper.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name gle - End Project Dependency -}}} - -############################################################################### - -Project: "texas"=".\gle\texas.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name gle - End Project Dependency -}}} - -############################################################################### - -Project: "transport"=".\gle\transport.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name gle - End Project Dependency -}}} - -############################################################################### - -Project: "twistoid"=".\gle\twistoid.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name gle - End Project Dependency -}}} - -############################################################################### - -Project: "twoid"=".\gle\twoid.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name gle - End Project Dependency -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/lib/glut-3.7.6/progs/gle/Imakefile b/lib/glut-3.7.6/progs/gle/Imakefile deleted file mode 100644 index dd0ac0db1..000000000 --- a/lib/glut-3.7.6/progs/gle/Imakefile +++ /dev/null @@ -1,62 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1997. */ - -#include "../../Glut.cf" - -SRCS = beam.c candlestick.c cone.c cylinder.c helix.c helix2.c \ - helix3.c helix4.c helixtex.c horn.c joinoffset.c mainjoin.c \ - mainsimple.c maintex.c screw.c taper.c texas.c texture.c transport.c \ - twistoid.c twoid.c - -TARGETS = \ - beam \ - candlestick \ - cone \ - cylinder \ - helix \ - helix2 \ - helix3 \ - helix4 \ - helixtex \ - horn \ - joincone \ - joinoffset \ - joinstyle \ - martini \ - screw \ - taper \ - texas \ - transport \ - twistoid \ - twoid - -AllTarget($(TARGETS)) - -NormalGleProgramTarget(beam, beam.o mainsimple.o) -SimpleGleProgramTarget(candlestick) -NormalGleProgramTarget(cone, cone.o mainsimple.o) -NormalGleProgramTarget(cylinder, cylinder.o mainsimple.o) -NormalGleProgramTarget(helix, helix.o mainsimple.o) -NormalGleProgramTarget(helix2, helix2.o mainsimple.o) -NormalGleProgramTarget(helix3, helix3.o mainsimple.o) -NormalGleProgramTarget(helix4, helix4.o mainsimple.o) -NormalGleProgramTarget(helixtex, helixtex.o texture.o maintex.o) -NormalGleProgramTarget(horn, horn.o mainsimple.o) -NormalGleProgramTarget(joincone, cone.o mainjoin.o) -NormalGleProgramTarget(joinoffset, joinoffset.o mainjoin.o) -NormalGleProgramTarget(joinstyle, cylinder.o mainjoin.o) -NormalGleProgramTarget(martini, martini.o trackball.o) -NormalGleProgramTarget(screw, screw.o texture.o maintex.o) -NormalGleProgramTarget(taper, taper.o mainsimple.o) -NormalGleProgramTarget(texas, texas.o mainjoin.o) -SimpleGleProgramTarget(transport) -NormalGleProgramTarget(twistoid, twistoid.o texture.o maintex.o) -NormalGleProgramTarget(twoid, twoid.o) - -LinkFile(trackball.c, ../examples/trackball.c) -LinkFile(trackball.h, ../examples/trackball.h) - -trackball.o: trackball.h trackball.c -martini.o: trackball.h martini.c - -DependTarget() diff --git a/lib/glut-3.7.6/progs/gle/README b/lib/glut-3.7.6/progs/gle/README deleted file mode 100644 index 957df4a88..000000000 --- a/lib/glut-3.7.6/progs/gle/README +++ /dev/null @@ -1,9 +0,0 @@ - -The demos are best seen in order, from the most basic, to the advanced. -Run the "rundemo" script. - -Note that most of the demo's were written using cut & paste, starting -with the simplest demo, cylinder.c. We could have written a fancy demo -package that avoided all of the cut&paste of code, but we felt that this -would only hide what we are trying to show here: the programming API for -the tube & extrusion library. diff --git a/lib/glut-3.7.6/progs/gle/_all.dsp b/lib/glut-3.7.6/progs/gle/_all.dsp deleted file mode 100644 index 6a4421548..000000000 --- a/lib/glut-3.7.6/progs/gle/_all.dsp +++ /dev/null @@ -1,63 +0,0 @@ -# Microsoft Developer Studio Project File - Name="_all" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Generic Project" 0x010a - -CFG=_all - 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 "_all.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 "_all.mak" CFG="_all - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "_all - Win32 Release" (based on "Win32 (x86) Generic Project") -!MESSAGE "_all - Win32 Debug" (based on "Win32 (x86) Generic Project") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -MTL=midl.exe - -!IF "$(CFG)" == "_all - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" - -!ELSEIF "$(CFG)" == "_all - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "_all___Win32_Debug" -# PROP BASE Intermediate_Dir "_all___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" - -!ENDIF - -# Begin Target - -# Name "_all - Win32 Release" -# Name "_all - Win32 Debug" -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/gle/beam.c b/lib/glut-3.7.6/progs/gle/beam.c deleted file mode 100644 index d97ed9253..000000000 --- a/lib/glut-3.7.6/progs/gle/beam.c +++ /dev/null @@ -1,118 +0,0 @@ -/* - * beam.c - * - * FUNCTION: - * Show how twisting is applied. - * - * HISTORY: - * -- linas Vepstas October 1991 - * -- heavily modified to draw corrugated surface, Feb 1993, Linas - * -- modified to demo twistoid March 1993 - * -- port to glut Linas Vepstas March 1995 - */ - -/* required include files */ -#include -#include -#include -#include - -/* =========================================================== */ - -#define NUM_BEAM_PTS 22 -double beam_spine[NUM_BEAM_PTS][3]; -double beam_twists [NUM_BEAM_PTS]; - -#define TSCALE (6.0) - -#define TPTS(x,y,z) { \ - beam_spine[i][0] = TSCALE * (x); \ - beam_spine[i][1] = TSCALE * (y); \ - beam_spine[i][2] = TSCALE * (z); \ - i++; \ -} - -#define TXZERO() { \ - beam_twists[i] = 0.0; \ -} -/* =========================================================== */ - -#define SCALE 0.1 -#define XSECTION(x,y) { \ - double ax, ay, alen; \ - xsection[i][0] = SCALE * (x); \ - xsection[i][1] = SCALE * (y); \ - if (i!=0) { \ - ax = xsection[i][0] - xsection[i-1][0]; \ - ay = xsection[i][1] - xsection[i-1][1]; \ - alen = 1.0 / sqrt (ax*ax + ay*ay); \ - ax *= alen; ay *= alen; \ - xnormal [i-1][0] = - ay; \ - xnormal [i-1][1] = ax; \ - } \ - i++; \ -} - -#define NUM_XSECTION_PTS (12) - -double xsection [NUM_XSECTION_PTS][2]; -double xnormal [NUM_XSECTION_PTS][2]; - -/* =========================================================== */ - -void InitStuff (void) -{ - int i; - - i=0; - while (i<22) { - TXZERO (); - TPTS (-1.1 +((float) i)/10.0, 0.0, 0.0); - } - - i=0; - XSECTION (-6.0, 6.0); - XSECTION (6.0, 6.0); - XSECTION (6.0, 5.0); - XSECTION (1.0, 5.0); - XSECTION (1.0, -5.0); - XSECTION (6.0, -5.0); - XSECTION (6.0, -6.0); - XSECTION (-6.0, -6.0); - XSECTION (-6.0, -5.0); - XSECTION (-1.0, -5.0); - XSECTION (-1.0, 5.0); - XSECTION (-6.0, 5.0); -} - -void TwistBeam (double howmuch) { - - int i; - double z; - for (i=0; i<22; i++) { - z = ((double) (i-14)) / 10.0; - beam_twists[i] = howmuch * exp (-3.0 * z*z); - } -} - -/* =========================================================== */ - -extern float lastx; - -void DrawStuff (void) { - TwistBeam ((double) (lastx -121) / 8.0); - - glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - /* set up some matrices so that the object spins with the mouse */ - glPushMatrix (); - glTranslatef (0.0, 0.0, -80.0); - glRotated (43.0, 1.0, 0.0, 0.0); - glRotated (43.0, 0.0, 1.0, 0.0); - glScaled (1.8, 1.8, 1.8); - gleTwistExtrusion (NUM_XSECTION_PTS, xsection, xnormal, - NULL, NUM_BEAM_PTS, beam_spine, NULL, beam_twists); - glPopMatrix (); - glutSwapBuffers (); -} -/* ------------------ end of file -------------------- */ diff --git a/lib/glut-3.7.6/progs/gle/beam.dsp b/lib/glut-3.7.6/progs/gle/beam.dsp deleted file mode 100644 index 442e34ebe..000000000 --- a/lib/glut-3.7.6/progs/gle/beam.dsp +++ /dev/null @@ -1,89 +0,0 @@ -# Microsoft Developer Studio Project File - Name="beam" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=beam - 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 "beam.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 "beam.mak" CFG="beam - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "beam - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "beam - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "beam - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../../include/" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "beam - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../include/" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "beam - Win32 Release" -# Name "beam - Win32 Debug" -# Begin Source File - -SOURCE=.\beam.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/gle/candlestick.c b/lib/glut-3.7.6/progs/gle/candlestick.c deleted file mode 100644 index 3f77f7857..000000000 --- a/lib/glut-3.7.6/progs/gle/candlestick.c +++ /dev/null @@ -1,424 +0,0 @@ - -/* - * candlestick.c - * - * FUNCTION: - * Draws a skewed candlestick shape using the Lathe primitive - * - * HISTORY: - * -- created by Linas Vepstas October 1991 - * -- C++ and OO playing around Linas Vepstas June 1993 - * -- converted to use GLUT -- December 1995, Linas - * - */ - -/* required include files */ -#include -#include -#include -#include - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -/* =========================================================== */ - -#define SET_RGB(rgb,r,g,b) { \ - rgb[0]=r; rgb[1]=g; rgb[2]=b; \ -} - -typedef struct _material { - - /* public data areas */ - float emission[3]; - float ambient[3]; - float diffuse[3]; - float specular[3]; - float shininess; - -} Material; - -#define SET_EMIS(self,r,g,b) { SET_RGB(self->emission, r,g,b); } -#define SET_AMB(self,r,g,b) { SET_RGB(self->ambient, r,g,b); } -#define SET_DIFF(self,r,g,b) { SET_RGB(self->diffuse, r,g,b); } -#define SET_SPEC(self,r,g,b) { SET_RGB(self->specular, r,g,b); } - -/* =========================================================== */ - -#ifdef NOTNOW -class goPolyline { - public: - int dimension; - int numPoints; - double * pts; - - private: - int nfree; - - public: - goPolyline (); // by default, construct 3D polyline - goPolyline (int); // construct arbitrary dimension polyline - void Print (); - void AddPoint (double x, double y); - void AddNormal (double x, double y); - void MakeFacetNormal (); -}; -#endif /* NOTNOW */ - -typedef double SVec[2]; - -typedef struct contour { - - /* public data areas */ - int numContourPoints; - int numContourNorms; - SVec * pts; - SVec * norms; - double up[3]; - -} Contour; - -#define pfree numContourPoints -#define nfree numContourNorms - -#define NEW_CONTOUR(self) { \ - self -> pts = (SVec *) malloc (100*sizeof (double)); \ - self -> norms = (SVec *) malloc (100*sizeof (double)); \ - self -> pfree = 0; \ - self -> nfree = 0; \ -} - -#define ADD_POINT(self,x,y) { \ - self -> pts[self->pfree][0] = x; \ - self -> pts[self->pfree][1] = y; \ - self->pfree ++; \ -} - -#define ADD_NORMAL(self,x,y) { \ - self -> norms[self->nfree][0] = x; \ - self -> norms[self->nfree][1] = y; \ - self->nfree ++; \ -} - -#define MAKE_NORMAL(self) { \ - float dx, dy, w; \ - dx = self -> pts [self->pfree -1][0]; \ - dx -= self -> pts [self->pfree -2][0]; \ - dy = self -> pts [self->pfree -1][1]; \ - dy -= self -> pts [self->pfree -2][1]; \ - w = 1.0 / sqrt (dx*dx+dy*dy); \ - dx *= w; \ - dy *= w; \ - self -> norms[self->nfree][0] = -dy; \ - self -> norms[self->nfree][1] = dx; \ - self -> nfree ++; \ -} - -/* =========================================================== */ -/* class gleExtrustion */ - -typedef struct _extrusion { - Material *material; /* material description */ - Contour *contour; /* 2D contour */ - - double radius; /* for polycylinder, torus */ - double startRadius; /* spiral starts in x-y plane */ - double drdTheta; /* change in radius per revolution */ - double startZ; /* starting z value */ - double dzdTheta; /* change in Z per revolution */ - double startXform[2][3]; /* starting contour affine xform */ - double dXdTheta[2][3]; /* tangent change xform per revoln */ - double startTheta; /* start angle in x-y plane */ - double sweepTheta; /* degrees to spiral around */ - -} Extrusion; - -#define NEW_EXTRUSION(self) { \ - self -> material = (Material *) malloc (sizeof (Material)); \ - self -> contour = (Contour *) malloc (sizeof (Contour)); \ - NEW_CONTOUR (self->contour); \ -} - - -/* =========================================================== */ -Extrusion *candle = NULL; - -/* =========================================================== */ -float lastx=0; -float lasty=0; - -void draw_candle (void) { - - /* attach the mouse */ - candle->dzdTheta = - 0.015 * (lasty -150.0); - -/* rotational delta sine & cosines from mouse */ -/* disable twist -- confusing to the viewer, hard to explain */ -/* - mouse -> AttachMouseYd (mouse, 0.0004, -0.1, &candle->dXdTheta[0][1]); -*/ - glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT, candle->material->ambient); - glMaterialfv (GL_FRONT_AND_BACK, GL_DIFFUSE, candle->material->diffuse); - glMaterialfv (GL_FRONT_AND_BACK, GL_SPECULAR, candle->material->specular); - glMaterialf (GL_FRONT_AND_BACK, GL_SHININESS, 2.0); - -#ifdef IBM_GL_32 - rotate (-750, 'x'); - rotate (-1050, 'z'); - translate (-0.5, -0.5, -0.5); - - lathe (candle->contour->numContourPoints, - candle->contour->pts, - candle->contour->norms, - candle->contour->up, - candle->startRadius, /* donut radius */ - candle->drdTheta, /* change in donut radius per revolution */ - candle->startZ, /* start z value */ - candle->dzdTheta, /* change in Z per revolution */ - candle->startXform, - candle->dXdTheta, - candle->startTheta, /* start angle */ - candle->sweepTheta); /* sweep angle */ -#endif - - -#define OPENGL_10 -#ifdef OPENGL_10 - glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - /* set up some matrices so that the object spins with the mouse */ - glPushMatrix (); - glTranslatef (0.0, 0.0, -80.0); - glRotated (-75.0, 1.0, 0.0, 0.0); - glRotated (-105.0, 0.0, 0.0, 1.0); - - glEnable (GL_LIGHTING); - gleLathe (candle->contour->numContourPoints, - candle->contour->pts, - candle->contour->norms, - candle->contour->up, - candle->startRadius, /* donut radius */ - candle->drdTheta, /* change in donut radius per revolution */ - candle->startZ, /* start z value */ - candle->dzdTheta, /* change in Z per revolution */ - candle->startXform, - candle->dXdTheta, - candle->startTheta, /* start angle */ - candle->sweepTheta); /* sweep angle */ - - glDisable (GL_LIGHTING); - - glPopMatrix (); - glutSwapBuffers (); -#endif -} - -/* =========================================================== */ - -#define SCALE 1.0 -#define PT(x,y) { ADD_POINT (candle->contour, SCALE*x, SCALE*y); } -#define NORM(x,y) { ADD_NORMAL (candle->contour, x, y); } -#define FACET { MAKE_NORMAL (candle->contour); } - -/* =========================================================== */ - -void init_candle (void) -{ - int j; - double theta, dtheta; - int style; - - candle = (Extrusion *) malloc (sizeof (Extrusion)); - NEW_EXTRUSION (candle); - - /* define candle color */ - SET_AMB (candle->material, 0.25, 0.25, 0.25); - SET_DIFF (candle->material, 0.8, 0.6, 0.175); - SET_SPEC (candle->material, 0.45, 0.45, 0.45); - - /* define lathe/spiral parameters */ - candle -> startRadius = 1.5; - candle -> drdTheta = 0.0; - candle -> startZ = 0.0; - candle -> dzdTheta = 0.0; - candle -> startTheta = 0.0; - candle -> sweepTheta = 360.0; - - /* initialize contour up vector */ - candle->contour->up[0] = 1.0; - candle->contour->up[1] = 0.0; - candle->contour->up[2] = 0.0; - - /* define candlestick contour */ - PT (-8.0, 0.0); - PT (-10.0, 0.0); FACET; - PT (-10.0, 2.0); FACET; - PT (-9.6, 2.0); FACET; - PT (-8.0, 0.0); FACET; - PT (-5.8, 0.0); FACET; - PT (-5.2, 0.6); FACET; - PT (-4.6, 0.0); FACET; - PT (-1.5, 0.0); FACET; - - dtheta = M_PI /14.0; - theta = 0.0; - for (j=0; j<14; j++) { - PT ((-1.5*cos(theta)) , (1.5*sin(theta))); - NORM ((-cos(theta)) , sin(theta)); - theta += dtheta; - } - PT (1.5, 0.0); FACET; - PT (4.6, 0.0); FACET; - PT (5.2, 0.6); FACET; - PT (5.8, 0.0); FACET; - PT (7.0, 0.0); FACET; - PT (7.5, 0.2); FACET; - PT (8.0, 0.8); FACET; - PT (8.3, 0.9); FACET; - PT (8.15, 1.8); FACET; - PT (8.8, 2.8); FACET; - PT (9.2, 3.8); FACET; - PT (9.5, 3.8); FACET; - PT (9.56, 3.75); FACET; - PT (9.62, 3.75); FACET; - PT (9.7, 3.8); FACET; - PT (10.0, 3.8); FACET; - PT (10.0, 0.0); FACET; - PT (7.0, 0.0); FACET; - - /* initialize the transofrms */ - candle->startXform[0][0] = 1.0; - candle->startXform[0][1] = 0.0; - candle->startXform[0][2] = 0.0; - candle->startXform[1][0] = 0.0; - candle->startXform[1][1] = 1.0; - candle->startXform[1][2] = 0.0; - - candle->dXdTheta[0][0] = 0.0; - candle->dXdTheta[0][1] = 0.0; - candle->dXdTheta[0][2] = 0.0; - candle->dXdTheta[1][0] = 0.0; - candle->dXdTheta[1][1] = 0.0; - candle->dXdTheta[1][2] = 0.0; - - /* set the initial join style */ - style = gleGetJoinStyle (); - style &= ~TUBE_NORM_MASK; - style |= TUBE_NORM_PATH_EDGE; - style |= TUBE_NORM_FACET; - gleSetJoinStyle (style); - -} - -/* =========================================================== */ - -/* get notified of mouse motions */ -void MouseMotion (int x, int y) -{ - lastx = x; - lasty = y; - glutPostRedisplay (); -} - -void JoinStyle (int msg) -{ - int style; - /* get the current joint style */ - style = gleGetJoinStyle (); - - /* there are four different join styles, - * and two different normal vector styles */ - switch (msg) { - - case 20: - style &= ~TUBE_NORM_MASK; - style |= TUBE_NORM_FACET; - break; - case 21: - style &= ~TUBE_NORM_MASK; - style |= TUBE_NORM_EDGE; - break; - case 22: - style &= ~TUBE_NORM_MASK; - style |= TUBE_NORM_PATH_EDGE; - style |= TUBE_NORM_FACET; - break; - case 23: - style &= ~TUBE_NORM_MASK; - style |= TUBE_NORM_PATH_EDGE; - style |= TUBE_NORM_EDGE; - break; - - case 99: - exit (0); - - default: - break; - } - gleSetJoinStyle (style); - glutPostRedisplay (); -} - -/* set up a light */ -GLfloat lightOnePosition[] = {40.0, 40, 100.0, 0.0}; -GLfloat lightOneColor[] = {0.54, 0.54, 0.54, 1.0}; - -GLfloat lightTwoPosition[] = {-40.0, 40, 100.0, 0.0}; -GLfloat lightTwoColor[] = {0.54, 0.54, 0.54, 1.0}; - -int -main (int argc, char * argv[]) { - - /* initialize glut */ - glutInit (&argc, argv); - glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); - glutCreateWindow ("candlestick"); - glutDisplayFunc (draw_candle); - glutMotionFunc (MouseMotion); - - /* create popup menu */ - glutCreateMenu (JoinStyle); - glutAddMenuEntry ("Facet Normal Vectors", 20); - glutAddMenuEntry ("Edge Normal Vectors", 21); - glutAddMenuEntry ("Facet Sweep Normal Vectors", 22); - glutAddMenuEntry ("Edge Sweep Normal Vectors", 23); - glutAddMenuEntry ("------------------", 9999); - glutAddMenuEntry ("Exit", 99); - glutAttachMenu (GLUT_MIDDLE_BUTTON); - - /* initialize GL */ - glClearDepth (1.0); - glEnable (GL_DEPTH_TEST); - glClearColor (0.0, 0.0, 0.0, 0.0); - glShadeModel (GL_SMOOTH); - - glMatrixMode (GL_PROJECTION); - /* roughly, measured in centimeters */ - glFrustum (-9.0, 9.0, -9.0, 9.0, 50.0, 150.0); - glMatrixMode(GL_MODELVIEW); - - /* initialize lighting */ - glLightfv (GL_LIGHT0, GL_POSITION, lightOnePosition); - glLightfv (GL_LIGHT0, GL_AMBIENT, lightOneColor); - glLightfv (GL_LIGHT0, GL_DIFFUSE, lightOneColor); - glLightfv (GL_LIGHT0, GL_SPECULAR, lightOneColor); - glEnable (GL_LIGHT0); - glLightfv (GL_LIGHT1, GL_POSITION, lightTwoPosition); - glLightfv (GL_LIGHT1, GL_DIFFUSE, lightTwoColor); - glLightfv (GL_LIGHT1, GL_AMBIENT, lightTwoColor); - glEnable (GL_LIGHT1); - glEnable (GL_LIGHTING); - glEnable (GL_NORMALIZE); - /* glColorMaterial (GL_FRONT_AND_BACK, GL_DIFFUSE); */ - /* glEnable (GL_COLOR_MATERIAL); */ - - init_candle (); - - glutMainLoop (); - return 0; /* ANSI C requires main to return int. */ -} - -/* ===================== END OF FILE ================== */ - diff --git a/lib/glut-3.7.6/progs/gle/candlestick.dsp b/lib/glut-3.7.6/progs/gle/candlestick.dsp deleted file mode 100644 index 8609b2262..000000000 --- a/lib/glut-3.7.6/progs/gle/candlestick.dsp +++ /dev/null @@ -1,89 +0,0 @@ -# Microsoft Developer Studio Project File - Name="candlestick" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=candlestick - 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 "candlestick.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 "candlestick.mak" CFG="candlestick - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "candlestick - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "candlestick - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "candlestick - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../../include/" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "candlestick - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../include/" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "candlestick - Win32 Release" -# Name "candlestick - Win32 Debug" -# Begin Source File - -SOURCE=.\candlestick.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/gle/cone.c b/lib/glut-3.7.6/progs/gle/cone.c deleted file mode 100644 index dfb6f091a..000000000 --- a/lib/glut-3.7.6/progs/gle/cone.c +++ /dev/null @@ -1,103 +0,0 @@ - -/* - * cone drawing demo - * - * FUNCTION: - * Baisc demo illustrating how to write code to draw - * the most basic cone shape. - * - * HISTORY: - * Linas Vepstas March 1995 - */ - -/* required include files */ -#include -#include - -/* the arrays in which we will store out polyline */ -#define NPTS 6 -double radii [NPTS]; -double points [NPTS][3]; -float colors [NPTS][3]; -int idx = 0; - -/* some utilities for filling that array */ -#define PNT(x,y,z) { \ - points[idx][0] = x; \ - points[idx][1] = y; \ - points[idx][2] = z; \ - idx ++; \ -} - -#define COL(r,g,b) { \ - colors[idx][0] = r; \ - colors[idx][1] = g; \ - colors[idx][2] = b; \ -} - -#define RAD(r) { \ - radii[idx] = r; \ -} - -/* - * Initialize a bent shape with three segments. - * The data format is a polyline. - * - * NOTE that neither the first, nor the last segment are drawn. - * The first & last segment serve only to determine that angle - * at which the endcaps are drawn. - */ - -void InitStuff (void) { - - /* initialize the join style here */ - gleSetJoinStyle (TUBE_NORM_EDGE | TUBE_JN_ANGLE | TUBE_JN_CAP); - - RAD (1.0); - COL (0.0, 0.0, 0.0); - PNT (-6.0, 6.0, 0.0); - - RAD (1.0); - COL (0.0, 0.8, 0.3); - PNT (6.0, 6.0, 0.0); - - RAD (3.0); - COL (0.8, 0.3, 0.0); - PNT (6.0, -6.0, 0.0); - - RAD (0.5); - COL (0.2, 0.3, 0.9); - PNT (-6.0, -6.0, 0.0); - - RAD (2.0); - COL (0.2, 0.8, 0.5); - PNT (-6.0, 6.0, 0.0); - - RAD (1.0); - COL (0.0, 0.0, 0.0); - PNT (6.0, 6.0, 0.0); -} - -extern float lastx; -extern float lasty; - -/* draw the polycone shape */ -void DrawStuff (void) { - - glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - /* set up some matrices so that the object spins with the mouse */ - glPushMatrix (); - glTranslatef (0.0, 0.0, -80.0); - glRotatef (lastx, 0.0, 1.0, 0.0); - glRotatef (lasty, 1.0, 0.0, 0.0); - - /* Phew. FINALLY, Draw the polycone -- */ - glePolyCone (idx, points, colors, radii); - - glPopMatrix (); - - glutSwapBuffers (); -} - -/* --------------------------- end of file ------------------- */ diff --git a/lib/glut-3.7.6/progs/gle/cone.dsp b/lib/glut-3.7.6/progs/gle/cone.dsp deleted file mode 100644 index 8ea8d8fc9..000000000 --- a/lib/glut-3.7.6/progs/gle/cone.dsp +++ /dev/null @@ -1,93 +0,0 @@ -# Microsoft Developer Studio Project File - Name="cone" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=cone - 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 "cone.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 "cone.mak" CFG="cone - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "cone - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "cone - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "cone - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../../include/" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "cone - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../include/" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "cone - Win32 Release" -# Name "cone - Win32 Debug" -# Begin Source File - -SOURCE=.\cone.c -# End Source File -# Begin Source File - -SOURCE=.\mainsimple.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/gle/cylinder.c b/lib/glut-3.7.6/progs/gle/cylinder.c deleted file mode 100644 index 768a31c34..000000000 --- a/lib/glut-3.7.6/progs/gle/cylinder.c +++ /dev/null @@ -1,92 +0,0 @@ - -/* - * cylinder drawing demo - * - * FUNCTION: - * Basic demo illustrating how to write code to draw - * the most basic cylinder shape. - * - * HISTORY: - * Linas Vepstas March 1995 - */ - -/* required include files */ -#include -#include - -/* the arrays in which we will store out polyline */ -#define NPTS 6 -double points [NPTS][3]; -float colors [NPTS][3]; -int idx = 0; - -/* some utilities for filling that array */ -#define PNT(x,y,z) { \ - points[idx][0] = x; \ - points[idx][1] = y; \ - points[idx][2] = z; \ - idx ++; \ -} - -#define COL(r,g,b) { \ - colors[idx][0] = r; \ - colors[idx][1] = g; \ - colors[idx][2] = b; \ -} - -/* - * Initialize a bent shape with three segments. - * The data format is a polyline. - * - * NOTE that neither the first, nor the last segment are drawn. - * The first & last segment serve only to determine that angle - * at which the endcaps are drawn. - */ - -void InitStuff (void) { - - /* initialize the join style here */ - gleSetJoinStyle (TUBE_NORM_EDGE | TUBE_JN_ANGLE | TUBE_JN_CAP); - - COL (0.0, 0.0, 0.0); - PNT (-6.0, 6.0, 0.0); - - COL (0.0, 0.8, 0.3); - PNT (6.0, 6.0, 0.0); - - COL (0.8, 0.3, 0.0); - PNT (6.0, -6.0, 0.0); - - COL (0.2, 0.3, 0.9); - PNT (-6.0, -6.0, 0.0); - - COL (0.2, 0.8, 0.5); - PNT (-6.0, 6.0, 0.0); - - COL (0.0, 0.0, 0.0); - PNT (6.0, 6.0, 0.0); -} - -extern float lastx; -extern float lasty; - -/* draw the cylinder shape */ -void DrawStuff (void) { - - glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - /* set up some matrices so that the object spins with the mouse */ - glPushMatrix (); - glTranslatef (0.0, 0.0, -80.0); - glRotatef (lastx, 0.0, 1.0, 0.0); - glRotatef (lasty, 1.0, 0.0, 0.0); - - /* Phew. FINALLY, Draw the polycylinder -- */ - glePolyCylinder (NPTS, points, colors, 2.3); - - glPopMatrix (); - - glutSwapBuffers (); -} - -/* ------------------------ end of file ------------------- */ diff --git a/lib/glut-3.7.6/progs/gle/cylinder.dsp b/lib/glut-3.7.6/progs/gle/cylinder.dsp deleted file mode 100644 index ee91ac76d..000000000 --- a/lib/glut-3.7.6/progs/gle/cylinder.dsp +++ /dev/null @@ -1,93 +0,0 @@ -# Microsoft Developer Studio Project File - Name="cylinder" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=cylinder - 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 "cylinder.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 "cylinder.mak" CFG="cylinder - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "cylinder - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "cylinder - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "cylinder - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../../include/" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "cylinder - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../include/" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "cylinder - Win32 Release" -# Name "cylinder - Win32 Debug" -# Begin Source File - -SOURCE=.\cylinder.c -# End Source File -# Begin Source File - -SOURCE=.\mainsimple.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/gle/helix.c b/lib/glut-3.7.6/progs/gle/helix.c deleted file mode 100644 index 6538d4c1b..000000000 --- a/lib/glut-3.7.6/progs/gle/helix.c +++ /dev/null @@ -1,48 +0,0 @@ - -/* - * helicoid (gernalized torus) demo - * - * FUNCTION: - * This code provides a very simple example of the helicoid primitive. - * Most of this code is required to set up OpenGL and GLUT, and very - * very little to set up the helix drawer. Don't blink! - * - * HISTORY: - * Written by Linas Vepstas, March 1995 - */ - -/* required include files */ -#include -#include - -/* most recent mouse postion */ -extern float lastx; -extern float lasty; - -void InitStuff (void) { - lastx = 121.0; - lasty = 121.0; -} - -/* draw the helix shape */ -void DrawStuff (void) { - - glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glColor3f (0.6, 0.8, 0.3); - - /* set up some matrices so that the object spins with the mouse */ - glPushMatrix (); - glTranslatef (0.0, 0.0, -80.0); - glRotatef (lastx, 0.0, 1.0, 0.0); - glRotatef (lasty, 1.0, 0.0, 0.0); - - /* Phew. FINALLY, Draw the helix -- */ - gleSetJoinStyle (TUBE_NORM_EDGE | TUBE_JN_ANGLE | TUBE_JN_CAP); - gleHelicoid (1.0, 6.0, 2.0, -3.0, 4.0, 0x0, 0x0, 0.0, 1080.0); - - glPopMatrix (); - - glutSwapBuffers (); -} - -/* ------------------------- end of file ----------------- */ diff --git a/lib/glut-3.7.6/progs/gle/helix.dsp b/lib/glut-3.7.6/progs/gle/helix.dsp deleted file mode 100644 index a073d03c4..000000000 --- a/lib/glut-3.7.6/progs/gle/helix.dsp +++ /dev/null @@ -1,93 +0,0 @@ -# Microsoft Developer Studio Project File - Name="helix" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=helix - 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 "helix.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 "helix.mak" CFG="helix - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "helix - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "helix - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "helix - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../../include/" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "helix - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../include/" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "helix - Win32 Release" -# Name "helix - Win32 Debug" -# Begin Source File - -SOURCE=.\helix.c -# End Source File -# Begin Source File - -SOURCE=.\mainsimple.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/gle/helix2.c b/lib/glut-3.7.6/progs/gle/helix2.c deleted file mode 100644 index bb3b8a7c7..000000000 --- a/lib/glut-3.7.6/progs/gle/helix2.c +++ /dev/null @@ -1,51 +0,0 @@ - -/* - * helicoid (gernalized torus) demo - * - * FUNCTION: - * This code provides a very simple example of the helicoid primitive. - * Most of this code is required to set up OpenGL and GLUT, and very - * very little to set up the helix drawer. Don't blink! - * - * =======> MOUSE HOOKED UP TO RADIUS, DELTA-RADIUS < ======== - * - * HISTORY: - * Written by Linas Vepstas, March 1995 - */ - -/* required include files */ -#include -#include - -/* most recent mouse postion */ -extern float lastx; -extern float lasty; - -void InitStuff (void) { - lastx = 121.0; - lasty = 121.0; -} - -/* draw the helix shape */ -void DrawStuff (void) { - - glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glColor3f (0.6, 0.3, 0.8); - - /* set up some matrices so that the object spins with the mouse */ - glPushMatrix (); - glTranslatef (0.0, 0.0, -80.0); - glRotatef (220.0, 0.0, 1.0, 0.0); - glRotatef (65.0, 1.0, 0.0, 0.0); - - /* Phew. FINALLY, Draw the helix -- */ - gleSetJoinStyle (TUBE_NORM_EDGE | TUBE_JN_ANGLE | TUBE_JN_CAP); - gleHelicoid (0.01*lastx, - 6.0, (0.01*lasty - 2.0), - -3.0, 4.0, 0x0, 0x0, 0.0, 1080.0); - - glPopMatrix (); - - glutSwapBuffers (); -} -/* ------------------------- end of file ----------------- */ diff --git a/lib/glut-3.7.6/progs/gle/helix2.dsp b/lib/glut-3.7.6/progs/gle/helix2.dsp deleted file mode 100644 index ef6019981..000000000 --- a/lib/glut-3.7.6/progs/gle/helix2.dsp +++ /dev/null @@ -1,93 +0,0 @@ -# Microsoft Developer Studio Project File - Name="helix2" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=helix2 - 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 "helix2.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 "helix2.mak" CFG="helix2 - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "helix2 - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "helix2 - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "helix2 - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../../include/" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "helix2 - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../include/" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "helix2 - Win32 Release" -# Name "helix2 - Win32 Debug" -# Begin Source File - -SOURCE=.\helix2.c -# End Source File -# Begin Source File - -SOURCE=.\mainsimple.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/gle/helix3.c b/lib/glut-3.7.6/progs/gle/helix3.c deleted file mode 100644 index 09ec9510d..000000000 --- a/lib/glut-3.7.6/progs/gle/helix3.c +++ /dev/null @@ -1,50 +0,0 @@ - -/* - * helicoid (gernalized torus) demo - * - * FUNCTION: - * This code provides a very simple example of the helicoid primitive. - * Most of this code is required to set up OpenGL and GLUT, and very - * very little to set up the helix drawer. Don't blink! - * - * =======> MOUSE HOOKED UP TO SWEEP, HEIGHT < ======== - * - * HISTORY: - * Written by Linas Vepstas, March 1995 - */ - -/* required include files */ -#include -#include - -/* most recent mouse postion */ -extern float lastx; -extern float lasty; - -void InitStuff (void) { - lastx = 121.0; - lasty = 121.0; -} - -/* draw the helix shape */ -void DrawStuff (void) { - - glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glColor3f (0.8, 0.3, 0.6); - - /* set up some matrices so that the object spins with the mouse */ - glPushMatrix (); - glTranslatef (0.0, 0.0, -80.0); - glRotatef (220.0, 0.0, 1.0, 0.0); - glRotatef (65.0, 1.0, 0.0, 0.0); - - /* Phew. FINALLY, Draw the helix -- */ - gleSetJoinStyle (TUBE_NORM_EDGE | TUBE_JN_ANGLE | TUBE_JN_CAP); - gleHelicoid (1.0, 6.0, -1.0, - 0.0, (0.02*lasty-2.0), 0x0, 0x0, 0.0, 6.0*lastx); - - glPopMatrix (); - - glutSwapBuffers (); -} -/* ------------------------- end of file ----------------- */ diff --git a/lib/glut-3.7.6/progs/gle/helix3.dsp b/lib/glut-3.7.6/progs/gle/helix3.dsp deleted file mode 100644 index 9409ee5d3..000000000 --- a/lib/glut-3.7.6/progs/gle/helix3.dsp +++ /dev/null @@ -1,93 +0,0 @@ -# Microsoft Developer Studio Project File - Name="helix3" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=helix3 - 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 "helix3.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 "helix3.mak" CFG="helix3 - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "helix3 - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "helix3 - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "helix3 - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../../include/" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "helix3 - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../include/" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "helix3 - Win32 Release" -# Name "helix3 - Win32 Debug" -# Begin Source File - -SOURCE=.\helix3.c -# End Source File -# Begin Source File - -SOURCE=.\mainsimple.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/gle/helix4.c b/lib/glut-3.7.6/progs/gle/helix4.c deleted file mode 100644 index be0e69c49..000000000 --- a/lib/glut-3.7.6/progs/gle/helix4.c +++ /dev/null @@ -1,66 +0,0 @@ - -/* - * helicoid (gernalized torus) demo - * - * FUNCTION: - * This code provides a very simple example of the helicoid primitive. - * Most of this code is required to set up OpenGL and GLUT, and very - * very little to set up the helix drawer. Don't blink! - * - * =======> MOUSE HOOKED UP TO AFFINE < ======== - * - * HISTORY: - * Written by Linas Vepstas, March 1995 - */ - -/* required include files */ -#include -#include - -/* most recent mouse postion */ -extern float lastx; -extern float lasty; - -void InitStuff (void) { - lastx = 121.0; - lasty = 121.0; -} - -/* draw the helix shape */ -void DrawStuff (void) { - double affine[2][3]; - double delta_affine[2][3]; - - glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glColor3f (0.7, 0.5, 0.3); - - /* set up some matrices so that the object spins with the mouse */ - glPushMatrix (); - glTranslatef (0.0, 0.0, -80.0); - glRotatef (220.0, 0.0, 1.0, 0.0); - glRotatef (65.0, 1.0, 0.0, 0.0); - - /* Phew. FINALLY, Draw the helix -- */ - affine [0][0] = 1.0/ (0.01*lastx); - affine [1][0] = 0.0; - affine [0][1] = 0.0; - affine [1][1] = 0.01*lastx; - affine [0][2] = 0.0; - affine [1][2] = 0.0; - - delta_affine [0][0] = 0.0; - delta_affine [1][0] = 0.03*lasty; - delta_affine [0][1] = -0.03*lasty; - delta_affine [1][1] = 0.0; - delta_affine [0][2] = 0.0; - delta_affine [1][2] = 0.0; - - gleSetJoinStyle (TUBE_NORM_EDGE | TUBE_JN_ANGLE | TUBE_JN_CAP); - gleHelicoid (1.0, 7.0, -1.0, - -4.0, 6.0, affine, delta_affine, 0.0, 980.0); - - glPopMatrix (); - - glutSwapBuffers (); -} -/* ------------------------- end of file ----------------- */ diff --git a/lib/glut-3.7.6/progs/gle/helix4.dsp b/lib/glut-3.7.6/progs/gle/helix4.dsp deleted file mode 100644 index e9ccfb18f..000000000 --- a/lib/glut-3.7.6/progs/gle/helix4.dsp +++ /dev/null @@ -1,93 +0,0 @@ -# Microsoft Developer Studio Project File - Name="helix4" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=helix4 - 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 "helix4.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 "helix4.mak" CFG="helix4 - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "helix4 - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "helix4 - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "helix4 - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../../include/" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "helix4 - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../include/" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "helix4 - Win32 Release" -# Name "helix4 - Win32 Debug" -# Begin Source File - -SOURCE=.\helix4.c -# End Source File -# Begin Source File - -SOURCE=.\mainsimple.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/gle/helixtex.c b/lib/glut-3.7.6/progs/gle/helixtex.c deleted file mode 100644 index 6f603e18b..000000000 --- a/lib/glut-3.7.6/progs/gle/helixtex.c +++ /dev/null @@ -1,48 +0,0 @@ - -/* - * helicoid (gernalized torus) demo - * - * FUNCTION: - * This code provides a very simple example of the helicoid primitive. - * - * =======> MOUSE HOOKED UP TO SWEEP, HEIGHT < ======== - * - * HISTORY: - * Written by Linas Vepstas, March 1995 - */ - -/* required include files */ -#include -#include -#include "texture.h" - -/* most recent mouse postion */ -extern float lastx; -extern float lasty; - -void InitStuff (void) {} - -/* draw the helix shape */ -void DrawStuff (void) { - - glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - /* set up some matrices so that the object spins with the mouse */ - glPushMatrix (); - glTranslatef (0.0, 0.0, -80.0); - glRotatef (220.0, 0.0, 1.0, 0.0); - glRotatef (65.0, 1.0, 0.0, 0.0); - - /* Phew. FINALLY, Draw the helix -- */ - gleSetJoinStyle (TUBE_NORM_EDGE | TUBE_JN_ANGLE | TUBE_JN_CAP); - gleHelicoid (1.0, 6.0, -1.0, - 0.0, (0.02*lasty-2.0), 0x0, 0x0, 0.0, 6.0*lastx); - - glPopMatrix (); - - glutSwapBuffers (); - - glutReportErrors(); -} - -/* ---------------------- end of file ------------------ */ diff --git a/lib/glut-3.7.6/progs/gle/helixtex.dsp b/lib/glut-3.7.6/progs/gle/helixtex.dsp deleted file mode 100644 index baa7e028d..000000000 --- a/lib/glut-3.7.6/progs/gle/helixtex.dsp +++ /dev/null @@ -1,101 +0,0 @@ -# Microsoft Developer Studio Project File - Name="helixtex" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=helixtex - 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 "helixtex.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 "helixtex.mak" CFG="helixtex - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "helixtex - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "helixtex - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "helixtex - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../../include/" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "helixtex - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../include/" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "helixtex - Win32 Release" -# Name "helixtex - Win32 Debug" -# Begin Source File - -SOURCE=.\helixtex.c -# End Source File -# Begin Source File - -SOURCE=.\maintex.c -# End Source File -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# Begin Source File - -SOURCE=.\texture.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/gle/horn.c b/lib/glut-3.7.6/progs/gle/horn.c deleted file mode 100644 index 6ab057bb4..000000000 --- a/lib/glut-3.7.6/progs/gle/horn.c +++ /dev/null @@ -1,137 +0,0 @@ - -/* - * hron -- cone drawing demo - * - * FUNCTION: - * Baisc demo illustrating how to write code to draw - * the a slightly fancier "polycone". - * - * HISTORY: - * Linas Vepstas March 1995 - */ - -/* required include files */ -#include -#include - -/* the arrays in which we will store out polyline */ -#define NPTS 26 -double radii [NPTS]; -double points [NPTS][3]; -int idx = 0; - -/* some utilities for filling that array */ -#define PNT(x,y,z) { \ - points[idx][0] = x; \ - points[idx][1] = y; \ - points[idx][2] = z; \ - idx ++; \ -} - -#define RAD(r) { \ - radii[idx] = r; \ -} - -/* - * Initialize a bent shape with three segments. - * The data format is a polyline. - * - * NOTE that neither the first, nor the last segment are drawn. - * The first & last segment serve only to determine that angle - * at which the endcaps are drawn. - */ - -void InitStuff (void) { - - /* initialize the join style here */ - gleSetJoinStyle (TUBE_NORM_PATH_EDGE | TUBE_JN_ANGLE ); - - RAD (0.3); - PNT (-4.9, 6.0, 0.0); - - RAD (0.3); - PNT (-4.8, 5.8, 0.0); - - RAD (0.3); - PNT (-3.8, 5.8, 0.0); - - RAD (0.6); - PNT (-3.5, 6.0, 0.0); - - RAD (0.8); - PNT (-3.0, 7.0, 0.0); - - RAD (0.9); - PNT (-2.4, 7.6, 0.0); - - RAD (1.0); - PNT (-1.8, 7.6, 0.0); - - RAD (1.1); - PNT (-1.2, 7.1, 0.0); - - RAD (1.2); - PNT (-0.8, 5.1, 0.0); - - RAD (1.7); - PNT (-0.3, -2.0, 0.0); - - RAD (1.8); - PNT (-0.2, -7.0, 0.0); - - RAD (2.0); - PNT (0.3, -7.8, 0.0); - - RAD (2.1); - PNT (0.8, -8.2, 0.0); - - RAD (2.25); - PNT (1.8, -8.6, 0.0); - - RAD (2.4); - PNT (3.6, -8.6, 0.0); - - RAD (2.5); - PNT (4.5, -8.2, 0.0); - - RAD (2.6); - PNT (4.8, -7.5, 0.0); - - RAD (2.7); - PNT (5.0, -6.0, 0.0); - - RAD (3.2); - PNT (6.4, -2.0, 0.0); - - RAD (4.1); - PNT (6.9, -1.0, 0.0); - - RAD (4.1); - PNT (7.8, 0.5, 0.0); - -} - -extern float lastx; -extern float lasty; - -/* draw the polycone shape */ -void DrawStuff (void) { - - glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - /* set up some matrices so that the object spins with the mouse */ - glPushMatrix (); - glTranslatef (0.0, 0.0, -80.0); - glRotatef (lastx, 0.0, 1.0, 0.0); - glRotatef (lasty, 1.0, 0.0, 0.0); - glColor3f (0.5, 0.5, 0.2); - - /* Phew. FINALLY, Draw the polycone -- */ - glePolyCone (idx, points, 0x0, radii); - - glPopMatrix (); - - glutSwapBuffers (); -} - -/* --------------------------- end of file ------------------- */ diff --git a/lib/glut-3.7.6/progs/gle/horn.dsp b/lib/glut-3.7.6/progs/gle/horn.dsp deleted file mode 100644 index 067d5b583..000000000 --- a/lib/glut-3.7.6/progs/gle/horn.dsp +++ /dev/null @@ -1,93 +0,0 @@ -# Microsoft Developer Studio Project File - Name="horn" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=horn - 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 "horn.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 "horn.mak" CFG="horn - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "horn - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "horn - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "horn - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../../include/" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "horn - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../include/" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "horn - Win32 Release" -# Name "horn - Win32 Debug" -# Begin Source File - -SOURCE=.\horn.c -# End Source File -# Begin Source File - -SOURCE=.\mainsimple.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/gle/joinoffset.c b/lib/glut-3.7.6/progs/gle/joinoffset.c deleted file mode 100644 index b834d4396..000000000 --- a/lib/glut-3.7.6/progs/gle/joinoffset.c +++ /dev/null @@ -1,145 +0,0 @@ - -/* cylinder drawing demo */ -/* this demo demonstrates the various join styles */ - -/* required include files */ -#include -#include - -/* ------------------------------------------------------- */ - -/* the arrays in which we will store the polyline */ -#define NPTS 100 -double points [NPTS][3]; -float colors [NPTS][3]; -int idx = 0; - -/* some utilities for filling that array */ -#define PSCALE 0.5 -#define PNT(x,y,z) { \ - points[idx][0] = PSCALE * x; \ - points[idx][1] = PSCALE * y; \ - points[idx][2] = PSCALE * z; \ - idx ++; \ -} - -#define COL(r,g,b) { \ - colors[idx][0] = r; \ - colors[idx][1] = g; \ - colors[idx][2] = b; \ -} - -/* the arrays in which we will store the contour */ -#define NCONTOUR 100 -double contour_points [NCONTOUR][2]; -int cidx = 0; - -/* some utilities for filling that array */ -#define C_PNT(x,y) { \ - contour_points[cidx][0] = x; \ - contour_points[cidx][1] = y; \ - cidx ++; \ -} - - -/* ------------------------------------------------------- */ -/* - * Initialize a bent shape with three segments. - * The data format is a polyline. - * - * NOTE that neither the first, nor the last segment are drawn. - * The first & last segment serve only to determine that angle - * at which the endcaps are drawn. - */ - -void InitStuff (void) { - - COL (0.0, 0.0, 0.0); - PNT (16.0, 0.0, 0.0); - - COL (0.2, 0.8, 0.5); - PNT (0.0, -16.0, 0.0); - - COL (0.0, 0.8, 0.3); - PNT (-16.0, 0.0, 0.0); - - COL (0.8, 0.3, 0.0); - PNT (0.0, 16.0, 0.0); - - COL (0.2, 0.3, 0.9); - PNT (16.0, 0.0, 0.0); - - COL (0.2, 0.8, 0.5); - PNT (0.0, -16.0, 0.0); - - COL (0.0, 0.0, 0.0); - PNT (-16.0, 0.0, 0.0); - - C_PNT (-0.8, -0.5); - C_PNT (-1.8, 0.0); - C_PNT (-1.2, 0.3); - C_PNT (-0.7, 0.8); - C_PNT (-0.2, 1.3); - C_PNT (0.0, 1.6); - C_PNT (0.2, 1.3); - C_PNT (0.7, 0.8); - C_PNT (1.2, 0.3); - C_PNT (1.8, 0.0); - C_PNT (0.8, -0.5); - - gleSetJoinStyle (TUBE_JN_ANGLE | TUBE_CONTOUR_CLOSED | TUBE_JN_CAP); -} - -double up_vector[3] = {1.0, 0.0, 0.0}; - -extern float lastx; -extern float lasty; - -/* ------------------------------------------------------- */ -/* draw the extrusion */ - -void DrawStuff (void) { - double moved_contour [NCONTOUR][2]; - int style, save_style; - int i; - - for (i=0; i -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=joinoffset - 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 "joinoffset.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 "joinoffset.mak" CFG="joinoffset - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "joinoffset - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "joinoffset - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "joinoffset - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../../include/" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "joinoffset - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../include/" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "joinoffset - Win32 Release" -# Name "joinoffset - Win32 Debug" -# Begin Source File - -SOURCE=.\joinoffset.c -# End Source File -# Begin Source File - -SOURCE=.\mainsimple.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/gle/mainjoin.c b/lib/glut-3.7.6/progs/gle/mainjoin.c deleted file mode 100644 index fa4bfa1a3..000000000 --- a/lib/glut-3.7.6/progs/gle/mainjoin.c +++ /dev/null @@ -1,135 +0,0 @@ - -/* - * main for exhibiting differnt join styles - * - * FUNCTION: - * This demo demonstrates the various join styles, - * and how they get applied. - * - * HISTORY: - * Linas Vepstas March 1995 - */ - -/* required include files */ -#include -#include -#include - -extern void InitStuff (void); -extern void DrawStuff (void); - -float lastx=0; -float lasty=0; - -/* get notified of mouse motions */ -void MouseMotion (int x, int y) -{ - lastx = x; - lasty = y; - glutPostRedisplay (); -} - -void JoinStyle (int msg) -{ - int style; - /* get the current joint style */ - style = gleGetJoinStyle (); - - /* there are four different join styles, - * and two different normal vector styles */ - switch (msg) { - case 0: - style &= ~TUBE_JN_MASK; - style |= TUBE_JN_RAW; - break; - case 1: - style &= ~TUBE_JN_MASK; - style |= TUBE_JN_ANGLE; - break; - case 2: - style &= ~TUBE_JN_MASK; - style |= TUBE_JN_CUT; - break; - case 3: - style &= ~TUBE_JN_MASK; - style |= TUBE_JN_ROUND; - break; - - case 20: - style &= ~TUBE_NORM_MASK; - style |= TUBE_NORM_FACET; - break; - case 21: - style &= ~TUBE_NORM_MASK; - style |= TUBE_NORM_EDGE; - break; - - case 99: - exit (0); - - default: - break; - } - gleSetJoinStyle (style); - glutPostRedisplay (); -} - -/* set up a light */ -GLfloat lightOnePosition[] = {40.0, 40, 100.0, 0.0}; -GLfloat lightOneColor[] = {0.99, 0.99, 0.99, 1.0}; - -GLfloat lightTwoPosition[] = {-40.0, 40, 100.0, 0.0}; -GLfloat lightTwoColor[] = {0.99, 0.99, 0.99, 1.0}; - -int -main (int argc, char * argv[]) { - - /* initialize glut */ - glutInit (&argc, argv); - glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); - glutCreateWindow ("join styles"); - glutDisplayFunc (DrawStuff); - glutMotionFunc (MouseMotion); - - /* create popup menu */ - glutCreateMenu (JoinStyle); - glutAddMenuEntry ("Raw Join Style", 0); - glutAddMenuEntry ("Angle Join Style", 1); - glutAddMenuEntry ("Cut Join Style", 2); - glutAddMenuEntry ("Round Join Style", 3); - glutAddMenuEntry ("------------------", 9999); - glutAddMenuEntry ("Facet Normal Vectors", 20); - glutAddMenuEntry ("Edge Normal Vectors", 21); - glutAddMenuEntry ("------------------", 9999); - glutAddMenuEntry ("Exit", 99); - glutAttachMenu (GLUT_MIDDLE_BUTTON); - - /* initialize GL */ - glClearDepth (1.0); - glEnable (GL_DEPTH_TEST); - glClearColor (0.0, 0.0, 0.0, 0.0); - glShadeModel (GL_SMOOTH); - - glMatrixMode (GL_PROJECTION); - /* roughly, measured in centimeters */ - glFrustum (-9.0, 9.0, -9.0, 9.0, 50.0, 150.0); - glMatrixMode(GL_MODELVIEW); - - /* initialize lighting */ - glLightfv (GL_LIGHT0, GL_POSITION, lightOnePosition); - glLightfv (GL_LIGHT0, GL_DIFFUSE, lightOneColor); - glEnable (GL_LIGHT0); - glLightfv (GL_LIGHT1, GL_POSITION, lightTwoPosition); - glLightfv (GL_LIGHT1, GL_DIFFUSE, lightTwoColor); - glEnable (GL_LIGHT1); - glEnable (GL_LIGHTING); - glEnable (GL_NORMALIZE); - glColorMaterial (GL_FRONT_AND_BACK, GL_DIFFUSE); - glEnable (GL_COLOR_MATERIAL); - - InitStuff (); - - glutMainLoop (); - return 0; /* ANSI C requires main to return int. */ -} -/* ------------------ end of file -------------------- */ diff --git a/lib/glut-3.7.6/progs/gle/mainsimple.c b/lib/glut-3.7.6/progs/gle/mainsimple.c deleted file mode 100644 index d047bb71a..000000000 --- a/lib/glut-3.7.6/progs/gle/mainsimple.c +++ /dev/null @@ -1,82 +0,0 @@ - -/* - * FUNCTION: - * very minimal "main()" for GL demos. - * - * HISTORY: - * Linas Vepstas March 1995 - */ - -/* required include files */ -#include -#include - -extern void DrawStuff (void); -extern void InitStuff (void); - -float lastx=0; -float lasty=0; - -/* get notified of mouse motions */ -void MouseMotion (int x, int y) -{ - lastx = x; - lasty = y; - glutPostRedisplay (); -} - -/* ARGSUSED */ -void JoinStyle (int msg) -{ - exit (0); -} - -/* set up a light */ -GLfloat lightOnePosition[] = {40.0, 40, 100.0, 0.0}; -GLfloat lightOneColor[] = {0.99, 0.99, 0.99, 1.0}; - -GLfloat lightTwoPosition[] = {-40.0, 40, 100.0, 0.0}; -GLfloat lightTwoColor[] = {0.99, 0.99, 0.99, 1.0}; - -int -main (int argc, char * argv[]) { - - /* initialize glut */ - glutInit (&argc, argv); - glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); - glutCreateWindow ("basic demo"); - glutDisplayFunc (DrawStuff); - glutMotionFunc (MouseMotion); - - /* create popup menu */ - glutCreateMenu (JoinStyle); - glutAddMenuEntry ("Exit", 99); - glutAttachMenu (GLUT_MIDDLE_BUTTON); - - /* initialize GL */ - glClearDepth (1.0); - glEnable (GL_DEPTH_TEST); - glClearColor (0.0, 0.0, 0.0, 0.0); - glShadeModel (GL_SMOOTH); - - glMatrixMode (GL_PROJECTION); - /* roughly, measured in centimeters */ - glFrustum (-9.0, 9.0, -9.0, 9.0, 50.0, 150.0); - glMatrixMode(GL_MODELVIEW); - - /* initialize lighting */ - glLightfv (GL_LIGHT0, GL_POSITION, lightOnePosition); - glLightfv (GL_LIGHT0, GL_DIFFUSE, lightOneColor); - glEnable (GL_LIGHT0); - glLightfv (GL_LIGHT1, GL_POSITION, lightTwoPosition); - glLightfv (GL_LIGHT1, GL_DIFFUSE, lightTwoColor); - glEnable (GL_LIGHT1); - glEnable (GL_LIGHTING); - glColorMaterial (GL_FRONT_AND_BACK, GL_DIFFUSE); - glEnable (GL_COLOR_MATERIAL); - - InitStuff (); - - glutMainLoop (); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/gle/maintex.c b/lib/glut-3.7.6/progs/gle/maintex.c deleted file mode 100644 index 5a9dc495f..000000000 --- a/lib/glut-3.7.6/progs/gle/maintex.c +++ /dev/null @@ -1,257 +0,0 @@ - -/* - * texture map demo scaffolding - * - * FUNCTION: - * Most of this code is required to set up OpenGL and GLUT - * - * HISTORY: - * Written by Linas Vepstas, March 1995 - */ - -/* required include files */ -#include -#include -#include -#include "texture.h" - -/* most recent mouse postion */ -float lastx = 100.0; -float lasty = 100.0; - -extern void InitStuff (void); -extern void DrawStuff (void); - -/* get notified of mouse motions */ -void MouseMotion (int x, int y) -{ - lastx = x; - lasty = y; - glutPostRedisplay (); -} - -void TextureStyle (int msg) -{ - int mode = 0; - - switch (msg) { - case 301: - glDisable (GL_TEXTURE_2D); - break; - case 302: - glEnable (GL_TEXTURE_2D); - break; - - case 501: - mode = GLE_TEXTURE_ENABLE | GLE_TEXTURE_VERTEX_FLAT; - glMatrixMode (GL_TEXTURE); glLoadIdentity (); - glScalef (0.1, 0.1, 1.0); glMatrixMode (GL_MODELVIEW); - gleTextureMode (mode); - break; - case 502: - mode = GLE_TEXTURE_ENABLE | GLE_TEXTURE_NORMAL_FLAT; - glMatrixMode (GL_TEXTURE); glLoadIdentity (); - glScalef (0.1, 0.1, 1.0); glMatrixMode (GL_MODELVIEW); - gleTextureMode (mode); - break; - case 503: - mode = GLE_TEXTURE_ENABLE | GLE_TEXTURE_VERTEX_CYL; - glMatrixMode (GL_TEXTURE); glLoadIdentity (); - glScalef (1.0, 0.1, 1.0); glMatrixMode (GL_MODELVIEW); - gleTextureMode (mode); - break; - case 504: - mode = GLE_TEXTURE_ENABLE | GLE_TEXTURE_NORMAL_CYL; - glMatrixMode (GL_TEXTURE); glLoadIdentity (); - glScalef (1.0, 0.1, 1.0); glMatrixMode (GL_MODELVIEW); - gleTextureMode (mode); - break; - case 505: - mode = GLE_TEXTURE_ENABLE | GLE_TEXTURE_VERTEX_SPH; - glMatrixMode (GL_TEXTURE); glLoadIdentity (); - glMatrixMode (GL_MODELVIEW); - gleTextureMode (mode); - break; - case 506: - mode = GLE_TEXTURE_ENABLE | GLE_TEXTURE_NORMAL_SPH; - glMatrixMode (GL_TEXTURE); glLoadIdentity (); - glMatrixMode (GL_MODELVIEW); - gleTextureMode (mode); - break; - - case 507: - mode = GLE_TEXTURE_ENABLE | GLE_TEXTURE_VERTEX_MODEL_FLAT; - glMatrixMode (GL_TEXTURE); glLoadIdentity (); - glScalef (0.1, 0.1, 1.0); glMatrixMode (GL_MODELVIEW); - gleTextureMode (mode); - break; - case 508: - mode = GLE_TEXTURE_ENABLE | GLE_TEXTURE_NORMAL_MODEL_FLAT; - glMatrixMode (GL_TEXTURE); glLoadIdentity (); - glScalef (0.1, 0.1, 1.0); glMatrixMode (GL_MODELVIEW); - gleTextureMode (mode); - break; - case 509: - mode = GLE_TEXTURE_ENABLE | GLE_TEXTURE_VERTEX_MODEL_CYL; - glMatrixMode (GL_TEXTURE); glLoadIdentity (); - glScalef (1.0, 0.1, 1.0); glMatrixMode (GL_MODELVIEW); - gleTextureMode (mode); - break; - case 510: - mode = GLE_TEXTURE_ENABLE | GLE_TEXTURE_NORMAL_MODEL_CYL; - glMatrixMode (GL_TEXTURE); glLoadIdentity (); - glScalef (1.0, 0.1, 1.0); glMatrixMode (GL_MODELVIEW); - gleTextureMode (mode); - break; - case 511: - mode = GLE_TEXTURE_ENABLE | GLE_TEXTURE_VERTEX_MODEL_SPH; - glMatrixMode (GL_TEXTURE); glLoadIdentity (); - glMatrixMode (GL_MODELVIEW); - gleTextureMode (mode); - break; - case 512: - mode = GLE_TEXTURE_ENABLE | GLE_TEXTURE_NORMAL_MODEL_SPH; - glMatrixMode (GL_TEXTURE); glLoadIdentity (); - glMatrixMode (GL_MODELVIEW); - gleTextureMode (mode); - break; - - case 701: - current_texture = check_texture; - gluBuild2DMipmaps (GL_TEXTURE_2D, 3, - current_texture -> size, - current_texture -> size, - GL_RGB, GL_UNSIGNED_BYTE, - (void *) (current_texture->pixmap)); - break; - case 702: - current_texture = barberpole_texture; - gluBuild2DMipmaps (GL_TEXTURE_2D, 3, - current_texture -> size, - current_texture -> size, - GL_RGB, GL_UNSIGNED_BYTE, - (void *) (current_texture->pixmap)); - break; - case 703: - current_texture = wild_tooth_texture; - gluBuild2DMipmaps (GL_TEXTURE_2D, 3, - current_texture -> size, - current_texture -> size, - GL_RGB, GL_UNSIGNED_BYTE, - (void *) (current_texture->pixmap)); - break; - case 704: - current_texture = planet_texture; - gluBuild2DMipmaps (GL_TEXTURE_2D, 3, - current_texture -> size, - current_texture -> size, - GL_RGB, GL_UNSIGNED_BYTE, - (void *) (current_texture->pixmap)); - break; - - case 99: - exit (0); - default: - break; - } - glutPostRedisplay(); -} - -/* set up a light */ -GLfloat lightOnePosition[] = {40.0, 40, 100.0, 0.0}; -GLfloat lightOneColor[] = {0.99, 0.99, 0.99, 1.0}; - -GLfloat lightTwoPosition[] = {-40.0, 40, 100.0, 0.0}; -GLfloat lightTwoColor[] = {0.99, 0.99, 0.99, 1.0}; - -int -main (int argc, char * argv[]) { - - /* initialize glut */ - glutInit (&argc, argv); - glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); - glutCreateWindow ("texture"); - glutDisplayFunc (DrawStuff); - glutMotionFunc (MouseMotion); - - /* create popup menu */ - glutCreateMenu (TextureStyle); - glutAddMenuEntry ("Texture Off", 301); - glutAddMenuEntry ("Texture On", 302); - glutAddMenuEntry ("--------------", 9999); - glutAddMenuEntry ("Vertex Flat", 501); - glutAddMenuEntry ("Normal Flat", 502); - glutAddMenuEntry ("Vertex Cylinder", 503); - glutAddMenuEntry ("Normal Cylinder", 504); - glutAddMenuEntry ("Vertex Sphere", 505); - glutAddMenuEntry ("Normal Sphere", 506); - glutAddMenuEntry ("--------------", 9999); - glutAddMenuEntry ("Model Vertex Flat", 507); - glutAddMenuEntry ("Model Normal Flat", 508); - glutAddMenuEntry ("Model Vertex Cylinder", 509); - glutAddMenuEntry ("Model Normal Cylinder", 510); - glutAddMenuEntry ("Model Vertex Sphere", 511); - glutAddMenuEntry ("Model Normal Sphere", 512); - glutAddMenuEntry ("--------------", 9999); - glutAddMenuEntry ("Check Texture", 701); - glutAddMenuEntry ("Barberpole Texture", 702); - glutAddMenuEntry ("Wild Tooth Texture", 703); - glutAddMenuEntry ("Molten Lava Texture", 704); - glutAddMenuEntry ("--------------", 9999); - glutAddMenuEntry ("Exit", 99); - glutAttachMenu (GLUT_MIDDLE_BUTTON); - - /* initialize GL */ - glClearDepth (1.0); - glEnable (GL_DEPTH_TEST); - glClearColor (0.0, 0.0, 0.0, 0.0); - glShadeModel (GL_SMOOTH); - - glMatrixMode (GL_PROJECTION); - /* roughly, measured in centimeters */ - glFrustum (-9.0, 9.0, -9.0, 9.0, 50.0, 150.0); - glMatrixMode(GL_MODELVIEW); - - /* initialize lighting */ - glLightfv (GL_LIGHT0, GL_POSITION, lightOnePosition); - glLightfv (GL_LIGHT0, GL_DIFFUSE, lightOneColor); - glEnable (GL_LIGHT0); - glLightfv (GL_LIGHT1, GL_POSITION, lightTwoPosition); - glLightfv (GL_LIGHT1, GL_DIFFUSE, lightTwoColor); - glEnable (GL_LIGHT1); - glEnable (GL_LIGHTING); - glColorMaterial (GL_FRONT_AND_BACK, GL_DIFFUSE); - glEnable (GL_COLOR_MATERIAL); - glColor3f (0.8, 0.3, 0.6); - - /* initialize and enable texturing */ - setup_textures (); - gluBuild2DMipmaps (GL_TEXTURE_2D, 3, - current_texture -> size, - current_texture -> size, - GL_RGB, GL_UNSIGNED_BYTE, - (void *) (current_texture->pixmap)); - - glMatrixMode (GL_TEXTURE); - glLoadIdentity (); - glScalef (1.0, 0.1, 1.0); - glMatrixMode (GL_MODELVIEW); - - glEnable (GL_TEXTURE_2D); -/* - some stuff to play with .... - glTexGeni (GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - glTexGeni (GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - glEnable (GL_TEXTURE_GEN_S); - glEnable (GL_TEXTURE_GEN_T); -*/ - - gleTextureMode (GLE_TEXTURE_ENABLE | GLE_TEXTURE_VERTEX_CYL); - - InitStuff (); - - glutMainLoop (); - return 0; /* ANSI C requires main to return int. */ -} - -/* -------------------- end of file -------------------- */ diff --git a/lib/glut-3.7.6/progs/gle/martini.c b/lib/glut-3.7.6/progs/gle/martini.c deleted file mode 100644 index 9aaa47795..000000000 --- a/lib/glut-3.7.6/progs/gle/martini.c +++ /dev/null @@ -1,250 +0,0 @@ - -/* 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. */ - -/* compile: cc -o martini martini.c trackball.c -lgle -lglut -lGLU -lGL -lXmu -lXext -lX11 -lm */ - -#include -#include -#include -#include /* for cos(), sin(), and sqrt() */ -#include -#include -#include "trackball.h" - -int spinning = 0, moving = 0; -int beginx, beginy; -int W = 300, H = 300; -float curquat[4]; -float lastquat[4]; -int newModel = 1; -/* *INDENT-OFF* */ -GLfloat lightZeroPosition[] = {10.0, 4.0, 10.0, 1.0}; -GLfloat lightZeroColor[] = {0.8, 1.0, 0.8, 1.0}; /* green-tinted */ -GLfloat lightOnePosition[] = {-1.0, -2.0, 1.0, 0.0}; -GLfloat lightOneColor[] = {0.6, 0.3, 0.2, 1.0}; /* red-tinted */ -/* *INDENT-ON* */ - -void -recalcModelView(void) -{ - GLfloat m[4][4]; - - glPopMatrix(); - glPushMatrix(); - build_rotmatrix(m, curquat); - glMultMatrixf(&m[0][0]); - newModel = 0; -} - -/* the arrays in which we will store out polyline */ -#define NPTS 25 -double points[NPTS][3]; -double radii[NPTS]; -int idx = 0; - -#define REV(r, y) { \ - points[idx][0] = 0.0; \ - points[idx][1] = y - 3.0; \ - points[idx][2] = 0.0; \ - radii[idx] = r; \ - idx ++; \ -} - -void -InitStuff(void) -{ - /* Initialize the join style here, no capping. */ - gleSetJoinStyle(TUBE_NORM_EDGE | TUBE_JN_ANGLE); - gleSetNumSlices(30); - REV(0.0, 5.0); - REV(0.0, 4.0); - REV(2.5, 6.1); - REV(2.75, 6.0); - REV(2.75, 5.75); - REV(0.25, 3.75); - REV(0.25, 2.66); - REV(0.4, 2.5); - REV(0.3, 2.2); - REV(0.4, 1.9); - REV(0.25, 1.7); - REV(0.25, 0.6); - REV(0.25, 0.101); - REV(2.0, 0.1); - REV(2.0, 0.0); - REV(0.0, 0.05); - REV(0.0, -1.0); - - /* Capture rendering of martini glass in a display list. */ - glNewList(1, GL_COMPILE); - glFrontFace(GL_CW); - glePolyCone(4, points, NULL, radii); - glFrontFace(GL_CCW); - glePolyCone(15, &points[1], NULL, &radii[1]); - glFrontFace(GL_CW); - glePolyCone(4, &points[13], NULL, &radii[13]); - glEndList(); -} - -void -redraw(void) -{ - if (newModel) - recalcModelView(); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - /* Draw the martini glass. */ - glCallList(1); - glutSwapBuffers(); -} - -void -myReshape(int w, int h) -{ - glViewport(0, 0, w, h); - W = w; - H = h; -} - -void -mouse(int button, int state, int x, int y) -{ - if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) { - spinning = 0; - glutIdleFunc(NULL); - moving = 1; - beginx = x; - beginy = y; - } - if (button == GLUT_LEFT_BUTTON && state == GLUT_UP) { - moving = 0; - } -} - -void -animate(void) -{ - add_quats(lastquat, curquat, curquat); - newModel = 1; - glutPostRedisplay(); -} - -void -motion(int x, int y) -{ - if (moving) { - trackball(lastquat, - (2.0 * beginx - W) / W, - (H - 2.0 * beginy) / H, - (2.0 * x - W) / W, - (H - 2.0 * y) / H - ); - beginx = x; - beginy = y; - spinning = 1; - glutIdleFunc(animate); - } -} - -GLboolean lightZeroSwitch = GL_TRUE, lightOneSwitch = GL_TRUE; - -void -controlLights(int value) -{ - switch (value) { - case 1: - lightZeroSwitch = !lightZeroSwitch; - if (lightZeroSwitch) { - glEnable(GL_LIGHT0); - } else { - glDisable(GL_LIGHT0); - } - break; - case 2: - lightOneSwitch = !lightOneSwitch; - if (lightOneSwitch) { - glEnable(GL_LIGHT1); - } else { - glDisable(GL_LIGHT1); - } - break; -#ifdef GL_MULTISAMPLE_SGIS - case 3: - if (glIsEnabled(GL_MULTISAMPLE_SGIS)) { - glDisable(GL_MULTISAMPLE_SGIS); - } else { - glEnable(GL_MULTISAMPLE_SGIS); - } - break; -#endif - case 4: - glutFullScreen(); - break; - case 5: - exit(0); - break; - } - glutPostRedisplay(); -} - -void -vis(int visible) -{ - if (visible == GLUT_VISIBLE) { - if (spinning) - glutIdleFunc(animate); - } else { - if (spinning) - glutIdleFunc(NULL); - } -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH | GLUT_MULTISAMPLE); - trackball(curquat, 0.0, 0.0, 0.0, 0.0); - glutCreateWindow("martini"); - glutDisplayFunc(redraw); - glutReshapeFunc(myReshape); - glutVisibilityFunc(vis); - glutMouseFunc(mouse); - glutMotionFunc(motion); - glutCreateMenu(controlLights); - glutAddMenuEntry("Toggle right light", 1); - glutAddMenuEntry("Toggle left light", 2); - if (glutGet(GLUT_WINDOW_NUM_SAMPLES) > 0) { - glutAddMenuEntry("Toggle multisampling", 3); - glutSetWindowTitle("martini (multisample capable)"); - } - glutAddMenuEntry("Full screen", 4); - glutAddMenuEntry("Quit", 5); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glEnable(GL_CULL_FACE); - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - glMatrixMode(GL_PROJECTION); - gluPerspective( /* field of view in degree */ 40.0, - /* aspect ratio */ 1.0, - /* Z near */ 1.0, /* Z far */ 40.0); - glMatrixMode(GL_MODELVIEW); - gluLookAt(0.0, 0.0, 15.0, /* eye is at (0,0,15) */ - 0.0, 0.0, 0.0, /* center is at (0,0,0) */ - 0.0, 1.0, 0.); /* up is in positive Y direction */ - glPushMatrix(); /* dummy push so we can pop on model recalc */ - glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, 1); - glLightfv(GL_LIGHT0, GL_POSITION, lightZeroPosition); - glLightfv(GL_LIGHT0, GL_DIFFUSE, lightZeroColor); - glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 0.1); - glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 0.05); - glLightfv(GL_LIGHT1, GL_POSITION, lightOnePosition); - glLightfv(GL_LIGHT1, GL_DIFFUSE, lightOneColor); - glEnable(GL_LIGHT0); - glEnable(GL_LIGHT1); - InitStuff(); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/gle/martini.dsp b/lib/glut-3.7.6/progs/gle/martini.dsp deleted file mode 100644 index 9b2ca83ac..000000000 --- a/lib/glut-3.7.6/progs/gle/martini.dsp +++ /dev/null @@ -1,97 +0,0 @@ -# Microsoft Developer Studio Project File - Name="martini" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=martini - 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 "martini.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 "martini.mak" CFG="martini - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "martini - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "martini - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "martini - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../../include/" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "martini - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../include/" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "martini - Win32 Release" -# Name "martini - Win32 Debug" -# Begin Source File - -SOURCE=.\martini.c -# End Source File -# Begin Source File - -SOURCE=.\trackball.c -# End Source File -# Begin Source File - -SOURCE=.\trackball.h -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/gle/screw.c b/lib/glut-3.7.6/progs/gle/screw.c deleted file mode 100644 index 649db432e..000000000 --- a/lib/glut-3.7.6/progs/gle/screw.c +++ /dev/null @@ -1,124 +0,0 @@ -/* - * screw.c - * - * FUNCTION: - * Draws a screw shape. - * - * HISTORY: - * -- created by Linas Vepstas October 1991 - * -- heavily modified to draw more texas shapes, Feb 1993, Linas - * -- converted to use GLUT -- December 1995, Linas - * - */ - -/* required include files */ -#include -#include -#include -#include - -/* =========================================================== */ - -#define SCALE 1.3 -#define CONTOUR(x,y) { \ - double ax, ay, alen; \ - contour[i][0] = SCALE * (x); \ - contour[i][1] = SCALE * (y); \ - if (i!=0) { \ - ax = contour[i][0] - contour[i-1][0]; \ - ay = contour[i][1] - contour[i-1][1]; \ - alen = 1.0 / sqrt (ax*ax + ay*ay); \ - ax *= alen; ay *= alen; \ - norms [i-1][0] = ay; \ - norms [i-1][1] = -ax; \ - } \ - i++; \ -} - -#define NUM_PTS (25) - -double contour [NUM_PTS][2]; -double norms [NUM_PTS][2]; - -void init_contour (void) -{ - int i; - - /* outline of extrusion */ - i=0; - CONTOUR (1.0, 1.0); - CONTOUR (1.0, 2.9); - CONTOUR (0.9, 3.0); - CONTOUR (-0.9, 3.0); - CONTOUR (-1.0, 2.9); - - CONTOUR (-1.0, 1.0); - CONTOUR (-2.9, 1.0); - CONTOUR (-3.0, 0.9); - CONTOUR (-3.0, -0.9); - CONTOUR (-2.9, -1.0); - - CONTOUR (-1.0, -1.0); - CONTOUR (-1.0, -2.9); - CONTOUR (-0.9, -3.0); - CONTOUR (0.9, -3.0); - CONTOUR (1.0, -2.9); - - CONTOUR (1.0, -1.0); - CONTOUR (2.9, -1.0); - CONTOUR (3.0, -0.9); - CONTOUR (3.0, 0.9); - CONTOUR (2.9, 1.0); - - CONTOUR (1.0, 1.0); /* repeat so that last normal is computed */ -} - -/* =========================================================== */ - -extern float lastx; -extern float lasty; - -extern void TextureStyle (int msg); - -void InitStuff (void) -{ - int style; - - /* pick model-vertex-cylinder coords for texture mapping */ - TextureStyle (509); - - /* configure the pipeline */ - style = TUBE_JN_CAP; - style |= TUBE_CONTOUR_CLOSED; - style |= TUBE_NORM_FACET; - style |= TUBE_JN_ANGLE; - gleSetJoinStyle (style); - - lastx = 121.0; - lasty = 121.0; - - init_contour(); -} - -/* =========================================================== */ - -void DrawStuff (void) { - - glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glColor3f (0.5, 0.6, 0.6); - - /* set up some matrices so that the object spins with the mouse */ - glPushMatrix (); - glTranslatef (0.0, 0.0, -80.0); - glRotatef (130.0, 0.0, 1.0, 0.0); - glRotatef (65.0, 1.0, 0.0, 0.0); - - /* draw the brand and the handle */ - gleScrew (20, contour, norms, - NULL, -6.0, 9.0, lasty); - - glPopMatrix (); - glutSwapBuffers (); -} - -/* ===================== END OF FILE ================== */ diff --git a/lib/glut-3.7.6/progs/gle/screw.dsp b/lib/glut-3.7.6/progs/gle/screw.dsp deleted file mode 100644 index 932fdee41..000000000 --- a/lib/glut-3.7.6/progs/gle/screw.dsp +++ /dev/null @@ -1,97 +0,0 @@ -# Microsoft Developer Studio Project File - Name="screw" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=screw - 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 "screw.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 "screw.mak" CFG="screw - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "screw - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "screw - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "screw - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../../include/" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "screw - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../include/" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "screw - Win32 Release" -# Name "screw - Win32 Debug" -# Begin Source File - -SOURCE=.\maintex.c -# End Source File -# Begin Source File - -SOURCE=.\screw.c -# End Source File -# Begin Source File - -SOURCE=.\texture.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/gle/taper.c b/lib/glut-3.7.6/progs/gle/taper.c deleted file mode 100644 index 0015d66e4..000000000 --- a/lib/glut-3.7.6/progs/gle/taper.c +++ /dev/null @@ -1,218 +0,0 @@ -/* - * taper.c - * - * FUNCTION: - * Draws a tapered screw shape. - * - * HISTORY: - * -- created by Linas Vepstas October 1991 - * -- heavily modified to draw more texas shapes, Feb 1993, Linas - * -- converted to use GLUT -- December 1995, Linas - * - */ - -/* required include files */ -#include -#include -#include -#include - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -/* =========================================================== */ - -#define SCALE 3.33333 -#define CONTOUR(x,y) { \ - double ax, ay, alen; \ - contour[i][0] = SCALE * (x); \ - contour[i][1] = SCALE * (y); \ - if (i!=0) { \ - ax = contour[i][0] - contour[i-1][0]; \ - ay = contour[i][1] - contour[i-1][1]; \ - alen = 1.0 / sqrt (ax*ax + ay*ay); \ - ax *= alen; ay *= alen; \ - norms [i-1][0] = ay; \ - norms [i-1][1] = -ax; \ - } \ - i++; \ -} - -#define NUM_PTS (25) - -double contour [NUM_PTS][2]; -double norms [NUM_PTS][2]; - -void init_contour (void) -{ - int i; - - /* outline of extrusion */ - i=0; - CONTOUR (1.0, 1.0); - CONTOUR (1.0, 2.9); - CONTOUR (0.9, 3.0); - CONTOUR (-0.9, 3.0); - CONTOUR (-1.0, 2.9); - - CONTOUR (-1.0, 1.0); - CONTOUR (-2.9, 1.0); - CONTOUR (-3.0, 0.9); - CONTOUR (-3.0, -0.9); - CONTOUR (-2.9, -1.0); - - CONTOUR (-1.0, -1.0); - CONTOUR (-1.0, -2.9); - CONTOUR (-0.9, -3.0); - CONTOUR (0.9, -3.0); - CONTOUR (1.0, -2.9); - - CONTOUR (1.0, -1.0); - CONTOUR (2.9, -1.0); - CONTOUR (3.0, -0.9); - CONTOUR (3.0, 0.9); - CONTOUR (2.9, 1.0); - - CONTOUR (1.0, 1.0); /* repeat so that last normal is computed */ -} - -/* =========================================================== */ - -#define PSIZE 40 -double path[PSIZE][3]; -double twist[PSIZE]; -double taper[PSIZE]; - -void init_taper (void) { - int j; - double z, deltaz; - double ang, dang; - - z = -10.0; - deltaz = 0.5; - - ang = 0.0; - dang = 20.0; - for (j=0; j<40; j++) { - path[j][0] = 0x0; - path[j][1] = 0x0; - path[j][2] = z; - - twist[j] = ang; - ang += dang; - - taper[j] = 0.1 * sqrt (9.51*9.51 - z*z); - - z += deltaz; - } - - taper[0] = taper[1]; - taper[39] = taper[38]; - -} - -/* =========================================================== */ - -extern float lastx; -extern float lasty; - -void InitStuff (void) -{ - int style; - - /* configure the pipeline */ - style = TUBE_JN_CAP; - style |= TUBE_CONTOUR_CLOSED; - style |= TUBE_NORM_FACET; - style |= TUBE_JN_ANGLE; - gleSetJoinStyle (style); - - lastx = 121.0; - lasty = 121.0; - - init_contour(); - init_taper(); -} - -/* =========================================================== */ - -void gleTaper (int ncp, - gleDouble contour[][2], - gleDouble cont_normal[][2], - gleDouble up[3], - int npoints, - gleDouble point_array[][3], - float color_array[][3], - gleDouble taper[], - gleDouble twist[]) -{ - int j; - gleAffine *xforms; - double co, si, angle; - - /* malloc the extrusion array and the twist array */ - xforms = (gleAffine *) malloc (npoints * sizeof(gleAffine)); - - for (j=0; j -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=taper - 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 "taper.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 "taper.mak" CFG="taper - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "taper - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "taper - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "taper - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../../include/" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "taper - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../include/" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "taper - Win32 Release" -# Name "taper - Win32 Debug" -# Begin Source File - -SOURCE=.\mainsimple.c -# End Source File -# Begin Source File - -SOURCE=.\taper.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/gle/texas.c b/lib/glut-3.7.6/progs/gle/texas.c deleted file mode 100644 index d26a41bf2..000000000 --- a/lib/glut-3.7.6/progs/gle/texas.c +++ /dev/null @@ -1,228 +0,0 @@ -/* - * texas.c - * - * FUNCTION: - * Draws a brand in the shape of Texas. Both the handle, and the - * cross-section of the brand are in the shape of Texas. - * - * Note that the contours are specified in clockwise order. - * Thus, enabling backfacing polygon removal will cause the front - * polygons to disappear. - * - * HISTORY: - * -- created by Linas Vepstas October 1991 - * -- heavily modified to draw more texas shapes, Feb 1993, Linas - * -- converted to use GLUT -- December 1995, Linas - * - */ - -/* required include files */ -#include -#include -#include -#include - -/* =========================================================== */ - -#define HNUM 4 -double brand_points[HNUM][3]; -float brand_colors [HNUM][3]; - -#define TSCALE 4.0 - -#define BPTS(x,y,z) { \ - brand_points[i][0] = TSCALE * (x); \ - brand_points[i][1] = TSCALE * (y); \ - brand_points[i][2] = TSCALE * (z); \ - i++; \ -} - -#define BCOLS(r,g,b) { \ - brand_colors[i][0] = (r); \ - brand_colors[i][1] = (g); \ - brand_colors[i][2] = (b); \ - i++; \ -} - -#define NUMPOINTS 18 -double tspine[NUMPOINTS][3]; -float tcolors [NUMPOINTS][3]; - -#define TPTS(x,y) { \ - tspine[i][0] = TSCALE * (x); \ - tspine[i][1] = TSCALE * (y); \ - tspine[i][2] = TSCALE * (0.0); \ - i++; \ -} - -#define TCOLS(r,g,b) { \ - tcolors[i][0] = (r); \ - tcolors[i][1] = (g); \ - tcolors[i][2] = (b); \ - i++; \ -} - -/* =========================================================== */ - -void init_spine (void) -{ - int i; - int ir, ig, ib; - float r, g, b; - - i=0; - TPTS (-1.5, 2.0); /* panhandle */ - TPTS (-0.75, 2.0); - TPTS (-0.75, 1.38); - TPTS (-0.5, 1.25); - TPTS (0.88, 1.12); - TPTS (1.0, 0.62); - TPTS (1.12, 0.1); - TPTS (0.5, -0.5); - TPTS (0.2, -1.12); /* corpus */ - TPTS (0.3, -1.5); /* brownsville */ - TPTS (-0.25, -1.45); - TPTS (-1.06, -0.3); - TPTS (-1.38, -0.3); - TPTS (-1.65, -0.6); - TPTS (-2.5, 0.5); /* midland */ - TPTS (-1.5, 0.5); - TPTS (-1.5, 2.0); /* panhandle */ - TPTS (-0.75, 2.0); - - ir = ig = ib = 0; - for (i=0; i -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=texas - 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 "texas.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 "texas.mak" CFG="texas - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "texas - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "texas - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "texas - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../../include/" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "texas - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../include/" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "texas - Win32 Release" -# Name "texas - Win32 Debug" -# Begin Source File - -SOURCE=.\mainsimple.c -# End Source File -# Begin Source File - -SOURCE=.\texas.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/gle/texture.c b/lib/glut-3.7.6/progs/gle/texture.c deleted file mode 100644 index b22b3e586..000000000 --- a/lib/glut-3.7.6/progs/gle/texture.c +++ /dev/null @@ -1,150 +0,0 @@ - -/* - * texture.c - * - * FUNCTION: - * texture mapping hack - * - * HISTORY: - * Created by Linas Vepstas April 1994 - */ - -#include -#include -#include "texture.h" - -Texture * current_texture = 0x0; - -Texture * planet_texture = 0x0; -Texture * check_texture = 0x0; -Texture * barberpole_texture = 0x0; -Texture * wild_tooth_texture = 0x0; - -/* ======================================================= */ - -#define TEXTURE_SIZE 256 - -Texture * create_planet_texture (void) { - int i, j; - Texture * tex; - unsigned char * pixmap; - - pixmap = (unsigned char *) malloc (TEXTURE_SIZE*TEXTURE_SIZE*3*sizeof (unsigned char)); - - for (i=0; i< TEXTURE_SIZE; i++) { - for (j=0; j< TEXTURE_SIZE; j++) { - - int mi = i - TEXTURE_SIZE/2; - int mj = j - TEXTURE_SIZE/2; - - pixmap [3*TEXTURE_SIZE*i + 3*j] = (100*mi*mi + 40*mj*mj) >> 8; - pixmap [3*TEXTURE_SIZE*i + 3*j + 1] = (10*mi*mi + 4*mj*mj) ; - pixmap [3*TEXTURE_SIZE*i + 3*j + 2] = (1000*mi*mi + 400*mj*mj) >> 16 ; - - } - } - - tex = (Texture *) malloc (sizeof (Texture)); - tex -> size = TEXTURE_SIZE; - tex -> pixmap = pixmap; - - return tex; -} - -/* ======================================================= */ - -Texture * create_check_texture (void) { - int i, j; - Texture * tex; - unsigned char * pixmap; - - pixmap = (unsigned char *) malloc (TEXTURE_SIZE*TEXTURE_SIZE*3*sizeof (unsigned char)); - - for (i=0; i< TEXTURE_SIZE; i++) { - for (j=0; j< TEXTURE_SIZE; j++) { - - pixmap [3*TEXTURE_SIZE*i + 3*j] = - 255 * ( (((i)/32) %2) == (((j)/32) %2)); - pixmap [3*TEXTURE_SIZE*i + 3*j + 1] = - 255 * ( (((i)/32) %2) == (((j)/32) %2)); - pixmap [3*TEXTURE_SIZE*i + 3*j + 2] = - 255 * ( (((i)/32) %2) == (((j)/32) %2)); - } - } - - tex = (Texture *) malloc (sizeof (Texture)); - tex -> size = TEXTURE_SIZE; - tex -> pixmap = pixmap; - - return tex; -} - -/* ======================================================= */ - -Texture * create_barberpole_texture (void) { - int i, j; - Texture * tex; - unsigned char * pixmap; - - pixmap = (unsigned char *) malloc (TEXTURE_SIZE*TEXTURE_SIZE*3*sizeof (unsigned char)); - - for (i=0; i< TEXTURE_SIZE; i++) { - for (j=0; j< TEXTURE_SIZE; j++) { - pixmap [3*TEXTURE_SIZE*i + 3*j] = 255 * (((i+j)/32) %2); - pixmap [3*TEXTURE_SIZE*i + 3*j + 1] = 255 * (((i+j)/32) %2); - pixmap [3*TEXTURE_SIZE*i + 3*j + 2] = 255 * (((i+j)/32) %2); - - } - } - - tex = (Texture *) malloc (sizeof (Texture)); - tex -> size = TEXTURE_SIZE; - tex -> pixmap = pixmap; - - return tex; -} - -/* ======================================================= */ - -Texture * create_wild_tooth_texture (void) { - int i, j; - Texture * tex; - unsigned char * pixmap; - - pixmap = (unsigned char *) malloc (TEXTURE_SIZE*TEXTURE_SIZE*3*sizeof (unsigned char)); - - for (i=0; i< TEXTURE_SIZE; i++) { - for (j=0; j< TEXTURE_SIZE; j++) { - - pixmap [3*TEXTURE_SIZE*i + 3*j] = - 255 * ( (((i+j)/32) %2) == (((i-j)/32) %2)); - pixmap [3*TEXTURE_SIZE*i + 3*j + 1] = - 255 * ( (((i+j)/32) %2) == (((i-j)/32) %2)); - pixmap [3*TEXTURE_SIZE*i + 3*j + 2] = - 255 * ( (((i+j)/32) %2) == (((i-j)/32) %2)); - - } - } - - tex = (Texture *) malloc (sizeof (Texture)); - tex -> size = TEXTURE_SIZE; - tex -> pixmap = pixmap; - - return tex; -} - -/* ======================================================= */ - -void setup_textures (void) { - - planet_texture = create_planet_texture (); - check_texture = create_check_texture (); - barberpole_texture = create_barberpole_texture (); - wild_tooth_texture = create_wild_tooth_texture (); - - current_texture = wild_tooth_texture; - current_texture = check_texture; -} - - -/* ================== END OF FILE ========================= */ diff --git a/lib/glut-3.7.6/progs/gle/texture.h b/lib/glut-3.7.6/progs/gle/texture.h deleted file mode 100644 index 402225d2d..000000000 --- a/lib/glut-3.7.6/progs/gle/texture.h +++ /dev/null @@ -1,26 +0,0 @@ - -/* - * texture.h - * - * FUNCTION: - * texture mapping hack - * - * HISTORY: - * Created by Linas Vepstas April 1994 - */ - -typedef struct { - int size; - unsigned char * pixmap; -} Texture; - -extern Texture * current_texture; - -extern Texture * planet_texture; -extern Texture * check_texture; -extern Texture * barberpole_texture; -extern Texture * wild_tooth_texture; - -extern void setup_textures (void); - -/* ================== END OF FILE ========================= */ diff --git a/lib/glut-3.7.6/progs/gle/trackball.c b/lib/glut-3.7.6/progs/gle/trackball.c deleted file mode 100644 index cce919b5a..000000000 --- a/lib/glut-3.7.6/progs/gle/trackball.c +++ /dev/null @@ -1,346 +0,0 @@ -#include -/* - * (c) Copyright 1993, 1994, 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. - */ -/* - * Trackball code: - * - * Implementation of a virtual trackball. - * Implemented by Gavin Bell, lots of ideas from Thant Tessman and - * the August '88 issue of Siggraph's "Computer Graphics," pp. 121-129. - * - * Vector manip code: - * - * Original code from: - * David M. Ciemiewicz, Mark Grossman, Henry Moreton, and Paul Haeberli - * - * Much mucking with by: - * Gavin Bell - */ -#if defined(_WIN32) -#pragma warning (disable:4244) /* disable bogus conversion warnings */ -#endif -#include -#include "trackball.h" - -/* - * This size should really be based on the distance from the center of - * rotation to the point on the object underneath the mouse. That - * point would then track the mouse as closely as possible. This is a - * simple example, though, so that is left as an Exercise for the - * Programmer. - */ -#define TRACKBALLSIZE (0.8f) - -/* - * Local function prototypes (not defined in trackball.h) - */ -static float tb_project_to_sphere(float, float, float); -static void normalize_quat(float [4]); - -void -vzero(float *v) -{ - v[0] = 0.0; - v[1] = 0.0; - v[2] = 0.0; -} - -void -vset(float *v, float x, float y, float z) -{ - v[0] = x; - v[1] = y; - v[2] = z; -} - -void -vsub(const float *src1, const float *src2, float *dst) -{ - dst[0] = src1[0] - src2[0]; - dst[1] = src1[1] - src2[1]; - dst[2] = src1[2] - src2[2]; -} - -void -vcopy(const float *v1, float *v2) -{ - register int i; - for (i = 0 ; i < 3 ; i++) - v2[i] = v1[i]; -} - -void -vcross(const float *v1, const float *v2, float *cross) -{ - float temp[3]; - - temp[0] = (v1[1] * v2[2]) - (v1[2] * v2[1]); - temp[1] = (v1[2] * v2[0]) - (v1[0] * v2[2]); - temp[2] = (v1[0] * v2[1]) - (v1[1] * v2[0]); - vcopy(temp, cross); -} - -float -vlength(const float *v) -{ - return sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]); -} - -void -vscale(float *v, float div) -{ - v[0] *= div; - v[1] *= div; - v[2] *= div; -} - -void -vnormal(float *v) -{ - vscale(v,1.0/vlength(v)); -} - -float -vdot(const float *v1, const float *v2) -{ - return v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2]; -} - -void -vadd(const float *src1, const float *src2, float *dst) -{ - dst[0] = src1[0] + src2[0]; - dst[1] = src1[1] + src2[1]; - dst[2] = src1[2] + src2[2]; -} - -/* - * Ok, simulate a track-ball. Project the points onto the virtual - * trackball, then figure out the axis of rotation, which is the cross - * product of P1 P2 and O P1 (O is the center of the ball, 0,0,0) - * Note: This is a deformed trackball-- is a trackball in the center, - * but is deformed into a hyperbolic sheet of rotation away from the - * center. This particular function was chosen after trying out - * several variations. - * - * It is assumed that the arguments to this routine are in the range - * (-1.0 ... 1.0) - */ -void -trackball(float q[4], float p1x, float p1y, float p2x, float p2y) -{ - float a[3]; /* Axis of rotation */ - float phi; /* how much to rotate about axis */ - float p1[3], p2[3], d[3]; - float t; - - if (p1x == p2x && p1y == p2y) { - /* Zero rotation */ - vzero(q); - q[3] = 1.0; - return; - } - - /* - * First, figure out z-coordinates for projection of P1 and P2 to - * deformed sphere - */ - vset(p1,p1x,p1y,tb_project_to_sphere(TRACKBALLSIZE,p1x,p1y)); - vset(p2,p2x,p2y,tb_project_to_sphere(TRACKBALLSIZE,p2x,p2y)); - - /* - * Now, we want the cross product of P1 and P2 - */ - vcross(p2,p1,a); - - /* - * Figure out how much to rotate around that axis. - */ - vsub(p1,p2,d); - t = vlength(d) / (2.0*TRACKBALLSIZE); - - /* - * Avoid problems with out-of-control values... - */ - if (t > 1.0) t = 1.0; - if (t < -1.0) t = -1.0; - phi = 2.0 * asin(t); - - axis_to_quat(a,phi,q); -} - -/* - * Given an axis and angle, compute quaternion. - */ -void -axis_to_quat(float a[3], float phi, float q[4]) -{ - vnormal(a); - vcopy(a,q); - vscale(q,sin(phi/2.0)); - q[3] = cos(phi/2.0); -} - -/* - * Project an x,y pair onto a sphere of radius r OR a hyperbolic sheet - * if we are away from the center of the sphere. - */ -static float -tb_project_to_sphere(float r, float x, float y) -{ - float d, t, z; - - d = sqrt(x*x + y*y); - if (d < r * 0.70710678118654752440) { /* Inside sphere */ - z = sqrt(r*r - d*d); - } else { /* On hyperbola */ - t = r / 1.41421356237309504880; - z = t*t / d; - } - return z; -} - -/* - * Given two rotations, e1 and e2, expressed as quaternion rotations, - * figure out the equivalent single rotation and stuff it into dest. - * - * This routine also normalizes the result every RENORMCOUNT times it is - * called, to keep error from creeping in. - * - * NOTE: This routine is written so that q1 or q2 may be the same - * as dest (or each other). - */ - -#define RENORMCOUNT 97 - -void -negate_quat(float q[4], float nq[4]) -{ - nq[0] = -q[0]; - nq[1] = -q[1]; - nq[2] = -q[2]; - nq[3] = q[3]; -} - -void -add_quats(float q1[4], float q2[4], float dest[4]) -{ - static int count=0; - float t1[4], t2[4], t3[4]; - float tf[4]; - -#if 0 -printf("q1 = %f %f %f %f\n", q1[0], q1[1], q1[2], q1[3]); -printf("q2 = %f %f %f %f\n", q2[0], q2[1], q2[2], q2[3]); -#endif - - vcopy(q1,t1); - vscale(t1,q2[3]); - - vcopy(q2,t2); - vscale(t2,q1[3]); - - vcross(q2,q1,t3); - vadd(t1,t2,tf); - vadd(t3,tf,tf); - tf[3] = q1[3] * q2[3] - vdot(q1,q2); - -#if 0 -printf("tf = %f %f %f %f\n", tf[0], tf[1], tf[2], tf[3]); -#endif - - dest[0] = tf[0]; - dest[1] = tf[1]; - dest[2] = tf[2]; - dest[3] = tf[3]; - - if (++count > RENORMCOUNT) { - count = 0; - normalize_quat(dest); - } -} - -/* - * Quaternions always obey: a^2 + b^2 + c^2 + d^2 = 1.0 - * If they don't add up to 1.0, dividing by their magnitued will - * renormalize them. - * - * Note: See the following for more information on quaternions: - * - * - Shoemake, K., Animating rotation with quaternion curves, Computer - * Graphics 19, No 3 (Proc. SIGGRAPH'85), 245-254, 1985. - * - Pletinckx, D., Quaternion calculus as a basic tool in computer - * graphics, The Visual Computer 5, 2-13, 1989. - */ -static void -normalize_quat(float q[4]) -{ - int i; - float mag; - - mag = sqrt(q[0]*q[0] + q[1]*q[1] + q[2]*q[2] + q[3]*q[3]); - for (i = 0; i < 4; i++) q[i] /= mag; -} - -/* - * Build a rotation matrix, given a quaternion rotation. - * - */ -void -build_rotmatrix(float m[4][4], float q[4]) -{ - m[0][0] = 1.0 - 2.0 * (q[1] * q[1] + q[2] * q[2]); - m[0][1] = 2.0 * (q[0] * q[1] - q[2] * q[3]); - m[0][2] = 2.0 * (q[2] * q[0] + q[1] * q[3]); - m[0][3] = 0.0; - - m[1][0] = 2.0 * (q[0] * q[1] + q[2] * q[3]); - m[1][1]= 1.0 - 2.0 * (q[2] * q[2] + q[0] * q[0]); - m[1][2] = 2.0 * (q[1] * q[2] - q[0] * q[3]); - m[1][3] = 0.0; - - m[2][0] = 2.0 * (q[2] * q[0] - q[1] * q[3]); - m[2][1] = 2.0 * (q[1] * q[2] + q[0] * q[3]); - m[2][2] = 1.0 - 2.0 * (q[1] * q[1] + q[0] * q[0]); - m[2][3] = 0.0; - - m[3][0] = 0.0; - m[3][1] = 0.0; - m[3][2] = 0.0; - m[3][3] = 1.0; -} - diff --git a/lib/glut-3.7.6/progs/gle/trackball.h b/lib/glut-3.7.6/progs/gle/trackball.h deleted file mode 100644 index 61a1d8c35..000000000 --- a/lib/glut-3.7.6/progs/gle/trackball.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - * (c) Copyright 1993, 1994, 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. - */ -/* - * trackball.h - * A virtual trackball implementation - * Written by Gavin Bell for Silicon Graphics, November 1988. - */ - -/* - * Pass the x and y coordinates of the last and current positions of - * the mouse, scaled so they are from (-1.0 ... 1.0). - * - * The resulting rotation is returned as a quaternion rotation in the - * first paramater. - */ -void -trackball(float q[4], float p1x, float p1y, float p2x, float p2y); - -void -negate_quat(float *q, float *qn); - -/* - * Given two quaternions, add them together to get a third quaternion. - * Adding quaternions to get a compound rotation is analagous to adding - * translations to get a compound translation. When incrementally - * adding rotations, the first argument here should be the new - * rotation, the second and third the total rotation (which will be - * over-written with the resulting new total rotation). - */ -void -add_quats(float *q1, float *q2, float *dest); - -/* - * A useful function, builds a rotation matrix in Matrix based on - * given quaternion. - */ -void -build_rotmatrix(float m[4][4], float q[4]); - -/* - * This function computes a quaternion based on an axis (defined by - * the given vector) and an angle about which to rotate. The angle is - * expressed in radians. The result is put into the third argument. - */ -void -axis_to_quat(float a[3], float phi, float q[4]); - diff --git a/lib/glut-3.7.6/progs/gle/transport.c b/lib/glut-3.7.6/progs/gle/transport.c deleted file mode 100644 index e634add06..000000000 --- a/lib/glut-3.7.6/progs/gle/transport.c +++ /dev/null @@ -1,379 +0,0 @@ -/* - * transport.c - * - * FUNCTION: - * Illustrate principle of shearing vs. parallel transport. - * - * HISTORY: - * -- created by Linas Vepstas October 1991 - * -- C++ and OO playing around Linas Vepstas June 1993 - * -- converted to use GLUT -- December 1995, Linas - * - */ - -/* required include files */ -#include -#include -#include -#include - -/* =========================================================== */ - -#define SET_RGB(rgb,r,g,b) { \ - rgb[0]=r; rgb[1]=g; rgb[2]=b; \ -} - -typedef struct _material { - - /* public data areas */ - float emission[3]; - float ambient[3]; - float diffuse[3]; - float specular[3]; - float shininess; - -} Material; - -#define SET_EMIS(self,r,g,b) { SET_RGB(self->emission, r,g,b); } -#define SET_AMB(self,r,g,b) { SET_RGB(self->ambient, r,g,b); } -#define SET_DIFF(self,r,g,b) { SET_RGB(self->diffuse, r,g,b); } -#define SET_SPEC(self,r,g,b) { SET_RGB(self->specular, r,g,b); } - -/* =========================================================== */ - -#ifdef NOTNOW -class goPolyline { - public: - int dimension; - int numPoints; - double * pts; - - private: - int nfree; - - public: - goPolyline (); // by default, construct 3D polyline - goPolyline (int); // construct arbitrary dimension polyline - void Print (); - void AddPoint (double x, double y); - void AddNormal (double x, double y); - void MakeFacetNormal (); -}; -#endif /* NOTNOW */ - -typedef double SVec[2]; - -typedef struct contour { - - /* public data areas */ - int numContourPoints; - int numContourNorms; - SVec * pts; - SVec * norms; - double up[3]; - -} Contour; - -#define pfree numContourPoints -#define nfree numContourNorms - -#define NEW_CONTOUR(self) { \ - self -> pts = (SVec *) malloc (100*sizeof (double)); \ - self -> norms = (SVec *) malloc (100*sizeof (double)); \ - self -> pfree = 0; \ - self -> nfree = 0; \ -} - -#define ADD_POINT(self,x,y) { \ - self -> pts[self->pfree][0] = x; \ - self -> pts[self->pfree][1] = y; \ - self->pfree ++; \ -} - -#define ADD_NORMAL(self,x,y) { \ - self -> norms[self->nfree][0] = x; \ - self -> norms[self->nfree][1] = y; \ - self->nfree ++; \ -} - -#define MAKE_NORMAL(self) { \ - float dx, dy, w; \ - dx = self -> pts [self->pfree -1][0]; \ - dx -= self -> pts [self->pfree -2][0]; \ - dy = self -> pts [self->pfree -1][1]; \ - dy -= self -> pts [self->pfree -2][1]; \ - w = 1.0 / sqrt (dx*dx+dy*dy); \ - dx *= w; \ - dy *= w; \ - self -> norms[self->nfree][0] = -dy; \ - self -> norms[self->nfree][1] = dx; \ - self -> nfree ++; \ -} - -/* =========================================================== */ -/* class gleExtrustion */ - -typedef struct _extrusion { - Material *material; /* material description */ - Contour *contour; /* 2D contour */ - - double radius; /* for polycylinder, torus */ - double startRadius; /* spiral starts in x-y plane */ - double drdTheta; /* change in radius per revolution */ - double startZ; /* starting z value */ - double dzdTheta; /* change in Z per revolution */ - double startXform[2][3]; /* starting contour affine xform */ - double dXdTheta[2][3]; /* tangent change xform per revoln */ - double startTheta; /* start angle in x-y plane */ - double sweepTheta; /* degrees to spiral around */ - -} Extrusion; - -#define NEW_EXTRUSION(self) { \ - self -> material = (Material *) malloc (sizeof (Material)); \ - self -> contour = (Contour *) malloc (sizeof (Contour)); \ - NEW_CONTOUR (self->contour); \ -} - - -/* =========================================================== */ -Extrusion *arrow = NULL; - -/* =========================================================== */ -float lastx=0; -float lasty=0; - -void draw_arrow (void) { - - /* attach the mouse */ - arrow->sweepTheta = 180.0 + 0.13* lastx; - arrow->dzdTheta = 0.03 * (lasty+10.0); - - glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT, arrow->material->ambient); - glMaterialfv (GL_FRONT_AND_BACK, GL_DIFFUSE, arrow->material->diffuse); - glMaterialfv (GL_FRONT_AND_BACK, GL_SPECULAR, arrow->material->specular); - glMaterialf (GL_FRONT_AND_BACK, GL_SHININESS, 2.0); - -#ifdef IBM_GL_32 - rotate (-750, 'x'); - rotate (-100, 'z'); - - /* first, draw with the routine that uses a local coordinate - * system with torsion */ - translate (-0.5, -0.5, 3.2); - - lathe (arrow->contour->numContourPoints, - arrow->contour->pts, - arrow->contour->norms, - arrow->contour->up, - arrow->startRadius, /* donut radius */ - arrow->drdTheta, /* change in donut radius per revolution */ - arrow->startZ, /* start z value */ - arrow->dzdTheta, /* change in Z per revolution */ - NULL, - NULL, - arrow->startTheta, /* start angle */ - arrow->sweepTheta); /* sweep angle */ - - draw_axes (); - - /* next, draw with a routine that uses parallel transport */ - translate (0.0, 0.0, -5.4); - lmbind (MATERIAL, 88); - cpack (0x339999); - spiral (arrow->contour->numContourPoints, - arrow->contour->pts, - arrow->contour->norms, - arrow->contour->up, - arrow->startRadius, /* donut radius */ - arrow->drdTheta, /* change in donut radius per revolution */ - arrow->startZ, /* start z value */ - arrow->dzdTheta, /* change in Z per revolution */ - NULL, - NULL, - arrow->startTheta, /* start angle */ - arrow->sweepTheta); /* sweep angle */ - -#endif - -#define OPENGL_10 -#ifdef OPENGL_10 - glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - /* set up some matrices so that the object spins with the mouse */ - glPushMatrix (); - glTranslatef (0.0, 0.0, -80.0); - glRotated (-75.0, 1.0, 0.0, 0.0); - glRotated (-10.0, 0.0, 0.0, 1.0); - - /* first, draw with the routine that uses a local coordinate - * system with torsion */ - glTranslated (-0.5, -0.5, 4.2); - - gleLathe (arrow->contour->numContourPoints, - arrow->contour->pts, - arrow->contour->norms, - arrow->contour->up, - arrow->startRadius, /* donut radius */ - arrow->drdTheta, /* change in donut radius per revolution */ - arrow->startZ, /* start z value */ - arrow->dzdTheta, /* change in Z per revolution */ - NULL, - NULL, - arrow->startTheta, /* start angle */ - arrow->sweepTheta); /* sweep angle */ - - /* next, draw with a routine that uses parallel transport */ - glTranslated (0.0, 0.0, -8.4); -/* - lmbind (MATERIAL, 88); - cpack (0x339999); -*/ - gleSpiral (arrow->contour->numContourPoints, - arrow->contour->pts, - arrow->contour->norms, - arrow->contour->up, - arrow->startRadius, /* donut radius */ - arrow->drdTheta, /* change in donut radius per revolution */ - arrow->startZ, /* start z value */ - arrow->dzdTheta, /* change in Z per revolution */ - NULL, - NULL, - arrow->startTheta, /* start angle */ - arrow->sweepTheta); /* sweep angle */ - - glPopMatrix (); - glutSwapBuffers (); -#endif -} - -/* =========================================================== */ - -#define SCALE 1.80 -#define PT(x,y) { ADD_POINT (arrow->contour, SCALE*x, SCALE*y); } -#define NORM(x,y) { ADD_NORMAL (arrow->contour, x, y); } -#define FACET { MAKE_NORMAL (arrow->contour); } - -/* =========================================================== */ - -void init_arrow (void) -{ - int style; - - arrow = (Extrusion *) malloc (sizeof (Extrusion)); - NEW_EXTRUSION (arrow); - - /* define color of arrow */ - SET_AMB (arrow->material, 0.15, 0.15, 0.15); - SET_DIFF (arrow->material, 0.15, 0.55, 0.55); - SET_SPEC (arrow->material, 0.4, 0.4, 0.4); - - /* define lathe/spiral parameters */ - arrow -> startRadius = 7.3; - arrow -> drdTheta = 0.0; - arrow -> startZ = 0.0; - arrow -> dzdTheta = 0.0; - arrow -> startTheta = 0.0; - arrow -> sweepTheta = 90.0; - - /* define arrow contour */ - PT (-1.0, -2.0); - PT (-1.0, 0.0); FACET; - PT (-2.0, 0.0); FACET; - PT (0.0, 2.0); FACET; - PT (2.0, 0.0); FACET; - PT (1.0, 0.0); FACET; - PT (1.0, -2.0); FACET; - - /* define contour up vector */ - arrow->contour->up[0] = 0.0; - arrow->contour->up[1] = 0.0; - arrow->contour->up[2] = 1.0; - - /* set the initial join style */ - style = 0x0; - style |= TUBE_JN_CAP; - style |= TUBE_NORM_PATH_EDGE; - style |= TUBE_NORM_FACET; - style |= TUBE_CONTOUR_CLOSED; - gleSetJoinStyle (style); - -} - -/* =========================================================== */ - -/* get notified of mouse motions */ -void MouseMotion (int x, int y) -{ - lastx = x; - lasty = y; - glutPostRedisplay (); -} - -/* ARGSUSED */ -void JoinStyle (int msg) -{ - exit (0); -} - -/* set up a light */ -GLfloat lightOnePosition[] = {40.0, 40, 100.0, 0.0}; -GLfloat lightOneColor[] = {0.54, 0.54, 0.54, 1.0}; - -GLfloat lightTwoPosition[] = {-40.0, 40, 100.0, 0.0}; -GLfloat lightTwoColor[] = {0.54, 0.54, 0.54, 1.0}; - -GLfloat lightThreePosition[] = {40.0, 40, -100.0, 0.0}; -GLfloat lightThreeColor[] = {0.54, 0.54, 0.54, 1.0}; - -int -main (int argc, char * argv[]) { - - /* initialize glut */ - glutInit (&argc, argv); - glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); - glutCreateWindow ("transport"); - glutDisplayFunc (draw_arrow); - glutMotionFunc (MouseMotion); - - /* create popup menu */ - glutCreateMenu (JoinStyle); - glutAddMenuEntry ("Exit", 99); - glutAttachMenu (GLUT_MIDDLE_BUTTON); - - /* initialize GL */ - glClearDepth (1.0); - glEnable (GL_DEPTH_TEST); - glClearColor (0.0, 0.0, 0.0, 0.0); - glShadeModel (GL_SMOOTH); - - glMatrixMode (GL_PROJECTION); - /* roughly, measured in centimeters */ - glFrustum (-9.0, 9.0, -9.0, 9.0, 50.0, 150.0); - glMatrixMode(GL_MODELVIEW); - - /* initialize lighting */ - glLightfv (GL_LIGHT0, GL_POSITION, lightOnePosition); - glLightfv (GL_LIGHT0, GL_AMBIENT, lightOneColor); - glLightfv (GL_LIGHT0, GL_DIFFUSE, lightOneColor); - glLightfv (GL_LIGHT0, GL_SPECULAR, lightOneColor); - glEnable (GL_LIGHT0); - glLightfv (GL_LIGHT1, GL_POSITION, lightTwoPosition); - glLightfv (GL_LIGHT1, GL_DIFFUSE, lightTwoColor); - glLightfv (GL_LIGHT1, GL_AMBIENT, lightTwoColor); - glEnable (GL_LIGHT1); - glLightfv (GL_LIGHT2, GL_POSITION, lightThreePosition); - glLightfv (GL_LIGHT2, GL_DIFFUSE, lightThreeColor); - glLightfv (GL_LIGHT2, GL_AMBIENT, lightThreeColor); - glEnable (GL_LIGHT2); - glEnable (GL_LIGHTING); - glEnable (GL_NORMALIZE); - /* glColorMaterial (GL_FRONT_AND_BACK, GL_DIFFUSE); */ - /* glEnable (GL_COLOR_MATERIAL); */ - - init_arrow (); - - glutMainLoop (); - return 0; /* ANSI C requires main to return int. */ -} -/* ================== END OF FILE ================== */ diff --git a/lib/glut-3.7.6/progs/gle/transport.dsp b/lib/glut-3.7.6/progs/gle/transport.dsp deleted file mode 100644 index 3508e7aa0..000000000 --- a/lib/glut-3.7.6/progs/gle/transport.dsp +++ /dev/null @@ -1,89 +0,0 @@ -# Microsoft Developer Studio Project File - Name="transport" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=transport - 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 "transport.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 "transport.mak" CFG="transport - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "transport - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "transport - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "transport - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../../include/" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "transport - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../include/" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "transport - Win32 Release" -# Name "transport - Win32 Debug" -# Begin Source File - -SOURCE=.\transport.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/gle/twistoid.c b/lib/glut-3.7.6/progs/gle/twistoid.c deleted file mode 100644 index 154ceaa96..000000000 --- a/lib/glut-3.7.6/progs/gle/twistoid.c +++ /dev/null @@ -1,211 +0,0 @@ -/* - * twistoid.c - * - * FUNCTION: - * Show extrusion of open contours. Also, show how torsion is applied. - * - * HISTORY: - * -- linas Vepstas October 1991 - * -- heavily modified to draw corrugated surface, Feb 1993, Linas - * -- modified to demo twistoid March 1993 - * -- port to glut Linas Vepstas March 1995 - */ - -/* required include files */ -#include -#include -#include -#include - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -extern float lastx; -extern float lasty; - -#define OPENGL_10 -/* =========================================================== */ - -#define NUM_TOID1_PTS 5 -double toid1_points[NUM_TOID1_PTS][3]; -float toid1_colors [NUM_TOID1_PTS][3]; -double toid1_twists [NUM_TOID1_PTS]; - -#define TSCALE (6.0) - -#define TPTS(x,y) { \ - toid1_points[i][0] = TSCALE * (x); \ - toid1_points[i][1] = TSCALE * (y); \ - toid1_points[i][2] = TSCALE * (0.0); \ - i++; \ -} - -#define TCOLS(r,g,b) { \ - toid1_colors[i][0] = (r); \ - toid1_colors[i][1] = (g); \ - toid1_colors[i][2] = (b); \ - i++; \ -} - -#define TXZERO() { \ - toid1_twists[i] = 0.0; \ - i++; \ -} - -void init_toid1_line (void) -{ - int i; - - i=0; - TPTS (-1.1, 0.0); - TPTS (-1.0, 0.0); - TPTS (0.0, 0.0); - TPTS (1.0, 0.0); - TPTS (1.1, 0.0); - - i=0; - TCOLS (0.8, 0.8, 0.5); - TCOLS (0.8, 0.4, 0.5); - TCOLS (0.8, 0.8, 0.3); - TCOLS (0.4, 0.4, 0.5); - TCOLS (0.8, 0.8, 0.5); - - i=0; - TXZERO (); - TXZERO (); - TXZERO (); - TXZERO (); - TXZERO (); -} - -/* =========================================================== */ - -#define SCALE 0.6 -#define TWIST(x,y) { \ - double ax, ay, alen; \ - twistation[i][0] = SCALE * (x); \ - twistation[i][1] = SCALE * (y); \ - if (i!=0) { \ - ax = twistation[i][0] - twistation[i-1][0]; \ - ay = twistation[i][1] - twistation[i-1][1]; \ - alen = 1.0 / sqrt (ax*ax + ay*ay); \ - ax *= alen; ay *= alen; \ - twist_normal [i-1][0] = - ay; \ - twist_normal [i-1][1] = ax; \ - } \ - i++; \ -} - -#define NUM_TWIS_PTS (20) - -double twistation [NUM_TWIS_PTS][2]; -double twist_normal [NUM_TWIS_PTS][2]; - -void init_tripples (void) -{ - int i; - double angle; - double co, si; - - /* outline of extrusion */ - i=0; - /* first, draw a semi-curcular "hump" */ - while (i< 11) { - angle = M_PI * ((double) i) / 10.0; - co = cos (angle); - si = sin (angle); - TWIST ((-7.0 -3.0*co), 1.8*si); - } - - /* now, a zig-zag corrugation */ - while (i< NUM_TWIS_PTS) { - TWIST ((-10.0 +(double) i), 0.0); - TWIST ((-9.5 +(double) i), 1.0); - } -} - - -/* =========================================================== */ - -#define V3F(x,y,z) { \ - float vvv[3]; \ - vvv[0] = x; vvv[1] = y; vvv[2] = z; v3f (vvv); \ -} - -#define N3F(x,y,z) { \ - float nnn[3]; \ - nnn[0] = x; nnn[1] = y; nnn[2] = z; n3f (nnn); \ -} - -/* =========================================================== */ - -void DrawStuff (void) { - int i; - - toid1_twists[2] = (lastx-121.0) / 8.0; - - i=3; -/* - TPTS (1.0, lasty /400.0); - TPTS (1.1, 1.1 * lasty / 400.0); -*/ - TPTS (1.0, -(lasty-121.0) /200.0); - TPTS (1.1, -1.1 * (lasty-121.0) / 200.0); - -#ifdef IBM_GL_32 - rotate (230, 'x'); - rotate (230, 'y'); - scale (1.8, 1.8, 1.8); - - if (mono_color) { - RGBcolor (178, 178, 204); - twist_extrusion (NUM_TWIS_PTS, twistation, twist_normal, - NULL, NUM_TOID1_PTS, toid1_points, NULL, toid1_twists); - } else { - twist_extrusion (NUM_TWIS_PTS, twistation, twist_normal, - NULL, NUM_TOID1_PTS, toid1_points, toid1_colors, toid1_twists); - } -#endif - -#ifdef OPENGL_10 - glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - /* set up some matrices so that the object spins with the mouse */ - glPushMatrix (); - glTranslatef (0.0, 0.0, -80.0); - glRotated (43.0, 1.0, 0.0, 0.0); - glRotated (43.0, 0.0, 1.0, 0.0); - glScaled (1.8, 1.8, 1.8); - gleTwistExtrusion (NUM_TWIS_PTS, twistation, twist_normal, - NULL, NUM_TOID1_PTS, toid1_points, NULL, toid1_twists); - glPopMatrix (); - glutSwapBuffers (); -#endif - -} - -/* =========================================================== */ - -void InitStuff (void) { - int js; - - init_toid1_line (); - init_tripples (); - -#ifdef IBM_GL_32 - js = getjoinstyle (); - js &= ~TUBE_CONTOUR_CLOSED; - setjoinstyle (js); -#endif - -#ifdef OPENGL_10 - js = gleGetJoinStyle (); - js &= ~TUBE_CONTOUR_CLOSED; - gleSetJoinStyle (js); -#endif - -} - -/* ------------------ end of file -------------------- */ diff --git a/lib/glut-3.7.6/progs/gle/twistoid.dsp b/lib/glut-3.7.6/progs/gle/twistoid.dsp deleted file mode 100644 index 41d71e9b4..000000000 --- a/lib/glut-3.7.6/progs/gle/twistoid.dsp +++ /dev/null @@ -1,93 +0,0 @@ -# Microsoft Developer Studio Project File - Name="twistoid" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=twistoid - 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 "twistoid.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 "twistoid.mak" CFG="twistoid - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "twistoid - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "twistoid - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "twistoid - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../../include/" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "twistoid - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../include/" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "twistoid - Win32 Release" -# Name "twistoid - Win32 Debug" -# Begin Source File - -SOURCE=.\mainsimple.c -# End Source File -# Begin Source File - -SOURCE=.\twistoid.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/gle/twoid.c b/lib/glut-3.7.6/progs/gle/twoid.c deleted file mode 100644 index 9ba669357..000000000 --- a/lib/glut-3.7.6/progs/gle/twoid.c +++ /dev/null @@ -1,329 +0,0 @@ -/* - * twistoid.c - * - * FUNCTION: - * Show extrusion of open contours. Also, show how torsion is applied. - * - * HISTORY: - * -- linas Vepstas October 1991 - * -- heavily modified to draw corrugated surface, Feb 1993, Linas - * -- modified to demo twistoid March 1993 - * -- port to glut Linas Vepstas March 1995 - */ - -/* required include files */ -#include -#include -#include -#include - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -static int mx = 121; -static int my = 121; - -#define OPENGL_10 -/* =========================================================== */ - -#define NUM_TOID1_PTS 5 -double toid1_points[NUM_TOID1_PTS][3]; -float toid1_colors [NUM_TOID1_PTS][3]; -double toid1_twists [NUM_TOID1_PTS]; - -#define TSCALE (6.0) - -#define TPTS(x,y) { \ - toid1_points[i][0] = TSCALE * (x); \ - toid1_points[i][1] = TSCALE * (y); \ - toid1_points[i][2] = TSCALE * (0.0); \ - i++; \ -} - -#define TCOLS(r,g,b) { \ - toid1_colors[i][0] = (r); \ - toid1_colors[i][1] = (g); \ - toid1_colors[i][2] = (b); \ - i++; \ -} - -#define TXZERO() { \ - toid1_twists[i] = 0.0; \ - i++; \ -} - -void init_toid1_line (void) -{ - int i; - - i=0; - TPTS (-1.1, 0.0); - TPTS (-1.0, 0.0); - TPTS (0.0, 0.0); - TPTS (1.0, 0.0); - TPTS (1.1, 0.0); - - i=0; - TCOLS (0.8, 0.8, 0.5); - TCOLS (0.8, 0.4, 0.5); - TCOLS (0.8, 0.8, 0.3); - TCOLS (0.4, 0.4, 0.5); - TCOLS (0.8, 0.8, 0.5); - - i=0; - TXZERO (); - TXZERO (); - TXZERO (); - TXZERO (); - TXZERO (); -} - -/* =========================================================== */ - -#define SCALE 0.6 -#define TWIST(x,y) { \ - double ax, ay, alen; \ - twistation[i][0] = SCALE * (x); \ - twistation[i][1] = SCALE * (y); \ - if (i!=0) { \ - ax = twistation[i][0] - twistation[i-1][0]; \ - ay = twistation[i][1] - twistation[i-1][1]; \ - alen = 1.0 / sqrt (ax*ax + ay*ay); \ - ax *= alen; ay *= alen; \ - twist_normal [i-1][0] = - ay; \ - twist_normal [i-1][1] = ax; \ - } \ - i++; \ -} - -#define NUM_TWIS_PTS (20) - -double twistation [NUM_TWIS_PTS][2]; -double twist_normal [NUM_TWIS_PTS][2]; - -void init_tripples (void) -{ - int i; - double angle; - double co, si; - - /* outline of extrusion */ - i=0; - /* first, draw a semi-curcular "hump" */ - while (i< 11) { - angle = M_PI * ((double) i) / 10.0; - co = cos (angle); - si = sin (angle); - TWIST ((-7.0 -3.0*co), 1.8*si); - } - - /* now, a zig-zag corrugation */ - while (i< NUM_TWIS_PTS) { - TWIST ((-10.0 +(double) i), 0.0); - TWIST ((-9.5 +(double) i), 1.0); - } -} - - -/* =========================================================== */ - -#define V3F(x,y,z) { \ - float vvv[3]; \ - vvv[0] = x; vvv[1] = y; vvv[2] = z; v3f (vvv); \ -} - -#define N3F(x,y,z) { \ - float nnn[3]; \ - nnn[0] = x; nnn[1] = y; nnn[2] = z; n3f (nnn); \ -} - -/* =========================================================== */ - -void draw_twist (void) { - int i; - - toid1_twists[2] = (double) (mx-121) / 8.0; - - i=3; -/* - TPTS (1.0, ((double)my) /400.0); - TPTS (1.1, 1.1 * ((double)my) / 400.0); -*/ - TPTS (1.0, -((double)(my-121)) /200.0); - TPTS (1.1, -1.1 * ((double)(my-121)) / 200.0); - -#ifdef IBM_GL_32 - rotate (230, 'x'); - rotate (230, 'y'); - scale (1.8, 1.8, 1.8); - - if (mono_color) { - RGBcolor (178, 178, 204); - twist_extrusion (NUM_TWIS_PTS, twistation, twist_normal, - NULL, NUM_TOID1_PTS, toid1_points, NULL, toid1_twists); - } else { - twist_extrusion (NUM_TWIS_PTS, twistation, twist_normal, - NULL, NUM_TOID1_PTS, toid1_points, toid1_colors, toid1_twists); - } -#endif - -#ifdef OPENGL_10 - glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - /* set up some matrices so that the object spins with the mouse */ - glPushMatrix (); - glTranslatef (0.0, 0.0, -80.0); - glRotated (43.0, 1.0, 0.0, 0.0); - glRotated (43.0, 0.0, 1.0, 0.0); - glScaled (1.8, 1.8, 1.8); - gleTwistExtrusion (NUM_TWIS_PTS, twistation, twist_normal, - NULL, NUM_TOID1_PTS, toid1_points, NULL, toid1_twists); - glPopMatrix (); - glutSwapBuffers (); -#endif - -} - -/* =========================================================== */ - -void init_twist (void) -{ - int js; - - init_toid1_line (); - init_tripples (); - -#ifdef IBM_GL_32 - js = getjoinstyle (); - js &= ~TUBE_CONTOUR_CLOSED; - setjoinstyle (js); -#endif - -#ifdef OPENGL_10 - js = gleGetJoinStyle (); - js &= ~TUBE_CONTOUR_CLOSED; - gleSetJoinStyle (js); -#endif - -} - -/* get notified of mouse motions */ -void MouseMotion (int x, int y) -{ - mx = x; - my = y; - glutPostRedisplay (); -} - -void JoinStyle (int msg) -{ - int style; - /* get the current joint style */ - style = gleGetJoinStyle (); - - /* there are four different join styles, - * and two different normal vector styles */ - switch (msg) { - case 0: - style &= ~TUBE_JN_MASK; - style |= TUBE_JN_RAW; - break; - case 1: - style &= ~TUBE_JN_MASK; - style |= TUBE_JN_ANGLE; - break; - case 2: - style &= ~TUBE_JN_MASK; - style |= TUBE_JN_CUT; - break; - case 3: - style &= ~TUBE_JN_MASK; - style |= TUBE_JN_ROUND; - break; - - case 20: - style &= ~TUBE_NORM_MASK; - style |= TUBE_NORM_FACET; - break; - case 21: - style &= ~TUBE_NORM_MASK; - style |= TUBE_NORM_EDGE; - break; - - case 99: - exit (0); - - default: - break; - } - gleSetJoinStyle (style); - glutPostRedisplay (); -} - -/* set up a light */ -GLfloat lightOnePosition[] = {40.0, 40, 100.0, 0.0}; -GLfloat lightOneColor[] = {0.89, 0.89, 0.89, 1.0}; - -GLfloat lightTwoPosition[] = {-40.0, 40, 100.0, 0.0}; -GLfloat lightTwoColor[] = {0.89, 0.89, 0.89, 1.0}; - -GLfloat material[] = {0.93, 0.79, 0.93, 1.0}; - -int -main (int argc, char * argv[]) { - - /* initialize glut */ - glutInit (&argc, argv); - glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); - glutCreateWindow ("twistoid"); - glutDisplayFunc (draw_twist); - glutMotionFunc (MouseMotion); - - /* create popup menu */ - glutCreateMenu (JoinStyle); - glutAddMenuEntry ("Raw Join Style", 0); - glutAddMenuEntry ("Angle Join Style", 1); - glutAddMenuEntry ("Cut Join Style", 2); - glutAddMenuEntry ("Round Join Style", 3); - glutAddMenuEntry ("------------------", 9999); - glutAddMenuEntry ("Facet Normal Vectors", 20); - glutAddMenuEntry ("Edge Normal Vectors", 21); - glutAddMenuEntry ("------------------", 9999); - glutAddMenuEntry ("Exit", 99); - glutAttachMenu (GLUT_MIDDLE_BUTTON); - - /* initialize GL */ - glClearDepth (1.0); - glEnable (GL_DEPTH_TEST); - glClearColor (0.2, 0.2, 0.2, 0.0); - glShadeModel (GL_SMOOTH); - - glMatrixMode (GL_PROJECTION); - /* roughly, measured in centimeters */ - glFrustum (-9.0, 9.0, -9.0, 9.0, 50.0, 150.0); - glMatrixMode(GL_MODELVIEW); - - /* initialize lighting */ - glMaterialfv (GL_FRONT_AND_BACK, GL_DIFFUSE, material); - glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT, material); - glLightfv (GL_LIGHT0, GL_POSITION, lightOnePosition); - glLightfv (GL_LIGHT0, GL_DIFFUSE, lightOneColor); - glLightfv (GL_LIGHT0, GL_SPECULAR, lightOneColor); - glEnable (GL_LIGHT0); - glLightfv (GL_LIGHT1, GL_POSITION, lightTwoPosition); - glLightfv (GL_LIGHT1, GL_DIFFUSE, lightTwoColor); - glEnable (GL_LIGHT1); - glEnable (GL_LIGHTING); -/* - glColorMaterial (GL_FRONT_AND_BACK, GL_DIFFUSE); - glEnable (GL_COLOR_MATERIAL); -*/ - - init_twist (); - - glutMainLoop (); - return 0; /* ANSI C requires main to return int. */ -} -/* ------------------ end of file -------------------- */ diff --git a/lib/glut-3.7.6/progs/gle/twoid.dsp b/lib/glut-3.7.6/progs/gle/twoid.dsp deleted file mode 100644 index de687771f..000000000 --- a/lib/glut-3.7.6/progs/gle/twoid.dsp +++ /dev/null @@ -1,89 +0,0 @@ -# Microsoft Developer Studio Project File - Name="twoid" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=twoid - 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 "twoid.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 "twoid.mak" CFG="twoid - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "twoid - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "twoid - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "twoid - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../../include/" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "twoid - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../include/" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "twoid - Win32 Release" -# Name "twoid - Win32 Debug" -# Begin Source File - -SOURCE=.\twoid.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/inventor/Imakefile b/lib/glut-3.7.6/progs/inventor/Imakefile deleted file mode 100644 index 7d6e946f1..000000000 --- a/lib/glut-3.7.6/progs/inventor/Imakefile +++ /dev/null @@ -1,22 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1994. */ - -#include "../../Glut.cf" - -#undef CCsuf -#define CCsuf c++ - -TARGETS = glutduck globe - -DEPEND_DEFINES = $(CXXEXTRA_INCLUDES) - -SRCS = glutduck.c++ - -AllTarget($(TARGETS)) - -SimpleGlutInventorProgramTarget(glutduck) -SimpleGlutInventorProgramTarget(globe) - -NormalCplusplusObjectRule() - -DependTarget() diff --git a/lib/glut-3.7.6/progs/inventor/duck.iv b/lib/glut-3.7.6/progs/inventor/duck.iv deleted file mode 100644 index 09e984acbce2cf6bc4b81c0c57e48fde66034ab3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22712 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 -#include -#include - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -int W = 300, H = 300; -int spinning = 0; -GLubyte *image = NULL; -SoSeparator *root; -SoRotationXYZ *globeSpin; -float angle = 0.0; -int moving = 0; -int begin; - -void -reshape(int w, int h) -{ - glViewport(0, 0, w, h); - W = w; - H = h; - if (image) - free(image); - image = (GLubyte *) malloc(W * H * 3); -} - -void -renderScene(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - SbViewportRegion myViewport(W, H); - SoGLRenderAction myRenderAction(myViewport); - myRenderAction.apply(root); -} - -void -redraw(void) -{ - renderScene(); - glutSwapBuffers(); -} - -void -globeScene(void) -{ - root = new SoSeparator; - root->ref(); - - // Add a camera and light - SoPerspectiveCamera *myCamera = new SoPerspectiveCamera; - myCamera->position.setValue(0., 0., 2.2); - myCamera->heightAngle = M_PI/2.5; - myCamera->nearDistance = 0.5; - myCamera->farDistance = 10.0; - root->addChild(myCamera); - root->addChild(new SoDirectionalLight); - - SoRotationXYZ *globalRotXYZ = new SoRotationXYZ; - globalRotXYZ->axis = SoRotationXYZ::X; - globalRotXYZ->angle = M_PI/9; - root->addChild(globalRotXYZ); - - // Set up the globe transformations - globeSpin = new SoRotationXYZ; - root->addChild(globeSpin); - globeSpin->angle = angle; - globeSpin->axis = SoRotationXYZ::Y; // rotate about Y axis - - // Add the globe, a sphere with a texture map. - // Put it within a separator. - SoSeparator *sphereSep = new SoSeparator; - SoTexture2 *myTexture2 = new SoTexture2; - SoComplexity *sphereComplexity = new SoComplexity; - sphereComplexity->value = 0.55; - root->addChild(sphereSep); - sphereSep->addChild(myTexture2); - sphereSep->addChild(sphereComplexity); - sphereSep->addChild(new SoSphere); - myTexture2->filename = "globe.rgb"; -} - -void -updateModels(void) -{ - globeSpin->angle = angle; - glutPostRedisplay(); -} - -void -animate(void) -{ - angle += 0.1; - updateModels(); -} - -void -setAnimation(int enable) -{ - if(enable) { - spinning = 1; - glutIdleFunc(animate); - } else { - spinning = 0; - glutIdleFunc(NULL); - glutPostRedisplay(); - } -} - -/* ARGSUSED */ -void -keyboard(unsigned char ch, int x, int y) -{ - if(ch == ' ') { - setAnimation(0); - animate(); - } -} - -void -menuSelect(int item) -{ - switch(item) { - case 1: - animate(); - break; - case 2: - if(!spinning) { - setAnimation(1); - } else { - setAnimation(0); - } - break; - } -} - -void -vis(int visible) -{ - if (visible == GLUT_VISIBLE) { - if (spinning) - glutIdleFunc(animate); - } else { - if (spinning) - glutIdleFunc(NULL); - } -} - -/* ARGSUSED */ -void -mouse(int button, int state, int x, int y) -{ - if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) { - setAnimation(0); - moving = 1; - begin = x; - } - if (button == GLUT_LEFT_BUTTON && state == GLUT_UP) { - moving = 0; - glutPostRedisplay(); - } -} - -/* ARGSUSED */ -void -motion(int x, int y) -{ - if (moving) { - angle = angle + .01 * (x - begin); - begin = x; - updateModels(); - } -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH | GLUT_MULTISAMPLE); - - SoDB::init(); - globeScene(); - - glutInitWindowSize(W, H); - glutCreateWindow("As the world turns"); - glutDisplayFunc(redraw); - glutReshapeFunc(reshape); - glutCreateMenu(menuSelect); - glutAddMenuEntry("Step", 1); - glutAddMenuEntry("Toggle spinning", 2); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutKeyboardFunc(keyboard); - glutMouseFunc(mouse); - glutMotionFunc(motion); - glutVisibilityFunc(vis); - - /* Enable depth testing for Open Inventor. */ - glEnable(GL_DEPTH_TEST); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/inventor/globe.rgb b/lib/glut-3.7.6/progs/inventor/globe.rgb deleted file mode 100644 index 4209ea65ac24bd7b5f598d34d0203edc5c446c99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109862 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 z 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�yLOrB_6eRqh3X&} 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 -#include -#include - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -int W = 300, H = 300; -int spinning = 0; -GLubyte *image = NULL; -SoSeparator *root; -SoRotationXYZ *duckRotXYZ; -float angle = 0.0; -int moving = 0; -int begin; - -void -reshape(int w, int h) -{ - glViewport(0, 0, w, h); - W = w; - H = h; - if (image) - free(image); - image = (GLubyte *) malloc(W * H * 3); -} - -void -renderScene(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - SbViewportRegion myViewport(W, H); - SoGLRenderAction myRenderAction(myViewport); - myRenderAction.apply(root); -} - -void -redraw(void) -{ - renderScene(); - glutSwapBuffers(); -} - -int -duckScene(void) -{ - root = new SoSeparator; - root->ref(); - - // Add a camera and light - SoPerspectiveCamera *myCamera = new SoPerspectiveCamera; - myCamera->position.setValue(0., -4., 8.0); - myCamera->heightAngle = M_PI/2.5; - myCamera->nearDistance = 1.0; - myCamera->farDistance = 15.0; - root->addChild(myCamera); - root->addChild(new SoDirectionalLight); - - // Rotate scene slightly to get better view - SoRotationXYZ *globalRotXYZ = new SoRotationXYZ; - globalRotXYZ->axis = SoRotationXYZ::X; - globalRotXYZ->angle = M_PI/9; - root->addChild(globalRotXYZ); - - // Pond group - SoSeparator *pond = new SoSeparator; - root->addChild(pond); - SoMaterial *cylMaterial = new SoMaterial; - cylMaterial->diffuseColor.setValue(0., 0.3, 0.8); - pond->addChild(cylMaterial); - SoTranslation *cylTranslation = new SoTranslation; - cylTranslation->translation.setValue(0., -6.725, 0.); - pond->addChild(cylTranslation); - SoCylinder *myCylinder = new SoCylinder; - myCylinder->radius.setValue(4.0); - myCylinder->height.setValue(0.5); - pond->addChild(myCylinder); - - // Duck group - SoSeparator *duck = new SoSeparator; - root->addChild(duck); - - // Read the duck object from a file and add to the group - SoInput myInput; - if (!myInput.openFile("duck.iv")) { - if (!myInput.openFile("/usr/share/src/Inventor/examples/data/duck.iv")) { - return 1; - } - } - SoSeparator *duckObject = SoDB::readAll(&myInput); - if (duckObject == NULL) return 1; - - // Set up the duck transformations - duckRotXYZ = new SoRotationXYZ; - duck->addChild(duckRotXYZ); - duckRotXYZ->angle = angle; - duckRotXYZ->axis = SoRotationXYZ::Y; // rotate about Y axis - SoTransform *initialTransform = new SoTransform; - initialTransform->translation.setValue(0., 0., 3.); - initialTransform->scaleFactor.setValue(6., 6., 6.); - duck->addChild(initialTransform); - duck->addChild(duckObject); - - return 0; -} - -void -updateModels(void) -{ - duckRotXYZ->angle = angle; - glutPostRedisplay(); -} - -void -animate(void) -{ - angle += 0.1; - updateModels(); -} - -void -setAnimation(int enable) -{ - if(enable) { - spinning = 1; - glutIdleFunc(animate); - } else { - spinning = 0; - glutIdleFunc(NULL); - glutPostRedisplay(); - } -} - -/* ARGSUSED */ -void -keyboard(unsigned char ch, int x, int y) -{ - if(ch == ' ') { - setAnimation(0); - animate(); - } -} - -void -menuSelect(int item) -{ - switch(item) { - case 1: - animate(); - break; - case 2: - if(!spinning) { - setAnimation(1); - } else { - setAnimation(0); - } - break; -#ifdef GL_MULTISAMPLE_SGIS - case 3: - if(glIsEnabled(GL_MULTISAMPLE_SGIS)) { - glDisable(GL_MULTISAMPLE_SGIS); - } else { - glEnable(GL_MULTISAMPLE_SGIS); - } - glutPostRedisplay(); - break; -#endif - } -} - -void -vis(int visible) -{ - if (visible == GLUT_VISIBLE) { - if (spinning) - glutIdleFunc(animate); - } else { - if (spinning) - glutIdleFunc(NULL); - } -} - -/* ARGSUSED */ -void -mouse(int button, int state, int x, int y) -{ - if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) { - setAnimation(0); - moving = 1; - begin = x; - } - if (button == GLUT_LEFT_BUTTON && state == GLUT_UP) { - moving = 0; - glutPostRedisplay(); - } -} - -/* ARGSUSED */ -void -motion(int x, int y) -{ - if (moving) { - angle = angle + .01 * (x - begin); - begin = x; - updateModels(); - } -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH | GLUT_MULTISAMPLE); - - SoDB::init(); - - if(duckScene()) { - fprintf(stderr, "couldn't read IV file\n"); - exit(1); - } - glutInitWindowSize(W, H); - glutCreateWindow("GLUT Inventor Duck Pond"); - glutDisplayFunc(redraw); - glutReshapeFunc(reshape); - glutCreateMenu(menuSelect); - glutAddMenuEntry("Step", 1); - glutAddMenuEntry("Toggle animation", 2); - if(glutGet(GLUT_WINDOW_NUM_SAMPLES) > 0) { - glutAddMenuEntry("Toggle multisampling", 3); - } - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutKeyboardFunc(keyboard); - glutMouseFunc(mouse); - glutMotionFunc(motion); - glutVisibilityFunc(vis); - glEnable(GL_DEPTH_TEST); - glClearColor(0.132, 0.542, 0.132, 1.0); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/mesademos.dsw b/lib/glut-3.7.6/progs/mesademos.dsw deleted file mode 100644 index 73bf3ad35..000000000 --- a/lib/glut-3.7.6/progs/mesademos.dsw +++ /dev/null @@ -1,194 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "_all"=".\mesademos\_all.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name bounce - End Project Dependency - Begin Project Dependency - Project_Dep_Name gamma - End Project Dependency - Begin Project Dependency - Project_Dep_Name gears - End Project Dependency - Begin Project Dependency - Project_Dep_Name isosurf - End Project Dependency - Begin Project Dependency - Project_Dep_Name offset - End Project Dependency - Begin Project Dependency - Project_Dep_Name reflect - End Project Dependency - Begin Project Dependency - Project_Dep_Name spin - End Project Dependency - Begin Project Dependency - Project_Dep_Name tess_demo - End Project Dependency - Begin Project Dependency - Project_Dep_Name texobj - End Project Dependency - Begin Project Dependency - Project_Dep_Name trdemo - End Project Dependency - Begin Project Dependency - Project_Dep_Name winpos - End Project Dependency -}}} - -############################################################################### - -Project: "bounce"=".\mesademos\bounce.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "gamma"=".\mesademos\gamma.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "gears"=".\mesademos\gears.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "isosurf"=".\mesademos\isosurf.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "offset"=".\mesademos\offset.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "reflect"=".\mesademos\reflect.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "spin"=".\mesademos\spin.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "tess_demo"=".\mesademos\tess_demo.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "texobj"=".\mesademos\texobj.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "trdemo"=".\mesademos\trdemo.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "winpos"=".\mesademos\winpos.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/lib/glut-3.7.6/progs/mesademos/Imakefile b/lib/glut-3.7.6/progs/mesademos/Imakefile deleted file mode 100644 index 55741acc6..000000000 --- a/lib/glut-3.7.6/progs/mesademos/Imakefile +++ /dev/null @@ -1,26 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1996. */ - -#include "../../Glut.cf" - -TARGETS = bounce gamma gears isosurf offset reflect spin tess_demo \ - texobj winpos trdemo - -SRCS = bounce.c gamma.c gears.c isosurf.c offset.c reflect.c spin.c \ - tess_demo.c texobj.c winpos.c trdemo.c tr.c - -AllTarget($(TARGETS)) - -SimpleGlutProgramTarget(bounce) -SimpleGlutProgramTarget(gamma) -SimpleGlutProgramTarget(gears) -SimpleGlutProgramTarget(isosurf) -SimpleGlutProgramTarget(offset) -NormalGlutProgramTarget(reflect,reflect.o image.o) -SimpleGlutProgramTarget(spin) -SimpleGlutProgramTarget(tess_demo) -SimpleGlutProgramTarget(texobj) -NormalGlutProgramTarget(trdemo,trdemo.o tr.o) -SimpleGlutProgramTarget(winpos) - -DependTarget() diff --git a/lib/glut-3.7.6/progs/mesademos/README b/lib/glut-3.7.6/progs/mesademos/README deleted file mode 100644 index 12603f382..000000000 --- a/lib/glut-3.7.6/progs/mesademos/README +++ /dev/null @@ -1,21 +0,0 @@ - -The source code in this directory is derived from a set of demos found -in the Mesa 2.0 source code distribution. The original Mesa demos -were written to use Xlib, aux, or tk; the versions in this directory -have been converted to use GLUT. - -Some of the programs from the Mesa 2.0 demos directory are not -included here because they demonstrated features specific to Mesa. To -avoid any possible confusion, the Mesa 2.0 demo source files NOT -reproduced here are fdraw.f, ftest.c, glxdemo.c, glxpixmap.c, test0.c, -vgears.c, vindex.c, vtest.c, and xdemo.c - -Many thanks to Brian Paul and the various contributors to the Mesa -library. - -NOTE to SGI users: IRIX includes a system command called -/usr/sbin/gamma so you may need to run "./gamma" to run the gamma -demo in this directory. - -- Mark Kilgard - November 7, 1996 diff --git a/lib/glut-3.7.6/progs/mesademos/_all.dsp b/lib/glut-3.7.6/progs/mesademos/_all.dsp deleted file mode 100644 index 6a4421548..000000000 --- a/lib/glut-3.7.6/progs/mesademos/_all.dsp +++ /dev/null @@ -1,63 +0,0 @@ -# Microsoft Developer Studio Project File - Name="_all" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Generic Project" 0x010a - -CFG=_all - 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 "_all.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 "_all.mak" CFG="_all - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "_all - Win32 Release" (based on "Win32 (x86) Generic Project") -!MESSAGE "_all - Win32 Debug" (based on "Win32 (x86) Generic Project") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -MTL=midl.exe - -!IF "$(CFG)" == "_all - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" - -!ELSEIF "$(CFG)" == "_all - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "_all___Win32_Debug" -# PROP BASE Intermediate_Dir "_all___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" - -!ENDIF - -# Begin Target - -# Name "_all - Win32 Release" -# Name "_all - Win32 Debug" -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/mesademos/bounce.c b/lib/glut-3.7.6/progs/mesademos/bounce.c deleted file mode 100644 index d5d7ee250..000000000 --- a/lib/glut-3.7.6/progs/mesademos/bounce.c +++ /dev/null @@ -1,204 +0,0 @@ -/* bounce.c */ - -/* - * Bouncing ball demo. - * - * This program is in the public domain - * - * Brian Paul - */ - -/* Conversion to GLUT by Mark J. Kilgard */ - -#include -#include -#include - -#define COS(X) cos( (X) * 3.14159/180.0 ) -#define SIN(X) sin( (X) * 3.14159/180.0 ) - -#define RED 1 -#define WHITE 2 -#define CYAN 3 - -GLuint Ball; -GLenum Mode; -GLfloat Zrot = 0.0, Zstep = 6.0; -GLfloat Xpos = 0.0, Ypos = 1.0; -GLfloat Xvel = 0.2, Yvel = 0.0; -GLfloat Xmin = -4.0, Xmax = 4.0; -GLfloat Ymin = -3.8, Ymax = 4.0; -GLfloat G = -0.1; - -static GLuint -make_ball(void) -{ - GLuint list; - GLfloat a, b; - GLfloat da = 18.0, db = 18.0; - GLfloat radius = 1.0; - GLuint color; - GLfloat x, y, z; - - list = glGenLists(1); - - glNewList(list, GL_COMPILE); - - color = 0; - for (a = -90.0; a + da <= 90.0; a += da) { - - glBegin(GL_QUAD_STRIP); - for (b = 0.0; b <= 360.0; b += db) { - - if (color) { - glIndexi(RED); - } else { - glIndexi(WHITE); - } - - x = COS(b) * COS(a); - y = SIN(b) * COS(a); - z = SIN(a); - glVertex3f(x, y, z); - - x = radius * COS(b) * COS(a + da); - y = radius * SIN(b) * COS(a + da); - z = radius * SIN(a + da); - glVertex3f(x, y, z); - - color = 1 - color; - } - glEnd(); - - } - - glEndList(); - - return list; -} - -static void -reshape(int width, int height) -{ - glViewport(0, 0, (GLint) width, (GLint) height); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho(-6.0, 6.0, -6.0, 6.0, -6.0, 6.0); - glMatrixMode(GL_MODELVIEW); -} - -/* ARGSUSED1 */ -static void -key(unsigned char k, int x, int y) -{ - switch (k) { - case 27: /* Escape */ - exit(0); - } -} - -static void -draw(void) -{ - GLint i; - - glClear(GL_COLOR_BUFFER_BIT); - - glIndexi(CYAN); - glBegin(GL_LINES); - for (i = -5; i <= 5; i++) { - glVertex2i(i, -5); - glVertex2i(i, 5); - } - for (i = -5; i <= 5; i++) { - glVertex2i(-5, i); - glVertex2i(5, i); - } - for (i = -5; i <= 5; i++) { - glVertex2i(i, -5); - glVertex2f(i * 1.15, -5.9); - } - glVertex2f(-5.3, -5.35); - glVertex2f(5.3, -5.35); - glVertex2f(-5.75, -5.9); - glVertex2f(5.75, -5.9); - glEnd(); - - glPushMatrix(); - glTranslatef(Xpos, Ypos, 0.0); - glScalef(2.0, 2.0, 2.0); - glRotatef(8.0, 0.0, 0.0, 1.0); - glRotatef(90.0, 1.0, 0.0, 0.0); - glRotatef(Zrot, 0.0, 0.0, 1.0); - - glCallList(Ball); - - glPopMatrix(); - - glFlush(); - glutSwapBuffers(); -} - -static void -idle(void) -{ - static float vel0 = -100.0; - - Zrot += Zstep; - - Xpos += Xvel; - if (Xpos >= Xmax) { - Xpos = Xmax; - Xvel = -Xvel; - Zstep = -Zstep; - } - if (Xpos <= Xmin) { - Xpos = Xmin; - Xvel = -Xvel; - Zstep = -Zstep; - } - Ypos += Yvel; - Yvel += G; - if (Ypos < Ymin) { - Ypos = Ymin; - if (vel0 == -100.0) - vel0 = fabs(Yvel); - Yvel = vel0; - } - glutPostRedisplay(); -} - -void -visible(int vis) -{ - if (vis == GLUT_VISIBLE) - glutIdleFunc(idle); - else - glutIdleFunc(NULL); -} - -int -main(int argc, char *argv[]) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_INDEX | GLUT_DOUBLE); - - glutCreateWindow("Bounce"); - Ball = make_ball(); - glCullFace(GL_BACK); - glEnable(GL_CULL_FACE); - glDisable(GL_DITHER); - glShadeModel(GL_FLAT); - - glutDisplayFunc(draw); - glutReshapeFunc(reshape); - glutVisibilityFunc(visible); - glutKeyboardFunc(key); - - glutSetColor(RED, 1.0, 0.0, 0.0); - glutSetColor(WHITE, 1.0, 1.0, 1.0); - glutSetColor(CYAN, 0.0, 1.0, 1.0); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/mesademos/bounce.dsp b/lib/glut-3.7.6/progs/mesademos/bounce.dsp deleted file mode 100644 index 902840e5f..000000000 --- a/lib/glut-3.7.6/progs/mesademos/bounce.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="bounce" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=bounce - 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 "bounce.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 "bounce.mak" CFG="bounce - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "bounce - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "bounce - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "bounce - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "bounce - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "bounce - Win32 Release" -# Name "bounce - Win32 Debug" -# Begin Source File - -SOURCE=.\bounce.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/mesademos/brick.rgb b/lib/glut-3.7.6/progs/mesademos/brick.rgb deleted file mode 100644 index c5756ca8d2a890ad1180c79b2319106d197df084..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51607 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ϜJkKm)z(R8-=#6qrC% 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 QSA>7Z4TOL75W@fe1wgcV^#A|> diff --git a/lib/glut-3.7.6/progs/mesademos/gamma.c b/lib/glut-3.7.6/progs/mesademos/gamma.c deleted file mode 100644 index 5d32e0816..000000000 --- a/lib/glut-3.7.6/progs/mesademos/gamma.c +++ /dev/null @@ -1,166 +0,0 @@ -/* gamma.c */ - -/* Draw test patterns to help determine correct gamma value for a display. - When the intensities in the top row nearly match the intensities in - the bottom row you've found the right gamma value. - - For more info about gamma correction see: - http://www.inforamp.net/~poynton/notes/colour_and_gamma/GammaFAQ.html - - This program is in the public domain - - Brian Paul 19 Oct 1995 */ - -/* Conversion to GLUT by Mark J. Kilgard */ - -#include -#include -#include -#include - -static void -Reshape(int width, int height) -{ - glViewport(0, 0, (GLint) width, (GLint) height); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0); - glMatrixMode(GL_MODELVIEW); -} - -/* ARGSUSED1 */ -static void -key_esc(unsigned char key, int x, int y) -{ - if(key == 27) exit(0); /* Exit on Escape */ -} - -static GLubyte p25[] = -{ - 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, - 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, - 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, - 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, - 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, - 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, - 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, - 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, - 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, - 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, - 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, - 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, - 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, - 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, - 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, - 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, -}; - -static GLubyte p50[] = -{ - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, -}; - -static GLubyte p75[] = -{ - 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff, - 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff, - 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff, - 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff, - 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff, - 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff, - 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff, - 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff, - 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff, - 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff, - 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff, - 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff, - 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff, - 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff, - 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff, - 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff, -}; - -static void -display(void) -{ - - glClear(GL_COLOR_BUFFER_BIT); - -/** DITHERED ROW **/ - - /* solid black */ - - /* 25% white */ - glEnable(GL_POLYGON_STIPPLE); - glColor3f(1.0, 1.0, 1.0); - glPolygonStipple(p25); - glRectf(-0.6, 1.0, -0.2, 0.01); - - /* 50% white */ - glPolygonStipple(p50); - glRectf(-0.2, 1.0, 0.2, 0.01); - - /* 75% white */ - glPolygonStipple(p75); - glRectf(0.2, 1.0, 0.6, 0.01); - - /* 100% white */ - glDisable(GL_POLYGON_STIPPLE); - glRectf(0.6, 1.0, 1.0, 0.01); - -/*** GRAY ROW ***/ - - /* solid black */ - - /* 25% white */ - glColor3f(0.25, 0.25, 0.25); - glRectf(-0.6, -0.01, -0.2, -1.0); - - /* 50% white */ - glColor3f(0.5, 0.5, 0.5); - glRectf(-0.2, -0.01, 0.2, -1.0); - - /* 75% white */ - glColor3f(0.75, 0.75, 0.75); - glRectf(0.2, -0.01, 0.6, -1.0); - - /* 100% white */ - glColor3f(1.0, 1.0, 1.0); - glRectf(0.6, -0.01, 1.0, -1.0); - - glFlush(); -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); - - glutInitWindowPosition(50, 50); - glutInitWindowSize(400, 200); - - glutCreateWindow("gamma test patterns"); - glutReshapeFunc(Reshape); - glutDisplayFunc(display); - glutKeyboardFunc(key_esc); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/mesademos/gamma.dsp b/lib/glut-3.7.6/progs/mesademos/gamma.dsp deleted file mode 100644 index 7bf989238..000000000 --- a/lib/glut-3.7.6/progs/mesademos/gamma.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="gamma" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=gamma - 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 "gamma.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 "gamma.mak" CFG="gamma - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "gamma - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "gamma - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "gamma - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "gamma - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "gamma - Win32 Release" -# Name "gamma - Win32 Debug" -# Begin Source File - -SOURCE=.\gamma.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/mesademos/gears.c b/lib/glut-3.7.6/progs/mesademos/gears.c deleted file mode 100644 index 418703383..000000000 --- a/lib/glut-3.7.6/progs/mesademos/gears.c +++ /dev/null @@ -1,330 +0,0 @@ -/* gears.c */ - -/* - * 3-D gear wheels. This program is in the public domain. - * - * Brian Paul - */ - -/* Conversion to GLUT by Mark J. Kilgard */ - -#include -#include -#include - -#ifndef M_PI -#define M_PI 3.14159265 -#endif - -/** - - Draw a gear wheel. You'll probably want to call this function when - building a display list since we do a lot of trig here. - - Input: inner_radius - radius of hole at center - outer_radius - radius at center of teeth - width - width of gear - teeth - number of teeth - tooth_depth - depth of tooth - - **/ - -static void -gear(GLfloat inner_radius, GLfloat outer_radius, GLfloat width, - GLint teeth, GLfloat tooth_depth) -{ - GLint i; - GLfloat r0, r1, r2; - GLfloat angle, da; - GLfloat u, v, len; - - r0 = inner_radius; - r1 = outer_radius - tooth_depth / 2.0; - r2 = outer_radius + tooth_depth / 2.0; - - da = 2.0 * M_PI / teeth / 4.0; - - glShadeModel(GL_FLAT); - - glNormal3f(0.0, 0.0, 1.0); - - /* draw front face */ - glBegin(GL_QUAD_STRIP); - for (i = 0; i <= teeth; i++) { - angle = i * 2.0 * M_PI / teeth; - glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5); - glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5); - glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5); - glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), width * 0.5); - } - glEnd(); - - /* draw front sides of teeth */ - glBegin(GL_QUADS); - da = 2.0 * M_PI / teeth / 4.0; - for (i = 0; i < teeth; i++) { - angle = i * 2.0 * M_PI / teeth; - - glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5); - glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5); - glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), width * 0.5); - glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), width * 0.5); - } - glEnd(); - - glNormal3f(0.0, 0.0, -1.0); - - /* draw back face */ - glBegin(GL_QUAD_STRIP); - for (i = 0; i <= teeth; i++) { - angle = i * 2.0 * M_PI / teeth; - glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5); - glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5); - glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), -width * 0.5); - glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5); - } - glEnd(); - - /* draw back sides of teeth */ - glBegin(GL_QUADS); - da = 2.0 * M_PI / teeth / 4.0; - for (i = 0; i < teeth; i++) { - angle = i * 2.0 * M_PI / teeth; - - glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), -width * 0.5); - glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), -width * 0.5); - glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), -width * 0.5); - glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5); - } - glEnd(); - - /* draw outward faces of teeth */ - glBegin(GL_QUAD_STRIP); - for (i = 0; i < teeth; i++) { - angle = i * 2.0 * M_PI / teeth; - - glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5); - glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5); - u = r2 * cos(angle + da) - r1 * cos(angle); - v = r2 * sin(angle + da) - r1 * sin(angle); - len = sqrt(u * u + v * v); - u /= len; - v /= len; - glNormal3f(v, -u, 0.0); - glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5); - glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), -width * 0.5); - glNormal3f(cos(angle), sin(angle), 0.0); - glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), width * 0.5); - glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), -width * 0.5); - u = r1 * cos(angle + 3 * da) - r2 * cos(angle + 2 * da); - v = r1 * sin(angle + 3 * da) - r2 * sin(angle + 2 * da); - glNormal3f(v, -u, 0.0); - glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), width * 0.5); - glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), -width * 0.5); - glNormal3f(cos(angle), sin(angle), 0.0); - } - - glVertex3f(r1 * cos(0), r1 * sin(0), width * 0.5); - glVertex3f(r1 * cos(0), r1 * sin(0), -width * 0.5); - - glEnd(); - - glShadeModel(GL_SMOOTH); - - /* draw inside radius cylinder */ - glBegin(GL_QUAD_STRIP); - for (i = 0; i <= teeth; i++) { - angle = i * 2.0 * M_PI / teeth; - glNormal3f(-cos(angle), -sin(angle), 0.0); - glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5); - glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5); - } - glEnd(); - -} - -static GLfloat view_rotx = 20.0, view_roty = 30.0, view_rotz = 0.0; -static GLint gear1, gear2, gear3; -static GLfloat angle = 0.0; - -static GLuint limit; -static GLuint count = 1; - -static void -draw(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glPushMatrix(); - glRotatef(view_rotx, 1.0, 0.0, 0.0); - glRotatef(view_roty, 0.0, 1.0, 0.0); - glRotatef(view_rotz, 0.0, 0.0, 1.0); - - glPushMatrix(); - glTranslatef(-3.0, -2.0, 0.0); - glRotatef(angle, 0.0, 0.0, 1.0); - glCallList(gear1); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(3.1, -2.0, 0.0); - glRotatef(-2.0 * angle - 9.0, 0.0, 0.0, 1.0); - glCallList(gear2); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(-3.1, 4.2, 0.0); - glRotatef(-2.0 * angle - 25.0, 0.0, 0.0, 1.0); - glCallList(gear3); - glPopMatrix(); - - glPopMatrix(); - - glutSwapBuffers(); - - count++; - if (count == limit) { - exit(0); - } -} - -static void -idle(void) -{ - angle += 2.0; - glutPostRedisplay(); -} - -/* change view angle, exit upon ESC */ -/* ARGSUSED1 */ -static void -key(unsigned char k, int x, int y) -{ - switch (k) { - case 'z': - view_rotz += 5.0; - break; - case 'Z': - view_rotz -= 5.0; - break; - case 27: /* Escape */ - exit(0); - break; - default: - return; - } - glutPostRedisplay(); -} - -/* change view angle */ -/* ARGSUSED1 */ -static void -special(int k, int x, int y) -{ - switch (k) { - case GLUT_KEY_UP: - view_rotx += 5.0; - break; - case GLUT_KEY_DOWN: - view_rotx -= 5.0; - break; - case GLUT_KEY_LEFT: - view_roty += 5.0; - break; - case GLUT_KEY_RIGHT: - view_roty -= 5.0; - break; - default: - return; - } - glutPostRedisplay(); -} - -/* new window size or exposure */ -static void -reshape(int width, int height) -{ - GLfloat h = (GLfloat) height / (GLfloat) width; - - glViewport(0, 0, (GLint) width, (GLint) height); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glFrustum(-1.0, 1.0, -h, h, 5.0, 60.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(0.0, 0.0, -40.0); -} - -static void -init(void) -{ - static GLfloat pos[4] = - {5.0, 5.0, 10.0, 0.0}; - static GLfloat red[4] = - {0.8, 0.1, 0.0, 1.0}; - static GLfloat green[4] = - {0.0, 0.8, 0.2, 1.0}; - static GLfloat blue[4] = - {0.2, 0.2, 1.0, 1.0}; - - glLightfv(GL_LIGHT0, GL_POSITION, pos); - glEnable(GL_CULL_FACE); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_DEPTH_TEST); - - /* make the gears */ - gear1 = glGenLists(1); - glNewList(gear1, GL_COMPILE); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, red); - gear(1.0, 4.0, 1.0, 20, 0.7); - glEndList(); - - gear2 = glGenLists(1); - glNewList(gear2, GL_COMPILE); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, green); - gear(0.5, 2.0, 2.0, 10, 0.7); - glEndList(); - - gear3 = glGenLists(1); - glNewList(gear3, GL_COMPILE); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, blue); - gear(1.3, 2.0, 0.5, 10, 0.7); - glEndList(); - - glEnable(GL_NORMALIZE); -} - -void -visible(int vis) -{ - if (vis == GLUT_VISIBLE) - glutIdleFunc(idle); - else - glutIdleFunc(NULL); -} - -int -main(int argc, char *argv[]) -{ - glutInit(&argc, argv); - if (argc > 1) { - /* do 'n' frames then exit */ - limit = atoi(argv[1]) + 1; - } else { - limit = 0; - } - glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); - - glutCreateWindow("Gears"); - init(); - - glutDisplayFunc(draw); - glutReshapeFunc(reshape); - glutKeyboardFunc(key); - glutSpecialFunc(special); - glutVisibilityFunc(visible); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/mesademos/gears.dsp b/lib/glut-3.7.6/progs/mesademos/gears.dsp deleted file mode 100644 index 1fa4c54ca..000000000 --- a/lib/glut-3.7.6/progs/mesademos/gears.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="gears" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=gears - 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 "gears.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 "gears.mak" CFG="gears - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "gears - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "gears - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "gears - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "gears - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "gears - Win32 Release" -# Name "gears - Win32 Debug" -# Begin Source File - -SOURCE=.\gears.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/mesademos/image.c b/lib/glut-3.7.6/progs/mesademos/image.c deleted file mode 100644 index 78c46d5fe..000000000 --- a/lib/glut-3.7.6/progs/mesademos/image.c +++ /dev/null @@ -1,220 +0,0 @@ -/* Lifted from libtk/image.c */ - -/* This code lets your read in SGI .rgb files. */ - -#include -#include -#include -#include "image.h" - -#ifndef SEEK_SET -# define SEEK_SET 0 -#endif - - -/******************************************************************************/ - -typedef unsigned int GLuint; /* Should be 32-bit value. */ -typedef int GLint; /* Should be 32-bit value. */ - -typedef struct _rawImageRec { - unsigned short imagic; - unsigned short type; - unsigned short dim; - unsigned short sizeX, sizeY, sizeZ; - unsigned long min, max; - unsigned long wasteBytes; - char name[80]; - unsigned long colorMap; - FILE *file; - unsigned char *tmp, *tmpR, *tmpG, *tmpB; - unsigned long rleEnd; - GLuint *rowStart; - GLint *rowSize; -} rawImageRec; - -/******************************************************************************/ - -static void ConvertShort(unsigned short *array, unsigned int length) -{ - unsigned short b1, b2; - unsigned char *ptr; - - ptr = (unsigned char *)array; - while (length--) { - b1 = *ptr++; - b2 = *ptr++; - *array++ = (b1 << 8) | (b2); - } -} - -static void ConvertUint(GLuint *array, unsigned int length) -{ - unsigned int b1, b2, b3, b4; - unsigned char *ptr; - - ptr = (unsigned char *)array; - while (length--) { - b1 = *ptr++; - b2 = *ptr++; - b3 = *ptr++; - b4 = *ptr++; - *array++ = (b1 << 24) | (b2 << 16) | (b3 << 8) | (b4); - } -} - -static rawImageRec *RawImageOpen(char *fileName) -{ - union { - int testWord; - char testByte[4]; - } endianTest; - rawImageRec *raw; - int swapFlag; - int x; - - endianTest.testWord = 1; - if (endianTest.testByte[0] == 1) { - swapFlag = 1; - } else { - swapFlag = 0; - } - - raw = (rawImageRec *)malloc(sizeof(rawImageRec)); - if (raw == NULL) { - fprintf(stderr, "Out of memory!\n"); - exit(1); - } - if ((raw->file = fopen(fileName, "rb")) == NULL) { - perror(fileName); - exit(1); - } - - fread(raw, 1, 12, raw->file); - - if (swapFlag) { - ConvertShort(&raw->imagic, 6); - } - - raw->tmp = (unsigned char *)malloc(raw->sizeX*256); - raw->tmpR = (unsigned char *)malloc(raw->sizeX*256); - raw->tmpG = (unsigned char *)malloc(raw->sizeX*256); - raw->tmpB = (unsigned char *)malloc(raw->sizeX*256); - if (raw->tmp == NULL || raw->tmpR == NULL || raw->tmpG == NULL || - raw->tmpB == NULL) { - fprintf(stderr, "Out of memory!\n"); - exit(1); - } - - if ((raw->type & 0xFF00) == 0x0100) { - x = raw->sizeY * raw->sizeZ * (int) sizeof(GLuint); - raw->rowStart = (GLuint *)malloc(x); - raw->rowSize = (GLint *)malloc(x); - if (raw->rowStart == NULL || raw->rowSize == NULL) { - fprintf(stderr, "Out of memory!\n"); - exit(1); - } - raw->rleEnd = 512 + (2 * x); - fseek(raw->file, 512, SEEK_SET); - fread(raw->rowStart, 1, x, raw->file); - fread(raw->rowSize, 1, x, raw->file); - if (swapFlag) { - ConvertUint(raw->rowStart, - (unsigned int) (x/sizeof(GLuint))); - ConvertUint((GLuint *)raw->rowSize, - (unsigned int) (x/sizeof(GLint))); - } - } - return raw; -} - -static void RawImageClose(rawImageRec *raw) -{ - - fclose(raw->file); - free(raw->tmp); - free(raw->tmpR); - free(raw->tmpG); - free(raw->tmpB); - free(raw); -} - -static void RawImageGetRow(rawImageRec *raw, unsigned char *buf, int y, int z) -{ - unsigned char *iPtr, *oPtr, pixel; - int count; - - if ((raw->type & 0xFF00) == 0x0100) { - fseek(raw->file, (long) raw->rowStart[y+z*raw->sizeY], SEEK_SET); - fread(raw->tmp, 1, (unsigned int)raw->rowSize[y+z*raw->sizeY], - raw->file); - - iPtr = raw->tmp; - oPtr = buf; - for (;;) { - pixel = *iPtr++; - count = (int)(pixel & 0x7F); - if (!count) { - return; - } - if (pixel & 0x80) { - while (count--) { - *oPtr++ = *iPtr++; - } - } else { - pixel = *iPtr++; - while (count--) { - *oPtr++ = pixel; - } - } - } - } else { - fseek(raw->file, 512+(y*raw->sizeX)+(z*raw->sizeX*raw->sizeY), - SEEK_SET); - fread(buf, 1, raw->sizeX, raw->file); - } -} - -static void RawImageGetData(rawImageRec *raw, RGBImageRec *final) -{ - unsigned char *ptr; - int i, j; - - final->data = (unsigned char *)malloc((raw->sizeX+1)*(raw->sizeY+1)*4); - if (final->data == NULL) { - fprintf(stderr, "Out of memory!\n"); - exit(1); - } - - ptr = final->data; - for (i = 0; i < (int)(raw->sizeY); i++) { - RawImageGetRow(raw, raw->tmpR, i, 0); - RawImageGetRow(raw, raw->tmpG, i, 1); - RawImageGetRow(raw, raw->tmpB, i, 2); - for (j = 0; j < (int)(raw->sizeX); j++) { - *ptr++ = *(raw->tmpR + j); - *ptr++ = *(raw->tmpG + j); - *ptr++ = *(raw->tmpB + j); - } - } -} - -RGBImageRec *RGBImageLoad(char *fileName) -{ - rawImageRec *raw; - RGBImageRec *final; - - raw = RawImageOpen(fileName); - final = (RGBImageRec *)malloc(sizeof(RGBImageRec)); - if (final == NULL) { - fprintf(stderr, "Out of memory!\n"); - exit(1); - } - final->sizeX = raw->sizeX; - final->sizeY = raw->sizeY; - RawImageGetData(raw, final); - RawImageClose(raw); - return final; -} - -/******************************************************************************/ diff --git a/lib/glut-3.7.6/progs/mesademos/image.h b/lib/glut-3.7.6/progs/mesademos/image.h deleted file mode 100644 index 797c625fc..000000000 --- a/lib/glut-3.7.6/progs/mesademos/image.h +++ /dev/null @@ -1,20 +0,0 @@ -/* Lifted from include/gltk.h */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* -** RGB Image Structure -*/ - -typedef struct _RGBImageRec { - int sizeX, sizeY; - unsigned char *data; -} RGBImageRec; - -extern RGBImageRec *RGBImageLoad(char *); - -#ifdef __cplusplus -} -#endif diff --git a/lib/glut-3.7.6/progs/mesademos/isosurf.c b/lib/glut-3.7.6/progs/mesademos/isosurf.c deleted file mode 100644 index a693ba4b2..000000000 --- a/lib/glut-3.7.6/progs/mesademos/isosurf.c +++ /dev/null @@ -1,316 +0,0 @@ -/* isosurf.c */ - -/* Mesa 2.0 version - - Display an isosurface of 3-D wind speed volume. Use arrow keys to - rotate, S toggles smooth shading, L toggles lighting - - Brian Paul */ - -/* Conversion to GLUT and OpenGL 1.1 by Mark J. Kilgard */ - -#include -#include -#include -#include -#include - -#ifndef GL_VERSION_1_1 -/* OpenGL 1.1 not supported so emulate OpenGL 1.1 - vertex arrays with the EXT_vertex_array extension. */ -#define GL_VERTEX_ARRAY GL_VERTEX_ARRAY_EXT -#define GL_NORMAL_ARRAY GL_NORMAL_ARRAY_EXT -#define glDrawArrays(a,b,c) glDrawArraysEXT(a,b,c) -#define glVertexPointer(a,b,c,d) glVertexPointerEXT(a,b,c,numverts,d) -#define glNormalPointer(a,b,c) glNormalPointerEXT(a,b,numverts,c) -#endif - -GLboolean speed_test = GL_FALSE; -GLboolean use_vertex_arrays = GL_FALSE; - -GLboolean doubleBuffer = GL_TRUE; - -GLboolean smooth = GL_TRUE; -GLboolean lighting = GL_TRUE; - -#define MAXVERTS 10000 - -static GLfloat verts[MAXVERTS][3]; -static GLfloat norms[MAXVERTS][3]; -static GLint numverts; - -static GLfloat xrot; -static GLfloat yrot; - -static void -read_surface(char *filename) -{ - FILE *f; - - f = fopen(filename, "r"); - if (!f) { - printf("couldn't read %s\n", filename); - exit(1); - } - numverts = 0; - while (!feof(f) && numverts < MAXVERTS) { - fscanf(f, "%f %f %f %f %f %f", - &verts[numverts][0], &verts[numverts][1], &verts[numverts][2], - &norms[numverts][0], &norms[numverts][1], &norms[numverts][2]); - numverts++; - } - numverts--; - - printf("%d vertices, %d triangles\n", numverts, numverts - 2); - fclose(f); -} - -static void -draw_surface(void) -{ - int i; - -#if defined(GL_EXT_vertex_array) || defined(GL_VERSION_1_1) - if (use_vertex_arrays) { - glDrawArrays(GL_TRIANGLE_STRIP, 0, numverts); - } else { -#endif - glBegin(GL_TRIANGLE_STRIP); - for (i = 0; i < numverts; i++) { - glNormal3fv(norms[i]); - glVertex3fv(verts[i]); - } - glEnd(); -#if defined(GL_EXT_vertex_array) || defined(GL_VERSION_1_1) - } -#endif -} - -static void -draw1(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glPushMatrix(); - glRotatef(yrot, 0.0, 1.0, 0.0); - glRotatef(xrot, 1.0, 0.0, 0.0); - - draw_surface(); - - glPopMatrix(); - - if (doubleBuffer) { - glutSwapBuffers(); - } else { - glFlush(); - } -} - -static void -draw(void) -{ - if (speed_test) { - for (xrot = 0.0; xrot <= 360.0; xrot += 10.0) { - draw1(); - } - exit(0); - } else { - draw1(); - } -} - -static void -InitMaterials(void) -{ - static float ambient[] = - {0.1, 0.1, 0.1, 1.0}; - static float diffuse[] = - {0.5, 1.0, 1.0, 1.0}; - static float position0[] = - {0.0, 0.0, 20.0, 0.0}; - static float position1[] = - {0.0, 0.0, -20.0, 0.0}; - static float front_mat_shininess[] = - {60.0}; - static float front_mat_specular[] = - {0.2, 0.2, 0.2, 1.0}; - static float front_mat_diffuse[] = - {0.5, 0.28, 0.38, 1.0}; - static float lmodel_ambient[] = - {1.0, 1.0, 1.0, 1.0}; - static float lmodel_twoside[] = - {GL_FALSE}; - - glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); - glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); - glLightfv(GL_LIGHT0, GL_POSITION, position0); - glEnable(GL_LIGHT0); - - glLightfv(GL_LIGHT1, GL_AMBIENT, ambient); - glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse); - glLightfv(GL_LIGHT1, GL_POSITION, position1); - glEnable(GL_LIGHT1); - - glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); - glLightModelfv(GL_LIGHT_MODEL_TWO_SIDE, lmodel_twoside); - glEnable(GL_LIGHTING); - - glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, front_mat_shininess); - glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, front_mat_specular); - glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, front_mat_diffuse); -} - -static void -Init(void) -{ - glClearColor(0.0, 0.0, 0.0, 0.0); - - glShadeModel(GL_SMOOTH); - glEnable(GL_DEPTH_TEST); - - InitMaterials(); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glFrustum(-1.0, 1.0, -1.0, 1.0, 5, 25); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(0.0, 0.0, -6.0); - -#if defined(GL_EXT_vertex_array) || defined(GL_VERSION_1_1) - if (use_vertex_arrays) { - glVertexPointer(3, GL_FLOAT, 0, verts); - glNormalPointer(GL_FLOAT, 0, norms); - glEnable(GL_VERTEX_ARRAY); - glEnable(GL_NORMAL_ARRAY); - } -#endif -} - -/* ARGSUSED1 */ -static void -Key(unsigned char key, int x, int y) -{ - switch (key) { - case 27: /* Escape */ - exit(0); - break; - case 'S': - case 's': - smooth = !smooth; - if (smooth) { - glShadeModel(GL_SMOOTH); - } else { - glShadeModel(GL_FLAT); - } - break; - case 'L': - case 'l': - lighting = !lighting; - if (lighting) { - glEnable(GL_LIGHTING); - } else { - glDisable(GL_LIGHTING); - } - break; - default: - return; - } - glutPostRedisplay(); -} - -/* ARGSUSED1 */ -static void -Special(int key, int x, int y) -{ - switch (key) { - case GLUT_KEY_LEFT: - yrot -= 15.0; - break; - case GLUT_KEY_RIGHT: - yrot += 15.0; - break; - case GLUT_KEY_UP: - xrot += 15.0; - break; - case GLUT_KEY_DOWN: - xrot -= 15.0; - break; - default: - return; - } - glutPostRedisplay(); -} - -static GLboolean -Args(int argc, char **argv) -{ - GLint i; - - for (i = 1; i < argc; i++) { - if (strcmp(argv[i], "-sb") == 0) { - doubleBuffer = GL_FALSE; - } else if (strcmp(argv[i], "-db") == 0) { - doubleBuffer = GL_TRUE; - } else if (strcmp(argv[i], "-speed") == 0) { - speed_test = GL_TRUE; - doubleBuffer = GL_TRUE; - } else if (strcmp(argv[i], "-va") == 0) { - use_vertex_arrays = GL_TRUE; - } else { - printf("%s (Bad option).\n", argv[i]); - return GL_FALSE; - } - } - - return GL_TRUE; -} - -int -supportsOneDotOne(void) -{ - const GLubyte *version; - int major, minor; - - version = glGetString(GL_VERSION); - if (sscanf(version, "%d.%d", &major, &minor) == 2) - return major > 1 || minor >= 1; - return 0; /* OpenGL version string malformed! */ -} - -int -main(int argc, char **argv) -{ - int type; - - glutInitWindowSize(400, 400); - glutInit(&argc, argv); - read_surface("isosurf.dat"); - if (Args(argc, argv) == GL_FALSE) { - exit(1); - } - - type = GLUT_DEPTH; - type |= GLUT_RGB; - type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; - glutInitDisplayMode(type); - - glutCreateWindow("Isosurface"); - - /* Make sure server supports the vertex array extension */ - if (glutExtensionSupported("GL_EXT_vertex_array")) { - use_vertex_arrays = GL_FALSE; - } - if (supportsOneDotOne()) { - /* Always use vertex arrays if OpenGL 1.1 is supported! */ - use_vertex_arrays = GL_TRUE; - } - Init(); - - glutDisplayFunc(draw); - glutKeyboardFunc(Key); - glutSpecialFunc(Special); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/mesademos/isosurf.dat b/lib/glut-3.7.6/progs/mesademos/isosurf.dat deleted file mode 100644 index e6dfc8437..000000000 --- a/lib/glut-3.7.6/progs/mesademos/isosurf.dat +++ /dev/null @@ -1,7179 +0,0 @@ --1.000000 0.050200 0.254800 0.280000 0.504000 0.808000 --1.000000 0.061400 0.243900 0.248000 0.608000 0.744000 --0.973900 0.050200 0.243900 0.312000 0.448000 0.832000 --1.000000 0.100400 0.207000 0.040000 0.608000 0.784000 --0.950000 0.050200 0.232900 0.312000 0.424000 0.840000 --0.950000 0.100400 0.204500 0.176000 0.504000 0.840000 --0.900000 0.050200 0.202100 0.368000 0.256000 0.888000 --0.900000 0.100400 0.184100 0.296000 0.408000 0.856000 --0.865600 0.050200 0.182900 0.480000 0.256000 0.832000 --0.897500 0.100400 0.182900 0.392000 0.408000 0.816000 --0.850000 0.050200 0.170400 0.488000 0.296000 0.816000 --0.850000 0.100400 0.150400 0.488000 0.512000 0.696000 --0.800000 0.050200 0.139800 0.504000 0.392000 0.760000 --0.820700 0.100400 0.121900 0.496000 0.488000 0.704000 --0.800000 0.077200 0.121900 0.512000 0.416000 0.744000 --0.800000 0.100400 0.105500 0.480000 0.456000 0.736000 --0.781300 0.050200 0.121900 0.536000 0.400000 0.736000 --0.750000 0.100400 0.065100 0.488000 0.448000 0.736000 --0.750000 0.050200 0.097600 0.464000 0.408000 0.776000 --0.744800 0.100400 0.060900 0.496000 0.456000 0.728000 --0.700000 0.050200 0.061900 0.536000 0.368000 0.752000 --0.700000 0.051600 0.060900 0.528000 0.416000 0.728000 --0.699000 0.050200 0.060900 0.608000 0.360000 0.696000 --0.700000 0.100400 0.019100 0.504000 0.504000 0.688000 --0.650000 0.050200 0.008200 0.568000 0.384000 0.720000 --0.680200 0.100400 0.000000 0.600000 0.440000 0.656000 --0.650000 0.063100 0.000000 0.592000 0.392000 0.696000 --0.650000 0.100400 -0.043200 0.600000 0.608000 0.496000 --0.641800 0.050200 0.000000 0.616000 0.400000 0.664000 --0.638000 0.100400 -0.060900 0.672000 0.632000 0.368000 --0.600000 0.050200 -0.054100 0.640000 0.448000 0.616000 --0.600000 0.057600 -0.060900 0.728000 0.536000 0.408000 --0.594700 0.050200 -0.060900 0.744000 0.504000 0.416000 --0.600000 0.050200 -0.083400 0.800000 0.528000 -0.248000 --0.573200 0.000000 -0.060900 0.920000 0.296000 -0.248000 --0.600000 0.000000 -0.117700 0.848000 0.200000 -0.488000 --0.554400 -0.050200 -0.060900 0.944000 0.280000 0.128000 --0.600000 -0.008200 -0.121900 0.848000 0.208000 -0.472000 --0.586600 -0.050200 -0.121900 0.872000 0.224000 -0.424000 --0.600000 -0.050200 -0.162700 0.904000 0.232000 -0.344000 --0.578300 -0.100400 -0.121900 0.848000 0.312000 -0.424000 --0.600000 -0.077900 -0.182900 0.856000 0.208000 -0.464000 --0.594100 -0.100400 -0.182900 0.816000 0.296000 -0.480000 --0.600000 -0.100400 -0.193800 0.776000 0.296000 -0.544000 --0.561800 -0.150600 -0.182900 0.544000 0.784000 -0.280000 --0.600000 -0.150600 -0.229400 0.416000 0.744000 -0.512000 --0.550000 -0.155500 -0.182900 0.296000 0.920000 -0.232000 --0.600000 -0.160400 -0.243900 0.432000 0.688000 -0.576000 --0.550000 -0.172700 -0.243900 0.008000 0.856000 -0.512000 --0.600000 -0.200800 -0.299500 0.000000 0.872000 -0.480000 --0.550000 -0.200800 -0.303600 -0.040000 0.880000 -0.464000 --0.600000 -0.203400 -0.304800 0.008000 0.768000 -0.632000 --0.550000 -0.201300 -0.304800 -0.032000 0.864000 -0.488000 --0.600000 -0.251000 -0.360600 -0.120000 0.624000 -0.760000 --0.550000 -0.245600 -0.365800 -0.104000 0.680000 -0.720000 --0.576800 -0.251000 -0.365800 -0.136000 0.624000 -0.760000 --0.550000 -0.251000 -0.371400 -0.120000 0.616000 -0.768000 --0.600000 -0.256300 -0.365800 -0.112000 0.608000 -0.776000 --0.550000 -0.301200 -0.401000 0.000000 0.424000 -0.904000 --0.600000 -0.301200 -0.399100 0.008000 0.480000 -0.872000 --0.550000 -0.349500 -0.426800 0.056000 0.416000 -0.904000 --0.600000 -0.340300 -0.426800 0.032000 0.512000 -0.848000 --0.600000 -0.301200 -0.399100 0.008000 0.480000 -0.872000 --0.650000 -0.337200 -0.426800 0.016000 0.520000 -0.848000 --0.650000 -0.301200 -0.398600 0.000000 0.528000 -0.840000 --0.700000 -0.338200 -0.426800 -0.192000 0.592000 -0.776000 --0.700000 -0.301200 -0.401600 0.016000 0.504000 -0.856000 --0.736800 -0.351500 -0.426800 -0.240000 0.480000 -0.832000 --0.750000 -0.301200 -0.392900 -0.104000 0.352000 -0.928000 --0.750000 -0.351500 -0.422100 -0.312000 0.448000 -0.824000 --0.800000 -0.301200 -0.380800 -0.264000 0.104000 -0.952000 --0.800000 -0.351500 -0.388300 -0.664000 -0.152000 -0.728000 --0.826000 -0.301200 -0.365800 -0.648000 -0.448000 -0.600000 --0.812200 -0.351500 -0.365800 -0.856000 -0.296000 -0.408000 --0.850000 -0.301200 -0.321900 -0.728000 -0.616000 -0.280000 --0.821000 -0.351500 -0.304800 -0.824000 -0.504000 0.232000 --0.850000 -0.306900 -0.304800 -0.768000 -0.624000 0.072000 --0.807300 -0.351500 -0.243900 -0.864000 -0.472000 0.152000 --0.850000 -0.301200 -0.293400 -0.744000 -0.560000 0.336000 --0.834700 -0.301200 -0.243900 -0.840000 -0.504000 0.184000 --0.850000 -0.276800 -0.243900 -0.792000 -0.552000 0.248000 --0.831100 -0.301200 -0.182900 -0.848000 -0.520000 0.016000 --0.850000 -0.271300 -0.182900 -0.816000 -0.568000 0.032000 --0.832400 -0.301200 -0.121900 -0.840000 -0.528000 0.048000 --0.850000 -0.274400 -0.121900 -0.816000 -0.568000 0.008000 --0.826600 -0.301200 -0.060900 -0.824000 -0.544000 0.120000 --0.850000 -0.265600 -0.060900 -0.808000 -0.568000 0.104000 --0.817700 -0.301200 0.000000 -0.808000 -0.560000 0.168000 --0.850000 -0.254700 0.000000 -0.800000 -0.568000 0.168000 --0.805900 -0.301200 0.060900 -0.800000 -0.536000 0.232000 --0.850000 -0.251000 0.014600 -0.800000 -0.560000 0.176000 --0.838400 -0.251000 0.060900 -0.808000 -0.528000 0.248000 --0.850000 -0.233200 0.060900 -0.816000 -0.512000 0.248000 --0.819200 -0.251000 0.121900 -0.760000 -0.496000 0.400000 --0.850000 -0.203500 0.121900 -0.792000 -0.528000 0.288000 --0.800000 -0.251000 0.157900 -0.576000 -0.400000 0.696000 --0.850000 -0.200800 0.125700 -0.776000 -0.360000 0.504000 --0.800000 -0.206500 0.182900 -0.304000 -0.264000 0.912000 --0.803100 -0.200800 0.182900 -0.456000 -0.168000 0.864000 --0.800000 -0.200800 0.184500 -0.256000 -0.128000 0.952000 --0.836800 -0.150600 0.182900 -0.304000 -0.304000 0.896000 --0.800000 -0.150600 0.189500 -0.240000 -0.056000 0.960000 --0.850000 -0.137400 0.182900 -0.304000 -0.312000 0.896000 --0.800000 -0.100400 0.186900 0.104000 0.048000 0.992000 --0.850000 -0.100400 0.192600 -0.136000 -0.312000 0.936000 --0.800000 -0.063400 0.182900 0.240000 0.160000 0.952000 --0.850000 -0.050200 0.193400 0.200000 0.072000 0.968000 --0.809300 -0.050200 0.182900 0.232000 0.160000 0.952000 --0.850000 0.000000 0.186200 0.256000 0.144000 0.952000 --0.839600 0.000000 0.182900 0.264000 0.152000 0.944000 --0.850000 0.016800 0.182900 0.328000 0.184000 0.920000 --0.800000 0.000000 0.163200 0.400000 0.288000 0.864000 --0.850000 0.050200 0.170400 0.488000 0.296000 0.816000 --0.800000 0.050200 0.139800 0.504000 0.392000 0.760000 --0.800000 0.000000 0.163200 0.400000 0.288000 0.864000 --0.781300 0.050200 0.121900 0.536000 0.400000 0.736000 --0.750000 0.000000 0.129400 0.496000 0.360000 0.776000 --0.750000 0.012900 0.121900 0.496000 0.384000 0.768000 --0.740500 0.000000 0.121900 0.504000 0.352000 0.784000 --0.750000 0.050200 0.097600 0.464000 0.408000 0.776000 --0.700000 0.000000 0.089700 0.584000 0.336000 0.736000 --0.700000 0.050200 0.061900 0.536000 0.368000 0.752000 --0.666100 0.000000 0.060900 0.560000 0.376000 0.728000 --0.699000 0.050200 0.060900 0.608000 0.360000 0.696000 --0.650000 0.000000 0.045200 0.576000 0.400000 0.704000 --0.650000 0.050200 0.008200 0.568000 0.384000 0.720000 --0.609800 0.000000 0.000000 0.696000 0.384000 0.592000 --0.641800 0.050200 0.000000 0.616000 0.400000 0.664000 --0.600000 0.000000 -0.017800 0.736000 0.384000 0.544000 --0.600000 0.050200 -0.054100 0.640000 0.448000 0.616000 --0.573200 0.000000 -0.060900 0.920000 0.296000 -0.248000 --0.594700 0.050200 -0.060900 0.744000 0.504000 0.416000 --0.594700 0.050200 -0.060900 0.744000 0.504000 0.416000 --1.000000 0.050200 0.254800 0.280000 0.504000 0.808000 --1.000000 0.050200 0.254800 0.280000 0.504000 0.808000 --1.000000 0.000000 0.260200 0.424000 -0.312000 0.840000 --0.973900 0.050200 0.243900 0.312000 0.448000 0.832000 --0.976100 0.000000 0.243900 0.464000 -0.432000 0.768000 --0.950000 0.050200 0.232900 0.312000 0.424000 0.840000 --0.950000 0.000000 0.224500 0.344000 -0.144000 0.920000 --0.900000 0.050200 0.202100 0.368000 0.256000 0.888000 --0.900000 0.000000 0.204000 0.296000 0.088000 0.944000 --0.865600 0.050200 0.182900 0.480000 0.256000 0.832000 --0.850000 0.000000 0.186200 0.256000 0.144000 0.952000 --0.850000 0.016800 0.182900 0.328000 0.184000 0.920000 --0.865600 0.050200 0.182900 0.480000 0.256000 0.832000 --0.850000 0.050200 0.170400 0.488000 0.296000 0.816000 --0.850000 0.050200 0.170400 0.488000 0.296000 0.816000 --1.000000 0.000000 0.260200 0.424000 -0.312000 0.840000 --1.000000 0.000000 0.260200 0.424000 -0.312000 0.840000 --0.976100 0.000000 0.243900 0.464000 -0.432000 0.768000 --1.000000 -0.016700 0.243900 0.424000 -0.608000 0.656000 --0.950000 0.000000 0.224500 0.344000 -0.144000 0.920000 --1.000000 -0.050200 0.185900 -0.256000 -0.768000 0.576000 --0.950000 -0.050200 0.212200 0.160000 -0.384000 0.904000 --1.000000 -0.052000 0.182900 -0.336000 -0.760000 0.544000 --0.950000 -0.074300 0.182900 -0.344000 -0.776000 0.520000 --1.000000 -0.075600 0.121900 -0.328000 -0.896000 0.264000 --0.950000 -0.095300 0.121900 -0.400000 -0.864000 0.280000 --1.000000 -0.090800 0.060900 -0.320000 -0.912000 0.248000 --0.950000 -0.100400 0.101700 -0.400000 -0.872000 0.264000 --0.973400 -0.100400 0.060900 -0.344000 -0.904000 0.240000 --0.950000 -0.110600 0.060900 -0.432000 -0.856000 0.248000 --1.000000 -0.100400 0.014600 -0.304000 -0.920000 0.208000 --0.950000 -0.123700 0.000000 -0.488000 -0.840000 0.216000 --1.000000 -0.103100 0.000000 -0.304000 -0.920000 0.208000 --0.950000 -0.136200 -0.060900 -0.528000 -0.832000 0.152000 --1.000000 -0.112800 -0.060900 -0.376000 -0.912000 0.144000 --0.950000 -0.144800 -0.121900 -0.536000 -0.832000 0.120000 --1.000000 -0.120900 -0.121900 -0.400000 -0.904000 0.136000 --0.950000 -0.150600 -0.169000 -0.584000 -0.792000 0.136000 --1.000000 -0.129600 -0.182900 -0.400000 -0.904000 0.136000 --0.952800 -0.150600 -0.182900 -0.568000 -0.808000 0.136000 --1.000000 -0.135800 -0.243900 -0.400000 -0.904000 0.096000 --0.966700 -0.150600 -0.243900 -0.472000 -0.864000 0.152000 --1.000000 -0.142300 -0.304800 -0.328000 -0.456000 -0.824000 --0.989000 -0.150600 -0.304800 -0.440000 -0.624000 -0.640000 --1.000000 -0.100400 -0.332000 -0.256000 -0.392000 -0.880000 --0.950000 -0.150600 -0.330800 -0.416000 -0.432000 -0.792000 --0.950000 -0.100400 -0.349400 -0.088000 -0.160000 -0.976000 --0.900000 -0.150600 -0.338300 -0.216000 -0.104000 -0.968000 --0.900000 -0.100400 -0.346700 0.112000 -0.048000 -0.984000 --0.850000 -0.150600 -0.349400 0.072000 0.056000 -0.992000 --0.850000 -0.100400 -0.332400 0.280000 0.112000 -0.952000 --0.800000 -0.150600 -0.340500 0.312000 0.288000 -0.896000 --0.800000 -0.100400 -0.313000 0.368000 0.216000 -0.896000 --0.750000 -0.150600 -0.317800 0.416000 0.384000 -0.816000 --0.785000 -0.100400 -0.304800 0.328000 0.224000 -0.912000 --0.750000 -0.129200 -0.304800 0.392000 0.376000 -0.832000 --0.750000 -0.100400 -0.291100 0.336000 0.256000 -0.896000 --0.731900 -0.150600 -0.304800 0.424000 0.400000 -0.808000 --0.700000 -0.100400 -0.274700 0.392000 0.112000 -0.904000 --0.700000 -0.150600 -0.284500 0.376000 0.392000 -0.832000 --0.650000 -0.100400 -0.251900 0.448000 0.224000 -0.856000 --0.650000 -0.150600 -0.267500 0.376000 0.464000 -0.792000 --0.638400 -0.100400 -0.243900 0.560000 0.160000 -0.808000 --0.612700 -0.150600 -0.243900 0.496000 0.576000 -0.640000 --0.600000 -0.100400 -0.193800 0.776000 0.296000 -0.544000 --0.600000 -0.150600 -0.229400 0.416000 0.744000 -0.512000 --0.612700 -0.150600 -0.243900 0.496000 0.576000 -0.640000 --0.600000 -0.160400 -0.243900 0.432000 0.688000 -0.576000 --0.650000 -0.150600 -0.267500 0.376000 0.464000 -0.792000 --0.600000 -0.200800 -0.299500 0.000000 0.872000 -0.480000 --0.650000 -0.200800 -0.303800 0.136000 0.680000 -0.712000 --0.600000 -0.203400 -0.304800 0.008000 0.768000 -0.632000 --0.650000 -0.201600 -0.304800 0.104000 0.688000 -0.704000 --0.600000 -0.251000 -0.360600 -0.120000 0.624000 -0.760000 --0.650000 -0.251000 -0.354800 0.152000 0.632000 -0.752000 --0.600000 -0.256300 -0.365800 -0.112000 0.608000 -0.776000 --0.650000 -0.261300 -0.365800 0.088000 0.568000 -0.808000 --0.600000 -0.301200 -0.399100 0.008000 0.480000 -0.872000 --0.650000 -0.301200 -0.398600 0.000000 0.528000 -0.840000 --0.650000 -0.261300 -0.365800 0.088000 0.568000 -0.808000 --0.700000 -0.301200 -0.401600 0.016000 0.504000 -0.856000 --0.700000 -0.252100 -0.365800 0.096000 0.552000 -0.824000 --0.750000 -0.301200 -0.392900 -0.104000 0.352000 -0.928000 --0.707800 -0.251000 -0.365800 0.064000 0.432000 -0.896000 --0.750000 -0.251000 -0.369800 0.056000 0.280000 -0.952000 --0.750000 -0.240500 -0.365800 0.056000 0.272000 -0.952000 --0.800000 -0.251000 -0.370300 -0.064000 0.200000 -0.976000 --0.800000 -0.234100 -0.365800 -0.112000 0.264000 -0.952000 --0.828000 -0.251000 -0.365800 -0.248000 0.216000 -0.936000 --0.800000 -0.200800 -0.355700 0.080000 0.256000 -0.960000 --0.850000 -0.251000 -0.359600 -0.320000 0.248000 -0.912000 --0.850000 -0.200800 -0.351200 -0.168000 0.112000 -0.976000 --0.891700 -0.251000 -0.304800 -0.808000 -0.512000 -0.264000 --0.900000 -0.200800 -0.331500 -0.576000 -0.328000 -0.736000 --0.900000 -0.236500 -0.304800 -0.680000 -0.456000 -0.560000 --0.931500 -0.200800 -0.304800 -0.648000 -0.520000 -0.544000 --0.900000 -0.212400 -0.243900 -0.672000 -0.712000 0.176000 --0.914100 -0.200800 -0.243900 -0.664000 -0.728000 0.128000 --0.900000 -0.206900 -0.182900 -0.648000 -0.752000 0.056000 --0.907400 -0.200800 -0.182900 -0.688000 -0.712000 0.072000 --0.900000 -0.204500 -0.121900 -0.688000 -0.712000 0.104000 --0.903800 -0.200800 -0.121900 -0.696000 -0.704000 0.120000 --0.900000 -0.200800 -0.096200 -0.752000 -0.632000 0.128000 --0.943100 -0.150600 -0.121900 -0.672000 -0.720000 0.120000 --0.900000 -0.192500 -0.060900 -0.856000 -0.488000 0.144000 --0.932400 -0.150600 -0.060900 -0.688000 -0.696000 0.176000 --0.900000 -0.169600 0.000000 -0.800000 -0.552000 0.224000 --0.915700 -0.150600 0.000000 -0.696000 -0.672000 0.232000 --0.900000 -0.150600 0.057700 -0.744000 -0.616000 0.232000 --0.950000 -0.123700 0.000000 -0.488000 -0.840000 0.216000 --0.900000 -0.149700 0.060900 -0.696000 -0.664000 0.232000 --0.950000 -0.110600 0.060900 -0.432000 -0.856000 0.248000 --0.900000 -0.127600 0.121900 -0.608000 -0.704000 0.344000 --0.950000 -0.100400 0.101700 -0.400000 -0.872000 0.264000 --0.939400 -0.100400 0.121900 -0.456000 -0.816000 0.336000 --0.950000 -0.095300 0.121900 -0.400000 -0.864000 0.280000 --0.900000 -0.100400 0.174900 -0.400000 -0.624000 0.656000 --0.950000 -0.074300 0.182900 -0.344000 -0.776000 0.520000 --0.900000 -0.094400 0.182900 -0.312000 -0.608000 0.720000 --0.950000 -0.050200 0.212200 0.160000 -0.384000 0.904000 --0.900000 -0.050200 0.208600 0.200000 -0.168000 0.960000 --0.950000 0.000000 0.224500 0.344000 -0.144000 0.920000 --0.900000 0.000000 0.204000 0.296000 0.088000 0.944000 --0.900000 -0.050200 0.208600 0.200000 -0.168000 0.960000 --0.850000 0.000000 0.186200 0.256000 0.144000 0.952000 --0.850000 -0.050200 0.193400 0.200000 0.072000 0.968000 --0.900000 -0.050200 0.208600 0.200000 -0.168000 0.960000 --0.850000 -0.100400 0.192600 -0.136000 -0.312000 0.936000 --0.900000 -0.094400 0.182900 -0.312000 -0.608000 0.720000 --0.886800 -0.100400 0.182900 -0.288000 -0.576000 0.752000 --0.900000 -0.100400 0.174900 -0.400000 -0.624000 0.656000 --0.850000 -0.137400 0.182900 -0.304000 -0.312000 0.896000 --0.900000 -0.127600 0.121900 -0.608000 -0.704000 0.344000 --0.850000 -0.150600 0.175600 -0.632000 -0.392000 0.664000 --0.878400 -0.150600 0.121900 -0.736000 -0.560000 0.368000 --0.850000 -0.200800 0.125700 -0.776000 -0.360000 0.504000 --0.851500 -0.200800 0.121900 -0.832000 -0.360000 0.408000 --0.850000 -0.203500 0.121900 -0.792000 -0.528000 0.288000 --0.869300 -0.200800 0.060900 -0.824000 -0.496000 0.248000 --0.850000 -0.233200 0.060900 -0.816000 -0.512000 0.248000 --0.882700 -0.200800 0.000000 -0.840000 -0.496000 0.192000 --0.850000 -0.251000 0.014600 -0.800000 -0.560000 0.176000 --0.852600 -0.251000 0.000000 -0.800000 -0.568000 0.168000 --0.850000 -0.254700 0.000000 -0.800000 -0.568000 0.168000 --0.860100 -0.251000 -0.060900 -0.808000 -0.568000 0.112000 --0.850000 -0.265600 -0.060900 -0.808000 -0.568000 0.104000 --0.866600 -0.251000 -0.121900 -0.808000 -0.576000 0.072000 --0.850000 -0.274400 -0.121900 -0.816000 -0.568000 0.008000 --0.864200 -0.251000 -0.182900 -0.800000 -0.592000 0.000000 --0.850000 -0.271300 -0.182900 -0.816000 -0.568000 0.032000 --0.869200 -0.251000 -0.243900 -0.768000 -0.600000 0.200000 --0.850000 -0.276800 -0.243900 -0.792000 -0.552000 0.248000 --0.891700 -0.251000 -0.304800 -0.808000 -0.512000 -0.264000 --0.850000 -0.301200 -0.293400 -0.744000 -0.560000 0.336000 --0.854400 -0.301200 -0.304800 -0.776000 -0.608000 0.112000 --0.850000 -0.306900 -0.304800 -0.768000 -0.624000 0.072000 --0.850000 -0.301200 -0.321900 -0.728000 -0.616000 -0.280000 --0.854400 -0.301200 -0.304800 -0.776000 -0.608000 0.112000 --0.850000 -0.251000 -0.359600 -0.320000 0.248000 -0.912000 --0.891700 -0.251000 -0.304800 -0.808000 -0.512000 -0.264000 --0.891700 -0.251000 -0.304800 -0.808000 -0.512000 -0.264000 --1.000000 0.100400 0.207000 0.040000 0.608000 0.784000 --1.000000 0.100400 0.207000 0.040000 0.608000 0.784000 --0.950000 0.100400 0.204500 0.176000 0.504000 0.840000 --1.000000 0.136100 0.182900 0.152000 0.600000 0.776000 --0.950000 0.127100 0.182900 0.248000 0.536000 0.800000 --1.000000 0.150600 0.170300 0.208000 0.568000 0.792000 --0.950000 0.150600 0.154300 0.208000 0.640000 0.736000 --1.000000 0.192500 0.121900 0.192000 0.664000 0.720000 --0.950000 0.178500 0.121900 0.272000 0.648000 0.704000 --1.000000 0.200800 0.112700 0.192000 0.656000 0.720000 --0.950000 0.200800 0.096100 0.208000 0.672000 0.704000 --1.000000 0.241600 0.060900 0.248000 0.768000 0.584000 --0.950000 0.226300 0.060900 0.264000 0.760000 0.584000 --1.000000 0.251000 0.045400 0.264000 0.768000 0.568000 --0.950000 0.251000 0.016800 0.288000 0.808000 0.504000 --1.000000 0.274600 0.000000 0.264000 0.848000 0.448000 --0.950000 0.258900 0.000000 0.296000 0.848000 0.432000 --1.000000 0.294800 -0.060900 0.312000 0.944000 0.080000 --0.950000 0.277400 -0.060900 0.336000 0.928000 0.080000 --1.000000 0.286500 -0.121900 0.328000 0.872000 -0.344000 --0.950000 0.267200 -0.121900 0.344000 0.864000 -0.336000 --1.000000 0.256900 -0.182900 0.288000 0.752000 -0.584000 --0.950000 0.251000 -0.157200 0.320000 0.808000 -0.480000 --0.985000 0.251000 -0.182900 0.288000 0.752000 -0.576000 --0.950000 0.237800 -0.182900 0.296000 0.760000 -0.568000 --1.000000 0.251000 -0.191500 0.280000 0.728000 -0.616000 --0.950000 0.200800 -0.231900 0.272000 0.640000 -0.704000 --1.000000 0.207900 -0.243900 0.232000 0.640000 -0.728000 --0.980800 0.200800 -0.243900 0.232000 0.632000 -0.736000 --1.000000 0.200800 -0.251300 0.232000 0.624000 -0.736000 --0.950000 0.189400 -0.243900 0.264000 0.616000 -0.728000 --1.000000 0.150600 -0.296000 0.168000 0.544000 -0.816000 --0.950000 0.150600 -0.281200 0.240000 0.600000 -0.752000 --1.000000 0.137800 -0.304800 0.104000 0.472000 -0.872000 --0.950000 0.126000 -0.304800 0.168000 0.528000 -0.824000 --1.000000 0.100400 -0.326700 0.072000 0.384000 -0.912000 --0.950000 0.100400 -0.325900 0.192000 0.384000 -0.896000 --1.000000 0.050200 -0.349300 0.080000 0.216000 -0.968000 --0.950000 0.050200 -0.340200 0.184000 0.072000 -0.976000 --1.000000 0.000000 -0.357700 0.216000 -0.064000 -0.968000 --0.950000 0.000000 -0.337100 0.184000 -0.088000 -0.976000 --1.000000 -0.050200 -0.339100 0.152000 -0.176000 -0.968000 --0.950000 -0.050200 -0.337400 0.088000 0.008000 -0.992000 --1.000000 -0.100400 -0.332000 -0.256000 -0.392000 -0.880000 --0.950000 -0.100400 -0.349400 -0.088000 -0.160000 -0.976000 --0.950000 -0.050200 -0.337400 0.088000 0.008000 -0.992000 --0.900000 -0.100400 -0.346700 0.112000 -0.048000 -0.984000 --0.900000 -0.050200 -0.330000 0.160000 0.128000 -0.976000 --0.850000 -0.100400 -0.332400 0.280000 0.112000 -0.952000 --0.850000 -0.050200 -0.323400 0.248000 0.176000 -0.944000 --0.800000 -0.100400 -0.313000 0.368000 0.216000 -0.896000 --0.808200 -0.050200 -0.304800 0.280000 0.136000 -0.944000 --0.800000 -0.066700 -0.304800 0.296000 0.144000 -0.936000 --0.800000 -0.050200 -0.302200 0.264000 0.120000 -0.952000 --0.785000 -0.100400 -0.304800 0.328000 0.224000 -0.912000 --0.750000 -0.050200 -0.287100 0.288000 0.040000 -0.952000 --0.750000 -0.100400 -0.291100 0.336000 0.256000 -0.896000 --0.700000 -0.050200 -0.272000 0.360000 0.104000 -0.920000 --0.700000 -0.100400 -0.274700 0.392000 0.112000 -0.904000 --0.650000 -0.050200 -0.249300 0.496000 0.208000 -0.840000 --0.650000 -0.100400 -0.251900 0.448000 0.224000 -0.856000 --0.642900 -0.050200 -0.243900 0.560000 0.208000 -0.792000 --0.638400 -0.100400 -0.243900 0.560000 0.160000 -0.808000 --0.606100 -0.050200 -0.182900 0.864000 0.248000 -0.424000 --0.600000 -0.100400 -0.193800 0.776000 0.296000 -0.544000 --0.600000 -0.077900 -0.182900 0.856000 0.208000 -0.464000 --0.606100 -0.050200 -0.182900 0.864000 0.248000 -0.424000 --0.600000 -0.050200 -0.162700 0.904000 0.232000 -0.344000 --0.621400 0.000000 -0.182900 0.848000 0.280000 -0.440000 --0.600000 -0.008200 -0.121900 0.848000 0.208000 -0.472000 --0.601900 0.000000 -0.121900 0.848000 0.208000 -0.472000 --0.600000 0.000000 -0.117700 0.848000 0.200000 -0.488000 --0.614300 0.050200 -0.121900 0.720000 0.480000 -0.480000 --0.600000 0.050200 -0.083400 0.800000 0.528000 -0.248000 --0.650000 0.089500 -0.121900 0.728000 0.552000 -0.384000 --0.600000 0.057600 -0.060900 0.728000 0.536000 0.408000 --0.650000 0.100400 -0.098000 0.720000 0.624000 -0.288000 --0.638000 0.100400 -0.060900 0.672000 0.632000 0.368000 --0.650000 0.112000 -0.060900 0.672000 0.704000 0.200000 --0.650000 0.100400 -0.043200 0.600000 0.608000 0.496000 --0.689800 0.150600 -0.060900 0.640000 0.736000 0.192000 --0.680200 0.100400 0.000000 0.600000 0.440000 0.656000 --0.700000 0.150600 -0.043600 0.552000 0.712000 0.424000 --0.700000 0.121800 0.000000 0.536000 0.544000 0.632000 --0.734000 0.150600 0.000000 0.496000 0.640000 0.576000 --0.700000 0.100400 0.019100 0.504000 0.504000 0.688000 --0.750000 0.150600 0.014500 0.472000 0.624000 0.608000 --0.744800 0.100400 0.060900 0.496000 0.456000 0.728000 --0.750000 0.106000 0.060900 0.496000 0.464000 0.728000 --0.750000 0.100400 0.065100 0.488000 0.448000 0.736000 --0.796300 0.150600 0.060900 0.512000 0.584000 0.616000 --0.800000 0.100400 0.105500 0.480000 0.456000 0.736000 --0.800000 0.150600 0.064100 0.424000 0.560000 0.704000 --0.820700 0.100400 0.121900 0.496000 0.488000 0.704000 --0.850000 0.150600 0.098600 0.360000 0.600000 0.704000 --0.850000 0.127100 0.121900 0.424000 0.560000 0.704000 --0.892900 0.150600 0.121900 0.360000 0.624000 0.680000 --0.850000 0.100400 0.150400 0.488000 0.512000 0.696000 --0.900000 0.150600 0.126400 0.344000 0.632000 0.688000 --0.897500 0.100400 0.182900 0.392000 0.408000 0.816000 --0.900000 0.101900 0.182900 0.304000 0.552000 0.768000 --0.900000 0.100400 0.184100 0.296000 0.408000 0.856000 --0.950000 0.127100 0.182900 0.248000 0.536000 0.800000 --0.950000 0.100400 0.204500 0.176000 0.504000 0.840000 --0.950000 0.100400 0.204500 0.176000 0.504000 0.840000 --0.886800 -0.100400 0.182900 -0.288000 -0.576000 0.752000 --0.886800 -0.100400 0.182900 -0.288000 -0.576000 0.752000 --0.850000 -0.100400 0.192600 -0.136000 -0.312000 0.936000 --0.850000 -0.137400 0.182900 -0.304000 -0.312000 0.896000 --0.850000 -0.137400 0.182900 -0.304000 -0.312000 0.896000 --0.800000 -0.100400 0.186900 0.104000 0.048000 0.992000 --0.800000 -0.100400 0.186900 0.104000 0.048000 0.992000 --0.800000 -0.063400 0.182900 0.240000 0.160000 0.952000 --0.776900 -0.100400 0.182900 0.184000 0.120000 0.968000 --0.800000 -0.050200 0.179900 0.264000 0.176000 0.944000 --0.750000 -0.100400 0.174700 0.320000 0.192000 0.920000 --0.750000 -0.050200 0.155100 0.464000 0.288000 0.832000 --0.700000 -0.100400 0.138900 0.488000 0.288000 0.816000 --0.708600 -0.050200 0.121900 0.496000 0.344000 0.784000 --0.700000 -0.062200 0.121900 0.504000 0.344000 0.784000 --0.700000 -0.050200 0.115300 0.496000 0.344000 0.792000 --0.677900 -0.100400 0.121900 0.528000 0.328000 0.776000 --0.650000 -0.050200 0.076400 0.576000 0.320000 0.744000 --0.650000 -0.100400 0.096100 0.592000 0.288000 0.744000 --0.635700 -0.050200 0.060900 0.640000 0.304000 0.696000 --0.612900 -0.100400 0.060900 0.624000 0.376000 0.672000 --0.600000 -0.050200 0.018400 0.648000 0.320000 0.688000 --0.600000 -0.100400 0.044600 0.672000 0.336000 0.656000 --0.584800 -0.050200 0.000000 0.744000 0.336000 0.568000 --0.565600 -0.100400 0.000000 0.744000 0.440000 0.496000 --0.554400 -0.050200 -0.060900 0.944000 0.280000 0.128000 --0.550000 -0.100400 -0.036900 0.792000 0.376000 0.464000 --0.550000 -0.066800 -0.060900 0.944000 0.320000 -0.008000 --0.533200 -0.100400 -0.060900 0.712000 0.696000 -0.024000 --0.550000 -0.100400 -0.079500 0.552000 0.552000 -0.616000 --0.500000 -0.119500 -0.060900 -0.160000 0.976000 0.112000 --0.550000 -0.145600 -0.121900 0.512000 0.792000 -0.312000 --0.500000 -0.144400 -0.121900 -0.376000 0.880000 -0.280000 --0.550000 -0.150600 -0.142400 0.376000 0.896000 -0.200000 --0.500000 -0.150600 -0.154000 -0.424000 0.880000 -0.160000 --0.550000 -0.155500 -0.182900 0.296000 0.920000 -0.232000 --0.500000 -0.154300 -0.182900 -0.320000 0.920000 -0.176000 --0.550000 -0.172700 -0.243900 0.008000 0.856000 -0.512000 --0.500000 -0.169200 -0.243900 -0.328000 0.880000 -0.312000 --0.550000 -0.200800 -0.303600 -0.040000 0.880000 -0.464000 --0.500000 -0.196700 -0.304800 -0.120000 0.848000 -0.504000 --0.544700 -0.200800 -0.304800 -0.080000 0.824000 -0.552000 --0.500000 -0.200800 -0.313000 -0.112000 0.824000 -0.544000 --0.550000 -0.201300 -0.304800 -0.032000 0.864000 -0.488000 --0.500000 -0.238600 -0.365800 -0.072000 0.656000 -0.744000 --0.550000 -0.245600 -0.365800 -0.104000 0.680000 -0.720000 --0.500000 -0.251000 -0.377000 -0.032000 0.528000 -0.840000 --0.550000 -0.251000 -0.371400 -0.120000 0.616000 -0.768000 --0.500000 -0.301200 -0.402500 0.040000 0.344000 -0.936000 --0.550000 -0.301200 -0.401000 0.000000 0.424000 -0.904000 --0.500000 -0.351500 -0.423900 0.056000 0.504000 -0.856000 --0.550000 -0.349500 -0.426800 0.056000 0.416000 -0.904000 --0.538500 -0.351500 -0.426800 0.048000 0.480000 -0.872000 --0.500000 -0.351500 -0.423900 0.056000 0.504000 -0.856000 --0.500000 -0.355300 -0.426800 0.056000 0.520000 -0.848000 --0.450000 -0.351500 -0.418600 0.080000 0.512000 -0.848000 --0.450000 -0.362400 -0.426800 0.064000 0.520000 -0.848000 --0.400000 -0.351500 -0.411400 0.000000 0.616000 -0.784000 --0.400000 -0.368700 -0.426800 0.024000 0.560000 -0.824000 --0.350000 -0.351500 -0.416300 -0.176000 0.600000 -0.768000 --0.350000 -0.360100 -0.426800 -0.128000 0.680000 -0.712000 --0.319100 -0.351500 -0.426800 -0.216000 0.568000 -0.784000 --0.350000 -0.351500 -0.416300 -0.176000 0.600000 -0.768000 --0.300000 -0.341100 -0.426800 -0.128000 0.536000 -0.832000 --0.350000 -0.301200 -0.377400 0.232000 0.208000 -0.944000 --0.300000 -0.301200 -0.369600 0.320000 0.544000 -0.768000 --0.350000 -0.251000 -0.367200 0.240000 0.168000 -0.952000 --0.300000 -0.296900 -0.365800 0.296000 0.528000 -0.784000 --0.345700 -0.251000 -0.365800 0.320000 0.336000 -0.880000 --0.300000 -0.251000 -0.348000 0.192000 0.248000 -0.944000 --0.350000 -0.248400 -0.365800 0.184000 0.424000 -0.880000 --0.300000 -0.200800 -0.340600 0.016000 0.280000 -0.952000 --0.350000 -0.200800 -0.339000 0.200000 0.416000 -0.880000 --0.300000 -0.150600 -0.319300 -0.256000 0.480000 -0.832000 --0.350000 -0.159400 -0.304800 -0.248000 0.528000 -0.808000 --0.331500 -0.150600 -0.304800 -0.256000 0.464000 -0.840000 --0.350000 -0.150600 -0.298700 -0.264000 0.464000 -0.840000 --0.300000 -0.118900 -0.304800 -0.376000 0.264000 -0.880000 --0.350000 -0.100400 -0.248500 -0.576000 0.440000 -0.680000 --0.300000 -0.100400 -0.298100 -0.480000 0.288000 -0.824000 --0.350000 -0.093900 -0.243900 -0.600000 0.408000 -0.680000 --0.300000 -0.050200 -0.270300 -0.824000 0.232000 -0.512000 --0.321700 -0.050200 -0.243900 -0.656000 0.344000 -0.656000 --0.300000 0.000000 -0.248500 -0.656000 0.560000 -0.488000 --0.301700 0.000000 -0.243900 -0.744000 0.392000 -0.536000 --0.300000 0.001800 -0.243900 -0.496000 0.680000 -0.520000 --0.340600 0.000000 -0.182900 -0.696000 0.480000 -0.520000 --0.300000 0.050200 -0.185100 -0.648000 0.560000 -0.504000 --0.301000 0.050200 -0.182900 -0.704000 0.472000 -0.512000 --0.300000 0.052000 -0.182900 -0.664000 0.464000 -0.568000 --0.335400 0.050200 -0.121900 -0.752000 0.472000 -0.456000 --0.300000 0.100400 -0.141500 -0.560000 0.512000 -0.640000 --0.317300 0.100400 -0.121900 -0.712000 0.264000 -0.640000 --0.300000 0.144000 -0.121900 -0.728000 0.496000 -0.456000 --0.350000 0.100400 -0.076700 -0.736000 0.256000 -0.616000 --0.300000 0.150600 -0.105900 -0.768000 0.536000 -0.320000 --0.350000 0.148000 -0.060900 -0.504000 0.552000 0.656000 --0.346000 0.150600 -0.060900 -0.768000 -0.144000 0.616000 --0.350000 0.100400 -0.017600 -0.744000 0.352000 0.552000 --0.300000 0.150600 -0.036000 -0.360000 0.064000 0.920000 --0.321000 0.100400 0.000000 -0.264000 0.416000 0.864000 --0.300000 0.112500 0.000000 -0.064000 0.472000 0.872000 --0.300000 0.100400 0.006400 -0.200000 0.408000 0.880000 --0.250000 0.104200 0.000000 0.144000 0.480000 0.856000 --0.250000 0.100400 0.002600 0.144000 0.496000 0.848000 --0.238500 0.100400 0.000000 0.152000 0.496000 0.848000 --0.250000 0.050200 0.048300 0.000000 0.552000 0.832000 --0.200000 0.089800 0.000000 0.216000 0.544000 0.800000 --0.200000 0.050200 0.037800 0.512000 0.448000 0.720000 --0.163800 0.050200 0.000000 0.704000 0.216000 0.664000 --0.200000 0.020500 0.060900 0.664000 0.440000 0.600000 --0.150800 0.000000 0.000000 0.744000 0.072000 0.656000 --0.190300 0.000000 0.060900 0.816000 0.200000 0.536000 --0.152800 -0.050200 0.000000 0.848000 0.032000 0.520000 --0.193200 -0.050200 0.060900 0.808000 0.008000 0.584000 --0.150600 -0.100400 0.000000 0.800000 0.040000 0.592000 --0.190200 -0.100400 0.060900 0.752000 -0.248000 0.600000 --0.150000 -0.104300 0.000000 0.496000 0.120000 0.848000 --0.200000 -0.121800 0.060900 0.728000 -0.328000 0.592000 --0.150000 -0.150600 0.010200 0.376000 0.208000 0.896000 --0.200000 -0.150600 0.042600 0.640000 -0.096000 0.752000 --0.150000 -0.200800 0.013600 0.104000 0.200000 0.968000 --0.200000 -0.200800 0.045500 0.568000 -0.152000 0.808000 --0.150000 -0.251000 0.002400 -0.056000 -0.176000 0.976000 --0.200000 -0.251000 0.018200 0.408000 -0.392000 0.816000 --0.150000 -0.301200 0.010200 -0.304000 -0.280000 0.904000 --0.200000 -0.279600 0.000000 -0.016000 -0.496000 0.864000 --0.169100 -0.301200 0.000000 -0.376000 -0.392000 0.832000 --0.200000 -0.301200 -0.017500 -0.064000 -0.432000 0.896000 --0.150000 -0.346200 0.000000 -0.392000 -0.160000 0.904000 --0.200000 -0.351500 -0.031500 -0.320000 -0.128000 0.936000 --0.150000 -0.351500 -0.001100 -0.192000 -0.352000 0.912000 --0.200000 -0.401700 -0.023400 -0.056000 -0.008000 0.992000 --0.150000 -0.401700 -0.019000 0.408000 -0.232000 0.880000 --0.200000 -0.451900 -0.018000 0.376000 -0.112000 0.912000 --0.150000 -0.451900 -0.041900 0.560000 -0.440000 0.696000 --0.200000 -0.502100 -0.039000 0.512000 -0.608000 0.592000 --0.150000 -0.470000 -0.060900 0.568000 -0.552000 0.600000 --0.181900 -0.502100 -0.060900 0.504000 -0.680000 0.520000 --0.150000 -0.502100 -0.111600 0.592000 -0.752000 0.280000 --0.200000 -0.511900 -0.060900 0.416000 -0.800000 0.424000 --0.150000 -0.505100 -0.121900 0.584000 -0.768000 0.240000 --0.200000 -0.534300 -0.121900 0.456000 -0.832000 0.296000 --0.150000 -0.510100 -0.182900 0.616000 -0.760000 0.168000 --0.200000 -0.549300 -0.182900 0.504000 -0.784000 0.344000 --0.150000 -0.530700 -0.243900 0.632000 -0.664000 0.392000 --0.200000 -0.552300 -0.190900 0.520000 -0.768000 0.360000 --0.172800 -0.552300 -0.243900 0.592000 -0.568000 0.560000 --0.200000 -0.579600 -0.243900 0.568000 -0.648000 0.496000 --0.150000 -0.552300 -0.270100 0.544000 -0.504000 0.656000 --0.200000 -0.602500 -0.268600 0.488000 -0.432000 0.752000 --0.150000 -0.602500 -0.302600 0.392000 -0.240000 0.880000 --0.200000 -0.652700 -0.286600 0.488000 -0.272000 0.824000 --0.150000 -0.609400 -0.304800 0.840000 -0.512000 0.152000 --0.171500 -0.652700 -0.304800 0.576000 -0.304000 0.752000 --0.150000 -0.602500 -0.307600 0.456000 -0.280000 -0.840000 --0.200000 -0.652700 -0.326500 0.488000 -0.272000 -0.824000 --0.200000 -0.602500 -0.345500 0.488000 -0.272000 -0.824000 --0.250000 -0.652700 -0.361600 0.240000 -0.216000 -0.944000 --0.229500 -0.602500 -0.365800 0.408000 -0.240000 -0.872000 --0.250000 -0.639500 -0.365800 0.216000 -0.224000 -0.944000 --0.250000 -0.602500 -0.376000 0.360000 -0.328000 -0.872000 --0.282800 -0.652700 -0.365800 0.080000 -0.160000 -0.976000 --0.300000 -0.602500 -0.397300 -0.248000 -0.488000 -0.832000 --0.300000 -0.652700 -0.367500 0.064000 -0.112000 -0.984000 --0.328400 -0.602500 -0.365800 -0.832000 -0.248000 -0.488000 --0.350000 -0.652700 -0.376000 0.560000 0.160000 -0.808000 --0.350000 -0.629600 -0.365800 0.056000 0.640000 -0.760000 --0.400000 -0.652700 -0.368100 -0.128000 -0.872000 -0.456000 --0.357100 -0.602500 -0.365800 0.904000 0.256000 -0.312000 --0.400000 -0.621700 -0.426800 0.392000 -0.856000 -0.304000 --0.370300 -0.602500 -0.426800 0.624000 -0.760000 -0.160000 --0.357100 -0.602500 -0.365800 0.904000 0.256000 -0.312000 --0.350000 -0.582100 -0.426800 0.344000 -0.808000 -0.456000 --0.350000 -0.585900 -0.365800 0.168000 -0.792000 -0.576000 --0.300000 -0.582000 -0.426800 0.336000 -0.608000 -0.712000 --0.328400 -0.602500 -0.365800 -0.832000 -0.248000 -0.488000 --0.300000 -0.602500 -0.397300 -0.248000 -0.488000 -0.832000 --0.300000 -0.582000 -0.426800 0.336000 -0.608000 -0.712000 --0.250000 -0.602500 -0.376000 0.360000 -0.328000 -0.872000 --0.275900 -0.552300 -0.426800 0.528000 -0.480000 -0.696000 --0.250000 -0.552300 -0.402600 0.504000 -0.312000 -0.792000 --0.250000 -0.526200 -0.426800 0.576000 -0.448000 -0.672000 --0.200000 -0.552300 -0.367100 0.360000 -0.232000 -0.896000 --0.235700 -0.502100 -0.426800 0.696000 -0.464000 -0.536000 --0.200000 -0.502100 -0.370700 0.184000 -0.352000 -0.912000 --0.200000 -0.459900 -0.426800 0.560000 -0.592000 -0.576000 --0.150000 -0.502100 -0.367300 0.088000 -0.320000 -0.936000 --0.191200 -0.451900 -0.426800 0.664000 -0.480000 -0.560000 --0.150000 -0.451900 -0.368100 0.456000 -0.056000 -0.880000 --0.194300 -0.401700 -0.426800 0.792000 0.416000 -0.432000 --0.150000 -0.417500 -0.365800 0.544000 0.056000 -0.832000 --0.151700 -0.401700 -0.365800 0.568000 0.104000 -0.808000 --0.150000 -0.401700 -0.364300 0.552000 0.080000 -0.824000 --0.200000 -0.365300 -0.365800 0.504000 0.768000 -0.376000 --0.150000 -0.351500 -0.350300 0.512000 0.192000 -0.832000 --0.200000 -0.351500 -0.343300 0.312000 0.640000 -0.696000 --0.150000 -0.301200 -0.318500 -0.024000 0.504000 -0.856000 --0.200000 -0.301200 -0.313400 0.328000 0.152000 -0.928000 --0.150000 -0.286300 -0.304800 -0.184000 0.480000 -0.848000 --0.200000 -0.251000 -0.307600 0.408000 0.096000 -0.904000 --0.195100 -0.251000 -0.304800 0.376000 0.112000 -0.912000 --0.200000 -0.200800 -0.306700 0.368000 -0.184000 -0.904000 --0.196100 -0.200800 -0.304800 0.360000 -0.200000 -0.904000 --0.200000 -0.150600 -0.333300 0.216000 -0.272000 -0.936000 --0.150000 -0.159100 -0.304800 0.152000 -0.400000 -0.896000 --0.150000 -0.150600 -0.309500 -0.032000 -0.400000 -0.912000 --0.108400 -0.200800 -0.304800 -0.496000 -0.048000 -0.856000 --0.100000 -0.150600 -0.315000 -0.456000 -0.064000 -0.880000 --0.100000 -0.200800 -0.311700 -0.496000 0.128000 -0.856000 --0.050000 -0.150600 -0.332400 0.016000 -0.080000 -0.992000 --0.050000 -0.200800 -0.320900 -0.056000 0.280000 -0.952000 -0.000000 -0.150600 -0.318000 0.160000 0.016000 -0.984000 -0.000000 -0.200800 -0.332000 -0.296000 0.528000 -0.784000 -0.050000 -0.150600 -0.318000 0.352000 0.312000 -0.872000 -0.050000 -0.200800 -0.360800 -0.016000 0.576000 -0.808000 -0.096000 -0.150600 -0.304800 0.176000 0.336000 -0.920000 -0.100000 -0.200800 -0.352600 0.240000 0.528000 -0.800000 -0.100000 -0.151600 -0.304800 -0.176000 0.536000 -0.816000 -0.150000 -0.200800 -0.325200 0.160000 0.176000 -0.968000 -0.101900 -0.150600 -0.304800 -0.296000 0.368000 -0.872000 -0.150000 -0.150600 -0.323600 -0.232000 0.464000 -0.848000 -0.114400 -0.100400 -0.304800 -0.344000 0.128000 -0.928000 -0.150000 -0.100400 -0.322200 0.000000 0.224000 -0.968000 -0.150000 -0.064700 -0.304800 -0.200000 0.328000 -0.912000 -0.185500 -0.100400 -0.304800 0.296000 0.104000 -0.944000 -0.150000 -0.050200 -0.298400 -0.176000 0.328000 -0.920000 -0.200000 -0.100400 -0.298900 0.088000 0.040000 -0.992000 -0.188500 -0.050200 -0.304800 -0.128000 0.184000 -0.968000 -0.200000 -0.061600 -0.304800 0.000000 -0.144000 -0.984000 -0.200000 -0.050200 -0.307000 0.000000 0.192000 -0.976000 -0.211400 -0.050200 -0.304800 0.152000 0.184000 -0.968000 -0.200000 -0.045300 -0.304800 -0.008000 0.344000 -0.936000 -0.250000 -0.050200 -0.297000 0.000000 0.040000 -0.992000 -0.200000 0.000000 -0.277300 0.080000 0.528000 -0.840000 -0.250000 0.000000 -0.271900 -0.336000 0.528000 -0.776000 -0.200000 0.025700 -0.243900 0.016000 0.752000 -0.648000 -0.250000 0.018500 -0.243900 -0.144000 0.856000 -0.480000 -0.200000 0.019700 -0.182900 0.160000 0.648000 0.736000 -0.250000 0.002800 -0.182900 0.128000 0.640000 0.752000 -0.200000 0.000000 -0.161400 0.032000 0.656000 0.752000 -0.250000 0.000000 -0.180400 0.176000 0.568000 0.792000 -0.200000 -0.041200 -0.121900 0.160000 0.488000 0.856000 -0.250000 -0.050200 -0.132500 0.192000 0.528000 0.816000 -0.222300 -0.050200 -0.121900 0.200000 0.432000 0.872000 -0.250000 -0.068700 -0.121900 0.096000 0.400000 0.904000 -0.200000 -0.050200 -0.116900 0.136000 0.368000 0.912000 -0.250000 -0.100400 -0.106800 0.080000 0.336000 0.936000 -0.200000 -0.100400 -0.095800 0.064000 0.272000 0.952000 -0.250000 -0.150600 -0.087200 0.040000 0.104000 0.992000 -0.200000 -0.150600 -0.099300 0.040000 0.104000 0.992000 -0.250000 -0.200800 -0.084100 0.120000 -0.168000 0.976000 -0.200000 -0.200800 -0.086600 0.112000 -0.336000 0.928000 -0.250000 -0.237200 -0.121900 0.048000 -0.656000 0.744000 -0.200000 -0.240500 -0.121900 0.152000 -0.656000 0.728000 -0.250000 -0.251000 -0.140300 -0.072000 -0.512000 0.848000 -0.200000 -0.251000 -0.134700 0.128000 -0.784000 0.600000 -0.250000 -0.301200 -0.149400 -0.376000 -0.584000 0.712000 -0.200000 -0.290700 -0.182900 -0.520000 -0.680000 0.512000 -0.211500 -0.301200 -0.182900 -0.568000 -0.672000 0.464000 -0.200000 -0.301200 -0.206400 -0.600000 -0.688000 0.384000 -0.250000 -0.319600 -0.182900 -0.280000 -0.832000 0.472000 -0.200000 -0.319700 -0.243900 -0.624000 -0.696000 0.328000 -0.250000 -0.343100 -0.243900 -0.320000 -0.920000 0.208000 -0.200000 -0.340400 -0.304800 -0.480000 -0.448000 -0.744000 -0.250000 -0.348300 -0.304800 -0.128000 -0.736000 -0.656000 -0.200000 -0.301200 -0.321600 -0.488000 -0.368000 -0.784000 -0.250000 -0.313600 -0.365800 -0.336000 -0.640000 -0.680000 -0.236200 -0.301200 -0.365800 -0.608000 -0.320000 -0.712000 -0.250000 -0.301200 -0.379400 -0.536000 -0.264000 -0.792000 -0.250000 -0.271800 -0.365800 -0.320000 0.360000 -0.872000 -0.300000 -0.301200 -0.372900 0.128000 -0.472000 -0.864000 -0.300000 -0.284400 -0.365800 0.136000 0.360000 -0.920000 -0.333500 -0.301200 -0.365800 0.208000 -0.080000 -0.968000 -0.300000 -0.251000 -0.347800 0.304000 0.384000 -0.864000 -0.350000 -0.301200 -0.360500 0.376000 0.184000 -0.904000 -0.350000 -0.251000 -0.329500 0.536000 0.472000 -0.688000 -0.400000 -0.301200 -0.307300 0.704000 0.496000 -0.496000 -0.366700 -0.251000 -0.304800 0.704000 0.488000 -0.496000 -0.400000 -0.299100 -0.304800 0.736000 0.472000 -0.472000 -0.399000 -0.251000 -0.243900 0.912000 -0.008000 -0.392000 -0.400000 -0.252300 -0.243900 0.744000 0.488000 -0.440000 -0.398900 -0.251000 -0.182900 0.896000 -0.160000 0.400000 -0.400000 -0.252800 -0.182900 0.760000 0.464000 0.440000 -0.354900 -0.251000 -0.121900 0.704000 -0.304000 0.632000 -0.400000 -0.301200 -0.149800 0.528000 0.376000 0.752000 -0.350000 -0.260400 -0.121900 0.448000 -0.472000 0.752000 -0.350000 -0.301200 -0.148100 0.392000 -0.048000 0.912000 -0.328900 -0.251000 -0.121900 -0.264000 -0.304000 0.912000 -0.300000 -0.301200 -0.149800 -0.024000 -0.480000 0.872000 -0.300000 -0.251000 -0.132800 -0.224000 -0.464000 0.856000 -0.250000 -0.301200 -0.149400 -0.376000 -0.584000 0.712000 -0.250000 -0.251000 -0.140300 -0.072000 -0.512000 0.848000 -0.300000 -0.251000 -0.132800 -0.224000 -0.464000 0.856000 -0.250000 -0.237200 -0.121900 0.048000 -0.656000 0.744000 -0.300000 -0.234400 -0.121900 0.104000 -0.472000 0.872000 -0.250000 -0.200800 -0.084100 0.120000 -0.168000 0.976000 -0.300000 -0.200800 -0.101500 0.424000 -0.216000 0.872000 -0.250000 -0.150600 -0.087200 0.040000 0.104000 0.992000 -0.300000 -0.150600 -0.090800 0.240000 -0.024000 0.968000 -0.250000 -0.100400 -0.106800 0.080000 0.336000 0.936000 -0.300000 -0.100400 -0.098900 -0.360000 0.344000 0.856000 -0.250000 -0.068700 -0.121900 0.096000 0.400000 0.904000 -0.300000 -0.060700 -0.121900 -0.512000 0.456000 0.720000 -0.250000 -0.050200 -0.132500 0.192000 0.528000 0.816000 -0.300000 -0.050200 -0.130700 -0.504000 0.472000 0.720000 -0.250000 0.000000 -0.180400 0.176000 0.568000 0.792000 -0.300000 0.000000 -0.166100 -0.488000 0.464000 0.728000 -0.250000 0.002800 -0.182900 0.128000 0.640000 0.752000 -0.300000 0.018000 -0.182900 -0.296000 0.768000 0.552000 -0.250000 0.018500 -0.243900 -0.144000 0.856000 -0.480000 -0.300000 0.032100 -0.243900 -0.576000 0.680000 -0.432000 -0.250000 0.000000 -0.271900 -0.336000 0.528000 -0.776000 -0.300000 0.000000 -0.302400 -0.544000 0.608000 -0.568000 -0.250000 -0.050200 -0.297000 0.000000 0.040000 -0.992000 -0.300000 -0.003100 -0.304800 -0.376000 0.424000 -0.816000 -0.266500 -0.050200 -0.304800 -0.280000 0.064000 -0.952000 -0.300000 -0.050200 -0.319900 -0.536000 0.224000 -0.808000 -0.278900 -0.100400 -0.304800 -0.176000 0.256000 -0.944000 -0.300000 -0.100400 -0.310000 -0.248000 0.072000 -0.960000 -0.250000 -0.114900 -0.304800 -0.104000 0.280000 -0.952000 -0.300000 -0.150600 -0.312600 0.312000 -0.200000 -0.920000 -0.250000 -0.150600 -0.317700 0.024000 0.336000 -0.936000 -0.300000 -0.200800 -0.324200 0.480000 0.248000 -0.832000 -0.250000 -0.200800 -0.343100 0.104000 0.232000 -0.960000 -0.300000 -0.251000 -0.347800 0.304000 0.384000 -0.864000 -0.250000 -0.251000 -0.353900 0.064000 0.384000 -0.920000 -0.300000 -0.284400 -0.365800 0.136000 0.360000 -0.920000 -0.250000 -0.271800 -0.365800 -0.320000 0.360000 -0.872000 -0.250000 -0.251000 -0.353900 0.064000 0.384000 -0.920000 -0.236200 -0.301200 -0.365800 -0.608000 -0.320000 -0.712000 -0.200000 -0.251000 -0.346500 -0.184000 0.088000 -0.976000 -0.200000 -0.301200 -0.321600 -0.488000 -0.368000 -0.784000 -0.150000 -0.251000 -0.336000 0.080000 -0.336000 -0.928000 -0.170700 -0.301200 -0.304800 -0.520000 -0.608000 -0.592000 -0.150000 -0.287400 -0.304800 0.000000 -0.712000 -0.688000 -0.176900 -0.301200 -0.243900 -0.504000 -0.800000 0.304000 -0.150000 -0.287700 -0.243900 -0.208000 -0.968000 0.064000 -0.200000 -0.301200 -0.206400 -0.600000 -0.688000 0.384000 -0.150000 -0.278000 -0.182900 -0.064000 -0.936000 0.328000 -0.200000 -0.290700 -0.182900 -0.520000 -0.680000 0.512000 -0.150000 -0.253200 -0.121900 0.192000 -0.808000 0.552000 -0.200000 -0.251000 -0.134700 0.128000 -0.784000 0.600000 -0.161400 -0.251000 -0.121900 0.152000 -0.792000 0.576000 -0.200000 -0.240500 -0.121900 0.152000 -0.656000 0.728000 -0.150000 -0.251000 -0.118100 0.224000 -0.792000 0.560000 -0.200000 -0.200800 -0.086600 0.112000 -0.336000 0.928000 -0.150000 -0.200800 -0.071800 0.312000 -0.208000 0.920000 -0.200000 -0.150600 -0.099300 0.040000 0.104000 0.992000 -0.150000 -0.150600 -0.071000 0.136000 0.176000 0.968000 -0.200000 -0.100400 -0.095800 0.064000 0.272000 0.952000 -0.150000 -0.100400 -0.080500 0.184000 0.336000 0.920000 -0.200000 -0.050200 -0.116900 0.136000 0.368000 0.912000 -0.150000 -0.050200 -0.113700 0.032000 0.448000 0.888000 -0.200000 -0.041200 -0.121900 0.160000 0.488000 0.856000 -0.150000 -0.036300 -0.121900 0.008000 0.488000 0.864000 -0.200000 0.000000 -0.161400 0.032000 0.656000 0.752000 -0.150000 0.000000 -0.166100 -0.096000 0.688000 0.712000 -0.200000 0.019700 -0.182900 0.160000 0.648000 0.736000 -0.150000 0.016800 -0.182900 -0.152000 0.840000 0.520000 -0.200000 0.025700 -0.243900 0.016000 0.752000 -0.648000 -0.150000 0.015400 -0.243900 -0.208000 0.728000 -0.640000 -0.200000 0.000000 -0.277300 0.080000 0.528000 -0.840000 -0.150000 0.000000 -0.257100 -0.208000 0.552000 -0.800000 -0.200000 -0.045300 -0.304800 -0.008000 0.344000 -0.936000 -0.150000 -0.050200 -0.298400 -0.176000 0.328000 -0.920000 -0.188500 -0.050200 -0.304800 -0.128000 0.184000 -0.968000 -0.200000 -0.045300 -0.304800 -0.008000 0.344000 -0.936000 -0.200000 -0.050200 -0.307000 0.000000 0.192000 -0.976000 -0.200000 -0.050200 -0.307000 0.000000 0.192000 -0.976000 --0.800000 -0.100400 0.186900 0.104000 0.048000 0.992000 --0.800000 -0.100400 0.186900 0.104000 0.048000 0.992000 --0.776900 -0.100400 0.182900 0.184000 0.120000 0.968000 --0.800000 -0.150600 0.189500 -0.240000 -0.056000 0.960000 --0.750000 -0.136500 0.182900 0.216000 0.112000 0.968000 --0.750000 -0.150600 0.184600 0.192000 0.080000 0.976000 --0.743500 -0.150600 0.182900 0.192000 0.096000 0.968000 --0.750000 -0.200800 0.187200 0.064000 -0.048000 0.992000 --0.703900 -0.200800 0.182900 0.128000 0.064000 0.984000 --0.750000 -0.251000 0.186100 -0.160000 -0.136000 0.976000 --0.700000 -0.208700 0.182900 0.176000 0.120000 0.968000 --0.700000 -0.251000 0.184700 0.008000 -0.024000 0.992000 --0.650000 -0.249200 0.182900 0.176000 0.464000 0.864000 --0.650000 -0.251000 0.183700 0.152000 0.272000 0.944000 --0.638500 -0.251000 0.182900 0.072000 0.424000 0.896000 --0.650000 -0.301200 0.185200 -0.152000 0.008000 0.984000 --0.600000 -0.260000 0.182900 0.056000 0.320000 0.944000 --0.600000 -0.301200 0.196400 -0.152000 0.176000 0.968000 --0.550000 -0.264400 0.182900 -0.072000 0.456000 0.880000 --0.550000 -0.301200 0.200100 -0.040000 0.312000 0.944000 --0.512000 -0.251000 0.182900 -0.112000 0.632000 0.760000 --0.500000 -0.301200 0.199600 -0.128000 0.216000 0.960000 --0.500000 -0.251000 0.185100 -0.112000 0.632000 0.760000 --0.450000 -0.301200 0.203900 0.032000 0.168000 0.984000 --0.450000 -0.251000 0.195400 -0.152000 0.392000 0.904000 --0.400000 -0.301200 0.211000 0.416000 0.000000 0.904000 --0.400000 -0.251000 0.203200 0.024000 0.208000 0.976000 --0.369700 -0.301200 0.182900 0.552000 -0.328000 0.752000 --0.350000 -0.251000 0.206900 0.584000 -0.272000 0.760000 --0.350000 -0.276800 0.182900 0.600000 -0.432000 0.664000 --0.334800 -0.251000 0.182900 0.672000 -0.480000 0.552000 --0.350000 -0.301200 0.167500 0.592000 -0.368000 0.712000 --0.300000 -0.251000 0.131000 0.632000 -0.616000 0.464000 --0.327200 -0.301200 0.121900 0.792000 -0.368000 0.472000 --0.300000 -0.256400 0.121900 0.624000 -0.624000 0.456000 --0.300000 -0.301200 0.065200 0.504000 -0.568000 0.640000 --0.294600 -0.251000 0.121900 0.616000 -0.600000 0.488000 --0.295000 -0.301200 0.060900 0.472000 -0.584000 0.648000 --0.250000 -0.251000 0.071500 0.528000 -0.408000 0.736000 --0.250000 -0.262800 0.060900 0.496000 -0.520000 0.688000 --0.236900 -0.251000 0.060900 0.464000 -0.480000 0.728000 --0.250000 -0.301200 0.006000 0.344000 -0.608000 0.704000 --0.200000 -0.251000 0.018200 0.408000 -0.392000 0.816000 --0.235900 -0.301200 0.000000 0.272000 -0.568000 0.768000 --0.200000 -0.279600 0.000000 -0.016000 -0.496000 0.864000 --0.200000 -0.301200 -0.017500 -0.064000 -0.432000 0.896000 --0.235900 -0.301200 0.000000 0.272000 -0.568000 0.768000 --0.200000 -0.351500 -0.031500 -0.320000 -0.128000 0.936000 --0.250000 -0.307700 0.000000 0.288000 -0.576000 0.760000 --0.250000 -0.351500 -0.038300 0.104000 -0.504000 0.848000 --0.300000 -0.343500 0.000000 0.832000 -0.408000 0.360000 --0.300000 -0.351500 -0.012600 0.872000 -0.352000 0.320000 --0.303300 -0.351500 0.000000 0.888000 -0.344000 0.288000 --0.300000 -0.401700 -0.045100 0.792000 -0.248000 0.544000 --0.319500 -0.401700 0.000000 0.536000 -0.584000 0.592000 --0.300000 -0.435300 -0.060900 -0.192000 -0.360000 0.912000 --0.350000 -0.427600 0.000000 0.560000 -0.752000 0.336000 --0.338500 -0.451900 -0.060900 0.112000 -0.632000 0.760000 --0.350000 -0.451900 -0.058800 0.248000 -0.624000 0.728000 --0.350000 -0.453900 -0.060900 0.248000 -0.624000 0.728000 --0.400000 -0.451900 -0.009600 0.744000 -0.536000 0.376000 --0.380200 -0.502100 -0.060900 0.648000 -0.616000 0.432000 --0.400000 -0.502100 -0.024700 0.848000 -0.224000 0.464000 --0.400000 -0.527700 -0.060900 0.080000 -0.768000 0.624000 --0.450000 -0.502100 -0.045100 0.560000 -0.696000 0.432000 --0.450000 -0.512800 -0.060900 0.208000 -0.760000 0.608000 --0.466200 -0.502100 0.000000 0.712000 -0.616000 0.320000 --0.478800 -0.552300 -0.060900 0.704000 -0.592000 0.376000 --0.500000 -0.548400 0.000000 0.368000 -0.816000 0.432000 --0.500000 -0.552300 -0.009400 0.352000 -0.840000 0.400000 --0.509600 -0.552300 0.000000 0.320000 -0.840000 0.424000 --0.500000 -0.570000 -0.060900 0.480000 -0.800000 0.328000 --0.550000 -0.565800 0.000000 0.224000 -0.872000 0.424000 --0.550000 -0.588500 -0.060900 0.224000 -0.888000 0.384000 --0.600000 -0.566300 0.000000 -0.184000 -0.816000 0.544000 --0.600000 -0.601900 -0.060900 -0.072000 -0.808000 0.568000 --0.633400 -0.552300 0.000000 -0.384000 -0.672000 0.624000 --0.650000 -0.594800 -0.060900 -0.368000 -0.640000 0.664000 --0.650000 -0.552300 -0.012600 -0.496000 -0.592000 0.624000 --0.685200 -0.552300 -0.060900 -0.696000 -0.384000 0.592000 --0.650000 -0.541900 0.000000 -0.528000 -0.600000 0.592000 --0.700000 -0.507800 -0.060900 -0.864000 -0.200000 0.448000 --0.674300 -0.502100 0.000000 -0.656000 -0.632000 0.384000 --0.700000 -0.502100 -0.057900 -0.752000 -0.512000 0.400000 --0.700000 -0.478200 0.000000 -0.704000 -0.632000 0.312000 --0.701200 -0.502100 -0.060900 -0.816000 -0.416000 0.392000 --0.719800 -0.451900 0.000000 -0.816000 -0.520000 0.240000 --0.735400 -0.451900 -0.060900 -0.768000 -0.512000 0.360000 --0.750000 -0.403200 0.000000 -0.832000 -0.504000 0.216000 --0.750000 -0.426100 -0.060900 -0.864000 -0.448000 0.200000 --0.750800 -0.401700 0.000000 -0.816000 -0.520000 0.208000 --0.762700 -0.401700 -0.060900 -0.840000 -0.496000 0.168000 --0.782800 -0.351500 0.000000 -0.816000 -0.536000 0.208000 --0.794800 -0.351500 -0.060900 -0.816000 -0.552000 0.144000 --0.800000 -0.327900 0.000000 -0.800000 -0.560000 0.176000 --0.800000 -0.343900 -0.060900 -0.816000 -0.552000 0.128000 --0.817700 -0.301200 0.000000 -0.808000 -0.560000 0.168000 --0.826600 -0.301200 -0.060900 -0.824000 -0.544000 0.120000 --0.800000 -0.343900 -0.060900 -0.816000 -0.552000 0.128000 --0.832400 -0.301200 -0.121900 -0.840000 -0.528000 0.048000 --0.800000 -0.351500 -0.101400 -0.840000 -0.528000 0.104000 --0.802000 -0.351500 -0.121900 -0.840000 -0.520000 0.096000 --0.800000 -0.354700 -0.121900 -0.848000 -0.512000 0.080000 --0.802200 -0.351500 -0.182900 -0.872000 -0.480000 0.016000 --0.800000 -0.355500 -0.182900 -0.872000 -0.472000 0.032000 --0.807300 -0.351500 -0.243900 -0.864000 -0.472000 0.152000 --0.800000 -0.365300 -0.243900 -0.880000 -0.440000 0.160000 --0.821000 -0.351500 -0.304800 -0.824000 -0.504000 0.232000 --0.800000 -0.395700 -0.304800 -0.920000 -0.376000 0.000000 --0.812200 -0.351500 -0.365800 -0.856000 -0.296000 -0.408000 --0.800000 -0.388500 -0.365800 -0.864000 -0.288000 -0.400000 --0.800000 -0.351500 -0.388300 -0.664000 -0.152000 -0.728000 --0.796500 -0.401700 -0.365800 -0.952000 -0.168000 -0.232000 --0.750000 -0.351500 -0.422100 -0.312000 0.448000 -0.824000 --0.777800 -0.401700 -0.426800 -0.928000 0.040000 -0.360000 --0.750000 -0.359700 -0.426800 -0.368000 0.408000 -0.832000 --0.750000 -0.351500 -0.422100 -0.312000 0.448000 -0.824000 --0.736800 -0.351500 -0.426800 -0.240000 0.480000 -0.832000 --0.736800 -0.351500 -0.426800 -0.240000 0.480000 -0.832000 --0.750000 -0.150600 0.184600 0.192000 0.080000 0.976000 --0.750000 -0.150600 0.184600 0.192000 0.080000 0.976000 --0.800000 -0.150600 0.189500 -0.240000 -0.056000 0.960000 --0.750000 -0.200800 0.187200 0.064000 -0.048000 0.992000 --0.800000 -0.200800 0.184500 -0.256000 -0.128000 0.952000 --0.750000 -0.251000 0.186100 -0.160000 -0.136000 0.976000 --0.800000 -0.206500 0.182900 -0.304000 -0.264000 0.912000 --0.762000 -0.251000 0.182900 -0.256000 -0.192000 0.936000 --0.800000 -0.251000 0.157900 -0.576000 -0.400000 0.696000 --0.750000 -0.267900 0.182900 -0.232000 -0.192000 0.944000 --0.800000 -0.280700 0.121900 -0.736000 -0.528000 0.408000 --0.750000 -0.301200 0.168400 -0.360000 -0.432000 0.816000 --0.783300 -0.301200 0.121900 -0.688000 -0.568000 0.440000 --0.750000 -0.342500 0.121900 -0.536000 -0.592000 0.592000 --0.800000 -0.301200 0.085900 -0.768000 -0.544000 0.304000 --0.750000 -0.351500 0.110100 -0.600000 -0.584000 0.536000 --0.800000 -0.310100 0.060900 -0.800000 -0.544000 0.224000 --0.767900 -0.351500 0.060900 -0.760000 -0.568000 0.296000 --0.800000 -0.327900 0.000000 -0.800000 -0.560000 0.176000 --0.782800 -0.351500 0.000000 -0.816000 -0.536000 0.208000 --0.767900 -0.351500 0.060900 -0.760000 -0.568000 0.296000 --0.750800 -0.401700 0.000000 -0.816000 -0.520000 0.208000 --0.750000 -0.377100 0.060900 -0.760000 -0.552000 0.320000 --0.750000 -0.401700 0.004100 -0.816000 -0.520000 0.232000 --0.731300 -0.401700 0.060900 -0.784000 -0.496000 0.344000 --0.750000 -0.403200 0.000000 -0.832000 -0.504000 0.216000 --0.701000 -0.451900 0.060900 -0.792000 -0.480000 0.344000 --0.719800 -0.451900 0.000000 -0.816000 -0.520000 0.240000 --0.700000 -0.453200 0.060900 -0.560000 -0.720000 0.392000 --0.700000 -0.478200 0.000000 -0.704000 -0.632000 0.312000 --0.650000 -0.495900 0.060900 -0.528000 -0.720000 0.432000 --0.674300 -0.502100 0.000000 -0.656000 -0.632000 0.384000 --0.650000 -0.502100 0.048300 -0.536000 -0.712000 0.440000 --0.650000 -0.541900 0.000000 -0.528000 -0.600000 0.592000 --0.640700 -0.502100 0.060900 -0.496000 -0.728000 0.456000 --0.633400 -0.552300 0.000000 -0.384000 -0.672000 0.624000 --0.600000 -0.531600 0.060900 -0.448000 -0.736000 0.496000 --0.600000 -0.552300 0.023900 -0.224000 -0.776000 0.584000 --0.550000 -0.532000 0.060900 0.080000 -0.776000 0.624000 --0.550000 -0.552300 0.031000 0.256000 -0.800000 0.528000 --0.500000 -0.517700 0.060900 0.632000 -0.632000 0.440000 --0.509600 -0.552300 0.000000 0.320000 -0.840000 0.424000 --0.500000 -0.548400 0.000000 0.368000 -0.816000 0.432000 --0.500000 -0.517700 0.060900 0.632000 -0.632000 0.440000 --0.466200 -0.502100 0.000000 0.712000 -0.616000 0.320000 --0.489100 -0.502100 0.060900 0.704000 -0.616000 0.328000 --0.450000 -0.489500 0.000000 0.584000 -0.760000 0.264000 --0.450000 -0.471900 0.060900 0.592000 -0.752000 0.272000 --0.403800 -0.451900 0.000000 0.744000 -0.560000 0.352000 --0.425300 -0.451900 0.060900 0.696000 -0.640000 0.304000 --0.400000 -0.447100 0.000000 0.720000 -0.584000 0.344000 --0.400000 -0.423000 0.060900 0.616000 -0.696000 0.360000 --0.350000 -0.427600 0.000000 0.560000 -0.752000 0.336000 --0.350000 -0.406300 0.060900 0.592000 -0.728000 0.320000 --0.319500 -0.401700 0.000000 0.536000 -0.584000 0.592000 --0.344500 -0.401700 0.060900 0.632000 -0.688000 0.328000 --0.303300 -0.351500 0.000000 0.888000 -0.344000 0.288000 --0.319700 -0.351500 0.060900 0.864000 -0.376000 0.328000 --0.300000 -0.343500 0.000000 0.832000 -0.408000 0.360000 --0.300000 -0.305300 0.060900 0.512000 -0.568000 0.632000 --0.250000 -0.307700 0.000000 0.288000 -0.576000 0.760000 --0.295000 -0.301200 0.060900 0.472000 -0.584000 0.648000 --0.250000 -0.301200 0.006000 0.344000 -0.608000 0.704000 --0.250000 -0.262800 0.060900 0.496000 -0.520000 0.688000 --0.250000 -0.262800 0.060900 0.496000 -0.520000 0.688000 --0.762000 -0.251000 0.182900 -0.256000 -0.192000 0.936000 --0.762000 -0.251000 0.182900 -0.256000 -0.192000 0.936000 --0.750000 -0.251000 0.186100 -0.160000 -0.136000 0.976000 --0.750000 -0.267900 0.182900 -0.232000 -0.192000 0.944000 --0.700000 -0.251000 0.184700 0.008000 -0.024000 0.992000 --0.700000 -0.272200 0.182900 -0.072000 -0.128000 0.984000 --0.650000 -0.251000 0.183700 0.152000 0.272000 0.944000 --0.671000 -0.301200 0.182900 -0.120000 -0.104000 0.984000 --0.650000 -0.301200 0.185200 -0.152000 0.008000 0.984000 --0.663400 -0.351500 0.182900 -0.304000 -0.080000 0.944000 --0.650000 -0.351500 0.187800 -0.272000 -0.048000 0.952000 --0.650000 -0.385200 0.182900 -0.496000 -0.152000 0.848000 --0.600000 -0.351500 0.201700 -0.216000 0.016000 0.968000 --0.644900 -0.401700 0.182900 -0.528000 -0.240000 0.808000 --0.600000 -0.401700 0.205900 -0.320000 -0.144000 0.928000 --0.600000 -0.446800 0.182900 -0.240000 -0.464000 0.848000 --0.550000 -0.401700 0.218500 0.000000 -0.272000 0.960000 --0.583500 -0.451900 0.182900 -0.128000 -0.544000 0.824000 --0.550000 -0.451900 0.188900 -0.024000 -0.624000 0.776000 --0.550000 -0.456500 0.182900 0.056000 -0.736000 0.672000 --0.523100 -0.451900 0.182900 0.136000 -0.648000 0.744000 --0.550000 -0.494000 0.121900 0.024000 -0.832000 0.536000 --0.500000 -0.451900 0.177400 0.160000 -0.648000 0.736000 --0.500000 -0.486900 0.121900 0.296000 -0.800000 0.504000 --0.450000 -0.451900 0.126400 0.752000 -0.472000 0.448000 --0.450000 -0.453600 0.121900 0.584000 -0.744000 0.288000 --0.447800 -0.451900 0.121900 0.672000 -0.648000 0.344000 --0.450000 -0.471900 0.060900 0.592000 -0.752000 0.272000 --0.425300 -0.451900 0.060900 0.696000 -0.640000 0.304000 --0.447800 -0.451900 0.121900 0.672000 -0.648000 0.344000 --0.400000 -0.423000 0.060900 0.616000 -0.696000 0.360000 --0.404400 -0.401700 0.121900 0.648000 -0.656000 0.368000 --0.400000 -0.401700 0.111300 0.640000 -0.680000 0.336000 --0.400000 -0.397400 0.121900 0.632000 -0.672000 0.368000 --0.350000 -0.401700 0.073400 0.632000 -0.688000 0.344000 --0.350000 -0.369000 0.121900 0.736000 -0.464000 0.480000 --0.344500 -0.401700 0.060900 0.632000 -0.688000 0.328000 --0.341600 -0.351500 0.121900 0.808000 -0.352000 0.456000 --0.319700 -0.351500 0.060900 0.864000 -0.376000 0.328000 --0.327200 -0.301200 0.121900 0.792000 -0.368000 0.472000 --0.300000 -0.305300 0.060900 0.512000 -0.568000 0.632000 --0.300000 -0.301200 0.065200 0.504000 -0.568000 0.640000 --0.295000 -0.301200 0.060900 0.472000 -0.584000 0.648000 --0.295000 -0.301200 0.060900 0.472000 -0.584000 0.648000 --0.650000 -0.301200 0.185200 -0.152000 0.008000 0.984000 --0.650000 -0.301200 0.185200 -0.152000 0.008000 0.984000 --0.650000 -0.351500 0.187800 -0.272000 -0.048000 0.952000 --0.600000 -0.301200 0.196400 -0.152000 0.176000 0.968000 --0.600000 -0.351500 0.201700 -0.216000 0.016000 0.968000 --0.550000 -0.301200 0.200100 -0.040000 0.312000 0.944000 --0.550000 -0.351500 0.211500 0.000000 0.128000 0.984000 --0.500000 -0.301200 0.199600 -0.128000 0.216000 0.960000 --0.500000 -0.351500 0.209200 0.072000 0.104000 0.984000 --0.450000 -0.301200 0.203900 0.032000 0.168000 0.984000 --0.450000 -0.351500 0.215900 0.592000 -0.216000 0.768000 --0.400000 -0.301200 0.211000 0.416000 0.000000 0.904000 --0.400000 -0.351500 0.196700 0.560000 -0.576000 0.584000 --0.369700 -0.301200 0.182900 0.552000 -0.328000 0.752000 --0.389000 -0.351500 0.182900 0.544000 -0.632000 0.536000 --0.350000 -0.301200 0.167500 0.592000 -0.368000 0.712000 --0.350000 -0.351500 0.138600 0.680000 -0.440000 0.568000 --0.327200 -0.301200 0.121900 0.792000 -0.368000 0.472000 --0.341600 -0.351500 0.121900 0.808000 -0.352000 0.456000 --0.350000 -0.351500 0.138600 0.680000 -0.440000 0.568000 --0.350000 -0.369000 0.121900 0.736000 -0.464000 0.480000 --0.389000 -0.351500 0.182900 0.544000 -0.632000 0.536000 --0.400000 -0.397400 0.121900 0.632000 -0.672000 0.368000 --0.400000 -0.359600 0.182900 0.520000 -0.680000 0.496000 --0.404400 -0.401700 0.121900 0.648000 -0.656000 0.368000 --0.445800 -0.401700 0.182900 0.648000 -0.488000 0.568000 --0.447800 -0.451900 0.121900 0.672000 -0.648000 0.344000 --0.450000 -0.407300 0.182900 0.664000 -0.488000 0.552000 --0.450000 -0.451900 0.126400 0.752000 -0.472000 0.448000 --0.500000 -0.444100 0.182900 0.168000 -0.480000 0.848000 --0.500000 -0.451900 0.177400 0.160000 -0.648000 0.736000 --0.523100 -0.451900 0.182900 0.136000 -0.648000 0.744000 --0.500000 -0.444100 0.182900 0.168000 -0.480000 0.848000 --0.550000 -0.451900 0.188900 -0.024000 -0.624000 0.776000 --0.500000 -0.401700 0.210500 0.208000 -0.296000 0.928000 --0.550000 -0.401700 0.218500 0.000000 -0.272000 0.960000 --0.500000 -0.351500 0.209200 0.072000 0.104000 0.984000 --0.550000 -0.351500 0.211500 0.000000 0.128000 0.984000 --0.550000 -0.401700 0.218500 0.000000 -0.272000 0.960000 --0.600000 -0.351500 0.201700 -0.216000 0.016000 0.968000 --0.600000 -0.401700 0.205900 -0.320000 -0.144000 0.928000 --0.600000 -0.401700 0.205900 -0.320000 -0.144000 0.928000 --0.512000 -0.251000 0.182900 -0.112000 0.632000 0.760000 --0.512000 -0.251000 0.182900 -0.112000 0.632000 0.760000 --0.500000 -0.249000 0.182900 -0.112000 0.656000 0.744000 --0.500000 -0.251000 0.185100 -0.112000 0.632000 0.760000 --0.450000 -0.233700 0.182900 -0.216000 0.472000 0.848000 --0.450000 -0.251000 0.195400 -0.152000 0.392000 0.904000 --0.400000 -0.206800 0.182900 -0.168000 0.424000 0.880000 --0.400000 -0.251000 0.203200 0.024000 0.208000 0.976000 --0.383500 -0.200800 0.182900 -0.152000 0.448000 0.872000 --0.350000 -0.251000 0.206900 0.584000 -0.272000 0.760000 --0.350000 -0.200800 0.190300 -0.112000 0.384000 0.912000 --0.334800 -0.251000 0.182900 0.672000 -0.480000 0.552000 --0.300000 -0.200800 0.189700 0.744000 -0.432000 0.496000 --0.300000 -0.205800 0.182900 0.768000 -0.472000 0.416000 --0.296900 -0.200800 0.182900 0.792000 -0.440000 0.408000 --0.300000 -0.251000 0.131000 0.632000 -0.616000 0.464000 --0.278100 -0.200800 0.121900 0.816000 -0.432000 0.368000 --0.294600 -0.251000 0.121900 0.616000 -0.600000 0.488000 --0.250000 -0.200800 0.078600 0.664000 -0.312000 0.672000 --0.250000 -0.251000 0.071500 0.528000 -0.408000 0.736000 --0.222100 -0.200800 0.060900 0.488000 -0.184000 0.848000 --0.236900 -0.251000 0.060900 0.464000 -0.480000 0.728000 --0.200000 -0.200800 0.045500 0.568000 -0.152000 0.808000 --0.200000 -0.251000 0.018200 0.408000 -0.392000 0.816000 --0.200000 -0.251000 0.018200 0.408000 -0.392000 0.816000 --0.450000 -0.351500 0.215900 0.592000 -0.216000 0.768000 --0.450000 -0.351500 0.215900 0.592000 -0.216000 0.768000 --0.500000 -0.351500 0.209200 0.072000 0.104000 0.984000 --0.450000 -0.401700 0.188700 0.656000 -0.464000 0.584000 --0.500000 -0.401700 0.210500 0.208000 -0.296000 0.928000 --0.450000 -0.407300 0.182900 0.664000 -0.488000 0.552000 --0.500000 -0.444100 0.182900 0.168000 -0.480000 0.848000 --0.500000 -0.444100 0.182900 0.168000 -0.480000 0.848000 --0.400000 -0.351500 0.196700 0.560000 -0.576000 0.584000 --0.400000 -0.351500 0.196700 0.560000 -0.576000 0.584000 --0.400000 -0.359600 0.182900 0.520000 -0.680000 0.496000 --0.450000 -0.351500 0.215900 0.592000 -0.216000 0.768000 --0.445800 -0.401700 0.182900 0.648000 -0.488000 0.568000 --0.450000 -0.401700 0.188700 0.656000 -0.464000 0.584000 --0.450000 -0.407300 0.182900 0.664000 -0.488000 0.552000 --0.450000 -0.407300 0.182900 0.664000 -0.488000 0.552000 --0.383500 -0.200800 0.182900 -0.152000 0.448000 0.872000 --0.383500 -0.200800 0.182900 -0.152000 0.448000 0.872000 --0.350000 -0.189600 0.182900 -0.288000 0.472000 0.824000 --0.350000 -0.200800 0.190300 -0.112000 0.384000 0.912000 --0.311100 -0.150600 0.182900 -0.424000 0.464000 0.768000 --0.300000 -0.200800 0.189700 0.744000 -0.432000 0.496000 --0.300000 -0.150600 0.190700 0.000000 0.520000 0.848000 --0.296900 -0.200800 0.182900 0.792000 -0.440000 0.408000 --0.288800 -0.150600 0.182900 0.600000 0.360000 0.712000 --0.278100 -0.200800 0.121900 0.816000 -0.432000 0.368000 --0.252800 -0.150600 0.121900 0.720000 -0.296000 0.616000 --0.250000 -0.200800 0.078600 0.664000 -0.312000 0.672000 --0.250000 -0.150600 0.117900 0.712000 -0.320000 0.616000 --0.222100 -0.200800 0.060900 0.488000 -0.184000 0.848000 --0.212600 -0.150600 0.060900 0.712000 -0.216000 0.664000 --0.200000 -0.200800 0.045500 0.568000 -0.152000 0.808000 --0.200000 -0.150600 0.042600 0.640000 -0.096000 0.752000 --0.212600 -0.150600 0.060900 0.712000 -0.216000 0.664000 --0.200000 -0.121800 0.060900 0.728000 -0.328000 0.592000 --0.250000 -0.150600 0.117900 0.712000 -0.320000 0.616000 --0.200000 -0.100400 0.076800 0.784000 -0.136000 0.600000 --0.250000 -0.144000 0.121900 0.720000 -0.312000 0.608000 --0.230200 -0.100400 0.121900 0.776000 -0.176000 0.600000 --0.250000 -0.100400 0.155000 0.480000 0.160000 0.856000 --0.247100 -0.050200 0.121900 0.488000 0.512000 0.696000 --0.250000 -0.050200 0.123600 0.200000 0.440000 0.864000 --0.250000 -0.048000 0.121900 0.272000 0.640000 0.704000 --0.255700 -0.050200 0.121900 -0.192000 0.512000 0.832000 --0.250000 0.000000 0.079500 -0.144000 0.552000 0.816000 --0.300000 -0.050200 0.104800 -0.312000 0.512000 0.792000 --0.300000 0.000000 0.088800 -0.240000 0.432000 0.864000 --0.350000 -0.050200 0.083200 -0.416000 0.344000 0.832000 --0.348200 0.000000 0.060900 -0.376000 0.448000 0.800000 --0.350000 -0.001900 0.060900 -0.656000 0.280000 0.688000 --0.350000 0.000000 0.059800 -0.688000 0.400000 0.592000 --0.367400 -0.050200 0.060900 -0.696000 0.408000 0.584000 --0.373100 0.000000 0.000000 -0.880000 0.240000 0.392000 --0.399300 -0.050200 0.000000 -0.696000 0.680000 0.184000 --0.377800 0.000000 -0.060900 -0.864000 0.424000 -0.248000 --0.400000 -0.050200 -0.003200 -0.712000 0.672000 0.168000 --0.400000 -0.037800 -0.060900 -0.728000 0.664000 0.152000 --0.406900 -0.050200 -0.060900 -0.848000 0.520000 0.000000 --0.400000 -0.050200 -0.118700 -0.832000 0.528000 -0.160000 --0.450000 -0.099400 -0.060900 -0.760000 0.616000 0.160000 --0.400000 -0.050900 -0.121900 -0.736000 0.536000 -0.408000 --0.450000 -0.100400 -0.065100 -0.512000 0.824000 -0.200000 --0.434900 -0.100400 -0.121900 -0.608000 0.744000 -0.256000 --0.450000 -0.111500 -0.121900 -0.376000 0.896000 -0.224000 --0.403600 -0.100400 -0.182900 -0.616000 0.592000 -0.512000 --0.450000 -0.128500 -0.182900 -0.504000 0.800000 -0.296000 --0.400000 -0.100400 -0.188300 -0.616000 0.576000 -0.520000 --0.450000 -0.150600 -0.239400 -0.408000 0.792000 -0.448000 --0.400000 -0.131400 -0.243900 -0.384000 0.744000 -0.536000 --0.444500 -0.150600 -0.243900 -0.312000 0.784000 -0.528000 --0.400000 -0.150600 -0.272200 -0.312000 0.624000 -0.704000 --0.450000 -0.152500 -0.243900 -0.384000 0.800000 -0.448000 --0.400000 -0.174400 -0.304800 -0.224000 0.736000 -0.632000 --0.450000 -0.186700 -0.304800 -0.216000 0.808000 -0.528000 --0.400000 -0.200800 -0.333600 -0.064000 0.568000 -0.816000 --0.450000 -0.200800 -0.327900 -0.112000 0.704000 -0.696000 --0.400000 -0.239300 -0.365800 0.048000 0.512000 -0.848000 --0.450000 -0.235000 -0.365800 -0.016000 0.592000 -0.800000 --0.400000 -0.251000 -0.373300 0.080000 0.400000 -0.904000 --0.450000 -0.251000 -0.376500 0.032000 0.432000 -0.896000 --0.400000 -0.301200 -0.390900 0.144000 0.296000 -0.936000 --0.450000 -0.301200 -0.399100 0.080000 0.320000 -0.936000 --0.400000 -0.351500 -0.411400 0.000000 0.616000 -0.784000 --0.450000 -0.351500 -0.418600 0.080000 0.512000 -0.848000 --0.450000 -0.301200 -0.399100 0.080000 0.320000 -0.936000 --0.500000 -0.351500 -0.423900 0.056000 0.504000 -0.856000 --0.500000 -0.301200 -0.402500 0.040000 0.344000 -0.936000 --0.450000 -0.301200 -0.399100 0.080000 0.320000 -0.936000 --0.500000 -0.251000 -0.377000 -0.032000 0.528000 -0.840000 --0.450000 -0.251000 -0.376500 0.032000 0.432000 -0.896000 --0.500000 -0.238600 -0.365800 -0.072000 0.656000 -0.744000 --0.450000 -0.235000 -0.365800 -0.016000 0.592000 -0.800000 --0.500000 -0.200800 -0.313000 -0.112000 0.824000 -0.544000 --0.450000 -0.200800 -0.327900 -0.112000 0.704000 -0.696000 --0.500000 -0.196700 -0.304800 -0.120000 0.848000 -0.504000 --0.450000 -0.186700 -0.304800 -0.216000 0.808000 -0.528000 --0.500000 -0.169200 -0.243900 -0.328000 0.880000 -0.312000 --0.450000 -0.152500 -0.243900 -0.384000 0.800000 -0.448000 --0.500000 -0.154300 -0.182900 -0.320000 0.920000 -0.176000 --0.450000 -0.150600 -0.239400 -0.408000 0.792000 -0.448000 --0.491700 -0.150600 -0.182900 -0.448000 0.848000 -0.264000 --0.450000 -0.128500 -0.182900 -0.504000 0.800000 -0.296000 --0.500000 -0.150600 -0.154000 -0.424000 0.880000 -0.160000 --0.450000 -0.111500 -0.121900 -0.376000 0.896000 -0.224000 --0.500000 -0.144400 -0.121900 -0.376000 0.880000 -0.280000 --0.450000 -0.100400 -0.065100 -0.512000 0.824000 -0.200000 --0.500000 -0.119500 -0.060900 -0.160000 0.976000 0.112000 --0.452400 -0.100400 -0.060900 -0.344000 0.936000 -0.016000 --0.500000 -0.141000 0.000000 -0.040000 0.880000 0.456000 --0.450000 -0.100400 -0.057100 -0.400000 0.872000 0.264000 --0.450000 -0.112700 0.000000 -0.520000 0.784000 0.320000 --0.434300 -0.100400 0.000000 -0.648000 0.720000 0.208000 --0.450000 -0.136300 0.060900 -0.512000 0.720000 0.448000 --0.405500 -0.100400 0.060900 -0.712000 0.456000 0.520000 --0.450000 -0.150600 0.089400 -0.440000 0.744000 0.496000 --0.400000 -0.100400 0.069600 -0.688000 0.456000 0.552000 --0.414900 -0.150600 0.121900 -0.424000 0.616000 0.648000 --0.400000 -0.140400 0.121900 -0.448000 0.624000 0.632000 --0.400000 -0.150600 0.133500 -0.392000 0.600000 0.688000 --0.351400 -0.100400 0.121900 -0.608000 0.368000 0.696000 --0.350000 -0.150600 0.151300 -0.584000 0.352000 0.720000 --0.350000 -0.100400 0.123500 -0.608000 0.328000 0.712000 --0.311100 -0.150600 0.182900 -0.424000 0.464000 0.768000 --0.300000 -0.100400 0.149000 -0.304000 0.432000 0.840000 --0.300000 -0.142200 0.182900 0.000000 0.616000 0.776000 --0.250000 -0.100400 0.155000 0.480000 0.160000 0.856000 --0.288800 -0.150600 0.182900 0.600000 0.360000 0.712000 --0.250000 -0.144000 0.121900 0.720000 -0.312000 0.608000 --0.252800 -0.150600 0.121900 0.720000 -0.296000 0.616000 --0.250000 -0.150600 0.117900 0.712000 -0.320000 0.616000 --0.250000 -0.150600 0.117900 0.712000 -0.320000 0.616000 --0.400000 -0.351500 0.196700 0.560000 -0.576000 0.584000 --0.400000 -0.351500 0.196700 0.560000 -0.576000 0.584000 --0.389000 -0.351500 0.182900 0.544000 -0.632000 0.536000 --0.400000 -0.359600 0.182900 0.520000 -0.680000 0.496000 --0.400000 -0.359600 0.182900 0.520000 -0.680000 0.496000 --0.311100 -0.150600 0.182900 -0.424000 0.464000 0.768000 --0.311100 -0.150600 0.182900 -0.424000 0.464000 0.768000 --0.300000 -0.142200 0.182900 0.000000 0.616000 0.776000 --0.300000 -0.150600 0.190700 0.000000 0.520000 0.848000 --0.288800 -0.150600 0.182900 0.600000 0.360000 0.712000 --0.288800 -0.150600 0.182900 0.600000 0.360000 0.712000 -0.577700 0.301200 0.182900 -0.536000 0.272000 0.792000 -0.577700 0.301200 0.182900 -0.536000 0.272000 0.792000 -0.600000 0.327100 0.182900 -0.144000 0.552000 0.816000 -0.600000 0.301200 0.199900 -0.528000 0.136000 0.832000 -0.650000 0.311500 0.182900 0.424000 0.496000 0.752000 -0.650000 0.301200 0.190400 0.408000 0.464000 0.776000 -0.660200 0.301200 0.182900 0.480000 0.488000 0.720000 -0.650000 0.251000 0.217300 -0.016000 0.232000 0.968000 -0.700000 0.263400 0.182900 0.512000 0.536000 0.664000 -0.700000 0.251000 0.193900 0.488000 0.504000 0.704000 -0.711700 0.251000 0.182900 0.560000 0.528000 0.624000 -0.700000 0.200800 0.226400 0.328000 0.432000 0.832000 -0.750000 0.208300 0.182900 0.448000 0.624000 0.632000 -0.750000 0.200800 0.191100 0.424000 0.552000 0.712000 -0.761100 0.200800 0.182900 0.432000 0.472000 0.760000 -0.750000 0.150600 0.201100 0.320000 0.240000 0.912000 -0.797300 0.150600 0.182900 0.336000 0.288000 0.888000 -0.750000 0.100400 0.207000 0.032000 -0.192000 0.976000 -0.800000 0.148000 0.182900 0.424000 0.336000 0.832000 -0.800000 0.100400 0.199400 -0.032000 0.024000 0.992000 -0.850000 0.129700 0.182900 0.408000 0.752000 0.504000 -0.850000 0.100400 0.222500 0.440000 0.584000 0.672000 -0.891700 0.100400 0.182900 0.576000 0.688000 0.424000 -0.850000 0.050200 0.216300 -0.184000 -0.272000 0.936000 -0.900000 0.093100 0.182900 0.568000 0.672000 0.464000 -0.900000 0.050200 0.226800 0.488000 0.496000 0.712000 -0.940200 0.050200 0.182900 0.624000 0.528000 0.568000 -0.900000 0.000000 0.237100 -0.176000 -0.616000 0.760000 -0.950000 0.037400 0.182900 0.520000 0.504000 0.680000 -0.950000 0.000000 0.206500 0.400000 0.008000 0.912000 -1.000000 0.004900 0.182900 0.336000 0.520000 0.776000 -1.000000 0.000000 0.186800 0.376000 0.128000 0.912000 -0.950000 0.000000 0.206500 0.400000 0.008000 0.912000 -1.000000 -0.012000 0.182900 0.384000 -0.248000 0.880000 -0.950000 -0.050200 0.197900 0.336000 -0.192000 0.920000 -0.975800 -0.050200 0.182900 0.464000 -0.232000 0.848000 -0.950000 -0.100400 0.196500 0.208000 -0.704000 0.672000 -0.959000 -0.100400 0.182900 0.616000 -0.584000 0.520000 -0.950000 -0.108800 0.182900 0.232000 -0.768000 0.584000 -1.000000 -0.100400 0.134700 0.432000 -0.528000 0.720000 -0.950000 -0.142500 0.121900 -0.608000 -0.672000 0.392000 -1.000000 -0.126300 0.121900 0.016000 -0.480000 0.872000 -0.950000 -0.150600 0.094900 -0.648000 -0.696000 0.272000 -1.000000 -0.150600 0.101600 -0.080000 -0.576000 0.808000 -0.950000 -0.158100 0.060900 -0.608000 -0.760000 0.200000 -1.000000 -0.176100 0.060900 -0.688000 -0.632000 0.336000 -0.950000 -0.168100 0.000000 -0.640000 -0.744000 0.184000 -1.000000 -0.200800 0.012500 -0.656000 -0.696000 0.264000 -0.995800 -0.200800 0.000000 -0.648000 -0.704000 0.264000 -1.000000 -0.204500 0.000000 -0.624000 -0.728000 0.256000 -0.973000 -0.200800 -0.060900 -0.584000 -0.760000 0.264000 -1.000000 -0.224100 -0.060900 -0.616000 -0.728000 0.280000 -0.950500 -0.200800 -0.121900 -0.632000 -0.744000 0.192000 -1.000000 -0.243600 -0.121900 -0.640000 -0.736000 0.184000 -0.950000 -0.200800 -0.124000 -0.680000 -0.712000 0.160000 -1.000000 -0.251000 -0.154300 -0.728000 -0.648000 0.200000 -0.950000 -0.211700 -0.182900 -0.704000 -0.680000 0.176000 -0.993400 -0.251000 -0.182900 -0.736000 -0.640000 0.200000 -0.950000 -0.224400 -0.243900 -0.688000 -0.640000 0.328000 -0.978600 -0.251000 -0.243900 -0.696000 -0.616000 0.352000 -0.950000 -0.251000 -0.295200 -0.640000 -0.496000 0.576000 -1.000000 -0.277900 -0.243900 -0.712000 -0.592000 0.360000 -0.950000 -0.261400 -0.304800 -0.752000 -0.584000 0.288000 -1.000000 -0.301200 -0.291200 -0.640000 -0.488000 0.576000 -0.989600 -0.301200 -0.304800 -0.816000 -0.560000 0.128000 -1.000000 -0.316200 -0.304800 -0.800000 -0.552000 0.224000 -1.000000 -0.301200 -0.328200 -0.784000 -0.440000 -0.424000 -0.989600 -0.301200 -0.304800 -0.816000 -0.560000 0.128000 -1.000000 -0.251000 -0.355700 -0.816000 -0.248000 -0.504000 -0.950000 -0.261400 -0.304800 -0.752000 -0.584000 0.288000 -0.950000 -0.251000 -0.328200 -0.712000 -0.568000 -0.392000 -0.942100 -0.251000 -0.304800 -0.752000 -0.552000 0.344000 -0.950000 -0.200800 -0.357000 -0.272000 -0.104000 -0.952000 -0.911900 -0.200800 -0.304800 -0.864000 -0.480000 -0.128000 -0.950000 -0.150600 -0.345500 -0.032000 0.064000 -0.992000 -0.900000 -0.181100 -0.304800 -0.768000 -0.440000 -0.448000 -0.900000 -0.150600 -0.332000 -0.672000 -0.328000 -0.656000 -0.883200 -0.150600 -0.304800 -0.864000 -0.368000 -0.320000 -0.900000 -0.100400 -0.341700 -0.464000 -0.104000 -0.872000 -0.869700 -0.100400 -0.304800 -0.880000 -0.248000 -0.400000 -0.900000 -0.050200 -0.348300 -0.256000 0.192000 -0.944000 -0.867300 -0.050200 -0.304800 -0.784000 -0.136000 -0.600000 -0.900000 0.000000 -0.329500 -0.080000 0.648000 -0.744000 -0.877300 0.000000 -0.304800 -0.592000 0.480000 -0.632000 -0.900000 0.016700 -0.304800 -0.152000 0.720000 -0.664000 -0.850000 0.000000 -0.279000 -0.536000 0.488000 -0.680000 -0.900000 0.050200 -0.268900 0.208000 0.672000 -0.696000 -0.850000 0.042400 -0.243900 -0.408000 0.528000 -0.736000 -0.858900 0.050200 -0.243900 -0.424000 0.568000 -0.696000 -0.850000 0.050200 -0.237100 -0.376000 0.576000 -0.720000 -0.900000 0.070800 -0.243900 -0.096000 0.744000 -0.656000 -0.850000 0.100400 -0.218500 0.128000 0.592000 -0.784000 -0.900000 0.100400 -0.203200 0.536000 0.688000 -0.472000 -0.850000 0.127100 -0.182900 0.192000 0.744000 -0.632000 -0.900000 0.111100 -0.182900 0.552000 0.712000 -0.416000 -0.850000 0.150600 -0.140900 0.432000 0.840000 -0.304000 -0.900000 0.127900 -0.121900 0.560000 0.776000 -0.264000 -0.859300 0.150600 -0.121900 0.456000 0.840000 -0.272000 -0.900000 0.143500 -0.060900 0.528000 0.808000 -0.240000 -0.888500 0.150600 -0.060900 0.504000 0.856000 -0.040000 -0.900000 0.131100 0.000000 0.480000 0.848000 0.192000 -0.867700 0.150600 0.000000 0.552000 0.816000 0.152000 -0.900000 0.118900 0.060900 0.472000 0.856000 0.184000 -0.855400 0.150600 0.060900 0.680000 0.720000 0.072000 -0.900000 0.107300 0.121900 0.512000 0.832000 0.184000 -0.850900 0.150600 0.121900 0.704000 0.704000 0.080000 -0.900000 0.100400 0.165200 0.584000 0.744000 0.296000 -0.850000 0.150600 0.126500 0.640000 0.560000 0.512000 -0.891700 0.100400 0.182900 0.576000 0.688000 0.424000 -0.850000 0.129700 0.182900 0.408000 0.752000 0.504000 -0.850000 0.150600 0.126500 0.640000 0.560000 0.512000 -0.800000 0.148000 0.182900 0.424000 0.336000 0.832000 -0.800000 0.150600 0.181400 0.520000 0.336000 0.776000 -0.797300 0.150600 0.182900 0.336000 0.288000 0.888000 -0.800000 0.190400 0.121900 0.624000 0.752000 0.168000 -0.761100 0.200800 0.182900 0.432000 0.472000 0.760000 -0.788900 0.200800 0.121900 0.632000 0.744000 0.184000 -0.750000 0.208300 0.182900 0.448000 0.624000 0.632000 -0.750000 0.233400 0.121900 0.720000 0.680000 -0.080000 -0.711700 0.251000 0.182900 0.560000 0.528000 0.624000 -0.736800 0.251000 0.121900 0.752000 0.632000 0.144000 -0.700000 0.263400 0.182900 0.512000 0.536000 0.664000 -0.700000 0.297800 0.121900 0.728000 0.680000 -0.032000 -0.660200 0.301200 0.182900 0.480000 0.488000 0.720000 -0.696500 0.301200 0.121900 0.712000 0.672000 0.168000 -0.650000 0.311500 0.182900 0.424000 0.496000 0.752000 -0.653800 0.351500 0.121900 0.656000 0.616000 0.424000 -0.650000 0.351500 0.128300 0.616000 0.616000 0.480000 -0.650000 0.355500 0.121900 0.632000 0.632000 0.432000 -0.600000 0.351500 0.157200 -0.376000 0.584000 0.704000 -0.600000 0.382600 0.121900 0.272000 0.776000 0.560000 -0.566500 0.351500 0.121900 -0.632000 0.576000 0.496000 -0.600000 0.401700 0.085900 0.096000 0.928000 0.336000 -0.550000 0.351500 0.078000 -0.616000 0.672000 0.392000 -0.584600 0.401700 0.060900 -0.416000 0.872000 0.248000 -0.550000 0.359900 0.060900 -0.592000 0.640000 0.480000 -0.568400 0.401700 0.000000 -0.472000 0.832000 -0.264000 -0.550000 0.388900 0.000000 -0.392000 0.856000 0.320000 -0.600000 0.401700 -0.057700 0.168000 0.920000 -0.344000 -0.550000 0.398000 -0.060900 0.000000 0.968000 -0.216000 -0.600000 0.400600 -0.060900 -0.072000 0.912000 -0.384000 -0.550000 0.362300 -0.121900 0.400000 0.656000 -0.632000 -0.600000 0.351500 -0.101600 0.448000 0.496000 -0.736000 -0.566700 0.351500 -0.121900 0.448000 0.536000 -0.704000 -0.600000 0.310600 -0.121900 0.480000 0.424000 -0.760000 -0.550000 0.351500 -0.135900 0.456000 0.632000 -0.616000 -0.600000 0.301200 -0.128700 0.472000 0.520000 -0.704000 -0.550000 0.301200 -0.167400 0.408000 0.504000 -0.752000 -0.600000 0.256700 -0.182900 0.328000 0.496000 -0.792000 -0.550000 0.283200 -0.182900 0.320000 0.472000 -0.816000 -0.600000 0.251000 -0.187000 0.320000 0.456000 -0.816000 -0.550000 0.251000 -0.199600 0.176000 0.288000 -0.936000 -0.600000 0.200800 -0.209200 0.248000 0.288000 -0.920000 -0.550000 0.200800 -0.211100 0.016000 0.048000 -0.992000 -0.600000 0.150600 -0.225200 0.008000 0.128000 -0.984000 -0.550000 0.150600 -0.215400 -0.144000 0.080000 -0.984000 -0.600000 0.100400 -0.237100 -0.096000 0.168000 -0.976000 -0.550000 0.100400 -0.212600 -0.200000 0.352000 -0.904000 -0.600000 0.076600 -0.243900 -0.096000 0.360000 -0.920000 -0.550000 0.067800 -0.243900 0.024000 0.672000 -0.728000 -0.600000 0.050200 -0.251100 0.248000 0.344000 -0.896000 -0.550000 0.050200 -0.258400 0.160000 0.632000 -0.752000 -0.600000 0.000000 -0.284600 0.512000 0.112000 -0.840000 -0.550000 0.015600 -0.304800 0.472000 0.712000 -0.512000 -0.578400 0.000000 -0.304800 0.536000 0.480000 -0.688000 -0.550000 0.000000 -0.335900 0.576000 0.464000 -0.664000 -0.587300 -0.050200 -0.304800 0.688000 0.056000 -0.712000 -0.550000 -0.050200 -0.345500 0.192000 -0.560000 -0.792000 -0.550000 -0.083700 -0.304800 0.088000 -0.736000 -0.664000 -0.500000 -0.050200 -0.339600 -0.136000 -0.672000 -0.720000 -0.500000 -0.082600 -0.304800 0.216000 -0.680000 -0.688000 -0.450000 -0.050200 -0.325200 -0.120000 -0.568000 -0.808000 -0.475800 -0.100400 -0.304800 0.512000 -0.104000 -0.848000 -0.450000 -0.100400 -0.322200 0.392000 -0.360000 -0.840000 -0.500000 -0.127100 -0.304800 0.480000 0.456000 -0.744000 -0.450000 -0.150600 -0.321300 -0.008000 0.120000 -0.992000 -0.500000 -0.150600 -0.319100 0.336000 0.504000 -0.792000 -0.450000 -0.200800 -0.331300 -0.472000 -0.400000 -0.776000 -0.500000 -0.200800 -0.334200 -0.376000 -0.448000 -0.800000 -0.450000 -0.217600 -0.304800 -0.352000 -0.736000 -0.560000 -0.500000 -0.222600 -0.304800 -0.320000 -0.704000 -0.624000 -0.450000 -0.248400 -0.243900 -0.224000 -0.888000 -0.384000 -0.500000 -0.251000 -0.264200 -0.272000 -0.744000 -0.600000 -0.459300 -0.251000 -0.243900 -0.280000 -0.864000 -0.400000 -0.500000 -0.282700 -0.243900 -0.568000 -0.592000 -0.560000 -0.450000 -0.251000 -0.203800 -0.216000 -0.960000 -0.144000 -0.500000 -0.288400 -0.182900 -0.520000 -0.656000 0.528000 -0.450000 -0.255300 -0.182900 -0.208000 -0.656000 0.712000 -0.500000 -0.251000 -0.123800 -0.544000 -0.688000 0.456000 -0.450000 -0.251000 -0.179900 -0.288000 -0.680000 0.664000 -0.500000 -0.250100 -0.121900 -0.432000 -0.712000 0.536000 -0.450000 -0.227100 -0.121900 -0.296000 -0.712000 0.624000 -0.500000 -0.203100 -0.060900 -0.256000 -0.616000 0.736000 -0.450000 -0.200800 -0.072200 -0.256000 -0.536000 0.800000 -0.491400 -0.200800 -0.060900 -0.168000 -0.584000 0.784000 -0.450000 -0.150600 -0.064700 -0.192000 0.128000 0.968000 -0.463100 -0.150600 -0.060900 -0.168000 0.352000 0.912000 -0.450000 -0.100400 -0.078400 -0.088000 0.200000 0.968000 -0.500000 -0.139000 -0.060900 0.080000 0.536000 0.832000 -0.500000 -0.100400 -0.086800 -0.048000 0.256000 0.960000 -0.530700 -0.150600 -0.060900 0.208000 0.504000 0.832000 -0.550000 -0.100400 -0.076900 0.056000 0.056000 0.992000 -0.550000 -0.150600 -0.067100 0.240000 0.480000 0.840000 -0.600000 -0.100400 -0.077400 0.584000 0.048000 0.800000 -0.600000 -0.150600 -0.093600 0.304000 0.568000 0.752000 -0.626600 -0.100400 -0.121900 0.848000 0.208000 0.472000 -0.650000 -0.150600 -0.116200 0.720000 0.480000 0.488000 -0.650000 -0.146100 -0.121900 0.720000 0.504000 0.464000 -0.652900 -0.150600 -0.121900 0.752000 0.456000 0.464000 -0.650000 -0.117900 -0.182900 0.792000 0.600000 0.024000 -0.675300 -0.150600 -0.182900 0.768000 0.552000 0.296000 -0.650000 -0.120200 -0.243900 0.704000 0.520000 -0.472000 -0.674200 -0.150600 -0.243900 0.696000 0.600000 -0.384000 -0.650000 -0.150600 -0.274900 0.544000 0.464000 -0.688000 -0.700000 -0.175300 -0.243900 0.752000 0.600000 -0.240000 -0.650000 -0.200800 -0.297000 0.088000 0.616000 -0.776000 -0.700000 -0.200800 -0.294000 0.576000 0.608000 -0.536000 -0.650000 -0.208600 -0.304800 0.024000 0.680000 -0.728000 -0.700000 -0.211400 -0.304800 0.288000 0.624000 -0.720000 -0.650000 -0.245700 -0.365800 0.168000 0.856000 -0.480000 -0.700000 -0.251000 -0.357800 0.296000 0.496000 -0.808000 -0.678000 -0.251000 -0.365800 0.264000 0.520000 -0.808000 -0.700000 -0.301200 -0.354900 0.160000 -0.240000 -0.952000 -0.650000 -0.267900 -0.365800 0.280000 -0.440000 -0.848000 -0.650000 -0.301200 -0.350300 0.016000 -0.440000 -0.888000 -0.600000 -0.288400 -0.365800 -0.376000 -0.712000 -0.584000 -0.600000 -0.301200 -0.352300 -0.528000 -0.312000 -0.776000 -0.573000 -0.251000 -0.365800 -0.696000 0.544000 -0.464000 -0.567500 -0.301200 -0.304800 -0.696000 0.400000 -0.584000 -0.550000 -0.251000 -0.326800 -0.648000 -0.504000 -0.560000 -0.550000 -0.272400 -0.304800 -0.680000 -0.440000 -0.576000 -0.535300 -0.251000 -0.304800 -0.648000 -0.480000 -0.576000 -0.550000 -0.301200 -0.279200 -0.712000 0.120000 -0.680000 -0.500000 -0.251000 -0.264200 -0.272000 -0.744000 -0.600000 -0.513800 -0.301200 -0.243900 -0.728000 0.592000 -0.328000 -0.500000 -0.282700 -0.243900 -0.568000 -0.592000 -0.560000 -0.511800 -0.301200 -0.182900 -0.912000 0.352000 0.176000 -0.500000 -0.288400 -0.182900 -0.520000 -0.656000 0.528000 -0.550000 -0.301200 -0.123600 -0.624000 -0.440000 0.632000 -0.500000 -0.251000 -0.123800 -0.544000 -0.688000 0.456000 -0.550000 -0.300100 -0.121900 -0.624000 -0.616000 0.472000 -0.501100 -0.251000 -0.121900 -0.552000 -0.624000 0.544000 -0.550000 -0.251000 -0.069700 -0.416000 -0.584000 0.688000 -0.500000 -0.250100 -0.121900 -0.432000 -0.712000 0.536000 -0.550000 -0.242100 -0.060900 -0.400000 -0.536000 0.736000 -0.500000 -0.203100 -0.060900 -0.256000 -0.616000 0.736000 -0.550000 -0.200800 -0.034900 0.016000 -0.040000 0.992000 -0.500000 -0.200800 -0.058700 -0.200000 -0.576000 0.784000 -0.550000 -0.159500 -0.060900 0.248000 0.472000 0.840000 -0.500000 -0.150600 -0.051600 0.024000 0.352000 0.928000 -0.530700 -0.150600 -0.060900 0.208000 0.504000 0.832000 -0.500000 -0.139000 -0.060900 0.080000 0.536000 0.832000 -0.500000 -0.150600 -0.051600 0.024000 0.352000 0.928000 -0.463100 -0.150600 -0.060900 -0.168000 0.352000 0.912000 -0.500000 -0.200800 -0.058700 -0.200000 -0.576000 0.784000 -0.491400 -0.200800 -0.060900 -0.168000 -0.584000 0.784000 -0.500000 -0.203100 -0.060900 -0.256000 -0.616000 0.736000 -0.500000 -0.203100 -0.060900 -0.256000 -0.616000 0.736000 -0.600000 0.251000 0.198700 -0.584000 -0.144000 0.792000 -0.600000 0.251000 0.198700 -0.584000 -0.144000 0.792000 -0.600000 0.301200 0.199900 -0.528000 0.136000 0.832000 -0.586200 0.251000 0.182900 -0.672000 -0.144000 0.720000 -0.577700 0.301200 0.182900 -0.536000 0.272000 0.792000 -0.550000 0.251000 0.125100 -0.872000 -0.184000 0.440000 -0.550000 0.301200 0.149100 -0.896000 -0.096000 0.416000 -0.548800 0.251000 0.121900 -0.912000 -0.176000 0.360000 -0.538800 0.301200 0.121900 -0.912000 0.128000 0.376000 -0.533200 0.251000 0.060900 -0.856000 0.032000 0.512000 -0.526500 0.301200 0.060900 -0.896000 0.008000 0.432000 -0.500800 0.251000 0.000000 -0.792000 -0.016000 0.608000 -0.500000 0.301200 0.002700 -0.768000 -0.080000 0.624000 -0.500000 0.266900 0.000000 -0.760000 -0.040000 0.640000 -0.497900 0.301200 0.000000 -0.728000 -0.144000 0.664000 -0.500000 0.251000 -0.000900 -0.496000 0.112000 0.856000 -0.450000 0.301200 -0.039700 -0.448000 -0.256000 0.848000 -0.450000 0.251000 -0.039600 -0.400000 -0.080000 0.904000 -0.400000 0.301200 -0.051900 -0.168000 -0.472000 0.856000 -0.400000 0.251000 -0.058700 -0.328000 -0.176000 0.920000 -0.353900 0.301200 -0.060900 -0.128000 -0.544000 0.824000 -0.395100 0.251000 -0.060900 -0.344000 -0.184000 0.912000 -0.350000 0.301200 -0.062100 -0.176000 -0.704000 0.680000 -0.350000 0.251000 -0.088400 -0.448000 -0.320000 0.824000 -0.300000 0.301200 -0.077400 -0.160000 -0.712000 0.680000 -0.300000 0.251000 -0.114600 -0.168000 -0.536000 0.824000 -0.250000 0.301200 -0.083600 -0.096000 -0.744000 0.648000 -0.271900 0.251000 -0.121900 -0.240000 -0.760000 0.592000 -0.250000 0.256500 -0.121900 -0.200000 -0.800000 0.552000 -0.300000 0.251000 -0.156100 -0.368000 -0.808000 -0.448000 -0.250000 0.284000 -0.182900 -0.096000 -0.256000 -0.952000 -0.300000 0.284000 -0.182900 -0.168000 -0.184000 -0.960000 -0.250000 0.301200 -0.184400 -0.080000 -0.056000 -0.992000 -0.300000 0.301200 -0.184400 -0.064000 -0.072000 -0.992000 -0.250000 0.351500 -0.189100 -0.160000 0.168000 -0.968000 -0.300000 0.351500 -0.193900 -0.008000 0.064000 -0.992000 -0.250000 0.370000 -0.182900 -0.184000 0.304000 -0.928000 -0.300000 0.379400 -0.182900 -0.016000 0.272000 -0.960000 -0.250000 0.401700 -0.172700 -0.016000 0.288000 -0.952000 -0.300000 0.401700 -0.174800 0.040000 0.368000 -0.920000 -0.250000 0.451900 -0.137900 0.128000 0.536000 -0.824000 -0.300000 0.451900 -0.131100 0.200000 0.712000 -0.664000 -0.250000 0.466900 -0.121900 0.232000 0.968000 0.016000 -0.300000 0.458100 -0.121900 0.224000 0.952000 -0.176000 -0.250000 0.451900 -0.094000 0.248000 0.784000 0.552000 -0.300000 0.451900 -0.106900 0.184000 0.864000 0.456000 -0.250000 0.432000 -0.060900 0.224000 0.624000 0.736000 -0.300000 0.430700 -0.060900 0.128000 0.808000 0.568000 -0.250000 0.401700 -0.026800 -0.216000 0.176000 0.952000 -0.300000 0.401700 -0.022200 0.096000 0.472000 0.864000 -0.250000 0.351500 -0.020200 -0.488000 -0.416000 0.760000 -0.300000 0.351500 -0.009100 -0.016000 -0.144000 0.984000 -0.250000 0.317900 -0.060900 -0.432000 -0.680000 0.584000 -0.300000 0.310700 -0.060900 -0.072000 -0.760000 0.640000 -0.250000 0.301200 -0.083600 -0.096000 -0.744000 0.648000 -0.300000 0.301200 -0.077400 -0.160000 -0.712000 0.680000 -0.300000 0.310700 -0.060900 -0.072000 -0.760000 0.640000 -0.350000 0.301200 -0.062100 -0.176000 -0.704000 0.680000 -0.350000 0.302200 -0.060900 -0.144000 -0.624000 0.760000 -0.353900 0.301200 -0.060900 -0.128000 -0.544000 0.824000 -0.350000 0.351500 -0.021800 0.032000 -0.048000 0.992000 -0.400000 0.301200 -0.051900 -0.168000 -0.472000 0.856000 -0.400000 0.351500 -0.018700 -0.136000 -0.208000 0.960000 -0.450000 0.301200 -0.039700 -0.448000 -0.256000 0.848000 -0.450000 0.351500 -0.003200 -0.296000 0.344000 0.888000 -0.497900 0.301200 0.000000 -0.728000 -0.144000 0.664000 -0.458200 0.351500 0.000000 -0.280000 0.520000 0.800000 -0.500000 0.301200 0.002700 -0.768000 -0.080000 0.624000 -0.500000 0.351500 0.029100 -0.680000 0.048000 0.728000 -0.526500 0.301200 0.060900 -0.896000 0.008000 0.432000 -0.540600 0.351500 0.060900 -0.584000 0.632000 0.496000 -0.538800 0.301200 0.121900 -0.912000 0.128000 0.376000 -0.550000 0.351500 0.078000 -0.616000 0.672000 0.392000 -0.550000 0.331800 0.121900 -0.696000 0.536000 0.456000 -0.566500 0.351500 0.121900 -0.632000 0.576000 0.496000 -0.550000 0.301200 0.149100 -0.896000 -0.096000 0.416000 -0.600000 0.351500 0.157200 -0.376000 0.584000 0.704000 -0.577700 0.301200 0.182900 -0.536000 0.272000 0.792000 -0.600000 0.327100 0.182900 -0.144000 0.552000 0.816000 -0.600000 0.351500 0.157200 -0.376000 0.584000 0.704000 -0.650000 0.311500 0.182900 0.424000 0.496000 0.752000 -0.650000 0.351500 0.128300 0.616000 0.616000 0.480000 -0.650000 0.351500 0.128300 0.616000 0.616000 0.480000 -0.586200 0.251000 0.182900 -0.672000 -0.144000 0.720000 -0.586200 0.251000 0.182900 -0.672000 -0.144000 0.720000 -0.600000 0.251000 0.198700 -0.584000 -0.144000 0.792000 -0.600000 0.211800 0.182900 -0.672000 -0.280000 0.672000 -0.650000 0.251000 0.217300 -0.016000 0.232000 0.968000 -0.604600 0.200800 0.182900 -0.672000 -0.288000 0.664000 -0.650000 0.200800 0.219700 -0.496000 -0.256000 0.824000 -0.641000 0.150600 0.182900 -0.528000 -0.464000 0.696000 -0.650000 0.150600 0.191100 -0.504000 -0.472000 0.720000 -0.650000 0.141000 0.182900 -0.512000 -0.488000 0.704000 -0.700000 0.150600 0.220800 -0.264000 -0.416000 0.864000 -0.685300 0.100400 0.182900 -0.504000 -0.560000 0.648000 -0.700000 0.100400 0.197200 -0.456000 -0.560000 0.680000 -0.700000 0.088000 0.182900 -0.464000 -0.608000 0.640000 -0.750000 0.100400 0.207000 0.032000 -0.192000 0.976000 -0.750000 0.062100 0.182900 -0.416000 -0.632000 0.648000 -0.800000 0.100400 0.199400 -0.032000 0.024000 0.992000 -0.762700 0.050200 0.182900 -0.512000 -0.672000 0.520000 -0.800000 0.050200 0.211000 -0.336000 -0.552000 0.752000 -0.800000 0.035400 0.182900 -0.432000 -0.808000 0.384000 -0.850000 0.050200 0.216300 -0.184000 -0.272000 0.936000 -0.846600 0.000000 0.182900 -0.736000 -0.616000 0.264000 -0.850000 0.000000 0.194300 -0.704000 -0.640000 0.296000 -0.850000 -0.004200 0.182900 -0.720000 -0.616000 0.288000 -0.900000 0.000000 0.237100 -0.176000 -0.616000 0.760000 -0.880500 -0.050200 0.182900 -0.744000 -0.528000 0.384000 -0.900000 -0.050200 0.230400 -0.448000 -0.568000 0.680000 -0.900000 -0.076800 0.182900 -0.504000 -0.624000 0.592000 -0.950000 -0.050200 0.197900 0.336000 -0.192000 0.920000 -0.934300 -0.100400 0.182900 -0.392000 -0.752000 0.520000 -0.950000 -0.100400 0.196500 0.208000 -0.704000 0.672000 -0.950000 -0.108800 0.182900 0.232000 -0.768000 0.584000 -0.934300 -0.100400 0.182900 -0.392000 -0.752000 0.520000 -0.950000 -0.142500 0.121900 -0.608000 -0.672000 0.392000 -0.900000 -0.100400 0.145900 -0.608000 -0.728000 0.304000 -0.900000 -0.107100 0.121900 -0.584000 -0.768000 0.240000 -0.892500 -0.100400 0.121900 -0.688000 -0.680000 0.240000 -0.900000 -0.117100 0.060900 -0.656000 -0.736000 0.136000 -0.881900 -0.100400 0.060900 -0.752000 -0.632000 0.152000 -0.900000 -0.125700 0.000000 -0.664000 -0.728000 0.136000 -0.873300 -0.100400 0.000000 -0.752000 -0.632000 0.120000 -0.900000 -0.135500 -0.060900 -0.672000 -0.712000 0.168000 -0.865600 -0.100400 -0.060900 -0.776000 -0.616000 0.120000 -0.900000 -0.148200 -0.121900 -0.664000 -0.728000 0.088000 -0.858300 -0.100400 -0.121900 -0.792000 -0.600000 0.056000 -0.900000 -0.150600 -0.145400 -0.696000 -0.704000 0.104000 -0.858100 -0.100400 -0.182900 -0.824000 -0.552000 0.000000 -0.895100 -0.150600 -0.182900 -0.744000 -0.648000 0.104000 -0.860900 -0.100400 -0.243900 -0.856000 -0.496000 -0.072000 -0.890800 -0.150600 -0.243900 -0.848000 -0.512000 0.064000 -0.869700 -0.100400 -0.304800 -0.880000 -0.248000 -0.400000 -0.883200 -0.150600 -0.304800 -0.864000 -0.368000 -0.320000 -0.890800 -0.150600 -0.243900 -0.848000 -0.512000 0.064000 -0.900000 -0.181100 -0.304800 -0.768000 -0.440000 -0.448000 -0.900000 -0.163000 -0.243900 -0.816000 -0.552000 0.128000 -0.911900 -0.200800 -0.304800 -0.864000 -0.480000 -0.128000 -0.928800 -0.200800 -0.243900 -0.736000 -0.616000 0.240000 -0.942100 -0.251000 -0.304800 -0.752000 -0.552000 0.344000 -0.950000 -0.224400 -0.243900 -0.688000 -0.640000 0.328000 -0.950000 -0.251000 -0.295200 -0.640000 -0.496000 0.576000 -0.942100 -0.251000 -0.304800 -0.752000 -0.552000 0.344000 -0.950000 -0.261400 -0.304800 -0.752000 -0.584000 0.288000 -0.950000 -0.261400 -0.304800 -0.752000 -0.584000 0.288000 -0.650000 0.251000 0.217300 -0.016000 0.232000 0.968000 -0.650000 0.251000 0.217300 -0.016000 0.232000 0.968000 -0.600000 0.251000 0.198700 -0.584000 -0.144000 0.792000 -0.650000 0.301200 0.190400 0.408000 0.464000 0.776000 -0.600000 0.301200 0.199900 -0.528000 0.136000 0.832000 -0.600000 0.301200 0.199900 -0.528000 0.136000 0.832000 -0.700000 0.251000 0.193900 0.488000 0.504000 0.704000 -0.700000 0.251000 0.193900 0.488000 0.504000 0.704000 -0.650000 0.251000 0.217300 -0.016000 0.232000 0.968000 -0.700000 0.200800 0.226400 0.328000 0.432000 0.832000 -0.650000 0.200800 0.219700 -0.496000 -0.256000 0.824000 -0.700000 0.150600 0.220800 -0.264000 -0.416000 0.864000 -0.650000 0.150600 0.191100 -0.504000 -0.472000 0.720000 -0.650000 0.150600 0.191100 -0.504000 -0.472000 0.720000 -0.750000 0.200800 0.191100 0.424000 0.552000 0.712000 -0.750000 0.200800 0.191100 0.424000 0.552000 0.712000 -0.700000 0.200800 0.226400 0.328000 0.432000 0.832000 -0.750000 0.150600 0.201100 0.320000 0.240000 0.912000 -0.700000 0.150600 0.220800 -0.264000 -0.416000 0.864000 -0.750000 0.100400 0.207000 0.032000 -0.192000 0.976000 -0.700000 0.100400 0.197200 -0.456000 -0.560000 0.680000 -0.700000 0.100400 0.197200 -0.456000 -0.560000 0.680000 -0.850000 0.050200 0.216300 -0.184000 -0.272000 0.936000 -0.850000 0.050200 0.216300 -0.184000 -0.272000 0.936000 -0.800000 0.050200 0.211000 -0.336000 -0.552000 0.752000 -0.850000 0.100400 0.222500 0.440000 0.584000 0.672000 -0.800000 0.100400 0.199400 -0.032000 0.024000 0.992000 -0.800000 0.100400 0.199400 -0.032000 0.024000 0.992000 -0.900000 0.000000 0.237100 -0.176000 -0.616000 0.760000 -0.900000 0.000000 0.237100 -0.176000 -0.616000 0.760000 -0.850000 0.000000 0.194300 -0.704000 -0.640000 0.296000 -0.900000 0.050200 0.226800 0.488000 0.496000 0.712000 -0.850000 0.050200 0.216300 -0.184000 -0.272000 0.936000 -0.850000 0.050200 0.216300 -0.184000 -0.272000 0.936000 -0.950000 -0.050200 0.197900 0.336000 -0.192000 0.920000 -0.950000 -0.050200 0.197900 0.336000 -0.192000 0.920000 -0.900000 -0.050200 0.230400 -0.448000 -0.568000 0.680000 -0.950000 0.000000 0.206500 0.400000 0.008000 0.912000 -0.900000 0.000000 0.237100 -0.176000 -0.616000 0.760000 -0.900000 0.000000 0.237100 -0.176000 -0.616000 0.760000 --0.950000 0.150600 0.154300 0.208000 0.640000 0.736000 --0.950000 0.150600 0.154300 0.208000 0.640000 0.736000 --0.900000 0.150600 0.126400 0.344000 0.632000 0.688000 --0.950000 0.178500 0.121900 0.272000 0.648000 0.704000 --0.900000 0.154600 0.121900 0.352000 0.624000 0.688000 --0.950000 0.200800 0.096100 0.208000 0.672000 0.704000 --0.900000 0.200800 0.074800 0.296000 0.712000 0.624000 --0.950000 0.226300 0.060900 0.264000 0.760000 0.584000 --0.900000 0.210300 0.060900 0.312000 0.744000 0.576000 --0.950000 0.251000 0.016800 0.288000 0.808000 0.504000 --0.900000 0.240500 0.000000 0.368000 0.840000 0.376000 --0.928700 0.251000 0.000000 0.312000 0.848000 0.408000 --0.900000 0.251000 -0.035000 0.384000 0.864000 0.312000 --0.950000 0.258900 0.000000 0.296000 0.848000 0.432000 --0.900000 0.258900 -0.060900 0.400000 0.896000 0.144000 --0.950000 0.277400 -0.060900 0.336000 0.928000 0.080000 --0.900000 0.251000 -0.101700 0.376000 0.896000 -0.216000 --0.950000 0.267200 -0.121900 0.344000 0.864000 -0.336000 --0.910500 0.251000 -0.121900 0.344000 0.880000 -0.304000 --0.950000 0.251000 -0.157200 0.320000 0.808000 -0.480000 --0.900000 0.246900 -0.121900 0.360000 0.872000 -0.304000 --0.950000 0.237800 -0.182900 0.296000 0.760000 -0.568000 --0.900000 0.214200 -0.182900 0.360000 0.720000 -0.576000 --0.950000 0.200800 -0.231900 0.272000 0.640000 -0.704000 --0.900000 0.200800 -0.201400 0.352000 0.680000 -0.640000 --0.950000 0.189400 -0.243900 0.264000 0.616000 -0.728000 --0.900000 0.162400 -0.243900 0.336000 0.616000 -0.704000 --0.950000 0.150600 -0.281200 0.240000 0.600000 -0.752000 --0.900000 0.150600 -0.256300 0.328000 0.616000 -0.704000 --0.950000 0.126000 -0.304800 0.168000 0.528000 -0.824000 --0.900000 0.104600 -0.304800 0.304000 0.568000 -0.760000 --0.950000 0.100400 -0.325900 0.192000 0.384000 -0.896000 --0.900000 0.100400 -0.308600 0.312000 0.536000 -0.776000 --0.950000 0.050200 -0.340200 0.184000 0.072000 -0.976000 --0.900000 0.050200 -0.331200 0.320000 0.232000 -0.912000 --0.950000 0.000000 -0.337100 0.184000 -0.088000 -0.976000 --0.900000 0.000000 -0.328400 0.216000 0.000000 -0.968000 --0.950000 -0.050200 -0.337400 0.088000 0.008000 -0.992000 --0.900000 -0.050200 -0.330000 0.160000 0.128000 -0.976000 --0.900000 0.000000 -0.328400 0.216000 0.000000 -0.968000 --0.850000 -0.050200 -0.323400 0.248000 0.176000 -0.944000 --0.850000 0.000000 -0.313800 0.264000 0.064000 -0.960000 --0.808200 -0.050200 -0.304800 0.280000 0.136000 -0.944000 --0.823600 0.000000 -0.304800 0.296000 0.080000 -0.944000 --0.800000 -0.050200 -0.302200 0.264000 0.120000 -0.952000 --0.800000 0.000000 -0.298500 0.248000 0.080000 -0.960000 --0.750000 -0.050200 -0.287100 0.288000 0.040000 -0.952000 --0.750000 0.000000 -0.285200 0.328000 0.160000 -0.920000 --0.700000 -0.050200 -0.272000 0.360000 0.104000 -0.920000 --0.700000 0.000000 -0.262900 0.392000 0.288000 -0.864000 --0.650000 -0.050200 -0.249300 0.496000 0.208000 -0.840000 --0.669700 0.000000 -0.243900 0.480000 0.312000 -0.808000 --0.650000 -0.035200 -0.243900 0.544000 0.264000 -0.792000 --0.650000 0.000000 -0.224600 0.632000 0.368000 -0.672000 --0.642900 -0.050200 -0.243900 0.560000 0.208000 -0.792000 --0.621400 0.000000 -0.182900 0.848000 0.280000 -0.440000 --0.606100 -0.050200 -0.182900 0.864000 0.248000 -0.424000 --0.606100 -0.050200 -0.182900 0.864000 0.248000 -0.424000 --0.950000 0.127100 0.182900 0.248000 0.536000 0.800000 --0.950000 0.127100 0.182900 0.248000 0.536000 0.800000 --0.950000 0.150600 0.154300 0.208000 0.640000 0.736000 --0.900000 0.101900 0.182900 0.304000 0.552000 0.768000 --0.900000 0.150600 0.126400 0.344000 0.632000 0.688000 --0.900000 0.150600 0.126400 0.344000 0.632000 0.688000 --0.939400 -0.100400 0.121900 -0.456000 -0.816000 0.336000 --0.939400 -0.100400 0.121900 -0.456000 -0.816000 0.336000 --0.900000 -0.100400 0.174900 -0.400000 -0.624000 0.656000 --0.900000 -0.127600 0.121900 -0.608000 -0.704000 0.344000 --0.900000 -0.127600 0.121900 -0.608000 -0.704000 0.344000 --0.900000 0.150600 0.126400 0.344000 0.632000 0.688000 --0.900000 0.150600 0.126400 0.344000 0.632000 0.688000 --0.900000 0.154600 0.121900 0.352000 0.624000 0.688000 --0.892900 0.150600 0.121900 0.360000 0.624000 0.680000 --0.900000 0.200800 0.074800 0.296000 0.712000 0.624000 --0.850000 0.150600 0.098600 0.360000 0.600000 0.704000 --0.879600 0.200800 0.060900 0.352000 0.712000 0.600000 --0.850000 0.184100 0.060900 0.376000 0.632000 0.664000 --0.850000 0.200800 0.035600 0.384000 0.744000 0.536000 --0.800000 0.153700 0.060900 0.432000 0.632000 0.632000 --0.811000 0.200800 0.000000 0.408000 0.816000 0.392000 --0.800000 0.195100 0.000000 0.456000 0.768000 0.432000 --0.800000 0.200800 -0.016800 0.416000 0.840000 0.336000 --0.750000 0.162200 0.000000 0.464000 0.672000 0.560000 --0.768900 0.200800 -0.060900 0.424000 0.888000 0.160000 --0.750000 0.191300 -0.060900 0.496000 0.856000 0.072000 --0.800000 0.200800 -0.113900 0.392000 0.880000 -0.256000 --0.750000 0.174400 -0.121900 0.448000 0.824000 -0.336000 --0.800000 0.198900 -0.121900 0.384000 0.872000 -0.288000 --0.750000 0.150600 -0.159200 0.432000 0.664000 -0.600000 --0.800000 0.163000 -0.182900 0.392000 0.688000 -0.600000 --0.779100 0.150600 -0.182900 0.400000 0.664000 -0.616000 --0.800000 0.150600 -0.199200 0.384000 0.648000 -0.648000 --0.750000 0.132600 -0.182900 0.408000 0.656000 -0.624000 --0.800000 0.108800 -0.243900 0.352000 0.608000 -0.704000 --0.750000 0.100400 -0.222000 0.432000 0.576000 -0.680000 --0.785800 0.100400 -0.243900 0.360000 0.584000 -0.720000 --0.750000 0.077000 -0.243900 0.368000 0.552000 -0.744000 --0.800000 0.100400 -0.252800 0.360000 0.584000 -0.720000 --0.750000 0.050200 -0.267100 0.368000 0.432000 -0.816000 --0.800000 0.050200 -0.288900 0.352000 0.360000 -0.856000 --0.750000 0.000000 -0.285200 0.328000 0.160000 -0.920000 --0.800000 0.000000 -0.298500 0.248000 0.080000 -0.960000 --0.800000 0.050200 -0.288900 0.352000 0.360000 -0.856000 --0.823600 0.000000 -0.304800 0.296000 0.080000 -0.944000 --0.836500 0.050200 -0.304800 0.336000 0.344000 -0.872000 --0.850000 0.000000 -0.313800 0.264000 0.064000 -0.960000 --0.850000 0.050200 -0.311100 0.336000 0.328000 -0.872000 --0.900000 0.000000 -0.328400 0.216000 0.000000 -0.968000 --0.900000 0.050200 -0.331200 0.320000 0.232000 -0.912000 --0.850000 0.050200 -0.311100 0.336000 0.328000 -0.872000 --0.900000 0.100400 -0.308600 0.312000 0.536000 -0.776000 --0.850000 0.061400 -0.304800 0.336000 0.392000 -0.848000 --0.892300 0.100400 -0.304800 0.320000 0.536000 -0.776000 --0.850000 0.100400 -0.281200 0.344000 0.488000 -0.792000 --0.900000 0.104600 -0.304800 0.304000 0.568000 -0.760000 --0.850000 0.135500 -0.243900 0.320000 0.608000 -0.712000 --0.900000 0.150600 -0.256300 0.328000 0.616000 -0.704000 --0.878700 0.150600 -0.243900 0.328000 0.616000 -0.704000 --0.900000 0.162400 -0.243900 0.336000 0.616000 -0.704000 --0.850000 0.150600 -0.229000 0.320000 0.608000 -0.720000 --0.900000 0.200800 -0.201400 0.352000 0.680000 -0.640000 --0.850000 0.188600 -0.182900 0.360000 0.712000 -0.592000 --0.874200 0.200800 -0.182900 0.360000 0.712000 -0.584000 --0.850000 0.200800 -0.163600 0.360000 0.768000 -0.512000 --0.900000 0.214200 -0.182900 0.360000 0.720000 -0.576000 --0.850000 0.222300 -0.121900 0.408000 0.856000 -0.296000 --0.900000 0.246900 -0.121900 0.360000 0.872000 -0.304000 --0.850000 0.235300 -0.060900 0.408000 0.904000 0.008000 --0.900000 0.251000 -0.101700 0.376000 0.896000 -0.216000 --0.884300 0.251000 -0.060900 0.432000 0.880000 0.144000 --0.900000 0.258900 -0.060900 0.400000 0.896000 0.144000 --0.900000 0.251000 -0.035000 0.384000 0.864000 0.312000 --0.884300 0.251000 -0.060900 0.432000 0.880000 0.144000 --0.900000 0.240500 0.000000 0.368000 0.840000 0.376000 --0.850000 0.235300 -0.060900 0.408000 0.904000 0.008000 --0.850000 0.219100 0.000000 0.368000 0.824000 0.424000 --0.800000 0.214400 -0.060900 0.400000 0.896000 0.176000 --0.811000 0.200800 0.000000 0.408000 0.816000 0.392000 --0.800000 0.200800 -0.016800 0.416000 0.840000 0.336000 --0.800000 0.214400 -0.060900 0.400000 0.896000 0.176000 --0.768900 0.200800 -0.060900 0.424000 0.888000 0.160000 --0.800000 0.200800 -0.113900 0.392000 0.880000 -0.256000 --0.800000 0.214400 -0.060900 0.400000 0.896000 0.176000 --0.804300 0.200800 -0.121900 0.384000 0.872000 -0.288000 --0.850000 0.235300 -0.060900 0.408000 0.904000 0.008000 --0.850000 0.222300 -0.121900 0.408000 0.856000 -0.296000 --0.804300 0.200800 -0.121900 0.384000 0.872000 -0.288000 --0.850000 0.200800 -0.163600 0.360000 0.768000 -0.512000 --0.800000 0.198900 -0.121900 0.384000 0.872000 -0.288000 --0.850000 0.188600 -0.182900 0.360000 0.712000 -0.592000 --0.800000 0.163000 -0.182900 0.392000 0.688000 -0.600000 --0.850000 0.150600 -0.229000 0.320000 0.608000 -0.720000 --0.800000 0.150600 -0.199200 0.384000 0.648000 -0.648000 --0.850000 0.135500 -0.243900 0.320000 0.608000 -0.712000 --0.800000 0.108800 -0.243900 0.352000 0.608000 -0.704000 --0.850000 0.100400 -0.281200 0.344000 0.488000 -0.792000 --0.800000 0.100400 -0.252800 0.360000 0.584000 -0.720000 --0.850000 0.061400 -0.304800 0.336000 0.392000 -0.848000 --0.800000 0.050200 -0.288900 0.352000 0.360000 -0.856000 --0.836500 0.050200 -0.304800 0.336000 0.344000 -0.872000 --0.850000 0.061400 -0.304800 0.336000 0.392000 -0.848000 --0.850000 0.050200 -0.311100 0.336000 0.328000 -0.872000 --0.850000 0.050200 -0.311100 0.336000 0.328000 -0.872000 --0.850000 0.127100 0.121900 0.424000 0.560000 0.704000 --0.850000 0.127100 0.121900 0.424000 0.560000 0.704000 --0.820700 0.100400 0.121900 0.496000 0.488000 0.704000 --0.850000 0.100400 0.150400 0.488000 0.512000 0.696000 --0.850000 0.100400 0.150400 0.488000 0.512000 0.696000 --0.839600 0.000000 0.182900 0.264000 0.152000 0.944000 --0.839600 0.000000 0.182900 0.264000 0.152000 0.944000 --0.809300 -0.050200 0.182900 0.232000 0.160000 0.952000 --0.800000 0.000000 0.163200 0.400000 0.288000 0.864000 --0.800000 -0.050200 0.179900 0.264000 0.176000 0.944000 --0.750000 0.000000 0.129400 0.496000 0.360000 0.776000 --0.750000 -0.050200 0.155100 0.464000 0.288000 0.832000 --0.740500 0.000000 0.121900 0.504000 0.352000 0.784000 --0.708600 -0.050200 0.121900 0.496000 0.344000 0.784000 --0.700000 0.000000 0.089700 0.584000 0.336000 0.736000 --0.700000 -0.050200 0.115300 0.496000 0.344000 0.792000 --0.666100 0.000000 0.060900 0.560000 0.376000 0.728000 --0.650000 -0.050200 0.076400 0.576000 0.320000 0.744000 --0.650000 -0.023500 0.060900 0.576000 0.360000 0.720000 --0.635700 -0.050200 0.060900 0.640000 0.304000 0.696000 --0.650000 0.000000 0.045200 0.576000 0.400000 0.704000 --0.600000 -0.050200 0.018400 0.648000 0.320000 0.688000 --0.609800 0.000000 0.000000 0.696000 0.384000 0.592000 --0.600000 -0.018300 0.000000 0.712000 0.368000 0.584000 --0.600000 0.000000 -0.017800 0.736000 0.384000 0.544000 --0.584800 -0.050200 0.000000 0.744000 0.336000 0.568000 --0.573200 0.000000 -0.060900 0.920000 0.296000 -0.248000 --0.554400 -0.050200 -0.060900 0.944000 0.280000 0.128000 --0.554400 -0.050200 -0.060900 0.944000 0.280000 0.128000 --0.800000 -0.063400 0.182900 0.240000 0.160000 0.952000 --0.800000 -0.063400 0.182900 0.240000 0.160000 0.952000 --0.809300 -0.050200 0.182900 0.232000 0.160000 0.952000 --0.800000 -0.050200 0.179900 0.264000 0.176000 0.944000 --0.800000 -0.050200 0.179900 0.264000 0.176000 0.944000 --0.850000 -0.137400 0.182900 -0.304000 -0.312000 0.896000 --0.850000 -0.137400 0.182900 -0.304000 -0.312000 0.896000 --0.836800 -0.150600 0.182900 -0.304000 -0.304000 0.896000 --0.850000 -0.150600 0.175600 -0.632000 -0.392000 0.664000 --0.803100 -0.200800 0.182900 -0.456000 -0.168000 0.864000 --0.850000 -0.200800 0.125700 -0.776000 -0.360000 0.504000 --0.850000 -0.200800 0.125700 -0.776000 -0.360000 0.504000 --0.800000 -0.251000 0.157900 -0.576000 -0.400000 0.696000 --0.800000 -0.251000 0.157900 -0.576000 -0.400000 0.696000 --0.800000 -0.280700 0.121900 -0.736000 -0.528000 0.408000 --0.819200 -0.251000 0.121900 -0.760000 -0.496000 0.400000 --0.800000 -0.301200 0.085900 -0.768000 -0.544000 0.304000 --0.838400 -0.251000 0.060900 -0.808000 -0.528000 0.248000 --0.805900 -0.301200 0.060900 -0.800000 -0.536000 0.232000 --0.800000 -0.301200 0.085900 -0.768000 -0.544000 0.304000 --0.800000 -0.310100 0.060900 -0.800000 -0.544000 0.224000 --0.805900 -0.301200 0.060900 -0.800000 -0.536000 0.232000 --0.800000 -0.327900 0.000000 -0.800000 -0.560000 0.176000 --0.817700 -0.301200 0.000000 -0.808000 -0.560000 0.168000 --0.817700 -0.301200 0.000000 -0.808000 -0.560000 0.168000 --0.800000 0.077200 0.121900 0.512000 0.416000 0.744000 --0.800000 0.077200 0.121900 0.512000 0.416000 0.744000 --0.781300 0.050200 0.121900 0.536000 0.400000 0.736000 --0.800000 0.050200 0.139800 0.504000 0.392000 0.760000 --0.800000 0.050200 0.139800 0.504000 0.392000 0.760000 --0.776900 -0.100400 0.182900 0.184000 0.120000 0.968000 --0.776900 -0.100400 0.182900 0.184000 0.120000 0.968000 --0.750000 -0.100400 0.174700 0.320000 0.192000 0.920000 --0.750000 -0.136500 0.182900 0.216000 0.112000 0.968000 --0.700000 -0.100400 0.138900 0.488000 0.288000 0.816000 --0.743500 -0.150600 0.182900 0.192000 0.096000 0.968000 --0.700000 -0.150600 0.164200 0.408000 0.248000 0.872000 --0.703900 -0.200800 0.182900 0.128000 0.064000 0.984000 --0.700000 -0.200800 0.182200 0.152000 0.072000 0.984000 --0.700000 -0.208700 0.182900 0.176000 0.120000 0.968000 --0.650000 -0.200800 0.153500 0.376000 0.280000 0.872000 --0.650000 -0.249200 0.182900 0.176000 0.464000 0.864000 --0.600000 -0.200800 0.130000 0.152000 0.560000 0.808000 --0.638500 -0.251000 0.182900 0.072000 0.424000 0.896000 --0.600000 -0.251000 0.177800 0.080000 0.520000 0.840000 --0.600000 -0.260000 0.182900 0.056000 0.320000 0.944000 --0.550000 -0.251000 0.173600 -0.016000 0.472000 0.872000 --0.550000 -0.264400 0.182900 -0.072000 0.456000 0.880000 --0.512000 -0.251000 0.182900 -0.112000 0.632000 0.760000 --0.550000 -0.251000 0.173600 -0.016000 0.472000 0.872000 --0.500000 -0.249000 0.182900 -0.112000 0.656000 0.744000 --0.550000 -0.202900 0.121900 0.032000 0.728000 0.680000 --0.500000 -0.200800 0.127000 -0.088000 0.600000 0.784000 --0.536800 -0.200800 0.121900 -0.104000 0.736000 0.664000 --0.500000 -0.196200 0.121900 -0.112000 0.784000 0.600000 --0.550000 -0.200800 0.118700 0.032000 0.784000 0.608000 --0.500000 -0.166600 0.060900 -0.304000 0.832000 0.448000 --0.550000 -0.166800 0.060900 0.264000 0.816000 0.504000 --0.500000 -0.150600 0.019400 -0.216000 0.856000 0.464000 --0.550000 -0.150600 0.029600 0.504000 0.688000 0.512000 --0.500000 -0.141000 0.000000 -0.040000 0.880000 0.456000 --0.550000 -0.125000 0.000000 0.608000 0.616000 0.488000 --0.500000 -0.119500 -0.060900 -0.160000 0.976000 0.112000 --0.550000 -0.100400 -0.036900 0.792000 0.376000 0.464000 --0.533200 -0.100400 -0.060900 0.712000 0.696000 -0.024000 --0.533200 -0.100400 -0.060900 0.712000 0.696000 -0.024000 --0.750000 -0.267900 0.182900 -0.232000 -0.192000 0.944000 --0.750000 -0.267900 0.182900 -0.232000 -0.192000 0.944000 --0.750000 -0.301200 0.168400 -0.360000 -0.432000 0.816000 --0.700000 -0.272200 0.182900 -0.072000 -0.128000 0.984000 --0.700000 -0.301200 0.175400 -0.248000 -0.280000 0.920000 --0.671000 -0.301200 0.182900 -0.120000 -0.104000 0.984000 --0.700000 -0.351500 0.155000 -0.664000 -0.344000 0.656000 --0.663400 -0.351500 0.182900 -0.304000 -0.080000 0.944000 --0.700000 -0.401700 0.124500 -0.664000 -0.408000 0.616000 --0.650000 -0.385200 0.182900 -0.496000 -0.152000 0.848000 --0.650000 -0.401700 0.178700 -0.552000 -0.344000 0.752000 --0.644900 -0.401700 0.182900 -0.528000 -0.240000 0.808000 --0.650000 -0.451900 0.140100 -0.528000 -0.568000 0.624000 --0.600000 -0.446800 0.182900 -0.240000 -0.464000 0.848000 --0.600000 -0.451900 0.179400 -0.216000 -0.496000 0.832000 --0.583500 -0.451900 0.182900 -0.128000 -0.544000 0.824000 --0.600000 -0.495400 0.121900 -0.392000 -0.720000 0.560000 --0.550000 -0.456500 0.182900 0.056000 -0.736000 0.672000 --0.550000 -0.494000 0.121900 0.024000 -0.832000 0.536000 --0.600000 -0.495400 0.121900 -0.392000 -0.720000 0.560000 --0.550000 -0.502100 0.104800 0.104000 -0.840000 0.520000 --0.600000 -0.502100 0.110700 -0.280000 -0.792000 0.528000 --0.550000 -0.532000 0.060900 0.080000 -0.776000 0.624000 --0.600000 -0.531600 0.060900 -0.448000 -0.736000 0.496000 --0.600000 -0.502100 0.110700 -0.280000 -0.792000 0.528000 --0.640700 -0.502100 0.060900 -0.496000 -0.728000 0.456000 --0.600000 -0.495400 0.121900 -0.392000 -0.720000 0.560000 --0.650000 -0.495900 0.060900 -0.528000 -0.720000 0.432000 --0.650000 -0.463300 0.121900 -0.512000 -0.696000 0.496000 --0.700000 -0.453200 0.060900 -0.560000 -0.720000 0.392000 --0.664200 -0.451900 0.121900 -0.552000 -0.696000 0.448000 --0.700000 -0.451900 0.063700 -0.672000 -0.600000 0.424000 --0.700000 -0.404000 0.121900 -0.624000 -0.536000 0.560000 --0.701000 -0.451900 0.060900 -0.792000 -0.480000 0.344000 --0.701700 -0.401700 0.121900 -0.704000 -0.408000 0.568000 --0.731300 -0.401700 0.060900 -0.784000 -0.496000 0.344000 --0.739400 -0.351500 0.121900 -0.528000 -0.576000 0.616000 --0.750000 -0.377100 0.060900 -0.760000 -0.552000 0.320000 --0.750000 -0.351500 0.110100 -0.600000 -0.584000 0.536000 --0.767900 -0.351500 0.060900 -0.760000 -0.568000 0.296000 --0.767900 -0.351500 0.060900 -0.760000 -0.568000 0.296000 --0.750000 -0.301200 0.168400 -0.360000 -0.432000 0.816000 --0.750000 -0.301200 0.168400 -0.360000 -0.432000 0.816000 --0.700000 -0.301200 0.175400 -0.248000 -0.280000 0.920000 --0.750000 -0.342500 0.121900 -0.536000 -0.592000 0.592000 --0.700000 -0.351500 0.155000 -0.664000 -0.344000 0.656000 --0.739400 -0.351500 0.121900 -0.528000 -0.576000 0.616000 --0.700000 -0.401700 0.124500 -0.664000 -0.408000 0.616000 --0.701700 -0.401700 0.121900 -0.704000 -0.408000 0.568000 --0.700000 -0.404000 0.121900 -0.624000 -0.536000 0.560000 --0.700000 -0.401700 0.124500 -0.664000 -0.408000 0.616000 --0.664200 -0.451900 0.121900 -0.552000 -0.696000 0.448000 --0.650000 -0.401700 0.178700 -0.552000 -0.344000 0.752000 --0.650000 -0.451900 0.140100 -0.528000 -0.568000 0.624000 --0.664200 -0.451900 0.121900 -0.552000 -0.696000 0.448000 --0.650000 -0.463300 0.121900 -0.512000 -0.696000 0.496000 --0.650000 -0.451900 0.140100 -0.528000 -0.568000 0.624000 --0.600000 -0.495400 0.121900 -0.392000 -0.720000 0.560000 --0.600000 -0.451900 0.179400 -0.216000 -0.496000 0.832000 --0.600000 -0.451900 0.179400 -0.216000 -0.496000 0.832000 --0.700000 -0.062200 0.121900 0.504000 0.344000 0.784000 --0.700000 -0.062200 0.121900 0.504000 0.344000 0.784000 --0.677900 -0.100400 0.121900 0.528000 0.328000 0.776000 --0.700000 -0.100400 0.138900 0.488000 0.288000 0.816000 --0.650000 -0.141800 0.121900 0.432000 0.328000 0.832000 --0.700000 -0.150600 0.164200 0.408000 0.248000 0.872000 --0.650000 -0.150600 0.126000 0.408000 0.336000 0.840000 --0.700000 -0.200800 0.182200 0.152000 0.072000 0.984000 --0.650000 -0.200800 0.153500 0.376000 0.280000 0.872000 --0.650000 -0.150600 0.126000 0.408000 0.336000 0.840000 --0.600000 -0.200800 0.130000 0.152000 0.560000 0.808000 --0.642900 -0.150600 0.121900 0.408000 0.352000 0.832000 --0.600000 -0.190600 0.121900 0.296000 0.496000 0.808000 --0.600000 -0.150600 0.080700 0.576000 0.424000 0.688000 --0.559300 -0.200800 0.121900 0.160000 0.720000 0.672000 --0.575700 -0.150600 0.060900 0.384000 0.664000 0.632000 --0.550000 -0.200800 0.118700 0.032000 0.784000 0.608000 --0.550000 -0.166800 0.060900 0.264000 0.816000 0.504000 --0.575700 -0.150600 0.060900 0.384000 0.664000 0.632000 --0.550000 -0.150600 0.029600 0.504000 0.688000 0.512000 --0.600000 -0.122400 0.060900 0.616000 0.400000 0.664000 --0.550000 -0.125000 0.000000 0.608000 0.616000 0.488000 --0.600000 -0.100400 0.044600 0.672000 0.336000 0.656000 --0.565600 -0.100400 0.000000 0.744000 0.440000 0.496000 --0.550000 -0.125000 0.000000 0.608000 0.616000 0.488000 --0.550000 -0.100400 -0.036900 0.792000 0.376000 0.464000 --0.550000 -0.100400 -0.036900 0.792000 0.376000 0.464000 --0.650000 -0.150600 0.126000 0.408000 0.336000 0.840000 --0.650000 -0.150600 0.126000 0.408000 0.336000 0.840000 --0.650000 -0.141800 0.121900 0.432000 0.328000 0.832000 --0.642900 -0.150600 0.121900 0.408000 0.352000 0.832000 --0.650000 -0.100400 0.096100 0.592000 0.288000 0.744000 --0.600000 -0.150600 0.080700 0.576000 0.424000 0.688000 --0.612900 -0.100400 0.060900 0.624000 0.376000 0.672000 --0.600000 -0.122400 0.060900 0.616000 0.400000 0.664000 --0.600000 -0.100400 0.044600 0.672000 0.336000 0.656000 --0.600000 -0.100400 0.044600 0.672000 0.336000 0.656000 --0.600000 -0.190600 0.121900 0.296000 0.496000 0.808000 --0.600000 -0.190600 0.121900 0.296000 0.496000 0.808000 --0.559300 -0.200800 0.121900 0.160000 0.720000 0.672000 --0.600000 -0.200800 0.130000 0.152000 0.560000 0.808000 --0.550000 -0.202900 0.121900 0.032000 0.728000 0.680000 --0.600000 -0.251000 0.177800 0.080000 0.520000 0.840000 --0.550000 -0.251000 0.173600 -0.016000 0.472000 0.872000 --0.550000 -0.251000 0.173600 -0.016000 0.472000 0.872000 --0.500000 -0.200800 0.127000 -0.088000 0.600000 0.784000 --0.500000 -0.200800 0.127000 -0.088000 0.600000 0.784000 --0.450000 -0.200800 0.150000 -0.304000 0.608000 0.720000 --0.500000 -0.196200 0.121900 -0.112000 0.784000 0.600000 --0.450000 -0.173700 0.121900 -0.368000 0.648000 0.656000 --0.500000 -0.166600 0.060900 -0.304000 0.832000 0.448000 --0.450000 -0.150600 0.089400 -0.440000 0.744000 0.496000 --0.472400 -0.150600 0.060900 -0.464000 0.768000 0.416000 --0.450000 -0.136300 0.060900 -0.512000 0.720000 0.448000 --0.500000 -0.150600 0.019400 -0.216000 0.856000 0.464000 --0.450000 -0.112700 0.000000 -0.520000 0.784000 0.320000 --0.500000 -0.141000 0.000000 -0.040000 0.880000 0.456000 --0.500000 -0.141000 0.000000 -0.040000 0.880000 0.456000 --0.500000 -0.200800 0.127000 -0.088000 0.600000 0.784000 --0.500000 -0.200800 0.127000 -0.088000 0.600000 0.784000 --0.500000 -0.249000 0.182900 -0.112000 0.656000 0.744000 --0.450000 -0.200800 0.150000 -0.304000 0.608000 0.720000 --0.450000 -0.233700 0.182900 -0.216000 0.472000 0.848000 --0.400000 -0.200800 0.179200 -0.200000 0.464000 0.856000 --0.400000 -0.206800 0.182900 -0.168000 0.424000 0.880000 --0.383500 -0.200800 0.182900 -0.152000 0.448000 0.872000 --0.400000 -0.200800 0.179200 -0.200000 0.464000 0.856000 --0.350000 -0.189600 0.182900 -0.288000 0.472000 0.824000 --0.400000 -0.150600 0.133500 -0.392000 0.600000 0.688000 --0.350000 -0.150600 0.151300 -0.584000 0.352000 0.720000 --0.350000 -0.189600 0.182900 -0.288000 0.472000 0.824000 --0.311100 -0.150600 0.182900 -0.424000 0.464000 0.768000 --0.311100 -0.150600 0.182900 -0.424000 0.464000 0.768000 --0.400000 -0.200800 0.179200 -0.200000 0.464000 0.856000 --0.400000 -0.200800 0.179200 -0.200000 0.464000 0.856000 --0.450000 -0.200800 0.150000 -0.304000 0.608000 0.720000 --0.400000 -0.150600 0.133500 -0.392000 0.600000 0.688000 --0.450000 -0.173700 0.121900 -0.368000 0.648000 0.656000 --0.414900 -0.150600 0.121900 -0.424000 0.616000 0.648000 --0.450000 -0.150600 0.089400 -0.440000 0.744000 0.496000 --0.450000 -0.150600 0.089400 -0.440000 0.744000 0.496000 --0.351400 -0.100400 0.121900 -0.608000 0.368000 0.696000 --0.351400 -0.100400 0.121900 -0.608000 0.368000 0.696000 --0.350000 -0.097900 0.121900 -0.560000 0.424000 0.704000 --0.350000 -0.100400 0.123500 -0.608000 0.328000 0.712000 --0.300000 -0.066800 0.121900 -0.280000 0.584000 0.752000 --0.300000 -0.100400 0.149000 -0.304000 0.432000 0.840000 --0.255700 -0.050200 0.121900 -0.192000 0.512000 0.832000 --0.250000 -0.100400 0.155000 0.480000 0.160000 0.856000 --0.250000 -0.050200 0.123600 0.200000 0.440000 0.864000 --0.250000 -0.050200 0.123600 0.200000 0.440000 0.864000 --0.369700 -0.301200 0.182900 0.552000 -0.328000 0.752000 --0.369700 -0.301200 0.182900 0.552000 -0.328000 0.752000 --0.350000 -0.276800 0.182900 0.600000 -0.432000 0.664000 --0.350000 -0.301200 0.167500 0.592000 -0.368000 0.712000 --0.350000 -0.301200 0.167500 0.592000 -0.368000 0.712000 --0.334800 -0.251000 0.182900 0.672000 -0.480000 0.552000 --0.334800 -0.251000 0.182900 0.672000 -0.480000 0.552000 --0.300000 -0.205800 0.182900 0.768000 -0.472000 0.416000 --0.300000 -0.251000 0.131000 0.632000 -0.616000 0.464000 --0.300000 -0.251000 0.131000 0.632000 -0.616000 0.464000 --0.300000 -0.251000 0.131000 0.632000 -0.616000 0.464000 --0.300000 -0.251000 0.131000 0.632000 -0.616000 0.464000 --0.294600 -0.251000 0.121900 0.616000 -0.600000 0.488000 --0.300000 -0.256400 0.121900 0.624000 -0.624000 0.456000 --0.300000 -0.256400 0.121900 0.624000 -0.624000 0.456000 -0.550000 0.331800 0.121900 -0.696000 0.536000 0.456000 -0.550000 0.331800 0.121900 -0.696000 0.536000 0.456000 -0.550000 0.301200 0.149100 -0.896000 -0.096000 0.416000 -0.538800 0.301200 0.121900 -0.912000 0.128000 0.376000 -0.538800 0.301200 0.121900 -0.912000 0.128000 0.376000 -0.548800 0.251000 0.121900 -0.912000 -0.176000 0.360000 -0.548800 0.251000 0.121900 -0.912000 -0.176000 0.360000 -0.550000 0.251000 0.125100 -0.872000 -0.184000 0.440000 -0.550000 0.246100 0.121900 -0.904000 -0.224000 0.352000 -0.586200 0.251000 0.182900 -0.672000 -0.144000 0.720000 -0.567500 0.200800 0.121900 -0.784000 -0.344000 0.504000 -0.600000 0.211800 0.182900 -0.672000 -0.280000 0.672000 -0.600000 0.200800 0.176700 -0.712000 -0.296000 0.624000 -0.604600 0.200800 0.182900 -0.672000 -0.288000 0.664000 -0.600000 0.150600 0.141200 -0.712000 -0.440000 0.536000 -0.641000 0.150600 0.182900 -0.528000 -0.464000 0.696000 -0.600000 0.134700 0.121900 -0.776000 -0.456000 0.424000 -0.650000 0.141000 0.182900 -0.512000 -0.488000 0.704000 -0.627900 0.100400 0.121900 -0.608000 -0.608000 0.504000 -0.650000 0.100400 0.150000 -0.536000 -0.592000 0.592000 -0.650000 0.080100 0.121900 -0.576000 -0.640000 0.496000 -0.685300 0.100400 0.182900 -0.504000 -0.560000 0.648000 -0.692100 0.050200 0.121900 -0.432000 -0.784000 0.424000 -0.700000 0.088000 0.182900 -0.464000 -0.608000 0.640000 -0.700000 0.050200 0.131500 -0.112000 -0.824000 0.544000 -0.750000 0.062100 0.182900 -0.416000 -0.632000 0.648000 -0.744700 0.050200 0.121900 0.096000 -0.864000 0.480000 -0.750000 0.050900 0.121900 0.096000 -0.792000 0.600000 -0.750000 0.050200 0.120200 -0.160000 -0.904000 0.376000 -0.751700 0.050200 0.121900 -0.392000 -0.816000 0.416000 -0.750000 0.031700 0.060900 -0.136000 -0.928000 0.336000 -0.800000 0.028400 0.121900 -0.376000 -0.808000 0.432000 -0.798100 0.000000 0.060900 -0.504000 -0.792000 0.312000 -0.800000 0.000000 0.064400 -0.576000 -0.736000 0.344000 -0.800000 -0.001000 0.060900 -0.584000 -0.776000 0.216000 -0.829700 0.000000 0.121900 -0.704000 -0.616000 0.344000 -0.843600 -0.050200 0.060900 -0.704000 -0.672000 0.184000 -0.850000 -0.029600 0.121900 -0.840000 -0.432000 0.312000 -0.850000 -0.050200 0.089500 -0.768000 -0.592000 0.216000 -0.857500 -0.050200 0.121900 -0.848000 -0.448000 0.272000 -0.850000 -0.056700 0.060900 -0.720000 -0.664000 0.176000 -0.892500 -0.100400 0.121900 -0.688000 -0.680000 0.240000 -0.881900 -0.100400 0.060900 -0.752000 -0.632000 0.152000 -0.850000 -0.056700 0.060900 -0.720000 -0.664000 0.176000 -0.873300 -0.100400 0.000000 -0.752000 -0.632000 0.120000 -0.850000 -0.068700 0.000000 -0.752000 -0.640000 0.136000 -0.865600 -0.100400 -0.060900 -0.776000 -0.616000 0.120000 -0.850000 -0.079400 -0.060900 -0.768000 -0.616000 0.120000 -0.858300 -0.100400 -0.121900 -0.792000 -0.600000 0.056000 -0.850000 -0.088400 -0.121900 -0.808000 -0.584000 0.016000 -0.858100 -0.100400 -0.182900 -0.824000 -0.552000 0.000000 -0.850000 -0.086900 -0.182900 -0.848000 -0.512000 -0.048000 -0.860900 -0.100400 -0.243900 -0.856000 -0.496000 -0.072000 -0.850000 -0.077200 -0.243900 -0.824000 -0.432000 -0.344000 -0.869700 -0.100400 -0.304800 -0.880000 -0.248000 -0.400000 -0.850000 -0.050200 -0.276700 -0.784000 -0.280000 -0.544000 -0.867300 -0.050200 -0.304800 -0.784000 -0.136000 -0.600000 -0.850000 0.000000 -0.279000 -0.536000 0.488000 -0.680000 -0.877300 0.000000 -0.304800 -0.592000 0.480000 -0.632000 -0.877300 0.000000 -0.304800 -0.592000 0.480000 -0.632000 -0.600000 0.150600 0.141200 -0.712000 -0.440000 0.536000 -0.600000 0.150600 0.141200 -0.712000 -0.440000 0.536000 -0.600000 0.200800 0.176700 -0.712000 -0.296000 0.624000 -0.591100 0.150600 0.121900 -0.792000 -0.400000 0.440000 -0.567500 0.200800 0.121900 -0.784000 -0.344000 0.504000 -0.560700 0.150600 0.060900 -0.704000 -0.368000 0.592000 -0.550000 0.200800 0.086900 -0.880000 -0.256000 0.392000 -0.550000 0.174700 0.060900 -0.744000 -0.320000 0.576000 -0.538800 0.200800 0.060900 -0.824000 -0.216000 0.520000 -0.550000 0.150600 0.048400 -0.632000 -0.416000 0.640000 -0.500000 0.200800 0.008600 -0.576000 -0.176000 0.792000 -0.510200 0.150600 0.000000 -0.752000 -0.384000 0.520000 -0.500000 0.181600 0.000000 -0.600000 -0.304000 0.728000 -0.500000 0.150600 -0.020200 -0.704000 -0.472000 0.520000 -0.488800 0.200800 0.000000 -0.512000 0.024000 0.856000 -0.460500 0.150600 -0.060900 -0.624000 -0.512000 0.584000 -0.450000 0.200800 -0.035500 -0.536000 -0.264000 0.792000 -0.450000 0.163500 -0.060900 -0.600000 -0.504000 0.608000 -0.416500 0.200800 -0.060900 -0.560000 -0.352000 0.744000 -0.450000 0.150600 -0.075000 -0.616000 -0.488000 0.608000 -0.400000 0.200800 -0.077800 -0.600000 -0.432000 0.664000 -0.401900 0.150600 -0.121900 -0.864000 -0.496000 -0.024000 -0.400000 0.152400 -0.121900 -0.688000 -0.712000 -0.048000 -0.407800 0.150600 -0.182900 -0.544000 -0.240000 -0.800000 -0.400000 0.155900 -0.182900 -0.216000 -0.144000 -0.960000 -0.450000 0.150600 -0.187200 -0.088000 0.168000 -0.976000 -0.400000 0.200800 -0.189400 -0.152000 -0.072000 -0.984000 -0.450000 0.200800 -0.192400 -0.128000 -0.040000 -0.984000 -0.400000 0.251000 -0.186400 -0.152000 0.040000 -0.984000 -0.450000 0.251000 -0.188200 -0.104000 0.040000 -0.992000 -0.400000 0.301200 -0.184200 -0.016000 -0.016000 -0.992000 -0.450000 0.301200 -0.186200 0.000000 -0.016000 -0.992000 -0.400000 0.351500 -0.194500 0.000000 0.072000 -0.992000 -0.450000 0.351500 -0.196000 0.120000 0.128000 -0.976000 -0.400000 0.377300 -0.182900 0.016000 0.320000 -0.944000 -0.450000 0.373800 -0.182900 0.104000 0.432000 -0.888000 -0.400000 0.401700 -0.171200 0.088000 0.472000 -0.872000 -0.450000 0.401700 -0.160800 0.376000 0.656000 -0.640000 -0.400000 0.432800 -0.121900 0.160000 0.904000 -0.384000 -0.450000 0.422200 -0.121900 0.368000 0.832000 -0.392000 -0.400000 0.419800 -0.060900 0.080000 0.848000 0.520000 -0.450000 0.414500 -0.060900 0.192000 0.928000 0.304000 -0.400000 0.401700 -0.034800 -0.040000 0.584000 0.808000 -0.450000 0.401700 -0.038900 -0.120000 0.592000 0.784000 -0.400000 0.351500 -0.018700 -0.136000 -0.208000 0.960000 -0.450000 0.351500 -0.003200 -0.296000 0.344000 0.888000 -0.450000 0.401700 -0.038900 -0.120000 0.592000 0.784000 -0.458200 0.351500 0.000000 -0.280000 0.520000 0.800000 -0.500000 0.401700 -0.057700 0.096000 0.864000 0.480000 -0.500000 0.369100 0.000000 -0.184000 0.800000 0.552000 -0.517100 0.401700 -0.060900 0.080000 0.968000 0.224000 -0.550000 0.388900 0.000000 -0.392000 0.856000 0.320000 -0.550000 0.398000 -0.060900 0.000000 0.968000 -0.216000 -0.517100 0.401700 -0.060900 0.080000 0.968000 0.224000 -0.550000 0.362300 -0.121900 0.400000 0.656000 -0.632000 -0.500000 0.401700 -0.069300 0.168000 0.952000 -0.216000 -0.500000 0.393600 -0.121900 0.504000 0.744000 -0.432000 -0.488600 0.401700 -0.121900 0.504000 0.776000 -0.368000 -0.500000 0.355500 -0.182900 0.400000 0.616000 -0.664000 -0.450000 0.401700 -0.160800 0.376000 0.656000 -0.640000 -0.450000 0.373800 -0.182900 0.104000 0.432000 -0.888000 -0.500000 0.355500 -0.182900 0.400000 0.616000 -0.664000 -0.450000 0.351500 -0.196000 0.120000 0.128000 -0.976000 -0.500000 0.351500 -0.187300 0.416000 0.568000 -0.696000 -0.450000 0.301200 -0.186200 0.000000 -0.016000 -0.992000 -0.500000 0.301200 -0.193500 0.168000 0.072000 -0.976000 -0.450000 0.251000 -0.188200 -0.104000 0.040000 -0.992000 -0.500000 0.251000 -0.199400 0.072000 0.096000 -0.984000 -0.450000 0.200800 -0.192400 -0.128000 -0.040000 -0.984000 -0.500000 0.200800 -0.200200 -0.104000 -0.048000 -0.992000 -0.450000 0.150600 -0.187200 -0.088000 0.168000 -0.976000 -0.500000 0.150600 -0.194400 -0.208000 0.240000 -0.944000 -0.450000 0.100400 -0.233000 -0.008000 0.816000 -0.568000 -0.500000 0.100400 -0.210700 0.048000 0.704000 -0.704000 -0.450000 0.095300 -0.243900 -0.008000 0.856000 -0.512000 -0.500000 0.082500 -0.243900 0.216000 0.832000 -0.504000 -0.450000 0.055500 -0.304800 0.064000 0.864000 -0.496000 -0.500000 0.050200 -0.303800 0.264000 0.816000 -0.504000 -0.496000 0.050200 -0.304800 0.104000 0.800000 -0.576000 -0.500000 0.049600 -0.304800 0.264000 0.736000 -0.616000 -0.450000 0.050200 -0.314200 0.064000 0.744000 -0.656000 -0.500000 0.014000 -0.365800 0.216000 0.784000 -0.568000 -0.450000 0.007700 -0.365800 -0.264000 0.744000 -0.600000 -0.500000 0.000000 -0.393700 0.528000 0.072000 -0.840000 -0.450000 0.000000 -0.377000 -0.360000 0.400000 -0.840000 -0.500000 -0.027200 -0.365800 0.264000 -0.576000 -0.768000 -0.450000 -0.014200 -0.365800 -0.336000 -0.568000 -0.744000 -0.500000 -0.050200 -0.339600 -0.136000 -0.672000 -0.720000 -0.450000 -0.050200 -0.325200 -0.120000 -0.568000 -0.808000 -0.450000 -0.014200 -0.365800 -0.336000 -0.568000 -0.744000 -0.400000 -0.050200 -0.360800 0.184000 -0.432000 -0.872000 -0.431500 0.000000 -0.365800 -0.424000 0.312000 -0.840000 -0.400000 0.000000 -0.343200 -0.216000 0.592000 -0.768000 -0.450000 0.007700 -0.365800 -0.264000 0.744000 -0.600000 -0.400000 0.041200 -0.304800 -0.352000 0.672000 -0.648000 -0.450000 0.050200 -0.314200 0.064000 0.744000 -0.656000 -0.419200 0.050200 -0.304800 -0.224000 0.736000 -0.632000 -0.450000 0.055500 -0.304800 0.064000 0.864000 -0.496000 -0.400000 0.050200 -0.294000 -0.352000 0.672000 -0.640000 -0.450000 0.095300 -0.243900 -0.008000 0.856000 -0.512000 -0.400000 0.083700 -0.243900 -0.328000 0.768000 -0.536000 -0.450000 0.100400 -0.233000 -0.008000 0.816000 -0.568000 -0.400000 0.100400 -0.207800 -0.424000 0.688000 -0.576000 -0.450000 0.150600 -0.187200 -0.088000 0.168000 -0.976000 -0.400000 0.146600 -0.182900 -0.440000 0.464000 -0.760000 -0.407800 0.150600 -0.182900 -0.544000 -0.240000 -0.800000 -0.400000 0.100400 -0.150800 -0.768000 0.376000 0.512000 -0.401900 0.150600 -0.121900 -0.864000 -0.496000 -0.024000 -0.415000 0.100400 -0.121900 -0.640000 0.192000 0.736000 -0.450000 0.150600 -0.075000 -0.616000 -0.488000 0.608000 -0.450000 0.100400 -0.090700 -0.384000 -0.320000 0.856000 -0.460500 0.150600 -0.060900 -0.624000 -0.512000 0.584000 -0.500000 0.100400 -0.067100 -0.632000 -0.296000 0.704000 -0.500000 0.107000 -0.060900 -0.608000 -0.480000 0.616000 -0.504600 0.100400 -0.060900 -0.704000 -0.248000 0.656000 -0.500000 0.150600 -0.020200 -0.704000 -0.472000 0.520000 -0.550000 0.100400 -0.005700 -0.672000 -0.576000 0.448000 -0.510200 0.150600 0.000000 -0.752000 -0.384000 0.520000 -0.550000 0.104000 0.000000 -0.664000 -0.568000 0.464000 -0.550000 0.150600 0.048400 -0.632000 -0.416000 0.640000 -0.553100 0.100400 0.000000 -0.664000 -0.576000 0.464000 -0.560700 0.150600 0.060900 -0.704000 -0.368000 0.592000 -0.593200 0.100400 0.060900 -0.640000 -0.584000 0.496000 -0.591100 0.150600 0.121900 -0.792000 -0.400000 0.440000 -0.600000 0.100400 0.071800 -0.648000 -0.592000 0.472000 -0.600000 0.134700 0.121900 -0.776000 -0.456000 0.424000 -0.627900 0.100400 0.121900 -0.608000 -0.608000 0.504000 -0.600000 0.100400 0.071800 -0.648000 -0.592000 0.472000 -0.650000 0.080100 0.121900 -0.576000 -0.640000 0.496000 -0.600000 0.093600 0.060900 -0.624000 -0.616000 0.464000 -0.650000 0.050200 0.073400 -0.576000 -0.624000 0.512000 -0.641200 0.050200 0.060900 -0.600000 -0.608000 0.512000 -0.650000 0.041800 0.060900 -0.568000 -0.648000 0.504000 -0.602900 0.050200 0.000000 -0.576000 -0.704000 0.400000 -0.650000 0.013100 0.000000 -0.448000 -0.792000 0.392000 -0.600000 0.050200 -0.005300 -0.440000 -0.752000 0.480000 -0.650000 0.000000 -0.040500 0.104000 -0.944000 0.296000 -0.600000 0.000000 -0.044900 -0.016000 -0.720000 0.688000 -0.650000 -0.010200 -0.060900 0.168000 -0.784000 0.592000 -0.600000 -0.012300 -0.060900 0.104000 -0.576000 0.800000 -0.650000 -0.033500 -0.121900 0.512000 -0.672000 0.520000 -0.600000 -0.050200 -0.088500 0.448000 -0.400000 0.792000 -0.638000 -0.050200 -0.121900 0.800000 -0.536000 0.256000 -0.600000 -0.100400 -0.077400 0.584000 0.048000 0.800000 -0.626600 -0.100400 -0.121900 0.848000 0.208000 0.472000 -0.638000 -0.050200 -0.121900 0.800000 -0.536000 0.256000 -0.638900 -0.100400 -0.182900 0.920000 0.368000 0.072000 -0.649100 -0.050200 -0.182900 0.816000 -0.544000 0.144000 -0.637300 -0.100400 -0.243900 0.848000 0.016000 -0.520000 -0.637200 -0.050200 -0.243900 0.840000 -0.080000 -0.528000 -0.604900 -0.100400 -0.304800 0.744000 -0.360000 -0.552000 -0.600000 -0.050200 -0.286000 0.712000 0.144000 -0.680000 -0.600000 -0.086300 -0.304800 0.440000 0.312000 -0.832000 -0.587300 -0.050200 -0.304800 0.688000 0.056000 -0.712000 -0.589400 -0.100400 -0.304800 -0.440000 -0.424000 -0.784000 -0.550000 -0.083700 -0.304800 0.088000 -0.736000 -0.664000 -0.550000 -0.100400 -0.280800 -0.008000 -0.528000 -0.840000 -0.500000 -0.082600 -0.304800 0.216000 -0.680000 -0.688000 -0.500000 -0.100400 -0.277800 0.560000 -0.104000 -0.816000 -0.475800 -0.100400 -0.304800 0.512000 -0.104000 -0.848000 -0.500000 -0.127100 -0.304800 0.480000 0.456000 -0.744000 -0.500000 -0.100400 -0.277800 0.560000 -0.104000 -0.816000 -0.523400 -0.150600 -0.304800 0.376000 0.592000 -0.704000 -0.550000 -0.100400 -0.280800 -0.008000 -0.528000 -0.840000 -0.550000 -0.150600 -0.287800 0.352000 0.528000 -0.768000 -0.589400 -0.100400 -0.304800 -0.440000 -0.424000 -0.784000 -0.600000 -0.150600 -0.265200 0.248000 0.032000 -0.960000 -0.600000 -0.105700 -0.304800 0.312000 -0.728000 -0.600000 -0.650000 -0.150600 -0.274900 0.544000 0.464000 -0.688000 -0.604900 -0.100400 -0.304800 0.744000 -0.360000 -0.552000 -0.650000 -0.120200 -0.243900 0.704000 0.520000 -0.472000 -0.637300 -0.100400 -0.243900 0.848000 0.016000 -0.520000 -0.650000 -0.117900 -0.182900 0.792000 0.600000 0.024000 -0.638900 -0.100400 -0.182900 0.920000 0.368000 0.072000 -0.650000 -0.146100 -0.121900 0.720000 0.504000 0.464000 -0.626600 -0.100400 -0.121900 0.848000 0.208000 0.472000 -0.626600 -0.100400 -0.121900 0.848000 0.208000 0.472000 -0.591100 0.150600 0.121900 -0.792000 -0.400000 0.440000 -0.591100 0.150600 0.121900 -0.792000 -0.400000 0.440000 -0.600000 0.150600 0.141200 -0.712000 -0.440000 0.536000 -0.600000 0.134700 0.121900 -0.776000 -0.456000 0.424000 -0.600000 0.134700 0.121900 -0.776000 -0.456000 0.424000 -0.650000 0.141000 0.182900 -0.512000 -0.488000 0.704000 -0.650000 0.141000 0.182900 -0.512000 -0.488000 0.704000 -0.685300 0.100400 0.182900 -0.504000 -0.560000 0.648000 -0.650000 0.100400 0.150000 -0.536000 -0.592000 0.592000 -0.650000 0.100400 0.150000 -0.536000 -0.592000 0.592000 -0.692100 0.050200 0.121900 -0.432000 -0.784000 0.424000 -0.692100 0.050200 0.121900 -0.432000 -0.784000 0.424000 -0.700000 0.050200 0.131500 -0.112000 -0.824000 0.544000 -0.700000 0.046100 0.121900 -0.152000 -0.904000 0.376000 -0.744700 0.050200 0.121900 0.096000 -0.864000 0.480000 -0.700000 0.026800 0.060900 -0.288000 -0.896000 0.328000 -0.750000 0.050200 0.120200 -0.160000 -0.904000 0.376000 -0.750000 0.031700 0.060900 -0.136000 -0.928000 0.336000 -0.700000 0.026800 0.060900 -0.288000 -0.896000 0.328000 -0.750000 0.013300 0.000000 -0.240000 -0.936000 0.240000 -0.700000 0.012000 0.000000 -0.032000 -0.960000 0.272000 -0.750000 0.001600 -0.060900 -0.416000 -0.904000 -0.016000 -0.700000 0.001400 -0.060900 0.088000 -0.968000 0.192000 -0.750000 0.004300 -0.121900 -0.408000 -0.880000 -0.216000 -0.700000 0.000400 -0.121900 0.224000 -0.968000 0.032000 -0.750000 0.019900 -0.182900 -0.176000 -0.792000 -0.576000 -0.700000 0.009000 -0.182900 0.456000 -0.744000 -0.472000 -0.750000 0.050200 -0.223600 -0.168000 -0.552000 -0.808000 -0.700000 0.050200 -0.225700 0.368000 -0.368000 -0.848000 -0.750000 0.100400 -0.218500 0.200000 0.232000 -0.944000 -0.700000 0.100400 -0.234000 0.272000 0.000000 -0.960000 -0.750000 0.150600 -0.191500 0.256000 0.656000 -0.704000 -0.700000 0.150600 -0.210500 0.296000 0.424000 -0.848000 -0.750000 0.157000 -0.182900 0.280000 0.720000 -0.624000 -0.700000 0.190400 -0.182900 0.432000 0.560000 -0.696000 -0.750000 0.186400 -0.121900 0.504000 0.648000 -0.560000 -0.700000 0.200800 -0.171600 0.480000 0.608000 -0.616000 -0.734900 0.200800 -0.121900 0.552000 0.608000 -0.552000 -0.700000 0.229200 -0.121900 0.528000 0.656000 -0.528000 -0.750000 0.200800 -0.104400 0.480000 0.680000 -0.544000 -0.700000 0.251000 -0.093200 0.552000 0.600000 -0.568000 -0.750000 0.228900 -0.060900 0.576000 0.696000 -0.416000 -0.725300 0.251000 -0.060900 0.696000 0.648000 -0.288000 -0.750000 0.219200 0.000000 0.672000 0.728000 0.080000 -0.721000 0.251000 0.000000 0.784000 0.608000 -0.040000 -0.750000 0.222200 0.060900 0.704000 0.696000 -0.080000 -0.727500 0.251000 0.060900 0.792000 0.584000 -0.112000 -0.750000 0.233400 0.121900 0.720000 0.680000 -0.080000 -0.736800 0.251000 0.121900 0.752000 0.632000 0.144000 -0.727500 0.251000 0.060900 0.792000 0.584000 -0.112000 -0.700000 0.297800 0.121900 0.728000 0.680000 -0.032000 -0.700000 0.290800 0.060900 0.800000 0.576000 -0.104000 -0.696500 0.301200 0.121900 0.712000 0.672000 0.168000 -0.692400 0.301200 0.060900 0.752000 0.648000 -0.056000 -0.653800 0.351500 0.121900 0.656000 0.616000 0.424000 -0.663900 0.351500 0.060900 0.768000 0.624000 0.096000 -0.650000 0.355500 0.121900 0.632000 0.632000 0.432000 -0.650000 0.370100 0.060900 0.776000 0.624000 0.048000 -0.600000 0.382600 0.121900 0.272000 0.776000 0.560000 -0.612200 0.401700 0.060900 0.488000 0.832000 0.224000 -0.600000 0.401700 0.085900 0.096000 0.928000 0.336000 -0.600000 0.407100 0.060900 0.120000 0.968000 0.184000 -0.584600 0.401700 0.060900 -0.416000 0.872000 0.248000 -0.600000 0.410900 0.000000 0.104000 0.992000 -0.032000 -0.568400 0.401700 0.000000 -0.472000 0.832000 -0.264000 -0.600000 0.401700 -0.057700 0.168000 0.920000 -0.344000 -0.600000 0.410900 0.000000 0.104000 0.992000 -0.032000 -0.616700 0.401700 0.000000 0.496000 0.864000 -0.032000 -0.600000 0.407100 0.060900 0.120000 0.968000 0.184000 -0.612200 0.401700 0.060900 0.488000 0.832000 0.224000 -0.616700 0.401700 0.000000 0.496000 0.864000 -0.032000 -0.650000 0.370100 0.060900 0.776000 0.624000 0.048000 -0.650000 0.368200 0.000000 0.792000 0.584000 -0.144000 -0.663900 0.351500 0.060900 0.768000 0.624000 0.096000 -0.660900 0.351500 0.000000 0.832000 0.512000 -0.176000 -0.692400 0.301200 0.060900 0.752000 0.648000 -0.056000 -0.685300 0.301200 0.000000 0.832000 0.536000 -0.104000 -0.700000 0.290800 0.060900 0.800000 0.576000 -0.104000 -0.700000 0.279600 0.000000 0.792000 0.600000 -0.048000 -0.727500 0.251000 0.060900 0.792000 0.584000 -0.112000 -0.721000 0.251000 0.000000 0.784000 0.608000 -0.040000 -0.700000 0.279600 0.000000 0.792000 0.600000 -0.048000 -0.725300 0.251000 -0.060900 0.696000 0.648000 -0.288000 -0.700000 0.278700 -0.060900 0.648000 0.584000 -0.472000 -0.700000 0.251000 -0.093200 0.552000 0.600000 -0.568000 -0.680100 0.301200 -0.060900 0.752000 0.544000 -0.368000 -0.673000 0.251000 -0.121900 0.568000 0.576000 -0.584000 -0.650000 0.301200 -0.100800 0.528000 0.504000 -0.672000 -0.650000 0.278000 -0.121900 0.448000 0.624000 -0.624000 -0.608400 0.301200 -0.121900 0.448000 0.488000 -0.744000 -0.650000 0.251000 -0.154700 0.488000 0.640000 -0.584000 -0.600000 0.301200 -0.128700 0.472000 0.520000 -0.704000 -0.608400 0.251000 -0.182900 0.328000 0.488000 -0.800000 -0.600000 0.256700 -0.182900 0.328000 0.496000 -0.792000 -0.600000 0.251000 -0.187000 0.320000 0.456000 -0.816000 -0.608400 0.251000 -0.182900 0.328000 0.488000 -0.800000 -0.600000 0.200800 -0.209200 0.248000 0.288000 -0.920000 -0.650000 0.227800 -0.182900 0.368000 0.576000 -0.720000 -0.650000 0.200800 -0.204000 0.272000 0.408000 -0.864000 -0.687200 0.200800 -0.182900 0.432000 0.544000 -0.712000 -0.650000 0.150600 -0.219600 0.200000 0.280000 -0.928000 -0.700000 0.190400 -0.182900 0.432000 0.560000 -0.696000 -0.700000 0.150600 -0.210500 0.296000 0.424000 -0.848000 -0.650000 0.150600 -0.219600 0.200000 0.280000 -0.928000 -0.700000 0.100400 -0.234000 0.272000 0.000000 -0.960000 -0.650000 0.100400 -0.241400 0.232000 0.064000 -0.968000 -0.700000 0.050200 -0.225700 0.368000 -0.368000 -0.848000 -0.650000 0.067400 -0.243900 0.208000 0.056000 -0.968000 -0.653800 0.050200 -0.243900 0.232000 0.032000 -0.968000 -0.650000 0.050200 -0.244900 0.216000 0.040000 -0.968000 -0.653800 0.000000 -0.243900 0.576000 -0.112000 -0.808000 -0.650000 0.000000 -0.248500 0.680000 -0.160000 -0.712000 -0.650000 -0.016900 -0.243900 0.704000 -0.184000 -0.672000 -0.600000 0.000000 -0.284600 0.512000 0.112000 -0.840000 -0.637200 -0.050200 -0.243900 0.840000 -0.080000 -0.528000 -0.600000 -0.050200 -0.286000 0.712000 0.144000 -0.680000 -0.600000 0.000000 -0.284600 0.512000 0.112000 -0.840000 -0.587300 -0.050200 -0.304800 0.688000 0.056000 -0.712000 -0.578400 0.000000 -0.304800 0.536000 0.480000 -0.688000 -0.578400 0.000000 -0.304800 0.536000 0.480000 -0.688000 -0.750000 0.062100 0.182900 -0.416000 -0.632000 0.648000 -0.750000 0.062100 0.182900 -0.416000 -0.632000 0.648000 -0.750000 0.050900 0.121900 0.096000 -0.792000 0.600000 -0.762700 0.050200 0.182900 -0.512000 -0.672000 0.520000 -0.751700 0.050200 0.121900 -0.392000 -0.816000 0.416000 -0.800000 0.035400 0.182900 -0.432000 -0.808000 0.384000 -0.800000 0.028400 0.121900 -0.376000 -0.808000 0.432000 -0.846600 0.000000 0.182900 -0.736000 -0.616000 0.264000 -0.829700 0.000000 0.121900 -0.704000 -0.616000 0.344000 -0.850000 -0.004200 0.182900 -0.720000 -0.616000 0.288000 -0.850000 -0.029600 0.121900 -0.840000 -0.432000 0.312000 -0.880500 -0.050200 0.182900 -0.744000 -0.528000 0.384000 -0.857500 -0.050200 0.121900 -0.848000 -0.448000 0.272000 -0.900000 -0.076800 0.182900 -0.504000 -0.624000 0.592000 -0.892500 -0.100400 0.121900 -0.688000 -0.680000 0.240000 -0.900000 -0.100400 0.145900 -0.608000 -0.728000 0.304000 -0.900000 -0.076800 0.182900 -0.504000 -0.624000 0.592000 -0.934300 -0.100400 0.182900 -0.392000 -0.752000 0.520000 -0.934300 -0.100400 0.182900 -0.392000 -0.752000 0.520000 -0.800000 0.150600 0.181400 0.520000 0.336000 0.776000 -0.800000 0.150600 0.181400 0.520000 0.336000 0.776000 -0.850000 0.150600 0.126500 0.640000 0.560000 0.512000 -0.800000 0.190400 0.121900 0.624000 0.752000 0.168000 -0.850000 0.151600 0.121900 0.680000 0.720000 0.080000 -0.800000 0.182100 0.060900 0.560000 0.824000 -0.024000 -0.850000 0.154700 0.060900 0.576000 0.800000 0.096000 -0.800000 0.184600 0.000000 0.464000 0.872000 0.120000 -0.850000 0.161100 0.000000 0.480000 0.856000 0.160000 -0.800000 0.194300 -0.060900 0.416000 0.824000 -0.360000 -0.850000 0.171300 -0.060900 0.448000 0.864000 -0.216000 -0.800000 0.164900 -0.121900 0.312000 0.800000 -0.504000 -0.850000 0.155600 -0.121900 0.432000 0.856000 -0.272000 -0.800000 0.150600 -0.164100 0.256000 0.800000 -0.528000 -0.850000 0.150600 -0.140900 0.432000 0.840000 -0.304000 -0.800000 0.138600 -0.182900 0.232000 0.712000 -0.656000 -0.850000 0.127100 -0.182900 0.192000 0.744000 -0.632000 -0.800000 0.100400 -0.216300 0.104000 0.416000 -0.896000 -0.850000 0.100400 -0.218500 0.128000 0.592000 -0.784000 -0.800000 0.050200 -0.233400 -0.176000 0.416000 -0.880000 -0.850000 0.050200 -0.237100 -0.376000 0.576000 -0.720000 -0.800000 0.000000 -0.217200 -0.656000 -0.464000 -0.584000 -0.850000 0.042400 -0.243900 -0.408000 0.528000 -0.736000 -0.819700 0.000000 -0.243900 -0.752000 -0.192000 -0.616000 -0.850000 0.000000 -0.279000 -0.536000 0.488000 -0.680000 -0.835300 -0.050200 -0.243900 -0.840000 -0.416000 -0.336000 -0.850000 -0.050200 -0.276700 -0.784000 -0.280000 -0.544000 -0.850000 -0.077200 -0.243900 -0.824000 -0.432000 -0.344000 -0.835300 -0.050200 -0.243900 -0.840000 -0.416000 -0.336000 -0.850000 -0.086900 -0.182900 -0.848000 -0.512000 -0.048000 -0.822900 -0.050200 -0.182900 -0.792000 -0.592000 -0.088000 -0.850000 -0.088400 -0.121900 -0.808000 -0.584000 0.016000 -0.818400 -0.050200 -0.121900 -0.760000 -0.640000 0.016000 -0.850000 -0.079400 -0.060900 -0.768000 -0.616000 0.120000 -0.823600 -0.050200 -0.060900 -0.736000 -0.664000 0.112000 -0.850000 -0.068700 0.000000 -0.752000 -0.640000 0.136000 -0.832800 -0.050200 0.000000 -0.728000 -0.656000 0.144000 -0.850000 -0.056700 0.060900 -0.720000 -0.664000 0.176000 -0.843600 -0.050200 0.060900 -0.704000 -0.672000 0.184000 -0.850000 -0.050200 0.089500 -0.768000 -0.592000 0.216000 -0.850000 -0.050200 0.089500 -0.768000 -0.592000 0.216000 -0.850000 0.150600 0.126500 0.640000 0.560000 0.512000 -0.850000 0.150600 0.126500 0.640000 0.560000 0.512000 -0.850000 0.151600 0.121900 0.680000 0.720000 0.080000 -0.850900 0.150600 0.121900 0.704000 0.704000 0.080000 -0.850000 0.154700 0.060900 0.576000 0.800000 0.096000 -0.855400 0.150600 0.060900 0.680000 0.720000 0.072000 -0.850000 0.161100 0.000000 0.480000 0.856000 0.160000 -0.867700 0.150600 0.000000 0.552000 0.816000 0.152000 -0.850000 0.171300 -0.060900 0.448000 0.864000 -0.216000 -0.888500 0.150600 -0.060900 0.504000 0.856000 -0.040000 -0.850000 0.155600 -0.121900 0.432000 0.856000 -0.272000 -0.859300 0.150600 -0.121900 0.456000 0.840000 -0.272000 -0.850000 0.150600 -0.140900 0.432000 0.840000 -0.304000 -0.850000 0.150600 -0.140900 0.432000 0.840000 -0.304000 -0.891700 0.100400 0.182900 0.576000 0.688000 0.424000 -0.891700 0.100400 0.182900 0.576000 0.688000 0.424000 -0.900000 0.100400 0.165200 0.584000 0.744000 0.296000 -0.900000 0.093100 0.182900 0.568000 0.672000 0.464000 -0.911800 0.100400 0.121900 0.528000 0.800000 0.264000 -0.940200 0.050200 0.182900 0.624000 0.528000 0.568000 -0.950000 0.069700 0.121900 0.360000 0.840000 0.384000 -0.950000 0.050200 0.169400 0.600000 0.560000 0.560000 -1.000000 0.053600 0.121900 0.280000 0.872000 0.392000 -1.000000 0.050200 0.131000 0.336000 0.784000 0.512000 -0.950000 0.050200 0.169400 0.600000 0.560000 0.560000 -1.000000 0.004900 0.182900 0.336000 0.520000 0.776000 -0.950000 0.037400 0.182900 0.520000 0.504000 0.680000 -0.950000 0.050200 0.169400 0.600000 0.560000 0.560000 -0.940200 0.050200 0.182900 0.624000 0.528000 0.568000 -0.940200 0.050200 0.182900 0.624000 0.528000 0.568000 -0.900000 0.100400 0.165200 0.584000 0.744000 0.296000 -0.900000 0.100400 0.165200 0.584000 0.744000 0.296000 -0.900000 0.107300 0.121900 0.512000 0.832000 0.184000 -0.911800 0.100400 0.121900 0.528000 0.800000 0.264000 -0.900000 0.118900 0.060900 0.472000 0.856000 0.184000 -0.936800 0.100400 0.060900 0.456000 0.872000 0.168000 -0.900000 0.131100 0.000000 0.480000 0.848000 0.192000 -0.950000 0.100400 0.012800 0.496000 0.848000 0.136000 -0.950000 0.102000 0.000000 0.472000 0.864000 0.120000 -0.952900 0.100400 0.000000 0.504000 0.848000 0.120000 -0.950000 0.106300 -0.060900 0.576000 0.776000 -0.240000 -0.957800 0.100400 -0.060900 0.544000 0.824000 -0.120000 -0.950000 0.100400 -0.078300 0.560000 0.768000 -0.304000 -1.000000 0.074600 -0.060900 0.496000 0.816000 -0.280000 -0.950000 0.086300 -0.121900 0.544000 0.784000 -0.280000 -1.000000 0.056100 -0.121900 0.488000 0.808000 -0.304000 -0.950000 0.069900 -0.182900 0.544000 0.736000 -0.392000 -1.000000 0.050200 -0.141200 0.512000 0.792000 -0.320000 -0.978000 0.050200 -0.182900 0.512000 0.768000 -0.376000 -1.000000 0.035800 -0.182900 0.504000 0.768000 -0.376000 -0.950000 0.050200 -0.224500 0.472000 0.712000 -0.504000 -1.000000 0.004200 -0.243900 0.464000 0.680000 -0.552000 -0.950000 0.037500 -0.243900 0.432000 0.688000 -0.576000 -1.000000 0.000000 -0.249700 0.512000 0.464000 -0.720000 -0.950000 0.000000 -0.291100 0.424000 0.536000 -0.720000 -1.000000 -0.050200 -0.288900 0.520000 0.432000 -0.728000 -0.950000 -0.016600 -0.304800 0.448000 0.520000 -0.720000 -0.981700 -0.050200 -0.304800 0.528000 0.432000 -0.720000 -0.950000 -0.050200 -0.338500 0.440000 0.400000 -0.800000 -1.000000 -0.073100 -0.304800 0.536000 0.424000 -0.720000 -0.950000 -0.100400 -0.351000 0.336000 0.064000 -0.936000 -1.000000 -0.100400 -0.325200 0.488000 0.344000 -0.792000 -0.950000 -0.150600 -0.345500 -0.032000 0.064000 -0.992000 -1.000000 -0.150600 -0.335800 0.136000 0.136000 -0.976000 -0.950000 -0.200800 -0.357000 -0.272000 -0.104000 -0.952000 -1.000000 -0.200800 -0.338800 0.136000 -0.384000 -0.904000 -0.950000 -0.251000 -0.328200 -0.712000 -0.568000 -0.392000 -1.000000 -0.251000 -0.355700 -0.816000 -0.248000 -0.504000 -1.000000 -0.251000 -0.355700 -0.816000 -0.248000 -0.504000 -1.000000 -0.012000 0.182900 0.384000 -0.248000 0.880000 -1.000000 -0.012000 0.182900 0.384000 -0.248000 0.880000 -1.000000 -0.050200 0.168100 0.416000 -0.344000 0.832000 -0.975800 -0.050200 0.182900 0.464000 -0.232000 0.848000 -1.000000 -0.100400 0.134700 0.432000 -0.528000 0.720000 -0.959000 -0.100400 0.182900 0.616000 -0.584000 0.520000 -0.959000 -0.100400 0.182900 0.616000 -0.584000 0.520000 --0.900000 0.200800 0.074800 0.296000 0.712000 0.624000 --0.900000 0.200800 0.074800 0.296000 0.712000 0.624000 --0.900000 0.210300 0.060900 0.312000 0.744000 0.576000 --0.879600 0.200800 0.060900 0.352000 0.712000 0.600000 --0.900000 0.240500 0.000000 0.368000 0.840000 0.376000 --0.850000 0.200800 0.035600 0.384000 0.744000 0.536000 --0.850000 0.219100 0.000000 0.368000 0.824000 0.424000 --0.811000 0.200800 0.000000 0.408000 0.816000 0.392000 --0.811000 0.200800 0.000000 0.408000 0.816000 0.392000 --0.900000 -0.127600 0.121900 -0.608000 -0.704000 0.344000 --0.900000 -0.127600 0.121900 -0.608000 -0.704000 0.344000 --0.900000 -0.149700 0.060900 -0.696000 -0.664000 0.232000 --0.878400 -0.150600 0.121900 -0.736000 -0.560000 0.368000 --0.899200 -0.150600 0.060900 -0.816000 -0.504000 0.256000 --0.851500 -0.200800 0.121900 -0.832000 -0.360000 0.408000 --0.869300 -0.200800 0.060900 -0.824000 -0.496000 0.248000 --0.899200 -0.150600 0.060900 -0.816000 -0.504000 0.256000 --0.882700 -0.200800 0.000000 -0.840000 -0.496000 0.192000 --0.900000 -0.150600 0.057700 -0.744000 -0.616000 0.232000 --0.900000 -0.169600 0.000000 -0.800000 -0.552000 0.224000 --0.882700 -0.200800 0.000000 -0.840000 -0.496000 0.192000 --0.900000 -0.192500 -0.060900 -0.856000 -0.488000 0.144000 --0.895700 -0.200800 -0.060900 -0.864000 -0.480000 0.136000 --0.900000 -0.200800 -0.096200 -0.752000 -0.632000 0.128000 --0.860100 -0.251000 -0.060900 -0.808000 -0.568000 0.112000 --0.900000 -0.204500 -0.121900 -0.688000 -0.712000 0.104000 --0.866600 -0.251000 -0.121900 -0.808000 -0.576000 0.072000 --0.900000 -0.206900 -0.182900 -0.648000 -0.752000 0.056000 --0.864200 -0.251000 -0.182900 -0.800000 -0.592000 0.000000 --0.900000 -0.212400 -0.243900 -0.672000 -0.712000 0.176000 --0.869200 -0.251000 -0.243900 -0.768000 -0.600000 0.200000 --0.900000 -0.236500 -0.304800 -0.680000 -0.456000 -0.560000 --0.891700 -0.251000 -0.304800 -0.808000 -0.512000 -0.264000 --0.891700 -0.251000 -0.304800 -0.808000 -0.512000 -0.264000 --0.850000 0.184100 0.060900 0.376000 0.632000 0.664000 --0.850000 0.184100 0.060900 0.376000 0.632000 0.664000 --0.850000 0.150600 0.098600 0.360000 0.600000 0.704000 --0.800000 0.153700 0.060900 0.432000 0.632000 0.632000 --0.800000 0.150600 0.064100 0.424000 0.560000 0.704000 --0.796300 0.150600 0.060900 0.512000 0.584000 0.616000 --0.800000 0.153700 0.060900 0.432000 0.632000 0.632000 --0.750000 0.150600 0.014500 0.472000 0.624000 0.608000 --0.800000 0.195100 0.000000 0.456000 0.768000 0.432000 --0.750000 0.162200 0.000000 0.464000 0.672000 0.560000 --0.750000 0.150600 0.014500 0.472000 0.624000 0.608000 --0.734000 0.150600 0.000000 0.496000 0.640000 0.576000 --0.750000 0.162200 0.000000 0.464000 0.672000 0.560000 --0.700000 0.150600 -0.043600 0.552000 0.712000 0.424000 --0.750000 0.191300 -0.060900 0.496000 0.856000 0.072000 --0.700000 0.159000 -0.060900 0.600000 0.776000 0.184000 --0.750000 0.174400 -0.121900 0.448000 0.824000 -0.336000 --0.700000 0.150600 -0.089800 0.592000 0.744000 -0.280000 --0.715000 0.150600 -0.121900 0.512000 0.744000 -0.408000 --0.700000 0.140000 -0.121900 0.536000 0.728000 -0.408000 --0.750000 0.150600 -0.159200 0.432000 0.664000 -0.600000 --0.700000 0.100400 -0.182100 0.536000 0.592000 -0.592000 --0.750000 0.132600 -0.182900 0.408000 0.656000 -0.624000 --0.700900 0.100400 -0.182900 0.440000 0.608000 -0.648000 --0.750000 0.100400 -0.222000 0.432000 0.576000 -0.680000 --0.700000 0.099700 -0.182900 0.504000 0.560000 -0.640000 --0.750000 0.077000 -0.243900 0.368000 0.552000 -0.744000 --0.700000 0.050200 -0.235800 0.504000 0.432000 -0.744000 --0.711800 0.050200 -0.243900 0.416000 0.432000 -0.792000 --0.700000 0.037400 -0.243900 0.440000 0.392000 -0.800000 --0.750000 0.050200 -0.267100 0.368000 0.432000 -0.816000 --0.700000 0.000000 -0.262900 0.392000 0.288000 -0.864000 --0.750000 0.000000 -0.285200 0.328000 0.160000 -0.920000 --0.750000 0.000000 -0.285200 0.328000 0.160000 -0.920000 --0.750000 0.012900 0.121900 0.496000 0.384000 0.768000 --0.750000 0.012900 0.121900 0.496000 0.384000 0.768000 --0.781300 0.050200 0.121900 0.536000 0.400000 0.736000 --0.750000 0.050200 0.097600 0.464000 0.408000 0.776000 --0.750000 0.050200 0.097600 0.464000 0.408000 0.776000 --0.800000 -0.280700 0.121900 -0.736000 -0.528000 0.408000 --0.800000 -0.280700 0.121900 -0.736000 -0.528000 0.408000 --0.783300 -0.301200 0.121900 -0.688000 -0.568000 0.440000 --0.800000 -0.301200 0.085900 -0.768000 -0.544000 0.304000 --0.800000 -0.301200 0.085900 -0.768000 -0.544000 0.304000 --0.750000 -0.342500 0.121900 -0.536000 -0.592000 0.592000 --0.750000 -0.342500 0.121900 -0.536000 -0.592000 0.592000 --0.739400 -0.351500 0.121900 -0.528000 -0.576000 0.616000 --0.750000 -0.351500 0.110100 -0.600000 -0.584000 0.536000 --0.750000 -0.351500 0.110100 -0.600000 -0.584000 0.536000 --0.701000 -0.451900 0.060900 -0.792000 -0.480000 0.344000 --0.701000 -0.451900 0.060900 -0.792000 -0.480000 0.344000 --0.700000 -0.451900 0.063700 -0.672000 -0.600000 0.424000 --0.700000 -0.453200 0.060900 -0.560000 -0.720000 0.392000 --0.700000 -0.453200 0.060900 -0.560000 -0.720000 0.392000 --0.650000 -0.141800 0.121900 0.432000 0.328000 0.832000 --0.650000 -0.141800 0.121900 0.432000 0.328000 0.832000 --0.677900 -0.100400 0.121900 0.528000 0.328000 0.776000 --0.650000 -0.100400 0.096100 0.592000 0.288000 0.744000 --0.650000 -0.100400 0.096100 0.592000 0.288000 0.744000 --0.600000 -0.122400 0.060900 0.616000 0.400000 0.664000 --0.600000 -0.122400 0.060900 0.616000 0.400000 0.664000 --0.575700 -0.150600 0.060900 0.384000 0.664000 0.632000 --0.600000 -0.150600 0.080700 0.576000 0.424000 0.688000 --0.600000 -0.150600 0.080700 0.576000 0.424000 0.688000 --0.559300 -0.200800 0.121900 0.160000 0.720000 0.672000 --0.559300 -0.200800 0.121900 0.160000 0.720000 0.672000 --0.550000 -0.200800 0.118700 0.032000 0.784000 0.608000 --0.550000 -0.202900 0.121900 0.032000 0.728000 0.680000 --0.536800 -0.200800 0.121900 -0.104000 0.736000 0.664000 --0.536800 -0.200800 0.121900 -0.104000 0.736000 0.664000 --0.550000 -0.494000 0.121900 0.024000 -0.832000 0.536000 --0.550000 -0.494000 0.121900 0.024000 -0.832000 0.536000 --0.550000 -0.502100 0.104800 0.104000 -0.840000 0.520000 --0.500000 -0.486900 0.121900 0.296000 -0.800000 0.504000 --0.500000 -0.502100 0.088800 0.616000 -0.688000 0.376000 --0.450000 -0.453600 0.121900 0.584000 -0.744000 0.288000 --0.489100 -0.502100 0.060900 0.704000 -0.616000 0.328000 --0.450000 -0.471900 0.060900 0.592000 -0.752000 0.272000 --0.450000 -0.471900 0.060900 0.592000 -0.752000 0.272000 --0.550000 -0.502100 0.104800 0.104000 -0.840000 0.520000 --0.550000 -0.502100 0.104800 0.104000 -0.840000 0.520000 --0.550000 -0.532000 0.060900 0.080000 -0.776000 0.624000 --0.500000 -0.502100 0.088800 0.616000 -0.688000 0.376000 --0.500000 -0.517700 0.060900 0.632000 -0.632000 0.440000 --0.489100 -0.502100 0.060900 0.704000 -0.616000 0.328000 --0.489100 -0.502100 0.060900 0.704000 -0.616000 0.328000 --0.405500 -0.100400 0.060900 -0.712000 0.456000 0.520000 --0.405500 -0.100400 0.060900 -0.712000 0.456000 0.520000 --0.400000 -0.090100 0.060900 -0.696000 0.400000 0.584000 --0.400000 -0.100400 0.069600 -0.688000 0.456000 0.552000 --0.367400 -0.050200 0.060900 -0.696000 0.408000 0.584000 --0.351400 -0.100400 0.121900 -0.608000 0.368000 0.696000 --0.350000 -0.050200 0.083200 -0.416000 0.344000 0.832000 --0.350000 -0.097900 0.121900 -0.560000 0.424000 0.704000 --0.300000 -0.050200 0.104800 -0.312000 0.512000 0.792000 --0.300000 -0.066800 0.121900 -0.280000 0.584000 0.752000 --0.255700 -0.050200 0.121900 -0.192000 0.512000 0.832000 --0.255700 -0.050200 0.121900 -0.192000 0.512000 0.832000 --0.350000 -0.001900 0.060900 -0.656000 0.280000 0.688000 --0.350000 -0.001900 0.060900 -0.656000 0.280000 0.688000 --0.350000 -0.050200 0.083200 -0.416000 0.344000 0.832000 --0.367400 -0.050200 0.060900 -0.696000 0.408000 0.584000 --0.367400 -0.050200 0.060900 -0.696000 0.408000 0.584000 --0.351400 -0.100400 0.121900 -0.608000 0.368000 0.696000 --0.351400 -0.100400 0.121900 -0.608000 0.368000 0.696000 --0.400000 -0.140400 0.121900 -0.448000 0.624000 0.632000 --0.400000 -0.100400 0.069600 -0.688000 0.456000 0.552000 --0.400000 -0.100400 0.069600 -0.688000 0.456000 0.552000 --0.400000 -0.401700 0.111300 0.640000 -0.680000 0.336000 --0.400000 -0.401700 0.111300 0.640000 -0.680000 0.336000 --0.400000 -0.423000 0.060900 0.616000 -0.696000 0.360000 --0.350000 -0.401700 0.073400 0.632000 -0.688000 0.344000 --0.350000 -0.406300 0.060900 0.592000 -0.728000 0.320000 --0.344500 -0.401700 0.060900 0.632000 -0.688000 0.328000 --0.344500 -0.401700 0.060900 0.632000 -0.688000 0.328000 --0.348200 0.000000 0.060900 -0.376000 0.448000 0.800000 --0.348200 0.000000 0.060900 -0.376000 0.448000 0.800000 --0.300000 0.027200 0.060900 -0.160000 0.552000 0.808000 --0.300000 0.000000 0.088800 -0.240000 0.432000 0.864000 --0.250000 0.033500 0.060900 0.056000 0.528000 0.840000 --0.250000 0.000000 0.079500 -0.144000 0.552000 0.816000 --0.200000 0.020500 0.060900 0.664000 0.440000 0.600000 --0.200000 0.000000 0.081400 0.696000 0.336000 0.624000 --0.190300 0.000000 0.060900 0.816000 0.200000 0.536000 --0.200000 -0.050200 0.072600 0.688000 0.360000 0.624000 --0.193200 -0.050200 0.060900 0.808000 0.008000 0.584000 --0.200000 -0.100400 0.076800 0.784000 -0.136000 0.600000 --0.190200 -0.100400 0.060900 0.752000 -0.248000 0.600000 --0.200000 -0.121800 0.060900 0.728000 -0.328000 0.592000 --0.200000 -0.121800 0.060900 0.728000 -0.328000 0.592000 --0.250000 0.000000 0.079500 -0.144000 0.552000 0.816000 --0.250000 0.000000 0.079500 -0.144000 0.552000 0.816000 --0.200000 0.000000 0.081400 0.696000 0.336000 0.624000 --0.250000 -0.048000 0.121900 0.272000 0.640000 0.704000 --0.200000 -0.050200 0.072600 0.688000 0.360000 0.624000 --0.247100 -0.050200 0.121900 0.488000 0.512000 0.696000 --0.200000 -0.100400 0.076800 0.784000 -0.136000 0.600000 --0.230200 -0.100400 0.121900 0.776000 -0.176000 0.600000 --0.230200 -0.100400 0.121900 0.776000 -0.176000 0.600000 -0.550000 0.351500 0.078000 -0.616000 0.672000 0.392000 -0.550000 0.351500 0.078000 -0.616000 0.672000 0.392000 -0.540600 0.351500 0.060900 -0.584000 0.632000 0.496000 -0.550000 0.359900 0.060900 -0.592000 0.640000 0.480000 -0.500000 0.351500 0.029100 -0.680000 0.048000 0.728000 -0.550000 0.388900 0.000000 -0.392000 0.856000 0.320000 -0.500000 0.369100 0.000000 -0.184000 0.800000 0.552000 -0.500000 0.351500 0.029100 -0.680000 0.048000 0.728000 -0.458200 0.351500 0.000000 -0.280000 0.520000 0.800000 -0.458200 0.351500 0.000000 -0.280000 0.520000 0.800000 -0.550000 0.246100 0.121900 -0.904000 -0.224000 0.352000 -0.550000 0.246100 0.121900 -0.904000 -0.224000 0.352000 -0.550000 0.200800 0.086900 -0.880000 -0.256000 0.392000 -0.548800 0.251000 0.121900 -0.912000 -0.176000 0.360000 -0.538800 0.200800 0.060900 -0.824000 -0.216000 0.520000 -0.533200 0.251000 0.060900 -0.856000 0.032000 0.512000 -0.500000 0.200800 0.008600 -0.576000 -0.176000 0.792000 -0.500800 0.251000 0.000000 -0.792000 -0.016000 0.608000 -0.500000 0.245700 0.000000 -0.568000 0.120000 0.808000 -0.500000 0.251000 -0.000900 -0.496000 0.112000 0.856000 -0.488800 0.200800 0.000000 -0.512000 0.024000 0.856000 -0.450000 0.251000 -0.039600 -0.400000 -0.080000 0.904000 -0.450000 0.200800 -0.035500 -0.536000 -0.264000 0.792000 -0.400000 0.251000 -0.058700 -0.328000 -0.176000 0.920000 -0.416500 0.200800 -0.060900 -0.560000 -0.352000 0.744000 -0.400000 0.242400 -0.060900 -0.352000 -0.192000 0.904000 -0.400000 0.200800 -0.077800 -0.600000 -0.432000 0.664000 -0.395100 0.251000 -0.060900 -0.344000 -0.184000 0.912000 -0.366500 0.200800 -0.121900 -0.760000 -0.624000 0.168000 -0.350000 0.251000 -0.088400 -0.448000 -0.320000 0.824000 -0.350000 0.218900 -0.121900 -0.504000 -0.816000 0.264000 -0.300000 0.251000 -0.114600 -0.168000 -0.536000 0.824000 -0.300000 0.236900 -0.121900 -0.304000 -0.688000 0.640000 -0.271900 0.251000 -0.121900 -0.240000 -0.760000 0.592000 -0.300000 0.251000 -0.156100 -0.368000 -0.808000 -0.448000 -0.300000 0.236900 -0.121900 -0.304000 -0.688000 0.640000 -0.321900 0.251000 -0.182900 -0.240000 -0.296000 -0.920000 -0.350000 0.218900 -0.121900 -0.504000 -0.816000 0.264000 -0.350000 0.236900 -0.182900 -0.272000 -0.424000 -0.856000 -0.366500 0.200800 -0.121900 -0.760000 -0.624000 0.168000 -0.380800 0.200800 -0.182900 -0.440000 -0.264000 -0.856000 -0.400000 0.152400 -0.121900 -0.688000 -0.712000 -0.048000 -0.400000 0.155900 -0.182900 -0.216000 -0.144000 -0.960000 -0.380800 0.200800 -0.182900 -0.440000 -0.264000 -0.856000 -0.400000 0.200800 -0.189400 -0.152000 -0.072000 -0.984000 -0.350000 0.236900 -0.182900 -0.272000 -0.424000 -0.856000 -0.400000 0.251000 -0.186400 -0.152000 0.040000 -0.984000 -0.350000 0.251000 -0.187300 -0.168000 -0.184000 -0.960000 -0.400000 0.301200 -0.184200 -0.016000 -0.016000 -0.992000 -0.350000 0.301200 -0.184400 -0.056000 0.000000 -0.992000 -0.400000 0.351500 -0.194500 0.000000 0.072000 -0.992000 -0.350000 0.351500 -0.192800 0.000000 0.056000 -0.992000 -0.400000 0.377300 -0.182900 0.016000 0.320000 -0.944000 -0.350000 0.377400 -0.182900 0.000000 0.280000 -0.952000 -0.400000 0.401700 -0.171200 0.088000 0.472000 -0.872000 -0.350000 0.401700 -0.174600 0.056000 0.440000 -0.888000 -0.400000 0.432800 -0.121900 0.160000 0.904000 -0.384000 -0.350000 0.445000 -0.121900 0.208000 0.960000 -0.152000 -0.400000 0.419800 -0.060900 0.080000 0.848000 0.520000 -0.350000 0.424300 -0.060900 0.120000 0.824000 0.544000 -0.400000 0.401700 -0.034800 -0.040000 0.584000 0.808000 -0.350000 0.401700 -0.031000 0.032000 0.488000 0.864000 -0.400000 0.351500 -0.018700 -0.136000 -0.208000 0.960000 -0.350000 0.351500 -0.021800 0.032000 -0.048000 0.992000 -0.350000 0.401700 -0.031000 0.032000 0.488000 0.864000 -0.300000 0.351500 -0.009100 -0.016000 -0.144000 0.984000 -0.300000 0.401700 -0.022200 0.096000 0.472000 0.864000 -0.350000 0.401700 -0.031000 0.032000 0.488000 0.864000 -0.300000 0.430700 -0.060900 0.128000 0.808000 0.568000 -0.350000 0.424300 -0.060900 0.120000 0.824000 0.544000 -0.300000 0.451900 -0.106900 0.184000 0.864000 0.456000 -0.350000 0.445000 -0.121900 0.208000 0.960000 -0.152000 -0.323400 0.451900 -0.121900 0.248000 0.944000 -0.200000 -0.350000 0.401700 -0.174600 0.056000 0.440000 -0.888000 -0.300000 0.451900 -0.131100 0.200000 0.712000 -0.664000 -0.300000 0.401700 -0.174800 0.040000 0.368000 -0.920000 -0.350000 0.401700 -0.174600 0.056000 0.440000 -0.888000 -0.300000 0.379400 -0.182900 -0.016000 0.272000 -0.960000 -0.350000 0.377400 -0.182900 0.000000 0.280000 -0.952000 -0.300000 0.351500 -0.193900 -0.008000 0.064000 -0.992000 -0.350000 0.351500 -0.192800 0.000000 0.056000 -0.992000 -0.300000 0.301200 -0.184400 -0.064000 -0.072000 -0.992000 -0.350000 0.301200 -0.184400 -0.056000 0.000000 -0.992000 -0.300000 0.284000 -0.182900 -0.168000 -0.184000 -0.960000 -0.350000 0.251000 -0.187300 -0.168000 -0.184000 -0.960000 -0.321900 0.251000 -0.182900 -0.240000 -0.296000 -0.920000 -0.350000 0.236900 -0.182900 -0.272000 -0.424000 -0.856000 -0.350000 0.236900 -0.182900 -0.272000 -0.424000 -0.856000 -0.550000 0.246100 0.121900 -0.904000 -0.224000 0.352000 -0.550000 0.246100 0.121900 -0.904000 -0.224000 0.352000 -0.567500 0.200800 0.121900 -0.784000 -0.344000 0.504000 -0.550000 0.200800 0.086900 -0.880000 -0.256000 0.392000 -0.550000 0.200800 0.086900 -0.880000 -0.256000 0.392000 -0.600000 0.100400 0.071800 -0.648000 -0.592000 0.472000 -0.600000 0.100400 0.071800 -0.648000 -0.592000 0.472000 -0.600000 0.093600 0.060900 -0.624000 -0.616000 0.464000 -0.593200 0.100400 0.060900 -0.640000 -0.584000 0.496000 -0.600000 0.053300 0.000000 -0.472000 -0.712000 0.512000 -0.553100 0.100400 0.000000 -0.664000 -0.576000 0.464000 -0.600000 0.050200 -0.005300 -0.440000 -0.752000 0.480000 -0.550000 0.100400 -0.005700 -0.672000 -0.576000 0.448000 -0.550000 0.050200 -0.037800 -0.320000 -0.688000 0.640000 -0.504600 0.100400 -0.060900 -0.704000 -0.248000 0.656000 -0.500000 0.050200 -0.057700 -0.560000 0.128000 0.816000 -0.500000 0.067400 -0.060900 -0.592000 0.120000 0.792000 -0.495100 0.050200 -0.060900 -0.456000 0.136000 0.872000 -0.500000 0.100400 -0.067100 -0.632000 -0.296000 0.704000 -0.450000 0.050200 -0.077000 -0.360000 0.120000 0.920000 -0.450000 0.100400 -0.090700 -0.384000 -0.320000 0.856000 -0.400000 0.050200 -0.114800 -0.552000 0.256000 0.784000 -0.415000 0.100400 -0.121900 -0.640000 0.192000 0.736000 -0.400000 0.072600 -0.121900 -0.632000 0.256000 0.720000 -0.400000 0.100400 -0.150800 -0.768000 0.376000 0.512000 -0.393200 0.050200 -0.121900 -0.648000 0.352000 0.664000 -0.381500 0.100400 -0.182900 -0.896000 0.440000 -0.008000 -0.357200 0.050200 -0.182900 -0.736000 0.640000 0.184000 -0.400000 0.100400 -0.207800 -0.424000 0.688000 -0.576000 -0.351400 0.050200 -0.243900 -0.480000 0.768000 -0.416000 -0.400000 0.083700 -0.243900 -0.328000 0.768000 -0.536000 -0.400000 0.050200 -0.294000 -0.352000 0.672000 -0.640000 -0.351400 0.050200 -0.243900 -0.480000 0.768000 -0.416000 -0.400000 0.041200 -0.304800 -0.352000 0.672000 -0.648000 -0.350000 0.049300 -0.243900 -0.512000 0.784000 -0.320000 -0.350000 0.024300 -0.304800 -0.456000 0.784000 -0.408000 -0.300000 0.032100 -0.243900 -0.576000 0.680000 -0.432000 -0.301400 0.000000 -0.304800 -0.584000 0.656000 -0.464000 -0.300000 0.000000 -0.302400 -0.544000 0.608000 -0.568000 -0.300000 -0.003100 -0.304800 -0.376000 0.424000 -0.816000 -0.301400 0.000000 -0.304800 -0.584000 0.656000 -0.464000 -0.300000 -0.050200 -0.319900 -0.536000 0.224000 -0.808000 -0.350000 0.000000 -0.339100 -0.264000 0.552000 -0.784000 -0.342100 -0.050200 -0.365800 -0.640000 -0.104000 -0.752000 -0.350000 -0.037900 -0.365800 -0.440000 0.432000 -0.776000 -0.350000 -0.050200 -0.374000 -0.496000 -0.096000 -0.856000 -0.383500 -0.050200 -0.365800 0.200000 -0.288000 -0.928000 -0.350000 -0.059800 -0.365800 -0.280000 -0.560000 -0.768000 -0.400000 -0.050200 -0.360800 0.184000 -0.432000 -0.872000 -0.350000 -0.100400 -0.331300 -0.432000 -0.520000 -0.728000 -0.400000 -0.100400 -0.340000 -0.040000 -0.360000 -0.928000 -0.350000 -0.127600 -0.304800 0.032000 -0.600000 -0.792000 -0.400000 -0.150600 -0.318400 -0.432000 -0.416000 -0.792000 -0.380400 -0.150600 -0.304800 -0.424000 -0.456000 -0.776000 -0.400000 -0.168700 -0.304800 -0.504000 -0.464000 -0.720000 -0.350000 -0.150600 -0.283600 -0.064000 -0.424000 -0.896000 -0.400000 -0.200800 -0.276700 0.448000 -0.472000 -0.752000 -0.350000 -0.200800 -0.271400 0.216000 0.224000 -0.944000 -0.400000 -0.249400 -0.243900 0.760000 -0.472000 -0.424000 -0.350000 -0.228300 -0.304800 0.616000 0.528000 -0.576000 -0.399000 -0.251000 -0.243900 0.912000 -0.008000 -0.392000 -0.366700 -0.251000 -0.304800 0.704000 0.488000 -0.496000 -0.350000 -0.228300 -0.304800 0.616000 0.528000 -0.576000 -0.350000 -0.251000 -0.329500 0.536000 0.472000 -0.688000 -0.320800 -0.200800 -0.304800 0.496000 0.328000 -0.800000 -0.300000 -0.251000 -0.347800 0.304000 0.384000 -0.864000 -0.300000 -0.200800 -0.324200 0.480000 0.248000 -0.832000 -0.320800 -0.200800 -0.304800 0.496000 0.328000 -0.800000 -0.300000 -0.150600 -0.312600 0.312000 -0.200000 -0.920000 -0.313400 -0.150600 -0.304800 0.400000 -0.360000 -0.840000 -0.300000 -0.100400 -0.310000 -0.248000 0.072000 -0.960000 -0.350000 -0.127600 -0.304800 0.032000 -0.600000 -0.792000 -0.350000 -0.100400 -0.331300 -0.432000 -0.520000 -0.728000 -0.300000 -0.100400 -0.310000 -0.248000 0.072000 -0.960000 -0.350000 -0.059800 -0.365800 -0.280000 -0.560000 -0.768000 -0.300000 -0.050200 -0.319900 -0.536000 0.224000 -0.808000 -0.342100 -0.050200 -0.365800 -0.640000 -0.104000 -0.752000 -0.350000 -0.059800 -0.365800 -0.280000 -0.560000 -0.768000 -0.350000 -0.050200 -0.374000 -0.496000 -0.096000 -0.856000 -0.350000 -0.050200 -0.374000 -0.496000 -0.096000 -0.856000 -0.650000 0.080100 0.121900 -0.576000 -0.640000 0.496000 -0.650000 0.080100 0.121900 -0.576000 -0.640000 0.496000 -0.692100 0.050200 0.121900 -0.432000 -0.784000 0.424000 -0.650000 0.050200 0.073400 -0.576000 -0.624000 0.512000 -0.700000 0.046100 0.121900 -0.152000 -0.904000 0.376000 -0.650000 0.041800 0.060900 -0.568000 -0.648000 0.504000 -0.700000 0.026800 0.060900 -0.288000 -0.896000 0.328000 -0.650000 0.013100 0.000000 -0.448000 -0.792000 0.392000 -0.700000 0.012000 0.000000 -0.032000 -0.960000 0.272000 -0.650000 0.000000 -0.040500 0.104000 -0.944000 0.296000 -0.700000 0.001400 -0.060900 0.088000 -0.968000 0.192000 -0.686800 0.000000 -0.060900 0.208000 -0.960000 0.144000 -0.700000 0.000400 -0.121900 0.224000 -0.968000 0.032000 -0.698200 0.000000 -0.121900 0.296000 -0.952000 0.032000 -0.700000 0.009000 -0.182900 0.456000 -0.744000 -0.472000 -0.687300 0.000000 -0.182900 0.648000 -0.600000 -0.456000 -0.700000 0.050200 -0.225700 0.368000 -0.368000 -0.848000 -0.653800 0.000000 -0.243900 0.576000 -0.112000 -0.808000 -0.653800 0.050200 -0.243900 0.232000 0.032000 -0.968000 -0.653800 0.050200 -0.243900 0.232000 0.032000 -0.968000 -0.750000 0.233400 0.121900 0.720000 0.680000 -0.080000 -0.750000 0.233400 0.121900 0.720000 0.680000 -0.080000 -0.788900 0.200800 0.121900 0.632000 0.744000 0.184000 -0.750000 0.222200 0.060900 0.704000 0.696000 -0.080000 -0.772600 0.200800 0.060900 0.648000 0.736000 -0.136000 -0.750000 0.219200 0.000000 0.672000 0.728000 0.080000 -0.770200 0.200800 0.000000 0.616000 0.776000 0.056000 -0.750000 0.228900 -0.060900 0.576000 0.696000 -0.416000 -0.787300 0.200800 -0.060900 0.520000 0.824000 -0.184000 -0.750000 0.200800 -0.104400 0.480000 0.680000 -0.544000 -0.800000 0.194300 -0.060900 0.416000 0.824000 -0.360000 -0.750000 0.186400 -0.121900 0.504000 0.648000 -0.560000 -0.800000 0.164900 -0.121900 0.312000 0.800000 -0.504000 -0.750000 0.157000 -0.182900 0.280000 0.720000 -0.624000 -0.800000 0.150600 -0.164100 0.256000 0.800000 -0.528000 -0.769100 0.150600 -0.182900 0.248000 0.704000 -0.648000 -0.800000 0.138600 -0.182900 0.232000 0.712000 -0.656000 -0.750000 0.150600 -0.191500 0.256000 0.656000 -0.704000 -0.800000 0.100400 -0.216300 0.104000 0.416000 -0.896000 -0.750000 0.100400 -0.218500 0.200000 0.232000 -0.944000 -0.800000 0.050200 -0.233400 -0.176000 0.416000 -0.880000 -0.750000 0.050200 -0.223600 -0.168000 -0.552000 -0.808000 -0.800000 0.000000 -0.217200 -0.656000 -0.464000 -0.584000 -0.750000 0.019900 -0.182900 -0.176000 -0.792000 -0.576000 -0.776700 0.000000 -0.182900 -0.576000 -0.728000 -0.360000 -0.750000 0.004300 -0.121900 -0.408000 -0.880000 -0.216000 -0.756600 0.000000 -0.121900 -0.496000 -0.856000 -0.080000 -0.750000 0.001600 -0.060900 -0.416000 -0.904000 -0.016000 -0.753100 0.000000 -0.060900 -0.472000 -0.872000 0.000000 -0.750000 0.013300 0.000000 -0.240000 -0.936000 0.240000 -0.772100 0.000000 0.000000 -0.504000 -0.832000 0.224000 -0.750000 0.031700 0.060900 -0.136000 -0.928000 0.336000 -0.798100 0.000000 0.060900 -0.504000 -0.792000 0.312000 -0.772100 0.000000 0.000000 -0.504000 -0.832000 0.224000 -0.800000 -0.001000 0.060900 -0.584000 -0.776000 0.216000 -0.800000 -0.015400 0.000000 -0.560000 -0.800000 0.184000 -0.843600 -0.050200 0.060900 -0.704000 -0.672000 0.184000 -0.832800 -0.050200 0.000000 -0.728000 -0.656000 0.144000 -0.800000 -0.015400 0.000000 -0.560000 -0.800000 0.184000 -0.823600 -0.050200 -0.060900 -0.736000 -0.664000 0.112000 -0.800000 -0.024700 -0.060900 -0.616000 -0.776000 0.088000 -0.818400 -0.050200 -0.121900 -0.760000 -0.640000 0.016000 -0.800000 -0.027900 -0.121900 -0.664000 -0.736000 -0.072000 -0.822900 -0.050200 -0.182900 -0.792000 -0.592000 -0.088000 -0.800000 -0.017800 -0.182900 -0.616000 -0.680000 -0.376000 -0.835300 -0.050200 -0.243900 -0.840000 -0.416000 -0.336000 -0.800000 0.000000 -0.217200 -0.656000 -0.464000 -0.584000 -0.819700 0.000000 -0.243900 -0.752000 -0.192000 -0.616000 -0.819700 0.000000 -0.243900 -0.752000 -0.192000 -0.616000 -0.788900 0.200800 0.121900 0.632000 0.744000 0.184000 -0.788900 0.200800 0.121900 0.632000 0.744000 0.184000 -0.800000 0.190400 0.121900 0.624000 0.752000 0.168000 -0.772600 0.200800 0.060900 0.648000 0.736000 -0.136000 -0.800000 0.182100 0.060900 0.560000 0.824000 -0.024000 -0.770200 0.200800 0.000000 0.616000 0.776000 0.056000 -0.800000 0.184600 0.000000 0.464000 0.872000 0.120000 -0.787300 0.200800 -0.060900 0.520000 0.824000 -0.184000 -0.800000 0.194300 -0.060900 0.416000 0.824000 -0.360000 -0.800000 0.194300 -0.060900 0.416000 0.824000 -0.360000 -0.800000 0.028400 0.121900 -0.376000 -0.808000 0.432000 -0.800000 0.028400 0.121900 -0.376000 -0.808000 0.432000 -0.829700 0.000000 0.121900 -0.704000 -0.616000 0.344000 -0.800000 0.000000 0.064400 -0.576000 -0.736000 0.344000 -0.800000 0.000000 0.064400 -0.576000 -0.736000 0.344000 -0.911800 0.100400 0.121900 0.528000 0.800000 0.264000 -0.911800 0.100400 0.121900 0.528000 0.800000 0.264000 -0.950000 0.069700 0.121900 0.360000 0.840000 0.384000 -0.936800 0.100400 0.060900 0.456000 0.872000 0.168000 -0.950000 0.091300 0.060900 0.600000 0.776000 0.176000 -0.950000 0.100400 0.012800 0.496000 0.848000 0.136000 -1.000000 0.068400 0.060900 0.464000 0.872000 0.104000 -0.952900 0.100400 0.000000 0.504000 0.848000 0.120000 -1.000000 0.075000 0.000000 0.472000 0.872000 0.072000 -0.957800 0.100400 -0.060900 0.544000 0.824000 -0.120000 -1.000000 0.074600 -0.060900 0.496000 0.816000 -0.280000 -1.000000 0.074600 -0.060900 0.496000 0.816000 -0.280000 -0.950000 -0.142500 0.121900 -0.608000 -0.672000 0.392000 -0.950000 -0.142500 0.121900 -0.608000 -0.672000 0.392000 -0.950000 -0.150600 0.094900 -0.648000 -0.696000 0.272000 -0.900000 -0.107100 0.121900 -0.584000 -0.768000 0.240000 -0.942000 -0.150600 0.060900 -0.704000 -0.672000 0.200000 -0.900000 -0.117100 0.060900 -0.656000 -0.736000 0.136000 -0.931300 -0.150600 0.000000 -0.640000 -0.744000 0.144000 -0.900000 -0.125700 0.000000 -0.664000 -0.728000 0.136000 -0.917800 -0.150600 -0.060900 -0.640000 -0.736000 0.184000 -0.900000 -0.135500 -0.060900 -0.672000 -0.712000 0.168000 -0.902600 -0.150600 -0.121900 -0.664000 -0.736000 0.096000 -0.900000 -0.148200 -0.121900 -0.664000 -0.728000 0.088000 -0.900000 -0.150600 -0.145400 -0.696000 -0.704000 0.104000 -0.902600 -0.150600 -0.121900 -0.664000 -0.736000 0.096000 -0.900000 -0.155900 -0.182900 -0.744000 -0.648000 0.112000 -0.950000 -0.200400 -0.121900 -0.720000 -0.672000 0.136000 -0.939100 -0.200800 -0.182900 -0.712000 -0.672000 0.160000 -0.950000 -0.200800 -0.124000 -0.680000 -0.712000 0.160000 -0.950000 -0.211700 -0.182900 -0.704000 -0.680000 0.176000 -0.939100 -0.200800 -0.182900 -0.712000 -0.672000 0.160000 -0.950000 -0.224400 -0.243900 -0.688000 -0.640000 0.328000 -0.928800 -0.200800 -0.243900 -0.736000 -0.616000 0.240000 -0.939100 -0.200800 -0.182900 -0.712000 -0.672000 0.160000 -0.900000 -0.163000 -0.243900 -0.816000 -0.552000 0.128000 -0.900000 -0.155900 -0.182900 -0.744000 -0.648000 0.112000 -0.890800 -0.150600 -0.243900 -0.848000 -0.512000 0.064000 -0.895100 -0.150600 -0.182900 -0.744000 -0.648000 0.104000 -0.900000 -0.155900 -0.182900 -0.744000 -0.648000 0.112000 -0.900000 -0.150600 -0.145400 -0.696000 -0.704000 0.104000 -0.900000 -0.150600 -0.145400 -0.696000 -0.704000 0.104000 -0.950000 -0.150600 0.094900 -0.648000 -0.696000 0.272000 -0.950000 -0.150600 0.094900 -0.648000 -0.696000 0.272000 -0.950000 -0.158100 0.060900 -0.608000 -0.760000 0.200000 -0.942000 -0.150600 0.060900 -0.704000 -0.672000 0.200000 -0.950000 -0.168100 0.000000 -0.640000 -0.744000 0.184000 -0.931300 -0.150600 0.000000 -0.640000 -0.744000 0.144000 -0.950000 -0.183700 -0.060900 -0.632000 -0.728000 0.232000 -0.917800 -0.150600 -0.060900 -0.640000 -0.736000 0.184000 -0.950000 -0.200400 -0.121900 -0.720000 -0.672000 0.136000 -0.902600 -0.150600 -0.121900 -0.664000 -0.736000 0.096000 -0.902600 -0.150600 -0.121900 -0.664000 -0.736000 0.096000 -1.000000 0.053600 0.121900 0.280000 0.872000 0.392000 -1.000000 0.053600 0.121900 0.280000 0.872000 0.392000 -0.950000 0.069700 0.121900 0.360000 0.840000 0.384000 -1.000000 0.068400 0.060900 0.464000 0.872000 0.104000 -0.950000 0.091300 0.060900 0.600000 0.776000 0.176000 -0.950000 0.091300 0.060900 0.600000 0.776000 0.176000 --1.000000 -0.090800 0.060900 -0.320000 -0.912000 0.248000 --1.000000 -0.090800 0.060900 -0.320000 -0.912000 0.248000 --0.973400 -0.100400 0.060900 -0.344000 -0.904000 0.240000 --1.000000 -0.100400 0.014600 -0.304000 -0.920000 0.208000 --1.000000 -0.100400 0.014600 -0.304000 -0.920000 0.208000 --0.950000 0.258900 0.000000 0.296000 0.848000 0.432000 --0.950000 0.258900 0.000000 0.296000 0.848000 0.432000 --0.928700 0.251000 0.000000 0.312000 0.848000 0.408000 --0.950000 0.251000 0.016800 0.288000 0.808000 0.504000 --0.950000 0.251000 0.016800 0.288000 0.808000 0.504000 --0.900000 -0.149700 0.060900 -0.696000 -0.664000 0.232000 --0.900000 -0.149700 0.060900 -0.696000 -0.664000 0.232000 --0.899200 -0.150600 0.060900 -0.816000 -0.504000 0.256000 --0.900000 -0.150600 0.057700 -0.744000 -0.616000 0.232000 --0.900000 -0.150600 0.057700 -0.744000 -0.616000 0.232000 --0.750000 0.106000 0.060900 0.496000 0.464000 0.728000 --0.750000 0.106000 0.060900 0.496000 0.464000 0.728000 --0.796300 0.150600 0.060900 0.512000 0.584000 0.616000 --0.750000 0.150600 0.014500 0.472000 0.624000 0.608000 --0.750000 0.150600 0.014500 0.472000 0.624000 0.608000 --0.750800 -0.401700 0.000000 -0.816000 -0.520000 0.208000 --0.750800 -0.401700 0.000000 -0.816000 -0.520000 0.208000 --0.750000 -0.401700 0.004100 -0.816000 -0.520000 0.232000 --0.750000 -0.403200 0.000000 -0.832000 -0.504000 0.216000 --0.750000 -0.403200 0.000000 -0.832000 -0.504000 0.216000 --0.700000 0.051600 0.060900 0.528000 0.416000 0.728000 --0.700000 0.051600 0.060900 0.528000 0.416000 0.728000 --0.744800 0.100400 0.060900 0.496000 0.456000 0.728000 --0.700000 0.100400 0.019100 0.504000 0.504000 0.688000 --0.700000 0.100400 0.019100 0.504000 0.504000 0.688000 --0.700000 0.121800 0.000000 0.536000 0.544000 0.632000 --0.700000 0.121800 0.000000 0.536000 0.544000 0.632000 --0.680200 0.100400 0.000000 0.600000 0.440000 0.656000 --0.700000 0.100400 0.019100 0.504000 0.504000 0.688000 --0.700000 0.100400 0.019100 0.504000 0.504000 0.688000 --0.650000 -0.023500 0.060900 0.576000 0.360000 0.720000 --0.650000 -0.023500 0.060900 0.576000 0.360000 0.720000 --0.666100 0.000000 0.060900 0.560000 0.376000 0.728000 --0.650000 0.000000 0.045200 0.576000 0.400000 0.704000 --0.650000 0.000000 0.045200 0.576000 0.400000 0.704000 --0.650000 0.063100 0.000000 0.592000 0.392000 0.696000 --0.650000 0.063100 0.000000 0.592000 0.392000 0.696000 --0.641800 0.050200 0.000000 0.616000 0.400000 0.664000 --0.650000 0.050200 0.008200 0.568000 0.384000 0.720000 --0.650000 0.050200 0.008200 0.568000 0.384000 0.720000 --0.650000 -0.495900 0.060900 -0.528000 -0.720000 0.432000 --0.650000 -0.495900 0.060900 -0.528000 -0.720000 0.432000 --0.640700 -0.502100 0.060900 -0.496000 -0.728000 0.456000 --0.650000 -0.502100 0.048300 -0.536000 -0.712000 0.440000 --0.650000 -0.502100 0.048300 -0.536000 -0.712000 0.440000 --0.633400 -0.552300 0.000000 -0.384000 -0.672000 0.624000 --0.633400 -0.552300 0.000000 -0.384000 -0.672000 0.624000 --0.600000 -0.552300 0.023900 -0.224000 -0.776000 0.584000 --0.600000 -0.566300 0.000000 -0.184000 -0.816000 0.544000 --0.550000 -0.552300 0.031000 0.256000 -0.800000 0.528000 --0.550000 -0.565800 0.000000 0.224000 -0.872000 0.424000 --0.509600 -0.552300 0.000000 0.320000 -0.840000 0.424000 --0.509600 -0.552300 0.000000 0.320000 -0.840000 0.424000 --0.600000 -0.018300 0.000000 0.712000 0.368000 0.584000 --0.600000 -0.018300 0.000000 0.712000 0.368000 0.584000 --0.584800 -0.050200 0.000000 0.744000 0.336000 0.568000 --0.600000 -0.050200 0.018400 0.648000 0.320000 0.688000 --0.600000 -0.050200 0.018400 0.648000 0.320000 0.688000 --0.472400 -0.150600 0.060900 -0.464000 0.768000 0.416000 --0.472400 -0.150600 0.060900 -0.464000 0.768000 0.416000 --0.500000 -0.166600 0.060900 -0.304000 0.832000 0.448000 --0.500000 -0.150600 0.019400 -0.216000 0.856000 0.464000 --0.500000 -0.150600 0.019400 -0.216000 0.856000 0.464000 --0.434300 -0.100400 0.000000 -0.648000 0.720000 0.208000 --0.434300 -0.100400 0.000000 -0.648000 0.720000 0.208000 --0.405500 -0.100400 0.060900 -0.712000 0.456000 0.520000 --0.400000 -0.050900 0.000000 -0.776000 0.576000 0.224000 --0.400000 -0.090100 0.060900 -0.696000 0.400000 0.584000 --0.399300 -0.050200 0.000000 -0.696000 0.680000 0.184000 --0.367400 -0.050200 0.060900 -0.696000 0.408000 0.584000 --0.367400 -0.050200 0.060900 -0.696000 0.408000 0.584000 --0.355100 0.050200 0.000000 -0.872000 0.216000 0.416000 --0.355100 0.050200 0.000000 -0.872000 0.216000 0.416000 --0.350000 0.077100 0.000000 -0.776000 0.256000 0.568000 --0.350000 0.050200 0.010900 -0.568000 0.448000 0.680000 --0.321000 0.100400 0.000000 -0.264000 0.416000 0.864000 --0.300000 0.050200 0.038600 -0.224000 0.544000 0.800000 --0.300000 0.100400 0.006400 -0.200000 0.408000 0.880000 --0.250000 0.050200 0.048300 0.000000 0.552000 0.832000 --0.250000 0.100400 0.002600 0.144000 0.496000 0.848000 --0.250000 0.100400 0.002600 0.144000 0.496000 0.848000 --0.350000 0.000000 0.059800 -0.688000 0.400000 0.592000 --0.350000 0.000000 0.059800 -0.688000 0.400000 0.592000 --0.350000 0.050200 0.010900 -0.568000 0.448000 0.680000 --0.373100 0.000000 0.000000 -0.880000 0.240000 0.392000 --0.355100 0.050200 0.000000 -0.872000 0.216000 0.416000 --0.377800 0.000000 -0.060900 -0.864000 0.424000 -0.248000 --0.358600 0.050200 -0.060900 -0.920000 0.168000 -0.328000 --0.372200 0.000000 -0.121900 -0.848000 0.480000 -0.200000 --0.350000 0.050200 -0.078800 -0.832000 0.272000 -0.472000 --0.350000 0.031200 -0.121900 -0.744000 0.552000 -0.352000 --0.335400 0.050200 -0.121900 -0.752000 0.472000 -0.456000 --0.350000 0.000000 -0.171400 -0.688000 0.416000 -0.584000 --0.301000 0.050200 -0.182900 -0.704000 0.472000 -0.512000 --0.340600 0.000000 -0.182900 -0.696000 0.480000 -0.520000 --0.350000 0.000000 -0.171400 -0.688000 0.416000 -0.584000 --0.350000 -0.016600 -0.182900 -0.688000 0.360000 -0.616000 --0.372200 0.000000 -0.121900 -0.848000 0.480000 -0.200000 --0.365500 -0.050200 -0.182900 -0.728000 0.384000 -0.560000 --0.399400 -0.050200 -0.121900 -0.760000 0.504000 -0.392000 --0.400000 -0.096400 -0.182900 -0.664000 0.552000 -0.496000 --0.400000 -0.050900 -0.121900 -0.736000 0.536000 -0.408000 --0.403600 -0.100400 -0.182900 -0.616000 0.592000 -0.512000 --0.434900 -0.100400 -0.121900 -0.608000 0.744000 -0.256000 --0.434900 -0.100400 -0.121900 -0.608000 0.744000 -0.256000 --0.350000 0.000000 0.059800 -0.688000 0.400000 0.592000 --0.350000 0.000000 0.059800 -0.688000 0.400000 0.592000 --0.350000 0.050200 0.010900 -0.568000 0.448000 0.680000 --0.348200 0.000000 0.060900 -0.376000 0.448000 0.800000 --0.300000 0.050200 0.038600 -0.224000 0.544000 0.800000 --0.300000 0.027200 0.060900 -0.160000 0.552000 0.808000 --0.250000 0.050200 0.048300 0.000000 0.552000 0.832000 --0.250000 0.033500 0.060900 0.056000 0.528000 0.840000 --0.200000 0.050200 0.037800 0.512000 0.448000 0.720000 --0.200000 0.020500 0.060900 0.664000 0.440000 0.600000 --0.200000 0.020500 0.060900 0.664000 0.440000 0.600000 --0.208400 0.401700 0.000000 -0.424000 0.248000 0.864000 --0.208400 0.401700 0.000000 -0.424000 0.248000 0.864000 --0.200000 0.408700 0.000000 -0.112000 0.496000 0.856000 --0.200000 0.401700 0.005100 -0.168000 0.288000 0.936000 --0.185900 0.401700 0.000000 0.264000 0.248000 0.928000 --0.200000 0.384800 0.000000 -0.112000 -0.232000 0.960000 --0.150000 0.401700 -0.011900 0.240000 0.256000 0.928000 --0.200000 0.351500 -0.009600 0.208000 -0.208000 0.952000 --0.150000 0.351500 -0.029900 0.096000 -0.168000 0.976000 --0.200000 0.301200 -0.022600 0.056000 -0.176000 0.976000 --0.150000 0.301200 -0.033800 0.040000 -0.024000 0.992000 --0.200000 0.251000 -0.048300 -0.120000 -0.296000 0.944000 --0.150000 0.251000 -0.027500 -0.136000 -0.104000 0.984000 --0.200000 0.206100 -0.060900 -0.448000 -0.184000 0.872000 --0.150000 0.200800 -0.027500 -0.320000 -0.168000 0.928000 --0.198000 0.200800 -0.060900 -0.464000 0.288000 0.832000 --0.150000 0.150600 -0.037800 0.256000 -0.016000 0.960000 --0.200000 0.199100 -0.060900 -0.320000 0.504000 0.792000 --0.200000 0.150600 -0.023100 -0.360000 0.472000 0.792000 --0.250000 0.177000 -0.060900 -0.096000 0.568000 0.808000 --0.250000 0.150600 -0.042200 0.008000 0.568000 0.816000 --0.277600 0.200800 -0.060900 0.584000 -0.072000 0.800000 --0.300000 0.150600 -0.036000 -0.360000 0.064000 0.920000 --0.300000 0.200800 -0.040500 0.440000 0.208000 0.864000 --0.346000 0.150600 -0.060900 -0.768000 -0.144000 0.616000 --0.350000 0.200800 -0.003200 -0.528000 -0.104000 0.832000 --0.350000 0.153200 -0.060900 -0.608000 -0.784000 0.016000 --0.368900 0.200800 -0.060900 -0.952000 0.040000 -0.280000 --0.350000 0.200800 -0.076700 -0.368000 -0.104000 -0.920000 --0.356100 0.251000 -0.060900 -0.936000 0.104000 -0.312000 --0.350000 0.251000 -0.067500 -0.624000 0.048000 -0.768000 --0.353500 0.301200 -0.060900 -0.872000 0.080000 -0.464000 --0.350000 0.301200 -0.064600 -0.624000 0.064000 -0.768000 --0.350000 0.329400 -0.060900 -0.960000 0.152000 -0.224000 --0.300000 0.301200 -0.089300 -0.344000 0.056000 -0.936000 --0.344500 0.351500 -0.060900 -0.776000 0.288000 0.552000 --0.300000 0.351500 -0.083400 -0.432000 0.176000 -0.880000 --0.307400 0.401700 -0.060900 -0.696000 0.688000 -0.152000 --0.300000 0.401700 -0.066400 -0.448000 0.440000 -0.768000 --0.300000 0.408800 -0.060900 -0.664000 0.712000 -0.184000 --0.250000 0.401700 -0.091800 -0.416000 0.456000 -0.776000 --0.250000 0.447500 -0.060900 -0.512000 0.744000 0.408000 --0.208300 0.401700 -0.121900 -0.432000 0.432000 -0.784000 --0.242600 0.451900 -0.060900 -0.440000 0.728000 0.512000 --0.200000 0.409200 -0.121900 -0.400000 0.464000 -0.776000 --0.200000 0.451900 -0.081300 -0.400000 0.504000 -0.752000 --0.152100 0.451900 -0.121900 -0.424000 0.536000 -0.720000 --0.200000 0.477600 -0.060900 -0.544000 0.808000 -0.208000 --0.150000 0.453400 -0.121900 -0.320000 0.624000 -0.704000 --0.150000 0.501300 -0.060900 -0.376000 0.880000 -0.280000 --0.100000 0.479800 -0.121900 -0.288000 0.584000 -0.752000 --0.146800 0.502100 -0.060900 -0.272000 0.960000 0.016000 --0.100000 0.502100 -0.081300 -0.184000 0.840000 -0.488000 --0.100000 0.517800 -0.060900 -0.120000 0.976000 0.136000 --0.050000 0.502100 -0.117100 -0.040000 0.912000 -0.392000 --0.050000 0.515300 -0.060900 0.432000 0.792000 0.408000 --0.033200 0.502100 -0.060900 0.616000 0.496000 0.600000 --0.050000 0.502100 -0.046900 0.400000 0.496000 0.760000 --0.023600 0.451900 -0.060900 0.376000 0.152000 0.904000 --0.050000 0.451900 -0.049700 0.432000 0.024000 0.896000 --0.005200 0.401700 -0.060900 0.264000 0.168000 0.944000 --0.050000 0.401700 -0.052300 0.176000 0.040000 0.976000 -0.000000 0.393800 -0.060900 0.224000 0.176000 0.952000 --0.050000 0.351500 -0.043600 0.248000 0.032000 0.960000 -0.000000 0.351500 -0.051600 0.280000 -0.248000 0.920000 --0.050000 0.301200 -0.044600 0.440000 -0.008000 0.896000 -0.000000 0.334500 -0.060900 0.312000 -0.368000 0.864000 --0.027600 0.301200 -0.060900 0.456000 -0.208000 0.856000 -0.000000 0.301200 -0.076500 0.296000 -0.272000 0.904000 --0.035000 0.251000 -0.060900 0.512000 -0.448000 0.728000 -0.000000 0.251000 -0.086600 0.344000 -0.360000 0.864000 --0.050000 0.236000 -0.060900 0.536000 -0.496000 0.672000 -0.000000 0.211400 -0.121900 0.496000 -0.712000 0.480000 --0.050000 0.200800 -0.090500 0.520000 -0.520000 0.672000 --0.012800 0.200800 -0.121900 0.688000 -0.616000 0.376000 --0.050000 0.170300 -0.121900 0.584000 -0.576000 0.560000 -0.000000 0.200800 -0.169000 0.576000 -0.744000 0.320000 --0.050000 0.150600 -0.159500 0.712000 -0.480000 0.504000 -0.000000 0.195100 -0.182900 0.504000 -0.656000 -0.544000 --0.033200 0.150600 -0.182900 0.832000 -0.552000 -0.016000 -0.000000 0.200800 -0.186400 0.272000 -0.456000 -0.840000 --0.050000 0.150600 -0.210200 0.840000 -0.208000 -0.496000 --0.050000 0.200800 -0.204500 0.304000 -0.328000 -0.888000 --0.077600 0.150600 -0.243900 0.320000 0.328000 -0.880000 --0.100000 0.200800 -0.221500 0.056000 0.392000 -0.912000 --0.100000 0.164100 -0.243900 -0.032000 0.432000 -0.896000 --0.150000 0.200800 -0.199200 -0.328000 0.272000 -0.896000 --0.126800 0.150600 -0.243900 -0.208000 0.496000 -0.832000 --0.150000 0.150600 -0.235500 -0.296000 0.536000 -0.784000 --0.150000 0.141700 -0.243900 -0.352000 0.528000 -0.768000 --0.200000 0.150600 -0.197300 -0.488000 0.464000 -0.728000 --0.198500 0.100400 -0.243900 -0.376000 0.480000 -0.784000 --0.200000 0.100400 -0.242800 -0.520000 0.512000 -0.672000 --0.200000 0.099300 -0.243900 -0.456000 0.488000 -0.736000 --0.249100 0.100400 -0.182900 -0.576000 0.496000 -0.640000 --0.250000 0.055800 -0.243900 -0.560000 0.648000 -0.504000 --0.250000 0.099600 -0.182900 -0.488000 0.616000 -0.608000 --0.256300 0.050200 -0.243900 -0.592000 0.624000 -0.488000 --0.300000 0.052000 -0.182900 -0.664000 0.464000 -0.568000 --0.300000 0.050200 -0.185100 -0.648000 0.560000 -0.504000 --0.256300 0.050200 -0.243900 -0.592000 0.624000 -0.488000 --0.300000 0.001800 -0.243900 -0.496000 0.680000 -0.520000 --0.250000 0.050200 -0.254100 -0.584000 0.656000 -0.464000 --0.300000 0.000000 -0.248500 -0.656000 0.560000 -0.488000 --0.250000 0.000000 -0.286200 -0.320000 0.712000 -0.616000 --0.300000 -0.050200 -0.270300 -0.824000 0.232000 -0.512000 --0.250000 -0.028200 -0.304800 -0.400000 0.416000 -0.808000 --0.266700 -0.050200 -0.304800 -0.504000 0.288000 -0.808000 --0.250000 -0.050200 -0.318700 -0.440000 0.320000 -0.832000 --0.288100 -0.100400 -0.304800 -0.408000 0.240000 -0.872000 --0.250000 -0.100400 -0.327300 -0.384000 0.152000 -0.904000 --0.300000 -0.118900 -0.304800 -0.376000 0.264000 -0.880000 --0.250000 -0.150600 -0.327500 -0.120000 0.152000 -0.976000 --0.300000 -0.150600 -0.319300 -0.256000 0.480000 -0.832000 --0.250000 -0.200800 -0.333200 0.168000 0.080000 -0.976000 --0.300000 -0.200800 -0.340600 0.016000 0.280000 -0.952000 --0.250000 -0.251000 -0.337900 0.384000 0.112000 -0.912000 --0.300000 -0.251000 -0.348000 0.192000 0.248000 -0.944000 --0.250000 -0.301200 -0.349000 0.296000 0.272000 -0.912000 --0.300000 -0.296900 -0.365800 0.296000 0.528000 -0.784000 --0.291400 -0.301200 -0.365800 0.272000 0.504000 -0.808000 --0.300000 -0.301200 -0.369600 0.320000 0.544000 -0.768000 --0.250000 -0.342900 -0.365800 0.504000 0.512000 -0.680000 --0.300000 -0.341100 -0.426800 -0.128000 0.536000 -0.832000 --0.250000 -0.351500 -0.379700 0.552000 0.712000 -0.416000 --0.273100 -0.351500 -0.426800 0.480000 0.752000 -0.440000 --0.250000 -0.368100 -0.426800 0.504000 0.792000 -0.336000 --0.250000 -0.351500 -0.379700 0.552000 0.712000 -0.416000 --0.200000 -0.393200 -0.426800 0.696000 0.632000 -0.328000 --0.241400 -0.351500 -0.365800 0.488000 0.640000 -0.576000 --0.200000 -0.365300 -0.365800 0.504000 0.768000 -0.376000 --0.200000 -0.351500 -0.343300 0.312000 0.640000 -0.696000 --0.241400 -0.351500 -0.365800 0.488000 0.640000 -0.576000 --0.200000 -0.301200 -0.313400 0.328000 0.152000 -0.928000 --0.250000 -0.342900 -0.365800 0.504000 0.512000 -0.680000 --0.250000 -0.301200 -0.349000 0.296000 0.272000 -0.912000 --0.291400 -0.301200 -0.365800 0.272000 0.504000 -0.808000 --0.291400 -0.301200 -0.365800 0.272000 0.504000 -0.808000 --0.200000 0.401700 0.005100 -0.168000 0.288000 0.936000 --0.200000 0.401700 0.005100 -0.168000 0.288000 0.936000 --0.200000 0.384800 0.000000 -0.112000 -0.232000 0.960000 --0.208400 0.401700 0.000000 -0.424000 0.248000 0.864000 --0.200000 0.351500 -0.009600 0.208000 -0.208000 0.952000 --0.250000 0.401700 -0.023000 -0.400000 -0.016000 0.912000 --0.250000 0.351500 -0.004200 0.040000 0.000000 0.992000 --0.300000 0.401700 -0.053800 -0.512000 0.520000 0.672000 --0.300000 0.351500 -0.024700 -0.384000 0.216000 0.896000 --0.307400 0.401700 -0.060900 -0.696000 0.688000 -0.152000 --0.344500 0.351500 -0.060900 -0.776000 0.288000 0.552000 --0.300000 0.351500 -0.024700 -0.384000 0.216000 0.896000 --0.350000 0.329400 -0.060900 -0.960000 0.152000 -0.224000 --0.300000 0.301200 -0.020200 -0.184000 0.032000 0.976000 --0.350000 0.301200 -0.051600 -0.832000 0.120000 0.528000 --0.300000 0.251000 -0.020200 0.208000 -0.160000 0.960000 --0.350000 0.251000 -0.040500 -0.808000 0.200000 0.544000 --0.300000 0.200800 -0.040500 0.440000 0.208000 0.864000 --0.350000 0.200800 -0.003200 -0.528000 -0.104000 0.832000 --0.350000 0.251000 -0.040500 -0.808000 0.200000 0.544000 --0.368900 0.200800 -0.060900 -0.952000 0.040000 -0.280000 --0.356100 0.251000 -0.060900 -0.936000 0.104000 -0.312000 --0.350000 0.251000 -0.040500 -0.808000 0.200000 0.544000 --0.353500 0.301200 -0.060900 -0.872000 0.080000 -0.464000 --0.350000 0.301200 -0.051600 -0.832000 0.120000 0.528000 --0.350000 0.329400 -0.060900 -0.960000 0.152000 -0.224000 --0.350000 0.329400 -0.060900 -0.960000 0.152000 -0.224000 --0.250000 -0.301200 0.006000 0.344000 -0.608000 0.704000 --0.250000 -0.301200 0.006000 0.344000 -0.608000 0.704000 --0.235900 -0.301200 0.000000 0.272000 -0.568000 0.768000 --0.250000 -0.307700 0.000000 0.288000 -0.576000 0.760000 --0.250000 -0.307700 0.000000 0.288000 -0.576000 0.760000 --0.169100 -0.301200 0.000000 -0.376000 -0.392000 0.832000 --0.169100 -0.301200 0.000000 -0.376000 -0.392000 0.832000 --0.150000 -0.301200 0.010200 -0.304000 -0.280000 0.904000 --0.150000 -0.346200 0.000000 -0.392000 -0.160000 0.904000 --0.100000 -0.301200 0.037800 -0.016000 -0.152000 0.984000 --0.100000 -0.344900 0.000000 0.072000 -0.528000 0.840000 --0.050000 -0.301200 0.029100 0.312000 -0.280000 0.904000 --0.050000 -0.329200 0.000000 0.264000 -0.624000 0.720000 --0.002200 -0.301200 0.000000 0.384000 -0.648000 0.648000 --0.050000 -0.351500 -0.027000 0.488000 -0.688000 0.528000 -0.000000 -0.301200 -0.001900 0.408000 -0.704000 0.568000 --0.029100 -0.351500 -0.060900 0.584000 -0.680000 0.424000 -0.000000 -0.326800 -0.060900 0.344000 -0.824000 0.432000 -0.000000 -0.351500 -0.112600 0.544000 -0.704000 0.448000 -0.032200 -0.301200 -0.060900 0.552000 -0.696000 0.448000 -0.006400 -0.351500 -0.121900 0.552000 -0.776000 0.288000 -0.050000 -0.301200 -0.085900 0.528000 -0.704000 0.464000 -0.050000 -0.321600 -0.121900 0.584000 -0.712000 0.376000 -0.074000 -0.301200 -0.121900 0.536000 -0.792000 0.264000 -0.050000 -0.327900 -0.182900 0.552000 -0.824000 0.048000 -0.088900 -0.301200 -0.182900 0.488000 -0.864000 0.072000 -0.050000 -0.327900 -0.243900 0.480000 -0.872000 0.000000 -0.091700 -0.301200 -0.243900 0.488000 -0.864000 -0.008000 -0.050000 -0.326800 -0.304800 0.424000 -0.880000 -0.184000 -0.085600 -0.301200 -0.304800 0.544000 -0.768000 -0.320000 -0.050000 -0.303000 -0.365800 0.400000 -0.792000 -0.448000 -0.052200 -0.301200 -0.365800 0.552000 -0.720000 -0.416000 -0.050000 -0.301200 -0.369000 0.376000 -0.768000 -0.512000 -0.100000 -0.263400 -0.365800 0.480000 -0.672000 -0.544000 -0.050000 -0.251000 -0.406500 0.232000 -0.312000 -0.912000 -0.100000 -0.251000 -0.380100 0.472000 -0.384000 -0.784000 -0.050000 -0.206300 -0.365800 -0.112000 0.608000 -0.776000 -0.100000 -0.224900 -0.365800 0.352000 0.456000 -0.808000 -0.050000 -0.200800 -0.360800 -0.016000 0.576000 -0.808000 -0.100000 -0.200800 -0.352600 0.240000 0.528000 -0.800000 -0.100000 -0.224900 -0.365800 0.352000 0.456000 -0.808000 -0.150000 -0.200800 -0.325200 0.160000 0.176000 -0.968000 -0.118000 -0.251000 -0.365800 0.536000 -0.224000 -0.808000 -0.150000 -0.251000 -0.336000 0.080000 -0.336000 -0.928000 -0.100000 -0.263400 -0.365800 0.480000 -0.672000 -0.544000 -0.150000 -0.287400 -0.304800 0.000000 -0.712000 -0.688000 -0.100000 -0.292600 -0.304800 0.432000 -0.840000 -0.304000 -0.150000 -0.287700 -0.243900 -0.208000 -0.968000 0.064000 -0.100000 -0.296900 -0.243900 0.408000 -0.912000 0.000000 -0.150000 -0.278000 -0.182900 -0.064000 -0.936000 0.328000 -0.100000 -0.295100 -0.182900 0.440000 -0.880000 0.144000 -0.150000 -0.253200 -0.121900 0.192000 -0.808000 0.552000 -0.100000 -0.284500 -0.121900 0.464000 -0.744000 0.472000 -0.150000 -0.251000 -0.118100 0.224000 -0.792000 0.560000 -0.100000 -0.256900 -0.060900 0.456000 -0.800000 0.368000 -0.110300 -0.251000 -0.060900 0.504000 -0.760000 0.392000 -0.100000 -0.251000 -0.044600 0.544000 -0.608000 0.568000 -0.130700 -0.200800 -0.060900 0.504000 0.008000 0.856000 -0.100000 -0.200800 -0.044900 0.416000 0.232000 0.872000 -0.100000 -0.170000 -0.060900 0.256000 0.296000 0.912000 -0.050000 -0.200800 -0.016400 0.232000 0.648000 0.720000 -0.076800 -0.150600 -0.060900 0.208000 0.432000 0.872000 -0.050000 -0.150600 -0.053500 0.160000 0.448000 0.872000 -0.050000 -0.140200 -0.060900 0.152000 0.504000 0.848000 -0.000000 -0.150600 -0.047300 0.168000 0.600000 0.768000 -0.000000 -0.136800 -0.060900 0.088000 0.520000 0.840000 --0.050000 -0.150600 -0.033100 0.152000 0.512000 0.840000 --0.050000 -0.119400 -0.060900 0.168000 0.528000 0.824000 --0.100000 -0.150600 -0.019000 0.512000 0.456000 0.720000 --0.100000 -0.105500 -0.060900 0.480000 0.464000 0.736000 --0.129500 -0.150600 0.000000 0.416000 0.264000 0.864000 --0.104300 -0.100400 -0.060900 0.528000 0.416000 0.728000 --0.150000 -0.104300 0.000000 0.496000 0.120000 0.848000 --0.150000 -0.100400 -0.001300 0.848000 0.032000 0.520000 --0.150600 -0.100400 0.000000 0.800000 0.040000 0.592000 --0.150000 -0.050200 -0.005700 0.768000 -0.024000 0.632000 --0.152800 -0.050200 0.000000 0.848000 0.032000 0.520000 --0.150000 0.000000 -0.001200 0.744000 0.064000 0.656000 --0.150800 0.000000 0.000000 0.744000 0.072000 0.656000 --0.150000 0.050200 -0.012600 0.624000 0.240000 0.728000 --0.163800 0.050200 0.000000 0.704000 0.216000 0.664000 --0.150000 0.100400 -0.027500 0.432000 0.296000 0.848000 --0.200000 0.089800 0.000000 0.216000 0.544000 0.800000 --0.200000 0.100400 -0.008800 0.176000 0.488000 0.848000 --0.238500 0.100400 0.000000 0.152000 0.496000 0.848000 --0.200000 0.150600 -0.023100 -0.360000 0.472000 0.792000 --0.250000 0.104200 0.000000 0.144000 0.480000 0.856000 --0.250000 0.150600 -0.042200 0.008000 0.568000 0.816000 --0.300000 0.112500 0.000000 -0.064000 0.472000 0.872000 --0.300000 0.150600 -0.036000 -0.360000 0.064000 0.920000 --0.300000 0.150600 -0.036000 -0.360000 0.064000 0.920000 --0.150000 -0.104300 0.000000 0.496000 0.120000 0.848000 --0.150000 -0.104300 0.000000 0.496000 0.120000 0.848000 --0.129500 -0.150600 0.000000 0.416000 0.264000 0.864000 --0.150000 -0.150600 0.010200 0.376000 0.208000 0.896000 --0.100000 -0.188700 0.000000 0.176000 0.408000 0.888000 --0.150000 -0.200800 0.013600 0.104000 0.200000 0.968000 --0.100000 -0.200800 0.005100 0.056000 0.344000 0.936000 --0.150000 -0.251000 0.002400 -0.056000 -0.176000 0.976000 --0.100000 -0.251000 0.029400 -0.128000 0.120000 0.976000 --0.150000 -0.301200 0.010200 -0.304000 -0.280000 0.904000 --0.100000 -0.301200 0.037800 -0.016000 -0.152000 0.984000 --0.100000 -0.251000 0.029400 -0.128000 0.120000 0.976000 --0.050000 -0.301200 0.029100 0.312000 -0.280000 0.904000 --0.050000 -0.251000 0.040700 0.136000 0.064000 0.984000 --0.002200 -0.301200 0.000000 0.384000 -0.648000 0.648000 -0.000000 -0.251000 0.031300 0.424000 -0.232000 0.872000 -0.000000 -0.299000 0.000000 0.440000 -0.464000 0.760000 -0.050000 -0.251000 0.003400 0.512000 0.320000 0.792000 -0.050000 -0.253500 0.000000 0.448000 -0.608000 0.648000 -0.054200 -0.251000 0.000000 0.552000 0.192000 0.800000 -0.050000 -0.286400 -0.060900 0.528000 -0.720000 0.440000 -0.100000 -0.251000 -0.044600 0.544000 -0.608000 0.568000 -0.100000 -0.256900 -0.060900 0.456000 -0.800000 0.368000 -0.050000 -0.286400 -0.060900 0.528000 -0.720000 0.440000 -0.100000 -0.284500 -0.121900 0.464000 -0.744000 0.472000 -0.050000 -0.301200 -0.085900 0.528000 -0.704000 0.464000 -0.074000 -0.301200 -0.121900 0.536000 -0.792000 0.264000 -0.100000 -0.284500 -0.121900 0.464000 -0.744000 0.472000 -0.088900 -0.301200 -0.182900 0.488000 -0.864000 0.072000 -0.100000 -0.295100 -0.182900 0.440000 -0.880000 0.144000 -0.091700 -0.301200 -0.243900 0.488000 -0.864000 -0.008000 -0.100000 -0.296900 -0.243900 0.408000 -0.912000 0.000000 -0.085600 -0.301200 -0.304800 0.544000 -0.768000 -0.320000 -0.100000 -0.292600 -0.304800 0.432000 -0.840000 -0.304000 -0.052200 -0.301200 -0.365800 0.552000 -0.720000 -0.416000 -0.100000 -0.263400 -0.365800 0.480000 -0.672000 -0.544000 -0.100000 -0.263400 -0.365800 0.480000 -0.672000 -0.544000 --0.100000 -0.200800 0.005100 0.056000 0.344000 0.936000 --0.100000 -0.200800 0.005100 0.056000 0.344000 0.936000 --0.050000 -0.200800 0.008600 0.032000 0.536000 0.840000 --0.100000 -0.188700 0.000000 0.176000 0.408000 0.888000 --0.050000 -0.190400 0.000000 0.096000 0.648000 0.744000 --0.100000 -0.150600 -0.019000 0.512000 0.456000 0.720000 --0.050000 -0.150600 -0.033100 0.152000 0.512000 0.840000 --0.050000 -0.190400 0.000000 0.096000 0.648000 0.744000 -0.000000 -0.150600 -0.047300 0.168000 0.600000 0.768000 -0.000000 -0.198800 0.000000 0.160000 0.688000 0.704000 -0.050000 -0.150600 -0.053500 0.160000 0.448000 0.872000 -0.006800 -0.200800 0.000000 0.232000 0.576000 0.776000 -0.050000 -0.200800 -0.016400 0.232000 0.648000 0.720000 -0.050000 -0.244100 0.000000 0.488000 0.320000 0.800000 -0.100000 -0.200800 -0.044900 0.416000 0.232000 0.872000 -0.054200 -0.251000 0.000000 0.552000 0.192000 0.800000 -0.100000 -0.251000 -0.044600 0.544000 -0.608000 0.568000 -0.100000 -0.251000 -0.044600 0.544000 -0.608000 0.568000 --0.100000 -0.200800 0.005100 0.056000 0.344000 0.936000 --0.100000 -0.200800 0.005100 0.056000 0.344000 0.936000 --0.100000 -0.251000 0.029400 -0.128000 0.120000 0.976000 --0.050000 -0.200800 0.008600 0.032000 0.536000 0.840000 --0.050000 -0.251000 0.040700 0.136000 0.064000 0.984000 -0.000000 -0.200800 0.002300 0.160000 0.560000 0.808000 -0.000000 -0.251000 0.031300 0.424000 -0.232000 0.872000 -0.006800 -0.200800 0.000000 0.232000 0.576000 0.776000 -0.050000 -0.251000 0.003400 0.512000 0.320000 0.792000 -0.050000 -0.244100 0.000000 0.488000 0.320000 0.800000 -0.054200 -0.251000 0.000000 0.552000 0.192000 0.800000 -0.054200 -0.251000 0.000000 0.552000 0.192000 0.800000 --0.050000 -0.190400 0.000000 0.096000 0.648000 0.744000 --0.050000 -0.190400 0.000000 0.096000 0.648000 0.744000 --0.050000 -0.200800 0.008600 0.032000 0.536000 0.840000 -0.000000 -0.198800 0.000000 0.160000 0.688000 0.704000 -0.000000 -0.200800 0.002300 0.160000 0.560000 0.808000 -0.006800 -0.200800 0.000000 0.232000 0.576000 0.776000 -0.006800 -0.200800 0.000000 0.232000 0.576000 0.776000 -0.500000 0.245700 0.000000 -0.568000 0.120000 0.808000 -0.500000 0.245700 0.000000 -0.568000 0.120000 0.808000 -0.500000 0.200800 0.008600 -0.576000 -0.176000 0.792000 -0.488800 0.200800 0.000000 -0.512000 0.024000 0.856000 -0.500000 0.181600 0.000000 -0.600000 -0.304000 0.728000 -0.500000 0.181600 0.000000 -0.600000 -0.304000 0.728000 -0.550000 0.174700 0.060900 -0.744000 -0.320000 0.576000 -0.550000 0.174700 0.060900 -0.744000 -0.320000 0.576000 -0.560700 0.150600 0.060900 -0.704000 -0.368000 0.592000 -0.550000 0.150600 0.048400 -0.632000 -0.416000 0.640000 -0.550000 0.150600 0.048400 -0.632000 -0.416000 0.640000 -0.641200 0.050200 0.060900 -0.600000 -0.608000 0.512000 -0.641200 0.050200 0.060900 -0.600000 -0.608000 0.512000 -0.600000 0.093600 0.060900 -0.624000 -0.616000 0.464000 -0.602900 0.050200 0.000000 -0.576000 -0.704000 0.400000 -0.600000 0.053300 0.000000 -0.472000 -0.712000 0.512000 -0.600000 0.050200 -0.005300 -0.440000 -0.752000 0.480000 -0.600000 0.050200 -0.005300 -0.440000 -0.752000 0.480000 --0.915700 -0.150600 0.000000 -0.696000 -0.672000 0.232000 --0.915700 -0.150600 0.000000 -0.696000 -0.672000 0.232000 --0.950000 -0.123700 0.000000 -0.488000 -0.840000 0.216000 --0.932400 -0.150600 -0.060900 -0.688000 -0.696000 0.176000 --0.950000 -0.136200 -0.060900 -0.528000 -0.832000 0.152000 --0.943100 -0.150600 -0.121900 -0.672000 -0.720000 0.120000 --0.950000 -0.144800 -0.121900 -0.536000 -0.832000 0.120000 --0.950000 -0.150600 -0.169000 -0.584000 -0.792000 0.136000 --0.943100 -0.150600 -0.121900 -0.672000 -0.720000 0.120000 --0.950000 -0.152700 -0.182900 -0.600000 -0.784000 0.144000 --0.903800 -0.200800 -0.121900 -0.696000 -0.704000 0.120000 --0.907400 -0.200800 -0.182900 -0.688000 -0.712000 0.072000 --0.950000 -0.152700 -0.182900 -0.600000 -0.784000 0.144000 --0.914100 -0.200800 -0.243900 -0.664000 -0.728000 0.128000 --0.950000 -0.161800 -0.243900 -0.584000 -0.784000 0.176000 --0.931500 -0.200800 -0.304800 -0.648000 -0.520000 -0.544000 --0.950000 -0.180000 -0.304800 -0.552000 -0.600000 -0.568000 --0.900000 -0.200800 -0.331500 -0.576000 -0.328000 -0.736000 --0.950000 -0.150600 -0.330800 -0.416000 -0.432000 -0.792000 --0.900000 -0.150600 -0.338300 -0.216000 -0.104000 -0.968000 --0.900000 -0.200800 -0.331500 -0.576000 -0.328000 -0.736000 --0.850000 -0.150600 -0.349400 0.072000 0.056000 -0.992000 --0.850000 -0.200800 -0.351200 -0.168000 0.112000 -0.976000 --0.800000 -0.150600 -0.340500 0.312000 0.288000 -0.896000 --0.800000 -0.200800 -0.355700 0.080000 0.256000 -0.960000 --0.750000 -0.150600 -0.317800 0.416000 0.384000 -0.816000 --0.750000 -0.200800 -0.348300 0.272000 0.384000 -0.872000 --0.731900 -0.150600 -0.304800 0.424000 0.400000 -0.808000 --0.700000 -0.200800 -0.326900 0.208000 0.528000 -0.816000 --0.700000 -0.175200 -0.304800 0.352000 0.528000 -0.768000 --0.651700 -0.200800 -0.304800 0.320000 0.544000 -0.768000 --0.700000 -0.150600 -0.284500 0.376000 0.392000 -0.832000 --0.650000 -0.200800 -0.303800 0.136000 0.680000 -0.712000 --0.650000 -0.150600 -0.267500 0.376000 0.464000 -0.792000 --0.650000 -0.150600 -0.267500 0.376000 0.464000 -0.792000 --0.895700 -0.200800 -0.060900 -0.864000 -0.480000 0.136000 --0.895700 -0.200800 -0.060900 -0.864000 -0.480000 0.136000 --0.882700 -0.200800 0.000000 -0.840000 -0.496000 0.192000 --0.860100 -0.251000 -0.060900 -0.808000 -0.568000 0.112000 --0.852600 -0.251000 0.000000 -0.800000 -0.568000 0.168000 --0.852600 -0.251000 0.000000 -0.800000 -0.568000 0.168000 --0.700000 -0.502100 -0.057900 -0.752000 -0.512000 0.400000 --0.700000 -0.502100 -0.057900 -0.752000 -0.512000 0.400000 --0.700000 -0.507800 -0.060900 -0.864000 -0.200000 0.448000 --0.701200 -0.502100 -0.060900 -0.816000 -0.416000 0.392000 --0.700000 -0.552300 -0.082500 -0.736000 -0.280000 0.608000 --0.723300 -0.502100 -0.121900 -0.896000 -0.224000 0.368000 --0.750000 -0.552300 -0.119400 0.072000 0.512000 0.848000 --0.750000 -0.549900 -0.121900 0.080000 0.648000 0.752000 --0.800000 -0.552300 -0.095900 0.424000 0.264000 0.864000 --0.800000 -0.539500 -0.121900 0.176000 0.680000 0.704000 --0.850000 -0.552300 -0.082300 -0.704000 -0.480000 0.504000 --0.850000 -0.519700 -0.121900 0.200000 0.624000 0.752000 --0.868200 -0.552300 -0.121900 -0.520000 -0.224000 0.816000 --0.850000 -0.502100 -0.144600 0.400000 0.776000 0.480000 --0.900000 -0.511500 -0.121900 -0.520000 -0.664000 0.528000 --0.878700 -0.502100 -0.121900 0.408000 0.368000 0.832000 --0.900000 -0.502100 -0.104000 -0.752000 0.000000 0.656000 --0.900000 -0.492700 -0.121900 -0.520000 0.712000 0.448000 --0.906100 -0.502100 -0.121900 -0.920000 0.072000 0.376000 --0.900000 -0.462200 -0.182900 0.320000 0.888000 0.304000 --0.925200 -0.502100 -0.182900 -0.976000 -0.008000 0.208000 --0.900000 -0.451900 -0.229200 0.512000 0.832000 0.168000 --0.929300 -0.502100 -0.243900 -0.992000 0.064000 -0.008000 --0.921000 -0.451900 -0.243900 -0.184000 0.968000 0.160000 --0.920600 -0.502100 -0.304800 -0.888000 -0.288000 -0.344000 --0.912200 -0.451900 -0.304800 -0.496000 0.720000 -0.464000 --0.900000 -0.502100 -0.352600 -0.672000 0.128000 -0.720000 --0.900000 -0.451900 -0.318500 0.104000 0.872000 -0.464000 --0.864000 -0.502100 -0.365800 -0.304000 0.480000 -0.816000 --0.891000 -0.451900 -0.304800 0.528000 0.824000 -0.192000 --0.850000 -0.496800 -0.365800 -0.176000 0.616000 -0.760000 --0.850000 -0.473200 -0.304800 0.272000 0.896000 -0.336000 --0.800000 -0.496400 -0.365800 -0.664000 0.416000 -0.608000 --0.800000 -0.473000 -0.304800 -0.736000 0.648000 -0.168000 --0.786000 -0.451900 -0.365800 -0.872000 0.080000 -0.472000 --0.787800 -0.451900 -0.304800 -0.984000 0.136000 -0.040000 --0.796500 -0.401700 -0.365800 -0.952000 -0.168000 -0.232000 --0.797400 -0.401700 -0.304800 -0.928000 -0.344000 0.056000 --0.800000 -0.388500 -0.365800 -0.864000 -0.288000 -0.400000 --0.800000 -0.395700 -0.304800 -0.920000 -0.376000 0.000000 --0.797400 -0.401700 -0.304800 -0.928000 -0.344000 0.056000 --0.800000 -0.365300 -0.243900 -0.880000 -0.440000 0.160000 --0.781800 -0.401700 -0.243900 -0.912000 -0.336000 0.208000 --0.800000 -0.355500 -0.182900 -0.872000 -0.472000 0.032000 --0.775200 -0.401700 -0.182900 -0.904000 -0.400000 0.120000 --0.800000 -0.354700 -0.121900 -0.848000 -0.512000 0.080000 --0.771000 -0.401700 -0.121900 -0.872000 -0.456000 0.128000 --0.800000 -0.351500 -0.101400 -0.840000 -0.528000 0.104000 --0.762700 -0.401700 -0.060900 -0.840000 -0.496000 0.168000 --0.794800 -0.351500 -0.060900 -0.816000 -0.552000 0.144000 --0.800000 -0.351500 -0.101400 -0.840000 -0.528000 0.104000 --0.800000 -0.343900 -0.060900 -0.816000 -0.552000 0.128000 --0.800000 -0.343900 -0.060900 -0.816000 -0.552000 0.128000 --0.700000 0.150600 -0.043600 0.552000 0.712000 0.424000 --0.700000 0.150600 -0.043600 0.552000 0.712000 0.424000 --0.700000 0.159000 -0.060900 0.600000 0.776000 0.184000 --0.689800 0.150600 -0.060900 0.640000 0.736000 0.192000 --0.700000 0.150600 -0.089800 0.592000 0.744000 -0.280000 --0.650000 0.112000 -0.060900 0.672000 0.704000 0.200000 --0.700000 0.140000 -0.121900 0.536000 0.728000 -0.408000 --0.650000 0.100400 -0.098000 0.720000 0.624000 -0.288000 --0.657700 0.100400 -0.121900 0.728000 0.576000 -0.360000 --0.650000 0.089500 -0.121900 0.728000 0.552000 -0.384000 --0.700000 0.100400 -0.182100 0.536000 0.592000 -0.592000 --0.650000 0.050200 -0.178200 0.664000 0.544000 -0.504000 --0.700000 0.099700 -0.182900 0.504000 0.560000 -0.640000 --0.652800 0.050200 -0.182900 0.592000 0.536000 -0.592000 --0.700000 0.050200 -0.235800 0.504000 0.432000 -0.744000 --0.650000 0.045800 -0.182900 0.672000 0.432000 -0.592000 --0.700000 0.037400 -0.243900 0.440000 0.392000 -0.800000 --0.650000 0.000000 -0.224600 0.632000 0.368000 -0.672000 --0.669700 0.000000 -0.243900 0.480000 0.312000 -0.808000 --0.700000 0.037400 -0.243900 0.440000 0.392000 -0.800000 --0.700000 0.000000 -0.262900 0.392000 0.288000 -0.864000 --0.700000 0.000000 -0.262900 0.392000 0.288000 -0.864000 --0.650000 -0.541900 0.000000 -0.528000 -0.600000 0.592000 --0.650000 -0.541900 0.000000 -0.528000 -0.600000 0.592000 --0.633400 -0.552300 0.000000 -0.384000 -0.672000 0.624000 --0.650000 -0.552300 -0.012600 -0.496000 -0.592000 0.624000 --0.650000 -0.552300 -0.012600 -0.496000 -0.592000 0.624000 --0.452400 -0.100400 -0.060900 -0.344000 0.936000 -0.016000 --0.452400 -0.100400 -0.060900 -0.344000 0.936000 -0.016000 --0.450000 -0.099400 -0.060900 -0.760000 0.616000 0.160000 --0.450000 -0.100400 -0.057100 -0.400000 0.872000 0.264000 --0.406900 -0.050200 -0.060900 -0.848000 0.520000 0.000000 --0.434300 -0.100400 0.000000 -0.648000 0.720000 0.208000 --0.400000 -0.050200 -0.003200 -0.712000 0.672000 0.168000 --0.400000 -0.050900 0.000000 -0.776000 0.576000 0.224000 --0.399300 -0.050200 0.000000 -0.696000 0.680000 0.184000 --0.399300 -0.050200 0.000000 -0.696000 0.680000 0.184000 --0.466200 -0.502100 0.000000 0.712000 -0.616000 0.320000 --0.466200 -0.502100 0.000000 0.712000 -0.616000 0.320000 --0.450000 -0.489500 0.000000 0.584000 -0.760000 0.264000 --0.450000 -0.502100 -0.045100 0.560000 -0.696000 0.432000 --0.403800 -0.451900 0.000000 0.744000 -0.560000 0.352000 --0.400000 -0.502100 -0.024700 0.848000 -0.224000 0.464000 --0.400000 -0.451900 -0.009600 0.744000 -0.536000 0.376000 --0.403800 -0.451900 0.000000 0.744000 -0.560000 0.352000 --0.400000 -0.447100 0.000000 0.720000 -0.584000 0.344000 --0.400000 -0.451900 -0.009600 0.744000 -0.536000 0.376000 --0.350000 -0.427600 0.000000 0.560000 -0.752000 0.336000 --0.350000 -0.451900 -0.058800 0.248000 -0.624000 0.728000 --0.350000 -0.451900 -0.058800 0.248000 -0.624000 0.728000 --0.500000 -0.552300 -0.009400 0.352000 -0.840000 0.400000 --0.500000 -0.552300 -0.009400 0.352000 -0.840000 0.400000 --0.478800 -0.552300 -0.060900 0.704000 -0.592000 0.376000 --0.500000 -0.570000 -0.060900 0.480000 -0.800000 0.328000 --0.452200 -0.552300 -0.121900 0.864000 0.184000 0.464000 --0.500000 -0.589900 -0.121900 0.408000 -0.832000 0.352000 --0.450000 -0.552300 -0.127200 0.616000 -0.144000 0.768000 --0.500000 -0.602500 -0.155300 0.000000 -0.920000 0.376000 --0.450000 -0.558900 -0.121900 0.808000 0.320000 0.488000 --0.474100 -0.602500 -0.121900 -0.520000 -0.712000 0.456000 --0.450000 -0.602500 -0.084100 -0.232000 -0.736000 0.624000 --0.450000 -0.612400 -0.121900 0.032000 -0.944000 0.312000 --0.410500 -0.602500 -0.121900 0.456000 -0.632000 0.616000 --0.450000 -0.629600 -0.182900 -0.344000 -0.872000 0.320000 --0.400000 -0.602500 -0.131300 0.560000 -0.576000 0.584000 --0.400000 -0.651500 -0.182900 -0.552000 -0.472000 0.672000 --0.386500 -0.602500 -0.182900 0.376000 -0.032000 0.920000 --0.400000 -0.652700 -0.184800 -0.640000 -0.536000 0.536000 --0.350000 -0.647900 -0.182900 0.008000 0.768000 0.624000 --0.396000 -0.652700 -0.182900 -0.176000 0.000000 0.984000 --0.350000 -0.652700 -0.168800 -0.864000 0.056000 0.488000 --0.350700 -0.703000 -0.182900 -0.792000 -0.176000 0.576000 --0.350000 -0.703000 -0.180700 -0.616000 -0.504000 0.592000 --0.350000 -0.704300 -0.182900 -0.112000 -0.808000 0.576000 --0.300000 -0.703000 -0.173800 0.616000 -0.544000 0.552000 --0.300000 -0.708000 -0.182900 0.360000 -0.768000 0.520000 --0.293800 -0.703000 -0.182900 0.608000 -0.624000 0.488000 --0.300000 -0.736500 -0.243900 0.320000 -0.832000 0.440000 --0.256000 -0.703000 -0.243900 0.696000 -0.392000 0.584000 --0.300000 -0.753200 -0.286100 0.088000 -0.928000 0.352000 --0.250000 -0.703000 -0.252700 0.704000 -0.368000 0.600000 --0.281500 -0.753200 -0.304800 0.312000 -0.920000 -0.216000 --0.250000 -0.737300 -0.304800 0.568000 -0.808000 -0.112000 --0.300000 -0.753200 -0.317300 0.136000 -0.840000 -0.512000 --0.250000 -0.703000 -0.346500 0.432000 -0.280000 -0.848000 --0.300000 -0.703000 -0.365100 0.056000 -0.232000 -0.968000 --0.250000 -0.652700 -0.361600 0.240000 -0.216000 -0.944000 --0.300000 -0.687100 -0.365800 0.104000 -0.048000 -0.992000 --0.282800 -0.652700 -0.365800 0.080000 -0.160000 -0.976000 --0.300000 -0.652700 -0.367500 0.064000 -0.112000 -0.984000 --0.300000 -0.687100 -0.365800 0.104000 -0.048000 -0.992000 --0.350000 -0.652700 -0.376000 0.560000 0.160000 -0.808000 --0.350000 -0.679200 -0.365800 -0.072000 -0.176000 -0.976000 --0.400000 -0.652700 -0.368100 -0.128000 -0.872000 -0.456000 --0.400000 -0.653700 -0.365800 -0.176000 -0.888000 -0.416000 --0.405700 -0.652700 -0.365800 -0.144000 -0.920000 -0.344000 --0.400000 -0.672200 -0.304800 -0.400000 -0.904000 -0.128000 --0.450000 -0.652700 -0.319500 -0.256000 -0.952000 -0.136000 --0.450000 -0.654300 -0.304800 -0.272000 -0.952000 0.040000 --0.455200 -0.652700 -0.304800 -0.280000 -0.952000 0.040000 --0.450000 -0.652700 -0.293400 -0.288000 -0.936000 0.160000 --0.500000 -0.637800 -0.304800 -0.208000 -0.976000 -0.032000 --0.450000 -0.644000 -0.243900 -0.352000 -0.912000 0.200000 --0.500000 -0.625200 -0.243900 -0.096000 -0.960000 0.240000 --0.450000 -0.629600 -0.182900 -0.344000 -0.872000 0.320000 --0.500000 -0.610400 -0.182900 -0.136000 -0.936000 0.304000 --0.450000 -0.612400 -0.121900 0.032000 -0.944000 0.312000 --0.500000 -0.602500 -0.155300 0.000000 -0.920000 0.376000 --0.474100 -0.602500 -0.121900 -0.520000 -0.712000 0.456000 --0.474100 -0.602500 -0.121900 -0.520000 -0.712000 0.456000 --0.350000 0.148000 -0.060900 -0.504000 0.552000 0.656000 --0.350000 0.148000 -0.060900 -0.504000 0.552000 0.656000 --0.350000 0.100400 -0.017600 -0.744000 0.352000 0.552000 --0.361800 0.100400 -0.060900 -0.920000 0.112000 -0.352000 --0.350000 0.077100 0.000000 -0.776000 0.256000 0.568000 --0.358600 0.050200 -0.060900 -0.920000 0.168000 -0.328000 --0.355100 0.050200 0.000000 -0.872000 0.216000 0.416000 --0.355100 0.050200 0.000000 -0.872000 0.216000 0.416000 --0.307400 0.401700 -0.060900 -0.696000 0.688000 -0.152000 --0.307400 0.401700 -0.060900 -0.696000 0.688000 -0.152000 --0.300000 0.408800 -0.060900 -0.664000 0.712000 -0.184000 --0.300000 0.401700 -0.053800 -0.512000 0.520000 0.672000 --0.250000 0.447500 -0.060900 -0.512000 0.744000 0.408000 --0.250000 0.401700 -0.023000 -0.400000 -0.016000 0.912000 --0.242600 0.451900 -0.060900 -0.440000 0.728000 0.512000 --0.208400 0.401700 0.000000 -0.424000 0.248000 0.864000 --0.200000 0.451900 -0.034900 -0.360000 0.584000 0.720000 --0.200000 0.408700 0.000000 -0.112000 0.496000 0.856000 --0.150000 0.451900 -0.004000 -0.136000 0.584000 0.792000 --0.185900 0.401700 0.000000 0.264000 0.248000 0.928000 --0.150000 0.401700 -0.011900 0.240000 0.256000 0.928000 --0.150000 0.451900 -0.004000 -0.136000 0.584000 0.792000 --0.100000 0.401700 -0.042400 0.232000 -0.088000 0.960000 --0.100000 0.451900 -0.019200 0.136000 0.056000 0.984000 --0.050000 0.401700 -0.052300 0.176000 0.040000 0.976000 --0.050000 0.451900 -0.049700 0.432000 0.024000 0.896000 --0.100000 0.451900 -0.019200 0.136000 0.056000 0.984000 --0.050000 0.502100 -0.046900 0.400000 0.496000 0.760000 --0.100000 0.502100 -0.041900 -0.080000 0.528000 0.840000 --0.050000 0.515300 -0.060900 0.432000 0.792000 0.408000 --0.100000 0.517800 -0.060900 -0.120000 0.976000 0.136000 --0.100000 0.502100 -0.041900 -0.080000 0.528000 0.840000 --0.146800 0.502100 -0.060900 -0.272000 0.960000 0.016000 --0.100000 0.451900 -0.019200 0.136000 0.056000 0.984000 --0.150000 0.501300 -0.060900 -0.376000 0.880000 -0.280000 --0.150000 0.451900 -0.004000 -0.136000 0.584000 0.792000 --0.200000 0.477600 -0.060900 -0.544000 0.808000 -0.208000 --0.200000 0.451900 -0.034900 -0.360000 0.584000 0.720000 --0.242600 0.451900 -0.060900 -0.440000 0.728000 0.512000 --0.200000 0.477600 -0.060900 -0.544000 0.808000 -0.208000 --0.200000 0.451900 -0.081300 -0.400000 0.504000 -0.752000 --0.200000 0.451900 -0.081300 -0.400000 0.504000 -0.752000 --0.321000 0.100400 0.000000 -0.264000 0.416000 0.864000 --0.321000 0.100400 0.000000 -0.264000 0.416000 0.864000 --0.350000 0.077100 0.000000 -0.776000 0.256000 0.568000 --0.350000 0.100400 -0.017600 -0.744000 0.352000 0.552000 --0.350000 0.100400 -0.017600 -0.744000 0.352000 0.552000 --0.250000 0.351500 -0.004200 0.040000 0.000000 0.992000 --0.250000 0.351500 -0.004200 0.040000 0.000000 0.992000 --0.300000 0.351500 -0.024700 -0.384000 0.216000 0.896000 --0.250000 0.301200 -0.005700 0.112000 -0.104000 0.984000 --0.300000 0.301200 -0.020200 -0.184000 0.032000 0.976000 --0.250000 0.251000 -0.029400 0.176000 -0.456000 0.864000 --0.300000 0.251000 -0.020200 0.208000 -0.160000 0.960000 --0.250000 0.219300 -0.060900 0.304000 -0.640000 0.696000 --0.300000 0.200800 -0.040500 0.440000 0.208000 0.864000 --0.277600 0.200800 -0.060900 0.584000 -0.072000 0.800000 --0.250000 0.219300 -0.060900 0.304000 -0.640000 0.696000 --0.250000 0.200800 -0.094600 -0.184000 -0.064000 0.976000 --0.200000 0.206100 -0.060900 -0.448000 -0.184000 0.872000 --0.200000 0.200800 -0.062300 -0.304000 0.376000 0.864000 --0.198000 0.200800 -0.060900 -0.464000 0.288000 0.832000 --0.200000 0.199100 -0.060900 -0.320000 0.504000 0.792000 --0.200000 0.200800 -0.062300 -0.304000 0.376000 0.864000 --0.250000 0.177000 -0.060900 -0.096000 0.568000 0.808000 --0.250000 0.200800 -0.094600 -0.184000 -0.064000 0.976000 --0.277600 0.200800 -0.060900 0.584000 -0.072000 0.800000 --0.277600 0.200800 -0.060900 0.584000 -0.072000 0.800000 --0.250000 -0.351500 -0.038300 0.104000 -0.504000 0.848000 --0.250000 -0.351500 -0.038300 0.104000 -0.504000 0.848000 --0.300000 -0.351500 -0.012600 0.872000 -0.352000 0.320000 --0.250000 -0.401700 -0.058800 -0.096000 -0.136000 0.984000 --0.300000 -0.401700 -0.045100 0.792000 -0.248000 0.544000 --0.250000 -0.451900 -0.040500 -0.352000 -0.008000 0.928000 --0.300000 -0.435300 -0.060900 -0.192000 -0.360000 0.912000 --0.287100 -0.451900 -0.060900 -0.448000 -0.328000 0.824000 --0.300000 -0.451900 -0.070300 -0.328000 -0.392000 0.856000 --0.279200 -0.502100 -0.060900 -0.688000 -0.328000 0.640000 --0.300000 -0.502100 -0.097100 -0.592000 -0.576000 0.560000 --0.250000 -0.533000 -0.060900 -0.336000 -0.760000 0.544000 --0.300000 -0.516400 -0.121900 -0.256000 -0.872000 0.400000 --0.250000 -0.552300 -0.101500 -0.080000 -0.904000 0.400000 --0.260200 -0.552300 -0.121900 -0.560000 -0.752000 0.336000 --0.250000 -0.559400 -0.121900 -0.088000 -0.912000 0.384000 --0.285200 -0.552300 -0.182900 -0.616000 -0.680000 0.384000 --0.250000 -0.581300 -0.182900 -0.104000 -0.888000 0.440000 --0.300000 -0.552300 -0.209900 -0.624000 -0.616000 0.456000 --0.250000 -0.602500 -0.226600 0.288000 -0.512000 0.800000 --0.300000 -0.594300 -0.243900 -0.424000 -0.464000 0.768000 --0.286800 -0.602500 -0.243900 -0.320000 0.232000 0.912000 --0.300000 -0.602500 -0.250000 -0.408000 0.368000 0.824000 --0.300000 -0.607200 -0.243900 -0.248000 0.672000 0.688000 --0.344900 -0.602500 -0.304800 -0.744000 0.664000 -0.032000 --0.350000 -0.630200 -0.243900 -0.144000 0.776000 0.600000 --0.350000 -0.605300 -0.304800 0.248000 0.960000 -0.032000 --0.371400 -0.602500 -0.243900 0.928000 0.016000 0.352000 --0.351600 -0.602500 -0.304800 0.944000 0.304000 0.024000 --0.363900 -0.552300 -0.243900 0.816000 -0.480000 0.304000 --0.350000 -0.594300 -0.304800 0.520000 -0.800000 0.280000 --0.350000 -0.552300 -0.283400 -0.096000 -0.680000 0.720000 --0.344900 -0.602500 -0.304800 -0.744000 0.664000 -0.032000 --0.317500 -0.552300 -0.243900 -0.600000 -0.648000 0.448000 --0.300000 -0.602500 -0.250000 -0.408000 0.368000 0.824000 --0.300000 -0.594300 -0.243900 -0.424000 -0.464000 0.768000 --0.317500 -0.552300 -0.243900 -0.600000 -0.648000 0.448000 --0.300000 -0.552300 -0.209900 -0.624000 -0.616000 0.456000 --0.350000 -0.535600 -0.243900 0.360000 -0.840000 0.384000 --0.300000 -0.538300 -0.182900 -0.584000 -0.696000 0.408000 --0.350000 -0.518400 -0.182900 -0.088000 -0.928000 0.360000 --0.300000 -0.516400 -0.121900 -0.256000 -0.872000 0.400000 --0.350000 -0.503000 -0.121900 0.232000 -0.880000 0.400000 --0.300000 -0.502100 -0.097100 -0.592000 -0.576000 0.560000 --0.350000 -0.502100 -0.119400 0.240000 -0.864000 0.424000 --0.300000 -0.451900 -0.070300 -0.328000 -0.392000 0.856000 --0.350000 -0.453900 -0.060900 0.248000 -0.624000 0.728000 --0.338500 -0.451900 -0.060900 0.112000 -0.632000 0.760000 --0.300000 -0.451900 -0.070300 -0.328000 -0.392000 0.856000 --0.300000 -0.435300 -0.060900 -0.192000 -0.360000 0.912000 --0.300000 -0.435300 -0.060900 -0.192000 -0.360000 0.912000 --0.287100 -0.451900 -0.060900 -0.448000 -0.328000 0.824000 --0.287100 -0.451900 -0.060900 -0.448000 -0.328000 0.824000 --0.279200 -0.502100 -0.060900 -0.688000 -0.328000 0.640000 --0.250000 -0.451900 -0.040500 -0.352000 -0.008000 0.928000 --0.250000 -0.502100 -0.016400 -0.320000 -0.344000 0.872000 --0.200000 -0.451900 -0.018000 0.376000 -0.112000 0.912000 --0.200000 -0.502100 -0.039000 0.512000 -0.608000 0.592000 --0.250000 -0.502100 -0.016400 -0.320000 -0.344000 0.872000 --0.200000 -0.511900 -0.060900 0.416000 -0.800000 0.424000 --0.250000 -0.533000 -0.060900 -0.336000 -0.760000 0.544000 --0.200000 -0.534300 -0.121900 0.456000 -0.832000 0.296000 --0.250000 -0.552300 -0.101500 -0.080000 -0.904000 0.400000 --0.235800 -0.552300 -0.121900 0.448000 -0.816000 0.336000 --0.250000 -0.559400 -0.121900 -0.088000 -0.912000 0.384000 --0.204600 -0.552300 -0.182900 0.504000 -0.776000 0.360000 --0.250000 -0.581300 -0.182900 -0.104000 -0.888000 0.440000 --0.200000 -0.552300 -0.190900 0.520000 -0.768000 0.360000 --0.250000 -0.602500 -0.226600 0.288000 -0.512000 0.800000 --0.200000 -0.579600 -0.243900 0.568000 -0.648000 0.496000 --0.233200 -0.602500 -0.243900 0.608000 -0.320000 0.720000 --0.200000 -0.602500 -0.268600 0.488000 -0.432000 0.752000 --0.241600 -0.652700 -0.243900 0.680000 -0.216000 0.688000 --0.200000 -0.652700 -0.286600 0.488000 -0.272000 0.824000 --0.250000 -0.679700 -0.243900 0.728000 -0.208000 0.640000 --0.200000 -0.693500 -0.304800 0.872000 -0.464000 -0.120000 --0.250000 -0.703000 -0.252700 0.704000 -0.368000 0.600000 --0.204300 -0.703000 -0.304800 0.856000 -0.496000 -0.088000 --0.250000 -0.737300 -0.304800 0.568000 -0.808000 -0.112000 --0.250000 -0.703000 -0.346500 0.432000 -0.280000 -0.848000 --0.204300 -0.703000 -0.304800 0.856000 -0.496000 -0.088000 --0.250000 -0.652700 -0.361600 0.240000 -0.216000 -0.944000 --0.200000 -0.693500 -0.304800 0.872000 -0.464000 -0.120000 --0.200000 -0.652700 -0.326500 0.488000 -0.272000 -0.824000 --0.171500 -0.652700 -0.304800 0.576000 -0.304000 0.752000 --0.200000 -0.693500 -0.304800 0.872000 -0.464000 -0.120000 --0.200000 -0.652700 -0.286600 0.488000 -0.272000 0.824000 --0.200000 -0.652700 -0.286600 0.488000 -0.272000 0.824000 --0.279200 -0.502100 -0.060900 -0.688000 -0.328000 0.640000 --0.279200 -0.502100 -0.060900 -0.688000 -0.328000 0.640000 --0.250000 -0.502100 -0.016400 -0.320000 -0.344000 0.872000 --0.250000 -0.533000 -0.060900 -0.336000 -0.760000 0.544000 --0.250000 -0.533000 -0.060900 -0.336000 -0.760000 0.544000 --0.200000 0.351500 -0.009600 0.208000 -0.208000 0.952000 --0.200000 0.351500 -0.009600 0.208000 -0.208000 0.952000 --0.250000 0.351500 -0.004200 0.040000 0.000000 0.992000 --0.200000 0.301200 -0.022600 0.056000 -0.176000 0.976000 --0.250000 0.301200 -0.005700 0.112000 -0.104000 0.984000 --0.200000 0.251000 -0.048300 -0.120000 -0.296000 0.944000 --0.250000 0.251000 -0.029400 0.176000 -0.456000 0.864000 --0.200000 0.206100 -0.060900 -0.448000 -0.184000 0.872000 --0.250000 0.219300 -0.060900 0.304000 -0.640000 0.696000 --0.250000 0.219300 -0.060900 0.304000 -0.640000 0.696000 --0.200000 -0.351500 -0.031500 -0.320000 -0.128000 0.936000 --0.200000 -0.351500 -0.031500 -0.320000 -0.128000 0.936000 --0.250000 -0.351500 -0.038300 0.104000 -0.504000 0.848000 --0.200000 -0.401700 -0.023400 -0.056000 -0.008000 0.992000 --0.250000 -0.401700 -0.058800 -0.096000 -0.136000 0.984000 --0.200000 -0.451900 -0.018000 0.376000 -0.112000 0.912000 --0.250000 -0.451900 -0.040500 -0.352000 -0.008000 0.928000 --0.250000 -0.451900 -0.040500 -0.352000 -0.008000 0.928000 --0.200000 0.150600 -0.023100 -0.360000 0.472000 0.792000 --0.200000 0.150600 -0.023100 -0.360000 0.472000 0.792000 --0.200000 0.100400 -0.008800 0.176000 0.488000 0.848000 --0.150000 0.150600 -0.037800 0.256000 -0.016000 0.960000 --0.150000 0.100400 -0.027500 0.432000 0.296000 0.848000 --0.114400 0.150600 -0.060900 0.520000 -0.344000 0.776000 --0.122500 0.100400 -0.060900 0.768000 -0.048000 0.624000 --0.100000 0.150600 -0.075000 0.592000 -0.416000 0.688000 --0.100000 0.100400 -0.099400 0.760000 -0.264000 0.584000 --0.067900 0.150600 -0.121900 0.736000 -0.432000 0.504000 --0.089100 0.100400 -0.121900 0.816000 -0.232000 0.520000 --0.050000 0.150600 -0.159500 0.712000 -0.480000 0.504000 --0.053800 0.100400 -0.182900 0.984000 -0.072000 0.112000 --0.050000 0.116900 -0.182900 0.944000 -0.304000 0.048000 --0.051400 0.100400 -0.243900 0.776000 0.216000 -0.576000 --0.050000 0.150600 -0.210200 0.840000 -0.208000 -0.496000 --0.077600 0.150600 -0.243900 0.320000 0.328000 -0.880000 --0.051400 0.100400 -0.243900 0.776000 0.216000 -0.576000 --0.100000 0.150600 -0.251000 -0.024000 0.408000 -0.904000 --0.100000 0.100400 -0.276400 0.032000 0.376000 -0.920000 --0.126800 0.150600 -0.243900 -0.208000 0.496000 -0.832000 --0.150000 0.100400 -0.267100 -0.312000 0.440000 -0.832000 --0.150000 0.141700 -0.243900 -0.352000 0.528000 -0.768000 --0.198500 0.100400 -0.243900 -0.376000 0.480000 -0.784000 --0.150000 0.100400 -0.267100 -0.312000 0.440000 -0.832000 --0.200000 0.099300 -0.243900 -0.456000 0.488000 -0.736000 --0.150000 0.050200 -0.299600 -0.080000 0.408000 -0.904000 --0.200000 0.050200 -0.277000 -0.312000 0.416000 -0.848000 --0.150000 0.040500 -0.304800 -0.136000 0.416000 -0.896000 --0.200000 0.008900 -0.304800 -0.304000 0.456000 -0.832000 --0.150000 0.000000 -0.322200 0.064000 0.240000 -0.968000 --0.200000 0.000000 -0.310700 -0.288000 0.424000 -0.848000 --0.150000 -0.050200 -0.328000 0.128000 0.064000 -0.984000 --0.200000 -0.050200 -0.330400 -0.144000 0.264000 -0.944000 --0.150000 -0.100400 -0.338700 0.056000 -0.088000 -0.992000 --0.200000 -0.100400 -0.330100 -0.024000 -0.008000 -0.992000 --0.150000 -0.150600 -0.309500 -0.032000 -0.400000 -0.912000 --0.200000 -0.150600 -0.333300 0.216000 -0.272000 -0.936000 --0.200000 -0.100400 -0.330100 -0.024000 -0.008000 -0.992000 --0.250000 -0.150600 -0.327500 -0.120000 0.152000 -0.976000 --0.250000 -0.100400 -0.327300 -0.384000 0.152000 -0.904000 --0.200000 -0.100400 -0.330100 -0.024000 -0.008000 -0.992000 --0.250000 -0.050200 -0.318700 -0.440000 0.320000 -0.832000 --0.200000 -0.050200 -0.330400 -0.144000 0.264000 -0.944000 --0.250000 -0.028200 -0.304800 -0.400000 0.416000 -0.808000 --0.200000 0.000000 -0.310700 -0.288000 0.424000 -0.848000 --0.213400 0.000000 -0.304800 -0.304000 0.448000 -0.832000 --0.200000 0.008900 -0.304800 -0.304000 0.456000 -0.832000 --0.250000 0.000000 -0.286200 -0.320000 0.712000 -0.616000 --0.200000 0.050200 -0.277000 -0.312000 0.416000 -0.848000 --0.250000 0.050200 -0.254100 -0.584000 0.656000 -0.464000 --0.200000 0.099300 -0.243900 -0.456000 0.488000 -0.736000 --0.250000 0.055800 -0.243900 -0.560000 0.648000 -0.504000 --0.250000 0.050200 -0.254100 -0.584000 0.656000 -0.464000 --0.256300 0.050200 -0.243900 -0.592000 0.624000 -0.488000 --0.256300 0.050200 -0.243900 -0.592000 0.624000 -0.488000 --0.200000 -0.502100 -0.039000 0.512000 -0.608000 0.592000 --0.200000 -0.502100 -0.039000 0.512000 -0.608000 0.592000 --0.181900 -0.502100 -0.060900 0.504000 -0.680000 0.520000 --0.200000 -0.511900 -0.060900 0.416000 -0.800000 0.424000 --0.200000 -0.511900 -0.060900 0.416000 -0.800000 0.424000 --0.100000 0.401700 -0.042400 0.232000 -0.088000 0.960000 --0.100000 0.401700 -0.042400 0.232000 -0.088000 0.960000 --0.150000 0.401700 -0.011900 0.240000 0.256000 0.928000 --0.100000 0.351500 -0.035500 0.120000 0.000000 0.992000 --0.150000 0.351500 -0.029900 0.096000 -0.168000 0.976000 --0.100000 0.301200 -0.032000 0.168000 0.008000 0.984000 --0.150000 0.301200 -0.033800 0.040000 -0.024000 0.992000 --0.100000 0.251000 -0.029400 0.344000 -0.104000 0.928000 --0.150000 0.251000 -0.027500 -0.136000 -0.104000 0.984000 --0.100000 0.200800 -0.041900 0.456000 -0.304000 0.832000 --0.150000 0.200800 -0.027500 -0.320000 -0.168000 0.928000 --0.100000 0.167200 -0.060900 0.520000 -0.424000 0.736000 --0.150000 0.150600 -0.037800 0.256000 -0.016000 0.960000 --0.114400 0.150600 -0.060900 0.520000 -0.344000 0.776000 --0.100000 0.167200 -0.060900 0.520000 -0.424000 0.736000 --0.100000 0.150600 -0.075000 0.592000 -0.416000 0.688000 --0.078700 0.200800 -0.060900 0.568000 -0.416000 0.704000 --0.067900 0.150600 -0.121900 0.736000 -0.432000 0.504000 --0.050000 0.200800 -0.090500 0.520000 -0.520000 0.672000 --0.050000 0.170300 -0.121900 0.584000 -0.576000 0.560000 --0.067900 0.150600 -0.121900 0.736000 -0.432000 0.504000 --0.050000 0.150600 -0.159500 0.712000 -0.480000 0.504000 --0.050000 0.150600 -0.159500 0.712000 -0.480000 0.504000 --0.150000 0.100400 -0.027500 0.432000 0.296000 0.848000 --0.150000 0.100400 -0.027500 0.432000 0.296000 0.848000 --0.150000 0.050200 -0.012600 0.624000 0.240000 0.728000 --0.122500 0.100400 -0.060900 0.768000 -0.048000 0.624000 --0.123500 0.050200 -0.060900 0.888000 -0.104000 0.440000 --0.100000 0.100400 -0.099400 0.760000 -0.264000 0.584000 --0.100700 0.050200 -0.121900 0.856000 0.048000 0.504000 --0.100000 0.054100 -0.121900 0.816000 -0.176000 0.544000 --0.100000 0.050200 -0.123300 0.696000 -0.176000 0.688000 --0.089100 0.100400 -0.121900 0.816000 -0.232000 0.520000 --0.051100 0.050200 -0.182900 0.712000 0.184000 0.664000 --0.053800 0.100400 -0.182900 0.984000 -0.072000 0.112000 --0.050000 0.050200 -0.189300 0.800000 0.488000 0.336000 --0.051400 0.100400 -0.243900 0.776000 0.216000 -0.576000 --0.050000 0.095100 -0.243900 0.808000 0.256000 -0.520000 --0.100000 0.100400 -0.276400 0.032000 0.376000 -0.920000 --0.050000 0.050200 -0.257500 0.608000 0.208000 -0.760000 --0.100000 0.050200 -0.292200 0.304000 0.312000 -0.896000 --0.050000 0.000000 -0.288000 0.256000 0.560000 -0.776000 --0.100000 0.022400 -0.304800 0.184000 0.304000 -0.928000 --0.077600 0.000000 -0.304800 0.248000 0.344000 -0.896000 --0.100000 0.000000 -0.309600 0.168000 0.152000 -0.968000 --0.050000 -0.015100 -0.304800 0.280000 0.536000 -0.784000 --0.100000 -0.050200 -0.318600 0.080000 0.144000 -0.984000 --0.050000 -0.050200 -0.321000 0.120000 0.280000 -0.944000 --0.100000 -0.100400 -0.323700 -0.040000 -0.152000 -0.984000 --0.050000 -0.100400 -0.342800 0.056000 -0.032000 -0.992000 --0.100000 -0.150600 -0.315000 -0.456000 -0.064000 -0.880000 --0.050000 -0.150600 -0.332400 0.016000 -0.080000 -0.992000 --0.050000 -0.100400 -0.342800 0.056000 -0.032000 -0.992000 -0.000000 -0.150600 -0.318000 0.160000 0.016000 -0.984000 -0.000000 -0.100400 -0.336000 0.328000 -0.184000 -0.920000 -0.050000 -0.150600 -0.318000 0.352000 0.312000 -0.872000 -0.039400 -0.100400 -0.304800 0.408000 0.224000 -0.880000 -0.050000 -0.119800 -0.304800 0.416000 0.264000 -0.864000 -0.050000 -0.100400 -0.298100 0.360000 0.248000 -0.896000 -0.096000 -0.150600 -0.304800 0.176000 0.336000 -0.920000 -0.100000 -0.100400 -0.298900 0.040000 0.136000 -0.984000 -0.100000 -0.150600 -0.303900 -0.176000 0.088000 -0.976000 -0.114400 -0.100400 -0.304800 -0.344000 0.128000 -0.928000 -0.101900 -0.150600 -0.304800 -0.296000 0.368000 -0.872000 -0.100000 -0.150600 -0.303900 -0.176000 0.088000 -0.976000 -0.100000 -0.151600 -0.304800 -0.176000 0.536000 -0.816000 -0.096000 -0.150600 -0.304800 0.176000 0.336000 -0.920000 -0.096000 -0.150600 -0.304800 0.176000 0.336000 -0.920000 --0.150000 0.050200 -0.012600 0.624000 0.240000 0.728000 --0.150000 0.050200 -0.012600 0.624000 0.240000 0.728000 --0.150000 0.000000 -0.001200 0.744000 0.064000 0.656000 --0.123500 0.050200 -0.060900 0.888000 -0.104000 0.440000 --0.120900 0.000000 -0.060900 0.800000 0.080000 0.592000 --0.100700 0.050200 -0.121900 0.856000 0.048000 0.504000 --0.100000 0.000000 -0.110200 0.808000 0.176000 0.552000 --0.100000 0.044900 -0.121900 0.816000 0.112000 0.552000 --0.089600 0.000000 -0.121900 0.568000 0.512000 0.632000 --0.100000 0.050200 -0.123300 0.696000 -0.176000 0.688000 --0.050000 0.000000 -0.158900 0.584000 0.336000 0.728000 --0.051100 0.050200 -0.182900 0.712000 0.184000 0.664000 --0.050000 0.047900 -0.182900 0.488000 0.480000 0.720000 --0.050000 0.050200 -0.189300 0.800000 0.488000 0.336000 -0.000000 0.039200 -0.182900 0.256000 0.544000 0.792000 -0.000000 0.050200 -0.198900 0.168000 0.840000 0.504000 -0.050000 0.005700 -0.182900 0.312000 0.584000 0.744000 -0.046000 0.050200 -0.243900 0.728000 0.480000 -0.472000 -0.050000 0.042300 -0.243900 0.688000 0.376000 -0.616000 -0.000000 0.050200 -0.275900 0.288000 0.416000 -0.856000 -0.050000 0.000000 -0.258500 0.448000 0.256000 -0.848000 -0.000000 0.000000 -0.289100 0.520000 0.272000 -0.800000 -0.050000 -0.050200 -0.279200 0.280000 0.320000 -0.896000 -0.000000 -0.038700 -0.304800 0.368000 0.192000 -0.904000 -0.004800 -0.050200 -0.304800 0.368000 0.176000 -0.904000 -0.000000 -0.050200 -0.306900 0.320000 0.152000 -0.928000 -0.039400 -0.100400 -0.304800 0.408000 0.224000 -0.880000 -0.000000 -0.100400 -0.336000 0.328000 -0.184000 -0.920000 -0.000000 -0.050200 -0.306900 0.320000 0.152000 -0.928000 --0.050000 -0.100400 -0.342800 0.056000 -0.032000 -0.992000 --0.050000 -0.050200 -0.321000 0.120000 0.280000 -0.944000 -0.000000 -0.050200 -0.306900 0.320000 0.152000 -0.928000 --0.050000 -0.015100 -0.304800 0.280000 0.536000 -0.784000 -0.000000 -0.038700 -0.304800 0.368000 0.192000 -0.904000 --0.050000 0.000000 -0.288000 0.256000 0.560000 -0.776000 -0.000000 0.000000 -0.289100 0.520000 0.272000 -0.800000 --0.050000 0.050200 -0.257500 0.608000 0.208000 -0.760000 -0.000000 0.050200 -0.275900 0.288000 0.416000 -0.856000 --0.050000 0.095100 -0.243900 0.808000 0.256000 -0.520000 -0.000000 0.087200 -0.243900 0.456000 0.816000 -0.344000 --0.050000 0.050200 -0.189300 0.800000 0.488000 0.336000 -0.000000 0.050200 -0.198900 0.168000 0.840000 0.504000 -0.000000 0.087200 -0.243900 0.456000 0.816000 -0.344000 -0.046000 0.050200 -0.243900 0.728000 0.480000 -0.472000 -0.000000 0.050200 -0.275900 0.288000 0.416000 -0.856000 -0.000000 0.050200 -0.275900 0.288000 0.416000 -0.856000 --0.150000 0.000000 -0.001200 0.744000 0.064000 0.656000 --0.150000 0.000000 -0.001200 0.744000 0.064000 0.656000 --0.150000 -0.050200 -0.005700 0.768000 -0.024000 0.632000 --0.120900 0.000000 -0.060900 0.800000 0.080000 0.592000 --0.114700 -0.050200 -0.060900 0.632000 0.112000 0.760000 --0.100000 0.000000 -0.110200 0.808000 0.176000 0.552000 --0.100000 -0.050200 -0.077100 0.584000 0.232000 0.768000 --0.089600 0.000000 -0.121900 0.568000 0.512000 0.632000 --0.050000 -0.050200 -0.098600 0.240000 0.488000 0.832000 --0.050000 -0.024600 -0.121900 0.296000 0.656000 0.688000 -0.000000 -0.050200 -0.114000 0.064000 0.408000 0.904000 -0.000000 -0.035500 -0.121900 0.072000 0.496000 0.856000 -0.050000 -0.050200 -0.115700 0.016000 0.416000 0.904000 -0.050000 -0.038600 -0.121900 0.000000 0.528000 0.840000 -0.100000 -0.050200 -0.113200 -0.016000 0.464000 0.880000 -0.100000 -0.037100 -0.121900 -0.016000 0.544000 0.832000 -0.150000 -0.050200 -0.113700 0.032000 0.448000 0.888000 -0.150000 -0.036300 -0.121900 0.008000 0.488000 0.864000 -0.100000 -0.037100 -0.121900 -0.016000 0.544000 0.832000 -0.150000 0.000000 -0.166100 -0.096000 0.688000 0.712000 -0.100000 0.000000 -0.179900 0.000000 0.528000 0.840000 -0.150000 0.016800 -0.182900 -0.152000 0.840000 0.520000 -0.100000 0.004900 -0.182900 -0.288000 0.864000 0.400000 -0.150000 0.015400 -0.243900 -0.208000 0.728000 -0.640000 -0.100000 0.000000 -0.203800 -0.256000 0.936000 -0.224000 -0.113100 0.000000 -0.243900 -0.392000 0.768000 -0.496000 -0.100000 -0.005500 -0.243900 -0.184000 0.760000 -0.616000 -0.150000 0.000000 -0.257100 -0.208000 0.552000 -0.800000 -0.100000 -0.050200 -0.272200 -0.136000 0.384000 -0.904000 -0.150000 -0.050200 -0.298400 -0.176000 0.328000 -0.920000 -0.100000 -0.100400 -0.298900 0.040000 0.136000 -0.984000 -0.150000 -0.064700 -0.304800 -0.200000 0.328000 -0.912000 -0.114400 -0.100400 -0.304800 -0.344000 0.128000 -0.928000 -0.114400 -0.100400 -0.304800 -0.344000 0.128000 -0.928000 --0.150000 -0.050200 -0.005700 0.768000 -0.024000 0.632000 --0.150000 -0.050200 -0.005700 0.768000 -0.024000 0.632000 --0.150000 -0.100400 -0.001300 0.848000 0.032000 0.520000 --0.114700 -0.050200 -0.060900 0.632000 0.112000 0.760000 --0.104300 -0.100400 -0.060900 0.528000 0.416000 0.728000 --0.100000 -0.050200 -0.077100 0.584000 0.232000 0.768000 --0.100000 -0.100400 -0.064700 0.496000 0.416000 0.752000 --0.050000 -0.050200 -0.098600 0.240000 0.488000 0.832000 --0.050000 -0.100400 -0.073900 0.136000 0.480000 0.864000 -0.000000 -0.050200 -0.114000 0.064000 0.408000 0.904000 -0.000000 -0.100400 -0.085100 0.096000 0.456000 0.880000 -0.050000 -0.050200 -0.115700 0.016000 0.416000 0.904000 -0.050000 -0.100400 -0.083400 0.000000 0.440000 0.888000 -0.100000 -0.050200 -0.113200 -0.016000 0.464000 0.880000 -0.100000 -0.100400 -0.084200 0.032000 0.360000 0.928000 -0.150000 -0.050200 -0.113700 0.032000 0.448000 0.888000 -0.150000 -0.100400 -0.080500 0.184000 0.336000 0.920000 -0.100000 -0.100400 -0.084200 0.032000 0.360000 0.928000 -0.150000 -0.150600 -0.071000 0.136000 0.176000 0.968000 -0.100000 -0.150600 -0.068400 0.184000 0.416000 0.888000 -0.150000 -0.200800 -0.071800 0.312000 -0.208000 0.920000 -0.100000 -0.170000 -0.060900 0.256000 0.296000 0.912000 -0.130700 -0.200800 -0.060900 0.504000 0.008000 0.856000 -0.150000 -0.200800 -0.071800 0.312000 -0.208000 0.920000 -0.110300 -0.251000 -0.060900 0.504000 -0.760000 0.392000 -0.150000 -0.251000 -0.118100 0.224000 -0.792000 0.560000 -0.150000 -0.251000 -0.118100 0.224000 -0.792000 0.560000 --0.100000 -0.188700 0.000000 0.176000 0.408000 0.888000 --0.100000 -0.188700 0.000000 0.176000 0.408000 0.888000 --0.129500 -0.150600 0.000000 0.416000 0.264000 0.864000 --0.100000 -0.150600 -0.019000 0.512000 0.456000 0.720000 --0.100000 -0.150600 -0.019000 0.512000 0.456000 0.720000 --0.150000 -0.346200 0.000000 -0.392000 -0.160000 0.904000 --0.150000 -0.346200 0.000000 -0.392000 -0.160000 0.904000 --0.150000 -0.351500 -0.001100 -0.192000 -0.352000 0.912000 --0.100000 -0.344900 0.000000 0.072000 -0.528000 0.840000 --0.100000 -0.351500 -0.005700 0.248000 -0.576000 0.776000 --0.050000 -0.329200 0.000000 0.264000 -0.624000 0.720000 --0.050000 -0.351500 -0.027000 0.488000 -0.688000 0.528000 --0.100000 -0.351500 -0.005700 0.248000 -0.576000 0.776000 --0.050000 -0.370100 -0.060900 0.592000 -0.672000 0.424000 --0.100000 -0.401700 -0.044900 0.592000 -0.496000 0.624000 --0.087700 -0.401700 -0.060900 0.608000 -0.600000 0.504000 --0.100000 -0.415900 -0.060900 0.680000 -0.544000 0.480000 --0.054100 -0.401700 -0.121900 0.656000 -0.688000 0.280000 --0.100000 -0.451900 -0.117700 0.624000 -0.664000 0.392000 --0.098000 -0.451900 -0.121900 0.712000 -0.680000 0.120000 --0.100000 -0.453500 -0.121900 0.600000 -0.776000 0.168000 --0.098100 -0.451900 -0.182900 0.736000 -0.672000 0.032000 --0.100000 -0.453800 -0.182900 0.696000 -0.712000 0.024000 --0.094700 -0.451900 -0.243900 0.784000 -0.568000 0.216000 --0.100000 -0.458900 -0.243900 0.744000 -0.632000 0.192000 --0.061500 -0.451900 -0.304800 0.928000 -0.352000 0.088000 --0.100000 -0.502100 -0.283200 0.616000 -0.376000 0.680000 --0.074100 -0.502100 -0.304800 0.864000 -0.480000 0.112000 --0.100000 -0.549700 -0.304800 0.696000 -0.392000 0.592000 --0.100000 -0.502100 -0.325200 0.520000 -0.368000 -0.760000 --0.101500 -0.552300 -0.304800 0.552000 -0.392000 0.720000 --0.147100 -0.502100 -0.365800 0.472000 -0.192000 -0.848000 --0.150000 -0.552300 -0.337600 0.424000 -0.304000 -0.840000 --0.150000 -0.505900 -0.365800 0.272000 -0.320000 -0.904000 --0.196100 -0.552300 -0.365800 0.320000 -0.272000 -0.904000 --0.150000 -0.502100 -0.367300 0.088000 -0.320000 -0.936000 --0.200000 -0.552300 -0.367100 0.360000 -0.232000 -0.896000 --0.200000 -0.502100 -0.370700 0.184000 -0.352000 -0.912000 --0.200000 -0.502100 -0.370700 0.184000 -0.352000 -0.912000 --0.100000 -0.351500 -0.005700 0.248000 -0.576000 0.776000 --0.100000 -0.351500 -0.005700 0.248000 -0.576000 0.776000 --0.150000 -0.351500 -0.001100 -0.192000 -0.352000 0.912000 --0.100000 -0.401700 -0.044900 0.592000 -0.496000 0.624000 --0.150000 -0.401700 -0.019000 0.408000 -0.232000 0.880000 --0.100000 -0.415900 -0.060900 0.680000 -0.544000 0.480000 --0.150000 -0.451900 -0.041900 0.560000 -0.440000 0.696000 --0.133200 -0.451900 -0.060900 0.584000 -0.656000 0.464000 --0.150000 -0.470000 -0.060900 0.568000 -0.552000 0.600000 --0.100000 -0.451900 -0.117700 0.624000 -0.664000 0.392000 --0.150000 -0.502100 -0.111600 0.592000 -0.752000 0.280000 --0.100000 -0.453500 -0.121900 0.600000 -0.776000 0.168000 --0.146100 -0.502100 -0.121900 0.616000 -0.744000 0.232000 --0.100000 -0.453800 -0.182900 0.696000 -0.712000 0.024000 --0.141200 -0.502100 -0.182900 0.696000 -0.688000 0.184000 --0.100000 -0.458900 -0.243900 0.744000 -0.632000 0.192000 --0.125700 -0.502100 -0.243900 0.664000 -0.408000 0.624000 --0.100000 -0.502100 -0.283200 0.616000 -0.376000 0.680000 --0.150000 -0.530700 -0.243900 0.632000 -0.664000 0.392000 --0.100000 -0.549700 -0.304800 0.696000 -0.392000 0.592000 --0.150000 -0.552300 -0.270100 0.544000 -0.504000 0.656000 --0.101500 -0.552300 -0.304800 0.552000 -0.392000 0.720000 --0.150000 -0.602500 -0.302600 0.392000 -0.240000 0.880000 --0.145700 -0.602500 -0.304800 0.824000 -0.528000 0.192000 --0.150000 -0.609400 -0.304800 0.840000 -0.512000 0.152000 --0.150000 -0.602500 -0.307600 0.456000 -0.280000 -0.840000 --0.145700 -0.602500 -0.304800 0.824000 -0.528000 0.192000 --0.150000 -0.552300 -0.337600 0.424000 -0.304000 -0.840000 --0.101500 -0.552300 -0.304800 0.552000 -0.392000 0.720000 --0.101500 -0.552300 -0.304800 0.552000 -0.392000 0.720000 --0.050000 0.401700 -0.052300 0.176000 0.040000 0.976000 --0.050000 0.401700 -0.052300 0.176000 0.040000 0.976000 --0.100000 0.401700 -0.042400 0.232000 -0.088000 0.960000 --0.050000 0.351500 -0.043600 0.248000 0.032000 0.960000 --0.100000 0.351500 -0.035500 0.120000 0.000000 0.992000 --0.050000 0.301200 -0.044600 0.440000 -0.008000 0.896000 --0.100000 0.301200 -0.032000 0.168000 0.008000 0.984000 --0.050000 0.251000 -0.047300 0.528000 -0.360000 0.760000 --0.100000 0.251000 -0.029400 0.344000 -0.104000 0.928000 --0.050000 0.236000 -0.060900 0.536000 -0.496000 0.672000 --0.100000 0.200800 -0.041900 0.456000 -0.304000 0.832000 --0.078700 0.200800 -0.060900 0.568000 -0.416000 0.704000 --0.100000 0.167200 -0.060900 0.520000 -0.424000 0.736000 --0.100000 0.167200 -0.060900 0.520000 -0.424000 0.736000 --0.027600 0.301200 -0.060900 0.456000 -0.208000 0.856000 --0.027600 0.301200 -0.060900 0.456000 -0.208000 0.856000 --0.050000 0.301200 -0.044600 0.440000 -0.008000 0.896000 --0.035000 0.251000 -0.060900 0.512000 -0.448000 0.728000 --0.050000 0.251000 -0.047300 0.528000 -0.360000 0.760000 --0.050000 0.236000 -0.060900 0.536000 -0.496000 0.672000 --0.050000 0.236000 -0.060900 0.536000 -0.496000 0.672000 --0.002200 -0.301200 0.000000 0.384000 -0.648000 0.648000 --0.002200 -0.301200 0.000000 0.384000 -0.648000 0.648000 -0.000000 -0.299000 0.000000 0.440000 -0.464000 0.760000 -0.000000 -0.301200 -0.001900 0.408000 -0.704000 0.568000 -0.050000 -0.253500 0.000000 0.448000 -0.608000 0.648000 -0.032200 -0.301200 -0.060900 0.552000 -0.696000 0.448000 -0.050000 -0.286400 -0.060900 0.528000 -0.720000 0.440000 -0.050000 -0.301200 -0.085900 0.528000 -0.704000 0.464000 -0.050000 -0.301200 -0.085900 0.528000 -0.704000 0.464000 --0.050000 -0.351500 -0.027000 0.488000 -0.688000 0.528000 --0.050000 -0.351500 -0.027000 0.488000 -0.688000 0.528000 --0.029100 -0.351500 -0.060900 0.584000 -0.680000 0.424000 --0.050000 -0.370100 -0.060900 0.592000 -0.672000 0.424000 -0.000000 -0.351500 -0.112600 0.544000 -0.704000 0.448000 --0.050000 -0.398200 -0.121900 0.592000 -0.704000 0.368000 -0.000000 -0.356400 -0.121900 0.560000 -0.728000 0.384000 --0.050000 -0.389600 -0.182900 0.656000 -0.736000 -0.128000 -0.000000 -0.353400 -0.182900 0.520000 -0.832000 -0.160000 --0.050000 -0.380500 -0.243900 0.664000 -0.736000 -0.104000 -0.000000 -0.351500 -0.193300 0.504000 -0.832000 -0.176000 --0.013800 -0.351500 -0.243900 0.552000 -0.808000 -0.168000 -0.000000 -0.343100 -0.243900 0.464000 -0.864000 -0.160000 --0.026900 -0.351500 -0.304800 0.608000 -0.688000 -0.384000 -0.000000 -0.336000 -0.304800 0.392000 -0.872000 -0.264000 --0.050000 -0.351500 -0.336900 0.024000 -0.576000 -0.808000 -0.000000 -0.316900 -0.365800 0.224000 -0.832000 -0.496000 --0.050000 -0.309800 -0.365800 -0.336000 -0.416000 -0.840000 -0.000000 -0.301200 -0.413400 -0.392000 -0.192000 -0.896000 --0.050000 -0.301200 -0.370400 -0.392000 -0.264000 -0.872000 -0.000000 -0.251000 -0.386300 -0.352000 0.496000 -0.792000 --0.050000 -0.266900 -0.365800 -0.288000 0.088000 -0.944000 --0.044700 -0.251000 -0.365800 -0.216000 0.376000 -0.896000 --0.050000 -0.251000 -0.364300 -0.216000 0.352000 -0.904000 -0.000000 -0.238800 -0.365800 -0.192000 0.648000 -0.728000 --0.050000 -0.200800 -0.320900 -0.056000 0.280000 -0.952000 -0.000000 -0.200800 -0.332000 -0.296000 0.528000 -0.784000 -0.000000 -0.238800 -0.365800 -0.192000 0.648000 -0.728000 -0.050000 -0.200800 -0.360800 -0.016000 0.576000 -0.808000 -0.050000 -0.206300 -0.365800 -0.112000 0.608000 -0.776000 -0.000000 -0.238800 -0.365800 -0.192000 0.648000 -0.728000 -0.050000 -0.251000 -0.406500 0.232000 -0.312000 -0.912000 -0.000000 -0.251000 -0.386300 -0.352000 0.496000 -0.792000 -0.050000 -0.301200 -0.369000 0.376000 -0.768000 -0.512000 -0.000000 -0.301200 -0.413400 -0.392000 -0.192000 -0.896000 -0.050000 -0.303000 -0.365800 0.400000 -0.792000 -0.448000 -0.000000 -0.316900 -0.365800 0.224000 -0.832000 -0.496000 -0.050000 -0.326800 -0.304800 0.424000 -0.880000 -0.184000 -0.000000 -0.336000 -0.304800 0.392000 -0.872000 -0.264000 -0.050000 -0.327900 -0.243900 0.480000 -0.872000 0.000000 -0.000000 -0.343100 -0.243900 0.464000 -0.864000 -0.160000 -0.050000 -0.327900 -0.182900 0.552000 -0.824000 0.048000 -0.000000 -0.351500 -0.193300 0.504000 -0.832000 -0.176000 -0.003100 -0.351500 -0.182900 0.504000 -0.840000 -0.160000 -0.000000 -0.353400 -0.182900 0.520000 -0.832000 -0.160000 -0.006400 -0.351500 -0.121900 0.552000 -0.776000 0.288000 -0.000000 -0.356400 -0.121900 0.560000 -0.728000 0.384000 -0.000000 -0.351500 -0.112600 0.544000 -0.704000 0.448000 -0.000000 -0.351500 -0.112600 0.544000 -0.704000 0.448000 -0.000000 0.351500 -0.051600 0.280000 -0.248000 0.920000 -0.000000 0.351500 -0.051600 0.280000 -0.248000 0.920000 -0.000000 0.393800 -0.060900 0.224000 0.176000 0.952000 -0.042100 0.351500 -0.060900 0.160000 -0.080000 0.976000 -0.000000 0.401700 -0.062800 0.256000 0.176000 0.944000 -0.050000 0.351500 -0.062500 0.000000 -0.264000 0.960000 -0.050000 0.401700 -0.062500 -0.008000 0.136000 0.984000 -0.065700 0.351500 -0.060900 -0.064000 -0.312000 0.944000 -0.100000 0.401700 -0.066700 -0.048000 0.000000 0.992000 -0.100000 0.368600 -0.060900 0.104000 0.120000 0.984000 -0.150000 0.401700 -0.062100 -0.392000 -0.400000 0.816000 -0.111400 0.351500 -0.060900 0.184000 -0.224000 0.952000 -0.150000 0.351500 -0.070300 -0.056000 -0.480000 0.872000 -0.100000 0.345700 -0.060900 0.056000 -0.392000 0.912000 -0.150000 0.301200 -0.094700 0.096000 -0.408000 0.904000 -0.100000 0.301200 -0.081200 0.144000 -0.392000 0.904000 -0.150000 0.253300 -0.121900 0.144000 -0.672000 0.712000 -0.100000 0.251000 -0.119300 0.048000 -0.664000 0.736000 -0.134200 0.251000 -0.121900 0.072000 -0.752000 0.648000 -0.100000 0.248700 -0.121900 0.064000 -0.824000 0.552000 -0.150000 0.251000 -0.128300 0.144000 -0.904000 0.392000 -0.100000 0.246100 -0.182900 0.136000 -0.488000 -0.856000 -0.150000 0.224100 -0.182900 0.056000 -0.672000 -0.728000 -0.100000 0.251000 -0.185300 0.160000 -0.296000 -0.936000 -0.150000 0.251000 -0.192500 0.112000 0.024000 -0.992000 -0.100000 0.301200 -0.188500 0.112000 0.128000 -0.984000 -0.150000 0.284700 -0.182900 0.352000 0.368000 -0.856000 -0.133500 0.301200 -0.182900 0.272000 0.264000 -0.920000 -0.150000 0.251000 -0.128300 0.144000 -0.904000 0.392000 -0.150000 0.301200 -0.172900 0.456000 0.432000 -0.768000 -0.134200 0.251000 -0.121900 0.072000 -0.752000 0.648000 -0.150000 0.253300 -0.121900 0.144000 -0.672000 0.712000 -0.150000 0.301200 -0.172900 0.456000 0.432000 -0.768000 -0.200000 0.269500 -0.121900 -0.008000 -0.896000 0.432000 -0.200000 0.301200 -0.179700 -0.152000 -0.352000 -0.920000 -0.250000 0.256500 -0.121900 -0.200000 -0.800000 0.552000 -0.215700 0.301200 -0.182900 -0.120000 -0.160000 -0.976000 -0.250000 0.284000 -0.182900 -0.096000 -0.256000 -0.952000 -0.250000 0.301200 -0.184400 -0.080000 -0.056000 -0.992000 -0.215700 0.301200 -0.182900 -0.120000 -0.160000 -0.976000 -0.250000 0.351500 -0.189100 -0.160000 0.168000 -0.968000 -0.226900 0.351500 -0.182900 -0.224000 0.192000 -0.952000 -0.250000 0.370000 -0.182900 -0.184000 0.304000 -0.928000 -0.200000 0.351500 -0.169700 -0.320000 0.304000 -0.888000 -0.250000 0.401700 -0.172700 -0.016000 0.288000 -0.952000 -0.200000 0.401700 -0.169400 -0.056000 0.168000 -0.976000 -0.250000 0.451900 -0.137900 0.128000 0.536000 -0.824000 -0.200000 0.451900 -0.151000 0.136000 0.400000 -0.896000 -0.250000 0.466900 -0.121900 0.232000 0.968000 0.016000 -0.200000 0.484800 -0.121900 0.312000 0.872000 0.360000 -0.250000 0.451900 -0.094000 0.248000 0.784000 0.552000 -0.200000 0.453000 -0.060900 0.112000 0.728000 0.672000 -0.203100 0.451900 -0.060900 0.264000 0.672000 0.680000 -0.200000 0.451900 -0.059700 0.136000 0.632000 0.760000 -0.250000 0.432000 -0.060900 0.224000 0.624000 0.736000 -0.200000 0.401700 -0.033800 -0.352000 0.000000 0.928000 -0.250000 0.401700 -0.026800 -0.216000 0.176000 0.952000 -0.200000 0.352900 -0.060900 -0.368000 -0.496000 0.776000 -0.250000 0.351500 -0.020200 -0.488000 -0.416000 0.760000 -0.201200 0.351500 -0.060900 -0.488000 -0.576000 0.648000 -0.250000 0.317900 -0.060900 -0.432000 -0.680000 0.584000 -0.200000 0.351500 -0.062100 -0.312000 -0.640000 0.696000 -0.250000 0.301200 -0.083600 -0.096000 -0.744000 0.648000 -0.200000 0.301200 -0.098800 -0.120000 -0.584000 0.800000 -0.250000 0.256500 -0.121900 -0.200000 -0.800000 0.552000 -0.200000 0.269500 -0.121900 -0.008000 -0.896000 0.432000 -0.200000 0.301200 -0.098800 -0.120000 -0.584000 0.800000 -0.150000 0.253300 -0.121900 0.144000 -0.672000 0.712000 -0.150000 0.301200 -0.094700 0.096000 -0.408000 0.904000 -0.200000 0.301200 -0.098800 -0.120000 -0.584000 0.800000 -0.150000 0.351500 -0.070300 -0.056000 -0.480000 0.872000 -0.200000 0.351500 -0.062100 -0.312000 -0.640000 0.696000 -0.150000 0.401700 -0.062100 -0.392000 -0.400000 0.816000 -0.200000 0.352900 -0.060900 -0.368000 -0.496000 0.776000 -0.151400 0.401700 -0.060900 -0.480000 -0.416000 0.760000 -0.200000 0.401700 -0.033800 -0.352000 0.000000 0.928000 -0.150000 0.409600 -0.060900 -0.208000 -0.072000 0.968000 -0.200000 0.451900 -0.059700 0.136000 0.632000 0.760000 -0.150000 0.451900 -0.057100 -0.080000 0.496000 0.856000 -0.200000 0.453000 -0.060900 0.112000 0.728000 0.672000 -0.150000 0.456100 -0.060900 0.048000 0.664000 0.736000 -0.200000 0.484800 -0.121900 0.312000 0.872000 0.360000 -0.150000 0.502100 -0.119700 0.016000 0.656000 0.752000 -0.153400 0.502100 -0.121900 0.448000 0.824000 -0.336000 -0.150000 0.503100 -0.121900 0.272000 0.456000 -0.840000 -0.150000 0.502100 -0.123200 0.032000 0.424000 -0.896000 -0.138500 0.502100 -0.121900 -0.184000 0.952000 -0.216000 -0.150000 0.451900 -0.151900 0.184000 0.376000 -0.904000 -0.100000 0.494400 -0.121900 -0.184000 0.952000 -0.216000 -0.100000 0.451900 -0.146900 -0.088000 0.224000 -0.968000 -0.050000 0.485400 -0.121900 -0.032000 0.904000 -0.408000 -0.050000 0.451900 -0.139600 -0.080000 0.232000 -0.960000 -0.000000 0.493800 -0.121900 0.128000 0.960000 -0.232000 -0.000000 0.451900 -0.135500 0.000000 0.160000 -0.984000 --0.050000 0.500300 -0.121900 -0.104000 0.896000 -0.424000 --0.050000 0.451900 -0.137500 0.040000 0.112000 -0.992000 --0.100000 0.479800 -0.121900 -0.288000 0.584000 -0.752000 --0.100000 0.451900 -0.142300 -0.128000 0.312000 -0.936000 --0.150000 0.453400 -0.121900 -0.320000 0.624000 -0.704000 --0.150000 0.451900 -0.123200 -0.344000 0.512000 -0.784000 --0.152100 0.451900 -0.121900 -0.424000 0.536000 -0.720000 --0.150000 0.401700 -0.148200 -0.240000 0.400000 -0.872000 --0.200000 0.409200 -0.121900 -0.400000 0.464000 -0.776000 --0.200000 0.401700 -0.127400 -0.400000 0.440000 -0.800000 --0.208300 0.401700 -0.121900 -0.432000 0.432000 -0.784000 --0.200000 0.351500 -0.146000 -0.416000 0.224000 -0.872000 --0.233300 0.351500 -0.121900 -0.616000 0.184000 -0.752000 --0.200000 0.301200 -0.154100 -0.392000 0.112000 -0.904000 --0.245300 0.301200 -0.121900 -0.680000 0.120000 -0.720000 --0.200000 0.251000 -0.156200 -0.432000 0.168000 -0.880000 --0.250000 0.268200 -0.121900 -0.464000 0.088000 -0.872000 --0.250000 0.251000 -0.124000 -0.376000 0.088000 -0.920000 --0.254200 0.251000 -0.121900 -0.384000 0.088000 -0.912000 --0.250000 0.200800 -0.129700 -0.392000 0.152000 -0.904000 --0.263400 0.200800 -0.121900 -0.480000 0.216000 -0.840000 --0.250000 0.150600 -0.154100 -0.464000 0.344000 -0.808000 --0.295300 0.150600 -0.121900 -0.728000 0.520000 -0.432000 --0.250000 0.100400 -0.182000 -0.504000 0.488000 -0.704000 --0.300000 0.144000 -0.121900 -0.728000 0.496000 -0.456000 --0.300000 0.100400 -0.141500 -0.560000 0.512000 -0.640000 --0.250000 0.100400 -0.182000 -0.504000 0.488000 -0.704000 --0.300000 0.052000 -0.182900 -0.664000 0.464000 -0.568000 --0.250000 0.099600 -0.182900 -0.488000 0.616000 -0.608000 --0.250000 0.100400 -0.182000 -0.504000 0.488000 -0.704000 --0.249100 0.100400 -0.182900 -0.576000 0.496000 -0.640000 --0.250000 0.150600 -0.154100 -0.464000 0.344000 -0.808000 --0.216700 0.150600 -0.182900 -0.560000 0.376000 -0.728000 --0.250000 0.200800 -0.129700 -0.392000 0.152000 -0.904000 --0.200000 0.172600 -0.182900 -0.488000 0.416000 -0.760000 --0.200000 0.200800 -0.161600 -0.480000 0.384000 -0.776000 --0.173800 0.200800 -0.182900 -0.480000 0.344000 -0.800000 --0.200000 0.251000 -0.156200 -0.432000 0.168000 -0.880000 --0.153800 0.251000 -0.182900 -0.312000 0.176000 -0.928000 --0.200000 0.301200 -0.154100 -0.392000 0.112000 -0.904000 --0.150000 0.257900 -0.182900 -0.288000 0.168000 -0.936000 --0.150000 0.301200 -0.169700 -0.080000 0.248000 -0.960000 --0.100000 0.273500 -0.182900 -0.112000 0.208000 -0.968000 --0.100000 0.301200 -0.172200 -0.168000 0.416000 -0.888000 --0.058500 0.301200 -0.182900 -0.128000 0.320000 -0.936000 --0.100000 0.351500 -0.158200 0.008000 0.264000 -0.960000 --0.050000 0.304700 -0.182900 -0.120000 0.336000 -0.928000 --0.050000 0.351500 -0.155800 -0.048000 0.328000 -0.936000 -0.000000 0.313300 -0.182900 -0.064000 0.304000 -0.944000 -0.000000 0.351500 -0.164900 -0.080000 0.368000 -0.920000 -0.050000 0.327400 -0.182900 -0.016000 0.344000 -0.936000 -0.050000 0.351500 -0.166400 0.000000 0.392000 -0.912000 -0.100000 0.320500 -0.182900 0.096000 0.312000 -0.936000 -0.100000 0.351500 -0.169000 0.056000 0.272000 -0.952000 -0.133500 0.301200 -0.182900 0.272000 0.264000 -0.920000 -0.150000 0.351500 -0.160600 0.144000 0.128000 -0.976000 -0.150000 0.301200 -0.172900 0.456000 0.432000 -0.768000 -0.200000 0.351500 -0.169700 -0.320000 0.304000 -0.888000 -0.200000 0.301200 -0.179700 -0.152000 -0.352000 -0.920000 -0.226900 0.351500 -0.182900 -0.224000 0.192000 -0.952000 -0.215700 0.301200 -0.182900 -0.120000 -0.160000 -0.976000 -0.215700 0.301200 -0.182900 -0.120000 -0.160000 -0.976000 -0.000000 0.351500 -0.051600 0.280000 -0.248000 0.920000 -0.000000 0.351500 -0.051600 0.280000 -0.248000 0.920000 -0.042100 0.351500 -0.060900 0.160000 -0.080000 0.976000 -0.000000 0.334500 -0.060900 0.312000 -0.368000 0.864000 -0.050000 0.351500 -0.062500 0.000000 -0.264000 0.960000 -0.000000 0.301200 -0.076500 0.296000 -0.272000 0.904000 -0.050000 0.301200 -0.074400 0.160000 -0.248000 0.952000 -0.000000 0.251000 -0.086600 0.344000 -0.360000 0.864000 -0.050000 0.251000 -0.100200 0.224000 -0.464000 0.848000 -0.000000 0.211400 -0.121900 0.496000 -0.712000 0.480000 -0.050000 0.230600 -0.121900 0.312000 -0.824000 0.464000 -0.000000 0.200800 -0.169000 0.576000 -0.744000 0.320000 -0.050000 0.219300 -0.182900 0.280000 -0.632000 -0.712000 -0.008500 0.200800 -0.182900 0.416000 -0.688000 -0.584000 -0.050000 0.251000 -0.200200 0.040000 -0.232000 -0.968000 -0.000000 0.200800 -0.186400 0.272000 -0.456000 -0.840000 -0.000000 0.251000 -0.201400 0.024000 -0.152000 -0.984000 --0.050000 0.200800 -0.204500 0.304000 -0.328000 -0.888000 --0.050000 0.251000 -0.205600 -0.136000 0.216000 -0.960000 --0.100000 0.200800 -0.221500 0.056000 0.392000 -0.912000 --0.100000 0.251000 -0.188700 -0.192000 0.256000 -0.944000 --0.150000 0.200800 -0.199200 -0.328000 0.272000 -0.896000 --0.150000 0.251000 -0.184400 -0.280000 0.168000 -0.936000 --0.173800 0.200800 -0.182900 -0.480000 0.344000 -0.800000 --0.153800 0.251000 -0.182900 -0.312000 0.176000 -0.928000 --0.150000 0.251000 -0.184400 -0.280000 0.168000 -0.936000 --0.150000 0.257900 -0.182900 -0.288000 0.168000 -0.936000 --0.100000 0.251000 -0.188700 -0.192000 0.256000 -0.944000 --0.100000 0.273500 -0.182900 -0.112000 0.208000 -0.968000 --0.050000 0.251000 -0.205600 -0.136000 0.216000 -0.960000 --0.058500 0.301200 -0.182900 -0.128000 0.320000 -0.936000 --0.050000 0.301200 -0.184300 -0.112000 0.296000 -0.944000 --0.050000 0.304700 -0.182900 -0.120000 0.336000 -0.928000 -0.000000 0.301200 -0.186500 -0.056000 0.232000 -0.968000 -0.000000 0.313300 -0.182900 -0.064000 0.304000 -0.944000 -0.050000 0.301200 -0.192400 0.024000 0.192000 -0.976000 -0.050000 0.327400 -0.182900 -0.016000 0.344000 -0.936000 -0.100000 0.301200 -0.188500 0.112000 0.128000 -0.984000 -0.100000 0.320500 -0.182900 0.096000 0.312000 -0.936000 -0.133500 0.301200 -0.182900 0.272000 0.264000 -0.920000 -0.133500 0.301200 -0.182900 0.272000 0.264000 -0.920000 -0.000000 -0.301200 -0.001900 0.408000 -0.704000 0.568000 -0.000000 -0.301200 -0.001900 0.408000 -0.704000 0.568000 -0.032200 -0.301200 -0.060900 0.552000 -0.696000 0.448000 -0.000000 -0.326800 -0.060900 0.344000 -0.824000 0.432000 -0.000000 -0.326800 -0.060900 0.344000 -0.824000 0.432000 -0.065700 0.351500 -0.060900 -0.064000 -0.312000 0.944000 -0.065700 0.351500 -0.060900 -0.064000 -0.312000 0.944000 -0.100000 0.368600 -0.060900 0.104000 0.120000 0.984000 -0.100000 0.351500 -0.058100 0.120000 -0.240000 0.960000 -0.111400 0.351500 -0.060900 0.184000 -0.224000 0.952000 -0.100000 0.345700 -0.060900 0.056000 -0.392000 0.912000 -0.100000 0.351500 -0.058100 0.120000 -0.240000 0.960000 -0.065700 0.351500 -0.060900 -0.064000 -0.312000 0.944000 -0.100000 0.345700 -0.060900 0.056000 -0.392000 0.912000 -0.050000 0.351500 -0.062500 0.000000 -0.264000 0.960000 -0.100000 0.301200 -0.081200 0.144000 -0.392000 0.904000 -0.050000 0.301200 -0.074400 0.160000 -0.248000 0.952000 -0.100000 0.251000 -0.119300 0.048000 -0.664000 0.736000 -0.050000 0.251000 -0.100200 0.224000 -0.464000 0.848000 -0.100000 0.248700 -0.121900 0.064000 -0.824000 0.552000 -0.050000 0.230600 -0.121900 0.312000 -0.824000 0.464000 -0.100000 0.246100 -0.182900 0.136000 -0.488000 -0.856000 -0.050000 0.219300 -0.182900 0.280000 -0.632000 -0.712000 -0.100000 0.251000 -0.185300 0.160000 -0.296000 -0.936000 -0.050000 0.251000 -0.200200 0.040000 -0.232000 -0.968000 -0.100000 0.301200 -0.188500 0.112000 0.128000 -0.984000 -0.050000 0.301200 -0.192400 0.024000 0.192000 -0.976000 -0.050000 0.251000 -0.200200 0.040000 -0.232000 -0.968000 -0.000000 0.301200 -0.186500 -0.056000 0.232000 -0.968000 -0.000000 0.251000 -0.201400 0.024000 -0.152000 -0.984000 --0.050000 0.301200 -0.184300 -0.112000 0.296000 -0.944000 --0.050000 0.251000 -0.205600 -0.136000 0.216000 -0.960000 --0.050000 0.251000 -0.205600 -0.136000 0.216000 -0.960000 -0.150000 0.456100 -0.060900 0.048000 0.664000 0.736000 -0.150000 0.456100 -0.060900 0.048000 0.664000 0.736000 -0.150000 0.451900 -0.057100 -0.080000 0.496000 0.856000 -0.121900 0.451900 -0.060900 -0.112000 0.472000 0.872000 -0.150000 0.409600 -0.060900 -0.208000 -0.072000 0.968000 -0.100000 0.451900 -0.066700 -0.192000 0.072000 0.976000 -0.150000 0.401700 -0.062100 -0.392000 -0.400000 0.816000 -0.100000 0.401700 -0.066700 -0.048000 0.000000 0.992000 -0.100000 0.451900 -0.066700 -0.192000 0.072000 0.976000 -0.050000 0.401700 -0.062500 -0.008000 0.136000 0.984000 -0.050000 0.451900 -0.077800 0.016000 0.408000 0.912000 -0.000000 0.401700 -0.062800 0.256000 0.176000 0.944000 -0.000000 0.451900 -0.081100 0.280000 0.456000 0.832000 --0.005200 0.401700 -0.060900 0.264000 0.168000 0.944000 --0.023600 0.451900 -0.060900 0.376000 0.152000 0.904000 -0.000000 0.451900 -0.081100 0.280000 0.456000 0.832000 --0.033200 0.502100 -0.060900 0.616000 0.496000 0.600000 -0.000000 0.493800 -0.121900 0.128000 0.960000 -0.232000 --0.050000 0.502100 -0.117100 -0.040000 0.912000 -0.392000 --0.050000 0.500300 -0.121900 -0.104000 0.896000 -0.424000 --0.100000 0.502100 -0.081300 -0.184000 0.840000 -0.488000 --0.100000 0.479800 -0.121900 -0.288000 0.584000 -0.752000 --0.100000 0.479800 -0.121900 -0.288000 0.584000 -0.752000 -0.350000 0.302200 -0.060900 -0.144000 -0.624000 0.760000 -0.350000 0.302200 -0.060900 -0.144000 -0.624000 0.760000 -0.300000 0.310700 -0.060900 -0.072000 -0.760000 0.640000 -0.350000 0.351500 -0.021800 0.032000 -0.048000 0.992000 -0.300000 0.351500 -0.009100 -0.016000 -0.144000 0.984000 -0.300000 0.351500 -0.009100 -0.016000 -0.144000 0.984000 -0.395100 0.251000 -0.060900 -0.344000 -0.184000 0.912000 -0.395100 0.251000 -0.060900 -0.344000 -0.184000 0.912000 -0.400000 0.251000 -0.058700 -0.328000 -0.176000 0.920000 -0.400000 0.242400 -0.060900 -0.352000 -0.192000 0.904000 -0.400000 0.242400 -0.060900 -0.352000 -0.192000 0.904000 -0.450000 0.401700 -0.038900 -0.120000 0.592000 0.784000 -0.450000 0.401700 -0.038900 -0.120000 0.592000 0.784000 -0.500000 0.401700 -0.057700 0.096000 0.864000 0.480000 -0.450000 0.414500 -0.060900 0.192000 0.928000 0.304000 -0.500000 0.403100 -0.060900 0.112000 0.944000 0.280000 -0.450000 0.422200 -0.121900 0.368000 0.832000 -0.392000 -0.500000 0.401700 -0.069300 0.168000 0.952000 -0.216000 -0.488600 0.401700 -0.121900 0.504000 0.776000 -0.368000 -0.450000 0.422200 -0.121900 0.368000 0.832000 -0.392000 -0.450000 0.401700 -0.160800 0.376000 0.656000 -0.640000 -0.450000 0.401700 -0.160800 0.376000 0.656000 -0.640000 -0.460500 0.150600 -0.060900 -0.624000 -0.512000 0.584000 -0.460500 0.150600 -0.060900 -0.624000 -0.512000 0.584000 -0.500000 0.150600 -0.020200 -0.704000 -0.472000 0.520000 -0.500000 0.107000 -0.060900 -0.608000 -0.480000 0.616000 -0.500000 0.107000 -0.060900 -0.608000 -0.480000 0.616000 -0.500000 0.000000 -0.045100 -0.376000 -0.208000 0.896000 -0.500000 0.000000 -0.045100 -0.376000 -0.208000 0.896000 -0.500000 0.050200 -0.057700 -0.560000 0.128000 0.816000 -0.478700 0.000000 -0.060900 -0.440000 -0.008000 0.888000 -0.495100 0.050200 -0.060900 -0.456000 0.136000 0.872000 -0.450000 0.000000 -0.073300 -0.344000 -0.088000 0.928000 -0.450000 0.050200 -0.077000 -0.360000 0.120000 0.920000 -0.400000 0.000000 -0.102200 -0.272000 0.176000 0.936000 -0.400000 0.050200 -0.114800 -0.552000 0.256000 0.784000 -0.351500 0.000000 -0.121900 -0.376000 0.528000 0.752000 -0.393200 0.050200 -0.121900 -0.648000 0.352000 0.664000 -0.350000 0.000000 -0.123200 -0.512000 0.592000 0.608000 -0.357200 0.050200 -0.182900 -0.736000 0.640000 0.184000 -0.350000 0.043300 -0.182900 -0.488000 0.704000 0.504000 -0.351400 0.050200 -0.243900 -0.480000 0.768000 -0.416000 -0.350000 0.049300 -0.243900 -0.512000 0.784000 -0.320000 -0.350000 0.043300 -0.182900 -0.488000 0.704000 0.504000 -0.300000 0.032100 -0.243900 -0.576000 0.680000 -0.432000 -0.300000 0.018000 -0.182900 -0.296000 0.768000 0.552000 -0.350000 0.043300 -0.182900 -0.488000 0.704000 0.504000 -0.300000 0.000000 -0.166100 -0.488000 0.464000 0.728000 -0.350000 0.000000 -0.123200 -0.512000 0.592000 0.608000 -0.300000 -0.050200 -0.130700 -0.504000 0.472000 0.720000 -0.350000 -0.001200 -0.121900 -0.472000 0.472000 0.736000 -0.307700 -0.050200 -0.121900 -0.592000 0.464000 0.648000 -0.350000 -0.050200 -0.093300 -0.312000 0.392000 0.856000 -0.300000 -0.060700 -0.121900 -0.512000 0.456000 0.720000 -0.350000 -0.100400 -0.081200 -0.280000 0.032000 0.952000 -0.300000 -0.100400 -0.098900 -0.360000 0.344000 0.856000 -0.350000 -0.150600 -0.101500 0.088000 -0.352000 0.928000 -0.300000 -0.150600 -0.090800 0.240000 -0.024000 0.968000 -0.350000 -0.182300 -0.121900 -0.032000 -0.520000 0.848000 -0.300000 -0.200800 -0.101500 0.424000 -0.216000 0.872000 -0.329200 -0.200800 -0.121900 0.376000 -0.264000 0.880000 -0.300000 -0.234400 -0.121900 0.104000 -0.472000 0.872000 -0.350000 -0.200800 -0.137500 0.248000 -0.232000 0.936000 -0.300000 -0.251000 -0.132800 -0.224000 -0.464000 0.856000 -0.350000 -0.234100 -0.121900 0.384000 0.224000 0.888000 -0.328900 -0.251000 -0.121900 -0.264000 -0.304000 0.912000 -0.350000 -0.251000 -0.114600 0.576000 -0.200000 0.784000 -0.350000 -0.260400 -0.121900 0.448000 -0.472000 0.752000 -0.354900 -0.251000 -0.121900 0.704000 -0.304000 0.632000 -0.350000 -0.251000 -0.114600 0.576000 -0.200000 0.784000 -0.350000 -0.234100 -0.121900 0.384000 0.224000 0.888000 -0.354900 -0.251000 -0.121900 0.704000 -0.304000 0.632000 -0.350000 -0.200800 -0.137500 0.248000 -0.232000 0.936000 -0.400000 -0.203000 -0.121900 -0.184000 -0.672000 0.712000 -0.391400 -0.200800 -0.121900 -0.176000 -0.648000 0.736000 -0.400000 -0.200800 -0.119100 -0.200000 -0.688000 0.688000 -0.350000 -0.182300 -0.121900 -0.032000 -0.520000 0.848000 -0.400000 -0.150600 -0.068400 -0.344000 -0.312000 0.880000 -0.350000 -0.150600 -0.101500 0.088000 -0.352000 0.928000 -0.400000 -0.100400 -0.080400 -0.024000 0.176000 0.976000 -0.350000 -0.100400 -0.081200 -0.280000 0.032000 0.952000 -0.400000 -0.050200 -0.089900 -0.128000 0.176000 0.968000 -0.350000 -0.050200 -0.093300 -0.312000 0.392000 0.856000 -0.400000 0.000000 -0.102200 -0.272000 0.176000 0.936000 -0.350000 -0.001200 -0.121900 -0.472000 0.472000 0.736000 -0.351500 0.000000 -0.121900 -0.376000 0.528000 0.752000 -0.350000 0.000000 -0.123200 -0.512000 0.592000 0.608000 -0.350000 0.000000 -0.123200 -0.512000 0.592000 0.608000 -0.478700 0.000000 -0.060900 -0.440000 -0.008000 0.888000 -0.478700 0.000000 -0.060900 -0.440000 -0.008000 0.888000 -0.500000 0.000000 -0.045100 -0.376000 -0.208000 0.896000 -0.500000 -0.026100 -0.060900 -0.336000 -0.328000 0.872000 -0.550000 0.000000 -0.046900 0.008000 -0.120000 0.992000 -0.550000 -0.046200 -0.060900 -0.104000 -0.168000 0.976000 -0.600000 0.000000 -0.044900 -0.016000 -0.720000 0.688000 -0.600000 -0.012300 -0.060900 0.104000 -0.576000 0.800000 -0.550000 -0.046200 -0.060900 -0.104000 -0.168000 0.976000 -0.600000 -0.050200 -0.088500 0.448000 -0.400000 0.792000 -0.550000 -0.050200 -0.061500 -0.064000 -0.152000 0.984000 -0.600000 -0.100400 -0.077400 0.584000 0.048000 0.800000 -0.550000 -0.100400 -0.076900 0.056000 0.056000 0.992000 -0.550000 -0.050200 -0.061500 -0.064000 -0.152000 0.984000 -0.500000 -0.100400 -0.086800 -0.048000 0.256000 0.960000 -0.500000 -0.050200 -0.068900 -0.136000 -0.144000 0.976000 -0.450000 -0.100400 -0.078400 -0.088000 0.200000 0.968000 -0.450000 -0.050200 -0.086300 -0.128000 -0.040000 0.984000 -0.400000 -0.100400 -0.080400 -0.024000 0.176000 0.976000 -0.400000 -0.050200 -0.089900 -0.128000 0.176000 0.968000 -0.450000 -0.050200 -0.086300 -0.128000 -0.040000 0.984000 -0.400000 0.000000 -0.102200 -0.272000 0.176000 0.936000 -0.450000 0.000000 -0.073300 -0.344000 -0.088000 0.928000 -0.450000 -0.050200 -0.086300 -0.128000 -0.040000 0.984000 -0.478700 0.000000 -0.060900 -0.440000 -0.008000 0.888000 -0.500000 -0.050200 -0.068900 -0.136000 -0.144000 0.976000 -0.500000 -0.026100 -0.060900 -0.336000 -0.328000 0.872000 -0.550000 -0.050200 -0.061500 -0.064000 -0.152000 0.984000 -0.550000 -0.046200 -0.060900 -0.104000 -0.168000 0.976000 -0.550000 -0.046200 -0.060900 -0.104000 -0.168000 0.976000 -0.500000 0.401700 -0.057700 0.096000 0.864000 0.480000 -0.500000 0.401700 -0.057700 0.096000 0.864000 0.480000 -0.500000 0.403100 -0.060900 0.112000 0.944000 0.280000 -0.517100 0.401700 -0.060900 0.080000 0.968000 0.224000 -0.500000 0.401700 -0.069300 0.168000 0.952000 -0.216000 -0.500000 0.401700 -0.069300 0.168000 0.952000 -0.216000 -0.500000 0.266900 0.000000 -0.760000 -0.040000 0.640000 -0.500000 0.266900 0.000000 -0.760000 -0.040000 0.640000 -0.500800 0.251000 0.000000 -0.792000 -0.016000 0.608000 -0.500000 0.251000 -0.000900 -0.496000 0.112000 0.856000 -0.500000 0.251000 -0.000900 -0.496000 0.112000 0.856000 -0.500000 0.050200 -0.057700 -0.560000 0.128000 0.816000 -0.500000 0.050200 -0.057700 -0.560000 0.128000 0.816000 -0.500000 0.000000 -0.045100 -0.376000 -0.208000 0.896000 -0.550000 0.050200 -0.037800 -0.320000 -0.688000 0.640000 -0.550000 0.000000 -0.046900 0.008000 -0.120000 0.992000 -0.600000 0.050200 -0.005300 -0.440000 -0.752000 0.480000 -0.600000 0.000000 -0.044900 -0.016000 -0.720000 0.688000 -0.600000 0.000000 -0.044900 -0.016000 -0.720000 0.688000 -0.550000 0.104000 0.000000 -0.664000 -0.568000 0.464000 -0.550000 0.104000 0.000000 -0.664000 -0.568000 0.464000 -0.553100 0.100400 0.000000 -0.664000 -0.576000 0.464000 -0.550000 0.100400 -0.005700 -0.672000 -0.576000 0.448000 -0.550000 0.100400 -0.005700 -0.672000 -0.576000 0.448000 -0.550000 -0.200800 -0.034900 0.016000 -0.040000 0.992000 -0.550000 -0.200800 -0.034900 0.016000 -0.040000 0.992000 -0.600000 -0.200800 -0.056500 0.336000 0.448000 0.816000 -0.550000 -0.159500 -0.060900 0.248000 0.472000 0.840000 -0.600000 -0.194800 -0.060900 0.352000 0.496000 0.784000 -0.550000 -0.150600 -0.067100 0.240000 0.480000 0.840000 -0.600000 -0.150600 -0.093600 0.304000 0.568000 0.752000 -0.600000 -0.194800 -0.060900 0.352000 0.496000 0.784000 -0.650000 -0.150600 -0.116200 0.720000 0.480000 0.488000 -0.608400 -0.200800 -0.060900 0.360000 0.488000 0.792000 -0.650000 -0.200800 -0.092600 0.656000 0.384000 0.640000 -0.650000 -0.242600 -0.060900 0.392000 0.384000 0.824000 -0.677400 -0.200800 -0.121900 0.528000 0.512000 0.672000 -0.657600 -0.251000 -0.060900 0.456000 -0.072000 0.880000 -0.700000 -0.217500 -0.121900 0.616000 0.552000 0.544000 -0.700000 -0.251000 -0.086700 0.608000 0.464000 0.632000 -0.719200 -0.251000 -0.121900 0.760000 0.456000 0.440000 -0.700000 -0.301200 -0.068800 0.336000 0.392000 0.848000 -0.750000 -0.297400 -0.121900 0.656000 0.584000 0.464000 -0.750000 -0.301200 -0.116500 0.704000 0.400000 0.568000 -0.752700 -0.301200 -0.121900 0.792000 0.344000 0.488000 -0.750000 -0.351500 -0.097900 0.640000 0.048000 0.760000 -0.775700 -0.351500 -0.121900 0.600000 0.328000 0.720000 -0.750000 -0.401700 -0.115900 -0.264000 -0.344000 0.896000 -0.800000 -0.391100 -0.121900 0.384000 0.416000 0.816000 -0.800000 -0.401700 -0.115500 0.392000 0.184000 0.896000 -0.810500 -0.401700 -0.121900 0.456000 0.104000 0.872000 -0.800000 -0.418600 -0.121900 0.304000 -0.320000 0.888000 -0.850000 -0.401700 -0.151500 0.608000 0.552000 0.560000 -0.800000 -0.451900 -0.135400 0.168000 -0.384000 0.904000 -0.850000 -0.451900 -0.123600 0.328000 0.296000 0.888000 -0.800000 -0.502100 -0.171200 -0.360000 -0.648000 0.664000 -0.850000 -0.502100 -0.142100 -0.224000 -0.520000 0.816000 -0.800000 -0.511100 -0.182900 -0.376000 -0.744000 0.544000 -0.850000 -0.533300 -0.182900 -0.416000 -0.736000 0.528000 -0.800000 -0.519900 -0.243900 -0.400000 -0.904000 -0.112000 -0.850000 -0.540400 -0.243900 -0.360000 -0.768000 -0.512000 -0.800000 -0.502100 -0.293400 -0.120000 -0.840000 -0.520000 -0.850000 -0.504700 -0.304800 -0.096000 -0.664000 -0.736000 -0.832800 -0.502100 -0.304800 -0.104000 -0.544000 -0.824000 -0.850000 -0.502100 -0.307100 0.032000 -0.240000 -0.968000 -0.850000 -0.490600 -0.304800 0.216000 0.112000 -0.968000 -0.856800 -0.502100 -0.304800 0.288000 0.144000 -0.944000 -0.850000 -0.451900 -0.293100 0.448000 0.248000 -0.848000 -0.900000 -0.502100 -0.284600 -0.008000 -0.096000 -0.992000 -0.900000 -0.451900 -0.272400 0.368000 0.408000 -0.824000 -0.950000 -0.502100 -0.277800 0.272000 0.288000 -0.912000 -0.950000 -0.451900 -0.300000 0.488000 0.464000 -0.728000 -1.000000 -0.502100 -0.271100 0.392000 0.584000 -0.696000 -0.980700 -0.451900 -0.243900 0.752000 0.648000 0.032000 -1.000000 -0.475100 -0.243900 0.736000 0.608000 -0.280000 -0.950000 -0.451900 -0.206400 0.504000 0.736000 0.440000 -1.000000 -0.502100 -0.189300 0.760000 0.568000 0.296000 -0.950000 -0.463500 -0.182900 0.464000 0.672000 0.568000 -0.998000 -0.502100 -0.182900 0.528000 0.664000 0.520000 -0.950000 -0.502100 -0.136000 -0.296000 0.400000 0.864000 -1.000000 -0.503200 -0.182900 0.400000 0.704000 0.576000 -0.950000 -0.531200 -0.121900 -0.376000 0.368000 0.840000 -1.000000 -0.544400 -0.121900 0.360000 0.712000 0.592000 -0.950000 -0.552300 -0.115100 -0.432000 -0.368000 0.816000 -1.000000 -0.552300 -0.111000 0.040000 -0.024000 0.992000 -0.950000 -0.560000 -0.121900 -0.400000 -0.536000 0.728000 -1.000000 -0.602500 -0.115100 -0.504000 -0.464000 0.712000 -0.992300 -0.602500 -0.121900 -0.520000 -0.480000 0.696000 -1.000000 -0.611000 -0.121900 -0.528000 -0.480000 0.696000 -0.950000 -0.602500 -0.169200 -0.536000 -0.520000 0.656000 -1.000000 -0.652700 -0.168000 -0.488000 -0.568000 0.656000 -0.950000 -0.619400 -0.182900 -0.632000 -0.592000 0.480000 -0.983200 -0.652700 -0.182900 -0.528000 -0.608000 0.584000 -0.950000 -0.619400 -0.243900 -0.600000 -0.584000 -0.536000 -0.979500 -0.652700 -0.243900 -0.672000 -0.664000 -0.304000 -0.950000 -0.602500 -0.260200 -0.544000 -0.504000 -0.664000 -1.000000 -0.652700 -0.268800 -0.592000 -0.512000 -0.608000 -0.990600 -0.602500 -0.304800 -0.488000 -0.376000 -0.784000 -1.000000 -0.614600 -0.304800 -0.488000 -0.376000 -0.776000 -1.000000 -0.602500 -0.311200 -0.448000 -0.336000 -0.816000 -0.990600 -0.602500 -0.304800 -0.488000 -0.376000 -0.784000 -1.000000 -0.552300 -0.319800 -0.248000 0.216000 -0.936000 -0.953900 -0.552300 -0.304800 -0.328000 0.312000 -0.888000 -1.000000 -0.525900 -0.304800 -0.248000 0.496000 -0.824000 -0.950000 -0.552300 -0.303200 -0.304000 0.392000 -0.864000 -1.000000 -0.502100 -0.271100 0.392000 0.584000 -0.696000 -0.950000 -0.502100 -0.277800 0.272000 0.288000 -0.912000 -0.950000 -0.552300 -0.303200 -0.304000 0.392000 -0.864000 -0.900000 -0.502100 -0.284600 -0.008000 -0.096000 -0.992000 -0.900000 -0.552300 -0.278500 -0.424000 -0.592000 -0.672000 -0.856800 -0.502100 -0.304800 0.288000 0.144000 -0.944000 -0.868400 -0.552300 -0.243900 -0.552000 -0.760000 -0.328000 -0.850000 -0.504700 -0.304800 -0.096000 -0.664000 -0.736000 -0.850000 -0.540400 -0.243900 -0.360000 -0.768000 -0.512000 -0.868400 -0.552300 -0.243900 -0.552000 -0.760000 -0.328000 -0.850000 -0.533300 -0.182900 -0.416000 -0.736000 0.528000 -0.876500 -0.552300 -0.182900 -0.528000 -0.672000 0.504000 -0.850000 -0.502100 -0.142100 -0.224000 -0.520000 0.816000 -0.900000 -0.552300 -0.159100 -0.496000 -0.592000 0.632000 -0.900000 -0.502100 -0.123800 -0.168000 -0.208000 0.960000 -0.940600 -0.552300 -0.121900 -0.512000 -0.272000 0.808000 -0.950000 -0.502100 -0.136000 -0.296000 0.400000 0.864000 -0.950000 -0.531200 -0.121900 -0.376000 0.368000 0.840000 -0.940600 -0.552300 -0.121900 -0.512000 -0.272000 0.808000 -0.950000 -0.552300 -0.115100 -0.432000 -0.368000 0.816000 -0.950000 -0.560000 -0.121900 -0.400000 -0.536000 0.728000 -0.940600 -0.552300 -0.121900 -0.512000 -0.272000 0.808000 -0.950000 -0.602500 -0.169200 -0.536000 -0.520000 0.656000 -0.900000 -0.552300 -0.159100 -0.496000 -0.592000 0.632000 -0.935000 -0.602500 -0.182900 -0.552000 -0.552000 0.608000 -0.900000 -0.573700 -0.182900 -0.608000 -0.704000 0.344000 -0.933200 -0.602500 -0.243900 -0.584000 -0.624000 -0.512000 -0.900000 -0.578300 -0.243900 -0.552000 -0.704000 -0.440000 -0.950000 -0.602500 -0.260200 -0.544000 -0.504000 -0.664000 -0.900000 -0.552300 -0.278500 -0.424000 -0.592000 -0.672000 -0.950000 -0.552300 -0.303200 -0.304000 0.392000 -0.864000 -0.950000 -0.602500 -0.260200 -0.544000 -0.504000 -0.664000 -0.953900 -0.552300 -0.304800 -0.328000 0.312000 -0.888000 -0.990600 -0.602500 -0.304800 -0.488000 -0.376000 -0.784000 -0.990600 -0.602500 -0.304800 -0.488000 -0.376000 -0.784000 -0.550000 -0.242100 -0.060900 -0.400000 -0.536000 0.736000 -0.550000 -0.242100 -0.060900 -0.400000 -0.536000 0.736000 -0.550000 -0.200800 -0.034900 0.016000 -0.040000 0.992000 -0.562800 -0.251000 -0.060900 -0.368000 -0.568000 0.720000 -0.600000 -0.200800 -0.056500 0.336000 0.448000 0.816000 -0.600000 -0.251000 -0.042400 -0.104000 -0.208000 0.968000 -0.608400 -0.200800 -0.060900 0.360000 0.488000 0.792000 -0.650000 -0.251000 -0.056300 0.424000 -0.024000 0.896000 -0.650000 -0.242600 -0.060900 0.392000 0.384000 0.824000 -0.657600 -0.251000 -0.060900 0.456000 -0.072000 0.880000 -0.650000 -0.251000 -0.056300 0.424000 -0.024000 0.896000 -0.650000 -0.258100 -0.060900 0.392000 -0.456000 0.792000 -0.600000 -0.251000 -0.042400 -0.104000 -0.208000 0.968000 -0.600000 -0.272000 -0.060900 -0.264000 -0.632000 0.720000 -0.562800 -0.251000 -0.060900 -0.368000 -0.568000 0.720000 -0.600000 -0.301200 -0.098800 -0.176000 -0.576000 0.792000 -0.550000 -0.251000 -0.069700 -0.416000 -0.584000 0.688000 -0.552600 -0.301200 -0.121900 -0.368000 -0.384000 0.840000 -0.550000 -0.300100 -0.121900 -0.624000 -0.616000 0.472000 -0.550000 -0.301200 -0.123600 -0.624000 -0.440000 0.632000 -0.552600 -0.301200 -0.121900 -0.368000 -0.384000 0.840000 -0.550000 -0.317100 -0.121900 -0.368000 0.064000 0.920000 -0.600000 -0.333000 -0.121900 0.024000 -0.312000 0.944000 -0.558500 -0.351500 -0.121900 0.208000 -0.648000 0.728000 -0.600000 -0.351500 -0.136300 0.144000 -0.792000 0.584000 -0.550000 -0.353000 -0.121900 -0.032000 -0.832000 0.536000 -0.600000 -0.392700 -0.182900 -0.184000 -0.752000 0.624000 -0.550000 -0.389500 -0.182900 -0.304000 -0.784000 0.528000 -0.600000 -0.401700 -0.203000 -0.208000 -0.872000 0.432000 -0.550000 -0.401700 -0.218900 -0.128000 -0.904000 0.392000 -0.600000 -0.414700 -0.243900 -0.184000 -0.936000 0.272000 -0.550000 -0.409700 -0.243900 -0.144000 -0.944000 0.272000 -0.600000 -0.422100 -0.304800 -0.120000 -0.768000 -0.616000 -0.550000 -0.415900 -0.304800 -0.192000 -0.848000 -0.480000 -0.600000 -0.401700 -0.327900 -0.024000 -0.544000 -0.832000 -0.550000 -0.401700 -0.333700 -0.144000 -0.688000 -0.704000 -0.600000 -0.351500 -0.337900 0.040000 -0.080000 -0.992000 -0.550000 -0.351500 -0.364500 0.120000 -0.104000 -0.984000 -0.600000 -0.301200 -0.352300 -0.528000 -0.312000 -0.776000 -0.550000 -0.316300 -0.304800 -0.472000 0.688000 -0.536000 -0.567500 -0.301200 -0.304800 -0.696000 0.400000 -0.584000 -0.550000 -0.301200 -0.279200 -0.712000 0.120000 -0.680000 -0.550000 -0.272400 -0.304800 -0.680000 -0.440000 -0.576000 -0.550000 -0.272400 -0.304800 -0.680000 -0.440000 -0.576000 -0.616700 0.401700 0.000000 0.496000 0.864000 -0.032000 -0.616700 0.401700 0.000000 0.496000 0.864000 -0.032000 -0.650000 0.368200 0.000000 0.792000 0.584000 -0.144000 -0.600000 0.401700 -0.057700 0.168000 0.920000 -0.344000 -0.650000 0.351500 -0.057700 0.800000 0.552000 -0.208000 -0.600000 0.400600 -0.060900 -0.072000 0.912000 -0.384000 -0.648900 0.351500 -0.060900 0.576000 0.600000 -0.544000 -0.600000 0.351500 -0.101600 0.448000 0.496000 -0.736000 -0.650000 0.350500 -0.060900 0.712000 0.536000 -0.440000 -0.600000 0.310600 -0.121900 0.480000 0.424000 -0.760000 -0.650000 0.301200 -0.100800 0.528000 0.504000 -0.672000 -0.608400 0.301200 -0.121900 0.448000 0.488000 -0.744000 -0.600000 0.310600 -0.121900 0.480000 0.424000 -0.760000 -0.600000 0.301200 -0.128700 0.472000 0.520000 -0.704000 -0.600000 0.301200 -0.128700 0.472000 0.520000 -0.704000 -0.648900 0.351500 -0.060900 0.576000 0.600000 -0.544000 -0.648900 0.351500 -0.060900 0.576000 0.600000 -0.544000 -0.650000 0.350500 -0.060900 0.712000 0.536000 -0.440000 -0.650000 0.351500 -0.057700 0.800000 0.552000 -0.208000 -0.680100 0.301200 -0.060900 0.752000 0.544000 -0.368000 -0.660900 0.351500 0.000000 0.832000 0.512000 -0.176000 -0.685300 0.301200 0.000000 0.832000 0.536000 -0.104000 -0.680100 0.301200 -0.060900 0.752000 0.544000 -0.368000 -0.700000 0.279600 0.000000 0.792000 0.600000 -0.048000 -0.700000 0.278700 -0.060900 0.648000 0.584000 -0.472000 -0.700000 0.278700 -0.060900 0.648000 0.584000 -0.472000 -0.600000 -0.194800 -0.060900 0.352000 0.496000 0.784000 -0.600000 -0.194800 -0.060900 0.352000 0.496000 0.784000 -0.608400 -0.200800 -0.060900 0.360000 0.488000 0.792000 -0.600000 -0.200800 -0.056500 0.336000 0.448000 0.816000 -0.600000 -0.200800 -0.056500 0.336000 0.448000 0.816000 -0.650000 0.368200 0.000000 0.792000 0.584000 -0.144000 -0.650000 0.368200 0.000000 0.792000 0.584000 -0.144000 -0.650000 0.351500 -0.057700 0.800000 0.552000 -0.208000 -0.660900 0.351500 0.000000 0.832000 0.512000 -0.176000 -0.660900 0.351500 0.000000 0.832000 0.512000 -0.176000 -0.650000 0.000000 -0.040500 0.104000 -0.944000 0.296000 -0.650000 0.000000 -0.040500 0.104000 -0.944000 0.296000 -0.686800 0.000000 -0.060900 0.208000 -0.960000 0.144000 -0.650000 -0.010200 -0.060900 0.168000 -0.784000 0.592000 -0.698200 0.000000 -0.121900 0.296000 -0.952000 0.032000 -0.650000 -0.033500 -0.121900 0.512000 -0.672000 0.520000 -0.687300 0.000000 -0.182900 0.648000 -0.600000 -0.456000 -0.650000 -0.048900 -0.182900 0.792000 -0.584000 0.152000 -0.653800 0.000000 -0.243900 0.576000 -0.112000 -0.808000 -0.650000 -0.016900 -0.243900 0.704000 -0.184000 -0.672000 -0.650000 -0.048900 -0.182900 0.792000 -0.584000 0.152000 -0.637200 -0.050200 -0.243900 0.840000 -0.080000 -0.528000 -0.649100 -0.050200 -0.182900 0.816000 -0.544000 0.144000 -0.650000 -0.048900 -0.182900 0.792000 -0.584000 0.152000 -0.638000 -0.050200 -0.121900 0.800000 -0.536000 0.256000 -0.650000 -0.033500 -0.121900 0.512000 -0.672000 0.520000 -0.650000 -0.033500 -0.121900 0.512000 -0.672000 0.520000 -0.800000 -0.015400 0.000000 -0.560000 -0.800000 0.184000 -0.800000 -0.015400 0.000000 -0.560000 -0.800000 0.184000 -0.772100 0.000000 0.000000 -0.504000 -0.832000 0.224000 -0.800000 -0.024700 -0.060900 -0.616000 -0.776000 0.088000 -0.753100 0.000000 -0.060900 -0.472000 -0.872000 0.000000 -0.800000 -0.027900 -0.121900 -0.664000 -0.736000 -0.072000 -0.756600 0.000000 -0.121900 -0.496000 -0.856000 -0.080000 -0.800000 -0.017800 -0.182900 -0.616000 -0.680000 -0.376000 -0.776700 0.000000 -0.182900 -0.576000 -0.728000 -0.360000 -0.800000 0.000000 -0.217200 -0.656000 -0.464000 -0.584000 -0.800000 0.000000 -0.217200 -0.656000 -0.464000 -0.584000 -0.900000 0.131100 0.000000 0.480000 0.848000 0.192000 -0.900000 0.131100 0.000000 0.480000 0.848000 0.192000 -0.950000 0.102000 0.000000 0.472000 0.864000 0.120000 -0.900000 0.143500 -0.060900 0.528000 0.808000 -0.240000 -0.950000 0.106300 -0.060900 0.576000 0.776000 -0.240000 -0.900000 0.127900 -0.121900 0.560000 0.776000 -0.264000 -0.950000 0.100400 -0.078300 0.560000 0.768000 -0.304000 -0.931600 0.100400 -0.121900 0.600000 0.744000 -0.272000 -0.950000 0.086300 -0.121900 0.544000 0.784000 -0.280000 -0.912000 0.100400 -0.182900 0.600000 0.704000 -0.360000 -0.950000 0.069900 -0.182900 0.544000 0.736000 -0.392000 -0.900000 0.100400 -0.203200 0.536000 0.688000 -0.472000 -0.950000 0.050200 -0.224500 0.472000 0.712000 -0.504000 -0.900000 0.070800 -0.243900 -0.096000 0.744000 -0.656000 -0.929600 0.050200 -0.243900 0.432000 0.672000 -0.584000 -0.900000 0.050200 -0.268900 0.208000 0.672000 -0.696000 -0.950000 0.037500 -0.243900 0.432000 0.688000 -0.576000 -0.900000 0.016700 -0.304800 -0.152000 0.720000 -0.664000 -0.950000 0.000000 -0.291100 0.424000 0.536000 -0.720000 -0.927400 0.000000 -0.304800 0.400000 0.560000 -0.720000 -0.950000 -0.016600 -0.304800 0.448000 0.520000 -0.720000 -0.900000 0.000000 -0.329500 -0.080000 0.648000 -0.744000 -0.950000 -0.050200 -0.338500 0.440000 0.400000 -0.800000 -0.900000 -0.050200 -0.348300 -0.256000 0.192000 -0.944000 -0.950000 -0.100400 -0.351000 0.336000 0.064000 -0.936000 -0.900000 -0.100400 -0.341700 -0.464000 -0.104000 -0.872000 -0.950000 -0.150600 -0.345500 -0.032000 0.064000 -0.992000 -0.900000 -0.150600 -0.332000 -0.672000 -0.328000 -0.656000 -0.900000 -0.150600 -0.332000 -0.672000 -0.328000 -0.656000 -0.995800 -0.200800 0.000000 -0.648000 -0.704000 0.264000 -0.995800 -0.200800 0.000000 -0.648000 -0.704000 0.264000 -0.950000 -0.168100 0.000000 -0.640000 -0.744000 0.184000 -0.973000 -0.200800 -0.060900 -0.584000 -0.760000 0.264000 -0.950000 -0.183700 -0.060900 -0.632000 -0.728000 0.232000 -0.950500 -0.200800 -0.121900 -0.632000 -0.744000 0.192000 -0.950000 -0.200400 -0.121900 -0.720000 -0.672000 0.136000 -0.950000 -0.200800 -0.124000 -0.680000 -0.712000 0.160000 -0.950000 -0.200800 -0.124000 -0.680000 -0.712000 0.160000 --0.910500 0.251000 -0.121900 0.344000 0.880000 -0.304000 --0.910500 0.251000 -0.121900 0.344000 0.880000 -0.304000 --0.900000 0.246900 -0.121900 0.360000 0.872000 -0.304000 --0.900000 0.251000 -0.101700 0.376000 0.896000 -0.216000 --0.900000 0.251000 -0.101700 0.376000 0.896000 -0.216000 --0.900000 -0.502100 -0.104000 -0.752000 0.000000 0.656000 --0.900000 -0.502100 -0.104000 -0.752000 0.000000 0.656000 --0.900000 -0.511500 -0.121900 -0.520000 -0.664000 0.528000 --0.906100 -0.502100 -0.121900 -0.920000 0.072000 0.376000 --0.900000 -0.542100 -0.182900 -0.808000 -0.560000 0.136000 --0.925200 -0.502100 -0.182900 -0.976000 -0.008000 0.208000 --0.900000 -0.551700 -0.243900 -0.808000 -0.568000 -0.120000 --0.929300 -0.502100 -0.243900 -0.992000 0.064000 -0.008000 --0.900000 -0.539600 -0.304800 -0.720000 -0.488000 -0.480000 --0.920600 -0.502100 -0.304800 -0.888000 -0.288000 -0.344000 --0.900000 -0.502100 -0.352600 -0.672000 0.128000 -0.720000 --0.900000 -0.539600 -0.304800 -0.720000 -0.488000 -0.480000 --0.864000 -0.502100 -0.365800 -0.304000 0.480000 -0.816000 --0.891900 -0.552300 -0.304800 -0.800000 -0.568000 -0.136000 --0.860100 -0.552300 -0.365800 -0.680000 -0.432000 -0.584000 --0.850000 -0.602000 -0.304800 -0.640000 -0.736000 -0.184000 --0.850000 -0.564700 -0.365800 -0.608000 -0.528000 -0.584000 --0.849200 -0.602500 -0.304800 -0.536000 -0.720000 -0.432000 --0.806700 -0.602500 -0.365800 -0.520000 -0.656000 -0.536000 --0.800000 -0.636000 -0.304800 -0.536000 -0.792000 -0.272000 --0.800000 -0.607700 -0.365800 -0.488000 -0.640000 -0.584000 --0.750000 -0.652200 -0.304800 -0.040000 -0.952000 -0.288000 --0.750000 -0.628000 -0.365800 -0.232000 -0.808000 -0.528000 --0.734200 -0.652700 -0.304800 -0.024000 -0.976000 -0.192000 --0.700000 -0.639000 -0.365800 -0.040000 -0.920000 -0.376000 --0.700000 -0.652700 -0.309000 0.024000 -0.952000 -0.296000 --0.650000 -0.641900 -0.365800 -0.024000 -0.952000 -0.280000 --0.688500 -0.652700 -0.304800 0.080000 -0.992000 -0.064000 --0.650000 -0.650400 -0.304800 0.048000 -0.992000 0.096000 --0.700000 -0.652700 -0.298900 0.056000 -0.976000 0.184000 --0.650000 -0.641500 -0.243900 0.040000 -0.976000 0.168000 --0.700000 -0.645500 -0.243900 -0.008000 -0.984000 0.160000 --0.650000 -0.630900 -0.182900 0.008000 -0.968000 0.232000 --0.700000 -0.633400 -0.182900 -0.064000 -0.960000 0.248000 --0.650000 -0.615500 -0.121900 -0.008000 -0.952000 0.304000 --0.700000 -0.614700 -0.121900 -0.136000 -0.888000 0.424000 --0.650000 -0.602500 -0.069700 -0.072000 -0.800000 0.584000 --0.700000 -0.602500 -0.083600 -0.192000 -0.680000 0.704000 --0.650000 -0.594800 -0.060900 -0.368000 -0.640000 0.664000 --0.700000 -0.552300 -0.082500 -0.736000 -0.280000 0.608000 --0.685200 -0.552300 -0.060900 -0.696000 -0.384000 0.592000 --0.700000 -0.507800 -0.060900 -0.864000 -0.200000 0.448000 --0.700000 -0.507800 -0.060900 -0.864000 -0.200000 0.448000 --0.868200 -0.552300 -0.121900 -0.520000 -0.224000 0.816000 --0.868200 -0.552300 -0.121900 -0.520000 -0.224000 0.816000 --0.850000 -0.552300 -0.082300 -0.704000 -0.480000 0.504000 --0.850000 -0.569100 -0.121900 -0.488000 -0.776000 0.384000 --0.800000 -0.552300 -0.095900 0.424000 0.264000 0.864000 --0.800000 -0.584500 -0.121900 -0.288000 -0.544000 0.776000 --0.750000 -0.552300 -0.119400 0.072000 0.512000 0.848000 --0.764000 -0.602500 -0.121900 -0.176000 -0.816000 0.544000 --0.750000 -0.602500 -0.116200 -0.176000 -0.808000 0.544000 --0.750000 -0.605000 -0.121900 -0.152000 -0.872000 0.456000 --0.700000 -0.602500 -0.083600 -0.192000 -0.680000 0.704000 --0.700000 -0.614700 -0.121900 -0.136000 -0.888000 0.424000 --0.750000 -0.605000 -0.121900 -0.152000 -0.872000 0.456000 --0.700000 -0.633400 -0.182900 -0.064000 -0.960000 0.248000 --0.750000 -0.630100 -0.182900 -0.144000 -0.912000 0.360000 --0.700000 -0.645500 -0.243900 -0.008000 -0.984000 0.160000 --0.750000 -0.646000 -0.243900 -0.088000 -0.984000 0.144000 --0.700000 -0.652700 -0.298900 0.056000 -0.976000 0.184000 --0.750000 -0.652200 -0.304800 -0.040000 -0.952000 -0.288000 --0.734200 -0.652700 -0.304800 -0.024000 -0.976000 -0.192000 --0.700000 -0.652700 -0.298900 0.056000 -0.976000 0.184000 --0.700000 -0.653800 -0.304800 0.056000 -0.992000 -0.080000 --0.688500 -0.652700 -0.304800 0.080000 -0.992000 -0.064000 --0.700000 -0.652700 -0.309000 0.024000 -0.952000 -0.296000 --0.700000 -0.653800 -0.304800 0.056000 -0.992000 -0.080000 --0.734200 -0.652700 -0.304800 -0.024000 -0.976000 -0.192000 --0.734200 -0.652700 -0.304800 -0.024000 -0.976000 -0.192000 --0.804300 0.200800 -0.121900 0.384000 0.872000 -0.288000 --0.804300 0.200800 -0.121900 0.384000 0.872000 -0.288000 --0.800000 0.198900 -0.121900 0.384000 0.872000 -0.288000 --0.800000 0.200800 -0.113900 0.392000 0.880000 -0.256000 --0.800000 0.200800 -0.113900 0.392000 0.880000 -0.256000 --0.762700 -0.401700 -0.060900 -0.840000 -0.496000 0.168000 --0.762700 -0.401700 -0.060900 -0.840000 -0.496000 0.168000 --0.771000 -0.401700 -0.121900 -0.872000 -0.456000 0.128000 --0.750000 -0.426100 -0.060900 -0.864000 -0.448000 0.200000 --0.750000 -0.448400 -0.121900 -0.880000 -0.432000 0.160000 --0.735400 -0.451900 -0.060900 -0.768000 -0.512000 0.360000 --0.748200 -0.451900 -0.121900 -0.880000 -0.440000 0.160000 --0.701200 -0.502100 -0.060900 -0.816000 -0.416000 0.392000 --0.723300 -0.502100 -0.121900 -0.896000 -0.224000 0.368000 --0.748200 -0.451900 -0.121900 -0.880000 -0.440000 0.160000 --0.749300 -0.502100 -0.182900 -0.920000 -0.232000 0.288000 --0.750000 -0.451900 -0.133400 -0.896000 -0.392000 0.184000 --0.750000 -0.499500 -0.182900 -0.936000 -0.200000 0.264000 --0.757600 -0.451900 -0.182900 -0.952000 -0.232000 0.184000 --0.750000 -0.502100 -0.184800 -0.496000 0.696000 0.496000 --0.769800 -0.451900 -0.243900 -0.952000 -0.080000 0.272000 --0.800000 -0.502100 -0.227500 0.432000 0.824000 0.352000 --0.800000 -0.496000 -0.243900 0.424000 0.840000 0.320000 --0.820300 -0.502100 -0.182900 0.496000 0.792000 0.344000 --0.850000 -0.480800 -0.243900 0.376000 0.912000 0.152000 --0.850000 -0.490700 -0.182900 0.328000 0.896000 0.288000 --0.896800 -0.451900 -0.243900 0.600000 0.776000 0.136000 --0.900000 -0.462200 -0.182900 0.320000 0.888000 0.304000 --0.900000 -0.451900 -0.229200 0.512000 0.832000 0.168000 --0.896800 -0.451900 -0.243900 0.600000 0.776000 0.136000 --0.900000 -0.449600 -0.243900 0.496000 0.856000 0.136000 --0.891000 -0.451900 -0.304800 0.528000 0.824000 -0.192000 --0.900000 -0.446300 -0.304800 0.160000 0.912000 -0.360000 --0.900000 -0.451900 -0.318500 0.104000 0.872000 -0.464000 --0.912200 -0.451900 -0.304800 -0.496000 0.720000 -0.464000 --0.900000 -0.446300 -0.304800 0.160000 0.912000 -0.360000 --0.921000 -0.451900 -0.243900 -0.184000 0.968000 0.160000 --0.900000 -0.449600 -0.243900 0.496000 0.856000 0.136000 --0.900000 -0.451900 -0.229200 0.512000 0.832000 0.168000 --0.900000 -0.451900 -0.229200 0.512000 0.832000 0.168000 --0.700000 -0.602500 -0.083600 -0.192000 -0.680000 0.704000 --0.700000 -0.602500 -0.083600 -0.192000 -0.680000 0.704000 --0.750000 -0.602500 -0.116200 -0.176000 -0.808000 0.544000 --0.700000 -0.552300 -0.082500 -0.736000 -0.280000 0.608000 --0.750000 -0.552300 -0.119400 0.072000 0.512000 0.848000 --0.750000 -0.552300 -0.119400 0.072000 0.512000 0.848000 --0.650000 -0.594800 -0.060900 -0.368000 -0.640000 0.664000 --0.650000 -0.594800 -0.060900 -0.368000 -0.640000 0.664000 --0.650000 -0.602500 -0.069700 -0.072000 -0.800000 0.584000 --0.600000 -0.601900 -0.060900 -0.072000 -0.808000 0.568000 --0.600000 -0.602500 -0.062100 -0.056000 -0.816000 0.560000 --0.550000 -0.588500 -0.060900 0.224000 -0.888000 0.384000 --0.550000 -0.602500 -0.100200 0.256000 -0.912000 0.288000 --0.500000 -0.570000 -0.060900 0.480000 -0.800000 0.328000 --0.531000 -0.602500 -0.121900 0.248000 -0.920000 0.272000 --0.500000 -0.589900 -0.121900 0.408000 -0.832000 0.352000 --0.500000 -0.602500 -0.155300 0.000000 -0.920000 0.376000 --0.531000 -0.602500 -0.121900 0.248000 -0.920000 0.272000 --0.500000 -0.610400 -0.182900 -0.136000 -0.936000 0.304000 --0.550000 -0.606400 -0.121900 0.192000 -0.952000 0.216000 --0.550000 -0.618800 -0.182900 0.168000 -0.944000 0.272000 --0.600000 -0.616000 -0.121900 0.080000 -0.960000 0.256000 --0.600000 -0.629300 -0.182900 0.072000 -0.968000 0.224000 --0.650000 -0.615500 -0.121900 -0.008000 -0.952000 0.304000 --0.650000 -0.630900 -0.182900 0.008000 -0.968000 0.232000 --0.600000 -0.629300 -0.182900 0.072000 -0.968000 0.224000 --0.650000 -0.641500 -0.243900 0.040000 -0.976000 0.168000 --0.600000 -0.640700 -0.243900 0.080000 -0.976000 0.192000 --0.650000 -0.650400 -0.304800 0.048000 -0.992000 0.096000 --0.600000 -0.650800 -0.304800 0.064000 -0.992000 0.000000 --0.650000 -0.641900 -0.365800 -0.024000 -0.952000 -0.280000 --0.600000 -0.645500 -0.365800 0.016000 -0.968000 -0.216000 --0.650000 -0.621300 -0.426800 -0.080000 -0.904000 -0.400000 --0.600000 -0.630300 -0.426800 -0.072000 -0.944000 -0.312000 --0.600000 -0.645500 -0.365800 0.016000 -0.968000 -0.216000 --0.550000 -0.626200 -0.426800 0.144000 -0.960000 -0.232000 --0.550000 -0.637200 -0.365800 0.152000 -0.968000 -0.168000 --0.500000 -0.621400 -0.426800 0.072000 -0.968000 -0.232000 --0.500000 -0.633000 -0.365800 -0.088000 -0.968000 -0.200000 --0.450000 -0.629300 -0.426800 -0.048000 -0.904000 -0.416000 --0.450000 -0.645700 -0.365800 -0.144000 -0.904000 -0.392000 --0.400000 -0.621700 -0.426800 0.392000 -0.856000 -0.304000 --0.405700 -0.652700 -0.365800 -0.144000 -0.920000 -0.344000 --0.400000 -0.652700 -0.368100 -0.128000 -0.872000 -0.456000 --0.400000 -0.652700 -0.368100 -0.128000 -0.872000 -0.456000 --0.650000 -0.602500 -0.069700 -0.072000 -0.800000 0.584000 --0.650000 -0.602500 -0.069700 -0.072000 -0.800000 0.584000 --0.650000 -0.615500 -0.121900 -0.008000 -0.952000 0.304000 --0.600000 -0.602500 -0.062100 -0.056000 -0.816000 0.560000 --0.600000 -0.616000 -0.121900 0.080000 -0.960000 0.256000 --0.550000 -0.602500 -0.100200 0.256000 -0.912000 0.288000 --0.550000 -0.606400 -0.121900 0.192000 -0.952000 0.216000 --0.531000 -0.602500 -0.121900 0.248000 -0.920000 0.272000 --0.531000 -0.602500 -0.121900 0.248000 -0.920000 0.272000 --0.554400 -0.050200 -0.060900 0.944000 0.280000 0.128000 --0.554400 -0.050200 -0.060900 0.944000 0.280000 0.128000 --0.586600 -0.050200 -0.121900 0.872000 0.224000 -0.424000 --0.550000 -0.066800 -0.060900 0.944000 0.320000 -0.008000 --0.578300 -0.100400 -0.121900 0.848000 0.312000 -0.424000 --0.550000 -0.100400 -0.079500 0.552000 0.552000 -0.616000 --0.550000 -0.145600 -0.121900 0.512000 0.792000 -0.312000 --0.578300 -0.100400 -0.121900 0.848000 0.312000 -0.424000 --0.550000 -0.150600 -0.142400 0.376000 0.896000 -0.200000 --0.594100 -0.100400 -0.182900 0.816000 0.296000 -0.480000 --0.561800 -0.150600 -0.182900 0.544000 0.784000 -0.280000 --0.550000 -0.150600 -0.142400 0.376000 0.896000 -0.200000 --0.550000 -0.155500 -0.182900 0.296000 0.920000 -0.232000 --0.550000 -0.155500 -0.182900 0.296000 0.920000 -0.232000 --0.452400 -0.100400 -0.060900 -0.344000 0.936000 -0.016000 --0.452400 -0.100400 -0.060900 -0.344000 0.936000 -0.016000 --0.450000 -0.100400 -0.065100 -0.512000 0.824000 -0.200000 --0.450000 -0.099400 -0.060900 -0.760000 0.616000 0.160000 --0.450000 -0.099400 -0.060900 -0.760000 0.616000 0.160000 --0.450000 -0.512800 -0.060900 0.208000 -0.760000 0.608000 --0.450000 -0.512800 -0.060900 0.208000 -0.760000 0.608000 --0.478800 -0.552300 -0.060900 0.704000 -0.592000 0.376000 --0.450000 -0.549200 -0.121900 -0.080000 -0.800000 0.584000 --0.452200 -0.552300 -0.121900 0.864000 0.184000 0.464000 --0.450000 -0.552300 -0.127200 0.616000 -0.144000 0.768000 --0.450000 -0.549200 -0.121900 -0.080000 -0.800000 0.584000 --0.440600 -0.552300 -0.121900 -0.264000 -0.768000 0.568000 --0.450000 -0.512800 -0.060900 0.208000 -0.760000 0.608000 --0.400000 -0.552300 -0.100200 0.624000 -0.512000 0.584000 --0.400000 -0.527700 -0.060900 0.080000 -0.768000 0.624000 --0.393200 -0.552300 -0.121900 0.872000 -0.352000 0.320000 --0.380200 -0.502100 -0.060900 0.648000 -0.616000 0.432000 --0.350000 -0.503000 -0.121900 0.232000 -0.880000 0.400000 --0.350000 -0.502100 -0.119400 0.240000 -0.864000 0.424000 --0.380200 -0.502100 -0.060900 0.648000 -0.616000 0.432000 --0.350000 -0.453900 -0.060900 0.248000 -0.624000 0.728000 --0.350000 -0.453900 -0.060900 0.248000 -0.624000 0.728000 --0.450000 -0.602500 -0.084100 -0.232000 -0.736000 0.624000 --0.450000 -0.602500 -0.084100 -0.232000 -0.736000 0.624000 --0.450000 -0.558900 -0.121900 0.808000 0.320000 0.488000 --0.410500 -0.602500 -0.121900 0.456000 -0.632000 0.616000 --0.450000 -0.552300 -0.127200 0.616000 -0.144000 0.768000 --0.400000 -0.602500 -0.131300 0.560000 -0.576000 0.584000 --0.440600 -0.552300 -0.121900 -0.264000 -0.768000 0.568000 --0.400000 -0.588000 -0.121900 0.672000 -0.144000 0.720000 --0.400000 -0.552300 -0.100200 0.624000 -0.512000 0.584000 --0.393200 -0.552300 -0.121900 0.872000 -0.352000 0.320000 --0.400000 -0.588000 -0.121900 0.672000 -0.144000 0.720000 --0.379200 -0.552300 -0.182900 0.864000 -0.416000 0.264000 --0.400000 -0.602500 -0.131300 0.560000 -0.576000 0.584000 --0.386500 -0.602500 -0.182900 0.376000 -0.032000 0.920000 --0.379200 -0.552300 -0.182900 0.864000 -0.416000 0.264000 --0.371400 -0.602500 -0.243900 0.928000 0.016000 0.352000 --0.363900 -0.552300 -0.243900 0.816000 -0.480000 0.304000 --0.379200 -0.552300 -0.182900 0.864000 -0.416000 0.264000 --0.350000 -0.535600 -0.243900 0.360000 -0.840000 0.384000 --0.350000 -0.518400 -0.182900 -0.088000 -0.928000 0.360000 --0.379200 -0.552300 -0.182900 0.864000 -0.416000 0.264000 --0.350000 -0.503000 -0.121900 0.232000 -0.880000 0.400000 --0.393200 -0.552300 -0.121900 0.872000 -0.352000 0.320000 --0.393200 -0.552300 -0.121900 0.872000 -0.352000 0.320000 --0.350000 0.148000 -0.060900 -0.504000 0.552000 0.656000 --0.350000 0.148000 -0.060900 -0.504000 0.552000 0.656000 --0.361800 0.100400 -0.060900 -0.920000 0.112000 -0.352000 --0.350000 0.100400 -0.076700 -0.736000 0.256000 -0.616000 --0.358600 0.050200 -0.060900 -0.920000 0.168000 -0.328000 --0.350000 0.050200 -0.078800 -0.832000 0.272000 -0.472000 --0.350000 0.100400 -0.076700 -0.736000 0.256000 -0.616000 --0.335400 0.050200 -0.121900 -0.752000 0.472000 -0.456000 --0.317300 0.100400 -0.121900 -0.712000 0.264000 -0.640000 --0.317300 0.100400 -0.121900 -0.712000 0.264000 -0.640000 --0.377800 0.000000 -0.060900 -0.864000 0.424000 -0.248000 --0.377800 0.000000 -0.060900 -0.864000 0.424000 -0.248000 --0.400000 -0.037800 -0.060900 -0.728000 0.664000 0.152000 --0.372200 0.000000 -0.121900 -0.848000 0.480000 -0.200000 --0.400000 -0.050200 -0.118700 -0.832000 0.528000 -0.160000 --0.399400 -0.050200 -0.121900 -0.760000 0.504000 -0.392000 --0.400000 -0.050900 -0.121900 -0.736000 0.536000 -0.408000 --0.400000 -0.050900 -0.121900 -0.736000 0.536000 -0.408000 --0.350000 0.301200 -0.064600 -0.624000 0.064000 -0.768000 --0.350000 0.301200 -0.064600 -0.624000 0.064000 -0.768000 --0.300000 0.301200 -0.089300 -0.344000 0.056000 -0.936000 --0.350000 0.251000 -0.067500 -0.624000 0.048000 -0.768000 --0.300000 0.251000 -0.090000 -0.368000 0.088000 -0.920000 --0.350000 0.200800 -0.076700 -0.368000 -0.104000 -0.920000 --0.300000 0.200800 -0.077300 -0.504000 0.240000 -0.824000 --0.350000 0.153200 -0.060900 -0.608000 -0.784000 0.016000 --0.300000 0.150600 -0.105900 -0.768000 0.536000 -0.320000 --0.346000 0.150600 -0.060900 -0.768000 -0.144000 0.616000 --0.346000 0.150600 -0.060900 -0.768000 -0.144000 0.616000 --0.300000 0.401700 -0.066400 -0.448000 0.440000 -0.768000 --0.300000 0.401700 -0.066400 -0.448000 0.440000 -0.768000 --0.250000 0.401700 -0.091800 -0.416000 0.456000 -0.776000 --0.300000 0.351500 -0.083400 -0.432000 0.176000 -0.880000 --0.250000 0.351500 -0.107800 -0.464000 0.176000 -0.864000 --0.300000 0.301200 -0.089300 -0.344000 0.056000 -0.936000 --0.250000 0.301200 -0.116200 -0.672000 0.120000 -0.720000 --0.300000 0.251000 -0.090000 -0.368000 0.088000 -0.920000 --0.250000 0.268200 -0.121900 -0.464000 0.088000 -0.872000 --0.254200 0.251000 -0.121900 -0.384000 0.088000 -0.912000 --0.300000 0.251000 -0.090000 -0.368000 0.088000 -0.920000 --0.263400 0.200800 -0.121900 -0.480000 0.216000 -0.840000 --0.300000 0.200800 -0.077300 -0.504000 0.240000 -0.824000 --0.295300 0.150600 -0.121900 -0.728000 0.520000 -0.432000 --0.300000 0.150600 -0.105900 -0.768000 0.536000 -0.320000 --0.300000 0.144000 -0.121900 -0.728000 0.496000 -0.456000 --0.300000 0.144000 -0.121900 -0.728000 0.496000 -0.456000 --0.250000 0.401700 -0.091800 -0.416000 0.456000 -0.776000 --0.250000 0.401700 -0.091800 -0.416000 0.456000 -0.776000 --0.208300 0.401700 -0.121900 -0.432000 0.432000 -0.784000 --0.250000 0.351500 -0.107800 -0.464000 0.176000 -0.864000 --0.233300 0.351500 -0.121900 -0.616000 0.184000 -0.752000 --0.250000 0.301200 -0.116200 -0.672000 0.120000 -0.720000 --0.245300 0.301200 -0.121900 -0.680000 0.120000 -0.720000 --0.250000 0.268200 -0.121900 -0.464000 0.088000 -0.872000 --0.250000 0.268200 -0.121900 -0.464000 0.088000 -0.872000 --0.104300 -0.100400 -0.060900 0.528000 0.416000 0.728000 --0.104300 -0.100400 -0.060900 0.528000 0.416000 0.728000 --0.100000 -0.100400 -0.064700 0.496000 0.416000 0.752000 --0.100000 -0.105500 -0.060900 0.480000 0.464000 0.736000 --0.050000 -0.100400 -0.073900 0.136000 0.480000 0.864000 --0.050000 -0.119400 -0.060900 0.168000 0.528000 0.824000 -0.000000 -0.100400 -0.085100 0.096000 0.456000 0.880000 -0.000000 -0.136800 -0.060900 0.088000 0.520000 0.840000 -0.050000 -0.100400 -0.083400 0.000000 0.440000 0.888000 -0.050000 -0.140200 -0.060900 0.152000 0.504000 0.848000 -0.100000 -0.100400 -0.084200 0.032000 0.360000 0.928000 -0.076800 -0.150600 -0.060900 0.208000 0.432000 0.872000 -0.100000 -0.150600 -0.068400 0.184000 0.416000 0.888000 -0.100000 -0.170000 -0.060900 0.256000 0.296000 0.912000 -0.100000 -0.170000 -0.060900 0.256000 0.296000 0.912000 --0.133200 -0.451900 -0.060900 0.584000 -0.656000 0.464000 --0.133200 -0.451900 -0.060900 0.584000 -0.656000 0.464000 --0.100000 -0.415900 -0.060900 0.680000 -0.544000 0.480000 --0.100000 -0.451900 -0.117700 0.624000 -0.664000 0.392000 --0.100000 -0.451900 -0.117700 0.624000 -0.664000 0.392000 --0.150000 -0.502100 -0.111600 0.592000 -0.752000 0.280000 --0.150000 -0.502100 -0.111600 0.592000 -0.752000 0.280000 --0.146100 -0.502100 -0.121900 0.616000 -0.744000 0.232000 --0.150000 -0.505100 -0.121900 0.584000 -0.768000 0.240000 --0.141200 -0.502100 -0.182900 0.696000 -0.688000 0.184000 --0.150000 -0.510100 -0.182900 0.616000 -0.760000 0.168000 --0.125700 -0.502100 -0.243900 0.664000 -0.408000 0.624000 --0.150000 -0.530700 -0.243900 0.632000 -0.664000 0.392000 --0.150000 -0.530700 -0.243900 0.632000 -0.664000 0.392000 --0.078700 0.200800 -0.060900 0.568000 -0.416000 0.704000 --0.078700 0.200800 -0.060900 0.568000 -0.416000 0.704000 --0.050000 0.236000 -0.060900 0.536000 -0.496000 0.672000 --0.050000 0.200800 -0.090500 0.520000 -0.520000 0.672000 --0.050000 0.200800 -0.090500 0.520000 -0.520000 0.672000 --0.100000 0.100400 -0.099400 0.760000 -0.264000 0.584000 --0.100000 0.100400 -0.099400 0.760000 -0.264000 0.584000 --0.089100 0.100400 -0.121900 0.816000 -0.232000 0.520000 --0.100000 0.054100 -0.121900 0.816000 -0.176000 0.544000 --0.100000 0.054100 -0.121900 0.816000 -0.176000 0.544000 --0.050000 -0.370100 -0.060900 0.592000 -0.672000 0.424000 --0.050000 -0.370100 -0.060900 0.592000 -0.672000 0.424000 --0.087700 -0.401700 -0.060900 0.608000 -0.600000 0.504000 --0.050000 -0.398200 -0.121900 0.592000 -0.704000 0.368000 --0.054100 -0.401700 -0.121900 0.656000 -0.688000 0.280000 --0.050000 -0.389600 -0.182900 0.656000 -0.736000 -0.128000 --0.061900 -0.401700 -0.182900 0.744000 -0.648000 -0.120000 --0.050000 -0.380500 -0.243900 0.664000 -0.736000 -0.104000 --0.071000 -0.401700 -0.243900 0.856000 -0.496000 -0.072000 --0.050000 -0.374600 -0.304800 0.584000 -0.672000 -0.448000 --0.073900 -0.401700 -0.304800 0.784000 -0.304000 -0.528000 --0.050000 -0.351500 -0.336900 0.024000 -0.576000 -0.808000 --0.100000 -0.401700 -0.330800 0.576000 -0.152000 -0.792000 --0.100000 -0.351500 -0.338800 0.024000 -0.312000 -0.944000 --0.150000 -0.401700 -0.364300 0.552000 0.080000 -0.824000 --0.150000 -0.351500 -0.350300 0.512000 0.192000 -0.832000 --0.100000 -0.351500 -0.338800 0.024000 -0.312000 -0.944000 --0.150000 -0.301200 -0.318500 -0.024000 0.504000 -0.856000 --0.100000 -0.301200 -0.349000 -0.368000 0.264000 -0.888000 --0.150000 -0.286300 -0.304800 -0.184000 0.480000 -0.848000 --0.100000 -0.251000 -0.333700 -0.512000 0.248000 -0.816000 --0.123600 -0.251000 -0.304800 -0.536000 0.288000 -0.784000 --0.100000 -0.200800 -0.311700 -0.496000 0.128000 -0.856000 --0.108400 -0.200800 -0.304800 -0.496000 -0.048000 -0.856000 --0.123600 -0.251000 -0.304800 -0.536000 0.288000 -0.784000 --0.150000 -0.200800 -0.284500 0.024000 -0.216000 -0.968000 --0.150000 -0.251000 -0.289400 -0.264000 0.272000 -0.920000 --0.196100 -0.200800 -0.304800 0.360000 -0.200000 -0.904000 --0.195100 -0.251000 -0.304800 0.376000 0.112000 -0.912000 --0.150000 -0.251000 -0.289400 -0.264000 0.272000 -0.920000 --0.150000 -0.286300 -0.304800 -0.184000 0.480000 -0.848000 --0.123600 -0.251000 -0.304800 -0.536000 0.288000 -0.784000 --0.123600 -0.251000 -0.304800 -0.536000 0.288000 -0.784000 -0.000000 0.393800 -0.060900 0.224000 0.176000 0.952000 -0.000000 0.393800 -0.060900 0.224000 0.176000 0.952000 --0.005200 0.401700 -0.060900 0.264000 0.168000 0.944000 -0.000000 0.401700 -0.062800 0.256000 0.176000 0.944000 -0.000000 0.401700 -0.062800 0.256000 0.176000 0.944000 -0.000000 0.493800 -0.121900 0.128000 0.960000 -0.232000 -0.000000 0.493800 -0.121900 0.128000 0.960000 -0.232000 -0.000000 0.451900 -0.081100 0.280000 0.456000 0.832000 -0.050000 0.485400 -0.121900 -0.032000 0.904000 -0.408000 -0.050000 0.451900 -0.077800 0.016000 0.408000 0.912000 -0.100000 0.494400 -0.121900 -0.184000 0.952000 -0.216000 -0.100000 0.451900 -0.066700 -0.192000 0.072000 0.976000 -0.138500 0.502100 -0.121900 -0.184000 0.952000 -0.216000 -0.121900 0.451900 -0.060900 -0.112000 0.472000 0.872000 -0.150000 0.502100 -0.119700 0.016000 0.656000 0.752000 -0.150000 0.456100 -0.060900 0.048000 0.664000 0.736000 -0.150000 0.456100 -0.060900 0.048000 0.664000 0.736000 -0.150000 0.503100 -0.121900 0.272000 0.456000 -0.840000 -0.150000 0.503100 -0.121900 0.272000 0.456000 -0.840000 -0.150000 0.502100 -0.119700 0.016000 0.656000 0.752000 -0.138500 0.502100 -0.121900 -0.184000 0.952000 -0.216000 -0.138500 0.502100 -0.121900 -0.184000 0.952000 -0.216000 -0.150000 0.409600 -0.060900 -0.208000 -0.072000 0.968000 -0.150000 0.409600 -0.060900 -0.208000 -0.072000 0.968000 -0.151400 0.401700 -0.060900 -0.480000 -0.416000 0.760000 -0.150000 0.401700 -0.062100 -0.392000 -0.400000 0.816000 -0.150000 0.401700 -0.062100 -0.392000 -0.400000 0.816000 -0.150000 -0.251000 -0.118100 0.224000 -0.792000 0.560000 -0.150000 -0.251000 -0.118100 0.224000 -0.792000 0.560000 -0.161400 -0.251000 -0.121900 0.152000 -0.792000 0.576000 -0.150000 -0.253200 -0.121900 0.192000 -0.808000 0.552000 -0.150000 -0.253200 -0.121900 0.192000 -0.808000 0.552000 -0.250000 0.432000 -0.060900 0.224000 0.624000 0.736000 -0.250000 0.432000 -0.060900 0.224000 0.624000 0.736000 -0.203100 0.451900 -0.060900 0.264000 0.672000 0.680000 -0.250000 0.451900 -0.094000 0.248000 0.784000 0.552000 -0.250000 0.451900 -0.094000 0.248000 0.784000 0.552000 -0.200000 0.352900 -0.060900 -0.368000 -0.496000 0.776000 -0.200000 0.352900 -0.060900 -0.368000 -0.496000 0.776000 -0.201200 0.351500 -0.060900 -0.488000 -0.576000 0.648000 -0.200000 0.351500 -0.062100 -0.312000 -0.640000 0.696000 -0.200000 0.351500 -0.062100 -0.312000 -0.640000 0.696000 -0.200000 -0.041200 -0.121900 0.160000 0.488000 0.856000 -0.200000 -0.041200 -0.121900 0.160000 0.488000 0.856000 -0.222300 -0.050200 -0.121900 0.200000 0.432000 0.872000 -0.200000 -0.050200 -0.116900 0.136000 0.368000 0.912000 -0.200000 -0.050200 -0.116900 0.136000 0.368000 0.912000 -0.300000 0.451900 -0.106900 0.184000 0.864000 0.456000 -0.300000 0.451900 -0.106900 0.184000 0.864000 0.456000 -0.300000 0.458100 -0.121900 0.224000 0.952000 -0.176000 -0.323400 0.451900 -0.121900 0.248000 0.944000 -0.200000 -0.300000 0.451900 -0.131100 0.200000 0.712000 -0.664000 -0.300000 0.451900 -0.131100 0.200000 0.712000 -0.664000 -0.366500 0.200800 -0.121900 -0.760000 -0.624000 0.168000 -0.366500 0.200800 -0.121900 -0.760000 -0.624000 0.168000 -0.400000 0.200800 -0.077800 -0.600000 -0.432000 0.664000 -0.400000 0.152400 -0.121900 -0.688000 -0.712000 -0.048000 -0.400000 0.152400 -0.121900 -0.688000 -0.712000 -0.048000 -0.400000 0.072600 -0.121900 -0.632000 0.256000 0.720000 -0.400000 0.072600 -0.121900 -0.632000 0.256000 0.720000 -0.400000 0.050200 -0.114800 -0.552000 0.256000 0.784000 -0.393200 0.050200 -0.121900 -0.648000 0.352000 0.664000 -0.393200 0.050200 -0.121900 -0.648000 0.352000 0.664000 -0.450000 -0.100400 -0.078400 -0.088000 0.200000 0.968000 -0.450000 -0.100400 -0.078400 -0.088000 0.200000 0.968000 -0.400000 -0.100400 -0.080400 -0.024000 0.176000 0.976000 -0.450000 -0.150600 -0.064700 -0.192000 0.128000 0.968000 -0.400000 -0.150600 -0.068400 -0.344000 -0.312000 0.880000 -0.450000 -0.200800 -0.072200 -0.256000 -0.536000 0.800000 -0.400000 -0.200800 -0.119100 -0.200000 -0.688000 0.688000 -0.450000 -0.227100 -0.121900 -0.296000 -0.712000 0.624000 -0.400000 -0.203000 -0.121900 -0.184000 -0.672000 0.712000 -0.450000 -0.251000 -0.179900 -0.288000 -0.680000 0.664000 -0.400000 -0.249800 -0.182900 0.472000 -0.752000 0.448000 -0.415700 -0.251000 -0.182900 -0.088000 -0.872000 0.480000 -0.400000 -0.249400 -0.243900 0.760000 -0.472000 -0.424000 -0.450000 -0.251000 -0.203800 -0.216000 -0.960000 -0.144000 -0.450000 -0.248400 -0.243900 -0.224000 -0.888000 -0.384000 -0.459300 -0.251000 -0.243900 -0.280000 -0.864000 -0.400000 -0.459300 -0.251000 -0.243900 -0.280000 -0.864000 -0.400000 -0.450000 0.163500 -0.060900 -0.600000 -0.504000 0.608000 -0.450000 0.163500 -0.060900 -0.600000 -0.504000 0.608000 -0.460500 0.150600 -0.060900 -0.624000 -0.512000 0.584000 -0.450000 0.150600 -0.075000 -0.616000 -0.488000 0.608000 -0.450000 0.150600 -0.075000 -0.616000 -0.488000 0.608000 -0.504600 0.100400 -0.060900 -0.704000 -0.248000 0.656000 -0.504600 0.100400 -0.060900 -0.704000 -0.248000 0.656000 -0.500000 0.067400 -0.060900 -0.592000 0.120000 0.792000 -0.500000 0.100400 -0.067100 -0.632000 -0.296000 0.704000 -0.500000 0.100400 -0.067100 -0.632000 -0.296000 0.704000 -0.550000 -0.159500 -0.060900 0.248000 0.472000 0.840000 -0.550000 -0.159500 -0.060900 0.248000 0.472000 0.840000 -0.530700 -0.150600 -0.060900 0.208000 0.504000 0.832000 -0.550000 -0.150600 -0.067100 0.240000 0.480000 0.840000 -0.550000 -0.150600 -0.067100 0.240000 0.480000 0.840000 -0.546800 -0.351500 -0.121900 -0.560000 -0.304000 0.760000 -0.546800 -0.351500 -0.121900 -0.560000 -0.304000 0.760000 -0.550000 -0.317100 -0.121900 -0.368000 0.064000 0.920000 -0.550000 -0.351500 -0.118900 -0.368000 0.056000 0.920000 -0.558500 -0.351500 -0.121900 0.208000 -0.648000 0.728000 -0.550000 -0.353000 -0.121900 -0.032000 -0.832000 0.536000 -0.550000 -0.351500 -0.118900 -0.368000 0.056000 0.920000 -0.546800 -0.351500 -0.121900 -0.560000 -0.304000 0.760000 -0.550000 -0.353000 -0.121900 -0.032000 -0.832000 0.536000 -0.500000 -0.351500 -0.156800 -0.392000 -0.248000 0.880000 -0.550000 -0.389500 -0.182900 -0.304000 -0.784000 0.528000 -0.500000 -0.372900 -0.182900 -0.184000 -0.776000 0.592000 -0.550000 -0.401700 -0.218900 -0.128000 -0.904000 0.392000 -0.500000 -0.400600 -0.243900 0.024000 -0.920000 0.384000 -0.503900 -0.401700 -0.243900 -0.232000 -0.936000 0.256000 -0.500000 -0.400200 -0.304800 -0.176000 -0.672000 -0.712000 -0.502600 -0.401700 -0.304800 -0.320000 -0.840000 -0.416000 -0.500000 -0.351500 -0.354900 -0.384000 -0.472000 -0.784000 -0.550000 -0.401700 -0.333700 -0.144000 -0.688000 -0.704000 -0.550000 -0.351500 -0.364500 0.120000 -0.104000 -0.984000 -0.500000 -0.351500 -0.354900 -0.384000 -0.472000 -0.784000 -0.550000 -0.316300 -0.304800 -0.472000 0.688000 -0.536000 -0.500000 -0.333600 -0.304800 -0.408000 0.824000 -0.376000 -0.550000 -0.301200 -0.279200 -0.712000 0.120000 -0.680000 -0.500000 -0.310500 -0.243900 -0.600000 0.776000 -0.152000 -0.513800 -0.301200 -0.243900 -0.728000 0.592000 -0.328000 -0.500000 -0.316400 -0.182900 -0.704000 0.472000 0.520000 -0.511800 -0.301200 -0.182900 -0.912000 0.352000 0.176000 -0.500000 -0.351500 -0.156800 -0.392000 -0.248000 0.880000 -0.550000 -0.301200 -0.123600 -0.624000 -0.440000 0.632000 -0.546800 -0.351500 -0.121900 -0.560000 -0.304000 0.760000 -0.550000 -0.317100 -0.121900 -0.368000 0.064000 0.920000 -0.550000 -0.317100 -0.121900 -0.368000 0.064000 0.920000 -0.550000 -0.242100 -0.060900 -0.400000 -0.536000 0.736000 -0.550000 -0.242100 -0.060900 -0.400000 -0.536000 0.736000 -0.562800 -0.251000 -0.060900 -0.368000 -0.568000 0.720000 -0.550000 -0.251000 -0.069700 -0.416000 -0.584000 0.688000 -0.550000 -0.251000 -0.069700 -0.416000 -0.584000 0.688000 -0.552600 -0.301200 -0.121900 -0.368000 -0.384000 0.840000 -0.552600 -0.301200 -0.121900 -0.368000 -0.384000 0.840000 -0.600000 -0.301200 -0.098800 -0.176000 -0.576000 0.792000 -0.600000 -0.333000 -0.121900 0.024000 -0.312000 0.944000 -0.650000 -0.301200 -0.100200 0.264000 -0.568000 0.768000 -0.650000 -0.327200 -0.121900 -0.280000 -0.536000 0.792000 -0.700000 -0.301200 -0.068800 0.336000 0.392000 0.848000 -0.679500 -0.351500 -0.121900 -0.424000 -0.464000 0.768000 -0.700000 -0.351500 -0.108700 -0.352000 -0.464000 0.808000 -0.700000 -0.372000 -0.121900 -0.360000 -0.440000 0.816000 -0.750000 -0.351500 -0.097900 0.640000 0.048000 0.760000 -0.737900 -0.401700 -0.121900 -0.352000 -0.448000 0.816000 -0.750000 -0.401700 -0.115900 -0.264000 -0.344000 0.896000 -0.750000 -0.411100 -0.121900 -0.304000 -0.456000 0.824000 -0.800000 -0.401700 -0.115500 0.392000 0.184000 0.896000 -0.800000 -0.418600 -0.121900 0.304000 -0.320000 0.888000 -0.750000 -0.411100 -0.121900 -0.304000 -0.456000 0.824000 -0.800000 -0.451900 -0.135400 0.168000 -0.384000 0.904000 -0.750000 -0.451900 -0.153800 -0.384000 -0.528000 0.752000 -0.800000 -0.502100 -0.171200 -0.360000 -0.648000 0.664000 -0.750000 -0.479900 -0.182900 -0.456000 -0.632000 0.616000 -0.783200 -0.502100 -0.182900 -0.448000 -0.720000 0.512000 -0.750000 -0.502100 -0.236900 -0.448000 -0.776000 0.432000 -0.800000 -0.511100 -0.182900 -0.376000 -0.744000 0.544000 -0.750000 -0.505200 -0.243900 -0.480000 -0.856000 0.152000 -0.800000 -0.519900 -0.243900 -0.400000 -0.904000 -0.112000 -0.750000 -0.502100 -0.254300 -0.448000 -0.832000 -0.312000 -0.800000 -0.502100 -0.293400 -0.120000 -0.840000 -0.520000 -0.750000 -0.487000 -0.304800 -0.104000 -0.744000 -0.656000 -0.800000 -0.493800 -0.304800 0.032000 -0.688000 -0.720000 -0.750000 -0.451900 -0.330900 0.152000 -0.080000 -0.984000 -0.800000 -0.451900 -0.330300 0.328000 0.200000 -0.920000 -0.750000 -0.401700 -0.321600 0.336000 0.000000 -0.936000 -0.800000 -0.418300 -0.304800 0.408000 0.496000 -0.760000 -0.779200 -0.401700 -0.304800 0.400000 0.336000 -0.848000 -0.800000 -0.401700 -0.291400 0.440000 0.456000 -0.760000 -0.754800 -0.351500 -0.304800 0.424000 0.136000 -0.888000 -0.800000 -0.351500 -0.277300 0.568000 0.408000 -0.704000 -0.750000 -0.334300 -0.304800 0.512000 0.112000 -0.840000 -0.800000 -0.328800 -0.243900 0.640000 0.656000 -0.384000 -0.750000 -0.301200 -0.299800 0.512000 0.144000 -0.840000 -0.780500 -0.301200 -0.243900 0.848000 0.504000 -0.128000 -0.750000 -0.251000 -0.256700 0.824000 0.520000 -0.208000 -0.752500 -0.251000 -0.243900 0.840000 0.528000 -0.096000 -0.750000 -0.247000 -0.243900 0.832000 0.536000 -0.096000 -0.750000 -0.251000 -0.218200 0.840000 0.520000 0.096000 -0.717800 -0.200800 -0.243900 0.824000 0.560000 -0.064000 -0.746300 -0.251000 -0.182900 0.848000 0.496000 0.152000 -0.713600 -0.200800 -0.182900 0.824000 0.512000 0.224000 -0.719200 -0.251000 -0.121900 0.760000 0.456000 0.440000 -0.700000 -0.200800 -0.144600 0.696000 0.528000 0.480000 -0.700000 -0.217500 -0.121900 0.616000 0.552000 0.544000 -0.677400 -0.200800 -0.121900 0.528000 0.512000 0.672000 -0.700000 -0.200800 -0.144600 0.696000 0.528000 0.480000 -0.652900 -0.150600 -0.121900 0.752000 0.456000 0.464000 -0.700000 -0.178500 -0.182900 0.792000 0.568000 0.200000 -0.675300 -0.150600 -0.182900 0.768000 0.552000 0.296000 -0.700000 -0.175300 -0.243900 0.752000 0.600000 -0.240000 -0.674200 -0.150600 -0.243900 0.696000 0.600000 -0.384000 -0.674200 -0.150600 -0.243900 0.696000 0.600000 -0.384000 -0.600000 -0.272000 -0.060900 -0.264000 -0.632000 0.720000 -0.600000 -0.272000 -0.060900 -0.264000 -0.632000 0.720000 -0.600000 -0.301200 -0.098800 -0.176000 -0.576000 0.792000 -0.650000 -0.258100 -0.060900 0.392000 -0.456000 0.792000 -0.650000 -0.301200 -0.100200 0.264000 -0.568000 0.768000 -0.657600 -0.251000 -0.060900 0.456000 -0.072000 0.880000 -0.700000 -0.301200 -0.068800 0.336000 0.392000 0.848000 -0.700000 -0.251000 -0.086700 0.608000 0.464000 0.632000 -0.700000 -0.251000 -0.086700 0.608000 0.464000 0.632000 -0.650000 0.350500 -0.060900 0.712000 0.536000 -0.440000 -0.650000 0.350500 -0.060900 0.712000 0.536000 -0.440000 -0.650000 0.301200 -0.100800 0.528000 0.504000 -0.672000 -0.680100 0.301200 -0.060900 0.752000 0.544000 -0.368000 -0.680100 0.301200 -0.060900 0.752000 0.544000 -0.368000 -0.700000 0.251000 -0.093200 0.552000 0.600000 -0.568000 -0.700000 0.251000 -0.093200 0.552000 0.600000 -0.568000 -0.673000 0.251000 -0.121900 0.568000 0.576000 -0.584000 -0.700000 0.229200 -0.121900 0.528000 0.656000 -0.528000 -0.650000 0.251000 -0.154700 0.488000 0.640000 -0.584000 -0.700000 0.200800 -0.171600 0.480000 0.608000 -0.616000 -0.650000 0.227800 -0.182900 0.368000 0.576000 -0.720000 -0.687200 0.200800 -0.182900 0.432000 0.544000 -0.712000 -0.700000 0.200800 -0.171600 0.480000 0.608000 -0.616000 -0.700000 0.190400 -0.182900 0.432000 0.560000 -0.696000 -0.700000 0.190400 -0.182900 0.432000 0.560000 -0.696000 -0.650000 -0.200800 -0.092600 0.656000 0.384000 0.640000 -0.650000 -0.200800 -0.092600 0.656000 0.384000 0.640000 -0.650000 -0.150600 -0.116200 0.720000 0.480000 0.488000 -0.677400 -0.200800 -0.121900 0.528000 0.512000 0.672000 -0.652900 -0.150600 -0.121900 0.752000 0.456000 0.464000 -0.652900 -0.150600 -0.121900 0.752000 0.456000 0.464000 -0.734900 0.200800 -0.121900 0.552000 0.608000 -0.552000 -0.734900 0.200800 -0.121900 0.552000 0.608000 -0.552000 -0.750000 0.186400 -0.121900 0.504000 0.648000 -0.560000 -0.750000 0.200800 -0.104400 0.480000 0.680000 -0.544000 -0.750000 0.200800 -0.104400 0.480000 0.680000 -0.544000 -0.750000 -0.351500 -0.097900 0.640000 0.048000 0.760000 -0.750000 -0.351500 -0.097900 0.640000 0.048000 0.760000 -0.700000 -0.351500 -0.108700 -0.352000 -0.464000 0.808000 -0.750000 -0.301200 -0.116500 0.704000 0.400000 0.568000 -0.700000 -0.301200 -0.068800 0.336000 0.392000 0.848000 -0.700000 -0.301200 -0.068800 0.336000 0.392000 0.848000 --0.950000 -0.150600 -0.169000 -0.584000 -0.792000 0.136000 --0.950000 -0.150600 -0.169000 -0.584000 -0.792000 0.136000 --0.950000 -0.152700 -0.182900 -0.600000 -0.784000 0.144000 --0.952800 -0.150600 -0.182900 -0.568000 -0.808000 0.136000 --0.950000 -0.161800 -0.243900 -0.584000 -0.784000 0.176000 --0.966700 -0.150600 -0.243900 -0.472000 -0.864000 0.152000 --0.950000 -0.180000 -0.304800 -0.552000 -0.600000 -0.568000 --0.989000 -0.150600 -0.304800 -0.440000 -0.624000 -0.640000 --0.950000 -0.150600 -0.330800 -0.416000 -0.432000 -0.792000 --0.950000 -0.150600 -0.330800 -0.416000 -0.432000 -0.792000 --0.900000 -0.492700 -0.121900 -0.520000 0.712000 0.448000 --0.900000 -0.492700 -0.121900 -0.520000 0.712000 0.448000 --0.900000 -0.462200 -0.182900 0.320000 0.888000 0.304000 --0.878700 -0.502100 -0.121900 0.408000 0.368000 0.832000 --0.850000 -0.490700 -0.182900 0.328000 0.896000 0.288000 --0.850000 -0.502100 -0.144600 0.400000 0.776000 0.480000 --0.820300 -0.502100 -0.182900 0.496000 0.792000 0.344000 --0.850000 -0.519700 -0.121900 0.200000 0.624000 0.752000 --0.800000 -0.513200 -0.182900 -0.080000 0.880000 0.456000 --0.800000 -0.539500 -0.121900 0.176000 0.680000 0.704000 --0.750000 -0.503000 -0.182900 -0.200000 0.848000 0.472000 --0.750000 -0.549900 -0.121900 0.080000 0.648000 0.752000 --0.749300 -0.502100 -0.182900 -0.920000 -0.232000 0.288000 --0.723300 -0.502100 -0.121900 -0.896000 -0.224000 0.368000 --0.723300 -0.502100 -0.121900 -0.896000 -0.224000 0.368000 --0.900000 -0.511500 -0.121900 -0.520000 -0.664000 0.528000 --0.900000 -0.511500 -0.121900 -0.520000 -0.664000 0.528000 --0.900000 -0.542100 -0.182900 -0.808000 -0.560000 0.136000 --0.868200 -0.552300 -0.121900 -0.520000 -0.224000 0.816000 --0.892400 -0.552300 -0.182900 -0.760000 -0.624000 0.176000 --0.850000 -0.569100 -0.121900 -0.488000 -0.776000 0.384000 --0.850000 -0.592600 -0.182900 -0.520000 -0.800000 0.264000 --0.800000 -0.584500 -0.121900 -0.288000 -0.544000 0.776000 --0.832500 -0.602500 -0.182900 -0.576000 -0.768000 0.272000 --0.800000 -0.602500 -0.136500 -0.416000 -0.648000 0.632000 --0.800000 -0.620600 -0.182900 -0.312000 -0.880000 0.336000 --0.764000 -0.602500 -0.121900 -0.176000 -0.816000 0.544000 --0.750000 -0.630100 -0.182900 -0.144000 -0.912000 0.360000 --0.750000 -0.605000 -0.121900 -0.152000 -0.872000 0.456000 --0.750000 -0.605000 -0.121900 -0.152000 -0.872000 0.456000 --0.802000 -0.351500 -0.121900 -0.840000 -0.520000 0.096000 --0.802000 -0.351500 -0.121900 -0.840000 -0.520000 0.096000 --0.832400 -0.301200 -0.121900 -0.840000 -0.528000 0.048000 --0.802200 -0.351500 -0.182900 -0.872000 -0.480000 0.016000 --0.831100 -0.301200 -0.182900 -0.848000 -0.520000 0.016000 --0.807300 -0.351500 -0.243900 -0.864000 -0.472000 0.152000 --0.834700 -0.301200 -0.243900 -0.840000 -0.504000 0.184000 --0.834700 -0.301200 -0.243900 -0.840000 -0.504000 0.184000 --0.779100 0.150600 -0.182900 0.400000 0.664000 -0.616000 --0.779100 0.150600 -0.182900 0.400000 0.664000 -0.616000 --0.750000 0.132600 -0.182900 0.408000 0.656000 -0.624000 --0.750000 0.150600 -0.159200 0.432000 0.664000 -0.600000 --0.750000 0.150600 -0.159200 0.432000 0.664000 -0.600000 --0.750000 -0.448400 -0.121900 -0.880000 -0.432000 0.160000 --0.750000 -0.448400 -0.121900 -0.880000 -0.432000 0.160000 --0.750000 -0.451900 -0.133400 -0.896000 -0.392000 0.184000 --0.771000 -0.401700 -0.121900 -0.872000 -0.456000 0.128000 --0.757600 -0.451900 -0.182900 -0.952000 -0.232000 0.184000 --0.775200 -0.401700 -0.182900 -0.904000 -0.400000 0.120000 --0.769800 -0.451900 -0.243900 -0.952000 -0.080000 0.272000 --0.781800 -0.401700 -0.243900 -0.912000 -0.336000 0.208000 --0.787800 -0.451900 -0.304800 -0.984000 0.136000 -0.040000 --0.797400 -0.401700 -0.304800 -0.928000 -0.344000 0.056000 --0.797400 -0.401700 -0.304800 -0.928000 -0.344000 0.056000 --0.800000 -0.584500 -0.121900 -0.288000 -0.544000 0.776000 --0.800000 -0.584500 -0.121900 -0.288000 -0.544000 0.776000 --0.764000 -0.602500 -0.121900 -0.176000 -0.816000 0.544000 --0.800000 -0.602500 -0.136500 -0.416000 -0.648000 0.632000 --0.800000 -0.602500 -0.136500 -0.416000 -0.648000 0.632000 --0.750000 0.174400 -0.121900 0.448000 0.824000 -0.336000 --0.750000 0.174400 -0.121900 0.448000 0.824000 -0.336000 --0.750000 0.150600 -0.159200 0.432000 0.664000 -0.600000 --0.715000 0.150600 -0.121900 0.512000 0.744000 -0.408000 --0.715000 0.150600 -0.121900 0.512000 0.744000 -0.408000 --0.700900 0.100400 -0.182900 0.440000 0.608000 -0.648000 --0.700900 0.100400 -0.182900 0.440000 0.608000 -0.648000 --0.700000 0.099700 -0.182900 0.504000 0.560000 -0.640000 --0.700000 0.100400 -0.182100 0.536000 0.592000 -0.592000 --0.700000 0.100400 -0.182100 0.536000 0.592000 -0.592000 --0.750000 -0.448400 -0.121900 -0.880000 -0.432000 0.160000 --0.750000 -0.448400 -0.121900 -0.880000 -0.432000 0.160000 --0.748200 -0.451900 -0.121900 -0.880000 -0.440000 0.160000 --0.750000 -0.451900 -0.133400 -0.896000 -0.392000 0.184000 --0.750000 -0.451900 -0.133400 -0.896000 -0.392000 0.184000 --0.700000 0.140000 -0.121900 0.536000 0.728000 -0.408000 --0.700000 0.140000 -0.121900 0.536000 0.728000 -0.408000 --0.700000 0.100400 -0.182100 0.536000 0.592000 -0.592000 --0.657700 0.100400 -0.121900 0.728000 0.576000 -0.360000 --0.657700 0.100400 -0.121900 0.728000 0.576000 -0.360000 --0.652800 0.050200 -0.182900 0.592000 0.536000 -0.592000 --0.652800 0.050200 -0.182900 0.592000 0.536000 -0.592000 --0.650000 0.045800 -0.182900 0.672000 0.432000 -0.592000 --0.650000 0.050200 -0.178200 0.664000 0.544000 -0.504000 --0.621400 0.000000 -0.182900 0.848000 0.280000 -0.440000 --0.614300 0.050200 -0.121900 0.720000 0.480000 -0.480000 --0.601900 0.000000 -0.121900 0.848000 0.208000 -0.472000 --0.601900 0.000000 -0.121900 0.848000 0.208000 -0.472000 --0.650000 0.089500 -0.121900 0.728000 0.552000 -0.384000 --0.650000 0.089500 -0.121900 0.728000 0.552000 -0.384000 --0.650000 0.050200 -0.178200 0.664000 0.544000 -0.504000 --0.614300 0.050200 -0.121900 0.720000 0.480000 -0.480000 --0.614300 0.050200 -0.121900 0.720000 0.480000 -0.480000 --0.491700 -0.150600 -0.182900 -0.448000 0.848000 -0.264000 --0.491700 -0.150600 -0.182900 -0.448000 0.848000 -0.264000 --0.500000 -0.150600 -0.154000 -0.424000 0.880000 -0.160000 --0.500000 -0.154300 -0.182900 -0.320000 0.920000 -0.176000 --0.500000 -0.154300 -0.182900 -0.320000 0.920000 -0.176000 --0.372200 0.000000 -0.121900 -0.848000 0.480000 -0.200000 --0.372200 0.000000 -0.121900 -0.848000 0.480000 -0.200000 --0.350000 0.000000 -0.171400 -0.688000 0.416000 -0.584000 --0.350000 0.031200 -0.121900 -0.744000 0.552000 -0.352000 --0.350000 0.031200 -0.121900 -0.744000 0.552000 -0.352000 --0.350000 -0.652700 -0.168800 -0.864000 0.056000 0.488000 --0.350000 -0.652700 -0.168800 -0.864000 0.056000 0.488000 --0.300000 -0.652700 -0.176500 0.496000 0.568000 0.648000 --0.350000 -0.647900 -0.182900 0.008000 0.768000 0.624000 --0.300000 -0.647500 -0.182900 0.464000 0.632000 0.616000 --0.350000 -0.630200 -0.243900 -0.144000 0.776000 0.600000 --0.300000 -0.607200 -0.243900 -0.248000 0.672000 0.688000 --0.300000 -0.647500 -0.182900 0.464000 0.632000 0.616000 --0.286800 -0.602500 -0.243900 -0.320000 0.232000 0.912000 --0.293900 -0.652700 -0.182900 0.576000 0.496000 0.640000 --0.250000 -0.602500 -0.226600 0.288000 -0.512000 0.800000 --0.250000 -0.652700 -0.232900 0.624000 0.072000 0.768000 --0.233200 -0.602500 -0.243900 0.608000 -0.320000 0.720000 --0.241600 -0.652700 -0.243900 0.680000 -0.216000 0.688000 --0.250000 -0.652700 -0.232900 0.624000 0.072000 0.768000 --0.250000 -0.679700 -0.243900 0.728000 -0.208000 0.640000 --0.293900 -0.652700 -0.182900 0.576000 0.496000 0.640000 --0.256000 -0.703000 -0.243900 0.696000 -0.392000 0.584000 --0.293800 -0.703000 -0.182900 0.608000 -0.624000 0.488000 --0.293900 -0.652700 -0.182900 0.576000 0.496000 0.640000 --0.300000 -0.703000 -0.173800 0.616000 -0.544000 0.552000 --0.300000 -0.652700 -0.176500 0.496000 0.568000 0.648000 --0.350000 -0.703000 -0.180700 -0.616000 -0.504000 0.592000 --0.350000 -0.652700 -0.168800 -0.864000 0.056000 0.488000 --0.350000 -0.652700 -0.168800 -0.864000 0.056000 0.488000 --0.260200 -0.552300 -0.121900 -0.560000 -0.752000 0.336000 --0.260200 -0.552300 -0.121900 -0.560000 -0.752000 0.336000 --0.300000 -0.516400 -0.121900 -0.256000 -0.872000 0.400000 --0.285200 -0.552300 -0.182900 -0.616000 -0.680000 0.384000 --0.300000 -0.538300 -0.182900 -0.584000 -0.696000 0.408000 --0.300000 -0.552300 -0.209900 -0.624000 -0.616000 0.456000 --0.300000 -0.552300 -0.209900 -0.624000 -0.616000 0.456000 --0.300000 -0.647500 -0.182900 0.464000 0.632000 0.616000 --0.300000 -0.647500 -0.182900 0.464000 0.632000 0.616000 --0.293900 -0.652700 -0.182900 0.576000 0.496000 0.640000 --0.300000 -0.652700 -0.176500 0.496000 0.568000 0.648000 --0.300000 -0.652700 -0.176500 0.496000 0.568000 0.648000 --0.200000 0.251000 -0.156200 -0.432000 0.168000 -0.880000 --0.200000 0.251000 -0.156200 -0.432000 0.168000 -0.880000 --0.250000 0.251000 -0.124000 -0.376000 0.088000 -0.920000 --0.200000 0.200800 -0.161600 -0.480000 0.384000 -0.776000 --0.250000 0.200800 -0.129700 -0.392000 0.152000 -0.904000 --0.250000 0.200800 -0.129700 -0.392000 0.152000 -0.904000 --0.200000 -0.534300 -0.121900 0.456000 -0.832000 0.296000 --0.200000 -0.534300 -0.121900 0.456000 -0.832000 0.296000 --0.235800 -0.552300 -0.121900 0.448000 -0.816000 0.336000 --0.200000 -0.549300 -0.182900 0.504000 -0.784000 0.344000 --0.204600 -0.552300 -0.182900 0.504000 -0.776000 0.360000 --0.200000 -0.552300 -0.190900 0.520000 -0.768000 0.360000 --0.200000 -0.552300 -0.190900 0.520000 -0.768000 0.360000 --0.200000 0.401700 -0.127400 -0.400000 0.440000 -0.800000 --0.200000 0.401700 -0.127400 -0.400000 0.440000 -0.800000 --0.150000 0.401700 -0.148200 -0.240000 0.400000 -0.872000 --0.200000 0.351500 -0.146000 -0.416000 0.224000 -0.872000 --0.150000 0.351500 -0.156300 -0.024000 0.152000 -0.984000 --0.200000 0.301200 -0.154100 -0.392000 0.112000 -0.904000 --0.150000 0.301200 -0.169700 -0.080000 0.248000 -0.960000 --0.150000 0.351500 -0.156300 -0.024000 0.152000 -0.984000 --0.100000 0.301200 -0.172200 -0.168000 0.416000 -0.888000 --0.100000 0.351500 -0.158200 0.008000 0.264000 -0.960000 --0.150000 0.351500 -0.156300 -0.024000 0.152000 -0.984000 --0.100000 0.401700 -0.143600 0.056000 0.120000 -0.984000 --0.150000 0.401700 -0.148200 -0.240000 0.400000 -0.872000 --0.100000 0.451900 -0.142300 -0.128000 0.312000 -0.936000 --0.150000 0.451900 -0.123200 -0.344000 0.512000 -0.784000 --0.150000 0.451900 -0.123200 -0.344000 0.512000 -0.784000 --0.100000 0.044900 -0.121900 0.816000 0.112000 0.552000 --0.100000 0.044900 -0.121900 0.816000 0.112000 0.552000 --0.100700 0.050200 -0.121900 0.856000 0.048000 0.504000 --0.100000 0.050200 -0.123300 0.696000 -0.176000 0.688000 --0.100000 0.050200 -0.123300 0.696000 -0.176000 0.688000 --0.100000 0.451900 -0.142300 -0.128000 0.312000 -0.936000 --0.100000 0.451900 -0.142300 -0.128000 0.312000 -0.936000 --0.050000 0.451900 -0.137500 0.040000 0.112000 -0.992000 --0.100000 0.401700 -0.143600 0.056000 0.120000 -0.984000 --0.050000 0.401700 -0.142300 0.000000 0.168000 -0.984000 --0.100000 0.351500 -0.158200 0.008000 0.264000 -0.960000 --0.050000 0.351500 -0.155800 -0.048000 0.328000 -0.936000 --0.050000 0.401700 -0.142300 0.000000 0.168000 -0.984000 -0.000000 0.351500 -0.164900 -0.080000 0.368000 -0.920000 -0.000000 0.401700 -0.144600 -0.056000 0.192000 -0.976000 -0.050000 0.351500 -0.166400 0.000000 0.392000 -0.912000 -0.050000 0.401700 -0.150400 -0.088000 0.216000 -0.968000 -0.100000 0.351500 -0.169000 0.056000 0.272000 -0.952000 -0.100000 0.401700 -0.152800 -0.048000 0.168000 -0.984000 -0.150000 0.351500 -0.160600 0.144000 0.128000 -0.976000 -0.150000 0.401700 -0.154900 -0.096000 0.088000 -0.984000 -0.200000 0.351500 -0.169700 -0.320000 0.304000 -0.888000 -0.200000 0.401700 -0.169400 -0.056000 0.168000 -0.976000 -0.150000 0.401700 -0.154900 -0.096000 0.088000 -0.984000 -0.200000 0.451900 -0.151000 0.136000 0.400000 -0.896000 -0.150000 0.451900 -0.151900 0.184000 0.376000 -0.904000 -0.200000 0.484800 -0.121900 0.312000 0.872000 0.360000 -0.150000 0.502100 -0.123200 0.032000 0.424000 -0.896000 -0.153400 0.502100 -0.121900 0.448000 0.824000 -0.336000 -0.153400 0.502100 -0.121900 0.448000 0.824000 -0.336000 --0.089600 0.000000 -0.121900 0.568000 0.512000 0.632000 --0.089600 0.000000 -0.121900 0.568000 0.512000 0.632000 --0.050000 0.000000 -0.158900 0.584000 0.336000 0.728000 --0.050000 -0.024600 -0.121900 0.296000 0.656000 0.688000 -0.000000 0.000000 -0.165000 0.096000 0.640000 0.752000 -0.000000 -0.035500 -0.121900 0.072000 0.496000 0.856000 -0.050000 0.000000 -0.179700 0.216000 0.504000 0.832000 -0.050000 -0.038600 -0.121900 0.000000 0.528000 0.840000 -0.100000 0.000000 -0.179900 0.000000 0.528000 0.840000 -0.100000 -0.037100 -0.121900 -0.016000 0.544000 0.832000 -0.100000 -0.037100 -0.121900 -0.016000 0.544000 0.832000 --0.054100 -0.401700 -0.121900 0.656000 -0.688000 0.280000 --0.054100 -0.401700 -0.121900 0.656000 -0.688000 0.280000 --0.098000 -0.451900 -0.121900 0.712000 -0.680000 0.120000 --0.061900 -0.401700 -0.182900 0.744000 -0.648000 -0.120000 --0.098100 -0.451900 -0.182900 0.736000 -0.672000 0.032000 --0.071000 -0.401700 -0.243900 0.856000 -0.496000 -0.072000 --0.094700 -0.451900 -0.243900 0.784000 -0.568000 0.216000 --0.073900 -0.401700 -0.304800 0.784000 -0.304000 -0.528000 --0.061500 -0.451900 -0.304800 0.928000 -0.352000 0.088000 --0.100000 -0.401700 -0.330800 0.576000 -0.152000 -0.792000 --0.100000 -0.451900 -0.336100 0.496000 -0.048000 -0.856000 --0.150000 -0.401700 -0.364300 0.552000 0.080000 -0.824000 --0.145700 -0.451900 -0.365800 0.464000 0.040000 -0.880000 --0.150000 -0.417500 -0.365800 0.544000 0.056000 -0.832000 --0.150000 -0.451900 -0.368100 0.456000 -0.056000 -0.880000 --0.145700 -0.451900 -0.365800 0.464000 0.040000 -0.880000 --0.150000 -0.502100 -0.367300 0.088000 -0.320000 -0.936000 --0.147100 -0.502100 -0.365800 0.472000 -0.192000 -0.848000 --0.150000 -0.505900 -0.365800 0.272000 -0.320000 -0.904000 --0.150000 -0.505900 -0.365800 0.272000 -0.320000 -0.904000 --0.050000 0.401700 -0.142300 0.000000 0.168000 -0.984000 --0.050000 0.401700 -0.142300 0.000000 0.168000 -0.984000 --0.050000 0.451900 -0.137500 0.040000 0.112000 -0.992000 -0.000000 0.401700 -0.144600 -0.056000 0.192000 -0.976000 -0.000000 0.451900 -0.135500 0.000000 0.160000 -0.984000 -0.050000 0.401700 -0.150400 -0.088000 0.216000 -0.968000 -0.050000 0.451900 -0.139600 -0.080000 0.232000 -0.960000 -0.100000 0.401700 -0.152800 -0.048000 0.168000 -0.984000 -0.100000 0.451900 -0.146900 -0.088000 0.224000 -0.968000 -0.150000 0.401700 -0.154900 -0.096000 0.088000 -0.984000 -0.150000 0.451900 -0.151900 0.184000 0.376000 -0.904000 -0.150000 0.451900 -0.151900 0.184000 0.376000 -0.904000 --0.012800 0.200800 -0.121900 0.688000 -0.616000 0.376000 --0.012800 0.200800 -0.121900 0.688000 -0.616000 0.376000 -0.000000 0.211400 -0.121900 0.496000 -0.712000 0.480000 -0.000000 0.200800 -0.169000 0.576000 -0.744000 0.320000 -0.000000 0.200800 -0.169000 0.576000 -0.744000 0.320000 --0.050000 0.150600 -0.159500 0.712000 -0.480000 0.504000 --0.050000 0.150600 -0.159500 0.712000 -0.480000 0.504000 --0.033200 0.150600 -0.182900 0.832000 -0.552000 -0.016000 --0.050000 0.116900 -0.182900 0.944000 -0.304000 0.048000 --0.050000 0.150600 -0.210200 0.840000 -0.208000 -0.496000 --0.050000 0.150600 -0.210200 0.840000 -0.208000 -0.496000 --0.050000 0.047900 -0.182900 0.488000 0.480000 0.720000 --0.050000 0.047900 -0.182900 0.488000 0.480000 0.720000 --0.050000 0.000000 -0.158900 0.584000 0.336000 0.728000 -0.000000 0.039200 -0.182900 0.256000 0.544000 0.792000 -0.000000 0.000000 -0.165000 0.096000 0.640000 0.752000 -0.050000 0.005700 -0.182900 0.312000 0.584000 0.744000 -0.050000 0.000000 -0.179700 0.216000 0.504000 0.832000 -0.100000 0.004900 -0.182900 -0.288000 0.864000 0.400000 -0.100000 0.000000 -0.179900 0.000000 0.528000 0.840000 -0.100000 0.000000 -0.179900 0.000000 0.528000 0.840000 -0.000000 0.200800 -0.169000 0.576000 -0.744000 0.320000 -0.000000 0.200800 -0.169000 0.576000 -0.744000 0.320000 -0.008500 0.200800 -0.182900 0.416000 -0.688000 -0.584000 -0.000000 0.195100 -0.182900 0.504000 -0.656000 -0.544000 -0.000000 0.200800 -0.186400 0.272000 -0.456000 -0.840000 -0.000000 0.200800 -0.186400 0.272000 -0.456000 -0.840000 -0.050000 -0.327900 -0.182900 0.552000 -0.824000 0.048000 -0.050000 -0.327900 -0.182900 0.552000 -0.824000 0.048000 -0.003100 -0.351500 -0.182900 0.504000 -0.840000 -0.160000 -0.050000 -0.321600 -0.121900 0.584000 -0.712000 0.376000 -0.006400 -0.351500 -0.121900 0.552000 -0.776000 0.288000 -0.006400 -0.351500 -0.121900 0.552000 -0.776000 0.288000 -0.150000 0.251000 -0.128300 0.144000 -0.904000 0.392000 -0.150000 0.251000 -0.128300 0.144000 -0.904000 0.392000 -0.150000 0.284700 -0.182900 0.352000 0.368000 -0.856000 -0.194700 0.251000 -0.182900 0.496000 -0.104000 -0.856000 -0.150000 0.251000 -0.192500 0.112000 0.024000 -0.992000 -0.150000 0.224100 -0.182900 0.056000 -0.672000 -0.728000 -0.194700 0.251000 -0.182900 0.496000 -0.104000 -0.856000 -0.150000 0.251000 -0.128300 0.144000 -0.904000 0.392000 -0.150000 0.251000 -0.128300 0.144000 -0.904000 0.392000 -0.211500 -0.301200 -0.182900 -0.568000 -0.672000 0.464000 -0.211500 -0.301200 -0.182900 -0.568000 -0.672000 0.464000 -0.250000 -0.301200 -0.149400 -0.376000 -0.584000 0.712000 -0.250000 -0.319600 -0.182900 -0.280000 -0.832000 0.472000 -0.300000 -0.301200 -0.149800 -0.024000 -0.480000 0.872000 -0.300000 -0.330300 -0.182900 -0.312000 -0.696000 0.632000 -0.350000 -0.301200 -0.148100 0.392000 -0.048000 0.912000 -0.331500 -0.351500 -0.182900 -0.432000 -0.576000 0.688000 -0.350000 -0.351500 -0.171100 -0.312000 -0.512000 0.792000 -0.350000 -0.366900 -0.182900 -0.368000 -0.552000 0.736000 -0.400000 -0.351500 -0.165500 0.064000 -0.056000 0.992000 -0.400000 -0.370500 -0.182900 -0.008000 -0.616000 0.776000 -0.450000 -0.351500 -0.174300 0.040000 0.080000 0.992000 -0.450000 -0.370700 -0.182900 -0.080000 -0.520000 0.848000 -0.500000 -0.351500 -0.156800 -0.392000 -0.248000 0.880000 -0.500000 -0.372900 -0.182900 -0.184000 -0.776000 0.592000 -0.450000 -0.370700 -0.182900 -0.080000 -0.520000 0.848000 -0.500000 -0.400600 -0.243900 0.024000 -0.920000 0.384000 -0.450000 -0.401700 -0.212100 0.240000 -0.816000 0.520000 -0.496800 -0.401700 -0.243900 0.256000 -0.880000 0.376000 -0.450000 -0.418500 -0.243900 -0.152000 -0.896000 0.400000 -0.492100 -0.401700 -0.304800 0.152000 -0.576000 -0.792000 -0.450000 -0.411100 -0.304800 -0.144000 -0.808000 -0.560000 -0.450000 -0.401700 -0.316200 -0.184000 -0.360000 -0.904000 -0.428900 -0.401700 -0.304800 -0.392000 -0.464000 -0.784000 -0.450000 -0.380500 -0.304800 -0.144000 0.256000 -0.952000 -0.400000 -0.401700 -0.257800 0.112000 -0.952000 -0.280000 -0.450000 -0.351500 -0.290700 -0.176000 0.632000 -0.744000 -0.400000 -0.388800 -0.304800 0.392000 -0.800000 -0.448000 -0.437100 -0.351500 -0.304800 0.688000 0.472000 -0.536000 -0.400000 -0.351500 -0.338800 0.360000 -0.568000 -0.728000 -0.401200 -0.301200 -0.304800 0.744000 0.488000 -0.440000 -0.400000 -0.301200 -0.307300 0.704000 0.496000 -0.496000 -0.400000 -0.299100 -0.304800 0.736000 0.472000 -0.472000 -0.401200 -0.301200 -0.304800 0.744000 0.488000 -0.440000 -0.400000 -0.252300 -0.243900 0.744000 0.488000 -0.440000 -0.429200 -0.301200 -0.243900 0.816000 0.544000 -0.176000 -0.400000 -0.252800 -0.182900 0.760000 0.464000 0.440000 -0.427100 -0.301200 -0.182900 0.776000 0.464000 0.416000 -0.400000 -0.301200 -0.149800 0.528000 0.376000 0.752000 -0.450000 -0.338000 -0.182900 0.248000 0.592000 0.752000 -0.400000 -0.351500 -0.165500 0.064000 -0.056000 0.992000 -0.450000 -0.351500 -0.174300 0.040000 0.080000 0.992000 -0.450000 -0.338000 -0.182900 0.248000 0.592000 0.752000 -0.500000 -0.351500 -0.156800 -0.392000 -0.248000 0.880000 -0.500000 -0.316400 -0.182900 -0.704000 0.472000 0.520000 -0.450000 -0.338000 -0.182900 0.248000 0.592000 0.752000 -0.500000 -0.310500 -0.243900 -0.600000 0.776000 -0.152000 -0.450000 -0.327300 -0.243900 -0.064000 0.864000 -0.488000 -0.500000 -0.333600 -0.304800 -0.408000 0.824000 -0.376000 -0.450000 -0.351500 -0.290700 -0.176000 0.632000 -0.744000 -0.458900 -0.351500 -0.304800 -0.472000 0.360000 -0.792000 -0.450000 -0.380500 -0.304800 -0.144000 0.256000 -0.952000 -0.500000 -0.400200 -0.304800 -0.176000 -0.672000 -0.712000 -0.492100 -0.401700 -0.304800 0.152000 -0.576000 -0.792000 -0.500000 -0.400600 -0.243900 0.024000 -0.920000 0.384000 -0.496800 -0.401700 -0.243900 0.256000 -0.880000 0.376000 -0.496800 -0.401700 -0.243900 0.256000 -0.880000 0.376000 -0.265700 0.200800 -0.182900 -0.312000 -0.760000 -0.552000 -0.265700 0.200800 -0.182900 -0.312000 -0.760000 -0.552000 -0.300000 0.218000 -0.182900 0.768000 0.424000 -0.464000 -0.300000 0.200800 -0.174500 0.536000 -0.360000 0.752000 -0.306800 0.200800 -0.182900 0.752000 -0.400000 -0.512000 -0.300000 0.193900 -0.182900 0.520000 -0.696000 -0.480000 -0.300000 0.200800 -0.185900 0.256000 -0.192000 -0.944000 -0.265700 0.200800 -0.182900 -0.312000 -0.760000 -0.552000 -0.300000 0.218000 -0.182900 0.768000 0.424000 -0.464000 -0.300000 0.200800 -0.185900 0.256000 -0.192000 -0.944000 -0.306800 0.200800 -0.182900 0.752000 -0.400000 -0.512000 -0.306800 0.200800 -0.182900 0.752000 -0.400000 -0.512000 -0.265700 0.200800 -0.182900 -0.312000 -0.760000 -0.552000 -0.265700 0.200800 -0.182900 -0.312000 -0.760000 -0.552000 -0.300000 0.200800 -0.174500 0.536000 -0.360000 0.752000 -0.300000 0.193900 -0.182900 0.520000 -0.696000 -0.480000 -0.300000 0.193900 -0.182900 0.520000 -0.696000 -0.480000 -0.300000 0.284000 -0.182900 -0.168000 -0.184000 -0.960000 -0.300000 0.284000 -0.182900 -0.168000 -0.184000 -0.960000 -0.300000 0.251000 -0.156100 -0.368000 -0.808000 -0.448000 -0.321900 0.251000 -0.182900 -0.240000 -0.296000 -0.920000 -0.321900 0.251000 -0.182900 -0.240000 -0.296000 -0.920000 -0.307700 -0.050200 -0.121900 -0.592000 0.464000 0.648000 -0.307700 -0.050200 -0.121900 -0.592000 0.464000 0.648000 -0.300000 -0.060700 -0.121900 -0.512000 0.456000 0.720000 -0.300000 -0.050200 -0.130700 -0.504000 0.472000 0.720000 -0.300000 -0.050200 -0.130700 -0.504000 0.472000 0.720000 -0.329200 -0.200800 -0.121900 0.376000 -0.264000 0.880000 -0.329200 -0.200800 -0.121900 0.376000 -0.264000 0.880000 -0.350000 -0.182300 -0.121900 -0.032000 -0.520000 0.848000 -0.350000 -0.200800 -0.137500 0.248000 -0.232000 0.936000 -0.391400 -0.200800 -0.121900 -0.176000 -0.648000 0.736000 -0.391400 -0.200800 -0.121900 -0.176000 -0.648000 0.736000 -0.400000 0.100400 -0.150800 -0.768000 0.376000 0.512000 -0.400000 0.100400 -0.150800 -0.768000 0.376000 0.512000 -0.381500 0.100400 -0.182900 -0.896000 0.440000 -0.008000 -0.400000 0.146600 -0.182900 -0.440000 0.464000 -0.760000 -0.400000 0.100400 -0.207800 -0.424000 0.688000 -0.576000 -0.400000 0.100400 -0.207800 -0.424000 0.688000 -0.576000 -0.400000 -0.203000 -0.121900 -0.184000 -0.672000 0.712000 -0.400000 -0.203000 -0.121900 -0.184000 -0.672000 0.712000 -0.354900 -0.251000 -0.121900 0.704000 -0.304000 0.632000 -0.400000 -0.249800 -0.182900 0.472000 -0.752000 0.448000 -0.398900 -0.251000 -0.182900 0.896000 -0.160000 0.400000 -0.400000 -0.249400 -0.243900 0.760000 -0.472000 -0.424000 -0.399000 -0.251000 -0.243900 0.912000 -0.008000 -0.392000 -0.399000 -0.251000 -0.243900 0.912000 -0.008000 -0.392000 -0.400000 -0.351500 -0.165500 0.064000 -0.056000 0.992000 -0.400000 -0.351500 -0.165500 0.064000 -0.056000 0.992000 -0.350000 -0.351500 -0.171100 -0.312000 -0.512000 0.792000 -0.400000 -0.301200 -0.149800 0.528000 0.376000 0.752000 -0.350000 -0.301200 -0.148100 0.392000 -0.048000 0.912000 -0.350000 -0.301200 -0.148100 0.392000 -0.048000 0.912000 -0.450000 -0.251000 -0.179900 -0.288000 -0.680000 0.664000 -0.450000 -0.251000 -0.179900 -0.288000 -0.680000 0.664000 -0.450000 -0.255300 -0.182900 -0.208000 -0.656000 0.712000 -0.415700 -0.251000 -0.182900 -0.088000 -0.872000 0.480000 -0.450000 -0.251000 -0.203800 -0.216000 -0.960000 -0.144000 -0.450000 -0.251000 -0.203800 -0.216000 -0.960000 -0.144000 -0.500000 0.355500 -0.182900 0.400000 0.616000 -0.664000 -0.500000 0.355500 -0.182900 0.400000 0.616000 -0.664000 -0.506000 0.351500 -0.182900 0.424000 0.584000 -0.680000 -0.500000 0.393600 -0.121900 0.504000 0.744000 -0.432000 -0.550000 0.351500 -0.135900 0.456000 0.632000 -0.616000 -0.550000 0.362300 -0.121900 0.400000 0.656000 -0.632000 -0.566700 0.351500 -0.121900 0.448000 0.536000 -0.704000 -0.566700 0.351500 -0.121900 0.448000 0.536000 -0.704000 -0.550000 0.351500 -0.135900 0.456000 0.632000 -0.616000 -0.550000 0.351500 -0.135900 0.456000 0.632000 -0.616000 -0.550000 0.301200 -0.167400 0.408000 0.504000 -0.752000 -0.506000 0.351500 -0.182900 0.424000 0.584000 -0.680000 -0.526000 0.301200 -0.182900 0.408000 0.312000 -0.848000 -0.500000 0.351500 -0.187300 0.416000 0.568000 -0.696000 -0.500000 0.301200 -0.193500 0.168000 0.072000 -0.976000 -0.526000 0.301200 -0.182900 0.408000 0.312000 -0.848000 -0.500000 0.251000 -0.199400 0.072000 0.096000 -0.984000 -0.550000 0.283200 -0.182900 0.320000 0.472000 -0.816000 -0.550000 0.251000 -0.199600 0.176000 0.288000 -0.936000 -0.500000 0.251000 -0.199400 0.072000 0.096000 -0.984000 -0.550000 0.200800 -0.211100 0.016000 0.048000 -0.992000 -0.500000 0.200800 -0.200200 -0.104000 -0.048000 -0.992000 -0.550000 0.150600 -0.215400 -0.144000 0.080000 -0.984000 -0.500000 0.150600 -0.194400 -0.208000 0.240000 -0.944000 -0.550000 0.100400 -0.212600 -0.200000 0.352000 -0.904000 -0.500000 0.100400 -0.210700 0.048000 0.704000 -0.704000 -0.550000 0.067800 -0.243900 0.024000 0.672000 -0.728000 -0.500000 0.082500 -0.243900 0.216000 0.832000 -0.504000 -0.550000 0.050200 -0.258400 0.160000 0.632000 -0.752000 -0.500000 0.050200 -0.303800 0.264000 0.816000 -0.504000 -0.550000 0.015600 -0.304800 0.472000 0.712000 -0.512000 -0.500000 0.049600 -0.304800 0.264000 0.736000 -0.616000 -0.550000 0.000000 -0.335900 0.576000 0.464000 -0.664000 -0.500000 0.014000 -0.365800 0.216000 0.784000 -0.568000 -0.524100 0.000000 -0.365800 0.648000 0.312000 -0.688000 -0.500000 0.000000 -0.393700 0.528000 0.072000 -0.840000 -0.500000 -0.027200 -0.365800 0.264000 -0.576000 -0.768000 -0.524100 0.000000 -0.365800 0.648000 0.312000 -0.688000 -0.500000 -0.050200 -0.339600 -0.136000 -0.672000 -0.720000 -0.550000 0.000000 -0.335900 0.576000 0.464000 -0.664000 -0.550000 -0.050200 -0.345500 0.192000 -0.560000 -0.792000 -0.550000 -0.050200 -0.345500 0.192000 -0.560000 -0.792000 -0.526000 0.301200 -0.182900 0.408000 0.312000 -0.848000 -0.526000 0.301200 -0.182900 0.408000 0.312000 -0.848000 -0.550000 0.283200 -0.182900 0.320000 0.472000 -0.816000 -0.550000 0.301200 -0.167400 0.408000 0.504000 -0.752000 -0.550000 0.301200 -0.167400 0.408000 0.504000 -0.752000 -0.500000 -0.250100 -0.121900 -0.432000 -0.712000 0.536000 -0.500000 -0.250100 -0.121900 -0.432000 -0.712000 0.536000 -0.501100 -0.251000 -0.121900 -0.552000 -0.624000 0.544000 -0.500000 -0.251000 -0.123800 -0.544000 -0.688000 0.456000 -0.500000 -0.251000 -0.123800 -0.544000 -0.688000 0.456000 -0.608400 0.251000 -0.182900 0.328000 0.488000 -0.800000 -0.608400 0.251000 -0.182900 0.328000 0.488000 -0.800000 -0.650000 0.227800 -0.182900 0.368000 0.576000 -0.720000 -0.650000 0.251000 -0.154700 0.488000 0.640000 -0.584000 -0.650000 0.251000 -0.154700 0.488000 0.640000 -0.584000 -0.600000 -0.333000 -0.121900 0.024000 -0.312000 0.944000 -0.600000 -0.333000 -0.121900 0.024000 -0.312000 0.944000 -0.600000 -0.351500 -0.136300 0.144000 -0.792000 0.584000 -0.650000 -0.327200 -0.121900 -0.280000 -0.536000 0.792000 -0.650000 -0.351500 -0.143500 -0.280000 -0.536000 0.784000 -0.679500 -0.351500 -0.121900 -0.424000 -0.464000 0.768000 -0.650000 -0.401700 -0.175000 -0.240000 -0.688000 0.680000 -0.700000 -0.372000 -0.121900 -0.360000 -0.440000 0.816000 -0.700000 -0.401700 -0.145100 -0.400000 -0.504000 0.752000 -0.737900 -0.401700 -0.121900 -0.352000 -0.448000 0.816000 -0.700000 -0.435200 -0.182900 -0.448000 -0.712000 0.536000 -0.750000 -0.411100 -0.121900 -0.304000 -0.456000 0.824000 -0.719600 -0.451900 -0.182900 -0.568000 -0.640000 0.512000 -0.750000 -0.451900 -0.153800 -0.384000 -0.528000 0.752000 -0.750000 -0.479900 -0.182900 -0.456000 -0.632000 0.616000 -0.719600 -0.451900 -0.182900 -0.568000 -0.640000 0.512000 -0.750000 -0.502100 -0.236900 -0.448000 -0.776000 0.432000 -0.700000 -0.451900 -0.215800 -0.528000 -0.696000 0.472000 -0.744200 -0.502100 -0.243900 -0.480000 -0.864000 0.128000 -0.700000 -0.472400 -0.243900 -0.560000 -0.816000 -0.016000 -0.750000 -0.502100 -0.254300 -0.448000 -0.832000 -0.312000 -0.700000 -0.481300 -0.304800 -0.240000 -0.712000 -0.656000 -0.750000 -0.487000 -0.304800 -0.104000 -0.744000 -0.656000 -0.700000 -0.451900 -0.321600 -0.136000 -0.312000 -0.936000 -0.750000 -0.451900 -0.330900 0.152000 -0.080000 -0.984000 -0.700000 -0.401700 -0.334100 0.120000 -0.128000 -0.976000 -0.750000 -0.401700 -0.321600 0.336000 0.000000 -0.936000 -0.700000 -0.351500 -0.333900 0.344000 -0.040000 -0.936000 -0.750000 -0.351500 -0.307800 0.512000 0.128000 -0.840000 -0.700000 -0.301200 -0.354900 0.160000 -0.240000 -0.952000 -0.750000 -0.334300 -0.304800 0.512000 0.112000 -0.840000 -0.744500 -0.301200 -0.304800 0.640000 0.104000 -0.760000 -0.750000 -0.301200 -0.299800 0.512000 0.144000 -0.840000 -0.728900 -0.251000 -0.304800 0.720000 0.440000 -0.528000 -0.750000 -0.251000 -0.256700 0.824000 0.520000 -0.208000 -0.700000 -0.211400 -0.304800 0.288000 0.624000 -0.720000 -0.750000 -0.247000 -0.243900 0.832000 0.536000 -0.096000 -0.700000 -0.200800 -0.294000 0.576000 0.608000 -0.536000 -0.717800 -0.200800 -0.243900 0.824000 0.560000 -0.064000 -0.700000 -0.175300 -0.243900 0.752000 0.600000 -0.240000 -0.713600 -0.200800 -0.182900 0.824000 0.512000 0.224000 -0.700000 -0.178500 -0.182900 0.792000 0.568000 0.200000 -0.700000 -0.200800 -0.144600 0.696000 0.528000 0.480000 -0.700000 -0.200800 -0.144600 0.696000 0.528000 0.480000 -0.600000 -0.351500 -0.136300 0.144000 -0.792000 0.584000 -0.600000 -0.351500 -0.136300 0.144000 -0.792000 0.584000 -0.650000 -0.351500 -0.143500 -0.280000 -0.536000 0.784000 -0.600000 -0.392700 -0.182900 -0.184000 -0.752000 0.624000 -0.650000 -0.401700 -0.175000 -0.240000 -0.688000 0.680000 -0.628900 -0.401700 -0.182900 -0.216000 -0.760000 0.608000 -0.650000 -0.407700 -0.182900 -0.272000 -0.728000 0.624000 -0.600000 -0.401700 -0.203000 -0.208000 -0.872000 0.432000 -0.650000 -0.436800 -0.243900 -0.416000 -0.848000 0.320000 -0.600000 -0.414700 -0.243900 -0.184000 -0.936000 0.272000 -0.650000 -0.449600 -0.304800 -0.280000 -0.432000 -0.848000 -0.600000 -0.422100 -0.304800 -0.120000 -0.768000 -0.616000 -0.650000 -0.401700 -0.330300 -0.240000 -0.360000 -0.896000 -0.600000 -0.401700 -0.327900 -0.024000 -0.544000 -0.832000 -0.650000 -0.351500 -0.332000 0.016000 -0.144000 -0.984000 -0.600000 -0.351500 -0.337900 0.040000 -0.080000 -0.992000 -0.650000 -0.301200 -0.350300 0.016000 -0.440000 -0.888000 -0.600000 -0.301200 -0.352300 -0.528000 -0.312000 -0.776000 -0.600000 -0.301200 -0.352300 -0.528000 -0.312000 -0.776000 -0.650000 0.278000 -0.121900 0.448000 0.624000 -0.624000 -0.650000 0.278000 -0.121900 0.448000 0.624000 -0.624000 -0.650000 0.251000 -0.154700 0.488000 0.640000 -0.584000 -0.673000 0.251000 -0.121900 0.568000 0.576000 -0.584000 -0.673000 0.251000 -0.121900 0.568000 0.576000 -0.584000 -0.700000 -0.401700 -0.145100 -0.400000 -0.504000 0.752000 -0.700000 -0.401700 -0.145100 -0.400000 -0.504000 0.752000 -0.650000 -0.401700 -0.175000 -0.240000 -0.688000 0.680000 -0.700000 -0.435200 -0.182900 -0.448000 -0.712000 0.536000 -0.650000 -0.407700 -0.182900 -0.272000 -0.728000 0.624000 -0.700000 -0.451900 -0.215800 -0.528000 -0.696000 0.472000 -0.650000 -0.436800 -0.243900 -0.416000 -0.848000 0.320000 -0.673600 -0.451900 -0.243900 -0.480000 -0.752000 0.448000 -0.650000 -0.449600 -0.304800 -0.280000 -0.432000 -0.848000 -0.653100 -0.451900 -0.304800 -0.336000 -0.480000 -0.800000 -0.650000 -0.401700 -0.330300 -0.240000 -0.360000 -0.896000 -0.700000 -0.451900 -0.321600 -0.136000 -0.312000 -0.936000 -0.700000 -0.401700 -0.334100 0.120000 -0.128000 -0.976000 -0.650000 -0.401700 -0.330300 -0.240000 -0.360000 -0.896000 -0.700000 -0.351500 -0.333900 0.344000 -0.040000 -0.936000 -0.650000 -0.351500 -0.332000 0.016000 -0.144000 -0.984000 -0.700000 -0.301200 -0.354900 0.160000 -0.240000 -0.952000 -0.650000 -0.301200 -0.350300 0.016000 -0.440000 -0.888000 -0.650000 -0.301200 -0.350300 0.016000 -0.440000 -0.888000 -0.719200 -0.251000 -0.121900 0.760000 0.456000 0.440000 -0.719200 -0.251000 -0.121900 0.760000 0.456000 0.440000 -0.750000 -0.297400 -0.121900 0.656000 0.584000 0.464000 -0.746300 -0.251000 -0.182900 0.848000 0.496000 0.152000 -0.750000 -0.257500 -0.182900 0.856000 0.488000 0.120000 -0.750000 -0.251000 -0.218200 0.840000 0.520000 0.096000 -0.777000 -0.301200 -0.182900 0.784000 0.536000 0.304000 -0.752500 -0.251000 -0.243900 0.840000 0.528000 -0.096000 -0.780500 -0.301200 -0.243900 0.848000 0.504000 -0.128000 -0.777000 -0.301200 -0.182900 0.784000 0.536000 0.304000 -0.800000 -0.328800 -0.243900 0.640000 0.656000 -0.384000 -0.800000 -0.333100 -0.182900 0.680000 0.680000 0.256000 -0.829500 -0.351500 -0.243900 0.648000 0.640000 -0.400000 -0.821300 -0.351500 -0.182900 0.624000 0.648000 0.416000 -0.850000 -0.375700 -0.243900 0.544000 0.616000 -0.552000 -0.850000 -0.381900 -0.182900 0.632000 0.696000 0.328000 -0.890600 -0.401700 -0.243900 0.576000 0.616000 -0.528000 -0.872200 -0.401700 -0.182900 0.632000 0.640000 0.416000 -0.900000 -0.412700 -0.243900 0.520000 0.640000 -0.552000 -0.900000 -0.433800 -0.182900 0.512000 0.688000 0.504000 -0.950000 -0.433400 -0.243900 0.528000 0.832000 0.152000 -0.933400 -0.451900 -0.182900 0.464000 0.712000 0.512000 -0.950000 -0.451900 -0.206400 0.504000 0.736000 0.440000 -0.950000 -0.463500 -0.182900 0.464000 0.672000 0.568000 -0.933400 -0.451900 -0.182900 0.464000 0.712000 0.512000 -0.950000 -0.502100 -0.136000 -0.296000 0.400000 0.864000 -0.900000 -0.451900 -0.156900 0.400000 0.632000 0.656000 -0.900000 -0.502100 -0.123800 -0.168000 -0.208000 0.960000 -0.850000 -0.451900 -0.123600 0.328000 0.296000 0.888000 -0.850000 -0.502100 -0.142100 -0.224000 -0.520000 0.816000 -0.850000 -0.502100 -0.142100 -0.224000 -0.520000 0.816000 -0.750000 -0.257500 -0.182900 0.856000 0.488000 0.120000 -0.750000 -0.257500 -0.182900 0.856000 0.488000 0.120000 -0.750000 -0.297400 -0.121900 0.656000 0.584000 0.464000 -0.777000 -0.301200 -0.182900 0.784000 0.536000 0.304000 -0.752700 -0.301200 -0.121900 0.792000 0.344000 0.488000 -0.800000 -0.333100 -0.182900 0.680000 0.680000 0.256000 -0.775700 -0.351500 -0.121900 0.600000 0.328000 0.720000 -0.800000 -0.351500 -0.149400 0.664000 0.512000 0.528000 -0.800000 -0.391100 -0.121900 0.384000 0.416000 0.816000 -0.821300 -0.351500 -0.182900 0.624000 0.648000 0.416000 -0.810500 -0.401700 -0.121900 0.456000 0.104000 0.872000 -0.850000 -0.381900 -0.182900 0.632000 0.696000 0.328000 -0.850000 -0.401700 -0.151500 0.608000 0.552000 0.560000 -0.872200 -0.401700 -0.182900 0.632000 0.640000 0.416000 -0.850000 -0.451900 -0.123600 0.328000 0.296000 0.888000 -0.900000 -0.433800 -0.182900 0.512000 0.688000 0.504000 -0.900000 -0.451900 -0.156900 0.400000 0.632000 0.656000 -0.933400 -0.451900 -0.182900 0.464000 0.712000 0.512000 -0.933400 -0.451900 -0.182900 0.464000 0.712000 0.512000 -0.783200 -0.502100 -0.182900 -0.448000 -0.720000 0.512000 -0.783200 -0.502100 -0.182900 -0.448000 -0.720000 0.512000 -0.800000 -0.502100 -0.171200 -0.360000 -0.648000 0.664000 -0.800000 -0.511100 -0.182900 -0.376000 -0.744000 0.544000 -0.800000 -0.511100 -0.182900 -0.376000 -0.744000 0.544000 -0.800000 -0.333100 -0.182900 0.680000 0.680000 0.256000 -0.800000 -0.333100 -0.182900 0.680000 0.680000 0.256000 -0.821300 -0.351500 -0.182900 0.624000 0.648000 0.416000 -0.800000 -0.351500 -0.149400 0.664000 0.512000 0.528000 -0.800000 -0.351500 -0.149400 0.664000 0.512000 0.528000 -0.900000 -0.552300 -0.159100 -0.496000 -0.592000 0.632000 -0.900000 -0.552300 -0.159100 -0.496000 -0.592000 0.632000 -0.900000 -0.573700 -0.182900 -0.608000 -0.704000 0.344000 -0.876500 -0.552300 -0.182900 -0.528000 -0.672000 0.504000 -0.900000 -0.578300 -0.243900 -0.552000 -0.704000 -0.440000 -0.868400 -0.552300 -0.243900 -0.552000 -0.760000 -0.328000 -0.900000 -0.552300 -0.278500 -0.424000 -0.592000 -0.672000 -0.900000 -0.552300 -0.278500 -0.424000 -0.592000 -0.672000 -0.900000 0.127900 -0.121900 0.560000 0.776000 -0.264000 -0.900000 0.127900 -0.121900 0.560000 0.776000 -0.264000 -0.931600 0.100400 -0.121900 0.600000 0.744000 -0.272000 -0.900000 0.111100 -0.182900 0.552000 0.712000 -0.416000 -0.912000 0.100400 -0.182900 0.600000 0.704000 -0.360000 -0.900000 0.100400 -0.203200 0.536000 0.688000 -0.472000 -0.900000 0.100400 -0.203200 0.536000 0.688000 -0.472000 -0.950000 -0.602500 -0.169200 -0.536000 -0.520000 0.656000 -0.950000 -0.602500 -0.169200 -0.536000 -0.520000 0.656000 -0.950000 -0.619400 -0.182900 -0.632000 -0.592000 0.480000 -0.935000 -0.602500 -0.182900 -0.552000 -0.552000 0.608000 -0.950000 -0.619400 -0.243900 -0.600000 -0.584000 -0.536000 -0.933200 -0.602500 -0.243900 -0.584000 -0.624000 -0.512000 -0.950000 -0.602500 -0.260200 -0.544000 -0.504000 -0.664000 -0.950000 -0.602500 -0.260200 -0.544000 -0.504000 -0.664000 -1.000000 -0.251000 -0.154300 -0.728000 -0.648000 0.200000 -1.000000 -0.251000 -0.154300 -0.728000 -0.648000 0.200000 -1.000000 -0.258900 -0.182900 -0.752000 -0.616000 0.208000 -0.993400 -0.251000 -0.182900 -0.736000 -0.640000 0.200000 -1.000000 -0.277900 -0.243900 -0.712000 -0.592000 0.360000 -0.978600 -0.251000 -0.243900 -0.696000 -0.616000 0.352000 -0.978600 -0.251000 -0.243900 -0.696000 -0.616000 0.352000 -0.950000 -0.560000 -0.121900 -0.400000 -0.536000 0.728000 -0.950000 -0.560000 -0.121900 -0.400000 -0.536000 0.728000 -0.992300 -0.602500 -0.121900 -0.520000 -0.480000 0.696000 -0.950000 -0.602500 -0.169200 -0.536000 -0.520000 0.656000 -0.950000 -0.602500 -0.169200 -0.536000 -0.520000 0.656000 -1.000000 -0.652700 -0.168000 -0.488000 -0.568000 0.656000 -1.000000 -0.652700 -0.168000 -0.488000 -0.568000 0.656000 -1.000000 -0.666200 -0.182900 -0.536000 -0.632000 0.544000 -0.983200 -0.652700 -0.182900 -0.528000 -0.608000 0.584000 -1.000000 -0.673300 -0.243900 -0.656000 -0.656000 -0.368000 -0.979500 -0.652700 -0.243900 -0.672000 -0.664000 -0.304000 -1.000000 -0.652700 -0.268800 -0.592000 -0.512000 -0.608000 -1.000000 -0.652700 -0.268800 -0.592000 -0.512000 -0.608000 --1.000000 0.256900 -0.182900 0.288000 0.752000 -0.584000 --1.000000 0.256900 -0.182900 0.288000 0.752000 -0.584000 --1.000000 0.251000 -0.191500 0.280000 0.728000 -0.616000 --0.985000 0.251000 -0.182900 0.288000 0.752000 -0.576000 --0.985000 0.251000 -0.182900 0.288000 0.752000 -0.576000 --0.980800 0.200800 -0.243900 0.232000 0.632000 -0.736000 --0.980800 0.200800 -0.243900 0.232000 0.632000 -0.736000 --0.950000 0.189400 -0.243900 0.264000 0.616000 -0.728000 --0.950000 0.200800 -0.231900 0.272000 0.640000 -0.704000 --0.950000 0.200800 -0.231900 0.272000 0.640000 -0.704000 --0.900000 0.214200 -0.182900 0.360000 0.720000 -0.576000 --0.900000 0.214200 -0.182900 0.360000 0.720000 -0.576000 --0.900000 0.200800 -0.201400 0.352000 0.680000 -0.640000 --0.874200 0.200800 -0.182900 0.360000 0.712000 -0.584000 --0.874200 0.200800 -0.182900 0.360000 0.712000 -0.584000 --0.878700 0.150600 -0.243900 0.328000 0.616000 -0.704000 --0.878700 0.150600 -0.243900 0.328000 0.616000 -0.704000 --0.850000 0.135500 -0.243900 0.320000 0.608000 -0.712000 --0.850000 0.150600 -0.229000 0.320000 0.608000 -0.720000 --0.850000 0.150600 -0.229000 0.320000 0.608000 -0.720000 --0.900000 -0.542100 -0.182900 -0.808000 -0.560000 0.136000 --0.900000 -0.542100 -0.182900 -0.808000 -0.560000 0.136000 --0.900000 -0.551700 -0.243900 -0.808000 -0.568000 -0.120000 --0.892400 -0.552300 -0.182900 -0.760000 -0.624000 0.176000 --0.899500 -0.552300 -0.243900 -0.800000 -0.592000 -0.072000 --0.850000 -0.592600 -0.182900 -0.520000 -0.800000 0.264000 --0.851300 -0.602500 -0.243900 -0.680000 -0.720000 -0.008000 --0.850000 -0.602500 -0.238600 -0.616000 -0.752000 0.216000 --0.850000 -0.603800 -0.243900 -0.656000 -0.744000 0.064000 --0.832500 -0.602500 -0.182900 -0.576000 -0.768000 0.272000 --0.800000 -0.632800 -0.243900 -0.432000 -0.896000 0.072000 --0.800000 -0.620600 -0.182900 -0.312000 -0.880000 0.336000 --0.750000 -0.646000 -0.243900 -0.088000 -0.984000 0.144000 --0.750000 -0.630100 -0.182900 -0.144000 -0.912000 0.360000 --0.750000 -0.630100 -0.182900 -0.144000 -0.912000 0.360000 --0.820300 -0.502100 -0.182900 0.496000 0.792000 0.344000 --0.820300 -0.502100 -0.182900 0.496000 0.792000 0.344000 --0.800000 -0.502100 -0.227500 0.432000 0.824000 0.352000 --0.800000 -0.513200 -0.182900 -0.080000 0.880000 0.456000 --0.750000 -0.502100 -0.184800 -0.496000 0.696000 0.496000 --0.750000 -0.503000 -0.182900 -0.200000 0.848000 0.472000 --0.749300 -0.502100 -0.182900 -0.920000 -0.232000 0.288000 --0.750000 -0.502100 -0.184800 -0.496000 0.696000 0.496000 --0.750000 -0.499500 -0.182900 -0.936000 -0.200000 0.264000 --0.750000 -0.499500 -0.182900 -0.936000 -0.200000 0.264000 --0.850000 -0.592600 -0.182900 -0.520000 -0.800000 0.264000 --0.850000 -0.592600 -0.182900 -0.520000 -0.800000 0.264000 --0.832500 -0.602500 -0.182900 -0.576000 -0.768000 0.272000 --0.850000 -0.602500 -0.238600 -0.616000 -0.752000 0.216000 --0.850000 -0.602500 -0.238600 -0.616000 -0.752000 0.216000 --0.650000 0.045800 -0.182900 0.672000 0.432000 -0.592000 --0.650000 0.045800 -0.182900 0.672000 0.432000 -0.592000 --0.650000 0.000000 -0.224600 0.632000 0.368000 -0.672000 --0.621400 0.000000 -0.182900 0.848000 0.280000 -0.440000 --0.621400 0.000000 -0.182900 0.848000 0.280000 -0.440000 --0.600000 -0.629300 -0.182900 0.072000 -0.968000 0.224000 --0.600000 -0.629300 -0.182900 0.072000 -0.968000 0.224000 --0.600000 -0.640700 -0.243900 0.080000 -0.976000 0.192000 --0.550000 -0.618800 -0.182900 0.168000 -0.944000 0.272000 --0.550000 -0.629900 -0.243900 0.160000 -0.960000 0.200000 --0.500000 -0.610400 -0.182900 -0.136000 -0.936000 0.304000 --0.500000 -0.625200 -0.243900 -0.096000 -0.960000 0.240000 --0.550000 -0.629900 -0.243900 0.160000 -0.960000 0.200000 --0.500000 -0.637800 -0.304800 -0.208000 -0.976000 -0.032000 --0.550000 -0.639800 -0.304800 0.152000 -0.984000 0.000000 --0.500000 -0.633000 -0.365800 -0.088000 -0.968000 -0.200000 --0.550000 -0.637200 -0.365800 0.152000 -0.968000 -0.168000 --0.550000 -0.639800 -0.304800 0.152000 -0.984000 0.000000 --0.600000 -0.645500 -0.365800 0.016000 -0.968000 -0.216000 --0.600000 -0.650800 -0.304800 0.064000 -0.992000 0.000000 --0.550000 -0.639800 -0.304800 0.152000 -0.984000 0.000000 --0.600000 -0.640700 -0.243900 0.080000 -0.976000 0.192000 --0.550000 -0.629900 -0.243900 0.160000 -0.960000 0.200000 --0.550000 -0.629900 -0.243900 0.160000 -0.960000 0.200000 --0.403600 -0.100400 -0.182900 -0.616000 0.592000 -0.512000 --0.403600 -0.100400 -0.182900 -0.616000 0.592000 -0.512000 --0.400000 -0.100400 -0.188300 -0.616000 0.576000 -0.520000 --0.400000 -0.096400 -0.182900 -0.664000 0.552000 -0.496000 --0.354400 -0.100400 -0.243900 -0.584000 0.448000 -0.664000 --0.365500 -0.050200 -0.182900 -0.728000 0.384000 -0.560000 --0.350000 -0.093900 -0.243900 -0.600000 0.408000 -0.680000 --0.350000 -0.050200 -0.209400 -0.696000 0.392000 -0.584000 --0.321700 -0.050200 -0.243900 -0.656000 0.344000 -0.656000 --0.350000 -0.016600 -0.182900 -0.688000 0.360000 -0.616000 --0.301700 0.000000 -0.243900 -0.744000 0.392000 -0.536000 --0.340600 0.000000 -0.182900 -0.696000 0.480000 -0.520000 --0.340600 0.000000 -0.182900 -0.696000 0.480000 -0.520000 --0.444500 -0.150600 -0.243900 -0.312000 0.784000 -0.528000 --0.444500 -0.150600 -0.243900 -0.312000 0.784000 -0.528000 --0.450000 -0.150600 -0.239400 -0.408000 0.792000 -0.448000 --0.450000 -0.152500 -0.243900 -0.384000 0.800000 -0.448000 --0.450000 -0.152500 -0.243900 -0.384000 0.800000 -0.448000 --0.400000 -0.651500 -0.182900 -0.552000 -0.472000 0.672000 --0.400000 -0.651500 -0.182900 -0.552000 -0.472000 0.672000 --0.400000 -0.652700 -0.184800 -0.640000 -0.536000 0.536000 --0.450000 -0.629600 -0.182900 -0.344000 -0.872000 0.320000 --0.428400 -0.652700 -0.243900 -0.584000 -0.736000 0.336000 --0.450000 -0.644000 -0.243900 -0.352000 -0.912000 0.200000 --0.450000 -0.652700 -0.293400 -0.288000 -0.936000 0.160000 --0.428400 -0.652700 -0.243900 -0.584000 -0.736000 0.336000 --0.450000 -0.654300 -0.304800 -0.272000 -0.952000 0.040000 --0.400000 -0.663600 -0.243900 -0.504000 -0.840000 0.160000 --0.400000 -0.672200 -0.304800 -0.400000 -0.904000 -0.128000 --0.363900 -0.703000 -0.243900 -0.784000 -0.584000 0.176000 --0.371300 -0.703000 -0.304800 -0.816000 -0.552000 -0.144000 --0.350000 -0.730400 -0.243900 -0.544000 -0.776000 0.296000 --0.350000 -0.747900 -0.304800 -0.512000 -0.832000 -0.184000 --0.300000 -0.736500 -0.243900 0.320000 -0.832000 0.440000 --0.330700 -0.753200 -0.304800 -0.192000 -0.968000 -0.112000 --0.300000 -0.753200 -0.286100 0.088000 -0.928000 0.352000 --0.300000 -0.758500 -0.304800 0.104000 -0.976000 -0.144000 --0.281500 -0.753200 -0.304800 0.312000 -0.920000 -0.216000 --0.300000 -0.753200 -0.317300 0.136000 -0.840000 -0.512000 --0.300000 -0.758500 -0.304800 0.104000 -0.976000 -0.144000 --0.330700 -0.753200 -0.304800 -0.192000 -0.968000 -0.112000 --0.300000 -0.753200 -0.317300 0.136000 -0.840000 -0.512000 --0.350000 -0.747900 -0.304800 -0.512000 -0.832000 -0.184000 --0.300000 -0.703000 -0.365100 0.056000 -0.232000 -0.968000 --0.350000 -0.703000 -0.357000 -0.336000 -0.496000 -0.792000 --0.300000 -0.687100 -0.365800 0.104000 -0.048000 -0.992000 --0.350000 -0.679200 -0.365800 -0.072000 -0.176000 -0.976000 --0.350000 -0.703000 -0.357000 -0.336000 -0.496000 -0.792000 --0.400000 -0.653700 -0.365800 -0.176000 -0.888000 -0.416000 --0.371300 -0.703000 -0.304800 -0.816000 -0.552000 -0.144000 --0.400000 -0.672200 -0.304800 -0.400000 -0.904000 -0.128000 --0.400000 -0.672200 -0.304800 -0.400000 -0.904000 -0.128000 --0.428400 -0.652700 -0.243900 -0.584000 -0.736000 0.336000 --0.428400 -0.652700 -0.243900 -0.584000 -0.736000 0.336000 --0.400000 -0.652700 -0.184800 -0.640000 -0.536000 0.536000 --0.400000 -0.663600 -0.243900 -0.504000 -0.840000 0.160000 --0.396000 -0.652700 -0.182900 -0.176000 0.000000 0.984000 --0.363900 -0.703000 -0.243900 -0.784000 -0.584000 0.176000 --0.350700 -0.703000 -0.182900 -0.792000 -0.176000 0.576000 --0.350000 -0.730400 -0.243900 -0.544000 -0.776000 0.296000 --0.350000 -0.704300 -0.182900 -0.112000 -0.808000 0.576000 --0.300000 -0.736500 -0.243900 0.320000 -0.832000 0.440000 --0.300000 -0.708000 -0.182900 0.360000 -0.768000 0.520000 --0.300000 -0.708000 -0.182900 0.360000 -0.768000 0.520000 --0.365500 -0.050200 -0.182900 -0.728000 0.384000 -0.560000 --0.365500 -0.050200 -0.182900 -0.728000 0.384000 -0.560000 --0.350000 -0.050200 -0.209400 -0.696000 0.392000 -0.584000 --0.350000 -0.016600 -0.182900 -0.688000 0.360000 -0.616000 --0.350000 -0.016600 -0.182900 -0.688000 0.360000 -0.616000 --0.400000 -0.100400 -0.188300 -0.616000 0.576000 -0.520000 --0.400000 -0.100400 -0.188300 -0.616000 0.576000 -0.520000 --0.400000 -0.131400 -0.243900 -0.384000 0.744000 -0.536000 --0.354400 -0.100400 -0.243900 -0.584000 0.448000 -0.664000 --0.400000 -0.150600 -0.272200 -0.312000 0.624000 -0.704000 --0.350000 -0.100400 -0.248500 -0.576000 0.440000 -0.680000 --0.350000 -0.150600 -0.298700 -0.264000 0.464000 -0.840000 --0.400000 -0.150600 -0.272200 -0.312000 0.624000 -0.704000 --0.350000 -0.159400 -0.304800 -0.248000 0.528000 -0.808000 --0.400000 -0.174400 -0.304800 -0.224000 0.736000 -0.632000 --0.350000 -0.200800 -0.339000 0.200000 0.416000 -0.880000 --0.400000 -0.200800 -0.333600 -0.064000 0.568000 -0.816000 --0.350000 -0.248400 -0.365800 0.184000 0.424000 -0.880000 --0.400000 -0.239300 -0.365800 0.048000 0.512000 -0.848000 --0.350000 -0.251000 -0.367200 0.240000 0.168000 -0.952000 --0.400000 -0.251000 -0.373300 0.080000 0.400000 -0.904000 --0.350000 -0.301200 -0.377400 0.232000 0.208000 -0.944000 --0.400000 -0.301200 -0.390900 0.144000 0.296000 -0.936000 --0.350000 -0.351500 -0.416300 -0.176000 0.600000 -0.768000 --0.400000 -0.351500 -0.411400 0.000000 0.616000 -0.784000 --0.400000 -0.351500 -0.411400 0.000000 0.616000 -0.784000 --0.350000 -0.647900 -0.182900 0.008000 0.768000 0.624000 --0.350000 -0.647900 -0.182900 0.008000 0.768000 0.624000 --0.386500 -0.602500 -0.182900 0.376000 -0.032000 0.920000 --0.350000 -0.630200 -0.243900 -0.144000 0.776000 0.600000 --0.371400 -0.602500 -0.243900 0.928000 0.016000 0.352000 --0.371400 -0.602500 -0.243900 0.928000 0.016000 0.352000 --0.200000 0.172600 -0.182900 -0.488000 0.416000 -0.760000 --0.200000 0.172600 -0.182900 -0.488000 0.416000 -0.760000 --0.216700 0.150600 -0.182900 -0.560000 0.376000 -0.728000 --0.200000 0.150600 -0.197300 -0.488000 0.464000 -0.728000 --0.249100 0.100400 -0.182900 -0.576000 0.496000 -0.640000 --0.200000 0.100400 -0.242800 -0.520000 0.512000 -0.672000 --0.200000 0.100400 -0.242800 -0.520000 0.512000 -0.672000 --0.200000 0.172600 -0.182900 -0.488000 0.416000 -0.760000 --0.200000 0.172600 -0.182900 -0.488000 0.416000 -0.760000 --0.200000 0.150600 -0.197300 -0.488000 0.464000 -0.728000 --0.173800 0.200800 -0.182900 -0.480000 0.344000 -0.800000 --0.150000 0.150600 -0.235500 -0.296000 0.536000 -0.784000 --0.150000 0.200800 -0.199200 -0.328000 0.272000 -0.896000 --0.150000 0.200800 -0.199200 -0.328000 0.272000 -0.896000 -0.100000 0.004900 -0.182900 -0.288000 0.864000 0.400000 -0.100000 0.004900 -0.182900 -0.288000 0.864000 0.400000 -0.050000 0.005700 -0.182900 0.312000 0.584000 0.744000 -0.100000 0.000000 -0.203800 -0.256000 0.936000 -0.224000 -0.050000 0.042300 -0.243900 0.688000 0.376000 -0.616000 -0.078000 0.000000 -0.243900 0.336000 0.616000 -0.696000 -0.050000 0.000000 -0.258500 0.448000 0.256000 -0.848000 -0.100000 -0.005500 -0.243900 -0.184000 0.760000 -0.616000 -0.050000 -0.050200 -0.279200 0.280000 0.320000 -0.896000 -0.100000 -0.050200 -0.272200 -0.136000 0.384000 -0.904000 -0.050000 -0.100400 -0.298100 0.360000 0.248000 -0.896000 -0.100000 -0.100400 -0.298900 0.040000 0.136000 -0.984000 -0.100000 -0.100400 -0.298900 0.040000 0.136000 -0.984000 -0.078000 0.000000 -0.243900 0.336000 0.616000 -0.696000 -0.078000 0.000000 -0.243900 0.336000 0.616000 -0.696000 -0.100000 -0.005500 -0.243900 -0.184000 0.760000 -0.616000 -0.100000 0.000000 -0.203800 -0.256000 0.936000 -0.224000 -0.100000 0.000000 -0.203800 -0.256000 0.936000 -0.224000 -0.200000 -0.301200 -0.206400 -0.600000 -0.688000 0.384000 -0.200000 -0.301200 -0.206400 -0.600000 -0.688000 0.384000 -0.200000 -0.319700 -0.243900 -0.624000 -0.696000 0.328000 -0.176900 -0.301200 -0.243900 -0.504000 -0.800000 0.304000 -0.200000 -0.340400 -0.304800 -0.480000 -0.448000 -0.744000 -0.170700 -0.301200 -0.304800 -0.520000 -0.608000 -0.592000 -0.200000 -0.301200 -0.321600 -0.488000 -0.368000 -0.784000 -0.200000 -0.301200 -0.321600 -0.488000 -0.368000 -0.784000 -0.300000 -0.330300 -0.182900 -0.312000 -0.696000 0.632000 -0.300000 -0.330300 -0.182900 -0.312000 -0.696000 0.632000 -0.300000 -0.351500 -0.225700 -0.416000 -0.800000 0.416000 -0.250000 -0.319600 -0.182900 -0.280000 -0.832000 0.472000 -0.277600 -0.351500 -0.243900 -0.264000 -0.888000 0.352000 -0.250000 -0.343100 -0.243900 -0.320000 -0.920000 0.208000 -0.271900 -0.351500 -0.304800 -0.112000 -0.784000 -0.608000 -0.250000 -0.348300 -0.304800 -0.128000 -0.736000 -0.656000 -0.300000 -0.351500 -0.310200 -0.192000 -0.728000 -0.648000 -0.250000 -0.313600 -0.365800 -0.336000 -0.640000 -0.680000 -0.300000 -0.308000 -0.365800 0.080000 -0.656000 -0.744000 -0.250000 -0.301200 -0.379400 -0.536000 -0.264000 -0.792000 -0.300000 -0.301200 -0.372900 0.128000 -0.472000 -0.864000 -0.300000 -0.308000 -0.365800 0.080000 -0.656000 -0.744000 -0.333500 -0.301200 -0.365800 0.208000 -0.080000 -0.968000 -0.300000 -0.351500 -0.310200 -0.192000 -0.728000 -0.648000 -0.350000 -0.301200 -0.360500 0.376000 0.184000 -0.904000 -0.348000 -0.351500 -0.365800 -0.720000 -0.032000 -0.680000 -0.350000 -0.334300 -0.365800 -0.304000 0.096000 -0.944000 -0.350000 -0.351500 -0.368100 -0.440000 0.096000 -0.888000 -0.355700 -0.351500 -0.365800 0.360000 -0.072000 -0.928000 -0.350000 -0.354600 -0.365800 -0.264000 -0.632000 -0.720000 -0.400000 -0.351500 -0.338800 0.360000 -0.568000 -0.728000 -0.350000 -0.401700 -0.317400 -0.608000 -0.560000 -0.544000 -0.400000 -0.388800 -0.304800 0.392000 -0.800000 -0.448000 -0.376800 -0.401700 -0.304800 0.336000 -0.848000 -0.392000 -0.400000 -0.401700 -0.257800 0.112000 -0.952000 -0.280000 -0.350000 -0.410700 -0.304800 -0.592000 -0.664000 -0.440000 -0.400000 -0.404800 -0.243900 0.016000 -0.968000 0.240000 -0.350000 -0.409600 -0.243900 -0.632000 -0.696000 0.320000 -0.400000 -0.401700 -0.239700 -0.184000 -0.720000 0.656000 -0.350000 -0.401700 -0.229000 -0.616000 -0.656000 0.416000 -0.400000 -0.370500 -0.182900 -0.008000 -0.616000 0.776000 -0.350000 -0.366900 -0.182900 -0.368000 -0.552000 0.736000 -0.350000 -0.401700 -0.229000 -0.616000 -0.656000 0.416000 -0.331500 -0.351500 -0.182900 -0.432000 -0.576000 0.688000 -0.343800 -0.401700 -0.243900 -0.728000 -0.584000 0.344000 -0.300000 -0.351500 -0.225700 -0.416000 -0.800000 0.416000 -0.300000 -0.357600 -0.243900 -0.288000 -0.920000 0.248000 -0.277600 -0.351500 -0.243900 -0.264000 -0.888000 0.352000 -0.300000 -0.355300 -0.304800 -0.272000 -0.752000 -0.592000 -0.271900 -0.351500 -0.304800 -0.112000 -0.784000 -0.608000 -0.300000 -0.351500 -0.310200 -0.192000 -0.728000 -0.648000 -0.300000 -0.355300 -0.304800 -0.272000 -0.752000 -0.592000 -0.348000 -0.351500 -0.365800 -0.720000 -0.032000 -0.680000 -0.344100 -0.401700 -0.304800 -0.784000 -0.512000 -0.336000 -0.350000 -0.354600 -0.365800 -0.264000 -0.632000 -0.720000 -0.350000 -0.401700 -0.317400 -0.608000 -0.560000 -0.544000 -0.344100 -0.401700 -0.304800 -0.784000 -0.512000 -0.336000 -0.350000 -0.410700 -0.304800 -0.592000 -0.664000 -0.440000 -0.343800 -0.401700 -0.243900 -0.728000 -0.584000 0.344000 -0.350000 -0.409600 -0.243900 -0.632000 -0.696000 0.320000 -0.350000 -0.401700 -0.229000 -0.616000 -0.656000 0.416000 -0.350000 -0.401700 -0.229000 -0.616000 -0.656000 0.416000 -0.300000 -0.330300 -0.182900 -0.312000 -0.696000 0.632000 -0.300000 -0.330300 -0.182900 -0.312000 -0.696000 0.632000 -0.331500 -0.351500 -0.182900 -0.432000 -0.576000 0.688000 -0.300000 -0.351500 -0.225700 -0.416000 -0.800000 0.416000 -0.300000 -0.351500 -0.225700 -0.416000 -0.800000 0.416000 -0.427100 -0.301200 -0.182900 0.776000 0.464000 0.416000 -0.427100 -0.301200 -0.182900 0.776000 0.464000 0.416000 -0.450000 -0.338000 -0.182900 0.248000 0.592000 0.752000 -0.429200 -0.301200 -0.243900 0.816000 0.544000 -0.176000 -0.450000 -0.327300 -0.243900 -0.064000 0.864000 -0.488000 -0.401200 -0.301200 -0.304800 0.744000 0.488000 -0.440000 -0.450000 -0.351500 -0.290700 -0.176000 0.632000 -0.744000 -0.437100 -0.351500 -0.304800 0.688000 0.472000 -0.536000 -0.437100 -0.351500 -0.304800 0.688000 0.472000 -0.536000 -0.450000 -0.370700 -0.182900 -0.080000 -0.520000 0.848000 -0.450000 -0.370700 -0.182900 -0.080000 -0.520000 0.848000 -0.400000 -0.370500 -0.182900 -0.008000 -0.616000 0.776000 -0.450000 -0.401700 -0.212100 0.240000 -0.816000 0.520000 -0.400000 -0.401700 -0.239700 -0.184000 -0.720000 0.656000 -0.450000 -0.418500 -0.243900 -0.152000 -0.896000 0.400000 -0.400000 -0.404800 -0.243900 0.016000 -0.968000 0.240000 -0.450000 -0.411100 -0.304800 -0.144000 -0.808000 -0.560000 -0.400000 -0.401700 -0.257800 0.112000 -0.952000 -0.280000 -0.428900 -0.401700 -0.304800 -0.392000 -0.464000 -0.784000 -0.428900 -0.401700 -0.304800 -0.392000 -0.464000 -0.784000 -0.500000 0.355500 -0.182900 0.400000 0.616000 -0.664000 -0.500000 0.355500 -0.182900 0.400000 0.616000 -0.664000 -0.500000 0.351500 -0.187300 0.416000 0.568000 -0.696000 -0.506000 0.351500 -0.182900 0.424000 0.584000 -0.680000 -0.506000 0.351500 -0.182900 0.424000 0.584000 -0.680000 -0.550000 -0.401700 -0.218900 -0.128000 -0.904000 0.392000 -0.550000 -0.401700 -0.218900 -0.128000 -0.904000 0.392000 -0.550000 -0.409700 -0.243900 -0.144000 -0.944000 0.272000 -0.503900 -0.401700 -0.243900 -0.232000 -0.936000 0.256000 -0.550000 -0.415900 -0.304800 -0.192000 -0.848000 -0.480000 -0.502600 -0.401700 -0.304800 -0.320000 -0.840000 -0.416000 -0.550000 -0.401700 -0.333700 -0.144000 -0.688000 -0.704000 -0.550000 -0.401700 -0.333700 -0.144000 -0.688000 -0.704000 -0.600000 0.200800 -0.209200 0.248000 0.288000 -0.920000 -0.600000 0.200800 -0.209200 0.248000 0.288000 -0.920000 -0.650000 0.200800 -0.204000 0.272000 0.408000 -0.864000 -0.600000 0.150600 -0.225200 0.008000 0.128000 -0.984000 -0.650000 0.150600 -0.219600 0.200000 0.280000 -0.928000 -0.600000 0.100400 -0.237100 -0.096000 0.168000 -0.976000 -0.650000 0.100400 -0.241400 0.232000 0.064000 -0.968000 -0.600000 0.076600 -0.243900 -0.096000 0.360000 -0.920000 -0.650000 0.067400 -0.243900 0.208000 0.056000 -0.968000 -0.600000 0.050200 -0.251100 0.248000 0.344000 -0.896000 -0.650000 0.050200 -0.244900 0.216000 0.040000 -0.968000 -0.600000 0.000000 -0.284600 0.512000 0.112000 -0.840000 -0.650000 0.000000 -0.248500 0.680000 -0.160000 -0.712000 -0.650000 0.000000 -0.248500 0.680000 -0.160000 -0.712000 -0.600000 -0.392700 -0.182900 -0.184000 -0.752000 0.624000 -0.600000 -0.392700 -0.182900 -0.184000 -0.752000 0.624000 -0.628900 -0.401700 -0.182900 -0.216000 -0.760000 0.608000 -0.600000 -0.401700 -0.203000 -0.208000 -0.872000 0.432000 -0.600000 -0.401700 -0.203000 -0.208000 -0.872000 0.432000 -0.700000 -0.451900 -0.215800 -0.528000 -0.696000 0.472000 -0.700000 -0.451900 -0.215800 -0.528000 -0.696000 0.472000 -0.700000 -0.472400 -0.243900 -0.560000 -0.816000 -0.016000 -0.673600 -0.451900 -0.243900 -0.480000 -0.752000 0.448000 -0.700000 -0.481300 -0.304800 -0.240000 -0.712000 -0.656000 -0.653100 -0.451900 -0.304800 -0.336000 -0.480000 -0.800000 -0.700000 -0.451900 -0.321600 -0.136000 -0.312000 -0.936000 -0.700000 -0.451900 -0.321600 -0.136000 -0.312000 -0.936000 -0.700000 -0.435200 -0.182900 -0.448000 -0.712000 0.536000 -0.700000 -0.435200 -0.182900 -0.448000 -0.712000 0.536000 -0.719600 -0.451900 -0.182900 -0.568000 -0.640000 0.512000 -0.700000 -0.451900 -0.215800 -0.528000 -0.696000 0.472000 -0.700000 -0.451900 -0.215800 -0.528000 -0.696000 0.472000 -0.750000 -0.502100 -0.236900 -0.448000 -0.776000 0.432000 -0.750000 -0.502100 -0.236900 -0.448000 -0.776000 0.432000 -0.750000 -0.505200 -0.243900 -0.480000 -0.856000 0.152000 -0.744200 -0.502100 -0.243900 -0.480000 -0.864000 0.128000 -0.750000 -0.502100 -0.254300 -0.448000 -0.832000 -0.312000 -0.750000 -0.502100 -0.254300 -0.448000 -0.832000 -0.312000 -0.750000 0.157000 -0.182900 0.280000 0.720000 -0.624000 -0.750000 0.157000 -0.182900 0.280000 0.720000 -0.624000 -0.750000 0.150600 -0.191500 0.256000 0.656000 -0.704000 -0.769100 0.150600 -0.182900 0.248000 0.704000 -0.648000 -0.769100 0.150600 -0.182900 0.248000 0.704000 -0.648000 -0.929600 0.050200 -0.243900 0.432000 0.672000 -0.584000 -0.929600 0.050200 -0.243900 0.432000 0.672000 -0.584000 -0.950000 0.037500 -0.243900 0.432000 0.688000 -0.576000 -0.950000 0.050200 -0.224500 0.472000 0.712000 -0.504000 -0.950000 0.050200 -0.224500 0.472000 0.712000 -0.504000 -0.950000 0.069900 -0.182900 0.544000 0.736000 -0.392000 -0.950000 0.069900 -0.182900 0.544000 0.736000 -0.392000 -0.950000 0.050200 -0.224500 0.472000 0.712000 -0.504000 -0.978000 0.050200 -0.182900 0.512000 0.768000 -0.376000 -0.978000 0.050200 -0.182900 0.512000 0.768000 -0.376000 -0.950000 -0.451900 -0.206400 0.504000 0.736000 0.440000 -0.950000 -0.451900 -0.206400 0.504000 0.736000 0.440000 -0.950000 -0.433400 -0.243900 0.528000 0.832000 0.152000 -0.980700 -0.451900 -0.243900 0.752000 0.648000 0.032000 -0.950000 -0.451900 -0.300000 0.488000 0.464000 -0.728000 -0.950000 -0.433400 -0.243900 0.528000 0.832000 0.152000 -0.900000 -0.451900 -0.272400 0.368000 0.408000 -0.824000 -0.900000 -0.412700 -0.243900 0.520000 0.640000 -0.552000 -0.850000 -0.451900 -0.293100 0.448000 0.248000 -0.848000 -0.890600 -0.401700 -0.243900 0.576000 0.616000 -0.528000 -0.850000 -0.401700 -0.268600 0.504000 0.432000 -0.744000 -0.850000 -0.375700 -0.243900 0.544000 0.616000 -0.552000 -0.800000 -0.401700 -0.291400 0.440000 0.456000 -0.760000 -0.829500 -0.351500 -0.243900 0.648000 0.640000 -0.400000 -0.800000 -0.351500 -0.277300 0.568000 0.408000 -0.704000 -0.800000 -0.328800 -0.243900 0.640000 0.656000 -0.384000 -0.800000 -0.328800 -0.243900 0.640000 0.656000 -0.384000 -1.000000 -0.503200 -0.182900 0.400000 0.704000 0.576000 -1.000000 -0.503200 -0.182900 0.400000 0.704000 0.576000 -0.998000 -0.502100 -0.182900 0.528000 0.664000 0.520000 -1.000000 -0.502100 -0.189300 0.760000 0.568000 0.296000 -1.000000 -0.502100 -0.189300 0.760000 0.568000 0.296000 --0.891000 -0.451900 -0.304800 0.528000 0.824000 -0.192000 --0.891000 -0.451900 -0.304800 0.528000 0.824000 -0.192000 --0.896800 -0.451900 -0.243900 0.600000 0.776000 0.136000 --0.850000 -0.473200 -0.304800 0.272000 0.896000 -0.336000 --0.850000 -0.480800 -0.243900 0.376000 0.912000 0.152000 --0.800000 -0.473000 -0.304800 -0.736000 0.648000 -0.168000 --0.800000 -0.496000 -0.243900 0.424000 0.840000 0.320000 --0.787800 -0.451900 -0.304800 -0.984000 0.136000 -0.040000 --0.769800 -0.451900 -0.243900 -0.952000 -0.080000 0.272000 --0.769800 -0.451900 -0.243900 -0.952000 -0.080000 0.272000 --0.900000 -0.551700 -0.243900 -0.808000 -0.568000 -0.120000 --0.900000 -0.551700 -0.243900 -0.808000 -0.568000 -0.120000 --0.900000 -0.539600 -0.304800 -0.720000 -0.488000 -0.480000 --0.899500 -0.552300 -0.243900 -0.800000 -0.592000 -0.072000 --0.891900 -0.552300 -0.304800 -0.800000 -0.568000 -0.136000 --0.851300 -0.602500 -0.243900 -0.680000 -0.720000 -0.008000 --0.850000 -0.602000 -0.304800 -0.640000 -0.736000 -0.184000 --0.850000 -0.602500 -0.285600 -0.672000 -0.728000 -0.024000 --0.849200 -0.602500 -0.304800 -0.536000 -0.720000 -0.432000 --0.850000 -0.603800 -0.243900 -0.656000 -0.744000 0.064000 --0.800000 -0.636000 -0.304800 -0.536000 -0.792000 -0.272000 --0.800000 -0.632800 -0.243900 -0.432000 -0.896000 0.072000 --0.750000 -0.652200 -0.304800 -0.040000 -0.952000 -0.288000 --0.750000 -0.646000 -0.243900 -0.088000 -0.984000 0.144000 --0.750000 -0.646000 -0.243900 -0.088000 -0.984000 0.144000 --0.850000 -0.603800 -0.243900 -0.656000 -0.744000 0.064000 --0.850000 -0.603800 -0.243900 -0.656000 -0.744000 0.064000 --0.850000 -0.602500 -0.285600 -0.672000 -0.728000 -0.024000 --0.851300 -0.602500 -0.243900 -0.680000 -0.720000 -0.008000 --0.851300 -0.602500 -0.243900 -0.680000 -0.720000 -0.008000 --0.800000 0.108800 -0.243900 0.352000 0.608000 -0.704000 --0.800000 0.108800 -0.243900 0.352000 0.608000 -0.704000 --0.800000 0.100400 -0.252800 0.360000 0.584000 -0.720000 --0.785800 0.100400 -0.243900 0.360000 0.584000 -0.720000 --0.785800 0.100400 -0.243900 0.360000 0.584000 -0.720000 --0.750000 0.077000 -0.243900 0.368000 0.552000 -0.744000 --0.750000 0.077000 -0.243900 0.368000 0.552000 -0.744000 --0.750000 0.050200 -0.267100 0.368000 0.432000 -0.816000 --0.711800 0.050200 -0.243900 0.416000 0.432000 -0.792000 --0.711800 0.050200 -0.243900 0.416000 0.432000 -0.792000 --0.731900 -0.150600 -0.304800 0.424000 0.400000 -0.808000 --0.731900 -0.150600 -0.304800 0.424000 0.400000 -0.808000 --0.700000 -0.175200 -0.304800 0.352000 0.528000 -0.768000 --0.700000 -0.150600 -0.284500 0.376000 0.392000 -0.832000 --0.700000 -0.150600 -0.284500 0.376000 0.392000 -0.832000 --0.650000 -0.200800 -0.303800 0.136000 0.680000 -0.712000 --0.650000 -0.200800 -0.303800 0.136000 0.680000 -0.712000 --0.651700 -0.200800 -0.304800 0.320000 0.544000 -0.768000 --0.650000 -0.201600 -0.304800 0.104000 0.688000 -0.704000 --0.700000 -0.200800 -0.326900 0.208000 0.528000 -0.816000 --0.650000 -0.251000 -0.354800 0.152000 0.632000 -0.752000 --0.700000 -0.251000 -0.364900 0.104000 0.560000 -0.816000 --0.650000 -0.261300 -0.365800 0.088000 0.568000 -0.808000 --0.700000 -0.252100 -0.365800 0.096000 0.552000 -0.824000 --0.700000 -0.251000 -0.364900 0.104000 0.560000 -0.816000 --0.707800 -0.251000 -0.365800 0.064000 0.432000 -0.896000 --0.700000 -0.200800 -0.326900 0.208000 0.528000 -0.816000 --0.750000 -0.240500 -0.365800 0.056000 0.272000 -0.952000 --0.750000 -0.200800 -0.348300 0.272000 0.384000 -0.872000 --0.800000 -0.234100 -0.365800 -0.112000 0.264000 -0.952000 --0.800000 -0.200800 -0.355700 0.080000 0.256000 -0.960000 --0.800000 -0.200800 -0.355700 0.080000 0.256000 -0.960000 --0.650000 -0.035200 -0.243900 0.544000 0.264000 -0.792000 --0.650000 -0.035200 -0.243900 0.544000 0.264000 -0.792000 --0.650000 -0.050200 -0.249300 0.496000 0.208000 -0.840000 --0.642900 -0.050200 -0.243900 0.560000 0.208000 -0.792000 --0.642900 -0.050200 -0.243900 0.560000 0.208000 -0.792000 --0.544700 -0.200800 -0.304800 -0.080000 0.824000 -0.552000 --0.544700 -0.200800 -0.304800 -0.080000 0.824000 -0.552000 --0.550000 -0.200800 -0.303600 -0.040000 0.880000 -0.464000 --0.550000 -0.201300 -0.304800 -0.032000 0.864000 -0.488000 --0.550000 -0.201300 -0.304800 -0.032000 0.864000 -0.488000 --0.354400 -0.100400 -0.243900 -0.584000 0.448000 -0.664000 --0.354400 -0.100400 -0.243900 -0.584000 0.448000 -0.664000 --0.350000 -0.100400 -0.248500 -0.576000 0.440000 -0.680000 --0.350000 -0.093900 -0.243900 -0.600000 0.408000 -0.680000 --0.350000 -0.093900 -0.243900 -0.600000 0.408000 -0.680000 --0.363900 -0.552300 -0.243900 0.816000 -0.480000 0.304000 --0.363900 -0.552300 -0.243900 0.816000 -0.480000 0.304000 --0.350000 -0.535600 -0.243900 0.360000 -0.840000 0.384000 --0.350000 -0.552300 -0.283400 -0.096000 -0.680000 0.720000 --0.317500 -0.552300 -0.243900 -0.600000 -0.648000 0.448000 --0.317500 -0.552300 -0.243900 -0.600000 -0.648000 0.448000 --0.300000 -0.050200 -0.270300 -0.824000 0.232000 -0.512000 --0.300000 -0.050200 -0.270300 -0.824000 0.232000 -0.512000 --0.266700 -0.050200 -0.304800 -0.504000 0.288000 -0.808000 --0.300000 -0.100400 -0.298100 -0.480000 0.288000 -0.824000 --0.288100 -0.100400 -0.304800 -0.408000 0.240000 -0.872000 --0.300000 -0.118900 -0.304800 -0.376000 0.264000 -0.880000 --0.300000 -0.118900 -0.304800 -0.376000 0.264000 -0.880000 --0.256000 -0.703000 -0.243900 0.696000 -0.392000 0.584000 --0.256000 -0.703000 -0.243900 0.696000 -0.392000 0.584000 --0.250000 -0.679700 -0.243900 0.728000 -0.208000 0.640000 --0.250000 -0.703000 -0.252700 0.704000 -0.368000 0.600000 --0.250000 -0.703000 -0.252700 0.704000 -0.368000 0.600000 --0.213400 0.000000 -0.304800 -0.304000 0.448000 -0.832000 --0.213400 0.000000 -0.304800 -0.304000 0.448000 -0.832000 --0.250000 0.000000 -0.286200 -0.320000 0.712000 -0.616000 --0.250000 -0.028200 -0.304800 -0.400000 0.416000 -0.808000 --0.250000 -0.028200 -0.304800 -0.400000 0.416000 -0.808000 --0.196100 -0.200800 -0.304800 0.360000 -0.200000 -0.904000 --0.196100 -0.200800 -0.304800 0.360000 -0.200000 -0.904000 --0.150000 -0.200800 -0.284500 0.024000 -0.216000 -0.968000 --0.150000 -0.159100 -0.304800 0.152000 -0.400000 -0.896000 --0.108400 -0.200800 -0.304800 -0.496000 -0.048000 -0.856000 --0.108400 -0.200800 -0.304800 -0.496000 -0.048000 -0.856000 --0.172800 -0.552300 -0.243900 0.592000 -0.568000 0.560000 --0.172800 -0.552300 -0.243900 0.592000 -0.568000 0.560000 --0.150000 -0.530700 -0.243900 0.632000 -0.664000 0.392000 --0.150000 -0.552300 -0.270100 0.544000 -0.504000 0.656000 --0.150000 -0.552300 -0.270100 0.544000 -0.504000 0.656000 --0.126800 0.150600 -0.243900 -0.208000 0.496000 -0.832000 --0.126800 0.150600 -0.243900 -0.208000 0.496000 -0.832000 --0.100000 0.150600 -0.251000 -0.024000 0.408000 -0.904000 --0.100000 0.164100 -0.243900 -0.032000 0.432000 -0.896000 --0.077600 0.150600 -0.243900 0.320000 0.328000 -0.880000 --0.077600 0.150600 -0.243900 0.320000 0.328000 -0.880000 --0.150000 0.100400 -0.267100 -0.312000 0.440000 -0.832000 --0.150000 0.100400 -0.267100 -0.312000 0.440000 -0.832000 --0.100000 0.100400 -0.276400 0.032000 0.376000 -0.920000 --0.150000 0.050200 -0.299600 -0.080000 0.408000 -0.904000 --0.100000 0.050200 -0.292200 0.304000 0.312000 -0.896000 --0.150000 0.040500 -0.304800 -0.136000 0.416000 -0.896000 --0.100000 0.022400 -0.304800 0.184000 0.304000 -0.928000 --0.150000 0.000000 -0.322200 0.064000 0.240000 -0.968000 --0.100000 0.000000 -0.309600 0.168000 0.152000 -0.968000 --0.150000 -0.050200 -0.328000 0.128000 0.064000 -0.984000 --0.100000 -0.050200 -0.318600 0.080000 0.144000 -0.984000 --0.150000 -0.100400 -0.338700 0.056000 -0.088000 -0.992000 --0.100000 -0.100400 -0.323700 -0.040000 -0.152000 -0.984000 --0.150000 -0.150600 -0.309500 -0.032000 -0.400000 -0.912000 --0.100000 -0.150600 -0.315000 -0.456000 -0.064000 -0.880000 --0.100000 -0.150600 -0.315000 -0.456000 -0.064000 -0.880000 --0.077600 0.000000 -0.304800 0.248000 0.344000 -0.896000 --0.077600 0.000000 -0.304800 0.248000 0.344000 -0.896000 --0.050000 -0.015100 -0.304800 0.280000 0.536000 -0.784000 --0.050000 0.000000 -0.288000 0.256000 0.560000 -0.776000 --0.050000 0.000000 -0.288000 0.256000 0.560000 -0.776000 --0.013800 -0.351500 -0.243900 0.552000 -0.808000 -0.168000 --0.013800 -0.351500 -0.243900 0.552000 -0.808000 -0.168000 --0.050000 -0.380500 -0.243900 0.664000 -0.736000 -0.104000 --0.026900 -0.351500 -0.304800 0.608000 -0.688000 -0.384000 --0.050000 -0.374600 -0.304800 0.584000 -0.672000 -0.448000 --0.050000 -0.351500 -0.336900 0.024000 -0.576000 -0.808000 --0.050000 -0.351500 -0.336900 0.024000 -0.576000 -0.808000 -0.050000 -0.050200 -0.279200 0.280000 0.320000 -0.896000 -0.050000 -0.050200 -0.279200 0.280000 0.320000 -0.896000 -0.004800 -0.050200 -0.304800 0.368000 0.176000 -0.904000 -0.050000 -0.100400 -0.298100 0.360000 0.248000 -0.896000 -0.039400 -0.100400 -0.304800 0.408000 0.224000 -0.880000 -0.039400 -0.100400 -0.304800 0.408000 0.224000 -0.880000 -0.113100 0.000000 -0.243900 -0.392000 0.768000 -0.496000 -0.113100 0.000000 -0.243900 -0.392000 0.768000 -0.496000 -0.150000 0.000000 -0.257100 -0.208000 0.552000 -0.800000 -0.150000 0.015400 -0.243900 -0.208000 0.728000 -0.640000 -0.150000 0.015400 -0.243900 -0.208000 0.728000 -0.640000 -0.200000 -0.100400 -0.298900 0.088000 0.040000 -0.992000 -0.200000 -0.100400 -0.298900 0.088000 0.040000 -0.992000 -0.185500 -0.100400 -0.304800 0.296000 0.104000 -0.944000 -0.200000 -0.139100 -0.304800 0.208000 0.104000 -0.968000 -0.150000 -0.100400 -0.322200 0.000000 0.224000 -0.968000 -0.200000 -0.150600 -0.306400 0.192000 0.112000 -0.968000 -0.150000 -0.150600 -0.323600 -0.232000 0.464000 -0.848000 -0.200000 -0.200800 -0.335700 -0.120000 0.200000 -0.968000 -0.150000 -0.200800 -0.325200 0.160000 0.176000 -0.968000 -0.200000 -0.251000 -0.346500 -0.184000 0.088000 -0.976000 -0.150000 -0.251000 -0.336000 0.080000 -0.336000 -0.928000 -0.150000 -0.251000 -0.336000 0.080000 -0.336000 -0.928000 -0.211400 -0.050200 -0.304800 0.152000 0.184000 -0.968000 -0.211400 -0.050200 -0.304800 0.152000 0.184000 -0.968000 -0.200000 -0.061600 -0.304800 0.000000 -0.144000 -0.984000 -0.250000 -0.050200 -0.297000 0.000000 0.040000 -0.992000 -0.200000 -0.100400 -0.298900 0.088000 0.040000 -0.992000 -0.250000 -0.100400 -0.298400 -0.088000 0.216000 -0.968000 -0.200000 -0.139100 -0.304800 0.208000 0.104000 -0.968000 -0.250000 -0.114900 -0.304800 -0.104000 0.280000 -0.952000 -0.200000 -0.150600 -0.306400 0.192000 0.112000 -0.968000 -0.250000 -0.150600 -0.317700 0.024000 0.336000 -0.936000 -0.200000 -0.200800 -0.335700 -0.120000 0.200000 -0.968000 -0.250000 -0.200800 -0.343100 0.104000 0.232000 -0.960000 -0.200000 -0.251000 -0.346500 -0.184000 0.088000 -0.976000 -0.250000 -0.251000 -0.353900 0.064000 0.384000 -0.920000 -0.250000 -0.251000 -0.353900 0.064000 0.384000 -0.920000 -0.250000 -0.050200 -0.297000 0.000000 0.040000 -0.992000 -0.250000 -0.050200 -0.297000 0.000000 0.040000 -0.992000 -0.266500 -0.050200 -0.304800 -0.280000 0.064000 -0.952000 -0.250000 -0.100400 -0.298400 -0.088000 0.216000 -0.968000 -0.278900 -0.100400 -0.304800 -0.176000 0.256000 -0.944000 -0.250000 -0.114900 -0.304800 -0.104000 0.280000 -0.952000 -0.250000 -0.114900 -0.304800 -0.104000 0.280000 -0.952000 -0.350000 -0.127600 -0.304800 0.032000 -0.600000 -0.792000 -0.350000 -0.127600 -0.304800 0.032000 -0.600000 -0.792000 -0.313400 -0.150600 -0.304800 0.400000 -0.360000 -0.840000 -0.350000 -0.150600 -0.283600 -0.064000 -0.424000 -0.896000 -0.320800 -0.200800 -0.304800 0.496000 0.328000 -0.800000 -0.350000 -0.200800 -0.271400 0.216000 0.224000 -0.944000 -0.350000 -0.228300 -0.304800 0.616000 0.528000 -0.576000 -0.350000 -0.228300 -0.304800 0.616000 0.528000 -0.576000 -0.300000 -0.357600 -0.243900 -0.288000 -0.920000 0.248000 -0.300000 -0.357600 -0.243900 -0.288000 -0.920000 0.248000 -0.343800 -0.401700 -0.243900 -0.728000 -0.584000 0.344000 -0.300000 -0.355300 -0.304800 -0.272000 -0.752000 -0.592000 -0.344100 -0.401700 -0.304800 -0.784000 -0.512000 -0.336000 -0.344100 -0.401700 -0.304800 -0.784000 -0.512000 -0.336000 -0.350000 -0.127600 -0.304800 0.032000 -0.600000 -0.792000 -0.350000 -0.127600 -0.304800 0.032000 -0.600000 -0.792000 -0.350000 -0.150600 -0.283600 -0.064000 -0.424000 -0.896000 -0.380400 -0.150600 -0.304800 -0.424000 -0.456000 -0.776000 -0.380400 -0.150600 -0.304800 -0.424000 -0.456000 -0.776000 -0.419200 0.050200 -0.304800 -0.224000 0.736000 -0.632000 -0.419200 0.050200 -0.304800 -0.224000 0.736000 -0.632000 -0.400000 0.050200 -0.294000 -0.352000 0.672000 -0.640000 -0.400000 0.041200 -0.304800 -0.352000 0.672000 -0.648000 -0.400000 0.041200 -0.304800 -0.352000 0.672000 -0.648000 -0.400000 -0.168700 -0.304800 -0.504000 -0.464000 -0.720000 -0.400000 -0.168700 -0.304800 -0.504000 -0.464000 -0.720000 -0.400000 -0.200800 -0.276700 0.448000 -0.472000 -0.752000 -0.424400 -0.200800 -0.304800 -0.552000 -0.520000 -0.648000 -0.400000 -0.249400 -0.243900 0.760000 -0.472000 -0.424000 -0.450000 -0.217600 -0.304800 -0.352000 -0.736000 -0.560000 -0.450000 -0.248400 -0.243900 -0.224000 -0.888000 -0.384000 -0.450000 -0.248400 -0.243900 -0.224000 -0.888000 -0.384000 -0.550000 -0.150600 -0.287800 0.352000 0.528000 -0.768000 -0.550000 -0.150600 -0.287800 0.352000 0.528000 -0.768000 -0.523400 -0.150600 -0.304800 0.376000 0.592000 -0.704000 -0.550000 -0.162200 -0.304800 0.376000 0.720000 -0.576000 -0.500000 -0.150600 -0.319100 0.336000 0.504000 -0.792000 -0.550000 -0.194000 -0.365800 0.224000 0.896000 -0.368000 -0.500000 -0.200800 -0.334200 -0.376000 -0.448000 -0.800000 -0.535800 -0.200800 -0.365800 -0.736000 0.208000 -0.632000 -0.500000 -0.222600 -0.304800 -0.320000 -0.704000 -0.624000 -0.550000 -0.216200 -0.365800 -0.080000 -0.576000 -0.808000 -0.535300 -0.251000 -0.304800 -0.648000 -0.480000 -0.576000 -0.550000 -0.251000 -0.326800 -0.648000 -0.504000 -0.560000 -0.550000 -0.216200 -0.365800 -0.080000 -0.576000 -0.808000 -0.573000 -0.251000 -0.365800 -0.696000 0.544000 -0.464000 -0.559600 -0.200800 -0.365800 0.680000 0.504000 -0.520000 -0.600000 -0.231600 -0.365800 0.072000 0.640000 -0.760000 -0.594200 -0.200800 -0.304800 0.544000 0.576000 -0.600000 -0.600000 -0.206100 -0.304800 0.488000 0.616000 -0.608000 -0.600000 -0.200800 -0.298700 0.448000 0.592000 -0.656000 -0.650000 -0.208600 -0.304800 0.024000 0.680000 -0.728000 -0.650000 -0.200800 -0.297000 0.088000 0.616000 -0.776000 -0.600000 -0.200800 -0.298700 0.448000 0.592000 -0.656000 -0.650000 -0.150600 -0.274900 0.544000 0.464000 -0.688000 -0.600000 -0.150600 -0.265200 0.248000 0.032000 -0.960000 -0.600000 -0.200800 -0.298700 0.448000 0.592000 -0.656000 -0.550000 -0.150600 -0.287800 0.352000 0.528000 -0.768000 -0.594200 -0.200800 -0.304800 0.544000 0.576000 -0.600000 -0.550000 -0.162200 -0.304800 0.376000 0.720000 -0.576000 -0.559600 -0.200800 -0.365800 0.680000 0.504000 -0.520000 -0.550000 -0.194000 -0.365800 0.224000 0.896000 -0.368000 -0.550000 -0.200800 -0.388300 0.280000 0.584000 -0.752000 -0.535800 -0.200800 -0.365800 -0.736000 0.208000 -0.632000 -0.550000 -0.216200 -0.365800 -0.080000 -0.576000 -0.808000 -0.550000 -0.200800 -0.388300 0.280000 0.584000 -0.752000 -0.559600 -0.200800 -0.365800 0.680000 0.504000 -0.520000 -0.559600 -0.200800 -0.365800 0.680000 0.504000 -0.520000 -0.500000 -0.222600 -0.304800 -0.320000 -0.704000 -0.624000 -0.500000 -0.222600 -0.304800 -0.320000 -0.704000 -0.624000 -0.500000 -0.251000 -0.264200 -0.272000 -0.744000 -0.600000 -0.535300 -0.251000 -0.304800 -0.648000 -0.480000 -0.576000 -0.535300 -0.251000 -0.304800 -0.648000 -0.480000 -0.576000 -0.800000 -0.401700 -0.291400 0.440000 0.456000 -0.760000 -0.800000 -0.401700 -0.291400 0.440000 0.456000 -0.760000 -0.800000 -0.418300 -0.304800 0.408000 0.496000 -0.760000 -0.850000 -0.401700 -0.268600 0.504000 0.432000 -0.744000 -0.837100 -0.451900 -0.304800 0.528000 0.264000 -0.800000 -0.850000 -0.451900 -0.293100 0.448000 0.248000 -0.848000 -0.800000 -0.493800 -0.304800 0.032000 -0.688000 -0.720000 -0.850000 -0.490600 -0.304800 0.216000 0.112000 -0.968000 -0.800000 -0.502100 -0.293400 -0.120000 -0.840000 -0.520000 -0.832800 -0.502100 -0.304800 -0.104000 -0.544000 -0.824000 -0.832800 -0.502100 -0.304800 -0.104000 -0.544000 -0.824000 -0.858900 0.050200 -0.243900 -0.424000 0.568000 -0.696000 -0.858900 0.050200 -0.243900 -0.424000 0.568000 -0.696000 -0.900000 0.050200 -0.268900 0.208000 0.672000 -0.696000 -0.900000 0.070800 -0.243900 -0.096000 0.744000 -0.656000 -0.900000 0.070800 -0.243900 -0.096000 0.744000 -0.656000 -0.981700 -0.050200 -0.304800 0.528000 0.432000 -0.720000 -0.981700 -0.050200 -0.304800 0.528000 0.432000 -0.720000 -1.000000 -0.073100 -0.304800 0.536000 0.424000 -0.720000 -1.000000 -0.050200 -0.288900 0.520000 0.432000 -0.728000 -1.000000 -0.050200 -0.288900 0.520000 0.432000 -0.728000 --0.900000 0.104600 -0.304800 0.304000 0.568000 -0.760000 --0.900000 0.104600 -0.304800 0.304000 0.568000 -0.760000 --0.900000 0.100400 -0.308600 0.312000 0.536000 -0.776000 --0.892300 0.100400 -0.304800 0.320000 0.536000 -0.776000 --0.892300 0.100400 -0.304800 0.320000 0.536000 -0.776000 --0.850000 -0.301200 -0.321900 -0.728000 -0.616000 -0.280000 --0.850000 -0.301200 -0.321900 -0.728000 -0.616000 -0.280000 --0.850000 -0.251000 -0.359600 -0.320000 0.248000 -0.912000 --0.826000 -0.301200 -0.365800 -0.648000 -0.448000 -0.600000 --0.828000 -0.251000 -0.365800 -0.248000 0.216000 -0.936000 --0.800000 -0.301200 -0.380800 -0.264000 0.104000 -0.952000 --0.800000 -0.251000 -0.370300 -0.064000 0.200000 -0.976000 --0.750000 -0.301200 -0.392900 -0.104000 0.352000 -0.928000 --0.750000 -0.251000 -0.369800 0.056000 0.280000 -0.952000 --0.750000 -0.251000 -0.369800 0.056000 0.280000 -0.952000 --0.800000 -0.066700 -0.304800 0.296000 0.144000 -0.936000 --0.800000 -0.066700 -0.304800 0.296000 0.144000 -0.936000 --0.800000 -0.100400 -0.313000 0.368000 0.216000 -0.896000 --0.785000 -0.100400 -0.304800 0.328000 0.224000 -0.912000 --0.785000 -0.100400 -0.304800 0.328000 0.224000 -0.912000 --0.750000 -0.129200 -0.304800 0.392000 0.376000 -0.832000 --0.750000 -0.129200 -0.304800 0.392000 0.376000 -0.832000 --0.750000 -0.150600 -0.317800 0.416000 0.384000 -0.816000 --0.731900 -0.150600 -0.304800 0.424000 0.400000 -0.808000 --0.731900 -0.150600 -0.304800 0.424000 0.400000 -0.808000 --0.576800 -0.251000 -0.365800 -0.136000 0.624000 -0.760000 --0.576800 -0.251000 -0.365800 -0.136000 0.624000 -0.760000 --0.600000 -0.251000 -0.360600 -0.120000 0.624000 -0.760000 --0.600000 -0.256300 -0.365800 -0.112000 0.608000 -0.776000 --0.600000 -0.256300 -0.365800 -0.112000 0.608000 -0.776000 --0.500000 -0.637800 -0.304800 -0.208000 -0.976000 -0.032000 --0.500000 -0.637800 -0.304800 -0.208000 -0.976000 -0.032000 --0.455200 -0.652700 -0.304800 -0.280000 -0.952000 0.040000 --0.500000 -0.633000 -0.365800 -0.088000 -0.968000 -0.200000 --0.450000 -0.652700 -0.319500 -0.256000 -0.952000 -0.136000 --0.450000 -0.645700 -0.365800 -0.144000 -0.904000 -0.392000 --0.405700 -0.652700 -0.365800 -0.144000 -0.920000 -0.344000 --0.405700 -0.652700 -0.365800 -0.144000 -0.920000 -0.344000 --0.350000 -0.585900 -0.365800 0.168000 -0.792000 -0.576000 --0.350000 -0.585900 -0.365800 0.168000 -0.792000 -0.576000 --0.350000 -0.594300 -0.304800 0.520000 -0.800000 0.280000 --0.357100 -0.602500 -0.365800 0.904000 0.256000 -0.312000 --0.351600 -0.602500 -0.304800 0.944000 0.304000 0.024000 --0.350000 -0.629600 -0.365800 0.056000 0.640000 -0.760000 --0.350000 -0.605300 -0.304800 0.248000 0.960000 -0.032000 --0.328400 -0.602500 -0.365800 -0.832000 -0.248000 -0.488000 --0.344900 -0.602500 -0.304800 -0.744000 0.664000 -0.032000 --0.350000 -0.585900 -0.365800 0.168000 -0.792000 -0.576000 --0.350000 -0.594300 -0.304800 0.520000 -0.800000 0.280000 --0.350000 -0.594300 -0.304800 0.520000 -0.800000 0.280000 --0.350000 -0.747900 -0.304800 -0.512000 -0.832000 -0.184000 --0.350000 -0.747900 -0.304800 -0.512000 -0.832000 -0.184000 --0.350000 -0.703000 -0.357000 -0.336000 -0.496000 -0.792000 --0.371300 -0.703000 -0.304800 -0.816000 -0.552000 -0.144000 --0.371300 -0.703000 -0.304800 -0.816000 -0.552000 -0.144000 --0.331500 -0.150600 -0.304800 -0.256000 0.464000 -0.840000 --0.331500 -0.150600 -0.304800 -0.256000 0.464000 -0.840000 --0.300000 -0.150600 -0.319300 -0.256000 0.480000 -0.832000 --0.300000 -0.118900 -0.304800 -0.376000 0.264000 -0.880000 --0.300000 -0.118900 -0.304800 -0.376000 0.264000 -0.880000 --0.250000 -0.639500 -0.365800 0.216000 -0.224000 -0.944000 --0.250000 -0.639500 -0.365800 0.216000 -0.224000 -0.944000 --0.282800 -0.652700 -0.365800 0.080000 -0.160000 -0.976000 --0.250000 -0.652700 -0.361600 0.240000 -0.216000 -0.944000 --0.250000 -0.652700 -0.361600 0.240000 -0.216000 -0.944000 --0.250000 -0.150600 -0.327500 -0.120000 0.152000 -0.976000 --0.250000 -0.150600 -0.327500 -0.120000 0.152000 -0.976000 --0.200000 -0.150600 -0.333300 0.216000 -0.272000 -0.936000 --0.250000 -0.200800 -0.333200 0.168000 0.080000 -0.976000 --0.200000 -0.200800 -0.306700 0.368000 -0.184000 -0.904000 --0.250000 -0.251000 -0.337900 0.384000 0.112000 -0.912000 --0.200000 -0.251000 -0.307600 0.408000 0.096000 -0.904000 --0.250000 -0.301200 -0.349000 0.296000 0.272000 -0.912000 --0.200000 -0.301200 -0.313400 0.328000 0.152000 -0.928000 --0.200000 -0.301200 -0.313400 0.328000 0.152000 -0.928000 --0.200000 -0.602500 -0.345500 0.488000 -0.272000 -0.824000 --0.200000 -0.602500 -0.345500 0.488000 -0.272000 -0.824000 --0.200000 -0.558000 -0.365800 0.448000 -0.240000 -0.856000 --0.229500 -0.602500 -0.365800 0.408000 -0.240000 -0.872000 --0.200000 -0.552300 -0.367100 0.360000 -0.232000 -0.896000 --0.250000 -0.602500 -0.376000 0.360000 -0.328000 -0.872000 --0.250000 -0.552300 -0.402600 0.504000 -0.312000 -0.792000 --0.250000 -0.552300 -0.402600 0.504000 -0.312000 -0.792000 --0.150000 -0.602500 -0.307600 0.456000 -0.280000 -0.840000 --0.150000 -0.602500 -0.307600 0.456000 -0.280000 -0.840000 --0.150000 -0.552300 -0.337600 0.424000 -0.304000 -0.840000 --0.200000 -0.602500 -0.345500 0.488000 -0.272000 -0.824000 --0.196100 -0.552300 -0.365800 0.320000 -0.272000 -0.904000 --0.200000 -0.558000 -0.365800 0.448000 -0.240000 -0.856000 --0.200000 -0.552300 -0.367100 0.360000 -0.232000 -0.896000 --0.200000 -0.552300 -0.367100 0.360000 -0.232000 -0.896000 --0.147100 -0.502100 -0.365800 0.472000 -0.192000 -0.848000 --0.147100 -0.502100 -0.365800 0.472000 -0.192000 -0.848000 --0.145700 -0.451900 -0.365800 0.464000 0.040000 -0.880000 --0.100000 -0.502100 -0.325200 0.520000 -0.368000 -0.760000 --0.100000 -0.451900 -0.336100 0.496000 -0.048000 -0.856000 --0.074100 -0.502100 -0.304800 0.864000 -0.480000 0.112000 --0.061500 -0.451900 -0.304800 0.928000 -0.352000 0.088000 --0.061500 -0.451900 -0.304800 0.928000 -0.352000 0.088000 --0.100000 -0.200800 -0.311700 -0.496000 0.128000 -0.856000 --0.100000 -0.200800 -0.311700 -0.496000 0.128000 -0.856000 --0.050000 -0.200800 -0.320900 -0.056000 0.280000 -0.952000 --0.100000 -0.251000 -0.333700 -0.512000 0.248000 -0.816000 --0.050000 -0.251000 -0.364300 -0.216000 0.352000 -0.904000 --0.100000 -0.301200 -0.349000 -0.368000 0.264000 -0.888000 --0.050000 -0.266900 -0.365800 -0.288000 0.088000 -0.944000 --0.058500 -0.301200 -0.365800 -0.384000 -0.288000 -0.872000 --0.050000 -0.301200 -0.370400 -0.392000 -0.264000 -0.872000 --0.050000 -0.309800 -0.365800 -0.336000 -0.416000 -0.840000 --0.058500 -0.301200 -0.365800 -0.384000 -0.288000 -0.872000 --0.050000 -0.351500 -0.336900 0.024000 -0.576000 -0.808000 --0.100000 -0.301200 -0.349000 -0.368000 0.264000 -0.888000 --0.100000 -0.351500 -0.338800 0.024000 -0.312000 -0.944000 --0.100000 -0.351500 -0.338800 0.024000 -0.312000 -0.944000 -0.050000 -0.119800 -0.304800 0.416000 0.264000 -0.864000 -0.050000 -0.119800 -0.304800 0.416000 0.264000 -0.864000 -0.050000 -0.150600 -0.318000 0.352000 0.312000 -0.872000 -0.096000 -0.150600 -0.304800 0.176000 0.336000 -0.920000 -0.096000 -0.150600 -0.304800 0.176000 0.336000 -0.920000 -0.301400 0.000000 -0.304800 -0.584000 0.656000 -0.464000 -0.301400 0.000000 -0.304800 -0.584000 0.656000 -0.464000 -0.350000 0.000000 -0.339100 -0.264000 0.552000 -0.784000 -0.350000 0.024300 -0.304800 -0.456000 0.784000 -0.408000 -0.400000 0.000000 -0.343200 -0.216000 0.592000 -0.768000 -0.400000 0.041200 -0.304800 -0.352000 0.672000 -0.648000 -0.400000 0.041200 -0.304800 -0.352000 0.672000 -0.648000 -0.383500 -0.050200 -0.365800 0.200000 -0.288000 -0.928000 -0.383500 -0.050200 -0.365800 0.200000 -0.288000 -0.928000 -0.400000 -0.050200 -0.360800 0.184000 -0.432000 -0.872000 -0.350000 -0.037900 -0.365800 -0.440000 0.432000 -0.776000 -0.400000 0.000000 -0.343200 -0.216000 0.592000 -0.768000 -0.350000 0.000000 -0.339100 -0.264000 0.552000 -0.784000 -0.350000 0.000000 -0.339100 -0.264000 0.552000 -0.784000 -0.355700 -0.351500 -0.365800 0.360000 -0.072000 -0.928000 -0.355700 -0.351500 -0.365800 0.360000 -0.072000 -0.928000 -0.400000 -0.351500 -0.338800 0.360000 -0.568000 -0.728000 -0.350000 -0.334300 -0.365800 -0.304000 0.096000 -0.944000 -0.400000 -0.301200 -0.307300 0.704000 0.496000 -0.496000 -0.350000 -0.301200 -0.360500 0.376000 0.184000 -0.904000 -0.350000 -0.301200 -0.360500 0.376000 0.184000 -0.904000 -0.376800 -0.401700 -0.304800 0.336000 -0.848000 -0.392000 -0.376800 -0.401700 -0.304800 0.336000 -0.848000 -0.392000 -0.350000 -0.401700 -0.317400 -0.608000 -0.560000 -0.544000 -0.350000 -0.410700 -0.304800 -0.592000 -0.664000 -0.440000 -0.350000 -0.410700 -0.304800 -0.592000 -0.664000 -0.440000 -0.400000 -0.050200 -0.360800 0.184000 -0.432000 -0.872000 -0.400000 -0.050200 -0.360800 0.184000 -0.432000 -0.872000 -0.450000 -0.050200 -0.325200 -0.120000 -0.568000 -0.808000 -0.400000 -0.100400 -0.340000 -0.040000 -0.360000 -0.928000 -0.450000 -0.100400 -0.322200 0.392000 -0.360000 -0.840000 -0.400000 -0.150600 -0.318400 -0.432000 -0.416000 -0.792000 -0.450000 -0.150600 -0.321300 -0.008000 0.120000 -0.992000 -0.400000 -0.168700 -0.304800 -0.504000 -0.464000 -0.720000 -0.450000 -0.200800 -0.331300 -0.472000 -0.400000 -0.776000 -0.424400 -0.200800 -0.304800 -0.552000 -0.520000 -0.648000 -0.450000 -0.217600 -0.304800 -0.352000 -0.736000 -0.560000 -0.450000 -0.217600 -0.304800 -0.352000 -0.736000 -0.560000 -0.450000 0.055500 -0.304800 0.064000 0.864000 -0.496000 -0.450000 0.055500 -0.304800 0.064000 0.864000 -0.496000 -0.450000 0.050200 -0.314200 0.064000 0.744000 -0.656000 -0.496000 0.050200 -0.304800 0.104000 0.800000 -0.576000 -0.496000 0.050200 -0.304800 0.104000 0.800000 -0.576000 -0.500000 -0.333600 -0.304800 -0.408000 0.824000 -0.376000 -0.500000 -0.333600 -0.304800 -0.408000 0.824000 -0.376000 -0.458900 -0.351500 -0.304800 -0.472000 0.360000 -0.792000 -0.500000 -0.351500 -0.354900 -0.384000 -0.472000 -0.784000 -0.500000 -0.400200 -0.304800 -0.176000 -0.672000 -0.712000 -0.500000 -0.400200 -0.304800 -0.176000 -0.672000 -0.712000 -0.450000 -0.380500 -0.304800 -0.144000 0.256000 -0.952000 -0.450000 -0.380500 -0.304800 -0.144000 0.256000 -0.952000 -0.450000 -0.401700 -0.316200 -0.184000 -0.360000 -0.904000 -0.492100 -0.401700 -0.304800 0.152000 -0.576000 -0.792000 -0.492100 -0.401700 -0.304800 0.152000 -0.576000 -0.792000 -0.500000 -0.127100 -0.304800 0.480000 0.456000 -0.744000 -0.500000 -0.127100 -0.304800 0.480000 0.456000 -0.744000 -0.500000 -0.150600 -0.319100 0.336000 0.504000 -0.792000 -0.523400 -0.150600 -0.304800 0.376000 0.592000 -0.704000 -0.523400 -0.150600 -0.304800 0.376000 0.592000 -0.704000 -0.600000 -0.086300 -0.304800 0.440000 0.312000 -0.832000 -0.600000 -0.086300 -0.304800 0.440000 0.312000 -0.832000 -0.589400 -0.100400 -0.304800 -0.440000 -0.424000 -0.784000 -0.600000 -0.100400 -0.312700 0.376000 -0.472000 -0.792000 -0.600000 -0.105700 -0.304800 0.312000 -0.728000 -0.600000 -0.604900 -0.100400 -0.304800 0.744000 -0.360000 -0.552000 -0.600000 -0.100400 -0.312700 0.376000 -0.472000 -0.792000 -0.600000 -0.086300 -0.304800 0.440000 0.312000 -0.832000 -0.600000 -0.086300 -0.304800 0.440000 0.312000 -0.832000 -0.600000 -0.206100 -0.304800 0.488000 0.616000 -0.608000 -0.600000 -0.206100 -0.304800 0.488000 0.616000 -0.608000 -0.650000 -0.208600 -0.304800 0.024000 0.680000 -0.728000 -0.600000 -0.231600 -0.365800 0.072000 0.640000 -0.760000 -0.650000 -0.245700 -0.365800 0.168000 0.856000 -0.480000 -0.600000 -0.249700 -0.426800 -0.344000 0.872000 -0.328000 -0.650000 -0.251000 -0.378600 0.328000 0.752000 -0.560000 -0.604800 -0.251000 -0.426800 0.544000 0.248000 -0.792000 -0.650000 -0.267900 -0.365800 0.280000 -0.440000 -0.848000 -0.600000 -0.252700 -0.426800 -0.416000 -0.736000 -0.520000 -0.600000 -0.288400 -0.365800 -0.376000 -0.712000 -0.584000 -0.598300 -0.251000 -0.426800 -0.848000 0.144000 -0.496000 -0.573000 -0.251000 -0.365800 -0.696000 0.544000 -0.464000 -0.600000 -0.249700 -0.426800 -0.344000 0.872000 -0.328000 -0.600000 -0.231600 -0.365800 0.072000 0.640000 -0.760000 -0.600000 -0.231600 -0.365800 0.072000 0.640000 -0.760000 -0.700000 -0.211400 -0.304800 0.288000 0.624000 -0.720000 -0.700000 -0.211400 -0.304800 0.288000 0.624000 -0.720000 -0.700000 -0.251000 -0.357800 0.296000 0.496000 -0.808000 -0.728900 -0.251000 -0.304800 0.720000 0.440000 -0.528000 -0.700000 -0.301200 -0.354900 0.160000 -0.240000 -0.952000 -0.744500 -0.301200 -0.304800 0.640000 0.104000 -0.760000 -0.744500 -0.301200 -0.304800 0.640000 0.104000 -0.760000 -0.750000 -0.334300 -0.304800 0.512000 0.112000 -0.840000 -0.750000 -0.334300 -0.304800 0.512000 0.112000 -0.840000 -0.750000 -0.351500 -0.307800 0.512000 0.128000 -0.840000 -0.754800 -0.351500 -0.304800 0.424000 0.136000 -0.888000 -0.750000 -0.401700 -0.321600 0.336000 0.000000 -0.936000 -0.779200 -0.401700 -0.304800 0.400000 0.336000 -0.848000 -0.779200 -0.401700 -0.304800 0.400000 0.336000 -0.848000 -0.800000 -0.418300 -0.304800 0.408000 0.496000 -0.760000 -0.800000 -0.418300 -0.304800 0.408000 0.496000 -0.760000 -0.800000 -0.451900 -0.330300 0.328000 0.200000 -0.920000 -0.837100 -0.451900 -0.304800 0.528000 0.264000 -0.800000 -0.800000 -0.493800 -0.304800 0.032000 -0.688000 -0.720000 -0.800000 -0.493800 -0.304800 0.032000 -0.688000 -0.720000 -0.856800 -0.502100 -0.304800 0.288000 0.144000 -0.944000 -0.856800 -0.502100 -0.304800 0.288000 0.144000 -0.944000 -0.850000 -0.502100 -0.307100 0.032000 -0.240000 -0.968000 -0.850000 -0.504700 -0.304800 -0.096000 -0.664000 -0.736000 -0.850000 -0.504700 -0.304800 -0.096000 -0.664000 -0.736000 -0.900000 0.016700 -0.304800 -0.152000 0.720000 -0.664000 -0.900000 0.016700 -0.304800 -0.152000 0.720000 -0.664000 -0.900000 0.000000 -0.329500 -0.080000 0.648000 -0.744000 -0.927400 0.000000 -0.304800 0.400000 0.560000 -0.720000 -0.927400 0.000000 -0.304800 0.400000 0.560000 -0.720000 --0.850000 -0.496800 -0.365800 -0.176000 0.616000 -0.760000 --0.850000 -0.496800 -0.365800 -0.176000 0.616000 -0.760000 --0.864000 -0.502100 -0.365800 -0.304000 0.480000 -0.816000 --0.850000 -0.502100 -0.370900 -0.184000 0.560000 -0.800000 --0.860100 -0.552300 -0.365800 -0.680000 -0.432000 -0.584000 --0.850000 -0.552300 -0.378600 -0.568000 -0.344000 -0.736000 --0.850000 -0.564700 -0.365800 -0.608000 -0.528000 -0.584000 --0.800000 -0.552300 -0.401000 -0.552000 -0.288000 -0.776000 --0.806700 -0.602500 -0.365800 -0.520000 -0.656000 -0.536000 --0.800000 -0.602500 -0.372400 -0.488000 -0.592000 -0.624000 --0.800000 -0.607700 -0.365800 -0.488000 -0.640000 -0.584000 --0.750000 -0.602500 -0.401000 -0.336000 -0.696000 -0.624000 --0.750000 -0.628000 -0.365800 -0.232000 -0.808000 -0.528000 --0.714100 -0.602500 -0.426800 -0.368000 -0.680000 -0.624000 --0.700000 -0.639000 -0.365800 -0.040000 -0.920000 -0.376000 --0.700000 -0.609100 -0.426800 -0.336000 -0.744000 -0.568000 --0.650000 -0.641900 -0.365800 -0.024000 -0.952000 -0.280000 --0.650000 -0.621300 -0.426800 -0.080000 -0.904000 -0.400000 --0.650000 -0.621300 -0.426800 -0.080000 -0.904000 -0.400000 --0.850000 -0.496800 -0.365800 -0.176000 0.616000 -0.760000 --0.850000 -0.496800 -0.365800 -0.176000 0.616000 -0.760000 --0.800000 -0.496400 -0.365800 -0.664000 0.416000 -0.608000 --0.850000 -0.502100 -0.370900 -0.184000 0.560000 -0.800000 --0.800000 -0.502100 -0.369300 -0.768000 0.256000 -0.576000 --0.850000 -0.552300 -0.378600 -0.568000 -0.344000 -0.736000 --0.800000 -0.552300 -0.401000 -0.552000 -0.288000 -0.776000 --0.800000 -0.502100 -0.369300 -0.768000 0.256000 -0.576000 --0.750000 -0.552300 -0.422100 -0.552000 -0.096000 -0.824000 --0.750000 -0.502100 -0.424900 -0.848000 -0.112000 -0.512000 --0.744500 -0.552300 -0.426800 -0.560000 -0.080000 -0.816000 --0.748800 -0.502100 -0.426800 -0.584000 -0.048000 -0.800000 --0.750000 -0.502100 -0.424900 -0.848000 -0.112000 -0.512000 --0.750000 -0.498100 -0.426800 -0.864000 -0.184000 -0.448000 --0.800000 -0.502100 -0.369300 -0.768000 0.256000 -0.576000 --0.764100 -0.451900 -0.426800 -0.880000 -0.256000 -0.384000 --0.800000 -0.496400 -0.365800 -0.664000 0.416000 -0.608000 --0.786000 -0.451900 -0.365800 -0.872000 0.080000 -0.472000 --0.764100 -0.451900 -0.426800 -0.880000 -0.256000 -0.384000 --0.796500 -0.401700 -0.365800 -0.952000 -0.168000 -0.232000 --0.777800 -0.401700 -0.426800 -0.928000 0.040000 -0.360000 --0.777800 -0.401700 -0.426800 -0.928000 0.040000 -0.360000 --0.800000 -0.602500 -0.372400 -0.488000 -0.592000 -0.624000 --0.800000 -0.602500 -0.372400 -0.488000 -0.592000 -0.624000 --0.800000 -0.552300 -0.401000 -0.552000 -0.288000 -0.776000 --0.750000 -0.602500 -0.401000 -0.336000 -0.696000 -0.624000 --0.750000 -0.552300 -0.422100 -0.552000 -0.096000 -0.824000 --0.714100 -0.602500 -0.426800 -0.368000 -0.680000 -0.624000 --0.744500 -0.552300 -0.426800 -0.560000 -0.080000 -0.816000 --0.744500 -0.552300 -0.426800 -0.560000 -0.080000 -0.816000 --0.350000 -0.248400 -0.365800 0.184000 0.424000 -0.880000 --0.350000 -0.248400 -0.365800 0.184000 0.424000 -0.880000 --0.350000 -0.251000 -0.367200 0.240000 0.168000 -0.952000 --0.345700 -0.251000 -0.365800 0.320000 0.336000 -0.880000 --0.345700 -0.251000 -0.365800 0.320000 0.336000 -0.880000 --0.250000 -0.342900 -0.365800 0.504000 0.512000 -0.680000 --0.250000 -0.342900 -0.365800 0.504000 0.512000 -0.680000 --0.250000 -0.351500 -0.379700 0.552000 0.712000 -0.416000 --0.241400 -0.351500 -0.365800 0.488000 0.640000 -0.576000 --0.241400 -0.351500 -0.365800 0.488000 0.640000 -0.576000 --0.200000 -0.365300 -0.365800 0.504000 0.768000 -0.376000 --0.200000 -0.365300 -0.365800 0.504000 0.768000 -0.376000 --0.200000 -0.393200 -0.426800 0.696000 0.632000 -0.328000 --0.151700 -0.401700 -0.365800 0.568000 0.104000 -0.808000 --0.194300 -0.401700 -0.426800 0.792000 0.416000 -0.432000 --0.194300 -0.401700 -0.426800 0.792000 0.416000 -0.432000 --0.044700 -0.251000 -0.365800 -0.216000 0.376000 -0.896000 --0.044700 -0.251000 -0.365800 -0.216000 0.376000 -0.896000 -0.000000 -0.251000 -0.386300 -0.352000 0.496000 -0.792000 -0.000000 -0.238800 -0.365800 -0.192000 0.648000 -0.728000 -0.000000 -0.238800 -0.365800 -0.192000 0.648000 -0.728000 -0.100000 -0.224900 -0.365800 0.352000 0.456000 -0.808000 -0.100000 -0.224900 -0.365800 0.352000 0.456000 -0.808000 -0.100000 -0.251000 -0.380100 0.472000 -0.384000 -0.784000 -0.118000 -0.251000 -0.365800 0.536000 -0.224000 -0.808000 -0.100000 -0.263400 -0.365800 0.480000 -0.672000 -0.544000 -0.100000 -0.263400 -0.365800 0.480000 -0.672000 -0.544000 -0.350000 -0.354600 -0.365800 -0.264000 -0.632000 -0.720000 -0.350000 -0.354600 -0.365800 -0.264000 -0.632000 -0.720000 -0.350000 -0.351500 -0.368100 -0.440000 0.096000 -0.888000 -0.348000 -0.351500 -0.365800 -0.720000 -0.032000 -0.680000 -0.348000 -0.351500 -0.365800 -0.720000 -0.032000 -0.680000 -0.450000 0.007700 -0.365800 -0.264000 0.744000 -0.600000 -0.450000 0.007700 -0.365800 -0.264000 0.744000 -0.600000 -0.431500 0.000000 -0.365800 -0.424000 0.312000 -0.840000 -0.450000 0.000000 -0.377000 -0.360000 0.400000 -0.840000 -0.450000 -0.014200 -0.365800 -0.336000 -0.568000 -0.744000 -0.450000 -0.014200 -0.365800 -0.336000 -0.568000 -0.744000 -0.650000 -0.245700 -0.365800 0.168000 0.856000 -0.480000 -0.650000 -0.245700 -0.365800 0.168000 0.856000 -0.480000 -0.650000 -0.251000 -0.378600 0.328000 0.752000 -0.560000 -0.678000 -0.251000 -0.365800 0.264000 0.520000 -0.808000 -0.650000 -0.267900 -0.365800 0.280000 -0.440000 -0.848000 diff --git a/lib/glut-3.7.6/progs/mesademos/isosurf.dsp b/lib/glut-3.7.6/progs/mesademos/isosurf.dsp deleted file mode 100644 index 3e9b73d6c..000000000 --- a/lib/glut-3.7.6/progs/mesademos/isosurf.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="isosurf" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=isosurf - 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 "isosurf.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 "isosurf.mak" CFG="isosurf - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "isosurf - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "isosurf - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "isosurf - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "isosurf - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "isosurf - Win32 Release" -# Name "isosurf - Win32 Debug" -# Begin Source File - -SOURCE=.\isosurf.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/mesademos/offset.c b/lib/glut-3.7.6/progs/mesademos/offset.c deleted file mode 100644 index f7a8af45f..000000000 --- a/lib/glut-3.7.6/progs/mesademos/offset.c +++ /dev/null @@ -1,299 +0,0 @@ -/**************************************************************************** -Copyright 1995 by Silicon Graphics Incorporated, Mountain View, California. - - 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 name of Silicon Graphics not be -used in advertising or publicity pertaining to distribution of the -software without specific, written prior permission. - -SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -EVENT SHALL SILICON GRAPHICS 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. - -****************************************************************************/ - -/** - * Derived from code written by Kurt Akeley, November 1992 - * - * Uses PolygonOffset to draw hidden-line images. PolygonOffset - * shifts the z values of polygons an amount that is - * proportional to their slope in screen z. This keeps - * the lines, which are drawn without displacement, from - * interacting with their respective polygons, and - * thus eliminates line dropouts. - * - * The left image shows an ordinary antialiased wireframe image. - * The center image shows an antialiased hidden-line image without - * PolygonOffset. - * The right image shows an antialiased hidden-line image using - * PolygonOffset to reduce artifacts. - * - * Drag with a mouse button pressed to rotate the models. - * Press the escape key to exit. - */ - -/* - * Modified for OpenGL 1.1 glPolygonOffset() conventions - */ - -/* Conversion to GLUT by Mark J. Kilgard */ - -#include -#include -#include -#include - -#ifndef EXIT_FAILURE -#define EXIT_FAILURE 1 -#endif -#ifndef EXIT_SUCCESS -#define EXIT_SUCCESS 0 -#endif - -#define MAXQUAD 6 - -typedef float Vertex[3]; - -typedef Vertex Quad[4]; - -/* data to define the six faces of a unit cube */ -Quad quads[MAXQUAD] = -{ - { 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0 }, - { 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1 }, - { 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1 }, - { 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1 }, - { 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0 }, - { 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0 } -}; -static int deltax = 90, deltay = 40; -static int prevx, prevy; - -#define WIREFRAME 0 -#define HIDDEN_LINE 1 - -static void error(const char *prog, const char *msg); -static void cubes(int mx, int my, int mode); -static void fill(Quad quad); -static void outline(Quad quad); -static void draw_hidden(Quad quad, int mode); -static void draw_scene(void); - -static int dimension = 3; - -#define MODE_11 0 /* OpenGL 1.1 */ -#define MODE_EXT 1 /* Polygon offset extension */ -#define MODE_NONE 2 /* No polygon offset support */ -static int version; - -int -supportsOneDotOne(void) -{ - const char *version; - int major, minor; - - version = (char *) glGetString(GL_VERSION); - if (sscanf(version, "%d.%d", &major, &minor) == 2) - return major >= 1 && minor >= 1; - return 0; /* OpenGL version string malformed! */ -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); - - glutCreateWindow("offset"); - glutDisplayFunc(draw_scene); - -#ifdef GL_VERSION_1_1 - if (supportsOneDotOne()) { - glPolygonOffset(2.0, 1); - version = MODE_11; - } else -#endif - { -#ifdef GL_EXT_polygon_offset - /* check for the polygon offset extension */ - if (glutExtensionSupported("GL_EXT_polygon_offset")) { - glPolygonOffsetEXT(0.75, 0.00); - version = MODE_EXT; - } else -#endif - { - error(argv[0], "Warning: running with out the polygon offset extension.\n"); - version = MODE_NONE; - } - } - - /* set up viewing parameters */ - glMatrixMode(GL_PROJECTION); - gluPerspective(20, 1, 0.1, 20); - glMatrixMode(GL_MODELVIEW); - glTranslatef(0, 0, -15); - - /* set other relevant state information */ - glEnable(GL_DEPTH_TEST); - glShadeModel(GL_FLAT); - glDisable(GL_DITHER); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} - -static void -draw_scene(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glPushMatrix(); - glTranslatef(-1.7, 0.0, 0.0); - cubes(deltax, deltay, WIREFRAME); - glPopMatrix(); - - glPushMatrix(); - cubes(deltax, deltay, HIDDEN_LINE); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(1.7, 0.0, 0.0); - - switch(version) { -#ifdef GL_VERSION_1_1 - case MODE_11: - glEnable(GL_POLYGON_OFFSET_FILL); - break; -#endif -#ifdef GL_EXT_polygon_offset - case MODE_EXT: - glEnable(GL_POLYGON_OFFSET_EXT); - break; -#endif - } - - cubes(deltax, deltay, HIDDEN_LINE); - - switch(version) { -#ifdef GL_VERSION_1_1 - case MODE_11: - glDisable(GL_POLYGON_OFFSET_FILL); - break; -#endif -#ifdef GL_EXT_polygon_offset - case MODE_EXT: - glDisable(GL_POLYGON_OFFSET_EXT); - break; -#endif - } - - glPopMatrix(); - - glutSwapBuffers(); -} - -static void -cubes(int mx, int my, int mode) -{ - int x, y, z, i; - - /* track the mouse */ - glRotatef(mx / 2.0, 0, 1, 0); - glRotatef(my / 2.0, 1, 0, 0); - - /* draw the lines as hidden polygons */ - glTranslatef(-0.5, -0.5, -0.5); - glScalef(1.0 / dimension, 1.0 / dimension, 1.0 / dimension); - for (z = 0; z < dimension; z++) { - for (y = 0; y < dimension; y++) { - for (x = 0; x < dimension; x++) { - glPushMatrix(); - glTranslatef(x, y, z); - glScalef(0.8, 0.8, 0.8); - for (i = 0; i < MAXQUAD; i++) - draw_hidden(quads[i], mode); - glPopMatrix(); - } - } - } -} - -static void -fill(Quad quad) -{ - /* draw a filled polygon */ - glBegin(GL_QUADS); - glVertex3fv(quad[0]); - glVertex3fv(quad[1]); - glVertex3fv(quad[2]); - glVertex3fv(quad[3]); - glEnd(); -} - -static void -outline(Quad quad) -{ - /* draw an outlined polygon */ - glBegin(GL_LINE_LOOP); - glVertex3fv(quad[0]); - glVertex3fv(quad[1]); - glVertex3fv(quad[2]); - glVertex3fv(quad[3]); - glEnd(); -} - -static void -draw_hidden(Quad quad, int mode) -{ - /* draw the outline using white, optionally fill the interior - with black */ - glColor3f(1, 1, 1); - outline(quad); - - if (mode == HIDDEN_LINE) { - glColor3f(0, 0, 0); - fill(quad); - } -} - -/* ARGSUSED1 */ -void -keyboard(unsigned char key, int x, int y) -{ - if (key == 27) exit(EXIT_SUCCESS); -} - -/* ARGSUSED */ -void -button(int which, int state, int x, int y) -{ - if(state == GLUT_DOWN) { - prevx = x; - prevy = y; - } -} - -void -motion(int x, int y) -{ - deltax += (x - prevx); - prevx = x; - deltay += (y - prevy); - prevy = y; - glutPostRedisplay(); -} - -static void -error(const char *prog, const char *msg) -{ - fprintf(stderr, "%s: %s\n", prog, msg); -} - diff --git a/lib/glut-3.7.6/progs/mesademos/offset.dsp b/lib/glut-3.7.6/progs/mesademos/offset.dsp deleted file mode 100644 index 09b5dbc0a..000000000 --- a/lib/glut-3.7.6/progs/mesademos/offset.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="offset" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=offset - 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 "offset.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 "offset.mak" CFG="offset - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "offset - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "offset - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "offset - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "offset - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "offset - Win32 Release" -# Name "offset - Win32 Debug" -# Begin Source File - -SOURCE=.\offset.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/mesademos/reflect.c b/lib/glut-3.7.6/progs/mesademos/reflect.c deleted file mode 100644 index 06aba70c9..000000000 --- a/lib/glut-3.7.6/progs/mesademos/reflect.c +++ /dev/null @@ -1,379 +0,0 @@ -/* reflect.c */ - -/** - * Demo of a reflective, texture-mapped surface with OpenGL. - * Brian Paul (brianp@ssec.wisc.edu) August 14, 1995 - * - * Hardware texture mapping is highly recommended! - * - * The basic steps are: - * 1. Render the reflective object (a polygon) from the normal viewpoint, - * setting the stencil planes = 1. - * 2. Render the scene from a special viewpoint: the viewpoint which - * is on the opposite side of the reflective plane. Only draw where - * stencil = 1. This draws the objects in the reflective surface. - * 3. Render the scene from the original viewpoint. This draws the - * objects in the normal fashion. Use blending when drawing - * the reflective, textured surface. - * - * This is a very crude demo. It could be much better. - */ - -/* - * Dirk Reiners (reiners@igd.fhg.de) made some modifications to this code. - * - * August 1996 - A few optimizations by Brian - */ - -/* Conversion to GLUT by Mark J. Kilgard */ - -#define USE_ZBUFFER - -/* OK, without hardware support this is overkill. */ -#define USE_TEXTURE - -#include -#include -#include -#include -#include "image.h" - -#define DEG2RAD (3.14159/180.0) - -#define TABLE_TEXTURE "brick.rgb" - -#define MAX_OBJECTS 2 - -static GLint table_list; -static GLint objects_list[MAX_OBJECTS]; - -static GLfloat xrot, yrot; -static GLfloat spin; - -static void -make_table(void) -{ - static GLfloat table_mat[] = - {1.0, 1.0, 1.0, 0.6}; - static GLfloat gray[] = - {0.4, 0.4, 0.4, 1.0}; - - table_list = glGenLists(1); - glNewList(table_list, GL_COMPILE); - - /* load table's texture */ - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, table_mat); -/* glMaterialfv( GL_FRONT, GL_EMISSION, gray ); */ - glMaterialfv(GL_FRONT, GL_DIFFUSE, table_mat); - glMaterialfv(GL_FRONT, GL_AMBIENT, gray); - - /* draw textured square for the table */ - glPushMatrix(); - glScalef(4.0, 4.0, 4.0); - glBegin(GL_POLYGON); - glNormal3f(0.0, 1.0, 0.0); - glTexCoord2f(0.0, 0.0); - glVertex3f(-1.0, 0.0, 1.0); - glTexCoord2f(1.0, 0.0); - glVertex3f(1.0, 0.0, 1.0); - glTexCoord2f(1.0, 1.0); - glVertex3f(1.0, 0.0, -1.0); - glTexCoord2f(0.0, 1.0); - glVertex3f(-1.0, 0.0, -1.0); - glEnd(); - glPopMatrix(); - - glDisable(GL_TEXTURE_2D); - - glEndList(); -} - -static void -make_objects(void) -{ - GLUquadricObj *q; - - static GLfloat cyan[] = - {0.0, 1.0, 1.0, 1.0}; - static GLfloat green[] = - {0.2, 1.0, 0.2, 1.0}; - static GLfloat black[] = - {0.0, 0.0, 0.0, 0.0}; - - q = gluNewQuadric(); - gluQuadricDrawStyle(q, GLU_FILL); - gluQuadricNormals(q, GLU_SMOOTH); - - objects_list[0] = glGenLists(1); - glNewList(objects_list[0], GL_COMPILE); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, cyan); - glMaterialfv(GL_FRONT, GL_EMISSION, black); - gluCylinder(q, 0.5, 0.5, 1.0, 15, 10); - glEndList(); - - objects_list[1] = glGenLists(1); - glNewList(objects_list[1], GL_COMPILE); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, green); - glMaterialfv(GL_FRONT, GL_EMISSION, black); - gluCylinder(q, 1.5, 0.0, 2.5, 15, 10); - glEndList(); -} - -static GLfloat light_pos[] = -{0.0, 20.0, 0.0, 1.0}; - -static void -init(void) -{ - RGBImageRec *image; - - make_table(); - make_objects(); - - /* Setup texture */ -#ifdef USE_TEXTURE - image = RGBImageLoad(TABLE_TEXTURE); - gluBuild2DMipmaps(GL_TEXTURE_2D, 3, image->sizeX, image->sizeY, - GL_RGB, GL_UNSIGNED_BYTE, image->data); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); -#endif - - xrot = 30.0; - yrot = 50.0; - spin = 0.0; - -#ifndef USE_ZBUFFER - glEnable(GL_CULL_FACE); -#endif - - glShadeModel(GL_FLAT); - - glEnable(GL_LIGHT0); - glEnable(GL_LIGHTING); - - glClearColor(0.5, 0.5, 0.5, 1.0); - - glEnable(GL_NORMALIZE); -} - -static void -reshape(int w, int h) -{ - GLfloat aspect = (float) w / (float) h; - - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glFrustum(-aspect, aspect, -1.0, 1.0, 4.0, 300.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -/* ARGSUSED */ -static void -draw_objects(GLfloat eyex, GLfloat eyey, GLfloat eyez) -{ -#ifndef USE_ZBUFFER - if (eyex < 0.5) { -#endif - glPushMatrix(); - glTranslatef(1.0, 1.5, 0.0); - glRotatef(spin, 1.0, 0.5, 0.0); - glRotatef(0.5 * spin, 0.0, 0.5, 1.0); - glCallList(objects_list[0]); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(-1.0, 0.85 + 3.0 * fabs(cos(0.01 * spin)), 0.0); - glRotatef(0.5 * spin, 0.0, 0.5, 1.0); - glRotatef(spin, 1.0, 0.5, 0.0); - glScalef(0.5, 0.5, 0.5); - glCallList(objects_list[1]); - glPopMatrix(); -#ifndef USE_ZBUFFER - } else { - glPushMatrix(); - glTranslatef(-1.0, 0.85 + 3.0 * fabs(cos(0.01 * spin)), 0.0); - glRotatef(0.5 * spin, 0.0, 0.5, 1.0); - glRotatef(spin, 1.0, 0.5, 0.0); - glScalef(0.5, 0.5, 0.5); - glCallList(objects_list[1]); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(1.0, 1.5, 0.0); - glRotatef(spin, 1.0, 0.5, 0.0); - glRotatef(0.5 * spin, 0.0, 0.5, 1.0); - glCallList(objects_list[0]); - glPopMatrix(); - } -#endif -} - -static void -draw_table(void) -{ - glCallList(table_list); -} - -static void -draw_scene(void) -{ - GLfloat dist = 20.0; - GLfloat eyex, eyey, eyez; - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); - - eyex = dist * cos(yrot * DEG2RAD) * cos(xrot * DEG2RAD); - eyez = dist * sin(yrot * DEG2RAD) * cos(xrot * DEG2RAD); - eyey = dist * sin(xrot * DEG2RAD); - - /* view from top */ - glPushMatrix(); - gluLookAt(eyex, eyey, eyez, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); - - glLightfv(GL_LIGHT0, GL_POSITION, light_pos); - - /* draw table into stencil planes */ - glEnable(GL_STENCIL_TEST); -#ifdef USE_ZBUFFER - glDisable(GL_DEPTH_TEST); -#endif - glStencilFunc(GL_ALWAYS, 1, 0xffffffff); - glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE); - glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); - draw_table(); - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - -#ifdef USE_ZBUFFER - glEnable(GL_DEPTH_TEST); -#endif - - /* render view from below (reflected viewport) */ - /* only draw where stencil==1 */ - if (eyey > 0.0) { - glPushMatrix(); - - glStencilFunc(GL_EQUAL, 1, 0xffffffff); /* draw if ==1 */ - glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); - glScalef(1.0, -1.0, 1.0); - - /* Reposition light in reflected space. */ - glLightfv(GL_LIGHT0, GL_POSITION, light_pos); - - draw_objects(eyex, eyey, eyez); - glPopMatrix(); - - /* Restore light's original unreflected position. */ - glLightfv(GL_LIGHT0, GL_POSITION, light_pos); - } - glDisable(GL_STENCIL_TEST); - - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - -#ifdef USE_TEXTURE - glEnable(GL_TEXTURE_2D); -#endif - draw_table(); - glDisable(GL_TEXTURE_2D); - glDisable(GL_BLEND); - - /* view from top */ - glPushMatrix(); - - draw_objects(eyex, eyey, eyez); - - glPopMatrix(); - - glPopMatrix(); - - glutSwapBuffers(); -} - -/* ARGSUSED1 */ -void -key(unsigned char key, int x, int y) -{ - switch (key) { - case 27: - exit(0); - break; - } -} - -/* ARGSUSED1 */ -void -special(int key, int x, int y) -{ - switch(key) { - case GLUT_KEY_UP: - xrot += 3.0; -#ifndef USE_ZBUFFER - if (xrot > 180) - xrot = 180; -#endif - break; - case GLUT_KEY_DOWN: - xrot -= 3.0; -#ifndef USE_ZBUFFER - if (xrot < 0) - xrot = 0; -#endif - break; - case GLUT_KEY_LEFT: - yrot += 3.0; - break; - case GLUT_KEY_RIGHT: - yrot -= 3.0; - break; - default: - return; - } - glutPostRedisplay(); -} - -static void -idle(void) -{ - spin += 2.0; - yrot += 3.0; - glutPostRedisplay(); -} - -void -visible(int vis) -{ - if (vis == GLUT_VISIBLE) - glutIdleFunc(idle); - else - glutIdleFunc(NULL); -} - -int -main(int argc, char *argv[]) -{ - glutInitWindowSize(400, 300); - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB -#ifdef USE_ZBUFFER - | GLUT_DEPTH -#endif - | GLUT_STENCIL); - - glutCreateWindow("reflect"); - glutReshapeFunc(reshape); - glutDisplayFunc(draw_scene); - glutKeyboardFunc(key); - glutSpecialFunc(special); - glutVisibilityFunc(visible); - - init(); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/mesademos/reflect.dsp b/lib/glut-3.7.6/progs/mesademos/reflect.dsp deleted file mode 100644 index f4f066d9a..000000000 --- a/lib/glut-3.7.6/progs/mesademos/reflect.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="reflect" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=reflect - 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 "reflect.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 "reflect.mak" CFG="reflect - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "reflect - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "reflect - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "reflect - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "reflect - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "reflect - Win32 Release" -# Name "reflect - Win32 Debug" -# Begin Source File - -SOURCE=.\image.c -# End Source File -# Begin Source File - -SOURCE=.\image.h -# End Source File -# Begin Source File - -SOURCE=.\reflect.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/mesademos/spin.c b/lib/glut-3.7.6/progs/mesademos/spin.c deleted file mode 100644 index fca0d6dcf..000000000 --- a/lib/glut-3.7.6/progs/mesademos/spin.c +++ /dev/null @@ -1,160 +0,0 @@ -/* spin.c */ - -/* - * Spinning box. This program is in the public domain. - * - * Brian Paul - */ - -/* Conversion to GLUT by Mark J. Kilgard */ - -#include -#include -#include - -static GLfloat Xrot, Xstep; -static GLfloat Yrot, Ystep; -static GLfloat Zrot, Zstep; -static GLfloat Step = 5.0; -static GLfloat Scale = 1.0; -static GLuint Object; - -static GLuint -make_object(void) -{ - GLuint list; - - list = glGenLists(1); - - glNewList(list, GL_COMPILE); - - glBegin(GL_LINE_LOOP); - glVertex3f(1.0, 0.5, -0.4); - glVertex3f(1.0, -0.5, -0.4); - glVertex3f(-1.0, -0.5, -0.4); - glVertex3f(-1.0, 0.5, -0.4); - glEnd(); - - glBegin(GL_LINE_LOOP); - glVertex3f(1.0, 0.5, 0.4); - glVertex3f(1.0, -0.5, 0.4); - glVertex3f(-1.0, -0.5, 0.4); - glVertex3f(-1.0, 0.5, 0.4); - glEnd(); - - glBegin(GL_LINES); - glVertex3f(1.0, 0.5, -0.4); - glVertex3f(1.0, 0.5, 0.4); - glVertex3f(1.0, -0.5, -0.4); - glVertex3f(1.0, -0.5, 0.4); - glVertex3f(-1.0, -0.5, -0.4); - glVertex3f(-1.0, -0.5, 0.4); - glVertex3f(-1.0, 0.5, -0.4); - glVertex3f(-1.0, 0.5, 0.4); - glEnd(); - - glEndList(); - - return list; -} - -static void -reshape(int width, int height) -{ - glViewport(0, 0, (GLint) width, (GLint) height); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glFrustum(-1.0, 1.0, -1.0, 1.0, 5.0, 15.0); - glMatrixMode(GL_MODELVIEW); -} - -/* ARGSUSED1 */ -static void -key(unsigned char k, int x, int y) -{ - switch (k) { - case 27: - exit(0); - } -} - -static void -draw(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - - glPushMatrix(); - - glTranslatef(0.0, 0.0, -10.0); - glScalef(Scale, Scale, Scale); - if (Xstep) { - glRotatef(Xrot, 1.0, 0.0, 0.0); - } else if (Ystep) { - glRotatef(Yrot, 0.0, 1.0, 0.0); - } else { - glRotatef(Zrot, 0.0, 0.0, 1.0); - } - - glCallList(Object); - - glPopMatrix(); - - glFlush(); - glutSwapBuffers(); -} - -static void -idle(void) -{ - Xrot += Xstep; - Yrot += Ystep; - Zrot += Zstep; - - if (Xrot >= 360.0) { - Xrot = Xstep = 0.0; - Ystep = Step; - } else if (Yrot >= 360.0) { - Yrot = Ystep = 0.0; - Zstep = Step; - } else if (Zrot >= 360.0) { - Zrot = Zstep = 0.0; - Xstep = Step; - } - glutPostRedisplay(); -} - -void -visible(int vis) -{ - if (vis == GLUT_VISIBLE) - glutIdleFunc(idle); - else - glutIdleFunc(NULL); -} - -int -main(int argc, char *argv[]) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); - - glutCreateWindow("Spin"); - Object = make_object(); - glCullFace(GL_BACK); - glDisable(GL_DITHER); - glShadeModel(GL_FLAT); - - glColor3f(1.0, 1.0, 1.0); - - Xrot = Yrot = Zrot = 0.0; - Xstep = Step; - Ystep = Zstep = 0.0; - - glutReshapeFunc(reshape); - glutKeyboardFunc(key); - glutVisibilityFunc(visible); - glutDisplayFunc(draw); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/mesademos/spin.dsp b/lib/glut-3.7.6/progs/mesademos/spin.dsp deleted file mode 100644 index ea0525c8d..000000000 --- a/lib/glut-3.7.6/progs/mesademos/spin.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="spin" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=spin - 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 "spin.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 "spin.mak" CFG="spin - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "spin - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "spin - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "spin - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "spin - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "spin - Win32 Release" -# Name "spin - Win32 Debug" -# Begin Source File - -SOURCE=.\spin.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/mesademos/tess_demo.c b/lib/glut-3.7.6/progs/mesademos/tess_demo.c deleted file mode 100644 index 2d8a73343..000000000 --- a/lib/glut-3.7.6/progs/mesademos/tess_demo.c +++ /dev/null @@ -1,376 +0,0 @@ - -/* tess_demo.c */ - -/* A demo of the GLU polygon tesselation functions written by Bogdan Sikorski. */ - -/* Bug fixes by Mark Kilgard 11/8/96 */ - -#include -#include -#include -#include - -/* Win32 calling conventions. */ -#ifndef CALLBACK -#define CALLBACK -#endif - -#define MAX_POINTS 200 -#define MAX_CONTOURS 50 -#define HALF_WIDTH 5 /* half of the width of a grid box */ - -int menu; -typedef enum { - QUIT, TESSELATE, CLEAR -} menu_entries; -typedef enum { - DEFINE, TESSELATED -} mode_type; -struct { - GLint p[MAX_POINTS][2]; - GLuint point_cnt; -} contours[MAX_CONTOURS]; -int contour_cnt; -GLsizei width, height; -mode_type mode; - -#ifdef GLU_VERSION_1_2 -typedef struct listmem { - GLint *data; - struct listmem *next; -} ListMem; - -ListMem root; -#endif - -void CALLBACK -my_error(GLenum err) -{ - int len, i; - const char *str; - - glColor3f(0.9, 0.9, 0.9); - glRasterPos2i(5, 5); - str = (char *) gluErrorString(err); - len = (int) strlen(str); - for (i = 0; i < len; i++) - glutBitmapCharacter(GLUT_BITMAP_9_BY_15, str[i]); -} - -#ifdef GLU_VERSION_1_2 -/* ARGSUSED */ -void CALLBACK -myCombine(GLdouble coords[3], void *d[4], GLfloat w[4], void **dataOut) -{ - ListMem *ptr = &root; - while (ptr->next) ptr = ptr->next; - ptr->next = malloc(sizeof(ListMem)); - ptr = ptr->next; - ptr->next = 0; - ptr->data = malloc(3 * sizeof(GLint)); - ptr->data[0] = (GLint) coords[0]; - ptr->data[1] = (GLint) coords[1]; - ptr->data[2] = (GLint) coords[2]; - *dataOut = ptr->data; -} -#endif - -void -set_screen_wh(GLsizei w, GLsizei h) -{ - width = w; - height = h; -} - -void -tesse(void) -{ - static GLUtriangulatorObj *tobj = NULL; - GLdouble data[3]; - int i, j, point_cnt; - - if (tobj == NULL) { - tobj = gluNewTess(); - } - if (tobj != NULL) { - glClear(GL_COLOR_BUFFER_BIT); - glColor3f(0.7, 0.5, 0.0); - gluTessCallback(tobj, GLU_BEGIN, (void (CALLBACK*)())glBegin); - gluTessCallback(tobj, GLU_END, (void (CALLBACK*)())glEnd); - gluTessCallback(tobj, GLU_ERROR, (void (CALLBACK*)()) my_error); - gluTessCallback(tobj, GLU_VERTEX, (void (CALLBACK*)()) glVertex2iv); -#ifdef GLU_VERSION_1_2 - root.data = 0; - root.next = 0; - gluTessCallback(tobj, GLU_TESS_COMBINE, (void (CALLBACK*)()) myCombine); -#endif - gluBeginPolygon(tobj); - for (j = 0; j <= contour_cnt; j++) { - point_cnt = contours[j].point_cnt; - gluNextContour(tobj, GLU_UNKNOWN); - for (i = 0; i < point_cnt; i++) { - data[0] = (GLdouble) (contours[j].p[i][0]); - data[1] = (GLdouble) (contours[j].p[i][1]); - data[2] = 0.0; - gluTessVertex(tobj, data, contours[j].p[i]); - } - } - gluEndPolygon(tobj); - mode = TESSELATED; - } -#ifdef GLU_VERSION_1_2 - { - ListMem *fptr = root.next; - ListMem *tmp; - while (fptr) { - tmp = fptr->next; - free(fptr->data); - free(fptr); - fptr = tmp; - } - } -#endif -} - -void -left_down(int x1, int y1) -{ - GLint P[2]; - GLuint point_cnt; - - /* translate GLUT into GL coordinates */ - P[0] = x1; - P[1] = height - y1; - point_cnt = contours[contour_cnt].point_cnt; - contours[contour_cnt].p[point_cnt][0] = P[0]; - contours[contour_cnt].p[point_cnt][1] = P[1]; - glBegin(GL_LINES); - if (point_cnt) { - glVertex2iv(contours[contour_cnt].p[point_cnt - 1]); - glVertex2iv(P); - } else { - glVertex2iv(P); - glVertex2iv(P); - } - glEnd(); - glFlush(); - ++(contours[contour_cnt].point_cnt); - if (contours[contour_cnt].point_cnt >= MAX_POINTS) { - printf("Too many points specified.\n"); - exit(1); - } -} - -/* ARGSUSED */ -void -middle_down(int x1, int y1) -{ - GLuint point_cnt; - - point_cnt = contours[contour_cnt].point_cnt; - if (point_cnt > 2) { - glBegin(GL_LINES); - glVertex2iv(contours[contour_cnt].p[0]); - glVertex2iv(contours[contour_cnt].p[point_cnt - 1]); - contours[contour_cnt].p[point_cnt][0] = -1; - glEnd(); - glFlush(); - contour_cnt++; - if (contour_cnt >= MAX_CONTOURS) { - printf("Too many contours specified.\n"); - exit(1); - } - contours[contour_cnt].point_cnt = 0; - } -} - -void -mouse_clicked(int button, int state, int x, int y) -{ - x += HALF_WIDTH; - y += HALF_WIDTH; - x -= x % (2*HALF_WIDTH); - y -= y % (2*HALF_WIDTH); - switch (button) { - case GLUT_LEFT_BUTTON: - if (state == GLUT_DOWN) - left_down(x, y); - break; - case GLUT_MIDDLE_BUTTON: - if (state == GLUT_DOWN) - middle_down(x, y); - break; - } -} - -void -display(void) -{ - GLint i, j; - int point_cnt; - - glClear(GL_COLOR_BUFFER_BIT); - switch (mode) { - case DEFINE: - /* draw grid */ - glColor3f(0.6, 0.5, 0.5); - glBegin(GL_LINES); - for (i = 0; i < width; i += (2*HALF_WIDTH)) { - glVertex2i(i, height); - glVertex2i(i, 0); - } - for (j = 0; j < height; j += (2*HALF_WIDTH)) { - glVertex2i(0, j); - glVertex2i(width, j); - } - glColor3f(1.0, 1.0, 0.0); - for (i = 0; i <= contour_cnt; i++) { - point_cnt = contours[i].point_cnt; - glBegin(GL_LINES); - switch (point_cnt) { - case 0: - break; - case 1: - glVertex2iv(contours[i].p[0]); - glVertex2iv(contours[i].p[0]); - break; - case 2: - glVertex2iv(contours[i].p[0]); - glVertex2iv(contours[i].p[1]); - break; - default: - --point_cnt; - for (j = 0; j < point_cnt; j++) { - glVertex2iv(contours[i].p[j]); - glVertex2iv(contours[i].p[j + 1]); - } - if (contours[i].p[j + 1][0] == -1) { - glVertex2iv(contours[i].p[0]); - glVertex2iv(contours[i].p[j]); - } - break; - } - glEnd(); - } - glFlush(); - break; - case TESSELATED: - /* draw lines */ - tesse(); - break; - } - - glColor3f(1.0, 1.0, 0.0); -} - -void -clear(void) -{ - contour_cnt = 0; - contours[0].point_cnt = 0; - glutMouseFunc(mouse_clicked); - mode = DEFINE; - display(); -} - -void -quit(void) -{ - exit(0); -} - -void -menu_selected(int entry) -{ - switch (entry) { - case CLEAR: - clear(); - break; - case TESSELATE: - tesse(); - break; - case QUIT: - quit(); - break; - } -} - -/* ARGSUSED1 */ -void -key_pressed(unsigned char key, int x, int y) -{ - switch (key) { - case 't': - case 'T': - tesse(); - glFlush(); - break; - case 'q': - case 'Q': - quit(); - break; - case 'c': - case 'C': - clear(); - break; - } -} - -void -myinit(void) -{ - /* clear background to gray */ - glClearColor(0.4, 0.4, 0.4, 0.0); - glShadeModel(GL_FLAT); - - menu = glutCreateMenu(menu_selected); - glutAddMenuEntry("clear", CLEAR); - glutAddMenuEntry("tesselate", TESSELATE); - glutAddMenuEntry("quit", QUIT); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutMouseFunc(mouse_clicked); - glutKeyboardFunc(key_pressed); - contour_cnt = 0; - glPolygonMode(GL_FRONT, GL_FILL); - mode = DEFINE; -} - -static void -reshape(GLsizei w, GLsizei h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho(0.0, (GLdouble) w, 0.0, (GLdouble) h, -1.0, 1.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - set_screen_wh(w, h); -} - -static void -usage(void) -{ - printf("Use left mouse button to place vertices.\n"); - printf("Press middle mouse button when done.\n"); - printf("Select tesselate from the pop-up menu.\n"); -} - -/* Main Loop - * Open window with initial window size, title bar, - * RGBA display mode, and handle input events. - */ -int -main(int argc, char **argv) -{ - usage(); - glutInitWindowSize(400, 400); - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); - glutCreateWindow(argv[0]); - myinit(); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} - diff --git a/lib/glut-3.7.6/progs/mesademos/tess_demo.dsp b/lib/glut-3.7.6/progs/mesademos/tess_demo.dsp deleted file mode 100644 index a587e1113..000000000 --- a/lib/glut-3.7.6/progs/mesademos/tess_demo.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="tess_demo" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=tess_demo - 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 "tess_demo.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 "tess_demo.mak" CFG="tess_demo - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "tess_demo - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "tess_demo - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "tess_demo - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "tess_demo - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "tess_demo - Win32 Release" -# Name "tess_demo - Win32 Debug" -# Begin Source File - -SOURCE=.\tess_demo.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/mesademos/texobj.c b/lib/glut-3.7.6/progs/mesademos/texobj.c deleted file mode 100644 index 84c4f2642..000000000 --- a/lib/glut-3.7.6/progs/mesademos/texobj.c +++ /dev/null @@ -1,292 +0,0 @@ -/* texobj.c */ - -/* - * Example of using the 1.1 texture object functions. - * Also, this demo utilizes Mesa's fast texture map path. - * - * Brian Paul June 1996 - */ - -/* Conversion to GLUT by Mark J. Kilgard */ - -#include -#include -#include -#include -#include - -static GLuint TexObj[2]; -static GLfloat Angle = 0.0f; -static GLboolean HaveTexObj = GL_FALSE; - -#if defined(GL_VERSION_1_1) -#define TEXTURE_OBJECT 1 -#elif defined(GL_EXT_texture_object) -#define TEXTURE_OBJECT 1 -#define glBindTexture(A,B) glBindTextureEXT(A,B) -#define glGenTextures(A,B) glGenTexturesEXT(A,B) -#define glDeleteTextures(A,B) glDeleteTexturesEXT(A,B) -#endif - -#ifdef TEXTURE_OBJECT - -static int -supportsOneDotOne(void) -{ - const char *version; - int major, minor; - - version = (char *) glGetString(GL_VERSION); - if (sscanf(version, "%d.%d", &major, &minor) == 2) - return major >= 1 && minor >= 1; - return 0; /* OpenGL version string malformed! */ -} - -#endif - -static void -draw(void) -{ - /* glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); */ - glClear(GL_COLOR_BUFFER_BIT); - - glColor3f(1.0, 1.0, 1.0); - - /* draw first polygon */ - glPushMatrix(); - glTranslatef(-1.0, 0.0, 0.0); - glRotatef(Angle, 0.0, 0.0, 1.0); - if (HaveTexObj) { -#ifdef TEXTURE_OBJECT - glBindTexture(GL_TEXTURE_2D, TexObj[0]); -#endif - } else { - glCallList(TexObj[0]); - } - glBegin(GL_POLYGON); - glTexCoord2f(0.0, 0.0); - glVertex2f(-1.0, -1.0); - glTexCoord2f(1.0, 0.0); - glVertex2f(1.0, -1.0); - glTexCoord2f(1.0, 1.0); - glVertex2f(1.0, 1.0); - glTexCoord2f(0.0, 1.0); - glVertex2f(-1.0, 1.0); - glEnd(); - glPopMatrix(); - - /* draw second polygon */ - glPushMatrix(); - glTranslatef(1.0, 0.0, 0.0); - glRotatef(Angle - 90.0, 0.0, 1.0, 0.0); - if (HaveTexObj) { -#ifdef TEXTURE_OBJECT - glBindTexture(GL_TEXTURE_2D, TexObj[1]); -#endif - } else { - glCallList(TexObj[0]); - } - glBegin(GL_POLYGON); - glTexCoord2f(0.0, 0.0); - glVertex2f(-1.0, -1.0); - glTexCoord2f(1.0, 0.0); - glVertex2f(1.0, -1.0); - glTexCoord2f(1.0, 1.0); - glVertex2f(1.0, 1.0); - glTexCoord2f(0.0, 1.0); - glVertex2f(-1.0, 1.0); - glEnd(); - glPopMatrix(); - - glutSwapBuffers(); -} - -static void -idle(void) -{ - Angle += 2.0; - glutPostRedisplay(); -} - -/* exit upon ESC */ -/* ARGSUSED1 */ -static void -key(unsigned char k, int x, int y) -{ - switch (k) { - case 27: /* Escape */ -#ifdef TEXTURE_OBJECT - glDeleteTextures(2, TexObj); -#endif - exit(0); - } -} - -/* new window size or exposure */ -static void -reshape(int width, int height) -{ - glViewport(0, 0, (GLint) width, (GLint) height); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - /* glOrtho( -3.0, 3.0, -3.0, 3.0, -10.0, 10.0 ); */ - glFrustum(-2.0, 2.0, -2.0, 2.0, 6.0, 20.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(0.0, 0.0, -8.0); -} - -static void -init(void) -{ - static int width = 8, height = 8; - static GLubyte tex1[] = - { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 1, 1, 0, 0, 0, - 0, 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, 0, 1, 1, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0}; - - static GLubyte tex2[] = - { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2, 2, 0, 0, 0, - 0, 0, 2, 0, 0, 2, 0, 0, - 0, 0, 0, 0, 0, 2, 0, 0, - 0, 0, 0, 0, 2, 0, 0, 0, - 0, 0, 0, 2, 0, 0, 0, 0, - 0, 0, 2, 2, 2, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0}; - - GLubyte tex[64][3]; - GLint i, j; - - glDisable(GL_DITHER); - - /* Setup texturing */ - glEnable(GL_TEXTURE_2D); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); - glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST); - - /* generate texture object IDs */ - if (HaveTexObj) { -#ifdef TEXTURE_OBJECT - glGenTextures(2, TexObj); -#endif - } else { - TexObj[0] = glGenLists(2); - TexObj[1] = TexObj[0] + 1; - } - - /* setup first texture object */ - if (HaveTexObj) { -#ifdef TEXTURE_OBJECT - glBindTexture(GL_TEXTURE_2D, TexObj[0]); -#endif - } else { - glNewList(TexObj[0], GL_COMPILE); - } - /* red on white */ - for (i = 0; i < height; i++) { - for (j = 0; j < width; j++) { - int p = i * width + j; - if (tex1[(height - i - 1) * width + j]) { - tex[p][0] = 255; - tex[p][1] = 0; - tex[p][2] = 0; - } else { - tex[p][0] = 255; - tex[p][1] = 255; - tex[p][2] = 255; - } - } - } - glTexImage2D(GL_TEXTURE_2D, 0, 3, width, height, 0, - GL_RGB, GL_UNSIGNED_BYTE, tex); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - if (!HaveTexObj) { - glEndList(); - } - /* end of texture object */ - - /* setup second texture object */ - if (HaveTexObj) { -#ifdef TEXTURE_OBJECT - glBindTexture(GL_TEXTURE_2D, TexObj[1]); -#endif - } else { - glNewList(TexObj[1], GL_COMPILE); - } - /* green on blue */ - for (i = 0; i < height; i++) { - for (j = 0; j < width; j++) { - int p = i * width + j; - if (tex2[(height - i - 1) * width + j]) { - tex[p][0] = 0; - tex[p][1] = 255; - tex[p][2] = 0; - } else { - tex[p][0] = 0; - tex[p][1] = 0; - tex[p][2] = 255; - } - } - } - glTexImage2D(GL_TEXTURE_2D, 0, 3, width, height, 0, - GL_RGB, GL_UNSIGNED_BYTE, tex); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - if (!HaveTexObj) { - glEndList(); - } - /* end texture object */ -} - -void -visible(int vis) -{ - if (vis == GLUT_VISIBLE) - glutIdleFunc(idle); - else - glutIdleFunc(NULL); -} - -main(int argc, char *argv[]) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); - - glutCreateWindow("Texture Objects"); - - /* Check that renderer has the GL_EXT_texture_object - extension or supports OpenGL 1.1. */ -#ifdef TEXTURE_OBJECT - if (supportsOneDotOne() || glutExtensionSupported("GL_EXT_texture_object")) { - HaveTexObj = GL_TRUE; - } -#endif - - if (!HaveTexObj) { - printf("\nThis program doesn't really work the way it is supposed\n"); - printf("to if you lack OpenGL 1.1 or the EXT_texture_object extension.\n"); - printf("Each textured object should have a different numbered image.\n\n"); - } - - init(); - - glutReshapeFunc(reshape); - glutKeyboardFunc(key); - glutVisibilityFunc(visible); - glutDisplayFunc(draw); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/mesademos/texobj.dsp b/lib/glut-3.7.6/progs/mesademos/texobj.dsp deleted file mode 100644 index 125700c22..000000000 --- a/lib/glut-3.7.6/progs/mesademos/texobj.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="texobj" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=texobj - 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 "texobj.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 "texobj.mak" CFG="texobj - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "texobj - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "texobj - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "texobj - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "texobj - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "texobj - Win32 Release" -# Name "texobj - Win32 Debug" -# Begin Source File - -SOURCE=.\texobj.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/mesademos/tr.c b/lib/glut-3.7.6/progs/mesademos/tr.c deleted file mode 100644 index b09ba4cd8..000000000 --- a/lib/glut-3.7.6/progs/mesademos/tr.c +++ /dev/null @@ -1,236 +0,0 @@ - -/* tr.c */ - -/* - * Tiled Rendering library - * - * Brian Paul - * April 1997 - */ - - -#include -#include -#include - -#include "tr.h" - - - -struct _TRctx { - GLint ImageWidth, ImageHeight; - GLubyte *Image; - - GLint TileWidth, TileHeight; - - GLboolean Perspective; - GLdouble Left; - GLdouble Right; - GLdouble Bottom; - GLdouble Top; - GLdouble Near; - GLdouble Far; - - GLint Rows, Columns; - GLint CurrentTile; - GLint CurrentTileWidth, CurrentTileHeight; - GLint CurrentRow, CurrentColumn; - - GLint ViewportSave[4]; -}; - - - -TRcontext *trNew(void) -{ - return (TRcontext *) calloc(1, sizeof(TRcontext)); -} - - -void trDelete(TRcontext *tr) -{ - if (tr) - free(tr); -} - - -void trSetup(TRcontext *tr, - GLint imageWidth, GLint imageHeight, GLubyte *image, - GLint tileWidth, GLint tileHeight) -{ - if (!tr || !image) - return; - - tr->ImageWidth = imageWidth; - tr->ImageHeight = imageHeight; - tr->Image = image; - tr->TileWidth = tileWidth; - tr->TileHeight = tileHeight; - - tr->Columns = (tr->ImageWidth + tr->TileWidth - 1) / tr->TileWidth; - tr->Rows = (tr->ImageHeight + tr->TileHeight - 1) / tr->TileHeight; - tr->CurrentTile = 0; - - assert(tr->Columns >= 1); - assert(tr->Rows >= 1); -} - - -void trOrtho(TRcontext *tr, - GLdouble left, GLdouble right, - GLdouble bottom, GLdouble top, - GLdouble nnear, GLdouble ffar) -{ - if (!tr) - return; - - tr->Perspective = GL_FALSE; - tr->Left = left; - tr->Right = right; - tr->Bottom = bottom; - tr->Top = top; - tr->Near = nnear; - tr->Far = ffar; - tr->CurrentTile = 0; -} - - -void trFrustum(TRcontext *tr, - GLdouble left, GLdouble right, - GLdouble bottom, GLdouble top, - GLdouble zNear, GLdouble zFar) -{ - if (!tr) - return; - - tr->Perspective = GL_TRUE; - tr->Left = left; - tr->Right = right; - tr->Bottom = bottom; - tr->Top = top; - tr->Near = zNear; - tr->Far = zFar; - tr->CurrentTile = 0; -} - - -void trPerspective(TRcontext *tr, - GLdouble fovy, GLdouble aspect, - GLdouble zNear, GLdouble zFar ) -{ - GLdouble xmin, xmax, ymin, ymax; - ymax = zNear * tan(fovy * 3.14159265 / 360.0); - ymin = -ymax; - xmin = ymin * aspect; - xmax = ymax * aspect; - trFrustum(tr, xmin, xmax, ymin, ymax, zNear, zFar); -} - - -void trBeginTile(TRcontext *tr) -{ - GLint matrixMode; - int tileWidth, tileHeight; - GLdouble left, right, bottom, top; - - if (!tr) - return; - - if (tr->CurrentTile==0) { - /* Save user's viewport, will be restored after last tile rendered */ - glGetIntegerv(GL_VIEWPORT, tr->ViewportSave); - } - - /* which tile (by row and column) we're about to render */ - tr->CurrentRow = tr->CurrentTile / tr->Columns; - tr->CurrentColumn = tr->CurrentTile % tr->Columns; - - /* actual size of this tile */ - if (tr->CurrentRow < tr->Rows-1) - tileHeight = tr->TileHeight; - else - tileHeight = tr->ImageHeight - (tr->Rows-1) * tr->TileHeight; - - if (tr->CurrentColumn < tr->Columns-1) - tileWidth = tr->TileWidth; - else - tileWidth = tr->ImageWidth - (tr->Columns-1) * tr->TileWidth; - - - tr->CurrentTileWidth = tileWidth; - tr->CurrentTileHeight = tileHeight; - - glViewport(0, 0, tileWidth, tileHeight); - - /* save current matrix mode */ - glGetIntegerv(GL_MATRIX_MODE, &matrixMode); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - - /* compute projection parameters */ - left = tr->Left + (tr->Right - tr->Left) - * (tr->CurrentColumn * tr->TileWidth) / tr->ImageWidth; - right = left + (tr->Right - tr->Left) * tileWidth / tr->ImageWidth; - bottom = tr->Bottom + (tr->Top - tr->Bottom) - * (tr->CurrentRow * tr->TileHeight) / tr->ImageHeight; - top = bottom + (tr->Top - tr->Bottom) * tileHeight / tr->ImageHeight; - - if (tr->Perspective) - glFrustum(left, right, bottom, top, tr->Near, tr->Far); - else - glOrtho(left, right, bottom, top, tr->Near, tr->Far); - - /* restore user's matrix mode */ - glMatrixMode(matrixMode); -} - - - -int trEndTile(TRcontext *tr) -{ - GLint prevRowLength, prevSkipRows, prevSkipPixels, prevAlignment; - GLint x, y; - - if (!tr) - return 0; - - /* be sure OpenGL rendering is finished */ - glFlush(); - - /* save current glPixelStore values */ - glGetIntegerv(GL_PACK_ROW_LENGTH, &prevRowLength); - glGetIntegerv(GL_PACK_SKIP_ROWS, &prevSkipRows); - glGetIntegerv(GL_PACK_SKIP_PIXELS, &prevSkipPixels); - glGetIntegerv(GL_PACK_ALIGNMENT, &prevAlignment); - - x = tr->TileWidth * tr->CurrentColumn; - y = tr->TileHeight * tr->CurrentRow; - - /* setup pixel store for glReadPixels */ - glPixelStorei(GL_PACK_ROW_LENGTH, tr->ImageWidth); - glPixelStorei(GL_PACK_SKIP_ROWS, y); - glPixelStorei(GL_PACK_SKIP_PIXELS, x); - glPixelStorei(GL_PACK_ALIGNMENT, 1); - - /* read the tile into the final image */ - glReadPixels(0, 0, tr->CurrentTileWidth, tr->CurrentTileHeight, - GL_RGBA, GL_UNSIGNED_BYTE, tr->Image); - - /* restore previous glPixelStore values */ - glPixelStorei(GL_PACK_ROW_LENGTH, prevRowLength); - glPixelStorei(GL_PACK_SKIP_ROWS, prevSkipRows); - glPixelStorei(GL_PACK_SKIP_PIXELS, prevSkipPixels); - glPixelStorei(GL_PACK_ALIGNMENT, prevAlignment); - - /* increment tile counter, return 1 if more tiles left to render */ - tr->CurrentTile++; - if (tr->CurrentTile >= tr->Rows * tr->Columns) { - /* restore user's viewport */ - glViewport(tr->ViewportSave[0], tr->ViewportSave[1], - tr->ViewportSave[2], tr->ViewportSave[3]); - return 0; - } - else - return 1; -} - diff --git a/lib/glut-3.7.6/progs/mesademos/tr.h b/lib/glut-3.7.6/progs/mesademos/tr.h deleted file mode 100644 index c44b9b418..000000000 --- a/lib/glut-3.7.6/progs/mesademos/tr.h +++ /dev/null @@ -1,95 +0,0 @@ - -/* tr.h */ - -/* - * Tiled Rendering library - * - * This library allows one to render arbitrarily large images with OpenGL. - * The basic idea is to break the image into tiles which are rendered one - * at a time. The tiles are assembled together to form the final, large - * image. Tiles can be of any size. - * - * Basic usage: - * - * 1. Allocate a tile rendering context: - * TRcontext t = trNew(); - * - * 2. Specify the final image buffer and tile size: - * GLubyte image[W][H][4] - * trSetup(t, W, H, (GLubyte *) image, tileWidth, tileHeight); - * - * 3. Setup your projection: - * trFrustum(t, left, right, bottom top, nnear, ffar); - * or - * trOrtho(t, left, right, bottom top, nnear, ffar); - * or - * trPerspective(t, fovy, aspect, nnear, ffar); - * - * 4. Render the tiles: - * do { - * trBeginTile(t); - * DrawMyScene(); - * } while (trEndTile(t)); - * - * You provide the DrawMyScene() function which calls glClear() and - * draws all your stuff. - * - * 5. The image array is now complete. Display it, write it to a file, etc. - * - * 6. Delete the tile rendering context when finished: - * trDelete(t); - * - * - * Brian Paul - * April 1997 - */ - - -#ifndef TR_H -#define TR_H - - -#ifdef _WIN32 -#include -#endif -#include - - -typedef struct _TRctx TRcontext; - - -extern TRcontext *trNew(void); - - -extern void trDelete(TRcontext *tr); - - -extern void trSetup(TRcontext *tr, - GLint imageWidth, GLint imageHeight, GLubyte *image, - GLint tileWidth, GLint tileHeight); - - -extern void trOrtho(TRcontext *tr, - GLdouble left, GLdouble right, - GLdouble bottom, GLdouble top, - GLdouble nnear, GLdouble ffar); - - -extern void trFrustum(TRcontext *tr, - GLdouble left, GLdouble right, - GLdouble bottom, GLdouble top, - GLdouble nnear, GLdouble ffar); - - -extern void trPerspective(TRcontext *tr, - GLdouble fovy, GLdouble aspect, - GLdouble zNear, GLdouble zFar ); - - -extern void trBeginTile(TRcontext *tr); - - -extern int trEndTile(TRcontext *tr); - - -#endif diff --git a/lib/glut-3.7.6/progs/mesademos/trdemo.c b/lib/glut-3.7.6/progs/mesademos/trdemo.c deleted file mode 100644 index dcc10a550..000000000 --- a/lib/glut-3.7.6/progs/mesademos/trdemo.c +++ /dev/null @@ -1,167 +0,0 @@ - -/* trdemo.c */ - -/* - * Test/demonstration of tile rendering utility library. - * See tr.h for more info. - * - * Brian Paul - * April 1997 - */ - - -#include -#include -#include "GL/glut.h" -#include "tr.h" - - -#define TILESIZE 100 - -#define NUMBALLS 30 -static GLfloat BallPos[NUMBALLS][3]; -static GLfloat BallSize[NUMBALLS]; -static GLfloat BallColor[NUMBALLS][4]; - -static GLboolean Perspective = GL_TRUE; - -static int WindowWidth, WindowHeight; - - -/* Return random float in [0,1] */ -static float Random(void) -{ - int i = rand(); - return (float) (i % 1000) / 1000.0; -} - - -/* Draw my stuff */ -static void DrawScene(void) -{ - int i; - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - for (i=0;i -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=trdemo - 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 "trdemo.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 "trdemo.mak" CFG="trdemo - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "trdemo - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "trdemo - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "trdemo - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "trdemo - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "trdemo - Win32 Release" -# Name "trdemo - Win32 Debug" -# Begin Source File - -SOURCE=.\tr.c -# End Source File -# Begin Source File - -SOURCE=.\tr.h -# End Source File -# Begin Source File - -SOURCE=.\trdemo.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/mesademos/winpos.c b/lib/glut-3.7.6/progs/mesademos/winpos.c deleted file mode 100644 index d340273dd..000000000 --- a/lib/glut-3.7.6/progs/mesademos/winpos.c +++ /dev/null @@ -1,215 +0,0 @@ -/* winpos.c */ - -/* - * Example of how to use the GL_MESA_window_pos extension. - * - * This program is in the public domain - * - * Brian Paul - */ - -/* Conversion to GLUT by Mark J. Kilgard */ - -/* The GL_MESA_window_pos extension lets you set the OpenGL raster position - (used for positioning output from glBitmap and glDrawPixels) based on - window coordinates (assuming an origin at the lower-left window corner). - Mesa has an extension to do this operation quickly, but the program - will emulate the raster position update if the extension is not available. - See the implementation of glWindowPos4fMESAemulate. -mjk */ - -#include -#include -#include -#include -#include - -#ifndef M_PI -#define M_PI 3.14159265 -#endif - -#define WIDTH 16 -#define HEIGHT 16 -int sizeX = WIDTH, sizeY = HEIGHT; -GLubyte data[WIDTH * HEIGHT * 3]; - -/* glWindowPos4fMESAemulate & glWindowPos2fMESAemulate are lifted from the - Mesa 2.0 src/winpos.c emulation code. -mjk */ - -/* - * OpenGL implementation of glWindowPos*MESA() - */ -void -glWindowPos4fMESAemulate(GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - GLfloat fx, fy; - - /* Push current matrix mode and viewport attributes */ - glPushAttrib(GL_TRANSFORM_BIT | GL_VIEWPORT_BIT); - - /* Setup projection parameters */ - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); - - glDepthRange(z, z); - glViewport((int) x - 1, (int) y - 1, 2, 2); - - /* set the raster (window) position */ - fx = x - (int) x; - fy = y - (int) y; - glRasterPos4f(fx, fy, 0.0, w); - - /* restore matrices, viewport and matrix mode */ - glPopMatrix(); - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - - glPopAttrib(); -} - -void -glWindowPos2fMESAemulate(GLfloat x, GLfloat y) -{ - glWindowPos4fMESAemulate(x, y, 0, 1); -} - -/* Make cheesy pixel image for glDrawPixels. */ -static void -init(void) -{ - int i, j; - static char *pattern[16] = - { - " ........ ", - " .......... ", - " ...xx..xx... ", - " ............ ", - " ...oooo... ", - "* ........ ", - "*oooooooooooooo*", - " oooo *", - " oooo ", - " xxxx ", - " xxxx ", - " xx xx ", - " xx xx ", - " xx xx ", - " ** ** ", - " *** *** ", - }; - GLubyte red, green, blue; - - /* Generate a pixel image from pattern. */ - for (i = 0; i < HEIGHT; i++) { - for (j = 0; j < WIDTH; j++) { - switch (pattern[HEIGHT - i - 1][j]) { - case '.': - red = 0xff; - green = 0xff; - blue = 0x00; - break; - case 'o': - red = 0xff; - green = 0x00; - blue = 0x00; - break; - case 'x': - red = 0x00; - green = 0xff; - blue = 0x00; - break; - case '*': - red = 0xff; - green = 0x00; - blue = 0xff; - break; - case ' ': - red = 0x00; - green = 0x00; - blue = 0x00; - break; - } - data[(i * WIDTH + j) * 3 + 0] = red; - data[(i * WIDTH + j) * 3 + 1] = green; - data[(i * WIDTH + j) * 3 + 2] = blue; - } - } -} - -#ifdef GL_MESA_window_pos -int emulate; -#endif - -static void -draw(void) -{ - GLfloat angle; - - glClear(GL_COLOR_BUFFER_BIT); - - for (angle = -45.0; angle <= 135.0; angle += 10.0) { - GLfloat x = 50.0 + 200.0 * cos(angle * M_PI / 180.0); - GLfloat y = 50.0 + 200.0 * sin(angle * M_PI / 180.0); - -#ifdef GL_MESA_window_pos - /* Don't need to worry about the modelview or projection - matrices!!! */ - if (!emulate) - glWindowPos2fMESA(x, y); - else -#endif - glWindowPos2fMESAemulate(x, y); - glDrawPixels(sizeX, sizeY, GL_RGB, - GL_UNSIGNED_BYTE, data); - } - glFlush(); -} - -/* ARGSUSED1 */ -static void -key(unsigned char k, int x, int y) -{ - switch (k) { - case 27: - exit(0); - } -} - -int -main(int argc, char *argv[]) -{ - glutInitWindowSize(500, 500); - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); - - glutCreateWindow("winpos"); - - if (glutExtensionSupported("GL_MESA_window_pos")) { - printf("OpenGL implementation supports Mesa's GL_MESA_window_pos extension."); -#ifdef GL_MESA_window_pos - emulate = 0; -#else - printf("(Not compiled to support the extension.)\n"); - printf("Emulating...\n"); -#endif - } else { - printf("Sorry, GL_MESA_window_pos extension not available.\n"); - printf("Emulating...\n"); -#ifdef GL_MESA_window_pos - emulate = 1; -#else - printf("(Not compiled to support the extension even if available.)\n"); -#endif - } - - init(); - - glutDisplayFunc(draw); - glutKeyboardFunc(key); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/mesademos/winpos.dsp b/lib/glut-3.7.6/progs/mesademos/winpos.dsp deleted file mode 100644 index 42b662f0d..000000000 --- a/lib/glut-3.7.6/progs/mesademos/winpos.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="winpos" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=winpos - 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 "winpos.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 "winpos.mak" CFG="winpos - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "winpos - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "winpos - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "winpos - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "winpos - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "winpos - Win32 Release" -# Name "winpos - Win32 Debug" -# Begin Source File - -SOURCE=.\winpos.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/mui.dsw b/lib/glut-3.7.6/progs/mui.dsw deleted file mode 100644 index c171ce2c0..000000000 --- a/lib/glut-3.7.6/progs/mui.dsw +++ /dev/null @@ -1,59 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "_all"=".\mui\_all.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name calc - End Project Dependency -}}} - -############################################################################### - -Project: "calc"=".\mui\calc\calc.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name mui - End Project Dependency -}}} - -############################################################################### - -Project: "mui"="..\lib\mui\mui.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/lib/glut-3.7.6/progs/mui/Imakefile b/lib/glut-3.7.6/progs/mui/Imakefile deleted file mode 100644 index a507a1b33..000000000 --- a/lib/glut-3.7.6/progs/mui/Imakefile +++ /dev/null @@ -1,10 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1994, 1997. */ - -#define IHaveSubdirs -#define PassCDebugFlags - -SUBDIRS = calc - -MakeSubdirs($(SUBDIRS)) -DependSubdirs($(SUBDIRS)) diff --git a/lib/glut-3.7.6/progs/mui/_all.dsp b/lib/glut-3.7.6/progs/mui/_all.dsp deleted file mode 100644 index 2e26c30f3..000000000 --- a/lib/glut-3.7.6/progs/mui/_all.dsp +++ /dev/null @@ -1,63 +0,0 @@ -# Microsoft Developer Studio Project File - Name="_all" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Generic Project" 0x010a - -CFG=_all - 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 "_all.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 "_all.mak" CFG="_all - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "_all - Win32 Release" (based on "Win32 (x86) Generic Project") -!MESSAGE "_all - Win32 Debug" (based on "Win32 (x86) Generic Project") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -MTL=midl.exe - -!IF "$(CFG)" == "_all - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" - -!ELSEIF "$(CFG)" == "_all - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" - -!ENDIF - -# Begin Target - -# Name "_all - Win32 Release" -# Name "_all - Win32 Debug" -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/mui/calc/Imakefile b/lib/glut-3.7.6/progs/mui/calc/Imakefile deleted file mode 100644 index 7402a6e59..000000000 --- a/lib/glut-3.7.6/progs/mui/calc/Imakefile +++ /dev/null @@ -1,16 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1997. */ - -#include "../../../Glut.cf" - -TARGETS = calc - -SRCS = calc.c - -OBJS = calc.o - -AllTarget($(TARGETS)) - -NormalMuiProgramTarget(calc,$(OBJS)) - -DependTarget() diff --git a/lib/glut-3.7.6/progs/mui/calc/calc.c b/lib/glut-3.7.6/progs/mui/calc/calc.c deleted file mode 100644 index d39c37a9f..000000000 --- a/lib/glut-3.7.6/progs/mui/calc/calc.c +++ /dev/null @@ -1,753 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -/****************************************************************************** - * * - * Reverse-Polish-Notation (RPN) calculator * - * * - * Written by Tom Davis 1991 * - * Converted to OpenGL/GLUT: Tom Davis 1997 * - * * - * * - * Calc is a Reverse-Polish-Notation (RPN) calculator. You must enter the * - * operands first, then the operation. For example, to add 3 and 4, press * - * [3] [Enter] [4] [+]. If the operation is unary, like sine, it operates * - * on the bottom element of the display. To take the sine of .54, do: * - * * - * [.] [5] [4] [Sin]. * - * * - * The last 6 entries of the stack are visible, and you can scroll to see the * - * rest. All operations are performed on the element(s) at the bottom of the * - * stack. The bottom element is called 'x' and the next element up is called * - * 'y'. * - * * - * The [+/-] key changes the sign of x. To find the cosine of -.22, do: * - * * - * [.] [2] [2] [+/-] [Cos]. * - * * - * The [Inv] key changes the operation of some of the other keys so they * - * perform the inverse operation. It is only active for one keystroke. * - * Press [Inv] again to cancel the operation. * - * * - * [Sto] and [Rcl] stores and recalls a single value. * - * * - * [Dup2] duplicates the bottom 2 items on the stack. * - * * - * [Roll] rolls all the stack elements down one, and puts the bottom element * - * on the top. * - * * - * [Exch] swaps the bottom two elements. * - * * - * [Int] gives the integer part. * - * * - * [Inv] [Frac] gives the fractional part. * - * * - * [Clr] clears the bottom element to zero. Use this when you get some kind * - * of error. * - * * - * [B10] and [B16] put you in base 10 or base 16 mode. Numbers with * - * fractional parts are always displayed in base 10. In base 16 mode, the * - * keys [a] through [f] are used for numeric entry. They do nothing, * - * otherwise. * - * * - * [And], [Or] and [Not] are logical operations on 32 bit integers. If * - * there's a fractional part, they don't do anything. * - * * - * To remember a sequence of keystrokes, press [Prog], then the sequence of * - * keystrokes, and then [Prog] again. For example, if you want to * - * calculate x^2 + y^2 repeatedly, where x and y are the two bottom entries * - * of the stack, do this: * - * * - * [Prog] [Inv] [x^2] [Exch] [Inv] [x^2] [+] [Prog]. * - * * - * Then, to calculate 5^2+7^2, do this: * - * * - * [5] [Enter] [7] [Run]. * - * * - * The following keys from the computer keyboard are understood by calc: * - * * - * [0], [1], [2], [3], [4], [5], [6], [7], [8], [9], [.], [Enter], * - * [+], [-], [*], [/], [a], [b], [c], [d], [e], [f]. * - * * - ******************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include "calc.h" - -/* Many systems lack the trunc routine. */ -#ifndef __sgi -#define trunc(x) ((float)((int)x)) -/* Alternative trunc macro: ((x > 0.0) ? floor(x) : -floor(-x)) */ -#endif - -#define Bwidth 44 -#define Bheight 25 -#define Bhspace 10 -#define Bvspace 10 -#define Displaylines 6 - -#define THUMBHEIGHT 20 -#define ARROWSPACE 40 -#define SLIDERWIDTH 20 - -#define Stackdepth 200 - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -void interpclick(int); -void showhelp(void); - -char *CS[Stackdepth+Displaylines]; - -double calcdata[Stackdepth+Displaylines]; - -int CSP = Displaylines-1; -int invmode = 0; -int base = 10; -float memory = 0.0; -int degreemode = 1; - -int savingprog = 0; -int program[5000]; -int proglen = 0; - -#define WIDTH 6 -#define HEIGHT 8 - -muiObject *tl; - -struct calcbutton { - char *label, *invlabel; - muiObject *b; - int type; -} keypad[HEIGHT][WIDTH]; - - -void butcallback(muiObject *obj, enum muiReturnValue r) -{ - int but = muiGetID(obj); - interpclick(but); - r = r; -} - -void loadcb(int row, int col, char *lab, char *invlab, int type) -{ - struct calcbutton *cb = &keypad[row][col]; - cb->label = lab; - cb->invlabel = invlab; - cb->type = type; - cb->b = muiNewButton(Bhspace+col*(Bhspace+Bwidth), (col+1)*(Bhspace+Bwidth), - Bvspace+row*(Bvspace+Bheight), (row+1)*(Bvspace+Bheight)); - muiLoadButton(cb->b, lab); - muiSetCallback(cb->b, butcallback); - muiSetID(cb->b, type); -} - -void initkeypad(void) -{ - int xmin, xmax, ymin, ymax; - - loadcb(0, 0, "Exch", "Exch", Exchkey); - loadcb(0, 1, "0", "0", Zerokey); - loadcb(0, 2, ".", ".", Dotkey); - loadcb(0, 3, "+/-", "+/-", Flipsignkey); - loadcb(0, 4, "/", "/", Dividekey); - loadcb(0, 5, "Deg", "Deg", Radkey); - loadcb(1, 0, "Roll", "Roll", Rollkey); - loadcb(1, 1, "1", "1", Onekey); - loadcb(1, 2, "2", "2", Twokey); - loadcb(1, 3, "3", "3", Threekey); - loadcb(1, 4, "*", "*", Timeskey); - loadcb(1, 5, "Clr", "Clr", Clearkey); - loadcb(2, 0, "Dup2", "Dup2", Dup2key); - loadcb(2, 1, "4", "4", Fourkey); - loadcb(2, 2, "5", "5", Fivekey); - loadcb(2, 3, "6", "6", Sixkey); - loadcb(2, 4, "-", "-", Minuskey); - loadcb(2, 5, "And", "And", Andkey); - loadcb(3, 0, "Enter", "Enter", Enterkey); - loadcb(3, 1, "7", "7", Sevenkey); - loadcb(3, 2, "8", "8", Eightkey); - loadcb(3, 3, "9", "9", Ninekey); - loadcb(3, 4, "+", "+", Pluskey); - loadcb(3, 5, "Or", "Or", Orkey); - loadcb(4, 0, "Sin", "Asin", Sinkey); - loadcb(4, 1, "Cos", "Acos", Coskey); - loadcb(4, 2, "Tan", "Atan", Tankey); - loadcb(4, 3, "Int", "Frac", Intkey); - loadcb(4, 4, "Help", "Help", Helpkey); - loadcb(4, 5, "Not", "Not", Notkey); - loadcb(5, 0, "e^x", "Ln", Expkey); - loadcb(5, 1, "10^x", "Log", Tentoxkey); - loadcb(5, 2, "Sqrt", "x^2", Sqrtkey); - loadcb(5, 3, "y^x", "y^(1/x)", Xtoykey); - loadcb(5, 4, "Run", "Run", Runkey); - loadcb(5, 5, "B16", "B16", Base16key); - loadcb(6, 0, "Inv", "Inv", Invkey); - loadcb(6, 1, "Rcl", "Rcl", Recallkey); - loadcb(6, 2, "Sto", "Sto", Storekey); - loadcb(6, 3, "1/x", "1/x", Oneoverkey); - loadcb(6, 4, "Prog", "Prog", Progkey); - loadcb(6, 5, "B10", "B10", Base10key); - loadcb(7, 0, "a", "a", Akey); - loadcb(7, 1, "b", "b", Bkey); - loadcb(7, 2, "c", "c", Ckey); - loadcb(7, 3, "d", "d", Dkey); - loadcb(7, 4, "e", "e", Ekey); - loadcb(7, 5, "f", "f", Fkey); - tl = muiNewTextList(Bhspace, HEIGHT*Bheight + (HEIGHT+1)*Bvspace, - WIDTH*(Bhspace+Bwidth), Displaylines); - muiGetObjectSize(tl, &xmin, &ymin, &xmax, &ymax); - muiSetTLStrings(tl, CS); -} - -/* -void drawdisplay(void) -{ - settltop(cdisplay, CSP - Displaylines + 1); - cdisplay->count = CSP+1; - adjustslider(cdisplay, cdisplay->vs); - setvsarrowdelta(cdisplay->vs, 1); - drawtl(cdisplay); swapbuffers(); -} - -void drawkeypad(void) -{ - int i, j; - - backgroundclear(); - for (i = 0; i < HEIGHT; i++) - for (j = 0; j < WIDTH; j++) - drawbut(keypad[i][j].b); - drawdisplay(); -} -*/ - -void loadbuttons(int inv) -{ - int i, j; - - for (i = 0; i < HEIGHT; i++) - for (j = 0; j < WIDTH; j++) { - if (inv) - muiLoadButton(keypad[i][j].b, keypad[i][j].invlabel); - else - muiLoadButton(keypad[i][j].b, keypad[i][j].label); - } - glutPostRedisplay(); -} - -void initcalc(void) -{ - int i; - - glutInitWindowSize(WIDTH*Bwidth+(WIDTH+1)*Bhspace, - HEIGHT*Bheight+(HEIGHT+2)*Bvspace+Displaylines*20+7); - glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE); - glutCreateWindow("RPN Calc"); - muiInit(); - muiNewUIList(1); - for (i = 0; i < Stackdepth+Displaylines; i++) { - CS[i] = (char *)malloc(50); - *CS[i] = ' '; - *(CS[i]+1) = 0; - } - initkeypad(); -} - -void formatentry(int s) -{ - if (calcdata[s] - trunc(calcdata[s]) == 0 && - (calcdata[s] < 1.0e9 && -1.0e9 < calcdata[s])) { - if (base == 10) { - sprintf(CS[s], "%15d", (int)calcdata[s]); - } else { - sprintf(CS[s], "0x%13x", (int)calcdata[s]); - } - } else { - if (calcdata[s] < 1.0e9 && -1.0e9 < calcdata[s] && - (calcdata[s] > 1.0e-5 || calcdata[s] < -1.0e-5)) - sprintf(CS[s], "%15.12f", calcdata[s]); - else - sprintf(CS[s], "%15.12e", calcdata[s]); - } -} - -/* ARGSUSED1 */ -void kbd(unsigned char c, int x, int y) -{ - switch (c) { - case 'A': case 'a': interpclick(Akey); break; - case 'B': case 'b': interpclick(Bkey); break; - case 'C': case 'c': interpclick(Ckey); break; - case 'D': case 'd': interpclick(Dkey); break; - case 'E': case 'e': interpclick(Ekey); break; - case 'F': case 'f': interpclick(Fkey); break; - case '0': interpclick(Zerokey); break; - case '1': interpclick(Onekey); break; - case '2': interpclick(Twokey); break; - case '3': interpclick(Threekey); break; - case '4': interpclick(Fourkey); break; - case '5': interpclick(Fivekey); break; - case '6': interpclick(Sixkey); break; - case '7': interpclick(Sevenkey); break; - case '8': interpclick(Eightkey); break; - case '9': interpclick(Ninekey); break; - case '.': interpclick(Dotkey); break; - case '+': interpclick(Pluskey); break; - case '-': interpclick(Minuskey); break; - case '*': interpclick(Timeskey); break; - case '/': interpclick(Dividekey); break; - case '\n': case '\r': interpclick(Enterkey); break; - } - -} - -void main(int argc, char **argv) -{ - glutInit(&argc, argv); - initcalc(); - formatentry(Displaylines-1); - glutKeyboardFunc(kbd); /* overrides mui cmd */ - glutMainLoop(); -} - -int inputptr = 0; -int enablepush = 0; - -void push(void) -{ - CSP++; - inputptr = 0; - *CS[CSP] = ' '; - *(CS[CSP]+1) = 0; - muiSetTLTopInt(tl, CSP - Displaylines + 1); -} - -void doenter(void) -{ - int isdot = 0; - - char *s = CS[CSP]; - while (*s) {if (*s++ == '.') isdot=1; } - if (enablepush) { - strcpy(CS[CSP+1], CS[CSP]); - calcdata[CSP+1] = calcdata[CSP]; - CSP++; - } else { - if (isdot || base == 10) - calcdata[CSP] = atof(CS[CSP]); - else - calcdata[CSP] = (double) strtol(CS[CSP], 0, 16); - enablepush = 1; - inputptr = 0; - } - formatentry(CSP); - muiSetTLTopInt(tl, CSP - Displaylines + 1); - glutPostRedisplay(); -} - -void binop(char c) -{ - int i, j; - - if (enablepush == 0) doenter(); - if (CSP < Displaylines) return; - switch (c) { - case '+': - calcdata[CSP-1] = calcdata[CSP-1] + calcdata[CSP]; - break; - case '-': - calcdata[CSP-1] = calcdata[CSP-1] - calcdata[CSP]; - break; - case '*': - calcdata[CSP-1] = calcdata[CSP-1] * calcdata[CSP]; - break; - case '/': - calcdata[CSP-1] = calcdata[CSP-1] / calcdata[CSP]; - break; - case '^': - if (invmode == 0) - calcdata[CSP-1] = pow(calcdata[CSP-1], calcdata[CSP]); - else - calcdata[CSP-1] = pow(calcdata[CSP-1], 1.0/calcdata[CSP]); - break; - case '&': - if (calcdata[CSP-1] - trunc(calcdata[CSP-1]) != 0) return; - if (calcdata[CSP] - trunc(calcdata[CSP]) != 0) return; - i = calcdata[CSP-1]; j = calcdata[CSP]; - calcdata[CSP-1] = (int)(i&j); - break; - case '|': - if (calcdata[CSP-1] - trunc(calcdata[CSP-1]) != 0) return; - if (calcdata[CSP] - trunc(calcdata[CSP]) != 0) return; - i = calcdata[CSP-1]; j = calcdata[CSP]; - calcdata[CSP-1] = (int)(i|j); - break; - } - CS[CSP][0] = 0; - CSP--; - formatentry(CSP); - muiSetTLTopInt(tl, CSP - Displaylines + 1); - glutPostRedisplay(); - enablepush = 1; -} - -void unop(int c) -{ - int i; - - if (enablepush == 0) doenter(); - switch (c) { - case Storekey: - memory = calcdata[CSP]; - break; - case Recallkey: - doenter(); - calcdata[CSP] = memory; - break; - case Flipsignkey: - calcdata[CSP] = -calcdata[CSP]; - break; - case Oneoverkey: - calcdata[CSP] = 1.0/calcdata[CSP]; - break; - case Clearkey: - calcdata[CSP] = 0.0; - enablepush = 0; - formatentry(CSP); - glutPostRedisplay(); - return; - case Sinkey: - if (invmode) { - calcdata[CSP] = asin(calcdata[CSP]); - if (degreemode) calcdata[CSP] *= 180.0/M_PI; - } else { - if (degreemode) calcdata[CSP] *= M_PI/180.0; - calcdata[CSP] = sin(calcdata[CSP]); - } - break; - case Coskey: - if (invmode) { - calcdata[CSP] = acos(calcdata[CSP]); - if (degreemode) calcdata[CSP] *= 180.0/M_PI; - } else { - if (degreemode) calcdata[CSP] *= M_PI/180.0; - calcdata[CSP] = cos(calcdata[CSP]); - } - break; - case Tankey: - if (invmode) { - calcdata[CSP] = atan(calcdata[CSP]); - if (degreemode) calcdata[CSP] *= 180.0/M_PI; - } else { - if (degreemode) calcdata[CSP] *= M_PI/180.0; - calcdata[CSP] = tan(calcdata[CSP]); - } - break; - case Tentoxkey: - if (invmode) - calcdata[CSP] = log10(calcdata[CSP]); - else - calcdata[CSP] = pow(10, calcdata[CSP]); - break; - case Expkey: - if (invmode) - calcdata[CSP] = log(calcdata[CSP]); - else - calcdata[CSP] = exp(calcdata[CSP]); - break; - case Intkey: - if (invmode) - calcdata[CSP] = calcdata[CSP] - trunc(calcdata[CSP]); - else - calcdata[CSP] = trunc(calcdata[CSP]); - break; - case Sqrtkey: - if (invmode==0) - calcdata[CSP] = sqrt(calcdata[CSP]); - else - calcdata[CSP] = calcdata[CSP]*calcdata[CSP]; - break; - case Notkey: - if (calcdata[CSP] - trunc(calcdata[CSP]) != 0) return; - i = calcdata[CSP]; - calcdata[CSP] = (int)(~i); - break; - } - formatentry(CSP); - muiSetTLTopInt(tl, CSP - Displaylines + 1); - glutPostRedisplay(); - enablepush = 1; -} - -void interpclick(int x) -{ - int i, rcount; - float f; - char *c; - - if (x == 0) return; - if (savingprog && x != Progkey && x != Runkey) - program[proglen++] = x; - if ((Zerokey <= x && x <= Ninekey) || x == Dotkey || - ((base == 16) && (Akey <= x && x <= Fkey))) { - if (enablepush) push(); - enablepush = 0; - if (x == Dotkey) - CS[CSP][inputptr++] = '.'; - else if (Akey <= x && x <= Fkey) - CS[CSP][inputptr++] = 'a' + x - Akey; - else - CS[CSP][inputptr++] = '0'+x-Zerokey; - CS[CSP][inputptr] = 0; - muiSetTLTopInt(tl, CSP - Displaylines + 1); - glutPostRedisplay(); - } else switch (x) { - case Pluskey: - binop('+'); break; - case Minuskey: - binop('-'); break; - case Timeskey: - binop('*'); break; - case Dividekey: - binop('/'); break; - case Xtoykey: - binop('^'); break; - case Helpkey: - showhelp(); break; - case Clearkey: - unop(Clearkey); break; - case Flipsignkey: - unop(Flipsignkey); break; - case Enterkey: - doenter(); - break; - case Exchkey: - if (CSP < Displaylines) break; - if (enablepush == 0) doenter(); - f = calcdata[CSP]; - calcdata[CSP] = calcdata[CSP-1]; - calcdata[CSP-1] = f; - c = CS[CSP]; - CS[CSP] = CS[CSP-1]; - CS[CSP-1] = c; - glutPostRedisplay(); - break; - case Rollkey: - if (CSP < Displaylines) break; - rcount = CSP - Displaylines+1; - if (enablepush == 0) doenter(); - f = calcdata[CSP]; - c = CS[CSP]; - for (i = 0; i < rcount; i++) { - calcdata[CSP-i] = calcdata[CSP-i-1]; - CS[CSP-i] = CS[CSP-i-1]; - } - calcdata[CSP-rcount] = f; - CS[CSP-rcount] = c; - glutPostRedisplay(); - break; - case Dup2key: - if (CSP < Displaylines) break; - if (enablepush == 0) doenter(); - strcpy(CS[CSP+2], CS[CSP]); - calcdata[CSP+2] = calcdata[CSP]; - strcpy(CS[CSP+1], CS[CSP-1]); - calcdata[CSP+1] = calcdata[CSP-1]; - CSP += 2; - muiSetTLTopInt(tl, CSP - Displaylines + 1); - glutPostRedisplay(); - break; - case Radkey: - if (degreemode) { - keypad[0][5].label = "Rad"; - keypad[0][5].invlabel = "Rad"; - } else { - keypad[0][5].label = "Deg"; - keypad[0][5].invlabel = "Deg"; - } - muiLoadButton(keypad[0][5].b, keypad[0][5].label); - degreemode = 1 - degreemode; - loadbuttons(invmode); - break; - case Invkey: - if (invmode) { - invmode = 0; - loadbuttons(0); - } else { - invmode = 2; - loadbuttons(1); - } - break; - case Progkey: - if (savingprog == 0) { - proglen = 0; - } - savingprog = 1 - savingprog; - break; - case Runkey: - if (savingprog) break; - for (i = 0; i < proglen; i++) - interpclick(program[i]); - break; - case Storekey: - unop(Storekey); break; - case Recallkey: - unop(Recallkey); break; - case Oneoverkey: - unop(Oneoverkey); break; - case Sinkey: - unop(Sinkey); break; - case Coskey: - unop(Coskey); break; - case Tankey: - unop(Tankey); break; - case Expkey: - unop(Expkey); break; - case Tentoxkey: - unop(Tentoxkey); break; - case Intkey: - unop(Intkey); break; - case Andkey: - binop('&'); break; - case Orkey: - binop('|'); break; - case Notkey: - unop(Notkey); break; - case Base10key: - if (enablepush == 0) doenter(); - base = 10; - for (i = Displaylines-1; i <= CSP; i++) - formatentry(i); - glutPostRedisplay(); - break; - case Base16key: - if (enablepush == 0) doenter(); - base = 16; - for (i = Displaylines-1; i <= CSP; i++) - formatentry(i); - glutPostRedisplay(); - break; - case Sqrtkey: - unop(Sqrtkey); break; - } - if (invmode == 1) { - loadbuttons(0); - } - if (invmode > 0) invmode--; -} - -void showhelp(void) -{ -printf("\n\n------------------------------------------\n\n"); -printf("Calc is a Reverse-Polish-Notation (RPN) calculator. You\n"); -printf("must enter the operands first, then the operation. For\n"); -printf("example, to add 3 and 4, press [3] [Enter] [4] [+]. If\n"); -printf("the operation is unary, like sine, it operates on the bottom\n"); -printf("element of the display. To take the sine of .54, do:\n"); -printf("\n"); -printf("[.] [5] [4] [Sin].\n"); -printf("\n"); -printf("The last 6 entries of the stack are visible, and you can\n"); -printf("scroll to see the rest. All operations are performed on\n"); -printf("the element(s) at the bottom of the stack. The bottom\n"); -printf("element is called 'x' and the next element up is called 'y'.\n"); -printf("\n"); -printf("The [+/-] key changes the sign of x. To find the cosine of\n"); -printf("-.22, do:\n"); -printf("\n"); -printf("[.] [2] [2] [+/-] [Cos].\n"); -printf("\n"); -printf("The [Inv] key changes the operation of some of the other keys\n"); -printf("so they perform the inverse operation. It is only active for\n"); -printf("one keystroke. Press [Inv] again to cancel the operation.\n"); -printf("\n"); -printf("[Sto] and [Rcl] stores and recalls a single value.\n"); -printf("\n"); -printf("[Dup2] duplicates the bottom 2 items on the stack.\n"); -printf("\n"); -printf("[Roll] rolls all the stack elements down one, and puts the\n"); -printf("bottom element on the top.\n"); -printf("\n"); -printf("[Exch] swaps the bottom two elements.\n"); -printf("\n"); -printf("[Int] gives the integer part.\n"); -printf("\n"); -printf("[Inv] [Frac] gives the fractional part.\n"); -printf("\n"); -printf("[Clr] clears the bottom element to zero. Use this when you\n"); -printf("get some kind of error\n"); -printf("\n"); -printf("[B10] and [B16] put you in base 10 or base 16 mode. Numbers\n"); -printf("with fractional parts are always displayed in base 10. In\n"); -printf("base 16 mode, the keys [a] through [f] are used for numeric\n"); -printf("entry. They do nothing, otherwise.\n"); -printf("\n"); -printf("[And], [Or] and [Not] are logical operations on 32 bit\n"); -printf("integers. If there's a fractional part, they don't do\n"); -printf("anything.\n"); -printf("\n"); -printf("To remember a sequence of keystrokes, press [Prog], then the\n"); -printf("sequence of keystrokes, and then [Prog] again. For example,\n"); -printf("if you want to calculate x^2 + y^2 repeatedly, where x and y\n"); -printf("are the two bottom entries of the stack, do this:\n"); -printf("\n"); -printf("[Prog] [Inv] [x^2] [Exch] [Inv] [x^2] [+] [Prog].\n"); -printf("\n"); -printf("Then, to calculate 5^2+7^2, do this:\n"); -printf("\n"); -printf("[5] [Enter] [7] [Run].\n"); -printf("\n"); -printf("The following keys from the computer keyboard are understood\n"); -printf("by calc:\n"); -printf("\n"); -printf("[0], [1], [2], [3], [4], [5], [6], [7], [8], [9], [.],\n"); -printf("[Enter], [+], [-], [*], [/], [a], [b], [c], [d], [e], [f].\n"); -printf("\n"); -printf("The [Deg]/[Rad] key shows the current angle mode. Press\n"); -printf("it to get the other angle mode.\n"); -printf("\n------------------------------------------\n\n"); -} diff --git a/lib/glut-3.7.6/progs/mui/calc/calc.dsp b/lib/glut-3.7.6/progs/mui/calc/calc.dsp deleted file mode 100644 index bc91335f9..000000000 --- a/lib/glut-3.7.6/progs/mui/calc/calc.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="calc" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=calc - 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 "calc.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 "calc.mak" CFG="calc - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "calc - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "calc - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "calc - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "calc - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "calc - Win32 Release" -# Name "calc - Win32 Debug" -# Begin Source File - -SOURCE=.\calc.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/mui/calc/calc.h b/lib/glut-3.7.6/progs/mui/calc/calc.h deleted file mode 100644 index 4ea3a89f1..000000000 --- a/lib/glut-3.7.6/progs/mui/calc/calc.h +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -#define Pluskey 1 -#define Minuskey 2 -#define Timeskey 3 -#define Zerokey 4 -#define Onekey 5 -#define Twokey 6 -#define Threekey 7 -#define Fourkey 8 -#define Fivekey 9 -#define Sixkey 10 -#define Sevenkey 11 -#define Eightkey 12 -#define Ninekey 13 -#define Dividekey 14 -#define Akey 15 -#define Bkey 16 -#define Ckey 17 -#define Dkey 18 -#define Ekey 19 -#define Fkey 20 -#define Flipsignkey 21 -#define Enterkey 22 -#define Exchkey 23 -#define Rollkey 24 -#define Radkey 25 -#define Invkey 26 -#define Progkey 27 -#define Storekey 28 -#define Recallkey 29 -#define Sinkey 30 -#define Coskey 31 -#define Tankey 32 -#define Expkey 33 -#define Tentoxkey 34 -#define Intkey 35 -#define Andkey 36 -#define Orkey 37 -#define Notkey 38 -#define Base16key 39 -#define Sqrtkey 40 -#define Dotkey 41 -#define Oneoverkey 42 -#define Base10key 43 -#define Clearkey 44 -#define Dup2key 45 -#define Runkey 46 -#define Xtoykey 47 -#define Helpkey 48 - diff --git a/lib/glut-3.7.6/progs/perf_harness.dsw b/lib/glut-3.7.6/progs/perf_harness.dsw deleted file mode 100644 index f7f29999c..000000000 --- a/lib/glut-3.7.6/progs/perf_harness.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "perf_torus"=".\perf_harness\perf_torus.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/lib/glut-3.7.6/progs/perf_harness/Imakefile b/lib/glut-3.7.6/progs/perf_harness/Imakefile deleted file mode 100644 index d84565adf..000000000 --- a/lib/glut-3.7.6/progs/perf_harness/Imakefile +++ /dev/null @@ -1,14 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1997. */ - -#include "../../Glut.cf" - -TARGETS = perf_torus - -SRCS = gl_harness.c torus.c - -AllTarget($(TARGETS)) - -NormalGlutProgramTarget(perf_torus,torus.o gl_harness.o) - -DependTarget() diff --git a/lib/glut-3.7.6/progs/perf_harness/README b/lib/glut-3.7.6/progs/perf_harness/README deleted file mode 100644 index 955598c45..000000000 --- a/lib/glut-3.7.6/progs/perf_harness/README +++ /dev/null @@ -1,40 +0,0 @@ - -This directory contains an example of using a simple GLUT benchmark -harness to construct portable application-specific OpenGL benchmarks. - -For more information on this code and how to construction -application-specific OpenGL benchmarks with the gl_harness.c in this -directory, see Section 6.6.8 of my book "Programming OpenGL for the X -Window System" (Addison-Wesley, ISBN 0-201-48359-9). See: - - http://reality.sgi.com/mjk_asd/OpenGLforX.html - -Because the benchmark harness uses GLUT, the benchmarks created work on -any GLUT-capable window system (not just X11). - -Example runs: - - % torus_test - Renders/second = 2.90951 - after 30 iterations over 10.311 seconds - - % torus_test -iters 40 - Renders/second = 2.90846 - after 40 iterations over 13.753 seconds - - % torus_test -time 5 -depth - Renders/second = 2.53678 - after 15 iterations over 5.913 seconds - - % torus_test -depth -light - Renders/second = 1.82515 - after 20 iterations over 10.958 seconds - - % torus_test -geometry 100x100 -depth -light - Renders/second = 2.00981 - after 25 iterations over 12.439 seconds - -Good luck with your benchmarking. - -- Mark - July 10, 1997 diff --git a/lib/glut-3.7.6/progs/perf_harness/gl_harness.c b/lib/glut-3.7.6/progs/perf_harness/gl_harness.c deleted file mode 100644 index 7e8e60e40..000000000 --- a/lib/glut-3.7.6/progs/perf_harness/gl_harness.c +++ /dev/null @@ -1,154 +0,0 @@ - -/* 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 -#include -#include -#include - -extern testInit(int argc, char **argv, int width, int height); -extern testRender(void); - -int testIterationsStep, testDisplayMode, testMinimumTestTime; -float timeEnd, timeStart; -int error; -int renders = 0, damaged = 0; - -/* ARGSUSED */ -void -report(int value) -{ - float duration; - - duration = (timeEnd - timeStart) / 1000.0; - printf("Renders/second = %g\n", - renders / duration); - printf(" after %d iterations over %g seconds\n", - renders, duration); - if (error != GL_NO_ERROR) - printf("OpenGL errors occurred during test; RESULTS ARE DUBIOUS.\n"); - if (damaged != 1) - printf("Window disturbed during test; RESULTS ARE DUBIOUS.\n"); - printf("\n"); - exit(damaged != 1); -} - -/* ARGSUSED */ -void -ensureEventsGotten(int value) -{ - /* Hack. Creating a new window _ensures_ any outstanding - expose event from popping the window will be retrieved. */ - glutCreateWindow("dummy"); - glutHideWindow(); - glutTimerFunc(1, report, 0); -} - -void -displayDone(void) -{ - if (glutLayerGet(GLUT_NORMAL_DAMAGED)) - damaged++; -} - -/* ARGSUSED */ -void -done(int value) -{ - glFinish(); - timeEnd = glutGet(GLUT_ELAPSED_TIME); - error = glGetError(); - - /* Pop the window. If the window was obscured by another - window during the test, raising the window should generate - an expose event we want to catch. */ - glutPopWindow(); - - /* The test is over so only notice an expose and do not run - the testRender routine. */ - glutDisplayFunc(displayDone); - glutTimerFunc(1, ensureEventsGotten, 0); -} - -void -display(void) -{ - int i; - - if (glutLayerGet(GLUT_NORMAL_DAMAGED)) { - damaged++; - if (damaged == 1) { - glutTimerFunc(testMinimumTestTime * 1000, done, 0); - timeStart = glutGet(GLUT_ELAPSED_TIME); - } - } - for (i = 0; i < testIterationsStep; i++) { - testRender(); - renders++; - } - glutPostRedisplay(); -} - -void -visible(int state) -{ - if (state == GLUT_NOT_VISIBLE) - damaged++; -} - -int -main(int argc, char **argv) -{ - char *newArgv[100]; - int newArgc, i; - - /* Defaults; testInit may override these. */ - testIterationsStep = 5; - testDisplayMode = GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH; - testMinimumTestTime = 10; /* seconds */ - - glutInit(&argc, argv); - newArgc = 1; - newArgv[0] = argv[0]; - for (i = 1; i < argc; i++) { - if (!strcmp("-time", argv[i])) { - i++; - if (argv[i] == NULL) { - fprintf(stderr, "%s: -time option needs argument\n", argv[0]); - exit(1); - } - testMinimumTestTime = (int) strtol(argv[i], NULL, 0); - } else if (!strcmp("-mode", argv[i])) { - i++; - if (argv[i] == NULL) { - fprintf(stderr, "%s: -mode option needs argument\n", argv[0]); - exit(1); - } - testDisplayMode = (int) strtol(argv[i], NULL, 0); - } else if (!strcmp("-iters", argv[i])) { - i++; - if (argv[i] == NULL) { - fprintf(stderr, "%s: -mode option needs argument\n", argv[0]); - exit(1); - } - testIterationsStep = (int) strtol(argv[i], NULL, 0); - } else { - newArgv[newArgc] = argv[i]; - newArgc++; - } - } - newArgv[newArgc] = NULL; - - glutInitDisplayMode(testDisplayMode); - glutCreateWindow("OpenGL performance test"); - glutDisplayFunc(display); - glutVisibilityFunc(visible); - testInit(newArgc, newArgv, - glutGet(GLUT_WINDOW_WIDTH), glutGet(GLUT_WINDOW_HEIGHT)); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/perf_harness/perf_torus.dsp b/lib/glut-3.7.6/progs/perf_harness/perf_torus.dsp deleted file mode 100644 index 54116ebce..000000000 --- a/lib/glut-3.7.6/progs/perf_harness/perf_torus.dsp +++ /dev/null @@ -1,92 +0,0 @@ -# Microsoft Developer Studio Project File - Name="perf_torus" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=perf_torus - 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 "perf_torus.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 "perf_torus.mak" CFG="perf_torus - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "perf_torus - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "perf_torus - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "perf_torus - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "perf_torus - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "perf_torus - Win32 Release" -# Name "perf_torus - Win32 Debug" -# Begin Source File - -SOURCE=.\gl_harness.c -# End Source File -# Begin Source File - -SOURCE=.\torus.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/perf_harness/torus.c b/lib/glut-3.7.6/progs/perf_harness/torus.c deleted file mode 100644 index 1bcd1ce66..000000000 --- a/lib/glut-3.7.6/progs/perf_harness/torus.c +++ /dev/null @@ -1,61 +0,0 @@ - -/* 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 -#include - -/* Modify these variables if necessary to control the number of - iterations for per time sample, the GLUT display mode for the - window, and the minimum test running time in seconds. */ -extern int testIterationsStep, testDisplayMode, testMinimumTestTime; - -void -testInit(int argc, char **argv, int width, int height) -{ - static GLfloat light_diffuse[] = {1.0, 0.0, 0.0, 1.0}; - static GLfloat light_position[] = {1.0, 1.0, 1.0, 0.0}; - int solid, i; - - glViewport(0, 0, width, height); - glMatrixMode(GL_PROJECTION); - gluPerspective(25.0, width/height, 1.0, 10.0); - glMatrixMode(GL_MODELVIEW); - gluLookAt(0.0, 0.0, 5.0, - 0.0, 0.0, 0.0, - 0.0, 1.0, 0.); - glTranslatef(0.0, 0.0, -1.0); - - glColor3f(1.0, 0.0, 0.0); - glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); - glLightfv(GL_LIGHT0, GL_POSITION, light_position); - - solid = 1; - for (i = 1; i < argc; i++) { - if (!strcmp("-light", argv[i])) { - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - } else if (!strcmp("-depth", argv[i])) { - glEnable(GL_DEPTH_TEST); - } else if (!strcmp("-wire", argv[i])) { - solid = 0; - } - } - glNewList(1, GL_COMPILE); - if (solid) { - glutSolidTorus(0.25, 0.75, 100, 100); - } else { - glutWireTorus(0.25, 0.75, 100, 100); - } - glEndList(); -} - -void -testRender(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glCallList(1); -} diff --git a/lib/glut-3.7.6/progs/redbook.dsw b/lib/glut-3.7.6/progs/redbook.dsw deleted file mode 100644 index f0b6b5fa8..000000000 --- a/lib/glut-3.7.6/progs/redbook.dsw +++ /dev/null @@ -1,974 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "_all"=".\redbook\_all.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name aaindex - End Project Dependency - Begin Project Dependency - Project_Dep_Name aapoly - End Project Dependency - Begin Project Dependency - Project_Dep_Name aargb - End Project Dependency - Begin Project Dependency - Project_Dep_Name accanti - End Project Dependency - Begin Project Dependency - Project_Dep_Name accpersp - End Project Dependency - Begin Project Dependency - Project_Dep_Name alpha - End Project Dependency - Begin Project Dependency - Project_Dep_Name alpha3D - End Project Dependency - Begin Project Dependency - Project_Dep_Name anti - End Project Dependency - Begin Project Dependency - Project_Dep_Name bezcurve - End Project Dependency - Begin Project Dependency - Project_Dep_Name bezmesh - End Project Dependency - Begin Project Dependency - Project_Dep_Name checker - End Project Dependency - Begin Project Dependency - Project_Dep_Name clip - End Project Dependency - Begin Project Dependency - Project_Dep_Name colormat - End Project Dependency - Begin Project Dependency - Project_Dep_Name cube - End Project Dependency - Begin Project Dependency - Project_Dep_Name depthcue - End Project Dependency - Begin Project Dependency - Project_Dep_Name dof - End Project Dependency - Begin Project Dependency - Project_Dep_Name double - End Project Dependency - Begin Project Dependency - Project_Dep_Name drawf - End Project Dependency - Begin Project Dependency - Project_Dep_Name feedback - End Project Dependency - Begin Project Dependency - Project_Dep_Name fog - End Project Dependency - Begin Project Dependency - Project_Dep_Name fogindex - End Project Dependency - Begin Project Dependency - Project_Dep_Name font - End Project Dependency - Begin Project Dependency - Project_Dep_Name hello - End Project Dependency - Begin Project Dependency - Project_Dep_Name image - End Project Dependency - Begin Project Dependency - Project_Dep_Name light - End Project Dependency - Begin Project Dependency - Project_Dep_Name lines - End Project Dependency - Begin Project Dependency - Project_Dep_Name list - End Project Dependency - Begin Project Dependency - Project_Dep_Name material - End Project Dependency - Begin Project Dependency - Project_Dep_Name mipmap - End Project Dependency - Begin Project Dependency - Project_Dep_Name model - End Project Dependency - Begin Project Dependency - Project_Dep_Name movelight - End Project Dependency - Begin Project Dependency - Project_Dep_Name nurbs - End Project Dependency - Begin Project Dependency - Project_Dep_Name pickdepth - End Project Dependency - Begin Project Dependency - Project_Dep_Name picksquare - End Project Dependency - Begin Project Dependency - Project_Dep_Name plane - End Project Dependency - Begin Project Dependency - Project_Dep_Name planet - End Project Dependency - Begin Project Dependency - Project_Dep_Name polyoff - End Project Dependency - Begin Project Dependency - Project_Dep_Name polys - End Project Dependency - Begin Project Dependency - Project_Dep_Name quadric - End Project Dependency - Begin Project Dependency - Project_Dep_Name robot - End Project Dependency - Begin Project Dependency - Project_Dep_Name sccolorlight - End Project Dependency - Begin Project Dependency - Project_Dep_Name scene - End Project Dependency - Begin Project Dependency - Project_Dep_Name scenebamb - End Project Dependency - Begin Project Dependency - Project_Dep_Name sceneflat - End Project Dependency - Begin Project Dependency - Project_Dep_Name select - End Project Dependency - Begin Project Dependency - Project_Dep_Name smooth - End Project Dependency - Begin Project Dependency - Project_Dep_Name stencil - End Project Dependency - Begin Project Dependency - Project_Dep_Name stroke - End Project Dependency - Begin Project Dependency - Project_Dep_Name surface - End Project Dependency - Begin Project Dependency - Project_Dep_Name teaambient - End Project Dependency - Begin Project Dependency - Project_Dep_Name teapots - End Project Dependency - Begin Project Dependency - Project_Dep_Name tess - End Project Dependency - Begin Project Dependency - Project_Dep_Name tesswind - End Project Dependency - Begin Project Dependency - Project_Dep_Name texbind - End Project Dependency - Begin Project Dependency - Project_Dep_Name texgen - End Project Dependency - Begin Project Dependency - Project_Dep_Name texprox - End Project Dependency - Begin Project Dependency - Project_Dep_Name texsub - End Project Dependency - Begin Project Dependency - Project_Dep_Name texturesurf - End Project Dependency - Begin Project Dependency - Project_Dep_Name torus - End Project Dependency - Begin Project Dependency - Project_Dep_Name trim - End Project Dependency - Begin Project Dependency - Project_Dep_Name unproject - End Project Dependency - Begin Project Dependency - Project_Dep_Name varray - End Project Dependency - Begin Project Dependency - Project_Dep_Name wrap - End Project Dependency -}}} - -############################################################################### - -Project: "aaindex"=".\redbook\aaindex.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "aapoly"=".\redbook\aapoly.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "aargb"=".\redbook\aargb.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "accanti"=".\redbook\accanti.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "accpersp"=".\redbook\accpersp.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "alpha"=".\redbook\alpha.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "alpha3D"=".\redbook\alpha3D.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "anti"=".\redbook\anti.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "bezcurve"=".\redbook\bezcurve.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "bezmesh"=".\redbook\bezmesh.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "checker"=".\redbook\checker.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "clip"=".\redbook\clip.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "colormat"=".\redbook\colormat.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "cube"=".\redbook\cube.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "depthcue"=".\redbook\depthcue.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "dof"=".\redbook\dof.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "double"=".\redbook\double.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "drawf"=".\redbook\drawf.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "feedback"=".\redbook\feedback.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "fog"=".\redbook\fog.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "fogindex"=".\redbook\fogindex.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "font"=".\redbook\font.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "hello"=".\redbook\hello.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "image"=".\redbook\image.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "light"=".\redbook\light.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "lines"=".\redbook\lines.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "list"=".\redbook\list.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "material"=".\redbook\material.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "mipmap"=".\redbook\mipmap.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "model"=".\redbook\model.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "movelight"=".\redbook\movelight.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "nurbs"=".\redbook\nurbs.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "pickdepth"=".\redbook\pickdepth.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "picksquare"=".\redbook\picksquare.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "plane"=".\redbook\plane.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "planet"=".\redbook\planet.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "polyoff"=".\redbook\polyoff.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "polys"=".\redbook\polys.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "quadric"=".\redbook\quadric.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "robot"=".\redbook\robot.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "sccolorlight"=".\redbook\sccolorlight.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "scene"=".\redbook\scene.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "scenebamb"=".\redbook\scenebamb.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "sceneflat"=".\redbook\sceneflat.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "select"=".\redbook\select.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "smooth"=".\redbook\smooth.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "stencil"=".\redbook\stencil.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "stroke"=".\redbook\stroke.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "surface"=".\redbook\surface.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "teaambient"=".\redbook\teaambient.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "teapots"=".\redbook\teapots.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "tess"=".\redbook\tess.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "tesswind"=".\redbook\tesswind.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "texbind"=".\redbook\texbind.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "texgen"=".\redbook\texgen.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "texprox"=".\redbook\texprox.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "texsub"=".\redbook\texsub.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "texturesurf"=".\redbook\texturesurf.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "torus"=".\redbook\torus.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "trim"=".\redbook\trim.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "unproject"=".\redbook\unproject.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "varray"=".\redbook\varray.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "wrap"=".\redbook\wrap.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/lib/glut-3.7.6/progs/redbook/Imakefile b/lib/glut-3.7.6/progs/redbook/Imakefile deleted file mode 100644 index 711ef43fa..000000000 --- a/lib/glut-3.7.6/progs/redbook/Imakefile +++ /dev/null @@ -1,92 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1994, 1997. */ - -#include "../../Glut.cf" - -TARGETS = accanti anti bezmesh checker depthcue dof fog fogindex material \ - mipmap nurbs pickdepth plane polys sccolorlight scene scenebamb \ - sceneflat stencil stroke surface teaambient teapots texturesurf \ - aaindex aapoly aargb accpersp alpha alpha3D bezcurve clip colormat \ - cube double drawf feedback font hello image light lines list model \ - movelight picksquare planet polyoff quadric robot select smooth \ - tess tesswind texbind texgen texprox texsub torus trim unproject \ - varray wrap - -SRCS = aaindex.c aapoly.c aargb.c accanti.c accpersp.c alpha.c \ - alpha3D.c anti.c bezcurve.c bezmesh.c checker.c clip.c colormat.c \ - cube.c depthcue.c dof.c double.c drawf.c feedback.c fog.c fogindex.c \ - font.c hello.c image.c light.c lines.c list.c material.c mipmap.c \ - model.c movelight.c nurbs.c pickdepth.c picksquare.c plane.c planet.c \ - polyoff.c polys.c quadric.c robot.c sccolorlight.c scene.c \ - scenebamb.c sceneflat.c select.c smooth.c stencil.c stroke.c \ - surface.c teaambient.c teapots.c tess.c tesswind.c texbind.c texgen.c \ - texprox.c texsub.c texturesurf.c torus.c trim.c unproject.c varray.c \ - wrap.c - -AllTarget($(TARGETS)) - -SimpleGlutProgramTarget(accanti) -SimpleGlutProgramTarget(anti) -SimpleGlutProgramTarget(bezmesh) -SimpleGlutProgramTarget(checker) -SimpleGlutProgramTarget(depthcue) -SimpleGlutProgramTarget(dof) -SimpleGlutProgramTarget(fog) -SimpleGlutProgramTarget(fogindex) -SimpleGlutProgramTarget(material) -SimpleGlutProgramTarget(nurbs) -SimpleGlutProgramTarget(pickdepth) -SimpleGlutProgramTarget(plane) -SimpleGlutProgramTarget(mipmap) -SimpleGlutProgramTarget(polys) -SimpleGlutProgramTarget(sccolorlight) -SimpleGlutProgramTarget(scene) -SimpleGlutProgramTarget(scenebamb) -SimpleGlutProgramTarget(sceneflat) -SimpleGlutProgramTarget(stencil) -SimpleGlutProgramTarget(stroke) -SimpleGlutProgramTarget(surface) -SimpleGlutProgramTarget(teaambient) -SimpleGlutProgramTarget(teapots) -SimpleGlutProgramTarget(texturesurf) -SimpleGlutProgramTarget(aaindex) -SimpleGlutProgramTarget(aapoly) -SimpleGlutProgramTarget(aargb) -SimpleGlutProgramTarget(accpersp) -SimpleGlutProgramTarget(alpha) -SimpleGlutProgramTarget(alpha3D) -SimpleGlutProgramTarget(bezcurve) -SimpleGlutProgramTarget(clip) -SimpleGlutProgramTarget(colormat) -SimpleGlutProgramTarget(cube) -SimpleGlutProgramTarget(double) -SimpleGlutProgramTarget(drawf) -SimpleGlutProgramTarget(feedback) -SimpleGlutProgramTarget(font) -SimpleGlutProgramTarget(hello) -SimpleGlutProgramTarget(image) -SimpleGlutProgramTarget(light) -SimpleGlutProgramTarget(lines) -SimpleGlutProgramTarget(list) -SimpleGlutProgramTarget(model) -SimpleGlutProgramTarget(movelight) -SimpleGlutProgramTarget(picksquare) -SimpleGlutProgramTarget(planet) -SimpleGlutProgramTarget(polyoff) -SimpleGlutProgramTarget(quadric) -SimpleGlutProgramTarget(robot) -SimpleGlutProgramTarget(select) -SimpleGlutProgramTarget(smooth) -SimpleGlutProgramTarget(tess) -SimpleGlutProgramTarget(tesswind) -SimpleGlutProgramTarget(texbind) -SimpleGlutProgramTarget(texgen) -SimpleGlutProgramTarget(texprox) -SimpleGlutProgramTarget(texsub) -SimpleGlutProgramTarget(torus) -SimpleGlutProgramTarget(trim) -SimpleGlutProgramTarget(unproject) -SimpleGlutProgramTarget(varray) -SimpleGlutProgramTarget(wrap) - -DependTarget() diff --git a/lib/glut-3.7.6/progs/redbook/_all.dsp b/lib/glut-3.7.6/progs/redbook/_all.dsp deleted file mode 100644 index 6a4421548..000000000 --- a/lib/glut-3.7.6/progs/redbook/_all.dsp +++ /dev/null @@ -1,63 +0,0 @@ -# Microsoft Developer Studio Project File - Name="_all" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Generic Project" 0x010a - -CFG=_all - 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 "_all.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 "_all.mak" CFG="_all - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "_all - Win32 Release" (based on "Win32 (x86) Generic Project") -!MESSAGE "_all - Win32 Debug" (based on "Win32 (x86) Generic Project") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -MTL=midl.exe - -!IF "$(CFG)" == "_all - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" - -!ELSEIF "$(CFG)" == "_all - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "_all___Win32_Debug" -# PROP BASE Intermediate_Dir "_all___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" - -!ENDIF - -# Begin Target - -# Name "_all - Win32 Release" -# Name "_all - Win32 Debug" -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/aaindex.c b/lib/glut-3.7.6/progs/redbook/aaindex.c deleted file mode 100644 index 7dbc7b4b9..000000000 --- a/lib/glut-3.7.6/progs/redbook/aaindex.c +++ /dev/null @@ -1,153 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -/* - * aaindex.c - * This program draws shows how to draw anti-aliased lines in color - * index mode. It draws two diagonal lines to form an X; when 'r' - * is typed in the window, the lines are rotated in opposite - * directions. - */ -#include -#include "stdlib.h" - -#define RAMPSIZE 16 -#define RAMP1START 32 -#define RAMP2START 48 - -static float rotAngle = 0.; - -/* Initialize antialiasing for color index mode, - * including loading a green color ramp starting - * at RAMP1START, and a blue color ramp starting - * at RAMP2START. The ramps must be a multiple of 16. - */ -void init(void) -{ - int i; - - for (i = 0; i < RAMPSIZE; i++) { - GLfloat shade; - shade = (GLfloat) i/(GLfloat) RAMPSIZE; - glutSetColor(RAMP1START+(GLint)i, 0., shade, 0.); - glutSetColor(RAMP2START+(GLint)i, 0., 0., shade); - } - - glEnable (GL_LINE_SMOOTH); - glHint (GL_LINE_SMOOTH_HINT, GL_DONT_CARE); - glLineWidth (1.5); - - glClearIndex ((GLfloat) RAMP1START); -} - -/* Draw 2 diagonal lines to form an X - */ -void display(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - - glIndexi(RAMP1START); - glPushMatrix(); - glRotatef(-rotAngle, 0.0, 0.0, 0.1); - glBegin (GL_LINES); - glVertex2f (-0.5, 0.5); - glVertex2f (0.5, -0.5); - glEnd (); - glPopMatrix(); - - glIndexi(RAMP2START); - glPushMatrix(); - glRotatef(rotAngle, 0.0, 0.0, 0.1); - glBegin (GL_LINES); - glVertex2f (0.5, 0.5); - glVertex2f (-0.5, -0.5); - glEnd (); - glPopMatrix(); - - glFlush(); -} - -void reshape(int w, int h) -{ - glViewport(0, 0, (GLsizei) w, (GLsizei) h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - if (w <= h) - gluOrtho2D (-1.0, 1.0, - -1.0*(GLfloat)h/(GLfloat)w, 1.0*(GLfloat)h/(GLfloat)w); - else - gluOrtho2D (-1.0*(GLfloat)w/(GLfloat)h, - 1.0*(GLfloat)w/(GLfloat)h, -1.0, 1.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -/* ARGSUSED1 */ -void keyboard(unsigned char key, int x, int y) -{ - switch (key) { - case 'r': - case 'R': - rotAngle += 20.; - if (rotAngle >= 360.) rotAngle = 0.; - glutPostRedisplay(); - break; - case 27: /* Escape Key */ - exit(0); - break; - default: - break; - } -} - -/* Main Loop - * Open window with initial window size, title bar, - * color index display mode, and handle input events. - */ -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_SINGLE | GLUT_INDEX); - glutInitWindowSize (200, 200); - glutCreateWindow (argv[0]); - init(); - glutReshapeFunc (reshape); - glutKeyboardFunc (keyboard); - glutDisplayFunc (display); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/redbook/aaindex.dsp b/lib/glut-3.7.6/progs/redbook/aaindex.dsp deleted file mode 100644 index 0d2c55059..000000000 --- a/lib/glut-3.7.6/progs/redbook/aaindex.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="aaindex" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=aaindex - 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 "aaindex.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 "aaindex.mak" CFG="aaindex - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "aaindex - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "aaindex - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "aaindex - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "aaindex - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "aaindex - Win32 Release" -# Name "aaindex - Win32 Debug" -# Begin Source File - -SOURCE=.\aaindex.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/aapoly.c b/lib/glut-3.7.6/progs/redbook/aapoly.c deleted file mode 100644 index 757f0f48c..000000000 --- a/lib/glut-3.7.6/progs/redbook/aapoly.c +++ /dev/null @@ -1,172 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -/* - * aapoly.c - * This program draws filled polygons with antialiased - * edges. The special GL_SRC_ALPHA_SATURATE blending - * function is used. - * Pressing the 't' key turns the antialiasing on and off. - */ -#include -#include -#include -#include - -GLboolean polySmooth = GL_TRUE; - -static void init(void) -{ - glCullFace (GL_BACK); - glEnable (GL_CULL_FACE); - glBlendFunc (GL_SRC_ALPHA_SATURATE, GL_ONE); - glClearColor (0.0, 0.0, 0.0, 0.0); -} - -#define NFACE 6 -#define NVERT 8 -void drawCube(GLdouble x0, GLdouble x1, GLdouble y0, GLdouble y1, - GLdouble z0, GLdouble z1) -{ - static GLfloat v[8][3]; - static GLfloat c[8][4] = { - {0.0, 0.0, 0.0, 1.0}, {1.0, 0.0, 0.0, 1.0}, - {0.0, 1.0, 0.0, 1.0}, {1.0, 1.0, 0.0, 1.0}, - {0.0, 0.0, 1.0, 1.0}, {1.0, 0.0, 1.0, 1.0}, - {0.0, 1.0, 1.0, 1.0}, {1.0, 1.0, 1.0, 1.0} - }; - -/* indices of front, top, left, bottom, right, back faces */ - static GLubyte indices[NFACE][4] = { - {4, 5, 6, 7}, {2, 3, 7, 6}, {0, 4, 7, 3}, - {0, 1, 5, 4}, {1, 5, 6, 2}, {0, 3, 2, 1} - }; - - v[0][0] = v[3][0] = v[4][0] = v[7][0] = x0; - v[1][0] = v[2][0] = v[5][0] = v[6][0] = x1; - v[0][1] = v[1][1] = v[4][1] = v[5][1] = y0; - v[2][1] = v[3][1] = v[6][1] = v[7][1] = y1; - v[0][2] = v[1][2] = v[2][2] = v[3][2] = z0; - v[4][2] = v[5][2] = v[6][2] = v[7][2] = z1; - -#ifdef GL_VERSION_1_1 - glEnableClientState (GL_VERTEX_ARRAY); - glEnableClientState (GL_COLOR_ARRAY); - glVertexPointer (3, GL_FLOAT, 0, v); - glColorPointer (4, GL_FLOAT, 0, c); - glDrawElements (GL_QUADS, NFACE*4, GL_UNSIGNED_BYTE, indices); - glDisableClientState (GL_VERTEX_ARRAY); - glDisableClientState (GL_COLOR_ARRAY); -#else - printf ("If this is GL Version 1.0, "); - printf ("vertex arrays are not supported.\n"); - exit(1); -#endif -} - -/* Note: polygons must be drawn from front to back - * for proper blending. - */ -void display(void) -{ - if (polySmooth) { - glClear (GL_COLOR_BUFFER_BIT); - glEnable (GL_BLEND); - glEnable (GL_POLYGON_SMOOTH); - glDisable (GL_DEPTH_TEST); - } - else { - glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glDisable (GL_BLEND); - glDisable (GL_POLYGON_SMOOTH); - glEnable (GL_DEPTH_TEST); - } - - glPushMatrix (); - glTranslatef (0.0, 0.0, -8.0); - glRotatef (30.0, 1.0, 0.0, 0.0); - glRotatef (60.0, 0.0, 1.0, 0.0); - drawCube(-0.5, 0.5, -0.5, 0.5, -0.5, 0.5); - glPopMatrix (); - - glFlush (); -} - -void reshape(int w, int h) -{ - glViewport(0, 0, (GLsizei) w, (GLsizei) h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(30.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -/* ARGSUSED1 */ -void keyboard(unsigned char key, int x, int y) -{ - switch (key) { - case 't': - case 'T': - polySmooth = !polySmooth; - glutPostRedisplay(); - break; - case 27: - exit(0); /* Escape key */ - break; - default: - break; - } -} - -/* Main Loop - */ -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB - | GLUT_ALPHA | GLUT_DEPTH); - glutInitWindowSize(200, 200); - glutCreateWindow(argv[0]); - init (); - glutReshapeFunc (reshape); - glutKeyboardFunc (keyboard); - glutDisplayFunc (display); - glutMainLoop(); - return 0; -} - diff --git a/lib/glut-3.7.6/progs/redbook/aapoly.dsp b/lib/glut-3.7.6/progs/redbook/aapoly.dsp deleted file mode 100644 index 8d7ce7f6a..000000000 --- a/lib/glut-3.7.6/progs/redbook/aapoly.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="aapoly" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=aapoly - 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 "aapoly.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 "aapoly.mak" CFG="aapoly - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "aapoly - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "aapoly - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "aapoly - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "aapoly - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "aapoly - Win32 Release" -# Name "aapoly - Win32 Debug" -# Begin Source File - -SOURCE=.\aapoly.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/aargb.c b/lib/glut-3.7.6/progs/redbook/aargb.c deleted file mode 100644 index f51984170..000000000 --- a/lib/glut-3.7.6/progs/redbook/aargb.c +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -/* - * aargb.c - * This program draws shows how to draw anti-aliased lines. It draws - * two diagonal lines to form an X; when 'r' is typed in the window, - * the lines are rotated in opposite directions. - */ -#include -#include -#include - -static float rotAngle = 0.; - -/* Initialize antialiasing for RGBA mode, including alpha - * blending, hint, and line width. Print out implementation - * specific info on line width granularity and width. - */ -void init(void) -{ - GLfloat values[2]; - glGetFloatv (GL_LINE_WIDTH_GRANULARITY, values); - printf ("GL_LINE_WIDTH_GRANULARITY value is %3.1f\n", values[0]); - - glGetFloatv (GL_LINE_WIDTH_RANGE, values); - printf ("GL_LINE_WIDTH_RANGE values are %3.1f %3.1f\n", - values[0], values[1]); - - glEnable (GL_LINE_SMOOTH); - glEnable (GL_BLEND); - glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glHint (GL_LINE_SMOOTH_HINT, GL_DONT_CARE); - glLineWidth (1.5); - - glClearColor(0.0, 0.0, 0.0, 0.0); -} - -/* Draw 2 diagonal lines to form an X - */ -void display(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - - glColor3f (0.0, 1.0, 0.0); - glPushMatrix(); - glRotatef(-rotAngle, 0.0, 0.0, 0.1); - glBegin (GL_LINES); - glVertex2f (-0.5, 0.5); - glVertex2f (0.5, -0.5); - glEnd (); - glPopMatrix(); - - glColor3f (0.0, 0.0, 1.0); - glPushMatrix(); - glRotatef(rotAngle, 0.0, 0.0, 0.1); - glBegin (GL_LINES); - glVertex2f (0.5, 0.5); - glVertex2f (-0.5, -0.5); - glEnd (); - glPopMatrix(); - - glFlush(); -} - -void reshape(int w, int h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - if (w <= h) - gluOrtho2D (-1.0, 1.0, - -1.0*(GLfloat)h/(GLfloat)w, 1.0*(GLfloat)h/(GLfloat)w); - else - gluOrtho2D (-1.0*(GLfloat)w/(GLfloat)h, - 1.0*(GLfloat)w/(GLfloat)h, -1.0, 1.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -/* ARGSUSED1 */ -void keyboard(unsigned char key, int x, int y) -{ - switch (key) { - case 'r': - case 'R': - rotAngle += 20.; - if (rotAngle >= 360.) rotAngle = 0.; - glutPostRedisplay(); - break; - case 27: /* Escape Key */ - exit(0); - break; - default: - break; - } -} - -/* Main Loop - * Open window with initial window size, title bar, - * RGBA display mode, and handle input events. - */ -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); - glutInitWindowSize (200, 200); - glutCreateWindow (argv[0]); - init(); - glutReshapeFunc (reshape); - glutKeyboardFunc (keyboard); - glutDisplayFunc (display); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/redbook/aargb.dsp b/lib/glut-3.7.6/progs/redbook/aargb.dsp deleted file mode 100644 index 041a5ba78..000000000 --- a/lib/glut-3.7.6/progs/redbook/aargb.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="aargb" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=aargb - 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 "aargb.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 "aargb.mak" CFG="aargb - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "aargb - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "aargb - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "aargb - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "aargb - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "aargb - Win32 Release" -# Name "aargb - Win32 Debug" -# Begin Source File - -SOURCE=.\aargb.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/accanti.c b/lib/glut-3.7.6/progs/redbook/accanti.c deleted file mode 100644 index d45cf9e64..000000000 --- a/lib/glut-3.7.6/progs/redbook/accanti.c +++ /dev/null @@ -1,168 +0,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. - */ -/* accanti.c - */ -#include -#include -#include "jitter.h" - -/* Initialize lighting and other values. - */ -void myinit(void) -{ - GLfloat mat_ambient[] = { 1.0, 1.0, 1.0, 1.0 }; - GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; - GLfloat light_position[] = { 0.0, 0.0, 10.0, 1.0 }; - GLfloat lm_ambient[] = { 0.2, 0.2, 0.2, 1.0 }; - - glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); - glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); - glMaterialf(GL_FRONT, GL_SHININESS, 50.0); - glLightfv(GL_LIGHT0, GL_POSITION, light_position); - glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lm_ambient); - - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glDepthFunc(GL_LESS); - glEnable(GL_DEPTH_TEST); - glShadeModel (GL_FLAT); - - glClearColor(0.0, 0.0, 0.0, 0.0); - glClearAccum(0.0, 0.0, 0.0, 0.0); -} - -void displayObjects(void) -{ - GLfloat torus_diffuse[] = { 0.7, 0.7, 0.0, 1.0 }; - GLfloat cube_diffuse[] = { 0.0, 0.7, 0.7, 1.0 }; - GLfloat sphere_diffuse[] = { 0.7, 0.0, 0.7, 1.0 }; - GLfloat octa_diffuse[] = { 0.7, 0.4, 0.4, 1.0 }; - - glPushMatrix (); - glRotatef (30.0, 1.0, 0.0, 0.0); - - glPushMatrix (); - glTranslatef (-0.80, 0.35, 0.0); - glRotatef (100.0, 1.0, 0.0, 0.0); - glMaterialfv(GL_FRONT, GL_DIFFUSE, torus_diffuse); - glutSolidTorus (0.275, 0.85, 16, 16); - glPopMatrix (); - - glPushMatrix (); - glTranslatef (-0.75, -0.50, 0.0); - glRotatef (45.0, 0.0, 0.0, 1.0); - glRotatef (45.0, 1.0, 0.0, 0.0); - glMaterialfv(GL_FRONT, GL_DIFFUSE, cube_diffuse); - glutSolidCube (1.5); - glPopMatrix (); - - glPushMatrix (); - glTranslatef (0.75, 0.60, 0.0); - glRotatef (30.0, 1.0, 0.0, 0.0); - glMaterialfv(GL_FRONT, GL_DIFFUSE, sphere_diffuse); - glutSolidSphere (1.0, 16, 16); - glPopMatrix (); - - glPushMatrix (); - glTranslatef (0.70, -0.90, 0.25); - glMaterialfv(GL_FRONT, GL_DIFFUSE, octa_diffuse); - glutSolidOctahedron (); - glPopMatrix (); - - glPopMatrix (); -} - -#define ACSIZE 8 - -void display(void) -{ - GLint viewport[4]; - int jitter; - - glGetIntegerv (GL_VIEWPORT, viewport); - - glClear(GL_ACCUM_BUFFER_BIT); - for (jitter = 0; jitter < ACSIZE; jitter++) { - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glPushMatrix (); -/* Note that 4.5 is the distance in world space between - * left and right and bottom and top. - * This formula converts fractional pixel movement to - * world coordinates. - */ - glTranslatef (j8[jitter].x*4.5/viewport[2], - j8[jitter].y*4.5/viewport[3], 0.0); - displayObjects (); - glPopMatrix (); - glAccum(GL_ACCUM, 1.0/ACSIZE); - } - glAccum (GL_RETURN, 1.0); - glFlush(); -} - -void myReshape(int w, int h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - if (w <= h) - glOrtho (-2.25, 2.25, -2.25*h/w, 2.25*h/w, -10.0, 10.0); - else - glOrtho (-2.25*w/h, 2.25*w/h, -2.25, 2.25, -10.0, 10.0); - glMatrixMode(GL_MODELVIEW); -} - -/* Main Loop - * Open window with initial window size, title bar, - * RGBA display mode, and handle input events. - */ -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB - | GLUT_ACCUM | GLUT_DEPTH); - glutInitWindowSize (250, 250); - glutCreateWindow (argv[0]); - myinit(); - glutReshapeFunc (myReshape); - glutDisplayFunc(display); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/redbook/accanti.dsp b/lib/glut-3.7.6/progs/redbook/accanti.dsp deleted file mode 100644 index 931b23b2c..000000000 --- a/lib/glut-3.7.6/progs/redbook/accanti.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="accanti" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=accanti - 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 "accanti.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 "accanti.mak" CFG="accanti - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "accanti - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "accanti - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "accanti - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "accanti - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "accanti - Win32 Release" -# Name "accanti - Win32 Debug" -# Begin Source File - -SOURCE=.\accanti.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/accpersp.c b/lib/glut-3.7.6/progs/redbook/accpersp.c deleted file mode 100644 index 46e369ae6..000000000 --- a/lib/glut-3.7.6/progs/redbook/accpersp.c +++ /dev/null @@ -1,240 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -/* accpersp.c - * Use the accumulation buffer to do full-scene antialiasing - * on a scene with perspective projection, using the special - * routines accFrustum() and accPerspective(). - */ -#include -#include -#include -#include "jitter.h" - -#define PI_ 3.14159265358979323846 - -/* accFrustum() - * The first 6 arguments are identical to the glFrustum() call. - * - * pixdx and pixdy are anti-alias jitter in pixels. - * Set both equal to 0.0 for no anti-alias jitter. - * eyedx and eyedy are depth-of field jitter in pixels. - * Set both equal to 0.0 for no depth of field effects. - * - * focus is distance from eye to plane in focus. - * focus must be greater than, but not equal to 0.0. - * - * Note that accFrustum() calls glTranslatef(). You will - * probably want to insure that your ModelView matrix has been - * initialized to identity before calling accFrustum(). - */ -void accFrustum(GLdouble left, GLdouble right, GLdouble bottom, - GLdouble top, GLdouble nnear, GLdouble ffar, GLdouble pixdx, - GLdouble pixdy, GLdouble eyedx, GLdouble eyedy, GLdouble focus) -{ - GLdouble xwsize, ywsize; - GLdouble dx, dy; - GLint viewport[4]; - - glGetIntegerv (GL_VIEWPORT, viewport); - - xwsize = right - left; - ywsize = top - bottom; - - dx = -(pixdx*xwsize/(GLdouble) viewport[2] + eyedx*nnear/focus); - dy = -(pixdy*ywsize/(GLdouble) viewport[3] + eyedy*nnear/focus); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glFrustum (left + dx, right + dx, bottom + dy, top + dy, nnear, ffar); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef (-eyedx, -eyedy, 0.0); -} - -/* accPerspective() - * - * The first 4 arguments are identical to the gluPerspective() call. - * pixdx and pixdy are anti-alias jitter in pixels. - * Set both equal to 0.0 for no anti-alias jitter. - * eyedx and eyedy are depth-of field jitter in pixels. - * Set both equal to 0.0 for no depth of field effects. - * - * focus is distance from eye to plane in focus. - * focus must be greater than, but not equal to 0.0. - * - * Note that accPerspective() calls accFrustum(). - */ -void accPerspective(GLdouble fovy, GLdouble aspect, - GLdouble nnear, GLdouble ffar, GLdouble pixdx, GLdouble pixdy, - GLdouble eyedx, GLdouble eyedy, GLdouble focus) -{ - GLdouble fov2,left,right,bottom,top; - - fov2 = ((fovy*PI_) / 180.0) / 2.0; - - top = nnear / (cos(fov2) / sin(fov2)); - bottom = -top; - - right = top * aspect; - left = -right; - - accFrustum (left, right, bottom, top, nnear, ffar, - pixdx, pixdy, eyedx, eyedy, focus); -} - -/* Initialize lighting and other values. - */ -void init(void) -{ - GLfloat mat_ambient[] = { 1.0, 1.0, 1.0, 1.0 }; - GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; - GLfloat light_position[] = { 0.0, 0.0, 10.0, 1.0 }; - GLfloat lm_ambient[] = { 0.2, 0.2, 0.2, 1.0 }; - - glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); - glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); - glMaterialf(GL_FRONT, GL_SHININESS, 50.0); - glLightfv(GL_LIGHT0, GL_POSITION, light_position); - glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lm_ambient); - - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_DEPTH_TEST); - glShadeModel (GL_FLAT); - - glClearColor(0.0, 0.0, 0.0, 0.0); - glClearAccum(0.0, 0.0, 0.0, 0.0); -} - -void displayObjects(void) -{ - GLfloat torus_diffuse[] = { 0.7, 0.7, 0.0, 1.0 }; - GLfloat cube_diffuse[] = { 0.0, 0.7, 0.7, 1.0 }; - GLfloat sphere_diffuse[] = { 0.7, 0.0, 0.7, 1.0 }; - GLfloat octa_diffuse[] = { 0.7, 0.4, 0.4, 1.0 }; - - glPushMatrix (); - glTranslatef (0.0, 0.0, -5.0); - glRotatef (30.0, 1.0, 0.0, 0.0); - - glPushMatrix (); - glTranslatef (-0.80, 0.35, 0.0); - glRotatef (100.0, 1.0, 0.0, 0.0); - glMaterialfv(GL_FRONT, GL_DIFFUSE, torus_diffuse); - glutSolidTorus (0.275, 0.85, 16, 16); - glPopMatrix (); - - glPushMatrix (); - glTranslatef (-0.75, -0.50, 0.0); - glRotatef (45.0, 0.0, 0.0, 1.0); - glRotatef (45.0, 1.0, 0.0, 0.0); - glMaterialfv(GL_FRONT, GL_DIFFUSE, cube_diffuse); - glutSolidCube (1.5); - glPopMatrix (); - - glPushMatrix (); - glTranslatef (0.75, 0.60, 0.0); - glRotatef (30.0, 1.0, 0.0, 0.0); - glMaterialfv(GL_FRONT, GL_DIFFUSE, sphere_diffuse); - glutSolidSphere (1.0, 16, 16); - glPopMatrix (); - - glPushMatrix (); - glTranslatef (0.70, -0.90, 0.25); - glMaterialfv(GL_FRONT, GL_DIFFUSE, octa_diffuse); - glutSolidOctahedron (); - glPopMatrix (); - - glPopMatrix (); -} - -#define ACSIZE 8 - -void display(void) -{ - GLint viewport[4]; - int jitter; - - glGetIntegerv (GL_VIEWPORT, viewport); - - glClear(GL_ACCUM_BUFFER_BIT); - for (jitter = 0; jitter < ACSIZE; jitter++) { - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - accPerspective (50.0, - (GLdouble) viewport[2]/(GLdouble) viewport[3], - 1.0, 15.0, j8[jitter].x, j8[jitter].y, 0.0, 0.0, 1.0); - displayObjects (); - glAccum(GL_ACCUM, 1.0/ACSIZE); - } - glAccum (GL_RETURN, 1.0); - glFlush(); -} - -void reshape(int w, int h) -{ - glViewport(0, 0, (GLsizei) w, (GLsizei) h); -} - -/* ARGSUSED1 */ -void keyboard(unsigned char key, int x, int y) -{ - switch (key) { - case 27: - exit(0); - break; - } -} - -/* Main Loop - * Be certain you request an accumulation buffer. - */ -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB - | GLUT_ACCUM | GLUT_DEPTH); - glutInitWindowSize (250, 250); - glutInitWindowPosition (100, 100); - glutCreateWindow (argv[0]); - init(); - glutReshapeFunc(reshape); - glutDisplayFunc(display); - glutKeyboardFunc(keyboard); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/redbook/accpersp.dsp b/lib/glut-3.7.6/progs/redbook/accpersp.dsp deleted file mode 100644 index 68d71b0fc..000000000 --- a/lib/glut-3.7.6/progs/redbook/accpersp.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="accpersp" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=accpersp - 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 "accpersp.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 "accpersp.mak" CFG="accpersp - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "accpersp - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "accpersp - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "accpersp - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "accpersp - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "accpersp - Win32 Release" -# Name "accpersp - Win32 Debug" -# Begin Source File - -SOURCE=.\accpersp.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/alpha.c b/lib/glut-3.7.6/progs/redbook/alpha.c deleted file mode 100644 index 6eeb45b96..000000000 --- a/lib/glut-3.7.6/progs/redbook/alpha.c +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -/* - * alpha.c - * This program draws several overlapping filled polygons - * to demonstrate the effect order has on alpha blending results. - * Use the 't' key to toggle the order of drawing polygons. - */ -#include -#include - -static int leftFirst = GL_TRUE; - -/* Initialize alpha blending function. - */ -static void init(void) -{ - glEnable (GL_BLEND); - glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glShadeModel (GL_FLAT); - glClearColor (0.0, 0.0, 0.0, 0.0); -} - -static void drawLeftTriangle(void) -{ - /* draw yellow triangle on LHS of screen */ - - glBegin (GL_TRIANGLES); - glColor4f(1.0, 1.0, 0.0, 0.75); - glVertex3f(0.1, 0.9, 0.0); - glVertex3f(0.1, 0.1, 0.0); - glVertex3f(0.7, 0.5, 0.0); - glEnd(); -} - -static void drawRightTriangle(void) -{ - /* draw cyan triangle on RHS of screen */ - - glBegin (GL_TRIANGLES); - glColor4f(0.0, 1.0, 1.0, 0.75); - glVertex3f(0.9, 0.9, 0.0); - glVertex3f(0.3, 0.5, 0.0); - glVertex3f(0.9, 0.1, 0.0); - glEnd(); -} - -void display(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - - if (leftFirst) { - drawLeftTriangle(); - drawRightTriangle(); - } - else { - drawRightTriangle(); - drawLeftTriangle(); - } - - glFlush(); -} - -void reshape(int w, int h) -{ - glViewport(0, 0, (GLsizei) w, (GLsizei) h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - if (w <= h) - gluOrtho2D (0.0, 1.0, 0.0, 1.0*(GLfloat)h/(GLfloat)w); - else - gluOrtho2D (0.0, 1.0*(GLfloat)w/(GLfloat)h, 0.0, 1.0); -} - -/* ARGSUSED1 */ -void keyboard(unsigned char key, int x, int y) -{ - switch (key) { - case 't': - case 'T': - leftFirst = !leftFirst; - glutPostRedisplay(); - break; - case 27: /* Escape key */ - exit(0); - break; - default: - break; - } -} - -/* Main Loop - * Open window with initial window size, title bar, - * RGBA display mode, and handle input events. - */ -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); - glutInitWindowSize (200, 200); - glutCreateWindow (argv[0]); - init(); - glutReshapeFunc (reshape); - glutKeyboardFunc (keyboard); - glutDisplayFunc (display); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/redbook/alpha.dsp b/lib/glut-3.7.6/progs/redbook/alpha.dsp deleted file mode 100644 index cc8f58aa4..000000000 --- a/lib/glut-3.7.6/progs/redbook/alpha.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="alpha" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=alpha - 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 "alpha.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 "alpha.mak" CFG="alpha - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "alpha - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "alpha - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "alpha - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "alpha - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "alpha - Win32 Release" -# Name "alpha - Win32 Debug" -# Begin Source File - -SOURCE=.\alpha.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/alpha3D.c b/lib/glut-3.7.6/progs/redbook/alpha3D.c deleted file mode 100644 index 7493b2d29..000000000 --- a/lib/glut-3.7.6/progs/redbook/alpha3D.c +++ /dev/null @@ -1,175 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -/* - * alpha3D.c - * This program demonstrates how to intermix opaque and - * alpha blended polygons in the same scene, by using - * glDepthMask. Press the 'a' key to animate moving the - * transparent object through the opaque object. Press - * the 'r' key to reset the scene. - */ -#include -#include -#include - -#define MAXZ 8.0 -#define MINZ -8.0 -#define ZINC 0.4 - -static float solidZ = MAXZ; -static float transparentZ = MINZ; -static GLuint sphereList, cubeList; - -static void init(void) -{ - GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 0.15 }; - GLfloat mat_shininess[] = { 100.0 }; - GLfloat position[] = { 0.5, 0.5, 1.0, 0.0 }; - - glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); - glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); - glLightfv(GL_LIGHT0, GL_POSITION, position); - - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_DEPTH_TEST); - - sphereList = glGenLists(1); - glNewList(sphereList, GL_COMPILE); - glutSolidSphere (0.4, 16, 16); - glEndList(); - - cubeList = glGenLists(1); - glNewList(cubeList, GL_COMPILE); - glutSolidCube (0.6); - glEndList(); -} - -void display(void) -{ - GLfloat mat_solid[] = { 0.75, 0.75, 0.0, 1.0 }; - GLfloat mat_zero[] = { 0.0, 0.0, 0.0, 1.0 }; - GLfloat mat_transparent[] = { 0.0, 0.8, 0.8, 0.6 }; - GLfloat mat_emission[] = { 0.0, 0.3, 0.3, 0.6 }; - - glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glPushMatrix (); - glTranslatef (-0.15, -0.15, solidZ); - glMaterialfv(GL_FRONT, GL_EMISSION, mat_zero); - glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_solid); - glCallList (sphereList); - glPopMatrix (); - - glPushMatrix (); - glTranslatef (0.15, 0.15, transparentZ); - glRotatef (15.0, 1.0, 1.0, 0.0); - glRotatef (30.0, 0.0, 1.0, 0.0); - glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission); - glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_transparent); - glEnable (GL_BLEND); - glDepthMask (GL_FALSE); - glBlendFunc (GL_SRC_ALPHA, GL_ONE); - glCallList (cubeList); - glDepthMask (GL_TRUE); - glDisable (GL_BLEND); - glPopMatrix (); - - glFlush(); -} - -void reshape(int w, int h) -{ - glViewport(0, 0, (GLint) w, (GLint) h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - if (w <= h) - glOrtho (-1.5, 1.5, -1.5*(GLfloat)h/(GLfloat)w, - 1.5*(GLfloat)h/(GLfloat)w, -10.0, 10.0); - else - glOrtho (-1.5*(GLfloat)w/(GLfloat)h, - 1.5*(GLfloat)w/(GLfloat)h, -1.5, 1.5, -10.0, 10.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -void animate(void) -{ - if (solidZ <= MINZ || transparentZ >= MAXZ) - glutIdleFunc(NULL); - else { - solidZ -= ZINC; - transparentZ += ZINC; - glutPostRedisplay(); - } -} - -/* ARGSUSED1 */ -void keyboard(unsigned char key, int x, int y) -{ - switch (key) { - case 'a': - case 'A': - solidZ = MAXZ; - transparentZ = MINZ; - glutIdleFunc(animate); - break; - case 'r': - case 'R': - solidZ = MAXZ; - transparentZ = MINZ; - glutPostRedisplay(); - break; - case 27: - exit(0); - } -} - -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); - glutInitWindowSize(500, 500); - glutCreateWindow(argv[0]); - init(); - glutReshapeFunc(reshape); - glutKeyboardFunc(keyboard); - glutDisplayFunc(display); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/redbook/alpha3D.dsp b/lib/glut-3.7.6/progs/redbook/alpha3D.dsp deleted file mode 100644 index 5ca2d7686..000000000 --- a/lib/glut-3.7.6/progs/redbook/alpha3D.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="alpha3D" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=alpha3D - 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 "alpha3D.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 "alpha3D.mak" CFG="alpha3D - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "alpha3D - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "alpha3D - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "alpha3D - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "alpha3D - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "alpha3D - Win32 Release" -# Name "alpha3D - Win32 Debug" -# Begin Source File - -SOURCE=.\alpha3D.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/anti.c b/lib/glut-3.7.6/progs/redbook/anti.c deleted file mode 100644 index 12aa5f8a2..000000000 --- a/lib/glut-3.7.6/progs/redbook/anti.c +++ /dev/null @@ -1,111 +0,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. - */ -/* - * anti.c - * This program draws antialiased lines in RGBA mode. - */ -#include -#include -#include - -/* Initialize antialiasing for RGBA mode, including alpha - * blending, hint, and line width. Print out implementation - * specific info on line width granularity and width. - */ -void myinit(void) -{ - GLfloat values[2]; - glGetFloatv (GL_LINE_WIDTH_GRANULARITY, values); - printf ("GL_LINE_WIDTH_GRANULARITY value is %3.1f\n", values[0]); - - glGetFloatv (GL_LINE_WIDTH_RANGE, values); - printf ("GL_LINE_WIDTH_RANGE values are %3.1f %3.1f\n", - values[0], values[1]); - - glEnable (GL_LINE_SMOOTH); - glEnable (GL_BLEND); - glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glHint (GL_LINE_SMOOTH_HINT, GL_DONT_CARE); - glLineWidth (1.5); - - glShadeModel(GL_FLAT); - glClearColor(0.0, 0.0, 0.0, 0.0); - glDepthFunc(GL_LESS); - glEnable(GL_DEPTH_TEST); -} - -/* display() draws an icosahedron with a large alpha value, 1.0. - */ -void display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glColor4f (1.0, 1.0, 1.0, 1.0); - glutWireIcosahedron(); - glFlush(); -} - -void myReshape(int w, int h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective (45.0, (GLfloat) w/(GLfloat) h, 3.0, 5.0); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity (); - glTranslatef (0.0, 0.0, -4.0); /* move object into view */ -} - -/* Main Loop - * Open window with initial window size, title bar, - * RGBA display mode, and handle input events. - */ -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); - glutCreateWindow (argv[0]); - myinit(); - glutReshapeFunc (myReshape); - glutDisplayFunc(display); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} - diff --git a/lib/glut-3.7.6/progs/redbook/anti.dsp b/lib/glut-3.7.6/progs/redbook/anti.dsp deleted file mode 100644 index 301321c82..000000000 --- a/lib/glut-3.7.6/progs/redbook/anti.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="anti" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=anti - 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 "anti.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 "anti.mak" CFG="anti - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "anti - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "anti - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "anti - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "anti - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "anti - Win32 Release" -# Name "anti - Win32 Debug" -# Begin Source File - -SOURCE=.\anti.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/aux2glut.sed b/lib/glut-3.7.6/progs/redbook/aux2glut.sed deleted file mode 100644 index 869ca713d..000000000 --- a/lib/glut-3.7.6/progs/redbook/aux2glut.sed +++ /dev/null @@ -1,55 +0,0 @@ -# -# aux2glut.sed - a sed script for converting AUX code to GLUT -# -# You will still need to do some work, but this is a good start. -# -1i\ -/* aux2glut conversion Copyright (c) Mark J. Kilgard, 1994, 1995 */ -1i\ - -s/int main/void main/g -s/auxInitWindow/glutCreateWindow/g -s/AUX_SINGLE/GLUT_SINGLE/g -s/AUX_DOUBLE/GLUT_DOUBLE/g -s/AUX_RGB/GLUT_RGB/g -s/AUX_RGBA/GLUT_RGBA/g -s/AUX_ACCUM/GLUT_ACCUM/g -s/AUX_DEPTH/GLUT_DEPTH/g -s/AUX_STENCIL/GLUT_STENCIL/g -s/AUX_ALPHA/GLUT_ALPHA/g -s/AUX_MOUSEDOWN/GLUT_DOWN/g -s/AUX_MOUSEUP/GLUT_UP/g -s/AUX_LEFTBUTTON/GLUT_LEFT_BUTTON/g -s/AUX_MIDDLEBUTTON/GLUT_MIDDLE_BUTTON/g -s/AUX_RIGHTBUTTON/GLUT_RIGHT_BUTTON/g -s/(.*AUX_EVENTREC.*)/( int x, int y )/g -s/auxReshapeFunc/glutReshapeFunc/g -s/#include \"aux.h\"/#include /g -s/#include[ ]*\/#include /g -s/\(initialize.*$\)/glutInit(\&argc, argv); \1/g -s/auxInitDisplayMode/glutInitDisplayMode/g -s/auxMainLoop(display)/glutDisplayFunc(display); glutMainLoop()/g -s/auxMainLoop[ ]*([ ]*drawScene[ ]*)/glutDisplayFunc(drawScene); glutMainLoop()/g -s/auxAnimation.*$/glutIdleFunc(drawScene);/g -s/auxGetScreenSize.*$/width = glutGet(GLUT_SCREEN_WIDTH); height = glutGet(GLUT_SCREEN_HEIGHT);/g -s/auxGetSize.*$/width = glutGet(GLUT_WINDOW_WIDTH); height = glutGet(GLUT_WINDOW_HEIGHT);/g -s/auxInitPosition(\(.*\),\(.*\),\(.*\),\(.*\));/glutInitWindowPosition(\1,\2); glutInitWindowSize(\3,\4);/g -s/auxSwapBuffers/glutSwapBuffers/g -s/auxWireIcosahedron/glutWireIcosahedron/g -s/auxSolidIcosahedron/glutSolidIcosahedron/g -s/auxSolidTorus/glutSolidTorus/g -s/auxWireTorus/glutWireTorus/g -s/auxSolidCube/glutSolidCube/g -s/auxWireCube/glutWireCube/g -s/auxSolidSphere/glutSolidSphere/g -s/auxWireSphere/glutWireSphere/g -s/auxSolidCone/glutSolidCone/g -s/auxWireCone/glutWireCone/g -s/auxSolidOctahedron/glutSolidOctahedron/g -s/auxWireOctahedron/glutWireOctahedron/g -s/auxSolidTeapot/glutSoliddTeapot/g -s/auxWireTeapot/glutWireTeapot/g -s/auxKeyFunc(.*,/glutKeyboardFunc(/g -s/auxMouseFunc(.*AUX_MOUSELOC,.*NULL,/glutMouseMotion(/g -s/auxMouseFunc/glutMouseFunc/g -s/auxDeleteMouseFunc( .*$/glutMouseMotion( NULL );/g diff --git a/lib/glut-3.7.6/progs/redbook/bezcurve.c b/lib/glut-3.7.6/progs/redbook/bezcurve.c deleted file mode 100644 index 5dee44039..000000000 --- a/lib/glut-3.7.6/progs/redbook/bezcurve.c +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -/* bezcurve.c - * This program uses evaluators to draw a Bezier curve. - */ -#include -#include - -GLfloat ctrlpoints[4][3] = { - { -4.0, -4.0, 0.0}, { -2.0, 4.0, 0.0}, - {2.0, -4.0, 0.0}, {4.0, 4.0, 0.0}}; - -void init(void) -{ - glClearColor(0.0, 0.0, 0.0, 0.0); - glShadeModel(GL_FLAT); - glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, &ctrlpoints[0][0]); - glEnable(GL_MAP1_VERTEX_3); -} - -void display(void) -{ - int i; - - glClear(GL_COLOR_BUFFER_BIT); - glColor3f(1.0, 1.0, 1.0); - glBegin(GL_LINE_STRIP); - for (i = 0; i <= 30; i++) - glEvalCoord1f((GLfloat) i/30.0); - glEnd(); - /* The following code displays the control points as dots. */ - glPointSize(5.0); - glColor3f(1.0, 1.0, 0.0); - glBegin(GL_POINTS); - for (i = 0; i < 4; i++) - glVertex3fv(&ctrlpoints[i][0]); - glEnd(); - glFlush(); -} - -void reshape(int w, int h) -{ - glViewport(0, 0, (GLsizei) w, (GLsizei) h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - if (w <= h) - glOrtho(-5.0, 5.0, -5.0*(GLfloat)h/(GLfloat)w, - 5.0*(GLfloat)h/(GLfloat)w, -5.0, 5.0); - else - glOrtho(-5.0*(GLfloat)w/(GLfloat)h, - 5.0*(GLfloat)w/(GLfloat)h, -5.0, 5.0, -5.0, 5.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -/* ARGSUSED1 */ -void keyboard(unsigned char key, int x, int y) -{ - switch (key) { - case 27: - exit(0); - break; - } -} - -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); - glutInitWindowSize (500, 500); - glutInitWindowPosition (100, 100); - glutCreateWindow (argv[0]); - init (); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glutKeyboardFunc (keyboard); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/redbook/bezcurve.dsp b/lib/glut-3.7.6/progs/redbook/bezcurve.dsp deleted file mode 100644 index 7a92bcdc5..000000000 --- a/lib/glut-3.7.6/progs/redbook/bezcurve.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="bezcurve" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=bezcurve - 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 "bezcurve.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 "bezcurve.mak" CFG="bezcurve - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "bezcurve - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "bezcurve - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "bezcurve - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "bezcurve - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "bezcurve - Win32 Release" -# Name "bezcurve - Win32 Debug" -# Begin Source File - -SOURCE=.\bezcurve.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/bezmesh.c b/lib/glut-3.7.6/progs/redbook/bezmesh.c deleted file mode 100644 index eb7f0f7a8..000000000 --- a/lib/glut-3.7.6/progs/redbook/bezmesh.c +++ /dev/null @@ -1,148 +0,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. - */ -/* bezsurf.c - * This program renders a lighted, filled Bezier surface, - * using two-dimensional evaluators. - */ -#include -#include - -GLfloat ctrlpoints[4][4][3] = -{ - { - {-1.5, -1.5, 4.0}, - {-0.5, -1.5, 2.0}, - {0.5, -1.5, -1.0}, - {1.5, -1.5, 2.0}}, - { - {-1.5, -0.5, 1.0}, - {-0.5, -0.5, 3.0}, - {0.5, -0.5, 0.0}, - {1.5, -0.5, -1.0}}, - { - {-1.5, 0.5, 4.0}, - {-0.5, 0.5, 0.0}, - {0.5, 0.5, 3.0}, - {1.5, 0.5, 4.0}}, - { - {-1.5, 1.5, -2.0}, - {-0.5, 1.5, -2.0}, - {0.5, 1.5, 0.0}, - {1.5, 1.5, -1.0}} -}; - -void -initlights(void) -{ - GLfloat ambient[] = - {0.2, 0.2, 0.2, 1.0}; - GLfloat position[] = - {0.0, 0.0, 2.0, 1.0}; - GLfloat mat_diffuse[] = - {0.6, 0.6, 0.6, 1.0}; - GLfloat mat_specular[] = - {1.0, 1.0, 1.0, 1.0}; - GLfloat mat_shininess[] = - {50.0}; - - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - - glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); - glLightfv(GL_LIGHT0, GL_POSITION, position); - - glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); - glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); - glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); -} - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glPushMatrix(); - glRotatef(85.0, 1.0, 1.0, 1.0); - glEvalMesh2(GL_FILL, 0, 20, 0, 20); - glPopMatrix(); - glFlush(); -} - -void -myinit(void) -{ - glClearColor(0.0, 0.0, 0.0, 1.0); - glEnable(GL_DEPTH_TEST); - glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, - 0, 1, 12, 4, &ctrlpoints[0][0][0]); - glEnable(GL_MAP2_VERTEX_3); - glEnable(GL_AUTO_NORMAL); - glEnable(GL_NORMALIZE); - glMapGrid2f(20, 0.0, 1.0, 20, 0.0, 1.0); - initlights(); /* for lighted version only */ -} - -void -myReshape(int w, int h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - if (w <= h) - glOrtho(-4.0, 4.0, -4.0 * (GLfloat) h / (GLfloat) w, - 4.0 * (GLfloat) h / (GLfloat) w, -4.0, 4.0); - else - glOrtho(-4.0 * (GLfloat) w / (GLfloat) h, - 4.0 * (GLfloat) w / (GLfloat) h, -4.0, 4.0, -4.0, 4.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); - glutCreateWindow(argv[0]); - myinit(); - glutReshapeFunc(myReshape); - glutDisplayFunc(display); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/redbook/bezmesh.dsp b/lib/glut-3.7.6/progs/redbook/bezmesh.dsp deleted file mode 100644 index 4eec98306..000000000 --- a/lib/glut-3.7.6/progs/redbook/bezmesh.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="bezmesh" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=bezmesh - 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 "bezmesh.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 "bezmesh.mak" CFG="bezmesh - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "bezmesh - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "bezmesh - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "bezmesh - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "bezmesh - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "bezmesh - Win32 Release" -# Name "bezmesh - Win32 Debug" -# Begin Source File - -SOURCE=.\bezmesh.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/checker.c b/lib/glut-3.7.6/progs/redbook/checker.c deleted file mode 100644 index d1eaa7f15..000000000 --- a/lib/glut-3.7.6/progs/redbook/checker.c +++ /dev/null @@ -1,125 +0,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. - */ -/* checker.c - * This program texture maps a checkerboard image onto - * two rectangles. This program clamps the texture, if - * the texture coordinates fall outside 0.0 and 1.0. - */ -#include - -/* Create checkerboard texture */ -#define checkImageWidth 64 -#define checkImageHeight 64 -GLubyte checkImage[checkImageWidth][checkImageHeight][3]; - -void makeCheckImage(void) -{ - int i, j, c; - - for (i = 0; i < checkImageWidth; i++) { - for (j = 0; j < checkImageHeight; j++) { - c = ((((i&0x8)==0)^((j&0x8)==0)))*255; - checkImage[i][j][0] = (GLubyte) c; - checkImage[i][j][1] = (GLubyte) c; - checkImage[i][j][2] = (GLubyte) c; - } - } -} - -void myinit(void) -{ - glClearColor (0.0, 0.0, 0.0, 0.0); - glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_LESS); - - makeCheckImage(); - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - glTexImage2D(GL_TEXTURE_2D, 0, 3, checkImageWidth, - checkImageHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, - &checkImage[0][0][0]); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); - glEnable(GL_TEXTURE_2D); - glShadeModel(GL_FLAT); -} - -void display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glBegin(GL_QUADS); - glTexCoord2f(0.0, 0.0); glVertex3f(-2.0, -1.0, 0.0); - glTexCoord2f(0.0, 1.0); glVertex3f(-2.0, 1.0, 0.0); - glTexCoord2f(1.0, 1.0); glVertex3f(0.0, 1.0, 0.0); - glTexCoord2f(1.0, 0.0); glVertex3f(0.0, -1.0, 0.0); - - glTexCoord2f(0.0, 0.0); glVertex3f(1.0, -1.0, 0.0); - glTexCoord2f(0.0, 1.0); glVertex3f(1.0, 1.0, 0.0); - glTexCoord2f(1.0, 1.0); glVertex3f(2.41421, 1.0, -1.41421); - glTexCoord2f(1.0, 0.0); glVertex3f(2.41421, -1.0, -1.41421); - glEnd(); - glutSwapBuffers(); -} - -void myReshape(int w, int h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(60.0, 1.0*(GLfloat)w/(GLfloat)h, 1.0, 30.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(0.0, 0.0, -3.6); -} - -int -main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); - glutCreateWindow("checker"); - myinit(); - glutReshapeFunc (myReshape); - glutDisplayFunc(display); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/redbook/checker.dsp b/lib/glut-3.7.6/progs/redbook/checker.dsp deleted file mode 100644 index 7fd21c938..000000000 --- a/lib/glut-3.7.6/progs/redbook/checker.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="checker" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=checker - 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 "checker.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 "checker.mak" CFG="checker - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "checker - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "checker - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "checker - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "checker - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "checker - Win32 Release" -# Name "checker - Win32 Debug" -# Begin Source File - -SOURCE=.\checker.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/clip.c b/lib/glut-3.7.6/progs/redbook/clip.c deleted file mode 100644 index 90816f2e2..000000000 --- a/lib/glut-3.7.6/progs/redbook/clip.c +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -/* - * clip.c - * This program demonstrates arbitrary clipping planes. - */ -#include -#include - -void init(void) -{ - glClearColor (0.0, 0.0, 0.0, 0.0); - glShadeModel (GL_FLAT); -} - -void display(void) -{ - GLdouble eqn[4] = {0.0, 1.0, 0.0, 0.0}; - GLdouble eqn2[4] = {1.0, 0.0, 0.0, 0.0}; - - glClear(GL_COLOR_BUFFER_BIT); - - glColor3f (1.0, 1.0, 1.0); - glPushMatrix(); - glTranslatef (0.0, 0.0, -5.0); - -/* clip lower half -- y < 0 */ - glClipPlane (GL_CLIP_PLANE0, eqn); - glEnable (GL_CLIP_PLANE0); -/* clip left half -- x < 0 */ - glClipPlane (GL_CLIP_PLANE1, eqn2); - glEnable (GL_CLIP_PLANE1); - - glRotatef (90.0, 1.0, 0.0, 0.0); - glutWireSphere(1.0, 20, 16); - glPopMatrix(); - - glFlush (); -} - -void reshape (int w, int h) -{ - glViewport (0, 0, (GLsizei) w, (GLsizei) h); - glMatrixMode (GL_PROJECTION); - glLoadIdentity (); - gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0); - glMatrixMode (GL_MODELVIEW); -} - -/* ARGSUSED1 */ -void keyboard(unsigned char key, int x, int y) -{ - switch (key) { - case 27: - exit(0); - break; - } -} - -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); - glutInitWindowSize (500, 500); - glutInitWindowPosition (100, 100); - glutCreateWindow (argv[0]); - init (); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glutKeyboardFunc(keyboard); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/redbook/clip.dsp b/lib/glut-3.7.6/progs/redbook/clip.dsp deleted file mode 100644 index 20e060009..000000000 --- a/lib/glut-3.7.6/progs/redbook/clip.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="clip" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=clip - 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 "clip.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 "clip.mak" CFG="clip - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "clip - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "clip - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "clip - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "clip - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "clip - Win32 Release" -# Name "clip - Win32 Debug" -# Begin Source File - -SOURCE=.\clip.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/colormat.c b/lib/glut-3.7.6/progs/redbook/colormat.c deleted file mode 100644 index 9db4491ba..000000000 --- a/lib/glut-3.7.6/progs/redbook/colormat.c +++ /dev/null @@ -1,153 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -/* - * colormat.c - * After initialization, the program will be in - * ColorMaterial mode. Interaction: pressing the - * mouse buttons will change the diffuse reflection values. - */ -#include -#include - -GLfloat diffuseMaterial[4] = { 0.5, 0.5, 0.5, 1.0 }; - -/* Initialize material property, light source, lighting model, - * and depth buffer. - */ -void init(void) -{ - GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; - GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 }; - - glClearColor (0.0, 0.0, 0.0, 0.0); - glShadeModel (GL_SMOOTH); - glEnable(GL_DEPTH_TEST); - glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuseMaterial); - glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); - glMaterialf(GL_FRONT, GL_SHININESS, 25.0); - glLightfv(GL_LIGHT0, GL_POSITION, light_position); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - - glColorMaterial(GL_FRONT, GL_DIFFUSE); - glEnable(GL_COLOR_MATERIAL); -} - -void display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glutSolidSphere(1.0, 20, 16); - glFlush (); -} - -void reshape (int w, int h) -{ - glViewport (0, 0, (GLsizei) w, (GLsizei) h); - glMatrixMode (GL_PROJECTION); - glLoadIdentity(); - if (w <= h) - glOrtho (-1.5, 1.5, -1.5*(GLfloat)h/(GLfloat)w, - 1.5*(GLfloat)h/(GLfloat)w, -10.0, 10.0); - else - glOrtho (-1.5*(GLfloat)w/(GLfloat)h, - 1.5*(GLfloat)w/(GLfloat)h, -1.5, 1.5, -10.0, 10.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -/* ARGSUSED2 */ -void mouse(int button, int state, int x, int y) -{ - switch (button) { - case GLUT_LEFT_BUTTON: - if (state == GLUT_DOWN) { - diffuseMaterial[0] += 0.1; - if (diffuseMaterial[0] > 1.0) - diffuseMaterial[0] = 0.0; - glColor4fv(diffuseMaterial); - glutPostRedisplay(); - } - break; - case GLUT_MIDDLE_BUTTON: - if (state == GLUT_DOWN) { - diffuseMaterial[1] += 0.1; - if (diffuseMaterial[1] > 1.0) - diffuseMaterial[1] = 0.0; - glColor4fv(diffuseMaterial); - glutPostRedisplay(); - } - break; - case GLUT_RIGHT_BUTTON: - if (state == GLUT_DOWN) { - diffuseMaterial[2] += 0.1; - if (diffuseMaterial[2] > 1.0) - diffuseMaterial[2] = 0.0; - glColor4fv(diffuseMaterial); - glutPostRedisplay(); - } - break; - default: - break; - } -} - -/* ARGSUSED1 */ -void keyboard(unsigned char key, int x, int y) -{ - switch (key) { - case 27: - exit(0); - break; - } -} - -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); - glutInitWindowSize (500, 500); - glutInitWindowPosition (100, 100); - glutCreateWindow (argv[0]); - init (); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glutMouseFunc(mouse); - glutKeyboardFunc(keyboard); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/redbook/colormat.dsp b/lib/glut-3.7.6/progs/redbook/colormat.dsp deleted file mode 100644 index 1b35c083b..000000000 --- a/lib/glut-3.7.6/progs/redbook/colormat.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="colormat" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=colormat - 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 "colormat.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 "colormat.mak" CFG="colormat - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "colormat - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "colormat - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "colormat - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "colormat - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "colormat - Win32 Release" -# Name "colormat - Win32 Debug" -# Begin Source File - -SOURCE=.\colormat.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/cube.c b/lib/glut-3.7.6/progs/redbook/cube.c deleted file mode 100644 index 5ecc6280f..000000000 --- a/lib/glut-3.7.6/progs/redbook/cube.c +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -/* - * cube.c - * This program demonstrates a single modeling transformation, - * glScalef() and a single viewing transformation, gluLookAt(). - * A wireframe cube is rendered. - */ -#include -#include - -void init(void) -{ - glClearColor (0.0, 0.0, 0.0, 0.0); - glShadeModel (GL_FLAT); -} - -void display(void) -{ - glClear (GL_COLOR_BUFFER_BIT); - glColor3f (1.0, 1.0, 1.0); - glLoadIdentity (); /* clear the matrix */ - /* viewing transformation */ - gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); - glScalef (1.0, 2.0, 1.0); /* modeling transformation */ - glutWireCube (1.0); - glFlush (); -} - -void reshape (int w, int h) -{ - glViewport (0, 0, (GLsizei) w, (GLsizei) h); - glMatrixMode (GL_PROJECTION); - glLoadIdentity (); - glFrustum (-1.0, 1.0, -1.0, 1.0, 1.5, 20.0); - glMatrixMode (GL_MODELVIEW); -} - -/* ARGSUSED1 */ -void keyboard(unsigned char key, int x, int y) -{ - switch (key) { - case 27: - exit(0); - break; - } -} - -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); - glutInitWindowSize (500, 500); - glutInitWindowPosition (100, 100); - glutCreateWindow (argv[0]); - init (); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glutKeyboardFunc(keyboard); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/redbook/cube.dsp b/lib/glut-3.7.6/progs/redbook/cube.dsp deleted file mode 100644 index 9cfb01bd1..000000000 --- a/lib/glut-3.7.6/progs/redbook/cube.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="cube" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=cube - 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 "cube.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 "cube.mak" CFG="cube - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "cube - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "cube - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "cube - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "cube - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "cube - Win32 Release" -# Name "cube - Win32 Debug" -# Begin Source File - -SOURCE=.\cube.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/depthcue.c b/lib/glut-3.7.6/progs/redbook/depthcue.c deleted file mode 100644 index 41af19cf9..000000000 --- a/lib/glut-3.7.6/progs/redbook/depthcue.c +++ /dev/null @@ -1,102 +0,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. - */ -/* - * depthcue.c - * This program draws a wireframe model, which uses - * intensity (brightness) to give clues to distance. - * Fog is used to achieve this effect. - */ -#include -#include - -/* Initialize linear fog for depth cueing. - */ -void myinit(void) -{ - GLfloat fogColor[4] = {0.0, 0.0, 0.0, 1.0}; - - glEnable(GL_FOG); - glFogi (GL_FOG_MODE, GL_LINEAR); - glHint (GL_FOG_HINT, GL_NICEST); /* per pixel */ - glFogf (GL_FOG_START, 3.0); - glFogf (GL_FOG_END, 5.0); - glFogfv (GL_FOG_COLOR, fogColor); - glClearColor(0.0, 0.0, 0.0, 1.0); - - glDepthFunc(GL_LESS); - glEnable(GL_DEPTH_TEST); - glShadeModel(GL_FLAT); -} - -/* display() draws an icosahedron. - */ -void display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glColor3f (1.0, 1.0, 1.0); - glutWireIcosahedron(); - glFlush(); -} - -void myReshape(int w, int h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective (45.0, (GLfloat) w/(GLfloat) h, 3.0, 5.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity (); - glTranslatef (0.0, 0.0, -4.0); /* move object into view */ -} - -/* Main Loop - */ -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); - glutCreateWindow(argv[0]); - myinit(); - glutReshapeFunc(myReshape); - glutDisplayFunc(display); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} - diff --git a/lib/glut-3.7.6/progs/redbook/depthcue.dsp b/lib/glut-3.7.6/progs/redbook/depthcue.dsp deleted file mode 100644 index 1fb3a80da..000000000 --- a/lib/glut-3.7.6/progs/redbook/depthcue.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="depthcue" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=depthcue - 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 "depthcue.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 "depthcue.mak" CFG="depthcue - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "depthcue - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "depthcue - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "depthcue - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "depthcue - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "depthcue - Win32 Release" -# Name "depthcue - Win32 Debug" -# Begin Source File - -SOURCE=.\depthcue.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/dof.c b/lib/glut-3.7.6/progs/redbook/dof.c deleted file mode 100644 index 166ca9e62..000000000 --- a/lib/glut-3.7.6/progs/redbook/dof.c +++ /dev/null @@ -1,238 +0,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. - */ -/* - * dof.c - * This program demonstrates use of the accumulation buffer to - * create an out-of-focus depth-of-field effect. The teapots - * are drawn several times into the accumulation buffer. The - * viewing volume is jittered, except at the focal point, where - * the viewing volume is at the same position, each time. In - * this case, the gold teapot remains in focus. - */ -#include -#include -#include -#include "jitter.h" - -#define PI_ 3.14159265358979323846 - -/* accFrustum() - * The first 6 arguments are identical to the glFrustum() call. - * - * pixdx and pixdy are anti-alias jitter in pixels. - * Set both equal to 0.0 for no anti-alias jitter. - * eyedx and eyedy are depth-of field jitter in pixels. - * Set both equal to 0.0 for no depth of field effects. - * - * focus is distance from eye to plane in focus. - * focus must be greater than, but not equal to 0.0. - * - * Note that accFrustum() calls glTranslatef(). You will - * probably want to insure that your ModelView matrix has been - * initialized to identity before calling accFrustum(). - */ -void accFrustum(GLdouble left, GLdouble right, GLdouble bottom, - GLdouble top, GLdouble nnear, GLdouble ffar, GLdouble pixdx, - GLdouble pixdy, GLdouble eyedx, GLdouble eyedy, GLdouble focus) -{ - GLdouble xwsize, ywsize; - GLdouble dx, dy; - GLint viewport[4]; - - glGetIntegerv (GL_VIEWPORT, viewport); - - xwsize = right - left; - ywsize = top - bottom; - - dx = -(pixdx*xwsize/(GLdouble) viewport[2] + eyedx*nnear/focus); - dy = -(pixdy*ywsize/(GLdouble) viewport[3] + eyedy*nnear/focus); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glFrustum (left + dx, right + dx, bottom + dy, top + dy, nnear, ffar); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef (-eyedx, -eyedy, 0.0); -} - -/* accPerspective() - * - * The first 4 arguments are identical to the gluPerspective() call. - * pixdx and pixdy are anti-alias jitter in pixels. - * Set both equal to 0.0 for no anti-alias jitter. - * eyedx and eyedy are depth-of field jitter in pixels. - * Set both equal to 0.0 for no depth of field effects. - * - * focus is distance from eye to plane in focus. - * focus must be greater than, but not equal to 0.0. - * - * Note that accPerspective() calls accFrustum(). - */ -void accPerspective(GLdouble fovy, GLdouble aspect, - GLdouble nnear, GLdouble ffar, GLdouble pixdx, GLdouble pixdy, - GLdouble eyedx, GLdouble eyedy, GLdouble focus) -{ - GLdouble fov2,left,right,bottom,top; - - fov2 = ((fovy*PI_) / 180.0) / 2.0; - - top = nnear / (cos(fov2) / sin(fov2)); - bottom = -top; - - right = top * aspect; - left = -right; - - accFrustum (left, right, bottom, top, nnear, ffar, - pixdx, pixdy, eyedx, eyedy, focus); -} - -void myinit(void) -{ - GLfloat ambient[] = { 0.0, 0.0, 0.0, 1.0 }; - GLfloat diffuse[] = { 1.0, 1.0, 1.0, 1.0 }; - GLfloat position[] = { 0.0, 3.0, 3.0, 0.0 }; - - GLfloat lmodel_ambient[] = { 0.2, 0.2, 0.2, 1.0 }; - GLfloat local_view[] = { 0.0 }; - - glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_LESS); - - glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); - glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); - glLightfv(GL_LIGHT0, GL_POSITION, position); - - glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); - glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, local_view); - - glFrontFace (GL_CW); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_AUTO_NORMAL); - glEnable(GL_NORMALIZE); - - glMatrixMode (GL_MODELVIEW); - glLoadIdentity (); - - glClearColor(0.0, 0.0, 0.0, 0.0); - glClearAccum(0.0, 0.0, 0.0, 0.0); -} - -void renderTeapot (GLfloat x, GLfloat y, GLfloat z, - GLfloat ambr, GLfloat ambg, GLfloat ambb, - GLfloat difr, GLfloat difg, GLfloat difb, - GLfloat specr, GLfloat specg, GLfloat specb, GLfloat shine) -{ - float mat[4]; - - glPushMatrix(); - glTranslatef (x, y, z); - mat[0] = ambr; mat[1] = ambg; mat[2] = ambb; mat[3] = 1.0; - glMaterialfv (GL_FRONT, GL_AMBIENT, mat); - mat[0] = difr; mat[1] = difg; mat[2] = difb; - glMaterialfv (GL_FRONT, GL_DIFFUSE, mat); - mat[0] = specr; mat[1] = specg; mat[2] = specb; - glMaterialfv (GL_FRONT, GL_SPECULAR, mat); - glMaterialf (GL_FRONT, GL_SHININESS, shine*128.0); - glutSolidTeapot(0.5); - glPopMatrix(); -} - -/* display() draws 5 teapots into the accumulation buffer - * several times; each time with a jittered perspective. - * The focal point is at z = 5.0, so the gold teapot will - * stay in focus. The amount of jitter is adjusted by the - * magnitude of the accPerspective() jitter; in this example, 0.33. - * In this example, the teapots are drawn 8 times. See jitter.h - */ -void display(void) -{ - int jitter; - GLint viewport[4]; - - glGetIntegerv (GL_VIEWPORT, viewport); - glClear(GL_ACCUM_BUFFER_BIT); - - for (jitter = 0; jitter < 8; jitter++) { - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - accPerspective (45.0, - (GLdouble) viewport[2]/(GLdouble) viewport[3], - 1.0, 15.0, 0.0, 0.0, - 0.33*j8[jitter].x, 0.33*j8[jitter].y, 5.0); -/* ruby, gold, silver, emerald, and cyan teapots */ - renderTeapot (-1.1, -0.5, -4.5, 0.1745, 0.01175, 0.01175, - 0.61424, 0.04136, 0.04136, 0.727811, 0.626959, 0.626959, 0.6); - renderTeapot (-0.5, -0.5, -5.0, 0.24725, 0.1995, 0.0745, - 0.75164, 0.60648, 0.22648, 0.628281, 0.555802, 0.366065, 0.4); - renderTeapot (0.2, -0.5, -5.5, 0.19225, 0.19225, 0.19225, - 0.50754, 0.50754, 0.50754, 0.508273, 0.508273, 0.508273, 0.4); - renderTeapot (1.0, -0.5, -6.0, 0.0215, 0.1745, 0.0215, - 0.07568, 0.61424, 0.07568, 0.633, 0.727811, 0.633, 0.6); - renderTeapot (1.8, -0.5, -6.5, 0.0, 0.1, 0.06, 0.0, 0.50980392, - 0.50980392, 0.50196078, 0.50196078, 0.50196078, .25); - glAccum (GL_ACCUM, 0.125); - } - - glAccum (GL_RETURN, 1.0); - glFlush(); -} - -void myReshape(int w, int h) -{ - glViewport(0, 0, w, h); -} - -/* Main Loop - * Open window with initial window size, title bar, - * RGBA display mode, depth buffer, and handle input events. - */ -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB - | GLUT_ACCUM | GLUT_DEPTH); - glutCreateWindow (argv[0]); - myinit(); - glutReshapeFunc(myReshape); - glutDisplayFunc(display); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} - diff --git a/lib/glut-3.7.6/progs/redbook/dof.dsp b/lib/glut-3.7.6/progs/redbook/dof.dsp deleted file mode 100644 index 8f31c59c5..000000000 --- a/lib/glut-3.7.6/progs/redbook/dof.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="dof" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=dof - 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 "dof.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 "dof.mak" CFG="dof - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "dof - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "dof - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "dof - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "dof - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "dof - Win32 Release" -# Name "dof - Win32 Debug" -# Begin Source File - -SOURCE=.\dof.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/double.c b/lib/glut-3.7.6/progs/redbook/double.c deleted file mode 100644 index 65dfd4b2a..000000000 --- a/lib/glut-3.7.6/progs/redbook/double.c +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -/* - * double.c - * This is a simple double buffered program. - * Pressing the left mouse button rotates the rectangle. - * Pressing the middle mouse button stops the rotation. - */ -#include -#include - -static GLfloat spin = 0.0; - -void display(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - glPushMatrix(); - glRotatef(spin, 0.0, 0.0, 1.0); - glColor3f(1.0, 1.0, 1.0); - glRectf(-25.0, -25.0, 25.0, 25.0); - glPopMatrix(); - - glutSwapBuffers(); -} - -void spinDisplay(void) -{ - spin = spin + 2.0; - if (spin > 360.0) - spin = spin - 360.0; - glutPostRedisplay(); -} - -void init(void) -{ - glClearColor (0.0, 0.0, 0.0, 0.0); - glShadeModel (GL_FLAT); -} - -void reshape(int w, int h) -{ - glViewport (0, 0, (GLsizei) w, (GLsizei) h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho(-50.0, 50.0, -50.0, 50.0, -1.0, 1.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -/* ARGSUSED2 */ -void mouse(int button, int state, int x, int y) -{ - switch (button) { - case GLUT_LEFT_BUTTON: - if (state == GLUT_DOWN) - glutIdleFunc(spinDisplay); - break; - case GLUT_MIDDLE_BUTTON: - if (state == GLUT_DOWN) - glutIdleFunc(NULL); - break; - default: - break; - } -} - -/* - * Request double buffer display mode. - * Register mouse input callback functions - */ -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB); - glutInitWindowSize (250, 250); - glutInitWindowPosition (100, 100); - glutCreateWindow (argv[0]); - init (); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glutMouseFunc(mouse); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/redbook/double.dsp b/lib/glut-3.7.6/progs/redbook/double.dsp deleted file mode 100644 index 868a0c9b5..000000000 --- a/lib/glut-3.7.6/progs/redbook/double.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="double" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=double - 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 "double.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 "double.mak" CFG="double - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "double - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "double - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "double - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "double - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "double - Win32 Release" -# Name "double - Win32 Debug" -# Begin Source File - -SOURCE=.\double.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/drawf.c b/lib/glut-3.7.6/progs/redbook/drawf.c deleted file mode 100644 index 5bcccb6ae..000000000 --- a/lib/glut-3.7.6/progs/redbook/drawf.c +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -/* - * drawf.c - * Draws the bitmapped letter F on the screen (several times). - * This demonstrates use of the glBitmap() call. - */ -#include -#include - -GLubyte rasters[24] = { - 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, - 0xff, 0x00, 0xff, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, - 0xff, 0xc0, 0xff, 0xc0}; - -void init(void) -{ - glPixelStorei (GL_UNPACK_ALIGNMENT, 1); - glClearColor (0.0, 0.0, 0.0, 0.0); -} - -void display(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - glColor3f (1.0, 1.0, 1.0); - glRasterPos2i (20, 20); - glBitmap (10, 12, 0.0, 0.0, 11.0, 0.0, rasters); - glBitmap (10, 12, 0.0, 0.0, 11.0, 0.0, rasters); - glBitmap (10, 12, 0.0, 0.0, 11.0, 0.0, rasters); - glFlush(); -} - -void reshape(int w, int h) -{ - glViewport(0, 0, (GLsizei) w, (GLsizei) h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho (0, w, 0, h, -1.0, 1.0); - glMatrixMode(GL_MODELVIEW); -} - -/* ARGSUSED1 */ -void keyboard(unsigned char key, int x, int y) -{ - switch (key) { - case 27: - exit(0); - } -} - -/* Main Loop - * Open window with initial window size, title bar, - * RGBA display mode, and handle input events. - */ -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); - glutInitWindowSize(100, 100); - glutInitWindowPosition(100, 100); - glutCreateWindow(argv[0]); - init(); - glutReshapeFunc(reshape); - glutKeyboardFunc(keyboard); - glutDisplayFunc(display); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/redbook/drawf.dsp b/lib/glut-3.7.6/progs/redbook/drawf.dsp deleted file mode 100644 index 8577534ed..000000000 --- a/lib/glut-3.7.6/progs/redbook/drawf.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="drawf" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=drawf - 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 "drawf.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 "drawf.mak" CFG="drawf - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "drawf - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "drawf - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "drawf - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "drawf - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "drawf - Win32 Release" -# Name "drawf - Win32 Debug" -# Begin Source File - -SOURCE=.\drawf.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/feedback.c b/lib/glut-3.7.6/progs/redbook/feedback.c deleted file mode 100644 index 4981854d9..000000000 --- a/lib/glut-3.7.6/progs/redbook/feedback.c +++ /dev/null @@ -1,171 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -/* - * feedback.c - * This program demonstrates use of OpenGL feedback. First, - * a lighting environment is set up and a few lines are drawn. - * Then feedback mode is entered, and the same lines are - * drawn. The results in the feedback buffer are printed. - */ -#include -#include -#include - -/* Initialize lighting. - */ -void init(void) -{ - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); -} - -/* Draw a few lines and two points, one of which will - * be clipped. If in feedback mode, a passthrough token - * is issued between the each primitive. - */ -void drawGeometry (GLenum mode) -{ - glBegin (GL_LINE_STRIP); - glNormal3f (0.0, 0.0, 1.0); - glVertex3f (30.0, 30.0, 0.0); - glVertex3f (50.0, 60.0, 0.0); - glVertex3f (70.0, 40.0, 0.0); - glEnd (); - if (mode == GL_FEEDBACK) - glPassThrough (1.0); - glBegin (GL_POINTS); - glVertex3f (-100.0, -100.0, -100.0); /* will be clipped */ - glEnd (); - if (mode == GL_FEEDBACK) - glPassThrough (2.0); - glBegin (GL_POINTS); - glNormal3f (0.0, 0.0, 1.0); - glVertex3f (50.0, 50.0, 0.0); - glEnd (); -} - -/* Write contents of one vertex to stdout. */ -void print3DcolorVertex (GLint size, GLint *count, - GLfloat *buffer) -{ - int i; - - printf (" "); - for (i = 0; i < 7; i++) { - printf ("%4.2f ", buffer[size-(*count)]); - *count = *count - 1; - } - printf ("\n"); -} - -/* Write contents of entire buffer. (Parse tokens!) */ -void printBuffer(GLint size, GLfloat *buffer) -{ - GLint count; - GLfloat token; - - count = size; - while (count) { - token = buffer[size-count]; count--; - if (token == GL_PASS_THROUGH_TOKEN) { - printf ("GL_PASS_THROUGH_TOKEN\n"); - printf (" %4.2f\n", buffer[size-count]); - count--; - } - else if (token == GL_POINT_TOKEN) { - printf ("GL_POINT_TOKEN\n"); - print3DcolorVertex (size, &count, buffer); - } - else if (token == GL_LINE_TOKEN) { - printf ("GL_LINE_TOKEN\n"); - print3DcolorVertex (size, &count, buffer); - print3DcolorVertex (size, &count, buffer); - } - else if (token == GL_LINE_RESET_TOKEN) { - printf ("GL_LINE_RESET_TOKEN\n"); - print3DcolorVertex (size, &count, buffer); - print3DcolorVertex (size, &count, buffer); - } - } -} - -void display(void) -{ - GLfloat feedBuffer[1024]; - GLint size; - - glMatrixMode (GL_PROJECTION); - glLoadIdentity (); - glOrtho (0.0, 100.0, 0.0, 100.0, 0.0, 1.0); - - glClearColor (0.0, 0.0, 0.0, 0.0); - glClear(GL_COLOR_BUFFER_BIT); - drawGeometry (GL_RENDER); - - glFeedbackBuffer (1024, GL_3D_COLOR, feedBuffer); - (void) glRenderMode (GL_FEEDBACK); - drawGeometry (GL_FEEDBACK); - - size = glRenderMode (GL_RENDER); - printBuffer (size, feedBuffer); -} - -/* ARGSUSED1 */ -void keyboard(unsigned char key, int x, int y) -{ - switch (key) { - case 27: - exit(0); - break; - } -} - -/* Main Loop */ -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); - glutInitWindowSize (100, 100); - glutInitWindowPosition (100, 100); - glutCreateWindow(argv[0]); - init(); - glutDisplayFunc(display); - glutKeyboardFunc (keyboard); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/redbook/feedback.dsp b/lib/glut-3.7.6/progs/redbook/feedback.dsp deleted file mode 100644 index 39ddfb99c..000000000 --- a/lib/glut-3.7.6/progs/redbook/feedback.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="feedback" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=feedback - 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 "feedback.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 "feedback.mak" CFG="feedback - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "feedback - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "feedback - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "feedback - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "feedback - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "feedback - Win32 Release" -# Name "feedback - Win32 Debug" -# Begin Source File - -SOURCE=.\feedback.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/fog.c b/lib/glut-3.7.6/progs/redbook/fog.c deleted file mode 100644 index 5f8a4e4e7..000000000 --- a/lib/glut-3.7.6/progs/redbook/fog.c +++ /dev/null @@ -1,186 +0,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. - */ -/* - * fog.c - * This program draws 5 red teapots, each at a different - * z distance from the eye, in different types of fog. - * Pressing the left mouse button chooses between 3 types of - * fog: exponential, exponential squared, and linear. - * In this program, there is a fixed density value, as well - * as fixed start and end values for the linear fog. - */ -#include -#include -#include - -GLint fogMode; - -void -selectFog(int mode) -{ - switch(mode) { - case GL_LINEAR: - glFogf(GL_FOG_START, 1.0); - glFogf(GL_FOG_END, 5.0); - /* falls through */ - case GL_EXP2: - case GL_EXP: - glFogi(GL_FOG_MODE, mode); - glutPostRedisplay(); - break; - case 0: - exit(0); - } -} - -/* Initialize z-buffer, projection matrix, light source, - * and lighting model. Do not specify a material property here. - */ -void -myinit(void) -{ - GLfloat position[] = - {0.0, 3.0, 3.0, 0.0}; - GLfloat local_view[] = - {0.0}; - - glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_LESS); - - glLightfv(GL_LIGHT0, GL_POSITION, position); - glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, local_view); - - glFrontFace(GL_CW); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_AUTO_NORMAL); - glEnable(GL_NORMALIZE); - glEnable(GL_FOG); - { - GLfloat fogColor[4] = - {0.5, 0.5, 0.5, 1.0}; - - fogMode = GL_EXP; - glFogi(GL_FOG_MODE, fogMode); - glFogfv(GL_FOG_COLOR, fogColor); - glFogf(GL_FOG_DENSITY, 0.35); - glHint(GL_FOG_HINT, GL_DONT_CARE); - glClearColor(0.5, 0.5, 0.5, 1.0); - } -} - -void -renderRedTeapot(GLfloat x, GLfloat y, GLfloat z) -{ - float mat[4]; - - glPushMatrix(); - glTranslatef(x, y, z); - mat[0] = 0.1745; - mat[1] = 0.01175; - mat[2] = 0.01175; - mat[3] = 1.0; - glMaterialfv(GL_FRONT, GL_AMBIENT, mat); - mat[0] = 0.61424; - mat[1] = 0.04136; - mat[2] = 0.04136; - glMaterialfv(GL_FRONT, GL_DIFFUSE, mat); - mat[0] = 0.727811; - mat[1] = 0.626959; - mat[2] = 0.626959; - glMaterialfv(GL_FRONT, GL_SPECULAR, mat); - glMaterialf(GL_FRONT, GL_SHININESS, 0.6 * 128.0); - glutSolidTeapot(1.0); - glPopMatrix(); -} - -/* display() draws 5 teapots at different z positions. - */ -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - renderRedTeapot(-4.0, -0.5, -1.0); - renderRedTeapot(-2.0, -0.5, -2.0); - renderRedTeapot(0.0, -0.5, -3.0); - renderRedTeapot(2.0, -0.5, -4.0); - renderRedTeapot(4.0, -0.5, -5.0); - glFlush(); -} - -void -myReshape(int w, int h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - if (w <= (h * 3)) - glOrtho(-6.0, 6.0, -2.0 * ((GLfloat) h * 3) / (GLfloat) w, - 2.0 * ((GLfloat) h * 3) / (GLfloat) w, 0.0, 10.0); - else - glOrtho(-6.0 * (GLfloat) w / ((GLfloat) h * 3), - 6.0 * (GLfloat) w / ((GLfloat) h * 3), -2.0, 2.0, 0.0, 10.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -/* Main Loop - * Open window with initial window size, title bar, - * RGBA display mode, depth buffer, and handle input events. - */ -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); - glutInitWindowSize(450, 150); - glutCreateWindow(argv[0]); - myinit(); - glutReshapeFunc(myReshape); - glutDisplayFunc(display); - glutCreateMenu(selectFog); - glutAddMenuEntry("Fog EXP", GL_EXP); - glutAddMenuEntry("Fog EXP2", GL_EXP2); - glutAddMenuEntry("Fog LINEAR", GL_LINEAR); - glutAddMenuEntry("Quit", 0); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/redbook/fog.dsp b/lib/glut-3.7.6/progs/redbook/fog.dsp deleted file mode 100644 index c6289abbf..000000000 --- a/lib/glut-3.7.6/progs/redbook/fog.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="fog" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=fog - 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 "fog.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 "fog.mak" CFG="fog - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "fog - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "fog - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "fog - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "fog - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "fog - Win32 Release" -# Name "fog - Win32 Debug" -# Begin Source File - -SOURCE=.\fog.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/fogindex.c b/lib/glut-3.7.6/progs/redbook/fogindex.c deleted file mode 100644 index b409c95ac..000000000 --- a/lib/glut-3.7.6/progs/redbook/fogindex.c +++ /dev/null @@ -1,138 +0,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. - */ -/* - * fogindex.c - * This program demonstrates fog in color index mode. - * Three cones are drawn at different z values in a linear - * fog. 32 contiguous colors (from 16 to 47) are loaded - * with a color ramp. - */ -#include -#include - -/* Initialize color map and fog. Set screen clear color - * to end of color ramp. - */ -#define NUM_COLORS 32 -#define RAMPSTART 16 - -void -myinit(void) -{ - int i; - - glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_LESS); - for (i = 0; i < NUM_COLORS; i++) { - GLfloat shade; - shade = (GLfloat) (NUM_COLORS - i) / (GLfloat) NUM_COLORS; - glutSetColor(16 + i, shade, shade, shade); - } - glEnable(GL_FOG); - - glFogi(GL_FOG_MODE, GL_LINEAR); - glFogi(GL_FOG_INDEX, NUM_COLORS); - glFogf(GL_FOG_START, 0.0); - glFogf(GL_FOG_END, 4.0); - glHint(GL_FOG_HINT, GL_NICEST); - glClearIndex((GLfloat) (NUM_COLORS + RAMPSTART - 1)); -} - -/* display() renders 3 cones at different z positions. - */ -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glPushMatrix(); - glTranslatef(-1.0, -1.0, -1.0); - glRotatef(-90.0, 1.0, 0.0, 0.0); - glIndexi(RAMPSTART); - glutSolidCone(1.0, 2.0, 10, 10); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(0.0, -1.0, -2.25); - glRotatef(-90.0, 1.0, 0.0, 0.0); - glIndexi(RAMPSTART); - glutSolidCone(1.0, 2.0, 10, 10); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(1.0, -1.0, -3.5); - glRotatef(-90.0, 1.0, 0.0, 0.0); - glIndexi(RAMPSTART); - glutSolidCone(1.0, 2.0, 10, 10); - glPopMatrix(); - glFlush(); -} - -void -myReshape(int w, int h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - if (w <= h) - glOrtho(-2.0, 2.0, -2.0 * (GLfloat) h / (GLfloat) w, - 2.0 * (GLfloat) h / (GLfloat) w, 0.0, 10.0); - else - glOrtho(-2.0 * (GLfloat) w / (GLfloat) h, - 2.0 * (GLfloat) w / (GLfloat) h, -2.0, 2.0, 0.0, 10.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -/* Main Loop - * Open window with initial window size, title bar, - * RGBA display mode, depth buffer, and handle input events. - */ -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_SINGLE | GLUT_INDEX | GLUT_DEPTH); - glutCreateWindow(argv[0]); - myinit(); - glutReshapeFunc(myReshape); - glutDisplayFunc(display); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/redbook/fogindex.dsp b/lib/glut-3.7.6/progs/redbook/fogindex.dsp deleted file mode 100644 index 811cae5e7..000000000 --- a/lib/glut-3.7.6/progs/redbook/fogindex.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="fogindex" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=fogindex - 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 "fogindex.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 "fogindex.mak" CFG="fogindex - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "fogindex - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "fogindex - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "fogindex - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "fogindex - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "fogindex - Win32 Release" -# Name "fogindex - Win32 Debug" -# Begin Source File - -SOURCE=.\fogindex.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/font.c b/lib/glut-3.7.6/progs/redbook/font.c deleted file mode 100644 index 2d92e9b60..000000000 --- a/lib/glut-3.7.6/progs/redbook/font.c +++ /dev/null @@ -1,167 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -/* - * font.c - * - * Draws some text in a bitmapped font. Uses glBitmap() - * and other pixel routines. Also demonstrates use of - * display lists. - */ -#include -#include -#include - -GLubyte space[] = -{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - -GLubyte letters[][13] = { -{0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xc3, 0x66, 0x3c, 0x18}, -{0x00, 0x00, 0xfe, 0xc7, 0xc3, 0xc3, 0xc7, 0xfe, 0xc7, 0xc3, 0xc3, 0xc7, 0xfe}, -{0x00, 0x00, 0x7e, 0xe7, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe7, 0x7e}, -{0x00, 0x00, 0xfc, 0xce, 0xc7, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc7, 0xce, 0xfc}, -{0x00, 0x00, 0xff, 0xc0, 0xc0, 0xc0, 0xc0, 0xfc, 0xc0, 0xc0, 0xc0, 0xc0, 0xff}, -{0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xfc, 0xc0, 0xc0, 0xc0, 0xff}, -{0x00, 0x00, 0x7e, 0xe7, 0xc3, 0xc3, 0xcf, 0xc0, 0xc0, 0xc0, 0xc0, 0xe7, 0x7e}, -{0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3}, -{0x00, 0x00, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e}, -{0x00, 0x00, 0x7c, 0xee, 0xc6, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06}, -{0x00, 0x00, 0xc3, 0xc6, 0xcc, 0xd8, 0xf0, 0xe0, 0xf0, 0xd8, 0xcc, 0xc6, 0xc3}, -{0x00, 0x00, 0xff, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}, -{0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xdb, 0xff, 0xff, 0xe7, 0xc3}, -{0x00, 0x00, 0xc7, 0xc7, 0xcf, 0xcf, 0xdf, 0xdb, 0xfb, 0xf3, 0xf3, 0xe3, 0xe3}, -{0x00, 0x00, 0x7e, 0xe7, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xe7, 0x7e}, -{0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xfe, 0xc7, 0xc3, 0xc3, 0xc7, 0xfe}, -{0x00, 0x00, 0x3f, 0x6e, 0xdf, 0xdb, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x66, 0x3c}, -{0x00, 0x00, 0xc3, 0xc6, 0xcc, 0xd8, 0xf0, 0xfe, 0xc7, 0xc3, 0xc3, 0xc7, 0xfe}, -{0x00, 0x00, 0x7e, 0xe7, 0x03, 0x03, 0x07, 0x7e, 0xe0, 0xc0, 0xc0, 0xe7, 0x7e}, -{0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff}, -{0x00, 0x00, 0x7e, 0xe7, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3}, -{0x00, 0x00, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3}, -{0x00, 0x00, 0xc3, 0xe7, 0xff, 0xff, 0xdb, 0xdb, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3}, -{0x00, 0x00, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0xc3}, -{0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0xc3}, -{0x00, 0x00, 0xff, 0xc0, 0xc0, 0x60, 0x30, 0x7e, 0x0c, 0x06, 0x03, 0x03, 0xff} -}; - -GLuint fontOffset; - -void makeRasterFont(void) -{ - GLuint i, j; - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - - fontOffset = glGenLists (128); - for (i = 0,j = 'A'; i < 26; i++,j++) { - glNewList(fontOffset + j, GL_COMPILE); - glBitmap(8, 13, 0.0, 2.0, 10.0, 0.0, letters[i]); - glEndList(); - } - glNewList(fontOffset + ' ', GL_COMPILE); - glBitmap(8, 13, 0.0, 2.0, 10.0, 0.0, space); - glEndList(); -} - -void init(void) -{ - glShadeModel (GL_FLAT); - makeRasterFont(); -} - -void printString(char *s) -{ - glPushAttrib (GL_LIST_BIT); - glListBase(fontOffset); - glCallLists((GLsizei) strlen(s), GL_UNSIGNED_BYTE, (GLubyte *) s); - glPopAttrib (); -} - -/* Everything above this line could be in a library - * that defines a font. To make it work, you've got - * to call makeRasterFont() before you start making - * calls to printString(). - */ -void display(void) -{ - GLfloat white[3] = { 1.0, 1.0, 1.0 }; - - glClear(GL_COLOR_BUFFER_BIT); - glColor3fv(white); - - glRasterPos2i(20, 60); - printString("THE QUICK BROWN FOX JUMPS"); - glRasterPos2i(20, 40); - printString("OVER A LAZY DOG"); - glFlush (); -} - -void reshape(int w, int h) -{ - glViewport(0, 0, (GLsizei) w, (GLsizei) h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho (0.0, w, 0.0, h, -1.0, 1.0); - glMatrixMode(GL_MODELVIEW); -} - -/* ARGSUSED1 */ -void keyboard(unsigned char key, int x, int y) -{ - switch (key) { - case 27: - exit(0); - } -} - -/* Main Loop - * Open window with initial window size, title bar, - * RGBA display mode, and handle input events. - */ -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); - glutInitWindowSize(300, 100); - glutInitWindowPosition (100, 100); - glutCreateWindow(argv[0]); - init(); - glutReshapeFunc(reshape); - glutKeyboardFunc(keyboard); - glutDisplayFunc(display); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/redbook/font.dsp b/lib/glut-3.7.6/progs/redbook/font.dsp deleted file mode 100644 index 055abc574..000000000 --- a/lib/glut-3.7.6/progs/redbook/font.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="font" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=font - 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 "font.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 "font.mak" CFG="font - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "font - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "font - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "font - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "font - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "font - Win32 Release" -# Name "font - Win32 Debug" -# Begin Source File - -SOURCE=.\font.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/hello.c b/lib/glut-3.7.6/progs/redbook/hello.c deleted file mode 100644 index 516c9ecc0..000000000 --- a/lib/glut-3.7.6/progs/redbook/hello.c +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -/* - * hello.c - * This is a simple, introductory OpenGL program. - */ -#include - -void display(void) -{ -/* clear all pixels */ - glClear (GL_COLOR_BUFFER_BIT); - -/* draw white polygon (rectangle) with corners at - * (0.25, 0.25, 0.0) and (0.75, 0.75, 0.0) - */ - glColor3f (1.0, 1.0, 1.0); - glBegin(GL_POLYGON); - glVertex3f (0.25, 0.25, 0.0); - glVertex3f (0.75, 0.25, 0.0); - glVertex3f (0.75, 0.75, 0.0); - glVertex3f (0.25, 0.75, 0.0); - glEnd(); - -/* don't wait! - * start processing buffered OpenGL routines - */ - glFlush (); -} - -void init (void) -{ -/* select clearing color */ - glClearColor (0.0, 0.0, 0.0, 0.0); - -/* initialize viewing values */ - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); -} - -/* - * Declare initial window size, position, and display mode - * (single buffer and RGBA). Open window with "hello" - * in its title bar. Call initialization routines. - * Register callback function to display graphics. - * Enter main loop and process events. - */ -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); - glutInitWindowSize (250, 250); - glutInitWindowPosition (100, 100); - glutCreateWindow ("hello"); - init (); - glutDisplayFunc(display); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/redbook/hello.dsp b/lib/glut-3.7.6/progs/redbook/hello.dsp deleted file mode 100644 index e4fa1cd49..000000000 --- a/lib/glut-3.7.6/progs/redbook/hello.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="hello" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=hello - 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 "hello.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 "hello.mak" CFG="hello - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "hello - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "hello - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "hello - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "hello - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "hello - Win32 Release" -# Name "hello - Win32 Debug" -# Begin Source File - -SOURCE=.\hello.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/image.c b/lib/glut-3.7.6/progs/redbook/image.c deleted file mode 100644 index 822121af1..000000000 --- a/lib/glut-3.7.6/progs/redbook/image.c +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -/* image.c - * This program demonstrates drawing pixels and shows the effect - * of glDrawPixels(), glCopyPixels(), and glPixelZoom(). - * Interaction: moving the mouse while pressing the mouse button - * will copy the image in the lower-left corner of the window - * to the mouse position, using the current pixel zoom factors. - * There is no attempt to prevent you from drawing over the original - * image. If you press the 'r' key, the original image and zoom - * factors are reset. If you press the 'z' or 'Z' keys, you change - * the zoom factors. - */ -#include -#include -#include - -/* Create checkerboard image */ -#define checkImageWidth 64 -#define checkImageHeight 64 -GLubyte checkImage[checkImageHeight][checkImageWidth][3]; - -static GLdouble zoomFactor = 1.0; -static GLint height; - -void makeCheckImage(void) -{ - int i, j, c; - - for (i = 0; i < checkImageHeight; i++) { - for (j = 0; j < checkImageWidth; j++) { - c = ((((i&0x8)==0)^((j&0x8)==0)))*255; - checkImage[i][j][0] = (GLubyte) c; - checkImage[i][j][1] = (GLubyte) c; - checkImage[i][j][2] = (GLubyte) c; - } - } -} - -void init(void) -{ - glClearColor (0.0, 0.0, 0.0, 0.0); - glShadeModel(GL_FLAT); - makeCheckImage(); - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); -} - -void display(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - glRasterPos2i(0, 0); - glDrawPixels(checkImageWidth, checkImageHeight, GL_RGB, - GL_UNSIGNED_BYTE, checkImage); - glFlush(); -} - -void reshape(int w, int h) -{ - glViewport(0, 0, (GLsizei) w, (GLsizei) h); - height = (GLint) h; - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluOrtho2D(0.0, (GLdouble) w, 0.0, (GLdouble) h); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -void motion(int x, int y) -{ - static GLint screeny; - - screeny = height - (GLint) y; - glRasterPos2i (x, screeny); - glPixelZoom (zoomFactor, zoomFactor); - glCopyPixels (0, 0, checkImageWidth, checkImageHeight, GL_COLOR); - glPixelZoom (1.0, 1.0); - glFlush (); -} - -/* ARGSUSED1 */ -void keyboard(unsigned char key, int x, int y) -{ - switch (key) { - case 'r': - case 'R': - zoomFactor = 1.0; - glutPostRedisplay(); - printf ("zoomFactor reset to 1.0\n"); - break; - case 'z': - zoomFactor += 0.5; - if (zoomFactor >= 3.0) - zoomFactor = 3.0; - printf ("zoomFactor is now %4.1f\n", zoomFactor); - break; - case 'Z': - zoomFactor -= 0.5; - if (zoomFactor <= 0.5) - zoomFactor = 0.5; - printf ("zoomFactor is now %4.1f\n", zoomFactor); - break; - case 27: - exit(0); - break; - default: - break; - } -} - -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); - glutInitWindowSize(250, 250); - glutInitWindowPosition(100, 100); - glutCreateWindow(argv[0]); - init(); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glutKeyboardFunc(keyboard); - glutMotionFunc(motion); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/redbook/image.dsp b/lib/glut-3.7.6/progs/redbook/image.dsp deleted file mode 100644 index ee39ed83d..000000000 --- a/lib/glut-3.7.6/progs/redbook/image.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="image" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=image - 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 "image.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 "image.mak" CFG="image - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "image - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "image - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "image - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "image - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "image - Win32 Release" -# Name "image - Win32 Debug" -# Begin Source File - -SOURCE=.\image.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/jitter.h b/lib/glut-3.7.6/progs/redbook/jitter.h deleted file mode 100644 index 1ec08c87f..000000000 --- a/lib/glut-3.7.6/progs/redbook/jitter.h +++ /dev/null @@ -1,222 +0,0 @@ -/* - * (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. - */ -/* -jitter.h - -This file contains jitter point arrays for 2,3,4,8,15,24 and 66 jitters. - -The arrays are named j2, j3, etc. Each element in the array has the form, -for example, j8[0].x and j8[0].y - -Values are floating point in the range -.5 < x < .5, -.5 < y < .5, and -have a gaussian distribution around the origin. - -Use these to do model jittering for scene anti-aliasing and view volume -jittering for depth of field effects. Use in conjunction with the -accwindow() routine. -*/ - -typedef struct -{ - GLfloat x, y; -} jitter_point; - -#define MAX_SAMPLES 66 - - -/* 2 jitter points */ -jitter_point j2[] = -{ - { 0.246490, 0.249999}, - {-0.246490, -0.249999} -}; - - -/* 3 jitter points */ -jitter_point j3[] = -{ - {-0.373411, -0.250550}, - { 0.256263, 0.368119}, - { 0.117148, -0.117570} -}; - - -/* 4 jitter points */ -jitter_point j4[] = -{ - {-0.208147, 0.353730}, - { 0.203849, -0.353780}, - {-0.292626, -0.149945}, - { 0.296924, 0.149994} -}; - - -/* 8 jitter points */ -jitter_point j8[] = -{ - {-0.334818, 0.435331}, - { 0.286438, -0.393495}, - { 0.459462, 0.141540}, - {-0.414498, -0.192829}, - {-0.183790, 0.082102}, - {-0.079263, -0.317383}, - { 0.102254, 0.299133}, - { 0.164216, -0.054399} -}; - - -/* 15 jitter points */ -jitter_point j15[] = -{ - { 0.285561, 0.188437}, - { 0.360176, -0.065688}, - {-0.111751, 0.275019}, - {-0.055918, -0.215197}, - {-0.080231, -0.470965}, - { 0.138721, 0.409168}, - { 0.384120, 0.458500}, - {-0.454968, 0.134088}, - { 0.179271, -0.331196}, - {-0.307049, -0.364927}, - { 0.105354, -0.010099}, - {-0.154180, 0.021794}, - {-0.370135, -0.116425}, - { 0.451636, -0.300013}, - {-0.370610, 0.387504} -}; - - -/* 24 jitter points */ -jitter_point j24[] = -{ - { 0.030245, 0.136384}, - { 0.018865, -0.348867}, - {-0.350114, -0.472309}, - { 0.222181, 0.149524}, - {-0.393670, -0.266873}, - { 0.404568, 0.230436}, - { 0.098381, 0.465337}, - { 0.462671, 0.442116}, - { 0.400373, -0.212720}, - {-0.409988, 0.263345}, - {-0.115878, -0.001981}, - { 0.348425, -0.009237}, - {-0.464016, 0.066467}, - {-0.138674, -0.468006}, - { 0.144932, -0.022780}, - {-0.250195, 0.150161}, - {-0.181400, -0.264219}, - { 0.196097, -0.234139}, - {-0.311082, -0.078815}, - { 0.268379, 0.366778}, - {-0.040601, 0.327109}, - {-0.234392, 0.354659}, - {-0.003102, -0.154402}, - { 0.297997, -0.417965} -}; - - -/* 66 jitter points */ -jitter_point j66[] = -{ - { 0.266377, -0.218171}, - {-0.170919, -0.429368}, - { 0.047356, -0.387135}, - {-0.430063, 0.363413}, - {-0.221638, -0.313768}, - { 0.124758, -0.197109}, - {-0.400021, 0.482195}, - { 0.247882, 0.152010}, - {-0.286709, -0.470214}, - {-0.426790, 0.004977}, - {-0.361249, -0.104549}, - {-0.040643, 0.123453}, - {-0.189296, 0.438963}, - {-0.453521, -0.299889}, - { 0.408216, -0.457699}, - { 0.328973, -0.101914}, - {-0.055540, -0.477952}, - { 0.194421, 0.453510}, - { 0.404051, 0.224974}, - { 0.310136, 0.419700}, - {-0.021743, 0.403898}, - {-0.466210, 0.248839}, - { 0.341369, 0.081490}, - { 0.124156, -0.016859}, - {-0.461321, -0.176661}, - { 0.013210, 0.234401}, - { 0.174258, -0.311854}, - { 0.294061, 0.263364}, - {-0.114836, 0.328189}, - { 0.041206, -0.106205}, - { 0.079227, 0.345021}, - {-0.109319, -0.242380}, - { 0.425005, -0.332397}, - { 0.009146, 0.015098}, - {-0.339084, -0.355707}, - {-0.224596, -0.189548}, - { 0.083475, 0.117028}, - { 0.295962, -0.334699}, - { 0.452998, 0.025397}, - { 0.206511, -0.104668}, - { 0.447544, -0.096004}, - {-0.108006, -0.002471}, - {-0.380810, 0.130036}, - {-0.242440, 0.186934}, - {-0.200363, 0.070863}, - {-0.344844, -0.230814}, - { 0.408660, 0.345826}, - {-0.233016, 0.305203}, - { 0.158475, -0.430762}, - { 0.486972, 0.139163}, - {-0.301610, 0.009319}, - { 0.282245, -0.458671}, - { 0.482046, 0.443890}, - {-0.121527, 0.210223}, - {-0.477606, -0.424878}, - {-0.083941, -0.121440}, - {-0.345773, 0.253779}, - { 0.234646, 0.034549}, - { 0.394102, -0.210901}, - {-0.312571, 0.397656}, - { 0.200906, 0.333293}, - { 0.018703, -0.261792}, - {-0.209349, -0.065383}, - { 0.076248, 0.478538}, - {-0.073036, -0.355064}, - { 0.145087, 0.221726} -}; diff --git a/lib/glut-3.7.6/progs/redbook/light.c b/lib/glut-3.7.6/progs/redbook/light.c deleted file mode 100644 index 0eed85e10..000000000 --- a/lib/glut-3.7.6/progs/redbook/light.c +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -/* - * light.c - * This program demonstrates the use of the OpenGL lighting - * model. A sphere is drawn using a grey material characteristic. - * A single light source illuminates the object. - */ -#include -#include - -/* Initialize material property, light source, lighting model, - * and depth buffer. - */ -void init(void) -{ - GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; - GLfloat mat_shininess[] = { 50.0 }; - GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 }; - - glClearColor (0.0, 0.0, 0.0, 0.0); - glShadeModel (GL_SMOOTH); - - glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); - glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); - glLightfv(GL_LIGHT0, GL_POSITION, light_position); - - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_DEPTH_TEST); -} - -void display(void) -{ - glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glutSolidSphere (1.0, 20, 16); - glFlush (); -} - -void reshape (int w, int h) -{ - glViewport (0, 0, (GLsizei) w, (GLsizei) h); - glMatrixMode (GL_PROJECTION); - glLoadIdentity(); - if (w <= h) - glOrtho (-1.5, 1.5, -1.5*(GLfloat)h/(GLfloat)w, - 1.5*(GLfloat)h/(GLfloat)w, -10.0, 10.0); - else - glOrtho (-1.5*(GLfloat)w/(GLfloat)h, - 1.5*(GLfloat)w/(GLfloat)h, -1.5, 1.5, -10.0, 10.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -/* ARGSUSED1 */ -void keyboard(unsigned char key, int x, int y) -{ - switch (key) { - case 27: - exit(0); - break; - } -} - -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); - glutInitWindowSize (500, 500); - glutInitWindowPosition (100, 100); - glutCreateWindow (argv[0]); - init (); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glutKeyboardFunc(keyboard); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/redbook/light.dsp b/lib/glut-3.7.6/progs/redbook/light.dsp deleted file mode 100644 index edef322c6..000000000 --- a/lib/glut-3.7.6/progs/redbook/light.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="light" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=light - 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 "light.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 "light.mak" CFG="light - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "light - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "light - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "light - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "light - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "light - Win32 Release" -# Name "light - Win32 Debug" -# Begin Source File - -SOURCE=.\light.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/lines.c b/lib/glut-3.7.6/progs/redbook/lines.c deleted file mode 100644 index b34d4c418..000000000 --- a/lib/glut-3.7.6/progs/redbook/lines.c +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -/* - * lines.c - * This program demonstrates geometric primitives and - * their attributes. - */ -#include -#include - -#define drawOneLine(x1,y1,x2,y2) glBegin(GL_LINES); \ - glVertex2f ((x1),(y1)); glVertex2f ((x2),(y2)); glEnd(); - -void init(void) -{ - glClearColor (0.0, 0.0, 0.0, 0.0); - glShadeModel (GL_FLAT); -} - -void display(void) -{ - int i; - - glClear (GL_COLOR_BUFFER_BIT); - -/* select white for all lines */ - glColor3f (1.0, 1.0, 1.0); - -/* in 1st row, 3 lines, each with a different stipple */ - glEnable (GL_LINE_STIPPLE); - - glLineStipple (1, 0x0101); /* dotted */ - drawOneLine (50.0, 125.0, 150.0, 125.0); - glLineStipple (1, 0x00FF); /* dashed */ - drawOneLine (150.0, 125.0, 250.0, 125.0); - glLineStipple (1, 0x1C47); /* dash/dot/dash */ - drawOneLine (250.0, 125.0, 350.0, 125.0); - -/* in 2nd row, 3 wide lines, each with different stipple */ - glLineWidth (5.0); - glLineStipple (1, 0x0101); /* dotted */ - drawOneLine (50.0, 100.0, 150.0, 100.0); - glLineStipple (1, 0x00FF); /* dashed */ - drawOneLine (150.0, 100.0, 250.0, 100.0); - glLineStipple (1, 0x1C47); /* dash/dot/dash */ - drawOneLine (250.0, 100.0, 350.0, 100.0); - glLineWidth (1.0); - -/* in 3rd row, 6 lines, with dash/dot/dash stipple */ -/* as part of a single connected line strip */ - glLineStipple (1, 0x1C47); /* dash/dot/dash */ - glBegin (GL_LINE_STRIP); - for (i = 0; i < 7; i++) - glVertex2f (50.0 + ((GLfloat) i * 50.0), 75.0); - glEnd (); - -/* in 4th row, 6 independent lines with same stipple */ - for (i = 0; i < 6; i++) { - drawOneLine (50.0 + ((GLfloat) i * 50.0), 50.0, - 50.0 + ((GLfloat)(i+1) * 50.0), 50.0); - } - -/* in 5th row, 1 line, with dash/dot/dash stipple */ -/* and a stipple repeat factor of 5 */ - glLineStipple (5, 0x1C47); /* dash/dot/dash */ - drawOneLine (50.0, 25.0, 350.0, 25.0); - - glDisable (GL_LINE_STIPPLE); - glFlush (); -} - -void reshape (int w, int h) -{ - glViewport (0, 0, (GLsizei) w, (GLsizei) h); - glMatrixMode (GL_PROJECTION); - glLoadIdentity (); - gluOrtho2D (0.0, (GLdouble) w, 0.0, (GLdouble) h); -} - -/* ARGSUSED1 */ -void keyboard(unsigned char key, int x, int y) -{ - switch (key) { - case 27: - exit(0); - break; - } -} - -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); - glutInitWindowSize (400, 150); - glutInitWindowPosition (100, 100); - glutCreateWindow (argv[0]); - init (); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glutKeyboardFunc(keyboard); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/redbook/lines.dsp b/lib/glut-3.7.6/progs/redbook/lines.dsp deleted file mode 100644 index 0073db707..000000000 --- a/lib/glut-3.7.6/progs/redbook/lines.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="lines" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=lines - 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 "lines.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 "lines.mak" CFG="lines - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "lines - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "lines - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "lines - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "lines - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "lines - Win32 Release" -# Name "lines - Win32 Debug" -# Begin Source File - -SOURCE=.\lines.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/list.c b/lib/glut-3.7.6/progs/redbook/list.c deleted file mode 100644 index 3b4f44bd6..000000000 --- a/lib/glut-3.7.6/progs/redbook/list.c +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -/* - * list.c - * This program demonstrates how to make and execute a - * display list. Note that attributes, such as current - * color and matrix, are changed. - */ -#include -#include - -GLuint listName; - -static void init (void) -{ - listName = glGenLists (1); - glNewList (listName, GL_COMPILE); - glColor3f (1.0, 0.0, 0.0); /* current color red */ - glBegin (GL_TRIANGLES); - glVertex2f (0.0, 0.0); - glVertex2f (1.0, 0.0); - glVertex2f (0.0, 1.0); - glEnd (); - glTranslatef (1.5, 0.0, 0.0); /* move position */ - glEndList (); - glShadeModel (GL_FLAT); -} - -static void drawLine (void) -{ - glBegin (GL_LINES); - glVertex2f (0.0, 0.5); - glVertex2f (15.0, 0.5); - glEnd (); -} - -void display(void) -{ - GLuint i; - - glClear (GL_COLOR_BUFFER_BIT); - glColor3f (0.0, 1.0, 0.0); /* current color green */ - for (i = 0; i < 10; i++) /* draw 10 triangles */ - glCallList (listName); - drawLine (); /* is this line green? NO! */ - /* where is the line drawn? */ - glFlush (); -} - -void reshape(int w, int h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - if (w <= h) - gluOrtho2D (0.0, 2.0, -0.5 * (GLfloat) h/(GLfloat) w, - 1.5 * (GLfloat) h/(GLfloat) w); - else - gluOrtho2D (0.0, 2.0 * (GLfloat) w/(GLfloat) h, -0.5, 1.5); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -/* ARGSUSED1 */ -void keyboard(unsigned char key, int x, int y) -{ - switch (key) { - case 27: - exit(0); - break; - } -} - -/* Main Loop - * Open window with initial window size, title bar, - * RGBA display mode, and handle input events. - */ -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); - glutInitWindowSize(650, 50); - glutCreateWindow(argv[0]); - init (); - glutReshapeFunc (reshape); - glutDisplayFunc (display); - glutKeyboardFunc (keyboard); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/redbook/list.dsp b/lib/glut-3.7.6/progs/redbook/list.dsp deleted file mode 100644 index 351f981e8..000000000 --- a/lib/glut-3.7.6/progs/redbook/list.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="list" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=list - 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 "list.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 "list.mak" CFG="list - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "list - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "list - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "list - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "list - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "list - Win32 Release" -# Name "list - Win32 Debug" -# Begin Source File - -SOURCE=.\list.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/material.c b/lib/glut-3.7.6/progs/redbook/material.c deleted file mode 100644 index f8d6a918f..000000000 --- a/lib/glut-3.7.6/progs/redbook/material.c +++ /dev/null @@ -1,293 +0,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. - */ -/* - * material.c - * This program demonstrates the use of the GL lighting model. - * Several objects are drawn using different material characteristics. - * A single light source illuminates the objects. - */ -#include -#include - -/* Initialize z-buffer, projection matrix, light source, - * and lighting model. Do not specify a material property here. - */ -void myinit(void) -{ - GLfloat ambient[] = { 0.0, 0.0, 0.0, 1.0 }; - GLfloat diffuse[] = { 1.0, 1.0, 1.0, 1.0 }; - GLfloat position[] = { 0.0, 3.0, 2.0, 0.0 }; - GLfloat lmodel_ambient[] = { 0.4, 0.4, 0.4, 1.0 }; - GLfloat local_view[] = { 0.0 }; - - glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_LESS); - - glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); - glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); - glLightfv(GL_LIGHT0, GL_POSITION, position); - glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); - glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, local_view); - - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - - glClearColor(0.0, 0.1, 0.1, 0.0); -} - -/* Draw twelve spheres in 3 rows with 4 columns. - * The spheres in the first row have materials with no ambient reflection. - * The second row has materials with significant ambient reflection. - * The third row has materials with colored ambient reflection. - * - * The first column has materials with blue, diffuse reflection only. - * The second column has blue diffuse reflection, as well as specular - * reflection with a low shininess exponent. - * The third column has blue diffuse reflection, as well as specular - * reflection with a high shininess exponent (a more concentrated highlight). - * The fourth column has materials which also include an emissive component. - * - * glTranslatef() is used to move spheres to their appropriate locations. - */ - -void display(void) -{ - GLfloat no_mat[] = { 0.0, 0.0, 0.0, 1.0 }; - GLfloat mat_ambient[] = { 0.7, 0.7, 0.7, 1.0 }; - GLfloat mat_ambient_color[] = { 0.8, 0.8, 0.2, 1.0 }; - GLfloat mat_diffuse[] = { 0.1, 0.5, 0.8, 1.0 }; - GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; - GLfloat no_shininess[] = { 0.0 }; - GLfloat low_shininess[] = { 5.0 }; - GLfloat high_shininess[] = { 100.0 }; - GLfloat mat_emission[] = {0.3, 0.2, 0.2, 0.0}; - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - -/* draw sphere in first row, first column - * diffuse reflection only; no ambient or specular - */ - glPushMatrix(); - glTranslatef (-3.75, 3.0, 0.0); - glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat); - glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); - glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat); - glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess); - glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); - glutSolidSphere(1.0, 16, 16); - glPopMatrix(); - -/* draw sphere in first row, second column - * diffuse and specular reflection; low shininess; no ambient - */ - glPushMatrix(); - glTranslatef (-1.25, 3.0, 0.0); - glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat); - glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); - glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); - glMaterialfv(GL_FRONT, GL_SHININESS, low_shininess); - glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); - glutSolidSphere(1.0, 16, 16); - glPopMatrix(); - -/* draw sphere in first row, third column - * diffuse and specular reflection; high shininess; no ambient - */ - glPushMatrix(); - glTranslatef (1.25, 3.0, 0.0); - glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat); - glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); - glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); - glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess); - glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); - glutSolidSphere(1.0, 16, 16); - glPopMatrix(); - -/* draw sphere in first row, fourth column - * diffuse reflection; emission; no ambient or specular reflection - */ - glPushMatrix(); - glTranslatef (3.75, 3.0, 0.0); - glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat); - glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); - glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat); - glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess); - glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission); - glutSolidSphere(1.0, 16, 16); - glPopMatrix(); - -/* draw sphere in second row, first column - * ambient and diffuse reflection; no specular - */ - glPushMatrix(); - glTranslatef (-3.75, 0.0, 0.0); - glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); - glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); - glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat); - glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess); - glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); - glutSolidSphere(1.0, 16, 16); - glPopMatrix(); - -/* draw sphere in second row, second column - * ambient, diffuse and specular reflection; low shininess - */ - glPushMatrix(); - glTranslatef (-1.25, 0.0, 0.0); - glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); - glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); - glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); - glMaterialfv(GL_FRONT, GL_SHININESS, low_shininess); - glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); - glutSolidSphere(1.0, 16, 16); - glPopMatrix(); - -/* draw sphere in second row, third column - * ambient, diffuse and specular reflection; high shininess - */ - glPushMatrix(); - glTranslatef (1.25, 0.0, 0.0); - glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); - glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); - glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); - glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess); - glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); - glutSolidSphere(1.0, 16, 16); - glPopMatrix(); - -/* draw sphere in second row, fourth column - * ambient and diffuse reflection; emission; no specular - */ - glPushMatrix(); - glTranslatef (3.75, 0.0, 0.0); - glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); - glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); - glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat); - glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess); - glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission); - glutSolidSphere(1.0, 16, 16); - glPopMatrix(); - -/* draw sphere in third row, first column - * colored ambient and diffuse reflection; no specular - */ - glPushMatrix(); - glTranslatef (-3.75, -3.0, 0.0); - glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient_color); - glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); - glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat); - glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess); - glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); - glutSolidSphere(1.0, 16, 16); - glPopMatrix(); - -/* draw sphere in third row, second column - * colored ambient, diffuse and specular reflection; low shininess - */ - glPushMatrix(); - glTranslatef (-1.25, -3.0, 0.0); - glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient_color); - glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); - glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); - glMaterialfv(GL_FRONT, GL_SHININESS, low_shininess); - glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); - glutSolidSphere(1.0, 16, 16); - glPopMatrix(); - -/* draw sphere in third row, third column - * colored ambient, diffuse and specular reflection; high shininess - */ - glPushMatrix(); - glTranslatef (1.25, -3.0, 0.0); - glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient_color); - glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); - glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); - glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess); - glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); - glutSolidSphere(1.0, 16, 16); - glPopMatrix(); - -/* draw sphere in third row, fourth column - * colored ambient and diffuse reflection; emission; no specular - */ - glPushMatrix(); - glTranslatef (3.75, -3.0, 0.0); - glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient_color); - glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); - glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat); - glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess); - glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission); - glutSolidSphere(1.0, 16, 16); - glPopMatrix(); - - glFlush(); -} - -void myReshape(int w, int h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - if (w <= (h * 2)) - glOrtho (-6.0, 6.0, -3.0*((GLfloat)h*2)/(GLfloat)w, - 3.0*((GLfloat)h*2)/(GLfloat)w, -10.0, 10.0); - else - glOrtho (-6.0*(GLfloat)w/((GLfloat)h*2), - 6.0*(GLfloat)w/((GLfloat)h*2), -3.0, 3.0, -10.0, 10.0); - glMatrixMode(GL_MODELVIEW); -} - -/* Main Loop - * Open window with initial window size, title bar, - * RGBA display mode, and handle input events. - */ -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); - glutInitWindowSize (600, 450); - glutCreateWindow(argv[0]); - myinit(); - glutReshapeFunc(myReshape); - glutDisplayFunc(display); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} - diff --git a/lib/glut-3.7.6/progs/redbook/material.dsp b/lib/glut-3.7.6/progs/redbook/material.dsp deleted file mode 100644 index 0d28290f8..000000000 --- a/lib/glut-3.7.6/progs/redbook/material.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="material" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=material - 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 "material.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 "material.mak" CFG="material - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "material - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "material - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "material - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "material - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "material - Win32 Release" -# Name "material - Win32 Debug" -# Begin Source File - -SOURCE=.\material.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/mipmap.c b/lib/glut-3.7.6/progs/redbook/mipmap.c deleted file mode 100644 index 96ef394f6..000000000 --- a/lib/glut-3.7.6/progs/redbook/mipmap.c +++ /dev/null @@ -1,165 +0,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. - */ -/* mipmap.c - * This program demonstrates using mipmaps for texture maps. - * To overtly show the effect of mipmaps, each mipmap reduction - * level has a solidly colored, contrasting texture image. - * Thus, the quadrilateral which is drawn is drawn with several - * different colors. - */ -#include -#include - -GLubyte mipmapImage32[32][32][3]; -GLubyte mipmapImage16[16][16][3]; -GLubyte mipmapImage8[8][8][3]; -GLubyte mipmapImage4[4][4][3]; -GLubyte mipmapImage2[2][2][3]; -GLubyte mipmapImage1[1][1][3]; - -void makeImages(void) -{ - int i, j; - - for (i = 0; i < 32; i++) { - for (j = 0; j < 32; j++) { - mipmapImage32[i][j][0] = 255; - mipmapImage32[i][j][1] = 255; - mipmapImage32[i][j][2] = 0; - } - } - for (i = 0; i < 16; i++) { - for (j = 0; j < 16; j++) { - mipmapImage16[i][j][0] = 255; - mipmapImage16[i][j][1] = 0; - mipmapImage16[i][j][2] = 255; - } - } - for (i = 0; i < 8; i++) { - for (j = 0; j < 8; j++) { - mipmapImage8[i][j][0] = 255; - mipmapImage8[i][j][1] = 0; - mipmapImage8[i][j][2] = 0; - } - } - for (i = 0; i < 4; i++) { - for (j = 0; j < 4; j++) { - mipmapImage4[i][j][0] = 0; - mipmapImage4[i][j][1] = 255; - mipmapImage4[i][j][2] = 0; - } - } - for (i = 0; i < 2; i++) { - for (j = 0; j < 2; j++) { - mipmapImage2[i][j][0] = 0; - mipmapImage2[i][j][1] = 0; - mipmapImage2[i][j][2] = 255; - } - } - mipmapImage1[0][0][0] = 255; - mipmapImage1[0][0][1] = 255; - mipmapImage1[0][0][2] = 255; -} - -void myinit(void) -{ - glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_LESS); - glShadeModel(GL_FLAT); - - glTranslatef(0.0, 0.0, -3.6); - makeImages(); - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - glTexImage2D(GL_TEXTURE_2D, 0, 3, 32, 32, 0, - GL_RGB, GL_UNSIGNED_BYTE, &mipmapImage32[0][0][0]); - glTexImage2D(GL_TEXTURE_2D, 1, 3, 16, 16, 0, - GL_RGB, GL_UNSIGNED_BYTE, &mipmapImage16[0][0][0]); - glTexImage2D(GL_TEXTURE_2D, 2, 3, 8, 8, 0, - GL_RGB, GL_UNSIGNED_BYTE, &mipmapImage8[0][0][0]); - glTexImage2D(GL_TEXTURE_2D, 3, 3, 4, 4, 0, - GL_RGB, GL_UNSIGNED_BYTE, &mipmapImage4[0][0][0]); - glTexImage2D(GL_TEXTURE_2D, 4, 3, 2, 2, 0, - GL_RGB, GL_UNSIGNED_BYTE, &mipmapImage2[0][0][0]); - glTexImage2D(GL_TEXTURE_2D, 5, 3, 1, 1, 0, - GL_RGB, GL_UNSIGNED_BYTE, &mipmapImage1[0][0][0]); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, - GL_NEAREST_MIPMAP_NEAREST); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); - glEnable(GL_TEXTURE_2D); -} - -void display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glBegin(GL_QUADS); - glTexCoord2f(0.0, 0.0); glVertex3f(-2.0, -1.0, 0.0); - glTexCoord2f(0.0, 8.0); glVertex3f(-2.0, 1.0, 0.0); - glTexCoord2f(8.0, 8.0); glVertex3f(2000.0, 1.0, -6000.0); - glTexCoord2f(8.0, 0.0); glVertex3f(2000.0, -1.0, -6000.0); - glEnd(); - glFlush(); -} - -void myReshape(int w, int h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(60.0, 1.0*(GLfloat)w/(GLfloat)h, 1.0, 30000.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); - glutInitWindowSize (500, 500); - glutCreateWindow (argv[0]); - myinit(); - glutReshapeFunc (myReshape); - glutDisplayFunc(display); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} - diff --git a/lib/glut-3.7.6/progs/redbook/mipmap.dsp b/lib/glut-3.7.6/progs/redbook/mipmap.dsp deleted file mode 100644 index cb0eb383b..000000000 --- a/lib/glut-3.7.6/progs/redbook/mipmap.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="mipmap" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=mipmap - 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 "mipmap.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 "mipmap.mak" CFG="mipmap - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "mipmap - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "mipmap - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "mipmap - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "mipmap - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "mipmap - Win32 Release" -# Name "mipmap - Win32 Debug" -# Begin Source File - -SOURCE=.\mipmap.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/model.c b/lib/glut-3.7.6/progs/redbook/model.c deleted file mode 100644 index 8411ef355..000000000 --- a/lib/glut-3.7.6/progs/redbook/model.c +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -/* - * model.c - * This program demonstrates modeling transformations - */ -#include -#include - -void init(void) -{ - glClearColor (0.0, 0.0, 0.0, 0.0); - glShadeModel (GL_FLAT); -} - -void draw_triangle(void) -{ - glBegin (GL_LINE_LOOP); - glVertex2f(0.0, 25.0); - glVertex2f(25.0, -25.0); - glVertex2f(-25.0, -25.0); - glEnd(); -} - -void display(void) -{ - glClear (GL_COLOR_BUFFER_BIT); - glColor3f (1.0, 1.0, 1.0); - - glLoadIdentity (); - glColor3f (1.0, 1.0, 1.0); - draw_triangle (); - - glEnable (GL_LINE_STIPPLE); - glLineStipple (1, 0xF0F0); - glLoadIdentity (); - glTranslatef (-20.0, 0.0, 0.0); - draw_triangle (); - - glLineStipple (1, 0xF00F); - glLoadIdentity (); - glScalef (1.5, 0.5, 1.0); - draw_triangle (); - - glLineStipple (1, 0x8888); - glLoadIdentity (); - glRotatef (90.0, 0.0, 0.0, 1.0); - draw_triangle (); - glDisable (GL_LINE_STIPPLE); - - glFlush (); -} - -void reshape (int w, int h) -{ - glViewport (0, 0, (GLsizei) w, (GLsizei) h); - glMatrixMode (GL_PROJECTION); - glLoadIdentity (); - if (w <= h) - glOrtho (-50.0, 50.0, -50.0*(GLfloat)h/(GLfloat)w, - 50.0*(GLfloat)h/(GLfloat)w, -1.0, 1.0); - else - glOrtho (-50.0*(GLfloat)w/(GLfloat)h, - 50.0*(GLfloat)w/(GLfloat)h, -50.0, 50.0, -1.0, 1.0); - glMatrixMode(GL_MODELVIEW); -} - -/* ARGSUSED1 */ -void keyboard(unsigned char key, int x, int y) -{ - switch (key) { - case 27: - exit(0); - break; - } -} - -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); - glutInitWindowSize (500, 500); - glutInitWindowPosition (100, 100); - glutCreateWindow (argv[0]); - init (); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glutKeyboardFunc (keyboard); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/redbook/model.dsp b/lib/glut-3.7.6/progs/redbook/model.dsp deleted file mode 100644 index d4e811d9f..000000000 --- a/lib/glut-3.7.6/progs/redbook/model.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="model" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=model - 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 "model.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 "model.mak" CFG="model - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "model - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "model - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "model - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "model - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "model - Win32 Release" -# Name "model - Win32 Debug" -# Begin Source File - -SOURCE=.\model.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/movelight.c b/lib/glut-3.7.6/progs/redbook/movelight.c deleted file mode 100644 index a108cad43..000000000 --- a/lib/glut-3.7.6/progs/redbook/movelight.c +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -/* - * movelight.c - * This program demonstrates when to issue lighting and - * transformation commands to render a model with a light - * which is moved by a modeling transformation (rotate or - * translate). The light position is reset after the modeling - * transformation is called. The eye position does not change. - * - * A sphere is drawn using a grey material characteristic. - * A single light source illuminates the object. - * - * Interaction: pressing the left mouse button alters - * the modeling transformation (x rotation) by 30 degrees. - * The scene is then redrawn with the light in a new position. - */ -#include -#include - -static int spin = 0; - -/* Initialize material property, light source, lighting model, - * and depth buffer. - */ -void init(void) -{ - glClearColor (0.0, 0.0, 0.0, 0.0); - glShadeModel (GL_SMOOTH); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_DEPTH_TEST); -} - -/* Here is where the light position is reset after the modeling - * transformation (glRotated) is called. This places the - * light at a new position in world coordinates. The cube - * represents the position of the light. - */ -void display(void) -{ - GLfloat position[] = { 0.0, 0.0, 1.5, 1.0 }; - - glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glPushMatrix (); - gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); - - glPushMatrix (); - glRotated ((GLdouble) spin, 1.0, 0.0, 0.0); - glLightfv (GL_LIGHT0, GL_POSITION, position); - - glTranslated (0.0, 0.0, 1.5); - glDisable (GL_LIGHTING); - glColor3f (0.0, 1.0, 1.0); - glutWireCube (0.1); - glEnable (GL_LIGHTING); - glPopMatrix (); - - glutSolidTorus (0.275, 0.85, 8, 15); - glPopMatrix (); - glFlush (); -} - -void reshape (int w, int h) -{ - glViewport (0, 0, (GLsizei) w, (GLsizei) h); - glMatrixMode (GL_PROJECTION); - glLoadIdentity(); - gluPerspective(40.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -/* ARGSUSED2 */ -void mouse(int button, int state, int x, int y) -{ - switch (button) { - case GLUT_LEFT_BUTTON: - if (state == GLUT_DOWN) { - spin = (spin + 30) % 360; - glutPostRedisplay(); - } - break; - default: - break; - } -} - -/* ARGSUSED1 */ -void keyboard(unsigned char key, int x, int y) -{ - switch (key) { - case 27: - exit(0); - break; - } -} - -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); - glutInitWindowSize (500, 500); - glutInitWindowPosition (100, 100); - glutCreateWindow (argv[0]); - init (); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glutMouseFunc(mouse); - glutKeyboardFunc(keyboard); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/redbook/movelight.dsp b/lib/glut-3.7.6/progs/redbook/movelight.dsp deleted file mode 100644 index 514fc5434..000000000 --- a/lib/glut-3.7.6/progs/redbook/movelight.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="movelight" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=movelight - 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 "movelight.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 "movelight.mak" CFG="movelight - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "movelight - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "movelight - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "movelight - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "movelight - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "movelight - Win32 Release" -# Name "movelight - Win32 Debug" -# Begin Source File - -SOURCE=.\movelight.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/nurbs.c b/lib/glut-3.7.6/progs/redbook/nurbs.c deleted file mode 100644 index 513868e7d..000000000 --- a/lib/glut-3.7.6/progs/redbook/nurbs.c +++ /dev/null @@ -1,176 +0,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. - */ -/* - * nurbs.c - * This program shows a NURBS (Non-uniform rational B-splines) - * surface, shaped like a heart. - */ -#include -#include - -#define S_NUMPOINTS 13 -#define S_ORDER 3 -#define S_NUMKNOTS (S_NUMPOINTS + S_ORDER) -#define T_NUMPOINTS 3 -#define T_ORDER 3 -#define T_NUMKNOTS (T_NUMPOINTS + T_ORDER) -#define SQRT2 1.41421356237309504880 - -/* initialized local data */ - -GLfloat sknots[S_NUMKNOTS] = - {-1.0, -1.0, -1.0, 0.0, 1.0, 2.0, 3.0, 4.0, - 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 9.0, 9.0}; -GLfloat tknots[T_NUMKNOTS] = {1.0, 1.0, 1.0, 2.0, 2.0, 2.0}; - -GLfloat ctlpoints[S_NUMPOINTS][T_NUMPOINTS][4] = { -{ {4.,2.,2.,1.},{4.,1.6,2.5,1.},{4.,2.,3.0,1.} }, -{ {5.,4.,2.,1.},{5.,4.,2.5,1.},{5.,4.,3.0,1.} }, -{ {6.,5.,2.,1.},{6.,5.,2.5,1.},{6.,5.,3.0,1.} }, -{ {SQRT2*6.,SQRT2*6.,SQRT2*2.,SQRT2}, - {SQRT2*6.,SQRT2*6.,SQRT2*2.5,SQRT2}, - {SQRT2*6.,SQRT2*6.,SQRT2*3.0,SQRT2} }, -{ {5.2,6.7,2.,1.},{5.2,6.7,2.5,1.},{5.2,6.7,3.0,1.} }, -{ {SQRT2*4.,SQRT2*6.,SQRT2*2.,SQRT2}, - {SQRT2*4.,SQRT2*6.,SQRT2*2.5,SQRT2}, - {SQRT2*4.,SQRT2*6.,SQRT2*3.0,SQRT2} }, -{ {4.,5.2,2.,1.},{4.,4.6,2.5,1.},{4.,5.2,3.0,1.} }, -{ {SQRT2*4.,SQRT2*6.,SQRT2*2.,SQRT2}, - {SQRT2*4.,SQRT2*6.,SQRT2*2.5,SQRT2}, - {SQRT2*4.,SQRT2*6.,SQRT2*3.0,SQRT2} }, -{ {2.8,6.7,2.,1.},{2.8,6.7,2.5,1.},{2.8,6.7,3.0,1.} }, -{ {SQRT2*2.,SQRT2*6.,SQRT2*2.,SQRT2}, - {SQRT2*2.,SQRT2*6.,SQRT2*2.5,SQRT2}, - {SQRT2*2.,SQRT2*6.,SQRT2*3.0,SQRT2} }, -{ {2.,5.,2.,1.},{2.,5.,2.5,1.},{2.,5.,3.0,1.} }, -{ {3.,4.,2.,1.},{3.,4.,2.5,1.},{3.,4.,3.0,1.} }, -{ {4.,2.,2.,1.},{4.,1.6,2.5,1.},{4.,2.,3.0,1.} } -}; - -GLUnurbsObj *theNurb; - -/* Initialize material property, light source, lighting model, - * and depth buffer. - */ -void myinit(void) -{ - GLfloat mat_ambient[] = { 1.0, 1.0, 1.0, 1.0 }; - GLfloat mat_diffuse[] = { 1.0, 0.2, 1.0, 1.0 }; - GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; - GLfloat mat_shininess[] = { 50.0 }; - - GLfloat light0_position[] = { 1.0, 0.1, 1.0, 0.0 }; - GLfloat light1_position[] = { -1.0, 0.1, 1.0, 0.0 }; - - GLfloat lmodel_ambient[] = { 0.3, 0.3, 0.3, 1.0 }; - - glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); - glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); - glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); - glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); - glLightfv(GL_LIGHT0, GL_POSITION, light0_position); - glLightfv(GL_LIGHT1, GL_POSITION, light1_position); - glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); - - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_LIGHT1); - glDepthFunc(GL_LESS); - glEnable(GL_DEPTH_TEST); - glEnable(GL_AUTO_NORMAL); - - theNurb = gluNewNurbsRenderer(); - - gluNurbsProperty(theNurb, GLU_SAMPLING_TOLERANCE, 25.0); - gluNurbsProperty(theNurb, GLU_DISPLAY_MODE, GLU_FILL); -} - -void display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glPushMatrix(); - glTranslatef (4., 4.5, 2.5); - glRotatef (220.0, 1., 0., 0.); - glRotatef (115.0, 0., 1., 0.); - glTranslatef (-4., -4.5, -2.5); - - gluBeginSurface(theNurb); - gluNurbsSurface(theNurb, - S_NUMKNOTS, sknots, - T_NUMKNOTS, tknots, - 4 * T_NUMPOINTS, - 4, - &ctlpoints[0][0][0], - S_ORDER, T_ORDER, - GL_MAP2_VERTEX_4); - gluEndSurface(theNurb); - - glPopMatrix(); - glFlush(); -} - -void myReshape(int w, int h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glFrustum(-1.0, 1.0, -1.5, 0.5, 0.8, 10.0); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - gluLookAt(7.0,4.5,4.0, 4.5,4.5,2.0, 6.0,-3.0,2.0); -} - -/* Main Loop - * Open window with initial window size, title bar, - * RGBA display mode, and handle input events. - */ -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); - glutCreateWindow (argv[0]); - myinit(); - glutReshapeFunc (myReshape); - glutDisplayFunc(display); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/redbook/nurbs.dsp b/lib/glut-3.7.6/progs/redbook/nurbs.dsp deleted file mode 100644 index ff8defc9d..000000000 --- a/lib/glut-3.7.6/progs/redbook/nurbs.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="nurbs" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=nurbs - 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 "nurbs.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 "nurbs.mak" CFG="nurbs - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "nurbs - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "nurbs - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "nurbs - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "nurbs - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "nurbs - Win32 Release" -# Name "nurbs - Win32 Debug" -# Begin Source File - -SOURCE=.\nurbs.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/pickdepth.c b/lib/glut-3.7.6/progs/redbook/pickdepth.c deleted file mode 100644 index a9683e191..000000000 --- a/lib/glut-3.7.6/progs/redbook/pickdepth.c +++ /dev/null @@ -1,204 +0,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. - */ -/* - * pickdepth.c - * Picking is demonstrated in this program. In - * rendering mode, three overlapping rectangles are - * drawn. When the left mouse button is pressed, - * selection mode is entered with the picking matrix. - * Rectangles which are drawn under the cursor position - * are "picked." Pay special attention to the depth - * value range, which is returned. - */ -#include -#include -#include - -void -myinit(void) -{ - glClearColor(0.0, 0.0, 0.0, 0.0); - glDepthFunc(GL_LESS); - glEnable(GL_DEPTH_TEST); - glShadeModel(GL_FLAT); - glDepthRange(0.0, 1.0); /* The default z mapping */ -} - -/* The three rectangles are drawn. In selection mode, - * each rectangle is given the same name. Note that - * each rectangle is drawn with a different z value. - */ -void -drawRects(GLenum mode) -{ - if (mode == GL_SELECT) - glLoadName(1); - glBegin(GL_QUADS); - glColor3f(1.0, 1.0, 0.0); - glVertex3i(2, 0, 0); - glVertex3i(2, 6, 0); - glVertex3i(6, 6, 0); - glVertex3i(6, 0, 0); - glEnd(); - if (mode == GL_SELECT) - glLoadName(2); - glBegin(GL_QUADS); - glColor3f(0.0, 1.0, 1.0); - glVertex3i(3, 2, -1); - glVertex3i(3, 8, -1); - glVertex3i(8, 8, -1); - glVertex3i(8, 2, -1); - glEnd(); - if (mode == GL_SELECT) - glLoadName(3); - glBegin(GL_QUADS); - glColor3f(1.0, 0.0, 1.0); - glVertex3i(0, 2, -2); - glVertex3i(0, 7, -2); - glVertex3i(5, 7, -2); - glVertex3i(5, 2, -2); - glEnd(); -} - -/* processHits() prints out the contents of the - * selection array. - */ -void -processHits(GLint hits, GLuint buffer[]) -{ - int i; - unsigned int j; - GLuint names, *ptr; - - printf("hits = %d\n", hits); - ptr = (GLuint *) buffer; - for (i = 0; i < hits; i++) { /* for each hit */ - names = *ptr; - printf(" number of names for hit = %d\n", names); - ptr++; - printf(" z1 is %g;", (float) *ptr/0xffffffff); - ptr++; - printf(" z2 is %g\n", (float) *ptr/0xffffffff); - ptr++; - printf(" the name is "); - for (j = 0; j < names; j++) { /* for each name */ - printf("%d ", *ptr); - ptr++; - } - printf("\n"); - } -} - -/* pickRects() sets up selection mode, name stack, - * and projection matrix for picking. Then the objects - * are drawn. - */ -#define BUFSIZE 512 - -void -pickRects(int button, int state, int x, int y) -{ - GLuint selectBuf[BUFSIZE]; - GLint hits; - GLint viewport[4]; - - if (button != GLUT_LEFT_BUTTON || state != GLUT_DOWN) - return; - - glGetIntegerv(GL_VIEWPORT, viewport); - - glSelectBuffer(BUFSIZE, selectBuf); - (void) glRenderMode(GL_SELECT); - - glInitNames(); - glPushName((GLuint) ~0); - - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); -/* create 5x5 pixel picking region near cursor location */ - gluPickMatrix((GLdouble) x, (GLdouble) (viewport[3] - y), - 5.0, 5.0, viewport); - glOrtho(0.0, 8.0, 0.0, 8.0, -0.5, 2.5); - drawRects(GL_SELECT); - glPopMatrix(); - glFlush(); - - hits = glRenderMode(GL_RENDER); - processHits(hits, selectBuf); -} - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - drawRects(GL_RENDER); - glutSwapBuffers(); -} - -void -myReshape(int w, int h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho(0.0, 8.0, 0.0, 8.0, -0.5, 2.5); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -/* Main Loop - * Open window with initial window size, title bar, - * RGBA display mode, depth buffer, and handle input events. - */ -int -main(int argc, char **argv) -{ - glutInitWindowSize(200, 200); - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); - glutInit(&argc, argv); - glutCreateWindow(argv[0]); - myinit(); - glutMouseFunc(pickRects); - glutReshapeFunc(myReshape); - glutDisplayFunc(display); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/redbook/pickdepth.dsp b/lib/glut-3.7.6/progs/redbook/pickdepth.dsp deleted file mode 100644 index c363ea17a..000000000 --- a/lib/glut-3.7.6/progs/redbook/pickdepth.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="pickdepth" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=pickdepth - 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 "pickdepth.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 "pickdepth.mak" CFG="pickdepth - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "pickdepth - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "pickdepth - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "pickdepth - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "pickdepth - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "pickdepth - Win32 Release" -# Name "pickdepth - Win32 Debug" -# Begin Source File - -SOURCE=.\pickdepth.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/picksquare.c b/lib/glut-3.7.6/progs/redbook/picksquare.c deleted file mode 100644 index 0a12aa0fa..000000000 --- a/lib/glut-3.7.6/progs/redbook/picksquare.c +++ /dev/null @@ -1,197 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -/* - * picksquare.c - * Use of multiple names and picking are demonstrated. - * A 3x3 grid of squares is drawn. When the left mouse - * button is pressed, all squares under the cursor position - * have their color changed. - */ -#include -#include -#include - -int board[3][3]; /* amount of color for each square */ - -/* Clear color value for every square on the board */ -void init(void) -{ - int i, j; - for (i = 0; i < 3; i++) - for (j = 0; j < 3; j ++) - board[i][j] = 0; - glClearColor (0.0, 0.0, 0.0, 0.0); -} - -/* The nine squares are drawn. In selection mode, each - * square is given two names: one for the row and the - * other for the column on the grid. The color of each - * square is determined by its position on the grid, and - * the value in the board[][] array. - */ -void drawSquares(GLenum mode) -{ - GLuint i, j; - for (i = 0; i < 3; i++) { - if (mode == GL_SELECT) - glLoadName (i); - for (j = 0; j < 3; j ++) { - if (mode == GL_SELECT) - glPushName (j); - glColor3f ((GLfloat) i/3.0, (GLfloat) j/3.0, - (GLfloat) board[i][j]/3.0); - glRecti (i, j, i+1, j+1); - if (mode == GL_SELECT) - glPopName (); - } - } -} - -/* processHits prints out the contents of the - * selection array. - */ -void processHits (GLint hits, GLuint buffer[]) -{ - unsigned int i, j; - GLuint ii, jj, names, *ptr; - - printf ("hits = %d\n", hits); - ptr = (GLuint *) buffer; - for (i = 0; i < hits; i++) { /* for each hit */ - names = *ptr; - printf (" number of names for this hit = %d\n", names); ptr++; - printf(" z1 is %g;", (float) *ptr/0x7fffffff); ptr++; - printf(" z2 is %g\n", (float) *ptr/0x7fffffff); ptr++; - printf (" names are "); - for (j = 0; j < names; j++) { /* for each name */ - printf ("%d ", *ptr); - if (j == 0) /* set row and column */ - ii = *ptr; - else if (j == 1) - jj = *ptr; - ptr++; - } - printf ("\n"); - board[ii][jj] = (board[ii][jj] + 1) % 3; - } -} - -/* pickSquares() sets up selection mode, name stack, - * and projection matrix for picking. Then the - * objects are drawn. - */ -#define BUFSIZE 512 - -void pickSquares(int button, int state, int x, int y) -{ - GLuint selectBuf[BUFSIZE]; - GLint hits; - GLint viewport[4]; - - if (button != GLUT_LEFT_BUTTON || state != GLUT_DOWN) - return; - - glGetIntegerv (GL_VIEWPORT, viewport); - - glSelectBuffer (BUFSIZE, selectBuf); - (void) glRenderMode (GL_SELECT); - - glInitNames(); - glPushName(0); - - glMatrixMode (GL_PROJECTION); - glPushMatrix (); - glLoadIdentity (); -/* create 5x5 pixel picking region near cursor location */ - gluPickMatrix ((GLdouble) x, (GLdouble) (viewport[3] - y), - 5.0, 5.0, viewport); - gluOrtho2D (0.0, 3.0, 0.0, 3.0); - drawSquares (GL_SELECT); - - glMatrixMode (GL_PROJECTION); - glPopMatrix (); - glFlush (); - - hits = glRenderMode (GL_RENDER); - processHits (hits, selectBuf); - glutPostRedisplay(); -} - -void display(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - drawSquares (GL_RENDER); - glFlush(); -} - -void reshape(int w, int h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluOrtho2D (0.0, 3.0, 0.0, 3.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -/* ARGSUSED1 */ -void keyboard(unsigned char key, int x, int y) -{ - switch (key) { - case 27: - exit(0); - break; - } -} - -/* Main Loop */ -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); - glutInitWindowSize (100, 100); - glutInitWindowPosition (100, 100); - glutCreateWindow (argv[0]); - init (); - glutReshapeFunc (reshape); - glutDisplayFunc(display); - glutMouseFunc (pickSquares); - glutKeyboardFunc (keyboard); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/redbook/picksquare.dsp b/lib/glut-3.7.6/progs/redbook/picksquare.dsp deleted file mode 100644 index d96ab3644..000000000 --- a/lib/glut-3.7.6/progs/redbook/picksquare.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="picksquare" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=picksquare - 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 "picksquare.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 "picksquare.mak" CFG="picksquare - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "picksquare - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "picksquare - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "picksquare - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "picksquare - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "picksquare - Win32 Release" -# Name "picksquare - Win32 Debug" -# Begin Source File - -SOURCE=.\picksquare.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/plane.c b/lib/glut-3.7.6/progs/redbook/plane.c deleted file mode 100644 index 2b0cca06f..000000000 --- a/lib/glut-3.7.6/progs/redbook/plane.c +++ /dev/null @@ -1,157 +0,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. - */ -/* - * plane.c - * This program demonstrates the use of local versus - * infinite lighting on a flat plane. - */ -#include -#include - -/* Initialize material property, light source, and lighting model. - */ -void myinit(void) -{ - GLfloat mat_ambient[] = { 0.0, 0.0, 0.0, 1.0 }; -/* mat_specular and mat_shininess are NOT default values */ - GLfloat mat_diffuse[] = { 0.4, 0.4, 0.4, 1.0 }; - GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; - GLfloat mat_shininess[] = { 15.0 }; - - GLfloat light_ambient[] = { 0.0, 0.0, 0.0, 1.0 }; - GLfloat light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 }; - GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 }; - GLfloat lmodel_ambient[] = { 0.2, 0.2, 0.2, 1.0 }; - - glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); - glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); - glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); - glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); - glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); - glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); - glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); - glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); - - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glDepthFunc(GL_LESS); - glEnable(GL_DEPTH_TEST); -} - -void drawPlane(void) -{ - glBegin (GL_QUADS); - glNormal3f (0.0, 0.0, 1.0); - glVertex3f (-1.0, -1.0, 0.0); - glVertex3f (0.0, -1.0, 0.0); - glVertex3f (0.0, 0.0, 0.0); - glVertex3f (-1.0, 0.0, 0.0); - - glNormal3f (0.0, 0.0, 1.0); - glVertex3f (0.0, -1.0, 0.0); - glVertex3f (1.0, -1.0, 0.0); - glVertex3f (1.0, 0.0, 0.0); - glVertex3f (0.0, 0.0, 0.0); - - glNormal3f (0.0, 0.0, 1.0); - glVertex3f (0.0, 0.0, 0.0); - glVertex3f (1.0, 0.0, 0.0); - glVertex3f (1.0, 1.0, 0.0); - glVertex3f (0.0, 1.0, 0.0); - - glNormal3f (0.0, 0.0, 1.0); - glVertex3f (0.0, 0.0, 0.0); - glVertex3f (0.0, 1.0, 0.0); - glVertex3f (-1.0, 1.0, 0.0); - glVertex3f (-1.0, 0.0, 0.0); - glEnd(); -} - -void display (void) -{ - GLfloat infinite_light[] = { 1.0, 1.0, 1.0, 0.0 }; - GLfloat local_light[] = { 1.0, 1.0, 1.0, 1.0 }; - - glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glPushMatrix (); - glTranslatef (-1.5, 0.0, 0.0); - glLightfv (GL_LIGHT0, GL_POSITION, infinite_light); - drawPlane (); - glPopMatrix (); - - glPushMatrix (); - glTranslatef (1.5, 0.0, 0.0); - glLightfv (GL_LIGHT0, GL_POSITION, local_light); - drawPlane (); - glPopMatrix (); - glFlush (); -} - -void myReshape(int w, int h) -{ - glViewport (0, 0, w, h); - glMatrixMode (GL_PROJECTION); - glLoadIdentity (); - if (w <= h) - glOrtho (-1.5, 1.5, -1.5*(GLdouble)h/(GLdouble)w, - 1.5*(GLdouble)h/(GLdouble)w, -10.0, 10.0); - else - glOrtho (-1.5*(GLdouble)w/(GLdouble)h, - 1.5*(GLdouble)w/(GLdouble)h, -1.5, 1.5, -10.0, 10.0); - glMatrixMode (GL_MODELVIEW); -} - -/* Main Loop - * Open window with initial window size, title bar, - * RGBA display mode, and handle input events. - */ -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); - glutInitWindowSize (500, 200); - glutCreateWindow (argv[0]); - myinit(); - glutReshapeFunc (myReshape); - glutDisplayFunc(display); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/redbook/plane.dsp b/lib/glut-3.7.6/progs/redbook/plane.dsp deleted file mode 100644 index 0b98e1b0f..000000000 --- a/lib/glut-3.7.6/progs/redbook/plane.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="plane" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=plane - 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 "plane.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 "plane.mak" CFG="plane - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "plane - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "plane - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "plane - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "plane - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "plane - Win32 Release" -# Name "plane - Win32 Debug" -# Begin Source File - -SOURCE=.\plane.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/planet.c b/lib/glut-3.7.6/progs/redbook/planet.c deleted file mode 100644 index e13672d3f..000000000 --- a/lib/glut-3.7.6/progs/redbook/planet.c +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -/* - * planet.c - * This program shows how to composite modeling transformations - * to draw translated and rotated models. - * Interaction: pressing the d and y keys (day and year) - * alters the rotation of the planet around the sun. - */ -#include -#include - -static int year = 0, day = 0; - -void init(void) -{ - glClearColor (0.0, 0.0, 0.0, 0.0); - glShadeModel (GL_FLAT); -} - -void display(void) -{ - glClear (GL_COLOR_BUFFER_BIT); - glColor3f (1.0, 1.0, 1.0); - - glPushMatrix(); - glutWireSphere(1.0, 20, 16); /* draw sun */ - glRotatef ((GLfloat) year, 0.0, 1.0, 0.0); - glTranslatef (2.0, 0.0, 0.0); - glRotatef ((GLfloat) day, 0.0, 1.0, 0.0); - glutWireSphere(0.2, 10, 8); /* draw smaller planet */ - glPopMatrix(); - glutSwapBuffers(); -} - -void reshape (int w, int h) -{ - glViewport (0, 0, (GLsizei) w, (GLsizei) h); - glMatrixMode (GL_PROJECTION); - glLoadIdentity (); - gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); -} - -/* ARGSUSED1 */ -void keyboard (unsigned char key, int x, int y) -{ - switch (key) { - case 'd': - day = (day + 10) % 360; - glutPostRedisplay(); - break; - case 'D': - day = (day - 10) % 360; - glutPostRedisplay(); - break; - case 'y': - year = (year + 5) % 360; - glutPostRedisplay(); - break; - case 'Y': - year = (year - 5) % 360; - glutPostRedisplay(); - break; - case 27: - exit(0); - break; - default: - break; - } -} - -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB); - glutInitWindowSize (500, 500); - glutInitWindowPosition (100, 100); - glutCreateWindow (argv[0]); - init (); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glutKeyboardFunc(keyboard); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/redbook/planet.dsp b/lib/glut-3.7.6/progs/redbook/planet.dsp deleted file mode 100644 index 13b0871a4..000000000 --- a/lib/glut-3.7.6/progs/redbook/planet.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="planet" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=planet - 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 "planet.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 "planet.mak" CFG="planet - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "planet - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "planet - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "planet - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "planet - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "planet - Win32 Release" -# Name "planet - Win32 Debug" -# Begin Source File - -SOURCE=.\planet.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/polyoff.c b/lib/glut-3.7.6/progs/redbook/polyoff.c deleted file mode 100644 index 42887c9e0..000000000 --- a/lib/glut-3.7.6/progs/redbook/polyoff.c +++ /dev/null @@ -1,237 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -/* - * polyoff.c - * This program demonstrates polygon offset to draw a shaded - * polygon and its wireframe counterpart without ugly visual - * artifacts ("stitching"). - */ -#include -#include -#include - -#ifdef GL_VERSION_1_1 -GLuint list; -GLint spinx = 0; -GLint spiny = 0; -GLfloat tdist = 0.0; -GLfloat polyfactor = 1.0; -GLfloat polyunits = 1.0; - -/* display() draws two spheres, one with a gray, diffuse material, - * the other sphere with a magenta material with a specular highlight. - */ -void display (void) -{ - GLfloat gray[] = { 0.8, 0.8, 0.8, 1.0 }; - GLfloat black[] = { 0.0, 0.0, 0.0, 1.0 }; - - glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glPushMatrix (); - glTranslatef (0.0, 0.0, tdist); - glRotatef ((GLfloat) spinx, 1.0, 0.0, 0.0); - glRotatef ((GLfloat) spiny, 0.0, 1.0, 0.0); - - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, gray); - glMaterialfv(GL_FRONT, GL_SPECULAR, black); - glMaterialf(GL_FRONT, GL_SHININESS, 0.0); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_POLYGON_OFFSET_FILL); - glPolygonOffset(polyfactor, polyunits); - glCallList (list); - glDisable(GL_POLYGON_OFFSET_FILL); - - glDisable(GL_LIGHTING); - glDisable(GL_LIGHT0); - glColor3f (1.0, 1.0, 1.0); - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - glCallList (list); - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - - glPopMatrix (); - glFlush (); -} - -/* specify initial properties - * create display list with sphere - * initialize lighting and depth buffer - */ -void gfxinit (void) -{ - GLfloat light_ambient[] = { 0.0, 0.0, 0.0, 1.0 }; - GLfloat light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 }; - GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 }; - GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 }; - - GLfloat global_ambient[] = { 0.2, 0.2, 0.2, 1.0 }; - - glClearColor (0.0, 0.0, 0.0, 1.0); - - list = glGenLists(1); - glNewList (list, GL_COMPILE); - glutSolidSphere(1.0, 20, 12); - glEndList (); - - glEnable(GL_DEPTH_TEST); - - glLightfv (GL_LIGHT0, GL_AMBIENT, light_ambient); - glLightfv (GL_LIGHT0, GL_DIFFUSE, light_diffuse); - glLightfv (GL_LIGHT0, GL_SPECULAR, light_specular); - glLightfv (GL_LIGHT0, GL_POSITION, light_position); - glLightModelfv (GL_LIGHT_MODEL_AMBIENT, global_ambient); -} - -/* call when window is resized */ -void reshape(int width, int height) -{ - glViewport (0, 0, width, height); - glMatrixMode (GL_PROJECTION); - glLoadIdentity (); - gluPerspective(45.0, (GLdouble)width/(GLdouble)height, - 1.0, 10.0); - glMatrixMode (GL_MODELVIEW); - glLoadIdentity (); - gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); -} - -/* call when mouse button is pressed */ -/* ARGSUSED2 */ -void mouse(int button, int state, int x, int y) { - switch (button) { - case GLUT_LEFT_BUTTON: - switch (state) { - case GLUT_DOWN: - spinx = (spinx + 5) % 360; - glutPostRedisplay(); - break; - default: - break; - } - break; - case GLUT_MIDDLE_BUTTON: - switch (state) { - case GLUT_DOWN: - spiny = (spiny + 5) % 360; - glutPostRedisplay(); - break; - default: - break; - } - break; - case GLUT_RIGHT_BUTTON: - switch (state) { - case GLUT_UP: - exit(0); - break; - default: - break; - } - break; - default: - break; - } -} - -/* ARGSUSED1 */ -void keyboard (unsigned char key, int x, int y) -{ - switch (key) { - case 't': - if (tdist < 4.0) { - tdist = (tdist + 0.5); - glutPostRedisplay(); - } - break; - case 'T': - if (tdist > -5.0) { - tdist = (tdist - 0.5); - glutPostRedisplay(); - } - break; - case 'F': - polyfactor = polyfactor + 0.1; - printf ("polyfactor is %f\n", polyfactor); - glutPostRedisplay(); - break; - case 'f': - polyfactor = polyfactor - 0.1; - printf ("polyfactor is %f\n", polyfactor); - glutPostRedisplay(); - break; - case 'U': - polyunits = polyunits + 1.0; - printf ("polyunits is %f\n", polyunits); - glutPostRedisplay(); - break; - case 'u': - polyunits = polyunits - 1.0; - printf ("polyunits is %f\n", polyunits); - glutPostRedisplay(); - break; - default: - break; - } -} - -/* Main Loop - * Open window with initial window size, title bar, - * RGBA display mode, and handle input events. - */ -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); - glutCreateWindow(argv[0]); - glutReshapeFunc(reshape); - glutDisplayFunc(display); - glutMouseFunc(mouse); - glutKeyboardFunc(keyboard); - gfxinit(); - glutMainLoop(); - return 0; -} -#else -int main(int argc, char** argv) -{ - fprintf (stderr, "This program demonstrates a feature which is not in OpenGL Version 1.0.\n"); - fprintf (stderr, "If your implementation of OpenGL Version 1.0 has the right extensions,\n"); - fprintf (stderr, "you may be able to modify this program to make it run.\n"); - return 0; -} -#endif diff --git a/lib/glut-3.7.6/progs/redbook/polyoff.dsp b/lib/glut-3.7.6/progs/redbook/polyoff.dsp deleted file mode 100644 index 2acc0b9fd..000000000 --- a/lib/glut-3.7.6/progs/redbook/polyoff.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="polyoff" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=polyoff - 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 "polyoff.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 "polyoff.mak" CFG="polyoff - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "polyoff - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "polyoff - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "polyoff - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "polyoff - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "polyoff - Win32 Release" -# Name "polyoff - Win32 Debug" -# Begin Source File - -SOURCE=.\polyoff.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/polys.c b/lib/glut-3.7.6/progs/redbook/polys.c deleted file mode 100644 index 2983bc5cc..000000000 --- a/lib/glut-3.7.6/progs/redbook/polys.c +++ /dev/null @@ -1,124 +0,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. - */ -/* - * polys.c - * This program demonstrates polygon stippling. - */ -#include -#include - -void display(void) -{ - GLubyte fly[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x03, 0x80, 0x01, 0xC0, 0x06, 0xC0, 0x03, 0x60, 0x04, 0x60, 0x06, 0x20, -0x04, 0x30, 0x0C, 0x20, 0x04, 0x18, 0x18, 0x20, 0x04, 0x0C, 0x30, 0x20, -0x04, 0x06, 0x60, 0x20, 0x44, 0x03, 0xC0, 0x22, 0x44, 0x01, 0x80, 0x22, -0x44, 0x01, 0x80, 0x22, 0x44, 0x01, 0x80, 0x22, 0x44, 0x01, 0x80, 0x22, -0x44, 0x01, 0x80, 0x22, 0x44, 0x01, 0x80, 0x22, 0x66, 0x01, 0x80, 0x66, -0x33, 0x01, 0x80, 0xCC, 0x19, 0x81, 0x81, 0x98, 0x0C, 0xC1, 0x83, 0x30, -0x07, 0xe1, 0x87, 0xe0, 0x03, 0x3f, 0xfc, 0xc0, 0x03, 0x31, 0x8c, 0xc0, -0x03, 0x33, 0xcc, 0xc0, 0x06, 0x64, 0x26, 0x60, 0x0c, 0xcc, 0x33, 0x30, -0x18, 0xcc, 0x33, 0x18, 0x10, 0xc4, 0x23, 0x08, 0x10, 0x63, 0xC6, 0x08, -0x10, 0x30, 0x0c, 0x08, 0x10, 0x18, 0x18, 0x08, 0x10, 0x00, 0x00, 0x08}; - - GLubyte halftone[] = { -0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, -0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, -0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, -0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, -0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, -0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, -0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, -0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, -0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, -0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, -0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55}; - - glClear (GL_COLOR_BUFFER_BIT); - -/* draw all polygons in white */ - glColor3f (1.0, 1.0, 1.0); - -/* draw one solid, unstippled rectangle, */ -/* then two stippled rectangles */ - glRectf (25.0, 25.0, 125.0, 125.0); - glEnable (GL_POLYGON_STIPPLE); - glPolygonStipple (fly); - glRectf (125.0, 25.0, 225.0, 125.0); - glPolygonStipple (halftone); - glRectf (225.0, 25.0, 325.0, 125.0); - glDisable (GL_POLYGON_STIPPLE); - - glFlush (); -} - -void myinit (void) -{ -/* clear background to black */ - glClearColor (0.0, 0.0, 0.0, 0.0); - glShadeModel (GL_FLAT); -} - -static void reshape(GLsizei w, GLsizei h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho(0.0, (GLdouble)w, 0.0, (GLdouble)h, -1.0, 1.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -/* Main Loop - * Open window with initial window size, title bar, - * RGBA display mode, and handle input events. - */ -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); - glutInitWindowSize (350, 150); - glutCreateWindow (argv[0]); - myinit (); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/redbook/polys.dsp b/lib/glut-3.7.6/progs/redbook/polys.dsp deleted file mode 100644 index 4199fc316..000000000 --- a/lib/glut-3.7.6/progs/redbook/polys.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="polys" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=polys - 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 "polys.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 "polys.mak" CFG="polys - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "polys - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "polys - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "polys - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "polys - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "polys - Win32 Release" -# Name "polys - Win32 Debug" -# Begin Source File - -SOURCE=.\polys.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/quadric.c b/lib/glut-3.7.6/progs/redbook/quadric.c deleted file mode 100644 index 4e46c85f8..000000000 --- a/lib/glut-3.7.6/progs/redbook/quadric.c +++ /dev/null @@ -1,189 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -/* - * quadric.c - * This program demonstrates the use of some of the gluQuadric* - * routines. Quadric objects are created with some quadric - * properties and the callback routine to handle errors. - * Note that the cylinder has no top or bottom and the circle - * has a hole in it. - */ -#include -#include -#include - -/* Win32 calling conventions. */ -#ifndef CALLBACK -#define CALLBACK -#endif - -GLuint startList; - -void CALLBACK errorCallback(GLenum errorCode) -{ - const GLubyte *estring; - - estring = gluErrorString(errorCode); - fprintf(stderr, "Quadric Error: %s\n", estring); - exit(0); -} - -void init(void) -{ - GLUquadricObj *qobj; - GLfloat mat_ambient[] = { 0.5, 0.5, 0.5, 1.0 }; - GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; - GLfloat mat_shininess[] = { 50.0 }; - GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 }; - GLfloat model_ambient[] = { 0.5, 0.5, 0.5, 1.0 }; - - glClearColor(0.0, 0.0, 0.0, 0.0); - - glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); - glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); - glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); - glLightfv(GL_LIGHT0, GL_POSITION, light_position); - glLightModelfv(GL_LIGHT_MODEL_AMBIENT, model_ambient); - - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_DEPTH_TEST); - -/* Create 4 display lists, each with a different quadric object. - * Different drawing styles and surface normal specifications - * are demonstrated. - */ - startList = glGenLists(4); - qobj = gluNewQuadric(); - gluQuadricCallback(qobj, GLU_ERROR, - (GLvoid (CALLBACK*) ()) errorCallback); - - gluQuadricDrawStyle(qobj, GLU_FILL); /* smooth shaded */ - gluQuadricNormals(qobj, GLU_SMOOTH); - glNewList(startList, GL_COMPILE); - gluSphere(qobj, 0.75, 15, 10); - glEndList(); - - gluQuadricDrawStyle(qobj, GLU_FILL); /* flat shaded */ - gluQuadricNormals(qobj, GLU_FLAT); - glNewList(startList+1, GL_COMPILE); - gluCylinder(qobj, 0.5, 0.3, 1.0, 15, 5); - glEndList(); - - gluQuadricDrawStyle(qobj, GLU_LINE); /* all polygons wireframe */ - gluQuadricNormals(qobj, GLU_NONE); - glNewList(startList+2, GL_COMPILE); - gluDisk(qobj, 0.25, 1.0, 20, 4); - glEndList(); - - gluQuadricDrawStyle(qobj, GLU_SILHOUETTE); /* boundary only */ - gluQuadricNormals(qobj, GLU_NONE); - glNewList(startList+3, GL_COMPILE); - gluPartialDisk(qobj, 0.0, 1.0, 20, 4, 0.0, 225.0); - glEndList(); -} - -void display(void) -{ - glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glPushMatrix(); - - glEnable(GL_LIGHTING); - glShadeModel (GL_SMOOTH); - glTranslatef(-1.0, -1.0, 0.0); - glCallList(startList); - - glShadeModel (GL_FLAT); - glTranslatef(0.0, 2.0, 0.0); - glPushMatrix(); - glRotatef(300.0, 1.0, 0.0, 0.0); - glCallList(startList+1); - glPopMatrix(); - - glDisable(GL_LIGHTING); - glColor3f(0.0, 1.0, 1.0); - glTranslatef(2.0, -2.0, 0.0); - glCallList(startList+2); - - glColor3f(1.0, 1.0, 0.0); - glTranslatef(0.0, 2.0, 0.0); - glCallList(startList+3); - - glPopMatrix(); - glFlush(); -} - -void reshape (int w, int h) -{ - glViewport(0, 0, (GLsizei) w, (GLsizei) h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - if (w <= h) - glOrtho(-2.5, 2.5, -2.5*(GLfloat)h/(GLfloat)w, - 2.5*(GLfloat)h/(GLfloat)w, -10.0, 10.0); - else - glOrtho(-2.5*(GLfloat)w/(GLfloat)h, - 2.5*(GLfloat)w/(GLfloat)h, -2.5, 2.5, -10.0, 10.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -/* ARGSUSED1 */ -void keyboard(unsigned char key, int x, int y) -{ - switch (key) { - case 27: - exit(0); - break; - } -} - -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); - glutInitWindowSize(500, 500); - glutInitWindowPosition(100, 100); - glutCreateWindow(argv[0]); - init(); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glutKeyboardFunc(keyboard); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/redbook/quadric.dsp b/lib/glut-3.7.6/progs/redbook/quadric.dsp deleted file mode 100644 index 8a575ccd1..000000000 --- a/lib/glut-3.7.6/progs/redbook/quadric.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="quadric" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=quadric - 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 "quadric.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 "quadric.mak" CFG="quadric - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "quadric - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "quadric - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "quadric - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "quadric - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "quadric - Win32 Release" -# Name "quadric - Win32 Debug" -# Begin Source File - -SOURCE=.\quadric.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/robot.c b/lib/glut-3.7.6/progs/redbook/robot.c deleted file mode 100644 index 94e20ac71..000000000 --- a/lib/glut-3.7.6/progs/redbook/robot.c +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -/* - * robot.c - * This program shows how to composite modeling transformations - * to draw translated and rotated hierarchical models. - * Interaction: pressing the s and e keys (shoulder and elbow) - * alters the rotation of the robot arm. - */ -#include -#include - -static int shoulder = 0, elbow = 0; - -void init(void) -{ - glClearColor (0.0, 0.0, 0.0, 0.0); - glShadeModel (GL_FLAT); -} - -void display(void) -{ - glClear (GL_COLOR_BUFFER_BIT); - glPushMatrix(); - glTranslatef (-1.0, 0.0, 0.0); - glRotatef ((GLfloat) shoulder, 0.0, 0.0, 1.0); - glTranslatef (1.0, 0.0, 0.0); - glPushMatrix(); - glScalef (2.0, 0.4, 1.0); - glutWireCube (1.0); - glPopMatrix(); - - glTranslatef (1.0, 0.0, 0.0); - glRotatef ((GLfloat) elbow, 0.0, 0.0, 1.0); - glTranslatef (1.0, 0.0, 0.0); - glPushMatrix(); - glScalef (2.0, 0.4, 1.0); - glutWireCube (1.0); - glPopMatrix(); - - glPopMatrix(); - glutSwapBuffers(); -} - -void reshape (int w, int h) -{ - glViewport (0, 0, (GLsizei) w, (GLsizei) h); - glMatrixMode (GL_PROJECTION); - glLoadIdentity (); - gluPerspective(65.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef (0.0, 0.0, -5.0); -} - -/* ARGSUSED1 */ -void keyboard (unsigned char key, int x, int y) -{ - switch (key) { - case 's': - shoulder = (shoulder + 5) % 360; - glutPostRedisplay(); - break; - case 'S': - shoulder = (shoulder - 5) % 360; - glutPostRedisplay(); - break; - case 'e': - elbow = (elbow + 5) % 360; - glutPostRedisplay(); - break; - case 'E': - elbow = (elbow - 5) % 360; - glutPostRedisplay(); - break; - case 27: - exit(0); - break; - default: - break; - } -} - -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB); - glutInitWindowSize (500, 500); - glutInitWindowPosition (100, 100); - glutCreateWindow (argv[0]); - init (); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glutKeyboardFunc(keyboard); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/redbook/robot.dsp b/lib/glut-3.7.6/progs/redbook/robot.dsp deleted file mode 100644 index f12c05942..000000000 --- a/lib/glut-3.7.6/progs/redbook/robot.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="robot" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=robot - 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 "robot.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 "robot.mak" CFG="robot - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "robot - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "robot - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "robot - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "robot - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "robot - Win32 Release" -# Name "robot - Win32 Debug" -# Begin Source File - -SOURCE=.\robot.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/sccolorlight.c b/lib/glut-3.7.6/progs/redbook/sccolorlight.c deleted file mode 100644 index 191f26604..000000000 --- a/lib/glut-3.7.6/progs/redbook/sccolorlight.c +++ /dev/null @@ -1,127 +0,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. - */ -/* - * sccolorlight.c - * This program demonstrates the use of a colored - * (magenta, in this example) light source. Objects - * are drawn using a grey material characteristic. - * A single light source illuminates the objects. - */ -#include -#include - -/* Initialize material property and light source. - */ -void myinit(void) -{ - GLfloat light_ambient[] = { 0.0, 0.0, 0.0, 1.0 }; - GLfloat light_diffuse[] = { 1.0, 0.0, 1.0, 1.0 }; - GLfloat light_specular[] = { 1.0, 0.0, 1.0, 1.0 }; -/* light_position is NOT default value */ - GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 }; - - glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); - glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); - glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); - glLightfv(GL_LIGHT0, GL_POSITION, light_position); - - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glDepthFunc(GL_LESS); - glEnable(GL_DEPTH_TEST); -} - -void display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glPushMatrix (); - glRotatef (20.0, 1.0, 0.0, 0.0); - - glPushMatrix (); - glTranslatef (-0.75, 0.5, 0.0); - glRotatef (90.0, 1.0, 0.0, 0.0); - glutSolidTorus (0.275, 0.85, 20, 20); - glPopMatrix (); - - glPushMatrix (); - glTranslatef (-0.75, -0.5, 0.0); - glRotatef (270.0, 1.0, 0.0, 0.0); - glutSolidCone (1.0, 2.0, 20, 20); - glPopMatrix (); - - glPushMatrix (); - glTranslatef (0.75, 0.0, -1.0); - glutSolidSphere (1.0, 20, 20); - glPopMatrix (); - - glPopMatrix (); - glFlush(); -} - -void myReshape(int w, int h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - if (w <= h) - glOrtho (-2.5, 2.5, -2.5*(GLfloat)h/(GLfloat)w, - 2.5*(GLfloat)h/(GLfloat)w, -10.0, 10.0); - else - glOrtho (-2.5*(GLfloat)w/(GLfloat)h, - 2.5*(GLfloat)w/(GLfloat)h, -2.5, 2.5, -10.0, 10.0); - glMatrixMode(GL_MODELVIEW); -} - -/* Main Loop - * Open window with initial window size, title bar, - * RGBA display mode, and handle input events. - */ -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); - glutInitWindowSize (500, 500); - glutCreateWindow (argv[0]); - myinit(); - glutReshapeFunc (myReshape); - glutDisplayFunc(display); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/redbook/sccolorlight.dsp b/lib/glut-3.7.6/progs/redbook/sccolorlight.dsp deleted file mode 100644 index 08e02b182..000000000 --- a/lib/glut-3.7.6/progs/redbook/sccolorlight.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="sccolorlight" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=sccolorlight - 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 "sccolorlight.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 "sccolorlight.mak" CFG="sccolorlight - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "sccolorlight - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "sccolorlight - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "sccolorlight - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "sccolorlight - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "sccolorlight - Win32 Release" -# Name "sccolorlight - Win32 Debug" -# Begin Source File - -SOURCE=.\sccolorlight.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/scene.c b/lib/glut-3.7.6/progs/redbook/scene.c deleted file mode 100644 index 428e8bd7a..000000000 --- a/lib/glut-3.7.6/progs/redbook/scene.c +++ /dev/null @@ -1,127 +0,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. - */ -/* - * scene.c - * This program demonstrates the use of the GL lighting model. - * Objects are drawn using a grey material characteristic. - * A single light source illuminates the objects. - */ -#include -#include - -/* Initialize material property and light source. - */ -void myinit (void) -{ - GLfloat light_ambient[] = { 0.0, 0.0, 0.0, 1.0 }; - GLfloat light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 }; - GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 }; -/* light_position is NOT default value */ - GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 }; - - glLightfv (GL_LIGHT0, GL_AMBIENT, light_ambient); - glLightfv (GL_LIGHT0, GL_DIFFUSE, light_diffuse); - glLightfv (GL_LIGHT0, GL_SPECULAR, light_specular); - glLightfv (GL_LIGHT0, GL_POSITION, light_position); - - glEnable (GL_LIGHTING); - glEnable (GL_LIGHT0); - glDepthFunc(GL_LESS); - glEnable(GL_DEPTH_TEST); -} - -void display (void) -{ - glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glPushMatrix (); - glRotatef (20.0, 1.0, 0.0, 0.0); - - glPushMatrix (); - glTranslatef (-0.75, 0.5, 0.0); - glRotatef (90.0, 1.0, 0.0, 0.0); - glutSolidTorus (0.275, 0.85, 15, 15); - glPopMatrix (); - - glPushMatrix (); - glTranslatef (-0.75, -0.5, 0.0); - glRotatef (270.0, 1.0, 0.0, 0.0); - glutSolidCone (1.0, 2.0, 15, 15); - glPopMatrix (); - - glPushMatrix (); - glTranslatef (0.75, 0.0, -1.0); - glutSolidSphere (1.0, 15, 15); - glPopMatrix (); - - glPopMatrix (); - glFlush (); -} - -void myReshape(int w, int h) -{ - glViewport (0, 0, w, h); - glMatrixMode (GL_PROJECTION); - glLoadIdentity (); - if (w <= h) - glOrtho (-2.5, 2.5, -2.5*(GLfloat)h/(GLfloat)w, - 2.5*(GLfloat)h/(GLfloat)w, -10.0, 10.0); - else - glOrtho (-2.5*(GLfloat)w/(GLfloat)h, - 2.5*(GLfloat)w/(GLfloat)h, -2.5, 2.5, -10.0, 10.0); - glMatrixMode (GL_MODELVIEW); -} - -/* Main Loop - * Open window with initial window size, title bar, - * RGBA display mode, and handle input events. - */ -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); - glutInitWindowSize (500, 500); - glutCreateWindow (argv[0]); - myinit (); - glutReshapeFunc (myReshape); - glutDisplayFunc(display); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/redbook/scene.dsp b/lib/glut-3.7.6/progs/redbook/scene.dsp deleted file mode 100644 index 7f3d9b096..000000000 --- a/lib/glut-3.7.6/progs/redbook/scene.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="scene" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=scene - 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 "scene.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 "scene.mak" CFG="scene - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "scene - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "scene - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "scene - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "scene - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "scene - Win32 Release" -# Name "scene - Win32 Debug" -# Begin Source File - -SOURCE=.\scene.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/scenebamb.c b/lib/glut-3.7.6/progs/redbook/scenebamb.c deleted file mode 100644 index a3449b580..000000000 --- a/lib/glut-3.7.6/progs/redbook/scenebamb.c +++ /dev/null @@ -1,126 +0,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. - */ -/* - * scenebamb.c - * This program demonstrates use of a blue ambient light - * source. - */ -#include -#include - -/* Initialize light source and lighting. - */ -void myinit(void) -{ - GLfloat light_ambient[] = { 0.0, 0.0, 1.0, 1.0 }; - GLfloat light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 }; - GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 }; -/* light_position is NOT default value */ - GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 }; - - glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); - glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); - glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); - glLightfv(GL_LIGHT0, GL_POSITION, light_position); - - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glDepthFunc(GL_LESS); - glEnable(GL_DEPTH_TEST); -} - -void display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glPushMatrix (); - glRotatef (20.0, 1.0, 0.0, 0.0); - - glPushMatrix (); - glTranslatef (-0.75, 0.5, 0.0); - glRotatef (90.0, 1.0, 0.0, 0.0); - glutSolidTorus (0.275, 0.85, 15, 15); - glPopMatrix (); - - glPushMatrix (); - glTranslatef (-0.75, -0.5, 0.0); - glRotatef (270.0, 1.0, 0.0, 0.0); - glutSolidCone (1.0, 2.0, 15, 15); - glPopMatrix (); - - glPushMatrix (); - glTranslatef (0.75, 0.0, -1.0); - glutSolidSphere (1.0, 15, 15); - glPopMatrix (); - - glPopMatrix (); - glFlush(); -} - -void myReshape(int w, int h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - if (w <= h) - glOrtho (-2.5, 2.5, -2.5*(GLfloat)h/(GLfloat)w, - 2.5*(GLfloat)h/(GLfloat)w, -10.0, 10.0); - else - glOrtho (-2.5*(GLfloat)w/(GLfloat)h, - 2.5*(GLfloat)w/(GLfloat)h, -2.5, 2.5, -10.0, 10.0); - glMatrixMode(GL_MODELVIEW); -} - -/* Main Loop - * Open window with initial window size, title bar, - * RGBA display mode, and handle input events. - */ -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); - glutInitWindowSize (500, 500); - glutCreateWindow (argv[0]); - myinit(); - glutReshapeFunc (myReshape); - glutDisplayFunc(display); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/redbook/scenebamb.dsp b/lib/glut-3.7.6/progs/redbook/scenebamb.dsp deleted file mode 100644 index 89c40ad42..000000000 --- a/lib/glut-3.7.6/progs/redbook/scenebamb.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="scenebamb" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=scenebamb - 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 "scenebamb.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 "scenebamb.mak" CFG="scenebamb - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "scenebamb - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "scenebamb - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "scenebamb - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "scenebamb - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "scenebamb - Win32 Release" -# Name "scenebamb - Win32 Debug" -# Begin Source File - -SOURCE=.\scenebamb.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/sceneflat.c b/lib/glut-3.7.6/progs/redbook/sceneflat.c deleted file mode 100644 index 5ab2037e4..000000000 --- a/lib/glut-3.7.6/progs/redbook/sceneflat.c +++ /dev/null @@ -1,126 +0,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. - */ -/* - * sceneflat.c - * This program draws lighted objects with flat shading. - */ -#include -#include - -/* Initialize light source and shading model (GL_FLAT). - */ -void myinit(void) -{ - GLfloat light_ambient[] = { 0.0, 0.0, 0.0, 1.0 }; - GLfloat light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 }; - GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 }; -/* light_position is NOT default value */ - GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 }; - - glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); - glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); - glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); - glLightfv(GL_LIGHT0, GL_POSITION, light_position); - - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glDepthFunc(GL_LESS); - glEnable(GL_DEPTH_TEST); - glShadeModel (GL_FLAT); -} - -void display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glPushMatrix (); - glRotatef (20.0, 1.0, 0.0, 0.0); - - glPushMatrix (); - glTranslatef (-0.75, 0.5, 0.0); - glRotatef (90.0, 1.0, 0.0, 0.0); - glutSolidTorus (0.275, 0.85, 15, 15); - glPopMatrix (); - - glPushMatrix (); - glTranslatef (-0.75, -0.5, 0.0); - glRotatef (270.0, 1.0, 0.0, 0.0); - glutSolidCone (1.0, 2.0, 15, 15); - glPopMatrix (); - - glPushMatrix (); - glTranslatef (0.75, 0.0, -1.0); - glutSolidSphere (1.0, 15, 15); - glPopMatrix (); - - glPopMatrix (); - glFlush(); -} - -void myReshape(int w, int h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - if (w <= h) - glOrtho (-2.5, 2.5, -2.5*(GLfloat)h/(GLfloat)w, - 2.5*(GLfloat)h/(GLfloat)w, -10.0, 10.0); - else - glOrtho (-2.5*(GLfloat)w/(GLfloat)h, - 2.5*(GLfloat)w/(GLfloat)h, -2.5, 2.5, -10.0, 10.0); - glMatrixMode(GL_MODELVIEW); -} - -/* Main Loop - * Open window with initial window size, title bar, - * RGBA display mode, and handle input events. - */ -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); - glutInitWindowSize (500, 500); - glutCreateWindow (argv[0]); - myinit(); - glutReshapeFunc (myReshape); - glutDisplayFunc(display); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/redbook/sceneflat.dsp b/lib/glut-3.7.6/progs/redbook/sceneflat.dsp deleted file mode 100644 index 02ab5653e..000000000 --- a/lib/glut-3.7.6/progs/redbook/sceneflat.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="sceneflat" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=sceneflat - 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 "sceneflat.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 "sceneflat.mak" CFG="sceneflat - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "sceneflat - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "sceneflat - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "sceneflat - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "sceneflat - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "sceneflat - Win32 Release" -# Name "sceneflat - Win32 Debug" -# Begin Source File - -SOURCE=.\sceneflat.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/select.c b/lib/glut-3.7.6/progs/redbook/select.c deleted file mode 100644 index 89abda07b..000000000 --- a/lib/glut-3.7.6/progs/redbook/select.c +++ /dev/null @@ -1,222 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -/* - * select.c - * This is an illustration of the selection mode and - * name stack, which detects whether objects which collide - * with a viewing volume. First, four triangles and a - * rectangular box representing a viewing volume are drawn - * (drawScene routine). The green triangle and yellow - * triangles appear to lie within the viewing volume, but - * the red triangle appears to lie outside it. Then the - * selection mode is entered (selectObjects routine). - * Drawing to the screen ceases. To see if any collisions - * occur, the four triangles are called. In this example, - * the green triangle causes one hit with the name 1, and - * the yellow triangles cause one hit with the name 3. - */ -#include -#include -#include - -/* draw a triangle with vertices at (x1, y1), (x2, y2) - * and (x3, y3) at z units away from the origin. - */ -void drawTriangle (GLfloat x1, GLfloat y1, GLfloat x2, - GLfloat y2, GLfloat x3, GLfloat y3, GLfloat z) -{ - glBegin (GL_TRIANGLES); - glVertex3f (x1, y1, z); - glVertex3f (x2, y2, z); - glVertex3f (x3, y3, z); - glEnd (); -} - -/* draw a rectangular box with these outer x, y, and z values */ -void drawViewVolume (GLfloat x1, GLfloat x2, GLfloat y1, - GLfloat y2, GLfloat z1, GLfloat z2) -{ - glColor3f (1.0, 1.0, 1.0); - glBegin (GL_LINE_LOOP); - glVertex3f (x1, y1, -z1); - glVertex3f (x2, y1, -z1); - glVertex3f (x2, y2, -z1); - glVertex3f (x1, y2, -z1); - glEnd (); - - glBegin (GL_LINE_LOOP); - glVertex3f (x1, y1, -z2); - glVertex3f (x2, y1, -z2); - glVertex3f (x2, y2, -z2); - glVertex3f (x1, y2, -z2); - glEnd (); - - glBegin (GL_LINES); /* 4 lines */ - glVertex3f (x1, y1, -z1); - glVertex3f (x1, y1, -z2); - glVertex3f (x1, y2, -z1); - glVertex3f (x1, y2, -z2); - glVertex3f (x2, y1, -z1); - glVertex3f (x2, y1, -z2); - glVertex3f (x2, y2, -z1); - glVertex3f (x2, y2, -z2); - glEnd (); -} - -/* drawScene draws 4 triangles and a wire frame - * which represents the viewing volume. - */ -void drawScene (void) -{ - glMatrixMode (GL_PROJECTION); - glLoadIdentity (); - gluPerspective (40.0, 4.0/3.0, 1.0, 100.0); - - glMatrixMode (GL_MODELVIEW); - glLoadIdentity (); - gluLookAt (7.5, 7.5, 12.5, 2.5, 2.5, -5.0, 0.0, 1.0, 0.0); - glColor3f (0.0, 1.0, 0.0); /* green triangle */ - drawTriangle (2.0, 2.0, 3.0, 2.0, 2.5, 3.0, -5.0); - glColor3f (1.0, 0.0, 0.0); /* red triangle */ - drawTriangle (2.0, 7.0, 3.0, 7.0, 2.5, 8.0, -5.0); - glColor3f (1.0, 1.0, 0.0); /* yellow triangles */ - drawTriangle (2.0, 2.0, 3.0, 2.0, 2.5, 3.0, 0.0); - drawTriangle (2.0, 2.0, 3.0, 2.0, 2.5, 3.0, -10.0); - drawViewVolume (0.0, 5.0, 0.0, 5.0, 0.0, 10.0); -} - -/* processHits prints out the contents of the selection array - */ -void processHits (GLint hits, GLuint buffer[]) -{ - int i, j, names; - GLuint *ptr; - - printf ("hits = %d\n", hits); - ptr = (GLuint *) buffer; - for (i = 0; i < hits; i++) { /* for each hit */ - names = (int) *ptr; - printf (" number of names for hit = %d\n", names); ptr++; - printf(" z1 is %g;", (float) *ptr/0x7fffffff); ptr++; - printf(" z2 is %g\n", (float) *ptr/0x7fffffff); ptr++; - printf (" the name is "); - for (j = 0; j < names; j++) { /* for each name */ - printf ("%d ", *ptr); ptr++; - } - printf ("\n"); - } -} - -/* selectObjects "draws" the triangles in selection mode, - * assigning names for the triangles. Note that the third - * and fourth triangles share one name, so that if either - * or both triangles intersects the viewing/clipping volume, - * only one hit will be registered. - */ -#define BUFSIZE 512 - -void selectObjects(void) -{ - GLuint selectBuf[BUFSIZE]; - GLint hits; - - glSelectBuffer (BUFSIZE, selectBuf); - (void) glRenderMode (GL_SELECT); - - glInitNames(); - glPushName(0); - - glPushMatrix (); - glMatrixMode (GL_PROJECTION); - glLoadIdentity (); - glOrtho (0.0, 5.0, 0.0, 5.0, 0.0, 10.0); - glMatrixMode (GL_MODELVIEW); - glLoadIdentity (); - glLoadName(1); - drawTriangle (2.0, 2.0, 3.0, 2.0, 2.5, 3.0, -5.0); - glLoadName(2); - drawTriangle (2.0, 7.0, 3.0, 7.0, 2.5, 8.0, -5.0); - glLoadName(3); - drawTriangle (2.0, 2.0, 3.0, 2.0, 2.5, 3.0, 0.0); - drawTriangle (2.0, 2.0, 3.0, 2.0, 2.5, 3.0, -10.0); - glPopMatrix (); - glFlush (); - - hits = glRenderMode (GL_RENDER); - processHits (hits, selectBuf); -} - -void init (void) -{ - glEnable(GL_DEPTH_TEST); - glShadeModel(GL_FLAT); -} - -void display(void) -{ - glClearColor (0.0, 0.0, 0.0, 0.0); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - drawScene (); - selectObjects (); - glFlush(); -} - -/* ARGSUSED1 */ -void keyboard(unsigned char key, int x, int y) -{ - switch (key) { - case 27: - exit(0); - break; - } -} - -/* Main Loop */ -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); - glutInitWindowSize (200, 200); - glutInitWindowPosition (100, 100); - glutCreateWindow (argv[0]); - init(); - glutDisplayFunc(display); - glutKeyboardFunc(keyboard); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/redbook/select.dsp b/lib/glut-3.7.6/progs/redbook/select.dsp deleted file mode 100644 index 8daf2991e..000000000 --- a/lib/glut-3.7.6/progs/redbook/select.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="select" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=select - 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 "select.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 "select.mak" CFG="select - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "select - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "select - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "select - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "select - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "select - Win32 Release" -# Name "select - Win32 Debug" -# Begin Source File - -SOURCE=.\select.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/smooth.c b/lib/glut-3.7.6/progs/redbook/smooth.c deleted file mode 100644 index 9d22fc902..000000000 --- a/lib/glut-3.7.6/progs/redbook/smooth.c +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -/* - * smooth.c - * This program demonstrates smooth shading. - * A smooth shaded polygon is drawn in a 2-D projection. - */ -#include -#include - -void init(void) -{ - glClearColor (0.0, 0.0, 0.0, 0.0); - glShadeModel (GL_SMOOTH); -} - -void triangle(void) -{ - glBegin (GL_TRIANGLES); - glColor3f (1.0, 0.0, 0.0); - glVertex2f (5.0, 5.0); - glColor3f (0.0, 1.0, 0.0); - glVertex2f (25.0, 5.0); - glColor3f (0.0, 0.0, 1.0); - glVertex2f (5.0, 25.0); - glEnd(); -} - -void display(void) -{ - glClear (GL_COLOR_BUFFER_BIT); - triangle (); - glFlush (); -} - -void reshape (int w, int h) -{ - glViewport (0, 0, (GLsizei) w, (GLsizei) h); - glMatrixMode (GL_PROJECTION); - glLoadIdentity (); - if (w <= h) - gluOrtho2D (0.0, 30.0, 0.0, 30.0 * (GLfloat) h/(GLfloat) w); - else - gluOrtho2D (0.0, 30.0 * (GLfloat) w/(GLfloat) h, 0.0, 30.0); - glMatrixMode(GL_MODELVIEW); -} - -/* ARGSUSED1 */ -void keyboard(unsigned char key, int x, int y) -{ - switch (key) { - case 27: - exit(0); - break; - } -} - -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); - glutInitWindowSize (500, 500); - glutInitWindowPosition (100, 100); - glutCreateWindow (argv[0]); - init (); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glutKeyboardFunc (keyboard); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/redbook/smooth.dsp b/lib/glut-3.7.6/progs/redbook/smooth.dsp deleted file mode 100644 index a5800c677..000000000 --- a/lib/glut-3.7.6/progs/redbook/smooth.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="smooth" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=smooth - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "smooth.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "smooth.mak" CFG="smooth - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "smooth - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "smooth - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "smooth - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "smooth - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "smooth - Win32 Release" -# Name "smooth - Win32 Debug" -# Begin Source File - -SOURCE=.\smooth.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/stencil.c b/lib/glut-3.7.6/progs/redbook/stencil.c deleted file mode 100644 index 86ab6bad1..000000000 --- a/lib/glut-3.7.6/progs/redbook/stencil.c +++ /dev/null @@ -1,177 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1994, 1998. */ - -/* - * (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. - */ -/* stencil.c - * This program draws two rotated tori in a window. - * A diamond in the center of the window masks out part - * of the scene. Within this mask, a different model - * (a sphere) is drawn in a different color. - */ -#include -#include - -#define YELLOWMAT 1 -#define BLUEMAT 2 - -void myinit (void) -{ - GLfloat yellow_diffuse[] = { 0.7, 0.7, 0.0, 1.0 }; - GLfloat yellow_specular[] = { 1.0, 1.0, 1.0, 1.0 }; - - GLfloat blue_diffuse[] = { 0.1, 0.1, 0.7, 1.0 }; - GLfloat blue_specular[] = { 0.1, 1.0, 1.0, 1.0 }; - - GLfloat position_one[] = { 1.0, 1.0, 1.0, 0.0 }; - - glNewList(YELLOWMAT, GL_COMPILE); - glMaterialfv(GL_FRONT, GL_DIFFUSE, yellow_diffuse); - glMaterialfv(GL_FRONT, GL_SPECULAR, yellow_specular); - glMaterialf(GL_FRONT, GL_SHININESS, 64.0); - glEndList(); - - glNewList(BLUEMAT, GL_COMPILE); - glMaterialfv(GL_FRONT, GL_DIFFUSE, blue_diffuse); - glMaterialfv(GL_FRONT, GL_SPECULAR, blue_specular); - glMaterialf(GL_FRONT, GL_SHININESS, 45.0); - glEndList(); - - glLightfv(GL_LIGHT0, GL_POSITION, position_one); - - glEnable(GL_LIGHT0); - glEnable(GL_LIGHTING); - - glClearStencil(0x0); - glEnable(GL_STENCIL_TEST); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(0.0, 0.0, -5.0); -} - -/* Draw a sphere in a diamond-shaped section in the - * middle of a window with 2 tori. - */ -void display(void) -{ - glClear(GL_STENCIL_BUFFER_BIT); - -/* create a diamond shaped stencil area */ - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - glOrtho(-3.0, 3.0, -3.0, 3.0, -1.0, 1.0); - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); - - /* Disable color buffer update. */ - glColorMask(0, 0, 0, 0); - glDisable(GL_DEPTH_TEST); - glStencilFunc (GL_ALWAYS, 0x1, 0x1); - glStencilOp (GL_REPLACE, GL_REPLACE, GL_REPLACE); - - glBegin(GL_QUADS); - glVertex3f (-1.0, 0.0, 0.0); - glVertex3f (0.0, 1.0, 0.0); - glVertex3f (1.0, 0.0, 0.0); - glVertex3f (0.0, -1.0, 0.0); - glEnd(); - - glPopMatrix(); - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - - /* Enable color buffer update. */ - glColorMask(1, 1, 1, 1); - glEnable(GL_DEPTH_TEST); - glStencilOp (GL_KEEP, GL_KEEP, GL_KEEP); - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); - -/* draw blue sphere where the stencil is 1 */ - glStencilFunc (GL_EQUAL, 0x1, 0x1); - glCallList (BLUEMAT); - glutSolidSphere (0.5, 15, 15); - -/* draw the tori where the stencil is not 1 */ - glStencilFunc (GL_NOTEQUAL, 0x1, 0x1); - glPushMatrix(); - glRotatef (45.0, 0.0, 0.0, 1.0); - glRotatef (45.0, 0.0, 1.0, 0.0); - glCallList (YELLOWMAT); - glutSolidTorus (0.275, 0.85, 15, 15); - glPushMatrix(); - glRotatef (90.0, 1.0, 0.0, 0.0); - glutSolidTorus (0.275, 0.85, 15, 15); - glPopMatrix(); - glPopMatrix(); - - glFlush(); -} - -/* Whenever the window is reshaped, redefine the - * coordinate system and redraw the stencil area. - */ -void myReshape(int w, int h) -{ - glViewport(0, 0, w, h); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(45.0, (GLfloat) w/(GLfloat) h, 3.0, 7.0); - glMatrixMode(GL_MODELVIEW); -} - -/* Main Loop - * Open window with initial window size, title bar, - * RGBA display mode, and handle input events. - */ -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH | GLUT_STENCIL); - glutInitWindowSize (400, 400); - glutCreateWindow (argv[0]); - myinit (); - glutReshapeFunc (myReshape); - glutDisplayFunc(display); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/redbook/stencil.dsp b/lib/glut-3.7.6/progs/redbook/stencil.dsp deleted file mode 100644 index 2e64ab662..000000000 --- a/lib/glut-3.7.6/progs/redbook/stencil.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="stencil" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=stencil - 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 "stencil.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 "stencil.mak" CFG="stencil - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "stencil - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "stencil - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "stencil - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "stencil - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "stencil - Win32 Release" -# Name "stencil - Win32 Debug" -# Begin Source File - -SOURCE=.\stencil.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/stroke.c b/lib/glut-3.7.6/progs/redbook/stroke.c deleted file mode 100644 index d8c75c89f..000000000 --- a/lib/glut-3.7.6/progs/redbook/stroke.c +++ /dev/null @@ -1,181 +0,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. - */ -/* - * stroke.c - * This program demonstrates some characters of a - * stroke (vector) font. The characters are represented - * by display lists, which are given numbers which - * correspond to the ASCII values of the characters. - * Use of glCallLists() is demonstrated. - */ -#include -#include -#include - -#define PT 1 -#define STROKE 2 -#define END 3 - -typedef struct charpoint { - GLfloat x, y; - int type; -} CP; - -CP Adata[] = { - { 0, 0, PT}, {0, 9, PT}, {1, 10, PT}, {4, 10, PT}, - {5, 9, PT}, {5, 0, STROKE}, {0, 5, PT}, {5, 5, END} -}; - -CP Edata[] = { - {5, 0, PT}, {0, 0, PT}, {0, 10, PT}, {5, 10, STROKE}, - {0, 5, PT}, {4, 5, END} -}; - -CP Pdata[] = { - {0, 0, PT}, {0, 10, PT}, {4, 10, PT}, {5, 9, PT}, {5, 6, PT}, - {4, 5, PT}, {0, 5, END} -}; - -CP Rdata[] = { - {0, 0, PT}, {0, 10, PT}, {4, 10, PT}, {5, 9, PT}, {5, 6, PT}, - {4, 5, PT}, {0, 5, STROKE}, {3, 5, PT}, {5, 0, END} -}; - -CP Sdata[] = { - {0, 1, PT}, {1, 0, PT}, {4, 0, PT}, {5, 1, PT}, {5, 4, PT}, - {4, 5, PT}, {1, 5, PT}, {0, 6, PT}, {0, 9, PT}, {1, 10, PT}, - {4, 10, PT}, {5, 9, END} -}; - -/* drawLetter() interprets the instructions from the array - * for that letter and renders the letter with line segments. - */ -void drawLetter(CP *l) -{ - glBegin(GL_LINE_STRIP); - for (;;) { - switch (l->type) { - case PT: - glVertex2fv(&l->x); - break; - case STROKE: - glVertex2fv(&l->x); - glEnd(); - glBegin(GL_LINE_STRIP); - break; - case END: - glVertex2fv(&l->x); - glEnd(); - glTranslatef(8.0, 0.0, 0.0); - return; - } - l++; - } -} - -/* Create a display list for each of 6 characters */ -void myinit (void) -{ - GLuint base; - - glShadeModel (GL_FLAT); - - base = glGenLists (128); - glListBase(base); - glNewList(base+'A', GL_COMPILE); drawLetter(Adata); glEndList(); - glNewList(base+'E', GL_COMPILE); drawLetter(Edata); glEndList(); - glNewList(base+'P', GL_COMPILE); drawLetter(Pdata); glEndList(); - glNewList(base+'R', GL_COMPILE); drawLetter(Rdata); glEndList(); - glNewList(base+'S', GL_COMPILE); drawLetter(Sdata); glEndList(); - glNewList(base+' ', GL_COMPILE); glTranslatef(8.0, 0.0, 0.0); glEndList(); -} - -char *test1 = "A SPARE SERAPE APPEARS AS"; -char *test2 = "APES PREPARE RARE PEPPERS"; - -void printStrokedString(char *s) -{ - GLsizei len = (GLsizei) strlen(s); - glCallLists(len, GL_BYTE, (GLbyte *)s); -} - -void display(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - glColor3f(1.0, 1.0, 1.0); - glPushMatrix(); - glScalef(2.0, 2.0, 2.0); - glTranslatef(10.0, 30.0, 0.0); - printStrokedString(test1); - glPopMatrix(); - glPushMatrix(); - glScalef(2.0, 2.0, 2.0); - glTranslatef(10.0, 13.0, 0.0); - printStrokedString(test2); - glPopMatrix(); - glFlush(); -} - -static void reshape(GLsizei w, GLsizei h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho(0.0, (GLdouble)w, 0.0, (GLdouble)h, -1.0, 1.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -/* Main Loop - * Open window with initial window size, title bar, - * RGBA display mode, and handle input events. - */ -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); - glutInitWindowSize (440, 120); - glutCreateWindow (argv[0]); - myinit (); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/redbook/stroke.dsp b/lib/glut-3.7.6/progs/redbook/stroke.dsp deleted file mode 100644 index 97c10adae..000000000 --- a/lib/glut-3.7.6/progs/redbook/stroke.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="stroke" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=stroke - 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 "stroke.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 "stroke.mak" CFG="stroke - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "stroke - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "stroke - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "stroke - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "stroke - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "stroke - Win32 Release" -# Name "stroke - Win32 Debug" -# Begin Source File - -SOURCE=.\stroke.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/surface.c b/lib/glut-3.7.6/progs/redbook/surface.c deleted file mode 100644 index fb2691eb7..000000000 --- a/lib/glut-3.7.6/progs/redbook/surface.c +++ /dev/null @@ -1,217 +0,0 @@ -/* aux2glut conversion Copyright (c) Mark J. Kilgard, 1994, 1995 */ - -/** - * (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. - */ -/** - * surface.c - * This program draws a NURBS surface in the shape of a - * symmetrical hill. - */ -#include - -GLfloat ctlpoints[4][4][3]; -int showPoints = 0; - -GLUnurbsObj *theNurb; - -/* - * Initializes the control points of the surface to a small hill. - * The control points range from -3 to +3 in x, y, and z - */ -void init_surface(void) -{ - int u, v; - for (u = 0; u < 4; u++) { - for (v = 0; v < 4; v++) { - ctlpoints[u][v][0] = 2.0*((GLfloat)u - 1.5); - ctlpoints[u][v][1] = 2.0*((GLfloat)v - 1.5); - - if ( (u == 1 || u == 2) && (v == 1 || v == 2)) - ctlpoints[u][v][2] = 7.0; - else - ctlpoints[u][v][2] = -3.0; - } - } -} - -/* Initialize material property and depth buffer. - */ -void myinit(void) -{ - GLfloat mat_diffuse[] = { 0.7, 0.7, 0.7, 1.0 }; - GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; - GLfloat mat_shininess[] = { 100.0 }; - - glClearColor (0.0, 0.0, 0.0, 1.0); - glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); - glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); - glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); - - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glDepthFunc(GL_LESS); - glEnable(GL_DEPTH_TEST); - glEnable(GL_AUTO_NORMAL); - glEnable(GL_NORMALIZE); - - init_surface(); - - theNurb = gluNewNurbsRenderer(); - gluNurbsProperty(theNurb, GLU_SAMPLING_TOLERANCE, 25.0); - gluNurbsProperty(theNurb, GLU_DISPLAY_MODE, GLU_FILL); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef (0.0, 0.0, -5.0); -} - -void display(void) -{ - GLfloat knots[8] = {0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0}; - int i, j; - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glPushMatrix(); - glRotatef(330.0, 1.,0.,0.); - glScalef (0.25, 0.25, 0.25); - - gluBeginSurface(theNurb); - gluNurbsSurface(theNurb, - 8, knots, - 8, knots, - 4 * 3, - 3, - &ctlpoints[0][0][0], - 4, 4, - GL_MAP2_VERTEX_3); - gluEndSurface(theNurb); - - if(showPoints) { - glPointSize(5.0); - glDisable(GL_LIGHTING); - glColor3f(1.0, 1.0, 0.0); - glBegin(GL_POINTS); - for(i=0;i<4;i++) { - for(j=0;j<4;j++) { - glVertex3f(ctlpoints[i][j][0], ctlpoints[i][j][1], ctlpoints[i][j][2]); - } - } - glEnd(); - glEnable(GL_LIGHTING); - } - - glPopMatrix(); - glutSwapBuffers(); -} - -void reshape(int w, int h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective (45.0, (GLdouble)w/(GLdouble)h, 3.0, 8.0); - - glMatrixMode(GL_MODELVIEW); -} - -void -menu(int value) -{ - switch (value) { - case 0: - case 1: - showPoints = value; - break; - case 2: - gluNurbsProperty(theNurb, GLU_DISPLAY_MODE, GLU_FILL); - break; - case 3: - gluNurbsProperty(theNurb, GLU_DISPLAY_MODE, GLU_OUTLINE_POLYGON); - break; - } - glutPostRedisplay(); -} - -int down = 0, lastx; - -/* ARGSUSED1 */ -void -motion(int x, int y) -{ - if (down) { - glRotatef(lastx - x, 0, 1, 0); - lastx = x; - glutPostRedisplay(); - } -} - -/* ARGSUSED3 */ -void -mouse(int button, int state, int x, int y) -{ - if (button == GLUT_LEFT_BUTTON) { - if (state == GLUT_DOWN) { - lastx = x; - down = 1; - } else { - down = 0; - } - } -} - -/* Main Loop */ -int -main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGB); - glutCreateWindow(argv[0]); - myinit(); - glutReshapeFunc(reshape); - glutDisplayFunc(display); - glutCreateMenu(menu); - glutAddMenuEntry("Show control points", 1); - glutAddMenuEntry("Hide control points", 0); - glutAddMenuEntry("Solid", 2); - glutAddMenuEntry("Wireframe", 3); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutMouseFunc(mouse); - glutMotionFunc(motion); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/redbook/surface.dsp b/lib/glut-3.7.6/progs/redbook/surface.dsp deleted file mode 100644 index 5b5eb0099..000000000 --- a/lib/glut-3.7.6/progs/redbook/surface.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="surface" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=surface - 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 "surface.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 "surface.mak" CFG="surface - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "surface - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "surface - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "surface - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "surface - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "surface - Win32 Release" -# Name "surface - Win32 Debug" -# Begin Source File - -SOURCE=.\surface.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/teaambient.c b/lib/glut-3.7.6/progs/redbook/teaambient.c deleted file mode 100644 index 62c091c70..000000000 --- a/lib/glut-3.7.6/progs/redbook/teaambient.c +++ /dev/null @@ -1,148 +0,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. - */ -/** - * teaambient.c - * This program renders three lighted, shaded teapots, with - * different ambient values. - */ -#include -#include - -/* Initialize light source and lighting model. - */ -void -myinit(void) -{ - GLfloat light_ambient[] = - {0.0, 0.0, 0.0, 1.0}; - GLfloat light_diffuse[] = - {1.0, 1.0, 1.0, 1.0}; - GLfloat light_specular[] = - {1.0, 1.0, 1.0, 1.0}; -/* light_position is NOT default value */ - GLfloat light_position[] = - {1.0, 0.0, 0.0, 0.0}; - GLfloat global_ambient[] = - {0.75, 0.75, 0.75, 1.0}; - - glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); - glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); - glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); - glLightfv(GL_LIGHT0, GL_POSITION, light_position); - - glLightModelfv(GL_LIGHT_MODEL_AMBIENT, global_ambient); - - glFrontFace(GL_CW); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_AUTO_NORMAL); - glEnable(GL_NORMALIZE); - glDepthFunc(GL_LESS); - glEnable(GL_DEPTH_TEST); -} - -void -display(void) -{ - GLfloat low_ambient[] = - {0.1, 0.1, 0.1, 1.0}; - GLfloat more_ambient[] = - {0.4, 0.4, 0.4, 1.0}; - GLfloat most_ambient[] = - {1.0, 1.0, 1.0, 1.0}; - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - /* material has small ambient reflection */ - glMaterialfv(GL_FRONT, GL_AMBIENT, low_ambient); - glMaterialf(GL_FRONT, GL_SHININESS, 40.0); - glPushMatrix(); - glTranslatef(0.0, 2.0, 0.0); - glutSolidTeapot(1.0); - glPopMatrix(); - - /* material has moderate ambient reflection */ - glMaterialfv(GL_FRONT, GL_AMBIENT, more_ambient); - glPushMatrix(); - glTranslatef(0.0, 0.0, 0.0); - glutSolidTeapot(1.0); - glPopMatrix(); - - /* material has large ambient reflection */ - glMaterialfv(GL_FRONT, GL_AMBIENT, most_ambient); - glPushMatrix(); - glTranslatef(0.0, -2.0, 0.0); - glutSolidTeapot(1.0); - glPopMatrix(); - glFlush(); -} - -void -myReshape(int w, int h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - if (w <= h) - glOrtho(-4.0, 4.0, -4.0 * (GLfloat) h / (GLfloat) w, - 4.0 * (GLfloat) h / (GLfloat) w, -10.0, 10.0); - else - glOrtho(-4.0 * (GLfloat) w / (GLfloat) h, - 4.0 * (GLfloat) w / (GLfloat) h, -4.0, 4.0, -10.0, 10.0); - glMatrixMode(GL_MODELVIEW); -} - -/* Main Loop - * Open window with initial window size, title bar, - * RGBA display mode, and handle input events. - */ -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); - glutInitWindowSize(500, 500); - glutCreateWindow(argv[0]); - myinit(); - glutReshapeFunc(myReshape); - glutDisplayFunc(display); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/redbook/teaambient.dsp b/lib/glut-3.7.6/progs/redbook/teaambient.dsp deleted file mode 100644 index d5a0f3c13..000000000 --- a/lib/glut-3.7.6/progs/redbook/teaambient.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="teaambient" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=teaambient - 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 "teaambient.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 "teaambient.mak" CFG="teaambient - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "teaambient - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "teaambient - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "teaambient - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "teaambient - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "teaambient - Win32 Release" -# Name "teaambient - Win32 Debug" -# Begin Source File - -SOURCE=.\teaambient.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/teapots.c b/lib/glut-3.7.6/progs/redbook/teapots.c deleted file mode 100644 index 2431cae73..000000000 --- a/lib/glut-3.7.6/progs/redbook/teapots.c +++ /dev/null @@ -1,206 +0,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. - */ -/** - * teapots.c - * This program demonstrates lots of material properties. - * A single light source illuminates the objects. - */ -#include -#include - -/* - * Initialize depth buffer, projection matrix, light source, and lighting - * model. Do not specify a material property here. - */ -void -myinit(void) -{ - GLfloat ambient[] = - {0.0, 0.0, 0.0, 1.0}; - GLfloat diffuse[] = - {1.0, 1.0, 1.0, 1.0}; - GLfloat position[] = - {0.0, 3.0, 3.0, 0.0}; - - GLfloat lmodel_ambient[] = - {0.2, 0.2, 0.2, 1.0}; - GLfloat local_view[] = - {0.0}; - - glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); - glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); - glLightfv(GL_LIGHT0, GL_POSITION, position); - glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); - glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, local_view); - - glFrontFace(GL_CW); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_AUTO_NORMAL); - glEnable(GL_NORMALIZE); - glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_LESS); -} - -/* - * Move object into position. Use 3rd through 12th parameters to specify the - * material property. Draw a teapot. - */ -void -renderTeapot(GLfloat x, GLfloat y, - GLfloat ambr, GLfloat ambg, GLfloat ambb, - GLfloat difr, GLfloat difg, GLfloat difb, - GLfloat specr, GLfloat specg, GLfloat specb, GLfloat shine) -{ - float mat[4]; - - glPushMatrix(); - glTranslatef(x, y, 0.0); - mat[0] = ambr; - mat[1] = ambg; - mat[2] = ambb; - mat[3] = 1.0; - glMaterialfv(GL_FRONT, GL_AMBIENT, mat); - mat[0] = difr; - mat[1] = difg; - mat[2] = difb; - glMaterialfv(GL_FRONT, GL_DIFFUSE, mat); - mat[0] = specr; - mat[1] = specg; - mat[2] = specb; - glMaterialfv(GL_FRONT, GL_SPECULAR, mat); - glMaterialf(GL_FRONT, GL_SHININESS, shine * 128.0); - glutSolidTeapot(1.0); - glPopMatrix(); -} - -/** - * First column: emerald, jade, obsidian, pearl, ruby, turquoise - * 2nd column: brass, bronze, chrome, copper, gold, silver - * 3rd column: black, cyan, green, red, white, yellow plastic - * 4th column: black, cyan, green, red, white, yellow rubber - */ -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - renderTeapot(2.0, 17.0, 0.0215, 0.1745, 0.0215, - 0.07568, 0.61424, 0.07568, 0.633, 0.727811, 0.633, 0.6); - renderTeapot(2.0, 14.0, 0.135, 0.2225, 0.1575, - 0.54, 0.89, 0.63, 0.316228, 0.316228, 0.316228, 0.1); - renderTeapot(2.0, 11.0, 0.05375, 0.05, 0.06625, - 0.18275, 0.17, 0.22525, 0.332741, 0.328634, 0.346435, 0.3); - renderTeapot(2.0, 8.0, 0.25, 0.20725, 0.20725, - 1, 0.829, 0.829, 0.296648, 0.296648, 0.296648, 0.088); - renderTeapot(2.0, 5.0, 0.1745, 0.01175, 0.01175, - 0.61424, 0.04136, 0.04136, 0.727811, 0.626959, 0.626959, 0.6); - renderTeapot(2.0, 2.0, 0.1, 0.18725, 0.1745, - 0.396, 0.74151, 0.69102, 0.297254, 0.30829, 0.306678, 0.1); - renderTeapot(6.0, 17.0, 0.329412, 0.223529, 0.027451, - 0.780392, 0.568627, 0.113725, 0.992157, 0.941176, 0.807843, - 0.21794872); - renderTeapot(6.0, 14.0, 0.2125, 0.1275, 0.054, - 0.714, 0.4284, 0.18144, 0.393548, 0.271906, 0.166721, 0.2); - renderTeapot(6.0, 11.0, 0.25, 0.25, 0.25, - 0.4, 0.4, 0.4, 0.774597, 0.774597, 0.774597, 0.6); - renderTeapot(6.0, 8.0, 0.19125, 0.0735, 0.0225, - 0.7038, 0.27048, 0.0828, 0.256777, 0.137622, 0.086014, 0.1); - renderTeapot(6.0, 5.0, 0.24725, 0.1995, 0.0745, - 0.75164, 0.60648, 0.22648, 0.628281, 0.555802, 0.366065, 0.4); - renderTeapot(6.0, 2.0, 0.19225, 0.19225, 0.19225, - 0.50754, 0.50754, 0.50754, 0.508273, 0.508273, 0.508273, 0.4); - renderTeapot(10.0, 17.0, 0.0, 0.0, 0.0, 0.01, 0.01, 0.01, - 0.50, 0.50, 0.50, .25); - renderTeapot(10.0, 14.0, 0.0, 0.1, 0.06, 0.0, 0.50980392, 0.50980392, - 0.50196078, 0.50196078, 0.50196078, .25); - renderTeapot(10.0, 11.0, 0.0, 0.0, 0.0, - 0.1, 0.35, 0.1, 0.45, 0.55, 0.45, .25); - renderTeapot(10.0, 8.0, 0.0, 0.0, 0.0, 0.5, 0.0, 0.0, - 0.7, 0.6, 0.6, .25); - renderTeapot(10.0, 5.0, 0.0, 0.0, 0.0, 0.55, 0.55, 0.55, - 0.70, 0.70, 0.70, .25); - renderTeapot(10.0, 2.0, 0.0, 0.0, 0.0, 0.5, 0.5, 0.0, - 0.60, 0.60, 0.50, .25); - renderTeapot(14.0, 17.0, 0.02, 0.02, 0.02, 0.01, 0.01, 0.01, - 0.4, 0.4, 0.4, .078125); - renderTeapot(14.0, 14.0, 0.0, 0.05, 0.05, 0.4, 0.5, 0.5, - 0.04, 0.7, 0.7, .078125); - renderTeapot(14.0, 11.0, 0.0, 0.05, 0.0, 0.4, 0.5, 0.4, - 0.04, 0.7, 0.04, .078125); - renderTeapot(14.0, 8.0, 0.05, 0.0, 0.0, 0.5, 0.4, 0.4, - 0.7, 0.04, 0.04, .078125); - renderTeapot(14.0, 5.0, 0.05, 0.05, 0.05, 0.5, 0.5, 0.5, - 0.7, 0.7, 0.7, .078125); - renderTeapot(14.0, 2.0, 0.05, 0.05, 0.0, 0.5, 0.5, 0.4, - 0.7, 0.7, 0.04, .078125); - glFlush(); -} - -void -myReshape(int w, int h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - if (w <= h) - glOrtho(0.0, 16.0, 0.0, 16.0 * (GLfloat) h / (GLfloat) w, - -10.0, 10.0); - else - glOrtho(0.0, 16.0 * (GLfloat) w / (GLfloat) h, 0.0, 16.0, - -10.0, 10.0); - glMatrixMode(GL_MODELVIEW); -} - -/* - * Main Loop Open window with initial window size, title bar, RGBA display - * mode, and handle input events. - */ -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); - glutCreateWindow(argv[0]); - myinit(); - glutReshapeFunc(myReshape); - glutDisplayFunc(display); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/redbook/teapots.dsp b/lib/glut-3.7.6/progs/redbook/teapots.dsp deleted file mode 100644 index afe6c6281..000000000 --- a/lib/glut-3.7.6/progs/redbook/teapots.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="teapots" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=teapots - 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 "teapots.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 "teapots.mak" CFG="teapots - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "teapots - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "teapots - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "teapots - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "teapots - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "teapots - Win32 Release" -# Name "teapots - Win32 Debug" -# Begin Source File - -SOURCE=.\teapots.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/tess.c b/lib/glut-3.7.6/progs/redbook/tess.c deleted file mode 100644 index 5613346db..000000000 --- a/lib/glut-3.7.6/progs/redbook/tess.c +++ /dev/null @@ -1,241 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -/* - * tess.c - * This program demonstrates polygon tessellation. - * Two tesselated objects are drawn. The first is a - * rectangle with a triangular hole. The second is a - * smooth shaded, self-intersecting star. - * - * Note the exterior rectangle is drawn with its vertices - * in counter-clockwise order, but its interior clockwise. - * Note the combineCallback is needed for the self-intersecting - * star. Also note that removing the TessProperty for the - * star will make the interior unshaded (WINDING_ODD). - */ -#include -#include -#include - -#ifdef GLU_VERSION_1_2 - -/* Win32 calling conventions. */ -#ifndef CALLBACK -#define CALLBACK -#endif - -GLuint startList; - -void display (void) { - glClear(GL_COLOR_BUFFER_BIT); - glColor3f(1.0, 1.0, 1.0); - glCallList(startList); - glCallList(startList + 1); - glFlush(); -} - -void CALLBACK beginCallback(GLenum which) -{ - glBegin(which); -} - -void CALLBACK errorCallback(GLenum errorCode) -{ - const GLubyte *estring; - - estring = gluErrorString(errorCode); - fprintf(stderr, "Tessellation Error: %s\n", estring); - exit(0); -} - -void CALLBACK endCallback(void) -{ - glEnd(); -} - -void CALLBACK vertexCallback(GLvoid *vertex) -{ - const GLdouble *pointer; - - pointer = (GLdouble *) vertex; - glColor3dv(pointer+3); - glVertex3dv(vertex); -} - -/* combineCallback is used to create a new vertex when edges - * intersect. coordinate location is trivial to calculate, - * but weight[4] may be used to average color, normal, or texture - * coordinate data. In this program, color is weighted. - */ -void CALLBACK combineCallback(GLdouble coords[3], - GLdouble *vertex_data[4], - GLfloat weight[4], GLdouble **dataOut ) -{ - GLdouble *vertex; - int i; - - vertex = (GLdouble *) malloc(6 * sizeof(GLdouble)); - - vertex[0] = coords[0]; - vertex[1] = coords[1]; - vertex[2] = coords[2]; - for (i = 3; i < 6; i++) - vertex[i] = weight[0] * vertex_data[0][i] - + weight[1] * vertex_data[1][i] - + weight[2] * vertex_data[2][i] - + weight[3] * vertex_data[3][i]; - *dataOut = vertex; -} - -void init (void) -{ - GLUtesselator *tobj; - GLdouble rect[4][3] = {50.0, 50.0, 0.0, - 200.0, 50.0, 0.0, - 200.0, 200.0, 0.0, - 50.0, 200.0, 0.0}; - GLdouble tri[3][3] = {75.0, 75.0, 0.0, - 125.0, 175.0, 0.0, - 175.0, 75.0, 0.0}; - GLdouble star[5][6] = {250.0, 50.0, 0.0, 1.0, 0.0, 1.0, - 325.0, 200.0, 0.0, 1.0, 1.0, 0.0, - 400.0, 50.0, 0.0, 0.0, 1.0, 1.0, - 250.0, 150.0, 0.0, 1.0, 0.0, 0.0, - 400.0, 150.0, 0.0, 0.0, 1.0, 0.0}; - - glClearColor(0.0, 0.0, 0.0, 0.0); - - startList = glGenLists(2); - - tobj = gluNewTess(); - gluTessCallback(tobj, GLU_TESS_VERTEX, - (GLvoid (CALLBACK*) ()) &glVertex3dv); - gluTessCallback(tobj, GLU_TESS_BEGIN, - (GLvoid (CALLBACK*) ()) &beginCallback); - gluTessCallback(tobj, GLU_TESS_END, - (GLvoid (CALLBACK*) ()) &endCallback); - gluTessCallback(tobj, GLU_TESS_ERROR, - (GLvoid (CALLBACK*) ()) &errorCallback); - - /* rectangle with triangular hole inside */ - glNewList(startList, GL_COMPILE); - glShadeModel(GL_FLAT); - gluTessBeginPolygon(tobj, NULL); - gluTessBeginContour(tobj); - gluTessVertex(tobj, rect[0], rect[0]); - gluTessVertex(tobj, rect[1], rect[1]); - gluTessVertex(tobj, rect[2], rect[2]); - gluTessVertex(tobj, rect[3], rect[3]); - gluTessEndContour(tobj); - gluTessBeginContour(tobj); - gluTessVertex(tobj, tri[0], tri[0]); - gluTessVertex(tobj, tri[1], tri[1]); - gluTessVertex(tobj, tri[2], tri[2]); - gluTessEndContour(tobj); - gluTessEndPolygon(tobj); - glEndList(); - - gluTessCallback(tobj, GLU_TESS_VERTEX, - (GLvoid (CALLBACK*) ()) &vertexCallback); - gluTessCallback(tobj, GLU_TESS_BEGIN, - (GLvoid (CALLBACK*) ()) &beginCallback); - gluTessCallback(tobj, GLU_TESS_END, - (GLvoid (CALLBACK*) ()) &endCallback); - gluTessCallback(tobj, GLU_TESS_ERROR, - (GLvoid (CALLBACK*) ()) &errorCallback); - gluTessCallback(tobj, GLU_TESS_COMBINE, - (GLvoid (CALLBACK*) ()) &combineCallback); - - /* smooth shaded, self-intersecting star */ - glNewList(startList + 1, GL_COMPILE); - glShadeModel(GL_SMOOTH); - gluTessProperty(tobj, GLU_TESS_WINDING_RULE, - GLU_TESS_WINDING_POSITIVE); - gluTessBeginPolygon(tobj, NULL); - gluTessBeginContour(tobj); - gluTessVertex(tobj, star[0], star[0]); - gluTessVertex(tobj, star[1], star[1]); - gluTessVertex(tobj, star[2], star[2]); - gluTessVertex(tobj, star[3], star[3]); - gluTessVertex(tobj, star[4], star[4]); - gluTessEndContour(tobj); - gluTessEndPolygon(tobj); - glEndList(); - gluDeleteTess(tobj); -} - -void reshape (int w, int h) -{ - glViewport(0, 0, (GLsizei) w, (GLsizei) h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluOrtho2D(0.0, (GLdouble) w, 0.0, (GLdouble) h); -} - -/* ARGSUSED1 */ -void keyboard(unsigned char key, int x, int y) -{ - switch (key) { - case 27: - exit(0); - break; - } -} - -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); - glutInitWindowSize(500, 500); - glutCreateWindow(argv[0]); - init(); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glutKeyboardFunc(keyboard); - glutMainLoop(); - return 0; -} - -#else -int main(int argc, char** argv) -{ - fprintf (stderr, "This program demonstrates the new tesselator API in GLU 1.2.\n"); - fprintf (stderr, "Your GLU library does not support this new interface, sorry.\n"); - return 0; -} -#endif diff --git a/lib/glut-3.7.6/progs/redbook/tess.dsp b/lib/glut-3.7.6/progs/redbook/tess.dsp deleted file mode 100644 index ffe9b8270..000000000 --- a/lib/glut-3.7.6/progs/redbook/tess.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="tess" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=tess - 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 "tess.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 "tess.mak" CFG="tess - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "tess - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "tess - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "tess - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "tess - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "tess - Win32 Release" -# Name "tess - Win32 Debug" -# Begin Source File - -SOURCE=.\tess.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/tesswind.c b/lib/glut-3.7.6/progs/redbook/tesswind.c deleted file mode 100644 index 455966a0b..000000000 --- a/lib/glut-3.7.6/progs/redbook/tesswind.c +++ /dev/null @@ -1,290 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -/* - * tesswind.c - * This program demonstrates the winding rule polygon - * tessellation property. Four tessellated objects are drawn, - * each with very different contours. When the w key is pressed, - * the objects are drawn with a different winding rule. - */ -#include -#include -#include - -#ifdef GLU_VERSION_1_2 - -/* Win32 calling conventions. */ -#ifndef CALLBACK -#define CALLBACK -#endif - -GLdouble currentWinding = GLU_TESS_WINDING_ODD; -int currentShape = 0; -GLUtesselator *tobj; -GLuint list; - -/* Make four display lists, - * each with a different tessellated object. - */ -void makeNewLists (void) { - int i; - static GLdouble rects[12][3] = - {50.0, 50.0, 0.0, 300.0, 50.0, 0.0, - 300.0, 300.0, 0.0, 50.0, 300.0, 0.0, - 100.0, 100.0, 0.0, 250.0, 100.0, 0.0, - 250.0, 250.0, 0.0, 100.0, 250.0, 0.0, - 150.0, 150.0, 0.0, 200.0, 150.0, 0.0, - 200.0, 200.0, 0.0, 150.0, 200.0, 0.0}; - static GLdouble spiral[16][3] = - {400.0, 250.0, 0.0, 400.0, 50.0, 0.0, - 50.0, 50.0, 0.0, 50.0, 400.0, 0.0, - 350.0, 400.0, 0.0, 350.0, 100.0, 0.0, - 100.0, 100.0, 0.0, 100.0, 350.0, 0.0, - 300.0, 350.0, 0.0, 300.0, 150.0, 0.0, - 150.0, 150.0, 0.0, 150.0, 300.0, 0.0, - 250.0, 300.0, 0.0, 250.0, 200.0, 0.0, - 200.0, 200.0, 0.0, 200.0, 250.0, 0.0}; - static GLdouble quad1[4][3] = - {50.0, 150.0, 0.0, 350.0, 150.0, 0.0, - 350.0, 200.0, 0.0, 50.0, 200.0, 0.0}; - static GLdouble quad2[4][3] = - {100.0, 100.0, 0.0, 300.0, 100.0, 0.0, - 300.0, 350.0, 0.0, 100.0, 350.0, 0.0}; - static GLdouble tri[3][3] = - {200.0, 50.0, 0.0, 250.0, 300.0, 0.0, - 150.0, 300.0, 0.0}; - - gluTessProperty(tobj, GLU_TESS_WINDING_RULE, - currentWinding); - - glNewList(list, GL_COMPILE); - gluTessBeginPolygon(tobj, NULL); - gluTessBeginContour(tobj); - for (i = 0; i < 4; i++) - gluTessVertex(tobj, rects[i], rects[i]); - gluTessEndContour(tobj); - gluTessBeginContour(tobj); - for (i = 4; i < 8; i++) - gluTessVertex(tobj, rects[i], rects[i]); - gluTessEndContour(tobj); - gluTessBeginContour(tobj); - for (i = 8; i < 12; i++) - gluTessVertex(tobj, rects[i], rects[i]); - gluTessEndContour(tobj); - gluTessEndPolygon(tobj); - glEndList(); - - glNewList(list+1, GL_COMPILE); - gluTessBeginPolygon(tobj, NULL); - gluTessBeginContour(tobj); - for (i = 0; i < 4; i++) - gluTessVertex(tobj, rects[i], rects[i]); - gluTessEndContour(tobj); - gluTessBeginContour(tobj); - for (i = 7; i >= 4; i--) - gluTessVertex(tobj, rects[i], rects[i]); - gluTessEndContour(tobj); - gluTessBeginContour(tobj); - for (i = 11; i >= 8; i--) - gluTessVertex(tobj, rects[i], rects[i]); - gluTessEndContour(tobj); - gluTessEndPolygon(tobj); - glEndList(); - - glNewList(list+2, GL_COMPILE); - gluTessBeginPolygon(tobj, NULL); - gluTessBeginContour(tobj); - for (i = 0; i < 16; i++) - gluTessVertex(tobj, spiral[i], spiral[i]); - gluTessEndContour(tobj); - gluTessEndPolygon(tobj); - glEndList(); - - glNewList(list+3, GL_COMPILE); - gluTessBeginPolygon(tobj, NULL); - gluTessBeginContour(tobj); - for (i = 0; i < 4; i++) - gluTessVertex(tobj, quad1[i], quad1[i]); - gluTessEndContour(tobj); - gluTessBeginContour(tobj); - for (i = 0; i < 4; i++) - gluTessVertex(tobj, quad2[i], quad2[i]); - gluTessEndContour(tobj); - gluTessBeginContour(tobj); - for (i = 0; i < 3; i++) - gluTessVertex(tobj, tri[i], tri[i]); - gluTessEndContour(tobj); - gluTessEndPolygon(tobj); - glEndList(); -} - -void display (void) { - glClear(GL_COLOR_BUFFER_BIT); - glColor3f(1.0, 1.0, 1.0); - glPushMatrix(); - glCallList(list); - glTranslatef(0.0, 500.0, 0.0); - glCallList(list+1); - glTranslatef(500.0, -500.0, 0.0); - glCallList(list+2); - glTranslatef(0.0, 500.0, 0.0); - glCallList(list+3); - glPopMatrix(); - glFlush(); -} - -void CALLBACK beginCallback(GLenum which) -{ - glBegin(which); -} - -void CALLBACK errorCallback(GLenum errorCode) -{ - const GLubyte *estring; - - estring = gluErrorString(errorCode); - fprintf(stderr, "Tessellation Error: %s\n", estring); - exit(0); -} - -void CALLBACK endCallback(void) -{ - glEnd(); -} - -/* combineCallback is used to create a new vertex when edges - * intersect. coordinate location is trivial to calculate, - * but weight[4] may be used to average color, normal, or texture - * coordinate data. - */ -/* ARGSUSED */ -void CALLBACK combineCallback(GLdouble coords[3], GLdouble *data[4], - GLfloat weight[4], GLdouble **dataOut ) -{ - GLdouble *vertex; - vertex = (GLdouble *) malloc(3 * sizeof(GLdouble)); - - vertex[0] = coords[0]; - vertex[1] = coords[1]; - vertex[2] = coords[2]; - *dataOut = vertex; -} - -void init(void) -{ - glClearColor(0.0, 0.0, 0.0, 0.0); - glShadeModel(GL_FLAT); - - tobj = gluNewTess(); - gluTessCallback(tobj, GLU_TESS_VERTEX, - (GLvoid (CALLBACK*) ()) &glVertex3dv); - gluTessCallback(tobj, GLU_TESS_BEGIN, - (GLvoid (CALLBACK*) ()) &beginCallback); - gluTessCallback(tobj, GLU_TESS_END, - (GLvoid (CALLBACK*) ()) &endCallback); - gluTessCallback(tobj, GLU_TESS_ERROR, - (GLvoid (CALLBACK*) ()) &errorCallback); - gluTessCallback(tobj, GLU_TESS_COMBINE, - (GLvoid (CALLBACK*) ()) &combineCallback); - - list = glGenLists(4); - makeNewLists(); -} - -void reshape(int w, int h) -{ - glViewport(0, 0, (GLsizei) w, (GLsizei) h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - if (w <= h) - gluOrtho2D(0.0, 1000.0, 0.0, 1000.0 * (GLdouble)h/(GLdouble)w); - else - gluOrtho2D(0.0, 1000.0 * (GLdouble)w/(GLdouble)h, 0.0, 1000.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -/* ARGSUSED1 */ -void keyboard(unsigned char key, int x, int y) -{ - switch (key) { - case 'w': - case 'W': - if (currentWinding == GLU_TESS_WINDING_ODD) - currentWinding = GLU_TESS_WINDING_NONZERO; - else if (currentWinding == GLU_TESS_WINDING_NONZERO) - currentWinding = GLU_TESS_WINDING_POSITIVE; - else if (currentWinding == GLU_TESS_WINDING_POSITIVE) - currentWinding = GLU_TESS_WINDING_NEGATIVE; - else if (currentWinding == GLU_TESS_WINDING_NEGATIVE) - currentWinding = GLU_TESS_WINDING_ABS_GEQ_TWO; - else if (currentWinding == GLU_TESS_WINDING_ABS_GEQ_TWO) - currentWinding = GLU_TESS_WINDING_ODD; - makeNewLists(); - glutPostRedisplay(); - break; - case 27: - exit(0); - break; - default: - break; - } -} - -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); - glutInitWindowSize(500, 500); - glutCreateWindow(argv[0]); - init(); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glutKeyboardFunc(keyboard); - glutMainLoop(); - return 0; -} - -#else -int main(int argc, char** argv) -{ - fprintf (stderr, "This program demonstrates the new tesselator API in GLU 1.2.\n"); - fprintf (stderr, "Your GLU library does not support this new interface, sorry.\n"); - return 0; -} -#endif diff --git a/lib/glut-3.7.6/progs/redbook/tesswind.dsp b/lib/glut-3.7.6/progs/redbook/tesswind.dsp deleted file mode 100644 index 8701ef032..000000000 --- a/lib/glut-3.7.6/progs/redbook/tesswind.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="tesswind" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=tesswind - 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 "tesswind.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 "tesswind.mak" CFG="tesswind - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "tesswind - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "tesswind - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "tesswind - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "tesswind - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "tesswind - Win32 Release" -# Name "tesswind - Win32 Debug" -# Begin Source File - -SOURCE=.\tesswind.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/texbind.c b/lib/glut-3.7.6/progs/redbook/texbind.c deleted file mode 100644 index 2f08f8225..000000000 --- a/lib/glut-3.7.6/progs/redbook/texbind.c +++ /dev/null @@ -1,172 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -/* texbind.c - * This program demonstrates using glBindTexture() by - * creating and managing two textures. - */ -#include -#include -#include - -#ifdef GL_VERSION_1_1 -/* Create checkerboard texture */ -#define checkImageWidth 64 -#define checkImageHeight 64 -static GLubyte checkImage[checkImageHeight][checkImageWidth][4]; -static GLubyte otherImage[checkImageHeight][checkImageWidth][4]; - -static GLuint texName[2]; - -void makeCheckImages(void) -{ - int i, j, c; - - for (i = 0; i < checkImageHeight; i++) { - for (j = 0; j < checkImageWidth; j++) { - c = ((((i&0x8)==0)^((j&0x8)==0)))*255; - checkImage[i][j][0] = (GLubyte) c; - checkImage[i][j][1] = (GLubyte) c; - checkImage[i][j][2] = (GLubyte) c; - checkImage[i][j][3] = (GLubyte) 255; - c = ((((i&0x10)==0)^((j&0x10))==0))*255; - otherImage[i][j][0] = (GLubyte) c; - otherImage[i][j][1] = (GLubyte) 0; - otherImage[i][j][2] = (GLubyte) 0; - otherImage[i][j][3] = (GLubyte) 255; - } - } -} - -void init(void) -{ - glClearColor (0.0, 0.0, 0.0, 0.0); - glShadeModel(GL_FLAT); - glEnable(GL_DEPTH_TEST); - - makeCheckImages(); - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - - glGenTextures(2, texName); - glBindTexture(GL_TEXTURE_2D, texName[0]); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, - GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, - GL_NEAREST); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, checkImageWidth, - checkImageHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, - checkImage); - - glBindTexture(GL_TEXTURE_2D, texName[1]); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, checkImageWidth, - checkImageHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, - otherImage); - glEnable(GL_TEXTURE_2D); -} - -void display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glBindTexture(GL_TEXTURE_2D, texName[0]); - glBegin(GL_QUADS); - glTexCoord2f(0.0, 0.0); glVertex3f(-2.0, -1.0, 0.0); - glTexCoord2f(0.0, 1.0); glVertex3f(-2.0, 1.0, 0.0); - glTexCoord2f(1.0, 1.0); glVertex3f(0.0, 1.0, 0.0); - glTexCoord2f(1.0, 0.0); glVertex3f(0.0, -1.0, 0.0); - glEnd(); - glBindTexture(GL_TEXTURE_2D, texName[1]); - glBegin(GL_QUADS); - glTexCoord2f(0.0, 0.0); glVertex3f(1.0, -1.0, 0.0); - glTexCoord2f(0.0, 1.0); glVertex3f(1.0, 1.0, 0.0); - glTexCoord2f(1.0, 1.0); glVertex3f(2.41421, 1.0, -1.41421); - glTexCoord2f(1.0, 0.0); glVertex3f(2.41421, -1.0, -1.41421); - glEnd(); - glFlush(); -} - -void reshape(int w, int h) -{ - glViewport(0, 0, (GLsizei) w, (GLsizei) h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 1.0, 30.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(0.0, 0.0, -3.6); -} - -/* ARGSUSED1 */ -void keyboard(unsigned char key, int x, int y) -{ - switch (key) { - case 27: - exit(0); - break; - } -} - -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); - glutInitWindowSize(250, 250); - glutInitWindowPosition(100, 100); - glutCreateWindow(argv[0]); - init(); - glutReshapeFunc(reshape); - glutDisplayFunc(display); - glutKeyboardFunc (keyboard); - glutMainLoop(); - return 0; -} -#else -int main(int argc, char** argv) -{ - fprintf (stderr, "This program demonstrates a feature which is not in OpenGL Version 1.0.\n"); - fprintf (stderr, "If your implementation of OpenGL Version 1.0 has the right extensions,\n"); - fprintf (stderr, "you may be able to modify this program to make it run.\n"); - return 0; -} -#endif - diff --git a/lib/glut-3.7.6/progs/redbook/texbind.dsp b/lib/glut-3.7.6/progs/redbook/texbind.dsp deleted file mode 100644 index 0048e4612..000000000 --- a/lib/glut-3.7.6/progs/redbook/texbind.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="texbind" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=texbind - 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 "texbind.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 "texbind.mak" CFG="texbind - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "texbind - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "texbind - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "texbind - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "texbind - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "texbind - Win32 Release" -# Name "texbind - Win32 Debug" -# Begin Source File - -SOURCE=.\texbind.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/texgen.c b/lib/glut-3.7.6/progs/redbook/texgen.c deleted file mode 100644 index 7c1802a3b..000000000 --- a/lib/glut-3.7.6/progs/redbook/texgen.c +++ /dev/null @@ -1,207 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -/* texgen.c - * This program draws a texture mapped teapot with - * automatically generated texture coordinates. The - * texture is rendered as stripes on the teapot. - * Initially, the object is drawn with texture coordinates - * based upon the object coordinates of the vertex - * and distance from the plane x = 0. Pressing the 'e' - * key changes the coordinate generation to eye coordinates - * of the vertex. Pressing the 'o' key switches it back - * to the object coordinates. Pressing the 's' key - * changes the plane to a slanted one (x + y + z = 0). - * Pressing the 'x' key switches it back to x = 0. - */ - -#include -#include -#include - -#define stripeImageWidth 32 -GLubyte stripeImage[4*stripeImageWidth]; - -#ifdef GL_VERSION_1_1 -static GLuint texName; -#endif - -void makeStripeImage(void) -{ - int j; - - for (j = 0; j < stripeImageWidth; j++) { - stripeImage[4*j] = (GLubyte) ((j<=4) ? 255 : 0); - stripeImage[4*j+1] = (GLubyte) ((j>4) ? 255 : 0); - stripeImage[4*j+2] = (GLubyte) 0; - stripeImage[4*j+3] = (GLubyte) 255; - } -} - -/* planes for texture coordinate generation */ -static GLfloat xequalzero[] = {1.0, 0.0, 0.0, 0.0}; -static GLfloat slanted[] = {1.0, 1.0, 1.0, 0.0}; -static GLfloat *currentCoeff; -static GLenum currentPlane; -static GLint currentGenMode; - -void init(void) -{ - glClearColor (0.0, 0.0, 0.0, 0.0); - glEnable(GL_DEPTH_TEST); - glShadeModel(GL_SMOOTH); - - makeStripeImage(); - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - -#ifdef GL_VERSION_1_1 - glGenTextures(1, &texName); - glBindTexture(GL_TEXTURE_1D, texName); -#endif - glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); -#ifdef GL_VERSION_1_1 - glTexImage1D(GL_TEXTURE_1D, 0, GL_RGBA, stripeImageWidth, 0, - GL_RGBA, GL_UNSIGNED_BYTE, stripeImage); -#else - glTexImage1D(GL_TEXTURE_1D, 0, 4, stripeImageWidth, 0, - GL_RGBA, GL_UNSIGNED_BYTE, stripeImage); -#endif - - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - currentCoeff = xequalzero; - currentGenMode = GL_OBJECT_LINEAR; - currentPlane = GL_OBJECT_PLANE; - glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, currentGenMode); - glTexGenfv(GL_S, currentPlane, currentCoeff); - - glEnable(GL_TEXTURE_GEN_S); - glEnable(GL_TEXTURE_1D); - glEnable(GL_CULL_FACE); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_AUTO_NORMAL); - glEnable(GL_NORMALIZE); - glFrontFace(GL_CW); - glCullFace(GL_BACK); - glMaterialf (GL_FRONT, GL_SHININESS, 64.0); -} - -void display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glPushMatrix (); - glRotatef(45.0, 0.0, 0.0, 1.0); -#ifdef GL_VERSION_1_1 - glBindTexture(GL_TEXTURE_1D, texName); -#endif - glutSolidTeapot(2.0); - glPopMatrix (); - glFlush(); -} - -void reshape(int w, int h) -{ - glViewport(0, 0, (GLsizei) w, (GLsizei) h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - if (w <= h) - glOrtho (-3.5, 3.5, -3.5*(GLfloat)h/(GLfloat)w, - 3.5*(GLfloat)h/(GLfloat)w, -3.5, 3.5); - else - glOrtho (-3.5*(GLfloat)w/(GLfloat)h, - 3.5*(GLfloat)w/(GLfloat)h, -3.5, 3.5, -3.5, 3.5); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -/* ARGSUSED1 */ -void keyboard (unsigned char key, int x, int y) -{ - switch (key) { - case 'e': - case 'E': - currentGenMode = GL_EYE_LINEAR; - currentPlane = GL_EYE_PLANE; - glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, currentGenMode); - glTexGenfv(GL_S, currentPlane, currentCoeff); - glutPostRedisplay(); - break; - case 'o': - case 'O': - currentGenMode = GL_OBJECT_LINEAR; - currentPlane = GL_OBJECT_PLANE; - glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, currentGenMode); - glTexGenfv(GL_S, currentPlane, currentCoeff); - glutPostRedisplay(); - break; - case 's': - case 'S': - currentCoeff = slanted; - glTexGenfv(GL_S, currentPlane, currentCoeff); - glutPostRedisplay(); - break; - case 'x': - case 'X': - currentCoeff = xequalzero; - glTexGenfv(GL_S, currentPlane, currentCoeff); - glutPostRedisplay(); - break; - case 27: - exit(0); - break; - default: - break; - } -} - -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); - glutInitWindowSize(256, 256); - glutInitWindowPosition(100, 100); - glutCreateWindow (argv[0]); - init (); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glutKeyboardFunc(keyboard); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/redbook/texgen.dsp b/lib/glut-3.7.6/progs/redbook/texgen.dsp deleted file mode 100644 index 307792e31..000000000 --- a/lib/glut-3.7.6/progs/redbook/texgen.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="texgen" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=texgen - 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 "texgen.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 "texgen.mak" CFG="texgen - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "texgen - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "texgen - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "texgen - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "texgen - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "texgen - Win32 Release" -# Name "texgen - Win32 Debug" -# Begin Source File - -SOURCE=.\texgen.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/texprox.c b/lib/glut-3.7.6/progs/redbook/texprox.c deleted file mode 100644 index 6f1e853fa..000000000 --- a/lib/glut-3.7.6/progs/redbook/texprox.c +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -/* - * texprox.c - * The brief program illustrates use of texture proxies. - * This program only prints out some messages about whether - * certain size textures are supported and then exits. - */ -#include -#include -#include - -#ifdef GL_VERSION_1_1 - -/* Microsoft OpenGL 1.1's forgets to define - GL_TEXTURE_INTERNAL_FORMAT. */ -#ifndef GL_TEXTURE_INTERNAL_FORMAT -#define GL_TEXTURE_INTERNAL_FORMAT GL_TEXTURE_COMPONENTS -#endif - -void init(void) -{ - GLint proxyComponents; - - putchar('\n'); - - glTexImage2D(GL_PROXY_TEXTURE_2D, 0, GL_RGBA8, - 64, 64, 0, - GL_RGBA, GL_UNSIGNED_BYTE, NULL); - glGetTexLevelParameteriv(GL_PROXY_TEXTURE_2D, 0, - GL_TEXTURE_INTERNAL_FORMAT, &proxyComponents); - printf ("Proxying 64x64 level 0 RGBA8 texture (level 0)\n"); - if (proxyComponents == GL_RGBA8) - printf ("proxy allocation succeeded\n"); - else - printf ("proxy allocation failed\n"); - putchar('\n'); - - glTexImage2D(GL_PROXY_TEXTURE_2D, 0, GL_RGBA16, - 2048, 2048, 0, - GL_RGBA, GL_UNSIGNED_SHORT, NULL); - glGetTexLevelParameteriv(GL_PROXY_TEXTURE_2D, 0, - GL_TEXTURE_INTERNAL_FORMAT, &proxyComponents); - printf ("Proxying 2048x2048 level 0 RGBA16 texture (big so unlikely to be supported)\n"); - if (proxyComponents == GL_RGBA16) - printf ("proxy allocation succeeded\n"); - else - printf ("proxy allocation failed\n"); - putchar('\n'); -} - -void display(void) -{ - exit(0); -} - -void reshape (int w, int h) -{ - glViewport (0, 0, (GLsizei) w, (GLsizei) h); - glMatrixMode (GL_PROJECTION); - glLoadIdentity (); -} - -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); - glutInitWindowSize (500, 500); - glutInitWindowPosition (100, 100); - glutCreateWindow (argv[0]); - init (); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glutMainLoop(); - return 0; -} -#else -int main(int argc, char** argv) -{ - fprintf (stderr, "This program demonstrates a feature which is not in OpenGL Version 1.0.\n"); - fprintf (stderr, "If your implementation of OpenGL Version 1.0 has the right extensions,\n"); - fprintf (stderr, "you may be able to modify this program to make it run.\n"); - return 0; -} -#endif diff --git a/lib/glut-3.7.6/progs/redbook/texprox.dsp b/lib/glut-3.7.6/progs/redbook/texprox.dsp deleted file mode 100644 index d36148423..000000000 --- a/lib/glut-3.7.6/progs/redbook/texprox.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="texprox" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=texprox - 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 "texprox.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 "texprox.mak" CFG="texprox - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "texprox - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "texprox - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "texprox - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "texprox - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "texprox - Win32 Release" -# Name "texprox - Win32 Debug" -# Begin Source File - -SOURCE=.\texprox.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/texsub.c b/lib/glut-3.7.6/progs/redbook/texsub.c deleted file mode 100644 index 47071759c..000000000 --- a/lib/glut-3.7.6/progs/redbook/texsub.c +++ /dev/null @@ -1,187 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -/* texsub.c - * This program texture maps a checkerboard image onto - * two rectangles. This program clamps the texture, if - * the texture coordinates fall outside 0.0 and 1.0. - * If the s key is pressed, a texture subimage is used to - * alter the original texture. If the r key is pressed, - * the original texture is restored. - */ -#include -#include -#include - -#ifdef GL_VERSION_1_1 -/* Create checkerboard textures */ -#define checkImageWidth 64 -#define checkImageHeight 64 -#define subImageWidth 16 -#define subImageHeight 16 -static GLubyte checkImage[checkImageHeight][checkImageWidth][4]; -static GLubyte subImage[subImageHeight][subImageWidth][4]; - -static GLuint texName; - -void makeCheckImages(void) -{ - int i, j, c; - - for (i = 0; i < checkImageHeight; i++) { - for (j = 0; j < checkImageWidth; j++) { - c = ((((i&0x8)==0)^((j&0x8)==0)))*255; - checkImage[i][j][0] = (GLubyte) c; - checkImage[i][j][1] = (GLubyte) c; - checkImage[i][j][2] = (GLubyte) c; - checkImage[i][j][3] = (GLubyte) 255; - } - } - for (i = 0; i < subImageHeight; i++) { - for (j = 0; j < subImageWidth; j++) { - c = ((((i&0x4)==0)^((j&0x4))==0))*255; - subImage[i][j][0] = (GLubyte) c; - subImage[i][j][1] = (GLubyte) 0; - subImage[i][j][2] = (GLubyte) 0; - subImage[i][j][3] = (GLubyte) 255; - } - } -} - -void init(void) -{ - glClearColor (0.0, 0.0, 0.0, 0.0); - glShadeModel(GL_FLAT); - glEnable(GL_DEPTH_TEST); - - makeCheckImages(); - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - - glGenTextures(1, &texName); - glBindTexture(GL_TEXTURE_2D, texName); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, checkImageWidth, checkImageHeight, - 0, GL_RGBA, GL_UNSIGNED_BYTE, checkImage); -} - -void display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glEnable(GL_TEXTURE_2D); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); - glBindTexture(GL_TEXTURE_2D, texName); - glBegin(GL_QUADS); - glTexCoord2f(0.0, 0.0); glVertex3f(-2.0, -1.0, 0.0); - glTexCoord2f(0.0, 1.0); glVertex3f(-2.0, 1.0, 0.0); - glTexCoord2f(1.0, 1.0); glVertex3f(0.0, 1.0, 0.0); - glTexCoord2f(1.0, 0.0); glVertex3f(0.0, -1.0, 0.0); - - glTexCoord2f(0.0, 0.0); glVertex3f(1.0, -1.0, 0.0); - glTexCoord2f(0.0, 1.0); glVertex3f(1.0, 1.0, 0.0); - glTexCoord2f(1.0, 1.0); glVertex3f(2.41421, 1.0, -1.41421); - glTexCoord2f(1.0, 0.0); glVertex3f(2.41421, -1.0, -1.41421); - glEnd(); - glFlush(); - glDisable(GL_TEXTURE_2D); -} - -void reshape(int w, int h) -{ - glViewport(0, 0, (GLsizei) w, (GLsizei) h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 1.0, 30.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(0.0, 0.0, -3.6); -} - -/* ARGSUSED1 */ -void keyboard (unsigned char key, int x, int y) -{ - switch (key) { - case 's': - case 'S': - glBindTexture(GL_TEXTURE_2D, texName); - glTexSubImage2D(GL_TEXTURE_2D, 0, 12, 44, subImageWidth, - subImageHeight, GL_RGBA, - GL_UNSIGNED_BYTE, subImage); - glutPostRedisplay(); - break; - case 'r': - case 'R': - glBindTexture(GL_TEXTURE_2D, texName); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, checkImageWidth, - checkImageHeight, 0, GL_RGBA, - GL_UNSIGNED_BYTE, checkImage); - glutPostRedisplay(); - break; - case 27: - exit(0); - break; - default: - break; - } -} - -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); - glutInitWindowSize(250, 250); - glutInitWindowPosition(100, 100); - glutCreateWindow(argv[0]); - init(); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glutKeyboardFunc(keyboard); - glutMainLoop(); - return 0; -} -#else -int main(int argc, char** argv) -{ - fprintf (stderr, "This program demonstrates a feature which is not in OpenGL Version 1.0.\n"); - fprintf (stderr, "If your implementation of OpenGL Version 1.0 has the right extensions,\n"); - fprintf (stderr, "you may be able to modify this program to make it run.\n"); - return 0; -} -#endif diff --git a/lib/glut-3.7.6/progs/redbook/texsub.dsp b/lib/glut-3.7.6/progs/redbook/texsub.dsp deleted file mode 100644 index 0c0053667..000000000 --- a/lib/glut-3.7.6/progs/redbook/texsub.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="texsub" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=texsub - 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 "texsub.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 "texsub.mak" CFG="texsub - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "texsub - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "texsub - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "texsub - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "texsub - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "texsub - Win32 Release" -# Name "texsub - Win32 Debug" -# Begin Source File - -SOURCE=.\texsub.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/texturesurf.c b/lib/glut-3.7.6/progs/redbook/texturesurf.c deleted file mode 100644 index 89cdbcc65..000000000 --- a/lib/glut-3.7.6/progs/redbook/texturesurf.c +++ /dev/null @@ -1,141 +0,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. - */ -/* texturesurf.c - * This program uses evaluators to generate a curved - * surface and automatically generated texture coordinates. - */ - -#include -#include -#include - -GLfloat ctrlpoints[4][4][3] = { - {{ -1.5, -1.5, 4.0}, { -0.5, -1.5, 2.0}, - {0.5, -1.5, -1.0}, {1.5, -1.5, 2.0}}, - {{ -1.5, -0.5, 1.0}, { -0.5, -0.5, 3.0}, - {0.5, -0.5, 0.0}, {1.5, -0.5, -1.0}}, - {{ -1.5, 0.5, 4.0}, { -0.5, 0.5, 0.0}, - {0.5, 0.5, 3.0}, {1.5, 0.5, 4.0}}, - {{ -1.5, 1.5, -2.0}, { -0.5, 1.5, -2.0}, - {0.5, 1.5, 0.0}, {1.5, 1.5, -1.0}} -}; - -GLfloat texpts[2][2][2] = {{{0.0, 0.0}, {0.0, 1.0}}, - {{1.0, 0.0}, {1.0, 1.0}}}; - -void display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glColor3f(1.0, 1.0, 1.0); - glEvalMesh2(GL_FILL, 0, 20, 0, 20); - glFlush(); -} - -#define imageWidth 64 -#define imageHeight 64 -GLubyte image[3*imageWidth*imageHeight]; - -void makeImage(void) -{ - int i, j; - float ti, tj; - - for (i = 0; i < imageWidth; i++) { - ti = 2.0*3.14159265*i/imageWidth; - for (j = 0; j < imageHeight; j++) { - tj = 2.0*3.14159265*j/imageHeight; - - image[3*(imageHeight*i+j)] = (GLubyte) 127*(1.0+sin(ti)); - image[3*(imageHeight*i+j)+1] = (GLubyte) 127*(1.0+cos(2*tj)); - image[3*(imageHeight*i+j)+2] = (GLubyte) 127*(1.0+cos(ti+tj)); - } - } -} - -void myinit(void) -{ - glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, - 0, 1, 12, 4, &ctrlpoints[0][0][0]); - glMap2f(GL_MAP2_TEXTURE_COORD_2, 0, 1, 2, 2, - 0, 1, 4, 2, &texpts[0][0][0]); - glEnable(GL_MAP2_TEXTURE_COORD_2); - glEnable(GL_MAP2_VERTEX_3); - glMapGrid2f(20, 0.0, 1.0, 20, 0.0, 1.0); - makeImage(); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexImage2D(GL_TEXTURE_2D, 0, 3, imageWidth, imageHeight, 0, - GL_RGB, GL_UNSIGNED_BYTE, image); - glEnable(GL_TEXTURE_2D); - glEnable(GL_DEPTH_TEST); - glEnable(GL_NORMALIZE); - glShadeModel (GL_FLAT); -} - -void myReshape(int w, int h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - if (w <= h) - glOrtho(-4.0, 4.0, -4.0*(GLfloat)h/(GLfloat)w, - 4.0*(GLfloat)h/(GLfloat)w, -4.0, 4.0); - else - glOrtho(-4.0*(GLfloat)w/(GLfloat)h, - 4.0*(GLfloat)w/(GLfloat)h, -4.0, 4.0, -4.0, 4.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glRotatef(85.0, 1.0, 1.0, 1.0); -} - -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); - glutCreateWindow (argv[0]); - myinit(); - glutReshapeFunc (myReshape); - glutDisplayFunc(display); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/redbook/texturesurf.dsp b/lib/glut-3.7.6/progs/redbook/texturesurf.dsp deleted file mode 100644 index 828a1eafa..000000000 --- a/lib/glut-3.7.6/progs/redbook/texturesurf.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="texturesurf" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=texturesurf - 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 "texturesurf.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 "texturesurf.mak" CFG="texturesurf - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "texturesurf - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "texturesurf - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "texturesurf - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "texturesurf - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "texturesurf - Win32 Release" -# Name "texturesurf - Win32 Debug" -# Begin Source File - -SOURCE=.\texturesurf.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/torus.c b/lib/glut-3.7.6/progs/redbook/torus.c deleted file mode 100644 index 7ae4d41e2..000000000 --- a/lib/glut-3.7.6/progs/redbook/torus.c +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -/* - * torus.c - * This program demonstrates the creation of a display list. - */ - -#include -#include -#include -#include - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -GLuint theTorus; - -/* Draw a torus */ -static void torus(int numc, int numt) -{ - int i, j, k; - double s, t, x, y, z, twopi; - - twopi = 2 * (double)M_PI; - for (i = 0; i < numc; i++) { - glBegin(GL_QUAD_STRIP); - for (j = 0; j <= numt; j++) { - for (k = 1; k >= 0; k--) { - s = (i + k) % numc + 0.5; - t = j % numt; - - x = (1+.1*cos(s*twopi/numc))*cos(t*twopi/numt); - y = (1+.1*cos(s*twopi/numc))*sin(t*twopi/numt); - z = .1 * sin(s * twopi / numc); - glVertex3f(x, y, z); - } - } - glEnd(); - } -} - -/* Create display list with Torus and initialize state */ -static void init(void) -{ - theTorus = glGenLists (1); - glNewList(theTorus, GL_COMPILE); - torus(8, 25); - glEndList(); - - glShadeModel(GL_FLAT); - glClearColor(0.0, 0.0, 0.0, 0.0); -} - -/* Clear window and draw torus */ -void display(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - glColor3f (1.0, 1.0, 1.0); - glCallList(theTorus); - glFlush(); -} - -/* Handle window resize */ -void reshape(int w, int h) -{ - glViewport(0, 0, (GLsizei) w, (GLsizei) h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(30, (GLfloat) w/(GLfloat) h, 1.0, 100.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - gluLookAt(0, 0, 10, 0, 0, 0, 0, 1, 0); -} - -/* Rotate about x-axis when "x" typed; rotate about y-axis - when "y" typed; "i" returns torus to original view */ -/* ARGSUSED1 */ -void keyboard(unsigned char key, int x, int y) -{ - switch (key) { - case 'x': - case 'X': - glRotatef(30.,1.0,0.0,0.0); - glutPostRedisplay(); - break; - case 'y': - case 'Y': - glRotatef(30.,0.0,1.0,0.0); - glutPostRedisplay(); - break; - case 'i': - case 'I': - glLoadIdentity(); - gluLookAt(0, 0, 10, 0, 0, 0, 0, 1, 0); - glutPostRedisplay(); - break; - case 27: - exit(0); - break; - } -} - -int main(int argc, char **argv) -{ - glutInitWindowSize(200, 200); - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); - glutCreateWindow(argv[0]); - init(); - glutReshapeFunc(reshape); - glutKeyboardFunc(keyboard); - glutDisplayFunc(display); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/redbook/torus.dsp b/lib/glut-3.7.6/progs/redbook/torus.dsp deleted file mode 100644 index c6e571e29..000000000 --- a/lib/glut-3.7.6/progs/redbook/torus.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="torus" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=torus - 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 "torus.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 "torus.mak" CFG="torus - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "torus - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "torus - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "torus - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "torus - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "torus - Win32 Release" -# Name "torus - Win32 Debug" -# Begin Source File - -SOURCE=.\torus.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/trim.c b/lib/glut-3.7.6/progs/redbook/trim.c deleted file mode 100644 index d459d948b..000000000 --- a/lib/glut-3.7.6/progs/redbook/trim.c +++ /dev/null @@ -1,181 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -/* - * trim.c - * This program draws a NURBS surface in the shape of a - * symmetrical hill, using both a NURBS curve and pwl - * (piecewise linear) curve to trim part of the surface. - */ -#include -#include -#include - -GLfloat ctlpoints[4][4][3]; - -GLUnurbsObj *theNurb; - -/* - * Initializes the control points of the surface to a small hill. - * The control points range from -3 to +3 in x, y, and z - */ -void init_surface(void) -{ - int u, v; - for (u = 0; u < 4; u++) { - for (v = 0; v < 4; v++) { - ctlpoints[u][v][0] = 2.0*((GLfloat)u - 1.5); - ctlpoints[u][v][1] = 2.0*((GLfloat)v - 1.5); - - if ( (u == 1 || u == 2) && (v == 1 || v == 2)) - ctlpoints[u][v][2] = 3.0; - else - ctlpoints[u][v][2] = -3.0; - } - } -} - -void nurbsError(GLenum errorCode) -{ - const GLubyte *estring; - - estring = gluErrorString(errorCode); - fprintf (stderr, "Nurbs Error: %s\n", estring); - exit (0); -} - -/* Initialize material property and depth buffer. - */ -void init(void) -{ - GLfloat mat_diffuse[] = { 0.7, 0.7, 0.7, 1.0 }; - GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; - GLfloat mat_shininess[] = { 100.0 }; - - glClearColor (0.0, 0.0, 0.0, 0.0); - glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); - glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); - glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); - - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_DEPTH_TEST); - glEnable(GL_AUTO_NORMAL); - glEnable(GL_NORMALIZE); - - init_surface(); - - theNurb = gluNewNurbsRenderer(); - gluNurbsProperty(theNurb, GLU_SAMPLING_TOLERANCE, 25.0); - gluNurbsProperty(theNurb, GLU_DISPLAY_MODE, GLU_FILL); - gluNurbsCallback(theNurb, GLU_ERROR, - (GLvoid (CALLBACK*) ()) nurbsError); -} - -void display(void) -{ - GLfloat knots[8] = {0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0}; - GLfloat edgePt[5][2] = /* counter clockwise */ - {{0.0, 0.0}, {1.0, 0.0}, {1.0, 1.0}, {0.0, 1.0}, {0.0, 0.0}}; - GLfloat curvePt[4][2] = /* clockwise */ - {{0.25, 0.5}, {0.25, 0.75}, {0.75, 0.75}, {0.75, 0.5}}; - GLfloat curveKnots[8] = - {0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0}; - GLfloat pwlPt[4][2] = /* clockwise */ - {{0.75, 0.5}, {0.5, 0.25}, {0.25, 0.5}}; - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glPushMatrix(); - glRotatef(330.0, 1.,0.,0.); - glScalef (0.5, 0.5, 0.5); - - gluBeginSurface(theNurb); - gluNurbsSurface(theNurb, 8, knots, 8, knots, - 4 * 3, 3, &ctlpoints[0][0][0], - 4, 4, GL_MAP2_VERTEX_3); - gluBeginTrim (theNurb); - gluPwlCurve (theNurb, 5, &edgePt[0][0], 2, GLU_MAP1_TRIM_2); - gluEndTrim (theNurb); - gluBeginTrim (theNurb); - gluNurbsCurve (theNurb, 8, curveKnots, 2, - &curvePt[0][0], 4, GLU_MAP1_TRIM_2); - gluPwlCurve (theNurb, 3, &pwlPt[0][0], 2, GLU_MAP1_TRIM_2); - gluEndTrim (theNurb); - gluEndSurface(theNurb); - - glPopMatrix(); - glFlush(); -} - -void reshape(int w, int h) -{ - glViewport(0, 0, (GLsizei) w, (GLsizei) h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective (45.0, (GLdouble)w/(GLdouble)h, 3.0, 8.0); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef (0.0, 0.0, -5.0); -} - -/* ARGSUSED1 */ -void keyboard(unsigned char key, int x, int y) -{ - switch (key) { - case 27: - exit(0); - break; - } -} - -/* Main Loop - */ -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); - glutInitWindowSize (500, 500); - glutInitWindowPosition (100, 100); - glutCreateWindow(argv[0]); - init(); - glutReshapeFunc(reshape); - glutDisplayFunc(display); - glutKeyboardFunc (keyboard); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/redbook/trim.dsp b/lib/glut-3.7.6/progs/redbook/trim.dsp deleted file mode 100644 index 7afa33ec8..000000000 --- a/lib/glut-3.7.6/progs/redbook/trim.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="trim" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=trim - 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 "trim.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 "trim.mak" CFG="trim - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "trim - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "trim - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "trim - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "trim - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "trim - Win32 Release" -# Name "trim - Win32 Debug" -# Begin Source File - -SOURCE=.\trim.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/unproject.c b/lib/glut-3.7.6/progs/redbook/unproject.c deleted file mode 100644 index 134c361ba..000000000 --- a/lib/glut-3.7.6/progs/redbook/unproject.c +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -/* - * unproject.c - * When the left mouse button is pressed, this program - * reads the mouse position and determines two 3D points - * from which it was transformed. Very little is displayed. - */ -#include -#include -#include - -void display(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - glFlush(); -} - -/* Change these values for a different transformation */ -void reshape(int w, int h) -{ - glViewport (0, 0, (GLsizei) w, (GLsizei) h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective (45.0, (GLfloat) w/(GLfloat) h, 1.0, 100.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -void mouse(int button, int state, int x, int y) -{ - GLint viewport[4]; - GLdouble mvmatrix[16], projmatrix[16]; - GLint realy; /* OpenGL y coordinate position */ - GLdouble wx, wy, wz; /* returned world x, y, z coords */ - - switch (button) { - case GLUT_LEFT_BUTTON: - if (state == GLUT_DOWN) { - glGetIntegerv (GL_VIEWPORT, viewport); - glGetDoublev (GL_MODELVIEW_MATRIX, mvmatrix); - glGetDoublev (GL_PROJECTION_MATRIX, projmatrix); -/* note viewport[3] is height of window in pixels */ - realy = viewport[3] - (GLint) y - 1; - printf ("Coordinates at cursor are (%4d, %4d)\n", x, realy); - gluUnProject ((GLdouble) x, (GLdouble) realy, 0.0, - mvmatrix, projmatrix, viewport, &wx, &wy, &wz); - printf ("World coords at z=0.0 are (%f, %f, %f)\n", - wx, wy, wz); - gluUnProject ((GLdouble) x, (GLdouble) realy, 1.0, - mvmatrix, projmatrix, viewport, &wx, &wy, &wz); - printf ("World coords at z=1.0 are (%f, %f, %f)\n", - wx, wy, wz); - } - break; - case GLUT_RIGHT_BUTTON: - if (state == GLUT_DOWN) - exit(0); - break; - default: - break; - } -} - -/* ARGSUSED1 */ -void keyboard(unsigned char key, int x, int y) -{ - switch (key) { - case 27: - exit(0); - break; - } -} - -/* - * Open window, register input callback functions - */ -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); - glutInitWindowSize (500, 500); - glutInitWindowPosition (100, 100); - glutCreateWindow (argv[0]); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glutKeyboardFunc (keyboard); - glutMouseFunc(mouse); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/redbook/unproject.dsp b/lib/glut-3.7.6/progs/redbook/unproject.dsp deleted file mode 100644 index 71c44e5e1..000000000 --- a/lib/glut-3.7.6/progs/redbook/unproject.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="unproject" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=unproject - 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 "unproject.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 "unproject.mak" CFG="unproject - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "unproject - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "unproject - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "unproject - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "unproject - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "unproject - Win32 Release" -# Name "unproject - Win32 Debug" -# Begin Source File - -SOURCE=.\unproject.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/varray.c b/lib/glut-3.7.6/progs/redbook/varray.c deleted file mode 100644 index b22e723e0..000000000 --- a/lib/glut-3.7.6/progs/redbook/varray.c +++ /dev/null @@ -1,195 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -/* - * varray.c - * This program demonstrates vertex arrays. - */ -#include -#include -#include - -#ifdef GL_VERSION_1_1 -#define POINTER 1 -#define INTERLEAVED 2 - -#define DRAWARRAY 1 -#define ARRAYELEMENT 2 -#define DRAWELEMENTS 3 - -int setupMethod = POINTER; -int derefMethod = DRAWARRAY; - -void setupPointers(void) -{ - static GLint vertices[] = {25, 25, - 100, 325, - 175, 25, - 175, 325, - 250, 25, - 325, 325}; - static GLfloat colors[] = {1.0, 0.2, 0.2, - 0.2, 0.2, 1.0, - 0.8, 1.0, 0.2, - 0.75, 0.75, 0.75, - 0.35, 0.35, 0.35, - 0.5, 0.5, 0.5}; - - glEnableClientState (GL_VERTEX_ARRAY); - glEnableClientState (GL_COLOR_ARRAY); - - glVertexPointer (2, GL_INT, 0, vertices); - glColorPointer (3, GL_FLOAT, 0, colors); -} - -void setupInterleave(void) -{ - static GLfloat intertwined[] = - {1.0, 0.2, 1.0, 100.0, 100.0, 0.0, - 1.0, 0.2, 0.2, 0.0, 200.0, 0.0, - 1.0, 1.0, 0.2, 100.0, 300.0, 0.0, - 0.2, 1.0, 0.2, 200.0, 300.0, 0.0, - 0.2, 1.0, 1.0, 300.0, 200.0, 0.0, - 0.2, 0.2, 1.0, 200.0, 100.0, 0.0}; - - glInterleavedArrays (GL_C3F_V3F, 0, intertwined); -} - -void init(void) -{ - glClearColor (0.0, 0.0, 0.0, 0.0); - glShadeModel (GL_SMOOTH); - setupPointers (); -} - -void display(void) -{ - glClear (GL_COLOR_BUFFER_BIT); - - if (derefMethod == DRAWARRAY) - glDrawArrays (GL_TRIANGLES, 0, 6); - else if (derefMethod == ARRAYELEMENT) { - glBegin (GL_TRIANGLES); - glArrayElement (2); - glArrayElement (3); - glArrayElement (5); - glEnd (); - } - else if (derefMethod == DRAWELEMENTS) { - GLuint indices[4] = {0, 1, 3, 4}; - - glDrawElements (GL_POLYGON, 4, GL_UNSIGNED_INT, indices); - } - glFlush (); -} - -void reshape (int w, int h) -{ - glViewport (0, 0, (GLsizei) w, (GLsizei) h); - glMatrixMode (GL_PROJECTION); - glLoadIdentity (); - gluOrtho2D (0.0, (GLdouble) w, 0.0, (GLdouble) h); -} - -/* ARGSUSED2 */ -void mouse (int button, int state, int x, int y) -{ - switch (button) { - case GLUT_LEFT_BUTTON: - if (state == GLUT_DOWN) { - if (setupMethod == POINTER) { - setupMethod = INTERLEAVED; - setupInterleave(); - } - else if (setupMethod == INTERLEAVED) { - setupMethod = POINTER; - setupPointers(); - } - glutPostRedisplay(); - } - break; - case GLUT_MIDDLE_BUTTON: - case GLUT_RIGHT_BUTTON: - if (state == GLUT_DOWN) { - if (derefMethod == DRAWARRAY) - derefMethod = ARRAYELEMENT; - else if (derefMethod == ARRAYELEMENT) - derefMethod = DRAWELEMENTS; - else if (derefMethod == DRAWELEMENTS) - derefMethod = DRAWARRAY; - glutPostRedisplay(); - } - break; - default: - break; - } -} - -/* ARGSUSED1 */ -void keyboard(unsigned char key, int x, int y) -{ - switch (key) { - case 27: - exit(0); - break; - } -} - -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); - glutInitWindowSize (350, 350); - glutInitWindowPosition (100, 100); - glutCreateWindow (argv[0]); - init (); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glutMouseFunc(mouse); - glutKeyboardFunc (keyboard); - glutMainLoop(); - return 0; -} -#else -int main(int argc, char** argv) -{ - fprintf (stderr, "This program demonstrates a feature which is not in OpenGL Version 1.0.\n"); - fprintf (stderr, "If your implementation of OpenGL Version 1.0 has the right extensions,\n"); - fprintf (stderr, "you may be able to modify this program to make it run.\n"); - return 0; -} -#endif diff --git a/lib/glut-3.7.6/progs/redbook/varray.dsp b/lib/glut-3.7.6/progs/redbook/varray.dsp deleted file mode 100644 index 58b0529c5..000000000 --- a/lib/glut-3.7.6/progs/redbook/varray.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="varray" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=varray - 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 "varray.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 "varray.mak" CFG="varray - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "varray - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "varray - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "varray - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "varray - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "varray - Win32 Release" -# Name "varray - Win32 Debug" -# Begin Source File - -SOURCE=.\varray.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/redbook/wrap.c b/lib/glut-3.7.6/progs/redbook/wrap.c deleted file mode 100644 index beda9c10a..000000000 --- a/lib/glut-3.7.6/progs/redbook/wrap.c +++ /dev/null @@ -1,180 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -/* wrap.c - * This program texture maps a checkerboard image onto - * two rectangles. This program demonstrates the wrapping - * modes, if the texture coordinates fall outside 0.0 and 1.0. - * Interaction: Pressing the 's' and 'S' keys switch the - * wrapping between clamping and repeating for the s parameter. - * The 't' and 'T' keys control the wrapping for the t parameter. - * - * If running this program on OpenGL 1.0, texture objects are - * not used. - */ -#include -#include -#include - -/* Create checkerboard texture */ -#define checkImageWidth 64 -#define checkImageHeight 64 -static GLubyte checkImage[checkImageHeight][checkImageWidth][4]; - -#ifdef GL_VERSION_1_1 -static GLuint texName; -#endif - -void makeCheckImage(void) -{ - int i, j, c; - - for (i = 0; i < checkImageHeight; i++) { - for (j = 0; j < checkImageWidth; j++) { - c = ((((i&0x8)==0)^((j&0x8)==0)))*255; - checkImage[i][j][0] = (GLubyte) c; - checkImage[i][j][1] = (GLubyte) c; - checkImage[i][j][2] = (GLubyte) c; - checkImage[i][j][3] = (GLubyte) 255; - } - } -} - -void init(void) -{ - glClearColor (0.0, 0.0, 0.0, 0.0); - glShadeModel(GL_FLAT); - glEnable(GL_DEPTH_TEST); - - makeCheckImage(); - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - -#ifdef GL_VERSION_1_1 - glGenTextures(1, &texName); - glBindTexture(GL_TEXTURE_2D, texName); -#endif - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); -#ifdef GL_VERSION_1_1 - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, checkImageWidth, checkImageHeight, - 0, GL_RGBA, GL_UNSIGNED_BYTE, checkImage); -#else - glTexImage2D(GL_TEXTURE_2D, 0, 4, checkImageWidth, checkImageHeight, - 0, GL_RGBA, GL_UNSIGNED_BYTE, checkImage); -#endif -} - -void display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glEnable(GL_TEXTURE_2D); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); -#ifdef GL_VERSION_1_1 - glBindTexture(GL_TEXTURE_2D, texName); -#endif - - glBegin(GL_QUADS); - glTexCoord2f(0.0, 0.0); glVertex3f(-2.0, -1.0, 0.0); - glTexCoord2f(0.0, 3.0); glVertex3f(-2.0, 1.0, 0.0); - glTexCoord2f(3.0, 3.0); glVertex3f(0.0, 1.0, 0.0); - glTexCoord2f(3.0, 0.0); glVertex3f(0.0, -1.0, 0.0); - - glTexCoord2f(0.0, 0.0); glVertex3f(1.0, -1.0, 0.0); - glTexCoord2f(0.0, 3.0); glVertex3f(1.0, 1.0, 0.0); - glTexCoord2f(3.0, 3.0); glVertex3f(2.41421, 1.0, -1.41421); - glTexCoord2f(3.0, 0.0); glVertex3f(2.41421, -1.0, -1.41421); - glEnd(); - glFlush(); - glDisable(GL_TEXTURE_2D); -} - -void reshape(int w, int h) -{ - glViewport(0, 0, (GLsizei) w, (GLsizei) h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 1.0, 30.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(0.0, 0.0, -3.6); -} - -/* ARGSUSED1 */ -void keyboard (unsigned char key, int x, int y) -{ - switch (key) { - case 's': - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); - glutPostRedisplay(); - break; - case 'S': - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glutPostRedisplay(); - break; - case 't': - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); - glutPostRedisplay(); - break; - case 'T': - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glutPostRedisplay(); - break; - case 27: - exit(0); - break; - default: - break; - } -} - -int main(int argc, char** argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); - glutInitWindowSize(250, 250); - glutInitWindowPosition(100, 100); - glutCreateWindow(argv[0]); - init(); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glutKeyboardFunc(keyboard); - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/redbook/wrap.dsp b/lib/glut-3.7.6/progs/redbook/wrap.dsp deleted file mode 100644 index df90e799c..000000000 --- a/lib/glut-3.7.6/progs/redbook/wrap.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="wrap" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=wrap - 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 "wrap.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 "wrap.mak" CFG="wrap - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "wrap - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "wrap - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "wrap - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "wrap - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "wrap - Win32 Release" -# Name "wrap - Win32 Debug" -# Begin Source File - -SOURCE=.\wrap.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/sgi-stereo/README b/lib/glut-3.7.6/progs/sgi-stereo/README deleted file mode 100644 index 0f42c5986..000000000 --- a/lib/glut-3.7.6/progs/sgi-stereo/README +++ /dev/null @@ -1,35 +0,0 @@ - -This directory contains a GLUT "hack" program for using SGI's -proprietary X stereo extension (officially named -"SGIFullScreenStereo"). The extension provides stereo support for -mid-range and low-end SGI workstations including Indy and Indigo^2 -workstations with Indy, XL, XZ, Extreme, and IMPACT graphics options. - -NOTE: This example "hacks" GLUT to get at private GLUT implementation -variables (basically __glutDisplay). Any program that does so is -effectively unportable to other GLUT implementations. SGI's -proprietary X stereo extension is not suitable for portable, direct -support via GLUT's API, so these examples are being released as an -exception to the rule. - -To use this example code effectively, you must have: - - o A low-end or mid-range SGI workstation described above. - - o IRIX 5.3, 6.1 (Power Indigo^2), 6.2, or higher. - - o A set of stereo LCD shutter goggles. - - o A monitor that syncs to the stereo video signal. - -To get more information on SGIFullScreenStereo, try: - - man XSGISetStereoBuffer - -Mike Blackwell contributed the original GLUT stereo example. The -example itself is based on a demonstration program found in Appendix 1 -of "The CrystalEyes Handbook" by Lenny Lipton, 1991, StereoGraphics -Corp. - -- Mark Kilgard - November 21, 1995 diff --git a/lib/glut-3.7.6/progs/sgi-stereo/fullscreen_stereo.c b/lib/glut-3.7.6/progs/sgi-stereo/fullscreen_stereo.c deleted file mode 100644 index c2b0c5090..000000000 --- a/lib/glut-3.7.6/progs/sgi-stereo/fullscreen_stereo.c +++ /dev/null @@ -1,69 +0,0 @@ - -/* fullscreen_stereo.c -- GLUT support for full screen stereo mode on SGI - workstations. */ - -/* 24-Oct-95 Mike Blackwell mkb@cs.cmu.edu */ - -#include -#include -#include -#include - -/* We need to access some GLUT internal variables - this include file is - found in the GLUT source code distribution. */ - -/* XXX I do not normally encourage programs to use GLUT internals. Programs - that do (like this one) are inherently unportable GLUT programs. In the - case of SGI's low-end stereo there was enough demand to warrant supplying - an example, and the low-end stereo is not clean enough to be supported - directly in GLUT. -mjk */ - -#include "glutint.h" - -#include "fullscreen_stereo.h" - -/* XXX Video display modes for stereo are selected by running - /usr/gfx/setmon; in IRIX 6.2 and later releases, the XSGIvc API supplies - the functionality of setmon and more. */ - -void -start_fullscreen_stereo(void) -{ - int event, error; - - if (!XSGIStereoQueryExtension(__glutDisplay, &event, &error)) { - fprintf(stderr, "Stereo not supported on this display!\n"); - exit(0); - } - if (XSGIQueryStereoMode(__glutDisplay, __glutCurrentWindow->win) < 0) { - fprintf(stderr, "Stereo not supported on this window!\n"); - exit(0); - } - if (system("/usr/gfx/setmon -n STR_BOT") != 0) { - fprintf(stderr, "setmon attempt failed!\n"); - stop_fullscreen_stereo(); - exit(0); - } -} - -void -stop_fullscreen_stereo(void) -{ - system("/usr/gfx/setmon -n 72hz"); -} - -void -stereo_left_buffer(void) -{ - XSGISetStereoBuffer(__glutDisplay, __glutCurrentWindow->win, STEREO_BUFFER_LEFT); - XSync(__glutDisplay, False); - glViewport(0, 0, XMAXSCREEN, YSTEREO); -} - -void -stereo_right_buffer(void) -{ - XSGISetStereoBuffer(__glutDisplay, __glutCurrentWindow->win, STEREO_BUFFER_RIGHT); - XSync(__glutDisplay, False); - glViewport(0, 0, XMAXSCREEN, YSTEREO); -} diff --git a/lib/glut-3.7.6/progs/sgi-stereo/fullscreen_stereo.h b/lib/glut-3.7.6/progs/sgi-stereo/fullscreen_stereo.h deleted file mode 100644 index 00e6b5ba3..000000000 --- a/lib/glut-3.7.6/progs/sgi-stereo/fullscreen_stereo.h +++ /dev/null @@ -1,22 +0,0 @@ -/************************************************************************/ -/* */ -/* fullscreen_stereo.c -- GLUT support for full screen stereo mode */ -/* on SGI workstations. */ -/* */ -/* 24-Oct-95 Mike Blackwell mkb@cs.cmu.edu */ -/* Written. */ -/* */ -/************************************************************************/ - -/* Standard screen diminsions */ -#define XMAXSCREEN 1280 -#define YMAXSCREEN 1024 - -#define YSTEREO 491 /* Subfield height in pixels */ -#define YOFFSET_LEFT 532 /* YSTEREO + YBLANK */ - -void start_fullscreen_stereo(void); -void stop_fullscreen_stereo(void); -void stereo_left_buffer(void); -void stereo_right_buffer(void); -void window_no_border(void); diff --git a/lib/glut-3.7.6/progs/sgi-stereo/stereo-plane.c b/lib/glut-3.7.6/progs/sgi-stereo/stereo-plane.c deleted file mode 100644 index 3661ed742..000000000 --- a/lib/glut-3.7.6/progs/sgi-stereo/stereo-plane.c +++ /dev/null @@ -1,209 +0,0 @@ - -/* This is an OpenGL/GLUT implementation of the "plane" stereo - demonstration program found in Appendix 1 of "The CrystalEyes Handbook" - by Lenny Lipton, 1991, StereoGraphics Corp. */ - -/* Ported to OpenGL/GLUT by Mike Blackwell, mkb@cs.cmu.edu, Oct. 1995. */ - -#include -#include -#include -#include -#include "fullscreen_stereo.h" - -#define SPEED 100 /* How often to update rotation - milliseconds */ -#define STEP 1.0 /* How much to rotate - degrees */ - -double position = 0; /* Rotation of plane */ - -/* Clean up and quit */ -void -all_done(void) -{ - stop_fullscreen_stereo(); - exit(0); -} - -/* ARGSUSED */ -void -timer(int value) -{ - position -= STEP; - if (position < 0.0) - position = 360.0 - STEP; - glutPostRedisplay(); - glutTimerFunc(SPEED, timer, 0); -} - -/* ARGSUSED1 */ -void -keyboard(unsigned char key, int x, int y) -{ - switch (key) { - case '\033': - all_done(); - break; - default: - putchar('\007'); - fflush(stdout); - break; - } -} - -/* This routine performs the perspective projection for one eye's subfield. - The projection is in the direction of the negative z axis. - - xmin, ymax, ymin, ymax = the coordinate range, in the plane of zero - parallax setting, that will be displayed on the screen. The ratio between - (xmax-xmin) and (ymax-ymin) should equal the aspect ration of the display. - - znear, zfar = the z-coordinate values of the clipping planes. - - zzps = the z-coordinate of the plane of zero parallax setting. - - dist = the distance from the center of projection to the plane of zero - parallax. - - eye = half the eye separation; positive for the right eye subfield, - negative for the left eye subfield. */ - -void -stereoproj(float xmin, float xmax, float ymin, float ymax, - float znear, float zfar, float zzps, float dist, float eye) -{ - float xmid, ymid, clip_near, clip_far, top, bottom, left, right, dx, dy, n_over_d; - - dx = xmax - xmin; - dy = ymax - ymin; - - xmid = (xmax + xmin) / 2.0; - ymid = (ymax + ymin) / 2.0; - - clip_near = dist + zzps - znear; - clip_far = dist + zzps - zfar; - - n_over_d = clip_near / dist; - - top = n_over_d * dy / 2.0; - bottom = -top; - right = n_over_d * (dx / 2.0 - eye); - left = n_over_d * (-dx / 2.0 - eye); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glFrustum(left, right, bottom, top, clip_near, clip_far); - - glTranslatef(-xmid - eye, -ymid, -zzps - dist); -} - -void -draw_airplane(void) -{ - static float airplane[9][3] = - { - {0.0, 0.5, -4.5}, - {3.0, 0.5, -4.5}, - {3.0, 0.5, -3.5}, - {0.0, 0.5, 0.0}, - {0.0, 0.5, 3.25}, - {0.0, -0.5, 5.5}, - {-3.0, 0.5, -3.5}, - {-3.0, 0.5, -4.5}, - {0.0, -0.5, -4.5} - }; - - glColor3ub(0xb0, 0x30, 0xff); /* Purple color */ - - glBegin(GL_LINE_LOOP); - glVertex3fv(airplane[6]); - glVertex3fv(airplane[7]); - glVertex3fv(airplane[1]); - glVertex3fv(airplane[2]); - glVertex3fv(airplane[4]); - glEnd(); - - glBegin(GL_LINE_LOOP); - glVertex3fv(airplane[0]); - glVertex3fv(airplane[4]); - glVertex3fv(airplane[5]); - glVertex3fv(airplane[8]); - glEnd(); - - glBegin(GL_LINE_STRIP); - glVertex3fv(airplane[6]); - glVertex3fv(airplane[3]); - glVertex3fv(airplane[2]); - glEnd(); -} - -/* This routine puts a stereo image of a paper airplane onto the screen */ -void -redraw(void) -{ - /* Draw left subfield */ - stereo_left_buffer(); - - glClearColor(0.07, 0.07, 0.07, 0.00); - glClear(GL_COLOR_BUFFER_BIT); - - /* Z-coordinate of plane of zero parallax is 0.0. In that plane, the coord - range drawn to the screen will be - - (-6.0 to 6.0, -4.8 to 4.8). - - Z-coordinate clipping planes are -6.0 and 6.0. The eyes are set at world - coord distance 14.5 from the plane of zero parallax, and the eye - separation is 0.62 in world coords. These two values were calculated - using equations 11 to 15, and 17 to 19 in chapter 5. */ - - stereoproj(-6.0, 6.0, -4.8, 4.8, 6.0, -6.0, 0.0, 14.5, -0.31); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glRotatef((float) position, 0.0, 1.0, 0.0); - glRotatef(-10.0, 1.0, 0.0, 0.0); - draw_airplane(); - glFlush(); - - /* Draw right subfield */ - stereo_right_buffer(); - - glClearColor(0.07, 0.07, 0.07, 0.00); - glClear(GL_COLOR_BUFFER_BIT); - - /* Same as above stereoproj() call, except that eye arg is positive */ - stereoproj(-6.0, 6.0, -4.8, 4.8, 6.0, -6.0, 0.0, 14.5, 0.31); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glRotatef((float) position, 0.0, 1.0, 0.0); - glRotatef(-10.0, 1.0, 0.0, 0.0); - draw_airplane(); - glFlush(); - - glutSwapBuffers(); /* Update screen */ -} - -int -main(int argc, char *argv[]) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); - glutCreateWindow("GLUT-based SGI hack stereo demo"); - glutFullScreen(); - glutSetCursor(GLUT_CURSOR_NONE); - start_fullscreen_stereo(); - - glutDisplayFunc(redraw); - glutKeyboardFunc(keyboard); - glutTimerFunc(SPEED, timer, 0); - - glEnable(GL_LINE_SMOOTH); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glHint(GL_LINE_SMOOTH_HINT, GL_DONT_CARE); - glLineWidth(1.5); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/spheremap.dsw b/lib/glut-3.7.6/progs/spheremap.dsw deleted file mode 100644 index 115c9b2af..000000000 --- a/lib/glut-3.7.6/progs/spheremap.dsw +++ /dev/null @@ -1,137 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "_all"=".\spheremap\_all.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name cview2smap - End Project Dependency - Begin Project Dependency - Project_Dep_Name sixviews - End Project Dependency - Begin Project Dependency - Project_Dep_Name smapmesh - End Project Dependency - Begin Project Dependency - Project_Dep_Name st2rvec - End Project Dependency - Begin Project Dependency - Project_Dep_Name fakeraytrace - End Project Dependency - Begin Project Dependency - Project_Dep_Name rtsmap - End Project Dependency -}}} - -############################################################################### - -Project: "cview2smap"=".\spheremap\hacks\cview2smap.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "fakeraytrace"=".\spheremap\glsmap\fakeraytrace.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name glsmap - End Project Dependency -}}} - -############################################################################### - -Project: "glsmap"="..\lib\glsmap\glsmap.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "rtsmap"=".\spheremap\glsmap\rtsmap.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name glsmap - End Project Dependency -}}} - -############################################################################### - -Project: "sixviews"=".\spheremap\hacks\sixviews.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "smapmesh"=".\spheremap\hacks\smapmesh.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "st2rvec"=".\spheremap\hacks\st2rvec.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/lib/glut-3.7.6/progs/spheremap/Imakefile b/lib/glut-3.7.6/progs/spheremap/Imakefile deleted file mode 100644 index 3bc97d802..000000000 --- a/lib/glut-3.7.6/progs/spheremap/Imakefile +++ /dev/null @@ -1,10 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1997. */ - -#define IHaveSubdirs -#define PassCDebugFlags - -SUBDIRS = hacks glsmap - -MakeSubdirs($(SUBDIRS)) -DependSubdirs($(SUBDIRS)) diff --git a/lib/glut-3.7.6/progs/spheremap/README b/lib/glut-3.7.6/progs/spheremap/README deleted file mode 100644 index c16ad28d7..000000000 --- a/lib/glut-3.7.6/progs/spheremap/README +++ /dev/null @@ -1,15 +0,0 @@ - -These are GLUT-based OpenGL examples that develop the idea of real-time -dynamic environment mapping using sphere maps. The examples were -originally presented at the Computer Game Developers Convention (CGDC) -in Long Beach, CA on May 5, 1998. - -The "glsmap" directory contains examples that use the glsmap dynamic -sphere mapping library API (see ../../lib/glsmap for the library's -source code). The "hacks" directory contains a few examples that -demonstrate the functional building blocks for dynamic sphere mapping -(and do not use the glsmap library). - -- Mark Kilgard - mjk@nvidia.com - diff --git a/lib/glut-3.7.6/progs/spheremap/_all.dsp b/lib/glut-3.7.6/progs/spheremap/_all.dsp deleted file mode 100644 index 2e26c30f3..000000000 --- a/lib/glut-3.7.6/progs/spheremap/_all.dsp +++ /dev/null @@ -1,63 +0,0 @@ -# Microsoft Developer Studio Project File - Name="_all" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Generic Project" 0x010a - -CFG=_all - 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 "_all.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 "_all.mak" CFG="_all - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "_all - Win32 Release" (based on "Win32 (x86) Generic Project") -!MESSAGE "_all - Win32 Debug" (based on "Win32 (x86) Generic Project") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -MTL=midl.exe - -!IF "$(CFG)" == "_all - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" - -!ELSEIF "$(CFG)" == "_all - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" - -!ENDIF - -# Begin Target - -# Name "_all - Win32 Release" -# Name "_all - Win32 Debug" -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/spheremap/glsmap/Imakefile b/lib/glut-3.7.6/progs/spheremap/glsmap/Imakefile deleted file mode 100644 index 3e4690c62..000000000 --- a/lib/glut-3.7.6/progs/spheremap/glsmap/Imakefile +++ /dev/null @@ -1,15 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1997. */ - -#include "../../../Glut.cf" - -TARGETS = rtsmap fakeraytrace - -SRCS = rtsmap.c fakeraytrace.c - -AllTarget($(TARGETS)) - -SimpleGlsmapProgramTarget(rtsmap) -SimpleGlsmapProgramTarget(fakeraytrace) - -DependTarget() diff --git a/lib/glut-3.7.6/progs/spheremap/glsmap/fakeraytrace.c b/lib/glut-3.7.6/progs/spheremap/glsmap/fakeraytrace.c deleted file mode 100644 index 3b0c7e2ca..000000000 --- a/lib/glut-3.7.6/progs/spheremap/glsmap/fakeraytrace.c +++ /dev/null @@ -1,722 +0,0 @@ - -/* 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. */ - -/* fakeraytrace.c - two reflective objects, one has reflection of other's reflection */ - -#include -#include -#include -#include -#include - -#if defined(GL_EXT_texture_object) && !defined(GL_VERSION_1_1) -#define glBindTexture(A,B) glBindTextureEXT(A,B) -#endif - -typedef struct { - GLfloat *obj2draw; - int drawObj1; - GLuint texobj; -} Object; - -enum { X, Y, Z }; - -enum { - TO_NONE = 0, - TO_FRONT, TO_TOP, TO_BOTTOM, TO_LEFT, TO_RIGHT, - TO_BACK, - TO_SPHERE_MAP, - TO_FRONT2, TO_TOP2, TO_BOTTOM2, TO_LEFT2, TO_RIGHT2, - TO_BACK2, - TO_SPHERE_MAP2, - - TO_FRONT3, TO_TOP3, TO_BOTTOM3, TO_LEFT3, TO_RIGHT3, - TO_BACK3, - TO_SPHERE_MAP3 -}; - -static GLuint texobjs[6] = { - TO_FRONT, TO_TOP, TO_BOTTOM, - TO_LEFT, TO_RIGHT, TO_BACK -}; - -static GLuint texobjs2[6] = { - TO_FRONT2, TO_TOP2, TO_BOTTOM2, - TO_LEFT2, TO_RIGHT2, TO_BACK2 -}; - -static GLuint texobjs3[6] = { - TO_FRONT3, TO_TOP3, TO_BOTTOM3, - TO_LEFT3, TO_RIGHT3, TO_BACK3 -}; - -int moving = 0; -int multibounce = 1; -SphereMap *smap, *smap2, *smap3; -int win; - -GLfloat up[3] = { 0, 1, 0 }; -GLfloat up2[3] = { 0, 0, 1 }; -GLfloat eye[3] = { 0, 0, -15 }; -GLfloat obj[3] = { 0, 4, 0 }; -GLfloat obj2[3] = { 0, -4, 0 }; - -Object sphere[] = { - { obj, 0, TO_SPHERE_MAP }, - { obj2, 1, TO_SPHERE_MAP2 }, - { obj, 0, TO_SPHERE_MAP3 } }; - -GLfloat timeCount; -int W, H; - -int showSphereMap = 0; -int object = 0; -int texdim = 64; -int doubleBuffer = 1; -int dynamicSmap = 1; -int cullBackFaces = 1; -int doSphereMap = 1; -int multipass = 0; -int animation = 0; -int sphereTess = 20; - -static char *pattern[] = { - "......xxxx......", - "......xxxx......", - "......xxxx......", - "......xxxx......", - "......xxxx......", - "......xxxx......", - "xxxxxxxxxxxxxxxx", - "xxxxxxxxxxxxxxxx", - "xxxxxxxxxxxxxxxx", - "xxxxxxxxxxxxxxxx", - "......xxxx......", - "......xxxx......", - "......xxxx......", - "......xxxx......", - "......xxxx......", - "......xxxx......", -}; - -static void -makePatternTexture(void) -{ - GLubyte patternTexture[16][16][4]; - GLubyte *loc; - int s, t; - - /* Setup RGB image for the texture. */ - loc = (GLubyte*) patternTexture; - for (t = 0; t < 16; t++) { - for (s = 0; s < 16; s++) { - if (pattern[t][s] == 'x') { - /* Nice green. */ - loc[0] = 0x1f; - loc[1] = 0x8f; - loc[2] = 0x1f; - loc[3] = 0x7f; /* opaque */ - } else { - /* Light gray. */ - loc[0] = 0x00; - loc[1] = 0x00; - loc[2] = 0x00; - loc[3] = 0x00; /* transparent */ - } - loc += 4; - } - } - - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, - GL_LINEAR_MIPMAP_LINEAR); - gluBuild2DMipmaps(GL_TEXTURE_2D, 4, 16, 16, - GL_RGBA, GL_UNSIGNED_BYTE, patternTexture); -} - -void -reshape(int w, int h) -{ - W = w; - H = h; -} - -void -positionLights(int view, void *context) -{ - static GLfloat light1Pos[4] = { -41.0, 41.0, -41.0, 1.0 }; - static GLfloat light2Pos[4] = { +41.0, 0.0, -41.0, 1.0 }; - static GLfloat light3Pos[4] = { -41.0, 0.0, +41.0, 1.0 }; - static GLfloat light4Pos[4] = { +41.0, 0.0, +41.0, 1.0 }; - - glLightfv(GL_LIGHT0, GL_POSITION, light1Pos); - glLightfv(GL_LIGHT1, GL_POSITION, light2Pos); - glLightfv(GL_LIGHT2, GL_POSITION, light3Pos); - glLightfv(GL_LIGHT3, GL_POSITION, light4Pos); -} - -extern void drawObject(Object *it); - -void -drawView(int view, void *context) -{ - Object *it = context; - - /* right green small cube (+5,0,-8) */ - glPushMatrix(); - glTranslatef(5.0, 0.0, -8.0); - glRotatef(-45, 1.0, 0.0, 1.0); - glColor3f(0.0, 1.0, 0.0); - glutSolidCube(2.0); - glPopMatrix(); - /* left red cube (-5,0,-8) */ - glPushMatrix(); - glTranslatef(-5.0, 0.0, -8.0); - glRotatef(45, 1.0, 0.0, 1.0); - glColor3f(1.0, 0.0, 0.0); - glutSolidCube(6.0); - glPopMatrix(); - /* left blue cube (-7,0,0); */ - glPushMatrix(); - glTranslatef(-7.0, 0.0, 0.0); - glColor3f(0.0, 0.0, 1.0); - glutSolidCube(5.0); - glPopMatrix(); - /* right cyan big cube (+7,0,0) */ - glPushMatrix(); - glTranslatef(7.0, 0.0, 0.0); - glRotatef(30, 1.0, 1.0, 0.0); - glColor3f(0.0, 1.0, 1.0); - glutSolidCube(5.0); - glPopMatrix(); - /* distant yellow sphere (0,0,+10) */ - glPushMatrix(); - glTranslatef(0.0, 0.0, 10.0); - glColor3f(1.0, 1.0, 0.0); - glutSolidSphere(7.0, 8, 8); - glPopMatrix(); - - if (it && multibounce) { - if (it->drawObj1) { - glEnable(GL_TEXTURE_2D); - drawObject(&sphere[2]); - glDisable(GL_TEXTURE_2D); - } - } -} - -void -drawObject(Object *it) -{ - static GLfloat xplane[4] = { 1, 0, 0, 0 }; - static GLfloat zplane[4] = { 0, 1, 0, 0 }; - GLfloat *obj2draw = it->obj2draw; - - if (!cullBackFaces) { - glEnable(GL_CULL_FACE); - glCullFace(GL_FRONT); - } - - glPushMatrix(); - - glTranslatef(obj2draw[X], obj2draw[Y], obj2draw[Z]); - - if (doSphereMap) { - glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); - glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); - glEnable(GL_TEXTURE_GEN_S); - glEnable(GL_TEXTURE_GEN_T); - glEnable(GL_TEXTURE_2D); - glBindTexture(GL_TEXTURE_2D, it->texobj); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, - GL_REPLACE); - } else { - glTexGenfv(GL_S, GL_OBJECT_PLANE, xplane); - glTexGenfv(GL_T, GL_OBJECT_PLANE, zplane); - glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - glEnable(GL_TEXTURE_GEN_S); - glEnable(GL_TEXTURE_GEN_T); - glEnable(GL_TEXTURE_2D); - glBindTexture(GL_TEXTURE_2D, 100); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, - GL_REPLACE); - } - - glColor3f(1.0, 1.0, 1.0); - switch (object) { - case 0: - glutSolidSphere(3.5, 20, 20); - break; - case 1: - glScalef(3.0, 3.0, 3.0); - glRotatef(30.0, 1.0, 1.0, 0.0); - glutSolidIcosahedron(); - break; - case 2: - glFrontFace(GL_CW); - glutSolidTeapot(3.0); - glFrontFace(GL_CCW); - break; - } - - glDisable(GL_TEXTURE_GEN_S); - glDisable(GL_TEXTURE_GEN_T); - glPopMatrix(); - - if (!cullBackFaces) { - glCullFace(GL_BACK); - } -} - -void -vsub(const GLfloat *src1, const GLfloat *src2, GLfloat *dst) -{ - dst[0] = src1[0] - src2[0]; - dst[1] = src1[1] - src2[1]; - dst[2] = src1[2] - src2[2]; -} - -void -vcopy(const GLfloat *v1, GLfloat *v2) -{ - register int i; - for (i = 0 ; i < 3 ; i++) - v2[i] = v1[i]; -} - -void -vcross(const GLfloat *v1, const GLfloat *v2, GLfloat *cross) -{ - GLfloat temp[3]; - - temp[0] = (v1[1] * v2[2]) - (v1[2] * v2[1]); - temp[1] = (v1[2] * v2[0]) - (v1[0] * v2[2]); - temp[2] = (v1[0] * v2[1]) - (v1[1] * v2[0]); - vcopy(temp, cross); -} - -void -display(void) -{ - GLfloat tmp1[3], tmp2[3]; - - glDisable(GL_TEXTURE_2D); - glEnable(GL_DEPTH_TEST); - glEnable(GL_CULL_FACE); - - if (dynamicSmap) { - if (multibounce) { - glDisable(GL_TEXTURE_2D); - glEnable(GL_DEPTH_TEST); - glEnable(GL_CULL_FACE); - - vsub(eye,obj,tmp1); - vsub(obj2,obj,tmp2); - vcross(tmp1,tmp2,up2); - vcross(up2,tmp2,up2); - - smapSetUpVector(smap3, up2); - smapGenSphereMap(smap3); - } - - glDisable(GL_TEXTURE_2D); - glEnable(GL_DEPTH_TEST); - glEnable(GL_CULL_FACE); - smapGenSphereMap(smap); - - glDisable(GL_TEXTURE_2D); - glEnable(GL_DEPTH_TEST); - glEnable(GL_CULL_FACE); - smapGenSphereMap(smap2); - } - - /* smapGenSphereMap leaves scissor enabled, disable it. */ - glDisable(GL_SCISSOR_TEST); - - glViewport(0, 0, W, H); - - if (showSphereMap) { - glClear(GL_COLOR_BUFFER_BIT); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluOrtho2D(0, 1, 0, 1); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - glEnable(GL_TEXTURE_2D); - glDisable(GL_DEPTH_TEST); - glBindTexture(GL_TEXTURE_2D, showSphereMap); - glBegin(GL_QUADS); - glTexCoord2f(0,0); - glVertex2f(0,0); - glTexCoord2f(1,0); - glVertex2f(1,0); - glTexCoord2f(1,1); - glVertex2f(1,1); - glTexCoord2f(0,1); - glVertex2f(0,1); - glEnd(); - } else { - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glDisable(GL_TEXTURE_2D); - glEnable(GL_DEPTH_TEST); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(60.0, (GLfloat) W / (GLfloat) H, 0.5, 40.0); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - gluLookAt(eye[0], eye[1], eye[2], /* eye at eye */ - 0, 0, 0, /* looking at object */ - up[0], up[1], up[2]); - - positionLights(-1, NULL); - drawView(-1, NULL); - if (multipass) { - doSphereMap = 1; - } - drawObject(&sphere[0]); - if (multipass) { - doSphereMap = 0; - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glDepthFunc(GL_EQUAL); - glEnable(GL_BLEND); - drawObject(&sphere[0]); - glDisable(GL_BLEND); - glDepthFunc(GL_LESS); - } - if (multipass) { - doSphereMap = 1; - } - drawObject(&sphere[1]); - } - - if (doubleBuffer) { - glutSwapBuffers(); - } -} - -int angle = 0; -int downx, downy; - -void -motion(int x, int y) -{ - if (moving) { - angle += (x - downx); - angle = angle % 360; - eye[0] = sin(angle * 3.14159/180.0) * -15; - eye[2] = cos(angle * 3.14159/180.0) * -15; - eye[1] = eye[1] + 0.1 * (y - downy); - if (eye[1] > +25) eye[1] = +25; - if (eye[1] < -25) eye[1] = -25; - smapSetEyeVector(smap, eye); - smapSetEyeVector(smap2, eye); - glutPostRedisplay(); - downx = x; - downy = y; - } -} - -void -mouse(int button, int state, int x, int y) -{ - if (button == GLUT_LEFT_BUTTON) { - if (state == GLUT_DOWN) { - moving = 1; - downx = x; - downy = y; - } else { - moving = 0; - } - } -} - -void -idle(void) -{ - timeCount = timeCount + 0.1; - obj2[Y] = -5 + cos(timeCount) * 1.0; - smapSetObjectVector(smap, obj); - smapSetObjectVector(smap2, obj2); - smapSetObjectVector(smap3, obj); - glutPostRedisplay(); -} - -/* When not visible, stop animating. Restart when visible again. */ -static void -visible(int vis) -{ - if (vis == GLUT_VISIBLE) { - if (animation) - glutIdleFunc(idle); - } else { - if (!animation) - glutIdleFunc(NULL); - } -} - -void initGraphicsState(void); -void initCallbacks(int ifFullscreen); - -void -menu(int value) -{ - switch (value) { - case 0: - showSphereMap = 0; - break; - case 1: - showSphereMap = TO_SPHERE_MAP; - break; - case -1: - showSphereMap = TO_SPHERE_MAP2; - break; - case -2: - showSphereMap = TO_SPHERE_MAP3; - break; - case 4: - object = (object + 1) % 3; - break; - case 5: - smapSetSphereMapTexDim(smap, 64); - smapSetViewTexDim(smap, 64); - smapSetSphereMapTexDim(smap2, 64); - smapSetViewTexDim(smap2, 64); - smapSetSphereMapTexDim(smap3, 64); - smapSetViewTexDim(smap3, 64); - break; - case 6: - smapSetSphereMapTexDim(smap, 128); - smapSetViewTexDim(smap, 128); - smapSetSphereMapTexDim(smap2, 128); - smapSetViewTexDim(smap2, 128); - smapSetSphereMapTexDim(smap3, 128); - smapSetViewTexDim(smap3, 128); - break; - case 7: - smapSetSphereMapTexDim(smap, 256); - smapSetViewTexDim(smap, 256); - smapSetSphereMapTexDim(smap2, 256); - smapSetViewTexDim(smap2, 256); - smapSetSphereMapTexDim(smap3, 256); - smapSetViewTexDim(smap3, 256); - break; - case 8: - glDrawBuffer(GL_FRONT); - glReadBuffer(GL_FRONT); - doubleBuffer = 0; - break; - case 9: - glDrawBuffer(GL_BACK); - glReadBuffer(GL_BACK); - doubleBuffer = 1; - break; - case 10: - dynamicSmap = 1; - break; - case 11: - dynamicSmap = 0; - break; - case 12: - cullBackFaces = 1; - break; - case 13: - cullBackFaces = 0; - break; - case 14: - doSphereMap = 1; - multipass = 0; - break; - case 15: - doSphereMap = 0; - multipass = 0; - break; - case 16: - multipass = 1; - break; - case 17: - animation = !animation; - if (animation) { - glutIdleFunc(idle); - } else { - glutIdleFunc(NULL); - } - break; - case 666: - exit(0); - break; - } - glutPostRedisplay(); -} - -void -keyboard(unsigned char c, int x, int y) -{ - switch (c) { - case 27: - exit(0); - break; - case '1': - menu(5); - break; - case '2': - menu(6); - break; - case '3': - menu(7); - break; - case 's': - menu(4); - break; - case 'f': - glutGameModeString("400x300:16@60"); - glutEnterGameMode(); - initGraphicsState(); - initCallbacks(0); - break; - case 'l': - glutLeaveGameMode(); - glutSetWindow(win); - break; - case 'a': - sphereTess += 5; - glutPostRedisplay(); - break; - case 'z': - sphereTess -= 5; - glutPostRedisplay(); - break; - case 'b': - case 'B': - multibounce = !multibounce; - printf("multibounce = %d\n", multibounce); - break; - case ' ': - menu(17); - break; - } -} - -void -initGraphicsState(void) -{ - GLfloat lightColor[4] = { 0.6, 0.6, 0.6, 1.0 }; /* white */ - - glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, 1); - glLightfv(GL_LIGHT0, GL_DIFFUSE, lightColor); - glLightfv(GL_LIGHT1, GL_DIFFUSE, lightColor); - glLightfv(GL_LIGHT2, GL_DIFFUSE, lightColor); - glLightfv(GL_LIGHT3, GL_DIFFUSE, lightColor); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_LIGHT1); - glEnable(GL_LIGHT2); - glEnable(GL_LIGHT3); - glEnable(GL_DEPTH_TEST); - glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE); - glEnable(GL_COLOR_MATERIAL); - glEnable(GL_NORMALIZE); - - glBindTexture(GL_TEXTURE_2D, 100); - makePatternTexture(); -} - -void -initCallbacks(int ifFullscreen) -{ - glutReshapeFunc(reshape); - glutDisplayFunc(display); - glutVisibilityFunc(visible); - glutMouseFunc(mouse); - glutKeyboardFunc(keyboard); - glutMotionFunc(motion); - - if (ifFullscreen) { - - glutCreateMenu(menu); - glutAddMenuEntry("eye view", 0); - glutAddMenuEntry("eye to obj 1 smap", 1); - glutAddMenuEntry("eye to obj 2 smap", -1); - glutAddMenuEntry("obj 1 to obj 2 smap", -2); - glutAddMenuEntry("switch object", 4); - glutAddMenuEntry("texdim = 64", 5); - glutAddMenuEntry("texdim = 128", 6); - glutAddMenuEntry("texdim = 256", 7); - glutAddMenuEntry("single buffer", 8); - glutAddMenuEntry("double buffer", 9); - glutAddMenuEntry("dynamic smap", 10); - glutAddMenuEntry("stop smap building", 11); - glutAddMenuEntry("cull back faces", 12); - glutAddMenuEntry("cull front faces", 13); - glutAddMenuEntry("sphere map", 14); - glutAddMenuEntry("texture", 15); - glutAddMenuEntry("multipass", 16); - glutAddMenuEntry("toggle animate", 17); - glutAddMenuEntry("quit", 666); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - } -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); - win = glutCreateWindow("fakeraytrace"); - - initGraphicsState(); - initCallbacks(1); - - smap = smapCreateSphereMap(NULL); - smapSetSphereMapTexObj (smap, TO_SPHERE_MAP); - smapSetViewTexObjs (smap, texobjs); - smapSetEyeVector (smap, eye); - smapSetUpVector (smap, up); - smapSetObjectVector (smap, obj); - smapSetNearFar (smap, 0.5, 40.0); - smapSetPositionLightsFunc (smap, positionLights); - smapSetDrawViewFunc (smap, drawView); - smapSetViewTexDim (smap, 64); - smapSetSphereMapTexDim (smap, 64); - smapSetContextData(smap, &sphere[0]); - - smap2 = smapCreateSphereMap(NULL); - smapSetSphereMapTexObj (smap2, TO_SPHERE_MAP2); - smapSetViewTexObjs (smap2, texobjs2); - smapSetEyeVector (smap2, eye); - smapSetUpVector (smap2, up); - smapSetObjectVector (smap2, obj2); - smapSetNearFar (smap2, 0.5, 40.0); - smapSetPositionLightsFunc (smap2, positionLights); - smapSetDrawViewFunc (smap2, drawView); - smapSetViewTexDim (smap2, 64); - smapSetSphereMapTexDim (smap2, 64); - smapSetContextData(smap2, &sphere[1]); - - smap3 = smapCreateSphereMap(NULL); - smapSetSphereMapTexObj (smap3, TO_SPHERE_MAP3); - smapSetViewTexObjs (smap3, texobjs3); - smapSetEyeVector (smap3, obj2); - smapSetUpVector (smap3, up2); - smapSetObjectVector (smap3, obj); - smapSetNearFar (smap3, 0.1, 40.0); - smapSetPositionLightsFunc (smap3, positionLights); - smapSetDrawViewFunc (smap3, drawView); - smapSetViewTexDim (smap3, 64); - smapSetSphereMapTexDim (smap3, 64); - smapSetContextData(smap3, &sphere[2]); - - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/spheremap/glsmap/fakeraytrace.dsp b/lib/glut-3.7.6/progs/spheremap/glsmap/fakeraytrace.dsp deleted file mode 100644 index 3f5c56de3..000000000 --- a/lib/glut-3.7.6/progs/spheremap/glsmap/fakeraytrace.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="fakeraytrace" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=fakeraytrace - 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 "fakeraytrace.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 "fakeraytrace.mak" CFG="fakeraytrace - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "fakeraytrace - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "fakeraytrace - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "fakeraytrace - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "fakeraytrace - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "fakeraytrace - Win32 Release" -# Name "fakeraytrace - Win32 Debug" -# Begin Source File - -SOURCE=.\fakeraytrace.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/spheremap/glsmap/rtsmap.c b/lib/glut-3.7.6/progs/spheremap/glsmap/rtsmap.c deleted file mode 100644 index 3f8890a2a..000000000 --- a/lib/glut-3.7.6/progs/spheremap/glsmap/rtsmap.c +++ /dev/null @@ -1,480 +0,0 @@ - -/* 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. */ - -/* rtsmap.c - real-time generation and use of a sphere map with libglsmap */ - -#include -#include -#include -#include -#include - -#if defined(GL_EXT_texture_object) && !defined(GL_VERSION_1_1) -#define glBindTexture(A,B) glBindTextureEXT(A,B) -#endif - -enum { - TO_NONE = 0, - TO_FRONT, TO_TOP, TO_BOTTOM, TO_LEFT, TO_RIGHT, - TO_BACK, - TO_SPHERE_MAP -}; - -static GLuint texobjs[6] = { - TO_FRONT, TO_TOP, TO_BOTTOM, - TO_LEFT, TO_RIGHT, TO_BACK -}; - -SphereMap *smap; - -GLfloat up[3] = { 0, 1, 0 }; -GLfloat eye[3] = { 0, 0, -20 }; -GLfloat obj[3] = { 0, 0, 0 }; - -int W, H; - -int showSphereMap = 0; -int object = 0; -int texdim = 64; -int doubleBuffer = 1; -int dynamicSmap = 1; -int cullBackFaces = 1; -int doSphereMap = 1; -int multipass = 0; - -static char *pattern[] = { - "......xxxx......", - "......xxxx......", - "......xxxx......", - "......xxxx......", - "......xxxx......", - "......xxxx......", - "xxxxxxxxxxxxxxxx", - "xxxxxxxxxxxxxxxx", - "xxxxxxxxxxxxxxxx", - "xxxxxxxxxxxxxxxx", - "......xxxx......", - "......xxxx......", - "......xxxx......", - "......xxxx......", - "......xxxx......", - "......xxxx......", -}; - -static void -makePatternTexture(void) -{ - GLubyte patternTexture[16][16][4]; - GLubyte *loc; - int s, t; - - /* Setup RGB image for the texture. */ - loc = (GLubyte*) patternTexture; - for (t = 0; t < 16; t++) { - for (s = 0; s < 16; s++) { - if (pattern[t][s] == 'x') { - /* Nice green. */ - loc[0] = 0x1f; - loc[1] = 0x8f; - loc[2] = 0x1f; - loc[3] = 0x7f; /* opaque */ - } else { - /* Light gray. */ - loc[0] = 0x00; - loc[1] = 0x00; - loc[2] = 0x00; - loc[3] = 0x00; /* transparent */ - } - loc += 4; - } - } - - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, - GL_LINEAR_MIPMAP_LINEAR); - gluBuild2DMipmaps(GL_TEXTURE_2D, 4, 16, 16, - GL_RGBA, GL_UNSIGNED_BYTE, patternTexture); -} - -void -reshape(int w, int h) -{ - W = w; - H = h; -} - -void -positionLights(int view, void *context) -{ - static GLfloat light1Pos[4] = { -41.0, 41.0, -41.0, 1.0 }; - static GLfloat light2Pos[4] = { +41.0, 0.0, -41.0, 1.0 }; - static GLfloat light3Pos[4] = { -41.0, 0.0, +41.0, 1.0 }; - static GLfloat light4Pos[4] = { +41.0, 0.0, +41.0, 1.0 }; - - glLightfv(GL_LIGHT0, GL_POSITION, light1Pos); - glLightfv(GL_LIGHT1, GL_POSITION, light2Pos); - glLightfv(GL_LIGHT2, GL_POSITION, light3Pos); - glLightfv(GL_LIGHT3, GL_POSITION, light4Pos); -} - -void -drawView(int view, void *context) -{ - /* right green small cube (+5,0,-8) */ - glPushMatrix(); - glTranslatef(5.0, 0.0, -8.0); - glRotatef(-45, 1.0, 0.0, 1.0); - glColor3f(0.0, 1.0, 0.0); - glutSolidCube(2.0); - glPopMatrix(); - /* left red cube (-5,0,-8) */ - glPushMatrix(); - glTranslatef(-5.0, 0.0, -8.0); - glRotatef(45, 1.0, 0.0, 1.0); - glColor3f(1.0, 0.0, 0.0); - glutSolidCube(6.0); - glPopMatrix(); - /* left blue cube (-7,0,0); */ - glPushMatrix(); - glTranslatef(-7.0, 0.0, 0.0); - glColor3f(0.0, 0.0, 1.0); - glutSolidCube(5.0); - glPopMatrix(); - /* right cyan big cube (+7,0,0) */ - glPushMatrix(); - glTranslatef(7.0, 0.0, 0.0); - glRotatef(30, 1.0, 1.0, 0.0); - glColor3f(0.0, 1.0, 1.0); - glutSolidCube(5.0); - glPopMatrix(); - /* distant yellow sphere (0,0,+10) */ - glPushMatrix(); - glTranslatef(0.0, 0.0, 10.0); - glColor3f(1.0, 1.0, 0.0); - glutSolidSphere(7.0, 8, 8); - glPopMatrix(); - /* top white sphere (0,+5,0) */ - glPushMatrix(); - glTranslatef(0.0, 5.0, 0.0); - glColor3f(1.0, 1.0, 1.0); - glutSolidSphere(2.0, 8, 8); - glPopMatrix(); - /* bottom magenta sphere (0,-7,0) */ - glPushMatrix(); - glTranslatef(0.0, -7.0, 0.0); - glColor3f(1.0, 0.0, 1.0); - glutSolidSphere(3.0, 8, 8); - glPopMatrix(); -} - -void -drawObject(void *context) -{ - static GLfloat xplane[4] = { 1, 0, 0, 0 }; - static GLfloat zplane[4] = { 0, 1, 0, 0 }; - - if (!cullBackFaces) { - glEnable(GL_CULL_FACE); - glCullFace(GL_FRONT); - } - - glPushMatrix(); - glTranslatef(obj[0], obj[1], obj[2]); - if (doSphereMap) { - glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); - glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); - glEnable(GL_TEXTURE_GEN_S); - glEnable(GL_TEXTURE_GEN_T); - glEnable(GL_TEXTURE_2D); - glBindTexture(GL_TEXTURE_2D, 7); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, - GL_REPLACE); - } else { - glTexGenfv(GL_S, GL_OBJECT_PLANE, xplane); - glTexGenfv(GL_T, GL_OBJECT_PLANE, zplane); - glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - glEnable(GL_TEXTURE_GEN_S); - glEnable(GL_TEXTURE_GEN_T); - glEnable(GL_TEXTURE_2D); - glBindTexture(GL_TEXTURE_2D, 100); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, - GL_REPLACE); - } - - glColor3f(1.0, 1.0, 1.0); - switch (object) { - case 0: - glutSolidSphere(3.0, 20, 20); - break; - case 1: - glScalef(3.0, 3.0, 3.0); - glRotatef(30.0, 1.0, 1.0, 0.0); - glutSolidIcosahedron(); - break; - case 2: - glFrontFace(GL_CW); - glutSolidTeapot(3.0); - glFrontFace(GL_CCW); - break; - } - - glDisable(GL_TEXTURE_GEN_S); - glDisable(GL_TEXTURE_GEN_T); - glPopMatrix(); - - if (!cullBackFaces) { - glCullFace(GL_BACK); - } -} - -void -display(void) -{ - glDisable(GL_TEXTURE_2D); - glEnable(GL_DEPTH_TEST); - glEnable(GL_CULL_FACE); - - if (dynamicSmap) { - smapGenSphereMap(smap); - } - - /* smapGenSphereMap leaves scissor enabled, disable it. */ - glDisable(GL_SCISSOR_TEST); - - glViewport(0, 0, W, H); - - if (showSphereMap) { - glClear(GL_COLOR_BUFFER_BIT); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluOrtho2D(0, 1, 0, 1); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - glEnable(GL_TEXTURE_2D); - glDisable(GL_DEPTH_TEST); - glBindTexture(GL_TEXTURE_2D, 7); - glBegin(GL_QUADS); - glTexCoord2f(0,0); - glVertex2f(0,0); - glTexCoord2f(1,0); - glVertex2f(1,0); - glTexCoord2f(1,1); - glVertex2f(1,1); - glTexCoord2f(0,1); - glVertex2f(0,1); - glEnd(); - } else { - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glDisable(GL_TEXTURE_2D); - glEnable(GL_DEPTH_TEST); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(60.0, 1.0, 0.5, 40.0); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - gluLookAt(eye[0], eye[1], eye[2], /* eye at eye */ - obj[0], obj[1], obj[2], /* looking at object */ - up[0], up[1], up[2]); - - positionLights(-1, NULL); - drawView(-1, NULL); - if (multipass) { - doSphereMap = 1; - } - drawObject(NULL); - if (multipass) { - doSphereMap = 0; - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glDepthFunc(GL_EQUAL); - glEnable(GL_BLEND); - drawObject(NULL); - glDisable(GL_BLEND); - glDepthFunc(GL_LESS); - } - } - - if (doubleBuffer) { - glutSwapBuffers(); - } -} - -int angle = 0; -int downx, downy; - -void -motion(int x, int y) -{ - angle += (x - downx); - angle = angle % 360; - eye[0] = sin(angle * 3.14159/180.0) * -20; - eye[2] = cos(angle * 3.14159/180.0) * -20; - eye[1] = eye[1] + 0.1 * (y - downy); - if (eye[1] > +25) eye[1] = +25; - if (eye[1] < -25) eye[1] = -25; - smapSetEyeVector(smap, eye); - glutPostRedisplay(); - downx = x; - downy = y; -} - -void -mouse(int button, int state, int x, int y) -{ - if (button == GLUT_LEFT_BUTTON) { - if (state == GLUT_DOWN) { - downx = x; - downy = y; - } - } -} - -void -menu(int value) -{ - switch (value) { - case 0: - showSphereMap = 0; - break; - case 1: - showSphereMap = 1; - break; - case 4: - object = (object + 1) % 3; - break; - case 5: - smapSetSphereMapTexDim(smap, 64); - smapSetViewTexDim(smap, 64); - break; - case 6: - smapSetSphereMapTexDim(smap, 128); - smapSetViewTexDim(smap, 128); - break; - case 7: - smapSetSphereMapTexDim(smap, 256); - smapSetViewTexDim(smap, 256); - break; - case 8: - glDrawBuffer(GL_FRONT); - glReadBuffer(GL_FRONT); - doubleBuffer = 0; - break; - case 9: - glDrawBuffer(GL_BACK); - glReadBuffer(GL_BACK); - doubleBuffer = 1; - break; - case 10: - dynamicSmap = 1; - break; - case 11: - dynamicSmap = 0; - break; - case 12: - cullBackFaces = 1; - break; - case 13: - cullBackFaces = 0; - break; - case 14: - doSphereMap = 1; - multipass = 0; - break; - case 15: - doSphereMap = 0; - multipass = 0; - break; - case 16: - multipass = 1; - break; - case 666: - exit(0); - break; - } - glutPostRedisplay(); -} - -void -initGraphicsState(void) -{ - GLfloat lightColor[4] = { 0.6, 0.6, 0.6, 1.0 }; /* white */ - - glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, 1); - glLightfv(GL_LIGHT0, GL_DIFFUSE, lightColor); - glLightfv(GL_LIGHT1, GL_DIFFUSE, lightColor); - glLightfv(GL_LIGHT2, GL_DIFFUSE, lightColor); - glLightfv(GL_LIGHT3, GL_DIFFUSE, lightColor); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_LIGHT1); - glEnable(GL_LIGHT2); - glEnable(GL_LIGHT3); - glEnable(GL_DEPTH_TEST); - glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE); - glEnable(GL_COLOR_MATERIAL); - glEnable(GL_NORMALIZE); -} - -int -main(int argc, char **argv) -{ - glutInitWindowSize(400, 400); - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); - glutCreateWindow("real-time dynamic sphere mapping"); - glutReshapeFunc(reshape); - glutDisplayFunc(display); - - initGraphicsState(); - - glutCreateMenu(menu); - glutAddMenuEntry("eye view", 0); - glutAddMenuEntry("show sphere map", 1); - glutAddMenuEntry("outline", 2); - glutAddMenuEntry("switch object", 4); - glutAddMenuEntry("texdim = 64", 5); - glutAddMenuEntry("texdim = 128", 6); - glutAddMenuEntry("texdim = 256", 7); - glutAddMenuEntry("single buffer", 8); - glutAddMenuEntry("double buffer", 9); - glutAddMenuEntry("dynamic smap", 10); - glutAddMenuEntry("stop smap building", 11); - glutAddMenuEntry("cull back faces", 12); - glutAddMenuEntry("cull front faces", 13); - glutAddMenuEntry("sphere map", 14); - glutAddMenuEntry("texture", 15); - glutAddMenuEntry("multipass", 16); - glutAddMenuEntry("quit", 666); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - glutMouseFunc(mouse); - glutMotionFunc(motion); - - smap = smapCreateSphereMap(NULL); - smapSetSphereMapTexObj (smap, TO_SPHERE_MAP); - smapSetViewTexObjs (smap, texobjs); - smapSetEyeVector (smap, eye); - smapSetUpVector (smap, up); - smapSetObjectVector (smap, obj); - smapSetNearFar (smap, 0.5, 40.0); - smapSetPositionLightsFunc (smap, positionLights); - smapSetDrawViewFunc (smap, drawView); - smapSetViewTexDim (smap, 64); - smapSetSphereMapTexDim (smap, 64); - - glBindTexture(GL_TEXTURE_2D, 100); - makePatternTexture(); - - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/spheremap/glsmap/rtsmap.dsp b/lib/glut-3.7.6/progs/spheremap/glsmap/rtsmap.dsp deleted file mode 100644 index c256e8660..000000000 --- a/lib/glut-3.7.6/progs/spheremap/glsmap/rtsmap.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="rtsmap" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=rtsmap - 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 "rtsmap.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 "rtsmap.mak" CFG="rtsmap - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "rtsmap - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "rtsmap - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "rtsmap - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "rtsmap - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "rtsmap - Win32 Release" -# Name "rtsmap - Win32 Debug" -# Begin Source File - -SOURCE=.\rtsmap.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/spheremap/hacks/Imakefile b/lib/glut-3.7.6/progs/spheremap/hacks/Imakefile deleted file mode 100644 index a02f1815b..000000000 --- a/lib/glut-3.7.6/progs/spheremap/hacks/Imakefile +++ /dev/null @@ -1,16 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1997. */ - -#include "../../../Glut.cf" - -TARGETS = sixviews cview2smap smapmesh - -SRCS = cview2smap.c drawmesh.c makemesh.c sixviews.c st2rvec.c smapmesh.c - -AllTarget($(TARGETS)) - -SimpleGlutProgramTarget(sixviews) -SimpleGlutProgramTarget(smapmesh) -NormalGlutProgramTarget(cview2smap,cview2smap.o drawmesh.o makemesh.o) - -DependTarget() diff --git a/lib/glut-3.7.6/progs/spheremap/hacks/cview2smap.c b/lib/glut-3.7.6/progs/spheremap/hacks/cview2smap.c deleted file mode 100644 index e0523fabb..000000000 --- a/lib/glut-3.7.6/progs/spheremap/hacks/cview2smap.c +++ /dev/null @@ -1,336 +0,0 @@ - -/* 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. */ - -/* cview2smap.c - warp 6 cube views into sphere map */ - -#include -#include -#include - -#include "smapmesh.h" - -#if defined(GL_EXT_texture_object) && !defined(GL_VERSION_1_1) -#define glBindTexture(A,B) glBindTextureEXT(A,B) -#endif -#if defined(GL_EXT_copy_texture) && !defined(GL_VERSION_1_1) -#define glCopyTexImage2D(A, B, C, D, E, F, G, H) glCopyTexImage2DEXT(A, B, C, D, E, F, G, H) -#endif - -GLfloat up[3] = { 0, 1, 0 }; -GLfloat eye[3] = { 0, 0, -20 }; -GLfloat obj[3] = { 0, 0, 0 }; -int outline = 0; -int bufswap = 1; -int texdim = 128; - -static int W, H; - -int angle = 0; -int downx, downy; - -void -reshape(int w, int h) -{ - W = w; - H = h; -} - -void -drawView(int drawCenterObject) -{ - /* right green small cube (+5,0,-8) */ - glPushMatrix(); - glTranslatef(5.0, 0.0, -8.0); - glRotatef(-45, 1.0, 0.0, 1.0); - glColor3f(0.0, 1.0, 0.0); - glutSolidCube(2.0); - glPopMatrix(); - /* left red cube (-5,0,-8) */ - glPushMatrix(); - glTranslatef(-5.0, 0.0, -8.0); - glRotatef(45, 1.0, 0.0, 1.0); - glColor3f(1.0, 0.0, 0.0); - glutSolidCube(6.0); - glPopMatrix(); - /* left blue cube (-7,0,0); */ - glPushMatrix(); - glTranslatef(-7.0, 0.0, 0.0); - glColor3f(0.0, 0.0, 1.0); - glutSolidCube(5.0); - glPopMatrix(); - /* right cyan big cube (+7,0,0) */ - glPushMatrix(); - glTranslatef(7.0, 0.0, 0.0); - glRotatef(30, 1.0, 1.0, 0.0); - glColor3f(0.0, 1.0, 1.0); - glutSolidCube(5.0); - glPopMatrix(); - /* distant yellow sphere (0,0,+10) */ - glPushMatrix(); - glTranslatef(0.0, 0.0, 10.0); - glColor3f(1.0, 1.0, 0.0); - glutSolidSphere(7.0, 8, 8); - glPopMatrix(); - /* top white sphere (0,+5,0) */ - glPushMatrix(); - glTranslatef(0.0, 5.0, 0.0); - glColor3f(1.0, 1.0, 1.0); - glutSolidSphere(2.0, 8, 8); - glPopMatrix(); - /* bottom magenta big sphere (0,-6,0) */ - glPushMatrix(); - glTranslatef(0.0, -6.0, 0.0); - glColor3f(1.0, 0.0, 1.0); - glutSolidSphere(4.0, 8, 8); - glPopMatrix(); - - if (drawCenterObject) { - glPushMatrix(); - glScalef(3.0, 3.0, 3.0); - glColor3f(1.0, 1.0, 1.0); - glutSolidIcosahedron(); - glPopMatrix(); - } -} - -void -setAreaAndClear(GLint x, GLint y, GLsizei w, GLsizei h) -{ - glViewport(x, y, w, h); - glScissor(x, y, w, h); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); -} - -/* You need to reposition the lights everytime view */ -/* transformation changes. */ -void -positionLights(void) -{ - static GLfloat light1Pos[4] = { -41.0, 41.0, -41.0, 1.0 }; - static GLfloat light2Pos[4] = { +41.0, 0.0, -41.0, 1.0 }; - static GLfloat light3Pos[4] = { -41.0, 0.0, +41.0, 1.0 }; - static GLfloat light4Pos[4] = { +41.0, 0.0, +41.0, 1.0 }; - - glLightfv(GL_LIGHT0, GL_POSITION, light1Pos); - glLightfv(GL_LIGHT1, GL_POSITION, light2Pos); - glLightfv(GL_LIGHT2, GL_POSITION, light3Pos); - glLightfv(GL_LIGHT3, GL_POSITION, light4Pos); -} - -void -snagImageAsTexture(GLuint texobj) -{ - glBindTexture(GL_TEXTURE_2D, texobj); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, - GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, - GL_LINEAR); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); - /* Clamp to avoid artifacts from wrap around in texture. */ - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); - - glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, - texdim, texdim, 0); -} - -struct { - GLfloat angle; - GLfloat x, y, z; -} faceInfo[6] = { - { 0.0, +1.0, 0.0, 0.0 }, /* front */ - { 90.0, -1.0, 0.0, 0.0 }, /* top */ - { 90.0, +1.0, 0.0, 0.0 }, /* bottom */ - { 90.0, 0.0, -1.0, 0.0 }, /* left */ - { 90.0, 0.0, +1.0, 0.0 }, /* right */ - { 180.0, -1.0, 0.0, 0.0 } /* back */ -}; - -void -configFace(int i) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glRotatef(faceInfo[i].angle, - faceInfo[i].x, faceInfo[i].y, faceInfo[i].z); - gluLookAt(obj[0], obj[1], obj[2], /* "eye" at object */ - eye[0], eye[1], eye[2], /* looking at eye */ - up[0], up[1], up[2]); - positionLights(); -} - -void -display(void) -{ - static GLuint texobjs[6] = { 1, 2 ,3, 4, 5, 6 }; - int i; - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(90.0, 1.0, 0.5, 40.0); - glViewport(0, 0, texdim, texdim); - glScissor(0, 0, texdim, texdim); - glEnable(GL_SCISSOR_TEST); - glEnable(GL_DEPTH_TEST); - - /* front view (center) */ - for (i=0; i<6; i++) { - configFace(i); - drawView(0); - snagImageAsTexture(1+i); - } - - glDisable(GL_SCISSOR_TEST); - glClear(GL_COLOR_BUFFER_BIT); - glViewport(0, 0, W, H); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluOrtho2D(0, 1, 0, 1); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glDisable(GL_DEPTH_TEST); - glEnable(GL_TEXTURE_2D); - drawSphereMapMesh(texobjs); - glDisable(GL_TEXTURE_2D); - if (outline) { - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - glDisable(GL_LIGHTING); - glColor3f(1.0, 1.0, 1.0); - drawSphereMapMesh(texobjs); - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - glEnable(GL_LIGHTING); - } - - glDisable(GL_SCISSOR_TEST); - - /* initial clear */ - glViewport(0, 0, W, H); - - if (bufswap) { - glutSwapBuffers(); - } -} - -void -menu(int value) -{ - switch (value) { - case 1: - glEnable(GL_LIGHTING); - printf("enable\n"); - break; - case 2: - glDisable(GL_LIGHTING); - printf("disable\n"); - break; - case 3: - outline = 1; - break; - case 4: - outline = 0; - break; - case 5: - glDrawBuffer(GL_FRONT); - glReadBuffer(GL_FRONT); - bufswap = 0; - break; - case 6: - glDrawBuffer(GL_BACK); - glReadBuffer(GL_BACK); - bufswap = 1; - break; - case 7: - texdim = 64; - break; - case 8: - texdim = 128; - break; - case 9: - texdim = 256; - break; - } - glutPostRedisplay(); -} - -void -motion(int x, int y) -{ - angle += (x - downx); - angle = angle % 360; - eye[0] = sin(angle * 3.14159/180.0) * -20; - eye[2] = cos(angle * 3.14159/180.0) * -20; - eye[1] = eye[1] + 0.1 * (y - downy); - if (eye[1] > +25) eye[1] = +25; - if (eye[1] < -25) eye[1] = -25; - glutPostRedisplay(); - downx = x; - downy = y; -} - -void -mouse(int button, int state, int x, int y) -{ - if (button == GLUT_LEFT_BUTTON) { - if (state == GLUT_DOWN) { - downx = x; - downy = y; - } - } -} - -void -initGraphicsState(void) -{ - GLfloat lightColor[4] = { 0.6, 0.6, 0.6, 1.0 }; /* white */ - - glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, 1); - glLightfv(GL_LIGHT0, GL_DIFFUSE, lightColor); - glLightfv(GL_LIGHT1, GL_DIFFUSE, lightColor); - glLightfv(GL_LIGHT2, GL_DIFFUSE, lightColor); - glLightfv(GL_LIGHT3, GL_DIFFUSE, lightColor); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_LIGHT1); - glEnable(GL_LIGHT2); - glEnable(GL_LIGHT3); - glEnable(GL_DEPTH_TEST); - glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE); - glEnable(GL_COLOR_MATERIAL); - glEnable(GL_NORMALIZE); -} - -int -main(int argc, char **argv) -{ - makeSphereMapMesh(); - - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); - glutCreateWindow("cview2smap"); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - - initGraphicsState(); - - glutCreateMenu(menu); - glutAddMenuEntry("light on", 1); - glutAddMenuEntry("light off", 2); - glutAddMenuEntry("outline", 3); - glutAddMenuEntry("no outline", 4); - glutAddMenuEntry("single buffer", 5); - glutAddMenuEntry("double buffer", 6); - glutAddMenuEntry("face tex dim = 64", 7); - glutAddMenuEntry("face tex dim = 128", 8); - glutAddMenuEntry("face tex dim = 256", 9); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - glutMouseFunc(mouse); - glutMotionFunc(motion); - - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/spheremap/hacks/cview2smap.dsp b/lib/glut-3.7.6/progs/spheremap/hacks/cview2smap.dsp deleted file mode 100644 index 9051ee175..000000000 --- a/lib/glut-3.7.6/progs/spheremap/hacks/cview2smap.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="cview2smap" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=cview2smap - 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 "cview2smap.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 "cview2smap.mak" CFG="cview2smap - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "cview2smap - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "cview2smap - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "cview2smap - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "cview2smap - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "cview2smap - Win32 Release" -# Name "cview2smap - Win32 Debug" -# Begin Source File - -SOURCE=.\cview2smap.c -# End Source File -# Begin Source File - -SOURCE=.\drawmesh.c -# End Source File -# Begin Source File - -SOURCE=.\makemesh.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/spheremap/hacks/drawmesh.c b/lib/glut-3.7.6/progs/spheremap/hacks/drawmesh.c deleted file mode 100644 index fa56c29cf..000000000 --- a/lib/glut-3.7.6/progs/spheremap/hacks/drawmesh.c +++ /dev/null @@ -1,55 +0,0 @@ - -/* 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. */ - -/* drawmesh.c - draws mesh for constructing a sphere map */ - -#include - -#include "smapmesh.h" - -#if defined(GL_EXT_texture_object) && !defined(GL_VERSION_1_1) -#define glBindTexture(A,B) glBindTextureEXT(A,B) -#endif - -void -drawSphereMapMesh(GLuint texobj[6]) -{ - int side, i, j; - - /* five front and side faces */ - for (side=0; side<5; side++) { - /* bind to texture for given face of cube map */ - glBindTexture(GL_TEXTURE_2D, texobj[side]); - for (i=0; i -#include -#include -#include -#include - -#include "smapmesh.h" - -/* (x,y,z) reflection vector --> (s,t) sphere map coordinates */ -void -rvec2st(float v[3], float st[2]) -{ - double m; - - /* In Section 2.10.4 ("Generating texture coordinates") - of the OpenGL 1.1 specification, you will find the - GL_SPHERE_MAP equations: - - n' = normal after transformation to eye coordinates - u = unit vector from origin to vertex in eye coordinates - - (rx, ry, rz) = u - 2 * n' * transpose(n') * u - - m = 2 * sqrt(rx^2 + ry^2 + (rz + 1)^2)) - - s = rx/m + 0.5 - t = ry/m + 0.5 - - The equation for calculating (rx, ry, rz) is the - equation for calculating the reflection vector for - a surface and observer. The explanation and - derivation for this equation is found in Roger's - "Procedural Elements for Computer Graphics" 2nd ed. - in Section 5-5 ("Determining the Reflection Vector"). - Note that Roger's convention has the Z axis in - the opposite direction from the OpenGL convention. */ - - m = 2 * sqrt(v[0]*v[0] + v[1]*v[1] + (v[2]+1)*(v[2]+1)); - - st[0] = v[0]/m + 0.5; - st[1] = v[1]/m + 0.5; -} - -/* (s,t) sphere map coordinate --> reflection verctor (x,y,z) */ -void -st2rvec(float s, float t, float *xp, float *yp, float *zp) -{ - double rx, ry, rz; - double tmp1, tmp2; - - /* Using algebra to invert the sphere mapping equations - shown above in rvec2st, you get: - - rx = 2*sqrt(-4*s^2 + 4*s - 4*t^2 + 4*t - 1)*(2*s-1) - ry = 2*sqrt(-4*s^2 + 4*s - 4*t^2 + 4*t - 1)*(2*t-1) - rz = -8*s^2 + 8*s - 8*t^2 + 8*t - 3 - - The C code below eliminates common subexpressions. */ - - tmp1 = s*(1-s) + t*(1-t); - tmp2 = 2 * sqrt(4*tmp1 - 1); - - rx = tmp2 * (2*s-1); - ry = tmp2 * (2*t-1); - rz = 8 * tmp1 - 3; - - *xp = (float) rx; - *yp = (float) ry; - *zp = (float) rz; -} - -/* For best results (ie, to avoid cracks in the - sphere map construction, XSTEPS, YSTEPS, and - SPOKES should all be equal. */ - -/* Increasing the nSTEPS and RINGS constants below - will give you a better approximation to the - sphere map image warp at the cost of more polygons - to render the image warp. My bet is that no - will be able to the improved quality of a higher - level of tessellation. */ - -STXY face[5][YSTEPS][XSTEPS]; -STXY back[4][RINGS+EDGE_EXTEND][SPOKES]; - -static struct { - int xl; - int yl; - int zl; - int swap; /* swap final (s,t) */ - int flip; /* flip final s or t, ie. [0..1] --> [1..0] */ - float dir; -} faceInfo[5] = { - { 0, 1, 2, 0, 1.0, 1.0 }, /* front */ - { 0, 2, 1, 0, -1.0, 1.0 }, /* top */ - { 0, 2, 1, 0, 1.0, -1.0 }, /* bottom */ - { 1, 2, 0, 1, -1.0, 1.0 }, /* left */ - { 1, 2, 0, 1, 1.0, -1.0 }, /* right */ -}; - -static struct { - int xl; - int yl; - float dir; -} edgeInfo[4] = { - { 0, 1, -1.0 }, - { 0, 1, 1.0 }, - { 1, 0, -1.0 }, - { 1, 0, 1.0 } -}; - -void -makeSphereMapMesh(void) -{ - float st[2]; /* (s,t) coordinate */ - /* range=[0..1,0..1] */ - float v[3]; /* (x,y,z) location on cube map */ - /* range=[-1..1,-1..1,-1..1] */ - float rv[3]; /* reflection vector, ie. cube map location */ - /* normalized onto unit sphere */ - float len; /* distance from v[3] to origin */ - /* for converting to rv[3] */ - int side; /* which of 5 faces (all but back face) */ - int i, j; - int xl, yl, zl; /* renamed X, Y, Z index */ - int swap; - int flip; - int edge; /* which edge of back face */ - float sc, tc; /* singularity (s,t) on back face circle */ - - /* for the front and four side faces */ - for (side=0; side<5; side++) { - /* use faceInfo to parameterize face construction */ - xl = faceInfo[side].xl; - yl = faceInfo[side].yl; - zl = faceInfo[side].zl; - swap = faceInfo[side].swap; - flip = faceInfo[side].flip; - /* cube map "Z" coordinate */ - v[zl] = faceInfo[side].dir; - - for (i=0; i 2) { - float s, t; /* interpolated (s,t) */ - float ds, dt; /* delta s and delta t */ - float x, y, z; - - /* Start interpolating from the edge. */ - s = st[0]; - t = st[1]; - - /* Calculate delta s and delta t for interpolation. */ - ds = (sc - s) / (RINGS-1); - dt = (tc - t) / (RINGS-1); - - for (i=1; i -#include -#include - -GLfloat up[3] = { 0, 1, 0 }; -GLfloat eye[3] = { 0, 0, -20 }; -GLfloat obj[3] = { 0, 0, 0 }; - -static int W, H, w3, h3; - -int angle = 0; -int downx, downy; - -void -reshape(int w, int h) -{ - W = w; - H = h; - - w3 = W/3; - h3 = H/3; -} - -void -drawView(int drawCenterObject) -{ - /* right green small cube (+5,0,-8) */ - glPushMatrix(); - glTranslatef(5.0, 0.0, -8.0); - glRotatef(-45, 1.0, 0.0, 1.0); - glColor3f(0.0, 1.0, 0.0); - glutSolidCube(2.0); - glPopMatrix(); - /* left red cube (-5,0,-8) */ - glPushMatrix(); - glTranslatef(-5.0, 0.0, -8.0); - glRotatef(45, 1.0, 0.0, 1.0); - glColor3f(1.0, 0.0, 0.0); - glutSolidCube(6.0); - glPopMatrix(); - /* left blue cube (-7,0,0); */ - glPushMatrix(); - glTranslatef(-7.0, 0.0, 0.0); - glColor3f(0.0, 0.0, 1.0); - glutSolidCube(5.0); - glPopMatrix(); - /* right cyan big cube (+7,0,0) */ - glPushMatrix(); - glTranslatef(7.0, 0.0, 0.0); - glRotatef(30, 1.0, 1.0, 0.0); - glColor3f(0.0, 1.0, 1.0); - glutSolidCube(5.0); - glPopMatrix(); - /* distant yellow sphere (0,0,+10) */ - glPushMatrix(); - glTranslatef(0.0, 0.0, 10.0); - glColor3f(1.0, 1.0, 0.0); - glutSolidSphere(7.0, 8, 8); - glPopMatrix(); - /* top white sphere (0,+5,0) */ - glPushMatrix(); - glTranslatef(0.0, 5.0, 0.0); - glColor3f(1.0, 1.0, 1.0); - glutSolidSphere(2.0, 8, 8); - glPopMatrix(); - /* bottom magenta big sphere (0,-6,0) */ - glPushMatrix(); - glTranslatef(0.0, -6.0, 0.0); - glColor3f(1.0, 0.0, 1.0); - glutSolidSphere(4.0, 8, 8); - glPopMatrix(); - - if (drawCenterObject) { - glPushMatrix(); - glScalef(3.0, 3.0, 3.0); - glColor3f(1.0, 1.0, 1.0); - glutSolidIcosahedron(); - glPopMatrix(); - } -} - -void -setViewArea(GLint x, GLint y, GLsizei w, GLsizei h) -{ - glViewport(x, y, w, h); - glScissor(x, y, w, h); -} - -void -positionLights(void) -{ - static GLfloat light1Pos[4] = { -41.0, 41.0, -41.0, 1.0 }; - static GLfloat light2Pos[4] = { +41.0, 0.0, -41.0, 1.0 }; - static GLfloat light3Pos[4] = { -41.0, 0.0, +41.0, 1.0 }; - static GLfloat light4Pos[4] = { +41.0, 0.0, +41.0, 1.0 }; - - glLightfv(GL_LIGHT0, GL_POSITION, light1Pos); - glLightfv(GL_LIGHT1, GL_POSITION, light2Pos); - glLightfv(GL_LIGHT2, GL_POSITION, light3Pos); - glLightfv(GL_LIGHT3, GL_POSITION, light4Pos); -} - -struct { - GLfloat angle; - GLfloat x, y, z; -} faceInfo[6] = { - { 0.0, +1.0, 0.0, 0.0 }, /* front */ - { 90.0, -1.0, 0.0, 0.0 }, /* top */ - { 90.0, +1.0, 0.0, 0.0 }, /* bottom */ - { 90.0, 0.0, -1.0, 0.0 }, /* left */ - { 90.0, 0.0, +1.0, 0.0 }, /* right */ - { 180.0, -1.0, 0.0, 0.0 } /* back */ -}; - -void -configFace(int i) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glRotatef(faceInfo[i].angle, - faceInfo[i].x, faceInfo[i].y, faceInfo[i].z); - gluLookAt(obj[0], obj[1], obj[2], /* "eye" at object */ - eye[0], eye[1], eye[2], /* looking at eye */ - up[0], up[1], up[2]); - positionLights(); -} - -void -display(void) -{ - /* initial clear */ - glViewport(0, 0, W, H); - glClearColor(0.5, 0.5, 0.5, 0.5); /* clear to gray */ - glDisable(GL_SCISSOR_TEST); - glClear(GL_COLOR_BUFFER_BIT); - glEnable(GL_SCISSOR_TEST); - glClearColor(0.0, 0.0, 0.0, 0.0); - - /* eye view (bottom right) */ - setViewArea(2*w3+4, 4, w3 - 8, h3 - 8); - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(60.0, 1.0, 0.5, 40.0); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - gluLookAt(eye[0], eye[1], eye[2], /* eye at eye */ - obj[0], obj[1], obj[2], /* looking at object */ - up[0], up[1], up[2]); - - positionLights(); - drawView(1); - - /* six views from object... */ - - /* Projection has 90 degree field of view (6 make a cube). */ - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(90.0, 1.0, 0.5, 40.0); - - /* front view (center) */ - setViewArea(w3, h3, w3, h3); - configFace(0); - drawView(0); - - /* top view */ - setViewArea(w3, 2*h3, w3, h3); - configFace(1); - drawView(0); - - /* bottom view */ - setViewArea(w3, 0, w3, h3); - configFace(2); - drawView(0); - - /* left view */ - setViewArea(0, h3, w3, h3); - configFace(3); - drawView(0); - - /* right view */ - setViewArea(2*w3, h3, w3, h3); - configFace(4); - drawView(0); - - /* back view (top left) */ - setViewArea(4, 2*h3 + 4, w3 - 8, h3 - 8); - configFace(5); - drawView(0); - - glutSwapBuffers(); -} - -void -menu(int value) -{ - switch (value) { - case 1: - glEnable(GL_LIGHTING); - printf("enable\n"); - break; - case 2: - glDisable(GL_LIGHTING); - printf("disable\n"); - break; - } - glutPostRedisplay(); -} - -void -motion(int x, int y) -{ - /* Pretty weak viewing model. Eye gets located */ - /* on cylinder on the out skirts of the scene. */ - angle += (x - downx); - angle = angle % 360; - eye[0] = sin(angle * 3.14159/180.0) * -20; - eye[2] = cos(angle * 3.14159/180.0) * -20; - eye[1] = eye[1] + 0.1 * (y - downy); - if (eye[1] > +15) eye[1] = +15; - if (eye[1] < -15) eye[1] = -15; - glutPostRedisplay(); - downx = x; - downy = y; -} - -void -mouse(int button, int state, int x, int y) -{ - if (button == GLUT_LEFT_BUTTON) { - if (state == GLUT_DOWN) { - downx = x; - downy = y; - } - } -} - -void -initGraphicsState(void) -{ - GLfloat lightColor[4] = { 0.6, 0.6, 0.6, 1.0 }; /* white */ - - glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, 1); - glLightfv(GL_LIGHT0, GL_DIFFUSE, lightColor); - glLightfv(GL_LIGHT1, GL_DIFFUSE, lightColor); - glLightfv(GL_LIGHT2, GL_DIFFUSE, lightColor); - glLightfv(GL_LIGHT3, GL_DIFFUSE, lightColor); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_LIGHT1); - glEnable(GL_LIGHT2); - glEnable(GL_LIGHT3); - glEnable(GL_DEPTH_TEST); - glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE); - glEnable(GL_COLOR_MATERIAL); - glEnable(GL_NORMALIZE); -} - -int -main(int argc, char **argv) -{ - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); - glutCreateWindow("sixviews"); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - - initGraphicsState(); - - glutCreateMenu(menu); - glutAddMenuEntry("light on", 1); - glutAddMenuEntry("light off", 2); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - glutMouseFunc(mouse); - glutMotionFunc(motion); - - glutMainLoop(); - return 0; -} diff --git a/lib/glut-3.7.6/progs/spheremap/hacks/sixviews.dsp b/lib/glut-3.7.6/progs/spheremap/hacks/sixviews.dsp deleted file mode 100644 index 06cb69b75..000000000 --- a/lib/glut-3.7.6/progs/spheremap/hacks/sixviews.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="sixviews" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=sixviews - 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 "sixviews.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 "sixviews.mak" CFG="sixviews - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "sixviews - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "sixviews - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "sixviews - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "sixviews - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "sixviews - Win32 Release" -# Name "sixviews - Win32 Debug" -# Begin Source File - -SOURCE=.\sixviews.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/spheremap/hacks/smapmesh.c b/lib/glut-3.7.6/progs/spheremap/hacks/smapmesh.c deleted file mode 100644 index 377e113f6..000000000 --- a/lib/glut-3.7.6/progs/spheremap/hacks/smapmesh.c +++ /dev/null @@ -1,515 +0,0 @@ - -/* smapmesh.c - construct a cube map from sphere map via warp - mesh */ - -#include -#include -#include -#include -#include - -#if defined(GL_EXT_texture_object) && !defined(GL_VERSION_1_1) -#define glBindTexture(A,B) glBindTextureEXT(A,B) -#endif - -static int emphasize = 0; -static int clearToWhite = 0; - -/* (x,y,z) reflection vector --> (s,t) sphere map coordinates */ -void -rvec2st(float v[3], float st[2]) -{ - double m; - - /** In Section 2.10.4 ("Generating texture coordinates") of - the OpenGL 1.1 specification, you will find the - GL_SPHERE_MAP equations: - - n' = normal after transformation to eye coordinates - u = unit vector from origin to vertex in eye coordinates - - (rx, ry, rz) = u - 2 * n' * transpose(n') * u - - m = 2 * sqrt(rx^2 + ry^2 + (rz + 1)^2)) - - s = rx/m + 0.5 t = ry/m + 0.5 - - The equation for calculating (rx, ry, rz) is the equation - for calculating the reflection vector for a surface and - observer. The explanation and derivation for this - equation is found in Roger's "Procedural Elements for - Computer Graphics" 2nd ed. in Section 5-5 ("Determining - the Reflection Vector"). Note that Roger's convention has - the Z axis in the opposite direction from the OpenGL - convention. */ - - m = 2 * sqrt(v[0] * v[0] + v[1] * v[1] + (v[2] + 1) * (v[2] + 1)); - - st[0] = v[0] / m + 0.5; - st[1] = v[1] / m + 0.5; -} - -/* (s,t) sphere map coordinate --> reflection verctor (x,y,z) */ -void -st2rvec(float s, float t, float *xp, float *yp, float *zp) -{ - double rx, ry, rz; - double tmp1, tmp2; - - /** Using algebra to invert the sphere mapping equations shown - above in rvec2st, you get: - - rx = 2*sqrt(-4*s^2 + 4*s - 4*t^2 + 4*t - 1)*(2*s-1) - ry = 2*sqrt(-4*s^2 + 4*s - 4*t^2 + 4*t - 1)*(2*t-1) - rz = -8*s^2 + 8*s - 8*t^2 + 8*t - 3 - - The C code below eliminates common subexpressions. */ - - tmp1 = s * (1 - s) + t * (1 - t); - tmp2 = 2 * sqrt(4 * tmp1 - 1); - - rx = tmp2 * (2 * s - 1); - ry = tmp2 * (2 * t - 1); - rz = 8 * tmp1 - 3; - - *xp = (float) rx; - *yp = (float) ry; - *zp = (float) rz; -} - -/* For best results (ie, to avoid cracks in the sphere map - construction, XSTEPS, YSTEPS, and SPOKES should all be - equal. */ - -/* Increasing the nSTEPS and RINGS constants below will give - you a better approximation to the sphere map image warp at - the cost of more polygons to render the image warp. My bet - is that no will be able to the improved quality of a higher - level of tessellation. */ - -#define XSTEPS 8 -#define YSTEPS 8 -#define SPOKES 8 -#define RINGS 3 - -typedef struct _STXY { - GLfloat s, t; - GLfloat x, y; -} STXY; - -STXY face[5][YSTEPS][XSTEPS]; -STXY back[4][RINGS][SPOKES]; - -static struct { - int xl; - int yl; - int zl; - float dir; -} faceInfo[5] = { - { 0, 1, 2, 1.0 } , /* front */ - { 0, 2, 1, 1.0 } , /* top */ - { 0, 2, 1, -1.0 } , /* bottom */ - { 1, 2, 0, -1.0 } , /* left */ - { 1, 2, 0, 1.0 } , /* right */ -}; - -static struct { - int xl; - int yl; - float dir; -} edgeInfo[4] = { - { 0, 1, -1.0 } , - { 0, 1, 1.0 } , - { 1, 0, -1.0 } , - { 1, 0, 1.0 } -}; - -void -makeSpheremapMapping(void) -{ - float st[2]; /* (s,t) coordinate */ - /* range=[0..1,0..1] */ - - float v[3]; /* (x,y,z) location on cube map */ - /* range=[-1..1,-1..1,-1..1] */ - - float rv[3]; /* reflection vector, ie. cube map */ - /* location normalized onto unit sphere */ - - float len; /* distance from v[3] to origin */ - /* for converting to rv[3] */ - - int side; /* which of 5 faces (all but back face) */ - - int i, j; - int xl, yl, zl; /* renamed X, Y, Z index */ - - int edge; /* which edge of back face */ - - float sc, tc; - - /* for the front and four side faces */ - for (side = 0; side < 5; side++) { - - /* use faceInfo to parameterize face construction */ - xl = faceInfo[side].xl; - yl = faceInfo[side].yl; - zl = faceInfo[side].zl; - /* cube map "Z" coordinate */ - v[zl] = faceInfo[side].dir; - - for (i = 0; i < YSTEPS; i++) { - /* cube map "Y" coordinate */ - v[yl] = 2.0 / (YSTEPS - 1) * i - 1.0; - for (j = 0; j < XSTEPS; j++) { - /* cube map "X" coordinate */ - v[xl] = 2.0 / (XSTEPS - 1) * j - 1.0; - - /* normalize cube map location to construct */ - /* reflection vector */ - len = sqrt(1.0 + v[xl] * v[xl] + v[yl] * v[yl]); - rv[0] = v[0] / len; - rv[1] = v[1] / len; - rv[2] = v[2] / len; - - /* map reflection vector to sphere map (s,t) */ - /* NOTE: face[side][i][j] (x,y) gets updated */ - rvec2st(rv, &face[side][i][j].x); - - /* update texture coordinate, */ - /* normalize [-1..1,-1..1] to [0..1,0..1] */ - face[side][i][j].s = (v[xl] + 1.0) / 2.0; - face[side][i][j].t = (v[yl] + 1.0) / 2.0; - } - } - } - - /* The back face must be specially handled. The center point - in the back face of a cube map becomes a a singularity - around the circular edge of a sphere map. */ - - /* Carefully work from each edge of the back face to center - of back face mapped to the outside of the sphere map. */ - - /* cube map "Z" coordinate, always -1 since backface */ - v[2] = -1; - - /* for each edge */ - /* [x=-1, y=-1..1, z=-1] */ - /* [x= 1, y=-1..1, z=-1] */ - /* [x=-1..1, y=-1, z=-1] */ - /* [x=-1..1, y= 1, z=-1] */ - for (edge = 0; edge < 4; edge++) { - /* cube map "X" coordinate */ - v[edgeInfo[edge].xl] = edgeInfo[edge].dir; - for (j = 0; j < SPOKES; j++) { - /* cube map "Y" coordinate */ - v[edgeInfo[edge].yl] = 2.0 / (SPOKES - 1) * j - 1.0; - - /* normalize cube map location to construct */ - /* reflection vector */ - len = sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]); - rv[0] = v[0] / len; - rv[1] = v[1] / len; - rv[2] = v[2] / len; - - /* Map reflection vector to sphere map (s,t). */ - rvec2st(rv, st); - - /* determine distinance from the center of sphere */ - /* map (0.5,0.5) to (s,t) */ - len = sqrt((st[0] - 0.5) * (st[0] - 0.5) + (st[1] - 0.5) * (st[1] - 0.5)); - - /* calculate (s,t) location extended to the singularity */ - /* at the center of the back face (ie, extend to */ - /* circle edge of the sphere map) */ - sc = (st[0] - 0.5) / len * 0.5 + 0.5; - tc = (st[1] - 0.5) / len * 0.5 + 0.5; - - /* (s,t) at back face edge */ - back[edge][0][j].s = (v[0] + 1.0) / 2.0; - back[edge][0][j].t = (v[1] + 1.0) / 2.0; - back[edge][0][j].x = st[0]; - back[edge][0][j].y = st[1]; - - /* If just two rings, we just generate a back face edge - vertex and a center vertex (2 rings), but if there are - more rings, we carefully interpolate between the edge - and center vertices. Notice how st2rvec is used to - map the interpolated (s,t) into a reflection vector - that must then be extended to the back cube face (it - is not correct to just interpolate the texture - coordinates!). */ - if (RINGS > 2) { - float s, t; /* interpolated (s,t) */ - - float ds, dt; /* delta s and delta t */ - - float x, y, z; - - /* Start interpolating from the edge. */ - s = st[0]; - t = st[1]; - - /* Calculate delta s and delta t for interpolation. */ - ds = (sc - s) / (RINGS - 1); - dt = (tc - t) / (RINGS - 1); - - for (i = 1; i < RINGS - 1; i++) { - /* Incremental interpolation of (s,t). */ - s = s + ds; - t = t + dt; - - /* Calculate reflection vector from interpolated */ - /* (s,t). */ - st2rvec(s, t, &x, &y, &z); - /* Assert that z must be on the back cube face. */ - assert(z <= -sqrt(1.0 / 3.0)); - /* Extend reflection vector out of back cube face. */ - /* Note: z is negative value so negate z to avoid */ - /* inverting x and y! */ - x = x / -z; - y = y / -z; - - back[edge][i][j].s = (x + 1.0) / 2.0; - back[edge][i][j].t = (y + 1.0) / 2.0; - back[edge][i][j].x = s; - back[edge][i][j].y = t; - } - } - /* (s,t) at circle edge of the sphere map is ALWAYS */ - /* at center of back cube map face */ - back[edge][RINGS - 1][j].s = 0.5; - back[edge][RINGS - 1][j].t = 0.5; - /* location of singularity at the edge of the sphere map */ - back[edge][RINGS - 1][j].x = sc; - back[edge][RINGS - 1][j].y = tc; - } - } -} - -void -drawSphereMapping(GLuint texobj[6]) -{ - int side, i, j; - - /* five front and side faces */ - for (side = 0; side < 5; side++) { - - if (emphasize == side + 1) { - glLineWidth(3.0); - } - /* bind to texture for given face of cube map */ - glBindTexture(GL_TEXTURE_2D, texobj[side]); - for (i = 0; i < YSTEPS - 1; i++) { - glBegin(GL_QUAD_STRIP); - for (j = 0; j < XSTEPS; j++) { - glTexCoord2fv(&face[side][i][j].s); - glVertex2fv(&face[side][i][j].x); - glTexCoord2fv(&face[side][i + 1][j].s); - glVertex2fv(&face[side][i + 1][j].x); - } - glEnd(); - } - - if (emphasize == side + 1) { - glLineWidth(1.0); - } - } - - /* Back face specially rendered for its singularity! */ - - if (emphasize == 6) { - glLineWidth(3.0); - } - /* Bind to texture for back face of cube map. */ - glBindTexture(GL_TEXTURE_2D, texobj[side]); - for (side = 0; side < 4; side++) { - for (j = 0; j < RINGS - 1; j++) { - glBegin(GL_QUAD_STRIP); - for (i = 0; i < SPOKES; i++) { - glTexCoord2fv(&back[side][j][i].s); - glVertex2fv(&back[side][j][i].x); - glTexCoord2fv(&back[side][j + 1][i].s); - glVertex2fv(&back[side][j + 1][i].x); - } - glEnd(); - } - } - - if (emphasize == 6) { - glLineWidth(1.0); - } -} - -static void -textureInit(void) -{ - static int width = 8, height = 8; - static GLubyte tex1[] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 1, 1, 0, 0, 0, - 0, 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, 0, 1, 1, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0}; - - GLubyte tex[64][3]; - GLint i, j; - - /* setup first texture object */ - glBindTexture(GL_TEXTURE_2D, 1); - /* red on white */ - for (i = 0; i < height; i++) { - for (j = 0; j < width; j++) { - int p = i * width + j; - if (tex1[(height - i - 1) * width + j]) { - tex[p][0] = 255; - tex[p][1] = 0; - tex[p][2] = 0; - } else { - tex[p][0] = 255; - tex[p][1] = 255; - tex[p][2] = 255; - } - } - } - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); - gluBuild2DMipmaps(GL_TEXTURE_2D, 3, width, height, - GL_RGB, GL_UNSIGNED_BYTE, tex); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, - GL_LINEAR_MIPMAP_LINEAR); -} - -static void -display(void) -{ - /* All faces get the same texture! */ - GLuint texobjs[6] = {1, 1, 1, 1, 1, 1}; - - /* Clear to gray. */ - if (clearToWhite) { - glClearColor(1.0, 1.0, 1.0, 1.0); - glColor3f(0.0, 0.0, 0.0); - emphasize = 0; - glLineWidth(3.0); - } else { - glClearColor(0.5, 0.5, 0.5, 1.0); - glColor3f(1.0, 1.0, 1.0); - glLineWidth(1.0); - } - glClear(GL_COLOR_BUFFER_BIT); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluOrtho2D(0, 1, 0, 1); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - drawSphereMapping(texobjs); - - glutSwapBuffers(); -} - -static void -menu(int value) -{ - switch (value) { - case 1: - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - break; - case 2: - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - break; - case 3: - glEnable(GL_TEXTURE_2D); - break; - case 4: - glDisable(GL_TEXTURE_2D); - break; - case 5: - glEnable(GL_LINE_SMOOTH); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glEnable(GL_BLEND); - break; - case 6: - glDisable(GL_LINE_SMOOTH); - glDisable(GL_BLEND); - break; - case 7: - emphasize++; - emphasize %= 7; - break; - case 8: - clearToWhite = 1; - break; - case 9: - clearToWhite = 0; - break; - } - glutPostRedisplay(); -} - -void -keyboard(unsigned char c, int x, int y) -{ - switch (c) { - case 27: - exit(0); - break; - case ' ': - menu(7); - break; - case 'a': - menu(5); - break; - case 'w': - menu(2); - break; - case 'f': - menu(1); - break; - case 't': - menu(3); - break; - case 'n': - menu(4); - break; - } -} - -int -main(int argc, char **argv) -{ - makeSpheremapMapping(); - - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); - glutCreateWindow("smapmesh"); - - textureInit(); - glEnable(GL_TEXTURE_2D); - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - - glutDisplayFunc(display); - - glutKeyboardFunc(keyboard); - - glutCreateMenu(menu); - glutAddMenuEntry("fill", 1); - glutAddMenuEntry("wireframe", 2); - glutAddMenuEntry("texture", 3); - glutAddMenuEntry("no texture", 4); - glutAddMenuEntry("antialias lines", 5); - glutAddMenuEntry("aliased lines", 6); - glutAddMenuEntry("switch emphasis", 7); - glutAddMenuEntry("clear to white", 8); - glutAddMenuEntry("clear to gray", 9); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - glutMainLoop(); - - return 0; -} diff --git a/lib/glut-3.7.6/progs/spheremap/hacks/smapmesh.dsp b/lib/glut-3.7.6/progs/spheremap/hacks/smapmesh.dsp deleted file mode 100644 index 421b63ebb..000000000 --- a/lib/glut-3.7.6/progs/spheremap/hacks/smapmesh.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="smapmesh" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=smapmesh - 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 "smapmesh.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 "smapmesh.mak" CFG="smapmesh - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "smapmesh - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "smapmesh - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "smapmesh - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "smapmesh - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "smapmesh - Win32 Release" -# Name "smapmesh - Win32 Debug" -# Begin Source File - -SOURCE=.\smapmesh.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/spheremap/hacks/smapmesh.h b/lib/glut-3.7.6/progs/spheremap/hacks/smapmesh.h deleted file mode 100644 index 067433de5..000000000 --- a/lib/glut-3.7.6/progs/spheremap/hacks/smapmesh.h +++ /dev/null @@ -1,38 +0,0 @@ - -/* 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. */ - -/* smapmesh.h - header for cview2smap program */ - -#define XSTEPS 8 -#define YSTEPS 8 -#define SPOKES 8 -#define RINGS 3 - -/* #define SPHERE_MAP_EDGE_EXTEND */ - -#ifdef SPHERE_MAP_EDGE_EXTEND -#define EDGE_EXTEND 1 -#else -#define EDGE_EXTEND 0 -#endif - -typedef struct _STXY { - GLfloat s, t; - GLfloat x, y; -} STXY; - -extern STXY face[5][YSTEPS][XSTEPS]; -extern STXY back[4][RINGS+EDGE_EXTEND][SPOKES]; - -extern void makeSphereMapMesh(void); -extern void drawSphereMapMesh(GLuint texobj[6]); - -extern void buildSphereMap(GLuint spheremap, GLuint texobjs[6], int texdim, - GLfloat eye[3], GLfloat obj[3], GLfloat up[3], - void (*positionLights)(int view, void *context), - void (*drawView)(int view, void *context), - int outline, void *context); diff --git a/lib/glut-3.7.6/progs/spheremap/hacks/st2rvec.c b/lib/glut-3.7.6/progs/spheremap/hacks/st2rvec.c deleted file mode 100644 index f3320fdf4..000000000 --- a/lib/glut-3.7.6/progs/spheremap/hacks/st2rvec.c +++ /dev/null @@ -1,85 +0,0 @@ - -/* 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. */ - -/* st2rvec - converts between reflection vectors and sphere map s & t */ - -#include -#include - -void -rvec2st(float rx, float ry, float rz, float *sp, float *tp) -{ - double s, t; - double m; - - m = 2 * sqrt(rx*rx + ry*ry + (rz+1)*(rz+1)); - - s = rx/m + 0.5; - t = ry/m + 0.5; - - *sp = (float) s; - *tp = (float) t; -} - -double -dist(float x, float y, float z) -{ - return sqrt(x*x + y*y + z*z); -} - -void -st2rvec(float s, float t, float *xp, float *yp, float *zp) -{ - double rx, ry, rz; - double tmp1, tmp2; - - tmp1 = s*(1-s) + t*(1-t); - tmp2 = 2 * sqrt(4*tmp1 - 1); - - rx = tmp2 * (2*s-1); - ry = tmp2 * (2*t-1); - rz = 8 * tmp1 - 3; - - *xp = (float) rx; - *yp = (float) ry; - *zp = (float) rz; -} - -int -main(int argc, char **argv) -{ - float s, t; - float x, y, z; - int count; - - printf("\nYOU ENTER S & T SPHERE MAP TEXTURE COORDINATES...\n"); - printf("\n I CONVERT IT TO A NORMALIZED REFLECTION VECTOR"); - printf("\n (AND CONVERT BACK!)\n\n"); - - while (!feof(stdin)) { - printf("(s,t) > "); - count = scanf("%f%f", &s, &t); - if (count == EOF) { - break; - } else if (count == 2) { - printf("READ s=%f, t=%f\n\n", s, t); - - st2rvec(s, t, &x, &y, &z); - printf("CONVERTING TO REFLECTION VECTOR:\n"); - printf(" x=%f, y=%f, z=%f\n\n", x, y, z); - - printf("CONVERTING BACK TO TEXTURE COORDINATE:\n"); - rvec2st(x, y, z, &s, &t); - printf(" s=%f, t=%f\n\n", s, t); - } else { - printf("BAD INPUT!\n\n"); - break; - } - } - - return 0; -} diff --git a/lib/glut-3.7.6/progs/spheremap/hacks/st2rvec.dsp b/lib/glut-3.7.6/progs/spheremap/hacks/st2rvec.dsp deleted file mode 100644 index 957d6e39f..000000000 --- a/lib/glut-3.7.6/progs/spheremap/hacks/st2rvec.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="st2rvec" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=st2rvec - 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 "st2rvec.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 "st2rvec.mak" CFG="st2rvec - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "st2rvec - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "st2rvec - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "st2rvec - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "st2rvec - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "st2rvec - Win32 Release" -# Name "st2rvec - Win32 Debug" -# Begin Source File - -SOURCE=.\st2rvec.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/texfont.dsw b/lib/glut-3.7.6/progs/texfont.dsw deleted file mode 100644 index 5416c4994..000000000 --- a/lib/glut-3.7.6/progs/texfont.dsw +++ /dev/null @@ -1,86 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "_all"=".\texfont\_all.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name showtxf - End Project Dependency - Begin Project Dependency - Project_Dep_Name simpletxf - End Project Dependency - Begin Project Dependency - Project_Dep_Name txfdemo - End Project Dependency -}}} - -############################################################################### - -Project: "gentexfont"=".\texfont\gentexfont.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "showtxf"=".\texfont\showtxf.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "simpletxf"=".\texfont\simpletxf.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "txfdemo"=".\texfont\txfdemo.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/lib/glut-3.7.6/progs/texfont/Imakefile b/lib/glut-3.7.6/progs/texfont/Imakefile deleted file mode 100644 index 715dd2946..000000000 --- a/lib/glut-3.7.6/progs/texfont/Imakefile +++ /dev/null @@ -1,17 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1997. */ - -#include "../../Glut.cf" - -TARGETS = txfdemo simpletxf gentexfont showtxf - -SRCS = gentexfont.c showtxf.c simpletxf.c texfont.c txfdemo.c - -AllTarget($(TARGETS)) - -SimpleGlutProgramTarget(gentexfont) -NormalGlutProgramTarget(showtxf,showtxf.o texfont.o) -NormalGlutProgramTarget(simpletxf,simpletxf.o texfont.o) -NormalGlutProgramTarget(txfdemo,txfdemo.o texfont.o) - -DependTarget() diff --git a/lib/glut-3.7.6/progs/texfont/README b/lib/glut-3.7.6/progs/texfont/README deleted file mode 100644 index f889bf316..000000000 --- a/lib/glut-3.7.6/progs/texfont/README +++ /dev/null @@ -1,35 +0,0 @@ - -This directory has code for using texture mapped fonts. For more -information on this code, see: - - http://reality.sgi.com/mjk_asd/tips/TexFont/TexFont.html - -Here is a quick description of the programs: - - gentexfont - program to capture X fonts from an X server and - write out .txf files usable the TexFont API. - - showtxf - a program to show the texture encoded within .txf - files generated by gentexfont. - - txfdemo - a demonstration of texture mapped text using the TexFont - API to put text on a spinning cube, including text wrapped in a - circle. - - simpletxf - a very simple TexFont program showing how to rotate - texture mapped text around. - -The directory also contains some sample .txf files (that can be used -with the demonstration programs); - - curlfont.txf - default.txf - djb.txf - haeberli.txf - rockfont.txf - sorority.txf - -Of course, with gentexfont, you can generate your own. - -- Mark Kilgard - May 23, 1997 diff --git a/lib/glut-3.7.6/progs/texfont/TexFont.h b/lib/glut-3.7.6/progs/texfont/TexFont.h deleted file mode 100644 index 86ec9aa15..000000000 --- a/lib/glut-3.7.6/progs/texfont/TexFont.h +++ /dev/null @@ -1,93 +0,0 @@ - -/* 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. */ - -#ifndef __TEXFONT_H__ -#define __TEXFONT_H__ - -#include - -#define TXF_FORMAT_BYTE 0 -#define TXF_FORMAT_BITMAP 1 - -typedef struct { - unsigned short c; /* Potentially support 16-bit glyphs. */ - unsigned char width; - unsigned char height; - signed char xoffset; - signed char yoffset; - signed char advance; - char dummy; /* Space holder for alignment reasons. */ - short x; - short y; -} TexGlyphInfo; - -typedef struct { - GLfloat t0[2]; - GLshort v0[2]; - GLfloat t1[2]; - GLshort v1[2]; - GLfloat t2[2]; - GLshort v2[2]; - GLfloat t3[2]; - GLshort v3[2]; - GLfloat advance; -} TexGlyphVertexInfo; - -typedef struct { - GLuint texobj; - int tex_width; - int tex_height; - int max_ascent; - int max_descent; - int num_glyphs; - int min_glyph; - int range; - unsigned char *teximage; - TexGlyphInfo *tgi; - TexGlyphVertexInfo *tgvi; - TexGlyphVertexInfo **lut; -} TexFont; - -extern char *txfErrorString(void); - -extern TexFont *txfLoadFont( - char *filename); - -extern void txfUnloadFont( - TexFont * txf); - -extern GLuint txfEstablishTexture( - TexFont * txf, - GLuint texobj, - GLboolean setupMipmaps); - -extern void txfBindFontTexture( - TexFont * txf); - -extern void txfGetStringMetrics( - TexFont * txf, - char *string, - int len, - int *width, - int *max_ascent, - int *max_descent); - -extern void txfRenderGlyph( - TexFont * txf, - int c); - -extern void txfRenderString( - TexFont * txf, - char *string, - int len); - -extern void txfRenderFancyString( - TexFont * txf, - char *string, - int len); - -#endif /* __TEXFONT_H__ */ diff --git a/lib/glut-3.7.6/progs/texfont/_all.dsp b/lib/glut-3.7.6/progs/texfont/_all.dsp deleted file mode 100644 index 6a4421548..000000000 --- a/lib/glut-3.7.6/progs/texfont/_all.dsp +++ /dev/null @@ -1,63 +0,0 @@ -# Microsoft Developer Studio Project File - Name="_all" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Generic Project" 0x010a - -CFG=_all - 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 "_all.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 "_all.mak" CFG="_all - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "_all - Win32 Release" (based on "Win32 (x86) Generic Project") -!MESSAGE "_all - Win32 Debug" (based on "Win32 (x86) Generic Project") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -MTL=midl.exe - -!IF "$(CFG)" == "_all - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" - -!ELSEIF "$(CFG)" == "_all - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "_all___Win32_Debug" -# PROP BASE Intermediate_Dir "_all___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" - -!ENDIF - -# Begin Target - -# Name "_all - Win32 Release" -# Name "_all - Win32 Debug" -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/texfont/abgr.dsp b/lib/glut-3.7.6/progs/texfont/abgr.dsp deleted file mode 100644 index f2abc4ff9..000000000 --- a/lib/glut-3.7.6/progs/texfont/abgr.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="abgr" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=abgr - 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 "abgr.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 "abgr.mak" CFG="abgr - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "abgr - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "abgr - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "abgr - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "abgr - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "abgr - Win32 Release" -# Name "abgr - Win32 Debug" -# Begin Source File - -SOURCE=.\abgr.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/texfont/curlfont.txf b/lib/glut-3.7.6/progs/texfont/curlfont.txf deleted file mode 100644 index c1a12014aa0cbd6629a3e15b1c6d144de99c5944..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8980 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 diff --git a/lib/glut-3.7.6/progs/texfont/default.txf b/lib/glut-3.7.6/progs/texfont/default.txf deleted file mode 100644 index 6e22982608329953d090a43b16a7d825e7a30033..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9196 zcmeI1TZ|^hRe-CvCvIQU%6ewKJD07si6LABCUHniMt?205Rz~)#NqOQfEb4m2p0!f zliz>$=r@`tG%q{_%Of6aKH6opY)-e)+~r7oYv?4W(3;e&ipep61V^{CQrzfBxyY|6CT7 zso#I!)A=#-CFBo0^3=m8$R9xd{zsmAK;&nUf8_Be=K}I|1~7v!7&2Kn>-^Z$VSv&eG)7P7gx{2r0Ni~NgMy8D@WQTUqP1lzJ~n5Qg{FFkUxHTF@4)Nkbin{G0pd1kw5m> zmE_X{lEC=aGM@AM=aIzj0|X+4eQ$pI=@~ zcKci8U+&-ab>vU=^0$$H{NaV<-+xE`_5OaQURR&#Zl zE+hZ$&k*aMGY&wb>-SeZ}bWa?kkU(U~`Z`Q~^xGcBDwNVT zmTouaEmzwD9!eE6Z-kdtC$8OgffQp2kH*F#M&YLCrr9b6O0~l4Sh=_n;{m*K2K_pk zX03#WO~$t-HhX1^xo5zRXO*wZ5xlqnFGDld#tZj5MqOrzkym;M*J?0yg+I>p1N@^@ zv(4mUriMeM1MjcYXz23hSPhsU+>J|kp18a&p5vD3x3N&efg1R%j&Uo-{k(Z~qTlf{ z@g}o6Y{Lsb;q~ox#&2}Tb5}O-+hrIkqvZQsgb(V(`7T$uTkseIykUM#+$hym1?LBv z+hQp83rtJq?}ab-9FHZA{X@iOnO8x$vYoyy`NC54;iZiV-U!E^GJXxO;g<1ZVQ~`g zgx4~E;kxH~YH%Zr?NSwzL%@b0=}Cos~W=n-iw!v>>gftn@jlHpmh6x%kMX~uvPxld_ESC z98BK18;y&%jjtlHTN9tE(cuJ(7Ih3q=eXEUdDcW!t#t9zD{R^qj!KSz88;or@b z)X2+2hyFGt+8M^DzBNT9tGk73qdcLJNl3TCCH9$;V~N036t1u(W}9*=^*l=)kHUQ> zzX#E`{1%EKYNa8;XS&3cSuI8|ka<1t(C z@%W$ljmsG>-#4lg#~C4R>oChN$ovKhUh;;#jXQ-W^pdx&rg#Oo;fcEB3uz8XjfwMx z*7!B7DHXQkcAY$%OKX;LH?D#+*Tls*w;s$@sGFVmzT|#uhQ+ zKMCm|3l|>aF?p-!tYGQC4Y@4H!kuszThW&~7>N&7^;djk6-_wqCvmC7!ZDKNd3yN3nluxRLpxsL zV!6$O6lNSh5y}op@ zL+WyKcSip$xbJwHADw>Ezs~n1eTugCe4WgnEt{{4k&JKmNdYoGOC$*Gd2l?`9AtK{ z=bC34`YO0=`G)6sfTzBz=c9)10{=|(Lz$N7RNpj4{7YlseV=eGJEcy)h7%vG*$Kz- zMs`ZgPK1jg2jAI6LOH3LXvri}MsrCc6|HmWDWm#P?k3)Bkb0_nxS4QL2T#uOfc~Z= zqohy&jC4FRKHS}5x#iLt>CjRXf^2i-ut7{bqF8JtJ|+XR(z>ECA8kWV~HO2pK?XJw2l56JZ;ps_Yw~jwq}g8dcGweg~?@W#Tmk= zg_F9OF!~#1vs2WYMtDp-yh&U{GL;IM+l9xxX0VQrLLN5ZBrq~v&m|kO`xkw-wtgdV z*+S-ScN2YG$3ngzE=#8DxGS2%?Y;pwbb7-1KDuQmEk&qlLYvYZzMkx}&o&-@B)d-8 zRpx%Jv`0Jee@^zlO>lOcB`usvZjZLKds+C9-F>nzFMpM;aLSGQ%GVPw^@Nk(>yEpl zHMsBiAlaW{PU*4T`j$>Xer=oMRA)oT9HCY z$1EQ@2)?T4YyiTRR-DqD^7ZKRDJP7#%o$ESJmrL8yKUqsZmK_2&z$m2_8hzP9whzA z`$y^;M-Kh_;cxEJVG}A7KA=&Ua5+kPV{cV?LSdG(6`+TtM=5pUoVImb4jYwp9!wl= z;a87V<%Z`!Ikb3FI6}t@3JT{uiAy<6JmA`v4M1Tmd-n63`U7Xjzg5t8c09db^sz7Y zfwNWr%uP;LIeZJMTqU5w z>G&iR;e&?LS=>^Wt5iSnPp@AKcZHk|(e=YY$^Si9EswTkr1);qQtp$!4lBQz0y@Pn z1O1(XYdhbZaAK%b!n+8tyXfZn|e;eQ35BJi$$oN}lxu*3K&i=u4 zJtN1HGCoU1-fsx9?tEmB=0~Uz;cS^q$K$mL#{}5NUx%AGtRqVW{kX#pmc}|LOx)6k z+iZjvB*hC4@$jSyyd-RyFs@`5P>7fK-nhlDVLx`9Z8JYufuEjR;kVgSiGFfEg-o-t zXyU&1`<(y6H=<7*H7oH&lo3%hAhi}gJru3YfFl*jQgQ_H4laFzu7E>=U|N0Q!TP%5 zJaP8Ym}J6>k2+Ul`I)Pp;dhGA9FU}EuiAvE{vG~r<#4x}#R{&-eiY%-kM+o%?40MV z8VR@L5Iu0wo#mDT2llygYRN#xR&T-mHm9mt#g19m#-9B?`|=(Krg$c6DWuwSaB=4Q z+~HnMgD#De=KnHe-JZFGTRg|H82OF3IL~)?bNc*F-xv4rW@kHRWfH0*;y7R3Ja(Qwzt;l>XQ9(doOQqAJZ{lKhCJNmCSth hYD?)TdS3rG{H$vF?Tr3g@ON*$Yk_wy@c-8W{{^aohz|e& diff --git a/lib/glut-3.7.6/progs/texfont/djb.txf b/lib/glut-3.7.6/progs/texfont/djb.txf deleted file mode 100644 index b7e30122dfd106bf9008275e80208aa041dc4beb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9292 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 diff --git a/lib/glut-3.7.6/progs/texfont/gentexfont.c b/lib/glut-3.7.6/progs/texfont/gentexfont.c deleted file mode 100644 index a987abf14..000000000 --- a/lib/glut-3.7.6/progs/texfont/gentexfont.c +++ /dev/null @@ -1,560 +0,0 @@ - -/* 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. */ - -/* X compile line: cc -o gentexfont gentexfont.c -lX11 */ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "TexFont.h" - -typedef struct { - short width; - short height; - short xoffset; - short yoffset; - short advance; - unsigned char *bitmap; -} PerGlyphInfo, *PerGlyphInfoPtr; - -typedef struct { - int min_char; - int max_char; - int max_ascent; - int max_descent; - PerGlyphInfo glyph[1]; -} FontInfo, *FontInfoPtr; - -Display *dpy; -FontInfoPtr fontinfo; -int format = TXF_FORMAT_BITMAP; -int gap = 1; - -/* #define REPORT_GLYPHS */ -#ifdef REPORT_GLYPHS -#define DEBUG_GLYPH4(msg,a,b,c,d) printf(msg,a,b,c,d) -#define DEBUG_GLYPH(msg) printf(msg) -#else -#define DEBUG_GLYPH4(msg,a,b,c,d) { /* nothing */ } -#define DEBUG_GLYPH(msg) { /* nothing */ } -#endif - -#define MAX_GLYPHS_PER_GRAB 512 /* this is big enough for 2^9 glyph - character sets */ - -FontInfoPtr -SuckGlyphsFromServer(Display * dpy, Font font) -{ - Pixmap offscreen; - XFontStruct *fontinfo; - XImage *image; - GC xgc; - XGCValues values; - int numchars; - int width, height, pixwidth; - int i, j; - XCharStruct *charinfo; - XChar2b character; - unsigned char *bitmapData; - int x, y; - int spanLength; - int charWidth, charHeight, maxSpanLength; - int grabList[MAX_GLYPHS_PER_GRAB]; - int glyphsPerGrab = MAX_GLYPHS_PER_GRAB; - int numToGrab, thisglyph; - FontInfoPtr myfontinfo; - - fontinfo = XQueryFont(dpy, font); - if (!fontinfo) - return NULL; - - numchars = fontinfo->max_char_or_byte2 - fontinfo->min_char_or_byte2 + 1; - if (numchars < 1) - return NULL; - - myfontinfo = (FontInfoPtr) malloc(sizeof(FontInfo) + (numchars - 1) * sizeof(PerGlyphInfo)); - if (!myfontinfo) - return NULL; - - myfontinfo->min_char = fontinfo->min_char_or_byte2; - myfontinfo->max_char = fontinfo->max_char_or_byte2; - myfontinfo->max_ascent = fontinfo->max_bounds.ascent; - myfontinfo->max_descent = fontinfo->max_bounds.descent; - - width = fontinfo->max_bounds.rbearing - fontinfo->min_bounds.lbearing; - height = fontinfo->max_bounds.ascent + fontinfo->max_bounds.descent; - - maxSpanLength = (width + 7) / 8; - /* 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, RootWindow(dpy, DefaultScreen(dpy)), - 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; - } - for (i = 0; i < numchars; i++) { - if (fontinfo->per_char != NULL) { - charinfo = &(fontinfo->per_char[i]); - charWidth = charinfo->rbearing - charinfo->lbearing; - charHeight = charinfo->ascent + charinfo->descent; - if (charWidth == 0 || charHeight == 0) { - /* Still must move raster pos even if empty character */ - myfontinfo->glyph[i].width = 0; - myfontinfo->glyph[i].height = 0; - myfontinfo->glyph[i].xoffset = 0; - myfontinfo->glyph[i].yoffset = 0; - myfontinfo->glyph[i].advance = charinfo->width; - myfontinfo->glyph[i].bitmap = NULL; - goto PossiblyDoGrab; - } - } - grabList[numToGrab] = i; - - /* XXX is this right for large fonts? */ - character.byte2 = (i + fontinfo->min_char_or_byte2) & 255; - character.byte1 = (i + fontinfo->min_char_or_byte2) >> 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 - XDrawImage16 for the text. */ - XDrawString16(dpy, offscreen, xgc, - -charinfo->lbearing + 8 * maxSpanLength * numToGrab, - charinfo->ascent, &character, 1); - - numToGrab++; - - PossiblyDoGrab: - - if (numToGrab >= glyphsPerGrab || i == numchars - 1) { - image = XGetImage(dpy, offscreen, - 0, 0, pixwidth, height, 1, XYPixmap); - for (j = 0; j < numToGrab; j++) { - thisglyph = grabList[j]; - if (fontinfo->per_char != NULL) { - charinfo = &(fontinfo->per_char[thisglyph]); - charWidth = charinfo->rbearing - charinfo->lbearing; - charHeight = charinfo->ascent + charinfo->descent; - spanLength = (charWidth + 7) / 8; - } - bitmapData = calloc(height * spanLength, sizeof(char)); - if (!bitmapData) - goto FreeFontAndReturn; - DEBUG_GLYPH4("index %d, glyph %d (%d by %d)\n", - j, thisglyph + fontinfo->min_char_or_byte2, charWidth, charHeight); - for (y = 0; y < charHeight; y++) { - for (x = 0; x < charWidth; x++) { - /* XXX The algorithm used to suck across the font ensures that - each glyph begins on a byte boundary. In theory this would - make it convienent to copy the glyph into a byte oriented - bitmap. We actually use the XGetPixel function to extract - each pixel from the image which is not that efficient. We - could either do tighter packing in the pixmap or more - efficient extraction from the image. Oh well. */ - if (XGetPixel(image, j * maxSpanLength * 8 + x, charHeight - 1 - y)) { - DEBUG_GLYPH("x"); - bitmapData[y * spanLength + x / 8] |= (1 << (x & 7)); - } else { - DEBUG_GLYPH(" "); - } - } - DEBUG_GLYPH("\n"); - } - myfontinfo->glyph[thisglyph].width = charWidth; - myfontinfo->glyph[thisglyph].height = charHeight; - myfontinfo->glyph[thisglyph].xoffset = charinfo->lbearing; - myfontinfo->glyph[thisglyph].yoffset = -charinfo->descent; - myfontinfo->glyph[thisglyph].advance = charinfo->width; - myfontinfo->glyph[thisglyph].bitmap = bitmapData; - } - XDestroyImage(image); - numToGrab = 0; - /* do we need to clear the offscreen pixmap to get more? */ - if (i < numchars - 1) { - XSetForeground(dpy, xgc, 0); - XFillRectangle(dpy, offscreen, xgc, 0, 0, 8 * maxSpanLength * glyphsPerGrab, height); - XSetForeground(dpy, xgc, 1); - } - } - } - XFreeGC(dpy, xgc); - XFreePixmap(dpy, offscreen); - return myfontinfo; - -FreeFontAndReturn: - XDestroyImage(image); - XFreeGC(dpy, xgc); - XFreePixmap(dpy, offscreen); - for (j = i - 1; j >= 0; j--) { - if (myfontinfo->glyph[j].bitmap) - free(myfontinfo->glyph[j].bitmap); - } - free(myfontinfo); - return NULL; -} - -void -printGlyph(FontInfoPtr font, int c) -{ - PerGlyphInfoPtr glyph; - unsigned char *bitmapData; - int width, height, spanLength; - int x, y; - - if (c < font->min_char || c > font->max_char) { - printf("out of range glyph\n"); - return; - } - glyph = &font->glyph[c - font->min_char]; - bitmapData = glyph->bitmap; - if (bitmapData) { - width = glyph->width; - spanLength = (width + 7) / 8; - height = glyph->height; - - for (y = 0; y < height; y++) { - for (x = 0; x < width; x++) { - if (bitmapData[y * spanLength + x / 8] & (1 << (x & 7))) { - putchar('X'); - } else { - putchar('.'); - } - } - putchar('\n'); - } - } -} - -void -getMetric(FontInfoPtr font, int c, TexGlyphInfo * tgi) -{ - PerGlyphInfoPtr glyph; - unsigned char *bitmapData; - - tgi->c = c; - if (c < font->min_char || c > font->max_char) { - tgi->width = 0; - tgi->height = 0; - tgi->xoffset = 0; - tgi->yoffset = 0; - tgi->dummy = 0; - tgi->advance = 0; - return; - } - glyph = &font->glyph[c - font->min_char]; - bitmapData = glyph->bitmap; - if (bitmapData) { - tgi->width = glyph->width; - tgi->height = glyph->height; - tgi->xoffset = glyph->xoffset; - tgi->yoffset = glyph->yoffset; - } else { - tgi->width = 0; - tgi->height = 0; - tgi->xoffset = 0; - tgi->yoffset = 0; - } - tgi->dummy = 0; - tgi->advance = glyph->advance; -} - -int -glyphCompare(const void *a, const void *b) -{ - unsigned char *c1 = (unsigned char *) a; - unsigned char *c2 = (unsigned char *) b; - TexGlyphInfo tgi1; - TexGlyphInfo tgi2; - - getMetric(fontinfo, *c1, &tgi1); - getMetric(fontinfo, *c2, &tgi2); - return tgi2.height - tgi1.height; -} - -int -getFontel(unsigned char *bitmapData, int spanLength, int i, int j) -{ - return bitmapData[i * spanLength + j / 8] & (1 << (j & 7)) ? 255 : 0; -} - -void -placeGlyph(FontInfoPtr font, int c, unsigned char *texarea, int stride, int x, int y) -{ - PerGlyphInfoPtr glyph; - unsigned char *bitmapData; - int width, height, spanLength; - int i, j; - - if (c < font->min_char || c > font->max_char) { - printf("out of range glyph\n"); - return; - } - glyph = &font->glyph[c - font->min_char]; - bitmapData = glyph->bitmap; - if (bitmapData) { - width = glyph->width; - spanLength = (width + 7) / 8; - height = glyph->height; - - for (i = 0; i < height; i++) { - for (j = 0; j < width; j++) { - texarea[stride * (y + i) + x + j] = - getFontel(bitmapData, spanLength, i, j); - } - } - } -} - -char * -nodupstring(char *s) -{ - int len, i, p; - char *string; - - len = (int) strlen(s); - string = (char *) calloc(len + 1, 1); - p = 0; - for (i = 0; i < len; i++) { - if (!strchr(string, s[i])) { - string[p] = s[i]; - p++; - } - } - string = realloc(string, p + 1); - return string; -} - -void -main(int argc, char *argv[]) -{ - int texw, texh; - unsigned char *texarea, *texbitmap; - FILE *file; - int len, stride; - unsigned char *glist; - int width, height; - int px, py, maxheight; - TexGlyphInfo tgi; - int usageError = 0; - char *fontname, *filename; - XFontStruct *xfont; - int endianness; - int i, j; - - texw = texh = 256; - glist = " ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijmklmnopqrstuvwxyz?.;,!*:\"/+@#$%^&()"; - fontname = "-adobe-courier-bold-r-normal--46-*-100-100-m-*-iso8859-1"; - filename = "default.txf"; - - for (i = 1; i < argc; i++) { - if (!strcmp(argv[i], "-w")) { - i++; - texw = atoi(argv[i]); - } else if (!strcmp(argv[i], "-h")) { - i++; - texh = atoi(argv[i]); - } else if (!strcmp(argv[i], "-gap")) { - i++; - gap = atoi(argv[i]); - } else if (!strcmp(argv[i], "-byte")) { - format = TXF_FORMAT_BYTE; - break; - } else if (!strcmp(argv[i], "-bitmap")) { - format = TXF_FORMAT_BITMAP; - } else if (!strcmp(argv[i], "-glist")) { - i++; - glist = (unsigned char *) argv[i]; - } else if (!strcmp(argv[i], "-fn")) { - i++; - fontname = argv[i]; - } else if (!strcmp(argv[i], "-file")) { - i++; - filename = argv[i]; - } else { - usageError = 1; - } - } - - if (usageError) { - putchar('\n'); - printf("usage: texfontgen [options] txf-file\n"); - printf(" -w # textureWidth (def=%d)\n", texw); - printf(" -h # textureHeight (def=%d)\n", texh); - printf(" -gap # gap between glyphs (def=%d)\n", gap); - printf(" -bitmap use a bitmap encoding (default)\n"); - printf(" -byte use a byte encoding (less compact)\n"); - printf(" -glist ABC glyph list (def=%s)\n", glist); - printf(" -fn name X font name (def=%s)\n", fontname); - printf(" -file name output file for textured font (def=%s)\n", fontname); - putchar('\n'); - exit(1); - } - texarea = calloc(texw * texh, sizeof(unsigned char)); - glist = (unsigned char *) nodupstring((char *) glist); - - dpy = XOpenDisplay(NULL); - if (!dpy) { - printf("could not open display\n"); - exit(1); - } - /* find an OpenGL-capable RGB visual with depth buffer */ - xfont = XLoadQueryFont(dpy, fontname); - if (!xfont) { - printf("could not get load X font: %s\n", fontname); - exit(1); - } - fontinfo = SuckGlyphsFromServer(dpy, xfont->fid); - if (!fontinfo) { - printf("could not get font glyphs\n"); - exit(1); - } - len = (int) strlen((char *) glist); - qsort(glist, len, sizeof(unsigned char), glyphCompare); - - file = fopen(filename, "wb"); - if (!file) { - printf("could not open %s for writing\n", filename); - exit(1); - } - fwrite("\377txf", 1, 4, file); - endianness = 0x12345678; - /*CONSTANTCONDITION*/ - assert(sizeof(int) == 4); /* Ensure external file format size. */ - fwrite(&endianness, sizeof(int), 1, file); - fwrite(&format, sizeof(int), 1, file); - fwrite(&texw, sizeof(int), 1, file); - fwrite(&texh, sizeof(int), 1, file); - fwrite(&fontinfo->max_ascent, sizeof(int), 1, file); - fwrite(&fontinfo->max_descent, sizeof(int), 1, file); - fwrite(&len, sizeof(int), 1, file); - - px = gap; - py = gap; - maxheight = 0; - for (i = 0; i < len; i++) { - if (glist[i] != 0) { /* If not already processed... */ - - /* Try to find a character from the glist that will fit on the - remaining space on the current row. */ - - int foundWidthFit = 0; - int c; - - getMetric(fontinfo, glist[i], &tgi); - width = tgi.width; - height = tgi.height; - if (height > 0 && width > 0) { - for (j = i; j < len;) { - if (height > 0 && width > 0) { - if (px + width + gap < texw) { - foundWidthFit = 1; - if (j != i) { - i--; /* Step back so i loop increment leaves us at same character. */ - } - break; - } - } - j++; - getMetric(fontinfo, glist[j], &tgi); - width = tgi.width; - height = tgi.height; - } - - /* If a fit was found, use that character; otherwise, advance a line - in the texture. */ - if (foundWidthFit) { - if (height > maxheight) { - maxheight = height; - } - c = j; - } else { - getMetric(fontinfo, glist[i], &tgi); - width = tgi.width; - height = tgi.height; - - py += maxheight + gap; - px = gap; - maxheight = height; - if (py + height + gap >= texh) { - printf("Overflowed texture space.\n"); - exit(1); - } - c = i; - } - - /* Place the glyph in the texture image. */ - placeGlyph(fontinfo, glist[c], texarea, texw, px, py); - - /* Assign glyph's texture coordinate. */ - tgi.x = px; - tgi.y = py; - - /* Advance by glyph width, remaining in the current line. */ - px += width + gap; - } else { - /* No texture image; assign invalid bogus texture coordinates. */ - tgi.x = -1; - tgi.y = -1; - } - glist[c] = 0; /* Mark processed; don't process again. */ - /*CONSTANTCONDITION*/ - assert(sizeof(tgi) == 12); /* Ensure external file format size. */ - fwrite(&tgi, sizeof(tgi), 1, file); - } - } - - switch (format) { - case TXF_FORMAT_BYTE: - fwrite(texarea, texw * texh, 1, file); - break; - case TXF_FORMAT_BITMAP: - stride = (texw + 7) >> 3; - texbitmap = (unsigned char *) calloc(stride * texh, 1); - for (i = 0; i < texh; i++) { - for (j = 0; j < texw; j++) { - if (texarea[i * texw + j] >= 128) { - texbitmap[i * stride + (j >> 3)] |= 1 << (j & 7); - } - } - } - fwrite(texbitmap, stride * texh, 1, file); - free(texbitmap); - break; - default: - printf("Unknown texture font format.\n"); - exit(1); - } - free(texarea); - fclose(file); -} diff --git a/lib/glut-3.7.6/progs/texfont/gentexfont.dsp b/lib/glut-3.7.6/progs/texfont/gentexfont.dsp deleted file mode 100644 index a0399db74..000000000 --- a/lib/glut-3.7.6/progs/texfont/gentexfont.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="gentexfont" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=gentexfont - 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 "gentexfont.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 "gentexfont.mak" CFG="gentexfont - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "gentexfont - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "gentexfont - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "gentexfont - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "gentexfont - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "gentexfont - Win32 Release" -# Name "gentexfont - Win32 Debug" -# Begin Source File - -SOURCE=.\gentexfont.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/texfont/haeberli.txf b/lib/glut-3.7.6/progs/texfont/haeberli.txf deleted file mode 100644 index d641665fd898ede344b14abdce9f16ba99a20204..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8980 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 diff --git a/lib/glut-3.7.6/progs/texfont/rockfont.txf b/lib/glut-3.7.6/progs/texfont/rockfont.txf deleted file mode 100644 index bcfcef9f1ebc37a8481710c93bad79aa4b212102..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8416 zcmds+&&wo78OLjOWabha@hYSjmDNc6xr-W*^csU6G(=FmhzA9|2ogvRiwfPrKft3G zkNzPY_K>4D&mD3QJoOSJE!*kx^L?J`>FRlV`aNv~D|u&X>Qm2;dg`ek-5cL}^qWsV z_}QZn!p{EJR|r4k?=F9z3im(z+Tq_{31QEFuf6{L!$&_4;fvH?fAy8aM?VhX_tbxI z|CPg7hVTycSMPuK5Fe`lPr_UG9v+^2BZQZz|MXksVfW zs3v_-I%25ylYWfO3pFL)OOkfA)f(L?bZSD6mA>?LwY7;yZ06kB;W96I8FPan49ItC zM@Ht2(>9tz@Pa?JAKg40HA^mxgN&YHd>=;SRQNWxW0~`l={0^z?UlKIL>_m`ob$Vo z&5maCOHr0zD&BvGZT!M#`K`_xm+>QV^c~}Furb0J?@n<`yjOb{_d}#X@+jLUUc>sx zgtl?7boaOr4VxE*eouI4Z{v}nCO*WIO_KAmqP>ZynKJ{4H|RFKH5}8fpUxSV`wX<0 zIiv1mRBCrfsy3FRQo=g%**fQ|_EdnM^@kzjjfSs8$hhP!i;-vK;(gBJNsd!+GxhAs zd3^Xk^Dgzwco&a3mm(H|O{qCCi0`$In1(dczO*S7ubCeL-%%A;cvZ706DMJa%3ff> z)lr=MfFI=;Hq%V@r5O@u9VluOFO&W>5Sd34DWJJWe&!Y^rB5+&)b;$J3}x#RA&!xF z>iM1VqV=HZFj@sWl!5>!-y!Rif?{No*Cu`BYD?S7QNn0<6m%Q z)Xt+c0BNi7b+qpEq}bHA?nawZ4d}0;Sn0d3>Wm<--(B#*=o_jad zTwkj-iq1x9Qmn6asjq>Lsa;!%m*@0l$8Na8%rYY?%5E>*WfPD4`k0R7lzxV!$mHX` znT}-fq+rSeGIZZ^K1fFTr)>8;Qj&1ml^OTE)Si3R-`i%FdlJt_hS}cHXb?X zC%f|xh@f>>{Loy%{f_ATY20PJxxv{vGhW*gV}(;(o`#I$fXJECzgloRN_`e24=-nq zZ?^L+cmemkYvI~?e0t43^13%GXvo6FmYnAf3(CZ`L)$`2_I3Qa0XvYoRG*#@}E$#1wFc&q&FSkP`;xA8fC zuHSjB8E}4%zw=!z)qb6imAI}MCO^+#k{^r@6Sw@Z`A?ktGfYcP-?|~xo)3w4h1#{G z_1(})G^qt~QoA*-HRSzR&N&Z_JrXsEbMotHb(ZI>%=L2y`Mb%de%gN5xHbss*G{#nldaqr^DdnJ?K-Gxu3c5#!R+7{oo3ocqd<{u4d z(wNQKhFrV-`7IRO-$L14>Q2La)Te1&WFNdU$%cvK?g8(nR|-mgcyBRoZJQJyd0urh z&Ih9K95-0PBzYFR)|N`*Xnvmc4iRtTpVPD?uA4eu#J%%A{(Z@rBpl{R&AC>?LjOnz zc#UJvpj3nxe5hE>?8$nDW!G5a80SnhUW=EL{|XJGFHSGcWy6~2Ip-o{I-Fl^OhZ|k{OfdN#ugFL&~9c;=7@6^GUuYptLmNZDh~NxH{GZ z6o)(6U*n1hQ`n#RIO{hxZOJPjY0CQgcI{5#X{k6xg}*;;nEC*D=~cgby;5`V&R zg;xqs(dbPM=Z4+0WI5@#*MS_E1WJ5&$q6~`McyQxdhVwCORm?TOgq6T#E%-Sm84$} zmrOf@t9qO~U2>h(aNLP~NuFGC}g@&dSKNr(4pW)_OJ!Q6cF+LzD=jdY(?Puv^f57Ib{c9irqc4Ke+9ZIa^1>Z zKHu -#include -#include -#include - -#include "TexFont.h" - -unsigned char *raster; -int imgwidth, imgheight; -int max_ascent, max_descent; -int len; -int ax = 0, ay = 0; -int doubleBuffer = 1, verbose = 0; -char *filename = "default.txf"; -TexFont *txf; - -/* If resize is called, enable drawing into the full screen area - (glViewport). Then setup the modelview and projection matrices to map 2D - x,y coodinates directly onto pixels in the window (lower left origin). - Then set the raster position (where the image would be drawn) to be offset - from the upper left corner, and then offset by the current offset (using a - null glBitmap). */ -void -reshape(int w, int h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluOrtho2D(0, w, 0, h); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(0, h - imgheight, 0); - glRasterPos2i(0, 0); - glBitmap(0, 0, 0, 0, ax, -ay, NULL); -} - -void -display(void) -{ - /* Clear the color buffer. */ - glClear(GL_COLOR_BUFFER_BIT); - - /* Re-blit the image. */ - glDrawPixels(imgwidth, imgheight, - GL_LUMINANCE, GL_UNSIGNED_BYTE, - txf->teximage); - - /* Swap the buffers if necessary. */ - if (doubleBuffer) { - glutSwapBuffers(); - } -} - -static int moving = 0, ox, oy; - -void -mouse(int button, int state, int x, int y) -{ - if (button == GLUT_LEFT_BUTTON) { - if (state == GLUT_DOWN) { - - /* Left mouse button press. Update last seen mouse position. And set - "moving" true since button is pressed. */ - ox = x; - oy = y; - moving = 1; - - } else { - - /* Left mouse button released; unset "moving" since button no longer - pressed. */ - moving = 0; - - } - } -} - -void -motion(int x, int y) -{ - /* If there is mouse motion with the left button held down... */ - if (moving) { - - /* Figure out the offset from the last mouse position seen. */ - ax += (x - ox); - ay += (y - oy); - - /* Offset the raster position based on the just calculated mouse position - delta. Use a null glBitmap call to offset the raster position in - window coordinates. */ - glBitmap(0, 0, 0, 0, x - ox, oy - y, NULL); - - /* Request a window redraw. */ - glutPostRedisplay(); - - /* Update last seen mouse position. */ - ox = x; - oy = y; - } -} - -int -main(int argc, char **argv) -{ - int i; - - glutInit(&argc, argv); - for (i = 1; i < argc; i++) { - if (!strcmp(argv[i], "-sb")) { - doubleBuffer = 0; - } else if (!strcmp(argv[i], "-v")) { - verbose = 1; - } else { - filename = argv[i]; - } - } - if (filename == NULL) { - fprintf(stderr, "usage: showtxf [GLUT-options] [-sb] [-v] txf-file\n"); - exit(1); - } - - txf = txfLoadFont(filename); - if (txf == NULL) { - fprintf(stderr, "Problem loading %s\n", filename); - exit(1); - } - - imgwidth = txf->tex_width; - imgheight = txf->tex_height; - - if (doubleBuffer) { - glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); - } else { - glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); - } - glutInitWindowSize(imgwidth, imgheight); - glutCreateWindow(filename); - glutReshapeFunc(reshape); - glutDisplayFunc(display); - glutMouseFunc(mouse); - glutMotionFunc(motion); - /* Use a gray background so teximage with black backgrounds will show - against showtxf's background. */ - glClearColor(0.2, 0.2, 0.2, 1.0); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/texfont/showtxf.dsp b/lib/glut-3.7.6/progs/texfont/showtxf.dsp deleted file mode 100644 index 3cca7a1b6..000000000 --- a/lib/glut-3.7.6/progs/texfont/showtxf.dsp +++ /dev/null @@ -1,92 +0,0 @@ -# Microsoft Developer Studio Project File - Name="showtxf" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=showtxf - 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 "showtxf.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 "showtxf.mak" CFG="showtxf - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "showtxf - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "showtxf - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "showtxf - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "showtxf - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "showtxf - Win32 Release" -# Name "showtxf - Win32 Debug" -# Begin Source File - -SOURCE=.\showtxf.c -# End Source File -# Begin Source File - -SOURCE=.\texfont.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/texfont/simpletxf.c b/lib/glut-3.7.6/progs/texfont/simpletxf.c deleted file mode 100644 index 2860903b3..000000000 --- a/lib/glut-3.7.6/progs/texfont/simpletxf.c +++ /dev/null @@ -1,183 +0,0 @@ - -/* 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. */ - -/* X compile line: cc -o simpletxf simpletxf.c texfont.c -lglut -lGLU -lGL -lXmu -lXext -lX11 -lm */ - -#include -#include -#include -#include - -#include "TexFont.h" - -int doubleBuffer = 1; -char *filename = "default.txf"; -TexFont *txf; -GLfloat angle = 20; - -void -idle(void) -{ - angle += 4; - glutPostRedisplay(); -} - -void -visible(int vis) -{ - if (vis == GLUT_VISIBLE) - glutIdleFunc(idle); - else - glutIdleFunc(NULL); -} - -void -display(void) -{ - char *str; - - /* Clear the color buffer. */ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glPushMatrix(); - - glRotatef(angle, 0, 0, 1); - glTranslatef(-2.0, 0.0, 0.0); - glScalef(1 / 60.0, 1 / 60.0, 1 / 60.0); - - glPushMatrix(); - glColor3f(0.0, 0.0, 1.0); - str = "OpenGL is"; - txfRenderString(txf, str, (int) strlen(str)); - glPopMatrix(); - - glPushMatrix(); - glColor3f(1.0, 0.0, 0.0); - glTranslatef(0.0, -60.0, 0.0); - str = "the best."; - txfRenderString(txf, str, (int) strlen(str)); - glPopMatrix(); - - glPopMatrix(); - - /* Swap the buffers if necessary. */ - if (doubleBuffer) { - glutSwapBuffers(); - } -} - -int minifyMenu; - -void -minifySelect(int value) -{ - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, value); - glutPostRedisplay(); -} - -int alphaMenu; - -void -alphaSelect(int value) -{ - switch (value) { - case GL_ALPHA_TEST: - glDisable(GL_BLEND); - glEnable(GL_ALPHA_TEST); - glAlphaFunc(GL_GEQUAL, 0.5); - break; - case GL_BLEND: - glDisable(GL_ALPHA_TEST); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - break; - case GL_NONE: - glDisable(GL_ALPHA_TEST); - glDisable(GL_BLEND); - break; - } -} - -void -mainSelect(int value) -{ - if (value == 666) { - exit(0); - } -} - -int -main(int argc, char **argv) -{ - int i; - - glutInit(&argc, argv); - for (i = 1; i < argc; i++) { - if (!strcmp(argv[i], "-sb")) { - doubleBuffer = 0; - } else { - filename = argv[i]; - } - } - if (filename == NULL) { - fprintf(stderr, "usage: show [GLUT-options] [-sb] txf-file\n"); - exit(1); - } - txf = txfLoadFont(filename); - if (txf == NULL) { - fprintf(stderr, "Problem loading %s\n", filename); - exit(1); - } - - if (doubleBuffer) { - glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); - } else { - glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE | GLUT_DEPTH); - } - glutInitWindowSize(300, 300); - glutCreateWindow("texfont"); - glutDisplayFunc(display); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(60.0, 1.0, 0.1, 20.0); - glMatrixMode(GL_MODELVIEW); - gluLookAt(0.0, 0.0, 5.0, - 0.0, 0.0, 0.0, - 0.0, 1.0, 0.0); - - glEnable(GL_TEXTURE_2D); - glEnable(GL_DEPTH_TEST); - alphaSelect(GL_ALPHA_TEST); - minifySelect(GL_NEAREST); - - txfEstablishTexture(txf, 0, GL_TRUE); - - glutVisibilityFunc(visible); - - minifyMenu = glutCreateMenu(minifySelect); - glutAddMenuEntry("Nearest", GL_NEAREST); - glutAddMenuEntry("Linear", GL_LINEAR); - glutAddMenuEntry("Nearest mipmap nearest", GL_NEAREST_MIPMAP_NEAREST); - glutAddMenuEntry("Linear mipmap nearest", GL_LINEAR_MIPMAP_NEAREST); - glutAddMenuEntry("Nearest mipmap linear", GL_NEAREST_MIPMAP_LINEAR); - glutAddMenuEntry("Linear mipmap linear", GL_LINEAR_MIPMAP_LINEAR); - - alphaMenu = glutCreateMenu(alphaSelect); - glutAddMenuEntry("Alpha testing", GL_ALPHA_TEST); - glutAddMenuEntry("Alpha blending", GL_BLEND); - glutAddMenuEntry("Nothing", GL_NONE); - - glutCreateMenu(mainSelect); - glutAddSubMenu("Filtering", minifyMenu); - glutAddSubMenu("Alpha", alphaMenu); - glutAddMenuEntry("Quit", 666); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/texfont/simpletxf.dsp b/lib/glut-3.7.6/progs/texfont/simpletxf.dsp deleted file mode 100644 index 642378530..000000000 --- a/lib/glut-3.7.6/progs/texfont/simpletxf.dsp +++ /dev/null @@ -1,92 +0,0 @@ -# Microsoft Developer Studio Project File - Name="simpletxf" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=simpletxf - 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 "simpletxf.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 "simpletxf.mak" CFG="simpletxf - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "simpletxf - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "simpletxf - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "simpletxf - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "simpletxf - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "simpletxf - Win32 Release" -# Name "simpletxf - Win32 Debug" -# Begin Source File - -SOURCE=.\simpletxf.c -# End Source File -# Begin Source File - -SOURCE=.\texfont.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/texfont/sorority.txf b/lib/glut-3.7.6/progs/texfont/sorority.txf deleted file mode 100644 index 96d7d189054e338ac42b237e377f5281ef492612..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9316 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 diff --git a/lib/glut-3.7.6/progs/texfont/texfont.c b/lib/glut-3.7.6/progs/texfont/texfont.c deleted file mode 100644 index 8e36b45ee..000000000 --- a/lib/glut-3.7.6/progs/texfont/texfont.c +++ /dev/null @@ -1,645 +0,0 @@ - -/* 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. */ - -#if defined(_WIN32) -#pragma warning (disable:4244) /* disable bogus conversion warnings */ -#endif - -#include -#include -#include -#include -#include -#ifdef _WIN32 -#include -#endif -#include -#include "TexFont.h" - -#if 0 -/* Uncomment to debug various scenarios. */ -#undef GL_VERSION_1_1 -#undef GL_EXT_texture_object -#undef GL_EXT_texture -#endif - -#ifndef GL_VERSION_1_1 - -# if defined(GL_EXT_texture_object) -# define glGenTextures glGenTexturesEXT -# define glBindTexture glBindTextureEXT -# else - /* Without OpenGL 1.1 or the texture object extension, use display lists. */ -# define USE_DISPLAY_LISTS -# endif - -# if defined(GL_EXT_texture) -# define GL_INTENSITY4 GL_INTENSITY4_EXT - int useLuminanceAlpha = 0; -# else - /* Intensity texture format not in OpenGL 1.0; added by the EXT_texture - extension and now part of OpenGL 1.1. */ - int useLuminanceAlpha = 1; -# endif - -#else - /* OpenGL 1.1 case. */ - int useLuminanceAlpha = 0; -#endif - -/* byte swap a 32-bit value */ -#define SWAPL(x, n) { \ - n = ((char *) (x))[0];\ - ((char *) (x))[0] = ((char *) (x))[3];\ - ((char *) (x))[3] = n;\ - n = ((char *) (x))[1];\ - ((char *) (x))[1] = ((char *) (x))[2];\ - ((char *) (x))[2] = n; } - -/* byte swap a short */ -#define SWAPS(x, n) { \ - n = ((char *) (x))[0];\ - ((char *) (x))[0] = ((char *) (x))[1];\ - ((char *) (x))[1] = n; } - -static TexGlyphVertexInfo * -getTCVI(TexFont * txf, int c) -{ - TexGlyphVertexInfo *tgvi; - - /* Automatically substitute uppercase letters with lowercase if not - uppercase available (and vice versa). */ - if ((c >= txf->min_glyph) && (c < txf->min_glyph + txf->range)) { - tgvi = txf->lut[c - txf->min_glyph]; - if (tgvi) { - return tgvi; - } - if (islower(c)) { - c = toupper(c); - if ((c >= txf->min_glyph) && (c < txf->min_glyph + txf->range)) { - return txf->lut[c - txf->min_glyph]; - } - } - if (isupper(c)) { - c = tolower(c); - if ((c >= txf->min_glyph) && (c < txf->min_glyph + txf->range)) { - return txf->lut[c - txf->min_glyph]; - } - } - } - fprintf(stderr, "texfont: tried to access unavailable font character \"%c\" (%d)\n", - isprint(c) ? c : ' ', c); - abort(); - /* NOTREACHED */ - return NULL; -} - -static char *lastError; - -char * -txfErrorString(void) -{ - return lastError; -} - -TexFont * -txfLoadFont(char *filename) -{ - TexFont *txf; - FILE *file; - GLfloat w, h, xstep, ystep; - char fileid[4], tmp; - unsigned char *texbitmap; - int min_glyph, max_glyph; - int endianness, swap, format, stride, width, height; - int i, j; - unsigned long got; - - txf = NULL; - file = fopen(filename, "rb"); - if (file == NULL) { - lastError = "file open failed."; - goto error; - } - txf = (TexFont *) malloc(sizeof(TexFont)); - if (txf == NULL) { - lastError = "out of memory."; - goto error; - } - /* For easy cleanup in error case. */ - txf->tgi = NULL; - txf->tgvi = NULL; - txf->lut = NULL; - txf->teximage = NULL; - - got = fread(fileid, 1, 4, file); - if (got != 4 || strncmp(fileid, "\377txf", 4)) { - lastError = "not a texture font file."; - goto error; - } - /*CONSTANTCONDITION*/ - assert(sizeof(int) == 4); /* Ensure external file format size. */ - got = fread(&endianness, sizeof(int), 1, file); - if (got == 1 && endianness == 0x12345678) { - swap = 0; - } else if (got == 1 && endianness == 0x78563412) { - swap = 1; - } else { - lastError = "not a texture font file."; - goto error; - } -#define EXPECT(n) if (got != (unsigned long) n) { lastError = "premature end of file."; goto error; } - got = fread(&format, sizeof(int), 1, file); - EXPECT(1); - got = fread(&txf->tex_width, sizeof(int), 1, file); - EXPECT(1); - got = fread(&txf->tex_height, sizeof(int), 1, file); - EXPECT(1); - got = fread(&txf->max_ascent, sizeof(int), 1, file); - EXPECT(1); - got = fread(&txf->max_descent, sizeof(int), 1, file); - EXPECT(1); - got = fread(&txf->num_glyphs, sizeof(int), 1, file); - EXPECT(1); - - if (swap) { - SWAPL(&format, tmp); - SWAPL(&txf->tex_width, tmp); - SWAPL(&txf->tex_height, tmp); - SWAPL(&txf->max_ascent, tmp); - SWAPL(&txf->max_descent, tmp); - SWAPL(&txf->num_glyphs, tmp); - } - txf->tgi = (TexGlyphInfo *) malloc(txf->num_glyphs * sizeof(TexGlyphInfo)); - if (txf->tgi == NULL) { - lastError = "out of memory."; - goto error; - } - /*CONSTANTCONDITION*/ - assert(sizeof(TexGlyphInfo) == 12); /* Ensure external file format size. */ - got = fread(txf->tgi, sizeof(TexGlyphInfo), txf->num_glyphs, file); - EXPECT(txf->num_glyphs); - - if (swap) { - for (i = 0; i < txf->num_glyphs; i++) { - SWAPS(&txf->tgi[i].c, tmp); - SWAPS(&txf->tgi[i].x, tmp); - SWAPS(&txf->tgi[i].y, tmp); - } - } - txf->tgvi = (TexGlyphVertexInfo *) - malloc(txf->num_glyphs * sizeof(TexGlyphVertexInfo)); - if (txf->tgvi == NULL) { - lastError = "out of memory."; - goto error; - } - w = txf->tex_width; - h = txf->tex_height; - xstep = 0.5 / w; - ystep = 0.5 / h; - for (i = 0; i < txf->num_glyphs; i++) { - TexGlyphInfo *tgi; - - tgi = &txf->tgi[i]; - txf->tgvi[i].t0[0] = tgi->x / w + xstep; - txf->tgvi[i].t0[1] = tgi->y / h + ystep; - txf->tgvi[i].v0[0] = tgi->xoffset; - txf->tgvi[i].v0[1] = tgi->yoffset; - txf->tgvi[i].t1[0] = (tgi->x + tgi->width) / w + xstep; - txf->tgvi[i].t1[1] = tgi->y / h + ystep; - txf->tgvi[i].v1[0] = tgi->xoffset + tgi->width; - txf->tgvi[i].v1[1] = tgi->yoffset; - txf->tgvi[i].t2[0] = (tgi->x + tgi->width) / w + xstep; - txf->tgvi[i].t2[1] = (tgi->y + tgi->height) / h + ystep; - txf->tgvi[i].v2[0] = tgi->xoffset + tgi->width; - txf->tgvi[i].v2[1] = tgi->yoffset + tgi->height; - txf->tgvi[i].t3[0] = tgi->x / w + xstep; - txf->tgvi[i].t3[1] = (tgi->y + tgi->height) / h + ystep; - txf->tgvi[i].v3[0] = tgi->xoffset; - txf->tgvi[i].v3[1] = tgi->yoffset + tgi->height; - txf->tgvi[i].advance = tgi->advance; - } - - min_glyph = txf->tgi[0].c; - max_glyph = txf->tgi[0].c; - for (i = 1; i < txf->num_glyphs; i++) { - if (txf->tgi[i].c < min_glyph) { - min_glyph = txf->tgi[i].c; - } - if (txf->tgi[i].c > max_glyph) { - max_glyph = txf->tgi[i].c; - } - } - txf->min_glyph = min_glyph; - txf->range = max_glyph - min_glyph + 1; - - txf->lut = (TexGlyphVertexInfo **) - calloc(txf->range, sizeof(TexGlyphVertexInfo *)); - if (txf->lut == NULL) { - lastError = "out of memory."; - goto error; - } - for (i = 0; i < txf->num_glyphs; i++) { - txf->lut[txf->tgi[i].c - txf->min_glyph] = &txf->tgvi[i]; - } - - switch (format) { - case TXF_FORMAT_BYTE: - if (useLuminanceAlpha) { - unsigned char *orig; - - orig = (unsigned char *) malloc(txf->tex_width * txf->tex_height); - if (orig == NULL) { - lastError = "out of memory."; - goto error; - } - got = fread(orig, 1, txf->tex_width * txf->tex_height, file); - EXPECT(txf->tex_width * txf->tex_height); - txf->teximage = (unsigned char *) - malloc(2 * txf->tex_width * txf->tex_height); - if (txf->teximage == NULL) { - lastError = "out of memory."; - goto error; - } - for (i = 0; i < txf->tex_width * txf->tex_height; i++) { - txf->teximage[i * 2] = orig[i]; - txf->teximage[i * 2 + 1] = orig[i]; - } - free(orig); - } else { - txf->teximage = (unsigned char *) - malloc(txf->tex_width * txf->tex_height); - if (txf->teximage == NULL) { - lastError = "out of memory."; - goto error; - } - got = fread(txf->teximage, 1, txf->tex_width * txf->tex_height, file); - EXPECT(txf->tex_width * txf->tex_height); - } - break; - case TXF_FORMAT_BITMAP: - width = txf->tex_width; - height = txf->tex_height; - stride = (width + 7) >> 3; - texbitmap = (unsigned char *) malloc(stride * height); - if (texbitmap == NULL) { - lastError = "out of memory."; - goto error; - } - got = fread(texbitmap, 1, stride * height, file); - EXPECT(stride * height); - if (useLuminanceAlpha) { - txf->teximage = (unsigned char *) calloc(width * height * 2, 1); - if (txf->teximage == NULL) { - lastError = "out of memory."; - goto error; - } - for (i = 0; i < height; i++) { - for (j = 0; j < width; j++) { - if (texbitmap[i * stride + (j >> 3)] & (1 << (j & 7))) { - txf->teximage[(i * width + j) * 2] = 255; - txf->teximage[(i * width + j) * 2 + 1] = 255; - } - } - } - } else { - txf->teximage = (unsigned char *) calloc(width * height, 1); - if (txf->teximage == NULL) { - lastError = "out of memory."; - goto error; - } - for (i = 0; i < height; i++) { - for (j = 0; j < width; j++) { - if (texbitmap[i * stride + (j >> 3)] & (1 << (j & 7))) { - txf->teximage[i * width + j] = 255; - } - } - } - } - free(texbitmap); - break; - } - - fclose(file); - return txf; - -error: - - if (txf) { - if (txf->tgi) - free(txf->tgi); - if (txf->tgvi) - free(txf->tgvi); - if (txf->lut) - free(txf->lut); - if (txf->teximage) - free(txf->teximage); - free(txf); - } - if (file) - fclose(file); - return NULL; -} - -GLuint -txfEstablishTexture( - TexFont * txf, - GLuint texobj, - GLboolean setupMipmaps) -{ - if (txf->texobj == 0) { - if (texobj == 0) { -#if !defined(USE_DISPLAY_LISTS) - glGenTextures(1, &txf->texobj); -#else - txf->texobj = glGenLists(1); -#endif - } else { - txf->texobj = texobj; - } - } -#if !defined(USE_DISPLAY_LISTS) - glBindTexture(GL_TEXTURE_2D, txf->texobj); -#else - glNewList(txf->texobj, GL_COMPILE); -#endif - -#if 1 - /* XXX Indigo2 IMPACT in IRIX 5.3 and 6.2 does not support the GL_INTENSITY - internal texture format. Sigh. Win32 non-GLX users should disable this - code. */ - if (useLuminanceAlpha == 0) { - char *vendor, *renderer, *version; - - renderer = (char *) glGetString(GL_RENDERER); - vendor = (char *) glGetString(GL_VENDOR); - if (!strcmp(vendor, "SGI") && !strncmp(renderer, "IMPACT", 6)) { - version = (char *) glGetString(GL_VERSION); - if (!strcmp(version, "1.0 Irix 6.2") || - !strcmp(version, "1.0 Irix 5.3")) { - unsigned char *latex; - int width = txf->tex_width; - int height = txf->tex_height; - int i; - - useLuminanceAlpha = 1; - latex = (unsigned char *) calloc(width * height * 2, 1); - /* XXX unprotected alloc. */ - for (i = 0; i < height * width; i++) { - latex[i * 2] = txf->teximage[i]; - latex[i * 2 + 1] = txf->teximage[i]; - } - free(txf->teximage); - txf->teximage = latex; - } - } - } -#endif - - if (useLuminanceAlpha) { - if (setupMipmaps) { - gluBuild2DMipmaps(GL_TEXTURE_2D, GL_LUMINANCE_ALPHA, - txf->tex_width, txf->tex_height, - GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, txf->teximage); - } else { - glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE_ALPHA, - txf->tex_width, txf->tex_height, 0, - GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, txf->teximage); - } - } else { -#if defined(GL_VERSION_1_1) || defined(GL_EXT_texture) - /* Use GL_INTENSITY4 as internal texture format since we want to use as - little texture memory as possible. */ - if (setupMipmaps) { - gluBuild2DMipmaps(GL_TEXTURE_2D, GL_INTENSITY4, - txf->tex_width, txf->tex_height, - GL_LUMINANCE, GL_UNSIGNED_BYTE, txf->teximage); - } else { - glTexImage2D(GL_TEXTURE_2D, 0, GL_INTENSITY4, - txf->tex_width, txf->tex_height, 0, - GL_LUMINANCE, GL_UNSIGNED_BYTE, txf->teximage); - } -#else - abort(); /* Should not get here without EXT_texture or OpenGL - 1.1. */ -#endif - } - -#if defined(USE_DISPLAY_LISTS) - glEndList(); - glCallList(txf->texobj); -#endif - return txf->texobj; -} - -void -txfBindFontTexture( - TexFont * txf) -{ -#if !defined(USE_DISPLAY_LISTS) - glBindTexture(GL_TEXTURE_2D, txf->texobj); -#else - glCallList(txf->texobj); -#endif -} - -void -txfUnloadFont( - TexFont * txf) -{ - if (txf->teximage) { - free(txf->teximage); - } - free(txf->tgi); - free(txf->tgvi); - free(txf->lut); - free(txf); -} - -void -txfGetStringMetrics( - TexFont * txf, - char *string, - int len, - int *width, - int *max_ascent, - int *max_descent) -{ - TexGlyphVertexInfo *tgvi; - int w, i; - - w = 0; - for (i = 0; i < len; i++) { - if (string[i] == 27) { - switch (string[i + 1]) { - case 'M': - i += 4; - break; - case 'T': - i += 7; - break; - case 'L': - i += 7; - break; - case 'F': - i += 13; - break; - } - } else { - tgvi = getTCVI(txf, string[i]); - w += tgvi->advance; - } - } - *width = w; - *max_ascent = txf->max_ascent; - *max_descent = txf->max_descent; -} - -void -txfRenderGlyph(TexFont * txf, int c) -{ - TexGlyphVertexInfo *tgvi; - - tgvi = getTCVI(txf, c); - glBegin(GL_QUADS); - glTexCoord2fv(tgvi->t0); - glVertex2sv(tgvi->v0); - glTexCoord2fv(tgvi->t1); - glVertex2sv(tgvi->v1); - glTexCoord2fv(tgvi->t2); - glVertex2sv(tgvi->v2); - glTexCoord2fv(tgvi->t3); - glVertex2sv(tgvi->v3); - glEnd(); - glTranslatef(tgvi->advance, 0.0, 0.0); -} - -void -txfRenderString( - TexFont * txf, - char *string, - int len) -{ - int i; - - for (i = 0; i < len; i++) { - txfRenderGlyph(txf, string[i]); - } -} - -enum { - MONO, TOP_BOTTOM, LEFT_RIGHT, FOUR -}; - -void -txfRenderFancyString( - TexFont * txf, - char *string, - int len) -{ - TexGlyphVertexInfo *tgvi; - GLubyte c[4][3]; - int mode = MONO; - int i; - - for (i = 0; i < len; i++) { - if (string[i] == 27) { - switch (string[i + 1]) { - case 'M': - mode = MONO; - glColor3ubv((GLubyte *) & string[i + 2]); - i += 4; - break; - case 'T': - mode = TOP_BOTTOM; - memcpy(c, &string[i + 2], 6); - i += 7; - break; - case 'L': - mode = LEFT_RIGHT; - memcpy(c, &string[i + 2], 6); - i += 7; - break; - case 'F': - mode = FOUR; - memcpy(c, &string[i + 2], 12); - i += 13; - break; - } - } else { - switch (mode) { - case MONO: - txfRenderGlyph(txf, string[i]); - break; - case TOP_BOTTOM: - tgvi = getTCVI(txf, string[i]); - glBegin(GL_QUADS); - glColor3ubv(c[0]); - glTexCoord2fv(tgvi->t0); - glVertex2sv(tgvi->v0); - glTexCoord2fv(tgvi->t1); - glVertex2sv(tgvi->v1); - glColor3ubv(c[1]); - glTexCoord2fv(tgvi->t2); - glVertex2sv(tgvi->v2); - glTexCoord2fv(tgvi->t3); - glVertex2sv(tgvi->v3); - glEnd(); - glTranslatef(tgvi->advance, 0.0, 0.0); - break; - case LEFT_RIGHT: - tgvi = getTCVI(txf, string[i]); - glBegin(GL_QUADS); - glColor3ubv(c[0]); - glTexCoord2fv(tgvi->t0); - glVertex2sv(tgvi->v0); - glColor3ubv(c[1]); - glTexCoord2fv(tgvi->t1); - glVertex2sv(tgvi->v1); - glColor3ubv(c[1]); - glTexCoord2fv(tgvi->t2); - glVertex2sv(tgvi->v2); - glColor3ubv(c[0]); - glTexCoord2fv(tgvi->t3); - glVertex2sv(tgvi->v3); - glEnd(); - glTranslatef(tgvi->advance, 0.0, 0.0); - break; - case FOUR: - tgvi = getTCVI(txf, string[i]); - glBegin(GL_QUADS); - glColor3ubv(c[0]); - glTexCoord2fv(tgvi->t0); - glVertex2sv(tgvi->v0); - glColor3ubv(c[1]); - glTexCoord2fv(tgvi->t1); - glVertex2sv(tgvi->v1); - glColor3ubv(c[2]); - glTexCoord2fv(tgvi->t2); - glVertex2sv(tgvi->v2); - glColor3ubv(c[3]); - glTexCoord2fv(tgvi->t3); - glVertex2sv(tgvi->v3); - glEnd(); - glTranslatef(tgvi->advance, 0.0, 0.0); - break; - } - } - } -} - -int -txfInFont(TexFont * txf, int c) -{ - /* NOTE: No uppercase/lowercase substituion. */ - if ((c >= txf->min_glyph) && (c < txf->min_glyph + txf->range)) { - if (txf->lut[c - txf->min_glyph]) { - return 1; - } - } - return 0; -} diff --git a/lib/glut-3.7.6/progs/texfont/txfdemo.c b/lib/glut-3.7.6/progs/texfont/txfdemo.c deleted file mode 100644 index 20cff4c2e..000000000 --- a/lib/glut-3.7.6/progs/texfont/txfdemo.c +++ /dev/null @@ -1,436 +0,0 @@ - -/* 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. */ - -/* X compile line: cc -o txfdemo txfdemo.c -lglut -lGLU -lGL -lXmu -lXext -lX11 -lm */ - -#include -#include -#include -#include -#include - -#include "TexFont.h" - -/* Uncomment to debug various scenarios. */ -#if 0 -#undef GL_VERSION_1_1 -#undef GL_EXT_polygon_offset -#endif - -#ifndef GL_VERSION_1_1 -#ifdef GL_EXT_polygon_offset -#define GL_POLYGON_OFFSET_FILL GL_POLYGON_OFFSET_EXT -#define glPolygonOffset(s,b) glPolygonOffsetEXT(s,b*0.001); -#else -/* Gag. No polygon offset? Artifacts will exist. */ -#define glPolygonOffset(s,b) /* nothing */ -#endif -#endif - -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -static int doubleBuffer = 1; -static char *filename = "rockfont.txf"; -static GLfloat angle = 20; -static TexFont *txf; -static int usePolygonOffset = 1; -static int animation = 1; -static int fullscreen = 0; - -void -idle(void) -{ - angle += 4; - glutPostRedisplay(); -} - -void -visible(int vis) -{ - if (vis == GLUT_VISIBLE) { - if (animation) { - glutIdleFunc(idle); - } - } else { - glutIdleFunc(NULL); - } -} - -void reshape(int w, int h) -{ - glViewport(0, 0, (GLsizei) w, (GLsizei) h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0); - glMatrixMode(GL_MODELVIEW); -} - -void -cubeSide(void) -{ - glDisable(GL_TEXTURE_2D); - glDisable(GL_BLEND); - glDisable(GL_ALPHA_TEST); - glColor3f(0.3, 0.7, 0.3); - glRectf(-1.0, -1.0, 1.0, 1.0); -} - -int alphaMode; - -void -alphaModeSet(void) -{ - switch (alphaMode) { - case GL_ALPHA_TEST: - glDisable(GL_BLEND); - glEnable(GL_ALPHA_TEST); - glAlphaFunc(GL_GEQUAL, 0.5); - break; - case GL_BLEND: - glDisable(GL_ALPHA_TEST); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - break; - case GL_ALPHA_TEST + GL_BLEND: - glEnable(GL_ALPHA_TEST); - glAlphaFunc(GL_GEQUAL, 0.0625); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - break; - case GL_NONE: - glDisable(GL_ALPHA_TEST); - glDisable(GL_BLEND); - break; - } -} - -void -cubeSideWithOpenGLcircle(void) -{ - int w, ow, a, d; - char *text; - int len; - int i; - GLfloat flen; - - cubeSide(); - - glPushMatrix(); - alphaModeSet(); - glEnable(GL_TEXTURE_2D); - if (usePolygonOffset) { -#if defined(GL_EXT_polygon_offset) || defined(GL_VERSION_1_1) - glEnable(GL_POLYGON_OFFSET_FILL); - glPolygonOffset(0.0, -3); -#endif - } - glColor3f(0.2, 0.2, 0.9); - - txfGetStringMetrics(txf, "OpenGL", 6, &w, &a, &d); - text = "OpenGL OpenGL "; - len = (int) strlen(text); - txfGetStringMetrics(txf, text, len, &w, &a, &d); - txfGetStringMetrics(txf, "O", 1, &ow, &a, &d); - - glScalef(5.6/w, 5.6/w, 5.6/w); - flen = len; - glTranslatef(-ow/2.0, -w/(M_PI*2.0), 0.0); - - for (i=0; i -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=txfdemo - 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 "txfdemo.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 "txfdemo.mak" CFG="txfdemo - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "txfdemo - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "txfdemo - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "txfdemo - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "txfdemo - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "txfdemo - Win32 Release" -# Name "txfdemo - Win32 Debug" -# Begin Source File - -SOURCE=.\texfont.c -# End Source File -# Begin Source File - -SOURCE=.\txfdemo.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/progs/tiff/Imakefile b/lib/glut-3.7.6/progs/tiff/Imakefile deleted file mode 100644 index 86ac54ec6..000000000 --- a/lib/glut-3.7.6/progs/tiff/Imakefile +++ /dev/null @@ -1,26 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1997. */ - -#include "../../Glut.cf" - -TARGETS = showtiff textiff writetiff depthdof scalebias tiffsift - -SRCS = showtiff.c textiff.c writetiff.c depthdof.c scalebias.c tiffsift.c - -AllTarget($(TARGETS)) - -TIFF_LIB = -ltiff -TIFF_DEPLIB = -# -# You may actually need the following definition of TIFF_LIB for -# more recent TIFF library releases: -#TIFF_LIB = -ltiff -ljpeg -lz - -NormalProgramTarget(showtiff,showtiff.o,$(TIFF_DEPLIB) $(GLUT_DEPLIBS),$(TIFF_LIB) $(GLUT_LIBS),NullParameter) -NormalProgramTarget(textiff,textiff.o,$(TIFF_DEPLIB) $(GLUT_DEPLIBS),$(TIFF_LIB) $(GLUT_LIBS),NullParameter) -NormalProgramTarget(tiffsift,tiffsift.o,$(TIFF_DEPLIB) $(GLUT_DEPLIBS),$(TIFF_LIB) $(GLUT_LIBS),NullParameter) -NormalProgramTarget(writetiff,writetiff.o,$(TIFF_DEPLIB) $(GLUT_DEPLIBS),$(TIFF_LIB) $(GLUT_LIBS),NullParameter) -NormalProgramTarget(depthdof,depthdof.o,$(TIFF_DEPLIB) $(GLUT_DEPLIBS),$(TIFF_LIB) $(GLUT_LIBS),NullParameter) -NormalProgramTarget(scalebias,scalebias.o,$(TIFF_DEPLIB) $(GLUT_DEPLIBS),$(TIFF_LIB) $(GLUT_LIBS),NullParameter) - -DependTarget() diff --git a/lib/glut-3.7.6/progs/tiff/README b/lib/glut-3.7.6/progs/tiff/README deleted file mode 100644 index 191f6769b..000000000 --- a/lib/glut-3.7.6/progs/tiff/README +++ /dev/null @@ -1,49 +0,0 @@ - -Building these GLUT programs requires Sam Leffler's free TIFF library -(libtiff). You can find out about libtiff from: - - http://www.sgi.com/Fun/tiff/tiff-v3.4beta018/html/index.html - -The libtiff source code distribution can be downloaded from: - - ftp://ftp.sgi.com/graphics/tiff/ - -You can get a copy of the TIFF 6.0 specification (PostScript or -Acrobat) from: - - ftp://ftp.sgi.com/graphics/tiff/TIFF6.ps.Z - ftp://ftp.adobe.com/pub/adobe/DeveloperSupport/TechNotes/PDFfiles/TIFF6.pdf - -NOTE: SGI developers with the ImageVision development option installed -already have libtiff available if they have ifl_eoe.sw.c++ and -ifl_dev.sw.c++ installed. - -Here's a brief description of the programs in this directory: - - showtiff.c - A simple TIFF viewer that uses glDrawPixels. Use the - pop-up menu to select between several different image processing - operations (some of these assume you have OpenGL imaging - extensions). - - writetiff.c - An example writing out an OpenGL rendered image as a - TIFF file. Several compression schemes can be selected. Use the - pop-up menu to write the file. You can view the resulting - gears.tif with the showtiff program. - - textiff.c - A TIFF viewer that renders the TIFF image via texturing - so that the image can be rotated. Use the left and right arrow - keys to rotate the image. - - depthdof.c - A sophisticated OpenGL image processing-based technique - developed by Jon Brandt (SGI) that simulates a depth-of-field - effect using a depth-varying convolve. When you click on a point - in the scene, the focus point is set to that depth. Objects at - the same depth should appear clear; object further or nearer - should be blurred. This program requires the OpenGL convolution - extension. - -An example TIFF file "face.tif" (a picture of me) is included as an -example TIFF file to play with. - -- Mark Kilgard - April 14, 1997 diff --git a/lib/glut-3.7.6/progs/tiff/depthdof.c b/lib/glut-3.7.6/progs/tiff/depthdof.c deleted file mode 100644 index edab721c6..000000000 --- a/lib/glut-3.7.6/progs/tiff/depthdof.c +++ /dev/null @@ -1,561 +0,0 @@ - -/** - - depthdof.c: depth-of-field simulator using stencilled convolutions - Jon Brandt, 1/97 - converted to GLUT and libtiff by Mark Kilgard, 4/97 - - Compile with: - - cc -o depthdof depthdof.c -ltiff -lglut -lGLU -lGL -lXmu -lXext -lX11 -lm - - **/ - -#include - -#include - -#include -#include -#include -#include -#include -#include - -#define FALSE 0 -#define TRUE 1 - -const char *DefaultImage = "face.tif"; -int winWidth = 512, winHeight = 512; -char *pixels = NULL; -int stencilMax; -int kSize = 5; -int kRadius = 5 / 2; -float sharpness = -1.5; -float kernel[] = -{.05, .1, .7, .1, .05}; -int passes = 5; -int contour = 0; -char focus = 160; -float spread = 1; -int focusPending = FALSE; -int splitScreen = FALSE; -int smoothDepth = FALSE; -int frame = 0; -int running = TRUE; -int cursor_x, cursor_y; -int multisample, hasConvolve = 0; - -TIFFRGBAImage img; -uint32 *raster; -uint32 *texture; -size_t npixels; -int tw, th; -int angle; - -int hasABGR = 0; - -void drawFrame(int frame); -void initScene(int argc, char *argv[]); -void drawScene(int frame); -void drawObject(float numRep); -void changePassCount(int delta); -void setBlurMap(void); -void setKernel(void); -void resize(int w, int h); -void toggle(int *param, char *msg); - -void -redraw(void) -{ - drawFrame(frame); -} - -void -idle(void) -{ - frame++; - glutPostRedisplay(); -} - -void -visible(int vis) -{ - if (vis == GLUT_VISIBLE) - glutIdleFunc(idle); - else - glutIdleFunc(NULL); -} - -/* ARGSUSED1 */ -void -keyboard(unsigned char c, int x, int y) -{ - switch (c) { - case 27: - exit(0); - break; - case 'g': - running = !running; - if (running) { - glutIdleFunc(idle); - } else { - glutIdleFunc(NULL); - } - break; - case 'c': - toggle(&contour, NULL); - glutPostRedisplay(); - break; - case 's': - toggle(&splitScreen, NULL); - glutPostRedisplay(); - break; - case 'd': - toggle(&smoothDepth, "depth smoothing"); - glutPostRedisplay(); - break; - case ' ': - frame++; - glutPostRedisplay(); - break; - case '-': - frame--; - glutPostRedisplay(); - break; - case 'p': - changePassCount(1); - glutPostRedisplay(); - break; - case 'P': - changePassCount(-1); - glutPostRedisplay(); - break; - case 'a': - spread *= 1 / 1.2; - setBlurMap(); - glutPostRedisplay(); - break; - case 'A': - spread *= 1.2; - setBlurMap(); - glutPostRedisplay(); - break; - case 'k': - sharpness *= 1 / 1.2; - printf("sharpness == %g\n", sharpness); - setKernel(); - glutPostRedisplay(); - break; - case 'K': - sharpness *= 1.2; - printf("sharpness == %g\n", sharpness); - setKernel(); - glutPostRedisplay(); - break; - } -} - -void -mouse(int b, int state, int x, int y) -{ - if (b == GLUT_LEFT_BUTTON && state == GLUT_DOWN) { - cursor_x = x; - cursor_y = winHeight - y; - focusPending = TRUE; - glutPostRedisplay(); - } -} - -void -main(int argc, char *argv[]) -{ - int c; - - glutInit(&argc, argv); - - while ((c = getopt(argc, argv, "p:")) != -1) { - switch (c) { - case 'p': - passes = atoi(optarg); - break; - } - } - - glutInitDisplayString("samples depth stencil~8 double"); - glutCreateWindow("Depth of Field via Depth-varying Convolve"); - initScene(argc - optind + 1, argv + optind - 1); - changePassCount(0); - printf("Key commands:\n"); - printf(" c: show/hide outer blur limit\n"); - printf(" g: toggle free running animation\n"); - printf(" s: toggle split-screen\n"); - printf(" d: toggle depth smoothing\n"); - printf(" : step one frame forward\n"); - printf(" -: step one frame backward\n"); - printf(" p(P): increment(decrement) number of passes\n"); - printf(" a(A): narrow(widen) lens aperture\n"); - printf(" k(K): increase(decrease) kernel bluriness\n"); - printf(" : exit\n"); - printf("Mouse clicking changes focus depth.\n"); - - glutVisibilityFunc(visible); - glutKeyboardFunc(keyboard); - glutMouseFunc(mouse); - glutDisplayFunc(redraw); - glutReshapeFunc(resize); - - multisample = glutGet(GLUT_WINDOW_NUM_SAMPLES) > 0; - if (glutExtensionSupported("GL_EXT_convolution")) { - hasConvolve = 1; - } else { - while (glGetError() != GL_NO_ERROR); /* Clear any OpenGL errors. */ - - /* The following glDisable would be a no-op whether done on a freshly - initialized OpenGL context whether convolution is supported or not. - The only difference should be an OpenGL error should be reported if - the GL_CONVOLUTION_2D_EXT is not understood (ie, convolution is not - supported at all). */ - glDisable(GL_CONVOLUTION_2D_EXT); - - if (glGetError() == GL_NO_ERROR) { - /* RealityEngine only partially implements the convolve extension and - hence does not advertise the extension in its extension string (See - MACHINE DEPENDENCIES section of the glConvolutionFilter2DEXT man - page). We limit this program to use only the convolve functionality - supported by RealityEngine so we test if OpenGL lets us enable - convolution without an error (the indication that convolution is - partially supported). */ - hasConvolve = 1; - } - /* Clear any further OpenGL errors (hopefully there should have only been - one or zero though). */ - while (glGetError() != GL_NO_ERROR); - } - - if (!hasConvolve) { - printf("\nTHIS PROGRAM IS NOT VERY INTERESTING WITHOUT THE OPENGL CONVOLVUTION EXTENSION\n\n"); - } - - glutMainLoop(); -} - -void -initScene(int argc, char *argv[]) -{ - TIFF *tif; - char emsg[1024]; - int bits; - const char *fname = argc > 1 ? argv[1] : DefaultImage; - - glViewport(0, 0, winWidth, winHeight); - - glEnable(GL_TEXTURE_2D); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - - tif = TIFFOpen(fname, "r"); - if (tif == NULL) { - fprintf(stderr, "Problem showing %s\n", fname); - exit(1); - } - if (TIFFRGBAImageBegin(&img, tif, 0, emsg)) { - npixels = img.width * img.height; - raster = (uint32 *) _TIFFmalloc((long) (npixels * sizeof(uint32))); - if (raster != NULL) { - if (TIFFRGBAImageGet(&img, raster, img.width, img.height) == 0) { - TIFFError(fname, emsg); - exit(1); - } - } - TIFFRGBAImageEnd(&img); - } else { - TIFFError(fname, emsg); - exit(1); - } - -#ifdef GL_EXT_abgr - if (glutExtensionSupported("GL_EXT_abgr")) - hasABGR = 1; -#else - hasABGR = 0; -#endif - - /* If cannot directly display ABGR format, we need to reverse the component - ordering in each pixel. :-( */ - if (!hasABGR) { - int i; - - for (i = 0; i < npixels; i++) { - register unsigned char *cp = (unsigned char *) &raster[i]; - int t; - - t = cp[3]; - cp[3] = cp[0]; - cp[0] = t; - t = cp[2]; - cp[2] = cp[1]; - cp[1] = t; - } - } - /* OpenGL's default unpack (and pack) alignment is 4. In the case of the - data returned by libtiff which is already aligned on 32-bit boundaries, - setting the pack to 1 isn't strictly necessary. */ - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - - tw = 1 << (int) ceil(log((float) img.width) / log(2.0)); - th = 1 << (int) ceil(log((float) img.height) / log(2.0)); - if (tw > 512) - tw = 512; - if (th > 512) - th = 512; - texture = (uint32 *) malloc(sizeof(GLubyte) * 4 * tw * th); - -#ifdef GL_EXT_abgr -#define APPROPRIATE_FORMAT (hasABGR ? GL_ABGR_EXT : GL_RGBA) -#else -#define APPROPRIATE_FORMAT GL_RGBA -#endif - - gluScaleImage(APPROPRIATE_FORMAT, - (int) img.width, (int) img.height, GL_UNSIGNED_BYTE, raster, - tw, th, GL_UNSIGNED_BYTE, texture); - _TIFFfree(raster); - - if (gluBuild2DMipmaps(GL_TEXTURE_2D, 4, tw, th, - APPROPRIATE_FORMAT, GL_UNSIGNED_BYTE, texture)) { - fprintf(stderr, "couldn't build mip map"); - exit(1); - } - glGetIntegerv(GL_STENCIL_BITS, &bits); - stencilMax = (1 << bits) - 1; - printf("stencil max = %d\n", stencilMax); - - setBlurMap(); - setKernel(); - - glDrawBuffer(GL_BACK); - glReadBuffer(GL_BACK); - glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); - - glLineStipple(4, 0xaaaa); - glEnable(GL_LINE_STIPPLE); - pixels = realloc(pixels, (winWidth + 4) * (winHeight + 4)); -} - -void -drawFrame(int frame) -{ - int pass; - int activeWidth = splitScreen ? winWidth / 2 : winWidth; - - glEnable(GL_DEPTH_TEST); - glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glFrustum(-1, 1, -1, 1, 1.5, 20); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - -#ifdef GL_MULTISAMPLE_SGIS - if (multisample) - glEnable(GL_MULTISAMPLE_SGIS); -#endif - drawScene(frame); -#ifdef GL_MULTISAMPLE_SGIS - if (multisample) - glDisable(GL_MULTISAMPLE_SGIS); -#endif - - if (passes > 0) { - glDisable(GL_TEXTURE_2D); - glDisable(GL_DEPTH_TEST); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho(0, winWidth, 0, winHeight, -1, 1); - glReadPixels(0, 0, activeWidth, winHeight, GL_DEPTH_COMPONENT, - GL_UNSIGNED_BYTE, pixels); - - if (focusPending) { - glReadPixels(cursor_x, cursor_y, 1, 1, GL_DEPTH_COMPONENT, - GL_UNSIGNED_BYTE, &focus); - printf("focussing on depth == %d\n", focus); - setBlurMap(); - focusPending = FALSE; - } - if (smoothDepth && hasConvolve) { -#ifdef GL_EXT_convolution - /* convolve the depth map into alpha and read it back */ - glEnable(GL_SEPARABLE_2D_EXT); - glRasterPos2f(kRadius, kRadius); - glColorMask(0, 0, 0, 1); - glDrawPixels(activeWidth, winHeight, GL_ALPHA, - GL_UNSIGNED_BYTE, pixels); - glColorMask(1, 1, 1, 1); - glDisable(GL_SEPARABLE_2D_EXT); - glReadPixels(0, 0, activeWidth, winHeight, GL_ALPHA, - GL_UNSIGNED_BYTE, pixels); -#endif - } - glRasterPos2f(0, 0); - glPixelTransferi(GL_MAP_STENCIL, GL_TRUE); - glDrawPixels(activeWidth, winHeight, GL_STENCIL_INDEX, - GL_UNSIGNED_BYTE, pixels); - - glPixelTransferi(GL_MAP_STENCIL, GL_FALSE); - glEnable(GL_STENCIL_TEST); - -#ifdef GL_EXT_convolution - if (hasConvolve) { - glEnable(GL_SEPARABLE_2D_EXT); - for (pass = 0; pass < passes; pass++) { - glStencilFunc(GL_LEQUAL, (pass + 1), 255); - glRasterPos2f(kRadius, kRadius); - glCopyPixels(0, 0, activeWidth, winHeight, GL_COLOR); - } - glDisable(GL_SEPARABLE_2D_EXT); - } -#endif - - if (contour) { - /* mark edge of in-focus region with green contour */ - glStencilFunc(GL_EQUAL, pass, 255); - glColor3f(0, 1, 0); - glBegin(GL_TRIANGLE_STRIP); - glVertex2f(0, 0); - glVertex2f(0, winHeight); - glVertex2f(winWidth, 0); - glVertex2f(winWidth, winHeight); - glEnd(); - } - glDisable(GL_STENCIL_TEST); - - if (splitScreen) { - /* yellow divider line */ - glColor3f(1, 1, 0); - glBegin(GL_LINE_STRIP); - glVertex2f(activeWidth, 0); - glVertex2f(activeWidth, winHeight); - glEnd(); - } - } - glutSwapBuffers(); -} - -void -drawScene(int frame) -{ - glPushMatrix(); - glTranslatef(0, 0, -18); - glDisable(GL_TEXTURE_2D); - glBegin(GL_TRIANGLE_STRIP); - glColor3ub(40, 0, 140); - glVertex2f(-15, -15); - glVertex2f(15, -15); - glColor3ub(52, 202, 226); - glVertex2f(-15, 15); - glVertex2f(15, 15); - glEnd(); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(0, -1, 0); - glScalef(20, 20, 20); - glRotatef(90, 1, 0, 0); - drawObject(20); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(0, 0, -5 + 3 * sinf(frame * M_PI / 180)); - glRotatef(frame * 3, 0, 1, 0); - drawObject(1); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(cosf(frame * M_PI / 120), 0, -6 + 4 * sinf(frame * M_PI / 210)); - glRotatef(frame * 3, 1, 0, cosf(frame * M_PI / 360)); - drawObject(1); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(0, 0, -5 + 3 * sinf(frame * M_PI / 300)); - drawObject(1); - glPopMatrix(); -} - -void -drawObject(float n) -{ - glEnable(GL_TEXTURE_2D); - glColor3f(1, 1, 1); - glBegin(GL_TRIANGLE_STRIP); - glTexCoord2f(0, 0); - glVertex2f(-.5, -.5); - glTexCoord2f(n, 0); - glVertex2f(.5, -.5); - glTexCoord2f(0, n); - glVertex2f(-.5, .5); - glTexCoord2f(n, n); - glVertex2f(.5, .5); - glEnd(); -} - -void -setBlurMap(void) -{ - int i; - unsigned short blur[256]; - - for (i = 0; i < 256; i++) { - float del = (i - focus) / 255.; - del *= del * spread * stencilMax; - blur[i] = del < stencilMax ? del : stencilMax; - } - glPixelMapusv(GL_PIXEL_MAP_S_TO_S, 256, blur); -} - -void -setKernel(void) -{ -#ifdef GL_EXT_convolution - float s1 = expf(sharpness), s2 = expf(2 * sharpness); - kernel[0] = kernel[4] = s2; - kernel[1] = kernel[3] = s1; - kernel[2] = 1 - 2 * (s1 + s2); - glSeparableFilter2DEXT(GL_SEPARABLE_2D_EXT, GL_LUMINANCE, - kSize, kSize, GL_RED, - GL_FLOAT, kernel, kernel); -#endif -} - -void -toggle(int *param, char *msg) -{ - *param = !*param; - if (msg) - printf("%s == %d\n", msg, *param); - drawFrame(frame); -} - -void -changePassCount(int delta) -{ - passes += delta; - if (passes < 0) - passes = 0; - printf("number of passes == %d\n", passes); -} - -void -resize(int w, int h) -{ - winWidth = w; - winHeight = h; - pixels = realloc(pixels, (winWidth + 4) * (winHeight + 4)); - glViewport(0, 0, winWidth, winHeight); -} diff --git a/lib/glut-3.7.6/progs/tiff/face.tif b/lib/glut-3.7.6/progs/tiff/face.tif deleted file mode 100644 index 193c058e51c10c364a18c04acf70f5e504f08835..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21032 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 diff --git a/lib/glut-3.7.6/progs/tiff/scalebias.c b/lib/glut-3.7.6/progs/tiff/scalebias.c deleted file mode 100644 index 2bf7a539e..000000000 --- a/lib/glut-3.7.6/progs/tiff/scalebias.c +++ /dev/null @@ -1,482 +0,0 @@ - -/* 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. */ - -/* X compile line: cc -o scalebias scalebias.c -ltiff -lglut -lGLU -lGL -lXmu -lXext -lX11 -lm */ - -/* This program requires Sam Leffler's libtiff library and GLUT. */ - -/* scalebias demonstrates how an "in place" scale & bias of pixels in the - frame buffer can often be accomplished faster with OpenGL blending - extensions instead of using the naive glCopyPixels with glPixelTransfer - used to do the scale and bias. - - The blending approach requires the "blend subtract" EXT extension in - order to perform negative biases. You could use this approach without - the "blend subtract" extension if you never need to do negative - biases. - - NOTE: This blending approach does not allow negative scales. The - blending approach also fails if the partial scaling or biasing results - leave the 0.0 to 1.0 range (example, scale=5.47, bias=-1.2). - - This technique can be valuable when you want to perform post-texture - filtering scaling and biasing (say for volume rendering or image processing), - but your hardware lacks texture lookup tables. - - To give you an idea of the speed advantage of this "in place" blending - technique for doing scales and biases, on an SGI O2, this program - runs 8 to 40 times faster with a greater than 1.0 scaling factor when - using the blending mode instead of using glCopyPixels. The performance - improvement depends on the number of pixels scaled or biased. */ - -#include -#include -#include -#include -#include /* Sam Leffler's libtiff library. */ - -TIFFRGBAImage img; -uint32 *raster, *texture; -tsize_t npixels; -int imgwidth, imgheight; -int tw, th; - -int hasABGR = 0, hasBlendSubtract = 0; -int doubleBuffer = 1; -char *filename = NULL; -int ax = 10, ay = -10; -int luminance = 0; -int useBlend = 1; -int timing = 0; -int height; - -GLfloat scale = 1.0, bias = 0.0, zoom = 1.0; - -void -reshape(int w, int h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluOrtho2D(0, w, 0, h); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - height = h; -} - -void -drawImage(void) -{ - glPushMatrix(); - glTranslatef(ax, -ay + imgheight * zoom, 0); - glScalef(zoom * imgwidth, zoom * imgheight, 1); - glBegin(GL_QUADS); - glTexCoord2i(0, 0); - glVertex2i(0, 0); - glTexCoord2i(1, 0); - glVertex2i(1, 0); - glTexCoord2i(1, -1); - glVertex2i(1, -1); - glTexCoord2i(0, -1); - glVertex2i(0, -1); - glEnd(); - glPopMatrix(); -} - -void -display(void) -{ - int start, end; - - /* Clear the color buffer. */ - glClear(GL_COLOR_BUFFER_BIT); - - glColor3f(1.0, 1.0, 1.0); /* Modulate texture with white. */ - glEnable(GL_TEXTURE_2D); - drawImage(); - - if (timing) { - /* Avoid timing the clear and original draw image speed. */ - glFinish(); - start = glutGet(GLUT_ELAPSED_TIME); - } - - /* Scale and bias via . */ - if (bias != 0.0 || scale != 1.0) { - glDisable(GL_TEXTURE_2D); - - /* Other things you might want to make sure are disabled. */ - /* glDisable(GL_LIGHTING); */ - /* glDisable(GL_DEPTH_TEST); */ - - if (useBlend && hasBlendSubtract) { - - /* NOTE: The blending approach does not allow negative - scales. The blending approach also fails if the - partial scaling or biasing results leave the 0.0 to - 1.0 range (example, scale=5.47, bias=-1.2). */ - - glEnable(GL_BLEND); - if (scale > 1.0) { - float remainingScale; - - remainingScale = scale; -#ifdef GL_EXT_blend_subtract - glBlendEquationEXT(GL_FUNC_ADD_EXT); -#endif - glBlendFunc(GL_DST_COLOR, GL_ONE); - if (remainingScale > 2.0) { - /* Clever cascading approach. Example: if the - scaling factor was 9.5, do 3 "doubling" blends - (8x), then scale by the remaining 1.1875. */ - glColor4f(1, 1, 1, 1); - while (remainingScale > 2.0) { - drawImage(); - remainingScale /= 2.0; - } - } - glColor4f(remainingScale - 1, - remainingScale - 1, remainingScale - 1, 1); - drawImage(); - glBlendFunc(GL_ONE, GL_ONE); - if (bias != 0) { - if (bias > 0) { - glColor4f(bias, bias, bias, 0.0); - } else { -#ifdef GL_EXT_blend_subtract - glBlendEquationEXT(GL_FUNC_REVERSE_SUBTRACT_EXT); -#endif - glColor4f(-bias, -bias, -bias, 0.0); - } - drawImage(); - } - } else { - if (bias > 0) { -#ifdef GL_EXT_blend_subtract - glBlendEquationEXT(GL_FUNC_ADD_EXT); -#endif - glColor4f(bias, bias, bias, scale); - } else { -#ifdef GL_EXT_blend_subtract - glBlendEquationEXT(GL_FUNC_REVERSE_SUBTRACT_EXT); -#endif - glColor4f(-bias, -bias, -bias, scale); - } - glBlendFunc(GL_ONE, GL_SRC_ALPHA); - drawImage(); - } - glDisable(GL_BLEND); - } else { - glPixelTransferf(GL_RED_SCALE, scale); - glPixelTransferf(GL_GREEN_SCALE, scale); - glPixelTransferf(GL_BLUE_SCALE, scale); - glPixelTransferf(GL_RED_BIAS, bias); - glPixelTransferf(GL_GREEN_BIAS, bias); - glPixelTransferf(GL_BLUE_BIAS, bias); - glRasterPos2i(0, 0); - glBitmap(0, 0, 0, 0, ax, -ay, NULL); - glCopyPixels(ax, -ay, - ceil(imgwidth * zoom), ceil(imgheight * zoom), GL_COLOR); - glPixelTransferf(GL_RED_SCALE, 1.0); - glPixelTransferf(GL_GREEN_SCALE, 1.0); - glPixelTransferf(GL_BLUE_SCALE, 1.0); - glPixelTransferf(GL_RED_BIAS, 0.0); - glPixelTransferf(GL_GREEN_BIAS, 0.0); - glPixelTransferf(GL_BLUE_BIAS, 0.0); - } - } - if (timing) { - glFinish(); - end = glutGet(GLUT_ELAPSED_TIME); - printf("time = %d milliseconds\n", end - start); - } - /* Swap the buffers if necessary. */ - if (doubleBuffer) { - glutSwapBuffers(); - } else { - glFlush(); - } -} - -static int moving = 0, ox, oy; - -void -mouse(int button, int state, int x, int y) -{ - if (button == GLUT_LEFT_BUTTON) { - if (state == GLUT_DOWN) { - - /* Left mouse button press. Update last seen mouse - position. And set "moving" true since button is - pressed. */ - ox = x; - oy = y; - moving = 1; - - } else { - - /* Left mouse button released; unset "moving" since - button no longer pressed. */ - moving = 0; - - } - } -} - -void -motion(int x, int y) -{ - /* If there is mouse motion with the left button held down. */ - if (moving) { - - /* Figure out offset from the last mouse position seen. */ - ax += (x - ox); - ay += (y - oy); - - /* Request a window redraw. */ - glutPostRedisplay(); - - /* Update last seen mouse position. */ - ox = x; - oy = y; - } -} - -void -updateTitle(void) -{ - char title[200]; - - sprintf(title, "Scale (%.2f) & Bias (%.1f) via %s", scale, bias, - useBlend ? "Blend" : "Copy"); - glutSetWindowTitle(title); -} - -void -option(int value) -{ - switch (value) { - case 6: - bias += 0.1; - break; - case 7: - bias -= 0.1; - break; - case 8: - scale *= 1.1; - break; - case 9: - scale *= 0.9; - break; - case 10: - scale = 1.0; - bias = 0.0; - break; - case 11: - if (hasBlendSubtract) { - useBlend = 1 - useBlend; - } - break; - case 12: - zoom += 0.2; - break; - case 13: - zoom -= 0.2; - break; - case 14: - timing = 1 - timing; - break; - case 666: - exit(0); - break; - } - updateTitle(); - glutPostRedisplay(); -} - -/* ARGSUSED1 */ -void -special(int key, int x, int y) -{ - switch (key) { - case GLUT_KEY_UP: - option(6); - break; - case GLUT_KEY_DOWN: - option(7); - break; - case GLUT_KEY_LEFT: - option(9); - break; - case GLUT_KEY_RIGHT: - option(8); - break; - case GLUT_KEY_HOME: - option(10); - break; - case GLUT_KEY_INSERT: - option(11); - break; - case GLUT_KEY_PAGE_UP: - option(12); - break; - case GLUT_KEY_PAGE_DOWN: - option(13); - break; - } -} - -int -main(int argc, char **argv) -{ - TIFF *tif; - char emsg[1024]; - int i; - - glutInit(&argc, argv); - for (i = 1; i < argc; i++) { - if (!strcmp(argv[i], "-sb")) { - doubleBuffer = 0; - } else { - filename = argv[i]; - } - } - if (filename == NULL) { - fprintf(stderr, "usage: scalebias [GLUT-options] [-sb] TIFF-file\n"); - exit(1); - } - tif = TIFFOpen(filename, "r"); - if (tif == NULL) { - fprintf(stderr, "Problem showing %s\n", filename); - exit(1); - } - if (TIFFRGBAImageBegin(&img, tif, 0, emsg)) { - npixels = (tsize_t) (img.width * img.height); - raster = (uint32 *) _TIFFmalloc(npixels * (tsize_t) sizeof(uint32)); - if (raster != NULL) { - if (TIFFRGBAImageGet(&img, raster, img.width, img.height) == 0) { - TIFFError(filename, emsg); - exit(1); - } - } - TIFFRGBAImageEnd(&img); - } else { - TIFFError(filename, emsg); - exit(1); - } - if (doubleBuffer) { - glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); - } else { - glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); - } - imgwidth = (int) img.width; - imgheight = (int) img.height; - glutInitWindowSize(imgwidth * 1.5, imgheight * 1.5); - glutCreateWindow(""); - glutReshapeFunc(reshape); - glutDisplayFunc(display); - glutMouseFunc(mouse); - glutMotionFunc(motion); - glutSpecialFunc(special); -#ifdef GL_EXT_abgr - if (glutExtensionSupported("GL_EXT_abgr")) { - hasABGR = 1; - } -#endif -#ifdef GL_EXT_blend_subtract - if (glutExtensionSupported("GL_EXT_blend_subtract")) { - hasBlendSubtract = 1; - } -#endif - if (!hasBlendSubtract) { - printf("\nThis program needs the blend subtract extension for\n"); - printf("fast blending-base in-place scaling & biasing. Since\n"); - printf("the extension is not available, using the slower\n"); - printf("glCopyPixels approach.\n\n"); - useBlend = 0; - } - /* If cannot directly display ABGR format, we need to reverse - the component ordering in each pixel. :-( */ - if (!hasABGR) { - int i; - - for (i = 0; i < npixels; i++) { - register unsigned char *cp = (unsigned char *) &raster[i]; - int t; - - t = cp[3]; - cp[3] = cp[0]; - cp[0] = t; - t = cp[2]; - cp[2] = cp[1]; - cp[1] = t; - } - } - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - - /* Linear sampling within a mipmap level. */ - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, - GL_LINEAR_MIPMAP_NEAREST); - - /* A TIFF file could be any size; OpenGL textures are allowed - to have a width and height that is a power of two (32, 64, - 128, etc.). To maximize the use of available texture - memory, we scale the image to gluScaleImage to the next - larger power of 2 width or height dimension (not exceeding - 512, don't want to use too much texture memory!). This - rescaling can result in a bit of image bluring because of - the resampling done by gluScaleImage. An alternative would - be to change the texture coordinates to only use a portion - texture area. */ - - tw = 1 << (int) ceil(log(img.width) / log(2.0)); - th = 1 << (int) ceil(log(img.height) / log(2.0)); - if (tw > 512) - tw = 512; - if (th > 512) - th = 512; - texture = (uint32 *) malloc(sizeof(GLubyte) * 4 * tw * th); - -#ifdef GL_EXT_abgr -#define APPROPRIATE_FORMAT (hasABGR ? GL_ABGR_EXT : GL_RGBA) -#else -#define APPROPRIATE_FORMAT GL_RGBA -#endif - - gluScaleImage(APPROPRIATE_FORMAT, - (GLsizei) img.width, (GLsizei) img.height, GL_UNSIGNED_BYTE, raster, - tw, th, GL_UNSIGNED_BYTE, texture); - - /* Build mipmaps for the texture image. Since we are not - scaling the image (we easily could by calling glScalef), - creating mipmaps is not really useful, but it is done just - to show how easily creating mipmaps is. */ - gluBuild2DMipmaps(GL_TEXTURE_2D, 4, tw, th, - APPROPRIATE_FORMAT, GL_UNSIGNED_BYTE, - texture); - - glutCreateMenu(option); - glutAddMenuEntry("Increase bias (Up)", 6); - glutAddMenuEntry("Decrease bias (Down)", 7); - glutAddMenuEntry("Increase scale (Right)", 8); - glutAddMenuEntry("Decrease scale (Left)", 9); - glutAddMenuEntry("Reset scale & bias (Home)", 10); - if (hasBlendSubtract) { - glutAddMenuEntry("Toggle blend/copy (Insert)", 11); - } - glutAddMenuEntry("Zoom up (PageUp)", 12); - glutAddMenuEntry("Zoom down (PageDown)", 13); - glutAddMenuEntry("Toggle timing", 14); - glutAddMenuEntry("Quit", 666); - glutAttachMenu(GLUT_RIGHT_BUTTON); - /* Use a gray background so TIFF images with black - backgrounds will show against textiff's background. */ - glClearColor(0.2, 0.2, 0.2, 1.0); - updateTitle(); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/tiff/showtiff.c b/lib/glut-3.7.6/progs/tiff/showtiff.c deleted file mode 100644 index 8b6be082a..000000000 --- a/lib/glut-3.7.6/progs/tiff/showtiff.c +++ /dev/null @@ -1,369 +0,0 @@ - -/* 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. */ - -/* X compile line: cc -o showtiff showtiff.c -ltiff -lglut -lGLU -lGL -lXmu -lXext -lX11 -lm */ - -/* showtiff is a simple TIFF file viewer using Sam Leffler's libtiff, GLUT, - and OpenGL. If OpenGL the image processing extensions for convolution and - color matrix are supported by your OpenGL implementation, showtiff will let - you blur, sharpen, edge detect, and color convert to grayscale the TIFF - file. You can also move around the image within the window. */ - -#include -#include -#include -#include /* Sam Leffler's libtiff library. */ - -TIFFRGBAImage img; -uint32 *raster; -tsize_t npixels; -int imgwidth, imgheight; - -int hasABGR = 0; -int hasConvolve = 0; -int hasColorMatrix = 0; -int doubleBuffer = 1; -char *filename = NULL; -int ax = 0, ay = 0; -int luminance = 0; - -GLfloat rgbBlur[7][7][3]; -GLfloat rgbEdgeDetect[3][3][3]; -GLfloat rgbSharpen[3][3][3]; - -void -initKernels(void) -{ - int x, y, c; - - /* A 7x7 "blurring" convolution kernel. This kernel will uniformly spread - each pixel with its surrounding 7x7 pixels. The sum of the kernel - elements is 1.0. */ - for (x = 0; x < 7; x++) { - for (y = 0; y < 7; y++) { - for (c = 0; c < 3; c++) { - rgbBlur[x][y][c] = 1.0 / 49.0; - } - } - } - - /* A 3x3 edge detection covolution kernel. The kernel is shown below. - Notice how the elements of the kernel add up to zero. */ - /********** - -1 -1 -1 - -1 8 -1 - -1 -1 -1 - **********/ - for (x = 0; x < 3; x++) { - for (y = 0; y < 3; y++) { - for (c = 0; c < 3; c++) { - rgbEdgeDetect[x][y][c] = -1.0; - } - } - } - for (c = 0; c < 3; c++) { - rgbEdgeDetect[1][1][c] = 8.0; - } - - /* A 3x3 "sharpening" convolution kernel. The kernel is shown below. - Notice how surrounding information is subtracted out of the central - pixel while the central pixel is weighted heavily. The sum of the - kernel elements is 1.0. */ - /************* - -.5 -.5 -.5 - -.5 5 -.5 - -.5 -.5 -.5 - *************/ - for (x = 0; x < 3; x++) { - for (y = 0; y < 3; y++) { - for (c = 0; c < 3; c++) { - rgbSharpen[x][y][c] = -0.5; - } - } - } - for (c = 0; c < 3; c++) { - rgbSharpen[1][1][c] = 5.0; - } -} - -/* If resize is called, enable drawing into the full screen area - (glViewport). Then setup the modelview and projection matrices to map 2D - x,y coodinates directly onto pixels in the window (lower left origin). - Then set the raster position (where the image would be drawn) to be offset - from the upper left corner, and then offset by the current offset (using a - null glBitmap). */ -void -reshape(int w, int h) -{ - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluOrtho2D(0, w, 0, h); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(0, h - imgheight, 0); - glRasterPos2i(0, 0); - glBitmap(0, 0, 0, 0, ax, -ay, NULL); -} - -void -display(void) -{ - /* Clear the color buffer. */ - glClear(GL_COLOR_BUFFER_BIT); - -#ifdef GL_EXT_abgr -#define APPROPRIATE_FORMAT (hasABGR ? GL_ABGR_EXT : GL_RGBA) -#else -#define APPROPRIATE_FORMAT GL_RGBA -#endif - - /* Re-blit the image. */ - glDrawPixels(imgwidth, imgheight, - APPROPRIATE_FORMAT, GL_UNSIGNED_BYTE, - raster); - - /* Swap the buffers if necessary. */ - if (doubleBuffer) { - glutSwapBuffers(); - } else { - glFlush(); - } -} - -static int moving = 0, ox, oy; - -void -mouse(int button, int state, int x, int y) -{ - if (button == GLUT_LEFT_BUTTON) { - if (state == GLUT_DOWN) { - - /* Left mouse button press. Update last seen mouse position. And set - "moving" true since button is pressed. */ - ox = x; - oy = y; - moving = 1; - - } else { - - /* Left mouse button released; unset "moving" since button no longer - pressed. */ - moving = 0; - - } - } -} - -void -motion(int x, int y) -{ - /* If there is mouse motion with the left button held down... */ - if (moving) { - - /* Figure out the offset from the last mouse position seen. */ - ax += (x - ox); - ay += (y - oy); - - /* Offset the raster position based on the just calculated mouse position - - delta. Use a null glBitmap call to offset the raster position in - window coordinates. */ - glBitmap(0, 0, 0, 0, x - ox, oy - y, NULL); - - /* Request a window redraw. */ - glutPostRedisplay(); - - /* Update last seen mouse position. */ - ox = x; - oy = y; - } -} - -void -option(int value) -{ - /* RGB to NTSC luminance color conversion matrix. */ - static GLfloat rgb2luminance[16] = - { - 0.30, 0.30, 0.30, 0.30, /* 30% red. */ - 0.59, 0.59, 0.59, 0.59, /* 59% green. */ - 0.11, 0.11, 0.11, 0.11, /* 11% blue. */ - 0.00, 0.00, 0.00, 0.00 /* 0% alpha. */ - }; - - switch (value) { - case 1: -#ifdef GL_EXT_convolution - glDisable(GL_CONVOLUTION_2D_EXT); - break; - case 2: - glEnable(GL_CONVOLUTION_2D_EXT); - glConvolutionFilter2DEXT(GL_CONVOLUTION_2D_EXT, - GL_RGB, 7, 7, GL_RGB, GL_FLOAT, rgbBlur); - break; - case 3: - glEnable(GL_CONVOLUTION_2D_EXT); - glConvolutionFilter2DEXT(GL_CONVOLUTION_2D_EXT, - GL_RGB, 3, 3, GL_RGB, GL_FLOAT, rgbSharpen); - break; - case 4: - glEnable(GL_CONVOLUTION_2D_EXT); - glConvolutionFilter2DEXT(GL_CONVOLUTION_2D_EXT, - GL_RGB, 3, 3, GL_RGB, GL_FLOAT, rgbEdgeDetect); -#endif - break; -#ifdef GL_SGI_color_matrix - case 5: - luminance = 1 - luminance; /* Toggle. */ - glMatrixMode(GL_COLOR); - if (luminance) { - glLoadMatrixf(rgb2luminance); - } else { - glLoadIdentity(); - } - glMatrixMode(GL_MODELVIEW); -#endif - break; - case 666: - exit(0); - break; - } - glutPostRedisplay(); -} - -int -main(int argc, char **argv) -{ - TIFF *tif; - char emsg[1024]; - int i; - - glutInit(&argc, argv); - for (i = 1; i < argc; i++) { - if (!strcmp(argv[i], "-sb")) { - doubleBuffer = 0; - } else { - filename = argv[i]; - } - } - if (filename == NULL) { - fprintf(stderr, "usage: showtiff [GLUT-options] [-sb] TIFF-file\n"); - exit(1); - } - tif = TIFFOpen(filename, "r"); - if (tif == NULL) { - fprintf(stderr, "Problem showing %s\n", filename); - exit(1); - } - if (TIFFRGBAImageBegin(&img, tif, 0, emsg)) { - npixels = (tsize_t) (img.width * img.height); - raster = (uint32 *) _TIFFmalloc(npixels * (tsize_t) sizeof(uint32)); - if (raster != NULL) { - if (TIFFRGBAImageGet(&img, raster, img.width, img.height) == 0) { - TIFFError(filename, emsg); - exit(1); - } - } - TIFFRGBAImageEnd(&img); - } else { - TIFFError(filename, emsg); - exit(1); - } - if (doubleBuffer) { - glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); - } else { - glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); - } - imgwidth = (int) img.width; - imgheight = (int) img.height; - glutInitWindowSize(imgwidth, imgheight); - glutCreateWindow("showtiff"); - glutReshapeFunc(reshape); - glutDisplayFunc(display); - glutMouseFunc(mouse); - glutMotionFunc(motion); -#ifdef GL_EXT_abgr - if (glutExtensionSupported("GL_EXT_abgr")) { - hasABGR = 1; - } -#endif -#ifdef GL_EXT_convolution - if (glutExtensionSupported("GL_EXT_convolution")) { - hasConvolve = 1; - } else { - while (glGetError() != GL_NO_ERROR); /* Clear any OpenGL errors. */ - - /* The following glDisable would be a no-op whether done on a freshly - initialized OpenGL context whether convolution is supported or not. - The only difference should be an OpenGL error should be reported if - the GL_CONVOLUTION_2D_EXT is not understood (ie, convolution is not - supported at all). */ - glDisable(GL_CONVOLUTION_2D_EXT); - - if (glGetError() == GL_NO_ERROR) { - /* RealityEngine only partially implements the convolve extension and - hence does not advertise the extension in its extension string (See - MACHINE DEPENDENCIES section of the glConvolutionFilter2DEXT man - page). We limit this program to use only the convolve functionality - supported by RealityEngine so we test if OpenGL lets us enable - convolution without an error (the indication that convolution is - partially supported). */ - hasConvolve = 1; - } - /* Clear any further OpenGL errors (hopefully there should have only been - - one or zero though). */ - while (glGetError() != GL_NO_ERROR); - } -#endif -#ifdef GL_SGI_color_matrix - if (glutExtensionSupported("GL_SGI_color_matrix")) { - hasColorMatrix = 1; - } -#endif - /* If cannot directly display ABGR format, we need to reverse the component - ordering in each pixel. :-( */ - if (!hasABGR) { - int i; - - for (i = 0; i < npixels; i++) { - register unsigned char *cp = (unsigned char *) &raster[i]; - int t; - - t = cp[3]; - cp[3] = cp[0]; - cp[0] = t; - t = cp[2]; - cp[2] = cp[1]; - cp[1] = t; - } - } - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - initKernels(); - glutCreateMenu(option); - glutAddMenuEntry("Normal", 1); -#ifdef GL_EXT_convolution - if (hasConvolve) { - glutAddMenuEntry("7x7 Blur", 2); - glutAddMenuEntry("3x3 Sharpen", 3); - glutAddMenuEntry("3x3 Edge Detect", 4); - } -#endif -#ifdef GL_SGI_color_matrix - if (hasColorMatrix) { - glutAddMenuEntry("Toggle Luminance/RGB", 5); - } -#endif - glutAddMenuEntry("Quit", 666); - glutAttachMenu(GLUT_RIGHT_BUTTON); - /* Use a gray background so TIFF images with black backgrounds will - show against textiff's background. */ - glClearColor(0.2, 0.2, 0.2, 1.0); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/tiff/spiral.tif b/lib/glut-3.7.6/progs/tiff/spiral.tif deleted file mode 100644 index b67973bee18273d64033fddf0ec7e8b42e4ad59d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49356 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 b_i6j -#include -#include -#include -#include /* Sam Leffler's libtiff library. */ - -TIFFRGBAImage img; -uint32 *raster; -uint32 *texture; -tsize_t npixels; -int tw, th; -int angle; - -int hasABGR = 0; -int doubleBuffer = 1; -char *filename = NULL; - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - glPushMatrix(); - - /* Rotate by angle. */ - glRotatef(angle, 0, 0, 1); - - /* Draw a rectangle onto which the TIFF image will get textured. Notice - that the texture coordinates are set to each corner of the texture - image. */ - glBegin(GL_QUADS); - glTexCoord2i(0, 0); - glVertex2i(-1, -1); - glTexCoord2i(1, 0); - glVertex2i(1, -1); - glTexCoord2i(1, 1); - glVertex2i(1, 1); - glTexCoord2i(0, 1); - glVertex2i(-1, 1); - glEnd(); - - glPopMatrix(); - if (doubleBuffer) { - glutSwapBuffers(); - } -} - -/* If the left or right arrows are pressed, rotate five degrees either - direction and request a redraw of the window. */ -/* ARGSUSED1 */ -void -special(int key, int x, int y) -{ - switch (key) { - case GLUT_KEY_LEFT: - angle -= 5; - angle %= 360; - glutPostRedisplay(); - break; - case GLUT_KEY_RIGHT: - angle += 5; - angle %= 360; - glutPostRedisplay(); - break; - } -} - -int -main(int argc, char **argv) -{ - TIFF *tif; - char emsg[1024]; - int i; - - glutInit(&argc, argv); - for (i = 1; i < argc; i++) { - if (!strcmp(argv[i], "-sb")) { - doubleBuffer = 0; - } else { - filename = argv[i]; - } - } - if (filename == NULL) { - fprintf(stderr, "usage: textiff [GLUT-options] [-sb] TIFF-file\n"); - exit(1); - } - tif = TIFFOpen(filename, "r"); - if (tif == NULL) { - fprintf(stderr, "Problem showing %s\n", filename); - exit(1); - } - if (TIFFRGBAImageBegin(&img, tif, 0, emsg)) { - npixels = (tsize_t) (img.width * img.height); - raster = (uint32 *) _TIFFmalloc(npixels * (tsize_t) sizeof(uint32)); - if (raster != NULL) { - if (TIFFRGBAImageGet(&img, raster, img.width, img.height) == 0) { - TIFFError(filename, emsg); - exit(1); - } - } - TIFFRGBAImageEnd(&img); - } else { - TIFFError(filename, emsg); - exit(1); - } - if (doubleBuffer) { - glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); - } else { - glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); - } - glutInitWindowSize((int) img.width, (int) img.height); - glutCreateWindow("textiff"); - glutDisplayFunc(display); - glutSpecialFunc(special); -#ifdef GL_EXT_abgr - if (glutExtensionSupported("GL_EXT_abgr")) - hasABGR = 1; -#else - hasABGR = 0; -#endif - /* If cannot directly display ABGR format, we need to reverse the component - ordering in each pixel. :-( */ - if (!hasABGR) { - int i; - - for (i = 0; i < npixels; i++) { - register unsigned char *cp = (unsigned char *) &raster[i]; - int t; - - t = cp[3]; - cp[3] = cp[0]; - cp[0] = t; - t = cp[2]; - cp[2] = cp[1]; - cp[1] = t; - } - } - /* OpenGL's default unpack (and pack) alignment is 4. In the case of the - data returned by libtiff which is already aligned on 32-bit boundaries, - setting the pack to 1 isn't strictly necessary. */ - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - gluOrtho2D(-1, 1, -1, 1); - - /* Linear sampling within a mipmap level. */ - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, - GL_LINEAR_MIPMAP_NEAREST); - - glEnable(GL_TEXTURE_2D); - - /* A TIFF file could be any size; OpenGL textures are allowed to have a - width and height that is a power of two (32, 64, 128, etc.). To maximize - the use of available texture memory, we scale the image to gluScaleImage - to the next larger power of 2 width or height dimension (not exceeding - 512, don't want to use too much texture memory!). This rescaling can - result in a bit of image bluring because of the resampling done by - gluScaleImage. An alternative would be to change the texture coordinates - to only use a portion texture area. */ - - tw = 1 << (int) ceil(log(img.width) / log(2.0)); - th = 1 << (int) ceil(log(img.height) / log(2.0)); - if (tw > 512) - tw = 512; - if (th > 512) - th = 512; - texture = (uint32 *) malloc(sizeof(GLubyte) * 4 * tw * th); - -#ifdef GL_EXT_abgr -#define APPROPRIATE_FORMAT (hasABGR ? GL_ABGR_EXT : GL_RGBA) -#else -#define APPROPRIATE_FORMAT GL_RGBA -#endif - - gluScaleImage(APPROPRIATE_FORMAT, - (GLsizei) img.width, (GLsizei) img.height, GL_UNSIGNED_BYTE, raster, - tw, th, GL_UNSIGNED_BYTE, texture); - _TIFFfree(raster); - - /* Build mipmaps for the texture image. Since we are not scaling the image - (we easily could by calling glScalef), creating mipmaps is not really - useful, but it is done just to show how easily creating mipmaps is. */ - gluBuild2DMipmaps(GL_TEXTURE_2D, 4, tw, th, - APPROPRIATE_FORMAT, GL_UNSIGNED_BYTE, - texture); - - /* Use a gray background so TIFF images with black backgrounds will - show against textiff's background. */ - glClearColor(0.2, 0.2, 0.2, 1.0); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/tiff/tiffsift.c b/lib/glut-3.7.6/progs/tiff/tiffsift.c deleted file mode 100644 index 28f7356a5..000000000 --- a/lib/glut-3.7.6/progs/tiff/tiffsift.c +++ /dev/null @@ -1,307 +0,0 @@ - -/* 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. */ - -/* This program uses 3D texture coordinates to introduce - "sifting" effects to warp a static mesh of textured - geometry. The third texture coordinate encodes a shifting - quantity through the mesh. By updating the texture matrix, - the texture coordinates can be shifted based on this - third texture coordinate. You'll notice the image seems - to have local vortexes scattered over the image that - warp the image. While the texture coordinates look dynamic, - they are indeed quite static (frozen in a display list) and - it is just the texture matrix that is changing to shift - the final 2D texture coordinates. */ - -#include -#include -#include -#include /* for cos(), sin(), and sqrt() */ -#include -#include /* Sam Leffler's libtiff library. */ - -TIFFRGBAImage img; -uint32 *raster; -uint32 *texture; -tsize_t npixels; - -float tick = 0; -float size = 0.6; -int set_timeout = 0; -int visible = 0; -int sifting = 1; -int interval = 100; - -int hasABGR = 0; -int doubleBuffer = 1; -char *filename = NULL; - -int tw, th; - -void -animate(int value) -{ - if (visible) { - if (sifting) { - if (value) { - if (sifting) { - tick += 4 * (interval / 100.0); - } - } - glutPostRedisplay(); - set_timeout = 1; - } - } -} - -/* Setup display list with "frozen" 3D texture coordinates. */ -void -generateTexturedSurface(void) -{ - static GLfloat data[8] = - {0, 1, 0, -1, 0, -1, 0, 1}; - int i, j; - -#define COLS 6 -#define ROWS 6 -#define TILE_TEX_W (1.0/COLS) -#define TILE_TEX_H (1.0/ROWS) - - glNewList(1, GL_COMPILE); - glTranslatef(-COLS / 2.0 + .5, -ROWS / 2.0 + .5, 0); - for (j = 0; j < ROWS; j++) { - glBegin(GL_QUAD_STRIP); - for (i = 0; i < COLS; i++) { - glTexCoord3f(i * TILE_TEX_W, j * TILE_TEX_H, data[(i + j) % 8]); - glVertex2f(i - .5, j - .5); - glTexCoord3f(i * TILE_TEX_W, (j + 1) * TILE_TEX_H, data[(i + j + 1) % 8]); - glVertex2f(i - .5, j + .5); - } -#if 1 - glTexCoord3f((i + 1) * TILE_TEX_W, j * TILE_TEX_H, data[(i + j) % 8]); - glVertex2f(i + .5, j - .5); - glTexCoord3f((i + 1) * TILE_TEX_W, (j + 1) * TILE_TEX_H, data[(i + j + 1) % 8]); - glVertex2f(i + .5, j + .5); - glEnd(); -#endif - } - glEndList(); -} - -/* Construct an identity matrix except that the third coordinate - can be used to "sift" the X and Y coordinates. */ -void -makeSift(GLfloat m[16], float xsift, float ysift) -{ - m[0 + 4 * 0] = 1; - m[0 + 4 * 1] = 0; - m[0 + 4 * 2] = xsift; - m[0 + 4 * 3] = 0; - - m[1 + 4 * 0] = 0; - m[1 + 4 * 1] = 1; - m[1 + 4 * 2] = ysift; - m[1 + 4 * 3] = 0; - - m[2 + 4 * 0] = 0; - m[2 + 4 * 1] = 0; - m[2 + 4 * 2] = 1; - m[2 + 4 * 3] = 0; - - m[3 + 4 * 0] = 0; - m[3 + 4 * 1] = 0; - m[3 + 4 * 2] = 0; - m[3 + 4 * 3] = 1; -} - -void -redraw(void) -{ - int begin, end, elapsed; - GLfloat matrix[16]; - - if (set_timeout) { - begin = glutGet(GLUT_ELAPSED_TIME); - } - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glPushMatrix(); - - glScalef(size, size, size); - - glMatrixMode(GL_TEXTURE); - makeSift(matrix, 0.02 * cos(tick / 15.0), 0.02 * sin(tick / 15.0)); - glLoadMatrixf(matrix); - glMatrixMode(GL_MODELVIEW); - - glCallList(1); - - glPopMatrix(); - if (doubleBuffer) { - glutSwapBuffers(); - } else { - glFlush(); - } - if (set_timeout) { - set_timeout = 0; - end = glutGet(GLUT_ELAPSED_TIME); - elapsed = end - begin; - if (elapsed > interval) { - glutTimerFunc(0, animate, 1); - } else { - glutTimerFunc(interval - elapsed, animate, 1); - } - } -} - -void -visibility(int state) -{ - if (state == GLUT_VISIBLE) { - visible = 1; - animate(0); - } else { - visible = 0; - } -} - -int -main(int argc, char **argv) -{ - TIFF *tif; - char emsg[1024]; - int i; - - glutInit(&argc, argv); - for (i = 1; i < argc; i++) { - if (!strcmp(argv[i], "-sb")) { - doubleBuffer = 0; - } else { - filename = argv[i]; - } - } - if (filename == NULL) { - fprintf(stderr, "usage: textiff [GLUT-options] [-sb] TIFF-file\n"); - exit(1); - } - tif = TIFFOpen(filename, "r"); - if (tif == NULL) { - fprintf(stderr, "Problem showing %s\n", filename); - exit(1); - } - if (TIFFRGBAImageBegin(&img, tif, 0, emsg)) { - npixels = (tsize_t) (img.width * img.height); - raster = (uint32 *) _TIFFmalloc(npixels * (tsize_t) sizeof(uint32)); - if (raster != NULL) { - if (TIFFRGBAImageGet(&img, raster, img.width, img.height) == 0) { - TIFFError(filename, emsg); - exit(1); - } - } - TIFFRGBAImageEnd(&img); - } else { - TIFFError(filename, emsg); - exit(1); - } - if (doubleBuffer) { - glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); - } else { - glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); - } - glutInitWindowSize((int) img.width, (int) img.height); - glutCreateWindow("tiffsift"); - glutDisplayFunc(redraw); - glutVisibilityFunc(visibility); -#ifdef GL_EXT_abgr - if (glutExtensionSupported("GL_EXT_abgr")) - hasABGR = 1; -#else - hasABGR = 0; -#endif - /* If cannot directly display ABGR format, we need to reverse the component - ordering in each pixel. :-( */ - if (!hasABGR) { - int i; - - for (i = 0; i < npixels; i++) { - register unsigned char *cp = (unsigned char *) &raster[i]; - int t; - - t = cp[3]; - cp[3] = cp[0]; - cp[0] = t; - t = cp[2]; - cp[2] = cp[1]; - cp[1] = t; - } - } - /* OpenGL's default unpack (and pack) alignment is 4. In the case of the - data returned by libtiff which is already aligned on 32-bit boundaries, - setting the pack to 1 isn't strictly necessary. */ - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - gluOrtho2D(-1, 1, -1, 1); - - /* Linear sampling within a mipmap level. */ - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, - GL_LINEAR_MIPMAP_NEAREST); - - glEnable(GL_TEXTURE_2D); - - /* A TIFF file could be any size; OpenGL textures are allowed to have a - width and height that is a power of two (32, 64, 128, etc.). To maximize - the use of available texture memory, we scale the image to gluScaleImage - to the next larger power of 2 width or height dimension (not exceeding - 512, don't want to use too much texture memory!). This rescaling can - result in a bit of image bluring because of the resampling done by - gluScaleImage. An alternative would be to change the texture coordinates - to only use a portion texture area. */ - - tw = 1 << (int) ceil(log(img.width) / log(2.0)); - th = 1 << (int) ceil(log(img.height) / log(2.0)); - if (tw > 512) - tw = 512; - if (th > 512) - th = 512; - texture = (uint32 *) malloc(sizeof(GLubyte) * 4 * tw * th); - -#ifdef GL_EXT_abgr -#define APPROPRIATE_FORMAT (hasABGR ? GL_ABGR_EXT : GL_RGBA) -#else -#define APPROPRIATE_FORMAT GL_RGBA -#endif - - gluScaleImage(APPROPRIATE_FORMAT, - (GLsizei) img.width, (GLsizei) img.height, GL_UNSIGNED_BYTE, raster, - tw, th, GL_UNSIGNED_BYTE, texture); - _TIFFfree(raster); - - /* Build mipmaps for the texture image. Since we are not scaling the image - (we easily could by calling glScalef), creating mipmaps is not really - useful, but it is done just to show how easily creating mipmaps is. */ - gluBuild2DMipmaps(GL_TEXTURE_2D, 4, tw, th, - APPROPRIATE_FORMAT, GL_UNSIGNED_BYTE, - texture); - - /* Use a gray background so TIFF images with black backgrounds will - show against textiff's background. */ - glClearColor(0.2, 0.2, 0.2, 1.0); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective( /* field of view in degree */ 40.0, - /* aspect ratio */ 1.0, - /* Z near */ 1.0, /* Z far */ 70.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - gluLookAt(0.0, 0.0, 5.0, /* eye is at (0,0,30) */ - 0.0, 0.0, 0.0, /* center is at (0,0,0) */ - 0.0, 1.0, 0.); /* up is in positive Y direction */ - - generateTexturedSurface(); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/progs/tiff/writetiff.c b/lib/glut-3.7.6/progs/tiff/writetiff.c deleted file mode 100644 index 0e7419857..000000000 --- a/lib/glut-3.7.6/progs/tiff/writetiff.c +++ /dev/null @@ -1,330 +0,0 @@ - -/* 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. */ - -/* X compile line: cc -o writetiff writetiff.c -ltiff -lglut -lGLU -lGL -lXmu -lXext -lX11 -lm */ - -/* writetiff is a simple OpenGL program that writes out a TIFF file named - gears.tif containing an OpenGL-rendered scene containing 3 gears (the - gears rendering code is lifted from Brian Paul's gears.c Mesa demo. - writetiff uses Sam Leffler's libtiff library to write to a TIFF an image - grabbed from the screen with glReadPixels. NOTE: If the window is - obscured when the glReadPixels is performed, obscured pixels will be - undefined when written into the TIFF file. */ - -#include -#include -#include -#include /* Sam Leffler's libtiff library. */ - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -static int W, H; - -int -writetiff(char *filename, char *description, - int x, int y, int width, int height, int compression) -{ - TIFF *file; - GLubyte *image, *p; - int i; - - file = TIFFOpen(filename, "w"); - if (file == NULL) { - return 1; - } - image = (GLubyte *) malloc(width * height * sizeof(GLubyte) * 3); - - /* OpenGL's default 4 byte pack alignment would leave extra bytes at the - end of each image row so that each full row contained a number of bytes - divisible by 4. Ie, an RGB row with 3 pixels and 8-bit componets would - be laid out like "RGBRGBRGBxxx" where the last three "xxx" bytes exist - just to pad the row out to 12 bytes (12 is divisible by 4). To make sure - the rows are packed as tight as possible (no row padding), set the pack - alignment to 1. */ - glPixelStorei(GL_PACK_ALIGNMENT, 1); - - glReadPixels(x, y, width, height, GL_RGB, GL_UNSIGNED_BYTE, image); - TIFFSetField(file, TIFFTAG_IMAGEWIDTH, (uint32) width); - TIFFSetField(file, TIFFTAG_IMAGELENGTH, (uint32) height); - TIFFSetField(file, TIFFTAG_BITSPERSAMPLE, 8); - TIFFSetField(file, TIFFTAG_COMPRESSION, compression); - TIFFSetField(file, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB); - TIFFSetField(file, TIFFTAG_SAMPLESPERPIXEL, 3); - TIFFSetField(file, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); - TIFFSetField(file, TIFFTAG_ROWSPERSTRIP, 1); - TIFFSetField(file, TIFFTAG_IMAGEDESCRIPTION, description); - p = image; - for (i = height - 1; i >= 0; i--) { - if (TIFFWriteScanline(file, p, i, 0) < 0) { - free(image); - TIFFClose(file); - return 1; - } - p += width * sizeof(GLubyte) * 3; - } - TIFFClose(file); - return 0; -} - -/** - - Draw a gear wheel. You'll probably want to call this function when - building a display list since we do a lot of trig here. - - Input: inner_radius - radius of hole at center - outer_radius - radius at center of teeth - width - width of gear - teeth - number of teeth - tooth_depth - depth of tooth - - **/ - -static void -gear(GLfloat inner_radius, GLfloat outer_radius, GLfloat width, - GLint teeth, GLfloat tooth_depth) -{ - GLint i; - GLfloat r0, r1, r2; - GLfloat angle, da; - GLfloat u, v, len; - - r0 = inner_radius; - r1 = outer_radius - tooth_depth / 2.0; - r2 = outer_radius + tooth_depth / 2.0; - - da = 2.0 * M_PI / teeth / 4.0; - - glShadeModel(GL_FLAT); - - glNormal3f(0.0, 0.0, 1.0); - - /* draw front face */ - glBegin(GL_QUAD_STRIP); - for (i = 0; i <= teeth; i++) { - angle = i * 2.0 * M_PI / teeth; - glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5); - glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5); - glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5); - glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), width * 0.5); - } - glEnd(); - - /* draw front sides of teeth */ - glBegin(GL_QUADS); - da = 2.0 * M_PI / teeth / 4.0; - for (i = 0; i < teeth; i++) { - angle = i * 2.0 * M_PI / teeth; - - glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5); - glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5); - glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), width * 0.5); - glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), width * 0.5); - } - glEnd(); - - glNormal3f(0.0, 0.0, -1.0); - - /* draw back face */ - glBegin(GL_QUAD_STRIP); - for (i = 0; i <= teeth; i++) { - angle = i * 2.0 * M_PI / teeth; - glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5); - glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5); - glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), -width * 0.5); - glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5); - } - glEnd(); - - /* draw back sides of teeth */ - glBegin(GL_QUADS); - da = 2.0 * M_PI / teeth / 4.0; - for (i = 0; i < teeth; i++) { - angle = i * 2.0 * M_PI / teeth; - - glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), -width * 0.5); - glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), -width * 0.5); - glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), -width * 0.5); - glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5); - } - glEnd(); - - /* draw outward faces of teeth */ - glBegin(GL_QUAD_STRIP); - for (i = 0; i < teeth; i++) { - angle = i * 2.0 * M_PI / teeth; - - glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5); - glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5); - u = r2 * cos(angle + da) - r1 * cos(angle); - v = r2 * sin(angle + da) - r1 * sin(angle); - len = sqrt(u * u + v * v); - u /= len; - v /= len; - glNormal3f(v, -u, 0.0); - glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5); - glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), -width * 0.5); - glNormal3f(cos(angle), sin(angle), 0.0); - glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), width * 0.5); - glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), -width * 0.5); - u = r1 * cos(angle + 3 * da) - r2 * cos(angle + 2 * da); - v = r1 * sin(angle + 3 * da) - r2 * sin(angle + 2 * da); - glNormal3f(v, -u, 0.0); - glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), width * 0.5); - glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), -width * 0.5); - glNormal3f(cos(angle), sin(angle), 0.0); - } - - glVertex3f(r1 * cos(0), r1 * sin(0), width * 0.5); - glVertex3f(r1 * cos(0), r1 * sin(0), -width * 0.5); - - glEnd(); - - glShadeModel(GL_SMOOTH); - - /* draw inside radius cylinder */ - glBegin(GL_QUAD_STRIP); - for (i = 0; i <= teeth; i++) { - angle = i * 2.0 * M_PI / teeth; - glNormal3f(-cos(angle), -sin(angle), 0.0); - glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5); - glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5); - } - glEnd(); - -} - -static GLfloat view_rotx = 20.0, view_roty = 30.0, view_rotz = 0.0; -static GLint gear1, gear2, gear3; -static GLfloat angle = 0.0; - -static void -draw(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glPushMatrix(); - glRotatef(view_rotx, 1.0, 0.0, 0.0); - glRotatef(view_roty, 0.0, 1.0, 0.0); - glRotatef(view_rotz, 0.0, 0.0, 1.0); - - glPushMatrix(); - glTranslatef(-3.0, -2.0, 0.0); - glRotatef(angle, 0.0, 0.0, 1.0); - glCallList(gear1); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(3.1, -2.0, 0.0); - glRotatef(-2.0 * angle - 9.0, 0.0, 0.0, 1.0); - glCallList(gear2); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(-3.1, 4.2, 0.0); - glRotatef(-2.0 * angle - 25.0, 0.0, 0.0, 1.0); - glCallList(gear3); - glPopMatrix(); - - glPopMatrix(); - - glFlush(); -} - -static void -init(void) -{ - static GLfloat pos[4] = - {5.0, 5.0, 10.0, 0.0}; - static GLfloat red[4] = - {0.8, 0.1, 0.0, 1.0}; - static GLfloat green[4] = - {0.0, 0.8, 0.2, 1.0}; - static GLfloat blue[4] = - {0.2, 0.2, 1.0, 1.0}; - - glLightfv(GL_LIGHT0, GL_POSITION, pos); - glEnable(GL_CULL_FACE); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_DEPTH_TEST); - - /* make the gears */ - gear1 = glGenLists(1); - glNewList(gear1, GL_COMPILE); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, red); - gear(1.0, 4.0, 1.0, 20, 0.7); - glEndList(); - - gear2 = glGenLists(1); - glNewList(gear2, GL_COMPILE); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, green); - gear(0.5, 2.0, 2.0, 10, 0.7); - glEndList(); - - gear3 = glGenLists(1); - glNewList(gear3, GL_COMPILE); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, blue); - gear(1.3, 2.0, 0.5, 10, 0.7); - glEndList(); - - glEnable(GL_NORMALIZE); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glFrustum(-1.0, 1.0, -1.0, 1.0, 5.0, 60.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(0.0, 0.0, -40.0); -} - -static void -reshape(int width, int height) -{ - glViewport(0, 0, (GLint) width, (GLint) height); - W = width; - H = height; -} - -static void -menu(int value) -{ - switch (value) { - case 1: - writetiff("gears.tif", "OpenGL-rendered gears", 0, 0, W, H, COMPRESSION_LZW); - break; - case 2: - writetiff("gears.tif", "OpenGL-rendered gears", 0, 0, W, H, COMPRESSION_NONE); - break; - case 3: - writetiff("gears.tif", "OpenGL-rendered gears", 0, 0, W, H, COMPRESSION_PACKBITS); - break; - } -} - -main(int argc, char *argv[]) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH); - - glutCreateWindow("writetiff"); - init(); - - glutDisplayFunc(draw); - glutReshapeFunc(reshape); - - glutCreateMenu(menu); - glutAddMenuEntry("Write gears.tiff (LZW compressed)", 1); - glutAddMenuEntry("Write gears.tiff (No compression)", 2); - glutAddMenuEntry("Write gears.tiff (Packbits)", 3); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/test/Imakefile b/lib/glut-3.7.6/test/Imakefile deleted file mode 100644 index 9c5a03df5..000000000 --- a/lib/glut-3.7.6/test/Imakefile +++ /dev/null @@ -1,12 +0,0 @@ -#define IHaveSubdirs -#define PassCDebugFlags - -SUBDIRS = glut mui - -MakeSubdirs($(SUBDIRS)) - -test: - cd glut ; $(MAKE) test - cd mui ; $(MAKE) test - -DependSubdirs($(SUBDIRS)) diff --git a/lib/glut-3.7.6/test/glut/Imakefile b/lib/glut-3.7.6/test/glut/Imakefile deleted file mode 100644 index c80dfaf57..000000000 --- a/lib/glut-3.7.6/test/glut/Imakefile +++ /dev/null @@ -1,98 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1994. */ - -#include "../../Glut.cf" - -/* Andy V @ DEC sez... */ -#ifdef AlphaArchitecture -EXTRA_INCLUDES = GLUTInclude -I$(TOP)/lib/glut -#else -INCLUDES = -I$(TOP)/lib/glut -#endif - -SRCS = bigtest.c cursor_test.c over_test.c shape_test.c test1.c test10.c \ - test11.c test12.c test13.c test14.c test15.c test16.c test17.c \ - test18.c test19.c test2.c test20.c test21.c test22.c test23.c test24.c \ - test25.c test26.c test27.c test3.c test4.c test5.c test6.c test7.c \ - test8.c test9.c test28.c timer_test.c menu_test.c keyup_test.c joy_test.c - -TARGETS = test1 test2 test3 test4 test5 test6 test7 test8 \ - test9 test10 test11 test12 test13 test14 test15 test16 test17 \ - test18 test19 test20 test21 test22 test23 test24 test25 test26 \ - test27 test28 bigtest cursor_test menu_test over_test shape_test \ - timer_test keyup_test joy_test - -AllTarget($(TARGETS)) - -GlutTestProgramTarget(test1) -GlutTestProgramTarget(test2) -GlutTestProgramTarget(test3) -GlutTestProgramTarget(test4) -GlutTestProgramTarget(test5) -GlutTestProgramTarget(test6) -GlutTestProgramTarget(test7) -GlutTestProgramTarget(test8) -GlutTestProgramTarget(test9) -GlutTestProgramTarget(test10) -GlutTestProgramTarget(test11) -GlutTestProgramTarget(test12) -GlutTestProgramTarget(test13) -GlutTestProgramTarget(test14) -GlutTestProgramTarget(test15) -GlutTestProgramTarget(test16) -GlutTestProgramTarget(test17) -GlutTestProgramTarget(test18) -GlutTestProgramTarget(test19) -GlutTestProgramTarget(test20) -GlutTestProgramTarget(test21) -GlutTestProgramTarget(test22) -GlutTestProgramTarget(test23) -GlutTestProgramTarget(test24) -GlutTestProgramTarget(test25) -GlutTestProgramTarget(test26) -GlutTestProgramTarget(test27) -GlutTestProgramTarget(test28) -GlutTestProgramTarget(bigtest) -GlutTestProgramTarget(cursor_test) -GlutTestProgramTarget(keyup_test) -GlutTestProgramTarget(joy_test) -GlutTestProgramTarget(menu_test) -GlutTestProgramTarget(over_test) -GlutTestProgramTarget(shape_test) -GlutTestProgramTarget(timer_test) - -# Do not be surprised if some of these tests fail on previous GLUT releases. - -# NOTE: first run of test2 can fail since time dependent, but run twice - -test : $(TARGETS) - @GLUT_TEST_ALT_DISPLAY=$$DISPLAY ./test1 - -./test2 - @./test2 - @./test3 - @./test4 - @./test5 - @./test7 - @./test8 - @./test9 - @./test10 - @./test11 - @./test12 - @./test13 - @./test14 - @./test15 - @./test16 - @./test17 - @./test18 - @./test19 - @./test20 - @./test21 - @./test22 - @./test23 - @./test24 - @./test25 - @./test26 - @./test27 - @./test28 - -DependTarget() diff --git a/lib/glut-3.7.6/test/glut/_all.dsp b/lib/glut-3.7.6/test/glut/_all.dsp deleted file mode 100644 index e3c5ee30b..000000000 --- a/lib/glut-3.7.6/test/glut/_all.dsp +++ /dev/null @@ -1,63 +0,0 @@ -# Microsoft Developer Studio Project File - Name="_all" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Generic Project" 0x010a - -CFG=_all - 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 "_all.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 "_all.mak" CFG="_all - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "_all - Win32 Release" (based on "Win32 (x86) Generic Project") -!MESSAGE "_all - Win32 Debug" (based on "Win32 (x86) Generic Project") -!MESSAGE - -# Begin Project -# PROP _allowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -MTL=midl.exe - -!IF "$(CFG)" == "_all - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" - -!ELSEIF "$(CFG)" == "_all - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" - -!ENDIF - -# Begin Target - -# Name "_all - Win32 Release" -# Name "_all - Win32 Debug" -# End Target -# End Project diff --git a/lib/glut-3.7.6/test/glut/atexit_test.c b/lib/glut-3.7.6/test/glut/atexit_test.c deleted file mode 100644 index cc2244167..000000000 --- a/lib/glut-3.7.6/test/glut/atexit_test.c +++ /dev/null @@ -1,41 +0,0 @@ - -/* 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. */ - -/* When you quite a GLUT program, the atexit callbacks should - always be called. In GLUT 3.6 and earlier, this was not happening. - It should be fixed in GLUT 3.7. */ - -#include -#include -#include - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - glFlush(); -} - -void -exitHappened(void) -{ - printf("PASS: atexit test\n"); -} - -int -main(int argc, char **argv) -{ - atexit(exitHappened); - glutInitWindowSize(400, 100); - glutInit(&argc, argv); - glutCreateWindow("at exit test (quit via window border)"); - glutDisplayFunc(display); - printf("\nIf you quite via the window manager you should see\n" - "a message with the word pass capitalized.\n\n"); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/test/glut/bigtest.c b/lib/glut-3.7.6/test/glut/bigtest.c deleted file mode 100644 index d084999ed..000000000 --- a/lib/glut-3.7.6/test/glut/bigtest.c +++ /dev/null @@ -1,2597 +0,0 @@ - -/** - * My first GLUT prog. - * Uses most GLUT calls to prove it all works. - * G Edwards, 30 Aug 95. - * - * Notes: - * Display lists are not shared between windows, and there doesn't seem to be - * any provision for this in GLUT. See glxCreateContext. - * - * The windows are internally indexed 0,1,2,3,4,5,6. The actual window ids - * returned by glut are held in winId[0], ... - * - * Todo: - * - * Could reorder the windows so 0,1,2,3,4,5,6 are the gfx, 7,8 text. - * - * 30 Aug 95 GJE Created. Version 1.00 - * 05 Sep 95 GJE Version 1.01. - * 07 Sep 95 GJE Version 1.02. More or less complete. All possible GLUT - * calls used, except dials/buttons/tablet/spaceball stuff. - * 15 Sep 95 GJE Add "trackball" code. - * - * Calls not used yet: these callbacks are registered but inactive. - * - * glutSpaceballFunc - * glutButtonBoxFunc - * glutDialsFunc - * glutTabletMotionFunc - * glutTabletButtonFunc - * - * Tested on: - * R3K Indigo Starter - * R4K Indigo Elan - * R4K Indy XZ - * R4K Indy XL - * R4K Indigo2 Extreme - */ - -#include -#include -#include -#include -#include - -/* Controls */ - -#define VERSION "1.00" -#define DATE "16Sep95" -#define DELAY 1000 /* delay for timer test */ -#define MENUDELAY 200 /* hack to fix glutMenuStateFunc bug */ -#define MAXWIN 9 /* max no. of windows */ - -unsigned int AUTODELAY = 1500; /* delay in demo mode */ - -#define VERSIONLONG "Version " VERSION "/" DATE ", compiled " __DATE__ ", " __TIME__ ", file " __FILE__ - -int pos[MAXWIN][2] = -{ - {50, 150}, /* win 0 */ - {450, 150}, /* win 1 */ - {50, 600}, /* win 2 */ - {450, 600}, /* win 3 */ - {10, 10}, /* subwin 4 (relative to parent win 0) */ - {300, 400}, /* help win 5 */ - {850, 150}, /* cmap win 6 */ - {850, 600}, /* cmap win 7 */ - {250, 450} /* text win 8 */ -}; - -int size[MAXWIN][2] = -{ - {350, 350}, /* win 0 */ - {350, 350}, /* win 1 */ - {350, 350}, /* win 2 */ - {350, 350}, /* win 3 */ - {200, 200}, /* subwin 4 */ - {700, 300}, /* help win 5 */ - {350, 350}, /* cmap win 6 */ - {350, 350}, /* cmap win 7 */ - {800, 450} /* text win 8 */ -}; - -/* Macros */ - -#define PR if(debug)printf - -/* #define GLNEWLIST(a, b) glNewList(a, b), fprintf(stderr, - "creating list %d \n", a); */ -/* #define GLCALLLIST(a) glCallList(a), fprintf(stderr, - "calling list %d \n", a); */ -/* #define GLUTSETWINDOW(x) glutSetWindow(x), fprintf(stderr, - "gsw at %d\n", __LINE__) */ - -/* Globals */ - -int winId[MAXWIN] = -{0}; /* table of glut window id's */ -GLboolean winVis[MAXWIN] = -{GL_FALSE}; /* is window visible */ - -GLboolean text[MAXWIN] = -{GL_FALSE}; /* is text on */ -GLboolean winFreeze[MAXWIN] = -{GL_FALSE}; /* user requested menuFreeze */ -GLboolean menuFreeze = GL_FALSE; /* menuFreeze while menus posted */ -GLboolean timerOn = GL_FALSE; /* timer active */ -GLboolean animation = GL_TRUE; /* idle func animation on */ -GLboolean debug = GL_FALSE; /* dump all events */ -GLboolean showKeys = GL_FALSE; /* dump key events */ -GLboolean demoMode = GL_FALSE; /* run automatic demo */ -GLboolean backdrop = GL_FALSE; /* use backdrop polygon */ -GLboolean passive = GL_FALSE; /* report passive motions */ -GLboolean leftDown = GL_FALSE; /* left button down ? */ -GLboolean middleDown = GL_FALSE; /* middle button down ? */ - -int displayMode = GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH; -int currentShape = 0; /* current glut shape */ -int scrollLine = 0, scrollCol = 0; /* help scrolling params */ -int lineWidth = 1; /* line width */ -int angle = 0; /* global rotation angle */ -char *textPtr[1000] = -{0}; /* pointers to text window text */ -int textCount = 0, helpCount = 0; /* text list indexes */ -float scaleFactor = 0.0; /* window size scale factor */ - -#ifdef ALPHA -#undef ALPHA /* Avoid problems with DEC's ALPHA machines. */ -#endif - -int menu1, menu2, menu3, menu4, menu5, menu6 = 0, menu7, menu8; -enum { - RGBA, INDEX, SINGLE, DOUBLEBUFFER, DEPTH, ACCUM, ALPHA, STENCIL, MULTISAMPLE, - STEREO, MODES -}; -char *modeNames[] = -{"RGBA", "INDEX", "SINGLE", "DOUBLE", "DEPTH", "ACCUM", - "ALPHA", "STENCIL", "MULTISAMPLE", "STEREO"}; -int glutMode[] = -{GLUT_RGBA, GLUT_INDEX, GLUT_SINGLE, GLUT_DOUBLE, GLUT_DEPTH, - GLUT_ACCUM, GLUT_ALPHA, GLUT_STENCIL, GLUT_MULTISAMPLE, GLUT_STEREO}; -int modes[MODES] = -{0}; -GLboolean menuButton[3] = -{0, 0, 1}; -enum { - MOUSEBUTTON, MOUSEMOTION, APPLY, RESET -}; - -/* Prototypes */ - -void gfxInit(int); -void drawScene(void); -void idleFunc(void); -void reshapeFunc(int width, int height); -void visible(int state); -void keyFunc(unsigned char key, int x, int y); -void mouseFunc(int button, int state, int x, int y); -void motionFunc(int x, int y); -void passiveMotionFunc(int x, int y); -void entryFunc(int state); -void specialFunc(int key, int x, int y); -void menuStateFunc(int state); -void timerFunc(int value); -#if 0 -void delayedReinstateMenuStateCallback(int value); -#endif -void menuFunc(int value); -void showText(void); -void textString(int x, int y, char *str, void *font); -void strokeString(int x, int y, char *str, void *font); -void makeMenus(void); -int idToIndex(int id); -void setInitDisplayMode(void); -void createMenu6(void); -void removeCallbacks(void); -void addCallbacks(void); -void dumpIds(void); -void updateHelp(void); -void updateAll(void); -void killWindow(int index); -void makeWindow(int index); -void warning(char *msg); -void autoDemo(int); -void positionWindow(int index); -void reshapeWindow(int index); -void iconifyWindow(int index); -void showWindow(int index); -void hideWindow(int index); -void pushWindow(int index); -void popWindow(int index); -void attachMenus(void); -void killAllWindows(void); -void makeAllWindows(void); -void updateText(void); -void updateScrollWindow(int index, char **ptr); -void redefineShapes(int shape); -GLboolean match(char *, char *); -void checkArgs(int argc, char *argv[]); -void scaleWindows(float); -void commandLineHelp(void); -void trackBall(int mode, int button, int state, int x, int y); - -void spaceballMotionCB(int, int, int); -void spaceballRotateCB(int, int, int); -void spaceballButtonCB(int, int); -void buttonBoxCB(int, int); -void dialsCB(int, int); -void tabletMotionCB(int, int); -void tabletButtonCB(int, int, int, int); - -/* strdup is actually not a standard ANSI C or POSIX routine - so implement a private one. OpenVMS does not have a strdup; Linux's - standard libc doesn't declare strdup by default (unless BSD or SVID - interfaces are requested). */ -static char * -stralloc(const char *string) -{ - char *copy; - - copy = malloc(strlen(string) + 1); - if (copy == NULL) - return NULL; - strcpy(copy, string); - return copy; -} - -/* main */ - -int -main(int argc, char **argv) -{ - -/* General init */ - - glutInit(&argc, argv); - -/* Check args */ - - checkArgs(argc, argv); - -/* Scale window position/size if needed. Ignore aspect ratios. */ - - if (scaleFactor > 0.0) - scaleWindows(scaleFactor); - else - scaleWindows(glutGet(GLUT_SCREEN_WIDTH) / 1280.0); - -/* Set initial display mode */ - - modes[RGBA] = 1; - modes[DOUBLEBUFFER] = 1; - modes[DEPTH] = 1; - setInitDisplayMode(); - -/* Set up menus */ - - makeMenus(); - -/* Make some windows */ - - makeWindow(0); - makeWindow(1); - -/* Global callbacks */ - - glutIdleFunc(idleFunc); - glutMenuStateFunc(menuStateFunc); - -/* Start demo if needed */ - - if (demoMode) - autoDemo(-2); - -/* Fall into event loop */ - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} - -/* gfxInit - Init opengl for each window */ - -void -gfxInit(int index) -{ - GLfloat grey10[] = - {0.10, 0.10, 0.10, 1.0}; - GLfloat grey20[] = - {0.2, 0.2, 0.2, 1.0}; - GLfloat black[] = - {0.0, 0.0, 0.0, 0.0}; - GLfloat diffuse0[] = - {1.0, 0.0, 0.0, 1.0}; - GLfloat diffuse1[] = - {0.0, 1.0, 0.0, 1.0}; - GLfloat diffuse2[] = - {1.0, 1.0, 0.0, 1.0}; - GLfloat diffuse3[] = - {0.0, 1.0, 1.0, 1.0}; - GLfloat diffuse4[] = - {1.0, 0.0, 1.0, 1.0}; - -#define XX 3 -#define YY 3 -#define ZZ -2.5 - - float vertex[][3] = - { - {-XX, -YY, ZZ}, - {+XX, -YY, ZZ}, - {+XX, +YY, ZZ}, - {-XX, +YY, ZZ} - }; - -/* warning: This func mixes RGBA and CMAP calls in an ugly - fashion */ - - redefineShapes(currentShape); /* set up display lists */ - glutSetWindow(winId[index]); /* hack - redefineShapes - changes glut win */ - -/* Shaded backdrop square (RGB or CMAP) */ - - glNewList(100, GL_COMPILE); - glPushAttrib(GL_LIGHTING); - glDisable(GL_LIGHTING); - glBegin(GL_POLYGON); - - glColor4fv(black); - glIndexi(0); - glVertex3fv(vertex[0]); - - glColor4fv(grey10); - glIndexi(3); - glVertex3fv(vertex[1]); - - glColor4fv(grey20); - glIndexi(4); - glVertex3fv(vertex[2]); - - glColor4fv(grey10); - glIndexi(7); - glVertex3fv(vertex[3]); - - glEnd(); - glPopAttrib(); - glIndexi(9); - glEndList(); - -/* Set proj+view */ - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(40.0, 1.0, 1.0, 20.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - gluLookAt(0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.); - glTranslatef(0.0, 0.0, -1.0); - - if (index == 6 || index == 7) - goto colorindex; - -/* Set basic material, lighting for RGB windows */ - - if (index == 0) - glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuse0); - else if (index == 1) - glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuse1); - else if (index == 2) - glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuse2); - else if (index == 3) - glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuse3); - else if (index == 4) - glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuse4); - - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_DEPTH_TEST); - - if (index == 4) - glClearColor(0.15, 0.15, 0.15, 1); - else - glClearColor(0.1, 0.1, 0.1, 1.0); - - return; - -/* Set GL basics for CMAP windows 6,7 */ - -colorindex: - - glEnable(GL_DEPTH_TEST); - if (glutGet(GLUT_WINDOW_COLORMAP_SIZE) < 16) - warning("Color map size too small for color index window"); - -/* Try to reuse an existing color map */ - - if ((index == 6) && (winId[7] != 0)) { - glutCopyColormap(winId[7]); - } else if ((index == 7) && (winId[6] != 0)) { - glutCopyColormap(winId[6]); - } else { - glutSetColor(8, 0.1, 0.1, 0.1); - glutSetColor(9, 1.0, 0.5, 0.0); - glutSetColor(10, 1.0, 0.6, 0.8); - } - glClearIndex(8); - glIndexi(index + 3); - -} - -/* makeMenus - Create popup menus */ - -void -makeMenus(void) -{ - -/* General control / debug */ - - menu2 = glutCreateMenu(menuFunc); - glutAddMenuEntry("toggle auto demo mode (a)", 312); - glutAddMenuEntry("toggle freezing in menus", 300); - glutAddMenuEntry("toggle text per window (t)", 301); - glutAddMenuEntry("toggle global timer", 302); - glutAddMenuEntry("toggle global animation", 303); - glutAddMenuEntry("toggle per window animation", 304); - glutAddMenuEntry("toggle debug prints (D)", 305); - glutAddMenuEntry("toggle shaded backdrop", 307); - glutAddMenuEntry("toggle passive motion callback", 308); - glutAddMenuEntry("increase line width (l)", 310); - glutAddMenuEntry("decrease line width (L)", 311); - -/* Shapes */ - - menu3 = glutCreateMenu(menuFunc); - glutAddMenuEntry("sphere", 200); - glutAddMenuEntry("cube", 201); - glutAddMenuEntry("cone", 202); - glutAddMenuEntry("torus", 203); - glutAddMenuEntry("dodecahedron", 204); - glutAddMenuEntry("octahedron", 205); - glutAddMenuEntry("tetrahedron", 206); - glutAddMenuEntry("icosahedron", 207); - glutAddMenuEntry("teapot", 208); - -/* Open/close windows */ - - menu4 = glutCreateMenu(menuFunc); - glutAddMenuEntry("open all windows", 450); - glutAddMenuEntry("close all windows", 451); - glutAddMenuEntry(" ", 9999); - glutAddMenuEntry("create win 0", 400); - glutAddMenuEntry("create win 1", 401); - glutAddMenuEntry("create win 2", 402); - glutAddMenuEntry("create win 3", 403); - glutAddMenuEntry("create sub window", 404); - glutAddMenuEntry("create color index win 6", 406); - glutAddMenuEntry("create color index win 7", 407); - glutAddMenuEntry(" ", 9999); - glutAddMenuEntry("destroy win 0", 410); - glutAddMenuEntry("destroy win 1", 411); - glutAddMenuEntry("destroy win 2", 412); - glutAddMenuEntry("destroy win 3", 413); - glutAddMenuEntry("destroy sub window", 414); - glutAddMenuEntry("destroy color index win 6", 416); - glutAddMenuEntry("destroy color index win 7", 417); - -/* Window manager stuff */ - - menu5 = glutCreateMenu(menuFunc); - glutAddMenuEntry("move current win", 430); - glutAddMenuEntry("resize current win", 431); - glutAddMenuEntry("iconify current win", 432); - glutAddMenuEntry("show current win", 433); - glutAddMenuEntry("hide current win", 434); - glutAddMenuEntry("push current win", 435); - glutAddMenuEntry("pop current win", 436); - glutAddMenuEntry(" ", 9999); - glutAddMenuEntry("move win 1", 420); - glutAddMenuEntry("resize win 1", 421); - glutAddMenuEntry("iconify win 1", 422); - glutAddMenuEntry("show win 1", 423); - glutAddMenuEntry("hide win 1", 424); - glutAddMenuEntry("push win 1", 425); - glutAddMenuEntry("pop win 1", 426); - -/* Gfx modes */ - - createMenu6(); /* build dynamically */ - -/* Texty reports */ - - menu7 = glutCreateMenu(menuFunc); - glutAddMenuEntry("report current win modes", 700); - glutAddMenuEntry("report current device data", 701); - glutAddMenuEntry("check OpenGL extensions", 702); - glutAddMenuEntry("dump internal data (d)", 703); - -/* Play with menus */ - - menu8 = glutCreateMenu(menuFunc); - glutAddMenuEntry("toggle menus on left button", 805); - glutAddMenuEntry("toggle menus on middle button", 806); - glutAddMenuEntry("toggle menus on right button", 807); - glutAddMenuEntry("---------------------------", 9999); - glutAddMenuEntry("add plain items", 800); - glutAddMenuEntry("add submenu items", 801); - glutAddMenuEntry("change new entries to plain items", 802); - glutAddMenuEntry("change new entries to submenus", 803); - glutAddMenuEntry("remove all new items", 804); - glutAddMenuEntry("---------------------------", 9999); - -/* Main menu */ - - menu1 = glutCreateMenu(menuFunc); - glutAddSubMenu("control", menu2); - glutAddSubMenu("shapes", menu3); - glutAddSubMenu("windows", menu4); - glutAddSubMenu("window ops", menu5); - glutAddSubMenu("gfx modes", menu6); - glutAddSubMenu("reports", menu7); - glutAddSubMenu("menus", menu8); - glutAddMenuEntry("help (h)", 101); - glutAddMenuEntry("quit (esc)", 100); -} - -/* createMenu6 - Dynamically rebuild menu of display modes to - show current choices */ - -void -createMenu6(void) -{ - char str[100]; - int i; - - if (menu6 != 0) - glutDestroyMenu(menu6); - menu6 = glutCreateMenu(menuFunc); - - for (i = 0; i < MODES; i++) { - sprintf(str, "%srequest %s", (modes[i] ? "+ " : " "), modeNames[i]); - glutAddMenuEntry(str, 602 + i); - } -} - -/* menuFunc - Process return codes from popup menus */ - -void -menuFunc(int value) -{ - static int initItems = 10; - int items, m; - - if (initItems == 0) { - glutSetMenu(menu8); - initItems = glutGet(GLUT_MENU_NUM_ITEMS); - } - PR("Menu returned value %d \n", value); - - switch (value) { - -/* GLUT shapes */ - - case 200: - case 201: - case 202: - case 203: - case 204: - case 205: - case 206: - case 207: - case 208: - redefineShapes(value - 200); - break; - -/* Overall controls */ - - case 300: - menuFreeze = !menuFreeze; - break; - - case 301: - text[idToIndex(glutGetWindow())] = !(text[idToIndex(glutGetWindow())]); - break; - - case 302: - timerOn = !timerOn; - if (timerOn) - glutTimerFunc(DELAY, timerFunc, 1); - break; - - case 303: - animation = !animation; - if (animation) - glutIdleFunc(idleFunc); - else - glutIdleFunc(NULL); - break; - - case 304: - winFreeze[idToIndex(glutGetWindow())] = !(winFreeze[idToIndex( - glutGetWindow())]); - break; - - case 305: - debug = !debug; - break; - - case 307: - backdrop = !backdrop; - break; - - case 308: - passive = !passive; - if (passive) - glutPassiveMotionFunc(passiveMotionFunc); - else - glutPassiveMotionFunc(NULL); - break; - - case 310: - lineWidth += 1; - updateAll(); - break; - - case 311: - lineWidth -= 1; - if (lineWidth < 1) - lineWidth = 1; - updateAll(); - break; - - case 312: - demoMode = !demoMode; - if (demoMode) - autoDemo(-2); - break; - -/* Window create/destroy. */ - -/* Creates */ - - case 400: - makeWindow(0); - break; - - case 401: - makeWindow(1); - break; - - case 402: - makeWindow(2); - break; - - case 403: - makeWindow(3); - break; - - case 404: - makeWindow(4); - break; - - case 406: - makeWindow(6); - break; - - case 407: - makeWindow(7); - break; - -/* Destroys */ - - case 410: - killWindow(0); - break; - - case 411: - killWindow(1); - break; - - case 412: - killWindow(2); - break; - - case 413: - killWindow(3); - break; - - case 414: - killWindow(4); - break; - - case 416: - killWindow(6); - break; - - case 417: - killWindow(7); - break; - - case 450: - makeAllWindows(); - break; - - case 451: - killAllWindows(); - break; - -/* Window movements etc. */ - - case 420: - positionWindow(1); - break; - - case 421: - reshapeWindow(1); - break; - - case 422: - iconifyWindow(1); - break; - - case 423: - showWindow(1); - break; - - case 424: - hideWindow(1); - break; - - case 425: - pushWindow(1); - break; - - case 426: - popWindow(1); - break; - - case 430: - positionWindow(idToIndex(glutGetWindow())); - break; - - case 431: - reshapeWindow(idToIndex(glutGetWindow())); - break; - - case 432: - iconifyWindow(idToIndex(glutGetWindow())); - break; - - case 433: - showWindow(idToIndex(glutGetWindow())); - break; - - case 434: - hideWindow(idToIndex(glutGetWindow())); - break; - - case 435: - pushWindow(idToIndex(glutGetWindow())); - break; - - case 436: - popWindow(idToIndex(glutGetWindow())); - break; - -/* Test gfx modes. */ - - case 600: - makeWindow(3); - break; - - case 601: - killWindow(3); - break; - - case 602: - case 603: - case 604: - case 605: - case 606: - case 607: - case 608: - case 609: - case 610: - case 611: - modes[value - 602] = !modes[value - 602]; - setInitDisplayMode(); - break; - -/* Text reports */ - -/* This is pretty ugly. */ - -#define INDENT 30 -#define REPORTSTART(text) \ - printf("\n" text "\n"); \ - textPtr[0] = (char *)malloc(strlen(text)+1); \ - strcpy(textPtr[0], text); \ - textCount = 1; - -#define REPORTEND \ - scrollLine = 0; \ - textPtr[textCount] = NULL; \ - makeWindow(8); \ - updateText(); - -#define GLUTGET(name) \ - { \ - char str[100], str2[100]; \ - int s, len; \ - sprintf(str, # name); \ - len = (int) strlen(# name); \ - for(s = 0 ; s < INDENT-len; s++) \ - strcat(str, " "); \ - sprintf(str2, ": %d\n",glutGet(name)); \ - strcat(str, str2); \ - printf(str); \ - textPtr[textCount] = stralloc(str); \ - textCount++; \ - } - - case 700: - - printf("XXXXXX glutGetWindow = %d\n", glutGetWindow()); - REPORTSTART("glutGet():"); - - GLUTGET(GLUT_WINDOW_X); - GLUTGET(GLUT_WINDOW_Y); - GLUTGET(GLUT_WINDOW_WIDTH); - GLUTGET(GLUT_WINDOW_HEIGHT); - GLUTGET(GLUT_WINDOW_BUFFER_SIZE); - GLUTGET(GLUT_WINDOW_STENCIL_SIZE); - GLUTGET(GLUT_WINDOW_DEPTH_SIZE); - GLUTGET(GLUT_WINDOW_RED_SIZE); - GLUTGET(GLUT_WINDOW_GREEN_SIZE); - GLUTGET(GLUT_WINDOW_BLUE_SIZE); - GLUTGET(GLUT_WINDOW_ALPHA_SIZE); - GLUTGET(GLUT_WINDOW_ACCUM_RED_SIZE); - GLUTGET(GLUT_WINDOW_ACCUM_GREEN_SIZE); - GLUTGET(GLUT_WINDOW_ACCUM_BLUE_SIZE); - GLUTGET(GLUT_WINDOW_ACCUM_ALPHA_SIZE); - GLUTGET(GLUT_WINDOW_DOUBLEBUFFER); - GLUTGET(GLUT_WINDOW_RGBA); - GLUTGET(GLUT_WINDOW_PARENT); - GLUTGET(GLUT_WINDOW_NUM_CHILDREN); - GLUTGET(GLUT_WINDOW_COLORMAP_SIZE); - GLUTGET(GLUT_WINDOW_NUM_SAMPLES); - GLUTGET(GLUT_STEREO); - GLUTGET(GLUT_SCREEN_WIDTH); - GLUTGET(GLUT_SCREEN_HEIGHT); - GLUTGET(GLUT_SCREEN_HEIGHT_MM); - GLUTGET(GLUT_SCREEN_WIDTH_MM); - GLUTGET(GLUT_MENU_NUM_ITEMS); - GLUTGET(GLUT_DISPLAY_MODE_POSSIBLE); - GLUTGET(GLUT_INIT_DISPLAY_MODE); - GLUTGET(GLUT_INIT_WINDOW_X); - GLUTGET(GLUT_INIT_WINDOW_Y); - GLUTGET(GLUT_INIT_WINDOW_WIDTH); - GLUTGET(GLUT_INIT_WINDOW_HEIGHT); - GLUTGET(GLUT_ELAPSED_TIME); - - REPORTEND; - break; - -#define GLUTDEVGET(name) \ - { \ - char str[100], str2[100]; \ - int len, s; \ - sprintf(str, # name); \ - len = (int) strlen(# name); \ - for(s = 0 ; s < INDENT-len; s++) \ - strcat(str, " "); \ - sprintf(str2, ": %d\n", \ - glutDeviceGet(name)); \ - strcat(str, str2); \ - printf(str); \ - textPtr[textCount] = stralloc(str); \ - textCount++; \ - } - - case 701: - REPORTSTART("glutDeviceGet():"); - - GLUTDEVGET(GLUT_HAS_KEYBOARD); - GLUTDEVGET(GLUT_HAS_MOUSE); - GLUTDEVGET(GLUT_HAS_SPACEBALL); - GLUTDEVGET(GLUT_HAS_DIAL_AND_BUTTON_BOX); - GLUTDEVGET(GLUT_HAS_TABLET); - GLUTDEVGET(GLUT_NUM_MOUSE_BUTTONS); - GLUTDEVGET(GLUT_NUM_SPACEBALL_BUTTONS); - GLUTDEVGET(GLUT_NUM_BUTTON_BOX_BUTTONS); - GLUTDEVGET(GLUT_NUM_DIALS); - GLUTDEVGET(GLUT_NUM_TABLET_BUTTONS); - - REPORTEND; - break; - -#define EXTCHECK(name) \ - { \ - char str[100], str2[100]; \ - int len, s; \ - sprintf(str, # name); \ - len = (int) strlen(# name); \ - for(s = 0 ; s < INDENT-len; s++) \ - strcat(str, " "); \ - sprintf(str2, ": %s\n", \ - glutExtensionSupported(# name)? \ - "yes": "no"); \ - strcat(str, str2); \ - printf(str); \ - textPtr[textCount] = stralloc(str); \ - textCount++; \ - } - - case 702: - REPORTSTART("glutExtensionSupported():"); - - EXTCHECK(GL_EXT_abgr); - EXTCHECK(GL_EXT_blend_color); - EXTCHECK(GL_EXT_blend_minmax); - EXTCHECK(GL_EXT_blend_logic_op); - EXTCHECK(GL_EXT_blend_subtract); - EXTCHECK(GL_EXT_polygon_offset); - EXTCHECK(GL_EXT_texture); - EXTCHECK(GL_EXT_guaranteed_to_fail); - EXTCHECK(GLX_SGI_swap_control); - EXTCHECK(GLX_SGI_video_sync); - EXTCHECK(GLX_SGIS_multi_sample); - - REPORTEND; - break; - - case 703: - dumpIds(); - break; - -/* Mess around with menus */ - - case 800: - if (glutGetMenu() != menu8) /* just a test */ - printf("glutGetMenu() returned unexpected value\n"); - glutAddMenuEntry("help", 101); - glutAddMenuEntry("help", 101); - glutAddMenuEntry("help", 101); - glutAddMenuEntry("help", 101); - glutAddMenuEntry("help", 101); - break; - - case 801: - glutAddSubMenu("shapes", menu3); - glutAddSubMenu("shapes", menu3); - glutAddSubMenu("shapes (a long string to break menus with)", menu3); - glutAddSubMenu("shapes", menu3); - glutAddSubMenu("shapes", menu3); - break; - - case 802: - items = glutGet(GLUT_MENU_NUM_ITEMS); - for (m = initItems + 1; m <= items; m++) { - glutChangeToMenuEntry(m, "help", 101); - } - break; - - case 803: - items = glutGet(GLUT_MENU_NUM_ITEMS); - for (m = initItems + 1; m <= items; m++) { - glutChangeToSubMenu(m, "shapes", menu3); - } - break; - - case 804: - items = glutGet(GLUT_MENU_NUM_ITEMS); - /* reverse order so renumbering not aproblem */ - for (m = items; m >= initItems + 1; m--) { - glutRemoveMenuItem(m); - } - break; - - case 805: - menuButton[0] = !menuButton[0]; - attachMenus(); - break; - - case 806: - menuButton[1] = !menuButton[1]; - attachMenus(); - break; - - case 807: - menuButton[2] = !menuButton[2]; - attachMenus(); - break; - -/* Direct menu items. */ - - case 100: - exit(0); - break; - - case 101: - if (winId[5] == 0) - makeWindow(5); - else - killWindow(5); - break; - - case 9999: - break; - - default: - fprintf(stderr, "\007Unhandled case %d in menu callback\n", value); - } - -} - -/* redefineShapes - Remake the shapes display lists */ - -void -redefineShapes(int shape) -{ - int i; - -#define C3 \ - switch(i) \ - { \ - case 0: \ - case 3: \ - C1; \ - break; \ - \ - case 1: \ - case 2: \ - case 4: \ - case 6: \ - case 7: \ - C2; \ - break; \ - } \ - currentShape = shape - - for (i = 0; i < MAXWIN; i++) { - if (winId[i]) { - glutSetWindow(winId[i]); - if (glIsList(i + 1)) - glDeleteLists(i + 1, 1); - glNewList(i + 1, GL_COMPILE); - - switch (shape) { - -#undef C1 -#define C1 glutSolidSphere(1.5, 10, 10) -#undef C2 -#define C2 glutWireSphere(1.5, 10, 10) - - case 0: - C3; - break; - -#undef C1 -#define C1 glutSolidCube(2) -#undef C2 -#define C2 glutWireCube(2) - - case 1: - C3; - break; - -#undef C1 -#define C1 glutSolidCone(1.5, 1.75, 10, 10); -#undef C2 -#define C2 glutWireCone(1.5, 1.75, 10, 10); - - case 2: - C3; - break; - -#undef C1 -#define C1 glutSolidTorus(0.5, 1.1, 10, 10) -#undef C2 -#define C2 glutWireTorus(0.5, 1.1, 10, 10) - - case 3: - C3; - break; - -#undef C1 -#define C1 glScalef(.8, .8, .8);glutSolidDodecahedron() -#undef C2 -#define C2 glScalef(.8, .8, .8);glutWireDodecahedron() - - case 4: - C3; - break; - -#undef C1 -#define C1 glScalef(1.5, 1.5, 1.5);glutSolidOctahedron() -#undef C2 -#define C2 glScalef(1.5, 1.5, 1.5);glutWireOctahedron() - - case 5: - C3; - break; - -#undef C1 -#define C1 glScalef(1.8, 1.8, 1.8);glutSolidTetrahedron() -#undef C2 -#define C2 glScalef(1.8, 1.8, 1.8);glutWireTetrahedron() - - case 6: - C3; - break; - -#undef C1 -#define C1 glScalef(1.5, 1.5, 1.5);glutSolidIcosahedron() -#undef C2 -#define C2 glScalef(1.5, 1.5, 1.5);glutWireIcosahedron() - - case 7: - C3; - break; - -#undef C1 -#define C1 glutSolidTeapot(1.5); -#undef C2 -#define C2 glutWireTeapot(1.5); - - case 8: - C3; - break; - } - glEndList(); - } - } -} - -/* positionWindow - Shift a window */ - -void -positionWindow(int index) -{ - int x, y; - - if (winId[index] == 0) - return; - - glutSetWindow(winId[index]); - x = glutGet(GLUT_WINDOW_X); - y = glutGet(GLUT_WINDOW_Y); - glutPositionWindow(x + 50, y + 50); -} - -/* reshapeWindow - Change window size a little */ - -void -reshapeWindow(int index) -{ - int x, y; - - if (winId[index] == 0) - return; - glutSetWindow(winId[index]); - x = glutGet(GLUT_WINDOW_WIDTH); - y = glutGet(GLUT_WINDOW_HEIGHT); -/* glutReshapeWindow(x * (index % 2? 0.8: 1.2), y * (index % 2? - - 1.2: 0.8)); */ - glutReshapeWindow((int) (x * 1.0), (int) (y * 0.8)); -} - -/* iconifyWindow - Iconify a window */ - -void -iconifyWindow(int index) -{ - if (winId[index] == 0) - return; - glutSetWindow(winId[index]); - glutIconifyWindow(); -} - -/* showWindow - Show a window (map or uniconify it) */ - -void -showWindow(int index) -{ - if (winId[index] == 0) - return; - glutSetWindow(winId[index]); - glutShowWindow(); -} - -/* hideWindow - Hide a window (unmap it) */ - -void -hideWindow(int index) -{ - if (winId[index] == 0) - return; - glutSetWindow(winId[index]); - glutHideWindow(); -} - -/* pushWindow - Push a window */ - -void -pushWindow(int index) -{ - if (winId[index] == 0) - return; - glutSetWindow(winId[index]); - glutPushWindow(); -} - -/* popWindow - Pop a window */ - -void -popWindow(int index) -{ - if (winId[index] == 0) - return; - glutSetWindow(winId[index]); - glutPopWindow(); -} - -/* drawScene - Draw callback, triggered by expose events etc. - in GLUT. */ - -void -drawScene(void) -{ - int winIndex; - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - winIndex = idToIndex(glutGetWindow()); - /* printf("drawScene for index %d, id %d\n", winIndex, - glutGetWindow()); */ - - glPushMatrix(); - glLineWidth(lineWidth); - if (backdrop) - glCallList(100); - - /* Left button spinning */ - - trackBall(APPLY, 0, 0, 0, 0); - - /* Apply continuous spinning */ - - glRotatef(angle, 0, 1, 0); - - glCallList(winIndex + 1); - glPopMatrix(); - - if (text[winIndex]) - showText(); - - glutSwapBuffers(); -} - -/* showText - Render some text in the current GLUT window */ - -void -showText(void) -{ - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - gluOrtho2D(0, 100, 0, 100); - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); - - glColor3f(1.0, 1.0, 1.0); - glIndexi(7); - - glDisable(GL_DEPTH_TEST); - glDisable(GL_LIGHTING); - - glLineWidth(lineWidth); - - textString(1, 1, "GLUT_BITMAP_8_BY_13", GLUT_BITMAP_8_BY_13); - textString(1, 5, "GLUT_BITMAP_9_BY_15", GLUT_BITMAP_9_BY_15); - textString(1, 10, "GLUT_BITMAP_TIMES_ROMAN_10", GLUT_BITMAP_TIMES_ROMAN_10); - textString(1, 15, "GLUT_BITMAP_TIMES_ROMAN_24", GLUT_BITMAP_TIMES_ROMAN_24); - - strokeString(1, 25, "GLUT_STROKE_ROMAN", GLUT_STROKE_ROMAN); - strokeString(1, 35, "GLUT_STROKE_MONO_ROMAN", GLUT_STROKE_MONO_ROMAN); - - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); - -} - -/* textString - Bitmap font string */ - -void -textString(int x, int y, char *msg, void *font) -{ - glRasterPos2f(x, y); - while (*msg) { - glutBitmapCharacter(font, *msg); - msg++; - } -} - -/* strokeString - Stroke font string */ - -void -strokeString(int x, int y, char *msg, void *font) -{ - glPushMatrix(); - glTranslatef(x, y, 0); - glScalef(.04, .04, .04); - while (*msg) { - glutStrokeCharacter(font, *msg); - msg++; - } - glPopMatrix(); -} - -/* idleFunc - GLUT idle func callback - animates windows */ - -void -idleFunc(void) -{ - int i; - - if (!leftDown && !middleDown) - angle += 1; - angle = angle % 360; - - for (i = 0; i < MAXWIN; i++) { - if (winId[i] && winVis[i] && !winFreeze[i]) { - glutSetWindow(winId[i]); - glutPostRedisplay(); - } - } -} - -/* reshapeFunc - Reshape callback. */ - -void -reshapeFunc(int width, int height) -{ - int winId; - float aspect; - - winId = glutGetWindow(); - PR("reshape callback for window id %d \n", winId); - - glViewport(0, 0, width, height); - aspect = (float) width / height; - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(40.0, aspect, 1.0, 20.0); - glMatrixMode(GL_MODELVIEW); -} - -/* visible - Visibility callback. Turn off rendering in - invisible windows */ - -void -visible(int state) -{ - int winId; - static GLboolean someVisible = GL_TRUE; - - winId = glutGetWindow(); - /* printf("visible: state = %d \n", state); */ - - if (state == GLUT_VISIBLE) { - PR("Window id %d visible \n", winId); - winVis[idToIndex(winId)] = GL_TRUE; - } else { - PR("Window %d not visible \n", winId); - winVis[idToIndex(winId)] = GL_FALSE; - } - - if ((winVis[0] == GL_FALSE) && (winVis[1] == GL_FALSE) && (winVis[2] == GL_FALSE) - && (winVis[3] == GL_FALSE) && (winVis[6] == GL_FALSE) && (winVis[7] == - GL_FALSE)) { - glutIdleFunc(NULL); - PR("All windows not visible; idle func disabled\n"); - someVisible = GL_FALSE; - } else { - if (!someVisible) { - PR("Some windows now visible; idle func enabled\n"); - someVisible = GL_TRUE; - if (animation) - glutIdleFunc(idleFunc); - } - } -} - -/* keyFunc - Ascii key callback */ - -/* ARGSUSED1 */ -void -keyFunc(unsigned char key, int x, int y) -{ - int i, ii; - - if (debug || showKeys) - printf("Ascii key '%c' 0x%02x\n", key, key); - - switch (key) { - case 0x1b: - exit(0); - break; - - case 'a': - demoMode = !demoMode; - if (demoMode) - autoDemo(-2); - break; - - case 's': - AUTODELAY = AUTODELAY * 0.666; - break; - - case 'S': - AUTODELAY = AUTODELAY * 1.5; - break; - - case 'q': - killWindow(idToIndex(glutGetWindow())); - break; - - case 'k': - showKeys = !showKeys; - break; - - case 'p': - demoMode = !demoMode; - if (demoMode) - autoDemo(-999); - break; - - case 'D': - debug = !debug; - break; - - case 'd': - dumpIds(); - break; - - case 'h': - if (winId[5] == 0) - makeWindow(5); - else - killWindow(5); - break; - - case 't': - ii = idToIndex(glutGetWindow()); - text[ii] = !text[ii]; - break; - - case 'r': - trackBall(RESET, 0, 0, 0, 0); - break; - - case 'l': - lineWidth += 1; - updateAll(); - break; - - case 'L': - lineWidth -= 1; - if (lineWidth < 1) - lineWidth = 1; - updateAll(); - break; - - case '0': - case '1': - case '2': - case '3': - case '4': - case '6': - i = key - '0'; - winVis[i] = !winVis[i]; - break; - - case ')': - makeWindow(0); - break; - - case '!': - makeWindow(1); - break; - - case '@': - makeWindow(2); - break; - - case '#': - makeWindow(3); - break; - - } -} - -/* specialFunc - Special keys callback (F keys, cursor keys - etc. */ - -/* ARGSUSED1 */ -void -specialFunc(int key, int x, int y) -{ - if (debug || showKeys) - printf("Special key %d\n", key); - - switch (key) { - case GLUT_KEY_PAGE_DOWN: - scrollLine += 10; - updateHelp(); - updateText(); - break; - - case GLUT_KEY_PAGE_UP: - scrollLine -= 10; - updateHelp(); - updateText(); - break; - - case GLUT_KEY_DOWN: - scrollLine += 1; - updateHelp(); - updateText(); - break; - - case GLUT_KEY_UP: - scrollLine -= 1; - updateHelp(); - updateText(); - break; - - case GLUT_KEY_HOME: - scrollLine = 0; - updateHelp(); - updateText(); - break; - - case GLUT_KEY_END: - scrollLine = 9999; - updateHelp(); - updateText(); - break; - - case GLUT_KEY_RIGHT: - scrollCol -= 1; - updateHelp(); - updateText(); - break; - - case GLUT_KEY_LEFT: - scrollCol += 1; - updateHelp(); - updateText(); - break; - } -} - -/* mouseFunc - Mouse button callback */ - -void -mouseFunc(int button, int state, int x, int y) -{ - PR("Mouse button %d, state %d, at pos %d, %d\n", button, state, x, y); - - trackBall(MOUSEBUTTON, button, state, x, y); -} - -/* motionFunc - Mouse movement (with a button down) callback */ - -void -motionFunc(int x, int y) -{ - PR("Mouse motion at %d, %d\n", x, y); - - trackBall(MOUSEMOTION, 0, 0, x, y); - - glutPostRedisplay(); -} - -/* passiveMotionFunc - Mouse movement (with no button down) - callback */ - -void -passiveMotionFunc(int x, int y) -{ - printf("Mouse motion at %d, %d\n", x, y); -} - -/* entryFunc - Window entry event callback */ - -void -entryFunc(int state) -{ - int winId = glutGetWindow(); - PR("Entry event: window id %d (index %d), state %d \n", winId, idToIndex( - winId), state); -} - -/* menuStateFunc - Callback to tell us when menus are popped - up/down. */ - -int menu_state = GLUT_MENU_NOT_IN_USE; - -void -menuStateFunc(int state) -{ - printf("menu stated = %d\n", state); - menu_state = state; - - if (glutGetWindow() == 0) { - PR("menuStateFunc: window invalid\n"); - return; - } - PR("Menus are%sin use\n", state == GLUT_MENU_IN_USE ? " " : " not "); - - if ((state == GLUT_MENU_IN_USE) && menuFreeze) - glutIdleFunc(NULL); - else if (animation) - glutIdleFunc(idleFunc); -} - -/* timerFunc - General test of global timer */ - -void -timerFunc(int value) -{ - printf("timer callback: value %d\n", value); - if (timerOn) { - glutTimerFunc(DELAY, timerFunc, 1); - } -} - -#if 0 -/* delayedReinstateMenuStateCallback - Hack to reinstate - MenuStateCallback after a while. */ - -void -delayedReinstateMenuStateCallback(int state) -{ - glutMenuStateFunc(menuStateFunc); -} - -#endif - -/* setInitDisplayMode - update display modes from display mode - menu */ - -void -setInitDisplayMode(void) -{ - int i; - - displayMode = 0; - - for (i = 0; i < MODES; i++) { - if (modes[i]) { - /* printf("Requesting %s \n", modeNames[i]); */ - displayMode |= glutMode[i]; - } - } - - glutInitDisplayMode(displayMode); - - createMenu6(); - if (!glutGet(GLUT_DISPLAY_MODE_POSSIBLE)) - warning("This display mode not supported\n"); -} - -/* makeWindow - Create one of the windows */ - -void -makeWindow(int index) -{ - char str[99]; - - if (winId[index] != 0) { - /* warning("Attempt to create window which is already - created"); */ - return; - } - switch (index) { - - case 0: /* ordinary RGB windows */ - case 1: - case 2: - case 3: - - setInitDisplayMode(); - glutInitWindowPosition(pos[index][0], pos[index][1]); - glutInitWindowSize(size[index][0], size[index][1]); - winId[index] = glutCreateWindow(" "); - PR("Window %d id = %d \n", index, winId[index]); - gfxInit(index); - - addCallbacks(); - - sprintf(str, "window %d (RGB)", index); - glutSetWindowTitle(str); - sprintf(str, "icon %d", index); - glutSetIconTitle(str); - glutSetMenu(menu1); - glutAttachMenu(GLUT_RIGHT_BUTTON); - break; - - case 4: /* subwindow */ - - setInitDisplayMode(); - winId[index] = glutCreateSubWindow(winId[0], pos[index][0], pos[index] - [1], size[index][0], size[index][1]); - PR("Window %d id = %d \n", index, winId[index]); - gfxInit(index); - glutDisplayFunc(drawScene); - glutVisibilityFunc(visible); - glutReshapeFunc(reshapeFunc); - - break; - - case 5: /* help window */ - case 8: /* text window */ - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); - glutInitWindowPosition(pos[index][0], pos[index][1]); - glutInitWindowSize(size[index][0], size[index][1]); - winId[index] = glutCreateWindow(" "); - PR("Window %d id = %d \n", index, winId[index]); - - /* addCallbacks(); */ - glutKeyboardFunc(keyFunc); - glutSpecialFunc(specialFunc); - - glClearColor(0.15, 0.15, 0.15, 1.0); - glColor3f(1, 1, 1); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluOrtho2D(0, 300, 0, 100); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - if (index == 5) { - glutDisplayFunc(updateHelp); - glutSetWindowTitle("help (RGB) win 5"); - glutSetIconTitle("help"); - } else { - glutDisplayFunc(updateText); - glutSetWindowTitle("text (RGB) win 8"); - glutSetIconTitle("text"); - } - glutSetMenu(menu1); - glutAttachMenu(GLUT_RIGHT_BUTTON); - break; - - case 6: /* color index window */ - case 7: /* color index window */ - glutInitDisplayMode(GLUT_DOUBLE | GLUT_INDEX | GLUT_DEPTH); - if (glutGet(GLUT_DISPLAY_MODE_POSSIBLE)) { - glutInitWindowPosition(pos[index][0], pos[index][1]); - glutInitWindowSize(size[index][0], size[index][1]); - winId[index] = glutCreateWindow(" "); - PR("Window %d id = %d \n", index, winId[index]); - - gfxInit(index); - - addCallbacks(); - - sprintf(str, "window %d (color index)", index); - glutSetWindowTitle(str); - sprintf(str, "icon %d", index); - glutSetIconTitle(str); - glutSetMenu(menu1); - glutAttachMenu(GLUT_RIGHT_BUTTON); - } - break; - - } -} - -/* killWindow - Kill one of the main windows */ - -void -killWindow(int index) -{ - int i; - - if (winId[index] == 0) { - /* fprintf(stderr, "Attempt to kill invalid window in - killWindow\n"); */ - return; - } - PR("Killing win %d\n", index); - glutSetWindow(winId[index]); - - /* Disable all callbacks for safety, although - glutDestroyWindow should do this. */ - - removeCallbacks(); - - glutDestroyWindow(winId[index]); - winId[index] = 0; - winVis[index] = GL_FALSE; - -#if 0 - /* If we reinstate the menu state func here, prog breaks. So - reinstate it a little later. */ - glutTimerFunc(MENUDELAY, delayedReinstateMenuStateCallback, 1); -#endif - - if (index == 5) { /* help */ - scrollLine = 0; - scrollCol = 0; - } - if (index == 8) { /* text window */ - for (i = 0; textPtr[i] != NULL; i++) { - free(textPtr[i]); /* free the text strings */ - textPtr[i] = NULL; - } - } -} - -/* addCallbacks - Add some standard callbacks after creating a - window */ - -void -addCallbacks(void) -{ - glutDisplayFunc(drawScene); - glutVisibilityFunc(visible); - glutReshapeFunc(reshapeFunc); - glutKeyboardFunc(keyFunc); - glutSpecialFunc(specialFunc); - glutMouseFunc(mouseFunc); - glutMotionFunc(motionFunc); - glutEntryFunc(entryFunc); - -/* Callbacks for exotic input devices. Must get my dials & - buttons back. */ - - glutSpaceballMotionFunc(spaceballMotionCB); - glutSpaceballRotateFunc(spaceballRotateCB); - glutSpaceballButtonFunc(spaceballButtonCB); - - glutButtonBoxFunc(buttonBoxCB); - glutDialsFunc(dialsCB); - - glutTabletMotionFunc(tabletMotionCB); - glutTabletButtonFunc(tabletButtonCB); -} - -/* removeCallbacks - Remove all callbacks before destroying a - window. GLUT probably does this anyway but we'll be safe. */ - -void -removeCallbacks(void) -{ - glutVisibilityFunc(NULL); - glutReshapeFunc(NULL); - glutKeyboardFunc(NULL); - glutSpecialFunc(NULL); - glutMouseFunc(NULL); - glutMotionFunc(NULL); - glutEntryFunc(NULL); -} - -/* updateHelp - Update the help window after user scrolls. */ - -void -updateHelp(void) -{ - static char *helpPtr[] = - { - "(Use PGUP, PGDN, HOME, END, arrows to scroll help text) ", - " ", - "A demo program for GLUT. ", - "G Edwards, Aug 95 ", - "Exercises 99% of GLUT calls ", - VERSIONLONG, - " ", - "This text uses GLUT_STROKE_MONO_ROMAN font, a built-in vector font.", - "(Try resizing the help window). ", - " ", - "Keys: ", - " esc quit ", - " t toggle text on/off in each window ", - " h toggle help ", - " q quit current window ", - " a auto demo ", - " p pause/unpause demo ", - " l increase line width (gfx & stroke text) ", - " L decrease line width (gfx & stroke text) ", - " r reset transforms ", - " k show keyboard events ", - " D show all events ", - " ", - "Mouse: ", - " Left button: rotate ", - " Middle button: pan ", - " Left + middle: zoom ", - NULL}; - - updateScrollWindow(5, helpPtr); -} - -/* updateText - Update a text window */ - -void -updateText(void) -{ - int i; - - if (textPtr[0] == NULL) { - for (i = 0; i < 20; i++) { - textPtr[i] = (char *) malloc(50); - strcpy(textPtr[i], "no current text"); - } - textPtr[20] = NULL; - } - updateScrollWindow(8, textPtr); -} - -/* updateScrollWindow */ - -void -updateScrollWindow(int index, char **ptr) -{ - int i, j, lines = 0; - - if (winId[index] == 0) - return; - - glutSetWindow(winId[index]); - - for (i = 0; ptr[i] != NULL; i++) - lines++; - - if (scrollLine < 0) - scrollLine = 0; - if (scrollLine > (lines - 5)) - scrollLine = lines - 5; - - glClear(GL_COLOR_BUFFER_BIT); - - glLineWidth(lineWidth); - - for (i = scrollLine, j = 1; ptr[i] != NULL; i++, j++) - strokeString(scrollCol * 50, 100 - j * 6, ptr[i], - GLUT_STROKE_MONO_ROMAN); - - glutSwapBuffers(); - -} - -/* updateAll - Update all visible windows after soem global - change, eg. line width */ - -void -updateAll(void) -{ - int i; - - if (winId[5] != 0) - updateHelp(); - - if (winId[8] != 0) - updateText(); - - for (i = 0; i < MAXWIN; i++) - if (winId[i]) { - glutSetWindow(winId[i]); - glutPostRedisplay(); - } -} - -/* idToIndex - Convert GLUT window id to our internal index */ - -int -idToIndex(int id) -{ - int i; - for (i = 0; i < MAXWIN; i++) { - if (winId[i] == id) - return i; - } - fprintf(stderr, "error: id %d not found \n", id); - return (-1); -} - -/* warning - warning messages */ - -void -warning(char *msg) -{ - fprintf(stderr, "\007"); - - if (debug) { - fprintf(stderr, "%s", msg); - if (msg[strlen(msg)] != '\n') - fprintf(stderr, "%s", "\n"); - } -} - -/* dumpIds - Debug: dump some internal data */ - -void -dumpIds(void) -{ - int i, j; - - printf("\nInternal data:\n"); - - for (i = 0; i < MAXWIN; i++) - printf("Index %d, glut win id %d, visibility %d\n", i, winId[i], - winVis[i]); - - for (i = 0; i < MAXWIN; i++) { - if (winId[i]) - glutSetWindow(winId[i]); - else { - printf("index %d - no glut window\n", i); - continue; - } - - for (j = 1; j <= MAXWIN; j++) - printf("Index %d, display list %d %s defined\n", i, j, glIsList(j) ? - "is " : "not"); - } -} - -/* autoDemo - Run auto demo/test This is a bit tricky. We need - to start a timer sequence which progressively orders things - to be done. The work really gets done when we return from - our callback. Have to think about the event loop / callback - design here. */ - -void -autoDemo(int value) -{ - -#define STEP(a, b) \ - case a: \ - action(a); \ - glutTimerFunc(AUTODELAY * b, autoDemo, next(a); \ - break; - - static int index = 0; - static int count = 0; - static int restartValue = -2; - - if (value == -999) - value = restartValue; - - restartValue = value; - -#define AUTODELAY2 (unsigned int) (AUTODELAY*0.66) - - /* fprintf(stderr, "autoDemo: value %d \n", value); */ - - if (!demoMode) - return; - - if (menu_state == GLUT_MENU_IN_USE) { - glutTimerFunc(AUTODELAY / 2, autoDemo, value); - return; - } - switch (value) { - -/* Entry point; kill off existing windows. */ - - case -2: - killAllWindows(); - glutTimerFunc(AUTODELAY / 2, autoDemo, 1); - break; - -/* Start making windows */ - - case -1: - makeWindow(0); - glutTimerFunc(AUTODELAY, autoDemo, 0); /* skip case 0 - first time */ - break; - -/* Change shape & backdrop */ - - case 0: - currentShape = (currentShape + 1) % 9; - redefineShapes(currentShape); - count += 1; - if (count % 2) - backdrop = !backdrop; - glutTimerFunc(AUTODELAY, autoDemo, 1); - break; - -/* Keep making windows */ - - case 1: - makeWindow(1); - glutTimerFunc(AUTODELAY, autoDemo, 2); - break; - - case 2: - makeWindow(2); - glutTimerFunc(AUTODELAY, autoDemo, 3); - break; - - case 3: - makeWindow(3); - glutTimerFunc(AUTODELAY, autoDemo, 4); - break; - - case 4: - makeWindow(4); - glutTimerFunc(AUTODELAY, autoDemo, 5); - break; - - case 5: - makeWindow(5); - glutTimerFunc(AUTODELAY * 2, autoDemo, 51); - break; - - case 51: - makeWindow(6); - glutTimerFunc(AUTODELAY * 2, autoDemo, 52); - break; - - case 52: - makeWindow(7); - glutTimerFunc(AUTODELAY * 2, autoDemo, 53); - break; - -/* Kill last 3 windows, leave 4 up. */ - - case 53: - killWindow(7); - glutTimerFunc(AUTODELAY, autoDemo, 54); - break; - - case 54: - killWindow(6); - glutTimerFunc(AUTODELAY, autoDemo, 6); - break; - - case 6: - killWindow(5); - glutTimerFunc(AUTODELAY, autoDemo, 7); - break; - - case 7: - killWindow(4); - glutTimerFunc(AUTODELAY, autoDemo, 700); - break; - -/* Change shape again */ - - case 700: - currentShape = (currentShape + 1) % 9; - redefineShapes(currentShape); - glutTimerFunc(AUTODELAY, autoDemo, 701); - break; - -/* Cycle 4 main windows through various window ops. */ - - case 701: - positionWindow(index); - index = (index + 1) % 4; - glutTimerFunc(AUTODELAY2, autoDemo, index > 0 ? 701 : 702); - break; - - case 702: - reshapeWindow(index); - index = (index + 1) % 4; - glutTimerFunc(AUTODELAY2, autoDemo, index > 0 ? 702 : 703); - break; - - case 703: - iconifyWindow(index); - index = (index + 1) % 4; - glutTimerFunc(AUTODELAY2, autoDemo, index > 0 ? 703 : 704); - break; - - case 704: - showWindow(index); - index = (index + 1) % 4; - glutTimerFunc(AUTODELAY2, autoDemo, index > 0 ? 704 : 705); - break; - - case 705: - hideWindow(index); - index = (index + 1) % 4; - glutTimerFunc(AUTODELAY2, autoDemo, index > 0 ? 705 : 706); - break; - - case 706: - showWindow(index); - index = (index + 1) % 4; - glutTimerFunc(AUTODELAY2, autoDemo, index > 0 ? 706 : 707); - break; - - case 707: - pushWindow(index); - index = (index + 1) % 4; - glutTimerFunc(AUTODELAY2, autoDemo, index > 0 ? 707 : 708); - break; - - case 708: - popWindow(index); - index = (index + 1) % 4; - glutTimerFunc(AUTODELAY2, autoDemo, index > 0 ? 708 : 8); - break; - -/* Kill all windows */ - - case 8: - killWindow(3); - glutTimerFunc(AUTODELAY, autoDemo, 9); - break; - - case 9: - killWindow(2); - glutTimerFunc(AUTODELAY, autoDemo, 10); - break; - - case 10: - killWindow(1); - glutTimerFunc(AUTODELAY, autoDemo, 11); - break; - - case 11: - killWindow(0); - glutTimerFunc(AUTODELAY, autoDemo, -1); /* back to start */ - break; - } - -} - -/* attachMenus - Attach/detach menus to/from mouse buttons */ - -void -attachMenus(void) -{ - int i, b; - int button[3] = - {GLUT_LEFT_BUTTON, GLUT_MIDDLE_BUTTON, GLUT_RIGHT_BUTTON}; - - for (i = 0; i < MAXWIN; i++) { - if (winId[i] != 0) { - for (b = 0; b < 3; b++) { - glutSetWindow(winId[i]); - glutSetMenu(menu1); - if (menuButton[b]) - glutAttachMenu(button[b]); - else - glutDetachMenu(button[b]); - } - } - } -} - -/* killAllWindows - Kill all windows (except 0) */ - -void -killAllWindows(void) -{ - int w; - - for (w = 1; w < MAXWIN; w++) - if (winId[w]) - killWindow(w); -} - -/* makeAllWindows - Make all windows */ - -void -makeAllWindows(void) -{ - int w; - - for (w = 0; w < MAXWIN; w++) - if (!winId[w]) - makeWindow(w); -} - -/* checkArgs - Check command line args */ - -void -checkArgs(int argc, char *argv[]) -{ - int argp; - GLboolean quit = GL_FALSE; - GLboolean error = GL_FALSE; - -#define AA argv[argp] - -#if 0 -#define NEXT argp++; \ - if(argp >= argc) \ - { \ - Usage(); \ - Exit(1); \ - } -#endif - - argp = 1; - while (argp < argc) { - if (match(AA, "-help")) { - commandLineHelp(); - quit = GL_TRUE; - } else if (match(AA, "-version")) { - printf(VERSIONLONG "\n"); - quit = GL_TRUE; - } else if (match(AA, "-auto")) { - demoMode = GL_TRUE; - } else if (match(AA, "-scale")) { - argp++; - scaleFactor = atof(argv[argp]); - } else { - fprintf(stderr, "Unknown arg: %s\n", AA); - error = GL_TRUE; - quit = GL_TRUE; - } - argp++; - } - - if (error) { - commandLineHelp(); - exit(1); - } - if (quit) - exit(0); -} - -/* commandLineHelp - Command line help */ - -void -commandLineHelp(void) -{ - printf("Usage:\n"); - printf(" -h[elp] this stuff\n"); - printf(" -v[ersion] show version\n"); - printf(" -a[uto] start in auto demo mode\n"); - printf(" -s[cale] f scale windows by f\n"); - printf("Standard GLUT args:\n"); - printf(" -iconic start iconic\n"); - printf(" -display DISP use display DISP\n"); - printf(" -direct use direct rendering (default)\n"); - printf(" -indirect use indirect rendering\n"); - printf(" -sync use synchronous X protocol\n"); - printf(" -gldebug check OpenGL errors\n"); - printf(" -geometry WxH+X+Y standard X window spec (overridden here) \n"); -} - -/* match - Match a string (any unique substring). */ - -GLboolean -match(char *arg, char *t) -{ - if (strstr(t, arg)) - return GL_TRUE; - else - return GL_FALSE; -} - -/* scaleWindows - Scale initial window sizes ansd positions */ - -void -scaleWindows(float scale) -{ - int i; - - for (i = 0; i < MAXWIN; i++) { - pos[i][0] = pos[i][0] * scale; - pos[i][1] = pos[i][1] * scale; - size[i][0] = size[i][0] * scale; - size[i][1] = size[i][1] * scale; - } -} - -/* trackBall - A simple trackball (not with proper rotations). */ - -/** A simple trackball with spin = left button - pan = middle button - zoom = left + middle - Doesn't have proper trackball rotation, ie axes which remain fixed in - the scene. We should use the trackball code from 4Dgifts. */ - -#define STARTROTATE(x, y) \ -{ \ - startMX = x; \ - startMY = y; \ -} - -#define STOPROTATE(x, y) \ -{ \ - steadyXangle = varXangle; \ - steadyYangle = varYangle; \ -} - -#define STARTPAN(x, y) \ -{ \ - startMX = x; \ - startMY = y; \ -} - -#define STOPPAN(x, y) \ -{ \ - steadyX = varX; \ - steadyY = varY; \ -} - -#define STARTZOOM(x, y) \ -{ \ - startMX = x; \ - startMY = y; \ -} - -#define STOPZOOM(x, y) \ -{ \ - steadyZ = varZ; \ -} - -static float -fixAngle(float angle) -{ - return angle - floor(angle / 360.0) * 360.0; -} - -void -trackBall(int mode, int button, int state, int x, int y) -{ - static int startMX = 0, startMY = 0; /* initial mouse pos */ - static int deltaMX = 0, deltaMY = 0; /* initial mouse pos */ - static float steadyXangle = 0.0, steadyYangle = 0.0; - static float varXangle = 0.0, varYangle = 0.0; - static float steadyX = 0.0, steadyY = 0.0, steadyZ = 0.0; - static float varX = 0.0, varY = 0.0, varZ = 0.0; - - switch (mode) { - - case RESET: - steadyXangle = steadyYangle = steadyX = steadyY = steadyZ = 0.0; - break; - - case MOUSEBUTTON: - - if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN && !middleDown) { - STARTROTATE(x, y); - leftDown = GL_TRUE; - } else if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN && - middleDown) { - STOPPAN(x, y); - STARTZOOM(x, y); - leftDown = GL_TRUE; - } else if (button == GLUT_MIDDLE_BUTTON && state == GLUT_DOWN && - !leftDown) { - STARTPAN(x, y); - middleDown = GL_TRUE; - } else if (button == GLUT_MIDDLE_BUTTON && state == GLUT_DOWN && - leftDown) { - STOPROTATE(x, y); - STARTZOOM(x, y); - middleDown = GL_TRUE; - } else if (state == GLUT_UP && button == GLUT_LEFT_BUTTON && !middleDown) { - STOPROTATE(x, y); - leftDown = GL_FALSE; - } else if (state == GLUT_UP && button == GLUT_LEFT_BUTTON && middleDown) { - STOPZOOM(x, y); - STARTROTATE(x, y); - leftDown = GL_FALSE; - } else if (state == GLUT_UP && button == GLUT_MIDDLE_BUTTON && !leftDown) { - STOPPAN(x, y); - middleDown = GL_FALSE; - } else if (state == GLUT_UP && button == GLUT_MIDDLE_BUTTON && leftDown) { - STOPZOOM(x, y); - STARTROTATE(x, y); - middleDown = GL_FALSE; - } - break; - - case APPLY: - - if (leftDown && !middleDown) { - glTranslatef(steadyX, steadyY, steadyZ); - glRotatef(varXangle, 0, 1, 0); - glRotatef(varYangle, 1, 0, 0); - } - /* Middle button pan */ - - else if (middleDown && !leftDown) { - glTranslatef(varX, varY, steadyZ); - glRotatef(steadyXangle, 0, 1, 0); - glRotatef(steadyYangle, 1, 0, 0); - } - /* Left + middle zoom. */ - - else if (leftDown && middleDown) { - glTranslatef(steadyX, steadyY, varZ); - glRotatef(steadyXangle, 0, 1, 0); - glRotatef(steadyYangle, 1, 0, 0); - } - /* Nothing down. */ - - else { - glTranslatef(steadyX, steadyY, steadyZ); - glRotatef(steadyXangle, 0, 1, 0); - glRotatef(steadyYangle, 1, 0, 0); - } - break; - - case MOUSEMOTION: - - deltaMX = x - startMX; - deltaMY = startMY - y; - - if (leftDown && !middleDown) { - varXangle = fixAngle(steadyXangle + deltaMX); - varYangle = fixAngle(steadyYangle + deltaMY); - } else if (middleDown && !leftDown) { - varX = steadyX + deltaMX / 100.0; - varY = steadyY + deltaMY / 100.0; - } else if (leftDown && middleDown) { - varZ = steadyZ - deltaMY / 50.0; - } - break; - } - -} - -/* Callbacks for exotic input devices. These have not been - tested yet owing to the usual complete absence of such - devices in the UK support group. */ - -/* spaceballMotionCB */ - -void -spaceballMotionCB(int x, int y, int z) -{ - printf("spaceballMotionCB: translations are X %d, Y %d, Z %d\n", x, y, z); -} - -/* spaceballRotateCB */ - -void -spaceballRotateCB(int x, int y, int z) -{ - printf("spaceballRotateCB: rotations are X %d, Y %d, Z %d\n", x, y, z); -} - -/* spaceballButtonCB */ - -void -spaceballButtonCB(int button, int state) -{ - printf("spaceballButtonCB: button %d, state %d\n", button, state); -} - -/* buttonBoxCB */ - -void -buttonBoxCB(int button, int state) -{ - printf("buttonBoxCB: button %d, state %d\n", button, state); -} - -/* dialsCB */ - -void -dialsCB(int dial, int value) -{ - printf("dialsCB: dial %d, value %d\n", dial, value); -} - -/* tabletMotionCB */ - -void -tabletMotionCB(int x, int y) -{ - printf("tabletMotionCB: X %d, Y %d\n", x, y); -} - -/* tabletButtonCB */ - -/* ARGSUSED2 */ -void -tabletButtonCB(int button, int state, int dummy1, int dummy2) -{ - printf("tabletButtonCB: button %d, state %d\n", button, state); -} diff --git a/lib/glut-3.7.6/test/glut/bigtest.dsp b/lib/glut-3.7.6/test/glut/bigtest.dsp deleted file mode 100644 index d8ee90298..000000000 --- a/lib/glut-3.7.6/test/glut/bigtest.dsp +++ /dev/null @@ -1,90 +0,0 @@ -# Microsoft Developer Studio Project File - Name="bigtest" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=bigtest - 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 "bigtest.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 "bigtest.mak" CFG="bigtest - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "bigtest - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "bigtest - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "bigtest - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 glu32.lib opengl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "bigtest - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "bigtest___Win32_Debug" -# PROP BASE Intermediate_Dir "bigtest___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 glu32.lib opengl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "bigtest - Win32 Release" -# Name "bigtest - Win32 Debug" -# Begin Source File - -SOURCE=.\bigtest.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/test/glut/cursor_test.c b/lib/glut-3.7.6/test/glut/cursor_test.c deleted file mode 100644 index 9f2e65559..000000000 --- a/lib/glut-3.7.6/test/glut/cursor_test.c +++ /dev/null @@ -1,193 +0,0 @@ - -/* 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 -#include -#include - -int cursor[] = -{ - GLUT_CURSOR_INHERIT, - GLUT_CURSOR_NONE, - GLUT_CURSOR_FULL_CROSSHAIR, - GLUT_CURSOR_RIGHT_ARROW, - GLUT_CURSOR_LEFT_ARROW, - GLUT_CURSOR_INFO, - GLUT_CURSOR_DESTROY, - GLUT_CURSOR_HELP, - GLUT_CURSOR_CYCLE, - GLUT_CURSOR_SPRAY, - GLUT_CURSOR_WAIT, - GLUT_CURSOR_TEXT, - GLUT_CURSOR_CROSSHAIR, - GLUT_CURSOR_UP_DOWN, - GLUT_CURSOR_LEFT_RIGHT, - GLUT_CURSOR_TOP_SIDE, - GLUT_CURSOR_BOTTOM_SIDE, - GLUT_CURSOR_LEFT_SIDE, - GLUT_CURSOR_RIGHT_SIDE, - GLUT_CURSOR_TOP_LEFT_CORNER, - GLUT_CURSOR_TOP_RIGHT_CORNER, - GLUT_CURSOR_BOTTOM_RIGHT_CORNER, - GLUT_CURSOR_BOTTOM_LEFT_CORNER, - 0, -}; - -char *name[] = -{ - "INHERIT", - "NONE", - "FULL CROSSHAIR", - "RIGHT ARROW", - "LEFT ARROW", - "INFO", - "DESTROY", - "HELP", - "CYCLE", - "SPRAY", - "WAIT", - "TEXT", - "CROSSHAIR", - "UP DOWN", - "LEFT RIGHT", - "TOP SIDE", - "BOTTOM SIDE", - "LEFT SIDE", - "RIGHT SIDE", - "TOP LEFT CORNER", - "TOP RIGHT CORNER", - "BOTTOM RIGHT CORNER", - "BOTTOM LEFT CORNER", - NULL, -}; - -int win; - -void -futureSetCursor(int value) -{ - glutSetCursor(GLUT_CURSOR_HELP); -} - -void -menu(int value) -{ - int cursor; - - if(value < 0) { - switch(value) { - case -1: - glutSetWindow(win); - glutWarpPointer(25, 25); - return; - case -2: - glutSetWindow(win); - glutWarpPointer(-25, -25); - return; - case -3: - glutSetWindow(win); - glutWarpPointer(250, 250); - return; - case -4: - glutSetWindow(win); - glutWarpPointer(2000, 200); - return; - case -5: - glutTimerFunc(3000, futureSetCursor, glutGetWindow()); - return; - } - } - glutSetCursor(value); - cursor = glutGet(GLUT_WINDOW_CURSOR); - if (cursor != value) { - printf("cursor_test: cursor not set right\n"); - exit(1); - } -} - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - glFlush(); -} - -void keyboard0( unsigned char key, int x, int y ) -{ - printf( "main window: %d %c (%d, %d)\n", key, key, x, y ); -} - -void keyboardup( unsigned char key, int x, int y ) -{ - printf( "main window (UP): %d %c (%d, %d)\n", key, key, x, y ); -} - -void keyboard1( unsigned char key, int x, int y ) -{ - printf( "subwindow 1: %d %c (%d, %d)\n", key, key, x, y ); -} - -void keyboard2( unsigned char key, int x, int y ) -{ - printf( "subwindow 2: %d %c (%d, %d)\n", key, key, x, y ); -} - -void keyboard3( unsigned char key, int x, int y ) -{ - printf( "subwindow 3: %d %c (%d, %d)\n", key, key, x, y ); -} - -void motion( int x, int y ) -{ - printf( "mouse motion: %d %d\n", x, y ); -} - -int -main(int argc, char **argv) -{ - int i; - int sub1, sub2; - - glutInit(&argc, argv); - win = glutCreateWindow("cursor test"); - glutSetCursor(GLUT_CURSOR_INFO); - glClearColor(0.49, 0.62, 0.75, 0.0); - glutDisplayFunc(display); - glutCreateMenu(menu); - for (i = 0; name[i] != NULL; i++) { - glutAddMenuEntry(name[i], cursor[i]); - } - glutAddMenuEntry("Warp to (25,25)", -1); - glutAddMenuEntry("Warp to (-25,-25)", -2); - glutAddMenuEntry("Warp to (250,250)", -3); - glutAddMenuEntry("Warp to (2000,200)", -4); - glutAddMenuEntry("Set cursor in 3 secs", -5); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutKeyboardFunc( keyboard0 ); - glutKeyboardUpFunc( keyboardup ); - glutMotionFunc( motion ); - sub1 = glutCreateSubWindow(win, 10, 10, 90, 90); - glutSetCursor(GLUT_CURSOR_CROSSHAIR); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutKeyboardFunc( keyboard1 ); - glClearColor(0.3, 0.82, 0.55, 0.0); - glutDisplayFunc(display); - sub2 = glutCreateSubWindow(win, 80, 80, 90, 90); - glutSetCursor(GLUT_CURSOR_WAIT); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutKeyboardFunc( keyboard2 ); - glClearColor(0.9, 0.2, 0.2, 0.0); - glutDisplayFunc(display); - glutCreateSubWindow(sub2, 30, 30, 30, 30 ); - glutSetCursor(GLUT_CURSOR_TEXT); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutKeyboardFunc( keyboard3 ); - glClearColor(0.9, 0.9, 0.2, 0.0); - glutDisplayFunc(display); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/test/glut/cursor_test.dsp b/lib/glut-3.7.6/test/glut/cursor_test.dsp deleted file mode 100644 index bd53ff719..000000000 --- a/lib/glut-3.7.6/test/glut/cursor_test.dsp +++ /dev/null @@ -1,90 +0,0 @@ -# Microsoft Developer Studio Project File - Name="cursor_test" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=cursor_test - 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 "cursor_test.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 "cursor_test.mak" CFG="cursor_test - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "cursor_test - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "cursor_test - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "cursor_test - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "cursor_test - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "cursor_test - Win32 Release" -# Name "cursor_test - Win32 Debug" -# Begin Source File - -SOURCE=.\cursor_test.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/test/glut/joy_test.c b/lib/glut-3.7.6/test/glut/joy_test.c deleted file mode 100644 index b2641360b..000000000 --- a/lib/glut-3.7.6/test/glut/joy_test.c +++ /dev/null @@ -1,72 +0,0 @@ - -/* 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 -#include -#include - -void -joystick(unsigned int buttonMask, int x, int y, int z) -{ - printf("joy 0x%x, x=%d y=%d z=%d\n", buttonMask, x, y, z); -} - -void -joyPoll(void) -{ - printf("force\n"); - glutForceJoystickFunc(); -} - -void -menu(int value) -{ - switch(value) { - case 1: - glutJoystickFunc(joystick, 100); - glutIdleFunc(NULL); - break; - case 2: - glutJoystickFunc(NULL, 0); - glutIdleFunc(NULL); - break; - case 3: - glutJoystickFunc(joystick, 0); - glutIdleFunc(joyPoll); - break; - } -} - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - glFlush(); -} - -void -keyboard(unsigned char c, int x, int y) -{ - if (c == 27) exit(0); -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutCreateWindow("joystick test"); - glClearColor(0.29, 0.62, 1.0, 0.0); - glutDisplayFunc(display); - glutKeyboardFunc(keyboard); - glutCreateMenu(menu); - glutAddMenuEntry("Enable joystick callback", 1); - glutAddMenuEntry("Disable joystick callback", 2); - glutAddMenuEntry("Force joystick polling", 3); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/test/glut/joy_test.dsp b/lib/glut-3.7.6/test/glut/joy_test.dsp deleted file mode 100644 index bd4322937..000000000 --- a/lib/glut-3.7.6/test/glut/joy_test.dsp +++ /dev/null @@ -1,90 +0,0 @@ -# Microsoft Developer Studio Project File - Name="joy_test" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=joy_test - 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 "joy_test.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 "joy_test.mak" CFG="joy_test - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "joy_test - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "joy_test - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "joy_test - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "joy_test - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "joy_test - Win32 Release" -# Name "joy_test - Win32 Debug" -# Begin Source File - -SOURCE=.\joy_test.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/test/glut/keyup_test.c b/lib/glut-3.7.6/test/glut/keyup_test.c deleted file mode 100644 index ab92a91f6..000000000 --- a/lib/glut-3.7.6/test/glut/keyup_test.c +++ /dev/null @@ -1,104 +0,0 @@ - -/* 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 -#include - -void -key(unsigned char key, int x, int y) -{ - printf("kDN: %c <%d> @ (%d,%d)\n", key, key, x, y); -} - -void -keyup(unsigned char key, int x, int y) -{ - printf("kUP: %c <%d> @ (%d,%d)\n", key, key, x, y); -} - -void -special(int key, int x, int y) -{ - printf("sDN: %d @ (%d,%d)\n", key, x, y); -} - -void -specialup(int key, int x, int y) -{ - printf("sUP: %d @ (%d,%d)\n", key, x, y); -} - -void -menu(int value) -{ - switch(value) { - case 1: - glutIgnoreKeyRepeat(1); - break; - case 2: - glutIgnoreKeyRepeat(0); - break; - case 3: - glutKeyboardFunc(NULL); - break; - case 4: - glutKeyboardFunc(key); - break; - case 5: - glutKeyboardUpFunc(NULL); - break; - case 6: - glutKeyboardUpFunc(keyup); - break; - case 7: - glutSpecialFunc(NULL); - break; - case 8: - glutSpecialFunc(special); - break; - case 9: - glutSpecialUpFunc(NULL); - break; - case 10: - glutSpecialUpFunc(specialup); - break; - } -} - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - glFlush(); -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutCreateWindow("keyup test"); - glClearColor(0.49, 0.62, 0.75, 0.0); - glutDisplayFunc(display); - glutKeyboardFunc(key); - glutKeyboardUpFunc(keyup); - glutSpecialFunc(special); - glutSpecialUpFunc(specialup); - glutCreateMenu(menu); - glutAddMenuEntry("Ignore autorepeat", 1); - glutAddMenuEntry("Accept autorepeat", 2); - glutAddMenuEntry("Stop key", 3); - glutAddMenuEntry("Start key", 4); - glutAddMenuEntry("Stop key up", 5); - glutAddMenuEntry("Start key up", 6); - glutAddMenuEntry("Stop special", 7); - glutAddMenuEntry("Start special", 8); - glutAddMenuEntry("Stop special up", 9); - glutAddMenuEntry("Start special up", 10); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/test/glut/keyup_test.dsp b/lib/glut-3.7.6/test/glut/keyup_test.dsp deleted file mode 100644 index 11f0b67c0..000000000 --- a/lib/glut-3.7.6/test/glut/keyup_test.dsp +++ /dev/null @@ -1,90 +0,0 @@ -# Microsoft Developer Studio Project File - Name="keyup_test" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=keyup_test - 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 "keyup_test.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 "keyup_test.mak" CFG="keyup_test - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "keyup_test - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "keyup_test - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "keyup_test - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "keyup_test - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "keyup_test - Win32 Release" -# Name "keyup_test - Win32 Debug" -# Begin Source File - -SOURCE=.\keyup_test.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/test/glut/menu_test.c b/lib/glut-3.7.6/test/glut/menu_test.c deleted file mode 100644 index c75c8ecd2..000000000 --- a/lib/glut-3.7.6/test/glut/menu_test.c +++ /dev/null @@ -1,165 +0,0 @@ - -/* 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 -#include -#include - -int win, subwin; -int mainmenu, submenu; -int item = 666; - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - glFlush(); -} - -/* ARGSUSED1 */ -void -gokey(unsigned char key, int x, int y) -{ - char str[100]; - int mods; - - mods = glutGetModifiers(); - printf("key = %d, mods = 0x%x\n", key, mods); - if (mods & GLUT_ACTIVE_ALT) { - switch (key) { - case '1': - printf("Change to sub menu 1\n"); - glutChangeToSubMenu(1, "sub 1", submenu); - break; - case '2': - printf("Change to sub menu 2\n"); - glutChangeToSubMenu(2, "sub 2", submenu); - break; - case '3': - printf("Change to sub menu 3\n"); - glutChangeToSubMenu(3, "sub 3", submenu); - break; - case '4': - printf("Change to sub menu 4\n"); - glutChangeToSubMenu(4, "sub 4", submenu); - break; - case '5': - printf("Change to sub menu 5\n"); - glutChangeToSubMenu(5, "sub 5", submenu); - break; - } - } else { - switch (key) { - case '1': - printf("Change to menu entry 1\n"); - glutChangeToMenuEntry(1, "entry 1", 1); - break; - case '2': - printf("Change to menu entry 2\n"); - glutChangeToMenuEntry(2, "entry 2", 2); - break; - case '3': - printf("Change to menu entry 3\n"); - glutChangeToMenuEntry(3, "entry 3", 3); - break; - case '4': - printf("Change to menu entry 4\n"); - glutChangeToMenuEntry(4, "entry 4", 4); - break; - case '5': - printf("Change to menu entry 5\n"); - glutChangeToMenuEntry(5, "entry 5", 5); - break; - case 'a': - case 'A': - printf("Adding menu entry %d\n", item); - sprintf(str, "added entry %d", item); - glutAddMenuEntry(str, item); - item++; - break; - case 's': - case 'S': - printf("Adding submenu %d\n", item); - sprintf(str, "added submenu %d", item); - glutAddSubMenu(str, submenu); - item++; - break; - case 'q': - printf("Remove 1\n"); - glutRemoveMenuItem(1); - break; - case 'w': - printf("Remove 2\n"); - glutRemoveMenuItem(2); - break; - case 'e': - printf("Remove 3\n"); - glutRemoveMenuItem(3); - break; - case 'r': - printf("Remove 4\n"); - glutRemoveMenuItem(4); - break; - case 't': - printf("Remove 5\n"); - glutRemoveMenuItem(5); - break; - } - } -} - -void -keyboard(unsigned char key, int x, int y) -{ - glutSetMenu(mainmenu); - gokey(key, x, y); -} - -void -keyboard2(unsigned char key, int x, int y) -{ - glutSetMenu(submenu); - gokey(key, x, y); -} - -void -menu(int value) -{ - printf("menu: entry = %d\n", value); -} - -void -menu2(int value) -{ - printf("menu2: entry = %d\n", value); -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - win = glutCreateWindow("menu test"); - glClearColor(0.3, 0.3, 0.3, 0.0); - glutDisplayFunc(display); - glutKeyboardFunc(keyboard); - submenu = glutCreateMenu(menu2); - glutAddMenuEntry("Sub menu 1", 1001); - glutAddMenuEntry("Sub menu 2", 1002); - glutAddMenuEntry("Sub menu 3", 1003); - mainmenu = glutCreateMenu(menu); - glutAddMenuEntry("First", -1); - glutAddMenuEntry("Second", -2); - glutAddMenuEntry("Third", -3); - glutAddSubMenu("Submenu init", submenu); - glutAttachMenu(GLUT_RIGHT_BUTTON); - subwin = glutCreateSubWindow(win, 50, 50, 50, 50); - glClearColor(0.7, 0.7, 0.7, 0.0); - glutDisplayFunc(display); - glutKeyboardFunc(keyboard2); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/test/glut/menu_test.dsp b/lib/glut-3.7.6/test/glut/menu_test.dsp deleted file mode 100644 index 2a9da558b..000000000 --- a/lib/glut-3.7.6/test/glut/menu_test.dsp +++ /dev/null @@ -1,90 +0,0 @@ -# Microsoft Developer Studio Project File - Name="menu_test" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=menu_test - 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 "menu_test.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 "menu_test.mak" CFG="menu_test - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "menu_test - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "menu_test - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "menu_test - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "menu_test - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "menu_test - Win32 Release" -# Name "menu_test - Win32 Debug" -# Begin Source File - -SOURCE=.\menu_test.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/test/glut/over_test.c b/lib/glut-3.7.6/test/glut/over_test.c deleted file mode 100644 index 8271db2e4..000000000 --- a/lib/glut-3.7.6/test/glut/over_test.c +++ /dev/null @@ -1,388 +0,0 @@ - -/* 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 -#include -#include - -int on = 0; -int independent = 0; -int main_w, hidden_w, s1, s2; -float x = 0, y = 0; - -void -overlay_display(void) -{ - printf("overlay_display: damaged=%d\n", glutLayerGet(GLUT_OVERLAY_DAMAGED)); - if (on) { - glutUseLayer(GLUT_OVERLAY); - glClear(GL_COLOR_BUFFER_BIT); - glBegin(GL_POLYGON); - glVertex2f(.2 + x, .2 + y); - glVertex2f(.5 + x, .5 + y); - glVertex2f(.2 + x, .5 + y); - glEnd(); - glFlush(); - } -} - -void -display(void) -{ - printf("normal_display: damaged=%d\n", glutLayerGet(GLUT_NORMAL_DAMAGED)); - glutUseLayer(GLUT_NORMAL); - glClear(GL_COLOR_BUFFER_BIT); - glColor3f(1.0, 0.0, 0.0); - glBegin(GL_POLYGON); - glVertex2f(.2, .28); - glVertex2f(.5, .58); - glVertex2f(.2, .58); - glEnd(); - - if (!independent) { - overlay_display(); - } else { - printf("not calling overlay_display\n"); - } -} - -void -hidden_display(void) -{ - printf("hidden_display: this should not be called ever\n"); -} - -void -reshape(int w, int h) -{ - glutUseLayer(GLUT_NORMAL); - glViewport(0, 0, w, h); - - if (on) { - glutUseLayer(GLUT_OVERLAY); - glViewport(0, 0, w, h); - printf("w=%d, h=%d\n", w, h); - } -} - -void -special(int c, int w, int h) -{ - printf("special %d w=%d h=%d\n", c, w, h); - if (on) { - switch (c) { - case GLUT_KEY_LEFT: - x -= 0.1; - break; - case GLUT_KEY_RIGHT: - x += 0.1; - break; - case GLUT_KEY_UP: - y += 0.1; - break; - case GLUT_KEY_DOWN: - y -= 0.1; - break; - } - glutPostOverlayRedisplay(); - } -} - -void -key(unsigned char c, int w, int h) -{ - int transP; - - printf("c=%d w=%d h=%d\n", c, w, h); - switch (c) { - case 'e': - glutEstablishOverlay(); - independent = 0; - transP = glutLayerGet(GLUT_TRANSPARENT_INDEX); - glClearIndex(transP); - glutSetColor((transP + 1) % 2, 1.0, 1.0, 0.0); - glIndexi((transP + 1) % 2); - on = 1; - break; - case 'r': - glutRemoveOverlay(); - on = 0; - break; - case 'm': - if (glutLayerGet(GLUT_HAS_OVERLAY)) { - int pixel; - GLfloat red, green, blue; - - transP = glutLayerGet(GLUT_TRANSPARENT_INDEX); - pixel = (transP + 1) % 2; - red = glutGetColor(pixel, GLUT_RED) + 0.2; - if (red > 1.0) - red = red - 1.0; - green = glutGetColor(pixel, GLUT_GREEN) - 0.1; - if (green > 1.0) - green = green - 1.0; - blue = glutGetColor(pixel, GLUT_BLUE) + 0.1; - if (blue > 1.0) - blue = blue - 1.0; - glutSetColor(pixel, red, green, blue); - } - break; - case 'h': - glutSetWindow(hidden_w); - glutHideWindow(); - glutSetWindow(s2); - glutHideWindow(); - break; - case 's': - glutSetWindow(hidden_w); - glutShowWindow(); - glutSetWindow(s2); - glutShowWindow(); - break; - case 'H': - glutHideOverlay(); - break; - case 'S': - glutShowOverlay(); - break; - case 'D': - glutDestroyWindow(main_w); - exit(0); - break; - case ' ': - printf("overlay possible: %d\n", glutLayerGet(GLUT_OVERLAY_POSSIBLE)); - printf("layer in use: %d\n", glutLayerGet(GLUT_LAYER_IN_USE)); - printf("has overlay: %d\n", glutLayerGet(GLUT_HAS_OVERLAY)); - printf("transparent index: %d\n", glutLayerGet(GLUT_TRANSPARENT_INDEX)); - break; - } -} - -/* ARGSUSED1 */ -void -key2(unsigned char c, int w, int h) -{ - int transP; - - printf("c=%d\n", c); - switch (c) { - case 'g': - glutReshapeWindow( - glutGet(GLUT_WINDOW_WIDTH) + 2, glutGet(GLUT_WINDOW_HEIGHT) + 2); - break; - case 's': - glutReshapeWindow( - glutGet(GLUT_WINDOW_WIDTH) - 2, glutGet(GLUT_WINDOW_HEIGHT) - 2); - break; - case 'u': - glutPopWindow(); - break; - case 'd': - glutPushWindow(); - break; - case 'e': - glutEstablishOverlay(); - transP = glutLayerGet(GLUT_TRANSPARENT_INDEX); - glClearIndex(transP); - glutSetColor((transP + 1) % 2, 0.0, 0.25, 0.0); - glIndexi((transP + 1) % 2); - break; - case 'c': - if (glutLayerGet(GLUT_HAS_OVERLAY)) { - glutUseLayer(GLUT_OVERLAY); - glutCopyColormap(main_w); - } - break; - case 'r': - glutRemoveOverlay(); - break; - case ' ': - printf("overlay possible: %d\n", glutLayerGet(GLUT_OVERLAY_POSSIBLE)); - printf("layer in use: %d\n", glutLayerGet(GLUT_LAYER_IN_USE)); - printf("has overlay: %d\n", glutLayerGet(GLUT_HAS_OVERLAY)); - printf("transparent index: %d\n", glutLayerGet(GLUT_TRANSPARENT_INDEX)); - break; - } -} - -void -vis(int state) -{ - if (state == GLUT_VISIBLE) - printf("visible %d\n", glutGetWindow()); - else - printf("NOT visible %d\n", glutGetWindow()); -} - -void -entry(int state) -{ - if (state == GLUT_LEFT) - printf("LEFT %d\n", glutGetWindow()); - else - printf("entered %d\n", glutGetWindow()); -} - -void -motion(int x, int y) -{ - printf("motion x=%x y=%d\n", x, y); -} - -void -mouse(int b, int s, int x, int y) -{ - printf("b=%d s=%d x=%d y=%d\n", b, s, x, y); -} - -void -display2(void) -{ - glutUseLayer(GLUT_NORMAL); - glClear(GL_COLOR_BUFFER_BIT); - glFlush(); - - if (glutLayerGet(GLUT_HAS_OVERLAY)) { - glutUseLayer(GLUT_OVERLAY); - glClear(GL_COLOR_BUFFER_BIT); - glBegin(GL_POLYGON); - glVertex2f(.2, .28); - glVertex2f(.5, .58); - glVertex2f(.2, .58); - glEnd(); - glFlush(); - } -} - -void -dial(int dial, int value) -{ - printf("dial %d %d (%d)\n", dial, value, glutGetWindow()); -} - -void -box(int button, int state) -{ - printf("box %d %d (%d)\n", button, state, glutGetWindow()); -} - -void -main_menu(int option) -{ - switch (option) { - case 1: - if (glutLayerGet(GLUT_HAS_OVERLAY)) { - independent = 1; - glutOverlayDisplayFunc(overlay_display); - } - break; - case 2: - if (glutLayerGet(GLUT_HAS_OVERLAY)) { - independent = 0; - glutOverlayDisplayFunc(NULL); - } - break; - case 666: - exit(0); - break; - } -} - -void -s2_menu(int option) -{ - int transP; - - switch (option) { - case 1: - glutRemoveOverlay(); - break; - case 2: - glutEstablishOverlay(); - transP = glutLayerGet(GLUT_TRANSPARENT_INDEX); - glClearIndex(transP); - glutSetColor((transP + 1) % 2, 0.0, 0.25, 0.0); - glIndexi((transP + 1) % 2); - break; - case 666: - exit(0); - break; - } -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - - glutInitDisplayMode(GLUT_RGB); - glutInitWindowSize(210, 210); - - main_w = glutCreateWindow("overlay test"); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glClearColor(1.0, 0.0, 1.0, 1.0); - - glutKeyboardFunc(key); - glutVisibilityFunc(vis); - glutEntryFunc(entry); - glutSpecialFunc(special); - - glutMotionFunc(motion); - glutMouseFunc(mouse); - - glutCreateMenu(main_menu); - glutAddMenuEntry("Dual display callbacks", 1); - glutAddMenuEntry("Single display callbacks", 2); - glutAddMenuEntry("Quit", 666); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - hidden_w = glutCreateSubWindow(main_w, 10, 10, 100, 90); - /* hidden_w is completely obscured by its own s1 subwindow. - While display, entry and visibility callbacks are - registered, they will never be called. */ - glutDisplayFunc(hidden_display); - glutEntryFunc(entry); - glutVisibilityFunc(vis); - - s1 = glutCreateSubWindow(hidden_w, 0, 0, 100, 90); - glClearColor(0.0, 0.0, 1.0, 1.0); - glutDisplayFunc(display2); -#if 0 - glutKeyboardFunc(key2); -#endif - glutVisibilityFunc(vis); - glutEntryFunc(entry); - - s2 = glutCreateSubWindow(main_w, 35, 35, 100, 90); - glClearColor(0.5, 0.0, 0.5, 1.0); - glutDisplayFunc(display2); -#if 1 - glutKeyboardFunc(key2); -#endif - glutVisibilityFunc(vis); - glutEntryFunc(entry); - -#if 1 - glutCreateMenu(s2_menu); - glutAddMenuEntry("Remove overlay", 1); - glutAddMenuEntry("Establish overlay", 2); - glutAddMenuEntry("Quit", 666); - glutAttachMenu(GLUT_RIGHT_BUTTON); -#endif - - glutInitDisplayMode(GLUT_INDEX); - -#if 1 - glutSetWindow(main_w); - glutDialsFunc(dial); - glutButtonBoxFunc(box); -#endif - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/test/glut/over_test.dsp b/lib/glut-3.7.6/test/glut/over_test.dsp deleted file mode 100644 index f6a22c889..000000000 --- a/lib/glut-3.7.6/test/glut/over_test.dsp +++ /dev/null @@ -1,90 +0,0 @@ -# Microsoft Developer Studio Project File - Name="over_test" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=over_test - 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 "over_test.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 "over_test.mak" CFG="over_test - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "over_test - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "over_test - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "over_test - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "over_test - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "over_test - Win32 Release" -# Name "over_test - Win32 Debug" -# Begin Source File - -SOURCE=.\over_test.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/test/glut/shape_test.c b/lib/glut-3.7.6/test/glut/shape_test.c deleted file mode 100644 index a51099b6f..000000000 --- a/lib/glut-3.7.6/test/glut/shape_test.c +++ /dev/null @@ -1,194 +0,0 @@ - -/* 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 - -float w, h; - -GLfloat light_diffuse[] = -{1.0, 1.0, 1.0, 1.0}; -GLfloat light_position[] = -{1.0, 1.0, 1.0, 0.0}; -GLUquadricObj *qobj; - -void -reshape(int nw, int nh) -{ - w = nw; - h = nh; -} - -void -render(int shape) -{ - switch (shape) { - case 1: - glPushMatrix(); - glScalef(1.2, 1.2, 1.2); - glutWireSphere(1.0, 20, 20); - glPopMatrix(); - break; - case 10: - glPushMatrix(); - glScalef(1.2, 1.2, 1.2); - glEnable(GL_LIGHTING); - glutSolidSphere(1.0, 20, 20); - glDisable(GL_LIGHTING); - glPopMatrix(); - break; - case 2: - glPushMatrix(); - glRotatef(-90, 1.0, 0.0, 0.0); - glutWireCone(1.0, 1.3, 20, 20); - glPopMatrix(); - break; - case 11: - glPushMatrix(); - glRotatef(-90, 1.0, 0.0, 0.0); - glEnable(GL_LIGHTING); - glutSolidCone(1.0, 1.3, 20, 20); - glDisable(GL_LIGHTING); - glPopMatrix(); - break; - case 3: - glPushMatrix(); - glRotatef(-20, 0.0, 0.0, 1.0); - glScalef(1.8, 1.8, 1.8); - glutWireCube(1.0); - glPopMatrix(); - break; - case 12: - glPushMatrix(); - glRotatef(-20, 0.0, 0.0, 1.0); - glScalef(1.8, 1.8, 1.8); - glEnable(GL_LIGHTING); - glutSolidCube(1.0); - glDisable(GL_LIGHTING); - glPopMatrix(); - break; - case 4: - glPushMatrix(); - glScalef(0.9, 0.9, 0.9); - glutWireTorus(0.5, 1.0, 15, 15); - glPopMatrix(); - break; - case 13: - glPushMatrix(); - glScalef(0.9, 0.9, 0.9); - glEnable(GL_LIGHTING); - glutSolidTorus(0.5, 1.0, 15, 15); - glDisable(GL_LIGHTING); - glPopMatrix(); - break; - case 5: - glPushMatrix(); - glScalef(0.8, 0.8, 0.8); - glutWireDodecahedron(); - glPopMatrix(); - break; - case 14: - glPushMatrix(); - glScalef(0.8, 0.8, 0.8); - glEnable(GL_LIGHTING); - glutSolidDodecahedron(); - glDisable(GL_LIGHTING); - glPopMatrix(); - break; - case 6: - glPushMatrix(); - glScalef(0.9, 0.9, 0.9); - glutWireTeapot(1.0); - glPopMatrix(); - break; - case 15: - glPushMatrix(); - glScalef(0.9, 0.9, 0.9); - glEnable(GL_LIGHTING); - glutSolidTeapot(1.0); - glDisable(GL_LIGHTING); - glPopMatrix(); - break; - case 7: - glutWireOctahedron(); - break; - case 16: - glEnable(GL_LIGHTING); - glutSolidOctahedron(); - glDisable(GL_LIGHTING); - break; - case 8: - glPushMatrix(); - glScalef(1.2, 1.2, 1.2); - glutWireTetrahedron(); - glPopMatrix(); - break; - case 17: - glPushMatrix(); - glScalef(1.2, 1.2, 1.2); - glEnable(GL_LIGHTING); - glutSolidTetrahedron(); - glDisable(GL_LIGHTING); - glPopMatrix(); - break; - case 9: - glutWireIcosahedron(); - break; - case 18: - glEnable(GL_LIGHTING); - glutSolidIcosahedron(); - glDisable(GL_LIGHTING); - break; - } -} - -void -display(void) -{ - int i, j; - - glViewport(0, 0, w, h); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - for (j = 0; j < 6; j++) { - for (i = 0; i < 3; i++) { - glViewport(w / 3 * i, h / 6 * j, w / 3, h / 6); - render(18 - (j * 3 + (2 - i))); - } - } - glFlush(); -} - -int -main(int argc, char **argv) -{ - glutInitWindowSize(475, 950); - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGB); - glutCreateWindow("GLUT geometric shapes"); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - - glClearColor(1.0, 1.0, 1.0, 1.0); - glColor3f(0.0, 0.0, 0.0); - glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); - glLightfv(GL_LIGHT0, GL_POSITION, light_position); - glEnable(GL_LIGHT0); - glEnable(GL_DEPTH_TEST); - glMatrixMode(GL_PROJECTION); - gluPerspective( /* field of view in degree */ 22.0, - /* aspect ratio */ 1.0, - /* Z near */ 1.0, /* Z far */ 10.0); - glMatrixMode(GL_MODELVIEW); - gluLookAt(0.0, 0.0, 5.0, /* eye is at (0,0,5) */ - 0.0, 0.0, 0.0, /* center is at (0,0,0) */ - 0.0, 1.0, 0.); /* up is in postivie Y direction */ - glTranslatef(0.0, 0.0, -3.0); - glRotatef(25, 1.0, 0.0, 0.0); - glRotatef(5, 0.0, 1.0, 0.0); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/test/glut/shape_test.dsp b/lib/glut-3.7.6/test/glut/shape_test.dsp deleted file mode 100644 index 0231bf808..000000000 --- a/lib/glut-3.7.6/test/glut/shape_test.dsp +++ /dev/null @@ -1,90 +0,0 @@ -# Microsoft Developer Studio Project File - Name="shape_test" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=shape_test - 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 "shape_test.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 "shape_test.mak" CFG="shape_test - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "shape_test - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "shape_test - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "shape_test - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "shape_test - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "shape_test - Win32 Release" -# Name "shape_test - Win32 Debug" -# Begin Source File - -SOURCE=.\shape_test.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/test/glut/test1.c b/lib/glut-3.7.6/test/glut/test1.c deleted file mode 100644 index a21d553cc..000000000 --- a/lib/glut-3.7.6/test/glut/test1.c +++ /dev/null @@ -1,91 +0,0 @@ - -/* 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 -#include -#include - -char *fake_argv[] = -{ - "program", - "-display", - ":0", - "-geometry", - "500x400-34-23", - "-indirect", - "-iconic", - NULL}; - -int fake_argc = sizeof(fake_argv) / sizeof(char *) - 1; - -int -main(int argc, char **argv) -{ - char *altdisplay; - int screen_width, screen_height; - int got; - - altdisplay = getenv("GLUT_TEST_ALT_DISPLAY"); - if (altdisplay) { - fake_argv[2] = altdisplay; - } - glutInit(&fake_argc, fake_argv); - if (fake_argc != 1) { - printf("FAIL: argument processing\n"); - exit(1); - } - if ((got = glutGet(GLUT_INIT_WINDOW_WIDTH)) != 500) { - printf("FAIL: width wrong, got %d, not 500\n", got); - exit(1); - } - if ((got = glutGet(GLUT_INIT_WINDOW_HEIGHT)) != 400) { - printf("FAIL: width height, got %d, not 400\n", got); - exit(1); - } - screen_width = glutGet(GLUT_SCREEN_WIDTH); - screen_height = glutGet(GLUT_SCREEN_HEIGHT); - if ((got = glutGet(GLUT_INIT_WINDOW_X)) != (screen_width - 500 - 34)) { - printf("FAIL: width x, got %d, not %d\n", got, screen_width - 500 - 34); - exit(1); - } - if ((got = glutGet(GLUT_INIT_WINDOW_Y)) != (screen_height - 400 - 23)) { - printf("FAIL: width y, got %d, not %d\n", got, screen_height - 400 - 23); - exit(1); - } - if (glutGet(GLUT_INIT_DISPLAY_MODE) != - (GLUT_RGBA | GLUT_SINGLE | GLUT_DEPTH)) { - printf("FAIL: width wrong\n"); - exit(1); - } - glutInitWindowPosition(10, 10); - glutInitWindowSize(200, 200); - glutInitDisplayMode( - GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH | GLUT_STENCIL); - if (glutGet(GLUT_INIT_WINDOW_WIDTH) != 200) { - printf("FAIL: width wrong\n"); - exit(1); - } - if (glutGet(GLUT_INIT_WINDOW_HEIGHT) != 200) { - printf("FAIL: width wrong\n"); - exit(1); - } - if (glutGet(GLUT_INIT_WINDOW_X) != 10) { - printf("FAIL: width wrong\n"); - exit(1); - } - if (glutGet(GLUT_INIT_WINDOW_Y) != 10) { - printf("FAIL: width wrong\n"); - exit(1); - } - if (glutGet(GLUT_INIT_DISPLAY_MODE) != - (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH | GLUT_STENCIL)) { - printf("FAIL: width wrong\n"); - exit(1); - } - printf("PASS: test1\n"); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/test/glut/test1.dsp b/lib/glut-3.7.6/test/glut/test1.dsp deleted file mode 100644 index 78fbc9a90..000000000 --- a/lib/glut-3.7.6/test/glut/test1.dsp +++ /dev/null @@ -1,90 +0,0 @@ -# Microsoft Developer Studio Project File - Name="test1" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=test1 - 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 "test1.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 "test1.mak" CFG="test1 - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "test1 - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "test1 - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "test1 - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 glu32.lib opengl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "test1 - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "test1___Win32_Debug" -# PROP BASE Intermediate_Dir "test1___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 glu32.lib opengl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "test1 - Win32 Release" -# Name "test1 - Win32 Debug" -# Begin Source File - -SOURCE=.\test1.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/test/glut/test10.c b/lib/glut-3.7.6/test/glut/test10.c deleted file mode 100644 index b5e712b72..000000000 --- a/lib/glut-3.7.6/test/glut/test10.c +++ /dev/null @@ -1,127 +0,0 @@ - -/* 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 -#include -#include - -/* XXX As a test of 16-bit font support in capturexfont, I made - a font out of the 16-bit Japanese font named - '-jis-fixed-medium-r-normal--24-230-75-75-c-240-jisx0208.1' - and tried it out. Defining JIS_FONT uses it in this test. */ -/* #define JIS_FONT */ - -#ifdef JIS_FONT -extern void *glutBitmapJis; -#endif - -int ch = -2; -void *fonts[] = -{ - GLUT_BITMAP_TIMES_ROMAN_24, - GLUT_BITMAP_TIMES_ROMAN_10, - GLUT_BITMAP_9_BY_15, - GLUT_BITMAP_8_BY_13, - GLUT_BITMAP_HELVETICA_10, - GLUT_BITMAP_HELVETICA_12, - GLUT_BITMAP_HELVETICA_18, -#ifdef JIS_FONT - &glutBitmapJis -#endif -}; -void *names[] = -{ - "Times Roman 24", - " Times Roman 10", - " 9 by 15", - " 8 by 13", - " Helvetica 10", - " Helvetica 12", - " Helvetica 18", -#ifdef JIS_FONT - " Mincho JIS" -#endif -}; -#define NUM_FONTS (sizeof(fonts)/sizeof(void*)) -int font = 0; - -void -tick(void) -{ - static int limit = 270; - - ch += 5; - if (ch > limit) { - ch = -2; - font++; -#ifdef JIS_FONT - if (font == 4) { - limit = 0x747e; - ch = 0x2121; - } -#endif - if (font == NUM_FONTS) { - printf("PASS: test10\n"); - exit(0); - } - } - glutPostRedisplay(); -} - -void -output(int x, int y, char *msg) -{ - glRasterPos2f(x, y); - while (*msg) { - glutBitmapCharacter(GLUT_BITMAP_9_BY_15, *msg); - msg++; - } -} - -void -display(void) -{ - glutIdleFunc(tick); - glClear(GL_COLOR_BUFFER_BIT); - glRasterPos2f(0, 0); - glutBitmapCharacter(fonts[font], ch); - glRasterPos2f(30, 30); - glutBitmapCharacter(fonts[font], ch + 1); - glRasterPos2f(-30, -30); - glutBitmapCharacter(fonts[font], ch + 2); - glRasterPos2f(30, -30); - glutBitmapCharacter(fonts[font], ch + 3); - glRasterPos2f(-30, 30); - glutBitmapCharacter(fonts[font], ch + 4); - glRasterPos2f(0, 30); - glutBitmapCharacter(fonts[font], ch + 5); - glRasterPos2f(0, -30); - glutBitmapCharacter(fonts[font], ch + 6); - glRasterPos2f(-30, 0); - glutBitmapCharacter(fonts[font], ch + 7); - glRasterPos2f(30, 0); - glutBitmapCharacter(fonts[font], ch + 8); - output(-48, -48, names[font]); - glutSwapBuffers(); -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); - glutInitWindowSize(200, 200); - glutCreateWindow("Test bitmap fonts"); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluOrtho2D(-50, 50, -50, 50); - glClearColor(0.0, 0.0, 0.0, 1.0); - glColor3f(1.0, 1.0, 1.0); - glutDisplayFunc(display); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/test/glut/test10.dsp b/lib/glut-3.7.6/test/glut/test10.dsp deleted file mode 100644 index 55152a331..000000000 --- a/lib/glut-3.7.6/test/glut/test10.dsp +++ /dev/null @@ -1,90 +0,0 @@ -# Microsoft Developer Studio Project File - Name="test10" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=test10 - 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 "test10.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 "test10.mak" CFG="test10 - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "test10 - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "test10 - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "test10 - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 glu32.lib opengl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "test10 - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "test10___Win32_Debug" -# PROP BASE Intermediate_Dir "test10___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 glu32.lib opengl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "test10 - Win32 Release" -# Name "test10 - Win32 Debug" -# Begin Source File - -SOURCE=.\test10.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/test/glut/test11.c b/lib/glut-3.7.6/test/glut/test11.c deleted file mode 100644 index 5220f6b01..000000000 --- a/lib/glut-3.7.6/test/glut/test11.c +++ /dev/null @@ -1,28 +0,0 @@ - -/* 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 -#include -#include - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - printf("Keyboard: %s\n", glutDeviceGet(GLUT_HAS_KEYBOARD) ? "YES" : "no"); - printf("Mouse: %s\n", glutDeviceGet(GLUT_HAS_MOUSE) ? "YES" : "no"); - printf("Spaceball: %s\n", glutDeviceGet(GLUT_HAS_SPACEBALL) ? "YES" : "no"); - printf("Dials: %s\n", glutDeviceGet(GLUT_HAS_DIAL_AND_BUTTON_BOX) ? "YES" : "no"); - printf("Tablet: %s\n\n", glutDeviceGet(GLUT_HAS_TABLET) ? "YES" : "no"); - printf("Mouse buttons: %d\n", glutDeviceGet(GLUT_NUM_MOUSE_BUTTONS)); - printf("Spaceball buttons: %d\n", glutDeviceGet(GLUT_NUM_SPACEBALL_BUTTONS)); - printf("Button box buttons: %d\n", glutDeviceGet(GLUT_NUM_BUTTON_BOX_BUTTONS)); - printf("Dials: %d\n", glutDeviceGet(GLUT_NUM_DIALS)); - printf("Tablet buttons: %d\n\n", glutDeviceGet(GLUT_NUM_TABLET_BUTTONS)); - printf("PASS: test11\n"); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/test/glut/test11.dsp b/lib/glut-3.7.6/test/glut/test11.dsp deleted file mode 100644 index 0f07f016b..000000000 --- a/lib/glut-3.7.6/test/glut/test11.dsp +++ /dev/null @@ -1,90 +0,0 @@ -# Microsoft Developer Studio Project File - Name="test11" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=test11 - 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 "test11.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 "test11.mak" CFG="test11 - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "test11 - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "test11 - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "test11 - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "test11 - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "test11___Win32_Debug" -# PROP BASE Intermediate_Dir "test11___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "test11 - Win32 Release" -# Name "test11 - Win32 Debug" -# Begin Source File - -SOURCE=.\test11.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/test/glut/test12.c b/lib/glut-3.7.6/test/glut/test12.c deleted file mode 100644 index 06b5ffeb9..000000000 --- a/lib/glut-3.7.6/test/glut/test12.c +++ /dev/null @@ -1,177 +0,0 @@ - -/* 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 -#include -#ifdef _WIN32 -#include -#define sleep(x) Sleep(1000 * x) -#else -#include -#endif -#include - -int -main(int argc, char **argv) -{ - int a, b, d; - int val; - - glutInit(&argc, argv); - a = glutGet(GLUT_ELAPSED_TIME); - sleep(1); - b = glutGet(GLUT_ELAPSED_TIME); - d = b - a; - if (d < 990 || d > 1200) { - printf("FAIL: test12\n"); - exit(1); - } - glutCreateWindow("dummy"); - /* try all GLUT_WINDOW_* glutGet's */ - val = glutGet(GLUT_WINDOW_X); - val = glutGet(GLUT_WINDOW_Y); - val = glutGet(GLUT_WINDOW_WIDTH); - if (val != 300) { - printf("FAIL: test12\n"); - exit(1); - } - val = glutGet(GLUT_WINDOW_HEIGHT); - if (val != 300) { - printf("FAIL: test12\n"); - exit(1); - } - val = glutGet(GLUT_WINDOW_BUFFER_SIZE); - if (val < 0) { - printf("FAIL: test12\n"); - exit(1); - } - val = glutGet(GLUT_WINDOW_STENCIL_SIZE); - if (val < 0) { - printf("FAIL: test12\n"); - exit(1); - } - val = glutGet(GLUT_WINDOW_DEPTH_SIZE); - if (val < 0) { - printf("FAIL: test12\n"); - exit(1); - } - val = glutGet(GLUT_WINDOW_RED_SIZE); - if (val < 1) { - printf("FAIL: test12\n"); - exit(1); - } - val = glutGet(GLUT_WINDOW_GREEN_SIZE); - if (val < 1) { - printf("FAIL: test12\n"); - exit(1); - } - val = glutGet(GLUT_WINDOW_BLUE_SIZE); - if (val < 1) { - printf("FAIL: test12\n"); - exit(1); - } - val = glutGet(GLUT_WINDOW_ALPHA_SIZE); - if (val < 0) { - printf("FAIL: test12\n"); - exit(1); - } - val = glutGet(GLUT_WINDOW_ACCUM_RED_SIZE); - if (val < 0) { - printf("FAIL: test12\n"); - exit(1); - } - val = glutGet(GLUT_WINDOW_ACCUM_GREEN_SIZE); - if (val < 0) { - printf("FAIL: test12\n"); - exit(1); - } - val = glutGet(GLUT_WINDOW_ACCUM_BLUE_SIZE); - if (val < 0) { - printf("FAIL: test12\n"); - exit(1); - } - val = glutGet(GLUT_WINDOW_ACCUM_ALPHA_SIZE); - if (val < 0) { - printf("FAIL: test12\n"); - exit(1); - } - val = glutGet(GLUT_WINDOW_DOUBLEBUFFER); - if (val < 0) { - printf("FAIL: test12\n"); - exit(1); - } - val = glutGet(GLUT_WINDOW_RGBA); - if (val < 0) { - printf("FAIL: test12\n"); - exit(1); - } - val = glutGet(GLUT_WINDOW_CURSOR); - if (val != GLUT_CURSOR_INHERIT) { - printf("FAIL: test12\n"); - exit(1); - } - printf("Window format id = 0x%x (%d)\n", - glutGet(GLUT_WINDOW_FORMAT_ID), glutGet(GLUT_WINDOW_FORMAT_ID)); - glutSetCursor(GLUT_CURSOR_NONE); - val = glutGet(GLUT_WINDOW_CURSOR); - if (val != GLUT_CURSOR_NONE) { - printf("FAIL: test12\n"); - exit(1); - } - glutWarpPointer(0, 0); - glutWarpPointer(-5, -5); - glutWarpPointer(2000, 2000); - glutWarpPointer(-4000, 4000); - val = glutGet(GLUT_WINDOW_COLORMAP_SIZE); - if (val < 0) { - printf("FAIL: test12\n"); - exit(1); - } - val = glutGet(GLUT_WINDOW_PARENT); - if (val < 0) { - printf("FAIL: test12\n"); - exit(1); - } - val = glutGet(GLUT_WINDOW_NUM_CHILDREN); - if (val < 0) { - printf("FAIL: test12\n"); - exit(1); - } - val = glutGet(GLUT_WINDOW_NUM_SAMPLES); - if (val < 0) { - printf("FAIL: test12\n"); - exit(1); - } - val = glutGet(GLUT_WINDOW_STEREO); - if (val < 0) { - printf("FAIL: test12\n"); - exit(1); - } - /* touch GLUT_SCREEN_* glutGet's supported */ - val = glutGet(GLUT_SCREEN_WIDTH); - if (val < 0) { - printf("FAIL: test12\n"); - exit(1); - } - val = glutGet(GLUT_SCREEN_HEIGHT); - if (val < 0) { - printf("FAIL: test12\n"); - exit(1); - } - val = glutGet(GLUT_SCREEN_WIDTH_MM); - if (val < 0) { - printf("FAIL: test12\n"); - exit(1); - } - val = glutGet(GLUT_SCREEN_HEIGHT_MM); - if (val < 0) { - printf("FAIL: test12\n"); - exit(1); - } - printf("PASS: test12\n"); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/test/glut/test12.dsp b/lib/glut-3.7.6/test/glut/test12.dsp deleted file mode 100644 index f26847cc3..000000000 --- a/lib/glut-3.7.6/test/glut/test12.dsp +++ /dev/null @@ -1,90 +0,0 @@ -# Microsoft Developer Studio Project File - Name="test12" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=test12 - 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 "test12.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 "test12.mak" CFG="test12 - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "test12 - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "test12 - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "test12 - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "test12 - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "test12___Win32_Debug" -# PROP BASE Intermediate_Dir "test12___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "test12 - Win32 Release" -# Name "test12 - Win32 Debug" -# Begin Source File - -SOURCE=.\test12.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/test/glut/test13.c b/lib/glut-3.7.6/test/glut/test13.c deleted file mode 100644 index d39048e8c..000000000 --- a/lib/glut-3.7.6/test/glut/test13.c +++ /dev/null @@ -1,129 +0,0 @@ - -/* 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 -#include -#ifdef _WIN32 -#include -#define sleep(x) Sleep(1000 * x) -#else -#include -#endif -#include - -int window1, window2; -int win1reshaped = 0, win2reshaped = 0; -int win1displayed = 0, win2displayed = 0; - -void -checkifdone(void) -{ - if (win1reshaped && win2reshaped && win1displayed && win2displayed) { - sleep(1); - printf("PASS: test13\n"); - exit(0); - } -} - -void -window1reshape(int w, int h) -{ - if (glutGetWindow() != window1) { - printf("FAIL: window1reshape\n"); - exit(1); - } - glViewport(0, 0, w, h); - win1reshaped = 1; -} - -void -window1display(void) -{ - if (glutGetWindow() != window1) { - printf("FAIL: window1display\n"); - exit(1); - } - glClearColor(0, 1, 0, 0); - glClear(GL_COLOR_BUFFER_BIT); - glFlush(); - win1displayed = 1; - checkifdone(); -} - -void -window2reshape(int w, int h) -{ - if (glutGetWindow() != window2) { - printf("FAIL: window2reshape\n"); - exit(1); - } - glViewport(0, 0, w, h); - win2reshaped = 1; -} - -void -window2display(void) -{ - if (glutGetWindow() != window2) { - printf("FAIL: window2display\n"); - exit(1); - } - glClearColor(0, 0, 1, 0); - glClear(GL_COLOR_BUFFER_BIT); - glFlush(); - win2displayed = 1; - checkifdone(); -} - -/* ARGSUSED */ -void -timefunc(int value) -{ - printf("FAIL: test13\n"); - exit(1); -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - - glutInitWindowSize(100, 100); - glutInitWindowPosition(50, 100); - glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); - window1 = glutCreateWindow("1"); - if (glutGet(GLUT_WINDOW_X) != 50) { - printf("FAIL: test13\n"); - exit(1); - } - if (glutGet(GLUT_WINDOW_Y) != 100) { - printf("FAIL: test13\n"); - exit(1); - } - glutReshapeFunc(window1reshape); - glutDisplayFunc(window1display); - - glutInitWindowSize(100, 100); - glutInitWindowPosition(250, 100); - glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); - window2 = glutCreateWindow("2"); - if (glutGet(GLUT_WINDOW_X) != 250) { - printf("FAIL: test13\n"); - exit(1); - } - if (glutGet(GLUT_WINDOW_Y) != 100) { - printf("FAIL: test13\n"); - exit(1); - } - glutReshapeFunc(window2reshape); - glutDisplayFunc(window2display); - - glutTimerFunc(7000, timefunc, 1); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/test/glut/test13.dsp b/lib/glut-3.7.6/test/glut/test13.dsp deleted file mode 100644 index ca3463be0..000000000 --- a/lib/glut-3.7.6/test/glut/test13.dsp +++ /dev/null @@ -1,90 +0,0 @@ -# Microsoft Developer Studio Project File - Name="test13" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=test13 - 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 "test13.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 "test13.mak" CFG="test13 - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "test13 - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "test13 - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "test13 - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "test13 - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "test13 - Win32 Release" -# Name "test13 - Win32 Debug" -# Begin Source File - -SOURCE=.\test13.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/test/glut/test14.c b/lib/glut-3.7.6/test/glut/test14.c deleted file mode 100644 index e2b50c793..000000000 --- a/lib/glut-3.7.6/test/glut/test14.c +++ /dev/null @@ -1,151 +0,0 @@ - -/* 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. */ - -/* Try testing menu item removal and menu destruction. */ - -#include -#include -#include - -void -displayFunc(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - glFlush(); -} - -void -menuFunc(int choice) -{ - printf("choice = %d\n", choice); -} - -void -timefunc(int value) -{ - if (value != 1) { - printf("FAIL: test14\n"); - exit(1); - } - printf("PASS: test14\n"); - exit(0); -} - -int -main(int argc, char **argv) -{ - int i, menu, submenu; - - glutInit(&argc, argv); - glutCreateWindow("test14"); - glutDisplayFunc(displayFunc); - - submenu = glutCreateMenu(menuFunc); - glutAddMenuEntry("First", 10101); - glutAddMenuEntry("Second", 20202); - - menu = glutCreateMenu(menuFunc); - glutAddMenuEntry("Entry1", 101); - glutAddMenuEntry("Entry2----------", 102); - glutRemoveMenuItem(2); - glutRemoveMenuItem(1); - glutAddMenuEntry("oEntry1", 201); - glutAddMenuEntry("o----------", 200); - glutAddMenuEntry("oEntry2----------", 202); - glutAddMenuEntry("oEntry3", 203); - glutRemoveMenuItem(2); - glutDestroyMenu(menu); - - menu = glutCreateMenu(menuFunc); - glutAddMenuEntry("Entry1", 101); - glutAddMenuEntry("Entry2----------", 102); - glutRemoveMenuItem(2); - glutRemoveMenuItem(1); - glutAddMenuEntry("oEntry1", 201); - glutAddMenuEntry("o----------", 200); - glutAddMenuEntry("oEntry2----------", 202); - glutAddMenuEntry("oEntry3", 203); - glutRemoveMenuItem(2); - glutAttachMenu(GLUT_RIGHT_BUTTON); - - menu = glutCreateMenu(menuFunc); - for (i = 0; i < 10; i++) { - glutAddMenuEntry("YES", i); - } - for (i = 0; i < 10; i++) { - glutRemoveMenuItem(1); - } - glutAddMenuEntry("Entry1", 101); - glutAddMenuEntry("Entry2", 102); - glutAddMenuEntry("Entry3", 103); - glutRemoveMenuItem(2); - glutRemoveMenuItem(1); - glutAddMenuEntry("----------", 303); - for (i = 0; i < 10; i++) { - glutAddMenuEntry("YES**************************", i); - } - for (i = 0; i < 9; i++) { - glutRemoveMenuItem(3); - } - glutDestroyMenu(menu); - - menu = glutCreateMenu(menuFunc); - for (i = 0; i < 10; i++) { - glutAddMenuEntry("YES", i); - } - for (i = 0; i < 10; i++) { - glutRemoveMenuItem(1); - } - glutAddMenuEntry("Entry1", 101); - glutAddMenuEntry("Entry2", 102); - glutAddMenuEntry("Entry3", 103); - glutRemoveMenuItem(2); - glutRemoveMenuItem(1); - glutAddMenuEntry("----------", 303); - for (i = 0; i < 10; i++) { - glutAddMenuEntry("YES**************************", i); - } - for (i = 0; i < 9; i++) { - glutRemoveMenuItem(3); - } - glutAttachMenu(GLUT_MIDDLE_BUTTON); - - menu = glutCreateMenu(menuFunc); - glutAddMenuEntry("Entry1", 101); - glutAddMenuEntry("Entry2", 102); - glutAddMenuEntry("Entry3", 103); - glutRemoveMenuItem(2); - glutRemoveMenuItem(1); - glutAddMenuEntry("nEntry1", 201); - glutAddMenuEntry("nEntry2----------", 202); - glutAddMenuEntry("nEntry3", 203); - glutRemoveMenuItem(2); - glutRemoveMenuItem(1); - glutAddMenuEntry("n----------", 303); - glutChangeToMenuEntry(1, "HELLO", 34); - glutChangeToSubMenu(2, "HELLO menu", submenu); - glutDestroyMenu(menu); - - menu = glutCreateMenu(menuFunc); - glutAddMenuEntry("Entry1", 101); - glutAddMenuEntry("Entry2", 102); - glutAddMenuEntry("Entry3", 103); - glutRemoveMenuItem(2); - glutRemoveMenuItem(1); - glutAddMenuEntry("nEntry1", 201); - glutAddMenuEntry("nEntry2----------", 202); - glutAddMenuEntry("nEntry3", 203); - glutRemoveMenuItem(2); - glutRemoveMenuItem(1); - glutAddMenuEntry("n----------", 303); - glutAttachMenu(GLUT_LEFT_BUTTON); - - glutTimerFunc(2000, timefunc, 1); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/test/glut/test14.dsp b/lib/glut-3.7.6/test/glut/test14.dsp deleted file mode 100644 index 1b2de1dfe..000000000 --- a/lib/glut-3.7.6/test/glut/test14.dsp +++ /dev/null @@ -1,90 +0,0 @@ -# Microsoft Developer Studio Project File - Name="test14" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=test14 - 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 "test14.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 "test14.mak" CFG="test14 - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "test14 - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "test14 - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "test14 - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "test14 - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "test14___Win32_Debug" -# PROP BASE Intermediate_Dir "test14___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "test14 - Win32 Release" -# Name "test14 - Win32 Debug" -# Begin Source File - -SOURCE=.\test14.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/test/glut/test15.c b/lib/glut-3.7.6/test/glut/test15.c deleted file mode 100644 index 220b32684..000000000 --- a/lib/glut-3.7.6/test/glut/test15.c +++ /dev/null @@ -1,83 +0,0 @@ - -/* 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. */ - -/* This test makes sure that if you post a redisplay within a - display callback, another display callback will be - generated. I believe this is useful for progressive - refinement of an image. Draw it once at a coarse - tesselation to get something on the screen; then redraw at a - higher level of tesselation. Pre-GLUT 2.3 fails this test. */ - -#include -#include -#include - -GLfloat light_diffuse[] = -{1.0, 0.0, 0.0, 1.0}; -GLfloat light_position[] = -{1.0, 1.0, 1.0, 0.0}; -GLUquadricObj *qobj; - -void -displayFunc(void) -{ - static int tesselation = 3; - - fprintf(stderr, " %d", tesselation); - if (tesselation > 23) { - printf("\nPASS: test15\n"); - exit(0); - } - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - gluSphere(qobj, /* radius */ 1.0, - /* slices */ tesselation, /* stacks */ tesselation); - glutSwapBuffers(); - tesselation += 1; - glutPostRedisplay(); -} - -/* ARGSUSED */ -void -timefunc(int value) -{ - printf("\nFAIL: test15\n"); - exit(1); -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGB); - glutCreateWindow("test15"); - glutDisplayFunc(displayFunc); - - qobj = gluNewQuadric(); - gluQuadricDrawStyle(qobj, GLU_FILL); - glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); - glLightfv(GL_LIGHT0, GL_POSITION, light_position); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_DEPTH_TEST); - glMatrixMode(GL_PROJECTION); - gluPerspective( /* field of view in degree */ 22.0, - /* aspect ratio */ 1.0, - /* Z near */ 1.0, /* Z far */ 10.0); - glMatrixMode(GL_MODELVIEW); - gluLookAt(0.0, 0.0, 5.0, /* eye is at (0,0,5) */ - 0.0, 0.0, 0.0, /* center is at (0,0,0) */ - 0.0, 1.0, 0.); /* up is in postivie Y direction */ - glTranslatef(0.0, 0.0, -1.0); - - /* Have a reasonably large timeout since some machines make - take a while to render all those polygons. */ - glutTimerFunc(15000, timefunc, 1); - - fprintf(stderr, "tesselations ="); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/test/glut/test15.dsp b/lib/glut-3.7.6/test/glut/test15.dsp deleted file mode 100644 index c61dec725..000000000 --- a/lib/glut-3.7.6/test/glut/test15.dsp +++ /dev/null @@ -1,90 +0,0 @@ -# Microsoft Developer Studio Project File - Name="test15" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=test15 - 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 "test15.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 "test15.mak" CFG="test15 - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "test15 - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "test15 - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "test15 - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "test15 - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "test15 - Win32 Release" -# Name "test15 - Win32 Debug" -# Begin Source File - -SOURCE=.\test15.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/test/glut/test16.c b/lib/glut-3.7.6/test/glut/test16.c deleted file mode 100644 index 2bb247c91..000000000 --- a/lib/glut-3.7.6/test/glut/test16.c +++ /dev/null @@ -1,136 +0,0 @@ - -/* 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. */ - -/* Exercise all the GLUT shapes. */ - -#include -#include -#ifdef _WIN32 -#include -#define sleep(x) Sleep(1000 * x) -#else -#include -#endif -#include - -GLfloat light_diffuse[] = -{1.0, 0.0, 0.0, 1.0}; -GLfloat light_position[] = -{1.0, 1.0, 1.0, 0.0}; - -void -displayFunc(void) -{ - static int shape = 1; - - fprintf(stderr, " %d", shape); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - switch (shape) { - case 1: - glutWireSphere(1.0, 20, 20); - break; - case 2: - glutSolidSphere(1.0, 20, 20); - break; - case 3: - glutWireCone(1.0, 1.0, 20, 20); - break; - case 4: - glutSolidCone(1.0, 1.0, 20, 20); - break; - case 5: - glutWireCube(1.0); - break; - case 6: - glutSolidCube(1.0); - break; - case 7: - glutWireTorus(0.5, 1.0, 15, 15); - break; - case 8: - glutSolidTorus(0.5, 1.0, 15, 15); - break; - case 9: - glutWireDodecahedron(); - break; - case 10: - glutSolidDodecahedron(); - break; - case 11: - glutWireTeapot(1.0); - break; - case 12: - glutSolidTeapot(1.0); - break; - case 13: - glutWireOctahedron(); - break; - case 14: - glutSolidOctahedron(); - break; - case 15: - glutWireTetrahedron(); - break; - case 16: - glutSolidTetrahedron(); - break; - case 17: - glutWireIcosahedron(); - break; - case 18: - glutSolidIcosahedron(); - break; - default: - printf("\nPASS: test16\n"); - exit(0); - } - glutSwapBuffers(); - shape += 1; - sleep(1); - glutPostRedisplay(); -} - -/* ARGSUSED */ -void -timefunc(int value) -{ - printf("\nFAIL: test16\n"); - exit(1); -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGB); - glutCreateWindow("test16"); - glutDisplayFunc(displayFunc); - - glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); - glLightfv(GL_LIGHT0, GL_POSITION, light_position); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_DEPTH_TEST); - glMatrixMode(GL_PROJECTION); - gluPerspective( /* field of view in degree */ 22.0, - /* aspect ratio */ 1.0, - /* Z near */ 1.0, /* Z far */ 10.0); - glMatrixMode(GL_MODELVIEW); - gluLookAt(0.0, 0.0, 5.0, /* eye is at (0,0,5) */ - 0.0, 0.0, 0.0, /* center is at (0,0,0) */ - 0.0, 1.0, 0.); /* up is in postivie Y direction */ - glTranslatef(0.0, 0.0, -3.0); - glRotatef(25, 1.0, 0.0, 0.0); - - /* Have a reasonably large timeout since some machines make - take a while to render all those polygons. */ - glutTimerFunc(35000, timefunc, 1); - - fprintf(stderr, "shape ="); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/test/glut/test16.dsp b/lib/glut-3.7.6/test/glut/test16.dsp deleted file mode 100644 index 6c2e2e7fe..000000000 --- a/lib/glut-3.7.6/test/glut/test16.dsp +++ /dev/null @@ -1,90 +0,0 @@ -# Microsoft Developer Studio Project File - Name="test16" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=test16 - 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 "test16.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 "test16.mak" CFG="test16 - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "test16 - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "test16 - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "test16 - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "test16 - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "test16___Win32_Debug" -# PROP BASE Intermediate_Dir "test16___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "test16 - Win32 Release" -# Name "test16 - Win32 Debug" -# Begin Source File - -SOURCE=.\test16.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/test/glut/test17.c b/lib/glut-3.7.6/test/glut/test17.c deleted file mode 100644 index 593857ff8..000000000 --- a/lib/glut-3.7.6/test/glut/test17.c +++ /dev/null @@ -1,289 +0,0 @@ - -/* 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. */ - -/* Test for GLUT 3.0's overlay functionality. */ - -#include -#include -#include - -static int transP; -static int main_win; -static float x = 0, y = 0; - -static void -render_normal(void) -{ - glutUseLayer(GLUT_NORMAL); - glClear(GL_COLOR_BUFFER_BIT); - glColor3f(0.0, 0.0, 1.0); - glBegin(GL_POLYGON); - glVertex2f(.2, .28); - glVertex2f(.5, .58); - glVertex2f(.2, .58); - glEnd(); - glFlush(); -} - -static void -render_overlay(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - glBegin(GL_POLYGON); - glVertex2f(.2 + x, .2 + y); - glVertex2f(.5 + x, .5 + y); - glVertex2f(.2 + x, .5 + y); - glEnd(); - glFlush(); -} - -static void -render(void) -{ - glutUseLayer(GLUT_NORMAL); - render_normal(); - if (glutLayerGet(GLUT_HAS_OVERLAY)) { - glutUseLayer(GLUT_OVERLAY); - render_overlay(); - } -} - -static void -render_sub(void) -{ - printf("render_sub\n"); - glutUseLayer(GLUT_NORMAL); - render_normal(); - if (glutLayerGet(GLUT_HAS_OVERLAY)) { - glutUseLayer(GLUT_OVERLAY); - render_overlay(); - } -} - -static int display_count = 0; -static int damage_expectation; - -static void -timer(int value) -{ - if (value != 777) { - printf("FAIL: unexpected timer value\n"); - exit(1); - } - damage_expectation = 1; - glutShowWindow(); -} - -static void -time2(int value) -{ - if (value == 666) { - printf("PASS: test17\n"); - exit(0); - } - if (value != 888) { - printf("FAIL: bad value\n"); - exit(1); - } - glutDestroyWindow(main_win); - glutTimerFunc(500, time2, 666); -} - -static void -move_on(void) -{ - display_count++; - if (display_count == 2) { - damage_expectation = 1; - glutIconifyWindow(); - glutTimerFunc(500, timer, 777); - } - if (display_count == 4) { - printf("display_count == 4\n"); - glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); - glutCreateSubWindow(main_win, 10, 10, 150, 150); - glClearColor(0.5, 0.5, 0.5, 0.0); - glutDisplayFunc(render_sub); - glutInitDisplayMode(GLUT_SINGLE | GLUT_INDEX); - glutEstablishOverlay(); - glutCopyColormap(main_win); - glutSetColor((transP + 1) % 2, 0.0, 1.0, 1.0); - glutRemoveOverlay(); - glutEstablishOverlay(); - glutCopyColormap(main_win); - glutCopyColormap(main_win); - glutSetColor((transP + 1) % 2, 1.0, 1.0, 1.0); - glClearIndex(transP); - glIndexf((transP + 1) % 2); - glutSetWindow(main_win); - glutRemoveOverlay(); - glutTimerFunc(500, time2, 888); - } -} - -static void -display_normal(void) -{ - if (glutLayerGet(GLUT_NORMAL_DAMAGED) != damage_expectation) { - printf("FAIL: normal damage not expected\n"); - exit(1); - } - render_normal(); - move_on(); -} - -static void -display_overlay(void) -{ - if (glutLayerGet(GLUT_OVERLAY_DAMAGED) != damage_expectation) { - printf("FAIL: overlay damage not expected\n"); - exit(1); - } - render_overlay(); - move_on(); -} - -static void -display2(void) -{ - static int been_here = 0; - - if (glutLayerGet(GLUT_NORMAL_DAMAGED) != 0) { - printf("FAIL: normal damage not expected\n"); - exit(1); - } - if (glutLayerGet(GLUT_OVERLAY_DAMAGED) != 0) { - printf("FAIL: overlay damage not expected\n"); - exit(1); - } - if (been_here) { - glutPostOverlayRedisplay(); - } else { - glutOverlayDisplayFunc(display_overlay); - glutDisplayFunc(display_normal); - damage_expectation = 0; - glutPostOverlayRedisplay(); - glutPostRedisplay(); - } -} - -static void -display(void) -{ - if (glutLayerGet(GLUT_NORMAL_DAMAGED) == 0) { - printf("FAIL: normal damage expected\n"); - exit(1); - } - if (glutLayerGet(GLUT_OVERLAY_DAMAGED) == 0) { - printf("FAIL: overlay damage expected\n"); - exit(1); - } - render(); - - glutDisplayFunc(display2); - glutPostRedisplay(); -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitWindowSize(300, 300); - glutInitDisplayMode(GLUT_SINGLE | GLUT_INDEX); - - if (!glutLayerGet(GLUT_OVERLAY_POSSIBLE)) { - printf("UNRESOLVED: need overlays for this test (your window system lacks overlays)\n"); - exit(0); - } - glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); - main_win = glutCreateWindow("test17"); - - if (glutLayerGet(GLUT_LAYER_IN_USE) == GLUT_OVERLAY) { - printf("FAIL: overlay should not be in use\n"); - exit(1); - } - if (glutLayerGet(GLUT_HAS_OVERLAY)) { - printf("FAIL: overlay should not exist\n"); - exit(1); - } - if (glutLayerGet(GLUT_TRANSPARENT_INDEX) != -1) { - printf("FAIL: transparent pixel of normal plane should be -1\n"); - exit(1); - } - if (glutLayerGet(GLUT_NORMAL_DAMAGED) != 0) { - printf("FAIL: no normal damage yet\n"); - exit(1); - } - if (glutLayerGet(GLUT_OVERLAY_DAMAGED) != -1) { - printf("FAIL: no overlay damage status yet\n"); - exit(1); - } - glClearColor(0.0, 1.0, 0.0, 0.0); - - glutInitDisplayMode(GLUT_SINGLE | GLUT_INDEX); - - /* Small torture test. */ - glutEstablishOverlay(); - glutRemoveOverlay(); - glutEstablishOverlay(); - glutEstablishOverlay(); - glutShowOverlay(); - glutHideOverlay(); - glutShowOverlay(); - glutRemoveOverlay(); - glutRemoveOverlay(); - glutEstablishOverlay(); - - if (glutGet(GLUT_WINDOW_RGBA)) { - printf("FAIL: overlay should not be RGBA\n"); - exit(1); - } - glutUseLayer(GLUT_NORMAL); - if (!glutGet(GLUT_WINDOW_RGBA)) { - printf("FAIL: normal should be RGBA\n"); - exit(1); - } - glutUseLayer(GLUT_OVERLAY); - if (glutGet(GLUT_WINDOW_RGBA)) { - printf("FAIL: overlay should not be RGBA\n"); - exit(1); - } - if (glutLayerGet(GLUT_LAYER_IN_USE) == GLUT_NORMAL) { - printf("FAIL: overlay should be in use\n"); - exit(1); - } - if (glutLayerGet(GLUT_HAS_OVERLAY) == 0) { - printf("FAIL: overlay should exist\n"); - exit(1); - } - if (glutLayerGet(GLUT_TRANSPARENT_INDEX) == -1) { - printf("FAIL: transparent pixel should exist\n"); - exit(1); - } - if (glutLayerGet(GLUT_NORMAL_DAMAGED) != 0) { - printf("FAIL: no normal damage yet\n"); - exit(1); - } - if (glutLayerGet(GLUT_OVERLAY_DAMAGED) != 0) { - printf("FAIL: no overlay damage yet\n"); - exit(1); - } - transP = glutLayerGet(GLUT_TRANSPARENT_INDEX); - glClearIndex(glutLayerGet(GLUT_TRANSPARENT_INDEX)); - glutSetColor((transP + 1) % 2, 1.0, 0.0, 1.0); - glIndexi((transP + 1) % 2); - - glutUseLayer(GLUT_NORMAL); - if (glutLayerGet(GLUT_LAYER_IN_USE) == GLUT_OVERLAY) { - printf("FAIL: overlay should not be in use\n"); - exit(1); - } - glutDisplayFunc(display); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/test/glut/test17.dsp b/lib/glut-3.7.6/test/glut/test17.dsp deleted file mode 100644 index b9be19603..000000000 --- a/lib/glut-3.7.6/test/glut/test17.dsp +++ /dev/null @@ -1,90 +0,0 @@ -# Microsoft Developer Studio Project File - Name="test17" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=test17 - 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 "test17.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 "test17.mak" CFG="test17 - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "test17 - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "test17 - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "test17 - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "test17 - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "test17 - Win32 Release" -# Name "test17 - Win32 Debug" -# Begin Source File - -SOURCE=.\test17.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/test/glut/test18.c b/lib/glut-3.7.6/test/glut/test18.c deleted file mode 100644 index 3d9779cd7..000000000 --- a/lib/glut-3.7.6/test/glut/test18.c +++ /dev/null @@ -1,210 +0,0 @@ - -/* 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. */ - -/* Test display callbacks are not called for non-viewable - windows and overlays. */ - -#include -#include -#include - -int transP, opaqueP; -int main_win, sub_win; -int overlaySupported; -int subHidden, overlayHidden; -int warnIfNormalDisplay = 0; -int firstTime = 1; - -void -time5_cb(int value) -{ - if (value != -3) { - printf("ERROR: test18\n"); - exit(1); - } - printf("PASS: test18\n"); - exit(0); -} - -void -time4_cb(int value) -{ - if (value != -6) { - printf("ERROR: test18\n"); - exit(1); - } - warnIfNormalDisplay = 0; - glutTimerFunc(750, time5_cb, -3); - glutSetWindow(sub_win); - glutPostRedisplay(); - glutSetWindow(main_win); - if (overlaySupported) { - glutPostOverlayRedisplay(); - } -} - -void -time3_cb(int value) -{ - if (value != 6) { - printf("ERROR: test18\n"); - exit(1); - } - glutSetWindow(main_win); - glutHideOverlay(); - overlayHidden = 1; - warnIfNormalDisplay = 1; - glutTimerFunc(500, time4_cb, -6); -} - -void -time2_cb(int value) -{ - if (value != 56) { - printf("ERROR: test18\n"); - exit(1); - } - glutSetWindow(main_win); - if (overlaySupported) { - glutShowOverlay(); - overlayHidden = 0; - } - glutSetWindow(sub_win); - glutHideWindow(); - subHidden = 1; - glutTimerFunc(500, time3_cb, 6); -} - -void -time_cb(int value) -{ - if (value != 456) { - printf("ERROR: test18\n"); - exit(1); - } - glutSetWindow(sub_win); - subHidden = 0; - glutShowWindow(); - glutTimerFunc(500, time2_cb, 56); -} - -void -display(void) -{ - if (warnIfNormalDisplay) { - printf("WARNING: hiding overlay should not generate normal plane expose!\n"); - printf("does overlay operation work correctly?\n"); - } - if (glutLayerGet(GLUT_LAYER_IN_USE) != GLUT_NORMAL) { - printf("ERROR: test18\n"); - exit(1); - } - glClear(GL_COLOR_BUFFER_BIT); - glFlush(); - if (firstTime) { - glutTimerFunc(500, time_cb, 456); - firstTime = 0; - } -} - -void -subDisplay(void) -{ - if (glutLayerGet(GLUT_LAYER_IN_USE) != GLUT_NORMAL) { - printf("ERROR: test18\n"); - exit(1); - } - if (subHidden) { - printf("display callback generated when subwindow was hidden!\n"); - printf("ERROR: test18\n"); - exit(1); - } - glClear(GL_COLOR_BUFFER_BIT); - glFlush(); -} - -void -overDisplay(void) -{ - if (glutLayerGet(GLUT_LAYER_IN_USE) != GLUT_OVERLAY) { - printf("ERROR: test18\n"); - exit(1); - } - if (overlayHidden) { - printf("display callback generated when overlay was hidden!\n"); - printf("ERROR: test18\n"); - exit(1); - } - glClear(GL_COLOR_BUFFER_BIT); - glFlush(); -} - -void -subVis(int state) -{ - if (glutLayerGet(GLUT_LAYER_IN_USE) != GLUT_NORMAL) { - printf("ERROR: test18\n"); - exit(1); - } - if (subHidden && state == GLUT_VISIBLE) { - printf("visible callback generated when overlay was hidden!\n"); - printf("ERROR: test18\n"); - exit(1); - } - if (!subHidden && state == GLUT_NOT_VISIBLE) { - printf("non-visible callback generated when overlay was shown!\n"); - printf("ERROR: test18\n"); - exit(1); - } -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitWindowSize(300, 300); - glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA); - - main_win = glutCreateWindow("test18"); - - if (glutGet(GLUT_WINDOW_COLORMAP_SIZE) != 0) { - printf("RGBA color model windows should report zero colormap entries.\n"); - printf("ERROR: test18\n"); - exit(1); - } - - glutInitDisplayMode(GLUT_SINGLE | GLUT_INDEX); - glutDisplayFunc(display); - - overlaySupported = glutLayerGet(GLUT_OVERLAY_POSSIBLE); - if (overlaySupported) { - glutEstablishOverlay(); - glutHideOverlay(); - overlayHidden = 1; - glutOverlayDisplayFunc(overDisplay); - transP = glutLayerGet(GLUT_TRANSPARENT_INDEX); - glClearIndex(glutLayerGet(GLUT_TRANSPARENT_INDEX)); - opaqueP = (transP + 1) % glutGet(GLUT_WINDOW_COLORMAP_SIZE); - glutSetColor(opaqueP, 1.0, 0.0, 1.0); - glClearIndex(opaqueP); - } - else - { - printf("UNRESOLVED: need overlays for this test (your window system lacks overlays)\n"); - return 0; - } - glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA); - sub_win = glutCreateSubWindow(main_win, 10, 10, 20, 20); - glClearColor(0.0, 1.0, 0.0, 0.0); - glutDisplayFunc(subDisplay); - glutVisibilityFunc(subVis); - glutHideWindow(); - subHidden = 1; - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/test/glut/test18.dsp b/lib/glut-3.7.6/test/glut/test18.dsp deleted file mode 100644 index 2c2897790..000000000 --- a/lib/glut-3.7.6/test/glut/test18.dsp +++ /dev/null @@ -1,90 +0,0 @@ -# Microsoft Developer Studio Project File - Name="test18" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=test18 - 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 "test18.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 "test18.mak" CFG="test18 - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "test18 - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "test18 - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "test18 - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "test18 - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "test18___Win32_Debug" -# PROP BASE Intermediate_Dir "test18___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "test18 - Win32 Release" -# Name "test18 - Win32 Debug" -# Begin Source File - -SOURCE=.\test18.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/test/glut/test19.c b/lib/glut-3.7.6/test/glut/test19.c deleted file mode 100644 index 111980e5a..000000000 --- a/lib/glut-3.7.6/test/glut/test19.c +++ /dev/null @@ -1,67 +0,0 @@ - -/* 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. */ - -/* This test makes sure damaged gets set when a window is - resized smaller. */ - -#include -#include -#include - -int width = -1, height = -1; -int displayCount = 0; - -/* ARGSUSED */ -void -done(int value) -{ - if (displayCount != 2) { - fprintf(stderr, "FAIL: test19, damage expected\n"); - exit(1); - } - fprintf(stderr, "PASS: test19\n"); - exit(0); -} - -void -reshape(int w, int h) -{ - printf("window reshaped: w=%d, h=%d\n", w, h); - width = w; - height = h; -} - -void -display(void) -{ - if (glutLayerGet(GLUT_NORMAL_DAMAGED) == 0) { - fprintf(stderr, "FAIL: test19, damage expected\n"); - exit(1); - } - displayCount++; - if (width == -1 || height == -1) { - fprintf(stderr, "FAIL: test19, reshape not called\n"); - exit(1); - } - glClear(GL_COLOR_BUFFER_BIT); - glFlush(); - if (displayCount == 1) { - glutReshapeWindow(width / 2, height / 2); - glutTimerFunc(1000, done, 0); - } -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutCreateWindow("test19"); - glutDisplayFunc(display); - glutReshapeFunc(reshape); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/test/glut/test19.dsp b/lib/glut-3.7.6/test/glut/test19.dsp deleted file mode 100644 index 5d748273c..000000000 --- a/lib/glut-3.7.6/test/glut/test19.dsp +++ /dev/null @@ -1,90 +0,0 @@ -# Microsoft Developer Studio Project File - Name="test19" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=test19 - 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 "test19.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 "test19.mak" CFG="test19 - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "test19 - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "test19 - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "test19 - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "test19 - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "test19___Win32_Debug" -# PROP BASE Intermediate_Dir "test19___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "test19 - Win32 Release" -# Name "test19 - Win32 Debug" -# Begin Source File - -SOURCE=.\test19.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/test/glut/test2.c b/lib/glut-3.7.6/test/glut/test2.c deleted file mode 100644 index 2573c2cb3..000000000 --- a/lib/glut-3.7.6/test/glut/test2.c +++ /dev/null @@ -1,177 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1994, 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 -#include -#include - -int count = 0, save_count; -int head, tail, diff; - -void -idle(void) -{ - count++; -} - -void -timer2(int value) -{ - if (value != 36) { - printf("FAIL: timer value wrong\n"); - exit(1); - } - if (count != save_count) { - printf("FAIL: counter still counting\n"); - exit(1); - } - printf("PASS: test2\n"); - exit(0); -} - -void -timer(int value) -{ - if (value != 42) { - printf("FAIL: timer value wrong\n"); - exit(1); - } - if (count <= 0) { - printf("FAIL: idle func not running\n"); - exit(1); - } - glutIdleFunc(NULL); - save_count = count; - tail = glutGet(GLUT_ELAPSED_TIME); - diff = tail - head; - printf("diff = %d (%d - %d)\n", diff, tail, head); - if (diff > ((int) 500 * 1.2)) { - printf("THIS TEST IS TIME SENSITIVE; IF IT FAILS, TRY RUNNING IT AGAIN.\n"); - printf("FAIL: timer too late\n"); - exit(1); - } - if (diff < ((int) 500 * .9)) { - printf("THIS TEST IS TIME SENSITIVE; IF IT FAILS, TRY RUNNING IT AGAIN.\n"); - printf("FAIL: timer too soon\n"); - exit(1); - } - glutTimerFunc(100, timer2, 36); -} - -/* ARGSUSED */ -void -menuSelect(int value) -{ -} - -void -NeverVoid(void) -{ - printf("FAIL: NeverVoid should never be called\n"); - exit(1); -} - -/* ARGSUSED */ -void -NeverValue(int value) -{ - printf("FAIL: NeverValue most be NOT visible\n"); - exit(1); -} - -#define NUM 15 - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - glFlush(); -} - -int -main(int argc, char **argv) -{ - int win, menu; - int marray[NUM]; - int warray[NUM]; - int i, j; - GLint isIndex; - - glutInit(&argc, argv); - glutInitWindowPosition(10, 10); - glutInitWindowSize(200, 200); - glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); - win = glutCreateWindow("test2"); - glGetIntegerv(GL_INDEX_MODE, &isIndex); - if (isIndex != 0) { - printf("FAIL: window should be RGBA\n"); - exit(1); - } - glutSetWindow(win); - glutDisplayFunc(display); - menu = glutCreateMenu(menuSelect); - glutSetMenu(menu); - glutReshapeFunc(NULL); - glutReshapeFunc(NULL); - glutKeyboardFunc(NULL); - glutKeyboardFunc(NULL); - glutMouseFunc(NULL); - glutMouseFunc(NULL); - glutMotionFunc(NULL); - glutMotionFunc(NULL); - glutVisibilityFunc(NULL); - glutVisibilityFunc(NULL); - glutMenuStateFunc(NULL); - glutMenuStateFunc(NULL); - glutMenuStatusFunc(NULL); - glutMenuStatusFunc(NULL); - glutSpecialFunc(NULL); - glutSpecialFunc(NULL); - glutSpaceballMotionFunc(NULL); - glutSpaceballMotionFunc(NULL); - glutSpaceballRotateFunc(NULL); - glutSpaceballRotateFunc(NULL); - glutSpaceballButtonFunc(NULL); - glutSpaceballButtonFunc(NULL); - glutButtonBoxFunc(NULL); - glutButtonBoxFunc(NULL); - glutDialsFunc(NULL); - glutDialsFunc(NULL); - glutTabletMotionFunc(NULL); - glutTabletMotionFunc(NULL); - glutTabletButtonFunc(NULL); - glutTabletButtonFunc(NULL); - for (i = 0; i < NUM; i++) { - marray[i] = glutCreateMenu(menuSelect); - warray[i] = glutCreateWindow("test"); - glutDisplayFunc(display); - for (j = 0; j < i; j++) { - glutAddMenuEntry("Hello", 1); - glutAddSubMenu("Submenu", menu); - } - if (marray[i] != glutGetMenu()) { - printf("FAIL: current menu not %d\n", marray[i]); - exit(1); - } - if (warray[i] != glutGetWindow()) { - printf("FAIL: current window not %d\n", warray[i]); - exit(1); - } - glutDisplayFunc(NeverVoid); - glutVisibilityFunc(NeverValue); - glutHideWindow(); - } - for (i = 0; i < NUM; i++) { - glutDestroyMenu(marray[i]); - glutDestroyWindow(warray[i]); - } - glutTimerFunc(500, timer, 42); - head = glutGet(GLUT_ELAPSED_TIME); - glutIdleFunc(idle); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/test/glut/test2.dsp b/lib/glut-3.7.6/test/glut/test2.dsp deleted file mode 100644 index 11d5df975..000000000 --- a/lib/glut-3.7.6/test/glut/test2.dsp +++ /dev/null @@ -1,90 +0,0 @@ -# Microsoft Developer Studio Project File - Name="test2" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=test2 - 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 "test2.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 "test2.mak" CFG="test2 - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "test2 - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "test2 - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "test2 - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 glu32.lib opengl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "test2 - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "test2___Win32_Debug" -# PROP BASE Intermediate_Dir "test2___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 glu32.lib opengl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "test2 - Win32 Release" -# Name "test2 - Win32 Debug" -# Begin Source File - -SOURCE=.\test2.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/test/glut/test20.c b/lib/glut-3.7.6/test/glut/test20.c deleted file mode 100644 index f53971635..000000000 --- a/lib/glut-3.7.6/test/glut/test20.c +++ /dev/null @@ -1,139 +0,0 @@ - -/* 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. */ - -/* Test glutExtensionSupported. */ - -#include -#include -#include -#include - -void -wrangleExtensionName(char *extension) -{ - char buffer[512]; - int rc, len; - - sprintf(buffer, " %s", extension); - rc = glutExtensionSupported(buffer); - if (rc) { - printf("FAIL: test20, space prefix\n"); - exit(1); - } - - sprintf(buffer, "%s ", extension); - rc = glutExtensionSupported(buffer); - if (rc) { - printf("FAIL: test20, space suffix\n"); - exit(1); - } - - sprintf(buffer, "GL_%s", extension); - rc = glutExtensionSupported(buffer); - if (rc) { - printf("FAIL: test20, GL_ prefix\n"); - exit(1); - } - - sprintf(buffer, "%s", extension + 1); - rc = glutExtensionSupported(buffer); - if (rc) { - printf("FAIL: test20, missing first character\n"); - exit(1); - } - - sprintf(buffer, "%s", extension); - len = (int) strlen(buffer); - if(len > 0) { - buffer[len-1] = '\0'; - } - rc = glutExtensionSupported(buffer); - if (rc) { - printf("FAIL: test20, mising last character\n"); - exit(1); - } - - sprintf(buffer, "%s", extension); - len = (int) strlen(buffer); - if(len > 0) { - buffer[len-1] = 'X'; - } - rc = glutExtensionSupported(buffer); - if (rc) { - printf("FAIL: test20, changed last character\n"); - exit(1); - } -} - -int -main(int argc, char **argv) -{ - char *extension; - int rc; - - glutInit(&argc, argv); - glutCreateWindow("test20"); - - extension = "GL_EXT_blend_color"; - rc = glutExtensionSupported(extension); - printf("Extension %s is %s by your OpenGL.\n", extension, rc ? "SUPPORTED" : "NOT supported"); - if (rc) wrangleExtensionName(extension); - - extension = "GL_EXT_abgr"; - rc = glutExtensionSupported(extension); - printf("Extension %s is %s by your OpenGL.\n", extension, rc ? "SUPPORTED" : "NOT supported"); - if (rc) wrangleExtensionName(extension); - - extension = "GL_EXT_blend_minmax"; - rc = glutExtensionSupported(extension); - printf("Extension %s is %s by your OpenGL.\n", extension, rc ? "SUPPORTED" : "NOT supported"); - if (rc) wrangleExtensionName(extension); - - extension = "GL_EXT_blend_logic_op"; - rc = glutExtensionSupported(extension); - printf("Extension %s is %s by your OpenGL.\n", extension, rc ? "SUPPORTED" : "NOT supported"); - if (rc) wrangleExtensionName(extension); - - extension = "GL_EXT_blend_subtract"; - rc = glutExtensionSupported(extension); - printf("Extension %s is %s by your OpenGL.\n", extension, rc ? "SUPPORTED" : "NOT supported"); - if (rc) wrangleExtensionName(extension); - - extension = "GL_EXT_polygon_offset"; - rc = glutExtensionSupported(extension); - printf("Extension %s is %s by your OpenGL.\n", extension, rc ? "SUPPORTED" : "NOT supported"); - if (rc) wrangleExtensionName(extension); - - extension = "GL_EXT_subtexture"; - rc = glutExtensionSupported(extension); - printf("Extension %s is %s by your OpenGL.\n", extension, rc ? "SUPPORTED" : "NOT supported"); - if (rc) wrangleExtensionName(extension); - - extension = "GL_EXT_texture"; - rc = glutExtensionSupported(extension); - printf("Extension %s is %s by your OpenGL.\n", extension, rc ? "SUPPORTED" : "NOT supported"); - if (rc) wrangleExtensionName(extension); - - extension = "GL_EXT_texture_object"; - rc = glutExtensionSupported(extension); - printf("Extension %s is %s by your OpenGL.\n", extension, rc ? "SUPPORTED" : "NOT supported"); - if (rc) wrangleExtensionName(extension); - - extension = "GL_SGIX_framezoom"; - rc = glutExtensionSupported(extension); - printf("Extension %s is %s by your OpenGL.\n", extension, rc ? "SUPPORTED" : "NOT supported"); - if (rc) wrangleExtensionName(extension); - - rc = glutExtensionSupported(""); - if (rc) { - printf("FAIL: test20, null string\n"); - exit(1); - } - - printf("PASS: test20\n"); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/test/glut/test20.dsp b/lib/glut-3.7.6/test/glut/test20.dsp deleted file mode 100644 index 0b3413ca5..000000000 --- a/lib/glut-3.7.6/test/glut/test20.dsp +++ /dev/null @@ -1,90 +0,0 @@ -# Microsoft Developer Studio Project File - Name="test20" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=test20 - 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 "test20.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 "test20.mak" CFG="test20 - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "test20 - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "test20 - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "test20 - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "test20 - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "test20___Win32_Debug" -# PROP BASE Intermediate_Dir "test20___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "test20 - Win32 Release" -# Name "test20 - Win32 Debug" -# Begin Source File - -SOURCE=.\test20.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/test/glut/test21.c b/lib/glut-3.7.6/test/glut/test21.c deleted file mode 100644 index 89a62dcfe..000000000 --- a/lib/glut-3.7.6/test/glut/test21.c +++ /dev/null @@ -1,189 +0,0 @@ - -/* 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. */ - -/* This tests GLUT's video resize API (currently only supported - on SGI's InfiniteReality hardware). */ - -#include -#include -#include -#include - -GLfloat light_diffuse[] = -{1.0, 0.0, 0.0, 1.0}; -GLfloat light_position[] = -{1.0, 1.0, 1.0, 0.0}; - -int x, y, w, h, dx, dy, dw, dh; - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glutSolidTeapot(1.0); - glutSwapBuffers(); -} - -void -show_video_size(void) -{ - printf("GLUT_VIDEO_RESIZE_X = %d\n", - glutVideoResizeGet(GLUT_VIDEO_RESIZE_X)); - printf("GLUT_VIDEO_RESIZE_Y = %d\n", - glutVideoResizeGet(GLUT_VIDEO_RESIZE_Y)); - printf("GLUT_VIDEO_RESIZE_WIDTH = %d\n", - glutVideoResizeGet(GLUT_VIDEO_RESIZE_WIDTH)); - printf("GLUT_VIDEO_RESIZE_HEIGHT = %d\n", - glutVideoResizeGet(GLUT_VIDEO_RESIZE_HEIGHT)); -} - -/* ARGSUSED1 */ -void -key(unsigned char k, int x, int y) -{ - printf("c = %c\n", k); - switch (k) { - case 27: - exit(0); - return; - case 'a': - glutVideoPan(0, 0, 1280, 1024); - break; - case 'b': - glutVideoPan(0, 0, 1600, 1024); - break; - case 'c': - glutVideoPan(640, 512, 640, 512); - break; - case 'q': - glutVideoPan(320, 256, 640, 512); - break; - case '1': - glutVideoResize(0, 0, 640, 512); - break; - case '2': - glutVideoResize(0, 512, 640, 512); - break; - case '3': - glutVideoResize(512, 512, 640, 512); - break; - case '4': - glutVideoResize(512, 0, 640, 512); - break; - case 's': - glutStopVideoResizing(); - break; - case '=': - show_video_size(); - break; - case ' ': - glutPostRedisplay(); - break; - } -} - -/* ARGSUSED */ -void -time2(int value) -{ - glutVideoResize(x, y, w, h); - glutPostRedisplay(); - x -= dx; - y -= dy; - w += (dx * 2); - h += (dy * 2); - if (x > 0) { - glutTimerFunc(100, time2, 0); - } else { - glutStopVideoResizing(); - printf("PASS: test21 (with video resizing tested)\n"); - exit(0); - } -} - -/* ARGSUSED */ -void -time1(int value) -{ - glutVideoPan(x, y, w, h); - x += dx; - y += dy; - w -= (dx * 2); - h -= (dy * 2); - if (x < 200) { - glutTimerFunc(100, time1, 0); - } else { - glutTimerFunc(100, time2, 0); - } -} - -int -main(int argc, char **argv) -{ - int i, interact = 0; - - glutInit(&argc, argv); - - for (i = 1; i < argc; i++) { - if (!strcmp("-i", argv[i])) { - interact = 1; - } - } - - glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); - glutCreateWindow("test21"); - - if (!glutVideoResizeGet(GLUT_VIDEO_RESIZE_POSSIBLE)) { - printf("video resizing not supported\n"); - printf("PASS: test21\n"); - exit(0); - } - glutSetupVideoResizing(); - printf("GLUT_VIDEO_RESIZE_X_DELTA = %d\n", - dx = glutVideoResizeGet(GLUT_VIDEO_RESIZE_X_DELTA)); - printf("GLUT_VIDEO_RESIZE_Y_DELTA = %d\n", - dy = glutVideoResizeGet(GLUT_VIDEO_RESIZE_Y_DELTA)); - printf("GLUT_VIDEO_RESIZE_WIDTH_DELTA = %d\n", - dw = glutVideoResizeGet(GLUT_VIDEO_RESIZE_WIDTH_DELTA)); - printf("GLUT_VIDEO_RESIZE_HEIGHT_DELTA = %d\n", - dh = glutVideoResizeGet(GLUT_VIDEO_RESIZE_HEIGHT_DELTA)); - printf("GLUT_VIDEO_RESIZE_X = %d\n", - x = glutVideoResizeGet(GLUT_VIDEO_RESIZE_X)); - printf("GLUT_VIDEO_RESIZE_Y = %d\n", - y = glutVideoResizeGet(GLUT_VIDEO_RESIZE_Y)); - printf("GLUT_VIDEO_RESIZE_WIDTH = %d\n", - w = glutVideoResizeGet(GLUT_VIDEO_RESIZE_WIDTH)); - printf("GLUT_VIDEO_RESIZE_HEIGHT = %d\n", - h = glutVideoResizeGet(GLUT_VIDEO_RESIZE_HEIGHT)); - glutStopVideoResizing(); - glutSetupVideoResizing(); - - glutDisplayFunc(display); - glutFullScreen(); - - glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); - glLightfv(GL_LIGHT0, GL_POSITION, light_position); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_DEPTH_TEST); - glMatrixMode(GL_PROJECTION); - gluPerspective( /* field of view in degree */ 22.0, - /* aspect ratio */ 1.0, - /* Z near */ 1.0, /* Z far */ 10.0); - glMatrixMode(GL_MODELVIEW); - gluLookAt(0.0, 0.0, 5.0, /* eye is at (0,0,5) */ - 0.0, 0.0, 0.0, /* center is at (0,0,0) */ - 0.0, 1.0, 0.); /* up is in postivie Y direction */ - glTranslatef(0.0, 0.0, -1.0); - - glutKeyboardFunc(key); - if (!interact) { - glutTimerFunc(100, time1, 0); - } - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/test/glut/test21.dsp b/lib/glut-3.7.6/test/glut/test21.dsp deleted file mode 100644 index ef1ef9253..000000000 --- a/lib/glut-3.7.6/test/glut/test21.dsp +++ /dev/null @@ -1,90 +0,0 @@ -# Microsoft Developer Studio Project File - Name="test21" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=test21 - 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 "test21.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 "test21.mak" CFG="test21 - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "test21 - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "test21 - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "test21 - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "test21 - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "test21___Win32_Debug" -# PROP BASE Intermediate_Dir "test21___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "test21 - Win32 Release" -# Name "test21 - Win32 Debug" -# Begin Source File - -SOURCE=.\test21.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/test/glut/test22.c b/lib/glut-3.7.6/test/glut/test22.c deleted file mode 100644 index fdd63fce2..000000000 --- a/lib/glut-3.7.6/test/glut/test22.c +++ /dev/null @@ -1,209 +0,0 @@ - -/* 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. */ - -/* This tests GLUT's glutWindowStatusFunc rotuine. */ - -#include -#include -#include -#include - -int win, subwin, cover; - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glutSwapBuffers(); -} - -/* ARGSUSED */ -void -time_end(int value) -{ - printf("PASS: test22\n"); - exit(0); -} - -/* ARGSUSED */ -void -time5(int value) -{ - glutSetWindow(subwin); - glutPositionWindow(40, 40); -} - -/* ARGSUSED */ -void -time4(int value) -{ - glutSetWindow(subwin); - glutShowWindow(); -} - -/* ARGSUSED */ -void -time3(int value) -{ - glutSetWindow(subwin); - glutHideWindow(); -} - -int sub_state = 0; -int cover_state = 0; -int state = 0; - -void -coverstat(int status) -{ - if (cover != glutGetWindow()) { - printf("ERROR: test22\n"); - exit(1); - } - printf("%d: cover = %d\n", cover_state, status); - switch(cover_state) { - case 0: - if (status != GLUT_FULLY_RETAINED) { - printf("ERROR: test22\n"); - exit(1); - } - glutTimerFunc(1000, time3, 0); - break; - default: - printf("ERROR: test22\n"); - exit(1); - break; - } - cover_state++; -} - -/* ARGSUSED */ -void -time2(int value) -{ - cover = glutCreateSubWindow(win, 5, 5, 105, 105); - glClearColor(0.0, 1.0, 0.0, 0.0); - glutDisplayFunc(display); - glutWindowStatusFunc(coverstat); -} - -void -substat(int status) -{ - if (subwin != glutGetWindow()) { - printf("ERROR: test22\n"); - exit(1); - } - printf("%d: substat = %d\n", sub_state, status); - switch(sub_state) { - case 0: - if (status != GLUT_FULLY_RETAINED) { - printf("ERROR: test22\n"); - exit(1); - } - glutTimerFunc(1000, time2, 0); - break; - case 1: - if (status != GLUT_FULLY_COVERED) { - printf("ERROR: test22\n"); - exit(1); - } - break; - case 2: - if (status != GLUT_HIDDEN) { - printf("ERROR: test22\n"); - exit(1); - } - glutTimerFunc(1000, time4, 0); - break; - case 3: - if (status != GLUT_FULLY_COVERED) { - printf("ERROR: test22\n"); - exit(1); - } - glutTimerFunc(1000, time5, 0); - break; - case 4: - if (status != GLUT_PARTIALLY_RETAINED) { - printf("ERROR: test22\n"); - exit(1); - } - glutTimerFunc(1000, time_end, 0); - break; - default: - printf("ERROR: test22\n"); - exit(1); - break; - } - sub_state++; -} - -/* ARGSUSED */ -void -time1(int value) -{ - subwin = glutCreateSubWindow(win, 10, 10, 100, 100); - glClearColor(0.0, 1.0, 1.0, 0.0); - glutDisplayFunc(display); - glutWindowStatusFunc(substat); -} - -void -winstat(int status) -{ - if (win != glutGetWindow()) { - printf("ERROR: test22\n"); - exit(1); - } - printf("%d: win = %d\n", state, status); - switch(state) { - case 0: - if (status != GLUT_FULLY_RETAINED) { - printf("ERROR: test22\n"); - exit(1); - } - glutTimerFunc(1000, time1, 0); - break; - case 1: - if (status != GLUT_PARTIALLY_RETAINED) { - printf("ERROR: test22\n"); - exit(1); - } - break; - default: - printf("ERROR: test22\n"); - exit(1); - break; - } - state++; -} - -/* ARGSUSED */ -void -visbad(int state) -{ - printf("ERROR: test22\n"); - exit(1); -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - - glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); - win = glutCreateWindow("test22"); - glClearColor(1.0, 0.0, 1.0, 0.0); - glutDisplayFunc(display); - glutVisibilityFunc(visbad); - glutVisibilityFunc(NULL); - glutWindowStatusFunc(NULL); - glutVisibilityFunc(NULL); - glutWindowStatusFunc(winstat); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/test/glut/test22.dsp b/lib/glut-3.7.6/test/glut/test22.dsp deleted file mode 100644 index d2d705b39..000000000 --- a/lib/glut-3.7.6/test/glut/test22.dsp +++ /dev/null @@ -1,90 +0,0 @@ -# Microsoft Developer Studio Project File - Name="test22" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=test22 - 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 "test22.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 "test22.mak" CFG="test22 - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "test22 - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "test22 - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "test22 - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "test22 - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "test22___Win32_Debug" -# PROP BASE Intermediate_Dir "test22___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "test22 - Win32 Release" -# Name "test22 - Win32 Debug" -# Begin Source File - -SOURCE=.\test22.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/test/glut/test23.c b/lib/glut-3.7.6/test/glut/test23.c deleted file mode 100644 index 56f5e2ebd..000000000 --- a/lib/glut-3.7.6/test/glut/test23.c +++ /dev/null @@ -1,138 +0,0 @@ - -/* 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. */ - -/* This tests unexpected interactions between - glutInitDisplayMode and glutInitDisplayString. */ - -#include -#include -#include -#include - -int modes[] = -{ - GLUT_RGB | GLUT_SINGLE, - GLUT_RGB | GLUT_DOUBLE, - GLUT_INDEX | GLUT_SINGLE, - GLUT_INDEX | GLUT_DOUBLE -}; -#define NUM_MODES (sizeof(modes)/sizeof(modes[0])) - -char *strings[] = -{ - "rgb double", - "rgba double", - "rgba single", - "index", - "index double", - "rgb samples=4", - "stencil depth red green blue alpha conformant auxbufs buffer acc acca double rgb rgba", - "stereo index samples slow", - NULL -}; - -char *ostrings[] = -{ - "index double", - "index single", - "index buffer=4", - "index buffer=8", - "index buffer~4", - "index buffer=4 depth", - NULL -}; - -int verbose; - -int -main(int argc, char **argv) -{ - int k, i, j, win; - int num, exists; - char mode[200]; - - glutInit(&argc, argv); - if (argc > 1) { - if (!strcmp(argv[1], "-v")) { - verbose = 1; - } - } - glutInitWindowPosition(10, 10); - glutInitWindowSize(200, 200); - for (k = 0; k < NUM_MODES; k++) { - glutInitDisplayMode(modes[k]); - printf("Display Mode = %d (%s,%s)\n", modes[k], - modes[k] & GLUT_INDEX ? "index" : "rgba", - modes[k] & GLUT_DOUBLE ? "double" : "single"); - for (i = 0; strings[i]; i++) { - glutInitDisplayString(strings[i]); - if (glutGet(GLUT_DISPLAY_MODE_POSSIBLE)) { - if (verbose) - printf(" Possible: %s\n", strings[i]); - win = glutCreateWindow("test23"); - if (verbose) - printf(" Created: %s\n", strings[i]); - for (j = 0; ostrings[j]; j++) { - glutInitDisplayString(ostrings[j]); - if (glutLayerGet(GLUT_OVERLAY_POSSIBLE)) { - if (verbose) - printf(" Overlay possible: %s\n", ostrings[j]); - glutEstablishOverlay(); - if (verbose) - printf(" Overlay establish: %s\n", ostrings[j]); - glutRemoveOverlay(); - if (verbose) - printf(" Overlay remove: %s\n", ostrings[j]); - } - } - glutDestroyWindow(win); - if (verbose) - printf(" Destroyed: %s\n", strings[i]); - } else { - if (verbose) - printf("Not possible: %s\n", strings[i]); - } - } - } - - glutInitDisplayString(NULL); - - num = 1; - do { - sprintf(mode, "rgb num=%d", num); - glutInitDisplayString(mode); - exists = glutGet(GLUT_DISPLAY_MODE_POSSIBLE); - if (exists) { - if (verbose) - printf(" Possible: %s\n", mode); - win = glutCreateWindow("test23"); - if (verbose) - printf(" Created: %s\n", mode); - glutDestroyWindow(win); - if (verbose) - printf(" Destroyed: %s\n", mode); - sprintf(mode, "rgb num=0x%x", num); - glutInitDisplayString(mode); - exists = glutGet(GLUT_DISPLAY_MODE_POSSIBLE); - if (!exists) { - printf("FAIL: test23 (hex num= don't work)\n"); - exit(1); - } - win = glutCreateWindow("test23"); - glutDestroyWindow(win); - num++; - } else { - if (verbose) - printf("Not possible: %s\n", mode); - } - } while (exists); - - glutInitDisplayString(NULL); - - printf("PASS: test23\n"); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/test/glut/test23.dsp b/lib/glut-3.7.6/test/glut/test23.dsp deleted file mode 100644 index 01ed49168..000000000 --- a/lib/glut-3.7.6/test/glut/test23.dsp +++ /dev/null @@ -1,90 +0,0 @@ -# Microsoft Developer Studio Project File - Name="test23" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=test23 - 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 "test23.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 "test23.mak" CFG="test23 - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "test23 - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "test23 - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "test23 - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "test23 - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "test23___Win32_Debug" -# PROP BASE Intermediate_Dir "test23___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "test23 - Win32 Release" -# Name "test23 - Win32 Debug" -# Begin Source File - -SOURCE=.\test23.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/test/glut/test24.c b/lib/glut-3.7.6/test/glut/test24.c deleted file mode 100644 index 6d361dc0c..000000000 --- a/lib/glut-3.7.6/test/glut/test24.c +++ /dev/null @@ -1,146 +0,0 @@ - -/* 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. */ - -/* This tests various obscure interactions in menu creation and - destruction, including the support for Sun's Creator 3D - overlay "high cell" overlay menu colormap cell allocation. */ - -#include -#include -#include - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - glFinish(); -} - -void -timer(int value) -{ - if (value != 23) { - printf("FAIL: bad timer value\n"); - exit(1); - } - printf("PASS: test24\n"); - exit(0); -} - -/* ARGSUSED */ -void -menuSelect(int value) -{ -} - -int -main(int argc, char **argv) -{ - int win1, win2, men1, men2, men3; - - glutInit(&argc, argv); - - if (0 != glutGetMenu()) { - printf("FAIL: current menu wrong, should be zero\n"); - exit(1); - } - if (0 != glutGetWindow()) { - printf("FAIL: current window wrong, should be zero\n"); - exit(1); - } - glutInitWindowSize(140, 140); - - /* Make sure initial glut init display mode is right. */ - if (glutGet(GLUT_INIT_DISPLAY_MODE) != (GLUT_RGBA | GLUT_SINGLE | GLUT_DEPTH)) { - printf("FAIL: init display mode wrong\n"); - exit(1); - } - glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_STENCIL); - if (glutGet(GLUT_INIT_DISPLAY_MODE) != (GLUT_RGBA | GLUT_SINGLE | GLUT_STENCIL)) { - printf("FAIL: display mode wrong\n"); - exit(1); - } - /* Interesting case: creating menu before creating windows. */ - men1 = glutCreateMenu(menuSelect); - - /* Make sure glutCreateMenu doesn't change init display mode. - */ - if (glutGet(GLUT_INIT_DISPLAY_MODE) != (GLUT_RGBA | GLUT_SINGLE | GLUT_STENCIL)) { - printf("FAIL: display mode changed\n"); - exit(1); - } - if (men1 != glutGetMenu()) { - printf("FAIL: current menu wrong\n"); - exit(1); - } - glutAddMenuEntry("hello", 1); - glutAddMenuEntry("bye", 2); - glutAddMenuEntry("yes", 3); - glutAddMenuEntry("no", 4); - glutAddSubMenu("submenu", 5); - - win1 = glutCreateWindow("test24"); - glutDisplayFunc(display); - - if (win1 != glutGetWindow()) { - printf("FAIL: current window wrong\n"); - exit(1); - } - if (men1 != glutGetMenu()) { - printf("FAIL: current menu wrong\n"); - exit(1); - } - men2 = glutCreateMenu(menuSelect); - glutAddMenuEntry("yes", 3); - glutAddMenuEntry("no", 4); - glutAddSubMenu("submenu", 5); - - /* Make sure glutCreateMenu doesn't change init display mode. - */ - if (glutGet(GLUT_INIT_DISPLAY_MODE) != (GLUT_RGBA | GLUT_SINGLE | GLUT_STENCIL)) { - printf("FAIL: display mode changed\n"); - exit(1); - } - if (men2 != glutGetMenu()) { - printf("FAIL: current menu wrong\n"); - exit(1); - } - if (win1 != glutGetWindow()) { - printf("FAIL: current window wrong\n"); - exit(1); - } - win2 = glutCreateWindow("test24 second"); - glutDisplayFunc(display); - - if (win2 != glutGetWindow()) { - printf("FAIL: current window wrong\n"); - exit(1); - } - glutDestroyWindow(win2); - - if (0 != glutGetWindow()) { - printf("FAIL: current window wrong, should be zero\n"); - exit(1); - } - men3 = glutCreateMenu(menuSelect); - glutAddMenuEntry("no", 4); - glutAddSubMenu("submenu", 5); - - if (glutGet(GLUT_INIT_DISPLAY_MODE) != (GLUT_RGBA | GLUT_SINGLE | GLUT_STENCIL)) { - printf("FAIL: display mode changed\n"); - exit(1); - } - glutDestroyMenu(men3); - - if (0 != glutGetMenu()) { - printf("FAIL: current menu wrong, should be zero\n"); - exit(1); - } - glutTimerFunc(2 * 1000, timer, 23); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/test/glut/test24.dsp b/lib/glut-3.7.6/test/glut/test24.dsp deleted file mode 100644 index b6dd67a2a..000000000 --- a/lib/glut-3.7.6/test/glut/test24.dsp +++ /dev/null @@ -1,90 +0,0 @@ -# Microsoft Developer Studio Project File - Name="test24" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=test24 - 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 "test24.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 "test24.mak" CFG="test24 - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "test24 - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "test24 - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "test24 - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "test24 - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "test24___Win32_Debug" -# PROP BASE Intermediate_Dir "test24___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "test24 - Win32 Release" -# Name "test24 - Win32 Debug" -# Begin Source File - -SOURCE=.\test24.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/test/glut/test25.c b/lib/glut-3.7.6/test/glut/test25.c deleted file mode 100644 index beb171a2f..000000000 --- a/lib/glut-3.7.6/test/glut/test25.c +++ /dev/null @@ -1,162 +0,0 @@ - -/* 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. */ - -/* This tests glutBitmapLength and glutStrokeLength. */ - -#include -#include -#include - -unsigned char *abc = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; -char *null = ""; -char *space = " "; - -void *bitmap_fonts[] = -{ - GLUT_BITMAP_TIMES_ROMAN_24, - GLUT_BITMAP_TIMES_ROMAN_10, - GLUT_BITMAP_9_BY_15, - GLUT_BITMAP_8_BY_13, - GLUT_BITMAP_HELVETICA_10, - GLUT_BITMAP_HELVETICA_12, - GLUT_BITMAP_HELVETICA_18 -}; -#define NUM_BITMAP_FONTS (sizeof(bitmap_fonts)/sizeof(void*)) -char *bitmap_names[NUM_BITMAP_FONTS] = -{ - "Times Roman 24", - "Times Roman 10", - "9 by 15", - "8 by 13", - "Helvetica 10", - "Helvetica 12", - "Helvetica 18", -}; -int bitmap_lens[NUM_BITMAP_FONTS] = -{ - 2399, - 1023, - 2016, - 1792, - 1080, - 1291, - 1895 -}; -int bitmap_abc_lens[NUM_BITMAP_FONTS] = -{ - 713, - 305, - 468, - 416, - 318, - 379, - 572, -}; -void *stroke_fonts[] = -{ - GLUT_STROKE_ROMAN, - GLUT_STROKE_MONO_ROMAN -}; -#define NUM_STROKE_FONTS (sizeof(stroke_fonts)/sizeof(void*)) -char *stroke_names[NUM_STROKE_FONTS] = -{ - "Roman", - "Monospaced Roman" -}; -int stroke_lens[NUM_STROKE_FONTS] = -{ - 6635, - 9984 -}; -int stroke_abc_lens[NUM_STROKE_FONTS] = -{ - 3683, - 5408 -}; - -int -main(int argc, char **argv) -{ - void *font; - int total; - int i, j; - - glutInit(&argc, argv); - - /* Touch test the width determination of all bitmap - characters. */ - for (i = 0; i < NUM_BITMAP_FONTS; i++) { - font = bitmap_fonts[i]; - total = 0; - for (j = -2; j < 259; j++) { - total += glutBitmapWidth(font, j); - } - printf(" %s: bitmap total = %d (expected %d)\n", bitmap_names[i], total, bitmap_lens[i]); - if (total != bitmap_lens[i]) { - printf("FAIL: test25\n"); - exit(1); - } - } - - /* Touch test the width determination of all stroke - characters. */ - for (i = 0; i < NUM_STROKE_FONTS; i++) { - font = stroke_fonts[i]; - total = 0; - for (j = -2; j < 259; j++) { - total += glutStrokeWidth(font, j); - } - printf(" %s: stroke total = %d (expected %d)\n", stroke_names[i], total, stroke_lens[i]); - if (total != stroke_lens[i]) { - printf("FAIL: test25\n"); - exit(1); - } - } - - for (i = 0; i < NUM_BITMAP_FONTS; i++) { - font = bitmap_fonts[i]; - total = glutBitmapLength(font, abc); - printf(" %s: bitmap abc len = %d (expected %d)\n", bitmap_names[i], total, bitmap_abc_lens[i]); - if (total != bitmap_abc_lens[i]) { - printf("FAIL: test25\n"); - exit(1); - } - } - - for (i = 0; i < NUM_BITMAP_FONTS; i++) { - font = bitmap_fonts[i]; - total = glutBitmapLength(font, ""); - printf(" %s: bitmap abc len = %d (expected %d)\n", bitmap_names[i], total, 0); - if (total != 0) { - printf("FAIL: test25\n"); - exit(1); - } - } - - for (i = 0; i < NUM_STROKE_FONTS; i++) { - font = stroke_fonts[i]; - total = glutStrokeLength(font, abc); - printf(" %s: stroke abc len = %d (expected %d)\n", stroke_names[i], total, stroke_abc_lens[i]); - if (total != stroke_abc_lens[i]) { - printf("FAIL: test25\n"); - exit(1); - } - } - - for (i = 0; i < NUM_STROKE_FONTS; i++) { - font = stroke_fonts[i]; - total = glutStrokeLength(font, ""); - printf(" %s: stroke null len = %d (expected %d)\n", stroke_names[i], total, 0); - if (total != 0) { - printf("FAIL: test25\n"); - exit(1); - } - } - - printf("PASS: test25\n"); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/test/glut/test25.dsp b/lib/glut-3.7.6/test/glut/test25.dsp deleted file mode 100644 index 55ea85b6d..000000000 --- a/lib/glut-3.7.6/test/glut/test25.dsp +++ /dev/null @@ -1,90 +0,0 @@ -# Microsoft Developer Studio Project File - Name="test25" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=test25 - 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 "test25.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 "test25.mak" CFG="test25 - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "test25 - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "test25 - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "test25 - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "test25 - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "test25___Win32_Debug" -# PROP BASE Intermediate_Dir "test25___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "test25 - Win32 Release" -# Name "test25 - Win32 Debug" -# Begin Source File - -SOURCE=.\test25.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/test/glut/test26.c b/lib/glut-3.7.6/test/glut/test26.c deleted file mode 100644 index 6436d1550..000000000 --- a/lib/glut-3.7.6/test/glut/test26.c +++ /dev/null @@ -1,145 +0,0 @@ - -/* 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. */ - -/* Test for glutPostWindowRedisplay and - glutPostWindowOverlayRedisplay introduced with GLUT 4 API. */ - -#include -#include -#include - -int window1, window2, win1displayed = 0, win2displayed = 0; -int win1vis = 0, win2vis = 0; - -int overlaySupported, transP, opaqueP, over1displayed = 0; - -void -checkifdone(void) -{ - if ((win1displayed > 15) && (win2displayed > 15) && (!overlaySupported || over1displayed>15)) { - printf("PASS: test26\n"); - exit(0); - } -} - -void -window1display(void) -{ - if (glutGetWindow() != window1) { - printf("FAIL: window1display\n"); - exit(1); - } - glClearColor(0, 1, 0, 0); - glClear(GL_COLOR_BUFFER_BIT); - glFlush(); - win1displayed++; - checkifdone(); -} - -void -overDisplay(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - glRectf(-0.5, -0.5, 0.5, 0.5); - glFlush(); - over1displayed++; - checkifdone(); -} - -void -window2display(void) -{ - if (glutGetWindow() != window2) { - printf("FAIL: window2display\n"); - exit(1); - } - glClearColor(0, 0, 1, 0); - glClear(GL_COLOR_BUFFER_BIT); - glutSwapBuffers(); - win2displayed++; - checkifdone(); -} - -/* ARGSUSED */ -void -timefunc(int value) -{ - printf("FAIL: test26\n"); - exit(1); -} - -void -idle(void) -{ - static int count = 0; - - if (count % 2) { - glutPostWindowRedisplay(window1); - glutPostWindowRedisplay(window2); - } else { - glutPostWindowRedisplay(window2); - glutPostWindowRedisplay(window1); - } - if (overlaySupported) { - glutPostWindowOverlayRedisplay(window1); - } - count++; -} - -void -window1vis(int vis) -{ - win1vis = vis; - if (win1vis && win2vis) { - glutIdleFunc(idle); - } -} - -void -window2status(int status) -{ - win2vis = (status == GLUT_FULLY_RETAINED) || (status == GLUT_PARTIALLY_RETAINED); - if (win1vis && win2vis) { - glutIdleFunc(idle); - } -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - - glutInitWindowSize(100, 100); - glutInitWindowPosition(50, 100); - glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); - window1 = glutCreateWindow("1"); - glutDisplayFunc(window1display); - glutVisibilityFunc(window1vis); - - glutInitDisplayMode(GLUT_SINGLE | GLUT_INDEX); - overlaySupported = glutLayerGet(GLUT_OVERLAY_POSSIBLE); - if (overlaySupported) { - printf("testing glutPostWindowOverlayRedisplay since overlay supported\n"); - glutEstablishOverlay(); - glutOverlayDisplayFunc(overDisplay); - transP = glutLayerGet(GLUT_TRANSPARENT_INDEX); - glClearIndex(glutLayerGet(GLUT_TRANSPARENT_INDEX)); - opaqueP = (transP + 1) % glutGet(GLUT_WINDOW_COLORMAP_SIZE); - glutSetColor(opaqueP, 1.0, 0.0, 0.0); - } - - glutInitWindowPosition(250, 100); - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); - window2 = glutCreateWindow("2"); - glutDisplayFunc(window2display); - glutWindowStatusFunc(window2status); - - glutTimerFunc(9000, timefunc, 1); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/test/glut/test26.dsp b/lib/glut-3.7.6/test/glut/test26.dsp deleted file mode 100644 index 6329683f0..000000000 --- a/lib/glut-3.7.6/test/glut/test26.dsp +++ /dev/null @@ -1,90 +0,0 @@ -# Microsoft Developer Studio Project File - Name="test26" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=test26 - 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 "test26.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 "test26.mak" CFG="test26 - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "test26 - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "test26 - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "test26 - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "test26 - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "test26 - Win32 Release" -# Name "test26 - Win32 Debug" -# Begin Source File - -SOURCE=.\test26.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/test/glut/test27.c b/lib/glut-3.7.6/test/glut/test27.c deleted file mode 100644 index cb8108b71..000000000 --- a/lib/glut-3.7.6/test/glut/test27.c +++ /dev/null @@ -1,105 +0,0 @@ - -/* 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. */ - -/* This tests creation of a subwindow that gets "popped" to - check if it also (erroneously) gets moved. GLUT 3.5 had - this bug (fixed in GLUT 3.6). */ - -#include -#include -#include -#include - -int parent, child; -int parentDrawn = 0, childDrawn = 0; - -/* ARGSUSED */ -void -failTest(int value) -{ - printf("FAIL: test27\n"); - exit(1); -} - -/* ARGSUSED */ -void -passTest(int value) -{ - printf("PASS: test27\n"); - exit(0); -} - -void -installFinish(void) -{ - if (childDrawn && parentDrawn) { - glutTimerFunc(1000, passTest, 0); - } -} - -void -output(GLfloat x, GLfloat y, char *string) -{ - int len, i; - - glRasterPos2f(x, y); - len = (int) strlen(string); - for (i = 0; i < len; i++) { - glutBitmapCharacter(GLUT_BITMAP_9_BY_15, string[i]); - } -} - -void -displayParent(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - glFlush(); - parentDrawn++; - installFinish(); -} - -void -displayChild(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - output(-0.4, 0.5, "this"); - output(-0.8, 0.1, "subwindow"); - output(-0.8, -0.3, "should be"); - output(-0.7, -0.7, "centered"); - glFlush(); - childDrawn++; - installFinish(); -} - -int -main(int argc, char **argv) -{ - int possible; - - glutInit(&argc, argv); - glutInitWindowSize(300, 300); - glutInitWindowPosition(5, 5); - glutInitDisplayMode(GLUT_RGB); - parent = glutCreateWindow("test27"); - glClearColor(1.0, 0.0, 0.0, 0.0); - glutDisplayFunc(displayParent); - possible = glutGet(GLUT_DISPLAY_MODE_POSSIBLE); - if (possible != 1) { - printf("FAIL: glutGet returned display mode not possible: %d\n", possible); - exit(1); - } - child = glutCreateSubWindow(parent, 100, 100, 100, 100); - glClearColor(0.0, 1.0, 0.0, 0.0); - glColor3f(0.0, 0.0, 0.0); - glutDisplayFunc(displayChild); - glutPopWindow(); - - glutTimerFunc(10000, failTest, 0); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/test/glut/test27.dsp b/lib/glut-3.7.6/test/glut/test27.dsp deleted file mode 100644 index c054dadfb..000000000 --- a/lib/glut-3.7.6/test/glut/test27.dsp +++ /dev/null @@ -1,90 +0,0 @@ -# Microsoft Developer Studio Project File - Name="test27" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=test27 - 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 "test27.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 "test27.mak" CFG="test27 - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "test27 - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "test27 - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "test27 - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "test27 - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "test27___Win32_Debug" -# PROP BASE Intermediate_Dir "test27___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "test27 - Win32 Release" -# Name "test27 - Win32 Debug" -# Begin Source File - -SOURCE=.\test27.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/test/glut/test28.c b/lib/glut-3.7.6/test/glut/test28.c deleted file mode 100644 index bfeed802e..000000000 --- a/lib/glut-3.7.6/test/glut/test28.c +++ /dev/null @@ -1,56 +0,0 @@ - -/* 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 -#include -#include - -char *fake_argv[] = -{ - "program", -#if 1 - "-iconic", -#endif - NULL}; - -int fake_argc = sizeof(fake_argv) / sizeof(char *) - 1; -int displayed = 0; - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - glutSwapBuffers(); - displayed = 1; -} - -void -timer(int value) -{ - if (displayed) { - printf("FAIL: test28\n"); - exit(1); - } - printf("PASS: test28\n"); - exit(0); -} - -int -main(int argc, char **argv) -{ - glutInit(&fake_argc, fake_argv); - if (fake_argc != 1) { - printf("FAIL: argument processing\n"); - exit(1); - } - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); - glutCreateWindow("test28"); - glutDisplayFunc(display); - glutTimerFunc(2000, timer, 0); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/test/glut/test28.dsp b/lib/glut-3.7.6/test/glut/test28.dsp deleted file mode 100644 index ab05f3488..000000000 --- a/lib/glut-3.7.6/test/glut/test28.dsp +++ /dev/null @@ -1,90 +0,0 @@ -# Microsoft Developer Studio Project File - Name="test28" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=test28 - 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 "test28.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 "test28.mak" CFG="test28 - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "test28 - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "test28 - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "test28 - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "test28 - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "test28___Win32_Debug" -# PROP BASE Intermediate_Dir "test28___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "test28 - Win32 Release" -# Name "test28 - Win32 Debug" -# Begin Source File - -SOURCE=.\test28.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/test/glut/test29.c b/lib/glut-3.7.6/test/glut/test29.c deleted file mode 100644 index a6e6b75f2..000000000 --- a/lib/glut-3.7.6/test/glut/test29.c +++ /dev/null @@ -1,162 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1994, 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. */ - -/* Test timer func resolution but WITHOUT an idle callback registered - (test2 is the same basic test, but it has an idle callback registered). */ - -#include -#include -#include - -int head, tail, diff; - -void -timer2(int value) -{ - if (value != 36) { - printf("FAIL: timer value wrong\n"); - exit(1); - } - printf("PASS: test2\n"); - exit(0); -} - -void -timer(int value) -{ - if (value != 42) { - printf("FAIL: timer value wrong\n"); - exit(1); - } - tail = glutGet(GLUT_ELAPSED_TIME); - diff = tail - head; - printf("diff = %d (%d - %d)\n", diff, tail, head); - if (diff > ((int) 500 * 1.2)) { - printf("THIS TEST IS TIME SENSITIVE; IF IT FAILS, TRY RUNNING IT AGAIN.\n"); - printf("FAIL: timer too late\n"); - exit(1); - } - if (diff < ((int) 500 * .9)) { - printf("THIS TEST IS TIME SENSITIVE; IF IT FAILS, TRY RUNNING IT AGAIN.\n"); - printf("FAIL: timer too soon\n"); - exit(1); - } - glutTimerFunc(100, timer2, 36); -} - -/* ARGSUSED */ -void -menuSelect(int value) -{ -} - -void -NeverVoid(void) -{ - printf("FAIL: NeverVoid should never be called\n"); - exit(1); -} - -/* ARGSUSED */ -void -NeverValue(int value) -{ - printf("FAIL: NeverValue most be NOT visible\n"); - exit(1); -} - -#define NUM 15 - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - glFlush(); -} - -int -main(int argc, char **argv) -{ - int win, menu; - int marray[NUM]; - int warray[NUM]; - int i, j; - GLint isIndex; - - glutInit(&argc, argv); - glutInitWindowPosition(10, 10); - glutInitWindowSize(200, 200); - glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); - win = glutCreateWindow("test2"); - glGetIntegerv(GL_INDEX_MODE, &isIndex); - if (isIndex != 0) { - printf("FAIL: window should be RGBA\n"); - exit(1); - } - glutSetWindow(win); - glutDisplayFunc(display); - menu = glutCreateMenu(menuSelect); - glutSetMenu(menu); - glutReshapeFunc(NULL); - glutReshapeFunc(NULL); - glutKeyboardFunc(NULL); - glutKeyboardFunc(NULL); - glutMouseFunc(NULL); - glutMouseFunc(NULL); - glutMotionFunc(NULL); - glutMotionFunc(NULL); - glutVisibilityFunc(NULL); - glutVisibilityFunc(NULL); - glutMenuStateFunc(NULL); - glutMenuStateFunc(NULL); - glutMenuStatusFunc(NULL); - glutMenuStatusFunc(NULL); - glutSpecialFunc(NULL); - glutSpecialFunc(NULL); - glutSpaceballMotionFunc(NULL); - glutSpaceballMotionFunc(NULL); - glutSpaceballRotateFunc(NULL); - glutSpaceballRotateFunc(NULL); - glutSpaceballButtonFunc(NULL); - glutSpaceballButtonFunc(NULL); - glutButtonBoxFunc(NULL); - glutButtonBoxFunc(NULL); - glutDialsFunc(NULL); - glutDialsFunc(NULL); - glutTabletMotionFunc(NULL); - glutTabletMotionFunc(NULL); - glutTabletButtonFunc(NULL); - glutTabletButtonFunc(NULL); - for (i = 0; i < NUM; i++) { - marray[i] = glutCreateMenu(menuSelect); - warray[i] = glutCreateWindow("test"); - glutDisplayFunc(display); - for (j = 0; j < i; j++) { - glutAddMenuEntry("Hello", 1); - glutAddSubMenu("Submenu", menu); - } - if (marray[i] != glutGetMenu()) { - printf("FAIL: current menu not %d\n", marray[i]); - exit(1); - } - if (warray[i] != glutGetWindow()) { - printf("FAIL: current window not %d\n", warray[i]); - exit(1); - } - glutDisplayFunc(NeverVoid); - glutVisibilityFunc(NeverValue); - glutHideWindow(); - } - for (i = 0; i < NUM; i++) { - glutDestroyMenu(marray[i]); - glutDestroyWindow(warray[i]); - } - glutTimerFunc(500, timer, 42); - head = glutGet(GLUT_ELAPSED_TIME); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/test/glut/test3.c b/lib/glut-3.7.6/test/glut/test3.c deleted file mode 100644 index cb6e43b0c..000000000 --- a/lib/glut-3.7.6/test/glut/test3.c +++ /dev/null @@ -1,92 +0,0 @@ - -/* 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 -#include -#include - -#define N 6 -#define M 6 - -int exposed[M * N]; -int ecount = 0; -int viewable[M * N]; -int vcount = 0; - -void -display(void) -{ - int win; - - win = glutGetWindow() - 1; - if (!exposed[win]) { - exposed[win] = 1; - ecount++; - } - glClear(GL_COLOR_BUFFER_BIT); - glFlush(); - if ((ecount == (M * N)) && (vcount == (M * N))) { - printf("PASS: test3\n"); - exit(0); - } -} - -/* ARGSUSED */ -void -view(int state) -{ - int win; - - win = glutGetWindow() - 1; - if (!viewable[win]) { - viewable[win] = 1; - vcount++; - } - if ((ecount == (M * N)) && (vcount == (M * N))) { - printf("PASS: test3\n"); - exit(0); - } -} - -void -timer(int value) -{ - if (value != 23) { - printf("FAIL: bad timer value\n"); - exit(1); - } - printf("FAIL: didn't get all expose and viewable calls in 45 seconds\n"); - exit(1); -} - -int -main(int argc, char **argv) -{ - char buf[100]; - int i, j; - - glutInit(&argc, argv); - glutInitWindowSize(10, 10); - glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); - for (i = 0; i < M; i++) { - for (j = 0; j < N; j++) { - exposed[i * N + j] = 0; - viewable[i * N + j] = 0; - glutInitWindowPosition(100 * i, 100 * j); - sprintf(buf, "%d\n", i * N + j + 1); - glutCreateWindow(buf); - glutDisplayFunc(display); - glutVisibilityFunc(view); - glClearColor(1.0, 0.0, 0.0, 1.0); - } - } - /* XXX Hopefully in 45 seconds, all the windows should - appear, or they probably won't ever appear! */ - glutTimerFunc(45 * 1000, timer, 23); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/test/glut/test3.dsp b/lib/glut-3.7.6/test/glut/test3.dsp deleted file mode 100644 index a3bc5b760..000000000 --- a/lib/glut-3.7.6/test/glut/test3.dsp +++ /dev/null @@ -1,90 +0,0 @@ -# Microsoft Developer Studio Project File - Name="test3" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=test3 - 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 "test3.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 "test3.mak" CFG="test3 - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "test3 - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "test3 - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "test3 - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 glu32.lib opengl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "test3 - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "test3___Win32_Debug" -# PROP BASE Intermediate_Dir "test3___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 glu32.lib opengl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "test3 - Win32 Release" -# Name "test3 - Win32 Debug" -# Begin Source File - -SOURCE=.\test3.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/test/glut/test4.c b/lib/glut-3.7.6/test/glut/test4.c deleted file mode 100644 index 41bdcaaf9..000000000 --- a/lib/glut-3.7.6/test/glut/test4.c +++ /dev/null @@ -1,60 +0,0 @@ - -/* 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 -#include -#include - -int ch = -2; -void *font = GLUT_STROKE_ROMAN; - -void -tick(void) -{ - ch += 1; - if (ch > 180) { - if (font == GLUT_STROKE_MONO_ROMAN) { - printf("PASS: test4\n"); - exit(0); - } - ch = -2; - font = GLUT_STROKE_MONO_ROMAN; - } - glutPostRedisplay(); -} - -void -display(void) -{ - glutIdleFunc(tick); - glClear(GL_COLOR_BUFFER_BIT); - glPushMatrix(); - glutStrokeCharacter(font, ch); - glPopMatrix(); - glutSwapBuffers(); -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); - glutInitWindowSize(200, 200); - glutCreateWindow("Test stroke fonts"); - if (glutGet(GLUT_WINDOW_COLORMAP_SIZE) != 0) { - printf("FAIL: bad RGBA colormap size\n"); - exit(1); - } - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluOrtho2D(-50, 150, -50, 150); - glClearColor(0.0, 0.0, 0.0, 1.0); - glColor3f(1.0, 1.0, 1.0); - glutDisplayFunc(display); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/test/glut/test4.dsp b/lib/glut-3.7.6/test/glut/test4.dsp deleted file mode 100644 index 6b28b88bd..000000000 --- a/lib/glut-3.7.6/test/glut/test4.dsp +++ /dev/null @@ -1,90 +0,0 @@ -# Microsoft Developer Studio Project File - Name="test4" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=test4 - 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 "test4.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 "test4.mak" CFG="test4 - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "test4 - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "test4 - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "test4 - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 glu32.lib opengl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "test4 - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "test4___Win32_Debug" -# PROP BASE Intermediate_Dir "test4___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 glu32.lib opengl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "test4 - Win32 Release" -# Name "test4 - Win32 Debug" -# Begin Source File - -SOURCE=.\test4.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/test/glut/test5.c b/lib/glut-3.7.6/test/glut/test5.c deleted file mode 100644 index 2c8414ab2..000000000 --- a/lib/glut-3.7.6/test/glut/test5.c +++ /dev/null @@ -1,133 +0,0 @@ - -/* 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 -#include -#include - -GLfloat comp; -int mask = 0; - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - glFlush(); - mask |= 1 << glutGetWindow(); -} - -void -timeout(int value) -{ - if (value != 1) { - printf("FAIL: test5\n"); - exit(1); - } - if (mask != 0x6) { - printf("FAIL: test5\n"); - exit(1); - } - printf("PASS: test5\n"); - exit(0); -} - -int -main(int argc, char **argv) -{ - int win1, win2, size; - GLint isIndex; - - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_INDEX); - if (!glutGet(GLUT_DISPLAY_MODE_POSSIBLE)) { - printf("UNRESOLVED: test5 (your OpenGL lacks color index support)\n"); - exit(0); - } - glutInitWindowPosition(45, 45); - win1 = glutCreateWindow("CI test 1"); - glGetIntegerv(GL_INDEX_MODE, &isIndex); - if (isIndex == 0) { - printf("FAIL: test5\n"); - exit(1); - } - size = glutGet(GLUT_WINDOW_COLORMAP_SIZE); - if (size <= 1 || size > (1 << glutGet(GLUT_WINDOW_BUFFER_SIZE))) { - printf("FAIL: test5\n"); - exit(1); - } - glutSetColor(2, 1.0, 3.4, 0.5); - comp = glutGetColor(2, GLUT_RED); - if (comp != 1.0) { - printf("FAIL: test5\n"); - exit(1); - } - comp = glutGetColor(2, GLUT_GREEN); - if (comp != 1.0) { - printf("FAIL: test5\n"); - exit(1); - } - comp = glutGetColor(2, GLUT_BLUE); - if (comp != 0.5) { - printf("FAIL: test5\n"); - exit(1); - } - glutInitWindowPosition(450, 450); - win2 = glutCreateWindow("CI test 2"); - glutCopyColormap(win1); - if (glutGetColor(2, GLUT_RED) != 1.0) { - printf("FAIL: test5\n"); - exit(1); - } - if (glutGetColor(2, GLUT_GREEN) != 1.0) { - printf("FAIL: test5\n"); - exit(1); - } - if (glutGetColor(2, GLUT_BLUE) != 0.5) { - printf("FAIL: test5\n"); - exit(1); - } - glutSetColor(2, -1.0, 0.25, 0.75); - glutSetWindow(win1); - if (win1 != glutGetWindow()) { - printf("FAIL: test5\n"); - exit(1); - } - glutDisplayFunc(display); - if (glutGetColor(2, GLUT_RED) != 1.0) { - printf("FAIL: test5\n"); - exit(1); - } - if (glutGetColor(2, GLUT_GREEN) != 1.0) { - printf("FAIL: test5\n"); - exit(1); - } - if (glutGetColor(2, GLUT_BLUE) != 0.5) { - printf("FAIL: test5\n"); - exit(1); - } - glutSetWindow(win2); - if (win2 != glutGetWindow()) { - printf("FAIL: test5\n"); - exit(1); - } - if (glutGetColor(2, GLUT_RED) != 0.0) { - printf("FAIL: test5\n"); - exit(1); - } - if (glutGetColor(2, GLUT_GREEN) != 0.25) { - printf("FAIL: test5\n"); - exit(1); - } - if (glutGetColor(2, GLUT_BLUE) != 0.75) { - printf("FAIL: test5\n"); - exit(1); - } - glutTimerFunc(1500, timeout, 1); - glutDisplayFunc(display); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/test/glut/test5.dsp b/lib/glut-3.7.6/test/glut/test5.dsp deleted file mode 100644 index 510fad749..000000000 --- a/lib/glut-3.7.6/test/glut/test5.dsp +++ /dev/null @@ -1,90 +0,0 @@ -# Microsoft Developer Studio Project File - Name="test5" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=test5 - 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 "test5.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 "test5.mak" CFG="test5 - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "test5 - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "test5 - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "test5 - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 glu32.lib opengl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "test5 - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "test5___Win32_Debug" -# PROP BASE Intermediate_Dir "test5___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 glu32.lib opengl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "test5 - Win32 Release" -# Name "test5 - Win32 Debug" -# Begin Source File - -SOURCE=.\test5.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/test/glut/test6.c b/lib/glut-3.7.6/test/glut/test6.c deleted file mode 100644 index d897c48b4..000000000 --- a/lib/glut-3.7.6/test/glut/test6.c +++ /dev/null @@ -1,539 +0,0 @@ - -/* 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. */ - -/* This is an interactive test (not automatically run by "make - test") that requires user interaction to verify that input - callbacks operate as expected. */ - -#include -#include -#include - -static int mouseButtons; - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - glFlush(); -} - -void -time7(int value) -{ - if (value != 7) { - printf("FAIL: time7 expected 6\n"); - exit(1); - } - printf("PASS: test6\n"); - exit(0); -} - -void -mstatus(int state) -{ - printf("state: %d\n", state); -} - -void -mstatus2(int state, int x, int y) -{ - printf("state: %d, x=%d, y=%d\n", state, x, y); -} - -void -menu2(int value) -{ - printf("menu item selected: %d\n", value); - if (value != 46) { - printf("FAIL: time6 expected 45\n"); - exit(1); - } - glutDestroyMenu(glutGetMenu()); - glutDestroyWindow(glutGetWindow()); - glutTimerFunc(1000, time7, 7); -} - -void -time6(int value) -{ - if (value != 6) { - printf("FAIL: time6 expected 6\n"); - exit(1); - } - glutMenuStateFunc(mstatus); - glutMenuStatusFunc(mstatus2); - glutCreateMenu(menu2); - glutAddMenuEntry("name", 46); - glutAttachMenu(GLUT_LEFT_BUTTON); - glutAttachMenu(GLUT_MIDDLE_BUTTON); - glutAttachMenu(GLUT_RIGHT_BUTTON); - printf("Pop up menu with any mouse button and select the item\n"); -} - -int estate = 0; - -void -entry(int state) -{ - printf("entry: %s\n", state == GLUT_LEFT ? "left" : "entered"); - switch (estate) { - case 0: - if (state == GLUT_LEFT) - estate++; - break; - case 1: - if (state == GLUT_ENTERED) - estate++; - glutTimerFunc(1000, time6, 6); - glutEntryFunc(NULL); - break; - } -} - -void -time5(int value) -{ - if (value != 5) { - printf("FAIL: time5 expected 5\n"); - exit(1); - } - glutEntryFunc(entry); - printf("In the black window, leave it, then enter it\n"); -} - -void -motion(int x, int y) -{ - printf("motion x=%d, y=%d\n", x, y); - glutMotionFunc(NULL); - glutTimerFunc(1000, time5, 5); -} - -void -time4(int value) -{ - if (value != 4) { - printf("FAIL: time4 expected 4\n"); - exit(1); - } - glutMotionFunc(motion); - printf("In the black window, move mouse with some button held down\n"); -} - -void -passive(int x, int y) -{ - printf("passive x=%d, y=%d\n", x, y); - glutTimerFunc(1000, time4, 4); - glutPassiveMotionFunc(NULL); -} - -void -time3(int value) -{ - if (value != 3) { - printf("FAIL: time3 expected 3\n"); - exit(1); - } - glutPassiveMotionFunc(passive); - printf("In the black window, mouse the mouse around with NO buttons down\n"); -} - -static int mode = 0; - -void -mouse(int button, int state, int x, int y) -{ - printf("but=%d, state=%d, x=%d, y=%d, modifiers=0x%x\n", - button, state, x, y, glutGetModifiers()); - switch (mode) { - case 0: - if (button != GLUT_LEFT_BUTTON && state == GLUT_DOWN) { - printf("FAIL: mouse left down not found\n"); - exit(1); - } - if (glutGetModifiers() != 0) { - printf("FAIL: mouse expected no modifier\n"); - exit(1); - } - mode++; - break; - case 1: - if (button != GLUT_LEFT_BUTTON && state == GLUT_UP) { - printf("FAIL: mouse left up not found\n"); - exit(1); - } - if (glutGetModifiers() != 0) { - printf("FAIL: mouse expected no modifier\n"); - exit(1); - } - switch (mouseButtons) { - case 1: - mode = 6; /* Skip right or middle button tests. */ - printf("In the black window, please click: Shift-left, Ctrl-left, then Alt-left (in that order)\n"); - break; - case 2: - mode = 4; /* Continue with right button test - (skip middle button). */ - break; - case 3: - mode = 2; /* Continue with middle button test. */ - break; - } - break; - case 2: - if (button != GLUT_MIDDLE_BUTTON && state == GLUT_DOWN) { - printf("FAIL: mouse center down not found\n"); - exit(1); - } - if (glutGetModifiers() != 0) { - printf("FAIL: mouse expected no modifier\n"); - exit(1); - } - mode++; - break; - case 3: - if (button != GLUT_MIDDLE_BUTTON && state == GLUT_UP) { - printf("FAIL: mouse center up not found\n"); - exit(1); - } - if (glutGetModifiers() != 0) { - printf("FAIL: mouse expected no modifier\n"); - exit(1); - } - mode++; - break; - case 4: - if (button != GLUT_RIGHT_BUTTON && state == GLUT_DOWN) { - printf("FAIL: mouse right down not found\n"); - exit(1); - } - if (glutGetModifiers() != 0) { - printf("FAIL: mouse expected no modifier\n"); - exit(1); - } - mode++; - break; - case 5: - if (button != GLUT_RIGHT_BUTTON && state == GLUT_UP) { - printf("FAIL: mouse right up not found\n"); - exit(1); - } - if (glutGetModifiers() != 0) { - printf("FAIL: mouse expected no modifier\n"); - exit(1); - } - printf("In the black window, please click: Shift-left, Ctrl-left, then Alt-left (in that order)\n"); - mode++; - break; - case 6: - if (button != GLUT_LEFT_BUTTON && state == GLUT_DOWN) { - printf("FAIL: mouse right down not found\n"); - exit(1); - } - if (glutGetModifiers() != GLUT_ACTIVE_SHIFT) { - printf("FAIL: mouse expected shift modifier\n"); - exit(1); - } - mode++; - break; - case 7: - if (button != GLUT_LEFT_BUTTON && state == GLUT_UP) { - printf("FAIL: mouse right down not found\n"); - exit(1); - } - if (glutGetModifiers() != GLUT_ACTIVE_SHIFT) { - printf("FAIL: mouse expected shift modifier\n"); - exit(1); - } - mode++; - break; - case 8: - if (button != GLUT_LEFT_BUTTON && state == GLUT_DOWN) { - printf("FAIL: mouse right down not found\n"); - exit(1); - } - if (glutGetModifiers() != GLUT_ACTIVE_CTRL) { - printf("FAIL: mouse expected ctrl modifier\n"); - exit(1); - } - mode++; - break; - case 9: - if (button != GLUT_LEFT_BUTTON && state == GLUT_UP) { - printf("FAIL: mouse right down not found\n"); - exit(1); - } - if (glutGetModifiers() != GLUT_ACTIVE_CTRL) { - printf("FAIL: mouse expected ctrl modifier\n"); - exit(1); - } - mode++; - break; - case 10: - if (button != GLUT_LEFT_BUTTON && state == GLUT_DOWN) { - printf("FAIL: mouse right down not found\n"); - exit(1); - } - if (glutGetModifiers() != GLUT_ACTIVE_ALT) { - printf("FAIL: mouse expected alt modifier\n"); - exit(1); - } - mode++; - break; - case 11: - if (button != GLUT_LEFT_BUTTON && state == GLUT_UP) { - printf("FAIL: mouse right down not found\n"); - exit(1); - } - if (glutGetModifiers() != GLUT_ACTIVE_ALT) { - printf("FAIL: mouse expected alt modifier\n"); - exit(1); - } - glutTimerFunc(1000, time3, 3); - glutMouseFunc(NULL); - mode++; - break; - default: - printf("FAIL: mouse called with bad mode: %d\n", mode); - exit(1); - } -} - -/* ARGSUSED */ -void -menu(int selection) -{ - printf("FAIL: menu callback should never be called\n"); - exit(1); -} - -void -time2(int value) -{ - if (value != 2) { - printf("FAIL: time2 expected 2\n"); - exit(1); - } - glutMouseFunc(mouse); - - /* By attaching and detaching a menu to each button, make - sure button usage for menus does not mess up normal button - - callback. */ - glutCreateMenu(menu); - glutAttachMenu(GLUT_RIGHT_BUTTON); - glutAttachMenu(GLUT_MIDDLE_BUTTON); - glutAttachMenu(GLUT_LEFT_BUTTON); - glutDetachMenu(GLUT_RIGHT_BUTTON); - glutDetachMenu(GLUT_MIDDLE_BUTTON); - glutDetachMenu(GLUT_LEFT_BUTTON); - glutDestroyMenu(glutGetMenu()); - - switch (mouseButtons) { - case 3: - printf("In the black window, please click: left, then middle, then right buttons (in that order)\n"); - break; - case 2: - printf("In the black window, please click: left, then right buttons (in that order)\n"); - break; - case 1: - printf("In the black window, please click: left button\n"); - break; - case 0: - /* No mouse buttons?? Skip all subsequent tests since they - involve the mouse. */ - glutTimerFunc(1000, time7, 7); - glutMouseFunc(NULL); - break; - } -} - -int smode = 0; - -/* XXX Warning, sometimes an X window manager will intercept - some keystroke like Alt-F2. Be careful about window manager - interference when running test6. */ - -void -special(int key, int x, int y) -{ - printf("key=%d, x=%d, y=%d, modifiers=0x%x\n", - key, x, y, glutGetModifiers()); - switch (smode) { - case 0: - if (key != GLUT_KEY_F2) { - printf("FAIL: special expected F2\n"); - exit(1); - } - if (glutGetModifiers() != 0) { - printf("FAIL: special expected no modifier\n"); - exit(1); - } - break; - case 1: - if (key != GLUT_KEY_F2) { - printf("FAIL: special expected F2\n"); - exit(1); - } - if (glutGetModifiers() != GLUT_ACTIVE_SHIFT) { - printf("FAIL: special expected shift modifier\n"); - exit(1); - } - break; - case 2: - if (key != GLUT_KEY_F2) { - printf("FAIL: special expected F2\n"); - exit(1); - } - if (glutGetModifiers() != GLUT_ACTIVE_CTRL) { - printf("FAIL: special expected ctrl modifier\n"); - exit(1); - } - break; - case 3: - if (key != GLUT_KEY_F2) { - printf("FAIL: special expected F2\n"); - exit(1); - } - if (glutGetModifiers() != GLUT_ACTIVE_ALT) { - printf("FAIL: special expected alt modifier\n"); - exit(1); - } - glutSpecialFunc(NULL); - glutTimerFunc(1000, time2, 2); - break; - default: - printf("FAIL: special called with bad mode: %d\n", smode); - exit(1); - } - smode++; -} - -void -time1(int value) -{ - printf("PLEASE EXPECT TO SEE A WARNING ON THE NEXT LINE:\n"); - glutGetModifiers(); - printf("DID YOU SEE A WARNING? IT IS AN ERROR NOT TO SEE ONE.\n"); - if (value != 1) { - printf("FAIL: time1 expected 1\n"); - exit(1); - } - glutSpecialFunc(special); - printf("In the black window, please press: F2, Shift-F2, Ctrl-F2, then Alt-F2\n"); -} -int kmode = 0; - -void -keyboard(unsigned char c, int x, int y) -{ - printf("char=%d, x=%d, y=%d, modifiers=0x%x\n", - c, x, y, glutGetModifiers()); - switch (kmode) { - case 0: - if (c != 'g') { - printf("FAIL: keyboard expected g\n"); - exit(1); - } - if (glutGetModifiers() != 0) { - printf("FAIL: keyboard expected no modifier\n"); - exit(1); - } - break; - case 1: - if (c != 'G') { - printf("FAIL: keyboard expected G\n"); - exit(1); - } - if (glutGetModifiers() != GLUT_ACTIVE_SHIFT) { - printf("FAIL: keyboard expected shift modifier\n"); - exit(1); - } - break; - case 2: - if (c != 0x7) { /* Bell, Ctrl-g */ - printf("FAIL: keyboard expected g\n"); - exit(1); - } - if (glutGetModifiers() != GLUT_ACTIVE_CTRL) { - printf("FAIL: keyboard expected ctrl modifier\n"); - exit(1); - } - break; - case 3: - if (c != 'g') { - printf("FAIL: keyboard expected g\n"); - exit(1); - } - if (glutGetModifiers() != GLUT_ACTIVE_ALT) { - printf("FAIL: keyboard expected alt modifier\n"); - exit(1); - } - break; - case 4: - if (c != '\b') { - printf("FAIL: keyboard expected BACKSPACE\n"); - exit(1); - } - if (glutGetModifiers() != 0) { - printf("FAIL: keyboard expected alt modifier\n"); - exit(1); - } - break; - case 5: - if (c != 127) { - printf("FAIL: keyboard expected DEL\n"); - exit(1); - } - if (glutGetModifiers() != 0) { - printf("FAIL: keyboard expected no modifier\n"); - exit(1); - } - glutKeyboardFunc(NULL); - glutTimerFunc(1000, time1, 1); - break; - default: - printf("FAIL: keyboard called with bad mode: %d\n", kmode); - exit(1); - } - kmode++; -} - -void -time0(int value) -{ - if (value != 0) { - printf("FAIL: time0 expected 0\n"); - exit(1); - } - glutKeyboardFunc(keyboard); - printf("In the black window, please press: g, G, Ctrl-g, Alt-g, Backspace, Delete\n"); -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - mouseButtons = glutDeviceGet(GLUT_NUM_MOUSE_BUTTONS); - if (mouseButtons < 0) { - printf("FAIL: negative mouse buttons? mouseButtons=%d\n", - mouseButtons); - exit(1); - } - if (mouseButtons > 3) { - printf("More than 3 mouse buttons (ok). mouseButtons=%d\n", - mouseButtons); - mouseButtons = 3; /* Testing only of 3 mouse buttons. */ - } - glutCreateWindow("test"); - glutDisplayFunc(display); - glutTimerFunc(1000, time0, 0); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/test/glut/test6.dsp b/lib/glut-3.7.6/test/glut/test6.dsp deleted file mode 100644 index 4f36bdeec..000000000 --- a/lib/glut-3.7.6/test/glut/test6.dsp +++ /dev/null @@ -1,90 +0,0 @@ -# Microsoft Developer Studio Project File - Name="test6" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=test6 - 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 "test6.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 "test6.mak" CFG="test6 - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "test6 - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "test6 - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "test6 - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 glu32.lib opengl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "test6 - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "test6___Win32_Debug" -# PROP BASE Intermediate_Dir "test6___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 glu32.lib opengl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "test6 - Win32 Release" -# Name "test6 - Win32 Debug" -# Begin Source File - -SOURCE=.\test6.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/test/glut/test7.c b/lib/glut-3.7.6/test/glut/test7.c deleted file mode 100644 index 15d8f95ed..000000000 --- a/lib/glut-3.7.6/test/glut/test7.c +++ /dev/null @@ -1,199 +0,0 @@ - -/* 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 -#include -#include - -int w1, w2; - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT); -} - -void -time9(int value) -{ - if (value != 9) { - printf("FAIL: time9 expected 9\n"); - exit(1); - } - printf("PASS: test7\n"); - exit(0); -} - -void -time8(int value) -{ - if (value != 8) { - printf("FAIL: time8 expected 8\n"); - exit(1); - } - printf("window 1 to 350x250+20+200; window 2 to 50x150+50+50\n"); - glutSetWindow(w1); - glutReshapeWindow(350, 250); - glutPositionWindow(20, 200); - glutSetWindow(w2); - glutReshapeWindow(50, 150); - glutPositionWindow(50, 50); - glutTimerFunc(1000, time9, 9); -} - -void -time7(int value) -{ - if (value != 7) { - printf("FAIL: time7 expected 7\n"); - exit(1); - } - printf("window 1 fullscreen; window 2 popped on top\n"); - glutSetWindow(w1); - glutShowWindow(); - glutFullScreen(); - glutSetWindow(w2); - glutShowWindow(); - glutPopWindow(); - /* It can take a long time for glutFullScreen to really happen - on a Windows 95 PC. I believe this has to do with the memory - overhead for resizing a huge soft color and/or ancillary buffers. */ - glutTimerFunc(6000, time8, 8); -} - -void -time6(int value) -{ - if (value != 6) { - printf("FAIL: time6 expected 6\n"); - exit(1); - } - printf("change icon tile for both windows\n"); - glutSetWindow(w1); - glutSetIconTitle("icon1"); - glutSetWindow(w2); - glutSetIconTitle("icon2"); - glutTimerFunc(1000, time7, 7); -} - -void -time5(int value) -{ - if (value != 5) { - printf("FAIL: time5 expected 5\n"); - exit(1); - } - glutSetWindow(w1); - if (glutGet(GLUT_WINDOW_X) != 20) { - printf("WARNING: x position expected to be 20\n"); - } - if (glutGet(GLUT_WINDOW_Y) != 20) { - printf("WARNING: y position expected to be 20\n"); - } - if (glutGet(GLUT_WINDOW_WIDTH) != 250) { - printf("WARNING: width expected to be 250\n"); - } - if (glutGet(GLUT_WINDOW_HEIGHT) != 250) { - printf("WARNING: height expected to be 250\n"); - } - glutSetWindow(w2); - if (glutGet(GLUT_WINDOW_X) != 250) { - printf("WARNING: x position expected to be 250\n"); - } - if (glutGet(GLUT_WINDOW_Y) != 250) { - printf("WARNING: y position expected to be 250\n"); - } - if (glutGet(GLUT_WINDOW_WIDTH) != 150) { - printf("WARNING: width expected to be 150\n"); - } - if (glutGet(GLUT_WINDOW_HEIGHT) != 150) { - printf("WARNING: height expected to be 150\n"); - } - printf("iconify both windows\n"); - glutSetWindow(w1); - glutIconifyWindow(); - glutSetWindow(w2); - glutIconifyWindow(); - glutTimerFunc(1000, time6, 6); -} - -void -time4(int value) -{ - if (value != 4) { - printf("FAIL: time4 expected 4\n"); - exit(1); - } - printf("reshape and reposition window\n"); - glutSetWindow(w1); - glutReshapeWindow(250, 250); - glutPositionWindow(20, 20); - glutSetWindow(w2); - glutReshapeWindow(150, 150); - glutPositionWindow(250, 250); - glutTimerFunc(1000, time5, 5); -} - -void -time3(int value) -{ - if (value != 3) { - printf("FAIL: time3 expected 3\n"); - exit(1); - } - printf("show both windows again\n"); - glutSetWindow(w1); - glutShowWindow(); - glutSetWindow(w2); - glutShowWindow(); - glutTimerFunc(1000, time4, 4); -} - -void -time2(int value) -{ - if (value != 2) { - printf("FAIL: time2 expected 2\n"); - exit(1); - } - printf("hiding w1; iconify w2\n"); - glutSetWindow(w1); - glutHideWindow(); - glutSetWindow(w2); - glutIconifyWindow(); - glutTimerFunc(1000, time3, 3); -} - -void -time1(int value) -{ - if (value != 1) { - printf("FAIL: time1 expected 1\n"); - exit(1); - } - printf("changing window titles\n"); - glutSetWindow(w1); - glutSetWindowTitle("changed title"); - glutSetWindow(w2); - glutSetWindowTitle("changed other title"); - glutTimerFunc(2000, time2, 2); -} - -int -main(int argc, char **argv) -{ - glutInitWindowPosition(20, 20); - glutInit(&argc, argv); - w1 = glutCreateWindow("test 1"); - glutDisplayFunc(display); - glutInitWindowPosition(200, 200); - w2 = glutCreateWindow("test 2"); - glutDisplayFunc(display); - glutTimerFunc(1000, time1, 1); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/test/glut/test7.dsp b/lib/glut-3.7.6/test/glut/test7.dsp deleted file mode 100644 index 20be5da41..000000000 --- a/lib/glut-3.7.6/test/glut/test7.dsp +++ /dev/null @@ -1,90 +0,0 @@ -# Microsoft Developer Studio Project File - Name="test7" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=test7 - 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 "test7.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 "test7.mak" CFG="test7 - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "test7 - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "test7 - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "test7 - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 glu32.lib opengl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "test7 - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "test7___Win32_Debug" -# PROP BASE Intermediate_Dir "test7___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 glu32.lib opengl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "test7 - Win32 Release" -# Name "test7 - Win32 Debug" -# Begin Source File - -SOURCE=.\test7.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/test/glut/test8.c b/lib/glut-3.7.6/test/glut/test8.c deleted file mode 100644 index 442ad38f3..000000000 --- a/lib/glut-3.7.6/test/glut/test8.c +++ /dev/null @@ -1,164 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1994, 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 -#include -#include - -int main_w, w[4], win; -int num; - -/* ARGSUSED */ -void -time2(int value) -{ - printf("PASS: test8\n"); - exit(0); -} - -/* ARGSUSED */ -void -time1(int value) -{ - glutSetWindow(w[1]); - glutIdleFunc(NULL); - glutKeyboardFunc(NULL); - glutSetWindow(w[0]); - glutIdleFunc(NULL); /* redundant */ - glutKeyboardFunc(NULL); - glutSetWindow(main_w); - glutIdleFunc(NULL); /* redundant */ - glutKeyboardFunc(NULL); - glutDestroyWindow(w[1]); - glutDestroyWindow(w[0]); - glutDestroyWindow(main_w); - glutTimerFunc(500, time2, 0); -} - -void -display(void) -{ -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - if (glutGet(GLUT_INIT_WINDOW_WIDTH) != 300) { - printf("FAIL: init width wrong\n"); - exit(1); - } - if (glutGet(GLUT_INIT_WINDOW_HEIGHT) != 300) { - printf("FAIL: init height wrong\n"); - exit(1); - } - if (glutGet(GLUT_INIT_WINDOW_X) != -1) { - printf("FAIL: init x wrong\n"); - exit(1); - } - if (glutGet(GLUT_INIT_WINDOW_Y) != -1) { - printf("FAIL: init y wrong\n"); - exit(1); - } - if (glutGet(GLUT_INIT_DISPLAY_MODE) != (GLUT_RGBA | GLUT_SINGLE | GLUT_DEPTH)) { - printf("FAIL: init display mode wrong\n"); - exit(1); - } - glutInitDisplayMode(GLUT_RGB); - main_w = glutCreateWindow("main"); - glutDisplayFunc(display); - num = glutGet(GLUT_DISPLAY_MODE_POSSIBLE); - if (num != 1) { - printf("FAIL: glutGet returned display mode not possible: %d\n", num); - exit(1); - } - num = glutGet(GLUT_WINDOW_NUM_CHILDREN); - if (0 != num) { - printf("FAIL: glutGet returned wrong # children: %d\n", num); - exit(1); - } - w[0] = glutCreateSubWindow(main_w, 10, 10, 20, 20); - glutDisplayFunc(display); - num = glutGet(GLUT_WINDOW_PARENT); - if (main_w != num) { - printf("FAIL: glutGet returned bad parent: %d\n", num); - exit(1); - } - glutSetWindow(main_w); - num = glutGet(GLUT_WINDOW_NUM_CHILDREN); - if (1 != num) { - printf("FAIL: glutGet returned wrong # children: %d\n", num); - exit(1); - } - w[1] = glutCreateSubWindow(main_w, 40, 10, 20, 20); - glutDisplayFunc(display); - num = glutGet(GLUT_WINDOW_PARENT); - if (main_w != num) { - printf("FAIL: glutGet returned bad parent: %d\n", num); - exit(1); - } - glutSetWindow(main_w); - num = glutGet(GLUT_WINDOW_NUM_CHILDREN); - if (2 != num) { - printf("FAIL: glutGet returned wrong # children: %d\n", num); - exit(1); - } - w[2] = glutCreateSubWindow(main_w, 10, 40, 20, 20); - glutDisplayFunc(display); - num = glutGet(GLUT_WINDOW_PARENT); - if (main_w != num) { - printf("FAIL: glutGet returned bad parent: %d\n", num); - exit(1); - } - glutSetWindow(main_w); - num = glutGet(GLUT_WINDOW_NUM_CHILDREN); - if (3 != num) { - printf("FAIL: glutGet returned wrong # children: %d\n", num); - exit(1); - } - w[3] = glutCreateSubWindow(main_w, 40, 40, 20, 20); - glutDisplayFunc(display); - num = glutGet(GLUT_WINDOW_PARENT); - if (main_w != num) { - printf("FAIL: glutGet returned bad parent: %d\n", num); - exit(1); - } - glutSetWindow(main_w); - num = glutGet(GLUT_WINDOW_NUM_CHILDREN); - if (4 != num) { - printf("FAIL: glutGet returned wrong # children: %d\n", num); - exit(1); - } - glutDestroyWindow(w[3]); - num = glutGet(GLUT_WINDOW_NUM_CHILDREN); - if (3 != num) { - printf("FAIL: glutGet returned wrong # children: %d\n", num); - exit(1); - } - w[3] = glutCreateSubWindow(main_w, 40, 40, 20, 20); - glutDisplayFunc(display); - glutCreateSubWindow(w[3], 40, 40, 20, 20); - glutDisplayFunc(display); - glutCreateSubWindow(w[3], 40, 40, 20, 20); - glutDisplayFunc(display); - win = glutCreateSubWindow(w[3], 40, 40, 20, 20); - glutDisplayFunc(display); - glutCreateSubWindow(win, 40, 40, 20, 20); - glutDisplayFunc(display); - win = glutCreateSubWindow(w[3], 40, 40, 20, 20); - glutDisplayFunc(display); - glutCreateSubWindow(win, 40, 40, 20, 20); - glutDisplayFunc(display); - glutDestroyWindow(w[3]); - - w[3] = glutCreateSubWindow(main_w, 40, 40, 20, 20); - glutDisplayFunc(display); - - glutTimerFunc(500, time1, 0); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/test/glut/test8.dsp b/lib/glut-3.7.6/test/glut/test8.dsp deleted file mode 100644 index 9dcbdb27e..000000000 --- a/lib/glut-3.7.6/test/glut/test8.dsp +++ /dev/null @@ -1,90 +0,0 @@ -# Microsoft Developer Studio Project File - Name="test8" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=test8 - 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 "test8.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 "test8.mak" CFG="test8 - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "test8 - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "test8 - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "test8 - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 glu32.lib opengl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "test8 - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "test8___Win32_Debug" -# PROP BASE Intermediate_Dir "test8___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 glu32.lib opengl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "test8 - Win32 Release" -# Name "test8 - Win32 Debug" -# Begin Source File - -SOURCE=.\test8.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/test/glut/test9.c b/lib/glut-3.7.6/test/glut/test9.c deleted file mode 100644 index 8b7740993..000000000 --- a/lib/glut-3.7.6/test/glut/test9.c +++ /dev/null @@ -1,145 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1994, 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 -#include -#include - -int main_w, w1, w2, w3, w4; - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - glutSwapBuffers(); -} - -/* ARGSUSED */ -void -time8(int value) -{ - printf("PASS: test9\n"); - exit(0); -} - -/* ARGSUSED */ -void -time7(int value) -{ - glutDestroyWindow(main_w); - glutTimerFunc(500, time8, 0); -} - -/* ARGSUSED */ -void -time6(int value) -{ - glutDestroyWindow(w1); - glutTimerFunc(500, time7, 0); - glutInitDisplayMode(GLUT_INDEX); - if (!glutGet(GLUT_DISPLAY_MODE_POSSIBLE)) { - printf("UNRESOLVED: test9 (your OpenGL lacks color index support)\n"); - exit(0); - } - w1 = glutCreateSubWindow(main_w, 10, 10, 10, 10); - glutDisplayFunc(display); - w2 = glutCreateSubWindow(w1, 10, 10, 30, 30); - glutDisplayFunc(display); - w3 = glutCreateSubWindow(w2, 10, 10, 50, 50); - glutDisplayFunc(display); - glutInitDisplayMode(GLUT_RGB); - w4 = glutCreateSubWindow(w3, 10, 10, 70, 70); - glClearColor(1.0, 1.0, 1.0, 1.0); - glutDisplayFunc(display); -} - -/* ARGSUSED */ -void -time5(int value) -{ - w1 = glutCreateSubWindow(main_w, 10, 10, 10, 10); - glutDisplayFunc(display); - w2 = glutCreateSubWindow(w1, 10, 10, 30, 30); - glutDisplayFunc(display); - w3 = glutCreateSubWindow(w2, 10, 10, 50, 50); - glutDisplayFunc(display); - glutInitDisplayMode(GLUT_RGB); - w4 = glutCreateSubWindow(w3, 10, 10, 70, 70); - glClearColor(1.0, 1.0, 1.0, 1.0); - glutDisplayFunc(display); - glutTimerFunc(500, time6, 0); -} - -/* ARGSUSED */ -void -time4(int value) -{ - glutDestroyWindow(w4); - glutTimerFunc(500, time5, 0); -} - -/* ARGSUSED */ -void -time3(int value) -{ - glutDestroyWindow(w3); - glutTimerFunc(500, time4, 0); -} - -/* ARGSUSED */ -void -time2(int value) -{ - glutDestroyWindow(w2); - glutTimerFunc(500, time3, 0); -} - -/* ARGSUSED */ -void -time1(int value) -{ - glutDestroyWindow(w1); - glutTimerFunc(500, time2, 0); -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - - glutInitDisplayMode(GLUT_RGB); - main_w = glutCreateWindow("test9"); - glClearColor(0.0, 0.0, 0.0, 0.0); /* black */ - glutDisplayFunc(display); - glutInitDisplayMode(GLUT_INDEX); - if (!glutGet(GLUT_DISPLAY_MODE_POSSIBLE)) { - printf("UNRESOLVED: test9 (your OpenGL lacks color index support)\n"); - exit(0); - } - w1 = glutCreateSubWindow(main_w, 10, 10, 10, 10); - glutSetColor(1, 1.0, 0.0, 0.0); /* red */ - glutSetColor(2, 0.0, 1.0, 0.0); /* green */ - glutSetColor(3, 0.0, 0.0, 1.0); /* blue */ - glClearIndex(1); - glutDisplayFunc(display); - w2 = glutCreateSubWindow(main_w, 30, 30, 10, 10); - glutCopyColormap(w1); - glClearIndex(2); - glutDisplayFunc(display); - w3 = glutCreateSubWindow(main_w, 50, 50, 10, 10); - glutCopyColormap(w1); - glClearIndex(3); - glutDisplayFunc(display); - w4 = glutCreateSubWindow(main_w, 70, 70, 10, 10); - glutCopyColormap(w1); - glutSetColor(3, 1.0, 1.0, 1.0); /* white */ - glClearIndex(3); - glutDisplayFunc(display); - glutTimerFunc(750, time1, 0); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/test/glut/test9.dsp b/lib/glut-3.7.6/test/glut/test9.dsp deleted file mode 100644 index e7e11dc18..000000000 --- a/lib/glut-3.7.6/test/glut/test9.dsp +++ /dev/null @@ -1,90 +0,0 @@ -# Microsoft Developer Studio Project File - Name="test9" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=test9 - 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 "test9.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 "test9.mak" CFG="test9 - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "test9 - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "test9 - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "test9 - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 glu32.lib opengl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "test9 - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "test9___Win32_Debug" -# PROP BASE Intermediate_Dir "test9___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 glu32.lib opengl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "test9 - Win32 Release" -# Name "test9 - Win32 Debug" -# Begin Source File - -SOURCE=.\test9.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/test/glut/tests.dsp b/lib/glut-3.7.6/test/glut/tests.dsp deleted file mode 100644 index ad461645b..000000000 --- a/lib/glut-3.7.6/test/glut/tests.dsp +++ /dev/null @@ -1,86 +0,0 @@ -# Microsoft Developer Studio Project File - Name="tests" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=tests - 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 "tests.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 "tests.mak" CFG="tests - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "tests - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "tests - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "tests - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "tests - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "tests___Win32_Debug" -# PROP BASE Intermediate_Dir "tests___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "tests - Win32 Release" -# Name "tests - Win32 Debug" -# End Target -# End Project diff --git a/lib/glut-3.7.6/test/glut/timer_test.c b/lib/glut-3.7.6/test/glut/timer_test.c deleted file mode 100644 index 5a227641f..000000000 --- a/lib/glut-3.7.6/test/glut/timer_test.c +++ /dev/null @@ -1,68 +0,0 @@ - -/* 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. */ - -/* timer_test is supposed to demonstrate that window system - event related callbacks (like the keyboard callback) do not - "starve out" the dispatching of timer callbacks. Run this - program and hold down the space bar. The correct behavior - (assuming the system does autorepeat) is interleaved "key is - 32" and "timer called" messages. If you don't see "timer - called" messages, that's a problem. This problem exists in - GLUT implementations through GLUT 3.2. */ - -#include -#include - -#ifdef _WIN32 -#include -#define sleep(x) Sleep(1000 * x) -#else -#include -#endif - -#include - -void -display(void) -{ - glClear(GL_COLOR_BUFFER_BIT); - glFlush(); -} - -/* ARGSUSED */ -void -timer(int value) -{ - printf("timer called\n"); - glutTimerFunc(500, timer, 0); -} - -/* ARGSUSED1 */ -void -keyboard(unsigned char k, int x, int y) -{ - static int beenhere = 0; - - if (!beenhere) { - glutTimerFunc(500, timer, 0); - beenhere = 1; - } - printf("key is %d\n", k); - sleep(1); -} - -int -main(int argc, char **argv) -{ - glutInit(&argc, argv); - glutCreateWindow("timer test"); - glClearColor(0.49, 0.62, 0.75, 0.0); - glutDisplayFunc(display); - glutKeyboardFunc(keyboard); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/test/glut/timer_test.dsp b/lib/glut-3.7.6/test/glut/timer_test.dsp deleted file mode 100644 index 0081e8bdf..000000000 --- a/lib/glut-3.7.6/test/glut/timer_test.dsp +++ /dev/null @@ -1,90 +0,0 @@ -# Microsoft Developer Studio Project File - Name="timer_test" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=timer_test - 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 "timer_test.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 "timer_test.mak" CFG="timer_test - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "timer_test - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "timer_test - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "timer_test - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "timer_test - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "timer_test - Win32 Release" -# Name "timer_test - Win32 Debug" -# Begin Source File - -SOURCE=.\timer_test.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/test/mui/Imakefile b/lib/glut-3.7.6/test/mui/Imakefile deleted file mode 100644 index 4130dc593..000000000 --- a/lib/glut-3.7.6/test/mui/Imakefile +++ /dev/null @@ -1,17 +0,0 @@ - -/* Copyright (c) Mark J. Kilgard, 1997. */ - -#include "../../Glut.cf" - -TARGETS = mui_test multi_test - -SRCS = mui_test.c multi_test.c - -AllTarget($(TARGETS)) - -MuiTestProgramTarget(mui_test) -MuiTestProgramTarget(multi_test) - -test: $(TARGETS) - -DependTarget() diff --git a/lib/glut-3.7.6/test/mui/mui_test.c b/lib/glut-3.7.6/test/mui/mui_test.c deleted file mode 100644 index 2d35f7c2e..000000000 --- a/lib/glut-3.7.6/test/mui/mui_test.c +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -#include -#include -#include - -extern int mui_singlebuffered; - -char *strs[] = { "Line 1", "Line 2", "Longer line 3", "Very, very, very long line number four", - "Line 5", "Sixth line", "Seventh line", "Line number 8", "9", "10", "The eleventh line", - "line 12", "Line number 13", "Quite long line 14", "15", - "Line 1", "Line 2", "Longer line 3", "Very, very, very long line number four", - "Line 5", "Sixth line", "Seventh line", "Line number 8", "9", "10", "The eleventh line", - "line 12", "Line number 13", "Quite long line 14", "15", 0, }; - -muiObject *b1, *b2, *b3, *rb1, *rb2, *rb3, *t, *t1, *l, *l1, *vs, *tl; -muiObject *trb1, *trb2, *trb3, *pd, *hs; - -int M1, M2, M3; /* menus */ - -void controltltop(muiObject *obj, enum muiReturnValue value) -{ - float sliderval; - - if ((value != MUI_SLIDER_RETURN) && (value != MUI_SLIDER_THUMB)) return; - sliderval = muiGetVSVal(obj); - muiSetTLTop(tl, sliderval); -} - -#define THUMBHEIGHT 20 -#define ARROWSPACE 40 - -void menucallback(int x) -{ - printf("menu callback: %d\n", x); -} - -void maketestmenus(void) -{ - M1 = glutCreateMenu(menucallback); - glutAddMenuEntry("Open", 1); - glutAddMenuEntry("Close", 2); - glutAddMenuEntry("Read", 3); - - M2 = glutCreateMenu(menucallback); - glutAddMenuEntry("Edit", 4); - glutAddMenuEntry("Cut", 5); - glutAddMenuEntry("Paste", 6); - - M3 = glutCreateMenu(menucallback); - glutAddMenuEntry("Help1", 7); - glutAddMenuEntry("Help2", 8); - glutAddMenuEntry("Help3", 9); - -} - -void bcallback(muiObject *obj, enum muiReturnValue r) -{ - obj = obj; r = r; /* for lint's sake */ - printf("Test 3 callback\n"); -} - -void maketestui(void) -{ - int xmin, ymin, xmax, ymax; - - maketestmenus(); - muiNewUIList(1); /* makes an MUI display list (number 1) */ - b1 = muiNewButton(10, 100, 10, 35); - b2 = muiNewButton(10, 100, 40, 65); - b3 = muiNewButton(10, 100, 70, 95); - rb1 = muiNewRadioButton(10, 380); - muiLoadButton(rb1, "Radio1"); - rb2 = muiNewRadioButton(10, 350); - muiLoadButton(rb2, "Radio2"); - rb3 = muiNewRadioButton(10, 320); - muiLoadButton(rb3, "Radio3"); - muiLinkButtons(rb1, rb2); - muiLinkButtons(rb2, rb3); - trb1 = muiNewTinyRadioButton(10, 450); - muiLoadButton(trb1, "TRadio1"); - trb2 = muiNewTinyRadioButton(10, 430); - muiLoadButton(trb2, "TRadio2"); - trb3 = muiNewTinyRadioButton(10, 410); - muiLoadButton(trb3, "TRadio3"); - muiLinkButtons(trb1, trb2); - muiLinkButtons(trb2, trb3); - t = muiNewTextbox(110, 250, 50); - muiSetActive(t, 1); - t1 = muiNewTextbox(110, 270, 20); - l = muiNewLabel(110, 85, "Label"); - l1 = muiNewBoldLabel(110, 110, "Bold Label"); - tl = muiNewTextList(20, 120, 200, 9); - muiGetObjectSize(tl, &xmin, &ymin, &xmax, &ymax); - vs = muiNewVSlider(xmax, ymin+2, ymax, 0, THUMBHEIGHT); - hs = muiNewHSlider(20, 290, 280, 0, THUMBHEIGHT); - muiSetVSValue(vs, 1.0); - muiSetVSArrowDelta(vs, (ymax-ymin-10-THUMBHEIGHT-ARROWSPACE)/((sizeof strs)/(sizeof (char *))-9)); - muiLoadButton(b1, "Test"); - muiLoadButton(b2, "Test22"); - muiLoadButton(b3, "Test3"); - muiSetCallback(b3, bcallback); - pd = muiNewPulldown(); - muiAddPulldownEntry(pd, "File", M1, 0); - muiAddPulldownEntry(pd, "Edit", M2, 0); - muiAddPulldownEntry(pd, "Help", M3, 1); - muiSetTLStrings(tl, strs); - muiSetCallback(vs, controltltop); -} - -int main(int argc, char **argv) -{ - glutInit(&argc, argv); - if (argc > 1) mui_singlebuffered = 1; - glutInitWindowPosition(100, 100); - glutInitWindowSize(300, 500); - if (mui_singlebuffered) - glutInitDisplayMode( GLUT_RGB | GLUT_SINGLE ); - else - glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE ); - glutCreateWindow("test"); - maketestui(); - muiInit(); - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/test/mui/mui_test.dsp b/lib/glut-3.7.6/test/mui/mui_test.dsp deleted file mode 100644 index 850568761..000000000 --- a/lib/glut-3.7.6/test/mui/mui_test.dsp +++ /dev/null @@ -1,90 +0,0 @@ -# Microsoft Developer Studio Project File - Name="mui_test" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=mui_test - 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 "mui_test.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 "mui_test.mak" CFG="mui_test - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "mui_test - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "mui_test - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "mui_test - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 glu32.lib opengl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "mui_test - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "mui_test___Win32_Debug" -# PROP BASE Intermediate_Dir "mui_test___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 glu32.lib opengl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "mui_test - Win32 Release" -# Name "mui_test - Win32 Debug" -# Begin Source File - -SOURCE=.\mui_test.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/test/mui/multi_test.c b/lib/glut-3.7.6/test/mui/multi_test.c deleted file mode 100644 index 1e7bdf100..000000000 --- a/lib/glut-3.7.6/test/mui/multi_test.c +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (c) 1993-1997, 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(R) is a registered trademark of Silicon Graphics, Inc. - */ - -#include -#include -#include - -extern int mui_singlebuffered; - -muiObject *b1, *b2, *b3; - -void bcallback(muiObject *obj, enum muiReturnValue r) -{ - obj = obj; r = r; /* for lint's sake */ - printf("Test 3 callback, win = %d\n", glutGetWindow()); -} - -void maketestui(int win) -{ - muiNewUIList(win); /* makes an MUI display list (number 1) */ - b1 = muiNewButton(10, 100, 10, 35); - b2 = muiNewButton(10, 100, 40, 65); - b3 = muiNewButton(10, 100, 70, 95); - muiLoadButton(b1, "Test1"); - muiLoadButton(b2, "Test2"); - muiLoadButton(b3, "Test3"); - muiSetCallback(b3, bcallback); - muiAttachUIList(win); -} - -int main(int argc, char **argv) -{ - glutInit(&argc, argv); - if (argc > 1) mui_singlebuffered = 1; - glutInitWindowSize(110, 105); - if (mui_singlebuffered) - glutInitDisplayMode( GLUT_RGB | GLUT_SINGLE ); - else - glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE ); - - glutCreateWindow("1"); - muiInit(); - maketestui(1); - - glutCreateWindow("2"); - muiInit(); - maketestui(2); - - glutMainLoop(); - return 0; /* ANSI C requires main to return int. */ -} diff --git a/lib/glut-3.7.6/test/mui/multi_test.dsp b/lib/glut-3.7.6/test/mui/multi_test.dsp deleted file mode 100644 index 043034197..000000000 --- a/lib/glut-3.7.6/test/mui/multi_test.dsp +++ /dev/null @@ -1,90 +0,0 @@ -# Microsoft Developer Studio Project File - Name="multi_test" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=multi_test - 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 "multi_test.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 "multi_test.mak" CFG="multi_test - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "multi_test - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "multi_test - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "multi_test - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 glu32.lib opengl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "multi_test - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "multi_test___Win32_Debug" -# PROP BASE Intermediate_Dir "multi_test___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 glu32.lib opengl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "multi_test - Win32 Release" -# Name "multi_test - Win32 Debug" -# Begin Source File - -SOURCE=.\multi_test.c -# End Source File -# End Target -# End Project diff --git a/lib/glut-3.7.6/test/test.dsw b/lib/glut-3.7.6/test/test.dsw deleted file mode 100644 index 8fc1833b9..000000000 --- a/lib/glut-3.7.6/test/test.dsw +++ /dev/null @@ -1,839 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "_all"=".\glut\_all.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name bigtest - End Project Dependency - Begin Project Dependency - Project_Dep_Name cursor_test - End Project Dependency - Begin Project Dependency - Project_Dep_Name glut32 - End Project Dependency - Begin Project Dependency - Project_Dep_Name joy_test - End Project Dependency - Begin Project Dependency - Project_Dep_Name keyup_test - End Project Dependency - Begin Project Dependency - Project_Dep_Name menu_test - End Project Dependency - Begin Project Dependency - Project_Dep_Name over_test - End Project Dependency - Begin Project Dependency - Project_Dep_Name shape_test - End Project Dependency - Begin Project Dependency - Project_Dep_Name test1 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test10 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test11 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test12 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test13 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test14 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test15 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test16 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test17 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test18 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test19 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test2 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test20 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test21 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test22 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test23 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test24 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test25 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test26 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test27 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test28 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test3 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test4 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test5 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test6 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test7 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test8 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test9 - End Project Dependency - Begin Project Dependency - Project_Dep_Name tests - End Project Dependency - Begin Project Dependency - Project_Dep_Name timer_test - End Project Dependency -}}} - -############################################################################### - -Project: "bigtest"=".\glut\bigtest.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "cursor_test"=".\glut\cursor_test.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name glut32 - End Project Dependency -}}} - -############################################################################### - -Project: "joy_test"=".\glut\joy_test.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name glut32 - End Project Dependency -}}} - -############################################################################### - -Project: "keyup_test"=".\glut\keyup_test.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name glut32 - End Project Dependency -}}} - -############################################################################### - -Project: "menu_test"=".\glut\menu_test.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name glut32 - End Project Dependency -}}} - -############################################################################### - -Project: "mui"="..\lib\mui\mui.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "mui_test"=".\mui\mui_test.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name mui - End Project Dependency -}}} - -############################################################################### - -Project: "multi_test"=".\mui\multi_test.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name mui - End Project Dependency -}}} - -############################################################################### - -Project: "over_test"=".\glut\over_test.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name glut32 - End Project Dependency -}}} - -############################################################################### - -Project: "shape_test"=".\glut\shape_test.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name glut32 - End Project Dependency -}}} - -############################################################################### - -Project: "test1"=".\glut\test1.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name glut32 - End Project Dependency -}}} - -############################################################################### - -Project: "test10"=".\glut\test10.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name glut32 - End Project Dependency -}}} - -############################################################################### - -Project: "test11"=".\glut\test11.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name glut32 - End Project Dependency -}}} - -############################################################################### - -Project: "test12"=".\glut\test12.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name glut32 - End Project Dependency -}}} - -############################################################################### - -Project: "test13"=".\glut\test13.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name glut32 - End Project Dependency -}}} - -############################################################################### - -Project: "test14"=".\glut\test14.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name glut32 - End Project Dependency -}}} - -############################################################################### - -Project: "test15"=".\glut\test15.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name glut32 - End Project Dependency -}}} - -############################################################################### - -Project: "test16"=".\glut\test16.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name glut32 - End Project Dependency -}}} - -############################################################################### - -Project: "test17"=".\glut\test17.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name glut32 - End Project Dependency -}}} - -############################################################################### - -Project: "test18"=".\glut\test18.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name glut32 - End Project Dependency -}}} - -############################################################################### - -Project: "test19"=".\glut\test19.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name glut32 - End Project Dependency -}}} - -############################################################################### - -Project: "test2"=".\glut\test2.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name glut32 - End Project Dependency -}}} - -############################################################################### - -Project: "test20"=".\glut\test20.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name glut32 - End Project Dependency -}}} - -############################################################################### - -Project: "test21"=".\glut\test21.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name glut32 - End Project Dependency -}}} - -############################################################################### - -Project: "test22"=".\glut\test22.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name glut32 - End Project Dependency -}}} - -############################################################################### - -Project: "test23"=".\glut\test23.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name glut32 - End Project Dependency -}}} - -############################################################################### - -Project: "test24"=".\glut\test24.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name glut32 - End Project Dependency -}}} - -############################################################################### - -Project: "test25"=".\glut\test25.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name glut32 - End Project Dependency -}}} - -############################################################################### - -Project: "test26"=".\glut\test26.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name glut32 - End Project Dependency -}}} - -############################################################################### - -Project: "test27"=".\glut\test27.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name glut32 - End Project Dependency -}}} - -############################################################################### - -Project: "test28"=".\glut\test28.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name glut32 - End Project Dependency -}}} - -############################################################################### - -Project: "test3"=".\glut\test3.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name glut32 - End Project Dependency -}}} - -############################################################################### - -Project: "test4"=".\glut\test4.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name glut32 - End Project Dependency -}}} - -############################################################################### - -Project: "test5"=".\glut\test5.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name glut32 - End Project Dependency -}}} - -############################################################################### - -Project: "test6"=".\glut\test6.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name glut32 - End Project Dependency -}}} - -############################################################################### - -Project: "test7"=".\glut\test7.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name glut32 - End Project Dependency -}}} - -############################################################################### - -Project: "test8"=".\glut\test8.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name glut32 - End Project Dependency -}}} - -############################################################################### - -Project: "test9"=".\glut\test9.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name glut32 - End Project Dependency -}}} - -############################################################################### - -Project: "tests"=".\glut\tests.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name bigtest - End Project Dependency - Begin Project Dependency - Project_Dep_Name cursor_test - End Project Dependency - Begin Project Dependency - Project_Dep_Name joy_test - End Project Dependency - Begin Project Dependency - Project_Dep_Name keyup_test - End Project Dependency - Begin Project Dependency - Project_Dep_Name menu_test - End Project Dependency - Begin Project Dependency - Project_Dep_Name over_test - End Project Dependency - Begin Project Dependency - Project_Dep_Name shape_test - End Project Dependency - Begin Project Dependency - Project_Dep_Name test10 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test11 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test12 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test13 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test14 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test15 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test16 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test17 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test18 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test19 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test2 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test20 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test21 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test22 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test23 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test24 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test25 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test26 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test27 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test28 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test3 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test4 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test5 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test6 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test7 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test8 - End Project Dependency - Begin Project Dependency - Project_Dep_Name test9 - End Project Dependency - Begin Project Dependency - Project_Dep_Name timer_test - End Project Dependency -}}} - -############################################################################### - -Project: "timer_test"=".\glut\timer_test.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name glut32 - End Project Dependency -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - -- GitLab