module Sound.MED.Raw.MMD0 where

import qualified Sound.MED.Raw.MMD0Song as MMD0Song
import Sound.MED.Raw.MMD0Song(MMD0Song)
import qualified Sound.MED.Raw.MMD0Block as MMD0Block
import Sound.MED.Raw.MMD0Block(MMD0Block)
import qualified Sound.MED.Raw.InstrHdr as InstrHdr
import Sound.MED.Raw.InstrHdr(InstrHdr)
import qualified Sound.MED.Raw.MMD0exp as MMD0exp
import Sound.MED.Raw.MMD0exp(MMD0exp)
import Sound.MED.Basic.Amiga
import Sound.MED.Basic.Utility

data MMD0 = MMD0
  { MMD0 -> ULONG
id          :: ULONG
  , MMD0 -> ULONG
modlen      :: ULONG
  , MMD0 -> MMD0Song
song        :: MMD0Song
  , MMD0 -> UWORD
psecnum     :: UWORD
  , MMD0 -> UWORD
pseq        :: UWORD
  , MMD0 -> [MMD0Block]
blockarr    :: [ MMD0Block ]
  , MMD0 -> UBYTE
mmdflags    :: UBYTE
  , MMD0 -> UBYTE
reserved1   :: UBYTE
  , MMD0 -> UBYTE
reserved2   :: UBYTE
  , MMD0 -> UBYTE
reserved3   :: UBYTE
  , MMD0 -> [Maybe InstrHdr]
smplarr     :: [ Maybe InstrHdr ]
  , MMD0 -> ULONG
reserved4   :: ULONG
  , MMD0 -> Maybe MMD0exp
expdata     :: Maybe MMD0exp
  , MMD0 -> ULONG
reserved5   :: ULONG
  , MMD0 -> UWORD
pstate      :: UWORD
  , MMD0 -> UWORD
pblock      :: UWORD
  , MMD0 -> UWORD
pline       :: UWORD
  , MMD0 -> UWORD
pseqnum     :: UWORD
  , MMD0 -> WORD
actplayline :: WORD
  , MMD0 -> UBYTE
counter     :: UBYTE
  , MMD0 -> UBYTE
extra_songs :: UBYTE
  }
  deriving (Int -> MMD0 -> ShowS
[MMD0] -> ShowS
MMD0 -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MMD0] -> ShowS
$cshowList :: [MMD0] -> ShowS
show :: MMD0 -> String
$cshow :: MMD0 -> String
showsPrec :: Int -> MMD0 -> ShowS
$cshowsPrec :: Int -> MMD0 -> ShowS
Show)

{-# SPECIALISE peek :: PTR -> StorableReader MMD0 #-}
{-# SPECIALISE peek :: PTR -> ByteStringReader MMD0 #-}
peek :: (Reader m) => PTR -> m MMD0
peek :: forall (m :: * -> *). Reader m => ULONG -> m MMD0
peek ULONG
p = do
  ULONG
id'          <- forall (m :: * -> *). Reader m => Peek m ULONG
peekULONG (ULONG
p forall a. Num a => a -> a -> a
+ ULONG
0)
  ULONG
modlen'      <- forall (m :: * -> *). Reader m => Peek m ULONG
peekULONG (ULONG
p forall a. Num a => a -> a -> a
+ ULONG
4)
  ULONG
song''       <- forall (m :: * -> *). Reader m => Peek m ULONG
peekPTR   (ULONG
p forall a. Num a => a -> a -> a
+ ULONG
8)
  MMD0Song
song'        <- forall (m :: * -> *). Reader m => ULONG -> m MMD0Song
MMD0Song.peek ULONG
song''
  UWORD
psecnum'     <- forall (m :: * -> *). Reader m => Peek m UWORD
peekUWORD (ULONG
p forall a. Num a => a -> a -> a
+ ULONG
12)
  UWORD
pseq'        <- forall (m :: * -> *). Reader m => Peek m UWORD
peekUWORD (ULONG
p forall a. Num a => a -> a -> a
+ ULONG
14)
  ULONG
blockarr'''  <- forall (m :: * -> *). Reader m => Peek m ULONG
peekPTR   (ULONG
p forall a. Num a => a -> a -> a
+ ULONG
16)
  [ULONG]
blockarr''   <- forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM forall (m :: * -> *). Reader m => Peek m ULONG
peekPTR forall a b. (a -> b) -> a -> b
$ forall i. Integral i => ULONG -> ULONG -> i -> [ULONG]
pointerRangeGen ULONG
blockarr''' ULONG
4 (MMD0Song -> UWORD
MMD0Song.numblocks MMD0Song
song')
  [MMD0Block]
blockarr'    <- forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM forall (m :: * -> *). Reader m => ULONG -> m MMD0Block
MMD0Block.peek [ULONG]
blockarr''
  UBYTE
mmdflags'    <- forall (m :: * -> *). Reader m => Peek m UBYTE
peekUBYTE (ULONG
p forall a. Num a => a -> a -> a
+ ULONG
20)
  UBYTE
reserved1'   <- forall (m :: * -> *). Reader m => Peek m UBYTE
peekUBYTE (ULONG
p forall a. Num a => a -> a -> a
+ ULONG
21)
  UBYTE
reserved2'   <- forall (m :: * -> *). Reader m => Peek m UBYTE
peekUBYTE (ULONG
p forall a. Num a => a -> a -> a
+ ULONG
22)
  UBYTE
reserved3'   <- forall (m :: * -> *). Reader m => Peek m UBYTE
peekUBYTE (ULONG
p forall a. Num a => a -> a -> a
+ ULONG
23)
  ULONG
smplarr'''   <- forall (m :: * -> *). Reader m => Peek m ULONG
peekPTR   (ULONG
p forall a. Num a => a -> a -> a
+ ULONG
24)
  [ULONG]
smplarr''    <- forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM forall (m :: * -> *). Reader m => Peek m ULONG
peekPTR forall a b. (a -> b) -> a -> b
$ forall i. Integral i => ULONG -> ULONG -> i -> [ULONG]
pointerRangeGenCheck ULONG
smplarr''' ULONG
4 (MMD0Song -> UBYTE
MMD0Song.numsamples MMD0Song
song')
  [Maybe InstrHdr]
smplarr'     <- forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM (forall (m :: * -> *). Reader m => ULONG -> m InstrHdr
InstrHdr.peek forall (m :: * -> *) a.
Monad m =>
(ULONG -> m a) -> ULONG -> m (Maybe a)
$?) [ULONG]
smplarr''
  ULONG
reserved4'   <- forall (m :: * -> *). Reader m => Peek m ULONG
peekULONG (ULONG
p forall a. Num a => a -> a -> a
+ ULONG
28)
  ULONG
expdata'''   <- forall (m :: * -> *). Reader m => Peek m ULONG
peekPTR   (ULONG
p forall a. Num a => a -> a -> a
+ ULONG
32)
  Maybe MMD0exp
expdata'     <- forall (m :: * -> *). Reader m => ULONG -> m MMD0exp
MMD0exp.peek forall (m :: * -> *) a.
Monad m =>
(ULONG -> m a) -> ULONG -> m (Maybe a)
$? ULONG
expdata'''
  ULONG
reserved5'   <- forall (m :: * -> *). Reader m => Peek m ULONG
peekULONG (ULONG
p forall a. Num a => a -> a -> a
+ ULONG
36)
  UWORD
pstate'      <- forall (m :: * -> *). Reader m => Peek m UWORD
peekUWORD (ULONG
p forall a. Num a => a -> a -> a
+ ULONG
40)
  UWORD
pblock'      <- forall (m :: * -> *). Reader m => Peek m UWORD
peekUWORD (ULONG
p forall a. Num a => a -> a -> a
+ ULONG
42)
  UWORD
pline'       <- forall (m :: * -> *). Reader m => Peek m UWORD
peekUWORD (ULONG
p forall a. Num a => a -> a -> a
+ ULONG
44)
  UWORD
pseqnum'     <- forall (m :: * -> *). Reader m => Peek m UWORD
peekUWORD (ULONG
p forall a. Num a => a -> a -> a
+ ULONG
46)
  WORD
actplayline' <- forall (m :: * -> *). Reader m => Peek m WORD
peekWORD  (ULONG
p forall a. Num a => a -> a -> a
+ ULONG
48)
  UBYTE
counter'     <- forall (m :: * -> *). Reader m => Peek m UBYTE
peekUBYTE (ULONG
p forall a. Num a => a -> a -> a
+ ULONG
50)
  UBYTE
extra_songs' <- forall (m :: * -> *). Reader m => Peek m UBYTE
peekUBYTE (ULONG
p forall a. Num a => a -> a -> a
+ ULONG
51)
  forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ ULONG
-> ULONG
-> MMD0Song
-> UWORD
-> UWORD
-> [MMD0Block]
-> UBYTE
-> UBYTE
-> UBYTE
-> UBYTE
-> [Maybe InstrHdr]
-> ULONG
-> Maybe MMD0exp
-> ULONG
-> UWORD
-> UWORD
-> UWORD
-> UWORD
-> WORD
-> UBYTE
-> UBYTE
-> MMD0
MMD0
    ULONG
id' ULONG
modlen' MMD0Song
song' UWORD
psecnum' UWORD
pseq' [MMD0Block]
blockarr' UBYTE
mmdflags'
    UBYTE
reserved1' UBYTE
reserved2' UBYTE
reserved3' [Maybe InstrHdr]
smplarr' ULONG
reserved4'
    Maybe MMD0exp
expdata' ULONG
reserved5' UWORD
pstate' UWORD
pblock' UWORD
pline' UWORD
pseqnum'
    WORD
actplayline' UBYTE
counter' UBYTE
extra_songs'