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.
|