1 /** \file
2  * \brief Keyboard Keys definitions.
3  *
4  * See Copyright Notice in "iup.h"
5  */
6 
7 /*
8 Attention: Changed when binding to D:
9 There were no types at all in the underlying C-source file, just a bunch of #define, but some would work with/be/result in int types
10 In the D binding code, the type of a key is the smallest Char type, that can represent the key's value, either char, wchar or dchar.
11 Likewise, the key related functions operate on Char types only, even if they are templates
12 My reasoning is: This reduces mixing keys with other arbitrary integral types 
13 This won't compile: auto keyA = 65; writeln("keyA is printable: ", iup_isprint(keyA)); // Error: template iup.iupkey.iup_isprint cannot deduce function from argument types !()(int)
14 This will  compile: char keyB = 66; writeln("keyB is printable: ", iup_isprint(keyB)); // if You insist on using int literal 66 instead of K_B; the compiler is smart enough to implicitely convert 66 to char
15 */
16 module iup.iupkey;
17 
18 import std.traits : isSomeChar;
19 
20 /* from 32 to 126, all character sets are equal,
21    the key code is the same as the ASCii character code. */
22 enum : char {
23      K_SP          = ' ',   /* 32 (0x20) */
24      K_exclam      = '!',   /* 33 */
25      K_quotedbl    = '\"',  /* 34 */
26      K_numbersign  = '#',   /* 35 */
27      K_dollar      = '$',   /* 36 */
28      K_percent     = '%',   /* 37 */
29      K_ampersand   = '&',   /* 38 */
30      K_apostrophe  = '\'',  /* 39 */
31      K_parentleft  = '(',   /* 40 */
32      K_parentright = ')',   /* 41 */
33      K_asterisk    = '*',   /* 42 */
34      K_plus        = '+',   /* 43 */
35      K_comma       = ',',   /* 44 */
36      K_minus       = '-',   /* 45 */
37      K_period      = '.',   /* 46 */
38      K_slash       = '/',   /* 47 */
39      K_0           = '0',   /* 48 (0x30) */
40      K_1           = '1',   /* 49 */
41      K_2           = '2',   /* 50 */
42      K_3           = '3',   /* 51 */
43      K_4           = '4',   /* 52 */
44      K_5           = '5',   /* 53 */
45      K_6           = '6',   /* 54 */
46      K_7           = '7',   /* 55 */
47      K_8           = '8',   /* 56 */
48      K_9           = '9',   /* 57 */
49      K_colon       = ':',   /* 58 */
50      K_semicolon   = ';',   /* 59 */
51      K_less        = '<',   /* 60 */
52      K_equal       = '=',   /* 61 */
53      K_greater     = '>',   /* 62 */
54      K_question    = '?',   /* 63 */
55      K_at          = '@',   /* 64 */
56      K_A           = 'A',   /* 65 (0x41) */
57      K_B           = 'B',   /* 66 */
58      K_C           = 'C',   /* 67 */
59      K_D           = 'D',   /* 68 */
60      K_E           = 'E',   /* 69 */
61      K_F           = 'F',   /* 70 */
62      K_G           = 'G',   /* 71 */
63      K_H           = 'H',   /* 72 */
64      K_I           = 'I',   /* 73 */
65      K_J           = 'J',   /* 74 */
66      K_K           = 'K',   /* 75 */
67      K_L           = 'L',   /* 76 */
68      K_M           = 'M',   /* 77 */
69      K_N           = 'N',   /* 78 */
70      K_O           = 'O',   /* 79 */
71      K_P           = 'P',   /* 80 */
72      K_Q           = 'Q',   /* 81 */
73      K_R           = 'R',   /* 82 */
74      K_S           = 'S',   /* 83 */
75      K_T           = 'T',   /* 84 */
76      K_U           = 'U',   /* 85 */
77      K_V           = 'V',   /* 86 */
78      K_W           = 'W',   /* 87 */
79      K_X           = 'X',   /* 88 */
80      K_Y           = 'Y',   /* 89 */
81      K_Z           = 'Z',   /* 90 */
82      K_bracketleft = '[',   /* 91 */
83      K_backslash   = '\\',  /* 92 */
84      K_bracketright= ']',   /* 93 */
85      K_circum      = '^',   /* 94 */
86      K_underscore  = '_',   /* 95 */
87      K_grave       = '`',   /* 96 */
88      K_a           = 'a',   /* 97 (0x61) */
89      K_b           = 'b',   /* 98 */
90      K_c           = 'c',   /* 99 */
91      K_d           = 'd',   /* 100 */
92      K_e           = 'e',   /* 101 */
93      K_f           = 'f',   /* 102 */
94      K_g           = 'g',   /* 103 */
95      K_h           = 'h',   /* 104 */
96      K_i           = 'i',   /* 105 */
97      K_j           = 'j',   /* 106 */
98      K_k           = 'k',   /* 107 */
99      K_l           = 'l',   /* 108 */
100      K_m           = 'm',   /* 109 */
101      K_n           = 'n',   /* 110 */
102      K_o           = 'o',   /* 111 */
103      K_p           = 'p',   /* 112 */
104      K_q           = 'q',   /* 113 */
105      K_r           = 'r',   /* 114 */
106      K_s           = 's',   /* 115 */
107      K_t           = 't',   /* 116 */
108      K_u           = 'u',   /* 117 */
109      K_v           = 'v',   /* 118 */
110      K_w           = 'w',   /* 119 */
111      K_x           = 'x',   /* 120 */
112      K_y           = 'y',   /* 121 */
113      K_z           = 'z',   /* 122 */
114      K_braceleft   = '{',   /* 123 */
115      K_bar         = '|',   /* 124 */
116      K_braceright  = '}',   /* 125 */
117      K_tilde       = '~',   /* 126 (0x7E) */
118 }
119 
120 /* Printable ASCii keys */
121 
122 bool iup_isprint(T)(T _c) if (isSomeChar!T) { return _c > 31 && _c < 127; }
123 
124 /* also define the escape sequences that have keys associated */
125 
126 enum : char {
127         K_BS          = '\b',       /* 8 */
128         K_TAB         = '\t',       /* 9 */
129         K_LF          = '\n',       /* 10 (0x0A) not a real key, is a combination of CR with a modifier, just to document */
130         K_CR          = '\r',       /* 13 (0x0D) */
131 }
132 /* backward compatible definitions */
133 
134 enum : char {
135         K_quoteleft   = K_grave,
136         K_quoteright  = K_apostrophe,
137 }
138 
139 /* IUP Extended Key Codes, range start at 128      */
140 
141 bool iup_isXkey(T)(T _c) if (isSomeChar!T) { return _c >= 128; }
142 
143 /* These use the same definition as X11 and GDK.
144    This also means that any X11 or GDK definition can also be used. */
145 
146 enum : wchar {
147 			K_PAUSE    = 0xFF13,
148 			K_ESC      = 0xFF1B,
149 			K_HOME     = 0xFF50,
150 			K_LEFT     = 0xFF51,
151 			K_UP       = 0xFF52,
152 			K_RIGHT    = 0xFF53,
153 			K_DOWN     = 0xFF54,
154 			K_PGUP     = 0xFF55,
155 			K_PGDN     = 0xFF56,
156 			K_END      = 0xFF57,
157 			K_MIDDLE   = 0xFF0B,
158 			K_Print    = 0xFF61,
159 			K_INS      = 0xFF63,
160 			K_Menu     = 0xFF67,
161 			K_DEL      = 0xFFFF,
162 			K_F1       = 0xFFBE,
163 			K_F2       = 0xFFBF,
164 			K_F3       = 0xFFC0,
165 			K_F4       = 0xFFC1,
166 			K_F5       = 0xFFC2,
167 			K_F6       = 0xFFC3,
168 			K_F7       = 0xFFC4,
169 			K_F8       = 0xFFC5,
170 			K_F9       = 0xFFC6,
171 			K_F10      = 0xFFC7,
172 			K_F11      = 0xFFC8,
173 			K_F12      = 0xFFC9,
174 			K_F13      = 0xFFCA,
175 			K_F14      = 0xFFCB,
176 			K_F15      = 0xFFCC,
177 			K_F16      = 0xFFCD,
178 			K_F17      = 0xFFCE,
179 			K_F18      = 0xFFCF,
180 			K_F19      = 0xFFD0,
181 			K_F20      = 0xFFD1,
182 
183 			/* no Shift/Ctrl/Alt */
184 			K_LSHIFT   = 0xFFE1,
185 			K_RSHIFT   = 0xFFE2,
186 			K_LCTRL    = 0xFFE3,
187 			K_RCTRL    = 0xFFE4,
188 			K_LALT     = 0xFFE9,
189 			K_RALT     = 0xFFEA,
190 
191 			K_NUM      = 0xFF7F,
192 			K_SCROLL   = 0xFF14,
193 			K_CAPS     = 0xFFE5,
194 
195 			/* Mac clear button. Value randomly picked trying to avoid clashing with an existing value. */
196 			K_CLEAR    = 0xFFD2,
197 			/* Help button if anybody has it. Value randomly picked trying to avoid clashing with an existing value. */
198 			K_HELP     = 0xFFD3,
199 
200 			/* Also, these are the same as the Latin-1 definition */
201 
202 			K_ccedilla  = 0x00E7,
203 			K_Ccedilla  = 0x00C7,
204 			K_acute     = 0x00B4,  /* no Shift/Ctrl/Alt */
205 			K_diaeresis = 0x00A8,
206 }
207 
208 /******************************************************/
209 /* Modifiers use last 4 bits. Since IUP 3.9           */
210 /* These modifiers definitions are specific to IUP    */
211 /******************************************************/
212 
213 bool iup_isShiftXkey()(dchar _c)  { return (_c & 0x1000_0000) != 0; }
214 bool iup_isCtrlXkey()(dchar _c)   { return (_c & 0x2000_0000) != 0; }
215 bool iup_isAltXkey()(dchar _c)    { return (_c & 0x4000_0000) != 0; }
216 bool iup_isSysXkey()(dchar _c)    { return (_c & 0x8000_0000) != 0; }
217 
218 dchar iup_XkeyBase()(dchar _c)     { return _c & 0x0FFF_FFFF; }
219 dchar iup_XkeyShift()(dchar _c)    { return _c | 0x1000_0000; }   /* Shift  */
220 dchar iup_XkeyCtrl()(dchar _c)     { return _c | 0x2000_0000; }   /* Ctrl   */
221 dchar iup_XkeyAlt()(dchar _c)      { return _c | 0x4000_0000; }   /* Alt    */
222 dchar iup_XkeySys()(dchar _c)      { return _c | 0x8000_0000; }   /* Sys (Win or Apple) - notice that using "int" will display a negative value */
223 
224 /* These definitions are here for backward compatibility 
225    and to simplify some key combination usage.
226    But since IUP 3.9, modifiers can be combined with any key
227    and they can be mixed together. */
228 
229 enum : dchar {
230 			K_sHOME    = iup_XkeyShift(K_HOME   ),
231 			K_sUP      = iup_XkeyShift(K_UP     ),
232 			K_sPGUP    = iup_XkeyShift(K_PGUP   ),
233 			K_sLEFT    = iup_XkeyShift(K_LEFT   ),
234 			K_sMIDDLE  = iup_XkeyShift(K_MIDDLE ),
235 			K_sRIGHT   = iup_XkeyShift(K_RIGHT  ),
236 			K_sEND     = iup_XkeyShift(K_END    ),
237 			K_sDOWN    = iup_XkeyShift(K_DOWN   ),
238 			K_sPGDN    = iup_XkeyShift(K_PGDN   ),
239 			K_sINS     = iup_XkeyShift(K_INS    ),
240 			K_sDEL     = iup_XkeyShift(K_DEL    ),
241 			K_sSP      = iup_XkeyShift(K_SP     ),
242 			K_sTAB     = iup_XkeyShift(K_TAB    ),
243 			K_sCR      = iup_XkeyShift(K_CR     ),
244 			K_sBS      = iup_XkeyShift(K_BS     ),
245 			K_sPAUSE   = iup_XkeyShift(K_PAUSE  ),
246 			K_sESC     = iup_XkeyShift(K_ESC    ),
247 			K_sCLEAR   = iup_XkeyShift(K_CLEAR  ),
248 			K_sF1      = iup_XkeyShift(K_F1     ),
249 			K_sF2      = iup_XkeyShift(K_F2     ),
250 			K_sF3      = iup_XkeyShift(K_F3     ),
251 			K_sF4      = iup_XkeyShift(K_F4     ),
252 			K_sF5      = iup_XkeyShift(K_F5     ),
253 			K_sF6      = iup_XkeyShift(K_F6     ),
254 			K_sF7      = iup_XkeyShift(K_F7     ),
255 			K_sF8      = iup_XkeyShift(K_F8     ),
256 			K_sF9      = iup_XkeyShift(K_F9     ),
257 			K_sF10     = iup_XkeyShift(K_F10    ),
258 			K_sF11     = iup_XkeyShift(K_F11    ),
259 			K_sF12     = iup_XkeyShift(K_F12    ),
260 			K_sF13     = iup_XkeyShift(K_F13    ),
261 			K_sF14     = iup_XkeyShift(K_F14    ),
262 			K_sF15     = iup_XkeyShift(K_F15    ),
263 			K_sF16     = iup_XkeyShift(K_F16    ),
264 			K_sF17     = iup_XkeyShift(K_F17    ),
265 			K_sF18     = iup_XkeyShift(K_F18    ),
266 			K_sF19     = iup_XkeyShift(K_F19    ),
267 			K_sF20     = iup_XkeyShift(K_F20    ),
268 			K_sPrint   = iup_XkeyShift(K_Print  ),
269 			K_sMenu    = iup_XkeyShift(K_Menu   ),
270 
271 			K_cHOME    = iup_XkeyCtrl(K_HOME    ),
272 			K_cUP      = iup_XkeyCtrl(K_UP      ),
273 			K_cPGUP    = iup_XkeyCtrl(K_PGUP    ),
274 			K_cLEFT    = iup_XkeyCtrl(K_LEFT    ),
275 			K_cMIDDLE  = iup_XkeyCtrl(K_MIDDLE  ),
276 			K_cRIGHT   = iup_XkeyCtrl(K_RIGHT   ),
277 			K_cEND     = iup_XkeyCtrl(K_END     ),
278 			K_cDOWN    = iup_XkeyCtrl(K_DOWN    ),
279 			K_cPGDN    = iup_XkeyCtrl(K_PGDN    ),
280 			K_cINS     = iup_XkeyCtrl(K_INS     ),
281 			K_cDEL     = iup_XkeyCtrl(K_DEL     ),
282 			K_cSP      = iup_XkeyCtrl(K_SP      ),
283 			K_cTAB     = iup_XkeyCtrl(K_TAB     ),
284 			K_cCR      = iup_XkeyCtrl(K_CR      ),
285 			K_cBS      = iup_XkeyCtrl(K_BS      ),
286 			K_cPAUSE   = iup_XkeyCtrl(K_PAUSE   ),
287 			K_cESC     = iup_XkeyCtrl(K_ESC     ),
288 			K_cCLEAR   = iup_XkeyCtrl(K_CLEAR   ),
289 			K_cCcedilla= iup_XkeyCtrl(K_Ccedilla),
290 			K_cF1      = iup_XkeyCtrl(K_F1      ),
291 			K_cF2      = iup_XkeyCtrl(K_F2      ),
292 			K_cF3      = iup_XkeyCtrl(K_F3      ),
293 			K_cF4      = iup_XkeyCtrl(K_F4      ),
294 			K_cF5      = iup_XkeyCtrl(K_F5      ),
295 			K_cF6      = iup_XkeyCtrl(K_F6      ),
296 			K_cF7      = iup_XkeyCtrl(K_F7      ),
297 			K_cF8      = iup_XkeyCtrl(K_F8      ),
298 			K_cF9      = iup_XkeyCtrl(K_F9      ),
299 			K_cF10     = iup_XkeyCtrl(K_F10     ),
300 			K_cF11     = iup_XkeyCtrl(K_F11     ),
301 			K_cF12     = iup_XkeyCtrl(K_F12     ),
302 			K_cF13     = iup_XkeyCtrl(K_F13     ),
303 			K_cF14     = iup_XkeyCtrl(K_F14     ),
304 			K_cF15     = iup_XkeyCtrl(K_F15     ),
305 			K_cF16     = iup_XkeyCtrl(K_F16     ),
306 			K_cF17     = iup_XkeyCtrl(K_F17     ),
307 			K_cF18     = iup_XkeyCtrl(K_F18     ),
308 			K_cF19     = iup_XkeyCtrl(K_F19     ),
309 			K_cF20     = iup_XkeyCtrl(K_F20     ),
310 			K_cPrint   = iup_XkeyCtrl(K_Print   ),
311 			K_cMenu    = iup_XkeyCtrl(K_Menu    ),
312 
313 			K_mHOME    = iup_XkeyAlt(K_HOME    ),
314 			K_mUP      = iup_XkeyAlt(K_UP      ),
315 			K_mPGUP    = iup_XkeyAlt(K_PGUP    ),
316 			K_mLEFT    = iup_XkeyAlt(K_LEFT    ),
317 			K_mMIDDLE  = iup_XkeyAlt(K_MIDDLE  ),
318 			K_mRIGHT   = iup_XkeyAlt(K_RIGHT   ),
319 			K_mEND     = iup_XkeyAlt(K_END     ),
320 			K_mDOWN    = iup_XkeyAlt(K_DOWN    ),
321 			K_mPGDN    = iup_XkeyAlt(K_PGDN    ),
322 			K_mINS     = iup_XkeyAlt(K_INS     ),
323 			K_mDEL     = iup_XkeyAlt(K_DEL     ),
324 			K_mSP      = iup_XkeyAlt(K_SP      ),
325 			K_mTAB     = iup_XkeyAlt(K_TAB     ),
326 			K_mCR      = iup_XkeyAlt(K_CR      ),
327 			K_mBS      = iup_XkeyAlt(K_BS      ),
328 			K_mPAUSE   = iup_XkeyAlt(K_PAUSE   ),
329 			K_mESC     = iup_XkeyAlt(K_ESC     ),
330 			K_mCLEAR   = iup_XkeyAlt(K_CLEAR   ),
331 			K_mCcedilla= iup_XkeyAlt(K_Ccedilla),
332 			K_mF1      = iup_XkeyAlt(K_F1      ),
333 			K_mF2      = iup_XkeyAlt(K_F2      ),
334 			K_mF3      = iup_XkeyAlt(K_F3      ),
335 			K_mF4      = iup_XkeyAlt(K_F4      ),
336 			K_mF5      = iup_XkeyAlt(K_F5      ),
337 			K_mF6      = iup_XkeyAlt(K_F6      ),
338 			K_mF7      = iup_XkeyAlt(K_F7      ),
339 			K_mF8      = iup_XkeyAlt(K_F8      ),
340 			K_mF9      = iup_XkeyAlt(K_F9      ),
341 			K_mF10     = iup_XkeyAlt(K_F10     ),
342 			K_mF11     = iup_XkeyAlt(K_F11     ),
343 			K_mF12     = iup_XkeyAlt(K_F12     ),
344 			K_mF13     = iup_XkeyAlt(K_F13     ),
345 			K_mF14     = iup_XkeyAlt(K_F14     ),
346 			K_mF15     = iup_XkeyAlt(K_F15     ),
347 			K_mF16     = iup_XkeyAlt(K_F16     ),
348 			K_mF17     = iup_XkeyAlt(K_F17     ),
349 			K_mF18     = iup_XkeyAlt(K_F18     ),
350 			K_mF19     = iup_XkeyAlt(K_F19     ),
351 			K_mF20     = iup_XkeyAlt(K_F20     ),
352 			K_mPrint   = iup_XkeyAlt(K_Print   ),
353 			K_mMenu    = iup_XkeyAlt(K_Menu    ),
354 
355 			K_yHOME    = iup_XkeySys(K_HOME    ),
356 			K_yUP      = iup_XkeySys(K_UP      ),
357 			K_yPGUP    = iup_XkeySys(K_PGUP    ),
358 			K_yLEFT    = iup_XkeySys(K_LEFT    ),
359 			K_yMIDDLE  = iup_XkeySys(K_MIDDLE  ),
360 			K_yRIGHT   = iup_XkeySys(K_RIGHT   ),
361 			K_yEND     = iup_XkeySys(K_END     ),
362 			K_yDOWN    = iup_XkeySys(K_DOWN    ),
363 			K_yPGDN    = iup_XkeySys(K_PGDN    ),
364 			K_yINS     = iup_XkeySys(K_INS     ),
365 			K_yDEL     = iup_XkeySys(K_DEL     ),
366 			K_ySP      = iup_XkeySys(K_SP      ),
367 			K_yTAB     = iup_XkeySys(K_TAB     ),
368 			K_yCR      = iup_XkeySys(K_CR      ),
369 			K_yBS      = iup_XkeySys(K_BS      ),
370 			K_yPAUSE   = iup_XkeySys(K_PAUSE   ),
371 			K_yESC     = iup_XkeySys(K_ESC     ),
372 			K_yCLEAR   = iup_XkeySys(K_CLEAR   ),
373 			K_yCcedilla= iup_XkeySys(K_Ccedilla),
374 			K_yF1      = iup_XkeySys(K_F1      ),
375 			K_yF2      = iup_XkeySys(K_F2      ),
376 			K_yF3      = iup_XkeySys(K_F3      ),
377 			K_yF4      = iup_XkeySys(K_F4      ),
378 			K_yF5      = iup_XkeySys(K_F5      ),
379 			K_yF6      = iup_XkeySys(K_F6      ),
380 			K_yF7      = iup_XkeySys(K_F7      ),
381 			K_yF8      = iup_XkeySys(K_F8      ),
382 			K_yF9      = iup_XkeySys(K_F9      ),
383 			K_yF10     = iup_XkeySys(K_F10     ),
384 			K_yF11     = iup_XkeySys(K_F11     ),
385 			K_yF12     = iup_XkeySys(K_F12     ),
386 			K_yF13     = iup_XkeySys(K_F13     ),
387 			K_yF14     = iup_XkeySys(K_F14     ),
388 			K_yF15     = iup_XkeySys(K_F15     ),
389 			K_yF16     = iup_XkeySys(K_F16     ),
390 			K_yF17     = iup_XkeySys(K_F17     ),
391 			K_yF18     = iup_XkeySys(K_F18     ),
392 			K_yF19     = iup_XkeySys(K_F19     ),
393 			K_yF20     = iup_XkeySys(K_F20     ),
394 			K_yPrint   = iup_XkeySys(K_Print   ),
395 			K_yMenu    = iup_XkeySys(K_Menu    ),
396 
397 			K_sPlus        = iup_XkeyShift(K_plus    ),
398 			K_sComma       = iup_XkeyShift(K_comma   ),
399 			K_sMinus       = iup_XkeyShift(K_minus   ),
400 			K_sPeriod      = iup_XkeyShift(K_period  ),
401 			K_sSlash       = iup_XkeyShift(K_slash   ),
402 			K_sAsterisk    = iup_XkeyShift(K_asterisk),
403 
404 			K_cA    = iup_XkeyCtrl(K_A),
405 			K_cB    = iup_XkeyCtrl(K_B),
406 			K_cC    = iup_XkeyCtrl(K_C),
407 			K_cD    = iup_XkeyCtrl(K_D),
408 			K_cE    = iup_XkeyCtrl(K_E),
409 			K_cF    = iup_XkeyCtrl(K_F),
410 			K_cG    = iup_XkeyCtrl(K_G),
411 			K_cH    = iup_XkeyCtrl(K_H),
412 			K_cI    = iup_XkeyCtrl(K_I),
413 			K_cJ    = iup_XkeyCtrl(K_J),
414 			K_cK    = iup_XkeyCtrl(K_K),
415 			K_cL    = iup_XkeyCtrl(K_L),
416 			K_cM    = iup_XkeyCtrl(K_M),
417 			K_cN    = iup_XkeyCtrl(K_N),
418 			K_cO    = iup_XkeyCtrl(K_O),
419 			K_cP    = iup_XkeyCtrl(K_P),
420 			K_cQ    = iup_XkeyCtrl(K_Q),
421 			K_cR    = iup_XkeyCtrl(K_R),
422 			K_cS    = iup_XkeyCtrl(K_S),
423 			K_cT    = iup_XkeyCtrl(K_T),
424 			K_cU    = iup_XkeyCtrl(K_U),
425 			K_cV    = iup_XkeyCtrl(K_V),
426 			K_cW    = iup_XkeyCtrl(K_W),
427 			K_cX    = iup_XkeyCtrl(K_X),
428 			K_cY    = iup_XkeyCtrl(K_Y),
429 			K_cZ    = iup_XkeyCtrl(K_Z),
430 			K_c1    = iup_XkeyCtrl(K_1),
431 			K_c2    = iup_XkeyCtrl(K_2),
432 			K_c3    = iup_XkeyCtrl(K_3),
433 			K_c4    = iup_XkeyCtrl(K_4),
434 			K_c5    = iup_XkeyCtrl(K_5),
435 			K_c6    = iup_XkeyCtrl(K_6),
436 			K_c7    = iup_XkeyCtrl(K_7),
437 			K_c8    = iup_XkeyCtrl(K_8),
438 			K_c9    = iup_XkeyCtrl(K_9),
439 			K_c0    = iup_XkeyCtrl(K_0),
440 			K_cPlus        = iup_XkeyCtrl(K_plus        ),
441 			K_cComma       = iup_XkeyCtrl(K_comma       ),
442 			K_cMinus       = iup_XkeyCtrl(K_minus       ),
443 			K_cPeriod      = iup_XkeyCtrl(K_period      ),
444 			K_cSlash       = iup_XkeyCtrl(K_slash       ),
445 			K_cSemicolon   = iup_XkeyCtrl(K_semicolon   ),
446 			K_cEqual       = iup_XkeyCtrl(K_equal       ),
447 			K_cBracketleft = iup_XkeyCtrl(K_bracketleft ),
448 			K_cBracketright= iup_XkeyCtrl(K_bracketright),
449 			K_cBackslash   = iup_XkeyCtrl(K_backslash   ),
450 			K_cAsterisk    = iup_XkeyCtrl(K_asterisk    ),
451 
452 			K_mA    = iup_XkeyAlt(K_A),
453 			K_mB    = iup_XkeyAlt(K_B),
454 			K_mC    = iup_XkeyAlt(K_C),
455 			K_mD    = iup_XkeyAlt(K_D),
456 			K_mE    = iup_XkeyAlt(K_E),
457 			K_mF    = iup_XkeyAlt(K_F),
458 			K_mG    = iup_XkeyAlt(K_G),
459 			K_mH    = iup_XkeyAlt(K_H),
460 			K_mI    = iup_XkeyAlt(K_I),
461 			K_mJ    = iup_XkeyAlt(K_J),
462 			K_mK    = iup_XkeyAlt(K_K),
463 			K_mL    = iup_XkeyAlt(K_L),
464 			K_mM    = iup_XkeyAlt(K_M),
465 			K_mN    = iup_XkeyAlt(K_N),
466 			K_mO    = iup_XkeyAlt(K_O),
467 			K_mP    = iup_XkeyAlt(K_P),
468 			K_mQ    = iup_XkeyAlt(K_Q),
469 			K_mR    = iup_XkeyAlt(K_R),
470 			K_mS    = iup_XkeyAlt(K_S),
471 			K_mT    = iup_XkeyAlt(K_T),
472 			K_mU    = iup_XkeyAlt(K_U),
473 			K_mV    = iup_XkeyAlt(K_V),
474 			K_mW    = iup_XkeyAlt(K_W),
475 			K_mX    = iup_XkeyAlt(K_X),
476 			K_mY    = iup_XkeyAlt(K_Y),
477 			K_mZ    = iup_XkeyAlt(K_Z),
478 			K_m1    = iup_XkeyAlt(K_1),
479 			K_m2    = iup_XkeyAlt(K_2),
480 			K_m3    = iup_XkeyAlt(K_3),
481 			K_m4    = iup_XkeyAlt(K_4),
482 			K_m5    = iup_XkeyAlt(K_5),
483 			K_m6    = iup_XkeyAlt(K_6),
484 			K_m7    = iup_XkeyAlt(K_7),
485 			K_m8    = iup_XkeyAlt(K_8),
486 			K_m9    = iup_XkeyAlt(K_9),
487 			K_m0    = iup_XkeyAlt(K_0),
488 			K_mPlus        = iup_XkeyAlt(K_plus        ),
489 			K_mComma       = iup_XkeyAlt(K_comma       ),
490 			K_mMinus       = iup_XkeyAlt(K_minus       ),
491 			K_mPeriod      = iup_XkeyAlt(K_period      ),
492 			K_mSlash       = iup_XkeyAlt(K_slash       ),
493 			K_mSemicolon   = iup_XkeyAlt(K_semicolon   ),
494 			K_mEqual       = iup_XkeyAlt(K_equal       ),
495 			K_mBracketleft = iup_XkeyAlt(K_bracketleft ),
496 			K_mBracketright= iup_XkeyAlt(K_bracketright),
497 			K_mBackslash   = iup_XkeyAlt(K_backslash   ),
498 			K_mAsterisk    = iup_XkeyAlt(K_asterisk    ),
499 
500 			K_yA    = iup_XkeySys(K_A),
501 			K_yB    = iup_XkeySys(K_B),
502 			K_yC    = iup_XkeySys(K_C),
503 			K_yD    = iup_XkeySys(K_D),
504 			K_yE    = iup_XkeySys(K_E),
505 			K_yF    = iup_XkeySys(K_F),
506 			K_yG    = iup_XkeySys(K_G),
507 			K_yH    = iup_XkeySys(K_H),
508 			K_yI    = iup_XkeySys(K_I),
509 			K_yJ    = iup_XkeySys(K_J),
510 			K_yK    = iup_XkeySys(K_K),
511 			K_yL    = iup_XkeySys(K_L),
512 			K_yM    = iup_XkeySys(K_M),
513 			K_yN    = iup_XkeySys(K_N),
514 			K_yO    = iup_XkeySys(K_O),
515 			K_yP    = iup_XkeySys(K_P),
516 			K_yQ    = iup_XkeySys(K_Q),
517 			K_yR    = iup_XkeySys(K_R),
518 			K_yS    = iup_XkeySys(K_S),
519 			K_yT    = iup_XkeySys(K_T),
520 			K_yU    = iup_XkeySys(K_U),
521 			K_yV    = iup_XkeySys(K_V),
522 			K_yW    = iup_XkeySys(K_W),
523 			K_yX    = iup_XkeySys(K_X),
524 			K_yY    = iup_XkeySys(K_Y),
525 			K_yZ    = iup_XkeySys(K_Z),
526 			K_y1    = iup_XkeySys(K_1),
527 			K_y2    = iup_XkeySys(K_2),
528 			K_y3    = iup_XkeySys(K_3),
529 			K_y4    = iup_XkeySys(K_4),
530 			K_y5    = iup_XkeySys(K_5),
531 			K_y6    = iup_XkeySys(K_6),
532 			K_y7    = iup_XkeySys(K_7),
533 			K_y8    = iup_XkeySys(K_8),
534 			K_y9    = iup_XkeySys(K_9),
535 			K_y0    = iup_XkeySys(K_0),
536 			K_yPlus        = iup_XkeySys(K_plus        ),
537 			K_yComma       = iup_XkeySys(K_comma       ),
538 			K_yMinus       = iup_XkeySys(K_minus       ),
539 			K_yPeriod      = iup_XkeySys(K_period      ),
540 			K_ySlash       = iup_XkeySys(K_slash       ),
541 			K_ySemicolon   = iup_XkeySys(K_semicolon   ),
542 			K_yEqual       = iup_XkeySys(K_equal       ),
543 			K_yBracketleft = iup_XkeySys(K_bracketleft ),
544 			K_yBracketright= iup_XkeySys(K_bracketright),
545 			K_yBackslash   = iup_XkeySys(K_backslash   ),
546 			K_yAsterisk    = iup_XkeySys(K_asterisk    ),
547 }