module Sound.MED.Raw.MMDInstrInfo where

import Sound.MED.Basic.Amiga
import Sound.MED.Basic.Utility

data MMDInstrInfo = MMDInstrInfo
  { MMDInstrInfo -> Maybe [UBYTE]
name :: Maybe [ UBYTE ]
  }
  deriving (Int -> MMDInstrInfo -> ShowS
[MMDInstrInfo] -> ShowS
MMDInstrInfo -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MMDInstrInfo] -> ShowS
$cshowList :: [MMDInstrInfo] -> ShowS
show :: MMDInstrInfo -> String
$cshow :: MMDInstrInfo -> String
showsPrec :: Int -> MMDInstrInfo -> ShowS
$cshowsPrec :: Int -> MMDInstrInfo -> ShowS
Show)

{-# SPECIALISE peek :: UWORD -> PTR -> StorableReader MMDInstrInfo #-}
{-# SPECIALISE peek :: UWORD -> PTR -> ByteStringReader MMDInstrInfo #-}
peek :: (Reader m) => UWORD -> PTR -> m MMDInstrInfo
peek :: forall (m :: * -> *). Reader m => UWORD -> PTR -> m MMDInstrInfo
peek UWORD
size PTR
p = do
  Maybe [UBYTE]
name' <- forall (m :: * -> *) a. Monad m => Bool -> m a -> m (Maybe a)
skipIf (UWORD
size forall a. Ord a => a -> a -> Bool
< UWORD
40) 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
$ PTR -> PTR -> Int -> [PTR]
pointerRange PTR
p PTR
1 Int
40
  forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ Maybe [UBYTE] -> MMDInstrInfo
MMDInstrInfo
    Maybe [UBYTE]
name'