packages feed

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