module Sound.MED.Raw.MMDDump where

import Sound.MED.Basic.Amiga

data MMDDump = MMDDump
  { len     :: ULONG
  , dat     :: [ UBYTE ]
  , ext_len :: UWORD
  , name    :: Maybe [ UBYTE ]
  }
  deriving (Show)

peek :: MEM -> PTR -> IO MMDDump
peek m p = do
  len'     <- peekULONG m (p+0)
  dat''    <- peekPTR   m (p+4)
  dat'     <- mapM (peekUBYTE m) $ pointerRangeGenCheck dat'' 1 len'
  ext_len' <- peekUWORD m (p+8)
  name'    <-
    skipIf (ext_len' < 20) $ mapM (peekUBYTE m) $ pointerRange (p+10) 1 20
  return $ MMDDump
    len' dat' ext_len' name'