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 
175 /* no Shift/Ctrl/Alt */
176 			K_LSHIFT   = 0xFFE1,
177 			K_RSHIFT   = 0xFFE2,
178 			K_LCTRL    = 0xFFE3,
179 			K_RCTRL    = 0xFFE4,
180 			K_LALT     = 0xFFE9,
181 			K_RALT     = 0xFFEA,
182 
183 			K_NUM      = 0xFF7F,
184 			K_SCROLL   = 0xFF14,
185 			K_CAPS     = 0xFFE5,
186 
187 /* Also, these are the same as the Latin-1 definition */
188 
189 			K_ccedilla  = 0x00E7,
190 			K_Ccedilla  = 0x00C7,
191 			K_acute     = 0x00B4,  /* no Shift/Ctrl/Alt */
192 			K_diaeresis = 0x00A8,
193 }
194 
195 /******************************************************/
196 /* Modifiers use last 4 bits. Since IUP 3.9           */
197 /* These modifiers definitions are specific to IUP    */
198 /******************************************************/
199 
200 bool iup_isShiftXkey(dchar _c)  { return _c & 0x1000_0000; }
201 bool iup_isCtrlXkey(dchar _c)   { return _c & 0x2000_0000; }
202 bool iup_isAltXkey(dchar _c)    { return _c & 0x4000_0000; }
203 bool iup_isSysXkey(dchar _c)    { return _c & 0x8000_0000; }
204 
205 dchar iup_XkeyBase(dchar _c)     { return _c & 0x0FFF_FFFF; }
206 dchar iup_XkeyShift(dchar _c)    { return _c | 0x1000_0000; }   /* Shift  */
207 dchar iup_XkeyCtrl(dchar _c)     { return _c | 0x2000_0000; }   /* Ctrl   */
208 dchar iup_XkeyAlt(dchar _c)      { return _c | 0x4000_0000; }   /* Alt    */
209 dchar iup_XkeySys(dchar _c)      { return _c | 0x8000_0000; }   /* Sys (Win or Apple) */
210 
211 /* These definitions are here for backward compatibility 
212    and to simplify some key combination usage.
213    But since IUP 3.9, modifiers can be combined with any key
214    and they can be mixed together. */
215 
216 enum : dchar {
217 			K_sHOME    = iup_XkeyShift(K_HOME   ),
218 			K_sUP      = iup_XkeyShift(K_UP     ),
219 			K_sPGUP    = iup_XkeyShift(K_PGUP   ),
220 			K_sLEFT    = iup_XkeyShift(K_LEFT   ),
221 			K_sMIDDLE  = iup_XkeyShift(K_MIDDLE ),
222 			K_sRIGHT   = iup_XkeyShift(K_RIGHT  ),
223 			K_sEND     = iup_XkeyShift(K_END    ),
224 			K_sDOWN    = iup_XkeyShift(K_DOWN   ),
225 			K_sPGDN    = iup_XkeyShift(K_PGDN   ),
226 			K_sINS     = iup_XkeyShift(K_INS    ),
227 			K_sDEL     = iup_XkeyShift(K_DEL    ),
228 			K_sSP      = iup_XkeyShift(K_SP     ),
229 			K_sTAB     = iup_XkeyShift(K_TAB    ),
230 			K_sCR      = iup_XkeyShift(K_CR     ),
231 			K_sBS      = iup_XkeyShift(K_BS     ),
232 			K_sPAUSE   = iup_XkeyShift(K_PAUSE  ),
233 			K_sESC     = iup_XkeyShift(K_ESC    ),
234 			K_sF1      = iup_XkeyShift(K_F1     ),
235 			K_sF2      = iup_XkeyShift(K_F2     ),
236 			K_sF3      = iup_XkeyShift(K_F3     ),
237 			K_sF4      = iup_XkeyShift(K_F4     ),
238 			K_sF5      = iup_XkeyShift(K_F5     ),
239 			K_sF6      = iup_XkeyShift(K_F6     ),
240 			K_sF7      = iup_XkeyShift(K_F7     ),
241 			K_sF8      = iup_XkeyShift(K_F8     ),
242 			K_sF9      = iup_XkeyShift(K_F9     ),
243 			K_sF10     = iup_XkeyShift(K_F10    ),
244 			K_sF11     = iup_XkeyShift(K_F11    ),
245 			K_sF12     = iup_XkeyShift(K_F12    ),
246 			K_sPrint   = iup_XkeyShift(K_Print  ),
247 			K_sMenu    = iup_XkeyShift(K_Menu   ),
248 
249 			K_cHOME    = iup_XkeyCtrl(K_HOME    ),
250 			K_cUP      = iup_XkeyCtrl(K_UP      ),
251 			K_cPGUP    = iup_XkeyCtrl(K_PGUP    ),
252 			K_cLEFT    = iup_XkeyCtrl(K_LEFT    ),
253 			K_cMIDDLE  = iup_XkeyCtrl(K_MIDDLE  ),
254 			K_cRIGHT   = iup_XkeyCtrl(K_RIGHT   ),
255 			K_cEND     = iup_XkeyCtrl(K_END     ),
256 			K_cDOWN    = iup_XkeyCtrl(K_DOWN    ),
257 			K_cPGDN    = iup_XkeyCtrl(K_PGDN    ),
258 			K_cINS     = iup_XkeyCtrl(K_INS     ),
259 			K_cDEL     = iup_XkeyCtrl(K_DEL     ),
260 			K_cSP      = iup_XkeyCtrl(K_SP      ),
261 			K_cTAB     = iup_XkeyCtrl(K_TAB     ),
262 			K_cCR      = iup_XkeyCtrl(K_CR      ),
263 			K_cBS      = iup_XkeyCtrl(K_BS      ),
264 			K_cPAUSE   = iup_XkeyCtrl(K_PAUSE   ),
265 			K_cESC     = iup_XkeyCtrl(K_ESC     ),
266 			K_cCcedilla= iup_XkeyCtrl(K_Ccedilla),
267 			K_cF1      = iup_XkeyCtrl(K_F1      ),
268 			K_cF2      = iup_XkeyCtrl(K_F2      ),
269 			K_cF3      = iup_XkeyCtrl(K_F3      ),
270 			K_cF4      = iup_XkeyCtrl(K_F4      ),
271 			K_cF5      = iup_XkeyCtrl(K_F5      ),
272 			K_cF6      = iup_XkeyCtrl(K_F6      ),
273 			K_cF7      = iup_XkeyCtrl(K_F7      ),
274 			K_cF8      = iup_XkeyCtrl(K_F8      ),
275 			K_cF9      = iup_XkeyCtrl(K_F9      ),
276 			K_cF10     = iup_XkeyCtrl(K_F10     ),
277 			K_cF11     = iup_XkeyCtrl(K_F11     ),
278 			K_cF12     = iup_XkeyCtrl(K_F12     ),
279 			K_cPrint   = iup_XkeyCtrl(K_Print   ),
280 			K_cMenu    = iup_XkeyCtrl(K_Menu    ),
281 
282 			K_mHOME    = iup_XkeyAlt(K_HOME    ),
283 			K_mUP      = iup_XkeyAlt(K_UP      ),
284 			K_mPGUP    = iup_XkeyAlt(K_PGUP    ),
285 			K_mLEFT    = iup_XkeyAlt(K_LEFT    ),
286 			K_mMIDDLE  = iup_XkeyAlt(K_MIDDLE  ),
287 			K_mRIGHT   = iup_XkeyAlt(K_RIGHT   ),
288 			K_mEND     = iup_XkeyAlt(K_END     ),
289 			K_mDOWN    = iup_XkeyAlt(K_DOWN    ),
290 			K_mPGDN    = iup_XkeyAlt(K_PGDN    ),
291 			K_mINS     = iup_XkeyAlt(K_INS     ),
292 			K_mDEL     = iup_XkeyAlt(K_DEL     ),
293 			K_mSP      = iup_XkeyAlt(K_SP      ),
294 			K_mTAB     = iup_XkeyAlt(K_TAB     ),
295 			K_mCR      = iup_XkeyAlt(K_CR      ),
296 			K_mBS      = iup_XkeyAlt(K_BS      ),
297 			K_mPAUSE   = iup_XkeyAlt(K_PAUSE   ),
298 			K_mESC     = iup_XkeyAlt(K_ESC     ),
299 			K_mCcedilla= iup_XkeyAlt(K_Ccedilla),
300 			K_mF1      = iup_XkeyAlt(K_F1      ),
301 			K_mF2      = iup_XkeyAlt(K_F2      ),
302 			K_mF3      = iup_XkeyAlt(K_F3      ),
303 			K_mF4      = iup_XkeyAlt(K_F4      ),
304 			K_mF5      = iup_XkeyAlt(K_F5      ),
305 			K_mF6      = iup_XkeyAlt(K_F6      ),
306 			K_mF7      = iup_XkeyAlt(K_F7      ),
307 			K_mF8      = iup_XkeyAlt(K_F8      ),
308 			K_mF9      = iup_XkeyAlt(K_F9      ),
309 			K_mF10     = iup_XkeyAlt(K_F10     ),
310 			K_mF11     = iup_XkeyAlt(K_F11     ),
311 			K_mF12     = iup_XkeyAlt(K_F12     ),
312 			K_mPrint   = iup_XkeyAlt(K_Print   ),
313 			K_mMenu    = iup_XkeyAlt(K_Menu    ),
314 
315 			K_yHOME    = iup_XkeySys(K_HOME    ),
316 			K_yUP      = iup_XkeySys(K_UP      ),
317 			K_yPGUP    = iup_XkeySys(K_PGUP    ),
318 			K_yLEFT    = iup_XkeySys(K_LEFT    ),
319 			K_yMIDDLE  = iup_XkeySys(K_MIDDLE  ),
320 			K_yRIGHT   = iup_XkeySys(K_RIGHT   ),
321 			K_yEND     = iup_XkeySys(K_END     ),
322 			K_yDOWN    = iup_XkeySys(K_DOWN    ),
323 			K_yPGDN    = iup_XkeySys(K_PGDN    ),
324 			K_yINS     = iup_XkeySys(K_INS     ),
325 			K_yDEL     = iup_XkeySys(K_DEL     ),
326 			K_ySP      = iup_XkeySys(K_SP      ),
327 			K_yTAB     = iup_XkeySys(K_TAB     ),
328 			K_yCR      = iup_XkeySys(K_CR      ),
329 			K_yBS      = iup_XkeySys(K_BS      ),
330 			K_yPAUSE   = iup_XkeySys(K_PAUSE   ),
331 			K_yESC     = iup_XkeySys(K_ESC     ),
332 			K_yCcedilla= iup_XkeySys(K_Ccedilla),
333 			K_yF1      = iup_XkeySys(K_F1      ),
334 			K_yF2      = iup_XkeySys(K_F2      ),
335 			K_yF3      = iup_XkeySys(K_F3      ),
336 			K_yF4      = iup_XkeySys(K_F4      ),
337 			K_yF5      = iup_XkeySys(K_F5      ),
338 			K_yF6      = iup_XkeySys(K_F6      ),
339 			K_yF7      = iup_XkeySys(K_F7      ),
340 			K_yF8      = iup_XkeySys(K_F8      ),
341 			K_yF9      = iup_XkeySys(K_F9      ),
342 			K_yF10     = iup_XkeySys(K_F10     ),
343 			K_yF11     = iup_XkeySys(K_F11     ),
344 			K_yF12     = iup_XkeySys(K_F12     ),
345 			K_yPrint   = iup_XkeySys(K_Print   ),
346 			K_yMenu    = iup_XkeySys(K_Menu    ),
347 
348 			K_sPlus        = iup_XkeyShift(K_plus    ),
349 			K_sComma       = iup_XkeyShift(K_comma   ),
350 			K_sMinus       = iup_XkeyShift(K_minus   ),
351 			K_sPeriod      = iup_XkeyShift(K_period  ),
352 			K_sSlash       = iup_XkeyShift(K_slash   ),
353 			K_sAsterisk    = iup_XkeyShift(K_asterisk),
354 
355 			K_cA    = iup_XkeyCtrl(K_A),
356 			K_cB    = iup_XkeyCtrl(K_B),
357 			K_cC    = iup_XkeyCtrl(K_C),
358 			K_cD    = iup_XkeyCtrl(K_D),
359 			K_cE    = iup_XkeyCtrl(K_E),
360 			K_cF    = iup_XkeyCtrl(K_F),
361 			K_cG    = iup_XkeyCtrl(K_G),
362 			K_cH    = iup_XkeyCtrl(K_H),
363 			K_cI    = iup_XkeyCtrl(K_I),
364 			K_cJ    = iup_XkeyCtrl(K_J),
365 			K_cK    = iup_XkeyCtrl(K_K),
366 			K_cL    = iup_XkeyCtrl(K_L),
367 			K_cM    = iup_XkeyCtrl(K_M),
368 			K_cN    = iup_XkeyCtrl(K_N),
369 			K_cO    = iup_XkeyCtrl(K_O),
370 			K_cP    = iup_XkeyCtrl(K_P),
371 			K_cQ    = iup_XkeyCtrl(K_Q),
372 			K_cR    = iup_XkeyCtrl(K_R),
373 			K_cS    = iup_XkeyCtrl(K_S),
374 			K_cT    = iup_XkeyCtrl(K_T),
375 			K_cU    = iup_XkeyCtrl(K_U),
376 			K_cV    = iup_XkeyCtrl(K_V),
377 			K_cW    = iup_XkeyCtrl(K_W),
378 			K_cX    = iup_XkeyCtrl(K_X),
379 			K_cY    = iup_XkeyCtrl(K_Y),
380 			K_cZ    = iup_XkeyCtrl(K_Z),
381 			K_c1    = iup_XkeyCtrl(K_1),
382 			K_c2    = iup_XkeyCtrl(K_2),
383 			K_c3    = iup_XkeyCtrl(K_3),
384 			K_c4    = iup_XkeyCtrl(K_4),
385 			K_c5    = iup_XkeyCtrl(K_5),
386 			K_c6    = iup_XkeyCtrl(K_6),
387 			K_c7    = iup_XkeyCtrl(K_7),
388 			K_c8    = iup_XkeyCtrl(K_8),
389 			K_c9    = iup_XkeyCtrl(K_9),
390 			K_c0    = iup_XkeyCtrl(K_0),
391 			K_cPlus        = iup_XkeyCtrl(K_plus        ),
392 			K_cComma       = iup_XkeyCtrl(K_comma       ),
393 			K_cMinus       = iup_XkeyCtrl(K_minus       ),
394 			K_cPeriod      = iup_XkeyCtrl(K_period      ),
395 			K_cSlash       = iup_XkeyCtrl(K_slash       ),
396 			K_cSemicolon   = iup_XkeyCtrl(K_semicolon   ),
397 			K_cEqual       = iup_XkeyCtrl(K_equal       ),
398 			K_cBracketleft = iup_XkeyCtrl(K_bracketleft ),
399 			K_cBracketright= iup_XkeyCtrl(K_bracketright),
400 			K_cBackslash   = iup_XkeyCtrl(K_backslash   ),
401 			K_cAsterisk    = iup_XkeyCtrl(K_asterisk    ),
402 
403 			K_mA    = iup_XkeyAlt(K_A),
404 			K_mB    = iup_XkeyAlt(K_B),
405 			K_mC    = iup_XkeyAlt(K_C),
406 			K_mD    = iup_XkeyAlt(K_D),
407 			K_mE    = iup_XkeyAlt(K_E),
408 			K_mF    = iup_XkeyAlt(K_F),
409 			K_mG    = iup_XkeyAlt(K_G),
410 			K_mH    = iup_XkeyAlt(K_H),
411 			K_mI    = iup_XkeyAlt(K_I),
412 			K_mJ    = iup_XkeyAlt(K_J),
413 			K_mK    = iup_XkeyAlt(K_K),
414 			K_mL    = iup_XkeyAlt(K_L),
415 			K_mM    = iup_XkeyAlt(K_M),
416 			K_mN    = iup_XkeyAlt(K_N),
417 			K_mO    = iup_XkeyAlt(K_O),
418 			K_mP    = iup_XkeyAlt(K_P),
419 			K_mQ    = iup_XkeyAlt(K_Q),
420 			K_mR    = iup_XkeyAlt(K_R),
421 			K_mS    = iup_XkeyAlt(K_S),
422 			K_mT    = iup_XkeyAlt(K_T),
423 			K_mU    = iup_XkeyAlt(K_U),
424 			K_mV    = iup_XkeyAlt(K_V),
425 			K_mW    = iup_XkeyAlt(K_W),
426 			K_mX    = iup_XkeyAlt(K_X),
427 			K_mY    = iup_XkeyAlt(K_Y),
428 			K_mZ    = iup_XkeyAlt(K_Z),
429 			K_m1    = iup_XkeyAlt(K_1),
430 			K_m2    = iup_XkeyAlt(K_2),
431 			K_m3    = iup_XkeyAlt(K_3),
432 			K_m4    = iup_XkeyAlt(K_4),
433 			K_m5    = iup_XkeyAlt(K_5),
434 			K_m6    = iup_XkeyAlt(K_6),
435 			K_m7    = iup_XkeyAlt(K_7),
436 			K_m8    = iup_XkeyAlt(K_8),
437 			K_m9    = iup_XkeyAlt(K_9),
438 			K_m0    = iup_XkeyAlt(K_0),
439 			K_mPlus        = iup_XkeyAlt(K_plus        ),
440 			K_mComma       = iup_XkeyAlt(K_comma       ),
441 			K_mMinus       = iup_XkeyAlt(K_minus       ),
442 			K_mPeriod      = iup_XkeyAlt(K_period      ),
443 			K_mSlash       = iup_XkeyAlt(K_slash       ),
444 			K_mSemicolon   = iup_XkeyAlt(K_semicolon   ),
445 			K_mEqual       = iup_XkeyAlt(K_equal       ),
446 			K_mBracketleft = iup_XkeyAlt(K_bracketleft ),
447 			K_mBracketright= iup_XkeyAlt(K_bracketright),
448 			K_mBackslash   = iup_XkeyAlt(K_backslash   ),
449 			K_mAsterisk    = iup_XkeyAlt(K_asterisk    ),
450 
451 			K_yA    = iup_XkeySys(K_A),
452 			K_yB    = iup_XkeySys(K_B),
453 			K_yC    = iup_XkeySys(K_C),
454 			K_yD    = iup_XkeySys(K_D),
455 			K_yE    = iup_XkeySys(K_E),
456 			K_yF    = iup_XkeySys(K_F),
457 			K_yG    = iup_XkeySys(K_G),
458 			K_yH    = iup_XkeySys(K_H),
459 			K_yI    = iup_XkeySys(K_I),
460 			K_yJ    = iup_XkeySys(K_J),
461 			K_yK    = iup_XkeySys(K_K),
462 			K_yL    = iup_XkeySys(K_L),
463 			K_yM    = iup_XkeySys(K_M),
464 			K_yN    = iup_XkeySys(K_N),
465 			K_yO    = iup_XkeySys(K_O),
466 			K_yP    = iup_XkeySys(K_P),
467 			K_yQ    = iup_XkeySys(K_Q),
468 			K_yR    = iup_XkeySys(K_R),
469 			K_yS    = iup_XkeySys(K_S),
470 			K_yT    = iup_XkeySys(K_T),
471 			K_yU    = iup_XkeySys(K_U),
472 			K_yV    = iup_XkeySys(K_V),
473 			K_yW    = iup_XkeySys(K_W),
474 			K_yX    = iup_XkeySys(K_X),
475 			K_yY    = iup_XkeySys(K_Y),
476 			K_yZ    = iup_XkeySys(K_Z),
477 			K_y1    = iup_XkeySys(K_1),
478 			K_y2    = iup_XkeySys(K_2),
479 			K_y3    = iup_XkeySys(K_3),
480 			K_y4    = iup_XkeySys(K_4),
481 			K_y5    = iup_XkeySys(K_5),
482 			K_y6    = iup_XkeySys(K_6),
483 			K_y7    = iup_XkeySys(K_7),
484 			K_y8    = iup_XkeySys(K_8),
485 			K_y9    = iup_XkeySys(K_9),
486 			K_y0    = iup_XkeySys(K_0),
487 			K_yPlus        = iup_XkeySys(K_plus        ),
488 			K_yComma       = iup_XkeySys(K_comma       ),
489 			K_yMinus       = iup_XkeySys(K_minus       ),
490 			K_yPeriod      = iup_XkeySys(K_period      ),
491 			K_ySlash       = iup_XkeySys(K_slash       ),
492 			K_ySemicolon   = iup_XkeySys(K_semicolon   ),
493 			K_yEqual       = iup_XkeySys(K_equal       ),
494 			K_yBracketleft = iup_XkeySys(K_bracketleft ),
495 			K_yBracketright= iup_XkeySys(K_bracketright),
496 			K_yBackslash   = iup_XkeySys(K_backslash   ),
497 			K_yAsterisk    = iup_XkeySys(K_asterisk    ),
498 }