packages feed

animascii-0.1.0.0: src/Config.hs

{-# Language OverloadedStrings #-}

module Config where

import Data.Ini.Config
import Data.Text.IO as TI

type Colour = String
data Config = Config { cFPS     :: Integer,
                       cIDir    :: FilePath,
                       cODir    :: FilePath,
                       cGif     :: Bool,
                       cSerial  :: Bool,
                                  -- fg, bg
                       cColours :: (Colour, Colour) }
            deriving (Show)

configParser :: IniParser Config
configParser = do
    fps <- section "general" $ do
        i <- fieldOf "fps" number
        return i
    (idir, odir) <- section "directory" $ do
        i <- fieldOf "input"  string
        o <- fieldOf "output" string
        return (i, o)
    (bgif, bser) <- section "render" $ do
        g <- fieldOf "gif" flag
        s <- fieldOf "serial" flag
        return (g, s)
    (fgcol, bgcol) <- section "gif" $ do
        f <- fieldOf "fgcol" string
        b <- fieldOf "bgcol" string
        return (f, b)
    return (Config fps idir odir bgif bser (fgcol, bgcol))

getConfig :: IO Config
getConfig = TI.readFile "config.ini"    >>= \t  ->
            let ec = parseIniFile t configParser in
            case ec of
              Left e  -> error ("error in ini: " ++ e)
              Right c -> return c