module Sound.MED.Raw.MMDARexxTrigCmd where

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

data MMDARexxTrigCmd = MMDARexxTrigCmd
  { MMDARexxTrigCmd -> Maybe MMDARexxTrigCmd
next     :: Maybe MMDARexxTrigCmd
  , MMDARexxTrigCmd -> UBYTE
cmdnum   :: UBYTE
  , MMDARexxTrigCmd -> UBYTE
pad      :: UBYTE
  , MMDARexxTrigCmd -> WORD
cmdtype  :: WORD
  , MMDARexxTrigCmd -> [UBYTE]
cmd      :: [ UBYTE ]
  , MMDARexxTrigCmd -> [UBYTE]
port     :: [ UBYTE ]
  , MMDARexxTrigCmd -> UWORD
cmd_len  :: UWORD
  , MMDARexxTrigCmd -> UWORD
port_len :: UWORD
  }
  deriving (Int -> MMDARexxTrigCmd -> ShowS
[MMDARexxTrigCmd] -> ShowS
MMDARexxTrigCmd -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MMDARexxTrigCmd] -> ShowS
$cshowList :: [MMDARexxTrigCmd] -> ShowS
show :: MMDARexxTrigCmd -> String
$cshow :: MMDARexxTrigCmd -> String
showsPrec :: Int -> MMDARexxTrigCmd -> ShowS
$cshowsPrec :: Int -> MMDARexxTrigCmd -> ShowS
Show)

{-# SPECIALISE peek :: PTR -> StorableReader MMDARexxTrigCmd #-}
{-# SPECIALISE peek :: PTR -> ByteStringReader MMDARexxTrigCmd #-}
peek :: (Reader m) => PTR -> m MMDARexxTrigCmd
peek :: forall (m :: * -> *). Reader m => PTR -> m MMDARexxTrigCmd
peek PTR
p = do
  PTR
next'''    <- forall (m :: * -> *). Reader m => Peek m PTR
peekPTR PTR
p
  Maybe MMDARexxTrigCmd
next'      <- forall (m :: * -> *). Reader m => PTR -> m MMDARexxTrigCmd
peek forall (m :: * -> *) a.
Monad m =>
(PTR -> m a) -> PTR -> m (Maybe a)
$? PTR
next'''
  UBYTE
cmdnum'    <- forall (m :: * -> *). Reader m => Peek m UBYTE
peekUBYTE (PTR
pforall a. Num a => a -> a -> a
+PTR
4)
  UBYTE
pad'       <- forall (m :: * -> *). Reader m => Peek m UBYTE
peekUBYTE (PTR
pforall a. Num a => a -> a -> a
+PTR
5)
  WORD
cmdtype'   <- forall (m :: * -> *). Reader m => Peek m WORD
peekWORD  (PTR
pforall a. Num a => a -> a -> a
+PTR
6)
  PTR
cmd''      <- forall (m :: * -> *). Reader m => Peek m PTR
peekPTR   (PTR
pforall a. Num a => a -> a -> a
+PTR
8)
  PTR
port''     <- forall (m :: * -> *). Reader m => Peek m PTR
peekPTR   (PTR
pforall a. Num a => a -> a -> a
+PTR
12)
  UWORD
cmd_len'   <- forall (m :: * -> *). Reader m => Peek m UWORD
peekUWORD (PTR
pforall a. Num a => a -> a -> a
+PTR
16)
  UWORD
port_len'  <- forall (m :: * -> *). Reader m => Peek m UWORD
peekUWORD (PTR
pforall a. Num a => a -> a -> a
+PTR
18)
  [UBYTE]
cmd'       <- 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 => PTR -> PTR -> i -> [PTR]
pointerRangeGenCheck PTR
cmd'' PTR
1 (UWORD
cmd_len'forall a. Num a => a -> a -> a
+UWORD
1)
  [UBYTE]
port'      <- 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 => PTR -> PTR -> i -> [PTR]
pointerRangeGenCheck PTR
port'' PTR
1 (UWORD
port_len'forall a. Num a => a -> a -> a
+UWORD
1)
  forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ Maybe MMDARexxTrigCmd
-> UBYTE
-> UBYTE
-> WORD
-> [UBYTE]
-> [UBYTE]
-> UWORD
-> UWORD
-> MMDARexxTrigCmd
MMDARexxTrigCmd
    Maybe MMDARexxTrigCmd
next' UBYTE
cmdnum' UBYTE
pad' WORD
cmdtype' [UBYTE]
cmd' [UBYTE]
port' UWORD
cmd_len' UWORD
port_len'