module Sound.MED.Raw.BlockInfo where import qualified Sound.MED.Raw.BlockCmdPageTable as BlockCmdPageTable import Sound.MED.Raw.BlockCmdPageTable(BlockCmdPageTable) import Sound.MED.Basic.Amiga import Sound.MED.Basic.Utility data BlockInfo = BlockInfo { BlockInfo -> Maybe [ULONG] hlmask :: Maybe [ ULONG ] , BlockInfo -> Maybe [UBYTE] blockname :: Maybe [ UBYTE ] , BlockInfo -> ULONG blocknamelen :: ULONG , BlockInfo -> Maybe BlockCmdPageTable pagetable :: Maybe BlockCmdPageTable , BlockInfo -> [ULONG] reserved :: [ ULONG ] } deriving (Int -> BlockInfo -> ShowS [BlockInfo] -> ShowS BlockInfo -> String forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [BlockInfo] -> ShowS $cshowList :: [BlockInfo] -> ShowS show :: BlockInfo -> String $cshow :: BlockInfo -> String showsPrec :: Int -> BlockInfo -> ShowS $cshowsPrec :: Int -> BlockInfo -> ShowS Show) {-# SPECIALISE peek :: UWORD -> UWORD -> PTR -> StorableReader BlockInfo #-} {-# SPECIALISE peek :: UWORD -> UWORD -> PTR -> ByteStringReader BlockInfo #-} peek :: (Reader m) => UWORD -> UWORD -> PTR -> m BlockInfo peek :: forall (m :: * -> *). Reader m => UWORD -> UWORD -> ULONG -> m BlockInfo peek UWORD tracks UWORD numlines ULONG p = do let hlmasklen :: UWORD hlmasklen = (UWORD numlines forall a. Num a => a -> a -> a + UWORD 31) forall a. Integral a => a -> a -> a `div` UWORD 32 ULONG hlmask''' <- forall (m :: * -> *). Reader m => Peek m ULONG peekPTR ULONG p Maybe [ULONG] hlmask' <- forall (m :: * -> *) a. Monad m => Bool -> m a -> m (Maybe a) skipIf (ULONG hlmask''' forall a. Eq a => a -> a -> Bool == ULONG 0) 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 ULONG peekULONG forall a b. (a -> b) -> a -> b $ forall i. Integral i => ULONG -> ULONG -> i -> [ULONG] pointerRangeGen ULONG hlmask''' ULONG 4 UWORD hlmasklen ULONG blocknamelen' <- forall (m :: * -> *). Reader m => Peek m ULONG peekULONG (ULONG pforall a. Num a => a -> a -> a +ULONG 8) ULONG blockname''' <- forall (m :: * -> *). Reader m => Peek m ULONG peekPTR (ULONG pforall a. Num a => a -> a -> a +ULONG 4) Maybe [UBYTE] blockname' <- forall (m :: * -> *) a. Monad m => Bool -> m a -> m (Maybe a) skipIf (ULONG blockname''' forall a. Eq a => a -> a -> Bool == ULONG 0) 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 $ forall i. Integral i => ULONG -> ULONG -> i -> [ULONG] pointerRangeGen ULONG blockname''' ULONG 1 ULONG blocknamelen' ULONG pagetable''' <- forall (m :: * -> *). Reader m => Peek m ULONG peekPTR (ULONG pforall a. Num a => a -> a -> a +ULONG 12) Maybe BlockCmdPageTable pagetable' <- forall (m :: * -> *). Reader m => UWORD -> UWORD -> ULONG -> m BlockCmdPageTable BlockCmdPageTable.peek UWORD tracks UWORD numlines forall (m :: * -> *) a. Monad m => (ULONG -> m a) -> ULONG -> m (Maybe a) $? ULONG pagetable''' [ULONG] reserved' <- 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 peekULONG forall a b. (a -> b) -> a -> b $ ULONG -> ULONG -> Int -> [ULONG] pointerRange (ULONG pforall a. Num a => a -> a -> a +ULONG 16) ULONG 4 Int 5 forall (m :: * -> *) a. Monad m => a -> m a return forall a b. (a -> b) -> a -> b $ Maybe [ULONG] -> Maybe [UBYTE] -> ULONG -> Maybe BlockCmdPageTable -> [ULONG] -> BlockInfo BlockInfo Maybe [ULONG] hlmask' Maybe [UBYTE] blockname' ULONG blocknamelen' Maybe BlockCmdPageTable pagetable' [ULONG] reserved'