summaryrefslogtreecommitdiff
path: root/v4.0/src/MAPPER/KBDSSTAT.ASM
diff options
context:
space:
mode:
Diffstat (limited to 'v4.0/src/MAPPER/KBDSSTAT.ASM')
-rw-r--r--v4.0/src/MAPPER/KBDSSTAT.ASM129
1 files changed, 129 insertions, 0 deletions
diff --git a/v4.0/src/MAPPER/KBDSSTAT.ASM b/v4.0/src/MAPPER/KBDSSTAT.ASM
new file mode 100644
index 0000000..1e76ffc
--- /dev/null
+++ b/v4.0/src/MAPPER/KBDSSTAT.ASM
@@ -0,0 +1,129 @@
1;
2page 80,132
3;
4title CP/DOS KbdSetStatus
5
6 .sall
7 .xlist
8 include kbd.inc ; kbd set status data structure
9 .list
10
11kbddata segment word public 'kbddata'
12
13 extrn KbdBitMask:word
14 extrn KbdTurnAroundCharacter:word
15 extrn KbdInterimCharFlags:word
16
17kbddata ends
18
19
20
21kbdxxx 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
44str struc
45old_bp dw ?
46return dd ?
47handle dw ? ; kbd handle
48data dd ? ; kbd data strructure pointer
49str ends
50
51kbdsetstatus 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
62CheckTurnAround:
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
69CheckInterimFlags:
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
76CheckShiftState:
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
91CheckCookedOn: ; 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
98CheckRawOn:
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
105CheckEchoOff:
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
112CheckEchoOn:
113 test ax,001h
114 jz EverythingSet
115
116 and KbdBitMask,not EchoOff ; setup echo on
117 or KbdBitMask,EchoOn
118
119EverythingSet:
120 Mexit ; pop registers
121
122 ret size str - 6 ; return
123
124KbdSetStatus endp
125
126kbdxxx ends
127
128 end
129