blob: 28d39fba4b100772b8dd9a33c9e8edc3d5e45bea [file] [log] [blame]
/****************************************************************************
*
* SciTech OS Portability Manager Library
*
* ========================================================================
*
* The contents of this file are subject to the SciTech MGL Public
* License Version 1.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.scitechsoft.com/mgl-license.txt
*
* Software distributed under the License is distributed on an
* "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Copyright (C) 1991-1998 SciTech Software, Inc.
*
* The Initial Developer of the Original Code is SciTech Software, Inc.
* All Rights Reserved.
*
* ========================================================================
*
* Language: ANSI C
* Environment: 32-bit OS/2
*
* Description: Include file to include all OS/2 keyboard monitor stuff.
*
****************************************************************************/
/* Monitors stuff */
#define MONITOR_DEFAULT 0x0000
#define MONITOR_BEGIN 1
#define MONITOR_END 2
typedef SHANDLE HMONITOR;
typedef HMONITOR *PHMONITOR;
typedef struct _KEYPACKET {
USHORT MonFlagWord;
UCHAR XlatedChar;
UCHAR XlatedScan;
UCHAR DBCSStatus;
UCHAR DBCSShift;
union
{
USHORT ShiftState;
USHORT LayerIndex;
} u;
ULONG Milliseconds;
USHORT KbdDDFlagWord;
} KEYPACKET;
typedef struct _MLNPACKET {
USHORT MonFlagWord;
USHORT IOCTL;
USHORT CPId;
USHORT CPIndex;
ULONG Reserved;
USHORT KbdDDFlagWord;
} MLNPACKET;
/* DBCSStatus */
#define SF_SHIFTS 1 /* If set to 1, shift status returned without a character */
#define SF_NOTCHAR 2 /* 0 - Scan code is a character */
/* 1 - Scan code is not a character; */
/* instead it is an extended key code from the keyboard. */
#define SF_IMMEDIATE 32 /* If set to 1, immediate conversion requested */
#define SF_TYPEMASK 192 /* Has the following values: */
/* 00 - Undefined */
/* 01 - Final character; interim character flag is turned off */
/* 10 - Interim character */
/* 11 - Final character; interim character flag is turned on. */
/* MonFlagWord */
#define MF_OPEN 1 /* open */
#define MF_CLOSE 2 /* close */
#define MF_FLUSH 4 /* is flush packet */
/* KbdDDFlagWord */
#define KF_NOTSQPACKET 1024 /* Don't put this packet in SQ buffer */
#define KF_ACCENTEDKEY 512 /* Key was translated using previous accent. */
#define KF_MULTIMAKE 256 /* Key was repeated make of a toggle key. */
#define KF_SECONDARYKEY 128 /* Previous scan code was the E0 prefix code. */
#define KF_KEYBREAK 64 /* This is the break of the key. */
#define KF_KEYTYPEMASK 63 /* Isolates the Key Type field of DDFlags. */
#define KF_UNDEFKEY 63 /* Key packet is undefined */
#define KF_SYSREQKEY 23 /* This key packet is the SysReq key (4990) */
#define KF_PRINTFLUSHKEY 22 /* This packet is Ct-Alt-PrtScr */
#define KF_PSPRINTECHOKEY 21 /* This packet is Ctl-P */
#define KF_PRINTECHOKEY 20 /* This packet is Ctl-PrtScr */
#define KF_PRTSCRKEY 19 /* This packet is PrtScr */
#define KF_PSBREAKKEY 18 /* This packet is Ctl-C */
#define KF_BREAKKEY 17 /* This packet is Ctl-Break */
#define KF_ACCENTKEY 16 /* This packet is an accent key */
#define KF_XRORPNOT 13 /* This packet is a Read or Peek Notification Pct. */
#define KF_MLNOTIFICATION 14 /* packet is a Multi-Layer NLS packet */
#define KF_HOTKEYPACKET 12 /* This packet is the hot key. */
#define KF_BADKEYCOMBO 11 /* Accent/char combo undefined, beep only. */
#define KF_WAKEUPKEY 10 /* This packet is one following PAUSEKEY */
#define KF_PSPAUSEKEY 9 /* This packet is Ctl-S */
#define KF_PAUSEKEY 8 /* This packet is Ctl-Numlock or PAUSE */
#define KF_SHIFTMASK 7 /* Key is a shift Key */
#define KF_DUMPKEY 6 /* This packet is Ctl-Numlock-NumLock */
#define KF_REBOOTKEY 5 /* This packet is Ctl-Alt-Del */
#define KF_RESENDCODE 4 /* This packet is resend code from controller */
#define KF_OVERRUNCODE 3 /* This packet is overrun code from controller */
#define KF_SECPREFIXCODE 2 /* This packet is E0/E1 scan code */
#define KF_ACKCODE 1 /* This packet is ack code from keyboard */
typedef struct _MONBUF {
USHORT cb;
KEYPACKET Buffer;
BYTE Reserved[20];
} MONBUF;
#define RS_SYSREG 32768 /* Bit 15 SysReq key down */
#define RS_CAPSLOCK 16384 /* Bit 14 Caps Lock key down */
#define RS_NUMLOCK 8192 /* Bit 13 NumLock key down */
#define RS_SCROLLLOCK 4096 /* Bit 12 Scroll Lock key down */
#define RS_RALT 2048 /* Bit 11 Right Alt key down */
#define RS_RCONTROL 1024 /* Bit 10 Right Ctrl key down */
#define RS_LALT 512 /* Bit 9 Left Alt key down */
#define RS_LCONTROL 256 /* Bit 8 Left Ctrl key down */
#define RS_INSERT 128 /* Bit 7 Insert on */
#define RS_CAPS 64 /* Bit 6 Caps Lock on */
#define RS_NUM 32 /* Bit 5 NumLock on */
#define RS_SCROLL 16 /* Bit 4 Scroll Lock on */
#define RS_ALT 8 /* Bit 3 Either Alt key down */
#define RS_CONTROL 4 /* Bit 2 Either Ctrl key down */
#define RS_LSHIFT 2 /* Bit 1 Left Shift key down */
#define RS_RSHIFT 1 /* Bit 0 Right Shift key down */
#define CS_RCONTROL 91 /* Right Control */
#define CS_LSHIFT 42 /* Left Shift */
#define CS_RSHIFT 54 /* Right Shift */
#define CS_LALT 56 /* Left Alt */
#define CS_RALT 94 /* Right Alt */
/* DosMon* prototypes */
#ifdef __EMX__
#define APIRET16 USHORT
#define APIENTRY16
#else
#define DosMonOpen DOS16MONOPEN
#define DosMonClose DOS16MONCLOSE
#define DosMonReg DOS16MONREG
#define DosMonRead DOS16MONREAD
#define DosMonWrite DOS16MONWRITE
#define DosGetInfoSeg DOS16GETINFOSEG
#endif
APIRET16 APIENTRY16 DosMonOpen (PSZ pszDevName, PHMONITOR phmon);
APIRET16 APIENTRY16 DosMonClose (HMONITOR hmon);
APIRET16 APIENTRY16 DosMonReg (HMONITOR hmon, MONBUF *pbInBuf, /*MONBUF*/ULONG *pbOutBuf, USHORT fPosition, USHORT usIndex);
APIRET16 APIENTRY16 DosMonRead (PBYTE pbInBuf, USHORT fWait, PBYTE pbDataBuf, PUSHORT pcbData);
APIRET16 APIENTRY16 DosMonWrite (PBYTE pbOutBuf, PBYTE pbDataBuf, USHORT cbData);