ID Number: Q43007
5.00 5.10 6.00 6.00a 6.00ax 7.00
MS-DOS
Summary:
In Microsoft C versions 5.0, 5.1, 6.0, 6.0a, 6.0ax, and C/C++ version
7.0, the _bios_keybrd() function uses INT function 16H to access the
keyboard services. The C 5.1 _bios_keybrd function() is based on the
original PC BIOS INT 16H, which does not support the extended
keyboard. The BIOS for AT's and PS/2's has been updated to support the
extended keyboard. The updated BIOS has three addition services: 10H
reads a character from the extended keyboard, 11H gets the
extended-keyboard status, 12H gets the extended-keyboard flags.
To allow the C 5.1 _bios_keybrd() to use these updated keyboard
services, define the following manifest constants.
#define _NKEYBRD_READ 0x10 /* read extended chars */
#define _NKEYBRD_READY 0x11 /* check if key waiting */
#define _NKEYBRD_SHIFT_STATUS 0x12 /* check shift key status */
To read keys from the extended keyboard, use these new constants in
place of the manifest constants described on page 138 of the
"Microsoft C for the MS-DOS Operating System: Run-Time Library
Reference" for version 5.1.
These constants are already defined in C versions 6.0 and later.
More Information:
The following program uses the enhanced services of INT function 16H
to determine if the UP ARROW or DOWN ARROW keys on the extended
keyboard were pressed. Uncomment the #define for C 5.1 and earlier.
Sample Code:
------------
/* Compile options needed: none
*/
/* #define _NKEYBRD_READ 0x10 */
#include <bios.h>
#include <stdio.h>
void main()
{
unsigned key;
key = _bios_keybrd( _NKEYBRD_READ );
if ( key == 0x48e0 )
printf( "Up arrow was pressed.\n" );
else if ( key == 0x50e0 )
printf( "Down arrow was pressed.\n" );
else
printf( "Neither the up or the down arrow was pressed.\n" );
}
Additional reference words: 5.00 5.10 6.00 6.00a 6.00ax 7.00 S_QUICKC