module Sound.MED.Raw.MMD1Block where
import qualified Sound.MED.Raw.BlockInfo as BlockInfo
import Sound.MED.Raw.BlockInfo(BlockInfo)
import qualified Sound.MED.Raw.MMD1NoteData as MMD1NoteData
import Sound.MED.Raw.MMD1NoteData(MMD1NoteData)
import Sound.MED.Basic.Amiga
data MMD1Block = MMD1Block
{ numtracks :: UWORD
, lines :: UWORD
, info :: Maybe BlockInfo
, notedata :: [ [ MMD1NoteData ] ]
}
deriving (Show)
peek :: MEM -> PTR -> IO MMD1Block
peek m p = do
numtracks' <- peekUWORD m (p + 0)
lines' <- peekUWORD m (p + 2)
info''' <- peekPTR m (p + 4)
info' <- BlockInfo.peek numtracks' (lines'+1) m $? info'''
notedata'' <- mapM (MMD1NoteData.peek m) $ pointerRangeGen2 (p+8) 4 numtracks' (lines'+1)
let notedata' = chunk numtracks' notedata''
return $ MMD1Block
numtracks' lines' info' notedata'