module Sound.MED.Raw.NotationInfo where

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

data NotationInfo = NotationInfo
  { NotationInfo -> UBYTE
n_of_sharps :: UBYTE
  , NotationInfo -> UBYTE
flags       :: UBYTE
  , NotationInfo -> [WORD]
trksel      :: [ WORD ]
  , NotationInfo -> [UBYTE]
trkshow     :: [ UBYTE ]
  , NotationInfo -> [UBYTE]
trkghost    :: [ UBYTE ]
  , NotationInfo -> [BYTE]
notetr      :: [ BYTE ]
  , NotationInfo -> UBYTE
pad         :: UBYTE
  }
  deriving (Int -> NotationInfo -> ShowS
[NotationInfo] -> ShowS
NotationInfo -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [NotationInfo] -> ShowS
$cshowList :: [NotationInfo] -> ShowS
show :: NotationInfo -> String
$cshow :: NotationInfo -> String
showsPrec :: Int -> NotationInfo -> ShowS
$cshowsPrec :: Int -> NotationInfo -> ShowS
Show)

{-# SPECIALISE peek :: PTR -> StorableReader NotationInfo #-}
{-# SPECIALISE peek :: PTR -> ByteStringReader NotationInfo #-}
peek :: (Reader m) => PTR -> m NotationInfo
peek :: forall (m :: * -> *). Reader m => PTR -> m NotationInfo
peek PTR
p = do
  UBYTE
n_of_sharps' <- forall (m :: * -> *). Reader m => Peek m UBYTE
peekUBYTE (PTR
pforall a. Num a => a -> a -> a
+PTR
0)
  UBYTE
flags'       <- forall (m :: * -> *). Reader m => Peek m UBYTE
peekUBYTE (PTR
pforall a. Num a => a -> a -> a
+PTR
1)
  [WORD]
trksel'      <- forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM forall (m :: * -> *). Reader m => Peek m WORD
peekWORD  forall a b. (a -> b) -> a -> b
$ PTR -> PTR -> Int -> [PTR]
pointerRange (PTR
pforall a. Num a => a -> a -> a
+ PTR
2) PTR
2 Int
5
  [UBYTE]
trkshow'     <- 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
pforall a. Num a => a -> a -> a
+PTR
22) PTR
1 Int
16
  [UBYTE]
trkghost'    <- 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
pforall a. Num a => a -> a -> a
+PTR
38) PTR
1 Int
16
  [BYTE]
notetr'      <- forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM forall (m :: * -> *). Reader m => Peek m BYTE
peekBYTE  forall a b. (a -> b) -> a -> b
$ PTR -> PTR -> Int -> [PTR]
pointerRange (PTR
pforall a. Num a => a -> a -> a
+PTR
54) PTR
1 Int
63
  UBYTE
pad'         <- forall (m :: * -> *). Reader m => Peek m UBYTE
peekUBYTE (PTR
pforall a. Num a => a -> a -> a
+PTR
117)
  forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ UBYTE
-> UBYTE
-> [WORD]
-> [UBYTE]
-> [UBYTE]
-> [BYTE]
-> UBYTE
-> NotationInfo
NotationInfo
    UBYTE
n_of_sharps' UBYTE
flags' [WORD]
trksel' [UBYTE]
trkshow' [UBYTE]
trkghost' [BYTE]
notetr' UBYTE
pad'