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 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 :: forall (m :: * -> *). Reader m => ULONG -> m MMDDump peek ULONG p = do ULONG len' <- forall (m :: * -> *). Reader m => Peek m ULONG peekULONG (ULONG pforall a. Num a => a -> a -> a +ULONG 0) ULONG dat'' <- forall (m :: * -> *). Reader m => Peek m ULONG peekPTR (ULONG pforall a. Num a => a -> a -> a +ULONG 4) [UBYTE] dat' <- forall (t :: * -> *) (m :: * -> *) a b. (Traversable t, Monad m) => (a -> m b) -> t a -> m (t b) mapM forall (m :: * -> *). Reader m => Peek m UBYTE peekUBYTE forall a b. (a -> b) -> a -> b $ forall i. Integral i => ULONG -> ULONG -> i -> [ULONG] pointerRangeGenCheck ULONG dat'' ULONG 1 ULONG len' UWORD ext_len' <- forall (m :: * -> *). Reader m => Peek m UWORD peekUWORD (ULONG pforall a. Num a => a -> a -> a +ULONG 8) Maybe [UBYTE] name' <- forall (m :: * -> *) a. Monad m => Bool -> m a -> m (Maybe a) skipIf (UWORD ext_len' forall a. Ord a => a -> a -> Bool < UWORD 20) forall a b. (a -> b) -> a -> b $ forall (t :: * -> *) (m :: * -> *) a b. (Traversable t, Monad m) => (a -> m b) -> t a -> m (t b) mapM forall (m :: * -> *). Reader m => Peek m UBYTE peekUBYTE forall a b. (a -> b) -> a -> b $ ULONG -> ULONG -> Int -> [ULONG] pointerRange (ULONG pforall a. Num a => a -> a -> a +ULONG 10) ULONG 1 Int 20 forall (m :: * -> *) a. Monad m => a -> m a return forall a b. (a -> b) -> a -> b $ ULONG -> [UBYTE] -> UWORD -> Maybe [UBYTE] -> MMDDump MMDDump ULONG len' [UBYTE] dat' UWORD ext_len' Maybe [UBYTE] name'