#line 1587 "/home/travis/build/felix-lang/felix/src/packages/sdl.fdoc"
  
  open class SDL_keycode_h
  {
    requires package "sdl2";
  
    cenum SDL_Keycode =
        SDLK_UNKNOWN,
  
        SDLK_RETURN,
        SDLK_ESCAPE,
        SDLK_BACKSPACE,
        SDLK_TAB,
        SDLK_SPACE,
        SDLK_EXCLAIM,
        SDLK_QUOTEDBL,
        SDLK_HASH,
        SDLK_PERCENT,
        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,
        /*
           Skip uppercase letters
         */
        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_CAPSLOCK,
  
        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_PRINTSCREEN,
        SDLK_SCROLLLOCK,
        SDLK_PAUSE,
        SDLK_INSERT,
        SDLK_HOME,
        SDLK_PAGEUP,
        SDLK_DELETE,
        SDLK_END,
        SDLK_PAGEDOWN,
        SDLK_RIGHT,
        SDLK_LEFT,
        SDLK_DOWN,
        SDLK_UP,
  
        SDLK_NUMLOCKCLEAR,
        SDLK_KP_DIVIDE,
        SDLK_KP_MULTIPLY,
        SDLK_KP_MINUS,
        SDLK_KP_PLUS,
        SDLK_KP_ENTER,
        SDLK_KP_1,
        SDLK_KP_2,
        SDLK_KP_3,
        SDLK_KP_4,
        SDLK_KP_5,
        SDLK_KP_6,
        SDLK_KP_7,
        SDLK_KP_8,
        SDLK_KP_9,
        SDLK_KP_0,
        SDLK_KP_PERIOD,
  
        SDLK_APPLICATION,
        SDLK_POWER,
        SDLK_KP_EQUALS,
        SDLK_F13,
        SDLK_F14,
        SDLK_F15,
        SDLK_F16,
        SDLK_F17,
        SDLK_F18,
        SDLK_F19,
        SDLK_F20,
        SDLK_F21,
        SDLK_F22,
        SDLK_F23,
        SDLK_F24,
        SDLK_EXECUTE,
        SDLK_HELP,
        SDLK_MENU,
        SDLK_SELECT,
        SDLK_STOP,
        SDLK_AGAIN,
        SDLK_UNDO,
        SDLK_CUT,
        SDLK_COPY,
        SDLK_PASTE,
        SDLK_FIND,
        SDLK_MUTE,
        SDLK_VOLUMEUP,
        SDLK_VOLUMEDOWN,
        SDLK_KP_COMMA,
        SDLK_KP_EQUALSAS400,
  
        SDLK_ALTERASE,
        SDLK_SYSREQ,
        SDLK_CANCEL,
        SDLK_CLEAR,
        SDLK_PRIOR,
        SDLK_RETURN2,
        SDLK_SEPARATOR,
        SDLK_OUT,
        SDLK_OPER,
        SDLK_CLEARAGAIN,
        SDLK_CRSEL,
        SDLK_EXSEL,
  
        SDLK_KP_00,
        SDLK_KP_000,
        SDLK_THOUSANDSSEPARATOR,
        SDLK_DECIMALSEPARATOR,
        SDLK_CURRENCYUNIT,
        SDLK_CURRENCYSUBUNIT,
        SDLK_KP_LEFTPAREN,
        SDLK_KP_RIGHTPAREN,
        SDLK_KP_LEFTBRACE,
        SDLK_KP_RIGHTBRACE,
        SDLK_KP_TAB,
        SDLK_KP_BACKSPACE,
        SDLK_KP_A,
        SDLK_KP_B,
        SDLK_KP_C,
        SDLK_KP_D,
        SDLK_KP_E,
        SDLK_KP_F,
        SDLK_KP_XOR,
        SDLK_KP_POWER,
        SDLK_KP_PERCENT,
        SDLK_KP_LESS,
        SDLK_KP_GREATER,
        SDLK_KP_AMPERSAND,
        SDLK_KP_DBLAMPERSAND,
        SDLK_KP_VERTICALBAR,
        SDLK_KP_DBLVERTICALBAR,
        SDLK_KP_COLON,
        SDLK_KP_HASH,
        SDLK_KP_SPACE,
        SDLK_KP_AT,
        SDLK_KP_EXCLAM,
        SDLK_KP_MEMSTORE,
        SDLK_KP_MEMRECALL,
        SDLK_KP_MEMCLEAR,
        SDLK_KP_MEMADD,
        SDLK_KP_MEMSUBTRACT,
        SDLK_KP_MEMMULTIPLY,
        SDLK_KP_MEMDIVIDE,
        SDLK_KP_PLUSMINUS,
        SDLK_KP_CLEAR,
        SDLK_KP_CLEARENTRY,
        SDLK_KP_BINARY,
        SDLK_KP_OCTAL,
        SDLK_KP_DECIMAL,
        SDLK_KP_HEXADECIMAL,
  
        SDLK_LCTRL,
        SDLK_LSHIFT,
        SDLK_LALT,
        SDLK_LGUI,
        SDLK_RCTRL,
        SDLK_RSHIFT,
        SDLK_RALT,
        SDLK_RGUI,
  
        SDLK_MODE,
  
        SDLK_AUDIONEXT,
        SDLK_AUDIOPREV,
        SDLK_AUDIOSTOP,
        SDLK_AUDIOPLAY,
        SDLK_AUDIOMUTE,
        SDLK_MEDIASELECT,
        SDLK_WWW,
        SDLK_MAIL,
        SDLK_CALCULATOR,
        SDLK_COMPUTER,
        SDLK_AC_SEARCH,
        SDLK_AC_HOME,
        SDLK_AC_BACK,
        SDLK_AC_FORWARD,
        SDLK_AC_STOP,
        SDLK_AC_REFRESH,
        SDLK_AC_BOOKMARKS,
  
        SDLK_BRIGHTNESSDOWN,
        SDLK_BRIGHTNESSUP,
        SDLK_DISPLAYSWITCH,
        SDLK_KBDILLUMTOGGLE,
        SDLK_KBDILLUMDOWN,
        SDLK_KBDILLUMUP,
        SDLK_EJECT,
        SDLK_SLEEP
    ;
    ctor int : SDL_Keycode = "(int)$1";
    ctor SDL_Keycode : int = "(SDL_Keycode)$1";
  
    instance Str[SDL_Keycode] {
      fun str : SDL_Keycode -> string =
        | $(SDLK_UNKNOWN) => "SDLK_UNKNOWN"
  
        | $(SDLK_RETURN) => "SDLK_RETURN"
        | $(SDLK_ESCAPE) => "SDLK_ESCAPE"
        | $(SDLK_BACKSPACE) => "SDLK_BACKSPACE"
        | $(SDLK_TAB) => "SDLK_TAB"
        | $(SDLK_SPACE) => "SDLK_SPACE"
        | $(SDLK_EXCLAIM) => "SDLK_EXCLAIM"
        | $(SDLK_QUOTEDBL) => "SDLK_QUOTEDBL"
        | $(SDLK_HASH) => "SDLK_HASH"
        | $(SDLK_PERCENT) => "SDLK_PERCENT"
        | $(SDLK_DOLLAR) => "SDLK_DOLLAR"
        | $(SDLK_AMPERSAND) => "SDLK_AMPERSAND"
        | $(SDLK_QUOTE) => "SDLK_QUOTE"
        | $(SDLK_LEFTPAREN) => "SDLK_LEFTPAREN"
        | $(SDLK_RIGHTPAREN) => "SDLK_RIGHTPAREN"
        | $(SDLK_ASTERISK) => "SDLK_ASTERISK"
        | $(SDLK_PLUS) => "SDLK_PLUS"
        | $(SDLK_COMMA) => "SDLK_COMMA"
        | $(SDLK_MINUS) => "SDLK_MINUS"
        | $(SDLK_PERIOD) => "SDLK_PERIOD"
        | $(SDLK_SLASH) => "SDLK_SLASH"
        | $(SDLK_0) => "SDLK_0"
        | $(SDLK_1) => "SDLK_1"
        | $(SDLK_2) => "SDLK_2"
        | $(SDLK_3) => "SDLK_3"
        | $(SDLK_4) => "SDLK_4"
        | $(SDLK_5) => "SDLK_5"
        | $(SDLK_6) => "SDLK_6"
        | $(SDLK_7) => "SDLK_7"
        | $(SDLK_8) => "SDLK_8"
        | $(SDLK_9) => "SDLK_9"
        | $(SDLK_COLON) => "SDLK_COLON"
        | $(SDLK_SEMICOLON) => "SDLK_SEMICOLON"
        | $(SDLK_LESS) => "SDLK_LESS"
        | $(SDLK_EQUALS) => "SDLK_EQUALS"
        | $(SDLK_GREATER) => "SDLK_GREATER"
        | $(SDLK_QUESTION) => "SDLK_QUESTION"
        | $(SDLK_AT) => "SDLK_AT"
        /*
           Skip uppercase letters
         */
        | $(SDLK_LEFTBRACKET) => "SDLK_LEFTBRACKET"
        | $(SDLK_BACKSLASH) => "SDLK_BACKSLASH"
        | $(SDLK_RIGHTBRACKET) => "SDLK_RIGHTBRACKET"
        | $(SDLK_CARET) => "SDLK_CARET"
        | $(SDLK_UNDERSCORE) => "SDLK_UNDERSCORE"
        | $(SDLK_BACKQUOTE) => "SDLK_BACKQUOTE"
        | $(SDLK_a) => "SDLK_a"
        | $(SDLK_b) => "SDLK_b"
        | $(SDLK_c) => "SDLK_c"
        | $(SDLK_d) => "SDLK_d"
        | $(SDLK_e) => "SDLK_e"
        | $(SDLK_f) => "SDLK_f"
        | $(SDLK_g) => "SDLK_g"
        | $(SDLK_h) => "SDLK_h"
        | $(SDLK_i) => "SDLK_i"
        | $(SDLK_j) => "SDLK_j"
        | $(SDLK_k) => "SDLK_k"
        | $(SDLK_l) => "SDLK_l"
        | $(SDLK_m) => "SDLK_m"
        | $(SDLK_n) => "SDLK_n"
        | $(SDLK_o) => "SDLK_o"
        | $(SDLK_p) => "SDLK_p"
        | $(SDLK_q) => "SDLK_q"
        | $(SDLK_r) => "SDLK_r"
        | $(SDLK_s) => "SDLK_s"
        | $(SDLK_t) => "SDLK_t"
        | $(SDLK_u) => "SDLK_u"
        | $(SDLK_v) => "SDLK_v"
        | $(SDLK_w) => "SDLK_w"
        | $(SDLK_x) => "SDLK_x"
        | $(SDLK_y) => "SDLK_y"
        | $(SDLK_z) => "SDLK_z"
  
        | $(SDLK_CAPSLOCK) => "SDLK_CAPSLOCK"
  
        | $(SDLK_F1) => "SDLK_F1"
        | $(SDLK_F2) => "SDLK_F2"
        | $(SDLK_F3) => "SDLK_F3"
        | $(SDLK_F4) => "SDLK_F4"
        | $(SDLK_F5) => "SDLK_F5"
        | $(SDLK_F6) => "SDLK_F6"
        | $(SDLK_F7) => "SDLK_F7"
        | $(SDLK_F8) => "SDLK_F8"
        | $(SDLK_F9) => "SDLK_F9"
        | $(SDLK_F10) => "SDLK_F10"
        | $(SDLK_F11) => "SDLK_F11"
        | $(SDLK_F12) => "SDLK_F12"
  
        | $(SDLK_PRINTSCREEN) => "SDLK_PRINTSCREEN"
        | $(SDLK_SCROLLLOCK) => "SDLK_SCROLLLOCK"
        | $(SDLK_PAUSE) => "SDLK_PAUSE"
        | $(SDLK_INSERT) => "SDLK_INSERT"
        | $(SDLK_HOME) => "SDLK_HOME"
        | $(SDLK_PAGEUP) => "SDLK_PAGEUP"
        | $(SDLK_DELETE) => "SDLK_DELETE"
        | $(SDLK_END) => "SDLK_END"
        | $(SDLK_PAGEDOWN) => "SDLK_PAGEDOWN"
        | $(SDLK_RIGHT) => "SDLK_RIGHT"
        | $(SDLK_LEFT) => "SDLK_LEFT"
        | $(SDLK_DOWN) => "SDLK_DOWN"
        | $(SDLK_UP) => "SDLK_UP"
  
        | $(SDLK_NUMLOCKCLEAR) => "SDLK_NUMLOCKCLEAR"
        | $(SDLK_KP_DIVIDE) => "SDLK_KP_DIVIDE"
        | $(SDLK_KP_MULTIPLY) => "SDLK_KP_MULTIPLY"
        | $(SDLK_KP_MINUS) => "SDLK_KP_MINUS"
        | $(SDLK_KP_PLUS) => "SDLK_KP_PLUS"
        | $(SDLK_KP_ENTER) => "SDLK_KP_ENTER"
        | $(SDLK_KP_1) => "SDLK_KP_1"
        | $(SDLK_KP_2) => "SDLK_KP_2"
        | $(SDLK_KP_3) => "SDLK_KP_3"
        | $(SDLK_KP_4) => "SDLK_KP_4"
        | $(SDLK_KP_5) => "SDLK_KP_5"
        | $(SDLK_KP_6) => "SDLK_KP_6"
        | $(SDLK_KP_7) => "SDLK_KP_7"
        | $(SDLK_KP_8) => "SDLK_KP_8"
        | $(SDLK_KP_9) => "SDLK_KP_9"
        | $(SDLK_KP_0) => "SDLK_KP_0"
        | $(SDLK_KP_PERIOD) => "SDLK_KP_PERIOD"
  
        | $(SDLK_APPLICATION) => "SDLK_APPLICATION"
        | $(SDLK_POWER) => "SDLK_POWER"
        | $(SDLK_KP_EQUALS) => "SDLK_KP_EQUALS"
        | $(SDLK_F13) => "SDLK_F13"
        | $(SDLK_F14) => "SDLK_F14"
        | $(SDLK_F15) => "SDLK_F15"
        | $(SDLK_F16) => "SDLK_F16"
        | $(SDLK_F17) => "SDLK_F17"
        | $(SDLK_F18) => "SDLK_F18"
        | $(SDLK_F19) => "SDLK_F19"
        | $(SDLK_F20) => "SDLK_F20"
        | $(SDLK_F21) => "SDLK_F21"
        | $(SDLK_F22) => "SDLK_F22"
        | $(SDLK_F23) => "SDLK_F23"
        | $(SDLK_F24) => "SDLK_F24"
        | $(SDLK_EXECUTE) => "SDLK_EXECUTE"
        | $(SDLK_HELP) => "SDLK_HELP"
        | $(SDLK_MENU) => "SDLK_MENU"
        | $(SDLK_SELECT) => "SDLK_SELECT"
        | $(SDLK_STOP) => "SDLK_STOP"
        | $(SDLK_AGAIN) => "SDLK_AGAIN"
        | $(SDLK_UNDO) => "SDLK_UNDO"
        | $(SDLK_CUT) => "SDLK_CUT"
        | $(SDLK_COPY) => "SDLK_COPY"
        | $(SDLK_PASTE) => "SDLK_PASTE"
        | $(SDLK_FIND) => "SDLK_FIND"
        | $(SDLK_MUTE) => "SDLK_MUTE"
        | $(SDLK_VOLUMEUP) => "SDLK_VOLUMEUP"
        | $(SDLK_VOLUMEDOWN) => "SDLK_VOLUMEDOWN"
        | $(SDLK_KP_COMMA) => "SDLK_KP_COMMA"
        | $(SDLK_KP_EQUALSAS400) => "SDLK_KP_EQUALSAS400"
  
        | $(SDLK_ALTERASE) => "SDLK_ALTERASE"
        | $(SDLK_SYSREQ) => "SDLK_SYSREQ"
        | $(SDLK_CANCEL) => "SDLK_CANCEL"
        | $(SDLK_CLEAR) => "SDLK_CLEAR"
        | $(SDLK_PRIOR) => "SDLK_PRIOR"
        | $(SDLK_RETURN2) => "SDLK_RETURN2"
        | $(SDLK_SEPARATOR) => "SDLK_SEPARATOR"
        | $(SDLK_OUT) => "SDLK_OUT"
        | $(SDLK_OPER) => "SDLK_OPER"
        | $(SDLK_CLEARAGAIN) => "SDLK_CLEARAGAIN"
        | $(SDLK_CRSEL) => "SDLK_CRSEL"
        | $(SDLK_EXSEL) => "SDLK_EXSEL"
  
        | $(SDLK_KP_00) => "SDLK_KP_00"
        | $(SDLK_KP_000) => "SDLK_KP_000"
        | $(SDLK_THOUSANDSSEPARATOR) => "SDLK_THOUSANDSSEPARATOR"
        | $(SDLK_DECIMALSEPARATOR) => "SDLK_DECIMALSEPARATOR"
        | $(SDLK_CURRENCYUNIT) => "SDLK_CURRENCYUNIT"
        | $(SDLK_CURRENCYSUBUNIT) => "SDLK_CURRENCYSUBUNIT"
        | $(SDLK_KP_LEFTPAREN) => "SDLK_KP_LEFTPAREN"
        | $(SDLK_KP_RIGHTPAREN) => "SDLK_KP_RIGHTPAREN"
        | $(SDLK_KP_LEFTBRACE) => "SDLK_KP_LEFTBRACE"
        | $(SDLK_KP_RIGHTBRACE) => "SDLK_KP_RIGHTBRACE"
        | $(SDLK_KP_TAB) => "SDLK_KP_TAB"
        | $(SDLK_KP_BACKSPACE) => "SDLK_KP_BACKSPACE"
        | $(SDLK_KP_A) => "SDLK_KP_A"
        | $(SDLK_KP_B) => "SDLK_KP_B"
        | $(SDLK_KP_C) => "SDLK_KP_C"
        | $(SDLK_KP_D) => "SDLK_KP_D"
        | $(SDLK_KP_E) => "SDLK_KP_E"
        | $(SDLK_KP_F) => "SDLK_KP_F"
        | $(SDLK_KP_XOR) => "SDLK_KP_XOR"
        | $(SDLK_KP_POWER) => "SDLK_KP_POWER"
        | $(SDLK_KP_PERCENT) => "SDLK_KP_PERCENT"
        | $(SDLK_KP_LESS) => "SDLK_KP_LESS"
        | $(SDLK_KP_GREATER) => "SDLK_KP_GREATER"
        | $(SDLK_KP_AMPERSAND) => "SDLK_KP_AMPERSAND"
        | $(SDLK_KP_DBLAMPERSAND) => "SDLK_KP_DBLAMPERSAND"
        | $(SDLK_KP_VERTICALBAR) => "SDLK_KP_VERTICALBAR"
        | $(SDLK_KP_DBLVERTICALBAR) => "SDLK_KP_DBLVERTICALBAR"
        | $(SDLK_KP_COLON) => "SDLK_KP_COLON"
        | $(SDLK_KP_HASH) => "SDLK_KP_HASH"
        | $(SDLK_KP_SPACE) => "SDLK_KP_SPACE"
        | $(SDLK_KP_AT) => "SDLK_KP_AT"
        | $(SDLK_KP_EXCLAM) => "SDLK_KP_EXCLAM"
        | $(SDLK_KP_MEMSTORE) => "SDLK_KP_MEMSTORE"
        | $(SDLK_KP_MEMRECALL) => "SDLK_KP_MEMRECALL"
        | $(SDLK_KP_MEMCLEAR) => "SDLK_KP_MEMCLEAR"
        | $(SDLK_KP_MEMADD) => "SDLK_KP_MEMADD"
        | $(SDLK_KP_MEMSUBTRACT) => "SDLK_KP_MEMSUBTRACT"
        | $(SDLK_KP_MEMMULTIPLY) => "SDLK_KP_MEMMULTIPLY"
        | $(SDLK_KP_MEMDIVIDE) => "SDLK_KP_MEMDIVIDE"
        | $(SDLK_KP_PLUSMINUS) => "SDLK_KP_PLUSMINUS"
        | $(SDLK_KP_CLEAR) => "SDLK_KP_CLEAR"
        | $(SDLK_KP_CLEARENTRY) => "SDLK_KP_CLEARENTRY"
        | $(SDLK_KP_BINARY) => "SDLK_KP_BINARY"
        | $(SDLK_KP_OCTAL) => "SDLK_KP_OCTAL"
        | $(SDLK_KP_DECIMAL) => "SDLK_KP_DECIMAL"
        | $(SDLK_KP_HEXADECIMAL) => "SDLK_KP_HEXADECIMAL"
  
        | $(SDLK_LCTRL) => "SDLK_LCTRL"
        | $(SDLK_LSHIFT) => "SDLK_LSHIFT"
        | $(SDLK_LALT) => "SDLK_LALT"
        | $(SDLK_LGUI) => "SDLK_LGUI"
        | $(SDLK_RCTRL) => "SDLK_RCTRL"
        | $(SDLK_RSHIFT) => "SDLK_RSHIFT"
        | $(SDLK_RALT) => "SDLK_RALT"
        | $(SDLK_RGUI) => "SDLK_RGUI"
  
        | $(SDLK_MODE) => "SDLK_MODE"
  
        | $(SDLK_AUDIONEXT) => "SDLK_AUDIONEXT"
        | $(SDLK_AUDIOPREV) => "SDLK_AUDIOPREV"
        | $(SDLK_AUDIOSTOP) => "SDLK_AUDIOSTOP"
        | $(SDLK_AUDIOPLAY) => "SDLK_AUDIOPLAY"
        | $(SDLK_AUDIOMUTE) => "SDLK_AUDIOMUTE"
        | $(SDLK_MEDIASELECT) => "SDLK_MEDIASELECT"
        | $(SDLK_WWW) => "SDLK_WWW"
        | $(SDLK_MAIL) => "SDLK_MAIL"
        | $(SDLK_CALCULATOR) => "SDLK_CALCULATOR"
        | $(SDLK_COMPUTER) => "SDLK_COMPUTER"
        | $(SDLK_AC_SEARCH) => "SDLK_AC_SEARCH"
        | $(SDLK_AC_HOME) => "SDLK_AC_HOME"
        | $(SDLK_AC_BACK) => "SDLK_AC_BACK"
        | $(SDLK_AC_FORWARD) => "SDLK_AC_FORWARD"
        | $(SDLK_AC_STOP) => "SDLK_AC_STOP"
        | $(SDLK_AC_REFRESH) => "SDLK_AC_REFRESH"
        | $(SDLK_AC_BOOKMARKS) => "SDLK_AC_BOOKMARKS"
  
        | $(SDLK_BRIGHTNESSDOWN) => "SDLK_BRIGHTNESSDOWN"
        | $(SDLK_BRIGHTNESSUP) => "SDLK_BRIGHTNESSUP"
        | $(SDLK_DISPLAYSWITCH) => "SDLK_DISPLAYSWITCH"
        | $(SDLK_KBDILLUMTOGGLE) => "SDLK_KBDILLUMTOGGLE"
        | $(SDLK_KBDILLUMDOWN) => "SDLK_KBDILLUMDOWN"
        | $(SDLK_KBDILLUMUP) => "SDLK_KBDILLUMUP"
        | $(SDLK_EJECT) => "SDLK_EJECT"
        | $(SDLK_SLEEP) => "SDL_EJECT"
        | other => "KEY_"+other.int.str
      ;
    }
    /**
     * \brief Enumeration of valid key mods (possibly OR'd together).
     */
    cflags SDL_Keymod =
      KMOD_NONE,
      KMOD_LSHIFT,
      KMOD_RSHIFT,
      KMOD_LCTRL,
      KMOD_RCTRL,
      KMOD_LALT,
      KMOD_RALT,
      KMOD_LGUI,
      KMOD_RGUI,
      KMOD_NUM,
      KMOD_CAPS,
      KMOD_MODE,
      KMOD_RESERVED,
      KMOD_CTRL,
      KMOD_SHIFT,
      KMOD_ALT,
      KMOD_GUI
    ;
    ctor uint16 : SDL_Keymod = "$1";
  
    fun strmods (m:uint16) =
    {
      var mods = "";
      if m \& KMOD_LSHIFT.uint16 != 0u16 do mods += "LSHIFT-"; done;
      if m \& KMOD_RSHIFT.uint16 != 0u16 do mods += "RSHIFT-"; done;
      if m \& KMOD_LCTRL.uint16 != 0u16 do mods += "LCTRL-"; done;
      if m \& KMOD_RCTRL.uint16 != 0u16 do mods += "RCTRL-"; done;
      if m \& KMOD_LALT.uint16 != 0u16 do mods += "LALT-"; done;
      if m \& KMOD_RALT.uint16 != 0u16 do mods += "RALT-"; done;
      if m \& KMOD_LGUI.uint16 != 0u16 do mods += "LGUI-"; done;
      if m \& KMOD_RGUI.uint16 != 0u16 do mods += "RGUI-"; done;
      if m \& KMOD_NUM.uint16 != 0u16 do mods += "NUM-"; done;
      if m \& KMOD_CAPS.uint16 != 0u16 do mods += "CAPS-"; done;
      if m \& KMOD_MODE.uint16 != 0u16 do mods += "MODE-"; done;
      return mods;
    }
  
  }