content: {-# LANGUAGE TemplateHaskell #-}
  
  module Config where
  
  import Data.Label
  import System.Console.GetOpt
  
  
  data Config = Config
    {
      _configWidth        :: Int
    , _configHeight       :: Int
    , _configFilePath     :: Maybe FilePath
    }
    deriving Show
  
  $(mkLabels [''Config])
  
  defaults :: Config
  defaults = Config
    { _configWidth        = 800
    , _configHeight       = 600
    , _configFilePath     = Nothing
    }
  
  options :: [OptDescr (Config -> Config)]
  options =
    [ Option []   ["width"]       (ReqArg (set configWidth . read) "INT")         "visualisation width (800)"
    , Option []   ["height"]      (ReqArg (set configHeight . read) "INT")        "visualisation height (600)"
    , Option []   ["bmp"]         (ReqArg (set configFilePath . Just) "FILE")     "save image to file"
    ]
  
  
  header :: [String]
  header =
    [ "accelerate-mandelbrot (c) [2011..2016] The Accelerate Team"
    , ""
    , "Usage: accelerate-mandelbrot [OPTIONS]"
    , ""
    ]
  
  footer :: [String]
  footer =
    [ ""
    , "Runtime usage:"
    , "     ESC           quit"
    , "     mouse drag    translate display"
    , "     w/s           zoom in/out"
    , "     a/d           iteration count"
    , "     z/c           escape radius"
    , "     0 .. 9        select presets"
    , "     r             reset display"
    , "     .             print current configuration"
    , "     p             switch between single/double precision"
    , ""
    ]
  
  