[project @ 2001-08-22 12:24:41 by simonmar]
[ghc-hetmet.git] / ghc / tests / programs / andy_cherry / Main.lhs
diff --git a/ghc/tests/programs/andy_cherry/Main.lhs b/ghc/tests/programs/andy_cherry/Main.lhs
deleted file mode 100644 (file)
index beab702..0000000
+++ /dev/null
@@ -1,203 +0,0 @@
-> module Main (main) where
-
-> import GenUtils
-> import DataTypes
-> import Parser
-> import Interp
-> import PrintTEX
-
-> import System -- 1.3 (partain)
-> import Char -- 1.3
-
-> --fakeArgs = "game001.txt"
-> --fakeArgs = "pca2.pgn"
-> --fakeArgs = "silly.pgn"
-> --fakeArgs = "small.pgn"
-> --fakeArgs = "sicil.pgn"
-> --fakeArgs = "badgame.pgn"
-> --fakeArgs = "mycgames.pgn"
-> fakeArgs = "rab.pgn"
-
-> version = "0.3"
-
-
-> main = do
->      args <- getArgs
->      let (style,fn,filename) = interpArgs args
->      file <- readFile filename
->      std_in <- getContents
->      let games = pgnParser fn file   -- parse relavent pgn games
->      putStr (prog style std_in games)
-
->{- OLD 1.2:
-> main = 
->      getArgs         abort                           $ \ args ->
->      --let args = (words "-d tex analgames.pgn") in
->      let (style,fn,filename) = interpArgs args in
->      readFile filename abort                         $ \ file ->
->      readChan stdin abort                            $ \ std_in ->
->      let games = pgnParser fn file   -- parse relavent pgn games
->      in
->      appendChan stdout (prog style std_in games) abort done
->-}
-
-> interpArgs :: [String] -> (OutputStyle,Int -> Bool,String)
-> --interpArgs [] = (ViewGame,const True,fakeArgs)
-> interpArgs [] = interpArgs (words "-d pgn analgames.pgn")
-> interpArgs files = interpArgs' OutputPGN (const True) files
-
-> interpArgs' style fn ("-d":"pgn":xs)    = interpArgs' OutputPGN    fn xs
-> interpArgs' style fn ("-d":"rawpgn":xs) = interpArgs' OutputRawPGN fn xs
-> interpArgs' style fn ("-d":"play":xs)   = interpArgs' ViewGame     fn xs
-> interpArgs' style fn ("-d":"parser":xs) = interpArgs' OutputParser fn xs
-> interpArgs' style fn ("-d":"tex":xs)    = interpArgs' OutputTEX    fn xs
-> interpArgs' style fn ("-d":"head":xs)   = interpArgs' OutputHeader fn xs
-> interpArgs' style fn ("-g":range:xs) 
->      = interpArgs' style (changeFn (parse range)) xs
->    where
->      changeFn (Digit n:Line:Digit m:r) x = moreChangeFn r x || x >= n && x <= m 
->      changeFn (Line:Digit m:r) x = moreChangeFn r x || x <= m 
->      changeFn (Digit n:Line:r) x = moreChangeFn r x || x >= n 
->      changeFn (Digit n:r) x = moreChangeFn r x || x == n
->      changeFn _ _ = rangeError
->      moreChangeFn [] = const False
->      moreChangeFn (Comma:r) = changeFn r
->      moreChangeFn _ = rangeError
->      parse xs@(n:_) 
->              | isDigit n = case span isDigit xs of
->                              (dig,rest) -> Digit (read dig) : parse rest
->      parse ('-':r) = Line : parse r
->      parse (',':r) = Comma : parse r
->      parse [] = []
->      parse _ = rangeError
->      rangeError = error ("incorrect -g option (" ++ range ++ ")\n")
-
-> interpArgs' style fn [file] = (style,fn,file)
-> interpArgs' style fn args = error ("bad args: " ++ unwords args)
-
-> data Tok 
->      = Digit Int             -- n
->      | Line                  -- -
->      | Comma                 -- ,
-
-> data OutputStyle
-
->      = OutputPGN             -- pgn
->      | OutputRawPGN          -- rawpgn
->      | OutputHeader          -- header
->      | ViewGame              -- play
->      | ViewGameEmacs         -- emacs
->      | TwoColumn             -- 2col
->      | TestGames             -- test
->      | OutputTEX
-
-Finally the debug options.
-
->      | OutputParser  -- simply dump out the string read in.
->      | CmpGen        -- cmp 2nd and 3rd generations of output 
-
-The *main* program. 
-
-> prog :: OutputStyle          -- style of action
->      -> String               -- stdin (for interactive bits)
->      -> [AbsGame]            -- input games
->      -> String               -- result
-> prog OutputPGN _
->              = pgnPrinter True       -- print out game(s)
->              . map runInterp         -- interprete all games
-> prog OutputRawPGN _
->              = pgnPrinter False      -- print out game(s)
->              . map runInterp         -- interprete all games
-> prog OutputHeader _
->              = pgnHeadPrinter        -- print out game(s) headers
->              . map runInterp         -- interprete all games
-> prog OutputTEX _
->              = texPrinter            -- print out game(s)
->              . map runInterp         -- interprete all games
-> prog ViewGame std_in
->              = interactViewer std_in -- print out game(s)
->              . runInterp             -- interprete the game
->              . head                  -- should check for only *one* object
-> prog OutputParser _ 
->              = userFormat
-
-%------------------------------------------------------------------------------
-
-Printing the pgn file.
-
-1) if White, *always* print number,
-2) is After comment / variation, print number, ie 2. Nf4 ( <stuff> ) 2... Rh8 
-
-
-> type PrintState = (Bool,MoveNumber) 
-
-> pgnPrinter :: Bool -> [RealGame] -> String
-> pgnPrinter detail = unlines . concat . map printGame
->   where
->      printMoveNumber :: Bool -> MoveNumber -> String
->      printMoveNumber False (MoveNumber _ Black) = ""
->      printMoveNumber _     mvnum = userFormat mvnum ++ " "
-
->      printQuantums :: PrintState -> [Quantum] -> [String]
->      printQuantums ps = concat . fst . mapAccumL printQuantum ps
-
->      printQuantum :: PrintState -> Quantum -> ([String],PrintState)
->      printQuantum (pnt,mv) (QuantumMove move ch an brd) =
->              ([printMoveNumber pnt mv ++ move ++ ch],(False,incMove mv))
->      printQuantum (pnt,mv) (QuantumNAG i) = 
->              if detail
->              then (["$" ++ show i],(False,mv))
->              else ([],(False,mv))
->      printQuantum (pnt,mv) (QuantumComment comms) = 
->              if detail
->              then ("{" : comms ++ ["}"],(True,mv))
->              else ([],(False,mv))
->      printQuantum (pnt,mv) (QuantumAnalysis anal) = 
->              if detail
->              then ("(" : printQuantums (True,decMove mv) anal ++ [")"],
->                      (True,mv))
->              else ([],(False,mv))
->      printQuantum (pnt,mv) (QuantumResult str) = ([str],(True,mv))
->      printQuantum _ _ = error "PANIC: strange Quantum"
-
->      printGame :: RealGame -> [String]
->      printGame (Game tags qu) = 
->              [ userFormat tag | tag <- tags] ++
->              formatText 75 (printQuantums (False,initMoveNumber) qu)
-
-%------------------------------------------------------------------------------
-
-> printHeadGame :: RealGame -> [String]
-> printHeadGame (Game tags qu) = [
->      rjustify 4 gameno ++ " " ++
->      take 20 (rjustify 20 white) ++ " - " ++ 
->      take 20 (ljustify 20 black) ++ " " ++ 
->      take 26 (ljustify 28 site) ++ " " ++ result ]
->   where
->      (date,site,game_no,res,white,black,opening) = getHeaderInfo tags
->      gameno = case game_no of
->                Nothing -> ""
->                Just n -> show n
->      result = userFormat res
-
-> pgnHeadPrinter :: [RealGame] -> String
-> pgnHeadPrinter = unlines . concat . map printHeadGame
-
-%------------------------------------------------------------------------
-
-This gives an interactive playback of a game.
-
-> interactViewer :: String -> RealGame -> String
-> interactViewer stdin (Game tags qu) = replayQ qu (lines stdin)
-
-> replayQ (QuantumMove _ _ _ brd:rest) std_in 
->      = "\027[H" ++ userFormat brd ++ waitQ rest std_in
-> replayQ (_:rest) std_in = replayQ rest std_in
-> replayQ [] _ = []
-
-> waitQ game std_in = ">>" ++ 
->    (case std_in of
->      [] -> ""
->      (q:qs) -> replayQ game qs)
-
-