    {-# LANGUAGE ForeignFunctionInterface, CPP #-}
    -- #hide
    -----------------------------------------------------------------------------
    -- |
    -- Module      :  Graphics.UI.GLUT.Raw.Functions
    -- Copyright   :  (c) Sven Panne 2009
    -- License     :  BSD-style (see the file LICENSE)
    --
    -- Maintainer  :  sven.panne@aedion.de
    -- Stability   :  stable
    -- Portability :  portable
    --
    -- All raw functions from GLUT and freeglut.
    --
    -----------------------------------------------------------------------------

    module Graphics.UI.GLUT.Raw.Functions (
       glutGetProcAddress,
       glutGetColor,
       glutStrokeHeight,
       glutBitmapHeight,
       glutBitmapLength,
       glutBitmapWidth,
       glutCreateMenu,
       glutCreateSubWindow,
       glutCreateWindow,
       glutDeviceGet,
       glutEnterGameMode,
       glutExtensionSupported,
       glutGameModeGet,
       glutGet,
       glutGetMenu,
       glutGetModifiers,
       glutGetWindow,
       glutLayerGet,
       glutStrokeLength,
       glutStrokeWidth,
       glutVideoResizeGet,
       glutGetModeValues,
       glutAddMenuEntry,
       glutAddSubMenu,
       glutAttachMenu,
       glutBitmapCharacter,
       glutBitmapString,
       glutButtonBoxFunc,
       glutChangeToMenuEntry,
       glutChangeToSubMenu,
       glutCloseFunc,
       glutCopyColormap,
       glutDestroyMenu,
       glutDestroyWindow,
       glutDetachMenu,
       glutDialsFunc,
       glutDisplayFunc,
       glutEntryFunc,
       glutEstablishOverlay,
       glutExit,
       glutForceJoystickFunc,
       glutFullScreen,
       glutFullScreenToggle,
       glutGameModeString,
       glutHideOverlay,
       glutHideWindow,
       glutIconifyWindow,
       glutIdleFunc,
       glutIgnoreKeyRepeat,
       glutInit,
       glutInitContextFlags,
       glutInitContextVersion,
       glutInitContextProfile,
       glutInitDisplayMode,
       glutInitDisplayString,
       glutInitWindowPosition,
       glutInitWindowSize,
       glutJoystickFunc,
       glutKeyboardFunc,
       glutKeyboardUpFunc,
       glutLeaveGameMode,
       glutLeaveMainLoop,
       glutMainLoop,
       glutMainLoopEvent,
       glutMenuDestroyFunc,
       glutMenuStateFunc,
       glutMenuStatusFunc,
       glutMotionFunc,
       glutMouseFunc,
       glutMouseWheelFunc,
       glutOverlayDisplayFunc,
       glutPassiveMotionFunc,
       glutPopWindow,
       glutPositionWindow,
       glutPostOverlayRedisplay,
       glutPostRedisplay,
       glutPostWindowOverlayRedisplay,
       glutPostWindowRedisplay,
       glutPushWindow,
       glutRemoveMenuItem,
       glutRemoveOverlay,
       glutReportErrors,
       glutReshapeFunc,
       glutReshapeWindow,
       glutSetColor,
       glutSetCursor,
       glutSetIconTitle,
       glutSetKeyRepeat,
       glutSetMenu,
       glutSetMenuData,
       glutSetOption,
       glutSetWindow,
       glutSetWindowData,
       glutSetWindowTitle,
       glutSetupVideoResizing,
       glutShowOverlay,
       glutShowWindow,
       glutSolidCone,
       glutSolidCube,
       glutSolidCylinder,
       glutSolidDodecahedron,
       glutSolidIcosahedron,
       glutSolidOctahedron,
       glutSolidRhombicDodecahedron,
       glutSolidSierpinskiSponge,
       glutSolidSphere,
       glutSolidTeapot,
       glutSolidTetrahedron,
       glutSolidTorus,
       glutSpaceballButtonFunc,
       glutSpaceballMotionFunc,
       glutSpaceballRotateFunc,
       glutSpecialFunc,
       glutSpecialUpFunc,
       glutStopVideoResizing,
       glutStrokeCharacter,
       glutStrokeString,
       glutSwapBuffers,
       glutTabletButtonFunc,
       glutTabletMotionFunc,
       glutTimerFunc,
       glutUseLayer,
       glutVideoPan,
       glutVideoResize,
       glutVisibilityFunc,
       glutWMCloseFunc,
       glutWarpPointer,
       glutWindowStatusFunc,
       glutWireCone,
       glutWireCube,
       glutWireCylinder,
       glutWireDodecahedron,
       glutWireIcosahedron,
       glutWireOctahedron,
       glutWireRhombicDodecahedron,
       glutWireSierpinskiSponge,
       glutWireSphere,
       glutWireTeapot,
       glutWireTetrahedron,
       glutWireTorus,
       glutGetMenuData,
       glutGetWindowData
    ) where

    import Foreign.C.Types
    import Foreign.Ptr
    import Graphics.Rendering.OpenGL.Raw.Core31.Types
    import Graphics.UI.GLUT.Raw.APIEntry
    import Graphics.UI.GLUT.Raw.Callbacks

    #include "HsGLUTExt.h"

    API_ENTRY(glutGetProcAddress,Ptr CChar -> IO (FunPtr a))
    API_ENTRY(glutGetColor,CInt -> CInt -> IO GLfloat)
    API_ENTRY(glutStrokeHeight,Ptr a -> IO GLfloat)
    API_ENTRY(glutBitmapHeight,Ptr a -> IO CInt)
    API_ENTRY(glutBitmapLength,Ptr a -> Ptr CUChar -> IO CInt)
    API_ENTRY(glutBitmapWidth,Ptr a -> CInt -> IO CInt)
    API_ENTRY(glutCreateMenu,FunPtr MenuFunc -> IO CInt)
    API_ENTRY(glutCreateSubWindow,CInt -> CInt -> CInt -> CInt -> CInt -> IO CInt)
    API_ENTRY(glutCreateWindow,Ptr CChar -> IO CInt)
    API_ENTRY(glutDeviceGet,GLenum -> IO CInt)
    API_ENTRY(glutEnterGameMode,IO CInt)
    API_ENTRY(glutExtensionSupported,Ptr CChar -> IO CInt)
    API_ENTRY(glutGameModeGet,GLenum -> IO CInt)
    API_ENTRY(glutGet,GLenum -> IO CInt)
    API_ENTRY(glutGetMenu,IO CInt)
    API_ENTRY(glutGetModifiers,IO CInt)
    API_ENTRY(glutGetWindow,IO CInt)
    API_ENTRY(glutLayerGet,GLenum -> IO CInt)
    API_ENTRY(glutStrokeLength,Ptr a -> Ptr CUChar -> IO CInt)
    API_ENTRY(glutStrokeWidth,Ptr a -> CInt -> IO CInt)
    API_ENTRY(glutVideoResizeGet,GLenum -> IO CInt)
    API_ENTRY(glutGetModeValues,GLenum -> Ptr CInt -> IO (Ptr CInt))
    API_ENTRY(glutAddMenuEntry,Ptr CChar -> CInt -> IO ())
    API_ENTRY(glutAddSubMenu,Ptr CChar -> CInt -> IO ())
    API_ENTRY(glutAttachMenu,CInt -> IO ())
    API_ENTRY(glutBitmapCharacter,Ptr a -> CInt -> IO ())
    API_ENTRY(glutBitmapString,Ptr a -> Ptr CUChar -> IO ())
    API_ENTRY(glutButtonBoxFunc,FunPtr ButtonBoxFunc -> IO ())
    API_ENTRY(glutChangeToMenuEntry,CInt -> Ptr CChar -> CInt -> IO ())
    API_ENTRY(glutChangeToSubMenu,CInt -> Ptr CChar -> CInt -> IO ())
    API_ENTRY(glutCloseFunc,FunPtr CloseFunc -> IO ())
    API_ENTRY(glutCopyColormap,CInt -> IO ())
    API_ENTRY(glutDestroyMenu,CInt -> IO ())
    API_ENTRY(glutDestroyWindow,CInt -> IO ())
    API_ENTRY(glutDetachMenu,CInt -> IO ())
    API_ENTRY(glutDialsFunc,FunPtr DialsFunc -> IO ())
    API_ENTRY(glutDisplayFunc,FunPtr DisplayFunc -> IO ())
    API_ENTRY(glutEntryFunc,FunPtr EntryFunc -> IO ())
    API_ENTRY_SAFE(glutEstablishOverlay,IO ())
    API_ENTRY(glutExit,IO ())
    API_ENTRY(glutForceJoystickFunc,IO ())
    API_ENTRY(glutFullScreen,IO ())
    API_ENTRY(glutFullScreenToggle,IO ())
    API_ENTRY(glutGameModeString,Ptr CChar -> IO ())
    API_ENTRY_SAFE(glutHideOverlay,IO ())
    API_ENTRY(glutHideWindow,IO ())
    API_ENTRY(glutIconifyWindow,IO ())
    API_ENTRY(glutIdleFunc,FunPtr IdleFunc -> IO ())
    API_ENTRY(glutIgnoreKeyRepeat,CInt -> IO ())
    API_ENTRY(glutInit,Ptr CInt -> Ptr (Ptr CChar) -> IO ())
    API_ENTRY(glutInitContextFlags,CInt -> IO ())
    API_ENTRY(glutInitContextVersion,CInt -> CInt -> IO ())
    API_ENTRY(glutInitContextProfile,CInt -> IO ())
    API_ENTRY(glutInitDisplayMode,CUInt -> IO ())
    API_ENTRY(glutInitDisplayString,Ptr CChar -> IO ())
    API_ENTRY(glutInitWindowPosition,CInt -> CInt -> IO ())
    API_ENTRY(glutInitWindowSize,CInt -> CInt -> IO ())
    API_ENTRY(glutJoystickFunc,FunPtr JoystickFunc -> CInt -> IO ())
    API_ENTRY(glutKeyboardFunc,FunPtr KeyboardFunc -> IO ())
    API_ENTRY(glutKeyboardUpFunc,FunPtr KeyboardUpFunc -> IO ())
    API_ENTRY(glutLeaveGameMode,IO ())
    API_ENTRY_SAFE(glutLeaveMainLoop,IO ())
    API_ENTRY_SAFE(glutMainLoop,IO ())
    API_ENTRY_SAFE(glutMainLoopEvent,IO ())
    API_ENTRY(glutMenuDestroyFunc,FunPtr MenuDestroyFunc -> IO ())
    API_ENTRY(glutMenuStateFunc,FunPtr MenuStateFunc -> IO ())
    API_ENTRY(glutMenuStatusFunc,FunPtr MenuStatusFunc -> IO ())
    API_ENTRY(glutMotionFunc,FunPtr MotionFunc -> IO ())
    API_ENTRY(glutMouseFunc,FunPtr MouseFunc -> IO ())
    API_ENTRY(glutMouseWheelFunc,FunPtr MouseWheelFunc -> IO ())
    API_ENTRY(glutOverlayDisplayFunc,FunPtr OverlayDisplayFunc -> IO ())
    API_ENTRY(glutPassiveMotionFunc,FunPtr PassiveMotionFunc -> IO ())
    API_ENTRY(glutPopWindow,IO ())
    API_ENTRY(glutPositionWindow,CInt -> CInt -> IO ())
    API_ENTRY_SAFE(glutPostOverlayRedisplay,IO ())
    API_ENTRY(glutPostRedisplay,IO ())
    API_ENTRY_SAFE(glutPostWindowOverlayRedisplay,CInt -> IO ())
    API_ENTRY(glutPostWindowRedisplay,CInt -> IO ())
    API_ENTRY(glutPushWindow,IO ())
    API_ENTRY(glutRemoveMenuItem,CInt -> IO ())
    API_ENTRY_SAFE(glutRemoveOverlay,IO ())
    API_ENTRY(glutReportErrors,IO ())
    API_ENTRY(glutReshapeFunc,FunPtr ReshapeFunc -> IO ())
    API_ENTRY(glutReshapeWindow,CInt -> CInt -> IO ())
    API_ENTRY(glutSetColor,CInt -> GLfloat -> GLfloat -> GLfloat -> IO ())
    API_ENTRY(glutSetCursor,CInt -> IO ())
    API_ENTRY(glutSetIconTitle,Ptr CChar -> IO ())
    API_ENTRY(glutSetKeyRepeat,CInt -> IO ())
    API_ENTRY(glutSetMenu,CInt -> IO ())
    API_ENTRY(glutSetMenuData,Ptr a -> IO ())
    API_ENTRY(glutSetOption,GLenum -> CInt -> IO ())
    API_ENTRY(glutSetWindow,CInt -> IO ())
    API_ENTRY(glutSetWindowData,Ptr a -> IO ())
    API_ENTRY(glutSetWindowTitle,Ptr CChar -> IO ())
    API_ENTRY(glutSetupVideoResizing,IO ())
    API_ENTRY_SAFE(glutShowOverlay,IO ())
    API_ENTRY(glutShowWindow,IO ())
    API_ENTRY(glutSolidCone,GLdouble -> GLdouble -> GLint -> GLint -> IO ())
    API_ENTRY(glutSolidCube,GLdouble -> IO ())
    API_ENTRY(glutSolidCylinder,GLdouble -> GLdouble -> GLint -> GLint -> IO ())
    API_ENTRY(glutSolidDodecahedron,IO ())
    API_ENTRY(glutSolidIcosahedron,IO ())
    API_ENTRY(glutSolidOctahedron,IO ())
    API_ENTRY(glutSolidRhombicDodecahedron,IO ())
    API_ENTRY(glutSolidSierpinskiSponge,CInt -> Ptr GLdouble -> GLdouble -> IO ())
    API_ENTRY(glutSolidSphere,GLdouble -> GLint -> GLint -> IO ())
    API_ENTRY(glutSolidTeapot,GLdouble -> IO ())
    API_ENTRY(glutSolidTetrahedron,IO ())
    API_ENTRY(glutSolidTorus,GLdouble -> GLdouble -> GLint -> GLint -> IO ())
    API_ENTRY(glutSpaceballButtonFunc,FunPtr SpaceballButtonFunc -> IO ())
    API_ENTRY(glutSpaceballMotionFunc,FunPtr SpaceballMotionFunc -> IO ())
    API_ENTRY(glutSpaceballRotateFunc,FunPtr SpaceballRotateFunc -> IO ())
    API_ENTRY(glutSpecialFunc,FunPtr SpecialFunc -> IO ())
    API_ENTRY(glutSpecialUpFunc,FunPtr SpecialUpFunc -> IO ())
    API_ENTRY(glutStopVideoResizing,IO ())
    API_ENTRY(glutStrokeCharacter,Ptr a -> CInt -> IO ())
    API_ENTRY(glutStrokeString,Ptr a -> Ptr CUChar -> IO ())
    API_ENTRY(glutSwapBuffers,IO ())
    API_ENTRY(glutTabletButtonFunc,FunPtr TabletButtonFunc -> IO ())
    API_ENTRY(glutTabletMotionFunc,FunPtr TabletMotionFunc -> IO ())
    API_ENTRY(glutTimerFunc,CUInt -> FunPtr TimerFunc -> CInt -> IO ())
    API_ENTRY_SAFE(glutUseLayer,GLenum -> IO ())
    API_ENTRY(glutVideoPan,CInt -> CInt -> CInt -> CInt -> IO ())
    API_ENTRY(glutVideoResize,CInt -> CInt -> CInt -> CInt -> IO ())
    API_ENTRY(glutVisibilityFunc,FunPtr VisibilityFunc -> IO ())
    API_ENTRY(glutWMCloseFunc,FunPtr WMCloseFunc -> IO ())
    API_ENTRY(glutWarpPointer,CInt -> CInt -> IO ())
    API_ENTRY(glutWindowStatusFunc,FunPtr WindowStatusFunc -> IO ())
    API_ENTRY(glutWireCone,GLdouble -> GLdouble -> GLint -> GLint -> IO ())
    API_ENTRY(glutWireCube,GLdouble -> IO ())
    API_ENTRY(glutWireCylinder,GLdouble -> GLdouble -> GLint -> GLint -> IO ())
    API_ENTRY(glutWireDodecahedron,IO ())
    API_ENTRY(glutWireIcosahedron,IO ())
    API_ENTRY(glutWireOctahedron,IO ())
    API_ENTRY(glutWireRhombicDodecahedron,IO ())
    API_ENTRY(glutWireSierpinskiSponge,CInt -> Ptr GLdouble -> GLdouble -> IO ())
    API_ENTRY(glutWireSphere,GLdouble -> GLint -> GLint -> IO ())
    API_ENTRY(glutWireTeapot,GLdouble -> IO ())
    API_ENTRY(glutWireTetrahedron,IO ())
    API_ENTRY(glutWireTorus,GLdouble -> GLdouble -> GLint -> GLint -> IO ())
    API_ENTRY(glutGetMenuData,IO (Ptr a))
    API_ENTRY(glutGetWindowData,IO (Ptr a))