mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
653 lines
17 KiB
653 lines
17 KiB
/*++
|
|
|
|
Copyright (c) 1989 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
kbdtabl.c
|
|
|
|
Abstract:
|
|
|
|
This module contains the translation table for KBD according to CP
|
|
|
|
Author:
|
|
|
|
Michael Jarus (mjarus) 28-Apr-1992
|
|
|
|
Environment:
|
|
|
|
User Mode Only
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#define WIN32_ONLY
|
|
#include "os2ses.h"
|
|
#include "event.h"
|
|
#include "trans.h"
|
|
#include "kbd.h"
|
|
#include <stdio.h>
|
|
|
|
#ifdef JAPAN
|
|
// MSKK May.07.1993 V-AkihiS
|
|
// Support IOCtl KBD_KETKEYBDTYPE and KBD_GETHARDWAREID
|
|
USHORT KbdType, KbdSubType;
|
|
BYTE OemId, OemSubType;
|
|
#endif
|
|
|
|
USHORT Ow2KbdHWIDs = 1; // BUGBUG -?
|
|
USHORT Ow2KCBShFlgs = 0; // BUGBUG -?
|
|
|
|
UCHAR Ow2MiscFlags = 0;
|
|
#define EnhancedKbd 0x10 // bit 4 - Enhanced Kbd is out there (must be Bit 4!).
|
|
|
|
UCHAR Ow2MiscFlags3 = 0;
|
|
#define AltPacket 2 // bit 1 - DCR 1713: indicates that Alt-Numpad accumulation is finished.
|
|
#define PauseLatch 4 // bit 2 - PTM 2344: indicates correct keystroke sequence for a Ctrl-NumLock.
|
|
#define E0Packet 0x10 // bit 4 - PTM 2382: indicates that an E0 packet is to be sent with the next packet.
|
|
#define SecAltNumPad 0x80 // bit 7 - PTR AK00370: indicates AltNumpad with R-Alt.
|
|
|
|
|
|
extern PVOID Ow2US437001, Ow2US437011, Ow2US850000, Ow2US850010;
|
|
extern PVOID Ow2BE437001, Ow2BE437011, Ow2BE850000, Ow2BE850010;
|
|
extern PVOID Ow2CF863001, Ow2CF863011, Ow2CF850000, Ow2CF850010;
|
|
extern PVOID Ow2DK865001, Ow2DK865011, Ow2DK850000, Ow2DK850010;
|
|
extern PVOID Ow2FR437001, Ow2FR437011, Ow2FR437111, Ow2FR850000, Ow2FR850010, Ow2FR850011;
|
|
extern PVOID Ow2GR437001, Ow2GR437011, Ow2GR850000, Ow2GR850010;
|
|
extern PVOID Ow2IT437001, Ow2IT437011, Ow2IT437111, Ow2IT850000, Ow2IT850010, Ow2IT850011;
|
|
extern PVOID Ow2LA437001, Ow2LA437011, Ow2LA850000, Ow2LA850010;
|
|
extern PVOID Ow2NL437001, Ow2NL437011, Ow2NL850000, Ow2NL850010;
|
|
extern PVOID Ow2NO865001, Ow2NO865011, Ow2NO850000, Ow2NO850010;
|
|
extern PVOID Ow2PO860001, Ow2PO860011, Ow2PO850000, Ow2PO850010;
|
|
extern PVOID Ow2SF437001, Ow2SF437011, Ow2SF850000, Ow2SF850010;
|
|
extern PVOID Ow2SG437001, Ow2SG437011, Ow2SG850000, Ow2SG850010;
|
|
extern PVOID Ow2SP437001, Ow2SP437011, Ow2SP850000, Ow2SP850010;
|
|
extern PVOID Ow2SU437001, Ow2SU437011, Ow2SU850000, Ow2SU850010;
|
|
extern PVOID Ow2SV437001, Ow2SV437011, Ow2SV850000, Ow2SV850010;
|
|
extern PVOID Ow2UK437001, Ow2UK437011, Ow2UK437111, Ow2UK850000, Ow2UK850010, Ow2UK850011;
|
|
#ifdef JAPAN
|
|
// MSKK Aug.02.1993 V-AkihiS
|
|
extern PVOID Ow2JP932011AX, Ow2JP437011AX;
|
|
extern PVOID Ow2JP932011IBM002, Ow2JP437011IBM002;
|
|
extern PVOID Ow2JP932011IBMA01, Ow2JP437011IBMA01;
|
|
extern PVOID Ow2JP932011IBM101, Ow2JP437011IBM101;
|
|
#endif
|
|
|
|
typedef struct _KBD_TYPE_TABLE
|
|
{
|
|
PVOID CP1Table;
|
|
PVOID CP2Table;
|
|
} KBD_TYPE_TABLE, *PKBD_TYPE_TABLE;
|
|
|
|
typedef struct _KBD_LANG_TABLE
|
|
{
|
|
ULONG Country;
|
|
ULONG CodePage1;
|
|
ULONG CodePage2;
|
|
KBD_TYPE_TABLE AtTable;
|
|
KBD_TYPE_TABLE EnTable;
|
|
KBD_TYPE_TABLE EnNewTable;
|
|
} KBD_LANG_TABLE;
|
|
|
|
KBD_LANG_TABLE KbdNlsTable[] =
|
|
{
|
|
{
|
|
CTRY_BELGIUM,
|
|
437,
|
|
850,
|
|
{
|
|
&Ow2BE437001, // BE 437 AT Kbd
|
|
&Ow2BE850000, // BE 850 AT Kbd
|
|
},
|
|
{
|
|
&Ow2BE437011, // BE 437 EN Kbd
|
|
&Ow2BE850010, // BE 850 EN Kbd
|
|
},
|
|
{
|
|
&Ow2BE437011, // BE 437 EN Kbd (for New Std as Old)
|
|
&Ow2BE850010 // BE 850 EN Kbd (for New Std as Old)
|
|
}
|
|
},
|
|
{
|
|
CTRY_CANADA,
|
|
863,
|
|
850,
|
|
{
|
|
&Ow2CF863001, // CF 863 AT Kbd
|
|
&Ow2CF850000, // CF 850 AT Kbd
|
|
},
|
|
{
|
|
&Ow2CF863011, // CF 863 EN Kbd
|
|
&Ow2CF850010, // CF 850 EN Kbd
|
|
},
|
|
{
|
|
&Ow2CF863011, // CF 863 EN Kbd (for New Std as Old)
|
|
&Ow2CF850010 // CF 850 EN Kbd (for New Std as Old)
|
|
}
|
|
},
|
|
{
|
|
CTRY_DENMARK,
|
|
865,
|
|
850,
|
|
{
|
|
&Ow2DK865001, // DK 865 AT Kbd
|
|
&Ow2DK850000, // DK 850 AT Kbd
|
|
},
|
|
{
|
|
&Ow2DK865011, // DK 865 EN Kbd
|
|
&Ow2DK850010, // DK 850 EN Kbd
|
|
},
|
|
{
|
|
&Ow2DK865011, // DK 865 EN Kbd (for New Std as Old)
|
|
&Ow2DK850010 // DK 850 EN Kbd (for New Std as Old)
|
|
}
|
|
},
|
|
{
|
|
CTRY_FRANCE,
|
|
437,
|
|
850,
|
|
{
|
|
&Ow2FR437001, // FR 437 AT Kbd
|
|
&Ow2FR850000, // FR 850 AT Kbd
|
|
},
|
|
{
|
|
&Ow2FR437011, // FR 437 EN Kbd
|
|
&Ow2FR850010, // FR 850 EN Kbd
|
|
},
|
|
{
|
|
&Ow2FR437111, // FR 437 EN Kbd New Std
|
|
&Ow2FR850011 // FR 850 EN Kbd New Std
|
|
}
|
|
},
|
|
{
|
|
CTRY_GERMANY,
|
|
437,
|
|
850,
|
|
{
|
|
&Ow2GR437001, // GR 437 AT Kbd
|
|
&Ow2GR850000, // GR 850 AT Kbd
|
|
},
|
|
{
|
|
&Ow2GR437011, // GR 437 EN Kbd
|
|
&Ow2GR850010, // GR 850 EN Kbd
|
|
},
|
|
{
|
|
&Ow2GR437011, // GR 437 EN Kbd (for New Std as Old)
|
|
&Ow2GR850010 // GR 850 EN Kbd (for New Std as Old)
|
|
}
|
|
},
|
|
{
|
|
CTRY_ITALY,
|
|
437,
|
|
850,
|
|
{
|
|
&Ow2IT437001, // IT 437 AT Kbd
|
|
&Ow2IT850000, // IT 850 AT Kbd
|
|
},
|
|
{
|
|
&Ow2IT437011, // IT 437 EN Kbd
|
|
&Ow2IT850010, // IT 850 EN Kbd
|
|
},
|
|
{
|
|
&Ow2IT437111, // IT 437 EN Kbd New Std
|
|
&Ow2IT850011 // IT 850 EN Kbd New Std
|
|
}
|
|
},
|
|
{
|
|
COUNTRY_LATIN_AMERICA,
|
|
437,
|
|
850,
|
|
{
|
|
&Ow2LA437001, // LA 437 AT Kbd
|
|
&Ow2LA850000, // LA 850 AT Kbd
|
|
},
|
|
{
|
|
&Ow2LA437011, // LA 437 EN Kbd
|
|
&Ow2LA850010, // LA 850 EN Kbd
|
|
},
|
|
{
|
|
&Ow2LA437011, // LA 437 EN Kbd (for New Std as Old)
|
|
&Ow2LA850010 // LA 850 EN Kbd (for New Std as Old)
|
|
}
|
|
},
|
|
{
|
|
CTRY_NETHERLANDS,
|
|
437,
|
|
850,
|
|
{
|
|
&Ow2NL437001, // NL 437 AT Kbd
|
|
&Ow2NL850000, // NL 850 AT Kbd
|
|
},
|
|
{
|
|
&Ow2NL437011, // NL 437 EN Kbd
|
|
&Ow2NL850010, // NL 850 EN Kbd
|
|
},
|
|
{
|
|
&Ow2NL437011, // NL 437 EN Kbd (for New Std as Old)
|
|
&Ow2NL850010 // NL 850 EN Kbd (for New Std as Old)
|
|
}
|
|
},
|
|
{
|
|
CTRY_NORWAY,
|
|
865,
|
|
850,
|
|
{
|
|
&Ow2NO865001, // NO 865 AT Kbd
|
|
&Ow2NO850000, // NO 850 AT Kbd
|
|
},
|
|
{
|
|
&Ow2NO865011, // NO 865 EN Kbd
|
|
&Ow2NO850010, // NO 850 EN Kbd
|
|
},
|
|
{
|
|
&Ow2NO865011, // NO 865 EN Kbd (for New Std as Old)
|
|
&Ow2NO850010 // NO 850 EN Kbd (for New Std as Old)
|
|
}
|
|
},
|
|
{
|
|
CTRY_PORTUGAL,
|
|
860,
|
|
850,
|
|
{
|
|
&Ow2PO860001, // PO 860 AT Kbd
|
|
&Ow2PO850000, // PO 850 AT Kbd
|
|
},
|
|
{
|
|
&Ow2PO860011, // PO 860 EN Kbd
|
|
&Ow2PO850010, // PO 850 EN Kbd
|
|
},
|
|
{
|
|
&Ow2PO860011, // PO 860 EN Kbd (for New Std as Old)
|
|
&Ow2PO850010 // PO 850 EN Kbd (for New Std as Old)
|
|
}
|
|
},
|
|
{
|
|
CTRY_SWITZERLAND,
|
|
437,
|
|
850,
|
|
{
|
|
&Ow2SF437001, // SF 437 AT Kbd
|
|
&Ow2SF850000, // SF 850 AT Kbd
|
|
},
|
|
{
|
|
&Ow2SF437011, // SF 437 EN Kbd
|
|
&Ow2SF850010, // SF 850 EN Kbd
|
|
},
|
|
{
|
|
&Ow2SF437011, // SF 437 EN Kbd (for New Std as Old)
|
|
&Ow2SF850010 // SF 850 EN Kbd (for New Std as Old)
|
|
}
|
|
},
|
|
{
|
|
CTRY_SWITZERLAND,
|
|
437,
|
|
850,
|
|
{
|
|
&Ow2SG437001, // SG 437 AT Kbd
|
|
&Ow2SG850000, // SG 850 AT Kbd
|
|
},
|
|
{
|
|
&Ow2SG437011, // SG 437 EN Kbd
|
|
&Ow2SG850010, // SG 850 EN Kbd
|
|
},
|
|
{
|
|
&Ow2SG437011, // SG 437 EN Kbd (for New Std as Old)
|
|
&Ow2SG850010 // SG 850 EN Kbd (for New Std as Old)
|
|
}
|
|
},
|
|
{
|
|
CTRY_SPAIN,
|
|
437,
|
|
850,
|
|
{
|
|
&Ow2SP437001, // SP 437 AT Kbd
|
|
&Ow2SP850000, // SP 850 AT Kbd
|
|
},
|
|
{
|
|
&Ow2SP437011, // SP 437 EN Kbd
|
|
&Ow2SP850010, // SP 850 EN Kbd
|
|
},
|
|
{
|
|
&Ow2SP437011, // SP 437 EN Kbd (for New Std as Old)
|
|
&Ow2SP850010 // SP 850 EN Kbd (for New Std as Old)
|
|
}
|
|
},
|
|
{
|
|
CTRY_FINLAND,
|
|
437,
|
|
850,
|
|
{
|
|
&Ow2SU437001, // SU 437 AT Kbd
|
|
&Ow2SU850000, // SU 850 AT Kbd
|
|
},
|
|
{
|
|
&Ow2SU437011, // SU 437 EN Kbd
|
|
&Ow2SU850010, // SU 850 EN Kbd
|
|
},
|
|
{
|
|
&Ow2SU437011, // SU 437 EN Kbd (for New Std as Old)
|
|
&Ow2SU850010 // SU 850 EN Kbd (for New Std as Old)
|
|
}
|
|
},
|
|
{
|
|
CTRY_SWEDEN,
|
|
437,
|
|
850,
|
|
{
|
|
&Ow2SV437001, // SV 437 AT Kbd
|
|
&Ow2SV850000, // SV 850 AT Kbd
|
|
},
|
|
{
|
|
&Ow2SV437011, // SV 437 EN Kbd
|
|
&Ow2SV850010, // SV 850 EN Kbd
|
|
},
|
|
{
|
|
&Ow2SV437011, // SV 437 EN Kbd (for New Std as Old)
|
|
&Ow2SV850010 // SV 850 EN Kbd (for New Std as Old)
|
|
}
|
|
},
|
|
{
|
|
CTRY_UNITED_KINGDOM,
|
|
437,
|
|
850,
|
|
{
|
|
&Ow2UK437001, // UK 437 AT Kbd
|
|
&Ow2UK850000, // UK 850 AT Kbd
|
|
},
|
|
{
|
|
&Ow2UK437011, // UK 437 EN Kbd
|
|
&Ow2UK850010, // UK 850 EN Kbd
|
|
},
|
|
{
|
|
&Ow2UK437111, // UK 437 EN Kbd New Std
|
|
&Ow2UK850011 // UK 850 EN Kbd New Std
|
|
}
|
|
},
|
|
{
|
|
/* Must be last as the default */
|
|
|
|
CTRY_UNITED_STATES,
|
|
437,
|
|
850,
|
|
{
|
|
&Ow2US437001, // US 437 AT Kbd
|
|
&Ow2US850000, // US 850 AT Kbd
|
|
},
|
|
{
|
|
&Ow2US437011, // US 437 EN Kbd
|
|
&Ow2US850010, // US 850 EN Kbd
|
|
},
|
|
{
|
|
&Ow2US437011, // US 437 EN Kbd (for New Std as Old)
|
|
&Ow2US850010 // US 850 EN Kbd (for New Std as Old)
|
|
}
|
|
},
|
|
{
|
|
0,
|
|
0,
|
|
0,
|
|
{
|
|
NULL,
|
|
NULL,
|
|
},
|
|
{
|
|
NULL,
|
|
NULL,
|
|
},
|
|
{
|
|
NULL,
|
|
NULL
|
|
}
|
|
}
|
|
};
|
|
|
|
#ifdef JAPAN
|
|
// MSKK Aug.03.1993 V-AkihiS
|
|
typedef struct _KBD_TYPE_TABLE_OEM
|
|
{
|
|
BYTE OemSubType;
|
|
KBD_TYPE_TABLE EnTable;
|
|
#if DBG
|
|
PBYTE OemSubTypeStr;
|
|
#endif
|
|
} KBD_TYPE_TABLE_OEM, *PKBD_TYPE_TABLE_OEM;
|
|
|
|
typedef struct _KBD_TYPE_TABLE_JP
|
|
{
|
|
BYTE OemId;
|
|
PKBD_TYPE_TABLE_OEM pKbdTableOEM;
|
|
#if DBG
|
|
PBYTE OemIdStr;
|
|
#endif
|
|
} KBD_TYPE_TABLE_JP;
|
|
|
|
#if DBG
|
|
BYTE SubKbdTypeMicrosoftStr[] = "Microsoft";
|
|
|
|
BYTE AXKbdDesktopTypeStr[] = "AX KeyBoard";
|
|
BYTE IBMKbd002TypeStr[] = "IBM-002 Keyboard";
|
|
BYTE IBMKbdA01TypeStr[] = "106 keyboard";
|
|
BYTE IBM101KbdTypeStr[] = "101 keyboard";
|
|
#endif
|
|
|
|
KBD_TYPE_TABLE_OEM KbdTypeTableMicrosoft[] =
|
|
{
|
|
{
|
|
MICROSOFT_KBD_101_TYPE,
|
|
{
|
|
&Ow2JP932011IBM101, // 101 keybaord 932
|
|
&Ow2JP437011IBM101 // 101 keyboard 437
|
|
}
|
|
#if DBG
|
|
, (PBYTE)&IBM101KbdTypeStr
|
|
#endif
|
|
},
|
|
{
|
|
MICROSOFT_KBD_AX_TYPE,
|
|
{
|
|
&Ow2JP932011AX, // AX keybaord 932
|
|
&Ow2JP437011AX // AX keyboard 437
|
|
}
|
|
#if DBG
|
|
, (PBYTE)&AXKbdDesktopTypeStr
|
|
#endif
|
|
},
|
|
{
|
|
MICROSOFT_KBD_106_TYPE,
|
|
{
|
|
&Ow2JP932011IBMA01, // 106 keybaord 932
|
|
&Ow2JP437011IBMA01 // 106 keyboard 437
|
|
}
|
|
#if DBG
|
|
, (PBYTE)&IBMKbdA01TypeStr
|
|
#endif
|
|
},
|
|
{
|
|
MICROSOFT_KBD_002_TYPE,
|
|
{
|
|
&Ow2JP932011IBM002, // IBM-002 keybaord 932
|
|
&Ow2JP437011IBM002 // IBM-002 keyboard 437
|
|
}
|
|
#if DBG
|
|
, (PBYTE)&IBMKbd002TypeStr
|
|
#endif
|
|
},
|
|
{
|
|
0xFF,
|
|
{
|
|
NULL,
|
|
NULL
|
|
}
|
|
#if DBG
|
|
, NULL
|
|
#endif
|
|
}
|
|
};
|
|
|
|
|
|
KBD_TYPE_TABLE_JP KbdTableJp[] =
|
|
{
|
|
{
|
|
SUB_KBD_TYPE_MICROSOFT,
|
|
(PKBD_TYPE_TABLE_OEM)&KbdTypeTableMicrosoft
|
|
#if DBG
|
|
, (PBYTE)&SubKbdTypeMicrosoftStr
|
|
#endif
|
|
},
|
|
{
|
|
0xFF,
|
|
NULL
|
|
#if DBG
|
|
, NULL
|
|
#endif
|
|
}
|
|
};
|
|
#endif
|
|
|
|
VOID
|
|
KbdSetTable(
|
|
IN ULONG KbdCP
|
|
)
|
|
{
|
|
ULONG i;
|
|
ULONG Ctry = SesGrp->KeyboardCountry;
|
|
PKBD_TYPE_TABLE pKbdType;
|
|
#ifdef JAPAN
|
|
// MSKK Aug.03.1993 V-AkihiS
|
|
ULONG j;
|
|
#endif
|
|
|
|
#ifdef JAPAN
|
|
// MSKK Jul.29.1993 V-AkihiS
|
|
if (Ctry == COUNTRY_JAPAN)
|
|
{
|
|
//
|
|
// Get keyboard type to decide translation table
|
|
//
|
|
KbdType = GetKeyboardType(0);
|
|
KbdSubType = GetKeyboardType(1);
|
|
OemId = HIBYTE(KbdSubType);
|
|
OemSubType = LOBYTE(KbdSubType);
|
|
|
|
for ( i = 0 ;
|
|
(KbdTableJp[i].OemId != OemId) && KbdTableJp[i+1].OemId != 0xFF;
|
|
i++ );
|
|
for ( j = 0 ;
|
|
((KbdTableJp[i].pKbdTableOEM)[j].OemSubType != OemSubType) &&
|
|
(KbdTableJp[i].pKbdTableOEM)[j+1].OemSubType !=0xFF;
|
|
j++ );
|
|
|
|
switch(KbdCP) {
|
|
case CODEPAGE_JAPAN:
|
|
case 0:
|
|
Ow2KbdScanTable = (KbdTableJp[i].pKbdTableOEM)[j].EnTable.CP1Table;
|
|
break;
|
|
default:
|
|
Ow2KbdScanTable = (KbdTableJp[i].pKbdTableOEM)[j].EnTable.CP2Table;
|
|
break;
|
|
}
|
|
Ow2MiscFlags = EnhancedKbd;
|
|
#if DBG
|
|
IF_OS2_DEBUG2( OS2_EXE, KBD )
|
|
{
|
|
KdPrint(("KbdSetTable: Country %d, CP %u, OemId %s, OemSubType %s\n",
|
|
Ctry,
|
|
KbdCP,
|
|
KbdTableJp[i].OemIdStr,
|
|
(KbdTableJp[i].pKbdTableOEM)[j].OemSubTypeStr));
|
|
}
|
|
#endif
|
|
return;
|
|
}
|
|
#endif
|
|
|
|
for ( i = 0 ;
|
|
(KbdNlsTable[i].Country != Ctry) && KbdNlsTable[i+1].Country ;
|
|
i++ );
|
|
|
|
if (SesGrp->KeyboardType == OS2SS_AT_KBD)
|
|
{
|
|
pKbdType = &KbdNlsTable[i].AtTable;
|
|
Ow2MiscFlags = 0;
|
|
} else if (SesGrp->KeyboardType == OS2SS_ENNEW_KBD)
|
|
{
|
|
pKbdType = &KbdNlsTable[i].EnNewTable;
|
|
Ow2MiscFlags = EnhancedKbd;
|
|
} else // OS2SS_EN_KBD
|
|
{
|
|
pKbdType = &KbdNlsTable[i].EnTable;
|
|
Ow2MiscFlags = EnhancedKbd;
|
|
}
|
|
|
|
if (KbdNlsTable[i].CodePage2 == KbdCP)
|
|
{
|
|
Ow2KbdScanTable = pKbdType->CP2Table;
|
|
} else
|
|
{
|
|
// use CodePage 1 as the default
|
|
|
|
Ow2KbdScanTable = pKbdType->CP1Table;
|
|
}
|
|
|
|
#if DBG
|
|
IF_OS2_DEBUG2( OS2_EXE, KBD )
|
|
{
|
|
KdPrint(("KbdSetTable: Country %d, CP %u, Type %s\n",
|
|
KbdNlsTable[i].Country,
|
|
(KbdNlsTable[i].CodePage2 == KbdCP) ? KbdCP : KbdNlsTable[i].CodePage1,
|
|
(SesGrp->KeyboardType == OS2SS_AT_KBD) ? "AT" :
|
|
((SesGrp->KeyboardType == OS2SS_ENNEW_KBD) ? "EN-NEW" : "EN")));
|
|
}
|
|
#endif
|
|
|
|
return;
|
|
}
|
|
|
|
|
|
DWORD
|
|
KbdInitForNLS(
|
|
IN ULONG KbdCP
|
|
)
|
|
{
|
|
SesGrp->KbdCP = KbdCP;
|
|
KbdQueue->Cp = (USHORT)KbdCP;
|
|
KbdSetTable(KbdCP);
|
|
return (NO_ERROR);
|
|
}
|
|
|
|
|
|
DWORD
|
|
KbdNewCp( IN ULONG CodePage)
|
|
{
|
|
DWORD Rc = NO_ERROR;
|
|
|
|
#ifdef DBCS
|
|
// MSKK Apr.16.1993 V-AkihiS
|
|
ULONG CPTmp;
|
|
#endif
|
|
|
|
#ifdef DBCS
|
|
// MSKK Apr.16.1993 V-AkihiS
|
|
CPTmp = CodePage ? CodePage : SesGrp->PrimaryCP;
|
|
#endif
|
|
if (SesGrp->KbdCP != CodePage)
|
|
{
|
|
#ifdef DBCS
|
|
// MSKK Apr.16.1993 V-AkihiS
|
|
Rc = !SetConsoleCP((UINT)CPTmp);
|
|
#else
|
|
Rc = !SetConsoleCP((UINT)CodePage);
|
|
#endif
|
|
if (Rc)
|
|
{
|
|
ASSERT1("KbdNewCp: Cannot set ConsoelCP", FALSE);
|
|
} else
|
|
{
|
|
KbdQueue->Cp = (USHORT)CodePage;
|
|
SesGrp->KbdCP = CodePage;
|
|
KbdSetTable(CodePage);
|
|
}
|
|
}
|
|
return (Rc);
|
|
}
|