]> wirehaze git hosting - MS-DOS.git/blob - v4.0/src/MAPPER/KBDSSTAT.ASM

wirehaze git hosting

MZ is back!
[MS-DOS.git] / v4.0 / src / MAPPER / KBDSSTAT.ASM
1 ;
2 page 80,132
3 ;
4 title CP/DOS KbdSetStatus
5
6 .sall
7 .xlist
8 include kbd.inc ; kbd set status data structure
9 .list
10
11 kbddata segment word public 'kbddata'
12
13 extrn KbdBitMask:word
14 extrn KbdTurnAroundCharacter:word
15 extrn KbdInterimCharFlags:word
16
17 kbddata ends
18
19
20
21 kbdxxx segment byte public 'kbd'
22 assume cs:kbdxxx,ds:nothing,es:nothing,ss:nothing
23 ;
24 ; ************************************************************************* *
25 ; *
26 ; * MODULE: kbdsetStatus
27 ; *
28 ; *
29 ; * CALLING SEQUENCE:
30 ; *
31 ; * PUSH@ DWORD data ; kbd data structure
32 ; * PUSH WORD handle ; kbd handle
33 ; *
34 ; * CALL kbdsetstatus
35 ; *
36 ; * RETURN SEQUENCE:
37 ; *
38 ; *
39 ; *
40 ; *************************************************************************
41 ;
42 public kbdsetstatus
43
44 str struc
45 old_bp dw ?
46 return dd ?
47 handle dw ? ; kbd handle
48 data dd ? ; kbd data strructure pointer
49 str ends
50
51 kbdsetstatus proc far
52
53 Enter KbdSetStatus ; save registers
54
55 les di,[bp].data ; set up kbd data structure
56 mov ax,seg kbddata
57 mov ds,ax
58 assume ds:kbddata
59
60 mov ax,es:[di].Bit_Mask ; get bit mask
61
62 CheckTurnAround:
63 test ax,040h ; define turnaround character ??
64 jz CheckInterimFlags ; jump if not
65
66 mov bx,es:[di].Turn_Around_Char ; else, save turnaround character
67 mov KbdTurnAroundCharacter,bx
68
69 CheckInterimFlags:
70 test ax,020h ; check for interim character flag ??
71 jz CheckShiftState ; if not jump
72
73 mov bx,es:[di].Interim_Char_Flags ; save interim character flag
74 mov KbdInterimCharFlags,bx
75
76 CheckShiftState:
77 test ax,010h ; check for shift state ??
78 jz CheckCookedOn ; jump if not
79
80 push ds ; setup for shift state
81 mov bx,040h
82 mov ds,bx
83 assume ds:nothing
84
85 mov bx,es:[di].Status_Shift_State ; save shift state data
86 mov ds:018h,bl
87
88 pop ds
89 assume ds:kbddata
90
91 CheckCookedOn: ; check for cooked mode ??
92 test ax,008h
93 jz CheckRawOn
94
95 and KbdBitMask,not RawModeOn ; setup cooked mode status
96 or KbdBitMask,CookedModeOn
97
98 CheckRawOn:
99 test ax,004h ; check for raw mdoe ??
100 jz CheckEchoOff
101
102 and KbdBitMask,not CookedModeOn ; setup for raw mode
103 or KbdBitMask,RawModeOn
104
105 CheckEchoOff:
106 test ax,002h ; check for echo on
107 jz CheckEchoOn ; branch if so
108
109 and KbdBitMask,not EchoOn ; else setup echo off
110 or KbdBitMask,EchoOff
111
112 CheckEchoOn:
113 test ax,001h
114 jz EverythingSet
115
116 and KbdBitMask,not EchoOff ; setup echo on
117 or KbdBitMask,EchoOn
118
119 EverythingSet:
120 Mexit ; pop registers
121
122 ret size str - 6 ; return
123
124 KbdSetStatus endp
125
126 kbdxxx ends
127
128 end
129