hocd-0.1.0.0: app/Main.hs
{-# LANGUAGE LambdaCase #-}
module Main where
import qualified Control.Monad
import qualified Data.Text
import qualified Data.Text.Read
import qualified Text.Printf
import qualified System.Environment
import qualified HOCD
main :: IO ()
main = System.Environment.getArgs >>= \case
[] -> error "No address or multiple addresses to read specified"
[addr] -> do
HOCD.runOCD
$ HOCD.readMem32
(parseMemAddr addr)
>>= \case
Left e -> error . show $ e
Right v ->
putStrLn
$ Text.Printf.printf "0x%x" v
addrs -> do
HOCD.runOCD
$ Control.Monad.forM addrs
$ \a -> do
let parsed = parseMemAddr a
v <- HOCD.readMem32 parsed
pure (parsed, v)
>>= \case
Left e -> error . show $ e
Right vs ->
Control.Monad.forM_
vs
$ \(a, v) ->
putStrLn
$ Text.Printf.printf
"0x%x: 0x%x"
(HOCD.unMemAddress a)
v
where
parseMemAddr a =
case Data.Text.Read.hexadecimal $ Data.Text.pack a of
Left e -> error e
Right (h, _) -> HOCD.memAddr h