module Sound.MED.Raw.MMDDumpData where import qualified Sound.MED.Raw.MMDDump as MMDDump import Sound.MED.Raw.MMDDump(MMDDump) import Sound.MED.Basic.Amiga import Sound.MED.Basic.Utility data MMDDumpData = MMDDumpData { MMDDumpData -> UWORD numdumps :: UWORD , MMDDumpData -> [UWORD] reserved :: [ UWORD ] , MMDDumpData -> [MMDDump] dumps :: [ MMDDump ] } deriving (Int -> MMDDumpData -> ShowS [MMDDumpData] -> ShowS MMDDumpData -> String (Int -> MMDDumpData -> ShowS) -> (MMDDumpData -> String) -> ([MMDDumpData] -> ShowS) -> Show MMDDumpData forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [MMDDumpData] -> ShowS $cshowList :: [MMDDumpData] -> ShowS show :: MMDDumpData -> String $cshow :: MMDDumpData -> String showsPrec :: Int -> MMDDumpData -> ShowS $cshowsPrec :: Int -> MMDDumpData -> ShowS Show) {-# SPECIALISE peek :: PTR -> StorableReader MMDDumpData #-} {-# SPECIALISE peek :: PTR -> ByteStringReader MMDDumpData #-} peek :: (Reader m) => PTR -> m MMDDumpData peek :: PTR -> m MMDDumpData peek PTR p = do UWORD numdumps' <- Peek m UWORD forall (m :: * -> *). Reader m => Peek m UWORD peekUWORD PTR p [UWORD] reserved' <- Peek m UWORD -> [PTR] -> m [UWORD] forall (t :: * -> *) (m :: * -> *) a b. (Traversable t, Monad m) => (a -> m b) -> t a -> m (t b) mapM Peek m UWORD forall (m :: * -> *). Reader m => Peek m UWORD peekUWORD ([PTR] -> m [UWORD]) -> [PTR] -> m [UWORD] forall a b. (a -> b) -> a -> b $ PTR -> PTR -> Int -> [PTR] pointerRange (PTR pPTR -> PTR -> PTR forall a. Num a => a -> a -> a +PTR 2) PTR 2 Int 3 [PTR] dumps'' <- (PTR -> m PTR) -> [PTR] -> m [PTR] forall (t :: * -> *) (m :: * -> *) a b. (Traversable t, Monad m) => (a -> m b) -> t a -> m (t b) mapM PTR -> m PTR forall (m :: * -> *). Reader m => Peek m PTR peekPTR ([PTR] -> m [PTR]) -> [PTR] -> m [PTR] forall a b. (a -> b) -> a -> b $ PTR -> PTR -> UWORD -> [PTR] forall i. Integral i => PTR -> PTR -> i -> [PTR] pointerRangeGen (PTR pPTR -> PTR -> PTR forall a. Num a => a -> a -> a +PTR 8) PTR 4 UWORD numdumps' [MMDDump] dumps' <- (PTR -> m MMDDump) -> [PTR] -> m [MMDDump] forall (t :: * -> *) (m :: * -> *) a b. (Traversable t, Monad m) => (a -> m b) -> t a -> m (t b) mapM PTR -> m MMDDump forall (m :: * -> *). Reader m => PTR -> m MMDDump MMDDump.peek [PTR] dumps'' MMDDumpData -> m MMDDumpData forall (m :: * -> *) a. Monad m => a -> m a return (MMDDumpData -> m MMDDumpData) -> MMDDumpData -> m MMDDumpData forall a b. (a -> b) -> a -> b $ UWORD -> [UWORD] -> [MMDDump] -> MMDDumpData MMDDumpData UWORD numdumps' [UWORD] reserved' [MMDDump] dumps'