{-# LINE 1 "Sound/MikMod/Flags.hsc" #-}
{-# LANGUAGE ForeignFunctionInterface #-}
{-# LINE 2 "Sound/MikMod/Flags.hsc" #-}
module Sound.MikMod.Flags where
import Foreign
import Data.List
import Data.Maybe
import Sound.MikMod.Synonyms
{-# LINE 12 "Sound/MikMod/Flags.hsc" #-}
class Flag a where
toFlag :: a -> UWORD
fromFlag :: UWORD -> a
data DriverModeFlag =
DMode16Bits |
DModeStereo |
DModeSoftSndfx |
DModeSoftMusic |
DModeHQMixer |
DModeFloat |
DModeSurround |
DModeInterp |
DModeReverse |
DModeSIMDMixer |
DModeNoiseReduction
deriving (Eq, Show)
instance Flag DriverModeFlag where
toFlag flag = case flag of
DMode16Bits -> (1)
{-# LINE 36 "Sound/MikMod/Flags.hsc" #-}
DModeStereo -> (2)
{-# LINE 37 "Sound/MikMod/Flags.hsc" #-}
DModeSoftSndfx -> (4)
{-# LINE 38 "Sound/MikMod/Flags.hsc" #-}
DModeSoftMusic -> (8)
{-# LINE 39 "Sound/MikMod/Flags.hsc" #-}
DModeHQMixer -> (16)
{-# LINE 40 "Sound/MikMod/Flags.hsc" #-}
DModeFloat -> (32)
{-# LINE 41 "Sound/MikMod/Flags.hsc" #-}
DModeSurround -> (256)
{-# LINE 42 "Sound/MikMod/Flags.hsc" #-}
DModeInterp -> (512)
{-# LINE 43 "Sound/MikMod/Flags.hsc" #-}
DModeReverse -> (1024)
{-# LINE 44 "Sound/MikMod/Flags.hsc" #-}
DModeSIMDMixer -> (2048)
{-# LINE 45 "Sound/MikMod/Flags.hsc" #-}
DModeNoiseReduction -> (4096)
{-# LINE 46 "Sound/MikMod/Flags.hsc" #-}
fromFlag n = case n of
(1) -> DMode16Bits
{-# LINE 48 "Sound/MikMod/Flags.hsc" #-}
(2) -> DModeStereo
{-# LINE 49 "Sound/MikMod/Flags.hsc" #-}
(4) -> DModeSoftSndfx
{-# LINE 50 "Sound/MikMod/Flags.hsc" #-}
(8) -> DModeSoftMusic
{-# LINE 51 "Sound/MikMod/Flags.hsc" #-}
(16) -> DModeHQMixer
{-# LINE 52 "Sound/MikMod/Flags.hsc" #-}
(32) -> DModeFloat
{-# LINE 53 "Sound/MikMod/Flags.hsc" #-}
(256) -> DModeSurround
{-# LINE 54 "Sound/MikMod/Flags.hsc" #-}
(512) -> DModeInterp
{-# LINE 55 "Sound/MikMod/Flags.hsc" #-}
(1024) -> DModeReverse
{-# LINE 56 "Sound/MikMod/Flags.hsc" #-}
(2048) -> DModeSIMDMixer
{-# LINE 57 "Sound/MikMod/Flags.hsc" #-}
(4096) -> DModeNoiseReduction
{-# LINE 58 "Sound/MikMod/Flags.hsc" #-}
_ -> error ("unmarshalDriverModeFlag " ++ show n)
data SampleFlag =
SF16Bits |
SFBigEndian |
SFDelta |
SFITPacked |
SFSigned |
SFStereo |
SFBidi |
SFLoop |
SFReverse
deriving (Eq, Show)
instance Flag SampleFlag where
toFlag flag = case flag of
SF16Bits -> (1)
{-# LINE 75 "Sound/MikMod/Flags.hsc" #-}
SFBigEndian -> (8)
{-# LINE 76 "Sound/MikMod/Flags.hsc" #-}
SFDelta -> (16)
{-# LINE 77 "Sound/MikMod/Flags.hsc" #-}
SFITPacked -> (32)
{-# LINE 78 "Sound/MikMod/Flags.hsc" #-}
SFSigned -> (4)
{-# LINE 79 "Sound/MikMod/Flags.hsc" #-}
SFStereo -> (2)
{-# LINE 80 "Sound/MikMod/Flags.hsc" #-}
SFBidi -> (512)
{-# LINE 81 "Sound/MikMod/Flags.hsc" #-}
SFLoop -> (256)
{-# LINE 82 "Sound/MikMod/Flags.hsc" #-}
SFReverse -> (1024)
{-# LINE 83 "Sound/MikMod/Flags.hsc" #-}
fromFlag n = case n of
(1) -> SF16Bits
{-# LINE 85 "Sound/MikMod/Flags.hsc" #-}
(8) -> SFBigEndian
{-# LINE 86 "Sound/MikMod/Flags.hsc" #-}
(16) -> SFDelta
{-# LINE 87 "Sound/MikMod/Flags.hsc" #-}
(32) -> SFITPacked
{-# LINE 88 "Sound/MikMod/Flags.hsc" #-}
(4) -> SFSigned
{-# LINE 89 "Sound/MikMod/Flags.hsc" #-}
(2) -> SFStereo
{-# LINE 90 "Sound/MikMod/Flags.hsc" #-}
(512) -> SFBidi
{-# LINE 91 "Sound/MikMod/Flags.hsc" #-}
(256) -> SFLoop
{-# LINE 92 "Sound/MikMod/Flags.hsc" #-}
(1024) -> SFReverse
{-# LINE 93 "Sound/MikMod/Flags.hsc" #-}
_ -> error ("unmarshalSampleFlag " ++ show n)
data ModuleFlag =
UFARPMem |
UFBGSlides |
UFHighBPM |
UFInst |
UFLinear |
UFNNA |
UFNoWrap |
UFS3MSlides |
UFXMPeriods |
UFT2Quirks |
UFPanning
deriving (Eq, Show)
instance Flag ModuleFlag where
toFlag flag = case flag of
UFARPMem -> (256)
{-# LINE 112 "Sound/MikMod/Flags.hsc" #-}
UFBGSlides -> (32)
{-# LINE 113 "Sound/MikMod/Flags.hsc" #-}
UFHighBPM -> (64)
{-# LINE 114 "Sound/MikMod/Flags.hsc" #-}
UFInst -> (4)
{-# LINE 115 "Sound/MikMod/Flags.hsc" #-}
UFLinear -> (2)
{-# LINE 116 "Sound/MikMod/Flags.hsc" #-}
UFNNA -> (8)
{-# LINE 117 "Sound/MikMod/Flags.hsc" #-}
UFNoWrap -> (128)
{-# LINE 118 "Sound/MikMod/Flags.hsc" #-}
UFS3MSlides -> (16)
{-# LINE 119 "Sound/MikMod/Flags.hsc" #-}
UFXMPeriods -> (1)
{-# LINE 120 "Sound/MikMod/Flags.hsc" #-}
UFT2Quirks -> (512)
{-# LINE 121 "Sound/MikMod/Flags.hsc" #-}
UFPanning -> (1024)
{-# LINE 122 "Sound/MikMod/Flags.hsc" #-}
fromFlag n = case n of
(256) -> UFARPMem
{-# LINE 124 "Sound/MikMod/Flags.hsc" #-}
(32) -> UFBGSlides
{-# LINE 125 "Sound/MikMod/Flags.hsc" #-}
(64) -> UFHighBPM
{-# LINE 126 "Sound/MikMod/Flags.hsc" #-}
(4) -> UFInst
{-# LINE 127 "Sound/MikMod/Flags.hsc" #-}
(2) -> UFLinear
{-# LINE 128 "Sound/MikMod/Flags.hsc" #-}
(8) -> UFNNA
{-# LINE 129 "Sound/MikMod/Flags.hsc" #-}
(128) -> UFNoWrap
{-# LINE 130 "Sound/MikMod/Flags.hsc" #-}
(16) -> UFS3MSlides
{-# LINE 131 "Sound/MikMod/Flags.hsc" #-}
(1) -> UFXMPeriods
{-# LINE 132 "Sound/MikMod/Flags.hsc" #-}
(512) -> UFT2Quirks
{-# LINE 133 "Sound/MikMod/Flags.hsc" #-}
(1024) -> UFPanning
{-# LINE 134 "Sound/MikMod/Flags.hsc" #-}
_ -> error ("unmarshalModuleFlag " ++ show n)
unpackFlags :: Flag a => UWORD -> [a]
unpackFlags packed = map fromFlag results where
experiment = map (packed .&.) (take 16 $ (iterate (*2) 1))
results = filter (> 0) experiment
packFlags :: Flag a => [a] -> UWORD
packFlags flags = foldl' (.|.) 0 (map toFlag flags)