Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:18
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 ;AC010;
			     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:18
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:18
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:18
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:18
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:18
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:18
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:18
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:18
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 <FDISK>		;IDENTIFY THE COMPONENT 		;AC010;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:18
C to Message Retriever                                      Page     1-10
DOS - Message Retriever - MSGSTR.INC Module                 

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

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

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

 0102                        C1		SYSLOADMSG PROC FAR				     ;;AN000;;
 0102  50                    C1		PUSH	AX					     ;;AN000;
 0103  53                    C1		PUSH	BX					     ;;AN000;
 0104  52                    C1		PUSH	DX					     ;;AN000;
 0105  06                    C1		PUSH	ES					     ;;AN000;
 0106  57                    C1		PUSH	DI					     ;;AN000;
 0107  33 C9                 C1		XOR	CX,CX					     ;;AN000;  Reset to zero
 0109  8E C1                 C1		MOV	ES,CX					     ;;AN000;
 010B  33 FF                 C1		XOR	DI,DI					     ;;AN000;
 010D  B8 122E               C1		MOV	AX,DOS_GET_EXT_PARSE_ADD		     ;;AN000;; 2FH Interface
 0110  B2 00                 C1		MOV	DL,DOS_GET_EXTENDED			     ;;AN000;; Where are the Extended errors
				 in COMMAND.COM
 0112  CD 2F                 C1		INT	2FH					     ;;AN000;; Private interface
 0114  8C 06 000A R          C1		MOV	WORD PTR $M_RT.$M_EXT_COMMAND+2,ES	     ;;AN000;;	Move into first avaliable ta
				ble location
 0118  89 3E 0008 R          C1		MOV	WORD PTR $M_RT.$M_EXT_COMMAND,DI	     ;;AN000;;
 011C  B8 122E               C1		MOV	AX,DOS_GET_EXT_PARSE_ADD		     ;;AN000;; 2FH Interface
 011F  B2 02                 C1		MOV	DL,DOS_GET_PARSE			     ;;AN000;; Where are the Parse errors in
				 COMMAND.COM
 0121  CD 2F                 C1		INT	2FH					     ;;AN000;; Private interface
 0123  8C 06 0012 R          C1		MOV	WORD PTR $M_RT.$M_PARSE_COMMAND+2,ES	     ;;AN000;;	Move into first avaliable ta
				ble location
 0127  89 3E 0010 R          C1		MOV	WORD PTR $M_RT.$M_PARSE_COMMAND,DI	     ;;AN000;;
 012B  B8 122E               C1		MOV	AX,DOS_GET_EXT_PARSE_ADD		     ;;AN000;; 2FH Interface
 012E  B2 04                 C1		MOV	DL,DOS_GET_CRITICAL			     ;;AN000;; Where are the Critical errors
				 in COMMAND.COM
 0130  CD 2F                 C1		INT	2FH					     ;;AN000;; Private interface
 0132  8C 06 0022 R          C1		MOV	WORD PTR $M_RT.$M_CRIT_COMMAND+2,ES	     ;;AN000;;	Move into first avaliable ta
				ble location
 0136  89 3E 0020 R          C1		MOV	WORD PTR $M_RT.$M_CRIT_COMMAND,DI	     ;;AN000;;
 013A  B8 122E               C1		MOV	AX,DOS_GET_EXT_PARSE_ADD		     ;;AN001;; 2FH Interface
 013D  B2 06                 C1		MOV	DL,DOS_GET_FILE 			     ;;AN001;; Where are the FILE dependant 
				in IFSFUNC.EXE
 013F  CD 2F                 C1		INT	2FH					     ;;AN001;; Private interface
 0141  8C 06 0006 R          C1		MOV	WORD PTR $M_RT.$M_EXT_FILE+2,ES 	     ;;AN001;;	Move into first avaliable ta
				ble location
 0145  89 3E 0004 R          C1		MOV	WORD PTR $M_RT.$M_EXT_FILE,DI		     ;;AN001;;
 0149  9A 0931 ---- R        C1		  CALL	  FAR PTR $M_MSGSERV_1			     ;;AN000;; Get addressibilty to MSGSERV 
				CLASS 1 (EXTENDED Errors)
 014E  8C 06 0002 R          C1		MOV	WORD PTR $M_RT.$M_EXT_ERR_ADDRS+2,ES	     ;;AN000;; Move into first avaliable tab
				le location
 0152  89 3E 0000 R          C1		MOV	WORD PTR $M_RT.$M_EXT_ERR_ADDRS,DI	     ;;AN000;;
 0156  8C 06 001E R          C1		MOV	WORD PTR $M_RT.$M_CRIT_ADDRS+2,ES	     ;;AN000;; Move into first avaliable tab
				le location
 015A  89 3E 001C R          C1		MOV	WORD PTR $M_RT.$M_CRIT_ADDRS,DI 	     ;;AN000;;
 015E  9A 0952 ---- R        C1		  CALL	  FAR PTR $M_MSGSERV_2			     ;;AN000;; Get addressibilty to MSGSERV 
				CLASS 2 (PARSE Errors)
 0163  8C 06 0016 R          C1		MOV	WORD PTR $M_RT.$M_PARSE_ADDRS+2,ES	     ;;AN000;; Move into first avaliable tab
				le location
 0167  89 3E 0014 R          C1		MOV	WORD PTR $M_RT.$M_PARSE_ADDRS,DI	     ;;AN000;;
 016B  B8 122E               C1		MOV	AX,DOS_GET_EXT_PARSE_ADD		     ;;AN001;; 2FH Interface
 016E  B2 08                 C1		MOV	DL,DOS_GET_ADDR 			     ;;AN001;; Where is the READ_DISK_PROC i
				n COMMAND.COM
 0170  CD 2F                 C1		INT	2FH					     ;;AN001;; Private interface
 0172  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:18
C to Message Retriever                                      Page     1-14
DOS - Message Retriever - LOADMSG.ASM Module                

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

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

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

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

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

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

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

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

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

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

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

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

 03EC  83 C4 08              C1		  ADD	  SP,8					     ;;AN000;;	   Eliminate from stack
 03EF  F9                    C1		  STC						     ;;AN000;;
 03F0                        C1	$MEN104:
 03F0  CB                    C1		RET						     ;;AN000;; Return
 03F1                        C1		SYSDISPMSG ENDP 				     ;;AN000;;
 03F1                        C1	$M_DISPLAY_STRING PROC NEAR				     ;;AN000;;
 03F1  50                    C1		PUSH	AX					     ;;AN000;;
 03F2  53                    C1		PUSH	BX					     ;;AN000;;
 03F3  52                    C1		PUSH	DX					     ;;AN000;;
 03F4  8B 1E 003C R          C1		MOV	BX,$M_RT.$M_HANDLE			     ;;AN000;; Retrieve handle
 03F8  83 FB FF              C1		CMP	BX,$M_NO_HANDLE 			     ;;AN000;; Was there a handle specified?
 03FB  75 05                 C1		JNE $MIF107
 03FD  E8 042C R             C1		  CALL	  $M_DISPLAY_$_STRING			     ;;AN000;; No, display $ terminated stri
				ng
 0400  EB 03                 C1		JMP SHORT $MEN107
 0402                        C1	$MIF107:
 0402  E8 0461 R             C1		  CALL	  $M_DISPLAY_H_STRING			     ;;AN000;; Yes, display string to handle
 0405                        C1	$MEN107:
 0405  73 0F                 C1		JNC $MIF110
 0407  B4 59                 C1		  MOV	  AH,DOS_GET_EXT_ERROR			     ;;AN000;;	Yes,
 0409  BB 0000               C1		  MOV	  BX,DOS_GET_EXT_ERROR_BX		     ;;AN000;;	  Get extended error
 040C  CD 21                 C1		  INT	  21H					     ;;AN000;;
 040E  32 E4                 C1		  XOR	  AH,AH 				     ;;AN000;;	  Clear AH
 0410  83 C4 06              C1		  ADD	  SP,6					     ;;AN000;;	  Clean up stack
 0413  F9                    C1		  STC						     ;;AN000;;	  Flag that there was an err
				or
 0414  EB 10                 C1		JMP SHORT $MEN110
 0416                        C1	$MIF110:
 0416  83 FB FF              C1		  CMP	  BX,$M_NO_HANDLE			     ;;AN000;; Was there a handle specified?
 0419  74 0B                 C1		  JE $MIF112
 041B  3B C1                 C1		    CMP     AX,CX				     ;AN001;	 Was it ALL written?
 041D  74 07                 C1		    JE $MIF113
 041F  E8 048F R             C1		      CALL    $M_GET_EXT_ERR_39 		     ;AN001;	   Set Extended error
 0422  83 C4 06              C1		      ADD     SP,6				     ;AN001;	   Clean up stack
 0425  F9                    C1		      STC					     ;AN001;	   Flag that there was an er
				ror
 0426                        C1	$MIF113:
 0426                        C1	$MIF112:
 0426                        C1	$MEN110:
 0426  72 03                 C1		JC $MIF117
 0428  5A                    C1		  POP	  DX					     ;;AN000;;	Restore regs
 0429  5B                    C1		  POP	  BX					     ;;AN000;;
 042A  58                    C1		  POP	  AX					     ;;AN000;;
 042B                        C1	$MIF117:
 042B  C3                    C1		RET						     ;;AN000;; Return
 042C                        C1	$M_DISPLAY_STRING ENDP					     ;;AN000;;
 042C                        C1	$M_DISPLAY_$_STRING PROC NEAR				     ;;AN000;;
 042C  1E                    C1		PUSH	DS					     ;;AN000;;
 042D  06                    C1		PUSH	ES					     ;;AN000;;
 042E  1F                    C1		POP	DS					     ;;AN000;; Set DS to segment of message 
				text
 042F  83 F9 01              C1		CMP	CX,$M_SINGLE_CHAR			     ;;AN000;; Is this a single character?
 0432  75 1B                 C1		JNE $MIF119
 0434  B4 02                 C1		  MOV	  AH,DOS_DISP_CHAR			     ;;AN000;;	 DOS Function to display CHA
				RACTER
 0436  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:18
C to Message Retriever                                      Page     1-27
DOS - Message Retriever - DISPMSG.ASM Module                

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

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

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

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

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

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

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

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

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

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

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

 07AC  80 E4 7F              C1			    AND     AH,01111111b		     ;;AN000;;	   Make it positive
 07AF                        C1	$MIF335:
 07AF  C7 06 0046 R 000A     C1			  MOV	  $M_RT.$M_DIVISOR,$M_BASE10	     ;;AN000;;
 07B5                        C1	$MIF334:
 07B5  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?
 07B9  75 06                 C1			JNZ $MIF338
 07BB  C7 06 0046 R 000A     C1			  MOV	  $M_RT.$M_DIVISOR,$M_BASE10	     ;;AN000;;
 07C1                        C1	$MIF338:
 07C1  EB 28                 C1		      JMP SHORT $MEN333
 07C3                        C1	$MIF333:
 07C3  26: 8B 05             C1			MOV	AX, WORD PTR ES:[DI]		     ;;AN000;; Setup Double word in DX:AX
 07C6  26: 8B 55 02          C1			MOV	DX, WORD PTR ES:[DI]+2		     ;;AN000;;
 07CA  F6 44 07 0D           C1			TEST	$M_SL.$M_S_FLAG,NOT Sgn_Bin_Type AND $M_TYPE_MASK ;;AN000;; Was Signed binar
				y specified?
 07CE  75 0F                 C1			JNZ $MIF341
 07D0  F6 C6 80              C1			  TEST	  DH,10000000b			     ;;AN000;; Is this number negative?
 07D3  74 04                 C1			  JZ $MIF342
 07D5  43                    C1			    INC     BX				     ;;AN000;;	   Remember that it was nega
				tive
 07D6  80 E6 7F              C1			    AND     DH,01111111b		     ;;AN000;;	   Make it positive
 07D9                        C1	$MIF342:
 07D9  C7 06 0046 R 000A     C1			  MOV	  $M_RT.$M_DIVISOR,$M_BASE10	     ;;AN000;;
 07DF                        C1	$MIF341:
 07DF  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?
 07E3  75 06                 C1			JNZ $MIF345
 07E5  C7 06 0046 R 000A     C1			  MOV	  $M_RT.$M_DIVISOR,$M_BASE10	     ;;AN000;;
 07EB                        C1	$MIF345:
 07EB                        C1	$MEN333:
 07EB                        C1	$MEN325:
 07EB  E8 04D3 R             C1		    CALL    $M_CONVERT2ASC			     ;;AN000;; Convert to ASCII string
 07EE  0B DB                 C1		    OR	    BX,BX				     ;;AN000;;
 07F0  74 05                 C1		    JZ $MIF349
 07F2  33 D2                 C1		      XOR     DX,DX				     ;;AN000;; Yes,
 07F4  B2 2D                 C1		      MOV     DL,$M_NEG_SIGN			     ;;AN000;;	 Put "-" on the stack with t
				he number
 07F6  52                    C1		      PUSH    DX				     ;;AN000;;
 07F7                        C1	$MIF349:
 07F7  55                    C1		    PUSH    BP					     ;;AN000;; Restore return address
 07F8  C3                    C1		    RET 					     ;;AN000;; Return
 07F9                        C1	$M_BIN2ASC_REPLACE ENDP 				     ;;AN000;;
					MSG_SERVICES <FDISK.CLA,FDISK.CLB,FDISK.CL1,FDISK.CL2,FDISK.CTL> ;AC010;		    
				   ;AC010;
 07F9                        C3	$M_CLASS_A_STRUC LABEL BYTE
 07F9  FF                    C3	        $M_CLASS_ID <0FFH,EXPECTED_VERSION,Class_A_MessageCount>
 07FA  0400                  C3	
 07FC  06                    C3	
 07FD                        C3	$M_A_00001H_STRUC LABEL BYTE
 07FD  0100                  C3	        $M_ID   <00001H,$M_A_00001H_MSG-$M_A_00001H_STRUC>
 07FF  1800                  C3	
 0801                        C3	$M_A_00002H_STRUC LABEL BYTE
 0801  0200                  C3	        $M_ID   <00002H,$M_A_00002H_MSG-$M_A_00002H_STRUC>
 0803  2C00                  C3	
 0805                        C3	$M_A_00003H_STRUC LABEL BYTE
 0805  0300                  C3	        $M_ID   <00003H,$M_A_00003H_MSG-$M_A_00003H_STRUC>
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:18
C to Message Retriever                                      Page     1-39
DOS - Message Retriever - DISPMSG.ASM Module                

 0807  3F00                  C3	
 0809                        C3	$M_A_00008H_STRUC LABEL BYTE
 0809  0800                  C3	        $M_ID   <00008H,$M_A_00008H_MSG-$M_A_00008H_STRUC>
 080B  5800                  C3	
 080D                        C3	$M_A_00009H_STRUC LABEL BYTE
 080D  0900                  C3	        $M_ID   <00009H,$M_A_00009H_MSG-$M_A_00009H_STRUC>
 080F  6800                  C3	
 0811                        C3	$M_A_0000AH_STRUC LABEL BYTE
 0811  0A00                  C3	        $M_ID   <0000AH,$M_A_0000AH_MSG-$M_A_0000AH_STRUC>
 0813  6700                  C3	
 0815                        C3	$M_A_00001H_MSG LABEL BYTE
 0815  17                    C3	        DB      $M_A_00001H_END-$M_A_00001H_MSG-1
 0816  49 6E 63 6F 72 72     C3	        DB      "Incorrect DOS version",CR,LF
 082D                        C3	$M_A_00001H_END LABEL BYTE
 082D                        C3	$M_A_00002H_MSG LABEL BYTE
 082D  16                    C3	        DB      $M_A_00002H_END-$M_A_00002H_MSG-1
 082E  25 31 20 61 6C 72     C3	        DB      "%1 already installed",CR,LF
 0844                        C3	$M_A_00002H_END LABEL BYTE
 0844                        C3	$M_A_00003H_MSG LABEL BYTE
 0844  1C                    C3	        DB      $M_A_00003H_END-$M_A_00003H_MSG-1
 0845  25 31 20 62 79 74     C3	        DB      "%1 bytes available on disk",CR,LF
 0861                        C3	$M_A_00003H_END LABEL BYTE
 0861                        C3	$M_A_00008H_MSG LABEL BYTE
 0861  13                    C3	        DB      $M_A_00008H_END-$M_A_00008H_MSG-1
 0862  49 6E 76 61 6C 69     C3	        DB      "Invalid parameter",CR,LF
 0875                        C3	$M_A_00008H_END LABEL BYTE
 0875                        C3	$M_A_00009H_MSG LABEL BYTE
 0875  02                    C3	        DB      $M_A_00009H_END-$M_A_00009H_MSG-1
 0876  59 00                 C3	        DB      "Y",0
 0878                        C3	$M_A_00009H_END LABEL BYTE
 0878                        C3	$M_A_0000AH_MSG LABEL BYTE
 0878  02                    C3	        DB      $M_A_0000AH_END-$M_A_0000AH_MSG-1
 0879  4E 00                 C3	        DB      "N",0
 087B                        C3	$M_A_0000AH_END LABEL BYTE
 087B                        C3	$M_CLS_1 PROC FAR
 087B  0E                    C3	        PUSH    CS
 087C  07                    C3	        POP     ES
 087D  8D 3E 07F9 R          C3	        LEA     DI,$M_CLASS_A_STRUC
 0881  81 C1 0088            C3	        ADD     CX,$-$M_CLASS_A_STRUC
 0885  CB                    C3	        RET
 0886                        C3	$M_CLS_1 ENDP
 0886                        C3	$M_CLASS_B_STRUC LABEL BYTE
 0886  FF                    C3	        $M_CLASS_ID <0FFH,EXPECTED_VERSION,Class_B_MessageCount>
 0887  0400                  C3	
 0889  04                    C3	
 088A                        C3	$M_B_00004H_STRUC LABEL BYTE
 088A  0400                  C3	        $M_ID   <00004H,$M_B_00004H_MSG-$M_B_00004H_STRUC>
 088C  1000                  C3	
 088E                        C3	$M_B_00005H_STRUC LABEL BYTE
 088E  0500                  C3	        $M_ID   <00005H,$M_B_00005H_MSG-$M_B_00005H_STRUC>
 0890  2F00                  C3	
 0892                        C3	$M_B_00006H_STRUC LABEL BYTE
 0892  0600                  C3	        $M_ID   <00006H,$M_B_00006H_MSG-$M_B_00006H_STRUC>
 0894  4400                  C3	
 0896                        C3	$M_B_00007H_STRUC LABEL BYTE
 0896  0700                  C3	        $M_ID   <00007H,$M_B_00007H_MSG-$M_B_00007H_STRUC>
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:18
C to Message Retriever                                      Page     1-40
DOS - Message Retriever - DISPMSG.ASM Module                

 0898  5B00                  C3	
 089A                        C3	$M_B_00004H_MSG LABEL BYTE
 089A  22                    C3	        DB      $M_B_00004H_END-$M_B_00004H_MSG-1
 089B  43 61 6E 6E 6F 74     C3	        DB      "Cannot FDISK with network loaded",CR,LF
 08BD                        C3	$M_B_00004H_END LABEL BYTE
 08BD                        C3	$M_B_00005H_MSG LABEL BYTE
 08BD  18                    C3	        DB      $M_B_00005H_END-$M_B_00005H_MSG-1
 08BE  4E 6F 20 66 69 78     C3	        DB      "No fixed disks present",CR,LF
 08D6                        C3	$M_B_00005H_END LABEL BYTE
 08D6                        C3	$M_B_00006H_MSG LABEL BYTE
 08D6  1A                    C3	        DB      $M_B_00006H_END-$M_B_00006H_MSG-1
 08D7  45 72 72 6F 72 20     C3	        DB      "Error reading fixed disk",CR,LF
 08F1                        C3	$M_B_00006H_END LABEL BYTE
 08F1                        C3	$M_B_00007H_MSG LABEL BYTE
 08F1  1A                    C3	        DB      $M_B_00007H_END-$M_B_00007H_MSG-1
 08F2  45 72 72 6F 72 20     C3	        DB      "Error writing fixed disk",CR,LF
 090C                        C3	$M_B_00007H_END LABEL BYTE
 090C                        C3	$M_CLS_2 PROC FAR
 090C  0E                    C3	        PUSH    CS
 090D  07                    C3	        POP     ES
 090E  8D 3E 0886 R          C3	        LEA     DI,$M_CLASS_B_STRUC
 0912  81 C1 008C            C3	        ADD     CX,$-$M_CLASS_B_STRUC
 0916  CB                    C3	        RET
 0917                        C3	$M_CLS_2 ENDP
 0917                        C3	$M_CLASS_1_STRUC LABEL BYTE
 0917  01                    C3	        $M_CLASS_ID <001H,EXPECTED_VERSION,Class_1_MessageCount>
 0918  0400                  C3	
 091A  01                    C3	
 091B                        C3	$M_1_FF_STRUC LABEL BYTE
 091B  FFFF                  C3	        $M_ID <0FFFFH,$M_1_FF_MSG-$M_1_FF_STRUC>
 091D  0400                  C3	
 091F                        C3	$M_1_FF_MSG LABEL BYTE
 091F  11                    C3	        DB      $M_1_FF_END-$M_1_FF_MSG-1
 0920  45 78 74 65 6E 64     C3	        DB      "Extended Error %1"
 0931                        C3	$M_1_FF_END LABEL BYTE
 0931                        C3	$M_MSGSERV_1 PROC FAR
 0931  0E                    C3	        PUSH    CS
 0932  07                    C3	        POP     ES
 0933  8D 3E 0917 R          C3	        LEA     DI,$M_CLASS_1_STRUC
 0937  83 C1 20              C3	        ADD     CX,$-$M_CLASS_1_STRUC
 093A  CB                    C3	        RET
 093B                        C3	$M_MSGSERV_1 Endp
 093B                        C3	$M_CLASS_2_STRUC LABEL BYTE
 093B  02                    C3	        $M_CLASS_ID <002H,EXPECTED_VERSION,Class_2_MessageCount>
 093C  0400                  C3	
 093E  01                    C3	
 093F                        C3	$M_2_FF_STRUC LABEL BYTE
 093F  FFFF                  C3	        $M_ID <0FFFFH,$M_2_FF_MSG-$M_2_FF_STRUC>
 0941  0400                  C3	
 0943                        C3	$M_2_FF_MSG LABEL BYTE
 0943  0E                    C3	        DB      $M_2_FF_END-$M_2_FF_MSG-1
 0944  50 61 72 73 65 20     C3	        DB      "Parse Error %1"
 0952                        C3	$M_2_FF_END LABEL BYTE
 0952                        C3	$M_MSGSERV_2 PROC FAR
 0952  0E                    C3	        PUSH    CS
 0953  07                    C3	        POP     ES
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:18
C to Message Retriever                                      Page     1-41
DOS - Message Retriever - DISPMSG.ASM Module                

 0954  8D 3E 093B R          C3	        LEA     DI,$M_CLASS_2_STRUC
 0958  83 C1 1D              C3	        ADD     CX,$-$M_CLASS_2_STRUC
 095B  CB                    C3	        RET
 095C                        C3	$M_MSGSERV_2 Endp
				
				
 095C				data_sysloadmsg proc far
				
 095C  55				push	bp			; save user's base pointer      ;AC010;
 095D  8B EC				mov	bp,sp			; set bp to current sp		;AC010;
 095F  57				push	di			; save some registers		;AC010;
 0960  56				push	si							;AC010;
				
				;	copy C inregs into proper registers
				
 0961  8B 7E 08				mov	di,[bp+4+4]		  ; fix di (arg 0)		;AC010;
				
				;-------------------------------------------------------------------
				
 0964  8B 45 0A				mov	ax,[di+0ah]		; load di			;AC010;
 0967  50				push	ax			; the di value from inregs is now on stack ;AC010;
				
 0968  8B 05				mov	ax,[di+00]		; get inregs.x.ax		;AC010;
 096A  8B 5D 02				mov	bx,[di+02]		; get inregs.x.bx		;AC010;
 096D  8B 4D 04				mov	cx,[di+04]		; get inregs.x.cx		;AC010;
 0970  8B 55 06				mov	dx,[di+06]		; get inregs.x.dx		;AC010;
 0973  8B 75 08				mov	si,[di+08]		; get inregs.x.si		;AC010;
 0976  5F				pop	di			; get inregs.x.di from stack	;AC010;
				
 0977  55				push	bp			; save base pointer		;AC010;
				
				;-------------------------------------------------------------------
				
 0978  9A 0102 ---- R			call	sysloadmsg		; call the message retriever	;AC010;
				
				;-------------------------------------------------------------------
				
 097D  5D				pop	bp			; restore base pointer		;AC010;
 097E  57				push	di			; the di value from call is now on stack ;AC010;
 097F  8B 7E 0A				mov	di,[bp+6+4]		  ; fix di (arg 1)		;AC010;
				
 0982  89 05				mov	[di+00],ax		; load outregs.x.ax		;AC010;
 0984  89 5D 02				mov	[di+02],bx		; load outregs.x.bx		;AC010;
 0987  89 4D 04				mov	[di+04],cx		; load outregs.x.cx		;AC010;
 098A  89 55 06				mov	[di+06],dx		; load outregs.x.dx		;AC010;
 098D  89 75 08				mov	[di+08],si		; load outregs.x.si		;AC010;
				
 0990  9F				lahf				; get flags into ax		;AC010;
 0991  8A C4				mov	al,ah			; move into low byte		;AC010;
 0993  89 45 0C				mov	[di+0ch],ax		; load outregs.x.cflag		;AC010;
				
 0996  58				pop	ax			; get di from stack		;AC010;
 0997  89 45 0A				mov	[di+0ah],ax		; load outregs.x.di		;AC010;
				
				;-------------------------------------------------------------------
				
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:18
C to Message Retriever                                      Page     1-42
DOS - Message Retriever - DISPMSG.ASM Module                

 099A  5E				pop	si			; restore registers		;AC010;
 099B  5F				pop	di							;AC010;
 099C  8B E5				mov	sp,bp			; restore sp			;AC010;
 099E  5D				pop	bp			; restore user's bp             ;AC010;
 099F  CB				ret
				
 09A0				data_sysloadmsg endp							;AC010;
				
				
 09A0				data_sysdispmsg proc far						;AC010;
				
 09A0  55				push	bp			; save user's base pointer      ;AC010;
 09A1  8B EC				mov	bp,sp			; set bp to current sp		;AC010;
 09A3  57				push	di			; save some registers		;AC010;
 09A4  56				push	si							;AC010;
				
				;	copy C inregs into proper registers
				
 09A5  8B 7E 08				mov	di,[bp+4+4]		  ; fix di (arg 0)		;AC010;
				
				;-------------------------------------------------------------------
				
 09A8  8B 45 0A				mov	ax,[di+0ah]		; load di			;AC010;
 09AB  50				push	ax			; the di value from inregs is now on stack ;AC010;
				
 09AC  8B 05				mov	ax,[di+00]		; get inregs.x.ax		;AC010;
 09AE  8B 5D 02				mov	bx,[di+02]		; get inregs.x.bx		;AC010;
 09B1  8B 4D 04				mov	cx,[di+04]		; get inregs.x.cx		;AC010;
 09B4  8B 55 06				mov	dx,[di+06]		; get inregs.x.dx		;AC010;
 09B7  8B 75 08				mov	si,[di+08]		; get inregs.x.si		;AC010;
 09BA  5F				pop	di			; get inregs.x.di from stack	;AC010;
				
 09BB  55				push	bp			; save base pointer		;AC010;
				
				;-------------------------------------------------------------------
				
 09BC  9A 03AA ---- R			call	sysdispmsg						;AC010;
				
				;-------------------------------------------------------------------
				
 09C1  5D				pop	bp			; restore base pointer		;AC010;
 09C2  57				push	di			; the di value from call is now on stack ;AC010;
 09C3  8B 7E 0A				mov	di,[bp+6+4]		  ; fix di (arg 1)		;AC010;
				
 09C6  89 05				mov	[di+00],ax		; load outregs.x.ax		;AC010;
 09C8  89 5D 02				mov	[di+02],bx		; load outregs.x.bx		;AC010;
 09CB  89 4D 04				mov	[di+04],cx		; load outregs.x.cx		;AC010;
 09CE  89 55 06				mov	[di+06],dx		; load outregs.x.dx		;AC010;
 09D1  89 75 08				mov	[di+08],si		; load outregs.x.si		;AC010;
				
 09D4  9F				lahf				; get flags into ax		;AC010;
 09D5  8A C4				mov	al,ah			; move into low byte		;AC010;
 09D7  89 45 0C				mov	[di+0ch],ax		; load outregs.x.cflag		;AC010;
				
 09DA  58				pop	ax			; get di from stack		;AC010;
 09DB  89 45 0A				mov	[di+0ah],ax		; load outregs.x.di		;AC010;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:18
C to Message Retriever                                      Page     1-43
DOS - Message Retriever - DISPMSG.ASM Module                

				
				;-------------------------------------------------------------------
				
 09DE  5E				pop	si			; restore registers		;AC010;
 09DF  5F				pop	di							;AC010;
 09E0  8B E5				mov	sp,bp			; restore sp			;AC010;
 09E2  5D				pop	bp			; restore user's bp             ;AC010;
 09E3  CB				ret								;AC010;
				
 09E4				data_sysdispmsg endp							;AC010;
				
				
 09E4				data_sysgetmsg	proc far						;AC010;
				
 09E4  55				push	bp			; save user's base pointer      ;AC010;
 09E5  8B EC				mov	bp,sp			; set bp to current sp		;AC010;
 09E7  57				push	di			; save some registers		;AC010;
 09E8  56				push	si							;AC010;
				
				;	copy C inregs into proper registers
				
 09E9  8B 7E 08				mov	di,[bp+4+4]		  ; fix di (arg 0)		;AC010;
				
				;-------------------------------------------------------------------
				
 09EC  8B 45 0A				mov	ax,[di+0ah]		; load di			;AC010;
 09EF  50				push	ax			; the di value from inregs is now on stack ;AC010;
				
 09F0  8B 05				mov	ax,[di+00]		; get inregs.x.ax		;AC010;
 09F2  8B 5D 02				mov	bx,[di+02]		; get inregs.x.bx		;AC010;
 09F5  8B 4D 04				mov	cx,[di+04]		; get inregs.x.cx		;AC010;
 09F8  8B 55 06				mov	dx,[di+06]		; get inregs.x.dx		;AC010;
 09FB  8B 75 08				mov	si,[di+08]		; get inregs.x.si		;AC010;
 09FE  5F				pop	di			; get inregs.x.di from stack	;AC010;
				
 09FF  55				push	bp			; save base pointer		;AC010;
				
				;-------------------------------------------------------------------
				
 0A00  9A 0266 ---- R			call	sysgetmsg		; call the message retriever	;AC010;
				
				;-------------------------------------------------------------------
				
 0A05  5D				pop	bp			; restore base pointer		;AC010;
 0A06  57				push	di			; the di value from call is now on stack ;AC010;
 0A07  8B 7E 0A				mov	di,[bp+6+4]		  ; fix di (arg 1)		;AC010;
				
 0A0A  50				push	ax			; save ax			;AC010;
 0A0B  8C 05				mov	[di+00],es		; load segregs.es		;AC010;
 0A0D  8C 5D 06				mov	[di+06],ds		; load outregs.ds		;AC010;
 0A10  58				pop	ax			; restore ax			;AC010;
				
 0A11  5F				pop	di			; restore di			;AC010;
 0A12  57				push	di			; save it			;AC010;
 0A13  8B 7E 0C				mov	di,[bp+8+4]		  ; fix di (arg 2)		;AC010;
 0A16  89 05				mov	[di+00],ax		; load outregs.x.ax		;AC010;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:18
C to Message Retriever                                      Page     1-44
DOS - Message Retriever - DISPMSG.ASM Module                

 0A18  89 5D 02				mov	[di+02],bx		; load outregs.x.bx		;AC010;
 0A1B  89 4D 04				mov	[di+04],cx		; load outregs.x.cx		;AC010;
 0A1E  89 55 06				mov	[di+06],dx		; load outregs.x.dx		;AC010;
 0A21  89 75 08				mov	[di+08],si		; load outregs.x.si		;AC010;
				
 0A24  9F				lahf				; get flags into ax		;AC010;
 0A25  8A C4				mov	al,ah			; move into low byte		;AC010;
 0A27  89 45 0C				mov	[di+0ch],ax		; load outregs.x.cflag		;AC010;
				
 0A2A  58				pop	ax			; get di from stack		;AC010;
 0A2B  89 45 0A				mov	[di+0ah],ax		; load outregs.x.di		;AC010;
				
				;-------------------------------------------------------------------
				
 0A2E  5E				pop	si			; restore registers		;AC010;
 0A2F  5F				pop	di							;AC010;
 0A30  8B E5				mov	sp,bp			; restore sp			;AC010;
 0A32  5D				pop	bp			; restore user's bp             ;AC010;
 0A33  CB				ret								;AC010;
				
 0A34				data_sysgetmsg	endp							;AC010;
				
				
 0A34				_DATA	ends			; end code segment			;AC010;
				
 0000				_TEXT	SEGMENT 							;AC010;
				
					assume cs:_TEXT 						;AC010;
				
					public	_sysdispmsg						;AC010;
					public	_sysloadmsg						;AC010;
					public	_sysgetmsg						;AC010;
				
 0000				_sysdispmsg	proc	near						;AC010;
 0000  9A 09A0 ---- R				call	data_sysdispmsg 				;AC010;
 0005  C3					ret							;AC010;
 0006				_sysdispmsg	endp							;AC010;
				
 0006				_sysloadmsg	proc	near						;AC010;
 0006  9A 095C ---- R				call	data_sysloadmsg 				;AC010;
 000B  C3					ret							;AC010;
 000C				_sysloadmsg	endp							;AC010;
				
 000C				_sysgetmsg	proc	near						;AC010;
 000C  9A 09E4 ---- R				call	data_sysgetmsg					;AC010;
 0011  C3					ret							;AC010;
 0012				_sysgetmsg	endp							;AC010;
				
 0012				_TEXT	ENDS								;AC010;
					end								;AC010;

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


Macros:

		N a m e			Lines

$M_BUILD_PTRS  . . . . . . . . .  	  18
$M_INC . . . . . . . . . . . . .  	   3
$M_MAKE  . . . . . . . . . . . .  	  10
$M_MAKE_COMR . . . . . . . . . .  	  21
$M_MAKE_COMT . . . . . . . . . .  	   5
$M_POPF  . . . . . . . . . . . .  	   5
MSG_SERVICES . . . . . . . . . .  	  34
MSG_SERVICES2  . . . . . . . . .  	  14
MSG_UTILNAME . . . . . . . . . .  	   5

Structures and Records:

                N a m e                 Width   # fields
                                        Shift   Width   Mask    Initial

$M_CLASS_ID  . . . . . . . . . .  	0004	0003
  $M_CLS_ID  . . . . . . . . . .  	0000
  $M_COMMAND_VER . . . . . . . .  	0001
  $M_NUM_CLS_MSG . . . . . . . .  	0003
$M_COUNTRY_INFO  . . . . . . . .  	005A	000A
  $M_HEADER  . . . . . . . . . .  	0000
  $M_DATE_FORMAT . . . . . . . .  	0048
  $M_CURR_SEPARA . . . . . . . .  	004A
  $M_THOU_SEPARA . . . . . . . .  	004F
  $M_DECI_SEPARA . . . . . . . .  	0051
  $M_DATE_SEPARA . . . . . . . .  	0053
  $M_TIME_SEPARA . . . . . . . .  	0055
  $M_CURR_FORMAT . . . . . . . .  	0057
  $M_SIG_DIGS_CU . . . . . . . .  	0058
  $M_TIME_FORMAT . . . . . . . .  	0059
$M_ID  . . . . . . . . . . . . .  	0004	0002
  $M_NUM . . . . . . . . . . . .  	0000
  $M_TXT_PTR . . . . . . . . . .  	0002
$M_RES_ADDRS . . . . . . . . . .  	0089	0017
  $M_EXT_ERR_ADDRS . . . . . . .  	0000
  $M_EXT_FILE  . . . . . . . . .  	0004
  $M_EXT_COMMAND . . . . . . . .  	0008
  $M_EXT_TERM  . . . . . . . . .  	000C
  $M_PARSE_COMMAND . . . . . . .  	0010
  $M_PARSE_ADDRS . . . . . . . .  	0014
  $M_PARSE_TERM  . . . . . . . .  	0018
  $M_CRIT_ADDRS  . . . . . . . .  	001C
  $M_CRIT_COMMAND  . . . . . . .  	0020
  $M_CRIT_TERM . . . . . . . . .  	0024
  $M_DISK_PROC_ADDR  . . . . . .  	0028
  $M_CLASS_ADDRS . . . . . . . .  	002C
  $M_CLS_TERM  . . . . . . . . .  	0034
  $M_DBCS_VEC  . . . . . . . . .  	0038
  $M_HANDLE  . . . . . . . . . .  	003C
  $M_SIZE  . . . . . . . . . . .  	003E
  $M_CRLF  . . . . . . . . . . .  	003F
  $M_CLASS . . . . . . . . . . .  	0041
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:18
C to Message Retriever                                      Symbols-2


  $M_RETURN_ADDR . . . . . . . .  	0042
  $M_MSG_NUM . . . . . . . . . .  	0044
  $M_DIVISOR . . . . . . . . . .  	0046
  $M_TEMP_BUF  . . . . . . . . .  	0048
  $M_BUF_TERM  . . . . . . . . .  	0088
$M_SUBLIST_STRUC . . . . . . . .  	000B	0008
  $M_S_SIZE  . . . . . . . . . .  	0000
  $M_S_RESV  . . . . . . . . . .  	0001
  $M_S_VALUE . . . . . . . . . .  	0002
  $M_S_ID  . . . . . . . . . . .  	0006
  $M_S_FLAG  . . . . . . . . . .  	0007
  $M_S_MAXW  . . . . . . . . . .  	0008
  $M_S_MINW  . . . . . . . . . .  	0009
  $M_S_PAD . . . . . . . . . . .  	000A

Segments and Groups:

                N a m e         	Length	 Align	Combine Class

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

Symbols:            

                N a m e         	Type	 Value	 Attr

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

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

CHARMSG  . . . . . . . . . . . .  	NUMBER	FFFF	
CHAR_FIELD_ASCIIZ  . . . . . . .  	NUMBER	0010	
CHAR_FIELD_CHAR  . . . . . . . .  	NUMBER	0000	
CHAR_TYPE  . . . . . . . . . . .  	NUMBER	0000	
CHECK_AMIS . . . . . . . . . . .  	L NEAR	01EE	_DATA
CHECK_AMIS_DONE  . . . . . . . .  	L NEAR	0225	_DATA
CHECK_AMIS_LOOP  . . . . . . . .  	L NEAR	01F7	_DATA
CHECK_AMIS_NEXT  . . . . . . . .  	L NEAR	0220	_DATA
CHECK_AMIS_UNSUP . . . . . . . .  	L NEAR	0224	_DATA
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:18
C to Message Retriever                                      Symbols-3


CLASS_1_MESSAGECOUNT . . . . . .  	NUMBER	0001	
CLASS_2_MESSAGECOUNT . . . . . .  	NUMBER	0001	
CLASS_A_MESSAGECOUNT . . . . . .  	NUMBER	0006	
CLASS_B_MESSAGECOUNT . . . . . .  	NUMBER	0004	
COLON  . . . . . . . . . . . . .  	NUMBER	003A	
COMR . . . . . . . . . . . . . .  	NUMBER	0000	
COMT . . . . . . . . . . . . . .  	NUMBER	0000	
CR . . . . . . . . . . . . . . .  	NUMBER	000D	

data_sysdispmsg  . . . . . . . .  	F PROC	09A0	_DATA	Global	Length = 0044
data_sysgetmsg . . . . . . . . .  	F PROC	09E4	_DATA	Global	Length = 0050
data_sysloadmsg  . . . . . . . .  	F PROC	095C	_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:18
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	03AA	_DATA	Length = 0047
SYSGETMSG  . . . . . . . . . . .  	F PROC	0266	_DATA	Length = 001E
SYSLOADMSG . . . . . . . . . . .  	F PROC	0102	_DATA	Length = 00AE

Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:18
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	0451	_DATA
$MDO139  . . . . . . . . . . . .  	L NEAR	04B9	_DATA
$MDO145  . . . . . . . . . . . .  	L NEAR	04DB	_DATA
$MDO165  . . . . . . . . . . . .  	L NEAR	053D	_DATA
$MDO167  . . . . . . . . . . . .  	L NEAR	0547	_DATA
$MDO175  . . . . . . . . . . . .  	L NEAR	0573	_DATA
$MDO215  . . . . . . . . . . . .  	L NEAR	063E	_DATA
$MDO280  . . . . . . . . . . . .  	L NEAR	0690	_DATA
$MDO291  . . . . . . . . . . . .  	L NEAR	06BB	_DATA
$MDO301  . . . . . . . . . . . .  	L NEAR	06E9	_DATA
$MDO310  . . . . . . . . . . . .  	L NEAR	070F	_DATA
$MDO321  . . . . . . . . . . . .  	L NEAR	0751	_DATA
$MDO36 . . . . . . . . . . . . .  	L NEAR	028A	_DATA
$MDO76 . . . . . . . . . . . . .  	L NEAR	0372	_DATA
$MEN104  . . . . . . . . . . . .  	L NEAR	03F0	_DATA
$MEN107  . . . . . . . . . . . .  	L NEAR	0405	_DATA
$MEN110  . . . . . . . . . . . .  	L NEAR	0426	_DATA
$MEN119  . . . . . . . . . . . .  	L NEAR	045E	_DATA
$MEN123  . . . . . . . . . . . .  	L NEAR	045E	_DATA
$MEN128  . . . . . . . . . . . .  	L NEAR	048D	_DATA
$MEN139  . . . . . . . . . . . .  	L NEAR	04D0	_DATA
$MEN145  . . . . . . . . . . . .  	L NEAR	0534	_DATA
$MEN146  . . . . . . . . . . . .  	L NEAR	04F1	_DATA
$MEN150  . . . . . . . . . . . .  	L NEAR	052F	_DATA
$MEN154  . . . . . . . . . . . .  	L NEAR	052F	_DATA
$MEN165  . . . . . . . . . . . .  	L NEAR	0629	_DATA
$MEN167  . . . . . . . . . . . .  	L NEAR	0564	_DATA
$MEN175  . . . . . . . . . . . .  	L NEAR	058C	_DATA
$MEN180  . . . . . . . . . . . .  	L NEAR	059E	_DATA
$MEN187  . . . . . . . . . . . .  	L NEAR	05D1	_DATA
$MEN188  . . . . . . . . . . . .  	L NEAR	05BF	_DATA
$MEN192  . . . . . . . . . . . .  	L NEAR	05D1	_DATA
$MEN199  . . . . . . . . . . . .  	L NEAR	0610	_DATA
$MEN20 . . . . . . . . . . . . .  	L NEAR	01AF	_DATA
$MEN200  . . . . . . . . . . . .  	L NEAR	0608	_DATA
$MEN202  . . . . . . . . . . . .  	L NEAR	0608	_DATA
$MEN211  . . . . . . . . . . . .  	L NEAR	061D	_DATA
$MEN25 . . . . . . . . . . . . .  	L NEAR	0265	_DATA
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:18
C to Message Retriever                                      Symbols-6


$MEN27 . . . . . . . . . . . . .  	L NEAR	025A	_DATA
$MEN292  . . . . . . . . . . . .  	L NEAR	06CE	_DATA
$MEN307  . . . . . . . . . . . .  	L NEAR	0717	_DATA
$MEN314  . . . . . . . . . . . .  	L NEAR	0737	_DATA
$MEN317  . . . . . . . . . . . .  	L NEAR	075E	_DATA
$MEN32 . . . . . . . . . . . . .  	L NEAR	027D	_DATA
$MEN321  . . . . . . . . . . . .  	L NEAR	075C	_DATA
$MEN325  . . . . . . . . . . . .  	L NEAR	07EB	_DATA
$MEN333  . . . . . . . . . . . .  	L NEAR	07EB	_DATA
$MEN36 . . . . . . . . . . . . .  	L NEAR	02EB	_DATA
$MEN37 . . . . . . . . . . . . .  	L NEAR	02BC	_DATA
$MEN39 . . . . . . . . . . . . .  	L NEAR	02BC	_DATA
$MEN41 . . . . . . . . . . . . .  	L NEAR	02BC	_DATA
$MEN46 . . . . . . . . . . . . .  	L NEAR	02E3	_DATA
$MEN47 . . . . . . . . . . . . .  	L NEAR	02D5	_DATA
$MEN57 . . . . . . . . . . . . .  	L NEAR	030B	_DATA
$MEN60 . . . . . . . . . . . . .  	L NEAR	0318	_DATA
$MEN64 . . . . . . . . . . . . .  	L NEAR	036F	_DATA
$MEN65 . . . . . . . . . . . . .  	L NEAR	0353	_DATA
$MEN69 . . . . . . . . . . . . .  	L NEAR	036B	_DATA
$MEN76 . . . . . . . . . . . . .  	L NEAR	038F	_DATA
$MEN78 . . . . . . . . . . . . .  	L NEAR	0383	_DATA
$MEN93 . . . . . . . . . . . . .  	L NEAR	03E4	_DATA
$MEN94 . . . . . . . . . . . . .  	L NEAR	03D0	_DATA
$MEN97 . . . . . . . . . . . . .  	L NEAR	03DE	_DATA
$MIF104  . . . . . . . . . . . .  	L NEAR	03EC	_DATA
$MIF107  . . . . . . . . . . . .  	L NEAR	0402	_DATA
$MIF110  . . . . . . . . . . . .  	L NEAR	0416	_DATA
$MIF112  . . . . . . . . . . . .  	L NEAR	0426	_DATA
$MIF113  . . . . . . . . . . . .  	L NEAR	0426	_DATA
$MIF117  . . . . . . . . . . . .  	L NEAR	042B	_DATA
$MIF119  . . . . . . . . . . . .  	L NEAR	044F	_DATA
$MIF120  . . . . . . . . . . . .  	L NEAR	044D	_DATA
$MIF127  . . . . . . . . . . . .  	L NEAR	048E	_DATA
$MIF128  . . . . . . . . . . . .  	L NEAR	048B	_DATA
$MIF129  . . . . . . . . . . . .  	L NEAR	0489	_DATA
$MIF134  . . . . . . . . . . . .  	L NEAR	04AE	_DATA
$MIF135  . . . . . . . . . . . .  	L NEAR	04AE	_DATA
$MIF138  . . . . . . . . . . . .  	L NEAR	04D0	_DATA
$MIF141  . . . . . . . . . . . .  	L NEAR	04CC	_DATA
$MIF146  . . . . . . . . . . . .  	L NEAR	04EE	_DATA
$MIF150  . . . . . . . . . . . .  	L NEAR	050D	_DATA
$MIF151  . . . . . . . . . . . .  	L NEAR	050B	_DATA
$MIF154  . . . . . . . . . . . .  	L NEAR	051F	_DATA
$MIF155  . . . . . . . . . . . .  	L NEAR	051D	_DATA
$MIF158  . . . . . . . . . . . .  	L NEAR	052F	_DATA
$MIF159  . . . . . . . . . . . .  	L NEAR	052F	_DATA
$MIF166  . . . . . . . . . . . .  	L NEAR	0564	_DATA
$MIF169  . . . . . . . . . . . .  	L NEAR	055F	_DATA
$MIF173  . . . . . . . . . . . .  	L NEAR	059E	_DATA
$MIF174  . . . . . . . . . . . .  	L NEAR	059E	_DATA
$MIF175  . . . . . . . . . . . .  	L NEAR	0580	_DATA
$MIF180  . . . . . . . . . . . .  	L NEAR	059B	_DATA
$MIF187  . . . . . . . . . . . .  	L NEAR	05C1	_DATA
$MIF188  . . . . . . . . . . . .  	L NEAR	05BE	_DATA
$MIF192  . . . . . . . . . . . .  	L NEAR	05C8	_DATA
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:18
C to Message Retriever                                      Symbols-7


$MIF194  . . . . . . . . . . . .  	L NEAR	05CF	_DATA
$MIF199  . . . . . . . . . . . .  	L NEAR	060D	_DATA
$MIF20 . . . . . . . . . . . . .  	L NEAR	01AB	_DATA
$MIF200  . . . . . . . . . . . .  	L NEAR	05EE	_DATA
$MIF202  . . . . . . . . . . . .  	L NEAR	0608	_DATA
$MIF211  . . . . . . . . . . . .  	L NEAR	0619	_DATA
$MIF216  . . . . . . . . . . . .  	L NEAR	064C	_DATA
$MIF23 . . . . . . . . . . . . .  	L NEAR	01C5	_DATA
$MIF25 . . . . . . . . . . . . .  	L NEAR	024D	_DATA
$MIF27 . . . . . . . . . . . . .  	L NEAR	0257	_DATA
$MIF276  . . . . . . . . . . . .  	L NEAR	0676	_DATA
$MIF278  . . . . . . . . . . . .  	L NEAR	06A4	_DATA
$MIF279  . . . . . . . . . . . .  	L NEAR	06A4	_DATA
$MIF281  . . . . . . . . . . . .  	L NEAR	06A0	_DATA
$MIF286  . . . . . . . . . . . .  	L NEAR	06B7	_DATA
$MIF287  . . . . . . . . . . . .  	L NEAR	06B7	_DATA
$MIF290  . . . . . . . . . . . .  	L NEAR	06DF	_DATA
$MIF292  . . . . . . . . . . . .  	L NEAR	06CD	_DATA
$MIF295  . . . . . . . . . . . .  	L NEAR	06DB	_DATA
$MIF299  . . . . . . . . . . . .  	L NEAR	06FD	_DATA
$MIF300  . . . . . . . . . . . .  	L NEAR	06FD	_DATA
$MIF302  . . . . . . . . . . . .  	L NEAR	06F9	_DATA
$MIF307  . . . . . . . . . . . .  	L NEAR	070B	_DATA
$MIF309  . . . . . . . . . . . .  	L NEAR	0717	_DATA
$MIF31 . . . . . . . . . . . . .  	L NEAR	027F	_DATA
$MIF314  . . . . . . . . . . . .  	L NEAR	0733	_DATA
$MIF317  . . . . . . . . . . . .  	L NEAR	0751	_DATA
$MIF318  . . . . . . . . . . . .  	L NEAR	074F	_DATA
$MIF32 . . . . . . . . . . . . .  	L NEAR	027B	_DATA
$MIF325  . . . . . . . . . . . .  	L NEAR	0797	_DATA
$MIF326  . . . . . . . . . . . .  	L NEAR	0789	_DATA
$MIF327  . . . . . . . . . . . .  	L NEAR	0783	_DATA
$MIF330  . . . . . . . . . . . .  	L NEAR	0795	_DATA
$MIF333  . . . . . . . . . . . .  	L NEAR	07C3	_DATA
$MIF334  . . . . . . . . . . . .  	L NEAR	07B5	_DATA
$MIF335  . . . . . . . . . . . .  	L NEAR	07AF	_DATA
$MIF338  . . . . . . . . . . . .  	L NEAR	07C1	_DATA
$MIF341  . . . . . . . . . . . .  	L NEAR	07DF	_DATA
$MIF342  . . . . . . . . . . . .  	L NEAR	07D9	_DATA
$MIF345  . . . . . . . . . . . .  	L NEAR	07EB	_DATA
$MIF349  . . . . . . . . . . . .  	L NEAR	07F7	_DATA
$MIF37 . . . . . . . . . . . . .  	L NEAR	0297	_DATA
$MIF39 . . . . . . . . . . . . .  	L NEAR	02A4	_DATA
$MIF41 . . . . . . . . . . . . .  	L NEAR	02B6	_DATA
$MIF46 . . . . . . . . . . . . .  	L NEAR	02D7	_DATA
$MIF47 . . . . . . . . . . . . .  	L NEAR	02C9	_DATA
$MIF51 . . . . . . . . . . . . .  	L NEAR	02DF	_DATA
$MIF56 . . . . . . . . . . . . .  	L NEAR	031A	_DATA
$MIF57 . . . . . . . . . . . . .  	L NEAR	030A	_DATA
$MIF60 . . . . . . . . . . . . .  	L NEAR	0312	_DATA
$MIF64 . . . . . . . . . . . . .  	L NEAR	0355	_DATA
$MIF65 . . . . . . . . . . . . .  	L NEAR	034F	_DATA
$MIF69 . . . . . . . . . . . . .  	L NEAR	0362	_DATA
$MIF71 . . . . . . . . . . . . .  	L NEAR	036B	_DATA
$MIF75 . . . . . . . . . . . . .  	L NEAR	039C	_DATA
$MIF76 . . . . . . . . . . . . .  	L NEAR	0387	_DATA
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:18
C to Message Retriever                                      Symbols-8


$MIF78 . . . . . . . . . . . . .  	L NEAR	0380	_DATA
$MIF86 . . . . . . . . . . . . .  	L NEAR	039C	_DATA
$MIF87 . . . . . . . . . . . . .  	L NEAR	0398	_DATA
$MIF91 . . . . . . . . . . . . .  	L NEAR	03A4	_DATA
$MIF93 . . . . . . . . . . . . .  	L NEAR	03E0	_DATA
$MIF94 . . . . . . . . . . . . .  	L NEAR	03CD	_DATA
$MIF97 . . . . . . . . . . . . .  	L NEAR	03DA	_DATA
$MLL149  . . . . . . . . . . . .  	L NEAR	04FB	_DATA
$MLL168  . . . . . . . . . . . .  	L NEAR	0556	_DATA
$MLL178  . . . . . . . . . . . .  	L NEAR	0588	_DATA
$MLL202  . . . . . . . . . . . .  	L NEAR	0600	_DATA
$MLL214  . . . . . . . . . . . .  	L NEAR	0629	_DATA
$MSR175  . . . . . . . . . . . .  	L NEAR	059E	_DATA
$MSR76 . . . . . . . . . . . . .  	L NEAR	0390	_DATA
$MXL2  . . . . . . . . . . . . .  	L NEAR	02EB	_DATA
$MXL3  . . . . . . . . . . . . .  	L NEAR	05AB	_DATA
$MXL4  . . . . . . . . . . . . .  	L NEAR	0629	_DATA
$M_1_FF_END  . . . . . . . . . .  	L BYTE	0931	_DATA
$M_1_FF_MSG  . . . . . . . . . .  	L BYTE	091F	_DATA
$M_1_FF_STRUC  . . . . . . . . .  	L BYTE	091B	_DATA
$M_2_FF_END  . . . . . . . . . .  	L BYTE	0952	_DATA
$M_2_FF_MSG  . . . . . . . . . .  	L BYTE	0943	_DATA
$M_2_FF_STRUC  . . . . . . . . .  	L BYTE	093F	_DATA
$M_ADDR_SZ_FAR . . . . . . . . .  	NUMBER	0004	
$M_ADDR_SZ_NEAR  . . . . . . . .  	NUMBER	0002	
$M_ADD_CRLF  . . . . . . . . . .  	N PROC	0498	_DATA	Length = 0017
$M_ALIGN_MASK  . . . . . . . . .  	NUMBER	0080	
$M_AM  . . . . . . . . . . . . .  	NUMBER	0061	
$M_A_00001H_END  . . . . . . . .  	L BYTE	082D	_DATA
$M_A_00001H_MSG  . . . . . . . .  	L BYTE	0815	_DATA
$M_A_00001H_STRUC  . . . . . . .  	L BYTE	07FD	_DATA
$M_A_00002H_END  . . . . . . . .  	L BYTE	0844	_DATA
$M_A_00002H_MSG  . . . . . . . .  	L BYTE	082D	_DATA
$M_A_00002H_STRUC  . . . . . . .  	L BYTE	0801	_DATA
$M_A_00003H_END  . . . . . . . .  	L BYTE	0861	_DATA
$M_A_00003H_MSG  . . . . . . . .  	L BYTE	0844	_DATA
$M_A_00003H_STRUC  . . . . . . .  	L BYTE	0805	_DATA
$M_A_00008H_END  . . . . . . . .  	L BYTE	0875	_DATA
$M_A_00008H_MSG  . . . . . . . .  	L BYTE	0861	_DATA
$M_A_00008H_STRUC  . . . . . . .  	L BYTE	0809	_DATA
$M_A_00009H_END  . . . . . . . .  	L BYTE	0878	_DATA
$M_A_00009H_MSG  . . . . . . . .  	L BYTE	0875	_DATA
$M_A_00009H_STRUC  . . . . . . .  	L BYTE	080D	_DATA
$M_A_0000AH_END  . . . . . . . .  	L BYTE	087B	_DATA
$M_A_0000AH_MSG  . . . . . . . .  	L BYTE	0878	_DATA
$M_A_0000AH_STRUC  . . . . . . .  	L BYTE	0811	_DATA
$M_BASE10  . . . . . . . . . . .  	NUMBER	000A	
$M_BASE16  . . . . . . . . . . .  	NUMBER	0010	
$M_BIN2ASC_REPLACE . . . . . . .  	N PROC	0760	_DATA	Length = 0099
$M_BYTE  . . . . . . . . . . . .  	NUMBER	0010	
$M_B_00004H_END  . . . . . . . .  	L BYTE	08BD	_DATA
$M_B_00004H_MSG  . . . . . . . .  	L BYTE	089A	_DATA
$M_B_00004H_STRUC  . . . . . . .  	L BYTE	088A	_DATA
$M_B_00005H_END  . . . . . . . .  	L BYTE	08D6	_DATA
$M_B_00005H_MSG  . . . . . . . .  	L BYTE	08BD	_DATA
$M_B_00005H_STRUC  . . . . . . .  	L BYTE	088E	_DATA
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:18
C to Message Retriever                                      Symbols-9


$M_B_00006H_END  . . . . . . . .  	L BYTE	08F1	_DATA
$M_B_00006H_MSG  . . . . . . . .  	L BYTE	08D6	_DATA
$M_B_00006H_STRUC  . . . . . . .  	L BYTE	0892	_DATA
$M_B_00007H_END  . . . . . . . .  	L BYTE	090C	_DATA
$M_B_00007H_MSG  . . . . . . . .  	L BYTE	08F1	_DATA
$M_B_00007H_STRUC  . . . . . . .  	L BYTE	0896	_DATA
$M_CHAR_ONLY . . . . . . . . . .  	NUMBER	0000	
$M_CHAR_REPLACE  . . . . . . . .  	N PROC	0738	_DATA	Length = 0028
$M_CHECKSTDIN  . . . . . . . . .  	N PROC	01C8	_DATA	Length = 0013
$M_CHECKSTDOUT . . . . . . . . .  	N PROC	01DB	_DATA	Length = 0013
$M_CLASS_1_STRUC . . . . . . . .  	L BYTE	0917	_DATA
$M_CLASS_2_STRUC . . . . . . . .  	L BYTE	093B	_DATA
$M_CLASS_A_STRUC . . . . . . . .  	L BYTE	07F9	_DATA
$M_CLASS_B_STRUC . . . . . . . .  	L BYTE	0886	_DATA
$M_CLASS_ID_SZ . . . . . . . . .  	NUMBER	0004	
$M_CLASS_NOT_EXIST . . . . . . .  	NUMBER	0000	
$M_CLS_1 . . . . . . . . . . . .  	F PROC	087B	_DATA	Global	Length = 000B
$M_CLS_2 . . . . . . . . . . . .  	F PROC	090C	_DATA	Global	Length = 000B
$M_COMMA . . . . . . . . . . . .  	NUMBER	002C	
$M_CONVERT2ASC . . . . . . . . .  	N PROC	04D3	_DATA	Length = 006A
$M_CON_INP . . . . . . . . . . .  	NUMBER	-0001	
$M_COUNT . . . . . . . . . . . .  	NUMBER	0002	
$M_CRIT_ERR_MASK . . . . . . . .  	NUMBER	0001	
$M_CRIT_HI . . . . . . . . . . .  	NUMBER	0027	
$M_CRIT_LO . . . . . . . . . . .  	NUMBER	0013	
$M_CRLF_SIZE . . . . . . . . . .  	NUMBER	0002	
$M_CR_LF . . . . . . . . . . . .  	NUMBER	0A0D	
$M_DATE_MASK . . . . . . . . . .  	NUMBER	0010	
$M_DBCS_TERM . . . . . . . . . .  	NUMBER	0000	
$M_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	042C	_DATA	Length = 0035
$M_DISPLAY_H_STRING  . . . . . .  	N PROC	0461	_DATA	Length = 002E
$M_DISPLAY_MESSAGE . . . . . . .  	N PROC	053D	_DATA	Length = 00F3
$M_DISPLAY_REPLACE . . . . . . .  	N PROC	065D	_DATA	Length = 00BF
$M_DISPLAY_STRING  . . . . . . .  	N PROC	03F1	_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	0630	_DATA	Length = 002D
$M_FIND_SPECIFIED_MSG  . . . . .  	N PROC	0333	_DATA	Length = 0077
$M_FIRST_THOU  . . . . . . . . .  	NUMBER	0003	
$M_FLUSH_BUF . . . . . . . . . .  	N PROC	071C	_DATA	Length = 001C
$M_GET_DBCS_VEC  . . . . . . . .  	N PROC	01B0	_DATA	Length = 0018
$M_GET_EXT_ERR_39  . . . . . . .  	N PROC	048F	_DATA	Length = 0009
$M_GET_MSG_ADDRESS . . . . . . .  	F PROC	0284	_DATA	Length = 00A0
$M_ID_SZ . . . . . . . . . . . .  	NUMBER	0004	
$M_INCLUDE . . . . . . . . . . .  	NUMBER	FFFF	
$M_INDEX . . . . . . . . . . . .  	NUMBER	0008	
$M_IS_IT_DBCS  . . . . . . . . .  	N PROC	04AF	_DATA	Length = 0024
$M_LOAD  . . . . . . . . . . . .  	NUMBER	FFFF	
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:18
C to Message Retriever                                      Symbols-10


$M_MAX_2_YEAR  . . . . . . . . .  	NUMBER	0063	
$M_MSGDATA_ONLY  . . . . . . . .  	NUMBER	0000	
$M_MSGSERV_1 . . . . . . . . . .  	F PROC	0931	_DATA	Global	Length = 000A
$M_MSGSERV_2 . . . . . . . . . .  	F PROC	0952	_DATA	Global	Length = 000A
$M_NEG_SIGN  . . . . . . . . . .  	NUMBER	002D	
$M_NEXT_DBCS_VECTOR  . . . . . .  	NUMBER	0002	
$M_NO_CRLF_MASK  . . . . . . . .  	NUMBER	0080	
$M_NO_HANDLE . . . . . . . . . .  	NUMBER	-0001	
$M_NULL  . . . . . . . . . . . .  	NUMBER	0000	
$M_NUM_CLS . . . . . . . . . . .  	NUMBER	0002	
$M_ONE_REPLACE . . . . . . . . .  	NUMBER	0001	
$M_PARSE_FLAG  . . . . . . . . .  	NUMBER	FFFF	
$M_PAR_CLS . . . . . . . . . . .  	NUMBER	FFFF	
$M_PM  . . . . . . . . . . . . .  	NUMBER	0070	
$M_REPLACE . . . . . . . . . . .  	NUMBER	FFFF	
$M_REPL_DONE . . . . . . . . . .  	NUMBER	0000	
$M_RES_ADDRS_SZ  . . . . . . . .  	NUMBER	0089	
$M_RT  . . . . . . . . . . . . .  	L BYTE	0000	_DATA
$M_SECOND_THOU . . . . . . . . .  	NUMBER	0006	
$M_SERVICE . . . . . . . . . . .  	NUMBER	0000	
$M_SET_LEN_IN_CX . . . . . . . .  	N PROC	0324	_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	0237	_DATA	Length = 002F
$M_WORD  . . . . . . . . . . . .  	NUMBER	0020	
??0000 . . . . . . . . . . . . .  	L NEAR	031C	_DATA
@CPU . . . . . . . . . . . . . .  	TEXT  0101h		
@FILENAME  . . . . . . . . . . .  	TEXT  _msgret		
@VERSION . . . . . . . . . . . .  	TEXT  510		
_sysdispmsg  . . . . . . . . . .  	N PROC	0000	_TEXT	Global	Length = 0006
_sysgetmsg . . . . . . . . . . .  	N PROC	000C	_TEXT	Global	Length = 0006
_sysloadmsg  . . . . . . . . . .  	N PROC	0006	_TEXT	Global	Length = 0006

Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:18

C to Message Retriever                                      Symbols-11






  13817 Source  Lines
  18684 Total   Lines
    517 Symbols

  44550 + 184805 Bytes symbol space free

      0 Warning Errors
      0 Severe  Errors
