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 | -- GNU ncurses keyboard key codes
-- Copyright (C)2020-2023, Philip Munts dba Munts Technologies.
--
-- Redistribution and use in source and binary forms, with or without
-- modification, are permitted provided that the following conditions are met:
--
-- * Redistributions of source code must retain the above copyright notice,
-- this list of conditions and the following disclaimer.
--
-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-- POSSIBILITY OF SUCH DAMAGE.
WITH Ada.Strings.Fixed;
PACKAGE BODY ncurses.Keys IS
FUNCTION Trim(s : String) RETURN String IS
BEGIN
RETURN Ada.Strings.Fixed.Trim(s, Ada.Strings.Both);
END Trim;
FUNCTION Name(c : Integer) RETURN String IS
BEGIN
IF c < 0 THEN
RAISE Error WITH "Invalid key code";
END IF;
CASE c IS
-- Control character keys
WHEN 1 => RETURN "CONTROL_A";
WHEN 2 => RETURN "CONTROL_B";
WHEN 3 => RETURN "CONTROL_C";
WHEN 4 => RETURN "CONTROL_D";
WHEN 5 => RETURN "CONTROL_E";
WHEN 6 => RETURN "CONTROL_F";
WHEN 7 => RETURN "CONTROL_G";
WHEN 8 => RETURN "CONTROL_H";
WHEN 9 => RETURN "CONTROL_I";
WHEN 10 => RETURN "CONTROL_J";
WHEN 11 => RETURN "CONTROL_K";
WHEN 12 => RETURN "CONTROL_L";
WHEN 13 => RETURN "CONTROL_M";
WHEN 14 => RETURN "CONTROL_N";
WHEN 15 => RETURN "CONTROL_O";
WHEN 16 => RETURN "CONTROL_P";
WHEN 17 => RETURN "CONTROL_Q";
WHEN 18 => RETURN "CONTROL_R";
WHEN 19 => RETURN "CONTROL_S";
WHEN 20 => RETURN "CONTROL_T";
WHEN 21 => RETURN "CONTROL_U";
WHEN 22 => RETURN "CONTROL_V";
WHEN 23 => RETURN "CONTROL_W";
WHEN 24 => RETURN "CONTROL_X";
WHEN 25 => RETURN "CONTROL_Y";
WHEN 26 => RETURN "CONTROL_Z";
WHEN 27 => RETURN "ESC";
-- Printable character keys
WHEN 32 .. 126 | 160 .. 255 => RETURN Character'Val(c) & "";
-- Other keys
WHEN 8#0402# => RETURN "DOWN";
WHEN 8#0403# => RETURN "UP";
WHEN 8#0404# => RETURN "LEFT";
WHEN 8#0405# => RETURN "RIGHT";
WHEN 8#0406# => RETURN "HOME";
WHEN 8#0407# => RETURN "BACKSPACE";
WHEN 8#0411# => RETURN "F1";
WHEN 8#0412# => RETURN "F2";
WHEN 8#0413# => RETURN "F3";
WHEN 8#0414# => RETURN "F4";
WHEN 8#0415# => RETURN "F5";
WHEN 8#0416# => RETURN "F6";
WHEN 8#0417# => RETURN "F7";
WHEN 8#0420# => RETURN "F8";
WHEN 8#0421# => RETURN "F9";
WHEN 8#0422# => RETURN "F10";
WHEN 8#0423# => RETURN "F11";
WHEN 8#0424# => RETURN "F12";
WHEN 8#0512# => RETURN "DELETE";
WHEN 8#0513# => RETURN "INSERT";
WHEN 8#0522# => RETURN "PAGEDOWN";
WHEN 8#0523# => RETURN "PAGEUP";
WHEN 8#0550# => RETURN "END";
-- Everything else
WHEN OTHERS => RETURN Trim(Integer'Image(c));
END CASE;
END Name;
END ncurses.Keys;
|