==== KbdSetCp ====
**Bindings**: [[setcp#C bindings|C]], [[setcp#MASM bindings|MASM]]
This call allows the process to set the code page used to translate key strokes received from the keyboard. 
KbdSetCp (Reserved, CodePageID, KbdHandle) 
//Reserved// (**USHORT**) - input 
Reserved and must be set to zero. 
//CodePageID// (**USHORT**) - input 
//CodePageID// represents a code-page ID in the application's data area. The code-page ID must be equivalent to one of the code-page IDs specified on the CONFIG.SYS CODEPAGE = statement or 0000. If the code-page ID does not match one of the IDs on the CODEPAGE = statement, an error results. The code-page word must have one of these code-page identifiers: 
^Identifier ^Description ^
|0 |Resident code page |
|437 |IBM PC US 437 |
|850 |Multilingual |
|860 |Portuguese |
|863 |Canadian-French |
|865 |Nordic. |
//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 |
|448 |ERROR_KBD_INVALID_CODEPAGE |
|464 |ERROR_KBD_DETACHED |
|504 |ERROR_KBD_EXTENDED_SG |
**Remarks**
Keyboard code page support is not available without the DEVINFO=KBD statement in the CONFIG.SYS file. Refer to IBM Operating System/2 Standard Edition Version 1.2 Using Advanced Features for a complete description of CODEPAGE and DEVINFO. 
=== C bindings ===
#define INCL_KBD
USHORT  rc = KbdSetCp(Reserved, CodePageID, KbdHandle);
USHORT           Reserved;      /* Reserved (must be zero) */
USHORT           CodePageID;    /* code page ID */
HKBD             KbdHandle;     /* Keyboard handle */
USHORT           rc;            /* return code */
=== MASM bindings ===
EXTRN  KbdSetCp:FAR
INCL_KBD            EQU 1
PUSH   WORD    Reserved      ;Reserved (must be zero)
PUSH   WORD    CodePageID    ;code page ID
PUSH   WORD    KbdHandle     ;Keyboard handle
CALL   KbdSetCp
Returns WORD