summaryrefslogtreecommitdiff
path: root/src/key.c
diff options
context:
space:
mode:
authorschneefux <schneefux+commit@schneefux.xyz>2016-06-12 20:08:57 +0200
committerschneefux <schneefux+commit@schneefux.xyz>2016-06-12 20:08:57 +0200
commitba07c2bc98fdba991b6d6444d57f0f897cf5959f (patch)
tree6ff34bf1bf181a6eebcd59bbeba2ad05ffe4408b /src/key.c
parent847d1a917f6cb17493c66398ce4ce53b89d8c438 (diff)
downloadfx-matris-ba07c2bc98fdba991b6d6444d57f0f897cf5959f.tar.gz
fx-matris-ba07c2bc98fdba991b6d6444d57f0f897cf5959f.zip
import full projectHEADmaster
Diffstat (limited to 'src/key.c')
-rw-r--r--src/key.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/key.c b/src/key.c
new file mode 100644
index 0000000..9083fbd
--- /dev/null
+++ b/src/key.c
@@ -0,0 +1,39 @@
+int OSVersionAsInt(void)
+{
+ unsigned char mainversion;
+ unsigned char minorversion;
+ unsigned short release;
+ unsigned short build;
+ GlibGetOSVersionInfo( &mainversion, &minorversion, &release, &build );
+ return ( ( mainversion << 24 ) & 0xFF000000 ) | ( ( minorversion << 16 ) & 0x00FF0000 ) | ( release & 0x0000FFFF );
+}
+
+#define isOS2 (OSVersionAsInt() >= 0x02020000)
+
+const unsigned short* keyboardregister = (unsigned short*)0xA44B0000;
+
+unsigned short key[8];
+
+int KeyDown(int keycode)
+{
+ if(isOS2)
+ {
+ int row, col, word, bit;
+
+ row = keycode%10;
+ col = keycode/10-1;
+ word = row>>1;
+ bit = col + 8*(row&1);
+
+ memcpy(&key, keyboardregister, 8 * sizeof(unsigned short));
+
+ return (0 != (key[word] & 1<<bit));
+ }
+ else
+ {
+ unsigned char buffer[12];
+ KBD_PRGM_GetKey( buffer );
+ return ( buffer[1] & 0x0F ) * 10 + ( ( buffer[2] & 0xF0 ) >> 4 ) == keycode;
+ }
+}
+