Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

322 lines
11 KiB

.XLIST
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; (C) Copyright Microsoft Corp. 1987-1991
;; MS-DOS 5.00 - NLS Support - KEYB Command
;;
;; File Name: KEYBSHAR.INC
;; ----------
;;
;; Description:
;; ------------
;; Include file containing structure definitions Shared Data Area
;; for the Shared Data Area.
;; The Shared Data Area contains data which is required by
;; both the resident and transient KEYB code. The Shared
;; Data Area is allocated in the KEYBI2F file and will be
;; resident following initial installation.
;;
;; Change History:
;; ---------------
;;
;; ;jwg ; - Feb 1990 For 4.03.
;; ;AN007; - Add Patriot/Sebring determination code for HOT Replug
;; so that INT 9 handler can alter keyboard Scan Code set.
;; ;M030 Merged IBM (Kermit - JP), KEYBOARD.SYS and KEYB.COM
;; versions of this file into one.
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; SHARED_DATA_STR defines the initial fixed length portion of the
;; Shared Data Area.
;; Tables are loaded beginning at TABLE_AREA in the following order:
;; State Logic
;; Common Translate Section
;; Specific Translate Sections for
;; each code page
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; SPECIAL_FEATURES equates:
TYPEWRITER_CAPS_LK EQU 8000H ;; typewriter style caps lock
;;
JR_HOT_KEY_1_2 equ 4000h ;; M030 Merged back for kdfcf.asm
JR_KB equ 8000h ;; M030 Merged back for kdfcf.asm
;; Some useful scan codes:
F1_SCAN EQU 59 ;; F1
F2_SCAN EQU 60 ;; F2
;;
;; SYSTEM_FLAG / Hardware equates:
;; INT 16h and remote support
EXT_16 EQU 8000H ;; extended INT 16h support is there
EXT_122 EQU 4000H ;; extended INT 16h for 122 is there
; EQU 2000H ;; unused
PC_NET EQU 1000H ;; flag PC Net is installed
;; System type/hardware support flags
PC_81 EQU 0800H ;; flag for Original PC
PC_XT EQU 0400H ;; code for PC, PC/XT, PORTABLE
PC_LAP EQU 0200H ;; code for Convertiable (p-12)
PC_PAL EQU 0080H ;; code for Model 30 (PALACE)
PC_AT EQU 0040H ;; code for PC-AT with 8042
PC_386 EQU 0020H ;; code for PS/2's with 8042 (WRANGLER)
PS_8042 EQU 0010H ;; 8042 is a Patriot/Sebring type array;AN007;jwg
;; or system set translate OFF (SCS=01)
SECURITY_ACTIVE EQU 0008h ; M030 ;; Server password mode is active
; ; M030 ;; This bit becomes off from on when
; ; M030 ;; correct password is entered JP9010
;;
;; HOT_KEY_FLAG EQUATES:
US_MODE EQU 0 ;; hot key is active => US
LANG_MODE EQU 0FFH ;; hot key is inactive
;;
;; -----------------------------------
SHARED_DATA_STR STRUC ;; SHARED DATA AREA
;;
OLD_INT_9 DD 0 ;; saved int 9 vector
OLD_INT_2F DD 0 ;; saved int 2F vector
dd 0 ;; reserved
KEYB_TYPE DW 0 ;; type of keyboard
SYSTEM_FLAG DW 0 ;; system configuration flags
TABLE_OK DB 0 ;; flag to INT 9 that table is built
db 5 dup (0) ;; reserved
;;
;; Table copy begins here:
ACTIVE_LANGUAGE DB 'US' ;; language code
INVOKED_CP_TABLE DW 437 ;; ptr to table for invoked code page
INVOKED_KBD_ID DW 0 ;; WGR invoked keyboard id. ;AN000
ACTIVE_XLAT_PTR DW -1 ;; ptr to active Specific Translate Sect
FIRST_XLAT_PTR DW -1 ;; ptr to first Specific Translate Sect
RESIDENT_END DW 0ffffh ;; offset of last byte in resident mem
LOGIC_PTR DW -1 ;; ptr to State Logic
COMMON_XLAT_PTR DW -1 ;; ptr to Common Translate Section
SPECIAL_FEATURES DW ? ;; special Features
TABLE_OVERFLOW DB 0 ;; overflow flag for table rebuild
HOT_KEY_ON_SCAN DB ? ;; scan codes to use with ALT+CTRL
HOT_KEY_OFF_SCAN DB ? ;; to turn hot key on and off
DB 4 DUP(0) ;; reserved
TABLE_AREA DB ? ;; tables loaded here:
;; State Logic
;; Common Translate Section
;; Specific Translate Sections for
;; each code page
SHARED_DATA_STR ENDS ;;
;;
;;
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; State Logic equates.
;; Contains equates for our NLS Flags and for the State Logic
;; commands.
;; State Logic command macros are defined in KEYBMAC.INC
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
STATE_LOGIC_STR STRUC ;;
;;
SL_LOGIC_LEN DW ? ;; length of state logic
SL_SPECIAL_FEATURES DW ? ;;
SL_LOGIC_CMDS DB 0 ;; state logic commands begin here
;;
STATE_LOGIC_STR ENDS ;;
;;
;;
NUM_BIOS_FLAGS EQU 4 ;;
NUM_NLS_FLAGS EQU 2 ;; '+1' below is the EXT_KB_FLAG
NUM_FLAGS EQU NUM_BIOS_FLAGS+NUM_NLS_FLAGS+1
;;
;;
EITHER_SHIFT EQU 80H ;; EXT_KB_FLAG : our own shift state
EITHER_CTL EQU 40H ;; flags
EITHER_ALT EQU 20H ;;
SCAN_MATCH EQU 08H ;; set if scan code found in XLATT
;; or SET_FLAG searches
;;
;;
KB_FLAG_ID EQU 0 ;; Flag ID's as coded in IFF and ANDF
KB_FLAG_1_ID EQU 1 ;; commands
KB_FLAG_2_ID EQU 2 ;;
KB_FLAG_3_ID EQU 3 ;;
EXT_KB_FLAG_ID EQU 4 ;;
NLS_FLAG_1_ID EQU 5 ;;
NLS_FLAG_2_ID EQU 6 ;;
;;
COMMAND_BITS EQU 0F0H ;; Mask to isolate command code
SUB_CMD_BITS EQU 0FH ;; mask to isolate sub command code
NOT_TEST EQU 08H ;; NOT bit in IFF, ANDF
COMMAND_SHIFT EQU 4 ;; shift amount for command code
FLAG_ID_BITS EQU 07H ;; mask to isolate flag id in IFF, ANDF
NUM_COMMANDS EQU 0CH ;; number of commands
;;
IFF_COMMAND EQU 00H ;;
ANDF_COMMAND EQU 10H ;;
ELSEF_COMMAND EQU 20H ;;
ENDIFF_COMMAND EQU 30H ;;
XLATT_COMMAND EQU 40H ;;
OPTION_COMMAND EQU 50H ;;
SET_FLAG_COMMAND EQU 60H ;;
PUT_ERROR_COMMAND EQU 70H ;;
IFKBD_COMMAND EQU 80H ;;
GOTO_COMMAND EQU 90H ;;
BEEP_COMMAND EQU 0A0H ;;
RESET_NLS_COMMAND EQU 0B0H ;;
CHECK_CORE_COMMAND EQU 0C0H ;;
;;
;;
EXIT_INT_9_FLAG EQU 01H ;; Special forms of GOTO. These
EXIT_STATE_LOGIC_FLAG EQU 02H ;; values are in the right nibble
;; of the GOTO command.
;;
;; PROCESSING OPTIONS:
EXIT_IF_FOUND EQU 80H ;; exit INT 9 if a translation
;; match is found
;;
ANY_KB EQU 0FFFFH ;;
XT_KB EQU 4000H ;;
AT_KB EQU 2000H ;;
G_KB EQU 1000H ;;
P_KB EQU 0800H ;;
P12_KB EQU 0400H ;;
DBCS_OLD_A_KB EQU 0080H ; M030 ;; JP9009
DBCS_OLD_P_KB EQU 0040H ; M030 ;; JP9009
DBCS_OLD_G_KB EQU 0020H ; M030 ;; JP9009
DBCS_OLD_KB EQU 00C0H ; M030 ;; JP9009
DBCS_KB EQU 0020H ; M030 ;; JP9009
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Translate Table Sections. Both the Specific and Common
;; Translate Sections are formatted as follows.
;;
;; The Specific Translate Sections are chained together using the
;; XS_NEXT_SECT_PTR field (-1 if last section).
;; Translate Sections contains multiple States.
;; A State contains the translate tables for a single
;; shift state (IE lower case, upper case ....)
;; Each State may contain multiple translate tables.
;;
;; The Translate Section layout is defined using several STRUCs.
;; These STRUCs are allocated in the Shared Data Area as follows:
;;
;; XLAT_SECT_STR ; header info for the section
;; STATE_STR ; header for state #1
;; XLAT_STR ; first translate tab for state #1
;; XLAT_TYPE_1_STR or XLAT_TYPE_2_STR
;; XLAT_STR ; second translate tab
;; XLAT_TYPE_1_STR or XLAT_TYPE_2_STR
;; ...
;; STATE_STR ; header for state #2
;; XLAT_STR
;; XLAT_TYPE_1_STR or XLAT_TYPE_2_STR
;; ...
;; ...
;;
;; A State may contain a "Set_Flag" table instead of translate tables.
;; These tables are used to set the NLS flags instead of generating
;; ASCII codes (for example: to remember dead key states).
;; There can be only on Set_Flag table per state.
;; The Set_Flag table layout is defined in the SET_FLAG_STR STRUC.
;;
;; So some states will contain translate tables (to generate ASCII codes)
;; and some states will contain a Set_Flag table (to record dead key
;; status).
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
XLAT_SECT_STR STRUC ;;
;;
XS_NEXT_SECT_PTR DW ? ;; Pointer to next Specific Translate
;; Section
XS_CP_ID DW ? ;; code page id
XS_FIRST_STATE DB ? ;;
;;
XLAT_SECT_STR ENDS ;;
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; State structure.
;; The last State is a null State containing only the
;; XS_STATE_LEN field with a value of 0.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
STATE_STR STRUC ;;
;;
XS_STATE_LEN DW ? ;; length of state section
XS_STATE_ID DB ? ;; State ID
XS_KBD_TYPE DW ? ;; Keyboard Type
XS_ERROR_CHAR DW ? ;; Buffer entry for error character
XS_FIRST_TAB DB ? ;;
;;
STATE_STR ENDS ;;
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Translate Table structures.
;; There may be many translate tables in a State. The last
;; table is a null table containing only the XLAT_TAB_SIZE field with
;; a value of 0.
;; The xlate table can be in one of two forms:
;; Type 1 = Table contains buffer entries only.
;; Scan code is used as an index into xlat table
;; Type 2 = Table contains pairs of SCAN/BUFFER_ENTRY.
;; Table must be searched for matching scan.
;; Type 1 is the default. Type 2 tables should be identified by setting
;; the TYPE_2_TAB bit in XLAT_OPTIONS.
;; Buffer entries default to 2-bytes per entry.
;; Optionally the table may contain ASCII codes only
;; (1-byte entries). This is specified by setting the ASCII_ONLY bit
;; in XLAT_OPTIONS. 2-byte buffer entries are coded ASCII,SCAN.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Translate options:
ASCII_ONLY EQU 80H ;; Only ASCII codes listed - use
;; incoming scan for buffer entry
TYPE_2_TAB EQU 40H ;; search xlat table for matching scan
ZERO_SCAN EQU 20H ;; set the scan half of the buffer
;; entry to 0
;;
NULL_ASCII_CODE EQU -1 ;;
;;
DEFAULT_TAB_2_ENT_SZ EQU 3 ;;
ASC_ONLY_TAB_2_ENT_SZ EQU 2 ;;
;;
;;
XLAT_STR STRUC ;;
;;
XLAT_TAB_SIZE DW ? ;; Size in bytes of this table -
;; includes this field, options etc.
XLAT_OPTIONS DB ? ;; xlat options
;; XLAT TABLE IS HERE
XLAT_STR ENDS ;;
;;
XLAT_TYPE_1_STR STRUC ;; use scan code as index into table
DB TYPE XLAT_STR DUP(?) ;; filler
XLAT_SCAN_LO DB ? ;; Scan code
XLAT_SCAN_HI DB ? ;; range
XLAT_1_BUF_ENTRY DB ? ;; The table itself
XLAT_TYPE_1_STR ENDS ;;
;;
XLAT_TYPE_2_STR STRUC ;; search table for scan
DB TYPE XLAT_STR DUP(?) ;; filler
XLAT_NUM DB ? ;; number of scans
XLAT_SCAN DB ? ;; Scan code
XLAT_2_BUF_ENTRY DB ? ;; The table itself
XLAT_TYPE_2_STR ENDS ;;
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Set_Flag Tables.
;; State Sections immediately following the LAST_ENTRYs.
;; Dead key definitions. If the scan matches then
;; set the bit in NLS_FLAGs indicated in DK_MASK
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
SF_ENT_SZ EQU 3 ;; size of entry
;;
SET_FLAG_STR STRUC ;;
;;
SF_NUM DB 0 ;; Number of entries
SF_SCAN_CODE DB 0 ;; scan code
SF_FLAG_ID DB 0 ;; flag id
SF_FLAG_MASK DB 0 ;; flag mask
;;
SET_FLAG_STR ENDS ;;
;;
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.LIST