1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
|
implementation module oskey
import StdBool, StdClass, StdInt, StdOverloaded, StdString
:: SpecialKey
= { virtual :: !Int
}
BackSpaceVirtualCode:== 8 // BackSpace
BeginVirtualCode :== 115 // Begin of text
ClearVirtualCode :== 71 // Clear
DeleteVirtualCode :== 117 // Delete
DownVirtualCode :== 125 // Arrow down
EndVirtualCode :== 119 // End of text
EnterVirtualCode :== 13 // Enter
EscapeVirtualCode :== 53 // Escape
F1VirtualCode :== 122 // Function 1
F2VirtualCode :== 120 // Function 2
F3VirtualCode :== 99 // Function 3
F4VirtualCode :== 118 // Function 4
F5VirtualCode :== 96 // Function 5
F6VirtualCode :== 97 // Function 6
F7VirtualCode :== 98 // Function 7
F8VirtualCode :== 100 // Function 8
F9VirtualCode :== 101 // Function 9
F10VirtualCode :== 109 // Function 10
F11VirtualCode :== 103 // Function 11
F12VirtualCode :== 111 // Function 12
F13VirtualCode :== 105 // Function 13
F14VirtualCode :== 107 // Function 14
F15VirtualCode :== 113 // Function 15
HelpVirtualCode :== 114 // Help
LeftVirtualCode :== 123 // Arrow left
PgDownVirtualCode :== 121 // Page down
PgUpVirtualCode :== 116 // Page up
ReturnVirtualCode :== -1 // Return (dummy under Windows)
RightVirtualCode :== 124 // Arrow right
UpVirtualCode :== 126 // Arrow up
instance == SpecialKey where
(==) {virtual=v1} {virtual=v2} = v1==v2
instance toString SpecialKey where
toString {virtual}
= specialKeyCodeName virtual
where
specialKeyCodeName :: !Int -> {#Char}
specialKeyCodeName BackSpaceVirtualCode = "BackSpaceKey"
specialKeyCodeName BeginVirtualCode = "BeginKey"
specialKeyCodeName ClearVirtualCode = "ClearKey"
specialKeyCodeName DeleteVirtualCode = "DeleteKey"
specialKeyCodeName DownVirtualCode = "DownKey"
specialKeyCodeName EndVirtualCode = "EndKey"
specialKeyCodeName EnterVirtualCode = "EnterKey"
specialKeyCodeName EscapeVirtualCode = "EscapeKey"
specialKeyCodeName F1VirtualCode = "F1Key"
specialKeyCodeName F2VirtualCode = "F2Key"
specialKeyCodeName F3VirtualCode = "F3Key"
specialKeyCodeName F4VirtualCode = "F4Key"
specialKeyCodeName F5VirtualCode = "F5Key"
specialKeyCodeName F6VirtualCode = "F6Key"
specialKeyCodeName F7VirtualCode = "F7Key"
specialKeyCodeName F8VirtualCode = "F8Key"
specialKeyCodeName F9VirtualCode = "F9Key"
specialKeyCodeName F10VirtualCode = "F10Key"
specialKeyCodeName F11VirtualCode = "F11Key"
specialKeyCodeName F12VirtualCode = "F12Key"
specialKeyCodeName F13VirtualCode = "F13Key"
specialKeyCodeName F14VirtualCode = "F14Key"
specialKeyCodeName F15VirtualCode = "F15Key"
specialKeyCodeName HelpVirtualCode = "HelpKey"
specialKeyCodeName LeftVirtualCode = "LeftKey"
specialKeyCodeName PgDownVirtualCode = "PgDownKey"
specialKeyCodeName PgUpVirtualCode = "PgUpKey"
specialKeyCodeName ReturnVirtualCode = "ReturnKey"
specialKeyCodeName RightVirtualCode = "RightKey"
specialKeyCodeName UpVirtualCode = "UpKey"
specialKeyCodeName otherCode = "toSpecialKey "+++toString otherCode
backSpaceKey:: SpecialKey; backSpaceKey= {virtual=BackSpaceVirtualCode}// BackSpace
beginKey :: SpecialKey; beginKey = {virtual=BeginVirtualCode} // Begin of text
clearKey :: SpecialKey; clearKey = {virtual=ClearVirtualCode} // Clear
deleteKey :: SpecialKey; deleteKey = {virtual=DeleteVirtualCode} // Delete
downKey :: SpecialKey; downKey = {virtual=DownVirtualCode} // Arrow down
endKey :: SpecialKey; endKey = {virtual=EndVirtualCode} // End of text
enterKey :: SpecialKey; enterKey = {virtual=EnterVirtualCode} // Enter
escapeKey :: SpecialKey; escapeKey = {virtual=EscapeVirtualCode} // Escape
f1Key :: SpecialKey; f1Key = {virtual=F1VirtualCode} // Function 1
f2Key :: SpecialKey; f2Key = {virtual=F2VirtualCode} // Function 2
f3Key :: SpecialKey; f3Key = {virtual=F3VirtualCode} // Function 3
f4Key :: SpecialKey; f4Key = {virtual=F4VirtualCode} // Function 4
f5Key :: SpecialKey; f5Key = {virtual=F5VirtualCode} // Function 5
f6Key :: SpecialKey; f6Key = {virtual=F6VirtualCode} // Function 6
f7Key :: SpecialKey; f7Key = {virtual=F7VirtualCode} // Function 7
f8Key :: SpecialKey; f8Key = {virtual=F8VirtualCode} // Function 8
f9Key :: SpecialKey; f9Key = {virtual=F9VirtualCode} // Function 9
f10Key :: SpecialKey; f10Key = {virtual=F10VirtualCode} // Function 10
f11Key :: SpecialKey; f11Key = {virtual=F11VirtualCode} // Function 11
f12Key :: SpecialKey; f12Key = {virtual=F12VirtualCode} // Function 12
f13Key :: SpecialKey; f13Key = {virtual=F13VirtualCode} // Function 13
f14Key :: SpecialKey; f14Key = {virtual=F14VirtualCode} // Function 14
f15Key :: SpecialKey; f15Key = {virtual=F15VirtualCode} // Function 15
helpKey :: SpecialKey; helpKey = {virtual=HelpVirtualCode} // Help
leftKey :: SpecialKey; leftKey = {virtual=LeftVirtualCode} // Arrow left
pgDownKey :: SpecialKey; pgDownKey = {virtual=PgDownVirtualCode} // Page down
pgUpKey :: SpecialKey; pgUpKey = {virtual=PgUpVirtualCode} // Page up
returnKey :: SpecialKey; returnKey = {virtual=ReturnVirtualCode} // Return
rightKey :: SpecialKey; rightKey = {virtual=RightVirtualCode} // Arrow right
upKey :: SpecialKey; upKey = {virtual=UpVirtualCode} // Arrow up
toSpecialKey :: !Int -> SpecialKey
toSpecialKey specialkey = {virtual=specialkey}
isSpecialKey:: !Int -> Bool
isSpecialKey specialKey
= containsSorted specialKey virtualKeyCodes
where
containsSorted :: !Int ![Int] -> Bool
containsSorted x [y:ys]
| x>y = containsSorted x ys
| otherwise = x==y
containsSorted _ _
= False
virtualKeyCodes :: [Int] // The < sorted list of virtual key codes
virtualKeyCodes =: [ BackSpaceVirtualCode // 8
, EnterVirtualCode // 13
, EscapeVirtualCode // 53
, ClearVirtualCode // 71
, F5VirtualCode // 96
, F6VirtualCode // 97
, F7VirtualCode // 98
, F3VirtualCode // 99
, F8VirtualCode // 100
, F9VirtualCode // 101
, F11VirtualCode // 103
, F13VirtualCode // 105
, F14VirtualCode // 107
, F10VirtualCode // 109
, F12VirtualCode // 111
, F15VirtualCode // 113
, HelpVirtualCode // 114
, BeginVirtualCode // 115
, PgUpVirtualCode // 116
, DeleteVirtualCode // 117
, F4VirtualCode // 118
, EndVirtualCode // 119
, F2VirtualCode // 120
, PgDownVirtualCode // 121
, F1VirtualCode // 122
, LeftVirtualCode // 123
, RightVirtualCode // 124
, DownVirtualCode // 125
, UpVirtualCode // 126
]
|