Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:15
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:15
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:15
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:15
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:15
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:15
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:15
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:15
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:15
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 <FILESYS>		;IDENTIFY THE COMPONENT 		;AN000;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:15
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  0001[                 C1	    $M_CLASS_ADDRS   DD        $M_NUM_CLS DUP(0)	     ;;AN000;; Allow pointers to specified c
				lasses
	   00000000          C1	
			 ]   C1	
			     C1	
 0030  FFFFFFFF              C1	    $M_CLS_TERM      DD        -1			     ;;AN000;;
 0034  00000000              C1	    $M_DBCS_VEC      DD        0			     ;;AN000;; Save DBCS vector
 0038  0000                  C1	    $M_HANDLE	     DW        ?			     ;;AN000;;
 003A  00                    C1	    $M_SIZE	     DB        0			     ;;AN000;;
 003B  0D 0A                 C1	    $M_CRLF	     DB        0DH,0AH			     ;;AN004;; CR LF message
 003D  00                    C1	    $M_CLASS	     DB        ?			     ;;AN004;; Saved class
 003E  0000                  C1	    $M_RETURN_ADDR   DW        ?			     ;;AN000;;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:15
C to Message Retriever                                      Page     1-11
DOS - Message Retriever - MSGSTR.INC Module                 

 0040  0000                  C1	    $M_MSG_NUM	     DW        $M_NULL			     ;;AN000;;
 0042  000A                  C1	    $M_DIVISOR	     DW        10			     ;;AN000;; Default = 10 (must be a WORD 
				for division)
 0044  0040[                 C1	    $M_TEMP_BUF      DB        $M_TEMP_BUF_SZ DUP("$")	     ;;AN000;; Temporary buffer
	   24                C1	
			 ]   C1	
			     C1	
 0084  24                    C1	    $M_BUF_TERM      DB        "$"			     ;;AN000;;
			     C1	
 0085                        C1	$M_RES_ADDRS ENDS					     ;;AN000;;
			     C1	$M_COUNTRY_INFO STRUC					     ;;AN000;; Expected Country infomation
			     C1								     ;;
 0000  0044[                 C1	    $M_HEADER	     DB       $M_RES_ADDRS_SZ-$M_TEMP_BUF_SZ-1 DUP(?) ;;AN000;; Go past first part o
				f struc
	   ??                C1	
			 ]   C1	
			     C1	
 0044  0000                  C1	    $M_DATE_FORMAT   DW       ? 			     ;;AN000;; <------- Date Format
 0046  0005[                 C1	    $M_CURR_SEPARA   DB       5 DUP(?)			     ;;AN000;;
	   ??                C1	
			 ]   C1	
			     C1	
 004B  00 00                 C1	    $M_THOU_SEPARA   DB       ?,0			     ;;AN000;; <------- Thou Separator
 004D  00 00                 C1	    $M_DECI_SEPARA   DB       ?,0			     ;;AN000;; <------- Decimal Separator
 004F  00 00                 C1	    $M_DATE_SEPARA   DB       ?,0			     ;;AN000;; <------- Date Separator
 0051  00 00                 C1	    $M_TIME_SEPARA   DB       ?,0			     ;;AN000;; <------- Time Separator
 0053  00                    C1	    $M_CURR_FORMAT   DB       ? 			     ;;AN000;;
 0054  00                    C1	    $M_SIG_DIGS_CU   DB       ? 			     ;;AN000;;
 0055  00                    C1	    $M_TIME_FORMAT   DB       ? 			     ;;AN000;; <------- Time Format
			     C1								     ;;
 0056                        C1	$M_COUNTRY_INFO ENDS					     ;;AN000;;
				
				;-------------------------------------------------------------------
				;-------------------------------------------------------------------
				
				
 0000				_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
				
 0000				_DATA	SEGMENT
				
					MSG_SERVICES <MSGDATA>
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:15
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  00000000              C1	
 0030  FFFFFFFF              C1	
 0034  00000000              C1	
 0038  0000                  C1	
 003A  00                    C1	
 003B  0001[                 C1	
 003D  00                    C1	
 003E  0000                  C1	
 0040  0000                  C1	
 0042  0A00                  C1	
 0044  0040[                 C1	
 0084  24                    C1	
 0085  4D 53 20 44 4F 53     C1		DB	"MS DOS Version 4.00 (C)Copyright 1988 Microsoft Corp"
 00B9  4C 69 63 65 6E 73     C1		DB	"Licensed Material - Property of Microsoft  "
				
				
				 public amis_sign
					even
 00E4				amis_sign:
 00E4  65 63 6D				db "ecm"
 00E7  0005[				db 5 dup (' ')
	   20			
			 ]	
				
 00EC  6C 44 4F 53			db "lDOS"
 00F0  0004[				db 4 dup (' ')
	   20			
			 ]	
				
 00F4				amis_id:			; must be directly after amis_sign
 00F4  0000				dw 0
 00F6  0000				dw 0			; sequential number
 00F8  07				db amis_id_msg_end - amis_id_msg
 00F9				amis_id_msg:
 00F9  66 69 6C 65 73 79		db "filesys"		; our id name
       73			
 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:15
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 0904 ---- 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 0925 ---- 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:15
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 08DF ---- 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  E8 01A1 R             C1		CALL	$M_GET_DBCS_VEC 			     ;;AN000;; Save the DBCS vector
 0188  E8 01B9 R             C1		CALL	$M_CHECKSTDIN				     ;;AN000;;	 Set EOF CHECK
 018B  E8 01CC R             C1		CALL	$M_CHECKSTDOUT				     ;;AN000;;	 Set Disk Full CHECK
 018E  51                    C1		PUSH	CX					     ;;AN000;;
 018F  E8 0228 R             C1		CALL	$M_VERSION_CHECK			     ;;AN000;;	 Check Version
 0192  72 08                 C1		JC $MIF20
 0194  59                    C1		  POP	  CX					     ;;AN000;;	Reset stack
 0195  5F                    C1		  POP	  DI					     ;;AN000;;	Restore REGS
 0196  07                    C1		  POP	  ES					     ;;AN000;;
 0197  5A                    C1		  POP	  DX					     ;;AN000;;
 0198  5B                    C1		  POP	  BX					     ;;AN000;;
 0199  58                    C1		  POP	  AX					     ;;AN000;;
 019A  EB 04                 C1		JMP SHORT $MEN20
 019C                        C1	$MIF20:
 019C  83 C4 0C              C1		  ADD	  SP,12 				     ;;AN000;;
 019F  F9                    C1		  STC						     ;;AN000;;	Reset carry flag
 01A0                        C1	$MEN20:
 01A0  CB                    C1		RET						     ;;AN000;;
 01A1                        C1		SYSLOADMSG ENDP 				     ;;AN000;;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:15
C to Message Retriever                                      Page     1-15
DOS - Message Retriever - $M_VERSION_CHECK Proc             

 01A1                        C1	$M_GET_DBCS_VEC PROC NEAR				     ;;AN000;;
 01A1  50                    C1		PUSH	AX					     ;;AN000;; Save character to check
 01A2  56                    C1		PUSH	SI					     ;;AN000;;
 01A3  1E                    C1		PUSH	DS					     ;;AN000;;
 01A4  B8 6300               C1		MOV	AX,DOS_GET_DBCS_INFO			     ;;AN000;; DOS function to get DBSC envi
				ronment
 01A7  CD 21                 C1		INT	21H					     ;;AN000;; Get environment pointer
 01A9  1E                    C1		PUSH	DS					     ;;AN000;; Get environment pointer
 01AA  07                    C1		POP	ES					     ;;AN000;; Get environment pointer
 01AB  1F                    C1		POP	DS					     ;;AN000;; Get environment pointer
 01AC  72 08                 C1		JC $MIF23
 01AE  89 36 0034 R          C1		  MOV	  WORD PTR $M_RT.$M_DBCS_VEC,SI 	     ;;AN000;; Save DBCS Vector
 01B2  8C 06 0036 R          C1		  MOV	  WORD PTR $M_RT.$M_DBCS_VEC+2,ES	     ;;AN000;;
 01B6                        C1	$MIF23:
 01B6  5E                    C1		POP	SI					     ;;AN000;;
 01B7  58                    C1		POP	AX					     ;;AN000;; Retrieve character to check
 01B8  C3                    C1		RET						     ;;AN000;; Return
 01B9                        C1	$M_GET_DBCS_VEC ENDP					     ;;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:15
C to Message Retriever                                      Page     1-16
DOS - Message Retriever - $M_CHECKSTDIN Proc                

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

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

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

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

 0257                        C1		SYSDISPMSG PROC FAR				     ;;AN000;;
 0257  50                    C1		PUSH	AX					     ;;AN000;; Save changed REGs
 0258  53                    C1		PUSH	BX					     ;;AN000;;
 0259  51                    C1		PUSH	CX					     ;;AN000;;
 025A  55                    C1		PUSH	BP					     ;;AN000;;
 025B  57                    C1		PUSH	DI					     ;;AN000;; Save pointer to input buffer 
				(offset)
 025C  06                    C1		PUSH	ES					     ;;AN000;; Save pointer to input buffer 
				(segment)
 025D  52                    C1		PUSH	DX					     ;;AN000;; Save Input/Class request
 025E  8B E9                 C1		MOV	BP,CX					     ;;AN000;; Use BP to hold replace count
 0260  89 1E 0038 R          C1		MOV	WORD PTR $M_RT.$M_HANDLE,BX		     ;;AN000;; Save handle
 0264  88 36 003D R          C1		MOV	BYTE PTR $M_RT.$M_CLASS,DH		     ;;AN004;; Save class
 0268  9A 050A ---- R        C1		CALL	FAR PTR $M_GET_MSG_ADDRESS		     ;;AN000;; Scan thru classes to find mes
				sage
 026D  0B C9                 C1		OR	CX,CX					     ;;AN000;; Was message found?
 026F  74 1C                 C1		JZ $MIF93
 0271  0B ED                 C1		  OR	  BP,BP 				     ;;AN000;;	 Were replacable parameters 
				requested
 0273  75 05                 C1		  JNZ $MIF94
 0275  E8 029E R             C1		    CALL    $M_DISPLAY_STRING			     ;;AN000;; No, great . . . Display messa
				ge
 0278  EB 03                 C1		  JMP SHORT $MEN94
 027A                        C1	$MIF94:
 027A  E8 03EA R             C1		    CALL    $M_DISPLAY_MESSAGE			     ;;AN000;;	 Display the message with su
				bstitutions
 027D                        C1	$MEN94:
 027D  72 08                 C1		  JC $MIF97
 027F  5A                    C1		    POP     DX					     ;;AN000;; Get Input/Class request
 0280  E8 0345 R             C1		    CALL    $M_ADD_CRLF 			     ;;AN004;; Check if we need to add the C
				R LF chars.
 0283  07                    C1		    POP     ES					     ;;AN000;; Get location of input buffer 
				(if specified)
 0284  5F                    C1		    POP     DI					     ;;AN000;;
 0285  EB 04                 C1		  JMP SHORT $MEN97
 0287                        C1	$MIF97:
 0287  83 C4 06              C1		    ADD     SP,6				     ;;AN000;;
 028A  F9                    C1		    STC 					     ;;AN000;; Reset carry flag
 028B                        C1	$MEN97:
 028B  EB 04                 C1		JMP SHORT $MEN93
 028D                        C1	$MIF93:
 028D  07                    C1		  POP	  ES					     ;;AN000;;	 Get pointer to input buffer
				 (segment)
 028E  5F                    C1		  POP	  DI					     ;;AN000;;	 Get base pointer to first s
				ublist (offset)
 028F  5A                    C1		  POP	  DX					     ;;AN000;;	 Get base pointer to first s
				ublist (segment)
 0290  F9                    C1		  STC						     ;;AN000;;	 Set carry flag
 0291                        C1	$MEN93:
 0291  72 06                 C1		JC $MIF104
 0293  5D                    C1		  POP	  BP					     ;;AN000;; No,
 0294  59                    C1		  POP	  CX					     ;;AN000;;
 0295  5B                    C1		  POP	  BX					     ;;AN000;;
 0296  58                    C1		  POP	  AX					     ;;AN000;;
 0297  EB 04                 C1		JMP SHORT $MEN104
 0299                        C1	$MIF104:
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:15
C to Message Retriever                                      Page     1-21
DOS - Message Retriever - DISPMSG.ASM Module                

 0299  83 C4 08              C1		  ADD	  SP,8					     ;;AN000;;	   Eliminate from stack
 029C  F9                    C1		  STC						     ;;AN000;;
 029D                        C1	$MEN104:
 029D  CB                    C1		RET						     ;;AN000;; Return
 029E                        C1		SYSDISPMSG ENDP 				     ;;AN000;;
 029E                        C1	$M_DISPLAY_STRING PROC NEAR				     ;;AN000;;
 029E  50                    C1		PUSH	AX					     ;;AN000;;
 029F  53                    C1		PUSH	BX					     ;;AN000;;
 02A0  52                    C1		PUSH	DX					     ;;AN000;;
 02A1  8B 1E 0038 R          C1		MOV	BX,$M_RT.$M_HANDLE			     ;;AN000;; Retrieve handle
 02A5  83 FB FF              C1		CMP	BX,$M_NO_HANDLE 			     ;;AN000;; Was there a handle specified?
 02A8  75 05                 C1		JNE $MIF107
 02AA  E8 02D9 R             C1		  CALL	  $M_DISPLAY_$_STRING			     ;;AN000;; No, display $ terminated stri
				ng
 02AD  EB 03                 C1		JMP SHORT $MEN107
 02AF                        C1	$MIF107:
 02AF  E8 030E R             C1		  CALL	  $M_DISPLAY_H_STRING			     ;;AN000;; Yes, display string to handle
 02B2                        C1	$MEN107:
 02B2  73 0F                 C1		JNC $MIF110
 02B4  B4 59                 C1		  MOV	  AH,DOS_GET_EXT_ERROR			     ;;AN000;;	Yes,
 02B6  BB 0000               C1		  MOV	  BX,DOS_GET_EXT_ERROR_BX		     ;;AN000;;	  Get extended error
 02B9  CD 21                 C1		  INT	  21H					     ;;AN000;;
 02BB  32 E4                 C1		  XOR	  AH,AH 				     ;;AN000;;	  Clear AH
 02BD  83 C4 06              C1		  ADD	  SP,6					     ;;AN000;;	  Clean up stack
 02C0  F9                    C1		  STC						     ;;AN000;;	  Flag that there was an err
				or
 02C1  EB 10                 C1		JMP SHORT $MEN110
 02C3                        C1	$MIF110:
 02C3  83 FB FF              C1		  CMP	  BX,$M_NO_HANDLE			     ;;AN000;; Was there a handle specified?
 02C6  74 0B                 C1		  JE $MIF112
 02C8  3B C1                 C1		    CMP     AX,CX				     ;AN001;	 Was it ALL written?
 02CA  74 07                 C1		    JE $MIF113
 02CC  E8 033C R             C1		      CALL    $M_GET_EXT_ERR_39 		     ;AN001;	   Set Extended error
 02CF  83 C4 06              C1		      ADD     SP,6				     ;AN001;	   Clean up stack
 02D2  F9                    C1		      STC					     ;AN001;	   Flag that there was an er
				ror
 02D3                        C1	$MIF113:
 02D3                        C1	$MIF112:
 02D3                        C1	$MEN110:
 02D3  72 03                 C1		JC $MIF117
 02D5  5A                    C1		  POP	  DX					     ;;AN000;;	Restore regs
 02D6  5B                    C1		  POP	  BX					     ;;AN000;;
 02D7  58                    C1		  POP	  AX					     ;;AN000;;
 02D8                        C1	$MIF117:
 02D8  C3                    C1		RET						     ;;AN000;; Return
 02D9                        C1	$M_DISPLAY_STRING ENDP					     ;;AN000;;
 02D9                        C1	$M_DISPLAY_$_STRING PROC NEAR				     ;;AN000;;
 02D9  1E                    C1		PUSH	DS					     ;;AN000;;
 02DA  06                    C1		PUSH	ES					     ;;AN000;;
 02DB  1F                    C1		POP	DS					     ;;AN000;; Set DS to segment of message 
				text
 02DC  83 F9 01              C1		CMP	CX,$M_SINGLE_CHAR			     ;;AN000;; Is this a single character?
 02DF  75 1B                 C1		JNE $MIF119
 02E1  B4 02                 C1		  MOV	  AH,DOS_DISP_CHAR			     ;;AN000;;	 DOS Function to display CHA
				RACTER
 02E3  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:15
C to Message Retriever                                      Page     1-22
DOS - Message Retriever - DISPMSG.ASM Module                

 02E6  CD 21                 C1		  INT	  21H					     ;;AN000;;	 Write character
 02E8  1F                    C1		  POP	  DS					     ;;AN000;; Set DS to segment of message 
				text
 02E9  8A C2                 C1		  MOV	  AL,DL 				     ;;AN000;;	 Get the character in AL
 02EB  E8 035C R             C1		  CALL	  $M_IS_IT_DBCS 			     ;;AN000;;	 Is this the first byte of a
				 DB character
 02EE  1E                    C1		  PUSH	  DS					     ;;AN000;;
 02EF  06                    C1		  PUSH	  ES					     ;;AN000;;
 02F0  1F                    C1		  POP	  DS					     ;;AN000;; Set DS to segment of message 
				text
 02F1  73 07                 C1		  JNC $MIF120
 02F3  26: 8A 55 01          C1		    MOV     DL,BYTE PTR ES:[DI]+1		     ;;AN000;; Get the next character
 02F7  CD 21                 C1		    INT     21H 				     ;;AN000;;	 Write character
 02F9  F8                    C1		    CLC 					     ;;AN000;;	 Clear the DBCS indicator
 02FA                        C1	$MIF120:
 02FA  EB 0F                 C1		JMP SHORT $MEN119
 02FC                        C1	$MIF119:
 02FC  B4 02                 C1		  MOV	  AH,DOS_DISP_CHAR			     ;;AN000;;	 DOS Function to display CHA
				RACTER
 02FE                        C1	$MDO123:
 02FE  0B C9                 C1		    OR	    CX,CX				     ;;AN002;;	 Are there any left to displ
				ay?
 0300  74 09                 C1		  JZ $MEN123
 0302  26: 8A 15             C1		    MOV     DL,BYTE PTR ES:[DI] 		     ;;AN002;;	   Get the character
 0305  CD 21                 C1		    INT     21H 				     ;;AN002;;	   Display the character
 0307  47                    C1		    INC     DI					     ;;AN002;;	   Set pointer to next chara
				cter
 0308  49                    C1		    DEC     CX					     ;;AN002;;	   Count this character
 0309  75 F3                 C1		  JNZ $MDO123
 030B                        C1	$MEN123:
 030B                        C1	$MEN119:
 030B  F8                    C1		CLC						     ;;AN000;;	 Char functions used don't r
				eturn carry as error
 030C  1F                    C1		POP	DS					     ;;AN000;;
 030D  C3                    C1		RET						     ;;AN000;;
 030E                        C1	$M_DISPLAY_$_STRING ENDP				     ;;AN000;;
 030E                        C1	$M_DISPLAY_H_STRING PROC NEAR				     ;;AN000;;
 030E  33 C0                 C1		XOR	AX,AX					     ;;AN002;; Set number of bytes written t
				o 0
 0310  0B C9                 C1		OR	CX,CX					     ;;AN002;; For performance, don't write 
				if not necessary
 0312  74 27                 C1		JZ $MIF127
 0314  1E                    C1		  PUSH	  DS					     ;;AN000;; Yes,
 0315  06                    C1		  PUSH	  ES					     ;;AN000;;
 0316  1F                    C1		  POP	  DS					     ;;AN000;;	 Set DS to segment of messag
				e text
 0317  B4 40                 C1		  MOV	  AH,DOS_WRITE_HANDLE			     ;;AN000;;	 DOS function to write to a 
				handle
 0319  8B D7                 C1		  MOV	  DX,DI 				     ;;AN000;;	 Pointer to data to write
 031B  83 F9 01              C1		  CMP	  CX,$M_SINGLE_CHAR			     ;;AN000;;	 Is this a single character?
 031E  75 18                 C1		  JNE $MIF128
 0320  CD 21                 C1		    INT     21H 				     ;;AN000;;	   Write character
 0322  1F                    C1		    POP     DS					     ;;AN000;;	     Set DS to segment of me
				ssage text
 0323  50                    C1		    PUSH    AX					     ;;AN000;;
 0324  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:15
C to Message Retriever                                      Page     1-23
DOS - Message Retriever - DISPMSG.ASM Module                

 0327  E8 035C R             C1		    CALL    $M_IS_IT_DBCS			     ;;AN000;;	     Is this the first byte 
				of a DB character
 032A  58                    C1		    POP     AX					     ;;AN000;;	     Set DS to segment of me
				ssage text
 032B  1E                    C1		    PUSH    DS					     ;;AN000;;
 032C  06                    C1		    PUSH    ES					     ;;AN000;;
 032D  1F                    C1		    POP     DS					     ;;AN000;;	     Set DS to segment of me
				ssage text
 032E  73 06                 C1		    JNC $MIF129
 0330  F8                    C1		      CLC					     ;;AN000;;	      Clear the DBCS indicat
				or
 0331  B4 40                 C1		      MOV     AH,DOS_WRITE_HANDLE		     ;;AN000;;	      DOS function to write 
				to a handle
 0333  42                    C1		      INC     DX				     ;;AN000;;	      Point to next characte
				r
 0334  CD 21                 C1		      INT     21H				     ;;AN000;;	      Write character
 0336                        C1	$MIF129:
 0336  EB 02                 C1		  JMP SHORT $MEN128
 0338                        C1	$MIF128:
 0338  CD 21                 C1		    INT     21H 				     ;;AN000;;	   Write String at DS:SI to 
				handle
 033A                        C1	$MEN128:
 033A  1F                    C1		  POP	  DS					     ;;AN000;;
 033B                        C1	$MIF127:
 033B  C3                    C1		RET						     ;;AN000;;
 033C                        C1	$M_DISPLAY_H_STRING ENDP				     ;;AN000;;
 033C                        C1	$M_GET_EXT_ERR_39 PROC NEAR				     ;AN001;
 033C  B8 0027               C1		MOV	AX,EXT_ERR_39				     ;AN001; Set AX=39
 033F  BB 0004               C1		MOV	BX,(ERROR_CLASS_39 SHR 8) + ACTION_39	     ;AN001; Set BH=1 BL=4
 0342  B5 01                 C1		MOV	CH,LOCUS_39				     ;AN001; Set CH=1
 0344  C3                    C1		RET						     ;AN001;
 0345                        C1	$M_GET_EXT_ERR_39 ENDP					     ;AN001;
 0345                        C1	$M_ADD_CRLF PROC NEAR					     ;;AN004;;
 0345  80 FE FF              C1		CMP	DH,UTILITY_MSG_CLASS			     ;;AN004;; Is it a utility message?
 0348  74 11                 C1		JE $MIF134
 034A  F6 C6 80              C1		  TEST	  DH,$M_NO_CRLF_MASK			     ;;AN004;;	 Are we to supress the CR LF
				?
 034D  75 0C                 C1		  JNZ $MIF135
 034F  1E                    C1		    PUSH    DS					     ;;AN004;;
 0350  07                    C1		    POP     ES					     ;;AN004;;	  Set ES to data segment
 0351  8D 3E 003B R          C1		    LEA     DI,$M_RT.$M_CRLF			     ;;AN004;;	  Point at CRLF message
 0355  B9 0002               C1		    MOV     CX,$M_CRLF_SIZE			     ;;AN004;;	  Set the message size
 0358  E8 029E R             C1		    CALL    $M_DISPLAY_STRING			     ;;AN004;;	  Display the CRLF
 035B                        C1	$MIF135:
 035B                        C1	$MIF134:
 035B  C3                    C1		RET						     ;;AN004;; Return
 035C                        C1	$M_ADD_CRLF ENDP					     ;;AN004;;
 035C                        C1	$M_IS_IT_DBCS PROC NEAR 				     ;;AN000;;
 035C  06                    C1		PUSH	ES					     ;;AN000;; Save Extra segment register
 035D  57                    C1		PUSH	DI					     ;;AN000;; Save SI register
 035E  C4 3E 0034 R          C1		LES	DI,$M_RT.$M_DBCS_VEC			     ;;AN000;;
 0362  0B FF                 C1		OR	DI,DI					     ;;AN000;; Was the DBCS vector set?
 0364  74 17                 C1		JZ $MIF138
 0366                        C1	$MDO139:
 0366  26: 83 3D 00          C1		    CMP     WORD PTR ES:[DI],$M_DBCS_TERM	     ;;AN000;; Is this the terminating flag?
 036A  F8                    C1		    CLC 					     ;;AN000;;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:15
C to Message Retriever                                      Page     1-24
DOS - Message Retriever - DISPMSG.ASM Module                

 036B  74 10                 C1		  JE $MEN139
 036D  26: 3A 05             C1		    CMP     AL,BYTE PTR ES:[DI] 		     ;;AN000;;	  Does the character fall in
				 the DBCS range?
 0370  72 07                 C1		    JNAE $MIF141
 0372  26: 3A 45 01          C1		    CMP     AL,BYTE PTR ES:[DI]+1		     ;;AN000;;	  Does the character fall in
				 the DBCS range?
 0376  77 01                 C1		    JNBE $MIF141
 0378  F9                    C1		      STC					     ;;AN000;;	  Yes,
 0379                        C1	$MIF141:
 0379  47                    C1		    INC     DI					     ;;AN000;;	  No,
 037A  47                    C1		    INC     DI					     ;;AN000;;	     Go to next vector
 037B  EB E9                 C1		  JMP SHORT $MDO139
 037D                        C1	$MEN139:
 037D                        C1	$MIF138:
 037D  5F                    C1		POP	DI					     ;;AN000;;
 037E  07                    C1		POP	ES					     ;;AN000;; Restore SI register
 037F  C3                    C1		RET						     ;;AN000;; Return
 0380                        C1	$M_IS_IT_DBCS ENDP					     ;;AN000;;
 0380                        C1	$M_CONVERT2ASC PROC NEAR				     ;;AN000;;
 0380  8F 06 003E R          C1		POP	[$M_RT.$M_RETURN_ADDR]			     ;;AN000;; Save Return Address
 0384  33 DB                 C1		XOR	BX,BX					     ;;AN000;; Use BP as a swapping register
 0386  93                    C1		XCHG	BX,AX					     ;;AN000;; Initialize - Low Word in BP
 0387  92                    C1		XCHG	AX,DX					     ;;AN000;;		  - High Word in AX
 0388                        C1	$MDO145:
 0388  F7 36 0042 R          C1		  DIV	  $M_RT.$M_DIVISOR			     ;;AN000;; Divide High Word by divisor
 038C  93                    C1		  XCHG	  BX,AX 				     ;;AN000;; Setup to divide Low Word usin
				g remainder
 038D  F7 36 0042 R          C1		  DIV	  $M_RT.$M_DIVISOR			     ;;AN000;; Divide Low Word by divisor
 0391  83 FA 09              C1		  CMP	  DX,9					     ;;AN000;;	Make a digit of the remainde
				r
 0394  76 05                 C1		  JNA $MIF146
 0396  80 C2 37              C1		    ADD     DL,55				     ;;AN000;;	   Make A to F ASCII
 0399  EB 03                 C1		  JMP SHORT $MEN146
 039B                        C1	$MIF146:
 039B  80 C2 30              C1		    ADD     DL,'0'				     ;;AN000;;	   Make 0 to 9 ASCII
 039E                        C1	$MEN146:
 039E  52                    C1		  PUSH	  DX					     ;;AN000;; Save the digit on the stack
 039F  41                    C1		  INC	  CX					     ;;AN000;; Count that digit
 03A0  0B C0                 C1		  OR	  AX,AX 				     ;;AN000;; Are we done?
 03A2  75 04                 C1		JNZ $MLL149
 03A4  0B DB                 C1		  OR	  BX,BX 				     ;;AN000;; AX and BX must be ZERO!!
 03A6  74 39                 C1		JZ $MEN145
 03A8                        C1	$MLL149:
 03A8  83 F9 03              C1		  CMP	  CX,$M_FIRST_THOU			     ;;AN000;; Are we at the first thousands
				 mark
 03AB  75 0D                 C1		  JNE $MIF150
 03AD  80 7C 0A 2C           C1		    CMP     $M_SL.$M_S_PAD,$M_COMMA		     ;;AN000;; Is the pad character a comma?
 03B1  75 05                 C1		    JNE $MIF151
 03B3  FF 36 004B R          C1		      PUSH    WORD PTR $M_RT.$M_THOU_SEPARA	     ;;AN000;; Insert a thousand separator
 03B7  41                    C1		      INC     CX				     ;;AN000;;
 03B8                        C1	$MIF151:
 03B8  EB 22                 C1		  JMP SHORT $MEN150
 03BA                        C1	$MIF150:
 03BA  83 F9 06              C1		    CMP     CX,$M_SECOND_THOU			     ;;AN000;;	 Are we at the first thousan
				ds mark
 03BD  75 0D                 C1		    JNE $MIF154
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:15
C to Message Retriever                                      Page     1-25
DOS - Message Retriever - DISPMSG.ASM Module                

 03BF  80 7C 0A 2C           C1		      CMP     $M_SL.$M_S_PAD,$M_COMMA		     ;;AN000;; Is the pad character a comma?
 03C3  75 05                 C1		      JNE $MIF155
 03C5  FF 36 004B R          C1			PUSH	WORD PTR $M_RT.$M_THOU_SEPARA	     ;;AN000;; Insert a thousand separator
 03C9  41                    C1			INC	CX				     ;;AN000;;
 03CA                        C1	$MIF155:
 03CA  EB 10                 C1		    JMP SHORT $MEN154
 03CC                        C1	$MIF154:
 03CC  83 F9 09              C1		      CMP     CX,$M_THIRD_THOU			     ;;AN000;;	 Are we at the first thousan
				ds mark
 03CF  75 0B                 C1		      JNE $MIF158
 03D1  80 7C 0A 2C           C1			CMP	$M_SL.$M_S_PAD,$M_COMMA 	     ;;AN000;; Is the pad character a comma?
 03D5  75 05                 C1			JNE $MIF159
 03D7  FF 36 004B R          C1			  PUSH	  WORD PTR $M_RT.$M_THOU_SEPARA      ;;AN000;; Insert a thousand separator
 03DB  41                    C1			  INC	  CX				     ;;AN000;;
 03DC                        C1	$MIF159:
 03DC                        C1	$MIF158:
 03DC                        C1	$MEN154:
 03DC                        C1	$MEN150:
 03DC  93                    C1		  XCHG	  AX,BX 				     ;;AN000;;	 Setup to divide the reduced
				 High Word
 03DD  33 D2                 C1		  XOR	  DX,DX 				     ;;AN000;;	 Reset remainder
 03DF  EB A7                 C1		JMP SHORT $MDO145
 03E1                        C1	$MEN145:
 03E1  33 D2                 C1		XOR	DX,DX					     ;;AN000;;	 Reset remainder
 03E3  33 C0                 C1		XOR	AX,AX					     ;;AN000;;	 Reset remainder
 03E5  FF 36 003E R          C1		PUSH	[$M_RT.$M_RETURN_ADDR]			     ;;AN000;;	 Restore Return Address
 03E9  C3                    C1		RET						     ;;AN000;;	 Return
 03EA                        C1	$M_CONVERT2ASC ENDP					     ;;AN000;;
 03EA                        C1	$M_DISPLAY_MESSAGE PROC NEAR				     ;;AN000;;
 03EA                        C1	$MDO165:
 03EA  33 D2                 C1		  XOR	  DX,DX 				     ;;AN000;; Set size = 0
 03EC  0B C9                 C1		  OR	  CX,CX 				     ;;AN000;; Are we finished the message y
				et?
 03EE  74 21                 C1		  JZ $MIF166
 03F0  B4 25                 C1		    MOV     AH,"%"				     ;;AN000;;	 Prepare to scan for %
 03F2  B0 00                 C1		    MOV     AL,0				     ;;AN004;;
 03F4                        C1	$MDO167:
 03F4  26: 38 25             C1		      CMP     BYTE PTR ES:[DI],AH		     ;;AN000;;	 Is this character NOT a %
 03F7  75 0A                 C1		    JNE $MLL168
 03F9  26: 38 65 01          C1		      CMP     BYTE PTR ES:[DI+1],AH		     ;;AN000;;	   Is the next character als
				o a %
 03FD  74 04                 C1		    JE $MLL168
 03FF  3A C4                 C1		      CMP     AL,AH				     ;;AN000;;	     Was the character befor
				e a %
 0401  75 0E                 C1		    JNE $MEN167
 0403                        C1	$MLL168:
 0403  26: 8A 05             C1		      MOV     AL,BYTE PTR ES:[DI]		     ;;AN004;;	 Yes, (to any of the above)
 0406  E8 035C R             C1		      CALL    $M_IS_IT_DBCS			     ;;AN004;;	   Is this character the fir
				st part of a DBCS?
 0409  73 01                 C1		      JNC $MIF169
 040B  47                    C1			INC	DI				     ;;AN004;;	     Increment past second p
				art
 040C                        C1	$MIF169:
 040C  47                    C1		      INC     DI				     ;;AN000;;	     Next character in strin
				g
 040D  42                    C1		      INC     DX				     ;;AN000;;	     Size = Size + 1
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:15
C to Message Retriever                                      Page     1-26
DOS - Message Retriever - DISPMSG.ASM Module                

 040E  49                    C1		      DEC     CX				     ;;AN000;;	     Decrement total size
 040F  75 E3                 C1		    JNZ $MDO167
 0411                        C1	$MEN167:
 0411                        C1	$MIF166:
 0411  56                    C1		  PUSH	  SI					     ;;AN000;; Save beginning of sublists
 0412  87 CA                 C1		  XCHG	  CX,DX 				     ;;AN000;; Get size of message to displa
				y (tot sz in DX)
 0414  0B ED                 C1		  OR	  BP,BP 				     ;;AN000;; Do we have any replacables to
				 do?
 0416  74 33                 C1		  JZ $MIF173
 0418  4D                    C1		    DEC     BP					     ;;AN000;;	 Decrement number of replaca
				bles
 0419  83 3E 0040 R 00       C1		    CMP     $M_RT.$M_MSG_NUM,$M_NULL		     ;;AN000;; Is this an Extended/Parse cas
				e
 041E  75 2B                 C1		    JNE $MIF174
 0420                        C1	$MDO175:
 0420  8A 44 06              C1			MOV	AL,$M_SL.$M_S_ID		     ;;AN000;;	 Get ID byte
 0423  04 30                 C1			ADD	AL,30H				     ;;AN000;;	 Convert to ASCII
 0425  26: 3A 45 01          C1			CMP	AL,BYTE PTR ES:[DI]+1		     ;;AN000;;	 Is this the right sublist?
 0429  75 02                 C1		      JNE $MIF175
 042B  EB 1E                 C1		      JMP SHORT $MSR175
 042D                        C1	$MIF175:
 042D  3C 30                 C1			CMP	AL,$M_SPECIAL_CASE		     ;;AN000;;	   Does this sublist have ID
				 = 0
 042F  75 04                 C1		      JNE $MLL178
 0431  0B D2                 C1			OR	DX,DX				     ;;AN000;;	   Are we at the end of the 
				message?
 0433  74 04                 C1		      JZ $MEN175
 0435                        C1	$MLL178:
 0435  03 34                 C1			ADD	SI,WORD PTR $M_SL.$M_S_SIZE	     ;;AN000;;	     Next SUBLIST
 0437  EB E7                 C1		      JMP SHORT $MDO175
 0439                        C1	$MEN175:
 0439  80 3E 003D R FF       C1			CMP	$M_RT.$M_CLASS,UTILITY_MSG_CLASS     ;;AN004;;	     Is it a utility message
				?
 043E  75 08                 C1			JNE $MIF180
 0440  42                    C1			  INC	  DX				     ;;AN000;;	       Remember to display C
				R,LF
 0441  42                    C1			  INC	  DX				     ;;AN000;;		 at the end of the m
				essage
 0442  49                    C1			  DEC	  CX				     ;;AN000;;	       Adjust message length
 0443  49                    C1			  DEC	  CX				     ;;AN000;;
 0444  4F                    C1			  DEC	  DI				     ;;AN000;;	       Adjust ending address
				 of message
 0445  4F                    C1			  DEC	  DI				     ;;AN000;;
 0446  EB 03                 C1			JMP SHORT $MEN180
 0448                        C1	$MIF180:
 0448  BA FFFF               C1			  MOV	  DX,-1 			     ;;AN004;;	       Set special case
 044B                        C1	$MEN180:
 044B                        C1	$MSR175:
 044B                        C1	$MIF174:
 044B                        C1	$MIF173:
 044B  57                    C1		  PUSH	  DI					     ;;AN000;; Save pointer to replace numbe
				r
 044C  2B F9                 C1		  SUB	  DI,CX 				     ;;AN000;; Determine beginning of string
 044E  E8 029E 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:15
C to Message Retriever                                      Page     1-27
DOS - Message Retriever - DISPMSG.ASM Module                

 0451  5F                    C1		  POP	  DI					     ;;AN000;; Get back pointer to replace n
				umber
 0452  59                    C1		  POP	  CX					     ;;AN000;; Clean up stack in case error
 0453  73 03                 C1		JNC $MXL3
 0455  EB 7F 90              C1		JMP $MEN165
 0458                        C1	$MXL3:
 0458  51                    C1		  PUSH	  CX					     ;;AN000;;
 0459  8B CA                 C1		  MOV	  CX,DX 				     ;;AN000;; Get the size of the rest of t
				he message
 045B  80 7C 06 00           C1		  CMP	  $M_SL.$M_S_ID,$M_SPECIAL_CASE-30H	     ;;AN000;; Is this the %0 case?
 045F  74 0D                 C1		  JE $MIF187
 0461  0B C9                 C1		    OR	    CX,CX				     ;;AN000;;	Are we finished the whole me
				ssage?
 0463  74 06                 C1		    JZ $MIF188
 0465  49                    C1		      DEC     CX				     ;;AN000;;	  Decrement total size (%)
 0466  49                    C1		      DEC     CX				     ;;AN000;;	  Decrement total size (#)
 0467  47                    C1		      INC     DI				     ;;AN000;;	  Go past %
 0468  47                    C1		      INC     DI				     ;;AN000;;	  Go past replace number
 0469  EB 01                 C1		    JMP SHORT $MEN188
 046B                        C1	$MIF188:
 046B  5E                    C1		      POP     SI				     ;;AN000;;	  Get back pointer to beginn
				ing of SUBLISTs
 046C                        C1	$MEN188:
 046C  EB 10                 C1		  JMP SHORT $MEN187
 046E                        C1	$MIF187:
 046E  0B C9                 C1		    OR	    CX,CX				     ;;AN000;;	Are we finished the whole me
				ssage?
 0470  75 03                 C1		    JNZ $MIF192
 0472  5E                    C1		      POP     SI				     ;;AN000;;	 Get back pointer to beginni
				ng of SUBLISTs
 0473  EB 09                 C1		    JMP SHORT $MEN192
 0475                        C1	$MIF192:
 0475  83 F9 FF              C1		      CMP     CX,-1				     ;;AN004;;	 Are we at the end of the me
				ssage?
 0478  75 02                 C1		      JNZ $MIF194
 047A  33 C9                 C1			XOR	CX,CX				     ;;AN004;;
 047C                        C1	$MIF194:
 047C  0B FF                 C1		      OR      DI,DI				     ;;AN004;;	Turn ZF off
 047E                        C1	$MEN192:
 047E                        C1	$MEN187:
 047E  74 56                 C1		JZ $MEN165
 0480  55                    C1		  PUSH	  BP					     ;;AN000;;	 Save the replace count
 0481  57                    C1		  PUSH	  DI					     ;;AN000;;	 Save location to complete m
				essage
 0482  06                    C1		  PUSH	  ES					     ;;AN000;;
 0483  51                    C1		  PUSH	  CX					     ;;AN000;;	 Save size of the rest of th
				e message
 0484  33 C9                 C1		  XOR	  CX,CX 				     ;;AN000;;	 Reset CX used for character
				 count
 0486  83 3E 0040 R 00       C1		  CMP	  $M_RT.$M_MSG_NUM,$M_NULL		     ;;AN000;; Is this an Extended/Parse cas
				e
 048B  75 2D                 C1		  JNE $MIF199
 048D  F6 44 07 0F           C1		    TEST    BYTE PTR $M_SL.$M_S_FLAG,NOT Char_Type AND $M_TYPE_MASK ;;AN000;;
 0491  75 08                 C1		    JNZ $MIF200
 0493  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:15
C to Message Retriever                                      Page     1-28
DOS - Message Retriever - DISPMSG.ASM Module                

 0496  E8 070B R             C1		      CALL    $M_CHAR_REPLACE			     ;;AN000;;
 0499  EB 1A                 C1		    JMP SHORT $MEN200
 049B                        C1	$MIF200:
 049B  F6 44 07 0D           C1		      TEST    BYTE PTR $M_SL.$M_S_FLAG,NOT Sgn_Bin_Type AND $M_TYPE_MASK ;;AN000;;
 049F  74 0C                 C1		      JZ $MLL202
 04A1  F6 44 07 0E           C1		      TEST    BYTE PTR $M_SL.$M_S_FLAG,NOT Unsgn_Bin_Type AND $M_TYPE_MASK ;;AN000;;
 04A5  74 06                 C1		      JZ $MLL202
 04A7  F6 44 07 0C           C1		      TEST    BYTE PTR $M_SL.$M_S_FLAG,NOT Bin_Hex_Type AND $M_TYPE_MASK ;;AN000;;
 04AB  75 08                 C1		      JNZ $MIF202
 04AD                        C1	$MLL202:
 04AD  C4 7C 02              C1			LES	DI,DWORD PTR $M_SL.$M_S_VALUE	     ;;AN000;; Load pointer to replacing par
				ameter
 04B0  E8 0733 R             C1			CALL	$M_BIN2ASC_REPLACE		     ;;AN000;;
 04B3  EB 00                 C1		      JMP SHORT $MEN202
 04B5                        C1	$MIF202:
 04B5                        C1	$MEN202:
 04B5                        C1	$MEN200:
 04B5  E8 0630 R             C1		    CALL    $M_DISPLAY_REPLACE			     ;;AN000;; Display the replace
 04B8  EB 03                 C1		  JMP SHORT $MEN199
 04BA                        C1	$MIF199:
 04BA  E8 04DD R             C1		    CALL    $M_EXT_PAR_REPLACE			     ;;AN000;;
 04BD                        C1	$MEN199:
 04BD  72 07                 C1		  JC $MIF211
 04BF  59                    C1		    POP     CX					     ;;AN000;; Get size of the rest of the m
				essage
 04C0  07                    C1		    POP     ES					     ;;AN000;; Get address of the rest of th
				e message
 04C1  5F                    C1		    POP     DI					     ;;AN000;;
 04C2  5D                    C1		    POP     BP					     ;;AN000;; Get replacment count
 04C3  5E                    C1		    POP     SI					     ;;AN000;; ELSE get address of first sub
				list structure
 04C4  EB 04                 C1		  JMP SHORT $MEN211
 04C6                        C1	$MIF211:
 04C6  83 C4 0A              C1		    ADD     SP,10				     ;;AN000;; Clean up stack if error
 04C9  F9                    C1		    STC 					     ;;AN000;;
 04CA                        C1	$MEN211:
 04CA  83 3E 0040 R 00       C1		  CMP	  $M_RT.$M_MSG_NUM,$M_NULL		     ;;AN000;; Is this an Extended/Parse cas
				e
 04CF  75 05                 C1		JNE $MLL214
 04D1  72 03                 C1		JC $MXL4
 04D3  E9 03EA R             C1		JMP $MDO165
 04D6                        C1	$MXL4:
 04D6                        C1	$MLL214:
 04D6                        C1	$MEN165:
 04D6  C7 06 0040 R 0000     C1		MOV	$M_RT.$M_MSG_NUM,0			     ;;AN000;; Reset message number to null
 04DC  C3                    C1		RET						     ;;AN000;; Return
 04DD                        C1	$M_DISPLAY_MESSAGE ENDP 				     ;;AN000;;
 04DD                        C1	$M_EXT_PAR_REPLACE PROC NEAR				     ;;AN000;;
 04DD  33 D2                 C1		XOR	DX,DX					     ;;AN000;; Prepare for get binary value 
				(HIGH)
 04DF  A1 0040 R             C1		MOV	AX,$M_RT.$M_MSG_NUM			     ;;AN000;; Prepare for get binary value 
				(LOW)
 04E2  C7 06 0042 R 000A     C1		MOV	$M_RT.$M_DIVISOR,$M_BASE10		     ;;AN000;; Set default divisor
 04E8  E8 0380 R             C1		CALL	$M_CONVERT2ASC				     ;;AN000;;
 04EB                        C1	$MDO215:
 04EB  58                    C1		  POP	  AX					     ;;AN000;;	 Get character in register
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:15
C to Message Retriever                                      Page     1-29
DOS - Message Retriever - DISPMSG.ASM Module                

 04EC  88 87 0044 R          C1		  MOV	  BYTE PTR $M_RT.$M_TEMP_BUF[BX],AL	     ;;AN000;;	Move char into the buffer
 04F0  43                    C1		  INC	  BX					     ;;AN000;;	 Increase buffer count
 04F1  83 FB 40              C1		  CMP	  BX,$M_TEMP_BUF_SZ			     ;;AN000;;	 Is buffer full?
 04F4  75 03                 C1		  JNE $MIF216
 04F6  E8 06EF R             C1		    CALL    $M_FLUSH_BUF			     ;;AN000;;	   Flush the buffer
 04F9                        C1	$MIF216:
 04F9  FE C9                 C1		  DEC	  CL					     ;;AN000;;	 Have we completed replace?
 04FB  75 EE                 C1		JNZ $MDO215
 04FD  B8 0A0D               C1		MOV	AX,$M_CR_LF				     ;;AN000;;	Move char into the buffer
 0500  89 87 0044 R          C1		MOV	WORD PTR $M_RT.$M_TEMP_BUF[BX],AX	     ;;AN000;;	Move char into the buffer
 0504  43                    C1		INC	BX					     ;;AN000;;	 Increase buffer count
 0505  43                    C1		INC	BX					     ;;AN000;;	 Increase buffer count
 0506  E8 06EF R             C1		CALL	$M_FLUSH_BUF				     ;;AN000;;	   Flush the buffer
 0509  C3                    C1		RET						     ;;AN000::
 050A                        C1	$M_EXT_PAR_REPLACE ENDP 				     ;;AN000;;
 050A                        C1		  $M_GET_MSG_ADDRESS PROC FAR			     ;;AN000;;
 050A  56                    C1		  PUSH	  SI					     ;;AN000;;
 050B  53                    C1		  PUSH	  BX					     ;;AN000;;
 050C  33 F6                 C1		  XOR	  SI,SI 				     ;;AN000;; Use SI as an index
 050E  33 C9                 C1		  XOR	  CX,CX 				     ;;AN000;; Use CX as an size
 0510                        C1	$MDO219:
 0510  80 FE FF              C1		    CMP     DH,UTILITY_MSG_CLASS		     ;;AN000;; Were utility messages request
				ed?
 0513  75 08                 C1		    JNE $MIF220
 0515  C4 BC 002C R          C1			LES	DI,DWORD PTR $M_RT.$M_CLASS_ADDRS[SI] ;;AN000;;  Get address of class
 0519  8C C3                 C1			MOV	BX,ES				     ;;AN000;
 051B  EB 25                 C1		    JMP SHORT $MEN220
 051D                        C1	$MIF220:
 051D  F6 C6 02              C1		      TEST    DH,PARSE_ERR_CLASS		     ;;AN000;;	 Were parse errors requested
				?
 0520  74 08                 C1		      JE $MIF222
 0522  C4 BC 0010 R          C1			LES	DI,DWORD PTR $M_RT.$M_PARSE_COMMAND[SI] ;;AN000;;   Get address of class
 0526  8C C3                 C1			MOV	BX,ES				     ;;AN000;
 0528  EB 18                 C1		      JMP SHORT $MEN222
 052A                        C1	$MIF222:
 052A  3D 0013               C1			CMP	AX,$M_CRIT_LO			     ;;AN000;;	   Is this a critical error?
 052D  72 0D                 C1			JNAE $MIF224
 052F  3D 0027               C1			CMP	AX,$M_CRIT_HI			     ;;AN000;;
 0532  77 08                 C1			JNBE $MIF224
 0534  C4 BC 001C R          C1			  LES	  DI,DWORD PTR $M_RT.$M_CRIT_ADDRS[SI] ;;AN000;; Get address of class
 0538  8C C3                 C1			  MOV	  BX,ES 			     ;;AN000;
 053A  EB 06                 C1			JMP SHORT $MEN224
 053C                        C1	$MIF224:
 053C  C4 BC 0000 R          C1			  LES	  DI,DWORD PTR $M_RT.$M_EXT_ERR_ADDRS[SI] ;;AN000;; Get address of class
 0540  8C C3                 C1			  MOV	  BX,ES 			     ;;AN000;
 0542                        C1	$MEN224:
 0542                        C1	$MEN222:
 0542                        C1	$MEN220:
 0542  83 FB FF              C1		    CMP     BX,$M_TERMINATING_FLAG		     ;;AN000;; Are we finished all classes?
 0545  75 16                 C1		    JNE $MIF229
 0547  80 FE FF              C1		      CMP     DH,UTILITY_MSG_CLASS		     ;;AN000;;	  Was it a UTILITY class?
 054A  75 03                 C1		      JNE $MIF230
 054C  F9                    C1			STC					     ;;AN000;;	    Set the carry flag
 054D  EB 0C                 C1		      JMP SHORT $MEN230
 054F                        C1	$MIF230:
 054F  A3 0040 R             C1			MOV	$M_RT.$M_MSG_NUM,AX		     ;;AN000;;	    Save message number
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:15
C to Message Retriever                                      Page     1-30
DOS - Message Retriever - DISPMSG.ASM Module                

 0552  B8 FFFF               C1			MOV	AX,$M_SPECIAL_MSG_NUM		     ;;AN000;;	    Set special message numb
				er
 0555  BD 0001               C1			MOV	BP,$M_ONE_REPLACE		     ;;AN000;;	    Set one replace in messa
				ge
 0558  33 F6                 C1			XOR	SI,SI				     ;;AN000;;	    Reset the SI index to st
				art again
 055A  F8                    C1			CLC					     ;;AN000;;
 055B                        C1	$MEN230:
 055B  EB 0C                 C1		    JMP SHORT $MEN229
 055D                        C1	$MIF229:
 055D  83 FB 00              C1		      CMP     BX,$M_CLASS_NOT_EXIST		     ;;AN000;;	 Does this class exist?
 0560  74 03                 C1		      JE $MIF234
 0562  E8 05B9 R             C1			CALL	$M_FIND_SPECIFIED_MSG		     ;;AN000;;	   Try to find the message
 0565                        C1	$MIF234:
 0565  83 C6 04              C1		      ADD     SI,$M_ADDR_SZ_FAR 		     ;;AN000;;	     Get next class
 0568  F8                    C1		      CLC					     ;;AN000;;
 0569                        C1	$MEN229:
 0569  72 06                 C1		  JC $MEN219
 056B  0B C9                 C1		    OR	    CX,CX				     ;;AN000;;	   Was the message found?
 056D  75 02                 C1		  JNZ $MXL5
 056F  EB 9F                 C1		  JMP $MDO219
 0571                        C1	$MXL5:
 0571                        C1	$MEN219:
 0571  9C                    C1		  PUSHF 					     ;;AN006;; Save the flag state
 0572  80 FE 01              C1		  CMP	  DH,EXT_ERR_CLASS			     ;;AN006;; Was an extended error request
				ed?
 0575  75 29                 C1		  JNE $MIF239
 0577  52                    C1		    PUSH    DX					     ;;AN006;;	Save all needed registers
 0578  55                    C1		    PUSH    BP					     ;;AN006;;
 0579  51                    C1		    PUSH    CX					     ;;AN006;;
 057A  06                    C1		    PUSH    ES					     ;;AN006;;
 057B  57                    C1		    PUSH    DI					     ;;AN006;;
 057C  50                    C1		    PUSH    AX					     ;;AN006;;
 057D  B8 0500               C1		    MOV     AX,IFSFUNC_INSTALL_CHECK		     ;;AN006;;	Check if IFSFUNC is installe
				d
 0580  CD 2F                 C1		    INT     2FH 				     ;;AN006;;
 0582  3C FF                 C1		    CMP     AL,IFSFUNC_INSTALLED		     ;;AN006;;	Is it installed?
 0584  58                    C1		    POP     AX					     ;;AN006;;	Restore msg number
 0585  75 09                 C1		    JNE $MIF240
 0587  8B D8                 C1		      MOV     BX,AX				     ;;AN006;;	  BX is the extended error n
				umber
 0589  B8 0502               C1		      MOV     AX,IFS_GET_ERR_TEXT		     ;;AN006;;	  AX is the muliplex number
 058C  CD 2F                 C1		      INT     2FH				     ;;AN006;;	  Call IFSFUNC
 058E  EB 01                 C1		    JMP SHORT $MEN240
 0590                        C1	$MIF240:
 0590  F9                    C1		      STC					     ;;AN006;;	  Carry conditon
 0591                        C1	$MEN240:
 0591  73 05                 C1		    JNC $MIF243
 0593  5F                    C1		      POP     DI				     ;;AN006;;	No,
 0594  07                    C1		      POP     ES				     ;;AN006;;	 Restore old pointer
 0595  59                    C1		      POP     CX				     ;;AN006;;
 0596  EB 06                 C1		    JMP SHORT $MEN243
 0598                        C1	$MIF243:
 0598  83 C4 06              C1		      ADD     SP,6				     ;;AN006;;	 Throw away old pointer
 059B  E8 05AA R             C1		      CALL    $M_SET_LEN_IN_CX			     ;;AN006;;	 Get the length of the ASCII
				Z string
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:15
C to Message Retriever                                      Page     1-31
DOS - Message Retriever - DISPMSG.ASM Module                

 059E                        C1	$MEN243:
 059E  5D                    C1		    POP     BP					     ;;AN006;;	Restore other Regs
 059F  5A                    C1		    POP     DX					     ;;AN006;;
 05A0                        C1	$MIF239:
 05A0  EB 01                 C2		   JMP	   $+3 
 05A2                        C2	??0000   LABEL   NEAR 
 05A2  CF                    C2		   IRET 
 05A3  0E                    C2		   PUSH    CS 
 05A4  E8 05A2 R             C2		   CALL    ??0000 
 05A7  5B                    C1		  POP	  BX					     ;;AN000;;
 05A8  5E                    C1		  POP	  SI					     ;;AN000;;
 05A9  CB                    C1		  RET						     ;;AN000;; Return ES:DI pointing to the 
				message
 05AA                        C1	$M_GET_MSG_ADDRESS ENDP 				     ;;
 05AA                        C1	$M_SET_LEN_IN_CX PROC NEAR				     ;;
 05AA  57                    C1		  PUSH	  DI					     ;;AN006;; Save position
 05AB  50                    C1		  PUSH	  AX					     ;;AN006;;
 05AC  B9 FFFF               C1		  MOV	  CX,-1 				     ;;AN006;; Set CX for decrements
 05AF  32 C0                 C1		  XOR	  AL,AL 				     ;;AN006;; Prepare compare register
 05B1  F2/ AE                C1		  REPNE   SCASB 				     ;;AN006;; Scan for zero
 05B3  F7 D1                 C1		  NOT	  CX					     ;;AN006;; Change decrement into number
 05B5  49                    C1		  DEC	  CX					     ;;AN006;; Don't include the zero
 05B6  58                    C1		  POP	  AX					     ;;AN006;;
 05B7  5F                    C1		  POP	  DI					     ;;AN006;; Restore position
 05B8  C3                    C1		  RET						     ;;AN006;;
 05B9                        C1	$M_SET_LEN_IN_CX ENDP					     ;;
 05B9                        C1	$M_FIND_SPECIFIED_MSG PROC NEAR 			     ;;AN000;;
 05B9  83 FB 01              C1		  CMP	  BX,1					     ;;AN004;;	Do we have an address to CAL
				L?
 05BC  75 1D                 C1		  JNE $MIF247
 05BE  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?
 05C3  74 16                 C1		  JE $MIF247
 05C5  3D FFFF               C1		    CMP     AX,$M_SPECIAL_MSG_NUM		     ;;AN004;; Are we displaying a default E
				xt Err?
 05C8  75 0B                 C1		    JNE $MIF248
 05CA  50                    C1		      PUSH    AX				     ;;AN004;;	 Reset the special message n
				umber
 05CB  A1 0040 R             C1		      MOV     AX,$M_RT.$M_MSG_NUM		     ;;AN004;;	 Get the old message number
 05CE  FF 1E 0028 R          C1		      CALL    DWORD PTR $M_RT.$M_DISK_PROC_ADDR      ;;AN004;;	 Call the READ_DISK_PROC to 
				get error text
 05D2  58                    C1		      POP     AX				     ;;AN004;;	 Reset the special message n
				umber
 05D3  EB 04                 C1		    JMP SHORT $MEN248
 05D5                        C1	$MIF248:
 05D5  FF 1E 0028 R          C1		      CALL    DWORD PTR $M_RT.$M_DISK_PROC_ADDR      ;;AN004;;	 Call the READ_DISK_PROC to 
				get error text
 05D9                        C1	$MEN248:
 05D9  EB 1A                 C1		  JMP SHORT $MEN247
 05DB                        C1	$MIF247:
 05DB  33 C9                 C1		    XOR     CX,CX				     ;;AN002;;	 CX = 0 will allow us to
 05DD  80 FE FF              C1		    CMP     DH,UTILITY_MSG_CLASS		     ;;AN001;;
 05E0  74 06                 C1		    JE $MIF252
 05E2  26: 8A 4D 03          C1		      MOV     CL,BYTE PTR ES:[DI].$M_NUM_CLS_MSG     ;;AN001;;	 Get number of messages in c
				lass
 05E6  EB 09                 C1		    JMP SHORT $MEN252
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:15
C to Message Retriever                                      Page     1-32
DOS - Message Retriever - DISPMSG.ASM Module                

 05E8                        C1	$MIF252:
 05E8  26: 38 35             C1		      CMP     BYTE PTR ES:[DI].$M_CLASS_ID,DH	     ;;AN002;; Check if class still exists a
				t
 05EB  75 04                 C1		      JNE $MIF254
 05ED  26: 8A 4D 03          C1			MOV	CL,BYTE PTR ES:[DI].$M_NUM_CLS_MSG   ;;AN000;;	   Get number of messages in
				 class
 05F1                        C1	$MIF254:
 05F1                        C1	$MEN252:
 05F1  83 C7 04              C1		    ADD     DI,$M_CLASS_ID_SZ			     ;;AN000;;	   Point past the class head
				er
 05F4  F9                    C1		    STC 					     ;;AN004;;	 Flag that we haven't found 
				anything yet
 05F5                        C1	$MEN247:
 05F5  73 2B                 C1		  JNC $MIF258
 05F7  F8                    C1		    CLC 					     ;;AN004;; No, reset carry
 05F8                        C1	$MDO259:
 05F8  0B C9                 C1		      OR      CX,CX				     ;;AN000;;	  Do we have any to check?
 05FA  74 19                 C1		    JZ $MEN259
 05FC  80 FE FF              C1		      CMP     DH,UTILITY_MSG_CLASS		     ;;AN001;;
 05FF  74 05                 C1		      JE $MIF261
 0601  26: 3B 05             C1			CMP	AX,WORD PTR ES:[DI].$M_NUM	     ;;AN001;; Is this the message requested
				?
 0604  EB 03                 C1		      JMP SHORT $MEN261
 0606                        C1	$MIF261:
 0606  26: 3B 05             C1			CMP	AX,WORD PTR ES:[DI].$M_NUM	     ;;AN000;; Is this the message requested
				?
 0609                        C1	$MEN261:
 0609  75 02                 C1		    JNE $MIF259
 060B  EB 09                 C1		    JMP SHORT $MSR259
 060D                        C1	$MIF259:
 060D  49                    C1		      DEC     CX				     ;;AN000;;	  No, well do we have more t
				o check?
 060E  74 05                 C1		    JZ $MEN259
 0610  83 C7 04              C1		      ADD     DI,$M_ID_SZ			     ;;AN000;;	     Yes, skip past msg head
				er
 0613  EB E3                 C1		    JMP SHORT $MDO259
 0615                        C1	$MEN259:
 0615  F9                    C1		      STC					     ;;AN000;;
 0616                        C1	$MSR259:
 0616  72 0A                 C1		    JC $MIF269
 0618  80 FE FF              C1		      CMP     DH,UTILITY_MSG_CLASS		     ;;AN001;;	 Yes, is it a utility messag
				e?
 061B  F8                    C1		      CLC					     ;;AN001;;
 061C  75 00                 C1		      JNE $MIF270
 061E                        C1	$MIF270:
 061E  26: 03 7D 02          C1		      ADD     DI,WORD PTR ES:[DI].$M_TXT_PTR	     ;;AN000;; Prepare ES:DI pointing to the
				 message
 0622                        C1	$MIF269:
 0622                        C1	$MIF258:
 0622  72 06                 C1		  JC $MIF274
 0624  32 ED                 C1		    XOR     CH,CH				     ;;AN000;;
 0626  26: 8A 0D             C1		    MOV     CL,BYTE PTR ES:[DI] 		     ;;AN000;;	 Move size into CX
 0629  47                    C1		    INC     DI					     ;;AN000;;	 Increment past length
 062A                        C1	$MIF274:
 062A  C6 06 003A R 00       C1		  MOV	  $M_RT.$M_SIZE,$M_NULL 		     ;;AN004;; Reset variable
 062F  C3                    C1		  RET						     ;;AN000;; Return
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:15
C to Message Retriever                                      Page     1-33
DOS - Message Retriever - DISPMSG.ASM Module                

 0630                        C1	$M_FIND_SPECIFIED_MSG ENDP				     ;;AN000;;
 0630                        C1	$M_DISPLAY_REPLACE PROC NEAR				     ;;AN000;;
 0630  33 DB                 C1		  XOR	  BX,BX 				     ;;AN000;; Use BX for buffer count
 0632  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)
 0636  75 11                 C1		  JNE $MIF276
 0638  C7 87 0044 R 2D20     C1		    MOV     WORD PTR $M_RT.$M_TEMP_BUF[BX],$M_SPACE_HYP ;;AN000;; Move in a " -"
 063E  43                    C1		    INC     BX					     ;;AN000;;	   Increment count
 063F  43                    C1		    INC     BX					     ;;AN000;;	   Increment count
 0640  C6 87 0044 R 20       C1		    MOV     BYTE PTR $M_RT.$M_TEMP_BUF[BX],$M_SPACE  ;;AN000;;	   Move in a " "
 0645  43                    C1		    INC     BX					     ;;AN000;;	   Increment count
 0646  E8 06EF R             C1		    CALL    $M_FLUSH_BUF			     ;;AN000;;	   Write out " - " to prepar
				e for special case
 0649                        C1	$MIF276:
 0649  5D                    C1		  POP	  BP					     ;;AN000;; Remember the return address
 064A  33 DB                 C1		  XOR	  BX,BX 				     ;;AN000;; Use BX for buffer count
 064C  33 D2                 C1		  XOR	  DX,DX 				     ;;AN000;; Use DX for count of parms tak
				en off the stack
 064E  88 0E 003A R          C1		  MOV	  $M_RT.$M_SIZE,CL			     ;;AN000;; Save size to later clear stac
				k
 0652  8A 44 09              C1		  MOV	  AL,BYTE PTR $M_SL.$M_S_MINW		     ;;AN000;; Get the minimum width
 0655  3A C1                 C1		  CMP	  AL,CL 				     ;;AN000;; Do we need pad chars added?
 0657  76 1E                 C1		  JNA $MIF278
 0659  2A C1                 C1		    SUB     AL,CL				     ;;AN000;;	 Calculate how many pad char
				s are needed.
 065B  8A F0                 C1		    MOV     DH,AL				     ;;AN000;;	 Save the number of pad char
				acters
 065D  F6 44 07 80           C1		    TEST    BYTE PTR $M_SL.$M_S_FLAG,Right_Align     ;;AN000;;	 Was replaceable parm to be 
				right aligned?
 0661  74 14                 C1		    JZ $MIF279
 0663                        C1	$MDO280:
 0663  8A 44 0A              C1			MOV	AL,BYTE PTR $M_SL.$M_S_PAD	     ;;AN000;;
 0666  88 87 0044 R          C1			MOV	BYTE PTR $M_RT.$M_TEMP_BUF[BX],AL    ;;AN000;;	   Move in a pad char
 066A  43                    C1			INC	BX				     ;;AN000;;
 066B  83 FB 40              C1			CMP	BX,$M_TEMP_BUF_SZ		     ;;AN000;;	   Is buffer full?
 066E  75 03                 C1			JNE $MIF281
 0670  E8 06EF R             C1			  CALL	  $M_FLUSH_BUF			     ;;AN000;;	     Flush the buffer
 0673                        C1	$MIF281:
 0673  FE CE                 C1			DEC	DH				     ;;AN000;;	   Have we filled with enoug
				h pad chars?
 0675  75 EC                 C1		      JNZ $MDO280
 0677                        C1	$MIF279:
 0677                        C1	$MIF278:
 0677  80 7C 08 00           C1		  CMP	  BYTE PTR $M_SL.$M_S_MAXW,$M_UNLIM_W	     ;;AN000;; Is maximum width unlimited?
 067B  74 0D                 C1		  JE $MIF286
 067D  38 4C 08              C1		    CMP     BYTE PTR $M_SL.$M_S_MAXW,CL 	     ;;AN000;; Will we exceed maximum width?
 0680  73 08                 C1		    JNB $MIF287
 0682  2A 4C 08              C1		      SUB     CL,BYTE PTR $M_SL.$M_S_MAXW	     ;;AN000;;	 Calculate how many extra ch
				ars
 0685  8A D1                 C1		      MOV     DL,CL				     ;;AN000;;	 Remember how many chars to 
				pop off
 0687  8A 4C 08              C1		      MOV     CL,BYTE PTR $M_SL.$M_S_MAXW	     ;;AN000;;	 Set new string length
 068A                        C1	$MIF287:
 068A                        C1	$MIF286:
 068A  0B C9                 C1		  OR	  CX,CX 				     ;;AN000;;
 068C  74 24                 C1		  JZ $MIF290
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:15
C to Message Retriever                                      Page     1-34
DOS - Message Retriever - DISPMSG.ASM Module                

 068E                        C1	$MDO291:
 068E  F6 44 07 0F           C1		      TEST    BYTE PTR $M_SL.$M_S_FLAG,NOT Char_Type AND $M_TYPE_MASK ;;AN000;;
 0692  75 0C                 C1		      JNZ $MIF292
 0694  F6 44 07 10           C1		      TEST    $M_SL.$M_S_FLAG,Char_field_ASCIIZ AND $M_SIZE_MASK ;  Is this replace a ASCIIZ
				 string?
 0698  74 06                 C1		      JZ $MIF292
 069A  26: 8A 05             C1			MOV	AL,BYTE PTR ES:[DI]		     ;;AN000;;	 Get first character from st
				ring
 069D  47                    C1			INC	DI				     ;;AN000;;	 Next character in string
 069E  EB 01                 C1		      JMP SHORT $MEN292
 06A0                        C1	$MIF292:
 06A0  58                    C1			POP	AX				     ;;AN000;;	 Get character in register
 06A1                        C1	$MEN292:
 06A1  88 87 0044 R          C1		      MOV     BYTE PTR $M_RT.$M_TEMP_BUF[BX],AL      ;;AN000;;	Move char into the buffer
 06A5  43                    C1		      INC     BX				     ;;AN000;;	 Increase buffer count
 06A6  83 FB 40              C1		      CMP     BX,$M_TEMP_BUF_SZ 		     ;;AN000;;	 Is buffer full?
 06A9  75 03                 C1		      JNE $MIF295
 06AB  E8 06EF R             C1			CALL	$M_FLUSH_BUF			     ;;AN000;;	   Flush the buffer
 06AE                        C1	$MIF295:
 06AE  FE C9                 C1		      DEC     CL				     ;;AN000;;	 Have we completed replace?
 06B0  75 DC                 C1		    JNZ $MDO291
 06B2                        C1	$MIF290:
 06B2  F6 44 07 80           C1		  TEST	  BYTE PTR $M_SL.$M_S_FLAG,Right_Align	     ;;AN000;;	 Was replaceable parm to be 
				left aligned?
 06B6  75 18                 C1		  JNZ $MIF299
 06B8  0A F6                 C1		    OR	    DH,DH				     ;;AN000;;	 Do we need pad chars added?
 06BA  74 14                 C1		    JZ $MIF300
 06BC                        C1	$MDO301:
 06BC  8A 44 0A              C1			MOV	AL,BYTE PTR $M_SL.$M_S_PAD	     ;;AN000;;
 06BF  88 87 0044 R          C1			MOV	BYTE PTR $M_RT.$M_TEMP_BUF[BX],AL    ;;AN000;;	   Move in a pad char
 06C3  43                    C1			INC	BX				     ;;AN000;;
 06C4  83 FB 40              C1			CMP	BX,$M_TEMP_BUF_SZ		     ;;AN000;;	   Is buffer full?
 06C7  75 03                 C1			JNE $MIF302
 06C9  E8 06EF R             C1			  CALL	  $M_FLUSH_BUF			     ;;AN000;;	     Flush the buffer
 06CC                        C1	$MIF302:
 06CC  FE CE                 C1			DEC	DH				     ;;AN000;;	   Have we filled with enoug
				h pad chars?
 06CE  75 EC                 C1		      JNZ $MDO301
 06D0                        C1	$MIF300:
 06D0                        C1	$MIF299:
 06D0  F6 44 07 0F           C1		  TEST	  BYTE PTR $M_SL.$M_S_FLAG,NOT Char_Type AND $M_TYPE_MASK ;;AN000;;
 06D4  75 08                 C1		  JNZ $MIF307
 06D6  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?
 06DA  74 02                 C1		  JZ $MIF307
 06DC  EB 0C                 C1		  JMP SHORT $MEN307
 06DE                        C1	$MIF307:
 06DE  0A D2                 C1		    OR	    DL,DL				     ;;AN000;;
 06E0  74 08                 C1		    JE $MIF309
 06E2                        C1	$MDO310:
 06E2  8F 06 003E R          C1			POP	[$M_RT.$M_RETURN_ADDR]		     ;;AN000;;	 Clean Up stack using spare 
				variable
 06E6  FE CA                 C1			DEC	DL				     ;;AN000;;	 Are we done?
 06E8  75 F8                 C1		      JNZ $MDO310
 06EA                        C1	$MIF309:
 06EA                        C1	$MEN307:
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:15
C to Message Retriever                                      Page     1-35
DOS - Message Retriever - DISPMSG.ASM Module                

 06EA  E8 06EF R             C1		  CALL	  $M_FLUSH_BUF				     ;;AN000;;	     Flush the buffer for th
				e final time
 06ED  55                    C1		  PUSH	  BP					     ;;AN000;; Restore the return address
 06EE  C3                    C1		  RET						     ;;AN000;;
 06EF                        C1	$M_DISPLAY_REPLACE ENDP 				     ;;AN000;;
 06EF                        C1	$M_FLUSH_BUF PROC NEAR					     ;;AN000;;
 06EF  51                    C1		  PUSH	  CX					     ;;AN000;; Save changed regs
 06F0  06                    C1		  PUSH	  ES					     ;;AN000;;
 06F1  57                    C1		  PUSH	  DI					     ;;AN000;;
 06F2  1E                    C1		  PUSH	  DS					     ;;AN000;; Set ES pointing to buffer
 06F3  07                    C1		  POP	  ES					     ;;AN000;;
 06F4  8B CB                 C1		  MOV	  CX,BX 				     ;;AN000;; Set number of bytes to displa
				y
 06F6  33 DB                 C1		  XOR	  BX,BX 				     ;;AN000;; Reset buffer counter
 06F8  8D 3E 0044 R          C1		  LEA	  DI,$M_RT.$M_TEMP_BUF			     ;;AN000;; Reset buffer location pointer
 06FC  E8 029E R             C1		  CALL	  $M_DISPLAY_STRING			     ;;AN000;; Display the buffer
 06FF  72 05                 C1		  JC $MIF314
 0701  5F                    C1		    POP     DI					     ;;AN000;; No, Restore changed regs
 0702  07                    C1		    POP     ES					     ;;AN000;;
 0703  59                    C1		    POP     CX					     ;;AN000;;
 0704  EB 04                 C1		  JMP SHORT $MEN314
 0706                        C1	$MIF314:
 0706  83 C4 06              C1		    ADD     SP,6				     ;;AN000;;	Fix stack
 0709  F9                    C1		    STC 					     ;;AN000;;
 070A                        C1	$MEN314:
 070A  C3                    C1		  RET						     ;;AN000;; Return
 070B                        C1	$M_FLUSH_BUF ENDP					     ;;AN000;;
 070B                        C1	$M_CHAR_REPLACE PROC NEAR				     ;;AN000;;
 070B  5D                    C1		    POP     BP					     ;;AN000;; Save return address
 070C  F6 44 07 30           C1		    TEST    $M_SL.$M_S_FLAG,NOT Char_Field_Char AND $M_SIZE_MASK ;;AN000;; Was Character spe
				cified?
 0710  75 12                 C1		    JNZ $MIF317
 0712  26: 8A 05             C1		      MOV     AL,BYTE PTR ES:[DI]		     ;;AN000;;	 Get the character
 0715  50                    C1		      PUSH    AX				     ;;AN000;;	 Put it on the stack
 0716  41                    C1		      INC     CX				     ;;AN000;;	 Increase the count
 0717  E8 035C R             C1		      CALL    $M_IS_IT_DBCS			     ;;AN000;;	 Is this the first byte of a
				 DB character
 071A  73 06                 C1		      JNC $MIF318
 071C  26: 8A 45 01          C1			MOV	AL,BYTE PTR ES:[DI]+1		     ;;AN000;;	   Get the next character
 0720  50                    C1			PUSH	AX				     ;;AN000;;	   Put it on the stack
 0721  F8                    C1			CLC					     ;;AN000;;	   Clear the carry
 0722                        C1	$MIF318:
 0722  EB 0D                 C1		    JMP SHORT $MEN317
 0724                        C1	$MIF317:
 0724                        C1	$MDO321:
 0724  26: 8A 05             C1			MOV	AL,BYTE PTR ES:[DI]		     ;;AN000;;	 Get the character
 0727  0A C0                 C1			OR	AL,AL				     ;;AN000;;	 Is it the NULL?
 0729  74 04                 C1		      JZ $MEN321
 072B  47                    C1			INC	DI				     ;;AN000;;	   Next character
 072C  41                    C1			INC	CX				     ;;AN000;;	   Increment the count
 072D  EB F5                 C1		      JMP SHORT $MDO321
 072F                        C1	$MEN321:
 072F  2B F9                 C1		      SUB     DI,CX				     ;;AN000;;	 Set SI at the beginning of 
				the string
 0731                        C1	$MEN317:
 0731  55                    C1		    PUSH    BP					     ;;AN000;; Restore return address
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:15
C to Message Retriever                                      Page     1-36
DOS - Message Retriever - DISPMSG.ASM Module                

 0732  C3                    C1		    RET 					     ;;AN000;; Return
 0733                        C1	$M_CHAR_REPLACE ENDP					     ;;AN000;;
 0733                        C1	$M_BIN2ASC_REPLACE PROC NEAR				     ;;AN000;;
 0733  5D                    C1		    POP     BP					     ;;AN000;; Save return address
 0734  33 D2                 C1		    XOR     DX,DX				     ;;AN000;; Prepare for get binary value 
				(HIGH)
 0736  33 C0                 C1		    XOR     AX,AX				     ;;AN000;; Prepare for get binary value 
				(LOW)
 0738  C7 06 0042 R 0010     C1		    MOV     $M_RT.$M_DIVISOR,$M_BASE16		     ;;AN000;; Set default divisor
 073E  33 DB                 C1		    XOR     BX,BX				     ;;AN000;; Use BP as the NEG flag (if ap
				plicable)
 0740  F6 44 07 20           C1		    TEST    $M_SL.$M_S_FLAG,NOT $M_BYTE AND $M_SIZE_MASK ;;AN000;; Was BYTE specified?
 0744  75 24                 C1		    JNZ $MIF325
 0746  26: 8A 05             C1		      MOV     AL, BYTE PTR ES:[DI]		     ;;AN000;; Setup byte in AL
 0749  F6 44 07 0D           C1		      TEST    $M_SL.$M_S_FLAG,NOT Sgn_Bin_Type AND $M_TYPE_MASK ;;AN000;; Was Signed binary 
				specified?
 074D  75 0D                 C1		      JNZ $MIF326
 074F  A8 80                 C1			TEST	AL,10000000b			     ;;AN000;; Is this number negative?
 0751  74 03                 C1			JZ $MIF327
 0753  43                    C1			  INC	  BX				     ;;AN000;;	   Remember that it was nega
				tive
 0754  24 7F                 C1			  AND	  AL,01111111b			     ;;AN000;;	   Make it positive
 0756                        C1	$MIF327:
 0756  C7 06 0042 R 000A     C1			MOV	$M_RT.$M_DIVISOR,$M_BASE10	     ;;AN000;;
 075C                        C1	$MIF326:
 075C  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?
 0760  75 06                 C1		      JNZ $MIF330
 0762  C7 06 0042 R 000A     C1			MOV	$M_RT.$M_DIVISOR,$M_BASE10	     ;;AN000;;
 0768                        C1	$MIF330:
 0768  EB 54                 C1		    JMP SHORT $MEN325
 076A                        C1	$MIF325:
 076A  F6 44 07 10           C1		      TEST    $M_SL.$M_S_FLAG,NOT $M_WORD AND $M_SIZE_MASK ;;AN000;; Was WORD specified?
 076E  75 26                 C1		      JNZ $MIF333
 0770  26: 8B 05             C1			MOV	AX, WORD PTR ES:[DI]		     ;;AN000;; Setup byte in AL
 0773  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?
 0777  75 0F                 C1			JNZ $MIF334
 0779  F6 C4 80              C1			  TEST	  AH,10000000b			     ;;AN000;; Is this number negative?
 077C  74 04                 C1			  JZ $MIF335
 077E  43                    C1			    INC     BX				     ;;AN000;;	   Remember that it was nega
				tive
 077F  80 E4 7F              C1			    AND     AH,01111111b		     ;;AN000;;	   Make it positive
 0782                        C1	$MIF335:
 0782  C7 06 0042 R 000A     C1			  MOV	  $M_RT.$M_DIVISOR,$M_BASE10	     ;;AN000;;
 0788                        C1	$MIF334:
 0788  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?
 078C  75 06                 C1			JNZ $MIF338
 078E  C7 06 0042 R 000A     C1			  MOV	  $M_RT.$M_DIVISOR,$M_BASE10	     ;;AN000;;
 0794                        C1	$MIF338:
 0794  EB 28                 C1		      JMP SHORT $MEN333
 0796                        C1	$MIF333:
 0796  26: 8B 05             C1			MOV	AX, WORD PTR ES:[DI]		     ;;AN000;; Setup Double word in DX:AX
 0799  26: 8B 55 02          C1			MOV	DX, WORD PTR ES:[DI]+2		     ;;AN000;;
 079D  F6 44 07 0D           C1			TEST	$M_SL.$M_S_FLAG,NOT Sgn_Bin_Type AND $M_TYPE_MASK ;;AN000;; Was Signed binar
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:15
C to Message Retriever                                      Page     1-37
DOS - Message Retriever - DISPMSG.ASM Module                

				y specified?
 07A1  75 0F                 C1			JNZ $MIF341
 07A3  F6 C6 80              C1			  TEST	  DH,10000000b			     ;;AN000;; Is this number negative?
 07A6  74 04                 C1			  JZ $MIF342
 07A8  43                    C1			    INC     BX				     ;;AN000;;	   Remember that it was nega
				tive
 07A9  80 E6 7F              C1			    AND     DH,01111111b		     ;;AN000;;	   Make it positive
 07AC                        C1	$MIF342:
 07AC  C7 06 0042 R 000A     C1			  MOV	  $M_RT.$M_DIVISOR,$M_BASE10	     ;;AN000;;
 07B2                        C1	$MIF341:
 07B2  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?
 07B6  75 06                 C1			JNZ $MIF345
 07B8  C7 06 0042 R 000A     C1			  MOV	  $M_RT.$M_DIVISOR,$M_BASE10	     ;;AN000;;
 07BE                        C1	$MIF345:
 07BE                        C1	$MEN333:
 07BE                        C1	$MEN325:
 07BE  E8 0380 R             C1		    CALL    $M_CONVERT2ASC			     ;;AN000;; Convert to ASCII string
 07C1  0B DB                 C1		    OR	    BX,BX				     ;;AN000;;
 07C3  74 05                 C1		    JZ $MIF349
 07C5  33 D2                 C1		      XOR     DX,DX				     ;;AN000;; Yes,
 07C7  B2 2D                 C1		      MOV     DL,$M_NEG_SIGN			     ;;AN000;;	 Put "-" on the stack with t
				he number
 07C9  52                    C1		      PUSH    DX				     ;;AN000;;
 07CA                        C1	$MIF349:
 07CA  55                    C1		    PUSH    BP					     ;;AN000;; Restore return address
 07CB  C3                    C1		    RET 					     ;;AN000;; Return
 07CC                        C1	$M_BIN2ASC_REPLACE ENDP 				     ;;AN000;;
					MSG_SERVICES <FILESYS.CLA,FILESYS.CL1,FILESYS.CL2,FILESYS.CTL>		    ;AN000;
 07CC                        C3	$M_CLASS_A_STRUC LABEL BYTE
 07CC  FF                    C3	        $M_CLASS_ID <0FFH,EXPECTED_VERSION,Class_A_MessageCount>
 07CD  0400                  C3	
 07CF  08                    C3	
 07D0                        C3	$M_A_00001H_STRUC LABEL BYTE
 07D0  0100                  C3	        $M_ID   <00001H,$M_A_00001H_MSG-$M_A_00001H_STRUC>
 07D2  2000                  C3	
 07D4                        C3	$M_A_0000AH_STRUC LABEL BYTE
 07D4  0A00                  C3	        $M_ID   <0000AH,$M_A_0000AH_MSG-$M_A_0000AH_STRUC>
 07D6  3400                  C3	
 07D8                        C3	$M_A_0000BH_STRUC LABEL BYTE
 07D8  0B00                  C3	        $M_ID   <0000BH,$M_A_0000BH_MSG-$M_A_0000BH_STRUC>
 07DA  4900                  C3	
 07DC                        C3	$M_A_0000CH_STRUC LABEL BYTE
 07DC  0C00                  C3	        $M_ID   <0000CH,$M_A_0000CH_MSG-$M_A_0000CH_STRUC>
 07DE  5E00                  C3	
 07E0                        C3	$M_A_0000DH_STRUC LABEL BYTE
 07E0  0D00                  C3	        $M_ID   <0000DH,$M_A_0000DH_MSG-$M_A_0000DH_STRUC>
 07E2  7200                  C3	
 07E4                        C3	$M_A_0000EH_STRUC LABEL BYTE
 07E4  0E00                  C3	        $M_ID   <0000EH,$M_A_0000EH_MSG-$M_A_0000EH_STRUC>
 07E6  9900                  C3	
 07E8                        C3	$M_A_0000FH_STRUC LABEL BYTE
 07E8  0F00                  C3	        $M_ID   <0000FH,$M_A_0000FH_MSG-$M_A_0000FH_STRUC>
 07EA  CB00                  C3	
 07EC                        C3	$M_A_00010H_STRUC LABEL BYTE
 07EC  1000                  C3	        $M_ID   <00010H,$M_A_00010H_MSG-$M_A_00010H_STRUC>
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:15
C to Message Retriever                                      Page     1-38
DOS - Message Retriever - DISPMSG.ASM Module                

 07EE  DA00                  C3	
 07F0                        C3	$M_A_00001H_MSG LABEL BYTE
 07F0  17                    C3	        DB      $M_A_00001H_END-$M_A_00001H_MSG-1
 07F1  49 6E 63 6F 72 72     C3	        DB      "Incorrect DOS version",CR,LF
 0808                        C3	$M_A_00001H_END LABEL BYTE
 0808                        C3	$M_A_0000AH_MSG LABEL BYTE
 0808  18                    C3	        DB      $M_A_0000AH_END-$M_A_0000AH_MSG-1
 0809  20 20 50 41 55 53     C3	        DB       "  PAUSED  %1   %2   %3",CR,LF
 0821                        C3	$M_A_0000AH_END LABEL BYTE
 0821                        C3	$M_A_0000BH_MSG LABEL BYTE
 0821  18                    C3	        DB      $M_A_0000BH_END-$M_A_0000BH_MSG-1
 0822  20 20 20 20 20 20     C3	        DB       "          %1   %2   %3",CR,LF
 083A                        C3	$M_A_0000BH_END LABEL BYTE
 083A                        C3	$M_A_0000CH_MSG LABEL BYTE
 083A  17                    C3	        DB      $M_A_0000CH_END-$M_A_0000CH_MSG-1
 083B  20 20 20 20 20 20     C3	        DB       "          Local   IFS",CR,LF
 0852                        C3	$M_A_0000CH_END LABEL BYTE
 0852                        C3	$M_A_0000DH_MSG LABEL BYTE
 0852  2A                    C3	        DB      $M_A_0000DH_END-$M_A_0000DH_MSG-1
 0853  20 20 53 74 61 74     C3	        DB       "  Status  Device  Name        Parameters",CR,LF
 087D                        C3	$M_A_0000DH_END LABEL BYTE
 087D                        C3	$M_A_0000EH_MSG LABEL BYTE
 087D  35                    C3	        DB      $M_A_0000EH_END-$M_A_0000EH_MSG-1
 087E  20 20 5F 5F 5F 5F     C3	        DB       "  ______  ______  _________   ___________________",CR,LF,CR,LF
 08B3                        C3	$M_A_0000EH_END LABEL BYTE
 08B3                        C3	$M_A_0000FH_MSG LABEL BYTE
 08B3  12                    C3	        DB      $M_A_0000FH_END-$M_A_0000FH_MSG-1
 08B4  4E 6F 20 65 6E 74     C3	        DB       "No entries found",CR,LF
 08C6                        C3	$M_A_0000FH_END LABEL BYTE
 08C6                        C3	$M_A_00010H_MSG LABEL BYTE
 08C6  18                    C3	        DB      $M_A_00010H_END-$M_A_00010H_MSG-1
 08C7  20 20 45 52 52 4F     C3	        DB       "  ERROR   %1   %2   %3",CR,LF
 08DF                        C3	$M_A_00010H_END LABEL BYTE
 08DF                        C3	$M_CLS_1 PROC FAR
 08DF  0E                    C3	        PUSH    CS
 08E0  07                    C3	        POP     ES
 08E1  8D 3E 07CC R          C3	        LEA     DI,$M_CLASS_A_STRUC
 08E5  81 C1 0119            C3	        ADD     CX,$-$M_CLASS_A_STRUC
 08E9  CB                    C3	        RET
 08EA                        C3	$M_CLS_1 ENDP
 08EA                        C3	$M_CLASS_1_STRUC LABEL BYTE
 08EA  01                    C3	        $M_CLASS_ID <001H,EXPECTED_VERSION,Class_1_MessageCount>
 08EB  0400                  C3	
 08ED  01                    C3	
 08EE                        C3	$M_1_FF_STRUC LABEL BYTE
 08EE  FFFF                  C3	        $M_ID <0FFFFH,$M_1_FF_MSG-$M_1_FF_STRUC>
 08F0  0400                  C3	
 08F2                        C3	$M_1_FF_MSG LABEL BYTE
 08F2  11                    C3	        DB      $M_1_FF_END-$M_1_FF_MSG-1
 08F3  45 78 74 65 6E 64     C3	        DB      "Extended Error %1"
 0904                        C3	$M_1_FF_END LABEL BYTE
 0904                        C3	$M_MSGSERV_1 PROC FAR
 0904  0E                    C3	        PUSH    CS
 0905  07                    C3	        POP     ES
 0906  8D 3E 08EA R          C3	        LEA     DI,$M_CLASS_1_STRUC
 090A  83 C1 20              C3	        ADD     CX,$-$M_CLASS_1_STRUC
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:15
C to Message Retriever                                      Page     1-39
DOS - Message Retriever - DISPMSG.ASM Module                

 090D  CB                    C3	        RET
 090E                        C3	$M_MSGSERV_1 Endp
 090E                        C3	$M_CLASS_2_STRUC LABEL BYTE
 090E  02                    C3	        $M_CLASS_ID <002H,EXPECTED_VERSION,Class_2_MessageCount>
 090F  0400                  C3	
 0911  01                    C3	
 0912                        C3	$M_2_FF_STRUC LABEL BYTE
 0912  FFFF                  C3	        $M_ID <0FFFFH,$M_2_FF_MSG-$M_2_FF_STRUC>
 0914  0400                  C3	
 0916                        C3	$M_2_FF_MSG LABEL BYTE
 0916  0E                    C3	        DB      $M_2_FF_END-$M_2_FF_MSG-1
 0917  50 61 72 73 65 20     C3	        DB      "Parse Error %1"
 0925                        C3	$M_2_FF_END LABEL BYTE
 0925                        C3	$M_MSGSERV_2 PROC FAR
 0925  0E                    C3	        PUSH    CS
 0926  07                    C3	        POP     ES
 0927  8D 3E 090E R          C3	        LEA     DI,$M_CLASS_2_STRUC
 092B  83 C1 1D              C3	        ADD     CX,$-$M_CLASS_2_STRUC
 092E  CB                    C3	        RET
 092F                        C3	$M_MSGSERV_2 Endp
				
				
 092F				data_sysloadmsg proc far
				
 092F  55				push	bp			; save user's base pointer
 0930  8B EC				mov	bp,sp			; set bp to current sp
 0932  57				push	di			; save some registers
 0933  56				push	si
				
				;	copy C inregs into proper registers
				
 0934  8B 7E 08				mov	di,[bp+4+4]		  ; fix di (arg 0)
				
				;-------------------------------------------------------------------
				
 0937  8B 45 0A				mov	ax,[di+0ah]		; load di
 093A  50				push	ax			; the di value from inregs is now on stack
				
 093B  8B 05				mov	ax,[di+00]		; get inregs.x.ax
 093D  8B 5D 02				mov	bx,[di+02]		; get inregs.x.bx
 0940  8B 4D 04				mov	cx,[di+04]		; get inregs.x.cx
 0943  8B 55 06				mov	dx,[di+06]		; get inregs.x.dx
 0946  8B 75 08				mov	si,[di+08]		; get inregs.x.si
 0949  5F				pop	di			; get inregs.x.di from stack
				
 094A  55				push	bp			; save base pointer
				
				;-------------------------------------------------------------------
				
 094B  9A 0100 ---- R			call	sysloadmsg		; call the message retriever
				
				;-------------------------------------------------------------------
				
 0950  5D				pop	bp			; restore base pointer
 0951  57				push	di			; the di value from call is now on stack
 0952  8B 7E 0A				mov	di,[bp+6+4]		  ; fix di (arg 1)
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:15
C to Message Retriever                                      Page     1-40
DOS - Message Retriever - DISPMSG.ASM Module                

				
 0955  89 05				mov	[di+00],ax		; load outregs.x.ax
 0957  89 5D 02				mov	[di+02],bx		; load outregs.x.bx
 095A  89 4D 04				mov	[di+04],cx		; load outregs.x.cx
 095D  89 55 06				mov	[di+06],dx		; load outregs.x.dx
 0960  89 75 08				mov	[di+08],si		; load outregs.x.si
				
 0963  9F				lahf				; get flags into ax
 0964  8A C4				mov	al,ah			; move into low byte
 0966  89 45 0C				mov	[di+0ch],ax		; load outregs.x.cflag
				
 0969  58				pop	ax			; get di from stack
 096A  89 45 0A				mov	[di+0ah],ax		; load outregs.x.di
				
				;-------------------------------------------------------------------
				
 096D  5E				pop	si			; restore registers
 096E  5F				pop	di
 096F  8B E5				mov	sp,bp			; restore sp
 0971  5D				pop	bp			; restore user's bp
 0972  CB				ret
				
 0973				data_sysloadmsg endp
				
				
 0973				data_sysdispmsg proc far
				
 0973  55				push	bp			; save user's base pointer
 0974  8B EC				mov	bp,sp			; set bp to current sp
 0976  57				push	di			; save some registers
 0977  56				push	si
				
				;	copy C inregs into proper registers
				
 0978  8B 7E 08				mov	di,[bp+4+4]		  ; fix di (arg 0)
				
				;-------------------------------------------------------------------
				
 097B  8B 45 0A				mov	ax,[di+0ah]		; load di
 097E  50				push	ax			; the di value from inregs is now on stack
				
 097F  8B 05				mov	ax,[di+00]		; get inregs.x.ax
 0981  8B 5D 02				mov	bx,[di+02]		; get inregs.x.bx
 0984  8B 4D 04				mov	cx,[di+04]		; get inregs.x.cx
 0987  8B 55 06				mov	dx,[di+06]		; get inregs.x.dx
 098A  8B 75 08				mov	si,[di+08]		; get inregs.x.si
 098D  5F				pop	di			; get inregs.x.di from stack
				
 098E  55				push	bp			; save base pointer
				
				;-------------------------------------------------------------------
				
 098F  9A 0257 ---- R			call	sysdispmsg
				
				;-------------------------------------------------------------------
				
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:15
C to Message Retriever                                      Page     1-41
DOS - Message Retriever - DISPMSG.ASM Module                

 0994  5D				pop	bp			; restore base pointer
 0995  57				push	di			; the di value from call is now on stack
 0996  8B 7E 0A				mov	di,[bp+6+4]		  ; fix di (arg 1)
				
 0999  89 05				mov	[di+00],ax		; load outregs.x.ax
 099B  89 5D 02				mov	[di+02],bx		; load outregs.x.bx
 099E  89 4D 04				mov	[di+04],cx		; load outregs.x.cx
 09A1  89 55 06				mov	[di+06],dx		; load outregs.x.dx
 09A4  89 75 08				mov	[di+08],si		; load outregs.x.si
				
 09A7  9F				lahf				; get flags into ax
 09A8  8A C4				mov	al,ah			; move into low byte
 09AA  89 45 0C				mov	[di+0ch],ax		; load outregs.x.cflag
				
 09AD  58				pop	ax			; get di from stack
 09AE  89 45 0A				mov	[di+0ah],ax		; load outregs.x.di
				
				;-------------------------------------------------------------------
				
 09B1  5E				pop	si			; restore registers
 09B2  5F				pop	di
 09B3  8B E5				mov	sp,bp			; restore sp
 09B5  5D				pop	bp			; restore user's bp
 09B6  CB				ret
				
 09B7				data_sysdispmsg 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		       ;
			     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
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:15
C to Message Retriever                                      Page     1-42
DOS - Message Retriever - DISPMSG.ASM Module                

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

			     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	
				
				
 09B7				_DATA	ends			; end code segment
				
 0000				_TEXT	SEGMENT
				
					assume cs:_TEXT
				
					public	_sysdispmsg
					public	_sysloadmsg
				
 0000				_sysdispmsg	proc	near
 0000  9A 0973 ---- R				call	data_sysdispmsg
 0005  C3					ret
 0006				_sysdispmsg	endp
				
 0006				_sysloadmsg	proc	near
 0006  9A 092F ---- R				call	data_sysloadmsg
 000B  C3					ret
 000C				_sysloadmsg	endp
				
 000C				_TEXT	ENDS
					end

Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:15
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  . . . . . . . .  	0056	000A
  $M_HEADER  . . . . . . . . . .  	0000
  $M_DATE_FORMAT . . . . . . . .  	0044
  $M_CURR_SEPARA . . . . . . . .  	0046
  $M_THOU_SEPARA . . . . . . . .  	004B
  $M_DECI_SEPARA . . . . . . . .  	004D
  $M_DATE_SEPARA . . . . . . . .  	004F
  $M_TIME_SEPARA . . . . . . . .  	0051
  $M_CURR_FORMAT . . . . . . . .  	0053
  $M_SIG_DIGS_CU . . . . . . . .  	0054
  $M_TIME_FORMAT . . . . . . . .  	0055
$M_ID  . . . . . . . . . . . . .  	0004	0002
  $M_NUM . . . . . . . . . . . .  	0000
  $M_TXT_PTR . . . . . . . . . .  	0002
$M_RES_ADDRS . . . . . . . . . .  	0085	0017
  $M_EXT_ERR_ADDRS . . . . . . .  	0000
  $M_EXT_FILE  . . . . . . . . .  	0004
  $M_EXT_COMMAND . . . . . . . .  	0008
  $M_EXT_TERM  . . . . . . . . .  	000C
  $M_PARSE_COMMAND . . . . . . .  	0010
  $M_PARSE_ADDRS . . . . . . . .  	0014
  $M_PARSE_TERM  . . . . . . . .  	0018
  $M_CRIT_ADDRS  . . . . . . . .  	001C
  $M_CRIT_COMMAND  . . . . . . .  	0020
  $M_CRIT_TERM . . . . . . . . .  	0024
  $M_DISK_PROC_ADDR  . . . . . .  	0028
  $M_CLASS_ADDRS . . . . . . . .  	002C
  $M_CLS_TERM  . . . . . . . . .  	0030
  $M_DBCS_VEC  . . . . . . . . .  	0034
  $M_HANDLE  . . . . . . . . . .  	0038
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:15
C to Message Retriever                                      Symbols-2


  $M_SIZE  . . . . . . . . . . .  	003A
  $M_CRLF  . . . . . . . . . . .  	003B
  $M_CLASS . . . . . . . . . . .  	003D
  $M_RETURN_ADDR . . . . . . . .  	003E
  $M_MSG_NUM . . . . . . . . . .  	0040
  $M_DIVISOR . . . . . . . . . .  	0042
  $M_TEMP_BUF  . . . . . . . . .  	0044
  $M_BUF_TERM  . . . . . . . . .  	0084
$M_SUBLIST_STRUC . . . . . . . .  	000B	0008
  $M_S_SIZE  . . . . . . . . . .  	0000
  $M_S_RESV  . . . . . . . . . .  	0001
  $M_S_VALUE . . . . . . . . . .  	0002
  $M_S_ID  . . . . . . . . . . .  	0006
  $M_S_FLAG  . . . . . . . . . .  	0007
  $M_S_MAXW  . . . . . . . . . .  	0008
  $M_S_MINW  . . . . . . . . . .  	0009
  $M_S_PAD . . . . . . . . . . .  	000A

Segments and Groups:

                N a m e         	Length	 Align	Combine Class

DGROUP . . . . . . . . . . . . .  	GROUP
  CONST  . . . . . . . . . . . .  	0000	WORD	PUBLIC	'CONST'
  _BSS . . . . . . . . . . . . .  	0000	WORD	PUBLIC	'BSS'
  _DATA  . . . . . . . . . . . .  	09B7	WORD	PUBLIC	'DATA'
_TEXT  . . . . . . . . . . . . .  	000C	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	023B	_DATA
ALT_MAJOR_VERSION  . . . . . . .  	NUMBER	0005	
ALT_MINOR_VERSION  . . . . . . .  	NUMBER	001A	
AMIS_ID  . . . . . . . . . . . .  	L NEAR	00F4	_DATA
AMIS_ID_MSG  . . . . . . . . . .  	L NEAR	00F9	_DATA
AMIS_ID_MSG_END  . . . . . . . .  	L NEAR	0100	_DATA
amis_sign  . . . . . . . . . . .  	L NEAR	00E4	_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	01DF	_DATA
CHECK_AMIS_DONE  . . . . . . . .  	L NEAR	0216	_DATA
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:15
C to Message Retriever                                      Symbols-3


CHECK_AMIS_LOOP  . . . . . . . .  	L NEAR	01E8	_DATA
CHECK_AMIS_NEXT  . . . . . . . .  	L NEAR	0211	_DATA
CHECK_AMIS_UNSUP . . . . . . . .  	L NEAR	0215	_DATA
CLASS_1_MESSAGECOUNT . . . . . .  	NUMBER	0001	
CLASS_2_MESSAGECOUNT . . . . . .  	NUMBER	0001	
CLASS_A_MESSAGECOUNT . . . . . .  	NUMBER	0008	
COLON  . . . . . . . . . . . . .  	NUMBER	003A	
COMR . . . . . . . . . . . . . .  	NUMBER	0000	
COMT . . . . . . . . . . . . . .  	NUMBER	0000	
CR . . . . . . . . . . . . . . .  	NUMBER	000D	

data_sysdispmsg  . . . . . . . .  	F PROC	0973	_DATA	Global	Length = 0044
data_sysloadmsg  . . . . . . . .  	F PROC	092F	_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	
FARMSG . . . . . . . . . . . . .  	NUMBER	FFFF	
FORMFD . . . . . . . . . . . . .  	NUMBER	000C	
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:15
C to Message Retriever                                      Symbols-4



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	0257	_DATA	Length = 0047
SYSLOADMSG . . . . . . . . . . .  	F PROC	0100	_DATA	Length = 00A1

Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:15
C to Message Retriever                                      Symbols-5


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	02FE	_DATA
$MDO139  . . . . . . . . . . . .  	L NEAR	0366	_DATA
$MDO145  . . . . . . . . . . . .  	L NEAR	0388	_DATA
$MDO165  . . . . . . . . . . . .  	L NEAR	03EA	_DATA
$MDO167  . . . . . . . . . . . .  	L NEAR	03F4	_DATA
$MDO175  . . . . . . . . . . . .  	L NEAR	0420	_DATA
$MDO215  . . . . . . . . . . . .  	L NEAR	04EB	_DATA
$MDO219  . . . . . . . . . . . .  	L NEAR	0510	_DATA
$MDO259  . . . . . . . . . . . .  	L NEAR	05F8	_DATA
$MDO280  . . . . . . . . . . . .  	L NEAR	0663	_DATA
$MDO291  . . . . . . . . . . . .  	L NEAR	068E	_DATA
$MDO301  . . . . . . . . . . . .  	L NEAR	06BC	_DATA
$MDO310  . . . . . . . . . . . .  	L NEAR	06E2	_DATA
$MDO321  . . . . . . . . . . . .  	L NEAR	0724	_DATA
$MEN104  . . . . . . . . . . . .  	L NEAR	029D	_DATA
$MEN107  . . . . . . . . . . . .  	L NEAR	02B2	_DATA
$MEN110  . . . . . . . . . . . .  	L NEAR	02D3	_DATA
$MEN119  . . . . . . . . . . . .  	L NEAR	030B	_DATA
$MEN123  . . . . . . . . . . . .  	L NEAR	030B	_DATA
$MEN128  . . . . . . . . . . . .  	L NEAR	033A	_DATA
$MEN139  . . . . . . . . . . . .  	L NEAR	037D	_DATA
$MEN145  . . . . . . . . . . . .  	L NEAR	03E1	_DATA
$MEN146  . . . . . . . . . . . .  	L NEAR	039E	_DATA
$MEN150  . . . . . . . . . . . .  	L NEAR	03DC	_DATA
$MEN154  . . . . . . . . . . . .  	L NEAR	03DC	_DATA
$MEN165  . . . . . . . . . . . .  	L NEAR	04D6	_DATA
$MEN167  . . . . . . . . . . . .  	L NEAR	0411	_DATA
$MEN175  . . . . . . . . . . . .  	L NEAR	0439	_DATA
$MEN180  . . . . . . . . . . . .  	L NEAR	044B	_DATA
$MEN187  . . . . . . . . . . . .  	L NEAR	047E	_DATA
$MEN188  . . . . . . . . . . . .  	L NEAR	046C	_DATA
$MEN192  . . . . . . . . . . . .  	L NEAR	047E	_DATA
$MEN199  . . . . . . . . . . . .  	L NEAR	04BD	_DATA
$MEN20 . . . . . . . . . . . . .  	L NEAR	01A0	_DATA
$MEN200  . . . . . . . . . . . .  	L NEAR	04B5	_DATA
$MEN202  . . . . . . . . . . . .  	L NEAR	04B5	_DATA
$MEN211  . . . . . . . . . . . .  	L NEAR	04CA	_DATA
$MEN219  . . . . . . . . . . . .  	L NEAR	0571	_DATA
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:15
C to Message Retriever                                      Symbols-6


$MEN220  . . . . . . . . . . . .  	L NEAR	0542	_DATA
$MEN222  . . . . . . . . . . . .  	L NEAR	0542	_DATA
$MEN224  . . . . . . . . . . . .  	L NEAR	0542	_DATA
$MEN229  . . . . . . . . . . . .  	L NEAR	0569	_DATA
$MEN230  . . . . . . . . . . . .  	L NEAR	055B	_DATA
$MEN240  . . . . . . . . . . . .  	L NEAR	0591	_DATA
$MEN243  . . . . . . . . . . . .  	L NEAR	059E	_DATA
$MEN247  . . . . . . . . . . . .  	L NEAR	05F5	_DATA
$MEN248  . . . . . . . . . . . .  	L NEAR	05D9	_DATA
$MEN25 . . . . . . . . . . . . .  	L NEAR	0256	_DATA
$MEN252  . . . . . . . . . . . .  	L NEAR	05F1	_DATA
$MEN259  . . . . . . . . . . . .  	L NEAR	0615	_DATA
$MEN261  . . . . . . . . . . . .  	L NEAR	0609	_DATA
$MEN27 . . . . . . . . . . . . .  	L NEAR	024B	_DATA
$MEN292  . . . . . . . . . . . .  	L NEAR	06A1	_DATA
$MEN307  . . . . . . . . . . . .  	L NEAR	06EA	_DATA
$MEN314  . . . . . . . . . . . .  	L NEAR	070A	_DATA
$MEN317  . . . . . . . . . . . .  	L NEAR	0731	_DATA
$MEN321  . . . . . . . . . . . .  	L NEAR	072F	_DATA
$MEN325  . . . . . . . . . . . .  	L NEAR	07BE	_DATA
$MEN333  . . . . . . . . . . . .  	L NEAR	07BE	_DATA
$MEN93 . . . . . . . . . . . . .  	L NEAR	0291	_DATA
$MEN94 . . . . . . . . . . . . .  	L NEAR	027D	_DATA
$MEN97 . . . . . . . . . . . . .  	L NEAR	028B	_DATA
$MIF104  . . . . . . . . . . . .  	L NEAR	0299	_DATA
$MIF107  . . . . . . . . . . . .  	L NEAR	02AF	_DATA
$MIF110  . . . . . . . . . . . .  	L NEAR	02C3	_DATA
$MIF112  . . . . . . . . . . . .  	L NEAR	02D3	_DATA
$MIF113  . . . . . . . . . . . .  	L NEAR	02D3	_DATA
$MIF117  . . . . . . . . . . . .  	L NEAR	02D8	_DATA
$MIF119  . . . . . . . . . . . .  	L NEAR	02FC	_DATA
$MIF120  . . . . . . . . . . . .  	L NEAR	02FA	_DATA
$MIF127  . . . . . . . . . . . .  	L NEAR	033B	_DATA
$MIF128  . . . . . . . . . . . .  	L NEAR	0338	_DATA
$MIF129  . . . . . . . . . . . .  	L NEAR	0336	_DATA
$MIF134  . . . . . . . . . . . .  	L NEAR	035B	_DATA
$MIF135  . . . . . . . . . . . .  	L NEAR	035B	_DATA
$MIF138  . . . . . . . . . . . .  	L NEAR	037D	_DATA
$MIF141  . . . . . . . . . . . .  	L NEAR	0379	_DATA
$MIF146  . . . . . . . . . . . .  	L NEAR	039B	_DATA
$MIF150  . . . . . . . . . . . .  	L NEAR	03BA	_DATA
$MIF151  . . . . . . . . . . . .  	L NEAR	03B8	_DATA
$MIF154  . . . . . . . . . . . .  	L NEAR	03CC	_DATA
$MIF155  . . . . . . . . . . . .  	L NEAR	03CA	_DATA
$MIF158  . . . . . . . . . . . .  	L NEAR	03DC	_DATA
$MIF159  . . . . . . . . . . . .  	L NEAR	03DC	_DATA
$MIF166  . . . . . . . . . . . .  	L NEAR	0411	_DATA
$MIF169  . . . . . . . . . . . .  	L NEAR	040C	_DATA
$MIF173  . . . . . . . . . . . .  	L NEAR	044B	_DATA
$MIF174  . . . . . . . . . . . .  	L NEAR	044B	_DATA
$MIF175  . . . . . . . . . . . .  	L NEAR	042D	_DATA
$MIF180  . . . . . . . . . . . .  	L NEAR	0448	_DATA
$MIF187  . . . . . . . . . . . .  	L NEAR	046E	_DATA
$MIF188  . . . . . . . . . . . .  	L NEAR	046B	_DATA
$MIF192  . . . . . . . . . . . .  	L NEAR	0475	_DATA
$MIF194  . . . . . . . . . . . .  	L NEAR	047C	_DATA
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:15
C to Message Retriever                                      Symbols-7


$MIF199  . . . . . . . . . . . .  	L NEAR	04BA	_DATA
$MIF20 . . . . . . . . . . . . .  	L NEAR	019C	_DATA
$MIF200  . . . . . . . . . . . .  	L NEAR	049B	_DATA
$MIF202  . . . . . . . . . . . .  	L NEAR	04B5	_DATA
$MIF211  . . . . . . . . . . . .  	L NEAR	04C6	_DATA
$MIF216  . . . . . . . . . . . .  	L NEAR	04F9	_DATA
$MIF220  . . . . . . . . . . . .  	L NEAR	051D	_DATA
$MIF222  . . . . . . . . . . . .  	L NEAR	052A	_DATA
$MIF224  . . . . . . . . . . . .  	L NEAR	053C	_DATA
$MIF229  . . . . . . . . . . . .  	L NEAR	055D	_DATA
$MIF23 . . . . . . . . . . . . .  	L NEAR	01B6	_DATA
$MIF230  . . . . . . . . . . . .  	L NEAR	054F	_DATA
$MIF234  . . . . . . . . . . . .  	L NEAR	0565	_DATA
$MIF239  . . . . . . . . . . . .  	L NEAR	05A0	_DATA
$MIF240  . . . . . . . . . . . .  	L NEAR	0590	_DATA
$MIF243  . . . . . . . . . . . .  	L NEAR	0598	_DATA
$MIF247  . . . . . . . . . . . .  	L NEAR	05DB	_DATA
$MIF248  . . . . . . . . . . . .  	L NEAR	05D5	_DATA
$MIF25 . . . . . . . . . . . . .  	L NEAR	023E	_DATA
$MIF252  . . . . . . . . . . . .  	L NEAR	05E8	_DATA
$MIF254  . . . . . . . . . . . .  	L NEAR	05F1	_DATA
$MIF258  . . . . . . . . . . . .  	L NEAR	0622	_DATA
$MIF259  . . . . . . . . . . . .  	L NEAR	060D	_DATA
$MIF261  . . . . . . . . . . . .  	L NEAR	0606	_DATA
$MIF269  . . . . . . . . . . . .  	L NEAR	0622	_DATA
$MIF27 . . . . . . . . . . . . .  	L NEAR	0248	_DATA
$MIF270  . . . . . . . . . . . .  	L NEAR	061E	_DATA
$MIF274  . . . . . . . . . . . .  	L NEAR	062A	_DATA
$MIF276  . . . . . . . . . . . .  	L NEAR	0649	_DATA
$MIF278  . . . . . . . . . . . .  	L NEAR	0677	_DATA
$MIF279  . . . . . . . . . . . .  	L NEAR	0677	_DATA
$MIF281  . . . . . . . . . . . .  	L NEAR	0673	_DATA
$MIF286  . . . . . . . . . . . .  	L NEAR	068A	_DATA
$MIF287  . . . . . . . . . . . .  	L NEAR	068A	_DATA
$MIF290  . . . . . . . . . . . .  	L NEAR	06B2	_DATA
$MIF292  . . . . . . . . . . . .  	L NEAR	06A0	_DATA
$MIF295  . . . . . . . . . . . .  	L NEAR	06AE	_DATA
$MIF299  . . . . . . . . . . . .  	L NEAR	06D0	_DATA
$MIF300  . . . . . . . . . . . .  	L NEAR	06D0	_DATA
$MIF302  . . . . . . . . . . . .  	L NEAR	06CC	_DATA
$MIF307  . . . . . . . . . . . .  	L NEAR	06DE	_DATA
$MIF309  . . . . . . . . . . . .  	L NEAR	06EA	_DATA
$MIF314  . . . . . . . . . . . .  	L NEAR	0706	_DATA
$MIF317  . . . . . . . . . . . .  	L NEAR	0724	_DATA
$MIF318  . . . . . . . . . . . .  	L NEAR	0722	_DATA
$MIF325  . . . . . . . . . . . .  	L NEAR	076A	_DATA
$MIF326  . . . . . . . . . . . .  	L NEAR	075C	_DATA
$MIF327  . . . . . . . . . . . .  	L NEAR	0756	_DATA
$MIF330  . . . . . . . . . . . .  	L NEAR	0768	_DATA
$MIF333  . . . . . . . . . . . .  	L NEAR	0796	_DATA
$MIF334  . . . . . . . . . . . .  	L NEAR	0788	_DATA
$MIF335  . . . . . . . . . . . .  	L NEAR	0782	_DATA
$MIF338  . . . . . . . . . . . .  	L NEAR	0794	_DATA
$MIF341  . . . . . . . . . . . .  	L NEAR	07B2	_DATA
$MIF342  . . . . . . . . . . . .  	L NEAR	07AC	_DATA
$MIF345  . . . . . . . . . . . .  	L NEAR	07BE	_DATA
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:15
C to Message Retriever                                      Symbols-8


$MIF349  . . . . . . . . . . . .  	L NEAR	07CA	_DATA
$MIF93 . . . . . . . . . . . . .  	L NEAR	028D	_DATA
$MIF94 . . . . . . . . . . . . .  	L NEAR	027A	_DATA
$MIF97 . . . . . . . . . . . . .  	L NEAR	0287	_DATA
$MLL149  . . . . . . . . . . . .  	L NEAR	03A8	_DATA
$MLL168  . . . . . . . . . . . .  	L NEAR	0403	_DATA
$MLL178  . . . . . . . . . . . .  	L NEAR	0435	_DATA
$MLL202  . . . . . . . . . . . .  	L NEAR	04AD	_DATA
$MLL214  . . . . . . . . . . . .  	L NEAR	04D6	_DATA
$MSR175  . . . . . . . . . . . .  	L NEAR	044B	_DATA
$MSR259  . . . . . . . . . . . .  	L NEAR	0616	_DATA
$MXL3  . . . . . . . . . . . . .  	L NEAR	0458	_DATA
$MXL4  . . . . . . . . . . . . .  	L NEAR	04D6	_DATA
$MXL5  . . . . . . . . . . . . .  	L NEAR	0571	_DATA
$M_1_FF_END  . . . . . . . . . .  	L BYTE	0904	_DATA
$M_1_FF_MSG  . . . . . . . . . .  	L BYTE	08F2	_DATA
$M_1_FF_STRUC  . . . . . . . . .  	L BYTE	08EE	_DATA
$M_2_FF_END  . . . . . . . . . .  	L BYTE	0925	_DATA
$M_2_FF_MSG  . . . . . . . . . .  	L BYTE	0916	_DATA
$M_2_FF_STRUC  . . . . . . . . .  	L BYTE	0912	_DATA
$M_ADDR_SZ_FAR . . . . . . . . .  	NUMBER	0004	
$M_ADDR_SZ_NEAR  . . . . . . . .  	NUMBER	0002	
$M_ADD_CRLF  . . . . . . . . . .  	N PROC	0345	_DATA	Length = 0017
$M_ALIGN_MASK  . . . . . . . . .  	NUMBER	0080	
$M_AM  . . . . . . . . . . . . .  	NUMBER	0061	
$M_A_00001H_END  . . . . . . . .  	L BYTE	0808	_DATA
$M_A_00001H_MSG  . . . . . . . .  	L BYTE	07F0	_DATA
$M_A_00001H_STRUC  . . . . . . .  	L BYTE	07D0	_DATA
$M_A_0000AH_END  . . . . . . . .  	L BYTE	0821	_DATA
$M_A_0000AH_MSG  . . . . . . . .  	L BYTE	0808	_DATA
$M_A_0000AH_STRUC  . . . . . . .  	L BYTE	07D4	_DATA
$M_A_0000BH_END  . . . . . . . .  	L BYTE	083A	_DATA
$M_A_0000BH_MSG  . . . . . . . .  	L BYTE	0821	_DATA
$M_A_0000BH_STRUC  . . . . . . .  	L BYTE	07D8	_DATA
$M_A_0000CH_END  . . . . . . . .  	L BYTE	0852	_DATA
$M_A_0000CH_MSG  . . . . . . . .  	L BYTE	083A	_DATA
$M_A_0000CH_STRUC  . . . . . . .  	L BYTE	07DC	_DATA
$M_A_0000DH_END  . . . . . . . .  	L BYTE	087D	_DATA
$M_A_0000DH_MSG  . . . . . . . .  	L BYTE	0852	_DATA
$M_A_0000DH_STRUC  . . . . . . .  	L BYTE	07E0	_DATA
$M_A_0000EH_END  . . . . . . . .  	L BYTE	08B3	_DATA
$M_A_0000EH_MSG  . . . . . . . .  	L BYTE	087D	_DATA
$M_A_0000EH_STRUC  . . . . . . .  	L BYTE	07E4	_DATA
$M_A_0000FH_END  . . . . . . . .  	L BYTE	08C6	_DATA
$M_A_0000FH_MSG  . . . . . . . .  	L BYTE	08B3	_DATA
$M_A_0000FH_STRUC  . . . . . . .  	L BYTE	07E8	_DATA
$M_A_00010H_END  . . . . . . . .  	L BYTE	08DF	_DATA
$M_A_00010H_MSG  . . . . . . . .  	L BYTE	08C6	_DATA
$M_A_00010H_STRUC  . . . . . . .  	L BYTE	07EC	_DATA
$M_BASE10  . . . . . . . . . . .  	NUMBER	000A	
$M_BASE16  . . . . . . . . . . .  	NUMBER	0010	
$M_BIN2ASC_REPLACE . . . . . . .  	N PROC	0733	_DATA	Length = 0099
$M_BYTE  . . . . . . . . . . . .  	NUMBER	0010	
$M_CHAR_ONLY . . . . . . . . . .  	NUMBER	0000	
$M_CHAR_REPLACE  . . . . . . . .  	N PROC	070B	_DATA	Length = 0028
$M_CHECKSTDIN  . . . . . . . . .  	N PROC	01B9	_DATA	Length = 0013
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:15
C to Message Retriever                                      Symbols-9


$M_CHECKSTDOUT . . . . . . . . .  	N PROC	01CC	_DATA	Length = 0013
$M_CLASS_1_STRUC . . . . . . . .  	L BYTE	08EA	_DATA
$M_CLASS_2_STRUC . . . . . . . .  	L BYTE	090E	_DATA
$M_CLASS_A_STRUC . . . . . . . .  	L BYTE	07CC	_DATA
$M_CLASS_ID_SZ . . . . . . . . .  	NUMBER	0004	
$M_CLASS_NOT_EXIST . . . . . . .  	NUMBER	0000	
$M_CLS_1 . . . . . . . . . . . .  	F PROC	08DF	_DATA	Global	Length = 000B
$M_COMMA . . . . . . . . . . . .  	NUMBER	002C	
$M_CONVERT2ASC . . . . . . . . .  	N PROC	0380	_DATA	Length = 006A
$M_CON_INP . . . . . . . . . . .  	NUMBER	-0001	
$M_COUNT . . . . . . . . . . . .  	NUMBER	0001	
$M_CRIT_ERR_MASK . . . . . . . .  	NUMBER	0001	
$M_CRIT_HI . . . . . . . . . . .  	NUMBER	0027	
$M_CRIT_LO . . . . . . . . . . .  	NUMBER	0013	
$M_CRLF_SIZE . . . . . . . . . .  	NUMBER	0002	
$M_CR_LF . . . . . . . . . . . .  	NUMBER	0A0D	
$M_DATE_MASK . . . . . . . . . .  	NUMBER	0010	
$M_DBCS_TERM . . . . . . . . . .  	NUMBER	0000	
$M_DCOUNT  . . . . . . . . . . .  	NUMBER	0001	
$M_DEF_DATE_FORM . . . . . . . .  	NUMBER	0000	
$M_DEF_DATE_SEP  . . . . . . . .  	NUMBER	002D	
$M_DEF_DECI_SEP  . . . . . . . .  	NUMBER	002E	
$M_DEF_TIME_FORM . . . . . . . .  	NUMBER	0001	
$M_DEF_TIME_SEP  . . . . . . . .  	NUMBER	003A	
$M_DISPLAY_$_STRING  . . . . . .  	N PROC	02D9	_DATA	Length = 0035
$M_DISPLAY_H_STRING  . . . . . .  	N PROC	030E	_DATA	Length = 002E
$M_DISPLAY_MESSAGE . . . . . . .  	N PROC	03EA	_DATA	Length = 00F3
$M_DISPLAY_REPLACE . . . . . . .  	N PROC	0630	_DATA	Length = 00BF
$M_DISPLAY_STRING  . . . . . . .  	N PROC	029E	_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	04DD	_DATA	Length = 002D
$M_FIND_SPECIFIED_MSG  . . . . .  	N PROC	05B9	_DATA	Length = 0077
$M_FIRST_THOU  . . . . . . . . .  	NUMBER	0003	
$M_FLUSH_BUF . . . . . . . . . .  	N PROC	06EF	_DATA	Length = 001C
$M_GET_DBCS_VEC  . . . . . . . .  	N PROC	01A1	_DATA	Length = 0018
$M_GET_EXT_ERR_39  . . . . . . .  	N PROC	033C	_DATA	Length = 0009
$M_GET_MSG_ADDRESS . . . . . . .  	F PROC	050A	_DATA	Global	Length = 00A0
$M_ID_SZ . . . . . . . . . . . .  	NUMBER	0004	
$M_INCLUDE . . . . . . . . . . .  	NUMBER	FFFF	
$M_INDEX . . . . . . . . . . . .  	NUMBER	0004	
$M_IS_IT_DBCS  . . . . . . . . .  	N PROC	035C	_DATA	Length = 0024
$M_LOAD  . . . . . . . . . . . .  	NUMBER	FFFF	
$M_MAX_2_YEAR  . . . . . . . . .  	NUMBER	0063	
$M_MSGDATA_ONLY  . . . . . . . .  	NUMBER	0000	
$M_MSGSERV_1 . . . . . . . . . .  	F PROC	0904	_DATA	Global	Length = 000A
$M_MSGSERV_2 . . . . . . . . . .  	F PROC	0925	_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	0001	
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:15
C to Message Retriever                                      Symbols-10


$M_ONE_REPLACE . . . . . . . . .  	NUMBER	0001	
$M_PARSE_FLAG  . . . . . . . . .  	NUMBER	FFFF	
$M_PAR_CLS . . . . . . . . . . .  	NUMBER	FFFF	
$M_PM  . . . . . . . . . . . . .  	NUMBER	0070	
$M_REPLACE . . . . . . . . . . .  	NUMBER	FFFF	
$M_REPL_DONE . . . . . . . . . .  	NUMBER	0000	
$M_RES_ADDRS_SZ  . . . . . . . .  	NUMBER	0085	
$M_RT  . . . . . . . . . . . . .  	L BYTE	0000	_DATA	Global
$M_SECOND_THOU . . . . . . . . .  	NUMBER	0006	
$M_SERVICE . . . . . . . . . . .  	NUMBER	0000	
$M_SET_LEN_IN_CX . . . . . . . .  	N PROC	05AA	_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	0228	_DATA	Length = 002F
$M_WORD  . . . . . . . . . . . .  	NUMBER	0020	
??0000 . . . . . . . . . . . . .  	L NEAR	05A2	_DATA
@CPU . . . . . . . . . . . . . .  	TEXT  0101h		
@FILENAME  . . . . . . . . . . .  	TEXT  _msgret		
@VERSION . . . . . . . . . . . .  	TEXT  510		
_sysdispmsg  . . . . . . . . . .  	N PROC	0000	_TEXT	Global	Length = 0006
_sysloadmsg  . . . . . . . . . .  	N PROC	0006	_TEXT	Global	Length = 0006


  13797 Source  Lines
  17557 Total   Lines
    506 Symbols

  44432 + 191065 Bytes symbol space free

      0 Warning Errors
      0 Severe  Errors
