Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-1


					PAGE	,132								;AN000;
					TITLE	DOS - GRAPHICS Command  -	Installation Modules		;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;					;AN000;
				;; DOS - GRAPHICS Command
				;; (C) Copyright 1988 Microsoft
				;;										;AN000;
				;; File Name:  GRINST.ASM							;AN000;
				;; ----------									;AN000;
				;;										;AN000;
				;; Description: 								;AN000;
				;; ------------ 								;AN000;
				;;	 This file contains the installation modules for the			;AN000;
				;;	 GRAPHICS command.							;AN000;
				;;										;AN000;
				;;	 GRAPHICS_INSTALL is the main module.					;AN000;
				;;										;AN000;
				;;	 GRAPHICS_INSTALL calls modules in GRLOAD.ASM to load			;AN000;
				;;	 the GRAPHICS profile and GRPARMS.ASM to parse the command line.	;AN000;
				;;										;AN000;
				;;										;AN000;
				;; Documentation Reference:							;AN000;
				;; ------------------------							;AN000;
				;;	 OASIS High Level Design						;AN000;
				;;	 OASIS GRAPHICS I1 Overview						;AN000;
				;;	 DOS 3.3 Message Retriever Interface Supplement. 			;AN000;
				;;	 TUPPER I0 Document - PARSER HIGH LEVEL DESIGN REVIEW			;AN000;
				;;										;AN000;
				;; Procedures Contained in This File:						;AN000;
				;; ----------------------------------						;AN000;
				;;	 GRAPHICS_INSTALL - Main installation module				;AN000;
				;;	 CHAIN_INTERRUPTS - Chain interrupts 5, 2F, EGA Save Pointers		;AN000;
				;;	 COPY_PRINT_MODULES - Throw away one set of print modules		;AN000;
				;;										;AN000;
				;;										;AN000;
				;; Include Files Required:							;AN000;
				;; -----------------------							;AN000;
				;;	 GRLOAD.EXT   - Externals for profile load				;AN000;
				;;	 GRLOAD2.EXT  - Externals for profile load				;AN000;
				;;	 GRCTRL.EXT   - Externals for print screen control			;AN000;
				;;	 GRPRINT.EXT  - Externals for print modules				;AN000;
				;;	 GRCPSD.EXT   - Externals for COPY_SHARED_DATA module			;AN000;
				;;	 GRPARMS.EXT  - External for GRAPHICS command line parsing		;AN000;
				;;	 GRPARSE.EXT  - External for DOS parser 				;AN000;
				;;	 GRBWPRT.EXT  - Externals for Black and white printing modules		;AN000;
				;;	 GRCOLPRT.EXT - Externals for color printing modules			;AN000;
				;;	 GRINT2FH.EXT - Externals for Interrupt 2Fh driver.			;AN000;
				;;										;AN000;
				;;	 GRMSG.EQU    - Equates for the GRAPHICS error messages 		;AN000;
				;;	 SYSMSG.INC   - DOS message retriever					;AN000;
				;;										;AN000;
				;;	 GRSHAR.STR   - Shared Data Area Structure				;AN000;
				;;										;AN000;
				;;	 STRUC.INC    - Macros for using structured assembly language		;AN000;
				;;										;AN000;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-2


				;; External Procedure References:						;AN000;
				;; ------------------------------						;AN000;
				;;	 FROM FILE  GRLOAD.ASM: 						;AN000;
				;;	      LOAD_PROFILE - Main module for profile loading			;AN000;
				;;	 SYSPARSE   - DOS system parser 					;AN000;
				;;	 SYSDISPMSG - DOS message retriever					;AN000;
				;;										;AN000;
				;; Linkage Instructions:							;AN000;
				;; -------------------- 							;AN000;
				;;	 Refer to GRAPHICS.ASM							;AN000;
				;;										;AN000;
				;; Change History:								;AN000;
				;; ---------------								;AN000;
				;;										;AN000;
				;;										;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;					;AN000;
								       ;;					;AN000;
 0000				CODE	SEGMENT PUBLIC 'CODE'          ;;                                       ;AN000;
					ASSUME	CS:CODE,DS:CODE        ;;					;AN000;
								       ;;					;AN000;
			     C	.LIST										;AN000;
			     C						;					;AN000;
			     C	SHARED_DATA_AREA_STR STRUC		;					;AN000;
 0000  0000                  C	  SD_TOTAL_SIZE       DW    ?		; Total # bytes ALLOCATED to the	;AN000;
			     C						;  the Shared Data Area.		;AN000;
			     C	  ;;;;;;;;;;;; Environment ;;;;;;;;;;;;;;					;AN000;
 0002  00                    C	  SWITCHES	      DB    0		; Command line switches 		;AN000;
 0003  00                    C	  HARDWARE_CONFIG     DB    ?		; Type of video hardware		;AN000;
 0004  00                    C	  PRINTER_TYPE	      DB    ?		; Type of printer attached		;AN000;
			     C						;					;AN000;
			     C	  ;;;;;;;;;;;; Profile Data ;;;;;;;;;;;;;					;AN000;
 0005  00                    C	  DARKADJUST_VALUE    DB    0		; Darkness adjustment value		;AN000;
			     C						;					;AN000;
 0006  00                    C	  NUM_PRT_COLOR       DB    ?		; Number of print colors		;AN000;
 0007  0000                  C	  COLORPRINT_PTR      DW    ?		; Pointer to COLORPRINT info		;AN000;
			     C						;					;AN000;
 0009  00                    C	  NUM_PRT_BANDS       DB    ?		; Number of selectable print bands	;AN000;
 000A  0000                  C	  COLORSELECT_PTR     DW    ?		; Pointer to COLORSELECT info		;AN000;
			     C						;  bands				;AN000;
 000C  0000                  C	  DISPLAYMODE_PTR     DW  ?		; Pointer to start of DISPLAYMODE	;AN000;
			     C						;  info 				;AN000;
 000E                        C	SHARED_DATA_AREA_STR ENDS	       ;;					;AN000;
			     C											;AN000;
			     C											;AN000;
			     C	;;;;;;;;; COLORSELECT info structure ;;;;					;AN000;
			     C						;					;AN000;
			     C	COLORSELECT_STR  STRUC			;					;AN000;
 0000  00                    C	  NUM_SELECT_ESC    DB	?		; number of escape bytes to		;AN000;
			     C						;  select this band			;AN000;
 0001  00                    C	  SELECT_ESC	    DB	?		; Escape bytes to select band		;AN000;
 0002                        C	COLORSELECT_STR  ENDS		       ;;					;AN000;
			     C											;AN000;
			     C											;AN000;
			     C											;AN000;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-3


			     C	;;;;;;;;; COLORPRINT info structure ;;;;;					;AN000;
			     C						;					;AN000;
			     C	COLORPRINT_STR	STRUC			;					;AN000;
 0000  00                    C	  RED		    DB	?		; RGB value				;AN000;
 0001  00                    C	  GREEN 	    DB	?		;					;AN000;
 0002  00                    C	  BLUE		    DB	?		;					;AN000;
			     C						; Bit mask indicating color		;AN000;
 0003  00                    C	  SELECT_MASK	    DB	?		;  bands required:			;AN000;
			     C						;  Bit 0: first band in table		;AN000;
 0004                        C	COLORPRINT_STR	ENDS		       ;;  Bit 1: second band...		;AN000;
			     C											;AN000;
			     C											;AN000;
			     C	;;;;;;;;; DISPLAYMODE info structure ;;;;					;AN000;
			     C						; A new block is built when a		;AN000;
			     C	DISPLAYMODE_STR STRUC			;  DISPLAYMODE statement is		;AN000;
			     C						;   found				;AN000;
 0000  0000                  C	  NEXT_DISP_MODE    DW	?		; Pointer to info for next		;AN000;
			     C						;  display mode; -1 if last		;AN000;
 0002  00                    C	  NUM_DISP_MODE     DB	?		; Number of display modes for		;AN000;
 0003  0000                  C	  DISP_MODE_LIST_PTR DW ?		;  this record - list of them		;AN000;
			     C						;					;AN000;
 0005  00                    C	  BOX_WIDTH	    DB	?		; Print box size - horizontal		;AN000;
 0006  00                    C	  BOX_HEIGHT	    DB	?		; Print box size - vertical		;AN000;
			     C						;					;AN000;
 0007  00                    C	  NUM_PATTERNS	    DB	?		; Number of grey patterns for		;AN000;
			     C						;  this box size			;AN000;
 0008  0000                  C	  PATTERN_TAB_PTR   DW	?		; pointer to grey pattern table 	;AN000;
			     C						;  for this display mode		;AN000;
 000A  00                    C	  NUM_GRAPHICS_ESC  DB	?		; # of escape byte for GRAPHICS 	;AN000;
 000B  0000                  C	  GRAPHICS_ESC_PTR  DW	?		; pointer to GRAPHICS escape		;AN000;
 000D  0000                  C	  LOW_BYT_COUNT_PTR DW	?		; pointers to number of bytes sent	;AN000;
 000F  0000                  C	  HGH_BYT_COUNT_PTR DW	?		;  to the printer (1 word holds this	;AN000;
			     C						;    number but, must be send 1 byte	;AN000;
			     C						;     at a time).			;AN000;
 0011  00                    C	  NUM_SETUP_ESC     DB	?		; # of escape byte for SETUP		;AN000;
 0012  0000                  C	  SETUP_ESC_PTR     DW	?		; pointer to SETUP escape seq		;AN000;
			     C						;  for this display mode		;AN000;
 0014  00                    C	  NUM_RESTORE_ESC   DB	?		; # of escape byte for RESTORE		;AN000;
 0015  0000                  C	  RESTORE_ESC_PTR   DW	?		; pointer to RESTORE escape		;AN000;
			     C						;  seq for this display mode		;AN000;
 0017  00                    C	  PRINT_OPTIONS     DB	?		;					;AN000;
			     C						;					;AN000;
 0018                        C	DISPLAYMODE_STR ENDS		       ;;					;AN000;
			     C											;AN000;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;					;AN000;
			     C	;;										;AN000;
			     C	;; SHARED DATA AREA  -	EQUATES 						;AN000;
			     C	;;										;AN000;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;					;AN000;
			     C											;AN000;
			     C	; SWITCHES	      DB    <bit mask>	; Command line switches:		;AN000;
 = 0001                      C	    REVERSE_SW		EQU 1		;   /R					;AN000;
 = 0002                      C	    BACKGROUND_SW	EQU 2		;   /B					;AN000;
			     C						;					;AN000;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-4


			     C	; HARDWARE_CONFIG     DB    <bit mask>	; Type of video hardware		;AN000;
 = 0001                      C	    PALACE		EQU 1		;  attached				;AN000;
 = 0002                      C	    ROUNDUP		EQU 2		; PS 2 MODEL 50 60 AND 80		;AN000;
 = 0004                      C	    EGA 		EQU 4		; Enhance Graphics Adapter		;AN000;
 = 0008                      C	    PC_CONVERTIBLE	EQU 8		; PC Convertible LCD			;AN000;
 = 0010                      C	    OLD_ADAPTER 	EQU 16		; Color Graph. Adater or MONO		;AN000;
			     C						;					;AN000;
			     C	; PRINTER_TYPE	      DB    <bit mask>	; Type of printer attached		;AN000;
 = 0001                      C	    COLOR		EQU 1		;					;AN000;
 = 0002                      C	    BLACK_WHITE 	EQU 2		;					;AN000;
			     C						;					;AN000;
			     C	; PRINT_OPTIONS       DB  <bit mask>	;					;AN000;
 = 0001                      C	    ROTATE		EQU 1		;					;AN000;
					INCLUDE SYSMSG.INC	       ;; Include DOS message retriever 	;AN000;
			     C		PAGE	,132
			     C		SUBTTL	DOS - Message Retriever - SYSTEM CONTROL file
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;; DOS -- Message Retriever
			     C	;; (c) Copyright 1988 Microsoft
			     C	;;
			     C	;; File Name:	SYSMSG.INC
			     C	;; ----------
			     C	;;
			     C	;; Description: Message retriever functions are included into source code
			     C	;; ------------ by referencing a MSG_SERVICES macro. That macro is defined
			     C	;;		here as well as the logic to include necessary .ASM and .INC
			     C	;;		files.
			     C	;;
			     C	;;
			     C	;; Documentation Reference:
			     C	;; ------------------------
			     C	;;		DOS -Message Retriever I0 Document - Feb. ?? 1987
			     C	;;		DOS -Message Retriever I1 Document - Mar. ?? 1987
			     C	;;		DOS -Message Retriever I2 Document - Mar. ?? 1987
			     C	;;		DOS -Final Functional Specification Document - Mar ?? 1987
			     C	;;
			     C	;; Procedures Contained in This File:
			     C	;; ---------------------------------
			     C	;;		None
			     C	;;
			     C	;; Include Files Required:
			     C	;; -----------------------
			     C	;;		MSGSERV.INC	   := All message services
			     C	;;		????		   := ????
			     C	;;
			     C	;; External Procedure References:
			     C	;; ------------------------------
			     C	;;		None
			     C	;;
			     C	;; Linkage Instructions:
			     C	;; --------------------
			     C	;;		None
			     C	;;
			     C	;; Change History:
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-5
DOS - Message Retriever - SYSTEM CONTROL file               

			     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:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-6
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
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-7
DOS - Message Retriever - SYSTEM CONTROL file               

 = 0008                      C	DOS_CON_INP		EQU	08H    ;; DOS INT 21H - AH=08H := Console Input Without Echo (Check 
				CTL-BK)
 = 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
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-8
DOS - Message Retriever - SYSTEM CONTROL file               

 = 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)
 = 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  ;;  |
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-9
DOS - Message Retriever - SYSTEM CONTROL file               

 = 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  ;;  |
 = 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					       ;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-10
DOS - Message Retriever - SYSTEM CONTROL file               

			     C	ENDM				       ;
			     C					       ;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;;	MSG_SERVICES		Macro
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C						  ;
			     C	MSG_SERVICES Macro   varlist		  ;  MACRO used in source routine
			     C						  ;
			     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						  ;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-11
DOS - Message Retriever - SYSTEM CONTROL file               

			     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
			     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
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-12
DOS - Message Retriever - SYSTEM CONTROL file               

			     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
			     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	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
					INCLUDE STRUC.INC	       ;; Include macros - Structured Assembler ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-13
DOS - Message Retriever - SYSTEM CONTROL file               

			     C	;;STRUC--Stucture Macro Library
			     C	;;Optimizing Version 2.30  03/31/87
			     C	
			     C	else	       ;else for if1
			     C	$Pop	$Temp
			     C	;;if	   $Temp ne $NoType
			     C	.xcref $NoConj,$And,$Or,$Short,$Near,$NearToShort,$AndOr,$Temp,$Temp2,$Dist
			     C	.xcref $NoType,$ConjIfType,$IfType,$ElseType,$WhileType,$ConjWhileType
			     C	.xcref $RepeatType,$ConjUntilType,$ForType,$ConjLeaveType,jncxz
			     C	.xcref $SelectType,$WhenType,$OtherwiseType,$ConjWhenType
			     C	.xcref jeq,jgt,jlt,jneq,jngt,jnlt,jnna,jnnae,jnnb,jnnbe,jnnc,jnncxz
			     C	.xcref jnne,jnng,jnnge,jnnl,jnnle,jnno,jnnp,jnns,jnnz,jnpe,jnpo,$BuildJump
			     C	.xcref $GetConj,$GetDist,$Poke,$Peek,$Push,$Pop,$Label,$CondJump,$CondLoop,$Test
			     C	.xcref $TopTest,$leave2,$until2,$StrucError,j,jn,jand,jnand,jnnand
			     C	.xcref jnnonzero,jnonzero,jnzero,jzero
			     C	.xcref $st,$sn,$OrFound,$LoopEnd,$LeaveFound,$DefDist
			     C	.xcref $LastLabel,$LastLabelOrg,$EquateLabel,$TraceLabel,$CondJump2,$ncxz
			     C	endif
			     C	
			     C	
 = 0000                      C	$st	= 0
 = 0000                      C	$sn	= 0
 = 0000                      C	$OrFound = 0
 = 0000                      C	$LoopEnd = 0
 = 0000                      C	$LeaveFound = 0
 =-0001                      C	$LastLabel = -1
 = 0000                      C	$LastLabelOrg = $
 = 0003                      C	$DefDist= $Short
			     C	$Push	%$NoType
					INCLUDE GRLOAD.EXT	       ;; Bring in external declarations	;AN000;
			     C	.LIST										;AN000;
					INCLUDE GRLOAD2.EXT	       ;;					;AN000;
			     C	.LIST										;AN000;
					INCLUDE GRLOAD3.EXT	       ;;					;AN000;
			     C	.LIST										;AN000;
					INCLUDE GRCTRL.EXT	       ;;					;AN000;
			     C	PAGE	,132
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;					;AN000;
			     C	;; DOS - GRAPHICS Command
			     C	;; (C) Copyright 1988 Microsoft
			     C	;;										;AN000;
			     C	;; File Name:  GRCTRL.EXT							;AN000;
			     C	;; ----------									;AN000;
			     C	;;										;AN000;
			     C	;; Description: 								;AN000;
			     C	;; ------------ 								;AN000;
			     C	;;	 Include file containing external declarations for			;AN000;
			     C	;;	 the code and data defined in GRCTRL.ASM				;AN000;
			     C	;;										;AN000;
			     C	;; Change History:								;AN000;
			     C	;; ---------------								;AN000;
			     C	;;										;AN000;
			     C	;;										;AN000;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;					;AN000;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-14
DOS - Message Retriever - SYSTEM CONTROL file               

			     C					       ;;					;AN000;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;					;AN000;
			     C	EXTRN  DET_HW_CONFIG:NEAR							;AN000;
			     C	EXTRN  RGB:BYTE 								;AN000;
			     C	EXTRN  BIOS_INT_5H:WORD 							;AN000;
			     C	EXTRN  PRT_SCR:NEAR								;AN000;
			     C	EXTRN  PRINT_SCREEN_ALLOWED:BYTE						;AN000;
			     C	EXTRN  XLT_TAB:BYTE								;AN000;
			     C	EXTRN  MODE_TYPE:BYTE								;AN000;
			     C	EXTRN  CUR_MODE_PTR:WORD							;AN000;
			     C	EXTRN  CUR_MODE:BYTE								;AN000;
			     C	EXTRN  MODE_TYPE:BYTE								;AN000;
			     C	EXTRN  NB_COLORS:WORD								;AN000;
			     C	EXTRN  SCREEN_HEIGHT:WORD							;AN000;
			     C	EXTRN  SCREEN_WIDTH:WORD							;AN000;
			     C	EXTRN  NB_CHAR_COLUMNS:BYTE							;AN000;
			     C	EXTRN  CUR_PAGE:BYTE								;AN000;
			     C	EXTRN  CUR_COLUMN:WORD								;AN000;
			     C	EXTRN  CUR_ROW:WORD								;AN000;
			     C	EXTRN  NB_SCAN_LINES:WORD							;AN000;
			     C	EXTRN  SCAN_LINE_MAX_LENGTH:WORD						;AN000;
			     C	EXTRN  CUR_SCAN_LNE_LENGTH:WORD 						;AN000;
			     C	EXTRN  PRT_BUF:BYTE								;AN000;
			     C	EXTRN  NB_BOXES_PER_PRT_BUF:BYTE						;AN000;
			     C	EXTRN  CUR_BOX:BYTE								;AN000;
			     C	EXTRN  BOX_H:BYTE								;AN000;
			     C	EXTRN  BOX_W:BYTE								;AN000;
			     C	EXTRN  ERROR_CODE:BYTE								;AN000;
			     C	EXTRN  ROTATE_SW:BYTE								;AN000;
					INCLUDE GRBWPRT.EXT	       ;;					;AN000;
			     C	.LIST										;AN000;
			     C	   EXTRN   PRINT_BW_APA:NEAR							;AN000;
			     C	   EXTRN   LEN_OF_BW_MODULES:ABS	;;					;AN000;
					INCLUDE GRCOLPRT.EXT	       ;;					;AN000;
			     C	.LIST										;AN000;
			     C	   EXTRN   PRINT_MODULE_START:NEAR	;;					;AN000;
			     C	   EXTRN   PRINT_COLOR:NEAR							;AN000;
			     C	   EXTRN   LEN_OF_COLOR_MODULES:ABS	;;					;AN000;
					INCLUDE GRCPSD.EXT	       ;;					;AN000;
			     C	.LIST										;AN000;
					INCLUDE GRINT2FH.EXT	       ;;					;AN000;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;					;AN000;
			     C	;; DOS - GRAPHICS Command
			     C	;; (C) Copyright 1988 Microsoft
			     C	;;										;AN000;
			     C	;; File Name:  GRINT2FH.EXT							;AN000;
			     C	;; ----------									;AN000;
			     C	;;										;AN000;
			     C	;; Description: 								;AN000;
			     C	;; ------------ 								;AN000;
			     C	;;	 External declarations for code and data defined in			;AN000;
			     C	;;	 GRINT2FH.ASM								;AN000;
			     C	;;										;AN000;
			     C	;; Change History:								;AN000;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-15
DOS - Message Retriever - SYSTEM CONTROL file               

			     C	;; ---------------								;AN000;
			     C	;;										;AN000;
			     C	;;										;AN000;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;					;AN000;
			     C					       ;;					;AN000;
			     C	   EXTRN  OLD_INT_2FH:DWORD	       ;;					;AN000;
			     C	   EXTRN  INT_2FH_DRIVER:NEAR	       ;;					;AN000;
			     C	   EXTRN  PRT_SCR_2FH_NUMBER:ABS       ;;					;AN000;
			     C	   EXTRN  SHARED_DATA_AREA_PTR:WORD						;AN000;
			     C	   EXTRN  RESIDENT_CODE_SEG:WORD						;AN000;
			     C					       ;;					;AN000;
			     C					       ;;					;AN000;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;					;AN000;
					INCLUDE GRCTRL.EXT	       ;;					;AN000;
			     C	PAGE	,132
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;					;AN000;
			     C	;; DOS - GRAPHICS Command
			     C	;; (C) Copyright 1988 Microsoft
			     C	;;										;AN000;
			     C	;; File Name:  GRCTRL.EXT							;AN000;
			     C	;; ----------									;AN000;
			     C	;;										;AN000;
			     C	;; Description: 								;AN000;
			     C	;; ------------ 								;AN000;
			     C	;;	 Include file containing external declarations for			;AN000;
			     C	;;	 the code and data defined in GRCTRL.ASM				;AN000;
			     C	;;										;AN000;
			     C	;; Change History:								;AN000;
			     C	;; ---------------								;AN000;
			     C	;;										;AN000;
			     C	;;										;AN000;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;					;AN000;
			     C					       ;;					;AN000;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;					;AN000;
			     C	EXTRN  DET_HW_CONFIG:NEAR							;AN000;
			     C	EXTRN  RGB:BYTE 								;AN000;
			     C	EXTRN  BIOS_INT_5H:WORD 							;AN000;
			     C	EXTRN  PRT_SCR:NEAR								;AN000;
			     C	EXTRN  PRINT_SCREEN_ALLOWED:BYTE						;AN000;
			     C	EXTRN  XLT_TAB:BYTE								;AN000;
			     C	EXTRN  MODE_TYPE:BYTE								;AN000;
			     C	EXTRN  CUR_MODE_PTR:WORD							;AN000;
			     C	EXTRN  CUR_MODE:BYTE								;AN000;
			     C	EXTRN  MODE_TYPE:BYTE								;AN000;
			     C	EXTRN  NB_COLORS:WORD								;AN000;
			     C	EXTRN  SCREEN_HEIGHT:WORD							;AN000;
			     C	EXTRN  SCREEN_WIDTH:WORD							;AN000;
			     C	EXTRN  NB_CHAR_COLUMNS:BYTE							;AN000;
			     C	EXTRN  CUR_PAGE:BYTE								;AN000;
			     C	EXTRN  CUR_COLUMN:WORD								;AN000;
			     C	EXTRN  CUR_ROW:WORD								;AN000;
			     C	EXTRN  NB_SCAN_LINES:WORD							;AN000;
			     C	EXTRN  SCAN_LINE_MAX_LENGTH:WORD						;AN000;
			     C	EXTRN  CUR_SCAN_LNE_LENGTH:WORD 						;AN000;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-16
DOS - Message Retriever - SYSTEM CONTROL file               

			     C	EXTRN  PRT_BUF:BYTE								;AN000;
			     C	EXTRN  NB_BOXES_PER_PRT_BUF:BYTE						;AN000;
			     C	EXTRN  CUR_BOX:BYTE								;AN000;
			     C	EXTRN  BOX_H:BYTE								;AN000;
			     C	EXTRN  BOX_W:BYTE								;AN000;
			     C	EXTRN  ERROR_CODE:BYTE								;AN000;
			     C	EXTRN  ROTATE_SW:BYTE								;AN000;
					INCLUDE GRPARSE.EXT	       ;;					;AN000;
			     C	.LIST										;AN000;
					INCLUDE GRPARMS.EXT	       ;;					;AN000;
			     C	.LIST										;AN000;
					INCLUDE GRMSG.EQU	       ;;					;AN000;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;					;AN000;
			     C	;; DOS - GRAPHICS Command
			     C	;; (c) Copyright 1988 Microsoft
			     C	;;										;AN000;
			     C	;; File Name:  GRMSG.EQU							;AN000;
			     C	;; ----------									;AN000;
			     C	;;										;AN000;
			     C	;; DOS GRAPHICS Command	-  Message number AN000;equates
			     C	;;										;AN000;
			     C	;; Description: 								;AN000;
			     C	;; ------------ 								;AN000;
			     C	;; This file contains the numbers assigned to the error messages		;AN000;
			     C	;; issued by GRAPHICS.COM							;AN000;
			     C	;;										;AN000;
			     C	;; These messages are defined in GRAPHICS.MSG					;AN000;
			     C	;; (The message skeleton file for GRAPHICS.COM) 				;AN000;
			     C	;;										;AN000;
			     C	;; This file also contains equates for the error codes returned by		;AN000;
			     C	;; the DOS parser.								;AN000;
			     C	;;										;AN000;
			     C	;; Documentation Reference:							;AN000;
			     C	;; ------------------------							;AN000;
			     C	;;										;AN000;
			     C	;;	 DOS 3.3 Message Retriever Interface Supplement. 			;AN000;
			     C	;;										;AN000;
			     C	;; External Procedure References:						;AN000;
			     C	;; ------------------------------						;AN000;
			     C	;;	 FROM FILE  GRINST.ASM: 						;AN000;
			     C	;;	      GRAPHICS_INSTALL - Main module for GRAPHICS install.		;AN000;
			     C	;;	      PARSE_PARMS      - Parse the command line parameters.		;AN000;
			     C	;;	 FROM FILE GRLOAD.ASM AND GRLOAD2.ASM					;AN000;
			     C	;;	      All modules							;AN000;
			     C	;;										;AN000;
			     C	;; Change History:								;AN000;
			     C	;; ---------------								;AN000;
			     C	;;										;AN000;
			     C	;;										;AN000;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;					;AN000;
			     C											;AN000;
			     C	;-------------------------------------------------------------------------------;AN000;
			     C	; GRAPHICS MESSAGE NUMBERS							;AN000;
			     C	;-------------------------------------------------------------------------------;AN000;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-17
DOS - Message Retriever - SYSTEM CONTROL file               

			     C											;AN000;
			     C	; Class A messages:								;AN000;
 = 0001                      C	INCORRECT_DOS EQU 1		; 'Incorrect DOS version'                       ;AN000;
 = 0002                      C	NO_MEMORY     EQU 2		; 'Insufficient memory'                         ;AN000;
			     C											;AN000;
			     C	; Class B messages: (Profile loading)						;AN000;
 = 0009                      C	PROFILE_NOT_FOUND EQU  9	; 'Cannot find GRAPHICS profile'                ;AN000;
 = 000A                      C	MISSING_STMT	  EQU 10	; 'Required profile statement missing           ;AN000;
			     C					;   before line %1'                             ;AN000;
 = 000B                      C	INVALID_STMT	  EQU 11	; 'Invalid profile statement on line %1'        ;AN000;
 = 000C                      C	OUT_SEQ_STMT	  EQU 12	; 'Profile statement out of sequence on line %1';AN000;
 = 000D                      C	FILE_ERRORS	  EQU 13	; 'Error reading GRAPHICS profile'              ;AN000;
 = 000E                      C	SYNTAX_ERRORS	  EQU 14	; 'Syntax errors in GRAPHICS profile'           ;AN000;
 = 000F                      C	INVALID_PB	  EQU 15	; 'PRINTBOX id not in GRAPHICS profile'         ;AN000;
 = 0010                      C	INVALID_PRT	  EQU 16	; 'Printer type not in GRAPHICS profile'        ;AN000;
			     C											;AN000;
			     C	; Class C messages: (Command line parsing)					;AN000;
 = 0003                      C	TOO_MANY_PARMS	    EQU 3	; 'Too many parameters'                         ;AN000;
 = 0004                      C	VALUE_NOT_ALLOWED   EQU 4	; 'Parameter value not allowed'                 ;AN000;
 = 0005                      C	INVALID_PARM	    EQU 5	; 'Invalid parameter %1'                        ;AN000;
 = 0006                      C	INVALID_COMBINATION EQU 6	; 'Invalid parameter combination'               ;AN000;
 = 0007                      C	DUPLICATE_PARM	    EQU 7	; 'Duplicate parameters not allowed'            ;AN000;
 = 0008                      C	FORMAT_NOT_CORRECT  EQU 8	; 'Parameter format not correct'                ;AN000;
 = 0011                      C	INVALID_B_SWITCH    EQU 17	; '/B invalid with a Black and White printer'   ;AN000;
 = 0012                      C	UNABLE_RELOAD	    EQU 18	; 'Unable to reload with profile supplied'      ;AN000;
			     C											;AN000;
			     C											;AN000;
			     C											;AN000;
			     C	;-------------------------------------------------------------------------------;AN000;
			     C	; PARSER ERROR CODES	AND    OUR OWN PARSING ERROR CODES			;AN000;
			     C	;			***							;AN000;
			     C	;-------------------------------------------------------------------------------;AN000;
			     C											;AN000;
 = 0000                      C	RC_NO_ERROR	     EQU     0							;AN000;
 =-0001                      C	RC_EOL		     EQU    -1							;AN000;
 = 0001                      C	RC_TOO_MANY	     EQU     1							;AN000;
 = 0003                      C	RC_NOT_IN_SW	     EQU     3							;AN000;
 = 0007                      C	RC_NOT_IN_VAL	     EQU     7							;AN000;
 = 0008                      C	RC_NOT_IN_STR	     EQU     8							;AN000;
			     C											;AN000;
 = 0063                      C	RC_INVLD_COMBINATION EQU     99 						;AN000;
 = 0064                      C	RC_DUPLICATE_PARMS   EQU    100 						;AN000;
								       ;;					;AN000;
				MSG_UTILNAME <GRAPHICS> 	       ;; Identify ourself to Message retriever.;AN000;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-18
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  0003[                 C1	    $M_CLASS_ADDRS   DD        $M_NUM_CLS DUP(0)	     ;;AN000;; Allow pointers to specified c
				lasses
	   00000000          C1	
			 ]   C1	
			     C1	
 0038  FFFFFFFF              C1	    $M_CLS_TERM      DD        -1			     ;;AN000;;
 003C  00000000              C1	    $M_DBCS_VEC      DD        0			     ;;AN000;; Save DBCS vector
 0040  0000                  C1	    $M_HANDLE	     DW        ?			     ;;AN000;;
 0042  00                    C1	    $M_SIZE	     DB        0			     ;;AN000;;
 0043  0D 0A                 C1	    $M_CRLF	     DB        0DH,0AH			     ;;AN004;; CR LF message
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-19
DOS - Message Retriever - MSGSTR.INC Module                 

 0045  00                    C1	    $M_CLASS	     DB        ?			     ;;AN004;; Saved class
 0046  0000                  C1	    $M_RETURN_ADDR   DW        ?			     ;;AN000;;
 0048  0000                  C1	    $M_MSG_NUM	     DW        $M_NULL			     ;;AN000;;
 004A  000A                  C1	    $M_DIVISOR	     DW        10			     ;;AN000;; Default = 10 (must be a WORD 
				for division)
 004C  0040[                 C1	    $M_TEMP_BUF      DB        $M_TEMP_BUF_SZ DUP("$")	     ;;AN000;; Temporary buffer
	   24                C1	
			 ]   C1	
			     C1	
 008C  24                    C1	    $M_BUF_TERM      DB        "$"			     ;;AN000;;
			     C1	
 008D                        C1	$M_RES_ADDRS ENDS					     ;;AN000;;
			     C1	$M_COUNTRY_INFO STRUC					     ;;AN000;; Expected Country infomation
			     C1								     ;;
 0000  004C[                 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	
 004C  0000                  C1	    $M_DATE_FORMAT   DW       ? 			     ;;AN000;; <------- Date Format
 004E  0005[                 C1	    $M_CURR_SEPARA   DB       5 DUP(?)			     ;;AN000;;
	   ??                C1	
			 ]   C1	
			     C1	
 0053  00 00                 C1	    $M_THOU_SEPARA   DB       ?,0			     ;;AN000;; <------- Thou Separator
 0055  00 00                 C1	    $M_DECI_SEPARA   DB       ?,0			     ;;AN000;; <------- Decimal Separator
 0057  00 00                 C1	    $M_DATE_SEPARA   DB       ?,0			     ;;AN000;; <------- Date Separator
 0059  00 00                 C1	    $M_TIME_SEPARA   DB       ?,0			     ;;AN000;; <------- Time Separator
 005B  00                    C1	    $M_CURR_FORMAT   DB       ? 			     ;;AN000;;
 005C  00                    C1	    $M_SIG_DIGS_CU   DB       ? 			     ;;AN000;;
 005D  00                    C1	    $M_TIME_FORMAT   DB       ? 			     ;;AN000;; <------- Time Format
			     C1								     ;;
 005E                        C1	$M_COUNTRY_INFO ENDS					     ;;AN000;;
								       ;; Include messages			;AN000;
				MSG_SERVICES <MSGDATA>		       ;;					;AN000;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-20
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  0003[                 C1	
 0038  FFFFFFFF              C1	
 003C  00000000              C1	
 0040  0000                  C1	
 0042  00                    C1	
 0043  0001[                 C1	
 0045  00                    C1	
 0046  0000                  C1	
 0048  0000                  C1	
 004A  0A00                  C1	
 004C  0040[                 C1	
 008C  24                    C1	
 008D  4D 53 20 44 4F 53     C1		DB	"MS DOS Version 4.00 (C)Copyright 1988 Microsoft Corp"
 00C1  4C 69 63 65 6E 73     C1		DB	"Licensed Material - Property of Microsoft  "
				
				 public amis_sign
					even
 00EC				amis_sign:
 00EC  65 63 6D				db "ecm"
 00EF  0005[				db 5 dup (' ')
	   20			
			 ]	
				
 00F4  6C 44 4F 53			db "lDOS"
 00F8  0004[				db 4 dup (' ')
	   20			
			 ]	
				
 00FC				amis_id:			; must be directly after amis_sign
 00FC  0000				dw 0
 00FE  0000				dw 0			; sequential number
 0100  08				db amis_id_msg_end - amis_id_msg
 0101				amis_id_msg:
 0101  67 72 61 70 68 69		db "graphics"		; our id name
       63 73			
 0109				amis_id_msg_end:
				
 =				AMIS_SIGN_SEGMENT equ CODE
				
				MSG_SERVICES <LOADmsg,DISPLAYmsg,CHARmsg,NUMmsg>  ;;				;AN000;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-21
DOS - Message Retriever - LOADMSG.ASM Module                

 0109                        C1		SYSLOADMSG PROC NEAR				     ;;AN000;;
 0109  50                    C1		PUSH	AX					     ;;AN000;
 010A  53                    C1		PUSH	BX					     ;;AN000;
 010B  52                    C1		PUSH	DX					     ;;AN000;
 010C  06                    C1		PUSH	ES					     ;;AN000;
 010D  57                    C1		PUSH	DI					     ;;AN000;
 010E  33 C9                 C1		XOR	CX,CX					     ;;AN000;  Reset to zero
 0110  8E C1                 C1		MOV	ES,CX					     ;;AN000;
 0112  33 FF                 C1		XOR	DI,DI					     ;;AN000;
 0114  B8 122E               C1		MOV	AX,DOS_GET_EXT_PARSE_ADD		     ;;AN000;; 2FH Interface
 0117  B2 00                 C1		MOV	DL,DOS_GET_EXTENDED			     ;;AN000;; Where are the Extended errors
				 in COMMAND.COM
 0119  CD 2F                 C1		INT	2FH					     ;;AN000;; Private interface
 011B  8C 06 000A R          C1		MOV	WORD PTR $M_RT.$M_EXT_COMMAND+2,ES	     ;;AN000;;	Move into first avaliable ta
				ble location
 011F  89 3E 0008 R          C1		MOV	WORD PTR $M_RT.$M_EXT_COMMAND,DI	     ;;AN000;;
 0123  B8 122E               C1		MOV	AX,DOS_GET_EXT_PARSE_ADD		     ;;AN000;; 2FH Interface
 0126  B2 02                 C1		MOV	DL,DOS_GET_PARSE			     ;;AN000;; Where are the Parse errors in
				 COMMAND.COM
 0128  CD 2F                 C1		INT	2FH					     ;;AN000;; Private interface
 012A  8C 06 0012 R          C1		MOV	WORD PTR $M_RT.$M_PARSE_COMMAND+2,ES	     ;;AN000;;	Move into first avaliable ta
				ble location
 012E  89 3E 0010 R          C1		MOV	WORD PTR $M_RT.$M_PARSE_COMMAND,DI	     ;;AN000;;
 0132  B8 122E               C1		MOV	AX,DOS_GET_EXT_PARSE_ADD		     ;;AN000;; 2FH Interface
 0135  B2 04                 C1		MOV	DL,DOS_GET_CRITICAL			     ;;AN000;; Where are the Critical errors
				 in COMMAND.COM
 0137  CD 2F                 C1		INT	2FH					     ;;AN000;; Private interface
 0139  8C 06 0022 R          C1		MOV	WORD PTR $M_RT.$M_CRIT_COMMAND+2,ES	     ;;AN000;;	Move into first avaliable ta
				ble location
 013D  89 3E 0020 R          C1		MOV	WORD PTR $M_RT.$M_CRIT_COMMAND,DI	     ;;AN000;;
 0141  B8 122E               C1		MOV	AX,DOS_GET_EXT_PARSE_ADD		     ;;AN001;; 2FH Interface
 0144  B2 06                 C1		MOV	DL,DOS_GET_FILE 			     ;;AN001;; Where are the FILE dependant 
				in IFSFUNC.EXE
 0146  CD 2F                 C1		INT	2FH					     ;;AN001;; Private interface
 0148  8C 06 0006 R          C1		MOV	WORD PTR $M_RT.$M_EXT_FILE+2,ES 	     ;;AN001;;	Move into first avaliable ta
				ble location
 014C  89 3E 0004 R          C1		MOV	WORD PTR $M_RT.$M_EXT_FILE,DI		     ;;AN001;;
 0150  E8 07F3 R             C1		  CALL	  $M_MSGSERV_1				     ;;AN000;; Get addressibilty to MSGSERV 
				CLASS 1 (EXTENDED Errors)
 0153  8C 06 0002 R          C1		MOV	WORD PTR $M_RT.$M_EXT_ERR_ADDRS+2,ES	     ;;AN000;; Move into first avaliable tab
				le location
 0157  89 3E 0000 R          C1		MOV	WORD PTR $M_RT.$M_EXT_ERR_ADDRS,DI	     ;;AN000;;
 015B  8C 06 001E R          C1		MOV	WORD PTR $M_RT.$M_CRIT_ADDRS+2,ES	     ;;AN000;; Move into first avaliable tab
				le location
 015F  89 3E 001C R          C1		MOV	WORD PTR $M_RT.$M_CRIT_ADDRS,DI 	     ;;AN000;;
 0163  E8 0814 R             C1		  CALL	  $M_MSGSERV_2				     ;;AN000;; Get addressibilty to MSGSERV 
				CLASS 2 (PARSE Errors)
 0166  8C 06 0016 R          C1		MOV	WORD PTR $M_RT.$M_PARSE_ADDRS+2,ES	     ;;AN000;; Move into first avaliable tab
				le location
 016A  89 3E 0014 R          C1		MOV	WORD PTR $M_RT.$M_PARSE_ADDRS,DI	     ;;AN000;;
 016E  B8 122E               C1		MOV	AX,DOS_GET_EXT_PARSE_ADD		     ;;AN001;; 2FH Interface
 0171  B2 08                 C1		MOV	DL,DOS_GET_ADDR 			     ;;AN001;; Where is the READ_DISK_PROC i
				n COMMAND.COM
 0173  CD 2F                 C1		INT	2FH					     ;;AN001;; Private interface
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-22
DOS - Message Retriever - LOADMSG.ASM Module                

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

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

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

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

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

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

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

 02A2  EB 04                 C1		JMP SHORT $MEN104
 02A4                        C1	$MIF104:
 02A4  83 C4 08              C1		  ADD	  SP,8					     ;;AN000;;	   Eliminate from stack
 02A7  F9                    C1		  STC						     ;;AN000;;
 02A8                        C1	$MEN104:
 02A8  C3                    C1		RET						     ;;AN000;; Return
 02A9                        C1		SYSDISPMSG ENDP 				     ;;AN000;;
 02A9                        C1	$M_DISPLAY_STRING PROC NEAR				     ;;AN000;;
 02A9  50                    C1		PUSH	AX					     ;;AN000;;
 02AA  53                    C1		PUSH	BX					     ;;AN000;;
 02AB  52                    C1		PUSH	DX					     ;;AN000;;
 02AC  8B 1E 0040 R          C1		MOV	BX,$M_RT.$M_HANDLE			     ;;AN000;; Retrieve handle
 02B0  83 FB FF              C1		CMP	BX,$M_NO_HANDLE 			     ;;AN000;; Was there a handle specified?
 02B3  75 05                 C1		JNE $MIF107
 02B5  E8 02E4 R             C1		  CALL	  $M_DISPLAY_$_STRING			     ;;AN000;; No, display $ terminated stri
				ng
 02B8  EB 03                 C1		JMP SHORT $MEN107
 02BA                        C1	$MIF107:
 02BA  E8 0319 R             C1		  CALL	  $M_DISPLAY_H_STRING			     ;;AN000;; Yes, display string to handle
 02BD                        C1	$MEN107:
 02BD  73 0F                 C1		JNC $MIF110
 02BF  B4 59                 C1		  MOV	  AH,DOS_GET_EXT_ERROR			     ;;AN000;;	Yes,
 02C1  BB 0000               C1		  MOV	  BX,DOS_GET_EXT_ERROR_BX		     ;;AN000;;	  Get extended error
 02C4  CD 21                 C1		  INT	  21H					     ;;AN000;;
 02C6  32 E4                 C1		  XOR	  AH,AH 				     ;;AN000;;	  Clear AH
 02C8  83 C4 06              C1		  ADD	  SP,6					     ;;AN000;;	  Clean up stack
 02CB  F9                    C1		  STC						     ;;AN000;;	  Flag that there was an err
				or
 02CC  EB 10                 C1		JMP SHORT $MEN110
 02CE                        C1	$MIF110:
 02CE  83 FB FF              C1		  CMP	  BX,$M_NO_HANDLE			     ;;AN000;; Was there a handle specified?
 02D1  74 0B                 C1		  JE $MIF112
 02D3  3B C1                 C1		    CMP     AX,CX				     ;AN001;	 Was it ALL written?
 02D5  74 07                 C1		    JE $MIF113
 02D7  E8 0347 R             C1		      CALL    $M_GET_EXT_ERR_39 		     ;AN001;	   Set Extended error
 02DA  83 C4 06              C1		      ADD     SP,6				     ;AN001;	   Clean up stack
 02DD  F9                    C1		      STC					     ;AN001;	   Flag that there was an er
				ror
 02DE                        C1	$MIF113:
 02DE                        C1	$MIF112:
 02DE                        C1	$MEN110:
 02DE  72 03                 C1		JC $MIF117
 02E0  5A                    C1		  POP	  DX					     ;;AN000;;	Restore regs
 02E1  5B                    C1		  POP	  BX					     ;;AN000;;
 02E2  58                    C1		  POP	  AX					     ;;AN000;;
 02E3                        C1	$MIF117:
 02E3  C3                    C1		RET						     ;;AN000;; Return
 02E4                        C1	$M_DISPLAY_STRING ENDP					     ;;AN000;;
 02E4                        C1	$M_DISPLAY_$_STRING PROC NEAR				     ;;AN000;;
 02E4  1E                    C1		PUSH	DS					     ;;AN000;;
 02E5  06                    C1		PUSH	ES					     ;;AN000;;
 02E6  1F                    C1		POP	DS					     ;;AN000;; Set DS to segment of message 
				text
 02E7  83 F9 01              C1		CMP	CX,$M_SINGLE_CHAR			     ;;AN000;; Is this a single character?
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-30
DOS - Message Retriever - DISPMSG.ASM Module                

 02EA  75 1B                 C1		JNE $MIF119
 02EC  B4 02                 C1		  MOV	  AH,DOS_DISP_CHAR			     ;;AN000;;	 DOS Function to display CHA
				RACTER
 02EE  26: 8A 15             C1		  MOV	  DL,BYTE PTR ES:[DI]			     ;;AN000;;	 Get the character
 02F1  CD 21                 C1		  INT	  21H					     ;;AN000;;	 Write character
 02F3  1F                    C1		  POP	  DS					     ;;AN000;; Set DS to segment of message 
				text
 02F4  8A C2                 C1		  MOV	  AL,DL 				     ;;AN000;;	 Get the character in AL
 02F6  E8 0367 R             C1		  CALL	  $M_IS_IT_DBCS 			     ;;AN000;;	 Is this the first byte of a
				 DB character
 02F9  1E                    C1		  PUSH	  DS					     ;;AN000;;
 02FA  06                    C1		  PUSH	  ES					     ;;AN000;;
 02FB  1F                    C1		  POP	  DS					     ;;AN000;; Set DS to segment of message 
				text
 02FC  73 07                 C1		  JNC $MIF120
 02FE  26: 8A 55 01          C1		    MOV     DL,BYTE PTR ES:[DI]+1		     ;;AN000;; Get the next character
 0302  CD 21                 C1		    INT     21H 				     ;;AN000;;	 Write character
 0304  F8                    C1		    CLC 					     ;;AN000;;	 Clear the DBCS indicator
 0305                        C1	$MIF120:
 0305  EB 0F                 C1		JMP SHORT $MEN119
 0307                        C1	$MIF119:
 0307  B4 02                 C1		  MOV	  AH,DOS_DISP_CHAR			     ;;AN000;;	 DOS Function to display CHA
				RACTER
 0309                        C1	$MDO123:
 0309  0B C9                 C1		    OR	    CX,CX				     ;;AN002;;	 Are there any left to displ
				ay?
 030B  74 09                 C1		  JZ $MEN123
 030D  26: 8A 15             C1		    MOV     DL,BYTE PTR ES:[DI] 		     ;;AN002;;	   Get the character
 0310  CD 21                 C1		    INT     21H 				     ;;AN002;;	   Display the character
 0312  47                    C1		    INC     DI					     ;;AN002;;	   Set pointer to next chara
				cter
 0313  49                    C1		    DEC     CX					     ;;AN002;;	   Count this character
 0314  75 F3                 C1		  JNZ $MDO123
 0316                        C1	$MEN123:
 0316                        C1	$MEN119:
 0316  F8                    C1		CLC						     ;;AN000;;	 Char functions used don't r
				eturn carry as error
 0317  1F                    C1		POP	DS					     ;;AN000;;
 0318  C3                    C1		RET						     ;;AN000;;
 0319                        C1	$M_DISPLAY_$_STRING ENDP				     ;;AN000;;
 0319                        C1	$M_DISPLAY_H_STRING PROC NEAR				     ;;AN000;;
 0319  33 C0                 C1		XOR	AX,AX					     ;;AN002;; Set number of bytes written t
				o 0
 031B  0B C9                 C1		OR	CX,CX					     ;;AN002;; For performance, don't write 
				if not necessary
 031D  74 27                 C1		JZ $MIF127
 031F  1E                    C1		  PUSH	  DS					     ;;AN000;; Yes,
 0320  06                    C1		  PUSH	  ES					     ;;AN000;;
 0321  1F                    C1		  POP	  DS					     ;;AN000;;	 Set DS to segment of messag
				e text
 0322  B4 40                 C1		  MOV	  AH,DOS_WRITE_HANDLE			     ;;AN000;;	 DOS function to write to a 
				handle
 0324  8B D7                 C1		  MOV	  DX,DI 				     ;;AN000;;	 Pointer to data to write
 0326  83 F9 01              C1		  CMP	  CX,$M_SINGLE_CHAR			     ;;AN000;;	 Is this a single character?
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-31
DOS - Message Retriever - DISPMSG.ASM Module                

 0329  75 18                 C1		  JNE $MIF128
 032B  CD 21                 C1		    INT     21H 				     ;;AN000;;	   Write character
 032D  1F                    C1		    POP     DS					     ;;AN000;;	     Set DS to segment of me
				ssage text
 032E  50                    C1		    PUSH    AX					     ;;AN000;;
 032F  26: 8A 05             C1		    MOV     AL,BYTE PTR ES:[DI] 		     ;;AN000;;	     Get the character
 0332  E8 0367 R             C1		    CALL    $M_IS_IT_DBCS			     ;;AN000;;	     Is this the first byte 
				of a DB character
 0335  58                    C1		    POP     AX					     ;;AN000;;	     Set DS to segment of me
				ssage text
 0336  1E                    C1		    PUSH    DS					     ;;AN000;;
 0337  06                    C1		    PUSH    ES					     ;;AN000;;
 0338  1F                    C1		    POP     DS					     ;;AN000;;	     Set DS to segment of me
				ssage text
 0339  73 06                 C1		    JNC $MIF129
 033B  F8                    C1		      CLC					     ;;AN000;;	      Clear the DBCS indicat
				or
 033C  B4 40                 C1		      MOV     AH,DOS_WRITE_HANDLE		     ;;AN000;;	      DOS function to write 
				to a handle
 033E  42                    C1		      INC     DX				     ;;AN000;;	      Point to next characte
				r
 033F  CD 21                 C1		      INT     21H				     ;;AN000;;	      Write character
 0341                        C1	$MIF129:
 0341  EB 02                 C1		  JMP SHORT $MEN128
 0343                        C1	$MIF128:
 0343  CD 21                 C1		    INT     21H 				     ;;AN000;;	   Write String at DS:SI to 
				handle
 0345                        C1	$MEN128:
 0345  1F                    C1		  POP	  DS					     ;;AN000;;
 0346                        C1	$MIF127:
 0346  C3                    C1		RET						     ;;AN000;;
 0347                        C1	$M_DISPLAY_H_STRING ENDP				     ;;AN000;;
 0347                        C1	$M_GET_EXT_ERR_39 PROC NEAR				     ;AN001;
 0347  B8 0027               C1		MOV	AX,EXT_ERR_39				     ;AN001; Set AX=39
 034A  BB 0004               C1		MOV	BX,(ERROR_CLASS_39 SHR 8) + ACTION_39	     ;AN001; Set BH=1 BL=4
 034D  B5 01                 C1		MOV	CH,LOCUS_39				     ;AN001; Set CH=1
 034F  C3                    C1		RET						     ;AN001;
 0350                        C1	$M_GET_EXT_ERR_39 ENDP					     ;AN001;
 0350                        C1	$M_ADD_CRLF PROC NEAR					     ;;AN004;;
 0350  80 FE FF              C1		CMP	DH,UTILITY_MSG_CLASS			     ;;AN004;; Is it a utility message?
 0353  74 11                 C1		JE $MIF134
 0355  F6 C6 80              C1		  TEST	  DH,$M_NO_CRLF_MASK			     ;;AN004;;	 Are we to supress the CR LF
				?
 0358  75 0C                 C1		  JNZ $MIF135
 035A  1E                    C1		    PUSH    DS					     ;;AN004;;
 035B  07                    C1		    POP     ES					     ;;AN004;;	  Set ES to data segment
 035C  8D 3E 0043 R          C1		    LEA     DI,$M_RT.$M_CRLF			     ;;AN004;;	  Point at CRLF message
 0360  B9 0002               C1		    MOV     CX,$M_CRLF_SIZE			     ;;AN004;;	  Set the message size
 0363  E8 02A9 R             C1		    CALL    $M_DISPLAY_STRING			     ;;AN004;;	  Display the CRLF
 0366                        C1	$MIF135:
 0366                        C1	$MIF134:
 0366  C3                    C1		RET						     ;;AN004;; Return
 0367                        C1	$M_ADD_CRLF ENDP					     ;;AN004;;
 0367                        C1	$M_IS_IT_DBCS PROC NEAR 				     ;;AN000;;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-32
DOS - Message Retriever - DISPMSG.ASM Module                

 0367  06                    C1		PUSH	ES					     ;;AN000;; Save Extra segment register
 0368  57                    C1		PUSH	DI					     ;;AN000;; Save SI register
 0369  C4 3E 003C R          C1		LES	DI,$M_RT.$M_DBCS_VEC			     ;;AN000;;
 036D  0B FF                 C1		OR	DI,DI					     ;;AN000;; Was the DBCS vector set?
 036F  74 17                 C1		JZ $MIF138
 0371                        C1	$MDO139:
 0371  26: 83 3D 00          C1		    CMP     WORD PTR ES:[DI],$M_DBCS_TERM	     ;;AN000;; Is this the terminating flag?
 0375  F8                    C1		    CLC 					     ;;AN000;;
 0376  74 10                 C1		  JE $MEN139
 0378  26: 3A 05             C1		    CMP     AL,BYTE PTR ES:[DI] 		     ;;AN000;;	  Does the character fall in
				 the DBCS range?
 037B  72 07                 C1		    JNAE $MIF141
 037D  26: 3A 45 01          C1		    CMP     AL,BYTE PTR ES:[DI]+1		     ;;AN000;;	  Does the character fall in
				 the DBCS range?
 0381  77 01                 C1		    JNBE $MIF141
 0383  F9                    C1		      STC					     ;;AN000;;	  Yes,
 0384                        C1	$MIF141:
 0384  47                    C1		    INC     DI					     ;;AN000;;	  No,
 0385  47                    C1		    INC     DI					     ;;AN000;;	     Go to next vector
 0386  EB E9                 C1		  JMP SHORT $MDO139
 0388                        C1	$MEN139:
 0388                        C1	$MIF138:
 0388  5F                    C1		POP	DI					     ;;AN000;;
 0389  07                    C1		POP	ES					     ;;AN000;; Restore SI register
 038A  C3                    C1		RET						     ;;AN000;; Return
 038B                        C1	$M_IS_IT_DBCS ENDP					     ;;AN000;;
 038B                        C1	$M_CONVERT2ASC PROC NEAR				     ;;AN000;;
 038B  8F 06 0046 R          C1		POP	[$M_RT.$M_RETURN_ADDR]			     ;;AN000;; Save Return Address
 038F  33 DB                 C1		XOR	BX,BX					     ;;AN000;; Use BP as a swapping register
 0391  93                    C1		XCHG	BX,AX					     ;;AN000;; Initialize - Low Word in BP
 0392  92                    C1		XCHG	AX,DX					     ;;AN000;;		  - High Word in AX
 0393                        C1	$MDO145:
 0393  F7 36 004A R          C1		  DIV	  $M_RT.$M_DIVISOR			     ;;AN000;; Divide High Word by divisor
 0397  93                    C1		  XCHG	  BX,AX 				     ;;AN000;; Setup to divide Low Word usin
				g remainder
 0398  F7 36 004A R          C1		  DIV	  $M_RT.$M_DIVISOR			     ;;AN000;; Divide Low Word by divisor
 039C  83 FA 09              C1		  CMP	  DX,9					     ;;AN000;;	Make a digit of the remainde
				r
 039F  76 05                 C1		  JNA $MIF146
 03A1  80 C2 37              C1		    ADD     DL,55				     ;;AN000;;	   Make A to F ASCII
 03A4  EB 03                 C1		  JMP SHORT $MEN146
 03A6                        C1	$MIF146:
 03A6  80 C2 30              C1		    ADD     DL,'0'				     ;;AN000;;	   Make 0 to 9 ASCII
 03A9                        C1	$MEN146:
 03A9  52                    C1		  PUSH	  DX					     ;;AN000;; Save the digit on the stack
 03AA  41                    C1		  INC	  CX					     ;;AN000;; Count that digit
 03AB  0B C0                 C1		  OR	  AX,AX 				     ;;AN000;; Are we done?
 03AD  75 04                 C1		JNZ $MLL149
 03AF  0B DB                 C1		  OR	  BX,BX 				     ;;AN000;; AX and BX must be ZERO!!
 03B1  74 39                 C1		JZ $MEN145
 03B3                        C1	$MLL149:
 03B3  83 F9 03              C1		  CMP	  CX,$M_FIRST_THOU			     ;;AN000;; Are we at the first thousands
				 mark
 03B6  75 0D                 C1		  JNE $MIF150
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-33
DOS - Message Retriever - DISPMSG.ASM Module                

 03B8  80 7C 0A 2C           C1		    CMP     $M_SL.$M_S_PAD,$M_COMMA		     ;;AN000;; Is the pad character a comma?
 03BC  75 05                 C1		    JNE $MIF151
 03BE  FF 36 0053 R          C1		      PUSH    WORD PTR $M_RT.$M_THOU_SEPARA	     ;;AN000;; Insert a thousand separator
 03C2  41                    C1		      INC     CX				     ;;AN000;;
 03C3                        C1	$MIF151:
 03C3  EB 22                 C1		  JMP SHORT $MEN150
 03C5                        C1	$MIF150:
 03C5  83 F9 06              C1		    CMP     CX,$M_SECOND_THOU			     ;;AN000;;	 Are we at the first thousan
				ds mark
 03C8  75 0D                 C1		    JNE $MIF154
 03CA  80 7C 0A 2C           C1		      CMP     $M_SL.$M_S_PAD,$M_COMMA		     ;;AN000;; Is the pad character a comma?
 03CE  75 05                 C1		      JNE $MIF155
 03D0  FF 36 0053 R          C1			PUSH	WORD PTR $M_RT.$M_THOU_SEPARA	     ;;AN000;; Insert a thousand separator
 03D4  41                    C1			INC	CX				     ;;AN000;;
 03D5                        C1	$MIF155:
 03D5  EB 10                 C1		    JMP SHORT $MEN154
 03D7                        C1	$MIF154:
 03D7  83 F9 09              C1		      CMP     CX,$M_THIRD_THOU			     ;;AN000;;	 Are we at the first thousan
				ds mark
 03DA  75 0B                 C1		      JNE $MIF158
 03DC  80 7C 0A 2C           C1			CMP	$M_SL.$M_S_PAD,$M_COMMA 	     ;;AN000;; Is the pad character a comma?
 03E0  75 05                 C1			JNE $MIF159
 03E2  FF 36 0053 R          C1			  PUSH	  WORD PTR $M_RT.$M_THOU_SEPARA      ;;AN000;; Insert a thousand separator
 03E6  41                    C1			  INC	  CX				     ;;AN000;;
 03E7                        C1	$MIF159:
 03E7                        C1	$MIF158:
 03E7                        C1	$MEN154:
 03E7                        C1	$MEN150:
 03E7  93                    C1		  XCHG	  AX,BX 				     ;;AN000;;	 Setup to divide the reduced
				 High Word
 03E8  33 D2                 C1		  XOR	  DX,DX 				     ;;AN000;;	 Reset remainder
 03EA  EB A7                 C1		JMP SHORT $MDO145
 03EC                        C1	$MEN145:
 03EC  33 D2                 C1		XOR	DX,DX					     ;;AN000;;	 Reset remainder
 03EE  33 C0                 C1		XOR	AX,AX					     ;;AN000;;	 Reset remainder
 03F0  FF 36 0046 R          C1		PUSH	[$M_RT.$M_RETURN_ADDR]			     ;;AN000;;	 Restore Return Address
 03F4  C3                    C1		RET						     ;;AN000;;	 Return
 03F5                        C1	$M_CONVERT2ASC ENDP					     ;;AN000;;
 03F5                        C1	$M_DISPLAY_MESSAGE PROC NEAR				     ;;AN000;;
 03F5                        C1	$MDO165:
 03F5  33 D2                 C1		  XOR	  DX,DX 				     ;;AN000;; Set size = 0
 03F7  0B C9                 C1		  OR	  CX,CX 				     ;;AN000;; Are we finished the message y
				et?
 03F9  74 21                 C1		  JZ $MIF166
 03FB  B4 25                 C1		    MOV     AH,"%"				     ;;AN000;;	 Prepare to scan for %
 03FD  B0 00                 C1		    MOV     AL,0				     ;;AN004;;
 03FF                        C1	$MDO167:
 03FF  26: 38 25             C1		      CMP     BYTE PTR ES:[DI],AH		     ;;AN000;;	 Is this character NOT a %
 0402  75 0A                 C1		    JNE $MLL168
 0404  26: 38 65 01          C1		      CMP     BYTE PTR ES:[DI+1],AH		     ;;AN000;;	   Is the next character als
				o a %
 0408  74 04                 C1		    JE $MLL168
 040A  3A C4                 C1		      CMP     AL,AH				     ;;AN000;;	     Was the character befor
				e a %
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-34
DOS - Message Retriever - DISPMSG.ASM Module                

 040C  75 0E                 C1		    JNE $MEN167
 040E                        C1	$MLL168:
 040E  26: 8A 05             C1		      MOV     AL,BYTE PTR ES:[DI]		     ;;AN004;;	 Yes, (to any of the above)
 0411  E8 0367 R             C1		      CALL    $M_IS_IT_DBCS			     ;;AN004;;	   Is this character the fir
				st part of a DBCS?
 0414  73 01                 C1		      JNC $MIF169
 0416  47                    C1			INC	DI				     ;;AN004;;	     Increment past second p
				art
 0417                        C1	$MIF169:
 0417  47                    C1		      INC     DI				     ;;AN000;;	     Next character in strin
				g
 0418  42                    C1		      INC     DX				     ;;AN000;;	     Size = Size + 1
 0419  49                    C1		      DEC     CX				     ;;AN000;;	     Decrement total size
 041A  75 E3                 C1		    JNZ $MDO167
 041C                        C1	$MEN167:
 041C                        C1	$MIF166:
 041C  56                    C1		  PUSH	  SI					     ;;AN000;; Save beginning of sublists
 041D  87 CA                 C1		  XCHG	  CX,DX 				     ;;AN000;; Get size of message to displa
				y (tot sz in DX)
 041F  0B ED                 C1		  OR	  BP,BP 				     ;;AN000;; Do we have any replacables to
				 do?
 0421  74 33                 C1		  JZ $MIF173
 0423  4D                    C1		    DEC     BP					     ;;AN000;;	 Decrement number of replaca
				bles
 0424  83 3E 0048 R 00       C1		    CMP     $M_RT.$M_MSG_NUM,$M_NULL		     ;;AN000;; Is this an Extended/Parse cas
				e
 0429  75 2B                 C1		    JNE $MIF174
 042B                        C1	$MDO175:
 042B  8A 44 06              C1			MOV	AL,$M_SL.$M_S_ID		     ;;AN000;;	 Get ID byte
 042E  04 30                 C1			ADD	AL,30H				     ;;AN000;;	 Convert to ASCII
 0430  26: 3A 45 01          C1			CMP	AL,BYTE PTR ES:[DI]+1		     ;;AN000;;	 Is this the right sublist?
 0434  75 02                 C1		      JNE $MIF175
 0436  EB 1E                 C1		      JMP SHORT $MSR175
 0438                        C1	$MIF175:
 0438  3C 30                 C1			CMP	AL,$M_SPECIAL_CASE		     ;;AN000;;	   Does this sublist have ID
				 = 0
 043A  75 04                 C1		      JNE $MLL178
 043C  0B D2                 C1			OR	DX,DX				     ;;AN000;;	   Are we at the end of the 
				message?
 043E  74 04                 C1		      JZ $MEN175
 0440                        C1	$MLL178:
 0440  03 34                 C1			ADD	SI,WORD PTR $M_SL.$M_S_SIZE	     ;;AN000;;	     Next SUBLIST
 0442  EB E7                 C1		      JMP SHORT $MDO175
 0444                        C1	$MEN175:
 0444  80 3E 0045 R FF       C1			CMP	$M_RT.$M_CLASS,UTILITY_MSG_CLASS     ;;AN004;;	     Is it a utility message
				?
 0449  75 08                 C1			JNE $MIF180
 044B  42                    C1			  INC	  DX				     ;;AN000;;	       Remember to display C
				R,LF
 044C  42                    C1			  INC	  DX				     ;;AN000;;		 at the end of the m
				essage
 044D  49                    C1			  DEC	  CX				     ;;AN000;;	       Adjust message length
 044E  49                    C1			  DEC	  CX				     ;;AN000;;
 044F  4F                    C1			  DEC	  DI				     ;;AN000;;	       Adjust ending address
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-35
DOS - Message Retriever - DISPMSG.ASM Module                

				 of message
 0450  4F                    C1			  DEC	  DI				     ;;AN000;;
 0451  EB 03                 C1			JMP SHORT $MEN180
 0453                        C1	$MIF180:
 0453  BA FFFF               C1			  MOV	  DX,-1 			     ;;AN004;;	       Set special case
 0456                        C1	$MEN180:
 0456                        C1	$MSR175:
 0456                        C1	$MIF174:
 0456                        C1	$MIF173:
 0456  57                    C1		  PUSH	  DI					     ;;AN000;; Save pointer to replace numbe
				r
 0457  2B F9                 C1		  SUB	  DI,CX 				     ;;AN000;; Determine beginning of string
 0459  E8 02A9 R             C1		  CALL	  $M_DISPLAY_STRING			     ;;AN000;; Display string until % (or en
				d)
 045C  5F                    C1		  POP	  DI					     ;;AN000;; Get back pointer to replace n
				umber
 045D  59                    C1		  POP	  CX					     ;;AN000;; Clean up stack in case error
 045E  73 03                 C1		JNC $MXL3
 0460  EB 7F 90              C1		JMP $MEN165
 0463                        C1	$MXL3:
 0463  51                    C1		  PUSH	  CX					     ;;AN000;;
 0464  8B CA                 C1		  MOV	  CX,DX 				     ;;AN000;; Get the size of the rest of t
				he message
 0466  80 7C 06 00           C1		  CMP	  $M_SL.$M_S_ID,$M_SPECIAL_CASE-30H	     ;;AN000;; Is this the %0 case?
 046A  74 0D                 C1		  JE $MIF187
 046C  0B C9                 C1		    OR	    CX,CX				     ;;AN000;;	Are we finished the whole me
				ssage?
 046E  74 06                 C1		    JZ $MIF188
 0470  49                    C1		      DEC     CX				     ;;AN000;;	  Decrement total size (%)
 0471  49                    C1		      DEC     CX				     ;;AN000;;	  Decrement total size (#)
 0472  47                    C1		      INC     DI				     ;;AN000;;	  Go past %
 0473  47                    C1		      INC     DI				     ;;AN000;;	  Go past replace number
 0474  EB 01                 C1		    JMP SHORT $MEN188
 0476                        C1	$MIF188:
 0476  5E                    C1		      POP     SI				     ;;AN000;;	  Get back pointer to beginn
				ing of SUBLISTs
 0477                        C1	$MEN188:
 0477  EB 10                 C1		  JMP SHORT $MEN187
 0479                        C1	$MIF187:
 0479  0B C9                 C1		    OR	    CX,CX				     ;;AN000;;	Are we finished the whole me
				ssage?
 047B  75 03                 C1		    JNZ $MIF192
 047D  5E                    C1		      POP     SI				     ;;AN000;;	 Get back pointer to beginni
				ng of SUBLISTs
 047E  EB 09                 C1		    JMP SHORT $MEN192
 0480                        C1	$MIF192:
 0480  83 F9 FF              C1		      CMP     CX,-1				     ;;AN004;;	 Are we at the end of the me
				ssage?
 0483  75 02                 C1		      JNZ $MIF194
 0485  33 C9                 C1			XOR	CX,CX				     ;;AN004;;
 0487                        C1	$MIF194:
 0487  0B FF                 C1		      OR      DI,DI				     ;;AN004;;	Turn ZF off
 0489                        C1	$MEN192:
 0489                        C1	$MEN187:
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-36
DOS - Message Retriever - DISPMSG.ASM Module                

 0489  74 56                 C1		JZ $MEN165
 048B  55                    C1		  PUSH	  BP					     ;;AN000;;	 Save the replace count
 048C  57                    C1		  PUSH	  DI					     ;;AN000;;	 Save location to complete m
				essage
 048D  06                    C1		  PUSH	  ES					     ;;AN000;;
 048E  51                    C1		  PUSH	  CX					     ;;AN000;;	 Save size of the rest of th
				e message
 048F  33 C9                 C1		  XOR	  CX,CX 				     ;;AN000;;	 Reset CX used for character
				 count
 0491  83 3E 0048 R 00       C1		  CMP	  $M_RT.$M_MSG_NUM,$M_NULL		     ;;AN000;; Is this an Extended/Parse cas
				e
 0496  75 2D                 C1		  JNE $MIF199
 0498  F6 44 07 0F           C1		    TEST    BYTE PTR $M_SL.$M_S_FLAG,NOT Char_Type AND $M_TYPE_MASK ;;AN000;;
 049C  75 08                 C1		    JNZ $MIF200
 049E  C4 7C 02              C1		      LES     DI,DWORD PTR $M_SL.$M_S_VALUE	     ;;AN000;; Load pointer to replacing par
				ameter
 04A1  E8 0718 R             C1		      CALL    $M_CHAR_REPLACE			     ;;AN000;;
 04A4  EB 1A                 C1		    JMP SHORT $MEN200
 04A6                        C1	$MIF200:
 04A6  F6 44 07 0D           C1		      TEST    BYTE PTR $M_SL.$M_S_FLAG,NOT Sgn_Bin_Type AND $M_TYPE_MASK ;;AN000;;
 04AA  74 0C                 C1		      JZ $MLL202
 04AC  F6 44 07 0E           C1		      TEST    BYTE PTR $M_SL.$M_S_FLAG,NOT Unsgn_Bin_Type AND $M_TYPE_MASK ;;AN000;;
 04B0  74 06                 C1		      JZ $MLL202
 04B2  F6 44 07 0C           C1		      TEST    BYTE PTR $M_SL.$M_S_FLAG,NOT Bin_Hex_Type AND $M_TYPE_MASK ;;AN000;;
 04B6  75 08                 C1		      JNZ $MIF202
 04B8                        C1	$MLL202:
 04B8  C4 7C 02              C1			LES	DI,DWORD PTR $M_SL.$M_S_VALUE	     ;;AN000;; Load pointer to replacing par
				ameter
 04BB  E8 0740 R             C1			CALL	$M_BIN2ASC_REPLACE		     ;;AN000;;
 04BE  EB 00                 C1		      JMP SHORT $MEN202
 04C0                        C1	$MIF202:
 04C0                        C1	$MEN202:
 04C0                        C1	$MEN200:
 04C0  E8 063D R             C1		    CALL    $M_DISPLAY_REPLACE			     ;;AN000;; Display the replace
 04C3  EB 03                 C1		  JMP SHORT $MEN199
 04C5                        C1	$MIF199:
 04C5  E8 04E8 R             C1		    CALL    $M_EXT_PAR_REPLACE			     ;;AN000;;
 04C8                        C1	$MEN199:
 04C8  72 07                 C1		  JC $MIF211
 04CA  59                    C1		    POP     CX					     ;;AN000;; Get size of the rest of the m
				essage
 04CB  07                    C1		    POP     ES					     ;;AN000;; Get address of the rest of th
				e message
 04CC  5F                    C1		    POP     DI					     ;;AN000;;
 04CD  5D                    C1		    POP     BP					     ;;AN000;; Get replacment count
 04CE  5E                    C1		    POP     SI					     ;;AN000;; ELSE get address of first sub
				list structure
 04CF  EB 04                 C1		  JMP SHORT $MEN211
 04D1                        C1	$MIF211:
 04D1  83 C4 0A              C1		    ADD     SP,10				     ;;AN000;; Clean up stack if error
 04D4  F9                    C1		    STC 					     ;;AN000;;
 04D5                        C1	$MEN211:
 04D5  83 3E 0048 R 00       C1		  CMP	  $M_RT.$M_MSG_NUM,$M_NULL		     ;;AN000;; Is this an Extended/Parse cas
				e
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-37
DOS - Message Retriever - DISPMSG.ASM Module                

 04DA  75 05                 C1		JNE $MLL214
 04DC  72 03                 C1		JC $MXL4
 04DE  E9 03F5 R             C1		JMP $MDO165
 04E1                        C1	$MXL4:
 04E1                        C1	$MLL214:
 04E1                        C1	$MEN165:
 04E1  C7 06 0048 R 0000     C1		MOV	$M_RT.$M_MSG_NUM,0			     ;;AN000;; Reset message number to null
 04E7  C3                    C1		RET						     ;;AN000;; Return
 04E8                        C1	$M_DISPLAY_MESSAGE ENDP 				     ;;AN000;;
 04E8                        C1	$M_EXT_PAR_REPLACE PROC NEAR				     ;;AN000;;
 04E8  33 D2                 C1		XOR	DX,DX					     ;;AN000;; Prepare for get binary value 
				(HIGH)
 04EA  A1 0048 R             C1		MOV	AX,$M_RT.$M_MSG_NUM			     ;;AN000;; Prepare for get binary value 
				(LOW)
 04ED  C7 06 004A R 000A     C1		MOV	$M_RT.$M_DIVISOR,$M_BASE10		     ;;AN000;; Set default divisor
 04F3  E8 038B R             C1		CALL	$M_CONVERT2ASC				     ;;AN000;;
 04F6                        C1	$MDO215:
 04F6  58                    C1		  POP	  AX					     ;;AN000;;	 Get character in register
 04F7  88 87 004C R          C1		  MOV	  BYTE PTR $M_RT.$M_TEMP_BUF[BX],AL	     ;;AN000;;	Move char into the buffer
 04FB  43                    C1		  INC	  BX					     ;;AN000;;	 Increase buffer count
 04FC  83 FB 40              C1		  CMP	  BX,$M_TEMP_BUF_SZ			     ;;AN000;;	 Is buffer full?
 04FF  75 03                 C1		  JNE $MIF216
 0501  E8 06FC R             C1		    CALL    $M_FLUSH_BUF			     ;;AN000;;	   Flush the buffer
 0504                        C1	$MIF216:
 0504  FE C9                 C1		  DEC	  CL					     ;;AN000;;	 Have we completed replace?
 0506  75 EE                 C1		JNZ $MDO215
 0508  B8 0A0D               C1		MOV	AX,$M_CR_LF				     ;;AN000;;	Move char into the buffer
 050B  89 87 004C R          C1		MOV	WORD PTR $M_RT.$M_TEMP_BUF[BX],AX	     ;;AN000;;	Move char into the buffer
 050F  43                    C1		INC	BX					     ;;AN000;;	 Increase buffer count
 0510  43                    C1		INC	BX					     ;;AN000;;	 Increase buffer count
 0511  E8 06FC R             C1		CALL	$M_FLUSH_BUF				     ;;AN000;;	   Flush the buffer
 0514  C3                    C1		RET						     ;;AN000::
 0515                        C1	$M_EXT_PAR_REPLACE ENDP 				     ;;AN000;;
 0515                        C1		  $M_GET_MSG_ADDRESS PROC NEAR			     ;;AN000;;
 0515  56                    C1		  PUSH	  SI					     ;;AN000;;
 0516  53                    C1		  PUSH	  BX					     ;;AN000;;
 0517  33 F6                 C1		  XOR	  SI,SI 				     ;;AN000;; Use SI as an index
 0519  33 C9                 C1		  XOR	  CX,CX 				     ;;AN000;; Use CX as an size
 051B                        C1	$MDO219:
 051B  80 FE FF              C1		    CMP     DH,UTILITY_MSG_CLASS		     ;;AN000;; Were utility messages request
				ed?
 051E  75 08                 C1		    JNE $MIF220
 0520  8B BC 002C R          C1			MOV	DI,WORD PTR $M_RT.$M_CLASS_ADDRS[SI] ;;AN000;;	 Get address of class
 0524  8B DF                 C1			MOV	BX,DI				     ;;AN000;
 0526  EB 25                 C1		    JMP SHORT $MEN220
 0528                        C1	$MIF220:
 0528  F6 C6 02              C1		      TEST    DH,PARSE_ERR_CLASS		     ;;AN000;;	 Were parse errors requested
				?
 052B  74 08                 C1		      JE $MIF222
 052D  C4 BC 0010 R          C1			LES	DI,DWORD PTR $M_RT.$M_PARSE_COMMAND[SI] ;;AN000;;   Get address of class
 0531  8C C3                 C1			MOV	BX,ES				     ;;AN000;
 0533  EB 18                 C1		      JMP SHORT $MEN222
 0535                        C1	$MIF222:
 0535  3D 0013               C1			CMP	AX,$M_CRIT_LO			     ;;AN000;;	   Is this a critical error?
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-38
DOS - Message Retriever - DISPMSG.ASM Module                

 0538  72 0D                 C1			JNAE $MIF224
 053A  3D 0027               C1			CMP	AX,$M_CRIT_HI			     ;;AN000;;
 053D  77 08                 C1			JNBE $MIF224
 053F  C4 BC 001C R          C1			  LES	  DI,DWORD PTR $M_RT.$M_CRIT_ADDRS[SI] ;;AN000;; Get address of class
 0543  8C C3                 C1			  MOV	  BX,ES 			     ;;AN000;
 0545  EB 06                 C1			JMP SHORT $MEN224
 0547                        C1	$MIF224:
 0547  C4 BC 0000 R          C1			  LES	  DI,DWORD PTR $M_RT.$M_EXT_ERR_ADDRS[SI] ;;AN000;; Get address of class
 054B  8C C3                 C1			  MOV	  BX,ES 			     ;;AN000;
 054D                        C1	$MEN224:
 054D                        C1	$MEN222:
 054D                        C1	$MEN220:
 054D  83 FB FF              C1		    CMP     BX,$M_TERMINATING_FLAG		     ;;AN000;; Are we finished all classes?
 0550  75 16                 C1		    JNE $MIF229
 0552  80 FE FF              C1		      CMP     DH,UTILITY_MSG_CLASS		     ;;AN000;;	  Was it a UTILITY class?
 0555  75 03                 C1		      JNE $MIF230
 0557  F9                    C1			STC					     ;;AN000;;	    Set the carry flag
 0558  EB 0C                 C1		      JMP SHORT $MEN230
 055A                        C1	$MIF230:
 055A  A3 0048 R             C1			MOV	$M_RT.$M_MSG_NUM,AX		     ;;AN000;;	    Save message number
 055D  B8 FFFF               C1			MOV	AX,$M_SPECIAL_MSG_NUM		     ;;AN000;;	    Set special message numb
				er
 0560  BD 0001               C1			MOV	BP,$M_ONE_REPLACE		     ;;AN000;;	    Set one replace in messa
				ge
 0563  33 F6                 C1			XOR	SI,SI				     ;;AN000;;	    Reset the SI index to st
				art again
 0565  F8                    C1			CLC					     ;;AN000;;
 0566                        C1	$MEN230:
 0566  EB 0C                 C1		    JMP SHORT $MEN229
 0568                        C1	$MIF229:
 0568  83 FB 00              C1		      CMP     BX,$M_CLASS_NOT_EXIST		     ;;AN000;;	 Does this class exist?
 056B  74 03                 C1		      JE $MIF234
 056D  E8 05C4 R             C1			CALL	$M_FIND_SPECIFIED_MSG		     ;;AN000;;	   Try to find the message
 0570                        C1	$MIF234:
 0570  83 C6 04              C1		      ADD     SI,$M_ADDR_SZ_FAR 		     ;;AN000;;	     Get next class
 0573  F8                    C1		      CLC					     ;;AN000;;
 0574                        C1	$MEN229:
 0574  72 06                 C1		  JC $MEN219
 0576  0B C9                 C1		    OR	    CX,CX				     ;;AN000;;	   Was the message found?
 0578  75 02                 C1		  JNZ $MXL5
 057A  EB 9F                 C1		  JMP $MDO219
 057C                        C1	$MXL5:
 057C                        C1	$MEN219:
 057C  9C                    C1		  PUSHF 					     ;;AN006;; Save the flag state
 057D  80 FE 01              C1		  CMP	  DH,EXT_ERR_CLASS			     ;;AN006;; Was an extended error request
				ed?
 0580  75 29                 C1		  JNE $MIF239
 0582  52                    C1		    PUSH    DX					     ;;AN006;;	Save all needed registers
 0583  55                    C1		    PUSH    BP					     ;;AN006;;
 0584  51                    C1		    PUSH    CX					     ;;AN006;;
 0585  06                    C1		    PUSH    ES					     ;;AN006;;
 0586  57                    C1		    PUSH    DI					     ;;AN006;;
 0587  50                    C1		    PUSH    AX					     ;;AN006;;
 0588  B8 0500               C1		    MOV     AX,IFSFUNC_INSTALL_CHECK		     ;;AN006;;	Check if IFSFUNC is installe
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-39
DOS - Message Retriever - DISPMSG.ASM Module                

				d
 058B  CD 2F                 C1		    INT     2FH 				     ;;AN006;;
 058D  3C FF                 C1		    CMP     AL,IFSFUNC_INSTALLED		     ;;AN006;;	Is it installed?
 058F  58                    C1		    POP     AX					     ;;AN006;;	Restore msg number
 0590  75 09                 C1		    JNE $MIF240
 0592  8B D8                 C1		      MOV     BX,AX				     ;;AN006;;	  BX is the extended error n
				umber
 0594  B8 0502               C1		      MOV     AX,IFS_GET_ERR_TEXT		     ;;AN006;;	  AX is the muliplex number
 0597  CD 2F                 C1		      INT     2FH				     ;;AN006;;	  Call IFSFUNC
 0599  EB 01                 C1		    JMP SHORT $MEN240
 059B                        C1	$MIF240:
 059B  F9                    C1		      STC					     ;;AN006;;	  Carry conditon
 059C                        C1	$MEN240:
 059C  73 05                 C1		    JNC $MIF243
 059E  5F                    C1		      POP     DI				     ;;AN006;;	No,
 059F  07                    C1		      POP     ES				     ;;AN006;;	 Restore old pointer
 05A0  59                    C1		      POP     CX				     ;;AN006;;
 05A1  EB 06                 C1		    JMP SHORT $MEN243
 05A3                        C1	$MIF243:
 05A3  83 C4 06              C1		      ADD     SP,6				     ;;AN006;;	 Throw away old pointer
 05A6  E8 05B5 R             C1		      CALL    $M_SET_LEN_IN_CX			     ;;AN006;;	 Get the length of the ASCII
				Z string
 05A9                        C1	$MEN243:
 05A9  5D                    C1		    POP     BP					     ;;AN006;;	Restore other Regs
 05AA  5A                    C1		    POP     DX					     ;;AN006;;
 05AB                        C1	$MIF239:
 05AB  EB 01                 C2		   JMP	   $+3 
 05AD                        C2	??0000   LABEL   NEAR 
 05AD  CF                    C2		   IRET 
 05AE  0E                    C2		   PUSH    CS 
 05AF  E8 05AD R             C2		   CALL    ??0000 
 05B2  5B                    C1		  POP	  BX					     ;;AN000;;
 05B3  5E                    C1		  POP	  SI					     ;;AN000;;
 05B4  C3                    C1		  RET						     ;;AN000;; Return ES:DI pointing to the 
				message
 05B5                        C1	$M_GET_MSG_ADDRESS ENDP 				     ;;
 05B5                        C1	$M_SET_LEN_IN_CX PROC NEAR				     ;;
 05B5  57                    C1		  PUSH	  DI					     ;;AN006;; Save position
 05B6  50                    C1		  PUSH	  AX					     ;;AN006;;
 05B7  B9 FFFF               C1		  MOV	  CX,-1 				     ;;AN006;; Set CX for decrements
 05BA  32 C0                 C1		  XOR	  AL,AL 				     ;;AN006;; Prepare compare register
 05BC  F2/ AE                C1		  REPNE   SCASB 				     ;;AN006;; Scan for zero
 05BE  F7 D1                 C1		  NOT	  CX					     ;;AN006;; Change decrement into number
 05C0  49                    C1		  DEC	  CX					     ;;AN006;; Don't include the zero
 05C1  58                    C1		  POP	  AX					     ;;AN006;;
 05C2  5F                    C1		  POP	  DI					     ;;AN006;; Restore position
 05C3  C3                    C1		  RET						     ;;AN006;;
 05C4                        C1	$M_SET_LEN_IN_CX ENDP					     ;;
 05C4                        C1	$M_FIND_SPECIFIED_MSG PROC NEAR 			     ;;AN000;;
 05C4  83 FB 01              C1		  CMP	  BX,1					     ;;AN004;;	Do we have an address to CAL
				L?
 05C7  75 1D                 C1		  JNE $MIF247
 05C9  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?
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-40
DOS - Message Retriever - DISPMSG.ASM Module                

 05CE  74 16                 C1		  JE $MIF247
 05D0  3D FFFF               C1		    CMP     AX,$M_SPECIAL_MSG_NUM		     ;;AN004;; Are we displaying a default E
				xt Err?
 05D3  75 0B                 C1		    JNE $MIF248
 05D5  50                    C1		      PUSH    AX				     ;;AN004;;	 Reset the special message n
				umber
 05D6  A1 0048 R             C1		      MOV     AX,$M_RT.$M_MSG_NUM		     ;;AN004;;	 Get the old message number
 05D9  FF 1E 0028 R          C1		      CALL    DWORD PTR $M_RT.$M_DISK_PROC_ADDR      ;;AN004;;	 Call the READ_DISK_PROC to 
				get error text
 05DD  58                    C1		      POP     AX				     ;;AN004;;	 Reset the special message n
				umber
 05DE  EB 04                 C1		    JMP SHORT $MEN248
 05E0                        C1	$MIF248:
 05E0  FF 1E 0028 R          C1		      CALL    DWORD PTR $M_RT.$M_DISK_PROC_ADDR      ;;AN004;;	 Call the READ_DISK_PROC to 
				get error text
 05E4                        C1	$MEN248:
 05E4  EB 1A                 C1		  JMP SHORT $MEN247
 05E6                        C1	$MIF247:
 05E6  33 C9                 C1		    XOR     CX,CX				     ;;AN002;;	 CX = 0 will allow us to
 05E8  80 FE FF              C1		    CMP     DH,UTILITY_MSG_CLASS		     ;;AN001;;
 05EB  74 06                 C1		    JE $MIF252
 05ED  26: 8A 4D 03          C1		      MOV     CL,BYTE PTR ES:[DI].$M_NUM_CLS_MSG     ;;AN001;;	 Get number of messages in c
				lass
 05F1  EB 09                 C1		    JMP SHORT $MEN252
 05F3                        C1	$MIF252:
 05F3  2E: 38 35             C1		      CMP     BYTE PTR CS:[DI].$M_CLASS_ID,DH	     ;;AN002;; Check if class still exists a
				t
 05F6  75 04                 C1		      JNE $MIF254
 05F8  2E: 8A 4D 03          C1			MOV	CL,BYTE PTR CS:[DI].$M_NUM_CLS_MSG   ;;AN000;;	   Get number of messages in
				 class
 05FC                        C1	$MIF254:
 05FC                        C1	$MEN252:
 05FC  83 C7 04              C1		    ADD     DI,$M_CLASS_ID_SZ			     ;;AN000;;	   Point past the class head
				er
 05FF  F9                    C1		    STC 					     ;;AN004;;	 Flag that we haven't found 
				anything yet
 0600                        C1	$MEN247:
 0600  73 2D                 C1		  JNC $MIF258
 0602  F8                    C1		    CLC 					     ;;AN004;; No, reset carry
 0603                        C1	$MDO259:
 0603  0B C9                 C1		      OR      CX,CX				     ;;AN000;;	  Do we have any to check?
 0605  74 19                 C1		    JZ $MEN259
 0607  80 FE FF              C1		      CMP     DH,UTILITY_MSG_CLASS		     ;;AN001;;
 060A  74 05                 C1		      JE $MIF261
 060C  26: 3B 05             C1			CMP	AX,WORD PTR ES:[DI].$M_NUM	     ;;AN001;; Is this the message requested
				?
 060F  EB 03                 C1		      JMP SHORT $MEN261
 0611                        C1	$MIF261:
 0611  2E: 3B 05             C1			CMP	AX,WORD PTR CS:[DI].$M_NUM	     ;;AN000;; Is this the message requested
				?
 0614                        C1	$MEN261:
 0614  75 02                 C1		    JNE $MIF259
 0616  EB 09                 C1		    JMP SHORT $MSR259
 0618                        C1	$MIF259:
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-41
DOS - Message Retriever - DISPMSG.ASM Module                

 0618  49                    C1		      DEC     CX				     ;;AN000;;	  No, well do we have more t
				o check?
 0619  74 05                 C1		    JZ $MEN259
 061B  83 C7 04              C1		      ADD     DI,$M_ID_SZ			     ;;AN000;;	     Yes, skip past msg head
				er
 061E  EB E3                 C1		    JMP SHORT $MDO259
 0620                        C1	$MEN259:
 0620  F9                    C1		      STC					     ;;AN000;;
 0621                        C1	$MSR259:
 0621  72 0C                 C1		    JC $MIF269
 0623  80 FE FF              C1		      CMP     DH,UTILITY_MSG_CLASS		     ;;AN001;;	 Yes, is it a utility messag
				e?
 0626  F8                    C1		      CLC					     ;;AN001;;
 0627  75 02                 C1		      JNE $MIF270
 0629  0E                    C1			PUSH	CS				     ;;AN000;;
 062A  07                    C1			POP	ES				     ;;AN000;;	 Return ES:DI pointing to th
				e message
 062B                        C1	$MIF270:
 062B  26: 03 7D 02          C1		      ADD     DI,WORD PTR ES:[DI].$M_TXT_PTR	     ;;AN000;; Prepare ES:DI pointing to the
				 message
 062F                        C1	$MIF269:
 062F                        C1	$MIF258:
 062F  72 06                 C1		  JC $MIF274
 0631  32 ED                 C1		    XOR     CH,CH				     ;;AN000;;
 0633  26: 8A 0D             C1		    MOV     CL,BYTE PTR ES:[DI] 		     ;;AN000;;	 Move size into CX
 0636  47                    C1		    INC     DI					     ;;AN000;;	 Increment past length
 0637                        C1	$MIF274:
 0637  C6 06 0042 R 00       C1		  MOV	  $M_RT.$M_SIZE,$M_NULL 		     ;;AN004;; Reset variable
 063C  C3                    C1		  RET						     ;;AN000;; Return
 063D                        C1	$M_FIND_SPECIFIED_MSG ENDP				     ;;AN000;;
 063D                        C1	$M_DISPLAY_REPLACE PROC NEAR				     ;;AN000;;
 063D  33 DB                 C1		  XOR	  BX,BX 				     ;;AN000;; Use BX for buffer count
 063F  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)
 0643  75 11                 C1		  JNE $MIF276
 0645  C7 87 004C R 2D20     C1		    MOV     WORD PTR $M_RT.$M_TEMP_BUF[BX],$M_SPACE_HYP ;;AN000;; Move in a " -"
 064B  43                    C1		    INC     BX					     ;;AN000;;	   Increment count
 064C  43                    C1		    INC     BX					     ;;AN000;;	   Increment count
 064D  C6 87 004C R 20       C1		    MOV     BYTE PTR $M_RT.$M_TEMP_BUF[BX],$M_SPACE  ;;AN000;;	   Move in a " "
 0652  43                    C1		    INC     BX					     ;;AN000;;	   Increment count
 0653  E8 06FC R             C1		    CALL    $M_FLUSH_BUF			     ;;AN000;;	   Write out " - " to prepar
				e for special case
 0656                        C1	$MIF276:
 0656  5D                    C1		  POP	  BP					     ;;AN000;; Remember the return address
 0657  33 DB                 C1		  XOR	  BX,BX 				     ;;AN000;; Use BX for buffer count
 0659  33 D2                 C1		  XOR	  DX,DX 				     ;;AN000;; Use DX for count of parms tak
				en off the stack
 065B  88 0E 0042 R          C1		  MOV	  $M_RT.$M_SIZE,CL			     ;;AN000;; Save size to later clear stac
				k
 065F  8A 44 09              C1		  MOV	  AL,BYTE PTR $M_SL.$M_S_MINW		     ;;AN000;; Get the minimum width
 0662  3A C1                 C1		  CMP	  AL,CL 				     ;;AN000;; Do we need pad chars added?
 0664  76 1E                 C1		  JNA $MIF278
 0666  2A C1                 C1		    SUB     AL,CL				     ;;AN000;;	 Calculate how many pad char
				s are needed.
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-42
DOS - Message Retriever - DISPMSG.ASM Module                

 0668  8A F0                 C1		    MOV     DH,AL				     ;;AN000;;	 Save the number of pad char
				acters
 066A  F6 44 07 80           C1		    TEST    BYTE PTR $M_SL.$M_S_FLAG,Right_Align     ;;AN000;;	 Was replaceable parm to be 
				right aligned?
 066E  74 14                 C1		    JZ $MIF279
 0670                        C1	$MDO280:
 0670  8A 44 0A              C1			MOV	AL,BYTE PTR $M_SL.$M_S_PAD	     ;;AN000;;
 0673  88 87 004C R          C1			MOV	BYTE PTR $M_RT.$M_TEMP_BUF[BX],AL    ;;AN000;;	   Move in a pad char
 0677  43                    C1			INC	BX				     ;;AN000;;
 0678  83 FB 40              C1			CMP	BX,$M_TEMP_BUF_SZ		     ;;AN000;;	   Is buffer full?
 067B  75 03                 C1			JNE $MIF281
 067D  E8 06FC R             C1			  CALL	  $M_FLUSH_BUF			     ;;AN000;;	     Flush the buffer
 0680                        C1	$MIF281:
 0680  FE CE                 C1			DEC	DH				     ;;AN000;;	   Have we filled with enoug
				h pad chars?
 0682  75 EC                 C1		      JNZ $MDO280
 0684                        C1	$MIF279:
 0684                        C1	$MIF278:
 0684  80 7C 08 00           C1		  CMP	  BYTE PTR $M_SL.$M_S_MAXW,$M_UNLIM_W	     ;;AN000;; Is maximum width unlimited?
 0688  74 0D                 C1		  JE $MIF286
 068A  38 4C 08              C1		    CMP     BYTE PTR $M_SL.$M_S_MAXW,CL 	     ;;AN000;; Will we exceed maximum width?
 068D  73 08                 C1		    JNB $MIF287
 068F  2A 4C 08              C1		      SUB     CL,BYTE PTR $M_SL.$M_S_MAXW	     ;;AN000;;	 Calculate how many extra ch
				ars
 0692  8A D1                 C1		      MOV     DL,CL				     ;;AN000;;	 Remember how many chars to 
				pop off
 0694  8A 4C 08              C1		      MOV     CL,BYTE PTR $M_SL.$M_S_MAXW	     ;;AN000;;	 Set new string length
 0697                        C1	$MIF287:
 0697                        C1	$MIF286:
 0697  0B C9                 C1		  OR	  CX,CX 				     ;;AN000;;
 0699  74 24                 C1		  JZ $MIF290
 069B                        C1	$MDO291:
 069B  F6 44 07 0F           C1		      TEST    BYTE PTR $M_SL.$M_S_FLAG,NOT Char_Type AND $M_TYPE_MASK ;;AN000;;
 069F  75 0C                 C1		      JNZ $MIF292
 06A1  F6 44 07 10           C1		      TEST    $M_SL.$M_S_FLAG,Char_field_ASCIIZ AND $M_SIZE_MASK ;  Is this replace a ASCIIZ
				 string?
 06A5  74 06                 C1		      JZ $MIF292
 06A7  26: 8A 05             C1			MOV	AL,BYTE PTR ES:[DI]		     ;;AN000;;	 Get first character from st
				ring
 06AA  47                    C1			INC	DI				     ;;AN000;;	 Next character in string
 06AB  EB 01                 C1		      JMP SHORT $MEN292
 06AD                        C1	$MIF292:
 06AD  58                    C1			POP	AX				     ;;AN000;;	 Get character in register
 06AE                        C1	$MEN292:
 06AE  88 87 004C R          C1		      MOV     BYTE PTR $M_RT.$M_TEMP_BUF[BX],AL      ;;AN000;;	Move char into the buffer
 06B2  43                    C1		      INC     BX				     ;;AN000;;	 Increase buffer count
 06B3  83 FB 40              C1		      CMP     BX,$M_TEMP_BUF_SZ 		     ;;AN000;;	 Is buffer full?
 06B6  75 03                 C1		      JNE $MIF295
 06B8  E8 06FC R             C1			CALL	$M_FLUSH_BUF			     ;;AN000;;	   Flush the buffer
 06BB                        C1	$MIF295:
 06BB  FE C9                 C1		      DEC     CL				     ;;AN000;;	 Have we completed replace?
 06BD  75 DC                 C1		    JNZ $MDO291
 06BF                        C1	$MIF290:
 06BF  F6 44 07 80           C1		  TEST	  BYTE PTR $M_SL.$M_S_FLAG,Right_Align	     ;;AN000;;	 Was replaceable parm to be 
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-43
DOS - Message Retriever - DISPMSG.ASM Module                

				left aligned?
 06C3  75 18                 C1		  JNZ $MIF299
 06C5  0A F6                 C1		    OR	    DH,DH				     ;;AN000;;	 Do we need pad chars added?
 06C7  74 14                 C1		    JZ $MIF300
 06C9                        C1	$MDO301:
 06C9  8A 44 0A              C1			MOV	AL,BYTE PTR $M_SL.$M_S_PAD	     ;;AN000;;
 06CC  88 87 004C R          C1			MOV	BYTE PTR $M_RT.$M_TEMP_BUF[BX],AL    ;;AN000;;	   Move in a pad char
 06D0  43                    C1			INC	BX				     ;;AN000;;
 06D1  83 FB 40              C1			CMP	BX,$M_TEMP_BUF_SZ		     ;;AN000;;	   Is buffer full?
 06D4  75 03                 C1			JNE $MIF302
 06D6  E8 06FC R             C1			  CALL	  $M_FLUSH_BUF			     ;;AN000;;	     Flush the buffer
 06D9                        C1	$MIF302:
 06D9  FE CE                 C1			DEC	DH				     ;;AN000;;	   Have we filled with enoug
				h pad chars?
 06DB  75 EC                 C1		      JNZ $MDO301
 06DD                        C1	$MIF300:
 06DD                        C1	$MIF299:
 06DD  F6 44 07 0F           C1		  TEST	  BYTE PTR $M_SL.$M_S_FLAG,NOT Char_Type AND $M_TYPE_MASK ;;AN000;;
 06E1  75 08                 C1		  JNZ $MIF307
 06E3  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?
 06E7  74 02                 C1		  JZ $MIF307
 06E9  EB 0C                 C1		  JMP SHORT $MEN307
 06EB                        C1	$MIF307:
 06EB  0A D2                 C1		    OR	    DL,DL				     ;;AN000;;
 06ED  74 08                 C1		    JE $MIF309
 06EF                        C1	$MDO310:
 06EF  8F 06 0046 R          C1			POP	[$M_RT.$M_RETURN_ADDR]		     ;;AN000;;	 Clean Up stack using spare 
				variable
 06F3  FE CA                 C1			DEC	DL				     ;;AN000;;	 Are we done?
 06F5  75 F8                 C1		      JNZ $MDO310
 06F7                        C1	$MIF309:
 06F7                        C1	$MEN307:
 06F7  E8 06FC R             C1		  CALL	  $M_FLUSH_BUF				     ;;AN000;;	     Flush the buffer for th
				e final time
 06FA  55                    C1		  PUSH	  BP					     ;;AN000;; Restore the return address
 06FB  C3                    C1		  RET						     ;;AN000;;
 06FC                        C1	$M_DISPLAY_REPLACE ENDP 				     ;;AN000;;
 06FC                        C1	$M_FLUSH_BUF PROC NEAR					     ;;AN000;;
 06FC  51                    C1		  PUSH	  CX					     ;;AN000;; Save changed regs
 06FD  06                    C1		  PUSH	  ES					     ;;AN000;;
 06FE  57                    C1		  PUSH	  DI					     ;;AN000;;
 06FF  1E                    C1		  PUSH	  DS					     ;;AN000;; Set ES pointing to buffer
 0700  07                    C1		  POP	  ES					     ;;AN000;;
 0701  8B CB                 C1		  MOV	  CX,BX 				     ;;AN000;; Set number of bytes to displa
				y
 0703  33 DB                 C1		  XOR	  BX,BX 				     ;;AN000;; Reset buffer counter
 0705  8D 3E 004C R          C1		  LEA	  DI,$M_RT.$M_TEMP_BUF			     ;;AN000;; Reset buffer location pointer
 0709  E8 02A9 R             C1		  CALL	  $M_DISPLAY_STRING			     ;;AN000;; Display the buffer
 070C  72 05                 C1		  JC $MIF314
 070E  5F                    C1		    POP     DI					     ;;AN000;; No, Restore changed regs
 070F  07                    C1		    POP     ES					     ;;AN000;;
 0710  59                    C1		    POP     CX					     ;;AN000;;
 0711  EB 04                 C1		  JMP SHORT $MEN314
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-44
DOS - Message Retriever - DISPMSG.ASM Module                

 0713                        C1	$MIF314:
 0713  83 C4 06              C1		    ADD     SP,6				     ;;AN000;;	Fix stack
 0716  F9                    C1		    STC 					     ;;AN000;;
 0717                        C1	$MEN314:
 0717  C3                    C1		  RET						     ;;AN000;; Return
 0718                        C1	$M_FLUSH_BUF ENDP					     ;;AN000;;
 0718                        C1	$M_CHAR_REPLACE PROC NEAR				     ;;AN000;;
 0718  5D                    C1		    POP     BP					     ;;AN000;; Save return address
 0719  F6 44 07 30           C1		    TEST    $M_SL.$M_S_FLAG,NOT Char_Field_Char AND $M_SIZE_MASK ;;AN000;; Was Character spe
				cified?
 071D  75 12                 C1		    JNZ $MIF317
 071F  26: 8A 05             C1		      MOV     AL,BYTE PTR ES:[DI]		     ;;AN000;;	 Get the character
 0722  50                    C1		      PUSH    AX				     ;;AN000;;	 Put it on the stack
 0723  41                    C1		      INC     CX				     ;;AN000;;	 Increase the count
 0724  E8 0367 R             C1		      CALL    $M_IS_IT_DBCS			     ;;AN000;;	 Is this the first byte of a
				 DB character
 0727  73 06                 C1		      JNC $MIF318
 0729  26: 8A 45 01          C1			MOV	AL,BYTE PTR ES:[DI]+1		     ;;AN000;;	   Get the next character
 072D  50                    C1			PUSH	AX				     ;;AN000;;	   Put it on the stack
 072E  F8                    C1			CLC					     ;;AN000;;	   Clear the carry
 072F                        C1	$MIF318:
 072F  EB 0D                 C1		    JMP SHORT $MEN317
 0731                        C1	$MIF317:
 0731                        C1	$MDO321:
 0731  26: 8A 05             C1			MOV	AL,BYTE PTR ES:[DI]		     ;;AN000;;	 Get the character
 0734  0A C0                 C1			OR	AL,AL				     ;;AN000;;	 Is it the NULL?
 0736  74 04                 C1		      JZ $MEN321
 0738  47                    C1			INC	DI				     ;;AN000;;	   Next character
 0739  41                    C1			INC	CX				     ;;AN000;;	   Increment the count
 073A  EB F5                 C1		      JMP SHORT $MDO321
 073C                        C1	$MEN321:
 073C  2B F9                 C1		      SUB     DI,CX				     ;;AN000;;	 Set SI at the beginning of 
				the string
 073E                        C1	$MEN317:
 073E  55                    C1		    PUSH    BP					     ;;AN000;; Restore return address
 073F  C3                    C1		    RET 					     ;;AN000;; Return
 0740                        C1	$M_CHAR_REPLACE ENDP					     ;;AN000;;
 0740                        C1	$M_BIN2ASC_REPLACE PROC NEAR				     ;;AN000;;
 0740  5D                    C1		    POP     BP					     ;;AN000;; Save return address
 0741  33 D2                 C1		    XOR     DX,DX				     ;;AN000;; Prepare for get binary value 
				(HIGH)
 0743  33 C0                 C1		    XOR     AX,AX				     ;;AN000;; Prepare for get binary value 
				(LOW)
 0745  C7 06 004A R 0010     C1		    MOV     $M_RT.$M_DIVISOR,$M_BASE16		     ;;AN000;; Set default divisor
 074B  33 DB                 C1		    XOR     BX,BX				     ;;AN000;; Use BP as the NEG flag (if ap
				plicable)
 074D  F6 44 07 20           C1		    TEST    $M_SL.$M_S_FLAG,NOT $M_BYTE AND $M_SIZE_MASK ;;AN000;; Was BYTE specified?
 0751  75 24                 C1		    JNZ $MIF325
 0753  26: 8A 05             C1		      MOV     AL, BYTE PTR ES:[DI]		     ;;AN000;; Setup byte in AL
 0756  F6 44 07 0D           C1		      TEST    $M_SL.$M_S_FLAG,NOT Sgn_Bin_Type AND $M_TYPE_MASK ;;AN000;; Was Signed binary 
				specified?
 075A  75 0D                 C1		      JNZ $MIF326
 075C  A8 80                 C1			TEST	AL,10000000b			     ;;AN000;; Is this number negative?
 075E  74 03                 C1			JZ $MIF327
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-45
DOS - Message Retriever - DISPMSG.ASM Module                

 0760  43                    C1			  INC	  BX				     ;;AN000;;	   Remember that it was nega
				tive
 0761  24 7F                 C1			  AND	  AL,01111111b			     ;;AN000;;	   Make it positive
 0763                        C1	$MIF327:
 0763  C7 06 004A R 000A     C1			MOV	$M_RT.$M_DIVISOR,$M_BASE10	     ;;AN000;;
 0769                        C1	$MIF326:
 0769  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?
 076D  75 06                 C1		      JNZ $MIF330
 076F  C7 06 004A R 000A     C1			MOV	$M_RT.$M_DIVISOR,$M_BASE10	     ;;AN000;;
 0775                        C1	$MIF330:
 0775  EB 54                 C1		    JMP SHORT $MEN325
 0777                        C1	$MIF325:
 0777  F6 44 07 10           C1		      TEST    $M_SL.$M_S_FLAG,NOT $M_WORD AND $M_SIZE_MASK ;;AN000;; Was WORD specified?
 077B  75 26                 C1		      JNZ $MIF333
 077D  26: 8B 05             C1			MOV	AX, WORD PTR ES:[DI]		     ;;AN000;; Setup byte in AL
 0780  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?
 0784  75 0F                 C1			JNZ $MIF334
 0786  F6 C4 80              C1			  TEST	  AH,10000000b			     ;;AN000;; Is this number negative?
 0789  74 04                 C1			  JZ $MIF335
 078B  43                    C1			    INC     BX				     ;;AN000;;	   Remember that it was nega
				tive
 078C  80 E4 7F              C1			    AND     AH,01111111b		     ;;AN000;;	   Make it positive
 078F                        C1	$MIF335:
 078F  C7 06 004A R 000A     C1			  MOV	  $M_RT.$M_DIVISOR,$M_BASE10	     ;;AN000;;
 0795                        C1	$MIF334:
 0795  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?
 0799  75 06                 C1			JNZ $MIF338
 079B  C7 06 004A R 000A     C1			  MOV	  $M_RT.$M_DIVISOR,$M_BASE10	     ;;AN000;;
 07A1                        C1	$MIF338:
 07A1  EB 28                 C1		      JMP SHORT $MEN333
 07A3                        C1	$MIF333:
 07A3  26: 8B 05             C1			MOV	AX, WORD PTR ES:[DI]		     ;;AN000;; Setup Double word in DX:AX
 07A6  26: 8B 55 02          C1			MOV	DX, WORD PTR ES:[DI]+2		     ;;AN000;;
 07AA  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?
 07AE  75 0F                 C1			JNZ $MIF341
 07B0  F6 C6 80              C1			  TEST	  DH,10000000b			     ;;AN000;; Is this number negative?
 07B3  74 04                 C1			  JZ $MIF342
 07B5  43                    C1			    INC     BX				     ;;AN000;;	   Remember that it was nega
				tive
 07B6  80 E6 7F              C1			    AND     DH,01111111b		     ;;AN000;;	   Make it positive
 07B9                        C1	$MIF342:
 07B9  C7 06 004A R 000A     C1			  MOV	  $M_RT.$M_DIVISOR,$M_BASE10	     ;;AN000;;
 07BF                        C1	$MIF341:
 07BF  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?
 07C3  75 06                 C1			JNZ $MIF345
 07C5  C7 06 004A R 000A     C1			  MOV	  $M_RT.$M_DIVISOR,$M_BASE10	     ;;AN000;;
 07CB                        C1	$MIF345:
 07CB                        C1	$MEN333:
 07CB                        C1	$MEN325:
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-46
DOS - Message Retriever - DISPMSG.ASM Module                

 07CB  E8 038B R             C1		    CALL    $M_CONVERT2ASC			     ;;AN000;; Convert to ASCII string
 07CE  0B DB                 C1		    OR	    BX,BX				     ;;AN000;;
 07D0  74 05                 C1		    JZ $MIF349
 07D2  33 D2                 C1		      XOR     DX,DX				     ;;AN000;; Yes,
 07D4  B2 2D                 C1		      MOV     DL,$M_NEG_SIGN			     ;;AN000;;	 Put "-" on the stack with t
				he number
 07D6  52                    C1		      PUSH    DX				     ;;AN000;;
 07D7                        C1	$MIF349:
 07D7  55                    C1		    PUSH    BP					     ;;AN000;; Restore return address
 07D8  C3                    C1		    RET 					     ;;AN000;; Return
 07D9                        C1	$M_BIN2ASC_REPLACE ENDP 				     ;;AN000;;
				MSG_SERVICES <GRAPHICS.CL1,GRAPHICS.CL2,GRAPHICS.CLA,GRAPHICS.CLB,GRAPHICS.CLC> ;AN000;
 07D9                        C3	$M_CLASS_1_STRUC LABEL BYTE
 07D9  01                    C3	        $M_CLASS_ID <001H,EXPECTED_VERSION,Class_1_MessageCount>
 07DA  0400                  C3	
 07DC  01                    C3	
 07DD                        C3	$M_1_FF_STRUC LABEL BYTE
 07DD  FFFF                  C3	        $M_ID <0FFFFH,$M_1_FF_MSG-$M_1_FF_STRUC>
 07DF  0400                  C3	
 07E1                        C3	$M_1_FF_MSG LABEL BYTE
 07E1  11                    C3	        DB      $M_1_FF_END-$M_1_FF_MSG-1
 07E2  45 78 74 65 6E 64     C3	        DB      "Extended Error %1"
 07F3                        C3	$M_1_FF_END LABEL BYTE
 07F3                        C3	$M_MSGSERV_1 PROC NEAR
 07F3  0E                    C3	        PUSH    CS
 07F4  07                    C3	        POP     ES
 07F5  8D 3E 07D9 R          C3	        LEA     DI,$M_CLASS_1_STRUC
 07F9  83 C1 20              C3	        ADD     CX,$-$M_CLASS_1_STRUC
 07FC  C3                    C3	        RET
 07FD                        C3	$M_MSGSERV_1 Endp
 07FD                        C3	$M_CLASS_2_STRUC LABEL BYTE
 07FD  02                    C3	        $M_CLASS_ID <002H,EXPECTED_VERSION,Class_2_MessageCount>
 07FE  0400                  C3	
 0800  01                    C3	
 0801                        C3	$M_2_FF_STRUC LABEL BYTE
 0801  FFFF                  C3	        $M_ID <0FFFFH,$M_2_FF_MSG-$M_2_FF_STRUC>
 0803  0400                  C3	
 0805                        C3	$M_2_FF_MSG LABEL BYTE
 0805  0E                    C3	        DB      $M_2_FF_END-$M_2_FF_MSG-1
 0806  50 61 72 73 65 20     C3	        DB      "Parse Error %1"
 0814                        C3	$M_2_FF_END LABEL BYTE
 0814                        C3	$M_MSGSERV_2 PROC NEAR
 0814  0E                    C3	        PUSH    CS
 0815  07                    C3	        POP     ES
 0816  8D 3E 07FD R          C3	        LEA     DI,$M_CLASS_2_STRUC
 081A  83 C1 1D              C3	        ADD     CX,$-$M_CLASS_2_STRUC
 081D  C3                    C3	        RET
 081E                        C3	$M_MSGSERV_2 Endp
 081E                        C3	$M_CLASS_A_STRUC LABEL BYTE
 081E  FF                    C3	        $M_CLASS_ID <0FFH,EXPECTED_VERSION,Class_A_MessageCount>
 081F  0400                  C3	
 0821  02                    C3	
 0822                        C3	$M_A_00001H_STRUC LABEL BYTE
 0822  0100                  C3	        $M_ID   <00001H,$M_A_00001H_MSG-$M_A_00001H_STRUC>
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-47
DOS - Message Retriever - DISPMSG.ASM Module                

 0824  0800                  C3	
 0826                        C3	$M_A_00002H_STRUC LABEL BYTE
 0826  0200                  C3	        $M_ID   <00002H,$M_A_00002H_MSG-$M_A_00002H_STRUC>
 0828  1C00                  C3	
 082A                        C3	$M_A_00001H_MSG LABEL BYTE
 082A  17                    C3	        DB      $M_A_00001H_END-$M_A_00001H_MSG-1
 082B  49 6E 63 6F 72 72     C3	        DB      "Incorrect DOS version",CR,LF
 0842                        C3	$M_A_00001H_END LABEL BYTE
 0842                        C3	$M_A_00002H_MSG LABEL BYTE
 0842  15                    C3	        DB      $M_A_00002H_END-$M_A_00002H_MSG-1
 0843  49 6E 73 75 66 66     C3	        DB      "Insufficient memory",CR,LF
 0858                        C3	$M_A_00002H_END LABEL BYTE
 0858                        C3	$M_CLS_1 PROC NEAR
 0858  0E                    C3	        PUSH    CS
 0859  07                    C3	        POP     ES
 085A  8D 3E 081E R          C3	        LEA     DI,$M_CLASS_A_STRUC
 085E  83 C1 40              C3	        ADD     CX,$-$M_CLASS_A_STRUC
 0861  C3                    C3	        RET
 0862                        C3	$M_CLS_1 ENDP
 0862                        C3	$M_CLASS_B_STRUC LABEL BYTE
 0862  FF                    C3	        $M_CLASS_ID <0FFH,EXPECTED_VERSION,Class_B_MessageCount>
 0863  0400                  C3	
 0865  08                    C3	
 0866                        C3	$M_B_00009H_STRUC LABEL BYTE
 0866  0900                  C3	        $M_ID   <00009H,$M_B_00009H_MSG-$M_B_00009H_STRUC>
 0868  2000                  C3	
 086A                        C3	$M_B_0000AH_STRUC LABEL BYTE
 086A  0A00                  C3	        $M_ID   <0000AH,$M_B_0000AH_MSG-$M_B_0000AH_STRUC>
 086C  3B00                  C3	
 086E                        C3	$M_B_0000BH_STRUC LABEL BYTE
 086E  0B00                  C3	        $M_ID   <0000BH,$M_B_0000BH_MSG-$M_B_0000BH_STRUC>
 0870  6B00                  C3	
 0872                        C3	$M_B_0000CH_STRUC LABEL BYTE
 0872  0C00                  C3	        $M_ID   <0000CH,$M_B_0000CH_MSG-$M_B_0000CH_STRUC>
 0874  8E00                  C3	
 0876                        C3	$M_B_0000DH_STRUC LABEL BYTE
 0876  0D00                  C3	        $M_ID   <0000DH,$M_B_0000DH_MSG-$M_B_0000DH_STRUC>
 0878  B900                  C3	
 087A                        C3	$M_B_0000EH_STRUC LABEL BYTE
 087A  0E00                  C3	        $M_ID   <0000EH,$M_B_0000EH_MSG-$M_B_0000EH_STRUC>
 087C  D600                  C3	
 087E                        C3	$M_B_0000FH_STRUC LABEL BYTE
 087E  0F00                  C3	        $M_ID   <0000FH,$M_B_0000FH_MSG-$M_B_0000FH_STRUC>
 0880  F600                  C3	
 0882                        C3	$M_B_00010H_STRUC LABEL BYTE
 0882  1000                  C3	        $M_ID   <00010H,$M_B_00010H_MSG-$M_B_00010H_STRUC>
 0884  1801                  C3	
 0886                        C3	$M_B_00009H_MSG LABEL BYTE
 0886  1E                    C3	        DB      $M_B_00009H_END-$M_B_00009H_MSG-1
 0887  43 61 6E 6E 6F 74     C3	        DB      "Cannot find GRAPHICS profile",CR,LF
 08A5                        C3	$M_B_00009H_END LABEL BYTE
 08A5                        C3	$M_B_0000AH_MSG LABEL BYTE
 08A5  33                    C3	        DB      $M_B_0000AH_END-$M_B_0000AH_MSG-1
 08A6  52 65 71 75 69 72     C3	        DB      "Required profile statement missing before line %1",CR,LF
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-48
DOS - Message Retriever - DISPMSG.ASM Module                

 08D9                        C3	$M_B_0000AH_END LABEL BYTE
 08D9                        C3	$M_B_0000BH_MSG LABEL BYTE
 08D9  26                    C3	        DB      $M_B_0000BH_END-$M_B_0000BH_MSG-1
 08DA  49 6E 76 61 6C 69     C3	        DB      "Invalid profile statement on line %1",CR,LF
 0900                        C3	$M_B_0000BH_END LABEL BYTE
 0900                        C3	$M_B_0000CH_MSG LABEL BYTE
 0900  2E                    C3	        DB      $M_B_0000CH_END-$M_B_0000CH_MSG-1
 0901  50 72 6F 66 69 6C     C3	        DB      "Profile statement out of sequence on line %1",CR,LF
 092F                        C3	$M_B_0000CH_END LABEL BYTE
 092F                        C3	$M_B_0000DH_MSG LABEL BYTE
 092F  20                    C3	        DB      $M_B_0000DH_END-$M_B_0000DH_MSG-1
 0930  45 72 72 6F 72 20     C3	        DB      "Error reading GRAPHICS profile",CR,LF
 0950                        C3	$M_B_0000DH_END LABEL BYTE
 0950                        C3	$M_B_0000EH_MSG LABEL BYTE
 0950  23                    C3	        DB      $M_B_0000EH_END-$M_B_0000EH_MSG-1
 0951  53 79 6E 74 61 78     C3	        DB      "Syntax errors in GRAPHICS profile",CR,LF
 0974                        C3	$M_B_0000EH_END LABEL BYTE
 0974                        C3	$M_B_0000FH_MSG LABEL BYTE
 0974  25                    C3	        DB      $M_B_0000FH_END-$M_B_0000FH_MSG-1
 0975  50 72 69 6E 74 62     C3	        DB      "Printbox ID not in GRAPHICS profile",CR,LF
 099A                        C3	$M_B_0000FH_END LABEL BYTE
 099A                        C3	$M_B_00010H_MSG LABEL BYTE
 099A  26                    C3	        DB      $M_B_00010H_END-$M_B_00010H_MSG-1
 099B  50 72 69 6E 74 65     C3	        DB      "Printer type not in GRAPHICS profile",CR,LF
 09C1                        C3	$M_B_00010H_END LABEL BYTE
 09C1                        C3	$M_CLS_2 PROC NEAR
 09C1  0E                    C3	        PUSH    CS
 09C2  07                    C3	        POP     ES
 09C3  8D 3E 0862 R          C3	        LEA     DI,$M_CLASS_B_STRUC
 09C7  81 C1 0165            C3	        ADD     CX,$-$M_CLASS_B_STRUC
 09CB  C3                    C3	        RET
 09CC                        C3	$M_CLS_2 ENDP
 09CC                        C3	$M_CLASS_C_STRUC LABEL BYTE
 09CC  FF                    C3	        $M_CLASS_ID <0FFH,EXPECTED_VERSION,Class_C_MessageCount>
 09CD  0400                  C3	
 09CF  08                    C3	
 09D0                        C3	$M_C_00003H_STRUC LABEL BYTE
 09D0  0300                  C3	        $M_ID   <00003H,$M_C_00003H_MSG-$M_C_00003H_STRUC>
 09D2  2000                  C3	
 09D4                        C3	$M_C_00004H_STRUC LABEL BYTE
 09D4  0400                  C3	        $M_ID   <00004H,$M_C_00004H_MSG-$M_C_00004H_STRUC>
 09D6  3200                  C3	
 09D8                        C3	$M_C_00005H_STRUC LABEL BYTE
 09D8  0500                  C3	        $M_ID   <00005H,$M_C_00005H_MSG-$M_C_00005H_STRUC>
 09DA  5500                  C3	
 09DC                        C3	$M_C_00006H_STRUC LABEL BYTE
 09DC  0600                  C3	        $M_ID   <00006H,$M_C_00006H_MSG-$M_C_00006H_STRUC>
 09DE  6A00                  C3	
 09E0                        C3	$M_C_00007H_STRUC LABEL BYTE
 09E0  0700                  C3	        $M_ID   <00007H,$M_C_00007H_MSG-$M_C_00007H_STRUC>
 09E2  8600                  C3	
 09E4                        C3	$M_C_00008H_STRUC LABEL BYTE
 09E4  0800                  C3	        $M_ID   <00008H,$M_C_00008H_MSG-$M_C_00008H_STRUC>
 09E6  A500                  C3	
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-49
DOS - Message Retriever - DISPMSG.ASM Module                

 09E8                        C3	$M_C_00011H_STRUC LABEL BYTE
 09E8  1100                  C3	        $M_ID   <00011H,$M_C_00011H_MSG-$M_C_00011H_STRUC>
 09EA  BF00                  C3	
 09EC                        C3	$M_C_00012H_STRUC LABEL BYTE
 09EC  1200                  C3	        $M_ID   <00012H,$M_C_00012H_MSG-$M_C_00012H_STRUC>
 09EE  E700                  C3	
 09F0                        C3	$M_C_00003H_MSG LABEL BYTE
 09F0  15                    C3	        DB      $M_C_00003H_END-$M_C_00003H_MSG-1
 09F1  54 6F 6F 20 6D 61     C3	        DB      "Too many parameters",CR,LF
 0A06                        C3	$M_C_00003H_END LABEL BYTE
 0A06                        C3	$M_C_00004H_MSG LABEL BYTE
 0A06  26                    C3	        DB      $M_C_00004H_END-$M_C_00004H_MSG-1
 0A07  50 61 72 61 6D 65     C3	        DB      "Parameter value not in allowed range",CR,LF
 0A2D                        C3	$M_C_00004H_END LABEL BYTE
 0A2D                        C3	$M_C_00005H_MSG LABEL BYTE
 0A2D  18                    C3	        DB      $M_C_00005H_END-$M_C_00005H_MSG-1
 0A2E  49 6E 76 61 6C 69     C3	        DB      "Invalid parameter:  %1",CR,LF
 0A46                        C3	$M_C_00005H_END LABEL BYTE
 0A46                        C3	$M_C_00006H_MSG LABEL BYTE
 0A46  1F                    C3	        DB      $M_C_00006H_END-$M_C_00006H_MSG-1
 0A47  49 6E 76 61 6C 69     C3	        DB      "Invalid parameter combination",CR,LF
 0A66                        C3	$M_C_00006H_END LABEL BYTE
 0A66                        C3	$M_C_00007H_MSG LABEL BYTE
 0A66  22                    C3	        DB      $M_C_00007H_END-$M_C_00007H_MSG-1
 0A67  44 75 70 6C 69 63     C3	        DB      "Duplicate parameters not allowed",CR,LF
 0A89                        C3	$M_C_00007H_END LABEL BYTE
 0A89                        C3	$M_C_00008H_MSG LABEL BYTE
 0A89  1D                    C3	        DB      $M_C_00008H_END-$M_C_00008H_MSG-1
 0A8A  50 61 72 61 6D 65     C3	        DB      "Parameter value not allowed",CR,LF
 0AA7                        C3	$M_C_00008H_END LABEL BYTE
 0AA7                        C3	$M_C_00011H_MSG LABEL BYTE
 0AA7  2B                    C3	        DB      $M_C_00011H_END-$M_C_00011H_MSG-1
 0AA8  2F 42 20 69 6E 76     C3	        DB      "/B invalid with a black and white printer",CR,LF
 0AD3                        C3	$M_C_00011H_END LABEL BYTE
 0AD3                        C3	$M_C_00012H_MSG LABEL BYTE
 0AD3  28                    C3	        DB      $M_C_00012H_END-$M_C_00012H_MSG-1
 0AD4  55 6E 61 62 6C 65     C3	        DB      "Unable to reload with profile supplied",CR,LF
 0AFC                        C3	$M_C_00012H_END LABEL BYTE
 0AFC                        C3	$M_CLS_3 PROC NEAR
 0AFC  0E                    C3	        PUSH    CS
 0AFD  07                    C3	        POP     ES
 0AFE  8D 3E 09CC R          C3	        LEA     DI,$M_CLASS_C_STRUC
 0B02  81 C1 0136            C3	        ADD     CX,$-$M_CLASS_C_STRUC
 0B06  C3                    C3	        RET
 0B07                        C3	$M_CLS_3 ENDP
				.LIST				       ;;					;AN000;
								       ;;					;AN000;
				PUBLIC GRAPHICS_INSTALL 	       ;;					;AN000;
				PUBLIC TEMP_SHARED_DATA_PTR	       ;;					;AN000;
				PUBLIC PRINTER_TYPE_PARM	       ;;					;AN000;
				PUBLIC PRINTER_TYPE_LENGTH	       ;;					;AN000;
				PUBLIC PROFILE_PATH		       ;;					;AN000;
				PUBLIC PRINTBOX_ID_PTR		       ;;					;AN000;
				PUBLIC PRINTBOX_ID_LENGTH	       ;;					;AN000;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-50
DOS - Message Retriever - DISPMSG.ASM Module                

				PUBLIC DEFAULT_BOX		       ;;					;AN000;
				PUBLIC LCD_BOX			       ;;					;AN000;
				PUBLIC NB_FREE_BYTES		       ;;					;AN000;
				PUBLIC SYSDISPMSG		       ;;					;AN000;
				PUBLIC DISP_ERROR		       ;;					;AN000;
				PUBLIC INSTALLED		       ;;					;AN000;
				PUBLIC ERROR_DEVICE		       ;;					;AN000;
				PUBLIC STDERR			       ;;					;AN000;
				PUBLIC STDOUT			       ;;					;AN000;
				PUBLIC RESIDENT_SHARED_DATA_SIZE       ;;					;AN000;
								       ;;					;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;					;AN000;
				;;										;AN000;
				;; Install Variables								;AN000;
				;;										;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;					;AN000;
								       ;;					;AN000;
 = 0000				NO		      EQU   0	       ;;					;AN000;
 = 0001				YES		      EQU   1	       ;;					;AN000;
 0B07  00			INSTALLED	      DB    NO	       ;; YES if GRAPHICS already installed	;AN000;
								       ;;					;AN000;
								       ;;					;AN000;
 = 0006				BYTES_AVAIL_PSP_OFF   EQU   6	       ;; Word number 6 of the PSP is the	;AN000;
								       ;;  number of bytes available in the	;AN000;
								       ;;   current segment			;AN000;
								       ;;					;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;					;AN000;
				;;										;AN000;
				;; GRLOAD (PROFILE LOADING) INPUT PARMS:					;AN000;
				;;										;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;					;AN000;
 0B08  47 52 41 50 48 49	PRINTER_TYPE_PARM    DB    "GRAPHICS",9 DUP(0) ; Printer type                   ;AN000;
       43 53			
       0009[			
	   00			
			 ]	
				
								       ;;  (default=GRAPHICS)			;AN000;
 0B19  11			PRINTER_TYPE_LENGTH  DB    17	       ;; Printer type maximum length of ASCIIZ ;AN000;
 0B1A  0080[			PROFILE_PATH	     DB    128 DUP(0)  ;;  Profile name with full path		;AN000;
	   00			
			 ]	
				
								       ;;   (Max size for ASCIIZ is 128)	;AN000;
 0B9A  0B9C R			PRINTBOX_ID_PTR      DW    DEFAULT_BOX ;;  Offset of ASCIIZ string containing	;AN000;
 0B9C  53 54 44			DEFAULT_BOX	     DB    "STD",14 DUP(0);  the printbox id. (DEFAULT = STD)   ;AN000;
       000E[			
	   00			
			 ]	
				
 0BAD  4C 43 44			LCD_BOX 	     DB    "LCD",14 DUP(0); ASCIIZ string for the LCD printboxID;AN000;
       000E[			
	   00			
			 ]	
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-51
DOS - Message Retriever - DISPMSG.ASM Module                

				
 0BBE  11			PRINTBOX_ID_LENGTH   DB    17	       ;;  Max. length for the printbox id.	;AN000;
								       ;;   ASCIIZ string			;AN000;
 0BBF  0000			NB_FREE_BYTES	     DW    ?	       ;;  Number of bytes available in our	;AN000;
								       ;;   resident segment			;AN000;
 0BC1  0000			RESIDENT_SHARED_DATA_SIZE  DW ?        ;;  Size in bytes of the RESIDENT Shared ;AN000;
								       ;;   data area (if GRAPHICS already	;AN000;
								       ;;    installed).			;AN000;
 0BC3  0000			END_OF_RESIDENT_CODE DW    ?	       ;; Offset of the end of the code that	;AN000;
								       ;;  has to be made resident.		;AN000;
 0BC5  0000			TEMP_SHARED_DATA_PTR DW    ?	       ;; Offset of the temporary Shared area	;AN000;
								       ;;					;AN000;
 0BC7  0002			ERROR_DEVICE   DW   STDERR	       ;; Device DISP_ERROR will output 	;AN000;
								       ;;  messages to (STDERR or STDOUT)	;AN000;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-52
DOS - Message Retriever - DISPMSG.ASM Module                

				PAGE										;AN000;
				;===============================================================================;AN000;
				;										;AN000;
				; GRAPHICS_INSTALL : INSTALL GRAPHICS.COM					;AN000;
				;										;AN000;
				;-------------------------------------------------------------------------------;AN000;
				;										;AN000;
				;  INPUT:   Command line parameters						;AN000;
				;	    GRAPHICS profile - A file describing printer characteristics and	;AN000;
				;			       attributes.					;AN000;
				;										;AN000;
				;  OUTPUT:  If first time invoked:						;AN000;
				;	      INT 5 VECTOR and INT 2FH VECTOR are replaced; only the required	;AN000;
				;	      code for printing the screen is made resident.			;AN000;
				;	    else,								;AN000;
				;	      The resident code is updated to reflect changes in printing	;AN000;
				;	      options.								;AN000;
				;										;AN000;
				;-------------------------------------------------------------------------------;AN000;
				;;										;AN000;
				;; DESCRIPTION: 								;AN000;
				;;										;AN000;
				;;   This module intalls GRAPHICS code and data.				;AN000;
				;;										;AN000;
				;;   An INT 2FH driver is also installed.					;AN000;
				;;										;AN000;
				;;   If this driver is already present then, we assume GRAPHICS was installed	;AN000;
				;;   and do not install it again but, simply update the resident code.		;AN000;
				;;										;AN000;
				;;   The resident code contains ONLY the code and data needed for Printing	;AN000;
				;;   the screen. The code needed is determined according to the command line	;AN000;
				;;   parameters and the information extracted from the printer profile. 	;AN000;
				;;										;AN000;
				;;   The printer profile is parsed according to the current hardware setting	;AN000;
				;;   and also to the command line options. The information extracted from	;AN000;
				;;   the profile is stored in a Data area shared between the installation	;AN000;
				;;   process and the Print Screen process.					;AN000;
				;;										;AN000;
				;;   A temporary Shared Data Area is FIRST built at the end of the .COM file	;AN000;
				;;   Before building it, we verify that there is				;AN000;
				;;   enough memory left in the current segment.  If not, the installation	;AN000;
				;;   process is aborted.							;AN000;
				;;										;AN000;
				;;   This temporary Data area when completed will be copied over the		;AN000;
				;;   installation code. Therefore, the file comprising GRAPHICS must be 	;AN000;
				;;   linked in a specific order with the installation modules being last.	;AN000;
				;;										;AN000;
				;;   These modules will be overwritten by the Shared Data area and the EGA	;AN000;
				;;   dynamic save area before we exit and stay resident.			;AN000;
				;;										;AN000;
				;;   The end of the resident code is the end of the Shared Data area, anything	;AN000;
				;;   else beyond that is not made resident.					;AN000;
				;;										;AN000;
				;;   The pointer to the resident Shared Data area is declared within the	;AN000;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-53
DOS - Message Retriever - DISPMSG.ASM Module                

				;;   Interrupt 2Fh driver. This pointer is initialized by the installation	;AN000;
				;;   process and points to the shared data area at Print Screen time.		;AN000;
				;;										;AN000;
				;;   Depending on the type of printer attached (i.e., Black and white or Color) ;AN000;
				;;   only one set of modules is made resident during the installation.		;AN000;
				;;										;AN000;
				;;   The set of print modules required is copied over the previous one at	;AN000;
				;;   location "PRINT_MODULE_START". This location is declared within            ;AN000;
				;;   GRCOLPRT which must be linked before GRBWPRT				;AN000;
				;;										;AN000;
				;;   When copying one of the 2 sets of print modules we reserve enough space	;AN000;
				;;   for the larger of them. Therefore, if GRAPHICS is already installed but	;AN000;
				;;   is reinvoked with a different printer type which needs a bigger set of	;AN000;
				;;   modules: this new set of modules is simply recopied over the existing	;AN000;
				;;   one in the resident code.							;AN000;
				;;										;AN000;
				;;   The Shared Data area is copied rigth after the set of modules that we keep ;AN000;
				;;   that is, over the unused set of modules.					;AN000;
				;;										;AN000;
				;;										;AN000;
				;-------------------------------------------------------------------------------;AN000;
				;;										;AN000;
				;; Register Conventions:							;AN000;
				;;   BP - points to start of Temp Shared Data (Transiant code)			;AN000;
				;;										;AN000;
				;; Called By:									;AN000;
				;;   Entry point for GRAPHICS command processing.				;AN000;
				;;										;AN000;
				;; External Calls:								;AN000;
				;;   INT 2FH, LOAD_MESSAGES, LOAD_PROFILE, PARSE_PARMS				;AN000;
				;;   CHAIN_INTERRUPTS, COPY_SHARED_DATA, DISPLAY_MESSAGE			;AN000;
				;;   COPY_PRINT_MODULES 							;AN000;
				;;										;AN000;
				;-------------------------------------------------------------------------------;AN000;
				;;										;AN000;
				;; LOGIC:									;AN000;
				;;   Load the message retriever 						;AN000;
				;;   IF carry flag is set (incorrect DOS version) THEN				;AN000;
				;;	Issue message (COMMON1) 						;AN000;
				;;	Exit									;AN000;
				;;   ENDIF									;AN000;
				;;										;AN000;
				;;   Get number of bytes available in the segment from PSP (word 6)		;AN000;
				;;   /* This is needed since we construct a temporary Shared data area at the	;AN000;
				;;   of the .COM file */							;AN000;
				;;										;AN000;
				;;   /* Build Shared Data in temporary area */					;AN000;
				;;   END_OF_RESIDENT_CODE := (end of .COM file) 				;AN000;
				;;   NB_FREE_BYTES    := Number of bytes availables				;AN000;
				;;										;AN000;
				;;   CALL PARSE_PARMS								;AN000;
				;;   IF error THEN	/* PARSE_PARMS will issue messages */			;AN000;
				;;	Exit									;AN000;
				;;   ENDIF									;AN000;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-54
DOS - Message Retriever - DISPMSG.ASM Module                

				;;										;AN000;
				;;   CALL LOAD_PROFILE								;AN000;
				;;   IF profile errors THEN							;AN000;
				;;	Exit		/* LOAD_PROFILE will issue messages */			;AN000;
				;;   ENDIF									;AN000;
				;;										;AN000;
				;;   Issue INT 2FH Install Check call (AX=1500H)				;AN000;
				;;   /* INT 2FH returns ES:[DI] pointing to the shared data area */		;AN000;
				;;   IF already installed THEN							;AN000;
				;;   THEN									;AN000;
				;;	Move NO to PRINT_SCREEN_ALLOWED in resident Shared Data 		;AN000;
				;;	SHARED_DATA_AREA_PTR := DI						;AN000;
				;;   ELSE									;AN000;
				;;	MOV PRINT_SCREEN_ALLOWED,NO						;AN000;
				;;	CALL CHAIN_INTERRUPTS	/* Install INT 5 and INT 2FH vectors */ 	;AN000;
				;;	ES := Our segment							;AN000;
				;;   ENDIF									;AN000;
				;;   /* Keep only Print Black and White or Print Color: */			;AN000;
				;;   CALL COPY_PRINT_MODULES							;AN000;
				;;	/* COPY_SHARED_DATA will terminate & stay resident */			;AN000;
				;;	Set up registers for copy & terminate call				;AN000;
				;;	/* reserve enough memory to handle any printer in the profile*/ 	;AN000;
				;;	jump to COPY_SHARED_DATA module 					;AN000;
				;;   ELSE									;AN000;
				;;	/* Shared Data has been built in place */				;AN000;
				;;	move YES to PRINT_SCREEN_ALLOWED					;AN000;
				;;	Return to DOS								;AN000;
				;;   ENDIF									;AN000;
				;;										;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;					;AN000;
 0BC9				GRAPHICS_INSTALL     PROC NEAR		;					;AN000;
														;AN000;
				;-------------------------------------------------------------------------------;AN000;
				; Load the error messages							;AN000;
				;-------------------------------------------------------------------------------;AN000;
 0BC9  E8 0109 R		   CALL    SYSLOADMSG		    ; Load messages				;AN000;
				  .IF C 			    ; If error when loading messages		;AN000;
 0BCC  73 0C                 5						jnC $l1 
				  .THEN 			    ; then,					;AN000;
 0BCE  B9 0000			     MOV     CX,0		    ;	CX := No substitution in message	;AN000;
 0BD1  B8 0001			     MOV     AX,1		    ;	AX := msg nb. for "Invalid DOS version" ;AN000;
 0BD4  E8 0E5B R		     CALL DISP_ERROR		    ;	Display error message			;AN000;
 0BD7  E9 0CD6 R		     JMP     ERROR_EXIT 	    ;	 and quit				;AN000;
				  .ENDIF									;AN000;
 0BDA                        2	$l1: 
														;AN000;
				;-------------------------------------------------------------------------------;AN000;
				; Get offset of where to build the TEMPORARY Shared Data area (always built)	;AN000;
				;-------------------------------------------------------------------------------;AN000;
 0BDA  BD 0000 E		   MOV	   BP,OFFSET LIMIT	     ; Build it at the end of this .COM file	;AN000;
								     ;	(LIMIT = the offset of the last byte	;AN000;
								     ;	  of the last .OBJ file linked with	;AN000;
								     ;	   GRAPHICS)				;AN000;
 0BDD  89 2E 0BC5 R		   MOV	   TEMP_SHARED_DATA_PTR,BP   ;						;AN000;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-55
DOS - Message Retriever - DISPMSG.ASM Module                

														;AN000;
				;-------------------------------------------------------------------------------;AN000;
				; Determine if GRAPHICS is already installed; get the resident segment value	;AN000;
				;-------------------------------------------------------------------------------;AN000;
 0BE1  B4 00 E			    MOV     AH,PRT_SCR_2FH_NUMBER    ; Call INT 2FH (the Multiplex interrupt)	;AN000;
 0BE3  32 C0			    XOR     AL,AL		     ;	for Print Screen handler		;AN000;
 0BE5  CD 2F			    INT     2FH 		     ;						;AN000;
														;AN000;
				   .IF <AH EQ 0FFH>		     ; IF already installed			;AN000;
 0BE7  80 FC FF              3						cmp AH,0FFH 
 0BEA  75 16                 6						jne $l5 
				   .THEN			     ; then,					;AN000;
				   ;----------------------------------------------------------------------------;AN000;
				   ; GRAPHICS is already installed: Get pointer to the EXISTING Shared Data area;AN000;
				   ;----------------------------------------------------------------------------;AN000;
 0BEC  C6 06 0B07 R 01		      MOV     INSTALLED,YES	    ;	Say it's installed                      ;AN000;
 0BF1  8C C0			      MOV     AX,ES		    ;	Get the segment and offset of the	;AN000;
 0BF3  89 3E 0000 E		      MOV     SHARED_DATA_AREA_PTR,DI;	 resident Shared Data area.		;AN000;
 0BF7  A3 0000 E		      MOV     RESIDENT_CODE_SEG,AX  ;	  (returned in ES:DI)			;AN000;
								    ;	Disable print screen because we will	;AN000;
 0BFA  26: C6 06 0000 E 00	      MOV     ES:PRINT_SCREEN_ALLOWED,NO ; be updating the resident code.	;AN000;
				   .ELSE			    ; ELSE, not installed:			;AN000;
 0C00  EB 05                 3						jmp short $l4 
 0C02                        2	$l5: 
				   ;------------------------------------------------------------------------	;AN000;
				   ; GRAPHICS is NOT installed: RESIDENT shared data area is in OUR segment	;AN000;
				   ;------------------------------------------------------------------------	;AN000;
 0C02  0E			      PUSH    CS		    ; The Shared Data area will be in our	;AN000;
 0C03  8F 06 0000 E		      POP     RESIDENT_CODE_SEG     ;  segment. 				;AN000;
				   .ENDIF									;AN000;
 0C07                        2	$l4: 
														;AN000;
				;-------------------------------------------------------------------------------;AN000;
				; Determine in AX how many bytes are available for building the TEMPORARY SHARED;AN000;
				; DATA AREA:									;AN000;
				;-------------------------------------------------------------------------------;AN000;
 0C07  26: A1 0006		    MOV     AX,ES:BYTES_AVAIL_PSP_OFF;AX := Number of bytes availables in	;AN000;
								    ;  the current segment (as indicated in PSP);AN000;
				   .IF	<AX B <OFFSET LIMIT>>	    ; If there is no bytes available past	;AN000;
 0C0B  3D 0000 E             3						cmp AX,OFFSET LIMIT 
 0C0E  73 04                 5						jnB $l9 
				   .THEN			    ;	the end of our .COM file		;AN000;
 0C10  33 C0			      XOR     AX,AX		    ; then, AX := 0 bytes available		;AN000;
				   .ELSE			    ;						;AN000;
 0C12  EB 03                 3						jmp short $l8 
 0C14                        2	$l9: 
 0C14  2D 0000 E		      SUB     AX,OFFSET LIMIT	    ; else,  AX := Number of FREE bytes 	;AN000;
				   .ENDIF			    ;	     in this segment			;AN000;
 0C17                        2	$l8: 
														;AN000;
				;---AX = Number of bytes in our segment available for building the Temp Shared	;AN000;
				;---data area.									;AN000;
				;---IF ALREADY INSTALLED: Get the size of the existing Shared data area.	;AN000;
				;---Since the temporary shared data area will be copied over the resident	;AN000;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-56
DOS - Message Retriever - DISPMSG.ASM Module                

				;---shared data area, we do not want to build it any bigger than the one	;AN000;
				;---it will overwrite. Therefore we do not give to LOAD_PROFILE more space	;AN000;
				;---than the size of the existing Shared data area.				;AN000;
				   .IF <INSTALLED EQ YES>	    ; If already installed then,		;AN000;
 0C17  80 3E 0B07 R 01       3						cmp INSTALLED,YES 
 0C1C  75 17                 6						jne $l12 
				   .THEN									;AN000;
 0C1E  2E: FF 36 0000 E		      PUSH CS:RESIDENT_CODE_SEG     ; ES:[DI] := Resident Shared data area	;AN000;
 0C23  07			      POP  ES			    ;						;AN000;
 0C24  8B 3E 0000 E		      MOV  DI,SHARED_DATA_AREA_PTR  ;						;AN000;
 0C28  26: 8B 0D		      MOV  CX,ES:[DI].SD_TOTAL_SIZE ; CX := Size of the existing Shared area	;AN000;
 0C2B  89 0E 0BC1 R		      MOV  RESIDENT_SHARED_DATA_SIZE,CX ; Save size for LOAD_PROFILE		;AN000;
				     .IF <AX A CX>		    ; If AX > size of existing SDA		;AN000;
 0C2F  3B C1                 3						cmp AX,CX 
 0C31  76 02                 5						jnA $l12 
 0C33  8B C1				MOV AX,CX		    ; then, AX := Size of existing Shared area	;AN000;
				     .ENDIF			    ;						;AN000;
				   .ENDIF									;AN000;
 0C35                        2	$l12: 
								    ;  NB_FREE_BYTES := Number of bytes 	;AN000;
 0C35  A3 0BBF R		    MOV     NB_FREE_BYTES,AX	    ;	available for				;AN000;
								    ;	 building the TEMPORARY shared area	;AN000;
				;-------------------------------------------------------------------------------;AN000;
				; Parse the command line parameters						;AN000;
				;-------------------------------------------------------------------------------;AN000;
 0C38  2E: C6 46 02 00		   MOV	   BYTE PTR CS:[BP].SWITCHES,0 ; Init. the command line switches	;AN000;
 0C3D  0E			   PUSH    CS			   ; Set ES to segment containing the PSP	;AN000;
 0C3E  07			   POP	   ES									;AN000;
 0C3F  E8 0000 E		   CALL    PARSE_PARMS		   ; Set switches in the Temp. Shared Area	;AN000;
				  .IF C 			   ; If error when parsing the command		;AN000;
 0C42  73 03                 5						jnC $l18 
				    .THEN			   ; line then, EXIT				;AN000;
 0C44  E9 0CD6 R		     JMP     ERROR_EXIT 							;AN000;
				  .ENDIF									;AN000;
 0C47                        2	$l18: 
														;AN000;
				;-------------------------------------------------------------------------------;AN000;
				; Parse the printer profile - Build the temporary Shared data area		;AN000;
				;-------------------------------------------------------------------------------;AN000;
 0C47  E8 0000 E		    CALL  LOAD_PROFILE		    ;  Builds profile info in Temporary Shared	;AN000;
								    ;	Data					;AN000;
				   .IF C			    ; If error when loading the profile 	;AN000;
 0C4A  73 03                 5						jnC $l21 
				   .THEN			    ; then, EXIT				;AN000;
 0C4C  E9 0CD6 R		      JMP     ERROR_EXIT							;AN000;
				   .ENDIF									;AN000;
 0C4F                        2	$l21: 
														;AN000;
				;-------------------------------------------------------------------------------;AN000;
				; Check if /B was specified with a BLACK and WHITE printer:(invalid combination);AN000;
				;-------------------------------------------------------------------------------;AN000;
				   .IF <CS:[BP].PRINTER_TYPE EQ BLACK_WHITE> AND				;AN000;
 0C4F  2E: 80 7E 04 02       3						cmp CS:[BP].PRINTER_TYPE,BLACK_WHITE 
 0C54  75 13                 6						jne $l24 
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-57
DOS - Message Retriever - DISPMSG.ASM Module                

				   .IF <BIT CS:[BP].SWITCHES NZ BACKGROUND_SW>					;AN000;
 0C56  2E: F6 46 02 02       3						test CS:[BP].SWITCHES,BACKGROUND_SW 
 0C5B  74 0C                 6						jz $l24 
				   .THEN									;AN000;
 0C5D  B8 0011			      MOV     AX,INVALID_B_SWITCH     ; Error := /B invalid with B&W prt.	;AN000;
 0C60  B9 0000			      MOV     CX,0		      ; No substitution 			;AN000;
 0C63  E8 0E5B R		      CALL    DISP_ERROR	      ; Display error message			;AN000;
 0C66  EB 6E 90			      JMP     ERROR_EXIT	      ;  and quit				;AN000;
				   .ENDIF									;AN000;
 0C69                        2	$l24: 
														;AN000;
				;-------------------------------------------------------------------------------;AN000;
				;										;AN000;
				; RELOCATE THE TEMPORARY SHARED DATA AREA AND THE SET OF REQUIRED PRINT MODULES ;AN000;
				;										;AN000;
				; (Discard the set of print modules not needed with the printer attached and	;AN000;
				;  discard all the code not used at print screen time). 			;AN000;
				;										;AN000;
				; If GRAPHICS is already installed then, we copy the				;AN000;
				; Shared Data area and the print modules over the previous ones installed in	;AN000;
				; resident memory.								;AN000;
				;										;AN000;
				; If we are installed for the first time then, we copy those over the		;AN000;
				; installation modules before we exit and stay resident.			;AN000;
				;										;AN000;
				; A temporaty Shared Data area is always created even if a resident one 	;AN000;
				; already exist (it is then, copied over), a set of print modules is recopied	;AN000;
				; only if needed.								;AN000;
				;										;AN000;
				; NOTE: END_OF_RESIDENT_CODE points to the first location over which code	;AN000;
				;	may be relocated.  After data or code is relocated, END_OF_RESIDENT_CODE;AN000;
				;	is updated and points to the next available location for copying code	;AN000;
				;	that will stay resident.						;AN000;
				;-------------------------------------------------------------------------------;AN000;
				;-------------------------------------------------------------------------------;AN000;
				; Initialize the pointer to the next available location for resident code:	;AN000;
				;-------------------------------------------------------------------------------;AN000;
				   .IF <INSTALLED EQ NO>	    ; If not installed				;AN000;
 0C69  80 3E 0B07 R 00       3						cmp INSTALLED,NO 
 0C6E  75 06                 6						jne $l27 
				   .THEN			    ; then,					;AN000;
 0C70  C7 06 0BC3 R 0000 E	      MOV     END_OF_RESIDENT_CODE,OFFSET PRINT_MODULE_START			;AN000;
				   .ENDIF			    ;	we make everything up to the print	;AN000;
 0C76                        2	$l27: 
								    ;	 modules resident code. 		;AN000;
				;-------------------------------------------------------------------------------;AN000;
				; Keep only the set of print modules that is needed:				;AN000;
				;-------------------------------------------------------------------------------;AN000;
 0C76  E8 0DBF R		    CALL    COPY_PRINT_MODULES	    ; Updates END_OF_RESIDENT_CODE		;AN000;
				;-------------------------------------------------------------------------------;AN000;
				; Replace the interrupt vectors and install the EGA dynamic area (if needed)	;AN000;
				;-------------------------------------------------------------------------------;AN000;
				   .IF <INSTALLED EQ NO>	    ; If not already installed			;AN000;
 0C79  80 3E 0B07 R 00       3						cmp INSTALLED,NO 
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-58
DOS - Message Retriever - DISPMSG.ASM Module                

 0C7E  75 2B                 6						jne $l31 
				   .THEN			    ; then,					;AN000;
				;------Release evironment vector						;AN002;
 0C80  E8 0E43 R		      CALL RELEASE_ENVIRONMENT	    ;	release unneeded environment vector	;AN002;
				;------Replace the interrupt vectors						;AN000;
 0C83  C6 06 0000 E 00		      MOV   PRINT_SCREEN_ALLOWED,NO ;	Disable Print Screen			;AN000;
 0C88  E8 0D8C R		      CALL  CHAIN_INTERRUPTS	    ;	Replace the interrupt vectors		;AN000;
								    ;	 (END_OF_RESIDENT_CODE is updated)	;AN000;
 0C8B  E8 0000 E		      CALL  DET_HW_CONFIG	    ;	Find what display adapter we got	;AN000;
				     .IF <CS:[BP].HARDWARE_CONFIG EQ EGA>;If EGA is present			;AN000;
 0C8E  2E: 80 7E 03 04       3						cmp CS:[BP].HARDWARE_CONFIG,EGA 
 0C93  75 03                 6						jne $l33 
				     .THEN			    ;	then,					;AN000;
 0C95  E8 0CFE R			 CALL INST_EGA_SAVE_AREA    ;	  Install the EGA dynamic save area	;AN000;
				     .ENDIF			    ;	  (END_OF_RESIDENT_CODE is updated)	;AN000;
 0C98                        2	$l33: 
				;------Calculate the size of the resident code					;AN000;
 0C98  8B 16 0BC3 R		      MOV   DX,END_OF_RESIDENT_CODE ; DX := End of resident code		;AN000;
 0C9C  2E: 03 56 00		      ADD   DX,CS:[BP].SD_TOTAL_SIZE; Add size of Shared Data area		;AN000;
 0CA0  B1 04			      MOV   CL,4		    ;						;AN000;
 0CA2  D3 EA			      SHR   DX,CL		    ; convert to paragraphs			;AN000;
 0CA4  42			      INC   DX			    ;  and add 1				;AN000;
				;------Set AX to DOS exit function call - (COPY_SHARED_DATA will exit to DOS)	;AN000;
 0CA5  B4 31			      MOV   AH,31H		    ; Function call to terminate but stay	;AN000;
 0CA7  32 C0			      XOR   AL,AL		    ;	resident				;AN000;
				   .ELSE									;AN000;
 0CA9  EB 04                 3						jmp short $l30 
 0CAB                        2	$l31: 
 0CAB  B4 4C			      MOV   AH,4CH		    ; Function call to terminate		;AN000;
 0CAD  32 C0			      XOR   AL,AL		    ; (EXIT to calling process) 		;AN000;
				   .ENDIF									;AN000;
 0CAF                        2	$l30: 
														;AN000;
				;-------------------------------------------------------------------------------;AN000;
				; Copy the temporary shared data area in the resident code			;AN000;
				;-------------------------------------------------------------------------------;AN000;
 0CAF  2E: 8B 4E 00		    MOV     CX,CS:[BP].SD_TOTAL_SIZE; CX := MOVSB count for COPY_SHARED_DATA	;AN000;
 0CB3  8B F5			    MOV     SI,BP		    ; DS:SI := Temporary Shared data area	;AN000;
 0CB5  FF 36 0000 E		    PUSH    RESIDENT_CODE_SEG	    ; ES:DI := Resident Shared data area:	;AN000;
 0CB9  07			    POP     ES			    ;						;AN000;
				   .IF <INSTALLED EQ NO>	    ; If not installed				;AN000;
 0CBA  80 3E 0B07 R 00       3						cmp INSTALLED,NO 
 0CBF  75 0C                 6						jne $l38 
				   .THEN			    ; then,					;AN000;
 0CC1  8B 3E 0BC3 R		      MOV     DI,END_OF_RESIDENT_CODE;	 DI := End of resident code		;AN000;
 0CC5  8B EF			      MOV     BP,DI		    ;	BP := New resident Shared data area	;AN000;
 0CC7  89 3E 0000 E		      MOV     SHARED_DATA_AREA_PTR,DI;	 Update pointer to resident Shar. area	;AN000;
				   .ELSE			    ; else,					;AN000;
 0CCB  EB 06                 3						jmp short $l37 
 0CCD                        2	$l38: 
 0CCD  8B 3E 0000 E		      MOV     DI,SHARED_DATA_AREA_PTR ;   DI := Existing Shared data area	;AN000;
 0CD1  8B EF			      MOV     BP,DI		    ;	BP = DI:= Existing Shared data area	;AN000;
				   .ENDIF									;AN000;
 0CD3                        2	$l37: 
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-59
DOS - Message Retriever - DISPMSG.ASM Module                

 0CD3  E9 0000 E		      JMP   COPY_SHARED_DATA	    ; Jump to proc that copies area in new	;AN000;
								    ;  part of memory and exits to DOS		;AN000;
 0CD6				ERROR_EXIT:									;AN000;
				   .IF <INSTALLED EQ YES>	    ; If we are already installed, re-enable	;AN000;
 0CD6  80 3E 0B07 R 01       3						cmp INSTALLED,YES 
 0CDB  75 0A                 6						jne $l41 
 0CDD  8E 06 0000 E		      MOV   ES,RESIDENT_CODE_SEG    ;  print screens				;AN000;
 0CE1  26: C6 06 0000 E 01	      MOV   ES:PRINT_SCREEN_ALLOWED,YES 					;AN000;
				   .ENDIF			    ;						;AN000;
 0CE7                        2	$l41: 
								    ;						;AN000;
 0CE7  B4 4C			    MOV     AH,4CH		    ; Function call to terminate		;AN000;
 0CE9  B0 01			    MOV     AL,1		    ; (EXIT to calling process) 		;AN000;
 0CEB  CD 21			    INT     21H 								;AN000;
 0CED				GRAPHICS_INSTALL     ENDP							;AN000;
														;AN000;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-60
DOS - Message Retriever - DISPMSG.ASM Module                

				PAGE										;AN000;
				;===============================================================================;AN000;
				;										;AN000;
				; INST_EGA_SAVE_AREA : INSTALL A DYNAMIC SAVE AREA FOR THE EGA PALETTE REGISTERS;AN000;
				;										;AN000;
				;-------------------------------------------------------------------------------;AN000;
				;										;AN000;
				; INPUT:   DS			= Data segment for our code			;AN000;
				;	   END_OF_RESIDENT_CODE = Offset of the end of the resident code	;AN000;
				;										;AN000;
				; OUTPUT:  END_OF_RESIDENT_CODE is updated to point to the end of the code	;AN000;
				;				   that will stay resident.			;AN000;
				;	   SAVE_AREA_PTR in BIOS segment is updated.				;AN000;
				;										;AN000;
				;-------------------------------------------------------------------------------;AN000;
				;;										;AN000;
				;; Data Structures Referenced:							;AN000;
				;;   Shared Data Area								;AN000;
				;;										;AN000;
				;; Description: 								;AN000;
				;;   ************* The EGA Dynamic Save Area will be built over top		;AN000;
				;;   **  NOTE	** of the profile loading modules (file GRLOAD.ASM)		;AN000;
				;;   ************* to avoid having to relocate this area just before		;AN000;
				;;   terminating.  This is safe since the maximum memory used is		;AN000;
				;;   288 bytes and the profile loading modules are MUCH larger than		;AN000;
				;;   this.  So GRLOAD.ASM MUST be linked before GRINST.ASM and after		;AN000;
				;;   GRPRINT.ASM.								;AN000;
				;;										;AN000;
				;; BIOS will update the dynamic save area whenener it's aware the palette       ;AN000;
				;; registers have been updated. 						;AN000;
				;;										;AN000;
				;; BIOS 4A8H		BIOS SAVE	       EGA DYNAMIC			;AN000;
				;; POINTER:		POINTER TABLE	       SAVE AREA			;AN000;
				;; ÚÄÄÄÄÄÄÄÄ¿		ÚÄÄÄÄÄÄÄÄÄÄÄÄ¿	       (16 first bytes are the 16	;AN000;
				;; ³   *ÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄ>³	     ³		EGA palette registers)		;AN000;
				;; ÀÄÄÄÄÄÄÄÄÙ		ÃÄÄÄÄÄÄÄÄÄÄÄÄ´	       ÚÄÄÄÄÄÄÄÄÄÄÄ¿			;AN000;
				;;			³     *ÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄ>ÃÄÄÄÄÄÄÄÄÄÄÄ´			;AN000;
				;;			ÃÄÄÄÄÄÄÄÄÄÄÄÄ´	       ÃÄÄÄÄÄÄÄÄÄÄÄ´			;AN000;
				;;			³	     ³	       ÃÄÄÄÄÄÄÄÄÄÄÄ´			;AN000;
				;;			ÃÄÄÄÄÄÄÄÄÄÄÄÄ´		     .				;AN000;
				;;			³	     ³		     .				;AN000;
				;;			ÃÄÄÄÄÄÄÄÄÄÄÄÄ´		     .	    256 bytes		;AN000;
				;;			³	     ³		     .				;AN000;
				;;			ÃÄÄÄÄÄÄÄÄÄÄÄÄ´		     .				;AN000;
				;;			³	     ³	       ÃÄÄÄÄÄÄÄÄÄÄÄ´			;AN000;
				;;			ÃÄÄÄÄÄÄÄÄÄÄÄÄ´	       ÃÄÄÄÄÄÄÄÄÄÄÄ´			;AN000;
				;;			³	     ³	       ÃÄÄÄÄÄÄÄÄÄÄÄ´			;AN000;
				;;			ÃÄÄÄÄÄÄÄÄÄÄÄÄ´	       ÃÄÄÄÄÄÄÄÄÄÄÄ´			;AN000;
				;;			³	     ³	       ÃÄÄÄÄÄÄÄÄÄÄÄ´			;AN000;
				;;			ÀÄÄÄÄÄÄÄÄÄÄÄÄÙ	       ÀÄÄÄÄÄÄÄÄÄÄÄÙ			;AN000;
				;;										;AN000;
				;; Called By:									;AN000;
				;;   GRAPHICS_INSTALL								;AN000;
				;;										;AN000;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-61
DOS - Message Retriever - DISPMSG.ASM Module                

				;; External Calls:								;AN000;
				;;										;AN000;
				;; Logic:									;AN000;
				;;   IF EGA Dynamic Save Area NOT established THEN				;AN000;
				;;	  /* Required since default table is in ROM */				;AN000;
				;;	  IF Save Table is in ROM						;AN000;
				;;	     Replicate all the Save Area Table in resident RAM just before	;AN000;
				;;	      the Shared Data Area						;AN000;
				;;	  ENDIF 								;AN000;
				;;	  Allocate 256 bytes for EGA Dynamic Save Area just before the		;AN000;
				;;	  Shared Data Area							;AN000;
				;;	  Update END_OF_RESIDENT_CODE						;AN000;
				;;     ENDIF									;AN000;
				;;   RETURN									;AN000;
				;;										;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;					;AN000;
								       ;;					;AN000;
 = 04A8				BIOS_SAVE_PTR	     EQU    4A8H       ;; Offset of the BIOS Save Ptr area	;AN000;
 = 0020				SAVE_AREA_LEN	     EQU    8*4        ;; There are 8 pointers in the Save area ;AN000;
 = 0100				EGA_DYNAMIC_LEN      EQU    256        ;; Length of the EGA dynamic save area	;AN000;
				; Standard default colours for the Enhanced Graphics Adapter: (rgbRGB values)	;AN000;
				; The following table is necessary in order to initialize the EGA DYNAMIC	;AN000;
				; SAVE AREA when creating it.							;AN000;
 0CED  00			EGA_DEFAULT_COLORS   DB     00h        ;; Black 				;AN000;
 0CEE  01					     DB     01h        ;; Blue					;AN000;
 0CEF  02					     DB     02h        ;; Green 				;AN000;
 0CF0  03					     DB     03h        ;; Cyan					;AN000;
 0CF1  04					     DB     04h        ;; Red					;AN000;
 0CF2  05					     DB     05h        ;; Magenta				;AN000;
 0CF3  14					     DB     14h        ;; Brown 				;AN000;
 0CF4  07					     DB     07h        ;; White 				;AN000;
 0CF5  38					     DB     38h        ;; Dark Grey				;AN000;
 0CF6  39					     DB     39h        ;; Light Blue				;AN000;
 0CF7  3A					     DB     3Ah        ;; Light Green				;AN000;
 0CF8  3B					     DB     3Bh        ;; Light Cyan				;AN000;
 0CF9  3C					     DB     3Ch        ;; Light Red				;AN000;
 0CFA  3D					     DB     3Dh        ;; Light Magenta 			;AN000;
 0CFB  3E					     DB     3Eh        ;; Yellow				;AN000;
 0CFC  3F					     DB     3Fh        ;; Bright white				;AN000;
 0CFD  00					     DB     00h        ;; OVERSCAN register			;AN000;
														;AN000;
 0CFE				INST_EGA_SAVE_AREA PROC NEAR							;AN000;
 0CFE  50			PUSH	AX									;AN000;
 0CFF  51			PUSH	CX									;AN000;
 0D00  52			PUSH	DX									;AN000;
 0D01  56			PUSH	SI									;AN000;
 0D02  57			PUSH	DI									;AN000;
 0D03  06			PUSH	ES									;AN000;
				;-------------------------------------------------------------------------------;AN000;
				; Get the BIOS save pointer table						;AN000;
				;-------------------------------------------------------------------------------;AN000;
 0D04  33 C0			XOR	AX,AX			      ; ES := segment 0 			;AN000;
 0D06  8E C0			MOV	ES,AX									;AN000;
 0D08  26: C4 36 04A8		LES	SI,ES:DWORD PTR BIOS_SAVE_PTR ; ES:[SI] =Current BIOS save table	;AN000;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-62
DOS - Message Retriever - DISPMSG.ASM Module                

				.IF <<WORD PTR ES:[SI]+4> EQ 0> AND   ; IF the dynamic save are pointer is	;AN000;
 0D0D  26: 83 7C 04 00       3						cmp WORD PTR ES:[SI]+4,0 
 0D12  75 6F                 6						jne $l44 
				.IF <<WORD PTR ES:[SI]+6> EQ 0>       ;  null then, it's not defined            ;AN000;
 0D14  26: 83 7C 06 00       3						cmp WORD PTR ES:[SI]+6,0 
 0D19  75 68                 6						jne $l44 
				.THEN				      ;   and we have to define it:		;AN000;
				    ;---------------------------------------------------------------------------;AN000;
				    ; The Dynamic EGA save area is NOT DEFINED: 				;AN000;
				    ;---------------------------------------------------------------------------;AN000;
 0D1B  26: C6 44 04 FF		     MOV   BYTE PTR ES:[SI]+4,0FFH    ; Try to write a byte in the table	;AN000;
 0D20  50			     PUSH  AX			      ; (PUSH AX, POP AX used to create a	;AN000;
 0D21  58			     POP   AX			      ;  small delay)				;AN000;
				    .IF <<WORD PTR ES:[SI]+4> NE 0FFH>;If we can't read our byte back then,     ;AN000;
 0D22  26: 81 7C 04 00FF     3						cmp WORD PTR ES:[SI]+4,0FFH 
 0D28  74 48                 6						je $l48 
				    .THEN			      ;  the Save Ptrs table is in ROM		;AN000;
				       ;------------------------------------------------------------------------;AN000;
				       ; The Save pointer table is in ROM;					;AN000;
				       ; Copy the BIOS save pointer table from ROM to within our .COM file	;AN000;
				       ;------------------------------------------------------------------------;AN000;
 0D2A  06				PUSH  ES		      ; DS:SI := Offset of BIOS save ptrs table ;AN000;
 0D2B  1F				POP   DS		      ; 					;AN000;
 0D2C  0E				PUSH  CS		      ; ES:DI := The next available location	;AN000;
 0D2D  07				POP   ES		      ; 	  for installing resident code	;AN000;
 0D2E  2E: 8B 3E 0BC3 R			MOV   DI,CS:END_OF_RESIDENT_CODE ;	   within our .COM file 	;AN000;
 0D33  2E: 89 3E 0D8A R			MOV   CS:OUR_SAVE_TAB_OFF,DI  ; 					;AN000;
 0D38  B9 0020				MOV   CX,SAVE_AREA_LEN	      ;     CX := Length of the table to copy	;AN000;
 0D3B  F3/ A4				REP   MOVSB		      ;  Replicate the Save Table		;AN000;
 0D3D  0E				PUSH  CS								;AN000;
 0D3E  1F				POP   DS		      ; Reestablish our data segment		;AN000;
				       ;------------------------------------------------------------------------;AN000;
				       ; Adjust END_OF_RESIDENT_CODE to the next offset available for copying	;AN000;
				       ; resident code and data.						;AN000;
				       ;------------------------------------------------------------------------;AN000;
 0D3F  83 06 0BC3 R 20			ADD   END_OF_RESIDENT_CODE,SAVE_AREA_LEN				;AN000;
				       ;------------------------------------------------------------------------;AN000;
				       ; Set the pointer in OUR Save ptr table to our EGA dynamic save area	;AN000;
				       ; which we create right after the Save pointer table.			;AN000;
				       ;------------------------------------------------------------------------;AN000;
 0D44  8B 3E 0D8A R			MOV	DI,OUR_SAVE_TAB_OFF    ; DS:[DI] := Our BIOS save ptr tab	;AN000;
 0D48  A1 0BC3 R			MOV	AX,END_OF_RESIDENT_CODE; Store its offset			;AN000;
 0D4B  89 45 04				MOV	DS:[DI]+4,AX	       ;					;AN000;
 0D4E  8C 5D 06				MOV	WORD PTR DS:[DI]+6,DS  ; Store its segment			;AN000;
				       ;------------------------------------------------------------------------;AN000;
				       ; Initialize our DYNAMIC SAVE AREA with the 16 standard EGA colors	;AN000;
				       ;------------------------------------------------------------------------;AN000;
														;AN000;
 0D51  8D 36 0CED R			LEA  SI,EGA_DEFAULT_COLORS	; DS:[SI] := EGA 16 Default colors	;AN000;
 0D55  8B 3E 0BC3 R			MOV  DI,END_OF_RESIDENT_CODE	; ES:[DI] := DYNAMIC SAVE AREA		;AN000;
 0D59  B9 0011				MOV  CX,17			; CX := Number of colors		;AN000;
 0D5C  F3/ A4				REP  MOVSB			; Initialize the Dynamic save area	;AN000;
				       ;------------------------------------------------------------------------;AN000;
				       ; Set the BIOS Save Pointer to our table of Save pointers:		;AN000;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-63
DOS - Message Retriever - DISPMSG.ASM Module                

				       ;------------------------------------------------------------------------;AN000;
 0D5E  FA				CLI									;AN000;
 0D5F  33 C0				XOR	AX,AX		       ; ES:BIOS_SAVE_PTR := Our save table:	;AN000;
 0D61  8E C0				MOV	ES,AX								;AN000;
 0D63  A1 0D8A R			MOV	AX,OUR_SAVE_TAB_OFF						;AN000;
 0D66  26: A3 04A8			MOV	ES:BIOS_SAVE_PTR,AX						;AN000;
 0D6A  26: 8C 1E 04AA			MOV	ES:BIOS_SAVE_PTR+2,DS						;AN000;
 0D6F  FB				STI									;AN000;
				    .ELSE			       ; ELSE save pointer table is in RAM	;AN000;
 0D70  EB 0B                 3						jmp short $l47 
 0D72                        2	$l48: 
				       ;------------------------------------------------------------------------;AN000;
				       ; ELSE, the BIOS save pointer table is in RAM:				;AN000;
				       ;------------------------------------------------------------------------;AN000;
				       ;------------------------------------------------------------------------;AN000;
				       ; Set the pointer in THEIR Save ptr table to OUR EGA dynamic save area	;AN000;
				       ;------------------------------------------------------------------------;AN000;
 0D72  26: 8C 5C 06			MOV   WORD PTR ES:[SI]+6,DS    ; ES:[SI] = The existing table in RAM	;AN000;
 0D76  A1 0BC3 R			MOV   AX,END_OF_RESIDENT_CODE						;AN000;
 0D79  26: 89 44 04			MOV   ES:[SI]+4,AX							;AN000;
				    .ENDIF			       ; ENDIF save pointer table is in ROM	;AN000;
 0D7D                        2	$l47: 
				  ;-----------------------------------------------------------------------------;AN000;
				  ; Adjust END_OF_RESIDENT_CODE to the next offset available for copying	;AN000;
				  ; resident code and data.							;AN000;
				  ;-----------------------------------------------------------------------------;AN000;
 0D7D  81 06 0BC3 R 0100	   ADD	END_OF_RESIDENT_CODE,EGA_DYNAMIC_LEN					;AN000;
				.ENDIF										;AN000;
 0D83                        2	$l44: 
 0D83  07			POP	 ES									;AN000;
 0D84  5F			POP	 DI									;AN000;
 0D85  5E			POP	 SI									;AN000;
 0D86  5A			POP	 DX									;AN000;
 0D87  59			POP	 CX									;AN000;
 0D88  58			POP	 AX									;AN000;
														;AN000;
 0D89  C3			RET										;AN000;
 0D8A  0000			OUR_SAVE_TAB_OFF DW	?							;AN000;
 0D8C				INST_EGA_SAVE_AREA ENDP 							;AN000;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-64
DOS - Message Retriever - DISPMSG.ASM Module                

				PAGE										;AN000;
				;===============================================================================;AN000;
				;										;AN000;
				; CHAIN_INTERRUPTS : INSTALL INT 5 AND INT 2FH VECTORS				;AN000;
				;										;AN000;
				;-------------------------------------------------------------------------------;AN000;
				;										;AN000;
				; INPUT:   DS			= Data segment for our code			;AN000;
				;	   END_OF_RESIDENT_CODE = Offset of the end of the resident code	;AN000;
				;										;AN000;
				; OUTPUT:  OLD_INT_2FH		  (within INT_2FH_DRIVER)			;AN000;
				;	   BIOS_INT_5H		  (within PRT_SCR module)			;AN000;
				;	   END_OF_RESIDENT_CODE is updated to point to the end of the code	;AN000;
				;				   that will stay resident.			;AN000;
				;	   SAVE_AREA_PTR in BIOS segment is updated if an EGA adapter is found	;AN000;
				;										;AN000;
				;-------------------------------------------------------------------------------;AN000;
				;;										;AN000;
				;; Data Structures Referenced:							;AN000;
				;;   Shared Data Area								;AN000;
				;;										;AN000;
				;; Description: 								;AN000;
				;;   Install Interrupts 5 and 2FH. The old vectors are saved.			;AN000;
				;;										;AN000;
				;; Called By:									;AN000;
				;;   GRAPHICS_INSTALL								;AN000;
				;;										;AN000;
				;; External Calls:								;AN000;
				;;   DOS INT 21H Replace vector AH=25h						;AN000;
				;;   DOS INT 21H Get vector AH=35h						;AN000;
				;;										;AN000;
				;; Logic:									;AN000;
				;;   Save interrupt 5 vector in BIOS_INT_5H					;AN000;
				;;   Point interrupt 5 to PRT_SCR module					;AN000;
				;;   Save interrupt 2FH vector in BIOS_INT_2FH					;AN000;
				;;   Point interrupt 2FH to INT_2FH_DRIVER module				;AN000;
				;;   RETURN									;AN000;
				;;										;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;					;AN000;
								       ;;					;AN000;
 0D8C				CHAIN_INTERRUPTS  PROC NEAR	       ;;					;AN000;
 0D8C  06				PUSH	ES								;AN000;
 0D8D  53				PUSH	BX								;AN000;
														;AN000;
				;-------------------------------------------------------------------------------;AN000;
				; Replace INTERRUPT 5 vector							;AN000;
				;-------------------------------------------------------------------------------;AN000;
 0D8E  B4 35				MOV	AH,35H			; Get vector for			;AN000;
 0D90  B0 05				MOV	AL,5			;  interrupt 5 request			;AN000;
 0D92  CD 21				INT	21H			; Call DOS				;AN000;
														;AN000;
 0D94  89 1E 0000 E			MOV	BIOS_INT_5H,BX		; Save the old vector			;AN000;
 0D98  8C 06 0002 E			MOV	BIOS_INT_5H+2,ES						;AN000;
														;AN000;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-65
DOS - Message Retriever - DISPMSG.ASM Module                

 0D9C  BA 0000 E			MOV	DX,OFFSET PRT_SCR	; DS:DX := Offset of our Print Screen	;AN000;
														;AN000;
 0D9F  B4 25				MOV	AH,25H			; Replace vector for			;AN000;
 0DA1  B0 05				MOV	AL,5			;  interrupt 5 request			;AN000;
 0DA3  CD 21				INT	21H			; Call DOS				;AN000;
														;AN000;
				;-------------------------------------------------------------------------------;AN000;
				; Replace INTERRUPT 2FH vector							;AN000;
				;-------------------------------------------------------------------------------;AN000;
 0DA5  B4 35				MOV	AH,35H			; Get vector for			;AN000;
 0DA7  B0 2F				MOV	AL,2FH			;  interrupt 2FH request		;AN000;
 0DA9  CD 21				INT	21H			; Call DOS				;AN000;
														;AN000;
 0DAB  89 1E 0000 E			MOV	WORD PTR OLD_INT_2FH,BX ; Save the old vector			;AN000;
 0DAF  8C 06 0002 E			MOV	WORD PTR OLD_INT_2FH+2,ES					;AN000;
														;AN000;
 0DB3  BA 0000 E			MOV	DX,OFFSET INT_2FH_DRIVER; DS:DX := Offset of our 2FH handler	;AN000;
														;AN000;
 0DB6  B4 25				MOV	AH,25H			; Replace vector for			;AN000;
 0DB8  B0 2F				MOV	AL,2FH			;  interrupt 2FH request		;AN000;
 0DBA  CD 21				INT	21H			; Call DOS				;AN000;
														;AN000;
 0DBC  5B				POP	BX								;AN000;
 0DBD  07				POP	ES								;AN000;
 0DBE  C3				RET									;AN000;
 0DBF				CHAIN_INTERRUPTS  ENDP								;AN000;
														;AN000;
				;===============================================================================;AN000;
				;										;AN000;
				; COPY_PRINT_MODULES: COPY THE SET OF PRINT MODULES NEEDED OVER THE PREVIOUS ONE;AN000;
				;										;AN000;
				;-------------------------------------------------------------------------------;AN000;
				;										;AN000;
				; INPUT:  BP		       = Offset of the temporary Shared Data area	;AN000;
				;	  END_OF_RESIDENT_CODE = Location of the set of COLOR modules		;AN000;
				;				 (if first time installed)			;AN000;
				;	  CS:[BP].PRINTER_TYPE = Printer type NEEDED				;AN000;
				;	  RESIDENT_CODE_SEG    = Segment containing the resident code		;AN000;
				;										;AN000;
				; OUTPUT: END_OF_RESIDENT_CODE = End of the print modules IS UPDATED		;AN000;
				;				 (If first time installed)			;AN000;
				;										;AN000;
				;-------------------------------------------------------------------------------;AN000;
				;;										;AN000;
				;; Data Structures Referenced:							;AN000;
				;;   Control Variables								;AN000;
				;;   Shared Data Area								;AN000;
				;;										;AN000;
				;; Description: 								;AN000;
				;;   This module trashes one set of print modules (Color or Black & White)	;AN000;
				;;   depending on the type of printer attached.  Since the Shared Data		;AN000;
				;;   (resident version) will reside immediately after the print modules,	;AN000;
				;;   END_OF_RESIDENT_CODE will be set by this modules.				;AN000;
				;;										;AN000;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-66
DOS - Message Retriever - DISPMSG.ASM Module                

				;;   The set of COLOR modules is already at the rigth located when installing	;AN000;
				;;   GRAPHICS for the first time. This is true since, the color modules are	;AN000;
				;;   linked before the black and white modules. 				;AN000;
				;;										;AN000;
				;;   Therefore, if we are installing GRAPHICS for the first time and we need	;AN000;
				;;   the color modules then, we do not need to relocate any print modules.	;AN000;
				;;										;AN000;
				;;   When installing GRAPHICS again we first check what is the resident set,	;AN000;
				;;   we recopy a new set only if needed.					;AN000;
				;;										;AN000;
				;; Called By:									;AN000;
				;;   GRAPHICS_INSTALL								;AN000;
				;;										;AN000;
				;; Logic:									;AN000;
				;;   IF color printer THEN							;AN000;
				;;	SI := Offset of BW_PRINT_MODULES					;AN000;
				;;   ELSE									;AN000;
				;;	SI := Offset of COLOR_PRINT_MODULES					;AN000;
				;;   ENDIF									;AN000;
				;;   REP MOVSB		; Copy the set of modules				;AN000;
				;;   END_OF_RESIDENT_CODE := end of the set of modules				;AN000;
				;;   RETURN									;AN000;
				;;										;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;					;AN000;
 0DBF				COPY_PRINT_MODULES  PROC NEAR							;AN000;
 0DBF  50				PUSH	AX								;AN000;
 0DC0  53				PUSH	BX								;AN000;
 0DC1  51				PUSH	CX								;AN000;
 0DC2  56				PUSH	SI								;AN000;
 0DC3  57				PUSH	DI								;AN000;
 0DC4  06				PUSH	ES								;AN000;
														;AN000;
				;-------------------------------------------------------------------------------;AN000;
				; Determine if we need to relocate the set of print modules, if so, set the	;AN000;
				; source address (DS:SI), the destination address (ES:DI) and the number of	;AN000;
				; bytes to copy (CX).								;AN000;
				;-------------------------------------------------------------------------------;AN000;
 0DC5  2E: FF 36 0000 E		   PUSH    CS:RESIDENT_CODE_SEG 	; ES := Segment containing the resident ;AN000;
 0DCA  07			   POP	   ES				;	 code  (Where to copy modules)	;AN000;
 0DCB  BF 0000 E		   MOV	   DI,OFFSET PRINT_MODULE_START ; ES:[DI] := Resident print modules	;AN000;
														;AN000;
				  .IF <INSTALLED EQ NO> 		; IF not installed			;AN000;
 0DCE  80 3E 0B07 R 00       3						cmp INSTALLED,NO 
 0DD3  75 15                 6						jne $l52 
				  .THEN 				; THEN, 				;AN000;
									;   We relocate the print modules	;AN000;
									;    at the end of the resident code:	;AN000;
									;     (this is where the color set is)	;AN000;
				     .IF <CS:[BP].PRINTER_TYPE EQ BLACK_WHITE> ; IF we don't want the color set ;AN000;
 0DD5  2E: 80 7E 04 02       3						cmp CS:[BP].PRINTER_TYPE,BLACK_WHITE 
 0DDA  75 37                 6						jne $l51 
				     .THEN				;   THEN,				;AN000;
 0DDC  C6 06 0E42 R 01 90		MOV NEED_NEW_PRINT_MODULES,YES	;     Say we need new modules		;AN000;
 0DE2  BE 0000 E			MOV SI,OFFSET PRINT_BW_APA	;     DS:[SI] := Black and white modules;AN000;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-67
DOS - Message Retriever - DISPMSG.ASM Module                

 0DE5  B9 0000 E			MOV CX,LEN_OF_BW_MODULES	;     CX      := Length of B&W modules	;AN000;
				     .ENDIF				;					;AN000;
														;AN000;
				  .ELSE 				; ELSE, (We are already installed)	;AN000;
 0DE8  EB 29                 3						jmp short $l51 
 0DEA                        2	$l52: 
 0DEA  8B 1E 0000 E		      MOV     BX,SHARED_DATA_AREA_PTR	;   BX := Offset of Shared Data area	;AN000;
 0DEE  26: 8A 47 04		      MOV     AL,ES:[BX].PRINTER_TYPE	;   AL := Type of the resident set	;AN000;
				     .IF <AL NE CS:[BP].PRINTER_TYPE>	;   IF resident set is not the one	;AN000;
 0DF2  2E: 3A 46 04          3						cmp AL,CS:[BP].PRINTER_TYPE 
 0DF6  74 1B                 6						je $l51 
				     .THEN				;   we need THEN,			;AN000;
 0DF8  C6 06 0E42 R 01 90		MOV NEED_NEW_PRINT_MODULES,YES	;     Say we need a new set.		;AN000;
				       .IF <CS:[BP].PRINTER_TYPE EQ COLOR>;   IF its color we need then,	;AN000;
 0DFE  2E: 80 7E 04 01       3						cmp CS:[BP].PRINTER_TYPE,COLOR 
 0E03  75 08                 6						jne $l62 
 0E05  BE 0000 E			  MOV SI,OFFSET PRINT_COLOR	;	DS:[SI] := Color set		;AN000;
 0E08  B9 0000 E			  MOV CX,LEN_OF_COLOR_MODULES	;	CX	:= Length of color mod. ;AN000;
				       .ELSE				;     ELSE				;AN000;
 0E0B  EB 06                 3						jmp short $l51 
 0E0D                        2	$l62: 
 0E0D  BE 0000 E			  MOV SI,OFFSET PRINT_BW_APA	;	DS:[SI] := B&W set		;AN000;
 0E10  B9 0000 E			  MOV CX,LEN_OF_BW_MODULES	;	CX	:= Length of B&W mod.	;AN000;
				       .ENDIF				;     ENDIF we need the color set	;AN000;
				     .ENDIF				;   ENDIF we need a new set		;AN000;
				  .ENDIF				; ENDIF we are not installed		;AN000;
 0E13                        2	$l51: 
														;AN000;
														;AN000;
				;-------------------------------------------------------------------------------;AN000;
				; If needed: Copy the required set of print modules				;AN000;
				;-------------------------------------------------------------------------------;AN000;
				  .IF <NEED_NEW_PRINT_MODULES EQ YES>						;AN000;
 0E13  80 3E 0E42 R 01       3						cmp NEED_NEW_PRINT_MODULES,YES 
 0E18  75 03                 6						jne $l65 
				  .THEN 									;AN000;
 0E1A  FC			     CLD			       ; Clear the direction flag		;AN000;
 0E1B  F3/ A4			     REP     MOVSB		       ; Copy the set of print modules		;AN000;
				  .ENDIF			       ; ENDIF needs to copy the print modules	;AN000;
 0E1D                        2	$l65: 
														;AN000;
				;-------------------------------------------------------------------------------;AN000;
				; Set END_OF_RESIDENT_CODE pointer to the end of the print modules:		;AN000;
				; (Reserve enough space to store the larger set of modules on a 		;AN000;
				;  subsequent install)								;AN000;
				;-------------------------------------------------------------------------------;AN000;
				  .IF <INSTALLED EQ NO> 		; IF first time installed		;AN000;
 0E1D  80 3E 0B07 R 00       3						cmp INSTALLED,NO 
 0E22  75 17                 6						jne $l68 
				  .THEN 				; THEN, 				;AN000;
 0E24  B9 0000 E		     MOV     CX,LEN_OF_COLOR_MODULES	;   Adjust END_OF_RESIDENT_CODE to	;AN000;
				    .IF <CX G LEN_OF_BW_MODULES>	;   contains the larger set of modules. ;AN000;
 0E27  81 F9 0000 E          3						cmp CX,LEN_OF_BW_MODULES 
 0E2B  7E 08                 5						jnG $l72 
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-68
DOS - Message Retriever - DISPMSG.ASM Module                

				    .THEN				;					;AN000;
 0E2D  81 06 0BC3 R 0000 E	       ADD     END_OF_RESIDENT_CODE,LEN_OF_COLOR_MODULES			;AN000;
				    .ELSE									;AN000;
 0E33  EB 06                 3						jmp short $l68 
 0E35                        2	$l72: 
 0E35  81 06 0BC3 R 0000 E	       ADD     END_OF_RESIDENT_CODE,LEN_OF_BW_MODULES				;AN000;
				    .ENDIF				;					;AN000;
				  .ENDIF									;AN000;
 0E3B                        2	$l68: 
														;AN000;
 0E3B  07				POP ES									;AN000;
 0E3C  5F				POP DI									;AN000;
 0E3D  5E				POP SI									;AN000;
 0E3E  59				POP CX									;AN000;
 0E3F  5B				POP BX									;AN000;
 0E40  58				POP AX									;AN000;
 0E41  C3				RET									;AN000;
 0E42  00			NEED_NEW_PRINT_MODULES DB   NO		; True if print modules needed must be	;AN000;
									;  copied over the other set of print	;AN000;
									;   modules				;AN000;
 0E43				COPY_PRINT_MODULES  ENDP							;AN000;
														;AN002;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-69
DOS - Message Retriever - DISPMSG.ASM Module                

				PAGE										;AN002;
				;===============================================================================;AN002;
				;										;AN002;
				; PROCEDURE_NAME: RELEASE_ENVIRONMENT						;AN002;
				;										;AN002;
				; INPUT:  None. 								;AN002;
				;										;AN002;
				; OUTPUT: Environment vector released.						;AN002;
				;										;AN002;
				;-------------------------------------------------------------------------------;AN002;
 0E43				RELEASE_ENVIRONMENT PROC NEAR							;AN002;
 0E43  50				PUSH	AX			; save regs				;AN002;
 0E44  53				PUSH	BX								;AN002;
 0E45  06				PUSH	ES								;AN002;
 0E46  B4 62				MOV	AH,62H			; function for get the PSP segment	;AN002;
 0E48  CD 21				INT	21H			; invoke INT 21h			;AN002;
 0E4A  8E C3				MOV	ES,BX			; BX contains PSP segment - put in ES	;AN002;
 0E4C  26: 8B 1E 002C			MOV	BX,WORD PTR ES:[2CH]	; get segment of environmental vector	;AN002;
 0E51  8E C3				MOV	ES,BX			; place segment in ES for Free Memory	;AN002;
 0E53  B4 49				MOV	AH,49H			; Free Allocated Memory function call	;AN002;
 0E55  CD 21				INT	21H			; invoke INT 21h			;AN002;
 0E57  07				POP	ES			; restore regs				;AN002;
 0E58  5B				POP	BX								;AN002;
 0E59  58				POP	AX								;AN002;
 0E5A  C3				RET									;AN002;
 0E5B				RELEASE_ENVIRONMENT ENDP							;AN002;
														;AN000;
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-70
DOS - Message Retriever - DISPMSG.ASM Module                

				PAGE										;AN000;
				;===============================================================================;AN000;
				;										;AN000;
				; PROCEDURE_NAME: DISP_ERROR							;AN000;
				;										;AN000;
				; INPUT:  AX := GRAPHICS message number (documented in GRMSG.EQU)		;AN000;
				;	  CX := Number of substitutions (Needed by SYSDISPMSG)			;AN000;
				;	  DS:[SI] := Substitution list (needed only if CX <> 0) 		;AN000;
				;										;AN000;
				; OUTPUT: Error message is displayed on STANDARD ERROR OUTPUT (STDERR)		;AN000;
				;										;AN000;
				;-------------------------------------------------------------------------------;AN000;
 0E5B				DISP_ERROR    PROC   NEAR							;AN000;
 0E5B  53				PUSH	BX								;AN000;
 0E5C  57				PUSH	DI								;AN000;
 0E5D  56				PUSH	SI								;AN000;
 0E5E  55				PUSH	BP								;AN000;
														;AN000;
 0E5F  8B 1E 0BC7 R			MOV	BX,ERROR_DEVICE    ; Issue message to standard error		;AN000;
 0E63  32 D2				XOR	DL,DL		   ; No input					;AN000;
 0E65  B6 FF				MOV	DH,UTILITY_MSG_CLASS;It's one of our messages                   ;AN000;
 0E67  E8 0264 R			CALL	SYSDISPMSG	   ; display error message			;AN000;
														;AN000;
 0E6A  5D				POP	BP								;AN000;
 0E6B  5E				POP	SI								;AN000;
 0E6C  5F				POP	DI								;AN000;
 0E6D  5B				POP	BX								;AN000;
 0E6E  C3				RET									;AN000;
 0E6F				DISP_ERROR    ENDP								;AN000;
				
				include msgdcl.inc										;AN0
				00;
			     C	; This Macro was removed from sysmsg.inc. We had to remove this
			     C	; macro and put it into it's own include file in order to clear up
			     C	; some assembly errors. MS MASM will not allow a public declaration
			     C	; during the second pass of the assembler. IBM MASM will allow this.
			     C	;
			     C	;
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;;	$M_DECLARE	     Macro
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C					       ;
			     C	$M_DECLARE    macro	numcls	       ;
			     C	   $M_DCOUNT = 0		       ;
			     C	   REPT  numcls 		       ;
			     C	     $M_DCOUNT =  $M_DCOUNT + 1        ;
			     C	     $M_DECLARE2  %$M_DCOUNT	       ;
			     C	   ENDM 			       ;
			     C	
			     C	  IF COMR
			     C	    IFNDEF $M_RT2			;  If Resident table is not in this assembly,
			     C		EXTRN	$M_RT2:BYTE		;     Must be external
			     C	    ELSE
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-71
DOS - Message Retriever - DISPMSG.ASM Module                

			     C		PUBLIC	$M_RT2
			     C	    ENDIF				;
			     C	  ELSE
			     C	    IFNDEF $M_RT			;  If Resident table is not in this assembly,
			     C		EXTRN	$M_RT:BYTE		;     Must be external
			     C	    ELSE
			     C		PUBLIC	$M_RT
			     C	    ENDIF				;
			     C	  ENDIF
			     C	
			     C	  $M_CHECK $M_GET_MSG_ADDRESS	      ;  If this subroutine is not in this assembly,
			     C	  $M_CHECK $M_MSGSERV_1 	      ;  If this subroutine is not in this assembly,
			     C	  $M_CHECK $M_MSGSERV_2 	      ;  If this subroutine is not in this assembly,
			     C	
			     C	ENDM				       ;
			     C					       ;
			     C	$M_DECLARE2   macro   innum	       ;
			     C	  IF NOT COMR			       ; IF Not resident COMMAND.COM
			     C	    IF NOT COMT 			 ; IF Not transient COMMAND.COM
			     C	      IFNDEF  $M_CLS_&innum		 ; IF class is not in this assembly,
			     C		IF	FARmsg			 ;
			     C		  EXTRN   $M_CLS_&innum:FAR	 ;    Must be external
			     C		ELSE				 ;
			     C		  EXTRN   $M_CLS_&innum:NEAR	 ;    Must be external
			     C		ENDIF				 ;
			     C	      ELSE				 ; ELSE
			     C		PUBLIC	$M_CLS_&innum		 ;    Label PUBLIC
			     C	      ENDIF				 ;
			     C	    ELSE				 ; ELSE
			     C	      IFDIF  <$M_CLS_&innum>,<$M_CLS_1>  ; IF NOT $M_CLS_1 or
			     C		IFDIF <$M_CLS_&innum>,<$M_CLS_2> ;   IF NOT $M_CLS_2 then
			     C		  IFNDEF  $M_CLS_&innum 	 ;     IF class is not in this assembly,
			     C		    IF	    FARmsg		 ;
			     C		      EXTRN   $M_CLS_&innum:FAR  ;	 Must be external
			     C		    ELSE			 ;
			     C		      EXTRN   $M_CLS_&innum:NEAR ;	 Must be external
			     C		    ENDIF			 ;
			     C		  ELSE				 ;     ELSE
			     C		    PUBLIC  $M_CLS_&innum	 ;	 Label PUBLIC
			     C		  ENDIF 			 ;
			     C		ENDIF				 ;
			     C	      ENDIF				 ;
			     C	    ENDIF				 ;
			     C	  ELSE					 ; ELSE
			     C	    IFDIF  <$M_CLS_&innum>,<$M_CLS_1>	 ; IF NOT $M_CLS_1 or
			     C	      IFDIF <$M_CLS_&innum>,<$M_CLS_2>	 ;   IF NOT $M_CLS_2 then
			     C		IFNDEF	$M_CLS_&innum		 ;     IF class is not in this assembly,
			     C		  IF	  FARmsg		 ;
			     C		    EXTRN   $M_CLS_&innum:FAR	 ;	 Must be external
			     C		  ELSE				 ;
			     C		    EXTRN   $M_CLS_&innum:NEAR	 ;	 Must be external
			     C		  ENDIF 			 ;
			     C		ELSE				 ;     ELSE
			     C		  PUBLIC  $M_CLS_&innum 	 ;	 Label PUBLIC
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Page     1-72
DOS - Message Retriever - DISPMSG.ASM Module                

			     C		ENDIF				 ;
			     C	      ENDIF				 ;
			     C	    ENDIF				 ;
			     C	  ENDIF 			       ;
			     C	ENDM				       ;
			     C					       ;
			     C	$M_CHECK      macro   parm	       ;
			     C	  IFNDEF  parm			       ; IF class is not in this assembly,
			     C	    IF	    FARmsg		       ;
			     C	      EXTRN   parm:FAR		       ;    Must be external
			     C	    ELSE			       ;
			     C	      EXTRN   parm:NEAR 	       ;    Must be external
			     C	    ENDIF			       ;
			     C	  ELSE
			     C	    IF COMR
			     C	    ELSE
			     C	      PUBLIC parm
			     C	    ENDIF
			     C	  ENDIF 			       ;
			     C	ENDM				       ;
			     C					       ;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C					       ;
			     C					       ;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	
			     C	
														;AN000;
 0E6F				CODE   ENDS									;AN000;
				       END									;AN000;

Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Symbols-1


Macros:

		N a m e			Lines

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

Structures and Records:

                N a m e                 Width   # fields
                                        Shift   Width   Mask    Initial

$M_CLASS_ID  . . . . . . . . . .  	0004	0003
  $M_CLS_ID  . . . . . . . . . .  	0000
  $M_COMMAND_VER . . . . . . . .  	0001
  $M_NUM_CLS_MSG . . . . . . . .  	0003
$M_COUNTRY_INFO  . . . . . . . .  	005E	000A
  $M_HEADER  . . . . . . . . . .  	0000
  $M_DATE_FORMAT . . . . . . . .  	004C
  $M_CURR_SEPARA . . . . . . . .  	004E
  $M_THOU_SEPARA . . . . . . . .  	0053
  $M_DECI_SEPARA . . . . . . . .  	0055
  $M_DATE_SEPARA . . . . . . . .  	0057
  $M_TIME_SEPARA . . . . . . . .  	0059
  $M_CURR_FORMAT . . . . . . . .  	005B
  $M_SIG_DIGS_CU . . . . . . . .  	005C
  $M_TIME_FORMAT . . . . . . . .  	005D
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Symbols-2


$M_ID  . . . . . . . . . . . . .  	0004	0002
  $M_NUM . . . . . . . . . . . .  	0000
  $M_TXT_PTR . . . . . . . . . .  	0002
$M_RES_ADDRS . . . . . . . . . .  	008D	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  . . . . . . . . .  	0038
  $M_DBCS_VEC  . . . . . . . . .  	003C
  $M_HANDLE  . . . . . . . . . .  	0040
  $M_SIZE  . . . . . . . . . . .  	0042
  $M_CRLF  . . . . . . . . . . .  	0043
  $M_CLASS . . . . . . . . . . .  	0045
  $M_RETURN_ADDR . . . . . . . .  	0046
  $M_MSG_NUM . . . . . . . . . .  	0048
  $M_DIVISOR . . . . . . . . . .  	004A
  $M_TEMP_BUF  . . . . . . . . .  	004C
  $M_BUF_TERM  . . . . . . . . .  	008C
$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
COLORPRINT_STR . . . . . . . . .  	0004	0004
  RED  . . . . . . . . . . . . .  	0000
  GREEN  . . . . . . . . . . . .  	0001
  BLUE . . . . . . . . . . . . .  	0002
  SELECT_MASK  . . . . . . . . .  	0003
COLORSELECT_STR  . . . . . . . .  	0002	0002
  NUM_SELECT_ESC . . . . . . . .  	0000
  SELECT_ESC . . . . . . . . . .  	0001
DISPLAYMODE_STR  . . . . . . . .  	0018	0010
  NEXT_DISP_MODE . . . . . . . .  	0000
  NUM_DISP_MODE  . . . . . . . .  	0002
  DISP_MODE_LIST_PTR . . . . . .  	0003
  BOX_WIDTH  . . . . . . . . . .  	0005
  BOX_HEIGHT . . . . . . . . . .  	0006
  NUM_PATTERNS . . . . . . . . .  	0007
  PATTERN_TAB_PTR  . . . . . . .  	0008
  NUM_GRAPHICS_ESC . . . . . . .  	000A
  GRAPHICS_ESC_PTR . . . . . . .  	000B
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Symbols-3


  LOW_BYT_COUNT_PTR  . . . . . .  	000D
  HGH_BYT_COUNT_PTR  . . . . . .  	000F
  NUM_SETUP_ESC  . . . . . . . .  	0011
  SETUP_ESC_PTR  . . . . . . . .  	0012
  NUM_RESTORE_ESC  . . . . . . .  	0014
  RESTORE_ESC_PTR  . . . . . . .  	0015
  PRINT_OPTIONS  . . . . . . . .  	0017
SHARED_DATA_AREA_STR . . . . . .  	000E	000A
  SD_TOTAL_SIZE  . . . . . . . .  	0000
  SWITCHES . . . . . . . . . . .  	0002
  HARDWARE_CONFIG  . . . . . . .  	0003
  PRINTER_TYPE . . . . . . . . .  	0004
  DARKADJUST_VALUE . . . . . . .  	0005
  NUM_PRT_COLOR  . . . . . . . .  	0006
  COLORPRINT_PTR . . . . . . . .  	0007
  NUM_PRT_BANDS  . . . . . . . .  	0009
  COLORSELECT_PTR  . . . . . . .  	000A
  DISPLAYMODE_PTR  . . . . . . .  	000C

Segments and Groups:

                N a m e         	Length	 Align	Combine Class

CODE . . . . . . . . . . . . . .  	0E6F	PARA	PUBLIC	'CODE'

Symbols:            

                N a m e         	Type	 Value	 Attr

ACTION_39  . . . . . . . . . . .  	NUMBER	0004	
ALT_EXPECTED_VERSION . . . . . .  	NUMBER	1A05	
ALT_GOOD_DOS . . . . . . . . . .  	L NEAR	0248	CODE
ALT_MAJOR_VERSION  . . . . . . .  	NUMBER	0005	
ALT_MINOR_VERSION  . . . . . . .  	NUMBER	001A	
AMIS_ID  . . . . . . . . . . . .  	L NEAR	00FC	CODE
AMIS_ID_MSG  . . . . . . . . . .  	L NEAR	0101	CODE
AMIS_ID_MSG_END  . . . . . . . .  	L NEAR	0109	CODE
amis_sign  . . . . . . . . . . .  	L NEAR	00EC	CODE	Global
AMIS_SIGN_SEGMENT  . . . . . . .  	ALIAS	 CODE		

BACKGROUND_SW  . . . . . . . . .  	NUMBER	0002	
BELL . . . . . . . . . . . . . .  	NUMBER	0007	
BIN_HEX_BYTE . . . . . . . . . .  	NUMBER	0013	
BIN_HEX_DWORD  . . . . . . . . .  	NUMBER	0033	
BIN_HEX_TYPE . . . . . . . . . .  	NUMBER	0003	
BIN_HEX_WORD . . . . . . . . . .  	NUMBER	0023	
BIOS_INT_5H  . . . . . . . . . .  	V WORD	0000	CODE	External
BIOS_SAVE_PTR  . . . . . . . . .  	NUMBER	04A8	
BLACK_WHITE  . . . . . . . . . .  	NUMBER	0002	
BLOCK_END  . . . . . . . . . . .  	V WORD	0000	CODE	External
BLOCK_START  . . . . . . . . . .  	V WORD	0000	CODE	External
BOX  . . . . . . . . . . . . . .  	NUMBER	0004	
BOX_H  . . . . . . . . . . . . .  	V BYTE	0000	CODE	External
BOX_W  . . . . . . . . . . . . .  	V BYTE	0000	CODE	External
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Symbols-4


BUILD_STATE  . . . . . . . . . .  	V BYTE	0000	CODE	External
BYTES_AVAIL_PSP_OFF  . . . . . .  	NUMBER	0006	

CHAIN_INTERRUPTS . . . . . . . .  	N PROC	0D8C	CODE	Length = 0033
CHARMSG  . . . . . . . . . . . .  	NUMBER	FFFF	
CHAR_FIELD_ASCIIZ  . . . . . . .  	NUMBER	0010	
CHAR_FIELD_CHAR  . . . . . . . .  	NUMBER	0000	
CHAR_TYPE  . . . . . . . . . . .  	NUMBER	0000	
CHECK_AMIS . . . . . . . . . . .  	L NEAR	01EC	CODE
CHECK_AMIS_DONE  . . . . . . . .  	L NEAR	0223	CODE
CHECK_AMIS_LOOP  . . . . . . . .  	L NEAR	01F5	CODE
CHECK_AMIS_NEXT  . . . . . . . .  	L NEAR	021E	CODE
CHECK_AMIS_UNSUP . . . . . . . .  	L NEAR	0222	CODE
CLASS_1_MESSAGECOUNT . . . . . .  	NUMBER	0001	
CLASS_2_MESSAGECOUNT . . . . . .  	NUMBER	0001	
CLASS_A_MESSAGECOUNT . . . . . .  	NUMBER	0002	
CLASS_B_MESSAGECOUNT . . . . . .  	NUMBER	0008	
CLASS_C_MESSAGECOUNT . . . . . .  	NUMBER	0008	
COLON  . . . . . . . . . . . . .  	NUMBER	003A	
COLOR  . . . . . . . . . . . . .  	NUMBER	0001	
COLP . . . . . . . . . . . . . .  	NUMBER	0080	
COLS . . . . . . . . . . . . . .  	NUMBER	0040	
COMR . . . . . . . . . . . . . .  	NUMBER	0000	
COMT . . . . . . . . . . . . . .  	NUMBER	0000	
COPY_PRINT_MODULES . . . . . . .  	N PROC	0DBF	CODE	Length = 0084
COPY_SHARED_DATA . . . . . . . .  	L NEAR	0000	CODE	External
CR . . . . . . . . . . . . . . .  	NUMBER	000D	
CUR_BOX  . . . . . . . . . . . .  	V BYTE	0000	CODE	External
CUR_COLUMN . . . . . . . . . . .  	V WORD	0000	CODE	External
CUR_MODE . . . . . . . . . . . .  	V BYTE	0000	CODE	External
CUR_MODE_PTR . . . . . . . . . .  	V WORD	0000	CODE	External
CUR_PAGE . . . . . . . . . . . .  	V BYTE	0000	CODE	External
CUR_PRINTER_TYPE . . . . . . . .  	V BYTE	0000	CODE	External
CUR_ROW  . . . . . . . . . . . .  	V WORD	0000	CODE	External
CUR_SCAN_LNE_LENGTH  . . . . . .  	V WORD	0000	CODE	External
CUR_STMT . . . . . . . . . . . .  	V WORD	0000	CODE	External

DARK . . . . . . . . . . . . . .  	NUMBER	0100	
DATEMSG  . . . . . . . . . . . .  	NUMBER	0000	
DATE_MD  . . . . . . . . . . . .  	NUMBER	0014	
DATE_MDY_2 . . . . . . . . . . .  	NUMBER	0024	
DATE_MDY_4 . . . . . . . . . . .  	NUMBER	0034	
DATE_TYPE  . . . . . . . . . . .  	NUMBER	0004	
DEFAULT_BOX  . . . . . . . . . .  	L BYTE	0B9C	CODE	Global
DET_HW_CONFIG  . . . . . . . . .  	L NEAR	0000	CODE	External
DISK_PROC  . . . . . . . . . . .  	NUMBER	0000	
DISP . . . . . . . . . . . . . .  	NUMBER	0002	
DISPLAYMSG . . . . . . . . . . .  	NUMBER	0000	
DISP_ERROR . . . . . . . . . . .  	N PROC	0E5B	CODE	Global	Length = 0014
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	
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Symbols-5


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	
DUPLICATE_PARM . . . . . . . . .  	NUMBER	0007	

EGA  . . . . . . . . . . . . . .  	NUMBER	0004	
EGA_DEFAULT_COLORS . . . . . . .  	L BYTE	0CED	CODE
EGA_DYNAMIC_LEN  . . . . . . . .  	NUMBER	0100	
END_OF_FILE  . . . . . . . . . .  	V BYTE	0000	CODE	External
END_OF_RESIDENT_CODE . . . . . .  	L WORD	0BC3	CODE
ERROR_CLASS_39 . . . . . . . . .  	NUMBER	0001	
ERROR_CODE . . . . . . . . . . .  	V BYTE	0000	CODE	External
ERROR_DEVICE . . . . . . . . . .  	L WORD	0BC7	CODE	Global
ERROR_EXIT . . . . . . . . . . .  	L NEAR	0CD6	CODE
EXPECTED_VERSION . . . . . . . .  	NUMBER	0004	
EXT_ERR_39 . . . . . . . . . . .  	NUMBER	0027	
EXT_ERR_CLASS  . . . . . . . . .  	NUMBER	0001	

FALSE  . . . . . . . . . . . . .  	NUMBER	0000	
FARMSG . . . . . . . . . . . . .  	NUMBER	0000	
FILE_ERROR . . . . . . . . . . .  	V BYTE	0000	CODE	External
FILE_ERRORS  . . . . . . . . . .  	NUMBER	000D	
FIRST_BLOCK  . . . . . . . . . .  	V WORD	0000	CODE	External
FORMAT_NOT_CORRECT . . . . . . .  	NUMBER	0008	
FORMFD . . . . . . . . . . . . .  	NUMBER	000C	

GETMSG . . . . . . . . . . . . .  	NUMBER	0000	
GR . . . . . . . . . . . . . . .  	NUMBER	0008	
GRAPHICS_INSTALL . . . . . . . .  	N PROC	0BC9	CODE	Global	Length = 0124
GROUPS_DONE  . . . . . . . . . .  	V WORD	0000	CODE	External
GROW_SHARED_DATA . . . . . . . .  	L NEAR	0000	CODE	External

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

IFSFUNC_INSTALLED  . . . . . . .  	NUMBER	00FF	
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Symbols-6


IFSFUNC_INSTALL_CHECK  . . . . .  	NUMBER	0500	
IFS_GET_ERR_TEXT . . . . . . . .  	NUMBER	0502	
INCORRECT_DOS  . . . . . . . . .  	NUMBER	0001	
INPUTMSG . . . . . . . . . . . .  	NUMBER	0000	
INSTALLED  . . . . . . . . . . .  	L BYTE	0B07	CODE	Global
INST_EGA_SAVE_AREA . . . . . . .  	N PROC	0CFE	CODE	Length = 008E
INT_2FH_DRIVER . . . . . . . . .  	L NEAR	0000	CODE	External
INVALID  . . . . . . . . . . . .  	NUMBER	0002	
INVALID_B_SWITCH . . . . . . . .  	NUMBER	0011	
INVALID_COMBINATION  . . . . . .  	NUMBER	0006	
INVALID_PARM . . . . . . . . . .  	NUMBER	0005	
INVALID_PB . . . . . . . . . . .  	NUMBER	000F	
INVALID_PRT  . . . . . . . . . .  	NUMBER	0010	
INVALID_STMT . . . . . . . . . .  	NUMBER	000B	

LCD_BOX  . . . . . . . . . . . .  	L BYTE	0BAD	CODE	Global
LEFT_ALIGN . . . . . . . . . . .  	NUMBER	0000	
LEN_OF_BW_MODULES  . . . . . . .  	NUMBER	0000		Communal
LEN_OF_COLOR_MODULES . . . . . .  	NUMBER	0000		Communal
LF . . . . . . . . . . . . . . .  	NUMBER	000A	
LIMIT  . . . . . . . . . . . . .  	L NEAR	0000	CODE	External
LOADMSG  . . . . . . . . . . . .  	NUMBER	0000	
LOAD_PROFILE . . . . . . . . . .  	L NEAR	0000	CODE	External
LOCUS_39 . . . . . . . . . . . .  	NUMBER	0001	
LOWEST_4CH_VERSION . . . . . . .  	NUMBER	0002	
LOW_NIB_MASK . . . . . . . . . .  	NUMBER	000F	

MAJOR_VERSION  . . . . . . . . .  	NUMBER	0004	
MAX_BLOCK_END  . . . . . . . . .  	V WORD	0000	CODE	External
MEM_OVERFLOW . . . . . . . . . .  	V BYTE	0000	CODE	External
MINOR_VERSION  . . . . . . . . .  	NUMBER	0000	
MISSING  . . . . . . . . . . . .  	NUMBER	0001	
MISSING_STMT . . . . . . . . . .  	NUMBER	000A	
MODE_TYPE  . . . . . . . . . . .  	V BYTE	0000	CODE	External
MSGDATA  . . . . . . . . . . . .  	NUMBER	0000	
MSG_SER_CLASS  . . . . . . . . .  	NUMBER	0000	

NB_BOXES_PER_PRT_BUF . . . . . .  	V BYTE	0000	CODE	External
NB_CHAR_COLUMNS  . . . . . . . .  	V BYTE	0000	CODE	External
NB_COLORS  . . . . . . . . . . .  	V WORD	0000	CODE	External
NB_FREE_BYTES  . . . . . . . . .  	L WORD	0BBF	CODE	Global
NB_SCAN_LINES  . . . . . . . . .  	V WORD	0000	CODE	External
NEARMSG  . . . . . . . . . . . .  	NUMBER	FFFF	
NEED_NEW_PRINT_MODULES . . . . .  	L BYTE	0E42	CODE
NEW_EXPECTED_VERSION . . . . . .  	NUMBER	2605	
NEW_MAJOR_VERSION  . . . . . . .  	NUMBER	0005	
NEW_MINOR_VERSION  . . . . . . .  	NUMBER	0026	
NO . . . . . . . . . . . . . . .  	NUMBER	0000	
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	
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Symbols-7


NO_INPUT . . . . . . . . . . . .  	NUMBER	0000	
NO_MEMORY  . . . . . . . . . . .  	NUMBER	0002	
NO_REPLACE . . . . . . . . . . .  	NUMBER	0000	
NULL . . . . . . . . . . . . . .  	NUMBER	0000	
NUMMSG . . . . . . . . . . . . .  	NUMBER	FFFF	

OLD_ADAPTER  . . . . . . . . . .  	NUMBER	0010	
OLD_INT_2FH  . . . . . . . . . .  	V DWORD	0000	CODE	External
OUR_SAVE_TAB_OFF . . . . . . . .  	L WORD	0D8A	CODE
OUT_SEQ_STMT . . . . . . . . . .  	NUMBER	000C	

PALACE . . . . . . . . . . . . .  	NUMBER	0001	
PARSE_COLORPRINT . . . . . . . .  	L NEAR	0000	CODE	External
PARSE_COLORSELECT  . . . . . . .  	L NEAR	0000	CODE	External
PARSE_DARKADJUST . . . . . . . .  	L NEAR	0000	CODE	External
PARSE_DISPLAYMODE  . . . . . . .  	L NEAR	0000	CODE	External
PARSE_ERROR  . . . . . . . . . .  	V BYTE	0000	CODE	External
PARSE_ERR_CLASS  . . . . . . . .  	NUMBER	0002	
PARSE_GRAPHICS . . . . . . . . .  	L NEAR	0000	CODE	External
PARSE_PARMS  . . . . . . . . . .  	L NEAR	0000	CODE	External
PARSE_PRINTBOX . . . . . . . . .  	L NEAR	0000	CODE	External
PARSE_PRINTER  . . . . . . . . .  	L NEAR	0000	CODE	External
PARSE_RESTORE  . . . . . . . . .  	L NEAR	0000	CODE	External
PARSE_SETUP  . . . . . . . . . .  	L NEAR	0000	CODE	External
PARSE_VERB . . . . . . . . . . .  	L NEAR	0000	CODE	External
PC_CONVERTIBLE . . . . . . . . .  	NUMBER	0008	
PREV_STMT  . . . . . . . . . . .  	V WORD	0000	CODE	External
PRINTBOX_ID_LENGTH . . . . . . .  	L BYTE	0BBE	CODE	Global
PRINTBOX_ID_PTR  . . . . . . . .  	L WORD	0B9A	CODE	Global
PRINTER_TYPE_LENGTH  . . . . . .  	L BYTE	0B19	CODE	Global
PRINTER_TYPE_PARM  . . . . . . .  	L BYTE	0B08	CODE	Global
PRINT_BW_APA . . . . . . . . . .  	L NEAR	0000	CODE	External
PRINT_COLOR  . . . . . . . . . .  	L NEAR	0000	CODE	External
PRINT_MODULE_START . . . . . . .  	L NEAR	0000	CODE	External
PRINT_SCREEN_ALLOWED . . . . . .  	V BYTE	0000	CODE	External
PROCESSED  . . . . . . . . . . .  	NUMBER	0002	
PROFILE_NOT_FOUND  . . . . . . .  	NUMBER	0009	
PROFILE_PATH . . . . . . . . . .  	L BYTE	0B1A	CODE	Global	Length = 0080
PRT  . . . . . . . . . . . . . .  	NUMBER	0001	
PRT_BOX_ERROR  . . . . . . . . .  	V BYTE	0000	CODE	External
PRT_BUF  . . . . . . . . . . . .  	V BYTE	0000	CODE	External
PRT_SCR  . . . . . . . . . . . .  	L NEAR	0000	CODE	External
PRT_SCR_2FH_NUMBER . . . . . . .  	NUMBER	0000		Communal
PTD_FOUND  . . . . . . . . . . .  	V BYTE	0000	CODE	External

RC_DUPLICATE_PARMS . . . . . . .  	NUMBER	0064	
RC_EOL . . . . . . . . . . . . .  	NUMBER	-0001	
RC_INVLD_COMBINATION . . . . . .  	NUMBER	0063	
RC_NOT_IN_STR  . . . . . . . . .  	NUMBER	0008	
RC_NOT_IN_SW . . . . . . . . . .  	NUMBER	0003	
RC_NOT_IN_VAL  . . . . . . . . .  	NUMBER	0007	
RC_NO_ERROR  . . . . . . . . . .  	NUMBER	0000	
RC_TOO_MANY  . . . . . . . . . .  	NUMBER	0001	
RELEASE_ENVIRONMENT  . . . . . .  	N PROC	0E43	CODE	Length = 0018
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Symbols-8


RESERVED . . . . . . . . . . . .  	NUMBER	0000	
RESIDENT_CODE_SEG  . . . . . . .  	V WORD	0000	CODE	External
RESIDENT_SHARED_DATA_SIZE  . . .  	L WORD	0BC1	CODE	Global
REST . . . . . . . . . . . . . .  	NUMBER	0020	
REVERSE_SW . . . . . . . . . . .  	NUMBER	0001	
RGB  . . . . . . . . . . . . . .  	V BYTE	0000	CODE	External
RIGHT_ALIGN  . . . . . . . . . .  	NUMBER	0080	
ROTATE . . . . . . . . . . . . .  	NUMBER	0001	
ROTATE_SW  . . . . . . . . . . .  	V BYTE	0000	CODE	External
ROUNDUP  . . . . . . . . . . . .  	NUMBER	0002	

SAVE_AREA_LEN  . . . . . . . . .  	NUMBER	0020	
SCAN_LINE_MAX_LENGTH . . . . . .  	V WORD	0000	CODE	External
SCREEN_HEIGHT  . . . . . . . . .  	V WORD	0000	CODE	External
SCREEN_WIDTH . . . . . . . . . .  	V WORD	0000	CODE	External
SEQUENCE . . . . . . . . . . . .  	NUMBER	0004	
SET  . . . . . . . . . . . . . .  	NUMBER	0010	
SETSTDIO . . . . . . . . . . . .  	NUMBER	0000	
SGN_BIN_BYTE . . . . . . . . . .  	NUMBER	0012	
SGN_BIN_DWORD  . . . . . . . . .  	NUMBER	0032	
SGN_BIN_TYPE . . . . . . . . . .  	NUMBER	0002	
SGN_BIN_WORD . . . . . . . . . .  	NUMBER	0022	
SHARED_DATA_AREA_PTR . . . . . .  	V WORD	0000	CODE	External
STDAUX . . . . . . . . . . . . .  	NUMBER	0003	
STDERR . . . . . . . . . . . . .  	NUMBER	0002		Global
STDIN  . . . . . . . . . . . . .  	NUMBER	0000	
STDOUT . . . . . . . . . . . . .  	NUMBER	0001		Global
STDPRN . . . . . . . . . . . . .  	NUMBER	0004	
STMTS_DONE . . . . . . . . . . .  	V WORD	0000	CODE	External
STMT_BUFFER  . . . . . . . . . .  	V BYTE	0000	CODE	External
STMT_ERROR . . . . . . . . . . .  	V BYTE	0000	CODE	External
SUBLIST_LENGTH . . . . . . . . .  	NUMBER	000B	
SYNTAX_ERRORS  . . . . . . . . .  	NUMBER	000E	
SYSDISPMSG . . . . . . . . . . .  	N PROC	0264	CODE	Global	Length = 0045
SYSLOADMSG . . . . . . . . . . .  	N PROC	0109	CODE	Length = 00A5
SYSPARSE . . . . . . . . . . . .  	L NEAR	0000	CODE	External

TAB  . . . . . . . . . . . . . .  	NUMBER	0009	
TEMP_SHARED_DATA_PTR . . . . . .  	L WORD	0BC5	CODE	Global
TERMINATE_DISPLAYMODE  . . . . .  	L NEAR	0000	CODE	External
TERMINATE_PRINTER  . . . . . . .  	L NEAR	0000	CODE	External
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	
TOO_MANY_PARMS . . . . . . . . .  	NUMBER	0003	
TRUE . . . . . . . . . . . . . .  	NUMBER	FFFF	

UNABLE_RELOAD  . . . . . . . . .  	NUMBER	0012	
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Symbols-9


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	

VALUE_NOT_ALLOWED  . . . . . . .  	NUMBER	0004	

XLT_TAB  . . . . . . . . . . . .  	V BYTE	0000	CODE	External

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

$L1  . . . . . . . . . . . . . .  	L NEAR	0BDA	CODE
$L12 . . . . . . . . . . . . . .  	L NEAR	0C35	CODE
$L18 . . . . . . . . . . . . . .  	L NEAR	0C47	CODE
$L21 . . . . . . . . . . . . . .  	L NEAR	0C4F	CODE
$L24 . . . . . . . . . . . . . .  	L NEAR	0C69	CODE
$L27 . . . . . . . . . . . . . .  	L NEAR	0C76	CODE
$L30 . . . . . . . . . . . . . .  	L NEAR	0CAF	CODE
$L31 . . . . . . . . . . . . . .  	L NEAR	0CAB	CODE
$L33 . . . . . . . . . . . . . .  	L NEAR	0C98	CODE
$L37 . . . . . . . . . . . . . .  	L NEAR	0CD3	CODE
$L38 . . . . . . . . . . . . . .  	L NEAR	0CCD	CODE
$L4  . . . . . . . . . . . . . .  	L NEAR	0C07	CODE
$L41 . . . . . . . . . . . . . .  	L NEAR	0CE7	CODE
$L44 . . . . . . . . . . . . . .  	L NEAR	0D83	CODE
$L47 . . . . . . . . . . . . . .  	L NEAR	0D7D	CODE
$L48 . . . . . . . . . . . . . .  	L NEAR	0D72	CODE
$L5  . . . . . . . . . . . . . .  	L NEAR	0C02	CODE
$L51 . . . . . . . . . . . . . .  	L NEAR	0E13	CODE
$L52 . . . . . . . . . . . . . .  	L NEAR	0DEA	CODE
$L62 . . . . . . . . . . . . . .  	L NEAR	0E0D	CODE
$L65 . . . . . . . . . . . . . .  	L NEAR	0E1D	CODE
$L68 . . . . . . . . . . . . . .  	L NEAR	0E3B	CODE
$L72 . . . . . . . . . . . . . .  	L NEAR	0E35	CODE
$L8  . . . . . . . . . . . . . .  	L NEAR	0C17	CODE
$L9  . . . . . . . . . . . . . .  	L NEAR	0C14	CODE
$LL1 . . . . . . . . . . . . . .  	NUMBER	0001	
$LL12  . . . . . . . . . . . . .  	NUMBER	000C	
$LL18  . . . . . . . . . . . . .  	NUMBER	0012	
$LL21  . . . . . . . . . . . . .  	NUMBER	0015	
$LL24  . . . . . . . . . . . . .  	NUMBER	0018	
$LL27  . . . . . . . . . . . . .  	NUMBER	001B	
$LL30  . . . . . . . . . . . . .  	NUMBER	001E	
$LL33  . . . . . . . . . . . . .  	NUMBER	0021	
$LL37  . . . . . . . . . . . . .  	NUMBER	0025	
$LL4 . . . . . . . . . . . . . .  	NUMBER	0004	
$LL41  . . . . . . . . . . . . .  	NUMBER	0029	
$LL44  . . . . . . . . . . . . .  	NUMBER	002C	
$LL47  . . . . . . . . . . . . .  	NUMBER	002F	
$LL51  . . . . . . . . . . . . .  	NUMBER	0033	
$LL65  . . . . . . . . . . . . .  	NUMBER	0041	
$LL68  . . . . . . . . . . . . .  	NUMBER	0044	
$LL8 . . . . . . . . . . . . . .  	NUMBER	0008	
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Symbols-10


$MDO123  . . . . . . . . . . . .  	L NEAR	0309	CODE
$MDO139  . . . . . . . . . . . .  	L NEAR	0371	CODE
$MDO145  . . . . . . . . . . . .  	L NEAR	0393	CODE
$MDO165  . . . . . . . . . . . .  	L NEAR	03F5	CODE
$MDO167  . . . . . . . . . . . .  	L NEAR	03FF	CODE
$MDO175  . . . . . . . . . . . .  	L NEAR	042B	CODE
$MDO215  . . . . . . . . . . . .  	L NEAR	04F6	CODE
$MDO219  . . . . . . . . . . . .  	L NEAR	051B	CODE
$MDO259  . . . . . . . . . . . .  	L NEAR	0603	CODE
$MDO280  . . . . . . . . . . . .  	L NEAR	0670	CODE
$MDO291  . . . . . . . . . . . .  	L NEAR	069B	CODE
$MDO301  . . . . . . . . . . . .  	L NEAR	06C9	CODE
$MDO310  . . . . . . . . . . . .  	L NEAR	06EF	CODE
$MDO321  . . . . . . . . . . . .  	L NEAR	0731	CODE
$MEN104  . . . . . . . . . . . .  	L NEAR	02A8	CODE
$MEN107  . . . . . . . . . . . .  	L NEAR	02BD	CODE
$MEN110  . . . . . . . . . . . .  	L NEAR	02DE	CODE
$MEN119  . . . . . . . . . . . .  	L NEAR	0316	CODE
$MEN123  . . . . . . . . . . . .  	L NEAR	0316	CODE
$MEN128  . . . . . . . . . . . .  	L NEAR	0345	CODE
$MEN139  . . . . . . . . . . . .  	L NEAR	0388	CODE
$MEN145  . . . . . . . . . . . .  	L NEAR	03EC	CODE
$MEN146  . . . . . . . . . . . .  	L NEAR	03A9	CODE
$MEN150  . . . . . . . . . . . .  	L NEAR	03E7	CODE
$MEN154  . . . . . . . . . . . .  	L NEAR	03E7	CODE
$MEN165  . . . . . . . . . . . .  	L NEAR	04E1	CODE
$MEN167  . . . . . . . . . . . .  	L NEAR	041C	CODE
$MEN175  . . . . . . . . . . . .  	L NEAR	0444	CODE
$MEN180  . . . . . . . . . . . .  	L NEAR	0456	CODE
$MEN187  . . . . . . . . . . . .  	L NEAR	0489	CODE
$MEN188  . . . . . . . . . . . .  	L NEAR	0477	CODE
$MEN192  . . . . . . . . . . . .  	L NEAR	0489	CODE
$MEN199  . . . . . . . . . . . .  	L NEAR	04C8	CODE
$MEN20 . . . . . . . . . . . . .  	L NEAR	01AD	CODE
$MEN200  . . . . . . . . . . . .  	L NEAR	04C0	CODE
$MEN202  . . . . . . . . . . . .  	L NEAR	04C0	CODE
$MEN211  . . . . . . . . . . . .  	L NEAR	04D5	CODE
$MEN219  . . . . . . . . . . . .  	L NEAR	057C	CODE
$MEN220  . . . . . . . . . . . .  	L NEAR	054D	CODE
$MEN222  . . . . . . . . . . . .  	L NEAR	054D	CODE
$MEN224  . . . . . . . . . . . .  	L NEAR	054D	CODE
$MEN229  . . . . . . . . . . . .  	L NEAR	0574	CODE
$MEN230  . . . . . . . . . . . .  	L NEAR	0566	CODE
$MEN240  . . . . . . . . . . . .  	L NEAR	059C	CODE
$MEN243  . . . . . . . . . . . .  	L NEAR	05A9	CODE
$MEN247  . . . . . . . . . . . .  	L NEAR	0600	CODE
$MEN248  . . . . . . . . . . . .  	L NEAR	05E4	CODE
$MEN25 . . . . . . . . . . . . .  	L NEAR	0263	CODE
$MEN252  . . . . . . . . . . . .  	L NEAR	05FC	CODE
$MEN259  . . . . . . . . . . . .  	L NEAR	0620	CODE
$MEN261  . . . . . . . . . . . .  	L NEAR	0614	CODE
$MEN27 . . . . . . . . . . . . .  	L NEAR	0258	CODE
$MEN292  . . . . . . . . . . . .  	L NEAR	06AE	CODE
$MEN307  . . . . . . . . . . . .  	L NEAR	06F7	CODE
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Symbols-11


$MEN314  . . . . . . . . . . . .  	L NEAR	0717	CODE
$MEN317  . . . . . . . . . . . .  	L NEAR	073E	CODE
$MEN321  . . . . . . . . . . . .  	L NEAR	073C	CODE
$MEN325  . . . . . . . . . . . .  	L NEAR	07CB	CODE
$MEN333  . . . . . . . . . . . .  	L NEAR	07CB	CODE
$MEN93 . . . . . . . . . . . . .  	L NEAR	029C	CODE
$MEN94 . . . . . . . . . . . . .  	L NEAR	0288	CODE
$MEN97 . . . . . . . . . . . . .  	L NEAR	0296	CODE
$MIF104  . . . . . . . . . . . .  	L NEAR	02A4	CODE
$MIF107  . . . . . . . . . . . .  	L NEAR	02BA	CODE
$MIF110  . . . . . . . . . . . .  	L NEAR	02CE	CODE
$MIF112  . . . . . . . . . . . .  	L NEAR	02DE	CODE
$MIF113  . . . . . . . . . . . .  	L NEAR	02DE	CODE
$MIF117  . . . . . . . . . . . .  	L NEAR	02E3	CODE
$MIF119  . . . . . . . . . . . .  	L NEAR	0307	CODE
$MIF120  . . . . . . . . . . . .  	L NEAR	0305	CODE
$MIF127  . . . . . . . . . . . .  	L NEAR	0346	CODE
$MIF128  . . . . . . . . . . . .  	L NEAR	0343	CODE
$MIF129  . . . . . . . . . . . .  	L NEAR	0341	CODE
$MIF134  . . . . . . . . . . . .  	L NEAR	0366	CODE
$MIF135  . . . . . . . . . . . .  	L NEAR	0366	CODE
$MIF138  . . . . . . . . . . . .  	L NEAR	0388	CODE
$MIF141  . . . . . . . . . . . .  	L NEAR	0384	CODE
$MIF146  . . . . . . . . . . . .  	L NEAR	03A6	CODE
$MIF150  . . . . . . . . . . . .  	L NEAR	03C5	CODE
$MIF151  . . . . . . . . . . . .  	L NEAR	03C3	CODE
$MIF154  . . . . . . . . . . . .  	L NEAR	03D7	CODE
$MIF155  . . . . . . . . . . . .  	L NEAR	03D5	CODE
$MIF158  . . . . . . . . . . . .  	L NEAR	03E7	CODE
$MIF159  . . . . . . . . . . . .  	L NEAR	03E7	CODE
$MIF166  . . . . . . . . . . . .  	L NEAR	041C	CODE
$MIF169  . . . . . . . . . . . .  	L NEAR	0417	CODE
$MIF173  . . . . . . . . . . . .  	L NEAR	0456	CODE
$MIF174  . . . . . . . . . . . .  	L NEAR	0456	CODE
$MIF175  . . . . . . . . . . . .  	L NEAR	0438	CODE
$MIF180  . . . . . . . . . . . .  	L NEAR	0453	CODE
$MIF187  . . . . . . . . . . . .  	L NEAR	0479	CODE
$MIF188  . . . . . . . . . . . .  	L NEAR	0476	CODE
$MIF192  . . . . . . . . . . . .  	L NEAR	0480	CODE
$MIF194  . . . . . . . . . . . .  	L NEAR	0487	CODE
$MIF199  . . . . . . . . . . . .  	L NEAR	04C5	CODE
$MIF20 . . . . . . . . . . . . .  	L NEAR	01A9	CODE
$MIF200  . . . . . . . . . . . .  	L NEAR	04A6	CODE
$MIF202  . . . . . . . . . . . .  	L NEAR	04C0	CODE
$MIF211  . . . . . . . . . . . .  	L NEAR	04D1	CODE
$MIF216  . . . . . . . . . . . .  	L NEAR	0504	CODE
$MIF220  . . . . . . . . . . . .  	L NEAR	0528	CODE
$MIF222  . . . . . . . . . . . .  	L NEAR	0535	CODE
$MIF224  . . . . . . . . . . . .  	L NEAR	0547	CODE
$MIF229  . . . . . . . . . . . .  	L NEAR	0568	CODE
$MIF23 . . . . . . . . . . . . .  	L NEAR	01C3	CODE
$MIF230  . . . . . . . . . . . .  	L NEAR	055A	CODE
$MIF234  . . . . . . . . . . . .  	L NEAR	0570	CODE
$MIF239  . . . . . . . . . . . .  	L NEAR	05AB	CODE
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Symbols-12


$MIF240  . . . . . . . . . . . .  	L NEAR	059B	CODE
$MIF243  . . . . . . . . . . . .  	L NEAR	05A3	CODE
$MIF247  . . . . . . . . . . . .  	L NEAR	05E6	CODE
$MIF248  . . . . . . . . . . . .  	L NEAR	05E0	CODE
$MIF25 . . . . . . . . . . . . .  	L NEAR	024B	CODE
$MIF252  . . . . . . . . . . . .  	L NEAR	05F3	CODE
$MIF254  . . . . . . . . . . . .  	L NEAR	05FC	CODE
$MIF258  . . . . . . . . . . . .  	L NEAR	062F	CODE
$MIF259  . . . . . . . . . . . .  	L NEAR	0618	CODE
$MIF261  . . . . . . . . . . . .  	L NEAR	0611	CODE
$MIF269  . . . . . . . . . . . .  	L NEAR	062F	CODE
$MIF27 . . . . . . . . . . . . .  	L NEAR	0255	CODE
$MIF270  . . . . . . . . . . . .  	L NEAR	062B	CODE
$MIF274  . . . . . . . . . . . .  	L NEAR	0637	CODE
$MIF276  . . . . . . . . . . . .  	L NEAR	0656	CODE
$MIF278  . . . . . . . . . . . .  	L NEAR	0684	CODE
$MIF279  . . . . . . . . . . . .  	L NEAR	0684	CODE
$MIF281  . . . . . . . . . . . .  	L NEAR	0680	CODE
$MIF286  . . . . . . . . . . . .  	L NEAR	0697	CODE
$MIF287  . . . . . . . . . . . .  	L NEAR	0697	CODE
$MIF290  . . . . . . . . . . . .  	L NEAR	06BF	CODE
$MIF292  . . . . . . . . . . . .  	L NEAR	06AD	CODE
$MIF295  . . . . . . . . . . . .  	L NEAR	06BB	CODE
$MIF299  . . . . . . . . . . . .  	L NEAR	06DD	CODE
$MIF300  . . . . . . . . . . . .  	L NEAR	06DD	CODE
$MIF302  . . . . . . . . . . . .  	L NEAR	06D9	CODE
$MIF307  . . . . . . . . . . . .  	L NEAR	06EB	CODE
$MIF309  . . . . . . . . . . . .  	L NEAR	06F7	CODE
$MIF314  . . . . . . . . . . . .  	L NEAR	0713	CODE
$MIF317  . . . . . . . . . . . .  	L NEAR	0731	CODE
$MIF318  . . . . . . . . . . . .  	L NEAR	072F	CODE
$MIF325  . . . . . . . . . . . .  	L NEAR	0777	CODE
$MIF326  . . . . . . . . . . . .  	L NEAR	0769	CODE
$MIF327  . . . . . . . . . . . .  	L NEAR	0763	CODE
$MIF330  . . . . . . . . . . . .  	L NEAR	0775	CODE
$MIF333  . . . . . . . . . . . .  	L NEAR	07A3	CODE
$MIF334  . . . . . . . . . . . .  	L NEAR	0795	CODE
$MIF335  . . . . . . . . . . . .  	L NEAR	078F	CODE
$MIF338  . . . . . . . . . . . .  	L NEAR	07A1	CODE
$MIF341  . . . . . . . . . . . .  	L NEAR	07BF	CODE
$MIF342  . . . . . . . . . . . .  	L NEAR	07B9	CODE
$MIF345  . . . . . . . . . . . .  	L NEAR	07CB	CODE
$MIF349  . . . . . . . . . . . .  	L NEAR	07D7	CODE
$MIF93 . . . . . . . . . . . . .  	L NEAR	0298	CODE
$MIF94 . . . . . . . . . . . . .  	L NEAR	0285	CODE
$MIF97 . . . . . . . . . . . . .  	L NEAR	0292	CODE
$MLL149  . . . . . . . . . . . .  	L NEAR	03B3	CODE
$MLL168  . . . . . . . . . . . .  	L NEAR	040E	CODE
$MLL178  . . . . . . . . . . . .  	L NEAR	0440	CODE
$MLL202  . . . . . . . . . . . .  	L NEAR	04B8	CODE
$MLL214  . . . . . . . . . . . .  	L NEAR	04E1	CODE
$MSR175  . . . . . . . . . . . .  	L NEAR	0456	CODE
$MSR259  . . . . . . . . . . . .  	L NEAR	0621	CODE
$MXL3  . . . . . . . . . . . . .  	L NEAR	0463	CODE
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Symbols-13


$MXL4  . . . . . . . . . . . . .  	L NEAR	04E1	CODE
$MXL5  . . . . . . . . . . . . .  	L NEAR	057C	CODE
$M_1_FF_END  . . . . . . . . . .  	L BYTE	07F3	CODE
$M_1_FF_MSG  . . . . . . . . . .  	L BYTE	07E1	CODE
$M_1_FF_STRUC  . . . . . . . . .  	L BYTE	07DD	CODE
$M_2_FF_END  . . . . . . . . . .  	L BYTE	0814	CODE
$M_2_FF_MSG  . . . . . . . . . .  	L BYTE	0805	CODE
$M_2_FF_STRUC  . . . . . . . . .  	L BYTE	0801	CODE
$M_ADDR_SZ_FAR . . . . . . . . .  	NUMBER	0004	
$M_ADDR_SZ_NEAR  . . . . . . . .  	NUMBER	0002	
$M_ADD_CRLF  . . . . . . . . . .  	N PROC	0350	CODE	Length = 0017
$M_ALIGN_MASK  . . . . . . . . .  	NUMBER	0080	
$M_AM  . . . . . . . . . . . . .  	NUMBER	0061	
$M_A_00001H_END  . . . . . . . .  	L BYTE	0842	CODE
$M_A_00001H_MSG  . . . . . . . .  	L BYTE	082A	CODE
$M_A_00001H_STRUC  . . . . . . .  	L BYTE	0822	CODE
$M_A_00002H_END  . . . . . . . .  	L BYTE	0858	CODE
$M_A_00002H_MSG  . . . . . . . .  	L BYTE	0842	CODE
$M_A_00002H_STRUC  . . . . . . .  	L BYTE	0826	CODE
$M_BASE10  . . . . . . . . . . .  	NUMBER	000A	
$M_BASE16  . . . . . . . . . . .  	NUMBER	0010	
$M_BIN2ASC_REPLACE . . . . . . .  	N PROC	0740	CODE	Length = 0099
$M_BYTE  . . . . . . . . . . . .  	NUMBER	0010	
$M_B_00009H_END  . . . . . . . .  	L BYTE	08A5	CODE
$M_B_00009H_MSG  . . . . . . . .  	L BYTE	0886	CODE
$M_B_00009H_STRUC  . . . . . . .  	L BYTE	0866	CODE
$M_B_0000AH_END  . . . . . . . .  	L BYTE	08D9	CODE
$M_B_0000AH_MSG  . . . . . . . .  	L BYTE	08A5	CODE
$M_B_0000AH_STRUC  . . . . . . .  	L BYTE	086A	CODE
$M_B_0000BH_END  . . . . . . . .  	L BYTE	0900	CODE
$M_B_0000BH_MSG  . . . . . . . .  	L BYTE	08D9	CODE
$M_B_0000BH_STRUC  . . . . . . .  	L BYTE	086E	CODE
$M_B_0000CH_END  . . . . . . . .  	L BYTE	092F	CODE
$M_B_0000CH_MSG  . . . . . . . .  	L BYTE	0900	CODE
$M_B_0000CH_STRUC  . . . . . . .  	L BYTE	0872	CODE
$M_B_0000DH_END  . . . . . . . .  	L BYTE	0950	CODE
$M_B_0000DH_MSG  . . . . . . . .  	L BYTE	092F	CODE
$M_B_0000DH_STRUC  . . . . . . .  	L BYTE	0876	CODE
$M_B_0000EH_END  . . . . . . . .  	L BYTE	0974	CODE
$M_B_0000EH_MSG  . . . . . . . .  	L BYTE	0950	CODE
$M_B_0000EH_STRUC  . . . . . . .  	L BYTE	087A	CODE
$M_B_0000FH_END  . . . . . . . .  	L BYTE	099A	CODE
$M_B_0000FH_MSG  . . . . . . . .  	L BYTE	0974	CODE
$M_B_0000FH_STRUC  . . . . . . .  	L BYTE	087E	CODE
$M_B_00010H_END  . . . . . . . .  	L BYTE	09C1	CODE
$M_B_00010H_MSG  . . . . . . . .  	L BYTE	099A	CODE
$M_B_00010H_STRUC  . . . . . . .  	L BYTE	0882	CODE
$M_CHAR_ONLY . . . . . . . . . .  	NUMBER	0000	
$M_CHAR_REPLACE  . . . . . . . .  	N PROC	0718	CODE	Length = 0028
$M_CHECKSTDIN  . . . . . . . . .  	N PROC	01C6	CODE	Length = 0013
$M_CHECKSTDOUT . . . . . . . . .  	N PROC	01D9	CODE	Length = 0013
$M_CLASS_1_STRUC . . . . . . . .  	L BYTE	07D9	CODE
$M_CLASS_2_STRUC . . . . . . . .  	L BYTE	07FD	CODE
$M_CLASS_A_STRUC . . . . . . . .  	L BYTE	081E	CODE
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Symbols-14


$M_CLASS_B_STRUC . . . . . . . .  	L BYTE	0862	CODE
$M_CLASS_C_STRUC . . . . . . . .  	L BYTE	09CC	CODE
$M_CLASS_ID_SZ . . . . . . . . .  	NUMBER	0004	
$M_CLASS_NOT_EXIST . . . . . . .  	NUMBER	0000	
$M_CLS_1 . . . . . . . . . . . .  	N PROC	0858	CODE	Global	Length = 000A
$M_CLS_2 . . . . . . . . . . . .  	N PROC	09C1	CODE	Global	Length = 000B
$M_CLS_3 . . . . . . . . . . . .  	N PROC	0AFC	CODE	Global	Length = 000B
$M_COMMA . . . . . . . . . . . .  	NUMBER	002C	
$M_CONVERT2ASC . . . . . . . . .  	N PROC	038B	CODE	Length = 006A
$M_CON_INP . . . . . . . . . . .  	NUMBER	-0001	
$M_COUNT . . . . . . . . . . . .  	NUMBER	0003	
$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_C_00003H_END  . . . . . . . .  	L BYTE	0A06	CODE
$M_C_00003H_MSG  . . . . . . . .  	L BYTE	09F0	CODE
$M_C_00003H_STRUC  . . . . . . .  	L BYTE	09D0	CODE
$M_C_00004H_END  . . . . . . . .  	L BYTE	0A2D	CODE
$M_C_00004H_MSG  . . . . . . . .  	L BYTE	0A06	CODE
$M_C_00004H_STRUC  . . . . . . .  	L BYTE	09D4	CODE
$M_C_00005H_END  . . . . . . . .  	L BYTE	0A46	CODE
$M_C_00005H_MSG  . . . . . . . .  	L BYTE	0A2D	CODE
$M_C_00005H_STRUC  . . . . . . .  	L BYTE	09D8	CODE
$M_C_00006H_END  . . . . . . . .  	L BYTE	0A66	CODE
$M_C_00006H_MSG  . . . . . . . .  	L BYTE	0A46	CODE
$M_C_00006H_STRUC  . . . . . . .  	L BYTE	09DC	CODE
$M_C_00007H_END  . . . . . . . .  	L BYTE	0A89	CODE
$M_C_00007H_MSG  . . . . . . . .  	L BYTE	0A66	CODE
$M_C_00007H_STRUC  . . . . . . .  	L BYTE	09E0	CODE
$M_C_00008H_END  . . . . . . . .  	L BYTE	0AA7	CODE
$M_C_00008H_MSG  . . . . . . . .  	L BYTE	0A89	CODE
$M_C_00008H_STRUC  . . . . . . .  	L BYTE	09E4	CODE
$M_C_00011H_END  . . . . . . . .  	L BYTE	0AD3	CODE
$M_C_00011H_MSG  . . . . . . . .  	L BYTE	0AA7	CODE
$M_C_00011H_STRUC  . . . . . . .  	L BYTE	09E8	CODE
$M_C_00012H_END  . . . . . . . .  	L BYTE	0AFC	CODE
$M_C_00012H_MSG  . . . . . . . .  	L BYTE	0AD3	CODE
$M_C_00012H_STRUC  . . . . . . .  	L BYTE	09EC	CODE
$M_DATE_MASK . . . . . . . . . .  	NUMBER	0010	
$M_DBCS_TERM . . . . . . . . . .  	NUMBER	0000	
$M_DCOUNT  . . . . . . . . . . .  	NUMBER	0003	
$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	02E4	CODE	Length = 0035
$M_DISPLAY_H_STRING  . . . . . .  	N PROC	0319	CODE	Length = 002E
$M_DISPLAY_MESSAGE . . . . . . .  	N PROC	03F5	CODE	Length = 00F3
$M_DISPLAY_REPLACE . . . . . . .  	N PROC	063D	CODE	Length = 00BF
$M_DISPLAY_STRING  . . . . . . .  	N PROC	02A9	CODE	Length = 003B
$M_DWORD . . . . . . . . . . . .  	NUMBER	0030	
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Symbols-15


$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	04E8	CODE	Length = 002D
$M_FIND_SPECIFIED_MSG  . . . . .  	N PROC	05C4	CODE	Length = 0079
$M_FIRST_THOU  . . . . . . . . .  	NUMBER	0003	
$M_FLUSH_BUF . . . . . . . . . .  	N PROC	06FC	CODE	Length = 001C
$M_GET_DBCS_VEC  . . . . . . . .  	N PROC	01AE	CODE	Length = 0018
$M_GET_EXT_ERR_39  . . . . . . .  	N PROC	0347	CODE	Length = 0009
$M_GET_MSG_ADDRESS . . . . . . .  	N PROC	0515	CODE	Global	Length = 00A0
$M_ID_SZ . . . . . . . . . . . .  	NUMBER	0004	
$M_INCLUDE . . . . . . . . . . .  	NUMBER	FFFF	
$M_INDEX . . . . . . . . . . . .  	NUMBER	000C	
$M_IS_IT_DBCS  . . . . . . . . .  	N PROC	0367	CODE	Length = 0024
$M_LOAD  . . . . . . . . . . . .  	NUMBER	FFFF	
$M_MAX_2_YEAR  . . . . . . . . .  	NUMBER	0063	
$M_MSGDATA_ONLY  . . . . . . . .  	NUMBER	0000	
$M_MSGSERV_1 . . . . . . . . . .  	N PROC	07F3	CODE	Global	Length = 000A
$M_MSGSERV_2 . . . . . . . . . .  	N PROC	0814	CODE	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	0003	
$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	008D	
$M_RT  . . . . . . . . . . . . .  	L BYTE	0000	CODE	Global
$M_SECOND_THOU . . . . . . . . .  	NUMBER	0006	
$M_SERVICE . . . . . . . . . . .  	NUMBER	0000	
$M_SET_LEN_IN_CX . . . . . . . .  	N PROC	05B5	CODE	Length = 000F
$M_SINGLE_CHAR . . . . . . . . .  	NUMBER	0001	
$M_SIZE_MASK . . . . . . . . . .  	NUMBER	0030	
$M_SL  . . . . . . . . . . . . .  	TEXT  DS:[SI]		
$M_SPACE . . . . . . . . . . . .  	NUMBER	0020	
$M_SPACE_HYP . . . . . . . . . .  	NUMBER	2D20	
$M_SPECIAL_CASE  . . . . . . . .  	NUMBER	0030	
$M_SPECIAL_MSG_NUM . . . . . . .  	NUMBER	FFFF	
$M_STRUC . . . . . . . . . . . .  	NUMBER	0000	
$M_SUBS  . . . . . . . . . . . .  	NUMBER	0000	
$M_TEMP_BUF_SZ . . . . . . . . .  	NUMBER	0040	
$M_TERMINATING_FLAG  . . . . . .  	NUMBER	-0001	
$M_THIRD_THOU  . . . . . . . . .  	NUMBER	0009	
$M_TIMEDATE_PAD  . . . . . . . .  	NUMBER	0030	
$M_TIME_MASK . . . . . . . . . .  	NUMBER	0001	
$M_TYPE_MASK . . . . . . . . . .  	NUMBER	000F	
$M_UNLIM_W . . . . . . . . . . .  	NUMBER	0000	
$M_VERSION_CHECK . . . . . . . .  	N PROC	0235	CODE	Length = 002F
Microsoft (R) Macro Assembler Version 5.10                  8/26/25 23:16:26
DOS - GRAPHICS Command  -	Installation Modules		;AN000;     Symbols-16


$M_WORD  . . . . . . . . . . . .  	NUMBER	0020	
??0000 . . . . . . . . . . . . .  	L NEAR	05AD	CODE
@CPU . . . . . . . . . . . . . .  	TEXT  0101h		
@FILENAME  . . . . . . . . . . .  	TEXT  grinst		
@VERSION . . . . . . . . . . . .  	TEXT  510		


  12811 Source  Lines
  25922 Total   Lines
    932 Symbols

  42466 + 117246 Bytes symbol space free

      0 Warning Errors
      0 Severe  Errors
