From c74e8c3fb9f7df71833951f042e7e68ec5235f9a Mon Sep 17 00:00:00 2001
From: KO Myung-Hun <komh78@gmail.com>
Date: Thu, 5 Nov 2026 11:06:29 +0900
Subject: [PATCH] Fix keypad keys do not work

On some keyboards, keypad keys are treated as character keys. As a result,
4OS2 ignore the keys.
---
 c/os2tty.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/c/os2tty.c b/c/os2tty.c
index b7a87bf..e8fa40b 100644
--- a/c/os2tty.c
+++ b/c/os2tty.c
@@ -28,6 +28,12 @@ unsigned int GetKeystroke( int eflag )
         // wait for a key, and check for extended scan code
         do {
             (void)KbdCharIn( &keyinfo, (USHORT)0, (HKBD)0 );
+            // Bit 1 of keyinfo.fbStatus is not set in case of keypad keys on some keyboards
+            if (!(keyinfo.fbStatus & 2) && ((keyinfo.chChar == 0) || (keyinfo.chChar == 0xE0)) &&
+                ((keyinfo.chScan >= 0x47) && (keyinfo.chScan <= 0x49)) ||
+                ((keyinfo.chScan >= 0x4B) && (keyinfo.chScan <= 0x4D)) ||
+                ((keyinfo.chScan >= 0x4F) && (keyinfo.chScan <= 0x53)))
+                keyinfo.fbStatus |= 2;
             c = (((keyinfo.fbStatus & 2) && ((keyinfo.chChar == 0) || (keyinfo.chChar == 0xE0))) ? (keyinfo.chScan | 0x100) : keyinfo.chChar);
         } while ( c == 0 );
     }
-- 
2.50.1

