| 383 | // ---------------------------------------------------------------------------------------- |
| 384 | |
| 385 | static bool map_keys ( |
| 386 | unsigned long keycode, |
| 387 | bool shift, |
| 388 | bool caps, |
| 389 | unsigned long& result, |
| 390 | bool& is_printable |
| 391 | ) |
| 392 | /*! |
| 393 | requires |
| 394 | - if (shift was down for this key) then |
| 395 | - shift == true |
| 396 | - if (caps lock was on for this key) then |
| 397 | - caps == true |
| 398 | - keycode == the keycode from windows that we are to process |
| 399 | - keycode < keyboard_keys_size |
| 400 | ensures |
| 401 | - if (this key should be ignored) then |
| 402 | - returns false |
| 403 | - else |
| 404 | - returns true |
| 405 | - #is_printable == true if result is a printable ascii character |
| 406 | - #result == the keycode converted into the proper number to tbe |
| 407 | returned by the event handler. |
| 408 | !*/ |
| 409 | { |
| 410 | is_printable = true; |
| 411 | |
| 412 | if (keycode <= '9' && keycode >= '0') |
| 413 | { |
| 414 | result = keycode; |
| 415 | if (shift) |
| 416 | { |
| 417 | switch (result) |
| 418 | { |
| 419 | case '0': result = ')'; break; |
| 420 | case '1': result = '!'; break; |
| 421 | case '2': result = '@'; break; |
| 422 | case '3': result = '#'; break; |
| 423 | case '4': result = '$'; break; |
| 424 | case '5': result = '%'; break; |
| 425 | case '6': result = '^'; break; |
| 426 | case '7': result = '&'; break; |
| 427 | case '8': result = '*'; break; |
| 428 | case '9': result = '('; break; |
| 429 | } |
| 430 | } |
| 431 | } |
| 432 | else if (keycode <= 'Z' && keycode >= 'A') |
| 433 | { |
| 434 | result = keycode; |
| 435 | |
| 436 | // make the result lower case if we need to. |
| 437 | if ((shift && caps) || (!caps && !shift)) |
| 438 | result = result - 'A' + 'a'; |
| 439 | } |
| 440 | else |
| 441 | { |
| 442 | switch (keycode) |