Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-1


				
					PAGE	,132
					TITLE	DOS - KEYB Command  -  Transient Command Processing
				
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;; DOS - NLS Support - KEYB Command
				;; (C) Copyright 1988 Microsoft
				;;
				;; File Name:  KEYBCMD.ASM
				;; ----------
				;;
				;; Description:
				;; ------------
				;;	 Contains transient command processing modules for KEYB command.
				;;
				;; Documentation Reference:
				;; ------------------------
				;;	 PC DOS 3.3 Detailed Design Document - May ?? 1986
				;;
				;; Procedures contained in this file:
				;; ----------------------------------
				;;	 KEYB_COMMAND:	 Main routine for command processing.
				;;	 PARSE_PARAMETERS:  Validate syntax of parameters included
				;;	     on command line.
				;;	 BUILD_PATH: Find KEYBOARD.SYS file and validate language and/or
				;;	     code page.
				;;	 INSTALL_INT_VECTORS:  Install our INT 9, INT 2F, INT48 Drivers
				;;	 REMOVE_INT_VECTORS:  Remove our INT 9, INT 2F, INT48 Drivers
				;;	 NUMLK_ON:  Turn on the NUM LOCK LED
				;;	 FIND_FIRST_CP: Determine first code page for given language in the
				;;	     Keyboard Definition file.
				;;
				;; Include Files Required:
				;; -----------------------
				;;	   KEYBMSG.INC
				;;	   KEYBEQU.INC
				;;	   KEYBSYS.INC
				;;	   KEYBI9C.INC
				;;	   KEYBI9.INC
				;;	   KEYBI2F.INC
				;;	   KEYBI48.INC
				;;	   KEYBSHAR.INC
				;;	   KEYBDCL.INC
				;;	   KEYBTBBL.INC
				;;	   COMMSUBS.INC
				;;	   KEYBCPSD.INC
				;;	   POSTEQU.INC
				;;	   DSEG.INC
				;;
				;; External Procedure References:
				;; ------------------------------
				;;	 FROM FILE  KEYBTBBL.ASM:
				;;	      TABLE_BUILD - Create the shared area containing all keyboard tables.
				;;	      STATE_BUILD - Build all states within the table area
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-2


				;;	 FROM FILE  KEYBMSG.ASM:
				;;	      KEYB_MESSAGES - All messages
				;;
				;; Change History:
				;;
				;;  Revised for DOS 4.00 -   NickS
				;;			      A000 - WilfR
				;;			      AN002- DCR ???? -KEYBAORD SECURITY LOCK - CNS
				;;
				;;
				;;			      an003  PTM 3906 - KEYB messages do not conform
				;;						to spec. Error message does
				;;			      3/24/88		not pass back the bogus command
				;;						line argument.	      - CNS
				;;
				;;
				;;
				;;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
								       ;;
					PUBLIC KEYB_COMMAND	       ;;
								       ;;
				;*****************CNS********************
					PUBLIC ID_TAB_OFFSET	       ;AN000;
				;*****************CNS********************
					PUBLIC CP_TAB_OFFSET	       ;;
					PUBLIC STATE_LOGIC_OFFSET      ;;
					PUBLIC SYS_CODE_PAGE	       ;;
					PUBLIC KEYBCMD_LANG_ENTRY_PTR  ;;
					PUBLIC DESIG_CP_BUFFER	       ;;
					PUBLIC DESIG_CP_OFFSET	       ;;
					PUBLIC KEYBSYS_FILE_HANDLE     ;;
					PUBLIC NUM_DESIG_CP	       ;;
					PUBLIC TB_RETURN_CODE	       ;;
					PUBLIC FILE_BUFFER	       ;;
					PUBLIC FILE_BUFFER_SIZE
					PUBLIC FB		       ;;
				;*****************CNS********************
					PUBLIC ID_PTR_SIZE	       ;AN000;
					PUBLIC LANG_PTR_SIZE	       ;AN000;
					PUBLIC CP_PTR_SIZE	       ;AN000;
					PUBLIC NUM_ID		       ;AN000;
					PUBLIC NUM_LANG 	       ;AN000;
					PUBLIC NUM_CP		       ;AN000;
					PUBLIC SHARED_AREA_PTR	       ;;
				;*****************CNS********************
					PUBLIC SD_SOURCE_PTR	       ;;
					PUBLIC TEMP_SHARED_DATA        ;;
								       ;;
					PUBLIC FOURTH_PARM	       ;AN000;					    ;AN000
					PUBLIC ONE_PARMID	       ;AN000;					    ;AN000
					PUBLIC FTH_PARMID	       ;AN000;					    ;AN000
					PUBLIC ID_FOUND 	       ;AN000;					    ;AN000
					PUBLIC BAD_ID		       ;AN000;					    ;AN000
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-3


					PUBLIC ALPHA		       ;AN000;					    ;AN000
					EXTRN  PARSE_PARAMETERS:NEAR   ;AN000;					    ;AN000
				;***CNS
					EXTRN  SECURE_FL:BYTE	       ;an002;
					EXTRN  CUR_PTR:WORD	       ;an003;
					EXTRN  OLD_PTR:WORD	       ;an003;
					EXTRN  ERR_PART:WORD		;an003;
				;***CNS
				.list
								       ;;
				MSG_UTILNAME <KEYB>		       ;AN000;;; WGR identify to message retriever	   ;AN000
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-4
DOS - Message Retriever - MSGSTR.INC Module                 

			     C1	$M_SUBLIST_STRUC STRUC					     ;;AN000;;
			     C1								     ;;
 0000  0B                    C1	    $M_S_SIZE	     DB        11			     ;;AN000;; SUBLIST size  (PTR to next SU
				BLIST)
 0001  00                    C1	    $M_S_RESV	     DB        0			     ;;AN000;; RESERVED
 0002  00000000              C1	    $M_S_VALUE	     DD        ?			     ;;AN000;; Time, Date or PTR to data ite
				m
 0006  00                    C1	    $M_S_ID	     DB        ?			     ;;AN000;; n of %n
 0007  00                    C1	    $M_S_FLAG	     DB        ?			     ;;AN000;; Data-type flags
 0008  00                    C1	    $M_S_MAXW	     DB        ?			     ;;AN000;; Maximum field width
 0009  00                    C1	    $M_S_MINW	     DB        ?			     ;;AN000;; Minimum field width
 000A  00                    C1	    $M_S_PAD	     DB        ?			     ;;AN000;; Character for Pad field
			     C1								     ;;
 000B                        C1	$M_SUBLIST_STRUC ENDS					     ;;AN000;;
			     C1	$M_CLASS_ID STRUC					     ;;AN000;;
			     C1								     ;;
 0000  FF                    C1	    $M_CLS_ID	     DB        -1			     ;;AN000;; Class identifer
 0001  0004                  C1	    $M_COMMAND_VER   DW        EXPECTED_VERSION 	     ;;AN003;; COMMAND.COM version check
 0003  00                    C1	    $M_NUM_CLS_MSG   DB        0			     ;;AN000;; Total number of message in cl
				ass
			     C1								     ;;
 0004                        C1	$M_CLASS_ID ENDS					     ;;
			     C1	$M_ID STRUC						     ;;AN000;;
			     C1								     ;;
 0000  FFFF                  C1	    $M_NUM	     DW        -1			     ;;AN000;; Message Number
 0002  0000                  C1	    $M_TXT_PTR	     DW        ?			     ;;AN000;; Pointer to message text
			     C1								     ;;
 0004                        C1	$M_ID ENDS						     ;;AN000;;
			     C1	$M_RES_ADDRS STRUC					     ;;AN000;;
			     C1								     ;;
 0000  00000000              C1	    $M_EXT_ERR_ADDRS DD        0			     ;;AN000;; Allow pointers to THREE Exten
				ded error locations
 0004  00000000              C1	    $M_EXT_FILE      DD        0			     ;;AN001;;
 0008  00000000              C1	    $M_EXT_COMMAND   DD        0			     ;;AN000;;
 000C  FFFFFFFF              C1	    $M_EXT_TERM      DD        -1			     ;;AN000;;
 0010  00000000              C1	    $M_PARSE_COMMAND DD        0			     ;;AN000;;
 0014  00000000              C1	    $M_PARSE_ADDRS   DD        0			     ;;AN000;; Allow pointers to TWO Parse e
				rror locations
 0018  FFFFFFFF              C1	    $M_PARSE_TERM    DD        -1			     ;;AN000;;
 001C  00000000              C1	    $M_CRIT_ADDRS    DD        0			     ;;AN000;; Allow pointers to TWO Critica
				l error locations
 0020  00000000              C1	    $M_CRIT_COMMAND  DD        0			     ;;AN000;;
 0024  FFFFFFFF              C1	    $M_CRIT_TERM     DD        -1			     ;;AN000;;
 0028  FFFFFFFF              C1	    $M_DISK_PROC_ADDR DD       -1			     ;;AN004;; Address of READ_DISK_PROC
 002C  0001[                 C1	    $M_CLASS_ADDRS   DD        $M_NUM_CLS DUP(0)	     ;;AN000;; Allow pointers to specified c
				lasses
	   00000000          C1	
			 ]   C1	
			     C1	
 0030  FFFFFFFF              C1	    $M_CLS_TERM      DD        -1			     ;;AN000;;
 0034  00000000              C1	    $M_DBCS_VEC      DD        0			     ;;AN000;; Save DBCS vector
 0038  0000                  C1	    $M_HANDLE	     DW        ?			     ;;AN000;;
 003A  00                    C1	    $M_SIZE	     DB        0			     ;;AN000;;
 003B  0D 0A                 C1	    $M_CRLF	     DB        0DH,0AH			     ;;AN004;; CR LF message
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-5
DOS - Message Retriever - MSGSTR.INC Module                 

 003D  00                    C1	    $M_CLASS	     DB        ?			     ;;AN004;; Saved class
 003E  0000                  C1	    $M_RETURN_ADDR   DW        ?			     ;;AN000;;
 0040  0000                  C1	    $M_MSG_NUM	     DW        $M_NULL			     ;;AN000;;
 0042  000A                  C1	    $M_DIVISOR	     DW        10			     ;;AN000;; Default = 10 (must be a WORD 
				for division)
 0044  0040[                 C1	    $M_TEMP_BUF      DB        $M_TEMP_BUF_SZ DUP("$")	     ;;AN000;; Temporary buffer
	   24                C1	
			 ]   C1	
			     C1	
 0084  24                    C1	    $M_BUF_TERM      DB        "$"			     ;;AN000;;
			     C1	
 0085                        C1	$M_RES_ADDRS ENDS					     ;;AN000;;
			     C1	$M_COUNTRY_INFO STRUC					     ;;AN000;; Expected Country infomation
			     C1								     ;;
 0000  0044[                 C1	    $M_HEADER	     DB       $M_RES_ADDRS_SZ-$M_TEMP_BUF_SZ-1 DUP(?) ;;AN000;; Go past first part o
				f struc
	   ??                C1	
			 ]   C1	
			     C1	
 0044  0000                  C1	    $M_DATE_FORMAT   DW       ? 			     ;;AN000;; <------- Date Format
 0046  0005[                 C1	    $M_CURR_SEPARA   DB       5 DUP(?)			     ;;AN000;;
	   ??                C1	
			 ]   C1	
			     C1	
 004B  00 00                 C1	    $M_THOU_SEPARA   DB       ?,0			     ;;AN000;; <------- Thou Separator
 004D  00 00                 C1	    $M_DECI_SEPARA   DB       ?,0			     ;;AN000;; <------- Decimal Separator
 004F  00 00                 C1	    $M_DATE_SEPARA   DB       ?,0			     ;;AN000;; <------- Date Separator
 0051  00 00                 C1	    $M_TIME_SEPARA   DB       ?,0			     ;;AN000;; <------- Time Separator
 0053  00                    C1	    $M_CURR_FORMAT   DB       ? 			     ;;AN000;;
 0054  00                    C1	    $M_SIG_DIGS_CU   DB       ? 			     ;;AN000;;
 0055  00                    C1	    $M_TIME_FORMAT   DB       ? 			     ;;AN000;; <------- Time Format
			     C1								     ;;
 0056                        C1	$M_COUNTRY_INFO ENDS					     ;;AN000;;
								       ;;
 0000				CODE	SEGMENT PUBLIC 'CODE'          ;;
								       ;;
			     C	.LIST
					INCLUDE KEYBSYS.INC	       ;;
			     C	.LIST
			     C	
					INCLUDE KEYBI9.INC	       ;;
			     C	.LIST
			     C	
					INCLUDE KEYBI9C.INC	       ;;
			     C	.LIST
			     C	
					INCLUDE KEYBI2F.INC	       ;;
			     C	.LIST
			     C	
					INCLUDE KEYBI48.INC	       ;;
			     C	
			     C	.LIST
			     C	
					INCLUDE KEYBSHAR.INC	       ;;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-6
DOS - Message Retriever - MSGSTR.INC Module                 

			     C	.LIST
					INCLUDE KEYBDCL.INC	       ;;
			     C	
			     C	.LIST
			     C	
					INCLUDE KEYBTBBL.INC	       ;;
			     C	
			     C	.LIST
					INCLUDE COMMSUBS.INC	       ;;
			     C	.LIST
					INCLUDE KEYBCPSD.INC	       ;;
			     C	.LIST
			     C	
				.list
					ASSUME	CS:CODE,DS:CODE        ;;
								       ;;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;;
				;; Module: KEYB_COMMAND
				;;
				;; Description:
				;;     Main routine for transient command processing.
				;;
				;; Input Registers:
				;;     DS - points to our data segment
				;;
				;; Output Registers:
				;;     Upon termination, if an error has occurred in which a keyboard table
				;;     was not loaded, the AL register will contain the a error flag. This
				;;     flag is defined as follows:
				;;	      AL:= 1 - Invalid language, code page, or syntax
				;;		   2 - Bad or missing Keyboard Definition File
				;;		   3 - KEYB could not create a table in resident memory
				;;		   4 - An error condition was received when communicating
				;;		       with the CON device
				;;		   5 - Code page requested has not been designated
				;;		   6 - The keyboard table for the requested code page cannot
				;;		       be found in resident keyboard table.
				;;
				;; Logic:
				;;     IF KEYB has NOT been previously loaded THEN
				;;	  Set SHARED_AREA_PTR to TEMP_SHARED_AREA
				;;	  INSTALLED_KEYB := 0
				;;	  Get HW_TYPE (set local variable)
				;;     ELSE
				;;	  Set SHARED_AREA_PTR to ES:SHARED_AREA
				;;	  Get HW_TYPE (set local variable)
				;;	  Set TABLE_OK := 0
				;;	  INSTALLED_KEYB := 1
				;;
				;;     IF CPS-CON has been loaded THEN
				;;	  INSTALLED_CON := 1
				;;
				;;*********************************** CNS *************************************
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-7
DOS - Message Retriever - MSGSTR.INC Module                 

				;;     Call PARSE_PARAMETERS := Edit ID or language, code page,
				;;					    and path parameters,ID on command line
				;;*********************************** CNS *************************************
				;;     Check all return codes:
				;;     IF any parameters are invalid THEN
				;;	  Display ERROR message
				;;     ELSE
				;;	  IF no language parm specified
				;;				 AND code page is not invalid
				;;						     AND syntax is valid THEN
				;;	     Process QUERY:
				;;	     IF KEYB is installed THEN
				;;		 Get and display active language from SHARED_DATA_AREA
				;;		 Get invoked code page from SHARED_DATA_AREA
				;;		 Convert to ASCII
				;;		 Display ASCII representation of code page, CR/LF
				;;*********************************** CNS *************************************
				;;	     IF ALTERNATE FLAG SET
				;;		 Get and display active ID from SHARED_DATA_AREA
				;;		 Convert to ASCII
				;;		 Display ASCII representation of ID, CR/LF
				;;*********************************** CNS *************************************
				;;	     IF CPS-CON is installed THEN
				;;		 Get selected code page info from CON
				;;		 Convert to ASCII
				;;		 Display ASCII representation of code page, CR/LF
				;;	     EXIT without staying resident
				;;
				;;	  ELSE
				;;	     Call BUILD_PATH := Determine location of Keyboard definition file
				;;	     Open the file
				;;	     IF error in opening file THEN
				;;		Display ERROR message and EXIT
				;;	     ELSE
				;;		Save handle
				;;		Set address of buffer
				;;		READ header of Keyboard definition file
				;;		IF error in reading file THEN
				;;		   Display ERROR message and EXIT
				;;		ELSE
				;;		   Check signature for correct file
				;;		   IF file signature is correct THEN
				;;		      READ language table
				;;		      IF error in reading file THEN
				;;			  Display ERROR message and EXIT
				;;		      ELSE
				;;			  Use table to verify language parm
				;;			  Set pointer values
				;;			  IF code page was specified
				;;			      READ language entry
				;;			      IF error in reading file THEN
				;;				   Display ERROR message and EXIT
				;;			      ELSE
				;;				   READ Code page table
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-8
DOS - Message Retriever - MSGSTR.INC Module                 

				;;				   IF error in reading file THEN
				;;				       Display ERROR message and EXIT
				;;				   ELSE
				;;				       Use table to verify code page parm
				;;				       Set pointer values
				;;     IF CPS-CON is not installed THEN
				;;	    Set number of code pages = 1
				;;	    IF CODE_PAGE_PARM was specified THEN
				;;	       Copy CODE_PAGE_PARM into table of code pages to build
				;;	    ELSE
				;;	       Call FIND_FIRST_CP := Define the system code page (1st in Keyb Def file)
				;;	       Copy SYSTEM_CP into table of code pages to build
				;;     ELSE
				;;	    Issue INT 2F ; 0AD03H  to get table of Designated code pages
				;;	    Set number of designated code pages (HWCP + Desig CP)
				;;	    Issue INT 2F ; 0AD02H  to get invoked code page
				;;	    IF CODE_PAGE_PARM was specified THEN
				;;	       Check that CODE_PAGE_PARM is in the list of designated code pages
				;;	       IF CODE_PAGE_PARM is in the list of designated code pages THEN
				;;		    Copy specified CP into table of code pages to build
				;;		    IF a CP has been selected AND is inconsistent with specified CP
				;;			Issue WARNING message
				;;	       ELSE
				;;		    Display ERROR message
				;;	    ELSE
				;;	       IF a code page has been invoked THEN
				;;		    Copy invoked code page into table of code pages to build
				;;	       ELSE
				;;		    Call FIND_FIRST_CP := Define the system code page (1st in Keyb Def file)
				;;		    Copy SYSTEM_CP into table of code pages to build
				;;
				;;     IF KEYB has not been previously installed THEN
				;;	  Call FIND_SYS_TYPE := Determine system type
				;;	  IF system type is PCjr THEN
				;;	      IF multilingual ROM is present THEN
				;;		   Set language code
				;;		   EXIT without staying resident
				;;	  Call INSTALL_INT_9 := Install INT 9 handler
				;;	  Call FIND_KEYB_TYPE := Determine the keyboard type
				;;
				;;     Call TABLE_BUILD := Build the TEMP_SHARED_DATA_AREA
				;;
				;;     IF return codes from TABLE_BUILD are INVALID THEN
				;;	  IF KEYB_INSTALLED := 0 THEN
				;;	      Call REMOVE_INT_9
				;;	  Display corresponding ERROR message
				;;	  EXIT without staying resident
				;;     ELSE
				;;	  IF any of the designated CPs were invalid in the build THEN
				;;	      Issue WARNING message
				;;	  Close the Keyboard definition file
				;;	  IF KEYB had NOT already been installed THEN
				;;	      IF keyboard is a Ferrari_G AND system is not an XT THEN
				;;	      Call NUMLK_ON := Turn the NUM LOCK LED on
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-9
DOS - Message Retriever - MSGSTR.INC Module                 

				;;	      IF extended INT 16 support required THEN
				;;		 Install extended INT 16 support
				;;	      Call INSTALL_INT_9_NET := Let network know about INT 9
				;;	      Call INSTALL_INT_2F_48 := Install the INT 2F and INT 48 drivers
				;;	      Activate language
				;;	      Get resident end and copy TEMP_SHARED_DATA_AREA into SHARED_DATA_AREA
				;;	      EXIT but stay resident
				;;	  ELSE
				;;	      IF this was not a query call AND exit code was valid THEN
				;;		 Activate language
				;;		 Get resident end and copy TEMP_SHARED_DATA_AREA into SHARED_DATA_AREA
				;;	      EXIT without staying resident
				;;     END
				;;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
								       ;;
 = 0001				INVALID_PARMS	     EQU  1	       ;;  EXIT return codes
 = 0002				BAD_KEYB_DEF_FILE    EQU  2	       ;;
 = 0003				MEMORY_OVERFLOW      EQU  3	       ;;
 = 0004				CONSOLE_ERROR	     EQU  4	       ;;
 = 0005				CP_NOT_DESIGNATED    EQU  5	       ;;
 = 0006				KEYB_TABLE_NOT_LOAD  EQU  6	       ;;
 = 0007				BAD_DOS_VER	     EQU  7	       ;AN000;;; WGR					   ;AN000
								       ;;
 0000  00			EXIT_RET_CODE	     DB   0	       ;;
				;******************** CNS ***********  ;AN000;;;
 = 0000				ID_VALID	     EQU  0	       ;AN000;;;
 = 0001				ID_INVALID	     EQU  1	       ;AN000;;;
 = 0002				NO_ID		     EQU  2	       ;AN000;;;
 = 0000				LANGUAGE_VALID	     EQU  0	       ;AN000;;;
 = 0001				LANGUAGE_INVALID     EQU  1	       ;AN000;;;  Return Codes
 = 0002				NO_LANGUAGE	     EQU  2	       ;AN000;;;    from
 = 0003				NO_IDLANG	     EQU  3	       ;AN000;;;
				;******************** CNS ***********  ;;
 = 0000				CODE_PAGE_VALID      EQU  0	       ;;     EDIT_LANGUAGE_CODE
 = 0001				CODE_PAGE_INVALID    EQU  1	       ;;
 = 0002				NO_CODE_PAGE	     EQU  2	       ;;
 = 0000				VALID_SYNTAX	     EQU  0	       ;;
 = 0001				INVALID_SYNTAX	     EQU  1	       ;;;;;;;
									    ;;
 = 0002				ACT_KEYB	     EQU  2		    ;AC000;;; WGR				   ;AN000
 = 0003				ACT_ID		     EQU  3		    ;AC000;;; WGR				   ;AN000
 = 0004				ACT_KEYB_CP	     EQU  4		    ;AC000;;; WGR				   ;AN000
 = 0005				ACT_CON_CP	     EQU  5		    ;AC000;;; WGR				   ;AN000
 = 0006				INV_L		     EQU  6		    ;AC000;;; WGR message numbers...		   ;AN000
 = 0007				INV_I		     EQU  7		    ;AC000;;; WGR				   ;AN000
 = 0008				INV_CP		     EQU  8		    ;AC000;;; WGR				   ;AN000
 = 0012				INV_S		     EQU  18		    ;AC000;;; WGR				   ;AN000
 = 0009				INV_FN		     EQU  9		    ;AC000;;; WGR				   ;AN000
 = 000A				INV_KEYB_Q	     EQU  10		    ;AC000;;; WGR				   ;AN000
 = 000B				INV_CON_Q	     EQU  11		    ;AC000;;; WGR				   ;AN000
 = 000C				NOT_DESIG	     EQU  12		    ;AC000;;; WGR				   ;AN000
 = 000D				NOT_SUPP	     EQU  13		    ;AC000;;; WGR				   ;AN000
 = 000E				NOT_VALID	     EQU  14		    ;AC000;;; WGR				   ;AN000
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-10
DOS - Message Retriever - MSGSTR.INC Module                 

 = 000F				WARNING_1	     EQU  15		    ;AC000;;; WGR				   ;AN000
 = 0010				INV_COMBO	     EQU  16		    ;AC000;;; WGR				   ;AN000
 = 0011				MEMORY_OVERF	     EQU  17		    ;AC000;;; WGR				   ;AN000
 0001  0A 0D 24			CR_LF		     DB   10,13,'$'         ;; WGR                                  ;AN000
									    ;;
 0004  00			FOURTH_PARM    DB	0		    ;AN000;;; WGR switch was specified		   ;AN000
 0005  00			ONE_PARMID     DB	0		    ;AN000;;; WGR id given as positional	   ;AN000
 0006  00			FTH_PARMID     DB	0		    ;AN000;;; WGR id given as switch		   ;AN000
 0007  00			ID_FOUND       DB	0		    ;AN000;;; WGR id was good (in k.d. file)	   ;AN000
 0008  00			BAD_ID	       DB	0		    ;AN000;;; WGR id was bad (from parse)	   ;AN000
 0009  00			ALPHA	       DB	0		    ;AN000;;; WGR first parm a language id	   ;AN000
									    ;;
 000A  00			ID_DISPLAYED   DB	0		    ;AN000;;; WGR Indicating ID already displayed  ;AN000
									    ;; WGR				    ;AN000
 000B				SUBLIST_NUMBER LABEL BYTE		    ;AN000;;; WGR sublist for numbers		   ;AN000
 000B  0B				       DB	11		    ;AN000;;; WGR size				   ;AN000
 000C  00				       DB	0		    ;AN000;;; WGR				   ;AN000
 000D  0000			PTR_TO_NUMBER  DW	?		    ;AN000;;; WGR offset ptr			   ;AN000
 000F  0000			SEG_OF_NUMBER  DW	?		    ;AN000;;; WGR segment			   ;AN000
 0011  01				       DB	1		    ;AN000;;; WGR				   ;AN000
 0012  A1				       DB	10100001B	    ;AN000;;; WGR flag				   ;AN000
 0013  03				       DB	3		    ;AN000;;; WGR max width			   ;AN000
 0014  01				       DB	1		    ;AN000;;; WGR min width			   ;AN000
 0015  20				       DB	" "                 ;AN000;;; WGR filler                           ;AN000
									    ;AN000;;; WGR
									    ;AN000;;; WGR
 0016				SUBLIST_ASCIIZ LABEL BYTE		    ;AN000;;; WGR sublist for asciiz		   ;AN000
 0016  0B				       DB	11		    ;AN000;;; WGR size				   ;AN000
 0017  00				       DB	0		    ;AN000;;; WGR				   ;AN000
 0018  0000			PTR_TO_ASCIIZ  DW	?		    ;AN000;;; WGR offset ptr			   ;AN000
 001A  0000			SEG_OF_ASCIIZ  DW	?		    ;AN000;;; WGR segment			   ;AN000
 001C  01				       DB	1		    ;AN000;;; WGR				   ;AN000
 001D  10				       DB	00010000B	    ;AN000;;; WGR flag				   ;AN000
 001E  02				       DB	2		    ;AN000;;; WGR max width			   ;AN000
 001F  02				       DB	2		    ;AN000;;; WGR min width			   ;AN000
 0020  20				       DB	" "                 ;AN000;;; WGR filler                           ;AN000
									    ;AN000;;; WGR				   ;AN000
 0021  0000			NUMBER_HOLDER  DW	?		    ;AN000;;; WGR used for message retriever	   ;AN000
				;***CNS
 0023				SUBLIST_COMLIN LABEL BYTE		    ;an003;;; WGR sublist for asciiz		   ;AN000
 0023  0B				       DB	11		    ;an003;;; WGR size				   ;AN000
 0024  00				       DB	0		    ;an003;;; WGR				   ;AN000
 0025  0000			PTR_TO_COMLIN  DW	?		    ;an003;;; WGR offset ptr			   ;AN000
 0027  0000			SEG_OF_COMLIN  DW	?
 0029  00				       DB	0		    ;an003;;; WGR				   ;AN000
 002A  10				       DB	LEFT_ALIGN+CHAR_FIELD_ASCIIZ  ;AN000;;; WGR flag			    
				 ;AN000
				
 002B  00				       DB	0		    ;an003;;; WGR max width			   ;AN000
 002C  01				       DB	1		    ;an003;;; WGR min width			   ;AN000
 002D  20				       DB	" "                 ;an003;;; WGR filler                           ;AN000
				
				
 002E  0040[			STRING_HOLDER  DB	64 DUP(0)
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-11
DOS - Message Retriever - MSGSTR.INC Module                 

	   00			
			 ]	
				
				;***CNS 				    ;;
									    ;;
 = 012C				FILE_BUFFER_SIZE     EQU  50*6
 006E  012C[			FILE_BUFFER	     DB   FILE_BUFFER_SIZE DUP(0) ;AC000;;; Buffer for Keyboard Def file
	   00			
			 ]	
				
 =				FB		     EQU  FILE_BUFFER	    ;AC000;m for 32 language entries)
 019A  001C[			DESIG_CP_BUFFER      DW   28 DUP(?)	    ;; (Room for 25 code pages)
	   ????			
			 ]	
				
 01D2  0038			DESIG_CP_BUF_LEN     DW   $-DESIG_CP_BUFFER ;;	Length of code page buffer
 01D4  0000			NUM_DESIG_CP	     DW   0		    ;;
 01D6  00000000			CP_TAB_OFFSET	     DD   ?		    ;;
				;******************  CNS  ******************;AN000;
 01DA  0000			TOTAL_SIZE	     DW   0		    ;AN000;
 01DC  0000			PASS_LANG	     DW   0		    ;AN000;
 01DE  00000000			ID_TAB_OFFSET	     DD   ?		    ;AN000;
				;******************  CNS  ******************;;
 01E2  FFFFFFFF			STATE_LOGIC_OFFSET   DD   -1		    ;;
 01E6  0000			KEYBSYS_FILE_HANDLE  DW   ?		    ;;;;;;;;;;;
 01E8  0001			TB_RETURN_CODE	     DW   1			     ;;
 01EA  019A R			DESIG_CP_OFFSET      DW   OFFSET DESIG_CP_BUFFER     ;;
 01EC  0000			SYS_CODE_PAGE	     DW   0			     ;;
 01EE  0000			DESIG_LIST	     DW   0			     ;;
 01F0  00			QUERY_CALL	     DB   0			     ;;
										     ;;
 = 0002				KB_MASK 	     EQU  02h			     ;;
										     ;;
 01F1  FF 4B 45 59 42 20	SIGNATURE	     DB   0FFh,'KEYB   '             ;;
       20 20			
 01F9  0008			SIGNATURE_LENGTH     DW   8			     ;;
				;******************  CNS  ***************************;AN000;
 01FB  0000			NUM_ID		     DW   0			     ;AN000;
 01FD  00			ERR4ID		     DB   0			     ;AN000;
 01FE  0000			NUM_LANG	     DW   0			     ;AN000;
 0200  0000			NUM_CP		     DW   0			     ;AN000;
 0202  0006			ID_PTR_SIZE	     DW   SIZE KEYBSYS_ID_PTRS	     ;AN000;
				;******************  CNS  *****************************
 0204  0006			LANG_PTR_SIZE	     DW   SIZE KEYBSYS_LANG_PTRS     ;;
 0206  0006			CP_PTR_SIZE	     DW   SIZE KEYBSYS_CP_PTRS	     ;;
 0208  00000000			KEYBCMD_LANG_ENTRY_PTR DD ?			     ;;
										     ;;
 020C  0000			KEYB_INSTALLED	     DW   0			     ;;
 020E  0000			CON_INSTALLED	     DW   0			     ;;
 0210  00000000			SHARED_AREA_PTR      DD   0			     ;;
 0214  0000			GOOD_MATCH	     DW   0			     ;;
				;******************  CNS  ***************************;;
 0216  3F 3F 00			LANGUAGE_ASCII	     DB   '??',0                     ;; WGR                         ;AC000
										     ;;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-12
DOS - Message Retriever - MSGSTR.INC Module                 

 0219  00			CMD_PARM_LIST	     PARM_LIST <>		     ;;
 021A  00			
 021B  00			
 021C  00			
 021D  0000			
 021F  0000			
 0221  0000			
 0223  0000			
 0225  0000			
				
										     ;;
 0227  4652 4752 4954 5350	JR_LANGUAGE_CODES    DW   'FR','GR','IT','SP','UK'   ;;
       554B			
										     ;;
 = 0005				JR_NUM_CODES	     EQU   5			     ;;
										     ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;----------  TABLES FOR EXTENDED KEYBOARD SUPPORT CTRL CASE  ---------	   RWV 11-06-85 ;;
															;;
 0231				RPL_K8	LABEL	BYTE			;-------- CHARACTERS ---------			;;
 0231  1B FF 00 FF FF FF		DB	27,-1,00,-1,-1,-1	; Esc, 1, 2, 3, 4, 5				;;
 0237  1E FF FF FF FF 1F		DB	30,-1,-1,-1,-1,31	; 6, 7, 8, 9, 0, -				;;
 023D  FF 7F 94 11 17 05		DB	-1,127,148,17,23,5	; =, Bksp, Tab, Q, W, E 			;;
 0243  12 14 19 15 09 0F		DB	18,20,25,21,09,15	; R, T, Y, U, I, O				;;
 0249  10 1B 1D 0A FF 01		DB	16,27,29,10,-1,01	; P, [, ], Enter, Ctrl, A			;;
 024F  13 04 06 07 08 0A		DB	19,04,06,07,08,10	; S, D, F, G, H, J				;;
 0255  0B 0C FF FF FF FF		DB	11,12,-1,-1,-1,-1	; K, L, ;, ', `, LShift                         ;;
 025B  1C 1A 18 03 16 02		DB	28,26,24,03,22,02	; \, Z, X, C, V, B				;;
 0261  0E 0D FF FF FF FF		DB	14,13,-1,-1,-1,-1	; N, M, ,, ., /, RShift 			;;
 0267  96 FF 20 FF			DB	150,-1,' ',-1           ; *, Alt, Space, CL                             ;;
									;--------- FUNCTIONS ---------			;;
 026B  5E 5F 60 61 62 63		DB	94,95,96,97,98,99	; F1 - F6					;;
 0271  64 65 66 67 FF FF		DB	100,101,102,103,-1,-1	; F7 - F10, NL, SL				;;
 0277  77 8D 84 8E 73 8F		DB	119,141,132,142,115,143 ; Home, Up, PgUp, -, Left, Pad5 		;;
 027D  74 90 75 91 76 92		DB	116,144,117,145,118,146 ; Right, +, End, Down, PgDn, Ins		;;
 0283  93 FF FF FF 89 8A		DB	147,-1,-1,-1,137,138	; Del, SysReq, Undef, WT, F11, F12		;;
 = 0058				L_CTRL_TAB	EQU	$-RPL_K8							;;
															;;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;;    Program Code
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
										    ;;
 0289				KEYB_COMMAND  PROC NEAR 			    ;;
										    ;;
 0289  E8 0D33 R			CALL  SYSLOADMSG			    ;AN000;load messages		 ;AN000
 028C  73 0B				JNC   VERSION_OK			    ;AN000;if no carry then version ok	 ;AN000
 028E  E8 0E80 R			CALL  SYSDISPMSG			    ;AN000;error..display version error  ;AN000
 0291  B0 07				MOV   AL,BAD_DOS_VER			    ;AN000;bad DOS version		 ;AN000
 0293  A2 0000 R			MOV   EXIT_RET_CODE,AL			    ;AN000;				 ;AN000
 0296  E9 08E5 R			JMP   KEYB_EXIT_NOT_RESIDENT		    ;AN000;exit..non resident		 ;AN000
 0299				VERSION_OK:					    ;; WGR				 ;AN000
 0299  8C 0E 000F R			MOV   SEG_OF_NUMBER,CS			    ;AN000;initialize.. 		 ;AN000
 029D  8C 0E 001A R			MOV   SEG_OF_ASCIIZ,CS			    ;AN000;  ..sublists 		 ;AN000
 02A1  BD 0219 R			MOV   BP,OFFSET CMD_PARM_LIST		    ;AN000;pointer for parm list
 02A4  8C 06 0210 R			MOV   WORD PTR SHARED_AREA_PTR,ES	    ;AN000; ES segment
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-13
DOS - Message Retriever - MSGSTR.INC Module                 

										    ;;
 02A8				KEYB_INSTALL_CHECK:				    ;;
 02A8  B8 AD80				MOV   AX,0AD80H 			    ;; KEYB install check
 02AB  CD 2F				INT   2FH				    ;;
 02AD  3C FF				CMP   AL,-1				    ;; If flag is not 0FFh THEN
 02AF  74 09				JE    INSTALLED_KEYB			    ;;
 02B1  C7 06 0212 R 1834 R		MOV   WORD PTR SHARED_AREA_PTR+2,OFFSET TSD ;;
 02B7  EB 1D 90				JMP   CON_INSTALL_CHECK 		    ;;
									    ;;;;;;;;;;
 02BA				INSTALLED_KEYB: 			    ;;
 02BA  C7 06 020C R 0001		MOV   KEYB_INSTALLED,1		    ;;	Set KEYB_INSTALLED flag = YES
 02C0  8C 06 0210 R			MOV   WORD PTR SHARED_AREA_PTR,ES   ;;	Save segment of SHARED_DATA_AREA
 02C4  89 3E 0212 R			MOV   WORD PTR SHARED_AREA_PTR+2,DI ;;	Save offset of SHARED_DATA_AREA
 02C8  26: 8B 45 0C			MOV   AX,ES:[DI].KEYB_TYPE	    ;;
 02CC  A3 0000 E			MOV   HW_TYPE,AX		    ;;
 02CF  26: C6 45 10 00			MOV   ES:[DI].TABLE_OK,0	    ;;	Do not allow processing
 02D4  0E				PUSH  CS			    ;;		  while building table
 02D5  07				POP   ES			    ;;	Reset ES until required
									    ;;
 02D6				CON_INSTALL_CHECK:		       ;;;;;;;
 02D6  B8 AD00				MOV   AX,0AD00H 	       ;; CONSOLE install check
 02D9  CD 2F				INT   2FH		       ;;
 02DB  3C FF				CMP   AL,-1		       ;; If flag is not 0FFh THEN
 02DD  74 03				JE    INSTALLED_CON	       ;;
 02DF  EB 07 90				JMP   CALL_FIRST_STAGE	       ;;
								       ;;
 02E2				INSTALLED_CON:			       ;;
 02E2  C7 06 020E R 0001		MOV   CON_INSTALLED,1	       ;;    Set CON_INSTALLED flag = YES
								       ;;
 02E8				CALL_FIRST_STAGE:		       ;;
 02E8  0E				PUSH  CS		       ;;
 02E9  07				POP   ES		       ;;
 02EA  E8 0000 E			CALL  PARSE_PARAMETERS	       ;; Validate parameter list
								       ;;
 02ED				BEGIN_PARM_CHECK:		       ;; CHECK ALL RETURN CODES
 02ED  8A 56 02				MOV   DL,[BP].RET_CODE_3       ;;
 02F0  80 FA 01				CMP   DL,1		       ;; Check for invalid syntax
 02F3  75 03				JNE   VALID1		       ;;
 02F5  E9 081B R			JMP   ERROR3		       ;;
								       ;;
 02F8				VALID1: 			       ;;
 02F8  8A 56 00				MOV   DL,[BP].RET_CODE_1       ;; Check for invalid language parm
 02FB  80 FA 01				CMP   DL,1		       ;;
 02FE  75 03				JNE   VALID2		       ;;
 0300  E9 07ED R			JMP   ERROR1		       ;;
								       ;;
 0303				VALID2: 			       ;;
 0303  8A 56 01				MOV   DL,[BP].RET_CODE_2       ;; Check for invalid code page parm
 0306  80 FA 01				CMP   DL,1		       ;;
 0309  75 03				JNE   VALID3		       ;;
 030B  E9 0804 R			JMP   ERROR2		       ;;
								       ;;
 030E				VALID3: 			       ;;
 030E  8A 56 00				MOV   DL,[BP].RET_CODE_1       ;; Check for query command
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-14
DOS - Message Retriever - MSGSTR.INC Module                 

 0311  80 FA 02				CMP   DL,2		       ;;
 0314  74 0B				JE    QUERY		       ;;
				;******************************* CNS **;;
 0316  8A 56 00				MOV   DL,[BP].RET_CODE_1       ;AN000;k for query command
 0319  80 FA 03				CMP   DL,3		       ;AN000;;; Get a status of the codepage
 031C  74 03				JE    QUERY		       ;AN000;;; language, and possible ID code
				;******************************* CNS **;;
 031E  E9 0444 R			JMP   NOT_QUERY 	       ;;
								       ;; IF QUERY is requested THEN
 0321				QUERY:				       ;;
 0321  88 16 01F0 R			MOV   QUERY_CALL,DL	       ;;
 0325  A1 020C R			MOV   AX,KEYB_INSTALLED        ;;     If KEYB is installed THEN
 0328  3D 0000				CMP   AX,0		       ;;
 032B  74 60				JE    QUERY_CONTINUE1	       ;;;;;;;;;;;;;;;;
										     ;;
 032D  8B 3E 0212 R			MOV   DI,WORD PTR SHARED_AREA_PTR+2	     ;; Get offset of
 0331  8E 06 0210 R			MOV   ES,WORD PTR SHARED_AREA_PTR	     ;; 	 shared area
 0335  26: 8B 5D 16			MOV   BX,WORD PTR ES:[DI].ACTIVE_LANGUAGE    ;; Get active language
 0339  83 FB 00				CMP   BX,0				     ;; WGR if no language..		 ;AN000
 033C  74 23				JE    I_MESSAGE 			     ;; WGR then id was specified	 ;AN000
										     ;;
									   ;;;;;;;;;;;;
 033E				L_MESSAGE:				   ;;
 033E  89 1E 0216 R			MOV   WORD PTR LANGUAGE_ASCII,BX   ;AC000;;;  Display Language
 0342  8D 36 0216 R			LEA   SI,LANGUAGE_ASCII 	   ;AN000;;; WGR sublist points to...			;AN0
				00
 0346  89 36 0018 R			MOV   PTR_TO_ASCIIZ,SI		   ;AN000;;; WGR language code asciiz string		;AN0
				00
 034A  B8 0002				MOV   AX,ACT_KEYB		   ;AC000;;; WGR display 'Current keyboard code'        ;AN0
				00
 034D  BB 0001				MOV   BX,STDOUT 		   ;AN000;;; WGR to standard out			;AN0
				00
 0350  B9 0001				MOV   CX,1			   ;AN000;;; WGR one replacement			;AN0
				00
 0353  B6 FF				MOV   DH,UTILITY_MSG_CLASS	   ;AN000;;; WGR utility message			;AN0
				00
 0355  32 D2				XOR   DL,DL			   ;AN000;;; WGR no input				;AN0
				00
 0357  8D 36 0016 R			LEA   SI,SUBLIST_ASCIIZ 	   ;AN000;;; WGR ptr to sublist 			;AN0
				00
 035B  E8 0E80 R			CALL  SYSDISPMSG		   ;AN000;;; WGR					;AN0
				00
 035E  EB 3F 90				JMP   KEYB_L_FINISHED		   ;;
									   ;;;;;;;
 0361				I_MESSAGE:					;;
 0361  26: 8B 5D 1A			MOV   BX,WORD PTR ES:[DI].INVOKED_KBD_ID;AN000;;; WGR get id code.			;AN0
				00
 0365  89 1E 0021 R			MOV   NUMBER_HOLDER,BX			;AN000;;; WGR transfer number to temp loc.	;AN0
				00
 0369  8D 36 0021 R			LEA   SI,NUMBER_HOLDER			;AN000;;; WGR sublist points to...		;AN0
				00
 036D  89 36 000D R			MOV   PTR_TO_NUMBER,SI			;AN000;;; WGR code page word			;AN0
				00
 0371  B8 0003				MOV   AX,ACT_ID 			;AN000;;; WGR display 'Current ID:  '           ;AN0
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-15
DOS - Message Retriever - MSGSTR.INC Module                 

				00
 0374  BB 0001				MOV   BX,STDOUT 			;AN000;;; WGR to standard out			;AN0
				00
 0377  B9 0001				MOV   CX,1				;AN000;;; WGR one replacement			;AN0
				00
 037A  B6 FF				MOV   DH,UTILITY_MSG_CLASS		;AN000;;; WGR utility message			;AN0
				00
 037C  32 D2				XOR   DL,DL				;AN000;;; WGR no input				;AN0
				00
 037E  8D 36 000B R			LEA   SI,SUBLIST_NUMBER 		;AN000;;; WGR ptr to sublist			;AN0
				00
 0382  E8 0E80 R			CALL  SYSDISPMSG			;AN000;;; WGR					;AN0
				00
 0385  C6 06 000A R 01			MOV   ID_DISPLAYED,1			;AN000;;; WGR ID was displayed. 		;AN0
				00
 038A  EB 13 90				JMP   KEYB_L_FINISHED			;AN000;;; WGR					;AN0
				00
								       ;;;;;;;;;;;
 038D				QUERY_CONTINUE1:		       ;;
 038D  B8 000A				MOV   AX,INV_KEYB_Q	       ;AC000;;; WGR						;AN0
				00
 0390  BB 0001				MOV   BX,STDOUT 	       ;AN000;;; WGR Else					;AN0
				00
 0393  33 C9				XOR   CX,CX		       ;AC000;;; WGR	Display message that KEYB		;AN0
				00
 0395  B6 FF				MOV   DH,UTILITY_MSG_CLASS     ;AN000;;; WGR	  has not been installed		;AN0
				00
 0397  32 D2				XOR   DL,DL		       ;AN000;;; WGR						;AN0
				00
 0399  E8 0E80 R			CALL  SYSDISPMSG	       ;AN000;;; WGR						;AN0
				00
 039C  EB 5C 90				JMP   KEYB_CP_FINISHED	       ;AC000;;;
								       ;;;;;;;;;;;
 039F				KEYB_L_FINISHED:				;;
 039F  26: 8B 5D 18			MOV   BX,ES:[DI].INVOKED_CP_TABLE	;; Get invoked code page
										;;
 03A3  89 1E 0021 R			MOV   NUMBER_HOLDER,BX			;AN000;;; WGR transfer number to temp loc.	;AN0
				00
 03A7  8D 36 0021 R			LEA   SI,NUMBER_HOLDER			;AN000;;; WGR sublist points to...		;AN0
				00
 03AB  89 36 000D R			MOV   PTR_TO_NUMBER,SI			;AN000;;; WGR code page word			;AN0
				00
 03AF  B8 0004				MOV   AX,ACT_KEYB_CP			;AC000;;; WGR display '  code page: '           ;AN0
				00
 03B2  BB 0001				MOV   BX,STDOUT 			;AN000;;; WGR to standard out			;AN0
				00
 03B5  B9 0001				MOV   CX,1				;AN000;;; WGR one replacement			;AN0
				00
 03B8  B6 FF				MOV   DH,UTILITY_MSG_CLASS		;AN000;;; WGR utility message			;AN0
				00
 03BA  32 D2				XOR   DL,DL				;AN000;;; WGR no input				;AN0
				00
 03BC  8D 36 000B R			LEA   SI,SUBLIST_NUMBER 		;AN000;;; WGR ptr to sublist			;AN0
				00
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-16
DOS - Message Retriever - MSGSTR.INC Module                 

 03C0  E8 0E80 R			CALL  SYSDISPMSG			;AN000;;; WGR					;AN0
				00
 03C3  80 3E 000A R 01			CMP   ID_DISPLAYED,1			;AN000;;; WGR was id displayed? 		;AN0
				00
 03C8  74 30				JE    KEYB_CP_FINISHED			;AN000;;; WGR yes..continue.			;AN0
				00
										;;
 03CA  26: 8B 5D 1A			MOV   BX,WORD PTR ES:[DI].INVOKED_KBD_ID;AN000;;; WGR get id code.			;AN0
				00
 03CE  83 FB 00				CMP   BX,0				;AN000;;; WGR no id given..			;AN0
				00
 03D1  74 27				JE    KEYB_CP_FINISHED			;AN000;;; WGR					;AN0
				00
										;;
 03D3  89 1E 0021 R			MOV   NUMBER_HOLDER,BX			;AN000;;; WGR transfer number to temp loc.	;AN0
				00
 03D7  8D 36 0021 R			LEA   SI,NUMBER_HOLDER			;AN000;;; WGR sublist points to...		;AN0
				00
 03DB  89 36 000D R			MOV   PTR_TO_NUMBER,SI			;AN000;;; WGR code page word			;AN0
				00
 03DF  B8 0003				MOV   AX,ACT_ID 			;AC000;;; WGR display 'Current ID:  '           ;AN0
				00
 03E2  BB 0001				MOV   BX,STDOUT 			;AN000;;; WGR to standard out			;AN0
				00
 03E5  B9 0001				MOV   CX,1				;AN000;;; WGR one replacement			;AN0
				00
 03E8  B6 FF				MOV   DH,UTILITY_MSG_CLASS		;AN000;;; WGR utility message			;AN0
				00
 03EA  32 D2				XOR   DL,DL				;AN000;;; WGR no input				;AN0
				00
 03EC  8D 36 000B R			LEA   SI,SUBLIST_NUMBER 		;AN000;;; WGR ptr to sublist			;AN0
				00
 03F0  E8 0E80 R			CALL  SYSDISPMSG			;AN000;;; WGR					;AN0
				00
 03F3  B4 09				MOV   AH,09H				;AC000;;; WGR need a CR_LF here.		;AN0
				00
 03F5  BA 0001 R			MOV   DX,OFFSET CR_LF			;AC000;;; WGR					;AN0
				00
 03F8  CD 21				INT   21H				;; WGR					 ;AN000
								       ;;;;;;;;;;;
 03FA				KEYB_CP_FINISHED:		       ;;
 03FA  A1 020E R			MOV   AX,CON_INSTALLED	       ;;  If CON has been installed THEN
 03FD  3D 0000				CMP   AX,0		       ;;
 0400  75 03				JNE   GET_ACTIVE_CP	       ;;
 0402  EB 2E 90				JMP   CON_NOT_INSTALLED        ;;
								       ;;
 0405				GET_ACTIVE_CP:			       ;;
 0405  B8 AD02				MOV   AX,0AD02H 	       ;;  Get active code page
 0408  CD 2F				INT   2FH		       ;;	  information from the console
 040A  73 03				JNC   DISPLAY_ACTIVE_CP        ;;
 040C  E9 087B R			JMP   ERROR5		       ;;
								       ;;
 040F				DISPLAY_ACTIVE_CP:		       ;;
 040F  89 1E 0021 R			MOV   NUMBER_HOLDER,BX	       ;AC000;;; WGR transfer number to temp loc.		;AN0
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-17
DOS - Message Retriever - MSGSTR.INC Module                 

				00
 0413  8D 36 0021 R			LEA   SI,NUMBER_HOLDER	       ;AC000;;; WGR sublist points to...			;AN0
				00
 0417  89 36 000D R			MOV   PTR_TO_NUMBER,SI	       ;AC000;;; WGR code page word				;AN0
				00
 041B  B8 0005				MOV   AX,ACT_CON_CP	       ;AN000;;; WGR display 'Current CON code page: '          ;AN0
				00
 041E  BB 0001				MOV   BX,STDOUT 	       ;AN000;;; WGR to standard out				;AN0
				00
 0421  B9 0001				MOV   CX,1		       ;AN000;;; WGR one replacement				;AN0
				00
 0424  B6 FF				MOV   DH,UTILITY_MSG_CLASS     ;AN000;;; WGR utility message				;AN0
				00
 0426  32 D2				XOR   DL,DL		       ;AN000;;; WGR no input					;AN0
				00
 0428  8D 36 000B R			LEA   SI,SUBLIST_NUMBER        ;AN000;;; WGR ptr to sublist				;AN0
				00
 042C  E8 0E80 R			CALL  SYSDISPMSG	       ;AN000;;; WGR						;AN0
				00
								       ;;
 042F  E9 08E5 R			JMP   KEYB_EXIT_NOT_RESIDENT   ;;  Exit from Proc
								       ;;
 0432				CON_NOT_INSTALLED:		       ;; ELSE
 0432  B8 000B				MOV   AX,INV_CON_Q	       ;AC000;WGR					     ;AN000
 0435  BB 0001				MOV   BX,STDOUT 	       ;AN000;;; WGR Else					;AN0
				00
 0438  33 C9				XOR   CX,CX		       ;AN000;;; WGR	Display message that CON does		;AN0
				00
 043A  B6 FF				MOV   DH,UTILITY_MSG_CLASS     ;AN000;;; WGR	  not have active code page		;AN0
				00
 043C  32 D2				XOR   DL,DL		       ;AN000;;; WGR						;AN0
				00
 043E  E8 0E80 R			CALL  SYSDISPMSG	       ;AN000;;; WGR						;AN0
				00
 0441  E9 08E5 R			JMP   KEYB_EXIT_NOT_RESIDENT   ;; Exit from Proc
								       ;;
 0444				NOT_QUERY:			       ;; IF not a query function requested
 0444  E8 0B28 R			CALL  BUILD_PATH	       ;; Determine location of KEYBOARD.SYS
								       ;; WGR ...and open file. 			 ;AC000
								       ;;
 0447  73 03				JNC   VALID4		       ;; If no error in opening file then
 0449  E9 0864 R			JMP   ERROR4		       ;;
								       ;;
 044C				VALID4: 			       ;;
 044C  A3 01E6 R			MOV   KEYBSYS_FILE_HANDLE,AX   ;; Save handle
 044F  BD 0219 R			MOV   BP,OFFSET CMD_PARM_LIST  ;; Set base pointer for structures
 0452  8B 1E 01E6 R			MOV   BX,KEYBSYS_FILE_HANDLE   ;; Retrieve the file handle
 0456  BA 006E R			MOV   DX,OFFSET FILE_BUFFER    ;; Set address of buffer
				;************************* CNS ********;;
 0459  80 7E 03 00			cmp   [BP].RET_CODE_4,ID_VALID ;AN000;	 ;; CNS is there an ID available
 045D  74 03				je    ID_TYPED		       ;AN000;	 ;; if so go find out if it is
 045F  EB 18 90				jmp   GET_LANG		       ;AN000;	 ;; a 1st or 4th parm, if not must
								       ;AN000;	 ;; must be a language
 0462				ID_TYPED:			       ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-18
DOS - Message Retriever - MSGSTR.INC Module                 

				
 0462  E8 0A10 R			call  SCAN_ID		       ;AN000;	 ;; scan the table for the ID
 0465  80 3E 0007 R 01			cmp   ID_FOUND,1	       ;AN000;	 ;; if a legal ID check and see if
 046A  75 0A				jne   LOST_ID		       ;AN000;	 ;; it is a first or fourth parm
 046C  80 3E 0006 R 01			cmp   FTH_PARMID,1	       ;AN000;	 ;; if it is a fourth parm go
 0471  74 5F				je    GET_ID		       ;AN000;	 ;; check for language compatibility
 0473  EB 6A 90				jmp   Language_found	       ;AN000;	 ;; otherwise it must be a first
									  ;; parm id value
				
 0476				LOST_ID:			       ;AN000;	 ;; otherwise must be a bogus match
									  ;; between language and ID codes
									  ;; or the ID code does not exist
 0476  E9 07BF R			jmp   ERR1ID		       ;AN000;	 ;; in the table
				;************************* CNS ***********;;
 0479				GET_LANG:				  ;; Must be a language/or a 1st parm ID
								       ;;;;;
								       ;;
 0479  33 FF				XOR   DI,DI		       ;; Set number
 047B  8D 4D 1C				LEA   CX,[DI].KH_NUM_LANG+2    ;;	 bytes to read header
								       ;;
 047E  B4 3F				MOV   AH,3FH		       ;; Read header of the Keyb Def file
 0480  CD 21				INT   21H		       ;;
 0482  73 03				JNC   VALID5		       ;; If no error in opening file then
 0484  E9 0864 R			JMP   ERROR4		       ;;
								       ;;;;
 0487				VALID5: 				 ;;
 0487  FC				CLD				 ;; WGR all moves/scans forward 		 ;AN000
 0488  8B 0E 01F9 R			MOV   CX,SIGNATURE_LENGTH	 ;;
 048C  BF 01F1 R			MOV   DI,OFFSET SIGNATURE	 ;; Verify matching
 048F  BE 006E R			MOV   SI,OFFSET FB.KH_SIGNATURE  ;;	     signatures
 0492  F3/ A6				REPE  CMPSB			 ;;
 0494  74 03				JE    LANGUAGE_SPECIFIED	 ;;
 0496  E9 0864 R			JMP   ERROR4		       ;;;;
								       ;; READ the language table
 0499				LANGUAGE_SPECIFIED:		       ;;
 0499  A1 0088 R			MOV   AX,FB.KH_NUM_LANG        ;;
 049C  A3 01FE R			MOV   NUM_LANG,AX	       ;; Save the number of languages
 049F  F7 26 0204 R			MUL   LANG_PTR_SIZE	       ;; Determine # of bytes to read
 04A3  BA 006E R			MOV   DX,OFFSET FILE_BUFFER    ;; Establish beginning of buffer
 04A6  8B C8				MOV   CX,AX		       ;;
 04A8  81 F9 012C			CMP   CX,FILE_BUFFER_SIZE      ;; Make sure buffer is not to small
 04AC  76 03				JBE   READ_LANG_TAB	       ;;
 04AE  E9 0864 R			JMP   ERROR4		       ;;
								       ;;
 04B1				READ_LANG_TAB:			       ;;
 04B1  B4 3F				MOV   AH,3FH		       ;; Read language table from
 04B3  CD 21				INT   21H		       ;;	       Keyb Def file
 04B5  73 03				JNC   READ_VALID	       ;; If no error in opening file then
 04B7  E9 0864 R			JMP   ERROR4		       ;; Else display ERROR message
								       ;;
 04BA				READ_VALID:			       ;;
 04BA  8B 0E 01FE R			MOV   CX,NUM_LANG	       ;;    Number of valid codes
 04BE  BF 006E R			MOV   DI,OFFSET FILE_BUFFER    ;;    Point to correct word in table
								       ;;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-19
DOS - Message Retriever - MSGSTR.INC Module                 

 04C1				SCAN_LANG_TABLE:		       ;; FOR language parm
 04C1  8B 46 04				MOV   AX,[BP].LANGUAGe_PARM    ;;    Get parameter
 04C4  39 05				CMP   [DI].KP_LANG_CODE,AX     ;;    Valid Code ??
 04C6  74 17				JE    LANGUAGE_FOUND	       ;; If not found AND more entries THEN
 04C8  03 3E 0204 R			ADD   DI,LANG_PTR_SIZE	       ;;    Check next entry
 04CC  49				DEC   CX		       ;;    Decrement count of entries
 04CD  75 F2				JNE   SCAN_LANG_TABLE	       ;; Else
 04CF  E9 07ED R			JMP   ERROR1		       ;;    Display error message
									;;;;;;;;;;;;;;
				;**************************** CNS ****;;;;
 04D2				GET_ID: 				;AN000;;; CNS - Must be an ID value
 04D2  B9 0001				mov	cx,1			;AN000;;; initialize ctr value for # of ids
									;;
 04D5				SEARCH_ID:				;AN000;;; minimum per country
				;.WHILE  <cx ne 0>			;AN000;;; There is atleast 1 ID for each country
 04D5  83 F9 00				cmp	cx,0			;AN000;;; Check for any more IDs left to check
 04D8  75 03				jne	FINDID			;AN000;;; Country has more than one ID check
 04DA  E9 0563 R			jmp	END_IDCHK		;AN000;;; Country & ID has been found or value
									;; is zero
 04DD				FINDID: 				;AN000;
				
 04DD  57				push	di			;AN000;;; save the current language entry ptr
 04DE  51				push	cx			;AN000;;; save the minimum # of ids before
									;; reading the table data from the disk
				;**************************** CNS *****************;;
 04DF				LANGUAGE_FOUND: 				   ;;
 04DF  8B 4D 04				MOV   CX,WORD PTR [DI].KP_ENTRY_PTR+2	   ;; Get offset of lang entry
 04E2  8B 55 02				MOV   DX,WORD PTR [DI].KP_ENTRY_PTR	   ;;	in the Keyb Def file
 04E5  89 16 0208 R			MOV   WORD PTR KEYBCMD_LANG_ENTRY_PTR,DX   ;; Save
 04E9  89 0E 020A R			MOV   WORD PTR KEYBCMD_LANG_ENTRY_PTR+2,CX ;;	offset
 04ED  B4 42				MOV   AH,42H				   ;; Move file pointer to
 04EF  B0 00				MOV   AL,0			      ;;;;;;;	location of language
 04F1  CD 21				INT   21H			      ;;	    entry
 04F3  73 03				JNC   LSEEK_VALID		      ;;
 04F5  E9 0864 R			JMP   ERROR4			      ;;
									      ;;
 04F8				LSEEK_VALID:				      ;;
 04F8  8B F8				MOV   DI,AX			      ;;
 04FA  B9 000A				MOV   CX,SIZE KEYBSYS_LANG_ENTRY-1    ;; Set number
									      ;;	bytes to read header
 04FD  BA 006E R			MOV   DX,OFFSET FILE_BUFFER    ;;;;;;;;;
 0500  B4 3F				MOV   AH,3FH		       ;; Read language entry in
 0502  CD 21				INT   21H		       ;;	 Keyb Def file
 0504  73 03				JNC   VALID6a		       ;; If no error in file then
 0506  E9 0864 R			JMP   ERROR4		       ;;;;;;;;;;
				;**************************** CNS **********************************************
				
				
 0509				valid6a:
 0509  80 3E 0004 R 01			cmp   FOURTH_PARM,1		;AN000;;; Is the ID a 4th Parm
 050E  75 6B				jne   VALID6			;AN000;;; if not get out of routine, otherwise
 0510  59				pop	cx			;AN000;;;restore # of ids for the country
				      ; .IF <cx eq 1>			;AN000;;;Check to see if this is the first
									;AN000;;;time checking the primary ID
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-20
DOS - Message Retriever - MSGSTR.INC Module                 

 0511  83 F9 01				cmp	cx,1			;AN000;;;if there is just one ID check to make
 0514  75 29				jne	CHK4PARM		;AN000;;;sure both flags are not set
									;AN000;;; this should not be necessary w/ new parser
 0516  80 3E 0006 R 01			cmp	 FTH_PARMID,1		;AN000;;; is the ID flag for switch set
 051B  75 10				jne	 CHK1N4 		;AN000;;; is the flag set only for the 4th
 051D  80 3E 0004 R 01			cmp	 FOURTH_PARM,1		;AN000;;; if set only for the switch proceed
 0522  75 09				jne	 CHK1N4 		;AN000;;; if not must be a positional
 0524  8A 0E 0076 R			mov	 cl,fb.kl_num_id	;AN000;;; get the number of IDs available from the table
 0528  C6 06 0006 R 00			mov	 FTH_PARMID,0		;AN000;;; turn switch flag off so the table
									;AN000;;; counter will not be reset
				
										   ;;ids available for the
 052D				CHK1N4: 				;AN000; 	  ;;country
 052D  80 3E 0005 R 01			cmp ONE_PARMID,1		;AN000; 	  ;; this was to be done if
 0532  75 0B				jne CHK4PARM			;AN000; 	  ;; two the positional
 0534  80 3E 0004 R 00			cmp FOURTH_PARM,0		;AN000; 	  ;; and switch was specified
 0539  75 04				jne CHK4PARM			;AN000; 	  ;; this should never happen
 053B  5F				pop di				;AN000; 	  ;; if the parser is intact
 053C  E9 081B R			jmp error3			;AN000; 	  ;; report error & exit
				
 053F				CHK4PARM:				;AN000; 	   ;; check on the first ID
				      ; .IF <FOURTH_PARM EQ 1>		;AN000; 	   ;;switch specified
				      ;     call IDLANG_CHK		;AN000; 	   ;;check the lang-id combo
				      ; .ELSE				;AN000;
				      ;     xor  cx,cx			;AN000; 	   ;;clear to exit loop
				      ; .ENDIF				;AN000;
				      ;
 053F  80 3E 0004 R 01			   cmp FOURTH_PARM,1		;AN000; 	   ;; ID was a switch
 0544  75 06				   jne ABORT_LOOP		;AN000; 	   ;; otherwise get out of routine
 0546  E8 09EF R			   call IDLANG_CHK		;AN000; 	   ;; check the ID
 0549  EB 03 90				   jmp ADVANCE_PTR		;AN000; 	   ;; advance to the next position
				
 054C				ABORT_LOOP:				;AN000;
 054C  33 C9				   xor	 cx,cx			;AN000; 	   ;; end loop
				
 054E				ADVANCE_PTR:				;AN000;
 054E  5F				   pop di			;AN000; 	   ;;restore entry value
				
 054F  49				   dec cx			;AN000; 	   ;;# of ids left to check
 0550  83 F9 00				   cmp cx,0			;AN000; 	   ;; if at 0 don't advance to next
 0553  74 0B				   je NO_ADVANCE		;AN000; 	   ;; table position
 0555  83 3E 0214 R 01			   cmp GOOD_MATCH,1		;AN000; 	   ;; check to see if ID matched language
 055A  74 04				   je NO_ADVANCE		;AN000; 	   ;; if equal do not advance
 055C  03 3E 0204 R			   add di,LANG_PTR_SIZE 	;AN000; 	   ;;step to the next entry
										    ;;in the table
				
 0560				NO_ADVANCE:				;AN000;
				
 0560  E9 04D5 R			   jmp SEARCH_ID		;AN000; 	   ;;for the country
				
				;.ENDWHILE					     ;;end of ID check for country
				
 0563				END_IDCHK:				;AN000;
				
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-21
DOS - Message Retriever - MSGSTR.INC Module                 

 0563  80 3E 0004 R 01			   cmp	  FOURTH_PARM,1 	;AN000; 	    ;; see if id was found
 0568  75 11				   jne	  VALID6		;AN000;
 056A  83 3E 0214 R 00			   cmp	  GOOD_MATCH,0		;AN000; 	    ;; none found
 056F  75 0A				   jne	  VALID6		;AN000; 	    ;; report error
 0571  C6 46 03 01			   mov	  [bp].ret_code_4,1	;AN000; 	    ;; incompatible lang code
 0575  8A 46 03				   mov	  al,[bp].ret_code_4	;AN000; 	    ;; id combo
 0578  E9 07D6 R			   jmp	  err2id		;AN000;
				
										    ;; otherwise found it
										    ;; continue to build tbl
				;**************************** CNS **********************************************
									       ;;
 057B				VALID6: 				       ;;
 057B  A1 0072 R			MOV   AX,WORD PTR FB.KL_LOGIC_PTR      ;; Save the offset of the state
 057E  A3 01E2 R			MOV   WORD PTR STATE_LOGIC_OFFSET,AX   ;;      logic section
 0581  A1 0074 R			MOV   AX,WORD PTR FB.KL_LOGIC_PTR+2    ;; Save the offset of the state
 0584  A3 01E4 R			MOV   WORD PTR STATE_LOGIC_OFFSET+2,AX ;;      logic section
									       ;;
 0587  8A 56 01				MOV   DL,[BP].RET_CODE_2       ;;;;;;;;;; IF code page was specified
 058A  80 FA 02				CMP   DL,2		       ;;
 058D  75 03				JNE   CODE_PAGE_SPECIFIED      ;;
 058F  EB 48 90				JMP   DONE		       ;;
								       ;;
 0592				CODE_PAGE_SPECIFIED:		       ;;  Then
				;************************** CNS ***********************************************
 0592  32 E4				xor   ah,ah		       ;AN000;
 0594  A0 0077 R			MOV   Al,FB.KL_NUM_CP	       ;AN000;;;
				;************************** CNS ***********************************************
 0597  A3 0200 R			MOV   NUM_CP,AX 	       ;; Save the number of code pages
 059A  F7 26 0206 R			MUL   CP_PTR_SIZE	       ;; Determine # of bytes to read
 059E  BA 006E R			MOV   DX,OFFSET FILE_BUFFER    ;; Establish beginning of buffer
 05A1  8B C8				MOV   CX,AX		       ;;
 05A3  81 F9 012C			CMP   CX,FILE_BUFFER_SIZE      ;; Make sure buffer is not to small
 05A7  76 03				JBE   VALID7		       ;;
 05A9  E9 0864 R			JMP   ERROR4		       ;;
								       ;;
 05AC				VALID7: 			       ;;
 05AC  B4 3F				MOV   AH,3FH		       ;; Read code page table from
 05AE  CD 21				INT   21H		       ;;	       Keyb Def file
 05B0  73 03				JNC   VALID8		       ;; If no error in opening file then
 05B2  E9 0864 R			JMP   ERROR4		       ;;
								       ;;
 05B5				VALID8: 			       ;;
 05B5  8B 0E 0200 R			MOV   CX,NUM_CP 	       ;;    Number of valid codes
 05B9  BF 006E R			MOV   DI,OFFSET FILE_BUFFER    ;;    Point to correct word in table
								       ;;
 05BC				SCAN_CP_TABLE:			       ;; FOR code page parm
 05BC  8B 46 06				MOV   AX,[BP].CODE_PAGE_PARM   ;;    Get parameter
 05BF  39 05				CMP   [DI].KC_CODE_PAGE,AX     ;;    Valid Code ??
 05C1  74 0A				JE    CODE_PAGE_FOUND	       ;; If not found AND more entries THEN
 05C3  03 3E 0206 R			ADD   DI,CP_PTR_SIZE	       ;;    Check next entry
 05C7  49				DEC   CX		       ;;    Decrement count of entries
 05C8  75 F2				JNE   SCAN_CP_TABLE	       ;; Else
 05CA  E9 0804 R			JMP   ERROR2		       ;;    Display error message
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-22
DOS - Message Retriever - MSGSTR.INC Module                 

								       ;;;;;;;;;
 05CD				CODE_PAGE_FOUND:			      ;;
 05CD  8B 45 02				MOV   AX,WORD PTR [DI].KC_ENTRY_PTR   ;;
 05D0  A3 01D6 R			MOV   WORD PTR CP_TAB_OFFSET,AX       ;;
 05D3  8B 45 04				MOV   AX,WORD PTR [DI].KC_ENTRY_PTR+2 ;;
 05D6  A3 01D8 R			MOV   WORD PTR CP_TAB_OFFSET+2,AX     ;;
									  ;;;;;;
 05D9				DONE:					  ;;
 05D9  BE 019A R			MOV   SI,OFFSET DESIG_CP_BUFFER   ;;
									  ;;
 05DC  A1 020E R			MOV   AX,CON_INSTALLED	       ;;;;;  If CON is NOT installed THEN
 05DF  3D 0000				CMP   AX,0		       ;;
 05E2  74 03				JE    SYSTEM_CP 	       ;;
 05E4  EB 33 90				JMP   GET_DESIG_CPS	       ;;
								       ;;
 05E7				SYSTEM_CP:			       ;;
 05E7  B9 0001				MOV   CX,1		       ;;
 05EA  89 0E 01D4 R			MOV   NUM_DESIG_CP,CX	       ;;    Set number of CPs = 1
 05EE  89 0C				MOV   [SI].NUM_DESIGNATES,CX   ;;
								       ;;
 05F0  8A 56 01				MOV   DL,[BP].RET_CODE_2       ;;    Check if code page parm
 05F3  80 FA 00				CMP   DL,0		       ;;			was specified
 05F6  75 09				JNE   SET_TO_SYSTEM_CP	       ;;
 05F8  8B 56 06				MOV   DX,[BP].CODE_PAGE_PARM   ;;
 05FB  89 54 06				MOV   [SI].DESIG_CP_ENTRY,DX   ;;    Load specified code page into
 05FE  E9 06A0 R			JMP   READY_TO_BUILD_TABLE     ;;      designated code page list
								       ;;
 0601				SET_TO_SYSTEM_CP:		       ;;
 0601  E8 0BD3 R			CALL  FIND_FIRST_CP	       ;;   Call routine that sets the first
 0604  3D 0000				CMP   AX,0		       ;;     table found in the Keyb Def file
 0607  74 03				JE    SET_TO_SYSTEM_CP2        ;;	to the system code page
 0609  E9 0864 R			JMP   ERROR4		       ;;
								       ;;
 060C				SET_TO_SYSTEM_CP2:		       ;;
 060C  89 1E 01EC R			MOV   SYS_CODE_PAGE,BX	       ;;
 0610  89 5E 06				MOV   [BP].CODE_PAGE_PARM,BX   ;;
 0613  89 5C 06				MOV   [SI].DESIG_CP_ENTRY,BX   ;;    Move sys CP into desig list
 0616  E9 06A0 R			JMP   READY_TO_BUILD_TABLE     ;;
								       ;;
 0619				GET_DESIG_CPS:			       ;;  ELSE
 0619  B8 AD03				MOV   AX,0AD03H 	       ;;
 061C  0E				PUSH  CS		       ;;    Make sure ES is set
 061D  07				POP   ES		       ;;
 061E  8D 3E 019A R			LEA   DI,DESIG_CP_BUFFER       ;;
 0622  8B 0E 01D2 R			MOV   CX,DESIG_CP_BUF_LEN      ;;
 0626  CD 2F				INT   2FH		       ;;     Get all designated code pages
 0628  73 03				JNC   SET_DESIG_VARIABLES      ;;	from console
 062A  E9 087B R			JMP   ERROR5		       ;;
								       ;;
 062D				SET_DESIG_VARIABLES:		       ;;
 062D  8B 0C				MOV   CX,[SI].NUM_DESIGNATES   ;;
 062F  03 4C 04				ADD   CX,[SI].NUM_HW_CPS       ;;
 0632  89 0E 01D4 R			MOV   NUM_DESIG_CP,CX	       ;;     Set number of Designated CPs
								       ;;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-23
DOS - Message Retriever - MSGSTR.INC Module                 

 0636				BUFFER_CREATED: 		       ;;
 0636  B8 AD02				MOV   AX,0AD02H 	       ;;
 0639  CD 2F				INT   2FH		       ;;     Get invoked code page
								       ;;
 063B				SET_TO_CP_INVOKED:		       ;;
 063B  8A 56 01				MOV   DL,[BP].RET_CODE_2       ;; IF code page parm was specified
 063E  80 FA 00				CMP   DL,0		       ;;
 0641  75 0B				JNE   SET_TO_INVOKED_CP        ;;
 0643  8B 0E 01D4 R			MOV   CX,NUM_DESIG_CP	       ;;
 0647  89 36 01EE R			MOV   DESIG_LIST,SI	       ;;
 064B  EB 1E 90				JMP   TEST_IF_DESIGNATED       ;;
								       ;;
 064E				SET_TO_INVOKED_CP:		       ;;
 064E  3D 0001				CMP   AX,1		       ;;    IF a code page has been invoked
 0651  75 15				JNE   SET_TO_INVOKED_CP3       ;;
 0653  E8 0BD3 R			CALL  FIND_FIRST_CP	       ;;    Call the routine that sets the
 0656  3D 0000				CMP   AX,0		       ;;     first code page in the Keyb Def
 0659  74 03				JE    SET_TO_INVOKED_CP2       ;;      file to the system code page
 065B  E9 0864 R			JMP   ERROR4		       ;;
								       ;;
 065E				SET_TO_INVOKED_CP2:		       ;;
 065E  89 5E 06				MOV   [BP].CODE_PAGE_PARM,BX   ;;
 0661  89 1E 01EC R			MOV   SYS_CODE_PAGE,BX	       ;;
								       ;;
 0665  EB 04 90				JMP   TEST_IF_DESIGNATED       ;;
								       ;;
 0668				SET_TO_INVOKED_CP3:		       ;;
 0668  89 5E 06				MOV   [BP].CODE_PAGE_PARM,BX   ;;
								       ;;
 066B				TEST_IF_DESIGNATED:		       ;;
 066B  8B 56 06				MOV   DX,[BP].CODE_PAGE_PARM   ;;
 066E  39 54 06				CMP   [SI].DESIG_CP_ENTRY,DX   ;;  Is Code page specified in the list
 0671  74 09				JE    CODE_PAGE_DESIGNATED     ;;    of designated code pages ?
								       ;;
 0673				NEXT_DESIG_CP:			       ;;
 0673  83 C6 02				ADD   SI,2		       ;;  Check next code page
 0676  49				DEC   CX		       ;;  If all designated code pages have
 0677  75 F2				JNZ   TEST_IF_DESIGNATED       ;;    been checked Then ERROR
 0679  E9 08A9 R			JMP   ERROR6		       ;;
								       ;;
 067C				CODE_PAGE_DESIGNATED:		       ;;
 067C  83 3E 01EC R 00			CMP   SYS_CODE_PAGE,0	       ;;
 0681  75 1D				JNE   READY_TO_BUILD_TABLE     ;;
 0683  3D 0001				CMP   AX,1		       ;;   IF a code page has been invoked
 0686  74 18				JE    READY_TO_BUILD_TABLE     ;;
 0688  39 5E 06				CMP   [BP].CODE_PAGE_PARM,BX   ;;     IF Invoked CP <>	Specified CP
 068B  74 13				JE    READY_TO_BUILD_TABLE     ;;	 Issue warning
				;;***************************************************************************
 068D  53				PUSH  BX		       ;AN000;;; WGR						;AN0
				00
 068E  51				PUSH  CX		       ;AN000;;; WGR						;AN0
				00
 068F  B8 000F				MOV   AX,WARNING_1	       ;AN000;;; WGR						;AN0
				00
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-24
DOS - Message Retriever - MSGSTR.INC Module                 

 0692  BB 0001				MOV   BX,STDOUT 	       ;AN000;;; WGR						;AN0
				00
 0695  33 C9				XOR   CX,CX		       ;AN000;;; WGR						;AN0
				00
 0697  B6 FF				MOV   DH,UTILITY_MSG_CLASS     ;AN000;;; WGR						;AN0
				00
 0699  32 D2				XOR   DL,DL		       ;AN000;;; WGR						;AN0
				00
 069B  E8 0E80 R			CALL  SYSDISPMSG	       ;AN000;;; WGR						;AN0
				00
 069E  59				POP   CX		       ;AN000;;; WGR						;AN0
				00
 069F  5B				POP   BX		       ;AN000;;; WGR						;AN0
				00
				;;***************************************************************************
								       ;;
 06A0				READY_TO_BUILD_TABLE:		       ;;
								       ;;
 06A0  A1 020C R			MOV   AX,KEYB_INSTALLED        ;;
 06A3  3D 0000				CMP   AX,0		       ;; Else if KEYB has not been installed
 06A6  75 36				JNE   BUILD_THE_TABLE	       ;;
								       ;;
 06A8  E8 0000 E			CALL  FIND_SYS_TYPE	       ;; Determine system type for INT 9 use
								       ;;
 06AB  F7 06 000E E 0800		TEST  SD.SYSTEM_FLAG,PC_JR     ;; IS THIS ROM MULTILINGUAL? (JR.)  AAD
 06B1  74 25				JZ    CONTINUE_INSTALL		;  NO, LOAD THE NEW INT9 CODE
									; SEE IF MULTILINGUAL OPTION IS PRESENT
 06B3  B4 05				MOV	AH,5			; ADDRESS THE MULTILINGUAL SUPPORT
 06B5  B0 80				MOV	AL,80H			; REQUEST CURRENT LANGUAGE BE IDENTIFIED
 06B7  CD 16				INT	16H			; CALL KEYBOARD TO IDENTIFY ITSELF
				
				;IF THE MULTILINGUAL OPTION IS NOT PRESENT, THE ROM DOES NOT RECOGNIZE THE
				;OPTION 5 AND JUST RETURNS THE REGS INTACT.
				;RESPONSE IN AL INDICATES THE CURRENT LANGUAGE:
				
 06B9  3C 80				CMP	AL,80H			; DID I GET BACK JUST WHAT I SENT?
 06BB  74 1B				JE	CONTINUE_INSTALL	; SINCE RESPONSE WAS THE SAME MUST NOT BE
									; MULTILINGUAL, RELOCATE RESIDENT KBD ROUTINE
				
				;I AM GOING TO IGNORE WHAT LANGUAGE IS CURRENTLY SET.  I WILL SET THE
				;MULTILINGUAL KEYBOARD TO BECOME MY LANGUAGE.
				
 06BD  8B 46 04				MOV	AX,[BP].LANGUAGE_PARM	     ;;
 06C0  86 E0				XCHG	AH,AL			     ;;
 06C2  BF 0227 R			MOV	DI,OFFSET JR_LANGUAGE_CODES  ;;
 06C5  B9 0005				MOV	CX,JR_NUM_CODES 	     ;;
 06C8  0E				PUSH	CS			     ;;
 06C9  07				POP	ES			     ;;
 06CA  F2/ AF				REPNE	SCASW			     ;;
 06CC  75 0A				JNE	CONTINUE_INSTALL	     ;;
									     ;;
 06CE  B4 05				MOV	AH,5			; ADDRESS THE MULTILINGUAL KEYBOARD
 06D0  B0 05				MOV	AL,JR_NUM_CODES 	; SELECT MY LANGUAGE
 06D2  2A C1				SUB	AL,CL		       ;;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-25
DOS - Message Retriever - MSGSTR.INC Module                 

 06D4  CD 16				INT	16H			; SET THE KEYBOARD ACCORDINGLY
 06D6  CD 20				INT	20H			; JOB DONE, ROM IS MULTILINGUAL
									; NO NEED TO STAY RESIDENT
								       ;;
				;------ LOAD IN SPECIAL INT 9 HANDLER AND SPECIAL TABLES (IF NEEDED)
				
 06D8				CONTINUE_INSTALL:		       ;;
 06D8  E8 094E R			CALL  INSTALL_INT_9	       ;; Install INT 9
								       ;;
 06DB  E8 0000 E			CALL  FIND_KEYB_TYPE	       ;; Determine keyboard type table use
								       ;;
 06DE				BUILD_THE_TABLE:		       ;;
 06DE  E8 0000 E			CALL  TABLE_BUILD	       ;; Build the TEMP_SHARED_DATA_AREA
								       ;;
 06E1				CHECK_ERRORS:			       ;;
 06E1  33 C9				XOR   CX,CX		       ;; Take appropriate action considering
 06E3  8B 0E 01E8 R			MOV   CX,TB_RETURN_CODE        ;;	  return codes from TABLE_BUILD
 06E7  83 F9 00				CMP   CX,0		       ;;
 06EA  74 36				JE    CHECK_FOR_INV_CP	       ;; If return code is not 0
								       ;;
 06EC  A1 020C R			MOV   AX,KEYB_INSTALLED        ;;
 06EF  3D 0000				CMP   AX,0		       ;; If KEYB has not been installed
 06F2  75 03				JNE   CHECK_ERROR_CONTINUE     ;;
 06F4  E8 09D5 R			CALL  REMOVE_INT_9	       ;;     remove installed vector
								       ;;
 06F7				CHECK_ERROR_CONTINUE:		       ;;
 06F7  83 F9 01				CMP   CX,1		       ;; If return code = 1
 06FA  75 03				JNE   CHECK_ERROR2	       ;;
 06FC  E9 07ED R			JMP   ERROR1		       ;;     display error message
								       ;;
 06FF				CHECK_ERROR2:			       ;;
 06FF  83 F9 02				CMP   CX,2		       ;; If return code = 2
 0702  75 03				JNE   CHECK_ERROR3	       ;;
 0704  E9 0804 R			JMP   ERROR2		       ;;
								       ;;
 0707				CHECK_ERROR3:			       ;;
 0707  83 F9 03				CMP   CX,3		       ;; If return code = 3
 070A  75 03				JNE   CHECK_ERROR4	       ;;
 070C  E9 081B R			JMP   ERROR3		       ;;     display error message
								       ;;
 070F				CHECK_ERROR4:			       ;;
 070F  83 F9 04				CMP   CX,4		       ;; If return code = 4
 0712  75 03				JNE   CHECK_ERROR5A	       ;;
 0714  E9 0864 R			JMP   ERROR4		       ;;     display error message
								       ;;
 0717				CHECK_ERROR5A:			       ;;
 0717  83 F9 05				CMP   CX,5		       ;; If return code = 5
 071A  75 03				JNE   CHECK_ERROR6A	       ;;
 071C  E9 0892 R			JMP   ERROR5A		       ;;     display error message
								       ;;
 071F				CHECK_ERROR6A:			       ;;
 071F  E9 08C0 R			JMP   ERROR6A		       ;; If return code not 0,1,2,3,4 then
								       ;;      display error message
 0722				CHECK_FOR_INV_CP:		       ;;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-26
DOS - Message Retriever - MSGSTR.INC Module                 

 0722  8B 0E 0000 E			MOV   CX,CPN_INVALID	       ;; Check if any CPs were not loaded
 0726  83 F9 00				CMP   CX,0		       ;;
 0729  74 13				JE    TERMINATE 	       ;;   If some were invalid, issue
								       ;;	warning message
				;;***************************************************************************
 072B  53				PUSH  BX		       ;AN000;;; WGR						;AN0
				00
 072C  51				PUSH  CX		       ;AN000;;; WGR						;AN0
				00
 072D  B8 000D				MOV   AX,NOT_SUPP	       ;AN000;;; WGR						;AN0
				00
 0730  BB 0001				MOV   BX,STDOUT 	       ;AN000;;; WGR WARNING					;AN0
				00
 0733  33 C9				XOR   CX,CX		       ;AN000;;; WGR  MESSAGE					;AN0
				00
 0735  B6 FF				MOV   DH,UTILITY_MSG_CLASS     ;AN000;;; WGR						;AN0
				00
 0737  32 D2				XOR   DL,DL		       ;AN000;;; WGR						;AN0
				00
 0739  E8 0E80 R			CALL  SYSDISPMSG	       ;AN000;;; WGR						;AN0
				00
 073C  59				POP   CX		       ;AN000;;; WGR						;AN0
				00
 073D  5B				POP   BX		       ;AN000;;; WGR						;AN0
				00
				;;***************************************************************************
								       ;;
 073E				TERMINATE:			       ;;
 073E  B4 3E				MOV   AH,3EH		       ;;  Close the KEYBOARD.SYS file
 0740  8B 1E 01E6 R			MOV   BX,KEYBSYS_FILE_HANDLE   ;;  if open
 0744  83 FB 00				CMP   BX,0		       ;;
 0747  74 0D				JE    KEYB_EXIT 	       ;;
 0749  CD 21				INT   21H		       ;;
								       ;;
 074B  A1 020C R			MOV   AX,KEYB_INSTALLED        ;;
 074E  3D 0000				CMP   AX,0		       ;;
 0751  74 03				JE    KEYB_EXIT 	       ;;
 0753  E9 08E5 R			JMP   KEYB_EXIT_NOT_RESIDENT   ;;
								       ;;
 0756				KEYB_EXIT:			       ;;
 0756  F7 06 000C E 1000		TEST  SD.KEYB_TYPE,G_KB        ;; Q..FERRARI G??
 075C  74 1A				JZ    NO_FERRARI_G	       ;; N..LEAVE NUMLK ALONE
 075E  F7 06 000E E 1000		TEST  SD.SYSTEM_FLAG,PC_XT     ;;   Q..PC/XT?
 0764  75 12				JNZ   NO_FERRARI_G	       ;;   Y..LEAVE NUMLK ALONE
 0766  F7 06 000C E 0800		TEST  SD.KEYB_TYPE,P_KB        ;;      Q..FERRARI P??		***RPS
 076C  75 0A				JNZ   NO_FERRARI_G	       ;;      Y..LEAVE NUMLK ALONE	***RPS
				;***CNS
 076E  80 3E 0000 E 01			CMP   SECURE_FL,1	       ;AN002;; IF SECURITY FLAG SET
 0773  75 03				JNE   NO_FERRARI_G	       ;AN002;; DON'T TURN ON NUM_LK
				
				;***CNS
 0775  E8 0938 R			CALL  NUMLK_ON		       ;;      N..TURN NUMLK ON
								       ;;
 0778				NO_FERRARI_G:			       ;;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-27
DOS - Message Retriever - MSGSTR.INC Module                 

 0778  F7 06 000E E 8000		TEST  SD.SYSTEM_FLAG,EXT_16    ;; extended INT 16 support?
 077E  74 0C				JZ    SKIP_CTRL_COPY	       ;;
								       ;; Yes, load extened CTRL case table
 0780  B9 0058				MOV	CX,L_CTRL_TAB	       ;; CX = LENGTH OF EXTENDED TABLE
 0783  BE 0231 R			MOV	SI,OFFSET CS:RPL_K8    ;; POINT TO EXT. CTRL TABLES
 0786  BF 0000 E			MOV	DI,OFFSET CS:K8        ;; POINT TO REGULAR CTRL TABLE
 0789  FC				CLD			       ;;
 078A  F3/ A4				REP	MOVSB		       ;; OVERLAY WITH EXT. CTRL TABLE
								       ;;
 078C				SKIP_CTRL_COPY: 		       ;;
 078C  E8 0972 R			CALL  INSTALL_INT_9_NET        ;; Let the network know about INT 9
								       ;;     (if the network is installed)
 078F  E8 098A R			CALL  INSTALL_INT_2F_48        ;; Install INT 2F and INT 48 (If PCjr)
								       ;;
 0792  B8 AD82				MOV   AX,0AD82H 	       ;; Activate language
 0795  B3 FF				MOV   BL,-1		       ;;
 0797  CD 2F				INT   2FH		       ;;
								       ;;
 0799  26: 8B 16 1854 R			MOV   DX,ES:TSD.RESIDENT_END   ;; Get resident end
 079E  B1 04				MOV   CL,4		       ;; Convert into paragrahs
 07A0  D3 EA				SHR   DX,CL		       ;;
 07A2  42				INC   DX		       ;;
 07A3  B4 31				MOV   AH,31H		       ;; Function call to terminate but stay
 07A5  32 C0				XOR   AL,AL		       ;;   resident
								       ;;
 07A7  BF 0000 E			MOV   DI,OFFSET SD_DEST_PTR    ;; Initialize destination ptr
 07AA  BE 1834 R			MOV   SI,OFFSET SD_SOURCE_PTR  ;; Initialize source ptr
 07AD  33 ED				XOR   BP,BP		       ;;
 07AF  8D 5E 16				LEA   BX,[BP].ACTIVE_LANGUAGE  ;;
 07B2  03 FB				ADD   DI,BX		       ;; Adjust for portion not copied
 07B4  03 F3				ADD   SI,BX		       ;; Adjust for portion not copied
								       ;;
 07B6  8B 0E 0000 E			MOV   CX,SD_LENGTH	       ;; Set length of SHARED_DATA_AREA
 07BA  2B CB				SUB   CX,BX		       ;; Adjust for portion not copied
								       ;;
 07BC  E9 0000 E			JMP   COPY_SD_AREA	       ;; Jump to proc that copies area in new
								       ;;	part of memory
				;***************************** CNS *********************************************
 07BF				ERR1ID: 			       ;AN000;
				;;***************************************************************************
 07BF  B8 0007				MOV   AX,INV_I		       ;AN000;;; WGR invalid ID message 			;AN0
				00
 07C2  BB 0001				MOV   BX,STDOUT 	       ;AN000;;; WGR to standard out				;AN0
				00
 07C5  33 C9				XOR   CX,CX		       ;AN000;;; WGR no substitutions				;AN0
				00
 07C7  B6 FF				MOV   DH,UTILITY_MSG_CLASS     ;AN000;;; WGR utility message				;AN0
				00
 07C9  32 D2				XOR   DL,DL		       ;AN000;;; WGR no input					;AN0
				00
 07CB  E8 0E80 R			CALL  SYSDISPMSG	       ;AN000;;; WGR display message				;AN0
				00
 07CE  B0 01				MOV   AL,INVALID_PARMS	       ;AN000;;;				   |
 07D0  A2 0000 R			MOV   EXIT_RET_CODE,AL	       ;AN000;;;				   |
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-28
DOS - Message Retriever - MSGSTR.INC Module                 

				;;***************************************************************************
 07D3  E9 08E5 R			JMP   KEYB_EXIT_NOT_RESIDENT   ;;
 07D6				ERR2ID:
				;;***************************************************************************
 07D6  B8 0010				MOV   AX,INV_COMBO	       ;AN000;;; WGR invalid combination message		;AN0
				00
 07D9  BB 0001				MOV   BX,STDOUT 	       ;AN000;;; WGR to standard out				;AN0
				00
 07DC  33 C9				XOR   CX,CX		       ;AN000;;; WGR no substitutions				;AN0
				00
 07DE  B6 FF				MOV   DH,UTILITY_MSG_CLASS     ;AN000;;; WGR utility message				;AN0
				00
 07E0  32 D2				XOR   DL,DL		       ;AN000;;; WGR no input					;AN0
				00
 07E2  E8 0E80 R			CALL  SYSDISPMSG	       ;AN000;;; WGR display message				;AN0
				00
 07E5  B0 01				MOV   AL,INVALID_PARMS	       ;AN000;;;				   |
 07E7  A2 0000 R			MOV   EXIT_RET_CODE,AL	       ;AN000;;;				   |
				;;***************************************************************************
 07EA  E9 08E5 R			JMP   KEYB_EXIT_NOT_RESIDENT   ;;
				;***************************** CNS *********************************************
 07ED				ERROR1:
				;;***************************************************************************
 07ED  B8 0006				MOV   AX,INV_L		       ;AN000;;; WGR invalid language code			;AN0
				00
 07F0  BB 0001				MOV   BX,STDOUT 	       ;AN000;;; WGR to standard out				;AN0
				00
 07F3  33 C9				XOR   CX,CX		       ;AN000;;; WGR no substitutions				;AN0
				00
 07F5  B6 FF				MOV   DH,UTILITY_MSG_CLASS     ;AN000;;; WGR utility message				;AN0
				00
 07F7  32 D2				XOR   DL,DL		       ;AN000;;; WGR no input					;AN0
				00
 07F9  E8 0E80 R			CALL  SYSDISPMSG	       ;AN000;;; WGR display message				;AN0
				00
 07FC  B0 01				MOV   AL,INVALID_PARMS	       ;AN000;;;				   |
 07FE  A2 0000 R			MOV   EXIT_RET_CODE,AL	       ;AN000;;;				   |
				;;***************************************************************************
 0801  E9 08E5 R			JMP   KEYB_EXIT_NOT_RESIDENT   ;;
 0804				ERROR2:
				;;***************************************************************************
 0804  B8 0008				MOV   AX,INV_CP 	       ;AN000;;; WGR invalid code page message			;AN0
				00
 0807  BB 0001				MOV   BX,STDOUT 	       ;AN000;;; WGR to standard out				;AN0
				00
 080A  33 C9				XOR   CX,CX		       ;AN000;;; WGR no substitutions				;AN0
				00
 080C  B6 FF				MOV   DH,UTILITY_MSG_CLASS     ;AN000;;; WGR utility message				;AN0
				00
 080E  32 D2				XOR   DL,DL		       ;AN000;;; WGR no input					;AN0
				00
 0810  E8 0E80 R			CALL  SYSDISPMSG	       ;AN000;;; WGR display message				;AN0
				00
 0813  B0 01				MOV   AL,INVALID_PARMS	       ;AN000;;;				   |
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-29
DOS - Message Retriever - MSGSTR.INC Module                 

 0815  A2 0000 R			MOV   EXIT_RET_CODE,AL	       ;AN000;;;				   |
				;;***************************************************************************
 0818  E9 08E5 R			JMP   KEYB_EXIT_NOT_RESIDENT   ;;
 081B				ERROR3:
				;;***************************************************************************
 081B  B8 0012				MOV   AX,INV_S		       ;AN000;;; WGR invalid syntax message			;AN0
				00
 081E  BB 0001				MOV   BX,STDOUT 	       ;AN000;;; WGR to standard out				;AN0
				00
				;***CNS
				
 0821  8D 3E 002E R			LEA   DI,STRING_HOLDER	      ;AN003;Set PTR to look at the STRING
 0825  56				PUSH  SI		      ;AN003;Save current SI index
 0826  50				PUSH  AX
 0827  A1 0000 E			MOV   AX,OLD_PTR	      ;AN003;Last locale of the end of a PARAM
 082A  29 06 0000 E			SUB   CUR_PTR,AX		   ;AN003;Get the length via the PSP
 082E  8B 36 0000 E			MOV   SI,CUR_PTR
 0832  8B CE				MOV   CX,SI		      ;AN003;Save it in CX to move in the chars
 0834  58				POP   AX		      ;AN003;Restore the PTR to the command line position
				
 0835  8B 36 0000 E			MOV   SI,OLD_PTR	      ;AN003;Last locale of the end of a PARAM
 0839  F3/ A4				REP   MOVSB		      ;AN003;Move in the chars until no more
				
 083B  8D 3E 002E R			LEA   DI,STRING_HOLDER	      ;AN003;Set PTR to look at the STRING
				
				
 083F  5E				POP   SI		      ;AN003;Restore the PTR to the command line position
				
 0840  B9 0001				MOV   CX,1		       ;AN003;One replacement
 0843  89 3E 0025 R			MOV   PTR_TO_COMLIN,DI	       ;AN003;;; WGR language code asciiz string	    ;AN000
				
				
 0847  50				PUSH  AX		       ;AN003;
 0848  8C D8				MOV   AX,DS		       ;AN003;;; WGR language code asciiz string	    ;AN000
 084A  A3 0027 R			MOV   SEG_OF_COMLIN,AX	       ;AN003;
 084D  58				POP   AX		       ;AN003;
				       ;XOR   CX,CX		       ;AN000;;; WGR no substitutions				;AN0
				00
				
 084E  A1 0000 E			MOV   AX,ERR_PART	       ;AN003;
 0851  8D 36 0023 R			LEA   SI,SUBLIST_COMLIN        ;AN003;
				;	MOV   DH,UTILITY_MSG_CLASS     ;AN000;;; WGR parse error message			;AN0
				00
 0855  B6 02				MOV   DH,PARSE_ERR_CLASS      ;AN000;;; WGR parse error message 		       ;AN00
				0
 0857  32 D2				XOR   DL,DL		       ;AN000;;; WGR no input					;AN0
				00
 0859  E8 0E80 R			CALL  SYSDISPMSG	       ;AN000;;; WGR display message				;AN0
				00
 085C  B0 01				MOV   AL,INVALID_PARMS	       ;AN000;;;				   |
 085E  A2 0000 R			MOV   EXIT_RET_CODE,AL	       ;AN000;;;				   |
				;;***************************************************************************
 0861  E9 08E5 R			JMP   KEYB_EXIT_NOT_RESIDENT   ;;
 0864				ERROR4:
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-30
DOS - Message Retriever - MSGSTR.INC Module                 

				;;***************************************************************************
 0864  B8 0009				MOV   AX,INV_FN 	       ;AN000;;; WGR bad or missing file message		;AN0
				00
 0867  BB 0001				MOV   BX,STDOUT 	       ;AN000;;; WGR to standard out				;AN0
				00
 086A  33 C9				XOR   CX,CX		       ;AN000;;; WGR no substitutions				;AN0
				00
 086C  B6 FF				MOV   DH,UTILITY_MSG_CLASS     ;AN000;;; WGR utility message				;AN0
				00
 086E  32 D2				XOR   DL,DL		       ;AN000;;; WGR no input					;AN0
				00
 0870  E8 0E80 R			CALL  SYSDISPMSG	       ;AN000;;; WGR display message				;AN0
				00
 0873  B0 02				MOV   AL,BAD_KEYB_DEF_FILE     ;AN000;;;				   |
 0875  A2 0000 R			MOV   EXIT_RET_CODE,AL	       ;AN000;;;				   |
				;;***************************************************************************
 0878  EB 6B 90				JMP   KEYB_EXIT_NOT_RESIDENT   ;;
 087B				ERROR5:
				;;***************************************************************************
 087B  B8 000B				MOV   AX,INV_CON_Q	       ;AC000;;; WGR CON code page not available.		;AN0
				00
 087E  BB 0001				MOV   BX,STDOUT 	       ;AN000;;; WGR to standard out				;AN0
				00
 0881  33 C9				XOR   CX,CX		       ;AN000;;; WGR no substitutions				;AN0
				00
 0883  B6 FF				MOV   DH,UTILITY_MSG_CLASS     ;AN000;;; WGR utility message				;AN0
				00
 0885  32 D2				XOR   DL,DL		       ;AN000;;; WGR no input					;AN0
				00
 0887  E8 0E80 R			CALL  SYSDISPMSG	       ;AN000;;; WGR display message				;AN0
				00
 088A  B0 04				MOV   AL,CONSOLE_ERROR	       ;AN000;;;				   |
 088C  A2 0000 R			MOV   EXIT_RET_CODE,AL	       ;AN000;;;				   |
				;;***************************************************************************
 088F  EB 54 90				JMP   KEYB_EXIT_NOT_RESIDENT   ;;
 0892				ERROR5A:
				;;***************************************************************************
 0892  B8 0011				MOV   AX,MEMORY_OVERF	       ;AC000;;; WGR not enough resident memory.		;AN0
				00
 0895  BB 0001				MOV   BX,STDOUT 	       ;AN000;;; WGR to standard out				;AN0
				00
 0898  33 C9				XOR   CX,CX		       ;AN000;;; WGR no substitutions				;AN0
				00
 089A  B6 FF				MOV   DH,UTILITY_MSG_CLASS     ;AN000;;; WGR utility message				;AN0
				00
 089C  32 D2				XOR   DL,DL		       ;AN000;;; WGR no input					;AN0
				00
 089E  E8 0E80 R			CALL  SYSDISPMSG	       ;AN000;;; WGR display message				;AN0
				00
 08A1  B0 03				MOV   AL,MEMORY_OVERFLOW       ;AN000;;;				   |
 08A3  A2 0000 R			MOV   EXIT_RET_CODE,AL	       ;AN000;;;				   |
				;;***************************************************************************
 08A6  EB 3D 90				JMP   KEYB_EXIT_NOT_RESIDENT   ;;
 08A9				ERROR6:
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-31
DOS - Message Retriever - MSGSTR.INC Module                 

				;;***************************************************************************
 08A9  B8 000C				MOV   AX,NOT_DESIG	       ;AC000;;; WGR code page not prepared.			;AN0
				00
 08AC  BB 0001				MOV   BX,STDOUT 	       ;AN000;;; WGR to standard out				;AN0
				00
 08AF  33 C9				XOR   CX,CX		       ;AN000;;; WGR no substitutions				;AN0
				00
 08B1  B6 FF				MOV   DH,UTILITY_MSG_CLASS     ;AN000;;; WGR utility message				;AN0
				00
 08B3  32 D2				XOR   DL,DL		       ;AN000;;; WGR no input					;AN0
				00
 08B5  E8 0E80 R			CALL  SYSDISPMSG	       ;AN000;;; WGR display message				;AN0
				00
 08B8  B0 05				MOV   AL,CP_NOT_DESIGNATED     ;AN000;;;				   |
 08BA  A2 0000 R			MOV   EXIT_RET_CODE,AL	       ;AN000;;;				   |
				;;***************************************************************************
 08BD  EB 26 90				JMP   KEYB_EXIT_NOT_RESIDENT   ;;
 08C0				ERROR6A:
				;;***************************************************************************
 08C0  89 1E 0021 R			MOV   NUMBER_HOLDER,BX	       ;AN000;;; WGR transfer number to temp loc.		;AN0
				00
 08C4  8D 36 0021 R			LEA   SI,NUMBER_HOLDER	       ;AN000;;; WGR sublist points to...			;AN0
				00
 08C8  89 36 000D R			MOV   PTR_TO_NUMBER,SI	       ;AN000;;; WGR code page word				;AN0
				00
 08CC  B8 000E				MOV   AX,NOT_VALID	       ;AN000;;; WGR display 'Code page requested....'          ;AN0
				00
 08CF  BB 0001				MOV   BX,STDOUT 	       ;AN000;;; WGR to standard out				;AN0
				00
 08D2  B9 0001				MOV   CX,1		       ;AN000;;; WGR one replacement				;AN0
				00
 08D5  B6 FF				MOV   DH,UTILITY_MSG_CLASS     ;AN000;;; WGR utility message				;AN0
				00
 08D7  32 D2				XOR   DL,DL		       ;AN000;;; WGR no input					;AN0
				00
 08D9  8D 36 000B R			LEA   SI,SUBLIST_NUMBER        ;AN000;;; WGR ptr to sublist				;AN0
				00
 08DD  E8 0E80 R			CALL  SYSDISPMSG	       ;AN000;;; WGR						;AN0
				00
 08E0  B0 06				MOV   AL,KEYB_TABLE_NOT_LOAD   ;AN000;;;				   |
 08E2  A2 0000 R			MOV   EXIT_RET_CODE,AL	       ;AN000;;;				   |
				;;***************************************************************************
								       ;;
 08E5				KEYB_EXIT_NOT_RESIDENT: 	       ;;
 08E5  B4 4C				MOV   AH,04CH		       ;;
 08E7  A0 01F0 R			MOV   AL,QUERY_CALL	       ;; Check if this was a query call
 08EA  3C 00				CMP   AL,0		       ;;
 08EC  75 38				JNE   KEYB_EXIT3	       ;;  IF yes then EXIT
 08EE  A0 0000 R			MOV   AL,EXIT_RET_CODE	       ;; Check if return code was valid
 08F1  3C 00				CMP   AL,0		       ;;
 08F3  75 31				JNE   KEYB_EXIT3	       ;;  IF not then EXIT
								       ;;
 08F5				COPY_INTO_SDA:			       ;;
 08F5  B8 AD82				MOV   AX,0AD82H 	       ;; Activate language
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-32
DOS - Message Retriever - MSGSTR.INC Module                 

 08F8  B3 FF				MOV   BL,-1		       ;;
 08FA  CD 2F				INT   2FH		       ;;
								       ;;
 08FC  B4 4C				MOV   AH,04CH		       ;;;;;;;;;;;
 08FE  A0 0000 R			MOV   AL,EXIT_RET_CODE			;;
 0901  8B 3E 0212 R			MOV   DI,WORD PTR SHARED_AREA_PTR+2	;; Initialize destination ptr
 0905  8E 06 0210 R			MOV   ES,WORD PTR SHARED_AREA_PTR	;;
 0909  8B 56 20				MOV   DX,[BP].RESIDENT_END     ;;;;;;;;;;;
 090C  B1 04				MOV   CL,4		       ;; Calculate resident end in paragraphs
 090E  D3 EA				SHR   DX,CL		       ;;
 0910  42				INC   DX		       ;;
								       ;;
 0911  BE 1834 R			MOV   SI,OFFSET SD_SOURCE_PTR  ;; Initialize source ptr
 0914  33 ED				XOR   BP,BP		       ;;
 0916  8D 5E 16				LEA   BX,[BP].ACTIVE_LANGUAGE  ;;
 0919  03 FB				ADD   DI,BX		       ;;
 091B  03 F3				ADD   SI,BX		       ;;
 091D  8B 0E 0000 E			MOV   CX,SD_LENGTH	       ;; Set length of SHARED_DATA_AREA
 0921  2B CB				SUB   CX,BX		       ;;
								       ;;
 0923  E9 0000 E			JMP   COPY_SD_AREA	       ;; Jump to proc that copies area in new
								       ;;
 0926				KEYB_EXIT3:			       ;;;;;;;;;;;
 0926  A0 0000 R			MOV   AL,EXIT_RET_CODE			;;
 0929  8B 3E 0212 R			MOV   DI,WORD PTR SHARED_AREA_PTR+2	;; Initialize destination ptr
 092D  8E 06 0210 R			MOV   ES,WORD PTR SHARED_AREA_PTR	;;
 0931  26: C6 45 10 01			MOV   ES:[DI].TABLE_OK,1		;;
 0936  CD 21				INT   21H		       ;;;;;;;;;;;
								       ;;
 0938				KEYB_COMMAND  ENDP		       ;;
								       ;;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;;
				;; Procedure: NUMLK_ON
				;;
				;; Description:
				;;     Turn  Num Lock On.
				;;
				;; Input Registers:
				;;     N/A
				;;
				;; Output Registers:
				;;     N/A
				;;
				;; Logic:
				;;     Set Num Lock bit in BIOS KB_FLAG
				;;     Issue Int 16 to update lights
				;;
				;;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
								       ;;
 0938				NUMLK_ON     PROC		       ;;
								       ;;
 0938  06				PUSH	ES		       ;;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-33
DOS - Message Retriever - MSGSTR.INC Module                 

 0939  50				PUSH	AX		       ;;
								       ;;
 093A  B8 ---- R			MOV	AX,DATA 	       ;;
 093D  8E C0				MOV	ES,AX		       ;;
								       ;;
 093F  26: 80 0E 0017 R 20		OR	ES:KB_FLAG,NUM_STATE   ;; Num Lock state active
 0945  B4 01				MOV	AH,1		       ;; Issue keyboard query call to
 0947  CD 16				INT	16H		       ;;  have BIOS update the lights
								       ;;
 0949  58				POP	AX		       ;;
 094A  07				POP	ES		       ;;
 094B  C3				RET			       ;;
								       ;;
 094C				NUMLK_ON   ENDP 		       ;;
								       ;;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;;
				;; Module: INSTALL_INT_9
				;;
				;; Description:
				;;     Install our INT 9 driver.
				;;
				;; Input Registers:
				;;     DS - points to our data segment
				;;     BP - points to ES to find SHARED_DATA_AREA
				;;
				;; Output Registers:
				;;     DS - points to our data segment
				;;     AX, BX, DX, ES  Trashed
				;;
				;; Logic:
				;;	Get existing vector
				;;	Install our vector
				;;	Return
				;;
				;; Notes:
				;;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
								       ;;
 094C  0000			REPLACE_INT_SEGMENT1 DW  ?	       ;;
								       ;;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;;   Program Code
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
									    ;;
 094E				INSTALL_INT_9	     PROC		    ;;
									    ;;
 094E  06				PUSH  ES			    ;;
									    ;;
 094F  B4 35				MOV   AH,35H			    ;; Get int 9 vector
 0951  B0 09				MOV   AL,9			    ;;
 0953  CD 21				INT   21H			    ;; Vector in ES:BX
 0955  8C 06 094C R			MOV   REPLACE_INT_SEGMENT1,ES	    ;;
 0959  0E				PUSH  CS			    ;;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-34
DOS - Message Retriever - MSGSTR.INC Module                 

 095A  07				POP   ES			    ;;
 095B  26: 89 1E 0000 E			MOV   WORD PTR ES:SD.OLD_INT_9,BX   ;; Offset
 0960  A1 094C R			MOV   AX,REPLACE_INT_SEGMENT1	    ;;
 0963  26: A3 0002 E			MOV   WORD PTR ES:SD.OLD_INT_9+2,AX ;; Segment
 0967  B4 25				MOV   AH,25H			    ;;
 0969  B0 09				MOV   AL,9			    ;;
 096B  BA 0000 E			MOV   DX,OFFSET KEYB_INT_9	    ;; Let DOS know about our handler
 096E  CD 21				INT   21H			    ;;
									    ;;
 0970  07				POP   ES			    ;;
 0971  C3				RET				    ;;
									    ;;
 0972				INSTALL_INT_9	     ENDP		    ;;
									    ;;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;;
				;; Module: INSTALL_INT_9_NET
				;;
				;; Description:
				;;
				;;
				;; Input Registers:
				;;     DS - points to our data segment
				;;     BP - points to ES to find SHARED_DATA_AREA
				;;
				;; Output Registers:
				;;     DS - points to our data segment
				;;     AX, BX, DX, ES  Trashed
				;;
				;; Logic:
				;;	IF network is installed THEN
				;;	  Let it know about our INT 9
				;;	Return
				;;
				;; Notes:
				;;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
								       ;;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;;   Program Code
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
								       ;;
 0972				INSTALL_INT_9_NET    PROC	       ;;
								       ;;
 0972  06				PUSH  ES		       ;;
								       ;;
 0973  F7 06 000E E 0100		TEST  SD.SYSTEM_FLAG,PC_NET    ;; TEST FOR PC_NETWORK
 0979  75 03				JNZ   NET_HAND_SHAKE	       ;; JUMP IF NETWORK INSTALLED
 097B  EB 09 90				JMP   INSTALL_9_DONE_NET       ;; SKIP THE PC NETWORK HANDSHAKE
								       ;;
 097E				NET_HAND_SHAKE: 		       ;;
								       ;; ES:BX TO CONTAIN INT 9 ADDR
 097E  BB 0000 E			MOV   BX,OFFSET KEYB_INT_9     ;;
 0981  B8 B808				MOV   AX,0B808H 	       ;; FUNCTION FOR PC NETWORK TO INSTALL
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-35
DOS - Message Retriever - MSGSTR.INC Module                 

								       ;; THIS ADDRESS FOR THEIR JUMP TABLE
 0984  CD 2F				INT   02FH		       ;; TELL PC_NET TO USE MY ADDR TO CHAIN TO
								       ;;
 0986				INSTALL_9_DONE_NET:		       ;;
 0986  07				POP   ES		       ;;
 0987  C3				RET			       ;;
								       ;;
 0988				INSTALL_INT_9_NET    ENDP	       ;;
								       ;;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;;
				;; Module: INSTALL_INT_2F_48
				;;
				;; Description:
				;;     Install our INT 2F, INT 48 drivers.
				;;
				;; Input Registers:
				;;     DS - points to our data segment
				;;     BP - points to ES to find SHARED_DATA_AREA
				;;
				;; Output Registers:
				;;     DS - points to our data segment
				;;     AX, BX, DX, ES  Trashed
				;;
				;; Logic:
				;;	Get existing vectors
				;;	Install our vectors
				;;	Return
				;;
				;; Notes:
				;;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
								       ;;
 0988  0000			REPLACE_INT_SEGMENT2 DW  ?	       ;;
								       ;;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;;   Program Code
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
									     ;;
 098A				INSTALL_INT_2F_48    PROC		     ;;
									     ;;
 098A  B4 35				MOV   AH,35H			     ;; Get int 2f vector
 098C  B0 2F				MOV   AL,2FH			     ;;
 098E  CD 21				INT   21H			     ;; Vector in ES:BX
 0990  8C 06 0988 R			MOV   REPLACE_INT_SEGMENT2,ES	     ;;
 0994  0E				PUSH  CS			     ;;
 0995  07				POP   ES			     ;;
 0996  26: 89 1E 0004 E			MOV   WORD PTR ES:SD.OLD_INT_2F,BX   ;; Offset
 099B  A1 0988 R			MOV   AX,REPLACE_INT_SEGMENT2	     ;;
 099E  26: A3 0006 E			MOV   WORD PTR ES:SD.OLD_INT_2F+2,AX ;; Segment
 09A2  B4 25				MOV   AH,25H			     ;; Set int 9 vector
 09A4  B0 2F				MOV   AL,2FH			     ;;
 09A6  BA 0000 E			MOV   DX,OFFSET KEYB_INT_2F	     ;; Vector in DS:DX
 09A9  CD 21				INT   21H			     ;;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-36
DOS - Message Retriever - MSGSTR.INC Module                 

									     ;;
 09AB				ARE_WE_A_PCJR:				     ;;
									     ;;
 09AB  A1 000E E			MOV   AX,SD.SYSTEM_FLAG 	     ;; Test if we are a PCjr
 09AE  3D 0800				CMP   AX,PC_JR			     ;;
 09B1  75 21				JNE   INSTALL_DONE		     ;;  IF yes then
 09B3  B4 35				MOV   AH,35H			     ;;    Get int 48 vector
 09B5  B0 48				MOV   AL,48H			     ;;
 09B7  CD 21				INT   21H			     ;;    Vector in ES:BX
 09B9  8C 06 0988 R			MOV   REPLACE_INT_SEGMENT2,ES	     ;;
 09BD  0E				PUSH  CS			     ;;
 09BE  07				POP   ES			     ;;
 09BF  26: 89 1E 0008 E			MOV   WORD PTR ES:SD.OLD_INT_48,BX   ;;    Offset
 09C4  A1 0988 R			MOV   AX,REPLACE_INT_SEGMENT2	     ;;
 09C7  26: A3 000A E			MOV   WORD PTR ES:SD.OLD_INT_48+2,AX ;;    Segment
 09CB  B4 25				MOV   AH,25H			     ;;    Set int 48 vector
 09CD  B0 48				MOV   AL,48H			     ;;
 09CF  BA 0000 E			MOV   DX,OFFSET KEYB_INT_48	     ;;    Vector in DS:DX
 09D2  CD 21				INT   21H			     ;;
									     ;;
 09D4				INSTALL_DONE:				     ;;
				
				
 09D4  C3				RET				     ;;
									     ;;
 09D5				INSTALL_INT_2F_48    ENDP		     ;;
									     ;;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;;
				;; Module: REMOVE_INT_9
				;;
				;; Description:
				;;     Remove our INT 9 driver.
				;;
				;; Input Registers:
				;;     DS - points to our data segment
				;;     BP - points to ES to find SHARED_DATA_AREA
				;;
				;; Output Registers:
				;;     DS - points to our data segment
				;;     AX, BX, DX, ES  Trashed
				;;
				;; Logic:
				;;	Get old vector
				;;	Install old vector
				;;	Return
				;;
				;; Notes:
				;;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
								       ;;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;;   Program Code
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-37
DOS - Message Retriever - MSGSTR.INC Module                 

									      ;;
 09D5				REMOVE_INT_9	    PROC		      ;;
									      ;;
 09D5  1E				PUSH  DS			      ;;
 09D6  06				PUSH  ES			      ;;
 09D7  8E 06 0210 R			MOV   ES,WORD PTR SHARED_AREA_PTR     ;;
 09DB  26: A1 0002 E			MOV   AX,WORD PTR ES:SD.OLD_INT_9+2   ;; int 9 vector - segment
 09DF  8E D8				MOV   DS,AX			      ;;
 09E1  26: 8B 16 0000 E			MOV   DX,WORD PTR ES:SD.OLD_INT_9     ;; int 9 vector - offset
									      ;;
 09E6  B4 25				MOV   AH,25H		       ;;;;;;;;; Set int 9 vector
 09E8  B0 09				MOV   AL,9		       ;;
 09EA  CD 21				INT   21H		       ;;
								       ;;
 09EC				REMOVE_9_DONE:			       ;;
 09EC  07				POP   ES		       ;;
 09ED  1F				POP   DS		       ;;
 09EE  C3				RET			       ;;
								       ;;
 09EF				REMOVE_INT_9		 ENDP	       ;;
								       ;;
				;*********************** CNS **********;;
 09EF				PURPOSE:			       ;;
 09EF				INPUT:				       ;;
 09EF				OUTPUT: 			       ;;
				;**************************************;;
								       ;AN000;;;
								       ;AN000;;;
								       ;AN000;;;
 09EF				    IDLANG_CHK	PROC	NEAR	       ;AN000;;;
								       ;AN000;;;
 09EF  A1 0070 R			mov	ax,fb.kl_id_code       ;AN000;;;get the id code from the table
 09F2  3B 46 0C				cmp	ax,[bp].id_parm        ;AN000;;;;;;;;;;;compare it to value taken
 09F5  75 18				jne	end_match	       ;AN000;	       ;from the switch-- if found
 09F7  80 3E 0009 R 00			cmp	ALPHA,0 	       ;AN000;	       ;a keyboard code was specified
 09FC  74 0B				je	a_match 	       ;AN000;	       ;no lang & a match
								       ;AN000;	       ;
 09FE  A1 006E R			mov	ax,fb.kl_lang_code     ;AN000;	       ;compare lang codes
 0A01  3B 46 04				cmp	ax,[BP].LANGUAGE_PARM  ;AN000;	       ;they are equal
 0A04  74 03				je	a_match 	       ;AN000;	       ;
								       ;AN000;	       ;
 0A06  EB 07 90				jmp	end_match	       ;AN000;	       ;if not found go check next
								       ;AN000;	       ;id for the same country
								       ;AN000;	       ;
 0A09				    a_match:			       ;AN000;	       ;
										;
 0A09  C7 06 0214 R 0001		mov	good_match,1	       ;AN000;	       ;report the ids match
										;
 0A0F				    end_match:			       ;AN000;	       ;
										;
 0A0F  C3				ret			       ;AN000;	       ;
										;
 0A10				    IDLANG_CHK	ENDP		       ;AN000;	       ;
				;*********************** CNS *******************;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-38
DOS - Message Retriever - MSGSTR.INC Module                 

				;**********************************SCAN_ID***********************;
				; New variables defined - NUM_ID,ADRSS_LANG,ID_PTR_SIZE,ID_FOUND ;
				;****************************************************************;
												 ;
												 ;
 0A10					SCAN_ID     PROC	NEAR				 ;
												 ;
 0A10  33 FF				xor	di,di		;AN000;;clear di to set at the
								;AN000;;beginning of KEYBSYS STRUCTURE
								;;;;;;;;;;
									 ;
 0A12  8D 4D 1C				lea	cx,[di].kh_num_ID+4	 ;AN000;; set number of bytes to read header
									 ;
 0A15  B4 3F				mov	ah,3fh			 ;AN000;;
 0A17  CD 21				int	21h			 ;AN000;;
 0A19  73 03				jnc	VAL5ID			 ;AN000;;
 0A1B  EB 62 90				jmp	BAD_TAB 		 ;AN000;;;bad table message
									  ;
 0A1E				 VAL5ID:				 ;AN000; ;
									  ;
 0A1E  8B 0E 01F9 R			mov	cx,SIGNATURE_LENGTH	 ;AN000; ;
 0A22  BF 01F1 R			mov	di,offset SIGNATURE	 ;AN000; ;
 0A25  BE 006E R			mov	si,offset FB.KH_SIGNATURE;AN000; ;
 0A28  F3/ A6				repe	CMPSB			 ;AN000; ;
 0A2A  74 03				je	ID_SPECIFIED		 ;AN000; ;
 0A2C  EB 51 90				jmp	BAD_TAB 		 ;AN000; ;
									  ;
									  ;
									  ;
 0A2F				 ID_SPECIFIED:				 ;AN000; ;
									  ;
 0A2F  A1 0086 R			mov	ax,FB.KH_NUM_ID 	 ;AN000; ;;;;;;;;;;;;;;;
 0A32  A3 01FB R			mov	NUM_ID,ax		 ;AN000; ;save # of IDs
 0A35  F7 26 0202 R			mul	ID_PTR_SIZE		 ;AN000; ;determine # of bytes to read
 0A39  50				push	ax			 ;AN000; ;save current # of bytes to read for
									 ;AN000; ;ID values only
 0A3A  A1 0088 R			mov	ax,FB.KH_NUM_LANG	 ;AN000; ;add on lang data in table
 0A3D  F7 26 0204 R			mul	LANG_PTR_SIZE		 ;AN000; ;data that comes before the ID data
 0A41  8B C8				mov	cx,ax			 ;AN000; ;save that value for the size compare
 0A43  89 0E 01DC R			mov	PASS_LANG,cx		 ;AN000; ;
 0A47  58				pop	ax			 ;AN000; ;restore the info for # of ID bytes to read
 0A48  03 C8				add	cx,ax			 ;AN000; ;add that value to get total in CX
 0A4A  89 0E 01DA R			mov	TOTAL_SIZE,cx		 ;AN000; ;save the total size
 0A4E  81 F9 012C			cmp	cx,FILE_BUFFER_SIZE	 ;AN000; ;
 0A52  76 03				jbe	READ_ID_TAB		 ;AN000; ;
 0A54  EB 29 90				jmp	BAD_TAB 		 ;AN000; ;
									  ;
									  ;
 0A57				  READ_ID_TAB:				 ;AN000; ;
									  ;
 0A57  BA 006E R			mov	dx,offset FILE_BUFFER	 ;AN000; ;
 0A5A  B4 3F				mov	ah,3fh			;;AN000;read language table from
 0A5C  CD 21				int	21h			;;AN000;keyb defn file
 0A5E  73 03				jnc	READ_IDVAL		;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-39
DOS - Message Retriever - MSGSTR.INC Module                 

 0A60  EB 1D 90				jmp	BAD_TAB 		;;AN000;
									;
 0A63				  READ_IDVAL:				;;AN000;
									;;AN000;
 0A63  8B 0E 01FB R			mov	cx,NUM_ID		;;AN000;
 0A67  BF 006E R			mov	di,offset FILE_BUFFER	;;AN000;;;;;;;;;;
 0A6A  03 3E 01DC R			add	di,PASS_LANG		 ;AN000;	;
										 ;
 0A6E				  SCAN_ID_TAB:				 ;AN000;	;
										 ;
 0A6E  8B 46 0C				mov	ax,[bp].ID_PARM 	 ;AN000;	;
 0A71  39 05				cmp	[di].KP_ID_CODE,ax	 ;AN000;	;
 0A73  74 12				je	ID_HERE 		 ;AN000;	;
 0A75  03 3E 0202 R			add	di,ID_PTR_SIZE		 ;AN000;	;
 0A79  49				dec	cx			 ;AN000;	;
 0A7A  75 F2				jne	SCAN_ID_TAB		 ;AN000;	;
 0A7C  EB 0E 90				jmp	FINALE			 ;AN000;	;
									 ;
 0A7F				  BAD_TAB:				 ;AN000;;
										 ;
 0A7F  C6 06 01FD R 01			mov	ERR4ID,1		 ;AN000;	;
 0A84  EB 06 90				jmp	FINALE			 ;AN000;	;
										 ;
										 ;
										 ;
 0A87				   ID_HERE:				 ;AN000;	;
										 ;
 0A87  C6 06 0007 R 01			mov	ID_FOUND,1	;AN000;;reset ptr for	;
								;AN000;;current country ;
										 ;
				
										 ;
 0A8C				   FINALE:			;AN000; 		;
										 ;
 0A8C  C3				ret			;AN000; 		;
										 ;
										 ;
 0A8D					SCAN_ID 	ENDP	;AN000; 		;
										 ;
				;*******************************SCAN_ID END******;
				;;
				;; Module: BUILD_PATH
				;;
				;; Description:
				;;     Build the complete filename of the Keyboard Definition File
				;;*************************************WGR*********************
				;;     and open the file.
				;;+++++++++++++++++++++++++++++++++++++WGR+++++++++++++++++++++
				;;
				;; Input Registers:
				;;     DS - points to our data segment
				;;     ES - points to our data segment
				;;     BP - offset of parmeter list
				;;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-40
DOS - Message Retriever - MSGSTR.INC Module                 

				;; Output Registers:
				;;************************************WGR**********************
				;;     CARRY CLEAR
				;;	    AX = HANDLE
				;;     CARRY SET (ERROR)
				;;	    NONE
				;;++++++++++++++++++++++++++++++++++++WGR++++++++++++++++++++++
				;;    The complete filename will be available in FILE_NAME
				;;
				;; Logic:
				;;
				;;    Determine whether path parameter was specified
				;;    IF length is zero THEN
				;;****************************************WGR******************
				;;	Try to open file in ACTIVE directory
				;;	IF failed THEN
				;;	  Try to open file in ARGV(0) directory
				;;	  IF failed THEN
				;;	    Try to open file in ROOT directory (for DOS 3.3 compatibility)
				;;	    ENDIF
				;;	  ENDIF
				;;	ENDIF
				;;    ELSE
				;;	Copy path from PSP to FILE_NAME memory area
				;;	Try to open USER SPECIFIED file
				;;++++++++++++++++++++++++++++++++++++++++WGR++++++++++++++++++
				;;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
									 ;;
 0A8D  5C 4B 45 59 42 4F	KEYBOARD_SYS	DB   '\KEYBOARD.SYS',00  ;AN000;;;
       41 52 44 2E 53 59	
       53 00			
 0A9B  4B 45 59 42 4F 41	KEYB_SYS_ACTIVE DB   'KEYBOARD.SYS',00   ;AN000;;; WGR                                     ;AN000
       52 44 2E 53 59 53	
       00			
 = 000E				KEYB_SYS_LENG	EQU  14 		 ;AN000;;;
 = 000D				KEYB_SYS_A_LENG EQU  13 		 ;AN000;;; WGR					   ;AN000
									 ;;
 0AA8  0080[			FILE_NAME	DB   128 DUP(0) 	 ;AN000;;;
	   00			
			 ]	
				
									 ;;
 = 0002				FILE_NOT_FOUND	EQU  2			 ;AN000;;; WGR					   ;AN000
 = 0003				PATH_NOT_FOUND	EQU  3			 ;AN000;;; WGR					   ;AN000
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;;  Program Code
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
								       ;;
 0B28				BUILD_PATH    PROC  NEAR	       ;;
 0B28  FC				CLD			       ;AN000;;; WGR					   ;AN000
 0B29  BF 0AA8 R			MOV	DI,OFFSET FILE_NAME    ;; Get the offset of the filename
 0B2C  8B 4E 0A				MOV	CX,[BP].PATH_LENGTH    ;; If path is specified then
 0B2F  83 F9 00				CMP	CX,0		       ;;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-41
DOS - Message Retriever - MSGSTR.INC Module                 

 0B32  74 0E				JE	APPEND_KEYB_SYS        ;;
 0B34  8B 76 08				MOV	SI,[BP].PATH_OFFSET    ;;   Get the offset of the path
								       ;;
 0B37  F3/ A4				REPE	MOVSB		       ;AC000;;;   Copy each char of the specified
 0B39  B8 3D00				MOV	AX,3D00H	       ;AC000;;; WGR Open the KEYBOARD.SYS file 	   ;AN000
 0B3C  BA 0AA8 R			MOV	DX,OFFSET FILE_NAME    ;AC000;;; WGR					   ;AN000
 0B3F  CD 21				INT	21H		       ;AC000;;; WGR					   ;AN000
 0B41  C3				RET			       ;;   path into the filename location
								       ;;
 0B42				APPEND_KEYB_SYS:		       ;;;;;
 0B42  BE 0A9B R			MOV	SI,OFFSET KEYB_SYS_ACTIVE ;AC000;;; WGR  copy name for active directory    ;AN000
 0B45  B9 000D				MOV	CX,KEYB_SYS_A_LENG     ;AC000;;;;;; WGR  to file name variable. 	   ;AN000
 0B48  F3/ A4				REPE	MOVSB		       ;AC000;;; WGR					   ;AN000
 0B4A  B8 3D00				MOV	AX,3D00H	       ;AC000;;; WGR try to open it.			   ;AN000
 0B4D  BA 0AA8 R			MOV	DX,OFFSET FILE_NAME    ;AC000;;; WGR					   ;AN000
 0B50  CD 21				INT	21H		       ;AC000;;; WGR					   ;AN000
					.IF C			       ;AC000;;; WGR error in opening...was it..	   ;AN000
 0B52  73 3A                 5						jnC $l1 
					  .IF <AX EQ PATH_NOT_FOUND> OR ;AN000;;; WGR path or.. 			   ;AN000
 0B54  3D 0003               3						cmp AX,PATH_NOT_FOUND 
 0B57  74 05                 6						je $l6 
					  .IF <AX EQ FILE_NOT_FOUND>   ;AN000;;; WGR file not found?... 		   ;AN000
 0B59  3D 0002               3						cmp AX,FILE_NOT_FOUND 
 0B5C  75 2F                 6						jne $l5 
 0B5E                        3	$l6: 
 0B5E  E8 0B8F R			    CALL   COPY_ARGV0	       ;AC000;;; WGR yes....try ARGV(0) directory.	   ;AN000
 0B61  B8 3D00				    MOV    AX,3D00H	       ;AC000;;; WGR					   ;AN000
 0B64  BA 0AA8 R			    MOV    DX,OFFSET FILE_NAME ;AC000;;; WGR					   ;AN000
 0B67  CD 21				    INT    21H		       ;AC000;;; WGR					   ;AN000
					    .IF C		       ;AC000;;; WGR error in opening....was it..	   ;AN000
 0B69  73 23                 5						jnC $l1 
					      .IF <AX EQ PATH_NOT_FOUND> OR ;AC000;;; WGR path or..			   ;AN000
 0B6B  3D 0003               3						cmp AX,PATH_NOT_FOUND 
 0B6E  74 05                 6						je $l12 
					      .IF <AX EQ FILE_NOT_FOUND> ;AC000;;; WGR file not found?			   ;AN000
 0B70  3D 0002               3						cmp AX,FILE_NOT_FOUND 
 0B73  75 15                 6						jne $l11 
 0B75                        3	$l12: 
 0B75  BE 0A8D R				MOV	SI,OFFSET KEYBOARD_SYS ;AC000;;; WGR try ROOT directory.	   ;AN000
 0B78  BF 0AA8 R				MOV	DI,OFFSET FILE_NAME    ;AC000;;; WGR				   ;AN000
 0B7B  B9 000E					MOV	CX,KEYB_SYS_LENG       ;AC000;;; WGR				   ;AN000
 0B7E  F3/ A4					REPE	MOVSB		       ;AC000;;; WGR				   ;AN000
 0B80  B8 3D00					MOV	AX,3D00H	       ;AC000;;; WGR				   ;AN000
 0B83  BA 0AA8 R				MOV	DX,OFFSET FILE_NAME    ;AC000;;; WGR				   ;AN000
 0B86  CD 21					INT	21H		       ;AC000;;; WGR				   ;AN000
					      .ELSE			       ;AC000;;; WGR if failed then carry set..    ;AN000
 0B88  EB 04                 3						jmp short $l1 
 0B8A                        2	$l11: 
 0B8A  F9					STC			      ;AC000;;; WGR some other error..set flag	   ;AN000
					      .ENDIF			     ;AC000;;; WGR				   ;AN000
					    .ENDIF			    ;AC000;;; WGR				   ;AN000
					  .ELSE 			   ;AN000;;; WGR				   ;AN000
 0B8B  EB 01                 3						jmp short $l1 
 0B8D                        2	$l5: 
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-42
DOS - Message Retriever - MSGSTR.INC Module                 

 0B8D  F9				    STC 			  ;AN000;;; WGR some other error..set flag.	   ;AN000
					  .ENDIF			 ;AN000;;; WGR					   ;AN000
					.ENDIF				;AN000;;; WGR					   ;AN000
 0B8E                        2	$l1: 
								       ;;
 0B8E  C3				RET			       ;AN000;;;
								       ;;
 0B8F				BUILD_PATH	     ENDP	       ;;
								       ;;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; WGR
				;;					  WGR
				;; Module Name: 			  WGR
				;;   COPY_ARGV0 			  WGR
				;;					  WGR
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; WGR
								       ;; WGR
								       ;; WGR
 0B8F				COPY_ARGV0  PROC		       ;; WGR					    ;AN000
								       ;; WGR					    ;AN000
 0B8F  06			  PUSH	 ES			       ;AN000;;; WGR					   ;AN000
 0B90  57			  PUSH	 DI			       ;AN000;;; WGR					   ;AN000
 0B91  56			  PUSH	 SI			       ;AN000;;; WGR					   ;AN000
 0B92  51			  PUSH	 CX			       ;AN000;;; WGR					   ;AN000
								       ;AN000;;; WGR					   ;AN000
 0B93  BF 002C			  MOV	 DI,2CH 		       ;AN000;;; WGR Locate environment string		   ;AN000
 0B96  8E 05			  MOV	 ES,[DI]		       ;AN000;;; WGR					   ;AN000
 0B98  33 F6			  XOR	 SI,SI			       ;AN000;;; WGR					   ;AN000
				  .WHILE <<WORD PTR ES:[SI]> NE 0>     ;AN000;;; WGR find ARGV(0) string.		   ;AN000
 0B9A                        2	$l15: 
 0B9A  26: 83 3C 00          3						cmp WORD PTR ES:[SI],0 
 0B9E  74 03                 6						je $l16 
 0BA0  46			     INC   SI			       ;AN000;;; WGR					   ;AN000
				  .ENDWHILE			       ;AN000;;; WGR					   ;AN000
 0BA1  EB F7                 3						jmp $l15 
 0BA3                        2	$l16: 
 0BA3  83 C6 04			  ADD	 SI,4			       ;AN000;;; WGR					   ;AN000
 0BA6  8D 3E 0AA8 R		  LEA	 DI,FILE_NAME		       ;AN000;;; WGR move string to work area		   ;AN000
				  .REPEAT			       ;AN000;;; WGR					   ;AN000
 0BAA                        2	$l18: 
 0BAA  26: 8A 04		     MOV    AL,ES:[SI]		       ;AN000;;; WGR					   ;AN000
 0BAD  88 05			     MOV    [DI],AL		       ;AN000;;; WGR					   ;AN000
 0BAF  46			     INC    SI			       ;AN000;;; WGR					   ;AN000
 0BB0  47			     INC    DI			       ;AN000;;; WGR					   ;AN000
				  .UNTIL <<BYTE PTR ES:[SI]> EQ 0>     ;AN000;;; WGR					   ;AN000
 0BB1  26: 80 3C 00          3						cmp BYTE PTR ES:[SI],0 
 0BB5  75 F3                 6						jne $l18 
				  .REPEAT			       ;AN000;;; WGR					   ;AN000
 0BB7                        2	$l20: 
 0BB7  4F			     DEC    DI			       ;AN000;;; WGR					   ;AN000
				  .UNTIL <<BYTE PTR [DI]> EQ '\'> OR   ;AN000;;; WGR                                       ;AN000
 0BB8  80 3D 5C              3						cmp BYTE PTR [DI],'\' 
 0BBB  74 05                 6						je $l21 
				  .UNTIL <<BYTE PTR [DI]> EQ 0>        ;AN000;;; WGR scan back to..			   ;AN000
 0BBD  80 3D 00              3						cmp BYTE PTR [DI],0 
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-43
DOS - Message Retriever - MSGSTR.INC Module                 

 0BC0  75 F5                 6						jne $l20 
 0BC2                        3	$l21: 
 0BC2  47			  INC	 DI			       ;AN000;;; WGR first character after "\"             ;AN000
 0BC3  0E			  PUSH	 CS			       ;AN000;;; WGR					   ;AN000
 0BC4  07			  POP	 ES			       ;AN000;;; WGR					   ;AN000
 0BC5  8D 36 0A9B R		  LEA	 SI,KEYB_SYS_ACTIVE	       ;AN000;;; WGR copy in "KEYBOARD.SYS"                ;AN000
 0BC9  B9 000D			  MOV	 CX,KEYB_SYS_A_LENG	       ;AN000;;; WGR					   ;AN000
 0BCC  F3/ A4			  REPE	 MOVSB			       ;AN000;;; WGR					   ;AN000
								       ;AN000;;; WGR					   ;AN000
 0BCE  59			  POP	    CX			       ;AN000;;; WGR					   ;AN000
 0BCF  5E			  POP	    SI			       ;AN000;;; WGR					   ;AN000
 0BD0  5F			  POP	    DI			       ;AN000;;; WGR					   ;AN000
 0BD1  07			  POP	    ES			       ;AN000;;; WGR					   ;AN000
 0BD2  C3			  RET				       ;AN000;;; WGR					   ;AN000
								       ;AN000;;; WGR					   ;AN000
 0BD3				COPY_ARGV0  ENDP		       ;AN000;;;
								       ;AN000;;;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;;
				;; Module: FIND_FIRST_CP
				;;
				;; Description:
				;;     Check the keyboard definition file for the first code page
				;;
				;; Input Registers:
				;;     DS - points to our data segment
				;;     ES - points to our data segment
				;;     BP - offset of parmeter list
				;;
				;; Output Registers:
				;;	    NONE
				;;
				;; Logic:
				;;   Open the file
				;;   IF error in opening file THEN
				;;	Display ERROR message and EXIT
				;;   ELSE
				;;	Save handle
				;;	Set address of buffer
				;;	READ header of Keyboard definition file
				;;	IF error in reading file THEN
				;;	   Display ERROR message and EXIT
				;;	ELSE
				;;	   Check signature for correct file
				;;	   IF file signature is correct THEN
				;;	      READ language table
				;;	      IF error in reading file THEN
				;;		  Display ERROR message and EXIT
				;;	      ELSE
				;;		  Use table to verify language parm
				;;		  Set pointer values
				;;		  IF code page was specified
				;;		      READ language entry
				;;		      IF error in reading file THEN
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-44
DOS - Message Retriever - MSGSTR.INC Module                 

				;;			   Display ERROR message and EXIT
				;;		      ELSE
				;;			   READ first code page
				;;			   IF error in reading file THEN
				;;			       Display ERROR message and EXIT
				;;   RET
				;;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
									 ;;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;;  Program Code
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
										   ;;
 0BD3				FIND_FIRST_CP PROC  NEAR			   ;;
										   ;;
 0BD3  51				PUSH  CX				   ;; Save everything that
 0BD4  52				PUSH  DX				   ;;  that will be changed
 0BD5  56				PUSH  SI				   ;;
 0BD6  57				PUSH  DI				   ;;
										   ;;
 0BD7  8B 1E 01E6 R			MOV   BX,KEYBSYS_FILE_HANDLE		   ;; Get handle
 0BDB  8B 16 0208 R			MOV   DX,WORD PTR KEYBCMD_LANG_ENTRY_PTR   ;; LSEEK file pointer
 0BDF  8B 0E 020A R			MOV   CX,WORD PTR KEYBCMD_LANG_ENTRY_PTR+2 ;;  to top of language entry
 0BE3  B4 42				MOV   AH,42H				   ;;
 0BE5  B0 00				MOV   AL,0		       ;;;;;;;;;;;;;; If no problem with
 0BE7  CD 21				INT   21H		       ;;		     Keyb Def file Then
 0BE9  73 03				JNC   FIND_FIRST_BEGIN	       ;;
 0BEB  EB 40 90				JMP   FIND_FIRST_CP_ERROR4     ;;
								       ;;;;;;;;;
 0BEE				FIND_FIRST_BEGIN:			      ;;
 0BEE  8B F8				MOV   DI,AX			      ;;
 0BF0  B9 000A				MOV   CX,SIZE KEYBSYS_LANG_ENTRY-1    ;; Set number
									      ;;	bytes to read header
 0BF3  BA 006E R			MOV   DX,OFFSET FILE_BUFFER    ;;;;;;;;;
 0BF6  B4 3F				MOV   AH,3FH		       ;; Read language entry in
 0BF8  CD 21				INT   21H		       ;;	 keyboard definition file
 0BFA  73 03				JNC   FIND_FIRST_VALID4        ;; If no error in opening file then
 0BFC  EB 2F 90				JMP   FIND_FIRST_CP_ERROR4     ;;
								       ;;
 0BFF				FIND_FIRST_VALID4:		       ;;
				;************************** CNS *******;;
 0BFF  32 E4				xor   ah,ah		       ;AC000;;;
 0C01  A0 0077 R			MOV   Al,FB.KL_NUM_CP	       ;AC000;;;
				;************************** CNS *******;;
 0C04  F7 26 0206 R			MUL   CP_PTR_SIZE	       ;; Determine # of bytes to read
 0C08  BA 006E R			MOV   DX,OFFSET FILE_BUFFER    ;; Establish beginning of buffer
 0C0B  8B C8				MOV   CX,AX		       ;;
 0C0D  81 F9 012C			CMP   CX,FILE_BUFFER_SIZE      ;; Make sure buffer is not to small
 0C11  76 03				JBE   FIND_FIRST_VALID5        ;;
 0C13  EB 18 90				JMP   FIND_FIRST_CP_ERROR4     ;;
								       ;;
 0C16				FIND_FIRST_VALID5:		       ;;
 0C16  B4 3F				MOV   AH,3FH		       ;; Read code page table from
 0C18  CD 21				INT   21H		       ;;	     keyboard definition file
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-45
DOS - Message Retriever - MSGSTR.INC Module                 

 0C1A  73 03				JNC   FIND_FIRST_VALID6        ;; If no error in opening file then
 0C1C  EB 0F 90				JMP   FIND_FIRST_CP_ERROR4     ;;
								       ;;
 0C1F				FIND_FIRST_VALID6:		       ;;
 0C1F  8B 0E 0200 R			MOV   CX,NUM_CP 	       ;;    Number of valid codes
 0C23  BF 006E R			MOV   DI,OFFSET FILE_BUFFER    ;;    Point to correct word in table
								       ;;
 0C26  8B 1D				MOV   BX,[DI].KC_CODE_PAGE     ;;    Get parameter
 0C28  33 C0				XOR   AX,AX		       ;;
 0C2A  EB 04 90				JMP   FIND_FIRST_RETURN        ;;
								       ;;
 0C2D				FIND_FIRST_CP_ERROR4:		       ;;
 0C2D  B8 0004				MOV  AX,4		       ;;
								       ;;
 0C30				FIND_FIRST_RETURN:		       ;;
 0C30  5F				POP  DI 		       ;;
 0C31  5E				POP  SI 		       ;;
 0C32  5A				POP  DX 		       ;;
 0C33  59				POP  CX 		       ;;
								       ;;
 0C34  C3				RET			       ;;
								       ;;
 0C35				FIND_FIRST_CP	     ENDP	       ;;
								       ;;;;;;;;;;;;;
				.list						  ;;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;; Temp Shared Data Area
				;; Contains data which is required by
				;; both the resident and transient KEYB code.
				;; All keyboard tables are stored in this area
				;; Structures for this area are in file KEYBSHAR.INC
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
								       ;;
								       ;;
 1824  54 45 4D 50 20 53	 db 'TEMP SHARED DATA'                 ;;
       48 41 52 45 44 20	
       44 41 54 41		
 1834				SD_SOURCE_PTR	  LABEL     BYTE       ;;
 1834  00000000			TEMP_SHARED_DATA   SHARED_DATA_STR <>  ;;
 1838  00000000			
 183C  00000000			
 1840  0000			
 1842  0000			
 1844  00			
 1845  00			
 1846  0100			
 1848  0002[			
	   00			
			 ]	
 184A  5553			
 184C  B501			
 184E  0000			
 1850  FFFF			
 1852  FFFF			
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-46
DOS - Message Retriever - DISPMSG.ASM Module                

 1854  FFFF			
 1856  FFFF			
 1858  FFFF			
 185A  0000			
 185C  00			
 185D  00			
 185E  00			
 185F  0004[			
	   00			
			 ]	
 1863  00			
				
								       ;;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				
 1864				CODE	ENDS
				
				include msgdcl.inc
			     C	; This Macro was removed from sysmsg.inc. We had to remove this
			     C	; macro and put it into it's own include file in order to clear up
			     C	; some assembly errors. MS MASM will not allow a public declaration
			     C	; during the second pass of the assembler. IBM MASM will allow this.
			     C	;
			     C	;
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;;	$M_DECLARE	     Macro
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C					       ;
			     C	$M_DECLARE    macro	numcls	       ;
			     C	   $M_DCOUNT = 0		       ;
			     C	   REPT  numcls 		       ;
			     C	     $M_DCOUNT =  $M_DCOUNT + 1        ;
			     C	     $M_DECLARE2  %$M_DCOUNT	       ;
			     C	   ENDM 			       ;
			     C	
			     C	  IF COMR
			     C	    IFNDEF $M_RT2			;  If Resident table is not in this assembly,
			     C		EXTRN	$M_RT2:BYTE		;     Must be external
			     C	    ELSE
			     C		PUBLIC	$M_RT2
			     C	    ENDIF				;
			     C	  ELSE
			     C	    IFNDEF $M_RT			;  If Resident table is not in this assembly,
			     C		EXTRN	$M_RT:BYTE		;     Must be external
			     C	    ELSE
			     C		PUBLIC	$M_RT
			     C	    ENDIF				;
			     C	  ENDIF
			     C	
			     C	  $M_CHECK $M_GET_MSG_ADDRESS	      ;  If this subroutine is not in this assembly,
			     C	  $M_CHECK $M_MSGSERV_1 	      ;  If this subroutine is not in this assembly,
			     C	  $M_CHECK $M_MSGSERV_2 	      ;  If this subroutine is not in this assembly,
			     C	
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-47
DOS - Message Retriever - DISPMSG.ASM Module                

			     C	ENDM				       ;
			     C					       ;
			     C	$M_DECLARE2   macro   innum	       ;
			     C	  IF NOT COMR			       ; IF Not resident COMMAND.COM
			     C	    IF NOT COMT 			 ; IF Not transient COMMAND.COM
			     C	      IFNDEF  $M_CLS_&innum		 ; IF class is not in this assembly,
			     C		IF	FARmsg			 ;
			     C		  EXTRN   $M_CLS_&innum:FAR	 ;    Must be external
			     C		ELSE				 ;
			     C		  EXTRN   $M_CLS_&innum:NEAR	 ;    Must be external
			     C		ENDIF				 ;
			     C	      ELSE				 ; ELSE
			     C		PUBLIC	$M_CLS_&innum		 ;    Label PUBLIC
			     C	      ENDIF				 ;
			     C	    ELSE				 ; ELSE
			     C	      IFDIF  <$M_CLS_&innum>,<$M_CLS_1>  ; IF NOT $M_CLS_1 or
			     C		IFDIF <$M_CLS_&innum>,<$M_CLS_2> ;   IF NOT $M_CLS_2 then
			     C		  IFNDEF  $M_CLS_&innum 	 ;     IF class is not in this assembly,
			     C		    IF	    FARmsg		 ;
			     C		      EXTRN   $M_CLS_&innum:FAR  ;	 Must be external
			     C		    ELSE			 ;
			     C		      EXTRN   $M_CLS_&innum:NEAR ;	 Must be external
			     C		    ENDIF			 ;
			     C		  ELSE				 ;     ELSE
			     C		    PUBLIC  $M_CLS_&innum	 ;	 Label PUBLIC
			     C		  ENDIF 			 ;
			     C		ENDIF				 ;
			     C	      ENDIF				 ;
			     C	    ENDIF				 ;
			     C	  ELSE					 ; ELSE
			     C	    IFDIF  <$M_CLS_&innum>,<$M_CLS_1>	 ; IF NOT $M_CLS_1 or
			     C	      IFDIF <$M_CLS_&innum>,<$M_CLS_2>	 ;   IF NOT $M_CLS_2 then
			     C		IFNDEF	$M_CLS_&innum		 ;     IF class is not in this assembly,
			     C		  IF	  FARmsg		 ;
			     C		    EXTRN   $M_CLS_&innum:FAR	 ;	 Must be external
			     C		  ELSE				 ;
			     C		    EXTRN   $M_CLS_&innum:NEAR	 ;	 Must be external
			     C		  ENDIF 			 ;
			     C		ELSE				 ;     ELSE
			     C		  PUBLIC  $M_CLS_&innum 	 ;	 Label PUBLIC
			     C		ENDIF				 ;
			     C	      ENDIF				 ;
			     C	    ENDIF				 ;
			     C	  ENDIF 			       ;
			     C	ENDM				       ;
			     C					       ;
			     C	$M_CHECK      macro   parm	       ;
			     C	  IFNDEF  parm			       ; IF class is not in this assembly,
			     C	    IF	    FARmsg		       ;
			     C	      EXTRN   parm:FAR		       ;    Must be external
			     C	    ELSE			       ;
			     C	      EXTRN   parm:NEAR 	       ;    Must be external
			     C	    ENDIF			       ;
			     C	  ELSE
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Page     1-48
DOS - Message Retriever - DISPMSG.ASM Module                

			     C	    IF COMR
			     C	    ELSE
			     C	      PUBLIC parm
			     C	    ENDIF
			     C	  ENDIF 			       ;
			     C	ENDM				       ;
			     C					       ;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C					       ;
			     C					       ;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	
			     C	
				
					END

Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Symbols-1


Macros:

		N a m e			Lines

$M_BUILD_PTRS  . . . . . . . . .  	  18
$M_CHECK . . . . . . . . . . . .  	  12
$M_DECLARE . . . . . . . . . . .  	  21
$M_DECLARE2  . . . . . . . . . .  	  41
$M_INC . . . . . . . . . . . . .  	   3
$M_MAKE  . . . . . . . . . . . .  	  10
$M_MAKE_COMR . . . . . . . . . .  	  21
$M_MAKE_COMT . . . . . . . . . .  	   5
$M_POPF  . . . . . . . . . . . .  	   5
.ELSE  . . . . . . . . . . . . .  	  21
.ELSEIF  . . . . . . . . . . . .  	  16
.ENDIF . . . . . . . . . . . . .  	  11
.ENDSELECT . . . . . . . . . . .  	  15
.ENDWHILE  . . . . . . . . . . .  	  10
.FOR . . . . . . . . . . . . . .  	  23
.IF  . . . . . . . . . . . . . .  	  13
.LEAVE . . . . . . . . . . . . .  	   1
.LOOP  . . . . . . . . . . . . .  	  12
.NEXT  . . . . . . . . . . . . .  	  20
.OTHERWISE . . . . . . . . . . .  	  21
.REPEAT  . . . . . . . . . . . .  	   9
.SELECT  . . . . . . . . . . . .  	   4
.THEN  . . . . . . . . . . . . .  	   6
.UNTIL . . . . . . . . . . . . .  	   1
.WHEN  . . . . . . . . . . . . .  	  24
.WHILE . . . . . . . . . . . . .  	  14
MSG_SERVICES . . . . . . . . . .  	  34
MSG_SERVICES2  . . . . . . . . .  	  14
MSG_UTILNAME . . . . . . . . . .  	   5

Structures and Records:

                N a m e                 Width   # fields
                                        Shift   Width   Mask    Initial

$M_CLASS_ID  . . . . . . . . . .  	0004	0003
  $M_CLS_ID  . . . . . . . . . .  	0000
  $M_COMMAND_VER . . . . . . . .  	0001
  $M_NUM_CLS_MSG . . . . . . . .  	0003
$M_COUNTRY_INFO  . . . . . . . .  	0056	000A
  $M_HEADER  . . . . . . . . . .  	0000
  $M_DATE_FORMAT . . . . . . . .  	0044
  $M_CURR_SEPARA . . . . . . . .  	0046
  $M_THOU_SEPARA . . . . . . . .  	004B
  $M_DECI_SEPARA . . . . . . . .  	004D
  $M_DATE_SEPARA . . . . . . . .  	004F
  $M_TIME_SEPARA . . . . . . . .  	0051
  $M_CURR_FORMAT . . . . . . . .  	0053
  $M_SIG_DIGS_CU . . . . . . . .  	0054
  $M_TIME_FORMAT . . . . . . . .  	0055
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Symbols-2


$M_ID  . . . . . . . . . . . . .  	0004	0002
  $M_NUM . . . . . . . . . . . .  	0000
  $M_TXT_PTR . . . . . . . . . .  	0002
$M_RES_ADDRS . . . . . . . . . .  	0085	0017
  $M_EXT_ERR_ADDRS . . . . . . .  	0000
  $M_EXT_FILE  . . . . . . . . .  	0004
  $M_EXT_COMMAND . . . . . . . .  	0008
  $M_EXT_TERM  . . . . . . . . .  	000C
  $M_PARSE_COMMAND . . . . . . .  	0010
  $M_PARSE_ADDRS . . . . . . . .  	0014
  $M_PARSE_TERM  . . . . . . . .  	0018
  $M_CRIT_ADDRS  . . . . . . . .  	001C
  $M_CRIT_COMMAND  . . . . . . .  	0020
  $M_CRIT_TERM . . . . . . . . .  	0024
  $M_DISK_PROC_ADDR  . . . . . .  	0028
  $M_CLASS_ADDRS . . . . . . . .  	002C
  $M_CLS_TERM  . . . . . . . . .  	0030
  $M_DBCS_VEC  . . . . . . . . .  	0034
  $M_HANDLE  . . . . . . . . . .  	0038
  $M_SIZE  . . . . . . . . . . .  	003A
  $M_CRLF  . . . . . . . . . . .  	003B
  $M_CLASS . . . . . . . . . . .  	003D
  $M_RETURN_ADDR . . . . . . . .  	003E
  $M_MSG_NUM . . . . . . . . . .  	0040
  $M_DIVISOR . . . . . . . . . .  	0042
  $M_TEMP_BUF  . . . . . . . . .  	0044
  $M_BUF_TERM  . . . . . . . . .  	0084
$M_SUBLIST_STRUC . . . . . . . .  	000B	0008
  $M_S_SIZE  . . . . . . . . . .  	0000
  $M_S_RESV  . . . . . . . . . .  	0001
  $M_S_VALUE . . . . . . . . . .  	0002
  $M_S_ID  . . . . . . . . . . .  	0006
  $M_S_FLAG  . . . . . . . . . .  	0007
  $M_S_MAXW  . . . . . . . . . .  	0008
  $M_S_MINW  . . . . . . . . . .  	0009
  $M_S_PAD . . . . . . . . . . .  	000A
DESIG_CP_STRUC . . . . . . . . .  	0008	0004
  NUM_DESIGNATES . . . . . . . .  	0000
  NUM_FONTS  . . . . . . . . . .  	0002
  NUM_HW_CPS . . . . . . . . . .  	0004
  DESIG_CP_ENTRY . . . . . . . .  	0006
KEYBSYS_CP_PTRS  . . . . . . . .  	0006	0002
  KC_CODE_PAGE . . . . . . . . .  	0000
  KC_ENTRY_PTR . . . . . . . . .  	0002
KEYBSYS_HEADER . . . . . . . . .  	001D	0009
  KH_SIGNATURE . . . . . . . . .  	0000
  KH_RESV_1  . . . . . . . . . .  	0008
  KH_MAX_COM_SZ  . . . . . . . .  	0010
  KH_MAX_SPEC_SZ . . . . . . . .  	0012
  KH_MAX_LOGIC_SZ  . . . . . . .  	0014
  KH_RESV_2  . . . . . . . . . .  	0016
  KH_NUM_ID  . . . . . . . . . .  	0018
  KH_NUM_LANG  . . . . . . . . .  	001A
  KH_LANG_PTRS . . . . . . . . .  	001C
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Symbols-3


KEYBSYS_ID_PTRS  . . . . . . . .  	0006	0002
  KP_ID_CODE . . . . . . . . . .  	0000
  KP_LANG_PTR  . . . . . . . . .  	0002
KEYBSYS_LANG_ENTRY . . . . . . .  	000B	0006
  KL_LANG_CODE . . . . . . . . .  	0000
  KL_ID_CODE . . . . . . . . . .  	0002
  KL_LOGIC_PTR . . . . . . . . .  	0004
  KL_NUM_ID  . . . . . . . . . .  	0008
  KL_NUM_CP  . . . . . . . . . .  	0009
  KL_CP_PTRS . . . . . . . . . .  	000A
KEYBSYS_LANG_PTRS  . . . . . . .  	0006	0002
  KP_LANG_CODE . . . . . . . . .  	0000
  KP_ENTRY_PTR . . . . . . . . .  	0002
KEYBSYS_STATE  . . . . . . . . .  	0008	0005
  KX_STATE_LEN . . . . . . . . .  	0000
  KX_STATE_ID  . . . . . . . . .  	0002
  KX_KBD_TYPE  . . . . . . . . .  	0003
  KX_ERROR_CHAR  . . . . . . . .  	0005
  KX_FIRST_XLAT  . . . . . . . .  	0007
KEYBSYS_STATE_LOGIC  . . . . . .  	0005	0003
  KT_LOGIC_LEN . . . . . . . . .  	0000
  KT_SPECIAL_FEATURES  . . . . .  	0002
  KT_LOGIC_CMDS  . . . . . . . .  	0004
KEYBSYS_XLAT_SECT  . . . . . . .  	0005	0003
  KX_SECTION_LEN . . . . . . . .  	0000
  KX_CP_ID . . . . . . . . . . .  	0002
  KX_FIRST_STATE . . . . . . . .  	0004
PARM_LIST  . . . . . . . . . . .  	000E	0009
  RET_CODE_1 . . . . . . . . . .  	0000
  RET_CODE_2 . . . . . . . . . .  	0001
  RET_CODE_3 . . . . . . . . . .  	0002
  RET_CODE_4 . . . . . . . . . .  	0003
  LANGUAGE_PARM  . . . . . . . .  	0004
  CODE_PAGE_PARM . . . . . . . .  	0006
  PATH_OFFSET  . . . . . . . . .  	0008
  PATH_LENGTH  . . . . . . . . .  	000A
  ID_PARM  . . . . . . . . . . .  	000C
SET_FLAG_STR . . . . . . . . . .  	0004	0004
  SF_NUM . . . . . . . . . . . .  	0000
  SF_SCAN_CODE . . . . . . . . .  	0001
  SF_FLAG_ID . . . . . . . . . .  	0002
  SF_FLAG_MASK . . . . . . . . .  	0003
SHARED_DATA_STR  . . . . . . . .  	0030	0017
  OLD_INT_9  . . . . . . . . . .  	0000
  OLD_INT_2F . . . . . . . . . .  	0004
  OLD_INT_48 . . . . . . . . . .  	0008
  KEYB_TYPE  . . . . . . . . . .  	000C
  SYSTEM_FLAG  . . . . . . . . .  	000E
  TABLE_OK . . . . . . . . . . .  	0010
  JR_KB_FLAG . . . . . . . . . .  	0011
  TIMING_FACTOR  . . . . . . . .  	0012
  ACTIVE_LANGUAGE  . . . . . . .  	0016
  INVOKED_CP_TABLE . . . . . . .  	0018
  INVOKED_KBD_ID . . . . . . . .  	001A
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Symbols-4


  ACTIVE_XLAT_PTR  . . . . . . .  	001C
  FIRST_XLAT_PTR . . . . . . . .  	001E
  RESIDENT_END . . . . . . . . .  	0020
  LOGIC_PTR  . . . . . . . . . .  	0022
  COMMON_XLAT_PTR  . . . . . . .  	0024
  SPECIAL_FEATURES . . . . . . .  	0026
  TABLE_OVERFLOW . . . . . . . .  	0028
  HOT_KEY_ON_SCAN  . . . . . . .  	0029
  HOT_KEY_OFF_SCAN . . . . . . .  	002A
  TABLE_AREA . . . . . . . . . .  	002F
STATE_LOGIC_STR  . . . . . . . .  	0005	0003
  SL_LOGIC_LEN . . . . . . . . .  	0000
  SL_SPECIAL_FEATURES  . . . . .  	0002
  SL_LOGIC_CMDS  . . . . . . . .  	0004
STATE_STR  . . . . . . . . . . .  	0008	0005
  XS_STATE_LEN . . . . . . . . .  	0000
  XS_STATE_ID  . . . . . . . . .  	0002
  XS_KBD_TYPE  . . . . . . . . .  	0003
  XS_ERROR_CHAR  . . . . . . . .  	0005
  XS_FIRST_TAB . . . . . . . . .  	0007
XLAT_SECT_STR  . . . . . . . . .  	0005	0003
  XS_NEXT_SECT_PTR . . . . . . .  	0000
  XS_CP_ID . . . . . . . . . . .  	0002
  XS_FIRST_STATE . . . . . . . .  	0004
XLAT_STR . . . . . . . . . . . .  	0003	0002
  XLAT_TAB_SIZE  . . . . . . . .  	0000
  XLAT_OPTIONS . . . . . . . . .  	0002
XLAT_TYPE_1_STR  . . . . . . . .  	0006	0004
  XLAT_SCAN_LO . . . . . . . . .  	0003
  XLAT_SCAN_HI . . . . . . . . .  	0004
  XLAT_1_BUF_ENTRY . . . . . . .  	0005
XLAT_TYPE_2_STR  . . . . . . . .  	0006	0004
  XLAT_NUM . . . . . . . . . . .  	0003
  XLAT_SCAN  . . . . . . . . . .  	0004
  XLAT_2_BUF_ENTRY . . . . . . .  	0005

Segments and Groups:

                N a m e         	Length	 Align	Combine Class

ABS0 . . . . . . . . . . . . . .  	7C00	AT	0000	
CODE . . . . . . . . . . . . . .  	1864	PARA	PUBLIC	'CODE'
DATA . . . . . . . . . . . . . .  	00A1	AT	0040	
STACK  . . . . . . . . . . . . .  	0100	AT	0030	
VIDEO_RAM  . . . . . . . . . . .  	4000	AT	B800	
XXDATA . . . . . . . . . . . . .  	0001	AT	0050	

Symbols:            

                N a m e         	Type	 Value	 Attr

ABORT_LOOP . . . . . . . . . . .  	L NEAR	054C	CODE
ACTION_39  . . . . . . . . . . .  	NUMBER	0004	
ACTIVE_PAGE  . . . . . . . . . .  	L BYTE	0062	DATA
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Symbols-5


ACT_CON_CP . . . . . . . . . . .  	NUMBER	0005	
ACT_ID . . . . . . . . . . . . .  	NUMBER	0003	
ACT_KEYB . . . . . . . . . . . .  	NUMBER	0002	
ACT_KEYB_CP  . . . . . . . . . .  	NUMBER	0004	
ADDR_6845  . . . . . . . . . . .  	L WORD	0063	DATA
ADVANCE_PTR  . . . . . . . . . .  	L NEAR	054E	CODE
ALPHA  . . . . . . . . . . . . .  	L BYTE	0009	CODE	Global
ALT_EXPECTED_VERSION . . . . . .  	NUMBER	1A05	
ALT_GOOD_DOS . . . . . . . . . .  	L NEAR	0E64	CODE
ALT_INPUT  . . . . . . . . . . .  	L BYTE	0019	DATA
ALT_KEY  . . . . . . . . . . . .  	NUMBER	0038	
ALT_MAJOR_VERSION  . . . . . . .  	NUMBER	0005	
ALT_MINOR_VERSION  . . . . . . .  	NUMBER	001A	
ALT_SHIFT  . . . . . . . . . . .  	NUMBER	0008	
AMIS_ID  . . . . . . . . . . . .  	L NEAR	0D2A	CODE
AMIS_ID_MSG  . . . . . . . . . .  	L NEAR	0D2F	CODE
AMIS_ID_MSG_END  . . . . . . . .  	L NEAR	0D33	CODE
amis_sign  . . . . . . . . . . .  	L NEAR	0D1A	CODE	Global
AMIS_SIGN_SEGMENT  . . . . . . .  	ALIAS	 CODE		
ANDF_COMMAND . . . . . . . . . .  	NUMBER	0010	
ANY_KB . . . . . . . . . . . . .  	NUMBER	FFFF	
APPEND_KEYB_SYS  . . . . . . . .  	L NEAR	0B42	CODE
ARE_WE_A_PCJR  . . . . . . . . .  	L NEAR	09AB	CODE
ASCII_ONLY . . . . . . . . . . .  	NUMBER	0080	
ASC_ONLY_TAB_2_ENT_SZ  . . . . .  	NUMBER	0002	
AT_KB  . . . . . . . . . . . . .  	NUMBER	2000	
A_MATCH  . . . . . . . . . . . .  	L NEAR	0A09	CODE

BAD_ADDR_MARK  . . . . . . . . .  	NUMBER	0002	
BAD_BAT  . . . . . . . . . . . .  	NUMBER	0080	
BAD_CKSUM  . . . . . . . . . . .  	NUMBER	0040	
BAD_CMD  . . . . . . . . . . . .  	NUMBER	0001	
BAD_CONFIG . . . . . . . . . . .  	NUMBER	0020	
BAD_CRC  . . . . . . . . . . . .  	NUMBER	0010	
BAD_DMA  . . . . . . . . . . . .  	NUMBER	0008	
BAD_DOS_VER  . . . . . . . . . .  	NUMBER	0007	
BAD_ID . . . . . . . . . . . . .  	L BYTE	0008	CODE	Global
BAD_KEYB_DEF_FILE  . . . . . . .  	NUMBER	0002	
BAD_NEC  . . . . . . . . . . . .  	NUMBER	0020	
BAD_SEEK . . . . . . . . . . . .  	NUMBER	0040	
BAD_TAB  . . . . . . . . . . . .  	L NEAR	0A7F	CODE
BASE_RAM . . . . . . . . . . . .  	NUMBER	0010	
BASIC_PTR  . . . . . . . . . . .  	L WORD	0060	ABS0
BATTERY_COND_STATUS  . . . . . .  	NUMBER	008D	
BEEP_COMMAND . . . . . . . . . .  	NUMBER	00A0	
BEEP_PENDING . . . . . . . . . .  	V BYTE	0000	CODE	External
BEGIN_PARM_CHECK . . . . . . . .  	L NEAR	02ED	CODE
BELL . . . . . . . . . . . . . .  	NUMBER	0007	
BIN_HEX_BYTE . . . . . . . . . .  	NUMBER	0013	
BIN_HEX_DWORD  . . . . . . . . .  	NUMBER	0033	
BIN_HEX_TYPE . . . . . . . . . .  	NUMBER	0003	
BIN_HEX_WORD . . . . . . . . . .  	NUMBER	0023	
BIOS_BREAK . . . . . . . . . . .  	L BYTE	0071	DATA
BOOT_LOCN  . . . . . . . . . . .  	L FAR 	7C00	ABS0
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Symbols-6


BOOT_VEC . . . . . . . . . . . .  	L DWORD	0064	ABS0
BOOT_VECTOR  . . . . . . . . . .  	L DWORD	0064	ABS0
BUFFER_CREATED . . . . . . . . .  	L NEAR	0636	CODE
BUFFER_END . . . . . . . . . . .  	L WORD	0082	DATA
BUFFER_FILL  . . . . . . . . . .  	L NEAR	0000	CODE	External
BUFFER_HEAD  . . . . . . . . . .  	L WORD	001A	DATA
BUFFER_START . . . . . . . . . .  	L WORD	0080	DATA
BUFFER_TAIL  . . . . . . . . . .  	L WORD	001C	DATA
BUILD_PATH . . . . . . . . . . .  	N PROC	0B28	CODE	Length = 0067
BUILD_THE_TABLE  . . . . . . . .  	L NEAR	06DE	CODE
BUSY_TFLAG . . . . . . . . . . .  	V BYTE	0000	CODE	External

CADR_PRT . . . . . . . . . . . .  	NUMBER	0070	
CALL_FIRST_STAGE . . . . . . . .  	L NEAR	02E8	CODE
CAPS_KEY . . . . . . . . . . . .  	NUMBER	003A	
CAPS_SHIFT . . . . . . . . . . .  	NUMBER	0040	
CAPS_STATE . . . . . . . . . . .  	NUMBER	0040	
CDATA_PRT  . . . . . . . . . . .  	NUMBER	0071	
CHARMSG  . . . . . . . . . . . .  	NUMBER	FFFF	
CHAR_FIELD_ASCIIZ  . . . . . . .  	NUMBER	0010	
CHAR_FIELD_CHAR  . . . . . . . .  	NUMBER	0000	
CHAR_TYPE  . . . . . . . . . . .  	NUMBER	0000	
CHECK_AMIS . . . . . . . . . . .  	L NEAR	0E08	CODE
CHECK_AMIS_DONE  . . . . . . . .  	L NEAR	0E3F	CODE
CHECK_AMIS_LOOP  . . . . . . . .  	L NEAR	0E11	CODE
CHECK_AMIS_NEXT  . . . . . . . .  	L NEAR	0E3A	CODE
CHECK_AMIS_UNSUP . . . . . . . .  	L NEAR	0E3E	CODE
CHECK_CORE_COMMAND . . . . . . .  	NUMBER	00C0	
CHECK_ERROR2 . . . . . . . . . .  	L NEAR	06FF	CODE
CHECK_ERROR3 . . . . . . . . . .  	L NEAR	0707	CODE
CHECK_ERROR4 . . . . . . . . . .  	L NEAR	070F	CODE
CHECK_ERROR5A  . . . . . . . . .  	L NEAR	0717	CODE
CHECK_ERROR6A  . . . . . . . . .  	L NEAR	071F	CODE
CHECK_ERRORS . . . . . . . . . .  	L NEAR	06E1	CODE
CHECK_ERROR_CONTINUE . . . . . .  	L NEAR	06F7	CODE
CHECK_FOR_INV_CP . . . . . . . .  	L NEAR	0722	CODE
CHGLN  . . . . . . . . . . . . .  	NUMBER	0002	
CHK1N4 . . . . . . . . . . . . .  	L NEAR	052D	CODE
CHK4PARM . . . . . . . . . . . .  	L NEAR	053F	CODE
CIRCUS_SYSTEM  . . . . . . . . .  	NUMBER	0008	
CLASS_1_MESSAGECOUNT . . . . . .  	NUMBER	0001	
CLASS_2_MESSAGECOUNT . . . . . .  	NUMBER	0008	
CLASS_A_MESSAGECOUNT . . . . . .  	NUMBER	0012	
CLK_UP . . . . . . . . . . . . .  	NUMBER	008A	
CMD_BLOCK  . . . . . . . . . . .  	L BYTE	0042	DATA
CMD_DATA . . . . . . . . . . . .  	NUMBER	0008	
CMD_PARM_LIST  . . . . . . . . .  	L 	0219	CODE
CMOSDSB_ADDR . . . . . . . . . .  	NUMBER	000E	
CMOSDSK_BYTE . . . . . . . . . .  	NUMBER	0010	
CMOS_ALARM . . . . . . . . . . .  	NUMBER	008B	
CMOS_BEGIN . . . . . . . . . . .  	NUMBER	0090	
CMOS_CLK_FAIL  . . . . . . . . .  	NUMBER	0004	
CMOS_END . . . . . . . . . . . .  	NUMBER	00AD	
CMOS_GOOD  . . . . . . . . . . .  	NUMBER	00C0	
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Symbols-7


CMOS_PORT  . . . . . . . . . . .  	NUMBER	0070	
CODE_PAGE_DESIGNATED . . . . . .  	L NEAR	067C	CODE
CODE_PAGE_FOUND  . . . . . . . .  	L NEAR	05CD	CODE
CODE_PAGE_INVALID  . . . . . . .  	NUMBER	0001	
CODE_PAGE_SPECIFIED  . . . . . .  	L NEAR	0592	CODE
CODE_PAGE_VALID  . . . . . . . .  	NUMBER	0000	
COLON  . . . . . . . . . . . . .  	NUMBER	003A	
COMMAND_BITS . . . . . . . . . .  	NUMBER	00F0	
COMMAND_SHIFT  . . . . . . . . .  	NUMBER	0004	
COMR . . . . . . . . . . . . . .  	NUMBER	0000	
COMT . . . . . . . . . . . . . .  	NUMBER	0000	
CONSOLE_ERROR  . . . . . . . . .  	NUMBER	0004	
CONTINUE_INSTALL . . . . . . . .  	L NEAR	06D8	CODE
CONTROL_BYTE . . . . . . . . . .  	L BYTE	0076	DATA
CON_INSTALLED  . . . . . . . . .  	L WORD	020E	CODE
CON_INSTALL_CHECK  . . . . . . .  	L NEAR	02D6	CODE
CON_NOT_INSTALLED  . . . . . . .  	L NEAR	0432	CODE
COPY_ARGV0 . . . . . . . . . . .  	N PROC	0B8F	CODE	Length = 0044
COPY_INTO_SDA  . . . . . . . . .  	L NEAR	08F5	CODE
COPY_SD_AREA . . . . . . . . . .  	L NEAR	0000	CODE	External
COUNTRY_FLAG . . . . . . . . . .  	V BYTE	0000	CODE	External
CPN_INVALID  . . . . . . . . . .  	V WORD	0000	CODE	External
CP_NOT_DESIGNATED  . . . . . . .  	NUMBER	0005	
CP_PTR_SIZE  . . . . . . . . . .  	L WORD	0206	CODE	Global
CP_TAB_OFFSET  . . . . . . . . .  	L DWORD	01D6	CODE	Global
CR . . . . . . . . . . . . . . .  	NUMBER	000D	
CRT_COLS . . . . . . . . . . . .  	L WORD	004A	DATA
CRT_LEN  . . . . . . . . . . . .  	L WORD	004C	DATA
CRT_MODE . . . . . . . . . . . .  	L BYTE	0049	DATA
CRT_MODE_SET . . . . . . . . . .  	L BYTE	0065	DATA
CRT_PALLETTE . . . . . . . . . .  	L BYTE	0066	DATA
CRT_START  . . . . . . . . . . .  	L WORD	004E	DATA
CR_LF  . . . . . . . . . . . . .  	L BYTE	0001	CODE
CTL_KEY  . . . . . . . . . . . .  	NUMBER	001D	
CTL_SHIFT  . . . . . . . . . . .  	NUMBER	0004	
CURSOR_MODE  . . . . . . . . . .  	L WORD	0060	DATA
CURSOR_POSN  . . . . . . . . . .  	L WORD	0050	DATA	Length = 0008
CUR_PTR  . . . . . . . . . . . .  	V WORD	0000		External
C_EQUIP  . . . . . . . . . . . .  	NUMBER	0094	

DATA_AREA  . . . . . . . . . . .  	L BYTE	0400	ABS0
DATA_WORD  . . . . . . . . . . .  	L WORD	0400	ABS0
DATEMSG  . . . . . . . . . . . .  	NUMBER	0000	
DATE_MD  . . . . . . . . . . . .  	NUMBER	0014	
DATE_MDY_2 . . . . . . . . . . .  	NUMBER	0024	
DATE_MDY_4 . . . . . . . . . . .  	NUMBER	0034	
DATE_TYPE  . . . . . . . . . . .  	NUMBER	0004	
DD_MASK  . . . . . . . . . . . .  	NUMBER	0010	
DEFAULT_TAB_2_ENT_SZ . . . . . .  	NUMBER	0003	
DEL_KEY  . . . . . . . . . . . .  	NUMBER	0053	
DESIG_CP_BUFFER  . . . . . . . .  	L WORD	019A	CODE	Global	Length = 001C
DESIG_CP_BUF_LEN . . . . . . . .  	L WORD	01D2	CODE
DESIG_CP_OFFSET  . . . . . . . .  	L WORD	01EA	CODE	Global
DESIG_LIST . . . . . . . . . . .  	L WORD	01EE	CODE
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Symbols-8


DETERMINED . . . . . . . . . . .  	NUMBER	0010	
DIAG_STATUS  . . . . . . . . . .  	NUMBER	008E	
DISABLE_BIT20  . . . . . . . . .  	NUMBER	00DD	
DISKETTE_STATUS  . . . . . . . .  	L BYTE	0041	DATA
DISK_POINTER . . . . . . . . . .  	L DWORD	0078	ABS0
DISK_PROC  . . . . . . . . . . .  	NUMBER	0000	
DISK_STATUS1 . . . . . . . . . .  	L BYTE	0074	DATA
DISK_VECTOR  . . . . . . . . . .  	L DWORD	0100	ABS0
DISPLAYMSG . . . . . . . . . . .  	NUMBER	0000	
DISPLAY_ACTIVE_CP  . . . . . . .  	L NEAR	040F	CODE
DIS_KBD  . . . . . . . . . . . .  	NUMBER	00AD	
DMA  . . . . . . . . . . . . . .  	NUMBER	0000	
DMA08  . . . . . . . . . . . . .  	NUMBER	0008	
DMA1 . . . . . . . . . . . . . .  	NUMBER	00C0	
DMA18  . . . . . . . . . . . . .  	NUMBER	00D0	
DMA_BOUNDARY . . . . . . . . . .  	NUMBER	0009	
DMA_PAGE . . . . . . . . . . . .  	NUMBER	0081	
DONE . . . . . . . . . . . . . .  	L NEAR	05D9	CODE
DOS_BUF_KEYB_INP . . . . . . . .  	NUMBER	000A	
DOS_CLOSE_FILE . . . . . . . . .  	NUMBER	003E	
DOS_CLR_KEYB_BUF . . . . . . . .  	NUMBER	000C	
DOS_CLR_KEYB_BUF_MASK  . . . . .  	NUMBER	00C0	
DOS_CON_INP  . . . . . . . . . .  	NUMBER	0008	
DOS_DIR_CON_INP  . . . . . . . .  	NUMBER	0007	
DOS_DISP_CHAR  . . . . . . . . .  	NUMBER	0002	
DOS_DISP_STRING  . . . . . . . .  	NUMBER	0009	
DOS_EXTENDED_OPEN  . . . . . . .  	NUMBER	6C00	
DOS_GET_ADDR . . . . . . . . . .  	NUMBER	0008	
DOS_GET_COUNTRY  . . . . . . . .  	NUMBER	0038	
DOS_GET_CRITICAL . . . . . . . .  	NUMBER	0004	
DOS_GET_DBCS_INFO  . . . . . . .  	NUMBER	6300	
DOS_GET_EXTENDED . . . . . . . .  	NUMBER	0000	
DOS_GET_EXT_ERROR  . . . . . . .  	NUMBER	0059	
DOS_GET_EXT_ERROR_BX . . . . . .  	NUMBER	0000	
DOS_GET_EXT_PARSE_ADD  . . . . .  	NUMBER	122E	
DOS_GET_FILE . . . . . . . . . .  	NUMBER	0006	
DOS_GET_PARSE  . . . . . . . . .  	NUMBER	0002	
DOS_GET_VERSION  . . . . . . . .  	NUMBER	0030	
DOS_IOCTL_GET_INFO . . . . . . .  	NUMBER	4400	
DOS_IOCTL_SET_INFO . . . . . . .  	NUMBER	4401	
DOS_KEYB_INP . . . . . . . . . .  	NUMBER	0001	
DOS_LSEEK_FILE . . . . . . . . .  	NUMBER	4200	
DOS_READ_BYTE  . . . . . . . . .  	NUMBER	003F	
DOS_SET_ADDR . . . . . . . . . .  	NUMBER	0009	
DOS_WRITE_HANDLE . . . . . . . .  	NUMBER	0040	
DOUBLE_STEP  . . . . . . . . . .  	NUMBER	0020	
DSK_CHG  . . . . . . . . . . . .  	NUMBER	0080	
DSK_FAIL . . . . . . . . . . . .  	NUMBER	0040	
DSK_STATE  . . . . . . . . . . .  	L BYTE	0090	DATA
DSK_TRK  . . . . . . . . . . . .  	L BYTE	0094	DATA
DSP_JMP  . . . . . . . . . . . .  	NUMBER	0040	
DUAL . . . . . . . . . . . . . .  	NUMBER	0001	

EITHER_ALT . . . . . . . . . . .  	NUMBER	0020	
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Symbols-9


EITHER_CTL . . . . . . . . . . .  	NUMBER	0040	
EITHER_SHIFT . . . . . . . . . .  	NUMBER	0080	
ELSEF_COMMAND  . . . . . . . . .  	NUMBER	0020	
ENABLE_BIT20 . . . . . . . . . .  	NUMBER	00DF	
ENABLE_FL  . . . . . . . . . . .  	V BYTE	0000	CODE	External
ENA_KBD  . . . . . . . . . . . .  	NUMBER	00AE	
ENDIFF_COMMAND . . . . . . . . .  	NUMBER	0030	
END_IDCHK  . . . . . . . . . . .  	L NEAR	0563	CODE
END_MATCH  . . . . . . . . . . .  	L NEAR	0A0F	CODE
EOI  . . . . . . . . . . . . . .  	NUMBER	0020	
EQUIP_FLAG . . . . . . . . . . .  	L WORD	0010	DATA
ERR1ID . . . . . . . . . . . . .  	L NEAR	07BF	CODE
ERR2ID . . . . . . . . . . . . .  	L NEAR	07D6	CODE
ERR4ID . . . . . . . . . . . . .  	L BYTE	01FD	CODE
ERROR1 . . . . . . . . . . . . .  	L NEAR	07ED	CODE
ERROR2 . . . . . . . . . . . . .  	L NEAR	0804	CODE
ERROR3 . . . . . . . . . . . . .  	L NEAR	081B	CODE
ERROR4 . . . . . . . . . . . . .  	L NEAR	0864	CODE
ERROR5 . . . . . . . . . . . . .  	L NEAR	087B	CODE
ERROR5A  . . . . . . . . . . . .  	L NEAR	0892	CODE
ERROR6 . . . . . . . . . . . . .  	L NEAR	08A9	CODE
ERROR6A  . . . . . . . . . . . .  	L NEAR	08C0	CODE
ERROR_BEEP . . . . . . . . . . .  	L NEAR	0000	CODE	External
ERROR_CLASS_39 . . . . . . . . .  	NUMBER	0001	
ERR_PART . . . . . . . . . . . .  	V WORD	0000		External
EXIT_IF_FOUND  . . . . . . . . .  	NUMBER	0080	
EXIT_INT_9_FLAG  . . . . . . . .  	NUMBER	0001	
EXIT_RET_CODE  . . . . . . . . .  	L BYTE	0000	CODE
EXIT_STATE_LOGIC_FLAG  . . . . .  	NUMBER	0002	
EXPECTED_VERSION . . . . . . . .  	NUMBER	0004	
EXT_16 . . . . . . . . . . . . .  	NUMBER	8000	
EXT_ERR_39 . . . . . . . . . . .  	NUMBER	0027	
EXT_ERR_CLASS  . . . . . . . . .  	NUMBER	0001	
EXT_KB_FLAG_ID . . . . . . . . .  	NUMBER	0004	
EXT_PTR  . . . . . . . . . . . .  	L DWORD	007C	ABS0

F11_M  . . . . . . . . . . . . .  	NUMBER	0057	
F12_M  . . . . . . . . . . . . .  	NUMBER	0058	
F1_SCAN  . . . . . . . . . . . .  	NUMBER	003B	
F2_SCAN  . . . . . . . . . . . .  	NUMBER	003C	
FALSE  . . . . . . . . . . . . .  	NUMBER	0000	
FARMSG . . . . . . . . . . . . .  	NUMBER	0000	
FB . . . . . . . . . . . . . . .  	ALIAS	 FILE_BUFFER		
FILE_BUFFER  . . . . . . . . . .  	L BYTE	006E	CODE	Global	Length = 012C
FILE_BUFFER_SIZE . . . . . . . .  	NUMBER	012C		Global
FILE_NAME  . . . . . . . . . . .  	L BYTE	0AA8	CODE	Length = 0080
FILE_NOT_FOUND . . . . . . . . .  	NUMBER	0002	
FINALE . . . . . . . . . . . . .  	L NEAR	0A8C	CODE
FINDID . . . . . . . . . . . . .  	L NEAR	04DD	CODE
FIND_CP_TABLE  . . . . . . . . .  	L NEAR	0000	CODE	External
FIND_FIRST_BEGIN . . . . . . . .  	L NEAR	0BEE	CODE
FIND_FIRST_CP  . . . . . . . . .  	N PROC	0BD3	CODE	Length = 0062
FIND_FIRST_CP_ERROR4 . . . . . .  	L NEAR	0C2D	CODE
FIND_FIRST_RETURN  . . . . . . .  	L NEAR	0C30	CODE
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Symbols-10


FIND_FIRST_VALID4  . . . . . . .  	L NEAR	0BFF	CODE
FIND_FIRST_VALID5  . . . . . . .  	L NEAR	0C16	CODE
FIND_FIRST_VALID6  . . . . . . .  	L NEAR	0C1F	CODE
FIND_KEYB_TYPE . . . . . . . . .  	L NEAR	0000	CODE	External
FIND_SYS_TYPE  . . . . . . . . .  	L NEAR	0000	CODE	External
FLAG_ID_BITS . . . . . . . . . .  	NUMBER	0007	
FORMFD . . . . . . . . . . . . .  	NUMBER	000C	
FOURTH_PARM  . . . . . . . . . .  	L BYTE	0004	CODE	Global
FTH_PARMID . . . . . . . . . . .  	L BYTE	0006	CODE	Global

GETMSG . . . . . . . . . . . . .  	NUMBER	0000	
GET_ACTIVE_CP  . . . . . . . . .  	L NEAR	0405	CODE
GET_DESIG_CPS  . . . . . . . . .  	L NEAR	0619	CODE
GET_ID . . . . . . . . . . . . .  	L NEAR	04D2	CODE
GET_LANG . . . . . . . . . . . .  	L NEAR	0479	CODE
GOOD_MATCH . . . . . . . . . . .  	L WORD	0214	CODE
GOTO_COMMAND . . . . . . . . . .  	NUMBER	0090	
GRAPH_ON . . . . . . . . . . . .  	NUMBER	0008	
G_KB . . . . . . . . . . . . . .  	NUMBER	1000	

HD12_SETTLE  . . . . . . . . . .  	NUMBER	000F	
HD320_SETTLE . . . . . . . . . .  	NUMBER	0014	
HDISK_INT  . . . . . . . . . . .  	L DWORD	01D8	ABS0
HD_ERROR . . . . . . . . . . . .  	L BYTE	0042	DATA
HD_FILE_TYPE . . . . . . . . . .  	NUMBER	0092	
HF1_TBL_VEC  . . . . . . . . . .  	L DWORD	0118	ABS0
HF_BOOT  . . . . . . . . . . . .  	NUMBER	0020	
HF_CNTRL . . . . . . . . . . . .  	L BYTE	008F	DATA
HF_ERROR . . . . . . . . . . . .  	L BYTE	008D	DATA
HF_FAIL  . . . . . . . . . . . .  	NUMBER	0008	
HF_INT_FLAG  . . . . . . . . . .  	L BYTE	008E	DATA
HF_NUM . . . . . . . . . . . . .  	L BYTE	0075	DATA
HF_STATUS  . . . . . . . . . . .  	L BYTE	008C	DATA
HF_TBL_VEC . . . . . . . . . . .  	L DWORD	0104	ABS0
HOLD_STATE . . . . . . . . . . .  	NUMBER	0008	
HOME . . . . . . . . . . . . . .  	NUMBER	000B	
HW_TYPE  . . . . . . . . . . . .  	V WORD	0000	CODE	External

IDLANG_CHK . . . . . . . . . . .  	N PROC	09EF	CODE	Length = 0021
ID_1 . . . . . . . . . . . . . .  	NUMBER	00AB	
ID_2 . . . . . . . . . . . . . .  	NUMBER	0041	
ID_2A  . . . . . . . . . . . . .  	NUMBER	0054	
ID_DISPLAYED . . . . . . . . . .  	L BYTE	000A	CODE
ID_FOUND . . . . . . . . . . . .  	L BYTE	0007	CODE	Global
ID_HERE  . . . . . . . . . . . .  	L NEAR	0A87	CODE
ID_INVALID . . . . . . . . . . .  	NUMBER	0001	
ID_PTR_SIZE  . . . . . . . . . .  	L WORD	0202	CODE	Global
ID_SPECIFIED . . . . . . . . . .  	L NEAR	0A2F	CODE
ID_TAB_OFFSET  . . . . . . . . .  	L DWORD	01DE	CODE	Global
ID_TYPED . . . . . . . . . . . .  	L NEAR	0462	CODE
ID_VALID . . . . . . . . . . . .  	NUMBER	0000	
IFF_COMMAND  . . . . . . . . . .  	NUMBER	0000	
IFKBD_COMMAND  . . . . . . . . .  	NUMBER	0080	
IFSFUNC_INSTALLED  . . . . . . .  	NUMBER	00FF	
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Symbols-11


IFSFUNC_INSTALL_CHECK  . . . . .  	NUMBER	0500	
IFS_GET_ERR_TEXT . . . . . . . .  	NUMBER	0502	
INFO_STATUS  . . . . . . . . . .  	NUMBER	00B3	
INH_KEYBOARD . . . . . . . . . .  	NUMBER	0010	
INPT_BUF_FULL  . . . . . . . . .  	NUMBER	0002	
INPUT  . . . . . . . . . . . . .  	L NEAR	09EF	CODE
INPUTMSG . . . . . . . . . . . .  	NUMBER	0000	
INSTALLED_CON  . . . . . . . . .  	L NEAR	02E2	CODE
INSTALLED_KEYB . . . . . . . . .  	L NEAR	02BA	CODE
INSTALL_9_DONE_NET . . . . . . .  	L NEAR	0986	CODE
INSTALL_DONE . . . . . . . . . .  	L NEAR	09D4	CODE
INSTALL_INT_2F_48  . . . . . . .  	N PROC	098A	CODE	Length = 004B
INSTALL_INT_9  . . . . . . . . .  	N PROC	094E	CODE	Length = 0024
INSTALL_INT_9_NET  . . . . . . .  	N PROC	0972	CODE	Length = 0016
INS_KEY  . . . . . . . . . . . .  	NUMBER	0052	
INS_SHIFT  . . . . . . . . . . .  	NUMBER	0080	
INS_STATE  . . . . . . . . . . .  	NUMBER	0080	
INT5_PTR . . . . . . . . . . . .  	L WORD	0014	ABS0
INTA00 . . . . . . . . . . . . .  	NUMBER	0020	
INTA01 . . . . . . . . . . . . .  	NUMBER	0021	
INTB00 . . . . . . . . . . . . .  	NUMBER	00A0	
INTB01 . . . . . . . . . . . . .  	NUMBER	00A1	
INTR_FACE_CK . . . . . . . . . .  	NUMBER	00AB	
INTR_FLAG  . . . . . . . . . . .  	L BYTE	006B	DATA
INT_2F_SUB_FUNC  . . . . . . . .  	NUMBER	00AD	
INT_ADDR . . . . . . . . . . . .  	L WORD	0020	ABS0
INT_FLAG . . . . . . . . . . . .  	NUMBER	0080	
INT_PTR  . . . . . . . . . . . .  	L DWORD	0020	ABS0
INT_TYPE . . . . . . . . . . . .  	NUMBER	0070	
INT_VIDEO  . . . . . . . . . . .  	NUMBER	0010	
INVALID_DRV  . . . . . . . . . .  	NUMBER	0002	
INVALID_PARMS  . . . . . . . . .  	NUMBER	0001	
INVALID_SYNTAX . . . . . . . . .  	NUMBER	0001	
INV_COMBO  . . . . . . . . . . .  	NUMBER	0010	
INV_CON_Q  . . . . . . . . . . .  	NUMBER	000B	
INV_CP . . . . . . . . . . . . .  	NUMBER	0008	
INV_FN . . . . . . . . . . . . .  	NUMBER	0009	
INV_I  . . . . . . . . . . . . .  	NUMBER	0007	
INV_KEYB_Q . . . . . . . . . . .  	NUMBER	000A	
INV_L  . . . . . . . . . . . . .  	NUMBER	0006	
INV_S  . . . . . . . . . . . . .  	NUMBER	0012	
IO_CHK . . . . . . . . . . . . .  	NUMBER	0040	
IO_ROM_INIT  . . . . . . . . . .  	L WORD	0067	DATA
IO_ROM_SEG . . . . . . . . . . .  	L WORD	0069	DATA
I_MESSAGE  . . . . . . . . . . .  	L NEAR	0361	CODE

JR_HOT_KEY_1_2 . . . . . . . . .  	NUMBER	4000	
JR_KB  . . . . . . . . . . . . .  	NUMBER	8000	
JR_LANGUAGE_CODES  . . . . . . .  	L WORD	0227	CODE
JR_NUM_CODES . . . . . . . . . .  	NUMBER	0005	

K8 . . . . . . . . . . . . . . .  	V BYTE	0000	CODE	External
KBDINT . . . . . . . . . . . . .  	NUMBER	0002	
KBD_IN . . . . . . . . . . . . .  	NUMBER	0060	
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Symbols-12


KBX  . . . . . . . . . . . . . .  	NUMBER	0010	
KB_ACK . . . . . . . . . . . . .  	NUMBER	00FA	
KB_BREAK . . . . . . . . . . . .  	NUMBER	00F0	
KB_BUFFER  . . . . . . . . . . .  	L WORD	001E	DATA	Length = 0010
KB_BUFFER_END  . . . . . . . . .  	L WORD	003E	DATA
KB_CTL . . . . . . . . . . . . .  	NUMBER	0061	
KB_DATA  . . . . . . . . . . . .  	NUMBER	0060	
KB_ECHO  . . . . . . . . . . . .  	NUMBER	00FE	
KB_ENABLE  . . . . . . . . . . .  	NUMBER	00F4	
KB_ERR . . . . . . . . . . . . .  	NUMBER	0080	
KB_FA  . . . . . . . . . . . . .  	NUMBER	0010	
KB_FE  . . . . . . . . . . . . .  	NUMBER	0020	
KB_FLAG  . . . . . . . . . . . .  	L BYTE	0017	DATA
KB_FLAG_1  . . . . . . . . . . .  	L BYTE	0018	DATA
KB_FLAG_1_ID . . . . . . . . . .  	NUMBER	0001	
KB_FLAG_2  . . . . . . . . . . .  	L BYTE	0097	DATA
KB_FLAG_2_ID . . . . . . . . . .  	NUMBER	0002	
KB_FLAG_3  . . . . . . . . . . .  	L BYTE	0096	DATA
KB_FLAG_3_ID . . . . . . . . . .  	NUMBER	0003	
KB_FLAG_ID . . . . . . . . . . .  	NUMBER	0000	
KB_LEDS  . . . . . . . . . . . .  	NUMBER	0007	
KB_MAKE_BREAK  . . . . . . . . .  	NUMBER	00F7	
KB_MASK  . . . . . . . . . . . .  	NUMBER	0002	
KB_MENU  . . . . . . . . . . . .  	NUMBER	00F1	
KB_OK  . . . . . . . . . . . . .  	NUMBER	00AA	
KB_OVER_RUN  . . . . . . . . . .  	NUMBER	00FF	
KB_PR_LED  . . . . . . . . . . .  	NUMBER	0040	
KB_RESEND  . . . . . . . . . . .  	NUMBER	00FE	
KB_RESET . . . . . . . . . . . .  	NUMBER	00FF	
KB_TYPA_RD . . . . . . . . . . .  	NUMBER	00F3	
KEYBCMD_LANG_ENTRY_PTR . . . . .  	L DWORD	0208	CODE	Global
KEYBOARD_SYS . . . . . . . . . .  	L BYTE	0A8D	CODE
KEYBSYS_FILE_HANDLE  . . . . . .  	L WORD	01E6	CODE	Global
KEYB_COMMAND . . . . . . . . . .  	N PROC	0289	CODE	Global	Length = 06AF
KEYB_CP_FINISHED . . . . . . . .  	L NEAR	03FA	CODE
KEYB_EXIT  . . . . . . . . . . .  	L NEAR	0756	CODE
KEYB_EXIT3 . . . . . . . . . . .  	L NEAR	0926	CODE
KEYB_EXIT_NOT_RESIDENT . . . . .  	L NEAR	08E5	CODE
KEYB_INSTALLED . . . . . . . . .  	L WORD	020C	CODE
KEYB_INSTALL_CHECK . . . . . . .  	L NEAR	02A8	CODE
KEYB_INT_2F  . . . . . . . . . .  	L NEAR	0000	CODE	External
KEYB_INT_48  . . . . . . . . . .  	L NEAR	0000	CODE	External
KEYB_INT_9 . . . . . . . . . . .  	L NEAR	0000	CODE	External
KEYB_L_FINISHED  . . . . . . . .  	L NEAR	039F	CODE
KEYB_STATE_PROCESSOR . . . . . .  	L NEAR	0000	CODE	External
KEYB_SYS_ACTIVE  . . . . . . . .  	L BYTE	0A9B	CODE
KEYB_SYS_A_LENG  . . . . . . . .  	NUMBER	000D	
KEYB_SYS_LENG  . . . . . . . . .  	NUMBER	000E	
KEYB_TABLE_NOT_LOAD  . . . . . .  	NUMBER	0006	
KEY_BD_INHIB . . . . . . . . . .  	NUMBER	0080	
KEY_FAIL . . . . . . . . . . . .  	NUMBER	0080	
KEY_NUMS . . . . . . . . . . . .  	NUMBER	0000	
KYBD_CLK . . . . . . . . . . . .  	NUMBER	0001	
KYBD_CLK_DATA  . . . . . . . . .  	NUMBER	00E0	
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Symbols-13


KYBD_FAIL  . . . . . . . . . . .  	NUMBER	0020	
KYBD_INH . . . . . . . . . . . .  	NUMBER	0010	
KYCLK_FAIL . . . . . . . . . . .  	NUMBER	0008	
KY_LOCK  . . . . . . . . . . . .  	NUMBER	0000	
KY_SYS_FAIL  . . . . . . . . . .  	NUMBER	0010	

LANGUAGE_ASCII . . . . . . . . .  	L BYTE	0216	CODE
LANGUAGE_FOUND . . . . . . . . .  	L NEAR	04DF	CODE
LANGUAGE_INVALID . . . . . . . .  	NUMBER	0001	
LANGUAGE_SPECIFIED . . . . . . .  	L NEAR	0499	CODE
LANGUAGE_VALID . . . . . . . . .  	NUMBER	0000	
LANG_MODE  . . . . . . . . . . .  	NUMBER	00FF	
LANG_PTR_SIZE  . . . . . . . . .  	L WORD	0204	CODE	Global
LASTRATE . . . . . . . . . . . .  	L BYTE	008B	DATA
LAST_DMA_PAGE  . . . . . . . . .  	NUMBER	008F	
LC_AB  . . . . . . . . . . . . .  	NUMBER	0040	
LC_E0  . . . . . . . . . . . . .  	NUMBER	0002	
LC_E1  . . . . . . . . . . . . .  	NUMBER	0001	
LED_CMD  . . . . . . . . . . . .  	NUMBER	00ED	
LEFT_ALIGN . . . . . . . . . . .  	NUMBER	0000	
LEFT_KEY . . . . . . . . . . . .  	NUMBER	002A	
LEFT_SHIFT . . . . . . . . . . .  	NUMBER	0002	
LF . . . . . . . . . . . . . . .  	NUMBER	000A	
LMCS_FAIL  . . . . . . . . . . .  	NUMBER	0004	
LOADMSG  . . . . . . . . . . . .  	NUMBER	0000	
LOCUS_39 . . . . . . . . . . . .  	NUMBER	0001	
LOOP_POST  . . . . . . . . . . .  	NUMBER	0020	
LOST_ID  . . . . . . . . . . . .  	L NEAR	0476	CODE
LOWEST_4CH_VERSION . . . . . . .  	NUMBER	0002	
LOWNIB . . . . . . . . . . . . .  	NUMBER	000F	
LOW_NIB_MASK . . . . . . . . . .  	NUMBER	000F	
LSEEK_VALID  . . . . . . . . . .  	L NEAR	04F8	CODE
L_ALT_SHIFT  . . . . . . . . . .  	NUMBER	0002	
L_CTL_SHIFT  . . . . . . . . . .  	NUMBER	0001	
L_CTRL_TAB . . . . . . . . . . .  	NUMBER	0058	
L_MESSAGE  . . . . . . . . . . .  	L NEAR	033E	CODE

M12D12 . . . . . . . . . . . . .  	NUMBER	0015	
M1_SIZE_HI . . . . . . . . . . .  	NUMBER	0096	
M1_SIZE_LO . . . . . . . . . . .  	NUMBER	0095	
M2_SIZE_HI . . . . . . . . . . .  	NUMBER	0098	
M2_SIZE_LO . . . . . . . . . . .  	NUMBER	0097	
M326D12  . . . . . . . . . . . .  	NUMBER	0074	
M326D326 . . . . . . . . . . . .  	NUMBER	0093	
M640K  . . . . . . . . . . . . .  	NUMBER	0080	
MAJOR_VERSION  . . . . . . . . .  	NUMBER	0004	
MAX_DRV  . . . . . . . . . . . .  	NUMBER	0002	
MAX_PERIOD . . . . . . . . . . .  	NUMBER	0540	
MC_E0  . . . . . . . . . . . . .  	NUMBER	00E0	
MC_E1  . . . . . . . . . . . . .  	NUMBER	00E1	
MEDIA_CHANGE . . . . . . . . . .  	NUMBER	0006	
MEMORY_OVERF . . . . . . . . . .  	NUMBER	0011	
MEMORY_OVERFLOW  . . . . . . . .  	NUMBER	0003	
MEMORY_SIZE  . . . . . . . . . .  	L WORD	0013	DATA
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Symbols-14


MEM_FAIL . . . . . . . . . . . .  	NUMBER	0001	
MFG_ERR_FLAG . . . . . . . . . .  	L BYTE	0015	DATA
MFG_JMP  . . . . . . . . . . . .  	NUMBER	0020	
MFG_PORT . . . . . . . . . . . .  	NUMBER	0080	
MFG_TEST_RTN . . . . . . . . . .  	L FAR 	0500	ABS0
MFG_TST  . . . . . . . . . . . .  	L BYTE	0012	DATA
MINOR_VERSION  . . . . . . . . .  	NUMBER	0000	
MIN_PERIOD . . . . . . . . . . .  	NUMBER	0410	
MOTOR_COUNT  . . . . . . . . . .  	L BYTE	0040	DATA
MOTOR_MSK  . . . . . . . . . . .  	NUMBER	00F0	
MOTOR_STATUS . . . . . . . . . .  	L BYTE	003F	DATA
MOTOR_WAIT . . . . . . . . . . .  	NUMBER	0025	
MSGDATA  . . . . . . . . . . . .  	NUMBER	0000	
MSG_SER_CLASS  . . . . . . . . .  	NUMBER	0000	
MYBUFF . . . . . . . . . . . . .  	V BYTE	0000	CODE	External
M_SIZE_HI  . . . . . . . . . . .  	NUMBER	00B1	
M_SIZE_LO  . . . . . . . . . . .  	NUMBER	00B0	

NEARMSG  . . . . . . . . . . . .  	NUMBER	FFFF	
NEC_STATUS . . . . . . . . . . .  	L BYTE	0042	DATA	Length = 0007
NET_HAND_SHAKE . . . . . . . . .  	L NEAR	097E	CODE
NEW_BUFF_CTR . . . . . . . . . .  	V BYTE	0000	CODE	External
NEW_EXPECTED_VERSION . . . . . .  	NUMBER	2605	
NEW_INST . . . . . . . . . . . .  	NUMBER	0040	
NEW_MAJOR_VERSION  . . . . . . .  	NUMBER	0005	
NEW_MINOR_VERSION  . . . . . . .  	NUMBER	0026	
NEXT_DESIG_CP  . . . . . . . . .  	L NEAR	0673	CODE
NLS_FLAG_1_ID  . . . . . . . . .  	NUMBER	0005	
NLS_FLAG_2_ID  . . . . . . . . .  	NUMBER	0006	
NMI_PTR  . . . . . . . . . . . .  	L WORD	0008	ABS0
NO . . . . . . . . . . . . . . .  	NUMBER	0000	
NOCHECKSTDIN . . . . . . . . . .  	NUMBER	0000	
NOCHECKSTDOUT  . . . . . . . . .  	NUMBER	0000	
NOCHGLN  . . . . . . . . . . . .  	NUMBER	0001	
NOT_DESIG  . . . . . . . . . . .  	NUMBER	000C	
NOT_EX_FAIL_EX_OPEN  . . . . . .  	NUMBER	0101	
NOT_QUERY  . . . . . . . . . . .  	L NEAR	0444	CODE
NOT_SUPP . . . . . . . . . . . .  	NUMBER	000D	
NOT_TEST . . . . . . . . . . . .  	NUMBER	0008	
NOT_VALID  . . . . . . . . . . .  	NUMBER	000E	
NOVERCHECKMSG  . . . . . . . . .  	NUMBER	0000	
NO_ADVANCE . . . . . . . . . . .  	L NEAR	0560	CODE
NO_CODE_PAGE . . . . . . . . . .  	NUMBER	0002	
NO_CRIT_OPEN . . . . . . . . . .  	NUMBER	2000	
NO_FERRARI_G . . . . . . . . . .  	L NEAR	0778	CODE
NO_HANDLE  . . . . . . . . . . .  	NUMBER	FFFF	
NO_ID  . . . . . . . . . . . . .  	NUMBER	0002	
NO_IDLANG  . . . . . . . . . . .  	NUMBER	0003	
NO_INPUT . . . . . . . . . . . .  	NUMBER	0000	
NO_LANGUAGE  . . . . . . . . . .  	NUMBER	0002	
NO_REPLACE . . . . . . . . . . .  	NUMBER	0000	
NULL . . . . . . . . . . . . . .  	NUMBER	0000	
NULL_ASCII_CODE  . . . . . . . .  	NUMBER	-0001	
NUMBER_HOLDER  . . . . . . . . .  	L WORD	0021	CODE
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Symbols-15


NUMLK_ON . . . . . . . . . . . .  	N PROC	0938	CODE	Length = 0014
NUMMSG . . . . . . . . . . . . .  	NUMBER	FFFF	
NUM_BIOS_FLAGS . . . . . . . . .  	NUMBER	0004	
NUM_COMMANDS . . . . . . . . . .  	NUMBER	000C	
NUM_CP . . . . . . . . . . . . .  	L WORD	0200	CODE	Global
NUM_DESIG_CP . . . . . . . . . .  	L WORD	01D4	CODE	Global
NUM_FLAGS  . . . . . . . . . . .  	NUMBER	0007	
NUM_ID . . . . . . . . . . . . .  	L WORD	01FB	CODE	Global
NUM_KEY  . . . . . . . . . . . .  	NUMBER	0045	
NUM_LANG . . . . . . . . . . . .  	L WORD	01FE	CODE	Global
NUM_NLS_FLAGS  . . . . . . . . .  	NUMBER	0002	
NUM_SHIFT  . . . . . . . . . . .  	NUMBER	0020	
NUM_STATE  . . . . . . . . . . .  	NUMBER	0020	

OLD_PTR  . . . . . . . . . . . .  	V WORD	0000		External
ONE  . . . . . . . . . . . . . .  	NUMBER	0001	
ONE_PARMID . . . . . . . . . . .  	L BYTE	0005	CODE	Global
ONE_SCAN . . . . . . . . . . . .  	NUMBER	0002	
OPTION_COMMAND . . . . . . . . .  	NUMBER	0050	
ORG_VECTOR . . . . . . . . . . .  	L DWORD	004C	ABS0
OUTPUT . . . . . . . . . . . . .  	L NEAR	09EF	CODE
OUT_BUF_FULL . . . . . . . . . .  	NUMBER	0001	

P12_KB . . . . . . . . . . . . .  	NUMBER	0400	
PARITY_ERR . . . . . . . . . . .  	NUMBER	00C0	
PARITY_EVEN  . . . . . . . . . .  	NUMBER	0080	
PARM_PTR . . . . . . . . . . . .  	L DWORD	0074	ABS0
PARSE_ERR_CLASS  . . . . . . . .  	NUMBER	0002	
PARSE_PARAMETERS . . . . . . . .  	L NEAR	0000		External
PASS_LANG  . . . . . . . . . . .  	L WORD	01DC	CODE
PATH_NOT_FOUND . . . . . . . . .  	NUMBER	0003	
PC_386 . . . . . . . . . . . . .  	NUMBER	0200	
PC_AT  . . . . . . . . . . . . .  	NUMBER	4000	
PC_JR  . . . . . . . . . . . . .  	NUMBER	0800	
PC_LAP . . . . . . . . . . . . .  	NUMBER	2000	
PC_NET . . . . . . . . . . . . .  	NUMBER	0100	
PC_PAL . . . . . . . . . . . . .  	NUMBER	0400	
PC_XT  . . . . . . . . . . . . .  	NUMBER	1000	
POA_DUAL . . . . . . . . . . . .  	NUMBER	0061	
POA_START  . . . . . . . . . . .  	NUMBER	0080	
PORT_A . . . . . . . . . . . . .  	NUMBER	0060	
PORT_B . . . . . . . . . . . . .  	NUMBER	0061	
PORT_OFF . . . . . . . . . . . .  	L BYTE	0077	DATA
POST_SP  . . . . . . . . . . . .  	NUMBER	8000	
POST_SS  . . . . . . . . . . . .  	NUMBER	0000	
PRINTER_BASE . . . . . . . . . .  	L WORD	0008	DATA	Length = 0004
PRINT_TIM_OUT  . . . . . . . . .  	L BYTE	0078	DATA	Length = 0004
PRO_FAIL . . . . . . . . . . . .  	NUMBER	0002	
PRTY_CHK . . . . . . . . . . . .  	NUMBER	0080	
PTR_TO_ASCIIZ  . . . . . . . . .  	L WORD	0018	CODE
PTR_TO_COMLIN  . . . . . . . . .  	L WORD	0025	CODE
PTR_TO_NUMBER  . . . . . . . . .  	L WORD	000D	CODE
PURPOSE  . . . . . . . . . . . .  	L NEAR	09EF	CODE
PUT_ERROR_COMMAND  . . . . . . .  	NUMBER	0070	
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Symbols-16


P_KB . . . . . . . . . . . . . .  	NUMBER	0800	

QUERY  . . . . . . . . . . . . .  	L NEAR	0321	CODE
QUERY_CALL . . . . . . . . . . .  	L BYTE	01F0	CODE
QUERY_CONTINUE1  . . . . . . . .  	L NEAR	038D	CODE
QUIET_SEEK . . . . . . . . . . .  	NUMBER	000A	

RAM_PAR_OFF  . . . . . . . . . .  	NUMBER	000C	
RAM_PAR_ON . . . . . . . . . . .  	NUMBER	00F3	
RCV_TMOUT  . . . . . . . . . . .  	NUMBER	0040	
RD_ID  . . . . . . . . . . . . .  	NUMBER	0080	
READY_TO_BUILD_TABLE . . . . . .  	L NEAR	06A0	CODE
READ_8042_INPUT  . . . . . . . .  	NUMBER	00C0	
READ_8042_RAM  . . . . . . . . .  	NUMBER	0020	
READ_IDVAL . . . . . . . . . . .  	L NEAR	0A63	CODE
READ_ID_TAB  . . . . . . . . . .  	L NEAR	0A57	CODE
READ_LANG_TAB  . . . . . . . . .  	L NEAR	04B1	CODE
READ_VALID . . . . . . . . . . .  	L NEAR	04BA	CODE
RECORD_NOT_FND . . . . . . . . .  	NUMBER	0004	
REFRESH_BIT  . . . . . . . . . .  	NUMBER	0010	
REGEN  . . . . . . . . . . . . .  	L BYTE	0000	VIDEO_RAM
REGENW . . . . . . . . . . . . .  	L WORD	0000	VIDEO_RAM
REMOVE_9_DONE  . . . . . . . . .  	L NEAR	09EC	CODE
REMOVE_INT_9 . . . . . . . . . .  	N PROC	09D5	CODE	Length = 001A
REPLACE_INT_SEGMENT1 . . . . . .  	L WORD	094C	CODE
REPLACE_INT_SEGMENT2 . . . . . .  	L WORD	0988	CODE
RESERVED . . . . . . . . . . . .  	NUMBER	0000	
RESET_FLAG . . . . . . . . . . .  	L WORD	0072	DATA
RESET_NLS_COMMAND  . . . . . . .  	NUMBER	00B0	
REV_STATE  . . . . . . . . . . .  	NUMBER	00F8	
RIGHT_ALIGN  . . . . . . . . . .  	NUMBER	0080	
RIGHT_KEY  . . . . . . . . . . .  	NUMBER	0036	
RIGHT_SHIFT  . . . . . . . . . .  	NUMBER	0001	
RPL_K8 . . . . . . . . . . . . .  	L BYTE	0231	CODE
RS232_BASE . . . . . . . . . . .  	L WORD	0000	DATA	Length = 0004
RS232_TIM_OUT  . . . . . . . . .  	L BYTE	007C	DATA	Length = 0004
RTC_HIGH . . . . . . . . . . . .  	L WORD	009E	DATA
RTC_INT_VEC  . . . . . . . . . .  	L DWORD	01C0	ABS0
RTC_LOW  . . . . . . . . . . . .  	L WORD	009C	DATA
RTC_WAIT_FLAG  . . . . . . . . .  	L BYTE	00A0	DATA
R_ALT_SHIFT  . . . . . . . . . .  	NUMBER	0008	
R_CTL_SHIFT  . . . . . . . . . .  	NUMBER	0004	

SCAN_CODE  . . . . . . . . . . .  	V BYTE	0000	CODE	External
SCAN_CP_TABLE  . . . . . . . . .  	L NEAR	05BC	CODE
SCAN_ID  . . . . . . . . . . . .  	N PROC	0A10	CODE	Length = 007D
SCAN_ID_TAB  . . . . . . . . . .  	L NEAR	0A6E	CODE
SCAN_LANG_TABLE  . . . . . . . .  	L NEAR	04C1	CODE
SCAN_MATCH . . . . . . . . . . .  	NUMBER	0008	
SCROLL_KEY . . . . . . . . . . .  	NUMBER	0046	
SCROLL_SHIFT . . . . . . . . . .  	NUMBER	0010	
SCROLL_STATE . . . . . . . . . .  	NUMBER	0010	
SD . . . . . . . . . . . . . . .  	ALIAS	 SHARED_DATA		
SD_DEST_PTR  . . . . . . . . . .  	V BYTE	0000	CODE	External
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Symbols-17


SD_LENGTH  . . . . . . . . . . .  	V WORD	0000	CODE	External
SD_SOURCE_PTR  . . . . . . . . .  	L BYTE	1834	CODE	Global
SEARCH_ID  . . . . . . . . . . .  	L NEAR	04D5	CODE
SECURE_FL  . . . . . . . . . . .  	V BYTE	0000		External
SEEK_STATUS  . . . . . . . . . .  	L BYTE	003E	DATA
SEG_OF_ASCIIZ  . . . . . . . . .  	L WORD	001A	CODE
SEG_OF_COMLIN  . . . . . . . . .  	L WORD	0027	CODE
SEG_OF_NUMBER  . . . . . . . . .  	L WORD	000F	CODE
SELF_8042_TEST . . . . . . . . .  	NUMBER	00AA	
SENSE_DRV_ST . . . . . . . . . .  	NUMBER	0004	
SETSTDIO . . . . . . . . . . . .  	NUMBER	0000	
SET_DESIG_VARIABLES  . . . . . .  	L NEAR	062D	CODE
SET_FLAG_COMMAND . . . . . . . .  	NUMBER	0060	
SET_NUM_LK . . . . . . . . . . .  	NUMBER	0020	
SET_TO_CP_INVOKED  . . . . . . .  	L NEAR	063B	CODE
SET_TO_INVOKED_CP  . . . . . . .  	L NEAR	064E	CODE
SET_TO_INVOKED_CP2 . . . . . . .  	L NEAR	065E	CODE
SET_TO_INVOKED_CP3 . . . . . . .  	L NEAR	0668	CODE
SET_TO_SYSTEM_CP . . . . . . . .  	L NEAR	0601	CODE
SET_TO_SYSTEM_CP2  . . . . . . .  	L NEAR	060C	CODE
SF_ENT_SZ  . . . . . . . . . . .  	NUMBER	0003	
SGN_BIN_BYTE . . . . . . . . . .  	NUMBER	0012	
SGN_BIN_DWORD  . . . . . . . . .  	NUMBER	0032	
SGN_BIN_TYPE . . . . . . . . . .  	NUMBER	0002	
SGN_BIN_WORD . . . . . . . . . .  	NUMBER	0022	
SHARED_AREA_PTR  . . . . . . . .  	L DWORD	0210	CODE	Global
SHARED_DATA  . . . . . . . . . .  	V BYTE	0000	CODE	External
SHUT_CMD . . . . . . . . . . . .  	NUMBER	00FE	
SHUT_DOWN  . . . . . . . . . . .  	NUMBER	008F	
SIGNATURE  . . . . . . . . . . .  	L BYTE	01F1	CODE
SIGNATURE_LENGTH . . . . . . . .  	L WORD	01F9	CODE
SKIP_CTRL_COPY . . . . . . . . .  	L NEAR	078C	CODE
SLAVE_INT_PTR  . . . . . . . . .  	L DWORD	01C0	ABS0
STATE_LOGIC_OFFSET . . . . . . .  	L DWORD	01E2	CODE	Global
STATE_MSK  . . . . . . . . . . .  	NUMBER	0007	
STATUS_BYTE  . . . . . . . . . .  	L BYTE	0000	XXDATA
STATUS_PORT  . . . . . . . . . .  	NUMBER	0064	
STDAUX . . . . . . . . . . . . .  	NUMBER	0003	
STDERR . . . . . . . . . . . . .  	NUMBER	0002	
STDIN  . . . . . . . . . . . . .  	NUMBER	0000	
STDOUT . . . . . . . . . . . . .  	NUMBER	0001	
STDPRN . . . . . . . . . . . . .  	NUMBER	0004	
STG_LOC0 . . . . . . . . . . . .  	L BYTE	0000	ABS0
STRING_HOLDER  . . . . . . . . .  	L BYTE	002E	CODE	Length = 0040
SUBLIST_ASCIIZ . . . . . . . . .  	L BYTE	0016	CODE
SUBLIST_COMLIN . . . . . . . . .  	L BYTE	0023	CODE
SUBLIST_LENGTH . . . . . . . . .  	NUMBER	000B	
SUBLIST_NUMBER . . . . . . . . .  	L BYTE	000B	CODE
SUB_CMD_BITS . . . . . . . . . .  	NUMBER	000F	
SYSDISPMSG . . . . . . . . . . .  	N PROC	0E80	CODE	Length = 0045
SYSLOADMSG . . . . . . . . . . .  	N PROC	0D33	CODE	Length = 0097
SYSTEM_CP  . . . . . . . . . . .  	L NEAR	05E7	CODE
SYS_CODE_PAGE  . . . . . . . . .  	L WORD	01EC	CODE	Global
SYS_FLAG . . . . . . . . . . . .  	NUMBER	0004	
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Symbols-18


SYS_KEY  . . . . . . . . . . . .  	NUMBER	0054	
SYS_SHIFT  . . . . . . . . . . .  	NUMBER	0004	

TAB  . . . . . . . . . . . . . .  	NUMBER	0009	
TABLE_BUILD  . . . . . . . . . .  	L NEAR	0000	CODE	External
TB_RETURN_CODE . . . . . . . . .  	L WORD	01E8	CODE	Global
TEMP_HEAD  . . . . . . . . . . .  	V WORD	0000	CODE	External
TEMP_SHARED_DATA . . . . . . . .  	L 	1834	CODE	Global
TEMP_STACK_HI  . . . . . . . . .  	NUMBER	0000	
TEMP_STACK_LO  . . . . . . . . .  	NUMBER	FFFF	
TEMP_TAIL  . . . . . . . . . . .  	V WORD	0000	CODE	External
TERMINATE  . . . . . . . . . . .  	L NEAR	073E	CODE
TEST_IF_DESIGNATED . . . . . . .  	L NEAR	066B	CODE
TIMEMSG  . . . . . . . . . . . .  	NUMBER	0000	
TIMER  . . . . . . . . . . . . .  	NUMBER	0040	
TIMER0 . . . . . . . . . . . . .  	NUMBER	0040	
TIMER_HIGH . . . . . . . . . . .  	L WORD	006E	DATA
TIMER_LOW  . . . . . . . . . . .  	L WORD	006C	DATA
TIMER_OFL  . . . . . . . . . . .  	L BYTE	0070	DATA
TIME_24_TYPE . . . . . . . . . .  	NUMBER	0006	
TIME_CTY_TYPE  . . . . . . . . .  	NUMBER	0005	
TIME_HHMMSSHH_24 . . . . . . . .  	NUMBER	0026	
TIME_HHMMSSHH_CTY  . . . . . . .  	NUMBER	0025	
TIME_HHMMSS_24 . . . . . . . . .  	NUMBER	0016	
TIME_HHMMSS_CTY  . . . . . . . .  	NUMBER	0015	
TIME_HHMM_24 . . . . . . . . . .  	NUMBER	0006	
TIME_HHMM_CTY  . . . . . . . . .  	NUMBER	0005	
TIME_OUT . . . . . . . . . . . .  	NUMBER	0080	
TIM_CTL  . . . . . . . . . . . .  	NUMBER	0043	
TMINT  . . . . . . . . . . . . .  	NUMBER	0001	
TOS  . . . . . . . . . . . . . .  	L WORD	0100	STACK
TOTAL_SIZE . . . . . . . . . . .  	L WORD	01DA	CODE
TRANS_TMOUT  . . . . . . . . . .  	NUMBER	0020	
TRAN_MSK . . . . . . . . . . . .  	NUMBER	0003	
TRK_80 . . . . . . . . . . . . .  	NUMBER	0008	
TRK_SLAP . . . . . . . . . . . .  	NUMBER	0030	
TRUE . . . . . . . . . . . . . .  	NUMBER	FFFF	
TSD  . . . . . . . . . . . . . .  	ALIAS	 TEMP_SHARED_DATA		
TTEST  . . . . . . . . . . . . .  	NUMBER	0000	
TWO_SCAN . . . . . . . . . . . .  	NUMBER	0003	
TYPEWRITER_CAPS_LK . . . . . . .  	NUMBER	8000	
TYPE_2_TAB . . . . . . . . . . .  	NUMBER	0040	

UNSGN_BIN_BYTE . . . . . . . . .  	NUMBER	0011	
UNSGN_BIN_DWORD  . . . . . . . .  	NUMBER	0031	
UNSGN_BIN_TYPE . . . . . . . . .  	NUMBER	0001	
UNSGN_BIN_WORD . . . . . . . . .  	NUMBER	0021	
USER_FLAG  . . . . . . . . . . .  	L WORD	0098	DATA
USER_FLAG_SEG  . . . . . . . . .  	L WORD	009A	DATA
US_MODE  . . . . . . . . . . . .  	NUMBER	0000	
UTILITY_MSG_CLASS  . . . . . . .  	NUMBER	00FF	

VAL5ID . . . . . . . . . . . . .  	L NEAR	0A1E	CODE
VALID1 . . . . . . . . . . . . .  	L NEAR	02F8	CODE
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Symbols-19


VALID2 . . . . . . . . . . . . .  	L NEAR	0303	CODE
VALID3 . . . . . . . . . . . . .  	L NEAR	030E	CODE
VALID4 . . . . . . . . . . . . .  	L NEAR	044C	CODE
VALID5 . . . . . . . . . . . . .  	L NEAR	0487	CODE
VALID6 . . . . . . . . . . . . .  	L NEAR	057B	CODE
VALID6A  . . . . . . . . . . . .  	L NEAR	0509	CODE
VALID7 . . . . . . . . . . . . .  	L NEAR	05AC	CODE
VALID8 . . . . . . . . . . . . .  	L NEAR	05B5	CODE
VALID_SYNTAX . . . . . . . . . .  	NUMBER	0000	
VERSION_OK . . . . . . . . . . .  	L NEAR	0299	CODE
VIDEO_INT  . . . . . . . . . . .  	L WORD	0040	ABS0

WARNING_1  . . . . . . . . . . .  	NUMBER	000F	
WRITE_8042_RAM . . . . . . . . .  	NUMBER	0060	
WRITE_OP . . . . . . . . . . . .  	NUMBER	0080	
WRITE_PROTECT  . . . . . . . . .  	NUMBER	0003	
W_MEM_SIZE . . . . . . . . . . .  	NUMBER	0010	

X287 . . . . . . . . . . . . . .  	NUMBER	00F0	
XLATT_COMMAND  . . . . . . . . .  	NUMBER	0040	
XRATE  . . . . . . . . . . . . .  	NUMBER	0002	
XT_KB  . . . . . . . . . . . . .  	NUMBER	4000	

YES  . . . . . . . . . . . . . .  	NUMBER	0001	

ZERO_SCAN  . . . . . . . . . . .  	NUMBER	0020	

$L1  . . . . . . . . . . . . . .  	L NEAR	0B8E	CODE
$L11 . . . . . . . . . . . . . .  	L NEAR	0B8A	CODE
$L12 . . . . . . . . . . . . . .  	L NEAR	0B75	CODE
$L15 . . . . . . . . . . . . . .  	L NEAR	0B9A	CODE
$L16 . . . . . . . . . . . . . .  	L NEAR	0BA3	CODE
$L18 . . . . . . . . . . . . . .  	L NEAR	0BAA	CODE
$L20 . . . . . . . . . . . . . .  	L NEAR	0BB7	CODE
$L21 . . . . . . . . . . . . . .  	L NEAR	0BC2	CODE
$L5  . . . . . . . . . . . . . .  	L NEAR	0B8D	CODE
$L6  . . . . . . . . . . . . . .  	L NEAR	0B5E	CODE
$LL1 . . . . . . . . . . . . . .  	NUMBER	0001	
$MDO123  . . . . . . . . . . . .  	L NEAR	0F25	CODE
$MDO139  . . . . . . . . . . . .  	L NEAR	0F8D	CODE
$MDO145  . . . . . . . . . . . .  	L NEAR	0FAF	CODE
$MDO165  . . . . . . . . . . . .  	L NEAR	1011	CODE
$MDO167  . . . . . . . . . . . .  	L NEAR	101B	CODE
$MDO175  . . . . . . . . . . . .  	L NEAR	1047	CODE
$MDO215  . . . . . . . . . . . .  	L NEAR	1112	CODE
$MDO219  . . . . . . . . . . . .  	L NEAR	1137	CODE
$MDO259  . . . . . . . . . . . .  	L NEAR	121F	CODE
$MDO280  . . . . . . . . . . . .  	L NEAR	128C	CODE
$MDO291  . . . . . . . . . . . .  	L NEAR	12B7	CODE
$MDO301  . . . . . . . . . . . .  	L NEAR	12E5	CODE
$MDO310  . . . . . . . . . . . .  	L NEAR	130B	CODE
$MDO321  . . . . . . . . . . . .  	L NEAR	134D	CODE
$MEN104  . . . . . . . . . . . .  	L NEAR	0EC4	CODE
$MEN107  . . . . . . . . . . . .  	L NEAR	0ED9	CODE
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Symbols-20


$MEN110  . . . . . . . . . . . .  	L NEAR	0EFA	CODE
$MEN119  . . . . . . . . . . . .  	L NEAR	0F32	CODE
$MEN123  . . . . . . . . . . . .  	L NEAR	0F32	CODE
$MEN128  . . . . . . . . . . . .  	L NEAR	0F61	CODE
$MEN139  . . . . . . . . . . . .  	L NEAR	0FA4	CODE
$MEN145  . . . . . . . . . . . .  	L NEAR	1008	CODE
$MEN146  . . . . . . . . . . . .  	L NEAR	0FC5	CODE
$MEN150  . . . . . . . . . . . .  	L NEAR	1003	CODE
$MEN154  . . . . . . . . . . . .  	L NEAR	1003	CODE
$MEN165  . . . . . . . . . . . .  	L NEAR	10FD	CODE
$MEN167  . . . . . . . . . . . .  	L NEAR	1038	CODE
$MEN175  . . . . . . . . . . . .  	L NEAR	1060	CODE
$MEN180  . . . . . . . . . . . .  	L NEAR	1072	CODE
$MEN187  . . . . . . . . . . . .  	L NEAR	10A5	CODE
$MEN188  . . . . . . . . . . . .  	L NEAR	1093	CODE
$MEN192  . . . . . . . . . . . .  	L NEAR	10A5	CODE
$MEN199  . . . . . . . . . . . .  	L NEAR	10E4	CODE
$MEN20 . . . . . . . . . . . . .  	L NEAR	0DC9	CODE
$MEN200  . . . . . . . . . . . .  	L NEAR	10DC	CODE
$MEN202  . . . . . . . . . . . .  	L NEAR	10DC	CODE
$MEN211  . . . . . . . . . . . .  	L NEAR	10F1	CODE
$MEN219  . . . . . . . . . . . .  	L NEAR	1198	CODE
$MEN220  . . . . . . . . . . . .  	L NEAR	1169	CODE
$MEN222  . . . . . . . . . . . .  	L NEAR	1169	CODE
$MEN224  . . . . . . . . . . . .  	L NEAR	1169	CODE
$MEN229  . . . . . . . . . . . .  	L NEAR	1190	CODE
$MEN230  . . . . . . . . . . . .  	L NEAR	1182	CODE
$MEN240  . . . . . . . . . . . .  	L NEAR	11B8	CODE
$MEN243  . . . . . . . . . . . .  	L NEAR	11C5	CODE
$MEN247  . . . . . . . . . . . .  	L NEAR	121C	CODE
$MEN248  . . . . . . . . . . . .  	L NEAR	1200	CODE
$MEN25 . . . . . . . . . . . . .  	L NEAR	0E7F	CODE
$MEN252  . . . . . . . . . . . .  	L NEAR	1218	CODE
$MEN259  . . . . . . . . . . . .  	L NEAR	123C	CODE
$MEN261  . . . . . . . . . . . .  	L NEAR	1230	CODE
$MEN27 . . . . . . . . . . . . .  	L NEAR	0E74	CODE
$MEN292  . . . . . . . . . . . .  	L NEAR	12CA	CODE
$MEN307  . . . . . . . . . . . .  	L NEAR	1313	CODE
$MEN314  . . . . . . . . . . . .  	L NEAR	1333	CODE
$MEN317  . . . . . . . . . . . .  	L NEAR	135A	CODE
$MEN321  . . . . . . . . . . . .  	L NEAR	1358	CODE
$MEN325  . . . . . . . . . . . .  	L NEAR	13E7	CODE
$MEN333  . . . . . . . . . . . .  	L NEAR	13E7	CODE
$MEN93 . . . . . . . . . . . . .  	L NEAR	0EB8	CODE
$MEN94 . . . . . . . . . . . . .  	L NEAR	0EA4	CODE
$MEN97 . . . . . . . . . . . . .  	L NEAR	0EB2	CODE
$MIF104  . . . . . . . . . . . .  	L NEAR	0EC0	CODE
$MIF107  . . . . . . . . . . . .  	L NEAR	0ED6	CODE
$MIF110  . . . . . . . . . . . .  	L NEAR	0EEA	CODE
$MIF112  . . . . . . . . . . . .  	L NEAR	0EFA	CODE
$MIF113  . . . . . . . . . . . .  	L NEAR	0EFA	CODE
$MIF117  . . . . . . . . . . . .  	L NEAR	0EFF	CODE
$MIF119  . . . . . . . . . . . .  	L NEAR	0F23	CODE
$MIF120  . . . . . . . . . . . .  	L NEAR	0F21	CODE
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Symbols-21


$MIF127  . . . . . . . . . . . .  	L NEAR	0F62	CODE
$MIF128  . . . . . . . . . . . .  	L NEAR	0F5F	CODE
$MIF129  . . . . . . . . . . . .  	L NEAR	0F5D	CODE
$MIF134  . . . . . . . . . . . .  	L NEAR	0F82	CODE
$MIF135  . . . . . . . . . . . .  	L NEAR	0F82	CODE
$MIF138  . . . . . . . . . . . .  	L NEAR	0FA4	CODE
$MIF141  . . . . . . . . . . . .  	L NEAR	0FA0	CODE
$MIF146  . . . . . . . . . . . .  	L NEAR	0FC2	CODE
$MIF150  . . . . . . . . . . . .  	L NEAR	0FE1	CODE
$MIF151  . . . . . . . . . . . .  	L NEAR	0FDF	CODE
$MIF154  . . . . . . . . . . . .  	L NEAR	0FF3	CODE
$MIF155  . . . . . . . . . . . .  	L NEAR	0FF1	CODE
$MIF158  . . . . . . . . . . . .  	L NEAR	1003	CODE
$MIF159  . . . . . . . . . . . .  	L NEAR	1003	CODE
$MIF166  . . . . . . . . . . . .  	L NEAR	1038	CODE
$MIF169  . . . . . . . . . . . .  	L NEAR	1033	CODE
$MIF173  . . . . . . . . . . . .  	L NEAR	1072	CODE
$MIF174  . . . . . . . . . . . .  	L NEAR	1072	CODE
$MIF175  . . . . . . . . . . . .  	L NEAR	1054	CODE
$MIF180  . . . . . . . . . . . .  	L NEAR	106F	CODE
$MIF187  . . . . . . . . . . . .  	L NEAR	1095	CODE
$MIF188  . . . . . . . . . . . .  	L NEAR	1092	CODE
$MIF192  . . . . . . . . . . . .  	L NEAR	109C	CODE
$MIF194  . . . . . . . . . . . .  	L NEAR	10A3	CODE
$MIF199  . . . . . . . . . . . .  	L NEAR	10E1	CODE
$MIF20 . . . . . . . . . . . . .  	L NEAR	0DC5	CODE
$MIF200  . . . . . . . . . . . .  	L NEAR	10C2	CODE
$MIF202  . . . . . . . . . . . .  	L NEAR	10DC	CODE
$MIF211  . . . . . . . . . . . .  	L NEAR	10ED	CODE
$MIF216  . . . . . . . . . . . .  	L NEAR	1120	CODE
$MIF220  . . . . . . . . . . . .  	L NEAR	1144	CODE
$MIF222  . . . . . . . . . . . .  	L NEAR	1151	CODE
$MIF224  . . . . . . . . . . . .  	L NEAR	1163	CODE
$MIF229  . . . . . . . . . . . .  	L NEAR	1184	CODE
$MIF23 . . . . . . . . . . . . .  	L NEAR	0DDF	CODE
$MIF230  . . . . . . . . . . . .  	L NEAR	1176	CODE
$MIF234  . . . . . . . . . . . .  	L NEAR	118C	CODE
$MIF239  . . . . . . . . . . . .  	L NEAR	11C7	CODE
$MIF240  . . . . . . . . . . . .  	L NEAR	11B7	CODE
$MIF243  . . . . . . . . . . . .  	L NEAR	11BF	CODE
$MIF247  . . . . . . . . . . . .  	L NEAR	1202	CODE
$MIF248  . . . . . . . . . . . .  	L NEAR	11FC	CODE
$MIF25 . . . . . . . . . . . . .  	L NEAR	0E67	CODE
$MIF252  . . . . . . . . . . . .  	L NEAR	120F	CODE
$MIF254  . . . . . . . . . . . .  	L NEAR	1218	CODE
$MIF258  . . . . . . . . . . . .  	L NEAR	124B	CODE
$MIF259  . . . . . . . . . . . .  	L NEAR	1234	CODE
$MIF261  . . . . . . . . . . . .  	L NEAR	122D	CODE
$MIF269  . . . . . . . . . . . .  	L NEAR	124B	CODE
$MIF27 . . . . . . . . . . . . .  	L NEAR	0E71	CODE
$MIF270  . . . . . . . . . . . .  	L NEAR	1247	CODE
$MIF274  . . . . . . . . . . . .  	L NEAR	1253	CODE
$MIF276  . . . . . . . . . . . .  	L NEAR	1272	CODE
$MIF278  . . . . . . . . . . . .  	L NEAR	12A0	CODE
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Symbols-22


$MIF279  . . . . . . . . . . . .  	L NEAR	12A0	CODE
$MIF281  . . . . . . . . . . . .  	L NEAR	129C	CODE
$MIF286  . . . . . . . . . . . .  	L NEAR	12B3	CODE
$MIF287  . . . . . . . . . . . .  	L NEAR	12B3	CODE
$MIF290  . . . . . . . . . . . .  	L NEAR	12DB	CODE
$MIF292  . . . . . . . . . . . .  	L NEAR	12C9	CODE
$MIF295  . . . . . . . . . . . .  	L NEAR	12D7	CODE
$MIF299  . . . . . . . . . . . .  	L NEAR	12F9	CODE
$MIF300  . . . . . . . . . . . .  	L NEAR	12F9	CODE
$MIF302  . . . . . . . . . . . .  	L NEAR	12F5	CODE
$MIF307  . . . . . . . . . . . .  	L NEAR	1307	CODE
$MIF309  . . . . . . . . . . . .  	L NEAR	1313	CODE
$MIF314  . . . . . . . . . . . .  	L NEAR	132F	CODE
$MIF317  . . . . . . . . . . . .  	L NEAR	134D	CODE
$MIF318  . . . . . . . . . . . .  	L NEAR	134B	CODE
$MIF325  . . . . . . . . . . . .  	L NEAR	1393	CODE
$MIF326  . . . . . . . . . . . .  	L NEAR	1385	CODE
$MIF327  . . . . . . . . . . . .  	L NEAR	137F	CODE
$MIF330  . . . . . . . . . . . .  	L NEAR	1391	CODE
$MIF333  . . . . . . . . . . . .  	L NEAR	13BF	CODE
$MIF334  . . . . . . . . . . . .  	L NEAR	13B1	CODE
$MIF335  . . . . . . . . . . . .  	L NEAR	13AB	CODE
$MIF338  . . . . . . . . . . . .  	L NEAR	13BD	CODE
$MIF341  . . . . . . . . . . . .  	L NEAR	13DB	CODE
$MIF342  . . . . . . . . . . . .  	L NEAR	13D5	CODE
$MIF345  . . . . . . . . . . . .  	L NEAR	13E7	CODE
$MIF349  . . . . . . . . . . . .  	L NEAR	13F3	CODE
$MIF93 . . . . . . . . . . . . .  	L NEAR	0EB4	CODE
$MIF94 . . . . . . . . . . . . .  	L NEAR	0EA1	CODE
$MIF97 . . . . . . . . . . . . .  	L NEAR	0EAE	CODE
$MLL149  . . . . . . . . . . . .  	L NEAR	0FCF	CODE
$MLL168  . . . . . . . . . . . .  	L NEAR	102A	CODE
$MLL178  . . . . . . . . . . . .  	L NEAR	105C	CODE
$MLL202  . . . . . . . . . . . .  	L NEAR	10D4	CODE
$MLL214  . . . . . . . . . . . .  	L NEAR	10FD	CODE
$MSR175  . . . . . . . . . . . .  	L NEAR	1072	CODE
$MSR259  . . . . . . . . . . . .  	L NEAR	123D	CODE
$MXL3  . . . . . . . . . . . . .  	L NEAR	107F	CODE
$MXL4  . . . . . . . . . . . . .  	L NEAR	10FD	CODE
$MXL5  . . . . . . . . . . . . .  	L NEAR	1198	CODE
$M_1_FF_END  . . . . . . . . . .  	L BYTE	140F	CODE
$M_1_FF_MSG  . . . . . . . . . .  	L BYTE	13FD	CODE
$M_1_FF_STRUC  . . . . . . . . .  	L BYTE	13F9	CODE
$M_2_00001H_END  . . . . . . . .  	L BYTE	1451	CODE
$M_2_00001H_MSG  . . . . . . . .  	L BYTE	143D	CODE
$M_2_00001H_STRUC  . . . . . . .  	L BYTE	141D	CODE
$M_2_00002H_END  . . . . . . . .  	L BYTE	146C	CODE
$M_2_00002H_MSG  . . . . . . . .  	L BYTE	1451	CODE
$M_2_00002H_STRUC  . . . . . . .  	L BYTE	1421	CODE
$M_2_00003H_END  . . . . . . . .  	L BYTE	147B	CODE
$M_2_00003H_MSG  . . . . . . . .  	L BYTE	146C	CODE
$M_2_00003H_STRUC  . . . . . . .  	L BYTE	1425	CODE
$M_2_00004H_END  . . . . . . . .  	L BYTE	148B	CODE
$M_2_00004H_MSG  . . . . . . . .  	L BYTE	147B	CODE
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Symbols-23


$M_2_00004H_STRUC  . . . . . . .  	L BYTE	1429	CODE
$M_2_00006H_END  . . . . . . . .  	L BYTE	14B0	CODE
$M_2_00006H_MSG  . . . . . . . .  	L BYTE	148B	CODE
$M_2_00006H_STRUC  . . . . . . .  	L BYTE	142D	CODE
$M_2_00007H_END  . . . . . . . .  	L BYTE	14CC	CODE
$M_2_00007H_MSG  . . . . . . . .  	L BYTE	14B0	CODE
$M_2_00007H_STRUC  . . . . . . .  	L BYTE	1431	CODE
$M_2_0000AH_END  . . . . . . . .  	L BYTE	14DE	CODE
$M_2_0000AH_MSG  . . . . . . . .  	L BYTE	14CC	CODE
$M_2_0000AH_STRUC  . . . . . . .  	L BYTE	1435	CODE
$M_2_FF_END  . . . . . . . . . .  	L BYTE	14ED	CODE
$M_2_FF_MSG  . . . . . . . . . .  	L BYTE	14DE	CODE
$M_2_FF_STRUC  . . . . . . . . .  	L BYTE	1439	CODE
$M_ADDR_SZ_FAR . . . . . . . . .  	NUMBER	0004	
$M_ADDR_SZ_NEAR  . . . . . . . .  	NUMBER	0002	
$M_ADD_CRLF  . . . . . . . . . .  	N PROC	0F6C	CODE	Length = 0017
$M_ALIGN_MASK  . . . . . . . . .  	NUMBER	0080	
$M_AM  . . . . . . . . . . . . .  	NUMBER	0061	
$M_A_00001H_END  . . . . . . . .  	L BYTE	155C	CODE
$M_A_00001H_MSG  . . . . . . . .  	L BYTE	1544	CODE
$M_A_00001H_STRUC  . . . . . . .  	L BYTE	14FC	CODE
$M_A_00002H_END  . . . . . . . .  	L BYTE	1576	CODE
$M_A_00002H_MSG  . . . . . . . .  	L BYTE	155C	CODE
$M_A_00002H_STRUC  . . . . . . .  	L BYTE	1500	CODE
$M_A_00003H_END  . . . . . . . .  	L BYTE	158E	CODE
$M_A_00003H_MSG  . . . . . . . .  	L BYTE	1576	CODE
$M_A_00003H_STRUC  . . . . . . .  	L BYTE	1504	CODE
$M_A_00004H_END  . . . . . . . .  	L BYTE	15A0	CODE
$M_A_00004H_MSG  . . . . . . . .  	L BYTE	158E	CODE
$M_A_00004H_STRUC  . . . . . . .  	L BYTE	1508	CODE
$M_A_00005H_END  . . . . . . . .  	L BYTE	15BC	CODE
$M_A_00005H_MSG  . . . . . . . .  	L BYTE	15A0	CODE
$M_A_00005H_STRUC  . . . . . . .  	L BYTE	150C	CODE
$M_A_00006H_END  . . . . . . . .  	L BYTE	15DE	CODE
$M_A_00006H_MSG  . . . . . . . .  	L BYTE	15BC	CODE
$M_A_00006H_STRUC  . . . . . . .  	L BYTE	1510	CODE
$M_A_00007H_END  . . . . . . . .  	L BYTE	15FE	CODE
$M_A_00007H_MSG  . . . . . . . .  	L BYTE	15DE	CODE
$M_A_00007H_STRUC  . . . . . . .  	L BYTE	1514	CODE
$M_A_00008H_END  . . . . . . . .  	L BYTE	161C	CODE
$M_A_00008H_MSG  . . . . . . . .  	L BYTE	15FE	CODE
$M_A_00008H_STRUC  . . . . . . .  	L BYTE	1518	CODE
$M_A_00009H_END  . . . . . . . .  	L BYTE	1646	CODE
$M_A_00009H_MSG  . . . . . . . .  	L BYTE	161C	CODE
$M_A_00009H_STRUC  . . . . . . .  	L BYTE	151C	CODE
$M_A_0000AH_END  . . . . . . . .  	L BYTE	1664	CODE
$M_A_0000AH_MSG  . . . . . . . .  	L BYTE	1646	CODE
$M_A_0000AH_STRUC  . . . . . . .  	L BYTE	1520	CODE
$M_A_0000BH_END  . . . . . . . .  	L BYTE	1695	CODE
$M_A_0000BH_MSG  . . . . . . . .  	L BYTE	1664	CODE
$M_A_0000BH_STRUC  . . . . . . .  	L BYTE	1524	CODE
$M_A_0000CH_END  . . . . . . . .  	L BYTE	16C1	CODE
$M_A_0000CH_MSG  . . . . . . . .  	L BYTE	1695	CODE
$M_A_0000CH_STRUC  . . . . . . .  	L BYTE	1528	CODE
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Symbols-24


$M_A_0000DH_END  . . . . . . . .  	L BYTE	16FE	CODE
$M_A_0000DH_MSG  . . . . . . . .  	L BYTE	16C1	CODE
$M_A_0000DH_STRUC  . . . . . . .  	L BYTE	152C	CODE
$M_A_0000EH_END  . . . . . . . .  	L BYTE	173E	CODE
$M_A_0000EH_MSG  . . . . . . . .  	L BYTE	16FE	CODE
$M_A_0000EH_STRUC  . . . . . . .  	L BYTE	1530	CODE
$M_A_0000FH_END  . . . . . . . .  	L BYTE	1780	CODE
$M_A_0000FH_MSG  . . . . . . . .  	L BYTE	173E	CODE
$M_A_0000FH_STRUC  . . . . . . .  	L BYTE	1534	CODE
$M_A_00010H_END  . . . . . . . .  	L BYTE	17CA	CODE
$M_A_00010H_MSG  . . . . . . . .  	L BYTE	1780	CODE
$M_A_00010H_STRUC  . . . . . . .  	L BYTE	1538	CODE
$M_A_00011H_END  . . . . . . . .  	L BYTE	17FB	CODE
$M_A_00011H_MSG  . . . . . . . .  	L BYTE	17CA	CODE
$M_A_00011H_STRUC  . . . . . . .  	L BYTE	153C	CODE
$M_A_00012H_END  . . . . . . . .  	L BYTE	1819	CODE
$M_A_00012H_MSG  . . . . . . . .  	L BYTE	17FB	CODE
$M_A_00012H_STRUC  . . . . . . .  	L BYTE	1540	CODE
$M_BASE10  . . . . . . . . . . .  	NUMBER	000A	
$M_BASE16  . . . . . . . . . . .  	NUMBER	0010	
$M_BIN2ASC_REPLACE . . . . . . .  	N PROC	135C	CODE	Length = 0099
$M_BYTE  . . . . . . . . . . . .  	NUMBER	0010	
$M_CHAR_ONLY . . . . . . . . . .  	NUMBER	0000	
$M_CHAR_REPLACE  . . . . . . . .  	N PROC	1334	CODE	Length = 0028
$M_CHECKSTDIN  . . . . . . . . .  	N PROC	0DE2	CODE	Length = 0013
$M_CHECKSTDOUT . . . . . . . . .  	N PROC	0DF5	CODE	Length = 0013
$M_CLASS_1_STRUC . . . . . . . .  	L BYTE	13F5	CODE
$M_CLASS_2_STRUC . . . . . . . .  	L BYTE	1419	CODE
$M_CLASS_A_STRUC . . . . . . . .  	L BYTE	14F8	CODE
$M_CLASS_ID_SZ . . . . . . . . .  	NUMBER	0004	
$M_CLASS_NOT_EXIST . . . . . . .  	NUMBER	0000	
$M_CLS_1 . . . . . . . . . . . .  	N PROC	1819	CODE	Global	Length = 000B
$M_COMMA . . . . . . . . . . . .  	NUMBER	002C	
$M_CONVERT2ASC . . . . . . . . .  	N PROC	0FA7	CODE	Length = 006A
$M_CON_INP . . . . . . . . . . .  	NUMBER	-0001	
$M_COUNT . . . . . . . . . . . .  	NUMBER	0001	
$M_CRIT_ERR_MASK . . . . . . . .  	NUMBER	0001	
$M_CRIT_HI . . . . . . . . . . .  	NUMBER	0027	
$M_CRIT_LO . . . . . . . . . . .  	NUMBER	0013	
$M_CRLF_SIZE . . . . . . . . . .  	NUMBER	0002	
$M_CR_LF . . . . . . . . . . . .  	NUMBER	0A0D	
$M_DATE_MASK . . . . . . . . . .  	NUMBER	0010	
$M_DBCS_TERM . . . . . . . . . .  	NUMBER	0000	
$M_DCOUNT  . . . . . . . . . . .  	NUMBER	0001	
$M_DEF_DATE_FORM . . . . . . . .  	NUMBER	0000	
$M_DEF_DATE_SEP  . . . . . . . .  	NUMBER	002D	
$M_DEF_DECI_SEP  . . . . . . . .  	NUMBER	002E	
$M_DEF_TIME_FORM . . . . . . . .  	NUMBER	0001	
$M_DEF_TIME_SEP  . . . . . . . .  	NUMBER	003A	
$M_DISPLAY_$_STRING  . . . . . .  	N PROC	0F00	CODE	Length = 0035
$M_DISPLAY_H_STRING  . . . . . .  	N PROC	0F35	CODE	Length = 002E
$M_DISPLAY_MESSAGE . . . . . . .  	N PROC	1011	CODE	Length = 00F3
$M_DISPLAY_REPLACE . . . . . . .  	N PROC	1259	CODE	Length = 00BF
$M_DISPLAY_STRING  . . . . . . .  	N PROC	0EC5	CODE	Length = 003B
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Symbols-25


$M_DWORD . . . . . . . . . . . .  	NUMBER	0030	
$M_END . . . . . . . . . . . . .  	NUMBER	0000	
$M_EXTPAR_TYPE . . . . . . . . .  	NUMBER	0008	
$M_EXT_CLS . . . . . . . . . . .  	NUMBER	FFFF	
$M_EXT_ERR_FLAG  . . . . . . . .  	NUMBER	FFFF	
$M_EXT_PAR_REPLACE . . . . . . .  	N PROC	1104	CODE	Length = 002D
$M_FIND_SPECIFIED_MSG  . . . . .  	N PROC	11E0	CODE	Length = 0079
$M_FIRST_THOU  . . . . . . . . .  	NUMBER	0003	
$M_FLUSH_BUF . . . . . . . . . .  	N PROC	1318	CODE	Length = 001C
$M_GET_DBCS_VEC  . . . . . . . .  	N PROC	0DCA	CODE	Length = 0018
$M_GET_EXT_ERR_39  . . . . . . .  	N PROC	0F63	CODE	Length = 0009
$M_GET_MSG_ADDRESS . . . . . . .  	N PROC	1131	CODE	Global	Length = 00A0
$M_ID_SZ . . . . . . . . . . . .  	NUMBER	0004	
$M_INCLUDE . . . . . . . . . . .  	NUMBER	FFFF	
$M_INDEX . . . . . . . . . . . .  	NUMBER	0004	
$M_IS_IT_DBCS  . . . . . . . . .  	N PROC	0F83	CODE	Length = 0024
$M_LOAD  . . . . . . . . . . . .  	NUMBER	FFFF	
$M_MAX_2_YEAR  . . . . . . . . .  	NUMBER	0063	
$M_MSGDATA_ONLY  . . . . . . . .  	NUMBER	0000	
$M_MSGSERV_1 . . . . . . . . . .  	N PROC	140F	CODE	Global	Length = 000A
$M_MSGSERV_2 . . . . . . . . . .  	N PROC	14ED	CODE	Global	Length = 000B
$M_NEG_SIGN  . . . . . . . . . .  	NUMBER	002D	
$M_NEXT_DBCS_VECTOR  . . . . . .  	NUMBER	0002	
$M_NO_CRLF_MASK  . . . . . . . .  	NUMBER	0080	
$M_NO_HANDLE . . . . . . . . . .  	NUMBER	-0001	
$M_NULL  . . . . . . . . . . . .  	NUMBER	0000	
$M_NUM_CLS . . . . . . . . . . .  	NUMBER	0001	
$M_ONE_REPLACE . . . . . . . . .  	NUMBER	0001	
$M_PARSE_FLAG  . . . . . . . . .  	NUMBER	FFFF	
$M_PAR_CLS . . . . . . . . . . .  	NUMBER	FFFF	
$M_PM  . . . . . . . . . . . . .  	NUMBER	0070	
$M_REPLACE . . . . . . . . . . .  	NUMBER	FFFF	
$M_REPL_DONE . . . . . . . . . .  	NUMBER	0000	
$M_RES_ADDRS_SZ  . . . . . . . .  	NUMBER	0085	
$M_RT  . . . . . . . . . . . . .  	L BYTE	0C35	CODE	Global
$M_SECOND_THOU . . . . . . . . .  	NUMBER	0006	
$M_SERVICE . . . . . . . . . . .  	NUMBER	0000	
$M_SET_LEN_IN_CX . . . . . . . .  	N PROC	11D1	CODE	Length = 000F
$M_SINGLE_CHAR . . . . . . . . .  	NUMBER	0001	
$M_SIZE_MASK . . . . . . . . . .  	NUMBER	0030	
$M_SL  . . . . . . . . . . . . .  	TEXT  DS:[SI]		
$M_SPACE . . . . . . . . . . . .  	NUMBER	0020	
$M_SPACE_HYP . . . . . . . . . .  	NUMBER	2D20	
$M_SPECIAL_CASE  . . . . . . . .  	NUMBER	0030	
$M_SPECIAL_MSG_NUM . . . . . . .  	NUMBER	FFFF	
$M_STRUC . . . . . . . . . . . .  	NUMBER	0000	
$M_SUBS  . . . . . . . . . . . .  	NUMBER	0000	
$M_TEMP_BUF_SZ . . . . . . . . .  	NUMBER	0040	
$M_TERMINATING_FLAG  . . . . . .  	NUMBER	-0001	
$M_THIRD_THOU  . . . . . . . . .  	NUMBER	0009	
$M_TIMEDATE_PAD  . . . . . . . .  	NUMBER	0030	
$M_TIME_MASK . . . . . . . . . .  	NUMBER	0001	
$M_TYPE_MASK . . . . . . . . . .  	NUMBER	000F	
$M_UNLIM_W . . . . . . . . . . .  	NUMBER	0000	
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:27
DOS - KEYB Command  -  Transient Command Processing         Symbols-26


$M_VERSION_CHECK . . . . . . . .  	N PROC	0E51	CODE	Length = 002F
$M_WORD  . . . . . . . . . . . .  	NUMBER	0020	
??0000 . . . . . . . . . . . . .  	L NEAR	11C9	CODE
@CPU . . . . . . . . . . . . . .  	TEXT  0101h		
@FILENAME  . . . . . . . . . . .  	TEXT  keybcmd		
@VERSION . . . . . . . . . . . .  	TEXT  510		


  14526 Source  Lines
  20933 Total   Lines
   1433 Symbols

  43174 + 77635 Bytes symbol space free

      0 Warning Errors
      0 Severe  Errors
