41 lines
1 KiB
Haskell
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
|