Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-1


				page	       60,132
				name	       _msgret
				title	       C to Message Retriever
				;-------------------------------------------------------------------
				;
				;	MODULE: 	_msgret
				;
				;	PURPOSE:	Supplies an interface between C programs and
				;			the DOS 3.3 message retriever
				;
				;	CALLING FORMAT:
				;			msgret(&inregs,&outregs);
				;
				;	DATE:		5-21-87
				;
				;-------------------------------------------------------------------
				
					INCLUDE SYSMSG.INC		;PERMIT SYSTEM MESSAGE HANDLER DEFINITION ;AN000;
			     C		PAGE	,132
			     C		SUBTTL	DOS - Message Retriever - SYSTEM CONTROL file
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;; DOS -- Message Retriever
			     C	;; (c) Copyright 1988 Microsoft
			     C	;;
			     C	;; File Name:	SYSMSG.INC
			     C	;; ----------
			     C	;;
			     C	;; Description: Message retriever functions are included into source code
			     C	;; ------------ by referencing a MSG_SERVICES macro. That macro is defined
			     C	;;		here as well as the logic to include necessary .ASM and .INC
			     C	;;		files.
			     C	;;
			     C	;;
			     C	;; Documentation Reference:
			     C	;; ------------------------
			     C	;;		DOS -Message Retriever I0 Document - Feb. ?? 1987
			     C	;;		DOS -Message Retriever I1 Document - Mar. ?? 1987
			     C	;;		DOS -Message Retriever I2 Document - Mar. ?? 1987
			     C	;;		DOS -Final Functional Specification Document - Mar ?? 1987
			     C	;;
			     C	;; Procedures Contained in This File:
			     C	;; ---------------------------------
			     C	;;		None
			     C	;;
			     C	;; Include Files Required:
			     C	;; -----------------------
			     C	;;		MSGSERV.INC	   := All message services
			     C	;;		????		   := ????
			     C	;;
			     C	;; External Procedure References:
			     C	;; ------------------------------
			     C	;;		None
			     C	;;
			     C	;; Linkage Instructions:
			     C	;; --------------------
			     C	;;		None
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-2
DOS - Message Retriever - SYSTEM CONTROL file               

			     C	;;
			     C	;; Change History:
			     C	;; ---------------
			     C	;;		CREATED 	March, 1987	RPS
			     C	;;
			     C	;; Psuedocode:
			     C	;; -----------
			     C	;;		None
			     C	;;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C					       ;;
			     C	INCLUDE        VERSIONA.INC	       ;;AN003;;
			     C	
 = 0004                      C	major_version	    equ     4	    ;Major DOS version
 = 0000                      C	minor_version	    equ     00	    ;Minor DOS Version
			     C	
 = 0004                      C	expected_version    equ     (MINOR_VERSION SHL 8)+MAJOR_VERSION
			     C	
 = 0005                      C	alt_major_version    equ     5	    ;Major DOS version
 = 001A                      C	alt_minor_version    equ     26	    ;Minor DOS Version
			     C	
 = 1A05                      C	alt_expected_version    equ     (alt_minor_version SHL 8) + alt_major_version
			     C	
 = 0005                      C	new_major_version    equ     5	    ;Major DOS version
 = 0026                      C	new_minor_version    equ     38	    ;Minor DOS Version
 = 2605                      C	new_expected_version    equ     (new_minor_version SHL 8) + new_major_version
			     C	
			     C	
			     C	       ;******************************
			     C	       ;Each assembler program should:
			     C	       ;  mov ah,030h			;DOS Get Version function
			     C	       ;  int 021h			;Version ret. in AX,minor version first
			     C	       ;  cmp ax,expected_version	;ALL utilities should check for an
			     C	       ;  jne error_handler		; EXACT version match.
			     C	       ;******************************
			     C	
			     C	
 = 0000                      C	FALSE	       = 0		       ;;
 = FFFF                      C	TRUE	       = NOT FALSE	       ;;    List message services and flags
			     C					       ;;
			     C	
			     C	; Control Characters For Message Skeleton file
			     C	
 = 0000                      C	NULL			EQU	00H    ;; Null
 = 0007                      C	BELL			EQU	07H    ;; Bell
 = 0009                      C	TAB			EQU	09H    ;; Tab
 = 000A                      C	LF			EQU	0AH    ;; Line Feed
 = 000B                      C	HOME			EQU	0BH    ;; Home
 = 000C                      C	FORMFD			EQU	0CH    ;; Form Feed
 = 000D                      C	CR			EQU	0DH    ;; Carriage Return
 = 003A                      C	COLON			EQU	3AH    ;; Colon
			     C	
			     C	; SYSDISPMSG and SYSGETMSG Equates
			     C	
 = 0000                      C	MSG_SER_CLASS		EQU	00H    ;; Message Service Class (reserved)
 = 0001                      C	EXT_ERR_CLASS		EQU	01H    ;; DOS Extended error class
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-3
DOS - Message Retriever - SYSTEM CONTROL file               

 = 0002                      C	PARSE_ERR_CLASS 	EQU	02H    ;; Parse error class
 = 00FF                      C	UTILITY_MSG_CLASS	EQU	0FFH   ;; Utility message class
			     C	
 = FFFF                      C	NO_HANDLE		EQU	0FFFFH ;; No handle specified (Use DOS functions 01H-09H only)
			     C	
 = 0000                      C	NO_REPLACE		EQU	0000H  ;; No replacable parameters
			     C	
			     C	; SUBLIST Equates
			     C	
 = 000B                      C	  Sublist_Length	EQU	11     ;; Length of sublist structure
 = 0000                      C	  Reserved		EQU	0      ;; Reserved byte field
			     C	
 = 0000                      C	  Left_Align		EQU	0      ;;00xxxxxx
 = 0080                      C	  Right_Align		EQU	80h    ;;10xxxxxx
			     C	
 = 0000                      C	  Char_type		EQU	0      ;;axxx0000 - Character type
 = 0000                      C	  Char_Field_Char	EQU	0      ;;a0000000
 = 0010                      C	  Char_Field_ASCIIZ	EQU	10h    ;;a0010000
			     C	
 = 0001                      C	  Unsgn_Bin_Type	EQU	01h    ;;axxx0001 - Unsigned Binary to Decimal character
 = 0011                      C	  Unsgn_Bin_Byte	EQU	11h    ;;a0010001
 = 0021                      C	  Unsgn_Bin_Word	EQU	21h    ;;a0100001
 = 0031                      C	  Unsgn_Bin_DWord	EQU	31h    ;;a0110001
			     C	
 = 0002                      C	  Sgn_Bin_Type		EQU	02h    ;;axxx0010 - Signed Binary to Decimal character
 = 0012                      C	  Sgn_Bin_Byte		EQU	12h    ;;a0010010
 = 0022                      C	  Sgn_Bin_Word		EQU	22h    ;;a0100010
 = 0032                      C	  Sgn_Bin_DWord 	EQU	32h    ;;a0110010
			     C	
 = 0003                      C	  Bin_Hex_Type		EQU	03h    ;;axxx0011 - Unsigned Binary to Hexidecimal character
 = 0013                      C	  Bin_Hex_Byte		EQU	13h    ;;a0010011
 = 0023                      C	  Bin_Hex_Word		EQU	23h    ;;a0100011
 = 0033                      C	  Bin_Hex_DWord 	EQU	33h    ;;a0110011
			     C	
 = 0004                      C	  Date_Type		EQU	04h    ;;axxx0100 - Date to character using current country format
 = 0014                      C	  Date_MD		EQU	14h    ;;a0010100
 = 0024                      C	  Date_MDY_2		EQU	24h    ;;a0100100
 = 0034                      C	  Date_MDY_4		EQU	34h    ;;a0110100
			     C	
 = 0005                      C	  Time_Cty_Type 	EQU	05h    ;;axxx0101 - Time to character using current country format
 = 0005                      C	  Time_HHMM_Cty 	EQU	05h    ;;a0000101
 = 0015                      C	  Time_HHMMSS_Cty	EQU	15h    ;;a0010101
 = 0025                      C	  Time_HHMMSSHH_Cty	EQU	25h    ;;a0100101
			     C	
 = 0006                      C	  Time_24_Type		EQU	06h    ;;axxx0110 - Time to character using 24 hour format
 = 0006                      C	  Time_HHMM_24		EQU	06h    ;;a0000110
 = 0016                      C	  Time_HHMMSS_24	EQU	16h    ;;a0010110
 = 0026                      C	  Time_HHMMSSHH_24	EQU	26h    ;;a0100110
			     C	
 = 0008                      C	  $M_EXTPAR_Type	EQU	08h    ;;axxx1000 - Special case for extended parse replace format
			     C	
 = 0000                      C	NO_INPUT		EQU	00H    ;; No input characters
 = 0001                      C	DOS_KEYB_INP		EQU	01H    ;; DOS INT 21H - AH=01H := Keyboard Input
 = 0007                      C	DOS_DIR_CON_INP 	EQU	07H    ;; DOS INT 21H - AH=07H := Direct Console Input Without Echo
 = 0008                      C	DOS_CON_INP		EQU	08H    ;; DOS INT 21H - AH=08H := Console Input Without Echo (Check 
				CTL-BK)
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-4
DOS - Message Retriever - SYSTEM CONTROL file               

 = 000A                      C	DOS_BUF_KEYB_INP	EQU	0AH    ;; DOS INT 21H - AH=0AH := Buffered Keyboard Input
 = 000C                      C	DOS_CLR_KEYB_BUF	EQU	0CH    ;; DOS INT 21H - AH=0CH := Clear keyboard buffer
 = 0040                      C	DOS_WRITE_HANDLE	EQU	40H    ;; DOS INT 21H - AH=40H := Write to a DOS handle
 = 0009                      C	DOS_DISP_STRING 	EQU	09H    ;; DOS INT 21H - AH=09H := Display $ terminated string
 = 0002                      C	DOS_DISP_CHAR		EQU	02H    ;; DOS INT 21H - AH=02H := Display Character
 = 0002                      C	LOWEST_4CH_VERSION	EQU	0002H  ;; First DOS version to allow AH = 4CH Exit (VERSION 2.00)
			     C	
 = 6300                      C	DOS_GET_DBCS_INFO	EQU   6300H    ;; DOS INT 21H - AX=6507H := Get DBCS Vector Table
 = 0059                      C	DOS_GET_EXT_ERROR	EQU	59H    ;; DOS INT 21H - AH=59H := Get Extended Error
 = 0000                      C	DOS_GET_EXT_ERROR_BX	EQU	00H    ;; DOS INT 21H - BX=0000H := Version 0
			     C	
 = 6C00                      C	DOS_EXTENDED_OPEN	EQU   6C00H    ;AN003; DOS INT 21H - AX=6C00H := Extended Open
 = 2000                      C	NO_CRIT_OPEN		EQU   2000H    ;AN003; Extended Open Mode bit
 = 0101                      C	NOT_EX_FAIL_EX_OPEN	EQU   0101H    ;AN003; Extended Open Flag
 = 4200                      C	DOS_LSEEK_FILE		EQU   4200H    ;AN003; DOS INT 21H - AX=4200H := LSEEK file
 = 003F                      C	DOS_READ_BYTE		EQU	3FH    ;AN003; DOS INT 21H - AH=3FH   := Read byte block
 = 003E                      C	DOS_CLOSE_FILE		EQU	3EH    ;AN003; DOS INT 21H - AH=3EH   := Close file handle
			     C	
 = 0500                      C	IFSFUNC_INSTALL_CHECK	EQU   0500H    ;AN006; IFSFUNC Installation Check
 = 0502                      C	IFS_GET_ERR_TEXT	EQU   0502H    ;AN006; IFSFUNC Get Extended Error Text
 = 00FF                      C	IFSFUNC_INSTALLED	EQU    0FFH    ;AN006; Return code if IFSFUNC is installed
			     C	
 = 0027                      C	EXT_ERR_39		EQU	39     ;; Insufficent Disk Space EXTENDED ERROR (changed from hex to
				 decimal - eg d201)
 = 0001                      C	ERROR_CLASS_39		EQU	01H    ;;   Error Class = 1
 = 0004                      C	ACTION_39		EQU	04H    ;;   Suggested Action = 4
 = 0001                      C	LOCUS_39		EQU	01H    ;;   Locus = 1
			     C	
 = 0038                      C	DOS_GET_COUNTRY 	EQU	38H    ;; DOS INT 21H - AH=38H := Get Country Dependant Information
 = 0030                      C	DOS_GET_VERSION 	EQU	30H    ;; DOS INT 21H - AH=30H := Get DOS Version number
 = 4400                      C	DOS_IOCTL_GET_INFO	EQU	4400H  ;; DOS INT 21H - AH=4400H := I/O control for devices
 = 4401                      C	DOS_IOCTL_SET_INFO	EQU	4401H  ;; DOS INT 21H - AH=4401H := I/O control for devices
 = 122E                      C	DOS_GET_EXT_PARSE_ADD	EQU	122EH  ;; DOS INT 2FH - AX=122EH := Get Extended/Parse error address
 = 0000                      C	DOS_GET_EXTENDED	EQU	00     ;; DOS INT 2FH - AX=122EH - DL=00 := Get Extended address
 = 0002                      C	DOS_GET_PARSE		EQU	02     ;; DOS INT 2FH - AX=122EH - DL=02 := Get Parse address
 = 0004                      C	DOS_GET_CRITICAL	EQU	04     ;; DOS INT 2FH - AX=122EH - DL=04 := Get Critical address
 = 0006                      C	DOS_GET_FILE		EQU	06     ;; DOS INT 2FH - AX=122EH - DL=06 := Get File system dependan
				t
 = 0008                      C	DOS_GET_ADDR		EQU	08     ;; DOS INT 2FH - AX=122EH - DL=08 := Get Address of READ_DISK
				_PROC
 = 0009                      C	DOS_SET_ADDR		EQU	09     ;; DOS INT 2FH - AX=122EH - DL=09 := Set Address of READ_DISK
				_PROC
 = 000F                      C	LOW_NIB_MASK		EQU	0FH    ;; Mask out the high byte
 = 00C0                      C	DOS_CLR_KEYB_BUF_MASK	EQU	0C0H   ;; Check if high nibble is C Hex
 =-0001                      C	$M_CON_INP		EQU	-1     ;; If DOS INT 21H Function 06H - DL := 0FFH for input
 = 0013                      C	$M_CRIT_LO		EQU	19     ;; First Extended Error considered CRITICAL
 = 0027                      C	$M_CRIT_HI		EQU	39     ;; Last Extended Error considered CRITICAL (EG - D191)
 = 0061                      C	$M_AM			EQU	"a"    ;; Time format AM indicator
 = 0070                      C	$M_PM			EQU	"p"    ;; Time format PM indicator
 = 002D                      C	$M_NEG_SIGN		EQU	"-"    ;; Signed decimal number format negative indicator
 = 0001                      C	$M_DEF_TIME_FORM	EQU	 1     ;; Default Time format - 24 hour
 = 0000                      C	$M_DEF_DATE_FORM	EQU	 0     ;; Default Time format - 0 := USA format
 = 003A                      C	$M_DEF_TIME_SEP 	EQU	":"    ;; Default Time separator - ":"
 = 002D                      C	$M_DEF_DATE_SEP 	EQU	"-"    ;; Default Time separator - "-"
 = 002E                      C	$M_DEF_DECI_SEP 	EQU	"."    ;; Default Time hundreds separator - "."
 = 0030                      C	$M_TIMEDATE_PAD 	EQU	"0"    ;; Time/Date PAD character - "0" (ie 12:03p)
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-5
DOS - Message Retriever - SYSTEM CONTROL file               

 = 0063                      C	$M_MAX_2_YEAR		EQU	99     ;; Maximum 2 digit year
 = 0001                      C	$M_SINGLE_CHAR		EQU	1      ;; A single character is this long      ^
 = 0030                      C	$M_SPECIAL_CASE 	EQU	30H    ;; Special case for replacable parameters %0
 = 0000                      C	$M_UNLIM_W		EQU	0      ;; Unlimited width character
 = 002C                      C	$M_COMMA		EQU	","    ;; Default Thousand separate
 = 0A0D                      C	$M_CR_LF		EQU	0A0DH  ;; Default CR/LF
 = 2D20                      C	$M_SPACE_HYP		EQU	"- "   ;; Default Space/Hyphan
 = 0020                      C	$M_SPACE		EQU	" "    ;; Default Space
 = 0000                      C	$M_NULL 		EQU	0      ;; Null
 = 0003                      C	$M_FIRST_THOU		EQU	3      ;; Location of first thousand separator
 = 0006                      C	$M_SECOND_THOU		EQU	6      ;; Location of second thousand separator
 = 0009                      C	$M_THIRD_THOU		EQU	9      ;; Location of third thousand separator
 = 000A                      C	$M_BASE10		EQU	10     ;; Base 10 for arthmetic
 = 0010                      C	$M_BASE16		EQU	16     ;; Base 16 for arthmetic
 = 0000                      C	$M_CLASS_NOT_EXIST	EQU	 0     ;; Does class exist?
 =-0001                      C	$M_TERMINATING_FLAG	EQU	-1     ;; Is there any more classes?
 = 0002                      C	$M_ADDR_SZ_NEAR 	EQU	2      ;; Size to increment if NEAR
 = 0004                      C	$M_ADDR_SZ_FAR		EQU	4      ;; Size to increment if FAR
 = DS:[SI]                   C	$M_SL			EQU   DS:[SI]  ;; Refer to SUBLIST as $M_SL
 =-0001                      C	$M_NO_HANDLE		EQU	-1     ;; No handle flag
 = 0040                      C	$M_TEMP_BUF_SZ		EQU	64     ;; Size of temporary buffer	 ;AN003;
 = 0002                      C	$M_NEXT_DBCS_VECTOR	EQU	2      ;; Amount to increment to get next vector
 = 0000                      C	$M_DBCS_TERM		EQU    0000    ;; DBCS vector table terminating flag
 = FFFF                      C	$M_SPECIAL_MSG_NUM	EQU    0FFFFH  ;; Special generic message number
 = 0002                      C	$M_CRLF_SIZE		EQU    2       ;; Size of the CR LF message
 = 0080                      C	$M_NO_CRLF_MASK 	EQU  10000000B ;; Mask to supress CR LF
 = 0001                      C	$M_ONE_REPLACE		EQU    1       ;; Indicate one replacement
 = 0001                      C	$M_CRIT_ERR_MASK	EQU  00000001B ;; Mask to allow EOF/EOI Crit error
			     C					       ;;
 = 0080                      C	$M_ALIGN_MASK		EQU  10000000b ;; Mask for align
 = 000F                      C	$M_TYPE_MASK		EQU  00001111b ;; Mask for types
 = 0030                      C	$M_SIZE_MASK		EQU  00110000b ;; Mask for types
 = 0001                      C	$M_TIME_MASK		EQU  00000001b ;; Mask for TIME
 = 0010                      C	$M_DATE_MASK		EQU  00010000b ;; Mask for TIME
 = 0010                      C	$M_BYTE 		EQU  00010000b ;; BYTE indicator
 = 0020                      C	$M_WORD 		EQU  00100000b ;; WORD indicator
 = 0030                      C	$M_DWORD		EQU  00110000b ;; DWORD indicator
			     C	
			     C	; Standard reserved DOS handles
			     C	
 = 0000                      C	STDIN			EQU	0000H  ;; Standard Input device handle
 = 0001                      C	STDOUT			EQU	0001H  ;; Standard Output device handle
 = 0002                      C	STDERR			EQU	0002H  ;; Standard Error Output device handle
 = 0003                      C	STDAUX			EQU	0003H  ;; Standard Auxiliary device handle
 = 0004                      C	STDPRN			EQU	0004H  ;; Standard Printer device handle
			     C	
			     C	; Reserved Message Service equates
			     C	
 = FFFF                      C	NEARmsg 		 =	TRUE   ;; \
 = 0000                      C	NOVERCHECKmsg		 =	FALSE  ;;  |
 = 0000                      C	MSGDATA 		 =	FALSE  ;;  |
 = 0000                      C	FARmsg			 =	FALSE  ;;  |
 = 0000                      C	GETmsg			 =	FALSE  ;;  |
 = 0000                      C	LOADmsg 		 =	FALSE  ;;  |
 = 0000                      C	DISPLAYmsg		 =	FALSE  ;;   } Set default cases
 = 0000                      C	SETSTDIO		 =	FALSE  ;;  |
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-6
DOS - Message Retriever - SYSTEM CONTROL file               

 = 0000                      C	NOCHECKSTDIN		 =	FALSE  ;;  |
 = 0000                      C	NOCHECKSTDOUT		 =	FALSE  ;;  |
 = 0000                      C	DISK_PROC		 =	FALSE  ;;  |			       ;AN003;
 = 0000                      C	INPUTmsg		 =	FALSE  ;;  |
 = 0000                      C	CHARmsg 		 =	FALSE  ;;  |
 = 0000                      C	NUMmsg			 =	FALSE  ;;  |
 = 0000                      C	TIMEmsg 		 =	FALSE  ;;  |
 = 0000                      C	DATEmsg 		 =	FALSE  ;; /
			     C	
			     C	
 = FFFF                      C	$M_STRUC		 =	TRUE   ;; Internal message service defaults
 = FFFF                      C	$M_LOAD 		 =	TRUE   ;;
 = FFFF                      C	$M_SUBS 		 =	TRUE   ;;
 = FFFF                      C	$M_REPLACE		 =	TRUE   ;;
 = 0000                      C	$M_REPL_DONE		 =	FALSE  ;;
 = FFFF                      C	$M_CHAR_ONLY		 =	TRUE   ;;
 = FFFF                      C	$M_PARSE_FLAG		 =	TRUE   ;;
 = FFFF                      C	$M_EXT_ERR_FLAG 	 =	TRUE   ;;
 = FFFF                      C	$M_MSGDATA_ONLY 	 =	TRUE   ;;
 = 0000                      C	$M_END			 =	FALSE  ;;
 = FFFF                      C	$M_EXT_CLS		 =	TRUE   ;;
 = FFFF                      C	$M_PAR_CLS		 =	TRUE   ;;
			     C					       ;;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;;	$M_POPF 	     Macro
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	
			     C	$M_POPF    MACRO
			     C		   LOCAL   $M_MYRET
			     C		   JMP	   $+3
			     C	$M_MYRET   LABEL   NEAR
			     C		   IRET
			     C		   PUSH    CS
			     C		   CALL    $M_MYRET
			     C	ENDM
			     C	
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;;
			     C	;;  Message Retreiver requests
			     C	;;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C					       ;
			     C	MSG_UTILNAME  Macro   utilname	       ;
			     C					       ;
			     C	   INCLUDE &utilname.CTL	       ;  Include the control file for the utility
			     C	   $M_STRUC = TRUE		       ;
			     C	   INCLUDE MSGSERV.ASM		       ;  Get structure definitions
			     C					       ;
			     C	ENDM				       ;
			     C					       ;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;;	MSG_SERVICES		Macro
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C						  ;
			     C	MSG_SERVICES Macro   varlist		  ;  MACRO used in source routine
			     C						  ;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-7
DOS - Message Retriever - SYSTEM CONTROL file               

			     C	   $M_SERVICE = FALSE			  ;  Reset service flag
			     C	   IRP	   var,<varlist>		  ;  FOR each variable in the list
			     C	     $M_INCLUDE = TRUE			  ;  Reset include flag
			     C						  ;	For each service predefined
			     C	
			     C	IRP  serv,<MSGDATA,LOADmsg,NOVERCHECKmsg,DISPLAYmsg,GETmsg,INPUTmsg,CHARmsg,NUMmsg,TIMEmsg,DATEmsg,N
				EARmsg,FARmsg,COMR,COMT>
			     C	
			     C		 IFDIF <var>,<serv>		  ;	  IF it IS a service (defined above)
			     C		 ELSE				  ;
			     C		   IFDIF <var>,<MSGDATA>	  ;	    IF it is NOT the message data space request
			     C		     $M_MSGDATA_ONLY = FALSE	  ;	       Instruct the assembler to include all service
				s
			     C		   ENDIF			  ;	    ENDIF
			     C		   IRP	repl,<CHARmsg,NUMmsg,TIMEmsg,DATEmsg>  ; IF it is a replace service
			     C		     IFIDN  <var>,<repl>	  ;
			     C		       $M_REPLACE = TRUE	  ;	       Set replace flag
			     C		     ENDIF			  ;
			     C		   ENDM 			  ;
			     C		   serv = TRUE			  ;	    Let the assembler know about the service
			     C		   $M_SERVICE = TRUE		  ;	    Let the macro know it was a service
			     C		   $M_INCLUDE = FALSE		  ;	    Let the macro know it wasn't a class
			     C		 ENDIF				  ;	  ENDIF
			     C	      ENDM				  ;	NEXT service
			     C	
			     C	MSG_SERVICES2  <varlist>
			     C						  ; Continue further checks (If we add any more predefined
			     C						  ;  function to the above IRP command, it generates a
			     C						  ;  syntax error. We must continue the processing in anothe
				r
			     C						  ;  MACRO called MSG_SERVICES2)
			     C	
			     C	      IF $M_INCLUDE			  ;	IF message class was requested
			     C		 $M_INC var			  ;	   Include it as a message class
			     C	      ENDIF				  ;	ENDIF
			     C	   ENDM 				  ;  NEXT variable
			     C						  ;
			     C	   IF $M_SERVICE			  ;	IF it any services were requested THEN
			     C	     INCLUDE MSGSERV.ASM		  ;	   THEN include module to get service
			     C	   ENDIF				  ;	ENDIF
			     C	
			     C	ENDM
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;;	MSG_SERVICES2		Macro
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C						  ;
			     C	MSG_SERVICES2 Macro   varlist2		  ;  MACRO used in source routine
			     C						  ;
			     C						    ;  FOR each variable in the list
			     C	   IRP	   var2,<varlist2>
			     C							       ; For each service predefined
			     C	      IRP  serv2,<SETSTDIO,NOCHECKSTDIN,NOCHECKSTDOUT,DISK_PROC>
			     C						    ;AN003; IF it IS a service (defined above)
			     C		 IFDIF <var2>,<serv2>
			     C		 ELSE				  ;
			     C		   serv2 = TRUE 		   ;	     Let the assembler know about the service
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-8
DOS - Message Retriever - SYSTEM CONTROL file               

			     C		   $M_SERVICE = TRUE		  ;	    Let the macro know it was a service
			     C		   $M_INCLUDE = FALSE		  ;	    Let the macro know it wasn't a class
			     C		 ENDIF				  ;	  ENDIF
			     C	      ENDM				  ;	NEXT service
			     C	   ENDM 				  ;  NEXT variable
			     C	ENDM					  ;
			     C						  ;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;; $M_INC		Macro
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C							 ;
			     C	$M_INC	Macro	ext				 ;
			     C							 ;
			     C	INCLUDE &ext					 ;
			     C							 ;
			     C	ENDM						 ;
			     C							 ;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;; $M_BUILD_PTRS	Macro
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C							 ;
			     C	$M_BUILD_PTRS Macro nummsg			 ;
			     C							 ;
			     C	    $M_INDEX =	    0				 ;
			     C	IF COMR 				     ; IF this is resident COMMAND.COM
			     C	    $M_MAKE_COMR			     ;
			     C	ELSE						 ; ELSE
			     C	  IF COMT				     ;	 IF this is transient COMMAND.COM
			     C	    $M_MAKE_COMT			     ;
			     C	  ELSE						 ;   ELSE
			     C							 ;
			     C	    $M_INDEX =	    0				 ;
			     C	    $M_COUNT =	    0				 ;     Build normal utilities
			     C							 ;
			     C	    REPT    nummsg				 ;
			     C	    $M_COUNT =	    $M_COUNT + 1		 ;
			     C	    $M_MAKE %$M_COUNT				 ;
			     C	    ENDM					 ;
			     C	  ENDIF 					 ;
			     C	ENDIF						 ;
			     C	ENDM						 ;
			     C							 ;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;; $M_MAKE		Macro
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C							 ;
			     C	$M_MAKE Macro $m_append 			 ;
			     C	IF  FARmsg					 ;
			     C	    CALL    FAR PTR $M_CLS_&$m_append		 ;  Get addressibilty to class &$M_APPEND (ES:DI)
			     C	    MOV     WORD PTR $M_RT.$M_CLASS_ADDRS+$M_INDEX+2,ES ;  Move into first avaliable table location
			     C	    MOV     WORD PTR $M_RT.$M_CLASS_ADDRS+$M_INDEX,DI ;
			     C	ELSE						 ;
			     C	    CALL    $M_CLS_&$m_append			 ;  Get addressibilty to class &$M_APPEND (ES:DI)
			     C	    MOV     WORD PTR $M_RT.$M_CLASS_ADDRS+$M_INDEX,DI ;
			     C	ENDIF						 ;
			     C	$M_INDEX =  $M_INDEX + 4			 ;  Set next available table location
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-9
DOS - Message Retriever - SYSTEM CONTROL file               

			     C							 ;
			     C	ENDM						 ;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;; $M_MAKE_COMR     Macro
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C							 ;
			     C	$M_MAKE_COMR   macro			     ;
			     C							 ;
			     C	    CALL    $M_CLS_3				 ;  Get addressibilty to class A
			     C	    MOV     WORD PTR $M_RT.$M_CLASS_ADDRS+$M_INDEX,DI ;
			     C	$M_INDEX =  $M_INDEX + 4			 ;  Set next available table location
			     C							 ;
			     C	    CALL    $M_CLS_4				 ;  Get addressibilty to class B
			     C	    MOV     WORD PTR $M_RT.$M_CLASS_ADDRS+$M_INDEX,DI ;
			     C	$M_INDEX =  $M_INDEX + 4			 ;  Set next available table location
			     C							 ;
			     C	    CALL    $M_CLS_5				 ;  Get addressibilty to class C
			     C	    MOV     WORD PTR $M_RT.$M_CLASS_ADDRS+$M_INDEX,DI ;
			     C	$M_INDEX =  $M_INDEX + 4			 ;  Set next available table location
			     C							 ;
			     C	    CALL    $M_CLS_6				 ;  Get addressibilty to class D
			     C	    MOV     WORD PTR $M_RT.$M_CLASS_ADDRS+$M_INDEX,DI ;
			     C	$M_INDEX =  $M_INDEX + 4			 ;  Set next available table location
			     C							 ;
			     C	    CALL    $M_CLS_7				 ;  Get addressibilty to class E
			     C	    MOV     WORD PTR $M_RT.$M_CLASS_ADDRS+$M_INDEX,DI ;
			     C	$M_INDEX =  $M_INDEX + 4			 ;  Set next available table location
			     C							 ;
			     C	ENDM						 ;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;; $M_MAKE_COMT     Macro
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C							 ;
			     C	$M_MAKE_COMT  macro			     ;
			     C							 ;
			     C	    CALL    $M_CLS_8				 ;  Get addressibilty to class A
			     C	    MOV     WORD PTR $M_RT.$M_CLASS_ADDRS+$M_INDEX,DI ;
			     C	$M_INDEX =  $M_INDEX + 4			 ;  Set next available table location
			     C							 ;
			     C	ENDM						 ;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				
					MSG_UTILNAME <MEM>		;IDENTIFY THE COMPONENT 		;AN000;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-10
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  0002[                 C1	    $M_CLASS_ADDRS   DD        $M_NUM_CLS DUP(0)	     ;;AN000;; Allow pointers to specified c
				lasses
	   00000000          C1	
			 ]   C1	
			     C1	
 0034  FFFFFFFF              C1	    $M_CLS_TERM      DD        -1			     ;;AN000;;
 0038  00000000              C1	    $M_DBCS_VEC      DD        0			     ;;AN000;; Save DBCS vector
 003C  0000                  C1	    $M_HANDLE	     DW        ?			     ;;AN000;;
 003E  00                    C1	    $M_SIZE	     DB        0			     ;;AN000;;
 003F  0D 0A                 C1	    $M_CRLF	     DB        0DH,0AH			     ;;AN004;; CR LF message
 0041  00                    C1	    $M_CLASS	     DB        ?			     ;;AN004;; Saved class
 0042  0000                  C1	    $M_RETURN_ADDR   DW        ?			     ;;AN000;;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-11
DOS - Message Retriever - MSGSTR.INC Module                 

 0044  0000                  C1	    $M_MSG_NUM	     DW        $M_NULL			     ;;AN000;;
 0046  000A                  C1	    $M_DIVISOR	     DW        10			     ;;AN000;; Default = 10 (must be a WORD 
				for division)
 0048  0040[                 C1	    $M_TEMP_BUF      DB        $M_TEMP_BUF_SZ DUP("$")	     ;;AN000;; Temporary buffer
	   24                C1	
			 ]   C1	
			     C1	
 0088  24                    C1	    $M_BUF_TERM      DB        "$"			     ;;AN000;;
			     C1	
 0089                        C1	$M_RES_ADDRS ENDS					     ;;AN000;;
			     C1	$M_COUNTRY_INFO STRUC					     ;;AN000;; Expected Country infomation
			     C1								     ;;
 0000  0048[                 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	
 0048  0000                  C1	    $M_DATE_FORMAT   DW       ? 			     ;;AN000;; <------- Date Format
 004A  0005[                 C1	    $M_CURR_SEPARA   DB       5 DUP(?)			     ;;AN000;;
	   ??                C1	
			 ]   C1	
			     C1	
 004F  00 00                 C1	    $M_THOU_SEPARA   DB       ?,0			     ;;AN000;; <------- Thou Separator
 0051  00 00                 C1	    $M_DECI_SEPARA   DB       ?,0			     ;;AN000;; <------- Decimal Separator
 0053  00 00                 C1	    $M_DATE_SEPARA   DB       ?,0			     ;;AN000;; <------- Date Separator
 0055  00 00                 C1	    $M_TIME_SEPARA   DB       ?,0			     ;;AN000;; <------- Time Separator
 0057  00                    C1	    $M_CURR_FORMAT   DB       ? 			     ;;AN000;;
 0058  00                    C1	    $M_SIG_DIGS_CU   DB       ? 			     ;;AN000;;
 0059  00                    C1	    $M_TIME_FORMAT   DB       ? 			     ;;AN000;; <------- Time Format
			     C1								     ;;
 005A                        C1	$M_COUNTRY_INFO ENDS					     ;;AN000;;
				
				;-------------------------------------------------------------------
				;-------------------------------------------------------------------
				
				
 0000				_TEXT	SEGMENT BYTE PUBLIC 'CODE'
 0000				_TEXT	ENDS
 0000				_DATA	SEGMENT WORD PUBLIC 'DATA'
 0000				_DATA	ENDS
 0000				CONST	SEGMENT WORD PUBLIC 'CONST'
 0000				CONST	ENDS
 0000				_BSS	SEGMENT WORD PUBLIC 'BSS'
 0000				_BSS	ENDS
				
				DGROUP	GROUP	CONST, _BSS, _DATA
					ASSUME	CS: DGROUP, DS: DGROUP, SS: DGROUP, ES: NOTHING
				
					public	data_sysloadmsg
					public	data_sysdispmsg
					public	data_sysgetmsg
				
 0000				_DATA	SEGMENT
				
					MSG_SERVICES <MSGDATA>
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-12
DOS - Message Retriever - MSGRES.TAB Module                 

 0000                        C1	      $M_RT   LABEL   BYTE				     ;;AN000;;
 0000  00000000              C1	      $M_RES_ADDRS <>					     ;;AN000;; Resident addresses
 0004  00000000              C1	
 0008  00000000              C1	
 000C  FFFFFFFF              C1	
 0010  00000000              C1	
 0014  00000000              C1	
 0018  FFFFFFFF              C1	
 001C  00000000              C1	
 0020  00000000              C1	
 0024  FFFFFFFF              C1	
 0028  FFFFFFFF              C1	
 002C  0002[                 C1	
 0034  FFFFFFFF              C1	
 0038  00000000              C1	
 003C  0000                  C1	
 003E  00                    C1	
 003F  0001[                 C1	
 0041  00                    C1	
 0042  0000                  C1	
 0044  0000                  C1	
 0046  0A00                  C1	
 0048  0040[                 C1	
 0088  24                    C1	
 0089  4D 53 20 44 4F 53     C1		DB	"MS DOS Version 4.00 (C)Copyright 1988 Microsoft Corp"
 00BD  4C 69 63 65 6E 73     C1		DB	"Licensed Material - Property of Microsoft  "
				
				 public amis_sign
					even
 00E8				amis_sign:
 00E8  65 63 6D				db "ecm"
 00EB  0005[				db 5 dup (' ')
	   20			
			 ]	
				
 00F0  6C 44 4F 53			db "lDOS"
 00F4  0004[				db 4 dup (' ')
	   20			
			 ]	
				
 00F8				amis_id:			; must be directly after amis_sign
 00F8  0000				dw 0
 00FA  0000				dw 0			; sequential number
 00FC  03				db amis_id_msg_end - amis_id_msg
 00FD				amis_id_msg:
 00FD  6D 65 6D				db "mem"		; our id name
 0100				amis_id_msg_end:
				
 =				AMIS_SIGN_SEGMENT equ DGROUP
				
					MSG_SERVICES <LOADmsg,FARmsg>
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-13
DOS - Message Retriever - LOADMSG.ASM Module                

 0100                        C1		SYSLOADMSG PROC FAR				     ;;AN000;;
 0100  50                    C1		PUSH	AX					     ;;AN000;
 0101  53                    C1		PUSH	BX					     ;;AN000;
 0102  52                    C1		PUSH	DX					     ;;AN000;
 0103  06                    C1		PUSH	ES					     ;;AN000;
 0104  57                    C1		PUSH	DI					     ;;AN000;
 0105  33 C9                 C1		XOR	CX,CX					     ;;AN000;  Reset to zero
 0107  8E C1                 C1		MOV	ES,CX					     ;;AN000;
 0109  33 FF                 C1		XOR	DI,DI					     ;;AN000;
 010B  B8 122E               C1		MOV	AX,DOS_GET_EXT_PARSE_ADD		     ;;AN000;; 2FH Interface
 010E  B2 00                 C1		MOV	DL,DOS_GET_EXTENDED			     ;;AN000;; Where are the Extended errors
				 in COMMAND.COM
 0110  CD 2F                 C1		INT	2FH					     ;;AN000;; Private interface
 0112  8C 06 000A R          C1		MOV	WORD PTR $M_RT.$M_EXT_COMMAND+2,ES	     ;;AN000;;	Move into first avaliable ta
				ble location
 0116  89 3E 0008 R          C1		MOV	WORD PTR $M_RT.$M_EXT_COMMAND,DI	     ;;AN000;;
 011A  B8 122E               C1		MOV	AX,DOS_GET_EXT_PARSE_ADD		     ;;AN000;; 2FH Interface
 011D  B2 02                 C1		MOV	DL,DOS_GET_PARSE			     ;;AN000;; Where are the Parse errors in
				 COMMAND.COM
 011F  CD 2F                 C1		INT	2FH					     ;;AN000;; Private interface
 0121  8C 06 0012 R          C1		MOV	WORD PTR $M_RT.$M_PARSE_COMMAND+2,ES	     ;;AN000;;	Move into first avaliable ta
				ble location
 0125  89 3E 0010 R          C1		MOV	WORD PTR $M_RT.$M_PARSE_COMMAND,DI	     ;;AN000;;
 0129  B8 122E               C1		MOV	AX,DOS_GET_EXT_PARSE_ADD		     ;;AN000;; 2FH Interface
 012C  B2 04                 C1		MOV	DL,DOS_GET_CRITICAL			     ;;AN000;; Where are the Critical errors
				 in COMMAND.COM
 012E  CD 2F                 C1		INT	2FH					     ;;AN000;; Private interface
 0130  8C 06 0022 R          C1		MOV	WORD PTR $M_RT.$M_CRIT_COMMAND+2,ES	     ;;AN000;;	Move into first avaliable ta
				ble location
 0134  89 3E 0020 R          C1		MOV	WORD PTR $M_RT.$M_CRIT_COMMAND,DI	     ;;AN000;;
 0138  B8 122E               C1		MOV	AX,DOS_GET_EXT_PARSE_ADD		     ;;AN001;; 2FH Interface
 013B  B2 06                 C1		MOV	DL,DOS_GET_FILE 			     ;;AN001;; Where are the FILE dependant 
				in IFSFUNC.EXE
 013D  CD 2F                 C1		INT	2FH					     ;;AN001;; Private interface
 013F  8C 06 0006 R          C1		MOV	WORD PTR $M_RT.$M_EXT_FILE+2,ES 	     ;;AN001;;	Move into first avaliable ta
				ble location
 0143  89 3E 0004 R          C1		MOV	WORD PTR $M_RT.$M_EXT_FILE,DI		     ;;AN001;;
 0147  9A 0C8B ---- R        C1		  CALL	  FAR PTR $M_MSGSERV_1			     ;;AN000;; Get addressibilty to MSGSERV 
				CLASS 1 (EXTENDED Errors)
 014C  8C 06 0002 R          C1		MOV	WORD PTR $M_RT.$M_EXT_ERR_ADDRS+2,ES	     ;;AN000;; Move into first avaliable tab
				le location
 0150  89 3E 0000 R          C1		MOV	WORD PTR $M_RT.$M_EXT_ERR_ADDRS,DI	     ;;AN000;;
 0154  8C 06 001E R          C1		MOV	WORD PTR $M_RT.$M_CRIT_ADDRS+2,ES	     ;;AN000;; Move into first avaliable tab
				le location
 0158  89 3E 001C R          C1		MOV	WORD PTR $M_RT.$M_CRIT_ADDRS,DI 	     ;;AN000;;
 015C  9A 0CAC ---- R        C1		  CALL	  FAR PTR $M_MSGSERV_2			     ;;AN000;; Get addressibilty to MSGSERV 
				CLASS 2 (PARSE Errors)
 0161  8C 06 0016 R          C1		MOV	WORD PTR $M_RT.$M_PARSE_ADDRS+2,ES	     ;;AN000;; Move into first avaliable tab
				le location
 0165  89 3E 0014 R          C1		MOV	WORD PTR $M_RT.$M_PARSE_ADDRS,DI	     ;;AN000;;
 0169  B8 122E               C1		MOV	AX,DOS_GET_EXT_PARSE_ADD		     ;;AN001;; 2FH Interface
 016C  B2 08                 C1		MOV	DL,DOS_GET_ADDR 			     ;;AN001;; Where is the READ_DISK_PROC i
				n COMMAND.COM
 016E  CD 2F                 C1		INT	2FH					     ;;AN001;; Private interface
 0170  8C 06 002A R          C1		MOV	WORD PTR $M_RT.$M_DISK_PROC_ADDR+2,ES	     ;;AN001;;	Move into first avaliable ta
				ble location
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-14
DOS - Message Retriever - LOADMSG.ASM Module                

 0174  89 3E 0028 R          C1		MOV	WORD PTR $M_RT.$M_DISK_PROC_ADDR,DI	     ;;AN001;;
 0178  9A 0B9D ---- R        C4	    CALL    FAR PTR $M_CLS_1		 ;  Get addressibilty to class &$M_APPEND (ES:DI) 
 017D  8C 06 002E R          C4	    MOV     WORD PTR $M_RT.$M_CLASS_ADDRS+$M_INDEX+2,ES ;  Move into first avaliable table location 
 0181  89 3E 002C R          C4	    MOV     WORD PTR $M_RT.$M_CLASS_ADDRS+$M_INDEX,DI ; 
 0185  9A 0C66 ---- R        C4	    CALL    FAR PTR $M_CLS_2		 ;  Get addressibilty to class &$M_APPEND (ES:DI) 
 018A  8C 06 0032 R          C4	    MOV     WORD PTR $M_RT.$M_CLASS_ADDRS+$M_INDEX+2,ES ;  Move into first avaliable table location 
 018E  89 3E 0030 R          C4	    MOV     WORD PTR $M_RT.$M_CLASS_ADDRS+$M_INDEX,DI ; 
 0192  E8 01AE R             C1		CALL	$M_GET_DBCS_VEC 			     ;;AN000;; Save the DBCS vector
 0195  E8 01C6 R             C1		CALL	$M_CHECKSTDIN				     ;;AN000;;	 Set EOF CHECK
 0198  E8 01D9 R             C1		CALL	$M_CHECKSTDOUT				     ;;AN000;;	 Set Disk Full CHECK
 019B  51                    C1		PUSH	CX					     ;;AN000;;
 019C  E8 0235 R             C1		CALL	$M_VERSION_CHECK			     ;;AN000;;	 Check Version
 019F  72 08                 C1		JC $MIF20
 01A1  59                    C1		  POP	  CX					     ;;AN000;;	Reset stack
 01A2  5F                    C1		  POP	  DI					     ;;AN000;;	Restore REGS
 01A3  07                    C1		  POP	  ES					     ;;AN000;;
 01A4  5A                    C1		  POP	  DX					     ;;AN000;;
 01A5  5B                    C1		  POP	  BX					     ;;AN000;;
 01A6  58                    C1		  POP	  AX					     ;;AN000;;
 01A7  EB 04                 C1		JMP SHORT $MEN20
 01A9                        C1	$MIF20:
 01A9  83 C4 0C              C1		  ADD	  SP,12 				     ;;AN000;;
 01AC  F9                    C1		  STC						     ;;AN000;;	Reset carry flag
 01AD                        C1	$MEN20:
 01AD  CB                    C1		RET						     ;;AN000;;
 01AE                        C1		SYSLOADMSG ENDP 				     ;;AN000;;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-15
DOS - Message Retriever - $M_VERSION_CHECK Proc             

 01AE                        C1	$M_GET_DBCS_VEC PROC NEAR				     ;;AN000;;
 01AE  50                    C1		PUSH	AX					     ;;AN000;; Save character to check
 01AF  56                    C1		PUSH	SI					     ;;AN000;;
 01B0  1E                    C1		PUSH	DS					     ;;AN000;;
 01B1  B8 6300               C1		MOV	AX,DOS_GET_DBCS_INFO			     ;;AN000;; DOS function to get DBSC envi
				ronment
 01B4  CD 21                 C1		INT	21H					     ;;AN000;; Get environment pointer
 01B6  1E                    C1		PUSH	DS					     ;;AN000;; Get environment pointer
 01B7  07                    C1		POP	ES					     ;;AN000;; Get environment pointer
 01B8  1F                    C1		POP	DS					     ;;AN000;; Get environment pointer
 01B9  72 08                 C1		JC $MIF23
 01BB  89 36 0038 R          C1		  MOV	  WORD PTR $M_RT.$M_DBCS_VEC,SI 	     ;;AN000;; Save DBCS Vector
 01BF  8C 06 003A R          C1		  MOV	  WORD PTR $M_RT.$M_DBCS_VEC+2,ES	     ;;AN000;;
 01C3                        C1	$MIF23:
 01C3  5E                    C1		POP	SI					     ;;AN000;;
 01C4  58                    C1		POP	AX					     ;;AN000;; Retrieve character to check
 01C5  C3                    C1		RET						     ;;AN000;; Return
 01C6                        C1	$M_GET_DBCS_VEC ENDP					     ;;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-16
DOS - Message Retriever - $M_CHECKSTDIN Proc                

 01C6                        C1	$M_CHECKSTDIN PROC NEAR 				     ;AN001;
 01C6  B8 4400               C1		  MOV	  AX,DOS_IOCTL_GET_INFO 		     ;AN001; Get info using IOCTL
 01C9  BB 0000               C1		  MOV	  BX,STDIN				     ;AN001;
 01CC  33 D2                 C1		  XOR	  DX,DX 				     ;AN001;
 01CE  CD 21                 C1		  INT	  21H					     ;AN001;
 01D0  80 CE 01              C1		  OR	  DH,$M_CRIT_ERR_MASK			     ;AN001; Turn on bit
 01D3  B8 4401               C1		  MOV	  AX,DOS_IOCTL_SET_INFO 		     ;AN001; Set info using IOCTL
 01D6  CD 21                 C1		  INT	  21H					     ;AN001;
 01D8  C3                    C1		  RET						     ;AN001;
 01D9                        C1	$M_CHECKSTDIN ENDP					     ;AN001;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-17
DOS - Message Retriever - $M_CHECKSTDOUT Proc               

 01D9                        C1	$M_CHECKSTDOUT PROC NEAR				     ;AN001;
 01D9  B8 4400               C1		  MOV	  AX,DOS_IOCTL_GET_INFO 		     ;AN001; Get info using IOCTL
 01DC  BB 0001               C1		  MOV	  BX,STDOUT				     ;AN001;
 01DF  33 D2                 C1		  XOR	  DX,DX 				     ;AN001;
 01E1  CD 21                 C1		  INT	  21H					     ;AN001;
 01E3  80 CE 01              C1		  OR	  DH,$M_CRIT_ERR_MASK			     ;AN001; Turn on bit
 01E6  B8 4401               C1		  MOV	  AX,DOS_IOCTL_SET_INFO 		     ;AN001; Set info using IOCTL
 01E9  CD 21                 C1		  INT	  21H					     ;AN001;
 01EB  C3                    C1		  RET						     ;AN001;
 01EC                        C1	$M_CHECKSTDOUT ENDP					     ;AN001;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-18
DOS - Message Retriever - $M_VERSION_CHECK Proc             

 01EC                        C1	check_amis:
 01EC  50                    C1		push ax
 01ED  1E                    C1		push ds
 01EE  56                    C1		push si
 01EF  06                    C1		push es
 01F0  57                    C1		push di
 01F1  52                    C1		push dx
 01F2  50                    C1		push ax				; version number, last on stack
 01F3  B4 00                 C1		mov ah, 0			; multiplex number = 0
 01F5                        C1	check_amis_loop:
 01F5  B0 00                 C1		mov al, 0
 01F7  CD 2D                 C1		int 2Dh				; installation check
 01F9  3C FF                 C1		cmp al, -1			; multiplexer installed ?
 01FB  75 21                 C1		jne check_amis_next		; no -->
 01FD  0E                    C1		 push cs
 01FE  1F                    C1		 pop ds
 01FF  BE 00E8 R             C1		mov si, offset AMIS_SIGN_SEGMENT:amis_sign
 0202  8E C2                 C1		mov es, dx			; es:di -> multiplexer's sign
 0204  B9 0008               C1		mov cx, 8			; 16 bytes
 0207  F3/ A7                C1		repe cmpsw			; compare
 0209  75 13                 C1		jne check_amis_next		; not us -->
 020B  8C CA                 C1		mov dx, cs			; dx:si -> amis_id
 020D  B0 11                 C1		mov al, 11h
 020F  CD 2D                 C1		int 2Dh				; CHG: al, bx, cx, dx, si, di
 0211  3C 00                 C1		cmp al, 0			; id call supported ?
 0213  74 0D                 C1		je check_amis_unsup		; no, allow if alt version -->
 0215  5A                    C1		pop dx
 0216  33 D2                 C1		xor dx, dx			; 2D.MM11 supported, mark that we need it
 0218  52                    C1		push dx
 0219  3C F0                 C1		cmp al, 0F0h			; CY if below 0F0h
 021B  EB 06 90              C1		jmp check_amis_done
 021E                        C1	check_amis_next:
 021E  FE C4                 C1		inc ah				; next multiplex number
 0220  75 D3                 C1		jnz check_amis_loop		; ZR if done, NZ if more to check -->
 0222                        C1	check_amis_unsup:
 0222  F9                    C1		stc				; multiplexer not found
 0223                        C1	check_amis_done:
 0223  5B                    C1		pop bx
 0224  5A                    C1		pop dx
 0225  5F                    C1		pop di
 0226  07                    C1		pop es
 0227  5E                    C1		pop si
 0228  1F                    C1		pop ds
 0229  58                    C1		pop ax
 022A  73 1C                 C1		jnc alt_good_DOS		; id is supported -->
 022C  81 FB 1A05            C1		cmp bx, alt_expected_version	; is it fine ?
 0230  74 16                 C1		je alt_good_DOS			; yes --> (NC)
 0232  EB 17 90              C1		jmp $MIF25			; no, cancel program -->
 0235                        C1	$M_VERSION_CHECK PROC NEAR				     ;;AN000;;
 0235  B4 30                 C1		  MOV	  AH,DOS_GET_VERSION			     ;;AN000;; Check that version matches VE
				RSIONA.INC
 0237  CD 21                 C1		  INT	  21H					     ;;AN000;;
 0239  3D 2605               C1		cmp	ax,new_expected_version	; compare with DOS version
 023C  74 AE                 C1		je check_amis
 023E  3D 1A05               C1		cmp	ax,alt_expected_version	; compare with DOS version
 0241  74 A9                 C1		je check_amis
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-19
DOS - Message Retriever - $M_VERSION_CHECK Proc             

 0243  3D 0004               C1		  CMP	  AX,EXPECTED_VERSION			     ;;AN000;; IF DOS_MAJOR is correct
 0246  75 03                 C1		  JNE $MIF25
 0248                        C1	alt_good_DOS:
 0248  F8                    C1		    CLC 					     ;;AN000;;	 Clear the carry flag
 0249  EB 18                 C1		  JMP SHORT $MEN25
 024B                        C1	$MIF25:
 024B  3D 0002               C1		    CMP     AX,LOWEST_4CH_VERSION		     ;;AN000;; Does this version support AH 
				= 4CH
 024E  73 05                 C1		    JNB $MIF27
 0250  BB FFFF               C1		      MOV     BX,NO_HANDLE			     ;;AN000;;	 No handle (version doesn't 
				support)
 0253  EB 03                 C1		    JMP SHORT $MEN27
 0255                        C1	$MIF27:
 0255  BB 0002               C1		      MOV     BX,STDERR 			     ;;AN000;;	 Standard Error
 0258                        C1	$MEN27:
 0258  B8 0001               C1		    MOV     AX,1				     ;;AN000;; Set message # 1
 025B  B9 0000               C1		    MOV     CX,NO_REPLACE			     ;;AN000;; No replacable parms
 025E  B2 00                 C1		    MOV     DL,NO_INPUT 			     ;;AN000;; No input
 0260  B6 FF                 C1		    MOV     DH,UTILITY_MSG_CLASS		     ;;AN000;; Utility class message
 0262  F9                    C1		    STC 					     ;;AN000;; Set Carry Flag
 0263                        C1	$MEN25:
 0263  C3                    C1		  RET						     ;;AN000;; Return
 0264                        C1	$M_VERSION_CHECK ENDP					     ;;
					MSG_SERVICES <DISPLAYmsg,GETmsg,CHARmsg,NUMmsg>
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-20
DOS - Message Retriever - GETMSG.ASM Module                 

 0264                        C1		SYSGETMSG PROC	FAR				     ;;AN000;;
 0264  50                    C1		PUSH	AX					     ;;AN000;; Save changed regs
 0265  06                    C1		PUSH	ES					     ;;AN000;;
 0266  57                    C1		PUSH	DI					     ;;AN000;;
 0267  55                    C1		PUSH	BP					     ;;AN000;;
 0268  9A 0282 ---- R        C1		CALL	FAR PTR $M_GET_MSG_ADDRESS		     ;;AN000;; Scan thru classes to find mes
				sage
 026D  72 0E                 C1		JC $MIF31
 026F  80 FE FF              C1		  CMP	  DH,UTILITY_MSG_CLASS
 0272  F8                    C1		  CLC						     ;;AN000;;
 0273  74 04                 C1		  JE $MIF32
 0275  06                    C1		    PUSH    ES					     ;;AN000;;
 0276  1F                    C1		    POP     DS					     ;;AN000;;	   Return message in DS:SI
 0277  EB 02                 C1		  JMP SHORT $MEN32
 0279                        C1	$MIF32:
 0279  06                    C1		    PUSH    ES					     ;;AN000;;
 027A  1F                    C1		    POP     DS					     ;;AN000;;	   Return message in DS:SI
 027B                        C1	$MEN32:
 027B  8B F7                 C1		  MOV	  SI,DI 				     ;;AN000;;	   Return message in DS:SI
 027D                        C1	$MIF31:
 027D  5D                    C1		POP	BP					     ;;AN000;; Restore changed regs
 027E  5F                    C1		POP	DI					     ;;AN000;;
 027F  07                    C1		POP	ES					     ;;AN000;;
 0280  58                    C1		POP	AX					     ;;AN000;;
 0281  CB                    C1		RET						     ;;AN000;;	  Return
 0282                        C1		SYSGETMSG ENDP					     ;;
 0282                        C1		  $M_GET_MSG_ADDRESS PROC FAR			     ;;AN000;;
 0282  56                    C1		  PUSH	  SI					     ;;AN000;;
 0283  53                    C1		  PUSH	  BX					     ;;AN000;;
 0284  33 F6                 C1		  XOR	  SI,SI 				     ;;AN000;; Use SI as an index
 0286  33 C9                 C1		  XOR	  CX,CX 				     ;;AN000;; Use CX as an size
 0288                        C1	$MDO36:
 0288  80 FE FF              C1		    CMP     DH,UTILITY_MSG_CLASS		     ;;AN000;; Were utility messages request
				ed?
 028B  75 08                 C1		    JNE $MIF37
 028D  C4 BC 002C R          C1			LES	DI,DWORD PTR $M_RT.$M_CLASS_ADDRS[SI] ;;AN000;;  Get address of class
 0291  8C C3                 C1			MOV	BX,ES				     ;;AN000;
 0293  EB 25                 C1		    JMP SHORT $MEN37
 0295                        C1	$MIF37:
 0295  F6 C6 02              C1		      TEST    DH,PARSE_ERR_CLASS		     ;;AN000;;	 Were parse errors requested
				?
 0298  74 08                 C1		      JE $MIF39
 029A  C4 BC 0010 R          C1			LES	DI,DWORD PTR $M_RT.$M_PARSE_COMMAND[SI] ;;AN000;;   Get address of class
 029E  8C C3                 C1			MOV	BX,ES				     ;;AN000;
 02A0  EB 18                 C1		      JMP SHORT $MEN39
 02A2                        C1	$MIF39:
 02A2  3D 0013               C1			CMP	AX,$M_CRIT_LO			     ;;AN000;;	   Is this a critical error?
 02A5  72 0D                 C1			JNAE $MIF41
 02A7  3D 0027               C1			CMP	AX,$M_CRIT_HI			     ;;AN000;;
 02AA  77 08                 C1			JNBE $MIF41
 02AC  C4 BC 001C R          C1			  LES	  DI,DWORD PTR $M_RT.$M_CRIT_ADDRS[SI] ;;AN000;; Get address of class
 02B0  8C C3                 C1			  MOV	  BX,ES 			     ;;AN000;
 02B2  EB 06                 C1			JMP SHORT $MEN41
 02B4                        C1	$MIF41:
 02B4  C4 BC 0000 R          C1			  LES	  DI,DWORD PTR $M_RT.$M_EXT_ERR_ADDRS[SI] ;;AN000;; Get address of class
 02B8  8C C3                 C1			  MOV	  BX,ES 			     ;;AN000;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-21
DOS - Message Retriever - GETMSG.ASM Module                 

 02BA                        C1	$MEN41:
 02BA                        C1	$MEN39:
 02BA                        C1	$MEN37:
 02BA  83 FB FF              C1		    CMP     BX,$M_TERMINATING_FLAG		     ;;AN000;; Are we finished all classes?
 02BD  75 16                 C1		    JNE $MIF46
 02BF  80 FE FF              C1		      CMP     DH,UTILITY_MSG_CLASS		     ;;AN000;;	  Was it a UTILITY class?
 02C2  75 03                 C1		      JNE $MIF47
 02C4  F9                    C1			STC					     ;;AN000;;	    Set the carry flag
 02C5  EB 0C                 C1		      JMP SHORT $MEN47
 02C7                        C1	$MIF47:
 02C7  A3 0044 R             C1			MOV	$M_RT.$M_MSG_NUM,AX		     ;;AN000;;	    Save message number
 02CA  B8 FFFF               C1			MOV	AX,$M_SPECIAL_MSG_NUM		     ;;AN000;;	    Set special message numb
				er
 02CD  BD 0001               C1			MOV	BP,$M_ONE_REPLACE		     ;;AN000;;	    Set one replace in messa
				ge
 02D0  33 F6                 C1			XOR	SI,SI				     ;;AN000;;	    Reset the SI index to st
				art again
 02D2  F8                    C1			CLC					     ;;AN000;;
 02D3                        C1	$MEN47:
 02D3  EB 0C                 C1		    JMP SHORT $MEN46
 02D5                        C1	$MIF46:
 02D5  83 FB 00              C1		      CMP     BX,$M_CLASS_NOT_EXIST		     ;;AN000;;	 Does this class exist?
 02D8  74 03                 C1		      JE $MIF51
 02DA  E8 0331 R             C1			CALL	$M_FIND_SPECIFIED_MSG		     ;;AN000;;	   Try to find the message
 02DD                        C1	$MIF51:
 02DD  83 C6 04              C1		      ADD     SI,$M_ADDR_SZ_FAR 		     ;;AN000;;	     Get next class
 02E0  F8                    C1		      CLC					     ;;AN000;;
 02E1                        C1	$MEN46:
 02E1  72 06                 C1		  JC $MEN36
 02E3  0B C9                 C1		    OR	    CX,CX				     ;;AN000;;	   Was the message found?
 02E5  75 02                 C1		  JNZ $MXL2
 02E7  EB 9F                 C1		  JMP $MDO36
 02E9                        C1	$MXL2:
 02E9                        C1	$MEN36:
 02E9  9C                    C1		  PUSHF 					     ;;AN006;; Save the flag state
 02EA  80 FE 01              C1		  CMP	  DH,EXT_ERR_CLASS			     ;;AN006;; Was an extended error request
				ed?
 02ED  75 29                 C1		  JNE $MIF56
 02EF  52                    C1		    PUSH    DX					     ;;AN006;;	Save all needed registers
 02F0  55                    C1		    PUSH    BP					     ;;AN006;;
 02F1  51                    C1		    PUSH    CX					     ;;AN006;;
 02F2  06                    C1		    PUSH    ES					     ;;AN006;;
 02F3  57                    C1		    PUSH    DI					     ;;AN006;;
 02F4  50                    C1		    PUSH    AX					     ;;AN006;;
 02F5  B8 0500               C1		    MOV     AX,IFSFUNC_INSTALL_CHECK		     ;;AN006;;	Check if IFSFUNC is installe
				d
 02F8  CD 2F                 C1		    INT     2FH 				     ;;AN006;;
 02FA  3C FF                 C1		    CMP     AL,IFSFUNC_INSTALLED		     ;;AN006;;	Is it installed?
 02FC  58                    C1		    POP     AX					     ;;AN006;;	Restore msg number
 02FD  75 09                 C1		    JNE $MIF57
 02FF  8B D8                 C1		      MOV     BX,AX				     ;;AN006;;	  BX is the extended error n
				umber
 0301  B8 0502               C1		      MOV     AX,IFS_GET_ERR_TEXT		     ;;AN006;;	  AX is the muliplex number
 0304  CD 2F                 C1		      INT     2FH				     ;;AN006;;	  Call IFSFUNC
 0306  EB 01                 C1		    JMP SHORT $MEN57
 0308                        C1	$MIF57:
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-22
DOS - Message Retriever - GETMSG.ASM Module                 

 0308  F9                    C1		      STC					     ;;AN006;;	  Carry conditon
 0309                        C1	$MEN57:
 0309  73 05                 C1		    JNC $MIF60
 030B  5F                    C1		      POP     DI				     ;;AN006;;	No,
 030C  07                    C1		      POP     ES				     ;;AN006;;	 Restore old pointer
 030D  59                    C1		      POP     CX				     ;;AN006;;
 030E  EB 06                 C1		    JMP SHORT $MEN60
 0310                        C1	$MIF60:
 0310  83 C4 06              C1		      ADD     SP,6				     ;;AN006;;	 Throw away old pointer
 0313  E8 0322 R             C1		      CALL    $M_SET_LEN_IN_CX			     ;;AN006;;	 Get the length of the ASCII
				Z string
 0316                        C1	$MEN60:
 0316  5D                    C1		    POP     BP					     ;;AN006;;	Restore other Regs
 0317  5A                    C1		    POP     DX					     ;;AN006;;
 0318                        C1	$MIF56:
 0318  EB 01                 C2		   JMP	   $+3 
 031A                        C2	??0000   LABEL   NEAR 
 031A  CF                    C2		   IRET 
 031B  0E                    C2		   PUSH    CS 
 031C  E8 031A R             C2		   CALL    ??0000 
 031F  5B                    C1		  POP	  BX					     ;;AN000;;
 0320  5E                    C1		  POP	  SI					     ;;AN000;;
 0321  CB                    C1		  RET						     ;;AN000;; Return ES:DI pointing to the 
				message
 0322                        C1	$M_GET_MSG_ADDRESS ENDP 				     ;;
 0322                        C1	$M_SET_LEN_IN_CX PROC NEAR				     ;;
 0322  57                    C1		  PUSH	  DI					     ;;AN006;; Save position
 0323  50                    C1		  PUSH	  AX					     ;;AN006;;
 0324  B9 FFFF               C1		  MOV	  CX,-1 				     ;;AN006;; Set CX for decrements
 0327  32 C0                 C1		  XOR	  AL,AL 				     ;;AN006;; Prepare compare register
 0329  F2/ AE                C1		  REPNE   SCASB 				     ;;AN006;; Scan for zero
 032B  F7 D1                 C1		  NOT	  CX					     ;;AN006;; Change decrement into number
 032D  49                    C1		  DEC	  CX					     ;;AN006;; Don't include the zero
 032E  58                    C1		  POP	  AX					     ;;AN006;;
 032F  5F                    C1		  POP	  DI					     ;;AN006;; Restore position
 0330  C3                    C1		  RET						     ;;AN006;;
 0331                        C1	$M_SET_LEN_IN_CX ENDP					     ;;
 0331                        C1	$M_FIND_SPECIFIED_MSG PROC NEAR 			     ;;AN000;;
 0331  83 FB 01              C1		  CMP	  BX,1					     ;;AN004;;	Do we have an address to CAL
				L?
 0334  75 1D                 C1		  JNE $MIF64
 0336  83 3E 0028 R FF       C1		  CMP	  WORD PTR $M_RT.$M_DISK_PROC_ADDR,-1	     ;;AN004;;	Do we have an address to CAL
				L?
 033B  74 16                 C1		  JE $MIF64
 033D  3D FFFF               C1		    CMP     AX,$M_SPECIAL_MSG_NUM		     ;;AN004;; Are we displaying a default E
				xt Err?
 0340  75 0B                 C1		    JNE $MIF65
 0342  50                    C1		      PUSH    AX				     ;;AN004;;	 Reset the special message n
				umber
 0343  A1 0044 R             C1		      MOV     AX,$M_RT.$M_MSG_NUM		     ;;AN004;;	 Get the old message number
 0346  FF 1E 0028 R          C1		      CALL    DWORD PTR $M_RT.$M_DISK_PROC_ADDR      ;;AN004;;	 Call the READ_DISK_PROC to 
				get error text
 034A  58                    C1		      POP     AX				     ;;AN004;;	 Reset the special message n
				umber
 034B  EB 04                 C1		    JMP SHORT $MEN65
 034D                        C1	$MIF65:
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-23
DOS - Message Retriever - GETMSG.ASM Module                 

 034D  FF 1E 0028 R          C1		      CALL    DWORD PTR $M_RT.$M_DISK_PROC_ADDR      ;;AN004;;	 Call the READ_DISK_PROC to 
				get error text
 0351                        C1	$MEN65:
 0351  EB 1A                 C1		  JMP SHORT $MEN64
 0353                        C1	$MIF64:
 0353  33 C9                 C1		    XOR     CX,CX				     ;;AN002;;	 CX = 0 will allow us to
 0355  80 FE FF              C1		    CMP     DH,UTILITY_MSG_CLASS		     ;;AN001;;
 0358  74 06                 C1		    JE $MIF69
 035A  26: 8A 4D 03          C1		      MOV     CL,BYTE PTR ES:[DI].$M_NUM_CLS_MSG     ;;AN001;;	 Get number of messages in c
				lass
 035E  EB 09                 C1		    JMP SHORT $MEN69
 0360                        C1	$MIF69:
 0360  26: 38 35             C1		      CMP     BYTE PTR ES:[DI].$M_CLASS_ID,DH	     ;;AN002;; Check if class still exists a
				t
 0363  75 04                 C1		      JNE $MIF71
 0365  26: 8A 4D 03          C1			MOV	CL,BYTE PTR ES:[DI].$M_NUM_CLS_MSG   ;;AN000;;	   Get number of messages in
				 class
 0369                        C1	$MIF71:
 0369                        C1	$MEN69:
 0369  83 C7 04              C1		    ADD     DI,$M_CLASS_ID_SZ			     ;;AN000;;	   Point past the class head
				er
 036C  F9                    C1		    STC 					     ;;AN004;;	 Flag that we haven't found 
				anything yet
 036D                        C1	$MEN64:
 036D  73 2B                 C1		  JNC $MIF75
 036F  F8                    C1		    CLC 					     ;;AN004;; No, reset carry
 0370                        C1	$MDO76:
 0370  0B C9                 C1		      OR      CX,CX				     ;;AN000;;	  Do we have any to check?
 0372  74 19                 C1		    JZ $MEN76
 0374  80 FE FF              C1		      CMP     DH,UTILITY_MSG_CLASS		     ;;AN001;;
 0377  74 05                 C1		      JE $MIF78
 0379  26: 3B 05             C1			CMP	AX,WORD PTR ES:[DI].$M_NUM	     ;;AN001;; Is this the message requested
				?
 037C  EB 03                 C1		      JMP SHORT $MEN78
 037E                        C1	$MIF78:
 037E  26: 3B 05             C1			CMP	AX,WORD PTR ES:[DI].$M_NUM	     ;;AN000;; Is this the message requested
				?
 0381                        C1	$MEN78:
 0381  75 02                 C1		    JNE $MIF76
 0383  EB 09                 C1		    JMP SHORT $MSR76
 0385                        C1	$MIF76:
 0385  49                    C1		      DEC     CX				     ;;AN000;;	  No, well do we have more t
				o check?
 0386  74 05                 C1		    JZ $MEN76
 0388  83 C7 04              C1		      ADD     DI,$M_ID_SZ			     ;;AN000;;	     Yes, skip past msg head
				er
 038B  EB E3                 C1		    JMP SHORT $MDO76
 038D                        C1	$MEN76:
 038D  F9                    C1		      STC					     ;;AN000;;
 038E                        C1	$MSR76:
 038E  72 0A                 C1		    JC $MIF86
 0390  80 FE FF              C1		      CMP     DH,UTILITY_MSG_CLASS		     ;;AN001;;	 Yes, is it a utility messag
				e?
 0393  F8                    C1		      CLC					     ;;AN001;;
 0394  75 00                 C1		      JNE $MIF87
 0396                        C1	$MIF87:
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-24
DOS - Message Retriever - GETMSG.ASM Module                 

 0396  26: 03 7D 02          C1		      ADD     DI,WORD PTR ES:[DI].$M_TXT_PTR	     ;;AN000;; Prepare ES:DI pointing to the
				 message
 039A                        C1	$MIF86:
 039A                        C1	$MIF75:
 039A  72 06                 C1		  JC $MIF91
 039C  32 ED                 C1		    XOR     CH,CH				     ;;AN000;;
 039E  26: 8A 0D             C1		    MOV     CL,BYTE PTR ES:[DI] 		     ;;AN000;;	 Move size into CX
 03A1  47                    C1		    INC     DI					     ;;AN000;;	 Increment past length
 03A2                        C1	$MIF91:
 03A2  C6 06 003E R 00       C1		  MOV	  $M_RT.$M_SIZE,$M_NULL 		     ;;AN004;; Reset variable
 03A7  C3                    C1		  RET						     ;;AN000;; Return
 03A8                        C1	$M_FIND_SPECIFIED_MSG ENDP				     ;;AN000;;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-25
DOS - Message Retriever - DISPMSG.ASM Module                

 03A8                        C1		SYSDISPMSG PROC FAR				     ;;AN000;;
 03A8  50                    C1		PUSH	AX					     ;;AN000;; Save changed REGs
 03A9  53                    C1		PUSH	BX					     ;;AN000;;
 03AA  51                    C1		PUSH	CX					     ;;AN000;;
 03AB  55                    C1		PUSH	BP					     ;;AN000;;
 03AC  57                    C1		PUSH	DI					     ;;AN000;; Save pointer to input buffer 
				(offset)
 03AD  06                    C1		PUSH	ES					     ;;AN000;; Save pointer to input buffer 
				(segment)
 03AE  52                    C1		PUSH	DX					     ;;AN000;; Save Input/Class request
 03AF  8B E9                 C1		MOV	BP,CX					     ;;AN000;; Use BP to hold replace count
 03B1  89 1E 003C R          C1		MOV	WORD PTR $M_RT.$M_HANDLE,BX		     ;;AN000;; Save handle
 03B5  88 36 0041 R          C1		MOV	BYTE PTR $M_RT.$M_CLASS,DH		     ;;AN004;; Save class
 03B9  9A 0282 ---- R        C1		CALL	FAR PTR $M_GET_MSG_ADDRESS		     ;;AN000;; Scan thru classes to find mes
				sage
 03BE  0B C9                 C1		OR	CX,CX					     ;;AN000;; Was message found?
 03C0  74 1C                 C1		JZ $MIF93
 03C2  0B ED                 C1		  OR	  BP,BP 				     ;;AN000;;	 Were replacable parameters 
				requested
 03C4  75 05                 C1		  JNZ $MIF94
 03C6  E8 03EF R             C1		    CALL    $M_DISPLAY_STRING			     ;;AN000;; No, great . . . Display messa
				ge
 03C9  EB 03                 C1		  JMP SHORT $MEN94
 03CB                        C1	$MIF94:
 03CB  E8 053B R             C1		    CALL    $M_DISPLAY_MESSAGE			     ;;AN000;;	 Display the message with su
				bstitutions
 03CE                        C1	$MEN94:
 03CE  72 08                 C1		  JC $MIF97
 03D0  5A                    C1		    POP     DX					     ;;AN000;; Get Input/Class request
 03D1  E8 0496 R             C1		    CALL    $M_ADD_CRLF 			     ;;AN004;; Check if we need to add the C
				R LF chars.
 03D4  07                    C1		    POP     ES					     ;;AN000;; Get location of input buffer 
				(if specified)
 03D5  5F                    C1		    POP     DI					     ;;AN000;;
 03D6  EB 04                 C1		  JMP SHORT $MEN97
 03D8                        C1	$MIF97:
 03D8  83 C4 06              C1		    ADD     SP,6				     ;;AN000;;
 03DB  F9                    C1		    STC 					     ;;AN000;; Reset carry flag
 03DC                        C1	$MEN97:
 03DC  EB 04                 C1		JMP SHORT $MEN93
 03DE                        C1	$MIF93:
 03DE  07                    C1		  POP	  ES					     ;;AN000;;	 Get pointer to input buffer
				 (segment)
 03DF  5F                    C1		  POP	  DI					     ;;AN000;;	 Get base pointer to first s
				ublist (offset)
 03E0  5A                    C1		  POP	  DX					     ;;AN000;;	 Get base pointer to first s
				ublist (segment)
 03E1  F9                    C1		  STC						     ;;AN000;;	 Set carry flag
 03E2                        C1	$MEN93:
 03E2  72 06                 C1		JC $MIF104
 03E4  5D                    C1		  POP	  BP					     ;;AN000;; No,
 03E5  59                    C1		  POP	  CX					     ;;AN000;;
 03E6  5B                    C1		  POP	  BX					     ;;AN000;;
 03E7  58                    C1		  POP	  AX					     ;;AN000;;
 03E8  EB 04                 C1		JMP SHORT $MEN104
 03EA                        C1	$MIF104:
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-26
DOS - Message Retriever - DISPMSG.ASM Module                

 03EA  83 C4 08              C1		  ADD	  SP,8					     ;;AN000;;	   Eliminate from stack
 03ED  F9                    C1		  STC						     ;;AN000;;
 03EE                        C1	$MEN104:
 03EE  CB                    C1		RET						     ;;AN000;; Return
 03EF                        C1		SYSDISPMSG ENDP 				     ;;AN000;;
 03EF                        C1	$M_DISPLAY_STRING PROC NEAR				     ;;AN000;;
 03EF  50                    C1		PUSH	AX					     ;;AN000;;
 03F0  53                    C1		PUSH	BX					     ;;AN000;;
 03F1  52                    C1		PUSH	DX					     ;;AN000;;
 03F2  8B 1E 003C R          C1		MOV	BX,$M_RT.$M_HANDLE			     ;;AN000;; Retrieve handle
 03F6  83 FB FF              C1		CMP	BX,$M_NO_HANDLE 			     ;;AN000;; Was there a handle specified?
 03F9  75 05                 C1		JNE $MIF107
 03FB  E8 042A R             C1		  CALL	  $M_DISPLAY_$_STRING			     ;;AN000;; No, display $ terminated stri
				ng
 03FE  EB 03                 C1		JMP SHORT $MEN107
 0400                        C1	$MIF107:
 0400  E8 045F R             C1		  CALL	  $M_DISPLAY_H_STRING			     ;;AN000;; Yes, display string to handle
 0403                        C1	$MEN107:
 0403  73 0F                 C1		JNC $MIF110
 0405  B4 59                 C1		  MOV	  AH,DOS_GET_EXT_ERROR			     ;;AN000;;	Yes,
 0407  BB 0000               C1		  MOV	  BX,DOS_GET_EXT_ERROR_BX		     ;;AN000;;	  Get extended error
 040A  CD 21                 C1		  INT	  21H					     ;;AN000;;
 040C  32 E4                 C1		  XOR	  AH,AH 				     ;;AN000;;	  Clear AH
 040E  83 C4 06              C1		  ADD	  SP,6					     ;;AN000;;	  Clean up stack
 0411  F9                    C1		  STC						     ;;AN000;;	  Flag that there was an err
				or
 0412  EB 10                 C1		JMP SHORT $MEN110
 0414                        C1	$MIF110:
 0414  83 FB FF              C1		  CMP	  BX,$M_NO_HANDLE			     ;;AN000;; Was there a handle specified?
 0417  74 0B                 C1		  JE $MIF112
 0419  3B C1                 C1		    CMP     AX,CX				     ;AN001;	 Was it ALL written?
 041B  74 07                 C1		    JE $MIF113
 041D  E8 048D R             C1		      CALL    $M_GET_EXT_ERR_39 		     ;AN001;	   Set Extended error
 0420  83 C4 06              C1		      ADD     SP,6				     ;AN001;	   Clean up stack
 0423  F9                    C1		      STC					     ;AN001;	   Flag that there was an er
				ror
 0424                        C1	$MIF113:
 0424                        C1	$MIF112:
 0424                        C1	$MEN110:
 0424  72 03                 C1		JC $MIF117
 0426  5A                    C1		  POP	  DX					     ;;AN000;;	Restore regs
 0427  5B                    C1		  POP	  BX					     ;;AN000;;
 0428  58                    C1		  POP	  AX					     ;;AN000;;
 0429                        C1	$MIF117:
 0429  C3                    C1		RET						     ;;AN000;; Return
 042A                        C1	$M_DISPLAY_STRING ENDP					     ;;AN000;;
 042A                        C1	$M_DISPLAY_$_STRING PROC NEAR				     ;;AN000;;
 042A  1E                    C1		PUSH	DS					     ;;AN000;;
 042B  06                    C1		PUSH	ES					     ;;AN000;;
 042C  1F                    C1		POP	DS					     ;;AN000;; Set DS to segment of message 
				text
 042D  83 F9 01              C1		CMP	CX,$M_SINGLE_CHAR			     ;;AN000;; Is this a single character?
 0430  75 1B                 C1		JNE $MIF119
 0432  B4 02                 C1		  MOV	  AH,DOS_DISP_CHAR			     ;;AN000;;	 DOS Function to display CHA
				RACTER
 0434  26: 8A 15             C1		  MOV	  DL,BYTE PTR ES:[DI]			     ;;AN000;;	 Get the character
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-27
DOS - Message Retriever - DISPMSG.ASM Module                

 0437  CD 21                 C1		  INT	  21H					     ;;AN000;;	 Write character
 0439  1F                    C1		  POP	  DS					     ;;AN000;; Set DS to segment of message 
				text
 043A  8A C2                 C1		  MOV	  AL,DL 				     ;;AN000;;	 Get the character in AL
 043C  E8 04AD R             C1		  CALL	  $M_IS_IT_DBCS 			     ;;AN000;;	 Is this the first byte of a
				 DB character
 043F  1E                    C1		  PUSH	  DS					     ;;AN000;;
 0440  06                    C1		  PUSH	  ES					     ;;AN000;;
 0441  1F                    C1		  POP	  DS					     ;;AN000;; Set DS to segment of message 
				text
 0442  73 07                 C1		  JNC $MIF120
 0444  26: 8A 55 01          C1		    MOV     DL,BYTE PTR ES:[DI]+1		     ;;AN000;; Get the next character
 0448  CD 21                 C1		    INT     21H 				     ;;AN000;;	 Write character
 044A  F8                    C1		    CLC 					     ;;AN000;;	 Clear the DBCS indicator
 044B                        C1	$MIF120:
 044B  EB 0F                 C1		JMP SHORT $MEN119
 044D                        C1	$MIF119:
 044D  B4 02                 C1		  MOV	  AH,DOS_DISP_CHAR			     ;;AN000;;	 DOS Function to display CHA
				RACTER
 044F                        C1	$MDO123:
 044F  0B C9                 C1		    OR	    CX,CX				     ;;AN002;;	 Are there any left to displ
				ay?
 0451  74 09                 C1		  JZ $MEN123
 0453  26: 8A 15             C1		    MOV     DL,BYTE PTR ES:[DI] 		     ;;AN002;;	   Get the character
 0456  CD 21                 C1		    INT     21H 				     ;;AN002;;	   Display the character
 0458  47                    C1		    INC     DI					     ;;AN002;;	   Set pointer to next chara
				cter
 0459  49                    C1		    DEC     CX					     ;;AN002;;	   Count this character
 045A  75 F3                 C1		  JNZ $MDO123
 045C                        C1	$MEN123:
 045C                        C1	$MEN119:
 045C  F8                    C1		CLC						     ;;AN000;;	 Char functions used don't r
				eturn carry as error
 045D  1F                    C1		POP	DS					     ;;AN000;;
 045E  C3                    C1		RET						     ;;AN000;;
 045F                        C1	$M_DISPLAY_$_STRING ENDP				     ;;AN000;;
 045F                        C1	$M_DISPLAY_H_STRING PROC NEAR				     ;;AN000;;
 045F  33 C0                 C1		XOR	AX,AX					     ;;AN002;; Set number of bytes written t
				o 0
 0461  0B C9                 C1		OR	CX,CX					     ;;AN002;; For performance, don't write 
				if not necessary
 0463  74 27                 C1		JZ $MIF127
 0465  1E                    C1		  PUSH	  DS					     ;;AN000;; Yes,
 0466  06                    C1		  PUSH	  ES					     ;;AN000;;
 0467  1F                    C1		  POP	  DS					     ;;AN000;;	 Set DS to segment of messag
				e text
 0468  B4 40                 C1		  MOV	  AH,DOS_WRITE_HANDLE			     ;;AN000;;	 DOS function to write to a 
				handle
 046A  8B D7                 C1		  MOV	  DX,DI 				     ;;AN000;;	 Pointer to data to write
 046C  83 F9 01              C1		  CMP	  CX,$M_SINGLE_CHAR			     ;;AN000;;	 Is this a single character?
 046F  75 18                 C1		  JNE $MIF128
 0471  CD 21                 C1		    INT     21H 				     ;;AN000;;	   Write character
 0473  1F                    C1		    POP     DS					     ;;AN000;;	     Set DS to segment of me
				ssage text
 0474  50                    C1		    PUSH    AX					     ;;AN000;;
 0475  26: 8A 05             C1		    MOV     AL,BYTE PTR ES:[DI] 		     ;;AN000;;	     Get the character
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-28
DOS - Message Retriever - DISPMSG.ASM Module                

 0478  E8 04AD R             C1		    CALL    $M_IS_IT_DBCS			     ;;AN000;;	     Is this the first byte 
				of a DB character
 047B  58                    C1		    POP     AX					     ;;AN000;;	     Set DS to segment of me
				ssage text
 047C  1E                    C1		    PUSH    DS					     ;;AN000;;
 047D  06                    C1		    PUSH    ES					     ;;AN000;;
 047E  1F                    C1		    POP     DS					     ;;AN000;;	     Set DS to segment of me
				ssage text
 047F  73 06                 C1		    JNC $MIF129
 0481  F8                    C1		      CLC					     ;;AN000;;	      Clear the DBCS indicat
				or
 0482  B4 40                 C1		      MOV     AH,DOS_WRITE_HANDLE		     ;;AN000;;	      DOS function to write 
				to a handle
 0484  42                    C1		      INC     DX				     ;;AN000;;	      Point to next characte
				r
 0485  CD 21                 C1		      INT     21H				     ;;AN000;;	      Write character
 0487                        C1	$MIF129:
 0487  EB 02                 C1		  JMP SHORT $MEN128
 0489                        C1	$MIF128:
 0489  CD 21                 C1		    INT     21H 				     ;;AN000;;	   Write String at DS:SI to 
				handle
 048B                        C1	$MEN128:
 048B  1F                    C1		  POP	  DS					     ;;AN000;;
 048C                        C1	$MIF127:
 048C  C3                    C1		RET						     ;;AN000;;
 048D                        C1	$M_DISPLAY_H_STRING ENDP				     ;;AN000;;
 048D                        C1	$M_GET_EXT_ERR_39 PROC NEAR				     ;AN001;
 048D  B8 0027               C1		MOV	AX,EXT_ERR_39				     ;AN001; Set AX=39
 0490  BB 0004               C1		MOV	BX,(ERROR_CLASS_39 SHR 8) + ACTION_39	     ;AN001; Set BH=1 BL=4
 0493  B5 01                 C1		MOV	CH,LOCUS_39				     ;AN001; Set CH=1
 0495  C3                    C1		RET						     ;AN001;
 0496                        C1	$M_GET_EXT_ERR_39 ENDP					     ;AN001;
 0496                        C1	$M_ADD_CRLF PROC NEAR					     ;;AN004;;
 0496  80 FE FF              C1		CMP	DH,UTILITY_MSG_CLASS			     ;;AN004;; Is it a utility message?
 0499  74 11                 C1		JE $MIF134
 049B  F6 C6 80              C1		  TEST	  DH,$M_NO_CRLF_MASK			     ;;AN004;;	 Are we to supress the CR LF
				?
 049E  75 0C                 C1		  JNZ $MIF135
 04A0  1E                    C1		    PUSH    DS					     ;;AN004;;
 04A1  07                    C1		    POP     ES					     ;;AN004;;	  Set ES to data segment
 04A2  8D 3E 003F R          C1		    LEA     DI,$M_RT.$M_CRLF			     ;;AN004;;	  Point at CRLF message
 04A6  B9 0002               C1		    MOV     CX,$M_CRLF_SIZE			     ;;AN004;;	  Set the message size
 04A9  E8 03EF R             C1		    CALL    $M_DISPLAY_STRING			     ;;AN004;;	  Display the CRLF
 04AC                        C1	$MIF135:
 04AC                        C1	$MIF134:
 04AC  C3                    C1		RET						     ;;AN004;; Return
 04AD                        C1	$M_ADD_CRLF ENDP					     ;;AN004;;
 04AD                        C1	$M_IS_IT_DBCS PROC NEAR 				     ;;AN000;;
 04AD  06                    C1		PUSH	ES					     ;;AN000;; Save Extra segment register
 04AE  57                    C1		PUSH	DI					     ;;AN000;; Save SI register
 04AF  C4 3E 0038 R          C1		LES	DI,$M_RT.$M_DBCS_VEC			     ;;AN000;;
 04B3  0B FF                 C1		OR	DI,DI					     ;;AN000;; Was the DBCS vector set?
 04B5  74 17                 C1		JZ $MIF138
 04B7                        C1	$MDO139:
 04B7  26: 83 3D 00          C1		    CMP     WORD PTR ES:[DI],$M_DBCS_TERM	     ;;AN000;; Is this the terminating flag?
 04BB  F8                    C1		    CLC 					     ;;AN000;;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-29
DOS - Message Retriever - DISPMSG.ASM Module                

 04BC  74 10                 C1		  JE $MEN139
 04BE  26: 3A 05             C1		    CMP     AL,BYTE PTR ES:[DI] 		     ;;AN000;;	  Does the character fall in
				 the DBCS range?
 04C1  72 07                 C1		    JNAE $MIF141
 04C3  26: 3A 45 01          C1		    CMP     AL,BYTE PTR ES:[DI]+1		     ;;AN000;;	  Does the character fall in
				 the DBCS range?
 04C7  77 01                 C1		    JNBE $MIF141
 04C9  F9                    C1		      STC					     ;;AN000;;	  Yes,
 04CA                        C1	$MIF141:
 04CA  47                    C1		    INC     DI					     ;;AN000;;	  No,
 04CB  47                    C1		    INC     DI					     ;;AN000;;	     Go to next vector
 04CC  EB E9                 C1		  JMP SHORT $MDO139
 04CE                        C1	$MEN139:
 04CE                        C1	$MIF138:
 04CE  5F                    C1		POP	DI					     ;;AN000;;
 04CF  07                    C1		POP	ES					     ;;AN000;; Restore SI register
 04D0  C3                    C1		RET						     ;;AN000;; Return
 04D1                        C1	$M_IS_IT_DBCS ENDP					     ;;AN000;;
 04D1                        C1	$M_CONVERT2ASC PROC NEAR				     ;;AN000;;
 04D1  8F 06 0042 R          C1		POP	[$M_RT.$M_RETURN_ADDR]			     ;;AN000;; Save Return Address
 04D5  33 DB                 C1		XOR	BX,BX					     ;;AN000;; Use BP as a swapping register
 04D7  93                    C1		XCHG	BX,AX					     ;;AN000;; Initialize - Low Word in BP
 04D8  92                    C1		XCHG	AX,DX					     ;;AN000;;		  - High Word in AX
 04D9                        C1	$MDO145:
 04D9  F7 36 0046 R          C1		  DIV	  $M_RT.$M_DIVISOR			     ;;AN000;; Divide High Word by divisor
 04DD  93                    C1		  XCHG	  BX,AX 				     ;;AN000;; Setup to divide Low Word usin
				g remainder
 04DE  F7 36 0046 R          C1		  DIV	  $M_RT.$M_DIVISOR			     ;;AN000;; Divide Low Word by divisor
 04E2  83 FA 09              C1		  CMP	  DX,9					     ;;AN000;;	Make a digit of the remainde
				r
 04E5  76 05                 C1		  JNA $MIF146
 04E7  80 C2 37              C1		    ADD     DL,55				     ;;AN000;;	   Make A to F ASCII
 04EA  EB 03                 C1		  JMP SHORT $MEN146
 04EC                        C1	$MIF146:
 04EC  80 C2 30              C1		    ADD     DL,'0'				     ;;AN000;;	   Make 0 to 9 ASCII
 04EF                        C1	$MEN146:
 04EF  52                    C1		  PUSH	  DX					     ;;AN000;; Save the digit on the stack
 04F0  41                    C1		  INC	  CX					     ;;AN000;; Count that digit
 04F1  0B C0                 C1		  OR	  AX,AX 				     ;;AN000;; Are we done?
 04F3  75 04                 C1		JNZ $MLL149
 04F5  0B DB                 C1		  OR	  BX,BX 				     ;;AN000;; AX and BX must be ZERO!!
 04F7  74 39                 C1		JZ $MEN145
 04F9                        C1	$MLL149:
 04F9  83 F9 03              C1		  CMP	  CX,$M_FIRST_THOU			     ;;AN000;; Are we at the first thousands
				 mark
 04FC  75 0D                 C1		  JNE $MIF150
 04FE  80 7C 0A 2C           C1		    CMP     $M_SL.$M_S_PAD,$M_COMMA		     ;;AN000;; Is the pad character a comma?
 0502  75 05                 C1		    JNE $MIF151
 0504  FF 36 004F R          C1		      PUSH    WORD PTR $M_RT.$M_THOU_SEPARA	     ;;AN000;; Insert a thousand separator
 0508  41                    C1		      INC     CX				     ;;AN000;;
 0509                        C1	$MIF151:
 0509  EB 22                 C1		  JMP SHORT $MEN150
 050B                        C1	$MIF150:
 050B  83 F9 06              C1		    CMP     CX,$M_SECOND_THOU			     ;;AN000;;	 Are we at the first thousan
				ds mark
 050E  75 0D                 C1		    JNE $MIF154
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-30
DOS - Message Retriever - DISPMSG.ASM Module                

 0510  80 7C 0A 2C           C1		      CMP     $M_SL.$M_S_PAD,$M_COMMA		     ;;AN000;; Is the pad character a comma?
 0514  75 05                 C1		      JNE $MIF155
 0516  FF 36 004F R          C1			PUSH	WORD PTR $M_RT.$M_THOU_SEPARA	     ;;AN000;; Insert a thousand separator
 051A  41                    C1			INC	CX				     ;;AN000;;
 051B                        C1	$MIF155:
 051B  EB 10                 C1		    JMP SHORT $MEN154
 051D                        C1	$MIF154:
 051D  83 F9 09              C1		      CMP     CX,$M_THIRD_THOU			     ;;AN000;;	 Are we at the first thousan
				ds mark
 0520  75 0B                 C1		      JNE $MIF158
 0522  80 7C 0A 2C           C1			CMP	$M_SL.$M_S_PAD,$M_COMMA 	     ;;AN000;; Is the pad character a comma?
 0526  75 05                 C1			JNE $MIF159
 0528  FF 36 004F R          C1			  PUSH	  WORD PTR $M_RT.$M_THOU_SEPARA      ;;AN000;; Insert a thousand separator
 052C  41                    C1			  INC	  CX				     ;;AN000;;
 052D                        C1	$MIF159:
 052D                        C1	$MIF158:
 052D                        C1	$MEN154:
 052D                        C1	$MEN150:
 052D  93                    C1		  XCHG	  AX,BX 				     ;;AN000;;	 Setup to divide the reduced
				 High Word
 052E  33 D2                 C1		  XOR	  DX,DX 				     ;;AN000;;	 Reset remainder
 0530  EB A7                 C1		JMP SHORT $MDO145
 0532                        C1	$MEN145:
 0532  33 D2                 C1		XOR	DX,DX					     ;;AN000;;	 Reset remainder
 0534  33 C0                 C1		XOR	AX,AX					     ;;AN000;;	 Reset remainder
 0536  FF 36 0042 R          C1		PUSH	[$M_RT.$M_RETURN_ADDR]			     ;;AN000;;	 Restore Return Address
 053A  C3                    C1		RET						     ;;AN000;;	 Return
 053B                        C1	$M_CONVERT2ASC ENDP					     ;;AN000;;
 053B                        C1	$M_DISPLAY_MESSAGE PROC NEAR				     ;;AN000;;
 053B                        C1	$MDO165:
 053B  33 D2                 C1		  XOR	  DX,DX 				     ;;AN000;; Set size = 0
 053D  0B C9                 C1		  OR	  CX,CX 				     ;;AN000;; Are we finished the message y
				et?
 053F  74 21                 C1		  JZ $MIF166
 0541  B4 25                 C1		    MOV     AH,"%"				     ;;AN000;;	 Prepare to scan for %
 0543  B0 00                 C1		    MOV     AL,0				     ;;AN004;;
 0545                        C1	$MDO167:
 0545  26: 38 25             C1		      CMP     BYTE PTR ES:[DI],AH		     ;;AN000;;	 Is this character NOT a %
 0548  75 0A                 C1		    JNE $MLL168
 054A  26: 38 65 01          C1		      CMP     BYTE PTR ES:[DI+1],AH		     ;;AN000;;	   Is the next character als
				o a %
 054E  74 04                 C1		    JE $MLL168
 0550  3A C4                 C1		      CMP     AL,AH				     ;;AN000;;	     Was the character befor
				e a %
 0552  75 0E                 C1		    JNE $MEN167
 0554                        C1	$MLL168:
 0554  26: 8A 05             C1		      MOV     AL,BYTE PTR ES:[DI]		     ;;AN004;;	 Yes, (to any of the above)
 0557  E8 04AD R             C1		      CALL    $M_IS_IT_DBCS			     ;;AN004;;	   Is this character the fir
				st part of a DBCS?
 055A  73 01                 C1		      JNC $MIF169
 055C  47                    C1			INC	DI				     ;;AN004;;	     Increment past second p
				art
 055D                        C1	$MIF169:
 055D  47                    C1		      INC     DI				     ;;AN000;;	     Next character in strin
				g
 055E  42                    C1		      INC     DX				     ;;AN000;;	     Size = Size + 1
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-31
DOS - Message Retriever - DISPMSG.ASM Module                

 055F  49                    C1		      DEC     CX				     ;;AN000;;	     Decrement total size
 0560  75 E3                 C1		    JNZ $MDO167
 0562                        C1	$MEN167:
 0562                        C1	$MIF166:
 0562  56                    C1		  PUSH	  SI					     ;;AN000;; Save beginning of sublists
 0563  87 CA                 C1		  XCHG	  CX,DX 				     ;;AN000;; Get size of message to displa
				y (tot sz in DX)
 0565  0B ED                 C1		  OR	  BP,BP 				     ;;AN000;; Do we have any replacables to
				 do?
 0567  74 33                 C1		  JZ $MIF173
 0569  4D                    C1		    DEC     BP					     ;;AN000;;	 Decrement number of replaca
				bles
 056A  83 3E 0044 R 00       C1		    CMP     $M_RT.$M_MSG_NUM,$M_NULL		     ;;AN000;; Is this an Extended/Parse cas
				e
 056F  75 2B                 C1		    JNE $MIF174
 0571                        C1	$MDO175:
 0571  8A 44 06              C1			MOV	AL,$M_SL.$M_S_ID		     ;;AN000;;	 Get ID byte
 0574  04 30                 C1			ADD	AL,30H				     ;;AN000;;	 Convert to ASCII
 0576  26: 3A 45 01          C1			CMP	AL,BYTE PTR ES:[DI]+1		     ;;AN000;;	 Is this the right sublist?
 057A  75 02                 C1		      JNE $MIF175
 057C  EB 1E                 C1		      JMP SHORT $MSR175
 057E                        C1	$MIF175:
 057E  3C 30                 C1			CMP	AL,$M_SPECIAL_CASE		     ;;AN000;;	   Does this sublist have ID
				 = 0
 0580  75 04                 C1		      JNE $MLL178
 0582  0B D2                 C1			OR	DX,DX				     ;;AN000;;	   Are we at the end of the 
				message?
 0584  74 04                 C1		      JZ $MEN175
 0586                        C1	$MLL178:
 0586  03 34                 C1			ADD	SI,WORD PTR $M_SL.$M_S_SIZE	     ;;AN000;;	     Next SUBLIST
 0588  EB E7                 C1		      JMP SHORT $MDO175
 058A                        C1	$MEN175:
 058A  80 3E 0041 R FF       C1			CMP	$M_RT.$M_CLASS,UTILITY_MSG_CLASS     ;;AN004;;	     Is it a utility message
				?
 058F  75 08                 C1			JNE $MIF180
 0591  42                    C1			  INC	  DX				     ;;AN000;;	       Remember to display C
				R,LF
 0592  42                    C1			  INC	  DX				     ;;AN000;;		 at the end of the m
				essage
 0593  49                    C1			  DEC	  CX				     ;;AN000;;	       Adjust message length
 0594  49                    C1			  DEC	  CX				     ;;AN000;;
 0595  4F                    C1			  DEC	  DI				     ;;AN000;;	       Adjust ending address
				 of message
 0596  4F                    C1			  DEC	  DI				     ;;AN000;;
 0597  EB 03                 C1			JMP SHORT $MEN180
 0599                        C1	$MIF180:
 0599  BA FFFF               C1			  MOV	  DX,-1 			     ;;AN004;;	       Set special case
 059C                        C1	$MEN180:
 059C                        C1	$MSR175:
 059C                        C1	$MIF174:
 059C                        C1	$MIF173:
 059C  57                    C1		  PUSH	  DI					     ;;AN000;; Save pointer to replace numbe
				r
 059D  2B F9                 C1		  SUB	  DI,CX 				     ;;AN000;; Determine beginning of string
 059F  E8 03EF R             C1		  CALL	  $M_DISPLAY_STRING			     ;;AN000;; Display string until % (or en
				d)
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-32
DOS - Message Retriever - DISPMSG.ASM Module                

 05A2  5F                    C1		  POP	  DI					     ;;AN000;; Get back pointer to replace n
				umber
 05A3  59                    C1		  POP	  CX					     ;;AN000;; Clean up stack in case error
 05A4  73 03                 C1		JNC $MXL3
 05A6  EB 7F 90              C1		JMP $MEN165
 05A9                        C1	$MXL3:
 05A9  51                    C1		  PUSH	  CX					     ;;AN000;;
 05AA  8B CA                 C1		  MOV	  CX,DX 				     ;;AN000;; Get the size of the rest of t
				he message
 05AC  80 7C 06 00           C1		  CMP	  $M_SL.$M_S_ID,$M_SPECIAL_CASE-30H	     ;;AN000;; Is this the %0 case?
 05B0  74 0D                 C1		  JE $MIF187
 05B2  0B C9                 C1		    OR	    CX,CX				     ;;AN000;;	Are we finished the whole me
				ssage?
 05B4  74 06                 C1		    JZ $MIF188
 05B6  49                    C1		      DEC     CX				     ;;AN000;;	  Decrement total size (%)
 05B7  49                    C1		      DEC     CX				     ;;AN000;;	  Decrement total size (#)
 05B8  47                    C1		      INC     DI				     ;;AN000;;	  Go past %
 05B9  47                    C1		      INC     DI				     ;;AN000;;	  Go past replace number
 05BA  EB 01                 C1		    JMP SHORT $MEN188
 05BC                        C1	$MIF188:
 05BC  5E                    C1		      POP     SI				     ;;AN000;;	  Get back pointer to beginn
				ing of SUBLISTs
 05BD                        C1	$MEN188:
 05BD  EB 10                 C1		  JMP SHORT $MEN187
 05BF                        C1	$MIF187:
 05BF  0B C9                 C1		    OR	    CX,CX				     ;;AN000;;	Are we finished the whole me
				ssage?
 05C1  75 03                 C1		    JNZ $MIF192
 05C3  5E                    C1		      POP     SI				     ;;AN000;;	 Get back pointer to beginni
				ng of SUBLISTs
 05C4  EB 09                 C1		    JMP SHORT $MEN192
 05C6                        C1	$MIF192:
 05C6  83 F9 FF              C1		      CMP     CX,-1				     ;;AN004;;	 Are we at the end of the me
				ssage?
 05C9  75 02                 C1		      JNZ $MIF194
 05CB  33 C9                 C1			XOR	CX,CX				     ;;AN004;;
 05CD                        C1	$MIF194:
 05CD  0B FF                 C1		      OR      DI,DI				     ;;AN004;;	Turn ZF off
 05CF                        C1	$MEN192:
 05CF                        C1	$MEN187:
 05CF  74 56                 C1		JZ $MEN165
 05D1  55                    C1		  PUSH	  BP					     ;;AN000;;	 Save the replace count
 05D2  57                    C1		  PUSH	  DI					     ;;AN000;;	 Save location to complete m
				essage
 05D3  06                    C1		  PUSH	  ES					     ;;AN000;;
 05D4  51                    C1		  PUSH	  CX					     ;;AN000;;	 Save size of the rest of th
				e message
 05D5  33 C9                 C1		  XOR	  CX,CX 				     ;;AN000;;	 Reset CX used for character
				 count
 05D7  83 3E 0044 R 00       C1		  CMP	  $M_RT.$M_MSG_NUM,$M_NULL		     ;;AN000;; Is this an Extended/Parse cas
				e
 05DC  75 2D                 C1		  JNE $MIF199
 05DE  F6 44 07 0F           C1		    TEST    BYTE PTR $M_SL.$M_S_FLAG,NOT Char_Type AND $M_TYPE_MASK ;;AN000;;
 05E2  75 08                 C1		    JNZ $MIF200
 05E4  C4 7C 02              C1		      LES     DI,DWORD PTR $M_SL.$M_S_VALUE	     ;;AN000;; Load pointer to replacing par
				ameter
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-33
DOS - Message Retriever - DISPMSG.ASM Module                

 05E7  E8 0736 R             C1		      CALL    $M_CHAR_REPLACE			     ;;AN000;;
 05EA  EB 1A                 C1		    JMP SHORT $MEN200
 05EC                        C1	$MIF200:
 05EC  F6 44 07 0D           C1		      TEST    BYTE PTR $M_SL.$M_S_FLAG,NOT Sgn_Bin_Type AND $M_TYPE_MASK ;;AN000;;
 05F0  74 0C                 C1		      JZ $MLL202
 05F2  F6 44 07 0E           C1		      TEST    BYTE PTR $M_SL.$M_S_FLAG,NOT Unsgn_Bin_Type AND $M_TYPE_MASK ;;AN000;;
 05F6  74 06                 C1		      JZ $MLL202
 05F8  F6 44 07 0C           C1		      TEST    BYTE PTR $M_SL.$M_S_FLAG,NOT Bin_Hex_Type AND $M_TYPE_MASK ;;AN000;;
 05FC  75 08                 C1		      JNZ $MIF202
 05FE                        C1	$MLL202:
 05FE  C4 7C 02              C1			LES	DI,DWORD PTR $M_SL.$M_S_VALUE	     ;;AN000;; Load pointer to replacing par
				ameter
 0601  E8 075E R             C1			CALL	$M_BIN2ASC_REPLACE		     ;;AN000;;
 0604  EB 00                 C1		      JMP SHORT $MEN202
 0606                        C1	$MIF202:
 0606                        C1	$MEN202:
 0606                        C1	$MEN200:
 0606  E8 065B R             C1		    CALL    $M_DISPLAY_REPLACE			     ;;AN000;; Display the replace
 0609  EB 03                 C1		  JMP SHORT $MEN199
 060B                        C1	$MIF199:
 060B  E8 062E R             C1		    CALL    $M_EXT_PAR_REPLACE			     ;;AN000;;
 060E                        C1	$MEN199:
 060E  72 07                 C1		  JC $MIF211
 0610  59                    C1		    POP     CX					     ;;AN000;; Get size of the rest of the m
				essage
 0611  07                    C1		    POP     ES					     ;;AN000;; Get address of the rest of th
				e message
 0612  5F                    C1		    POP     DI					     ;;AN000;;
 0613  5D                    C1		    POP     BP					     ;;AN000;; Get replacment count
 0614  5E                    C1		    POP     SI					     ;;AN000;; ELSE get address of first sub
				list structure
 0615  EB 04                 C1		  JMP SHORT $MEN211
 0617                        C1	$MIF211:
 0617  83 C4 0A              C1		    ADD     SP,10				     ;;AN000;; Clean up stack if error
 061A  F9                    C1		    STC 					     ;;AN000;;
 061B                        C1	$MEN211:
 061B  83 3E 0044 R 00       C1		  CMP	  $M_RT.$M_MSG_NUM,$M_NULL		     ;;AN000;; Is this an Extended/Parse cas
				e
 0620  75 05                 C1		JNE $MLL214
 0622  72 03                 C1		JC $MXL4
 0624  E9 053B R             C1		JMP $MDO165
 0627                        C1	$MXL4:
 0627                        C1	$MLL214:
 0627                        C1	$MEN165:
 0627  C7 06 0044 R 0000     C1		MOV	$M_RT.$M_MSG_NUM,0			     ;;AN000;; Reset message number to null
 062D  C3                    C1		RET						     ;;AN000;; Return
 062E                        C1	$M_DISPLAY_MESSAGE ENDP 				     ;;AN000;;
 062E                        C1	$M_EXT_PAR_REPLACE PROC NEAR				     ;;AN000;;
 062E  33 D2                 C1		XOR	DX,DX					     ;;AN000;; Prepare for get binary value 
				(HIGH)
 0630  A1 0044 R             C1		MOV	AX,$M_RT.$M_MSG_NUM			     ;;AN000;; Prepare for get binary value 
				(LOW)
 0633  C7 06 0046 R 000A     C1		MOV	$M_RT.$M_DIVISOR,$M_BASE10		     ;;AN000;; Set default divisor
 0639  E8 04D1 R             C1		CALL	$M_CONVERT2ASC				     ;;AN000;;
 063C                        C1	$MDO215:
 063C  58                    C1		  POP	  AX					     ;;AN000;;	 Get character in register
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-34
DOS - Message Retriever - DISPMSG.ASM Module                

 063D  88 87 0048 R          C1		  MOV	  BYTE PTR $M_RT.$M_TEMP_BUF[BX],AL	     ;;AN000;;	Move char into the buffer
 0641  43                    C1		  INC	  BX					     ;;AN000;;	 Increase buffer count
 0642  83 FB 40              C1		  CMP	  BX,$M_TEMP_BUF_SZ			     ;;AN000;;	 Is buffer full?
 0645  75 03                 C1		  JNE $MIF216
 0647  E8 071A R             C1		    CALL    $M_FLUSH_BUF			     ;;AN000;;	   Flush the buffer
 064A                        C1	$MIF216:
 064A  FE C9                 C1		  DEC	  CL					     ;;AN000;;	 Have we completed replace?
 064C  75 EE                 C1		JNZ $MDO215
 064E  B8 0A0D               C1		MOV	AX,$M_CR_LF				     ;;AN000;;	Move char into the buffer
 0651  89 87 0048 R          C1		MOV	WORD PTR $M_RT.$M_TEMP_BUF[BX],AX	     ;;AN000;;	Move char into the buffer
 0655  43                    C1		INC	BX					     ;;AN000;;	 Increase buffer count
 0656  43                    C1		INC	BX					     ;;AN000;;	 Increase buffer count
 0657  E8 071A R             C1		CALL	$M_FLUSH_BUF				     ;;AN000;;	   Flush the buffer
 065A  C3                    C1		RET						     ;;AN000::
 065B                        C1	$M_EXT_PAR_REPLACE ENDP 				     ;;AN000;;
 065B                        C1	$M_DISPLAY_REPLACE PROC NEAR				     ;;AN000;;
 065B  33 DB                 C1		  XOR	  BX,BX 				     ;;AN000;; Use BX for buffer count
 065D  80 7C 06 00           C1		  CMP	  $M_SL.$M_S_ID,$M_SPECIAL_CASE-30H	     ;;AN000;; Is this the special case (con
				vert to ASCII)
 0661  75 11                 C1		  JNE $MIF276
 0663  C7 87 0048 R 2D20     C1		    MOV     WORD PTR $M_RT.$M_TEMP_BUF[BX],$M_SPACE_HYP ;;AN000;; Move in a " -"
 0669  43                    C1		    INC     BX					     ;;AN000;;	   Increment count
 066A  43                    C1		    INC     BX					     ;;AN000;;	   Increment count
 066B  C6 87 0048 R 20       C1		    MOV     BYTE PTR $M_RT.$M_TEMP_BUF[BX],$M_SPACE  ;;AN000;;	   Move in a " "
 0670  43                    C1		    INC     BX					     ;;AN000;;	   Increment count
 0671  E8 071A R             C1		    CALL    $M_FLUSH_BUF			     ;;AN000;;	   Write out " - " to prepar
				e for special case
 0674                        C1	$MIF276:
 0674  5D                    C1		  POP	  BP					     ;;AN000;; Remember the return address
 0675  33 DB                 C1		  XOR	  BX,BX 				     ;;AN000;; Use BX for buffer count
 0677  33 D2                 C1		  XOR	  DX,DX 				     ;;AN000;; Use DX for count of parms tak
				en off the stack
 0679  88 0E 003E R          C1		  MOV	  $M_RT.$M_SIZE,CL			     ;;AN000;; Save size to later clear stac
				k
 067D  8A 44 09              C1		  MOV	  AL,BYTE PTR $M_SL.$M_S_MINW		     ;;AN000;; Get the minimum width
 0680  3A C1                 C1		  CMP	  AL,CL 				     ;;AN000;; Do we need pad chars added?
 0682  76 1E                 C1		  JNA $MIF278
 0684  2A C1                 C1		    SUB     AL,CL				     ;;AN000;;	 Calculate how many pad char
				s are needed.
 0686  8A F0                 C1		    MOV     DH,AL				     ;;AN000;;	 Save the number of pad char
				acters
 0688  F6 44 07 80           C1		    TEST    BYTE PTR $M_SL.$M_S_FLAG,Right_Align     ;;AN000;;	 Was replaceable parm to be 
				right aligned?
 068C  74 14                 C1		    JZ $MIF279
 068E                        C1	$MDO280:
 068E  8A 44 0A              C1			MOV	AL,BYTE PTR $M_SL.$M_S_PAD	     ;;AN000;;
 0691  88 87 0048 R          C1			MOV	BYTE PTR $M_RT.$M_TEMP_BUF[BX],AL    ;;AN000;;	   Move in a pad char
 0695  43                    C1			INC	BX				     ;;AN000;;
 0696  83 FB 40              C1			CMP	BX,$M_TEMP_BUF_SZ		     ;;AN000;;	   Is buffer full?
 0699  75 03                 C1			JNE $MIF281
 069B  E8 071A R             C1			  CALL	  $M_FLUSH_BUF			     ;;AN000;;	     Flush the buffer
 069E                        C1	$MIF281:
 069E  FE CE                 C1			DEC	DH				     ;;AN000;;	   Have we filled with enoug
				h pad chars?
 06A0  75 EC                 C1		      JNZ $MDO280
 06A2                        C1	$MIF279:
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-35
DOS - Message Retriever - DISPMSG.ASM Module                

 06A2                        C1	$MIF278:
 06A2  80 7C 08 00           C1		  CMP	  BYTE PTR $M_SL.$M_S_MAXW,$M_UNLIM_W	     ;;AN000;; Is maximum width unlimited?
 06A6  74 0D                 C1		  JE $MIF286
 06A8  38 4C 08              C1		    CMP     BYTE PTR $M_SL.$M_S_MAXW,CL 	     ;;AN000;; Will we exceed maximum width?
 06AB  73 08                 C1		    JNB $MIF287
 06AD  2A 4C 08              C1		      SUB     CL,BYTE PTR $M_SL.$M_S_MAXW	     ;;AN000;;	 Calculate how many extra ch
				ars
 06B0  8A D1                 C1		      MOV     DL,CL				     ;;AN000;;	 Remember how many chars to 
				pop off
 06B2  8A 4C 08              C1		      MOV     CL,BYTE PTR $M_SL.$M_S_MAXW	     ;;AN000;;	 Set new string length
 06B5                        C1	$MIF287:
 06B5                        C1	$MIF286:
 06B5  0B C9                 C1		  OR	  CX,CX 				     ;;AN000;;
 06B7  74 24                 C1		  JZ $MIF290
 06B9                        C1	$MDO291:
 06B9  F6 44 07 0F           C1		      TEST    BYTE PTR $M_SL.$M_S_FLAG,NOT Char_Type AND $M_TYPE_MASK ;;AN000;;
 06BD  75 0C                 C1		      JNZ $MIF292
 06BF  F6 44 07 10           C1		      TEST    $M_SL.$M_S_FLAG,Char_field_ASCIIZ AND $M_SIZE_MASK ;  Is this replace a ASCIIZ
				 string?
 06C3  74 06                 C1		      JZ $MIF292
 06C5  26: 8A 05             C1			MOV	AL,BYTE PTR ES:[DI]		     ;;AN000;;	 Get first character from st
				ring
 06C8  47                    C1			INC	DI				     ;;AN000;;	 Next character in string
 06C9  EB 01                 C1		      JMP SHORT $MEN292
 06CB                        C1	$MIF292:
 06CB  58                    C1			POP	AX				     ;;AN000;;	 Get character in register
 06CC                        C1	$MEN292:
 06CC  88 87 0048 R          C1		      MOV     BYTE PTR $M_RT.$M_TEMP_BUF[BX],AL      ;;AN000;;	Move char into the buffer
 06D0  43                    C1		      INC     BX				     ;;AN000;;	 Increase buffer count
 06D1  83 FB 40              C1		      CMP     BX,$M_TEMP_BUF_SZ 		     ;;AN000;;	 Is buffer full?
 06D4  75 03                 C1		      JNE $MIF295
 06D6  E8 071A R             C1			CALL	$M_FLUSH_BUF			     ;;AN000;;	   Flush the buffer
 06D9                        C1	$MIF295:
 06D9  FE C9                 C1		      DEC     CL				     ;;AN000;;	 Have we completed replace?
 06DB  75 DC                 C1		    JNZ $MDO291
 06DD                        C1	$MIF290:
 06DD  F6 44 07 80           C1		  TEST	  BYTE PTR $M_SL.$M_S_FLAG,Right_Align	     ;;AN000;;	 Was replaceable parm to be 
				left aligned?
 06E1  75 18                 C1		  JNZ $MIF299
 06E3  0A F6                 C1		    OR	    DH,DH				     ;;AN000;;	 Do we need pad chars added?
 06E5  74 14                 C1		    JZ $MIF300
 06E7                        C1	$MDO301:
 06E7  8A 44 0A              C1			MOV	AL,BYTE PTR $M_SL.$M_S_PAD	     ;;AN000;;
 06EA  88 87 0048 R          C1			MOV	BYTE PTR $M_RT.$M_TEMP_BUF[BX],AL    ;;AN000;;	   Move in a pad char
 06EE  43                    C1			INC	BX				     ;;AN000;;
 06EF  83 FB 40              C1			CMP	BX,$M_TEMP_BUF_SZ		     ;;AN000;;	   Is buffer full?
 06F2  75 03                 C1			JNE $MIF302
 06F4  E8 071A R             C1			  CALL	  $M_FLUSH_BUF			     ;;AN000;;	     Flush the buffer
 06F7                        C1	$MIF302:
 06F7  FE CE                 C1			DEC	DH				     ;;AN000;;	   Have we filled with enoug
				h pad chars?
 06F9  75 EC                 C1		      JNZ $MDO301
 06FB                        C1	$MIF300:
 06FB                        C1	$MIF299:
 06FB  F6 44 07 0F           C1		  TEST	  BYTE PTR $M_SL.$M_S_FLAG,NOT Char_Type AND $M_TYPE_MASK ;;AN000;;
 06FF  75 08                 C1		  JNZ $MIF307
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-36
DOS - Message Retriever - DISPMSG.ASM Module                

 0701  F6 44 07 10           C1		  TEST	  $M_SL.$M_S_FLAG,Char_field_ASCIIZ AND $M_SIZE_MASK ;;AN000;;	Is this replace a AS
				CIIZ string?
 0705  74 02                 C1		  JZ $MIF307
 0707  EB 0C                 C1		  JMP SHORT $MEN307
 0709                        C1	$MIF307:
 0709  0A D2                 C1		    OR	    DL,DL				     ;;AN000;;
 070B  74 08                 C1		    JE $MIF309
 070D                        C1	$MDO310:
 070D  8F 06 0042 R          C1			POP	[$M_RT.$M_RETURN_ADDR]		     ;;AN000;;	 Clean Up stack using spare 
				variable
 0711  FE CA                 C1			DEC	DL				     ;;AN000;;	 Are we done?
 0713  75 F8                 C1		      JNZ $MDO310
 0715                        C1	$MIF309:
 0715                        C1	$MEN307:
 0715  E8 071A R             C1		  CALL	  $M_FLUSH_BUF				     ;;AN000;;	     Flush the buffer for th
				e final time
 0718  55                    C1		  PUSH	  BP					     ;;AN000;; Restore the return address
 0719  C3                    C1		  RET						     ;;AN000;;
 071A                        C1	$M_DISPLAY_REPLACE ENDP 				     ;;AN000;;
 071A                        C1	$M_FLUSH_BUF PROC NEAR					     ;;AN000;;
 071A  51                    C1		  PUSH	  CX					     ;;AN000;; Save changed regs
 071B  06                    C1		  PUSH	  ES					     ;;AN000;;
 071C  57                    C1		  PUSH	  DI					     ;;AN000;;
 071D  1E                    C1		  PUSH	  DS					     ;;AN000;; Set ES pointing to buffer
 071E  07                    C1		  POP	  ES					     ;;AN000;;
 071F  8B CB                 C1		  MOV	  CX,BX 				     ;;AN000;; Set number of bytes to displa
				y
 0721  33 DB                 C1		  XOR	  BX,BX 				     ;;AN000;; Reset buffer counter
 0723  8D 3E 0048 R          C1		  LEA	  DI,$M_RT.$M_TEMP_BUF			     ;;AN000;; Reset buffer location pointer
 0727  E8 03EF R             C1		  CALL	  $M_DISPLAY_STRING			     ;;AN000;; Display the buffer
 072A  72 05                 C1		  JC $MIF314
 072C  5F                    C1		    POP     DI					     ;;AN000;; No, Restore changed regs
 072D  07                    C1		    POP     ES					     ;;AN000;;
 072E  59                    C1		    POP     CX					     ;;AN000;;
 072F  EB 04                 C1		  JMP SHORT $MEN314
 0731                        C1	$MIF314:
 0731  83 C4 06              C1		    ADD     SP,6				     ;;AN000;;	Fix stack
 0734  F9                    C1		    STC 					     ;;AN000;;
 0735                        C1	$MEN314:
 0735  C3                    C1		  RET						     ;;AN000;; Return
 0736                        C1	$M_FLUSH_BUF ENDP					     ;;AN000;;
 0736                        C1	$M_CHAR_REPLACE PROC NEAR				     ;;AN000;;
 0736  5D                    C1		    POP     BP					     ;;AN000;; Save return address
 0737  F6 44 07 30           C1		    TEST    $M_SL.$M_S_FLAG,NOT Char_Field_Char AND $M_SIZE_MASK ;;AN000;; Was Character spe
				cified?
 073B  75 12                 C1		    JNZ $MIF317
 073D  26: 8A 05             C1		      MOV     AL,BYTE PTR ES:[DI]		     ;;AN000;;	 Get the character
 0740  50                    C1		      PUSH    AX				     ;;AN000;;	 Put it on the stack
 0741  41                    C1		      INC     CX				     ;;AN000;;	 Increase the count
 0742  E8 04AD R             C1		      CALL    $M_IS_IT_DBCS			     ;;AN000;;	 Is this the first byte of a
				 DB character
 0745  73 06                 C1		      JNC $MIF318
 0747  26: 8A 45 01          C1			MOV	AL,BYTE PTR ES:[DI]+1		     ;;AN000;;	   Get the next character
 074B  50                    C1			PUSH	AX				     ;;AN000;;	   Put it on the stack
 074C  F8                    C1			CLC					     ;;AN000;;	   Clear the carry
 074D                        C1	$MIF318:
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-37
DOS - Message Retriever - DISPMSG.ASM Module                

 074D  EB 0D                 C1		    JMP SHORT $MEN317
 074F                        C1	$MIF317:
 074F                        C1	$MDO321:
 074F  26: 8A 05             C1			MOV	AL,BYTE PTR ES:[DI]		     ;;AN000;;	 Get the character
 0752  0A C0                 C1			OR	AL,AL				     ;;AN000;;	 Is it the NULL?
 0754  74 04                 C1		      JZ $MEN321
 0756  47                    C1			INC	DI				     ;;AN000;;	   Next character
 0757  41                    C1			INC	CX				     ;;AN000;;	   Increment the count
 0758  EB F5                 C1		      JMP SHORT $MDO321
 075A                        C1	$MEN321:
 075A  2B F9                 C1		      SUB     DI,CX				     ;;AN000;;	 Set SI at the beginning of 
				the string
 075C                        C1	$MEN317:
 075C  55                    C1		    PUSH    BP					     ;;AN000;; Restore return address
 075D  C3                    C1		    RET 					     ;;AN000;; Return
 075E                        C1	$M_CHAR_REPLACE ENDP					     ;;AN000;;
 075E                        C1	$M_BIN2ASC_REPLACE PROC NEAR				     ;;AN000;;
 075E  5D                    C1		    POP     BP					     ;;AN000;; Save return address
 075F  33 D2                 C1		    XOR     DX,DX				     ;;AN000;; Prepare for get binary value 
				(HIGH)
 0761  33 C0                 C1		    XOR     AX,AX				     ;;AN000;; Prepare for get binary value 
				(LOW)
 0763  C7 06 0046 R 0010     C1		    MOV     $M_RT.$M_DIVISOR,$M_BASE16		     ;;AN000;; Set default divisor
 0769  33 DB                 C1		    XOR     BX,BX				     ;;AN000;; Use BP as the NEG flag (if ap
				plicable)
 076B  F6 44 07 20           C1		    TEST    $M_SL.$M_S_FLAG,NOT $M_BYTE AND $M_SIZE_MASK ;;AN000;; Was BYTE specified?
 076F  75 24                 C1		    JNZ $MIF325
 0771  26: 8A 05             C1		      MOV     AL, BYTE PTR ES:[DI]		     ;;AN000;; Setup byte in AL
 0774  F6 44 07 0D           C1		      TEST    $M_SL.$M_S_FLAG,NOT Sgn_Bin_Type AND $M_TYPE_MASK ;;AN000;; Was Signed binary 
				specified?
 0778  75 0D                 C1		      JNZ $MIF326
 077A  A8 80                 C1			TEST	AL,10000000b			     ;;AN000;; Is this number negative?
 077C  74 03                 C1			JZ $MIF327
 077E  43                    C1			  INC	  BX				     ;;AN000;;	   Remember that it was nega
				tive
 077F  24 7F                 C1			  AND	  AL,01111111b			     ;;AN000;;	   Make it positive
 0781                        C1	$MIF327:
 0781  C7 06 0046 R 000A     C1			MOV	$M_RT.$M_DIVISOR,$M_BASE10	     ;;AN000;;
 0787                        C1	$MIF326:
 0787  F6 44 07 0E           C1		      TEST    $M_SL.$M_S_FLAG,NOT Unsgn_Bin_Type AND $M_TYPE_MASK ;;AN000;; Was Signed binar
				y specified?
 078B  75 06                 C1		      JNZ $MIF330
 078D  C7 06 0046 R 000A     C1			MOV	$M_RT.$M_DIVISOR,$M_BASE10	     ;;AN000;;
 0793                        C1	$MIF330:
 0793  EB 54                 C1		    JMP SHORT $MEN325
 0795                        C1	$MIF325:
 0795  F6 44 07 10           C1		      TEST    $M_SL.$M_S_FLAG,NOT $M_WORD AND $M_SIZE_MASK ;;AN000;; Was WORD specified?
 0799  75 26                 C1		      JNZ $MIF333
 079B  26: 8B 05             C1			MOV	AX, WORD PTR ES:[DI]		     ;;AN000;; Setup byte in AL
 079E  F6 44 07 0D           C1			TEST	$M_SL.$M_S_FLAG,NOT Sgn_Bin_Type AND $M_TYPE_MASK ;; AN000;; Was Signed bina
				ry specified?
 07A2  75 0F                 C1			JNZ $MIF334
 07A4  F6 C4 80              C1			  TEST	  AH,10000000b			     ;;AN000;; Is this number negative?
 07A7  74 04                 C1			  JZ $MIF335
 07A9  43                    C1			    INC     BX				     ;;AN000;;	   Remember that it was nega
				tive
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-38
DOS - Message Retriever - DISPMSG.ASM Module                

 07AA  80 E4 7F              C1			    AND     AH,01111111b		     ;;AN000;;	   Make it positive
 07AD                        C1	$MIF335:
 07AD  C7 06 0046 R 000A     C1			  MOV	  $M_RT.$M_DIVISOR,$M_BASE10	     ;;AN000;;
 07B3                        C1	$MIF334:
 07B3  F6 44 07 0E           C1			TEST	$M_SL.$M_S_FLAG,NOT Unsgn_Bin_Type AND $M_TYPE_MASK ;;AN000;; Was Signed bin
				ary specified?
 07B7  75 06                 C1			JNZ $MIF338
 07B9  C7 06 0046 R 000A     C1			  MOV	  $M_RT.$M_DIVISOR,$M_BASE10	     ;;AN000;;
 07BF                        C1	$MIF338:
 07BF  EB 28                 C1		      JMP SHORT $MEN333
 07C1                        C1	$MIF333:
 07C1  26: 8B 05             C1			MOV	AX, WORD PTR ES:[DI]		     ;;AN000;; Setup Double word in DX:AX
 07C4  26: 8B 55 02          C1			MOV	DX, WORD PTR ES:[DI]+2		     ;;AN000;;
 07C8  F6 44 07 0D           C1			TEST	$M_SL.$M_S_FLAG,NOT Sgn_Bin_Type AND $M_TYPE_MASK ;;AN000;; Was Signed binar
				y specified?
 07CC  75 0F                 C1			JNZ $MIF341
 07CE  F6 C6 80              C1			  TEST	  DH,10000000b			     ;;AN000;; Is this number negative?
 07D1  74 04                 C1			  JZ $MIF342
 07D3  43                    C1			    INC     BX				     ;;AN000;;	   Remember that it was nega
				tive
 07D4  80 E6 7F              C1			    AND     DH,01111111b		     ;;AN000;;	   Make it positive
 07D7                        C1	$MIF342:
 07D7  C7 06 0046 R 000A     C1			  MOV	  $M_RT.$M_DIVISOR,$M_BASE10	     ;;AN000;;
 07DD                        C1	$MIF341:
 07DD  F6 44 07 0E           C1			TEST	$M_SL.$M_S_FLAG,NOT Unsgn_Bin_Type AND $M_TYPE_MASK ;;AN000;; Was Signed bin
				ary specified?
 07E1  75 06                 C1			JNZ $MIF345
 07E3  C7 06 0046 R 000A     C1			  MOV	  $M_RT.$M_DIVISOR,$M_BASE10	     ;;AN000;;
 07E9                        C1	$MIF345:
 07E9                        C1	$MEN333:
 07E9                        C1	$MEN325:
 07E9  E8 04D1 R             C1		    CALL    $M_CONVERT2ASC			     ;;AN000;; Convert to ASCII string
 07EC  0B DB                 C1		    OR	    BX,BX				     ;;AN000;;
 07EE  74 05                 C1		    JZ $MIF349
 07F0  33 D2                 C1		      XOR     DX,DX				     ;;AN000;; Yes,
 07F2  B2 2D                 C1		      MOV     DL,$M_NEG_SIGN			     ;;AN000;;	 Put "-" on the stack with t
				he number
 07F4  52                    C1		      PUSH    DX				     ;;AN000;;
 07F5                        C1	$MIF349:
 07F5  55                    C1		    PUSH    BP					     ;;AN000;; Restore return address
 07F6  C3                    C1		    RET 					     ;;AN000;; Return
 07F7                        C1	$M_BIN2ASC_REPLACE ENDP 				     ;;AN000;;
					MSG_SERVICES <MEM.CLA,MEM.CLB,MEM.CL1,MEM.CL2,MEM.CTL>			     ;AN000;
 07F7                        C3	$M_CLASS_A_STRUC LABEL BYTE
 07F7  FF                    C3	        $M_CLASS_ID <0FFH,EXPECTED_VERSION,Class_A_MessageCount>
 07F8  0400                  C3	
 07FA  23                    C3	
 07FB                        C3	$M_A_00001H_STRUC LABEL BYTE
 07FB  0100                  C3	        $M_ID   <00001H,$M_A_00001H_MSG-$M_A_00001H_STRUC>
 07FD  8C00                  C3	
 07FF                        C3	$M_A_0000AH_STRUC LABEL BYTE
 07FF  0A00                  C3	        $M_ID   <0000AH,$M_A_0000AH_MSG-$M_A_0000AH_STRUC>
 0801  A000                  C3	
 0803                        C3	$M_A_0000BH_STRUC LABEL BYTE
 0803  0B00                  C3	        $M_ID   <0000BH,$M_A_0000BH_MSG-$M_A_0000BH_STRUC>
 0805  9F00                  C3	
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-39
DOS - Message Retriever - DISPMSG.ASM Module                

 0807                        C3	$M_A_0000CH_STRUC LABEL BYTE
 0807  0C00                  C3	        $M_ID   <0000CH,$M_A_0000CH_MSG-$M_A_0000CH_STRUC>
 0809  D500                  C3	
 080B                        C3	$M_A_0000DH_STRUC LABEL BYTE
 080B  0D00                  C3	        $M_ID   <0000DH,$M_A_0000DH_MSG-$M_A_0000DH_STRUC>
 080D  0B01                  C3	
 080F                        C3	$M_A_0000EH_STRUC LABEL BYTE
 080F  0E00                  C3	        $M_ID   <0000EH,$M_A_0000EH_MSG-$M_A_0000EH_STRUC>
 0811  2D01                  C3	
 0813                        C3	$M_A_0000FH_STRUC LABEL BYTE
 0813  0F00                  C3	        $M_ID   <0000FH,$M_A_0000FH_MSG-$M_A_0000FH_STRUC>
 0815  4F01                  C3	
 0817                        C3	$M_A_00010H_STRUC LABEL BYTE
 0817  1000                  C3	        $M_ID   <00010H,$M_A_00010H_MSG-$M_A_00010H_STRUC>
 0819  6801                  C3	
 081B                        C3	$M_A_00011H_STRUC LABEL BYTE
 081B  1100                  C3	        $M_ID   <00011H,$M_A_00011H_MSG-$M_A_00011H_STRUC>
 081D  8701                  C3	
 081F                        C3	$M_A_00012H_STRUC LABEL BYTE
 081F  1200                  C3	        $M_ID   <00012H,$M_A_00012H_MSG-$M_A_00012H_STRUC>
 0821  AB01                  C3	
 0823                        C3	$M_A_00013H_STRUC LABEL BYTE
 0823  1300                  C3	        $M_ID   <00013H,$M_A_00013H_MSG-$M_A_00013H_STRUC>
 0825  BF01                  C3	
 0827                        C3	$M_A_00014H_STRUC LABEL BYTE
 0827  1400                  C3	        $M_ID   <00014H,$M_A_00014H_MSG-$M_A_00014H_STRUC>
 0829  D001                  C3	
 082B                        C3	$M_A_00015H_STRUC LABEL BYTE
 082B  1500                  C3	        $M_ID   <00015H,$M_A_00015H_MSG-$M_A_00015H_STRUC>
 082D  F101                  C3	
 082F                        C3	$M_A_00016H_STRUC LABEL BYTE
 082F  1600                  C3	        $M_ID   <00016H,$M_A_00016H_MSG-$M_A_00016H_STRUC>
 0831  0902                  C3	
 0833                        C3	$M_A_00017H_STRUC LABEL BYTE
 0833  1700                  C3	        $M_ID   <00017H,$M_A_00017H_MSG-$M_A_00017H_STRUC>
 0835  2002                  C3	
 0837                        C3	$M_A_00018H_STRUC LABEL BYTE
 0837  1800                  C3	        $M_ID   <00018H,$M_A_00018H_MSG-$M_A_00018H_STRUC>
 0839  3D02                  C3	
 083B                        C3	$M_A_00019H_STRUC LABEL BYTE
 083B  1900                  C3	        $M_ID   <00019H,$M_A_00019H_MSG-$M_A_00019H_STRUC>
 083D  4B02                  C3	
 083F                        C3	$M_A_0001AH_STRUC LABEL BYTE
 083F  1A00                  C3	        $M_ID   <0001AH,$M_A_0001AH_MSG-$M_A_0001AH_STRUC>
 0841  5F02                  C3	
 0843                        C3	$M_A_0001BH_STRUC LABEL BYTE
 0843  1B00                  C3	        $M_ID   <0001BH,$M_A_0001BH_MSG-$M_A_0001BH_STRUC>
 0845  7302                  C3	
 0847                        C3	$M_A_0001CH_STRUC LABEL BYTE
 0847  1C00                  C3	        $M_ID   <0001CH,$M_A_0001CH_MSG-$M_A_0001CH_STRUC>
 0849  7302                  C3	
 084B                        C3	$M_A_0001DH_STRUC LABEL BYTE
 084B  1D00                  C3	        $M_ID   <0001DH,$M_A_0001DH_MSG-$M_A_0001DH_STRUC>
 084D  7602                  C3	
 084F                        C3	$M_A_0001EH_STRUC LABEL BYTE
 084F  1E00                  C3	        $M_ID   <0001EH,$M_A_0001EH_MSG-$M_A_0001EH_STRUC>
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-40
DOS - Message Retriever - DISPMSG.ASM Module                

 0851  7F02                  C3	
 0853                        C3	$M_A_0001FH_STRUC LABEL BYTE
 0853  1F00                  C3	        $M_ID   <0001FH,$M_A_0001FH_MSG-$M_A_0001FH_STRUC>
 0855  8B02                  C3	
 0857                        C3	$M_A_00020H_STRUC LABEL BYTE
 0857  2000                  C3	        $M_ID   <00020H,$M_A_00020H_MSG-$M_A_00020H_STRUC>
 0859  9D02                  C3	
 085B                        C3	$M_A_00021H_STRUC LABEL BYTE
 085B  2100                  C3	        $M_ID   <00021H,$M_A_00021H_MSG-$M_A_00021H_STRUC>
 085D  B202                  C3	
 085F                        C3	$M_A_00022H_STRUC LABEL BYTE
 085F  2200                  C3	        $M_ID   <00022H,$M_A_00022H_MSG-$M_A_00022H_STRUC>
 0861  B302                  C3	
 0863                        C3	$M_A_00023H_STRUC LABEL BYTE
 0863  2300                  C3	        $M_ID   <00023H,$M_A_00023H_MSG-$M_A_00023H_STRUC>
 0865  BA02                  C3	
 0867                        C3	$M_A_00024H_STRUC LABEL BYTE
 0867  2400                  C3	        $M_ID   <00024H,$M_A_00024H_MSG-$M_A_00024H_STRUC>
 0869  C002                  C3	
 086B                        C3	$M_A_00025H_STRUC LABEL BYTE
 086B  2500                  C3	        $M_ID   <00025H,$M_A_00025H_MSG-$M_A_00025H_STRUC>
 086D  C402                  C3	
 086F                        C3	$M_A_00026H_STRUC LABEL BYTE
 086F  2600                  C3	        $M_ID   <00026H,$M_A_00026H_MSG-$M_A_00026H_STRUC>
 0871  C702                  C3	
 0873                        C3	$M_A_00027H_STRUC LABEL BYTE
 0873  2700                  C3	        $M_ID   <00027H,$M_A_00027H_MSG-$M_A_00027H_STRUC>
 0875  CC02                  C3	
 0877                        C3	$M_A_00028H_STRUC LABEL BYTE
 0877  2800                  C3	        $M_ID   <00028H,$M_A_00028H_MSG-$M_A_00028H_STRUC>
 0879  D102                  C3	
 087B                        C3	$M_A_0002DH_STRUC LABEL BYTE
 087B  2D00                  C3	        $M_ID   <0002DH,$M_A_0002DH_MSG-$M_A_0002DH_STRUC>
 087D  D302                  C3	
 087F                        C3	$M_A_00034H_STRUC LABEL BYTE
 087F  3400                  C3	        $M_ID   <00034H,$M_A_00034H_MSG-$M_A_00034H_STRUC>
 0881  D902                  C3	
 0883                        C3	$M_A_00035H_STRUC LABEL BYTE
 0883  3500                  C3	        $M_ID   <00035H,$M_A_00035H_MSG-$M_A_00035H_STRUC>
 0885  F502                  C3	
 0887                        C3	$M_A_00001H_MSG LABEL BYTE
 0887  17                    C3	        DB      $M_A_00001H_END-$M_A_00001H_MSG-1
 0888  49 6E 63 6F 72 72     C3	        DB      "Incorrect DOS version",CR,LF
 089F                        C3	$M_A_00001H_END LABEL BYTE
 089F                        C3	$M_A_0000AH_MSG LABEL BYTE
 089F  02                    C3	        DB      $M_A_0000AH_END-$M_A_0000AH_MSG-1
 08A0  0D 0A                 C3	        DB       CR,LF
 08A2                        C3	$M_A_0000AH_END LABEL BYTE
 08A2                        C3	$M_A_0000BH_MSG LABEL BYTE
 08A2  39                    C3	        DB      $M_A_0000BH_END-$M_A_0000BH_MSG-1
 08A3  20 20 41 64 64 72     C3	        DB       "  Address     Name          Size                  Type ",CR,LF
 08DC                        C3	$M_A_0000BH_END LABEL BYTE
 08DC                        C3	$M_A_0000CH_MSG LABEL BYTE
 08DC  39                    C3	        DB      $M_A_0000CH_END-$M_A_0000CH_MSG-1
 08DD  20 20 C4 C4 C4 C4     C3	        DB       "  ÄÄÄÄÄÄÄ     ÄÄÄÄÄÄÄÄ     ÄÄÄÄÄÄ                ÄÄÄÄÄÄ",CR,LF
 0916                        C3	$M_A_0000CH_END LABEL BYTE
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-41
DOS - Message Retriever - DISPMSG.ASM Module                

 0916                        C3	$M_A_0000DH_MSG LABEL BYTE
 0916  25                    C3	        DB      $M_A_0000DH_END-$M_A_0000DH_MSG-1
 0917  20 20 48 61 6E 64     C3	        DB       "  Handle      EMS Name      Size   ",CR,LF
 093C                        C3	$M_A_0000DH_END LABEL BYTE
 093C                        C3	$M_A_0000EH_MSG LABEL BYTE
 093C  25                    C3	        DB      $M_A_0000EH_END-$M_A_0000EH_MSG-1
 093D  20 20 C4 C4 C4 C4     C3	        DB       "  ÄÄÄÄÄÄÄ     ÄÄÄÄÄÄÄÄ     ÄÄÄÄÄÄ  ",CR,LF
 0962                        C3	$M_A_0000EH_END LABEL BYTE
 0962                        C3	$M_A_0000FH_MSG LABEL BYTE
 0962  1C                    C3	        DB      $M_A_0000FH_END-$M_A_0000FH_MSG-1
 0963  20 20 25 31 20 20     C3	        DB       "  %1      %2     %3     %4",CR,LF
 097F                        C3	$M_A_0000FH_END LABEL BYTE
 097F                        C3	$M_A_00010H_MSG LABEL BYTE
 097F  22                    C3	        DB      $M_A_00010H_END-$M_A_00010H_MSG-1
 0980  20 20 20 20 20 20     C3	        DB       "                %1   %2      %3 ",CR,LF
 09A2                        C3	$M_A_00010H_END LABEL BYTE
 09A2                        C3	$M_A_00011H_MSG LABEL BYTE
 09A2  27                    C3	        DB      $M_A_00011H_END-$M_A_00011H_MSG-1
 09A3  20 20 20 20 20 20     C3	        DB       "                  %1              %2 ",CR,LF
 09CA                        C3	$M_A_00011H_END LABEL BYTE
 09CA                        C3	$M_A_00012H_MSG LABEL BYTE
 09CA  17                    C3	        DB      $M_A_00012H_END-$M_A_00012H_MSG-1
 09CB  25 31 20 62 79 74     C3	        DB       "%1 bytes total memory",CR,LF
 09E2                        C3	$M_A_00012H_END LABEL BYTE
 09E2                        C3	$M_A_00013H_MSG LABEL BYTE
 09E2  14                    C3	        DB      $M_A_00013H_END-$M_A_00013H_MSG-1
 09E3  25 31 20 62 79 74     C3	        DB       "%1 bytes available",CR,LF
 09F7                        C3	$M_A_00013H_END LABEL BYTE
 09F7                        C3	$M_A_00014H_MSG LABEL BYTE
 09F7  24                    C3	        DB      $M_A_00014H_END-$M_A_00014H_MSG-1
 09F8  25 31 20 6C 61 72     C3	        DB       "%1 largest executable program size",CR,LF
 0A1C                        C3	$M_A_00014H_END LABEL BYTE
 0A1C                        C3	$M_A_00015H_MSG LABEL BYTE
 0A1C  1B                    C3	        DB      $M_A_00015H_END-$M_A_00015H_MSG-1
 0A1D  25 31 20 62 79 74     C3	        DB       "%1 bytes total EMS memory",CR,LF
 0A38                        C3	$M_A_00015H_END LABEL BYTE
 0A38                        C3	$M_A_00016H_MSG LABEL BYTE
 0A38  1A                    C3	        DB      $M_A_00016H_END-$M_A_00016H_MSG-1
 0A39  25 31 20 62 79 74     C3	        DB       "%1 bytes free EMS memory",CR,LF
 0A53                        C3	$M_A_00016H_END LABEL BYTE
 0A53                        C3	$M_A_00017H_MSG LABEL BYTE
 0A53  20                    C3	        DB      $M_A_00017H_END-$M_A_00017H_MSG-1
 0A54  25 31 20 62 79 74     C3	        DB       "%1 bytes total extended memory",CR,LF
 0A74                        C3	$M_A_00017H_END LABEL BYTE
 0A74                        C3	$M_A_00018H_MSG LABEL BYTE
 0A74  11                    C3	        DB      $M_A_00018H_END-$M_A_00018H_MSG-1
 0A75  49 6E 74 65 72 72     C3	        DB       "Interrupt Vector",0
 0A86                        C3	$M_A_00018H_END LABEL BYTE
 0A86                        C3	$M_A_00019H_MSG LABEL BYTE
 0A86  17                    C3	        DB      $M_A_00019H_END-$M_A_00019H_MSG-1
 0A87  52 4F 4D 20 43 6F     C3	        DB       "ROM Communication Area",0
 0A9E                        C3	$M_A_00019H_END LABEL BYTE
 0A9E                        C3	$M_A_0001AH_MSG LABEL BYTE
 0A9E  17                    C3	        DB      $M_A_0001AH_END-$M_A_0001AH_MSG-1
 0A9F  44 4F 53 20 43 6F     C3	        DB       "DOS Communication Area",0
 0AB6                        C3	$M_A_0001AH_END LABEL BYTE
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-42
DOS - Message Retriever - DISPMSG.ASM Module                

 0AB6                        C3	$M_A_0001BH_MSG LABEL BYTE
 0AB6  03                    C3	        DB      $M_A_0001BH_END-$M_A_0001BH_MSG-1
 0AB7  49 4F 00              C3	        DB       "IO",0
 0ABA                        C3	$M_A_0001BH_END LABEL BYTE
 0ABA                        C3	$M_A_0001CH_MSG LABEL BYTE
 0ABA  06                    C3	        DB      $M_A_0001CH_END-$M_A_0001CH_MSG-1
 0ABB  4D 53 44 4F 53 00     C3	        DB       "MSDOS",0
 0AC1                        C3	$M_A_0001CH_END LABEL BYTE
 0AC1                        C3	$M_A_0001DH_MSG LABEL BYTE
 0AC1  0C                    C3	        DB      $M_A_0001DH_END-$M_A_0001DH_MSG-1
 0AC2  53 79 73 74 65 6D     C3	        DB       "System Data",0
 0ACE                        C3	$M_A_0001DH_END LABEL BYTE
 0ACE                        C3	$M_A_0001EH_MSG LABEL BYTE
 0ACE  0F                    C3	        DB      $M_A_0001EH_END-$M_A_0001EH_MSG-1
 0ACF  53 79 73 74 65 6D     C3	        DB       "System Program",0
 0ADE                        C3	$M_A_0001EH_END LABEL BYTE
 0ADE                        C3	$M_A_0001FH_MSG LABEL BYTE
 0ADE  15                    C3	        DB      $M_A_0001FH_END-$M_A_0001FH_MSG-1
 0ADF  53 79 73 74 65 6D     C3	        DB       "System Device Driver",0
 0AF4                        C3	$M_A_0001FH_END LABEL BYTE
 0AF4                        C3	$M_A_00020H_MSG LABEL BYTE
 0AF4  18                    C3	        DB      $M_A_00020H_END-$M_A_00020H_MSG-1
 0AF5  49 6E 73 74 61 6C     C3	        DB       "Installed Device Driver",0
 0B0D                        C3	$M_A_00020H_END LABEL BYTE
 0B0D                        C3	$M_A_00021H_MSG LABEL BYTE
 0B0D  04                    C3	        DB      $M_A_00021H_END-$M_A_00021H_MSG-1
 0B0E  25 31 3A 00           C3	        DB       "%1:",0
 0B12                        C3	$M_A_00021H_END LABEL BYTE
 0B12                        C3	$M_A_00022H_MSG LABEL BYTE
 0B12  0A                    C3	        DB      $M_A_00022H_END-$M_A_00022H_MSG-1
 0B13  25 31 3A 20 2D 20     C3	        DB       "%1: - %2:",0
 0B1D                        C3	$M_A_00022H_END LABEL BYTE
 0B1D                        C3	$M_A_00023H_MSG LABEL BYTE
 0B1D  09                    C3	        DB      $M_A_00023H_END-$M_A_00023H_MSG-1
 0B1E  42 55 46 46 45 52     C3	        DB       "BUFFERS=",0
 0B27                        C3	$M_A_00023H_END LABEL BYTE
 0B27                        C3	$M_A_00024H_MSG LABEL BYTE
 0B27  07                    C3	        DB      $M_A_00024H_END-$M_A_00024H_MSG-1
 0B28  46 49 4C 45 53 3D     C3	        DB       "FILES=",0
 0B2F                        C3	$M_A_00024H_END LABEL BYTE
 0B2F                        C3	$M_A_00025H_MSG LABEL BYTE
 0B2F  06                    C3	        DB      $M_A_00025H_END-$M_A_00025H_MSG-1
 0B30  46 43 42 53 3D 00     C3	        DB       "FCBS=",0
 0B36                        C3	$M_A_00025H_END LABEL BYTE
 0B36                        C3	$M_A_00026H_MSG LABEL BYTE
 0B36  08                    C3	        DB      $M_A_00026H_END-$M_A_00026H_MSG-1
 0B37  53 54 41 43 4B 53     C3	        DB       "STACKS=",0
 0B3F                        C3	$M_A_00026H_END LABEL BYTE
 0B3F                        C3	$M_A_00027H_MSG LABEL BYTE
 0B3F  08                    C3	        DB      $M_A_00027H_END-$M_A_00027H_MSG-1
 0B40  44 45 56 49 43 45     C3	        DB       "DEVICE=",0
 0B48                        C3	$M_A_00027H_END LABEL BYTE
 0B48                        C3	$M_A_00028H_MSG LABEL BYTE
 0B48  05                    C3	        DB      $M_A_00028H_END-$M_A_00028H_MSG-1
 0B49  49 46 53 3D 00        C3	        DB       "IFS=",0
 0B4E                        C3	$M_A_00028H_END LABEL BYTE
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-43
DOS - Message Retriever - DISPMSG.ASM Module                

 0B4E                        C3	$M_A_0002DH_MSG LABEL BYTE
 0B4E  09                    C3	        DB      $M_A_0002DH_END-$M_A_0002DH_MSG-1
 0B4F  49 4E 53 54 41 4C     C3	        DB       "INSTALL=",0
 0B58                        C3	$M_A_0002DH_END LABEL BYTE
 0B58                        C3	$M_A_00034H_MSG LABEL BYTE
 0B58  1F                    C3	        DB      $M_A_00034H_END-$M_A_00034H_MSG-1
 0B59  20 20 25 31 20 20     C3	        DB       "  %1      %2     %3 %4     %5",CR,LF
 0B78                        C3	$M_A_00034H_END LABEL BYTE
 0B78                        C3	$M_A_00035H_MSG LABEL BYTE
 0B78  24                    C3	        DB      $M_A_00035H_END-$M_A_00035H_MSG-1
 0B79  20 20 20 20 20 20     C3	        DB       "                %1   %2 %3      %4",CR,LF
 0B9D                        C3	$M_A_00035H_END LABEL BYTE
 0B9D                        C3	$M_CLS_1 PROC FAR
 0B9D  0E                    C3	        PUSH    CS
 0B9E  07                    C3	        POP     ES
 0B9F  8D 3E 07F7 R          C3	        LEA     DI,$M_CLASS_A_STRUC
 0BA3  81 C1 03AC            C3	        ADD     CX,$-$M_CLASS_A_STRUC
 0BA7  CB                    C3	        RET
 0BA8                        C3	$M_CLS_1 ENDP
 0BA8                        C3	$M_CLASS_B_STRUC LABEL BYTE
 0BA8  FF                    C3	        $M_CLASS_ID <0FFH,EXPECTED_VERSION,Class_B_MessageCount>
 0BA9  0400                  C3	
 0BAB  0A                    C3	
 0BAC                        C3	$M_B_00029H_STRUC LABEL BYTE
 0BAC  2900                  C3	        $M_ID   <00029H,$M_B_00029H_MSG-$M_B_00029H_STRUC>
 0BAE  2800                  C3	
 0BB0                        C3	$M_B_0002AH_STRUC LABEL BYTE
 0BB0  2A00                  C3	        $M_ID   <0002AH,$M_B_0002AH_MSG-$M_B_0002AH_STRUC>
 0BB2  3000                  C3	
 0BB4                        C3	$M_B_0002BH_STRUC LABEL BYTE
 0BB4  2B00                  C3	        $M_ID   <0002BH,$M_B_0002BH_MSG-$M_B_0002BH_STRUC>
 0BB6  3800                  C3	
 0BB8                        C3	$M_B_0002CH_STRUC LABEL BYTE
 0BB8  2C00                  C3	        $M_ID   <0002CH,$M_B_0002CH_MSG-$M_B_0002CH_STRUC>
 0BBA  3700                  C3	
 0BBC                        C3	$M_B_0002EH_STRUC LABEL BYTE
 0BBC  2E00                  C3	        $M_ID   <0002EH,$M_B_0002EH_MSG-$M_B_0002EH_STRUC>
 0BBE  4C00                  C3	
 0BC0                        C3	$M_B_0002FH_STRUC LABEL BYTE
 0BC0  2F00                  C3	        $M_ID   <0002FH,$M_B_0002FH_MSG-$M_B_0002FH_STRUC>
 0BC2  6D00                  C3	
 0BC4                        C3	$M_B_00030H_STRUC LABEL BYTE
 0BC4  3000                  C3	        $M_ID   <00030H,$M_B_00030H_MSG-$M_B_00030H_STRUC>
 0BC6  7A00                  C3	
 0BC8                        C3	$M_B_00031H_STRUC LABEL BYTE
 0BC8  3100                  C3	        $M_ID   <00031H,$M_B_00031H_MSG-$M_B_00031H_STRUC>
 0BCA  8200                  C3	
 0BCC                        C3	$M_B_00032H_STRUC LABEL BYTE
 0BCC  3200                  C3	        $M_ID   <00032H,$M_B_00032H_MSG-$M_B_00032H_STRUC>
 0BCE  8700                  C3	
 0BD0                        C3	$M_B_00033H_STRUC LABEL BYTE
 0BD0  3300                  C3	        $M_ID   <00033H,$M_B_00033H_MSG-$M_B_00033H_STRUC>
 0BD2  9000                  C3	
 0BD4                        C3	$M_B_00029H_MSG LABEL BYTE
 0BD4  0B                    C3	        DB      $M_B_00029H_END-$M_B_00029H_MSG-1
 0BD5  4C 41 53 54 44 52     C3	        DB       "LASTDRIVE=",0
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-44
DOS - Message Retriever - DISPMSG.ASM Module                

 0BE0                        C3	$M_B_00029H_END LABEL BYTE
 0BE0                        C3	$M_B_0002AH_MSG LABEL BYTE
 0BE0  0B                    C3	        DB      $M_B_0002AH_END-$M_B_0002AH_MSG-1
 0BE1  2D 2D 2D 2D 2D 2D     C3	        DB       "----------",0
 0BEC                        C3	$M_B_0002AH_END LABEL BYTE
 0BEC                        C3	$M_B_0002BH_MSG LABEL BYTE
 0BEC  02                    C3	        DB      $M_B_0002BH_END-$M_B_0002BH_MSG-1
 0BED  20 00                 C3	        DB       " ",0
 0BEF                        C3	$M_B_0002BH_END LABEL BYTE
 0BEF                        C3	$M_B_0002CH_MSG LABEL BYTE
 0BEF  18                    C3	        DB      $M_B_0002CH_END-$M_B_0002CH_MSG-1
 0BF0  20 20 20 20 20 25     C3	        DB       "     %1      %2     %3",CR,LF
 0C08                        C3	$M_B_0002CH_END LABEL BYTE
 0C08                        C3	$M_B_0002EH_MSG LABEL BYTE
 0C08  24                    C3	        DB      $M_B_0002EH_END-$M_B_0002EH_MSG-1
 0C09  25 31 20 62 79 74     C3	        DB       "%1 bytes available extended memory",CR,LF
 0C2D                        C3	$M_B_0002EH_END LABEL BYTE
 0C2D                        C3	$M_B_0002FH_MSG LABEL BYTE
 0C2D  10                    C3	        DB      $M_B_0002FH_END-$M_B_0002FH_MSG-1
 0C2E  53 79 73 74 65 6D     C3	        DB       "System Reserved",0
 0C3E                        C3	$M_B_0002FH_END LABEL BYTE
 0C3E                        C3	$M_B_00030H_MSG LABEL BYTE
 0C3E  0B                    C3	        DB      $M_B_00030H_END-$M_B_00030H_MSG-1
 0C3F  2D 2D 20 46 72 65     C3	        DB       "-- Free --",0
 0C4A                        C3	$M_B_00030H_END LABEL BYTE
 0C4A                        C3	$M_B_00031H_MSG LABEL BYTE
 0C4A  08                    C3	        DB      $M_B_00031H_END-$M_B_00031H_MSG-1
 0C4B  50 72 6F 67 72 61     C3	        DB       "Program",0
 0C53                        C3	$M_B_00031H_END LABEL BYTE
 0C53                        C3	$M_B_00032H_MSG LABEL BYTE
 0C53  0C                    C3	        DB      $M_B_00032H_END-$M_B_00032H_MSG-1
 0C54  45 6E 76 69 72 6F     C3	        DB       "Environment",0
 0C60                        C3	$M_B_00032H_END LABEL BYTE
 0C60                        C3	$M_B_00033H_MSG LABEL BYTE
 0C60  05                    C3	        DB      $M_B_00033H_END-$M_B_00033H_MSG-1
 0C61  44 61 74 61 00        C3	        DB       "Data",0
 0C66                        C3	$M_B_00033H_END LABEL BYTE
 0C66                        C3	$M_CLS_2 PROC FAR
 0C66  0E                    C3	        PUSH    CS
 0C67  07                    C3	        POP     ES
 0C68  8D 3E 0BA8 R          C3	        LEA     DI,$M_CLASS_B_STRUC
 0C6C  81 C1 00C4            C3	        ADD     CX,$-$M_CLASS_B_STRUC
 0C70  CB                    C3	        RET
 0C71                        C3	$M_CLS_2 ENDP
 0C71                        C3	$M_CLASS_1_STRUC LABEL BYTE
 0C71  01                    C3	        $M_CLASS_ID <001H,EXPECTED_VERSION,Class_1_MessageCount>
 0C72  0400                  C3	
 0C74  01                    C3	
 0C75                        C3	$M_1_FF_STRUC LABEL BYTE
 0C75  FFFF                  C3	        $M_ID <0FFFFH,$M_1_FF_MSG-$M_1_FF_STRUC>
 0C77  0400                  C3	
 0C79                        C3	$M_1_FF_MSG LABEL BYTE
 0C79  11                    C3	        DB      $M_1_FF_END-$M_1_FF_MSG-1
 0C7A  45 78 74 65 6E 64     C3	        DB      "Extended Error %1"
 0C8B                        C3	$M_1_FF_END LABEL BYTE
 0C8B                        C3	$M_MSGSERV_1 PROC FAR
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-45
DOS - Message Retriever - DISPMSG.ASM Module                

 0C8B  0E                    C3	        PUSH    CS
 0C8C  07                    C3	        POP     ES
 0C8D  8D 3E 0C71 R          C3	        LEA     DI,$M_CLASS_1_STRUC
 0C91  83 C1 20              C3	        ADD     CX,$-$M_CLASS_1_STRUC
 0C94  CB                    C3	        RET
 0C95                        C3	$M_MSGSERV_1 Endp
 0C95                        C3	$M_CLASS_2_STRUC LABEL BYTE
 0C95  02                    C3	        $M_CLASS_ID <002H,EXPECTED_VERSION,Class_2_MessageCount>
 0C96  0400                  C3	
 0C98  01                    C3	
 0C99                        C3	$M_2_FF_STRUC LABEL BYTE
 0C99  FFFF                  C3	        $M_ID <0FFFFH,$M_2_FF_MSG-$M_2_FF_STRUC>
 0C9B  0400                  C3	
 0C9D                        C3	$M_2_FF_MSG LABEL BYTE
 0C9D  0E                    C3	        DB      $M_2_FF_END-$M_2_FF_MSG-1
 0C9E  50 61 72 73 65 20     C3	        DB      "Parse Error %1"
 0CAC                        C3	$M_2_FF_END LABEL BYTE
 0CAC                        C3	$M_MSGSERV_2 PROC FAR
 0CAC  0E                    C3	        PUSH    CS
 0CAD  07                    C3	        POP     ES
 0CAE  8D 3E 0C95 R          C3	        LEA     DI,$M_CLASS_2_STRUC
 0CB2  83 C1 1D              C3	        ADD     CX,$-$M_CLASS_2_STRUC
 0CB5  CB                    C3	        RET
 0CB6                        C3	$M_MSGSERV_2 Endp
				
				
 0CB6				data_sysloadmsg proc far
				
 0CB6  55				push	bp			; save user's base pointer
 0CB7  8B EC				mov	bp,sp			; set bp to current sp
 0CB9  57				push	di			; save some registers
 0CBA  56				push	si
				
				;	copy C inregs into proper registers
				
 0CBB  8B 7E 08				mov	di,[bp+4+4]		  ; fix di (arg 0)
				
				;-------------------------------------------------------------------
				
 0CBE  8B 45 0A				mov	ax,[di+0ah]		; load di
 0CC1  50				push	ax			; the di value from inregs is now on stack
				
 0CC2  8B 05				mov	ax,[di+00]		; get inregs.x.ax
 0CC4  8B 5D 02				mov	bx,[di+02]		; get inregs.x.bx
 0CC7  8B 4D 04				mov	cx,[di+04]		; get inregs.x.cx
 0CCA  8B 55 06				mov	dx,[di+06]		; get inregs.x.dx
 0CCD  8B 75 08				mov	si,[di+08]		; get inregs.x.si
 0CD0  5F				pop	di			; get inregs.x.di from stack
				
 0CD1  55				push	bp			; save base pointer
				
				;-------------------------------------------------------------------
				
 0CD2  9A 0100 ---- R			call	sysloadmsg		; call the message retriever
				
				;-------------------------------------------------------------------
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-46
DOS - Message Retriever - DISPMSG.ASM Module                

				
 0CD7  5D				pop	bp			; restore base pointer
 0CD8  57				push	di			; the di value from call is now on stack
 0CD9  8B 7E 0A				mov	di,[bp+6+4]		  ; fix di (arg 1)
				
 0CDC  89 05				mov	[di+00],ax		; load outregs.x.ax
 0CDE  89 5D 02				mov	[di+02],bx		; load outregs.x.bx
 0CE1  89 4D 04				mov	[di+04],cx		; load outregs.x.cx
 0CE4  89 55 06				mov	[di+06],dx		; load outregs.x.dx
 0CE7  89 75 08				mov	[di+08],si		; load outregs.x.si
				
 0CEA  9F				lahf				; get flags into ax
 0CEB  8A C4				mov	al,ah			; move into low byte
 0CED  89 45 0C				mov	[di+0ch],ax		; load outregs.x.cflag
				
 0CF0  58				pop	ax			; get di from stack
 0CF1  89 45 0A				mov	[di+0ah],ax		; load outregs.x.di
				
				;-------------------------------------------------------------------
				
 0CF4  5E				pop	si			; restore registers
 0CF5  5F				pop	di
 0CF6  8B E5				mov	sp,bp			; restore sp
 0CF8  5D				pop	bp			; restore user's bp
 0CF9  CB				ret
				
 0CFA				data_sysloadmsg endp
				
				
 0CFA				data_sysdispmsg proc far
				
 0CFA  55				push	bp			; save user's base pointer
 0CFB  8B EC				mov	bp,sp			; set bp to current sp
 0CFD  57				push	di			; save some registers
 0CFE  56				push	si
				
				;	copy C inregs into proper registers
				
 0CFF  8B 7E 08				mov	di,[bp+4+4]		  ; fix di (arg 0)
				
				;-------------------------------------------------------------------
				
 0D02  8B 45 0A				mov	ax,[di+0ah]		; load di
 0D05  50				push	ax			; the di value from inregs is now on stack
				
 0D06  8B 05				mov	ax,[di+00]		; get inregs.x.ax
 0D08  8B 5D 02				mov	bx,[di+02]		; get inregs.x.bx
 0D0B  8B 4D 04				mov	cx,[di+04]		; get inregs.x.cx
 0D0E  8B 55 06				mov	dx,[di+06]		; get inregs.x.dx
 0D11  8B 75 08				mov	si,[di+08]		; get inregs.x.si
 0D14  5F				pop	di			; get inregs.x.di from stack
				
 0D15  55				push	bp			; save base pointer
				
				;-------------------------------------------------------------------
				
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-47
DOS - Message Retriever - DISPMSG.ASM Module                

 0D16  9A 03A8 ---- R			call	sysdispmsg
				
				;-------------------------------------------------------------------
				
 0D1B  5D				pop	bp			; restore base pointer
 0D1C  57				push	di			; the di value from call is now on stack
 0D1D  8B 7E 0A				mov	di,[bp+6+4]		  ; fix di (arg 1)
				
 0D20  89 05				mov	[di+00],ax		; load outregs.x.ax
 0D22  89 5D 02				mov	[di+02],bx		; load outregs.x.bx
 0D25  89 4D 04				mov	[di+04],cx		; load outregs.x.cx
 0D28  89 55 06				mov	[di+06],dx		; load outregs.x.dx
 0D2B  89 75 08				mov	[di+08],si		; load outregs.x.si
				
 0D2E  9F				lahf				; get flags into ax
 0D2F  8A C4				mov	al,ah			; move into low byte
 0D31  89 45 0C				mov	[di+0ch],ax		; load outregs.x.cflag
				
 0D34  58				pop	ax			; get di from stack
 0D35  89 45 0A				mov	[di+0ah],ax		; load outregs.x.di
				
				;-------------------------------------------------------------------
				
 0D38  5E				pop	si			; restore registers
 0D39  5F				pop	di
 0D3A  8B E5				mov	sp,bp			; restore sp
 0D3C  5D				pop	bp			; restore user's bp
 0D3D  CB				ret
				
 0D3E				data_sysdispmsg endp
				
				
 0D3E				data_sysgetmsg	proc far
				
 0D3E  55				push	bp			; save user's base pointer
 0D3F  8B EC				mov	bp,sp			; set bp to current sp
 0D41  57				push	di			; save some registers
 0D42  56				push	si
				
				;	copy C inregs into proper registers
				
 0D43  8B 7E 08				mov	di,[bp+4+4]		  ; fix di (arg 0)
				
				;-------------------------------------------------------------------
				
 0D46  8B 45 0A				mov	ax,[di+0ah]		; load di
 0D49  50				push	ax			; the di value from inregs is now on stack
				
 0D4A  8B 05				mov	ax,[di+00]		; get inregs.x.ax
 0D4C  8B 5D 02				mov	bx,[di+02]		; get inregs.x.bx
 0D4F  8B 4D 04				mov	cx,[di+04]		; get inregs.x.cx
 0D52  8B 55 06				mov	dx,[di+06]		; get inregs.x.dx
 0D55  8B 75 08				mov	si,[di+08]		; get inregs.x.si
 0D58  5F				pop	di			; get inregs.x.di from stack
				
 0D59  55				push	bp			; save base pointer
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-48
DOS - Message Retriever - DISPMSG.ASM Module                

				
				;-------------------------------------------------------------------
				
 0D5A  9A 0264 ---- R			call	sysgetmsg		; call the message retriever
				
				;-------------------------------------------------------------------
				
 0D5F  5D				pop	bp			; restore base pointer
 0D60  57				push	di			; the di value from call is now on stack
 0D61  8B 7E 0A				mov	di,[bp+6+4]		  ; fix di (arg 1)
				
 0D64  50				push	ax			; save ax
 0D65  8C 05				mov	[di+00],es		; load segregs.es
 0D67  8C 5D 06				mov	[di+06],ds		; load outregs.ds
 0D6A  58				pop	ax			; restore ax
				
 0D6B  5F				pop	di			; restore di
 0D6C  57				push	di			; save it
 0D6D  8B 7E 0C				mov	di,[bp+8+4]		  ; fix di (arg 2)
 0D70  89 05				mov	[di+00],ax		; load outregs.x.ax
 0D72  89 5D 02				mov	[di+02],bx		; load outregs.x.bx
 0D75  89 4D 04				mov	[di+04],cx		; load outregs.x.cx
 0D78  89 55 06				mov	[di+06],dx		; load outregs.x.dx
 0D7B  89 75 08				mov	[di+08],si		; load outregs.x.si
				
 0D7E  9F				lahf				; get flags into ax
 0D7F  8A C4				mov	al,ah			; move into low byte
 0D81  89 45 0C				mov	[di+0ch],ax		; load outregs.x.cflag
				
 0D84  58				pop	ax			; get di from stack
 0D85  89 45 0A				mov	[di+0ah],ax		; load outregs.x.di
				
				;-------------------------------------------------------------------
				
 0D88  5E				pop	si			; restore registers
 0D89  5F				pop	di
 0D8A  8B E5				mov	sp,bp			; restore sp
 0D8C  5D				pop	bp			; restore user's bp
 0D8D  CB				ret
				
 0D8E				data_sysgetmsg	endp
				
				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		       ;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-49
DOS - Message Retriever - DISPMSG.ASM Module                

			     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	
			     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,
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-50
DOS - Message Retriever - DISPMSG.ASM Module                

			     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
			     C	    IF COMR
			     C	    ELSE
			     C	      PUBLIC parm
			     C	    ENDIF
			     C	  ENDIF 			       ;
			     C	ENDM				       ;
			     C					       ;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C					       ;
			     C					       ;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	
			     C	
				
 0D8E				_DATA	ends			; end code segment
				
 0000				_TEXT	SEGMENT
				
					assume cs:_TEXT
				
					public	_sysdispmsg
					public	_sysloadmsg
					public	_sysgetmsg
				
 0000				_sysdispmsg	proc	near
 0000  9A 0CFA ---- R				call	data_sysdispmsg
 0005  C3					ret
 0006				_sysdispmsg	endp
				
 0006				_sysloadmsg	proc	near
 0006  9A 0CB6 ---- R				call	data_sysloadmsg
 000B  C3					ret
 000C				_sysloadmsg	endp
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Page     1-51
DOS - Message Retriever - DISPMSG.ASM Module                

				
 000C				_sysgetmsg	proc	near
 000C  9A 0D3E ---- R				call	data_sysgetmsg
 0011  C3					ret
 0012				_sysgetmsg	endp
				
 0012				_TEXT	ENDS
					end

Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      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
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  . . . . . . . .  	005A	000A
  $M_HEADER  . . . . . . . . . .  	0000
  $M_DATE_FORMAT . . . . . . . .  	0048
  $M_CURR_SEPARA . . . . . . . .  	004A
  $M_THOU_SEPARA . . . . . . . .  	004F
  $M_DECI_SEPARA . . . . . . . .  	0051
  $M_DATE_SEPARA . . . . . . . .  	0053
  $M_TIME_SEPARA . . . . . . . .  	0055
  $M_CURR_FORMAT . . . . . . . .  	0057
  $M_SIG_DIGS_CU . . . . . . . .  	0058
  $M_TIME_FORMAT . . . . . . . .  	0059
$M_ID  . . . . . . . . . . . . .  	0004	0002
  $M_NUM . . . . . . . . . . . .  	0000
  $M_TXT_PTR . . . . . . . . . .  	0002
$M_RES_ADDRS . . . . . . . . . .  	0089	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  . . . . . . . . .  	0034
  $M_DBCS_VEC  . . . . . . . . .  	0038
  $M_HANDLE  . . . . . . . . . .  	003C
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Symbols-2


  $M_SIZE  . . . . . . . . . . .  	003E
  $M_CRLF  . . . . . . . . . . .  	003F
  $M_CLASS . . . . . . . . . . .  	0041
  $M_RETURN_ADDR . . . . . . . .  	0042
  $M_MSG_NUM . . . . . . . . . .  	0044
  $M_DIVISOR . . . . . . . . . .  	0046
  $M_TEMP_BUF  . . . . . . . . .  	0048
  $M_BUF_TERM  . . . . . . . . .  	0088
$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

Segments and Groups:

                N a m e         	Length	 Align	Combine Class

DGROUP . . . . . . . . . . . . .  	GROUP
  CONST  . . . . . . . . . . . .  	0000	WORD	PUBLIC	'CONST'
  _BSS . . . . . . . . . . . . .  	0000	WORD	PUBLIC	'BSS'
  _DATA  . . . . . . . . . . . .  	0D8E	WORD	PUBLIC	'DATA'
_TEXT  . . . . . . . . . . . . .  	0012	BYTE	PUBLIC	'CODE'

Symbols:            

                N a m e         	Type	 Value	 Attr

ACTION_39  . . . . . . . . . . .  	NUMBER	0004	
ALT_EXPECTED_VERSION . . . . . .  	NUMBER	1A05	
ALT_GOOD_DOS . . . . . . . . . .  	L NEAR	0248	_DATA
ALT_MAJOR_VERSION  . . . . . . .  	NUMBER	0005	
ALT_MINOR_VERSION  . . . . . . .  	NUMBER	001A	
AMIS_ID  . . . . . . . . . . . .  	L NEAR	00F8	_DATA
AMIS_ID_MSG  . . . . . . . . . .  	L NEAR	00FD	_DATA
AMIS_ID_MSG_END  . . . . . . . .  	L NEAR	0100	_DATA
amis_sign  . . . . . . . . . . .  	L NEAR	00E8	_DATA	Global
AMIS_SIGN_SEGMENT  . . . . . . .  	ALIAS	 DGROUP		

BELL . . . . . . . . . . . . . .  	NUMBER	0007	
BIN_HEX_BYTE . . . . . . . . . .  	NUMBER	0013	
BIN_HEX_DWORD  . . . . . . . . .  	NUMBER	0033	
BIN_HEX_TYPE . . . . . . . . . .  	NUMBER	0003	
BIN_HEX_WORD . . . . . . . . . .  	NUMBER	0023	

CHARMSG  . . . . . . . . . . . .  	NUMBER	FFFF	
CHAR_FIELD_ASCIIZ  . . . . . . .  	NUMBER	0010	
CHAR_FIELD_CHAR  . . . . . . . .  	NUMBER	0000	
CHAR_TYPE  . . . . . . . . . . .  	NUMBER	0000	
CHECK_AMIS . . . . . . . . . . .  	L NEAR	01EC	_DATA
CHECK_AMIS_DONE  . . . . . . . .  	L NEAR	0223	_DATA
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Symbols-3


CHECK_AMIS_LOOP  . . . . . . . .  	L NEAR	01F5	_DATA
CHECK_AMIS_NEXT  . . . . . . . .  	L NEAR	021E	_DATA
CHECK_AMIS_UNSUP . . . . . . . .  	L NEAR	0222	_DATA
CLASS_1_MESSAGECOUNT . . . . . .  	NUMBER	0001	
CLASS_2_MESSAGECOUNT . . . . . .  	NUMBER	0001	
CLASS_A_MESSAGECOUNT . . . . . .  	NUMBER	0023	
CLASS_B_MESSAGECOUNT . . . . . .  	NUMBER	000A	
COLON  . . . . . . . . . . . . .  	NUMBER	003A	
COMR . . . . . . . . . . . . . .  	NUMBER	0000	
COMT . . . . . . . . . . . . . .  	NUMBER	0000	
CR . . . . . . . . . . . . . . .  	NUMBER	000D	

data_sysdispmsg  . . . . . . . .  	F PROC	0CFA	_DATA	Global	Length = 0044
data_sysgetmsg . . . . . . . . .  	F PROC	0D3E	_DATA	Global	Length = 0050
data_sysloadmsg  . . . . . . . .  	F PROC	0CB6	_DATA	Global	Length = 0044
DATEMSG  . . . . . . . . . . . .  	NUMBER	0000	
DATE_MD  . . . . . . . . . . . .  	NUMBER	0014	
DATE_MDY_2 . . . . . . . . . . .  	NUMBER	0024	
DATE_MDY_4 . . . . . . . . . . .  	NUMBER	0034	
DATE_TYPE  . . . . . . . . . . .  	NUMBER	0004	
DISK_PROC  . . . . . . . . . . .  	NUMBER	0000	
DISPLAYMSG . . . . . . . . . . .  	NUMBER	0000	
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	

ERROR_CLASS_39 . . . . . . . . .  	NUMBER	0001	
EXPECTED_VERSION . . . . . . . .  	NUMBER	0004	
EXT_ERR_39 . . . . . . . . . . .  	NUMBER	0027	
EXT_ERR_CLASS  . . . . . . . . .  	NUMBER	0001	

FALSE  . . . . . . . . . . . . .  	NUMBER	0000	
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Symbols-4


FARMSG . . . . . . . . . . . . .  	NUMBER	FFFF	
FORMFD . . . . . . . . . . . . .  	NUMBER	000C	

GETMSG . . . . . . . . . . . . .  	NUMBER	0000	

HOME . . . . . . . . . . . . . .  	NUMBER	000B	

IFSFUNC_INSTALLED  . . . . . . .  	NUMBER	00FF	
IFSFUNC_INSTALL_CHECK  . . . . .  	NUMBER	0500	
IFS_GET_ERR_TEXT . . . . . . . .  	NUMBER	0502	
INPUTMSG . . . . . . . . . . . .  	NUMBER	0000	

LEFT_ALIGN . . . . . . . . . . .  	NUMBER	0000	
LF . . . . . . . . . . . . . . .  	NUMBER	000A	
LOADMSG  . . . . . . . . . . . .  	NUMBER	0000	
LOCUS_39 . . . . . . . . . . . .  	NUMBER	0001	
LOWEST_4CH_VERSION . . . . . . .  	NUMBER	0002	
LOW_NIB_MASK . . . . . . . . . .  	NUMBER	000F	

MAJOR_VERSION  . . . . . . . . .  	NUMBER	0004	
MINOR_VERSION  . . . . . . . . .  	NUMBER	0000	
MSGDATA  . . . . . . . . . . . .  	NUMBER	0000	
MSG_SER_CLASS  . . . . . . . . .  	NUMBER	0000	

NEARMSG  . . . . . . . . . . . .  	NUMBER	FFFF	
NEW_EXPECTED_VERSION . . . . . .  	NUMBER	2605	
NEW_MAJOR_VERSION  . . . . . . .  	NUMBER	0005	
NEW_MINOR_VERSION  . . . . . . .  	NUMBER	0026	
NOCHECKSTDIN . . . . . . . . . .  	NUMBER	0000	
NOCHECKSTDOUT  . . . . . . . . .  	NUMBER	0000	
NOT_EX_FAIL_EX_OPEN  . . . . . .  	NUMBER	0101	
NOVERCHECKMSG  . . . . . . . . .  	NUMBER	0000	
NO_CRIT_OPEN . . . . . . . . . .  	NUMBER	2000	
NO_HANDLE  . . . . . . . . . . .  	NUMBER	FFFF	
NO_INPUT . . . . . . . . . . . .  	NUMBER	0000	
NO_REPLACE . . . . . . . . . . .  	NUMBER	0000	
NULL . . . . . . . . . . . . . .  	NUMBER	0000	
NUMMSG . . . . . . . . . . . . .  	NUMBER	FFFF	

PARSE_ERR_CLASS  . . . . . . . .  	NUMBER	0002	

RESERVED . . . . . . . . . . . .  	NUMBER	0000	
RIGHT_ALIGN  . . . . . . . . . .  	NUMBER	0080	

SETSTDIO . . . . . . . . . . . .  	NUMBER	0000	
SGN_BIN_BYTE . . . . . . . . . .  	NUMBER	0012	
SGN_BIN_DWORD  . . . . . . . . .  	NUMBER	0032	
SGN_BIN_TYPE . . . . . . . . . .  	NUMBER	0002	
SGN_BIN_WORD . . . . . . . . . .  	NUMBER	0022	
STDAUX . . . . . . . . . . . . .  	NUMBER	0003	
STDERR . . . . . . . . . . . . .  	NUMBER	0002	
STDIN  . . . . . . . . . . . . .  	NUMBER	0000	
STDOUT . . . . . . . . . . . . .  	NUMBER	0001	
STDPRN . . . . . . . . . . . . .  	NUMBER	0004	
SUBLIST_LENGTH . . . . . . . . .  	NUMBER	000B	
SYSDISPMSG . . . . . . . . . . .  	F PROC	03A8	_DATA	Length = 0047
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Symbols-5


SYSGETMSG  . . . . . . . . . . .  	F PROC	0264	_DATA	Length = 001E
SYSLOADMSG . . . . . . . . . . .  	F PROC	0100	_DATA	Length = 00AE

TAB  . . . . . . . . . . . . . .  	NUMBER	0009	
TIMEMSG  . . . . . . . . . . . .  	NUMBER	0000	
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	
TRUE . . . . . . . . . . . . . .  	NUMBER	FFFF	

UNSGN_BIN_BYTE . . . . . . . . .  	NUMBER	0011	
UNSGN_BIN_DWORD  . . . . . . . .  	NUMBER	0031	
UNSGN_BIN_TYPE . . . . . . . . .  	NUMBER	0001	
UNSGN_BIN_WORD . . . . . . . . .  	NUMBER	0021	
UTILITY_MSG_CLASS  . . . . . . .  	NUMBER	00FF	

$MDO123  . . . . . . . . . . . .  	L NEAR	044F	_DATA
$MDO139  . . . . . . . . . . . .  	L NEAR	04B7	_DATA
$MDO145  . . . . . . . . . . . .  	L NEAR	04D9	_DATA
$MDO165  . . . . . . . . . . . .  	L NEAR	053B	_DATA
$MDO167  . . . . . . . . . . . .  	L NEAR	0545	_DATA
$MDO175  . . . . . . . . . . . .  	L NEAR	0571	_DATA
$MDO215  . . . . . . . . . . . .  	L NEAR	063C	_DATA
$MDO280  . . . . . . . . . . . .  	L NEAR	068E	_DATA
$MDO291  . . . . . . . . . . . .  	L NEAR	06B9	_DATA
$MDO301  . . . . . . . . . . . .  	L NEAR	06E7	_DATA
$MDO310  . . . . . . . . . . . .  	L NEAR	070D	_DATA
$MDO321  . . . . . . . . . . . .  	L NEAR	074F	_DATA
$MDO36 . . . . . . . . . . . . .  	L NEAR	0288	_DATA
$MDO76 . . . . . . . . . . . . .  	L NEAR	0370	_DATA
$MEN104  . . . . . . . . . . . .  	L NEAR	03EE	_DATA
$MEN107  . . . . . . . . . . . .  	L NEAR	0403	_DATA
$MEN110  . . . . . . . . . . . .  	L NEAR	0424	_DATA
$MEN119  . . . . . . . . . . . .  	L NEAR	045C	_DATA
$MEN123  . . . . . . . . . . . .  	L NEAR	045C	_DATA
$MEN128  . . . . . . . . . . . .  	L NEAR	048B	_DATA
$MEN139  . . . . . . . . . . . .  	L NEAR	04CE	_DATA
$MEN145  . . . . . . . . . . . .  	L NEAR	0532	_DATA
$MEN146  . . . . . . . . . . . .  	L NEAR	04EF	_DATA
$MEN150  . . . . . . . . . . . .  	L NEAR	052D	_DATA
$MEN154  . . . . . . . . . . . .  	L NEAR	052D	_DATA
$MEN165  . . . . . . . . . . . .  	L NEAR	0627	_DATA
$MEN167  . . . . . . . . . . . .  	L NEAR	0562	_DATA
$MEN175  . . . . . . . . . . . .  	L NEAR	058A	_DATA
$MEN180  . . . . . . . . . . . .  	L NEAR	059C	_DATA
$MEN187  . . . . . . . . . . . .  	L NEAR	05CF	_DATA
$MEN188  . . . . . . . . . . . .  	L NEAR	05BD	_DATA
$MEN192  . . . . . . . . . . . .  	L NEAR	05CF	_DATA
$MEN199  . . . . . . . . . . . .  	L NEAR	060E	_DATA
$MEN20 . . . . . . . . . . . . .  	L NEAR	01AD	_DATA
$MEN200  . . . . . . . . . . . .  	L NEAR	0606	_DATA
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Symbols-6


$MEN202  . . . . . . . . . . . .  	L NEAR	0606	_DATA
$MEN211  . . . . . . . . . . . .  	L NEAR	061B	_DATA
$MEN25 . . . . . . . . . . . . .  	L NEAR	0263	_DATA
$MEN27 . . . . . . . . . . . . .  	L NEAR	0258	_DATA
$MEN292  . . . . . . . . . . . .  	L NEAR	06CC	_DATA
$MEN307  . . . . . . . . . . . .  	L NEAR	0715	_DATA
$MEN314  . . . . . . . . . . . .  	L NEAR	0735	_DATA
$MEN317  . . . . . . . . . . . .  	L NEAR	075C	_DATA
$MEN32 . . . . . . . . . . . . .  	L NEAR	027B	_DATA
$MEN321  . . . . . . . . . . . .  	L NEAR	075A	_DATA
$MEN325  . . . . . . . . . . . .  	L NEAR	07E9	_DATA
$MEN333  . . . . . . . . . . . .  	L NEAR	07E9	_DATA
$MEN36 . . . . . . . . . . . . .  	L NEAR	02E9	_DATA
$MEN37 . . . . . . . . . . . . .  	L NEAR	02BA	_DATA
$MEN39 . . . . . . . . . . . . .  	L NEAR	02BA	_DATA
$MEN41 . . . . . . . . . . . . .  	L NEAR	02BA	_DATA
$MEN46 . . . . . . . . . . . . .  	L NEAR	02E1	_DATA
$MEN47 . . . . . . . . . . . . .  	L NEAR	02D3	_DATA
$MEN57 . . . . . . . . . . . . .  	L NEAR	0309	_DATA
$MEN60 . . . . . . . . . . . . .  	L NEAR	0316	_DATA
$MEN64 . . . . . . . . . . . . .  	L NEAR	036D	_DATA
$MEN65 . . . . . . . . . . . . .  	L NEAR	0351	_DATA
$MEN69 . . . . . . . . . . . . .  	L NEAR	0369	_DATA
$MEN76 . . . . . . . . . . . . .  	L NEAR	038D	_DATA
$MEN78 . . . . . . . . . . . . .  	L NEAR	0381	_DATA
$MEN93 . . . . . . . . . . . . .  	L NEAR	03E2	_DATA
$MEN94 . . . . . . . . . . . . .  	L NEAR	03CE	_DATA
$MEN97 . . . . . . . . . . . . .  	L NEAR	03DC	_DATA
$MIF104  . . . . . . . . . . . .  	L NEAR	03EA	_DATA
$MIF107  . . . . . . . . . . . .  	L NEAR	0400	_DATA
$MIF110  . . . . . . . . . . . .  	L NEAR	0414	_DATA
$MIF112  . . . . . . . . . . . .  	L NEAR	0424	_DATA
$MIF113  . . . . . . . . . . . .  	L NEAR	0424	_DATA
$MIF117  . . . . . . . . . . . .  	L NEAR	0429	_DATA
$MIF119  . . . . . . . . . . . .  	L NEAR	044D	_DATA
$MIF120  . . . . . . . . . . . .  	L NEAR	044B	_DATA
$MIF127  . . . . . . . . . . . .  	L NEAR	048C	_DATA
$MIF128  . . . . . . . . . . . .  	L NEAR	0489	_DATA
$MIF129  . . . . . . . . . . . .  	L NEAR	0487	_DATA
$MIF134  . . . . . . . . . . . .  	L NEAR	04AC	_DATA
$MIF135  . . . . . . . . . . . .  	L NEAR	04AC	_DATA
$MIF138  . . . . . . . . . . . .  	L NEAR	04CE	_DATA
$MIF141  . . . . . . . . . . . .  	L NEAR	04CA	_DATA
$MIF146  . . . . . . . . . . . .  	L NEAR	04EC	_DATA
$MIF150  . . . . . . . . . . . .  	L NEAR	050B	_DATA
$MIF151  . . . . . . . . . . . .  	L NEAR	0509	_DATA
$MIF154  . . . . . . . . . . . .  	L NEAR	051D	_DATA
$MIF155  . . . . . . . . . . . .  	L NEAR	051B	_DATA
$MIF158  . . . . . . . . . . . .  	L NEAR	052D	_DATA
$MIF159  . . . . . . . . . . . .  	L NEAR	052D	_DATA
$MIF166  . . . . . . . . . . . .  	L NEAR	0562	_DATA
$MIF169  . . . . . . . . . . . .  	L NEAR	055D	_DATA
$MIF173  . . . . . . . . . . . .  	L NEAR	059C	_DATA
$MIF174  . . . . . . . . . . . .  	L NEAR	059C	_DATA
$MIF175  . . . . . . . . . . . .  	L NEAR	057E	_DATA
$MIF180  . . . . . . . . . . . .  	L NEAR	0599	_DATA
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Symbols-7


$MIF187  . . . . . . . . . . . .  	L NEAR	05BF	_DATA
$MIF188  . . . . . . . . . . . .  	L NEAR	05BC	_DATA
$MIF192  . . . . . . . . . . . .  	L NEAR	05C6	_DATA
$MIF194  . . . . . . . . . . . .  	L NEAR	05CD	_DATA
$MIF199  . . . . . . . . . . . .  	L NEAR	060B	_DATA
$MIF20 . . . . . . . . . . . . .  	L NEAR	01A9	_DATA
$MIF200  . . . . . . . . . . . .  	L NEAR	05EC	_DATA
$MIF202  . . . . . . . . . . . .  	L NEAR	0606	_DATA
$MIF211  . . . . . . . . . . . .  	L NEAR	0617	_DATA
$MIF216  . . . . . . . . . . . .  	L NEAR	064A	_DATA
$MIF23 . . . . . . . . . . . . .  	L NEAR	01C3	_DATA
$MIF25 . . . . . . . . . . . . .  	L NEAR	024B	_DATA
$MIF27 . . . . . . . . . . . . .  	L NEAR	0255	_DATA
$MIF276  . . . . . . . . . . . .  	L NEAR	0674	_DATA
$MIF278  . . . . . . . . . . . .  	L NEAR	06A2	_DATA
$MIF279  . . . . . . . . . . . .  	L NEAR	06A2	_DATA
$MIF281  . . . . . . . . . . . .  	L NEAR	069E	_DATA
$MIF286  . . . . . . . . . . . .  	L NEAR	06B5	_DATA
$MIF287  . . . . . . . . . . . .  	L NEAR	06B5	_DATA
$MIF290  . . . . . . . . . . . .  	L NEAR	06DD	_DATA
$MIF292  . . . . . . . . . . . .  	L NEAR	06CB	_DATA
$MIF295  . . . . . . . . . . . .  	L NEAR	06D9	_DATA
$MIF299  . . . . . . . . . . . .  	L NEAR	06FB	_DATA
$MIF300  . . . . . . . . . . . .  	L NEAR	06FB	_DATA
$MIF302  . . . . . . . . . . . .  	L NEAR	06F7	_DATA
$MIF307  . . . . . . . . . . . .  	L NEAR	0709	_DATA
$MIF309  . . . . . . . . . . . .  	L NEAR	0715	_DATA
$MIF31 . . . . . . . . . . . . .  	L NEAR	027D	_DATA
$MIF314  . . . . . . . . . . . .  	L NEAR	0731	_DATA
$MIF317  . . . . . . . . . . . .  	L NEAR	074F	_DATA
$MIF318  . . . . . . . . . . . .  	L NEAR	074D	_DATA
$MIF32 . . . . . . . . . . . . .  	L NEAR	0279	_DATA
$MIF325  . . . . . . . . . . . .  	L NEAR	0795	_DATA
$MIF326  . . . . . . . . . . . .  	L NEAR	0787	_DATA
$MIF327  . . . . . . . . . . . .  	L NEAR	0781	_DATA
$MIF330  . . . . . . . . . . . .  	L NEAR	0793	_DATA
$MIF333  . . . . . . . . . . . .  	L NEAR	07C1	_DATA
$MIF334  . . . . . . . . . . . .  	L NEAR	07B3	_DATA
$MIF335  . . . . . . . . . . . .  	L NEAR	07AD	_DATA
$MIF338  . . . . . . . . . . . .  	L NEAR	07BF	_DATA
$MIF341  . . . . . . . . . . . .  	L NEAR	07DD	_DATA
$MIF342  . . . . . . . . . . . .  	L NEAR	07D7	_DATA
$MIF345  . . . . . . . . . . . .  	L NEAR	07E9	_DATA
$MIF349  . . . . . . . . . . . .  	L NEAR	07F5	_DATA
$MIF37 . . . . . . . . . . . . .  	L NEAR	0295	_DATA
$MIF39 . . . . . . . . . . . . .  	L NEAR	02A2	_DATA
$MIF41 . . . . . . . . . . . . .  	L NEAR	02B4	_DATA
$MIF46 . . . . . . . . . . . . .  	L NEAR	02D5	_DATA
$MIF47 . . . . . . . . . . . . .  	L NEAR	02C7	_DATA
$MIF51 . . . . . . . . . . . . .  	L NEAR	02DD	_DATA
$MIF56 . . . . . . . . . . . . .  	L NEAR	0318	_DATA
$MIF57 . . . . . . . . . . . . .  	L NEAR	0308	_DATA
$MIF60 . . . . . . . . . . . . .  	L NEAR	0310	_DATA
$MIF64 . . . . . . . . . . . . .  	L NEAR	0353	_DATA
$MIF65 . . . . . . . . . . . . .  	L NEAR	034D	_DATA
$MIF69 . . . . . . . . . . . . .  	L NEAR	0360	_DATA
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Symbols-8


$MIF71 . . . . . . . . . . . . .  	L NEAR	0369	_DATA
$MIF75 . . . . . . . . . . . . .  	L NEAR	039A	_DATA
$MIF76 . . . . . . . . . . . . .  	L NEAR	0385	_DATA
$MIF78 . . . . . . . . . . . . .  	L NEAR	037E	_DATA
$MIF86 . . . . . . . . . . . . .  	L NEAR	039A	_DATA
$MIF87 . . . . . . . . . . . . .  	L NEAR	0396	_DATA
$MIF91 . . . . . . . . . . . . .  	L NEAR	03A2	_DATA
$MIF93 . . . . . . . . . . . . .  	L NEAR	03DE	_DATA
$MIF94 . . . . . . . . . . . . .  	L NEAR	03CB	_DATA
$MIF97 . . . . . . . . . . . . .  	L NEAR	03D8	_DATA
$MLL149  . . . . . . . . . . . .  	L NEAR	04F9	_DATA
$MLL168  . . . . . . . . . . . .  	L NEAR	0554	_DATA
$MLL178  . . . . . . . . . . . .  	L NEAR	0586	_DATA
$MLL202  . . . . . . . . . . . .  	L NEAR	05FE	_DATA
$MLL214  . . . . . . . . . . . .  	L NEAR	0627	_DATA
$MSR175  . . . . . . . . . . . .  	L NEAR	059C	_DATA
$MSR76 . . . . . . . . . . . . .  	L NEAR	038E	_DATA
$MXL2  . . . . . . . . . . . . .  	L NEAR	02E9	_DATA
$MXL3  . . . . . . . . . . . . .  	L NEAR	05A9	_DATA
$MXL4  . . . . . . . . . . . . .  	L NEAR	0627	_DATA
$M_1_FF_END  . . . . . . . . . .  	L BYTE	0C8B	_DATA
$M_1_FF_MSG  . . . . . . . . . .  	L BYTE	0C79	_DATA
$M_1_FF_STRUC  . . . . . . . . .  	L BYTE	0C75	_DATA
$M_2_FF_END  . . . . . . . . . .  	L BYTE	0CAC	_DATA
$M_2_FF_MSG  . . . . . . . . . .  	L BYTE	0C9D	_DATA
$M_2_FF_STRUC  . . . . . . . . .  	L BYTE	0C99	_DATA
$M_ADDR_SZ_FAR . . . . . . . . .  	NUMBER	0004	
$M_ADDR_SZ_NEAR  . . . . . . . .  	NUMBER	0002	
$M_ADD_CRLF  . . . . . . . . . .  	N PROC	0496	_DATA	Length = 0017
$M_ALIGN_MASK  . . . . . . . . .  	NUMBER	0080	
$M_AM  . . . . . . . . . . . . .  	NUMBER	0061	
$M_A_00001H_END  . . . . . . . .  	L BYTE	089F	_DATA
$M_A_00001H_MSG  . . . . . . . .  	L BYTE	0887	_DATA
$M_A_00001H_STRUC  . . . . . . .  	L BYTE	07FB	_DATA
$M_A_0000AH_END  . . . . . . . .  	L BYTE	08A2	_DATA
$M_A_0000AH_MSG  . . . . . . . .  	L BYTE	089F	_DATA
$M_A_0000AH_STRUC  . . . . . . .  	L BYTE	07FF	_DATA
$M_A_0000BH_END  . . . . . . . .  	L BYTE	08DC	_DATA
$M_A_0000BH_MSG  . . . . . . . .  	L BYTE	08A2	_DATA
$M_A_0000BH_STRUC  . . . . . . .  	L BYTE	0803	_DATA
$M_A_0000CH_END  . . . . . . . .  	L BYTE	0916	_DATA
$M_A_0000CH_MSG  . . . . . . . .  	L BYTE	08DC	_DATA
$M_A_0000CH_STRUC  . . . . . . .  	L BYTE	0807	_DATA
$M_A_0000DH_END  . . . . . . . .  	L BYTE	093C	_DATA
$M_A_0000DH_MSG  . . . . . . . .  	L BYTE	0916	_DATA
$M_A_0000DH_STRUC  . . . . . . .  	L BYTE	080B	_DATA
$M_A_0000EH_END  . . . . . . . .  	L BYTE	0962	_DATA
$M_A_0000EH_MSG  . . . . . . . .  	L BYTE	093C	_DATA
$M_A_0000EH_STRUC  . . . . . . .  	L BYTE	080F	_DATA
$M_A_0000FH_END  . . . . . . . .  	L BYTE	097F	_DATA
$M_A_0000FH_MSG  . . . . . . . .  	L BYTE	0962	_DATA
$M_A_0000FH_STRUC  . . . . . . .  	L BYTE	0813	_DATA
$M_A_00010H_END  . . . . . . . .  	L BYTE	09A2	_DATA
$M_A_00010H_MSG  . . . . . . . .  	L BYTE	097F	_DATA
$M_A_00010H_STRUC  . . . . . . .  	L BYTE	0817	_DATA
$M_A_00011H_END  . . . . . . . .  	L BYTE	09CA	_DATA
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Symbols-9


$M_A_00011H_MSG  . . . . . . . .  	L BYTE	09A2	_DATA
$M_A_00011H_STRUC  . . . . . . .  	L BYTE	081B	_DATA
$M_A_00012H_END  . . . . . . . .  	L BYTE	09E2	_DATA
$M_A_00012H_MSG  . . . . . . . .  	L BYTE	09CA	_DATA
$M_A_00012H_STRUC  . . . . . . .  	L BYTE	081F	_DATA
$M_A_00013H_END  . . . . . . . .  	L BYTE	09F7	_DATA
$M_A_00013H_MSG  . . . . . . . .  	L BYTE	09E2	_DATA
$M_A_00013H_STRUC  . . . . . . .  	L BYTE	0823	_DATA
$M_A_00014H_END  . . . . . . . .  	L BYTE	0A1C	_DATA
$M_A_00014H_MSG  . . . . . . . .  	L BYTE	09F7	_DATA
$M_A_00014H_STRUC  . . . . . . .  	L BYTE	0827	_DATA
$M_A_00015H_END  . . . . . . . .  	L BYTE	0A38	_DATA
$M_A_00015H_MSG  . . . . . . . .  	L BYTE	0A1C	_DATA
$M_A_00015H_STRUC  . . . . . . .  	L BYTE	082B	_DATA
$M_A_00016H_END  . . . . . . . .  	L BYTE	0A53	_DATA
$M_A_00016H_MSG  . . . . . . . .  	L BYTE	0A38	_DATA
$M_A_00016H_STRUC  . . . . . . .  	L BYTE	082F	_DATA
$M_A_00017H_END  . . . . . . . .  	L BYTE	0A74	_DATA
$M_A_00017H_MSG  . . . . . . . .  	L BYTE	0A53	_DATA
$M_A_00017H_STRUC  . . . . . . .  	L BYTE	0833	_DATA
$M_A_00018H_END  . . . . . . . .  	L BYTE	0A86	_DATA
$M_A_00018H_MSG  . . . . . . . .  	L BYTE	0A74	_DATA
$M_A_00018H_STRUC  . . . . . . .  	L BYTE	0837	_DATA
$M_A_00019H_END  . . . . . . . .  	L BYTE	0A9E	_DATA
$M_A_00019H_MSG  . . . . . . . .  	L BYTE	0A86	_DATA
$M_A_00019H_STRUC  . . . . . . .  	L BYTE	083B	_DATA
$M_A_0001AH_END  . . . . . . . .  	L BYTE	0AB6	_DATA
$M_A_0001AH_MSG  . . . . . . . .  	L BYTE	0A9E	_DATA
$M_A_0001AH_STRUC  . . . . . . .  	L BYTE	083F	_DATA
$M_A_0001BH_END  . . . . . . . .  	L BYTE	0ABA	_DATA
$M_A_0001BH_MSG  . . . . . . . .  	L BYTE	0AB6	_DATA
$M_A_0001BH_STRUC  . . . . . . .  	L BYTE	0843	_DATA
$M_A_0001CH_END  . . . . . . . .  	L BYTE	0AC1	_DATA
$M_A_0001CH_MSG  . . . . . . . .  	L BYTE	0ABA	_DATA
$M_A_0001CH_STRUC  . . . . . . .  	L BYTE	0847	_DATA
$M_A_0001DH_END  . . . . . . . .  	L BYTE	0ACE	_DATA
$M_A_0001DH_MSG  . . . . . . . .  	L BYTE	0AC1	_DATA
$M_A_0001DH_STRUC  . . . . . . .  	L BYTE	084B	_DATA
$M_A_0001EH_END  . . . . . . . .  	L BYTE	0ADE	_DATA
$M_A_0001EH_MSG  . . . . . . . .  	L BYTE	0ACE	_DATA
$M_A_0001EH_STRUC  . . . . . . .  	L BYTE	084F	_DATA
$M_A_0001FH_END  . . . . . . . .  	L BYTE	0AF4	_DATA
$M_A_0001FH_MSG  . . . . . . . .  	L BYTE	0ADE	_DATA
$M_A_0001FH_STRUC  . . . . . . .  	L BYTE	0853	_DATA
$M_A_00020H_END  . . . . . . . .  	L BYTE	0B0D	_DATA
$M_A_00020H_MSG  . . . . . . . .  	L BYTE	0AF4	_DATA
$M_A_00020H_STRUC  . . . . . . .  	L BYTE	0857	_DATA
$M_A_00021H_END  . . . . . . . .  	L BYTE	0B12	_DATA
$M_A_00021H_MSG  . . . . . . . .  	L BYTE	0B0D	_DATA
$M_A_00021H_STRUC  . . . . . . .  	L BYTE	085B	_DATA
$M_A_00022H_END  . . . . . . . .  	L BYTE	0B1D	_DATA
$M_A_00022H_MSG  . . . . . . . .  	L BYTE	0B12	_DATA
$M_A_00022H_STRUC  . . . . . . .  	L BYTE	085F	_DATA
$M_A_00023H_END  . . . . . . . .  	L BYTE	0B27	_DATA
$M_A_00023H_MSG  . . . . . . . .  	L BYTE	0B1D	_DATA
$M_A_00023H_STRUC  . . . . . . .  	L BYTE	0863	_DATA
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Symbols-10


$M_A_00024H_END  . . . . . . . .  	L BYTE	0B2F	_DATA
$M_A_00024H_MSG  . . . . . . . .  	L BYTE	0B27	_DATA
$M_A_00024H_STRUC  . . . . . . .  	L BYTE	0867	_DATA
$M_A_00025H_END  . . . . . . . .  	L BYTE	0B36	_DATA
$M_A_00025H_MSG  . . . . . . . .  	L BYTE	0B2F	_DATA
$M_A_00025H_STRUC  . . . . . . .  	L BYTE	086B	_DATA
$M_A_00026H_END  . . . . . . . .  	L BYTE	0B3F	_DATA
$M_A_00026H_MSG  . . . . . . . .  	L BYTE	0B36	_DATA
$M_A_00026H_STRUC  . . . . . . .  	L BYTE	086F	_DATA
$M_A_00027H_END  . . . . . . . .  	L BYTE	0B48	_DATA
$M_A_00027H_MSG  . . . . . . . .  	L BYTE	0B3F	_DATA
$M_A_00027H_STRUC  . . . . . . .  	L BYTE	0873	_DATA
$M_A_00028H_END  . . . . . . . .  	L BYTE	0B4E	_DATA
$M_A_00028H_MSG  . . . . . . . .  	L BYTE	0B48	_DATA
$M_A_00028H_STRUC  . . . . . . .  	L BYTE	0877	_DATA
$M_A_0002DH_END  . . . . . . . .  	L BYTE	0B58	_DATA
$M_A_0002DH_MSG  . . . . . . . .  	L BYTE	0B4E	_DATA
$M_A_0002DH_STRUC  . . . . . . .  	L BYTE	087B	_DATA
$M_A_00034H_END  . . . . . . . .  	L BYTE	0B78	_DATA
$M_A_00034H_MSG  . . . . . . . .  	L BYTE	0B58	_DATA
$M_A_00034H_STRUC  . . . . . . .  	L BYTE	087F	_DATA
$M_A_00035H_END  . . . . . . . .  	L BYTE	0B9D	_DATA
$M_A_00035H_MSG  . . . . . . . .  	L BYTE	0B78	_DATA
$M_A_00035H_STRUC  . . . . . . .  	L BYTE	0883	_DATA
$M_BASE10  . . . . . . . . . . .  	NUMBER	000A	
$M_BASE16  . . . . . . . . . . .  	NUMBER	0010	
$M_BIN2ASC_REPLACE . . . . . . .  	N PROC	075E	_DATA	Length = 0099
$M_BYTE  . . . . . . . . . . . .  	NUMBER	0010	
$M_B_00029H_END  . . . . . . . .  	L BYTE	0BE0	_DATA
$M_B_00029H_MSG  . . . . . . . .  	L BYTE	0BD4	_DATA
$M_B_00029H_STRUC  . . . . . . .  	L BYTE	0BAC	_DATA
$M_B_0002AH_END  . . . . . . . .  	L BYTE	0BEC	_DATA
$M_B_0002AH_MSG  . . . . . . . .  	L BYTE	0BE0	_DATA
$M_B_0002AH_STRUC  . . . . . . .  	L BYTE	0BB0	_DATA
$M_B_0002BH_END  . . . . . . . .  	L BYTE	0BEF	_DATA
$M_B_0002BH_MSG  . . . . . . . .  	L BYTE	0BEC	_DATA
$M_B_0002BH_STRUC  . . . . . . .  	L BYTE	0BB4	_DATA
$M_B_0002CH_END  . . . . . . . .  	L BYTE	0C08	_DATA
$M_B_0002CH_MSG  . . . . . . . .  	L BYTE	0BEF	_DATA
$M_B_0002CH_STRUC  . . . . . . .  	L BYTE	0BB8	_DATA
$M_B_0002EH_END  . . . . . . . .  	L BYTE	0C2D	_DATA
$M_B_0002EH_MSG  . . . . . . . .  	L BYTE	0C08	_DATA
$M_B_0002EH_STRUC  . . . . . . .  	L BYTE	0BBC	_DATA
$M_B_0002FH_END  . . . . . . . .  	L BYTE	0C3E	_DATA
$M_B_0002FH_MSG  . . . . . . . .  	L BYTE	0C2D	_DATA
$M_B_0002FH_STRUC  . . . . . . .  	L BYTE	0BC0	_DATA
$M_B_00030H_END  . . . . . . . .  	L BYTE	0C4A	_DATA
$M_B_00030H_MSG  . . . . . . . .  	L BYTE	0C3E	_DATA
$M_B_00030H_STRUC  . . . . . . .  	L BYTE	0BC4	_DATA
$M_B_00031H_END  . . . . . . . .  	L BYTE	0C53	_DATA
$M_B_00031H_MSG  . . . . . . . .  	L BYTE	0C4A	_DATA
$M_B_00031H_STRUC  . . . . . . .  	L BYTE	0BC8	_DATA
$M_B_00032H_END  . . . . . . . .  	L BYTE	0C60	_DATA
$M_B_00032H_MSG  . . . . . . . .  	L BYTE	0C53	_DATA
$M_B_00032H_STRUC  . . . . . . .  	L BYTE	0BCC	_DATA
$M_B_00033H_END  . . . . . . . .  	L BYTE	0C66	_DATA
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Symbols-11


$M_B_00033H_MSG  . . . . . . . .  	L BYTE	0C60	_DATA
$M_B_00033H_STRUC  . . . . . . .  	L BYTE	0BD0	_DATA
$M_CHAR_ONLY . . . . . . . . . .  	NUMBER	0000	
$M_CHAR_REPLACE  . . . . . . . .  	N PROC	0736	_DATA	Length = 0028
$M_CHECKSTDIN  . . . . . . . . .  	N PROC	01C6	_DATA	Length = 0013
$M_CHECKSTDOUT . . . . . . . . .  	N PROC	01D9	_DATA	Length = 0013
$M_CLASS_1_STRUC . . . . . . . .  	L BYTE	0C71	_DATA
$M_CLASS_2_STRUC . . . . . . . .  	L BYTE	0C95	_DATA
$M_CLASS_A_STRUC . . . . . . . .  	L BYTE	07F7	_DATA
$M_CLASS_B_STRUC . . . . . . . .  	L BYTE	0BA8	_DATA
$M_CLASS_ID_SZ . . . . . . . . .  	NUMBER	0004	
$M_CLASS_NOT_EXIST . . . . . . .  	NUMBER	0000	
$M_CLS_1 . . . . . . . . . . . .  	F PROC	0B9D	_DATA	Global	Length = 000B
$M_CLS_2 . . . . . . . . . . . .  	F PROC	0C66	_DATA	Global	Length = 000B
$M_COMMA . . . . . . . . . . . .  	NUMBER	002C	
$M_CONVERT2ASC . . . . . . . . .  	N PROC	04D1	_DATA	Length = 006A
$M_CON_INP . . . . . . . . . . .  	NUMBER	-0001	
$M_COUNT . . . . . . . . . . . .  	NUMBER	0002	
$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	0002	
$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	042A	_DATA	Length = 0035
$M_DISPLAY_H_STRING  . . . . . .  	N PROC	045F	_DATA	Length = 002E
$M_DISPLAY_MESSAGE . . . . . . .  	N PROC	053B	_DATA	Length = 00F3
$M_DISPLAY_REPLACE . . . . . . .  	N PROC	065B	_DATA	Length = 00BF
$M_DISPLAY_STRING  . . . . . . .  	N PROC	03EF	_DATA	Length = 003B
$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	062E	_DATA	Length = 002D
$M_FIND_SPECIFIED_MSG  . . . . .  	N PROC	0331	_DATA	Length = 0077
$M_FIRST_THOU  . . . . . . . . .  	NUMBER	0003	
$M_FLUSH_BUF . . . . . . . . . .  	N PROC	071A	_DATA	Length = 001C
$M_GET_DBCS_VEC  . . . . . . . .  	N PROC	01AE	_DATA	Length = 0018
$M_GET_EXT_ERR_39  . . . . . . .  	N PROC	048D	_DATA	Length = 0009
$M_GET_MSG_ADDRESS . . . . . . .  	F PROC	0282	_DATA	Global	Length = 00A0
$M_ID_SZ . . . . . . . . . . . .  	NUMBER	0004	
$M_INCLUDE . . . . . . . . . . .  	NUMBER	FFFF	
$M_INDEX . . . . . . . . . . . .  	NUMBER	0008	
$M_IS_IT_DBCS  . . . . . . . . .  	N PROC	04AD	_DATA	Length = 0024
$M_LOAD  . . . . . . . . . . . .  	NUMBER	FFFF	
$M_MAX_2_YEAR  . . . . . . . . .  	NUMBER	0063	
$M_MSGDATA_ONLY  . . . . . . . .  	NUMBER	0000	
$M_MSGSERV_1 . . . . . . . . . .  	F PROC	0C8B	_DATA	Global	Length = 000A
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:14
C to Message Retriever                                      Symbols-12


$M_MSGSERV_2 . . . . . . . . . .  	F PROC	0CAC	_DATA	Global	Length = 000A
$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	0002	
$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	0089	
$M_RT  . . . . . . . . . . . . .  	L BYTE	0000	_DATA	Global
$M_SECOND_THOU . . . . . . . . .  	NUMBER	0006	
$M_SERVICE . . . . . . . . . . .  	NUMBER	0000	
$M_SET_LEN_IN_CX . . . . . . . .  	N PROC	0322	_DATA	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	
$M_VERSION_CHECK . . . . . . . .  	N PROC	0235	_DATA	Length = 002F
$M_WORD  . . . . . . . . . . . .  	NUMBER	0020	
??0000 . . . . . . . . . . . . .  	L NEAR	031A	_DATA
@CPU . . . . . . . . . . . . . .  	TEXT  0101h		
@FILENAME  . . . . . . . . . . .  	TEXT  _msgret		
@VERSION . . . . . . . . . . . .  	TEXT  510		
_sysdispmsg  . . . . . . . . . .  	N PROC	0000	_TEXT	Global	Length = 0006
_sysgetmsg . . . . . . . . . . .  	N PROC	000C	_TEXT	Global	Length = 0006
_sysloadmsg  . . . . . . . . . .  	N PROC	0006	_TEXT	Global	Length = 0006


  14206 Source  Lines
  19073 Total   Lines
    626 Symbols

  44388 + 182918 Bytes symbol space free

      0 Warning Errors
      0 Severe  Errors
