module KMonad.Keyboard.IO.Mac.Types
( MacError(..)
, MacKeyEvent
, toMacKeyEvent
, fromMacKeyEvent
, kcMapRaw
)
where
import KMonad.Prelude
import Foreign.Storable
import KMonad.Keyboard
import qualified RIO.HashMap as M
import RIO.List (sortOn)
data MacError
= NoMacKeycodeTo Keycode
| NoMacKeycodeFrom MacKeycode
| BadMacSwitch MacSwitch
instance Exception MacError
instance Show MacError where
show :: MacError -> String
show MacError
e = case MacError
e of
NoMacKeycodeTo Keycode
c -> String
"Cannot translate to mac keycode: " String -> ShowS
forall a. Semigroup a => a -> a -> a
<> Keycode -> String
forall a. Show a => a -> String
show Keycode
c
NoMacKeycodeFrom MacKeycode
i -> String
"Cannot translate from mac keycode: " String -> ShowS
forall a. Semigroup a => a -> a -> a
<> MacKeycode -> String
forall a. Show a => a -> String
show MacKeycode
i
BadMacSwitch MacSwitch
s -> String
"Cannot interpret mac switch: " String -> ShowS
forall a. Semigroup a => a -> a -> a
<> MacSwitch -> String
forall a. Show a => a -> String
show MacSwitch
s
instance Exception [MacError]
type MacSwitch = Word64
type MacKeycode = (Word32, Word32)
newtype MacKeyEvent = MacKeyEvent (MacSwitch, MacKeycode)
deriving (MacKeyEvent -> MacKeyEvent -> Bool
(MacKeyEvent -> MacKeyEvent -> Bool)
-> (MacKeyEvent -> MacKeyEvent -> Bool) -> Eq MacKeyEvent
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: MacKeyEvent -> MacKeyEvent -> Bool
== :: MacKeyEvent -> MacKeyEvent -> Bool
$c/= :: MacKeyEvent -> MacKeyEvent -> Bool
/= :: MacKeyEvent -> MacKeyEvent -> Bool
Eq, Eq MacKeyEvent
Eq MacKeyEvent =>
(MacKeyEvent -> MacKeyEvent -> Ordering)
-> (MacKeyEvent -> MacKeyEvent -> Bool)
-> (MacKeyEvent -> MacKeyEvent -> Bool)
-> (MacKeyEvent -> MacKeyEvent -> Bool)
-> (MacKeyEvent -> MacKeyEvent -> Bool)
-> (MacKeyEvent -> MacKeyEvent -> MacKeyEvent)
-> (MacKeyEvent -> MacKeyEvent -> MacKeyEvent)
-> Ord MacKeyEvent
MacKeyEvent -> MacKeyEvent -> Bool
MacKeyEvent -> MacKeyEvent -> Ordering
MacKeyEvent -> MacKeyEvent -> MacKeyEvent
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: MacKeyEvent -> MacKeyEvent -> Ordering
compare :: MacKeyEvent -> MacKeyEvent -> Ordering
$c< :: MacKeyEvent -> MacKeyEvent -> Bool
< :: MacKeyEvent -> MacKeyEvent -> Bool
$c<= :: MacKeyEvent -> MacKeyEvent -> Bool
<= :: MacKeyEvent -> MacKeyEvent -> Bool
$c> :: MacKeyEvent -> MacKeyEvent -> Bool
> :: MacKeyEvent -> MacKeyEvent -> Bool
$c>= :: MacKeyEvent -> MacKeyEvent -> Bool
>= :: MacKeyEvent -> MacKeyEvent -> Bool
$cmax :: MacKeyEvent -> MacKeyEvent -> MacKeyEvent
max :: MacKeyEvent -> MacKeyEvent -> MacKeyEvent
$cmin :: MacKeyEvent -> MacKeyEvent -> MacKeyEvent
min :: MacKeyEvent -> MacKeyEvent -> MacKeyEvent
Ord, Int -> MacKeyEvent -> ShowS
[MacKeyEvent] -> ShowS
MacKeyEvent -> String
(Int -> MacKeyEvent -> ShowS)
-> (MacKeyEvent -> String)
-> ([MacKeyEvent] -> ShowS)
-> Show MacKeyEvent
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> MacKeyEvent -> ShowS
showsPrec :: Int -> MacKeyEvent -> ShowS
$cshow :: MacKeyEvent -> String
show :: MacKeyEvent -> String
$cshowList :: [MacKeyEvent] -> ShowS
showList :: [MacKeyEvent] -> ShowS
Show)
instance Storable MacKeyEvent where
alignment :: MacKeyEvent -> Int
alignment MacKeyEvent
_ = Int
4
sizeOf :: MacKeyEvent -> Int
sizeOf MacKeyEvent
_ = Int
16
peek :: Ptr MacKeyEvent -> IO MacKeyEvent
peek Ptr MacKeyEvent
ptr = do
MacSwitch
s <- Ptr MacKeyEvent -> Int -> IO MacSwitch
forall b. Ptr b -> Int -> IO MacSwitch
forall a b. Storable a => Ptr b -> Int -> IO a
peekByteOff Ptr MacKeyEvent
ptr Int
0
Word32
p <- Ptr MacKeyEvent -> Int -> IO Word32
forall b. Ptr b -> Int -> IO Word32
forall a b. Storable a => Ptr b -> Int -> IO a
peekByteOff Ptr MacKeyEvent
ptr Int
8
Word32
u <- Ptr MacKeyEvent -> Int -> IO Word32
forall b. Ptr b -> Int -> IO Word32
forall a b. Storable a => Ptr b -> Int -> IO a
peekByteOff Ptr MacKeyEvent
ptr Int
12
MacKeyEvent -> IO MacKeyEvent
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (MacKeyEvent -> IO MacKeyEvent) -> MacKeyEvent -> IO MacKeyEvent
forall a b. (a -> b) -> a -> b
$ (MacSwitch, MacKeycode) -> MacKeyEvent
MacKeyEvent (MacSwitch
s, (Word32
p, Word32
u))
poke :: Ptr MacKeyEvent -> MacKeyEvent -> IO ()
poke Ptr MacKeyEvent
ptr (MacKeyEvent (MacSwitch
s, (Word32
p, Word32
u))) = do
Ptr MacKeyEvent -> Int -> MacSwitch -> IO ()
forall b. Ptr b -> Int -> MacSwitch -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr MacKeyEvent
ptr Int
0 MacSwitch
s
Ptr MacKeyEvent -> Int -> Word32 -> IO ()
forall b. Ptr b -> Int -> Word32 -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr MacKeyEvent
ptr Int
8 Word32
p
Ptr MacKeyEvent -> Int -> Word32 -> IO ()
forall b. Ptr b -> Int -> Word32 -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr MacKeyEvent
ptr Int
12 Word32
u
fromMacSwitch :: MacSwitch -> Maybe Switch
fromMacSwitch :: MacSwitch -> Maybe Switch
fromMacSwitch MacSwitch
s = case MacSwitch
s of
MacSwitch
1 -> Switch -> Maybe Switch
forall a. a -> Maybe a
Just Switch
Press
MacSwitch
0 -> Switch -> Maybe Switch
forall a. a -> Maybe a
Just Switch
Release
MacSwitch
_ -> Maybe Switch
forall a. Maybe a
Nothing
toMacSwitch :: Switch -> MacSwitch
toMacSwitch :: Switch -> MacSwitch
toMacSwitch Switch
s = if Switch
s Switch -> Switch -> Bool
forall a. Eq a => a -> a -> Bool
== Switch
Press then MacSwitch
1 else MacSwitch
0
fromMacKeycode :: MacKeycode -> Maybe Keycode
fromMacKeycode :: MacKeycode -> Maybe Keycode
fromMacKeycode = (MacKeycode -> HashMap MacKeycode Keycode -> Maybe Keycode)
-> HashMap MacKeycode Keycode -> MacKeycode -> Maybe Keycode
forall a b c. (a -> b -> c) -> b -> a -> c
flip MacKeycode -> HashMap MacKeycode Keycode -> Maybe Keycode
forall k v. (Eq k, Hashable k) => k -> HashMap k v -> Maybe v
M.lookup HashMap MacKeycode Keycode
kcMap
toMacKeycode :: Keycode -> Maybe MacKeycode
toMacKeycode :: Keycode -> Maybe MacKeycode
toMacKeycode = (Keycode -> HashMap Keycode MacKeycode -> Maybe MacKeycode)
-> HashMap Keycode MacKeycode -> Keycode -> Maybe MacKeycode
forall a b c. (a -> b -> c) -> b -> a -> c
flip Keycode -> HashMap Keycode MacKeycode -> Maybe MacKeycode
forall k v. (Eq k, Hashable k) => k -> HashMap k v -> Maybe v
M.lookup HashMap Keycode MacKeycode
revMap
where revMap :: HashMap Keycode MacKeycode
revMap = [(Keycode, MacKeycode)] -> HashMap Keycode MacKeycode
forall k v. (Eq k, Hashable k) => [(k, v)] -> HashMap k v
M.fromList ([(Keycode, MacKeycode)] -> HashMap Keycode MacKeycode)
-> ([(Keycode, MacKeycode)] -> [(Keycode, MacKeycode)])
-> [(Keycode, MacKeycode)]
-> HashMap Keycode MacKeycode
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Keycode, MacKeycode) -> Down MacKeycode)
-> [(Keycode, MacKeycode)] -> [(Keycode, MacKeycode)]
forall b a. Ord b => (a -> b) -> [a] -> [a]
sortOn (MacKeycode -> Down MacKeycode
forall a. a -> Down a
Down (MacKeycode -> Down MacKeycode)
-> ((Keycode, MacKeycode) -> MacKeycode)
-> (Keycode, MacKeycode)
-> Down MacKeycode
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Keycode, MacKeycode) -> MacKeycode
forall a b. (a, b) -> b
snd) ([(Keycode, MacKeycode)] -> HashMap Keycode MacKeycode)
-> [(Keycode, MacKeycode)] -> HashMap Keycode MacKeycode
forall a b. (a -> b) -> a -> b
$ HashMap MacKeycode Keycode -> [(MacKeycode, Keycode)]
forall k v. HashMap k v -> [(k, v)]
M.toList HashMap MacKeycode Keycode
kcMap [(MacKeycode, Keycode)]
-> Getting
(Endo [(Keycode, MacKeycode)])
[(MacKeycode, Keycode)]
(Keycode, MacKeycode)
-> [(Keycode, MacKeycode)]
forall s a. s -> Getting (Endo [a]) s a -> [a]
^.. ((MacKeycode, Keycode)
-> Const (Endo [(Keycode, MacKeycode)]) (MacKeycode, Keycode))
-> [(MacKeycode, Keycode)]
-> Const (Endo [(Keycode, MacKeycode)]) [(MacKeycode, Keycode)]
forall (f :: * -> *) a. Foldable f => IndexedFold Int (f a) a
IndexedFold Int [(MacKeycode, Keycode)] (MacKeycode, Keycode)
folded (((MacKeycode, Keycode)
-> Const (Endo [(Keycode, MacKeycode)]) (MacKeycode, Keycode))
-> [(MacKeycode, Keycode)]
-> Const (Endo [(Keycode, MacKeycode)]) [(MacKeycode, Keycode)])
-> (((Keycode, MacKeycode)
-> Const (Endo [(Keycode, MacKeycode)]) (Keycode, MacKeycode))
-> (MacKeycode, Keycode)
-> Const (Endo [(Keycode, MacKeycode)]) (MacKeycode, Keycode))
-> Getting
(Endo [(Keycode, MacKeycode)])
[(MacKeycode, Keycode)]
(Keycode, MacKeycode)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Keycode, MacKeycode)
-> Const (Endo [(Keycode, MacKeycode)]) (Keycode, MacKeycode))
-> (MacKeycode, Keycode)
-> Const (Endo [(Keycode, MacKeycode)]) (MacKeycode, Keycode)
forall (p :: * -> * -> *) a b c d.
Swap p =>
Iso (p a b) (p c d) (p b a) (p d c)
Iso
(MacKeycode, Keycode)
(MacKeycode, Keycode)
(Keycode, MacKeycode)
(Keycode, MacKeycode)
swapped
toMacKeyEvent :: KeyEvent -> Either MacError MacKeyEvent
toMacKeyEvent :: KeyEvent -> Either MacError MacKeyEvent
toMacKeyEvent KeyEvent
e = case Keycode -> Maybe MacKeycode
toMacKeycode (Keycode -> Maybe MacKeycode) -> Keycode -> Maybe MacKeycode
forall a b. (a -> b) -> a -> b
$ KeyEvent
eKeyEvent -> Getting Keycode KeyEvent Keycode -> Keycode
forall s a. s -> Getting a s a -> a
^.Getting Keycode KeyEvent Keycode
forall c. HasKeyEvent c => Lens' c Keycode
Lens' KeyEvent Keycode
keycode of
Just MacKeycode
c -> MacKeyEvent -> Either MacError MacKeyEvent
forall a b. b -> Either a b
Right (MacKeyEvent -> Either MacError MacKeyEvent)
-> MacKeyEvent -> Either MacError MacKeyEvent
forall a b. (a -> b) -> a -> b
$ (MacSwitch, MacKeycode) -> MacKeyEvent
MacKeyEvent (Switch -> MacSwitch
toMacSwitch (KeyEvent
eKeyEvent -> Getting Switch KeyEvent Switch -> Switch
forall s a. s -> Getting a s a -> a
^.Getting Switch KeyEvent Switch
forall c. HasKeyEvent c => Lens' c Switch
Lens' KeyEvent Switch
switch), MacKeycode
c)
Maybe MacKeycode
Nothing -> MacError -> Either MacError MacKeyEvent
forall a b. a -> Either a b
Left (MacError -> Either MacError MacKeyEvent)
-> (Keycode -> MacError) -> Keycode -> Either MacError MacKeyEvent
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Keycode -> MacError
NoMacKeycodeTo (Keycode -> Either MacError MacKeyEvent)
-> Keycode -> Either MacError MacKeyEvent
forall a b. (a -> b) -> a -> b
$ KeyEvent
eKeyEvent -> Getting Keycode KeyEvent Keycode -> Keycode
forall s a. s -> Getting a s a -> a
^.Getting Keycode KeyEvent Keycode
forall c. HasKeyEvent c => Lens' c Keycode
Lens' KeyEvent Keycode
keycode
fromMacKeyEvent :: MacKeyEvent -> Maybe (Either [MacError] KeyEvent)
fromMacKeyEvent :: MacKeyEvent -> Maybe (Either [MacError] KeyEvent)
fromMacKeyEvent (MacKeyEvent (MacSwitch
s, (Word32
p, Word32
u)))
| Word32
p Word32 -> Word32 -> Bool
forall a. Eq a => a -> a -> Bool
== Word32
7 Bool -> Bool -> Bool
&& Word32
u Word32 -> Word32 -> Bool
forall a. Ord a => a -> a -> Bool
<= Word32
0x3 = Maybe (Either [MacError] KeyEvent)
forall a. Maybe a
Nothing
| Word32
p Word32 -> Word32 -> Bool
forall a. Eq a => a -> a -> Bool
== Word32
7 Bool -> Bool -> Bool
&& Word32
u Word32 -> Word32 -> Bool
forall a. Ord a => a -> a -> Bool
>= Word32
0xFFFF = Maybe (Either [MacError] KeyEvent)
forall a. Maybe a
Nothing
| Bool
otherwise = case (MacKeycode -> Maybe Keycode
fromMacKeycode (Word32
p, Word32
u), MacSwitch -> Maybe Switch
fromMacSwitch MacSwitch
s) of
(Just Keycode
c', Just Switch
s') -> Either [MacError] KeyEvent -> Maybe (Either [MacError] KeyEvent)
forall a. a -> Maybe a
Just (KeyEvent -> Either [MacError] KeyEvent
forall a b. b -> Either a b
Right (KeyEvent -> Either [MacError] KeyEvent)
-> KeyEvent -> Either [MacError] KeyEvent
forall a b. (a -> b) -> a -> b
$ Switch -> Keycode -> KeyEvent
mkKeyEvent Switch
s' Keycode
c')
(Just Keycode
_, Maybe Switch
Nothing) -> Either [MacError] KeyEvent -> Maybe (Either [MacError] KeyEvent)
forall a. a -> Maybe a
Just ([MacError] -> Either [MacError] KeyEvent
forall a b. a -> Either a b
Left [MacSwitch -> MacError
BadMacSwitch MacSwitch
s])
(Maybe Keycode
Nothing, Just Switch
_) -> Either [MacError] KeyEvent -> Maybe (Either [MacError] KeyEvent)
forall a. a -> Maybe a
Just ([MacError] -> Either [MacError] KeyEvent
forall a b. a -> Either a b
Left [MacKeycode -> MacError
NoMacKeycodeFrom (Word32
p,Word32
u)])
(Maybe Keycode
Nothing, Maybe Switch
Nothing) -> Either [MacError] KeyEvent -> Maybe (Either [MacError] KeyEvent)
forall a. a -> Maybe a
Just ([MacError] -> Either [MacError] KeyEvent
forall a b. a -> Either a b
Left [MacSwitch -> MacError
BadMacSwitch MacSwitch
s, MacKeycode -> MacError
NoMacKeycodeFrom (Word32
p,Word32
u)])
kcMap :: M.HashMap MacKeycode Keycode
kcMap :: HashMap MacKeycode Keycode
kcMap = [(MacKeycode, Keycode)] -> HashMap MacKeycode Keycode
forall k v. (Eq k, Hashable k) => [(k, v)] -> HashMap k v
M.fromList [(MacKeycode, Keycode)]
kcMapRaw
kcMapRaw :: [(MacKeycode, Keycode)]
kcMapRaw :: [(MacKeycode, Keycode)]
kcMapRaw =
[ ((Word32
0x7,Word32
0x4), Keycode
KeyA)
, ((Word32
0x7,Word32
0x5), Keycode
KeyB)
, ((Word32
0x7,Word32
0x6), Keycode
KeyC)
, ((Word32
0x7,Word32
0x7), Keycode
KeyD)
, ((Word32
0x7,Word32
0x8), Keycode
KeyE)
, ((Word32
0x7,Word32
0x9), Keycode
KeyF)
, ((Word32
0x7,Word32
0xA), Keycode
KeyG)
, ((Word32
0x7,Word32
0xB), Keycode
KeyH)
, ((Word32
0x7,Word32
0xC), Keycode
KeyI)
, ((Word32
0x7,Word32
0xD), Keycode
KeyJ)
, ((Word32
0x7,Word32
0xE), Keycode
KeyK)
, ((Word32
0x7,Word32
0xF), Keycode
KeyL)
, ((Word32
0x7,Word32
0x10), Keycode
KeyM)
, ((Word32
0x7,Word32
0x11), Keycode
KeyN)
, ((Word32
0x7,Word32
0x12), Keycode
KeyO)
, ((Word32
0x7,Word32
0x13), Keycode
KeyP)
, ((Word32
0x7,Word32
0x14), Keycode
KeyQ)
, ((Word32
0x7,Word32
0x15), Keycode
KeyR)
, ((Word32
0x7,Word32
0x16), Keycode
KeyS)
, ((Word32
0x7,Word32
0x17), Keycode
KeyT)
, ((Word32
0x7,Word32
0x18), Keycode
KeyU)
, ((Word32
0x7,Word32
0x19), Keycode
KeyV)
, ((Word32
0x7,Word32
0x1A), Keycode
KeyW)
, ((Word32
0x7,Word32
0x1B), Keycode
KeyX)
, ((Word32
0x7,Word32
0x1C), Keycode
KeyY)
, ((Word32
0x7,Word32
0x1D), Keycode
KeyZ)
, ((Word32
0x7,Word32
0x1E), Keycode
Key1)
, ((Word32
0x7,Word32
0x1F), Keycode
Key2)
, ((Word32
0x7,Word32
0x20), Keycode
Key3)
, ((Word32
0x7,Word32
0x21), Keycode
Key4)
, ((Word32
0x7,Word32
0x22), Keycode
Key5)
, ((Word32
0x7,Word32
0x23), Keycode
Key6)
, ((Word32
0x7,Word32
0x24), Keycode
Key7)
, ((Word32
0x7,Word32
0x25), Keycode
Key8)
, ((Word32
0x7,Word32
0x26), Keycode
Key9)
, ((Word32
0x7,Word32
0x27), Keycode
Key0)
, ((Word32
0x7,Word32
0x28), Keycode
KeyEnter)
, ((Word32
0x7,Word32
0x29), Keycode
KeyEsc)
, ((Word32
0x7,Word32
0x2A), Keycode
KeyBackspace)
, ((Word32
0x7,Word32
0x2B), Keycode
KeyTab)
, ((Word32
0x7,Word32
0x2C), Keycode
KeySpace)
, ((Word32
0x7,Word32
0x2D), Keycode
KeyMinus)
, ((Word32
0x7,Word32
0x2E), Keycode
KeyEqual)
, ((Word32
0x7,Word32
0x2F), Keycode
KeyLeftBrace)
, ((Word32
0x7,Word32
0x30), Keycode
KeyRightBrace)
, ((Word32
0x7,Word32
0x31), Keycode
KeyBackslash)
, ((Word32
0x7,Word32
0x32), Keycode
KeyBackslash)
, ((Word32
0x7,Word32
0x33), Keycode
KeySemicolon)
, ((Word32
0x7,Word32
0x34), Keycode
KeyApostrophe)
, ((Word32
0x7,Word32
0x35), Keycode
KeyGrave)
, ((Word32
0x7,Word32
0x36), Keycode
KeyComma)
, ((Word32
0x7,Word32
0x37), Keycode
KeyDot)
, ((Word32
0x7,Word32
0x38), Keycode
KeySlash)
, ((Word32
0x7,Word32
0x39), Keycode
KeyCapsLock)
, ((Word32
0x7,Word32
0x3A), Keycode
KeyF1)
, ((Word32
0x7,Word32
0x3B), Keycode
KeyF2)
, ((Word32
0x7,Word32
0x3C), Keycode
KeyF3)
, ((Word32
0x7,Word32
0x3D), Keycode
KeyF4)
, ((Word32
0x7,Word32
0x3E), Keycode
KeyF5)
, ((Word32
0x7,Word32
0x3F), Keycode
KeyF6)
, ((Word32
0x7,Word32
0x40), Keycode
KeyF7)
, ((Word32
0x7,Word32
0x41), Keycode
KeyF8)
, ((Word32
0x7,Word32
0x42), Keycode
KeyF9)
, ((Word32
0x7,Word32
0x43), Keycode
KeyF10)
, ((Word32
0x7,Word32
0x44), Keycode
KeyF11)
, ((Word32
0x7,Word32
0x45), Keycode
KeyF12)
, ((Word32
0x7,Word32
0x46), Keycode
KeyPrint)
, ((Word32
0x7,Word32
0x47), Keycode
KeyScrollLock)
, ((Word32
0x7,Word32
0x48), Keycode
KeyPause)
, ((Word32
0x7,Word32
0x49), Keycode
KeyInsert)
, ((Word32
0x7,Word32
0x4A), Keycode
KeyHome)
, ((Word32
0x7,Word32
0x4B), Keycode
KeyPageUp)
, ((Word32
0x7,Word32
0x4C), Keycode
KeyDelete)
, ((Word32
0x7,Word32
0x4D), Keycode
KeyEnd)
, ((Word32
0x7,Word32
0x4E), Keycode
KeyPageDown)
, ((Word32
0x7,Word32
0x4F), Keycode
KeyRight)
, ((Word32
0x7,Word32
0x50), Keycode
KeyLeft)
, ((Word32
0x7,Word32
0x51), Keycode
KeyDown)
, ((Word32
0x7,Word32
0x52), Keycode
KeyUp)
, ((Word32
0x7,Word32
0x53), Keycode
KeyNumLock)
, ((Word32
0x7,Word32
0x54), Keycode
KeyKpSlash)
, ((Word32
0x7,Word32
0x55), Keycode
KeyKpAsterisk)
, ((Word32
0x7,Word32
0x56), Keycode
KeyKpMinus)
, ((Word32
0x7,Word32
0x57), Keycode
KeyKpPlus)
, ((Word32
0x7,Word32
0x58), Keycode
KeyKpEnter)
, ((Word32
0x7,Word32
0x59), Keycode
KeyKp1)
, ((Word32
0x7,Word32
0x5A), Keycode
KeyKp2)
, ((Word32
0x7,Word32
0x5B), Keycode
KeyKp3)
, ((Word32
0x7,Word32
0x5C), Keycode
KeyKp4)
, ((Word32
0x7,Word32
0x5D), Keycode
KeyKp5)
, ((Word32
0x7,Word32
0x5E), Keycode
KeyKp6)
, ((Word32
0x7,Word32
0x5F), Keycode
KeyKp7)
, ((Word32
0x7,Word32
0x60), Keycode
KeyKp8)
, ((Word32
0x7,Word32
0x61), Keycode
KeyKp9)
, ((Word32
0x7,Word32
0x62), Keycode
KeyKp0)
, ((Word32
0x7,Word32
0x63), Keycode
KeyKpDot)
, ((Word32
0x7,Word32
0x64), Keycode
Key102nd)
, ((Word32
0x7,Word32
0x65), Keycode
KeyCompose)
, ((Word32
0x7,Word32
0x66), Keycode
KeyPower)
, ((Word32
0x7,Word32
0x67), Keycode
KeyKpEqual)
, ((Word32
0x7,Word32
0x68), Keycode
KeyF13)
, ((Word32
0x7,Word32
0x69), Keycode
KeyF14)
, ((Word32
0x7,Word32
0x6A), Keycode
KeyF15)
, ((Word32
0x7,Word32
0x6B), Keycode
KeyF16)
, ((Word32
0x7,Word32
0x6C), Keycode
KeyF17)
, ((Word32
0x7,Word32
0x6D), Keycode
KeyF18)
, ((Word32
0x7,Word32
0x6E), Keycode
KeyF19)
, ((Word32
0x7,Word32
0x6F), Keycode
KeyF20)
, ((Word32
0x7,Word32
0x70), Keycode
KeyF21)
, ((Word32
0x7,Word32
0x71), Keycode
KeyF22)
, ((Word32
0x7,Word32
0x72), Keycode
KeyF23)
, ((Word32
0x7,Word32
0x73), Keycode
KeyF24)
, ((Word32
0x7,Word32
0x74), Keycode
KeyOpen)
, ((Word32
0x7,Word32
0x75), Keycode
KeyHelp)
, ((Word32
0x7,Word32
0x76), Keycode
KeyMenu)
, ((Word32
0x7,Word32
0x77), Keycode
KeyFront)
, ((Word32
0x7,Word32
0x78), Keycode
KeyStop)
, ((Word32
0x7,Word32
0x79), Keycode
KeyAgain)
, ((Word32
0x7,Word32
0x7A), Keycode
KeyUndo)
, ((Word32
0x7,Word32
0x7B), Keycode
KeyCut)
, ((Word32
0x7,Word32
0x7C), Keycode
KeyCopy)
, ((Word32
0x7,Word32
0x7D), Keycode
KeyPaste)
, ((Word32
0x7,Word32
0x7E), Keycode
KeyFind)
, ((Word32
0x7,Word32
0x7F), Keycode
KeyMute)
, ((Word32
0x7,Word32
0x80), Keycode
KeyVolumeUp)
, ((Word32
0x7,Word32
0x81), Keycode
KeyVolumeDown)
, ((Word32
0x7,Word32
0x85), Keycode
KeyKpComma)
, ((Word32
0x7,Word32
0x87), Keycode
KeyRo)
, ((Word32
0x7,Word32
0x88), Keycode
KeyKatakanaHiragana)
, ((Word32
0x7,Word32
0x89), Keycode
KeyYen)
, ((Word32
0x7,Word32
0x8A), Keycode
KeyHenkan)
, ((Word32
0x7,Word32
0x8B), Keycode
KeyMuhenkan)
, ((Word32
0x7,Word32
0x8C), Keycode
KeyKpjpcomma)
, ((Word32
0x7,Word32
0x90), Keycode
KeyHangeul)
, ((Word32
0x7,Word32
0x91), Keycode
KeyHanja)
, ((Word32
0x7,Word32
0x92), Keycode
KeyKatakana)
, ((Word32
0x7,Word32
0x93), Keycode
KeyHiragana)
, ((Word32
0x7,Word32
0x94), Keycode
KeyZenkakuHankaku)
, ((Word32
0x7,Word32
0x9B), Keycode
KeyCancel)
, ((Word32
0x7,Word32
0xE0), Keycode
KeyLeftCtrl)
, ((Word32
0x7,Word32
0xE1), Keycode
KeyLeftShift)
, ((Word32
0x7,Word32
0xE2), Keycode
KeyLeftAlt)
, ((Word32
0x7,Word32
0xE3), Keycode
KeyLeftMeta)
, ((Word32
0x7,Word32
0xE4), Keycode
KeyRightCtrl)
, ((Word32
0x7,Word32
0xE5), Keycode
KeyRightShift)
, ((Word32
0x7,Word32
0xE6), Keycode
KeyRightAlt)
, ((Word32
0x7,Word32
0xE7), Keycode
KeyRightMeta)
, ((Word32
0xC,Word32
0x34), Keycode
KeySleep)
, ((Word32
0xC,Word32
0x40), Keycode
KeyMenu)
, ((Word32
0xC,Word32
0x45), Keycode
KeyRight)
, ((Word32
0xC,Word32
0x61), Keycode
KeySubtitle)
, ((Word32
0xC,Word32
0x69), Keycode
KeyRed)
, ((Word32
0xC,Word32
0x6A), Keycode
KeyGreen)
, ((Word32
0xC,Word32
0x6B), Keycode
KeyBlue)
, ((Word32
0xC,Word32
0x6C), Keycode
KeyYellow)
, ((Word32
0xC,Word32
0x83), Keycode
KeyLast)
, ((Word32
0xC,Word32
0x88), Keycode
KeyPc)
, ((Word32
0xC,Word32
0x89), Keycode
KeyTv)
, ((Word32
0xC,Word32
0x8A), Keycode
KeyWww)
, ((Word32
0xC,Word32
0x8B), Keycode
KeyDvd)
, ((Word32
0xC,Word32
0x8C), Keycode
KeyPhone)
, ((Word32
0xC,Word32
0x8D), Keycode
KeyProgram)
, ((Word32
0xC,Word32
0x8E), Keycode
KeyVideoPhone)
, ((Word32
0xC,Word32
0x8F), Keycode
KeyGames)
, ((Word32
0xC,Word32
0x90), Keycode
KeyMemo)
, ((Word32
0xC,Word32
0x91), Keycode
KeyCd)
, ((Word32
0xC,Word32
0x92), Keycode
KeyVcr)
, ((Word32
0xC,Word32
0x93), Keycode
KeyTuner)
, ((Word32
0xC,Word32
0x94), Keycode
KeyExit)
, ((Word32
0xC,Word32
0x95), Keycode
KeyHelp)
, ((Word32
0xC,Word32
0x96), Keycode
KeyTape)
, ((Word32
0xC,Word32
0x97), Keycode
KeyTv2)
, ((Word32
0xC,Word32
0x98), Keycode
KeySat)
, ((Word32
0xC,Word32
0x9A), Keycode
KeyPvr)
, ((Word32
0xC,Word32
0x9C), Keycode
KeyChannelUp)
, ((Word32
0xC,Word32
0x9D), Keycode
KeyChannelDown)
, ((Word32
0xC,Word32
0xA0), Keycode
KeyVcr2)
, ((Word32
0xC,Word32
0xB0), Keycode
KeyPlay)
, ((Word32
0xC,Word32
0xB1), Keycode
KeyPause)
, ((Word32
0xC,Word32
0xB2), Keycode
KeyRecord)
, ((Word32
0xC,Word32
0xB3), Keycode
KeyFastForward)
, ((Word32
0xC,Word32
0xB4), Keycode
KeyRewind)
, ((Word32
0xC,Word32
0xB5), Keycode
KeyNextSong)
, ((Word32
0xC,Word32
0xB6), Keycode
KeyPreviousSong)
, ((Word32
0xC,Word32
0xB7), Keycode
KeyStopCd)
, ((Word32
0xC,Word32
0xB8), Keycode
KeyEjectCd)
, ((Word32
0xC,Word32
0xBC), Keycode
KeyMediaRepeat)
, ((Word32
0xC,Word32
0xCD), Keycode
KeyPlayPause)
, ((Word32
0xC,Word32
0xCF), Keycode
KeyDictation)
, ((Word32
0xC,Word32
0xE2), Keycode
KeyPlayPause)
, ((Word32
0xC,Word32
0xE5), Keycode
KeyBassBoost)
, ((Word32
0xC,Word32
0xE9), Keycode
KeyVolumeUp)
, ((Word32
0xC,Word32
0xEA), Keycode
KeyVolumeDown)
, ((Word32
0xC,Word32
0x182), Keycode
KeyBookmarks)
, ((Word32
0xC,Word32
0x183), Keycode
KeyConfig)
, ((Word32
0xC,Word32
0x184), Keycode
KeyWordProcessor)
, ((Word32
0xC,Word32
0x185), Keycode
KeyEditor)
, ((Word32
0xC,Word32
0x186), Keycode
KeySpreadSheet)
, ((Word32
0xC,Word32
0x187), Keycode
KeyGraphicsEditor)
, ((Word32
0xC,Word32
0x188), Keycode
KeyPresentation)
, ((Word32
0xC,Word32
0x189), Keycode
KeyDatabase)
, ((Word32
0xC,Word32
0x18A), Keycode
KeyMail)
, ((Word32
0xC,Word32
0x18B), Keycode
KeyNews)
, ((Word32
0xC,Word32
0x18C), Keycode
KeyVoicemail)
, ((Word32
0xC,Word32
0x18D), Keycode
KeyAddressBook)
, ((Word32
0xC,Word32
0x18E), Keycode
KeyCalendar)
, ((Word32
0xC,Word32
0x191), Keycode
KeyFinance)
, ((Word32
0xC,Word32
0x192), Keycode
KeyCalc)
, ((Word32
0xC,Word32
0x194), Keycode
KeyFile)
, ((Word32
0xC,Word32
0x196), Keycode
KeyWww)
, ((Word32
0xC,Word32
0x199), Keycode
KeyChat)
, ((Word32
0xC,Word32
0x19C), Keycode
KeyLogoff)
, ((Word32
0xC,Word32
0x19E), Keycode
KeyCoffee)
, ((Word32
0xC,Word32
0x1A6), Keycode
KeyHelp)
, ((Word32
0xC,Word32
0x1A7), Keycode
KeyDocuments)
, ((Word32
0xC,Word32
0x1AB), Keycode
KeySpellCheck)
, ((Word32
0xC,Word32
0x1B6), Keycode
KeyMedia)
, ((Word32
0xC,Word32
0x1B7), Keycode
KeySound)
, ((Word32
0xC,Word32
0x1BC), Keycode
KeyMessenger)
, ((Word32
0xC,Word32
0x1BD), Keycode
KeyInfo)
, ((Word32
0xC,Word32
0x201), Keycode
KeyNew)
, ((Word32
0xC,Word32
0x202), Keycode
KeyOpen)
, ((Word32
0xC,Word32
0x203), Keycode
KeyClose)
, ((Word32
0xC,Word32
0x204), Keycode
KeyExit)
, ((Word32
0xC,Word32
0x207), Keycode
KeySave)
, ((Word32
0xC,Word32
0x208), Keycode
KeyPrint)
, ((Word32
0xC,Word32
0x209), Keycode
KeyProps)
, ((Word32
0xC,Word32
0x21A), Keycode
KeyUndo)
, ((Word32
0xC,Word32
0x21B), Keycode
KeyCopy)
, ((Word32
0xC,Word32
0x21C), Keycode
KeyCut)
, ((Word32
0xC,Word32
0x21D), Keycode
KeyPaste)
, ((Word32
0xC,Word32
0x21F), Keycode
KeyFind)
, ((Word32
0xC,Word32
0x221), Keycode
KeySearch)
, ((Word32
0xC,Word32
0x222), Keycode
KeyGoTo)
, ((Word32
0xC,Word32
0x223), Keycode
KeyHomepage)
, ((Word32
0xC,Word32
0x224), Keycode
KeyBack)
, ((Word32
0xC,Word32
0x225), Keycode
KeyForward)
, ((Word32
0xC,Word32
0x226), Keycode
KeyStop)
, ((Word32
0xC,Word32
0x227), Keycode
KeyRefresh)
, ((Word32
0xC,Word32
0x22A), Keycode
KeyBookmarks)
, ((Word32
0xC,Word32
0x22D), Keycode
KeyZoomIn)
, ((Word32
0xC,Word32
0x22E), Keycode
KeyZoomOut)
, ((Word32
0xC,Word32
0x22F), Keycode
KeyZoomReset)
, ((Word32
0xC,Word32
0x233), Keycode
KeyScrollUp)
, ((Word32
0xC,Word32
0x234), Keycode
KeyScrollDown)
, ((Word32
0xC,Word32
0x25F), Keycode
KeyCancel)
, ((Word32
0xC,Word32
0x279), Keycode
KeyRedo)
, ((Word32
0xC,Word32
0x289), Keycode
KeyReply)
, ((Word32
0xC,Word32
0x28B), Keycode
KeyForwardMail)
, ((Word32
0xC,Word32
0x28C), Keycode
KeySend)
, ((Word32
0xFF,Word32
0x3), Keycode
KeyFn)
, ((Word32
0xFF,Word32
0x4), Keycode
KeyBrightnessUp)
, ((Word32
0xFF,Word32
0x5), Keycode
KeyBrightnessDown)
, ((Word32
0xFF,Word32
0x8), Keycode
KeyKbdIllumUp)
, ((Word32
0xFF,Word32
0x9), Keycode
KeyKbdIllumDown)
, ((Word32
0xFF01,Word32
0x1), Keycode
KeySpotlight)
, ((Word32
0xFF01,Word32
0x4), Keycode
KeyLaunchpad)
, ((Word32
0xFF01,Word32
0x10), Keycode
KeyMissionCtrl)
]