packages feed

gruff-examples-0.3.1: src/gruff-convert.hs

import Data.Maybe (mapMaybe)
import System.Environment (getArgs)
import System.FilePath ((</>), takeFileName)

import Convert.Common (Image)
import Convert.Gruff  (gruff)
import Convert.Gruff1 (gruff1)
import Convert.Gruff2a(gruff2a)
import Convert.Gruff2 (gruff2)

parsers :: [String -> Maybe Image]
parsers = [gruff2, gruff2a, gruff1, gruff]

main :: IO ()
main = do
  args <- getArgs
  case args of
    odir:files@(_:_) -> mapM_ (main1 odir) files
    _ -> putStrLn "usage: gruff-convert outdir/ *.oldformat.gruff"

main1 :: FilePath -> FilePath -> IO ()
main1 odir file = do
  old <- readFile file
  case mapMaybe ($ old) parsers of
    []    -> putStrLn $ "Error: `" ++ file ++ "' unrecognised"
    [new] -> writeFile (odir </> takeFileName file) (show new)
    _     -> putStrLn $ "Error: `" ++ file ++ "' ambiguous"