==== KbdXlate ====
**Bindings**: [[xlat#C bindings|C]], [[xlat#MASM bindings|MASM]]
This call translates scan codes with shift states into ASCII codes.
KbdXlate (XlateRecord, KbdHandle)
//XlateRecord// (**PKBDTRANS**) - input
Address of the translation record structure:
//chardata// (**KBDKEYINFO**)
Character data information structure as defined in //[[charin|KbdCharIn]]// call.
//kbdflag// (**USHORT**)
See the //[[KbdDDFlagWord]]// call in the "Keyboard Device Driver" section of IBM Operating System/2 Version 1.2 I/O Subsystems And Device Support Volume 1.
//xlate// (**USHORT**)
Translation flag:
^Value ^Definition ^
|0 |Translation incomplete. |
|1 |Translation complete. |
//xlatestate1// (**USHORT**)
Identifies the state of translation across successive calls; initially the value should be zero. It may take several calls to this function to complete a character. The value should not be changed unless a new translation is required, that is, reset value to zero.
//xlatestate2// (**USHORT**)
See description for //xlatestate1//.
//KbdHandle// (**HKBD**) - input
Default keyboard or the logical keyboard.
//rc// (**USHORT**) - return
Return code descriptions are:
|0 |NO_ERROR |
|439 |ERROR_KBD_INVALID_HANDLE |
|445 |ERROR_KBD_FOCUS_REQUIRED |
|447 |ERROR_KBD_KEYBOARD_BUSY |
|464 |ERROR_KBD_DETACHED |
|504 |ERROR_KBD_EXTENDED_SG |
**Remarks**
It may take several calls to complete a translation because of accent key combinations, or other complex operations.
The //Xlatestate1// and //Xlatestate2// are for use by the keyboard translation routines. These fields are reserved and must only be accessed by the caller prior to starting a translation sequence and then they must be set to zero. The //KbdXlate// function is intended to be used for translating a particular scan code for a given shift state. The //KbdXlate// function is not intended to be a replacement for the OS/2 system keystroke translation function.
=== C bindings ===
typedef struct _KBDTRANS { /* kbxl */
UCHAR chChar; /* ASCII character code */
UCHAR chScan; /* Scan code */
UCHAR fbStatus; /* State of the character */
UCHAR bNlsShift; /* Shift status (reserved set to zero) */
USHORT fsState; /* Shift state */
ULONG time;
USHORT fsDD;
USHORT fsXlate;
USHORT fsShift;
USHORT sZero;
} KBDTRANS;
#define INCL_KBD
USHORT rc = KbdXlate(XlateRecord, KbdHandle);
PKBDTRANS XlateRecord; /* Translation Record */
HKBD KbdHandle; /* Keyboard handle */
USHORT rc; /* return code
=== MASM bindings ===
KBDTRANS struc
kbxl_chChar db ? ;ASCII character code
kbxl_chScan db ? ;scan code
kbxl_fbStatus db ? ;State of the character
kbxl_bNlsShift db ? ;shift status (reserved set to zero)
kbxl_fsState dw ? ;shift state
kbxl_time dd ?
kbxl_fsDD dw ?
kbxl_fsXlate dw ?
kbxl_fsShift dw ?
kbxl_sZero dw ?
KBDTRANS ends
EXTRN KbdXlate:FAR
INCL_KBD EQU 1
PUSH@ OTHER XlateRecord ;Translation Record
PUSH WORD KbdHandle ;Keyboard handle
CALL KbdXlate
Returns WORD