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


				PAGE	    ,132
				TITLE	    PARSE CODE AND CONTROL BLOCKS FOR PRINTER.SYS
				
				;****************** START OF SPECIFICATIONS **************************
				;
				;  MODULE NAME: PARSER.ASM
				;
				;  DESCRIPTIVE NAME: PARSES THE DEVICE= STATEMENT IN CONFIG.SYS FOR
				;		     PRINTER.SYS
				;
				;  FUNCTION: THE COMMAND LINE PASSED TO PRINTER.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
				;
				;  EXTERNAL REFERENCES:
				;
				;     ROUTINES: N/A
				;
				;     DATA AREAS: TABLE - TO CONTAIN VALUES FOUND IN DEVICE= LINE
				;
				;  NOTES:
				;
				;  REVISION HISTORY:
				;	AN000; - DOS Version 4.00
				;	AN001 - GHG Changes had to made for P897.  The PARSER was
				;		    changed to need the '=' in the keywords.
				;
				;      Label: "DOS DISPLAY.SYS Device Driver"
				;	      "Version 4.00 (C) Copyright 1988 Microsoft
				;	      "Licensed Material - Program Property of Microsoft"
				;
				;
				;****************** END OF SPECIFICATIONS ****************************
				;*Modification history ********************************************************
				;AN001; p1482 - PRINTER.SYS refused to initialize		   10/6/87 J.K.
				;AN002; p2686 No range checking on n parameter for printer.sys	   12/11/87 J.K.
				;******************************************************************************
				
				
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:03
PARSE CODE AND CONTROL BLOCKS FOR PRINTER.SYS               Page     1-2


				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; The following is the table structure of the parser.	All fields are
				; 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)	 ³
				;					      ³ 			 ³
				;					      ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
				;
				;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:03
PARSE CODE AND CONTROL BLOCKS FOR PRINTER.SYS               Page     1-3


				;  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.
				;
				;
				; 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.
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:03
PARSE CODE AND CONTROL BLOCKS FOR PRINTER.SYS               Page     1-4


				; HWCP # N : a hardware code page number converted to binary.  The maximum
				; number of pages allowed is 10.
				;
				;
				;
				; 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.
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				
				
				.LIST
				
				INCLUDE     CPSPEQU.INC 							    ;AN000;
			     C	
			     C		PAGE	,132
			     C	
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;;
			     C	;;  FILENAME:	  CPS Printer Device Driver EQUAL Include
			     C	;;  MODULE NAME:  CPSEQU
			     C	;;  TYPE:	  Include File
			     C	;;
			     C	;;  LINK PROCEDURE:  See CPSPx.ASM
			     C	;;
			     C	;;  INCLUDE FILES:
			     C	;;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C						;;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;;
			     C	;;	Request Header (Common portion)
			     C	;;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     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	RHC_LEN DB	?			;; length of Request Header
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:03
PARSE CODE AND CONTROL BLOCKS FOR PRINTER.SYS               Page     1-5


 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						;;
			     C						;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C						;;
			     C						;; Command in the Request Header
			     C						;; (see CMD_CODES table)
			     C						;;
			     C						;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C						;;
 = 0000                      C	CMD_INI EQU	0			;; init  command
 = 0008                      C	CMD_WRT EQU	8			;; write command
 = 0013                      C	CMD_GIO EQU	19			;; generic IOCTL command
			     C						;; (see major/minor GIO functions)
			     C						;;
			     C						;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C						;;
			     C						;; status values for RHC_STA
			     C						;;
			     C						;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C						;;
 = 0001                      C	STAT_DONE EQU	01H			;; function complete - high order byte
 = 8003                      C	STAT_CMDERR EQU 8003H			;; invalid command code error
 = 8000                      C	STAT_ERROR EQU	8000H			;; error returned by normal driver
			     C						;;
			     C	;; see Generic IOCTL Request Header section
			     C	;; for more errorneous status.		;;
			     C						;;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;;
			     C	;;	Request Header for INIT
			     C	;;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C						;;
			     C						;;
			     C	RH0	STRUC				;;
 0000  000D[                 C		DB	(TYPE RHC) DUP (?)	;; common portion
	   ??                C	
			 ]   C	
			     C	
			     C						;;
 000D  00                    C		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 BPBA
 0016  00                    C		db	?
 0017  0000                  C	RH0_CONFIG_ERRMSG dw 0			;DCR D493 "Error in CONFIG.SYS..." msg flag.
 0019                        C	RH0	ENDS				;;
			     C						;;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:03
PARSE CODE AND CONTROL BLOCKS FOR PRINTER.SYS               Page     1-6


			     C	;;	Request Header for IOCTL
			     C	;;
			     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	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;;
			     C	;;	Request Header for GENERIC IOCTL
			     C	;;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C						;;
			     C	GIH	STRUC				;;
 0000  000D[                 C		DB	(TYPE RHC) DUP (?)	;; common portion
	   ??                C	
			 ]   C	
			     C	
			     C						;;
			     C						;;
 000D  00                    C	GIH_MAF DB	?			;; major function
 000E  00                    C	GIH_MIF DB	?			;; minor function
 000F  0000                  C	GIH_SI	DW	?			;; content of SI
 0011  0000                  C	GIH_DI	DW	?			;; content of DI
 0013  00000000              C	GIH_GBA DD	?			;; Address of Generic Buffer
 0017                        C	GIH	ENDS				;;
			     C						;;
			     C						;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C						;;
			     C						;; GIO major/minor functions
			     C						;; (see GIO_CODES table)
			     C						;;
			     C						;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 = 0003                      C	MAF_CON EQU	03			;; major function for CON  device
 = 0005                      C	MAF_PTR EQU	05			;; major function for LPTX device
			     C						;;
 = 004C                      C	MIF_DST EQU	4CH			;; minor function : designate start
 = 004D                      C	MIF_DEN EQU	4DH			;;		    designate end
 = 004A                      C	MIF_IVK EQU	4AH			;;		    invoke
 = 006A                      C	MIF_QIV EQU	6AH			;;		    query-invoked
 = 006B                      C	MIF_QLS EQU	6BH			;;		    query-list
			     C						;;
			     C						;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:03
PARSE CODE AND CONTROL BLOCKS FOR PRINTER.SYS               Page     1-7


			     C						;; Designate Start (MIF_DST)Flags
			     C						;; see GBIS structure
			     C						;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C						;;
 = 8000                      C	DSF_FIFOCP EQU	08000H			;; Single code page FIFO command
 = 0001                      C	DSF_CARTCP EQU	00001H			;; Code page for Cartridge/semi-
			     C						;; hardware RAM
			     C						;;
			     C						;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C						;; Generic IOCTL errorneous status
			     C						;; upon return
			     C						;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C						;;
 = 8000                      C	STAT_DELETE EQU 08000H			;; previous degignate deleted (DST)
			     C						;; STAT_DELETE : only for FIFO
 = 8008                      C	STAT_NOFIND EQU 08008H			;; codepage,device not found  (DST)
 = 800A                      C	STAT_DEVERR EQU 0800AH			;; Device error (DST,IVK,QIV,QLS,WRT)
 = 800C                      C	STAT_BADATA EQU 0800CH			;; bad font file (DST)
 = 800C                      C	STAT_NOBUFF EQU 0800CH			;; no font buffer for (REFRESH)
 = 800C                      C	STAT_BADDEN EQU 0800CH			;; no DST (DEN)
 = 8000                      C	STAT_bffDEN EQU 08000H			;; bad font file (DEN)
 = 800A                      C	STAT_TOMANY EQU 0800aH			;; too manay codepages (DST)
 = 800A                      C	STAT_DUPLCP EQU 0800aH			;; too manay codepages (DST)
 = 8007                      C	STAT_NOCPIV EQU 08007H			;; no codepage designated/invoked
 = 8007                      C	STAT_NOCP EQU	08007H			;; no codepage designated/invoked
			     C						;; (IVK, QIV, QLS)
			     C						;;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;;
			     C	;;	Generic IOCTL Buffer   DS:[SI]
			     C	;;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 = DS:[SI]                   C	GIOB	EQU	DS:[SI] 		;;
			     C						;;
			     C	GB1S	STRUC				;;
 0000  0000                  C	GB1_FLAG DW	?			;; flag
 0002  0000                  C	GB1_LEN DW	?			;; length
 0004  0000                  C	GB1_NUM DW	?			;; length
 0006  0000                  C	GB1_CP	DW	?			;;
 0008                        C	GB1S	ENDS				;;
			     C						;;
			     C						;;
			     C	GB2S	STRUC				;;
 0000  0000                  C	GB2_LEN DW	?			;; length
 0002  0000                  C	GB2_CP	DW	?			;;
 0004                        C	GB2S	ENDS				;;
			     C						;;
			     C						;;
			     C	GB3S	STRUC				;;
 0000  0000                  C	GB3_LEN DW	?			;; length
 0002  0000                  C	GB3_GBL DW	?			;; hardware code page number
 0004                        C	GB3S	ENDS				;;
			     C						;;
 = 0004                      C	GB3_MINILEN EQU 4			;; minimium length of GB3
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:03
PARSE CODE AND CONTROL BLOCKS FOR PRINTER.SYS               Page     1-8


			     C						;;
			     C	GBLS	STRUC				;;
 0000  0000                  C	GBL_LEN DW	?			;; length
 0002  0000                  C	GBL_CP	DW	?			;; hardware code page number
 0004                        C	GBLS	ENDS				;;
			     C						;;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;;
			     C	;;	DEVICE	Header	   DS:[SI]	-- to locate the next LPTn 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	;;
			     C	;;	FONT_PARSER data
			     C	;;
			     C	;;	-- Interface table : FTABLE
			     C	;;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C						;;
 = DS:[SI]                   C	FPKT	EQU	DS:[SI] 		;;
			     C						;;
 = ES:[BX]                   C	FTP	EQU	ES:[BX] 		;;
			     C						;; ( I=Input  O=Output )
			     C	FTBLK	STRUC				;;
 0000  002A                  C	FTB_LENGTH DW	TYPE FTBLK		;; (NOT TO BE CHANGED)
 0002  FFFF                  C	FTB_STATUS DW	0FFFFH			;; (O) parsing compelte
 0004  0000                  C	FTB_TYPE DW	0			;; (O)
 0006  0008[                 C	FTB_TID DB	8   DUP(?)		;; (I)
	   ??                C	
			 ]   C	
			     C	
 000E  FFFF                  C	FTB_CP	DW	0FFFFH			;; (I)
 0010  0000                  C	FTB_MOD DW	0			;; (O)
 0012  0000                  C	FTB_FONTS DW	0			;; (O)
 0014  00                    C	FTB_ROWS  DB	0			;; (O) DISPLAY TYPE DEVICE
 0015  00                    C	FTB_COLS  DB	0			;; (O) DISPLAY TYPE DEVICE
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:03
PARSE CODE AND CONTROL BLOCKS FOR PRINTER.SYS               Page     1-9


 0016  00                    C	FTB_X	  DB	0			;; (O) DISPLAY TYPE DEVICE
 0017  00                    C	FTB_Y	  DB	0			;; (O) DISPLAY TYPE DEVICE
 0018  0000                  C	FTB_COUNT DW	0			;; (O) DISPLAY TYPE DEVICE
 001A  0000                  C	FTB_SELECT DW	0			;; (O) PRINTER TYPE DEVICE
 001C  0000                  C	FTB_SELLEN DW	0			;; (O) PRINTER TYPE DEVICE
 001E  0000                  C	FTB_DLEFT DW	0			;; (O)	=0, none to come
 0020  0000                  C	FTB_DLEN DW	0			;; (O)	=0, not in this packet
 0022  0000                  C	FTB_DALO DW	0			;; (O)	in the DOS "packet" buffer
 0024  0000                  C	FTB_DAHI DW	0			;; (O)	"  "   "    "       "
 0026  0000                  C	TARGET_LO DW	0			;;  internal registers
 0028  0000                  C	TARGET_HI DW	0			;;  internal registers
 002A                        C	FTBLK	ENDS				;;
			     C						;;
 = 0001                      C	TYPE_DISPLAY EQU 01H			;; display type device
 = 0002                      C	TYPE_PRINTER EQU 02H			;; printer type device
			     C						;;
			     C	FBUFS	STRUC				;;
 0000  0000                  C	FLAG	DW	0			;;
 0002  0000                  C	BUFFER_LEN DW	0			;;
 0004  00000000              C	BUFFER_ADDR DD	0			;;
 0008  0000                  C	NUM_FTBLK DW	0			;; no. of FTBKL entries
 000A                        C	FBUFS	ENDS				;;
			     C						;;
			     C						;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C						;; FLAGS :
 = 0001                      C	FLAG_RESTART EQU 000001H		;; bit 1 = restart the parsing
			     C						;;
			     C						;;
			     C						;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C						;; STATUS : (in FTB_STATUS)
			     C						;;
 = FFFF                      C	FSTAT_COMPLETE EQU 0FFFFH		;; parsing compeleted. (good status)
 = FFFE                      C	FSTAT_FONT  EQU 0FFFEH			;; font data is defined and returned
 = FFFD                      C	FSTAT_FOUND EQU 0FFFDH			;; informations including font-length
 = FFFC                      C	FSTAT_MATCH EQU 0FFFCH			;; font header matches	FTBLK
 = FFFB                      C	FSTAT_SEARCH EQU 0FFFBH 		;; seraching for header & font
 = FFF0                      C	FSTAT_BOTTOM EQU 0FFF0H 		;; below this are the DOS_STATUS.
			     C						;;
			     C	;; the FSTAT with value lower than 0FFF0H is to be returned to the DOS
			     C						;;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	;	DEVICE Command Parser Table   ES:[DI]
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C						;;
 = 0122                      C	table_len	equ	290		;;
			     C						;;
 = ES:[DI]                   C	PSE	EQU	ES:[DI] 		;;
			     C						;;
			     C	PAR_OT	STRUC				;;
 0000  0000                  C	PAR_DEV_NUM DW	?			;;
 0002  0000                  C	PAR_OFF DW	?			;;
 0004                        C	PAR_OT	ENDS				;;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:03
PARSE CODE AND CONTROL BLOCKS FOR PRINTER.SYS               Page     1-10


			     C						;;
			     C	PAR_DEVOT STRUC 			;; OFFSET to the parameters of a device
 0000  0000                  C	PAR_onum DW	?			;; number of offsets in the table
 0002  0000                  C	PAR_DNMO DW	?			;; device-name table offset
 0004  0000                  C	PAR_DIDO DW	?			;; device-id table offset
 0006  0000                  C	PAR_HWCPO DW	?			;; hwcp table offset
 0008  0000                  C	PAR_DESGO DW	?			;; designate table offset
 000A  0000                  C	PAR_PARMO DW	?			;; parameter table offset
 000C                        C	PAR_DEVOT ENDS				;;
			     C						;;
			     C	PAR_DNMT STRUC				;; DEVICE NAME table
 0000  0000                  C	PAR_DNML DW	?			;; length of device name
 0002  00                    C	PAR_DNM DB	?			;; device name
 0003                        C	PAR_DNMT ENDS				;;
			     C						;;
			     C	PAR_DIDT STRUC				;; DEVICE ID table
 0000  0000                  C	PAR_DIDL DW	?			;; device ID length
 0002  00                    C	PAR_DID DB	?			;; device ID
 0003                        C	PAR_DIDT ENDS				;;
			     C						;;
			     C	PAR_HWCPT STRUC 			;; hwcp table
 0000  0000                  C	PAR_HWCPL DW	?			;; hwcp entry number
 0002  0000                  C	PAR_HWCP DW	?			;; hwcp
 0004                        C	PAR_HWCPT ENDS				;;
			     C						;;
			     C						;;
			     C	PAR_DESGT STRUC 			;; DESIGNATE table
 0000  0000                  C	PAR_DESGL DW	?			;; entry number
 0002  0000                  C	PAR_DESG DW	?			;; designate
 0004  0000                  C	PAR_FONT DW	?			;; fonts
 0006                        C	PAR_DESGT ENDS				;;
			     C						;;
			     C						;;
			     C	PAR_PARMT STRUC 			;; parameter table
 0000  0000                  C	PAR_PARML DW	?			;; length
 0002  0000                  C	PAR_PARM DW	?			;;
 0004                        C	PAR_PARMT ENDS				;;
			     C						;;
			     C						;;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	; LPTn	printer data structure	CS:[BX]
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C						;;
 = CS:[BX]                   C	BUF	EQU	CS:[BX] 		;;
			     C						;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C						;; STATES
			     C						;;
 = 0000                      C	NORMAL	EQU	0			;; normal state
 = 0001                      C	CPSW	EQU	1			;;
 = 0002                      C	DESG_WR EQU	2			;; designate write
 = 0003                      C	DESG_END EQU	3			;; designate end
 = 0004                      C	LOCKED	 EQU	4			;; WGR locked
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:03
PARSE CODE AND CONTROL BLOCKS FOR PRINTER.SYS               Page     1-11


			     C						;;
			     C						;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 = 0000                      C	GOOD	EQU	0			;; STATUS :
 = 8000                      C	REPLX	EQU	8000H			;; codepage replaced in DST
 = 4000                      C	FAIL	EQU	4000H			;; fail in designate
 = 2000                      C	LOADED	EQU	2000H			;; the font has just been loaded to
 = 0800                      C	REFRESH EQU	0800H			;; there was a refresh via DST
			     C						;;
			     C						;; also
			     C						;; -- DSF_CARTCP
			     C						;;
			     C						;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C						;;
			     C						;; for BFLAG :
 = 0000                      C	BF_PRN	EQU	0			;;  0 = PRN  initialized (interrupt)
 = 0001                      C	BF_LPT1 EQU	1			;;  1 = LPT1 initialized (interrupt)
 = 0002                      C	BF_LPT2 EQU	2			;;  2 = LPT2 initialized (interrupt)
 = 0003                      C	BF_LPT3 EQU	3			;;  3 = LPT3 initialized (interrupt)
 = 8000                      C	BF_MEM_DONE  EQU 08000H 		;;  memory done for this device
			     C						;;
			     C						;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C						;; BUFFER DATA structure
			     C	BUF_DATA STRUC				;;.................................
 0000  FFFF                  C	BFLAG	 DW	-1			;; buf flag for initialisation
			     C						;; -1 = buf not yet initialised
			     C						;; (see BF_PRN, BF_LPT's)
			     C						;;
 0002  FFFF                  C	DEV_HDRO DW	-1			;; device driver n header offset
 0004  FFFF                  C	DEV_HDRS DW	-1			;;
 0006  FFFF                  C	LPT_STRAO DW	-1			;; dos lptn strategy offset
 0008  FFFF                  C	LPT_STRAS DW	-1			;;
 000A  FFFF                  C	LPT_INTRO DW	-1			;; dos lptn strategy offset
 000C  FFFF                  C	LPT_INTRS DW	-1			;;
 000E  FFFF                  C	RH_PTRO DW	-1			;; request header offset
 0010  FFFF                  C	RH_PTRS DW	-1			;; segment ....................(unique)
			     C						;;
			     C						;; (following is replicated for LPT1 )
			     C						;;
 0012  FFFF                  C	RNORMO	DW	-1			;; request-normal driver header offset
 0014  FFFF                  C	prn_bufo dw	-1			;; offset to prn buffer
 0016  0000                  C	did_prn  dw	 0			;; where PRN is in the DID order
 0018  0000                  C	PCLASS	 DW	 0			;;
 001A  0000                  C	STATE	DW	NORMAL			;;
 001C  0000                  C	STATUS	DW	GOOD			;;
			     C						;; (the followings should be used
			     C						;;  IFF BUT.STATE <> NORMAL : )
			     C						;;
 001E  FFFF                  C	PDESCO	DW	-1			;; offset to printer description table.
			     C						;;
			     C						;;===== hwcp and designated slots ====
 0020  0000                  C	HSLMX	DW	0			;; HSLMX is the size of HARDslot (at
			     C						;; HARDSO) and the buffer(at HRBUFO)
			     C						;;
 0022  0000                  C	HARDMX	DW	0			;; no. of HWCP+cart slots supported
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:03
PARSE CODE AND CONTROL BLOCKS FOR PRINTER.SYS               Page     1-12


			     C						;; (less than or equal to .HSLOTS)
 0024  FFFF                  C	HARDSO	DW	-1			;; offset to hardware slots n
			     C						;;
 0026  0000                  C	HCARMX	DW	0			;; no. of cart slots supported
 0028  FFFF                  C	HRBUFO	DW	-1			;; offset to cart slots' buffer
			     C						;;
			     C						;;===== physical and designated RAM ===
			     C						;;
 002A  0000                  C	RSLMX	DW	0			;; RSLMX is the size of RAMslot (at
			     C						;; RAMSO) and the RAM buffer(at RMBUFO)
			     C						;;
			     C						;;
 002C  0000                  C	RAMMX	DW	0			;; no. of physical RAM slots(max.=1)
 002E  FFFF                  C	RAMSO	DW	-1			;; offset to RAM slots(incl. designated
			     C						;;
 0030  0000                  C	RBUFMX	DW	0			;; no. of designated RAM slots supported
 0032  FFFF                  C	RMBUFO	DW	-1			;; offset to RAM slots's buffer
			     C						;;
 0034  FFFF                  C	FTSZPA	DW	-1			;; font buffer in paragraph = FONTSZ
 0036  0000                  C	FTSIZE	DW	0			;; font buffer size = FTSZPA x 16
 0038  FFFF                  C	FTSTART DW	-1			;; start of font buffer
 003A  FFFF                  C	FTSLOTO DW	-1			;; segment address of font buffer
			     C						;; -- of the one to be designated to
 003C  FFFF                  C	FTDLO	DW	-1			;; offset to where the FTSTART:OFFSET
			     C						;; (next destination = total length
			     C						;;		       so far)
 003E  0000                  C	FSELEN	DW	0			;; length of selection control copied
			     C						;; to the selection buffer
			     C						;; (USED BY SELECT TYPE = 1 ONLY)
			     C						;; -- initialized to 0, if selection
			     C						;;    is not 0, copied the selection
			     C						;;    from the font file until the
			     C						;;    length is reached. After copying
			     C						;;    to selection buffer, reset to 0
 0040  0000                  C	FSELMAX DW	0			;; max. room reserved for selection
			     C						;; controls.
			     C						;;
 0042  000C[                 C	PAR_EXTRACTO DB (TYPE PAR_DEVOT) DUP (-1);; Offset to parameter extracts
	   FF                C	
			 ]   C	
			     C	
 004E  FFFF                  C	SAVED_CP    DW	-1			;; WGR saved code page during lock	    ;AN000;
 0050  0000                  C	BUFEND	DW	0			;; END OF BUFFER, for LPT1 copy.
 0052                        C	BUF_DATA ENDS				;;
			     C						;;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	;	Printer Description Table
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C						;;
 = 0008                      C	DEVN_LEN EQU	8			;; device name (type-id) length
			     C						;;
			     C	PDSH	STRUC				;;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:03
PARSE CODE AND CONTROL BLOCKS FOR PRINTER.SYS               Page     1-13


 0000  001E                  C	PD_LEN	DW	30			;; length of each entry
 0002  20 20 20 20 20 20     C	TYPEID	DB	'        '              ;; device name (id), length DEVN_LEN
       20 20                 C	
 000A  00                    C	VMINOR	DB	0			;; version :  .00
 000B  01                    C	VMAJOR	DB	1			;; version : 1.
 000C  0000                  C	CLASS	DW	?			;; reserved
 000E  0000                  C	FONTSZ	DW	?			;; font buffer size in paragraph (max)
 0010  0000                  C	HSLOTS	DW	?			;; hard-slots number (max # of Hslots)
 0012  0000                  C	HWCPMIN DW	?			;; what left by min_hwcp can be cart.
 0014  0000                  C	RSLOTS	DW	?			;; ram-slots number  (max # of Rslots)
 0016                        C	PDSH	ENDS				;; the SELH_O, and SELR_O are defined
			     C						;; in the next two entries in PDS
			     C						;;
			     C						;;
			     C	PDS	STRUC				;;
 0000  0016[                 C		DB	(TYPE PDSH) DUP (?)	;; common portion
	   ??                C	
			 ]   C	
			     C	
 0016  0000                  C	SELH_O	DW	?			;; offset to select controls on Hslots
 0018  0000                  C	SELR_O	DW	?			;; offset to select controls on Rslots
 001A  0000                  C	SELB_O	DW	?			;; offset to buffered select controls
 001C                        C	PDS	ENDS				;;
			     C						;;
			     C						;;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	;	HARD / RAM slots table structure/constants
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C						;; NOTE : must be only FOUR bytes for
			     C						;;	  codepage positioning
			     C						;;	  calculation as compared
			     C						;;	  with each entry in FTDL_OFF
			     C						;;
			     C	SLTS	STRUC				;; slots-table structure
 0000  FFFF                  C	SLT_CP	DW	-1			;; code page : no code page
 0002  0000                  C	SLT_AT	DW	0			;; attribute : empty
 0004                        C	SLTS	ENDS				;;
			     C						;;
			     C						;; ATTRIBUTES :
 = 0001                      C	AT_RAM1 EQU	 00001H 		;; in the 1st physical RAM slot
 = 0002                      C	AT_RAM2 EQU	 00002H 		;; in the 2nd physical RAM slot
 = 0004                      C	AT_RAM3 EQU	 00004H 		;; in the 3rd physical RAM slot
 = 0008                      C	AT_RAM4 EQU	 00008H 		;; in the 4th physical RAM slot
 = 000F                      C	AT_RAMS EQU	 0000FH 		;;(note the current logic supports
			     C						;; only ONE physical RAM slot)
			     C						;;
 = 1000                      C	AT_OCC	EQU	 01000H 		;; slot occupied
 = 2000                      C	AT_ACT	EQU	 02000H 		;; slot active
 = 4000                      C	AT_HWCP EQU	 04000H 		;; slot is hwcp
 = 8000                      C	AT_OLD	EQU	 08000H 		;; codepage in buffer is not newly
			     C						;; designated.
 = 0100                      C	AT_LOAD EQU	 00100H 		;; slot with font to be loaded
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:03
PARSE CODE AND CONTROL BLOCKS FOR PRINTER.SYS               Page     1-14


 = 0200                      C	AT_FONT EQU	 00200H 		;; font in this slot has been loaded
 = FEFF                      C	AT_NO_LOAD	EQU	NOT  AT_LOAD	;; to reset the bit
 = FDFF                      C	AT_NO_FONT	EQU	NOT  AT_FONT	;; to reset the bit
 = 0400                      C	AT_SELECT EQU	 00400H 		;; for SELECT TYPE = 1
			     C						;; -- mark the FTBLK where control is
			     C						;;    copied from.
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C						;; constants on SLOTS
 = 000C                      C	HARDSL_MAX EQU	12			;;
			     C						;;
 = 000C                      C	RAMSL_MAX EQU	12			;;
			     C						;;
 = 0020                      C	CTL_MAX 	EQU	32		;; max.length of each selection control
 = 0008                      C	CTL5202_OFFS	EQU	8		;; offset to CTL5202_H for codepage
			     C						;;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	;	General Constants
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C						;;
 = 0028                      C	STACK_SIZE	EQU	28H		;; in paragraph, total 200H bytes
			     C						;;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C	;
			     C	;
			     C	; STRUCS AND EQUATES
			     C	;
			     C	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     C						;;
			     C	PARSE_NAME    STRUC			;;					    ;AN000;
 0000  0000                  C	N_LENGTH      DW    ?			;;					    ;AN000;
 0002  20 20 20 20 20 20     C	FNAME	      DB    "        "          ;;                                          ;AN000;
       20 20                 C	
 000A                        C	PARSE_NAME    ENDS			;;					    ;AN000;
			     C						;;
			     C	PARSE_OFFSETS STRUC			;;					    ;AN000;
 0000  0000                  C		      DW    ?			;;					    ;AN000;
 0002  0000                  C	DN_OFFSET     DW    ?			;;					    ;AN000;
 0004  0000                  C	DI_OFFSET     DW    ?			;;					    ;AN000;
 0006  0000                  C	DCP_OFFSET    DW    ?			;;					    ;AN000;
 0008  0000                  C	DD_OFFSET     DW    ?			;;					    ;AN000;
 000A  0000                  C		      DW    ?			;;					    ;AN000;
 000C                        C	PARSE_OFFSETS ENDS			;;					    ;AN000;
			     C						;;
			     C	PARSE_HWCP    STRUC			;;					    ;AN000;
 0000  0000                  C	NUM_HWCPS     DW    ?			;;					    ;AN000;
 0002  0000                  C	HWCP_1	      DW    ?			;;					    ;AN000;
 0004  0000                  C	HWCP_2	      DW    ?			;;					    ;AN000;
 0006  0000                  C	HWCP_3	      DW    ?			;;					    ;AN000;
 0008  0000                  C	HWCP_4	      DW    ?			;;					    ;AN000;
 000A  0000                  C	HWCP_5	      DW    ?			;;					    ;AN000;
 000C  0000                  C	HWCP_6	      DW    ?			;;					    ;AN000;
 000E  0000                  C	HWCP_7	      DW    ?			;;					    ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:03
PARSE CODE AND CONTROL BLOCKS FOR PRINTER.SYS               Page     1-15


 0010  0000                  C	HWCP_8	      DW    ?			;;					    ;AN000;
 0012  0000                  C	HWCP_9	      DW    ?			;;					    ;AN000;
 0014  0000                  C	HWCP_10       DW    ?			;;					    ;AN000;
 0016                        C	PARSE_HWCP    ENDS			;;					    ;AN000;
			     C						;;
			     C	PARSE_DESG    STRUC			;;					    ;AN000;
 0000  0000                  C	NUM_VALUES    DW    ?			;;					    ;AN000;
 0002  0000                  C	NUM_DESGS     DW    ?			;;					    ;AN000;
 0004  0000                  C	NUM_FONTS     DW    ?			;;					    ;AN000;
 0006                        C	PARSE_DESG    ENDS			;;					    ;AN000;
			     C						;;
			     C						;;
 = 0000                      C	ZERO	EQU	0H			;;					    ;AN000;
 = 0001                      C	ONE	EQU	1H			;;					    ;AN000;
 = 0002                      C	TWO	EQU	2H			;;					    ;AN000;
 = 0003                      C	THREE	EQU	3H			;;					    ;AN000;
 = 0004                      C	FOUR	EQU	4H			;;					    ;AN000;
 = 0005                      C	FIVE	EQU	5H			;;					    ;AN000;
 = 0006                      C	SIX	EQU	6H			;;					    ;AN000;
 = 0007                      C	SEVEN	EQU	7H			;;					    ;AN000;
 = 0008                      C	EIGHT	EQU	8H			;;					    ;AN000;
 = 0009                      C	NINE	EQU	9H			;;					    ;AN000;
 = 000A                      C	TEN	EQU    0AH			;;					    ;AN000;
 = 0001                      C	NUMBER	      EQU    1			;;					    ;AN000;
 = 0003                      C	STRING	      EQU    3			;;					    ;AN000;
 = 0004                      C	COMPLEX       EQU    4			;;					    ;AN000;
 =-0001                      C	RC_EOL	      EQU    -1 		;;					    ;AN000;
 = 0000                      C	RC_NO_ERROR   EQU    0			;;					    ;AN000;
 = 0002                      C	RC_OP_MISSING EQU    2			;;					    ;AN000;
 = 0001                      C	ON	      EQU    1			;;					    ;AN000;
 = 0000                      C	OFF	      EQU    0			;;					    ;AN000;
 = 000C                      C	BAD_SYNTAX_MSG EQU   12 		;;					    ;AN000;
 = 0002                      C	BAD_DEVICE_MSG EQU   2			;;					    ;AN000;
			     C	;
			     C	
				
				PUBLIC	    PARSER	     ; near procedure for parsing DEVICE= statement	    ;AN000;
				
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; Set assemble switches for parse code
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				
 = 0000				DateSW	      EQU     0 							    ;AN000;
 = 0000				DrvSW	      EQU     0 							    ;AN000;
 = 0000				SwSW	      EQU     0 							    ;AN000;
 = 0001				Val1SW	      EQU     1     ;;AN002;						   ;AN000;
 = 0000				Val2SW	      EQU     0 							    ;AN000;
 = 0000				Val3SW	      EQU     0 							    ;AN000;
				
				
 0000				CSEG	      SEGMENT  PARA PUBLIC 'CODE'                                           ;AN000;
					      ASSUME CS:CSEG,DS:NOTHING,ES:NOTHING				    ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:03
PARSE CODE AND CONTROL BLOCKS FOR PRINTER.SYS               Page     1-16


				
				
				EXTRN	    TABLE:WORD	     ; table for variable storage used by INIT module.	    ;AN000;
				EXTRN	    DEVICE_NUM:WORD							    ;AN000;
				
				.LIST
				
				
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; PARM control block for parsing PRINTER.SYS - DEVICE= command statement.
				; Command line looks like:
				;
				;   DEVICE=[d:][path]PRINTER.SYS LPT#[:]=(type[,[hwcp][,n]])
				;     or
				;   DEVICE=[d:][path]PRINTER.SYS LPT#[:]=(type[,[(hwcp1,hwcp2,...)][,n]])
				;
				; The command line will be parsed from left to right, taking care of the
				; nesting of complex lists as they occur.
				;
				; 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\PRINTER.SYS lpt#=(complex list)
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				
 0BE8				PARMS1	       LABEL WORD							    ;AN000;
 0BE8  0BEB R				       DW	PARMSX1 						    ;AN000;
 0BEA  00				       DB	0		   ; no extra delimeters or EOLs.	    ;AN000;
				
 0BEB				PARMSX1        LABEL BYTE							    ;AN000;
 0BEB  01 01				       DB	1,1		   ; min,max positional operands	    ;AN000;
 0BED  0BF3 R				       DW	D_NAME		   ; pointer to control block		    ;AN000;
 0BEF  00				       DB	0		   ; no switches			    ;AN000;
 0BF0  01				       DB	1		   ; 1 or more keywords 		    ;AN000;
 0BF1  0BFC R				       DW	PRT_LIST	   ; pointer to control block		    ;AN000;
				
 0BF3				D_NAME	       LABEL WORD							    ;AN000;
 0BF3  0200				       DW	0200H		   ; file spec				    ;AN000;
 0BF5  0001				       DW	0001H		   ; cap result by file table		    ;AN000;
 0BF7  0C7D R				       DW	RESULT_BUF	   ; result				    ;AN000;
 0BF9  0C7C R				       DW	NOVALS		   ; no value checking done		    ;AN000;
 0BFB  00				       DB	0		   ; no keyword/switch synonyms 	    ;AN000;
				
 0BFC				PRT_LIST       LABEL WORD							    ;AN000;
 0BFC  0402				       DW	0402H		   ; complex list,  repeats allowed	    ;AN000;
 0BFE  0002				       DW	0002H		   ; cap result by char table		    ;AN000;
 0C00  0C7D R				       DW	RESULT_BUF	   ; result				    ;AN000;
 0C02  0C7C R				       DW	NOVALS		   ; no value checking done		    ;AN000;
 0C04  08				       DB	8		   ; 4 keywords 			    ;AN000;
 0C05  50 52 4E 3D 00			       DB	"PRN=",0           ;GHG Ä¿                                  ;AN001;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:03
PARSE CODE AND CONTROL BLOCKS FOR PRINTER.SYS               Page     1-17


 0C0A  4C 50 54 31 3D 00		       DB	"LPT1=",0          ;GHG  ³ 4 possible keywords              ;AN001;
 0C10  4C 50 54 32 3D 00		       DB	"LPT2=",0          ;GHG  ³                                  ;AN001;
 0C16  4C 50 54 33 3D 00		       DB	"LPT3=",0          ;GHG ÄÙ                                  ;AN001;
 0C1C  50 52 4E 3A 3D 00		       DB	"PRN:=",0          ;GHG Ä¿                                  ;AN001;
 0C22  4C 50 54 31 3A 3D		       DB	"LPT1:=",0         ;GHG  ³ 4 possible keywords              ;AN001;
       00			
 0C29  4C 50 54 32 3A 3D		       DB	"LPT2:=",0         ;GHG  ³   with colon                     ;AN001;
       00			
 0C30  4C 50 54 33 3A 3D		       DB	"LPT3:=",0         ;GHG ÄÙ                                  ;AN001;
       00			
				
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; PARM control block for second level of nesting.
				; ie. complex list from first level of nesting
				;
				; (type, hwcp or complex list, n)
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				
 0C37				PARMS2	       LABEL WORD							    ;AN000;
 0C37  0C3A R				       DW	PARMSX2 						    ;AN000;
 0C39  00				       DB	0		   ; no extra delimeters or EOLs.	    ;AN000;
				
 0C3A				PARMSX2        LABEL BYTE							    ;AN000;
 0C3A  01 03				       DB	1,3		   ; min,max positional operands	    ;AN000;
 0C3C  0C44 R				       DW	PRT_TYPE	   ; pointer to control block		    ;AN000;
 0C3E  0C4D R				       DW	HWCP		   ; pointer to control block		    ;AN000;
 0C40  0C56 R				       DW	CP_PREPS	   ; pointer to control block		    ;AN000;
 0C42  00				       DB	0		   ; no switches			    ;AN000;
 0C43  00				       DB	0		   ; no keywords			    ;AN000;
				
 0C44				PRT_TYPE       LABEL BYTE							    ;AN000;
 0C44  2000				       DW	2000H		   ; sstring				    ;AN000;
 0C46  0002				       DW	0002H		   ; cap by char table			    ;AN000;
 0C48  0C7D R				       DW	RESULT_BUF	   ; result				    ;AN000;
 0C4A  0C7C R				       DW	NOVALS		   ; value list 			    ;AN000;
 0C4C  00				       DB	0		   ; no keyword/switch synonyms 	    ;AN000;
				
 0C4D				HWCP	       LABEL BYTE							    ;AN000;
 0C4D  8401				       DW	8401H		   ; numeric or complex list (optional)     ;AN000;
 0C4F  0000				       DW	0		   ; no functions			    ;AN000;
 0C51  0C7D R				       DW	RESULT_BUF	   ; result				    ;AN000;
 0C53  0C7C R				       DW	NOVALS		   ; no value checking done		    ;AN000;
 0C55  00				       DB	0		   ; no keyword/switch synonyms 	    ;AN000;
				
 0C56				CP_PREPS       LABEL BYTE							    ;AN000;
 0C56  8001				       DW	8001H		   ; numeric (optional) 		    ;AN000;
 0C58  0000				       DW	0		   ; no functions			    ;AN000;
 0C5A  0C7D R				       DW	RESULT_BUF	   ; result				    ;AN000;
 0C5C  0C5F R				       DW	N_Val_Range	   ;AN002; value list				  ;AN000;
 0C5E  00				       DB	0		   ; no keyword/switch synonyms 	    ;AN000;
				
				
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:03
PARSE CODE AND CONTROL BLOCKS FOR PRINTER.SYS               Page     1-18


 0C5F				N_Val_Range    label   byte
 0C5F  01				       db      1		   ;AN002; Range defintion
 0C60  01				       db      1		   ;AN002; Number of ranges
 0C61  01				       db      1		   ;AN002; item tag
 0C62  00000000 0000000C		       dd      0, 12		   ;AN002; 0 - 12
				
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; PARM control block for third level of nesting.
				; ie. complex list from second nesting level
				;
				; (hwcp1,hwcp2,...)
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				
 0C6A				PARMS3	       LABEL WORD							    ;AN000;
 0C6A  0C6D R				       DW	PARMSX3 						    ;AN000;
 0C6C  00				       DB	0		   ; no extra delimeters or EOLs.	    ;AN000;
				
 0C6D				PARMSX3        LABEL BYTE							    ;AN000;
 0C6D  01 01				       DB	1,1		   ; min,max positional operands	    ;AN000;
 0C6F  0C73 R				       DW	HWCPS		   ; pointer to control block		    ;AN000;
 0C71  00				       DB	0		   ; no switches			    ;AN000;
 0C72  00				       DB	0		   ; no keywords			    ;AN000;
				
 0C73				HWCPS	       LABEL BYTE							    ;AN000;
 0C73  8003				       DW	8003H		   ; numeric, repeats allowed		    ;AN000;
 0C75  0000				       DW	0		   ; no functions			    ;AN000;
 0C77  0C7D R				       DW	RESULT_BUF	   ; result				    ;AN000;
 0C79  0C7C R				       DW	NOVALS		   ; no value checking done		    ;AN000;
 0C7B  00				       DB	0		   ; no keyword/switch synonyms 	    ;AN000;
				
				
				; Null VALUE LIST and RESULT BUFFER for all PARSE control blocks
				
				
 0C7C				NOVALS	       LABEL BYTE							    ;AN000;
 0C7C  00				       DB	0		   ; no value checking done		    ;AN000;
				
 0C7D				RESULT_BUF     LABEL BYTE							    ;AN000;
 0C7D  00			RESULT_TYPE    DB	?		   ; type returned (number, string, etc.)   ;AN000;
 0C7E  00				       DB	?		   ; matched item tag (if applicable)	    ;AN000;
 0C7F  0000			SYN_PTR        DW	?		   ; synonym ptr (if applicable)	    ;AN000;
 0C81  00000000			RESULT_VAL     DD	?		   ; value				    ;AN000;
				
				
 0C85  01			OK_FLAG        DB	ON		   ; FLAG INDICATING PARSE STATUS	    ;AN000;
 0C86  00			NUM_LOOP       DB	ZERO							    ;AN000;
				
				
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; PROCEDURE_NAME: PARSER
				;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:03
PARSE CODE AND CONTROL BLOCKS FOR PRINTER.SYS               Page     1-19


				; 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
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				
 0C87				PARSER	PROC	 NEAR								    ;AN000;
 0C87  52				PUSH	 DX								    ;AN000;
 0C88  57				PUSH	 DI								    ;AN000;
 0C89  06				PUSH	 ES								    ;AN000;
 0C8A  53				PUSH	 BX								    ;AN000;
 0C8B  1E				PUSH	 DS			  ;					    ;AN000;
 0C8C  56				PUSH	 SI			  ;					    ;AN000;
 0C8D  FC				CLD				  ;					    ;AN000;
 0C8E  26: C5 75 12			LDS	 SI,RH.RH0_BPBA 	  ;					    ;AN000;
 0C92  0E				PUSH	 CS			  ; establish ES ..			    ;AN000;
 0C93  07				POP	 ES			  ; addressability to data		    ;AN000;
 0C94  8D 3E 0BE8 R			LEA	 DI,PARMS1		  ; point to PARMS control block	    ;AN000;
 0C98  33 C9				XOR	 CX,CX			  ; clear both CX and DX for		    ;AN000;
 0C9A  33 D2				XOR	 DX,DX			  ;  SYSPARSE				    ;AN000;
 0C9C  E8 00DE R			CALL	 SYSPARSE		  ; move pointer past file spec 	    ;AN000;
 0C9F  E8 00DE R			CALL	 SYSPARSE		  ; do first parse			    ;AN000;
 0CA2  8D 1E 0000 E			LEA	 BX,TABLE		  ;					    ;AN000;
					.WHILE <AX NE RC_EOL> AND	  ; EOL?...then end parse...and..	    ;AN000;
 0CA6                        2	$l1: 
 0CA6  3D FFFF               3						cmp AX,RC_EOL 
 0CA9  74 54                 6						je $l2 
					.WHILE <OK_FLAG EQ ON>		  ; make sure that flag still ok..	    ;AN000;
 0CAB  2E: 80 3E 0C85 R 01   3						cmp OK_FLAG,ON 
 0CB1  75 4C                 6						jne $l2 
					  .IF <AX NE RC_NO_ERROR>	  ; parse error?			    ;AN000;
 0CB3  3D 0000               3						cmp AX,RC_NO_ERROR 
 0CB6  74 08                 6						je $l5 
 0CB8  2E: C6 06 0C85 R 00		    MOV     OK_FLAG,OFF 	  ; yes...reset flag			    ;AN000;
					  .ELSE 			  ;					    ;AN000;
 0CBE  EB 38                 3						jmp short $l4 
 0CC0                        2	$l5: 
					    .SELECT			  ;					    ;AN000;
					    .WHEN <RESULT_TYPE EQ COMPLEX>; complex string found?		    ;AN000;
 0CC0  2E: 80 3E 0C7D R 04   3						cmp RESULT_TYPE,COMPLEX 
 0CC6  75 2A                 6						jne $l9 
 0CC8  2E: FF 06 0000 E			      INC    DEVICE_NUM 	  ; increment count			    ;AN000;
 0CCD  43				      INC    BX 		  ; point to next device table		    ;AN000;
 0CCE  43				      INC    BX 		  ;					    ;AN000;
					      .IF <DEVICE_NUM GT FOUR>	  ; more than one?			    ;AN000;
 0CCF  2E: 83 3E 0000 E 04   3						cmp DEVICE_NUM,FOUR 
 0CD5  7E 08                 6						jng $l12 
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:03
PARSE CODE AND CONTROL BLOCKS FOR PRINTER.SYS               Page     1-20


 0CD7  2E: C6 06 0C85 R 00			MOV    OK_FLAG,OFF	  ; yes....we have an error		    ;AN000;
					      .ELSE			  ; no ..				    ;AN000;
 0CDD  EB 19                 3						jmp short $l4 
 0CDF                        2	$l12: 
 0CDF  53					PUSH   BX		  ;					    ;AN000;
 0CE0  2E: 8B 1F				MOV    BX,CS:[BX]	  ;					    ;AN000;
 0CE3  E8 0E48 R				CALL   COPY_NAME	  ;					    ;AN000;
 0CE6  2E: C6 06 0C86 R 00			MOV    NUM_LOOP,ZERO	  ;					    ;AN000;
 0CEC  E8 0D19 R				CALL   PARSE_MAIN	  ; process complex string..		    ;AN000;
 0CEF  5B					POP    BX		  ;					    ;AN000;
					      .ENDIF			  ;					    ;AN000;
					    .OTHERWISE			  ; not a complex string so..		    ;AN000;
 0CF0  EB 06                 3						jmp short $l4 
 0CF2                        2	$l9: 
 0CF2  2E: C6 06 0C85 R 00		      MOV    OK_FLAG,OFF	  ; we have a problem...reset flag	    ;AN000;
					    .ENDSELECT			  ;					    ;AN000;
					  .ENDIF			  ;					    ;AN000;
 0CF8                        2	$l4: 
 0CF8  53				  PUSH	 BX			  ;					    ;AN000;
 0CF9  E8 00DE R			  CALL	 SYSPARSE		  ; continue parsing..			    ;AN000;
 0CFC  5B				  POP	 BX			  ;					    ;AN000;
					.ENDWHILE			  ;					    ;AN000;
 0CFD  EB A7                 3						jmp $l1 
 0CFF                        2	$l2: 
					.IF <OK_FLAG EQ OFF>		  ; flag indicating error?		    ;AN000;
 0CFF  2E: 80 3E 0C85 R 00   3						cmp OK_FLAG,OFF 
 0D05  75 0A                 6						jne $l17 
 0D07  2E: C7 06 0000 E 0000		  MOV	DEVICE_NUM,ZERO 	  ; yes...set device number to 0	    ;AN000;
 0D0E  F9				  STC				  ;					    ;AN000;
					.ELSE				  ;					    ;AN000;
 0D0F  EB 01                 3						jmp short $l16 
 0D11                        2	$l17: 
 0D11  F8				  CLC				  ;					    ;AN000;
					.ENDIF				  ;					    ;AN000;
 0D12                        2	$l16: 
 0D12  5E				POP    SI			  ;					    ;AN000;
 0D13  1F				POP    DS			  ;					    ;AN000;
 0D14  5B				POP    BX			  ;					    ;AN000;
 0D15  07				POP    ES			  ;					    ;AN000;
 0D16  5F				POP    DI			  ;					    ;AN000;
 0D17  5A				POP    DX			  ;					    ;AN000;
 0D18  C3				RET				  ;					    ;AN000;
 0D19				PARSER	ENDP									    ;AN000;
				
				
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; PROCEDURE_NAME: PARSE_MAIN
				;
				; FUNCTION:
				; THIS PROCEDURE PARSES THE LPT=(    ) COMPLEX LIST DEVICE= LINE FOUND
				; IN CONFIG.SYS
				;
				; AT ENTRY: RESULT BUFFER CONTAINS POINTER TO COMPLEX STRING
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:03
PARSE CODE AND CONTROL BLOCKS FOR PRINTER.SYS               Page     1-21


				;
				; AT EXIT:
				;    NORMAL: TABLE SET UP WITH VALUES FOUND
				;
				;    ERROR: OK_FLAG = 0
				;
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				
 0D19				PARSE_MAIN  PROC   NEAR 							    ;AN000;
 0D19  53				    PUSH   BX			  ;					    ;AN000;
 0D1A  57				    PUSH   DI			  ; setup to parse the nested.. 	    ;AN000;
 0D1B  1E				    PUSH   DS			  ; complex string...but save.. 	    ;AN000;
 0D1C  56				    PUSH   SI			  ; current parsing status.		    ;AN000;
 0D1D  51				    PUSH   CX			  ;					    ;AN000;
 0D1E  33 C9				    XOR    CX,CX		  ;					    ;AN000;
 0D20  8D 3E 0C37 R			    LEA    DI,PARMS2		  ; next control block..		    ;AN000;
 0D24  2E: C5 36 0C81 R			    LDS    SI,RESULT_VAL	  ; point to stored string		    ;AN000;
 0D29  53				    PUSH   BX			  ;					    ;AN000;
 0D2A  E8 00DE R			    CALL   SYSPARSE		  ;					    ;AN000;
 0D2D  5B				    POP    BX			  ;					    ;AN000;
					    .WHILE <AX NE RC_EOL> AND	  ; not EOL?   and..			    ;AN000;
 0D2E                        2	$l20: 
 0D2E  3D FFFF               3						cmp AX,RC_EOL 
 0D31  74 77                 6						je $l21 
					    .WHILE <OK_FLAG EQ ON>	  ; error flag still ok?		    ;AN000;
 0D33  2E: 80 3E 0C85 R 01   3						cmp OK_FLAG,ON 
 0D39  75 6F                 6						jne $l21 
 0D3B  2E: FE 06 0C86 R			      INC    NUM_LOOP		  ;					    ;AN000;
					      .IF <AX NE RC_NO_ERROR>	  ; check for parse errors		    ;AN000;
 0D40  3D 0000               3						cmp AX,RC_NO_ERROR 
 0D43  74 08                 6						je $l24 
 0D45  2E: C6 06 0C85 R 00			MOV    OK_FLAG,OFF	  ; yes....reset error flag		    ;AN000;
					      .ELSE			  ; no...process			    ;AN000;
 0D4B  EB E1                 3						jmp short $l20 
 0D4D                        2	$l24: 
 0D4D  53					PUSH   BX		  ;					    ;AN000;
						.SELECT 		  ;					    ;AN000;
						.WHEN <RESULT_TYPE EQ STRING> ; simple string			    ;AN000;
 0D4E  2E: 80 3E 0C7D R 03   3						cmp RESULT_TYPE,STRING 
 0D54  75 0A                 6						jne $l28 
 0D56  2E: 8B 5F 04				  MOV	 BX,CS:[BX].DI_OFFSET ; 				    ;AN000;
 0D5A  E8 0E14 R				  CALL	 PARSE_STR	  ; yes...process			    ;AN000;
						.WHEN <RESULT_TYPE EQ NUMBER> ; number?..			    ;AN000;
 0D5D  EB 45                 3						jmp short $l27 
 0D5F  90                    3						nop 
 0D60                        2	$l28: 
 0D60  2E: 80 3E 0C7D R 01   3						cmp RESULT_TYPE,NUMBER 
 0D66  75 25                 6						jne $l30 
						  .IF <NUM_LOOP EQ TWO>   ;					    ;AN000;
 0D68  2E: 80 3E 0C86 R 02   3						cmp NUM_LOOP,TWO 
 0D6E  75 06                 6						jne $l33 
 0D70  2E: 8B 5F 06				    MOV    BX,CS:[BX].DCP_OFFSET				    ;AN000;
						  .ELSE 		  ;					    ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:03
PARSE CODE AND CONTROL BLOCKS FOR PRINTER.SYS               Page     1-22


 0D74  EB 04                 3						jmp short $l32 
 0D76                        2	$l33: 
 0D76  2E: 8B 5F 08				    MOV    BX,CS:[BX].DD_OFFSET 				    ;AN000;
						  .ENDIF		  ;					    ;AN000;
 0D7A                        2	$l32: 
 0D7A  2E: A1 0C81 R				   MOV	  AX,WORD PTR RESULT_VAL ; get value into word form	    ;AN000;
						   .IF <AX NE ZERO>						    ;AN000;
 0D7E  3D 0000               3						cmp AX,ZERO 
 0D81  74 21                 6						je $l27 
 0D83  2E: FF 07				     INC    WORD PTR CS:[BX] ;					    ;AN000;
 0D86  2E: 89 47 02				     MOV    WORD PTR CS:[BX+2],AX ; load that value.		    ;AN000;
						   .ENDIF							    ;AN000;
						.WHEN <RESULT_TYPE EQ COMPLEX> ; complex string?		    ;AN000;
 0D8A  EB 18                 3						jmp short $l27 
 0D8C  90                    3						nop 
 0D8D                        2	$l30: 
 0D8D  2E: 80 3E 0C7D R 04   3						cmp RESULT_TYPE,COMPLEX 
 0D93  75 09                 6						jne $l39 
 0D95  2E: 8B 5F 06				  MOV	 BX,CS:[BX].DCP_OFFSET ;				    ;AN000;
 0D99  E8 0DB0 R				  CALL	 PARSE_COMP	  ; yes...process			    ;AN000;
						.OTHERWISE		  ; anything else is..			    ;AN000;
 0D9C  EB 06                 3						jmp short $l27 
 0D9E                        2	$l39: 
 0D9E  2E: C6 06 0C85 R 00			  MOV	 OK_FLAG,OFF	  ; an error...reset flag.		    ;AN000;
						.ENDSELECT		  ;					    ;AN000;
 0DA4                        2	$l27: 
 0DA4  E8 00DE R				CALL   SYSPARSE 	  ; continue parsing			    ;AN000;
 0DA7  5B					POP    BX		  ;					    ;AN000;
					      .ENDIF			  ;					    ;AN000;
					    .ENDWHILE			  ;					    ;AN000;
 0DA8  EB 84                 3						jmp $l20 
 0DAA                        2	$l21: 
 0DAA  59				    POP    CX			  ; restore original parse..		    ;AN000;
 0DAB  5E				    POP    SI			  ; registers.				    ;AN000;
 0DAC  1F				    POP    DS			  ;					    ;AN000;
 0DAD  5F				    POP    DI			  ;					    ;AN000;
 0DAE  5B				    POP    BX			  ;					    ;AN000;
 0DAF  C3				    RET 			  ;					    ;AN000;
 0DB0				PARSE_MAIN  ENDP								    ;AN000;
														    ;AN000;
				
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; PROCEDURE_NAME: PARSE_COMP
				;
				; FUNCTION:
				; THIS PROCEDURE PARSES A COMPLEX LIST FOUND WITHIN THE LPT=(	)
				; COMPLEX LIST.
				;
				; AT ENTRY: RESULT BUFFER CONTAINS POINTER TO COMPLEX STRING
				;
				; AT EXIT:
				;    NORMAL: TABLE SET UP WITH VALUES FOUND
				;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:03
PARSE CODE AND CONTROL BLOCKS FOR PRINTER.SYS               Page     1-23


				;    ERROR: OK_FLAG = 0
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				
 0DB0				PARSE_COMP   PROC   NEAR							    ;AN000;
 0DB0  57				     PUSH   DI			  ; setup ro parse the nested.. 	    ;AN000;
 0DB1  1E				     PUSH   DS			  ; complex string..saving the..	    ;AN000;
 0DB2  56				     PUSH   SI			  ; current parse status.		    ;AN000;
 0DB3  51				     PUSH   CX			  ;					    ;AN000;
 0DB4  8B FB				     MOV    DI,BX		  ;					    ;AN000;
 0DB6  57				     PUSH   DI			  ;					    ;AN000;
 0DB7  33 C9				     XOR    CX,CX		  ;					    ;AN000;
 0DB9  8D 3E 0C6A R			     LEA    DI,PARMS3		  ; next control block			    ;AN000;
 0DBD  2E: C5 36 0C81 R			     LDS    SI,RESULT_VAL	  ; point to stored string.		    ;AN000;
 0DC2  53				     PUSH   BX			  ;					    ;AN000;
 0DC3  E8 00DE R			     CALL   SYSPARSE		  ;					    ;AN000;
 0DC6  5B				     POP    BX			  ;					    ;AN000;
					     .WHILE <AX NE RC_EOL> AND	  ; not EOL?...and..			    ;AN000;
 0DC7                        2	$l42: 
 0DC7  3D FFFF               3						cmp AX,RC_EOL 
 0DCA  74 42                 6						je $l43 
					     .WHILE <OK_FLAG EQ ON> AND   ; error flag still okay?		    ;AN000;
 0DCC  2E: 80 3E 0C85 R 01   3						cmp OK_FLAG,ON 
 0DD2  75 3A                 6						jne $l43 
					     .WHILE <AX NE RC_OP_MISSING> ;					    ;AN000;
 0DD4  3D 0002               3						cmp AX,RC_OP_MISSING 
 0DD7  74 35                 6						je $l43 
					       .IF <AX NE RC_NO_ERROR>	  ; parse error?...or.. 		    ;AN000;
 0DD9  3D 0000               3						cmp AX,RC_NO_ERROR 
 0DDC  74 08                 6						je $l46 
 0DDE  2E: C6 06 0C85 R 00			 MOV	OK_FLAG,OFF	  ; found?....yes..reset flag.		    ;AN000;
					       .ELSE			  ; no...process..			    ;AN000;
 0DE4  EB E1                 3						jmp short $l42 
 0DE6                        2	$l46: 
 0DE6  2E: FF 07				 INC	WORD PTR CS:[BX]  ; increment counter			    ;AN000;
						 .IF <<WORD PTR CS:[BX]> LE TEN>				    ;AN000;
 0DE9  2E: 83 3F 0A          3						cmp WORD PTR CS:[BX],TEN 
 0DED  7F 17                 5						jnLE $l50 
 0DEF  5F					   POP	  DI		  ;					    ;AN000;
 0DF0  2E: A1 0C81 R				   MOV	  AX,WORD PTR RESULT_VAL ; get numeric value into word	    ;AN000;
 0DF4  2E: 89 45 02				   MOV	  WORD PTR CS:[DI+2],AX ;				    ;AN000;
 0DF8  47					   INC	  DI		  ;					    ;AN000;
 0DF9  47					   INC	  DI		  ;					    ;AN000;
 0DFA  57					   PUSH   DI		  ;					    ;AN000;
 0DFB  53					   PUSH   BX		  ;					    ;AN000;
 0DFC  8D 3E 0C6A R				   LEA	  DI,PARMS3	  ;					    ;AN000;
 0E00  E8 00DE R				   CALL   SYSPARSE	  ; continue parsing			    ;AN000;
 0E03  5B					   POP	  BX		  ;					    ;AN000;
						 .ELSE			  ;					    ;AN000;
 0E04  EB C1                 3						jmp short $l42 
 0E06                        2	$l50: 
 0E06  2E: C6 06 0C85 R 00			   MOV	  OK_FLAG,OFF	  ;					    ;AN000;
						 .ENDIF 		  ;					    ;AN000;
					       .ENDIF			  ;					    ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:03
PARSE CODE AND CONTROL BLOCKS FOR PRINTER.SYS               Page     1-24


					     .ENDWHILE			  ;					    ;AN000;
 0E0C  EB B9                 3						jmp $l42 
 0E0E                        2	$l43: 
 0E0E  5F				     POP    DI			  ;					    ;AN000;
 0E0F  59				     POP    CX			  ; restore previous parse..		    ;AN000;
 0E10  5E				     POP    SI			  ; registers.				    ;AN000;
 0E11  1F				     POP    DS			  ;					    ;AN000;
 0E12  5F				     POP    DI			  ;					    ;AN000;
 0E13  C3				     RET			  ;					    ;AN000;
 0E14				PARSE_COMP   ENDP								    ;AN000;
				
				
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; PROCEDURE_NAME: PARSE_STR
				;
				; FUNCTION:
				; THIS PROCEDURE PARSES A STRING FOUND WITHIN THE LPT=(   ) STATEMENT
				;
				; AT ENTRY: RESULT BUFFER POINTS TO ASCIIZ STRING
				;
				; AT EXIT:
				;    NORMAL: TABLE SET UP WITH VALUES FOUND
				;
				;    ERROR: STRING > 8 - OK_FLAG SET OFF
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				
 0E14				PARSE_STR    PROC   NEAR							    ;AN000;
 0E14  57				     PUSH   DI			  ; get source and..			    ;AN000;
 0E15  1E				     PUSH   DS			  ; destination registers..		    ;AN000;
 0E16  56				     PUSH   SI			  ; setup.				    ;AN000;
 0E17  51				     PUSH   CX			  ;					    ;AN000;
 0E18  2E: C5 36 0C81 R			     LDS    SI,RESULT_VAL	  ;					    ;AN000;
 0E1D  8B FB				     MOV    DI,BX		  ;					    ;AN000;
 0E1F  2E: C7 05 0008			     MOV    CS:[DI].N_LENGTH,EIGHT ;					    ;AN000;
 0E24  47				     INC    DI			  ;					    ;AN000;
 0E25  47				     INC    DI			  ;					    ;AN000;
 0E26  B9 0008				     MOV    CX,EIGHT		  ;					    ;AN000;
 0E29  AC				     LODSB			  ; load first character.		    ;AN000;
					     .WHILE <AL NE ZERO> AND	  ; while not at end of ASCIIZ do..	    ;AN000;
 0E2A                        2	$l53: 
 0E2A  3C 00                 3						cmp AL,ZERO 
 0E2C  74 0A                 6						je $l54 
					     .WHILE <CX NE ZERO>	  ;					    ;AN000;
 0E2E  83 F9 00              3						cmp CX,ZERO 
 0E31  74 05                 6						je $l54 
 0E33  AA				       STOSB			  ; store..				    ;AN000;
 0E34  AC				       LODSB			  ; load next character..		    ;AN000;
 0E35  49				       DEC    CX		  ;					    ;AN000;
					     .ENDWHILE			  ;					    ;AN000;
 0E36  EB F2                 3						jmp $l53 
 0E38                        2	$l54: 
					     .IF <CX EQ ZERO>							    ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:03
PARSE CODE AND CONTROL BLOCKS FOR PRINTER.SYS               Page     1-25


 0E38  83 F9 00              3						cmp CX,ZERO 
 0E3B  75 06                 6						jne $l56 
 0E3D  2E: C6 06 0C85 R 00		       MOV    OK_FLAG,OFF						    ;AN000;
					     .ENDIF								    ;AN000;
 0E43                        2	$l56: 
 0E43  59				     POP    CX			  ; value found.			    ;AN000;
 0E44  5E				     POP    SI			  ; restore registers.			    ;AN000;
 0E45  1F				     POP    DS			  ;					    ;AN000;
 0E46  5F				     POP    DI			  ;					    ;AN000;
 0E47  C3				     RET								    ;AN000;
 0E48				PARSE_STR    ENDP								    ;AN000;
				
				
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; PROCEDURE_NAME: COPY_NAME
				;
				; FUNCTION:
				; THIS PROCEDURE COPIES THE FOUND STRING VALUE INTO THE TABLE.
				;
				; AT ENTRY: N/A
				;
				; AT EXIT:
				;    NORMAL: TABLE UPDATED
				;
				;    ERROR: N/A
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				
 0E48				COPY_NAME    PROC   NEAR							    ;AN000;
 0E48  57				     PUSH   DI			  ; get source and..			    ;AN000;
 0E49  1E				     PUSH   DS			  ; destination registers..		    ;AN000;
 0E4A  56				     PUSH   SI			  ; setup.				    ;AN000;
 0E4B  0E				     PUSH   CS			  ;					    ;AN000;
 0E4C  1F				     POP    DS			  ;					    ;AN000;
 0E4D  2E: 8B 36 0C7F R			     MOV    SI,SYN_PTR		  ;					    ;AN000;
 0E52  2E: 8B 7F 02			     MOV    DI,CS:[BX].DN_OFFSET  ;					    ;AN000;
 0E56  2E: C7 05 0008			     MOV    CS:[DI].N_LENGTH,EIGHT ;					    ;AN000;
 0E5B  47				     INC    DI			  ;					    ;AN000;
 0E5C  47				     INC    DI			  ;					    ;AN000;
 0E5D  AC				     LODSB			  ; load first character.		    ;AN000;
					     .WHILE <AL NE ZERO>	  ; while not at end of ASCIIZ do..	    ;AN000;
 0E5E                        2	$l59: 
 0E5E  3C 00                 3						cmp AL,ZERO 
 0E60  74 0C                 6						je $l60 
					       .IF <AL NE ':'> AND        ;ignore colon                             ;AN001;
 0E62  3C 3A                 3						cmp AL,':' 
 0E64  74 05                 6						je $l62 
					       .IF <AL NE '='>            ; or =                                    ;AN001;
 0E66  3C 3D                 3						cmp AL,'=' 
 0E68  74 01                 6						je $l62 
 0E6A  AA					 STOSB			  ; store..				    ;AN000;
					       .ENDIF			  ;					    ;AN000;
 0E6B                        2	$l62: 
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:03
PARSE CODE AND CONTROL BLOCKS FOR PRINTER.SYS               Page     1-26


 0E6B  AC				       LODSB			  ; load next character..		    ;AN000;
					     .ENDWHILE			  ;					    ;AN000;
 0E6C  EB F0                 3						jmp $l59 
 0E6E                        2	$l60: 
 0E6E  5E				     POP    SI			  ; restore registers.			    ;AN000;
 0E6F  1F				     POP    DS			  ;					    ;AN000;
 0E70  5F				     POP    DI			  ;					    ;AN000;
 0E71  C3				     RET								    ;AN000;
 0E72				COPY_NAME    ENDP								    ;AN000;
				
 0E72				CSEG	      ENDS
					      END

Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:03
PARSE CODE AND CONTROL BLOCKS FOR PRINTER.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:44:03
PARSE CODE AND CONTROL BLOCKS FOR PRINTER.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 . . . . . . . . . . . .  	0052	0024
  BFLAG  . . . . . . . . . . . .  	0000
  DEV_HDRO . . . . . . . . . . .  	0002
  DEV_HDRS . . . . . . . . . . .  	0004
  LPT_STRAO  . . . . . . . . . .  	0006
  LPT_STRAS  . . . . . . . . . .  	0008
  LPT_INTRO  . . . . . . . . . .  	000A
  LPT_INTRS  . . . . . . . . . .  	000C
  RH_PTRO  . . . . . . . . . . .  	000E
  RH_PTRS  . . . . . . . . . . .  	0010
  RNORMO . . . . . . . . . . . .  	0012
  PRN_BUFO . . . . . . . . . . .  	0014
  DID_PRN  . . . . . . . . . . .  	0016
  PCLASS . . . . . . . . . . . .  	0018
  STATE  . . . . . . . . . . . .  	001A
  STATUS . . . . . . . . . . . .  	001C
  PDESCO . . . . . . . . . . . .  	001E
  HSLMX  . . . . . . . . . . . .  	0020
  HARDMX . . . . . . . . . . . .  	0022
  HARDSO . . . . . . . . . . . .  	0024
  HCARMX . . . . . . . . . . . .  	0026
  HRBUFO . . . . . . . . . . . .  	0028
  RSLMX  . . . . . . . . . . . .  	002A
  RAMMX  . . . . . . . . . . . .  	002C
  RAMSO  . . . . . . . . . . . .  	002E
  RBUFMX . . . . . . . . . . . .  	0030
  RMBUFO . . . . . . . . . . . .  	0032
  FTSZPA . . . . . . . . . . . .  	0034
  FTSIZE . . . . . . . . . . . .  	0036
  FTSTART  . . . . . . . . . . .  	0038
  FTSLOTO  . . . . . . . . . . .  	003A
  FTDLO  . . . . . . . . . . . .  	003C
  FSELEN . . . . . . . . . . . .  	003E
  FSELMAX  . . . . . . . . . . .  	0040
  PAR_EXTRACTO . . . . . . . . .  	0042
  SAVED_CP . . . . . . . . . . .  	004E
  BUFEND . . . . . . . . . . . .  	0050
DHS  . . . . . . . . . . . . . .  	0012	0006
  DH_NEXTO . . . . . . . . . . .  	0000
  DH_NEXTS . . . . . . . . . . .  	0002
  DH_STRAO . . . . . . . . . . .  	0006
  DH_INTRO . . . . . . . . . . .  	0008
  DH_NAME  . . . . . . . . . . .  	000A
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:03
PARSE CODE AND CONTROL BLOCKS FOR PRINTER.SYS               Symbols-3


FBUFS  . . . . . . . . . . . . .  	000A	0004
  FLAG . . . . . . . . . . . . .  	0000
  BUFFER_LEN . . . . . . . . . .  	0002
  BUFFER_ADDR  . . . . . . . . .  	0004
  NUM_FTBLK  . . . . . . . . . .  	0008
FTBLK  . . . . . . . . . . . . .  	002A	0014
  FTB_LENGTH . . . . . . . . . .  	0000
  FTB_STATUS . . . . . . . . . .  	0002
  FTB_TYPE . . . . . . . . . . .  	0004
  FTB_TID  . . . . . . . . . . .  	0006
  FTB_CP . . . . . . . . . . . .  	000E
  FTB_MOD  . . . . . . . . . . .  	0010
  FTB_FONTS  . . . . . . . . . .  	0012
  FTB_ROWS . . . . . . . . . . .  	0014
  FTB_COLS . . . . . . . . . . .  	0015
  FTB_X  . . . . . . . . . . . .  	0016
  FTB_Y  . . . . . . . . . . . .  	0017
  FTB_COUNT  . . . . . . . . . .  	0018
  FTB_SELECT . . . . . . . . . .  	001A
  FTB_SELLEN . . . . . . . . . .  	001C
  FTB_DLEFT  . . . . . . . . . .  	001E
  FTB_DLEN . . . . . . . . . . .  	0020
  FTB_DALO . . . . . . . . . . .  	0022
  FTB_DAHI . . . . . . . . . . .  	0024
  TARGET_LO  . . . . . . . . . .  	0026
  TARGET_HI  . . . . . . . . . .  	0028
GB1S . . . . . . . . . . . . . .  	0008	0004
  GB1_FLAG . . . . . . . . . . .  	0000
  GB1_LEN  . . . . . . . . . . .  	0002
  GB1_NUM  . . . . . . . . . . .  	0004
  GB1_CP . . . . . . . . . . . .  	0006
GB2S . . . . . . . . . . . . . .  	0004	0002
  GB2_LEN  . . . . . . . . . . .  	0000
  GB2_CP . . . . . . . . . . . .  	0002
GB3S . . . . . . . . . . . . . .  	0004	0002
  GB3_LEN  . . . . . . . . . . .  	0000
  GB3_GBL  . . . . . . . . . . .  	0002
GBLS . . . . . . . . . . . . . .  	0004	0002
  GBL_LEN  . . . . . . . . . . .  	0000
  GBL_CP . . . . . . . . . . . .  	0002
GIH  . . . . . . . . . . . . . .  	0017	0006
  GIH_MAF  . . . . . . . . . . .  	000D
  GIH_MIF  . . . . . . . . . . .  	000E
  GIH_SI . . . . . . . . . . . .  	000F
  GIH_DI . . . . . . . . . . . .  	0011
  GIH_GBA  . . . . . . . . . . .  	0013
PARSE_DESG . . . . . . . . . . .  	0006	0003
  NUM_VALUES . . . . . . . . . .  	0000
  NUM_DESGS  . . . . . . . . . .  	0002
  NUM_FONTS  . . . . . . . . . .  	0004
PARSE_HWCP . . . . . . . . . . .  	0016	000B
  NUM_HWCPS  . . . . . . . . . .  	0000
  HWCP_1 . . . . . . . . . . . .  	0002
  HWCP_2 . . . . . . . . . . . .  	0004
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:03
PARSE CODE AND CONTROL BLOCKS FOR PRINTER.SYS               Symbols-4


  HWCP_3 . . . . . . . . . . . .  	0006
  HWCP_4 . . . . . . . . . . . .  	0008
  HWCP_5 . . . . . . . . . . . .  	000A
  HWCP_6 . . . . . . . . . . . .  	000C
  HWCP_7 . . . . . . . . . . . .  	000E
  HWCP_8 . . . . . . . . . . . .  	0010
  HWCP_9 . . . . . . . . . . . .  	0012
  HWCP_10  . . . . . . . . . . .  	0014
PARSE_NAME . . . . . . . . . . .  	000A	0002
  N_LENGTH . . . . . . . . . . .  	0000
  FNAME  . . . . . . . . . . . .  	0002
PARSE_OFFSETS  . . . . . . . . .  	000C	0006
  DN_OFFSET  . . . . . . . . . .  	0002
  DI_OFFSET  . . . . . . . . . .  	0004
  DCP_OFFSET . . . . . . . . . .  	0006
  DD_OFFSET  . . . . . . . . . .  	0008
PAR_DESGT  . . . . . . . . . . .  	0006	0003
  PAR_DESGL  . . . . . . . . . .  	0000
  PAR_DESG . . . . . . . . . . .  	0002
  PAR_FONT . . . . . . . . . . .  	0004
PAR_DEVOT  . . . . . . . . . . .  	000C	0006
  PAR_ONUM . . . . . . . . . . .  	0000
  PAR_DNMO . . . . . . . . . . .  	0002
  PAR_DIDO . . . . . . . . . . .  	0004
  PAR_HWCPO  . . . . . . . . . .  	0006
  PAR_DESGO  . . . . . . . . . .  	0008
  PAR_PARMO  . . . . . . . . . .  	000A
PAR_DIDT . . . . . . . . . . . .  	0003	0002
  PAR_DIDL . . . . . . . . . . .  	0000
  PAR_DID  . . . . . . . . . . .  	0002
PAR_DNMT . . . . . . . . . . . .  	0003	0002
  PAR_DNML . . . . . . . . . . .  	0000
  PAR_DNM  . . . . . . . . . . .  	0002
PAR_HWCPT  . . . . . . . . . . .  	0004	0002
  PAR_HWCPL  . . . . . . . . . .  	0000
  PAR_HWCP . . . . . . . . . . .  	0002
PAR_OT . . . . . . . . . . . . .  	0004	0002
  PAR_DEV_NUM  . . . . . . . . .  	0000
  PAR_OFF  . . . . . . . . . . .  	0002
PAR_PARMT  . . . . . . . . . . .  	0004	0002
  PAR_PARML  . . . . . . . . . .  	0000
  PAR_PARM . . . . . . . . . . .  	0002
PDS  . . . . . . . . . . . . . .  	001C	0004
  SELH_O . . . . . . . . . . . .  	0016
  SELR_O . . . . . . . . . . . .  	0018
  SELB_O . . . . . . . . . . . .  	001A
PDSH . . . . . . . . . . . . . .  	0016	0009
  PD_LEN . . . . . . . . . . . .  	0000
  TYPEID . . . . . . . . . . . .  	0002
  VMINOR . . . . . . . . . . . .  	000A
  VMAJOR . . . . . . . . . . . .  	000B
  CLASS  . . . . . . . . . . . .  	000C
  FONTSZ . . . . . . . . . . . .  	000E
  HSLOTS . . . . . . . . . . . .  	0010
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:03
PARSE CODE AND CONTROL BLOCKS FOR PRINTER.SYS               Symbols-5


  HWCPMIN  . . . . . . . . . . .  	0012
  RSLOTS . . . . . . . . . . . .  	0014
RH0  . . . . . . . . . . . . . .  	0019	0007
  RH0_ENDO . . . . . . . . . . .  	000E
  RH0_ENDS . . . . . . . . . . .  	0010
  RH0_BPBA . . . . . . . . . . .  	0012
  RH0_CONFIG_ERRMSG  . . . . . .  	0017
RH3  . . . . . . . . . . . . . .  	0014	0005
  RH3_DTAO . . . . . . . . . . .  	000E
  RH3_DTAS . . . . . . . . . . .  	0010
  RH3_CNT  . . . . . . . . . . .  	0012
RHC  . . . . . . . . . . . . . .  	000D	0005
  RHC_LEN  . . . . . . . . . . .  	0000
  RHC_CMD  . . . . . . . . . . .  	0002
  RHC_STA  . . . . . . . . . . .  	0003
SLTS . . . . . . . . . . . . . .  	0004	0002
  SLT_CP . . . . . . . . . . . .  	0000
  SLT_AT . . . . . . . . . . . .  	0002

Segments and Groups:

                N a m e         	Length	 Align	Combine Class

CSEG . . . . . . . . . . . . . .  	0E72	PARA	PUBLIC	'CODE'

Symbols:            

                N a m e         	Type	 Value	 Attr

AT_ACT . . . . . . . . . . . . .  	NUMBER	2000	
AT_FONT  . . . . . . . . . . . .  	NUMBER	0200	
AT_HWCP  . . . . . . . . . . . .  	NUMBER	4000	
AT_LOAD  . . . . . . . . . . . .  	NUMBER	0100	
AT_NO_FONT . . . . . . . . . . .  	NUMBER	FDFF	
AT_NO_LOAD . . . . . . . . . . .  	NUMBER	FEFF	
AT_OCC . . . . . . . . . . . . .  	NUMBER	1000	
AT_OLD . . . . . . . . . . . . .  	NUMBER	8000	
AT_RAM1  . . . . . . . . . . . .  	NUMBER	0001	
AT_RAM2  . . . . . . . . . . . .  	NUMBER	0002	
AT_RAM3  . . . . . . . . . . . .  	NUMBER	0004	
AT_RAM4  . . . . . . . . . . . .  	NUMBER	0008	
AT_RAMS  . . . . . . . . . . . .  	NUMBER	000F	
AT_SELECT  . . . . . . . . . . .  	NUMBER	0400	

BAD_DEVICE_MSG . . . . . . . . .  	NUMBER	0002	
BAD_SYNTAX_MSG . . . . . . . . .  	NUMBER	000C	
BF_LPT1  . . . . . . . . . . . .  	NUMBER	0001	
BF_LPT2  . . . . . . . . . . . .  	NUMBER	0002	
BF_LPT3  . . . . . . . . . . . .  	NUMBER	0003	
BF_MEM_DONE  . . . . . . . . . .  	NUMBER	8000	
BF_PRN . . . . . . . . . . . . .  	NUMBER	0000	
BUF  . . . . . . . . . . . . . .  	TEXT  CS:[BX]		

CAPSW  . . . . . . . . . . . . .  	NUMBER	0001	
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:03
PARSE CODE AND CONTROL BLOCKS FOR PRINTER.SYS               Symbols-6


CMD_GIO  . . . . . . . . . . . .  	NUMBER	0013	
CMD_INI  . . . . . . . . . . . .  	NUMBER	0000	
CMD_WRT  . . . . . . . . . . . .  	NUMBER	0008	
CMPXSW . . . . . . . . . . . . .  	NUMBER	0001	
COMPLEX  . . . . . . . . . . . .  	NUMBER	0004	
COPY_NAME  . . . . . . . . . . .  	N PROC	0E48	CSEG	Length = 002A
CPSW . . . . . . . . . . . . . .  	NUMBER	0001	
CP_PREPS . . . . . . . . . . . .  	L BYTE	0C56	CSEG
CTL5202_OFFS . . . . . . . . . .  	NUMBER	0008	
CTL_MAX  . . . . . . . . . . . .  	NUMBER	0020	

DATESW . . . . . . . . . . . . .  	NUMBER	0000	
DESG_END . . . . . . . . . . . .  	NUMBER	0003	
DESG_WR  . . . . . . . . . . . .  	NUMBER	0002	
DEVICE_NUM . . . . . . . . . . .  	V WORD	0000	CSEG	External
DEVN_LEN . . . . . . . . . . . .  	NUMBER	0008	
DRVSW  . . . . . . . . . . . . .  	NUMBER	0000	
DSF_CARTCP . . . . . . . . . . .  	NUMBER	0001	
DSF_FIFOCP . . . . . . . . . . .  	NUMBER	8000	
D_NAME . . . . . . . . . . . . .  	L WORD	0BF3	CSEG

EIGHT  . . . . . . . . . . . . .  	NUMBER	0008	

FAIL . . . . . . . . . . . . . .  	NUMBER	4000	
FARSW  . . . . . . . . . . . . .  	NUMBER	0000	
FILESW . . . . . . . . . . . . .  	NUMBER	0001	
FIVE . . . . . . . . . . . . . .  	NUMBER	0005	
FLAG_RESTART . . . . . . . . . .  	NUMBER	0001	
FOUR . . . . . . . . . . . . . .  	NUMBER	0004	
FPKT . . . . . . . . . . . . . .  	TEXT  DS:[SI]		
FSTAT_BOTTOM . . . . . . . . . .  	NUMBER	FFF0	
FSTAT_COMPLETE . . . . . . . . .  	NUMBER	FFFF	
FSTAT_FONT . . . . . . . . . . .  	NUMBER	FFFE	
FSTAT_FOUND  . . . . . . . . . .  	NUMBER	FFFD	
FSTAT_MATCH  . . . . . . . . . .  	NUMBER	FFFC	
FSTAT_SEARCH . . . . . . . . . .  	NUMBER	FFFB	
FTP  . . . . . . . . . . . . . .  	TEXT  ES:[BX]		

GB3_MINILEN  . . . . . . . . . .  	NUMBER	0004	
GIOB . . . . . . . . . . . . . .  	TEXT  DS:[SI]		
GOOD . . . . . . . . . . . . . .  	NUMBER	0000	

HARDSL_MAX . . . . . . . . . . .  	NUMBER	000C	
HP . . . . . . . . . . . . . . .  	TEXT  DS:[SI]		
HWCP . . . . . . . . . . . . . .  	L BYTE	0C4D	CSEG
HWCPS  . . . . . . . . . . . . .  	L BYTE	0C73	CSEG

INCSW  . . . . . . . . . . . . .  	NUMBER	0001	

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

LFEOLSW  . . . . . . . . . . . .  	NUMBER	0001	
LOADED . . . . . . . . . . . . .  	NUMBER	2000	
LOCKED . . . . . . . . . . . . .  	NUMBER	0004	
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:03
PARSE CODE AND CONTROL BLOCKS FOR PRINTER.SYS               Symbols-7



MAF_CON  . . . . . . . . . . . .  	NUMBER	0003	
MAF_PTR  . . . . . . . . . . . .  	NUMBER	0005	
MIF_DEN  . . . . . . . . . . . .  	NUMBER	004D	
MIF_DST  . . . . . . . . . . . .  	NUMBER	004C	
MIF_IVK  . . . . . . . . . . . .  	NUMBER	004A	
MIF_QIV  . . . . . . . . . . . .  	NUMBER	006A	
MIF_QLS  . . . . . . . . . . . .  	NUMBER	006B	

NAME_LEN . . . . . . . . . . . .  	NUMBER	0008	
NHD  . . . . . . . . . . . . . .  	TEXT  ES:[DI]		
NINE . . . . . . . . . . . . . .  	NUMBER	0009	
NORMAL . . . . . . . . . . . . .  	NUMBER	0000	
NOVALS . . . . . . . . . . . . .  	L BYTE	0C7C	CSEG
NUMBER . . . . . . . . . . . . .  	NUMBER	0001	
NUMSW  . . . . . . . . . . . . .  	NUMBER	0001	
NUM_LOOP . . . . . . . . . . . .  	L BYTE	0C86	CSEG
N_VAL_RANGE  . . . . . . . . . .  	L BYTE	0C5F	CSEG

OFF  . . . . . . . . . . . . . .  	NUMBER	0000	
OK_FLAG  . . . . . . . . . . . .  	L BYTE	0C85	CSEG
ON . . . . . . . . . . . . . . .  	NUMBER	0001	
ONE  . . . . . . . . . . . . . .  	NUMBER	0001	

PARMS1 . . . . . . . . . . . . .  	L WORD	0BE8	CSEG
PARMS2 . . . . . . . . . . . . .  	L WORD	0C37	CSEG
PARMS3 . . . . . . . . . . . . .  	L WORD	0C6A	CSEG
PARMSX1  . . . . . . . . . . . .  	L BYTE	0BEB	CSEG
PARMSX2  . . . . . . . . . . . .  	L BYTE	0C3A	CSEG
PARMSX3  . . . . . . . . . . . .  	L BYTE	0C6D	CSEG
PARSER . . . . . . . . . . . . .  	N PROC	0C87	CSEG	Global	Length = 0092
PARSE_COMP . . . . . . . . . . .  	N PROC	0DB0	CSEG	Length = 0064
PARSE_MAIN . . . . . . . . . . .  	N PROC	0D19	CSEG	Length = 0097
PARSE_STR  . . . . . . . . . . .  	N PROC	0E14	CSEG	Length = 0034
PRT_LIST . . . . . . . . . . . .  	L WORD	0BFC	CSEG
PRT_TYPE . . . . . . . . . . . .  	L BYTE	0C44	CSEG
PSDATA_SEG . . . . . . . . . . .  	ALIAS	 CS		
PSE  . . . . . . . . . . . . . .  	TEXT  ES:[DI]		

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

RAMSL_MAX  . . . . . . . . . . .  	NUMBER	000C	
RC_EOL . . . . . . . . . . . . .  	NUMBER	-0001	
RC_NO_ERROR  . . . . . . . . . .  	NUMBER	0000	
RC_OP_MISSING  . . . . . . . . .  	NUMBER	0002	
REFRESH  . . . . . . . . . . . .  	NUMBER	0800	
REPLX  . . . . . . . . . . . . .  	NUMBER	8000	
RESULT_BUF . . . . . . . . . . .  	L BYTE	0C7D	CSEG
RESULT_TYPE  . . . . . . . . . .  	L BYTE	0C7D	CSEG
RESULT_VAL . . . . . . . . . . .  	L DWORD	0C81	CSEG
RH . . . . . . . . . . . . . . .  	TEXT  ES:[DI]		

SEVEN  . . . . . . . . . . . . .  	NUMBER	0007	
SIX  . . . . . . . . . . . . . .  	NUMBER	0006	
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:03
PARSE CODE AND CONTROL BLOCKS FOR PRINTER.SYS               Symbols-8


STACK_SIZE . . . . . . . . . . .  	NUMBER	0028	
STAT_BADATA  . . . . . . . . . .  	NUMBER	800C	
STAT_BADDEN  . . . . . . . . . .  	NUMBER	800C	
STAT_BFFDEN  . . . . . . . . . .  	NUMBER	8000	
STAT_CMDERR  . . . . . . . . . .  	NUMBER	8003	
STAT_DELETE  . . . . . . . . . .  	NUMBER	8000	
STAT_DEVERR  . . . . . . . . . .  	NUMBER	800A	
STAT_DONE  . . . . . . . . . . .  	NUMBER	0001	
STAT_DUPLCP  . . . . . . . . . .  	NUMBER	800A	
STAT_ERROR . . . . . . . . . . .  	NUMBER	8000	
STAT_NOBUFF  . . . . . . . . . .  	NUMBER	800C	
STAT_NOCP  . . . . . . . . . . .  	NUMBER	8007	
STAT_NOCPIV  . . . . . . . . . .  	NUMBER	8007	
STAT_NOFIND  . . . . . . . . . .  	NUMBER	8008	
STAT_TOMANY  . . . . . . . . . .  	NUMBER	800A	
STRING . . . . . . . . . . . . .  	NUMBER	0003	
SWSW . . . . . . . . . . . . . .  	NUMBER	0000	
SYN_PTR  . . . . . . . . . . . .  	L WORD	0C7F	CSEG
SYSPARSE . . . . . . . . . . . .  	N PROC	00DE	CSEG	Length = 01CB

TABLE  . . . . . . . . . . . . .  	V WORD	0000	CSEG	External
TABLE_LEN  . . . . . . . . . . .  	NUMBER	0122	
TEN  . . . . . . . . . . . . . .  	NUMBER	000A	
THREE  . . . . . . . . . . . . .  	NUMBER	0003	
TIMESW . . . . . . . . . . . . .  	NUMBER	0001	
TWO  . . . . . . . . . . . . . .  	NUMBER	0002	
TYPE_DISPLAY . . . . . . . . . .  	NUMBER	0001	
TYPE_PRINTER . . . . . . . . . .  	NUMBER	0002	

VAL1SW . . . . . . . . . . . . .  	NUMBER	0001	
VAL2SW . . . . . . . . . . . . .  	NUMBER	0000	
VAL3SW . . . . . . . . . . . . .  	NUMBER	0000	

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

$L1  . . . . . . . . . . . . . .  	L NEAR	0CA6	CSEG
$L12 . . . . . . . . . . . . . .  	L NEAR	0CDF	CSEG
$L16 . . . . . . . . . . . . . .  	L NEAR	0D12	CSEG
$L17 . . . . . . . . . . . . . .  	L NEAR	0D11	CSEG
$L2  . . . . . . . . . . . . . .  	L NEAR	0CFF	CSEG
$L20 . . . . . . . . . . . . . .  	L NEAR	0D2E	CSEG
$L21 . . . . . . . . . . . . . .  	L NEAR	0DAA	CSEG
$L24 . . . . . . . . . . . . . .  	L NEAR	0D4D	CSEG
$L27 . . . . . . . . . . . . . .  	L NEAR	0DA4	CSEG
$L28 . . . . . . . . . . . . . .  	L NEAR	0D60	CSEG
$L30 . . . . . . . . . . . . . .  	L NEAR	0D8D	CSEG
$L32 . . . . . . . . . . . . . .  	L NEAR	0D7A	CSEG
$L33 . . . . . . . . . . . . . .  	L NEAR	0D76	CSEG
$L39 . . . . . . . . . . . . . .  	L NEAR	0D9E	CSEG
$L4  . . . . . . . . . . . . . .  	L NEAR	0CF8	CSEG
$L42 . . . . . . . . . . . . . .  	L NEAR	0DC7	CSEG
$L43 . . . . . . . . . . . . . .  	L NEAR	0E0E	CSEG
$L46 . . . . . . . . . . . . . .  	L NEAR	0DE6	CSEG
$L5  . . . . . . . . . . . . . .  	L NEAR	0CC0	CSEG
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:03
PARSE CODE AND CONTROL BLOCKS FOR PRINTER.SYS               Symbols-9


$L50 . . . . . . . . . . . . . .  	L NEAR	0E06	CSEG
$L53 . . . . . . . . . . . . . .  	L NEAR	0E2A	CSEG
$L54 . . . . . . . . . . . . . .  	L NEAR	0E38	CSEG
$L56 . . . . . . . . . . . . . .  	L NEAR	0E43	CSEG
$L59 . . . . . . . . . . . . . .  	L NEAR	0E5E	CSEG
$L60 . . . . . . . . . . . . . .  	L NEAR	0E6E	CSEG
$L62 . . . . . . . . . . . . . .  	L NEAR	0E6B	CSEG
$L9  . . . . . . . . . . . . . .  	L NEAR	0CF2	CSEG
$LL16  . . . . . . . . . . . . .  	NUMBER	0010	
$LL32  . . . . . . . . . . . . .  	NUMBER	0020	
$LL4 . . . . . . . . . . . . . .  	NUMBER	0004	
$LL56  . . . . . . . . . . . . .  	NUMBER	0038	
$LL62  . . . . . . . . . . . . .  	NUMBER	003E	
$P_0099  . . . . . . . . . . . .  	N PROC	066F	CSEG	Length = 000E
$P_0099ERR . . . . . . . . . . .  	L NEAR	067B	CSEG
$P_1ST_VAL . . . . . . . . . . .  	L WORD	00C0	CSEG
$P_2ND_VAL . . . . . . . . . . .  	L WORD	00C2	CSEG
$P_3RD_VAL . . . . . . . . . . .  	L WORD	00C4	CSEG
$P_4TH_VAL . . . . . . . . . . .  	L WORD	00C6	CSEG
$P_ASCII80 . . . . . . . . . . .  	NUMBER	0080	
$P_BL_EQ . . . . . . . . . . . .  	NUMBER	203D	
$P_BRIDGE  . . . . . . . . . . .  	L NEAR	042D	CSEG
$P_CAPS_RET  . . . . . . . . . .  	L NEAR	0546	CSEG
$P_CAP_CHAR  . . . . . . . . . .  	NUMBER	0002	
$P_CAP_FILE  . . . . . . . . . .  	NUMBER	0001	
$P_CHAR_CAP_PTR  . . . . . . . .  	L BYTE	00C8	CSEG
$P_CHECK_MATCH_FLAGS . . . . . .  	N PROC	03D7	CSEG	Length = 00DD
$P_CHECK_OVF . . . . . . . . . .  	N PROC	065D	CSEG	Length = 0012
$P_CHKDFIN . . . . . . . . . . .  	L NEAR	0B5B	CSEG
$P_CHK_DBCS  . . . . . . . . . .  	N PROC	0B92	CSEG	Length = 0056
$P_CHK_DELIM . . . . . . . . . .  	N PROC	0B13	CSEG	Length = 0061
$P_CHK_DELIM00 . . . . . . . . .  	L NEAR	0B2D	CSEG
$P_CHK_DELIM01 . . . . . . . . .  	L NEAR	0B3D	CSEG
$P_CHK_DELIM_EXIT  . . . . . . .  	L NEAR	0B5B	CSEG
$P_CHK_DELIM_EXIT0 . . . . . . .  	L NEAR	0B5E	CSEG
$P_CHK_DELIM_LOOP  . . . . . . .  	L NEAR	0B51	CSEG
$P_CHK_DELIM_NZ  . . . . . . . .  	L NEAR	0B59	CSEG
$P_CHK_EOL . . . . . . . . . . .  	N PROC	0ADD	CSEG	Length = 0036
$P_CHK_EOL_EXIT  . . . . . . . .  	L NEAR	0B10	CSEG
$P_CHK_EOL_LOOP  . . . . . . . .  	L NEAR	0B06	CSEG
$P_CHK_EOL_NZ  . . . . . . . . .  	L NEAR	0B0E	CSEG
$P_CHK_KEY_CONTROL . . . . . . .  	N PROC	02DB	CSEG	Length = 0044
$P_CHK_KEY_ERR0  . . . . . . . .  	L NEAR	030A	CSEG
$P_CHK_KEY_ERR1  . . . . . . . .  	L NEAR	030D	CSEG
$P_CHK_KEY_ERREXIT . . . . . . .  	L NEAR	0314	CSEG
$P_CHK_KEY_EXIT  . . . . . . . .  	L NEAR	031E	CSEG
$P_CHK_POS_CONTROL . . . . . . .  	N PROC	02A9	CSEG	Length = 0032
$P_CHK_SWITCH  . . . . . . . . .  	N PROC	0B74	CSEG	Length = 001E
$P_CHK_SW_CONTROL  . . . . . . .  	N PROC	0350	CSEG	Length = 0002
$P_CMPX00  . . . . . . . . . . .  	L NEAR	095A	CSEG
$P_CMPX01  . . . . . . . . . . .  	L NEAR	0964	CSEG
$P_CMPX02  . . . . . . . . . . .  	L NEAR	0980	CSEG
$P_CMPX03  . . . . . . . . . . .  	L NEAR	0987	CSEG
$P_CMPX04  . . . . . . . . . . .  	L NEAR	0974	CSEG
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:03
PARSE CODE AND CONTROL BLOCKS FOR PRINTER.SYS               Symbols-10


$P_CMPX05  . . . . . . . . . . .  	L NEAR	0983	CSEG
$P_CMPXERR0  . . . . . . . . . .  	L NEAR	099F	CSEG
$P_CMPX_ERR  . . . . . . . . . .  	L NEAR	09A8	CSEG
$P_CMPX_EXIT . . . . . . . . . .  	L NEAR	09AF	CSEG
$P_CMPX_LOOP . . . . . . . . . .  	L NEAR	094B	CSEG
$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	093C	CSEG	Length = 007E
$P_COUNTRY_INFO  . . . . . . . .  	L 	009E	CSEG
$P_COUNT_TO_EOL  . . . . . . . .  	L WORD	00DB	CSEG
$P_COVF  . . . . . . . . . . . .  	L NEAR	0668	CSEG
$P_COVF00  . . . . . . . . . . .  	L NEAR	066D	CSEG
$P_CPC00 . . . . . . . . . . . .  	L NEAR	02B7	CSEG
$P_CPC01 . . . . . . . . . . . .  	L NEAR	02D6	CSEG
$P_CPC02 . . . . . . . . . . . .  	L NEAR	02CB	CSEG
$P_CPC_EXIT  . . . . . . . . . .  	L NEAR	02D9	CSEG
$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	0BC4	CSEG
$P_DBCS01  . . . . . . . . . . .  	L NEAR	0BDF	CSEG
$P_DBCS02  . . . . . . . . . . .  	L NEAR	0BBA	CSEG
$P_DBCSEV_OFF  . . . . . . . . .  	L WORD	0009	CSEG
$P_DBCSEV_SEG  . . . . . . . . .  	L WORD	000B	CSEG
$P_DBCS_EXIT . . . . . . . . . .  	L NEAR	0BE4	CSEG
$P_DBCS_LOOP . . . . . . . . . .  	L NEAR	0BCE	CSEG
$P_DBSP1 . . . . . . . . . . . .  	NUMBER	0081	
$P_DBSP2 . . . . . . . . . . . .  	NUMBER	0040	
$P_DCC00 . . . . . . . . . . . .  	L NEAR	0519	CSEG
$P_DCC01 . . . . . . . . . . . .  	L NEAR	0535	CSEG
$P_DCC_GO  . . . . . . . . . . .  	L NEAR	0509	CSEG
$P_DCS00 . . . . . . . . . . . .  	L NEAR	04F2	CSEG
$P_DCS01 . . . . . . . . . . . .  	L NEAR	04F3	CSEG
$P_DCS_EXIT  . . . . . . . . . .  	L NEAR	04F6	CSEG
$P_DCS_LOOP  . . . . . . . . . .  	L NEAR	04DE	CSEG
$P_DO1 . . . . . . . . . . . . .  	L NEAR	0123	CSEG
$P_DO2 . . . . . . . . . . . . .  	L NEAR	012B	CSEG
$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	CSEG	Length = 004E
$P_DO_CAPS_STRING  . . . . . . .  	N PROC	04DA	CSEG	Length = 001F
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:03
PARSE CODE AND CONTROL BLOCKS FOR PRINTER.SYS               Symbols-11


$P_DO_DATE_DELIMS  . . . . . . .  	L NEAR	07B0	CSEG
$P_DO_TIME_DELIM1  . . . . . . .  	L NEAR	07AA	CSEG
$P_DQUOTE  . . . . . . . . . . .  	NUMBER	0022	
$P_DRIVE . . . . . . . . . . . .  	NUMBER	0006	
$P_DRV_ONLY  . . . . . . . . . .  	NUMBER	0100	
$P_DRV_ONLY_EXIT . . . . . . . .  	L NEAR	0AA1	CSEG
$P_DX  . . . . . . . . . . . . .  	L WORD	0006	CSEG
$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	CSEG
$P_EXIT_AT_EXTRA . . . . . . . .  	L NEAR	0ADB	CSEG
$P_EXTRA . . . . . . . . . . . .  	NUMBER	0020	
$P_FILEF00 . . . . . . . . . . .  	L NEAR	0A82	CSEG
$P_FILEF01 . . . . . . . . . . .  	L NEAR	0A7E	CSEG
$P_FILEF02 . . . . . . . . . . .  	L NEAR	0A92	CSEG
$P_FILEF03 . . . . . . . . . . .  	L NEAR	0A69	CSEG
$P_FILEF_ERR . . . . . . . . . .  	L NEAR	0A53	CSEG
$P_FILEF_LOOP0 . . . . . . . . .  	L NEAR	0A39	CSEG
$P_FILEF_LOOP1 . . . . . . . . .  	L NEAR	0A6B	CSEG
$P_FILEF_RLT . . . . . . . . . .  	L NEAR	0A90	CSEG
$P_FILESP_CHAR . . . . . . . . .  	L BYTE	00D2	CSEG
$P_FILESP_CHK  . . . . . . . . .  	N PROC	0AA2	CSEG	Length = 0015
$P_FILESP_EXIT . . . . . . . . .  	L NEAR	0AB4	CSEG
$P_FILESP_LEN  . . . . . . . . .  	NUMBER	0009	
$P_FILESP_LOOP . . . . . . . . .  	L NEAR	0AAB	CSEG
$P_FILE_CAP_PTR  . . . . . . . .  	L BYTE	00CD	CSEG
$P_FILE_FORMAT . . . . . . . . .  	N PROC	0A31	CSEG	Length = 0071
$P_FILE_SPC  . . . . . . . . . .  	NUMBER	0200	
$P_FILE_SPEC . . . . . . . . . .  	NUMBER	0005	
$P_FILL_RESULT . . . . . . . . .  	N PROC	0352	CSEG	Length = 0085
$P_FIN . . . . . . . . . . . . .  	L NEAR	0186	CSEG
$P_FLAGS . . . . . . . . . . . .  	L WORD	000D	CSEG
$P_FLAGS1  . . . . . . . . . . .  	BYTE	000D	CSEG
$P_FLAGS2  . . . . . . . . . . .  	BYTE	000E	CSEG
$P_FOUND_SYNONYM . . . . . . . .  	L WORD	0015	CSEG
$P_GETNUM00  . . . . . . . . . .  	L NEAR	07D5	CSEG
$P_GETNUM01  . . . . . . . . . .  	L NEAR	07DA	CSEG
$P_GETNUM02  . . . . . . . . . .  	L NEAR	07DE	CSEG
$P_GETNUM_EXIT . . . . . . . . .  	L NEAR	07DF	CSEG
$P_GETNUM_LOOP . . . . . . . . .  	L NEAR	0792	CSEG
$P_GET_DECNUM  . . . . . . . . .  	N PROC	078E	CSEG	Length = 0056
$P_GOT_TIME  . . . . . . . . . .  	L BYTE	009D	CSEG
$P_IF3 . . . . . . . . . . . . .  	L NEAR	0132	CSEG
$P_IF5 . . . . . . . . . . . . .  	L NEAR	0166	CSEG
$P_IF6 . . . . . . . . . . . . .  	L NEAR	0166	CSEG
$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	CSEG
$P_KEYORSW_FOUND . . . . . . . .  	L NEAR	033B	CSEG
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:03
PARSE CODE AND CONTROL BLOCKS FOR PRINTER.SYS               Symbols-12


$P_KEYORSW_LOOP  . . . . . . . .  	L NEAR	032E	CSEG
$P_KEYORSW_NOT_FOUND . . . . . .  	L NEAR	0338	CSEG
$P_KEYORSW_PTR . . . . . . . . .  	L WORD	0011	CSEG
$P_KEYWORD . . . . . . . . . . .  	NUMBER	003D	
$P_KEY_CMP . . . . . . . . . . .  	NUMBER	0008	
$P_KEY_MANAGER . . . . . . . . .  	L NEAR	0258	CSEG
$P_KEY_MGR_LOOP  . . . . . . . .  	L NEAR	0277	CSEG
$P_KEY_NOT_FOUND . . . . . . . .  	L NEAR	0285	CSEG
$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	CSEG
$P_LOC_EOL . . . . . . . . . . .  	L NEAR	0116	CSEG
$P_LPAREN  . . . . . . . . . . .  	NUMBER	0028	
$P_MAKE_LOWER  . . . . . . . . .  	NUMBER	0020	
$P_MAKE_UPPER  . . . . . . . . .  	NUMBER	00DF	
$P_MAT . . . . . . . . . . . . .  	L NEAR	03FD	CSEG
$P_MATCH01 . . . . . . . . . . .  	L NEAR	0414	CSEG
$P_MATCH03 . . . . . . . . . . .  	L NEAR	0430	CSEG
$P_MATCH04 . . . . . . . . . . .  	L NEAR	0447	CSEG
$P_MATCH05 . . . . . . . . . . .  	L NEAR	045E	CSEG
$P_MATCH07 . . . . . . . . . . .  	L NEAR	0475	CSEG
$P_MATCH08 . . . . . . . . . . .  	L NEAR	048C	CSEG
$P_MATCH09 . . . . . . . . . . .  	L NEAR	049B	CSEG
$P_MATCH2_EXIT . . . . . . . . .  	L NEAR	04B2	CSEG
$P_MATCH_EXIT  . . . . . . . . .  	L NEAR	049B	CSEG
$P_MBP_EXIT  . . . . . . . . . .  	L NEAR	034E	CSEG
$P_MBP_LOOP  . . . . . . . . . .  	L NEAR	0344	CSEG
$P_MINUS . . . . . . . . . . . .  	NUMBER	002D	
$P_MOVEBP_NUL  . . . . . . . . .  	N PROC	0344	CSEG	Length = 000C
$P_NEEDTOBEREAD  . . . . . . . .  	NUMBER	FFFF	
$P_NEG . . . . . . . . . . . . .  	NUMBER	0002	
$P_NEITHER_DELIMS  . . . . . . .  	L NEAR	07BC	CSEG
$P_NON_DBCS  . . . . . . . . . .  	L NEAR	0BE3	CSEG
$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	0B70	CSEG
$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	
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:03
PARSE CODE AND CONTROL BLOCKS FOR PRINTER.SYS               Symbols-13


$P_ORDINAL . . . . . . . . . . .  	L WORD	0000	CSEG
$P_ORIG_ORD  . . . . . . . . . .  	L WORD	0097	CSEG
$P_ORIG_SI . . . . . . . . . . .  	L WORD	009B	CSEG
$P_ORIG_STACK  . . . . . . . . .  	L WORD	0099	CSEG
$P_OUT_OF_RANGE  . . . . . . . .  	NUMBER	0006	
$P_PACK_END  . . . . . . . . . .  	L NEAR	01E1	CSEG
$P_PACK_END_BACKUP_SI  . . . . .  	L NEAR	01BB	CSEG
$P_PACK_END_BY_EOL . . . . . . .  	L NEAR	01E0	CSEG
$P_PACK_LOOP . . . . . . . . . .  	L NEAR	019E	CSEG
$P_PERIOD  . . . . . . . . . . .  	NUMBER	002E	
$P_PERIOD_ONLY . . . . . . . . .  	NUMBER	0002	
$P_PL00  . . . . . . . . . . . .  	L NEAR	01D3	CSEG
$P_PL01  . . . . . . . . . . . .  	L NEAR	01C6	CSEG
$P_PLUS  . . . . . . . . . . . .  	NUMBER	002B	
$P_POSITIONAL_MANAGER  . . . . .  	L NEAR	0204	CSEG
$P_QUOTED_FORMAT . . . . . . . .  	N PROC	09BA	CSEG	Length = 0041
$P_QUOTED_STR  . . . . . . . . .  	N PROC	09FB	CSEG	Length = 0036
$P_QUOTED_STRING . . . . . . . .  	NUMBER	0009	
$P_QUOTED_STR_EXIT . . . . . . .  	L NEAR	0A2F	CSEG
$P_QUS00 . . . . . . . . . . . .  	L NEAR	0A14	CSEG
$P_QUS01 . . . . . . . . . . . .  	L NEAR	0A20	CSEG
$P_QUS02 . . . . . . . . . . . .  	L NEAR	0A2A	CSEG
$P_QUSTR_ERR0  . . . . . . . . .  	L NEAR	0A27	CSEG
$P_QUS_ERR . . . . . . . . . . .  	L NEAR	09E9	CSEG
$P_QUS_ERR0  . . . . . . . . . .  	L NEAR	09E0	CSEG
$P_QUS_EXIT  . . . . . . . . . .  	L NEAR	09F0	CSEG
$P_QUS_LOOP  . . . . . . . . . .  	L NEAR	09FC	CSEG
$P_QU_STRING . . . . . . . . . .  	NUMBER	0080	
$P_RC  . . . . . . . . . . . . .  	L WORD	0002	CSEG
$P_RCOL00  . . . . . . . . . . .  	L NEAR	04CE	CSEG
$P_RCOL01  . . . . . . . . . . .  	L NEAR	04D4	CSEG
$P_RCOL_EXIT . . . . . . . . . .  	L NEAR	04D7	CSEG
$P_RCOL_LOOP . . . . . . . . . .  	L NEAR	04B6	CSEG
$P_RC_EOL  . . . . . . . . . . .  	NUMBER	-0001	
$P_READ_CDI  . . . . . . . . . .  	L NEAR	077E	CSEG
$P_REDO_TIME . . . . . . . . . .  	L NEAR	00F4	CSEG
$P_REG_BH_CG_SW  . . . . . . . .  	ALIAS	 BH		
$P_REG_BL_DQ_SW  . . . . . . . .  	ALIAS	 BL		
$P_REMOVE_COLON  . . . . . . . .  	N PROC	04B4	CSEG	Length = 0026
$P_REPEAT  . . . . . . . . . . .  	NUMBER	0002	
$P_RETURN_TO_CALLER  . . . . . .  	L NEAR	028C	CSEG
$P_RETURN_TO_CALLER0 . . . . . .  	L NEAR	028C	CSEG
$P_RLT00 . . . . . . . . . . . .  	L NEAR	037B	CSEG
$P_RLT01 . . . . . . . . . . . .  	L NEAR	0385	CSEG
$P_RLT02 . . . . . . . . . . . .  	L NEAR	0371	CSEG
$P_RLT03 . . . . . . . . . . . .  	L NEAR	0397	CSEG
$P_RLT04 . . . . . . . . . . . .  	L NEAR	036D	CSEG
$P_RLT05 . . . . . . . . . . . .  	L NEAR	03AA	CSEG
$P_RLT_CAP00 . . . . . . . . . .  	L NEAR	03BE	CSEG
$P_RLT_CAP01 . . . . . . . . . .  	L NEAR	03CA	CSEG
$P_RLT_CAP02 . . . . . . . . . .  	L NEAR	03C7	CSEG
$P_RLT_EXIT  . . . . . . . . . .  	L NEAR	03D5	CSEG
$P_RM_COLON  . . . . . . . . . .  	NUMBER	0010	
$P_RPAREN  . . . . . . . . . . .  	NUMBER	0029	
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:03
PARSE CODE AND CONTROL BLOCKS FOR PRINTER.SYS               Symbols-14


$P_SAVESI_CMPX . . . . . . . . .  	L WORD	000F	CSEG
$P_SAVE_EOB  . . . . . . . . . .  	L WORD	0013	CSEG
$P_SCOM00  . . . . . . . . . . .  	L NEAR	0730	CSEG
$P_SCOM01  . . . . . . . . . . .  	L NEAR	0743	CSEG
$P_SCOM02  . . . . . . . . . . .  	L NEAR	0759	CSEG
$P_SCOM03  . . . . . . . . . . .  	L NEAR	0722	CSEG
$P_SCOM04  . . . . . . . . . . .  	L NEAR	070C	CSEG
$P_SCOM05  . . . . . . . . . . .  	L NEAR	071F	CSEG
$P_SCOM_DIFFER . . . . . . . . .  	L NEAR	0764	CSEG
$P_SCOM_DIFFER0  . . . . . . . .  	L NEAR	0745	CSEG
$P_SCOM_EXIT . . . . . . . . . .  	L NEAR	076D	CSEG
$P_SCOM_LOOP . . . . . . . . . .  	L NEAR	06EC	CSEG
$P_SCOM_SAME . . . . . . . . . .  	L NEAR	0767	CSEG
$P_SEARCH_KEYORSW  . . . . . . .  	N PROC	031F	CSEG	Length = 0025
$P_SET_CDI . . . . . . . . . . .  	N PROC	0772	CSEG	Length = 001C
$P_SET_CDI_EXIT  . . . . . . . .  	L NEAR	078D	CSEG
$P_SIGNED  . . . . . . . . . . .  	NUMBER	0080	
$P_SIM00 . . . . . . . . . . . .  	L NEAR	0690	CSEG
$P_SIM01 . . . . . . . . . . . .  	L NEAR	06D3	CSEG
$P_SIMPLE_S  . . . . . . . . . .  	NUMBER	2000	
$P_SIMPLE_STRING . . . . . . . .  	N PROC	067D	CSEG	Length = 0069
$P_SIM_EXIT  . . . . . . . . . .  	L NEAR	06DC	CSEG
$P_SIM_EXIT0 . . . . . . . . . .  	L NEAR	06DE	CSEG
$P_SIM_FOUND . . . . . . . . . .  	L NEAR	06C8	CSEG
$P_SIM_LOOP  . . . . . . . . . .  	L NEAR	06AE	CSEG
$P_SINGLE_EXIT . . . . . . . . .  	L NEAR	02A7	CSEG
$P_SI_SAVE . . . . . . . . . . .  	L WORD	0004	CSEG
$P_SKIP_DELIM  . . . . . . . . .  	N PROC	0AB7	CSEG	Length = 0026
$P_SKIP_DELIM_CY . . . . . . . .  	L NEAR	0AD5	CSEG
$P_SKIP_DELIM_EXIT . . . . . . .  	L NEAR	0AD9	CSEG
$P_SKIP_DELIM_LOOP . . . . . . .  	L NEAR	0AB7	CSEG
$P_SKIP_DELIM_NCY  . . . . . . .  	L NEAR	0AD8	CSEG
$P_SLASH . . . . . . . . . . . .  	NUMBER	002F	
$P_SNUM_VAL  . . . . . . . . . .  	NUMBER	4000	
$P_SPACE . . . . . . . . . . . .  	NUMBER	0020	
$P_START . . . . . . . . . . . .  	L NEAR	018A	CSEG
$P_STRING  . . . . . . . . . . .  	NUMBER	0003	
$P_STRING_BUF  . . . . . . . . .  	L BYTE	0017	CSEG	Length = 0080
$P_STRING_BUF_END  . . . . . . .  	NEAR	0097	CSEG
$P_STRING_COMP . . . . . . . . .  	N PROC	06E6	CSEG	Length = 008C
$P_STRUC_L1  . . . . . . . . . .  	L NEAR	0B91	CSEG
$P_STRUC_L12 . . . . . . . . . .  	L NEAR	0B90	CSEG
$P_STRUC_L2  . . . . . . . . . .  	L NEAR	0B86	CSEG
$P_STRUC_L5  . . . . . . . . . .  	L NEAR	0B83	CSEG
$P_SVAL00  . . . . . . . . . . .  	L NEAR	0565	CSEG
$P_SVAL01  . . . . . . . . . . .  	L NEAR	0566	CSEG
$P_SVALUE  . . . . . . . . . . .  	N PROC	0547	CSEG	Length = 0024
$P_SVAL_IN . . . . . . . . . . .  	L NEAR	061F	CSEG
$P_SW  . . . . . . . . . . . . .  	NUMBER	0040	
$P_SWITCH  . . . . . . . . . . .  	NUMBER	002F	
$P_SW_CMP  . . . . . . . . . . .  	NUMBER	0010	
$P_SW_MANAGER  . . . . . . . . .  	L NEAR	022C	CSEG
$P_SW_MGR_LOOP . . . . . . . . .  	L NEAR	0241	CSEG
$P_SW_NOT_FOUND  . . . . . . . .  	L NEAR	024F	CSEG
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:03
PARSE CODE AND CONTROL BLOCKS FOR PRINTER.SYS               Symbols-15


$P_SYNTAX  . . . . . . . . . . .  	NUMBER	0009	
$P_T1200 . . . . . . . . . . . .  	L NEAR	0926	CSEG
$P_T1201 . . . . . . . . . . . .  	L NEAR	092E	CSEG
$P_T12_EXIT  . . . . . . . . . .  	L NEAR	0939	CSEG
$P_T12_LOOP  . . . . . . . . . .  	L NEAR	08FB	CSEG
$P_TAB . . . . . . . . . . . . .  	NUMBER	0009	
$P_TB_EQ . . . . . . . . . . . .  	NUMBER	093D	
$P_TCLR_CHR  . . . . . . . . . .  	L NEAR	0934	CSEG
$P_TERMINATOR  . . . . . . . . .  	L BYTE	0008	CSEG
$P_TIME12  . . . . . . . . . . .  	NUMBER	0004	
$P_TIME12AM  . . . . . . . . . .  	NUMBER	0001	
$P_TIMEF00 . . . . . . . . . . .  	L NEAR	07F8	CSEG
$P_TIMEF_ERR . . . . . . . . . .  	L NEAR	08DF	CSEG
$P_TIMEF_ERR0  . . . . . . . . .  	L NEAR	087E	CSEG
$P_TIMEF_ERROR . . . . . . . . .  	L NEAR	08DF	CSEG
$P_TIMEF_RLT . . . . . . . . . .  	L NEAR	0888	CSEG
$P_TIMESKIP00  . . . . . . . . .  	L NEAR	08B4	CSEG
$P_TIME_2412 . . . . . . . . . .  	N PROC	08F9	CSEG	Length = 0043
$P_TIME_4  . . . . . . . . . . .  	L NEAR	087B	CSEG
$P_TIME_AGAIN  . . . . . . . . .  	NUMBER	0002	
$P_TIME_F  . . . . . . . . . . .  	NUMBER	0008	
$P_TIME_FORMAT . . . . . . . . .  	N PROC	07E4	CSEG	Length = 0115
$P_TIME_FORMAT_EXIT  . . . . . .  	L NEAR	08EF	CSEG
$P_TIME_NOTAM  . . . . . . . . .  	L NEAR	08A0	CSEG
$P_TIME_S  . . . . . . . . . . .  	NUMBER	0800	
$P_TOO_MANY  . . . . . . . . . .  	NUMBER	0001	
$P_TOO_MANY_ERROR  . . . . . . .  	L NEAR	0223	CSEG
$P_VAL02_LOOP  . . . . . . . . .  	L NEAR	05EB	CSEG
$P_VAL02_NEXT  . . . . . . . . .  	L NEAR	062F	CSEG
$P_VAL02_SIGN  . . . . . . . . .  	L NEAR	0611	CSEG
$P_VALUE . . . . . . . . . . . .  	N PROC	056B	CSEG	Length = 00F2
$P_VALUE00 . . . . . . . . . . .  	L NEAR	05BD	CSEG
$P_VALUE01 . . . . . . . . . . .  	L NEAR	05D0	CSEG
$P_VALUE02 . . . . . . . . . . .  	L NEAR	05E2	CSEG
$P_VALUE03 . . . . . . . . . . .  	L NEAR	064A	CSEG
$P_VALUE04 . . . . . . . . . . .  	L NEAR	064A	CSEG
$P_VALUE_ERR . . . . . . . . . .  	L NEAR	064A	CSEG
$P_VALUE_ERR0  . . . . . . . . .  	L NEAR	05B9	CSEG
$P_VALUE_EXIT  . . . . . . . . .  	L NEAR	0655	CSEG
$P_VALUE_LOOP  . . . . . . . . .  	L NEAR	0574	CSEG
$P_VAL_FOUND . . . . . . . . . .  	L NEAR	0643	CSEG
$P_VAL_IN  . . . . . . . . . . .  	L NEAR	0601	CSEG
@CPU . . . . . . . . . . . . . .  	TEXT  0101h		
@FILENAME  . . . . . . . . . . .  	TEXT  parser		
@VERSION . . . . . . . . . . . .  	TEXT  510		

Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:03

PARSE CODE AND CONTROL BLOCKS FOR PRINTER.SYS               Symbols-16






   5425 Source  Lines
  15181 Total   Lines
    918 Symbols

  45538 + 130557 Bytes symbol space free

      0 Warning Errors
      0 Severe  Errors
