module Sound.MED.Raw.MMDMIDICmd3x where

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

data MMDMIDICmd3x = MMDMIDICmd3x
  { MMDMIDICmd3x -> UBYTE
struct_ver      :: UBYTE
  , MMDMIDICmd3x -> UBYTE
pad             :: UBYTE
  , MMDMIDICmd3x -> UWORD
num_of_settings :: UWORD
  , MMDMIDICmd3x -> [UBYTE]
ctrlr_types     :: [ UBYTE ]
  , MMDMIDICmd3x -> [UWORD]
ctrlr_numbers   :: [ UWORD ]
  }
  deriving (Int -> MMDMIDICmd3x -> ShowS
[MMDMIDICmd3x] -> ShowS
MMDMIDICmd3x -> String
(Int -> MMDMIDICmd3x -> ShowS)
-> (MMDMIDICmd3x -> String)
-> ([MMDMIDICmd3x] -> ShowS)
-> Show MMDMIDICmd3x
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MMDMIDICmd3x] -> ShowS
$cshowList :: [MMDMIDICmd3x] -> ShowS
show :: MMDMIDICmd3x -> String
$cshow :: MMDMIDICmd3x -> String
showsPrec :: Int -> MMDMIDICmd3x -> ShowS
$cshowsPrec :: Int -> MMDMIDICmd3x -> ShowS
Show)

{-# SPECIALISE peek :: PTR -> StorableReader MMDMIDICmd3x #-}
{-# SPECIALISE peek :: PTR -> ByteStringReader MMDMIDICmd3x #-}
peek :: (Reader m) => PTR -> m MMDMIDICmd3x
peek :: PTR -> m MMDMIDICmd3x
peek PTR
p = do
  UBYTE
struct_ver'      <- Peek m UBYTE
forall (m :: * -> *). Reader m => Peek m UBYTE
peekUBYTE (PTR
pPTR -> PTR -> PTR
forall a. Num a => a -> a -> a
+PTR
0)
  UBYTE
pad'             <- Peek m UBYTE
forall (m :: * -> *). Reader m => Peek m UBYTE
peekUBYTE (PTR
pPTR -> PTR -> PTR
forall a. Num a => a -> a -> a
+PTR
1)
  UWORD
num_of_settings' <- Peek m UWORD
forall (m :: * -> *). Reader m => Peek m UWORD
peekUWORD (PTR
pPTR -> PTR -> PTR
forall a. Num a => a -> a -> a
+PTR
2)
  PTR
ctrlr_types''    <- Peek m PTR
forall (m :: * -> *). Reader m => Peek m PTR
peekPTR   (PTR
pPTR -> PTR -> PTR
forall a. Num a => a -> a -> a
+PTR
4)
  [UBYTE]
ctrlr_types'     <- Peek m UBYTE -> [PTR] -> m [UBYTE]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM Peek m UBYTE
forall (m :: * -> *). Reader m => Peek m UBYTE
peekUBYTE ([PTR] -> m [UBYTE]) -> [PTR] -> m [UBYTE]
forall a b. (a -> b) -> a -> b
$ PTR -> PTR -> UWORD -> [PTR]
forall i. Integral i => PTR -> PTR -> i -> [PTR]
pointerRangeGen PTR
ctrlr_types'' PTR
1 UWORD
num_of_settings'
  PTR
ctrlr_numbers''  <- Peek m PTR
forall (m :: * -> *). Reader m => Peek m PTR
peekPTR   (PTR
pPTR -> PTR -> PTR
forall a. Num a => a -> a -> a
+PTR
8)
  [UWORD]
ctrlr_numbers'   <- Peek m UWORD -> [PTR] -> m [UWORD]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM Peek m UWORD
forall (m :: * -> *). Reader m => Peek m UWORD
peekUWORD ([PTR] -> m [UWORD]) -> [PTR] -> m [UWORD]
forall a b. (a -> b) -> a -> b
$ PTR -> PTR -> UWORD -> [PTR]
forall i. Integral i => PTR -> PTR -> i -> [PTR]
pointerRangeGen PTR
ctrlr_numbers'' PTR
2 UWORD
num_of_settings'
  MMDMIDICmd3x -> m MMDMIDICmd3x
forall (m :: * -> *) a. Monad m => a -> m a
return (MMDMIDICmd3x -> m MMDMIDICmd3x) -> MMDMIDICmd3x -> m MMDMIDICmd3x
forall a b. (a -> b) -> a -> b
$ UBYTE -> UBYTE -> UWORD -> [UBYTE] -> [UWORD] -> MMDMIDICmd3x
MMDMIDICmd3x
    UBYTE
struct_ver' UBYTE
pad' UWORD
num_of_settings' [UBYTE]
ctrlr_types' [UWORD]
ctrlr_numbers'