/*++
Copyright (c) 1989 Microsoft Corporation
Module Name:
trans.h
Abstract:
Prototypes for functions & macros in trans.c
Author:
Michael Jarus (mjarus) 27-Oct-1991
Environment:
User Mode Only
Revision History:
--*/
PVOID Ow2KbdScanTable;
CONSOLE_CURSOR_INFO OldWinCurInfo; /* Win Cursor Info (saved in PopUp) */
typedef struct _KBD_XLATE_VARS
{
USHORT XDRFlags; // => delete: See XCOMPLETE below. Not
// used at interrupt time.
USHORT XHotKeyShift; // Interrupt driven shift status
USHORT XPSGFlags; // Copy of caller's PSG flags.
// (changed byte->word and position in structure per DCR8)
UCHAR XlateFlags; // See equates below.
UCHAR ToggleFlags; // See equates below.
UCHAR XInputMode; // Copy of desired input mode. 0 - cooked, SHIFTREPORT - to test this mode
UCHAR XAltKeyPad; // Accumulator for Alt-nnn entry
UCHAR OtherFlags; // NEW: for InterruptTime
} KBD_XLATE_VARS, *PKBD_XLATE_VARS;
// XPSGFlags
#define PrevAccent 7 // Bits where accent number saved til next keystroke.
// XlateFlags
#define SecPrefix 4 // G keyboard E0 prefix scan code just seen.
// OtherFlags
#define InterruptTime 4 // bit 2 - Currently processing an interrupt.
KBD_XLATE_VARS Ow2KbdXlateVars;
DWORD VioSetScreenSize(IN SHORT Row, IN SHORT Col, IN HANDLE hConsole);
DWORD SetScreenSizeParm(IN SHORT Row, IN SHORT Col);
/* macros for char translation */
/*
* OS2-->WIN : VIO-Character
* =============
*/
#ifdef DBCS
// MSKK Jun.26.1992 KazuM
// MSKK Oct.26.1992 V-AKihiS
#define MapOs2ToWinChar(Os2Char, NumLen, WinChar) \
MultiByteToWideChar( \
(UINT)SesGrp->VioCP, \
OS2SS_NLS_MB_DEFAULT, \
(LPSTR)&Os2Char, \
(int)NumLen, \
(LPWSTR)&WinChar, \
(int)1);
#else
#define MapOs2ToWinChar(Os2Char, WinChar) \
MultiByteToWideChar( \
(UINT)SesGrp->VioCP, \
OS2SS_NLS_MB_DEFAULT, \
(LPSTR)&Os2Char, \
(int)1, \
(LPWSTR)&WinChar, \
(int)1);
#endif
/*
* OS2-->WIN : VIO-Attribute
* =============
*/
#ifdef DBCS
// MSKK Jun.28.1992 KazuM
WORD
MapOs2ToWinAttr(
IN PBYTE Os2Attr
);
#else
#define MapOs2ToWinAttr(Os2Attr) \
((WORD) Os2Attr)
// ((WORD) (Os2Attr & ~OS2_BACKGROUND_BLINKING))
#endif
/*** Nt WinCon attribute flags
#define FOREGROUND_BLUE 0x0001 // text color contains blue.
#define FOREGROUND_GREEN 0x0002 // text color contains green.
#define FOREGROUND_RED 0x0004 // text color contains red.
#define FOREGROUND_INTENSITY 0x0008 // text color is intensified.
#define BACKGROUND_BLUE 0x0010 // background color contains blue.
#define BACKGROUND_GREEN 0x0020 // background color contains green.
#define BACKGROUND_RED 0x0040 // background color contains red.
#define BACKGROUND_INTENSITY 0x0080 // background color is intensified. ***/
/*** OS/2 screen attributes ***/
#define OS2_FOREGROUND_BLUE 0x0001 // text color contains blue.
#define OS2_FOREGROUND_GREEN 0x0002 // text color contains green.
#define OS2_FOREGROUND_RED 0x0004 // text color contains red.
#define OS2_FOREGROUND_INTENSITY 0x0008 // text color is intensified.
#define OS2_BACKGROUND_BLUE 0x0010 // background color contains blue.
#define OS2_BACKGROUND_GREEN 0x0020 // background color contains green.
#define OS2_BACKGROUND_RED 0x0040 // background color contains red.
#define OS2_BACKGROUND_BLINKING 0x0080 // blinking character.
#ifdef DBCS
// MSKK Oct.13.1993 V-AkihiS
#define OS2_COMMON_LVB_SBCS 0x00 // SBCS character
#define OS2_COMMON_LVB_LEADING_BYTE 0x01 // DBCS leading byte
#define OS2_COMMON_LVB_TRAILING_BYTE 0x81 // DBCS trailing byte
#endif
/*
* OS2-->WIN : VIO-Character-string
* ====================
*/
/*
* OS2-->WIN : VIO-Cell-string
* ===============
*/
#ifdef DBCS
// MSKK Oct.26.1992 V-AkihiS
#define MapOs2ToWinCellStr(DestChar, DestAttr, Sour, Length, NumWide) \
{ int i, j; \
PBYTE os2Cell; \
PWORD winAttr; \
PBYTE winChar; \
\
os2Cell = Sour; \
winChar = (PBYTE)DestChar; \
winAttr = DestAttr; \
for (i=j=0; i<(int)Length; winChar[i]=(os2Cell[j]), \
winAttr[i++]=MapOs2ToWinAttr(&os2Cell[j+1]), \
j += (SesGrp->VioLength2CellShift<<1)\
); \
if (CheckBisectStringA((DWORD)SesGrp->VioCP, \
(PCHAR)Ow2VioDataAddress, \
(DWORD)Length)) { \
*((PCHAR)Ow2VioDataAddress+Length-1) = ' '; \
} \
NumWide = Length; \
}
#else
#define MapOs2ToWinCellStr(DestChar, DestAttr, Sour, Length, NumWide) \
{ int i, j; \
PBYTE os2Cell; \
PWORD winAttr; \
PBYTE winChar; \
\
os2Cell = Sour; \
winChar = (PBYTE)DestChar; \
winAttr = DestAttr; \
for (i=j=0; i<(int)Length; winChar[i]=(os2Cell[j++]), \
winAttr[i++]=MapOs2ToWinAttr(os2Cell[j++])); \
NumWide = Length; \
}
#endif
/*
* OS2-->WIN : VIO-CursorPosition
* ==================
*/
DWORD MapOs2ToWinCursor(IN OUT PVIOCURSORINFO pCursorInfo,
OUT PCONSOLE_CURSOR_INFO lpCursorInfo);
/*
* WIN-->OS2 : VIO-Character
* =============
*/
#define MapWin2Os2Char(WinChar, Os2Char) \
{ \
BOOL Bool; \
\
WideCharToMultiByte( \
(UINT)SesGrp->VioCP, \
OS2SS_NLS_WC_DEFAULT, \
(LPWSTR)&WinChar, \
(int)1, \
(LPSTR)&Os2Char, \
(int)1, \
NULL, \
&Bool); \
} \
/*
* WIN-->OS2 : VIO-Attribute
* =============
*/
#ifdef DBCS
// MSKK Jun.24.1992 KazuM
VOID
MapWin2Os2Attr(
IN WORD NtAttr,
OUT PBYTE Os2Attr
);
#else
#define MapWin2Os2Attr(NtAttr) \
((BYTE)NtAttr)
// ((BYTE)(NtAttr & ~OS2_BACKGROUND_BLINKING))
#endif
/*
* WIN-->OS2 : VIO-Character-string
* ====================
*/
/* BUGBUG=> Add support for NLS & UNICODE */
#define MapWin2Os2CharStr(Dest, Sour, Length, NumChar) \
{ \
BOOL Bool; \
\
NumChar = WideCharToMultiByte( \
(UINT)SesGrp->VioCP, \
OS2SS_NLS_WC_DEFAULT, \
(LPWSTR)Sour, \
(int)(Length), \
(LPSTR)Dest, \
(int)(KBD_OFFSET - WIDE_OFFSET), \
NULL, \
&Bool); \
} \
/*
* WIN-->OS2 : VIO-Cell-string
* ===============
*/
#ifdef DBCS
// MSKK Oct.26.1992 V-AkihiS
// MSKK Nov.07.1992 V-AkihiS
#define MapWin2Os2CellStr(Dest, SourChar, SourAttr, Length, NumChar) \
{ int i, j; \
PBYTE os2Cell; \
PWORD winAttr; \
PBYTE winChar; \
BOOL Bool; \
BYTE c; \
BYTE Os2Attr[3]; \
\
os2Cell = Dest; \
winChar = (PBYTE)SourChar; \
winAttr = SourAttr; \
\
for (i=j=0; i<(int)Length;) \
{ \
MapWin2Os2Attr(winAttr[i],Os2Attr); \
if (Ow2NlsIsDBCSLeadByte(c=winChar[i], SesGrp->VioCP)) { \
if (i <(int) (NumChar-1)) { \
if (SesGrp->VioLength2CellShift == 1) { \
os2Cell[j++]=c; \
os2Cell[j++]=Os2Attr[0]; \
i++; \
MapWin2Os2Attr(winAttr[i],Os2Attr); \
os2Cell[j++]=winChar[i]; \
os2Cell[j++]=Os2Attr[0]; \
i++; \
} \
else { \
os2Cell[j++]=c; \
os2Cell[j++]=Os2Attr[0]; \
os2Cell[j++]=Os2Attr[1]; \
os2Cell[j++]=Os2Attr[2]; \
i++; \
MapWin2Os2Attr(winAttr[i],Os2Attr); \
os2Cell[j++]=winChar[i]; \
os2Cell[j++]=Os2Attr[0]; \
os2Cell[j++]=Os2Attr[1]; \
os2Cell[j++]=Os2Attr[2]; \
i++; \
} \
} \
else { \
if (SesGrp->VioLength2CellShift == 1) { \
os2Cell[j++]=' '; \
os2Cell[j++]=Os2Attr[0]; \
i++; \
} \
else { \
os2Cell[j++]=' '; \
os2Cell[j++]=Os2Attr[0]; \
os2Cell[j++]=Os2Attr[1]; \
os2Cell[j++]=Os2Attr[2]; \
i++; \
} \
} \
} \
else { \
if (SesGrp->VioLength2CellShift == 1) { \
os2Cell[j++]=c; \
os2Cell[j++]=Os2Attr[0]; \
i++; \
} \
else { \
os2Cell[j++]=c; \
os2Cell[j++]=Os2Attr[0]; \
os2Cell[j++]=Os2Attr[1]; \
os2Cell[j++]=Os2Attr[2]; \
i++; \
} \
} \
} \
}
#else
#define MapWin2Os2CellStr(Dest, SourChar, SourAttr, Length, NumChar) \
{ int i, j; \
PBYTE os2Cell; \
PWORD winAttr; \
PBYTE winChar; \
\
os2Cell = Dest; \
winChar = (PBYTE)SourChar; \
winAttr = SourAttr; \
\
NumChar = Length; \
for (i=j=0; i<(int)NumChar;) \
{ os2Cell[j++]=winChar[i]; \
os2Cell[j++]=MapWin2Os2Attr(winAttr[i++]); \
} \
}
#endif
/*
* WIN-->OS2 : VIO-CursorPosition
* ==================
*/
DWORD MapWin2Os2Cursor( IN CONSOLE_CURSOR_INFO lpCursorInfo,
OUT PVIOCURSORINFO CursorInfo);
/*
* WIN-->OS2 : KBD-KeyInfo
* ===========
* 1. KBD-Status
* 2. KBD-Character
*/
// DWORD MapWin2Os2KbdInfo(IN PKEY_EVENT_RECORD WinKey, in event.h
// OUT PKEYEVENTINFO Os2Key);
#ifdef DBCS
// MSKK May.18.1992 KazuM
BYTE MapWinToOs2KbdNlsShift(IN PKEY_EVENT_RECORD WinKey);
BYTE MapWinToOs2KbdInterim(IN PKEY_EVENT_RECORD WinKey);
BYTE MapWinToOs2KbdNlsShiftReport(IN PKEY_EVENT_RECORD WinKey,
IN PKBDKEYINFO Os2Key);
VOID GetNlsMode(IN PKBDINFO KbdInfo);
VOID SetNlsMode(IN KBDINFO KbdInfo);
#endif
/* NT win KBD definitions
#define RIGHT_ALT_PRESSED 0x0001 // the right alt key is pressed.
#define LEFT_ALT_PRESSED 0x0002 // the left alt key is pressed.
#define RIGHT_CTRL_PRESSED 0x0004 // the right ctrl key is pressed.
#define LEFT_CTRL_PRESSED 0x0008 // the left ctrl key is pressed.
#define SHIFT_PRESSED 0x0010 // the shift key is pressed.
#define NUMLOCK_ON 0x0020 // the numlock light is on.
#define SCROLLLOCK_ON 0x0040 // the scrolllock light is on.
#define CAPSLOCK_ON 0x0080 // the capslock light is on.
#define ENHANCED_KEY 0x0100 // the key is enhanced. ***/
/* OS2 Kbd definitions (bsedev.h) */
#define OS2_RIGHTSHIFT 0x0001
#define OS2_LEFTSHIFT 0x0002
#define OS2_CONTROL 0x0004
#define OS2_ALT 0x0008
#define OS2_SCROLLLOCK_ON 0x0010
#define OS2_NUMLOCK_ON 0x0020
#define OS2_CAPSLOCK_ON 0x0040
#define OS2_INSERT_ON 0x0080
#define OS2_LEFTCONTROL 0x0100
#define OS2_LEFTALT 0x0200
#define OS2_RIGHTCONTROL 0x0400
#define OS2_RIGHTALT 0x0800
#define OS2_SCROLLLOCK 0x1000
#define OS2_NUMLOCK 0x2000
#define OS2_CAPSLOCK 0x4000
#define OS2_SYSREQ 0x8000
#define OS2_ANYSHIFT (OS2_RIGHTSHIFT | OS2_LEFTSHIFT)
#define OS2_ANYALT (OS2_RIGHTALT | OS2_LEFTALT)
#define OS2_ANYCONTRL (OS2_RIGHTCONTROL | OS2_LEFTCONTROL)
#define KBDINFO_STATE_MASK (USHORT)(OS2_RIGHTSHIFT | OS2_LEFTSHIFT | OS2_CONTROL | OS2_ALT | OS2_SCROLLLOCK_ON | OS2_NUMLOCK_ON | OS2_CAPSLOCK_ON | OS2_INSERT_ON | OS2_SYSREQ)
#ifdef DBCS
// MSKK May.15.1992 KazuM
#define OS2_NLS_IME_CONVERSION 0x80
#endif
/*
* WIN-->OS2 : MOU-Event
* =========
*/
BOOL MapWin2Os2MouEvent(OUT PMOUEVENTINFO Mou, IN PMOUSE_EVENT_RECORD Event);
/*** NT win mouse definitions
//
// ButtonState flags
//
#define FROM_LEFT_1ST_BUTTON_PRESSED 0x0001
#define RIGHTMOST_BUTTON_PRESSED 0x0002
#define FROM_LEFT_2ND_BUTTON_PRESSED 0x0004
#define FROM_LEFT_3RD_BUTTON_PRESSED 0x0008
#define FROM_LEFT_4TH_BUTTON_PRESSED 0x0010
//
// EventFlags
//
#define MOUSE_MOVED 0x0001
#define DOUBLE_CLICK 0x0002 ***/
/* OS2 Mouse definitions (bsedev.h) */
#define OS2_MOUSE_MOTION 0x0001
#define OS2_MOUSE_MOTION_WITH_BN1_DOWN 0x0002
#define OS2_MOUSE_BN1_DOWN 0x0004
#define OS2_MOUSE_MOTION_WITH_BN2_DOWN 0x0008
#define OS2_MOUSE_BN2_DOWN 0x0010
#define OS2_MOUSE_MOTION_WITH_BN3_DOWN 0x0020
#define OS2_MOUSE_BN3_DOWN 0x0040
#define WIN_BUTTON_MASK (FROM_LEFT_1ST_BUTTON_PRESSED | RIGHTMOST_BUTTON_PRESSED | FROM_LEFT_2ND_BUTTON_PRESSED)
/*
* routines to update Vio LVB (in violvb.c)
*/
VOID VioLVBCopyStr( IN PUCHAR Sour,
IN COORD Coord,
IN ULONG Length);
VOID VioLVBFillAtt( IN PBYTE pAttr,
IN COORD Coord,
IN ULONG Length);
#ifdef DBCS
// MSKK Oct.13.1993 V-AkihiS
VOID VioLVBFillChar(IN PBYTE Char,
IN COORD Coord,
IN ULONG Length);
#else
VOID VioLVBFillChar(IN BYTE Char,
IN COORD Coord,
IN ULONG Length);
#endif
VOID VioLVBFillCharAndScroll(IN BYTE Char,
IN COORD Coord,
IN ULONG Length);
VOID VioLVBFill2CharsAndScroll(IN BYTE Char1,
IN BYTE Char2,
IN COORD Coord,
IN ULONG Length);
VOID VioLVBFillCell(IN PBYTE pCell,
IN COORD Coord,
IN ULONG Length);
VOID VioLVBCopyCellStr(IN PUCHAR Sour,
IN COORD Coord,
IN ULONG Length);
VOID VioLVBScrollBuff(IN DWORD Count);