module Sound.MED.Raw.MMDDump where import Sound.MED.Basic.Amiga import Sound.MED.Basic.Utility data MMDDump = MMDDump { MMDDump -> ULONG len :: ULONG , MMDDump -> [UBYTE] dat :: [ UBYTE ] , MMDDump -> UWORD ext_len :: UWORD , MMDDump -> Maybe [UBYTE] name :: Maybe [ UBYTE ] } deriving (Int -> MMDDump -> ShowS [MMDDump] -> ShowS MMDDump -> String (Int -> MMDDump -> ShowS) -> (MMDDump -> String) -> ([MMDDump] -> ShowS) -> Show MMDDump forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [MMDDump] -> ShowS $cshowList :: [MMDDump] -> ShowS show :: MMDDump -> String $cshow :: MMDDump -> String showsPrec :: Int -> MMDDump -> ShowS $cshowsPrec :: Int -> MMDDump -> ShowS Show) {-# SPECIALISE peek :: PTR -> StorableReader MMDDump #-} {-# SPECIALISE peek :: PTR -> ByteStringReader MMDDump #-} peek :: (Reader m) => PTR -> m MMDDump peek :: ULONG -> m MMDDump peek ULONG p = do ULONG len' <- Peek m ULONG forall (m :: * -> *). Reader m => Peek m ULONG peekULONG (ULONG pULONG -> ULONG -> ULONG forall a. Num a => a -> a -> a +ULONG 0) ULONG dat'' <- Peek m ULONG forall (m :: * -> *). Reader m => Peek m ULONG peekPTR (ULONG pULONG -> ULONG -> ULONG forall a. Num a => a -> a -> a +ULONG 4) [UBYTE] dat' <- (ULONG -> m UBYTE) -> [ULONG] -> m [UBYTE] forall (t :: * -> *) (m :: * -> *) a b. (Traversable t, Monad m) => (a -> m b) -> t a -> m (t b) mapM ULONG -> m UBYTE forall (m :: * -> *). Reader m => Peek m UBYTE peekUBYTE ([ULONG] -> m [UBYTE]) -> [ULONG] -> m [UBYTE] forall a b. (a -> b) -> a -> b $ ULONG -> ULONG -> ULONG -> [ULONG] forall i. Integral i => ULONG -> ULONG -> i -> [ULONG] pointerRangeGenCheck ULONG dat'' ULONG 1 ULONG len' UWORD ext_len' <- Peek m UWORD forall (m :: * -> *). Reader m => Peek m UWORD peekUWORD (ULONG pULONG -> ULONG -> ULONG forall a. Num a => a -> a -> a +ULONG 8) Maybe [UBYTE] name' <- Bool -> m [UBYTE] -> m (Maybe [UBYTE]) forall (m :: * -> *) a. Monad m => Bool -> m a -> m (Maybe a) skipIf (UWORD ext_len' UWORD -> UWORD -> Bool forall a. Ord a => a -> a -> Bool < UWORD 20) (m [UBYTE] -> m (Maybe [UBYTE])) -> m [UBYTE] -> m (Maybe [UBYTE]) forall a b. (a -> b) -> a -> b $ (ULONG -> m UBYTE) -> [ULONG] -> m [UBYTE] forall (t :: * -> *) (m :: * -> *) a b. (Traversable t, Monad m) => (a -> m b) -> t a -> m (t b) mapM ULONG -> m UBYTE forall (m :: * -> *). Reader m => Peek m UBYTE peekUBYTE ([ULONG] -> m [UBYTE]) -> [ULONG] -> m [UBYTE] forall a b. (a -> b) -> a -> b $ ULONG -> ULONG -> Int -> [ULONG] pointerRange (ULONG pULONG -> ULONG -> ULONG forall a. Num a => a -> a -> a +ULONG 10) ULONG 1 Int 20 MMDDump -> m MMDDump forall (m :: * -> *) a. Monad m => a -> m a return (MMDDump -> m MMDDump) -> MMDDump -> m MMDDump forall a b. (a -> b) -> a -> b $ ULONG -> [UBYTE] -> UWORD -> Maybe [UBYTE] -> MMDDump MMDDump ULONG len' [UBYTE] dat' UWORD ext_len' Maybe [UBYTE] name'