structure GlfwKeyMap = struct structure KeyMap = MakeGapMap (struct type key = int type value = CoreKey.key_code fun l (a: int, b: int) = a < b fun eq (a: int, b: int) = a = b fun g (a: int, b: int) = a > b val maxNodeSize = 1024 end) fun helpInitKeyMap (pos, pairs, acc) = if pos = Vector.length pairs then acc else let val (code, key) = Vector.sub (pairs, pos) val acc = KeyMap.add (code, key, acc) in helpInitKeyMap (pos + 1, pairs, acc) end fun initKeyMap () = let open CoreKey (* vector of (glfw_key_code, Core.key_code) tuples. *) val pairs = #[ (32, KEY_SPACE) , (39, KEY_APOSTROPHE) , (44, KEY_COMMA) , (45, KEY_MINUS) , (46, KEY_PERIOD) , (47, KEY_SLASH) , (48, KEY_0) , (49, KEY_1) , (50, KEY_2) , (51, KEY_3) , (52, KEY_4) , (53, KEY_5) , (54, KEY_6) , (55, KEY_7) , (56, KEY_8) , (57, KEY_9) , (59, KEY_SEMICOLON) , (61, KEY_EQUAL) , (65, KEY_A) , (66, KEY_B) , (67, KEY_C) , (68, KEY_D) , (69, KEY_E) , (70, KEY_F) , (71, KEY_G) , (72, KEY_H) , (73, KEY_I) , (74, KEY_J) , (75, KEY_K) , (76, KEY_L) , (77, KEY_M) , (78, KEY_N) , (79, KEY_O) , (80, KEY_P) , (81, KEY_Q) , (82, KEY_R) , (83, KEY_S) , (84, KEY_T) , (85, KEY_U) , (86, KEY_V) , (87, KEY_W) , (88, KEY_X) , (89, KEY_Y) , (90, KEY_Z) , (91, KEY_LEFT_BRACKET) , (92, KEY_BACKSLASH) , (93, KEY_RIGHT_BRACKET) , (96, KEY_GRAVE_ACCENT) , (161, KEY_WORLD_1) , (162, KEY_WORLD_2) , (256, KEY_ESCAPE) , (257, KEY_ENTER) , (258, KEY_TAB) , (259, KEY_BACKSPACE) , (260, KEY_INSERT) , (261, KEY_DELETE) , (262, KEY_RIGHT) , (263, KEY_LEFT) , (264, KEY_DOWN) , (265, KEY_UP) , (266, KEY_PAGE_UP) , (267, KEY_PAGE_DOWN) , (268, KEY_HOME) , (269, KEY_END) , (280, KEY_CAPS_LOCK) , (281, KEY_SCROLL_LOCK) , (282, KEY_NUM_LOCK) , (283, KEY_PRINT_SCREEN) , (284, KEY_PAUSE) , (290, KEY_F1) , (291, KEY_F2) , (292, KEY_F3) , (293, KEY_F4) , (294, KEY_F5) , (295, KEY_F6) , (296, KEY_F7) , (297, KEY_F8) , (298, KEY_F9) , (299, KEY_F10) , (300, KEY_F11) , (301, KEY_F12) , (302, KEY_F13) , (303, KEY_F14) , (304, KEY_F15) , (305, KEY_F16) , (306, KEY_F17) , (307, KEY_F18) , (308, KEY_F19) , (309, KEY_F20) , (310, KEY_F21) , (311, KEY_F22) , (312, KEY_F23) , (313, KEY_F24) , (314, KEY_F25) , (320, KEY_KP_0) , (321, KEY_KP_1) , (322, KEY_KP_2) , (323, KEY_KP_3) , (324, KEY_KP_4) , (325, KEY_KP_5) , (326, KEY_KP_6) , (327, KEY_KP_7) , (328, KEY_KP_8) , (329, KEY_KP_9) , (330, KEY_KP_DECIMAL) , (331, KEY_KP_DIVIDE) , (332, KEY_KP_MULTIPLY) , (333, KEY_KP_SUBTRACT) , (334, KEY_KP_ADD) , (335, KEY_KP_ENTER) , (336, KEY_KP_EQUAL) , (340, KEY_LEFT_SHIFT) , (341, KEY_LEFT_CONTROL) , (342, KEY_LEFT_ALT) , (343, KEY_LEFT_SUPER) , (344, KEY_RIGHT_SHIFT) , (345, KEY_RIGHT_CONTROL) , (346, KEY_RIGHT_ALT) , (347, KEY_RIGHT_SUPER) , (348, KEY_MENU) ] in helpInitKeyMap (0, pairs, KeyMap.empty) end val map = initKeyMap () fun codeFromKey (key: int) = KeyMap.get (key, map) end