322 lines
11 KiB
PHP
322 lines
11 KiB
PHP
.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
|
||
|