summaryrefslogtreecommitdiff
path: root/reference/C/CONTRIB/SNIP/isxkbrd.c
diff options
context:
space:
mode:
Diffstat (limited to 'reference/C/CONTRIB/SNIP/isxkbrd.c')
-rwxr-xr-xreference/C/CONTRIB/SNIP/isxkbrd.c47
1 files changed, 47 insertions, 0 deletions
diff --git a/reference/C/CONTRIB/SNIP/isxkbrd.c b/reference/C/CONTRIB/SNIP/isxkbrd.c
new file mode 100755
index 0000000..b104a7c
--- /dev/null
+++ b/reference/C/CONTRIB/SNIP/isxkbrd.c
@@ -0,0 +1,47 @@
+/*
+** ISXKBRD.C - public domain by Ed Kowalski.
+**
+** isxkeybrd() - detects enhanced kbd
+*/
+
+#include <dos.h>
+
+/*
+** Check for enhanced keyboard support.
+*/
+
+int isxkeybrd(void)
+{
+ union REGS rg;
+ unsigned kbdflags;
+
+ rg.h.ah = 0x02; /* check BIOS supports enhanced kbd */
+ int86(0x16, &rg, &rg); /* get kbd flags */
+ kbdflags = rg.h.al;
+
+ /* mess 'em up, get enhanced flags */
+
+ rg.x.ax = 0x1200 + kbdflags ^ 0xff;
+ int86(0x16, &rg, &rg);
+ if (rg.h.al == kbdflags) /* BIOS supports enhanced keyboard */
+ {
+ /* if bit 4 at 40:96h is set machine has an enhanced kbd */
+
+ if ((*(( char far *) 0x400096L) & 0x10))
+ return 1; /* enhanced keyboard present */
+ }
+ return 0; /* don't use enhanced keyboard calls */
+}
+
+#ifdef TEST
+
+#include <stdio.h>
+main()
+{
+ if (isxkeybrd())
+ puts( "Enhanced Keyboard supported" );
+ else puts( "Enhanced Keyboard NOT supported ");
+ return 0;
+}
+
+#endif /* TEST */