|
|
|
let Genode = env:DHALL_GENODE
|
|
|
|
|
|
|
|
let Prelude = Genode.Prelude
|
|
|
|
|
|
|
|
let XML = Prelude.XML
|
|
|
|
|
|
|
|
let Key = < Ascii : Natural | Char : Text | Code : Natural > : Type
|
|
|
|
|
|
|
|
let Map =
|
|
|
|
{ Type =
|
|
|
|
{ keys : Prelude.Map.Type Text Key
|
|
|
|
, mod1 : Bool
|
|
|
|
, mod2 : Bool
|
|
|
|
, mod3 : Bool
|
|
|
|
, mod4 : Bool
|
|
|
|
}
|
|
|
|
, default = { mod1 = False, mod2 = False, mod3 = False, mod4 = False }
|
|
|
|
}
|
|
|
|
|
|
|
|
let boolToAttr = λ(_ : Bool) → if _ then "yes" else "no"
|
|
|
|
|
|
|
|
let keyToXML =
|
|
|
|
λ(x : Prelude.Map.Entry Text Key) →
|
|
|
|
XML.leaf
|
|
|
|
{ name = "key"
|
|
|
|
, attributes =
|
|
|
|
[ merge
|
|
|
|
{ Ascii =
|
|
|
|
λ(_ : Natural) →
|
|
|
|
{ mapKey = "ascii", mapValue = Prelude.Natural.show _ }
|
|
|
|
, Char = λ(_ : Text) → { mapKey = "char", mapValue = _ }
|
|
|
|
, Code =
|
|
|
|
λ(_ : Natural) →
|
|
|
|
{ mapKey = "code", mapValue = Prelude.Natural.show _ }
|
|
|
|
}
|
|
|
|
x.mapValue
|
|
|
|
, { mapKey = "name", mapValue = x.mapKey }
|
|
|
|
]
|
|
|
|
}
|
|
|
|
|
|
|
|
let mapToXML =
|
|
|
|
λ(map : Map.Type) →
|
|
|
|
XML.element
|
|
|
|
{ name = "map"
|
|
|
|
, attributes = toMap
|
|
|
|
{ mod1 = boolToAttr map.mod1
|
|
|
|
, mod2 = boolToAttr map.mod2
|
|
|
|
, mod3 = boolToAttr map.mod3
|
|
|
|
, mod4 = boolToAttr map.mod4
|
|
|
|
}
|
|
|
|
, content =
|
|
|
|
Prelude.List.map
|
|
|
|
(Prelude.Map.Entry Text Key)
|
|
|
|
XML.Type
|
|
|
|
keyToXML
|
|
|
|
map.keys
|
|
|
|
}
|
|
|
|
|
|
|
|
let qwerty =
|
|
|
|
[ Map::{
|
|
|
|
, mod1 = False
|
|
|
|
, mod2 = False
|
|
|
|
, mod3 = False
|
|
|
|
, mod4 = False
|
|
|
|
, keys = toMap
|
|
|
|
{ KEY_1 = Key.Code 49
|
|
|
|
, KEY_2 = Key.Code 50
|
|
|
|
, KEY_3 = Key.Code 51
|
|
|
|
, KEY_4 = Key.Code 52
|
|
|
|
, KEY_5 = Key.Code 53
|
|
|
|
, KEY_6 = Key.Code 54
|
|
|
|
, KEY_7 = Key.Code 55
|
|
|
|
, KEY_8 = Key.Code 56
|
|
|
|
, KEY_9 = Key.Code 57
|
|
|
|
, KEY_0 = Key.Code 48
|
|
|
|
, KEY_MINUS = Key.Code 45
|
|
|
|
, KEY_EQUAL = Key.Code 61
|
|
|
|
, KEY_Q = Key.Code 113
|
|
|
|
, KEY_W = Key.Code 119
|
|
|
|
, KEY_E = Key.Code 101
|
|
|
|
, KEY_R = Key.Code 114
|
|
|
|
, KEY_T = Key.Code 116
|
|
|
|
, KEY_Y = Key.Code 121
|
|
|
|
, KEY_U = Key.Code 117
|
|
|
|
, KEY_I = Key.Code 105
|
|
|
|
, KEY_O = Key.Code 111
|
|
|
|
, KEY_P = Key.Code 112
|
|
|
|
, KEY_LEFTBRACE = Key.Code 91
|
|
|
|
, KEY_RIGHTBRACE = Key.Code 93
|
|
|
|
, KEY_A = Key.Code 97
|
|
|
|
, KEY_S = Key.Code 115
|
|
|
|
, KEY_D = Key.Code 100
|
|
|
|
, KEY_F = Key.Code 102
|
|
|
|
, KEY_G = Key.Code 103
|
|
|
|
, KEY_H = Key.Code 104
|
|
|
|
, KEY_J = Key.Code 106
|
|
|
|
, KEY_K = Key.Code 107
|
|
|
|
, KEY_L = Key.Code 108
|
|
|
|
, KEY_SEMICOLON = Key.Code 59
|
|
|
|
, KEY_APOSTROPHE = Key.Code 39
|
|
|
|
, KEY_GRAVE = Key.Code 96
|
|
|
|
, KEY_BACKSLASH = Key.Code 92
|
|
|
|
, KEY_Z = Key.Code 122
|
|
|
|
, KEY_X = Key.Code 120
|
|
|
|
, KEY_C = Key.Code 99
|
|
|
|
, KEY_V = Key.Code 118
|
|
|
|
, KEY_B = Key.Code 98
|
|
|
|
, KEY_N = Key.Code 110
|
|
|
|
, KEY_M = Key.Code 109
|
|
|
|
, KEY_COMMA = Key.Code 44
|
|
|
|
, KEY_DOT = Key.Code 46
|
|
|
|
, KEY_SLASH = Key.Code 47
|
|
|
|
, KEY_KPASTERISK = Key.Code 42
|
|
|
|
, KEY_SPACE = Key.Code 32
|
|
|
|
, KEY_KP7 = Key.Code 55
|
|
|
|
, KEY_KP8 = Key.Code 56
|
|
|
|
, KEY_KP9 = Key.Code 57
|
|
|
|
, KEY_KPMINUS = Key.Code 45
|
|
|
|
, KEY_KP4 = Key.Code 52
|
|
|
|
, KEY_KP5 = Key.Code 53
|
|
|
|
, KEY_KP6 = Key.Code 54
|
|
|
|
, KEY_KPPLUS = Key.Code 43
|
|
|
|
, KEY_KP1 = Key.Code 49
|
|
|
|
, KEY_KP2 = Key.Code 50
|
|
|
|
, KEY_KP3 = Key.Code 51
|
|
|
|
, KEY_KP0 = Key.Code 48
|
|
|
|
, KEY_KPDOT = Key.Code 46
|
|
|
|
, KEY_102ND = Key.Code 60
|
|
|
|
, KEY_KPSLASH = Key.Code 47
|
|
|
|
, KEY_ESC = Key.Ascii 27
|
|
|
|
, KEY_BACKSPACE = Key.Ascii 8
|
|
|
|
, KEY_TAB = Key.Ascii 9
|
|
|
|
, KEY_ENTER = Key.Ascii 10
|
|
|
|
, KEY_KPENTER = Key.Ascii 10
|
|
|
|
, KEY_DELETE = Key.Ascii 127
|
|
|
|
}
|
|
|
|
}
|
|
|
|
, Map::{
|
|
|
|
, mod1 = True
|
|
|
|
, mod2 = False
|
|
|
|
, mod3 = False
|
|
|
|
, mod4 = False
|
|
|
|
, keys = toMap
|
|
|
|
{ KEY_1 = Key.Code 33
|
|
|
|
, KEY_2 = Key.Code 64
|
|
|
|
, KEY_3 = Key.Code 35
|
|
|
|
, KEY_4 = Key.Code 36
|
|
|
|
, KEY_5 = Key.Code 37
|
|
|
|
, KEY_6 = Key.Code 94
|
|
|
|
, KEY_7 = Key.Code 38
|
|
|
|
, KEY_8 = Key.Code 42
|
|
|
|
, KEY_9 = Key.Code 40
|
|
|
|
, KEY_0 = Key.Code 41
|
|
|
|
, KEY_MINUS = Key.Code 95
|
|
|
|
, KEY_EQUAL = Key.Code 43
|
|
|
|
, KEY_Q = Key.Code 81
|
|
|
|
, KEY_W = Key.Code 87
|
|
|
|
, KEY_E = Key.Code 69
|
|
|
|
, KEY_R = Key.Code 82
|
|
|
|
, KEY_T = Key.Code 84
|
|
|
|
, KEY_Y = Key.Code 89
|
|
|
|
, KEY_U = Key.Code 85
|
|
|
|
, KEY_I = Key.Code 73
|
|
|
|
, KEY_O = Key.Code 79
|
|
|
|
, KEY_P = Key.Code 80
|
|
|
|
, KEY_LEFTBRACE = Key.Code 123
|
|
|
|
, KEY_RIGHTBRACE = Key.Code 125
|
|
|
|
, KEY_A = Key.Code 65
|
|
|
|
, KEY_S = Key.Code 83
|
|
|
|
, KEY_D = Key.Code 68
|
|
|
|
, KEY_F = Key.Code 70
|
|
|
|
, KEY_G = Key.Code 71
|
|
|
|
, KEY_H = Key.Code 72
|
|
|
|
, KEY_J = Key.Code 74
|
|
|
|
, KEY_K = Key.Code 75
|
|
|
|
, KEY_L = Key.Code 76
|
|
|
|
, KEY_SEMICOLON = Key.Code 58
|
|
|
|
, KEY_APOSTROPHE = Key.Code 34
|
|
|
|
, KEY_GRAVE = Key.Code 126
|
|
|
|
, KEY_BACKSLASH = Key.Code 124
|
|
|
|
, KEY_Z = Key.Code 90
|
|
|
|
, KEY_X = Key.Code 88
|
|
|
|
, KEY_C = Key.Code 67
|
|
|
|
, KEY_V = Key.Code 86
|
|
|
|
, KEY_B = Key.Code 66
|
|
|
|
, KEY_N = Key.Code 78
|
|
|
|
, KEY_M = Key.Code 77
|
|
|
|
, KEY_COMMA = Key.Code 60
|
|
|
|
, KEY_DOT = Key.Code 62
|
|
|
|
, KEY_SLASH = Key.Code 63
|
|
|
|
, KEY_KPASTERISK = Key.Code 42
|
|
|
|
, KEY_KPMINUS = Key.Code 45
|
|
|
|
, KEY_KPPLUS = Key.Code 43
|
|
|
|
, KEY_102ND = Key.Code 62
|
|
|
|
, KEY_KPSLASH = Key.Code 47
|
|
|
|
}
|
|
|
|
}
|
|
|
|
, Map::{
|
|
|
|
, mod1 = False
|
|
|
|
, mod2 = False
|
|
|
|
, mod3 = True
|
|
|
|
, mod4 = False
|
|
|
|
, keys = toMap { KEY_5 = Key.Code 8364, KEY_102ND = Key.Code 124 }
|
|
|
|
}
|
|
|
|
, Map::{
|
|
|
|
, mod1 = False
|
|
|
|
, mod2 = False
|
|
|
|
, mod3 = False
|
|
|
|
, mod4 = True
|
|
|
|
, keys = toMap
|
|
|
|
{ KEY_Q = Key.Code 81
|
|
|
|
, KEY_W = Key.Code 87
|
|
|
|
, KEY_E = Key.Code 69
|
|
|
|
, KEY_R = Key.Code 82
|
|
|
|
, KEY_T = Key.Code 84
|
|
|
|
, KEY_Y = Key.Code 89
|
|
|
|
, KEY_U = Key.Code 85
|
|
|
|
, KEY_I = Key.Code 73
|
|
|
|
, KEY_O = Key.Code 79
|
|
|
|
, KEY_P = Key.Code 80
|
|
|
|
, KEY_A = Key.Code 65
|
|
|
|
, KEY_S = Key.Code 83
|
|
|
|
, KEY_D = Key.Code 68
|
|
|
|
, KEY_F = Key.Code 70
|
|
|
|
, KEY_G = Key.Code 71
|
|
|
|
, KEY_H = Key.Code 72
|
|
|
|
, KEY_J = Key.Code 74
|
|
|
|
, KEY_K = Key.Code 75
|
|
|
|
, KEY_L = Key.Code 76
|
|
|
|
, KEY_Z = Key.Code 90
|
|
|
|
, KEY_X = Key.Code 88
|
|
|
|
, KEY_C = Key.Code 67
|
|
|
|
, KEY_V = Key.Code 86
|
|
|
|
, KEY_B = Key.Code 66
|
|
|
|
, KEY_N = Key.Code 78
|
|
|
|
, KEY_M = Key.Code 77
|
|
|
|
}
|
|
|
|
}
|
|
|
|
, Map::{
|
|
|
|
, mod1 = True
|
|
|
|
, mod2 = False
|
|
|
|
, mod3 = False
|
|
|
|
, mod4 = True
|
|
|
|
, keys = toMap
|
|
|
|
{ KEY_1 = Key.Code 33
|
|
|
|
, KEY_2 = Key.Code 64
|
|
|
|
, KEY_3 = Key.Code 35
|
|
|
|
, KEY_4 = Key.Code 36
|
|
|
|
, KEY_5 = Key.Code 37
|
|
|
|
, KEY_6 = Key.Code 94
|
|
|
|
, KEY_7 = Key.Code 38
|
|
|
|
, KEY_8 = Key.Code 42
|
|
|
|
, KEY_9 = Key.Code 40
|
|
|
|
, KEY_0 = Key.Code 41
|
|
|
|
, KEY_MINUS = Key.Code 95
|
|
|
|
, KEY_EQUAL = Key.Code 43
|
|
|
|
, KEY_Q = Key.Code 113
|
|
|
|
, KEY_W = Key.Code 119
|
|
|
|
, KEY_E = Key.Code 101
|
|
|
|
, KEY_R = Key.Code 114
|
|
|
|
, KEY_T = Key.Code 116
|
|
|
|
, KEY_Y = Key.Code 121
|
|
|
|
, KEY_U = Key.Code 117
|
|
|
|
, KEY_I = Key.Code 105
|
|
|
|
, KEY_O = Key.Code 111
|
|
|
|
, KEY_P = Key.Code 112
|
|
|
|
, KEY_LEFTBRACE = Key.Code 123
|
|
|
|
, KEY_RIGHTBRACE = Key.Code 125
|
|
|
|
, KEY_A = Key.Code 97
|
|
|
|
, KEY_S = Key.Code 115
|
|
|
|
, KEY_D = Key.Code 100
|
|
|
|
, KEY_F = Key.Code 102
|
|
|
|
, KEY_G = Key.Code 103
|
|
|
|
, KEY_H = Key.Code 104
|
|
|
|
, KEY_J = Key.Code 106
|
|
|
|
, KEY_K = Key.Code 107
|
|
|
|
, KEY_L = Key.Code 108
|
|
|
|
, KEY_SEMICOLON = Key.Code 58
|
|
|
|
, KEY_APOSTROPHE = Key.Code 34
|
|
|
|
, KEY_GRAVE = Key.Code 126
|
|
|
|
, KEY_BACKSLASH = Key.Code 124
|
|
|
|
, KEY_Z = Key.Code 122
|
|
|
|
, KEY_X = Key.Code 120
|
|
|
|
, KEY_C = Key.Code 99
|
|
|
|
, KEY_V = Key.Code 118
|
|
|
|
, KEY_B = Key.Code 98
|
|
|
|
, KEY_N = Key.Code 110
|
|
|
|
, KEY_M = Key.Code 109
|
|
|
|
, KEY_COMMA = Key.Code 60
|
|
|
|
, KEY_DOT = Key.Code 62
|
|
|
|
, KEY_SLASH = Key.Code 63
|
|
|
|
, KEY_102ND = Key.Code 62
|
|
|
|
}
|
|
|
|
}
|
|
|
|
]
|
|
|
|
|
|
|
|
in Prelude.List.map Map.Type XML.Type mapToXML qwerty
|