From a467698986a86fd73f452d17495471e538acd09e Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Sat, 16 Sep 2017 11:13:00 +0200 Subject: Basic wrapper --- src/.gitignore | 3 +++ src/Makefile | 15 +++++++++++++++ src/runchess.hs | 35 +++++++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+) create mode 100644 src/.gitignore create mode 100644 src/Makefile create mode 100644 src/runchess.hs (limited to 'src') diff --git a/src/.gitignore b/src/.gitignore new file mode 100644 index 0000000..c181314 --- /dev/null +++ b/src/.gitignore @@ -0,0 +1,3 @@ +*.hi +*.o +runchess diff --git a/src/Makefile b/src/Makefile new file mode 100644 index 0000000..6e140a1 --- /dev/null +++ b/src/Makefile @@ -0,0 +1,15 @@ +EXE:=runchess +AUX:=$(addsuffix .o,$(EXE)) $(addsuffix .hi,$(EXE)) +GHC:=ghc +GHCFLAGS:=-O + +all: $(EXE) + +run: $(EXE) + ./$(EXE) + +$(EXE): %: %.hs + $(GHC) $(GHCFLAGS) $< -o $@ + +clean: + $(RM) $(EXE) $(AUX) diff --git a/src/runchess.hs b/src/runchess.hs new file mode 100644 index 0000000..27a6da8 --- /dev/null +++ b/src/runchess.hs @@ -0,0 +1,35 @@ +-- vim: sw=2 ts=2 et: +import Control.Monad +import Control.Monad.Trans.State.Lazy + +import Data.Attoparsec.ByteString.Char8 +import Data.ByteString.Char8 (pack) +import Data.Maybe + +import Chess +import Chess.FEN +import Chess.PGN + +main = readPGN >>= mapM_ applyPGN + +readPGN :: IO [PGN] +readPGN = do + pgn <- pack <$> getContents + case parseOnly pgnParser pgn of + Left err -> error err + Right [] -> error "no games" + Right games -> return games + +applyPGN :: PGN -> IO () +applyPGN pgn = printGame (foldM (flip moveSAN) defaultBoard $ moves pgn) pgn + +printGame :: Either MoveError Board -> PGN -> IO () +printGame b pgn = printPGN pgn >> printBoard b + where + printBoard (Left e) = putStrLn $ show e + printBoard (Right b) = putStr $ show b + + printPGN :: PGN -> IO () + printPGN pgn = do + putStrLn $ site pgn ++ " " ++ date pgn ++ ": " ++ whitePlayer pgn ++ " vs. " ++ blackPlayer pgn + putStrLn $ show $ result pgn -- cgit v1.2.3