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 (Int -> BlockInfo -> ShowS) -> (BlockInfo -> String) -> ([BlockInfo] -> ShowS) -> Show BlockInfo 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 :: UWORD -> UWORD -> ULONG -> m BlockInfo peek UWORD tracks UWORD numlines ULONG p = do let hlmasklen :: UWORD hlmasklen = (UWORD numlines UWORD -> UWORD -> UWORD forall a. Num a => a -> a -> a + UWORD 31) UWORD -> UWORD -> UWORD forall a. Integral a => a -> a -> a `div` UWORD 32 ULONG hlmask''' <- Peek m ULONG forall (m :: * -> *). Reader m => Peek m ULONG peekPTR ULONG p Maybe [ULONG] hlmask' <- Bool -> m [ULONG] -> m (Maybe [ULONG]) forall (m :: * -> *) a. Monad m => Bool -> m a -> m (Maybe a) skipIf (ULONG hlmask''' ULONG -> ULONG -> Bool forall a. Eq a => a -> a -> Bool == ULONG 0) (m [ULONG] -> m (Maybe [ULONG])) -> m [ULONG] -> m (Maybe [ULONG]) forall a b. (a -> b) -> a -> b $ Peek m ULONG -> [ULONG] -> m [ULONG] forall (t :: * -> *) (m :: * -> *) a b. (Traversable t, Monad m) => (a -> m b) -> t a -> m (t b) mapM Peek m ULONG forall (m :: * -> *). Reader m => Peek m ULONG peekULONG ([ULONG] -> m [ULONG]) -> [ULONG] -> m [ULONG] forall a b. (a -> b) -> a -> b $ ULONG -> ULONG -> UWORD -> [ULONG] forall i. Integral i => ULONG -> ULONG -> i -> [ULONG] pointerRangeGen ULONG hlmask''' ULONG 4 UWORD hlmasklen ULONG blocknamelen' <- Peek m ULONG forall (m :: * -> *). Reader m => Peek m ULONG peekULONG (ULONG pULONG -> ULONG -> ULONG forall a. Num a => a -> a -> a +ULONG 8) ULONG blockname''' <- Peek m ULONG forall (m :: * -> *). Reader m => Peek m ULONG peekPTR (ULONG pULONG -> ULONG -> ULONG forall a. Num a => a -> a -> a +ULONG 4) Maybe [UBYTE] blockname' <- Bool -> m [UBYTE] -> m (Maybe [UBYTE]) forall (m :: * -> *) a. Monad m => Bool -> m a -> m (Maybe a) skipIf (ULONG blockname''' ULONG -> ULONG -> Bool forall a. Eq a => a -> a -> Bool == ULONG 0) (m [UBYTE] -> m (Maybe [UBYTE])) -> m [UBYTE] -> m (Maybe [UBYTE]) forall a b. (a -> b) -> a -> b $ (ULONG -> m UBYTE) -> [ULONG] -> m [UBYTE] forall (t :: * -> *) (m :: * -> *) a b. (Traversable t, Monad m) => (a -> m b) -> t a -> m (t b) mapM ULONG -> m UBYTE forall (m :: * -> *). Reader m => Peek m UBYTE peekUBYTE ([ULONG] -> m [UBYTE]) -> [ULONG] -> m [UBYTE] forall a b. (a -> b) -> a -> b $ ULONG -> ULONG -> ULONG -> [ULONG] forall i. Integral i => ULONG -> ULONG -> i -> [ULONG] pointerRangeGen ULONG blockname''' ULONG 1 ULONG blocknamelen' ULONG pagetable''' <- Peek m ULONG forall (m :: * -> *). Reader m => Peek m ULONG peekPTR (ULONG pULONG -> ULONG -> ULONG forall a. Num a => a -> a -> a +ULONG 12) Maybe BlockCmdPageTable pagetable' <- UWORD -> UWORD -> ULONG -> m BlockCmdPageTable forall (m :: * -> *). Reader m => UWORD -> UWORD -> ULONG -> m BlockCmdPageTable BlockCmdPageTable.peek UWORD tracks UWORD numlines (ULONG -> m BlockCmdPageTable) -> ULONG -> m (Maybe BlockCmdPageTable) forall (m :: * -> *) a. Monad m => (ULONG -> m a) -> ULONG -> m (Maybe a) $? ULONG pagetable''' [ULONG] reserved' <- Peek m ULONG -> [ULONG] -> m [ULONG] forall (t :: * -> *) (m :: * -> *) a b. (Traversable t, Monad m) => (a -> m b) -> t a -> m (t b) mapM Peek m ULONG forall (m :: * -> *). Reader m => Peek m ULONG peekULONG ([ULONG] -> m [ULONG]) -> [ULONG] -> m [ULONG] forall a b. (a -> b) -> a -> b $ ULONG -> ULONG -> Int -> [ULONG] pointerRange (ULONG pULONG -> ULONG -> ULONG forall a. Num a => a -> a -> a +ULONG 16) ULONG 4 Int 5 BlockInfo -> m BlockInfo forall (m :: * -> *) a. Monad m => a -> m a return (BlockInfo -> m BlockInfo) -> BlockInfo -> m BlockInfo 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'