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
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
  | // SPDX-License-Identifier: GPL-2.0 
 |  /* Do not edit this file! It was automatically generated by   */ 
 |  /*    loadkeys --mktable defkeymap.map > defkeymap.c          */ 
 |    
 |  #include <linux/types.h> 
 |  #include <linux/keyboard.h> 
 |  #include <linux/kd.h> 
 |    
 |  u_short plain_map[NR_KEYS] = { 
 |      0xf200,    0xf01b,    0xf031,    0xf032,    0xf033,    0xf034,    0xf035,    0xf036, 
 |      0xf037,    0xf038,    0xf039,    0xf030,    0xf02d,    0xf03d,    0xf07f,    0xf009, 
 |      0xfb71,    0xfb77,    0xfb65,    0xfb72,    0xfb74,    0xfb79,    0xfb75,    0xfb69, 
 |      0xfb6f,    0xfb70,    0xf05b,    0xf05d,    0xf201,    0xf702,    0xfb61,    0xfb73, 
 |      0xfb64,    0xfb66,    0xfb67,    0xfb68,    0xfb6a,    0xfb6b,    0xfb6c,    0xf03b, 
 |      0xf027,    0xf060,    0xf700,    0xf05c,    0xfb7a,    0xfb78,    0xfb63,    0xfb76, 
 |      0xfb62,    0xfb6e,    0xfb6d,    0xf02c,    0xf02e,    0xf02f,    0xf700,    0xf30c, 
 |      0xf703,    0xf020,    0xf207,    0xf100,    0xf101,    0xf102,    0xf103,    0xf104, 
 |      0xf105,    0xf106,    0xf107,    0xf108,    0xf109,    0xf208,    0xf209,    0xf307, 
 |      0xf308,    0xf309,    0xf30b,    0xf304,    0xf305,    0xf306,    0xf30a,    0xf301, 
 |      0xf302,    0xf303,    0xf300,    0xf310,    0xf206,    0xf200,    0xf03c,    0xf10a, 
 |      0xf10b,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200, 
 |      0xf30e,    0xf702,    0xf30d,    0xf01c,    0xf701,    0xf205,    0xf114,    0xf603, 
 |      0xf118,    0xf601,    0xf602,    0xf117,    0xf600,    0xf119,    0xf115,    0xf116, 
 |      0xf11a,    0xf10c,    0xf10d,    0xf11b,    0xf11c,    0xf110,    0xf311,    0xf11d, 
 |      0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200, 
 |  }; 
 |    
 |  u_short shift_map[NR_KEYS] = { 
 |      0xf200,    0xf01b,    0xf021,    0xf040,    0xf023,    0xf024,    0xf025,    0xf05e, 
 |      0xf026,    0xf02a,    0xf028,    0xf029,    0xf05f,    0xf02b,    0xf07f,    0xf009, 
 |      0xfb51,    0xfb57,    0xfb45,    0xfb52,    0xfb54,    0xfb59,    0xfb55,    0xfb49, 
 |      0xfb4f,    0xfb50,    0xf07b,    0xf07d,    0xf201,    0xf702,    0xfb41,    0xfb53, 
 |      0xfb44,    0xfb46,    0xfb47,    0xfb48,    0xfb4a,    0xfb4b,    0xfb4c,    0xf03a, 
 |      0xf022,    0xf07e,    0xf700,    0xf07c,    0xfb5a,    0xfb58,    0xfb43,    0xfb56, 
 |      0xfb42,    0xfb4e,    0xfb4d,    0xf03c,    0xf03e,    0xf03f,    0xf700,    0xf30c, 
 |      0xf703,    0xf020,    0xf207,    0xf10a,    0xf10b,    0xf10c,    0xf10d,    0xf10e, 
 |      0xf10f,    0xf110,    0xf111,    0xf112,    0xf113,    0xf213,    0xf203,    0xf307, 
 |      0xf308,    0xf309,    0xf30b,    0xf304,    0xf305,    0xf306,    0xf30a,    0xf301, 
 |      0xf302,    0xf303,    0xf300,    0xf310,    0xf206,    0xf200,    0xf03e,    0xf10a, 
 |      0xf10b,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200, 
 |      0xf30e,    0xf702,    0xf30d,    0xf200,    0xf701,    0xf205,    0xf114,    0xf603, 
 |      0xf20b,    0xf601,    0xf602,    0xf117,    0xf600,    0xf20a,    0xf115,    0xf116, 
 |      0xf11a,    0xf10c,    0xf10d,    0xf11b,    0xf11c,    0xf110,    0xf311,    0xf11d, 
 |      0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200, 
 |  }; 
 |    
 |  u_short altgr_map[NR_KEYS] = { 
 |      0xf200,    0xf200,    0xf200,    0xf040,    0xf200,    0xf024,    0xf200,    0xf200, 
 |      0xf07b,    0xf05b,    0xf05d,    0xf07d,    0xf05c,    0xf200,    0xf200,    0xf200, 
 |      0xfb71,    0xfb77,    0xf918,    0xfb72,    0xfb74,    0xfb79,    0xfb75,    0xfb69, 
 |      0xfb6f,    0xfb70,    0xf200,    0xf07e,    0xf201,    0xf702,    0xf914,    0xfb73, 
 |      0xf917,    0xf919,    0xfb67,    0xfb68,    0xfb6a,    0xfb6b,    0xfb6c,    0xf200, 
 |      0xf200,    0xf200,    0xf700,    0xf200,    0xfb7a,    0xfb78,    0xf916,    0xfb76, 
 |      0xf915,    0xfb6e,    0xfb6d,    0xf200,    0xf200,    0xf200,    0xf700,    0xf30c, 
 |      0xf703,    0xf200,    0xf207,    0xf50c,    0xf50d,    0xf50e,    0xf50f,    0xf510, 
 |      0xf511,    0xf512,    0xf513,    0xf514,    0xf515,    0xf208,    0xf202,    0xf911, 
 |      0xf912,    0xf913,    0xf30b,    0xf90e,    0xf90f,    0xf910,    0xf30a,    0xf90b, 
 |      0xf90c,    0xf90d,    0xf90a,    0xf310,    0xf206,    0xf200,    0xf07c,    0xf516, 
 |      0xf517,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200, 
 |      0xf30e,    0xf702,    0xf30d,    0xf200,    0xf701,    0xf205,    0xf114,    0xf603, 
 |      0xf118,    0xf601,    0xf602,    0xf117,    0xf600,    0xf119,    0xf115,    0xf116, 
 |      0xf11a,    0xf10c,    0xf10d,    0xf11b,    0xf11c,    0xf110,    0xf311,    0xf11d, 
 |      0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200, 
 |  }; 
 |    
 |  u_short ctrl_map[NR_KEYS] = { 
 |      0xf200,    0xf200,    0xf200,    0xf000,    0xf01b,    0xf01c,    0xf01d,    0xf01e, 
 |      0xf01f,    0xf07f,    0xf200,    0xf200,    0xf01f,    0xf200,    0xf008,    0xf200, 
 |      0xf011,    0xf017,    0xf005,    0xf012,    0xf014,    0xf019,    0xf015,    0xf009, 
 |      0xf00f,    0xf010,    0xf01b,    0xf01d,    0xf201,    0xf702,    0xf001,    0xf013, 
 |      0xf004,    0xf006,    0xf007,    0xf008,    0xf00a,    0xf00b,    0xf00c,    0xf200, 
 |      0xf007,    0xf000,    0xf700,    0xf01c,    0xf01a,    0xf018,    0xf003,    0xf016, 
 |      0xf002,    0xf00e,    0xf00d,    0xf200,    0xf20e,    0xf07f,    0xf700,    0xf30c, 
 |      0xf703,    0xf000,    0xf207,    0xf100,    0xf101,    0xf102,    0xf103,    0xf104, 
 |      0xf105,    0xf106,    0xf107,    0xf108,    0xf109,    0xf208,    0xf204,    0xf307, 
 |      0xf308,    0xf309,    0xf30b,    0xf304,    0xf305,    0xf306,    0xf30a,    0xf301, 
 |      0xf302,    0xf303,    0xf300,    0xf310,    0xf206,    0xf200,    0xf200,    0xf10a, 
 |      0xf10b,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200, 
 |      0xf30e,    0xf702,    0xf30d,    0xf01c,    0xf701,    0xf205,    0xf114,    0xf603, 
 |      0xf118,    0xf601,    0xf602,    0xf117,    0xf600,    0xf119,    0xf115,    0xf116, 
 |      0xf11a,    0xf10c,    0xf10d,    0xf11b,    0xf11c,    0xf110,    0xf311,    0xf11d, 
 |      0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200, 
 |  }; 
 |    
 |  u_short shift_ctrl_map[NR_KEYS] = { 
 |      0xf200,    0xf200,    0xf200,    0xf000,    0xf200,    0xf200,    0xf200,    0xf200, 
 |      0xf200,    0xf200,    0xf200,    0xf200,    0xf01f,    0xf200,    0xf200,    0xf200, 
 |      0xf011,    0xf017,    0xf005,    0xf012,    0xf014,    0xf019,    0xf015,    0xf009, 
 |      0xf00f,    0xf010,    0xf200,    0xf200,    0xf201,    0xf702,    0xf001,    0xf013, 
 |      0xf004,    0xf006,    0xf007,    0xf008,    0xf00a,    0xf00b,    0xf00c,    0xf200, 
 |      0xf200,    0xf200,    0xf700,    0xf200,    0xf01a,    0xf018,    0xf003,    0xf016, 
 |      0xf002,    0xf00e,    0xf00d,    0xf200,    0xf200,    0xf200,    0xf700,    0xf30c, 
 |      0xf703,    0xf200,    0xf207,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200, 
 |      0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf208,    0xf200,    0xf307, 
 |      0xf308,    0xf309,    0xf30b,    0xf304,    0xf305,    0xf306,    0xf30a,    0xf301, 
 |      0xf302,    0xf303,    0xf300,    0xf310,    0xf206,    0xf200,    0xf200,    0xf200, 
 |      0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200, 
 |      0xf30e,    0xf702,    0xf30d,    0xf200,    0xf701,    0xf205,    0xf114,    0xf603, 
 |      0xf118,    0xf601,    0xf602,    0xf117,    0xf600,    0xf119,    0xf115,    0xf116, 
 |      0xf11a,    0xf10c,    0xf10d,    0xf11b,    0xf11c,    0xf110,    0xf311,    0xf11d, 
 |      0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200, 
 |  }; 
 |    
 |  u_short alt_map[NR_KEYS] = { 
 |      0xf200,    0xf81b,    0xf831,    0xf832,    0xf833,    0xf834,    0xf835,    0xf836, 
 |      0xf837,    0xf838,    0xf839,    0xf830,    0xf82d,    0xf83d,    0xf87f,    0xf809, 
 |      0xf871,    0xf877,    0xf865,    0xf872,    0xf874,    0xf879,    0xf875,    0xf869, 
 |      0xf86f,    0xf870,    0xf85b,    0xf85d,    0xf80d,    0xf702,    0xf861,    0xf873, 
 |      0xf864,    0xf866,    0xf867,    0xf868,    0xf86a,    0xf86b,    0xf86c,    0xf83b, 
 |      0xf827,    0xf860,    0xf700,    0xf85c,    0xf87a,    0xf878,    0xf863,    0xf876, 
 |      0xf862,    0xf86e,    0xf86d,    0xf82c,    0xf82e,    0xf82f,    0xf700,    0xf30c, 
 |      0xf703,    0xf820,    0xf207,    0xf500,    0xf501,    0xf502,    0xf503,    0xf504, 
 |      0xf505,    0xf506,    0xf507,    0xf508,    0xf509,    0xf208,    0xf209,    0xf907, 
 |      0xf908,    0xf909,    0xf30b,    0xf904,    0xf905,    0xf906,    0xf30a,    0xf901, 
 |      0xf902,    0xf903,    0xf900,    0xf310,    0xf206,    0xf200,    0xf83c,    0xf50a, 
 |      0xf50b,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200, 
 |      0xf30e,    0xf702,    0xf30d,    0xf01c,    0xf701,    0xf205,    0xf114,    0xf603, 
 |      0xf118,    0xf210,    0xf211,    0xf117,    0xf600,    0xf119,    0xf115,    0xf116, 
 |      0xf11a,    0xf10c,    0xf10d,    0xf11b,    0xf11c,    0xf110,    0xf311,    0xf11d, 
 |      0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200, 
 |  }; 
 |    
 |  u_short ctrl_alt_map[NR_KEYS] = { 
 |      0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200, 
 |      0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200, 
 |      0xf811,    0xf817,    0xf805,    0xf812,    0xf814,    0xf819,    0xf815,    0xf809, 
 |      0xf80f,    0xf810,    0xf200,    0xf200,    0xf201,    0xf702,    0xf801,    0xf813, 
 |      0xf804,    0xf806,    0xf807,    0xf808,    0xf80a,    0xf80b,    0xf80c,    0xf200, 
 |      0xf200,    0xf200,    0xf700,    0xf200,    0xf81a,    0xf818,    0xf803,    0xf816, 
 |      0xf802,    0xf80e,    0xf80d,    0xf200,    0xf200,    0xf200,    0xf700,    0xf30c, 
 |      0xf703,    0xf200,    0xf207,    0xf500,    0xf501,    0xf502,    0xf503,    0xf504, 
 |      0xf505,    0xf506,    0xf507,    0xf508,    0xf509,    0xf208,    0xf200,    0xf307, 
 |      0xf308,    0xf309,    0xf30b,    0xf304,    0xf305,    0xf306,    0xf30a,    0xf301, 
 |      0xf302,    0xf303,    0xf300,    0xf20c,    0xf206,    0xf200,    0xf200,    0xf50a, 
 |      0xf50b,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200, 
 |      0xf30e,    0xf702,    0xf30d,    0xf200,    0xf701,    0xf205,    0xf114,    0xf603, 
 |      0xf118,    0xf601,    0xf602,    0xf117,    0xf600,    0xf119,    0xf115,    0xf20c, 
 |      0xf11a,    0xf10c,    0xf10d,    0xf11b,    0xf11c,    0xf110,    0xf311,    0xf11d, 
 |      0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200,    0xf200, 
 |  }; 
 |    
 |  ushort *key_maps[MAX_NR_KEYMAPS] = { 
 |      plain_map, shift_map, altgr_map, NULL, 
 |      ctrl_map, shift_ctrl_map, NULL, NULL, 
 |      alt_map, NULL, NULL, NULL, 
 |      ctrl_alt_map, NULL 
 |  }; 
 |    
 |  unsigned int keymap_count = 7; 
 |    
 |  /* 
 |   * Philosophy: most people do not define more strings, but they who do 
 |   * often want quite a lot of string space. So, we statically allocate 
 |   * the default and allocate dynamically in chunks of 512 bytes. 
 |   */ 
 |    
 |  char func_buf[] = { 
 |      '\033', '[', '[', 'A', 0,  
 |      '\033', '[', '[', 'B', 0,  
 |      '\033', '[', '[', 'C', 0,  
 |      '\033', '[', '[', 'D', 0,  
 |      '\033', '[', '[', 'E', 0,  
 |      '\033', '[', '1', '7', '~', 0,  
 |      '\033', '[', '1', '8', '~', 0,  
 |      '\033', '[', '1', '9', '~', 0,  
 |      '\033', '[', '2', '0', '~', 0,  
 |      '\033', '[', '2', '1', '~', 0,  
 |      '\033', '[', '2', '3', '~', 0,  
 |      '\033', '[', '2', '4', '~', 0,  
 |      '\033', '[', '2', '5', '~', 0,  
 |      '\033', '[', '2', '6', '~', 0,  
 |      '\033', '[', '2', '8', '~', 0,  
 |      '\033', '[', '2', '9', '~', 0,  
 |      '\033', '[', '3', '1', '~', 0,  
 |      '\033', '[', '3', '2', '~', 0,  
 |      '\033', '[', '3', '3', '~', 0,  
 |      '\033', '[', '3', '4', '~', 0,  
 |      '\033', '[', '1', '~', 0,  
 |      '\033', '[', '2', '~', 0,  
 |      '\033', '[', '3', '~', 0,  
 |      '\033', '[', '4', '~', 0,  
 |      '\033', '[', '5', '~', 0,  
 |      '\033', '[', '6', '~', 0,  
 |      '\033', '[', 'M', 0,  
 |      '\033', '[', 'P', 0,  
 |  }; 
 |    
 |  char *funcbufptr = func_buf; 
 |  int funcbufsize = sizeof(func_buf); 
 |  int funcbufleft = 0;          /* space left */ 
 |    
 |  char *func_table[MAX_NR_FUNC] = { 
 |      func_buf + 0, 
 |      func_buf + 5, 
 |      func_buf + 10, 
 |      func_buf + 15, 
 |      func_buf + 20, 
 |      func_buf + 25, 
 |      func_buf + 31, 
 |      func_buf + 37, 
 |      func_buf + 43, 
 |      func_buf + 49, 
 |      func_buf + 55, 
 |      func_buf + 61, 
 |      func_buf + 67, 
 |      func_buf + 73, 
 |      func_buf + 79, 
 |      func_buf + 85, 
 |      func_buf + 91, 
 |      func_buf + 97, 
 |      func_buf + 103, 
 |      func_buf + 109, 
 |      func_buf + 115, 
 |      func_buf + 120, 
 |      func_buf + 125, 
 |      func_buf + 130, 
 |      func_buf + 135, 
 |      func_buf + 140, 
 |      func_buf + 145, 
 |      NULL, 
 |      NULL, 
 |      func_buf + 149, 
 |      NULL, 
 |  }; 
 |    
 |  struct kbdiacruc accent_table[MAX_DIACR] = { 
 |      {'`', 'A', 0300},    {'`', 'a', 0340}, 
 |      {'\'', 'A', 0301},    {'\'', 'a', 0341}, 
 |      {'^', 'A', 0302},    {'^', 'a', 0342}, 
 |      {'~', 'A', 0303},    {'~', 'a', 0343}, 
 |      {'"', 'A', 0304},    {'"', 'a', 0344}, 
 |      {'O', 'A', 0305},    {'o', 'a', 0345}, 
 |      {'0', 'A', 0305},    {'0', 'a', 0345}, 
 |      {'A', 'A', 0305},    {'a', 'a', 0345}, 
 |      {'A', 'E', 0306},    {'a', 'e', 0346}, 
 |      {',', 'C', 0307},    {',', 'c', 0347}, 
 |      {'`', 'E', 0310},    {'`', 'e', 0350}, 
 |      {'\'', 'E', 0311},    {'\'', 'e', 0351}, 
 |      {'^', 'E', 0312},    {'^', 'e', 0352}, 
 |      {'"', 'E', 0313},    {'"', 'e', 0353}, 
 |      {'`', 'I', 0314},    {'`', 'i', 0354}, 
 |      {'\'', 'I', 0315},    {'\'', 'i', 0355}, 
 |      {'^', 'I', 0316},    {'^', 'i', 0356}, 
 |      {'"', 'I', 0317},    {'"', 'i', 0357}, 
 |      {'-', 'D', 0320},    {'-', 'd', 0360}, 
 |      {'~', 'N', 0321},    {'~', 'n', 0361}, 
 |      {'`', 'O', 0322},    {'`', 'o', 0362}, 
 |      {'\'', 'O', 0323},    {'\'', 'o', 0363}, 
 |      {'^', 'O', 0324},    {'^', 'o', 0364}, 
 |      {'~', 'O', 0325},    {'~', 'o', 0365}, 
 |      {'"', 'O', 0326},    {'"', 'o', 0366}, 
 |      {'/', 'O', 0330},    {'/', 'o', 0370}, 
 |      {'`', 'U', 0331},    {'`', 'u', 0371}, 
 |      {'\'', 'U', 0332},    {'\'', 'u', 0372}, 
 |      {'^', 'U', 0333},    {'^', 'u', 0373}, 
 |      {'"', 'U', 0334},    {'"', 'u', 0374}, 
 |      {'\'', 'Y', 0335},    {'\'', 'y', 0375}, 
 |      {'T', 'H', 0336},    {'t', 'h', 0376}, 
 |      {'s', 's', 0337},    {'"', 'y', 0377}, 
 |      {'s', 'z', 0337},    {'i', 'j', 0377}, 
 |  }; 
 |    
 |  unsigned int accent_table_size = 68; 
 |  
  |