Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:43:57
PARSE CODE AND CONTROL BLOCKS FOR DISPLAY.SYS               Page     1-1


				PAGE	    ,132
				TITLE	    PARSE CODE AND CONTROL BLOCKS FOR DISPLAY.SYS
				
				;****************** START OF SPECIFICATIONS **************************
				;
				;  MODULE NAME: PARSER.ASM
				;
				;  DESCRIPTIVE NAME: PARSES THE DEVICE= STATEMENT IN CONFIG.SYS FOR
				;		     DISPLAY.SYS
				;
				;  FUNCTION: THE COMMAND LINE PASSED TO DISPLAY.SYS IN THE CONFIG.SYS
				;	     STATEMENT IS PARSED TO CHECK FOR CORRECT SYNTAX. A TABLE
				;	     IS SETUP CONTAINING THE VALUES FOUND.
				;
				;  ENTRY POINT: PARSER
				;
				;  INPUT: ES:DI POINTS TO REQUEST HEADER
				;
				;  AT EXIT:
				;     NORMAL: TABLE SET UP WITH VALUES FOUND.
				;
				;     ERROR: 0 RETURNED IN FIRST WORD OF TABLE.
				;
				;  INTERNAL REFERENCES:
				;
				;     ROUTINES: SYSPARSE - PARSING CODE
				;
				;     DATA AREAS: PARMSx - PARSE CONTROL BLOCK FOR SYSPARSE
				;		  TABLE - TO CONTAIN VALUES FOUND IN DEVICE= LINE
				;
				;  EXTERNAL REFERENCES:
				;
				;     ROUTINES: N/A
				;
				;     DATA AREAS: N/A
				;
				;  NOTES:
				;
				;  REVISION HISTORY:
				;	AN000; - DOS Version 4.00
				;	AN001 - GHG P897 - Changes to the parser forced the inclusion
				;			   of the '=' in the device ID.
				;
				;      Label: "The DOS DISPLAY.SYS Device Driver"
				;	      "Version 4.00 (C) Copyright 1988 Microsoft
				;	      "Licensed Material - Program Property of Microsoft"
				;
				;****************** END OF SPECIFICATIONS ****************************
				;Modification history *********************************************************
				;AN002; P1895 DISPLAY.SYS rejects command CON=(cga,(437),(0,0))   10/22/87 J.K.
				;******************************************************************************
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; The following is the table structure of the parser.	All fields are
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:43:57
PARSE CODE AND CONTROL BLOCKS FOR DISPLAY.SYS               Page     1-2


				; two bytes field (accept for the device and id name)
				;
				; TABLE HEADER :
				; ÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
				;    ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
				;    ³ N = Number of devices.	  ³
				;    ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
				;    ³	 Device  # 1  offset	 ÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄ>ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
				;    ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´		  ³			     ³
				;    ³	 Device  # 2  offset	  ³		  ³	 Table_1  (a)	     ³
				;    ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´		  ³			     ³
				;    ³	 Device  # 3  offset	  ³		  ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
				;    ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
				;    ³	 Device  # 4  offset	  ³
				;    ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
				;
				;
				; N = 1,2,3 or 4.  A two bytes number indicating the number of device specified.
				; DEVICE # N OFFSET : a two bytes offset address to table_1. (ie. Device #1 offset
				; is a pointer to table_1 (a). Device #2 offset is a pointer to table_1
				; (b)...etc.).	 If an error was detected in the command N is set to zero.
				;
				;
				;
				; TABLE_1 :
				; ÍÍÍÍÍÍÍÍÍ
				;
				;    ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿	      ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
				;    ³ N = Number of Offsets.	  ³	      ³ 			 ³
				;    ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´    ÚÄÄÄÄÄÄ³      Table_2  (a)	 ³
				;    ³	 Device Name  offset	 ÄÅÄÄÄÄÙ      ³ 			 ³
				;    ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´	      ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
				;    ³	 Device  Id   offset	 ÄÅÄÄÄÄÄÄ¿
				;    ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´	 ³    ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
				;    ³	 Device  HWCP offset	 ÄÅÄÄÄÄ¿ ³    ³ 			 ³
				;    ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´    ³ ÀÄÄÄÄ³      Table_3  (a)	 ³
				;    ³	 Device  Desg offset	 ÄÅÄÄ¿ ³      ³ 			 ³
				;    ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´  ³ ³      ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
				;    ³	    "Reserved"            ³  ³ ³
				;    ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ  ³ ³      ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
				;				     ³ ³      ³ 			 ³
				;				     ³ ÀÄÄÄÄÄÄ³      Table_4  (a)	 ³
				;				     ³	      ³ 			 ³
				;				     ³	      ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
				;				     ³	      ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
				;				     ³	      ³ 			 ³
				;				     ÀÄÄÄÄÄÄÄÄ³      Table_5  (a)	 ³
				;					      ³ 			 ³
				;					      ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
				;
				;
				;  N=Length of table_1, or the number of offsets contained in table_1.
				;  The offsets are pointers (two bytes) to the parameters value of the device.
				;  "Reserved" : a two byte memory reserved for future use of the "PARMS" option.
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:43:57
PARSE CODE AND CONTROL BLOCKS FOR DISPLAY.SYS               Page     1-3


				;
				;
				; TABLE_2 :
				; ÍÍÍÍÍÍÍÍÍ
				;
				;    ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
				;    ³ N = Length of devices name ³
				;    ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
				;    ³	  Device   name 	  ³
				;    ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
				;
				; N = Length of device name.  Device length is always 8 byte long.
				; Device Name : the name of the device (eg. LPT1, CON, PRN).  The name
				; is paded with spaces to make up the rest of the 8 characters.
				;
				;
				;
				; TABLE_3 :
				; ÍÍÍÍÍÍÍÍÍ
				;
				;    ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
				;    ³ N = Length of Id name.	  ³
				;    ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
				;    ³	   Id	Name		  ³
				;    ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
				;
				; N = Length of id name.  Id name length is always 8 byte long.
				; Id Name : the name of the id (eg. EGA, VGA).	The name
				; is paded with spaces to make up the rest of the 8 character.
				;
				;
				;
				; TABLE_4 :
				; ÍÍÍÍÍÍÍÍÍ
				;
				;    ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
				;    ³ N = Length of table.	  ³
				;    ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
				;    ³	  HWCP	#  1		  ³
				;    ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
				;    ³	  HWCP	#  2		  ³
				;    ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
				;    ³		.		  ³
				;    ³		.		  ³
				;    ³		.		  ³
				;    ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
				;    ³	  HWCP	#  10		  ³
				;    ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
				;
				;
				; N = Length of table in words. Or the number of HWCP's.
				; HWCP # N : a hardware code page number converted to binary.  The maximum
				; number of pages allowed is 10.
				;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:43:57
PARSE CODE AND CONTROL BLOCKS FOR DISPLAY.SYS               Page     1-4


				;
				;
				; TABLE_5 :
				; ÍÍÍÍÍÍÍÍÍ
				;
				;    ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
				;    ³ N = Length of table.	  ³
				;    ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
				;    ³	  Designate		  ³
				;    ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
				;    ³	  Font			  ³
				;    ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
				;
				; N = Lenght of table.	0 - nothing was specified
				;			1 - Only a designate was specified.
				;			2 - Designate and font were given.  If the Desg field
				;			    was left empty in the DEVICE command then the
				;			    Designate field is filled with 0FFFFH.
				; Designate, Font : Are the Desg. and Font binary numbers.
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				
				INCLUDE     DEF-EQU.INC      ; structures and equates					 ;AN000;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	; *** DEF-EQU *** DEF-EQU *** DEF-EQU ***
			     C	;
			     C	;       EQU's, STRUC's, and OTHER
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;Modification history *********************************************************
			     C	;AN001; D358  New device driver INIT function package             12/07/87 J.K.
			     C	;AN002; D493  Undo D358                                           02/24/88 J.K.
			     C	;AN003; D4934 Change ANSI 2F function number to 1Ah               05/20/88 F.G.
			     C	;******************************************************************************
 = 0000                      C	ZERO    EQU     0H                      ;
 = 0001                      C	ONE     EQU     1H                      ;
 = 0002                      C	TWO     EQU     2H                      ;
 = 0003                      C	THREE   EQU     3H                      ;
 = 0004                      C	FOUR    EQU     4H                      ;
 = 0005                      C	FIVE    EQU     5H                      ;
 = 0006                      C	SIX     EQU     6H                      ;
 = 0007                      C	SEVEN   EQU     7H                      ;
 = 0008                      C	EIGHT   EQU     8H                      ;
 = 0009                      C	NINE    EQU     9H                      ;
 = 000A                      C	TEN     EQU    0AH                      ;
 = 000B                      C	ELEVEN  EQU    0BH                      ;
 = 000C                      C	TWELVE  EQU    0CH                      ;
			     C	                                        ;
 = 8000                      C	FAIL    EQU     8000H                   ; fail in designate
			     C	                                        ;
 = FFFE                      C	NOT_CY  EQU     0FFFEH                  ;
 =                           C	CY      EQU     ONE                     ;
			     C	                                        ;
 = 0005                      C	ID_IOCTL       EQU     5                ; MAJOR FNCT # FOR 'other' DEVICE
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:43:57
PARSE CODE AND CONTROL BLOCKS FOR DISPLAY.SYS               Page     1-5


			     C	                                        ;
 = ES:[DI]                   C	RH      EQU     ES:[DI]                 ; addressability to Request Header
			     C	                                        ;
			     C	RHC      STRUC                          ; fields common to all request types
 0000  00                    C	         DB      ?                      ; length of Request Header
 0001  00                    C	         DB      ?                      ; unit code (subunit)
 0002  00                    C	RHC_CMD  DB      ?                      ; command code
 0003  0000                  C	RHC_STA  DW      ?                      ; status
 0005  0000000000000000      C	         DQ      ?                      ; reserved for DOS
 000D                        C	RHC      ENDS                           ; end of common portion
			     C	                                        ;
 = 0004                      C	CMD_INPUT EQU   4                       ; RHC_CMD is INPUT request
			     C	                                        ;
			     C	                                        ; Status values for RHC_STA
 = 0001                      C	STAT_DONE EQU   0001H                   ; function complete - high order byte
 = 8000                      C	STAT_CMDERR EQU 8000H                   ; Error code
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	;      DEVICE  Header     DS:[SI]      -- to locate the next CON header
			     C	;      NEXT device header ES:[DI]
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 = DS:[SI]                   C	HP      EQU     DS:[SI]                 ;
 = ES:[DI]                   C	NHD     EQU     ES:[DI]                 ;
			     C	                                        ;
 = 0008                      C	NAME_LEN EQU    8                       ;
			     C	                                        ;
			     C	DHS     STRUC                           ;
 0000  0000                  C	DH_NEXTO DW     ?                       ; offset of pointer to next header
 0002  0000                  C	DH_NEXTS DW     ?                       ; segment of pointer to next header
 0004  0000                  C	        DW      ?                       ; attribute
 0006  0000                  C	DH_STRAO DW     ?                       ; offset to strategy routine
 0008  0000                  C	DH_INTRO DW     ?                       ; offset to interrupt routine
 000A  0008[                 C	DH_NAME DB      NAME_LEN DUP(0)         ; device name in this header
	   00                C	
			 ]   C	
			     C	
 0012                        C	DHS     ENDS                            ; end of common portion
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	;      Request Header for INIT
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	RH0     STRUC                           ;
 0000  000D[                 C	        DB      (TYPE RHC) DUP (?)      ;
	   ??                C	
			 ]   C	
			     C	
			     C	                                        ;
 000D  00                    C	RH0_UNIT DB     ?                       ; not used for CHAR devices
 000E  0000                  C	RH0_ENDO DW     ?                       ; offset  of ending address
 0010  0000                  C	RH0_ENDS DW     ?                       ; segment of ending address
 0012  00000000              C	RH0_BPBA DD     ?                       ; POINTER TO BPB FOR CHAR DEVICES
 0016  00                    C	         db     ?                       ;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:43:57
PARSE CODE AND CONTROL BLOCKS FOR DISPLAY.SYS               Page     1-6


 0017                        C	RH0     ENDS                            ;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	;      Request Header for IOCTL
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	RH3     STRUC                           ;
 0000  000D[                 C	        DB      (TYPE RHC) DUP (?)      ; common portion
	   ??                C	
			 ]   C	
			     C	
			     C	                                        ;
			     C	                                        ;
 000D  00                    C	        DB      ?                       ; media descriptor
 000E  0000                  C	RH3_DTAO DW     ?                       ; offset  of transfer address
 0010  0000                  C	RH3_DTAS DW     ?                       ; segment of transfer address
 0012  0000                  C	RH3_CNT DW      ?                       ; byte count
 0014                        C	RH3     ENDS                            ;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	;       IOCTL header format
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	RH_IOCTL STRUC                          ;
 0000  000D[                 C	STATIC_RH       DB 13 DUP(?)            ; STANDARD STATIC REQUEST HEADER
	   ??                C	
			 ]   C	
			     C	
 000D  00                    C	MAJOR_F         DB      ?               ; MAJOR FUNCTION CALL (SEE DOS 3.30)
 000E  00                    C	MINOR_F         DB      ?               ; MINOR FUNCTION CALL (SEE DOS 3.30)
 000F  0000                  C	CONTENT_SI      DW      ?               ; CONTENTS OF SI
 0011  0000                  C	CONTENT_DI      DW      ?               ; CONTENTS OF DI
 0013  00000000              C	REQUEST_PACKET  DD      ?               ; POINTER TO GENERIC IOCTL REQ. PACKET
 0017                        C	RH_IOCTL ENDS                           ;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	;       DESIGNATE BUFFER FORMAT
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	DESG_BUFFER     STRUC                   ;
 0000  0000                  C	DESG_CARTRIDGE  DW      ?               ; 0=NO CARTRIDGE, 1=CARTRIDGE
 0002  0000                  C	DESG_LENGTH     DW      ?               ; LENGTH OF REMAINING HEADER
 0004  0000                  C	DESG_N          DW      ?               ; NUMBER OF CP's DESIGNATED
 0006  0000                  C	DESG_CP         DW      ?               ; FIRST CP DESIGNATED
 0008                        C	DESG_BUFFER     ENDS                    ;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	;       INVOKE BUFFER FORMAT
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	INVK_BUFFER     STRUC                   ;
 0000  0000                  C	INVK_LENGTH     DW      ?               ; LENGTH OF REMAINING HEADER
 0002  0000                  C	INVK_CP         DW      ?               ; CP TO INVOKE
 0004                        C	INVK_BUFFER     ENDS                    ;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:43:57
PARSE CODE AND CONTROL BLOCKS FOR DISPLAY.SYS               Page     1-7


			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	;       QUERY LIST BUFFER FORMAT
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	QLST_BUFFER     STRUC                   ;
 0000  0000                  C	QLST_LENGTH     DW      ?               ; LENGTH OF REMAINING HEADER
 0002  0000                  C	QLST_N_HDWR     DW      ?               ; NUMBER OF HARDWARE CP's
 0004  0000                  C	QLST_HDWR_CP    DW      ?               ; FIRST HDWR CODE PAGE
 0006  0000                  C	QLST_N_DESG     DW      ?               ; NUMBER OF DESIGNATED CP's
 0008  0000                  C	QLST_DESG_CP    DW      ?               ; DESINATED CODE PAGES
			     C	                                        ; ...there is more data to be
			     C	                                        ;    filled in by the DRIVER
 000A                        C	QLST_BUFFER     ENDS                    ;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	;       PARSER STRUC STATEMENTS
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	PARSE_TABLE1    STRUC                   ; [[[ TABLE 1 ]]]
 0000  0000                  C	NUM_DEVICES     DW      ?               ; NUMBER OF DEVICES TO SUPPORT
 0002  0000                  C	DEVICE1_OFFSET  DW      ?               ; (hopefully) CON!!!
 0004                        C	PARSE_TABLE1    ENDS                    ;
			     C	                                        ;
			     C	PARSE_TABLE2    STRUC                   ; [[[ TABLE 2 ]]]
 0000  0000                  C	NUM_ITEMS       DW      ?               ; NUMBER OF ITEMS CREATED BY THE
 0002  0000                  C	OFFSET_LIST     DW      ?               ; THE 1ST OFFSET OF [ TABLE 2 ]
 0004                        C	PARSE_TABLE2    ENDS                    ; PARSER!
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	;       CODE PAGE POINTER STRUCTURE
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	CP_PNTER_STRUC  STRUC                   ;
 0000  0000                  C	HDWR_CP_STRUC   DW      ?               ;
 0002  0000                  C	DESG_CP_STRUC   DW      ?               ;
 0004  0000                  C	FONT_CP_STRUC   DW      ?               ;
 0006  0000                  C	WRITE_DATA_STRUC DW     ?               ;
 0008  0000                  C	FONT_DATA_STRUC DW      ?               ;
 000A                        C	CP_PNTER_STRUC  ENDS                    ;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; CON data structure  CS:[BX]
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 = CS:[BX]                   C	BUF     EQU     CS:[BX]                 ;
			     C	                                        ; STATES
			     C	BUF_DATA STRUC                          ;
 0000  FFFF                  C	DEV_HDRO DW     -1                      ; device driver header offset
 0002  FFFF                  C	DEV_HDRS DW     -1                      ;
 0004  FFFF                  C	CON_STRAO DW    -1                      ; dos CON strategy offset
 0006  FFFF                  C	CON_STRAS DW    -1                      ;
 0008  FFFF                  C	CON_INTRO DW    -1                      ; dos CON strategy offset
 000A  FFFF                  C	CON_INTRS DW    -1                      ;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:43:57
PARSE CODE AND CONTROL BLOCKS FOR DISPLAY.SYS               Page     1-8


 000C  FFFF                  C	RH_PTRO DW      -1                      ; request header offset
 000E  FFFF                  C	RH_PTRS DW      -1                      ; segment
 0010  0000                  C	STATE   DW       ?                      ;
 0012  0000                  C	STATUS  DW       ?                      ;
 0014                        C	BUF_DATA ENDS                           ;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	;       General  Constants
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 = 00BC                      C	INT_2F_LOW EQU  (4*2FH)                 ; INTERRUPT 2FH CON/KEYB COMMUNICATION
 = 00BE                      C	INT_2F_HI EQU    (4*2FH)+2              ;
 = 010C                      C	INT_43_LOW EQU  (4*43H)                 ; INTERRUPT 43H 0-255 CHARACTER VECTOR
 = 010E                      C	INT_43_HI EQU    (4*43H)+2              ;
 = 0110                      C	INT_44_LOW EQU  (4*44H)                 ; INTERRUPT 44H 0-255 CHARACTER VECTOR
 = 0112                      C	INT_44_HI EQU    (4*44H)+2              ;
 = 007C                      C	INT_1F_LOW EQU  (4*1FH)                 ; INTERRUPT 1FH EXTENDED CHARACTER SUPPORT
 = 007E                      C	INT_1F_HI EQU    (4*1FH)+2              ;
 = 0040                      C	INT_10_LOW EQU  (4*10H)                 ; INTERRUPT 10H fix FOR PALACE
 = 0042                      C	INT_10_HI EQU    (4*10H)+2              ;
 = 000F                      C	GET_MODE      EQU    0FH                ; WGR                                  ;AN000;
 = 0001                      C	ON            EQU    1                  ; WGR                                  ;AN000;
 = 0000                      C	OFF           EQU    0                  ; WGR                                  ;AN000;
 = 0010                      C	RECALC_ON     EQU    0010H              ; WGR                                  ;AN000;
 = 0487                      C	VIDEO_CTRL    EQU    487H               ; WGR                                  ;AN000;
 = 000E                      C	ANSI_BUF_SIZE EQU    14                 ; WGR                                  ;AN000;
 = 0019                      C	DEFAULT_LEN   EQU    25                 ; WGR                                  ;AN000;
 = 0001                      C	NUMBER        EQU    1                  ; WGR                                  ;AN000;
 = 0003                      C	STRING        EQU    3                  ; WGR                                  ;AN000;
 = 0004                      C	COMPLEX       EQU    4                  ; WGR                                  ;AN000;
 =-0001                      C	RC_EOL        EQU    -1                 ; WGR                                  ;AN000;
 = 0000                      C	RC_NO_ERROR   EQU    0                  ; WGR                                  ;AN000;
 = 001B                      C	FUNC_CALL     EQU    1BH                ; WGR                                  ;AN000;
 = 0001                      C	VGA_FOUND     EQU    00000001B          ; WGR                                  ;AN000;
 = 0001                      C	EGA_FOUND     EQU    00000001B          ; WGR                                  ;AN000;
 = 0002                      C	LCD_FOUND     EQU    00000010B          ; WGR                                  ;AN000;
 = 0004                      C	CGA_FOUND     EQU    00000100B          ; WGR                                  ;AN000;
 = 0008                      C	MONO_FOUND    EQU    00001000B          ; WGR                                  ;AN000;
 = 0012                      C	ALT_SELECT    EQU    12H                ; WGR                                  ;AN000;
 = 0010                      C	EGA_INFO_CALL EQU    10H                ; WGR                                  ;AN000;
 = 00C0                      C	GET_SYS_ID    EQU    0C0H               ; WGR                                  ;AN000;
 = 0043                      C	GET_STATUS    EQU    43H                ; WGR                                  ;AN000;
 = 00F9                      C	LCD_MODEL     EQU    0F9H               ; WGR                                  ;AN000;
 = B800                      C	COLOR_ADDRESS EQU    0B800H             ; WGR                                  ;AN000;
 = B000                      C	MONO_ADDRESS  EQU    0B000H             ; WGR                                  ;AN000;
 = 0002                      C	ERROR_1       EQU    2                  ; WGR                                  ;AN000;
 = 000C                      C	ERROR_2       EQU    12                 ; WGR                                  ;AN000;
 = 0008                      C	ERROR_3       EQU    8                  ; WGR                                  ;AN000;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; *** INT 2Fh used
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	
 = 001A                      C	ANSI_2F       EQU    1Ah                ; WGR Muliflex number for ANSI         ;AC003;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:43:57
PARSE CODE AND CONTROL BLOCKS FOR DISPLAY.SYS               Page     1-9


			     C	;Catagory code
 = 0001                      C	IOCTL_2F      EQU     1h                ;
 = 0002                      C	DA_INFO_2F    EQU     2h                ;J.K. Information passing to ANSI.
			     C	;Subfunction code for IOCTL_2F
 = 007F                      C	GET_SUBFUNC   EQU    7FH                ; WGR Same structure as GET_IOCTL(ANSI);AN000;
			     C	
			     C	;Info Struture for DA_INFO_2F. (DS:DX point to this packet)
			     C	;J.K. Note: For DOS 4.00, DA_INFO_PACKET is used to signal ANSI.SYS that
			     C	;DISPLAY.SYS is calling/finishing INT 10h SET MODE call.  ANSI.SYS needs this
			     C	;infomration since it also hooks INT 10h vector.
			     C	;For this DA_SETMODE_FLAG purpose, DA_INFO_LEVEL and DA_INFO_DIRECTION should always be
			     C	;set to 0.  This can be extended for another information passing scheme between
			     C	;DISPLAY.SYS and ANSI.SYS in the future version.
			     C	;For DA_SETMODE_FLAG, DISPLAY.SYS should be extremely careful that when it calls
			     C	;with DA_SETMODE_FLAG =1, then it should calls with DA_SETMODE_FLAG=0
			     C	;when it finished INT 10h function call. Otherwise, the system goes .....
			     C	DA_INFO_PACKET   struc
 0000  00                    C	DA_INFO_LEVEL       db      0           ; 0 for DA_SETMODE_FLAG,  1 for DA_OPTION_L_STATE query (for
				 OS2 compat. box).
 0001  00                    C	DA_SETMODE_FLAG     db      0           ; 1: DISPLAY.SYS is calling INT 10h call, SET MODE. 0= finis
				hed.
 0002  00                    C	DA_OPTION_L_STATE   db      0           ; on return from ANSI, 1 = ANSI /L option active, 0 = inacti
				ve.
 0003                        C	DA_INFO_PACKET   ends
			     C	
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; *** DEF-EQU *** DEF-EQU *** DEF-EQU ***
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; Information Block Structure
			     C	;    (for functionality call)
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	INFO_BLOCK      STRUC                   ; info block for functionality call    ;AN000;
 0000  00000000              C	STATIC_ADDRESS  DD   ?                  ; address of static functionality table;AN000;
 0004  0021[                 C	                DB   33 DUP(?)          ; don't care                           ;AN000;
	   ??                C	
			 ]   C	
			     C	
 0025  00                    C	ACTIVE_DISPLAY  DB   ?                  ; active display code                  ;AN000;
 0026  00                    C	ALT_DISPLAY     DB   ?                  ; alternate display code               ;AN000;
 0027  0003[                 C	                DB   3  DUP(?)          ; don't care                           ;AN000;
	   ??                C	
			 ]   C	
			     C	
 002A  00                    C	CURRENT_SCANS   DB   ?                  ; current number of scan lines         ;AN000;
 002B  0002[                 C	                DB   2  DUP(?)          ; don't care                           ;AN000;
	   ??                C	
			 ]   C	
			     C	
 002D  00                    C	MISC_INFO       DB   ?                  ; miscellaneous state information      ;AN000;
 002E  0012[                 C	                DB   18 DUP(?)          ; don't care                           ;AN000;
	   ??                C	
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:43:57
PARSE CODE AND CONTROL BLOCKS FOR DISPLAY.SYS               Page     1-10


			 ]   C	
			     C	
 0040                        C	INFO_BLOCK      ENDS                    ;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; Structure of System ID call return block
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	SYS_ID          STRUC                   ; format of return system config data  ;AN000;
 0000  0000                  C	                DW   ?                  ; don't care                           ;AN000;
 0002  00                    C	MODEL_BYTE      DB   ?                  ; model byte                           ;AN000;
 0003                        C	SYS_ID          ENDS                    ;                                      ;AN000;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				
				.LIST
				
				PUBLIC	    PARSER	     ; near procedure for parsing DEVICE= statement		 ;AN000;
				PUBLIC	    TABLE	     ; table for variable storage used by INIT module.		 ;AN000;
				PUBLIC	    GET_DEVICE_ID    ; procedure to determine device adapter			 ;AN000;
				
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; Set assemble switches for parse code
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				
 = 0000				DateSW	      EQU     0 								 ;AN000;
 = 0000				DrvSW	      EQU     0 								 ;AN000;
 = 0000				SwSW	      EQU     0 								 ;AN000;
 = 0000				Val1SW	      EQU     0 								 ;AN000;
 = 0000				Val2SW	      EQU     0 								 ;AN000;
 = 0000				Val3SW	      EQU     0 								 ;AN000;
				
				
 0000				CODE	      SEGMENT  PUBLIC BYTE 'CODE'
					      ASSUME CS:CODE
				
				
				.LIST
				
				
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; PARM control block for DISPLAY.SYS - DEVICE= command statement.
				; Command line looks like:
				;
				;   DEVICE=[d:][path]DISPLAY.SYS CON[:]=(type[,[hwcp][,n]])
				;     or
				;   DEVICE=[d:][path]DISPLAY.SYS CON[:]=(type[,[hwcp][,(n,m)]])
				;     or, for compatibility with DOS 3.3; PTM P1895
				;   DEVICE=[d:][path]DISPLAY.SYS CON[:]=(type[,[(hwcp)][,n|(n,m)]])
				;
				; The command line will be parsed from left to right, taking care of the
				; nesting of complex lists as they occur.
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:43:57
PARSE CODE AND CONTROL BLOCKS FOR DISPLAY.SYS               Page     1-11


				;
				; The first level of control blocks is shown below.
				; Complex list control blocks follow.
				; Null VALUE LIST and RESULT BUFFER are placed after all other PARSE control
				; blocks.
				;
				; d:\path\DISPLAY.SYS CON=(complex list)
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				
 0B80				PARMS1	       LABEL WORD								 ;AN000;
 0B80  0B83 R				       DW	PARMSX1 							 ;AN000;
 0B82  00				       DB	0		   ; no extra delimeters or EOLs.		 ;AN000;
				
 0B83				PARMSX1        LABEL BYTE								 ;AN000;
 0B83  01 01				       DB	1,1		   ; min,max positional operands		 ;AN000;
 0B85  0B8B R				       DW	D_NAME		   ; pointer to control block			 ;AN000;
 0B87  00				       DB	0		   ; no switches				 ;AN000;
 0B88  01				       DB	1		   ; 1 keywords 				 ;AN000;
 0B89  0B94 R				       DW	DSP_LIST	   ; pointer to control block			 ;AN000;
				
 0B8B				D_NAME	       LABEL WORD								 ;AN000;
 0B8B  0200				       DW	0200H		   ; file spec					 ;AN000;
 0B8D  0001				       DW	0001H		   ; cap result by file table			 ;AN000;
 0B8F  0BF7 R				       DW	RESULT_BUF	   ; result					 ;AN000;
 0B91  0BF6 R				       DW	NOVALS		   ; no value checking done			 ;AN000;
 0B93  00				       DB	0		   ; no keyword/switch synonyms 		 ;AN000;
				
 0B94				DSP_LIST       LABEL WORD								 ;AN000;
 0B94  0400				       DW	0400H		   ; complex list, ignore colon 		 ;AN000;
 0B96  0012				       DW	0012H		   ; cap result by char table			 ;AN000;
 0B98  0BF7 R				       DW	RESULT_BUF	   ; result					 ;AN000;
 0B9A  0BF6 R				       DW	NOVALS		   ; no value checking done			 ;AN000;
 0B9C  02				       DB	2		   ; 1 keyword					 ;AN000;
 0B9D  43 4F 4E 3D 00			       DB	"CON=",0           ;GHG CON[:]= keyword                          ;AN001;
 0BA2  43 4F 4E 3A 3D 00		       DB	"CON:=",0          ;GHG                                          ;AN001;
				
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; PARM control block for second level of nesting.
				; ie. complex list from first level of nesting
				;
				; (type, hwcp, n or complex list)
				;or,
				; (type, (hwcp), n or complex list)
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				
 0BA8				PARMS2	       LABEL WORD								 ;AN000;
 0BA8  0BAB R				       DW	PARMSX2 							 ;AN000;
 0BAA  00				       DB	0		   ; no extra delimeters or EOLs.		 ;AN000;
				
 0BAB				PARMSX2        LABEL BYTE								 ;AN000;
 0BAB  00 03				       DB	0,3		   ; min,max positional operands		 ;AN000;
 0BAD  0BB5 R				       DW	DSP_TYPE	   ; pointer to control block			 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:43:57
PARSE CODE AND CONTROL BLOCKS FOR DISPLAY.SYS               Page     1-12


 0BAF  0BBE R				       DW	HWCP		   ; pointer to control block			 ;AN000;
 0BB1  0BC7 R				       DW	CP_PREPS	   ; pointer to control block			 ;AN000;
 0BB3  00				       DB	0		   ; no switches				 ;AN000;
 0BB4  00				       DB	0		   ; no keywords				 ;AN000;
				
 0BB5				DSP_TYPE       LABEL BYTE								 ;AN000;
 0BB5  2001				       DW	2001H		   ; sstring (optional) 			 ;AN000;
 0BB7  0002				       DW	0002H		   ; cap by char table				 ;AN000;
 0BB9  0BF7 R				       DW	RESULT_BUF	   ; result					 ;AN000;
 0BBB  0BF6 R				       DW	NOVALS		   ; value list 				 ;AN000;
 0BBD  00				       DB	0		   ; no keyword/switch synonyms 		 ;AN000;
				
				
 0BBE				HWCP	       LABEL BYTE								 ;AN000;
 0BBE  8401				       DW	8401H		   ;AN002; numeric or complex list (optional)
 0BC0  0000				       DW	0		   ; no functions				 ;AN000;
 0BC2  0BF7 R				       DW	RESULT_BUF	   ; result					 ;AN000;
 0BC4  0BF6 R				       DW	NOVALS		   ; no value checking done			 ;AN000;
 0BC6  00				       DB	0		   ; no keyword/switch synonyms 		 ;AN000;
				
 0BC7				CP_PREPS       LABEL BYTE								 ;AN000;
 0BC7  8401				       DW	8401H		   ; numeric or complex list (optional) 	 ;AN000;
 0BC9  0000				       DW	0		   ; no functions				 ;AN000;
 0BCB  0BF7 R				       DW	RESULT_BUF	   ; result					 ;AN000;
 0BCD  0BF6 R				       DW	NOVALS		   ; value list 				 ;AN000;
 0BCF  00				       DB	0		   ; no keyword/switch synonyms 		 ;AN000;
				
				
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; PARM control block for third level of nesting.
				; ie. complex list from second nesting level
				;
				; (hwcp)
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				
 0BD0				PARMS3_X       LABEL WORD		   ;AN002;
 0BD0  0BD3 R				       DW	PARMSX3_X	   ;AN002;
 0BD2  00				       DB	0		   ;AN002; no extra delimeters or EOLs.
				
 0BD3				PARMSX3_X      LABEL BYTE		   ;AN002;
 0BD3  01 01				       DB	1,1		   ;AN002; min,max positional operands
 0BD5  0BE4 R				       DW	PREPS		   ;AN002; pointer to control block
 0BD7  00				       DB	0		   ;AN002; no switches
 0BD8  00				       DB	0		   ;AN002; no keywords
				
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; PARM control block for third level of nesting.
				; ie. complex list from second nesting level
				;
				; (n,m)
				;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:43:57
PARSE CODE AND CONTROL BLOCKS FOR DISPLAY.SYS               Page     1-13


				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				
 0BD9				PARMS3	       LABEL WORD								 ;AN000;
 0BD9  0BDC R				       DW	PARMSX3 							 ;AN000;
 0BDB  00				       DB	0		   ; no extra delimeters or EOLs.		 ;AN000;
				
 0BDC				PARMSX3        LABEL BYTE								 ;AN000;
 0BDC  01 02				       DB	1,2		   ; min,max positional operands		 ;AN000;
 0BDE  0BE4 R				       DW	PREPS		   ; pointer to control block			 ;AN000;
 0BE0  0BED R				       DW	SUBFONTS	   ; pointer to control block			 ;AN000;
 0BE2  00				       DB	0		   ; no switches				 ;AN000;
 0BE3  00				       DB	0		   ; no keywords				 ;AN000;
				
 0BE4				PREPS	       LABEL BYTE								 ;AN000;
 0BE4  8000				       DW	8000H		   ; numeric					 ;AN000;
 0BE6  0000				       DW	0		   ; no functions				 ;AN000;
 0BE8  0BF7 R				       DW	RESULT_BUF	   ; result					 ;AN000;
 0BEA  0BF6 R				       DW	NOVALS		   ; value list 				 ;AN000;
 0BEC  00				       DB	0		   ; no keyword/switch synonyms 		 ;AN000;
				
 0BED				SUBFONTS       LABEL BYTE								 ;AN000;
 0BED  8001				       DW	8001H		   ; numeric (optional) 			 ;AN000;
 0BEF  0000				       DW	0		   ; no functions				 ;AN000;
 0BF1  0BF7 R				       DW	RESULT_BUF	   ; result					 ;AN000;
 0BF3  0BF6 R				       DW	NOVALS		   ; no value checking done			 ;AN000;
 0BF5  00				       DB	0		   ; no keyword/switch synonyms 		 ;AN000;
				
				; Null VALUE LIST and RESULT BUFFER for all PARSE control blocks			 ;AN000;
				
 0BF6				NOVALS	       LABEL BYTE								 ;AN000;
 0BF6  00				       DB	0		   ; no value checking done			 ;AN000;
				
 0BF7				RESULT_BUF     LABEL BYTE								 ;AN000;
 0BF7  00			RESULT_TYPE    DB	?		   ; type returned (number, string, etc.)	 ;AN000;
 0BF8  00				       DB	?		   ; matched item tag (if applicable)		 ;AN000;
 0BF9  0000				       DW	?		   ; synonym ptr (if applicable)		 ;AN000;
 0BFB  00000000			RESULT_VAL     DD	?		   ; value					 ;AN000;
				
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; TABLE STRUCTURE FOR RETURNING VALUES TO THE INIT MODULE
				;  (ADAPTED FROM VERSION 1.0 DISPLAY.SYS)
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				
 0BFF				TABLE	       LABEL	BYTE		   ; table header				 ;AN000;
 0BFF  0001			DEVICE_NUM     DW	ONE		   ; should only be one device			 ;AN000;
 0C01  0C03 R			TABLE2_PTR     DW	TABLE2		   ; pointer to table 2 			 ;AN000;
				
 0C03				TABLE2	       LABEL	WORD								 ;AN000;
 0C03  0004			OFFSET_NUM     DW	FOUR		   ; 4 pointer follow				 ;AN000;
 0C05  0C0D R			TABLE3_PTR     DW	TABLE3		   ; pointer to table 3 (device name)		 ;AN000;
 0C07  0C17 R			TABLE4_PTR     DW	TABLE4		   ; pointer to table 4 (device id)		 ;AN000;
 0C09  0C21 R			TABLE5_PTR     DW	TABLE5		   ; pointer to table 5 (hwcp's)                 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:43:57
PARSE CODE AND CONTROL BLOCKS FOR DISPLAY.SYS               Page     1-14


 0C0B  0C25 R			TABLE6_PTR     DW	TABLE6		   ; pointer to table 6 (num desg's and fonts)   ;AN000;
				
 0C0D				TABLE3	       LABEL	WORD		   ; device name (ie. CON)			 ;AN000;
 0C0D  0008			T3_LENGTH      DW	EIGHT		   ; length					 ;AN000;
 0C0F  43 4F 4E 20 20 20	T3_NAME        DB	"CON     "         ; value                                       ;AN000;
       20 20			
				
 0C17				TABLE4	       LABEL	WORD		   ; device id. (eg. EGA,MONO...)		 ;AN000;
 0C17  0000			T4_LENGTH      DW	ZERO		   ; length					 ;AN000;
 0C19  20 20 20 20 20 20	T4_NAME        DB	"        "         ; value                                       ;AN000;
       20 20			
				
 0C21				TABLE5	       LABEL	WORD		   ; hardware code pages			 ;AN000;
 0C21  0000			T5_NUM	       DW	ZERO		   ; only 1 for CON				 ;AN000;
 0C23  0000			T5_VALUE       DW	?		   ; value					 ;AN000;
				
 0C25				TABLE6	       LABEL	WORD		   ; Designates and fonts			 ;AN000;
 0C25  0000			T6_NUM	       DW	ZERO		   ; values given (0 - 2 valid) 		 ;AN000;
 0C27  0000			T6_DESG        DW	?		   ; n value					 ;AN000;
 0C29  0000			T6_FONT        DW	?		   ; m value					 ;AN000;
				
				
 0C2B  01			OK_FLAG        DB	ON		   ; FLAG INDICATING PARSE STATUS		 ;AN000;
 0C2C  00			LOOP1	       DB	ZERO								 ;AN000;
 0C2D  00			LOOP2	       DB	ZERO								 ;AN000;
				
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; PROCEDURE_NAME: PARSER
				;
				; FUNCTION:
				; THIS PROCEDURE PARSES THE DEVICE= PARAMETERS FROM THE INIT REQUEST
				; BLOCK.
				;
				; AT ENTRY: ES:DI POINTS TO REQUEST HEADER
				;
				; AT EXIT:
				;    NORMAL: TABLE SET UP WITH VALUES FOUND
				;
				;    ERROR: 0 LOADED IN FIRST WORD OF TABLE
				;
				; AUTHOR: WGR
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				
 0C2E				PARSER	PROC	 NEAR									 ;AN000;
 0C2E  06				PUSH	 ES									 ;AN000;
 0C2F  53				PUSH	 BX									 ;AN000;
 0C30  1E				PUSH	 DS			  ;						 ;AN000;
 0C31  56				PUSH	 SI			  ;						 ;AN000;
 0C32  26: C5 75 12			LDS	 SI,RH.RH0_BPBA 	  ;						 ;AN000;
 0C36  0E				PUSH	 CS			  ; establish ES ..				 ;AN000;
 0C37  07				POP	 ES			  ; addressability to data			 ;AN000;
 0C38  8D 3E 0B80 R			LEA	 DI,PARMS1		  ; point to PARMS control block		 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:43:57
PARSE CODE AND CONTROL BLOCKS FOR DISPLAY.SYS               Page     1-15


 0C3C  33 C9				XOR	 CX,CX			  ; clear both CX and DX for			 ;AN000;
 0C3E  33 D2				XOR	 DX,DX			  ;  SYSPARSE					 ;AN000;
 0C40  E8 00DE R			CALL	 SYSPARSE		  ; move pointer past file spec 		 ;AN000;
 0C43  E8 00DE R			CALL	 SYSPARSE		  ; do first parse				 ;AN000;
					.WHILE <AX NE RC_EOL> AND	  ; EOL?...then end parse...and..		 ;AN000;
 0C46                        2	$l1: 
 0C46  3D FFFF               3						cmp AX,RC_EOL 
 0C49  74 42                 6						je $l2 
					.WHILE <OK_FLAG EQ ON>		  ; make sure that flag still ok..		 ;AN000;
 0C4B  2E: 80 3E 0C2B R 01   3						cmp OK_FLAG,ON 
 0C51  75 3A                 6						jne $l2 
					  .IF <AX NE RC_NO_ERROR>	  ; parse error?				 ;AN000;
 0C53  3D 0000               3						cmp AX,RC_NO_ERROR 
 0C56  74 08                 6						je $l5 
 0C58  2E: C6 06 0C2B R 00		    MOV     OK_FLAG,OFF 	  ; yes...reset flag				 ;AN000;
					  .ELSE 			  ; no...process..				 ;AN000;
 0C5E  EB E6                 3						jmp short $l1 
 0C60                        2	$l5: 
					    .SELECT			  ;						 ;AN000;
					    .WHEN <RESULT_TYPE EQ COMPLEX> ; complex string found?			 ;AN000;
 0C60  2E: 80 3E 0BF7 R 04   3						cmp RESULT_TYPE,COMPLEX 
 0C66  75 1A                 6						jne $l9 
 0C68  2E: FE 06 0C2C R			      INC    LOOP1		  ; increment count				 ;AN000;
					      .IF <LOOP1 GT ONE>	  ; more than one?				 ;AN000;
 0C6D  2E: 80 3E 0C2C R 01   3						cmp LOOP1,ONE 
 0C73  7E 08                 6						jng $l12 
 0C75  2E: C6 06 0C2B R 00			MOV    OK_FLAG,OFF	  ; yes....we have an error			 ;AN000;
					      .ELSE			  ; no ..					 ;AN000;
 0C7B  EB 0B                 3						jmp short $l8 
 0C7D                        2	$l12: 
 0C7D  E8 0CAD R				CALL   PARSE_MAIN	  ; process complex string..			 ;AN000;
					      .ENDIF			  ;						 ;AN000;
					    .OTHERWISE			  ; not a complex string so..			 ;AN000;
 0C80  EB 06                 3						jmp short $l8 
 0C82                        2	$l9: 
 0C82  2E: C6 06 0C2B R 00		      MOV    OK_FLAG,OFF	  ; we have a problem...reset flag		 ;AN000;
					    .ENDSELECT			  ;						 ;AN000;
 0C88                        2	$l8: 
 0C88  E8 00DE R			    CALL   SYSPARSE		  ; continue parsing..				 ;AN000;
					  .ENDIF			  ;						 ;AN000;
					.ENDWHILE			  ;						 ;AN000;
 0C8B  EB B9                 3						jmp $l1 
 0C8D                        2	$l2: 
					.IF <OK_FLAG EQ OFF> OR 	  ; flag indicating error?			 ;AN000;
 0C8D  2E: 80 3E 0C2B R 00   3						cmp OK_FLAG,OFF 
 0C93  74 08                 6						je $l18 
					.IF <LOOP1 EQ ZERO>		  ; or no parameters specified? 		 ;AN000;
 0C95  2E: 80 3E 0C2C R 00   3						cmp LOOP1,ZERO 
 0C9B  75 0A                 6						jne $l17 
 0C9D                        3	$l18: 
 0C9D  2E: C7 06 0BFF R 0000		  MOV	DEVICE_NUM,ZERO 	  ; yes...set device number to 0		 ;AN000;
 0CA4  F9				  STC				  ;						 ;AN000;
					.ELSE				  ;						 ;AN000;
 0CA5  EB 01                 3						jmp short $l16 
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:43:57
PARSE CODE AND CONTROL BLOCKS FOR DISPLAY.SYS               Page     1-16


 0CA7                        2	$l17: 
 0CA7  F8				  CLC				  ;						 ;AN000;
					.ENDIF				  ;						 ;AN000;
 0CA8                        2	$l16: 
 0CA8  5E				POP    SI			  ;						 ;AN000;
 0CA9  1F				POP    DS			  ;						 ;AN000;
 0CAA  5B				POP    BX			  ;						 ;AN000;
 0CAB  07				POP    ES			  ;						 ;AN000;
 0CAC  C3				RET				  ;						 ;AN000;
 0CAD				PARSER	ENDP										 ;AN000;
				
				
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; PROCEDURE_NAME: PARSE_MAIN
				;
				; FUNCTION:
				; THIS PROCEDURE PARSES THE CON=(    ) COMPLEX LIST DEVICE= LINE FOUND
				; IN CONFIG.SYS
				;
				; AT ENTRY: RESULT BUFFER CONTAINS POINTER TO COMPLEX STRING
				;
				; AT EXIT:
				;    NORMAL: TABLE SET UP WITH VALUES FOUND
				;
				;    ERROR: OK_FLAG = 0
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				
 0CAD				PARSE_MAIN  PROC   NEAR 								 ;AN000;
 0CAD  57				    PUSH   DI			  ; setup to parse the nested.. 		 ;AN000;
 0CAE  1E				    PUSH   DS			  ; complex string...but save.. 		 ;AN000;
 0CAF  56				    PUSH   SI			  ; current parsing status.			 ;AN000;
 0CB0  51				    PUSH   CX			  ;						 ;AN000;
 0CB1  33 C9				    XOR    CX,CX		  ;						 ;AN000;
 0CB3  8D 3E 0BA8 R			    LEA    DI,PARMS2		  ; next control block..			 ;AN000;
 0CB7  2E: C5 36 0BFB R			    LDS    SI,RESULT_VAL	  ; point to stored string			 ;AN000;
 0CBC  E8 00DE R			    CALL   SYSPARSE		  ;						 ;AN000;
					    .WHILE <AX NE RC_EOL> AND	  ; not EOL?   and..				 ;AN000;
 0CBF                        2	$l20: 
 0CBF  3D FFFF               3						cmp AX,RC_EOL 
 0CC2  74 4E                 6						je $l21 
					    .WHILE <OK_FLAG EQ ON>	  ; error flag still ok?			 ;AN000;
 0CC4  2E: 80 3E 0C2B R 01   3						cmp OK_FLAG,ON 
 0CCA  75 46                 6						jne $l21 
					      .IF <AX NE RC_NO_ERROR>	  ; check for parse errors			 ;AN000;
 0CCC  3D 0000               3						cmp AX,RC_NO_ERROR 
 0CCF  74 08                 6						je $l24 
 0CD1  2E: C6 06 0C2B R 00			MOV    OK_FLAG,OFF	  ; yes....reset error flag			 ;AN000;
					      .ELSE			  ; no...process				 ;AN000;
 0CD7  EB E6                 3						jmp short $l20 
 0CD9                        2	$l24: 
 0CD9  2E: FE 06 0C2D R				INC    LOOP2		  ;						 ;AN000;
						.SELECT 		  ;						 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:43:57
PARSE CODE AND CONTROL BLOCKS FOR DISPLAY.SYS               Page     1-17


						.WHEN <RESULT_TYPE EQ STRING> ; simple string				 ;AN000;
 0CDE  2E: 80 3E 0BF7 R 03   3						cmp RESULT_TYPE,STRING 
 0CE4  75 06                 6						jne $l28 
 0CE6  E8 0DCC R				  CALL	 PARSE_STR	  ; yes...process				 ;AN000;
						.WHEN <RESULT_TYPE EQ NUMBER> ; number?..				 ;AN000;
 0CE9  EB 22                 3						jmp short $l27 
 0CEB  90                    3						nop 
 0CEC                        2	$l28: 
 0CEC  2E: 80 3E 0BF7 R 01   3						cmp RESULT_TYPE,NUMBER 
 0CF2  75 06                 6						jne $l30 
 0CF4  E8 0DF1 R				  CALL	 PARSE_NUM	  ; yes...process				 ;AN000;
						.WHEN <RESULT_TYPE EQ COMPLEX> ; complex string?			 ;AN000;
 0CF7  EB 14                 3						jmp short $l27 
 0CF9  90                    3						nop 
 0CFA                        2	$l30: 
 0CFA  2E: 80 3E 0BF7 R 04   3						cmp RESULT_TYPE,COMPLEX 
 0D00  75 05                 6						jne $l32 
 0D02  E8 0D17 R				  CALL	 PARSE_COMPLEX	  ;AN002;
						.OTHERWISE		  ; anything else is..				 ;AN000;
 0D05  EB 06                 3						jmp short $l27 
 0D07                        2	$l32: 
 0D07  2E: C6 06 0C2B R 00			  MOV	 OK_FLAG,OFF	  ; an error...reset flag.			 ;AN000;
						.ENDSELECT		  ;						 ;AN000;
 0D0D                        2	$l27: 
 0D0D  E8 00DE R				CALL   SYSPARSE 	  ; continue parsing				 ;AN000;
					      .ENDIF			  ;						 ;AN000;
					    .ENDWHILE			  ;						 ;AN000;
 0D10  EB AD                 3						jmp $l20 
 0D12                        2	$l21: 
 0D12  59				    POP    CX			  ; restore original parse..			 ;AN000;
 0D13  5E				    POP    SI			  ; registers.					 ;AN000;
 0D14  1F				    POP    DS			  ;						 ;AN000;
 0D15  5F				    POP    DI			  ;						 ;AN000;
 0D16  C3				    RET 			  ;						 ;AN000;
 0D17				PARSE_MAIN  ENDP
				
				;
 0D17				PARSE_COMPLEX	PROC		 ;AN002;
					.IF  <LOOP2 EQ TWO>	 ;AN002; Should be for HWCP
 0D17  2E: 80 3E 0C2D R 02   3						cmp LOOP2,TWO 
 0D1D  75 05                 6						jne $l36 
 0D1F  E8 0D28 R			     CALL  PARSE_COMP_X  ;AN002; for (hwcp)
					.ELSE			 ;AN002;
 0D22  EB 03                 3						jmp short $l35 
 0D24                        2	$l36: 
 0D24  E8 0D73 R			     CALL   PARSE_COMP	 ; yes...process for (n,m)				 ;AN000;
					.ENDIF			 ;AN002;
 0D27                        2	$l35: 
 0D27  C3				ret			 ;AN002;
 0D28				PARSE_COMPLEX	ENDP
				
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; PROCEDURE_NAME: PARSE_COMP_X
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:43:57
PARSE CODE AND CONTROL BLOCKS FOR DISPLAY.SYS               Page     1-18


				;
				; FUNCTION:
				; THIS PROCEDURE PARSES A COMPLEX LIST FOUND WITHIN THE CON=(	)
				; COMPLEX LIST for (hwcp).
				;
				; AT ENTRY: RESULT BUFFER CONTAINS POINTER TO COMPLEX STRING
				;
				; AT EXIT:
				;    NORMAL: TABLE SET UP WITH VALUES FOUND
				;
				;    ERROR: OK_FLAG = 0
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				
 0D28				PARSE_COMP_X PROC   NEAR		  ;AN002;
 0D28  57				     PUSH   DI			  ;AN002; setup ro parse the nested..
 0D29  1E				     PUSH   DS			  ;AN002; complex string..saving the..
 0D2A  56				     PUSH   SI			  ;AN002; current parse status.
 0D2B  51				     PUSH   CX			  ;AN002;
 0D2C  33 C9				     XOR    CX,CX		  ;AN002;
 0D2E  8D 3E 0BD0 R			     LEA    DI,PARMS3_X 	  ;AN002; next control block
 0D32  2E: C5 36 0BFB R			     LDS    SI,RESULT_VAL	  ;AN002; point to stored string.
 0D37  E8 00DE R			     CALL   SYSPARSE		  ;AN002;
					     .WHILE <AX NE RC_EOL> AND	  ;AN002; not EOL?...and..
 0D3A                        2	$l39: 
 0D3A  3D FFFF               3						cmp AX,RC_EOL 
 0D3D  74 2F                 6						je $l40 
					     .WHILE <OK_FLAG EQ ON>	  ;AN002; error flag still okay?
 0D3F  2E: 80 3E 0C2B R 01   3						cmp OK_FLAG,ON 
 0D45  75 27                 6						jne $l40 
					       .IF <AX NE RC_NO_ERROR> OR ;AN002; parse error?...or..
 0D47  3D 0000               3						cmp AX,RC_NO_ERROR 
 0D4A  75 08                 5						jNE $l44 
					       .IF <RESULT_TYPE NE NUMBER> ;AN002; something other than a number..
 0D4C  2E: 80 3E 0BF7 R 01   3						cmp RESULT_TYPE,NUMBER 
 0D52  74 08                 6						je $l43 
 0D54                        3	$l44: 
 0D54  2E: C6 06 0C2B R 00			 MOV	OK_FLAG,OFF	  ;AN002; found?....yes..reset flag.
					       .ELSE			  ;AN002; no...process..
 0D5A  EB DE                 3						jmp short $l39 
 0D5C                        2	$l43: 
 0D5C  2E: FF 06 0C21 R				 INC	T5_NUM		  ;AN002; increment counter
 0D61  2E: A1 0BFB R				 MOV	AX,WORD PTR RESULT_VAL ;AN002; get numeric value into word
 0D65  2E: A3 0C23 R				 MOV	T5_VALUE,AX	  ;AN002; yes...number of designates.
 0D69  E8 00DE R				 CALL	SYSPARSE	  ;AN002; continue parsing
					       .ENDIF			  ;AN002;
					     .ENDWHILE			  ;AN002;
 0D6C  EB CC                 3						jmp $l39 
 0D6E                        2	$l40: 
 0D6E  59				     POP    CX			  ;AN002; restore previous parse..
 0D6F  5E				     POP    SI			  ;AN002; registers.
 0D70  1F				     POP    DS			  ;AN002;
 0D71  5F				     POP    DI			  ;AN002;
 0D72  C3				     RET			  ;AN002;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:43:57
PARSE CODE AND CONTROL BLOCKS FOR DISPLAY.SYS               Page     1-19


 0D73				PARSE_COMP_X ENDP			  ;AN002;
				
				
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; PROCEDURE_NAME: PARSE_COMP
				;
				; FUNCTION:
				; THIS PROCEDURE PARSES A COMPLEX LIST FOUND WITHIN THE CON=(	)
				; COMPLEX LIST for (n,m).
				;
				; AT ENTRY: RESULT BUFFER CONTAINS POINTER TO COMPLEX STRING
				;
				; AT EXIT:
				;    NORMAL: TABLE SET UP WITH VALUES FOUND
				;
				;    ERROR: OK_FLAG = 0
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				
 0D73				PARSE_COMP   PROC   NEAR								 ;AN000;
 0D73  57				     PUSH   DI			  ; setup ro parse the nested.. 		 ;AN000;
 0D74  1E				     PUSH   DS			  ; complex string..saving the..		 ;AN000;
 0D75  56				     PUSH   SI			  ; current parse status.			 ;AN000;
 0D76  51				     PUSH   CX			  ;						 ;AN000;
 0D77  33 C9				     XOR    CX,CX		  ;						 ;AN000;
 0D79  8D 3E 0BD9 R			     LEA    DI,PARMS3		  ; next control block				 ;AN000;
 0D7D  2E: C5 36 0BFB R			     LDS    SI,RESULT_VAL	  ; point to stored string.			 ;AN000;
 0D82  E8 00DE R			     CALL   SYSPARSE		  ;						 ;AN000;
					     .WHILE <AX NE RC_EOL> AND	  ; not EOL?...and..				 ;AN000;
 0D85                        2	$l46: 
 0D85  3D FFFF               3						cmp AX,RC_EOL 
 0D88  74 3D                 6						je $l47 
					     .WHILE <OK_FLAG EQ ON>	  ; error flag still okay?			 ;AN000;
 0D8A  2E: 80 3E 0C2B R 01   3						cmp OK_FLAG,ON 
 0D90  75 35                 6						jne $l47 
					       .IF <AX NE RC_NO_ERROR> OR ; parse error?...or.. 			 ;AN000;
 0D92  3D 0000               3						cmp AX,RC_NO_ERROR 
 0D95  75 08                 5						jNE $l51 
					       .IF <RESULT_TYPE NE NUMBER> ; something other than a number..		 ;AN000;
 0D97  2E: 80 3E 0BF7 R 01   3						cmp RESULT_TYPE,NUMBER 
 0D9D  74 08                 6						je $l50 
 0D9F                        3	$l51: 
 0D9F  2E: C6 06 0C2B R 00			 MOV	OK_FLAG,OFF	  ; found?....yes..reset flag.			 ;AN000;
					       .ELSE			  ; no...process..				 ;AN000;
 0DA5  EB DE                 3						jmp short $l46 
 0DA7                        2	$l50: 
 0DA7  2E: FF 06 0C25 R				 INC	T6_NUM		  ; increment counter				 ;AN000;
 0DAC  2E: A1 0BFB R				 MOV	AX,WORD PTR RESULT_VAL ; get numeric value into word		 ;AN000;
						 .IF <T6_NUM EQ ONE>	  ; first value found?				 ;AN000;
 0DB0  2E: 83 3E 0C25 R 01   3						cmp T6_NUM,ONE 
 0DB6  75 06                 6						jne $l54 
 0DB8  2E: A3 0C27 R				   MOV	  T6_DESG,AX	  ; yes...number of designates. 		 ;AN000;
						 .ELSE			  ; else..					 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:43:57
PARSE CODE AND CONTROL BLOCKS FOR DISPLAY.SYS               Page     1-20


 0DBC  EB 04                 3						jmp short $l53 
 0DBE                        2	$l54: 
 0DBE  2E: A3 0C29 R				   MOV	  T6_FONT,AX	  ; second number...number of fonts.		 ;AN000;
						 .ENDIF 		  ;						 ;AN000;
 0DC2                        2	$l53: 
 0DC2  E8 00DE R				 CALL	SYSPARSE	  ; continue parsing				 ;AN000;
					       .ENDIF			  ;						 ;AN000;
					     .ENDWHILE			  ;						 ;AN000;
 0DC5  EB BE                 3						jmp $l46 
 0DC7                        2	$l47: 
 0DC7  59				     POP    CX			  ; restore previous parse..			 ;AN000;
 0DC8  5E				     POP    SI			  ; registers.					 ;AN000;
 0DC9  1F				     POP    DS			  ;						 ;AN000;
 0DCA  5F				     POP    DI			  ;						 ;AN000;
 0DCB  C3				     RET			  ;						 ;AN000;
 0DCC				PARSE_COMP   ENDP
				
				
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; PROCEDURE_NAME: PARSE_STR
				;
				; FUNCTION:
				; THIS PROCEDURE PARSES A STRING FOUND WITHIN THE CON=(   ) STATEMENT
				;
				; AT ENTRY: RESULT BUFFER POINTS TO ASCIIZ STRING
				;
				; AT EXIT:
				;    NORMAL: TABLE SET UP WITH VALUES FOUND
				;
				;    ERROR: N/A
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				
 0DCC				PARSE_STR    PROC   NEAR								 ;AN000;
 0DCC  57				     PUSH   DI			  ; get source and..				 ;AN000;
 0DCD  1E				     PUSH   DS			  ; destination registers..			 ;AN000;
 0DCE  56				     PUSH   SI			  ; setup.					 ;AN000;
 0DCF  2E: C5 36 0BFB R			     LDS    SI,RESULT_VAL	  ;						 ;AN000;
					     .IF <<BYTE PTR DS:[SI]> NE ZERO> ; check for null string			 ;AN000;
 0DD4  80 3C 00              3						cmp BYTE PTR DS:[SI],ZERO 
 0DD7  74 14                 6						je $l57 
 0DD9  8D 3E 0C19 R			       LEA    DI,T4_NAME	  ;						 ;AN000;
 0DDD  AC				       LODSB			  ; load first character.			 ;AN000;
					       .WHILE <AL NE ZERO>	  ; while not at end of ASCIIZ do..		 ;AN000;
 0DDE                        2	$l60: 
 0DDE  3C 00                 3						cmp AL,ZERO 
 0DE0  74 04                 6						je $l61 
 0DE2  AA					 STOSB			  ; store..					 ;AN000;
 0DE3  AC					 LODSB			  ; load next character..			 ;AN000;
					       .ENDWHILE		  ;						 ;AN000;
 0DE4  EB F8                 3						jmp $l60 
 0DE6                        2	$l61: 
 0DE6  2E: C7 06 0C17 R 0008		       MOV    T4_LENGTH,EIGHT	  ; value found.				 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:43:57
PARSE CODE AND CONTROL BLOCKS FOR DISPLAY.SYS               Page     1-21


					     .ENDIF			  ;						 ;AN000;
 0DED                        2	$l57: 
 0DED  5E				     POP    SI			  ; restore registers.				 ;AN000;
 0DEE  1F				     POP    DS			  ;						 ;AN000;
 0DEF  5F				     POP    DI			  ;						 ;AN000;
 0DF0  C3				     RET									 ;AN000;
 0DF1				PARSE_STR    ENDP
				
				
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; PROCEDURE_NAME: PARSE_NUM
				;
				; FUNCTION:
				; THIS PROCEDURE PARSES NUMBERS FOUND IN THE CON=(   ) STATEMENT
				; BLOCK.
				;
				; AT ENTRY: RESULT BUFFER CONTAINS A DWORD NUMBER VALUE
				;
				; AT EXIT:
				;    NORMAL: TABLE SET UP WITH VALUES FOUND
				;
				;    ERROR: N/A
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				
 0DF1				PARSE_NUM    PROC   NEAR								 ;AN000;
 0DF1  2E: A1 0BFB R			     MOV    AX,WORD PTR RESULT_VAL   ; get value into word form 		 ;AN000;
					     .IF <LOOP2 EQ TWO> 	     ; if this is the code page then..		 ;AN000;
 0DF5  2E: 80 3E 0C2D R 02   3						cmp LOOP2,TWO 
 0DFB  75 0C                 6						jne $l64 
 0DFD  2E: A3 0C23 R				MOV   T5_VALUE,AX	     ; load that value. 			 ;AN000;
 0E01  2E: FF 06 0C21 R				INC   T5_NUM		     ;						 ;AN000;
					     .ELSEIF <LOOP2 EQ THREE>	     ;						 ;AN000;
 0E06  EB 12                 3						jmp short $l63 
 0E08  90                    3						nop 
 0E09                        2	$l64: 
 0E09  2E: 80 3E 0C2D R 03   3						cmp LOOP2,THREE 
 0E0F  75 09                 6						jne $l63 
 0E11  2E: A3 0C27 R				MOV   T6_DESG,AX	     ; must be number of designates..		 ;AN000;
 0E15  2E: FF 06 0C25 R				INC   T6_NUM		     ; load and increment count 		 ;AN000;
					     .ENDIF			     ;						 ;AN000;
 0E1A                        2	$l63: 
 0E1A  C3				     RET			     ;						 ;AN000;
 0E1B				PARSE_NUM    ENDP									 ;AN000;
				
				
					     ASSUME CS:CODE,DS:CODE
				
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; PROCEDURE_NAME: GET_DEVICE_ID
				;
				; FUNCTION:
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:43:57
PARSE CODE AND CONTROL BLOCKS FOR DISPLAY.SYS               Page     1-22


				; THIS PROCEDURE RETURNS THE DISPLAY DEVICE TO THE INIT ROUTINE WHEN
				; A DEVICE ID IS NOT SUPPLIED.
				;
				; AT ENTRY: N/A
				;
				; AT EXIT:
				;    NORMAL: DEVICE ID PLACED WITHIN THE TABLE. (EGA OR LCD)
				;	     CARRY IS CLEARED.
				;
				;    ERROR:  DEVICE ID IS MONO OR CGA
				;	     CARRY IS SET.
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				
 0E1B  00000000			FUNC_INFO	  INFO_BLOCK <> 							 ;AN000;
 0E1F  0021[			
	   ??			
			 ]	
 0E40  00			
 0E41  00			
 0E42  0003[			
	   ??			
			 ]	
 0E45  00			
 0E46  0002[			
	   ??			
			 ]	
 0E48  00			
 0E49  0012[			
	   ??			
			 ]	
				
				
 =				DEVICE_N_LENGTH   EQU	EIGHT								 ;AN000;
				
 0E5B  45 47 41 20 20 20	DEVICE_TYPES	  DB	"EGA     "                                                       ;AN000;
       20 20			
 0E63  4C 43 44 20 20 20			  DB	"LCD     "                                                       ;AN000;
       20 20			
				
 = 0002				NUM_DEVICE_TYPES  EQU ($-DEVICE_TYPES)/DEVICE_N_LENGTH					 ;AN000;
				
 0E6B  00			DEVICE_FLAG	  DB	00000000B							 ;AN000;
				
				
 0E6C				GET_DEVICE_ID  PROC   NEAR								 ;AN000;
 0E6C  50				       PUSH   AX								 ;AN000;
 0E6D  53				       PUSH   BX			  ;					 ;AN000;
 0E6E  51				       PUSH   CX			  ; s					 ;AN000;
 0E6F  52				       PUSH   DX			  ;  a	 r				 ;AN000;
 0E70  57				       PUSH   DI			  ;   v   e				 ;AN000;
 0E71  56				       PUSH   SI			  ;    e   g				 ;AN000;
 0E72  06				       PUSH   ES			  ;	    i				 ;AN000;
 0E73  1E				       PUSH   DS			  ;	     s				 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:43:57
PARSE CODE AND CONTROL BLOCKS FOR DISPLAY.SYS               Page     1-23


 0E74  0E				       PUSH   CS			  ;	      t 			 ;AN000;
 0E75  1F				       POP    DS			  ;	       e			 ;AN000;
 0E76  0E				       PUSH   CS			  ;		r			 ;AN000;
 0E77  07				       POP    ES			  ;		 s			 ;AN000;
 0E78  33 C0				       XOR    AX,AX			  ;					 ;AN000;
 0E7A  B4 1B				       MOV    AH,FUNC_CALL		  ;					 ;AN000;
 0E7C  8D 3E 0E1B R			       LEA    DI,FUNC_INFO		  ;					 ;AN000;
 0E80  33 DB				       XOR    BX,BX			  ;					 ;AN000;
 0E82  CD 10				       INT    10H			  ; try VGA functionality call		 ;AN000;
					       .IF <AL EQ FUNC_CALL>		  ; worked?....then			 ;AN000;
 0E84  3C 1B                 3						cmp AL,FUNC_CALL 
 0E86  75 07                 6						jne $l69 
 0E88  80 0E 0E6B R 01				 OR	DEVICE_FLAG,VGA_FOUND	  ; VGA found.				 ;AN000;
					       .ELSE				  ; no VGA...try EGA			 ;AN000;
 0E8D  EB 2A                 3						jmp short $l68 
 0E8F                        2	$l69: 
 0E8F  B4 12					 MOV	AH,ALT_SELECT		  ;					 ;AN000;
 0E91  B3 10					 MOV	BL,EGA_INFO_CALL	  ;					 ;AN000;
 0E93  CD 10					 INT	10H			  ;					 ;AN000;
						 .IF <BL NE EGA_INFO_CALL>	  ; if changed then EGA present..	 ;AN000;
 0E95  80 FB 10              3						cmp BL,EGA_INFO_CALL 
 0E98  74 07                 6						je $l73 
 0E9A  80 0E 0E6B R 01				   OR	  DEVICE_FLAG,EGA_FOUND   ; mark as found.			 ;AN000;
						 .ELSE				  ; no EGA...try LCD.			 ;AN000;
 0E9F  EB 18                 3						jmp short $l68 
 0EA1                        2	$l73: 
 0EA1  B4 C0					   MOV	  AH,GET_SYS_ID 	  ; get system id..			 ;AN000;
 0EA3  CD 15					   INT	  15H			  ; yup....its a convertible..so	 ;AN000;
						   .IF <ES:[BX].MODEL_BYTE EQ LCD_MODEL> AND				 ;AN000;
 0EA5  26: 80 7F 02 F9       3						cmp ES:[BX].MODEL_BYTE,LCD_MODEL 
 0EAA  75 0D                 6						jne $l68 
 0EAC  B4 43					   MOV	  AH,GET_STATUS 	  ; check for LCD..			 ;AN000;
 0EAE  CD 15					   INT	  15H			  ;					 ;AN000;
						   .IF <BIT AL NAND ON> 	  ; yes....bit says LCD..so..		 ;AN000;
 0EB0  A8 01                 3						test AL,ON 
 0EB2  75 05                 6						jnz $l68 
 0EB4  80 0E 0E6B R 02				     OR     DEVICE_FLAG,LCD_FOUND ; mark as LCD.			 ;AN000;
						   .ENDIF			  ;					 ;AN000;
						 .ENDIF 			  ;					 ;AN000;
					       .ENDIF				  ;					 ;AN000;
 0EB9                        2	$l68: 
					       .IF <DEVICE_FLAG NE ZERO>	  ; nothing found?..then exit (eg. MONO) ;AN000;
 0EB9  80 3E 0E6B R 00       3						cmp DEVICE_FLAG,ZERO 
 0EBE  74 27                 6						je $l80 
 0EC0  8D 36 0E5B R				 LEA	SI,DEVICE_TYPES 	  ; start of new id's                    ;AN000;
 0EC4  D0 3E 0E6B R				 SAR	DEVICE_FLAG,ONE 	  ; shift flag into carry bit		 ;AN000;
						 .WHILE NC			  ; carry not set yet.. 		 ;AN000;
 0EC8                        2	$l82: 
 0EC8  72 09                 6						jc $l83 
 0ECA  83 C6 08					   ADD	  SI,DEVICE_N_LENGTH	  ; next id				 ;AN000;
 0ECD  D0 3E 0E6B R				   SAR	  DEVICE_FLAG,ONE	  ; next flag...			 ;AN000;
						 .ENDWHILE			  ;					 ;AN000;
 0ED1  EB F5                 3						jmp $l82 
 0ED3                        2	$l83: 
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:43:57
PARSE CODE AND CONTROL BLOCKS FOR DISPLAY.SYS               Page     1-24


 0ED3  0E					 PUSH	CS			  ; found....transfer id..		 ;AN000;
 0ED4  07					 POP	ES			  ; into the table..			 ;AN000;
 0ED5  8D 3E 0C19 R				 LEA	DI,T4_NAME		  ;					 ;AN000;
 0ED9  B9 0008					 MOV	CX,DEVICE_N_LENGTH	  ;					 ;AN000;
 0EDC  F3/ A4					 REP	MOVSB			  ;					 ;AN000;
 0EDE  C7 06 0C17 R 0008			 MOV	T4_LENGTH,EIGHT 	  ;					 ;AN000;
 0EE4  F8					 CLC				  ; clear error flag			 ;AN000;
					       .ELSE				  ;					 ;AN000;
 0EE5  EB 01                 3						jmp short $l79 
 0EE7                        2	$l80: 
 0EE7  F9					 STC				  ; set error (ie. MONO or CGA found)	 ;AN000;
					       .ENDIF				  ;					 ;AN000;
 0EE8                        2	$l79: 
 0EE8  1F				       POP    DS			  ; r					 ;AN000;
 0EE9  07				       POP    ES			  ;  e	  r				 ;AN000;
 0EEA  5E				       POP    SI			  ;   s    e				 ;AN000;
 0EEB  5F				       POP    DI			  ;    t    g				 ;AN000;
 0EEC  5A				       POP    DX			  ;	o    i				 ;AN000;
 0EED  59				       POP    CX			  ;	 r    s 			 ;AN000;
 0EEE  5B				       POP    BX			  ;	  e    t			 ;AN000;
 0EEF  58				       POP    AX			  ;		e			 ;AN000;
 0EF0  C3				       RET				  ;		 r			 ;AN000;
 0EF1				GET_DEVICE_ID  ENDP				  ;		  s
				
				
				
 0EF1				CODE	      ENDS
					      END

Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:43:57
PARSE CODE AND CONTROL BLOCKS FOR DISPLAY.SYS               Symbols-1


Macros:

		N a m e			Lines

.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

Structures and Records:

                N a m e                 Width   # fields
                                        Shift   Width   Mask    Initial

$P_CDI . . . . . . . . . . . . .  	0022	000C
  $P_CDI_DATEF . . . . . . . . .  	0000
  $P_CDI_MONEY . . . . . . . . .  	0002
  $P_CDI_1000  . . . . . . . . .  	0007
  $P_CDI_DEC . . . . . . . . . .  	0009
  $P_CDI_DATES . . . . . . . . .  	000B
  $P_CDI_TIMES . . . . . . . . .  	000D
  $P_CDI_TIMEF . . . . . . . . .  	0011
$P_CONTROL_BLK . . . . . . . . .  	000A	0006
  $P_MATCH_FLAG  . . . . . . . .  	0000
  $P_FUNCTION_FLAG . . . . . . .  	0002
  $P_RESULT_BUF  . . . . . . . .  	0004
  $P_VALUE_LIST  . . . . . . . .  	0006
  $P_NID . . . . . . . . . . . .  	0008
  $P_KEYORSW . . . . . . . . . .  	0009
$P_DOS_TBL . . . . . . . . . . .  	0005	0003
  $P_DOS_INFOID  . . . . . . . .  	0000
  $P_DOS_TBL_OFF . . . . . . . .  	0001
  $P_DOS_TBL_SEG . . . . . . . .  	0003
$P_PARMSX_BLK  . . . . . . . . .  	0004	0003
  $P_MINP  . . . . . . . . . . .  	0000
  $P_MAXP  . . . . . . . . . . .  	0001
  $P_1ST_CONTROL . . . . . . . .  	0002
$P_PARMS_BLK . . . . . . . . . .  	0004	0003
  $P_PARMSX_ADDRESS  . . . . . .  	0000
  $P_NUM_EXTRA . . . . . . . . .  	0002
  $P_LEN_EXTRA_DELIM . . . . . .  	0003
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:43:57
PARSE CODE AND CONTROL BLOCKS FOR DISPLAY.SYS               Symbols-2


$P_RESULT_BLK  . . . . . . . . .  	0008	0004
  $P_TYPE  . . . . . . . . . . .  	0000
  $P_ITEM_TAG  . . . . . . . . .  	0001
  $P_SYNONYM_PTR . . . . . . . .  	0002
  $P_PICKED_VAL  . . . . . . . .  	0004
$P_VAL_LIST  . . . . . . . . . .  	0009	0005
  $P_NUMOFLIST . . . . . . . . .  	0000
  $P_VAL_XL  . . . . . . . . . .  	0001
  $P_VAL_XH  . . . . . . . . . .  	0003
  $P_VAL_YL  . . . . . . . . . .  	0005
  $P_VAL_YH  . . . . . . . . . .  	0007
BUF_DATA . . . . . . . . . . . .  	0014	000A
  DEV_HDRO . . . . . . . . . . .  	0000
  DEV_HDRS . . . . . . . . . . .  	0002
  CON_STRAO  . . . . . . . . . .  	0004
  CON_STRAS  . . . . . . . . . .  	0006
  CON_INTRO  . . . . . . . . . .  	0008
  CON_INTRS  . . . . . . . . . .  	000A
  RH_PTRO  . . . . . . . . . . .  	000C
  RH_PTRS  . . . . . . . . . . .  	000E
  STATE  . . . . . . . . . . . .  	0010
  STATUS . . . . . . . . . . . .  	0012
CP_PNTER_STRUC . . . . . . . . .  	000A	0005
  HDWR_CP_STRUC  . . . . . . . .  	0000
  DESG_CP_STRUC  . . . . . . . .  	0002
  FONT_CP_STRUC  . . . . . . . .  	0004
  WRITE_DATA_STRUC . . . . . . .  	0006
  FONT_DATA_STRUC  . . . . . . .  	0008
DA_INFO_PACKET . . . . . . . . .  	0003	0003
  DA_INFO_LEVEL  . . . . . . . .  	0000
  DA_SETMODE_FLAG  . . . . . . .  	0001
  DA_OPTION_L_STATE  . . . . . .  	0002
DESG_BUFFER  . . . . . . . . . .  	0008	0004
  DESG_CARTRIDGE . . . . . . . .  	0000
  DESG_LENGTH  . . . . . . . . .  	0002
  DESG_N . . . . . . . . . . . .  	0004
  DESG_CP  . . . . . . . . . . .  	0006
DHS  . . . . . . . . . . . . . .  	0012	0006
  DH_NEXTO . . . . . . . . . . .  	0000
  DH_NEXTS . . . . . . . . . . .  	0002
  DH_STRAO . . . . . . . . . . .  	0006
  DH_INTRO . . . . . . . . . . .  	0008
  DH_NAME  . . . . . . . . . . .  	000A
INFO_BLOCK . . . . . . . . . . .  	0040	0009
  STATIC_ADDRESS . . . . . . . .  	0000
  ACTIVE_DISPLAY . . . . . . . .  	0025
  ALT_DISPLAY  . . . . . . . . .  	0026
  CURRENT_SCANS  . . . . . . . .  	002A
  MISC_INFO  . . . . . . . . . .  	002D
INVK_BUFFER  . . . . . . . . . .  	0004	0002
  INVK_LENGTH  . . . . . . . . .  	0000
  INVK_CP  . . . . . . . . . . .  	0002
PARSE_TABLE1 . . . . . . . . . .  	0004	0002
  NUM_DEVICES  . . . . . . . . .  	0000
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:43:57
PARSE CODE AND CONTROL BLOCKS FOR DISPLAY.SYS               Symbols-3


  DEVICE1_OFFSET . . . . . . . .  	0002
PARSE_TABLE2 . . . . . . . . . .  	0004	0002
  NUM_ITEMS  . . . . . . . . . .  	0000
  OFFSET_LIST  . . . . . . . . .  	0002
QLST_BUFFER  . . . . . . . . . .  	000A	0005
  QLST_LENGTH  . . . . . . . . .  	0000
  QLST_N_HDWR  . . . . . . . . .  	0002
  QLST_HDWR_CP . . . . . . . . .  	0004
  QLST_N_DESG  . . . . . . . . .  	0006
  QLST_DESG_CP . . . . . . . . .  	0008
RH0  . . . . . . . . . . . . . .  	0017	0006
  RH0_UNIT . . . . . . . . . . .  	000D
  RH0_ENDO . . . . . . . . . . .  	000E
  RH0_ENDS . . . . . . . . . . .  	0010
  RH0_BPBA . . . . . . . . . . .  	0012
RH3  . . . . . . . . . . . . . .  	0014	0005
  RH3_DTAO . . . . . . . . . . .  	000E
  RH3_DTAS . . . . . . . . . . .  	0010
  RH3_CNT  . . . . . . . . . . .  	0012
RHC  . . . . . . . . . . . . . .  	000D	0005
  RHC_CMD  . . . . . . . . . . .  	0002
  RHC_STA  . . . . . . . . . . .  	0003
RH_IOCTL . . . . . . . . . . . .  	0017	0006
  STATIC_RH  . . . . . . . . . .  	0000
  MAJOR_F  . . . . . . . . . . .  	000D
  MINOR_F  . . . . . . . . . . .  	000E
  CONTENT_SI . . . . . . . . . .  	000F
  CONTENT_DI . . . . . . . . . .  	0011
  REQUEST_PACKET . . . . . . . .  	0013
SYS_ID . . . . . . . . . . . . .  	0003	0002
  MODEL_BYTE . . . . . . . . . .  	0002

Segments and Groups:

                N a m e         	Length	 Align	Combine Class

CODE . . . . . . . . . . . . . .  	0EF1	BYTE	PUBLIC	'CODE'

Symbols:            

                N a m e         	Type	 Value	 Attr

ALT_SELECT . . . . . . . . . . .  	NUMBER	0012	
ANSI_2F  . . . . . . . . . . . .  	NUMBER	001A	
ANSI_BUF_SIZE  . . . . . . . . .  	NUMBER	000E	

BUF  . . . . . . . . . . . . . .  	TEXT  CS:[BX]		

CAPSW  . . . . . . . . . . . . .  	NUMBER	0001	
CGA_FOUND  . . . . . . . . . . .  	NUMBER	0004	
CMD_INPUT  . . . . . . . . . . .  	NUMBER	0004	
CMPXSW . . . . . . . . . . . . .  	NUMBER	0001	
COLOR_ADDRESS  . . . . . . . . .  	NUMBER	B800	
COMPLEX  . . . . . . . . . . . .  	NUMBER	0004	
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:43:57
PARSE CODE AND CONTROL BLOCKS FOR DISPLAY.SYS               Symbols-4


CP_PREPS . . . . . . . . . . . .  	L BYTE	0BC7	CODE
CY . . . . . . . . . . . . . . .  	ALIAS	 ONE		

DATESW . . . . . . . . . . . . .  	NUMBER	0000	
DA_INFO_2F . . . . . . . . . . .  	NUMBER	0002	
DEFAULT_LEN  . . . . . . . . . .  	NUMBER	0019	
DEVICE_FLAG  . . . . . . . . . .  	L BYTE	0E6B	CODE
DEVICE_NUM . . . . . . . . . . .  	L WORD	0BFF	CODE
DEVICE_N_LENGTH  . . . . . . . .  	ALIAS	 EIGHT		
DEVICE_TYPES . . . . . . . . . .  	L BYTE	0E5B	CODE
DRVSW  . . . . . . . . . . . . .  	NUMBER	0000	
DSP_LIST . . . . . . . . . . . .  	L WORD	0B94	CODE
DSP_TYPE . . . . . . . . . . . .  	L BYTE	0BB5	CODE
D_NAME . . . . . . . . . . . . .  	L WORD	0B8B	CODE

EGA_FOUND  . . . . . . . . . . .  	NUMBER	0001	
EGA_INFO_CALL  . . . . . . . . .  	NUMBER	0010	
EIGHT  . . . . . . . . . . . . .  	NUMBER	0008	
ELEVEN . . . . . . . . . . . . .  	NUMBER	000B	
ERROR_1  . . . . . . . . . . . .  	NUMBER	0002	
ERROR_2  . . . . . . . . . . . .  	NUMBER	000C	
ERROR_3  . . . . . . . . . . . .  	NUMBER	0008	

FAIL . . . . . . . . . . . . . .  	NUMBER	8000	
FARSW  . . . . . . . . . . . . .  	NUMBER	0000	
FILESW . . . . . . . . . . . . .  	NUMBER	0001	
FIVE . . . . . . . . . . . . . .  	NUMBER	0005	
FOUR . . . . . . . . . . . . . .  	NUMBER	0004	
FUNC_CALL  . . . . . . . . . . .  	NUMBER	001B	
FUNC_INFO  . . . . . . . . . . .  	L 	0E1B	CODE

GET_DEVICE_ID  . . . . . . . . .  	N PROC	0E6C	CODE	Global	Length = 0085
GET_MODE . . . . . . . . . . . .  	NUMBER	000F	
GET_STATUS . . . . . . . . . . .  	NUMBER	0043	
GET_SUBFUNC  . . . . . . . . . .  	NUMBER	007F	
GET_SYS_ID . . . . . . . . . . .  	NUMBER	00C0	

HP . . . . . . . . . . . . . . .  	TEXT  DS:[SI]		
HWCP . . . . . . . . . . . . . .  	L BYTE	0BBE	CODE

ID_IOCTL . . . . . . . . . . . .  	NUMBER	0005	
INCSW  . . . . . . . . . . . . .  	NUMBER	0001	
INT_10_HI  . . . . . . . . . . .  	NUMBER	0042	
INT_10_LOW . . . . . . . . . . .  	NUMBER	0040	
INT_1F_HI  . . . . . . . . . . .  	NUMBER	007E	
INT_1F_LOW . . . . . . . . . . .  	NUMBER	007C	
INT_2F_HI  . . . . . . . . . . .  	NUMBER	00BE	
INT_2F_LOW . . . . . . . . . . .  	NUMBER	00BC	
INT_43_HI  . . . . . . . . . . .  	NUMBER	010E	
INT_43_LOW . . . . . . . . . . .  	NUMBER	010C	
INT_44_HI  . . . . . . . . . . .  	NUMBER	0112	
INT_44_LOW . . . . . . . . . . .  	NUMBER	0110	
IOCTL_2F . . . . . . . . . . . .  	NUMBER	0001	

Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:43:57
PARSE CODE AND CONTROL BLOCKS FOR DISPLAY.SYS               Symbols-5


KEYSW  . . . . . . . . . . . . .  	NUMBER	0001	

LCD_FOUND  . . . . . . . . . . .  	NUMBER	0002	
LCD_MODEL  . . . . . . . . . . .  	NUMBER	00F9	
LFEOLSW  . . . . . . . . . . . .  	NUMBER	0001	
LOOP1  . . . . . . . . . . . . .  	L BYTE	0C2C	CODE
LOOP2  . . . . . . . . . . . . .  	L BYTE	0C2D	CODE

MONO_ADDRESS . . . . . . . . . .  	NUMBER	B000	
MONO_FOUND . . . . . . . . . . .  	NUMBER	0008	

NAME_LEN . . . . . . . . . . . .  	NUMBER	0008	
NHD  . . . . . . . . . . . . . .  	TEXT  ES:[DI]		
NINE . . . . . . . . . . . . . .  	NUMBER	0009	
NOT_CY . . . . . . . . . . . . .  	NUMBER	FFFE	
NOVALS . . . . . . . . . . . . .  	L BYTE	0BF6	CODE
NUMBER . . . . . . . . . . . . .  	NUMBER	0001	
NUMSW  . . . . . . . . . . . . .  	NUMBER	0001	
NUM_DEVICE_TYPES . . . . . . . .  	NUMBER	0002	

OFF  . . . . . . . . . . . . . .  	NUMBER	0000	
OFFSET_NUM . . . . . . . . . . .  	L WORD	0C03	CODE
OK_FLAG  . . . . . . . . . . . .  	L BYTE	0C2B	CODE
ON . . . . . . . . . . . . . . .  	NUMBER	0001	
ONE  . . . . . . . . . . . . . .  	NUMBER	0001	

PARMS1 . . . . . . . . . . . . .  	L WORD	0B80	CODE
PARMS2 . . . . . . . . . . . . .  	L WORD	0BA8	CODE
PARMS3 . . . . . . . . . . . . .  	L WORD	0BD9	CODE
PARMS3_X . . . . . . . . . . . .  	L WORD	0BD0	CODE
PARMSX1  . . . . . . . . . . . .  	L BYTE	0B83	CODE
PARMSX2  . . . . . . . . . . . .  	L BYTE	0BAB	CODE
PARMSX3  . . . . . . . . . . . .  	L BYTE	0BDC	CODE
PARMSX3_X  . . . . . . . . . . .  	L BYTE	0BD3	CODE
PARSER . . . . . . . . . . . . .  	N PROC	0C2E	CODE	Global	Length = 007F
PARSE_COMP . . . . . . . . . . .  	N PROC	0D73	CODE	Length = 0059
PARSE_COMPLEX  . . . . . . . . .  	N PROC	0D17	CODE	Length = 0011
PARSE_COMP_X . . . . . . . . . .  	N PROC	0D28	CODE	Length = 004B
PARSE_MAIN . . . . . . . . . . .  	N PROC	0CAD	CODE	Length = 006A
PARSE_NUM  . . . . . . . . . . .  	N PROC	0DF1	CODE	Length = 002A
PARSE_STR  . . . . . . . . . . .  	N PROC	0DCC	CODE	Length = 0025
PREPS  . . . . . . . . . . . . .  	L BYTE	0BE4	CODE
PSDATA_SEG . . . . . . . . . . .  	ALIAS	 CS		

QUSSW  . . . . . . . . . . . . .  	NUMBER	0001	

RC_EOL . . . . . . . . . . . . .  	NUMBER	-0001	
RC_NO_ERROR  . . . . . . . . . .  	NUMBER	0000	
RECALC_ON  . . . . . . . . . . .  	NUMBER	0010	
RESULT_BUF . . . . . . . . . . .  	L BYTE	0BF7	CODE
RESULT_TYPE  . . . . . . . . . .  	L BYTE	0BF7	CODE
RESULT_VAL . . . . . . . . . . .  	L DWORD	0BFB	CODE
RH . . . . . . . . . . . . . . .  	TEXT  ES:[DI]		

Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:43:57
PARSE CODE AND CONTROL BLOCKS FOR DISPLAY.SYS               Symbols-6


SEVEN  . . . . . . . . . . . . .  	NUMBER	0007	
SIX  . . . . . . . . . . . . . .  	NUMBER	0006	
STAT_CMDERR  . . . . . . . . . .  	NUMBER	8000	
STAT_DONE  . . . . . . . . . . .  	NUMBER	0001	
STRING . . . . . . . . . . . . .  	NUMBER	0003	
SUBFONTS . . . . . . . . . . . .  	L BYTE	0BED	CODE
SWSW . . . . . . . . . . . . . .  	NUMBER	0000	
SYSPARSE . . . . . . . . . . . .  	N PROC	00DE	CODE	Length = 01CB

T3_LENGTH  . . . . . . . . . . .  	L WORD	0C0D	CODE
T3_NAME  . . . . . . . . . . . .  	L BYTE	0C0F	CODE
T4_LENGTH  . . . . . . . . . . .  	L WORD	0C17	CODE
T4_NAME  . . . . . . . . . . . .  	L BYTE	0C19	CODE
T5_NUM . . . . . . . . . . . . .  	L WORD	0C21	CODE
T5_VALUE . . . . . . . . . . . .  	L WORD	0C23	CODE
T6_DESG  . . . . . . . . . . . .  	L WORD	0C27	CODE
T6_FONT  . . . . . . . . . . . .  	L WORD	0C29	CODE
T6_NUM . . . . . . . . . . . . .  	L WORD	0C25	CODE
TABLE  . . . . . . . . . . . . .  	L BYTE	0BFF	CODE	Global
TABLE2 . . . . . . . . . . . . .  	L WORD	0C03	CODE
TABLE2_PTR . . . . . . . . . . .  	L WORD	0C01	CODE
TABLE3 . . . . . . . . . . . . .  	L WORD	0C0D	CODE
TABLE3_PTR . . . . . . . . . . .  	L WORD	0C05	CODE
TABLE4 . . . . . . . . . . . . .  	L WORD	0C17	CODE
TABLE4_PTR . . . . . . . . . . .  	L WORD	0C07	CODE
TABLE5 . . . . . . . . . . . . .  	L WORD	0C21	CODE
TABLE5_PTR . . . . . . . . . . .  	L WORD	0C09	CODE
TABLE6 . . . . . . . . . . . . .  	L WORD	0C25	CODE
TABLE6_PTR . . . . . . . . . . .  	L WORD	0C0B	CODE
TEN  . . . . . . . . . . . . . .  	NUMBER	000A	
THREE  . . . . . . . . . . . . .  	NUMBER	0003	
TIMESW . . . . . . . . . . . . .  	NUMBER	0001	
TWELVE . . . . . . . . . . . . .  	NUMBER	000C	
TWO  . . . . . . . . . . . . . .  	NUMBER	0002	

VAL1SW . . . . . . . . . . . . .  	NUMBER	0000	
VAL2SW . . . . . . . . . . . . .  	NUMBER	0000	
VAL3SW . . . . . . . . . . . . .  	NUMBER	0000	
VGA_FOUND  . . . . . . . . . . .  	NUMBER	0001	
VIDEO_CTRL . . . . . . . . . . .  	NUMBER	0487	

ZERO . . . . . . . . . . . . . .  	NUMBER	0000	

$L1  . . . . . . . . . . . . . .  	L NEAR	0C46	CODE
$L12 . . . . . . . . . . . . . .  	L NEAR	0C7D	CODE
$L16 . . . . . . . . . . . . . .  	L NEAR	0CA8	CODE
$L17 . . . . . . . . . . . . . .  	L NEAR	0CA7	CODE
$L18 . . . . . . . . . . . . . .  	L NEAR	0C9D	CODE
$L2  . . . . . . . . . . . . . .  	L NEAR	0C8D	CODE
$L20 . . . . . . . . . . . . . .  	L NEAR	0CBF	CODE
$L21 . . . . . . . . . . . . . .  	L NEAR	0D12	CODE
$L24 . . . . . . . . . . . . . .  	L NEAR	0CD9	CODE
$L27 . . . . . . . . . . . . . .  	L NEAR	0D0D	CODE
$L28 . . . . . . . . . . . . . .  	L NEAR	0CEC	CODE
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:43:57
PARSE CODE AND CONTROL BLOCKS FOR DISPLAY.SYS               Symbols-7


$L30 . . . . . . . . . . . . . .  	L NEAR	0CFA	CODE
$L32 . . . . . . . . . . . . . .  	L NEAR	0D07	CODE
$L35 . . . . . . . . . . . . . .  	L NEAR	0D27	CODE
$L36 . . . . . . . . . . . . . .  	L NEAR	0D24	CODE
$L39 . . . . . . . . . . . . . .  	L NEAR	0D3A	CODE
$L40 . . . . . . . . . . . . . .  	L NEAR	0D6E	CODE
$L43 . . . . . . . . . . . . . .  	L NEAR	0D5C	CODE
$L44 . . . . . . . . . . . . . .  	L NEAR	0D54	CODE
$L46 . . . . . . . . . . . . . .  	L NEAR	0D85	CODE
$L47 . . . . . . . . . . . . . .  	L NEAR	0DC7	CODE
$L5  . . . . . . . . . . . . . .  	L NEAR	0C60	CODE
$L50 . . . . . . . . . . . . . .  	L NEAR	0DA7	CODE
$L51 . . . . . . . . . . . . . .  	L NEAR	0D9F	CODE
$L53 . . . . . . . . . . . . . .  	L NEAR	0DC2	CODE
$L54 . . . . . . . . . . . . . .  	L NEAR	0DBE	CODE
$L57 . . . . . . . . . . . . . .  	L NEAR	0DED	CODE
$L60 . . . . . . . . . . . . . .  	L NEAR	0DDE	CODE
$L61 . . . . . . . . . . . . . .  	L NEAR	0DE6	CODE
$L63 . . . . . . . . . . . . . .  	L NEAR	0E1A	CODE
$L64 . . . . . . . . . . . . . .  	L NEAR	0E09	CODE
$L68 . . . . . . . . . . . . . .  	L NEAR	0EB9	CODE
$L69 . . . . . . . . . . . . . .  	L NEAR	0E8F	CODE
$L73 . . . . . . . . . . . . . .  	L NEAR	0EA1	CODE
$L79 . . . . . . . . . . . . . .  	L NEAR	0EE8	CODE
$L8  . . . . . . . . . . . . . .  	L NEAR	0C88	CODE
$L80 . . . . . . . . . . . . . .  	L NEAR	0EE7	CODE
$L82 . . . . . . . . . . . . . .  	L NEAR	0EC8	CODE
$L83 . . . . . . . . . . . . . .  	L NEAR	0ED3	CODE
$L9  . . . . . . . . . . . . . .  	L NEAR	0C82	CODE
$LL16  . . . . . . . . . . . . .  	NUMBER	0010	
$LL35  . . . . . . . . . . . . .  	NUMBER	0023	
$LL53  . . . . . . . . . . . . .  	NUMBER	0035	
$LL57  . . . . . . . . . . . . .  	NUMBER	0039	
$LL68  . . . . . . . . . . . . .  	NUMBER	0044	
$LL79  . . . . . . . . . . . . .  	NUMBER	004F	
$LL8 . . . . . . . . . . . . . .  	NUMBER	0008	
$P_0099  . . . . . . . . . . . .  	N PROC	0607	CODE	Length = 000E
$P_0099ERR . . . . . . . . . . .  	L NEAR	0613	CODE
$P_1ST_VAL . . . . . . . . . . .  	L WORD	00C0	CODE
$P_2ND_VAL . . . . . . . . . . .  	L WORD	00C2	CODE
$P_3RD_VAL . . . . . . . . . . .  	L WORD	00C4	CODE
$P_4TH_VAL . . . . . . . . . . .  	L WORD	00C6	CODE
$P_ASCII80 . . . . . . . . . . .  	NUMBER	0080	
$P_BL_EQ . . . . . . . . . . . .  	NUMBER	203D	
$P_BRIDGE  . . . . . . . . . . .  	L NEAR	042D	CODE
$P_CAPS_RET  . . . . . . . . . .  	L NEAR	0546	CODE
$P_CAP_CHAR  . . . . . . . . . .  	NUMBER	0002	
$P_CAP_FILE  . . . . . . . . . .  	NUMBER	0001	
$P_CHAR_CAP_PTR  . . . . . . . .  	L BYTE	00C8	CODE
$P_CHECK_MATCH_FLAGS . . . . . .  	N PROC	03D7	CODE	Length = 00DD
$P_CHECK_OVF . . . . . . . . . .  	N PROC	05F5	CODE	Length = 0012
$P_CHKDFIN . . . . . . . . . . .  	L NEAR	0AF3	CODE
$P_CHK_DBCS  . . . . . . . . . .  	N PROC	0B2A	CODE	Length = 0056
$P_CHK_DELIM . . . . . . . . . .  	N PROC	0AAB	CODE	Length = 0061
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:43:57
PARSE CODE AND CONTROL BLOCKS FOR DISPLAY.SYS               Symbols-8


$P_CHK_DELIM00 . . . . . . . . .  	L NEAR	0AC5	CODE
$P_CHK_DELIM01 . . . . . . . . .  	L NEAR	0AD5	CODE
$P_CHK_DELIM_EXIT  . . . . . . .  	L NEAR	0AF3	CODE
$P_CHK_DELIM_EXIT0 . . . . . . .  	L NEAR	0AF6	CODE
$P_CHK_DELIM_LOOP  . . . . . . .  	L NEAR	0AE9	CODE
$P_CHK_DELIM_NZ  . . . . . . . .  	L NEAR	0AF1	CODE
$P_CHK_EOL . . . . . . . . . . .  	N PROC	0A75	CODE	Length = 0036
$P_CHK_EOL_EXIT  . . . . . . . .  	L NEAR	0AA8	CODE
$P_CHK_EOL_LOOP  . . . . . . . .  	L NEAR	0A9E	CODE
$P_CHK_EOL_NZ  . . . . . . . . .  	L NEAR	0AA6	CODE
$P_CHK_KEY_CONTROL . . . . . . .  	N PROC	02DB	CODE	Length = 0044
$P_CHK_KEY_ERR0  . . . . . . . .  	L NEAR	030A	CODE
$P_CHK_KEY_ERR1  . . . . . . . .  	L NEAR	030D	CODE
$P_CHK_KEY_ERREXIT . . . . . . .  	L NEAR	0314	CODE
$P_CHK_KEY_EXIT  . . . . . . . .  	L NEAR	031E	CODE
$P_CHK_POS_CONTROL . . . . . . .  	N PROC	02A9	CODE	Length = 0032
$P_CHK_SWITCH  . . . . . . . . .  	N PROC	0B0C	CODE	Length = 001E
$P_CHK_SW_CONTROL  . . . . . . .  	N PROC	0350	CODE	Length = 0002
$P_CMPX00  . . . . . . . . . . .  	L NEAR	08F2	CODE
$P_CMPX01  . . . . . . . . . . .  	L NEAR	08FC	CODE
$P_CMPX02  . . . . . . . . . . .  	L NEAR	0918	CODE
$P_CMPX03  . . . . . . . . . . .  	L NEAR	091F	CODE
$P_CMPX04  . . . . . . . . . . .  	L NEAR	090C	CODE
$P_CMPX05  . . . . . . . . . . .  	L NEAR	091B	CODE
$P_CMPXERR0  . . . . . . . . . .  	L NEAR	0937	CODE
$P_CMPX_ERR  . . . . . . . . . .  	L NEAR	0940	CODE
$P_CMPX_EXIT . . . . . . . . . .  	L NEAR	0947	CODE
$P_CMPX_LOOP . . . . . . . . . .  	L NEAR	08E3	CODE
$P_CMPX_S  . . . . . . . . . . .  	NUMBER	0400	
$P_COLON . . . . . . . . . . . .  	NUMBER	003A	
$P_COLON_IS_NOT_NECESSARY  . . .  	NUMBER	0020	
$P_COLON_PERIOD  . . . . . . . .  	NUMBER	0001	
$P_COMMA . . . . . . . . . . . .  	NUMBER	002C	
$P_COMPLEX . . . . . . . . . . .  	NUMBER	0004	
$P_COMPLEX_FORMAT  . . . . . . .  	N PROC	08D4	CODE	Length = 007E
$P_COUNTRY_INFO  . . . . . . . .  	L 	009E	CODE
$P_COUNT_TO_EOL  . . . . . . . .  	L WORD	00DB	CODE
$P_COVF  . . . . . . . . . . . .  	L NEAR	0600	CODE
$P_COVF00  . . . . . . . . . . .  	L NEAR	0605	CODE
$P_CPC00 . . . . . . . . . . . .  	L NEAR	02B7	CODE
$P_CPC01 . . . . . . . . . . . .  	L NEAR	02D6	CODE
$P_CPC02 . . . . . . . . . . . .  	L NEAR	02CB	CODE
$P_CPC_EXIT  . . . . . . . . . .  	L NEAR	02D9	CODE
$P_CR  . . . . . . . . . . . . .  	NUMBER	000D	
$P_DATE_DMY  . . . . . . . . . .  	NUMBER	0001	
$P_DATE_F  . . . . . . . . . . .  	NUMBER	0007	
$P_DATE_MDY  . . . . . . . . . .  	NUMBER	0000	
$P_DATE_S  . . . . . . . . . . .  	NUMBER	1000	
$P_DATE_YMD  . . . . . . . . . .  	NUMBER	0002	
$P_DBCS00  . . . . . . . . . . .  	L NEAR	0B5C	CODE
$P_DBCS01  . . . . . . . . . . .  	L NEAR	0B77	CODE
$P_DBCS02  . . . . . . . . . . .  	L NEAR	0B52	CODE
$P_DBCSEV_OFF  . . . . . . . . .  	L WORD	0009	CODE
$P_DBCSEV_SEG  . . . . . . . . .  	L WORD	000B	CODE
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:43:57
PARSE CODE AND CONTROL BLOCKS FOR DISPLAY.SYS               Symbols-9


$P_DBCS_EXIT . . . . . . . . . .  	L NEAR	0B7C	CODE
$P_DBCS_LOOP . . . . . . . . . .  	L NEAR	0B66	CODE
$P_DBSP1 . . . . . . . . . . . .  	NUMBER	0081	
$P_DBSP2 . . . . . . . . . . . .  	NUMBER	0040	
$P_DCC00 . . . . . . . . . . . .  	L NEAR	0519	CODE
$P_DCC01 . . . . . . . . . . . .  	L NEAR	0535	CODE
$P_DCC_GO  . . . . . . . . . . .  	L NEAR	0509	CODE
$P_DCS00 . . . . . . . . . . . .  	L NEAR	04F2	CODE
$P_DCS01 . . . . . . . . . . . .  	L NEAR	04F3	CODE
$P_DCS_EXIT  . . . . . . . . . .  	L NEAR	04F6	CODE
$P_DCS_LOOP  . . . . . . . . . .  	L NEAR	04DE	CODE
$P_DO1 . . . . . . . . . . . . .  	L NEAR	0123	CODE
$P_DO2 . . . . . . . . . . . . .  	L NEAR	012B	CODE
$P_DOSTBL_BL . . . . . . . . . .  	NUMBER	0005	
$P_DOSTBL_CHAR . . . . . . . . .  	NUMBER	0002	
$P_DOSTBL_DEF  . . . . . . . . .  	NUMBER	-0001	
$P_DOSTBL_FILE . . . . . . . . .  	NUMBER	0004	
$P_DOS_GETEV . . . . . . . . . .  	NUMBER	6300	
$P_DOS_GET_CDI . . . . . . . . .  	NUMBER	3800	
$P_DOS_GET_TBL . . . . . . . . .  	NUMBER	0065	
$P_DOUBLE_QUOTE  . . . . . . . .  	NUMBER	0022	
$P_DO_CAPS_CHAR  . . . . . . . .  	N PROC	04F9	CODE	Length = 004E
$P_DO_CAPS_STRING  . . . . . . .  	N PROC	04DA	CODE	Length = 001F
$P_DO_DATE_DELIMS  . . . . . . .  	L NEAR	0748	CODE
$P_DO_TIME_DELIM1  . . . . . . .  	L NEAR	0742	CODE
$P_DQUOTE  . . . . . . . . . . .  	NUMBER	0022	
$P_DRIVE . . . . . . . . . . . .  	NUMBER	0006	
$P_DRV_ONLY  . . . . . . . . . .  	NUMBER	0100	
$P_DRV_ONLY_EXIT . . . . . . . .  	L NEAR	0A39	CODE
$P_DX  . . . . . . . . . . . . .  	L WORD	0006	CODE
$P_EOL . . . . . . . . . . . . .  	NUMBER	0000	
$P_EQU . . . . . . . . . . . . .  	NUMBER	0001	
$P_EQ_BL . . . . . . . . . . . .  	NUMBER	3D20	
$P_EQ_TB . . . . . . . . . . . .  	NUMBER	3D09	
$P_ERROR_FILESPEC  . . . . . . .  	NUMBER	0001	
$P_ERR_FLAG  . . . . . . . . . .  	L BYTE	00DD	CODE
$P_EXIT_AT_EXTRA . . . . . . . .  	L NEAR	0A73	CODE
$P_EXTRA . . . . . . . . . . . .  	NUMBER	0020	
$P_FILEF00 . . . . . . . . . . .  	L NEAR	0A1A	CODE
$P_FILEF01 . . . . . . . . . . .  	L NEAR	0A16	CODE
$P_FILEF02 . . . . . . . . . . .  	L NEAR	0A2A	CODE
$P_FILEF03 . . . . . . . . . . .  	L NEAR	0A01	CODE
$P_FILEF_ERR . . . . . . . . . .  	L NEAR	09EB	CODE
$P_FILEF_LOOP0 . . . . . . . . .  	L NEAR	09D1	CODE
$P_FILEF_LOOP1 . . . . . . . . .  	L NEAR	0A03	CODE
$P_FILEF_RLT . . . . . . . . . .  	L NEAR	0A28	CODE
$P_FILESP_CHAR . . . . . . . . .  	L BYTE	00D2	CODE
$P_FILESP_CHK  . . . . . . . . .  	N PROC	0A3A	CODE	Length = 0015
$P_FILESP_EXIT . . . . . . . . .  	L NEAR	0A4C	CODE
$P_FILESP_LEN  . . . . . . . . .  	NUMBER	0009	
$P_FILESP_LOOP . . . . . . . . .  	L NEAR	0A43	CODE
$P_FILE_CAP_PTR  . . . . . . . .  	L BYTE	00CD	CODE
$P_FILE_FORMAT . . . . . . . . .  	N PROC	09C9	CODE	Length = 0071
$P_FILE_SPC  . . . . . . . . . .  	NUMBER	0200	
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:43:57
PARSE CODE AND CONTROL BLOCKS FOR DISPLAY.SYS               Symbols-10


$P_FILE_SPEC . . . . . . . . . .  	NUMBER	0005	
$P_FILL_RESULT . . . . . . . . .  	N PROC	0352	CODE	Length = 0085
$P_FIN . . . . . . . . . . . . .  	L NEAR	0186	CODE
$P_FLAGS . . . . . . . . . . . .  	L WORD	000D	CODE
$P_FLAGS1  . . . . . . . . . . .  	BYTE	000D	CODE
$P_FLAGS2  . . . . . . . . . . .  	BYTE	000E	CODE
$P_FOUND_SYNONYM . . . . . . . .  	L WORD	0015	CODE
$P_GETNUM00  . . . . . . . . . .  	L NEAR	076D	CODE
$P_GETNUM01  . . . . . . . . . .  	L NEAR	0772	CODE
$P_GETNUM02  . . . . . . . . . .  	L NEAR	0776	CODE
$P_GETNUM_EXIT . . . . . . . . .  	L NEAR	0777	CODE
$P_GETNUM_LOOP . . . . . . . . .  	L NEAR	072A	CODE
$P_GET_DECNUM  . . . . . . . . .  	N PROC	0726	CODE	Length = 0056
$P_GOT_TIME  . . . . . . . . . .  	L BYTE	009D	CODE
$P_IF3 . . . . . . . . . . . . .  	L NEAR	0132	CODE
$P_IF5 . . . . . . . . . . . . .  	L NEAR	0166	CODE
$P_IF6 . . . . . . . . . . . . .  	L NEAR	0166	CODE
$P_IG_COLON  . . . . . . . . . .  	NUMBER	0010	
$P_I_HAVE_DELIM  . . . . . . . .  	NUMBER	0001	
$P_I_HAVE_EOL  . . . . . . . . .  	NUMBER	0002	
$P_I_USE_DEFAULT . . . . . . . .  	NUMBER	0000	
$P_KEYORSW_EXIT  . . . . . . . .  	L NEAR	0341	CODE
$P_KEYORSW_FOUND . . . . . . . .  	L NEAR	033B	CODE
$P_KEYORSW_LOOP  . . . . . . . .  	L NEAR	032E	CODE
$P_KEYORSW_NOT_FOUND . . . . . .  	L NEAR	0338	CODE
$P_KEYORSW_PTR . . . . . . . . .  	L WORD	0011	CODE
$P_KEYWORD . . . . . . . . . . .  	NUMBER	003D	
$P_KEY_CMP . . . . . . . . . . .  	NUMBER	0008	
$P_KEY_MANAGER . . . . . . . . .  	L NEAR	0258	CODE
$P_KEY_MGR_LOOP  . . . . . . . .  	L NEAR	0277	CODE
$P_KEY_NOT_FOUND . . . . . . . .  	L NEAR	0285	CODE
$P_LEN_PARMS . . . . . . . . . .  	NUMBER	0004	
$P_LEN_RANGE . . . . . . . . . .  	NUMBER	0009	
$P_LEN_STRING  . . . . . . . . .  	NUMBER	0003	
$P_LEN_VALUE . . . . . . . . . .  	NUMBER	0005	
$P_LF  . . . . . . . . . . . . .  	NUMBER	000A	
$P_LIST_IDX  . . . . . . . . . .  	NUMBER	0002	
$P_LL6 . . . . . . . . . . . . .  	L NEAR	014C	CODE
$P_LOC_EOL . . . . . . . . . . .  	L NEAR	0116	CODE
$P_LPAREN  . . . . . . . . . . .  	NUMBER	0028	
$P_MAKE_LOWER  . . . . . . . . .  	NUMBER	0020	
$P_MAKE_UPPER  . . . . . . . . .  	NUMBER	00DF	
$P_MAT . . . . . . . . . . . . .  	L NEAR	03FD	CODE
$P_MATCH01 . . . . . . . . . . .  	L NEAR	0414	CODE
$P_MATCH03 . . . . . . . . . . .  	L NEAR	0430	CODE
$P_MATCH04 . . . . . . . . . . .  	L NEAR	0447	CODE
$P_MATCH05 . . . . . . . . . . .  	L NEAR	045E	CODE
$P_MATCH07 . . . . . . . . . . .  	L NEAR	0475	CODE
$P_MATCH08 . . . . . . . . . . .  	L NEAR	048C	CODE
$P_MATCH09 . . . . . . . . . . .  	L NEAR	049B	CODE
$P_MATCH2_EXIT . . . . . . . . .  	L NEAR	04B2	CODE
$P_MATCH_EXIT  . . . . . . . . .  	L NEAR	049B	CODE
$P_MBP_EXIT  . . . . . . . . . .  	L NEAR	034E	CODE
$P_MBP_LOOP  . . . . . . . . . .  	L NEAR	0344	CODE
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:43:57
PARSE CODE AND CONTROL BLOCKS FOR DISPLAY.SYS               Symbols-11


$P_MINUS . . . . . . . . . . . .  	NUMBER	002D	
$P_MOVEBP_NUL  . . . . . . . . .  	N PROC	0344	CODE	Length = 000C
$P_NEEDTOBEREAD  . . . . . . . .  	NUMBER	FFFF	
$P_NEG . . . . . . . . . . . . .  	NUMBER	0002	
$P_NEITHER_DELIMS  . . . . . . .  	L NEAR	0754	CODE
$P_NON_DBCS  . . . . . . . . . .  	L NEAR	0B7B	CODE
$P_NOT_IN_KEY  . . . . . . . . .  	NUMBER	0004	
$P_NOT_IN_STR  . . . . . . . . .  	NUMBER	0008	
$P_NOT_IN_SW . . . . . . . . . .  	NUMBER	0003	
$P_NOT_IN_VAL  . . . . . . . . .  	NUMBER	0007	
$P_NO_ERROR  . . . . . . . . . .  	NUMBER	0000	
$P_NO_NRNG . . . . . . . . . . .  	NUMBER	0000	
$P_NO_SET_EXTRA  . . . . . . . .  	L NEAR	0B08	CODE
$P_NO_TAG  . . . . . . . . . . .  	NUMBER	00FF	
$P_NULL  . . . . . . . . . . . .  	NUMBER	0000	
$P_NUMBER  . . . . . . . . . . .  	NUMBER	0001	
$P_NUM_VAL . . . . . . . . . . .  	NUMBER	8000	
$P_NVAL_NONE . . . . . . . . . .  	NUMBER	0000	
$P_NVAL_RANGE  . . . . . . . . .  	NUMBER	0001	
$P_NVAL_STRING . . . . . . . . .  	NUMBER	0003	
$P_NVAL_VALUE  . . . . . . . . .  	NUMBER	0002	
$P_OPTIONAL  . . . . . . . . . .  	NUMBER	0001	
$P_OP_MISSING  . . . . . . . . .  	NUMBER	0002	
$P_ORDINAL . . . . . . . . . . .  	L WORD	0000	CODE
$P_ORIG_ORD  . . . . . . . . . .  	L WORD	0097	CODE
$P_ORIG_SI . . . . . . . . . . .  	L WORD	009B	CODE
$P_ORIG_STACK  . . . . . . . . .  	L WORD	0099	CODE
$P_OUT_OF_RANGE  . . . . . . . .  	NUMBER	0006	
$P_PACK_END  . . . . . . . . . .  	L NEAR	01E1	CODE
$P_PACK_END_BACKUP_SI  . . . . .  	L NEAR	01BB	CODE
$P_PACK_END_BY_EOL . . . . . . .  	L NEAR	01E0	CODE
$P_PACK_LOOP . . . . . . . . . .  	L NEAR	019E	CODE
$P_PERIOD  . . . . . . . . . . .  	NUMBER	002E	
$P_PERIOD_ONLY . . . . . . . . .  	NUMBER	0002	
$P_PL00  . . . . . . . . . . . .  	L NEAR	01D3	CODE
$P_PL01  . . . . . . . . . . . .  	L NEAR	01C6	CODE
$P_PLUS  . . . . . . . . . . . .  	NUMBER	002B	
$P_POSITIONAL_MANAGER  . . . . .  	L NEAR	0204	CODE
$P_QUOTED_FORMAT . . . . . . . .  	N PROC	0952	CODE	Length = 0041
$P_QUOTED_STR  . . . . . . . . .  	N PROC	0993	CODE	Length = 0036
$P_QUOTED_STRING . . . . . . . .  	NUMBER	0009	
$P_QUOTED_STR_EXIT . . . . . . .  	L NEAR	09C7	CODE
$P_QUS00 . . . . . . . . . . . .  	L NEAR	09AC	CODE
$P_QUS01 . . . . . . . . . . . .  	L NEAR	09B8	CODE
$P_QUS02 . . . . . . . . . . . .  	L NEAR	09C2	CODE
$P_QUSTR_ERR0  . . . . . . . . .  	L NEAR	09BF	CODE
$P_QUS_ERR . . . . . . . . . . .  	L NEAR	0981	CODE
$P_QUS_ERR0  . . . . . . . . . .  	L NEAR	0978	CODE
$P_QUS_EXIT  . . . . . . . . . .  	L NEAR	0988	CODE
$P_QUS_LOOP  . . . . . . . . . .  	L NEAR	0994	CODE
$P_QU_STRING . . . . . . . . . .  	NUMBER	0080	
$P_RC  . . . . . . . . . . . . .  	L WORD	0002	CODE
$P_RCOL00  . . . . . . . . . . .  	L NEAR	04CE	CODE
$P_RCOL01  . . . . . . . . . . .  	L NEAR	04D4	CODE
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:43:57
PARSE CODE AND CONTROL BLOCKS FOR DISPLAY.SYS               Symbols-12


$P_RCOL_EXIT . . . . . . . . . .  	L NEAR	04D7	CODE
$P_RCOL_LOOP . . . . . . . . . .  	L NEAR	04B6	CODE
$P_RC_EOL  . . . . . . . . . . .  	NUMBER	-0001	
$P_READ_CDI  . . . . . . . . . .  	L NEAR	0716	CODE
$P_REDO_TIME . . . . . . . . . .  	L NEAR	00F4	CODE
$P_REG_BH_CG_SW  . . . . . . . .  	ALIAS	 BH		
$P_REG_BL_DQ_SW  . . . . . . . .  	ALIAS	 BL		
$P_REMOVE_COLON  . . . . . . . .  	N PROC	04B4	CODE	Length = 0026
$P_REPEAT  . . . . . . . . . . .  	NUMBER	0002	
$P_RETURN_TO_CALLER  . . . . . .  	L NEAR	028C	CODE
$P_RETURN_TO_CALLER0 . . . . . .  	L NEAR	028C	CODE
$P_RLT00 . . . . . . . . . . . .  	L NEAR	037B	CODE
$P_RLT01 . . . . . . . . . . . .  	L NEAR	0385	CODE
$P_RLT02 . . . . . . . . . . . .  	L NEAR	0371	CODE
$P_RLT03 . . . . . . . . . . . .  	L NEAR	0397	CODE
$P_RLT04 . . . . . . . . . . . .  	L NEAR	036D	CODE
$P_RLT05 . . . . . . . . . . . .  	L NEAR	03AA	CODE
$P_RLT_CAP00 . . . . . . . . . .  	L NEAR	03BE	CODE
$P_RLT_CAP01 . . . . . . . . . .  	L NEAR	03CA	CODE
$P_RLT_CAP02 . . . . . . . . . .  	L NEAR	03C7	CODE
$P_RLT_EXIT  . . . . . . . . . .  	L NEAR	03D5	CODE
$P_RM_COLON  . . . . . . . . . .  	NUMBER	0010	
$P_RPAREN  . . . . . . . . . . .  	NUMBER	0029	
$P_SAVESI_CMPX . . . . . . . . .  	L WORD	000F	CODE
$P_SAVE_EOB  . . . . . . . . . .  	L WORD	0013	CODE
$P_SCOM00  . . . . . . . . . . .  	L NEAR	06C8	CODE
$P_SCOM01  . . . . . . . . . . .  	L NEAR	06DB	CODE
$P_SCOM02  . . . . . . . . . . .  	L NEAR	06F1	CODE
$P_SCOM03  . . . . . . . . . . .  	L NEAR	06BA	CODE
$P_SCOM04  . . . . . . . . . . .  	L NEAR	06A4	CODE
$P_SCOM05  . . . . . . . . . . .  	L NEAR	06B7	CODE
$P_SCOM_DIFFER . . . . . . . . .  	L NEAR	06FC	CODE
$P_SCOM_DIFFER0  . . . . . . . .  	L NEAR	06DD	CODE
$P_SCOM_EXIT . . . . . . . . . .  	L NEAR	0705	CODE
$P_SCOM_LOOP . . . . . . . . . .  	L NEAR	0684	CODE
$P_SCOM_SAME . . . . . . . . . .  	L NEAR	06FF	CODE
$P_SEARCH_KEYORSW  . . . . . . .  	N PROC	031F	CODE	Length = 0025
$P_SET_CDI . . . . . . . . . . .  	N PROC	070A	CODE	Length = 001C
$P_SET_CDI_EXIT  . . . . . . . .  	L NEAR	0725	CODE
$P_SIGNED  . . . . . . . . . . .  	NUMBER	0080	
$P_SIM00 . . . . . . . . . . . .  	L NEAR	0628	CODE
$P_SIM01 . . . . . . . . . . . .  	L NEAR	066B	CODE
$P_SIMPLE_S  . . . . . . . . . .  	NUMBER	2000	
$P_SIMPLE_STRING . . . . . . . .  	N PROC	0615	CODE	Length = 0069
$P_SIM_EXIT  . . . . . . . . . .  	L NEAR	0674	CODE
$P_SIM_EXIT0 . . . . . . . . . .  	L NEAR	0676	CODE
$P_SIM_FOUND . . . . . . . . . .  	L NEAR	0660	CODE
$P_SIM_LOOP  . . . . . . . . . .  	L NEAR	0646	CODE
$P_SINGLE_EXIT . . . . . . . . .  	L NEAR	02A7	CODE
$P_SI_SAVE . . . . . . . . . . .  	L WORD	0004	CODE
$P_SKIP_DELIM  . . . . . . . . .  	N PROC	0A4F	CODE	Length = 0026
$P_SKIP_DELIM_CY . . . . . . . .  	L NEAR	0A6D	CODE
$P_SKIP_DELIM_EXIT . . . . . . .  	L NEAR	0A71	CODE
$P_SKIP_DELIM_LOOP . . . . . . .  	L NEAR	0A4F	CODE
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:43:57
PARSE CODE AND CONTROL BLOCKS FOR DISPLAY.SYS               Symbols-13


$P_SKIP_DELIM_NCY  . . . . . . .  	L NEAR	0A70	CODE
$P_SLASH . . . . . . . . . . . .  	NUMBER	002F	
$P_SNUM_VAL  . . . . . . . . . .  	NUMBER	4000	
$P_SPACE . . . . . . . . . . . .  	NUMBER	0020	
$P_START . . . . . . . . . . . .  	L NEAR	018A	CODE
$P_STRING  . . . . . . . . . . .  	NUMBER	0003	
$P_STRING_BUF  . . . . . . . . .  	L BYTE	0017	CODE	Length = 0080
$P_STRING_BUF_END  . . . . . . .  	NEAR	0097	CODE
$P_STRING_COMP . . . . . . . . .  	N PROC	067E	CODE	Length = 008C
$P_STRUC_L1  . . . . . . . . . .  	L NEAR	0B29	CODE
$P_STRUC_L12 . . . . . . . . . .  	L NEAR	0B28	CODE
$P_STRUC_L2  . . . . . . . . . .  	L NEAR	0B1E	CODE
$P_STRUC_L5  . . . . . . . . . .  	L NEAR	0B1B	CODE
$P_SVAL00  . . . . . . . . . . .  	L NEAR	0565	CODE
$P_SVAL01  . . . . . . . . . . .  	L NEAR	0566	CODE
$P_SVALUE  . . . . . . . . . . .  	N PROC	0547	CODE	Length = 0024
$P_SW  . . . . . . . . . . . . .  	NUMBER	0040	
$P_SWITCH  . . . . . . . . . . .  	NUMBER	002F	
$P_SW_CMP  . . . . . . . . . . .  	NUMBER	0010	
$P_SW_MANAGER  . . . . . . . . .  	L NEAR	022C	CODE
$P_SW_MGR_LOOP . . . . . . . . .  	L NEAR	0241	CODE
$P_SW_NOT_FOUND  . . . . . . . .  	L NEAR	024F	CODE
$P_SYNTAX  . . . . . . . . . . .  	NUMBER	0009	
$P_T1200 . . . . . . . . . . . .  	L NEAR	08BE	CODE
$P_T1201 . . . . . . . . . . . .  	L NEAR	08C6	CODE
$P_T12_EXIT  . . . . . . . . . .  	L NEAR	08D1	CODE
$P_T12_LOOP  . . . . . . . . . .  	L NEAR	0893	CODE
$P_TAB . . . . . . . . . . . . .  	NUMBER	0009	
$P_TB_EQ . . . . . . . . . . . .  	NUMBER	093D	
$P_TCLR_CHR  . . . . . . . . . .  	L NEAR	08CC	CODE
$P_TERMINATOR  . . . . . . . . .  	L BYTE	0008	CODE
$P_TIME12  . . . . . . . . . . .  	NUMBER	0004	
$P_TIME12AM  . . . . . . . . . .  	NUMBER	0001	
$P_TIMEF00 . . . . . . . . . . .  	L NEAR	0790	CODE
$P_TIMEF_ERR . . . . . . . . . .  	L NEAR	0877	CODE
$P_TIMEF_ERR0  . . . . . . . . .  	L NEAR	0816	CODE
$P_TIMEF_ERROR . . . . . . . . .  	L NEAR	0877	CODE
$P_TIMEF_RLT . . . . . . . . . .  	L NEAR	0820	CODE
$P_TIMESKIP00  . . . . . . . . .  	L NEAR	084C	CODE
$P_TIME_2412 . . . . . . . . . .  	N PROC	0891	CODE	Length = 0043
$P_TIME_4  . . . . . . . . . . .  	L NEAR	0813	CODE
$P_TIME_AGAIN  . . . . . . . . .  	NUMBER	0002	
$P_TIME_F  . . . . . . . . . . .  	NUMBER	0008	
$P_TIME_FORMAT . . . . . . . . .  	N PROC	077C	CODE	Length = 0115
$P_TIME_FORMAT_EXIT  . . . . . .  	L NEAR	0887	CODE
$P_TIME_NOTAM  . . . . . . . . .  	L NEAR	0838	CODE
$P_TIME_S  . . . . . . . . . . .  	NUMBER	0800	
$P_TOO_MANY  . . . . . . . . . .  	NUMBER	0001	
$P_TOO_MANY_ERROR  . . . . . . .  	L NEAR	0223	CODE
$P_VALUE . . . . . . . . . . . .  	N PROC	056B	CODE	Length = 008A
$P_VALUE00 . . . . . . . . . . .  	L NEAR	05BD	CODE
$P_VALUE01 . . . . . . . . . . .  	L NEAR	05D0	CODE
$P_VALUE02 . . . . . . . . . . .  	L NEAR	05E2	CODE
$P_VALUE03 . . . . . . . . . . .  	L NEAR	05E2	CODE
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:43:57
PARSE CODE AND CONTROL BLOCKS FOR DISPLAY.SYS               Symbols-14


$P_VALUE04 . . . . . . . . . . .  	L NEAR	05E2	CODE
$P_VALUE_ERR . . . . . . . . . .  	L NEAR	05E2	CODE
$P_VALUE_ERR0  . . . . . . . . .  	L NEAR	05B9	CODE
$P_VALUE_EXIT  . . . . . . . . .  	L NEAR	05ED	CODE
$P_VALUE_LOOP  . . . . . . . . .  	L NEAR	0574	CODE
@CPU . . . . . . . . . . . . . .  	TEXT  0101h		
@FILENAME  . . . . . . . . . . .  	TEXT  parser		
@VERSION . . . . . . . . . . . .  	TEXT  510		


   5279 Source  Lines
  18329 Total   Lines
    847 Symbols

  45568 + 148957 Bytes symbol space free

      0 Warning Errors
      0 Severe  Errors
