//=========================================================================== void KeybQueueKeypress (int key, BOOL bASCII) { if (bASCII == ASCII) { if (g_bFreshReset && key == VK_CANCEL) // OLD HACK: 0x03 { g_bFreshReset = false; return; // Swallow spurious CTRL-C caused by CTRL-BREAK } g_bFreshReset = false; if (key > 0x7F) return; if (!IS_APPLE2) { P8Shift = false; if (g_bCapsLock && (key >= 'a') && (key <='z')) { P8Shift = true; keycode = key - 32; } else { keycode = key; } //The latter line should be applied for Pravtes 8A/C only, but not for Pravets 82/M !!! if ((g_bCapsLock == false) && (key >= 'A') && (key <='Z')) { P8Shift = true; if (g_Apple2Type == A2TYPE_PRAVETS8A) keycode = key + 32; } //Remap some keys for Pravets82/M if (g_Apple2Type == A2TYPE_PRAVETS82) { if (key == 64) keycode = 96; if (key == '^') keycode = '~'; if (g_bCapsLock == false) //cyrillic letters { if (key == '`') keycode = '^'; if (key == 92) keycode = '@'; // \ to @ if (key == 124) keycode = 92; } else //(g_bCapsLock == true) //latin letters { if (key == 91) keycode = 123; if (key == 93) keycode = 125; if (key == 124) keycode = 92; } } if (g_Apple2Type == A2TYPE_PRAVETS8M) //Pravets 8M charset is still uncertain { if (g_bCapsLock == false) //cyrillic letters { if (key == '[') keycode = '{'; if (key == ']') keycode = '}'; if (key == '`') keycode = '~'; //96= key `~ if (key == 92) keycode = 96; } else //latin letters { if (key == '`') keycode = '^'; //96= key `~ } } //Remap some keys for Pravets8A/C, which has a different charset for Pravtes82/M, whose keys MUST NOT be remapped. if (g_Apple2Type == A2TYPE_PRAVETS8A) //&& (g_bCapsLock == false)) { if (g_bCapsLock == false) //i.e. cyrillic letters { if (key == '[') keycode = '{'; if (key == ']') keycode = '}'; if (key == '`') keycode = '~'; if (key == 92) keycode = 96; if (GetCapsLockAllowed() == true) { if ((key == 92) || (key == 124)) keycode = 96; //Ý to Þ //This shall be rewriten, so that enabling CAPS_LOCK (i.e. F10) will not invert these keys values) //The same for latin letters. if ((key == '{') || (key == '}') || (key == '~') || (key == 124) || (key == '^') || (key == 95)) P8Shift = true; } } else //i.e. latin letters { if (GetCapsLockAllowed() == false) { if (key == '{') keycode = '['; if (key == '}') keycode = ']'; if (key == 124) keycode = 92; /*if (key == 92) keycode = 124;*/ //Characters ` and ~ cannot be generated in 7bit character mode, so they are replaced with } else { if (key == '{') keycode = 91; if (key == '}') keycode = 93; if (key == 124) keycode = 92; if ((key == '[') || (key == ']') || (key == 92) || (key == '^') || (key == 95)) P8Shift= true; if (key == 96) //This line shall generate sth. else i.e. ` In fact. this character is not generateable by the pravets keyboard. { keycode = '^'; P8Shift= true; } if (key == 126) keycode = '^'; } } } } else { if (g_Apple2Type == A2TYPE_PRAVETS8A) { } else { if (key >= '`') keycode = key - 32; else keycode = key; } } lastvirtkey = LOBYTE(VkKeyScan(key)); } else //(bASCII != ASCII) { // Note: VK_CANCEL is Control-Break if ((key == VK_CANCEL) && (GetKeyState(VK_CONTROL) < 0)) { #ifndef KEY_OLD g_nNextInIdx = g_nNextOutIdx = g_nKeyBufferCnt = 0; #endif g_bFreshReset = true; CtrlReset(); return; } if ((key == VK_INSERT) && (GetKeyState(VK_SHIFT) < 0)) { // Shift+Insert ClipboardInitiatePaste(); return; } if (!((key >= VK_LEFT) && (key <= VK_DELETE) && asciicode[IS_APPLE2 ? 0 : 1][key - VK_LEFT])) return; keycode = asciicode[IS_APPLE2 ? 0 : 1][key - VK_LEFT]; // Convert to Apple arrow keycode lastvirtkey = key; } #ifdef KEY_OLD keywaiting = 1; #else bool bOverflow = false; if(g_nKeyBufferCnt < g_nKeyBufferSize) g_nKeyBufferCnt++; else bOverflow = true; g_nKeyBuffer[g_nNextInIdx].nVirtKey = lastvirtkey; g_nKeyBuffer[g_nNextInIdx].nAppleKey = keycode; g_nNextInIdx = (g_nNextInIdx + 1) % g_nKeyBufferSize; if(bOverflow) g_nNextOutIdx = (g_nNextOutIdx + 1) % g_nKeyBufferSize; #endif }
//=========================================================================== void KeybQueueKeypress (int key, BOOL bASCII) { static bool bFreshReset; if (bASCII == ASCII) { if (bFreshReset && key == 0x03) { bFreshReset = 0; return; // Swallow spurious CTRL-C caused by CTRL-BREAK } bFreshReset = 0; if (key > 0x7F) return; if (apple2e) if (capslock && (key >= 'a') && (key <='z')) keycode = key - 32; else keycode = key; else if (key >= '`') keycode = key - 32; else keycode = key; lastvirtkey = LOBYTE(VkKeyScan(key)); } else { if ((key == VK_CANCEL) && (GetKeyState(VK_CONTROL) < 0)) { // Ctrl+Reset if (apple2e) MemResetPaging(); DiskReset(); KeybReset(); if (apple2e) VideoResetState(); // Switch Alternate char set off MB_Reset(); #ifndef KEY_OLD g_nNextInIdx = g_nNextOutIdx = g_nKeyBufferCnt = 0; #endif CpuReset(); bFreshReset = 1; return; } if ((key == VK_INSERT) && (GetKeyState(VK_SHIFT) < 0)) { // Shift+Insert ClipboardInitiatePaste(); return; } if (!((key >= VK_LEFT) && (key <= VK_DELETE) && asciicode[apple2e][key - VK_LEFT])) return; keycode = asciicode[apple2e][key - VK_LEFT]; // Convert to Apple arrow keycode lastvirtkey = key; } #ifdef KEY_OLD keywaiting = 1; #else bool bOverflow = false; if(g_nKeyBufferCnt < g_nKeyBufferSize) g_nKeyBufferCnt++; else bOverflow = true; g_nKeyBuffer[g_nNextInIdx].nVirtKey = lastvirtkey; g_nKeyBuffer[g_nNextInIdx].nAppleKey = keycode; g_nNextInIdx = (g_nNextInIdx + 1) % g_nKeyBufferSize; if(bOverflow) g_nNextOutIdx = (g_nNextOutIdx + 1) % g_nKeyBufferSize; #endif }