summaryrefslogtreecommitdiffstats
path: root/private/os2/os2ses/kbddd.inc
blob: 638d3a2afb30cc4b352e29af578f948763ae1b70 (plain) (blame)
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
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
;;       SCCSID = @(#)kbddd.inc 13.1 90/12/14
;;            SCCSID = @(#)kbddd.inc     12.2E%
;;***********************************************************************
;;*                                                                     *
;;@@  1.1 Keyboard Device Driver Common Structures and Equates          *
;;*                                                                     *
;;***********************************************************************

;*****
;* Definition of a Character Data record.
;*****
CharData Struc  ;Format of character data record.
   Char   db  ?   ;The translated character.
   Scan   db  ?   ;The original scan code (unless "extended" char).
   Status db  ?   ;Status bits (init to "char available", and
                  ;@@ Shift Report off).
   DShift db  ?   ;DBCS Shift state at time of keystroke.
   Shift  dw  ?   ;Shift state at time of keystroke.
   Time   dd  ?   ;@@ PTM 2233: Timestamp of keystroke in ms since IPL.
CharData Ends
ChDaRecLen  Equ Size CharData  ;Length of a CharData record.

;*****
;* Definition of the packet to send to the monitors, if any registered.
;* Even when none registered, is used during and after translation.
;* See just below for bit equates for the flagwords in the packet.
;*****
KPacket     Struc                ;This is the packet.
  MonFlags  dw 0                 ;Flagword for mon's to see with key.
  Key       db ChDaRecLen Dup(0) ;Space for a CharData record.
  DDFlags   dw 0                 ;Device driver flags for the packet.
                                 ;@@ See DDFlags equates below.
KPacket     Ends
KeyPacketLen Equ Size KPacket   ;Length of this packet.

;***
;* Following equates apply to the low byte of the MonFlags word in
;* a Key Packet:
;***
;OpenPacket   Equ  01h    ;Packet is an open request (we don't use this).
;ClosePacket  Equ  02h    ;Packet is a close request (we don't use this).
;FlushPacket  Equ  04h    ;Packet is a flush request.
;;NOTE: following must match bit being defined by Mike Peters!!!
NotInserted  Equ  80h  ;Key wasn't inserted by a monitor.

;***
;* Following equates apply to the DDFlags word in a Key Packet:
;***
NotSQPacket    Equ  0400h  ;&& Don't put this packet in SQ buffer
AccentedKey    Equ  0200h  ;Key was translated using previous accent.
MultiMake      Equ  0100h  ;Key was repeated make of a toggle key.
SecondaryKey   Equ  0080h  ;Previous scan code was the E0 prefix code.
KeyBreak       Equ  0040h  ;This is the break of the key.
KeyTypeMask    Equ  003Fh  ;Isolates the Key Type field of DDFlags.
UndefKey       Equ  003Fh  ;@@ Key packet is undefined
SysReqKey      Equ  0017h  ;@@ This key packet is the SysReq key (4990)
PrintFlushKey  Equ  0016h  ;@@ This packet is Ct-Alt-PrtScr
PSPrintEchoKey Equ  0015h  ;@@ This packet is Ctl-P
PrintEchoKey   Equ  0014h  ;@@ This packet is Ctl-PrtScr
PrtScrKey      Equ  0013h  ;@@ This packet is PrtScr
PSBreakKey     Equ  0012h  ;@@ This packet is Ctl-C
BreakKey       Equ  0011h  ;@@ This packet is Ctl-Break
AccentKey      Equ  0010h  ;@@ This packet is an accent key
XRorPNot       Equ  000Dh  ;## This packet is a Read or Peek Notification Pct.
HotKeyPacket   Equ  000Ch  ;&& This packet is the hot key.
BadKeyCombo    Equ  000Bh  ;@@ Accent/char combo undefined, beep only.
WakeUpKey      Equ  000Ah  ;@@ This packet is one following PAUSEKEY
PSPauseKey     Equ  0009h  ;@@ This packet is Ctl-S
PauseKey       Equ  0008h  ;@@ This packet is Ctl-Numlock or PAUSE
ShiftMask      Equ  0007h  ;@@ Key is a shift Key
DumpKey        Equ  0006h  ;@@ This packet is Ctl-Numlock-NumLock
RebootKey      Equ  0005h  ;@@ This packet is Ctl-Alt-Del
ResendCode     Equ  0004h  ;@@ This packet is resend code from controller
OverRunCode    Equ  0003h  ;@@ This packet is overrun code from controller
SecPrefixCode  Equ  0002h  ;@@ This packet is E0/E1 scan code
AckCode        Equ  0001h  ;@@ This packet is ack code from keyboard


;*****
;* SFlags - Equates to use when accessing the ShiftFlags word in a Char-
;* Data rec. These equates are used when accessing Key Packets, etc.
;*****
SysRqFlag  = 8000h  ;SysRq key down.
CapsFlag   = 4000h  ;Capslock key down.
NumFlag    = 2000h  ;Numlock key down.
ScrollFlag = 1000h  ;Scroll lock key down.
RAltFlag   = 0800h  ;Right Alt key down.
RCtlFlag   = 0400h  ;Right Ctrl key down.
LAltFlag   = 0200h  ;Left Alt key down.
LCtlFlag   = 0100h  ;Left Ctrl key down.

;Following can be used when accessing low-byte only, also.

InsTogl    = 0080h  ;Insert key toggled on.
CapsTogl   = 0040h  ;Capslock key toggled on.
NumTogl    = 0020h  ;Numlock key toggled on.
ScrollTogl = 0010h  ;Scroll lock key toggled on.
AltFlag    = 0008h  ;An Alt key is down.
CtlFlag    = 0004h  ;A Ctrl key is down.
LShiftFlag = 0002h  ;Left shift key down.
RShiftFlag = 0001h  ;Right shift key down.

ifdef JAPAN
; MSKK Aug.15.1993 V-AKihiS
;*****
;* DSFlags - Equates to use when accessing the DShiftFlags word in a Char-
;* Data rec. These equates are used when accessing Key Packets, etc.
;*****

KanaToKanji = 10000000b  ;Kana to Kanji transfar mode.
RomanMode   = 01000000b  ;Roman character mode.
ShiftDisp   = 00011000b  ;Display of shift status line.
CharMode    = 00000110b  ;Character mode.
DoubleChar  = 00000001b  ;Double byte character (Zen-Kaku).

Katakana    =      010b  ;CharMode is katakana mode.
Hiragana    =      100b  ;CharMode is Hiragana mode.
CMResMask    Equ RomanMode+Katakana+Hiragana+DoubleChar
ToggleMake   Equ 01h    ;Key was repeated make of a toggle key.
endif

;@@ PTM 3377:  Following equate used for checking reserved bits for Set
;@@ SM Hot Key IOCTL (56h):

HKResMask    Equ  InsTogl+CapsTogl+NumTogl+ScrollTogl+AltFlag+CtlFlag ;@@

;@@ *****
;@@ Following is the structure of the Flag variable data areas used
;@@ by KbdXlate, for both interrupt- and strategy- time translation.
;@@ *****

XlateVars       Struc                   ;@@ The flag area structure.
  XDRFlags      dw 0                    ;@@ See XCOMPLETE below. Not
                                        ;@@ used at interrupt time.
  XHotKeyShift  dw 0                    ;@@ ;OS2SS-Moved to here, Interrupt driven shift status
  XPSGFlags     dw 0                    ;@@ ;OS2SS-Moved to here, Copy of caller's PSG flags.
                                        ;&& (changed byte->word and position
                                        ;&&  in structure per DCR8)
  XlateFlags    db 0                    ;@@ See equates below.
  ToggleFlags   db 0                    ;@@ See equates below.
  XInputMode    db 0                    ;@@ Copy of desired input mode.
  XAltKeyPad    db 0                    ;@@ Accumulator for Alt-nnn entry
  OtherFlags    db 0                    ;Misc flags (should be zeroed on a session switch).
XlateVars       Ends                    ;@@ End flag area stucture.

XLATEVARSIZE    Equ     Size XlateVars  ;@@ Get the size of this area.
                                        ;@@ NOTE!  Beware of XDRSIZE
                                        ;@@ adjustment of XlateVars in
                                        ;@@ KBDDATA.ASM!

;XCOMPLETE       Equ 0001h               ;@@ Indicates strategy time
;                                        ;@@  translation is complete.

;Equates for using XlateFlags byte in translation data area:

DumpKeyOnce  Equ  01h     ;Dump key sequence has been hit once.
PSKeyDown    Equ  02h     ;Print Screen key is down right now.
SecPrefix    Equ  04h     ;G keyboard E0 prefix scan code just seen.
NormalAlt    Equ  08h     ;@@ Normal Alt (not AltGraph) is down
Use3Index    Equ  10h     ;@@ Use character 3 in translate table as index into
                          ;@@ accent table
PseudoCtl    Equ  20h     ;@@ Ctl key was emulated by Enhanced kbd
E1Prefix     Equ  40h     ;@@ Enhanced keyboard E1 prefix just seen

;Equates for using ToggleFlags byte in translation data area:

TKeyDown    = ScrollTogl+NumTogl+CapsTogl   ;Latches for toggle keys.
InsKeyDown  Equ  80h     ;Insert key is down right now.

;*****
;* Equates for accessing the XtableFlags1 translate table flagword:
;*****
;;XTFlags1  Equ 2       ;Offset of XTableFlags1 in XTHead. ??? NEEDED?
ShftAlt     Equ 0001h   ;Use Shift+Alt instead of Ctl+Alt in CtlAltRemap.
AltGrafL    Equ 0002h   ;Use left Alt Key as an Alt-Graphics shift key.
AltGrafR    Equ 0004h   ;Use right Alt Key as an Alt-Graphics shift key.
ShiftLock   Equ 0008h   ;Keyboard uses ShiftLock rather than CapsLock.
DefTable    Equ 0010h   ;@@ Default Table for the Language
ShiftToggle Equ 0020h   ;@@ ShiftLock Toggle keyboard
AccentPass  Equ 0040h   ;@@ Pass Accent key packet and beep
CapsShift   Equ 0080h   ;@@ If CapsShift down, use character 5 from XTable

ATKbd       Equ 0000h    ;@@ XTKbdType it an AT kbd.
FERRARI_P   Equ 0AB54h   ;## PTM 3128 Equate for 88/89 key keyboard.
FERRARI_G   Equ 0AB41h   ;## PTM 3128 Equate for 101/102 key keyboard.
JAGUAR      Equ 0AB86h    ;%% DCR 1085 Equate for Jaguar 122 key keyboard.
PCATKBD     Equ 0100h    ;## ID byte indication for an AT kbd.

;*****
;* Masks for accessing the XlateOp fields in a keydef.
;*****
AccFlagsMask  Equ 0FE00h          ;@@ Accent flags is now high 7 bits
ActionMask    Equ  01FFh          ;@@ KeyType is now low 9 bits

;******
;* Values for special keyboard scan codes  ;@@
;******
BufferFull  Equ 0FFh    ;Keyboard overrun code sent by keyboard.
Resend      Equ 0FEh    ;Resend command request from keyboard.
Ack         Equ 0FAh    ;Command acknowledge from keyboard.
OtherKey    Equ 0E0h    ;Enhanced keyboard's secondary key prefix.
OtherKey2   Equ 0E1h    ;Another secondary key prefix.
BreakBit    Equ 80h     ;Mask for break bit in a scan code.

;*****
;* Equates for PSGFlags - misc flags used by individual screen group.
;* (Should be zeroed on session termination.)
;* DCR8: Changed from byte to word to add single queue support.
;*****
SQMODE     Equ 0200h    ;&& Indicates Single Queue mode processing.
SGInUse    Equ 0080h    ;This session has been initialized & not terminated.
;OS2SS-SG3xBox    Equ 0040h    ;This session is the 3xBox.
ActiveSG   Equ 0020h    ;This session is the currently active one.
Flushing   Equ 0010h    ;Currently flushing monitors in this PSG.
NowPaused  Equ 0008h    ;This session currently paused.
PrevAccent Equ 0007h    ;Bits where accent number saved til next keystroke.
WakeUpSent Equ 0100h    ;## B790266 The WakeUpKey flag has been set ON in the DDFlags

;;*****
;;* Misc Equates used by various routines:
;;*****
;INPUTMODE    Equ 80h       ;@@ Input mode flag. 1=Binary, 0=ASCII.
EXTENDEDCODE Equ 2         ;## DCR 357: Define status bit for secondary keys.
SHIFTREPORT  Equ 1         ;@@ Shift Report, input mode flag.

;*****
;* OtherFlags: Misc flags (should be zeroed on a session switch).
;* Use following equates to access the OtherFlags byte:
;*****
OFlags Record a7:1,a6:1,a5:1,a4:1,a3:1,a2:1,a1:1,a0:1
;Note: leave HotKeyDown & MHotKeyDown in bits 0 and 1!!!
;HotKeyDown    = Mask a0    ;SM HotKey is down right now.
;MHotKeyDown   = Mask a1    ;Monitor inserted SM HotKey down now.
InterruptTime = Mask a2    ;Currently processing an interrupt.
;HotKeyFound   = Mask a3    ;@@ Hot key was found in table
;RecvdPMode    = Mask a4    ;@@ PTM 7582 - Interrupt time mode flag.
;AlreadySwitch = Mask a5    ;@@ PTM 7582 - Interrupt time mode flag.
;IntInProgress = Mask a6    ;@@ PTM 5336 - Int is in progress.
;NestedInt     = Mask a7    ;@@ PTM 5336 - Interrupt is nested.

;;*****
;;* MiscFlags: Misc flags, mostly just used once by KBDDD.
;;* Use following equates to access the MiscFlags byte:
;;*****
MFlags Record m7:1,m6:1,m5:1,m4:1,m3:1,m2:1,m1:1,m0:1
EnhancedKbd   = Mask m4   ;Enhanced Kbd is out there (must be Bit 4!).

;&& PTM 291: BEGIN
;&& *****
;&& * MiscFlags3:
;&& * Use following equates to access the MiscFlags3 byte:
;&& *****
;&& Define the bits...
MFlags3 Record mb7:1,mb6:1,mb5:1,mb4:1,mb3:1,mb2:1,mb1:1,mb0:1
;SQon            = Mask mb0    ;&& DCR 75: indicates whether any SG is in SQ.
AltPacket       = Mask mb1    ;&& DCR 1713: indicates that Alt-Numpad
                              ;&& accumulation is finished.
PauseLatch      = Mask mb2    ;&& PTM 2344: indicates correct keystroke
                              ;&& sequence for a Ctrl-NumLock.
;IOCTl1st        = Mask mb3    ;&& PTM 2189: indicates first keyboard IOCTl for
                              ;&& SetCurrentSG received.
E0Packet        = Mask mb4    ;&& PTM 2382: indicates that an E0 packet is
                              ;&& to be sent with the next packet.
;SENDTIMERNEEDED = Mask mb5    ;&& PTM 291 indicates whether we need the
                              ;&&         timer handler to flag an error.
;SETSENDTIMER    = Mask mb6    ;&& PTM 291 indicates whether we need to reset
                              ;&&         the ticks for the timer handler.
SecAltNumPad  = Mask mb7      ;## PTR AK00370: indicates AltNumpad with R-Alt.