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
|
;0
page 80,132
;
title CP/DOS KbdGetStatus
;
.sall
.xlist
include kbd.inc
.list
kbddata segment word public 'kbddata'
public KbdBitMask
KbdBitMask dw CookedModeOn or EchoOn
public KbdTurnAroundCharacter
KbdTurnAroundCharacter dw 0dh
public KbdInterimCharFlags
KbdInterimCharFlags dw 0
kbddata ends
kbdxxx segment byte public 'kbd'
assume cs:kbdxxx,ds:nothing,es:nothing,ss:nothing
;
; ************************************************************************* *
; *
; * MODULE: kbdGetStatus
; *
; * CALLING SEQUENCE:
; *
; *
; *************************************************************************
public kbdgetstatus
str struc
old_bp dw ?
return dd ?
handle dw ? ; kbd handle
data dd ? ; data area pointer
str ends
kbdgetstatus proc far
Enter KbdGetStatus ; push registers
les di,[bp].data ; setup area where status is
; returned
mov ax,seg kbddata
mov ds,ax
assume ds:kbddata
mov ax,KbdBitMask ; save kbd bit mask in
mov es:[di].Bit_Mask,ax ; return data area
mov ax,KbdTurnAroundCharacter ; save turn around character
mov es:[di].Turn_Around_Char,ax
mov ax,KbdInterimCharFlags ; save interim character flag
mov es:[di].Interim_Char_Flags,ax
mov ah,2
int 16h ; get kbd shift status
xor ah,ah
mov es:[di].Status_Shift_State,ax ; save it in return data
; area
Mexit ; restore registers
ret size str - 6 ; return
kbdgetstatus endp
kbdxxx ends
end
|