module Sound.MED.Raw.BlockCmdPageTable where import qualified Sound.MED.Raw.CmdPageData as CmdPageData import Sound.MED.Raw.CmdPageData(CmdPageData) import Sound.MED.Basic.Amiga import Sound.MED.Basic.Utility import Control.Monad (liftM) data BlockCmdPageTable = BlockCmdPageTable { BlockCmdPageTable -> UWORD num_pages :: UWORD , BlockCmdPageTable -> UWORD reserved :: UWORD , BlockCmdPageTable -> [Maybe [[CmdPageData]]] pages :: [ Maybe [ [ CmdPageData ] ] ] } deriving (Int -> BlockCmdPageTable -> ShowS [BlockCmdPageTable] -> ShowS BlockCmdPageTable -> String forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [BlockCmdPageTable] -> ShowS $cshowList :: [BlockCmdPageTable] -> ShowS show :: BlockCmdPageTable -> String $cshow :: BlockCmdPageTable -> String showsPrec :: Int -> BlockCmdPageTable -> ShowS $cshowsPrec :: Int -> BlockCmdPageTable -> ShowS Show) {-# SPECIALISE peek :: UWORD -> UWORD -> PTR -> StorableReader BlockCmdPageTable #-} {-# SPECIALISE peek :: UWORD -> UWORD -> PTR -> ByteStringReader BlockCmdPageTable #-} peek :: (Reader m) => UWORD -> UWORD -> PTR -> m BlockCmdPageTable peek :: forall (m :: * -> *). Reader m => UWORD -> UWORD -> PTR -> m BlockCmdPageTable peek UWORD tracks UWORD numlines PTR p = do UWORD num_pages' <- forall (m :: * -> *). Reader m => Peek m UWORD peekUWORD PTR p UWORD reserved' <- forall (m :: * -> *). Reader m => Peek m UWORD peekUWORD (PTR pforall a. Num a => a -> a -> a +PTR 2) [PTR] pages'' <- forall (t :: * -> *) (m :: * -> *) a b. (Traversable t, Monad m) => (a -> m b) -> t a -> m (t b) mapM forall (m :: * -> *). Reader m => Peek m PTR peekPTR forall a b. (a -> b) -> a -> b $ forall i. Integral i => PTR -> PTR -> i -> [PTR] pointerRangeGen (PTR pforall a. Num a => a -> a -> a +PTR 4) PTR 4 UWORD num_pages' [Maybe [[CmdPageData]]] pages' <- forall (t :: * -> *) (m :: * -> *) a b. (Traversable t, Monad m) => (a -> m b) -> t a -> m (t b) mapM (forall (m :: * -> *). Reader m => UWORD -> UWORD -> PTR -> m (Maybe [[CmdPageData]]) peekPage UWORD tracks UWORD numlines) [PTR] pages'' forall (m :: * -> *) a. Monad m => a -> m a return forall a b. (a -> b) -> a -> b $ UWORD -> UWORD -> [Maybe [[CmdPageData]]] -> BlockCmdPageTable BlockCmdPageTable UWORD num_pages' UWORD reserved' [Maybe [[CmdPageData]]] pages' peekPage :: (Reader m) => UWORD -> UWORD -> PTR -> m (Maybe [ [ CmdPageData ] ]) peekPage :: forall (m :: * -> *). Reader m => UWORD -> UWORD -> PTR -> m (Maybe [[CmdPageData]]) peekPage UWORD tracks UWORD numlines PTR p = forall (m :: * -> *) a. Monad m => Bool -> m a -> m (Maybe a) skipIf (PTR p forall a. Eq a => a -> a -> Bool == PTR 0) forall a b. (a -> b) -> a -> b $ forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r liftM (forall i a. Integral i => i -> [a] -> [[a]] chunk UWORD tracks) 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 => PTR -> m CmdPageData CmdPageData.peek forall a b. (a -> b) -> a -> b $ forall i j. (Integral i, Integral j) => PTR -> PTR -> i -> j -> [PTR] pointerRangeGen2 PTR p PTR 2 UWORD tracks UWORD numlines