Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:05
PRINTER.SYS INT2FH Code                                     Page     1-1


				PAGE	,132
				TITLE	PRINTER.SYS INT2FH Code
				
				;****************** START OF SPECIFICATIONS **************************
				;
				;  MODULE NAME: PRTINT2F.ASM
				;
				;  DESCRIPTIVE NAME: PERFORM THE INT2FH FUNCTION OF PRINTER.SYS
				;
				;  FUNCTION: THE INT2FH FUNCTION OF PRINTER.SYS WILL LOCK THE PRINTER
				;	     DEVICE AND LOAD THE CODE PAGE SPECIFIED.  WHEN AN UNLOCK
				;	     IS ENCOUNTERED, THE SAVED CODE PAGE WILL BE ACTIVATED.
				;	     ATTACHED.
				;
				;  ENTRY POINT: INT2F_COM
				;
				;  INPUT: AX = AD40H (CALL IDENTIFIER)
				;	  BX = REQUESTED CODE PAGE (-1 FOR UNLOCK)
				;	  DX = 0 - LPT1
				;	       1 - LPT2
				;	       2 - LPT3
				;
				;  AT EXIT:
				;     NORMAL: CARRY CLEAR
				;
				;     ERROR: CARRY SET - CODE PAGE NOT AVAILABLE OR DEVICE IS NOT CPSW.
				;
				;  INTERNAL REFERENCES:
				;
				;     ROUTINES: CHECK_FOR_CP - CHECKS TO SEE IF CODE PAGE REQUESTED IS
				;			       AVAILABLE ON DEVICE REQUESTED.
				;		FIND_ACTIVE_CP - FINDS THE ACTIVE CODE PAGE ON SPECIFIED
				;				 DEVICE; IF AVAILABLE.
				;		LOCK_CP - VERIFIES, LOADS, AND LOCKS DEVICE CODE PAGE.
				;		UNLOCK_CP - UNLOCKS DEVICE.
				;
				;     DATA AREAS: INVOKE_BLOCK - PARAMETER BLOCK PASSED TO INVOKE PROC.
				;
				;
				;  EXTERNAL REFERENCES:
				;
				;     ROUTINES: INVOKE - ACTIVATES FONT REQUESTED.
				;
				;     DATA AREAS: BUF1 - BUFFER FOR LPT1
				;		  BUF2 - BUFFER FOR LPT2
				;		  BUF3 - BUFFER FOR LPT3
				;
				;  NOTES:
				;
				;  REVISION HISTORY:
				;	 A000 - DOS Version 4.00
				;
				;      Label: "DOS PRINTER.SYS Device Driver"
				;	      "Version 4.00 (C) Copyright 1988 Microsoft
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:05
PRINTER.SYS INT2FH Code                                     Page     1-2


				;	      "Licensed Material - Program Property of Microsoft"
				;
				;****************** END OF SPECIFICATIONS ****************************
				
				.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
 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
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:05
PRINTER.SYS INT2FH Code                                     Page     1-3


			     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	;;
			     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
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:05
PRINTER.SYS INT2FH Code                                     Page     1-4


			     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						;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			     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)
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:05
PRINTER.SYS INT2FH Code                                     Page     1-5


 = 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
			     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
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:05
PRINTER.SYS INT2FH Code                                     Page     1-6


 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
 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
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:05
PRINTER.SYS INT2FH Code                                     Page     1-7


 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				;;
			     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
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:05
PRINTER.SYS INT2FH Code                                     Page     1-8


 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
			     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						;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:05
PRINTER.SYS INT2FH Code                                     Page     1-9


			     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
			     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
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:05
PRINTER.SYS INT2FH Code                                     Page     1-10


 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				;;
 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
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:05
PRINTER.SYS INT2FH Code                                     Page     1-11


 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
 = 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						;;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:05
PRINTER.SYS INT2FH Code                                     Page     1-12


 = 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;
 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;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:05
PRINTER.SYS INT2FH Code                                     Page     1-13


 = 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	
 = AD40				PRIV_LK_CP   EQU    0AD40H	       ; multiplex number and function		    ;AN000;
 = 0000				LPT1	     EQU    0		       ;					    ;AN000;
 = 0001				LPT2	     EQU    1		       ;					    ;AN000;
 = 0002				LPT3	     EQU    2		       ;					    ;AN000;
 =-0001				UNLOCK	     EQU    -1		       ; unlock the device			    ;AN000;
 =-0001				UNDEFINED    EQU    -1		       ; undefined code page			    ;AN000;
 = FFFE				NOT_CY	     EQU    0FFFEH	       ; clear the carry in flag register	    ;AN000;
 = 0001				CY	     EQU    1		       ; set the carry in flag register 	    ;AN000;
 = 0001				FOUND	     EQU    1		       ; search flag				    ;AN000;
 = 0000				NOT_FOUND    EQU    0		       ;					    ;AN000;
				
				
				PUBLIC	INT2F_COM								    ;AN000;
				PUBLIC	ROM_INT2F								    ;AN000;
				PUBLIC	ABORT									    ;AN000;
				
				
 0000				CSEG	SEGMENT PARA PUBLIC 'CODE'                                                  ;AN000;
					ASSUME CS:CSEG								    ;AN000;
				
				
				EXTRN	INVOKE:NEAR								    ;AN000;
				EXTRN	BUF0:BYTE								    ;AN000;
				EXTRN	BUF1:BYTE								    ;AN000;
				EXTRN	BUF2:BYTE								    ;AN000;
				EXTRN	BUF3:BYTE								    ;AN000;
				
 0000  0000			ROM_INT2F    DW     ?		       ; chaining point for INT2FH		    ;AN000;
 0002  0000				     DW     ?								    ;AN000;
				
 0004  0000			COPY_BUF0    DW     0								    ;AN000;
 0006  00			PREV_LOCK    DB     OFF 							    ;AN000;
				
 0007				INVOKE_BLOCK LABEL  BYTE	       ; parameter block passed to INVOKE	    ;AN000;
 0007  0003[				     DB     3 DUP(0)	       ;					    ;AN000;
	   00			
			 ]	
				
 000A  0000			RET_STAT     DW     0		       ; returned status from INVOKE		    ;AN000;
 000C  0000000000000000			     DQ     0		       ;					    ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:05
PRINTER.SYS INT2FH Code                                     Page     1-14


 0014  0006[				     DB     6 DUP(0)	       ;					    ;AN000;
	   00			
			 ]	
				
 001A  001E R				     DW     OFFSET PARA_BLOCK  ;					    ;AN000;
 001C  ---- R			CODE_SEGB    DW     SEG CSEG	       ;					    ;AN000;
								       ;
 001E				PARA_BLOCK   LABEL  WORD	       ;					    ;AN000;
 001E  0002				     DW     TWO 	       ;					    ;AN000;
 0020  0000			REQ_CP	     DW     ?		       ; requested code page to load		    ;AN000;
								       ;
				
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; PROCEDURE_NAME: INT2F_COM
				;
				; FUNCTION:
				; THIS IS THE INTERRUPT 2FH HANDLER TO CAPTURE THE FOLLOWING FUNCTIONS:
				;
				;   AX=AD40H PRIVELEGED LOCK CP SWITCHING
				;
				; AT ENTRY: AX = AD40H
				;	    BX = CODEPAGE REQUESTED DURING LOCK.
				;		 -1 = UNLOCK
				;	    DX = 0 - LPT1
				;		 1 - LPT2
				;		 2 - LPT3
				;
				;
				; AT EXIT:
				;    NORMAL: CARRY CLEAR - DEVICE LOADED AND LOCKED
				;
				;    ERROR: CARRY SET - CODE PAGE NOT AVAILABLE OR DEVICE NOT CPSW.
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				
				
 0022				INT2F_COM  PROC   NEAR								    ;AN000;
 0022  FB				   STI									    ;AN000;
					   .IF <AX NE PRIV_LK_CP>		; is this for PRINTER?		    ;AN000;
 0023  3D AD40               3						cmp AX,PRIV_LK_CP 
 0026  74 05                 6						je $l1 
 0028  2E: FF 2E 0000 R			     JMP    DWORD PTR CS:ROM_INT2F	; no....jump to old INT2F	    ;AN000;
					   .ENDIF				;				    ;AN000;
 002D                        2	$l1: 
 002D  50				   PUSH   AX				;				    ;AN000;
 002E  55				   PUSH   BP				;				    ;AN000;
 002F  53				   PUSH   BX				; s    r			    ;AN000;
 0030  51				   PUSH   CX				;  a	e			    ;AN000;
 0031  52				   PUSH   DX				;   v	 g			    ;AN000;
 0032  57				   PUSH   DI				;    e	  s			    ;AN000;
 0033  56				   PUSH   SI				;				    ;AN000;
 0034  1E				   PUSH   DS				;				    ;AN000;
 0035  06				   PUSH   ES				;				    ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:05
PRINTER.SYS INT2FH Code                                     Page     1-15


 0036  2E: C7 06 0004 R 0000		   MOV	  CS:COPY_BUF0,ZERO		;				    ;AN000;
 003D  2E: 8C 0E 001C R			   MOV	  CS:CODE_SEGB,CS		;				    ;AN000;
 0042  8B EB				   MOV	  BP,BX 			; move req. cp to bp		    ;AN000;
					   .SELECT				; depending on the lptx..	    ;AN000;
					   .WHEN <DX EQ LPT1>			; point to the appropriate	    ;AN000;
 0044  83 FA 00              3						cmp DX,LPT1 
 0047  75 10                 6						jne $l5 
 0049  8D 1E 0000 E			     LEA   BX,BUF1			; buffer..			    ;AN000;
 004D  8D 36 0000 E			     LEA   SI,BUF0			;				    ;AN000;
 0051  2E: 89 36 0004 R			     MOV   CS:COPY_BUF0,SI		;				    ;AN000;
					   .WHEN <DX EQ LPT2>			;				    ;AN000;
 0056  EB 19                 3						jmp short $l4 
 0058  90                    3						nop 
 0059                        2	$l5: 
 0059  83 FA 01              3						cmp DX,LPT2 
 005C  75 07                 6						jne $l7 
 005E  8D 1E 0000 E			     LEA   BX,BUF2			;				    ;AN000;
					   .WHEN <DX EQ LPT3>			;				    ;AN000;
 0062  EB 0D                 3						jmp short $l4 
 0064  90                    3						nop 
 0065                        2	$l7: 
 0065  83 FA 02              3						cmp DX,LPT3 
 0068  75 06                 6						jne $l9 
 006A  8D 1E 0000 E			     LEA   BX,BUF3			;				    ;AN000;
					   .OTHERWISE				;				    ;AN000;
 006E  EB 01                 3						jmp short $l4 
 0070                        2	$l9: 
 0070  F9				     STC				; not a valid lptx..set flag	    ;AN000;
					   .ENDSELECT				;				    ;AN000;
 0071                        2	$l4: 
					   .IF NC				; process			    ;AN000;
 0071  72 0D                 6						jc $l12 
					     .IF <BP EQ UNLOCK> 		; if unlock requested		    ;AN000;
 0073  83 FD FF              3						cmp BP,UNLOCK 
 0076  75 05                 6						jne $l16 
 0078  E8 00BA R			       CALL   UNLOCK_CP 		; unlock code page.		    ;AN000;
					     .ELSE				; must be a lock request..	    ;AN000;
 007B  EB 03                 3						jmp short $l12 
 007D                        2	$l16: 
 007D  E8 0137 R			       CALL   LOCK_CP			;				    ;AN000;
					     .ENDIF				;				    ;AN000;
					   .ENDIF				;				    ;AN000;
 0080                        2	$l12: 
 0080  2E: 8B 36 0004 R			   MOV	  SI,CS:COPY_BUF0		;				    ;AN000;
 0085  9C				   PUSHF				;				    ;AN000;
					   .IF <SI NE ZERO>			; if this is lpt1...		    ;AN000;
 0086  83 FE 00              3						cmp SI,ZERO 
 0089  74 10                 6						je $l19 
 008B  2E: 8B 47 1A			     MOV    AX,CS:[BX].STATE		; copy data into prn		    ;AN000;
 008F  2E: 89 44 1A			     MOV    CS:[SI].STATE,AX		; buffer as well.		    ;AN000;
 0093  2E: 8B 47 4E			     MOV    AX,CS:[BX].SAVED_CP 	;				    ;AN000;
 0097  2E: 89 44 4E			     MOV    CS:[SI].SAVED_CP,AX 	;				    ;AN000;
					   .ENDIF				;				    ;AN000;
 009B                        2	$l19: 
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:05
PRINTER.SYS INT2FH Code                                     Page     1-16


 009B  9D				   POPF 				;				    ;AN000;
 009C  07				   POP	  ES				;				    ;AN000;
 009D  1F				   POP	  DS				; restore			    ;AN000;
 009E  5E				   POP	  SI				;				    ;AN000;
 009F  5F				   POP	  DI				;    registers			    ;AN000;
 00A0  5A				   POP	  DX				;				    ;AN000;
 00A1  59				   POP	  CX				;				    ;AN000;
 00A2  5B				   POP	  BX				;				    ;AN000;
 00A3  8B EC				   MOV	  BP,SP 			;				    ;AN000;
 00A5  8B 46 08				   MOV	  AX,[BP+8]			; load flag onto..		    ;AN000;
					   .IF NC				;				    ;AN000;
 00A8  72 05                 6						jc $l23 
 00AA  25 FFFE				     AND    AX,NOT_CY			;				    ;AN000;
					   .ELSE				;    stack flags		    ;AN000;
 00AD  EB 03                 3						jmp short $l22 
 00AF                        2	$l23: 
 00AF  0D 0001				     OR     AX,CY			;				    ;AN000;
					   .ENDIF				;				    ;AN000;
 00B2                        2	$l22: 
 00B2  89 46 08				   MOV	  [BP+8],AX			;				    ;AN000;
 00B5  5D				   POP	  BP				;				    ;AN000;
 00B6  58				   POP	  AX				;				    ;AN000;
 00B7  86 E0				   XCHG   AH,AL 			; exchange ah and al to show that.. ;AN000;
 00B9  CF			ABORT:	   IRET 				; printer.sys is present.	    ;AN000;
 00BA				INT2F_COM  ENDP 								    ;AN000;
				
				
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; PROCEDURE_NAME: UNLOCK_CP
				;
				; FUNCTION:
				; THIS FUNCTION UNLOCKS THE DEVICE THAT IS LOCKED.
				;
				; AT ENTRY:
				;	    BX - POINTS TO LPTx BUFFER
				;
				;
				; AT EXIT:
				;    NORMAL: CARRY CLEAR - DEVICE UNLOCKED.
				;
				;    ERROR: CARRY SET - ERROR DURING UNLOCK, ACTIVE CODE PAGE SET TO INACTIVE
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				
 00BA				UNLOCK_CP      PROC  NEAR							    ;AN000;
					       .IF <CS:[BX].STATE EQ LOCKED> NEAR ; is device locked?		    ;AN000;
 00BA  2E: 83 7F 1A 04       3						cmp CS:[BX].STATE,LOCKED 
 00BF  75 75                 6						jne $l26 
 00C1  90                    6					nop 
 00C2  90                    6					nop 
 00C3  90                    6					nop 
 00C4  2E: C7 47 1A 0001			 MOV   CS:[BX].STATE,CPSW	  ; change status to unlocked..     ;AN000;
 00CA  2E: 8B 6F 4E				 MOV   BP,CS:[BX].SAVED_CP	  ; get saved code page 	    ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:05
PRINTER.SYS INT2FH Code                                     Page     1-17


						 .IF <BP NE UNDEFINED>		  ; valid?..... 		    ;AN000;
 00CE  83 FD FF              3						cmp BP,UNDEFINED 
 00D1  74 44                 6						je $l30 
 00D3  33 C0					   XOR	  AX,AX 		  ;				    ;AN000;
 00D5  E8 020D R				   CALL   FIND_ACTIVE_CP	  ; find the active code page.	    ;AN000;
						   .IF <BP NE DX>		  ; are they the same..?	    ;AN000;
 00D8  3B EA                 3						cmp BP,DX 
 00DA  74 38                 6						je $l33 
 00DC  2E: 89 2E 0020 R				     MOV    CS:REQ_CP,BP	  ; no...invoke the saved code page ;AN000;
 00E1  0E					     PUSH   CS			  ;				    ;AN000;
 00E2  07					     POP    ES			  ;				    ;AN000;
 00E3  8D 3E 0007 R				     LEA    DI,INVOKE_BLOCK	  ;				    ;AN000;
 00E7  2E: 89 7F 0E				     MOV    CS:[BX].RH_PTRO,DI	  ;				    ;AN000;
 00EB  2E: 8C 47 10				     MOV    CS:[BX].RH_PTRS,ES	  ;				    ;AN000;
 00EF  E8 0000 E				     CALL   INVOKE		  ;				    ;AN000;
						     .IF <AL NE ZERO>		  ; error on invoke?		    ;AN000;
 00F2  3C 00                 3						cmp AL,ZERO 
 00F4  74 1B                 6						je $l36 
 00F6  B8 0001					       MOV    AX,ONE		  ; yes...change the active..	    ;AN000;
 00F9  E8 020D R				       CALL   FIND_ACTIVE_CP	  ; to inactive.		    ;AN000;
						       .IF <CS:COPY_BUF0 NE ZERO> ; do likewise to PRN if this	    ;AN000;
 00FC  2E: 83 3E 0004 R 00   3						cmp CS:COPY_BUF0,ZERO 
 0102  74 0A                 6						je $l38 
 0104  53						 PUSH	 BX		  ; is lpt1.			    ;AN000;
 0105  2E: 8B 1E 0004 R					 MOV	 BX,CS:COPY_BUF0  ;				    ;AN000;
 010A  E8 020D R					 CALL	 FIND_ACTIVE_CP   ;				    ;AN000;
 010D  5B						 POP	 BX		  ;				    ;AN000;
						       .ENDIF			  ;				    ;AN000;
 010E                        2	$l38: 
 010E  F9					       STC			  ; set error flag.		    ;AN000;
						     .ELSE			  ;				    ;AN000;
 010F  EB 1F                 3						jmp short $l29 
 0111                        2	$l36: 
 0111  F8					       CLC			  ; invoke ok...clear error flag    ;AN000;
						     .ENDIF			  ;				    ;AN000;
						   .ELSE			  ;				    ;AN000;
 0112  EB 1C                 3						jmp short $l29 
 0114                        2	$l33: 
 0114  F8					     CLC			  ; active = saved ..no invoke...   ;AN000;
						   .ENDIF			  ; clear error 		    ;AN000;
						 .ELSE				  ;				    ;AN000;
 0115  EB 19                 3						jmp short $l29 
 0117                        2	$l30: 
 0117  B8 0001					   MOV	  AX,ONE		  ; saved cp was inactive...change..;AN000;
 011A  E8 020D R				   CALL   FIND_ACTIVE_CP	  ; active to inactive. 	    ;AN000;
						   .IF <CS:COPY_BUF0 NE ZERO>	  ; do likewise to PRN if this	    ;AN000;
 011D  2E: 83 3E 0004 R 00   3						cmp CS:COPY_BUF0,ZERO 
 0123  74 0A                 6						je $l44 
 0125  53					     PUSH    BX 		  ; is lpt1.			    ;AN000;
 0126  2E: 8B 1E 0004 R				     MOV     BX,CS:COPY_BUF0	  ;				    ;AN000;
 012B  E8 020D R				     CALL    FIND_ACTIVE_CP	  ;				    ;AN000;
 012E  5B					     POP     BX 		  ;				    ;AN000;
						   .ENDIF			  ;				    ;AN000;
 012F                        2	$l44: 
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:05
PRINTER.SYS INT2FH Code                                     Page     1-18


 012F  F8					   CLC				  ;				    ;AN000;
						 .ENDIF 			  ;				    ;AN000;
 0130                        2	$l29: 
 0130  2E: C7 47 4E FFFF			 MOV	CS:[BX].SAVED_CP,UNDEFINED; reset the saved cp		    ;AN000;
					       .ENDIF				  ;				    ;AN000;
 0136                        2	$l26: 
 0136  C3				       RET								    ;AN000;
 0137				UNLOCK_CP      ENDP								    ;AN000;
				
				
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; PROCEDURE_NAME: LOCK_CP
				;
				; FUNCTION:
				; THIS FUNCTION LOCKS THE DEVICE WITH THE CODE PAGE REQUESTED.
				;
				; AT ENTRY: BP - REQUESTED CODE PAGE
				;	    BX - POINTS TO LPTx BUFFER
				;
				;
				; AT EXIT:
				;    NORMAL: CARRY CLEAR - DEVICE LOCKED.
				;
				;    ERROR: CARRY SET - ERROR, CODE PAGE NOT LOCKED.
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				
 0137				LOCK_CP        PROC   NEAR							    ;AN000;
					       .IF <CS:[BX].STATE EQ LOCKED>	; if this was previously locked..   ;AN000;
 0137  2E: 83 7F 1A 04       3						cmp CS:[BX].STATE,LOCKED 
 013C  75 0F                 6						jne $l48 
 013E  2E: C6 06 0006 R 01			 MOV	CS:PREV_LOCK,ON 	; then...set flag and...	    ;AN000;
 0144  2E: C7 47 1A 0001			 MOV	CS:[BX].STATE,CPSW	; change to unlock for this proc    ;AN000;
					       .ELSEIF <CS:[BX].STATE EQ CPSW>	; if this is unlocked...	    ;AN000;
 014A  EB 11                 3						jmp short $l47 
 014C  90                    3						nop 
 014D                        2	$l48: 
 014D  2E: 83 7F 1A 01       3						cmp CS:[BX].STATE,CPSW 
 0152  75 08                 6						jne $l50 
 0154  2E: C6 06 0006 R 00			 MOV	CS:PREV_LOCK,OFF	; then set flag off.		    ;AN000;
					       .ELSE				;				    ;AN000;
 015A  EB 01                 3						jmp short $l47 
 015C                        2	$l50: 
 015C  F9					 STC				; neither...set error		    ;AN000;
					       .ENDIF				;				    ;AN000;
 015D                        2	$l47: 
					       .IF NC				;				    ;AN000;
 015D  72 55                 6						jc $l53 
 015F  E8 01B5 R				 CALL	CHECK_FOR_CP		; yes..see if req cp is available.  ;AN000;
						 .IF NC 			; yes...			    ;AN000;
 0162  72 50                 6						jc $l53 
 0164  33 C0					   XOR	   AX,AX		;				    ;AN000;
 0166  E8 020D R				   CALL    FIND_ACTIVE_CP	; find the active code page	    ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:05
PRINTER.SYS INT2FH Code                                     Page     1-19


						   .IF <BP NE DX>		; is it the same as requested?..    ;AN000;
 0169  3B EA                 3						cmp BP,DX 
 016B  74 34                 6						je $l60 
 016D  2E: 89 2E 0020 R				     MOV    CS:REQ_CP,BP	; no..invoke the requested cp	    ;AN000;
 0172  0E					     PUSH   CS			;				    ;AN000;
 0173  07					     POP    ES			;				    ;AN000;
 0174  8D 3E 0007 R				     LEA    DI,INVOKE_BLOCK	;				    ;AN000;
 0178  2E: 89 7F 0E				     MOV    CS:[BX].RH_PTRO,DI	;				    ;AN000;
 017C  2E: 8C 47 10				     MOV    CS:[BX].RH_PTRS,ES	;				    ;AN000;
 0180  52					     PUSH   DX			;				    ;AN000;
 0181  E8 0000 E				     CALL   INVOKE		;				    ;AN000;
 0184  5A					     POP    DX			;				    ;AN000;
						     .IF <AL NE ZERO>		; error on invoke?		    ;AN000;
 0185  3C 00                 3						cmp AL,ZERO 
 0187  74 03                 6						je $l63 
 0189  F9					       STC			; yes...set error flag. 	    ;AN000;
						     .ELSE			;				    ;AN000;
 018A  EB 28                 3						jmp short $l53 
 018C                        2	$l63: 
 018C  2E: C7 47 1A 0004			       MOV    CS:[BX].STATE,LOCKED ; no, 'lock' the printer device  ;AN000;
						       .IF <CS:PREV_LOCK EQ OFF> ; if we were not locked..	    ;AN000;
 0192  2E: 80 3E 0006 R 00   3						cmp CS:PREV_LOCK,OFF 
 0198  75 04                 6						jne $l66 
 019A  2E: 89 57 4E					 MOV	CS:[BX].SAVED_CP,DX ; and..save the old code page.  ;AN000;
						       .ENDIF			;				    ;AN000;
 019E                        2	$l66: 
 019E  F8					       CLC			; clear error flag.		    ;AN000;
						     .ENDIF			;				    ;AN000;
						   .ELSE			;				    ;AN000;
 019F  EB 13                 3						jmp short $l53 
 01A1                        2	$l60: 
 01A1  2E: C7 47 1A 0004			     MOV    CS:[BX].STATE,LOCKED ; 'lock' the printer device        ;AN000;
						     .IF <CS:PREV_LOCK EQ OFF>	; if we were not locked..	    ;AN000;
 01A7  2E: 80 3E 0006 R 00   3						cmp CS:PREV_LOCK,OFF 
 01AD  75 04                 6						jne $l70 
 01AF  2E: 89 57 4E				       MOV    CS:[BX].SAVED_CP,DX ; and..save the old code page.    ;AN000;
						     .ENDIF			;				    ;AN000;
 01B3                        2	$l70: 
 01B3  F8					     CLC			; clear the error flag		    ;AN000;
						   .ENDIF			;				    ;AN000;
						 .ENDIF 			;				    ;AN000;
					       .ENDIF				;				    ;AN000;
 01B4                        2	$l53: 
 01B4  C3				       RET								    ;AN000;
 01B5				LOCK_CP        ENDP								    ;AN000;
				
				
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; PROCEDURE_NAME: CHECK_FOR_CP
				;
				; FUNCTION:
				; THIS FUNCTION SEARCHES FOR THE CODE PAGE REQUESTED TO SEE IF IT HAS
				; BEEN PREPARED OR IS A HARDWARE CODE PAGE
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:05
PRINTER.SYS INT2FH Code                                     Page     1-20


				;
				;
				; AT ENTRY: BP = CODE PAGE REQUESTED
				;	    BX - POINTS TO LPTx BUFFER
				;
				;
				; AT EXIT:
				;    NORMAL: CARRY CLEAR - CODE PAGE IS VALID.
				;
				;    ERROR: CARRY SET - CODE PAGE NOT AVAILABLE.
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				
				
 01B5				CHECK_FOR_CP  PROC   NEAR							    ;AN000;
 01B5  52				      PUSH   DX 							    ;AN000;
 01B6  BA 0000				      MOV    DX,NOT_FOUND		; initialize flag		    ;AN000;
 01B9  2E: 8B 4F 2A			      MOV    CX,CS:[BX].RSLMX		; load number of RAM slots	    ;AN000;
 01BD  2E: 8B 7F 2E			      MOV    DI,CS:[BX].RAMSO		; load DI with table offset	    ;AN000;
					      .WHILE <DX EQ NOT_FOUND> AND	; whil not found and....	    ;AN000;
 01C1                        2	$l73: 
 01C1  83 FA 00              3						cmp DX,NOT_FOUND 
 01C4  75 15                 6						jne $l74 
					      .WHILE <CX NE ZERO>		; while  still slots to check..     ;AN000;
 01C6  83 F9 00              3						cmp CX,ZERO 
 01C9  74 10                 6						je $l74 
						.IF <CS:[DI].SLT_CP EQ BP>	; is it this one??		    ;AN000;
 01CB  2E: 39 2D             3						cmp CS:[DI].SLT_CP,BP 
 01CE  75 05                 6						jne $l77 
 01D0  BA 0001					  MOV	 DX,FOUND		; yes....set flag		    ;AN000;
						.ELSE				;				    ;AN000;
 01D3  EB EC                 3						jmp short $l73 
 01D5                        2	$l77: 
 01D5  83 C7 04					  ADD	 DI,TYPE SLTS		; no..point to next entry	    ;AN000;
 01D8  49					  DEC	 CX			; decrement the count		    ;AN000;
						.ENDIF				;				    ;AN000;
					      .ENDWHILE 			;				    ;AN000;
 01D9  EB E6                 3						jmp $l73 
 01DB                        2	$l74: 
					      .IF <DX EQ NOT_FOUND>		; if we didn't find it then..       ;AN000;
 01DB  83 FA 00              3						cmp DX,NOT_FOUND 
 01DE  75 22                 6						jne $l80 
 01E0  2E: 8B 4F 20				MOV    CX,CS:[BX].HSLMX 	; check hardware		    ;AN000;
 01E4  2E: 8B 7F 24				MOV    DI,CS:[BX].HARDSO	; load regs as before.		    ;AN000;
						.WHILE <DX EQ NOT_FOUND> AND	; while not found and.. 	    ;AN000;
 01E8                        2	$l83: 
 01E8  83 FA 00              3						cmp DX,NOT_FOUND 
 01EB  75 15                 6						jne $l80 
						.WHILE <CX NE ZERO>		; still have slots to check..	    ;AN000;
 01ED  83 F9 00              3						cmp CX,ZERO 
 01F0  74 10                 6						je $l80 
						  .IF <CS:[DI].SLT_CP EQ BP>	; is it this one?		    ;AN000;
 01F2  2E: 39 2D             3						cmp CS:[DI].SLT_CP,BP 
 01F5  75 05                 6						jne $l87 
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:05
PRINTER.SYS INT2FH Code                                     Page     1-21


 01F7  BA 0001					    MOV    DX,FOUND		; yes...set flag.		    ;AN000;
						  .ELSE 			;				    ;AN000;
 01FA  EB EC                 3						jmp short $l83 
 01FC                        2	$l87: 
 01FC  83 C7 04					    ADD    DI,TYPE SLTS 	; no ..point to next entry	    ;AN000;
 01FF  49					    DEC    CX			; and decrement count.		    ;AN000;
						  .ENDIF			;				    ;AN000;
						.ENDWHILE			;				    ;AN000;
 0200  EB E6                 3						jmp $l83 
					      .ENDIF				;				    ;AN000;
 0202                        2	$l80: 
					      .IF <DX EQ NOT_FOUND>		;				    ;AN000;
 0202  83 FA 00              3						cmp DX,NOT_FOUND 
 0205  75 03                 6						jne $l91 
 0207  F9					STC				; set flag appropriately	    ;AN000;
					      .ELSE				;				    ;AN000;
 0208  EB 01                 3						jmp short $l90 
 020A                        2	$l91: 
 020A  F8					CLC				;				    ;AN000;
					      .ENDIF				;				    ;AN000;
 020B                        2	$l90: 
 020B  5A				      POP    DX 			;				    ;AN000;
 020C  C3				      RET				;				    ;AN000;
 020D				CHECK_FOR_CP  ENDP								    ;AN000;
				
				
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;
				; PROCEDURE_NAME: FIND_ACTIVE_CP
				;
				; FUNCTION:
				; THIS FUNCTION SEARCHES FOR THE ACTIVE CODE PAGE. IF REQUESTED, THE
				; CODE PAGE IS MADE INACTIVE.
				;
				;
				; AT ENTRY:
				;	    BX - POINTS TO LPTx BUFFER
				;	    AX = 0 - LEAVE AS ACTIVE
				;	    AX = 1 - DE-ACTIVATE
				;
				;
				; AT EXIT:
				;    NORMAL: DX - ACTIVE CODE PAGE.  (NO ACTIVE = -1)
				;
				;    ERROR: N/A
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				
				
 020D				FIND_ACTIVE_CP PROC   NEAR							    ;AN000;
 020D  BA FFFF				       MOV    DX,UNDEFINED		 ; initialize register		    ;AN000;
 0210  2E: 8B 4F 2A			       MOV    CX,CS:[BX].RSLMX		 ; load number of RAM slots	    ;AN000;
 0214  2E: 8B 7F 2E			       MOV    DI,CS:[BX].RAMSO		 ; load DI with table offset	    ;AN000;
					       .WHILE <DX EQ UNDEFINED> AND	 ; whil not found and....	    ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:05
PRINTER.SYS INT2FH Code                                     Page     1-22


 0218                        2	$l94: 
 0218  83 FA FF              3						cmp DX,UNDEFINED 
 021B  75 23                 6						jne $l95 
					       .WHILE <CX NE ZERO>		 ; while still slots to check..     ;AN000;
 021D  83 F9 00              3						cmp CX,ZERO 
 0220  74 1E                 6						je $l95 
						 .IF <BIT CS:[DI].SLT_AT AND AT_ACT> ; is it this one?? 	    ;AN000;
 0222  2E: F7 45 02 2000     3						test CS:[DI].SLT_AT,AT_ACT 
 0228  74 10                 6						jz $l98 
 022A  2E: 8B 15				   MOV	  DX,CS:[DI].SLT_CP	 ; yes....load value		    ;AN000;
						   .IF <AX EQ ONE>		 ; is deactivate requested?	    ;AN000;
 022D  3D 0001               3						cmp AX,ONE 
 0230  75 E6                 6						jne $l94 
 0232  2E: C7 45 02 1000			     MOV    CS:[DI].SLT_AT,AT_OCC; yes...change attrib. to occupied ;AN000;
						   .ENDIF			 ;				    ;AN000;
						 .ELSE				 ;				    ;AN000;
 0238  EB DE                 3						jmp short $l94 
 023A                        2	$l98: 
 023A  83 C7 04					   ADD	  DI,TYPE SLTS		 ; no..point to next entry	    ;AN000;
 023D  49					   DEC	  CX			 ; decrement the count		    ;AN000;
						 .ENDIF 			 ;				    ;AN000;
					       .ENDWHILE			 ;				    ;AN000;
 023E  EB D8                 3						jmp $l94 
 0240                        2	$l95: 
					       .IF <DX EQ UNDEFINED>		 ; if we didn't find it then..      ;AN000;
 0240  83 FA FF              3						cmp DX,UNDEFINED 
 0243  75 30                 6						jne $l104 
 0245  2E: 8B 4F 20				 MOV	CX,CS:[BX].HSLMX	 ; check hardware		    ;AN000;
 0249  2E: 8B 7F 24				 MOV	DI,CS:[BX].HARDSO	 ; load regs as before. 	    ;AN000;
						 .WHILE <DX EQ UNDEFINED> AND	 ; while not found and..	    ;AN000;
 024D                        2	$l107: 
 024D  83 FA FF              3						cmp DX,UNDEFINED 
 0250  75 23                 6						jne $l104 
						 .WHILE <CX NE ZERO>		 ; still have slots to check..	    ;AN000;
 0252  83 F9 00              3						cmp CX,ZERO 
 0255  74 1E                 6						je $l104 
						   .IF <BIT CS:[DI].SLT_AT AND AT_ACT> ; is it this one??	    ;AN000;
 0257  2E: F7 45 02 2000     3						test CS:[DI].SLT_AT,AT_ACT 
 025D  74 10                 6						jz $l111 
 025F  2E: 8B 15				     MOV    DX,CS:[DI].SLT_CP	 ; yes....load value		    ;AN000;
						     .IF <AX EQ ONE>		 ; is deactivate requested?	    ;AN000;
 0262  3D 0001               3						cmp AX,ONE 
 0265  75 E6                 6						jne $l107 
 0267  2E: C7 45 02 1000			       MOV    CS:[DI].SLT_AT,AT_OCC; yes...change attrib to occupied;AN000;
						     .ENDIF			 ;				    ;AN000;
						   .ELSE			 ;				    ;AN000;
 026D  EB DE                 3						jmp short $l107 
 026F                        2	$l111: 
 026F  83 C7 04					     ADD    DI,TYPE SLTS	 ; no ..point to next entry	    ;AN000;
 0272  49					     DEC    CX			 ; and decrement count. 	    ;AN000;
						   .ENDIF			 ;				    ;AN000;
						 .ENDWHILE			 ;				    ;AN000;
 0273  EB D8                 3						jmp $l107 
					       .ENDIF				 ;				    ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:05
PRINTER.SYS INT2FH Code                                     Page     1-23


 0275                        2	$l104: 
 0275  C3				       RET				 ;				    ;AN000;
 0276				FIND_ACTIVE_CP ENDP								    ;AN000;
				
 0276				CSEG	   ENDS
					   END

Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:05
PRINTER.SYS INT2FH Code                                     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

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
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:05
PRINTER.SYS INT2FH Code                                     Symbols-2


  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
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
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:05
PRINTER.SYS INT2FH Code                                     Symbols-3


  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
  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
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:05
PRINTER.SYS INT2FH Code                                     Symbols-4


  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
  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 . . . . . . . . . . . . . .  	0276	PARA	PUBLIC	'CODE'

Symbols:            

                N a m e         	Type	 Value	 Attr

ABORT  . . . . . . . . . . . . .  	L NEAR	00B9	CSEG	Global
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	
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:05
PRINTER.SYS INT2FH Code                                     Symbols-5


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]		
BUF0 . . . . . . . . . . . . . .  	V BYTE	0000	CSEG	External
BUF1 . . . . . . . . . . . . . .  	V BYTE	0000	CSEG	External
BUF2 . . . . . . . . . . . . . .  	V BYTE	0000	CSEG	External
BUF3 . . . . . . . . . . . . . .  	V BYTE	0000	CSEG	External

CHECK_FOR_CP . . . . . . . . . .  	N PROC	01B5	CSEG	Length = 0058
CMD_GIO  . . . . . . . . . . . .  	NUMBER	0013	
CMD_INI  . . . . . . . . . . . .  	NUMBER	0000	
CMD_WRT  . . . . . . . . . . . .  	NUMBER	0008	
CODE_SEGB  . . . . . . . . . . .  	L WORD	001C	CSEG
COMPLEX  . . . . . . . . . . . .  	NUMBER	0004	
COPY_BUF0  . . . . . . . . . . .  	L WORD	0004	CSEG
CPSW . . . . . . . . . . . . . .  	NUMBER	0001	
CTL5202_OFFS . . . . . . . . . .  	NUMBER	0008	
CTL_MAX  . . . . . . . . . . . .  	NUMBER	0020	
CY . . . . . . . . . . . . . . .  	NUMBER	0001	

DESG_END . . . . . . . . . . . .  	NUMBER	0003	
DESG_WR  . . . . . . . . . . . .  	NUMBER	0002	
DEVN_LEN . . . . . . . . . . . .  	NUMBER	0008	
DSF_CARTCP . . . . . . . . . . .  	NUMBER	0001	
DSF_FIFOCP . . . . . . . . . . .  	NUMBER	8000	

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

FAIL . . . . . . . . . . . . . .  	NUMBER	4000	
FIND_ACTIVE_CP . . . . . . . . .  	N PROC	020D	CSEG	Length = 0069
FIVE . . . . . . . . . . . . . .  	NUMBER	0005	
FLAG_RESTART . . . . . . . . . .  	NUMBER	0001	
FOUND  . . . . . . . . . . . . .  	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]		
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:05
PRINTER.SYS INT2FH Code                                     Symbols-6



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

HARDSL_MAX . . . . . . . . . . .  	NUMBER	000C	
HP . . . . . . . . . . . . . . .  	TEXT  DS:[SI]		

INT2F_COM  . . . . . . . . . . .  	N PROC	0022	CSEG	Global	Length = 0098
INVOKE . . . . . . . . . . . . .  	L NEAR	0000	CSEG	External
INVOKE_BLOCK . . . . . . . . . .  	L BYTE	0007	CSEG

LOADED . . . . . . . . . . . . .  	NUMBER	2000	
LOCKED . . . . . . . . . . . . .  	NUMBER	0004	
LOCK_CP  . . . . . . . . . . . .  	N PROC	0137	CSEG	Length = 007E
LPT1 . . . . . . . . . . . . . .  	NUMBER	0000	
LPT2 . . . . . . . . . . . . . .  	NUMBER	0001	
LPT3 . . . . . . . . . . . . . .  	NUMBER	0002	

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	
NOT_CY . . . . . . . . . . . . .  	NUMBER	FFFE	
NOT_FOUND  . . . . . . . . . . .  	NUMBER	0000	
NUMBER . . . . . . . . . . . . .  	NUMBER	0001	

OFF  . . . . . . . . . . . . . .  	NUMBER	0000	
ON . . . . . . . . . . . . . . .  	NUMBER	0001	
ONE  . . . . . . . . . . . . . .  	NUMBER	0001	

PARA_BLOCK . . . . . . . . . . .  	L WORD	001E	CSEG
PREV_LOCK  . . . . . . . . . . .  	L BYTE	0006	CSEG
PRIV_LK_CP . . . . . . . . . . .  	NUMBER	AD40	
PSE  . . . . . . . . . . . . . .  	TEXT  ES:[DI]		

RAMSL_MAX  . . . . . . . . . . .  	NUMBER	000C	
RC_EOL . . . . . . . . . . . . .  	NUMBER	-0001	
RC_NO_ERROR  . . . . . . . . . .  	NUMBER	0000	
RC_OP_MISSING  . . . . . . . . .  	NUMBER	0002	
REFRESH  . . . . . . . . . . . .  	NUMBER	0800	
REPLX  . . . . . . . . . . . . .  	NUMBER	8000	
REQ_CP . . . . . . . . . . . . .  	L WORD	0020	CSEG
RET_STAT . . . . . . . . . . . .  	L WORD	000A	CSEG
RH . . . . . . . . . . . . . . .  	TEXT  ES:[DI]		
ROM_INT2F  . . . . . . . . . . .  	L WORD	0000	CSEG	Global
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:05
PRINTER.SYS INT2FH Code                                     Symbols-7



SEVEN  . . . . . . . . . . . . .  	NUMBER	0007	
SIX  . . . . . . . . . . . . . .  	NUMBER	0006	
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	

TABLE_LEN  . . . . . . . . . . .  	NUMBER	0122	
TEN  . . . . . . . . . . . . . .  	NUMBER	000A	
THREE  . . . . . . . . . . . . .  	NUMBER	0003	
TWO  . . . . . . . . . . . . . .  	NUMBER	0002	
TYPE_DISPLAY . . . . . . . . . .  	NUMBER	0001	
TYPE_PRINTER . . . . . . . . . .  	NUMBER	0002	

UNDEFINED  . . . . . . . . . . .  	NUMBER	-0001	
UNLOCK . . . . . . . . . . . . .  	NUMBER	-0001	
UNLOCK_CP  . . . . . . . . . . .  	N PROC	00BA	CSEG	Length = 007D

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

$L1  . . . . . . . . . . . . . .  	L NEAR	002D	CSEG
$L104  . . . . . . . . . . . . .  	L NEAR	0275	CSEG
$L107  . . . . . . . . . . . . .  	L NEAR	024D	CSEG
$L111  . . . . . . . . . . . . .  	L NEAR	026F	CSEG
$L12 . . . . . . . . . . . . . .  	L NEAR	0080	CSEG
$L16 . . . . . . . . . . . . . .  	L NEAR	007D	CSEG
$L19 . . . . . . . . . . . . . .  	L NEAR	009B	CSEG
$L22 . . . . . . . . . . . . . .  	L NEAR	00B2	CSEG
$L23 . . . . . . . . . . . . . .  	L NEAR	00AF	CSEG
$L26 . . . . . . . . . . . . . .  	L NEAR	0136	CSEG
$L29 . . . . . . . . . . . . . .  	L NEAR	0130	CSEG
$L30 . . . . . . . . . . . . . .  	L NEAR	0117	CSEG
$L33 . . . . . . . . . . . . . .  	L NEAR	0114	CSEG
$L36 . . . . . . . . . . . . . .  	L NEAR	0111	CSEG
$L38 . . . . . . . . . . . . . .  	L NEAR	010E	CSEG
$L4  . . . . . . . . . . . . . .  	L NEAR	0071	CSEG
$L44 . . . . . . . . . . . . . .  	L NEAR	012F	CSEG
$L47 . . . . . . . . . . . . . .  	L NEAR	015D	CSEG
$L48 . . . . . . . . . . . . . .  	L NEAR	014D	CSEG
$L5  . . . . . . . . . . . . . .  	L NEAR	0059	CSEG
$L50 . . . . . . . . . . . . . .  	L NEAR	015C	CSEG
Microsoft (R) Macro Assembler Version 5.10                  5/17/24 09:44:05
PRINTER.SYS INT2FH Code                                     Symbols-8


$L53 . . . . . . . . . . . . . .  	L NEAR	01B4	CSEG
$L60 . . . . . . . . . . . . . .  	L NEAR	01A1	CSEG
$L63 . . . . . . . . . . . . . .  	L NEAR	018C	CSEG
$L66 . . . . . . . . . . . . . .  	L NEAR	019E	CSEG
$L7  . . . . . . . . . . . . . .  	L NEAR	0065	CSEG
$L70 . . . . . . . . . . . . . .  	L NEAR	01B3	CSEG
$L73 . . . . . . . . . . . . . .  	L NEAR	01C1	CSEG
$L74 . . . . . . . . . . . . . .  	L NEAR	01DB	CSEG
$L77 . . . . . . . . . . . . . .  	L NEAR	01D5	CSEG
$L80 . . . . . . . . . . . . . .  	L NEAR	0202	CSEG
$L83 . . . . . . . . . . . . . .  	L NEAR	01E8	CSEG
$L87 . . . . . . . . . . . . . .  	L NEAR	01FC	CSEG
$L9  . . . . . . . . . . . . . .  	L NEAR	0070	CSEG
$L90 . . . . . . . . . . . . . .  	L NEAR	020B	CSEG
$L91 . . . . . . . . . . . . . .  	L NEAR	020A	CSEG
$L94 . . . . . . . . . . . . . .  	L NEAR	0218	CSEG
$L95 . . . . . . . . . . . . . .  	L NEAR	0240	CSEG
$L98 . . . . . . . . . . . . . .  	L NEAR	023A	CSEG
$LL1 . . . . . . . . . . . . . .  	NUMBER	0001	
$LL104 . . . . . . . . . . . . .  	NUMBER	0068	
$LL12  . . . . . . . . . . . . .  	NUMBER	000C	
$LL19  . . . . . . . . . . . . .  	NUMBER	0013	
$LL22  . . . . . . . . . . . . .  	NUMBER	0016	
$LL26  . . . . . . . . . . . . .  	NUMBER	001A	
$LL29  . . . . . . . . . . . . .  	NUMBER	001D	
$LL38  . . . . . . . . . . . . .  	NUMBER	0026	
$LL44  . . . . . . . . . . . . .  	NUMBER	002C	
$LL53  . . . . . . . . . . . . .  	NUMBER	0035	
$LL66  . . . . . . . . . . . . .  	NUMBER	0042	
$LL70  . . . . . . . . . . . . .  	NUMBER	0046	
$LL80  . . . . . . . . . . . . .  	NUMBER	0050	
$LL90  . . . . . . . . . . . . .  	NUMBER	005A	
$NOPS  . . . . . . . . . . . . .  	NUMBER	0003	
@CPU . . . . . . . . . . . . . .  	TEXT  0101h		
@FILENAME  . . . . . . . . . . .  	TEXT  prtint2f		
@VERSION . . . . . . . . . . . .  	TEXT  510		


   1729 Source  Lines
  16868 Total   Lines
    587 Symbols

  46496 + 152397 Bytes symbol space free

      0 Warning Errors
      0 Severe  Errors
