]>
wirehaze git hosting - MS-DOS.git/blob - v4.0/src/CMD/KEYB/KEYBI2F.ASM
3 TITLE DOS
- KEYB Command
- Interrupt 2F Handler
5 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6 ;; DOS - NLS Support - KEYB Command
7 ;; (C) Copyright 1988 Microsoft
9 ;; File Name: KEYBI2F.ASM
14 ;; Contains Interrupt 2F handler.
16 ;; Documentation Reference:
17 ;; ------------------------
18 ;; PC DOS 3.3 Detailed Design Document - May ?? 1986
20 ;; Procedures Contained in This File:
21 ;; ----------------------------------
22 ;; KEYB_INT_2F - Interupt 2F handler
24 ;; Include Files Required:
25 ;; -----------------------
26 ;; INCLUDE KEYBEQU.INC
27 ;; INCLUDE KEYBSHAR.INC
28 ;; INCLUDE KEYBMAC.INC
29 ;; INCLUDE KEYBCMD.INC
30 ;; INCLUDE KEYBCPSD.INC
31 ;; INCLUDE KEYBI9C.INC
33 ;; External Procedure References:
34 ;; ------------------------------
35 ;; FROM FILE ????????.ASM:
36 ;; procedure - description????????????????????????????????
38 ;; Linkage Information: Refer to file KEYB.ASM
39 ;; --------------------
45 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
47 INCLUDE KEYBEQU
.INC ;;
48 INCLUDE KEYBSHAR
.INC ;;
49 INCLUDE KEYBMAC
.INC ;;
50 INCLUDE KEYBCMD
.INC ;;
51 INCLUDE KEYBCPSD
.INC ;;
52 INCLUDE KEYBI9C
.INC ;;
56 EXTRN ERROR_BEEP
:NEAR ;;
58 CODE SEGMENT PUBLIC 'CODE' ;;
60 ASSUME
CS:CODE,DS:CODE ;;
62 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
64 ;; Module: KEYB_INT_2F
76 ;; IF AH = 0ADh THEN (this call is for us)
77 ;; Set carry flag to 0
79 ;; Get major and minor
80 ;; Get SEG:OFFSET of SHARED_DATA_AREA
85 ;; IF code page requested = code page value at pointer THEN
86 ;; Set INVOKED_CODE_PAGE
87 ;; Set ACTIVE_XLAT_PTR
92 ;; IF no corresponding code page found THEN
97 ;; Set COUNTRY_FLAG = 00
98 ;; ELSE IF BL = 0FFH THEN
99 ;; Set COUNTRY_FLAG = 0FFH
102 ;; IRET or JMP to another INT 2FH handler (if installed)
104 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
108 CP_LANGUAGE EQU 82H
;;
110 VERSION_MAJOR EQU
01H ;;
111 VERSION_MINOR EQU
00H ;;
113 CARRY_FLAG EQU
01H ;;
116 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
118 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
128 POP DS ;; Set DATA SEGMENT register
130 CMP AH,INT_2F_SUB_FUNC
;; Q..is this call for us?
131 JE CHECK_REQUEST_CODE
;; Y..check request code
132 JMP INT_2F_DONE
;; N..get out
134 CHECK_REQUEST_CODE: ;; Y..check request code
135 MOV RESTORE_BP
,BP ;;;;;;;;;;;
136 MOV BP,SP ;; Clear CARRY flag
137 AND WORD PTR [BP]+12,NOT CARRY_FLAG
;;
142 CMP AL,CP_QUERY
;; Q..query CP?
143 JNE INT_2F_CP_INVOKE
;; N..next
144 MOV AX,-1 ;; Y..process query
145 MOV BH,VERSION_MAJOR
;;
146 MOV BL,VERSION_MINOR
;;
153 CMP AL,CP_INVOKE
;; Q..invoke CP?
154 JNE INT_2F_CP_LANGUAGE
;; N..next
156 MOV SI,SD
.FIRST_XLAT_PTR
;; Get FIRST_XLAT_PTR
158 INT_2F_NEXT_SECTION: ;;
160 JE INT_2F_ERROR_FLAG
;;
161 MOV CX,[SI].XS_CP_ID
;; Read in the code page value
162 CMP CX,BX ;; Is this the table to make active?
163 JNE INT_2F_CP_INVOKE_CONT1
;;
164 MOV SD
.ACTIVE_XLAT_PTR
,SI ;; IF Yes, Set the ACTIVE_XLAT_PTR
165 MOV SD
.INVOKED_CP_TABLE
,BX ;; record new code page
168 INT_2F_CP_INVOKE_CONT1: ;; Else
169 MOV DI,[SI].XS_NEXT_SECT_PTR
;; IF No,
170 MOV SI,DI ;; Get NEXT_SECT_PTR
171 JMP INT_2F_NEXT_SECTION
;; NEXT_SECTION
173 INT_2F_ERROR_FLAG: ;;
175 MOV RESTORE_BP
,BP ;;;;;;
177 OR WORD PTR [BP]+12,CARRY_FLAG
;; Set carry flag
182 INT_2F_CP_LANGUAGE: ;;
183 CMP AL,CP_LANGUAGE
;; Q..Set default language??
184 JNE INT_2F_DONE
;; N..next
186 CMP BL,0 ;; Y..Check if Language is to be US437
187 JNE INT_2F_CONTINUE1
;; IF yes THEN,
188 MOV COUNTRY_FLAG
,BL ;; Set COUNTRY_FLAG to 0
191 INT_2F_CONTINUE1: ;; ELSE
192 CMP BL,-1 ;; Check if language is to be national
193 JNE INT_2F_LANG_ERROR_FLAG
;; IF yes THEN,
194 MOV COUNTRY_FLAG
,BL ;; Set COUNTRY_FLAG to -1 (0FFH)
197 INT_2F_LANG_ERROR_FLAG: ;; ELSE
198 MOV RESTORE_BP
,BP ;;;;;; Set CARRY flag
200 OR WORD PTR [BP]+12,CARRY_FLAG
;;
210 CMP WORD PTR CS:SD
.OLD_INT_2F
,0 ;; Q..are we the last in the chain?
211 JNE INT_2F_JMP
;; N..call next in chain
212 CMP WORD PTR CS:SD
.OLD_INT_2F
+2,0 ;; Q..are we the last in the chain?
213 JNE INT_2F_JMP
;; N..call next in chain
215 IRET ;; Y..return to caller
219 JMP CS:SD
.OLD_INT_2F
;;
222 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;