%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{code}
module Main() where
\end{code}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{code}
import Control.Monad( unless )
import Data.StateVar( get )
import qualified Graphics.UI.GLFW as GLFW
    ( WindowMode(..), DisplayBits(..), KeyButtonState(..), SpecialKey(..)
    , WindowParam(..)
    , initialize, openWindow, closeWindow, terminate, windowTitle, windowParam
    , swapBuffers, getKey, sleep )
import Graphics.Rendering.OpenGL( ($=) )
import qualified Graphics.Rendering.OpenGL as GL
    ( Size(..) )
import Paths_hdemo( version )
\end{code}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{code}
versionString :: String
versionString = show version
\end{code}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{code}
main   :: IO()
main = do
  GLFW.initialize
  GLFW.openWindow (GL.Size 640 480) [GLFW.DisplayAlphaBits 8] GLFW.Window
  GLFW.windowTitle $= "HDemo Engine " ++ versionString

  mainLoop

  GLFW.sleep 5
  GLFW.closeWindow
  GLFW.terminate
\end{code}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{code}
mainLoop :: IO ()
mainLoop = do
  GLFW.swapBuffers
  p <- GLFW.getKey GLFW.ESC
  unless (p == GLFW.Press) $ 
         do
           --GLFW.sleep 0.001
           windowStatus <- get $ GLFW.windowParam GLFW.Opened
           unless (windowStatus == 0) mainLoop
\end{code}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
