unmed2-0.0: src/MMD3.hs
module MMD3 where
import Amiga
import qualified MMD2Song
import MMD2Song(MMD2Song)
import qualified MMD1Block
import MMD1Block(MMD1Block)
import qualified InstrHdr
import InstrHdr(InstrHdr)
import qualified MMD0exp
import MMD0exp(MMD0exp)
data MMD3 = MMD3
{ id :: ULONG
, modlen :: ULONG
, song :: MMD2Song
, psecnum :: UWORD
, pseq :: UWORD
, blockarr :: [ MMD1Block ]
, mmdflags :: UBYTE
, reserved1 :: UBYTE
, reserved2 :: UBYTE
, reserved3 :: UBYTE
, smplarr :: [ Maybe InstrHdr ]
, reserved4 :: ULONG
, expdata :: Maybe MMD0exp
, reserved5 :: ULONG
, pstate :: UWORD
, pblock :: UWORD
, pline :: UWORD
, pseqnum :: UWORD
, actplayline :: WORD
, counter :: UBYTE
, extra_songs :: UBYTE
}
deriving (Show)
peek :: MEM -> PTR -> IO MMD3
peek m p = do
id' <- peekULONG m (p + 0)
modlen' <- peekULONG m (p + 4)
song'' <- peekPTR m (p + 8)
song' <- MMD2Song.peek m song''
psecnum' <- peekUWORD m (p + 12)
pseq' <- peekUWORD m (p + 14)
blockarr''' <- peekPTR m (p + 16)
blockarr'' <- mapM (peekPTR m) $ pointerRangeGen blockarr''' 4 (MMD2Song.numblocks song')
blockarr' <- mapM (MMD1Block.peek m) blockarr''
mmdflags' <- peekUBYTE m (p + 20)
reserved1' <- peekUBYTE m (p + 21)
reserved2' <- peekUBYTE m (p + 22)
reserved3' <- peekUBYTE m (p + 23)
smplarr''' <- peekPTR m (p + 24)
smplarr'' <- mapM (peekPTR m) $ pointerRangeGenCheck smplarr''' 4 (MMD2Song.numsamples song')
smplarr' <- mapM (InstrHdr.peek m $?) smplarr''
reserved4' <- peekULONG m (p + 28)
expdata''' <- peekPTR m (p + 32)
expdata' <- MMD0exp.peek m $? expdata'''
reserved5' <- peekULONG m (p + 36)
pstate' <- peekUWORD m (p + 40)
pblock' <- peekUWORD m (p + 42)
pline' <- peekUWORD m (p + 44)
pseqnum' <- peekUWORD m (p + 46)
actplayline' <- peekWORD m (p + 48)
counter' <- peekUBYTE m (p + 50)
extra_songs' <- peekUBYTE m (p + 51)
return $ MMD3
id' modlen' song' psecnum' pseq' blockarr' mmdflags'
reserved1' reserved2' reserved3' smplarr' reserved4'
expdata' reserved5' pstate' pblock' pline' pseqnum'
actplayline' counter' extra_songs'