summaryrefslogtreecommitdiff
path: root/board/MAI/bios_emulator/scitech/src/pm/os2/mon.h
blob: 28d39fba4b100772b8dd9a33c9e8edc3d5e45bea (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
/****************************************************************************
*
*                   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);