.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