/**************************************************************************** * * 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);