module Sound.MED.Raw.MMDInfo where

import Sound.MED.Basic.Amiga
import Sound.MED.Basic.Utility

data MMDInfo = MMDInfo
  { MMDInfo -> Maybe MMDInfo
next     :: Maybe MMDInfo
  , MMDInfo -> UWORD
reserved :: UWORD
  , MMDInfo -> UWORD
typ      :: UWORD
  , MMDInfo -> ULONG
len      :: ULONG
  , MMDInfo -> [UBYTE]
dat      :: [ UBYTE ]
  }
  deriving (Int -> MMDInfo -> ShowS
[MMDInfo] -> ShowS
MMDInfo -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MMDInfo] -> ShowS
$cshowList :: [MMDInfo] -> ShowS
show :: MMDInfo -> String
$cshow :: MMDInfo -> String
showsPrec :: Int -> MMDInfo -> ShowS
$cshowsPrec :: Int -> MMDInfo -> ShowS
Show)

{-# SPECIALISE peek :: PTR -> StorableReader MMDInfo #-}
{-# SPECIALISE peek :: PTR -> ByteStringReader MMDInfo #-}
peek :: (Reader m) => PTR -> m MMDInfo
peek :: forall (m :: * -> *). Reader m => ULONG -> m MMDInfo
peek ULONG
p = do
  ULONG
next'''   <- forall (m :: * -> *). Reader m => Peek m ULONG
peekPTR ULONG
p
  Maybe MMDInfo
next'     <- forall (m :: * -> *). Reader m => ULONG -> m MMDInfo
peek forall (m :: * -> *) a.
Monad m =>
(ULONG -> m a) -> ULONG -> m (Maybe a)
$? ULONG
next'''
  UWORD
reserved' <- forall (m :: * -> *). Reader m => Peek m UWORD
peekUWORD (ULONG
pforall a. Num a => a -> a -> a
+ULONG
4)
  UWORD
typ'      <- forall (m :: * -> *). Reader m => Peek m UWORD
peekUWORD (ULONG
pforall a. Num a => a -> a -> a
+ULONG
6)
  ULONG
len'      <- forall (m :: * -> *). Reader m => Peek m ULONG
peekULONG (ULONG
pforall a. Num a => a -> a -> a
+ULONG
8)
  [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]
pointerRangeGen (ULONG
pforall a. Num a => a -> a -> a
+ULONG
12) ULONG
1 ULONG
len'
  forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ Maybe MMDInfo -> UWORD -> UWORD -> ULONG -> [UBYTE] -> MMDInfo
MMDInfo
    Maybe MMDInfo
next' UWORD
reserved' UWORD
typ' ULONG
len' [UBYTE]
dat'