mima-tools/app/MimaAsm/Main.hs

41 lines
1 KiB
Haskell

module Main where
import Options.Applicative
import Mima.Assembler.Parser
import Mima.IO
import Mima.Load
data Settings = Settings
{ infile :: String
, outfile :: String
} deriving (Show)
settingsParser :: Parser Settings
settingsParser = Settings
<$> strArgument
(metavar "INFILE"
<> help "The .mimasm file to assemble")
<*> strOption
(long "out"
<> short 'o'
<> metavar "OUTFILE"
<> help "The .mima file to write the assembled result to"
<> value "out.mima"
<> showDefault)
opts :: ParserInfo Settings
opts = info (helper <*> settingsParser) $ fullDesc <> failureCode 1
main :: IO ()
main = do
settings <- execParser opts
putStrLn $ "Loading assembly file at " ++ infile settings
asm <- parseFile parseState (infile settings)
case asm of
Nothing -> pure ()
Just (state, _) -> do
putStrLn "Parsing successful"
putStrLn $ "Writing result to " ++ outfile settings
saveStateToFile (outfile settings) state