File 0005-support-german-keyboard.patch of Package wangemu
From e825388520807dc81cb825bab7185adcb9d45188 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Klaus=20K=C3=A4mpf?= <kkaempf@gmail.com>
Date: Fri, 3 Oct 2025 11:01:47 +0200
Subject: [PATCH 05/11] support german keyboard
---
src/UiCrt_Keyboard.cpp | 68 +++++-
src/UiCrt_Keyboard_martin.cpp | 410 ----------------------------------
2 files changed, 56 insertions(+), 422 deletions(-)
delete mode 100644 src/UiCrt_Keyboard_martin.cpp
diff --git a/src/UiCrt_Keyboard.cpp b/src/UiCrt_Keyboard.cpp
index 5944cc5..eaeccd2 100644
--- a/src/UiCrt_Keyboard.cpp
+++ b/src/UiCrt_Keyboard.cpp
@@ -95,12 +95,12 @@ static constexpr kd_keymap_t keydown_keymap_table[] = {
#endif
// edit mode: down a line
- { WXK_DOWN, KC_NOSHIFT, IoCardKeyboard::KEYCODE_SF | 0x05 },
+ { WXK_DOWN, KC_NOSHIFT, IoCardKeyboard::KEYCODE_SF | 0x45 },
{ WXK_F5, KC_NOSHIFT, IoCardKeyboard::KEYCODE_SF | 0x05 },
{ WXK_F5, KC_SHIFT, IoCardKeyboard::KEYCODE_SF | 0x15 },
// edit mode: up a line
- { WXK_UP, KC_NOSHIFT, IoCardKeyboard::KEYCODE_SF | 0x06 },
+ { WXK_UP, KC_NOSHIFT, IoCardKeyboard::KEYCODE_SF | 0x46 },
{ WXK_F6, KC_NOSHIFT, IoCardKeyboard::KEYCODE_SF | 0x06 },
{ WXK_F6, KC_SHIFT, IoCardKeyboard::KEYCODE_SF | 0x16 },
@@ -121,28 +121,30 @@ static constexpr kd_keymap_t keydown_keymap_table[] = {
// edit mode: delete a character
{ 'D', KC_CTRL, IoCardKeyboard::KEYCODE_SF | 0x09 },
- { WXK_DELETE, KC_ANY, IoCardKeyboard::KEYCODE_SF | 0x09 },
- { WXK_F9, KC_NOSHIFT | KC_NOCTRL, IoCardKeyboard::KEYCODE_SF | 0x09 },
+ { WXK_DELETE, KC_NOSHIFT, IoCardKeyboard::KEYCODE_SF | 0x49 },
+ { WXK_DELETE, KC_SHIFT, IoCardKeyboard::KEYCODE_SF | 0x59 },
+ { WXK_F9, KC_NOSHIFT | KC_NOCTRL, IoCardKeyboard::KEYCODE_SF | 0x09 },
{ WXK_F9, KC_SHIFT | KC_NOCTRL, IoCardKeyboard::KEYCODE_SF | 0x19 },
// edit mode: insert a character
{ 'I', KC_CTRL, IoCardKeyboard::KEYCODE_SF | 0x0A },
- { WXK_INSERT, KC_ANY, IoCardKeyboard::KEYCODE_SF | 0x0A },
+ { WXK_INSERT, KC_NOSHIFT, IoCardKeyboard::KEYCODE_SF | 0x4A },
+ { WXK_INSERT, KC_SHIFT, IoCardKeyboard::KEYCODE_SF | 0x5A },
{ WXK_F10, KC_NOSHIFT | KC_NOCTRL, IoCardKeyboard::KEYCODE_SF | 0x0A },
{ WXK_F10, KC_SHIFT | KC_NOCTRL, IoCardKeyboard::KEYCODE_SF | 0x1A },
// edit mode: skip five spaces right
- { WXK_RIGHT, KC_SHIFT, IoCardKeyboard::KEYCODE_SF | 0x0B },
+ { WXK_RIGHT, KC_SHIFT, IoCardKeyboard::KEYCODE_SF | 0x4C },
{ WXK_F11, KC_NOSHIFT | KC_NOCTRL, IoCardKeyboard::KEYCODE_SF | 0x0B },
{ WXK_F11, KC_SHIFT | KC_NOCTRL, IoCardKeyboard::KEYCODE_SF | 0x1B },
// edit mode: skip one space right
- { WXK_RIGHT, KC_NOSHIFT, IoCardKeyboard::KEYCODE_SF | 0x0C },
+ { WXK_RIGHT, KC_NOSHIFT, IoCardKeyboard::KEYCODE_SF | 0x4C },
{ WXK_F12, KC_NOSHIFT | KC_NOCTRL, IoCardKeyboard::KEYCODE_SF | 0x0C },
{ WXK_F12, KC_SHIFT | KC_NOCTRL, IoCardKeyboard::KEYCODE_SF | 0x1C },
// edit mode: skip one space left
- { WXK_LEFT, KC_NOSHIFT, IoCardKeyboard::KEYCODE_SF | 0x0D },
+ { WXK_LEFT, KC_NOSHIFT, IoCardKeyboard::KEYCODE_SF | 0x4D },
{ WXK_F13, KC_NOSHIFT, IoCardKeyboard::KEYCODE_SF | 0x0D },
{ WXK_F13, KC_SHIFT, IoCardKeyboard::KEYCODE_SF | 0x1D },
#ifdef __WXMSW__
@@ -151,7 +153,7 @@ static constexpr kd_keymap_t keydown_keymap_table[] = {
#endif
// edit mode: skip five spaces left
- { WXK_LEFT, KC_SHIFT, IoCardKeyboard::KEYCODE_SF | 0x0E },
+ { WXK_LEFT, KC_SHIFT, IoCardKeyboard::KEYCODE_SF | 0x4D },
{ WXK_F14, KC_NOSHIFT, IoCardKeyboard::KEYCODE_SF | 0x0E },
{ WXK_F14, KC_SHIFT, IoCardKeyboard::KEYCODE_SF | 0x1E },
#ifdef __WXMSW__
@@ -159,7 +161,13 @@ static constexpr kd_keymap_t keydown_keymap_table[] = {
{ WXK_F10, KC_SHIFT | KC_CTRL, IoCardKeyboard::KEYCODE_SF | 0x1E },
#endif
- // edit mode: recall
+ // Page UP / Down
+ { WXK_PAGEUP, KC_NOSHIFT, IoCardKeyboard::KEYCODE_SF | 0x42 },
+ { WXK_PAGEDOWN, KC_NOSHIFT, IoCardKeyboard::KEYCODE_SF | 0x43 },
+ { WXK_PAGEUP, KC_SHIFT, IoCardKeyboard::KEYCODE_SF | 0x52 },
+ { WXK_PAGEDOWN, KC_SHIFT, IoCardKeyboard::KEYCODE_SF | 0x53 },
+
+ // edit mode: recall
{ 'F', KC_CTRL, IoCardKeyboard::KEYCODE_SF | 0x0F },
{ WXK_F15, KC_NOSHIFT, IoCardKeyboard::KEYCODE_SF | 0x0F },
{ WXK_F15, KC_SHIFT, IoCardKeyboard::KEYCODE_SF | 0x1F },
@@ -283,6 +291,7 @@ static constexpr oc_keymap_t onchar_keymap_table[] = {
{ 'z', 'Z', 'z' },
{ 'Z', TOKEN_SELECT, 'Z' },
+
};
@@ -345,6 +354,35 @@ Crt::OnChar(wxKeyEvent &event)
}
}
}
+ // Additional Keycodes for internatinal Keyboard (german)
+ if (smart_term) {
+ if (baseKey == 0xFC) {
+ key = 0x19;
+ found_map = true;
+ } else if (baseKey == 0xDC) {
+ key = 0x1F;
+ found_map = true;
+ } else if (baseKey == 0xE4) {
+ key = 0x15;
+ found_map = true;
+ }
+ else if (baseKey == 0xC4) {
+ key = 0x1D;
+ found_map = true;
+ }
+ else if (baseKey == 0xF6) {
+ key = 0x18;
+ found_map = true;
+ }
+ else if (baseKey == 0xD6) {
+ key = 0x1E;
+ found_map = true;
+ }
+ else if (baseKey == 0xDF) {
+ key = 0x8E;
+ found_map = true;
+ }
+ }
if (!found_map && (wxKey >= 32) && (wxKey < 128)) {
// non-mapped simple ASCII key
@@ -352,8 +390,14 @@ Crt::OnChar(wxKeyEvent &event)
found_map = true;
}
}
-
- if (found_map) {
+ // Keycode for Underlining, non functioning, spells out atom. (PRINT i.e. A0)
+ /*if (wxKey == '_') {
+ system2200::dispatchKeystroke(m_parent->getTiedAddr(),
+ m_parent->getTermNum(),
+ 0x01A0);
+ }
+ else */
+ if (found_map) {
system2200::dispatchKeystroke(m_parent->getTiedAddr(),
m_parent->getTermNum(),
key);
diff --git a/src/UiCrt_Keyboard_martin.cpp b/src/UiCrt_Keyboard_martin.cpp
deleted file mode 100644
index eaeccd2..0000000
--- a/src/UiCrt_Keyboard_martin.cpp
+++ /dev/null
@@ -1,410 +0,0 @@
-// This is not its own class -- it just implements the keyboard part of
-// the Crt class. It catches keyboard events and then maps that into the
-// emulated function.
-
-// ----------------------------------------------------------------------------
-// headers
-// ----------------------------------------------------------------------------
-
-#include "IoCardKeyboard.h" // to pick up core_* keyboard functions
-#include "TerminalState.h" // m_crt_state definition
-#include "Ui.h" // emulator interface
-#include "UiCrt.h" // just the display part
-#include "UiCrtFrame.h" // emulated terminal
-#include "UiSystem.h" // sharing info between UI_wxgui modules
-#include "system2200.h"
-#include "tokens.h" // keymap tokens
-
-// ----------------------------------------------------------------------------
-// code
-// ----------------------------------------------------------------------------
-
-// PC_keycode (shift/non-shift flag) --> Wang_keycode Keyword/A, Wang_keycode A/a
-#define KC_ANY 0x0000 // this mapping applies any time
-#define KC_NOSHIFT 0x0001 // this mapping applies only if SHIFT isn't present
-#define KC_SHIFT 0x0002 // this mapping applies only if SHIFT is present
-#define KC_NOCTRL 0x0004 // this mapping applies only if CONTROL isn't present
-#define KC_CTRL 0x0008 // this mapping applies only if CONTROL is present
-
-struct kd_keymap_t {
- int wxKey;
- int wxKeyFlags;
- int wangKey;
-};
-
-static constexpr kd_keymap_t keydown_keymap_table[] = {
-
- // --------------------------- keyword keys -------------------------------
- // most of these don't have a natural mapping, so just use Ctrl-<letter>
- // where the letter is mnemonic and doesn't conflict with other Ctrl keys.
- //
- // key modifier mapping
-
-#ifdef __WXMAC__
- { WXK_CLEAR, KC_ANY, TOKEN_CLEAR },
-#endif
- { 'C', KC_CTRL | KC_NOSHIFT, TOKEN_CLEAR },
- { 'L', KC_CTRL | KC_NOSHIFT, TOKEN_LOAD },
- { 'P', KC_CTRL | KC_NOSHIFT, TOKEN_PRINT },
- { 'R', KC_CTRL | KC_NOSHIFT, TOKEN_RUN },
- { 'Z', KC_CTRL | KC_NOSHIFT, TOKEN_CONTINUE },
-
- // ----------------------- various control keys ---------------------------
- // key modifier mapping
-
- { WXK_BACK, KC_ANY, 0x08 },
-
- { WXK_RETURN, KC_ANY, 0x0D },
- { WXK_NUMPAD_ENTER, KC_ANY, 0x0D },
-
- // clear line
- { WXK_HOME, KC_ANY, 0xE5 },
-
- // next highest line # (in 6367 keyboard controller mode)
- // FN (in MXD mode; Terminal.cpp takes care of remapping it)
- { WXK_TAB, KC_ANY, 0xE6 },
-
- // halt/step
- { 'S', /*step*/ KC_CTRL | KC_NOSHIFT, IoCardKeyboard::KEYCODE_HALT },
-#ifdef __WXMSW__
- { WXK_PAUSE, KC_ANY, IoCardKeyboard::KEYCODE_HALT },
-#endif
-
- // ----------------------- special function keys ---------------------------
- // key modifier mapping
-
- { WXK_ESCAPE, KC_NOSHIFT, IoCardKeyboard::KEYCODE_SF | 0x00 },
- { WXK_ESCAPE, KC_SHIFT, IoCardKeyboard::KEYCODE_SF | 0x10 },
-
- { WXK_F1, KC_NOSHIFT, IoCardKeyboard::KEYCODE_SF | 0x01 },
- { WXK_F1, KC_SHIFT, IoCardKeyboard::KEYCODE_SF | 0x11 },
-
- { WXK_F2, KC_NOSHIFT, IoCardKeyboard::KEYCODE_SF | 0x02 },
- { WXK_F2, KC_SHIFT, IoCardKeyboard::KEYCODE_SF | 0x12 },
-
- { WXK_F3, KC_NOSHIFT, IoCardKeyboard::KEYCODE_SF | 0x03 },
- { WXK_F3, KC_SHIFT, IoCardKeyboard::KEYCODE_SF | 0x13 },
-
- // edit mode: end of line
- { WXK_F4, KC_NOSHIFT, IoCardKeyboard::KEYCODE_SF | 0x04 },
- { WXK_F4, KC_SHIFT, IoCardKeyboard::KEYCODE_SF | 0x14 },
-#ifdef __WXMAC__
- { WXK_DOWN, KC_SHIFT, IoCardKeyboard::KEYCODE_SF | 0x04 },
-#else
- { WXK_RIGHT, KC_CTRL, IoCardKeyboard::KEYCODE_SF | 0x04 },
-#endif
-
- // edit mode: down a line
- { WXK_DOWN, KC_NOSHIFT, IoCardKeyboard::KEYCODE_SF | 0x45 },
- { WXK_F5, KC_NOSHIFT, IoCardKeyboard::KEYCODE_SF | 0x05 },
- { WXK_F5, KC_SHIFT, IoCardKeyboard::KEYCODE_SF | 0x15 },
-
- // edit mode: up a line
- { WXK_UP, KC_NOSHIFT, IoCardKeyboard::KEYCODE_SF | 0x46 },
- { WXK_F6, KC_NOSHIFT, IoCardKeyboard::KEYCODE_SF | 0x06 },
- { WXK_F6, KC_SHIFT, IoCardKeyboard::KEYCODE_SF | 0x16 },
-
- // edit mode: beginning of line
- { WXK_F7, KC_NOSHIFT, IoCardKeyboard::KEYCODE_SF | 0x07 },
- { WXK_F7, KC_SHIFT, IoCardKeyboard::KEYCODE_SF | 0x17 },
-#ifdef __WXMAC__
- { WXK_UP, KC_SHIFT, IoCardKeyboard::KEYCODE_SF | 0x07 },
-#else
- { WXK_LEFT, KC_CTRL, IoCardKeyboard::KEYCODE_SF | 0x07 },
-#endif
-
- // edit mode: erase to end of line
- { 'K', KC_CTRL, IoCardKeyboard::KEYCODE_SF | 0x08 },
- { WXK_END, KC_ANY, IoCardKeyboard::KEYCODE_SF | 0x08 },
- { WXK_F8, KC_NOSHIFT, IoCardKeyboard::KEYCODE_SF | 0x08 },
- { WXK_F8, KC_SHIFT, IoCardKeyboard::KEYCODE_SF | 0x18 },
-
- // edit mode: delete a character
- { 'D', KC_CTRL, IoCardKeyboard::KEYCODE_SF | 0x09 },
- { WXK_DELETE, KC_NOSHIFT, IoCardKeyboard::KEYCODE_SF | 0x49 },
- { WXK_DELETE, KC_SHIFT, IoCardKeyboard::KEYCODE_SF | 0x59 },
- { WXK_F9, KC_NOSHIFT | KC_NOCTRL, IoCardKeyboard::KEYCODE_SF | 0x09 },
- { WXK_F9, KC_SHIFT | KC_NOCTRL, IoCardKeyboard::KEYCODE_SF | 0x19 },
-
- // edit mode: insert a character
- { 'I', KC_CTRL, IoCardKeyboard::KEYCODE_SF | 0x0A },
- { WXK_INSERT, KC_NOSHIFT, IoCardKeyboard::KEYCODE_SF | 0x4A },
- { WXK_INSERT, KC_SHIFT, IoCardKeyboard::KEYCODE_SF | 0x5A },
- { WXK_F10, KC_NOSHIFT | KC_NOCTRL, IoCardKeyboard::KEYCODE_SF | 0x0A },
- { WXK_F10, KC_SHIFT | KC_NOCTRL, IoCardKeyboard::KEYCODE_SF | 0x1A },
-
- // edit mode: skip five spaces right
- { WXK_RIGHT, KC_SHIFT, IoCardKeyboard::KEYCODE_SF | 0x4C },
- { WXK_F11, KC_NOSHIFT | KC_NOCTRL, IoCardKeyboard::KEYCODE_SF | 0x0B },
- { WXK_F11, KC_SHIFT | KC_NOCTRL, IoCardKeyboard::KEYCODE_SF | 0x1B },
-
- // edit mode: skip one space right
- { WXK_RIGHT, KC_NOSHIFT, IoCardKeyboard::KEYCODE_SF | 0x4C },
- { WXK_F12, KC_NOSHIFT | KC_NOCTRL, IoCardKeyboard::KEYCODE_SF | 0x0C },
- { WXK_F12, KC_SHIFT | KC_NOCTRL, IoCardKeyboard::KEYCODE_SF | 0x1C },
-
- // edit mode: skip one space left
- { WXK_LEFT, KC_NOSHIFT, IoCardKeyboard::KEYCODE_SF | 0x4D },
- { WXK_F13, KC_NOSHIFT, IoCardKeyboard::KEYCODE_SF | 0x0D },
- { WXK_F13, KC_SHIFT, IoCardKeyboard::KEYCODE_SF | 0x1D },
-#ifdef __WXMSW__
- { WXK_F9, KC_NOSHIFT | KC_CTRL, IoCardKeyboard::KEYCODE_SF | 0x0D },
- { WXK_F9, KC_SHIFT | KC_CTRL, IoCardKeyboard::KEYCODE_SF | 0x1D },
-#endif
-
- // edit mode: skip five spaces left
- { WXK_LEFT, KC_SHIFT, IoCardKeyboard::KEYCODE_SF | 0x4D },
- { WXK_F14, KC_NOSHIFT, IoCardKeyboard::KEYCODE_SF | 0x0E },
- { WXK_F14, KC_SHIFT, IoCardKeyboard::KEYCODE_SF | 0x1E },
-#ifdef __WXMSW__
- { WXK_F10, KC_NOSHIFT | KC_CTRL, IoCardKeyboard::KEYCODE_SF | 0x0E },
- { WXK_F10, KC_SHIFT | KC_CTRL, IoCardKeyboard::KEYCODE_SF | 0x1E },
-#endif
-
- // Page UP / Down
- { WXK_PAGEUP, KC_NOSHIFT, IoCardKeyboard::KEYCODE_SF | 0x42 },
- { WXK_PAGEDOWN, KC_NOSHIFT, IoCardKeyboard::KEYCODE_SF | 0x43 },
- { WXK_PAGEUP, KC_SHIFT, IoCardKeyboard::KEYCODE_SF | 0x52 },
- { WXK_PAGEDOWN, KC_SHIFT, IoCardKeyboard::KEYCODE_SF | 0x53 },
-
- // edit mode: recall
- { 'F', KC_CTRL, IoCardKeyboard::KEYCODE_SF | 0x0F },
- { WXK_F15, KC_NOSHIFT, IoCardKeyboard::KEYCODE_SF | 0x0F },
- { WXK_F15, KC_SHIFT, IoCardKeyboard::KEYCODE_SF | 0x1F },
-#ifdef __WXMSW__
- { WXK_F11, KC_NOSHIFT | KC_CTRL, IoCardKeyboard::KEYCODE_SF | 0x0F },
- { WXK_F11, KC_SHIFT | KC_CTRL, IoCardKeyboard::KEYCODE_SF | 0x1F },
-#endif
-
- // edit mode toggle
- { 'E', KC_CTRL, IoCardKeyboard::KEYCODE_SF | IoCardKeyboard::KEYCODE_EDIT },
-#ifdef __WXMSW__
- { WXK_F12, KC_CTRL, IoCardKeyboard::KEYCODE_SF | IoCardKeyboard::KEYCODE_EDIT },
-#endif
-#ifdef __WXMAC__
- { WXK_F16, KC_NOSHIFT, IoCardKeyboard::KEYCODE_SF | IoCardKeyboard::KEYCODE_EDIT },
-#endif
-
-/*
- -- numeric keypad:
- NUM_LOCK, TOKEN_PRINT,
- NUM_LOCK+SHIFT, TOKEN_ARC,
- '(', TOKEN_SIN,
- ')', TOKEN_COS,
- '^', TOKEN_TAN,
- '*', TOKEN_SQR,
- '-', TOKEN_EXP,
- '+', TOKEN_LOG,
- '/', TOKEN_PI,
-
- -- figure out how to map these in:
- ',', TOKEN_RENUMBER,
- '.', TOKEN_LIST,
-*/
-};
-
-
-struct oc_keymap_t {
- int wxKey;
- int wangKey_KW_mode;
- int wangKey_Aa_mode;
-};
-
-static constexpr oc_keymap_t onchar_keymap_table[] = {
-
- // key Keyword/A mapping A/a mapping
-
- { 'a', 'A', 'a' },
- { 'A', TOKEN_HEX, 'A' },
-
- { 'b', 'B', 'b' },
- { 'B', TOKEN_SKIP, 'B' },
-
- { 'c', 'C', 'c' },
- { 'C', TOKEN_REWIND, 'C' },
-
- { 'd', 'D', 'd' },
- { 'D', TOKEN_DATA, 'D' },
-
- { 'e', 'E', 'e' },
- { 'E', TOKEN_DEFFN, 'E' },
-
- { 'f', 'F', 'f' },
- { 'F', TOKEN_RESTORE, 'F' },
-
- { 'g', 'G', 'g' },
- { 'G', TTOKEN_READ, 'G' },
-
- { 'h', 'H', 'h' },
- { 'H', TOKEN_IF, 'H' },
-
- { 'i', 'I', 'i' },
- { 'I', TOKEN_FOR, 'I' },
-
- { 'j', 'J', 'j' },
- { 'J', TOKEN_THEN, 'J' },
-
- { 'k', 'K', 'k' },
- { 'K', TOKEN_STOP, 'K' },
-
- { 'l', 'L', 'l' },
- { 'L', TOKEN_END, 'L' },
-
- { 'm', 'M', 'm' },
- { 'M', TOKEN_GOTO, 'M' },
-
- { 'n', 'N', 'n' },
- { 'N', TOKEN_TRACE, 'N' },
-
- { 'o', 'O', 'o' },
- { 'O', TOKEN_STEP, 'O' },
-
- { 'p', 'P', 'p' },
- { 'P', TOKEN_NEXT, 'P' },
-
- { 'q', 'Q', 'q' },
- { 'Q', TOKEN_COM, 'Q' },
-
- { 'r', 'R', 'r' },
- { 'R', TOKEN_GOSUB, 'R' },
-
- { 's', 'S', 's' },
- { 'S', TOKEN_STR, 'S' },
-
- { 't', 'T', 't' },
- { 'T', TOKEN_RETURN, 'T' },
-
- { 'u', 'U', 'u' },
- { 'U', TOKEN_INPUT, 'U' },
-
- { 'v', 'V', 'v' },
- { 'V', TOKEN_SAVE, 'V' },
-
- { 'w', 'W', 'w' },
- { 'W', TOKEN_DIM, 'W' },
-
- { 'x', 'X', 'x' },
- { 'X', TOKEN_BACKSPACE, 'X' },
-
- { 'y', 'Y', 'y' },
- { 'Y', TOKEN_REM, 'Y' },
-
- { 'z', 'Z', 'z' },
- { 'Z', TOKEN_SELECT, 'Z' },
-
-};
-
-
-void
-Crt::OnChar(wxKeyEvent &event)
-{
- // don't swallow keystrokes that we can't handle
- if (event.AltDown()) {
- event.Skip();
- return;
- }
-
- const int wxKey = event.GetKeyCode();
- const bool shift = event.ShiftDown();
- const bool ctrl = event.RawControlDown();
- // map ctrl-A through ctrl-Z to 'A' to 'Z'
- const int baseKey = (ctrl && (1 <= wxKey) && (wxKey <= 26)) ? (wxKey | 64) : wxKey;
- int key = 0x00; // key value we stuff into emulator
-
- bool found_map = false;
- for (auto const &kkey : keydown_keymap_table) {
- if (kkey.wxKey != baseKey) {
- continue;
- }
- if ( shift && ((kkey.wxKeyFlags & KC_NOSHIFT) != 0)) {
- continue;
- }
- if (!shift && ((kkey.wxKeyFlags & KC_SHIFT) != 0)) {
- continue;
- }
- if ( ctrl && ((kkey.wxKeyFlags & KC_NOCTRL) != 0)) {
- continue;
- }
- if (!ctrl && ((kkey.wxKeyFlags & KC_CTRL) != 0)) {
- continue;
- }
- key = kkey.wangKey;
- found_map = true;
- break;
- }
-
- if (!found_map) {
- const bool keyword_mode = m_parent->getKeywordMode();
- const bool smart_term = (m_crt_state->screen_type == UI_SCREEN_2236DE);
- if (smart_term) {
- // the 2236 doesn't support keyword mode, just caps lock
- if (keyword_mode && ('a' <= baseKey && baseKey <= 'z')) {
- key = baseKey - 'a' + 'A'; // force to uppercase
- found_map = true;
- }
- } else {
- // the first generation keyboards had a keyword associated with
- // each letter A-Z
- for (auto const &kkey : onchar_keymap_table) {
- if (kkey.wxKey == baseKey) {
- key = (keyword_mode) ? kkey.wangKey_KW_mode
- : kkey.wangKey_Aa_mode;
- found_map = true;
- break;
- }
- }
- }
- // Additional Keycodes for internatinal Keyboard (german)
- if (smart_term) {
- if (baseKey == 0xFC) {
- key = 0x19;
- found_map = true;
- } else if (baseKey == 0xDC) {
- key = 0x1F;
- found_map = true;
- } else if (baseKey == 0xE4) {
- key = 0x15;
- found_map = true;
- }
- else if (baseKey == 0xC4) {
- key = 0x1D;
- found_map = true;
- }
- else if (baseKey == 0xF6) {
- key = 0x18;
- found_map = true;
- }
- else if (baseKey == 0xD6) {
- key = 0x1E;
- found_map = true;
- }
- else if (baseKey == 0xDF) {
- key = 0x8E;
- found_map = true;
- }
- }
-
- if (!found_map && (wxKey >= 32) && (wxKey < 128)) {
- // non-mapped simple ASCII key
- key = wxKey;
- found_map = true;
- }
- }
- // Keycode for Underlining, non functioning, spells out atom. (PRINT i.e. A0)
- /*if (wxKey == '_') {
- system2200::dispatchKeystroke(m_parent->getTiedAddr(),
- m_parent->getTermNum(),
- 0x01A0);
- }
- else */
- if (found_map) {
- system2200::dispatchKeystroke(m_parent->getTiedAddr(),
- m_parent->getTermNum(),
- key);
- } else {
- // percolate the event up to the parent
- event.Skip();
- }
-}
-
-// vim: ts=8:et:sw=4:smarttab
--
2.51.0