module MMD1Block where import Amiga import qualified BlockInfo import BlockInfo(BlockInfo) import qualified MMD1NoteData import MMD1NoteData(MMD1NoteData) data MMD1Block = MMD1Block { numtracks :: UWORD , lines :: UWORD -- NOTE: actual number of lines is one greater , 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'