    {-# LINE 1 "Graphics/UI/SDL/Keysym.hsc" #-}

    {-# LINE 5 "Graphics/UI/SDL/Keysym.hsc" #-}
    -----------------------------------------------------------------------------
    -- |
    -- Module      :  Graphics.UI.SDL.Keysym
    -- Copyright   :  (c) David Himmelstrup 2005
    -- License     :  BSD-like
    --
    -- Maintainer  :  lemmih@gmail.com
    -- Stability   :  provisional
    -- Portability :  portable
    --
    -----------------------------------------------------------------------------
    module Graphics.UI.SDL.Keysym where

    import Foreign (Word16, Word32,
                   Storable(poke, sizeOf, alignment, peekByteOff, pokeByteOff, peek))
    import Data.Char (chr, ord)
    import Prelude hiding (Enum(..))

    import Graphics.UI.SDL.Utilities (Enum(..), toBitmask, fromBitmask)

    data Keysym
      = Keysym
        { symKey :: SDLKey,
          symModifiers :: [Modifier],
          symUnicode :: Char}
        deriving (Show,Eq)

    instance Storable Keysym where
        sizeOf = const (16)
    {-# LINE 34 "Graphics/UI/SDL/Keysym.hsc" #-}
        alignment = const 4
        poke ptr (Keysym key mods unicode)
            = do (\hsc_ptr -> pokeByteOff hsc_ptr 4) ptr (fromEnum key)
    {-# LINE 37 "Graphics/UI/SDL/Keysym.hsc" #-}
                 (\hsc_ptr -> pokeByteOff hsc_ptr 8) ptr (toBitmask mods)
    {-# LINE 38 "Graphics/UI/SDL/Keysym.hsc" #-}
                 (\hsc_ptr -> pokeByteOff hsc_ptr 12) ptr (fromIntegral (ord unicode) :: Word16)
    {-# LINE 39 "Graphics/UI/SDL/Keysym.hsc" #-}
        peek ptr
            = do sym <- (\hsc_ptr -> peekByteOff hsc_ptr 4) ptr
    {-# LINE 41 "Graphics/UI/SDL/Keysym.hsc" #-}
                 mods <- (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr
    {-# LINE 42 "Graphics/UI/SDL/Keysym.hsc" #-}
                 uni <- (\hsc_ptr -> peekByteOff hsc_ptr 12) ptr
    {-# LINE 43 "Graphics/UI/SDL/Keysym.hsc" #-}
                 return $! Keysym (toEnum sym) (fromBitmask mods) (chr $ fromIntegral (uni::Word16))

    data Modifier = KeyModNone
                     | KeyModLeftShift
                     | KeyModRightShift
                     | KeyModLeftCtrl
                     | KeyModRightCtrl
                     | KeyModLeftAlt
                     | KeyModRightAlt
                     | KeyModLeftMeta
                     | KeyModRightMeta
                     | KeyModNum
                     | KeyModCaps
                     | KeyModMode
                     | KeyModCtrl
                     | KeyModShift
                     | KeyModAlt
                     | KeyModMeta
        deriving (Eq, Ord, Show)
    instance Bounded Modifier where
        minBound = KeyModNone
        maxBound = KeyModMode
    instance Enum Modifier Word32 where
    {-# LINE 67 "Graphics/UI/SDL/Keysym.hsc" #-}
          fromEnum KeyModNone = 0
          fromEnum KeyModLeftShift = 1
          fromEnum KeyModRightShift = 2
          fromEnum KeyModLeftCtrl = 64
          fromEnum KeyModRightCtrl = 128
          fromEnum KeyModLeftAlt = 256
          fromEnum KeyModRightAlt = 512
          fromEnum KeyModLeftMeta = 1024
          fromEnum KeyModRightMeta = 2048
          fromEnum KeyModNum = 4096
          fromEnum KeyModCaps = 8192
          fromEnum KeyModMode = 16384
          fromEnum KeyModCtrl = 192
          fromEnum KeyModShift = 3
          fromEnum KeyModAlt = 768
          fromEnum KeyModMeta = 3072
          toEnum 0 = KeyModNone
          toEnum 1 = KeyModLeftShift
          toEnum 2 = KeyModRightShift
          toEnum 64 = KeyModLeftCtrl
          toEnum 128 = KeyModRightCtrl
          toEnum 256 = KeyModLeftAlt
          toEnum 512 = KeyModRightAlt
          toEnum 1024 = KeyModLeftMeta
          toEnum 2048 = KeyModRightMeta
          toEnum 4096 = KeyModNum
          toEnum 8192 = KeyModCaps
          toEnum 16384 = KeyModMode
          toEnum 192 = KeyModCtrl
          toEnum 3 = KeyModShift
          toEnum 768 = KeyModAlt
          toEnum 3072 = KeyModMeta
          toEnum _ = error "Graphics.UI.SDL.Keysym.toEnum: bad argument"
          succ KeyModNone = KeyModLeftShift
          succ KeyModLeftShift = KeyModRightShift
          succ KeyModRightShift = KeyModLeftCtrl
          succ KeyModLeftCtrl = KeyModRightCtrl
          succ KeyModRightCtrl = KeyModLeftAlt
          succ KeyModLeftAlt = KeyModRightAlt
          succ KeyModRightAlt = KeyModLeftMeta
          succ KeyModLeftMeta = KeyModRightMeta
          succ KeyModRightMeta = KeyModNum
          succ KeyModNum = KeyModCaps
          succ KeyModCaps = KeyModMode
          succ KeyModMode = KeyModCtrl
          succ KeyModCtrl = KeyModShift
          succ KeyModShift = KeyModAlt
          succ KeyModAlt = KeyModMeta
          succ _ = error "Graphics.UI.SDL.Keysym.succ: bad argument"
          pred KeyModLeftShift = KeyModNone
          pred KeyModRightShift = KeyModLeftShift
          pred KeyModLeftCtrl = KeyModRightShift
          pred KeyModRightCtrl = KeyModLeftCtrl
          pred KeyModLeftAlt = KeyModRightCtrl
          pred KeyModRightAlt = KeyModLeftAlt
          pred KeyModLeftMeta = KeyModRightAlt
          pred KeyModRightMeta = KeyModLeftMeta
          pred KeyModNum = KeyModRightMeta
          pred KeyModCaps = KeyModNum
          pred KeyModMode = KeyModCaps
          pred KeyModCtrl = KeyModMode
          pred KeyModShift = KeyModCtrl
          pred KeyModAlt = KeyModShift
          pred KeyModMeta = KeyModAlt
          pred _ = error "Graphics.UI.SDL.Keysym.pred: bad argument"
          enumFromTo x y | x > y = []
                         | x == y = [y]
                         | True = x : enumFromTo (succ x) y

    data SDLKey = SDLK_UNKNOWN
                | SDLK_FIRST
                | SDLK_BACKSPACE
                | SDLK_TAB
                | SDLK_CLEAR
                | SDLK_RETURN
                | SDLK_PAUSE
                | SDLK_ESCAPE
                | SDLK_SPACE
                | SDLK_EXCLAIM
                | SDLK_QUOTEDBL
                | SDLK_HASH
                | SDLK_DOLLAR
                | SDLK_AMPERSAND
                | SDLK_QUOTE
                | SDLK_LEFTPAREN
                | SDLK_RIGHTPAREN
                | SDLK_ASTERISK
                | SDLK_PLUS
                | SDLK_COMMA
                | SDLK_MINUS
                | SDLK_PERIOD
                | SDLK_SLASH
                | SDLK_0
                | SDLK_1
                | SDLK_2
                | SDLK_3
                | SDLK_4
                | SDLK_5
                | SDLK_6
                | SDLK_7
                | SDLK_8
                | SDLK_9
                | SDLK_COLON
                | SDLK_SEMICOLON
                | SDLK_LESS
                | SDLK_EQUALS
                | SDLK_GREATER
                | SDLK_QUESTION
                | SDLK_AT
                | SDLK_LEFTBRACKET
                | SDLK_BACKSLASH
                | SDLK_RIGHTBRACKET
                | SDLK_CARET
                | SDLK_UNDERSCORE
                | SDLK_BACKQUOTE
                | SDLK_a
                | SDLK_b
                | SDLK_c
                | SDLK_d
                | SDLK_e
                | SDLK_f
                | SDLK_g
                | SDLK_h
                | SDLK_i
                | SDLK_j
                | SDLK_k
                | SDLK_l
                | SDLK_m
                | SDLK_n
                | SDLK_o
                | SDLK_p
                | SDLK_q
                | SDLK_r
                | SDLK_s
                | SDLK_t
                | SDLK_u
                | SDLK_v
                | SDLK_w
                | SDLK_x
                | SDLK_y
                | SDLK_z
                | SDLK_DELETE
                | SDLK_WORLD_0
                | SDLK_WORLD_1
                | SDLK_WORLD_2
                | SDLK_WORLD_3
                | SDLK_WORLD_4
                | SDLK_WORLD_5
                | SDLK_WORLD_6
                | SDLK_WORLD_7
                | SDLK_WORLD_8
                | SDLK_WORLD_9
                | SDLK_WORLD_10
                | SDLK_WORLD_11
                | SDLK_WORLD_12
                | SDLK_WORLD_13
                | SDLK_WORLD_14
                | SDLK_WORLD_15
                | SDLK_WORLD_16
                | SDLK_WORLD_17
                | SDLK_WORLD_18
                | SDLK_WORLD_19
                | SDLK_WORLD_20
                | SDLK_WORLD_21
                | SDLK_WORLD_22
                | SDLK_WORLD_23
                | SDLK_WORLD_24
                | SDLK_WORLD_25
                | SDLK_WORLD_26
                | SDLK_WORLD_27
                | SDLK_WORLD_28
                | SDLK_WORLD_29
                | SDLK_WORLD_30
                | SDLK_WORLD_31
                | SDLK_WORLD_32
                | SDLK_WORLD_33
                | SDLK_WORLD_34
                | SDLK_WORLD_35
                | SDLK_WORLD_36
                | SDLK_WORLD_37
                | SDLK_WORLD_38
                | SDLK_WORLD_39
                | SDLK_WORLD_40
                | SDLK_WORLD_41
                | SDLK_WORLD_42
                | SDLK_WORLD_43
                | SDLK_WORLD_44
                | SDLK_WORLD_45
                | SDLK_WORLD_46
                | SDLK_WORLD_47
                | SDLK_WORLD_48
                | SDLK_WORLD_49
                | SDLK_WORLD_50
                | SDLK_WORLD_51
                | SDLK_WORLD_52
                | SDLK_WORLD_53
                | SDLK_WORLD_54
                | SDLK_WORLD_55
                | SDLK_WORLD_56
                | SDLK_WORLD_57
                | SDLK_WORLD_58
                | SDLK_WORLD_59
                | SDLK_WORLD_60
                | SDLK_WORLD_61
                | SDLK_WORLD_62
                | SDLK_WORLD_63
                | SDLK_WORLD_64
                | SDLK_WORLD_65
                | SDLK_WORLD_66
                | SDLK_WORLD_67
                | SDLK_WORLD_68
                | SDLK_WORLD_69
                | SDLK_WORLD_70
                | SDLK_WORLD_71
                | SDLK_WORLD_72
                | SDLK_WORLD_73
                | SDLK_WORLD_74
                | SDLK_WORLD_75
                | SDLK_WORLD_76
                | SDLK_WORLD_77
                | SDLK_WORLD_78
                | SDLK_WORLD_79
                | SDLK_WORLD_80
                | SDLK_WORLD_81
                | SDLK_WORLD_82
                | SDLK_WORLD_83
                | SDLK_WORLD_84
                | SDLK_WORLD_85
                | SDLK_WORLD_86
                | SDLK_WORLD_87
                | SDLK_WORLD_88
                | SDLK_WORLD_89
                | SDLK_WORLD_90
                | SDLK_WORLD_91
                | SDLK_WORLD_92
                | SDLK_WORLD_93
                | SDLK_WORLD_94
                | SDLK_WORLD_95
                | SDLK_KP0
                | SDLK_KP1
                | SDLK_KP2
                | SDLK_KP3
                | SDLK_KP4
                | SDLK_KP5
                | SDLK_KP6
                | SDLK_KP7
                | SDLK_KP8
                | SDLK_KP9
                | SDLK_KP_PERIOD
                | SDLK_KP_DIVIDE
                | SDLK_KP_MULTIPLY
                | SDLK_KP_MINUS
                | SDLK_KP_PLUS
                | SDLK_KP_ENTER
                | SDLK_KP_EQUALS
                | SDLK_UP
                | SDLK_DOWN
                | SDLK_RIGHT
                | SDLK_LEFT
                | SDLK_INSERT
                | SDLK_HOME
                | SDLK_END
                | SDLK_PAGEUP
                | SDLK_PAGEDOWN
                | SDLK_F1
                | SDLK_F2
                | SDLK_F3
                | SDLK_F4
                | SDLK_F5
                | SDLK_F6
                | SDLK_F7
                | SDLK_F8
                | SDLK_F9
                | SDLK_F10
                | SDLK_F11
                | SDLK_F12
                | SDLK_F13
                | SDLK_F14
                | SDLK_F15
                | SDLK_NUMLOCK
                | SDLK_CAPSLOCK
                | SDLK_SCROLLOCK
                | SDLK_RSHIFT
                | SDLK_LSHIFT
                | SDLK_RCTRL
                | SDLK_LCTRL
                | SDLK_RALT
                | SDLK_LALT
                | SDLK_RMETA
                | SDLK_LMETA
                | SDLK_LSUPER
                | SDLK_RSUPER
                | SDLK_MODE
                | SDLK_COMPOSE
                | SDLK_HELP
                | SDLK_PRINT
                | SDLK_SYSREQ
                | SDLK_BREAK
                | SDLK_MENU
                | SDLK_POWER
                | SDLK_EURO
                | SDLK_UNDO
                | SDLK_LAST
        deriving (Eq, Ord, Show)
    instance Bounded SDLKey where
        minBound = SDLK_UNKNOWN
        maxBound = SDLK_LAST
    instance Enum SDLKey Word32 where
    {-# LINE 375 "Graphics/UI/SDL/Keysym.hsc" #-}
          fromEnum SDLK_UNKNOWN = 0
          fromEnum SDLK_FIRST = 0
          fromEnum SDLK_BACKSPACE = 8
          fromEnum SDLK_TAB = 9
          fromEnum SDLK_CLEAR = 12
          fromEnum SDLK_RETURN = 13
          fromEnum SDLK_PAUSE = 19
          fromEnum SDLK_ESCAPE = 27
          fromEnum SDLK_SPACE = 32
          fromEnum SDLK_EXCLAIM = 33
          fromEnum SDLK_QUOTEDBL = 34
          fromEnum SDLK_HASH = 35
          fromEnum SDLK_DOLLAR = 36
          fromEnum SDLK_AMPERSAND = 38
          fromEnum SDLK_QUOTE = 39
          fromEnum SDLK_LEFTPAREN = 40
          fromEnum SDLK_RIGHTPAREN = 41
          fromEnum SDLK_ASTERISK = 42
          fromEnum SDLK_PLUS = 43
          fromEnum SDLK_COMMA = 44
          fromEnum SDLK_MINUS = 45
          fromEnum SDLK_PERIOD = 46
          fromEnum SDLK_SLASH = 47
          fromEnum SDLK_0 = 48
          fromEnum SDLK_1 = 49
          fromEnum SDLK_2 = 50
          fromEnum SDLK_3 = 51
          fromEnum SDLK_4 = 52
          fromEnum SDLK_5 = 53
          fromEnum SDLK_6 = 54
          fromEnum SDLK_7 = 55
          fromEnum SDLK_8 = 56
          fromEnum SDLK_9 = 57
          fromEnum SDLK_COLON = 58
          fromEnum SDLK_SEMICOLON = 59
          fromEnum SDLK_LESS = 60
          fromEnum SDLK_EQUALS = 61
          fromEnum SDLK_GREATER = 62
          fromEnum SDLK_QUESTION = 63
          fromEnum SDLK_AT = 64
          fromEnum SDLK_LEFTBRACKET = 91
          fromEnum SDLK_BACKSLASH = 92
          fromEnum SDLK_RIGHTBRACKET = 93
          fromEnum SDLK_CARET = 94
          fromEnum SDLK_UNDERSCORE = 95
          fromEnum SDLK_BACKQUOTE = 96
          fromEnum SDLK_a = 97
          fromEnum SDLK_b = 98
          fromEnum SDLK_c = 99
          fromEnum SDLK_d = 100
          fromEnum SDLK_e = 101
          fromEnum SDLK_f = 102
          fromEnum SDLK_g = 103
          fromEnum SDLK_h = 104
          fromEnum SDLK_i = 105
          fromEnum SDLK_j = 106
          fromEnum SDLK_k = 107
          fromEnum SDLK_l = 108
          fromEnum SDLK_m = 109
          fromEnum SDLK_n = 110
          fromEnum SDLK_o = 111
          fromEnum SDLK_p = 112
          fromEnum SDLK_q = 113
          fromEnum SDLK_r = 114
          fromEnum SDLK_s = 115
          fromEnum SDLK_t = 116
          fromEnum SDLK_u = 117
          fromEnum SDLK_v = 118
          fromEnum SDLK_w = 119
          fromEnum SDLK_x = 120
          fromEnum SDLK_y = 121
          fromEnum SDLK_z = 122
          fromEnum SDLK_DELETE = 127
          fromEnum SDLK_WORLD_0 = 160
          fromEnum SDLK_WORLD_1 = 161
          fromEnum SDLK_WORLD_2 = 162
          fromEnum SDLK_WORLD_3 = 163
          fromEnum SDLK_WORLD_4 = 164
          fromEnum SDLK_WORLD_5 = 165
          fromEnum SDLK_WORLD_6 = 166
          fromEnum SDLK_WORLD_7 = 167
          fromEnum SDLK_WORLD_8 = 168
          fromEnum SDLK_WORLD_9 = 169
          fromEnum SDLK_WORLD_10 = 170
          fromEnum SDLK_WORLD_11 = 171
          fromEnum SDLK_WORLD_12 = 172
          fromEnum SDLK_WORLD_13 = 173
          fromEnum SDLK_WORLD_14 = 174
          fromEnum SDLK_WORLD_15 = 175
          fromEnum SDLK_WORLD_16 = 176
          fromEnum SDLK_WORLD_17 = 177
          fromEnum SDLK_WORLD_18 = 178
          fromEnum SDLK_WORLD_19 = 179
          fromEnum SDLK_WORLD_20 = 180
          fromEnum SDLK_WORLD_21 = 181
          fromEnum SDLK_WORLD_22 = 182
          fromEnum SDLK_WORLD_23 = 183
          fromEnum SDLK_WORLD_24 = 184
          fromEnum SDLK_WORLD_25 = 185
          fromEnum SDLK_WORLD_26 = 186
          fromEnum SDLK_WORLD_27 = 187
          fromEnum SDLK_WORLD_28 = 188
          fromEnum SDLK_WORLD_29 = 189
          fromEnum SDLK_WORLD_30 = 190
          fromEnum SDLK_WORLD_31 = 191
          fromEnum SDLK_WORLD_32 = 192
          fromEnum SDLK_WORLD_33 = 193
          fromEnum SDLK_WORLD_34 = 194
          fromEnum SDLK_WORLD_35 = 195
          fromEnum SDLK_WORLD_36 = 196
          fromEnum SDLK_WORLD_37 = 197
          fromEnum SDLK_WORLD_38 = 198
          fromEnum SDLK_WORLD_39 = 199
          fromEnum SDLK_WORLD_40 = 200
          fromEnum SDLK_WORLD_41 = 201
          fromEnum SDLK_WORLD_42 = 202
          fromEnum SDLK_WORLD_43 = 203
          fromEnum SDLK_WORLD_44 = 204
          fromEnum SDLK_WORLD_45 = 205
          fromEnum SDLK_WORLD_46 = 206
          fromEnum SDLK_WORLD_47 = 207
          fromEnum SDLK_WORLD_48 = 208
          fromEnum SDLK_WORLD_49 = 209
          fromEnum SDLK_WORLD_50 = 210
          fromEnum SDLK_WORLD_51 = 211
          fromEnum SDLK_WORLD_52 = 212
          fromEnum SDLK_WORLD_53 = 213
          fromEnum SDLK_WORLD_54 = 214
          fromEnum SDLK_WORLD_55 = 215
          fromEnum SDLK_WORLD_56 = 216
          fromEnum SDLK_WORLD_57 = 217
          fromEnum SDLK_WORLD_58 = 218
          fromEnum SDLK_WORLD_59 = 219
          fromEnum SDLK_WORLD_60 = 220
          fromEnum SDLK_WORLD_61 = 221
          fromEnum SDLK_WORLD_62 = 222
          fromEnum SDLK_WORLD_63 = 223
          fromEnum SDLK_WORLD_64 = 224
          fromEnum SDLK_WORLD_65 = 225
          fromEnum SDLK_WORLD_66 = 226
          fromEnum SDLK_WORLD_67 = 227
          fromEnum SDLK_WORLD_68 = 228
          fromEnum SDLK_WORLD_69 = 229
          fromEnum SDLK_WORLD_70 = 230
          fromEnum SDLK_WORLD_71 = 231
          fromEnum SDLK_WORLD_72 = 232
          fromEnum SDLK_WORLD_73 = 233
          fromEnum SDLK_WORLD_74 = 234
          fromEnum SDLK_WORLD_75 = 235
          fromEnum SDLK_WORLD_76 = 236
          fromEnum SDLK_WORLD_77 = 237
          fromEnum SDLK_WORLD_78 = 238
          fromEnum SDLK_WORLD_79 = 239
          fromEnum SDLK_WORLD_80 = 240
          fromEnum SDLK_WORLD_81 = 241
          fromEnum SDLK_WORLD_82 = 242
          fromEnum SDLK_WORLD_83 = 243
          fromEnum SDLK_WORLD_84 = 244
          fromEnum SDLK_WORLD_85 = 245
          fromEnum SDLK_WORLD_86 = 246
          fromEnum SDLK_WORLD_87 = 247
          fromEnum SDLK_WORLD_88 = 248
          fromEnum SDLK_WORLD_89 = 249
          fromEnum SDLK_WORLD_90 = 250
          fromEnum SDLK_WORLD_91 = 251
          fromEnum SDLK_WORLD_92 = 252
          fromEnum SDLK_WORLD_93 = 253
          fromEnum SDLK_WORLD_94 = 254
          fromEnum SDLK_WORLD_95 = 255
          fromEnum SDLK_KP0 = 256
          fromEnum SDLK_KP1 = 257
          fromEnum SDLK_KP2 = 258
          fromEnum SDLK_KP3 = 259
          fromEnum SDLK_KP4 = 260
          fromEnum SDLK_KP5 = 261
          fromEnum SDLK_KP6 = 262
          fromEnum SDLK_KP7 = 263
          fromEnum SDLK_KP8 = 264
          fromEnum SDLK_KP9 = 265
          fromEnum SDLK_KP_PERIOD = 266
          fromEnum SDLK_KP_DIVIDE = 267
          fromEnum SDLK_KP_MULTIPLY = 268
          fromEnum SDLK_KP_MINUS = 269
          fromEnum SDLK_KP_PLUS = 270
          fromEnum SDLK_KP_ENTER = 271
          fromEnum SDLK_KP_EQUALS = 272
          fromEnum SDLK_UP = 273
          fromEnum SDLK_DOWN = 274
          fromEnum SDLK_RIGHT = 275
          fromEnum SDLK_LEFT = 276
          fromEnum SDLK_INSERT = 277
          fromEnum SDLK_HOME = 278
          fromEnum SDLK_END = 279
          fromEnum SDLK_PAGEUP = 280
          fromEnum SDLK_PAGEDOWN = 281
          fromEnum SDLK_F1 = 282
          fromEnum SDLK_F2 = 283
          fromEnum SDLK_F3 = 284
          fromEnum SDLK_F4 = 285
          fromEnum SDLK_F5 = 286
          fromEnum SDLK_F6 = 287
          fromEnum SDLK_F7 = 288
          fromEnum SDLK_F8 = 289
          fromEnum SDLK_F9 = 290
          fromEnum SDLK_F10 = 291
          fromEnum SDLK_F11 = 292
          fromEnum SDLK_F12 = 293
          fromEnum SDLK_F13 = 294
          fromEnum SDLK_F14 = 295
          fromEnum SDLK_F15 = 296
          fromEnum SDLK_NUMLOCK = 300
          fromEnum SDLK_CAPSLOCK = 301
          fromEnum SDLK_SCROLLOCK = 302
          fromEnum SDLK_RSHIFT = 303
          fromEnum SDLK_LSHIFT = 304
          fromEnum SDLK_RCTRL = 305
          fromEnum SDLK_LCTRL = 306
          fromEnum SDLK_RALT = 307
          fromEnum SDLK_LALT = 308
          fromEnum SDLK_RMETA = 309
          fromEnum SDLK_LMETA = 310
          fromEnum SDLK_LSUPER = 311
          fromEnum SDLK_RSUPER = 312
          fromEnum SDLK_MODE = 313
          fromEnum SDLK_COMPOSE = 314
          fromEnum SDLK_HELP = 315
          fromEnum SDLK_PRINT = 316
          fromEnum SDLK_SYSREQ = 317
          fromEnum SDLK_BREAK = 318
          fromEnum SDLK_MENU = 319
          fromEnum SDLK_POWER = 320
          fromEnum SDLK_EURO = 321
          fromEnum SDLK_UNDO = 322
          fromEnum SDLK_LAST = 323
          toEnum 0 = SDLK_UNKNOWN
          toEnum 8 = SDLK_BACKSPACE
          toEnum 9 = SDLK_TAB
          toEnum 12 = SDLK_CLEAR
          toEnum 13 = SDLK_RETURN
          toEnum 19 = SDLK_PAUSE
          toEnum 27 = SDLK_ESCAPE
          toEnum 32 = SDLK_SPACE
          toEnum 33 = SDLK_EXCLAIM
          toEnum 34 = SDLK_QUOTEDBL
          toEnum 35 = SDLK_HASH
          toEnum 36 = SDLK_DOLLAR
          toEnum 38 = SDLK_AMPERSAND
          toEnum 39 = SDLK_QUOTE
          toEnum 40 = SDLK_LEFTPAREN
          toEnum 41 = SDLK_RIGHTPAREN
          toEnum 42 = SDLK_ASTERISK
          toEnum 43 = SDLK_PLUS
          toEnum 44 = SDLK_COMMA
          toEnum 45 = SDLK_MINUS
          toEnum 46 = SDLK_PERIOD
          toEnum 47 = SDLK_SLASH
          toEnum 48 = SDLK_0
          toEnum 49 = SDLK_1
          toEnum 50 = SDLK_2
          toEnum 51 = SDLK_3
          toEnum 52 = SDLK_4
          toEnum 53 = SDLK_5
          toEnum 54 = SDLK_6
          toEnum 55 = SDLK_7
          toEnum 56 = SDLK_8
          toEnum 57 = SDLK_9
          toEnum 58 = SDLK_COLON
          toEnum 59 = SDLK_SEMICOLON
          toEnum 60 = SDLK_LESS
          toEnum 61 = SDLK_EQUALS
          toEnum 62 = SDLK_GREATER
          toEnum 63 = SDLK_QUESTION
          toEnum 64 = SDLK_AT
          toEnum 91 = SDLK_LEFTBRACKET
          toEnum 92 = SDLK_BACKSLASH
          toEnum 93 = SDLK_RIGHTBRACKET
          toEnum 94 = SDLK_CARET
          toEnum 95 = SDLK_UNDERSCORE
          toEnum 96 = SDLK_BACKQUOTE
          toEnum 97 = SDLK_a
          toEnum 98 = SDLK_b
          toEnum 99 = SDLK_c
          toEnum 100 = SDLK_d
          toEnum 101 = SDLK_e
          toEnum 102 = SDLK_f
          toEnum 103 = SDLK_g
          toEnum 104 = SDLK_h
          toEnum 105 = SDLK_i
          toEnum 106 = SDLK_j
          toEnum 107 = SDLK_k
          toEnum 108 = SDLK_l
          toEnum 109 = SDLK_m
          toEnum 110 = SDLK_n
          toEnum 111 = SDLK_o
          toEnum 112 = SDLK_p
          toEnum 113 = SDLK_q
          toEnum 114 = SDLK_r
          toEnum 115 = SDLK_s
          toEnum 116 = SDLK_t
          toEnum 117 = SDLK_u
          toEnum 118 = SDLK_v
          toEnum 119 = SDLK_w
          toEnum 120 = SDLK_x
          toEnum 121 = SDLK_y
          toEnum 122 = SDLK_z
          toEnum 127 = SDLK_DELETE
          toEnum 160 = SDLK_WORLD_0
          toEnum 161 = SDLK_WORLD_1
          toEnum 162 = SDLK_WORLD_2
          toEnum 163 = SDLK_WORLD_3
          toEnum 164 = SDLK_WORLD_4
          toEnum 165 = SDLK_WORLD_5
          toEnum 166 = SDLK_WORLD_6
          toEnum 167 = SDLK_WORLD_7
          toEnum 168 = SDLK_WORLD_8
          toEnum 169 = SDLK_WORLD_9
          toEnum 170 = SDLK_WORLD_10
          toEnum 171 = SDLK_WORLD_11
          toEnum 172 = SDLK_WORLD_12
          toEnum 173 = SDLK_WORLD_13
          toEnum 174 = SDLK_WORLD_14
          toEnum 175 = SDLK_WORLD_15
          toEnum 176 = SDLK_WORLD_16
          toEnum 177 = SDLK_WORLD_17
          toEnum 178 = SDLK_WORLD_18
          toEnum 179 = SDLK_WORLD_19
          toEnum 180 = SDLK_WORLD_20
          toEnum 181 = SDLK_WORLD_21
          toEnum 182 = SDLK_WORLD_22
          toEnum 183 = SDLK_WORLD_23
          toEnum 184 = SDLK_WORLD_24
          toEnum 185 = SDLK_WORLD_25
          toEnum 186 = SDLK_WORLD_26
          toEnum 187 = SDLK_WORLD_27
          toEnum 188 = SDLK_WORLD_28
          toEnum 189 = SDLK_WORLD_29
          toEnum 190 = SDLK_WORLD_30
          toEnum 191 = SDLK_WORLD_31
          toEnum 192 = SDLK_WORLD_32
          toEnum 193 = SDLK_WORLD_33
          toEnum 194 = SDLK_WORLD_34
          toEnum 195 = SDLK_WORLD_35
          toEnum 196 = SDLK_WORLD_36
          toEnum 197 = SDLK_WORLD_37
          toEnum 198 = SDLK_WORLD_38
          toEnum 199 = SDLK_WORLD_39
          toEnum 200 = SDLK_WORLD_40
          toEnum 201 = SDLK_WORLD_41
          toEnum 202 = SDLK_WORLD_42
          toEnum 203 = SDLK_WORLD_43
          toEnum 204 = SDLK_WORLD_44
          toEnum 205 = SDLK_WORLD_45
          toEnum 206 = SDLK_WORLD_46
          toEnum 207 = SDLK_WORLD_47
          toEnum 208 = SDLK_WORLD_48
          toEnum 209 = SDLK_WORLD_49
          toEnum 210 = SDLK_WORLD_50
          toEnum 211 = SDLK_WORLD_51
          toEnum 212 = SDLK_WORLD_52
          toEnum 213 = SDLK_WORLD_53
          toEnum 214 = SDLK_WORLD_54
          toEnum 215 = SDLK_WORLD_55
          toEnum 216 = SDLK_WORLD_56
          toEnum 217 = SDLK_WORLD_57
          toEnum 218 = SDLK_WORLD_58
          toEnum 219 = SDLK_WORLD_59
          toEnum 220 = SDLK_WORLD_60
          toEnum 221 = SDLK_WORLD_61
          toEnum 222 = SDLK_WORLD_62
          toEnum 223 = SDLK_WORLD_63
          toEnum 224 = SDLK_WORLD_64
          toEnum 225 = SDLK_WORLD_65
          toEnum 226 = SDLK_WORLD_66
          toEnum 227 = SDLK_WORLD_67
          toEnum 228 = SDLK_WORLD_68
          toEnum 229 = SDLK_WORLD_69
          toEnum 230 = SDLK_WORLD_70
          toEnum 231 = SDLK_WORLD_71
          toEnum 232 = SDLK_WORLD_72
          toEnum 233 = SDLK_WORLD_73
          toEnum 234 = SDLK_WORLD_74
          toEnum 235 = SDLK_WORLD_75
          toEnum 236 = SDLK_WORLD_76
          toEnum 237 = SDLK_WORLD_77
          toEnum 238 = SDLK_WORLD_78
          toEnum 239 = SDLK_WORLD_79
          toEnum 240 = SDLK_WORLD_80
          toEnum 241 = SDLK_WORLD_81
          toEnum 242 = SDLK_WORLD_82
          toEnum 243 = SDLK_WORLD_83
          toEnum 244 = SDLK_WORLD_84
          toEnum 245 = SDLK_WORLD_85
          toEnum 246 = SDLK_WORLD_86
          toEnum 247 = SDLK_WORLD_87
          toEnum 248 = SDLK_WORLD_88
          toEnum 249 = SDLK_WORLD_89
          toEnum 250 = SDLK_WORLD_90
          toEnum 251 = SDLK_WORLD_91
          toEnum 252 = SDLK_WORLD_92
          toEnum 253 = SDLK_WORLD_93
          toEnum 254 = SDLK_WORLD_94
          toEnum 255 = SDLK_WORLD_95
          toEnum 256 = SDLK_KP0
          toEnum 257 = SDLK_KP1
          toEnum 258 = SDLK_KP2
          toEnum 259 = SDLK_KP3
          toEnum 260 = SDLK_KP4
          toEnum 261 = SDLK_KP5
          toEnum 262 = SDLK_KP6
          toEnum 263 = SDLK_KP7
          toEnum 264 = SDLK_KP8
          toEnum 265 = SDLK_KP9
          toEnum 266 = SDLK_KP_PERIOD
          toEnum 267 = SDLK_KP_DIVIDE
          toEnum 268 = SDLK_KP_MULTIPLY
          toEnum 269 = SDLK_KP_MINUS
          toEnum 270 = SDLK_KP_PLUS
          toEnum 271 = SDLK_KP_ENTER
          toEnum 272 = SDLK_KP_EQUALS
          toEnum 273 = SDLK_UP
          toEnum 274 = SDLK_DOWN
          toEnum 275 = SDLK_RIGHT
          toEnum 276 = SDLK_LEFT
          toEnum 277 = SDLK_INSERT
          toEnum 278 = SDLK_HOME
          toEnum 279 = SDLK_END
          toEnum 280 = SDLK_PAGEUP
          toEnum 281 = SDLK_PAGEDOWN
          toEnum 282 = SDLK_F1
          toEnum 283 = SDLK_F2
          toEnum 284 = SDLK_F3
          toEnum 285 = SDLK_F4
          toEnum 286 = SDLK_F5
          toEnum 287 = SDLK_F6
          toEnum 288 = SDLK_F7
          toEnum 289 = SDLK_F8
          toEnum 290 = SDLK_F9
          toEnum 291 = SDLK_F10
          toEnum 292 = SDLK_F11
          toEnum 293 = SDLK_F12
          toEnum 294 = SDLK_F13
          toEnum 295 = SDLK_F14
          toEnum 296 = SDLK_F15
          toEnum 300 = SDLK_NUMLOCK
          toEnum 301 = SDLK_CAPSLOCK
          toEnum 302 = SDLK_SCROLLOCK
          toEnum 303 = SDLK_RSHIFT
          toEnum 304 = SDLK_LSHIFT
          toEnum 305 = SDLK_RCTRL
          toEnum 306 = SDLK_LCTRL
          toEnum 307 = SDLK_RALT
          toEnum 308 = SDLK_LALT
          toEnum 309 = SDLK_RMETA
          toEnum 310 = SDLK_LMETA
          toEnum 311 = SDLK_LSUPER
          toEnum 312 = SDLK_RSUPER
          toEnum 313 = SDLK_MODE
          toEnum 314 = SDLK_COMPOSE
          toEnum 315 = SDLK_HELP
          toEnum 316 = SDLK_PRINT
          toEnum 317 = SDLK_SYSREQ
          toEnum 318 = SDLK_BREAK
          toEnum 319 = SDLK_MENU
          toEnum 320 = SDLK_POWER
          toEnum 321 = SDLK_EURO
          toEnum 322 = SDLK_UNDO
          toEnum 323 = SDLK_LAST
          toEnum _ = error "Graphics.UI.SDL.Keysym.toEnum: bad argument"
          succ SDLK_UNKNOWN = SDLK_FIRST
          succ SDLK_FIRST = SDLK_BACKSPACE
          succ SDLK_BACKSPACE = SDLK_TAB
          succ SDLK_TAB = SDLK_CLEAR
          succ SDLK_CLEAR = SDLK_RETURN
          succ SDLK_RETURN = SDLK_PAUSE
          succ SDLK_PAUSE = SDLK_ESCAPE
          succ SDLK_ESCAPE = SDLK_SPACE
          succ SDLK_SPACE = SDLK_EXCLAIM
          succ SDLK_EXCLAIM = SDLK_QUOTEDBL
          succ SDLK_QUOTEDBL = SDLK_HASH
          succ SDLK_HASH = SDLK_DOLLAR
          succ SDLK_DOLLAR = SDLK_AMPERSAND
          succ SDLK_AMPERSAND = SDLK_QUOTE
          succ SDLK_QUOTE = SDLK_LEFTPAREN
          succ SDLK_LEFTPAREN = SDLK_RIGHTPAREN
          succ SDLK_RIGHTPAREN = SDLK_ASTERISK
          succ SDLK_ASTERISK = SDLK_PLUS
          succ SDLK_PLUS = SDLK_COMMA
          succ SDLK_COMMA = SDLK_MINUS
          succ SDLK_MINUS = SDLK_PERIOD
          succ SDLK_PERIOD = SDLK_SLASH
          succ SDLK_SLASH = SDLK_0
          succ SDLK_0 = SDLK_1
          succ SDLK_1 = SDLK_2
          succ SDLK_2 = SDLK_3
          succ SDLK_3 = SDLK_4
          succ SDLK_4 = SDLK_5
          succ SDLK_5 = SDLK_6
          succ SDLK_6 = SDLK_7
          succ SDLK_7 = SDLK_8
          succ SDLK_8 = SDLK_9
          succ SDLK_9 = SDLK_COLON
          succ SDLK_COLON = SDLK_SEMICOLON
          succ SDLK_SEMICOLON = SDLK_LESS
          succ SDLK_LESS = SDLK_EQUALS
          succ SDLK_EQUALS = SDLK_GREATER
          succ SDLK_GREATER = SDLK_QUESTION
          succ SDLK_QUESTION = SDLK_AT
          succ SDLK_AT = SDLK_LEFTBRACKET
          succ SDLK_LEFTBRACKET = SDLK_BACKSLASH
          succ SDLK_BACKSLASH = SDLK_RIGHTBRACKET
          succ SDLK_RIGHTBRACKET = SDLK_CARET
          succ SDLK_CARET = SDLK_UNDERSCORE
          succ SDLK_UNDERSCORE = SDLK_BACKQUOTE
          succ SDLK_BACKQUOTE = SDLK_a
          succ SDLK_a = SDLK_b
          succ SDLK_b = SDLK_c
          succ SDLK_c = SDLK_d
          succ SDLK_d = SDLK_e
          succ SDLK_e = SDLK_f
          succ SDLK_f = SDLK_g
          succ SDLK_g = SDLK_h
          succ SDLK_h = SDLK_i
          succ SDLK_i = SDLK_j
          succ SDLK_j = SDLK_k
          succ SDLK_k = SDLK_l
          succ SDLK_l = SDLK_m
          succ SDLK_m = SDLK_n
          succ SDLK_n = SDLK_o
          succ SDLK_o = SDLK_p
          succ SDLK_p = SDLK_q
          succ SDLK_q = SDLK_r
          succ SDLK_r = SDLK_s
          succ SDLK_s = SDLK_t
          succ SDLK_t = SDLK_u
          succ SDLK_u = SDLK_v
          succ SDLK_v = SDLK_w
          succ SDLK_w = SDLK_x
          succ SDLK_x = SDLK_y
          succ SDLK_y = SDLK_z
          succ SDLK_z = SDLK_DELETE
          succ SDLK_DELETE = SDLK_WORLD_0
          succ SDLK_WORLD_0 = SDLK_WORLD_1
          succ SDLK_WORLD_1 = SDLK_WORLD_2
          succ SDLK_WORLD_2 = SDLK_WORLD_3
          succ SDLK_WORLD_3 = SDLK_WORLD_4
          succ SDLK_WORLD_4 = SDLK_WORLD_5
          succ SDLK_WORLD_5 = SDLK_WORLD_6
          succ SDLK_WORLD_6 = SDLK_WORLD_7
          succ SDLK_WORLD_7 = SDLK_WORLD_8
          succ SDLK_WORLD_8 = SDLK_WORLD_9
          succ SDLK_WORLD_9 = SDLK_WORLD_10
          succ SDLK_WORLD_10 = SDLK_WORLD_11
          succ SDLK_WORLD_11 = SDLK_WORLD_12
          succ SDLK_WORLD_12 = SDLK_WORLD_13
          succ SDLK_WORLD_13 = SDLK_WORLD_14
          succ SDLK_WORLD_14 = SDLK_WORLD_15
          succ SDLK_WORLD_15 = SDLK_WORLD_16
          succ SDLK_WORLD_16 = SDLK_WORLD_17
          succ SDLK_WORLD_17 = SDLK_WORLD_18
          succ SDLK_WORLD_18 = SDLK_WORLD_19
          succ SDLK_WORLD_19 = SDLK_WORLD_20
          succ SDLK_WORLD_20 = SDLK_WORLD_21
          succ SDLK_WORLD_21 = SDLK_WORLD_22
          succ SDLK_WORLD_22 = SDLK_WORLD_23
          succ SDLK_WORLD_23 = SDLK_WORLD_24
          succ SDLK_WORLD_24 = SDLK_WORLD_25
          succ SDLK_WORLD_25 = SDLK_WORLD_26
          succ SDLK_WORLD_26 = SDLK_WORLD_27
          succ SDLK_WORLD_27 = SDLK_WORLD_28
          succ SDLK_WORLD_28 = SDLK_WORLD_29
          succ SDLK_WORLD_29 = SDLK_WORLD_30
          succ SDLK_WORLD_30 = SDLK_WORLD_31
          succ SDLK_WORLD_31 = SDLK_WORLD_32
          succ SDLK_WORLD_32 = SDLK_WORLD_33
          succ SDLK_WORLD_33 = SDLK_WORLD_34
          succ SDLK_WORLD_34 = SDLK_WORLD_35
          succ SDLK_WORLD_35 = SDLK_WORLD_36
          succ SDLK_WORLD_36 = SDLK_WORLD_37
          succ SDLK_WORLD_37 = SDLK_WORLD_38
          succ SDLK_WORLD_38 = SDLK_WORLD_39
          succ SDLK_WORLD_39 = SDLK_WORLD_40
          succ SDLK_WORLD_40 = SDLK_WORLD_41
          succ SDLK_WORLD_41 = SDLK_WORLD_42
          succ SDLK_WORLD_42 = SDLK_WORLD_43
          succ SDLK_WORLD_43 = SDLK_WORLD_44
          succ SDLK_WORLD_44 = SDLK_WORLD_45
          succ SDLK_WORLD_45 = SDLK_WORLD_46
          succ SDLK_WORLD_46 = SDLK_WORLD_47
          succ SDLK_WORLD_47 = SDLK_WORLD_48
          succ SDLK_WORLD_48 = SDLK_WORLD_49
          succ SDLK_WORLD_49 = SDLK_WORLD_50
          succ SDLK_WORLD_50 = SDLK_WORLD_51
          succ SDLK_WORLD_51 = SDLK_WORLD_52
          succ SDLK_WORLD_52 = SDLK_WORLD_53
          succ SDLK_WORLD_53 = SDLK_WORLD_54
          succ SDLK_WORLD_54 = SDLK_WORLD_55
          succ SDLK_WORLD_55 = SDLK_WORLD_56
          succ SDLK_WORLD_56 = SDLK_WORLD_57
          succ SDLK_WORLD_57 = SDLK_WORLD_58
          succ SDLK_WORLD_58 = SDLK_WORLD_59
          succ SDLK_WORLD_59 = SDLK_WORLD_60
          succ SDLK_WORLD_60 = SDLK_WORLD_61
          succ SDLK_WORLD_61 = SDLK_WORLD_62
          succ SDLK_WORLD_62 = SDLK_WORLD_63
          succ SDLK_WORLD_63 = SDLK_WORLD_64
          succ SDLK_WORLD_64 = SDLK_WORLD_65
          succ SDLK_WORLD_65 = SDLK_WORLD_66
          succ SDLK_WORLD_66 = SDLK_WORLD_67
          succ SDLK_WORLD_67 = SDLK_WORLD_68
          succ SDLK_WORLD_68 = SDLK_WORLD_69
          succ SDLK_WORLD_69 = SDLK_WORLD_70
          succ SDLK_WORLD_70 = SDLK_WORLD_71
          succ SDLK_WORLD_71 = SDLK_WORLD_72
          succ SDLK_WORLD_72 = SDLK_WORLD_73
          succ SDLK_WORLD_73 = SDLK_WORLD_74
          succ SDLK_WORLD_74 = SDLK_WORLD_75
          succ SDLK_WORLD_75 = SDLK_WORLD_76
          succ SDLK_WORLD_76 = SDLK_WORLD_77
          succ SDLK_WORLD_77 = SDLK_WORLD_78
          succ SDLK_WORLD_78 = SDLK_WORLD_79
          succ SDLK_WORLD_79 = SDLK_WORLD_80
          succ SDLK_WORLD_80 = SDLK_WORLD_81
          succ SDLK_WORLD_81 = SDLK_WORLD_82
          succ SDLK_WORLD_82 = SDLK_WORLD_83
          succ SDLK_WORLD_83 = SDLK_WORLD_84
          succ SDLK_WORLD_84 = SDLK_WORLD_85
          succ SDLK_WORLD_85 = SDLK_WORLD_86
          succ SDLK_WORLD_86 = SDLK_WORLD_87
          succ SDLK_WORLD_87 = SDLK_WORLD_88
          succ SDLK_WORLD_88 = SDLK_WORLD_89
          succ SDLK_WORLD_89 = SDLK_WORLD_90
          succ SDLK_WORLD_90 = SDLK_WORLD_91
          succ SDLK_WORLD_91 = SDLK_WORLD_92
          succ SDLK_WORLD_92 = SDLK_WORLD_93
          succ SDLK_WORLD_93 = SDLK_WORLD_94
          succ SDLK_WORLD_94 = SDLK_WORLD_95
          succ SDLK_WORLD_95 = SDLK_KP0
          succ SDLK_KP0 = SDLK_KP1
          succ SDLK_KP1 = SDLK_KP2
          succ SDLK_KP2 = SDLK_KP3
          succ SDLK_KP3 = SDLK_KP4
          succ SDLK_KP4 = SDLK_KP5
          succ SDLK_KP5 = SDLK_KP6
          succ SDLK_KP6 = SDLK_KP7
          succ SDLK_KP7 = SDLK_KP8
          succ SDLK_KP8 = SDLK_KP9
          succ SDLK_KP9 = SDLK_KP_PERIOD
          succ SDLK_KP_PERIOD = SDLK_KP_DIVIDE
          succ SDLK_KP_DIVIDE = SDLK_KP_MULTIPLY
          succ SDLK_KP_MULTIPLY = SDLK_KP_MINUS
          succ SDLK_KP_MINUS = SDLK_KP_PLUS
          succ SDLK_KP_PLUS = SDLK_KP_ENTER
          succ SDLK_KP_ENTER = SDLK_KP_EQUALS
          succ SDLK_KP_EQUALS = SDLK_UP
          succ SDLK_UP = SDLK_DOWN
          succ SDLK_DOWN = SDLK_RIGHT
          succ SDLK_RIGHT = SDLK_LEFT
          succ SDLK_LEFT = SDLK_INSERT
          succ SDLK_INSERT = SDLK_HOME
          succ SDLK_HOME = SDLK_END
          succ SDLK_END = SDLK_PAGEUP
          succ SDLK_PAGEUP = SDLK_PAGEDOWN
          succ SDLK_PAGEDOWN = SDLK_F1
          succ SDLK_F1 = SDLK_F2
          succ SDLK_F2 = SDLK_F3
          succ SDLK_F3 = SDLK_F4
          succ SDLK_F4 = SDLK_F5
          succ SDLK_F5 = SDLK_F6
          succ SDLK_F6 = SDLK_F7
          succ SDLK_F7 = SDLK_F8
          succ SDLK_F8 = SDLK_F9
          succ SDLK_F9 = SDLK_F10
          succ SDLK_F10 = SDLK_F11
          succ SDLK_F11 = SDLK_F12
          succ SDLK_F12 = SDLK_F13
          succ SDLK_F13 = SDLK_F14
          succ SDLK_F14 = SDLK_F15
          succ SDLK_F15 = SDLK_NUMLOCK
          succ SDLK_NUMLOCK = SDLK_CAPSLOCK
          succ SDLK_CAPSLOCK = SDLK_SCROLLOCK
          succ SDLK_SCROLLOCK = SDLK_RSHIFT
          succ SDLK_RSHIFT = SDLK_LSHIFT
          succ SDLK_LSHIFT = SDLK_RCTRL
          succ SDLK_RCTRL = SDLK_LCTRL
          succ SDLK_LCTRL = SDLK_RALT
          succ SDLK_RALT = SDLK_LALT
          succ SDLK_LALT = SDLK_RMETA
          succ SDLK_RMETA = SDLK_LMETA
          succ SDLK_LMETA = SDLK_LSUPER
          succ SDLK_LSUPER = SDLK_RSUPER
          succ SDLK_RSUPER = SDLK_MODE
          succ SDLK_MODE = SDLK_COMPOSE
          succ SDLK_COMPOSE = SDLK_HELP
          succ SDLK_HELP = SDLK_PRINT
          succ SDLK_PRINT = SDLK_SYSREQ
          succ SDLK_SYSREQ = SDLK_BREAK
          succ SDLK_BREAK = SDLK_MENU
          succ SDLK_MENU = SDLK_POWER
          succ SDLK_POWER = SDLK_EURO
          succ SDLK_EURO = SDLK_UNDO
          succ SDLK_UNDO = SDLK_LAST
          succ _ = error "Graphics.UI.SDL.Keysym.succ: bad argument"
          pred SDLK_FIRST = SDLK_UNKNOWN
          pred SDLK_BACKSPACE = SDLK_FIRST
          pred SDLK_TAB = SDLK_BACKSPACE
          pred SDLK_CLEAR = SDLK_TAB
          pred SDLK_RETURN = SDLK_CLEAR
          pred SDLK_PAUSE = SDLK_RETURN
          pred SDLK_ESCAPE = SDLK_PAUSE
          pred SDLK_SPACE = SDLK_ESCAPE
          pred SDLK_EXCLAIM = SDLK_SPACE
          pred SDLK_QUOTEDBL = SDLK_EXCLAIM
          pred SDLK_HASH = SDLK_QUOTEDBL
          pred SDLK_DOLLAR = SDLK_HASH
          pred SDLK_AMPERSAND = SDLK_DOLLAR
          pred SDLK_QUOTE = SDLK_AMPERSAND
          pred SDLK_LEFTPAREN = SDLK_QUOTE
          pred SDLK_RIGHTPAREN = SDLK_LEFTPAREN
          pred SDLK_ASTERISK = SDLK_RIGHTPAREN
          pred SDLK_PLUS = SDLK_ASTERISK
          pred SDLK_COMMA = SDLK_PLUS
          pred SDLK_MINUS = SDLK_COMMA
          pred SDLK_PERIOD = SDLK_MINUS
          pred SDLK_SLASH = SDLK_PERIOD
          pred SDLK_0 = SDLK_SLASH
          pred SDLK_1 = SDLK_0
          pred SDLK_2 = SDLK_1
          pred SDLK_3 = SDLK_2
          pred SDLK_4 = SDLK_3
          pred SDLK_5 = SDLK_4
          pred SDLK_6 = SDLK_5
          pred SDLK_7 = SDLK_6
          pred SDLK_8 = SDLK_7
          pred SDLK_9 = SDLK_8
          pred SDLK_COLON = SDLK_9
          pred SDLK_SEMICOLON = SDLK_COLON
          pred SDLK_LESS = SDLK_SEMICOLON
          pred SDLK_EQUALS = SDLK_LESS
          pred SDLK_GREATER = SDLK_EQUALS
          pred SDLK_QUESTION = SDLK_GREATER
          pred SDLK_AT = SDLK_QUESTION
          pred SDLK_LEFTBRACKET = SDLK_AT
          pred SDLK_BACKSLASH = SDLK_LEFTBRACKET
          pred SDLK_RIGHTBRACKET = SDLK_BACKSLASH
          pred SDLK_CARET = SDLK_RIGHTBRACKET
          pred SDLK_UNDERSCORE = SDLK_CARET
          pred SDLK_BACKQUOTE = SDLK_UNDERSCORE
          pred SDLK_a = SDLK_BACKQUOTE
          pred SDLK_b = SDLK_a
          pred SDLK_c = SDLK_b
          pred SDLK_d = SDLK_c
          pred SDLK_e = SDLK_d
          pred SDLK_f = SDLK_e
          pred SDLK_g = SDLK_f
          pred SDLK_h = SDLK_g
          pred SDLK_i = SDLK_h
          pred SDLK_j = SDLK_i
          pred SDLK_k = SDLK_j
          pred SDLK_l = SDLK_k
          pred SDLK_m = SDLK_l
          pred SDLK_n = SDLK_m
          pred SDLK_o = SDLK_n
          pred SDLK_p = SDLK_o
          pred SDLK_q = SDLK_p
          pred SDLK_r = SDLK_q
          pred SDLK_s = SDLK_r
          pred SDLK_t = SDLK_s
          pred SDLK_u = SDLK_t
          pred SDLK_v = SDLK_u
          pred SDLK_w = SDLK_v
          pred SDLK_x = SDLK_w
          pred SDLK_y = SDLK_x
          pred SDLK_z = SDLK_y
          pred SDLK_DELETE = SDLK_z
          pred SDLK_WORLD_0 = SDLK_DELETE
          pred SDLK_WORLD_1 = SDLK_WORLD_0
          pred SDLK_WORLD_2 = SDLK_WORLD_1
          pred SDLK_WORLD_3 = SDLK_WORLD_2
          pred SDLK_WORLD_4 = SDLK_WORLD_3
          pred SDLK_WORLD_5 = SDLK_WORLD_4
          pred SDLK_WORLD_6 = SDLK_WORLD_5
          pred SDLK_WORLD_7 = SDLK_WORLD_6
          pred SDLK_WORLD_8 = SDLK_WORLD_7
          pred SDLK_WORLD_9 = SDLK_WORLD_8
          pred SDLK_WORLD_10 = SDLK_WORLD_9
          pred SDLK_WORLD_11 = SDLK_WORLD_10
          pred SDLK_WORLD_12 = SDLK_WORLD_11
          pred SDLK_WORLD_13 = SDLK_WORLD_12
          pred SDLK_WORLD_14 = SDLK_WORLD_13
          pred SDLK_WORLD_15 = SDLK_WORLD_14
          pred SDLK_WORLD_16 = SDLK_WORLD_15
          pred SDLK_WORLD_17 = SDLK_WORLD_16
          pred SDLK_WORLD_18 = SDLK_WORLD_17
          pred SDLK_WORLD_19 = SDLK_WORLD_18
          pred SDLK_WORLD_20 = SDLK_WORLD_19
          pred SDLK_WORLD_21 = SDLK_WORLD_20
          pred SDLK_WORLD_22 = SDLK_WORLD_21
          pred SDLK_WORLD_23 = SDLK_WORLD_22
          pred SDLK_WORLD_24 = SDLK_WORLD_23
          pred SDLK_WORLD_25 = SDLK_WORLD_24
          pred SDLK_WORLD_26 = SDLK_WORLD_25
          pred SDLK_WORLD_27 = SDLK_WORLD_26
          pred SDLK_WORLD_28 = SDLK_WORLD_27
          pred SDLK_WORLD_29 = SDLK_WORLD_28
          pred SDLK_WORLD_30 = SDLK_WORLD_29
          pred SDLK_WORLD_31 = SDLK_WORLD_30
          pred SDLK_WORLD_32 = SDLK_WORLD_31
          pred SDLK_WORLD_33 = SDLK_WORLD_32
          pred SDLK_WORLD_34 = SDLK_WORLD_33
          pred SDLK_WORLD_35 = SDLK_WORLD_34
          pred SDLK_WORLD_36 = SDLK_WORLD_35
          pred SDLK_WORLD_37 = SDLK_WORLD_36
          pred SDLK_WORLD_38 = SDLK_WORLD_37
          pred SDLK_WORLD_39 = SDLK_WORLD_38
          pred SDLK_WORLD_40 = SDLK_WORLD_39
          pred SDLK_WORLD_41 = SDLK_WORLD_40
          pred SDLK_WORLD_42 = SDLK_WORLD_41
          pred SDLK_WORLD_43 = SDLK_WORLD_42
          pred SDLK_WORLD_44 = SDLK_WORLD_43
          pred SDLK_WORLD_45 = SDLK_WORLD_44
          pred SDLK_WORLD_46 = SDLK_WORLD_45
          pred SDLK_WORLD_47 = SDLK_WORLD_46
          pred SDLK_WORLD_48 = SDLK_WORLD_47
          pred SDLK_WORLD_49 = SDLK_WORLD_48
          pred SDLK_WORLD_50 = SDLK_WORLD_49
          pred SDLK_WORLD_51 = SDLK_WORLD_50
          pred SDLK_WORLD_52 = SDLK_WORLD_51
          pred SDLK_WORLD_53 = SDLK_WORLD_52
          pred SDLK_WORLD_54 = SDLK_WORLD_53
          pred SDLK_WORLD_55 = SDLK_WORLD_54
          pred SDLK_WORLD_56 = SDLK_WORLD_55
          pred SDLK_WORLD_57 = SDLK_WORLD_56
          pred SDLK_WORLD_58 = SDLK_WORLD_57
          pred SDLK_WORLD_59 = SDLK_WORLD_58
          pred SDLK_WORLD_60 = SDLK_WORLD_59
          pred SDLK_WORLD_61 = SDLK_WORLD_60
          pred SDLK_WORLD_62 = SDLK_WORLD_61
          pred SDLK_WORLD_63 = SDLK_WORLD_62
          pred SDLK_WORLD_64 = SDLK_WORLD_63
          pred SDLK_WORLD_65 = SDLK_WORLD_64
          pred SDLK_WORLD_66 = SDLK_WORLD_65
          pred SDLK_WORLD_67 = SDLK_WORLD_66
          pred SDLK_WORLD_68 = SDLK_WORLD_67
          pred SDLK_WORLD_69 = SDLK_WORLD_68
          pred SDLK_WORLD_70 = SDLK_WORLD_69
          pred SDLK_WORLD_71 = SDLK_WORLD_70
          pred SDLK_WORLD_72 = SDLK_WORLD_71
          pred SDLK_WORLD_73 = SDLK_WORLD_72
          pred SDLK_WORLD_74 = SDLK_WORLD_73
          pred SDLK_WORLD_75 = SDLK_WORLD_74
          pred SDLK_WORLD_76 = SDLK_WORLD_75
          pred SDLK_WORLD_77 = SDLK_WORLD_76
          pred SDLK_WORLD_78 = SDLK_WORLD_77
          pred SDLK_WORLD_79 = SDLK_WORLD_78
          pred SDLK_WORLD_80 = SDLK_WORLD_79
          pred SDLK_WORLD_81 = SDLK_WORLD_80
          pred SDLK_WORLD_82 = SDLK_WORLD_81
          pred SDLK_WORLD_83 = SDLK_WORLD_82
          pred SDLK_WORLD_84 = SDLK_WORLD_83
          pred SDLK_WORLD_85 = SDLK_WORLD_84
          pred SDLK_WORLD_86 = SDLK_WORLD_85
          pred SDLK_WORLD_87 = SDLK_WORLD_86
          pred SDLK_WORLD_88 = SDLK_WORLD_87
          pred SDLK_WORLD_89 = SDLK_WORLD_88
          pred SDLK_WORLD_90 = SDLK_WORLD_89
          pred SDLK_WORLD_91 = SDLK_WORLD_90
          pred SDLK_WORLD_92 = SDLK_WORLD_91
          pred SDLK_WORLD_93 = SDLK_WORLD_92
          pred SDLK_WORLD_94 = SDLK_WORLD_93
          pred SDLK_WORLD_95 = SDLK_WORLD_94
          pred SDLK_KP0 = SDLK_WORLD_95
          pred SDLK_KP1 = SDLK_KP0
          pred SDLK_KP2 = SDLK_KP1
          pred SDLK_KP3 = SDLK_KP2
          pred SDLK_KP4 = SDLK_KP3
          pred SDLK_KP5 = SDLK_KP4
          pred SDLK_KP6 = SDLK_KP5
          pred SDLK_KP7 = SDLK_KP6
          pred SDLK_KP8 = SDLK_KP7
          pred SDLK_KP9 = SDLK_KP8
          pred SDLK_KP_PERIOD = SDLK_KP9
          pred SDLK_KP_DIVIDE = SDLK_KP_PERIOD
          pred SDLK_KP_MULTIPLY = SDLK_KP_DIVIDE
          pred SDLK_KP_MINUS = SDLK_KP_MULTIPLY
          pred SDLK_KP_PLUS = SDLK_KP_MINUS
          pred SDLK_KP_ENTER = SDLK_KP_PLUS
          pred SDLK_KP_EQUALS = SDLK_KP_ENTER
          pred SDLK_UP = SDLK_KP_EQUALS
          pred SDLK_DOWN = SDLK_UP
          pred SDLK_RIGHT = SDLK_DOWN
          pred SDLK_LEFT = SDLK_RIGHT
          pred SDLK_INSERT = SDLK_LEFT
          pred SDLK_HOME = SDLK_INSERT
          pred SDLK_END = SDLK_HOME
          pred SDLK_PAGEUP = SDLK_END
          pred SDLK_PAGEDOWN = SDLK_PAGEUP
          pred SDLK_F1 = SDLK_PAGEDOWN
          pred SDLK_F2 = SDLK_F1
          pred SDLK_F3 = SDLK_F2
          pred SDLK_F4 = SDLK_F3
          pred SDLK_F5 = SDLK_F4
          pred SDLK_F6 = SDLK_F5
          pred SDLK_F7 = SDLK_F6
          pred SDLK_F8 = SDLK_F7
          pred SDLK_F9 = SDLK_F8
          pred SDLK_F10 = SDLK_F9
          pred SDLK_F11 = SDLK_F10
          pred SDLK_F12 = SDLK_F11
          pred SDLK_F13 = SDLK_F12
          pred SDLK_F14 = SDLK_F13
          pred SDLK_F15 = SDLK_F14
          pred SDLK_NUMLOCK = SDLK_F15
          pred SDLK_CAPSLOCK = SDLK_NUMLOCK
          pred SDLK_SCROLLOCK = SDLK_CAPSLOCK
          pred SDLK_RSHIFT = SDLK_SCROLLOCK
          pred SDLK_LSHIFT = SDLK_RSHIFT
          pred SDLK_RCTRL = SDLK_LSHIFT
          pred SDLK_LCTRL = SDLK_RCTRL
          pred SDLK_RALT = SDLK_LCTRL
          pred SDLK_LALT = SDLK_RALT
          pred SDLK_RMETA = SDLK_LALT
          pred SDLK_LMETA = SDLK_RMETA
          pred SDLK_LSUPER = SDLK_LMETA
          pred SDLK_RSUPER = SDLK_LSUPER
          pred SDLK_MODE = SDLK_RSUPER
          pred SDLK_COMPOSE = SDLK_MODE
          pred SDLK_HELP = SDLK_COMPOSE
          pred SDLK_PRINT = SDLK_HELP
          pred SDLK_SYSREQ = SDLK_PRINT
          pred SDLK_BREAK = SDLK_SYSREQ
          pred SDLK_MENU = SDLK_BREAK
          pred SDLK_POWER = SDLK_MENU
          pred SDLK_EURO = SDLK_POWER
          pred SDLK_UNDO = SDLK_EURO
          pred SDLK_LAST = SDLK_UNDO
          pred _ = error "Graphics.UI.SDL.Keysym.pred: bad argument"
          enumFromTo x y | x > y = []
                         | x == y = [y]
                         | True = x : enumFromTo (succ x) y